From 1bcfa73923dda0cb6acb4f296494bd1a10f34c29 Mon Sep 17 00:00:00 2001 From: Sarthak Nandi Date: Fri, 1 Mar 2024 11:48:45 -0800 Subject: [PATCH] Merge master to 1.0.0-SNAPSHOT (#623) * Fix node resolver for empty/missing files (#587) * Autogenerated JaCoCo coverage badge * Bump to v0.26.1 (#588) * Autogenerated JaCoCo coverage badge * parallel explain for nrtsearch (#589) * parallel explain for nrtsearch * fix nit * add explain for multi segment parallel * refactor isExplain in different contexts * make NRTSearch empty boolean query result constant score 1 (#592) * make NRTSearch empty boolean query result constant score 1 * fix tests * soft exception for fvh failures (#593) * Support unit in SortType (#590) create sort context and support unit in lat_lon distance sort * Autogenerated JaCoCo coverage badge * Upgrade dependencies for snyk check (#596) * Fix example-plugin test (#598) * Add page fault metrics (#599) * Add additional merge metrics (#607) * Add live setting for verbose index metrics (#608) * Add live setting for verbose index metrics * Address review comment * Autogenerated JaCoCo coverage badge * Bump to v0.29.0 (#609) * Add live index settings override from config file (#610) * Autogenerated JaCoCo coverage badge * Add ability to update local index live settings (#611) * Add deadline cancellation for indexing (#612) * Add geo polygon query type (#613) * Add geo polygon query type * Detect closed polygons, update docs * Autogenerated JaCoCo coverage badge * Bump to v0.30.0 (#615) * Testing readthedocs web hooks (#616) * Add a bare minimum readthedocs config file (#617) * log more info when fvh failed (#618) log more info when fvh failed * Avoid calling query.toString() (#619) * add sts for web identity auth (#620) add sts for web identity auth * Add search diagnostics to deadline exceeded exceptions (#621) * Add search diagnostics to deadline exceeded exceptions --------- Co-authored-by: swekannan * Fixes and spotless apply * Updated grpc-gateway --------- Co-authored-by: Andrew Prudhomme Co-authored-by: github_actions Co-authored-by: github_actions Co-authored-by: Tao Yu Co-authored-by: waziqi89 <89210409+waziqi89@users.noreply.github.com> Co-authored-by: github_actions Co-authored-by: github_actions Co-authored-by: github_actions Co-authored-by: github_actions Co-authored-by: Mohammad Mohtasham Co-authored-by: swekannan <62616258+swekannan@users.noreply.github.com> Co-authored-by: swekannan --- .readthedocs.yaml | 34 + build.gradle | 1 + .../proto/yelp/nrtsearch/luceneserver.proto | 4 + .../main/proto/yelp/nrtsearch/search.proto | 18 + docs/queries/geo_polygon.rst | 19 + grpc-gateway/luceneserver.pb.go | 2371 ++++++------ grpc-gateway/luceneserver.swagger.json | 65 +- grpc-gateway/search.pb.go | 3255 +++++++++-------- .../server/cli/LiveSettingsV2Command.java | 29 + .../config/LuceneServerConfiguration.java | 33 + .../nrtsearch/server/grpc/DeadlineUtils.java | 18 + .../nrtsearch/server/grpc/LuceneServer.java | 47 +- .../luceneserver/AddDocumentHandler.java | 3 + .../server/luceneserver/IndexState.java | 3 + .../luceneserver/LiveSettingsHandler.java | 2 +- .../server/luceneserver/MyIndexSearcher.java | 5 +- .../server/luceneserver/NRTPrimaryNode.java | 3 + .../server/luceneserver/QueryNodeMapper.java | 14 + .../server/luceneserver/SearchHandler.java | 15 +- .../server/luceneserver/ShardState.java | 9 + .../luceneserver/field/LatLonFieldDef.java | 56 + .../field/properties/GeoQueryable.java | 9 + .../highlights/NRTFastVectorHighlighter.java | 6 +- .../index/BackendStateManager.java | 63 +- .../index/ImmutableIndexState.java | 56 +- .../luceneserver/index/IndexStateManager.java | 15 +- .../index/handlers/LiveSettingsV2Handler.java | 5 +- .../state/BackendGlobalState.java | 37 +- .../monitoring/MergeSchedulerCollector.java | 87 + .../server/monitoring/NrtMetrics.java | 16 + .../monitoring/VerboseIndexCollector.java | 141 + .../nrtsearch/server/utils/JsonUtils.java | 37 + .../lucene/facet/DrillSidewaysQueryCheck.java | 25 + .../server/cli/CreateIndexCommandTest.java | 2 +- .../server/cli/LiveSettingsV2CommandTest.java | 167 + .../config/LuceneServerConfigurationTest.java | 41 + .../server/grpc/DeadlineUtilsTest.java | 45 + .../nrtsearch/server/grpc/IndexStartTest.java | 2 +- .../server/grpc/StateBackendServerTest.java | 259 ++ .../MyIndexSearcherVirtualShardsTest.java | 3 +- .../field/LatLonFieldDefTest.java | 342 ++ .../field/VectorFieldDefTest.java | 2 +- .../index/BackendStateManagerTest.java | 578 ++- .../index/BucketedTieredMergePolicyTest.java | 3 +- .../index/ImmutableIndexStateTest.java | 88 +- .../search/TerminateAfterWrapperTest.java | 3 +- .../FilterCollectorManagerTest.java | 2 +- .../additional/MaxCollectorManagerTest.java | 2 +- .../additional/NestedCollectorOrderTest.java | 2 +- .../state/BackendGlobalStateTest.java | 105 +- .../MergeSchedulerCollectorTest.java | 109 + .../monitoring/VerboseIndexCollectorTest.java | 101 + .../facet/DrillSidewaysQueryCheckTest.java | 37 + 53 files changed, 5580 insertions(+), 2814 deletions(-) create mode 100644 .readthedocs.yaml create mode 100644 docs/queries/geo_polygon.rst create mode 100644 src/main/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollector.java create mode 100644 src/main/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollector.java create mode 100644 src/main/java/com/yelp/nrtsearch/server/utils/JsonUtils.java create mode 100644 src/main/java/org/apache/lucene/facet/DrillSidewaysQueryCheck.java create mode 100644 src/test/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2CommandTest.java create mode 100644 src/test/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollectorTest.java create mode 100644 src/test/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollectorTest.java create mode 100644 src/test/java/org/apache/lucene/facet/DrillSidewaysQueryCheckTest.java diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 000000000..718bd1af9 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,34 @@ +# Read the Docs configuration file for Sphinx projects +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.12" + # You can also specify other tool versions: + # nodejs: "20" + # rust: "1.70" + # golang: "1.20" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/conf.py + # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs + # builder: "dirhtml" + # Fail on all warnings to avoid broken references + # fail_on_warning: true +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +# python: +# install: +# - requirements: docs/requirements.txt diff --git a/build.gradle b/build.gradle index f72b3a070..25eb6ce51 100644 --- a/build.gradle +++ b/build.gradle @@ -75,6 +75,7 @@ dependencies { implementation "org.apache.commons:commons-compress:${commonsCompressVersion}" implementation "com.amazonaws:aws-java-sdk-core:${awsJavaSdkVersion}" implementation "com.amazonaws:aws-java-sdk-s3:${awsJavaSdkVersion}" + runtimeOnly "com.amazonaws:aws-java-sdk-sts:${awsJavaSdkVersion}" implementation "javax.xml.bind:jaxb-api:2.3.1" implementation "com.guicedee.services:guice:${guicedeeVersion}" implementation "org.lz4:lz4-java:${project.ext.lz4Version}" diff --git a/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto b/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto index 67be593ce..8ac7b4918 100644 --- a/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto +++ b/clientlib/src/main/proto/yelp/nrtsearch/luceneserver.proto @@ -470,6 +470,8 @@ message LiveSettingsV2Request { string indexName = 1; // Live settings to merge into existing live settings, or unset to get current live settings IndexLiveSettings liveSettings = 2; + // When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true. + bool local = 3; } message LiveSettingsV2Response { @@ -1062,6 +1064,8 @@ message IndexLiveSettings { google.protobuf.Int32Value defaultTerminateAfter = 13; // Merge precopy would be stopped after this time, or 0 for no checks, default: 0 google.protobuf.UInt64Value maxMergePreCopyDurationSec = 14; + // Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false + google.protobuf.BoolValue verboseMetrics = 15; } message IndexStateInfo { diff --git a/clientlib/src/main/proto/yelp/nrtsearch/search.proto b/clientlib/src/main/proto/yelp/nrtsearch/search.proto index 589a63e37..38600dc45 100644 --- a/clientlib/src/main/proto/yelp/nrtsearch/search.proto +++ b/clientlib/src/main/proto/yelp/nrtsearch/search.proto @@ -263,6 +263,22 @@ message GeoPointQuery { google.type.LatLng point = 2; // point used to query whether the polygon contains it. } +// Polygon defined by a list of geo points +message Polygon { + // Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side. + repeated google.type.LatLng points = 1; + // Specify holes in the polygon. Hole polygons cannot themselves contain holes. + repeated Polygon holes = 2; +} + +// A query that matches documents with geo points within polygons +message GeoPolygonQuery { + // Field in the document to query + string field = 1; + // Geo polygons to search for containing points + repeated Polygon polygons = 2; +} + // A query that matches documents which contain a value for a field. message ExistsQuery { string field = 1; // Field in the document to query @@ -363,6 +379,7 @@ enum QueryType { MATCH_PHRASE_PREFIX = 18; PREFIX = 19; CONSTANT_SCORE_QUERY = 20; + GEO_POLYGON = 21; } // Defines a full query consisting of a QueryNode which may be one of several types. @@ -392,6 +409,7 @@ message Query { MatchPhrasePrefixQuery matchPhrasePrefixQuery = 21; PrefixQuery prefixQuery = 22; ConstantScoreQuery constantScoreQuery = 23; + GeoPolygonQuery geoPolygonQuery = 24; } } diff --git a/docs/queries/geo_polygon.rst b/docs/queries/geo_polygon.rst new file mode 100644 index 000000000..0785bd6c7 --- /dev/null +++ b/docs/queries/geo_polygon.rst @@ -0,0 +1,19 @@ +Geo-Polygon Query +========================== + +A query that matches documents with geo point within a defined set of polygons. + +Polygon definitions must conform to the `GeoJson `_ standard. +Polygons must not be self-crossing, otherwise may result in unexpected behavior. +Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side. + +Proto definition: + +.. code-block:: + + message GeoPolygonQuery { + // Field in the document to query + string field = 1; + // Geo polygons to search for containing points + repeated Polygon polygons = 2; + } \ No newline at end of file diff --git a/grpc-gateway/luceneserver.pb.go b/grpc-gateway/luceneserver.pb.go index 2888d2bde..07d7e5344 100644 --- a/grpc-gateway/luceneserver.pb.go +++ b/grpc-gateway/luceneserver.pb.go @@ -851,6 +851,8 @@ type LiveSettingsV2Request struct { IndexName string `protobuf:"bytes,1,opt,name=indexName,proto3" json:"indexName,omitempty"` // Live settings to merge into existing live settings, or unset to get current live settings LiveSettings *IndexLiveSettings `protobuf:"bytes,2,opt,name=liveSettings,proto3" json:"liveSettings,omitempty"` + // When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true. + Local bool `protobuf:"varint,3,opt,name=local,proto3" json:"local,omitempty"` } func (x *LiveSettingsV2Request) Reset() { @@ -899,6 +901,13 @@ func (x *LiveSettingsV2Request) GetLiveSettings() *IndexLiveSettings { return nil } +func (x *LiveSettingsV2Request) GetLocal() bool { + if x != nil { + return x.Local + } + return false +} + type LiveSettingsV2Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5390,6 +5399,8 @@ type IndexLiveSettings struct { DefaultTerminateAfter *wrapperspb.Int32Value `protobuf:"bytes,13,opt,name=defaultTerminateAfter,proto3" json:"defaultTerminateAfter,omitempty"` // Merge precopy would be stopped after this time, or 0 for no checks, default: 0 MaxMergePreCopyDurationSec *wrapperspb.UInt64Value `protobuf:"bytes,14,opt,name=maxMergePreCopyDurationSec,proto3" json:"maxMergePreCopyDurationSec,omitempty"` + // Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false + VerboseMetrics *wrapperspb.BoolValue `protobuf:"bytes,15,opt,name=verboseMetrics,proto3" json:"verboseMetrics,omitempty"` } func (x *IndexLiveSettings) Reset() { @@ -5522,6 +5533,13 @@ func (x *IndexLiveSettings) GetMaxMergePreCopyDurationSec() *wrapperspb.UInt64Va return nil } +func (x *IndexLiveSettings) GetVerboseMetrics() *wrapperspb.BoolValue { + if x != nil { + return x.VerboseMetrics + } + return nil +} + type IndexStateInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5985,1108 +6003,1114 @@ var file_yelp_nrtsearch_luceneserver_proto_rawDesc = []byte{ 0x32, 0x0a, 0x14, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x7a, 0x0a, 0x15, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x6c, 0x69, - 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, - 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, - 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x6c, 0x69, 0x76, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xaa, - 0x0b, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x44, 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, - 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x68, - 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x6f, 0x6d, 0x69, 0x74, 0x4e, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x6f, 0x6d, 0x69, 0x74, 0x4e, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, - 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x46, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x06, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x08, 0x61, - 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x6e, - 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x56, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x0b, 0x74, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, - 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x66, 0x61, 0x63, 0x65, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x6e, 0x73, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0c, 0x6c, + 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x5d, 0x0a, 0x16, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x43, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xaa, 0x0b, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x66, 0x61, 0x63, 0x65, - 0x74, 0x12, 0x30, 0x0a, 0x13, 0x66, 0x61, 0x63, 0x65, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x66, 0x61, 0x63, 0x65, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x6f, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x08, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, + 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x6d, 0x69, 0x74, 0x4e, 0x6f, 0x72, 0x6d, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x6d, 0x69, 0x74, 0x4e, 0x6f, 0x72, + 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x6f, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x6f, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x6f, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3e, 0x0a, 0x0c, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x7a, 0x65, 0x72, 0x52, 0x08, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x3c, + 0x0a, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x0d, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0e, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x0e, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, + 0x74, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x0b, 0x74, 0x65, + 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x6d, + 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x66, 0x61, 0x63, + 0x65, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x05, 0x66, 0x61, 0x63, 0x65, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x66, 0x61, 0x63, 0x65, + 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x66, 0x61, 0x63, 0x65, 0x74, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x14, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x10, 0x73, 0x69, 0x6d, 0x69, 0x6c, + 0x61, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x43, 0x0a, 0x10, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x10, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, - 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x13, - 0x65, 0x61, 0x67, 0x65, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x6c, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x61, 0x67, 0x65, 0x72, - 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x63, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x63, 0x12, 0x2a, 0x0a, 0x10, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, - 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x65, 0x61, 0x67, 0x65, - 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x65, 0x61, 0x67, 0x65, - 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x59, 0x0a, 0x15, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, - 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x15, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x74, 0x0a, 0x15, 0x56, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x68, 0x6e, 0x73, 0x77, - 0x5f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x68, 0x6e, 0x73, 0x77, 0x4d, 0x12, - 0x30, 0x0a, 0x14, 0x68, 0x6e, 0x73, 0x77, 0x5f, 0x65, 0x66, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x68, - 0x6e, 0x73, 0x77, 0x45, 0x66, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x5a, 0x0a, 0x0f, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x10, 0x73, 0x69, 0x6d, 0x69, + 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x0b, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x2e, 0x0a, - 0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, 0x05, - 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2a, 0x0a, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, - 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x4d, 0x61, 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x21, 0x6e, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x65, 0x61, 0x67, 0x65, 0x72, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x13, 0x65, 0x61, 0x67, 0x65, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x44, + 0x6f, 0x63, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x44, 0x6f, 0x63, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x3a, 0x0a, 0x18, 0x65, 0x61, 0x67, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x47, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x18, 0x65, 0x61, 0x67, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x47, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x69, 0x6d, + 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x12, 0x59, 0x0a, 0x15, 0x76, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x15, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x74, 0x0a, 0x15, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x15, 0x0a, 0x06, 0x68, 0x6e, 0x73, 0x77, 0x5f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x68, 0x6e, 0x73, 0x77, 0x4d, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x6e, 0x73, 0x77, 0x5f, 0x65, + 0x66, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x68, 0x6e, 0x73, 0x77, 0x45, 0x66, 0x43, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5a, 0x0a, 0x0f, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x22, 0x2e, 0x0a, 0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, + 0x61, 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x10, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x42, 0x50, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, - 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x42, 0x0a, 0x1c, 0x6e, 0x72, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, - 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x56, 0x0a, - 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x26, 0x63, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x12, 0x42, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, + 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x56, 0x0a, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, - 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, - 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, - 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, - 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x25, + 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x25, 0x63, 0x6f, 0x6e, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x46, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, - 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x2e, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x22, 0x4d, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x22, 0x9f, 0x02, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x32, - 0x0a, 0x14, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x69, - 0x6c, 0x65, 0x22, 0x33, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x22, 0xe2, - 0x02, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x7a, 0x0a, 0x10, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x66, 0x61, 0x63, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, - 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, - 0x61, 0x63, 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x12, 0x66, 0x61, 0x63, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, - 0x50, 0x61, 0x74, 0x68, 0x73, 0x1a, 0x6c, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x12, 0x46, 0x61, 0x63, 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, - 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x49, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0e, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x37, 0x0a, 0x0f, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, - 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x53, 0x22, 0x2d, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, - 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0xaf, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, - 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x72, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x74, 0x61, 0x78, 0x6f, - 0x6e, 0x6f, 0x6d, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x78, 0x6f, 0x6e, 0x6f, - 0x6d, 0x79, 0x52, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x34, 0x0a, 0x09, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x72, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x65, 0x72, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x22, 0x40, 0x0a, 0x08, 0x54, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x08, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x2e, 0x0a, 0x10, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x11, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x4d, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, + 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9f, 0x02, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x47, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x69, + 0x6d, 0x61, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x33, 0x0a, 0x13, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x84, + 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x73, 0x74, - 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, - 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0x39, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x4d, 0x53, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x22, 0xe2, 0x02, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x22, 0x32, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x0d, 0x44, 0x75, 0x6d, - 0x6d, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, - 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, - 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x15, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x22, 0xb8, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, - 0x24, 0x0a, 0x0d, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, - 0x66, 0x0a, 0x0a, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x78, - 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x22, 0x70, 0x0a, 0x16, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x1a, 0x7a, 0x0a, 0x10, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x66, 0x61, + 0x63, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, + 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x12, 0x66, 0x61, 0x63, 0x65, 0x48, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1a, 0x6c, 0x0a, 0x0b, + 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x47, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x12, 0x46, 0x61, + 0x63, 0x65, 0x74, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x49, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, + 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, + 0x64, 0x22, 0x2e, 0x0a, 0x0e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x37, 0x0a, 0x0f, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, + 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x53, 0x22, 0x2d, 0x0a, 0x0d, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x0c, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xaf, 0x02, 0x0a, 0x0d, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, + 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, + 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x64, 0x69, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x32, 0x0a, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x52, 0x08, 0x74, 0x61, 0x78, 0x6f, 0x6e, + 0x6f, 0x6d, 0x79, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x52, 0x09, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x22, 0x40, 0x0a, 0x08, 0x54, + 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x4f, 0x72, 0x64, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x01, + 0x0a, 0x08, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, + 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x39, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x67, 0x65, 0x6e, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, + 0x22, 0x1f, 0x0a, 0x0d, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, + 0x6b, 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6c, + 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x59, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, + 0x70, 0x65, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x22, 0xb8, 0x01, 0x0a, 0x16, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, + 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, + 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0a, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, + 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, + 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x22, 0x70, + 0x0a, 0x16, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, + 0x22, 0x33, 0x0a, 0x17, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x38, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x38, 0x0a, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x52, 0x0a, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x17, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x38, - 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x47, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x39, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, - 0x65, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, - 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6e, - 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x36, 0x0a, - 0x16, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x54, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x75, - 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, - 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0f, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, 0x12, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, - 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, - 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x44, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xa1, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, - 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x22, 0x24, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xce, 0x02, 0x0a, 0x09, 0x43, 0x6f, - 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, - 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x22, 0x6b, 0x0a, 0x0d, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6e, - 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, - 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, - 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd0, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x6c, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x22, - 0x0a, 0x0c, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x09, 0x43, - 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, - 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, - 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x70, 0x0a, 0x10, 0x43, - 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x39, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x13, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x1e, 0x0a, 0x1c, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x0a, 0x0e, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, + 0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4a, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, + 0x12, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x0a, 0x0c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, + 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, + 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x24, 0x0a, 0x12, 0x41, 0x64, + 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, + 0x22, 0xce, 0x02, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, + 0x0a, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x69, 0x6e, 0x66, + 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x7a, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, + 0x6e, 0x22, 0x6b, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3e, + 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd0, + 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6c, 0x65, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, + 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, 0x6f, 0x6f, + 0x74, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6f, + 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x6f, 0x6f, 0x74, 0x65, + 0x72, 0x22, 0xae, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x22, 0x9d, 0x01, - 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x6d, - 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x7c, 0x0a, - 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x22, 0x52, 0x0a, 0x0c, 0x52, - 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x22, - 0x2a, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x4f, 0x0a, 0x13, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, + 0x41, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x70, 0x0a, 0x10, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, + 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, + 0x12, 0x32, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x7c, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x66, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, + 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, 0x75, + 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x4e, + 0x75, 0x6d, 0x22, 0x52, 0x0a, 0x0c, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x65, + 0x71, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x22, 0x2a, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x22, 0x4f, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x22, 0x33, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x22, 0x33, 0x0a, 0x11, - 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x22, 0x60, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, - 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x47, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4b, 0x0a, - 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x0b, 0x4e, + 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x64, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x64, - 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x22, 0x2f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x08, 0x4e, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x5f, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x71, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, - 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x46, - 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x3e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x15, - 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x43, 0x45, - 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, - 0x10, 0x01, 0x22, 0x50, 0x0a, 0x18, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, - 0x57, 0x61, 0x69, 0x74, 0x22, 0xb3, 0x01, 0x0a, 0x19, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4b, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x64, 0x69, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x64, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x22, 0x2f, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x40, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x22, 0x3a, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x5f, 0x0a, + 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x71, + 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x4e, 0x75, + 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x57, + 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, + 0x74, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3e, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, + 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, + 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x53, 0x55, + 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x50, 0x0a, 0x18, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0xb3, 0x01, 0x0a, 0x19, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, - 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x4f, 0x52, 0x43, 0x45, - 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x53, - 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x9f, 0x05, 0x0a, 0x0d, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x6a, 0x0a, 0x21, - 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, - 0x42, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x1d, 0x46, + 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, + 0x45, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, + 0x0a, 0x1d, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, + 0x01, 0x22, 0x9f, 0x05, 0x0a, 0x0d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x6a, 0x0a, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x60, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, - 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x6e, 0x72, + 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x73, 0x0a, 0x26, 0x63, 0x6f, - 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x71, 0x0a, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, - 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, - 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x25, 0x63, 0x6f, 0x6e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, - 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x64, 0x0a, 0x1f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, - 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xe1, 0x08, 0x0a, - 0x11, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x53, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x6d, 0x69, 0x6e, - 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x11, 0x6d, 0x61, - 0x78, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x79, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, + 0x60, 0x0a, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, - 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x12, 0x50, 0x0a, 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x04, + 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x6e, 0x72, 0x74, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x4d, + 0x42, 0x12, 0x73, 0x0a, 0x26, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, + 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x26, + 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x61, + 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x71, 0x0a, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x25, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x4d, + 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x6f, 0x72, + 0x74, 0x12, 0x64, 0x0a, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x6f, + 0x74, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x54, + 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x22, 0xa5, 0x09, 0x0a, 0x11, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x61, 0x78, + 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, + 0x6d, 0x61, 0x78, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x12, 0x42, 0x0a, + 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, 0x57, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x44, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x4c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x65, - 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, 0x63, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, - 0x63, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, - 0x4d, 0x61, 0x78, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x76, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, - 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x4d, 0x42, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, - 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x42, 0x12, 0x45, 0x0a, 0x0f, 0x73, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x69, 0x65, 0x72, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x69, - 0x65, 0x72, 0x12, 0x56, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x12, 0x63, 0x0a, 0x1e, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x1e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x12, - 0x51, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x75, 0x65, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, + 0x63, 0x12, 0x4a, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, + 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x41, 0x67, 0x65, 0x53, 0x65, 0x63, 0x12, 0x50, 0x0a, + 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, + 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x61, 0x6d, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x42, 0x12, + 0x57, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, + 0x61, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, + 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x6c, 0x69, 0x63, + 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x1a, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, - 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, - 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, - 0x22, 0xee, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, - 0x67, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x6c, 0x69, - 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x40, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x1a, 0x4e, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x6c, 0x69, + 0x63, 0x65, 0x4d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x6c, 0x69, + 0x63, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, + 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, + 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x42, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, + 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x4d, 0x42, 0x12, 0x45, 0x0a, 0x0f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x65, + 0x72, 0x54, 0x69, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x69, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x17, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x53, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x63, 0x12, 0x63, 0x0a, 0x1e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x12, 0x51, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x1a, 0x6d, 0x61, 0x78, + 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x6d, 0x61, 0x78, + 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x76, 0x65, 0x72, + 0x62, 0x6f, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xee, 0x02, 0x0a, 0x0e, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, + 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x67, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x08, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x69, + 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x4e, 0x0a, 0x0b, + 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x29, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0f, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, + 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x67, 0x65, 0x6e, + 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5a, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x0d, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x01, 0x0a, 0x0e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, + 0x3b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x22, - 0xc5, 0x01, 0x0a, 0x0f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x67, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5a, 0x0a, 0x0c, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x0d, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3f, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, - 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x01, 0x0a, 0x0e, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 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, 0x2a, 0xdc, 0x01, 0x0a, 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x08, 0x0a, 0x04, 0x41, 0x54, 0x4f, 0x4d, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, - 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, - 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4f, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, - 0x54, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x05, 0x12, - 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x41, - 0x54, 0x5f, 0x4c, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, 0x5f, - 0x54, 0x49, 0x4d, 0x45, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, - 0x4c, 0x10, 0x09, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, - 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x0b, 0x12, 0x07, 0x0a, - 0x03, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x4f, 0x4c, 0x59, 0x47, 0x4f, - 0x4e, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0e, 0x12, - 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x43, - 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x10, 0x10, - 0x2a, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x44, 0x4f, 0x43, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x43, 0x53, 0x5f, - 0x46, 0x52, 0x45, 0x51, 0x53, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x4f, 0x43, 0x53, 0x5f, - 0x46, 0x52, 0x45, 0x51, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, - 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x5f, - 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, - 0x53, 0x10, 0x04, 0x2a, 0x84, 0x01, 0x0a, 0x0b, 0x54, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x56, 0x45, - 0x43, 0x54, 0x4f, 0x52, 0x53, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x45, 0x52, 0x4d, 0x53, - 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, - 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x52, 0x4d, 0x53, - 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, - 0x54, 0x53, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, - 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x5f, - 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x53, 0x10, 0x04, 0x2a, 0x61, 0x0a, 0x09, 0x46, 0x61, - 0x63, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x46, 0x41, - 0x43, 0x45, 0x54, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4c, 0x41, 0x54, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x02, 0x12, - 0x11, 0x0a, 0x0d, 0x4e, 0x55, 0x4d, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, - 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x54, - 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x10, 0x04, 0x2a, 0x30, 0x0a, - 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x4c, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x02, 0x2a, - 0x44, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, - 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x6e, 0x67, 0x6f, - 0x69, 0x6e, 0x67, 0x10, 0x03, 0x32, 0xa3, 0x20, 0x0a, 0x0c, 0x4c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, + 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, 0x2a, 0xdc, 0x01, 0x0a, + 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, + 0x4f, 0x4d, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x01, 0x12, 0x0b, + 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4c, + 0x4f, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, + 0x4f, 0x41, 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x41, 0x54, 0x5f, 0x4c, 0x4f, 0x4e, + 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, + 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x09, 0x12, 0x0c, + 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x0a, 0x12, 0x0a, 0x0a, 0x06, + 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x0b, 0x12, 0x07, 0x0a, 0x03, 0x5f, 0x49, 0x44, 0x10, + 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x4f, 0x4c, 0x59, 0x47, 0x4f, 0x4e, 0x10, 0x0d, 0x12, 0x0a, + 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0e, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, + 0x43, 0x54, 0x4f, 0x52, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, + 0x54, 0x5f, 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x10, 0x10, 0x2a, 0x71, 0x0a, 0x0c, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x44, + 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x43, 0x53, + 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, + 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, + 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, + 0x44, 0x4f, 0x43, 0x53, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, + 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x10, 0x04, 0x2a, 0x84, + 0x01, 0x0a, 0x0b, 0x54, 0x65, 0x72, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x12, + 0x0a, 0x0e, 0x4e, 0x4f, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x53, + 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x13, 0x0a, + 0x0f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, + 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, + 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x10, 0x03, 0x12, + 0x24, 0x0a, 0x20, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, + 0x41, 0x44, 0x53, 0x10, 0x04, 0x2a, 0x61, 0x0a, 0x09, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x46, 0x41, 0x43, 0x45, 0x54, 0x53, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4c, 0x41, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x48, + 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x55, + 0x4d, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x03, 0x12, 0x19, 0x0a, + 0x15, 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x44, 0x4f, 0x43, 0x5f, + 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x10, 0x04, 0x2a, 0x30, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, + 0x07, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x10, 0x02, 0x2a, 0x44, 0x0a, 0x12, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x44, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x10, 0x03, + 0x32, 0xa3, 0x20, 0x0a, 0x0c, 0x4c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x12, 0x6f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, + 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x6c, 0x69, 0x76, 0x65, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x76, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, 0x0a, - 0x0e, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, - 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, - 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x37, 0x22, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x5a, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x32, 0x2f, - 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6f, 0x0a, 0x0e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, - 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0c, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, - 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, - 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0a, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x0c, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x7d, 0x12, 0x6b, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, - 0x6f, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x12, - 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, - 0x32, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, - 0x12, 0x63, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1e, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x75, 0x6d, - 0x6d, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x5e, 0x0a, 0x07, 0x72, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x27, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x5a, - 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x32, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, + 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x11, 0x2f, + 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x3a, 0x01, 0x2a, 0x5a, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6f, 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, + 0x31, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1d, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x22, 0x0c, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, + 0x2a, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6b, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1f, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0c, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x63, 0x0a, 0x09, 0x73, + 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, + 0x12, 0x6f, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, + 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x5e, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, + 0x68, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x32, - 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x64, 0x0a, 0x06, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, - 0x12, 0x76, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, - 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x6c, - 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, - 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x77, 0x0a, 0x0d, 0x73, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, - 0x67, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x3a, - 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x0e, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x23, 0x2e, 0x6c, 0x75, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x3a, + 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x09, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x5a, 0x17, 0x12, 0x15, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0x5a, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, + 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, + 0x54, 0x0a, 0x08, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x32, 0x12, 0x1b, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x22, 0x15, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x64, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, + 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, + 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x76, 0x0a, 0x0d, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x22, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x41, 0x64, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, + 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, + 0x12, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x6c, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, + 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6f, + 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, + 0x73, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x77, 0x0a, 0x0d, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x4c, + 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, + 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, + 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, - 0x65, 0x6e, 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x47, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x67, 0x65, 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x29, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6c, 0x75, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x3a, 0x01, + 0x2a, 0x12, 0x7f, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x12, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x3a, + 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x12, 0x26, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x74, 0x5f, + 0x61, 0x6c, 0x6c, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x5f, 0x67, 0x65, 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, + 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, - 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x77, 0x61, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6f, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x5a, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0x61, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x78, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1f, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x79, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, - 0x64, 0x79, 0x5a, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x2f, - 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x7d, 0x12, 0x50, 0x0a, 0x07, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, - 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5b, - 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, - 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x0a, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x61, 0x72, 0x6d, + 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x27, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, + 0x2a, 0x5a, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x7b, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x61, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x78, 0x0a, + 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x25, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5a, 0x18, 0x12, + 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x7d, 0x12, 0x50, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, + 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x5b, 0x0a, 0x07, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4d, + 0x65, 0x72, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, + 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, + 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, + 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, - 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, - 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, - 0x6d, 0x65, 0x72, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x11, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x26, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, - 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1b, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x3a, 0x01, 0x2a, 0x32, 0x9c, 0x06, 0x0a, 0x11, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x12, 0x52, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x12, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x43, 0x6f, 0x70, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x00, 0x12, 0x4b, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, - 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1c, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x28, 0x01, 0x12, 0x45, - 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, - 0x46, 0x69, 0x6c, 0x65, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, - 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x46, 0x0a, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, - 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x4e, - 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4e, 0x52, 0x54, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x55, 0x0a, - 0x19, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, - 0x61, 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x56, 0x0a, 0x1e, 0x63, 0x6f, - 0x6d, 0x2e, 0x79, 0x65, 0x6c, 0x70, 0x2e, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x42, 0x11, 0x4c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x59, 0x65, - 0x6c, 0x70, 0x2f, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0xa2, 0x02, 0x03, 0x48, - 0x4c, 0x57, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, + 0x72, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x66, + 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x7d, 0x3a, 0x01, 0x2a, 0x32, 0x9c, 0x06, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x0b, + 0x61, 0x64, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1f, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0b, + 0x73, 0x65, 0x6e, 0x64, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x69, + 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x28, 0x01, 0x12, 0x45, 0x0a, 0x0b, 0x72, 0x65, 0x63, + 0x76, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x1a, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x49, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x76, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x56, + 0x32, 0x12, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x65, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x09, 0x63, + 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x1a, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x4e, 0x65, 0x77, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0x1c, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4e, 0x52, 0x54, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x17, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x1d, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, + 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4e, + 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x56, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x79, 0x65, 0x6c, + 0x70, 0x2e, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x42, 0x11, 0x4c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x19, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x59, 0x65, 0x6c, 0x70, 0x2f, 0x6e, 0x72, + 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0xa2, 0x02, 0x03, 0x48, 0x4c, 0x57, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7284,113 +7308,114 @@ var file_yelp_nrtsearch_luceneserver_proto_depIdxs = []int32{ 103, // 59: luceneserver.IndexLiveSettings.defaultSearchTimeoutCheckEvery:type_name -> google.protobuf.Int32Value 103, // 60: luceneserver.IndexLiveSettings.defaultTerminateAfter:type_name -> google.protobuf.Int32Value 106, // 61: luceneserver.IndexLiveSettings.maxMergePreCopyDurationSec:type_name -> google.protobuf.UInt64Value - 84, // 62: luceneserver.IndexStateInfo.settings:type_name -> luceneserver.IndexSettings - 85, // 63: luceneserver.IndexStateInfo.liveSettings:type_name -> luceneserver.IndexLiveSettings - 93, // 64: luceneserver.IndexStateInfo.fields:type_name -> luceneserver.IndexStateInfo.FieldsEntry - 94, // 65: luceneserver.GlobalStateInfo.indices:type_name -> luceneserver.GlobalStateInfo.IndicesEntry - 95, // 66: luceneserver.CustomRequest.params:type_name -> luceneserver.CustomRequest.ParamsEntry - 96, // 67: luceneserver.CustomResponse.response:type_name -> luceneserver.CustomResponse.ResponseEntry - 26, // 68: luceneserver.AddDocumentRequest.MultiValuedField.faceHierarchyPaths:type_name -> luceneserver.FacetHierarchyPath - 91, // 69: luceneserver.AddDocumentRequest.FieldsEntry.value:type_name -> luceneserver.AddDocumentRequest.MultiValuedField - 14, // 70: luceneserver.IndexStateInfo.FieldsEntry.value:type_name -> luceneserver.Field - 87, // 71: luceneserver.GlobalStateInfo.IndicesEntry.value:type_name -> luceneserver.IndexGlobalState - 8, // 72: luceneserver.LuceneServer.createIndex:input_type -> luceneserver.CreateIndexRequest - 10, // 73: luceneserver.LuceneServer.liveSettings:input_type -> luceneserver.LiveSettingsRequest - 12, // 74: luceneserver.LuceneServer.liveSettingsV2:input_type -> luceneserver.LiveSettingsV2Request - 16, // 75: luceneserver.LuceneServer.registerFields:input_type -> luceneserver.FieldDefRequest - 16, // 76: luceneserver.LuceneServer.updateFields:input_type -> luceneserver.FieldDefRequest - 18, // 77: luceneserver.LuceneServer.settings:input_type -> luceneserver.SettingsRequest - 20, // 78: luceneserver.LuceneServer.settingsV2:input_type -> luceneserver.SettingsV2Request - 22, // 79: luceneserver.LuceneServer.startIndex:input_type -> luceneserver.StartIndexRequest - 23, // 80: luceneserver.LuceneServer.startIndexV2:input_type -> luceneserver.StartIndexV2Request - 41, // 81: luceneserver.LuceneServer.stopIndex:input_type -> luceneserver.StopIndexRequest - 42, // 82: luceneserver.LuceneServer.reloadState:input_type -> luceneserver.ReloadStateRequest - 25, // 83: luceneserver.LuceneServer.addDocuments:input_type -> luceneserver.AddDocumentRequest - 28, // 84: luceneserver.LuceneServer.refresh:input_type -> luceneserver.RefreshRequest - 30, // 85: luceneserver.LuceneServer.commit:input_type -> luceneserver.CommitRequest - 32, // 86: luceneserver.LuceneServer.stats:input_type -> luceneserver.StatsRequest - 107, // 87: luceneserver.LuceneServer.search:input_type -> luceneserver.SearchRequest - 107, // 88: luceneserver.LuceneServer.searchV2:input_type -> luceneserver.SearchRequest - 25, // 89: luceneserver.LuceneServer.delete:input_type -> luceneserver.AddDocumentRequest - 79, // 90: luceneserver.LuceneServer.deleteByQuery:input_type -> luceneserver.DeleteByQueryRequest - 36, // 91: luceneserver.LuceneServer.deleteAll:input_type -> luceneserver.DeleteAllDocumentsRequest - 38, // 92: luceneserver.LuceneServer.deleteIndex:input_type -> luceneserver.DeleteIndexRequest - 108, // 93: luceneserver.LuceneServer.buildSuggest:input_type -> luceneserver.BuildSuggestRequest - 109, // 94: luceneserver.LuceneServer.suggestLookup:input_type -> luceneserver.SuggestLookupRequest - 108, // 95: luceneserver.LuceneServer.updateSuggest:input_type -> luceneserver.BuildSuggestRequest - 44, // 96: luceneserver.LuceneServer.createSnapshot:input_type -> luceneserver.CreateSnapshotRequest - 47, // 97: luceneserver.LuceneServer.releaseSnapshot:input_type -> luceneserver.ReleaseSnapshotRequest - 49, // 98: luceneserver.LuceneServer.getAllSnapshotIndexGen:input_type -> luceneserver.GetAllSnapshotGenRequest - 51, // 99: luceneserver.LuceneServer.backupWarmingQueries:input_type -> luceneserver.BackupWarmingQueriesRequest - 57, // 100: luceneserver.LuceneServer.state:input_type -> luceneserver.StateRequest - 69, // 101: luceneserver.LuceneServer.status:input_type -> luceneserver.HealthCheckRequest - 71, // 102: luceneserver.LuceneServer.ready:input_type -> luceneserver.ReadyCheckRequest - 110, // 103: luceneserver.LuceneServer.metrics:input_type -> google.protobuf.Empty - 53, // 104: luceneserver.LuceneServer.indices:input_type -> luceneserver.IndicesRequest - 80, // 105: luceneserver.LuceneServer.forceMerge:input_type -> luceneserver.ForceMergeRequest - 82, // 106: luceneserver.LuceneServer.forceMergeDeletes:input_type -> luceneserver.ForceMergeDeletesRequest - 89, // 107: luceneserver.LuceneServer.custom:input_type -> luceneserver.CustomRequest - 59, // 108: luceneserver.ReplicationServer.addReplicas:input_type -> luceneserver.AddReplicaRequest - 65, // 109: luceneserver.ReplicationServer.recvCopyState:input_type -> luceneserver.CopyStateRequest - 68, // 110: luceneserver.ReplicationServer.sendRawFile:input_type -> luceneserver.RawFileChunk - 67, // 111: luceneserver.ReplicationServer.recvRawFile:input_type -> luceneserver.FileInfo - 67, // 112: luceneserver.ReplicationServer.recvRawFileV2:input_type -> luceneserver.FileInfo - 64, // 113: luceneserver.ReplicationServer.copyFiles:input_type -> luceneserver.CopyFiles - 73, // 114: luceneserver.ReplicationServer.newNRTPoint:input_type -> luceneserver.NewNRTPoint - 74, // 115: luceneserver.ReplicationServer.writeNRTPoint:input_type -> luceneserver.IndexName - 74, // 116: luceneserver.ReplicationServer.getCurrentSearcherVersion:input_type -> luceneserver.IndexName - 76, // 117: luceneserver.ReplicationServer.getConnectedNodes:input_type -> luceneserver.GetNodesRequest - 9, // 118: luceneserver.LuceneServer.createIndex:output_type -> luceneserver.CreateIndexResponse - 11, // 119: luceneserver.LuceneServer.liveSettings:output_type -> luceneserver.LiveSettingsResponse - 13, // 120: luceneserver.LuceneServer.liveSettingsV2:output_type -> luceneserver.LiveSettingsV2Response - 17, // 121: luceneserver.LuceneServer.registerFields:output_type -> luceneserver.FieldDefResponse - 17, // 122: luceneserver.LuceneServer.updateFields:output_type -> luceneserver.FieldDefResponse - 19, // 123: luceneserver.LuceneServer.settings:output_type -> luceneserver.SettingsResponse - 21, // 124: luceneserver.LuceneServer.settingsV2:output_type -> luceneserver.SettingsV2Response - 24, // 125: luceneserver.LuceneServer.startIndex:output_type -> luceneserver.StartIndexResponse - 24, // 126: luceneserver.LuceneServer.startIndexV2:output_type -> luceneserver.StartIndexResponse - 40, // 127: luceneserver.LuceneServer.stopIndex:output_type -> luceneserver.DummyResponse - 43, // 128: luceneserver.LuceneServer.reloadState:output_type -> luceneserver.ReloadStateResponse - 27, // 129: luceneserver.LuceneServer.addDocuments:output_type -> luceneserver.AddDocumentResponse - 29, // 130: luceneserver.LuceneServer.refresh:output_type -> luceneserver.RefreshResponse - 31, // 131: luceneserver.LuceneServer.commit:output_type -> luceneserver.CommitResponse - 33, // 132: luceneserver.LuceneServer.stats:output_type -> luceneserver.StatsResponse - 111, // 133: luceneserver.LuceneServer.search:output_type -> luceneserver.SearchResponse - 112, // 134: luceneserver.LuceneServer.searchV2:output_type -> google.protobuf.Any - 27, // 135: luceneserver.LuceneServer.delete:output_type -> luceneserver.AddDocumentResponse - 27, // 136: luceneserver.LuceneServer.deleteByQuery:output_type -> luceneserver.AddDocumentResponse - 37, // 137: luceneserver.LuceneServer.deleteAll:output_type -> luceneserver.DeleteAllDocumentsResponse - 39, // 138: luceneserver.LuceneServer.deleteIndex:output_type -> luceneserver.DeleteIndexResponse - 113, // 139: luceneserver.LuceneServer.buildSuggest:output_type -> luceneserver.BuildSuggestResponse - 114, // 140: luceneserver.LuceneServer.suggestLookup:output_type -> luceneserver.SuggestLookupResponse - 113, // 141: luceneserver.LuceneServer.updateSuggest:output_type -> luceneserver.BuildSuggestResponse - 45, // 142: luceneserver.LuceneServer.createSnapshot:output_type -> luceneserver.CreateSnapshotResponse - 48, // 143: luceneserver.LuceneServer.releaseSnapshot:output_type -> luceneserver.ReleaseSnapshotResponse - 50, // 144: luceneserver.LuceneServer.getAllSnapshotIndexGen:output_type -> luceneserver.GetAllSnapshotGenResponse - 52, // 145: luceneserver.LuceneServer.backupWarmingQueries:output_type -> luceneserver.BackupWarmingQueriesResponse - 58, // 146: luceneserver.LuceneServer.state:output_type -> luceneserver.StateResponse - 70, // 147: luceneserver.LuceneServer.status:output_type -> luceneserver.HealthCheckResponse - 70, // 148: luceneserver.LuceneServer.ready:output_type -> luceneserver.HealthCheckResponse - 115, // 149: luceneserver.LuceneServer.metrics:output_type -> google.api.HttpBody - 54, // 150: luceneserver.LuceneServer.indices:output_type -> luceneserver.IndicesResponse - 81, // 151: luceneserver.LuceneServer.forceMerge:output_type -> luceneserver.ForceMergeResponse - 83, // 152: luceneserver.LuceneServer.forceMergeDeletes:output_type -> luceneserver.ForceMergeDeletesResponse - 90, // 153: luceneserver.LuceneServer.custom:output_type -> luceneserver.CustomResponse - 60, // 154: luceneserver.ReplicationServer.addReplicas:output_type -> luceneserver.AddReplicaResponse - 61, // 155: luceneserver.ReplicationServer.recvCopyState:output_type -> luceneserver.CopyState - 72, // 156: luceneserver.ReplicationServer.sendRawFile:output_type -> luceneserver.TransferStatus - 68, // 157: luceneserver.ReplicationServer.recvRawFile:output_type -> luceneserver.RawFileChunk - 68, // 158: luceneserver.ReplicationServer.recvRawFileV2:output_type -> luceneserver.RawFileChunk - 72, // 159: luceneserver.ReplicationServer.copyFiles:output_type -> luceneserver.TransferStatus - 72, // 160: luceneserver.ReplicationServer.newNRTPoint:output_type -> luceneserver.TransferStatus - 75, // 161: luceneserver.ReplicationServer.writeNRTPoint:output_type -> luceneserver.SearcherVersion - 75, // 162: luceneserver.ReplicationServer.getCurrentSearcherVersion:output_type -> luceneserver.SearcherVersion - 77, // 163: luceneserver.ReplicationServer.getConnectedNodes:output_type -> luceneserver.GetNodesResponse - 118, // [118:164] is the sub-list for method output_type - 72, // [72:118] is the sub-list for method input_type - 72, // [72:72] is the sub-list for extension type_name - 72, // [72:72] is the sub-list for extension extendee - 0, // [0:72] is the sub-list for field type_name + 104, // 62: luceneserver.IndexLiveSettings.verboseMetrics:type_name -> google.protobuf.BoolValue + 84, // 63: luceneserver.IndexStateInfo.settings:type_name -> luceneserver.IndexSettings + 85, // 64: luceneserver.IndexStateInfo.liveSettings:type_name -> luceneserver.IndexLiveSettings + 93, // 65: luceneserver.IndexStateInfo.fields:type_name -> luceneserver.IndexStateInfo.FieldsEntry + 94, // 66: luceneserver.GlobalStateInfo.indices:type_name -> luceneserver.GlobalStateInfo.IndicesEntry + 95, // 67: luceneserver.CustomRequest.params:type_name -> luceneserver.CustomRequest.ParamsEntry + 96, // 68: luceneserver.CustomResponse.response:type_name -> luceneserver.CustomResponse.ResponseEntry + 26, // 69: luceneserver.AddDocumentRequest.MultiValuedField.faceHierarchyPaths:type_name -> luceneserver.FacetHierarchyPath + 91, // 70: luceneserver.AddDocumentRequest.FieldsEntry.value:type_name -> luceneserver.AddDocumentRequest.MultiValuedField + 14, // 71: luceneserver.IndexStateInfo.FieldsEntry.value:type_name -> luceneserver.Field + 87, // 72: luceneserver.GlobalStateInfo.IndicesEntry.value:type_name -> luceneserver.IndexGlobalState + 8, // 73: luceneserver.LuceneServer.createIndex:input_type -> luceneserver.CreateIndexRequest + 10, // 74: luceneserver.LuceneServer.liveSettings:input_type -> luceneserver.LiveSettingsRequest + 12, // 75: luceneserver.LuceneServer.liveSettingsV2:input_type -> luceneserver.LiveSettingsV2Request + 16, // 76: luceneserver.LuceneServer.registerFields:input_type -> luceneserver.FieldDefRequest + 16, // 77: luceneserver.LuceneServer.updateFields:input_type -> luceneserver.FieldDefRequest + 18, // 78: luceneserver.LuceneServer.settings:input_type -> luceneserver.SettingsRequest + 20, // 79: luceneserver.LuceneServer.settingsV2:input_type -> luceneserver.SettingsV2Request + 22, // 80: luceneserver.LuceneServer.startIndex:input_type -> luceneserver.StartIndexRequest + 23, // 81: luceneserver.LuceneServer.startIndexV2:input_type -> luceneserver.StartIndexV2Request + 41, // 82: luceneserver.LuceneServer.stopIndex:input_type -> luceneserver.StopIndexRequest + 42, // 83: luceneserver.LuceneServer.reloadState:input_type -> luceneserver.ReloadStateRequest + 25, // 84: luceneserver.LuceneServer.addDocuments:input_type -> luceneserver.AddDocumentRequest + 28, // 85: luceneserver.LuceneServer.refresh:input_type -> luceneserver.RefreshRequest + 30, // 86: luceneserver.LuceneServer.commit:input_type -> luceneserver.CommitRequest + 32, // 87: luceneserver.LuceneServer.stats:input_type -> luceneserver.StatsRequest + 107, // 88: luceneserver.LuceneServer.search:input_type -> luceneserver.SearchRequest + 107, // 89: luceneserver.LuceneServer.searchV2:input_type -> luceneserver.SearchRequest + 25, // 90: luceneserver.LuceneServer.delete:input_type -> luceneserver.AddDocumentRequest + 79, // 91: luceneserver.LuceneServer.deleteByQuery:input_type -> luceneserver.DeleteByQueryRequest + 36, // 92: luceneserver.LuceneServer.deleteAll:input_type -> luceneserver.DeleteAllDocumentsRequest + 38, // 93: luceneserver.LuceneServer.deleteIndex:input_type -> luceneserver.DeleteIndexRequest + 108, // 94: luceneserver.LuceneServer.buildSuggest:input_type -> luceneserver.BuildSuggestRequest + 109, // 95: luceneserver.LuceneServer.suggestLookup:input_type -> luceneserver.SuggestLookupRequest + 108, // 96: luceneserver.LuceneServer.updateSuggest:input_type -> luceneserver.BuildSuggestRequest + 44, // 97: luceneserver.LuceneServer.createSnapshot:input_type -> luceneserver.CreateSnapshotRequest + 47, // 98: luceneserver.LuceneServer.releaseSnapshot:input_type -> luceneserver.ReleaseSnapshotRequest + 49, // 99: luceneserver.LuceneServer.getAllSnapshotIndexGen:input_type -> luceneserver.GetAllSnapshotGenRequest + 51, // 100: luceneserver.LuceneServer.backupWarmingQueries:input_type -> luceneserver.BackupWarmingQueriesRequest + 57, // 101: luceneserver.LuceneServer.state:input_type -> luceneserver.StateRequest + 69, // 102: luceneserver.LuceneServer.status:input_type -> luceneserver.HealthCheckRequest + 71, // 103: luceneserver.LuceneServer.ready:input_type -> luceneserver.ReadyCheckRequest + 110, // 104: luceneserver.LuceneServer.metrics:input_type -> google.protobuf.Empty + 53, // 105: luceneserver.LuceneServer.indices:input_type -> luceneserver.IndicesRequest + 80, // 106: luceneserver.LuceneServer.forceMerge:input_type -> luceneserver.ForceMergeRequest + 82, // 107: luceneserver.LuceneServer.forceMergeDeletes:input_type -> luceneserver.ForceMergeDeletesRequest + 89, // 108: luceneserver.LuceneServer.custom:input_type -> luceneserver.CustomRequest + 59, // 109: luceneserver.ReplicationServer.addReplicas:input_type -> luceneserver.AddReplicaRequest + 65, // 110: luceneserver.ReplicationServer.recvCopyState:input_type -> luceneserver.CopyStateRequest + 68, // 111: luceneserver.ReplicationServer.sendRawFile:input_type -> luceneserver.RawFileChunk + 67, // 112: luceneserver.ReplicationServer.recvRawFile:input_type -> luceneserver.FileInfo + 67, // 113: luceneserver.ReplicationServer.recvRawFileV2:input_type -> luceneserver.FileInfo + 64, // 114: luceneserver.ReplicationServer.copyFiles:input_type -> luceneserver.CopyFiles + 73, // 115: luceneserver.ReplicationServer.newNRTPoint:input_type -> luceneserver.NewNRTPoint + 74, // 116: luceneserver.ReplicationServer.writeNRTPoint:input_type -> luceneserver.IndexName + 74, // 117: luceneserver.ReplicationServer.getCurrentSearcherVersion:input_type -> luceneserver.IndexName + 76, // 118: luceneserver.ReplicationServer.getConnectedNodes:input_type -> luceneserver.GetNodesRequest + 9, // 119: luceneserver.LuceneServer.createIndex:output_type -> luceneserver.CreateIndexResponse + 11, // 120: luceneserver.LuceneServer.liveSettings:output_type -> luceneserver.LiveSettingsResponse + 13, // 121: luceneserver.LuceneServer.liveSettingsV2:output_type -> luceneserver.LiveSettingsV2Response + 17, // 122: luceneserver.LuceneServer.registerFields:output_type -> luceneserver.FieldDefResponse + 17, // 123: luceneserver.LuceneServer.updateFields:output_type -> luceneserver.FieldDefResponse + 19, // 124: luceneserver.LuceneServer.settings:output_type -> luceneserver.SettingsResponse + 21, // 125: luceneserver.LuceneServer.settingsV2:output_type -> luceneserver.SettingsV2Response + 24, // 126: luceneserver.LuceneServer.startIndex:output_type -> luceneserver.StartIndexResponse + 24, // 127: luceneserver.LuceneServer.startIndexV2:output_type -> luceneserver.StartIndexResponse + 40, // 128: luceneserver.LuceneServer.stopIndex:output_type -> luceneserver.DummyResponse + 43, // 129: luceneserver.LuceneServer.reloadState:output_type -> luceneserver.ReloadStateResponse + 27, // 130: luceneserver.LuceneServer.addDocuments:output_type -> luceneserver.AddDocumentResponse + 29, // 131: luceneserver.LuceneServer.refresh:output_type -> luceneserver.RefreshResponse + 31, // 132: luceneserver.LuceneServer.commit:output_type -> luceneserver.CommitResponse + 33, // 133: luceneserver.LuceneServer.stats:output_type -> luceneserver.StatsResponse + 111, // 134: luceneserver.LuceneServer.search:output_type -> luceneserver.SearchResponse + 112, // 135: luceneserver.LuceneServer.searchV2:output_type -> google.protobuf.Any + 27, // 136: luceneserver.LuceneServer.delete:output_type -> luceneserver.AddDocumentResponse + 27, // 137: luceneserver.LuceneServer.deleteByQuery:output_type -> luceneserver.AddDocumentResponse + 37, // 138: luceneserver.LuceneServer.deleteAll:output_type -> luceneserver.DeleteAllDocumentsResponse + 39, // 139: luceneserver.LuceneServer.deleteIndex:output_type -> luceneserver.DeleteIndexResponse + 113, // 140: luceneserver.LuceneServer.buildSuggest:output_type -> luceneserver.BuildSuggestResponse + 114, // 141: luceneserver.LuceneServer.suggestLookup:output_type -> luceneserver.SuggestLookupResponse + 113, // 142: luceneserver.LuceneServer.updateSuggest:output_type -> luceneserver.BuildSuggestResponse + 45, // 143: luceneserver.LuceneServer.createSnapshot:output_type -> luceneserver.CreateSnapshotResponse + 48, // 144: luceneserver.LuceneServer.releaseSnapshot:output_type -> luceneserver.ReleaseSnapshotResponse + 50, // 145: luceneserver.LuceneServer.getAllSnapshotIndexGen:output_type -> luceneserver.GetAllSnapshotGenResponse + 52, // 146: luceneserver.LuceneServer.backupWarmingQueries:output_type -> luceneserver.BackupWarmingQueriesResponse + 58, // 147: luceneserver.LuceneServer.state:output_type -> luceneserver.StateResponse + 70, // 148: luceneserver.LuceneServer.status:output_type -> luceneserver.HealthCheckResponse + 70, // 149: luceneserver.LuceneServer.ready:output_type -> luceneserver.HealthCheckResponse + 115, // 150: luceneserver.LuceneServer.metrics:output_type -> google.api.HttpBody + 54, // 151: luceneserver.LuceneServer.indices:output_type -> luceneserver.IndicesResponse + 81, // 152: luceneserver.LuceneServer.forceMerge:output_type -> luceneserver.ForceMergeResponse + 83, // 153: luceneserver.LuceneServer.forceMergeDeletes:output_type -> luceneserver.ForceMergeDeletesResponse + 90, // 154: luceneserver.LuceneServer.custom:output_type -> luceneserver.CustomResponse + 60, // 155: luceneserver.ReplicationServer.addReplicas:output_type -> luceneserver.AddReplicaResponse + 61, // 156: luceneserver.ReplicationServer.recvCopyState:output_type -> luceneserver.CopyState + 72, // 157: luceneserver.ReplicationServer.sendRawFile:output_type -> luceneserver.TransferStatus + 68, // 158: luceneserver.ReplicationServer.recvRawFile:output_type -> luceneserver.RawFileChunk + 68, // 159: luceneserver.ReplicationServer.recvRawFileV2:output_type -> luceneserver.RawFileChunk + 72, // 160: luceneserver.ReplicationServer.copyFiles:output_type -> luceneserver.TransferStatus + 72, // 161: luceneserver.ReplicationServer.newNRTPoint:output_type -> luceneserver.TransferStatus + 75, // 162: luceneserver.ReplicationServer.writeNRTPoint:output_type -> luceneserver.SearcherVersion + 75, // 163: luceneserver.ReplicationServer.getCurrentSearcherVersion:output_type -> luceneserver.SearcherVersion + 77, // 164: luceneserver.ReplicationServer.getConnectedNodes:output_type -> luceneserver.GetNodesResponse + 119, // [119:165] is the sub-list for method output_type + 73, // [73:119] is the sub-list for method input_type + 73, // [73:73] is the sub-list for extension type_name + 73, // [73:73] is the sub-list for extension extendee + 0, // [0:73] is the sub-list for field type_name } func init() { file_yelp_nrtsearch_luceneserver_proto_init() } diff --git a/grpc-gateway/luceneserver.swagger.json b/grpc-gateway/luceneserver.swagger.json index 8a6557b91..74f71676c 100644 --- a/grpc-gateway/luceneserver.swagger.json +++ b/grpc-gateway/luceneserver.swagger.json @@ -1317,6 +1317,20 @@ "required": false, "type": "string", "format": "uint64" + }, + { + "name": "liveSettings.verboseMetrics", + "description": "Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false.", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "local", + "description": "When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true.", + "in": "query", + "required": false, + "type": "boolean" } ], "tags": [ @@ -3347,6 +3361,23 @@ }, "description": "A query that matches documents with polygon that contains the geo point." }, + "luceneserverGeoPolygonQuery": { + "type": "object", + "properties": { + "field": { + "type": "string", + "title": "Field in the document to query" + }, + "polygons": { + "type": "array", + "items": { + "$ref": "#/definitions/luceneserverPolygon" + }, + "title": "Geo polygons to search for containing points" + } + }, + "title": "A query that matches documents with geo points within polygons" + }, "luceneserverGeoRadiusQuery": { "type": "object", "properties": { @@ -3516,6 +3547,10 @@ "type": "string", "format": "uint64", "title": "Merge precopy would be stopped after this time, or 0 for no checks, default: 0" + }, + "verboseMetrics": { + "type": "boolean", + "title": "Collect and publish additional index metrics, which may be more expensive in terms of volume, memory and/or compute, default: false" } } }, @@ -3796,6 +3831,10 @@ "liveSettings": { "$ref": "#/definitions/luceneserverIndexLiveSettings", "title": "Live settings to merge into existing live settings, or unset to get current live settings" + }, + "local": { + "type": "boolean", + "description": "When set to true, live settings changes are only applied to the local node. These changes are ephemeral, so will not persist through a restart. Also, the live settings returned in the response will contain the local overrides only when this flag is true." } } }, @@ -4145,6 +4184,26 @@ }, "title": "Point representation" }, + "luceneserverPolygon": { + "type": "object", + "properties": { + "points": { + "type": "array", + "items": { + "$ref": "#/definitions/typeLatLng" + }, + "description": "Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side." + }, + "holes": { + "type": "array", + "items": { + "$ref": "#/definitions/luceneserverPolygon" + }, + "description": "Specify holes in the polygon. Hole polygons cannot themselves contain holes." + } + }, + "title": "Polygon defined by a list of geo points" + }, "luceneserverPrefixQuery": { "type": "object", "properties": { @@ -4258,6 +4317,9 @@ }, "constantScoreQuery": { "$ref": "#/definitions/luceneserverConstantScoreQuery" + }, + "geoPolygonQuery": { + "$ref": "#/definitions/luceneserverGeoPolygonQuery" } }, "description": "Defines a full query consisting of a QueryNode which may be one of several types." @@ -4316,7 +4378,8 @@ "MULTI_FUNCTION_SCORE_QUERY", "MATCH_PHRASE_PREFIX", "PREFIX", - "CONSTANT_SCORE_QUERY" + "CONSTANT_SCORE_QUERY", + "GEO_POLYGON" ], "default": "NONE", "description": "Defines different types of QueryNodes." diff --git a/grpc-gateway/search.pb.go b/grpc-gateway/search.pb.go index c7b9a4341..e6fb3a84a 100644 --- a/grpc-gateway/search.pb.go +++ b/grpc-gateway/search.pb.go @@ -210,6 +210,7 @@ const ( QueryType_MATCH_PHRASE_PREFIX QueryType = 18 QueryType_PREFIX QueryType = 19 QueryType_CONSTANT_SCORE_QUERY QueryType = 20 + QueryType_GEO_POLYGON QueryType = 21 ) // Enum value maps for QueryType. @@ -236,6 +237,7 @@ var ( 18: "MATCH_PHRASE_PREFIX", 19: "PREFIX", 20: "CONSTANT_SCORE_QUERY", + 21: "GEO_POLYGON", } QueryType_value = map[string]int32{ "NONE": 0, @@ -259,6 +261,7 @@ var ( "MATCH_PHRASE_PREFIX": 18, "PREFIX": 19, "CONSTANT_SCORE_QUERY": 20, + "GEO_POLYGON": 21, } ) @@ -549,7 +552,7 @@ func (x MultiFunctionScoreQuery_FunctionScoreMode) Number() protoreflect.EnumNum // Deprecated: Use MultiFunctionScoreQuery_FunctionScoreMode.Descriptor instead. func (MultiFunctionScoreQuery_FunctionScoreMode) EnumDescriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{21, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{23, 0} } // How to combine final function score with query score @@ -602,7 +605,7 @@ func (x MultiFunctionScoreQuery_BoostMode) Number() protoreflect.EnumNumber { // Deprecated: Use MultiFunctionScoreQuery_BoostMode.Descriptor instead. func (MultiFunctionScoreQuery_BoostMode) EnumDescriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{21, 1} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{23, 1} } // null parameter value @@ -646,7 +649,7 @@ func (x Script_ParamNullValue) Number() protoreflect.EnumNumber { // Deprecated: Use Script_ParamNullValue.Descriptor instead. func (Script_ParamNullValue) EnumDescriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{27, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{29, 0} } // * How the {TotalHits#value} should be interpreted. @@ -695,7 +698,7 @@ func (x TotalHits_Relation) Number() protoreflect.EnumNumber { // Deprecated: Use TotalHits_Relation.Descriptor instead. func (TotalHits_Relation) EnumDescriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{31, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 0} } // Sorting order type @@ -742,7 +745,7 @@ func (x BucketOrder_OrderType) Number() protoreflect.EnumNumber { // Deprecated: Use BucketOrder_OrderType.Descriptor instead. func (BucketOrder_OrderType) EnumDescriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{50, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{52, 0} } type Highlight_Type int32 @@ -796,7 +799,7 @@ func (x Highlight_Type) Number() protoreflect.EnumNumber { // Deprecated: Use Highlight_Type.Descriptor instead. func (Highlight_Type) EnumDescriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{54, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{56, 0} } // A clause in a BooleanQuery. @@ -2279,6 +2282,122 @@ func (x *GeoPointQuery) GetPoint() *latlng.LatLng { return nil } +// Polygon defined by a list of geo points +type Polygon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Points defining the polygon, conforming to the https://geojson.org/ standard. The polygon must not be self-crossing, otherwise may result in unexpected behavior. Polygons cannot cross the 180th meridian. Instead, use two polygons: one on each side. + Points []*latlng.LatLng `protobuf:"bytes,1,rep,name=points,proto3" json:"points,omitempty"` + // Specify holes in the polygon. Hole polygons cannot themselves contain holes. + Holes []*Polygon `protobuf:"bytes,2,rep,name=holes,proto3" json:"holes,omitempty"` +} + +func (x *Polygon) Reset() { + *x = Polygon{} + if protoimpl.UnsafeEnabled { + mi := &file_yelp_nrtsearch_search_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Polygon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Polygon) ProtoMessage() {} + +func (x *Polygon) ProtoReflect() protoreflect.Message { + mi := &file_yelp_nrtsearch_search_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Polygon.ProtoReflect.Descriptor instead. +func (*Polygon) Descriptor() ([]byte, []int) { + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{19} +} + +func (x *Polygon) GetPoints() []*latlng.LatLng { + if x != nil { + return x.Points + } + return nil +} + +func (x *Polygon) GetHoles() []*Polygon { + if x != nil { + return x.Holes + } + return nil +} + +// A query that matches documents with geo points within polygons +type GeoPolygonQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Field in the document to query + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + // Geo polygons to search for containing points + Polygons []*Polygon `protobuf:"bytes,2,rep,name=polygons,proto3" json:"polygons,omitempty"` +} + +func (x *GeoPolygonQuery) Reset() { + *x = GeoPolygonQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_yelp_nrtsearch_search_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GeoPolygonQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GeoPolygonQuery) ProtoMessage() {} + +func (x *GeoPolygonQuery) ProtoReflect() protoreflect.Message { + mi := &file_yelp_nrtsearch_search_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GeoPolygonQuery.ProtoReflect.Descriptor instead. +func (*GeoPolygonQuery) Descriptor() ([]byte, []int) { + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{20} +} + +func (x *GeoPolygonQuery) GetField() string { + if x != nil { + return x.Field + } + return "" +} + +func (x *GeoPolygonQuery) GetPolygons() []*Polygon { + if x != nil { + return x.Polygons + } + return nil +} + // A query that matches documents which contain a value for a field. type ExistsQuery struct { state protoimpl.MessageState @@ -2291,7 +2410,7 @@ type ExistsQuery struct { func (x *ExistsQuery) Reset() { *x = ExistsQuery{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[19] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2304,7 +2423,7 @@ func (x *ExistsQuery) String() string { func (*ExistsQuery) ProtoMessage() {} func (x *ExistsQuery) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[19] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2317,7 +2436,7 @@ func (x *ExistsQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ExistsQuery.ProtoReflect.Descriptor instead. func (*ExistsQuery) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{19} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{21} } func (x *ExistsQuery) GetField() string { @@ -2346,7 +2465,7 @@ type CompletionQuery struct { func (x *CompletionQuery) Reset() { *x = CompletionQuery{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[20] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2359,7 +2478,7 @@ func (x *CompletionQuery) String() string { func (*CompletionQuery) ProtoMessage() {} func (x *CompletionQuery) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[20] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2372,7 +2491,7 @@ func (x *CompletionQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use CompletionQuery.ProtoReflect.Descriptor instead. func (*CompletionQuery) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{20} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{22} } func (x *CompletionQuery) GetField() string { @@ -2426,7 +2545,7 @@ type MultiFunctionScoreQuery struct { func (x *MultiFunctionScoreQuery) Reset() { *x = MultiFunctionScoreQuery{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[21] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2439,7 +2558,7 @@ func (x *MultiFunctionScoreQuery) String() string { func (*MultiFunctionScoreQuery) ProtoMessage() {} func (x *MultiFunctionScoreQuery) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[21] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2452,7 +2571,7 @@ func (x *MultiFunctionScoreQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiFunctionScoreQuery.ProtoReflect.Descriptor instead. func (*MultiFunctionScoreQuery) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{21} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{23} } func (x *MultiFunctionScoreQuery) GetQuery() *Query { @@ -2510,7 +2629,7 @@ type ConstantScoreQuery struct { func (x *ConstantScoreQuery) Reset() { *x = ConstantScoreQuery{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[22] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2523,7 +2642,7 @@ func (x *ConstantScoreQuery) String() string { func (*ConstantScoreQuery) ProtoMessage() {} func (x *ConstantScoreQuery) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[22] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2536,7 +2655,7 @@ func (x *ConstantScoreQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ConstantScoreQuery.ProtoReflect.Descriptor instead. func (*ConstantScoreQuery) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{22} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{24} } func (x *ConstantScoreQuery) GetFilter() *Query { @@ -2578,13 +2697,14 @@ type Query struct { // *Query_MatchPhrasePrefixQuery // *Query_PrefixQuery // *Query_ConstantScoreQuery + // *Query_GeoPolygonQuery QueryNode isQuery_QueryNode `protobuf_oneof:"QueryNode"` } func (x *Query) Reset() { *x = Query{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[23] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2597,7 +2717,7 @@ func (x *Query) String() string { func (*Query) ProtoMessage() {} func (x *Query) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[23] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2610,7 +2730,7 @@ func (x *Query) ProtoReflect() protoreflect.Message { // Deprecated: Use Query.ProtoReflect.Descriptor instead. func (*Query) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{23} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{25} } // Deprecated: Do not use. @@ -2782,6 +2902,13 @@ func (x *Query) GetConstantScoreQuery() *ConstantScoreQuery { return nil } +func (x *Query) GetGeoPolygonQuery() *GeoPolygonQuery { + if x, ok := x.GetQueryNode().(*Query_GeoPolygonQuery); ok { + return x.GeoPolygonQuery + } + return nil +} + type isQuery_QueryNode interface { isQuery_QueryNode() } @@ -2870,6 +2997,10 @@ type Query_ConstantScoreQuery struct { ConstantScoreQuery *ConstantScoreQuery `protobuf:"bytes,23,opt,name=constantScoreQuery,proto3,oneof"` } +type Query_GeoPolygonQuery struct { + GeoPolygonQuery *GeoPolygonQuery `protobuf:"bytes,24,opt,name=geoPolygonQuery,proto3,oneof"` +} + func (*Query_BooleanQuery) isQuery_QueryNode() {} func (*Query_PhraseQuery) isQuery_QueryNode() {} @@ -2912,6 +3043,8 @@ func (*Query_PrefixQuery) isQuery_QueryNode() {} func (*Query_ConstantScoreQuery) isQuery_QueryNode() {} +func (*Query_GeoPolygonQuery) isQuery_QueryNode() {} + type SearchRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2963,7 +3096,7 @@ type SearchRequest struct { func (x *SearchRequest) Reset() { *x = SearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[24] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2976,7 +3109,7 @@ func (x *SearchRequest) String() string { func (*SearchRequest) ProtoMessage() {} func (x *SearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[24] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2989,7 +3122,7 @@ func (x *SearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchRequest.ProtoReflect.Descriptor instead. func (*SearchRequest) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{24} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{26} } func (x *SearchRequest) GetIndexName() string { @@ -3235,7 +3368,7 @@ type InnerHit struct { func (x *InnerHit) Reset() { *x = InnerHit{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[25] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3248,7 +3381,7 @@ func (x *InnerHit) String() string { func (*InnerHit) ProtoMessage() {} func (x *InnerHit) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[25] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3261,7 +3394,7 @@ func (x *InnerHit) ProtoReflect() protoreflect.Message { // Deprecated: Use InnerHit.ProtoReflect.Descriptor instead. func (*InnerHit) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{25} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{27} } func (x *InnerHit) GetQueryNestedPath() string { @@ -3326,7 +3459,7 @@ type VirtualField struct { func (x *VirtualField) Reset() { *x = VirtualField{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[26] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3339,7 +3472,7 @@ func (x *VirtualField) String() string { func (*VirtualField) ProtoMessage() {} func (x *VirtualField) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[26] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3352,7 +3485,7 @@ func (x *VirtualField) ProtoReflect() protoreflect.Message { // Deprecated: Use VirtualField.ProtoReflect.Descriptor instead. func (*VirtualField) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{26} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{28} } func (x *VirtualField) GetScript() *Script { @@ -3382,7 +3515,7 @@ type Script struct { func (x *Script) Reset() { *x = Script{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[27] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3395,7 +3528,7 @@ func (x *Script) String() string { func (*Script) ProtoMessage() {} func (x *Script) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[27] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3408,7 +3541,7 @@ func (x *Script) ProtoReflect() protoreflect.Message { // Deprecated: Use Script.ProtoReflect.Descriptor instead. func (*Script) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{27} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{29} } func (x *Script) GetLang() string { @@ -3445,7 +3578,7 @@ type QuerySortField struct { func (x *QuerySortField) Reset() { *x = QuerySortField{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[28] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3458,7 +3591,7 @@ func (x *QuerySortField) String() string { func (*QuerySortField) ProtoMessage() {} func (x *QuerySortField) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[28] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3471,7 +3604,7 @@ func (x *QuerySortField) ProtoReflect() protoreflect.Message { // Deprecated: Use QuerySortField.ProtoReflect.Descriptor instead. func (*QuerySortField) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{28} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{30} } func (x *QuerySortField) GetDoDocScores() bool { @@ -3507,7 +3640,7 @@ type SortFields struct { func (x *SortFields) Reset() { *x = SortFields{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[29] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3520,7 +3653,7 @@ func (x *SortFields) String() string { func (*SortFields) ProtoMessage() {} func (x *SortFields) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[29] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3533,7 +3666,7 @@ func (x *SortFields) ProtoReflect() protoreflect.Message { // Deprecated: Use SortFields.ProtoReflect.Descriptor instead. func (*SortFields) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{29} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{31} } func (x *SortFields) GetSortedFields() []*SortType { @@ -3565,7 +3698,7 @@ type SortType struct { func (x *SortType) Reset() { *x = SortType{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[30] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3578,7 +3711,7 @@ func (x *SortType) String() string { func (*SortType) ProtoMessage() {} func (x *SortType) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[30] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3591,7 +3724,7 @@ func (x *SortType) ProtoReflect() protoreflect.Message { // Deprecated: Use SortType.ProtoReflect.Descriptor instead. func (*SortType) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{30} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{32} } func (x *SortType) GetFieldName() string { @@ -3649,7 +3782,7 @@ type TotalHits struct { func (x *TotalHits) Reset() { *x = TotalHits{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[31] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3662,7 +3795,7 @@ func (x *TotalHits) String() string { func (*TotalHits) ProtoMessage() {} func (x *TotalHits) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[31] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3675,7 +3808,7 @@ func (x *TotalHits) ProtoReflect() protoreflect.Message { // Deprecated: Use TotalHits.ProtoReflect.Descriptor instead. func (*TotalHits) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{31} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33} } func (x *TotalHits) GetRelation() TotalHits_Relation { @@ -3705,7 +3838,7 @@ type Point struct { func (x *Point) Reset() { *x = Point{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[32] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3718,7 +3851,7 @@ func (x *Point) String() string { func (*Point) ProtoMessage() {} func (x *Point) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[32] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3731,7 +3864,7 @@ func (x *Point) ProtoReflect() protoreflect.Message { // Deprecated: Use Point.ProtoReflect.Descriptor instead. func (*Point) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{32} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{34} } func (x *Point) GetLatitude() float64 { @@ -3770,7 +3903,7 @@ type SearchResponse struct { func (x *SearchResponse) Reset() { *x = SearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[33] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3783,7 +3916,7 @@ func (x *SearchResponse) String() string { func (*SearchResponse) ProtoMessage() {} func (x *SearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[33] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3796,7 +3929,7 @@ func (x *SearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchResponse.ProtoReflect.Descriptor instead. func (*SearchResponse) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35} } func (x *SearchResponse) GetDiagnostics() *SearchResponse_Diagnostics { @@ -3877,7 +4010,7 @@ type NumericRangeType struct { func (x *NumericRangeType) Reset() { *x = NumericRangeType{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[34] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3890,7 +4023,7 @@ func (x *NumericRangeType) String() string { func (*NumericRangeType) ProtoMessage() {} func (x *NumericRangeType) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[34] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3903,7 +4036,7 @@ func (x *NumericRangeType) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericRangeType.ProtoReflect.Descriptor instead. func (*NumericRangeType) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{34} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{36} } func (x *NumericRangeType) GetLabel() string { @@ -3960,7 +4093,7 @@ type Facet struct { func (x *Facet) Reset() { *x = Facet{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[35] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3973,7 +4106,7 @@ func (x *Facet) String() string { func (*Facet) ProtoMessage() {} func (x *Facet) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[35] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3986,7 +4119,7 @@ func (x *Facet) ProtoReflect() protoreflect.Message { // Deprecated: Use Facet.ProtoReflect.Descriptor instead. func (*Facet) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{37} } func (x *Facet) GetDim() string { @@ -4068,7 +4201,7 @@ type FacetResult struct { func (x *FacetResult) Reset() { *x = FacetResult{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[36] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4081,7 +4214,7 @@ func (x *FacetResult) String() string { func (*FacetResult) ProtoMessage() {} func (x *FacetResult) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[36] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4094,7 +4227,7 @@ func (x *FacetResult) ProtoReflect() protoreflect.Message { // Deprecated: Use FacetResult.ProtoReflect.Descriptor instead. func (*FacetResult) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{36} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{38} } func (x *FacetResult) GetDim() string { @@ -4151,7 +4284,7 @@ type LabelAndValue struct { func (x *LabelAndValue) Reset() { *x = LabelAndValue{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[37] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4164,7 +4297,7 @@ func (x *LabelAndValue) String() string { func (*LabelAndValue) ProtoMessage() {} func (x *LabelAndValue) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[37] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4177,7 +4310,7 @@ func (x *LabelAndValue) ProtoReflect() protoreflect.Message { // Deprecated: Use LabelAndValue.ProtoReflect.Descriptor instead. func (*LabelAndValue) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{37} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{39} } func (x *LabelAndValue) GetLabel() string { @@ -4206,7 +4339,7 @@ type FetchTask struct { func (x *FetchTask) Reset() { *x = FetchTask{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[38] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4219,7 +4352,7 @@ func (x *FetchTask) String() string { func (*FetchTask) ProtoMessage() {} func (x *FetchTask) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[38] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4232,7 +4365,7 @@ func (x *FetchTask) ProtoReflect() protoreflect.Message { // Deprecated: Use FetchTask.ProtoReflect.Descriptor instead. func (*FetchTask) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{38} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{40} } func (x *FetchTask) GetName() string { @@ -4262,7 +4395,7 @@ type PluginRescorer struct { func (x *PluginRescorer) Reset() { *x = PluginRescorer{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[39] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4275,7 +4408,7 @@ func (x *PluginRescorer) String() string { func (*PluginRescorer) ProtoMessage() {} func (x *PluginRescorer) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[39] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4288,7 +4421,7 @@ func (x *PluginRescorer) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginRescorer.ProtoReflect.Descriptor instead. func (*PluginRescorer) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{39} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{41} } func (x *PluginRescorer) GetName() string { @@ -4319,7 +4452,7 @@ type QueryRescorer struct { func (x *QueryRescorer) Reset() { *x = QueryRescorer{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[40] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4332,7 +4465,7 @@ func (x *QueryRescorer) String() string { func (*QueryRescorer) ProtoMessage() {} func (x *QueryRescorer) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[40] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4345,7 +4478,7 @@ func (x *QueryRescorer) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRescorer.ProtoReflect.Descriptor instead. func (*QueryRescorer) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{40} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{42} } func (x *QueryRescorer) GetRescoreQuery() *Query { @@ -4388,7 +4521,7 @@ type Rescorer struct { func (x *Rescorer) Reset() { *x = Rescorer{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[41] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4401,7 +4534,7 @@ func (x *Rescorer) String() string { func (*Rescorer) ProtoMessage() {} func (x *Rescorer) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[41] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4414,7 +4547,7 @@ func (x *Rescorer) ProtoReflect() protoreflect.Message { // Deprecated: Use Rescorer.ProtoReflect.Descriptor instead. func (*Rescorer) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{41} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{43} } func (x *Rescorer) GetWindowSize() int32 { @@ -4483,7 +4616,7 @@ type ProfileResult struct { func (x *ProfileResult) Reset() { *x = ProfileResult{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[42] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4496,7 +4629,7 @@ func (x *ProfileResult) String() string { func (*ProfileResult) ProtoMessage() {} func (x *ProfileResult) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[42] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4509,7 +4642,7 @@ func (x *ProfileResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfileResult.ProtoReflect.Descriptor instead. func (*ProfileResult) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{42} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{44} } func (x *ProfileResult) GetSearchStats() *ProfileResult_SearchStats { @@ -4561,7 +4694,7 @@ type Collector struct { func (x *Collector) Reset() { *x = Collector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[43] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4574,7 +4707,7 @@ func (x *Collector) String() string { func (*Collector) ProtoMessage() {} func (x *Collector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[43] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4587,7 +4720,7 @@ func (x *Collector) ProtoReflect() protoreflect.Message { // Deprecated: Use Collector.ProtoReflect.Descriptor instead. func (*Collector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{43} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{45} } func (m *Collector) GetCollectors() isCollector_Collectors { @@ -4690,7 +4823,7 @@ type PluginCollector struct { func (x *PluginCollector) Reset() { *x = PluginCollector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[44] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4703,7 +4836,7 @@ func (x *PluginCollector) String() string { func (*PluginCollector) ProtoMessage() {} func (x *PluginCollector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[44] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4716,7 +4849,7 @@ func (x *PluginCollector) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginCollector.ProtoReflect.Descriptor instead. func (*PluginCollector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{44} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{46} } func (x *PluginCollector) GetName() string { @@ -4753,7 +4886,7 @@ type TermsCollector struct { func (x *TermsCollector) Reset() { *x = TermsCollector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[45] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4766,7 +4899,7 @@ func (x *TermsCollector) String() string { func (*TermsCollector) ProtoMessage() {} func (x *TermsCollector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[45] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4779,7 +4912,7 @@ func (x *TermsCollector) ProtoReflect() protoreflect.Message { // Deprecated: Use TermsCollector.ProtoReflect.Descriptor instead. func (*TermsCollector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{45} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{47} } func (m *TermsCollector) GetTermsSource() isTermsCollector_TermsSource { @@ -4856,7 +4989,7 @@ type TopHitsCollector struct { func (x *TopHitsCollector) Reset() { *x = TopHitsCollector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[46] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4869,7 +5002,7 @@ func (x *TopHitsCollector) String() string { func (*TopHitsCollector) ProtoMessage() {} func (x *TopHitsCollector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[46] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4882,7 +5015,7 @@ func (x *TopHitsCollector) ProtoReflect() protoreflect.Message { // Deprecated: Use TopHitsCollector.ProtoReflect.Descriptor instead. func (*TopHitsCollector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{46} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{48} } func (x *TopHitsCollector) GetStartHit() int32 { @@ -4936,7 +5069,7 @@ type FilterCollector struct { func (x *FilterCollector) Reset() { *x = FilterCollector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[47] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4949,7 +5082,7 @@ func (x *FilterCollector) String() string { func (*FilterCollector) ProtoMessage() {} func (x *FilterCollector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[47] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4962,7 +5095,7 @@ func (x *FilterCollector) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterCollector.ProtoReflect.Descriptor instead. func (*FilterCollector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{47} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{49} } func (m *FilterCollector) GetFilter() isFilterCollector_Filter { @@ -5019,7 +5152,7 @@ type MaxCollector struct { func (x *MaxCollector) Reset() { *x = MaxCollector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[48] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5032,7 +5165,7 @@ func (x *MaxCollector) String() string { func (*MaxCollector) ProtoMessage() {} func (x *MaxCollector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[48] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5045,7 +5178,7 @@ func (x *MaxCollector) ProtoReflect() protoreflect.Message { // Deprecated: Use MaxCollector.ProtoReflect.Descriptor instead. func (*MaxCollector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{48} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{50} } func (m *MaxCollector) GetValueSource() isMaxCollector_ValueSource { @@ -5091,7 +5224,7 @@ type CollectorResult struct { func (x *CollectorResult) Reset() { *x = CollectorResult{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[49] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5104,7 +5237,7 @@ func (x *CollectorResult) String() string { func (*CollectorResult) ProtoMessage() {} func (x *CollectorResult) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[49] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5117,7 +5250,7 @@ func (x *CollectorResult) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectorResult.ProtoReflect.Descriptor instead. func (*CollectorResult) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{49} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{51} } func (m *CollectorResult) GetCollectorResults() isCollectorResult_CollectorResults { @@ -5216,7 +5349,7 @@ type BucketOrder struct { func (x *BucketOrder) Reset() { *x = BucketOrder{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[50] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5229,7 +5362,7 @@ func (x *BucketOrder) String() string { func (*BucketOrder) ProtoMessage() {} func (x *BucketOrder) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[50] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5242,7 +5375,7 @@ func (x *BucketOrder) ProtoReflect() protoreflect.Message { // Deprecated: Use BucketOrder.ProtoReflect.Descriptor instead. func (*BucketOrder) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{50} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{52} } func (x *BucketOrder) GetKey() string { @@ -5274,7 +5407,7 @@ type BucketResult struct { func (x *BucketResult) Reset() { *x = BucketResult{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[51] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5287,7 +5420,7 @@ func (x *BucketResult) String() string { func (*BucketResult) ProtoMessage() {} func (x *BucketResult) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[51] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5300,7 +5433,7 @@ func (x *BucketResult) ProtoReflect() protoreflect.Message { // Deprecated: Use BucketResult.ProtoReflect.Descriptor instead. func (*BucketResult) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{51} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{53} } func (x *BucketResult) GetBuckets() []*BucketResult_Bucket { @@ -5338,7 +5471,7 @@ type HitsResult struct { func (x *HitsResult) Reset() { *x = HitsResult{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[52] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5351,7 +5484,7 @@ func (x *HitsResult) String() string { func (*HitsResult) ProtoMessage() {} func (x *HitsResult) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[52] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5364,7 +5497,7 @@ func (x *HitsResult) ProtoReflect() protoreflect.Message { // Deprecated: Use HitsResult.ProtoReflect.Descriptor instead. func (*HitsResult) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{52} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{54} } func (x *HitsResult) GetTotalHits() *TotalHits { @@ -5395,7 +5528,7 @@ type FilterResult struct { func (x *FilterResult) Reset() { *x = FilterResult{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[53] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5408,7 +5541,7 @@ func (x *FilterResult) String() string { func (*FilterResult) ProtoMessage() {} func (x *FilterResult) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[53] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5421,7 +5554,7 @@ func (x *FilterResult) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterResult.ProtoReflect.Descriptor instead. func (*FilterResult) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{53} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{55} } func (x *FilterResult) GetDocCount() int32 { @@ -5455,7 +5588,7 @@ type Highlight struct { func (x *Highlight) Reset() { *x = Highlight{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[54] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5468,7 +5601,7 @@ func (x *Highlight) String() string { func (*Highlight) ProtoMessage() {} func (x *Highlight) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[54] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5481,7 +5614,7 @@ func (x *Highlight) ProtoReflect() protoreflect.Message { // Deprecated: Use Highlight.ProtoReflect.Descriptor instead. func (*Highlight) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{54} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{56} } func (x *Highlight) GetSettings() *Highlight_Settings { @@ -5528,7 +5661,7 @@ type KnnQuery struct { func (x *KnnQuery) Reset() { *x = KnnQuery{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[55] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5541,7 +5674,7 @@ func (x *KnnQuery) String() string { func (*KnnQuery) ProtoMessage() {} func (x *KnnQuery) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[55] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5554,7 +5687,7 @@ func (x *KnnQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use KnnQuery.ProtoReflect.Descriptor instead. func (*KnnQuery) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{55} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{57} } func (x *KnnQuery) GetField() string { @@ -5610,7 +5743,7 @@ type TermInSetQuery_TextTerms struct { func (x *TermInSetQuery_TextTerms) Reset() { *x = TermInSetQuery_TextTerms{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[56] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5623,7 +5756,7 @@ func (x *TermInSetQuery_TextTerms) String() string { func (*TermInSetQuery_TextTerms) ProtoMessage() {} func (x *TermInSetQuery_TextTerms) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[56] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5657,7 +5790,7 @@ type TermInSetQuery_IntTerms struct { func (x *TermInSetQuery_IntTerms) Reset() { *x = TermInSetQuery_IntTerms{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[57] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5670,7 +5803,7 @@ func (x *TermInSetQuery_IntTerms) String() string { func (*TermInSetQuery_IntTerms) ProtoMessage() {} func (x *TermInSetQuery_IntTerms) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[57] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5704,7 +5837,7 @@ type TermInSetQuery_LongTerms struct { func (x *TermInSetQuery_LongTerms) Reset() { *x = TermInSetQuery_LongTerms{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[58] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5717,7 +5850,7 @@ func (x *TermInSetQuery_LongTerms) String() string { func (*TermInSetQuery_LongTerms) ProtoMessage() {} func (x *TermInSetQuery_LongTerms) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[58] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5751,7 +5884,7 @@ type TermInSetQuery_FloatTerms struct { func (x *TermInSetQuery_FloatTerms) Reset() { *x = TermInSetQuery_FloatTerms{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[59] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5764,7 +5897,7 @@ func (x *TermInSetQuery_FloatTerms) String() string { func (*TermInSetQuery_FloatTerms) ProtoMessage() {} func (x *TermInSetQuery_FloatTerms) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[59] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5798,7 +5931,7 @@ type TermInSetQuery_DoubleTerms struct { func (x *TermInSetQuery_DoubleTerms) Reset() { *x = TermInSetQuery_DoubleTerms{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[60] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5811,7 +5944,7 @@ func (x *TermInSetQuery_DoubleTerms) String() string { func (*TermInSetQuery_DoubleTerms) ProtoMessage() {} func (x *TermInSetQuery_DoubleTerms) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[60] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5855,7 +5988,7 @@ type MultiFunctionScoreQuery_FilterFunction struct { func (x *MultiFunctionScoreQuery_FilterFunction) Reset() { *x = MultiFunctionScoreQuery_FilterFunction{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[62] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5868,7 +6001,7 @@ func (x *MultiFunctionScoreQuery_FilterFunction) String() string { func (*MultiFunctionScoreQuery_FilterFunction) ProtoMessage() {} func (x *MultiFunctionScoreQuery_FilterFunction) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[62] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5881,7 +6014,7 @@ func (x *MultiFunctionScoreQuery_FilterFunction) ProtoReflect() protoreflect.Mes // Deprecated: Use MultiFunctionScoreQuery_FilterFunction.ProtoReflect.Descriptor instead. func (*MultiFunctionScoreQuery_FilterFunction) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{21, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{23, 0} } func (x *MultiFunctionScoreQuery_FilterFunction) GetFilter() *Query { @@ -5947,7 +6080,7 @@ type Script_ParamValue struct { func (x *Script_ParamValue) Reset() { *x = Script_ParamValue{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[65] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5960,7 +6093,7 @@ func (x *Script_ParamValue) String() string { func (*Script_ParamValue) ProtoMessage() {} func (x *Script_ParamValue) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[65] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5973,7 +6106,7 @@ func (x *Script_ParamValue) ProtoReflect() protoreflect.Message { // Deprecated: Use Script_ParamValue.ProtoReflect.Descriptor instead. func (*Script_ParamValue) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{27, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{29, 0} } func (m *Script_ParamValue) GetParamValues() isScript_ParamValue_ParamValues { @@ -6116,7 +6249,7 @@ type Script_ParamStructValue struct { func (x *Script_ParamStructValue) Reset() { *x = Script_ParamStructValue{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[66] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6129,7 +6262,7 @@ func (x *Script_ParamStructValue) String() string { func (*Script_ParamStructValue) ProtoMessage() {} func (x *Script_ParamStructValue) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[66] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6142,7 +6275,7 @@ func (x *Script_ParamStructValue) ProtoReflect() protoreflect.Message { // Deprecated: Use Script_ParamStructValue.ProtoReflect.Descriptor instead. func (*Script_ParamStructValue) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{27, 1} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{29, 1} } func (x *Script_ParamStructValue) GetFields() map[string]*Script_ParamValue { @@ -6164,7 +6297,7 @@ type Script_ParamListValue struct { func (x *Script_ParamListValue) Reset() { *x = Script_ParamListValue{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[67] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6177,7 +6310,7 @@ func (x *Script_ParamListValue) String() string { func (*Script_ParamListValue) ProtoMessage() {} func (x *Script_ParamListValue) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[67] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6190,7 +6323,7 @@ func (x *Script_ParamListValue) ProtoReflect() protoreflect.Message { // Deprecated: Use Script_ParamListValue.ProtoReflect.Descriptor instead. func (*Script_ParamListValue) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{27, 2} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{29, 2} } func (x *Script_ParamListValue) GetValues() []*Script_ParamValue { @@ -6228,7 +6361,7 @@ type SearchResponse_Diagnostics struct { func (x *SearchResponse_Diagnostics) Reset() { *x = SearchResponse_Diagnostics{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[70] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6241,7 +6374,7 @@ func (x *SearchResponse_Diagnostics) String() string { func (*SearchResponse_Diagnostics) ProtoMessage() {} func (x *SearchResponse_Diagnostics) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[70] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6254,7 +6387,7 @@ func (x *SearchResponse_Diagnostics) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchResponse_Diagnostics.ProtoReflect.Descriptor instead. func (*SearchResponse_Diagnostics) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 0} } // Deprecated: Do not use. @@ -6371,7 +6504,7 @@ type SearchResponse_Hit struct { func (x *SearchResponse_Hit) Reset() { *x = SearchResponse_Hit{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[71] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6384,7 +6517,7 @@ func (x *SearchResponse_Hit) String() string { func (*SearchResponse_Hit) ProtoMessage() {} func (x *SearchResponse_Hit) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[71] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6397,7 +6530,7 @@ func (x *SearchResponse_Hit) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchResponse_Hit.ProtoReflect.Descriptor instead. func (*SearchResponse_Hit) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 1} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 1} } func (x *SearchResponse_Hit) GetLuceneDocId() int32 { @@ -6464,7 +6597,7 @@ type SearchResponse_SearchState struct { func (x *SearchResponse_SearchState) Reset() { *x = SearchResponse_SearchState{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[72] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6477,7 +6610,7 @@ func (x *SearchResponse_SearchState) String() string { func (*SearchResponse_SearchState) ProtoMessage() {} func (x *SearchResponse_SearchState) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[72] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6490,7 +6623,7 @@ func (x *SearchResponse_SearchState) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchResponse_SearchState.ProtoReflect.Descriptor instead. func (*SearchResponse_SearchState) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 2} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 2} } func (x *SearchResponse_SearchState) GetTimestamp() int64 { @@ -6543,7 +6676,7 @@ type SearchResponse_Diagnostics_VectorDiagnostics struct { func (x *SearchResponse_Diagnostics_VectorDiagnostics) Reset() { *x = SearchResponse_Diagnostics_VectorDiagnostics{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[74] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6556,7 +6689,7 @@ func (x *SearchResponse_Diagnostics_VectorDiagnostics) String() string { func (*SearchResponse_Diagnostics_VectorDiagnostics) ProtoMessage() {} func (x *SearchResponse_Diagnostics_VectorDiagnostics) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[74] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6569,7 +6702,7 @@ func (x *SearchResponse_Diagnostics_VectorDiagnostics) ProtoReflect() protorefle // Deprecated: Use SearchResponse_Diagnostics_VectorDiagnostics.ProtoReflect.Descriptor instead. func (*SearchResponse_Diagnostics_VectorDiagnostics) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 0, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 0, 0} } func (x *SearchResponse_Diagnostics_VectorDiagnostics) GetSearchTimeMs() float64 { @@ -6608,7 +6741,7 @@ type SearchResponse_Hit_FieldValue struct { func (x *SearchResponse_Hit_FieldValue) Reset() { *x = SearchResponse_Hit_FieldValue{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[78] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6621,7 +6754,7 @@ func (x *SearchResponse_Hit_FieldValue) String() string { func (*SearchResponse_Hit_FieldValue) ProtoMessage() {} func (x *SearchResponse_Hit_FieldValue) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[78] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6634,7 +6767,7 @@ func (x *SearchResponse_Hit_FieldValue) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchResponse_Hit_FieldValue.ProtoReflect.Descriptor instead. func (*SearchResponse_Hit_FieldValue) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 1, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 1, 0} } func (m *SearchResponse_Hit_FieldValue) GetFieldValues() isSearchResponse_Hit_FieldValue_FieldValues { @@ -6777,7 +6910,7 @@ type SearchResponse_Hit_CompositeFieldValue struct { func (x *SearchResponse_Hit_CompositeFieldValue) Reset() { *x = SearchResponse_Hit_CompositeFieldValue{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[79] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6790,7 +6923,7 @@ func (x *SearchResponse_Hit_CompositeFieldValue) String() string { func (*SearchResponse_Hit_CompositeFieldValue) ProtoMessage() {} func (x *SearchResponse_Hit_CompositeFieldValue) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[79] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6803,7 +6936,7 @@ func (x *SearchResponse_Hit_CompositeFieldValue) ProtoReflect() protoreflect.Mes // Deprecated: Use SearchResponse_Hit_CompositeFieldValue.ProtoReflect.Descriptor instead. func (*SearchResponse_Hit_CompositeFieldValue) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 1, 1} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 1, 1} } func (x *SearchResponse_Hit_CompositeFieldValue) GetFieldValue() []*SearchResponse_Hit_FieldValue { @@ -6825,7 +6958,7 @@ type SearchResponse_Hit_Highlights struct { func (x *SearchResponse_Hit_Highlights) Reset() { *x = SearchResponse_Hit_Highlights{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[80] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6838,7 +6971,7 @@ func (x *SearchResponse_Hit_Highlights) String() string { func (*SearchResponse_Hit_Highlights) ProtoMessage() {} func (x *SearchResponse_Hit_Highlights) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[80] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6851,7 +6984,7 @@ func (x *SearchResponse_Hit_Highlights) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchResponse_Hit_Highlights.ProtoReflect.Descriptor instead. func (*SearchResponse_Hit_Highlights) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 1, 2} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 1, 2} } func (x *SearchResponse_Hit_Highlights) GetFragments() []string { @@ -6872,7 +7005,7 @@ type SearchResponse_Hit_FieldValue_Vector struct { func (x *SearchResponse_Hit_FieldValue_Vector) Reset() { *x = SearchResponse_Hit_FieldValue_Vector{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[85] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6885,7 +7018,7 @@ func (x *SearchResponse_Hit_FieldValue_Vector) String() string { func (*SearchResponse_Hit_FieldValue_Vector) ProtoMessage() {} func (x *SearchResponse_Hit_FieldValue_Vector) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[85] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6898,7 +7031,7 @@ func (x *SearchResponse_Hit_FieldValue_Vector) ProtoReflect() protoreflect.Messa // Deprecated: Use SearchResponse_Hit_FieldValue_Vector.ProtoReflect.Descriptor instead. func (*SearchResponse_Hit_FieldValue_Vector) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{33, 1, 0, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{35, 1, 0, 0} } func (x *SearchResponse_Hit_FieldValue_Vector) GetValue() []float32 { @@ -6920,7 +7053,7 @@ type ProfileResult_AdditionalCollectorStats struct { func (x *ProfileResult_AdditionalCollectorStats) Reset() { *x = ProfileResult_AdditionalCollectorStats{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[86] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6933,7 +7066,7 @@ func (x *ProfileResult_AdditionalCollectorStats) String() string { func (*ProfileResult_AdditionalCollectorStats) ProtoMessage() {} func (x *ProfileResult_AdditionalCollectorStats) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[86] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6946,7 +7079,7 @@ func (x *ProfileResult_AdditionalCollectorStats) ProtoReflect() protoreflect.Mes // Deprecated: Use ProfileResult_AdditionalCollectorStats.ProtoReflect.Descriptor instead. func (*ProfileResult_AdditionalCollectorStats) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{42, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{44, 0} } func (x *ProfileResult_AdditionalCollectorStats) GetCollectTimeMs() float64 { @@ -6975,7 +7108,7 @@ type ProfileResult_CollectorStats struct { func (x *ProfileResult_CollectorStats) Reset() { *x = ProfileResult_CollectorStats{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[87] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6988,7 +7121,7 @@ func (x *ProfileResult_CollectorStats) String() string { func (*ProfileResult_CollectorStats) ProtoMessage() {} func (x *ProfileResult_CollectorStats) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[87] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7001,7 +7134,7 @@ func (x *ProfileResult_CollectorStats) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfileResult_CollectorStats.ProtoReflect.Descriptor instead. func (*ProfileResult_CollectorStats) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{42, 1} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{44, 1} } func (x *ProfileResult_CollectorStats) GetTerminated() bool { @@ -7059,7 +7192,7 @@ type ProfileResult_SegmentStats struct { func (x *ProfileResult_SegmentStats) Reset() { *x = ProfileResult_SegmentStats{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[88] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7072,7 +7205,7 @@ func (x *ProfileResult_SegmentStats) String() string { func (*ProfileResult_SegmentStats) ProtoMessage() {} func (x *ProfileResult_SegmentStats) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[88] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7085,7 +7218,7 @@ func (x *ProfileResult_SegmentStats) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfileResult_SegmentStats.ProtoReflect.Descriptor instead. func (*ProfileResult_SegmentStats) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{42, 2} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{44, 2} } func (x *ProfileResult_SegmentStats) GetMaxDoc() int32 { @@ -7138,7 +7271,7 @@ type ProfileResult_SearchStats struct { func (x *ProfileResult_SearchStats) Reset() { *x = ProfileResult_SearchStats{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[89] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7151,7 +7284,7 @@ func (x *ProfileResult_SearchStats) String() string { func (*ProfileResult_SearchStats) ProtoMessage() {} func (x *ProfileResult_SearchStats) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[89] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7164,7 +7297,7 @@ func (x *ProfileResult_SearchStats) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfileResult_SearchStats.ProtoReflect.Descriptor instead. func (*ProfileResult_SearchStats) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{42, 3} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{44, 3} } func (x *ProfileResult_SearchStats) GetTotalCollectTimeMs() float64 { @@ -7202,7 +7335,7 @@ type BucketResult_Bucket struct { func (x *BucketResult_Bucket) Reset() { *x = BucketResult_Bucket{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[92] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7215,7 +7348,7 @@ func (x *BucketResult_Bucket) String() string { func (*BucketResult_Bucket) ProtoMessage() {} func (x *BucketResult_Bucket) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[92] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7228,7 +7361,7 @@ func (x *BucketResult_Bucket) ProtoReflect() protoreflect.Message { // Deprecated: Use BucketResult_Bucket.ProtoReflect.Descriptor instead. func (*BucketResult_Bucket) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{51, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{53, 0} } func (x *BucketResult_Bucket) GetKey() string { @@ -7294,7 +7427,7 @@ type Highlight_Settings struct { func (x *Highlight_Settings) Reset() { *x = Highlight_Settings{} if protoimpl.UnsafeEnabled { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[95] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7307,7 +7440,7 @@ func (x *Highlight_Settings) String() string { func (*Highlight_Settings) ProtoMessage() {} func (x *Highlight_Settings) ProtoReflect() protoreflect.Message { - mi := &file_yelp_nrtsearch_search_proto_msgTypes[95] + mi := &file_yelp_nrtsearch_search_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7320,7 +7453,7 @@ func (x *Highlight_Settings) ProtoReflect() protoreflect.Message { // Deprecated: Use Highlight_Settings.ProtoReflect.Descriptor instead. func (*Highlight_Settings) Descriptor() ([]byte, []int) { - return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{54, 0} + return file_yelp_nrtsearch_search_proto_rawDescGZIP(), []int{56, 0} } func (x *Highlight_Settings) GetHighlighterType() Highlight_Type { @@ -7691,1058 +7824,1075 @@ var file_yelp_nrtsearch_search_proto_rawDesc = []byte{ 0x69, 0x65, 0x6c, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x05, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, - 0x23, 0x0a, 0x0b, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3f, - 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x22, - 0xa8, 0x05, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, + 0x63, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, + 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x05, 0x68, 0x6f, 0x6c, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x52, 0x05, 0x68, + 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x6f, 0x50, 0x6f, 0x6c, 0x79, 0x67, + 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x31, 0x0a, + 0x08, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x73, + 0x22, 0x23, 0x0a, 0x0b, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, + 0x3f, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, + 0x22, 0xa8, 0x05, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x37, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, + 0x6f, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x64, 0x1a, 0x91, 0x01, 0x0a, 0x0e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, + 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, + 0x50, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x55, 0x4d, 0x10, 0x01, 0x22, 0x50, 0x0a, 0x09, 0x42, 0x6f, 0x6f, + 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x5f, + 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x59, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0e, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x55, + 0x4d, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x41, 0x0a, 0x12, 0x43, + 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xc8, + 0x0d, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, + 0x6c, 0x65, 0x61, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x62, + 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x70, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x70, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x12, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x0a, 0x73, 0x63, - 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, - 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x64, 0x1a, 0x91, 0x01, 0x0a, 0x0e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x46, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x46, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x53, - 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, - 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x53, 0x55, 0x4d, 0x10, 0x01, 0x22, 0x50, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x73, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x5f, 0x4d, - 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, - 0x0a, 0x0e, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x55, 0x4d, - 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x41, 0x0a, 0x12, 0x43, 0x6f, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xfd, 0x0c, - 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, - 0x65, 0x61, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6f, - 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x70, 0x68, - 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x68, - 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x12, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x12, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x37, 0x0a, - 0x09, 0x74, 0x65, 0x72, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x65, 0x72, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x72, - 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x49, 0x6e, - 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x72, 0x6d, 0x49, 0x6e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, - 0x74, 0x65, 0x72, 0x6d, 0x49, 0x6e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x55, - 0x0a, 0x13, 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x6a, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, - 0x52, 0x13, 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x4c, 0x0a, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x10, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x49, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x55, 0x0a, 0x13, 0x67, 0x65, 0x6f, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, - 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x13, 0x67, 0x65, 0x6f, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, - 0x0d, 0x67, 0x65, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x48, 0x00, 0x52, 0x0b, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x46, 0x0a, 0x0e, 0x67, 0x65, 0x6f, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x52, 0x61, 0x64, 0x69, 0x75, - 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x6f, 0x52, 0x61, 0x64, - 0x69, 0x75, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x55, 0x0a, 0x13, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x13, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x49, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, - 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x61, 0x0a, 0x17, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x48, 0x00, 0x52, 0x17, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x5e, 0x0a, - 0x16, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, - 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3d, 0x0a, - 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, - 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x12, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x42, 0x0b, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xe7, 0x0a, - 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x70, - 0x48, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x48, - 0x69, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, - 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x74, - 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x78, 0x74, 0x12, 0x40, 0x0a, 0x0d, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0d, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, - 0x6f, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, - 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, - 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, - 0x12, 0x1a, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, - 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x61, - 0x63, 0x65, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, - 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x66, 0x65, 0x74, 0x63, 0x68, - 0x54, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x73, - 0x12, 0x36, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x16, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x18, - 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x52, 0x09, 0x72, - 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x15, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x26, 0x0a, - 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x52, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x49, 0x0a, 0x0a, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x5f, 0x68, 0x69, 0x74, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, - 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, - 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, - 0x69, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x03, 0x6b, 0x6e, 0x6e, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x4b, 0x6e, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x03, 0x6b, 0x6e, 0x6e, 0x1a, 0x56, 0x0a, - 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x12, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x37, + 0x0a, 0x09, 0x74, 0x65, 0x72, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x22, 0xc1, 0x02, 0x0a, 0x08, 0x49, 0x6e, 0x6e, 0x65, - 0x72, 0x48, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x69, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x5f, 0x68, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x0a, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x27, - 0x0a, 0x0f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, + 0x72, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x49, + 0x6e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, + 0x65, 0x72, 0x6d, 0x49, 0x6e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, + 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x49, 0x6e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x55, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, + 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x6a, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, + 0x00, 0x52, 0x13, 0x64, 0x69, 0x73, 0x6a, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, + 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x4c, 0x0a, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, + 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x10, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x49, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x55, 0x0a, 0x13, 0x67, 0x65, 0x6f, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6f, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x13, 0x67, 0x65, 0x6f, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, + 0x0a, 0x0d, 0x67, 0x65, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x6f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x46, 0x0a, 0x0e, 0x67, 0x65, 0x6f, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x52, 0x61, 0x64, 0x69, + 0x75, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x6f, 0x52, 0x61, + 0x64, 0x69, 0x75, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x55, 0x0a, 0x13, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x13, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x49, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x61, 0x0a, 0x17, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x17, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x5e, + 0x0a, 0x16, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x68, 0x72, + 0x61, 0x73, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3d, + 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, + 0x52, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, + 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x12, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x49, 0x0a, 0x0f, 0x67, 0x65, 0x6f, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x50, 0x6f, 0x6c, + 0x79, 0x67, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x6f, + 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x0b, 0x0a, 0x09, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xe7, 0x0a, 0x0a, 0x0d, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x48, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x48, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x12, + 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x12, + 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, - 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x6f, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x22, 0x50, 0x0a, 0x0c, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb0, 0x07, - 0x0a, 0x06, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xba, - 0x03, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, - 0x09, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, - 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x20, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, - 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, - 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x49, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x65, 0x78, 0x74, 0x12, 0x40, 0x0a, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x1c, + 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x47, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, + 0x69, 0x74, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x54, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, + 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, + 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, + 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x0a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x36, 0x0a, 0x16, + 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x64, 0x69, + 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x34, + 0x0a, 0x09, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x52, 0x09, 0x72, 0x65, 0x73, 0x63, 0x6f, + 0x72, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2c, + 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x0a, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, + 0x72, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x70, + 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x49, 0x0a, 0x0a, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x68, 0x69, + 0x74, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x12, + 0x28, 0x0a, 0x03, 0x6b, 0x6e, 0x6e, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4b, 0x6e, 0x6e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x03, 0x6b, 0x6e, 0x6e, 0x1a, 0x56, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 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, 0x2d, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x54, 0x0a, 0x0e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x65, 0x72, 0x22, 0xc1, 0x02, 0x0a, 0x08, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, + 0x12, 0x2a, 0x0a, 0x11, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, + 0x5f, 0x68, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x6f, 0x70, + 0x48, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0a, + 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, + 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x6f, 0x72, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, + 0x12, 0x35, 0x0a, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x09, 0x68, 0x69, + 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x22, 0x50, 0x0a, 0x0c, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x06, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb0, 0x07, 0x0a, 0x06, 0x53, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x38, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xba, 0x03, 0x0a, 0x0a, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x74, 0x65, 0x78, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, + 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, + 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, + 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, + 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x22, 0x0a, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, - 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0d, 0x0a, 0x0b, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0xb9, 0x01, 0x0a, 0x10, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x49, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x5a, 0x0a, 0x0b, 0x46, - 0x69, 0x65, 0x6c, 0x64, 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, 0x35, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, + 0x61, 0x6d, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, + 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6c, 0x69, 0x73, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x1a, 0x5a, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, - 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, - 0x22, 0x84, 0x01, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x44, 0x6f, 0x63, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x6f, 0x44, 0x6f, 0x63, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x4d, 0x61, 0x78, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x6f, 0x4d, 0x61, 0x78, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, - 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x0a, 0x53, 0x6f, 0x72, 0x74, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x08, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x08, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x2b, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x0a, - 0x0a, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0a, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x09, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x48, 0x69, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a, - 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x51, 0x55, - 0x41, 0x4c, 0x5f, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, - 0x5f, 0x54, 0x4f, 0x10, 0x01, 0x22, 0x41, 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, - 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, - 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x22, 0xbd, 0x1b, 0x0a, 0x0e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x64, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x69, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x69, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x48, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x48, - 0x69, 0x74, 0x73, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x12, 0x34, - 0x0a, 0x04, 0x68, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, + 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, + 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0xb9, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x06, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x5a, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, + 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, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x5a, + 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, + 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, 0x0a, 0x0e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x0a, + 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x22, 0x84, 0x01, 0x0a, + 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x44, 0x6f, 0x63, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x6f, 0x44, 0x6f, 0x63, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x4d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x6f, 0x4d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x30, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x06, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x0a, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0xd7, 0x01, + 0x0a, 0x08, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x06, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, + 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x09, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x48, 0x69, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a, 0x08, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x54, + 0x4f, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, + 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x54, 0x4f, 0x10, + 0x01, 0x22, 0x41, 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, + 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, + 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, + 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x22, 0xbd, 0x1b, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x52, 0x04, - 0x68, 0x69, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x3b, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x41, 0x0a, - 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x5e, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x45, 0x61, - 0x72, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x1a, 0xae, 0x09, 0x0a, 0x0b, 0x44, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x24, 0x0a, 0x0b, 0x70, 0x61, - 0x72, 0x73, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x72, 0x65, - 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x0e, - 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x44, - 0x6f, 0x77, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x50, 0x61, 0x73, 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, - 0x73, 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x28, - 0x0a, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, - 0x68, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x12, 0x3c, 0x0a, 0x19, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x73, - 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x72, 0x74, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x6e, 0x72, 0x74, 0x57, 0x61, 0x69, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x5b, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x63, - 0x6f, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x67, 0x0a, 0x0f, 0x72, 0x65, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x12, 0x76, 0x0a, 0x14, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x44, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x42, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, - 0x48, 0x69, 0x74, 0x73, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x44, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x76, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, - 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x52, + 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x69, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, + 0x12, 0x4a, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, - 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x52, 0x11, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, - 0x74, 0x69, 0x63, 0x73, 0x1a, 0x6e, 0x0a, 0x11, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, - 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x35, 0x0a, - 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x48, 0x69, 0x74, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x66, 0x61, 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0b, 0x66, 0x61, + 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x5e, 0x0a, 0x10, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x1a, 0xae, 0x09, 0x0a, 0x0b, 0x44, 0x69, 0x61, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x24, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x0e, + 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, + 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x6c, + 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x73, + 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x73, 0x73, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x69, + 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x67, + 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x3c, + 0x0a, 0x19, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x19, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0d, + 0x6e, 0x72, 0x74, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0d, 0x6e, 0x72, 0x74, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x4d, 0x73, 0x12, 0x5b, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, + 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x67, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, + 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x76, + 0x0a, 0x14, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x44, 0x69, 0x61, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, + 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x14, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x44, 0x69, 0x61, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x56, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x11, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x1a, 0x6e, 0x0a, 0x11, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, + 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x48, 0x69, 0x74, 0x73, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, + 0x1a, 0x3e, 0x0a, 0x10, 0x46, 0x61, 0x63, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 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, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 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, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, - 0x73, 0x54, 0x69, 0x6d, 0x65, 0x4d, 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, 0x01, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x71, 0x0a, 0x19, 0x49, 0x6e, 0x6e, 0x65, - 0x72, 0x48, 0x69, 0x74, 0x73, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xa8, 0x0b, 0x0a, 0x03, - 0x48, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x44, 0x6f, 0x63, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x44, 0x6f, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x12, 0x56, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x71, 0x0a, 0x19, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, + 0x73, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xa8, 0x0b, 0x0a, 0x03, 0x48, 0x69, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x44, 0x6f, 0x63, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x44, 0x6f, 0x63, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x0a, 0x68, 0x69, 0x67, - 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, - 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, - 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, - 0x48, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, - 0x48, 0x69, 0x74, 0x73, 0x1a, 0xd3, 0x03, 0x0a, 0x0a, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6f, 0x6f, - 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x08, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, - 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, - 0x0b, 0x6c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x61, 0x74, 0x4c, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x56, 0x0a, 0x0b, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0b, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1e, 0x0a, 0x06, 0x56, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x62, 0x0a, 0x13, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x2a, - 0x0a, 0x0a, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x6f, 0x0a, 0x0b, 0x46, 0x69, - 0x65, 0x6c, 0x64, 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, 0x4a, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x11, 0x53, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x56, 0x0a, + 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x0a, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6c, 0x75, 0x63, 0x65, + 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x48, 0x69, 0x67, 0x68, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x68, 0x69, 0x67, + 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, + 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, + 0x1a, 0xd3, 0x03, 0x0a, 0x0a, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1e, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x24, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x6c, 0x61, 0x74, + 0x4c, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, + 0x4c, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x56, 0x0a, 0x0b, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1e, 0x0a, 0x06, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x62, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, + 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x48, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x6a, 0x0a, 0x0f, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x48, 0x69, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x2a, 0x0a, 0x0a, 0x48, 0x69, + 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x61, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x61, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x6f, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x56, - 0x0a, 0x0e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xbb, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x6f, 0x63, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x6f, 0x63, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, - 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x62, 0x0a, 0x15, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x01, 0x0a, 0x10, 0x4e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x6e, - 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x6d, - 0x61, 0x78, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x22, - 0xab, 0x02, 0x0a, 0x05, 0x46, 0x61, 0x63, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x70, - 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, - 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x64, 0x73, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, - 0x4f, 0x72, 0x64, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x70, 0x4e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x74, 0x6f, 0x70, 0x4e, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x06, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x6f, 0x70, - 0x44, 0x6f, 0x63, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xbc, 0x01, - 0x0a, 0x0b, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x64, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x6d, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x0a, 0x0d, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x50, 0x0a, 0x09, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x55, 0x0a, 0x0e, 0x50, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, - 0x6f, 0x72, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, - 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x0c, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x20, 0x0a, - 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x72, 0x65, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, - 0xd8, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x43, 0x0a, 0x0d, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, - 0x48, 0x00, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x72, 0x12, 0x46, 0x0a, 0x0e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x63, 0x6f, - 0x72, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, - 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x11, 0x53, 0x6f, 0x72, 0x74, 0x65, + 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x4a, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6a, + 0x0a, 0x0f, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x48, 0x69, 0x74, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x56, 0x0a, 0x0e, 0x49, 0x6e, + 0x6e, 0x65, 0x72, 0x48, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0xbb, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, + 0x73, 0x74, 0x44, 0x6f, 0x63, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x44, 0x6f, 0x63, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x1a, 0x62, 0x0a, 0x15, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x01, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, + 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x63, 0x6c, + 0x75, 0x73, 0x69, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, + 0x61, 0x78, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x05, + 0x46, 0x61, 0x63, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x42, 0x0a, + 0x0c, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x64, 0x73, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x64, 0x73, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x6f, 0x70, 0x4e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x6f, 0x70, + 0x4e, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x44, 0x6f, 0x63, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x6f, + 0x70, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x0b, 0x46, 0x61, + 0x63, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, + 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x0a, 0x0d, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x50, 0x0a, 0x09, 0x46, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x55, 0x0a, 0x0e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a, - 0x09, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x22, 0x81, 0x09, 0x0a, 0x0d, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x49, 0x0a, 0x0b, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, - 0x72, 0x73, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x72, 0x69, 0x6c, 0x6c, - 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x40, 0x0a, 0x18, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x1a, 0xeb, 0x03, 0x0a, 0x0e, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4c, - 0x0a, 0x0c, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0c, - 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x13, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, - 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x84, - 0x01, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x48, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x18, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x1a, 0x81, 0x01, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x9a, + 0x01, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, + 0x12, 0x37, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x72, + 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x72, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x43, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x12, 0x46, 0x0a, + 0x0e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x63, 0x6f, + 0x72, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x52, 0x65, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x72, 0x73, 0x22, 0x81, 0x09, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, + 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, + 0x65, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x26, 0x0a, + 0x0e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x44, 0x6f, 0x77, 0x6e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x40, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x4d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x1a, 0xeb, 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x0c, 0x73, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0c, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x18, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xc0, 0x01, 0x0a, 0x0c, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, - 0x78, 0x44, 0x6f, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x44, - 0x6f, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x1a, 0xbf, 0x01, 0x0a, - 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x12, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2c, 0x0a, 0x11, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, - 0x64, 0x75, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0e, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x8a, - 0x04, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x05, - 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x74, 0x65, 0x72, - 0x6d, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4c, 0x0a, - 0x10, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x74, 0x6f, 0x70, 0x48, 0x69, - 0x74, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, - 0x03, 0x6d, 0x61, 0x78, 0x12, 0x59, 0x0a, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, - 0x5c, 0x0a, 0x15, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, - 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x56, 0x0a, 0x0f, 0x50, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2e, - 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x18, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x1a, 0x81, 0x01, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xc0, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x63, 0x12, 0x18, + 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x4d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x1a, 0xbf, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x8a, 0x04, 0x0a, 0x09, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x49, + 0x0a, 0x0f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4c, 0x0a, 0x10, 0x74, 0x6f, 0x70, + 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x54, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x10, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x78, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x78, + 0x12, 0x59, 0x0a, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0x5c, 0x0a, 0x15, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x56, 0x0a, 0x0f, 0x50, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0xac, 0x01, 0x0a, 0x0e, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2f, + 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, + 0x0d, 0x0a, 0x0b, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc6, + 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x69, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x69, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x09, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, + 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, + 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, + 0x00, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, + 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x49, 0x6e, + 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x4d, + 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2e, + 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x48, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x48, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x48, 0x69, 0x74, 0x73, 0x12, 0x3a, 0x0a, - 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x09, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x74, - 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0f, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, - 0x2b, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x08, - 0x73, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x65, - 0x72, 0x6d, 0x49, 0x6e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, - 0x73, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x4d, 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x22, 0xdf, 0x02, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, - 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x61, 0x6e, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x48, 0x00, 0x52, 0x09, 0x61, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, - 0x0a, 0x68, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x68, - 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, - 0x00, 0x52, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, - 0x12, 0x0a, 0x10, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x22, 0x7a, 0x0a, 0x0b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x2e, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, - 0x1e, 0x0a, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, - 0x44, 0x45, 0x53, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x01, 0x22, - 0xaf, 0x03, 0x0a, 0x0c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x3b, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, - 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x91, 0x02, - 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x75, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x68, 0x0a, 0x1b, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x79, 0x0a, 0x0a, 0x48, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x35, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x52, 0x09, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x69, 0x74, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x48, 0x69, 0x74, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, 0x22, 0x84, 0x02, 0x0a, - 0x0c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x6f, 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x64, 0x6f, 0x63, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x16, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x68, 0x0a, 0x1b, 0x4e, 0x65, 0x73, + 0x72, 0x69, 0x70, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x42, 0x0d, + 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xdf, 0x02, + 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x61, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x09, + 0x61, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x68, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x69, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x64, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x12, 0x0a, 0x10, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, + 0x7a, 0x0a, 0x0b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x39, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x1e, 0x0a, 0x09, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x01, 0x22, 0xaf, 0x03, 0x0a, 0x0c, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3b, 0x0a, 0x07, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, + 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x74, + 0x68, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x91, 0x02, 0x0a, 0x06, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x75, 0x0a, 0x16, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, + 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xfd, 0x0a, 0x0a, 0x09, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x51, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, - 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0xa5, 0x08, 0x0a, 0x08, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x68, 0x69, 0x67, 0x68, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x6f, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x66, - 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x53, 0x0a, 0x17, 0x6d, - 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x66, 0x72, 0x61, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x3c, 0x0a, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0e, - 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3b, - 0x0a, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, + 0x6c, 0x74, 0x73, 0x1a, 0x68, 0x0a, 0x1b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, + 0x0a, 0x48, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x48, 0x69, 0x74, 0x73, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x48, 0x69, + 0x74, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, + 0x69, 0x74, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, 0x22, 0x84, 0x02, 0x0a, 0x0c, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x6f, 0x63, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x6f, 0x63, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x68, 0x0a, 0x1b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xfd, 0x0a, 0x0a, 0x09, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x0a, + 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, + 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x51, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x75, + 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0xa5, 0x08, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, + 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, + 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, + 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x68, 0x69, 0x67, + 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x5f, + 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, + 0x54, 0x61, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x66, 0x72, 0x61, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x53, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x4f, 0x66, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x0f, + 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x3f, 0x0a, 0x0d, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x66, 0x72, 0x61, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x72, 0x61, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, + 0x74, 0x65, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x3f, 0x0a, 0x0d, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, - 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0a, - 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, - 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x13, 0x64, 0x69, - 0x73, 0x63, 0x72, 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x12, 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x53, 0x0a, 0x19, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x17, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, - 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x12, 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x68, 0x69, + 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x69, 0x67, 0x68, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x53, 0x0a, 0x19, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, + 0x72, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x0e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x43, 0x68, 0x61, - 0x72, 0x73, 0x12, 0x48, 0x0a, 0x11, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x54, 0x0a, 0x17, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x65, 0x1a, 0x62, 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 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, 0x36, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, - 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, - 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, - 0x41, 0x53, 0x54, 0x5f, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, - 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, - 0x4d, 0x10, 0x03, 0x22, 0xbb, 0x01, 0x0a, 0x08, 0x4b, 0x6e, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, - 0x6b, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x43, 0x61, - 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0b, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x62, - 0x6f, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x73, - 0x74, 0x2a, 0x25, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x4d, 0x55, 0x53, 0x54, 0x10, 0x01, 0x2a, 0x95, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x1a, - 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, - 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x43, - 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, - 0x1b, 0x0a, 0x17, 0x54, 0x4f, 0x50, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x42, 0x4c, 0x45, - 0x4e, 0x44, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, - 0x54, 0x4f, 0x50, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x10, - 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x50, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x10, 0x05, - 0x2a, 0x38, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x45, 0x46, 0x49, - 0x58, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x55, 0x5a, - 0x5a, 0x59, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x2a, 0x85, 0x03, 0x0a, 0x09, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, - 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x51, 0x55, - 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x52, 0x41, 0x53, 0x45, 0x5f, - 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x55, 0x4e, 0x43, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, - 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x52, 0x4d, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, - 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x45, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x53, 0x45, 0x54, - 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x49, 0x53, 0x4a, - 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x06, 0x12, 0x09, 0x0a, - 0x05, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x41, 0x54, 0x43, - 0x48, 0x5f, 0x50, 0x48, 0x52, 0x41, 0x53, 0x45, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x55, - 0x4c, 0x54, 0x49, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, 0x52, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x45, 0x4f, 0x5f, 0x42, 0x4f, - 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x0b, 0x12, 0x0d, 0x0a, 0x09, - 0x47, 0x45, 0x4f, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x0c, 0x12, 0x0a, 0x0a, 0x06, 0x4e, - 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x53, 0x54, - 0x53, 0x10, 0x0e, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x41, 0x44, 0x49, 0x55, - 0x53, 0x10, 0x0f, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x10, 0x12, 0x1e, 0x0a, 0x1a, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x46, 0x55, 0x4e, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, - 0x59, 0x10, 0x11, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x50, 0x48, 0x52, - 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x12, 0x12, 0x0a, 0x0a, 0x06, - 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x13, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x53, - 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, - 0x10, 0x14, 0x2a, 0x3c, 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x07, - 0x0a, 0x03, 0x4d, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0x01, - 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x49, 0x44, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x02, - 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x49, 0x44, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x03, - 0x42, 0x58, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x79, 0x65, 0x6c, 0x70, 0x2e, 0x6e, 0x72, 0x74, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x42, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x59, 0x65, 0x6c, 0x70, 0x2f, 0x6e, 0x72, 0x74, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0xa2, 0x02, 0x03, 0x48, 0x4c, 0x57, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, + 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x47, 0x0a, 0x10, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x63, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x72, 0x79, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0d, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x43, 0x68, 0x61, 0x72, 0x73, 0x12, 0x48, + 0x0a, 0x11, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73, + 0x63, 0x61, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, + 0x79, 0x4d, 0x61, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x54, 0x0a, 0x17, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, + 0x79, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x1a, 0x62, + 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 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, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x3b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x41, 0x53, 0x54, 0x5f, + 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, + 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x03, 0x22, + 0xbb, 0x01, 0x0a, 0x08, 0x4b, 0x6e, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x75, 0x63, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x6b, 0x12, 0x25, 0x0a, + 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x2a, 0x25, 0x0a, + 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0a, + 0x0a, 0x06, 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x55, + 0x53, 0x54, 0x10, 0x01, 0x2a, 0x95, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x41, + 0x4e, 0x54, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, + 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x42, 0x4f, 0x4f, + 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x43, 0x4f, 0x52, 0x49, 0x4e, + 0x47, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x54, + 0x4f, 0x50, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x44, + 0x5f, 0x46, 0x52, 0x45, 0x51, 0x53, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x4f, 0x50, 0x5f, + 0x54, 0x45, 0x52, 0x4d, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x53, 0x54, 0x10, 0x04, 0x12, 0x0d, 0x0a, + 0x09, 0x54, 0x4f, 0x50, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x53, 0x10, 0x05, 0x2a, 0x38, 0x0a, 0x13, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x5f, 0x51, 0x55, + 0x45, 0x52, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x55, 0x5a, 0x5a, 0x59, 0x5f, 0x51, + 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x2a, 0x96, 0x03, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, + 0x0a, 0x0d, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, + 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x48, 0x52, 0x41, 0x53, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, + 0x59, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x03, 0x12, 0x0e, 0x0a, + 0x0a, 0x54, 0x45, 0x52, 0x4d, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x04, 0x12, 0x15, 0x0a, + 0x11, 0x54, 0x45, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x51, 0x55, 0x45, + 0x52, 0x59, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x49, 0x53, 0x4a, 0x55, 0x4e, 0x43, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x41, 0x54, + 0x43, 0x48, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x50, 0x48, + 0x52, 0x41, 0x53, 0x45, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, + 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, + 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x45, 0x4f, 0x5f, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x49, + 0x4e, 0x47, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x0b, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x45, 0x4f, 0x5f, + 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x0c, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x45, 0x53, 0x54, 0x45, + 0x44, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x0e, 0x12, + 0x0e, 0x0a, 0x0a, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x41, 0x44, 0x49, 0x55, 0x53, 0x10, 0x0f, 0x12, + 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x10, 0x12, + 0x1e, 0x0a, 0x1a, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x11, 0x12, + 0x17, 0x0a, 0x13, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x50, 0x48, 0x52, 0x41, 0x53, 0x45, 0x5f, + 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x12, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x52, 0x45, 0x46, + 0x49, 0x58, 0x10, 0x13, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, + 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x14, 0x12, 0x0f, + 0x0a, 0x0b, 0x47, 0x45, 0x4f, 0x5f, 0x50, 0x4f, 0x4c, 0x59, 0x47, 0x4f, 0x4e, 0x10, 0x15, 0x2a, + 0x3c, 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x4d, + 0x49, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0x01, 0x12, 0x0e, 0x0a, + 0x0a, 0x4d, 0x49, 0x44, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0e, 0x0a, + 0x0a, 0x4d, 0x49, 0x44, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x03, 0x42, 0x58, 0x0a, + 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x79, 0x65, 0x6c, 0x70, 0x2e, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x42, + 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x59, 0x65, 0x6c, 0x70, 0x2f, 0x6e, 0x72, 0x74, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0xa2, 0x02, 0x03, 0x48, 0x4c, 0x57, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8758,7 +8908,7 @@ func file_yelp_nrtsearch_search_proto_rawDescGZIP() []byte { } var file_yelp_nrtsearch_search_proto_enumTypes = make([]protoimpl.EnumInfo, 14) -var file_yelp_nrtsearch_search_proto_msgTypes = make([]protoimpl.MessageInfo, 97) +var file_yelp_nrtsearch_search_proto_msgTypes = make([]protoimpl.MessageInfo, 99) var file_yelp_nrtsearch_search_proto_goTypes = []interface{}{ (MatchOperator)(0), // 0: luceneserver.MatchOperator (RewriteMethod)(0), // 1: luceneserver.RewriteMethod @@ -8793,270 +8943,276 @@ var file_yelp_nrtsearch_search_proto_goTypes = []interface{}{ (*GeoBoundingBoxQuery)(nil), // 30: luceneserver.GeoBoundingBoxQuery (*GeoRadiusQuery)(nil), // 31: luceneserver.GeoRadiusQuery (*GeoPointQuery)(nil), // 32: luceneserver.GeoPointQuery - (*ExistsQuery)(nil), // 33: luceneserver.ExistsQuery - (*CompletionQuery)(nil), // 34: luceneserver.CompletionQuery - (*MultiFunctionScoreQuery)(nil), // 35: luceneserver.MultiFunctionScoreQuery - (*ConstantScoreQuery)(nil), // 36: luceneserver.ConstantScoreQuery - (*Query)(nil), // 37: luceneserver.Query - (*SearchRequest)(nil), // 38: luceneserver.SearchRequest - (*InnerHit)(nil), // 39: luceneserver.InnerHit - (*VirtualField)(nil), // 40: luceneserver.VirtualField - (*Script)(nil), // 41: luceneserver.Script - (*QuerySortField)(nil), // 42: luceneserver.QuerySortField - (*SortFields)(nil), // 43: luceneserver.SortFields - (*SortType)(nil), // 44: luceneserver.SortType - (*TotalHits)(nil), // 45: luceneserver.TotalHits - (*Point)(nil), // 46: luceneserver.Point - (*SearchResponse)(nil), // 47: luceneserver.SearchResponse - (*NumericRangeType)(nil), // 48: luceneserver.NumericRangeType - (*Facet)(nil), // 49: luceneserver.Facet - (*FacetResult)(nil), // 50: luceneserver.FacetResult - (*LabelAndValue)(nil), // 51: luceneserver.LabelAndValue - (*FetchTask)(nil), // 52: luceneserver.FetchTask - (*PluginRescorer)(nil), // 53: luceneserver.PluginRescorer - (*QueryRescorer)(nil), // 54: luceneserver.QueryRescorer - (*Rescorer)(nil), // 55: luceneserver.Rescorer - (*ProfileResult)(nil), // 56: luceneserver.ProfileResult - (*Collector)(nil), // 57: luceneserver.Collector - (*PluginCollector)(nil), // 58: luceneserver.PluginCollector - (*TermsCollector)(nil), // 59: luceneserver.TermsCollector - (*TopHitsCollector)(nil), // 60: luceneserver.TopHitsCollector - (*FilterCollector)(nil), // 61: luceneserver.FilterCollector - (*MaxCollector)(nil), // 62: luceneserver.MaxCollector - (*CollectorResult)(nil), // 63: luceneserver.CollectorResult - (*BucketOrder)(nil), // 64: luceneserver.BucketOrder - (*BucketResult)(nil), // 65: luceneserver.BucketResult - (*HitsResult)(nil), // 66: luceneserver.HitsResult - (*FilterResult)(nil), // 67: luceneserver.FilterResult - (*Highlight)(nil), // 68: luceneserver.Highlight - (*KnnQuery)(nil), // 69: luceneserver.KnnQuery - (*TermInSetQuery_TextTerms)(nil), // 70: luceneserver.TermInSetQuery.TextTerms - (*TermInSetQuery_IntTerms)(nil), // 71: luceneserver.TermInSetQuery.IntTerms - (*TermInSetQuery_LongTerms)(nil), // 72: luceneserver.TermInSetQuery.LongTerms - (*TermInSetQuery_FloatTerms)(nil), // 73: luceneserver.TermInSetQuery.FloatTerms - (*TermInSetQuery_DoubleTerms)(nil), // 74: luceneserver.TermInSetQuery.DoubleTerms - nil, // 75: luceneserver.MultiMatchQuery.FieldBoostsEntry - (*MultiFunctionScoreQuery_FilterFunction)(nil), // 76: luceneserver.MultiFunctionScoreQuery.FilterFunction - nil, // 77: luceneserver.SearchRequest.CollectorsEntry - nil, // 78: luceneserver.SearchRequest.InnerHitsEntry - (*Script_ParamValue)(nil), // 79: luceneserver.Script.ParamValue - (*Script_ParamStructValue)(nil), // 80: luceneserver.Script.ParamStructValue - (*Script_ParamListValue)(nil), // 81: luceneserver.Script.ParamListValue - nil, // 82: luceneserver.Script.ParamsEntry - nil, // 83: luceneserver.Script.ParamStructValue.FieldsEntry - (*SearchResponse_Diagnostics)(nil), // 84: luceneserver.SearchResponse.Diagnostics - (*SearchResponse_Hit)(nil), // 85: luceneserver.SearchResponse.Hit - (*SearchResponse_SearchState)(nil), // 86: luceneserver.SearchResponse.SearchState - nil, // 87: luceneserver.SearchResponse.CollectorResultsEntry - (*SearchResponse_Diagnostics_VectorDiagnostics)(nil), // 88: luceneserver.SearchResponse.Diagnostics.VectorDiagnostics - nil, // 89: luceneserver.SearchResponse.Diagnostics.FacetTimeMsEntry - nil, // 90: luceneserver.SearchResponse.Diagnostics.RescorersTimeMsEntry - nil, // 91: luceneserver.SearchResponse.Diagnostics.InnerHitsDiagnosticsEntry - (*SearchResponse_Hit_FieldValue)(nil), // 92: luceneserver.SearchResponse.Hit.FieldValue - (*SearchResponse_Hit_CompositeFieldValue)(nil), // 93: luceneserver.SearchResponse.Hit.CompositeFieldValue - (*SearchResponse_Hit_Highlights)(nil), // 94: luceneserver.SearchResponse.Hit.Highlights - nil, // 95: luceneserver.SearchResponse.Hit.FieldsEntry - nil, // 96: luceneserver.SearchResponse.Hit.SortedFieldsEntry - nil, // 97: luceneserver.SearchResponse.Hit.HighlightsEntry - nil, // 98: luceneserver.SearchResponse.Hit.InnerHitsEntry - (*SearchResponse_Hit_FieldValue_Vector)(nil), // 99: luceneserver.SearchResponse.Hit.FieldValue.Vector - (*ProfileResult_AdditionalCollectorStats)(nil), // 100: luceneserver.ProfileResult.AdditionalCollectorStats - (*ProfileResult_CollectorStats)(nil), // 101: luceneserver.ProfileResult.CollectorStats - (*ProfileResult_SegmentStats)(nil), // 102: luceneserver.ProfileResult.SegmentStats - (*ProfileResult_SearchStats)(nil), // 103: luceneserver.ProfileResult.SearchStats - nil, // 104: luceneserver.ProfileResult.CollectorStats.AdditionalCollectorStatsEntry - nil, // 105: luceneserver.Collector.NestedCollectorsEntry - (*BucketResult_Bucket)(nil), // 106: luceneserver.BucketResult.Bucket - nil, // 107: luceneserver.BucketResult.Bucket.NestedCollectorResultsEntry - nil, // 108: luceneserver.FilterResult.NestedCollectorResultsEntry - (*Highlight_Settings)(nil), // 109: luceneserver.Highlight.Settings - nil, // 110: luceneserver.Highlight.FieldSettingsEntry - (*Analyzer)(nil), // 111: luceneserver.Analyzer - (*latlng.LatLng)(nil), // 112: google.type.LatLng - (*structpb.Struct)(nil), // 113: google.protobuf.Struct - (*anypb.Any)(nil), // 114: google.protobuf.Any - (*wrapperspb.DoubleValue)(nil), // 115: google.protobuf.DoubleValue - (*wrapperspb.UInt32Value)(nil), // 116: google.protobuf.UInt32Value - (*wrapperspb.BoolValue)(nil), // 117: google.protobuf.BoolValue - (*wrapperspb.StringValue)(nil), // 118: google.protobuf.StringValue + (*Polygon)(nil), // 33: luceneserver.Polygon + (*GeoPolygonQuery)(nil), // 34: luceneserver.GeoPolygonQuery + (*ExistsQuery)(nil), // 35: luceneserver.ExistsQuery + (*CompletionQuery)(nil), // 36: luceneserver.CompletionQuery + (*MultiFunctionScoreQuery)(nil), // 37: luceneserver.MultiFunctionScoreQuery + (*ConstantScoreQuery)(nil), // 38: luceneserver.ConstantScoreQuery + (*Query)(nil), // 39: luceneserver.Query + (*SearchRequest)(nil), // 40: luceneserver.SearchRequest + (*InnerHit)(nil), // 41: luceneserver.InnerHit + (*VirtualField)(nil), // 42: luceneserver.VirtualField + (*Script)(nil), // 43: luceneserver.Script + (*QuerySortField)(nil), // 44: luceneserver.QuerySortField + (*SortFields)(nil), // 45: luceneserver.SortFields + (*SortType)(nil), // 46: luceneserver.SortType + (*TotalHits)(nil), // 47: luceneserver.TotalHits + (*Point)(nil), // 48: luceneserver.Point + (*SearchResponse)(nil), // 49: luceneserver.SearchResponse + (*NumericRangeType)(nil), // 50: luceneserver.NumericRangeType + (*Facet)(nil), // 51: luceneserver.Facet + (*FacetResult)(nil), // 52: luceneserver.FacetResult + (*LabelAndValue)(nil), // 53: luceneserver.LabelAndValue + (*FetchTask)(nil), // 54: luceneserver.FetchTask + (*PluginRescorer)(nil), // 55: luceneserver.PluginRescorer + (*QueryRescorer)(nil), // 56: luceneserver.QueryRescorer + (*Rescorer)(nil), // 57: luceneserver.Rescorer + (*ProfileResult)(nil), // 58: luceneserver.ProfileResult + (*Collector)(nil), // 59: luceneserver.Collector + (*PluginCollector)(nil), // 60: luceneserver.PluginCollector + (*TermsCollector)(nil), // 61: luceneserver.TermsCollector + (*TopHitsCollector)(nil), // 62: luceneserver.TopHitsCollector + (*FilterCollector)(nil), // 63: luceneserver.FilterCollector + (*MaxCollector)(nil), // 64: luceneserver.MaxCollector + (*CollectorResult)(nil), // 65: luceneserver.CollectorResult + (*BucketOrder)(nil), // 66: luceneserver.BucketOrder + (*BucketResult)(nil), // 67: luceneserver.BucketResult + (*HitsResult)(nil), // 68: luceneserver.HitsResult + (*FilterResult)(nil), // 69: luceneserver.FilterResult + (*Highlight)(nil), // 70: luceneserver.Highlight + (*KnnQuery)(nil), // 71: luceneserver.KnnQuery + (*TermInSetQuery_TextTerms)(nil), // 72: luceneserver.TermInSetQuery.TextTerms + (*TermInSetQuery_IntTerms)(nil), // 73: luceneserver.TermInSetQuery.IntTerms + (*TermInSetQuery_LongTerms)(nil), // 74: luceneserver.TermInSetQuery.LongTerms + (*TermInSetQuery_FloatTerms)(nil), // 75: luceneserver.TermInSetQuery.FloatTerms + (*TermInSetQuery_DoubleTerms)(nil), // 76: luceneserver.TermInSetQuery.DoubleTerms + nil, // 77: luceneserver.MultiMatchQuery.FieldBoostsEntry + (*MultiFunctionScoreQuery_FilterFunction)(nil), // 78: luceneserver.MultiFunctionScoreQuery.FilterFunction + nil, // 79: luceneserver.SearchRequest.CollectorsEntry + nil, // 80: luceneserver.SearchRequest.InnerHitsEntry + (*Script_ParamValue)(nil), // 81: luceneserver.Script.ParamValue + (*Script_ParamStructValue)(nil), // 82: luceneserver.Script.ParamStructValue + (*Script_ParamListValue)(nil), // 83: luceneserver.Script.ParamListValue + nil, // 84: luceneserver.Script.ParamsEntry + nil, // 85: luceneserver.Script.ParamStructValue.FieldsEntry + (*SearchResponse_Diagnostics)(nil), // 86: luceneserver.SearchResponse.Diagnostics + (*SearchResponse_Hit)(nil), // 87: luceneserver.SearchResponse.Hit + (*SearchResponse_SearchState)(nil), // 88: luceneserver.SearchResponse.SearchState + nil, // 89: luceneserver.SearchResponse.CollectorResultsEntry + (*SearchResponse_Diagnostics_VectorDiagnostics)(nil), // 90: luceneserver.SearchResponse.Diagnostics.VectorDiagnostics + nil, // 91: luceneserver.SearchResponse.Diagnostics.FacetTimeMsEntry + nil, // 92: luceneserver.SearchResponse.Diagnostics.RescorersTimeMsEntry + nil, // 93: luceneserver.SearchResponse.Diagnostics.InnerHitsDiagnosticsEntry + (*SearchResponse_Hit_FieldValue)(nil), // 94: luceneserver.SearchResponse.Hit.FieldValue + (*SearchResponse_Hit_CompositeFieldValue)(nil), // 95: luceneserver.SearchResponse.Hit.CompositeFieldValue + (*SearchResponse_Hit_Highlights)(nil), // 96: luceneserver.SearchResponse.Hit.Highlights + nil, // 97: luceneserver.SearchResponse.Hit.FieldsEntry + nil, // 98: luceneserver.SearchResponse.Hit.SortedFieldsEntry + nil, // 99: luceneserver.SearchResponse.Hit.HighlightsEntry + nil, // 100: luceneserver.SearchResponse.Hit.InnerHitsEntry + (*SearchResponse_Hit_FieldValue_Vector)(nil), // 101: luceneserver.SearchResponse.Hit.FieldValue.Vector + (*ProfileResult_AdditionalCollectorStats)(nil), // 102: luceneserver.ProfileResult.AdditionalCollectorStats + (*ProfileResult_CollectorStats)(nil), // 103: luceneserver.ProfileResult.CollectorStats + (*ProfileResult_SegmentStats)(nil), // 104: luceneserver.ProfileResult.SegmentStats + (*ProfileResult_SearchStats)(nil), // 105: luceneserver.ProfileResult.SearchStats + nil, // 106: luceneserver.ProfileResult.CollectorStats.AdditionalCollectorStatsEntry + nil, // 107: luceneserver.Collector.NestedCollectorsEntry + (*BucketResult_Bucket)(nil), // 108: luceneserver.BucketResult.Bucket + nil, // 109: luceneserver.BucketResult.Bucket.NestedCollectorResultsEntry + nil, // 110: luceneserver.FilterResult.NestedCollectorResultsEntry + (*Highlight_Settings)(nil), // 111: luceneserver.Highlight.Settings + nil, // 112: luceneserver.Highlight.FieldSettingsEntry + (*Analyzer)(nil), // 113: luceneserver.Analyzer + (*latlng.LatLng)(nil), // 114: google.type.LatLng + (*structpb.Struct)(nil), // 115: google.protobuf.Struct + (*anypb.Any)(nil), // 116: google.protobuf.Any + (*wrapperspb.DoubleValue)(nil), // 117: google.protobuf.DoubleValue + (*wrapperspb.UInt32Value)(nil), // 118: google.protobuf.UInt32Value + (*wrapperspb.BoolValue)(nil), // 119: google.protobuf.BoolValue + (*wrapperspb.StringValue)(nil), // 120: google.protobuf.StringValue } var file_yelp_nrtsearch_search_proto_depIdxs = []int32{ - 37, // 0: luceneserver.BooleanClause.query:type_name -> luceneserver.Query + 39, // 0: luceneserver.BooleanClause.query:type_name -> luceneserver.Query 5, // 1: luceneserver.BooleanClause.occur:type_name -> luceneserver.BooleanClause.Occur 14, // 2: luceneserver.BooleanQuery.clauses:type_name -> luceneserver.BooleanClause 1, // 3: luceneserver.PrefixQuery.rewrite:type_name -> luceneserver.RewriteMethod - 37, // 4: luceneserver.FunctionScoreQuery.query:type_name -> luceneserver.Query - 41, // 5: luceneserver.FunctionScoreQuery.script:type_name -> luceneserver.Script - 41, // 6: luceneserver.FunctionFilterQuery.script:type_name -> luceneserver.Script - 37, // 7: luceneserver.NestedQuery.query:type_name -> luceneserver.Query + 39, // 4: luceneserver.FunctionScoreQuery.query:type_name -> luceneserver.Query + 43, // 5: luceneserver.FunctionScoreQuery.script:type_name -> luceneserver.Script + 43, // 6: luceneserver.FunctionFilterQuery.script:type_name -> luceneserver.Script + 39, // 7: luceneserver.NestedQuery.query:type_name -> luceneserver.Query 6, // 8: luceneserver.NestedQuery.scoreMode:type_name -> luceneserver.NestedQuery.ScoreMode - 70, // 9: luceneserver.TermInSetQuery.textTerms:type_name -> luceneserver.TermInSetQuery.TextTerms - 71, // 10: luceneserver.TermInSetQuery.intTerms:type_name -> luceneserver.TermInSetQuery.IntTerms - 72, // 11: luceneserver.TermInSetQuery.longTerms:type_name -> luceneserver.TermInSetQuery.LongTerms - 73, // 12: luceneserver.TermInSetQuery.floatTerms:type_name -> luceneserver.TermInSetQuery.FloatTerms - 74, // 13: luceneserver.TermInSetQuery.doubleTerms:type_name -> luceneserver.TermInSetQuery.DoubleTerms - 37, // 14: luceneserver.DisjunctionMaxQuery.disjuncts:type_name -> luceneserver.Query + 72, // 9: luceneserver.TermInSetQuery.textTerms:type_name -> luceneserver.TermInSetQuery.TextTerms + 73, // 10: luceneserver.TermInSetQuery.intTerms:type_name -> luceneserver.TermInSetQuery.IntTerms + 74, // 11: luceneserver.TermInSetQuery.longTerms:type_name -> luceneserver.TermInSetQuery.LongTerms + 75, // 12: luceneserver.TermInSetQuery.floatTerms:type_name -> luceneserver.TermInSetQuery.FloatTerms + 76, // 13: luceneserver.TermInSetQuery.doubleTerms:type_name -> luceneserver.TermInSetQuery.DoubleTerms + 39, // 14: luceneserver.DisjunctionMaxQuery.disjuncts:type_name -> luceneserver.Query 0, // 15: luceneserver.MatchQuery.operator:type_name -> luceneserver.MatchOperator - 111, // 16: luceneserver.MatchQuery.analyzer:type_name -> luceneserver.Analyzer + 113, // 16: luceneserver.MatchQuery.analyzer:type_name -> luceneserver.Analyzer 15, // 17: luceneserver.MatchQuery.fuzzyParams:type_name -> luceneserver.FuzzyParams - 111, // 18: luceneserver.MatchPhraseQuery.analyzer:type_name -> luceneserver.Analyzer - 111, // 19: luceneserver.MatchPhrasePrefixQuery.analyzer:type_name -> luceneserver.Analyzer - 75, // 20: luceneserver.MultiMatchQuery.fieldBoosts:type_name -> luceneserver.MultiMatchQuery.FieldBoostsEntry + 113, // 18: luceneserver.MatchPhraseQuery.analyzer:type_name -> luceneserver.Analyzer + 113, // 19: luceneserver.MatchPhrasePrefixQuery.analyzer:type_name -> luceneserver.Analyzer + 77, // 20: luceneserver.MultiMatchQuery.fieldBoosts:type_name -> luceneserver.MultiMatchQuery.FieldBoostsEntry 0, // 21: luceneserver.MultiMatchQuery.operator:type_name -> luceneserver.MatchOperator - 111, // 22: luceneserver.MultiMatchQuery.analyzer:type_name -> luceneserver.Analyzer + 113, // 22: luceneserver.MultiMatchQuery.analyzer:type_name -> luceneserver.Analyzer 15, // 23: luceneserver.MultiMatchQuery.fuzzyParams:type_name -> luceneserver.FuzzyParams 7, // 24: luceneserver.MultiMatchQuery.type:type_name -> luceneserver.MultiMatchQuery.MatchType - 112, // 25: luceneserver.GeoBoundingBoxQuery.topLeft:type_name -> google.type.LatLng - 112, // 26: luceneserver.GeoBoundingBoxQuery.bottomRight:type_name -> google.type.LatLng - 112, // 27: luceneserver.GeoRadiusQuery.center:type_name -> google.type.LatLng - 112, // 28: luceneserver.GeoPointQuery.point:type_name -> google.type.LatLng - 2, // 29: luceneserver.CompletionQuery.queryType:type_name -> luceneserver.CompletionQueryType - 37, // 30: luceneserver.MultiFunctionScoreQuery.query:type_name -> luceneserver.Query - 76, // 31: luceneserver.MultiFunctionScoreQuery.functions:type_name -> luceneserver.MultiFunctionScoreQuery.FilterFunction - 8, // 32: luceneserver.MultiFunctionScoreQuery.score_mode:type_name -> luceneserver.MultiFunctionScoreQuery.FunctionScoreMode - 9, // 33: luceneserver.MultiFunctionScoreQuery.boost_mode:type_name -> luceneserver.MultiFunctionScoreQuery.BoostMode - 37, // 34: luceneserver.ConstantScoreQuery.filter:type_name -> luceneserver.Query - 3, // 35: luceneserver.Query.queryType:type_name -> luceneserver.QueryType - 16, // 36: luceneserver.Query.booleanQuery:type_name -> luceneserver.BooleanQuery - 17, // 37: luceneserver.Query.phraseQuery:type_name -> luceneserver.PhraseQuery - 19, // 38: luceneserver.Query.functionScoreQuery:type_name -> luceneserver.FunctionScoreQuery - 22, // 39: luceneserver.Query.termQuery:type_name -> luceneserver.TermQuery - 23, // 40: luceneserver.Query.termInSetQuery:type_name -> luceneserver.TermInSetQuery - 24, // 41: luceneserver.Query.disjunctionMaxQuery:type_name -> luceneserver.DisjunctionMaxQuery - 25, // 42: luceneserver.Query.matchQuery:type_name -> luceneserver.MatchQuery - 26, // 43: luceneserver.Query.matchPhraseQuery:type_name -> luceneserver.MatchPhraseQuery - 28, // 44: luceneserver.Query.multiMatchQuery:type_name -> luceneserver.MultiMatchQuery - 29, // 45: luceneserver.Query.rangeQuery:type_name -> luceneserver.RangeQuery - 30, // 46: luceneserver.Query.geoBoundingBoxQuery:type_name -> luceneserver.GeoBoundingBoxQuery - 32, // 47: luceneserver.Query.geoPointQuery:type_name -> luceneserver.GeoPointQuery - 21, // 48: luceneserver.Query.nestedQuery:type_name -> luceneserver.NestedQuery - 33, // 49: luceneserver.Query.existsQuery:type_name -> luceneserver.ExistsQuery - 31, // 50: luceneserver.Query.geoRadiusQuery:type_name -> luceneserver.GeoRadiusQuery - 20, // 51: luceneserver.Query.functionFilterQuery:type_name -> luceneserver.FunctionFilterQuery - 34, // 52: luceneserver.Query.completionQuery:type_name -> luceneserver.CompletionQuery - 35, // 53: luceneserver.Query.multiFunctionScoreQuery:type_name -> luceneserver.MultiFunctionScoreQuery - 27, // 54: luceneserver.Query.matchPhrasePrefixQuery:type_name -> luceneserver.MatchPhrasePrefixQuery - 18, // 55: luceneserver.Query.prefixQuery:type_name -> luceneserver.PrefixQuery - 36, // 56: luceneserver.Query.constantScoreQuery:type_name -> luceneserver.ConstantScoreQuery - 40, // 57: luceneserver.SearchRequest.virtualFields:type_name -> luceneserver.VirtualField - 37, // 58: luceneserver.SearchRequest.query:type_name -> luceneserver.Query - 42, // 59: luceneserver.SearchRequest.querySort:type_name -> luceneserver.QuerySortField - 49, // 60: luceneserver.SearchRequest.facets:type_name -> luceneserver.Facet - 52, // 61: luceneserver.SearchRequest.fetchTasks:type_name -> luceneserver.FetchTask - 55, // 62: luceneserver.SearchRequest.rescorers:type_name -> luceneserver.Rescorer - 77, // 63: luceneserver.SearchRequest.collectors:type_name -> luceneserver.SearchRequest.CollectorsEntry - 68, // 64: luceneserver.SearchRequest.highlight:type_name -> luceneserver.Highlight - 78, // 65: luceneserver.SearchRequest.inner_hits:type_name -> luceneserver.SearchRequest.InnerHitsEntry - 69, // 66: luceneserver.SearchRequest.knn:type_name -> luceneserver.KnnQuery - 37, // 67: luceneserver.InnerHit.inner_query:type_name -> luceneserver.Query - 42, // 68: luceneserver.InnerHit.query_sort:type_name -> luceneserver.QuerySortField - 68, // 69: luceneserver.InnerHit.highlight:type_name -> luceneserver.Highlight - 41, // 70: luceneserver.VirtualField.script:type_name -> luceneserver.Script - 82, // 71: luceneserver.Script.params:type_name -> luceneserver.Script.ParamsEntry - 43, // 72: luceneserver.QuerySortField.fields:type_name -> luceneserver.SortFields - 44, // 73: luceneserver.SortFields.sortedFields:type_name -> luceneserver.SortType - 4, // 74: luceneserver.SortType.selector:type_name -> luceneserver.Selector - 46, // 75: luceneserver.SortType.origin:type_name -> luceneserver.Point - 11, // 76: luceneserver.TotalHits.relation:type_name -> luceneserver.TotalHits.Relation - 84, // 77: luceneserver.SearchResponse.diagnostics:type_name -> luceneserver.SearchResponse.Diagnostics - 45, // 78: luceneserver.SearchResponse.totalHits:type_name -> luceneserver.TotalHits - 85, // 79: luceneserver.SearchResponse.hits:type_name -> luceneserver.SearchResponse.Hit - 86, // 80: luceneserver.SearchResponse.searchState:type_name -> luceneserver.SearchResponse.SearchState - 50, // 81: luceneserver.SearchResponse.facetResult:type_name -> luceneserver.FacetResult - 56, // 82: luceneserver.SearchResponse.profileResult:type_name -> luceneserver.ProfileResult - 87, // 83: luceneserver.SearchResponse.collectorResults:type_name -> luceneserver.SearchResponse.CollectorResultsEntry - 48, // 84: luceneserver.Facet.numericRange:type_name -> luceneserver.NumericRangeType - 41, // 85: luceneserver.Facet.script:type_name -> luceneserver.Script - 51, // 86: luceneserver.FacetResult.labelValues:type_name -> luceneserver.LabelAndValue - 113, // 87: luceneserver.FetchTask.params:type_name -> google.protobuf.Struct - 113, // 88: luceneserver.PluginRescorer.params:type_name -> google.protobuf.Struct - 37, // 89: luceneserver.QueryRescorer.rescoreQuery:type_name -> luceneserver.Query - 54, // 90: luceneserver.Rescorer.queryRescorer:type_name -> luceneserver.QueryRescorer - 53, // 91: luceneserver.Rescorer.pluginRescorer:type_name -> luceneserver.PluginRescorer - 103, // 92: luceneserver.ProfileResult.searchStats:type_name -> luceneserver.ProfileResult.SearchStats - 59, // 93: luceneserver.Collector.terms:type_name -> luceneserver.TermsCollector - 58, // 94: luceneserver.Collector.pluginCollector:type_name -> luceneserver.PluginCollector - 60, // 95: luceneserver.Collector.topHitsCollector:type_name -> luceneserver.TopHitsCollector - 61, // 96: luceneserver.Collector.filter:type_name -> luceneserver.FilterCollector - 62, // 97: luceneserver.Collector.max:type_name -> luceneserver.MaxCollector - 105, // 98: luceneserver.Collector.nestedCollectors:type_name -> luceneserver.Collector.NestedCollectorsEntry - 113, // 99: luceneserver.PluginCollector.params:type_name -> google.protobuf.Struct - 41, // 100: luceneserver.TermsCollector.script:type_name -> luceneserver.Script - 64, // 101: luceneserver.TermsCollector.order:type_name -> luceneserver.BucketOrder - 42, // 102: luceneserver.TopHitsCollector.querySort:type_name -> luceneserver.QuerySortField - 37, // 103: luceneserver.FilterCollector.query:type_name -> luceneserver.Query - 23, // 104: luceneserver.FilterCollector.setQuery:type_name -> luceneserver.TermInSetQuery - 41, // 105: luceneserver.MaxCollector.script:type_name -> luceneserver.Script - 65, // 106: luceneserver.CollectorResult.bucketResult:type_name -> luceneserver.BucketResult - 114, // 107: luceneserver.CollectorResult.anyResult:type_name -> google.protobuf.Any - 66, // 108: luceneserver.CollectorResult.hitsResult:type_name -> luceneserver.HitsResult - 67, // 109: luceneserver.CollectorResult.filterResult:type_name -> luceneserver.FilterResult - 115, // 110: luceneserver.CollectorResult.doubleResult:type_name -> google.protobuf.DoubleValue - 12, // 111: luceneserver.BucketOrder.order:type_name -> luceneserver.BucketOrder.OrderType - 106, // 112: luceneserver.BucketResult.buckets:type_name -> luceneserver.BucketResult.Bucket - 45, // 113: luceneserver.HitsResult.totalHits:type_name -> luceneserver.TotalHits - 85, // 114: luceneserver.HitsResult.hits:type_name -> luceneserver.SearchResponse.Hit - 108, // 115: luceneserver.FilterResult.nestedCollectorResults:type_name -> luceneserver.FilterResult.NestedCollectorResultsEntry - 109, // 116: luceneserver.Highlight.settings:type_name -> luceneserver.Highlight.Settings - 110, // 117: luceneserver.Highlight.field_settings:type_name -> luceneserver.Highlight.FieldSettingsEntry - 37, // 118: luceneserver.KnnQuery.filter:type_name -> luceneserver.Query - 37, // 119: luceneserver.MultiFunctionScoreQuery.FilterFunction.filter:type_name -> luceneserver.Query - 41, // 120: luceneserver.MultiFunctionScoreQuery.FilterFunction.script:type_name -> luceneserver.Script - 57, // 121: luceneserver.SearchRequest.CollectorsEntry.value:type_name -> luceneserver.Collector - 39, // 122: luceneserver.SearchRequest.InnerHitsEntry.value:type_name -> luceneserver.InnerHit - 10, // 123: luceneserver.Script.ParamValue.nullValue:type_name -> luceneserver.Script.ParamNullValue - 81, // 124: luceneserver.Script.ParamValue.listValue:type_name -> luceneserver.Script.ParamListValue - 80, // 125: luceneserver.Script.ParamValue.structValue:type_name -> luceneserver.Script.ParamStructValue - 83, // 126: luceneserver.Script.ParamStructValue.fields:type_name -> luceneserver.Script.ParamStructValue.FieldsEntry - 79, // 127: luceneserver.Script.ParamListValue.values:type_name -> luceneserver.Script.ParamValue - 79, // 128: luceneserver.Script.ParamsEntry.value:type_name -> luceneserver.Script.ParamValue - 79, // 129: luceneserver.Script.ParamStructValue.FieldsEntry.value:type_name -> luceneserver.Script.ParamValue - 89, // 130: luceneserver.SearchResponse.Diagnostics.facetTimeMs:type_name -> luceneserver.SearchResponse.Diagnostics.FacetTimeMsEntry - 90, // 131: luceneserver.SearchResponse.Diagnostics.rescorersTimeMs:type_name -> luceneserver.SearchResponse.Diagnostics.RescorersTimeMsEntry - 91, // 132: luceneserver.SearchResponse.Diagnostics.innerHitsDiagnostics:type_name -> luceneserver.SearchResponse.Diagnostics.InnerHitsDiagnosticsEntry - 88, // 133: luceneserver.SearchResponse.Diagnostics.vectorDiagnostics:type_name -> luceneserver.SearchResponse.Diagnostics.VectorDiagnostics - 95, // 134: luceneserver.SearchResponse.Hit.fields:type_name -> luceneserver.SearchResponse.Hit.FieldsEntry - 96, // 135: luceneserver.SearchResponse.Hit.sortedFields:type_name -> luceneserver.SearchResponse.Hit.SortedFieldsEntry - 97, // 136: luceneserver.SearchResponse.Hit.highlights:type_name -> luceneserver.SearchResponse.Hit.HighlightsEntry - 98, // 137: luceneserver.SearchResponse.Hit.innerHits:type_name -> luceneserver.SearchResponse.Hit.InnerHitsEntry - 63, // 138: luceneserver.SearchResponse.CollectorResultsEntry.value:type_name -> luceneserver.CollectorResult - 45, // 139: luceneserver.SearchResponse.Diagnostics.VectorDiagnostics.totalHits:type_name -> luceneserver.TotalHits - 84, // 140: luceneserver.SearchResponse.Diagnostics.InnerHitsDiagnosticsEntry.value:type_name -> luceneserver.SearchResponse.Diagnostics - 112, // 141: luceneserver.SearchResponse.Hit.FieldValue.latLngValue:type_name -> google.type.LatLng - 113, // 142: luceneserver.SearchResponse.Hit.FieldValue.structValue:type_name -> google.protobuf.Struct - 99, // 143: luceneserver.SearchResponse.Hit.FieldValue.vectorValue:type_name -> luceneserver.SearchResponse.Hit.FieldValue.Vector - 92, // 144: luceneserver.SearchResponse.Hit.CompositeFieldValue.fieldValue:type_name -> luceneserver.SearchResponse.Hit.FieldValue - 93, // 145: luceneserver.SearchResponse.Hit.FieldsEntry.value:type_name -> luceneserver.SearchResponse.Hit.CompositeFieldValue - 93, // 146: luceneserver.SearchResponse.Hit.SortedFieldsEntry.value:type_name -> luceneserver.SearchResponse.Hit.CompositeFieldValue - 94, // 147: luceneserver.SearchResponse.Hit.HighlightsEntry.value:type_name -> luceneserver.SearchResponse.Hit.Highlights - 66, // 148: luceneserver.SearchResponse.Hit.InnerHitsEntry.value:type_name -> luceneserver.HitsResult - 102, // 149: luceneserver.ProfileResult.CollectorStats.segmentStats:type_name -> luceneserver.ProfileResult.SegmentStats - 104, // 150: luceneserver.ProfileResult.CollectorStats.additionalCollectorStats:type_name -> luceneserver.ProfileResult.CollectorStats.AdditionalCollectorStatsEntry - 101, // 151: luceneserver.ProfileResult.SearchStats.collectorStats:type_name -> luceneserver.ProfileResult.CollectorStats - 100, // 152: luceneserver.ProfileResult.CollectorStats.AdditionalCollectorStatsEntry.value:type_name -> luceneserver.ProfileResult.AdditionalCollectorStats - 57, // 153: luceneserver.Collector.NestedCollectorsEntry.value:type_name -> luceneserver.Collector - 107, // 154: luceneserver.BucketResult.Bucket.nestedCollectorResults:type_name -> luceneserver.BucketResult.Bucket.NestedCollectorResultsEntry - 63, // 155: luceneserver.BucketResult.Bucket.NestedCollectorResultsEntry.value:type_name -> luceneserver.CollectorResult - 63, // 156: luceneserver.FilterResult.NestedCollectorResultsEntry.value:type_name -> luceneserver.CollectorResult - 13, // 157: luceneserver.Highlight.Settings.highlighter_type:type_name -> luceneserver.Highlight.Type - 116, // 158: luceneserver.Highlight.Settings.fragment_size:type_name -> google.protobuf.UInt32Value - 116, // 159: luceneserver.Highlight.Settings.max_number_of_fragments:type_name -> google.protobuf.UInt32Value - 37, // 160: luceneserver.Highlight.Settings.highlight_query:type_name -> luceneserver.Query - 117, // 161: luceneserver.Highlight.Settings.field_match:type_name -> google.protobuf.BoolValue - 117, // 162: luceneserver.Highlight.Settings.score_ordered:type_name -> google.protobuf.BoolValue - 118, // 163: luceneserver.Highlight.Settings.fragmenter:type_name -> google.protobuf.StringValue - 117, // 164: luceneserver.Highlight.Settings.discrete_multivalue:type_name -> google.protobuf.BoolValue - 113, // 165: luceneserver.Highlight.Settings.custom_highlighter_params:type_name -> google.protobuf.Struct - 118, // 166: luceneserver.Highlight.Settings.boundary_scanner:type_name -> google.protobuf.StringValue - 118, // 167: luceneserver.Highlight.Settings.boundary_chars:type_name -> google.protobuf.StringValue - 116, // 168: luceneserver.Highlight.Settings.boundary_max_scan:type_name -> google.protobuf.UInt32Value - 118, // 169: luceneserver.Highlight.Settings.boundary_scanner_locale:type_name -> google.protobuf.StringValue - 109, // 170: luceneserver.Highlight.FieldSettingsEntry.value:type_name -> luceneserver.Highlight.Settings - 171, // [171:171] is the sub-list for method output_type - 171, // [171:171] is the sub-list for method input_type - 171, // [171:171] is the sub-list for extension type_name - 171, // [171:171] is the sub-list for extension extendee - 0, // [0:171] is the sub-list for field type_name + 114, // 25: luceneserver.GeoBoundingBoxQuery.topLeft:type_name -> google.type.LatLng + 114, // 26: luceneserver.GeoBoundingBoxQuery.bottomRight:type_name -> google.type.LatLng + 114, // 27: luceneserver.GeoRadiusQuery.center:type_name -> google.type.LatLng + 114, // 28: luceneserver.GeoPointQuery.point:type_name -> google.type.LatLng + 114, // 29: luceneserver.Polygon.points:type_name -> google.type.LatLng + 33, // 30: luceneserver.Polygon.holes:type_name -> luceneserver.Polygon + 33, // 31: luceneserver.GeoPolygonQuery.polygons:type_name -> luceneserver.Polygon + 2, // 32: luceneserver.CompletionQuery.queryType:type_name -> luceneserver.CompletionQueryType + 39, // 33: luceneserver.MultiFunctionScoreQuery.query:type_name -> luceneserver.Query + 78, // 34: luceneserver.MultiFunctionScoreQuery.functions:type_name -> luceneserver.MultiFunctionScoreQuery.FilterFunction + 8, // 35: luceneserver.MultiFunctionScoreQuery.score_mode:type_name -> luceneserver.MultiFunctionScoreQuery.FunctionScoreMode + 9, // 36: luceneserver.MultiFunctionScoreQuery.boost_mode:type_name -> luceneserver.MultiFunctionScoreQuery.BoostMode + 39, // 37: luceneserver.ConstantScoreQuery.filter:type_name -> luceneserver.Query + 3, // 38: luceneserver.Query.queryType:type_name -> luceneserver.QueryType + 16, // 39: luceneserver.Query.booleanQuery:type_name -> luceneserver.BooleanQuery + 17, // 40: luceneserver.Query.phraseQuery:type_name -> luceneserver.PhraseQuery + 19, // 41: luceneserver.Query.functionScoreQuery:type_name -> luceneserver.FunctionScoreQuery + 22, // 42: luceneserver.Query.termQuery:type_name -> luceneserver.TermQuery + 23, // 43: luceneserver.Query.termInSetQuery:type_name -> luceneserver.TermInSetQuery + 24, // 44: luceneserver.Query.disjunctionMaxQuery:type_name -> luceneserver.DisjunctionMaxQuery + 25, // 45: luceneserver.Query.matchQuery:type_name -> luceneserver.MatchQuery + 26, // 46: luceneserver.Query.matchPhraseQuery:type_name -> luceneserver.MatchPhraseQuery + 28, // 47: luceneserver.Query.multiMatchQuery:type_name -> luceneserver.MultiMatchQuery + 29, // 48: luceneserver.Query.rangeQuery:type_name -> luceneserver.RangeQuery + 30, // 49: luceneserver.Query.geoBoundingBoxQuery:type_name -> luceneserver.GeoBoundingBoxQuery + 32, // 50: luceneserver.Query.geoPointQuery:type_name -> luceneserver.GeoPointQuery + 21, // 51: luceneserver.Query.nestedQuery:type_name -> luceneserver.NestedQuery + 35, // 52: luceneserver.Query.existsQuery:type_name -> luceneserver.ExistsQuery + 31, // 53: luceneserver.Query.geoRadiusQuery:type_name -> luceneserver.GeoRadiusQuery + 20, // 54: luceneserver.Query.functionFilterQuery:type_name -> luceneserver.FunctionFilterQuery + 36, // 55: luceneserver.Query.completionQuery:type_name -> luceneserver.CompletionQuery + 37, // 56: luceneserver.Query.multiFunctionScoreQuery:type_name -> luceneserver.MultiFunctionScoreQuery + 27, // 57: luceneserver.Query.matchPhrasePrefixQuery:type_name -> luceneserver.MatchPhrasePrefixQuery + 18, // 58: luceneserver.Query.prefixQuery:type_name -> luceneserver.PrefixQuery + 38, // 59: luceneserver.Query.constantScoreQuery:type_name -> luceneserver.ConstantScoreQuery + 34, // 60: luceneserver.Query.geoPolygonQuery:type_name -> luceneserver.GeoPolygonQuery + 42, // 61: luceneserver.SearchRequest.virtualFields:type_name -> luceneserver.VirtualField + 39, // 62: luceneserver.SearchRequest.query:type_name -> luceneserver.Query + 44, // 63: luceneserver.SearchRequest.querySort:type_name -> luceneserver.QuerySortField + 51, // 64: luceneserver.SearchRequest.facets:type_name -> luceneserver.Facet + 54, // 65: luceneserver.SearchRequest.fetchTasks:type_name -> luceneserver.FetchTask + 57, // 66: luceneserver.SearchRequest.rescorers:type_name -> luceneserver.Rescorer + 79, // 67: luceneserver.SearchRequest.collectors:type_name -> luceneserver.SearchRequest.CollectorsEntry + 70, // 68: luceneserver.SearchRequest.highlight:type_name -> luceneserver.Highlight + 80, // 69: luceneserver.SearchRequest.inner_hits:type_name -> luceneserver.SearchRequest.InnerHitsEntry + 71, // 70: luceneserver.SearchRequest.knn:type_name -> luceneserver.KnnQuery + 39, // 71: luceneserver.InnerHit.inner_query:type_name -> luceneserver.Query + 44, // 72: luceneserver.InnerHit.query_sort:type_name -> luceneserver.QuerySortField + 70, // 73: luceneserver.InnerHit.highlight:type_name -> luceneserver.Highlight + 43, // 74: luceneserver.VirtualField.script:type_name -> luceneserver.Script + 84, // 75: luceneserver.Script.params:type_name -> luceneserver.Script.ParamsEntry + 45, // 76: luceneserver.QuerySortField.fields:type_name -> luceneserver.SortFields + 46, // 77: luceneserver.SortFields.sortedFields:type_name -> luceneserver.SortType + 4, // 78: luceneserver.SortType.selector:type_name -> luceneserver.Selector + 48, // 79: luceneserver.SortType.origin:type_name -> luceneserver.Point + 11, // 80: luceneserver.TotalHits.relation:type_name -> luceneserver.TotalHits.Relation + 86, // 81: luceneserver.SearchResponse.diagnostics:type_name -> luceneserver.SearchResponse.Diagnostics + 47, // 82: luceneserver.SearchResponse.totalHits:type_name -> luceneserver.TotalHits + 87, // 83: luceneserver.SearchResponse.hits:type_name -> luceneserver.SearchResponse.Hit + 88, // 84: luceneserver.SearchResponse.searchState:type_name -> luceneserver.SearchResponse.SearchState + 52, // 85: luceneserver.SearchResponse.facetResult:type_name -> luceneserver.FacetResult + 58, // 86: luceneserver.SearchResponse.profileResult:type_name -> luceneserver.ProfileResult + 89, // 87: luceneserver.SearchResponse.collectorResults:type_name -> luceneserver.SearchResponse.CollectorResultsEntry + 50, // 88: luceneserver.Facet.numericRange:type_name -> luceneserver.NumericRangeType + 43, // 89: luceneserver.Facet.script:type_name -> luceneserver.Script + 53, // 90: luceneserver.FacetResult.labelValues:type_name -> luceneserver.LabelAndValue + 115, // 91: luceneserver.FetchTask.params:type_name -> google.protobuf.Struct + 115, // 92: luceneserver.PluginRescorer.params:type_name -> google.protobuf.Struct + 39, // 93: luceneserver.QueryRescorer.rescoreQuery:type_name -> luceneserver.Query + 56, // 94: luceneserver.Rescorer.queryRescorer:type_name -> luceneserver.QueryRescorer + 55, // 95: luceneserver.Rescorer.pluginRescorer:type_name -> luceneserver.PluginRescorer + 105, // 96: luceneserver.ProfileResult.searchStats:type_name -> luceneserver.ProfileResult.SearchStats + 61, // 97: luceneserver.Collector.terms:type_name -> luceneserver.TermsCollector + 60, // 98: luceneserver.Collector.pluginCollector:type_name -> luceneserver.PluginCollector + 62, // 99: luceneserver.Collector.topHitsCollector:type_name -> luceneserver.TopHitsCollector + 63, // 100: luceneserver.Collector.filter:type_name -> luceneserver.FilterCollector + 64, // 101: luceneserver.Collector.max:type_name -> luceneserver.MaxCollector + 107, // 102: luceneserver.Collector.nestedCollectors:type_name -> luceneserver.Collector.NestedCollectorsEntry + 115, // 103: luceneserver.PluginCollector.params:type_name -> google.protobuf.Struct + 43, // 104: luceneserver.TermsCollector.script:type_name -> luceneserver.Script + 66, // 105: luceneserver.TermsCollector.order:type_name -> luceneserver.BucketOrder + 44, // 106: luceneserver.TopHitsCollector.querySort:type_name -> luceneserver.QuerySortField + 39, // 107: luceneserver.FilterCollector.query:type_name -> luceneserver.Query + 23, // 108: luceneserver.FilterCollector.setQuery:type_name -> luceneserver.TermInSetQuery + 43, // 109: luceneserver.MaxCollector.script:type_name -> luceneserver.Script + 67, // 110: luceneserver.CollectorResult.bucketResult:type_name -> luceneserver.BucketResult + 116, // 111: luceneserver.CollectorResult.anyResult:type_name -> google.protobuf.Any + 68, // 112: luceneserver.CollectorResult.hitsResult:type_name -> luceneserver.HitsResult + 69, // 113: luceneserver.CollectorResult.filterResult:type_name -> luceneserver.FilterResult + 117, // 114: luceneserver.CollectorResult.doubleResult:type_name -> google.protobuf.DoubleValue + 12, // 115: luceneserver.BucketOrder.order:type_name -> luceneserver.BucketOrder.OrderType + 108, // 116: luceneserver.BucketResult.buckets:type_name -> luceneserver.BucketResult.Bucket + 47, // 117: luceneserver.HitsResult.totalHits:type_name -> luceneserver.TotalHits + 87, // 118: luceneserver.HitsResult.hits:type_name -> luceneserver.SearchResponse.Hit + 110, // 119: luceneserver.FilterResult.nestedCollectorResults:type_name -> luceneserver.FilterResult.NestedCollectorResultsEntry + 111, // 120: luceneserver.Highlight.settings:type_name -> luceneserver.Highlight.Settings + 112, // 121: luceneserver.Highlight.field_settings:type_name -> luceneserver.Highlight.FieldSettingsEntry + 39, // 122: luceneserver.KnnQuery.filter:type_name -> luceneserver.Query + 39, // 123: luceneserver.MultiFunctionScoreQuery.FilterFunction.filter:type_name -> luceneserver.Query + 43, // 124: luceneserver.MultiFunctionScoreQuery.FilterFunction.script:type_name -> luceneserver.Script + 59, // 125: luceneserver.SearchRequest.CollectorsEntry.value:type_name -> luceneserver.Collector + 41, // 126: luceneserver.SearchRequest.InnerHitsEntry.value:type_name -> luceneserver.InnerHit + 10, // 127: luceneserver.Script.ParamValue.nullValue:type_name -> luceneserver.Script.ParamNullValue + 83, // 128: luceneserver.Script.ParamValue.listValue:type_name -> luceneserver.Script.ParamListValue + 82, // 129: luceneserver.Script.ParamValue.structValue:type_name -> luceneserver.Script.ParamStructValue + 85, // 130: luceneserver.Script.ParamStructValue.fields:type_name -> luceneserver.Script.ParamStructValue.FieldsEntry + 81, // 131: luceneserver.Script.ParamListValue.values:type_name -> luceneserver.Script.ParamValue + 81, // 132: luceneserver.Script.ParamsEntry.value:type_name -> luceneserver.Script.ParamValue + 81, // 133: luceneserver.Script.ParamStructValue.FieldsEntry.value:type_name -> luceneserver.Script.ParamValue + 91, // 134: luceneserver.SearchResponse.Diagnostics.facetTimeMs:type_name -> luceneserver.SearchResponse.Diagnostics.FacetTimeMsEntry + 92, // 135: luceneserver.SearchResponse.Diagnostics.rescorersTimeMs:type_name -> luceneserver.SearchResponse.Diagnostics.RescorersTimeMsEntry + 93, // 136: luceneserver.SearchResponse.Diagnostics.innerHitsDiagnostics:type_name -> luceneserver.SearchResponse.Diagnostics.InnerHitsDiagnosticsEntry + 90, // 137: luceneserver.SearchResponse.Diagnostics.vectorDiagnostics:type_name -> luceneserver.SearchResponse.Diagnostics.VectorDiagnostics + 97, // 138: luceneserver.SearchResponse.Hit.fields:type_name -> luceneserver.SearchResponse.Hit.FieldsEntry + 98, // 139: luceneserver.SearchResponse.Hit.sortedFields:type_name -> luceneserver.SearchResponse.Hit.SortedFieldsEntry + 99, // 140: luceneserver.SearchResponse.Hit.highlights:type_name -> luceneserver.SearchResponse.Hit.HighlightsEntry + 100, // 141: luceneserver.SearchResponse.Hit.innerHits:type_name -> luceneserver.SearchResponse.Hit.InnerHitsEntry + 65, // 142: luceneserver.SearchResponse.CollectorResultsEntry.value:type_name -> luceneserver.CollectorResult + 47, // 143: luceneserver.SearchResponse.Diagnostics.VectorDiagnostics.totalHits:type_name -> luceneserver.TotalHits + 86, // 144: luceneserver.SearchResponse.Diagnostics.InnerHitsDiagnosticsEntry.value:type_name -> luceneserver.SearchResponse.Diagnostics + 114, // 145: luceneserver.SearchResponse.Hit.FieldValue.latLngValue:type_name -> google.type.LatLng + 115, // 146: luceneserver.SearchResponse.Hit.FieldValue.structValue:type_name -> google.protobuf.Struct + 101, // 147: luceneserver.SearchResponse.Hit.FieldValue.vectorValue:type_name -> luceneserver.SearchResponse.Hit.FieldValue.Vector + 94, // 148: luceneserver.SearchResponse.Hit.CompositeFieldValue.fieldValue:type_name -> luceneserver.SearchResponse.Hit.FieldValue + 95, // 149: luceneserver.SearchResponse.Hit.FieldsEntry.value:type_name -> luceneserver.SearchResponse.Hit.CompositeFieldValue + 95, // 150: luceneserver.SearchResponse.Hit.SortedFieldsEntry.value:type_name -> luceneserver.SearchResponse.Hit.CompositeFieldValue + 96, // 151: luceneserver.SearchResponse.Hit.HighlightsEntry.value:type_name -> luceneserver.SearchResponse.Hit.Highlights + 68, // 152: luceneserver.SearchResponse.Hit.InnerHitsEntry.value:type_name -> luceneserver.HitsResult + 104, // 153: luceneserver.ProfileResult.CollectorStats.segmentStats:type_name -> luceneserver.ProfileResult.SegmentStats + 106, // 154: luceneserver.ProfileResult.CollectorStats.additionalCollectorStats:type_name -> luceneserver.ProfileResult.CollectorStats.AdditionalCollectorStatsEntry + 103, // 155: luceneserver.ProfileResult.SearchStats.collectorStats:type_name -> luceneserver.ProfileResult.CollectorStats + 102, // 156: luceneserver.ProfileResult.CollectorStats.AdditionalCollectorStatsEntry.value:type_name -> luceneserver.ProfileResult.AdditionalCollectorStats + 59, // 157: luceneserver.Collector.NestedCollectorsEntry.value:type_name -> luceneserver.Collector + 109, // 158: luceneserver.BucketResult.Bucket.nestedCollectorResults:type_name -> luceneserver.BucketResult.Bucket.NestedCollectorResultsEntry + 65, // 159: luceneserver.BucketResult.Bucket.NestedCollectorResultsEntry.value:type_name -> luceneserver.CollectorResult + 65, // 160: luceneserver.FilterResult.NestedCollectorResultsEntry.value:type_name -> luceneserver.CollectorResult + 13, // 161: luceneserver.Highlight.Settings.highlighter_type:type_name -> luceneserver.Highlight.Type + 118, // 162: luceneserver.Highlight.Settings.fragment_size:type_name -> google.protobuf.UInt32Value + 118, // 163: luceneserver.Highlight.Settings.max_number_of_fragments:type_name -> google.protobuf.UInt32Value + 39, // 164: luceneserver.Highlight.Settings.highlight_query:type_name -> luceneserver.Query + 119, // 165: luceneserver.Highlight.Settings.field_match:type_name -> google.protobuf.BoolValue + 119, // 166: luceneserver.Highlight.Settings.score_ordered:type_name -> google.protobuf.BoolValue + 120, // 167: luceneserver.Highlight.Settings.fragmenter:type_name -> google.protobuf.StringValue + 119, // 168: luceneserver.Highlight.Settings.discrete_multivalue:type_name -> google.protobuf.BoolValue + 115, // 169: luceneserver.Highlight.Settings.custom_highlighter_params:type_name -> google.protobuf.Struct + 120, // 170: luceneserver.Highlight.Settings.boundary_scanner:type_name -> google.protobuf.StringValue + 120, // 171: luceneserver.Highlight.Settings.boundary_chars:type_name -> google.protobuf.StringValue + 118, // 172: luceneserver.Highlight.Settings.boundary_max_scan:type_name -> google.protobuf.UInt32Value + 120, // 173: luceneserver.Highlight.Settings.boundary_scanner_locale:type_name -> google.protobuf.StringValue + 111, // 174: luceneserver.Highlight.FieldSettingsEntry.value:type_name -> luceneserver.Highlight.Settings + 175, // [175:175] is the sub-list for method output_type + 175, // [175:175] is the sub-list for method input_type + 175, // [175:175] is the sub-list for extension type_name + 175, // [175:175] is the sub-list for extension extendee + 0, // [0:175] is the sub-list for field type_name } func init() { file_yelp_nrtsearch_search_proto_init() } @@ -9295,7 +9451,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExistsQuery); i { + switch v := v.(*Polygon); i { case 0: return &v.state case 1: @@ -9307,7 +9463,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompletionQuery); i { + switch v := v.(*GeoPolygonQuery); i { case 0: return &v.state case 1: @@ -9319,7 +9475,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiFunctionScoreQuery); i { + switch v := v.(*ExistsQuery); i { case 0: return &v.state case 1: @@ -9331,7 +9487,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConstantScoreQuery); i { + switch v := v.(*CompletionQuery); i { case 0: return &v.state case 1: @@ -9343,7 +9499,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Query); i { + switch v := v.(*MultiFunctionScoreQuery); i { case 0: return &v.state case 1: @@ -9355,7 +9511,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SearchRequest); i { + switch v := v.(*ConstantScoreQuery); i { case 0: return &v.state case 1: @@ -9367,7 +9523,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InnerHit); i { + switch v := v.(*Query); i { case 0: return &v.state case 1: @@ -9379,7 +9535,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualField); i { + switch v := v.(*SearchRequest); i { case 0: return &v.state case 1: @@ -9391,7 +9547,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Script); i { + switch v := v.(*InnerHit); i { case 0: return &v.state case 1: @@ -9403,7 +9559,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QuerySortField); i { + switch v := v.(*VirtualField); i { case 0: return &v.state case 1: @@ -9415,7 +9571,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SortFields); i { + switch v := v.(*Script); i { case 0: return &v.state case 1: @@ -9427,7 +9583,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SortType); i { + switch v := v.(*QuerySortField); i { case 0: return &v.state case 1: @@ -9439,7 +9595,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TotalHits); i { + switch v := v.(*SortFields); i { case 0: return &v.state case 1: @@ -9451,7 +9607,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Point); i { + switch v := v.(*SortType); i { case 0: return &v.state case 1: @@ -9463,7 +9619,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SearchResponse); i { + switch v := v.(*TotalHits); i { case 0: return &v.state case 1: @@ -9475,7 +9631,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NumericRangeType); i { + switch v := v.(*Point); i { case 0: return &v.state case 1: @@ -9487,7 +9643,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Facet); i { + switch v := v.(*SearchResponse); i { case 0: return &v.state case 1: @@ -9499,7 +9655,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FacetResult); i { + switch v := v.(*NumericRangeType); i { case 0: return &v.state case 1: @@ -9511,7 +9667,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LabelAndValue); i { + switch v := v.(*Facet); i { case 0: return &v.state case 1: @@ -9523,7 +9679,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchTask); i { + switch v := v.(*FacetResult); i { case 0: return &v.state case 1: @@ -9535,7 +9691,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PluginRescorer); i { + switch v := v.(*LabelAndValue); i { case 0: return &v.state case 1: @@ -9547,7 +9703,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryRescorer); i { + switch v := v.(*FetchTask); i { case 0: return &v.state case 1: @@ -9559,7 +9715,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Rescorer); i { + switch v := v.(*PluginRescorer); i { case 0: return &v.state case 1: @@ -9571,7 +9727,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfileResult); i { + switch v := v.(*QueryRescorer); i { case 0: return &v.state case 1: @@ -9583,7 +9739,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Collector); i { + switch v := v.(*Rescorer); i { case 0: return &v.state case 1: @@ -9595,7 +9751,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PluginCollector); i { + switch v := v.(*ProfileResult); i { case 0: return &v.state case 1: @@ -9607,7 +9763,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TermsCollector); i { + switch v := v.(*Collector); i { case 0: return &v.state case 1: @@ -9619,7 +9775,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TopHitsCollector); i { + switch v := v.(*PluginCollector); i { case 0: return &v.state case 1: @@ -9631,7 +9787,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterCollector); i { + switch v := v.(*TermsCollector); i { case 0: return &v.state case 1: @@ -9643,7 +9799,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MaxCollector); i { + switch v := v.(*TopHitsCollector); i { case 0: return &v.state case 1: @@ -9655,7 +9811,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CollectorResult); i { + switch v := v.(*FilterCollector); i { case 0: return &v.state case 1: @@ -9667,7 +9823,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BucketOrder); i { + switch v := v.(*MaxCollector); i { case 0: return &v.state case 1: @@ -9679,7 +9835,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BucketResult); i { + switch v := v.(*CollectorResult); i { case 0: return &v.state case 1: @@ -9691,7 +9847,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HitsResult); i { + switch v := v.(*BucketOrder); i { case 0: return &v.state case 1: @@ -9703,7 +9859,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterResult); i { + switch v := v.(*BucketResult); i { case 0: return &v.state case 1: @@ -9715,7 +9871,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Highlight); i { + switch v := v.(*HitsResult); i { case 0: return &v.state case 1: @@ -9727,7 +9883,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KnnQuery); i { + switch v := v.(*FilterResult); i { case 0: return &v.state case 1: @@ -9739,7 +9895,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TermInSetQuery_TextTerms); i { + switch v := v.(*Highlight); i { case 0: return &v.state case 1: @@ -9751,7 +9907,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TermInSetQuery_IntTerms); i { + switch v := v.(*KnnQuery); i { case 0: return &v.state case 1: @@ -9763,7 +9919,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TermInSetQuery_LongTerms); i { + switch v := v.(*TermInSetQuery_TextTerms); i { case 0: return &v.state case 1: @@ -9775,7 +9931,7 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TermInSetQuery_FloatTerms); i { + switch v := v.(*TermInSetQuery_IntTerms); i { case 0: return &v.state case 1: @@ -9787,7 +9943,19 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TermInSetQuery_DoubleTerms); i { + switch v := v.(*TermInSetQuery_LongTerms); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_yelp_nrtsearch_search_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TermInSetQuery_FloatTerms); i { case 0: return &v.state case 1: @@ -9799,6 +9967,18 @@ func file_yelp_nrtsearch_search_proto_init() { } } file_yelp_nrtsearch_search_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TermInSetQuery_DoubleTerms); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_yelp_nrtsearch_search_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MultiFunctionScoreQuery_FilterFunction); i { case 0: return &v.state @@ -9810,7 +9990,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Script_ParamValue); i { case 0: return &v.state @@ -9822,7 +10002,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Script_ParamStructValue); i { case 0: return &v.state @@ -9834,7 +10014,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Script_ParamListValue); i { case 0: return &v.state @@ -9846,7 +10026,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Diagnostics); i { case 0: return &v.state @@ -9858,7 +10038,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Hit); i { case 0: return &v.state @@ -9870,7 +10050,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_SearchState); i { case 0: return &v.state @@ -9882,7 +10062,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Diagnostics_VectorDiagnostics); i { case 0: return &v.state @@ -9894,7 +10074,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Hit_FieldValue); i { case 0: return &v.state @@ -9906,7 +10086,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Hit_CompositeFieldValue); i { case 0: return &v.state @@ -9918,7 +10098,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Hit_Highlights); i { case 0: return &v.state @@ -9930,7 +10110,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SearchResponse_Hit_FieldValue_Vector); i { case 0: return &v.state @@ -9942,7 +10122,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProfileResult_AdditionalCollectorStats); i { case 0: return &v.state @@ -9954,7 +10134,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProfileResult_CollectorStats); i { case 0: return &v.state @@ -9966,7 +10146,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProfileResult_SegmentStats); i { case 0: return &v.state @@ -9978,7 +10158,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProfileResult_SearchStats); i { case 0: return &v.state @@ -9990,7 +10170,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BucketResult_Bucket); i { case 0: return &v.state @@ -10002,7 +10182,7 @@ func file_yelp_nrtsearch_search_proto_init() { return nil } } - file_yelp_nrtsearch_search_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_yelp_nrtsearch_search_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Highlight_Settings); i { case 0: return &v.state @@ -10030,7 +10210,7 @@ func file_yelp_nrtsearch_search_proto_init() { (*TermInSetQuery_FloatTerms_)(nil), (*TermInSetQuery_DoubleTerms_)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[23].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[25].OneofWrappers = []interface{}{ (*Query_BooleanQuery)(nil), (*Query_PhraseQuery)(nil), (*Query_FunctionScoreQuery)(nil), @@ -10052,45 +10232,46 @@ func file_yelp_nrtsearch_search_proto_init() { (*Query_MatchPhrasePrefixQuery)(nil), (*Query_PrefixQuery)(nil), (*Query_ConstantScoreQuery)(nil), + (*Query_GeoPolygonQuery)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[24].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[26].OneofWrappers = []interface{}{ (*SearchRequest_IndexGen)(nil), (*SearchRequest_Version)(nil), (*SearchRequest_Snapshot)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[41].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[43].OneofWrappers = []interface{}{ (*Rescorer_QueryRescorer)(nil), (*Rescorer_PluginRescorer)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[43].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[45].OneofWrappers = []interface{}{ (*Collector_Terms)(nil), (*Collector_PluginCollector)(nil), (*Collector_TopHitsCollector)(nil), (*Collector_Filter)(nil), (*Collector_Max)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[45].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[47].OneofWrappers = []interface{}{ (*TermsCollector_Field)(nil), (*TermsCollector_Script)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[47].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[49].OneofWrappers = []interface{}{ (*FilterCollector_Query)(nil), (*FilterCollector_SetQuery)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[48].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[50].OneofWrappers = []interface{}{ (*MaxCollector_Script)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[49].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[51].OneofWrappers = []interface{}{ (*CollectorResult_BucketResult)(nil), (*CollectorResult_AnyResult)(nil), (*CollectorResult_HitsResult)(nil), (*CollectorResult_FilterResult)(nil), (*CollectorResult_DoubleResult)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[62].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[64].OneofWrappers = []interface{}{ (*MultiFunctionScoreQuery_FilterFunction_Script)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[65].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[67].OneofWrappers = []interface{}{ (*Script_ParamValue_TextValue)(nil), (*Script_ParamValue_BooleanValue)(nil), (*Script_ParamValue_IntValue)(nil), @@ -10101,7 +10282,7 @@ func file_yelp_nrtsearch_search_proto_init() { (*Script_ParamValue_ListValue)(nil), (*Script_ParamValue_StructValue)(nil), } - file_yelp_nrtsearch_search_proto_msgTypes[78].OneofWrappers = []interface{}{ + file_yelp_nrtsearch_search_proto_msgTypes[80].OneofWrappers = []interface{}{ (*SearchResponse_Hit_FieldValue_TextValue)(nil), (*SearchResponse_Hit_FieldValue_BooleanValue)(nil), (*SearchResponse_Hit_FieldValue_IntValue)(nil), @@ -10118,7 +10299,7 @@ func file_yelp_nrtsearch_search_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_yelp_nrtsearch_search_proto_rawDesc, NumEnums: 14, - NumMessages: 97, + NumMessages: 99, NumExtensions: 0, NumServices: 0, }, diff --git a/src/main/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2Command.java b/src/main/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2Command.java index 27325020f..dbeef4338 100644 --- a/src/main/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2Command.java +++ b/src/main/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2Command.java @@ -15,6 +15,7 @@ */ package com.yelp.nrtsearch.server.cli; +import com.google.protobuf.BoolValue; import com.google.protobuf.DoubleValue; import com.google.protobuf.Int32Value; import com.google.protobuf.UInt64Value; @@ -110,6 +111,18 @@ public class LiveSettingsV2Command implements Callable { description = "Maximum time allowed for merge precopy in seconds") private Long maxMergePreCopyDurationSec; + @CommandLine.Option( + names = {"--verboseMetrics"}, + description = + "If additional index metrics should be collected and published, must be 'true' or 'false'") + private String verboseMetrics; + + @CommandLine.Option( + names = {"--local"}, + description = + "Applies changes ephemerally to local node only. Response contains local settings only when this flag is used.") + private boolean local; + @Override public Integer call() throws Exception { LuceneServerClient client = baseCmd.getClient(); @@ -172,15 +185,31 @@ public Integer call() throws Exception { liveSettingsBuilder.setMaxMergePreCopyDurationSec( UInt64Value.newBuilder().setValue(maxMergePreCopyDurationSec)); } + if (verboseMetrics != null) { + liveSettingsBuilder.setVerboseMetrics( + BoolValue.newBuilder().setValue(parseBoolean(verboseMetrics)).build()); + } IndexLiveSettings indexLiveSettings = liveSettingsBuilder.build(); if (!indexLiveSettings.getAllFields().isEmpty()) { settingsRequestV2Builder.setLiveSettings(indexLiveSettings); } + settingsRequestV2Builder.setLocal(local); client.liveSettingsV2(settingsRequestV2Builder.build()); } finally { client.shutdown(); } return 0; } + + private Boolean parseBoolean(String booleanStr) { + String lowerCaseStr = booleanStr.toLowerCase(); + if ("true".equals(lowerCaseStr)) { + return Boolean.TRUE; + } else if ("false".equals(lowerCaseStr)) { + return Boolean.FALSE; + } else { + throw new IllegalArgumentException("Invalid boolean string: " + booleanStr); + } + } } diff --git a/src/main/java/com/yelp/nrtsearch/server/config/LuceneServerConfiguration.java b/src/main/java/com/yelp/nrtsearch/server/config/LuceneServerConfiguration.java index 8b4c5adf4..aad5168d0 100644 --- a/src/main/java/com/yelp/nrtsearch/server/config/LuceneServerConfiguration.java +++ b/src/main/java/com/yelp/nrtsearch/server/config/LuceneServerConfiguration.java @@ -16,14 +16,20 @@ package com.yelp.nrtsearch.server.config; import com.google.inject.Inject; +import com.google.protobuf.util.JsonFormat; +import com.yelp.nrtsearch.server.grpc.IndexLiveSettings; import com.yelp.nrtsearch.server.grpc.ReplicationServerClient; import com.yelp.nrtsearch.server.luceneserver.warming.WarmerConfig; +import com.yelp.nrtsearch.server.utils.JsonUtils; +import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; @@ -99,6 +105,7 @@ public class LuceneServerConfiguration { private final int discoveryFileUpdateIntervalMs; private final FSTLoadMode completionCodecLoadMode; private final boolean filterIncompatibleSegmentReaders; + private final Map indexLiveSettingsOverrides; private final YamlConfigReader configReader; private final long maxConnectionAgeForReplication; @@ -177,6 +184,27 @@ public LuceneServerConfiguration(InputStream yamlStream) { configReader.getBoolean("filterIncompatibleSegmentReaders", false); savePluginBeforeUnzip = configReader.getBoolean("savePluginBeforeUnzip", false); enableGlobalBucketAccess = configReader.getBoolean("enableGlobalBucketAccess", false); + + List indicesWithOverrides = configReader.getKeysOrEmpty("indexLiveSettingsOverrides"); + Map liveSettingsMap = new HashMap<>(); + for (String index : indicesWithOverrides) { + IndexLiveSettings liveSettings = + configReader.get( + "indexLiveSettingsOverrides." + index, + obj -> { + try { + String jsonStr = JsonUtils.objectToJsonStr(obj); + IndexLiveSettings.Builder liveSettingsBuilder = IndexLiveSettings.newBuilder(); + JsonFormat.parser().ignoringUnknownFields().merge(jsonStr, liveSettingsBuilder); + return liveSettingsBuilder.build(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }, + IndexLiveSettings.newBuilder().build()); + liveSettingsMap.put(index, liveSettings); + } + indexLiveSettingsOverrides = Collections.unmodifiableMap(liveSettingsMap); } public ThreadPoolConfiguration getThreadPoolConfiguration() { @@ -344,6 +372,11 @@ public boolean getEnableGlobalBucketAccess() { return enableGlobalBucketAccess; } + public IndexLiveSettings getLiveSettingsOverride(String indexName) { + return indexLiveSettingsOverrides.getOrDefault( + indexName, IndexLiveSettings.newBuilder().build()); + } + /** * Substitute all sub strings of the form ${FOO} with the environment variable value env[FOO]. * Variable names may only contain letters, numbers, and underscores. If a variable is not present diff --git a/src/main/java/com/yelp/nrtsearch/server/grpc/DeadlineUtils.java b/src/main/java/com/yelp/nrtsearch/server/grpc/DeadlineUtils.java index ce8d22072..2c1caa2cc 100644 --- a/src/main/java/com/yelp/nrtsearch/server/grpc/DeadlineUtils.java +++ b/src/main/java/com/yelp/nrtsearch/server/grpc/DeadlineUtils.java @@ -15,6 +15,7 @@ */ package com.yelp.nrtsearch.server.grpc; +import com.yelp.nrtsearch.server.grpc.SearchResponse.Diagnostics; import com.yelp.nrtsearch.server.monitoring.DeadlineMetrics; import io.grpc.Context; import io.grpc.Deadline; @@ -54,4 +55,21 @@ public static void checkDeadline(String message, String operation) { } } } + + public static void checkDeadline( + String message, Diagnostics.Builder diagnostics, String operation) { + if (cancellationEnabled) { + Deadline deadline = Context.current().getDeadline(); + if (deadline != null && deadline.isExpired()) { + DeadlineMetrics.nrtDeadlineCancelCount.labels(operation).inc(); + throw Status.CANCELLED + .withDescription( + "Request deadline exceeded: " + + message + + ", Search Diagnostics: " + + diagnostics.toString()) + .asRuntimeException(); + } + } + } } diff --git a/src/main/java/com/yelp/nrtsearch/server/grpc/LuceneServer.java b/src/main/java/com/yelp/nrtsearch/server/grpc/LuceneServer.java index 6e223c93a..f1a7e84fd 100644 --- a/src/main/java/com/yelp/nrtsearch/server/grpc/LuceneServer.java +++ b/src/main/java/com/yelp/nrtsearch/server/grpc/LuceneServer.java @@ -233,6 +233,8 @@ private void registerMetrics(GlobalState globalState) { // register directory size metrics new DirSizeCollector(globalState).register(collectorRegistry); new ProcStatCollector().register(collectorRegistry); + new MergeSchedulerCollector(globalState).register(collectorRegistry); + new VerboseIndexCollector(globalState).register(collectorRegistry); } /** Main launches the server from the command line. */ @@ -783,10 +785,13 @@ public void onNext(AddDocumentRequest addDocumentRequest) { "indexing addDocumentRequestQueue size: %s, total: %s", addDocumentRequestQueue.size(), getCount(indexName))); try { + DeadlineUtils.checkDeadline("addDocuments: onNext", "INDEXING"); + List addDocRequestList = new ArrayList<>(addDocumentRequestQueue); Future future = globalState.submitIndexingTask( - new DocumentIndexer(globalState, addDocRequestList, indexName)); + Context.current() + .wrap(new DocumentIndexer(globalState, addDocRequestList, indexName))); futures.put(indexName, future); } catch (Exception e) { responseObserver.onError(e); @@ -810,6 +815,8 @@ private String onCompletedForIndex(String indexName) { "onCompleted, addDocumentRequestQueue: %s", addDocumentRequestQueue.size())); long highestGen = -1; try { + DeadlineUtils.checkDeadline("addDocuments: onCompletedForIndex", "INDEXING"); + // index the left over docs if (!addDocumentRequestQueue.isEmpty()) { logger.debug( @@ -863,24 +870,26 @@ private String onCompletedForIndex(String indexName) { public void onCompleted() { try { globalState.submitIndexingTask( - () -> { - try { - // TODO: this should return a map on index to genId in the response - String genId = "-1"; - for (String indexName : addDocumentRequestQueueMap.keySet()) { - genId = onCompletedForIndex(indexName); - } - responseObserver.onNext( - AddDocumentResponse.newBuilder() - .setGenId(genId) - .setPrimaryId(globalState.getEphemeralId()) - .build()); - responseObserver.onCompleted(); - } catch (Throwable t) { - responseObserver.onError(t); - } - return null; - }); + Context.current() + .wrap( + () -> { + try { + // TODO: this should return a map on index to genId in the response + String genId = "-1"; + for (String indexName : addDocumentRequestQueueMap.keySet()) { + genId = onCompletedForIndex(indexName); + } + responseObserver.onNext( + AddDocumentResponse.newBuilder() + .setGenId(genId) + .setPrimaryId(globalState.getEphemeralId()) + .build()); + responseObserver.onCompleted(); + } catch (Throwable t) { + responseObserver.onError(t); + } + return null; + })); } catch (RejectedExecutionException e) { logger.error("Threadpool is full, unable to submit indexing completion job"); responseObserver.onError( diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/AddDocumentHandler.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/AddDocumentHandler.java index 2c3adb74d..acca7c168 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/AddDocumentHandler.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/AddDocumentHandler.java @@ -17,6 +17,7 @@ import com.google.protobuf.ProtocolStringList; import com.yelp.nrtsearch.server.grpc.AddDocumentRequest; +import com.yelp.nrtsearch.server.grpc.DeadlineUtils; import com.yelp.nrtsearch.server.grpc.FacetHierarchyPath; import com.yelp.nrtsearch.server.luceneserver.field.FieldDef; import com.yelp.nrtsearch.server.luceneserver.field.IdFieldDef; @@ -181,6 +182,8 @@ public DocumentIndexer( } public long runIndexingJob() throws Exception { + DeadlineUtils.checkDeadline("DocumentIndexer: runIndexingJob", "INDEXING"); + logger.debug( String.format( "running indexing job on threadId: %s", diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/IndexState.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/IndexState.java index d72c16981..089394545 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/IndexState.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/IndexState.java @@ -480,6 +480,9 @@ public abstract IndexWriterConfig getIndexWriterConfig( public abstract Map getSuggesters(); + /** Get if additional index metrics should be collected and published. */ + public abstract boolean getVerboseMetrics(); + @Override public void close() throws IOException {} diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/LiveSettingsHandler.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/LiveSettingsHandler.java index e55ab6693..014a9ebbb 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/LiveSettingsHandler.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/LiveSettingsHandler.java @@ -120,7 +120,7 @@ private LiveSettingsResponse handleAsLiveSettingsV2( .build()); } try { - updatedSettings = indexStateManager.updateLiveSettings(settingsBuilder.build()); + updatedSettings = indexStateManager.updateLiveSettings(settingsBuilder.build(), false); } catch (IOException e) { throw new RuntimeException("Unable to update index live settings", e); } diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcher.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcher.java index 8604e3f0e..a73e2a37c 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcher.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcher.java @@ -15,6 +15,8 @@ */ package com.yelp.nrtsearch.server.luceneserver; +import static org.apache.lucene.facet.DrillSidewaysQueryCheck.isDrillSidewaysQuery; + import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -239,8 +241,7 @@ public static LeafSlice[] slices( protected void search(List leaves, Weight weight, Collector collector) throws IOException { boolean isDrillSidewaysQueryOrCompletionQuery = - weight.getQuery() instanceof CompletionQuery - || weight.getQuery().toString().contains("DrillSidewaysQuery"); + weight.getQuery() instanceof CompletionQuery || isDrillSidewaysQuery(weight.getQuery()); for (LeafReaderContext ctx : leaves) { // search each subreader // we force the use of Scorer (not BulkScorer) to make sure // that the scorer passed to LeafCollector.setScorer supports diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/NRTPrimaryNode.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/NRTPrimaryNode.java index e880f5f0f..e0ed5ab3e 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/NRTPrimaryNode.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/NRTPrimaryNode.java @@ -268,6 +268,8 @@ protected void preCopyMergedSegmentFiles( return; } + NrtMetrics.nrtMergeCopyStartCount.labels(indexName).inc(); + long maxMergePreCopyDurationSec = getCurrentMaxMergePreCopyDurationSec(); Deadline deadline; if (maxMergePreCopyDurationSec > 0) { @@ -354,6 +356,7 @@ protected void preCopyMergedSegmentFiles( NrtMetrics.nrtPrimaryMergeTime .labels(indexName) .observe((System.nanoTime() - mergeStartNS) / 1000000.0); + NrtMetrics.nrtMergeCopyEndCount.labels(indexName).inc(); } } diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/QueryNodeMapper.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/QueryNodeMapper.java index 49f93d423..470ee7f81 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/QueryNodeMapper.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/QueryNodeMapper.java @@ -21,6 +21,7 @@ import com.yelp.nrtsearch.server.grpc.FunctionFilterQuery; import com.yelp.nrtsearch.server.grpc.GeoBoundingBoxQuery; import com.yelp.nrtsearch.server.grpc.GeoPointQuery; +import com.yelp.nrtsearch.server.grpc.GeoPolygonQuery; import com.yelp.nrtsearch.server.grpc.GeoRadiusQuery; import com.yelp.nrtsearch.server.grpc.MatchOperator; import com.yelp.nrtsearch.server.grpc.MatchPhraseQuery; @@ -169,6 +170,8 @@ private Query getQueryNode(com.yelp.nrtsearch.server.grpc.Query query, IndexStat return getPrefixQuery(query.getPrefixQuery(), state); case CONSTANTSCOREQUERY: return getConstantScoreQuery(query.getConstantScoreQuery(), state); + case GEOPOLYGONQUERY: + return getGeoPolygonQuery(query.getGeoPolygonQuery(), state); case QUERYNODE_NOT_SET: return new MatchAllDocsQuery(); default: @@ -541,6 +544,17 @@ private Query getGeoPointQuery(GeoPointQuery geoPolygonQuery, IndexState state) return ((PolygonQueryable) field).getGeoPointQuery(geoPolygonQuery); } + private Query getGeoPolygonQuery(GeoPolygonQuery geoPolygonQuery, IndexState state) { + String fieldName = geoPolygonQuery.getField(); + FieldDef field = state.getField(fieldName); + + if (!(field instanceof GeoQueryable)) { + throw new IllegalArgumentException( + "Field " + fieldName + " does not support GeoPolygonQuery"); + } + return ((GeoQueryable) field).getGeoPolygonQuery(geoPolygonQuery); + } + private Map initializeOccurMapping() { return Arrays.stream(com.yelp.nrtsearch.server.grpc.BooleanClause.Occur.values()) diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/SearchHandler.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/SearchHandler.java index c1c3dc59b..02a32ec9d 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/SearchHandler.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/SearchHandler.java @@ -47,6 +47,7 @@ import com.yelp.nrtsearch.server.luceneserver.search.SearchCutoffWrapper.CollectionTimeoutException; import com.yelp.nrtsearch.server.luceneserver.search.SearchRequestProcessor; import com.yelp.nrtsearch.server.luceneserver.search.SearcherResult; +import com.yelp.nrtsearch.server.monitoring.VerboseIndexCollector; import java.io.IOException; import java.util.ArrayList; import java.util.Comparator; @@ -259,7 +260,7 @@ public SearchResponse handle(IndexState indexState, SearchRequest searchRequest) diagnostics.setFirstPassSearchTimeMs(((System.nanoTime() - searchStartTime) / 1000000.0)); - DeadlineUtils.checkDeadline("SearchHandler: post recall", "SEARCH"); + DeadlineUtils.checkDeadline("SearchHandler: post recall", diagnostics, "SEARCH"); // add detailed timing metrics for query execution if (profileResultBuilder != null) { @@ -274,7 +275,8 @@ public SearchResponse handle(IndexState indexState, SearchRequest searchRequest) hits = rescorer.rescore(hits, searchContext); long endNS = System.nanoTime(); diagnostics.putRescorersTimeMs(rescorer.getName(), (endNS - startNS) / 1000000.0); - DeadlineUtils.checkDeadline("SearchHandler: post " + rescorer.getName(), "SEARCH"); + DeadlineUtils.checkDeadline( + "SearchHandler: post " + rescorer.getName(), diagnostics, "SEARCH"); } diagnostics.setRescoreTimeMs(((System.nanoTime() - rescoreStartTime) / 1000000.0)); } @@ -355,8 +357,13 @@ public SearchResponse handle(IndexState indexState, SearchRequest searchRequest) } // if we are out of time, don't bother with serialization - DeadlineUtils.checkDeadline("SearchHandler: end", "SEARCH"); - return searchContext.getResponseBuilder().build(); + DeadlineUtils.checkDeadline("SearchHandler: end", diagnostics, "SEARCH"); + SearchResponse searchResponse = searchContext.getResponseBuilder().build(); + if (!warming && searchContext.getIndexState().getVerboseMetrics()) { + VerboseIndexCollector.updateSearchResponseMetrics( + searchResponse, searchContext.getIndexState().getName()); + } + return searchResponse; } /** diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/ShardState.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/ShardState.java index e67ed70ab..114890ed5 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/ShardState.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/ShardState.java @@ -278,6 +278,15 @@ public void waitForGeneration(long gen) throws InterruptedException { } } + /** + * Get shard index writer. + * + * @return Index writer, or null if replica + */ + public IndexWriter getWriter() { + return writer; + } + /** * Constructor. * diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDef.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDef.java index 08573694e..0127cf664 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDef.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDef.java @@ -19,6 +19,7 @@ import com.yelp.nrtsearch.server.grpc.Field; import com.yelp.nrtsearch.server.grpc.GeoBoundingBoxQuery; +import com.yelp.nrtsearch.server.grpc.GeoPolygonQuery; import com.yelp.nrtsearch.server.grpc.GeoRadiusQuery; import com.yelp.nrtsearch.server.grpc.Point; import com.yelp.nrtsearch.server.grpc.SearchResponse.Hit.CompositeFieldValue; @@ -35,6 +36,7 @@ import org.apache.lucene.document.FieldType; import org.apache.lucene.document.LatLonDocValuesField; import org.apache.lucene.document.LatLonPoint; +import org.apache.lucene.geo.Polygon; import org.apache.lucene.index.DocValues; import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.LeafReaderContext; @@ -160,6 +162,60 @@ public Query getGeoRadiusQuery(GeoRadiusQuery geoRadiusQuery) { radius); } + @Override + public Query getGeoPolygonQuery(GeoPolygonQuery geoPolygonQuery) { + if (!this.isSearchable()) { + throw new IllegalArgumentException( + String.format("field %s is not searchable", this.getName())); + } + if (geoPolygonQuery.getPolygonsCount() == 0) { + throw new IllegalArgumentException("GeoPolygonQuery must contain at least one polygon"); + } + Polygon[] polygons = new Polygon[geoPolygonQuery.getPolygonsCount()]; + for (int i = 0; i < geoPolygonQuery.getPolygonsCount(); ++i) { + polygons[i] = toLucenePolygon(geoPolygonQuery.getPolygons(i)); + } + return LatLonPoint.newPolygonQuery(geoPolygonQuery.getField(), polygons); + } + + private static Polygon toLucenePolygon(com.yelp.nrtsearch.server.grpc.Polygon grpcPolygon) { + int pointsCount = grpcPolygon.getPointsCount(); + if (pointsCount < 3) { + throw new IllegalArgumentException("Polygon must have at least three points"); + } + + boolean closedShape = + grpcPolygon.getPoints(0).equals(grpcPolygon.getPoints(grpcPolygon.getPointsCount() - 1)); + int pointsArraySize; + if (closedShape) { + if (pointsCount < 4) { + throw new IllegalArgumentException("Closed Polygon must have at least four points"); + } + pointsArraySize = pointsCount; + } else { + pointsArraySize = pointsCount + 1; + } + + double[] latValues = new double[pointsArraySize]; + double[] lonValues = new double[pointsArraySize]; + for (int i = 0; i < grpcPolygon.getPointsCount(); ++i) { + latValues[i] = grpcPolygon.getPoints(i).getLatitude(); + lonValues[i] = grpcPolygon.getPoints(i).getLongitude(); + } + + // The first point is also used as the last point to create a closed shape + if (!closedShape) { + latValues[pointsCount] = grpcPolygon.getPoints(0).getLatitude(); + lonValues[pointsCount] = grpcPolygon.getPoints(0).getLongitude(); + } + + Polygon[] holes = new Polygon[grpcPolygon.getHolesCount()]; + for (int i = 0; i < grpcPolygon.getHolesCount(); ++i) { + holes[i] = toLucenePolygon(grpcPolygon.getHoles(i)); + } + return new Polygon(latValues, lonValues, holes); + } + @Override public BiFunction sortValueExtractor(SortType sortType) { double multiplier = GeoUtils.convertDistanceToADifferentUnit(1.0, sortType.getUnit()); diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/properties/GeoQueryable.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/properties/GeoQueryable.java index 5265ee7ae..bd578db60 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/properties/GeoQueryable.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/field/properties/GeoQueryable.java @@ -16,6 +16,7 @@ package com.yelp.nrtsearch.server.luceneserver.field.properties; import com.yelp.nrtsearch.server.grpc.GeoBoundingBoxQuery; +import com.yelp.nrtsearch.server.grpc.GeoPolygonQuery; import com.yelp.nrtsearch.server.grpc.GeoRadiusQuery; import org.apache.lucene.search.Query; @@ -39,4 +40,12 @@ public interface GeoQueryable { * @return */ Query getGeoRadiusQuery(GeoRadiusQuery geoRadiusQuery); + + /** + * Build a geo polygon query for this field type with the given configuration. + * + * @param geoPolygonQuery geo polygon query configuration + * @return lucene geo polygon query + */ + Query getGeoPolygonQuery(GeoPolygonQuery geoPolygonQuery); } diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/highlights/NRTFastVectorHighlighter.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/highlights/NRTFastVectorHighlighter.java index 3019b9c32..7a5f9b6e1 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/highlights/NRTFastVectorHighlighter.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/highlights/NRTFastVectorHighlighter.java @@ -142,7 +142,11 @@ public String[] getHighlights( DEFAULT_ENCODER); } catch (RuntimeException runtimeException) { logger.warn( - "FVH failed creating fragments, and the exception is: ", runtimeException.getMessage()); + "FVH failed creating fragments for the luceneDocId: {}, highlight query: {}, exception: {}", + leafDocId + hitLeaf.docBase, + settings.getHighlightQuery(), + runtimeException.getMessage(), + runtimeException); return new String[0]; } } diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManager.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManager.java index 88371e9f0..aac6cb34c 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManager.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManager.java @@ -50,6 +50,7 @@ public class BackendStateManager implements IndexStateManager { private final String id; private final StateBackend stateBackend; private final GlobalState globalState; + private IndexLiveSettings liveSettingsOverrides; // volatile for atomic replacement private volatile ImmutableIndexState currentState; @@ -59,14 +60,20 @@ public class BackendStateManager implements IndexStateManager { * * @param indexName index name * @param id index instance id + * @param initialLiveSettingsOverrides initial local overrides for index live settings * @param stateBackend state backend * @param globalState global state */ public BackendStateManager( - String indexName, String id, StateBackend stateBackend, GlobalState globalState) { + String indexName, + String id, + IndexLiveSettings initialLiveSettingsOverrides, + StateBackend stateBackend, + GlobalState globalState) { this.indexName = indexName; this.id = id; this.indexUniqueName = BackendGlobalState.getUniqueIndexName(indexName, id); + this.liveSettingsOverrides = initialLiveSettingsOverrides; this.stateBackend = stateBackend; this.globalState = globalState; } @@ -84,7 +91,8 @@ public synchronized void load() throws IOException { UpdatedFieldInfo updatedFieldInfo = FieldUpdateHandler.updateFields( new FieldAndFacetState(), Collections.emptyMap(), stateInfo.getFieldsMap().values()); - currentState = createIndexState(stateInfo, updatedFieldInfo.fieldAndFacetState); + currentState = + createIndexState(stateInfo, updatedFieldInfo.fieldAndFacetState, liveSettingsOverrides); } /** @@ -115,7 +123,8 @@ public synchronized void create() throws IOException { throw new IllegalStateException("Creating index, but state already exists for: " + indexName); } stateInfo = getDefaultStateInfo(); - ImmutableIndexState indexState = createIndexState(stateInfo, new FieldAndFacetState()); + ImmutableIndexState indexState = + createIndexState(stateInfo, new FieldAndFacetState(), liveSettingsOverrides); stateBackend.commitIndexState(indexUniqueName, stateInfo); currentState = indexState; } @@ -140,38 +149,52 @@ public synchronized IndexSettings updateSettings(IndexSettings settings) throws } IndexStateInfo updatedStateInfo = mergeSettings(currentState.getCurrentStateInfo(), settings); ImmutableIndexState updatedIndexState = - createIndexState(updatedStateInfo, currentState.getFieldAndFacetState()); + createIndexState( + updatedStateInfo, currentState.getFieldAndFacetState(), liveSettingsOverrides); stateBackend.commitIndexState(indexUniqueName, updatedStateInfo); currentState = updatedIndexState; return updatedIndexState.getMergedSettings(); } @Override - public IndexLiveSettings getLiveSettings() { + public IndexLiveSettings getLiveSettings(boolean withLocal) { ImmutableIndexState indexState = currentState; if (indexState == null) { throw new IllegalStateException("No state for index: " + indexName); } - return indexState.getMergedLiveSettings(); + return indexState.getMergedLiveSettings(withLocal); } @Override - public synchronized IndexLiveSettings updateLiveSettings(IndexLiveSettings liveSettings) - throws IOException { + public synchronized IndexLiveSettings updateLiveSettings( + IndexLiveSettings liveSettings, boolean local) throws IOException { logger.info("Updating live settings for index: " + indexName + " : " + liveSettings); if (currentState == null) { throw new IllegalStateException("No state for index: " + indexName); } - IndexStateInfo updatedStateInfo = - mergeLiveSettings(currentState.getCurrentStateInfo(), liveSettings); - ImmutableIndexState updatedIndexState = - createIndexState(updatedStateInfo, currentState.getFieldAndFacetState()); - stateBackend.commitIndexState(indexUniqueName, updatedStateInfo); + ImmutableIndexState updatedIndexState; + if (local) { + IndexLiveSettings updatedLiveSettingsOverrides = + ImmutableIndexState.mergeLiveSettings(liveSettingsOverrides, liveSettings); + updatedIndexState = + createIndexState( + currentState.getCurrentStateInfo(), + currentState.getFieldAndFacetState(), + updatedLiveSettingsOverrides); + liveSettingsOverrides = updatedLiveSettingsOverrides; + } else { + IndexStateInfo updatedStateInfo = + mergeLiveSettings(currentState.getCurrentStateInfo(), liveSettings); + updatedIndexState = + createIndexState( + updatedStateInfo, currentState.getFieldAndFacetState(), liveSettingsOverrides); + stateBackend.commitIndexState(indexUniqueName, updatedStateInfo); + } currentState = updatedIndexState; for (Map.Entry entry : currentState.getShards().entrySet()) { entry.getValue().updatedLiveSettings(liveSettings); } - return updatedIndexState.getMergedLiveSettings(); + return updatedIndexState.getMergedLiveSettings(local); } @Override @@ -187,7 +210,8 @@ public synchronized String updateFields(List fields) throws IOException { IndexStateInfo updatedStateInfo = replaceFields(currentState.getCurrentStateInfo(), updatedFieldInfo.fields); ImmutableIndexState updatedIndexState = - createIndexState(updatedStateInfo, updatedFieldInfo.fieldAndFacetState); + createIndexState( + updatedStateInfo, updatedFieldInfo.fieldAndFacetState, liveSettingsOverrides); stateBackend.commitIndexState(indexUniqueName, updatedStateInfo); currentState = updatedIndexState; return updatedIndexState.getAllFieldsJSON(); @@ -213,7 +237,8 @@ public synchronized void start( .setGen(currentState.getCurrentStateInfo().getGen() + 1) .build(); ImmutableIndexState updatedIndexState = - createIndexState(updatedStateInfo, currentState.getFieldAndFacetState()); + createIndexState( + updatedStateInfo, currentState.getFieldAndFacetState(), liveSettingsOverrides); stateBackend.commitIndexState(indexUniqueName, updatedStateInfo); currentState = updatedIndexState; } @@ -230,7 +255,10 @@ public IndexState getCurrent() { // Declared protected for use during testing protected ImmutableIndexState createIndexState( - IndexStateInfo indexStateInfo, FieldAndFacetState fieldAndFacetState) throws IOException { + IndexStateInfo indexStateInfo, + FieldAndFacetState fieldAndFacetState, + IndexLiveSettings liveSettingsOverrides) + throws IOException { Map previousShardState = currentState == null ? null : currentState.getShards(); return new ImmutableIndexState( @@ -240,6 +268,7 @@ protected ImmutableIndexState createIndexState( indexUniqueName, indexStateInfo, fieldAndFacetState, + liveSettingsOverrides, previousShardState); } diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexState.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexState.java index 65e707993..26dd7de69 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexState.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexState.java @@ -166,6 +166,7 @@ public class ImmutableIndexState extends IndexState { .setDefaultSearchTimeoutCheckEvery(Int32Value.newBuilder().setValue(0).build()) .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(0).build()) .setMaxMergePreCopyDurationSec(UInt64Value.newBuilder().setValue(0)) + .setVerboseMetrics(BoolValue.newBuilder().setValue(false).build()) .build(); // Live Settings @@ -183,12 +184,14 @@ public class ImmutableIndexState extends IndexState { private final int defaultSearchTimeoutCheckEvery; private final int defaultTerminateAfter; private final long maxMergePreCopyDurationSec; + private final boolean verboseMetrics; private final IndexStateManager indexStateManager; private final String uniqueName; private final IndexStateInfo currentStateInfo; private final IndexSettings mergedSettings; private final IndexLiveSettings mergedLiveSettings; + private final IndexLiveSettings mergedLiveSettingsWithLocal; private final FieldAndFacetState fieldAndFacetState; private final Map shards; @@ -201,6 +204,7 @@ public class ImmutableIndexState extends IndexState { * @param uniqueName index name with instance identifier * @param stateInfo current settings state * @param fieldAndFacetState current field state + * @param liveSettingsOverrides local overrides for index live settings * @param previousShardState shard state from previous index state, or null * @throws IOException on file system error */ @@ -211,6 +215,7 @@ public ImmutableIndexState( String uniqueName, IndexStateInfo stateInfo, FieldAndFacetState fieldAndFacetState, + IndexLiveSettings liveSettingsOverrides, Map previousShardState) throws IOException { super(globalState, name, globalState.getIndexDirBase().resolve(uniqueName)); @@ -252,23 +257,27 @@ public ImmutableIndexState( // live settings mergedLiveSettings = mergeLiveSettings(DEFAULT_INDEX_LIVE_SETTINGS, stateInfo.getLiveSettings()); - validateLiveSettings(mergedLiveSettings); - - maxRefreshSec = mergedLiveSettings.getMaxRefreshSec().getValue(); - minRefreshSec = mergedLiveSettings.getMinRefreshSec().getValue(); - maxSearcherAgeSec = mergedLiveSettings.getMaxSearcherAgeSec().getValue(); - indexRamBufferSizeMB = mergedLiveSettings.getIndexRamBufferSizeMB().getValue(); - addDocumentsMaxBufferLen = mergedLiveSettings.getAddDocumentsMaxBufferLen().getValue(); - sliceMaxDocs = mergedLiveSettings.getSliceMaxDocs().getValue(); - sliceMaxSegments = mergedLiveSettings.getSliceMaxSegments().getValue(); - virtualShards = mergedLiveSettings.getVirtualShards().getValue(); - maxMergedSegmentMB = mergedLiveSettings.getMaxMergedSegmentMB().getValue(); - segmentsPerTier = mergedLiveSettings.getSegmentsPerTier().getValue(); - defaultSearchTimeoutSec = mergedLiveSettings.getDefaultSearchTimeoutSec().getValue(); + mergedLiveSettingsWithLocal = mergeLiveSettings(mergedLiveSettings, liveSettingsOverrides); + + validateLiveSettings(mergedLiveSettingsWithLocal); + + maxRefreshSec = mergedLiveSettingsWithLocal.getMaxRefreshSec().getValue(); + minRefreshSec = mergedLiveSettingsWithLocal.getMinRefreshSec().getValue(); + maxSearcherAgeSec = mergedLiveSettingsWithLocal.getMaxSearcherAgeSec().getValue(); + indexRamBufferSizeMB = mergedLiveSettingsWithLocal.getIndexRamBufferSizeMB().getValue(); + addDocumentsMaxBufferLen = mergedLiveSettingsWithLocal.getAddDocumentsMaxBufferLen().getValue(); + sliceMaxDocs = mergedLiveSettingsWithLocal.getSliceMaxDocs().getValue(); + sliceMaxSegments = mergedLiveSettingsWithLocal.getSliceMaxSegments().getValue(); + virtualShards = mergedLiveSettingsWithLocal.getVirtualShards().getValue(); + maxMergedSegmentMB = mergedLiveSettingsWithLocal.getMaxMergedSegmentMB().getValue(); + segmentsPerTier = mergedLiveSettingsWithLocal.getSegmentsPerTier().getValue(); + defaultSearchTimeoutSec = mergedLiveSettingsWithLocal.getDefaultSearchTimeoutSec().getValue(); defaultSearchTimeoutCheckEvery = - mergedLiveSettings.getDefaultSearchTimeoutCheckEvery().getValue(); - defaultTerminateAfter = mergedLiveSettings.getDefaultTerminateAfter().getValue(); - maxMergePreCopyDurationSec = mergedLiveSettings.getMaxMergePreCopyDurationSec().getValue(); + mergedLiveSettingsWithLocal.getDefaultSearchTimeoutCheckEvery().getValue(); + defaultTerminateAfter = mergedLiveSettingsWithLocal.getDefaultTerminateAfter().getValue(); + maxMergePreCopyDurationSec = + mergedLiveSettingsWithLocal.getMaxMergePreCopyDurationSec().getValue(); + verboseMetrics = mergedLiveSettingsWithLocal.getVerboseMetrics().getValue(); // If there is previous shard state, use it. Otherwise, initialize the shard. if (previousShardState != null) { @@ -359,9 +368,13 @@ public IndexSettings getMergedSettings() { return mergedSettings; } - /** Get the fully merged (with defaults) index live settings. */ - public IndexLiveSettings getMergedLiveSettings() { - return mergedLiveSettings; + /** + * Get the fully merged (with defaults) index live settings. + * + * @param withLocal If local overrides should be included in the live settings + */ + public IndexLiveSettings getMergedLiveSettings(boolean withLocal) { + return withLocal ? mergedLiveSettingsWithLocal : mergedLiveSettings; } /** Get field and facet state for index. */ @@ -834,6 +847,11 @@ public Map getSuggesters() { throw new UnsupportedOperationException(); } + @Override + public boolean getVerboseMetrics() { + return verboseMetrics; + } + @Override public void initWarmer(RemoteBackend remoteBackend) { initWarmer(remoteBackend, uniqueName); diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/IndexStateManager.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/IndexStateManager.java index 7861550ed..452edd2d6 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/IndexStateManager.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/IndexStateManager.java @@ -63,18 +63,25 @@ public interface IndexStateManager extends Closeable { */ IndexSettings updateSettings(IndexSettings settings) throws IOException; - /** Get the current index live settings. */ - IndexLiveSettings getLiveSettings(); + /** + * Get the current index live settings. + * + * @param withLocal If local overrides should be included in the live settings + */ + IndexLiveSettings getLiveSettings(boolean withLocal); /** * Update the index live setting from the given input settings. Input settings will be merged into * the existing index settings, replacing any values that exist. * * @param liveSettings live settings modifications - * @return merged index settings, including default values + * @param local only apply settings changes to local node + * @return merged index settings, including default values. Only if local is true will local + * overrides be included. * @throws IOException on error accessing state */ - IndexLiveSettings updateLiveSettings(IndexLiveSettings liveSettings) throws IOException; + IndexLiveSettings updateLiveSettings(IndexLiveSettings liveSettings, boolean local) + throws IOException; /** * Update index fields with the given {@link Field} messages. Current only supports addition of diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/handlers/LiveSettingsV2Handler.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/handlers/LiveSettingsV2Handler.java index c41923f84..302ebf217 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/handlers/LiveSettingsV2Handler.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/index/handlers/LiveSettingsV2Handler.java @@ -41,9 +41,10 @@ public static LiveSettingsV2Response handle( // if there is no settings message in the request, just return the current settings if (liveSettingsRequest.hasLiveSettings()) { responseSettings = - indexStateManager.updateLiveSettings(liveSettingsRequest.getLiveSettings()); + indexStateManager.updateLiveSettings( + liveSettingsRequest.getLiveSettings(), liveSettingsRequest.getLocal()); } else { - responseSettings = indexStateManager.getLiveSettings(); + responseSettings = indexStateManager.getLiveSettings(liveSettingsRequest.getLocal()); } return LiveSettingsV2Response.newBuilder().setLiveSettings(responseSettings).build(); } diff --git a/src/main/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalState.java b/src/main/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalState.java index 7fd792493..d0ea6571f 100644 --- a/src/main/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalState.java +++ b/src/main/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalState.java @@ -24,6 +24,7 @@ import com.yelp.nrtsearch.server.grpc.DummyResponse; import com.yelp.nrtsearch.server.grpc.GlobalStateInfo; import com.yelp.nrtsearch.server.grpc.IndexGlobalState; +import com.yelp.nrtsearch.server.grpc.IndexLiveSettings; import com.yelp.nrtsearch.server.grpc.Mode; import com.yelp.nrtsearch.server.grpc.RestoreIndex; import com.yelp.nrtsearch.server.grpc.StartIndexRequest; @@ -116,7 +117,11 @@ public BackendGlobalState( Map managerMap = new HashMap<>(); for (Map.Entry entry : globalStateInfo.getIndicesMap().entrySet()) { IndexStateManager stateManager = - createIndexStateManager(entry.getKey(), entry.getValue().getId(), stateBackend); + createIndexStateManager( + entry.getKey(), + entry.getValue().getId(), + luceneServerConfiguration.getLiveSettingsOverride(entry.getKey()), + stateBackend); stateManager.load(); managerMap.put(entry.getKey(), stateManager); } @@ -150,8 +155,11 @@ protected StateBackend createStateBackend() { * @return index state manager */ protected IndexStateManager createIndexStateManager( - String indexName, String indexId, StateBackend stateBackend) { - return new BackendStateManager(indexName, indexId, stateBackend, this); + String indexName, + String indexId, + IndexLiveSettings liveSettingsOverrides, + StateBackend stateBackend) { + return new BackendStateManager(indexName, indexId, liveSettingsOverrides, stateBackend, this); } /** @@ -175,7 +183,12 @@ public synchronized void reloadStateFromBackend() throws IOException { String indexName = entry.getKey(); IndexStateManager stateManager = immutableState.indexStateManagerMap.get(indexName); if (stateManager == null || !entry.getValue().getId().equals(stateManager.getIndexId())) { - stateManager = createIndexStateManager(indexName, entry.getValue().getId(), stateBackend); + stateManager = + createIndexStateManager( + indexName, + entry.getValue().getId(), + getConfiguration().getLiveSettingsOverride(indexName), + stateBackend); } stateManager.load(); newManagerMap.put(indexName, stateManager); @@ -249,11 +262,21 @@ public synchronized IndexState createIndex(CreateIndexRequest createIndexRequest IndexStateManager stateManager; if (createIndexRequest.getExistsWithId().isEmpty()) { indexId = getIndexId(); - stateManager = createIndexStateManager(indexName, indexId, stateBackend); + stateManager = + createIndexStateManager( + indexName, + indexId, + getConfiguration().getLiveSettingsOverride(indexName), + stateBackend); stateManager.create(); } else { indexId = createIndexRequest.getExistsWithId(); - stateManager = createIndexStateManager(indexName, indexId, stateBackend); + stateManager = + createIndexStateManager( + indexName, + indexId, + getConfiguration().getLiveSettingsOverride(indexName), + stateBackend); stateManager.load(); } @@ -261,7 +284,7 @@ public synchronized IndexState createIndex(CreateIndexRequest createIndexRequest stateManager.updateSettings(createIndexRequest.getSettings()); } if (createIndexRequest.hasLiveSettings()) { - stateManager.updateLiveSettings(createIndexRequest.getLiveSettings()); + stateManager.updateLiveSettings(createIndexRequest.getLiveSettings(), false); } if (!createIndexRequest.getFieldsList().isEmpty()) { stateManager.updateFields(createIndexRequest.getFieldsList()); diff --git a/src/main/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollector.java b/src/main/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollector.java new file mode 100644 index 000000000..ca317f488 --- /dev/null +++ b/src/main/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollector.java @@ -0,0 +1,87 @@ +/* + * Copyright 2022 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yelp.nrtsearch.server.monitoring; + +import com.yelp.nrtsearch.server.luceneserver.GlobalState; +import io.prometheus.client.Collector; +import io.prometheus.client.GaugeMetricFamily; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import org.apache.lucene.index.ConcurrentMergeScheduler; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.MergeScheduler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** Collector to for metrics from the {@link IndexWriter}'s {@link MergeScheduler}. */ +public class MergeSchedulerCollector extends Collector { + private static final Logger logger = LoggerFactory.getLogger(MergeSchedulerCollector.class); + private final GlobalState globalState; + + public MergeSchedulerCollector(GlobalState globalState) { + this.globalState = globalState; + } + + @Override + public List collect() { + List mfs = new ArrayList<>(); + + GaugeMetricFamily indexPendingMergeCount = + new GaugeMetricFamily( + "nrt_pending_merge_count", + "Current number of pending merges", + Collections.singletonList("index")); + mfs.add(indexPendingMergeCount); + + GaugeMetricFamily indexMaxMergeThreadCount = + new GaugeMetricFamily( + "nrt_max_merge_thread_count", + "Max running merge threads", + Collections.singletonList("index")); + mfs.add(indexMaxMergeThreadCount); + + GaugeMetricFamily indexMaxMergeCount = + new GaugeMetricFamily( + "nrt_max_merge_count", + "Max existing merge threads", + Collections.singletonList("index")); + mfs.add(indexMaxMergeCount); + + try { + Set indexNames = globalState.getIndexNames(); + for (String indexName : indexNames) { + IndexWriter writer = globalState.getIndex(indexName).getShard(0).getWriter(); + List labels = Collections.singletonList(indexName); + if (writer != null) { + MergeScheduler mergeScheduler = writer.getConfig().getMergeScheduler(); + if (mergeScheduler instanceof ConcurrentMergeScheduler) { + ConcurrentMergeScheduler concurrentMergeScheduler = + (ConcurrentMergeScheduler) mergeScheduler; + indexPendingMergeCount.addMetric(labels, concurrentMergeScheduler.mergeThreadCount()); + indexMaxMergeThreadCount.addMetric( + labels, concurrentMergeScheduler.getMaxThreadCount()); + indexMaxMergeCount.addMetric(labels, concurrentMergeScheduler.getMaxMergeCount()); + } + } + } + } catch (Exception e) { + logger.warn("Error getting merge scheduler metrics: ", e); + } + return mfs; + } +} diff --git a/src/main/java/com/yelp/nrtsearch/server/monitoring/NrtMetrics.java b/src/main/java/com/yelp/nrtsearch/server/monitoring/NrtMetrics.java index f2ff3822f..9067ab3c1 100644 --- a/src/main/java/com/yelp/nrtsearch/server/monitoring/NrtMetrics.java +++ b/src/main/java/com/yelp/nrtsearch/server/monitoring/NrtMetrics.java @@ -98,6 +98,20 @@ public class NrtMetrics { .labelNames("index") .create(); + public static final Counter nrtMergeCopyStartCount = + Counter.build() + .name("nrt_merge_copy_start_count") + .help("Number of merge copies started") + .labelNames("index") + .create(); + + public static final Counter nrtMergeCopyEndCount = + Counter.build() + .name("nrt_merge_copy_end_count") + .help("Number of merge copies ended") + .labelNames("index") + .create(); + /** * Add all nrt metrics to the collector registry. * @@ -113,5 +127,7 @@ public static void register(CollectorRegistry registry) { registry.register(nrtMergeFailure); registry.register(nrtMergeSize); registry.register(nrtMergeTime); + registry.register(nrtMergeCopyStartCount); + registry.register(nrtMergeCopyEndCount); } } diff --git a/src/main/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollector.java b/src/main/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollector.java new file mode 100644 index 000000000..d641d9908 --- /dev/null +++ b/src/main/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollector.java @@ -0,0 +1,141 @@ +/* + * Copyright 2022 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yelp.nrtsearch.server.monitoring; + +import com.yelp.nrtsearch.server.grpc.SearchResponse; +import com.yelp.nrtsearch.server.grpc.SearchResponse.Diagnostics; +import com.yelp.nrtsearch.server.luceneserver.GlobalState; +import io.prometheus.client.Collector; +import io.prometheus.client.Counter; +import io.prometheus.client.Summary; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Collector for detailed index metrics that may be expensive to produce or publish. Collection can + * be toggled with the verbose metrics index live setting. + */ +public class VerboseIndexCollector extends Collector { + private static final Logger logger = LoggerFactory.getLogger(VerboseIndexCollector.class); + private final GlobalState globalState; + + private static final Summary searchResponseSizeBytes = + Summary.build() + .name("nrt_search_response_size_bytes") + .help("Size of response protobuf message") + .quantile(0.0, 0) + .quantile(0.5, 0.01) + .quantile(0.95, 0.005) + .quantile(0.99, 0.005) + .quantile(1.0, 0) + .labelNames("index") + .create(); + + private static final Summary searchResponseTotalHits = + Summary.build() + .name("nrt_search_response_total_hits") + .help("Number of total hits for queries") + .quantile(0.0, 0) + .quantile(0.5, 0.01) + .quantile(0.95, 0.005) + .quantile(0.99, 0.005) + .quantile(1.0, 0) + .labelNames("index") + .create(); + + private static final Summary searchStageLatencyMs = + Summary.build() + .name("nrt_search_stage_latency_ms") + .help("Latency of various search operations (ms)") + .quantile(0.0, 0) + .quantile(0.5, 0.01) + .quantile(0.95, 0.005) + .quantile(0.99, 0.005) + .quantile(1.0, 0) + .labelNames("index", "stage") + .create(); + + private static final Counter searchTimeoutCount = + Counter.build() + .name("nrt_search_timeout_count") + .help("Number of requests that hit the recall timeout") + .labelNames("index") + .create(); + + private static final Counter searchTerminatedEarlyCount = + Counter.build() + .name("nrt_search_terminated_early_count") + .help("Number of requests that terminated early") + .labelNames("index") + .create(); + + public static void updateSearchResponseMetrics(SearchResponse searchResponse, String index) { + searchResponseSizeBytes.labels(index).observe(searchResponse.getSerializedSize()); + searchResponseTotalHits.labels(index).observe(searchResponse.getTotalHits().getValue()); + if (searchResponse.getHitTimeout()) { + searchTimeoutCount.labels(index).inc(); + } + if (searchResponse.getTerminatedEarly()) { + searchTerminatedEarlyCount.labels(index).inc(); + } + + Diagnostics diagnostics = searchResponse.getDiagnostics(); + searchStageLatencyMs.labels(index, "recall").observe(diagnostics.getFirstPassSearchTimeMs()); + searchStageLatencyMs.labels(index, "highlight").observe(diagnostics.getHighlightTimeMs()); + searchStageLatencyMs.labels(index, "fetch").observe(diagnostics.getGetFieldsTimeMs()); + for (Map.Entry entry : diagnostics.getFacetTimeMsMap().entrySet()) { + searchStageLatencyMs.labels(index, "facet:" + entry.getKey()).observe(entry.getValue()); + } + for (Map.Entry entry : diagnostics.getRescorersTimeMsMap().entrySet()) { + searchStageLatencyMs.labels(index, "rescorer:" + entry.getKey()).observe(entry.getValue()); + } + } + + public VerboseIndexCollector(GlobalState globalState) { + this.globalState = globalState; + } + + @Override + public List collect() { + List mfs = new ArrayList<>(); + + try { + boolean publishMetrics = false; + Set indexNames = globalState.getIndexNames(); + for (String indexName : indexNames) { + if (globalState.getIndex(indexName).getVerboseMetrics()) { + publishMetrics = true; + break; + } + } + if (publishMetrics) { + mfs.addAll(searchResponseSizeBytes.collect()); + mfs.addAll(searchResponseTotalHits.collect()); + mfs.addAll(searchStageLatencyMs.collect()); + mfs.addAll(searchTimeoutCount.collect()); + mfs.addAll(searchTerminatedEarlyCount.collect()); + } + } catch (Exception e) { + logger.warn("Error getting verbose index metrics: ", e); + } + + return mfs; + } +} diff --git a/src/main/java/com/yelp/nrtsearch/server/utils/JsonUtils.java b/src/main/java/com/yelp/nrtsearch/server/utils/JsonUtils.java new file mode 100644 index 000000000..57e61f13f --- /dev/null +++ b/src/main/java/com/yelp/nrtsearch/server/utils/JsonUtils.java @@ -0,0 +1,37 @@ +/* + * Copyright 2023 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yelp.nrtsearch.server.utils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; + +/** Class with utility methods for working with json using the jackson library. */ +public class JsonUtils { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private JsonUtils() {} + + /** + * Convert the provided object into a json string. + * + * @param obj object to convert + * @return json string representation + * @throws IOException + */ + public static String objectToJsonStr(Object obj) throws IOException { + return OBJECT_MAPPER.writeValueAsString(obj); + } +} diff --git a/src/main/java/org/apache/lucene/facet/DrillSidewaysQueryCheck.java b/src/main/java/org/apache/lucene/facet/DrillSidewaysQueryCheck.java new file mode 100644 index 000000000..7277ef9a9 --- /dev/null +++ b/src/main/java/org/apache/lucene/facet/DrillSidewaysQueryCheck.java @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.lucene.facet; + +import org.apache.lucene.search.Query; + +public class DrillSidewaysQueryCheck { + + public static boolean isDrillSidewaysQuery(Query query) { + return query instanceof DrillSidewaysQuery; + } +} diff --git a/src/test/java/com/yelp/nrtsearch/server/cli/CreateIndexCommandTest.java b/src/test/java/com/yelp/nrtsearch/server/cli/CreateIndexCommandTest.java index 93b904d07..9e343bed5 100644 --- a/src/test/java/com/yelp/nrtsearch/server/cli/CreateIndexCommandTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/cli/CreateIndexCommandTest.java @@ -216,7 +216,7 @@ private IndexSettings getIndexSettings(TestServer server) throws IOException { } private IndexLiveSettings getIndexLiveSettings(TestServer server) throws IOException { - return server.getGlobalState().getIndexStateManager("test_index").getLiveSettings(); + return server.getGlobalState().getIndexStateManager("test_index").getLiveSettings(false); } private Map getIndexFields(TestServer server) throws IOException { diff --git a/src/test/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2CommandTest.java b/src/test/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2CommandTest.java new file mode 100644 index 000000000..7abba1d44 --- /dev/null +++ b/src/test/java/com/yelp/nrtsearch/server/cli/LiveSettingsV2CommandTest.java @@ -0,0 +1,167 @@ +/* + * Copyright 2023 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yelp.nrtsearch.server.cli; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.yelp.nrtsearch.server.config.IndexStartConfig.IndexDataLocationType; +import com.yelp.nrtsearch.server.grpc.Mode; +import com.yelp.nrtsearch.server.grpc.StartIndexV2Request; +import com.yelp.nrtsearch.server.grpc.TestServer; +import java.io.IOException; +import org.junit.After; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import picocli.CommandLine; + +public class LiveSettingsV2CommandTest { + @Rule public final TemporaryFolder folder = new TemporaryFolder(); + + @After + public void cleanup() { + TestServer.cleanupAll(); + } + + private TestServer getTestServer() throws IOException { + return TestServer.builder(folder) + .withAutoStartConfig(true, Mode.PRIMARY, 0, IndexDataLocationType.LOCAL) + .withLocalStateBackend() + .build(); + } + + @Test + public void testVerboseMetrics() throws IOException { + TestServer server = getTestServer(); + server.createSimpleIndex("test_index"); + server.startIndexV2(StartIndexV2Request.newBuilder().setIndexName("test_index").build()); + + assertFalse(server.getGlobalState().getIndex("test_index").getVerboseMetrics()); + + CommandLine cmd = new CommandLine(new LuceneClientCommand()); + int exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index"); + assertEquals(0, exitCode); + assertFalse(server.getGlobalState().getIndex("test_index").getVerboseMetrics()); + + exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index", + "--verboseMetrics=true"); + assertEquals(0, exitCode); + assertTrue(server.getGlobalState().getIndex("test_index").getVerboseMetrics()); + + exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index"); + assertEquals(0, exitCode); + assertTrue(server.getGlobalState().getIndex("test_index").getVerboseMetrics()); + + exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index", + "--verboseMetrics=false"); + assertEquals(0, exitCode); + assertFalse(server.getGlobalState().getIndex("test_index").getVerboseMetrics()); + } + + @Test + public void testVerboseMetrics_invalid() throws IOException { + TestServer server = getTestServer(); + server.createSimpleIndex("test_index"); + server.startIndexV2(StartIndexV2Request.newBuilder().setIndexName("test_index").build()); + + CommandLine cmd = new CommandLine(new LuceneClientCommand()); + int exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index", + "--verboseMetrics=invalid"); + assertEquals(1, exitCode); + } + + @Test + public void testSetsSettings() throws IOException { + TestServer server = getTestServer(); + server.createSimpleIndex("test_index"); + server.startIndexV2(StartIndexV2Request.newBuilder().setIndexName("test_index").build()); + + assertEquals( + 0.0, server.getGlobalState().getIndex("test_index").getDefaultSearchTimeoutSec(), 0); + + CommandLine cmd = new CommandLine(new LuceneClientCommand()); + int exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index", + "--defaultSearchTimeoutSec=1.0"); + assertEquals(0, exitCode); + assertEquals( + 1.0, server.getGlobalState().getIndex("test_index").getDefaultSearchTimeoutSec(), 0); + + server.restart(); + + assertEquals( + 1.0, server.getGlobalState().getIndex("test_index").getDefaultSearchTimeoutSec(), 0); + } + + @Test + public void testSetsLocalSettings() throws IOException { + TestServer server = getTestServer(); + server.createSimpleIndex("test_index"); + server.startIndexV2(StartIndexV2Request.newBuilder().setIndexName("test_index").build()); + + assertEquals( + 0.0, server.getGlobalState().getIndex("test_index").getDefaultSearchTimeoutSec(), 0); + + CommandLine cmd = new CommandLine(new LuceneClientCommand()); + int exitCode = + cmd.execute( + "--hostname=localhost", + "--port=" + server.getPort(), + "liveSettingsV2", + "--indexName=test_index", + "--defaultSearchTimeoutSec=1.0", + "--local"); + assertEquals(0, exitCode); + assertEquals( + 1.0, server.getGlobalState().getIndex("test_index").getDefaultSearchTimeoutSec(), 0); + + server.restart(); + + assertEquals( + 0.0, server.getGlobalState().getIndex("test_index").getDefaultSearchTimeoutSec(), 0); + } +} diff --git a/src/test/java/com/yelp/nrtsearch/server/config/LuceneServerConfigurationTest.java b/src/test/java/com/yelp/nrtsearch/server/config/LuceneServerConfigurationTest.java index b620159f2..37952b23a 100644 --- a/src/test/java/com/yelp/nrtsearch/server/config/LuceneServerConfigurationTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/config/LuceneServerConfigurationTest.java @@ -17,6 +17,9 @@ import static org.junit.Assert.assertEquals; +import com.google.protobuf.DoubleValue; +import com.google.protobuf.Int32Value; +import com.yelp.nrtsearch.server.grpc.IndexLiveSettings; import com.yelp.nrtsearch.server.grpc.ReplicationServerClient; import java.io.ByteArrayInputStream; import org.apache.lucene.search.suggest.document.CompletionPostingsFormat.FSTLoadMode; @@ -139,4 +142,42 @@ public void testMaxS3ClientRetries_set() { LuceneServerConfiguration luceneConfig = getForConfig(config); assertEquals(10, luceneConfig.getMaxS3ClientRetries()); } + + @Test + public void testLiveSettingsOverride_default() { + String config = "nodeName: \"lucene_server_foo\""; + LuceneServerConfiguration luceneConfig = getForConfig(config); + assertEquals( + IndexLiveSettings.newBuilder().build(), luceneConfig.getLiveSettingsOverride("test_index")); + } + + @Test + public void testLiveSettingsOverride_set() { + String config = + String.join( + "\n", + "indexLiveSettingsOverrides:", + " test_index:", + " sliceMaxDocs: 1", + " virtualShards: 100", + " test_index_2:", + " defaultSearchTimeoutSec: 10.25", + " segmentsPerTier: 30"); + LuceneServerConfiguration luceneConfig = getForConfig(config); + assertEquals( + IndexLiveSettings.newBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(1).build()) + .setVirtualShards(Int32Value.newBuilder().setValue(100).build()) + .build(), + luceneConfig.getLiveSettingsOverride("test_index")); + assertEquals( + IndexLiveSettings.newBuilder() + .setDefaultSearchTimeoutSec(DoubleValue.newBuilder().setValue(10.25).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(30).build()) + .build(), + luceneConfig.getLiveSettingsOverride("test_index_2")); + assertEquals( + IndexLiveSettings.newBuilder().build(), + luceneConfig.getLiveSettingsOverride("test_index_3")); + } } diff --git a/src/test/java/com/yelp/nrtsearch/server/grpc/DeadlineUtilsTest.java b/src/test/java/com/yelp/nrtsearch/server/grpc/DeadlineUtilsTest.java index cfc2ec23b..c2203d988 100644 --- a/src/test/java/com/yelp/nrtsearch/server/grpc/DeadlineUtilsTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/grpc/DeadlineUtilsTest.java @@ -104,6 +104,51 @@ public void testWithDeadlineReached() { } } + @Test + public void testWithDeadlineReachedWithDiagnostics() { + var diagnostics = SearchResponse.Diagnostics.newBuilder(); + diagnostics + .setFirstPassSearchTimeMs(100) + .setGetFieldsTimeMs(50) + .setRescoreTimeMs(20) + .setHighlightTimeMs(10); + DeadlineUtils.setCancellationEnabled(false); + CancellableContext context = + Context.current().withDeadlineAfter(1, TimeUnit.MILLISECONDS, executorService); + try { + context.run( + () -> { + try { + Thread.sleep(5); + } catch (InterruptedException ignored) { + } + DeadlineUtils.checkDeadline("test", diagnostics, "TEST"); + }); + } finally { + context.cancel(null); + } + DeadlineUtils.setCancellationEnabled(true); + context = Context.current().withDeadlineAfter(1, TimeUnit.MILLISECONDS, executorService); + try { + context.run( + () -> { + try { + Thread.sleep(5); + } catch (InterruptedException ignored) { + } + DeadlineUtils.checkDeadline("test", diagnostics, "TEST"); + }); + fail(); + } catch (StatusRuntimeException e) { + assertEquals(Status.CANCELLED.getCode(), e.getStatus().getCode()); + assertEquals( + "Request deadline exceeded: test, Search Diagnostics: firstPassSearchTimeMs: 100.0\nhighlightTimeMs: 10.0\ngetFieldsTimeMs: 50.0\nrescoreTimeMs: 20.0\n", + e.getStatus().getDescription()); + } finally { + context.cancel(null); + } + } + @Test public void testMetricsCounter() { int initialCount = getCancelMetricCount(); diff --git a/src/test/java/com/yelp/nrtsearch/server/grpc/IndexStartTest.java b/src/test/java/com/yelp/nrtsearch/server/grpc/IndexStartTest.java index 70427a445..8193aea41 100644 --- a/src/test/java/com/yelp/nrtsearch/server/grpc/IndexStartTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/grpc/IndexStartTest.java @@ -830,7 +830,7 @@ private void verifyCreateProperties(TestServer server) throws IOException { server .getGlobalState() .getIndexStateManager("test_index") - .getLiveSettings() + .getLiveSettings(false) .getAddDocumentsMaxBufferLen() .getValue()); assertEquals( diff --git a/src/test/java/com/yelp/nrtsearch/server/grpc/StateBackendServerTest.java b/src/test/java/com/yelp/nrtsearch/server/grpc/StateBackendServerTest.java index 292204dda..873662f9c 100644 --- a/src/test/java/com/yelp/nrtsearch/server/grpc/StateBackendServerTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/grpc/StateBackendServerTest.java @@ -880,6 +880,264 @@ public void testIndexLiveSettingsPersistRestart() throws IOException { assertEquals(expectedSettings, response.getLiveSettings()); } + @Test + public void testSetLocalIndexLiveSettings() throws IOException { + initPrimary(); + createIndex(); + LiveSettingsV2Response response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setDefaultTerminateAfter( + Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec( + DoubleValue.newBuilder().setValue(5.1).build()) + .build()) + .setLocal(true) + .build()); + // live settings with local + IndexLiveSettings expectedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec(DoubleValue.newBuilder().setValue(5.1).build()) + .build(); + assertEquals(expectedSettings, response.getLiveSettings()); + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLocal(true) + .build()); + assertEquals(expectedSettings, response.getLiveSettings()); + + // live settings without local + response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + } + + @Test + public void testUpdateLocalIndexLiveSettings() throws IOException { + initPrimary(); + createIndex(); + LiveSettingsV2Response response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setDefaultTerminateAfter( + Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec( + DoubleValue.newBuilder().setValue(5.1).build()) + .build()) + .setLocal(true) + .build()); + // live settings with local + IndexLiveSettings expectedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec(DoubleValue.newBuilder().setValue(5.1).build()) + .build(); + assertEquals(expectedSettings, response.getLiveSettings()); + + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setDefaultTerminateAfter( + Int32Value.newBuilder().setValue(2000).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(500).build()) + .build()) + .setLocal(true) + .build()); + // live settings with local + expectedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(2000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec(DoubleValue.newBuilder().setValue(5.1).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(500).build()) + .build(); + assertEquals(expectedSettings, response.getLiveSettings()); + + // live settings without local + response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + } + + @Test + public void testSetLocalIndexLiveSettingsEphemeral() throws IOException { + initPrimary(); + createIndex(); + LiveSettingsV2Response response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setDefaultTerminateAfter( + Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec( + DoubleValue.newBuilder().setValue(5.1).build()) + .build()) + .setLocal(true) + .build()); + // live settings with local + IndexLiveSettings expectedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec(DoubleValue.newBuilder().setValue(5.1).build()) + .build(); + assertEquals(expectedSettings, response.getLiveSettings()); + + // live settings without local + response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + restartPrimary(); + + response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLocal(true) + .build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + } + + @Test + public void testSetLocalIndexLiveSettingsReplica() throws IOException { + initPrimary(); + createIndexWithFields(); + startIndex(primaryClient, Mode.PRIMARY); + + restartReplica(); + startIndex(replicaClient, Mode.REPLICA); + + LiveSettingsV2Response response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + response = + replicaClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + response = + replicaClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setDefaultTerminateAfter( + Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec( + DoubleValue.newBuilder().setValue(5.1).build()) + .build()) + .setLocal(true) + .build()); + // live settings with local + IndexLiveSettings expectedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(1000).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(4).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(50).build()) + .setDefaultSearchTimeoutSec(DoubleValue.newBuilder().setValue(5.1).build()) + .build(); + assertEquals(expectedSettings, response.getLiveSettings()); + + // live settings without local + response = + replicaClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + + // primary unaffected + response = + primaryClient + .getBlockingStub() + .liveSettingsV2(LiveSettingsV2Request.newBuilder().setIndexName("test_index").build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + response = + primaryClient + .getBlockingStub() + .liveSettingsV2( + LiveSettingsV2Request.newBuilder() + .setIndexName("test_index") + .setLocal(true) + .build()); + assertEquals(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, response.getLiveSettings()); + } + @Test public void testSetIndexFields() throws IOException { initPrimary(); @@ -1461,6 +1719,7 @@ public void testLiveSettingsV1All() throws IOException { .setDefaultSearchTimeoutCheckEvery(Int32Value.newBuilder().setValue(500).build()) .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(5000).build()) .setMaxMergePreCopyDurationSec(UInt64Value.newBuilder().setValue(0)) + .setVerboseMetrics(BoolValue.newBuilder().setValue(false).build()) .build(); IndexLiveSettings.Builder builder = IndexLiveSettings.newBuilder(); diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcherVirtualShardsTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcherVirtualShardsTest.java index 41deafbeb..e26569bd6 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcherVirtualShardsTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/MyIndexSearcherVirtualShardsTest.java @@ -134,7 +134,8 @@ private void setLiveSettings(int virtualShards, int maxDocs, int maxSegments) th .setVirtualShards(Int32Value.newBuilder().setValue(virtualShards).build()) .setSliceMaxDocs(Int32Value.newBuilder().setValue(maxDocs).build()) .setSliceMaxSegments(Int32Value.newBuilder().setValue(maxSegments).build()) - .build()); + .build(), + false); } private void addSegments(Iterable sizes) throws Exception { diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDefTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDefTest.java index 73a8cc3ba..c12253fc2 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDefTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/LatLonFieldDefTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import com.google.type.LatLng; import com.yelp.nrtsearch.server.grpc.*; @@ -143,6 +144,342 @@ public void testGeoRadiusQuery() { geoRadiusQueryAndVerifyIds(fremontGeoRadiusQuery, "1"); } + @Test + public void testGeoPolygonQueryNotSearchable() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_not_searchable") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .build()) + .build(); + try { + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery); + fail(); + } catch (StatusRuntimeException e) { + assertTrue(e.getMessage().contains("field lat_lon_not_searchable is not searchable")); + } + } + + @Test + public void testGeoPolygonQueryNotPoint() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("doc_id") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .build()) + .build(); + try { + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery); + fail(); + } catch (StatusRuntimeException e) { + assertTrue(e.getMessage().contains("Field doc_id does not support GeoPolygonQuery")); + } + } + + @Test + public void testGeoPolygonQueryNoPolygon() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder().setField("lat_lon_multi").build(); + try { + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery); + fail(); + } catch (StatusRuntimeException e) { + assertTrue(e.getMessage().contains("GeoPolygonQuery must contain at least one polygon")); + } + } + + @Test + public void testGeoPolygonQueryNoPoints() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons(Polygon.newBuilder().build()) + .build(); + try { + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery); + fail(); + } catch (StatusRuntimeException e) { + assertTrue(e.getMessage().contains("Polygon must have at least three points")); + } + } + + @Test + public void testGeoPolygonQueryFewPoints() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .build()) + .build(); + try { + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery); + fail(); + } catch (StatusRuntimeException e) { + assertTrue(e.getMessage().contains("Polygon must have at least three points")); + } + } + + @Test + public void testGeoPolygonQueryFewPointsClosed() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .build()) + .build(); + try { + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery); + fail(); + } catch (StatusRuntimeException e) { + assertTrue(e.getMessage().contains("Closed Polygon must have at least four points")); + } + } + + @Test + public void testGeoPolygonQuery() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery, "2"); + + GeoPolygonQuery fremontGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints( + LatLng.newBuilder().setLatitude(37.51).setLongitude(-121.9331).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.92).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.94).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(fremontGeoPolygonQuery, "1"); + } + + @Test + public void testGeoPolygonQuery_closed() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery, "2"); + + GeoPolygonQuery fremontGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints( + LatLng.newBuilder().setLatitude(37.51).setLongitude(-121.9331).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.92).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.94).build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.51).setLongitude(-121.9331).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(fremontGeoPolygonQuery, "1"); + } + + @Test + public void testGeoPolygonQuery_reverseWinding() { + GeoPolygonQuery sfGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(sfGeoPolygonQuery, "2"); + + GeoPolygonQuery fremontGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.94).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.92).build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.51).setLongitude(-121.9331).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(fremontGeoPolygonQuery, "1"); + } + + @Test + public void testMultiGeoPolygonQuery() { + GeoPolygonQuery multiGeoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.8).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .build()) + .addPolygons( + Polygon.newBuilder() + .addPoints( + LatLng.newBuilder().setLatitude(37.51).setLongitude(-121.9331).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.92).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.49).setLongitude(-121.94).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(multiGeoPolygonQuery, "1", "2"); + } + + @Test + public void testGeoPolygonQueryHoles() { + GeoPolygonQuery geoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-120.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-123.0).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(geoPolygonQuery, "1", "2"); + + GeoPolygonQuery geoPolygonQueryHoles = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-120.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-123.0).build()) + .addHoles( + Polygon.newBuilder() + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints( + LatLng.newBuilder() + .setLatitude(37.8) + .setLongitude(-122.414) + .build()) + .build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(geoPolygonQueryHoles, "1"); + } + + @Test + public void testGeoPolygonQueryHoles_closed() { + GeoPolygonQuery geoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-120.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-123.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(geoPolygonQuery, "1", "2"); + + GeoPolygonQuery geoPolygonQueryHoles = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-120.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-123.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .addHoles( + Polygon.newBuilder() + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints( + LatLng.newBuilder() + .setLatitude(37.8) + .setLongitude(-122.414) + .build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(geoPolygonQueryHoles, "1"); + } + + @Test + public void testGeoPolygonQueryHoles_reverseWinding() { + GeoPolygonQuery geoPolygonQuery = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-123.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-120.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(geoPolygonQuery, "1", "2"); + + GeoPolygonQuery geoPolygonQueryHoles = + GeoPolygonQuery.newBuilder() + .setField("lat_lon_multi") + .addPolygons( + Polygon.newBuilder() + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-123.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(37.0).setLongitude(-120.0).build()) + .addPoints(LatLng.newBuilder().setLatitude(38.0).setLongitude(-122.414).build()) + .addHoles( + Polygon.newBuilder() + .addPoints( + LatLng.newBuilder() + .setLatitude(37.8) + .setLongitude(-122.414) + .build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-122.0).build()) + .addPoints( + LatLng.newBuilder().setLatitude(37.6).setLongitude(-123.0).build()) + .build()) + .build()) + .build(); + geoPolygonQueryAndVerifyIds(geoPolygonQueryHoles, "1"); + } + private void geoBoundingBoxQueryAndVerifyIds( GeoBoundingBoxQuery geoBoundingBoxQuery, String... expectedIds) { Query query = Query.newBuilder().setGeoBoundingBoxQuery(geoBoundingBoxQuery).build(); @@ -154,6 +491,11 @@ private void geoRadiusQueryAndVerifyIds(GeoRadiusQuery geoRadiusQuery, String... queryAndVerifyIds(query, expectedIds); } + private void geoPolygonQueryAndVerifyIds(GeoPolygonQuery geoPolygonQuery, String... expectedIds) { + Query query = Query.newBuilder().setGeoPolygonQuery(geoPolygonQuery).build(); + queryAndVerifyIds(query, expectedIds); + } + private void queryAndVerifyIds(Query query, String... expectedIds) { SearchResponse response = getGrpcServer() diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/VectorFieldDefTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/VectorFieldDefTest.java index 1ab1063a2..3ab07d204 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/VectorFieldDefTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/field/VectorFieldDefTest.java @@ -99,7 +99,7 @@ private void indexVectorSearchDocs() throws Exception { getGlobalState() .getIndexStateManager(DEFAULT_TEST_INDEX) .updateLiveSettings( - IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build()); + IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build(), false); // make testing deterministic Random random = new Random(123456); diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManagerTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManagerTest.java index 9f5a2b2a7..9c5f4ecaf 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManagerTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BackendStateManagerTest.java @@ -60,6 +60,12 @@ public class BackendStateManagerTest { + private static final IndexLiveSettings LIVE_SETTINGS_OVERRIDES = + IndexLiveSettings.newBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(1).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(1).build()) + .build(); + @BeforeClass public static void setup() { String configFile = "nodeName: \"lucene_server_foo\""; @@ -74,11 +80,13 @@ public static void setup() { @Before public void setupTest() { MockStateManager.verifyFieldsState = Assert::assertNotNull; + MockStateManager.expectedLiveSettingsOverrides = IndexLiveSettings.newBuilder().build(); } private static class MockStateManager extends BackendStateManager { public static ImmutableIndexState nextState; public static IndexStateInfo expectedState; + public static IndexLiveSettings expectedLiveSettingsOverrides; public static Consumer verifyFieldsState = Assert::assertNotNull; public static FieldAndFacetState lastFieldAndFacetState; @@ -92,13 +100,25 @@ private static class MockStateManager extends BackendStateManager { */ public MockStateManager( String indexName, String id, StateBackend stateBackend, GlobalState globalState) { - super(indexName, id, stateBackend, globalState); + this(indexName, id, IndexLiveSettings.newBuilder().build(), stateBackend, globalState); + } + + public MockStateManager( + String indexName, + String id, + IndexLiveSettings liveSettingsOverrides, + StateBackend stateBackend, + GlobalState globalState) { + super(indexName, id, liveSettingsOverrides, stateBackend, globalState); } @Override public ImmutableIndexState createIndexState( - IndexStateInfo indexStateInfo, FieldAndFacetState fieldAndFacetState) { + IndexStateInfo indexStateInfo, + FieldAndFacetState fieldAndFacetState, + IndexLiveSettings liveSettingsOverrides) { assertEquals(expectedState, indexStateInfo); + assertEquals(expectedLiveSettingsOverrides, liveSettingsOverrides); verifyFieldsState.accept(fieldAndFacetState); lastFieldAndFacetState = fieldAndFacetState; return nextState; @@ -130,6 +150,33 @@ public void testLoadsExistingState() throws IOException { verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); } + @Test + public void testLoadsExistingState_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder().setIndexName("test_index").setCommitted(false).build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); + } + @Test public void testLoadFixesIndexName() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -175,6 +222,35 @@ public void testLoadNoExistingState() throws IOException { } } + @Test + public void testCreateIndexState_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(null); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = stateManager.getDefaultStateInfo(); + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.create(); + assertSame(mockState, stateManager.getCurrent()); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockBackend, times(1)) + .commitIndexState( + BackendGlobalState.getUniqueIndexName("test_index", "test_id"), + stateManager.getDefaultStateInfo()); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); + } + @Test public void testCreateIndexState() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -471,6 +547,89 @@ public void testUpdateExistingSettings() throws IOException { verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2); } + @Test + public void testUpdateExistingSettings_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder() + .setIndexName("test_index") + .setCommitted(true) + .setSettings( + IndexSettings.newBuilder() + .setConcurrentMergeSchedulerMaxThreadCount( + Int32Value.newBuilder().setValue(10).build()) + .setConcurrentMergeSchedulerMaxMergeCount( + Int32Value.newBuilder().setValue(5).build()) + .setNrtCachingDirectoryMaxSizeMB( + DoubleValue.newBuilder().setValue(100.0).build()) + .build()) + .build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.isStarted()).thenReturn(false); + when(mockState.getCurrentStateInfo()).thenReturn(initialState); + when(mockState.getFieldAndFacetState()).thenReturn(mock(FieldAndFacetState.class)); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + IndexSettings settingsUpdate = + IndexSettings.newBuilder() + .setDirectory(StringValue.newBuilder().setValue("MMapDirectory").build()) + .setIndexMergeSchedulerAutoThrottle(BoolValue.newBuilder().setValue(true).build()) + .setNrtCachingDirectoryMaxSizeMB(DoubleValue.newBuilder().setValue(75.0).build()) + .build(); + IndexSettings expectedSavedSettings = + IndexSettings.newBuilder() + .setDirectory(StringValue.newBuilder().setValue("MMapDirectory").build()) + .setIndexMergeSchedulerAutoThrottle(BoolValue.newBuilder().setValue(true).build()) + .setNrtCachingDirectoryMaxSizeMB(DoubleValue.newBuilder().setValue(75.0).build()) + .setConcurrentMergeSchedulerMaxThreadCount(Int32Value.newBuilder().setValue(10).build()) + .setConcurrentMergeSchedulerMaxMergeCount(Int32Value.newBuilder().setValue(5).build()) + .build(); + IndexSettings expectedMergedSettings = + ImmutableIndexState.DEFAULT_INDEX_SETTINGS.toBuilder() + .setDirectory(StringValue.newBuilder().setValue("MMapDirectory").build()) + .setIndexMergeSchedulerAutoThrottle(BoolValue.newBuilder().setValue(true).build()) + .setNrtCachingDirectoryMaxSizeMB(DoubleValue.newBuilder().setValue(75.0).build()) + .setConcurrentMergeSchedulerMaxThreadCount(Int32Value.newBuilder().setValue(10).build()) + .setConcurrentMergeSchedulerMaxMergeCount(Int32Value.newBuilder().setValue(5).build()) + .build(); + + ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); + when(mockState2.getMergedSettings()).thenReturn(expectedMergedSettings); + + IndexStateInfo expectedStateInfo = + initialState.toBuilder().setGen(1).setSettings(expectedSavedSettings).build(); + MockStateManager.nextState = mockState2; + MockStateManager.expectedState = expectedStateInfo; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + assertEquals(expectedMergedSettings, stateManager.updateSettings(settingsUpdate)); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockBackend, times(1)) + .commitIndexState( + BackendGlobalState.getUniqueIndexName("test_index", "test_id"), expectedStateInfo); + verify(mockState, times(1)).isStarted(); + verify(mockState, times(1)).getCurrentStateInfo(); + verify(mockState, times(1)).getFieldAndFacetState(); + verify(mockState2, times(1)).getMergedSettings(); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2); + } + @Test public void testUpdateSettingsNoExistingState() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -543,18 +702,66 @@ public void testGetLiveSettings() throws IOException { .thenReturn(initialState); ImmutableIndexState mockState = mock(ImmutableIndexState.class); - when(mockState.getMergedLiveSettings()).thenReturn(indexLiveSettings); + when(mockState.getMergedLiveSettings(false)).thenReturn(indexLiveSettings); MockStateManager.nextState = mockState; MockStateManager.expectedState = initialState; stateManager.load(); assertSame(mockState, stateManager.getCurrent()); - assertEquals(indexLiveSettings, stateManager.getLiveSettings()); + assertEquals(indexLiveSettings, stateManager.getLiveSettings(false)); verify(mockBackend, times(1)) .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); - verify(mockState, times(1)).getMergedLiveSettings(); + verify(mockState, times(1)).getMergedLiveSettings(false); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); + } + + @Test + public void testGetLiveSettings_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexLiveSettings indexLiveSettings = + IndexLiveSettings.newBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(10.0).build()) + .setSegmentsPerTier(Int32Value.newBuilder().setValue(20).build()) + .build(); + IndexLiveSettings settingsWithLocal = + indexLiveSettings.toBuilder() + .setSliceMaxSegments(Int32Value.newBuilder().setValue(1).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(1).build()) + .build(); + IndexStateInfo initialState = + IndexStateInfo.newBuilder() + .setIndexName("test_index") + .setCommitted(true) + .setLiveSettings(indexLiveSettings) + .build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.getMergedLiveSettings(false)).thenReturn(indexLiveSettings); + when(mockState.getMergedLiveSettings(true)).thenReturn(settingsWithLocal); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + assertEquals(indexLiveSettings, stateManager.getLiveSettings(false)); + assertEquals(settingsWithLocal, stateManager.getLiveSettings(true)); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockState, times(1)).getMergedLiveSettings(false); + verify(mockState, times(1)).getMergedLiveSettings(true); verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); } @@ -570,7 +777,7 @@ public void testGetLiveSettingsNoExistingState() throws IOException { .thenReturn(null); try { - stateManager.getLiveSettings(); + stateManager.getLiveSettings(false); fail(); } catch (IllegalStateException e) { assertEquals("No state for index: test_index", e.getMessage()); @@ -603,7 +810,7 @@ public void testUpdateLiveSettingsNoop() throws IOException { assertSame(mockState, stateManager.getCurrent()); ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); - when(mockState2.getMergedLiveSettings()) + when(mockState2.getMergedLiveSettings(false)) .thenReturn(ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS); ShardState mockShard = mock(ShardState.class); Map mockShardMap = @@ -616,7 +823,7 @@ public void testUpdateLiveSettingsNoop() throws IOException { assertEquals( ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS, - stateManager.updateLiveSettings(IndexLiveSettings.newBuilder().build())); + stateManager.updateLiveSettings(IndexLiveSettings.newBuilder().build(), false)); verify(mockBackend, times(1)) .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); @@ -625,7 +832,7 @@ public void testUpdateLiveSettingsNoop() throws IOException { BackendGlobalState.getUniqueIndexName("test_index", "test_id"), expectedStateInfo); verify(mockState, times(1)).getCurrentStateInfo(); verify(mockState, times(1)).getFieldAndFacetState(); - verify(mockState2, times(1)).getMergedLiveSettings(); + verify(mockState2, times(1)).getMergedLiveSettings(false); verify(mockState2, times(1)).getShards(); verify(mockShard, times(1)).updatedLiveSettings(IndexLiveSettings.newBuilder().build()); @@ -671,7 +878,7 @@ public void testUpdateEmptyLiveSettings() throws IOException { .build(); ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); - when(mockState2.getMergedLiveSettings()).thenReturn(expectedMergedSettings); + when(mockState2.getMergedLiveSettings(false)).thenReturn(expectedMergedSettings); ShardState mockShard = mock(ShardState.class); Map mockShardMap = ImmutableMap.builder().put(0, mockShard).build(); @@ -682,7 +889,7 @@ public void testUpdateEmptyLiveSettings() throws IOException { MockStateManager.nextState = mockState2; MockStateManager.expectedState = expectedStateInfo; - assertEquals(expectedMergedSettings, stateManager.updateLiveSettings(settingsUpdate)); + assertEquals(expectedMergedSettings, stateManager.updateLiveSettings(settingsUpdate, false)); verify(mockBackend, times(1)) .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); @@ -691,7 +898,7 @@ public void testUpdateEmptyLiveSettings() throws IOException { BackendGlobalState.getUniqueIndexName("test_index", "test_id"), expectedStateInfo); verify(mockState, times(1)).getCurrentStateInfo(); verify(mockState, times(1)).getFieldAndFacetState(); - verify(mockState2, times(1)).getMergedLiveSettings(); + verify(mockState2, times(1)).getMergedLiveSettings(false); verify(mockState2, times(1)).getShards(); verify(mockShard, times(1)).updatedLiveSettings(settingsUpdate); @@ -752,7 +959,90 @@ public void testUpdateExistingLiveSettings() throws IOException { .build(); ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); - when(mockState2.getMergedLiveSettings()).thenReturn(expectedMergedSettings); + when(mockState2.getMergedLiveSettings(false)).thenReturn(expectedMergedSettings); + ShardState mockShard = mock(ShardState.class); + Map mockShardMap = + ImmutableMap.builder().put(0, mockShard).build(); + when(mockState2.getShards()).thenReturn(mockShardMap); + + IndexStateInfo expectedStateInfo = + initialState.toBuilder().setGen(1).setLiveSettings(expectedSavedSettings).build(); + MockStateManager.nextState = mockState2; + MockStateManager.expectedState = expectedStateInfo; + + assertEquals(expectedMergedSettings, stateManager.updateLiveSettings(settingsUpdate, false)); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockBackend, times(1)) + .commitIndexState( + BackendGlobalState.getUniqueIndexName("test_index", "test_id"), expectedStateInfo); + verify(mockState, times(1)).getCurrentStateInfo(); + verify(mockState, times(1)).getFieldAndFacetState(); + verify(mockState2, times(1)).getMergedLiveSettings(false); + verify(mockState2, times(1)).getShards(); + verify(mockShard, times(1)).updatedLiveSettings(settingsUpdate); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2, mockShard); + } + + @Test + public void testUpdateExistingLiveSettings_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder() + .setIndexName("test_index") + .setCommitted(true) + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(10).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .build()) + .build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.getCurrentStateInfo()).thenReturn(initialState); + when(mockState.getFieldAndFacetState()).thenReturn(mock(FieldAndFacetState.class)); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + IndexLiveSettings settingsUpdate = + IndexLiveSettings.newBuilder() + .setSliceMaxSegments(Int32Value.newBuilder().setValue(3).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + IndexLiveSettings expectedSavedSettings = + IndexLiveSettings.newBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(3).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + IndexLiveSettings expectedMergedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(3).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + + ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); + when(mockState2.getMergedLiveSettings(false)).thenReturn(expectedMergedSettings); ShardState mockShard = mock(ShardState.class); Map mockShardMap = ImmutableMap.builder().put(0, mockShard).build(); @@ -762,8 +1052,9 @@ public void testUpdateExistingLiveSettings() throws IOException { initialState.toBuilder().setGen(1).setLiveSettings(expectedSavedSettings).build(); MockStateManager.nextState = mockState2; MockStateManager.expectedState = expectedStateInfo; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; - assertEquals(expectedMergedSettings, stateManager.updateLiveSettings(settingsUpdate)); + assertEquals(expectedMergedSettings, stateManager.updateLiveSettings(settingsUpdate, false)); verify(mockBackend, times(1)) .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); @@ -772,7 +1063,7 @@ public void testUpdateExistingLiveSettings() throws IOException { BackendGlobalState.getUniqueIndexName("test_index", "test_id"), expectedStateInfo); verify(mockState, times(1)).getCurrentStateInfo(); verify(mockState, times(1)).getFieldAndFacetState(); - verify(mockState2, times(1)).getMergedLiveSettings(); + verify(mockState2, times(1)).getMergedLiveSettings(false); verify(mockState2, times(1)).getShards(); verify(mockShard, times(1)).updatedLiveSettings(settingsUpdate); @@ -790,13 +1081,159 @@ public void testUpdateLiveSettingsNoExistingState() throws IOException { .thenReturn(null); try { - stateManager.updateLiveSettings(IndexLiveSettings.newBuilder().build()); + stateManager.updateLiveSettings(IndexLiveSettings.newBuilder().build(), false); fail(); } catch (IllegalStateException e) { assertEquals("No state for index: test_index", e.getMessage()); } } + @Test + public void testUpdateLocalLiveSettings_noInitialOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager("test_index", "test_id", mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder() + .setIndexName("test_index") + .setCommitted(true) + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(10).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .build()) + .build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.getCurrentStateInfo()).thenReturn(initialState); + when(mockState.getFieldAndFacetState()).thenReturn(mock(FieldAndFacetState.class)); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + IndexLiveSettings settingsUpdate = + IndexLiveSettings.newBuilder() + .setSliceMaxSegments(Int32Value.newBuilder().setValue(3).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + IndexLiveSettings expectedMergedSettingsWithLocal = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(3).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + + ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); + when(mockState2.getMergedLiveSettings(true)).thenReturn(expectedMergedSettingsWithLocal); + ShardState mockShard = mock(ShardState.class); + Map mockShardMap = + ImmutableMap.builder().put(0, mockShard).build(); + when(mockState2.getShards()).thenReturn(mockShardMap); + + MockStateManager.nextState = mockState2; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = settingsUpdate; + + assertEquals( + expectedMergedSettingsWithLocal, stateManager.updateLiveSettings(settingsUpdate, true)); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockState, times(1)).getCurrentStateInfo(); + verify(mockState, times(1)).getFieldAndFacetState(); + verify(mockState2, times(1)).getMergedLiveSettings(true); + verify(mockState2, times(1)).getShards(); + verify(mockShard, times(1)).updatedLiveSettings(settingsUpdate); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2, mockShard); + } + + @Test + public void testUpdateLocalLiveSettings_withInitialOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder() + .setIndexName("test_index") + .setCommitted(true) + .setLiveSettings( + IndexLiveSettings.newBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(10).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .build()) + .build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.getCurrentStateInfo()).thenReturn(initialState); + when(mockState.getFieldAndFacetState()).thenReturn(mock(FieldAndFacetState.class)); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + IndexLiveSettings settingsUpdate = + IndexLiveSettings.newBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + IndexLiveSettings expectedMergedLocalSettings = + LIVE_SETTINGS_OVERRIDES.toBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + IndexLiveSettings expectedMergedSettingsWithLocal = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setMaxRefreshSec(DoubleValue.newBuilder().setValue(15.0).build()) + .setAddDocumentsMaxBufferLen(Int32Value.newBuilder().setValue(250).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(1).build()) + .setSliceMaxDocs(Int32Value.newBuilder().setValue(10000).build()) + .setIndexRamBufferSizeMB(DoubleValue.newBuilder().setValue(512.0).build()) + .build(); + + ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); + when(mockState2.getMergedLiveSettings(true)).thenReturn(expectedMergedSettingsWithLocal); + ShardState mockShard = mock(ShardState.class); + Map mockShardMap = + ImmutableMap.builder().put(0, mockShard).build(); + when(mockState2.getShards()).thenReturn(mockShardMap); + + MockStateManager.nextState = mockState2; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = expectedMergedLocalSettings; + + assertEquals( + expectedMergedSettingsWithLocal, stateManager.updateLiveSettings(settingsUpdate, true)); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockState, times(1)).getCurrentStateInfo(); + verify(mockState, times(1)).getFieldAndFacetState(); + verify(mockState2, times(1)).getMergedLiveSettings(true); + verify(mockState2, times(1)).getShards(); + verify(mockShard, times(1)).updatedLiveSettings(settingsUpdate); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2, mockShard); + } + @Test public void testUpdateFields() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -868,6 +1305,80 @@ public void testUpdateFields() throws IOException { verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2); } + @Test + public void testUpdateFields_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder().setIndexName("test_index").setCommitted(true).build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.getCurrentStateInfo()).thenReturn(initialState); + when(mockState.getFieldAndFacetState()).thenReturn(new FieldAndFacetState()); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.verifyFieldsState = + (fieldState) -> assertEquals(0, fieldState.getFields().keySet().size()); + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + List addFields = new ArrayList<>(); + addFields.add( + Field.newBuilder() + .setName("field1") + .setType(FieldType.FLOAT) + .setStoreDocValues(true) + .setMultiValued(true) + .build()); + addFields.add( + Field.newBuilder() + .setName("field2") + .setType(FieldType.ATOM) + .setStoreDocValues(true) + .setMultiValued(false) + .build()); + + IndexStateInfo expectedState = + initialState.toBuilder() + .setGen(1) + .putFields("field1", addFields.get(0)) + .putFields("field2", addFields.get(1)) + .build(); + + ImmutableIndexState mockState2 = mock(ImmutableIndexState.class); + MockStateManager.nextState = mockState2; + MockStateManager.expectedState = expectedState; + MockStateManager.verifyFieldsState = + (fieldState) -> { + assertEquals(2, fieldState.getFields().size()); + assertTrue(fieldState.getFields().containsKey("field1")); + assertTrue(fieldState.getFields().containsKey("field2")); + }; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.updateFields(addFields); + assertSame(mockState2, stateManager.getCurrent()); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockBackend, times(1)) + .commitIndexState( + BackendGlobalState.getUniqueIndexName("test_index", "test_id"), expectedState); + verify(mockState, times(2)).getCurrentStateInfo(); + verify(mockState, times(1)).getFieldAndFacetState(); + verify(mockState2, times(1)).getAllFieldsJSON(); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState, mockState2); + } + @Test public void testUpdateFieldsAddToExisting() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -1074,6 +1585,41 @@ public void testStartIndex() throws IOException { verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); } + @Test + public void testStartIndex_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalState mockGlobalState = mock(GlobalState.class); + BackendStateManager stateManager = + new MockStateManager( + "test_index", "test_id", LIVE_SETTINGS_OVERRIDES, mockBackend, mockGlobalState); + + IndexStateInfo initialState = + IndexStateInfo.newBuilder().setIndexName("test_index").setCommitted(true).build(); + when(mockBackend.loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id"))) + .thenReturn(initialState); + + ImmutableIndexState mockState = mock(ImmutableIndexState.class); + when(mockState.getCurrentStateInfo()).thenReturn(initialState); + when(mockState.isStarted()).thenReturn(false); + MockStateManager.nextState = mockState; + MockStateManager.expectedState = initialState; + MockStateManager.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + + stateManager.load(); + assertSame(mockState, stateManager.getCurrent()); + + ReplicationServerClient mockReplicationClient = mock(ReplicationServerClient.class); + stateManager.start(Mode.PRIMARY, Path.of("/tmp"), 1, mockReplicationClient); + + verify(mockBackend, times(1)) + .loadIndexState(BackendGlobalState.getUniqueIndexName("test_index", "test_id")); + verify(mockState, times(1)).getCurrentStateInfo(); + verify(mockState, times(1)).isStarted(); + verify(mockState, times(1)).start(Mode.PRIMARY, Path.of("/tmp"), 1, mockReplicationClient); + + verifyNoMoreInteractions(mockBackend, mockGlobalState, mockState); + } + @Test public void testStartIndexReplicaSkipCommit() throws IOException { StateBackend mockBackend = mock(StateBackend.class); diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BucketedTieredMergePolicyTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BucketedTieredMergePolicyTest.java index 3384e712c..8dd9a02ce 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BucketedTieredMergePolicyTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/BucketedTieredMergePolicyTest.java @@ -191,7 +191,8 @@ private void setLiveSettings(int virtualShards, int maxDocs, int maxSegments) th .setVirtualShards(Int32Value.newBuilder().setValue(virtualShards).build()) .setSliceMaxDocs(Int32Value.newBuilder().setValue(maxDocs).build()) .setSliceMaxSegments(Int32Value.newBuilder().setValue(maxSegments).build()) - .build()); + .build(), + false); } private void addData(int count) throws Exception { diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexStateTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexStateTest.java index 0929a9a8e..177e821d0 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexStateTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/index/ImmutableIndexStateTest.java @@ -147,6 +147,7 @@ private ImmutableIndexState getIndexState( BackendGlobalState.getUniqueIndexName("test_index", "test_id"), stateInfo, fieldState, + IndexLiveSettings.newBuilder().build(), shards); } @@ -185,6 +186,16 @@ private void verifyDoubleLiveSetting( expected, getFunc.apply(getIndexState(getStateWithLiveSettings(builder.build()))), 0.0); } + private void verifyBoolLiveSetting( + boolean expected, + Function getFunc, + Consumer setMessage) + throws IOException { + IndexLiveSettings.Builder builder = IndexLiveSettings.newBuilder(); + setMessage.accept(builder); + assertEquals(expected, getFunc.apply(getIndexState(getStateWithLiveSettings(builder.build())))); + } + private void verifyIntLiveSetting( int expected, Function getFunc, @@ -237,6 +248,10 @@ private DoubleValue wrap(double value) { return DoubleValue.newBuilder().setValue(value).build(); } + private BoolValue wrap(boolean value) { + return BoolValue.newBuilder().setValue(value).build(); + } + private Int32Value wrap(int value) { return Int32Value.newBuilder().setValue(value).build(); } @@ -622,6 +637,7 @@ private ImmutableIndexState getIndexStateForVirtualShading( BackendGlobalState.getUniqueIndexName("test_index", "test_id"), getStateWithLiveSettings(settings), new FieldAndFacetState(), + IndexLiveSettings.newBuilder().build(), new HashMap<>()); } @@ -784,6 +800,17 @@ public void testMaxMergePreCopyDurationSec_invalid() throws IOException { assertLiveSettingException(expectedMsg, b -> b.setMaxMergePreCopyDurationSec(wrap(-1L))); } + @Test + public void testVerboseMetrics_default() throws IOException { + assertFalse(getIndexState(getEmptyState()).getVerboseMetrics()); + } + + @Test + public void testVerboseMetrics_set() throws IOException { + verifyBoolLiveSetting( + true, ImmutableIndexState::getVerboseMetrics, b -> b.setVerboseMetrics(wrap(true))); + } + @Test public void testGetCurrentStateInfo() throws IOException { IndexStateInfo indexStateInfo = getEmptyState(); @@ -824,7 +851,66 @@ public void testGetMergedLiveSettings() throws IOException { .setMaxRefreshSec(wrap(10.0)) .setSegmentsPerTier(wrap(5)) .build(); - assertEquals(expectedMergedSettings, indexState.getMergedLiveSettings()); + assertEquals(expectedMergedSettings, indexState.getMergedLiveSettings(false)); + assertEquals(expectedMergedSettings, indexState.getMergedLiveSettings(true)); + } + + private ImmutableIndexState getIndexStateForLiveSettingsOverrides( + IndexLiveSettings settings, IndexLiveSettings overrides) throws IOException { + IndexStateManager mockManager = mock(IndexStateManager.class); + GlobalState mockGlobalState = mock(GlobalState.class); + + String configFile = "nodeName: \"lucene_server_foo\""; + LuceneServerConfiguration dummyConfig = + new LuceneServerConfiguration(new ByteArrayInputStream(configFile.getBytes())); + + when(mockGlobalState.getIndexDirBase()).thenReturn(folder.getRoot().toPath()); + when(mockGlobalState.getConfiguration()).thenReturn(dummyConfig); + return new ImmutableIndexState( + mockManager, + mockGlobalState, + "test_index", + BackendGlobalState.getUniqueIndexName("test_index", "test_id"), + getStateWithLiveSettings(settings), + new FieldAndFacetState(), + overrides, + new HashMap<>()); + } + + @Test + public void testLiveSettingsOverrides() throws IOException { + IndexLiveSettings liveSettings = + IndexLiveSettings.newBuilder() + .setDefaultTerminateAfter(wrap(100)) + .setMaxRefreshSec(wrap(10.0)) + .setSegmentsPerTier(wrap(5)) + .build(); + IndexLiveSettings liveSettingsOverrides = + IndexLiveSettings.newBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(1).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(1).build()) + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(10).build()) + .build(); + ImmutableIndexState indexState = + getIndexStateForLiveSettingsOverrides(liveSettings, liveSettingsOverrides); + IndexLiveSettings expectedMergedSettings = + ImmutableIndexState.DEFAULT_INDEX_LIVE_SETTINGS.toBuilder() + .setDefaultTerminateAfter(wrap(100)) + .setMaxRefreshSec(wrap(10.0)) + .setSegmentsPerTier(wrap(5)) + .build(); + IndexLiveSettings expectedMergedSettingsWithLocal = + expectedMergedSettings.toBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(1).build()) + .setSliceMaxSegments(Int32Value.newBuilder().setValue(1).build()) + .setDefaultTerminateAfter(Int32Value.newBuilder().setValue(10).build()) + .build(); + assertEquals(expectedMergedSettings, indexState.getMergedLiveSettings(false)); + assertEquals(expectedMergedSettingsWithLocal, indexState.getMergedLiveSettings(true)); + + assertEquals(1, indexState.getSliceMaxDocs()); + assertEquals(1, indexState.getSliceMaxSegments()); + assertEquals(10, indexState.getDefaultTerminateAfter()); } @Test diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/TerminateAfterWrapperTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/TerminateAfterWrapperTest.java index f2662bf37..eeb942bf9 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/TerminateAfterWrapperTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/TerminateAfterWrapperTest.java @@ -152,7 +152,8 @@ private void setDefaultTerminateAfter(int defaultTerminateAfter) throws IOExcept IndexLiveSettings.newBuilder() .setDefaultTerminateAfter( Int32Value.newBuilder().setValue(defaultTerminateAfter).build()) - .build()); + .build(), + false); } private SearchResponse doQuery(int terminateAfter, double timeout, boolean profile) { diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/FilterCollectorManagerTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/FilterCollectorManagerTest.java index adeab90b3..6c3706a34 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/FilterCollectorManagerTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/FilterCollectorManagerTest.java @@ -87,7 +87,7 @@ protected void initIndex(String name) throws Exception { getGlobalState() .getIndexStateManager(DEFAULT_TEST_INDEX) .updateLiveSettings( - IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build()); + IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build(), false); List docs = new ArrayList<>(); diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/MaxCollectorManagerTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/MaxCollectorManagerTest.java index ed50a7131..82f240ba5 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/MaxCollectorManagerTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/MaxCollectorManagerTest.java @@ -100,7 +100,7 @@ protected void initIndex(String name) throws Exception { getGlobalState() .getIndexStateManager(DEFAULT_TEST_INDEX) .updateLiveSettings( - IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build()); + IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build(), false); List docs = new ArrayList<>(); int doc_id = 0; diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/NestedCollectorOrderTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/NestedCollectorOrderTest.java index 69418b891..dca0d85a3 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/NestedCollectorOrderTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/search/collectors/additional/NestedCollectorOrderTest.java @@ -65,7 +65,7 @@ protected void initIndex(String name) throws Exception { getGlobalState() .getIndexStateManager(DEFAULT_TEST_INDEX) .updateLiveSettings( - IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build()); + IndexLiveSettings.newBuilder().setSliceMaxSegments(Int32Value.of(1)).build(), false); List docs = new ArrayList<>(); int doc_id = 0; diff --git a/src/test/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalStateTest.java b/src/test/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalStateTest.java index c9c20f929..145b5df2e 100644 --- a/src/test/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalStateTest.java +++ b/src/test/java/com/yelp/nrtsearch/server/luceneserver/state/BackendGlobalStateTest.java @@ -27,10 +27,12 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import com.google.protobuf.Int32Value; import com.yelp.nrtsearch.server.backup.Archiver; import com.yelp.nrtsearch.server.config.LuceneServerConfiguration; import com.yelp.nrtsearch.server.grpc.GlobalStateInfo; import com.yelp.nrtsearch.server.grpc.IndexGlobalState; +import com.yelp.nrtsearch.server.grpc.IndexLiveSettings; import com.yelp.nrtsearch.server.grpc.Mode; import com.yelp.nrtsearch.server.grpc.ReplicationServerClient; import com.yelp.nrtsearch.server.grpc.StartIndexRequest; @@ -67,6 +69,12 @@ public class BackendGlobalStateTest { @Rule public final TemporaryFolder folder = new TemporaryFolder(); + private static final IndexLiveSettings LIVE_SETTINGS_OVERRIDES = + IndexLiveSettings.newBuilder() + .setSliceMaxDocs(Int32Value.newBuilder().setValue(1).build()) + .setVirtualShards(Int32Value.newBuilder().setValue(100).build()) + .build(); + @BeforeClass public static void setup() { String configFile = "nodeName: \"lucene_server_foo\""; @@ -81,12 +89,14 @@ public static void setup() { @Before public void setupTest() { MockBackendGlobalState.idCounter = 0; + MockBackendGlobalState.expectedLiveSettingsOverrides = IndexLiveSettings.newBuilder().build(); } static class MockBackendGlobalState extends BackendGlobalState { public static StateBackend stateBackend; public static Map stateManagers; public static int idCounter = 0; + public static IndexLiveSettings expectedLiveSettingsOverrides; /** * Constructor. @@ -108,7 +118,11 @@ public StateBackend createStateBackend() { @Override public IndexStateManager createIndexStateManager( - String indexName, String indexId, StateBackend stateBackend) { + String indexName, + String indexId, + IndexLiveSettings liveSettingsOverrides, + StateBackend stateBackend) { + assertEquals(expectedLiveSettingsOverrides, liveSettingsOverrides); return stateManagers.get(BackendGlobalState.getUniqueIndexName(indexName, indexId)); } @@ -130,6 +144,21 @@ private LuceneServerConfiguration getConfig() throws IOException { return new LuceneServerConfiguration(new ByteArrayInputStream(configFile.getBytes())); } + private LuceneServerConfiguration getConfigWithLiveSettingsOverrides() throws IOException { + String configFile = + String.join( + "\n", + "stateConfig:", + " backendType: LOCAL", + "stateDir: " + folder.newFolder("state").getAbsolutePath(), + "indexDir: " + folder.newFolder("index").getAbsolutePath(), + "indexLiveSettingsOverrides:", + " test_index:", + " sliceMaxDocs: 1", + " virtualShards: 100"); + return new LuceneServerConfiguration(new ByteArrayInputStream(configFile.getBytes())); + } + @Test public void testCreateNewIndex() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -169,6 +198,47 @@ public void testCreateNewIndex() throws IOException { verifyNoMoreInteractions(mockBackend, mockManager, mockState); } + @Test + public void testCreateNewIndex_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalStateInfo initialState = GlobalStateInfo.newBuilder().build(); + when(mockBackend.loadOrCreateGlobalState()).thenReturn(initialState); + + Map mockManagers = new HashMap<>(); + IndexStateManager mockManager = mock(IndexStateManager.class); + IndexState mockState = mock(IndexState.class); + when(mockManager.getCurrent()).thenReturn(mockState); + mockManagers.put(BackendGlobalState.getUniqueIndexName("test_index", "0"), mockManager); + + MockBackendGlobalState.stateBackend = mockBackend; + MockBackendGlobalState.stateManagers = mockManagers; + MockBackendGlobalState.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + BackendGlobalState backendGlobalState = + new MockBackendGlobalState(getConfigWithLiveSettingsOverrides(), null); + backendGlobalState.createIndex("test_index"); + + assertEquals(1, backendGlobalState.getIndexNames().size()); + assertTrue(backendGlobalState.getIndexNames().contains("test_index")); + assertSame(mockState, backendGlobalState.getIndex("test_index")); + + verify(mockBackend, times(1)).loadOrCreateGlobalState(); + + ArgumentCaptor stateArgumentCaptor = + ArgumentCaptor.forClass(GlobalStateInfo.class); + verify(mockBackend, times(1)).commitGlobalState(stateArgumentCaptor.capture()); + GlobalStateInfo committedState = stateArgumentCaptor.getValue(); + assertEquals(1, committedState.getGen()); + assertEquals(1, committedState.getIndicesMap().size()); + assertEquals( + IndexGlobalState.newBuilder().setId("0").setStarted(false).build(), + committedState.getIndicesMap().get("test_index")); + + verify(mockManager, times(2)).getCurrent(); + verify(mockManager, times(1)).create(); + + verifyNoMoreInteractions(mockBackend, mockManager, mockState); + } + @Test public void testGetIndexStateManager() throws IOException { StateBackend mockBackend = mock(StateBackend.class); @@ -407,6 +477,39 @@ public void testGetRestoredStateIndex() throws IOException { verifyNoMoreInteractions(mockBackend, mockManager, mockState); } + @Test + public void testGetRestoredStateIndex_liveSettingsOverride() throws IOException { + StateBackend mockBackend = mock(StateBackend.class); + GlobalStateInfo initialState = + GlobalStateInfo.newBuilder() + .setGen(11) + .putIndices( + "test_index", + IndexGlobalState.newBuilder().setId("test_id_1").setStarted(false).build()) + .build(); + when(mockBackend.loadOrCreateGlobalState()).thenReturn(initialState); + + Map mockManagers = new HashMap<>(); + IndexStateManager mockManager = mock(IndexStateManager.class); + IndexState mockState = mock(IndexState.class); + when(mockManager.getCurrent()).thenReturn(mockState); + mockManagers.put(BackendGlobalState.getUniqueIndexName("test_index", "test_id_1"), mockManager); + + MockBackendGlobalState.stateBackend = mockBackend; + MockBackendGlobalState.stateManagers = mockManagers; + MockBackendGlobalState.expectedLiveSettingsOverrides = LIVE_SETTINGS_OVERRIDES; + BackendGlobalState backendGlobalState = + new MockBackendGlobalState(getConfigWithLiveSettingsOverrides(), null); + assertSame(mockState, backendGlobalState.getIndex("test_index")); + + verify(mockBackend, times(1)).loadOrCreateGlobalState(); + + verify(mockManager, times(1)).load(); + verify(mockManager, times(1)).getCurrent(); + + verifyNoMoreInteractions(mockBackend, mockManager, mockState); + } + @Test public void testGetIndexNotExists() throws IOException { StateBackend mockBackend = mock(StateBackend.class); diff --git a/src/test/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollectorTest.java b/src/test/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollectorTest.java new file mode 100644 index 000000000..a1ad5e881 --- /dev/null +++ b/src/test/java/com/yelp/nrtsearch/server/monitoring/MergeSchedulerCollectorTest.java @@ -0,0 +1,109 @@ +/* + * Copyright 2023 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yelp.nrtsearch.server.monitoring; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.yelp.nrtsearch.server.luceneserver.GlobalState; +import com.yelp.nrtsearch.server.luceneserver.IndexState; +import com.yelp.nrtsearch.server.luceneserver.ShardState; +import io.prometheus.client.Collector.MetricFamilySamples; +import io.prometheus.client.Collector.MetricFamilySamples.Sample; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.lucene.index.ConcurrentMergeScheduler; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.LiveIndexWriterConfig; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +public class MergeSchedulerCollectorTest { + @Rule public final TemporaryFolder folder = new TemporaryFolder(); + + @Test + public void testCollectMetrics() throws IOException { + GlobalState mockGlobalState = mock(GlobalState.class); + IndexState mockIndexState = mock(IndexState.class); + ShardState mockShardState = mock(ShardState.class); + IndexWriter mockIndexWriter = mock(IndexWriter.class); + LiveIndexWriterConfig mockLiveConfig = mock(LiveIndexWriterConfig.class); + ConcurrentMergeScheduler mockMergeScheduler = mock(ConcurrentMergeScheduler.class); + + when(mockMergeScheduler.mergeThreadCount()).thenReturn(3); + when(mockMergeScheduler.getMaxThreadCount()).thenReturn(4); + when(mockMergeScheduler.getMaxMergeCount()).thenReturn(6); + when(mockLiveConfig.getMergeScheduler()).thenReturn(mockMergeScheduler); + when(mockIndexWriter.getConfig()).thenReturn(mockLiveConfig); + when(mockShardState.getWriter()).thenReturn(mockIndexWriter); + when(mockIndexState.getShard(0)).thenReturn(mockShardState); + when(mockGlobalState.getIndexNames()).thenReturn(Collections.singleton("test_index")); + when(mockGlobalState.getIndex("test_index")).thenReturn(mockIndexState); + + MergeSchedulerCollector collector = new MergeSchedulerCollector(mockGlobalState); + List metrics = collector.collect(); + + assertEquals(3, metrics.size()); + Map metricsMap = new HashMap<>(); + for (MetricFamilySamples samples : metrics) { + metricsMap.put(samples.name, samples); + } + + MetricFamilySamples samples = metricsMap.get("nrt_pending_merge_count"); + assertNotNull(samples); + assertEquals(1, samples.samples.size()); + Sample sample = samples.samples.get(0); + assertEquals(Collections.singletonList("index"), sample.labelNames); + assertEquals(Collections.singletonList("test_index"), sample.labelValues); + assertEquals(3, sample.value, 0); + + samples = metricsMap.get("nrt_max_merge_thread_count"); + assertNotNull(samples); + assertEquals(1, samples.samples.size()); + sample = samples.samples.get(0); + assertEquals(Collections.singletonList("index"), sample.labelNames); + assertEquals(Collections.singletonList("test_index"), sample.labelValues); + assertEquals(4, sample.value, 0); + + samples = metricsMap.get("nrt_max_merge_count"); + assertNotNull(samples); + assertEquals(1, samples.samples.size()); + sample = samples.samples.get(0); + assertEquals(Collections.singletonList("index"), sample.labelNames); + assertEquals(Collections.singletonList("test_index"), sample.labelValues); + assertEquals(6, sample.value, 0); + } + + @Test + public void testNoIndex() { + GlobalState mockGlobalState = mock(GlobalState.class); + when(mockGlobalState.getIndexNames()).thenReturn(Collections.emptySet()); + MergeSchedulerCollector collector = new MergeSchedulerCollector(mockGlobalState); + List metrics = collector.collect(); + + assertEquals(3, metrics.size()); + for (MetricFamilySamples samples : metrics) { + assertTrue(samples.samples.isEmpty()); + } + } +} diff --git a/src/test/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollectorTest.java b/src/test/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollectorTest.java new file mode 100644 index 000000000..1d8c3080f --- /dev/null +++ b/src/test/java/com/yelp/nrtsearch/server/monitoring/VerboseIndexCollectorTest.java @@ -0,0 +1,101 @@ +/* + * Copyright 2023 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yelp.nrtsearch.server.monitoring; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.yelp.nrtsearch.server.grpc.SearchResponse; +import com.yelp.nrtsearch.server.grpc.SearchResponse.Diagnostics; +import com.yelp.nrtsearch.server.grpc.TotalHits; +import com.yelp.nrtsearch.server.luceneserver.GlobalState; +import com.yelp.nrtsearch.server.luceneserver.IndexState; +import io.prometheus.client.Collector.MetricFamilySamples; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.junit.Test; + +public class VerboseIndexCollectorTest { + + @Test + public void testNoIndex() { + GlobalState mockGlobalState = mock(GlobalState.class); + when(mockGlobalState.getIndexNames()).thenReturn(Collections.emptySet()); + + VerboseIndexCollector collector = new VerboseIndexCollector(mockGlobalState); + assertTrue(collector.collect().isEmpty()); + } + + @Test + public void testVerboseMetricsDisabled() throws IOException { + GlobalState mockGlobalState = mock(GlobalState.class); + IndexState mockIndexState = mock(IndexState.class); + + when(mockIndexState.getVerboseMetrics()).thenReturn(false); + when(mockGlobalState.getIndexNames()).thenReturn(Collections.singleton("test_index")); + when(mockGlobalState.getIndex("test_index")).thenReturn(mockIndexState); + + VerboseIndexCollector collector = new VerboseIndexCollector(mockGlobalState); + assertTrue(collector.collect().isEmpty()); + } + + @Test + public void testVerboseMetricsEnabled() throws IOException { + SearchResponse testResponse = + SearchResponse.newBuilder() + .setTotalHits(TotalHits.newBuilder().setValue(10).build()) + .setDiagnostics( + Diagnostics.newBuilder() + .setFirstPassSearchTimeMs(1.0) + .setHighlightTimeMs(2.0) + .setGetFieldsTimeMs(3.0) + .putFacetTimeMs("facet1", 4.0) + .putRescorersTimeMs("rescorer", 5.0) + .build()) + .build(); + VerboseIndexCollector.updateSearchResponseMetrics(testResponse, "test_index"); + + GlobalState mockGlobalState = mock(GlobalState.class); + IndexState mockIndexState = mock(IndexState.class); + + when(mockIndexState.getVerboseMetrics()).thenReturn(true); + when(mockGlobalState.getIndexNames()).thenReturn(Collections.singleton("test_index")); + when(mockGlobalState.getIndex("test_index")).thenReturn(mockIndexState); + + VerboseIndexCollector collector = new VerboseIndexCollector(mockGlobalState); + List metrics = collector.collect(); + assertEquals(5, metrics.size()); + + Map metricsMap = new HashMap<>(); + for (MetricFamilySamples samples : metrics) { + metricsMap.put(samples.name, samples); + } + assertEquals( + Set.of( + "nrt_search_response_size_bytes", + "nrt_search_response_total_hits", + "nrt_search_stage_latency_ms", + "nrt_search_timeout_count", + "nrt_search_terminated_early_count"), + metricsMap.keySet()); + } +} diff --git a/src/test/java/org/apache/lucene/facet/DrillSidewaysQueryCheckTest.java b/src/test/java/org/apache/lucene/facet/DrillSidewaysQueryCheckTest.java new file mode 100644 index 000000000..4cfbe696e --- /dev/null +++ b/src/test/java/org/apache/lucene/facet/DrillSidewaysQueryCheckTest.java @@ -0,0 +1,37 @@ +/* + * Copyright 2024 Yelp Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.lucene.facet; + +import static org.apache.lucene.facet.DrillSidewaysQueryCheck.isDrillSidewaysQuery; +import static org.junit.Assert.*; + +import org.apache.lucene.index.Term; +import org.apache.lucene.search.TermQuery; +import org.junit.Test; +import org.mockito.Mockito; + +public class DrillSidewaysQueryCheckTest { + + @Test + public void testIsDrillSidewaysQuery() { + assertFalse(isDrillSidewaysQuery(null)); + + assertFalse(isDrillSidewaysQuery(new TermQuery(new Term("field", "text")))); + + DrillSidewaysQuery dsq = Mockito.mock(DrillSidewaysQuery.class); + assertTrue(isDrillSidewaysQuery(dsq)); + } +}