From 30e17bf0fab7926809050859a06f5747f2b7d901 Mon Sep 17 00:00:00 2001 From: Maciek Sakrejda Date: Tue, 20 Oct 2020 15:35:51 -0700 Subject: [PATCH] Check and report problematic log collection settings (#95) Some Postgres settings almost always cause a drastic increase in log volume for little actual benefit. They tend to cause operational problems for the collector (due to the load of additional log parsing) and the pganalyze service itself (or indeed, likely for any service that would process collector snapshots), and do not add any meaningful insights. Furthermore, we found that these settings are often turned on accidentally. To avoid these issues, add some client-side checks in the collector to disable log processing if any of the problematic settings are on. The settings in question are: * log_min_duration_statement [1] less than 100ms * log_min_messages [2] set to 'all' * log_duration [3] set to 'on' If any of these are set to these unsupported values, log collection will be disabled. The settings are re-checked every full snapshot, and can be reset with a collector reload. [1]: https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-MIN-DURATION-STATEMENT [2]: https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-MIN-MESSAGES [3]: https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-DURATION --- grant/default.go | 2 +- grant/logs.go | 2 +- input/{collector_config.go => collector.go} | 61 + input/collector_platform.go | 35 - input/collector_stats.go | 40 - input/full.go | 2 +- input/logs.go | 2 +- input/postgres/establish_connection.go | 6 +- input/postgres/explain.go | 2 +- input/postgres/helpers.go | 2 +- input/postgres/schema.go | 2 +- input/postgres/statements.go | 2 +- input/system/azure/log_receiver.go | 6 +- input/system/azure/log_subscriber.go | 2 +- input/system/azure/test_run.go | 4 +- input/system/google_cloudsql/log_receiver.go | 6 +- .../system/google_cloudsql/log_subscriber.go | 2 +- input/system/google_cloudsql/test_run.go | 4 +- input/system/heroku/log_receiver.go | 16 +- input/system/selfhosted/log_receiver.go | 8 +- input/system/selfhosted/test_run.go | 14 +- logs/stream/stream.go | 15 +- logs/validate_config.go | 49 + main.go | 4 +- output/compact.go | 4 +- output/compact_activity.go | 2 +- output/compact_logs.go | 2 +- output/compact_system.go | 2 +- output/full.go | 12 +- .../pganalyze_collector/full_snapshot.pb.go | 1656 +++++++++-------- output/report.go | 4 +- output/transform/activity.go | 2 +- output/transform/logs.go | 8 +- output/transform/postgres_query.go | 2 +- protobuf | 2 +- reports/bloat.go | 2 +- reports/buffercache.go | 2 +- reports/report.go | 2 +- reports/sequence.go | 2 +- reports/vacuum.go | 2 +- runner/activity.go | 8 +- runner/full.go | 56 +- runner/logs.go | 69 +- runner/queries.go | 8 +- runner/reports.go | 8 +- state/state.go | 8 + state/state_file.go | 4 +- 47 files changed, 1127 insertions(+), 1028 deletions(-) rename input/{collector_config.go => collector.go} (56%) delete mode 100644 input/collector_platform.go delete mode 100644 input/collector_stats.go create mode 100644 logs/validate_config.go diff --git a/grant/default.go b/grant/default.go index 5bbe1f52e..5fe468e85 100644 --- a/grant/default.go +++ b/grant/default.go @@ -10,7 +10,7 @@ import ( "github.com/pganalyze/collector/util" ) -func GetDefaultGrant(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.Grant, error) { +func GetDefaultGrant(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.Grant, error) { req, err := http.NewRequest("GET", server.Config.APIBaseURL+"/v2/snapshots/grant", nil) if err != nil { return state.Grant{}, err diff --git a/grant/logs.go b/grant/logs.go index 9085ff0cf..811ceea4f 100644 --- a/grant/logs.go +++ b/grant/logs.go @@ -10,7 +10,7 @@ import ( "github.com/pganalyze/collector/util" ) -func GetLogsGrant(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.GrantLogs, error) { +func GetLogsGrant(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.GrantLogs, error) { req, err := http.NewRequest("GET", server.Config.APIBaseURL+"/v2/snapshots/grant_logs", nil) if err != nil { return state.GrantLogs{}, err diff --git a/input/collector_config.go b/input/collector.go similarity index 56% rename from input/collector_config.go rename to input/collector.go index 60d5c9ad2..035d17bd9 100644 --- a/input/collector_config.go +++ b/input/collector.go @@ -2,11 +2,72 @@ package input import ( "os" + "runtime" "github.com/pganalyze/collector/config" "github.com/pganalyze/collector/state" + "github.com/pganalyze/collector/util" + "github.com/shirou/gopsutil/host" + "github.com/shirou/gopsutil/process" ) +func getMemoryRssBytes() uint64 { + pid := os.Getpid() + + p, err := process.NewProcess(int32(pid)) + if err != nil { + return 0 + } + + mem, err := p.MemoryInfo() + if err != nil { + return 0 + } + + return mem.RSS +} + +func getCollectorStats() state.CollectorStats { + var memStats runtime.MemStats + runtime.ReadMemStats(&memStats) + + return state.CollectorStats{ + GoVersion: runtime.Version(), + ActiveGoroutines: int32(runtime.NumGoroutine()), + CgoCalls: runtime.NumCgoCall(), + MemoryHeapAllocatedBytes: memStats.HeapAlloc, + MemoryHeapObjects: memStats.HeapObjects, + MemorySystemBytes: memStats.Sys, + MemoryRssBytes: getMemoryRssBytes(), + } +} + +func getCollectorPlatform(globalCollectionOpts state.CollectionOpts, logger *util.Logger) state.CollectorPlatform { + hostInfo, err := host.Info() + if err != nil { + if globalCollectionOpts.TestRun { + logger.PrintVerbose("Could not get collector host information: %s", err) + } + return state.CollectorPlatform{} + } + + var virtSystem string + if hostInfo.VirtualizationRole == "guest" { + virtSystem = hostInfo.VirtualizationSystem + } + return state.CollectorPlatform{ + StartedAt: globalCollectionOpts.StartedAt, + Architecture: runtime.GOARCH, + Hostname: hostInfo.Hostname, + OperatingSystem: hostInfo.OS, + Platform: hostInfo.Platform, + PlatformFamily: hostInfo.PlatformFamily, + PlatformVersion: hostInfo.PlatformVersion, + KernelVersion: hostInfo.KernelVersion, + VirtualizationSystem: virtSystem, + } +} + func getCollectorConfig(c config.ServerConfig) state.CollectorConfig { return state.CollectorConfig{ SectionName: c.SectionName, diff --git a/input/collector_platform.go b/input/collector_platform.go deleted file mode 100644 index 9772c7eb3..000000000 --- a/input/collector_platform.go +++ /dev/null @@ -1,35 +0,0 @@ -package input - -import ( - "runtime" - - "github.com/pganalyze/collector/state" - "github.com/pganalyze/collector/util" - "github.com/shirou/gopsutil/host" -) - -func getCollectorPlatform(globalCollectionOpts state.CollectionOpts, logger *util.Logger) state.CollectorPlatform { - hostInfo, err := host.Info() - if err != nil { - if globalCollectionOpts.TestRun { - logger.PrintVerbose("Could not get collector host information: %s", err) - } - return state.CollectorPlatform{} - } - - var virtSystem string - if hostInfo.VirtualizationRole == "guest" { - virtSystem = hostInfo.VirtualizationSystem - } - return state.CollectorPlatform{ - StartedAt: globalCollectionOpts.StartedAt, - Architecture: runtime.GOARCH, - Hostname: hostInfo.Hostname, - OperatingSystem: hostInfo.OS, - Platform: hostInfo.Platform, - PlatformFamily: hostInfo.PlatformFamily, - PlatformVersion: hostInfo.PlatformVersion, - KernelVersion: hostInfo.KernelVersion, - VirtualizationSystem: virtSystem, - } -} diff --git a/input/collector_stats.go b/input/collector_stats.go deleted file mode 100644 index 33f1e7a78..000000000 --- a/input/collector_stats.go +++ /dev/null @@ -1,40 +0,0 @@ -package input - -import ( - "os" - "runtime" - - "github.com/pganalyze/collector/state" - "github.com/shirou/gopsutil/process" -) - -func getMemoryRssBytes() uint64 { - pid := os.Getpid() - - p, err := process.NewProcess(int32(pid)) - if err != nil { - return 0 - } - - mem, err := p.MemoryInfo() - if err != nil { - return 0 - } - - return mem.RSS -} - -func getCollectorStats() state.CollectorStats { - var memStats runtime.MemStats - runtime.ReadMemStats(&memStats) - - return state.CollectorStats{ - GoVersion: runtime.Version(), - ActiveGoroutines: int32(runtime.NumGoroutine()), - CgoCalls: runtime.NumCgoCall(), - MemoryHeapAllocatedBytes: memStats.HeapAlloc, - MemoryHeapObjects: memStats.HeapObjects, - MemorySystemBytes: memStats.Sys, - MemoryRssBytes: getMemoryRssBytes(), - } -} diff --git a/input/full.go b/input/full.go index dbb7cf6a3..33cbd9f9d 100644 --- a/input/full.go +++ b/input/full.go @@ -14,7 +14,7 @@ import ( ) // CollectFull - Collects a "full" snapshot of all data we need on a regular interval -func CollectFull(server state.Server, connection *sql.DB, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (ps state.PersistedState, ts state.TransientState, err error) { +func CollectFull(server *state.Server, connection *sql.DB, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (ps state.PersistedState, ts state.TransientState, err error) { systemType := server.Config.SystemType ps.CollectedAt = time.Now() diff --git a/input/logs.go b/input/logs.go index 3946f50eb..d87a0e88e 100644 --- a/input/logs.go +++ b/input/logs.go @@ -10,7 +10,7 @@ import ( ) // DownloadLogs - Downloads a "logs" snapshot of log data we need on a regular interval -func DownloadLogs(server state.Server, prevLogState state.PersistedLogState, collectionOpts state.CollectionOpts, logger *util.Logger) (tls state.TransientLogState, pls state.PersistedLogState, err error) { +func DownloadLogs(server *state.Server, prevLogState state.PersistedLogState, collectionOpts state.CollectionOpts, logger *util.Logger) (tls state.TransientLogState, pls state.PersistedLogState, err error) { var querySamples []state.PostgresQuerySample tls.CollectedAt = time.Now() diff --git a/input/postgres/establish_connection.go b/input/postgres/establish_connection.go index 2393a5113..6e8fb6f47 100644 --- a/input/postgres/establish_connection.go +++ b/input/postgres/establish_connection.go @@ -10,7 +10,7 @@ import ( "github.com/pganalyze/collector/util" ) -func EstablishConnection(server state.Server, logger *util.Logger, globalCollectionOpts state.CollectionOpts, databaseName string) (connection *sql.DB, err error) { +func EstablishConnection(server *state.Server, logger *util.Logger, globalCollectionOpts state.CollectionOpts, databaseName string) (connection *sql.DB, err error) { connection, err = connectToDb(server.Config, logger, globalCollectionOpts, databaseName) if err != nil { if err.Error() == "pq: SSL is not enabled on the server" && (server.Config.DbSslMode == "prefer" || server.Config.DbSslMode == "") { @@ -75,7 +75,7 @@ func SetStatementTimeout(connection *sql.DB, statementTimeoutMs int32) { return } -func SetDefaultStatementTimeout(connection *sql.DB, logger *util.Logger, server state.Server) { +func SetDefaultStatementTimeout(connection *sql.DB, logger *util.Logger, server *state.Server) { statementTimeoutMs := server.Grant.Config.Features.StatementTimeoutMs if statementTimeoutMs == 0 { // Default value statementTimeoutMs = 30000 @@ -92,7 +92,7 @@ func SetDefaultStatementTimeout(connection *sql.DB, logger *util.Logger, server return } -func SetQueryTextStatementTimeout(connection *sql.DB, logger *util.Logger, server state.Server) { +func SetQueryTextStatementTimeout(connection *sql.DB, logger *util.Logger, server *state.Server) { queryTextStatementTimeoutMs := server.Grant.Config.Features.StatementTimeoutMsQueryText if queryTextStatementTimeoutMs == 0 { // Default value queryTextStatementTimeoutMs = 120000 diff --git a/input/postgres/explain.go b/input/postgres/explain.go index 15aac77b4..3a77aa9de 100644 --- a/input/postgres/explain.go +++ b/input/postgres/explain.go @@ -13,7 +13,7 @@ import ( "github.com/pganalyze/collector/util" ) -func RunExplain(server state.Server, inputs []state.PostgresQuerySample, collectionOpts state.CollectionOpts, logger *util.Logger) (outputs []state.PostgresQuerySample) { +func RunExplain(server *state.Server, inputs []state.PostgresQuerySample, collectionOpts state.CollectionOpts, logger *util.Logger) (outputs []state.PostgresQuerySample) { var samplesByDb = make(map[string]([]state.PostgresQuerySample)) skip := func(sample state.PostgresQuerySample) bool { diff --git a/input/postgres/helpers.go b/input/postgres/helpers.go index 697b109eb..952790987 100644 --- a/input/postgres/helpers.go +++ b/input/postgres/helpers.go @@ -71,7 +71,7 @@ SELECT setting FROM pg_settings WHERE name = '%s'` -func GetPostgresSetting(settingName string, server state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger) (string, error) { +func GetPostgresSetting(settingName string, server *state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger) (string, error) { var value string db, err := EstablishConnection(server, prefixedLogger, globalCollectionOpts, "") diff --git a/input/postgres/schema.go b/input/postgres/schema.go index 32d5a3bb8..089e7417e 100644 --- a/input/postgres/schema.go +++ b/input/postgres/schema.go @@ -7,7 +7,7 @@ import ( "github.com/pganalyze/collector/util" ) -func CollectAllSchemas(server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, ps state.PersistedState, ts state.TransientState, systemType string) (state.PersistedState, state.TransientState) { +func CollectAllSchemas(server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, ps state.PersistedState, ts state.TransientState, systemType string) (state.PersistedState, state.TransientState) { schemaDbNames := []string{} if server.Config.DbAllNames { diff --git a/input/postgres/statements.go b/input/postgres/statements.go index ee100feb7..00ea95558 100644 --- a/input/postgres/statements.go +++ b/input/postgres/statements.go @@ -78,7 +78,7 @@ func ResetStatements(logger *util.Logger, db *sql.DB, systemType string) error { return nil } -func GetStatements(server state.Server, logger *util.Logger, db *sql.DB, globalCollectionOpts state.CollectionOpts, postgresVersion state.PostgresVersion, showtext bool, systemType string) (state.PostgresStatementMap, state.PostgresStatementTextMap, state.PostgresStatementStatsMap, error) { +func GetStatements(server *state.Server, logger *util.Logger, db *sql.DB, globalCollectionOpts state.CollectionOpts, postgresVersion state.PostgresVersion, showtext bool, systemType string) (state.PostgresStatementMap, state.PostgresStatementTextMap, state.PostgresStatementStatsMap, error) { var err error var totalTimeField string var optionalFields string diff --git a/input/system/azure/log_receiver.go b/input/system/azure/log_receiver.go index 0fbf50336..ddbea4d20 100644 --- a/input/system/azure/log_receiver.go +++ b/input/system/azure/log_receiver.go @@ -40,11 +40,11 @@ type AzureEventHubData struct { Records []AzurePostgresLogRecord `json:"records"` } -func SetupLogReceiver(ctx context.Context, servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, azureLogStream <-chan AzurePostgresLogRecord) { +func SetupLogReceiver(ctx context.Context, servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, azureLogStream <-chan AzurePostgresLogRecord) { logReceiver(ctx, servers, azureLogStream, globalCollectionOpts, logger, nil) } -func logReceiver(ctx context.Context, servers []state.Server, in <-chan AzurePostgresLogRecord, globalCollectionOpts state.CollectionOpts, logger *util.Logger, logTestSucceeded chan<- bool) { +func logReceiver(ctx context.Context, servers []*state.Server, in <-chan AzurePostgresLogRecord, globalCollectionOpts state.CollectionOpts, logger *util.Logger, logTestSucceeded chan<- bool) { go func() { logLinesByServer := make(map[config.ServerIdentifier][]state.LogLine) @@ -94,7 +94,7 @@ func logReceiver(ctx context.Context, servers []state.Server, in <-chan AzurePos case <-timeout: for identifier := range logLinesByServer { if len(logLinesByServer[identifier]) > 0 { - server := state.Server{} + server := &state.Server{} for _, s := range servers { if s.Config.Identifier == identifier { server = s diff --git a/input/system/azure/log_subscriber.go b/input/system/azure/log_subscriber.go index ef403d448..4d5f73dbd 100644 --- a/input/system/azure/log_subscriber.go +++ b/input/system/azure/log_subscriber.go @@ -114,7 +114,7 @@ func setupEventHubReceiver(ctx context.Context, wg *sync.WaitGroup, logger *util return nil } -func SetupLogSubscriber(ctx context.Context, wg *sync.WaitGroup, globalCollectionOpts state.CollectionOpts, logger *util.Logger, servers []state.Server, azureLogStream chan AzurePostgresLogRecord) error { +func SetupLogSubscriber(ctx context.Context, wg *sync.WaitGroup, globalCollectionOpts state.CollectionOpts, logger *util.Logger, servers []*state.Server, azureLogStream chan AzurePostgresLogRecord) error { // This map is used to avoid duplicate receivers to the same Azure Event Hub eventHubReceivers := make(map[string]bool) diff --git a/input/system/azure/test_run.go b/input/system/azure/test_run.go index ae584aff3..f1ccc7c3b 100644 --- a/input/system/azure/test_run.go +++ b/input/system/azure/test_run.go @@ -10,11 +10,11 @@ import ( "github.com/pganalyze/collector/util" ) -func LogTestRun(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) error { +func LogTestRun(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) error { cctx, cancel := context.WithCancel(context.Background()) // We're testing one server at a time during the test run for now - servers := []state.Server{server} + servers := []*state.Server{server} logTestSucceeded := make(chan bool, 1) azureLogStream := make(chan AzurePostgresLogRecord, 500) diff --git a/input/system/google_cloudsql/log_receiver.go b/input/system/google_cloudsql/log_receiver.go index 30deda994..5151024cc 100644 --- a/input/system/google_cloudsql/log_receiver.go +++ b/input/system/google_cloudsql/log_receiver.go @@ -19,11 +19,11 @@ type LogStreamItem struct { Content string } -func SetupLogReceiver(ctx context.Context, servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, gcpLogStream <-chan LogStreamItem) { +func SetupLogReceiver(ctx context.Context, servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, gcpLogStream <-chan LogStreamItem) { logReceiver(ctx, servers, gcpLogStream, globalCollectionOpts, logger, nil) } -func logReceiver(ctx context.Context, servers []state.Server, in <-chan LogStreamItem, globalCollectionOpts state.CollectionOpts, logger *util.Logger, logTestSucceeded chan<- bool) { +func logReceiver(ctx context.Context, servers []*state.Server, in <-chan LogStreamItem, globalCollectionOpts state.CollectionOpts, logger *util.Logger, logTestSucceeded chan<- bool) { go func() { logLinesByServer := make(map[config.ServerIdentifier][]state.LogLine) @@ -70,7 +70,7 @@ func logReceiver(ctx context.Context, servers []state.Server, in <-chan LogStrea case <-timeout: for identifier := range logLinesByServer { if len(logLinesByServer[identifier]) > 0 { - server := state.Server{} + server := &state.Server{} for _, s := range servers { if s.Config.Identifier == identifier { server = s diff --git a/input/system/google_cloudsql/log_subscriber.go b/input/system/google_cloudsql/log_subscriber.go index b1eb3ccb8..c28f2d807 100644 --- a/input/system/google_cloudsql/log_subscriber.go +++ b/input/system/google_cloudsql/log_subscriber.go @@ -96,7 +96,7 @@ func setupPubSubSubscriber(ctx context.Context, wg *sync.WaitGroup, logger *util return nil } -func SetupLogSubscriber(ctx context.Context, wg *sync.WaitGroup, globalCollectionOpts state.CollectionOpts, logger *util.Logger, servers []state.Server, gcpLogStream chan LogStreamItem) error { +func SetupLogSubscriber(ctx context.Context, wg *sync.WaitGroup, globalCollectionOpts state.CollectionOpts, logger *util.Logger, servers []*state.Server, gcpLogStream chan LogStreamItem) error { // This map is used to avoid duplicate receivers to the same subscriber gcpPubSubHandlers := make(map[string]bool) diff --git a/input/system/google_cloudsql/test_run.go b/input/system/google_cloudsql/test_run.go index 304164065..9ce251057 100644 --- a/input/system/google_cloudsql/test_run.go +++ b/input/system/google_cloudsql/test_run.go @@ -11,11 +11,11 @@ import ( "github.com/pganalyze/collector/util" ) -func LogTestRun(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) error { +func LogTestRun(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) error { cctx, cancel := context.WithCancel(context.Background()) // We're testing one server at a time during the test run for now - servers := []state.Server{server} + servers := []*state.Server{server} logTestSucceeded := make(chan bool, 1) gcpLogStream := make(chan LogStreamItem, 500) diff --git a/input/system/heroku/log_receiver.go b/input/system/heroku/log_receiver.go index c206e70f8..5f3a64ee3 100644 --- a/input/system/heroku/log_receiver.go +++ b/input/system/heroku/log_receiver.go @@ -39,7 +39,7 @@ type SystemSample struct { WriteIops float64 `logfmt:"sample#write-iops"` } -func SetupLogReceiver(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, herokuLogStream <-chan HerokuLogStreamItem) { +func SetupLogReceiver(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, herokuLogStream <-chan HerokuLogStreamItem) { go logReceiver(servers, herokuLogStream, globalCollectionOpts, logger) for _, server := range servers { @@ -51,7 +51,7 @@ func SetupLogReceiver(servers []state.Server, globalCollectionOpts state.Collect } } -func catchIdentifyServerLine(sourceName string, content string, nameToServer map[string]state.Server, servers []state.Server) map[string]state.Server { +func catchIdentifyServerLine(sourceName string, content string, nameToServer map[string]*state.Server, servers []*state.Server) map[string]*state.Server { identifyParts := regexp.MustCompile(`^pganalyze-collector-identify: ([\w_]+)`).FindStringSubmatch(content) if len(identifyParts) == 2 { for _, server := range servers { @@ -64,7 +64,7 @@ func catchIdentifyServerLine(sourceName string, content string, nameToServer map return nameToServer } -func processSystemMetrics(timestamp time.Time, content []byte, nameToServer map[string]state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, namespace string) { +func processSystemMetrics(timestamp time.Time, content []byte, nameToServer map[string]*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger, namespace string) { var sample SystemSample err := logfmt.Unmarshal(content, &sample) if err != nil { @@ -135,7 +135,7 @@ func processSystemMetrics(timestamp time.Time, content []byte, nameToServer map[ return } -func makeLogLine(timestamp time.Time, backendPid int64, logLineNumber int64, logLevel string, content string, nameToServer map[string]state.Server) *state.LogLine { +func makeLogLine(timestamp time.Time, backendPid int64, logLineNumber int64, logLevel string, content string, nameToServer map[string]*state.Server) *state.LogLine { var logLine state.LogLine logLine.CollectedAt = time.Now() @@ -152,7 +152,7 @@ func makeLogLine(timestamp time.Time, backendPid int64, logLineNumber int64, log return &logLine } -func logStreamItemToLogLine(item HerokuLogStreamItem, servers []state.Server, nameToServer map[string]state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (map[string]state.Server, *state.LogLine, string) { +func logStreamItemToLogLine(item HerokuLogStreamItem, servers []*state.Server, nameToServer map[string]*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (map[string]*state.Server, *state.LogLine, string) { timestamp, err := time.Parse(time.RFC3339, string(item.Header.Time)) if err != nil { return nameToServer, nil, "" @@ -195,12 +195,12 @@ func logStreamItemToLogLine(item HerokuLogStreamItem, servers []state.Server, na return nameToServer, newLogLine, sourceName } -func logReceiver(servers []state.Server, in <-chan HerokuLogStreamItem, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func logReceiver(servers []*state.Server, in <-chan HerokuLogStreamItem, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { var logLinesByName map[string][]state.LogLine - var nameToServer map[string]state.Server + var nameToServer map[string]*state.Server logLinesByName = make(map[string][]state.LogLine) - nameToServer = make(map[string]state.Server) + nameToServer = make(map[string]*state.Server) for { item, ok := <-in diff --git a/input/system/selfhosted/log_receiver.go b/input/system/selfhosted/log_receiver.go index ad5e12335..117abca99 100644 --- a/input/system/selfhosted/log_receiver.go +++ b/input/system/selfhosted/log_receiver.go @@ -31,7 +31,7 @@ SELECT setting FROM pg_settings WHERE name = '%s'` -func getPostgresSetting(settingName string, server state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger) (string, error) { +func getPostgresSetting(settingName string, server *state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger) (string, error) { var value string db, err := postgres.EstablishConnection(server, prefixedLogger, globalCollectionOpts, "") @@ -50,7 +50,7 @@ func getPostgresSetting(settingName string, server state.Server, globalCollectio // DiscoverLogLocation - Tries to find the log location for a currently running Postgres // process and outputs the presumed location using the logger -func DiscoverLogLocation(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func DiscoverLogLocation(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { for _, server := range servers { prefixedLogger := logger.WithPrefix(server.Config.SectionName) @@ -121,7 +121,7 @@ func DiscoverLogLocation(servers []state.Server, globalCollectionOpts state.Coll // SetupLogTails - Sets up continuously running log tails for all servers with a // local log directory or file specified -func SetupLogTails(ctx context.Context, servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func SetupLogTails(ctx context.Context, servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { for _, server := range servers { prefixedLogger := logger.WithPrefix(server.Config.SectionName) @@ -356,7 +356,7 @@ func setupDockerTail(ctx context.Context, containerName string, out chan<- strin return nil } -func logReceiver(ctx context.Context, server state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger, logTestSucceeded chan<- bool) chan<- string { +func logReceiver(ctx context.Context, server *state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger, logTestSucceeded chan<- bool) chan<- string { logStream := make(chan string) go func() { diff --git a/input/system/selfhosted/test_run.go b/input/system/selfhosted/test_run.go index 03f3cf4f4..57e95aada 100644 --- a/input/system/selfhosted/test_run.go +++ b/input/system/selfhosted/test_run.go @@ -6,29 +6,19 @@ import ( "time" "github.com/pganalyze/collector/input/postgres" - "github.com/pganalyze/collector/logs" "github.com/pganalyze/collector/state" "github.com/pganalyze/collector/util" ) // TestLogTail - Tests the tailing of a log file (without watching it continuously) // as well as parsing and analyzing the log data -func TestLogTail(server state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger) error { +func TestLogTail(server *state.Server, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger) error { cctx, cancel := context.WithCancel(context.Background()) - logLinePrefix, err := getPostgresSetting("log_line_prefix", server, globalCollectionOpts, prefixedLogger) - if err != nil { - cancel() - return err - } else if !logs.IsSupportedPrefix(logLinePrefix) { - cancel() - return fmt.Errorf("Unsupported log_line_prefix setting: '%s'", logLinePrefix) - } - logTestSucceeded := make(chan bool, 1) logStream := logReceiver(cctx, server, globalCollectionOpts, prefixedLogger, logTestSucceeded) - err = setupLogLocationTail(cctx, server.Config.LogLocation, logStream, prefixedLogger) + err := setupLogLocationTail(cctx, server.Config.LogLocation, logStream, prefixedLogger) if err != nil { cancel() return err diff --git a/logs/stream/stream.go b/logs/stream/stream.go index 7aba23017..82cedcad2 100644 --- a/logs/stream/stream.go +++ b/logs/stream/stream.go @@ -229,7 +229,7 @@ func AnalyzeStreamInGroups(logLines []state.LogLine) (state.TransientLogState, s // LogTestCollectorIdentify - Checks for the special "pganalyze-collector-identify:" event // (used on log pipelines that forward messages under than 10 seconds) -func LogTestCollectorIdentify(server state.Server, logFile state.LogFile, logTestSucceeded chan<- bool) { +func LogTestCollectorIdentify(server *state.Server, logFile state.LogFile, logTestSucceeded chan<- bool) { for _, logLine := range logFile.LogLines { if logLine.Classification == pganalyze_collector.LogLineInformation_PGA_COLLECTOR_IDENTIFY && logLine.Details["config_section"] == server.Config.SectionName { @@ -240,12 +240,12 @@ func LogTestCollectorIdentify(server state.Server, logFile state.LogFile, logTes // LogTestAnyEvent - Checks for any log message // (used on log pipelines that take longer than 10 seconds, e.g. Azure Event Hub) -func LogTestAnyEvent(server state.Server, logFile state.LogFile, logTestSucceeded chan<- bool) { +func LogTestAnyEvent(server *state.Server, logFile state.LogFile, logTestSucceeded chan<- bool) { logTestSucceeded <- true } // LogTestNone - Don't confirm the log test -func LogTestNone(server state.Server, logFile state.LogFile, logTestSucceeded chan<- bool) { +func LogTestNone(server *state.Server, logFile state.LogFile, logTestSucceeded chan<- bool) { } // ProcessLogStream - Accepts one or more log lines to be analyzed and processed @@ -255,7 +255,14 @@ func LogTestNone(server state.Server, logFile state.LogFile, logTestSucceeded ch // the next call. // // The caller is not expected to do any special time-based buffering themselves. -func ProcessLogStream(server state.Server, logLines []state.LogLine, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger, logTestSucceeded chan<- bool, logTestFunc func(s state.Server, lf state.LogFile, lt chan<- bool)) []state.LogLine { +func ProcessLogStream(server *state.Server, logLines []state.LogLine, globalCollectionOpts state.CollectionOpts, prefixedLogger *util.Logger, logTestSucceeded chan<- bool, logTestFunc func(s *state.Server, lf state.LogFile, lt chan<- bool)) []state.LogLine { + server.CollectionStatusMutex.Lock() + if server.CollectionStatus.LogSnapshotDisabled { + server.CollectionStatusMutex.Unlock() + return []state.LogLine{} + } + server.CollectionStatusMutex.Unlock() + logState, logFile, tooFreshLogLines, err := AnalyzeStreamInGroups(logLines) if err != nil { prefixedLogger.PrintError("%s", err) diff --git a/logs/validate_config.go b/logs/validate_config.go new file mode 100644 index 000000000..4aa9dec64 --- /dev/null +++ b/logs/validate_config.go @@ -0,0 +1,49 @@ +package logs + +import ( + "fmt" + "strconv" + "strings" + + "github.com/pganalyze/collector/state" +) + +const MinSupportedLogMinDurationStatement = 100 + +func ValidateLogCollectionConfig(server *state.Server, settings []state.PostgresSetting) (bool, string) { + var disabled = false + var disabledReasons []string + if server.Config.DisableLogs { + disabled = true + disabledReasons = append(disabledReasons, "the collector setting disable_logs or environment variable PGA_DISABLE_LOGS is set") + } + + if !disabled { + for _, setting := range settings { + if setting.Name == "log_min_duration_statement" && setting.CurrentValue.Valid { + numVal, err := strconv.Atoi(setting.CurrentValue.String) + if err != nil { + continue + } + if numVal != -1 && numVal < MinSupportedLogMinDurationStatement { + disabled = true + disabledReasons = append(disabledReasons, + fmt.Sprintf("log_min_duration_statement is set to '%d', below minimum supported threshold '%d'", numVal, MinSupportedLogMinDurationStatement), + ) + } + } else if setting.Name == "log_duration" && setting.CurrentValue.Valid { + if setting.CurrentValue.String == "on" { + disabled = true + disabledReasons = append(disabledReasons, "log_duration is set to unsupported value 'on'") + } + } else if setting.Name == "log_statement" && setting.CurrentValue.Valid { + if setting.CurrentValue.String == "all" { + disabled = true + disabledReasons = append(disabledReasons, "log_statement is set to unsupported value 'all'") + } + } + } + } + + return disabled, strings.Join(disabledReasons, "; ") +} diff --git a/main.go b/main.go index 28c41b384..41883968c 100644 --- a/main.go +++ b/main.go @@ -37,7 +37,7 @@ import ( const streamBufferLen = 500 func run(ctx context.Context, wg *sync.WaitGroup, globalCollectionOpts state.CollectionOpts, logger *util.Logger, configFilename string) (keepRunning bool, reloadOkay bool) { - var servers []state.Server + var servers []*state.Server keepRunning = false reloadOkay = false @@ -72,7 +72,7 @@ func run(ctx context.Context, wg *sync.WaitGroup, globalCollectionOpts state.Col serverConfigs := conf.Servers for _, config := range serverConfigs { - servers = append(servers, state.Server{Config: config, StateMutex: &sync.Mutex{}, LogStateMutex: &sync.Mutex{}, ActivityStateMutex: &sync.Mutex{}}) + servers = append(servers, &state.Server{Config: config, StateMutex: &sync.Mutex{}, LogStateMutex: &sync.Mutex{}, ActivityStateMutex: &sync.Mutex{}, CollectionStatusMutex: &sync.Mutex{}}) if config.EnableReports { hasAnyReportsEnabled = true } diff --git a/output/compact.go b/output/compact.go index 5db87a63e..03bb50769 100644 --- a/output/compact.go +++ b/output/compact.go @@ -21,7 +21,7 @@ import ( uuid "github.com/satori/go.uuid" ) -func uploadAndSubmitCompactSnapshot(s pganalyze_collector.CompactSnapshot, grant state.Grant, server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, collectedAt time.Time, quiet bool, kind string) error { +func uploadAndSubmitCompactSnapshot(s pganalyze_collector.CompactSnapshot, grant state.Grant, server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, collectedAt time.Time, quiet bool, kind string) error { var err error var data []byte @@ -89,7 +89,7 @@ func debugCompactOutputAsJSON(logger *util.Logger, compressedData bytes.Buffer) fmt.Printf("%s\n", out.String()) } -func submitCompactSnapshot(server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, s3Location string, collectedAt time.Time, quiet bool, kind string) error { +func submitCompactSnapshot(server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, s3Location string, collectedAt time.Time, quiet bool, kind string) error { requestURL := server.Config.APIBaseURL + "/v2/snapshots/compact" if collectionOpts.TestRun { diff --git a/output/compact_activity.go b/output/compact_activity.go index 8c322524a..c1d07fb4d 100644 --- a/output/compact_activity.go +++ b/output/compact_activity.go @@ -8,7 +8,7 @@ import ( "github.com/pganalyze/collector/util" ) -func SubmitCompactActivitySnapshot(server state.Server, grant state.Grant, collectionOpts state.CollectionOpts, logger *util.Logger, activityState state.TransientActivityState) error { +func SubmitCompactActivitySnapshot(server *state.Server, grant state.Grant, collectionOpts state.CollectionOpts, logger *util.Logger, activityState state.TransientActivityState) error { as, r := transform.ActivityStateToCompactActivitySnapshot(server, activityState) if server.Config.FilterQuerySample == "all" { diff --git a/output/compact_logs.go b/output/compact_logs.go index 2242b7b03..887980098 100644 --- a/output/compact_logs.go +++ b/output/compact_logs.go @@ -8,7 +8,7 @@ import ( ) // UploadAndSendLogs - Filters the log file, then uploads it to the storage and sends the metadata to the API -func UploadAndSendLogs(server state.Server, grant state.GrantLogs, collectionOpts state.CollectionOpts, logger *util.Logger, logState state.TransientLogState) error { +func UploadAndSendLogs(server *state.Server, grant state.GrantLogs, collectionOpts state.CollectionOpts, logger *util.Logger, logState state.TransientLogState) error { for idx := range logState.LogFiles { logState.LogFiles[idx].FilterLogSecret = state.ParseFilterLogSecret(server.Config.FilterLogSecret) } diff --git a/output/compact_system.go b/output/compact_system.go index cd54dfec5..8828f47c8 100644 --- a/output/compact_system.go +++ b/output/compact_system.go @@ -9,7 +9,7 @@ import ( "github.com/pganalyze/collector/util" ) -func SubmitCompactSystemSnapshot(server state.Server, grant state.Grant, collectionOpts state.CollectionOpts, logger *util.Logger, systemState state.SystemState, collectedAt time.Time) error { +func SubmitCompactSystemSnapshot(server *state.Server, grant state.Grant, collectionOpts state.CollectionOpts, logger *util.Logger, systemState state.SystemState, collectedAt time.Time) error { ss := transform.SystemStateToCompactSystemSnapshot(systemState) s := pganalyze_collector.CompactSnapshot{ diff --git a/output/full.go b/output/full.go index 273919332..a20a4401c 100644 --- a/output/full.go +++ b/output/full.go @@ -20,10 +20,10 @@ import ( "github.com/pganalyze/collector/output/transform" "github.com/pganalyze/collector/state" "github.com/pganalyze/collector/util" - "github.com/satori/go.uuid" + uuid "github.com/satori/go.uuid" ) -func SendFull(server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, newState state.PersistedState, diffState state.DiffState, transientState state.TransientState, collectedIntervalSecs uint32) error { +func SendFull(server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, newState state.PersistedState, diffState state.DiffState, transientState state.TransientState, collectedIntervalSecs uint32) error { s := transform.StateToSnapshot(newState, diffState, transientState) s.CollectedIntervalSecs = collectedIntervalSecs s.CollectorErrors = logger.ErrorMessages @@ -31,12 +31,12 @@ func SendFull(server state.Server, collectionOpts state.CollectionOpts, logger * return submitFull(s, server, collectionOpts, logger, newState.CollectedAt, false) } -func SendFailedFull(server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger) error { +func SendFailedFull(server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger) error { s := snapshot.FullSnapshot{FailedRun: true, CollectorErrors: logger.ErrorMessages} return submitFull(s, server, collectionOpts, logger, time.Now(), true) } -func submitFull(s snapshot.FullSnapshot, server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, collectedAt time.Time, quiet bool) error { +func submitFull(s snapshot.FullSnapshot, server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, collectedAt time.Time, quiet bool) error { var err error var data []byte @@ -47,6 +47,8 @@ func submitFull(s snapshot.FullSnapshot, server state.Server, collectionOpts sta s.CollectorVersion = util.CollectorNameAndVersion s.SnapshotUuid = snapshotUUID.String() s.CollectedAt, _ = ptypes.TimestampProto(collectedAt) + s.CollectorLogSnapshotDisabled = server.CollectionStatus.LogSnapshotDisabled + s.CollectorLogSnapshotDisabledReason = server.CollectionStatus.LogSnapshotDisabledReason data, err = proto.Marshal(&s) if err != nil { @@ -104,7 +106,7 @@ func debugOutputAsJSON(logger *util.Logger, compressedData bytes.Buffer) { fmt.Printf("%s\n", out.String()) } -func submitSnapshot(server state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, s3Location string, collectedAt time.Time, quiet bool) error { +func submitSnapshot(server *state.Server, collectionOpts state.CollectionOpts, logger *util.Logger, s3Location string, collectedAt time.Time, quiet bool) error { requestURL := server.Config.APIBaseURL + "/v2/snapshots" if collectionOpts.TestRun { diff --git a/output/pganalyze_collector/full_snapshot.pb.go b/output/pganalyze_collector/full_snapshot.pb.go index 9d79d1d2e..f6fd33dd5 100644 --- a/output/pganalyze_collector/full_snapshot.pb.go +++ b/output/pganalyze_collector/full_snapshot.pb.go @@ -327,25 +327,27 @@ type FullSnapshot struct { unknownFields protoimpl.UnknownFields // Basic information about this snapshot - SnapshotVersionMajor int32 `protobuf:"varint,1,opt,name=snapshot_version_major,json=snapshotVersionMajor,proto3" json:"snapshot_version_major,omitempty"` - SnapshotVersionMinor int32 `protobuf:"varint,2,opt,name=snapshot_version_minor,json=snapshotVersionMinor,proto3" json:"snapshot_version_minor,omitempty"` - CollectorVersion string `protobuf:"bytes,3,opt,name=collector_version,json=collectorVersion,proto3" json:"collector_version,omitempty"` - FailedRun bool `protobuf:"varint,4,opt,name=failed_run,json=failedRun,proto3" json:"failed_run,omitempty"` // failed runs are submitted so we can provide more context in the UI - SnapshotUuid string `protobuf:"bytes,10,opt,name=snapshot_uuid,json=snapshotUuid,proto3" json:"snapshot_uuid,omitempty"` - CollectedAt *timestamp.Timestamp `protobuf:"bytes,11,opt,name=collected_at,json=collectedAt,proto3" json:"collected_at,omitempty"` - CollectedIntervalSecs uint32 `protobuf:"varint,12,opt,name=collected_interval_secs,json=collectedIntervalSecs,proto3" json:"collected_interval_secs,omitempty"` - Config *CollectorConfig `protobuf:"bytes,13,opt,name=config,proto3" json:"config,omitempty"` - CollectorStatistic *CollectorStatistic `protobuf:"bytes,20,opt,name=collector_statistic,json=collectorStatistic,proto3" json:"collector_statistic,omitempty"` - CollectorErrors []string `protobuf:"bytes,21,rep,name=collector_errors,json=collectorErrors,proto3" json:"collector_errors,omitempty"` // log error messages that happened during the collector run - CollectorStartedAt *timestamp.Timestamp `protobuf:"bytes,22,opt,name=collector_started_at,json=collectorStartedAt,proto3" json:"collector_started_at,omitempty"` - CollectorHostname string `protobuf:"bytes,23,opt,name=collector_hostname,json=collectorHostname,proto3" json:"collector_hostname,omitempty"` - CollectorArchitecture string `protobuf:"bytes,24,opt,name=collector_architecture,json=collectorArchitecture,proto3" json:"collector_architecture,omitempty"` - CollectorOperatingSystem string `protobuf:"bytes,25,opt,name=collector_operating_system,json=collectorOperatingSystem,proto3" json:"collector_operating_system,omitempty"` - CollectorPlatform string `protobuf:"bytes,26,opt,name=collector_platform,json=collectorPlatform,proto3" json:"collector_platform,omitempty"` - CollectorPlatformFamily string `protobuf:"bytes,27,opt,name=collector_platform_family,json=collectorPlatformFamily,proto3" json:"collector_platform_family,omitempty"` - CollectorPlatformVersion string `protobuf:"bytes,28,opt,name=collector_platform_version,json=collectorPlatformVersion,proto3" json:"collector_platform_version,omitempty"` - CollectorVirtualizationSystem string `protobuf:"bytes,29,opt,name=collector_virtualization_system,json=collectorVirtualizationSystem,proto3" json:"collector_virtualization_system,omitempty"` // Name of the virtualization system (only if we're a guest) - CollectorKernelVersion string `protobuf:"bytes,30,opt,name=collector_kernel_version,json=collectorKernelVersion,proto3" json:"collector_kernel_version,omitempty"` + SnapshotVersionMajor int32 `protobuf:"varint,1,opt,name=snapshot_version_major,json=snapshotVersionMajor,proto3" json:"snapshot_version_major,omitempty"` + SnapshotVersionMinor int32 `protobuf:"varint,2,opt,name=snapshot_version_minor,json=snapshotVersionMinor,proto3" json:"snapshot_version_minor,omitempty"` + CollectorVersion string `protobuf:"bytes,3,opt,name=collector_version,json=collectorVersion,proto3" json:"collector_version,omitempty"` + FailedRun bool `protobuf:"varint,4,opt,name=failed_run,json=failedRun,proto3" json:"failed_run,omitempty"` // failed runs are submitted so we can provide more context in the UI + SnapshotUuid string `protobuf:"bytes,10,opt,name=snapshot_uuid,json=snapshotUuid,proto3" json:"snapshot_uuid,omitempty"` + CollectedAt *timestamp.Timestamp `protobuf:"bytes,11,opt,name=collected_at,json=collectedAt,proto3" json:"collected_at,omitempty"` + CollectedIntervalSecs uint32 `protobuf:"varint,12,opt,name=collected_interval_secs,json=collectedIntervalSecs,proto3" json:"collected_interval_secs,omitempty"` + Config *CollectorConfig `protobuf:"bytes,13,opt,name=config,proto3" json:"config,omitempty"` + CollectorStatistic *CollectorStatistic `protobuf:"bytes,20,opt,name=collector_statistic,json=collectorStatistic,proto3" json:"collector_statistic,omitempty"` + CollectorErrors []string `protobuf:"bytes,21,rep,name=collector_errors,json=collectorErrors,proto3" json:"collector_errors,omitempty"` // log error messages that happened during the collector run + CollectorStartedAt *timestamp.Timestamp `protobuf:"bytes,22,opt,name=collector_started_at,json=collectorStartedAt,proto3" json:"collector_started_at,omitempty"` + CollectorHostname string `protobuf:"bytes,23,opt,name=collector_hostname,json=collectorHostname,proto3" json:"collector_hostname,omitempty"` + CollectorArchitecture string `protobuf:"bytes,24,opt,name=collector_architecture,json=collectorArchitecture,proto3" json:"collector_architecture,omitempty"` + CollectorOperatingSystem string `protobuf:"bytes,25,opt,name=collector_operating_system,json=collectorOperatingSystem,proto3" json:"collector_operating_system,omitempty"` + CollectorPlatform string `protobuf:"bytes,26,opt,name=collector_platform,json=collectorPlatform,proto3" json:"collector_platform,omitempty"` + CollectorPlatformFamily string `protobuf:"bytes,27,opt,name=collector_platform_family,json=collectorPlatformFamily,proto3" json:"collector_platform_family,omitempty"` + CollectorPlatformVersion string `protobuf:"bytes,28,opt,name=collector_platform_version,json=collectorPlatformVersion,proto3" json:"collector_platform_version,omitempty"` + CollectorVirtualizationSystem string `protobuf:"bytes,29,opt,name=collector_virtualization_system,json=collectorVirtualizationSystem,proto3" json:"collector_virtualization_system,omitempty"` // Name of the virtualization system (only if we're a guest) + CollectorKernelVersion string `protobuf:"bytes,30,opt,name=collector_kernel_version,json=collectorKernelVersion,proto3" json:"collector_kernel_version,omitempty"` + CollectorLogSnapshotDisabled bool `protobuf:"varint,31,opt,name=collector_log_snapshot_disabled,json=collectorLogSnapshotDisabled,proto3" json:"collector_log_snapshot_disabled,omitempty"` + CollectorLogSnapshotDisabledReason string `protobuf:"bytes,32,opt,name=collector_log_snapshot_disabled_reason,json=collectorLogSnapshotDisabledReason,proto3" json:"collector_log_snapshot_disabled_reason,omitempty"` // Per server (and hence snapshot) System *System `protobuf:"bytes,100,opt,name=system,proto3" json:"system,omitempty"` PostgresVersion *PostgresVersion `protobuf:"bytes,101,opt,name=postgres_version,json=postgresVersion,proto3" json:"postgres_version,omitempty"` @@ -541,6 +543,20 @@ func (x *FullSnapshot) GetCollectorKernelVersion() string { return "" } +func (x *FullSnapshot) GetCollectorLogSnapshotDisabled() bool { + if x != nil { + return x.CollectorLogSnapshotDisabled + } + return false +} + +func (x *FullSnapshot) GetCollectorLogSnapshotDisabledReason() string { + if x != nil { + return x.CollectorLogSnapshotDisabledReason + } + return "" +} + func (x *FullSnapshot) GetSystem() *System { if x != nil { return x.System @@ -3514,7 +3530,7 @@ var file_full_snapshot_proto_rawDesc = []byte{ 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x1a, 0x0a, 0x0c, 0x46, 0x75, + 0x72, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaa, 0x1b, 0x0a, 0x0c, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x73, 0x6e, 0x61, 0x70, @@ -3582,817 +3598,827 @@ var file_full_snapshot_proto_rawDesc = []byte{ 0x73, 0x74, 0x65, 0x6d, 0x12, 0x38, 0x0a, 0x18, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, - 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x12, 0x4f, 0x0a, 0x10, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x66, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x57, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x11, 0x72, 0x6f, - 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x6e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, - 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x6f, 0x6c, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x72, 0x6f, 0x6c, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, - 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x6f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, - 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x08, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x7a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x67, + 0x72, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x45, + 0x0a, 0x1f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x26, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, + 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x22, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x4c, 0x6f, 0x67, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x4f, + 0x0a, 0x10, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, + 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x50, + 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, + 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x4b, 0x0a, 0x0f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x18, 0x66, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, + 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0e, 0x72, 0x6f, + 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x13, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x11, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x6e, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x6f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x14, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x18, 0x7a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, + 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x18, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x18, 0x7c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x5e, 0x0a, 0x15, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0x82, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x18, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x7c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, - 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x12, 0x5e, 0x0a, 0x15, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x82, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x14, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x12, 0x64, 0x0a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x83, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0xc8, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0xc9, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, - 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0xca, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x14, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x17, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x83, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0xc8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x58, 0x0a, 0x13, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0xcb, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x58, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x55, 0x0a, 0x12, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0xd2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x12, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x10, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0xca, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x58, 0x0a, + 0x13, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0xcb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, + 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x12, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x55, 0x0a, 0x12, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd2, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, + 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, + 0x0a, 0x10, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x18, 0xd3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x11, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xd3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, + 0x69, 0x0a, 0x19, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xd5, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x52, 0x17, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x73, 0x18, 0xd6, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, + 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x73, + 0x12, 0x5e, 0x0a, 0x15, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xdc, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x58, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, - 0x74, 0x69, 0x63, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, - 0x74, 0x69, 0x63, 0x73, 0x12, 0x69, 0x0a, 0x19, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, - 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x18, 0xd5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x17, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, - 0x54, 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, - 0x73, 0x18, 0xd6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, - 0x6c, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x15, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xdc, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, - 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x14, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xdd, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x12, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, - 0x4c, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0xdf, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x67, 0x61, 0x6e, - 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x55, 0x0a, - 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0xe0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x67, 0x61, - 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xe1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x52, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x5e, 0x0a, 0x15, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe3, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, - 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x14, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x13, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xe4, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x12, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4a, - 0x04, 0x08, 0x78, 0x10, 0x79, 0x4a, 0x04, 0x08, 0x79, 0x10, 0x7a, 0x4a, 0x06, 0x08, 0xde, 0x01, - 0x10, 0xdf, 0x01, 0x4a, 0x06, 0x08, 0xe2, 0x01, 0x10, 0xe3, 0x01, 0x22, 0xc6, 0x02, 0x0a, 0x12, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x61, 0x70, - 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x65, - 0x61, 0x70, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x65, 0x61, 0x70, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x73, 0x73, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x52, 0x73, 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x67, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x72, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x67, 0x6f, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x67, 0x6f, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x22, 0xb0, 0x03, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, - 0x49, 0x64, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x62, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x62, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x75, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x70, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x72, 0x6c, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x52, 0x6c, - 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x54, 0x0a, 0x14, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x75, - 0x6e, 0x74, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x67, 0x61, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x12, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0xdf, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, + 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x55, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe0, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, + 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x18, 0xe1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x55, 0x6e, 0x74, - 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x22, 0xb8, 0x03, 0x0a, 0x13, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, - 0x64, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x15, - 0x0a, 0x06, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x5f, 0x78, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x58, 0x69, 0x64, 0x12, 0x32, 0x0a, - 0x15, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, - 0x63, 0x74, 0x5f, 0x78, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6d, 0x69, - 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, 0x63, 0x74, 0x58, 0x69, - 0x64, 0x12, 0x3f, 0x0a, 0x1c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x44, 0x61, - 0x74, 0x61, 0x22, 0xb6, 0x03, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x12, 0x5e, 0x0a, 0x15, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe3, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x58, 0x0a, 0x13, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0xe4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x12, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4a, 0x04, 0x08, 0x78, 0x10, 0x79, + 0x4a, 0x04, 0x08, 0x79, 0x10, 0x7a, 0x4a, 0x06, 0x08, 0xde, 0x01, 0x10, 0xdf, 0x01, 0x4a, 0x06, + 0x08, 0xe2, 0x01, 0x10, 0xe3, 0x01, 0x22, 0xc6, 0x02, 0x0a, 0x12, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1d, 0x0a, + 0x0a, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x6f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x18, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x65, 0x61, 0x70, 0x41, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x48, 0x65, 0x61, 0x70, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x73, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x73, 0x73, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x67, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, + 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x67, 0x6f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x67, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x22, + 0xb0, 0x03, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, 0x18, + 0x0a, 0x07, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x75, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x73, 0x75, 0x70, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, + 0x0a, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x72, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x52, 0x6c, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x54, 0x0a, 0x14, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x3e, 0x0a, 0x0a, - 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x6f, 0x66, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x4f, 0x66, 0x22, 0xb8, 0x03, 0x0a, 0x13, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x78, 0x12, 0x24, 0x0a, + 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, + 0x49, 0x64, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, + 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, + 0x7a, 0x65, 0x6e, 0x5f, 0x78, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, + 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x58, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x6e, 0x69, + 0x6d, 0x75, 0x6d, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, 0x63, 0x74, 0x5f, 0x78, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, 0x63, 0x74, 0x58, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x1c, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x19, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0xb6, 0x03, + 0x0a, 0x07, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0b, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, - 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x65, 0x22, 0x80, 0x05, 0x0a, 0x0b, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x15, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x78, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x58, 0x6c, 0x6f, 0x67, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x54, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x67, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, + 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x62, 0x6f, + 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, - 0x79, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, - 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x6e, 0x64, - 0x62, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, - 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x69, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x24, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6c, 0x61, - 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x42, 0x79, - 0x74, 0x65, 0x4c, 0x61, 0x67, 0x12, 0x45, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x18, 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, 0x0f, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x14, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x5f, 0x61, 0x67, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x41, 0x67, 0x65, 0x22, 0x33, - 0x0a, 0x10, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x22, 0xdc, 0x02, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x49, 0x64, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x72, - 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, - 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x3f, 0x0a, - 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x62, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x62, 0x79, 0x49, 0x64, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6c, - 0x75, 0x73, 0x68, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x72, + 0x65, 0x73, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, + 0x69, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x65, 0x22, 0x80, 0x05, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x52, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x78, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x58, + 0x6c, 0x6f, 0x67, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x12, 0x73, + 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, + 0x61, 0x6e, 0x64, 0x62, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x11, + 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x12, 0x5a, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x49, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, + 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x54, 0x0a, + 0x12, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x52, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x69, 0x6e, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x4c, - 0x61, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x42, 0x79, 0x74, 0x65, 0x4c, 0x61, 0x67, 0x22, 0x8b, 0x06, 0x0a, 0x15, 0x42, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, + 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x70, + 0x70, 0x6c, 0x79, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x17, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x42, 0x79, 0x74, 0x65, 0x4c, 0x61, 0x67, + 0x12, 0x45, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x18, 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, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x61, 0x67, 0x65, 0x18, + 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x41, 0x67, 0x65, 0x22, 0x33, 0x0a, 0x10, 0x53, 0x74, 0x61, + 0x6e, 0x64, 0x62, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x22, 0xdc, + 0x02, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, + 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6e, + 0x64, 0x62, 0x79, 0x49, 0x64, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, + 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, + 0x78, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x70, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, + 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x3f, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x79, 0x6e, + 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xb3, 0x02, + 0x0a, 0x10, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x5f, 0x69, 0x64, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, + 0x49, 0x64, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6e, + 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, + 0x0a, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x5f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, + 0x6c, 0x75, 0x73, 0x68, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, + 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x4c, 0x61, 0x67, 0x12, 0x24, 0x0a, + 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x6c, 0x61, 0x67, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, + 0x4c, 0x61, 0x67, 0x22, 0x8b, 0x06, 0x0a, 0x15, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x20, 0x0a, + 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, + 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x61, + 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x61, 0x73, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x78, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, + 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, - 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x52, 0x6f, 0x6c, - 0x65, 0x49, 0x64, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, - 0x28, 0x0a, 0x10, 0x68, 0x61, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x61, 0x73, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x78, 0x12, 0x4d, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x70, 0x67, + 0x69, 0x63, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, + 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6f, 0x72, + 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x61, 0x69, + 0x74, 0x69, 0x6e, 0x67, 0x46, 0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x9b, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x49, + 0x44, 0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x44, 0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x5f, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x42, 0x4f, 0x52, + 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x53, 0x54, 0x50, 0x41, 0x54, + 0x48, 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x10, + 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x22, + 0xdf, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x10, 0x0a, 0x0c, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, + 0x00, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x56, 0x41, 0x43, 0x55, 0x55, 0x4d, 0x5f, + 0x4c, 0x41, 0x55, 0x4e, 0x43, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x55, + 0x54, 0x4f, 0x56, 0x41, 0x43, 0x55, 0x55, 0x4d, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, + 0x02, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, + 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x41, 0x43, 0x4b, + 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, 0x04, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, + 0x44, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, + 0x54, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, + 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x57, 0x41, 0x4c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, + 0x52, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x41, 0x4c, 0x53, 0x45, 0x4e, 0x44, 0x45, 0x52, + 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x41, 0x4c, 0x57, 0x52, 0x49, 0x54, 0x45, 0x52, 0x10, + 0x0a, 0x22, 0x29, 0x0a, 0x13, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x9f, 0x01, 0x0a, + 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x78, 0x12, 0x2c, 0x0a, + 0x12, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x64, 0x69, 0x73, 0x6b, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, + 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb8, + 0x0d, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, + 0x67, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, + 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x62, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x64, 0x62, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, + 0x62, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, + 0x48, 0x6f, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x62, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x62, 0x5f, 0x73, 0x73, 0x6c, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x62, 0x53, 0x73, 0x6c, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x12, + 0x64, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x72, 0x6f, 0x6f, 0x74, 0x63, 0x65, + 0x72, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x62, 0x48, 0x61, 0x73, 0x53, + 0x73, 0x6c, 0x72, 0x6f, 0x6f, 0x74, 0x63, 0x65, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x62, + 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x63, 0x65, 0x72, 0x74, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x64, 0x62, 0x48, 0x61, 0x73, 0x53, 0x73, 0x6c, 0x63, 0x65, 0x72, 0x74, + 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x6b, 0x65, + 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x62, 0x48, 0x61, 0x73, 0x53, 0x73, + 0x6c, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x62, + 0x45, 0x78, 0x74, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x62, + 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x20, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x64, 0x62, 0x41, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x77, 0x73, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x12, 0x61, + 0x77, 0x73, 0x5f, 0x64, 0x62, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x77, 0x73, 0x44, 0x62, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x15, 0x61, 0x77, 0x73, 0x5f, + 0x68, 0x61, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x77, 0x73, 0x48, 0x61, 0x73, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x7a, + 0x75, 0x72, 0x65, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x44, + 0x62, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x61, + 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x61, + 0x7a, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x68, 0x75, 0x62, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x38, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x68, 0x75, + 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x61, + 0x64, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x39, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x64, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x5f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x37, 0x0a, 0x18, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x64, 0x5f, + 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x48, 0x61, 0x73, 0x41, 0x64, 0x43, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x67, 0x63, 0x70, 0x5f, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x71, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x45, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x67, 0x63, 0x70, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x71, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x36, 0x0a, 0x17, 0x67, 0x63, 0x70, 0x5f, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 0x5f, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x46, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x15, 0x67, 0x63, 0x70, 0x50, 0x75, 0x62, 0x73, 0x75, 0x62, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x18, 0x67, 0x63, 0x70, + 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x67, 0x63, 0x70, + 0x48, 0x61, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x63, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x48, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x63, 0x70, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x70, 0x69, 0x5f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x70, 0x69, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, + 0x61, 0x70, 0x69, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x53, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x54, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x61, 0x70, 0x69, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x26, + 0x0a, 0x0f, 0x64, 0x62, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x62, 0x4c, 0x6f, 0x67, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x12, 0x64, 0x62, 0x5f, 0x6c, 0x6f, 0x67, + 0x5f, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x5f, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x64, 0x62, 0x4c, 0x6f, 0x67, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x54, + 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x6a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x30, 0x0a, 0x14, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, + 0x74, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x19, 0x6d, 0x61, 0x78, + 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x75, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6d, 0x61, + 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, + 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x7f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, + 0x81, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, + 0x65, 0x6e, 0x76, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x45, 0x6e, 0x76, 0x22, 0xee, 0x04, 0x0a, 0x0e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x6f, + 0x77, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, + 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, + 0x52, 0x65, 0x61, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, + 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, 0x72, + 0x74, 0x69, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, + 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, + 0x74, 0x74, 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, + 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, + 0x61, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, + 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, + 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, + 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x24, + 0x0a, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, + 0x52, 0x65, 0x61, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, + 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, + 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x6c, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x62, 0x6c, 0x6b, 0x52, 0x65, 0x61, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x6c, 0x6b, 0x5f, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x62, 0x6c, + 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x17, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x63, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x73, 0x12, 0x43, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x22, 0xbe, 0x0d, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x46, 0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x6b, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9b, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, - 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x02, - 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x44, 0x4c, - 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, - 0x53, 0x54, 0x50, 0x41, 0x54, 0x48, 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, - 0x45, 0x44, 0x10, 0x06, 0x22, 0xdf, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x56, 0x41, - 0x43, 0x55, 0x55, 0x4d, 0x5f, 0x4c, 0x41, 0x55, 0x4e, 0x43, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12, - 0x15, 0x0a, 0x11, 0x41, 0x55, 0x54, 0x4f, 0x56, 0x41, 0x43, 0x55, 0x55, 0x4d, 0x5f, 0x57, 0x4f, - 0x52, 0x4b, 0x45, 0x52, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, - 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, 0x03, 0x12, 0x15, 0x0a, - 0x11, 0x42, 0x41, 0x43, 0x4b, 0x47, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, - 0x45, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x42, - 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x45, 0x43, - 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, - 0x41, 0x52, 0x54, 0x55, 0x50, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x57, 0x41, 0x4c, 0x52, 0x45, - 0x43, 0x45, 0x49, 0x56, 0x45, 0x52, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x41, 0x4c, 0x53, - 0x45, 0x4e, 0x44, 0x45, 0x52, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x41, 0x4c, 0x57, 0x52, - 0x49, 0x54, 0x45, 0x52, 0x10, 0x0a, 0x22, 0x29, 0x0a, 0x13, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x78, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, - 0x64, 0x69, 0x73, 0x6b, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, - 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0xb8, 0x0d, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x29, 0x0a, - 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x45, - 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x64, 0x62, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x62, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x62, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x62, 0x50, 0x6f, - 0x72, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x62, 0x5f, 0x73, 0x73, 0x6c, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x62, 0x53, 0x73, 0x6c, 0x6d, 0x6f, 0x64, - 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x72, - 0x6f, 0x6f, 0x74, 0x63, 0x65, 0x72, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, - 0x62, 0x48, 0x61, 0x73, 0x53, 0x73, 0x6c, 0x72, 0x6f, 0x6f, 0x74, 0x63, 0x65, 0x72, 0x74, 0x12, - 0x24, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x73, 0x6c, 0x63, 0x65, 0x72, - 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x62, 0x48, 0x61, 0x73, 0x53, 0x73, - 0x6c, 0x63, 0x65, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x5f, - 0x73, 0x73, 0x6c, 0x6b, 0x65, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x62, - 0x48, 0x61, 0x73, 0x53, 0x73, 0x6c, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x62, 0x5f, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0c, 0x64, 0x62, 0x45, 0x78, 0x74, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x20, 0x0a, 0x0c, 0x64, 0x62, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x20, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x62, 0x41, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, - 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x77, 0x73, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x64, 0x62, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x77, - 0x73, 0x44, 0x62, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, - 0x15, 0x61, 0x77, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x77, - 0x73, 0x48, 0x61, 0x73, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x14, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x44, 0x62, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x38, 0x0a, 0x18, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x68, - 0x75, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x37, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x16, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x68, 0x75, - 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x38, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x68, 0x75, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x7a, - 0x75, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x39, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x64, 0x54, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x7a, 0x75, 0x72, 0x65, - 0x5f, 0x61, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x3a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x64, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x5f, 0x68, 0x61, - 0x73, 0x5f, 0x61, 0x64, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x18, 0x3b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x48, 0x61, 0x73, - 0x41, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, - 0x18, 0x67, 0x63, 0x70, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x71, 0x6c, 0x5f, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x45, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x15, 0x67, 0x63, 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x71, 0x6c, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x67, 0x63, 0x70, 0x5f, 0x70, 0x75, - 0x62, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x46, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x67, 0x63, 0x70, 0x50, 0x75, 0x62, 0x73, - 0x75, 0x62, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, - 0x0a, 0x18, 0x67, 0x63, 0x70, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x15, 0x67, 0x63, 0x70, 0x48, 0x61, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x63, 0x70, 0x5f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x48, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x67, 0x63, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x52, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x69, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x53, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x70, 0x69, - 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x54, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x69, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x62, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x62, - 0x4c, 0x6f, 0x67, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x12, 0x64, - 0x62, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x69, - 0x6c, 0x18, 0x5f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x62, 0x4c, 0x6f, 0x67, 0x44, 0x6f, - 0x63, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, - 0x18, 0x69, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x70, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x30, 0x0a, 0x14, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x18, 0x74, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3a, - 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x75, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x17, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, - 0x7f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x67, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x80, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x45, 0x6e, 0x76, 0x22, 0xee, - 0x04, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x78, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, - 0x28, 0x0a, 0x10, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, - 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, - 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, - 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, - 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, - 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, - 0x72, 0x74, 0x69, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, - 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, - 0x74, 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, - 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x65, 0x6d, - 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, - 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x6c, 0x6b, 0x5f, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x62, 0x6c, - 0x6b, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x6c, 0x6b, - 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0c, 0x62, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, - 0xd5, 0x01, 0x0a, 0x17, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x5f, 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, - 0x63, 0x73, 0x12, 0x43, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, - 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0a, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xbe, 0x0d, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x49, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, - 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x19, - 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6f, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x68, 0x61, 0x73, 0x4f, 0x69, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x68, 0x61, 0x73, - 0x5f, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x68, 0x61, 0x73, - 0x49, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, - 0x72, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x6f, 0x61, 0x73, 0x74, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x54, 0x6f, 0x61, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x5f, 0x78, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x58, 0x69, 0x64, 0x12, - 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x78, 0x61, 0x63, 0x74, 0x5f, 0x78, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, - 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, 0x63, 0x74, - 0x58, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x6c, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x4c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x11, 0x68, 0x61, 0x73, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, - 0x72, 0x79, 0x12, 0x69, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, + 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0e, 0x76, 0x69, + 0x65, 0x77, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x07, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, + 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, + 0x74, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x29, + 0x0a, 0x10, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, + 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, + 0x69, 0x6c, 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, + 0x5f, 0x6f, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, + 0x4f, 0x69, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x68, 0x65, + 0x72, 0x69, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x68, 0x61, 0x73, 0x49, 0x6e, 0x68, 0x65, 0x72, + 0x69, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x54, 0x6f, 0x61, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, + 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x5f, 0x78, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x09, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x58, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, + 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, 0x63, 0x74, 0x5f, + 0x78, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6d, 0x69, 0x6e, 0x69, 0x6d, + 0x75, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x78, 0x61, 0x63, 0x74, 0x58, 0x69, 0x64, 0x12, 0x2d, + 0x0a, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x5f, 0x6c, 0x6f, + 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x4f, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2b, 0x0a, - 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x05, 0x52, 0x10, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x42, - 0x79, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xb6, 0x01, - 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x6e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xde, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, - 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x12, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, - 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x65, 0x69, - 0x67, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x6f, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x6f, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x6f, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x11, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, - 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x08, - 0x0a, 0x04, 0x48, 0x41, 0x53, 0x48, 0x10, 0x03, 0x22, 0x85, 0x06, 0x0a, 0x11, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x71, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x73, - 0x65, 0x71, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x73, 0x65, 0x71, 0x54, 0x75, 0x70, 0x52, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x64, 0x78, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x69, 0x64, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, 0x5f, - 0x74, 0x75, 0x70, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x69, 0x64, 0x78, 0x54, 0x75, 0x70, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x09, - 0x6e, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x6e, 0x54, 0x75, 0x70, 0x49, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x6e, 0x5f, 0x74, 0x75, - 0x70, 0x5f, 0x75, 0x70, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x54, 0x75, - 0x70, 0x55, 0x70, 0x64, 0x12, 0x1a, 0x0a, 0x09, 0x6e, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x65, - 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x54, 0x75, 0x70, 0x44, 0x65, 0x6c, - 0x12, 0x21, 0x0a, 0x0d, 0x6e, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x68, 0x6f, 0x74, 0x5f, 0x75, 0x70, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6e, 0x54, 0x75, 0x70, 0x48, 0x6f, 0x74, - 0x55, 0x70, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x6e, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x75, - 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6e, 0x4c, 0x69, 0x76, 0x65, 0x54, 0x75, - 0x70, 0x12, 0x1c, 0x0a, 0x0a, 0x6e, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x75, 0x70, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6e, 0x44, 0x65, 0x61, 0x64, 0x54, 0x75, 0x70, 0x12, - 0x2d, 0x0a, 0x13, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x61, - 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x4d, - 0x6f, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x12, 0x24, - 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x70, 0x42, 0x6c, 0x6b, 0x73, - 0x52, 0x65, 0x61, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x62, 0x6c, 0x6b, - 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x68, 0x65, 0x61, - 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, 0x5f, - 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, + 0x0a, 0x13, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x2e, + 0x0a, 0x13, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x68, 0x61, 0x73, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, + 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x12, 0x69, 0x0a, + 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x67, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x70, 0x67, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x13, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x10, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x42, 0x79, 0x1a, 0x3a, 0x0a, 0x0c, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xb6, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, + 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, + 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x6f, + 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0xde, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, + 0x12, 0x30, 0x0a, 0x14, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, + 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x44, 0x65, + 0x66, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x66, + 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x11, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x01, 0x12, + 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x53, + 0x48, 0x10, 0x03, 0x22, 0x85, 0x06, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, + 0x65, 0x71, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, + 0x65, 0x71, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x65, 0x71, 0x5f, 0x74, 0x75, + 0x70, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x65, + 0x71, 0x54, 0x75, 0x70, 0x52, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x64, 0x78, 0x5f, + 0x73, 0x63, 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x69, 0x64, 0x78, 0x53, + 0x63, 0x61, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x64, 0x78, 0x54, + 0x75, 0x70, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x09, 0x6e, 0x5f, 0x74, 0x75, 0x70, + 0x5f, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x54, 0x75, 0x70, + 0x49, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x09, 0x6e, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x75, 0x70, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x54, 0x75, 0x70, 0x55, 0x70, 0x64, 0x12, + 0x1a, 0x0a, 0x09, 0x6e, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x6e, 0x54, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x0d, 0x6e, + 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x68, 0x6f, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x6e, 0x54, 0x75, 0x70, 0x48, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x12, 0x1c, + 0x0a, 0x0a, 0x6e, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x6e, 0x4c, 0x69, 0x76, 0x65, 0x54, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x0a, + 0x6e, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x75, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x6e, 0x44, 0x65, 0x61, 0x64, 0x54, 0x75, 0x70, 0x12, 0x2d, 0x0a, 0x13, 0x6e, 0x5f, + 0x6d, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x4d, 0x6f, 0x64, 0x53, 0x69, 0x6e, + 0x63, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x65, 0x61, + 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, + 0x22, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x70, 0x42, 0x6c, 0x6b, 0x73, + 0x48, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, + 0x72, 0x65, 0x61, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x64, 0x78, 0x42, + 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x64, 0x78, 0x5f, 0x62, + 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, + 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x61, + 0x73, 0x74, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, + 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, + 0x68, 0x69, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x61, 0x73, 0x74, + 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x64, 0x78, 0x5f, + 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x74, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x22, 0x0a, + 0x0d, 0x74, 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, + 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x61, + 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xc0, 0x02, 0x0a, 0x0d, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, + 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, + 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x03, 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, 0x0a, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x36, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x5f, 0x6f, + 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4f, 0x63, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x55, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x56, + 0x41, 0x43, 0x55, 0x55, 0x4d, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x55, 0x54, 0x4f, 0x5f, + 0x56, 0x41, 0x43, 0x55, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x41, 0x4e, 0x55, + 0x41, 0x4c, 0x5f, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x5a, 0x45, 0x10, 0x03, 0x22, 0xe7, + 0x02, 0x0a, 0x10, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x78, + 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x65, 0x66, 0x12, 0x46, 0x0a, 0x0e, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x44, + 0x65, 0x66, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, + 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, + 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, + 0x69, 0x6c, 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0xf3, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, + 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x64, 0x78, 0x5f, 0x73, + 0x63, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x69, 0x64, 0x78, 0x53, 0x63, + 0x61, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x64, 0x78, 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x64, 0x78, 0x54, 0x75, 0x70, + 0x52, 0x65, 0x61, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, 0x5f, 0x74, 0x75, 0x70, 0x5f, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x64, 0x78, + 0x54, 0x75, 0x70, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, 0x5f, + 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0c, - 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x26, - 0x0a, 0x0f, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, - 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x42, 0x6c, - 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x5f, - 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x6f, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0e, - 0x74, 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, - 0x61, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x74, 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, - 0x68, 0x69, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x64, 0x78, 0x42, - 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x74, 0x6f, 0x61, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x22, 0xc0, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x6f, 0x63, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 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, 0x0a, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x55, 0x0a, 0x09, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x41, 0x4e, - 0x55, 0x41, 0x4c, 0x5f, 0x56, 0x41, 0x43, 0x55, 0x55, 0x4d, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x56, 0x41, 0x43, 0x55, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x12, 0x0a, - 0x0e, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x5a, 0x45, 0x10, - 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x5a, - 0x45, 0x10, 0x03, 0x22, 0xe7, 0x02, 0x0a, 0x10, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x49, 0x64, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x64, 0x65, 0x66, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x65, 0x66, 0x12, - 0x46, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, - 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, - 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x6c, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x22, 0xf3, 0x01, - 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x64, 0x78, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x64, 0x78, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x69, 0x64, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x64, 0x78, 0x5f, 0x74, - 0x75, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, - 0x64, 0x78, 0x54, 0x75, 0x70, 0x52, 0x65, 0x61, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x78, - 0x5f, 0x74, 0x75, 0x70, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x69, 0x64, 0x78, 0x54, 0x75, 0x70, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x22, 0x0a, - 0x0d, 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, - 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, - 0x48, 0x69, 0x74, 0x22, 0xaf, 0x04, 0x0a, 0x13, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x65, 0x61, 0x6b, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x65, 0x61, 0x6b, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x6f, 0x6c, - 0x61, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, - 0x61, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x22, 0x53, 0x0a, 0x0c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x41, - 0x47, 0x47, 0x52, 0x45, 0x47, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x49, - 0x4e, 0x44, 0x4f, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x44, - 0x55, 0x52, 0x45, 0x10, 0x04, 0x22, 0x88, 0x01, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x66, 0x54, 0x69, 0x6d, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x64, 0x78, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x69, 0x64, 0x78, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x22, 0xaf, + 0x04, 0x0a, 0x13, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a, + 0x09, 0x6c, 0x65, 0x61, 0x6b, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x6c, 0x65, 0x61, 0x6b, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, + 0x69, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x73, + 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x73, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6c, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6c, 0x65, + 0x12, 0x49, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, + 0x2e, 0x70, 0x67, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x53, 0x0a, 0x0c, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x55, 0x4e, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x47, 0x47, 0x52, 0x45, 0x47, + 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x10, + 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x44, 0x55, 0x52, 0x45, 0x10, 0x04, + 0x22, 0x88, 0x01, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x66, 0x54, 0x69, 0x6d, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/output/report.go b/output/report.go index b0f43815f..b44b3020e 100644 --- a/output/report.go +++ b/output/report.go @@ -15,7 +15,7 @@ import ( "github.com/pganalyze/collector/util" ) -func submitReportRun(server state.Server, report reports.Report, logger *util.Logger, s3Location string) error { +func submitReportRun(server *state.Server, report reports.Report, logger *util.Logger, s3Location string) error { data := url.Values{"s3_location": {s3Location}} req, err := http.NewRequest("POST", server.Config.APIBaseURL+"/v2/reports/submit_run", strings.NewReader(data.Encode())) @@ -56,7 +56,7 @@ func submitReportRun(server state.Server, report reports.Report, logger *util.Lo return nil } -func SubmitReport(server state.Server, grant state.Grant, report reports.Report, logger *util.Logger) error { +func SubmitReport(server *state.Server, grant state.Grant, report reports.Report, logger *util.Logger) error { var err error var data []byte diff --git a/output/transform/activity.go b/output/transform/activity.go index de02e818a..0e2d4ed31 100644 --- a/output/transform/activity.go +++ b/output/transform/activity.go @@ -6,7 +6,7 @@ import ( "github.com/pganalyze/collector/state" ) -func ActivityStateToCompactActivitySnapshot(server state.Server, activityState state.TransientActivityState) (snapshot.CompactActivitySnapshot, snapshot.CompactSnapshot_BaseRefs) { +func ActivityStateToCompactActivitySnapshot(server *state.Server, activityState state.TransientActivityState) (snapshot.CompactActivitySnapshot, snapshot.CompactSnapshot_BaseRefs) { var s snapshot.CompactActivitySnapshot var r snapshot.CompactSnapshot_BaseRefs diff --git a/output/transform/logs.go b/output/transform/logs.go index f7da41b56..70e165f03 100644 --- a/output/transform/logs.go +++ b/output/transform/logs.go @@ -9,7 +9,7 @@ import ( uuid "github.com/satori/go.uuid" ) -func LogStateToLogSnapshot(server state.Server, logState state.TransientLogState) (snapshot.CompactLogSnapshot, snapshot.CompactSnapshot_BaseRefs) { +func LogStateToLogSnapshot(server *state.Server, logState state.TransientLogState) (snapshot.CompactLogSnapshot, snapshot.CompactSnapshot_BaseRefs) { var s snapshot.CompactLogSnapshot var r snapshot.CompactSnapshot_BaseRefs s, r = transformPostgresQuerySamples(server, s, r, logState) @@ -62,7 +62,7 @@ func upsertRelationReference(refs []*snapshot.RelationReference, databaseIdx int return idx, refs } -func transformPostgresQuerySamples(server state.Server, s snapshot.CompactLogSnapshot, r snapshot.CompactSnapshot_BaseRefs, logState state.TransientLogState) (snapshot.CompactLogSnapshot, snapshot.CompactSnapshot_BaseRefs) { +func transformPostgresQuerySamples(server *state.Server, s snapshot.CompactLogSnapshot, r snapshot.CompactSnapshot_BaseRefs, logState state.TransientLogState) (snapshot.CompactLogSnapshot, snapshot.CompactSnapshot_BaseRefs) { for _, sampleIn := range logState.QuerySamples { occurredAt, _ := ptypes.TimestampProto(sampleIn.OccurredAt) @@ -112,7 +112,7 @@ func transformPostgresQuerySamples(server state.Server, s snapshot.CompactLogSna return s, r } -func transformSystemLogs(server state.Server, s snapshot.CompactLogSnapshot, r snapshot.CompactSnapshot_BaseRefs, logState state.TransientLogState) (snapshot.CompactLogSnapshot, snapshot.CompactSnapshot_BaseRefs) { +func transformSystemLogs(server *state.Server, s snapshot.CompactLogSnapshot, r snapshot.CompactSnapshot_BaseRefs, logState state.TransientLogState) (snapshot.CompactLogSnapshot, snapshot.CompactSnapshot_BaseRefs) { for _, logFileIn := range logState.LogFiles { fileIdx := int32(len(s.LogFileReferences)) logFileReference := &snapshot.LogFileReference{ @@ -151,7 +151,7 @@ func transformSystemLogs(server state.Server, s snapshot.CompactLogSnapshot, r s return s, r } -func transformSystemLogLine(server state.Server, r *snapshot.CompactSnapshot_BaseRefs, logFileIdx int32, logLineIn state.LogLine) snapshot.LogLineInformation { +func transformSystemLogLine(server *state.Server, r *snapshot.CompactSnapshot_BaseRefs, logFileIdx int32, logLineIn state.LogLine) snapshot.LogLineInformation { occurredAt, _ := ptypes.TimestampProto(logLineIn.OccurredAt) logLine := snapshot.LogLineInformation{ diff --git a/output/transform/postgres_query.go b/output/transform/postgres_query.go index 02d447190..ab80b144b 100644 --- a/output/transform/postgres_query.go +++ b/output/transform/postgres_query.go @@ -58,7 +58,7 @@ func upsertQueryReferenceAndInformation(s *snapshot.FullSnapshot, statementTexts return idx } -func upsertQueryReferenceAndInformationSimple(server state.Server, refs []*snapshot.QueryReference, infos []*snapshot.QueryInformation, roleIdx int32, databaseIdx int32, originalQuery string) (int32, []*snapshot.QueryReference, []*snapshot.QueryInformation) { +func upsertQueryReferenceAndInformationSimple(server *state.Server, refs []*snapshot.QueryReference, infos []*snapshot.QueryInformation, roleIdx int32, databaseIdx int32, originalQuery string) (int32, []*snapshot.QueryReference, []*snapshot.QueryInformation) { fingerprint := util.FingerprintQuery(originalQuery) newRef := snapshot.QueryReference{ diff --git a/protobuf b/protobuf index 7bdd98f1a..2e0080e6e 160000 --- a/protobuf +++ b/protobuf @@ -1 +1 @@ -Subproject commit 7bdd98f1a8e390d9463c5b7da803bfbbe082e710 +Subproject commit 2e0080e6e2824a5e4624e8eb4486cfdb25e4c0ee diff --git a/reports/bloat.go b/reports/bloat.go index d2b0081b7..66b965d9e 100644 --- a/reports/bloat.go +++ b/reports/bloat.go @@ -29,7 +29,7 @@ func (report BloatReport) ReportType() string { } // Run the report -func (report *BloatReport) Run(server state.Server, logger *util.Logger, connection *sql.DB) (err error) { +func (report *BloatReport) Run(server *state.Server, logger *util.Logger, connection *sql.DB) (err error) { systemType := server.Config.SystemType report.Data, err = postgres.GetBloatStats(logger, connection, systemType, server.Config.IgnoreSchemaRegexp) diff --git a/reports/buffercache.go b/reports/buffercache.go index 551f95ca1..815180325 100644 --- a/reports/buffercache.go +++ b/reports/buffercache.go @@ -30,7 +30,7 @@ func (report BuffercacheReport) ReportType() string { } // Run the report -func (report *BuffercacheReport) Run(server state.Server, logger *util.Logger, connection *sql.DB) (err error) { +func (report *BuffercacheReport) Run(server *state.Server, logger *util.Logger, connection *sql.DB) (err error) { systemType := server.Config.SystemType report.Data, err = postgres.GetBuffercache(logger, connection, systemType, server.Config.IgnoreSchemaRegexp) diff --git a/reports/report.go b/reports/report.go index 1854416e9..5c3dbb420 100644 --- a/reports/report.go +++ b/reports/report.go @@ -13,7 +13,7 @@ import ( type Report interface { RunID() string ReportType() string - Run(server state.Server, logger *util.Logger, connection *sql.DB) error + Run(server *state.Server, logger *util.Logger, connection *sql.DB) error Result() *pganalyze_collector.Report } diff --git a/reports/sequence.go b/reports/sequence.go index dfe4da079..f2046d225 100644 --- a/reports/sequence.go +++ b/reports/sequence.go @@ -29,7 +29,7 @@ func (report SequenceReport) ReportType() string { } // Run the report -func (report *SequenceReport) Run(server state.Server, logger *util.Logger, connection *sql.DB) (err error) { +func (report *SequenceReport) Run(server *state.Server, logger *util.Logger, connection *sql.DB) (err error) { report.Data, err = postgres.GetSequenceReport(logger, connection) if err != nil { return diff --git a/reports/vacuum.go b/reports/vacuum.go index 72edc4d70..02a068246 100644 --- a/reports/vacuum.go +++ b/reports/vacuum.go @@ -29,7 +29,7 @@ func (report VacuumReport) ReportType() string { } // Run the report -func (report *VacuumReport) Run(server state.Server, logger *util.Logger, connection *sql.DB) (err error) { +func (report *VacuumReport) Run(server *state.Server, logger *util.Logger, connection *sql.DB) (err error) { report.Data, err = postgres.GetVacuumStats(logger, connection, server.Config.IgnoreSchemaRegexp) if err != nil { return diff --git a/runner/activity.go b/runner/activity.go index 1a63ca10c..fac788ab6 100644 --- a/runner/activity.go +++ b/runner/activity.go @@ -14,7 +14,7 @@ import ( "github.com/pkg/errors" ) -func processActivityForServer(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedActivityState, bool, error) { +func processActivityForServer(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedActivityState, bool, error) { var newGrant state.Grant var err error var connection *sql.DB @@ -76,7 +76,7 @@ func processActivityForServer(server state.Server, globalCollectionOpts state.Co } // CollectActivityFromAllServers - Collects activity from all servers and sends them to the pganalyze service -func CollectActivityFromAllServers(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (allSuccessful bool) { +func CollectActivityFromAllServers(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (allSuccessful bool) { var wg sync.WaitGroup allSuccessful = true @@ -95,7 +95,7 @@ func CollectActivityFromAllServers(servers []state.Server, globalCollectionOpts } server.ActivityStateMutex.Lock() - newState, success, err := processActivityForServer(*server, globalCollectionOpts, prefixedLogger) + newState, success, err := processActivityForServer(server, globalCollectionOpts, prefixedLogger) if err != nil { server.ActivityStateMutex.Unlock() allSuccessful = false @@ -111,7 +111,7 @@ func CollectActivityFromAllServers(servers []state.Server, globalCollectionOpts } } wg.Done() - }(&servers[idx]) + }(servers[idx]) } wg.Wait() diff --git a/runner/full.go b/runner/full.go index 0567c8ab8..c54cea950 100644 --- a/runner/full.go +++ b/runner/full.go @@ -12,30 +12,37 @@ import ( "github.com/pganalyze/collector/grant" "github.com/pganalyze/collector/input" "github.com/pganalyze/collector/input/postgres" + "github.com/pganalyze/collector/logs" "github.com/pganalyze/collector/output" "github.com/pganalyze/collector/state" "github.com/pganalyze/collector/util" ) -func collectDiffAndSubmit(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedState, error) { +func collectDiffAndSubmit(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedState, state.CollectionStatus, error) { var newState state.PersistedState var err error var connection *sql.DB connection, err = postgres.EstablishConnection(server, logger, globalCollectionOpts, "") if err != nil { - return newState, fmt.Errorf("Failed to connect to database: %s", err) + return newState, state.CollectionStatus{}, fmt.Errorf("Failed to connect to database: %s", err) } newState, transientState, err := input.CollectFull(server, connection, globalCollectionOpts, logger) if err != nil { connection.Close() - return newState, err + return newState, state.CollectionStatus{}, err } // This is the easiest way to avoid opening multiple connections to different databases on the same instance connection.Close() + logsDisabled, logsDisabledReason := logs.ValidateLogCollectionConfig(server, transientState.Settings) + collectionStatus := state.CollectionStatus{ + LogSnapshotDisabled: logsDisabled, + LogSnapshotDisabledReason: logsDisabledReason, + } + collectedIntervalSecs := uint32(newState.CollectedAt.Sub(server.PrevState.CollectedAt) / time.Second) if collectedIntervalSecs == 0 { collectedIntervalSecs = 1 // Avoid divide by zero errors for fast consecutive runs @@ -47,7 +54,7 @@ func collectDiffAndSubmit(server state.Server, globalCollectionOpts state.Collec err = output.SendFull(server, globalCollectionOpts, logger, newState, diffState, transientState, collectedIntervalSecs) if err != nil { - return newState, err + return newState, collectionStatus, err } // After we've done all processing, and in case we did a reset, make sure the @@ -56,7 +63,7 @@ func collectDiffAndSubmit(server state.Server, globalCollectionOpts state.Collec newState.StatementStats = transientState.ResetStatementStats } - return newState, nil + return newState, collectionStatus, nil } func capturePanic(f func()) (err interface{}, stackTrace []byte) { @@ -71,9 +78,10 @@ func capturePanic(f func()) (err interface{}, stackTrace []byte) { return } -func processDatabase(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedState, state.Grant, error) { +func processServer(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedState, state.Grant, state.CollectionStatus, error) { var newGrant state.Grant var newState state.PersistedState + var collectionStatus state.CollectionStatus var err error if !globalCollectionOpts.ForceEmptyGrant { @@ -83,33 +91,32 @@ func processDatabase(server state.Server, globalCollectionOpts state.CollectionO if server.Grant.Valid { logger.PrintVerbose("Could not acquire snapshot grant, reusing previous grant: %s", err) } else { - return state.PersistedState{}, state.Grant{}, err + return state.PersistedState{}, state.Grant{}, state.CollectionStatus{}, err } } else { server.Grant = newGrant } } - transientState := state.TransientState{} + var sentryClient *raven.Client if server.Grant.Config.SentryDsn != "" { - transientState.SentryClient, err = raven.NewWithTags(server.Grant.Config.SentryDsn, map[string]string{"server_id": server.Grant.Config.ServerID}) - transientState.SentryClient.SetRelease(util.CollectorVersion) + sentryClient, err = raven.NewWithTags(server.Grant.Config.SentryDsn, map[string]string{"server_id": server.Grant.Config.ServerID}) if err != nil { - transientState.SentryClient = nil logger.PrintVerbose("Failed to setup Sentry client: %s", err) + } else { + sentryClient.SetRelease(util.CollectorVersion) } } runFunc := func() { - newState, err = collectDiffAndSubmit(server, globalCollectionOpts, logger) + newState, collectionStatus, err = collectDiffAndSubmit(server, globalCollectionOpts, logger) } var panicErr interface{} var stackTrace []byte - if transientState.SentryClient != nil { - panicErr, _ = transientState.SentryClient.CapturePanic(runFunc, nil) - transientState.SentryClient.Wait() - transientState.SentryClient = nil + if sentryClient != nil { + panicErr, _ = sentryClient.CapturePanic(runFunc, nil) + sentryClient.Wait() } else { panicErr, stackTrace = capturePanic(runFunc) } @@ -118,7 +125,7 @@ func processDatabase(server state.Server, globalCollectionOpts state.CollectionO logger.PrintVerbose("Panic: %s\n%s", err, stackTrace) } - return newState, newGrant, err + return newState, newGrant, collectionStatus, err } func runCompletionCallback(callbackType string, callbackCmd string, sectionName string, snapshotType string, errIn error, logger *util.Logger) { @@ -136,7 +143,7 @@ func runCompletionCallback(callbackType string, callbackCmd string, sectionName } // CollectAllServers - Collects statistics from all servers and sends them as full snapshots to the pganalyze service -func CollectAllServers(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (allSuccessful bool) { +func CollectAllServers(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (allSuccessful bool) { var wg sync.WaitGroup allSuccessful = true @@ -153,14 +160,14 @@ func CollectAllServers(servers []state.Server, globalCollectionOpts state.Collec } server.StateMutex.Lock() - newState, grant, err := processDatabase(*server, globalCollectionOpts, prefixedLogger) + newState, grant, newCollectionStatus, err := processServer(server, globalCollectionOpts, prefixedLogger) if err != nil { server.StateMutex.Unlock() allSuccessful = false prefixedLogger.PrintError("Could not process server: %s", err) if grant.Valid && !globalCollectionOpts.TestRun && globalCollectionOpts.SubmitCollectedData { server.Grant = grant - err = output.SendFailedFull(*server, globalCollectionOpts, prefixedLogger) + err = output.SendFailedFull(server, globalCollectionOpts, prefixedLogger) if err != nil { prefixedLogger.PrintWarning("Could not send error information to remote server: %s", err) } @@ -172,12 +179,19 @@ func CollectAllServers(servers []state.Server, globalCollectionOpts state.Collec server.Grant = grant server.PrevState = newState server.StateMutex.Unlock() + server.CollectionStatusMutex.Lock() + if newCollectionStatus.LogSnapshotDisabled { + warning := fmt.Sprintf("Skipping logs: %s", server.CollectionStatus.LogSnapshotDisabledReason) + prefixedLogger.PrintWarning(warning) + } + server.CollectionStatus = newCollectionStatus + server.CollectionStatusMutex.Unlock() if server.Config.SuccessCallback != "" { go runCompletionCallback("success", server.Config.SuccessCallback, server.Config.SectionName, "full", nil, prefixedLogger) } } wg.Done() - }(&servers[idx]) + }(servers[idx]) } wg.Wait() diff --git a/runner/logs.go b/runner/logs.go index 17fed118e..da70afed6 100644 --- a/runner/logs.go +++ b/runner/logs.go @@ -16,7 +16,7 @@ import ( "github.com/pkg/errors" ) -func downloadLogsForServer(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedLogState, bool, error) { +func downloadLogsForServer(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedLogState, bool, error) { newLogState := server.LogPrevState grant, err := grant.GetLogsGrant(server, globalCollectionOpts, logger) @@ -51,8 +51,39 @@ func downloadLogsForServer(server state.Server, globalCollectionOpts state.Colle return newLogState, true, nil } +func downloadLogsFromOneServer(wg *sync.WaitGroup, server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { + defer wg.Done() + prefixedLogger := logger.WithPrefixAndRememberErrors(server.Config.SectionName) + + server.CollectionStatusMutex.Lock() + if server.CollectionStatus.LogSnapshotDisabled { + server.LogStateMutex.Lock() + server.LogPrevState = state.PersistedLogState{} + server.LogStateMutex.Unlock() + server.CollectionStatusMutex.Unlock() + return + } + server.CollectionStatusMutex.Unlock() + + server.LogStateMutex.Lock() + newLogState, success, err := downloadLogsForServer(server, globalCollectionOpts, prefixedLogger) + if err != nil { + server.LogStateMutex.Unlock() + prefixedLogger.PrintError("Could not collect logs for server: %s", err) + if server.Config.ErrorCallback != "" { + go runCompletionCallback("error", server.Config.ErrorCallback, server.Config.SectionName, "logs", err, prefixedLogger) + } + } else { + server.LogPrevState = newLogState + server.LogStateMutex.Unlock() + if success && server.Config.SuccessCallback != "" { + go runCompletionCallback("success", server.Config.SuccessCallback, server.Config.SectionName, "logs", nil, prefixedLogger) + } + } +} + // TestLogsForAllServers - Test log download/tailing -func TestLogsForAllServers(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (hasFailedServers bool, hasSuccessfulLocalServers bool) { +func TestLogsForAllServers(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (hasFailedServers bool, hasSuccessfulLocalServers bool) { if !globalCollectionOpts.TestRun { return } @@ -63,6 +94,11 @@ func TestLogsForAllServers(servers []state.Server, globalCollectionOpts state.Co } prefixedLogger := logger.WithPrefixAndRememberErrors(server.Config.SectionName) + if server.CollectionStatus.LogSnapshotDisabled { + prefixedLogger.PrintWarning("WARNING - Configuration issue: %s", server.CollectionStatus.LogSnapshotDisabledReason) + prefixedLogger.PrintWarning(" Log collection will be disabled for this server") + continue + } logLinePrefix, err := postgres.GetPostgresSetting("log_line_prefix", server, globalCollectionOpts, prefixedLogger) if err != nil { @@ -119,43 +155,24 @@ func TestLogsForAllServers(servers []state.Server, globalCollectionOpts state.Co } // DownloadLogsFromAllServers - Downloads logs from all servers that are remote systems and sends them to the pganalyze service -func DownloadLogsFromAllServers(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func DownloadLogsFromAllServers(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { var wg sync.WaitGroup if !globalCollectionOpts.CollectLogs { return } - for idx := range servers { - if servers[idx].Config.DisableLogs || (servers[idx].Grant.Valid && !servers[idx].Grant.Config.EnableLogs) { + for _, server := range servers { + if server.Config.DisableLogs || (server.Grant.Valid && !server.Grant.Config.EnableLogs) { continue } - if servers[idx].Config.AwsDbInstanceID == "" { + if server.Config.AwsDbInstanceID == "" { continue } wg.Add(1) - go func(server *state.Server) { - prefixedLogger := logger.WithPrefixAndRememberErrors(server.Config.SectionName) - - server.LogStateMutex.Lock() - newLogState, success, err := downloadLogsForServer(*server, globalCollectionOpts, prefixedLogger) - if err != nil { - server.LogStateMutex.Unlock() - prefixedLogger.PrintError("Could not collect logs for server: %s", err) - if server.Config.ErrorCallback != "" { - go runCompletionCallback("error", server.Config.ErrorCallback, server.Config.SectionName, "logs", err, prefixedLogger) - } - } else if success { - server.LogPrevState = newLogState - server.LogStateMutex.Unlock() - if server.Config.SuccessCallback != "" { - go runCompletionCallback("success", server.Config.SuccessCallback, server.Config.SectionName, "logs", nil, prefixedLogger) - } - } - wg.Done() - }(&servers[idx]) + go downloadLogsFromOneServer(&wg, server, globalCollectionOpts, logger) } wg.Wait() diff --git a/runner/queries.go b/runner/queries.go index 6223f5f18..d8e78a74c 100644 --- a/runner/queries.go +++ b/runner/queries.go @@ -11,7 +11,7 @@ import ( "github.com/pkg/errors" ) -func gatherQueryStatsForServer(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedState, error) { +func gatherQueryStatsForServer(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (state.PersistedState, error) { var err error var connection *sql.DB @@ -60,7 +60,7 @@ func gatherQueryStatsForServer(server state.Server, globalCollectionOpts state.C return newState, nil } -func GatherQueryStatsFromAllServers(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func GatherQueryStatsFromAllServers(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { var wg sync.WaitGroup for idx := range servers { @@ -73,7 +73,7 @@ func GatherQueryStatsFromAllServers(servers []state.Server, globalCollectionOpts prefixedLogger := logger.WithPrefixAndRememberErrors(server.Config.SectionName) server.StateMutex.Lock() - newState, err := gatherQueryStatsForServer(*server, globalCollectionOpts, prefixedLogger) + newState, err := gatherQueryStatsForServer(server, globalCollectionOpts, prefixedLogger) if err != nil { server.StateMutex.Unlock() @@ -90,7 +90,7 @@ func GatherQueryStatsFromAllServers(servers []state.Server, globalCollectionOpts } } wg.Done() - }(&servers[idx]) + }(servers[idx]) } wg.Wait() diff --git a/runner/reports.go b/runner/reports.go index 97dfdf449..2d4eb9492 100644 --- a/runner/reports.go +++ b/runner/reports.go @@ -19,7 +19,7 @@ import ( "github.com/pganalyze/collector/util" ) -func runReport(reportType string, server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (report reports.Report) { +func runReport(reportType string, server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (report reports.Report) { var err error var connection *sql.DB @@ -61,7 +61,7 @@ type reportsApiResponse struct { Grant *state.Grant } -func getRequestedReports(server state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (requestedReports []reports.Report, grant state.Grant, err error) { +func getRequestedReports(server *state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) (requestedReports []reports.Report, grant state.Grant, err error) { data := url.Values{"supported_reports": {strings.Join(reports.SupportedReports, ",")}} req, err := http.NewRequest("POST", server.Config.APIBaseURL+"/v2/reports/fetch_runs", strings.NewReader(data.Encode())) if err != nil { @@ -117,7 +117,7 @@ func getRequestedReports(server state.Server, globalCollectionOpts state.Collect } // RunTestReport - Runs globalCollectionOpts.TestReport for all servers and outputs the result to stdout -func RunTestReport(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func RunTestReport(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { for _, server := range servers { report := runReport(globalCollectionOpts.TestReport, server, globalCollectionOpts, logger) if report == nil { @@ -137,7 +137,7 @@ func RunTestReport(servers []state.Server, globalCollectionOpts state.Collection } // RunRequestedReports - Retrieves current report requests from the server, runs them and submits their data -func RunRequestedReports(servers []state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { +func RunRequestedReports(servers []*state.Server, globalCollectionOpts state.CollectionOpts, logger *util.Logger) { for _, server := range servers { if !server.Config.EnableReports { continue diff --git a/state/state.go b/state/state.go index 87a8ee6bd..ea3869e3c 100644 --- a/state/state.go +++ b/state/state.go @@ -214,6 +214,11 @@ type GrantS3 struct { S3Fields map[string]string `json:"s3_fields"` } +type CollectionStatus struct { + LogSnapshotDisabled bool + LogSnapshotDisabledReason string +} + type Server struct { Config config.ServerConfig RequestedSslMode string @@ -227,4 +232,7 @@ type Server struct { ActivityPrevState PersistedActivityState ActivityStateMutex *sync.Mutex + + CollectionStatus CollectionStatus + CollectionStatusMutex *sync.Mutex } diff --git a/state/state_file.go b/state/state_file.go index 6bb1192be..52fb6fc5f 100644 --- a/state/state_file.go +++ b/state/state_file.go @@ -8,7 +8,7 @@ import ( "github.com/pganalyze/collector/util" ) -func WriteStateFile(servers []Server, globalCollectionOpts CollectionOpts, logger *util.Logger) { +func WriteStateFile(servers []*Server, globalCollectionOpts CollectionOpts, logger *util.Logger) { stateOnDisk := StateOnDisk{PrevStateByServer: make(map[config.ServerIdentifier]PersistedState), FormatVersion: StateOnDiskFormatVersion} for _, server := range servers { @@ -27,7 +27,7 @@ func WriteStateFile(servers []Server, globalCollectionOpts CollectionOpts, logge } // ReadStateFile - This reads in the prevState structs from the state file - only run this on initial bootup and SIGHUP! -func ReadStateFile(servers []Server, globalCollectionOpts CollectionOpts, logger *util.Logger) { +func ReadStateFile(servers []*Server, globalCollectionOpts CollectionOpts, logger *util.Logger) { var stateOnDisk StateOnDisk file, err := os.Open(globalCollectionOpts.StateFilename)