diff --git a/internal/core/src/pb/segcore.pb.cc b/internal/core/src/pb/segcore.pb.cc index 257a0c3bb2..8b94397385 100644 --- a/internal/core/src/pb/segcore.pb.cc +++ b/internal/core/src/pb/segcore.pb.cc @@ -111,7 +111,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_segcore_2eproto::offsets[] PRO ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::milvus::proto::segcore::RetrieveRequest, ids_), - PROTOBUF_FIELD_OFFSET(::milvus::proto::segcore::RetrieveRequest, output_fields_), + PROTOBUF_FIELD_OFFSET(::milvus::proto::segcore::RetrieveRequest, output_fields_id_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::milvus::proto::segcore::RetrieveResults, _internal_metadata_), ~0u, // no _extensions_ @@ -151,17 +151,18 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = const char descriptor_table_protodef_segcore_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = "\n\rsegcore.proto\022\024milvus.proto.segcore\032\014s" - "chema.proto\"O\n\017RetrieveRequest\022%\n\003ids\030\001 " - "\001(\0132\030.milvus.proto.schema.IDs\022\025\n\routput_" - "fields\030\002 \003(\t\"m\n\017RetrieveResults\022%\n\003ids\030\001" - " \001(\0132\030.milvus.proto.schema.IDs\0223\n\013fields" - "_data\030\002 \003(\0132\036.milvus.proto.schema.FieldD" - "ata\"P\n\rLoadFieldMeta\022\025\n\rmin_timestamp\030\001 " - "\001(\003\022\025\n\rmax_timestamp\030\002 \001(\003\022\021\n\trow_count\030" - "\003 \001(\003\"Y\n\017LoadSegmentMeta\0222\n\005metas\030\001 \003(\0132" - "#.milvus.proto.segcore.LoadFieldMeta\022\022\n\n" - "total_size\030\002 \001(\003B6Z4github.com/milvus-io" - "/milvus/internal/proto/segcorepbb\006proto3" + "chema.proto\"R\n\017RetrieveRequest\022%\n\003ids\030\001 " + "\001(\0132\030.milvus.proto.schema.IDs\022\030\n\020output_" + "fields_id\030\002 \003(\003\"m\n\017RetrieveResults\022%\n\003id" + "s\030\001 \001(\0132\030.milvus.proto.schema.IDs\0223\n\013fie" + "lds_data\030\002 \003(\0132\036.milvus.proto.schema.Fie" + "ldData\"P\n\rLoadFieldMeta\022\025\n\rmin_timestamp" + "\030\001 \001(\003\022\025\n\rmax_timestamp\030\002 \001(\003\022\021\n\trow_cou" + "nt\030\003 \001(\003\"Y\n\017LoadSegmentMeta\0222\n\005metas\030\001 \003" + "(\0132#.milvus.proto.segcore.LoadFieldMeta\022" + "\022\n\ntotal_size\030\002 \001(\003B6Z4github.com/milvus" + "-io/milvus/internal/proto/segcorepbb\006pro" + "to3" ; static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_segcore_2eproto_deps[1] = { &::descriptor_table_schema_2eproto, @@ -175,7 +176,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_seg static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_segcore_2eproto_once; static bool descriptor_table_segcore_2eproto_initialized = false; const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_segcore_2eproto = { - &descriptor_table_segcore_2eproto_initialized, descriptor_table_protodef_segcore_2eproto, "segcore.proto", 480, + &descriptor_table_segcore_2eproto_initialized, descriptor_table_protodef_segcore_2eproto, "segcore.proto", 483, &descriptor_table_segcore_2eproto_once, descriptor_table_segcore_2eproto_sccs, descriptor_table_segcore_2eproto_deps, 4, 1, schemas, file_default_instances, TableStruct_segcore_2eproto::offsets, file_level_metadata_segcore_2eproto, 4, file_level_enum_descriptors_segcore_2eproto, file_level_service_descriptors_segcore_2eproto, @@ -216,7 +217,7 @@ RetrieveRequest::RetrieveRequest() RetrieveRequest::RetrieveRequest(const RetrieveRequest& from) : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr), - output_fields_(from.output_fields_) { + output_fields_id_(from.output_fields_id_) { _internal_metadata_.MergeFrom(from._internal_metadata_); if (from.has_ids()) { ids_ = new ::milvus::proto::schema::IDs(*from.ids_); @@ -255,7 +256,7 @@ void RetrieveRequest::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - output_fields_.Clear(); + output_fields_id_.Clear(); if (GetArenaNoVirtual() == nullptr && ids_ != nullptr) { delete ids_; } @@ -278,16 +279,14 @@ const char* RetrieveRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPAC CHK_(ptr); } else goto handle_unusual; continue; - // repeated string output_fields = 2; + // repeated int64 output_fields_id = 2; case 2: if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) { - ptr -= 1; - do { - ptr += 1; - ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(add_output_fields(), ptr, ctx, "milvus.proto.segcore.RetrieveRequest.output_fields"); - CHK_(ptr); - if (!ctx->DataAvailable(ptr)) break; - } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 18); + ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedInt64Parser(mutable_output_fields_id(), ptr, ctx); + CHK_(ptr); + } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16) { + add_output_fields_id(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr)); + CHK_(ptr); } else goto handle_unusual; continue; default: { @@ -331,16 +330,16 @@ bool RetrieveRequest::MergePartialFromCodedStream( break; } - // repeated string output_fields = 2; + // repeated int64 output_fields_id = 2; case 2: { if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) { - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString( - input, this->add_output_fields())); - DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->output_fields(this->output_fields_size() - 1).data(), - static_cast(this->output_fields(this->output_fields_size() - 1).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, - "milvus.proto.segcore.RetrieveRequest.output_fields")); + DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPackedPrimitive< + ::PROTOBUF_NAMESPACE_ID::int64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_INT64>( + input, this->mutable_output_fields_id()))); + } else if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (16 & 0xFF)) { + DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline< + ::PROTOBUF_NAMESPACE_ID::int64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_INT64>( + 1, 18u, input, this->mutable_output_fields_id()))); } else { goto handle_unusual; } @@ -380,14 +379,15 @@ void RetrieveRequest::SerializeWithCachedSizes( 1, _Internal::ids(this), output); } - // repeated string output_fields = 2; - for (int i = 0, n = this->output_fields_size(); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->output_fields(i).data(), static_cast(this->output_fields(i).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "milvus.proto.segcore.RetrieveRequest.output_fields"); - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteString( - 2, this->output_fields(i), output); + // repeated int64 output_fields_id = 2; + if (this->output_fields_id_size() > 0) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteTag(2, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); + output->WriteVarint32(_output_fields_id_cached_byte_size_.load( + std::memory_order_relaxed)); + } + for (int i = 0, n = this->output_fields_id_size(); i < n; i++) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64NoTag( + this->output_fields_id(i), output); } if (_internal_metadata_.have_unknown_fields()) { @@ -410,14 +410,17 @@ void RetrieveRequest::SerializeWithCachedSizes( 1, _Internal::ids(this), target); } - // repeated string output_fields = 2; - for (int i = 0, n = this->output_fields_size(); i < n; i++) { - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( - this->output_fields(i).data(), static_cast(this->output_fields(i).length()), - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, - "milvus.proto.segcore.RetrieveRequest.output_fields"); + // repeated int64 output_fields_id = 2; + if (this->output_fields_id_size() > 0) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteTagToArray( + 2, + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, + target); + target = ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream::WriteVarint32ToArray( + _output_fields_id_cached_byte_size_.load(std::memory_order_relaxed), + target); target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: - WriteStringToArray(2, this->output_fields(i), target); + WriteInt64NoTagToArray(this->output_fields_id_, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -441,12 +444,19 @@ size_t RetrieveRequest::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - // repeated string output_fields = 2; - total_size += 1 * - ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->output_fields_size()); - for (int i = 0, n = this->output_fields_size(); i < n; i++) { - total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( - this->output_fields(i)); + // repeated int64 output_fields_id = 2; + { + size_t data_size = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + Int64Size(this->output_fields_id_); + if (data_size > 0) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int32Size( + static_cast<::PROTOBUF_NAMESPACE_ID::int32>(data_size)); + } + int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(data_size); + _output_fields_id_cached_byte_size_.store(cached_size, + std::memory_order_relaxed); + total_size += data_size; } // .milvus.proto.schema.IDs ids = 1; @@ -483,7 +493,7 @@ void RetrieveRequest::MergeFrom(const RetrieveRequest& from) { ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; (void) cached_has_bits; - output_fields_.MergeFrom(from.output_fields_); + output_fields_id_.MergeFrom(from.output_fields_id_); if (from.has_ids()) { mutable_ids()->::milvus::proto::schema::IDs::MergeFrom(from.ids()); } @@ -510,7 +520,7 @@ bool RetrieveRequest::IsInitialized() const { void RetrieveRequest::InternalSwap(RetrieveRequest* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); - output_fields_.InternalSwap(CastToBase(&other->output_fields_)); + output_fields_id_.InternalSwap(&other->output_fields_id_); swap(ids_, other->ids_); } diff --git a/internal/core/src/pb/segcore.pb.h b/internal/core/src/pb/segcore.pb.h index 56b96778c3..ef5d749bb6 100644 --- a/internal/core/src/pb/segcore.pb.h +++ b/internal/core/src/pb/segcore.pb.h @@ -198,25 +198,19 @@ class RetrieveRequest : // accessors ------------------------------------------------------- enum : int { - kOutputFieldsFieldNumber = 2, + kOutputFieldsIdFieldNumber = 2, kIdsFieldNumber = 1, }; - // repeated string output_fields = 2; - int output_fields_size() const; - void clear_output_fields(); - const std::string& output_fields(int index) const; - std::string* mutable_output_fields(int index); - void set_output_fields(int index, const std::string& value); - void set_output_fields(int index, std::string&& value); - void set_output_fields(int index, const char* value); - void set_output_fields(int index, const char* value, size_t size); - std::string* add_output_fields(); - void add_output_fields(const std::string& value); - void add_output_fields(std::string&& value); - void add_output_fields(const char* value); - void add_output_fields(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& output_fields() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_output_fields(); + // repeated int64 output_fields_id = 2; + int output_fields_id_size() const; + void clear_output_fields_id(); + ::PROTOBUF_NAMESPACE_ID::int64 output_fields_id(int index) const; + void set_output_fields_id(int index, ::PROTOBUF_NAMESPACE_ID::int64 value); + void add_output_fields_id(::PROTOBUF_NAMESPACE_ID::int64 value); + const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >& + output_fields_id() const; + ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >* + mutable_output_fields_id(); // .milvus.proto.schema.IDs ids = 1; bool has_ids() const; @@ -231,7 +225,8 @@ class RetrieveRequest : class _Internal; ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField output_fields_; + ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > output_fields_id_; + mutable std::atomic _output_fields_id_cached_byte_size_; ::milvus::proto::schema::IDs* ids_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_segcore_2eproto; @@ -728,69 +723,34 @@ inline void RetrieveRequest::set_allocated_ids(::milvus::proto::schema::IDs* ids // @@protoc_insertion_point(field_set_allocated:milvus.proto.segcore.RetrieveRequest.ids) } -// repeated string output_fields = 2; -inline int RetrieveRequest::output_fields_size() const { - return output_fields_.size(); +// repeated int64 output_fields_id = 2; +inline int RetrieveRequest::output_fields_id_size() const { + return output_fields_id_.size(); } -inline void RetrieveRequest::clear_output_fields() { - output_fields_.Clear(); +inline void RetrieveRequest::clear_output_fields_id() { + output_fields_id_.Clear(); } -inline const std::string& RetrieveRequest::output_fields(int index) const { - // @@protoc_insertion_point(field_get:milvus.proto.segcore.RetrieveRequest.output_fields) - return output_fields_.Get(index); +inline ::PROTOBUF_NAMESPACE_ID::int64 RetrieveRequest::output_fields_id(int index) const { + // @@protoc_insertion_point(field_get:milvus.proto.segcore.RetrieveRequest.output_fields_id) + return output_fields_id_.Get(index); } -inline std::string* RetrieveRequest::mutable_output_fields(int index) { - // @@protoc_insertion_point(field_mutable:milvus.proto.segcore.RetrieveRequest.output_fields) - return output_fields_.Mutable(index); +inline void RetrieveRequest::set_output_fields_id(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) { + output_fields_id_.Set(index, value); + // @@protoc_insertion_point(field_set:milvus.proto.segcore.RetrieveRequest.output_fields_id) } -inline void RetrieveRequest::set_output_fields(int index, const std::string& value) { - // @@protoc_insertion_point(field_set:milvus.proto.segcore.RetrieveRequest.output_fields) - output_fields_.Mutable(index)->assign(value); +inline void RetrieveRequest::add_output_fields_id(::PROTOBUF_NAMESPACE_ID::int64 value) { + output_fields_id_.Add(value); + // @@protoc_insertion_point(field_add:milvus.proto.segcore.RetrieveRequest.output_fields_id) } -inline void RetrieveRequest::set_output_fields(int index, std::string&& value) { - // @@protoc_insertion_point(field_set:milvus.proto.segcore.RetrieveRequest.output_fields) - output_fields_.Mutable(index)->assign(std::move(value)); +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >& +RetrieveRequest::output_fields_id() const { + // @@protoc_insertion_point(field_list:milvus.proto.segcore.RetrieveRequest.output_fields_id) + return output_fields_id_; } -inline void RetrieveRequest::set_output_fields(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - output_fields_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:milvus.proto.segcore.RetrieveRequest.output_fields) -} -inline void RetrieveRequest::set_output_fields(int index, const char* value, size_t size) { - output_fields_.Mutable(index)->assign( - reinterpret_cast(value), size); - // @@protoc_insertion_point(field_set_pointer:milvus.proto.segcore.RetrieveRequest.output_fields) -} -inline std::string* RetrieveRequest::add_output_fields() { - // @@protoc_insertion_point(field_add_mutable:milvus.proto.segcore.RetrieveRequest.output_fields) - return output_fields_.Add(); -} -inline void RetrieveRequest::add_output_fields(const std::string& value) { - output_fields_.Add()->assign(value); - // @@protoc_insertion_point(field_add:milvus.proto.segcore.RetrieveRequest.output_fields) -} -inline void RetrieveRequest::add_output_fields(std::string&& value) { - output_fields_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:milvus.proto.segcore.RetrieveRequest.output_fields) -} -inline void RetrieveRequest::add_output_fields(const char* value) { - GOOGLE_DCHECK(value != nullptr); - output_fields_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:milvus.proto.segcore.RetrieveRequest.output_fields) -} -inline void RetrieveRequest::add_output_fields(const char* value, size_t size) { - output_fields_.Add()->assign(reinterpret_cast(value), size); - // @@protoc_insertion_point(field_add_pointer:milvus.proto.segcore.RetrieveRequest.output_fields) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& -RetrieveRequest::output_fields() const { - // @@protoc_insertion_point(field_list:milvus.proto.segcore.RetrieveRequest.output_fields) - return output_fields_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* -RetrieveRequest::mutable_output_fields() { - // @@protoc_insertion_point(field_mutable_list:milvus.proto.segcore.RetrieveRequest.output_fields) - return &output_fields_; +inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >* +RetrieveRequest::mutable_output_fields_id() { + // @@protoc_insertion_point(field_mutable_list:milvus.proto.segcore.RetrieveRequest.output_fields_id) + return &output_fields_id_; } // ------------------------------------------------------------------- diff --git a/internal/core/src/query/Plan.cpp b/internal/core/src/query/Plan.cpp index e4d82aeb3f..b39b655b89 100644 --- a/internal/core/src/query/Plan.cpp +++ b/internal/core/src/query/Plan.cpp @@ -504,8 +504,8 @@ GetNumOfQueries(const PlaceholderGroup* group) { CreateRetrievePlan(const Schema& schema, proto::segcore::RetrieveRequest&& request) { auto plan = std::make_unique(); plan->ids_ = std::unique_ptr(request.release_ids()); - for (auto& field_name : request.output_fields()) { - plan->field_offsets_.push_back(schema.get_offset(FieldName(field_name))); + for (auto& field_id : request.output_fields_id()) { + plan->field_offsets_.push_back(schema.get_offset(FieldId(field_id))); } return plan; } diff --git a/internal/proto/internal.proto b/internal/proto/internal.proto index e3e1aa1d94..c090d562f2 100644 --- a/internal/proto/internal.proto +++ b/internal/proto/internal.proto @@ -164,7 +164,7 @@ message RetrieveRequest { int64 collectionID = 4; repeated int64 partitionIDs = 5; schema.IDs ids = 6; - repeated string output_fields = 7; + repeated int64 output_fields_id = 7; uint64 travel_timestamp = 8; uint64 guarantee_timestamp = 9; } diff --git a/internal/proto/internalpb/internal.pb.go b/internal/proto/internalpb/internal.pb.go index 7b0273129c..21d462a357 100644 --- a/internal/proto/internalpb/internal.pb.go +++ b/internal/proto/internalpb/internal.pb.go @@ -1306,7 +1306,7 @@ type RetrieveRequest struct { CollectionID int64 `protobuf:"varint,4,opt,name=collectionID,proto3" json:"collectionID,omitempty"` PartitionIDs []int64 `protobuf:"varint,5,rep,packed,name=partitionIDs,proto3" json:"partitionIDs,omitempty"` Ids *schemapb.IDs `protobuf:"bytes,6,opt,name=ids,proto3" json:"ids,omitempty"` - OutputFields []string `protobuf:"bytes,7,rep,name=output_fields,json=outputFields,proto3" json:"output_fields,omitempty"` + OutputFieldsId []int64 `protobuf:"varint,7,rep,packed,name=output_fields_id,json=outputFieldsId,proto3" json:"output_fields_id,omitempty"` TravelTimestamp uint64 `protobuf:"varint,8,opt,name=travel_timestamp,json=travelTimestamp,proto3" json:"travel_timestamp,omitempty"` GuaranteeTimestamp uint64 `protobuf:"varint,9,opt,name=guarantee_timestamp,json=guaranteeTimestamp,proto3" json:"guarantee_timestamp,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1381,9 +1381,9 @@ func (m *RetrieveRequest) GetIds() *schemapb.IDs { return nil } -func (m *RetrieveRequest) GetOutputFields() []string { +func (m *RetrieveRequest) GetOutputFieldsId() []int64 { if m != nil { - return m.OutputFields + return m.OutputFieldsId } return nil } @@ -2212,127 +2212,126 @@ func init() { func init() { proto.RegisterFile("internal.proto", fileDescriptor_41f4a519b878ee3b) } var fileDescriptor_41f4a519b878ee3b = []byte{ - // 1938 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcf, 0x73, 0x23, 0x47, - 0xf5, 0xff, 0x8e, 0x46, 0xb6, 0xa4, 0xa7, 0xb1, 0xad, 0xed, 0xf5, 0x6e, 0xc6, 0xde, 0xcd, 0xc6, - 0x99, 0xe4, 0x0b, 0x26, 0x5b, 0xac, 0x17, 0x07, 0x48, 0x8a, 0xa2, 0xd8, 0xc4, 0x56, 0x58, 0x54, - 0x1b, 0x1b, 0xd3, 0xde, 0xa4, 0x0a, 0x2e, 0x53, 0xad, 0x99, 0xb6, 0x3c, 0x64, 0x7e, 0x31, 0xdd, - 0xf2, 0xae, 0x72, 0xe2, 0xc0, 0x09, 0x0a, 0x0e, 0x54, 0xf1, 0x6f, 0x70, 0xe5, 0xc4, 0x8f, 0xe2, - 0x44, 0x15, 0x7f, 0x01, 0x7f, 0x05, 0x47, 0x28, 0x4e, 0x54, 0xbf, 0xee, 0x19, 0x8d, 0x64, 0xd9, - 0x78, 0xbd, 0x05, 0x84, 0x82, 0xdb, 0xf4, 0xe7, 0xbd, 0xfe, 0xf1, 0x3e, 0xef, 0x47, 0x3f, 0xb5, - 0x60, 0x35, 0x4a, 0x25, 0x2f, 0x52, 0x16, 0x3f, 0xc8, 0x8b, 0x4c, 0x66, 0xe4, 0x56, 0x12, 0xc5, - 0x67, 0x63, 0xa1, 0x47, 0x0f, 0x4a, 0xe1, 0xa6, 0x13, 0x64, 0x49, 0x92, 0xa5, 0x1a, 0xde, 0x74, - 0x44, 0x70, 0xca, 0x13, 0xa6, 0x47, 0xde, 0x6f, 0x2c, 0x58, 0xd9, 0xcf, 0x92, 0x3c, 0x4b, 0x79, - 0x2a, 0x07, 0xe9, 0x49, 0x46, 0x6e, 0xc3, 0x72, 0x9a, 0x85, 0x7c, 0xd0, 0x77, 0xad, 0x2d, 0x6b, - 0xdb, 0xa6, 0x66, 0x44, 0x08, 0x34, 0x8b, 0x2c, 0xe6, 0x6e, 0x63, 0xcb, 0xda, 0xee, 0x50, 0xfc, - 0x26, 0x8f, 0x00, 0x84, 0x64, 0x92, 0xfb, 0x41, 0x16, 0x72, 0xd7, 0xde, 0xb2, 0xb6, 0x57, 0x77, - 0xb7, 0x1e, 0x2c, 0x3c, 0xc5, 0x83, 0x63, 0xa5, 0xb8, 0x9f, 0x85, 0x9c, 0x76, 0x44, 0xf9, 0x49, - 0xde, 0x03, 0xe0, 0xcf, 0x65, 0xc1, 0xfc, 0x28, 0x3d, 0xc9, 0xdc, 0xe6, 0x96, 0xbd, 0xdd, 0xdd, - 0x7d, 0x7d, 0x76, 0x01, 0x73, 0xf8, 0x27, 0x7c, 0xf2, 0x31, 0x8b, 0xc7, 0xfc, 0x88, 0x45, 0x05, - 0xed, 0xe0, 0x24, 0x75, 0x5c, 0xef, 0x4f, 0x16, 0xac, 0x55, 0x06, 0xe0, 0x1e, 0x82, 0x7c, 0x0d, - 0x96, 0x70, 0x0b, 0xb4, 0xa0, 0xbb, 0xfb, 0xe6, 0x05, 0x27, 0x9a, 0xb1, 0x9b, 0xea, 0x29, 0xe4, - 0x23, 0xb8, 0x29, 0xc6, 0xc3, 0xa0, 0x14, 0xf9, 0x88, 0x0a, 0xb7, 0x81, 0x47, 0xbb, 0xda, 0x4a, - 0xa4, 0xbe, 0x80, 0x39, 0xd2, 0xdb, 0xb0, 0xac, 0x56, 0x1a, 0x0b, 0x64, 0xa9, 0xbb, 0x7b, 0x67, - 0xa1, 0x91, 0xc7, 0xa8, 0x42, 0x8d, 0xaa, 0x77, 0x07, 0x36, 0x1e, 0x73, 0x39, 0x67, 0x1d, 0xe5, - 0x3f, 0x18, 0x73, 0x21, 0x8d, 0xf0, 0x69, 0x94, 0xf0, 0xa7, 0x51, 0xf0, 0xc9, 0xfe, 0x29, 0x4b, - 0x53, 0x1e, 0x97, 0xc2, 0x57, 0xe1, 0xce, 0x63, 0x8e, 0x13, 0x22, 0x21, 0xa3, 0x40, 0xcc, 0x89, - 0x6f, 0xc1, 0xcd, 0xc7, 0x5c, 0xf6, 0xc3, 0x39, 0xf8, 0x63, 0x68, 0x1f, 0x2a, 0x67, 0xab, 0x30, - 0xf8, 0x2a, 0xb4, 0x58, 0x18, 0x16, 0x5c, 0x08, 0xc3, 0xe2, 0xdd, 0x85, 0x27, 0x7e, 0x5f, 0xeb, - 0xd0, 0x52, 0x79, 0x51, 0x98, 0x78, 0xdf, 0x07, 0x18, 0xa4, 0x91, 0x3c, 0x62, 0x05, 0x4b, 0xc4, - 0x85, 0x01, 0xd6, 0x07, 0x47, 0x48, 0x56, 0x48, 0x3f, 0x47, 0x3d, 0x43, 0xf9, 0x15, 0xa2, 0xa1, - 0x8b, 0xd3, 0xf4, 0xea, 0xde, 0x77, 0x01, 0x8e, 0x65, 0x11, 0xa5, 0xa3, 0x0f, 0x23, 0x21, 0xd5, - 0x5e, 0x67, 0x4a, 0x4f, 0x19, 0x61, 0x6f, 0x77, 0xa8, 0x19, 0xd5, 0xdc, 0xd1, 0xb8, 0xba, 0x3b, - 0x1e, 0x41, 0xb7, 0xa4, 0xfb, 0x40, 0x8c, 0xc8, 0x43, 0x68, 0x0e, 0x99, 0xe0, 0x97, 0xd2, 0x73, - 0x20, 0x46, 0x7b, 0x4c, 0x70, 0x8a, 0x9a, 0xde, 0x8f, 0x6d, 0x78, 0x65, 0xbf, 0xe0, 0x18, 0xfc, - 0x71, 0xcc, 0x03, 0x19, 0x65, 0xa9, 0xe1, 0xfe, 0xc5, 0x57, 0x23, 0xaf, 0x40, 0x2b, 0x1c, 0xfa, - 0x29, 0x4b, 0x4a, 0xb2, 0x97, 0xc3, 0xe1, 0x21, 0x4b, 0x38, 0xf9, 0x1c, 0xac, 0x06, 0xd5, 0xfa, - 0x0a, 0xc1, 0x98, 0xeb, 0xd0, 0x39, 0x94, 0xbc, 0x09, 0x2b, 0x39, 0x2b, 0x64, 0x54, 0xa9, 0x35, - 0x51, 0x6d, 0x16, 0x54, 0x0e, 0x0d, 0x87, 0x83, 0xbe, 0xbb, 0x84, 0xce, 0xc2, 0x6f, 0xe2, 0x81, - 0x33, 0x5d, 0x6b, 0xd0, 0x77, 0x97, 0x51, 0x36, 0x83, 0x91, 0x2d, 0xe8, 0x56, 0x0b, 0x0d, 0xfa, - 0x6e, 0x0b, 0x55, 0xea, 0x90, 0x72, 0x8e, 0xae, 0x45, 0x6e, 0x7b, 0xcb, 0xda, 0x76, 0xa8, 0x19, - 0x91, 0x87, 0x70, 0xf3, 0x2c, 0x2a, 0xe4, 0x98, 0xc5, 0x26, 0x3e, 0xd5, 0x39, 0x84, 0xdb, 0x41, - 0x0f, 0x2e, 0x12, 0x91, 0x5d, 0x58, 0xcf, 0x4f, 0x27, 0x22, 0x0a, 0xe6, 0xa6, 0x00, 0x4e, 0x59, - 0x28, 0xf3, 0x7e, 0x6f, 0xc1, 0xad, 0x7e, 0x91, 0xe5, 0x9f, 0x09, 0x57, 0x94, 0x24, 0x37, 0x2f, - 0x21, 0x79, 0xe9, 0x3c, 0xc9, 0xde, 0x4f, 0x1b, 0x70, 0x5b, 0x47, 0xd4, 0x51, 0x49, 0xec, 0x3f, - 0xc1, 0x8a, 0xcf, 0xc3, 0xda, 0x74, 0x57, 0xad, 0xb0, 0xd8, 0x8c, 0xff, 0x87, 0xd5, 0xca, 0xc1, - 0x5a, 0xef, 0x5f, 0x1b, 0x52, 0xde, 0x4f, 0x1a, 0xb0, 0xae, 0x9c, 0xfa, 0x3f, 0x36, 0x14, 0x1b, - 0xbf, 0x6d, 0x00, 0xd1, 0xd1, 0x31, 0x48, 0x43, 0xfe, 0xfc, 0xdf, 0xc9, 0xc5, 0xab, 0x00, 0x27, - 0x11, 0x8f, 0xc3, 0x3a, 0x0f, 0x1d, 0x44, 0x5e, 0x8a, 0x03, 0x17, 0x5a, 0xb8, 0x48, 0x65, 0x7f, - 0x39, 0x54, 0xb7, 0x89, 0xee, 0x2c, 0xcc, 0x6d, 0xd2, 0xbe, 0xf2, 0x6d, 0x82, 0xd3, 0xcc, 0x6d, - 0xf2, 0x4b, 0x1b, 0x56, 0x06, 0xa9, 0xe0, 0x85, 0xfc, 0x6f, 0x0e, 0x24, 0x72, 0x17, 0x3a, 0x82, - 0x8f, 0x12, 0xd5, 0xe0, 0xf4, 0xb1, 0x58, 0xdb, 0x74, 0x0a, 0x28, 0x69, 0xa0, 0x2b, 0xeb, 0xa0, - 0xef, 0x76, 0xb4, 0x6b, 0x2b, 0x80, 0xdc, 0x03, 0x90, 0x51, 0xc2, 0x85, 0x64, 0x49, 0xae, 0x2b, - 0x72, 0x93, 0xd6, 0x10, 0x75, 0x0b, 0x14, 0xd9, 0xb3, 0x41, 0x5f, 0xb8, 0xdd, 0x2d, 0x5b, 0xb5, - 0x03, 0x7a, 0x44, 0xbe, 0x0c, 0xed, 0x22, 0x7b, 0xe6, 0x87, 0x4c, 0x32, 0xd7, 0x41, 0xe7, 0x6d, - 0x2c, 0x24, 0x7b, 0x2f, 0xce, 0x86, 0xb4, 0x55, 0x64, 0xcf, 0xfa, 0x4c, 0x32, 0xef, 0xaf, 0x36, - 0xac, 0x1c, 0x73, 0x56, 0x04, 0xa7, 0xd7, 0x77, 0xd8, 0x17, 0xa0, 0x57, 0x70, 0x31, 0x8e, 0xa5, - 0x3f, 0x35, 0x4b, 0x7b, 0x6e, 0x4d, 0xe3, 0xfb, 0x95, 0x71, 0x25, 0xe5, 0xf6, 0x25, 0x94, 0x37, - 0x17, 0x50, 0xee, 0x81, 0x53, 0xe3, 0x57, 0xb8, 0x4b, 0x68, 0xfa, 0x0c, 0x46, 0x7a, 0x60, 0x87, - 0x22, 0x46, 0x8f, 0x75, 0xa8, 0xfa, 0x24, 0xf7, 0xe1, 0x46, 0x1e, 0xb3, 0x80, 0x9f, 0x66, 0x71, - 0xc8, 0x0b, 0x7f, 0x54, 0x64, 0xe3, 0x1c, 0xdd, 0xe5, 0xd0, 0x5e, 0x4d, 0xf0, 0x58, 0xe1, 0xe4, - 0x1d, 0x68, 0x87, 0x22, 0xf6, 0xe5, 0x24, 0xe7, 0xe8, 0xb2, 0xd5, 0x0b, 0x6c, 0xef, 0x8b, 0xf8, - 0xe9, 0x24, 0xe7, 0xb4, 0x15, 0xea, 0x0f, 0xf2, 0x10, 0xd6, 0x05, 0x2f, 0x22, 0x16, 0x47, 0x9f, - 0xf2, 0xd0, 0xe7, 0xcf, 0xf3, 0xc2, 0xcf, 0x63, 0x96, 0xa2, 0x67, 0x1d, 0x4a, 0xa6, 0xb2, 0x0f, - 0x9e, 0xe7, 0xc5, 0x51, 0xcc, 0x52, 0xb2, 0x0d, 0xbd, 0x6c, 0x2c, 0xf3, 0xb1, 0xf4, 0x31, 0xfb, - 0x84, 0x1f, 0x85, 0xe8, 0x68, 0x9b, 0xae, 0x6a, 0xfc, 0x9b, 0x08, 0x0f, 0x42, 0x45, 0xad, 0x2c, - 0xd8, 0x19, 0x8f, 0xfd, 0x2a, 0x02, 0xdc, 0xee, 0x96, 0xb5, 0xdd, 0xa4, 0x6b, 0x1a, 0x7f, 0x5a, - 0xc2, 0x64, 0x07, 0x6e, 0x8e, 0xc6, 0xac, 0x60, 0xa9, 0xe4, 0xbc, 0xa6, 0xed, 0xa0, 0x36, 0xa9, - 0x44, 0xd5, 0x04, 0xef, 0xcf, 0x35, 0xd7, 0x2b, 0x2f, 0x89, 0x6b, 0xb8, 0xfe, 0x3a, 0x7d, 0xe1, - 0xc2, 0x78, 0xb1, 0x17, 0xc7, 0xcb, 0x6b, 0xd0, 0x4d, 0xb8, 0x2c, 0xa2, 0x40, 0xfb, 0x45, 0xa7, - 0x31, 0x68, 0x08, 0xc9, 0x27, 0xd0, 0x3c, 0x8d, 0xa4, 0x0e, 0x08, 0x87, 0xe2, 0xb7, 0x9a, 0x24, - 0xe2, 0x28, 0xe0, 0xa1, 0x3f, 0x8c, 0xb3, 0xa1, 0xf1, 0x03, 0x68, 0x48, 0x45, 0xbf, 0xe2, 0xdf, - 0x28, 0xa4, 0xe3, 0xc4, 0x0f, 0xb2, 0x71, 0x2a, 0x5d, 0xc0, 0xa8, 0x5b, 0xd5, 0xf8, 0xe1, 0x38, - 0xd9, 0x57, 0x28, 0x79, 0x03, 0x56, 0x8c, 0x66, 0x76, 0x72, 0x22, 0xb8, 0x44, 0xf2, 0x6d, 0xea, - 0x68, 0xf0, 0xdb, 0x88, 0x91, 0xaf, 0xc3, 0xa6, 0xe0, 0x2c, 0xe6, 0xa1, 0x5f, 0xe5, 0xb8, 0xf0, - 0x05, 0x32, 0xcb, 0x43, 0x77, 0x19, 0x1d, 0xeb, 0x6a, 0x8d, 0xe3, 0x4a, 0xe1, 0xd8, 0xc8, 0x95, - 0xdf, 0x2a, 0x1a, 0x6a, 0xd3, 0x5a, 0xd8, 0x8a, 0x91, 0xa9, 0xa8, 0x9a, 0xf0, 0x2e, 0xb8, 0xa3, - 0x38, 0x1b, 0xb2, 0xd8, 0x3f, 0xb7, 0x2b, 0x56, 0x6d, 0x9b, 0xde, 0xd6, 0xf2, 0xe3, 0xb9, 0x2d, - 0xbd, 0xbf, 0x34, 0x60, 0x8d, 0x2a, 0xee, 0xf8, 0x19, 0xff, 0x8f, 0x4f, 0xf7, 0xb7, 0xc0, 0x8e, - 0x42, 0x81, 0xe9, 0xde, 0xdd, 0x75, 0x67, 0xcf, 0x6d, 0x7e, 0xb2, 0x0f, 0xfa, 0x82, 0x2a, 0x25, - 0xe5, 0xc6, 0x99, 0x84, 0x33, 0xec, 0x3a, 0xf5, 0x6c, 0x5b, 0x98, 0x6b, 0xed, 0x17, 0xca, 0xb5, - 0xce, 0x85, 0xb9, 0xf6, 0x6b, 0xbb, 0xce, 0xfc, 0x67, 0x35, 0xdb, 0x0c, 0xa5, 0xcd, 0xab, 0x50, - 0xfa, 0x08, 0xba, 0xa6, 0x78, 0xe1, 0x8d, 0xb3, 0x84, 0x37, 0xce, 0xbd, 0x85, 0x73, 0x90, 0x5f, - 0x75, 0xdb, 0x50, 0xdd, 0xd3, 0x08, 0xf5, 0x4d, 0xbe, 0x01, 0x77, 0xce, 0x67, 0x4d, 0x61, 0x38, - 0x2a, 0xd3, 0x66, 0x63, 0x3e, 0x6d, 0x4a, 0x12, 0x43, 0xf2, 0x25, 0x58, 0xaf, 0xe5, 0xcd, 0x74, - 0xa2, 0x76, 0x6d, 0x2d, 0xa7, 0xa6, 0x53, 0xae, 0x9f, 0x39, 0x7f, 0xb4, 0x60, 0xa5, 0xcf, 0x63, - 0x2e, 0x5f, 0x22, 0x6f, 0x16, 0xb4, 0x2f, 0x8d, 0x85, 0xed, 0xcb, 0x4c, 0x7f, 0x60, 0x5f, 0xde, - 0x1f, 0x34, 0xcf, 0xf5, 0x07, 0xaf, 0x83, 0x93, 0x17, 0x51, 0xc2, 0x8a, 0x89, 0xff, 0x09, 0x9f, - 0x94, 0xb9, 0xd3, 0x35, 0xd8, 0x13, 0x3e, 0x11, 0x5e, 0x0a, 0x9b, 0x1f, 0x66, 0x2c, 0xdc, 0x63, - 0x31, 0x4b, 0x03, 0x6e, 0xcc, 0x14, 0xd7, 0xb7, 0xec, 0x1e, 0x40, 0x8d, 0xc9, 0x06, 0x6e, 0x58, - 0x43, 0xbc, 0xbf, 0x59, 0xd0, 0x51, 0x1b, 0x62, 0x57, 0x7d, 0x8d, 0xf5, 0x67, 0xda, 0xa9, 0xc6, - 0x82, 0x76, 0xaa, 0x6a, 0x8c, 0x4b, 0xba, 0xa6, 0x9d, 0x72, 0xad, 0xe3, 0x6d, 0xce, 0x76, 0xbc, - 0xaf, 0x41, 0x37, 0x52, 0x07, 0xf2, 0x73, 0x26, 0x4f, 0x35, 0x4f, 0x1d, 0x0a, 0x08, 0x1d, 0x29, - 0x44, 0xb5, 0xc4, 0xa5, 0x02, 0xb6, 0xc4, 0xcb, 0x57, 0x6e, 0x89, 0xcd, 0x22, 0xd8, 0x12, 0xff, - 0xae, 0x01, 0xae, 0xa1, 0x78, 0xfa, 0xbe, 0xf4, 0x51, 0x1e, 0xe2, 0x33, 0xd7, 0x5d, 0xe8, 0x54, - 0x51, 0x66, 0x9e, 0x77, 0xa6, 0x80, 0xe2, 0xf5, 0x80, 0x27, 0x59, 0x31, 0x39, 0x8e, 0x3e, 0xe5, - 0xc6, 0xf0, 0x1a, 0xa2, 0x6c, 0x3b, 0x1c, 0x27, 0x34, 0x7b, 0x26, 0x4c, 0x85, 0x2d, 0x87, 0xca, - 0xb6, 0x00, 0x7f, 0xc8, 0x60, 0x75, 0x42, 0xcb, 0x9b, 0x14, 0x34, 0xa4, 0xaa, 0x12, 0xd9, 0x80, - 0x36, 0x4f, 0x43, 0x2d, 0x5d, 0x42, 0x69, 0x8b, 0xa7, 0x21, 0x8a, 0x06, 0xb0, 0x6a, 0xde, 0x95, - 0x32, 0x81, 0xd5, 0xd6, 0xd4, 0x58, 0xef, 0x82, 0xc7, 0xbc, 0x03, 0x31, 0x3a, 0x32, 0x9a, 0x74, - 0x45, 0x3f, 0x2d, 0x99, 0x21, 0xf9, 0x00, 0x1c, 0xb5, 0x4b, 0xb5, 0x50, 0xeb, 0xca, 0x0b, 0x75, - 0x79, 0x1a, 0x96, 0x03, 0xef, 0xe7, 0x16, 0xdc, 0x38, 0x47, 0xe1, 0x35, 0xe2, 0xe8, 0x09, 0xb4, - 0x8f, 0xf9, 0x48, 0x2d, 0x51, 0xbe, 0x96, 0xed, 0x5c, 0xf4, 0xf8, 0x7a, 0x81, 0xc3, 0x68, 0xb5, - 0x80, 0xf7, 0x23, 0x0b, 0x00, 0x03, 0x1a, 0x87, 0xe7, 0x82, 0xc5, 0xba, 0x4e, 0xb0, 0xa8, 0x5e, - 0x52, 0xb5, 0x24, 0x05, 0x8f, 0x99, 0x9c, 0xd6, 0x27, 0x61, 0x7c, 0x4f, 0xd2, 0x71, 0x42, 0xb5, - 0xa8, 0x4c, 0x5a, 0xef, 0x67, 0x16, 0x00, 0x16, 0x58, 0x7d, 0x8c, 0xf9, 0xdb, 0xd5, 0xba, 0xfc, - 0x47, 0x60, 0x63, 0x36, 0x25, 0xf6, 0xca, 0x94, 0x10, 0xc8, 0x91, 0xbd, 0xc8, 0x86, 0x8a, 0xa3, - 0xa9, 0xf1, 0x26, 0x6b, 0x34, 0x2f, 0xbf, 0xb0, 0xc0, 0xa9, 0xd1, 0x27, 0x66, 0xb3, 0xd7, 0x9a, - 0xcf, 0x5e, 0xec, 0xf0, 0x54, 0x44, 0xfb, 0xa2, 0x16, 0xe4, 0xc9, 0x34, 0xc8, 0x37, 0xa0, 0x8d, - 0x94, 0xd4, 0xa2, 0x3c, 0x35, 0x51, 0x7e, 0x1f, 0x6e, 0x14, 0x3c, 0xe0, 0xa9, 0x8c, 0x27, 0x7e, - 0x92, 0x85, 0xd1, 0x49, 0xc4, 0x43, 0x8c, 0xf5, 0x36, 0xed, 0x95, 0x82, 0x03, 0x83, 0x7b, 0x7f, - 0xb0, 0x60, 0xf5, 0x3b, 0x63, 0x5e, 0x4c, 0x0e, 0xb3, 0x90, 0xeb, 0x93, 0xbd, 0x78, 0x04, 0xbd, - 0x87, 0xb6, 0x18, 0x7a, 0x74, 0x08, 0xbd, 0xf1, 0x8f, 0x43, 0x48, 0xd0, 0xb6, 0x30, 0x61, 0xa3, - 0x28, 0xd6, 0x3f, 0xec, 0xaf, 0x42, 0xf1, 0xd4, 0xb1, 0xe6, 0xea, 0xd4, 0x14, 0xff, 0xd0, 0x82, - 0x6e, 0x2d, 0x59, 0x54, 0xc9, 0x37, 0xf7, 0x83, 0xbe, 0x56, 0x2c, 0x2c, 0x82, 0xdd, 0x60, 0xfa, - 0x7c, 0x47, 0xd6, 0x61, 0x29, 0x11, 0x23, 0xe3, 0x71, 0x87, 0xea, 0x01, 0xd9, 0x84, 0x76, 0x22, - 0x46, 0xf8, 0xfb, 0xc7, 0x54, 0xce, 0x6a, 0xac, 0xdc, 0x36, 0xed, 0x6c, 0x74, 0x01, 0x99, 0x02, - 0xde, 0xaf, 0x2c, 0x20, 0xa6, 0x71, 0x78, 0xa9, 0x37, 0x5e, 0x0c, 0xd8, 0xfa, 0x13, 0x64, 0x43, - 0x77, 0x66, 0x75, 0x6c, 0xee, 0xca, 0xb3, 0xcf, 0x5d, 0x79, 0xf7, 0xe1, 0x46, 0xc8, 0x4f, 0x98, - 0xea, 0x71, 0xe6, 0x8f, 0xdc, 0x33, 0x82, 0xaa, 0x15, 0x7b, 0xeb, 0x5d, 0xe8, 0x54, 0x7f, 0xad, - 0x90, 0x1e, 0x38, 0x83, 0x34, 0x92, 0xf8, 0x03, 0x2d, 0x4a, 0x47, 0xbd, 0xff, 0x23, 0x5d, 0x68, - 0x7d, 0x8b, 0xb3, 0x58, 0x9e, 0x4e, 0x7a, 0x16, 0x71, 0xa0, 0xfd, 0xfe, 0x30, 0xcd, 0x8a, 0x84, - 0xc5, 0xbd, 0xc6, 0xde, 0x3b, 0xdf, 0xfb, 0xca, 0x28, 0x92, 0xa7, 0xe3, 0xa1, 0xb2, 0x64, 0x47, - 0x9b, 0xf6, 0xc5, 0x28, 0x33, 0x5f, 0x3b, 0xa5, 0xd7, 0x76, 0xd0, 0xda, 0x6a, 0x98, 0x0f, 0x87, - 0xcb, 0x88, 0xbc, 0xfd, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x93, 0x3f, 0x71, 0x80, 0x1a, - 0x00, 0x00, + // 1931 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x5b, 0x73, 0x23, 0x47, + 0xf5, 0xff, 0x8f, 0x46, 0xb6, 0xa4, 0x23, 0xd9, 0xd6, 0xf6, 0x7a, 0x37, 0x63, 0xef, 0x66, 0xe3, + 0x4c, 0xf2, 0x07, 0x93, 0x2d, 0xd6, 0x8b, 0x03, 0x24, 0x45, 0x51, 0x6c, 0x62, 0x2b, 0x2c, 0xaa, + 0x8d, 0x8d, 0x69, 0x6f, 0x52, 0x05, 0x2f, 0x53, 0xad, 0x99, 0xb6, 0x3c, 0x64, 0x6e, 0x4c, 0xb7, + 0xbc, 0xab, 0x3c, 0xf1, 0xc0, 0x13, 0x14, 0x3c, 0x50, 0xc5, 0xd7, 0xe0, 0x95, 0x27, 0x2e, 0xc5, + 0x13, 0x55, 0x7c, 0x02, 0x3e, 0x05, 0xaf, 0x14, 0xc5, 0x03, 0xd5, 0xa7, 0x7b, 0x2e, 0x92, 0x65, + 0xe3, 0xf5, 0x16, 0x10, 0x0a, 0xde, 0xa6, 0x7f, 0xe7, 0xf4, 0xe5, 0xfc, 0xce, 0xa5, 0x8f, 0x5a, + 0xb0, 0x1a, 0x26, 0x92, 0xe7, 0x09, 0x8b, 0x1e, 0x64, 0x79, 0x2a, 0x53, 0x72, 0x2b, 0x0e, 0xa3, + 0xb3, 0x89, 0xd0, 0xa3, 0x07, 0x85, 0x70, 0xb3, 0xe7, 0xa7, 0x71, 0x9c, 0x26, 0x1a, 0xde, 0xec, + 0x09, 0xff, 0x94, 0xc7, 0x4c, 0x8f, 0xdc, 0xdf, 0x58, 0xb0, 0xb2, 0x9f, 0xc6, 0x59, 0x9a, 0xf0, + 0x44, 0x0e, 0x93, 0x93, 0x94, 0xdc, 0x86, 0xe5, 0x24, 0x0d, 0xf8, 0x70, 0xe0, 0x58, 0x5b, 0xd6, + 0xb6, 0x4d, 0xcd, 0x88, 0x10, 0x68, 0xe6, 0x69, 0xc4, 0x9d, 0xc6, 0x96, 0xb5, 0xdd, 0xa1, 0xf8, + 0x4d, 0x1e, 0x01, 0x08, 0xc9, 0x24, 0xf7, 0xfc, 0x34, 0xe0, 0x8e, 0xbd, 0x65, 0x6d, 0xaf, 0xee, + 0x6e, 0x3d, 0x58, 0x78, 0x8a, 0x07, 0xc7, 0x4a, 0x71, 0x3f, 0x0d, 0x38, 0xed, 0x88, 0xe2, 0x93, + 0xbc, 0x07, 0xc0, 0x9f, 0xcb, 0x9c, 0x79, 0x61, 0x72, 0x92, 0x3a, 0xcd, 0x2d, 0x7b, 0xbb, 0xbb, + 0xfb, 0xfa, 0xec, 0x02, 0xe6, 0xf0, 0x4f, 0xf8, 0xf4, 0x63, 0x16, 0x4d, 0xf8, 0x11, 0x0b, 0x73, + 0xda, 0xc1, 0x49, 0xea, 0xb8, 0xee, 0x9f, 0x2c, 0x58, 0x2b, 0x0d, 0xc0, 0x3d, 0x04, 0xf9, 0x1a, + 0x2c, 0xe1, 0x16, 0x68, 0x41, 0x77, 0xf7, 0xcd, 0x0b, 0x4e, 0x34, 0x63, 0x37, 0xd5, 0x53, 0xc8, + 0x47, 0x70, 0x53, 0x4c, 0x46, 0x7e, 0x21, 0xf2, 0x10, 0x15, 0x4e, 0x03, 0x8f, 0x76, 0xb5, 0x95, + 0x48, 0x7d, 0x01, 0x73, 0xa4, 0xb7, 0x61, 0x59, 0xad, 0x34, 0x11, 0xc8, 0x52, 0x77, 0xf7, 0xce, + 0x42, 0x23, 0x8f, 0x51, 0x85, 0x1a, 0x55, 0xf7, 0x0e, 0x6c, 0x3c, 0xe6, 0x72, 0xce, 0x3a, 0xca, + 0x7f, 0x30, 0xe1, 0x42, 0x1a, 0xe1, 0xd3, 0x30, 0xe6, 0x4f, 0x43, 0xff, 0x93, 0xfd, 0x53, 0x96, + 0x24, 0x3c, 0x2a, 0x84, 0xaf, 0xc2, 0x9d, 0xc7, 0x1c, 0x27, 0x84, 0x42, 0x86, 0xbe, 0x98, 0x13, + 0xdf, 0x82, 0x9b, 0x8f, 0xb9, 0x1c, 0x04, 0x73, 0xf0, 0xc7, 0xd0, 0x3e, 0x54, 0xce, 0x56, 0x61, + 0xf0, 0x55, 0x68, 0xb1, 0x20, 0xc8, 0xb9, 0x10, 0x86, 0xc5, 0xbb, 0x0b, 0x4f, 0xfc, 0xbe, 0xd6, + 0xa1, 0x85, 0xf2, 0xa2, 0x30, 0x71, 0xbf, 0x0f, 0x30, 0x4c, 0x42, 0x79, 0xc4, 0x72, 0x16, 0x8b, + 0x0b, 0x03, 0x6c, 0x00, 0x3d, 0x21, 0x59, 0x2e, 0xbd, 0x0c, 0xf5, 0x0c, 0xe5, 0x57, 0x88, 0x86, + 0x2e, 0x4e, 0xd3, 0xab, 0xbb, 0xdf, 0x05, 0x38, 0x96, 0x79, 0x98, 0x8c, 0x3f, 0x0c, 0x85, 0x54, + 0x7b, 0x9d, 0x29, 0x3d, 0x65, 0x84, 0xbd, 0xdd, 0xa1, 0x66, 0x54, 0x73, 0x47, 0xe3, 0xea, 0xee, + 0x78, 0x04, 0xdd, 0x82, 0xee, 0x03, 0x31, 0x26, 0x0f, 0xa1, 0x39, 0x62, 0x82, 0x5f, 0x4a, 0xcf, + 0x81, 0x18, 0xef, 0x31, 0xc1, 0x29, 0x6a, 0xba, 0x3f, 0xb6, 0xe1, 0x95, 0xfd, 0x9c, 0x63, 0xf0, + 0x47, 0x11, 0xf7, 0x65, 0x98, 0x26, 0x86, 0xfb, 0x17, 0x5f, 0x8d, 0xbc, 0x02, 0xad, 0x60, 0xe4, + 0x25, 0x2c, 0x2e, 0xc8, 0x5e, 0x0e, 0x46, 0x87, 0x2c, 0xe6, 0xe4, 0x73, 0xb0, 0xea, 0x97, 0xeb, + 0x2b, 0x04, 0x63, 0xae, 0x43, 0xe7, 0x50, 0xf2, 0x26, 0xac, 0x64, 0x2c, 0x97, 0x61, 0xa9, 0xd6, + 0x44, 0xb5, 0x59, 0x50, 0x39, 0x34, 0x18, 0x0d, 0x07, 0xce, 0x12, 0x3a, 0x0b, 0xbf, 0x89, 0x0b, + 0xbd, 0x6a, 0xad, 0xe1, 0xc0, 0x59, 0x46, 0xd9, 0x0c, 0x46, 0xb6, 0xa0, 0x5b, 0x2e, 0x34, 0x1c, + 0x38, 0x2d, 0x54, 0xa9, 0x43, 0xca, 0x39, 0xba, 0x16, 0x39, 0xed, 0x2d, 0x6b, 0xbb, 0x47, 0xcd, + 0x88, 0x3c, 0x84, 0x9b, 0x67, 0x61, 0x2e, 0x27, 0x2c, 0x32, 0xf1, 0xa9, 0xce, 0x21, 0x9c, 0x0e, + 0x7a, 0x70, 0x91, 0x88, 0xec, 0xc2, 0x7a, 0x76, 0x3a, 0x15, 0xa1, 0x3f, 0x37, 0x05, 0x70, 0xca, + 0x42, 0x99, 0xfb, 0x7b, 0x0b, 0x6e, 0x0d, 0xf2, 0x34, 0xfb, 0x4c, 0xb8, 0xa2, 0x20, 0xb9, 0x79, + 0x09, 0xc9, 0x4b, 0xe7, 0x49, 0x76, 0x7f, 0xda, 0x80, 0xdb, 0x3a, 0xa2, 0x8e, 0x0a, 0x62, 0xff, + 0x09, 0x56, 0x7c, 0x1e, 0xd6, 0xaa, 0x5d, 0xb5, 0xc2, 0x62, 0x33, 0xfe, 0x1f, 0x56, 0x4b, 0x07, + 0x6b, 0xbd, 0x7f, 0x6d, 0x48, 0xb9, 0x3f, 0x69, 0xc0, 0xba, 0x72, 0xea, 0xff, 0xd8, 0x50, 0x6c, + 0xfc, 0xb6, 0x01, 0x44, 0x47, 0xc7, 0x30, 0x09, 0xf8, 0xf3, 0x7f, 0x27, 0x17, 0xaf, 0x02, 0x9c, + 0x84, 0x3c, 0x0a, 0xea, 0x3c, 0x74, 0x10, 0x79, 0x29, 0x0e, 0x1c, 0x68, 0xe1, 0x22, 0xa5, 0xfd, + 0xc5, 0x50, 0xdd, 0x26, 0xba, 0xb3, 0x30, 0xb7, 0x49, 0xfb, 0xca, 0xb7, 0x09, 0x4e, 0x33, 0xb7, + 0xc9, 0x2f, 0x6d, 0x58, 0x19, 0x26, 0x82, 0xe7, 0xf2, 0xbf, 0x39, 0x90, 0xc8, 0x5d, 0xe8, 0x08, + 0x3e, 0x8e, 0x55, 0x83, 0x33, 0xc0, 0x62, 0x6d, 0xd3, 0x0a, 0x50, 0x52, 0x5f, 0x57, 0xd6, 0xe1, + 0xc0, 0xe9, 0x68, 0xd7, 0x96, 0x00, 0xb9, 0x07, 0x20, 0xc3, 0x98, 0x0b, 0xc9, 0xe2, 0x4c, 0x57, + 0xe4, 0x26, 0xad, 0x21, 0xea, 0x16, 0xc8, 0xd3, 0x67, 0xc3, 0x81, 0x70, 0xba, 0x5b, 0xb6, 0x6a, + 0x07, 0xf4, 0x88, 0x7c, 0x19, 0xda, 0x79, 0xfa, 0xcc, 0x0b, 0x98, 0x64, 0x4e, 0x0f, 0x9d, 0xb7, + 0xb1, 0x90, 0xec, 0xbd, 0x28, 0x1d, 0xd1, 0x56, 0x9e, 0x3e, 0x1b, 0x30, 0xc9, 0xdc, 0xbf, 0xd8, + 0xb0, 0x72, 0xcc, 0x59, 0xee, 0x9f, 0x5e, 0xdf, 0x61, 0x5f, 0x80, 0x7e, 0xce, 0xc5, 0x24, 0x92, + 0x5e, 0x65, 0x96, 0xf6, 0xdc, 0x9a, 0xc6, 0xf7, 0x4b, 0xe3, 0x0a, 0xca, 0xed, 0x4b, 0x28, 0x6f, + 0x2e, 0xa0, 0xdc, 0x85, 0x5e, 0x8d, 0x5f, 0xe1, 0x2c, 0xa1, 0xe9, 0x33, 0x18, 0xe9, 0x83, 0x1d, + 0x88, 0x08, 0x3d, 0xd6, 0xa1, 0xea, 0x93, 0xdc, 0x87, 0x1b, 0x59, 0xc4, 0x7c, 0x7e, 0x9a, 0x46, + 0x01, 0xcf, 0xbd, 0x71, 0x9e, 0x4e, 0x32, 0x74, 0x57, 0x8f, 0xf6, 0x6b, 0x82, 0xc7, 0x0a, 0x27, + 0xef, 0x40, 0x3b, 0x10, 0x91, 0x27, 0xa7, 0x19, 0x47, 0x97, 0xad, 0x5e, 0x60, 0xfb, 0x40, 0x44, + 0x4f, 0xa7, 0x19, 0xa7, 0xad, 0x40, 0x7f, 0x90, 0x87, 0xb0, 0x2e, 0x78, 0x1e, 0xb2, 0x28, 0xfc, + 0x94, 0x07, 0x1e, 0x7f, 0x9e, 0xe5, 0x5e, 0x16, 0xb1, 0x04, 0x3d, 0xdb, 0xa3, 0xa4, 0x92, 0x7d, + 0xf0, 0x3c, 0xcb, 0x8f, 0x22, 0x96, 0x90, 0x6d, 0xe8, 0xa7, 0x13, 0x99, 0x4d, 0xa4, 0x87, 0xd9, + 0x27, 0xbc, 0x30, 0x40, 0x47, 0xdb, 0x74, 0x55, 0xe3, 0xdf, 0x44, 0x78, 0x18, 0x28, 0x6a, 0x65, + 0xce, 0xce, 0x78, 0xe4, 0x95, 0x11, 0xe0, 0x74, 0xb7, 0xac, 0xed, 0x26, 0x5d, 0xd3, 0xf8, 0xd3, + 0x02, 0x26, 0x3b, 0x70, 0x73, 0x3c, 0x61, 0x39, 0x4b, 0x24, 0xe7, 0x35, 0xed, 0x1e, 0x6a, 0x93, + 0x52, 0x54, 0x4e, 0x70, 0xff, 0x5c, 0x73, 0xbd, 0xf2, 0x92, 0xb8, 0x86, 0xeb, 0xaf, 0xd3, 0x17, + 0x2e, 0x8c, 0x17, 0x7b, 0x71, 0xbc, 0xbc, 0x06, 0xdd, 0x98, 0xcb, 0x3c, 0xf4, 0xb5, 0x5f, 0x74, + 0x1a, 0x83, 0x86, 0x90, 0x7c, 0x02, 0xcd, 0xd3, 0x50, 0xea, 0x80, 0xe8, 0x51, 0xfc, 0x56, 0x93, + 0x44, 0x14, 0xfa, 0x3c, 0xf0, 0x46, 0x51, 0x3a, 0x32, 0x7e, 0x00, 0x0d, 0xa9, 0xe8, 0x57, 0xfc, + 0x1b, 0x85, 0x64, 0x12, 0x7b, 0x7e, 0x3a, 0x49, 0xa4, 0x03, 0x18, 0x75, 0xab, 0x1a, 0x3f, 0x9c, + 0xc4, 0xfb, 0x0a, 0x25, 0x6f, 0xc0, 0x8a, 0xd1, 0x4c, 0x4f, 0x4e, 0x04, 0x97, 0x48, 0xbe, 0x4d, + 0x7b, 0x1a, 0xfc, 0x36, 0x62, 0xe4, 0xeb, 0xb0, 0x29, 0x38, 0x8b, 0x78, 0xe0, 0x95, 0x39, 0x2e, + 0x3c, 0x81, 0xcc, 0xf2, 0xc0, 0x59, 0x46, 0xc7, 0x3a, 0x5a, 0xe3, 0xb8, 0x54, 0x38, 0x36, 0x72, + 0xe5, 0xb7, 0x92, 0x86, 0xda, 0xb4, 0x16, 0xb6, 0x62, 0xa4, 0x12, 0x95, 0x13, 0xde, 0x05, 0x67, + 0x1c, 0xa5, 0x23, 0x16, 0x79, 0xe7, 0x76, 0xc5, 0xaa, 0x6d, 0xd3, 0xdb, 0x5a, 0x7e, 0x3c, 0xb7, + 0xa5, 0xfb, 0xb7, 0x06, 0xac, 0x51, 0xc5, 0x1d, 0x3f, 0xe3, 0xff, 0xf1, 0xe9, 0xfe, 0x16, 0xd8, + 0x61, 0x20, 0x30, 0xdd, 0xbb, 0xbb, 0xce, 0xec, 0xb9, 0xcd, 0x4f, 0xf6, 0xe1, 0x40, 0x50, 0xa5, + 0xb4, 0x30, 0xe1, 0x5a, 0x57, 0x4e, 0xb8, 0xf6, 0x0b, 0x25, 0x5c, 0xe7, 0xc2, 0x84, 0xfb, 0xb5, + 0x5d, 0xa7, 0xff, 0xb3, 0x9a, 0x72, 0x86, 0xd7, 0xe6, 0x55, 0x78, 0x7d, 0x04, 0x5d, 0x43, 0x28, + 0x5e, 0x3b, 0x4b, 0x78, 0xed, 0xdc, 0x5b, 0x38, 0x07, 0x19, 0x56, 0x57, 0x0e, 0xd5, 0x8d, 0x8d, + 0x50, 0xdf, 0xe4, 0x1b, 0x70, 0xe7, 0x7c, 0xea, 0xe4, 0x86, 0xa3, 0x22, 0x77, 0x36, 0xe6, 0x73, + 0xa7, 0x20, 0x31, 0x20, 0x5f, 0x82, 0xf5, 0x5a, 0xf2, 0x54, 0x13, 0x75, 0xf6, 0xd4, 0x12, 0xab, + 0x9a, 0x72, 0xfd, 0xf4, 0xf9, 0xa3, 0x05, 0x2b, 0x03, 0x1e, 0x71, 0xf9, 0x12, 0xc9, 0xb3, 0xa0, + 0x87, 0x69, 0x2c, 0xec, 0x61, 0x66, 0x9a, 0x04, 0xfb, 0xf2, 0x26, 0xa1, 0x79, 0xae, 0x49, 0x78, + 0x1d, 0x7a, 0x59, 0x1e, 0xc6, 0x2c, 0x9f, 0x7a, 0x9f, 0xf0, 0x69, 0x91, 0x40, 0x5d, 0x83, 0x3d, + 0xe1, 0x53, 0xe1, 0x26, 0xb0, 0xf9, 0x61, 0xca, 0x82, 0x3d, 0x16, 0xb1, 0xc4, 0xe7, 0xc6, 0x4c, + 0x71, 0x7d, 0xcb, 0xee, 0x01, 0xd4, 0x98, 0x6c, 0xe0, 0x86, 0x35, 0xc4, 0xfd, 0xab, 0x05, 0x1d, + 0xb5, 0x21, 0xb6, 0xd6, 0xd7, 0x58, 0x7f, 0xa6, 0xa7, 0x6a, 0x2c, 0xe8, 0xa9, 0xca, 0xee, 0xb8, + 0xa0, 0xab, 0x6a, 0x97, 0x6b, 0x6d, 0x6f, 0x73, 0xb6, 0xed, 0x7d, 0x0d, 0xba, 0xa1, 0x3a, 0x90, + 0x97, 0x31, 0x79, 0xaa, 0x79, 0xea, 0x50, 0x40, 0xe8, 0x48, 0x21, 0xaa, 0x2f, 0x2e, 0x14, 0xb0, + 0x2f, 0x5e, 0xbe, 0x72, 0x5f, 0x6c, 0x16, 0xc1, 0xbe, 0xf8, 0x77, 0x0d, 0x70, 0x0c, 0xc5, 0xd5, + 0x23, 0xd3, 0x47, 0x59, 0x80, 0x6f, 0x5d, 0x77, 0xa1, 0x53, 0x46, 0x99, 0x79, 0xe3, 0xa9, 0x00, + 0xc5, 0xeb, 0x01, 0x8f, 0xd3, 0x7c, 0x7a, 0x1c, 0x7e, 0xca, 0x8d, 0xe1, 0x35, 0x44, 0xd9, 0x76, + 0x38, 0x89, 0x69, 0xfa, 0x4c, 0x98, 0x32, 0x5b, 0x0c, 0x95, 0x6d, 0x3e, 0xfe, 0x9a, 0xc1, 0xea, + 0x84, 0x96, 0x37, 0x29, 0x68, 0x48, 0x55, 0x25, 0xb2, 0x01, 0x6d, 0x9e, 0x04, 0x5a, 0xba, 0x84, + 0xd2, 0x16, 0x4f, 0x02, 0x14, 0x0d, 0x61, 0xd5, 0x3c, 0x2e, 0xa5, 0x02, 0x4b, 0xae, 0x29, 0xb4, + 0xee, 0x05, 0x2f, 0x7a, 0x07, 0x62, 0x7c, 0x64, 0x34, 0xe9, 0x8a, 0x7e, 0x5f, 0x32, 0x43, 0xf2, + 0x01, 0xf4, 0xd4, 0x2e, 0xe5, 0x42, 0xad, 0x2b, 0x2f, 0xd4, 0xe5, 0x49, 0x50, 0x0c, 0xdc, 0x9f, + 0x5b, 0x70, 0xe3, 0x1c, 0x85, 0xd7, 0x88, 0xa3, 0x27, 0xd0, 0x3e, 0xe6, 0x63, 0xb5, 0x44, 0xf1, + 0x64, 0xb6, 0x73, 0xd1, 0x0b, 0xec, 0x05, 0x0e, 0xa3, 0xe5, 0x02, 0xee, 0x8f, 0x2c, 0x00, 0x0c, + 0x68, 0x1c, 0x9e, 0x0b, 0x16, 0xeb, 0x3a, 0xc1, 0xa2, 0x1a, 0x4a, 0xd5, 0x97, 0xe4, 0x3c, 0x62, + 0xb2, 0xaa, 0x4f, 0xc2, 0xf8, 0x9e, 0x24, 0x93, 0x98, 0x6a, 0x51, 0x91, 0xb4, 0xee, 0xcf, 0x2c, + 0x00, 0x2c, 0xb0, 0xfa, 0x18, 0xf3, 0x57, 0xac, 0x75, 0xf9, 0x2f, 0xc1, 0xc6, 0x6c, 0x4a, 0xec, + 0x15, 0x29, 0x21, 0x90, 0x23, 0x7b, 0x91, 0x0d, 0x25, 0x47, 0x95, 0xf1, 0x26, 0x6b, 0x34, 0x2f, + 0xbf, 0xb0, 0xa0, 0x57, 0xa3, 0x4f, 0xcc, 0x66, 0xaf, 0x35, 0x9f, 0xbd, 0xd8, 0xe6, 0xa9, 0x88, + 0xf6, 0x44, 0x2d, 0xc8, 0xe3, 0x2a, 0xc8, 0x37, 0xa0, 0x8d, 0x94, 0xd4, 0xa2, 0x3c, 0x31, 0x51, + 0x7e, 0x1f, 0x6e, 0xe4, 0xdc, 0xe7, 0x89, 0x8c, 0xa6, 0x5e, 0x9c, 0x06, 0xe1, 0x49, 0xc8, 0x03, + 0x8c, 0xf5, 0x36, 0xed, 0x17, 0x82, 0x03, 0x83, 0xbb, 0x7f, 0xb0, 0x60, 0xf5, 0x3b, 0x13, 0x9e, + 0x4f, 0x0f, 0xd3, 0x80, 0xeb, 0x93, 0xbd, 0x78, 0x04, 0xbd, 0x87, 0xb6, 0x18, 0x7a, 0x74, 0x08, + 0xbd, 0xf1, 0x8f, 0x43, 0x48, 0xd0, 0xb6, 0x30, 0x61, 0xa3, 0x28, 0xd6, 0xbf, 0xee, 0xaf, 0x42, + 0x71, 0xe5, 0x58, 0x73, 0x75, 0x6a, 0x8a, 0x7f, 0x68, 0x41, 0xb7, 0x96, 0x2c, 0xaa, 0xe4, 0x9b, + 0xfb, 0x41, 0x5f, 0x2b, 0x16, 0x16, 0xc1, 0xae, 0x5f, 0xbd, 0xe1, 0x91, 0x75, 0x58, 0x8a, 0xc5, + 0xd8, 0x78, 0xbc, 0x47, 0xf5, 0x80, 0x6c, 0x42, 0x3b, 0x16, 0x63, 0xfc, 0x11, 0x64, 0x2a, 0x67, + 0x39, 0x56, 0x6e, 0xab, 0x3a, 0x1b, 0x5d, 0x40, 0x2a, 0xc0, 0xfd, 0x95, 0x05, 0xc4, 0x34, 0x0e, + 0x2f, 0xf5, 0xd0, 0x8b, 0x01, 0x5b, 0x7f, 0x87, 0x6c, 0x60, 0x19, 0x9e, 0xc1, 0xe6, 0xae, 0x3c, + 0xfb, 0xdc, 0x95, 0x77, 0x1f, 0x6e, 0x04, 0xfc, 0x84, 0xa9, 0x1e, 0x67, 0xfe, 0xc8, 0x7d, 0x23, + 0x28, 0x5b, 0xb1, 0xb7, 0xde, 0x85, 0x4e, 0xf9, 0xff, 0x0a, 0xe9, 0x43, 0x6f, 0x98, 0x84, 0x12, + 0x7f, 0xa5, 0x85, 0xc9, 0xb8, 0xff, 0x7f, 0xa4, 0x0b, 0xad, 0x6f, 0x71, 0x16, 0xc9, 0xd3, 0x69, + 0xdf, 0x22, 0x3d, 0x68, 0xbf, 0x3f, 0x4a, 0xd2, 0x3c, 0x66, 0x51, 0xbf, 0xb1, 0xf7, 0xce, 0xf7, + 0xbe, 0x32, 0x0e, 0xe5, 0xe9, 0x64, 0xa4, 0x2c, 0xd9, 0xd1, 0xa6, 0x7d, 0x31, 0x4c, 0xcd, 0xd7, + 0x4e, 0xe1, 0xb5, 0x1d, 0xb4, 0xb6, 0x1c, 0x66, 0xa3, 0xd1, 0x32, 0x22, 0x6f, 0xff, 0x3d, 0x00, + 0x00, 0xff, 0xff, 0x7d, 0x5a, 0x47, 0x9f, 0x85, 0x1a, 0x00, 0x00, } diff --git a/internal/proto/segcore.proto b/internal/proto/segcore.proto index bac5e69c24..fe91fe9a90 100644 --- a/internal/proto/segcore.proto +++ b/internal/proto/segcore.proto @@ -6,7 +6,7 @@ import "schema.proto"; message RetrieveRequest { schema.IDs ids = 1; - repeated string output_fields = 2; + repeated int64 output_fields_id = 2; } message RetrieveResults { diff --git a/internal/proto/segcorepb/segcore.pb.go b/internal/proto/segcorepb/segcore.pb.go index 2364028ad3..b7035f6f37 100644 --- a/internal/proto/segcorepb/segcore.pb.go +++ b/internal/proto/segcorepb/segcore.pb.go @@ -23,7 +23,7 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type RetrieveRequest struct { Ids *schemapb.IDs `protobuf:"bytes,1,opt,name=ids,proto3" json:"ids,omitempty"` - OutputFields []string `protobuf:"bytes,2,rep,name=output_fields,json=outputFields,proto3" json:"output_fields,omitempty"` + OutputFieldsId []int64 `protobuf:"varint,2,rep,packed,name=output_fields_id,json=outputFieldsId,proto3" json:"output_fields_id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -61,9 +61,9 @@ func (m *RetrieveRequest) GetIds() *schemapb.IDs { return nil } -func (m *RetrieveRequest) GetOutputFields() []string { +func (m *RetrieveRequest) GetOutputFieldsId() []int64 { if m != nil { - return m.OutputFields + return m.OutputFieldsId } return nil } @@ -228,26 +228,27 @@ func init() { func init() { proto.RegisterFile("segcore.proto", fileDescriptor_1d79fce784797357) } var fileDescriptor_1d79fce784797357 = []byte{ - // 335 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xc1, 0x4b, 0xf3, 0x30, - 0x18, 0xc6, 0xd9, 0xca, 0xf7, 0xe1, 0xb2, 0x8d, 0x41, 0xf1, 0x50, 0x14, 0x65, 0x74, 0x97, 0x21, - 0xd8, 0xc2, 0x14, 0xc1, 0x93, 0xa0, 0x43, 0x10, 0xf4, 0x92, 0x79, 0xf2, 0x52, 0xd2, 0xf6, 0x75, - 0x0b, 0x36, 0x4d, 0x6d, 0xde, 0x74, 0x63, 0x07, 0xff, 0x76, 0x49, 0x52, 0x71, 0x83, 0x5d, 0xbc, - 0x25, 0x4f, 0x9e, 0xe7, 0xfd, 0x3d, 0x2f, 0x21, 0x43, 0x05, 0xcb, 0x4c, 0xd6, 0x10, 0x55, 0xb5, - 0x44, 0xe9, 0x1f, 0x0b, 0x5e, 0x34, 0x5a, 0xb9, 0x5b, 0xd4, 0xbe, 0x9d, 0x0c, 0x54, 0xb6, 0x02, - 0xc1, 0x9c, 0x1a, 0xa6, 0x64, 0x44, 0x01, 0x6b, 0x0e, 0x0d, 0x50, 0xf8, 0xd4, 0xa0, 0xd0, 0xbf, - 0x20, 0x1e, 0xcf, 0x55, 0xd0, 0x19, 0x77, 0xa6, 0xfd, 0x59, 0x10, 0xed, 0x0f, 0x71, 0xd9, 0xa7, - 0xb9, 0xa2, 0xc6, 0xe4, 0x4f, 0xc8, 0x50, 0x6a, 0xac, 0x34, 0x26, 0xef, 0x1c, 0x8a, 0x5c, 0x05, - 0xdd, 0xb1, 0x37, 0xed, 0xd1, 0x81, 0x13, 0x1f, 0xad, 0x16, 0x7e, 0xed, 0x32, 0x94, 0x2e, 0x50, - 0xfd, 0x89, 0x71, 0x47, 0xfa, 0x6e, 0x78, 0x92, 0x33, 0x64, 0x96, 0xd0, 0x9f, 0x9d, 0x1f, 0xcc, - 0x58, 0xe0, 0x9c, 0x21, 0xa3, 0xc4, 0x45, 0xcc, 0x39, 0x6c, 0xc8, 0xf0, 0x59, 0xb2, 0xdc, 0x3e, - 0xbe, 0x00, 0x32, 0xd3, 0x5a, 0xf0, 0x32, 0x41, 0x2e, 0x40, 0x21, 0x13, 0x95, 0xed, 0xe1, 0xd1, - 0x81, 0xe0, 0xe5, 0xeb, 0x8f, 0x66, 0x4d, 0x6c, 0xb3, 0x63, 0xea, 0xb6, 0x26, 0xb6, 0xf9, 0x35, - 0x9d, 0x92, 0x5e, 0x2d, 0xd7, 0x49, 0x26, 0x75, 0x89, 0x81, 0x67, 0x0d, 0x47, 0xb5, 0x5c, 0x3f, - 0x98, 0x7b, 0xf8, 0x41, 0x46, 0x86, 0xbb, 0x80, 0xa5, 0x80, 0x12, 0x2d, 0xf9, 0x96, 0xfc, 0x13, - 0x80, 0xcc, 0x6c, 0x6e, 0xb6, 0x98, 0x44, 0x87, 0xbe, 0x28, 0xda, 0x6b, 0x4b, 0x5d, 0xc2, 0x3f, - 0x23, 0x04, 0x25, 0xb2, 0x22, 0x51, 0x7c, 0x0b, 0x6d, 0x99, 0x9e, 0x55, 0x16, 0x7c, 0x0b, 0xf7, - 0x37, 0x6f, 0xd7, 0x4b, 0x8e, 0x2b, 0x9d, 0x46, 0x99, 0x14, 0xb1, 0x1b, 0x7b, 0xc9, 0x65, 0x7b, - 0x8a, 0x79, 0x89, 0x50, 0x97, 0xac, 0x88, 0x2d, 0x29, 0x6e, 0x49, 0x55, 0x9a, 0xfe, 0xb7, 0xc2, - 0xd5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xac, 0x78, 0x16, 0xc2, 0x3c, 0x02, 0x00, 0x00, + // 338 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xc1, 0x4b, 0xc3, 0x30, + 0x14, 0xc6, 0xd9, 0x8a, 0xe2, 0xb2, 0xcd, 0x49, 0xf1, 0x50, 0x14, 0x65, 0x74, 0x97, 0x21, 0xd8, + 0xc2, 0x14, 0xc1, 0x93, 0xa0, 0x43, 0x18, 0xe8, 0x25, 0xf3, 0xe4, 0xa5, 0x64, 0xed, 0xb3, 0x0b, + 0x36, 0x4d, 0x6d, 0x5e, 0xba, 0xb1, 0x83, 0x7f, 0xbb, 0x34, 0xa9, 0xb8, 0xc1, 0x2e, 0xde, 0xf2, + 0xbe, 0xf7, 0x7d, 0xef, 0xf7, 0x1e, 0x21, 0x7d, 0x05, 0x69, 0x2c, 0x4b, 0x08, 0x8a, 0x52, 0xa2, + 0x74, 0x4f, 0x05, 0xcf, 0x2a, 0xad, 0x6c, 0x15, 0x34, 0xbd, 0xb3, 0x9e, 0x8a, 0x97, 0x20, 0x98, + 0x55, 0xfd, 0x94, 0x0c, 0x28, 0x60, 0xc9, 0xa1, 0x02, 0x0a, 0x5f, 0x1a, 0x14, 0xba, 0x57, 0xc4, + 0xe1, 0x89, 0xf2, 0x5a, 0xc3, 0xd6, 0xb8, 0x3b, 0xf1, 0x82, 0xdd, 0x21, 0x36, 0x3b, 0x9b, 0x2a, + 0x5a, 0x9b, 0xdc, 0x31, 0x39, 0x91, 0x1a, 0x0b, 0x8d, 0xd1, 0x07, 0x87, 0x2c, 0x51, 0x11, 0x4f, + 0xbc, 0xf6, 0xd0, 0x19, 0x3b, 0xf4, 0xd8, 0xea, 0xcf, 0x46, 0x9e, 0x25, 0xfe, 0xf7, 0x36, 0x48, + 0xe9, 0x0c, 0xd5, 0xbf, 0x40, 0x0f, 0xa4, 0xdb, 0x10, 0x12, 0x86, 0xcc, 0x30, 0xba, 0x93, 0xcb, + 0xbd, 0x19, 0x83, 0x9c, 0x32, 0x64, 0x94, 0xd8, 0x48, 0xfd, 0xf6, 0x2b, 0xd2, 0x7f, 0x91, 0x2c, + 0x31, 0xcd, 0x57, 0x40, 0xe6, 0x8e, 0x48, 0x5f, 0xf0, 0x3c, 0x42, 0x2e, 0x40, 0x21, 0x13, 0x85, + 0xd9, 0xc3, 0xa1, 0x3d, 0xc1, 0xf3, 0xb7, 0x5f, 0xcd, 0x98, 0xd8, 0x7a, 0xcb, 0xd4, 0x6e, 0x4c, + 0x6c, 0xfd, 0x67, 0x3a, 0x27, 0x9d, 0x52, 0xae, 0xa2, 0x58, 0xea, 0x1c, 0x3d, 0xc7, 0x18, 0x8e, + 0x4a, 0xb9, 0x7a, 0xaa, 0x6b, 0xff, 0x93, 0x0c, 0x6a, 0xee, 0x1c, 0x52, 0x01, 0x39, 0x1a, 0xf2, + 0x3d, 0x39, 0x10, 0x80, 0xac, 0xbe, 0xbc, 0xbe, 0x62, 0x14, 0xec, 0xfb, 0xa7, 0x60, 0x67, 0x5b, + 0x6a, 0x13, 0xee, 0x05, 0x21, 0x28, 0x91, 0x65, 0x91, 0xe2, 0x1b, 0x68, 0x96, 0xe9, 0x18, 0x65, + 0xce, 0x37, 0xf0, 0x78, 0xf7, 0x7e, 0x9b, 0x72, 0x5c, 0xea, 0x45, 0x10, 0x4b, 0x11, 0xda, 0xb1, + 0xd7, 0x5c, 0x36, 0xaf, 0x90, 0xe7, 0x08, 0x65, 0xce, 0xb2, 0xd0, 0x90, 0xc2, 0x86, 0x54, 0x2c, + 0x16, 0x87, 0x46, 0xb8, 0xf9, 0x09, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x83, 0x2e, 0xf6, 0x41, 0x02, + 0x00, 0x00, } diff --git a/internal/proxy/task.go b/internal/proxy/task.go index c7be5f607a..a2a520e270 100644 --- a/internal/proxy/task.go +++ b/internal/proxy/task.go @@ -2072,7 +2072,7 @@ func (rt *RetrieveTask) PreExecute(ctx context.Context) error { if len(rt.retrieve.OutputFields) == 0 { for _, field := range schema.Fields { if field.FieldID >= 100 && field.DataType != schemapb.DataType_FloatVector && field.DataType != schemapb.DataType_BinaryVector { - rt.OutputFields = append(rt.OutputFields, field.Name) + rt.OutputFieldsId = append(rt.OutputFieldsId, field.FieldID) } } } else { @@ -2089,10 +2089,10 @@ func (rt *RetrieveTask) PreExecute(ctx context.Context) error { addPrimaryKey = true } findField = true - rt.OutputFields = append(rt.OutputFields, reqField) + rt.OutputFieldsId = append(rt.OutputFieldsId, field.FieldID) } else { if field.IsPrimaryKey && !addPrimaryKey { - rt.OutputFields = append(rt.OutputFields, field.Name) + rt.OutputFieldsId = append(rt.OutputFieldsId, field.FieldID) addPrimaryKey = true } } @@ -2352,7 +2352,7 @@ func (rt *RetrieveTask) PostExecute(ctx context.Context) error { } for i := 0; i < len(rt.result.FieldsData); i++ { for _, field := range schema.Fields { - if field.Name == rt.OutputFields[i] { + if field.FieldID == rt.OutputFieldsId[i] { rt.result.FieldsData[i].FieldName = field.Name rt.result.FieldsData[i].Type = field.DataType } diff --git a/internal/querynode/query_collection.go b/internal/querynode/query_collection.go index af52d256b9..e4f29a5e3b 100644 --- a/internal/querynode/query_collection.go +++ b/internal/querynode/query_collection.go @@ -1077,8 +1077,8 @@ func (q *queryCollection) retrieve(msg queryMsg) error { } req := &segcorepb.RetrieveRequest{ - Ids: retrieveMsg.Ids, - OutputFields: retrieveMsg.OutputFields, + Ids: retrieveMsg.Ids, + OutputFieldsId: retrieveMsg.OutputFieldsId, } plan, err := createRetrievePlan(collection, req, timestamp) diff --git a/internal/querynode/segment_test.go b/internal/querynode/segment_test.go index 0e35df94a5..445a54af82 100644 --- a/internal/querynode/segment_test.go +++ b/internal/querynode/segment_test.go @@ -153,7 +153,7 @@ func TestSegment_retrieve(t *testing.T) { }, }, }, - OutputFields: []string{"vec"}, + OutputFieldsId: []int64{100}, } plan, err := createRetrievePlan(collection, reqIds, 100) defer plan.delete()