From 26212284d8d48f8ac6966feea9189857ad71057d Mon Sep 17 00:00:00 2001 From: Ketan Umare Date: Tue, 26 May 2020 08:53:29 -0700 Subject: [PATCH] Allow different modes of data download and upload in flyte co-pilot (#65) --- flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc | 648 ++++++-- flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h | 472 +++++- flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go | 311 +++- .../pb-go/flyteidl/core/tasks.pb.validate.go | 80 +- .../pb-go/flyteidl/service/admin.swagger.json | 53 +- .../flyteidl/service/flyteadmin/README.md | 5 +- .../service/flyteadmin/api/swagger.yaml | 111 +- .../model_core_data_loading_config.go | 5 +- .../flyteadmin/model_core_io_strategy.go | 15 + ..._data_loading_config_literal_map_format.go | 19 + ...del_data_loading_config_metadata_format.go | 19 - .../model_io_strategy_download_mode.go | 19 + .../model_io_strategy_upload_mode.go | 19 + .../gen/pb-go/flyteidl/service/openapi.go | 4 +- flyteidl/gen/pb-java/flyteidl/core/Tasks.java | 1419 +++++++++++++++-- flyteidl/gen/pb-js/flyteidl.d.ts | 97 +- flyteidl/gen/pb-js/flyteidl.js | 232 ++- .../pb-protodoc/flyteidl/core/tasks.proto.rst | 121 +- .../gen/pb_python/flyteidl/core/tasks_pb2.py | 154 +- .../flyteidl/service/flyteadmin/README.md | 5 +- .../service/flyteadmin/flyteadmin/__init__.py | 5 +- .../flyteadmin/flyteadmin/models/__init__.py | 5 +- .../models/core_data_loading_config.py | 69 +- .../flyteadmin/models/core_io_strategy.py | 144 ++ ...data_loading_config_literal_map_format.py} | 8 +- .../models/io_strategy_download_mode.py | 94 ++ .../models/io_strategy_upload_mode.py | 94 ++ ...ata_format.py => test_core_io_strategy.py} | 12 +- ..._data_loading_config_literal_map_format.py | 40 + .../test/test_io_strategy_download_mode.py | 40 + .../test/test_io_strategy_upload_mode.py | 40 + flyteidl/protos/flyteidl/core/tasks.proto | 41 +- 32 files changed, 3876 insertions(+), 524 deletions(-) create mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_io_strategy.go create mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_literal_map_format.go delete mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go create mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_download_mode.go create mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_upload_mode.go create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_io_strategy.py rename flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/{data_loading_config_metadata_format.py => data_loading_config_literal_map_format.py} (89%) create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_download_mode.py create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_upload_mode.py rename flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/{test_data_loading_config_metadata_format.py => test_core_io_strategy.py} (58%) create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_literal_map_format.py create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_download_mode.py create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_upload_mode.py diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc index 841a1c1499..64b54b116f 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc @@ -21,9 +21,10 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2finterface_2eproto ::google::pr extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fliterals_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_KeyValuePair_flyteidl_2fcore_2fliterals_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fliterals_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_RetryStrategy_flyteidl_2fcore_2fliterals_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_TaskMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto; @@ -61,6 +62,10 @@ class ContainerDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _Container_default_instance_; +class IOStrategyDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _IOStrategy_default_instance_; class DataLoadingConfigDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; @@ -178,6 +183,20 @@ ::google::protobuf::internal::SCCInfo<4> scc_info_Container_flyteidl_2fcore_2fta &scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto.base, &scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base,}}; +static void InitDefaultsIOStrategy_flyteidl_2fcore_2ftasks_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::core::_IOStrategy_default_instance_; + new (ptr) ::flyteidl::core::IOStrategy(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::core::IOStrategy::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<0> scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsIOStrategy_flyteidl_2fcore_2ftasks_2eproto}, {}}; + static void InitDefaultsDataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -189,8 +208,9 @@ static void InitDefaultsDataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto() { ::flyteidl::core::DataLoadingConfig::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<0> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsDataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto}, {}}; +::google::protobuf::internal::SCCInfo<1> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsDataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto}, { + &scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto.base,}}; void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto.base); @@ -200,11 +220,12 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_Container_flyteidl_2fcore_2ftasks_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[8]; -const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[3]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[9]; +const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[5]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto = nullptr; const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { @@ -275,14 +296,22 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::Container, ports_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::Container, data_config_), ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::IOStrategy, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::IOStrategy, download_mode_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::IOStrategy, upload_mode_), + ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, enabled_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, input_path_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, output_path_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, format_), - PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, enabled_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, io_strategy_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::core::Resources_ResourceEntry)}, @@ -292,7 +321,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 35, -1, sizeof(::flyteidl::core::TaskTemplate)}, { 47, -1, sizeof(::flyteidl::core::ContainerPort)}, { 53, -1, sizeof(::flyteidl::core::Container)}, - { 66, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, + { 66, -1, sizeof(::flyteidl::core::IOStrategy)}, + { 73, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -303,13 +333,14 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::core::_TaskTemplate_default_instance_), reinterpret_cast(&::flyteidl::core::_ContainerPort_default_instance_), reinterpret_cast(&::flyteidl::core::_Container_default_instance_), + reinterpret_cast(&::flyteidl::core::_IOStrategy_default_instance_), reinterpret_cast(&::flyteidl::core::_DataLoadingConfig_default_instance_), }; ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto = { {}, AddDescriptors_flyteidl_2fcore_2ftasks_2eproto, "flyteidl/core/tasks.proto", schemas, file_default_instances, TableStruct_flyteidl_2fcore_2ftasks_2eproto::offsets, - file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 8, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, + file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 9, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, }; const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = @@ -351,18 +382,26 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = "dl.core.KeyValuePair\022+\n\005ports\030\007 \003(\0132\034.fl" "yteidl.core.ContainerPort\0225\n\013data_config" "\030\t \001(\0132 .flyteidl.core.DataLoadingConfig" - "\"\277\001\n\021DataLoadingConfig\022\022\n\ninput_path\030\001 \001" - "(\t\022\023\n\013output_path\030\002 \001(\t\022\?\n\006format\030\003 \001(\0162" - "/.flyteidl.core.DataLoadingConfig.Metada" - "taFormat\022\017\n\007enabled\030\004 \001(\010\"/\n\016MetadataFor" - "mat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002B2Z0gi" - "thub.com/lyft/flyteidl/gen/pb-go/flyteid" - "l/coreb\006proto3" + "\"\233\002\n\nIOStrategy\022=\n\rdownload_mode\030\001 \001(\0162&" + ".flyteidl.core.IOStrategy.DownloadMode\0229" + "\n\013upload_mode\030\002 \001(\0162$.flyteidl.core.IOSt" + "rategy.UploadMode\"L\n\014DownloadMode\022\022\n\016DOW" + "NLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023\n\017DO" + "_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n\016UPLOAD_" + "ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rDO_NOT_UP" + "LOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007enabled\030" + "\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013output_path" + "\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteidl.core.D" + "ataLoadingConfig.LiteralMapFormat\022.\n\013io_" + "strategy\030\005 \001(\0132\031.flyteidl.core.IOStrateg" + "y\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022\010\n\004YAML\020" + "\001\022\t\n\005PROTO\020\002B2Z0github.com/lyft/flyteidl" + "/gen/pb-go/flyteidl/coreb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fcore_2ftasks_2eproto = { false, InitDefaults_flyteidl_2fcore_2ftasks_2eproto, descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto, - "flyteidl/core/tasks.proto", &assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto, 1774, + "flyteidl/core/tasks.proto", &assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto, 2112, }; void AddDescriptors_flyteidl_2fcore_2ftasks_2eproto() { @@ -429,11 +468,11 @@ const RuntimeMetadata_RuntimeType RuntimeMetadata::RuntimeType_MIN; const RuntimeMetadata_RuntimeType RuntimeMetadata::RuntimeType_MAX; const int RuntimeMetadata::RuntimeType_ARRAYSIZE; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 -const ::google::protobuf::EnumDescriptor* DataLoadingConfig_MetadataFormat_descriptor() { +const ::google::protobuf::EnumDescriptor* IOStrategy_DownloadMode_descriptor() { ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); return file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[2]; } -bool DataLoadingConfig_MetadataFormat_IsValid(int value) { +bool IOStrategy_DownloadMode_IsValid(int value) { switch (value) { case 0: case 1: @@ -445,12 +484,58 @@ bool DataLoadingConfig_MetadataFormat_IsValid(int value) { } #if !defined(_MSC_VER) || _MSC_VER >= 1900 -const DataLoadingConfig_MetadataFormat DataLoadingConfig::JSON; -const DataLoadingConfig_MetadataFormat DataLoadingConfig::YAML; -const DataLoadingConfig_MetadataFormat DataLoadingConfig::PROTO; -const DataLoadingConfig_MetadataFormat DataLoadingConfig::MetadataFormat_MIN; -const DataLoadingConfig_MetadataFormat DataLoadingConfig::MetadataFormat_MAX; -const int DataLoadingConfig::MetadataFormat_ARRAYSIZE; +const IOStrategy_DownloadMode IOStrategy::DOWNLOAD_EAGER; +const IOStrategy_DownloadMode IOStrategy::DOWNLOAD_STREAM; +const IOStrategy_DownloadMode IOStrategy::DO_NOT_DOWNLOAD; +const IOStrategy_DownloadMode IOStrategy::DownloadMode_MIN; +const IOStrategy_DownloadMode IOStrategy::DownloadMode_MAX; +const int IOStrategy::DownloadMode_ARRAYSIZE; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 +const ::google::protobuf::EnumDescriptor* IOStrategy_UploadMode_descriptor() { + ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[3]; +} +bool IOStrategy_UploadMode_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + default: + return false; + } +} + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const IOStrategy_UploadMode IOStrategy::UPLOAD_ON_EXIT; +const IOStrategy_UploadMode IOStrategy::UPLOAD_EAGER; +const IOStrategy_UploadMode IOStrategy::DO_NOT_UPLOAD; +const IOStrategy_UploadMode IOStrategy::UploadMode_MIN; +const IOStrategy_UploadMode IOStrategy::UploadMode_MAX; +const int IOStrategy::UploadMode_ARRAYSIZE; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 +const ::google::protobuf::EnumDescriptor* DataLoadingConfig_LiteralMapFormat_descriptor() { + ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[4]; +} +bool DataLoadingConfig_LiteralMapFormat_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + default: + return false; + } +} + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::JSON; +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::YAML; +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::PROTO; +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::LiteralMapFormat_MIN; +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::LiteralMapFormat_MAX; +const int DataLoadingConfig::LiteralMapFormat_ARRAYSIZE; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 // =================================================================== @@ -3973,19 +4058,341 @@ ::google::protobuf::Metadata Container::GetMetadata() const { } +// =================================================================== + +void IOStrategy::InitAsDefaultInstance() { +} +class IOStrategy::HasBitSetters { + public: +}; + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int IOStrategy::kDownloadModeFieldNumber; +const int IOStrategy::kUploadModeFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +IOStrategy::IOStrategy() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.core.IOStrategy) +} +IOStrategy::IOStrategy(const IOStrategy& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::memcpy(&download_mode_, &from.download_mode_, + static_cast(reinterpret_cast(&upload_mode_) - + reinterpret_cast(&download_mode_)) + sizeof(upload_mode_)); + // @@protoc_insertion_point(copy_constructor:flyteidl.core.IOStrategy) +} + +void IOStrategy::SharedCtor() { + ::memset(&download_mode_, 0, static_cast( + reinterpret_cast(&upload_mode_) - + reinterpret_cast(&download_mode_)) + sizeof(upload_mode_)); +} + +IOStrategy::~IOStrategy() { + // @@protoc_insertion_point(destructor:flyteidl.core.IOStrategy) + SharedDtor(); +} + +void IOStrategy::SharedDtor() { +} + +void IOStrategy::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const IOStrategy& IOStrategy::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto.base); + return *internal_default_instance(); +} + + +void IOStrategy::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.core.IOStrategy) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + ::memset(&download_mode_, 0, static_cast( + reinterpret_cast(&upload_mode_) - + reinterpret_cast(&download_mode_)) + sizeof(upload_mode_)); + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* IOStrategy::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 8) goto handle_unusual; + ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr); + msg->set_download_mode(static_cast<::flyteidl::core::IOStrategy_DownloadMode>(val)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } + // .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 16) goto handle_unusual; + ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr); + msg->set_upload_mode(static_cast<::flyteidl::core::IOStrategy_UploadMode>(val)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool IOStrategy::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.core.IOStrategy) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (8 & 0xFF)) { + int value = 0; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_download_mode(static_cast< ::flyteidl::core::IOStrategy_DownloadMode >(value)); + } else { + goto handle_unusual; + } + break; + } + + // .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (16 & 0xFF)) { + int value = 0; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_upload_mode(static_cast< ::flyteidl::core::IOStrategy_UploadMode >(value)); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.core.IOStrategy) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.core.IOStrategy) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void IOStrategy::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.core.IOStrategy) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + if (this->download_mode() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 1, this->download_mode(), output); + } + + // .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + if (this->upload_mode() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 2, this->upload_mode(), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.core.IOStrategy) +} + +::google::protobuf::uint8* IOStrategy::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.core.IOStrategy) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + if (this->download_mode() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 1, this->download_mode(), target); + } + + // .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + if (this->upload_mode() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 2, this->upload_mode(), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.core.IOStrategy) + return target; +} + +size_t IOStrategy::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.core.IOStrategy) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + if (this->download_mode() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->download_mode()); + } + + // .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + if (this->upload_mode() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->upload_mode()); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void IOStrategy::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.core.IOStrategy) + GOOGLE_DCHECK_NE(&from, this); + const IOStrategy* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.core.IOStrategy) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.core.IOStrategy) + MergeFrom(*source); + } +} + +void IOStrategy::MergeFrom(const IOStrategy& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.core.IOStrategy) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.download_mode() != 0) { + set_download_mode(from.download_mode()); + } + if (from.upload_mode() != 0) { + set_upload_mode(from.upload_mode()); + } +} + +void IOStrategy::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.core.IOStrategy) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void IOStrategy::CopyFrom(const IOStrategy& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.core.IOStrategy) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool IOStrategy::IsInitialized() const { + return true; +} + +void IOStrategy::Swap(IOStrategy* other) { + if (other == this) return; + InternalSwap(other); +} +void IOStrategy::InternalSwap(IOStrategy* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(download_mode_, other->download_mode_); + swap(upload_mode_, other->upload_mode_); +} + +::google::protobuf::Metadata IOStrategy::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[kIndexInFileMessages]; +} + + // =================================================================== void DataLoadingConfig::InitAsDefaultInstance() { + ::flyteidl::core::_DataLoadingConfig_default_instance_._instance.get_mutable()->io_strategy_ = const_cast< ::flyteidl::core::IOStrategy*>( + ::flyteidl::core::IOStrategy::internal_default_instance()); } class DataLoadingConfig::HasBitSetters { public: + static const ::flyteidl::core::IOStrategy& io_strategy(const DataLoadingConfig* msg); }; +const ::flyteidl::core::IOStrategy& +DataLoadingConfig::HasBitSetters::io_strategy(const DataLoadingConfig* msg) { + return *msg->io_strategy_; +} #if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int DataLoadingConfig::kEnabledFieldNumber; const int DataLoadingConfig::kInputPathFieldNumber; const int DataLoadingConfig::kOutputPathFieldNumber; const int DataLoadingConfig::kFormatFieldNumber; -const int DataLoadingConfig::kEnabledFieldNumber; +const int DataLoadingConfig::kIoStrategyFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 DataLoadingConfig::DataLoadingConfig() @@ -4005,9 +4412,14 @@ DataLoadingConfig::DataLoadingConfig(const DataLoadingConfig& from) if (from.output_path().size() > 0) { output_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_path_); } - ::memcpy(&format_, &from.format_, - static_cast(reinterpret_cast(&enabled_) - - reinterpret_cast(&format_)) + sizeof(enabled_)); + if (from.has_io_strategy()) { + io_strategy_ = new ::flyteidl::core::IOStrategy(*from.io_strategy_); + } else { + io_strategy_ = nullptr; + } + ::memcpy(&enabled_, &from.enabled_, + static_cast(reinterpret_cast(&format_) - + reinterpret_cast(&enabled_)) + sizeof(format_)); // @@protoc_insertion_point(copy_constructor:flyteidl.core.DataLoadingConfig) } @@ -4016,9 +4428,9 @@ void DataLoadingConfig::SharedCtor() { &scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base); input_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); output_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&format_, 0, static_cast( - reinterpret_cast(&enabled_) - - reinterpret_cast(&format_)) + sizeof(enabled_)); + ::memset(&io_strategy_, 0, static_cast( + reinterpret_cast(&format_) - + reinterpret_cast(&io_strategy_)) + sizeof(format_)); } DataLoadingConfig::~DataLoadingConfig() { @@ -4029,6 +4441,7 @@ DataLoadingConfig::~DataLoadingConfig() { void DataLoadingConfig::SharedDtor() { input_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); output_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (this != internal_default_instance()) delete io_strategy_; } void DataLoadingConfig::SetCachedSize(int size) const { @@ -4048,9 +4461,13 @@ void DataLoadingConfig::Clear() { input_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); output_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&format_, 0, static_cast( - reinterpret_cast(&enabled_) - - reinterpret_cast(&format_)) + sizeof(enabled_)); + if (GetArenaNoVirtual() == nullptr && io_strategy_ != nullptr) { + delete io_strategy_; + } + io_strategy_ = nullptr; + ::memset(&enabled_, 0, static_cast( + reinterpret_cast(&format_) - + reinterpret_cast(&enabled_)) + sizeof(format_)); _internal_metadata_.Clear(); } @@ -4067,9 +4484,16 @@ const char* DataLoadingConfig::_InternalParse(const char* begin, const char* end ptr = ::google::protobuf::io::Parse32(ptr, &tag); GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); switch (tag >> 3) { - // string input_path = 1; + // bool enabled = 1; case 1: { - if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + if (static_cast<::google::protobuf::uint8>(tag) != 8) goto handle_unusual; + msg->set_enabled(::google::protobuf::internal::ReadVarint(&ptr)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } + // string input_path = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; ptr = ::google::protobuf::io::ReadSize(ptr, &size); GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); ctx->extra_parse_data().SetFieldName("flyteidl.core.DataLoadingConfig.input_path"); @@ -4083,9 +4507,9 @@ const char* DataLoadingConfig::_InternalParse(const char* begin, const char* end ptr += size; break; } - // string output_path = 2; - case 2: { - if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; + // string output_path = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; ptr = ::google::protobuf::io::ReadSize(ptr, &size); GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); ctx->extra_parse_data().SetFieldName("flyteidl.core.DataLoadingConfig.output_path"); @@ -4099,19 +4523,25 @@ const char* DataLoadingConfig::_InternalParse(const char* begin, const char* end ptr += size; break; } - // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; - case 3: { - if (static_cast<::google::protobuf::uint8>(tag) != 24) goto handle_unusual; + // .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 32) goto handle_unusual; ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr); - msg->set_format(static_cast<::flyteidl::core::DataLoadingConfig_MetadataFormat>(val)); + msg->set_format(static_cast<::flyteidl::core::DataLoadingConfig_LiteralMapFormat>(val)); GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } - // bool enabled = 4; - case 4: { - if (static_cast<::google::protobuf::uint8>(tag) != 32) goto handle_unusual; - msg->set_enabled(::google::protobuf::internal::ReadVarint(&ptr)); + // .flyteidl.core.IOStrategy io_strategy = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::IOStrategy::_InternalParse; + object = msg->mutable_io_strategy(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); break; } default: { @@ -4148,9 +4578,22 @@ bool DataLoadingConfig::MergePartialFromCodedStream( tag = p.first; if (!p.second) goto handle_unusual; switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // string input_path = 1; + // bool enabled = 1; case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + if (static_cast< ::google::protobuf::uint8>(tag) == (8 & 0xFF)) { + + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( + input, &enabled_))); + } else { + goto handle_unusual; + } + break; + } + + // string input_path = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { DO_(::google::protobuf::internal::WireFormatLite::ReadString( input, this->mutable_input_path())); DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -4163,9 +4606,9 @@ bool DataLoadingConfig::MergePartialFromCodedStream( break; } - // string output_path = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { + // string output_path = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { DO_(::google::protobuf::internal::WireFormatLite::ReadString( input, this->mutable_output_path())); DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -4178,27 +4621,25 @@ bool DataLoadingConfig::MergePartialFromCodedStream( break; } - // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == (24 & 0xFF)) { + // .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (32 & 0xFF)) { int value = 0; DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( input, &value))); - set_format(static_cast< ::flyteidl::core::DataLoadingConfig_MetadataFormat >(value)); + set_format(static_cast< ::flyteidl::core::DataLoadingConfig_LiteralMapFormat >(value)); } else { goto handle_unusual; } break; } - // bool enabled = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == (32 & 0xFF)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( - input, &enabled_))); + // .flyteidl.core.IOStrategy io_strategy = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_io_strategy())); } else { goto handle_unusual; } @@ -4232,35 +4673,41 @@ void DataLoadingConfig::SerializeWithCachedSizes( ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; - // string input_path = 1; + // bool enabled = 1; + if (this->enabled() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->enabled(), output); + } + + // string input_path = 2; if (this->input_path().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->input_path().data(), static_cast(this->input_path().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "flyteidl.core.DataLoadingConfig.input_path"); ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->input_path(), output); + 2, this->input_path(), output); } - // string output_path = 2; + // string output_path = 3; if (this->output_path().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->output_path().data(), static_cast(this->output_path().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "flyteidl.core.DataLoadingConfig.output_path"); ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->output_path(), output); + 3, this->output_path(), output); } - // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + // .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; if (this->format() != 0) { ::google::protobuf::internal::WireFormatLite::WriteEnum( - 3, this->format(), output); + 4, this->format(), output); } - // bool enabled = 4; - if (this->enabled() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->enabled(), output); + // .flyteidl.core.IOStrategy io_strategy = 5; + if (this->has_io_strategy()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 5, HasBitSetters::io_strategy(this), output); } if (_internal_metadata_.have_unknown_fields()) { @@ -4276,7 +4723,12 @@ ::google::protobuf::uint8* DataLoadingConfig::InternalSerializeWithCachedSizesTo ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; - // string input_path = 1; + // bool enabled = 1; + if (this->enabled() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->enabled(), target); + } + + // string input_path = 2; if (this->input_path().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->input_path().data(), static_cast(this->input_path().length()), @@ -4284,10 +4736,10 @@ ::google::protobuf::uint8* DataLoadingConfig::InternalSerializeWithCachedSizesTo "flyteidl.core.DataLoadingConfig.input_path"); target = ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->input_path(), target); + 2, this->input_path(), target); } - // string output_path = 2; + // string output_path = 3; if (this->output_path().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->output_path().data(), static_cast(this->output_path().length()), @@ -4295,18 +4747,20 @@ ::google::protobuf::uint8* DataLoadingConfig::InternalSerializeWithCachedSizesTo "flyteidl.core.DataLoadingConfig.output_path"); target = ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 2, this->output_path(), target); + 3, this->output_path(), target); } - // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + // .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; if (this->format() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( - 3, this->format(), target); + 4, this->format(), target); } - // bool enabled = 4; - if (this->enabled() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->enabled(), target); + // .flyteidl.core.IOStrategy io_strategy = 5; + if (this->has_io_strategy()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 5, HasBitSetters::io_strategy(this), target); } if (_internal_metadata_.have_unknown_fields()) { @@ -4330,31 +4784,38 @@ size_t DataLoadingConfig::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - // string input_path = 1; + // string input_path = 2; if (this->input_path().size() > 0) { total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize( this->input_path()); } - // string output_path = 2; + // string output_path = 3; if (this->output_path().size() > 0) { total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize( this->output_path()); } - // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; - if (this->format() != 0) { + // .flyteidl.core.IOStrategy io_strategy = 5; + if (this->has_io_strategy()) { total_size += 1 + - ::google::protobuf::internal::WireFormatLite::EnumSize(this->format()); + ::google::protobuf::internal::WireFormatLite::MessageSize( + *io_strategy_); } - // bool enabled = 4; + // bool enabled = 1; if (this->enabled() != 0) { total_size += 1 + 1; } + // .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; + if (this->format() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->format()); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -4390,12 +4851,15 @@ void DataLoadingConfig::MergeFrom(const DataLoadingConfig& from) { output_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_path_); } - if (from.format() != 0) { - set_format(from.format()); + if (from.has_io_strategy()) { + mutable_io_strategy()->::flyteidl::core::IOStrategy::MergeFrom(from.io_strategy()); } if (from.enabled() != 0) { set_enabled(from.enabled()); } + if (from.format() != 0) { + set_format(from.format()); + } } void DataLoadingConfig::CopyFrom(const ::google::protobuf::Message& from) { @@ -4427,8 +4891,9 @@ void DataLoadingConfig::InternalSwap(DataLoadingConfig* other) { GetArenaNoVirtual()); output_path_.Swap(&other->output_path_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); - swap(format_, other->format_); + swap(io_strategy_, other->io_strategy_); swap(enabled_, other->enabled_); + swap(format_, other->format_); } ::google::protobuf::Metadata DataLoadingConfig::GetMetadata() const { @@ -4463,6 +4928,9 @@ template<> PROTOBUF_NOINLINE ::flyteidl::core::ContainerPort* Arena::CreateMaybe template<> PROTOBUF_NOINLINE ::flyteidl::core::Container* Arena::CreateMaybeMessage< ::flyteidl::core::Container >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::Container >(arena); } +template<> PROTOBUF_NOINLINE ::flyteidl::core::IOStrategy* Arena::CreateMaybeMessage< ::flyteidl::core::IOStrategy >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::core::IOStrategy >(arena); +} template<> PROTOBUF_NOINLINE ::flyteidl::core::DataLoadingConfig* Arena::CreateMaybeMessage< ::flyteidl::core::DataLoadingConfig >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::DataLoadingConfig >(arena); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h index 9449ae6eac..51b7c8dfec 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h @@ -47,7 +47,7 @@ struct TableStruct_flyteidl_2fcore_2ftasks_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[8] + static const ::google::protobuf::internal::ParseTable schema[9] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -65,6 +65,9 @@ extern ContainerPortDefaultTypeInternal _ContainerPort_default_instance_; class DataLoadingConfig; class DataLoadingConfigDefaultTypeInternal; extern DataLoadingConfigDefaultTypeInternal _DataLoadingConfig_default_instance_; +class IOStrategy; +class IOStrategyDefaultTypeInternal; +extern IOStrategyDefaultTypeInternal _IOStrategy_default_instance_; class Resources; class ResourcesDefaultTypeInternal; extern ResourcesDefaultTypeInternal _Resources_default_instance_; @@ -87,6 +90,7 @@ namespace protobuf { template<> ::flyteidl::core::Container* Arena::CreateMaybeMessage<::flyteidl::core::Container>(Arena*); template<> ::flyteidl::core::ContainerPort* Arena::CreateMaybeMessage<::flyteidl::core::ContainerPort>(Arena*); template<> ::flyteidl::core::DataLoadingConfig* Arena::CreateMaybeMessage<::flyteidl::core::DataLoadingConfig>(Arena*); +template<> ::flyteidl::core::IOStrategy* Arena::CreateMaybeMessage<::flyteidl::core::IOStrategy>(Arena*); template<> ::flyteidl::core::Resources* Arena::CreateMaybeMessage<::flyteidl::core::Resources>(Arena*); template<> ::flyteidl::core::Resources_ResourceEntry* Arena::CreateMaybeMessage<::flyteidl::core::Resources_ResourceEntry>(Arena*); template<> ::flyteidl::core::RuntimeMetadata* Arena::CreateMaybeMessage<::flyteidl::core::RuntimeMetadata>(Arena*); @@ -142,27 +146,71 @@ inline bool RuntimeMetadata_RuntimeType_Parse( return ::google::protobuf::internal::ParseNamedEnum( RuntimeMetadata_RuntimeType_descriptor(), name, value); } -enum DataLoadingConfig_MetadataFormat { - DataLoadingConfig_MetadataFormat_JSON = 0, - DataLoadingConfig_MetadataFormat_YAML = 1, - DataLoadingConfig_MetadataFormat_PROTO = 2, - DataLoadingConfig_MetadataFormat_DataLoadingConfig_MetadataFormat_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), - DataLoadingConfig_MetadataFormat_DataLoadingConfig_MetadataFormat_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() +enum IOStrategy_DownloadMode { + IOStrategy_DownloadMode_DOWNLOAD_EAGER = 0, + IOStrategy_DownloadMode_DOWNLOAD_STREAM = 1, + IOStrategy_DownloadMode_DO_NOT_DOWNLOAD = 2, + IOStrategy_DownloadMode_IOStrategy_DownloadMode_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), + IOStrategy_DownloadMode_IOStrategy_DownloadMode_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() }; -bool DataLoadingConfig_MetadataFormat_IsValid(int value); -const DataLoadingConfig_MetadataFormat DataLoadingConfig_MetadataFormat_MetadataFormat_MIN = DataLoadingConfig_MetadataFormat_JSON; -const DataLoadingConfig_MetadataFormat DataLoadingConfig_MetadataFormat_MetadataFormat_MAX = DataLoadingConfig_MetadataFormat_PROTO; -const int DataLoadingConfig_MetadataFormat_MetadataFormat_ARRAYSIZE = DataLoadingConfig_MetadataFormat_MetadataFormat_MAX + 1; +bool IOStrategy_DownloadMode_IsValid(int value); +const IOStrategy_DownloadMode IOStrategy_DownloadMode_DownloadMode_MIN = IOStrategy_DownloadMode_DOWNLOAD_EAGER; +const IOStrategy_DownloadMode IOStrategy_DownloadMode_DownloadMode_MAX = IOStrategy_DownloadMode_DO_NOT_DOWNLOAD; +const int IOStrategy_DownloadMode_DownloadMode_ARRAYSIZE = IOStrategy_DownloadMode_DownloadMode_MAX + 1; -const ::google::protobuf::EnumDescriptor* DataLoadingConfig_MetadataFormat_descriptor(); -inline const ::std::string& DataLoadingConfig_MetadataFormat_Name(DataLoadingConfig_MetadataFormat value) { +const ::google::protobuf::EnumDescriptor* IOStrategy_DownloadMode_descriptor(); +inline const ::std::string& IOStrategy_DownloadMode_Name(IOStrategy_DownloadMode value) { return ::google::protobuf::internal::NameOfEnum( - DataLoadingConfig_MetadataFormat_descriptor(), value); + IOStrategy_DownloadMode_descriptor(), value); +} +inline bool IOStrategy_DownloadMode_Parse( + const ::std::string& name, IOStrategy_DownloadMode* value) { + return ::google::protobuf::internal::ParseNamedEnum( + IOStrategy_DownloadMode_descriptor(), name, value); +} +enum IOStrategy_UploadMode { + IOStrategy_UploadMode_UPLOAD_ON_EXIT = 0, + IOStrategy_UploadMode_UPLOAD_EAGER = 1, + IOStrategy_UploadMode_DO_NOT_UPLOAD = 2, + IOStrategy_UploadMode_IOStrategy_UploadMode_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), + IOStrategy_UploadMode_IOStrategy_UploadMode_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() +}; +bool IOStrategy_UploadMode_IsValid(int value); +const IOStrategy_UploadMode IOStrategy_UploadMode_UploadMode_MIN = IOStrategy_UploadMode_UPLOAD_ON_EXIT; +const IOStrategy_UploadMode IOStrategy_UploadMode_UploadMode_MAX = IOStrategy_UploadMode_DO_NOT_UPLOAD; +const int IOStrategy_UploadMode_UploadMode_ARRAYSIZE = IOStrategy_UploadMode_UploadMode_MAX + 1; + +const ::google::protobuf::EnumDescriptor* IOStrategy_UploadMode_descriptor(); +inline const ::std::string& IOStrategy_UploadMode_Name(IOStrategy_UploadMode value) { + return ::google::protobuf::internal::NameOfEnum( + IOStrategy_UploadMode_descriptor(), value); +} +inline bool IOStrategy_UploadMode_Parse( + const ::std::string& name, IOStrategy_UploadMode* value) { + return ::google::protobuf::internal::ParseNamedEnum( + IOStrategy_UploadMode_descriptor(), name, value); +} +enum DataLoadingConfig_LiteralMapFormat { + DataLoadingConfig_LiteralMapFormat_JSON = 0, + DataLoadingConfig_LiteralMapFormat_YAML = 1, + DataLoadingConfig_LiteralMapFormat_PROTO = 2, + DataLoadingConfig_LiteralMapFormat_DataLoadingConfig_LiteralMapFormat_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), + DataLoadingConfig_LiteralMapFormat_DataLoadingConfig_LiteralMapFormat_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() +}; +bool DataLoadingConfig_LiteralMapFormat_IsValid(int value); +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_MIN = DataLoadingConfig_LiteralMapFormat_JSON; +const DataLoadingConfig_LiteralMapFormat DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_MAX = DataLoadingConfig_LiteralMapFormat_PROTO; +const int DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_ARRAYSIZE = DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_MAX + 1; + +const ::google::protobuf::EnumDescriptor* DataLoadingConfig_LiteralMapFormat_descriptor(); +inline const ::std::string& DataLoadingConfig_LiteralMapFormat_Name(DataLoadingConfig_LiteralMapFormat value) { + return ::google::protobuf::internal::NameOfEnum( + DataLoadingConfig_LiteralMapFormat_descriptor(), value); } -inline bool DataLoadingConfig_MetadataFormat_Parse( - const ::std::string& name, DataLoadingConfig_MetadataFormat* value) { - return ::google::protobuf::internal::ParseNamedEnum( - DataLoadingConfig_MetadataFormat_descriptor(), name, value); +inline bool DataLoadingConfig_LiteralMapFormat_Parse( + const ::std::string& name, DataLoadingConfig_LiteralMapFormat* value) { + return ::google::protobuf::internal::ParseNamedEnum( + DataLoadingConfig_LiteralMapFormat_descriptor(), name, value); } // =================================================================== @@ -1347,6 +1395,181 @@ class Container final : }; // ------------------------------------------------------------------- +class IOStrategy final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.IOStrategy) */ { + public: + IOStrategy(); + virtual ~IOStrategy(); + + IOStrategy(const IOStrategy& from); + + inline IOStrategy& operator=(const IOStrategy& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + IOStrategy(IOStrategy&& from) noexcept + : IOStrategy() { + *this = ::std::move(from); + } + + inline IOStrategy& operator=(IOStrategy&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const IOStrategy& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const IOStrategy* internal_default_instance() { + return reinterpret_cast( + &_IOStrategy_default_instance_); + } + static constexpr int kIndexInFileMessages = + 7; + + void Swap(IOStrategy* other); + friend void swap(IOStrategy& a, IOStrategy& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline IOStrategy* New() const final { + return CreateMaybeMessage(nullptr); + } + + IOStrategy* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const IOStrategy& from); + void MergeFrom(const IOStrategy& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(IOStrategy* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + typedef IOStrategy_DownloadMode DownloadMode; + static const DownloadMode DOWNLOAD_EAGER = + IOStrategy_DownloadMode_DOWNLOAD_EAGER; + static const DownloadMode DOWNLOAD_STREAM = + IOStrategy_DownloadMode_DOWNLOAD_STREAM; + static const DownloadMode DO_NOT_DOWNLOAD = + IOStrategy_DownloadMode_DO_NOT_DOWNLOAD; + static inline bool DownloadMode_IsValid(int value) { + return IOStrategy_DownloadMode_IsValid(value); + } + static const DownloadMode DownloadMode_MIN = + IOStrategy_DownloadMode_DownloadMode_MIN; + static const DownloadMode DownloadMode_MAX = + IOStrategy_DownloadMode_DownloadMode_MAX; + static const int DownloadMode_ARRAYSIZE = + IOStrategy_DownloadMode_DownloadMode_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + DownloadMode_descriptor() { + return IOStrategy_DownloadMode_descriptor(); + } + static inline const ::std::string& DownloadMode_Name(DownloadMode value) { + return IOStrategy_DownloadMode_Name(value); + } + static inline bool DownloadMode_Parse(const ::std::string& name, + DownloadMode* value) { + return IOStrategy_DownloadMode_Parse(name, value); + } + + typedef IOStrategy_UploadMode UploadMode; + static const UploadMode UPLOAD_ON_EXIT = + IOStrategy_UploadMode_UPLOAD_ON_EXIT; + static const UploadMode UPLOAD_EAGER = + IOStrategy_UploadMode_UPLOAD_EAGER; + static const UploadMode DO_NOT_UPLOAD = + IOStrategy_UploadMode_DO_NOT_UPLOAD; + static inline bool UploadMode_IsValid(int value) { + return IOStrategy_UploadMode_IsValid(value); + } + static const UploadMode UploadMode_MIN = + IOStrategy_UploadMode_UploadMode_MIN; + static const UploadMode UploadMode_MAX = + IOStrategy_UploadMode_UploadMode_MAX; + static const int UploadMode_ARRAYSIZE = + IOStrategy_UploadMode_UploadMode_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + UploadMode_descriptor() { + return IOStrategy_UploadMode_descriptor(); + } + static inline const ::std::string& UploadMode_Name(UploadMode value) { + return IOStrategy_UploadMode_Name(value); + } + static inline bool UploadMode_Parse(const ::std::string& name, + UploadMode* value) { + return IOStrategy_UploadMode_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + void clear_download_mode(); + static const int kDownloadModeFieldNumber = 1; + ::flyteidl::core::IOStrategy_DownloadMode download_mode() const; + void set_download_mode(::flyteidl::core::IOStrategy_DownloadMode value); + + // .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + void clear_upload_mode(); + static const int kUploadModeFieldNumber = 2; + ::flyteidl::core::IOStrategy_UploadMode upload_mode() const; + void set_upload_mode(::flyteidl::core::IOStrategy_UploadMode value); + + // @@protoc_insertion_point(class_scope:flyteidl.core.IOStrategy) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + int download_mode_; + int upload_mode_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; +}; +// ------------------------------------------------------------------- + class DataLoadingConfig final : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.DataLoadingConfig) */ { public: @@ -1385,7 +1608,7 @@ class DataLoadingConfig final : &_DataLoadingConfig_default_instance_); } static constexpr int kIndexInFileMessages = - 7; + 8; void Swap(DataLoadingConfig* other); friend void swap(DataLoadingConfig& a, DataLoadingConfig& b) { @@ -1440,39 +1663,39 @@ class DataLoadingConfig final : // nested types ---------------------------------------------------- - typedef DataLoadingConfig_MetadataFormat MetadataFormat; - static const MetadataFormat JSON = - DataLoadingConfig_MetadataFormat_JSON; - static const MetadataFormat YAML = - DataLoadingConfig_MetadataFormat_YAML; - static const MetadataFormat PROTO = - DataLoadingConfig_MetadataFormat_PROTO; - static inline bool MetadataFormat_IsValid(int value) { - return DataLoadingConfig_MetadataFormat_IsValid(value); - } - static const MetadataFormat MetadataFormat_MIN = - DataLoadingConfig_MetadataFormat_MetadataFormat_MIN; - static const MetadataFormat MetadataFormat_MAX = - DataLoadingConfig_MetadataFormat_MetadataFormat_MAX; - static const int MetadataFormat_ARRAYSIZE = - DataLoadingConfig_MetadataFormat_MetadataFormat_ARRAYSIZE; + typedef DataLoadingConfig_LiteralMapFormat LiteralMapFormat; + static const LiteralMapFormat JSON = + DataLoadingConfig_LiteralMapFormat_JSON; + static const LiteralMapFormat YAML = + DataLoadingConfig_LiteralMapFormat_YAML; + static const LiteralMapFormat PROTO = + DataLoadingConfig_LiteralMapFormat_PROTO; + static inline bool LiteralMapFormat_IsValid(int value) { + return DataLoadingConfig_LiteralMapFormat_IsValid(value); + } + static const LiteralMapFormat LiteralMapFormat_MIN = + DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_MIN; + static const LiteralMapFormat LiteralMapFormat_MAX = + DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_MAX; + static const int LiteralMapFormat_ARRAYSIZE = + DataLoadingConfig_LiteralMapFormat_LiteralMapFormat_ARRAYSIZE; static inline const ::google::protobuf::EnumDescriptor* - MetadataFormat_descriptor() { - return DataLoadingConfig_MetadataFormat_descriptor(); + LiteralMapFormat_descriptor() { + return DataLoadingConfig_LiteralMapFormat_descriptor(); } - static inline const ::std::string& MetadataFormat_Name(MetadataFormat value) { - return DataLoadingConfig_MetadataFormat_Name(value); + static inline const ::std::string& LiteralMapFormat_Name(LiteralMapFormat value) { + return DataLoadingConfig_LiteralMapFormat_Name(value); } - static inline bool MetadataFormat_Parse(const ::std::string& name, - MetadataFormat* value) { - return DataLoadingConfig_MetadataFormat_Parse(name, value); + static inline bool LiteralMapFormat_Parse(const ::std::string& name, + LiteralMapFormat* value) { + return DataLoadingConfig_LiteralMapFormat_Parse(name, value); } // accessors ------------------------------------------------------- - // string input_path = 1; + // string input_path = 2; void clear_input_path(); - static const int kInputPathFieldNumber = 1; + static const int kInputPathFieldNumber = 2; const ::std::string& input_path() const; void set_input_path(const ::std::string& value); #if LANG_CXX11 @@ -1484,9 +1707,9 @@ class DataLoadingConfig final : ::std::string* release_input_path(); void set_allocated_input_path(::std::string* input_path); - // string output_path = 2; + // string output_path = 3; void clear_output_path(); - static const int kOutputPathFieldNumber = 2; + static const int kOutputPathFieldNumber = 3; const ::std::string& output_path() const; void set_output_path(const ::std::string& value); #if LANG_CXX11 @@ -1498,18 +1721,27 @@ class DataLoadingConfig final : ::std::string* release_output_path(); void set_allocated_output_path(::std::string* output_path); - // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; - void clear_format(); - static const int kFormatFieldNumber = 3; - ::flyteidl::core::DataLoadingConfig_MetadataFormat format() const; - void set_format(::flyteidl::core::DataLoadingConfig_MetadataFormat value); + // .flyteidl.core.IOStrategy io_strategy = 5; + bool has_io_strategy() const; + void clear_io_strategy(); + static const int kIoStrategyFieldNumber = 5; + const ::flyteidl::core::IOStrategy& io_strategy() const; + ::flyteidl::core::IOStrategy* release_io_strategy(); + ::flyteidl::core::IOStrategy* mutable_io_strategy(); + void set_allocated_io_strategy(::flyteidl::core::IOStrategy* io_strategy); - // bool enabled = 4; + // bool enabled = 1; void clear_enabled(); - static const int kEnabledFieldNumber = 4; + static const int kEnabledFieldNumber = 1; bool enabled() const; void set_enabled(bool value); + // .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; + void clear_format(); + static const int kFormatFieldNumber = 4; + ::flyteidl::core::DataLoadingConfig_LiteralMapFormat format() const; + void set_format(::flyteidl::core::DataLoadingConfig_LiteralMapFormat value); + // @@protoc_insertion_point(class_scope:flyteidl.core.DataLoadingConfig) private: class HasBitSetters; @@ -1517,8 +1749,9 @@ class DataLoadingConfig final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr input_path_; ::google::protobuf::internal::ArenaStringPtr output_path_; - int format_; + ::flyteidl::core::IOStrategy* io_strategy_; bool enabled_; + int format_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; }; @@ -2787,9 +3020,55 @@ inline void Container::set_allocated_data_config(::flyteidl::core::DataLoadingCo // ------------------------------------------------------------------- +// IOStrategy + +// .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; +inline void IOStrategy::clear_download_mode() { + download_mode_ = 0; +} +inline ::flyteidl::core::IOStrategy_DownloadMode IOStrategy::download_mode() const { + // @@protoc_insertion_point(field_get:flyteidl.core.IOStrategy.download_mode) + return static_cast< ::flyteidl::core::IOStrategy_DownloadMode >(download_mode_); +} +inline void IOStrategy::set_download_mode(::flyteidl::core::IOStrategy_DownloadMode value) { + + download_mode_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.IOStrategy.download_mode) +} + +// .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; +inline void IOStrategy::clear_upload_mode() { + upload_mode_ = 0; +} +inline ::flyteidl::core::IOStrategy_UploadMode IOStrategy::upload_mode() const { + // @@protoc_insertion_point(field_get:flyteidl.core.IOStrategy.upload_mode) + return static_cast< ::flyteidl::core::IOStrategy_UploadMode >(upload_mode_); +} +inline void IOStrategy::set_upload_mode(::flyteidl::core::IOStrategy_UploadMode value) { + + upload_mode_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.IOStrategy.upload_mode) +} + +// ------------------------------------------------------------------- + // DataLoadingConfig -// string input_path = 1; +// bool enabled = 1; +inline void DataLoadingConfig::clear_enabled() { + enabled_ = false; +} +inline bool DataLoadingConfig::enabled() const { + // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.enabled) + return enabled_; +} +inline void DataLoadingConfig::set_enabled(bool value) { + + enabled_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.enabled) +} + +// string input_path = 2; inline void DataLoadingConfig::clear_input_path() { input_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } @@ -2842,7 +3121,7 @@ inline void DataLoadingConfig::set_allocated_input_path(::std::string* input_pat // @@protoc_insertion_point(field_set_allocated:flyteidl.core.DataLoadingConfig.input_path) } -// string output_path = 2; +// string output_path = 3; inline void DataLoadingConfig::clear_output_path() { output_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } @@ -2895,32 +3174,69 @@ inline void DataLoadingConfig::set_allocated_output_path(::std::string* output_p // @@protoc_insertion_point(field_set_allocated:flyteidl.core.DataLoadingConfig.output_path) } -// .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; +// .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; inline void DataLoadingConfig::clear_format() { format_ = 0; } -inline ::flyteidl::core::DataLoadingConfig_MetadataFormat DataLoadingConfig::format() const { +inline ::flyteidl::core::DataLoadingConfig_LiteralMapFormat DataLoadingConfig::format() const { // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.format) - return static_cast< ::flyteidl::core::DataLoadingConfig_MetadataFormat >(format_); + return static_cast< ::flyteidl::core::DataLoadingConfig_LiteralMapFormat >(format_); } -inline void DataLoadingConfig::set_format(::flyteidl::core::DataLoadingConfig_MetadataFormat value) { +inline void DataLoadingConfig::set_format(::flyteidl::core::DataLoadingConfig_LiteralMapFormat value) { format_ = value; // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.format) } -// bool enabled = 4; -inline void DataLoadingConfig::clear_enabled() { - enabled_ = false; +// .flyteidl.core.IOStrategy io_strategy = 5; +inline bool DataLoadingConfig::has_io_strategy() const { + return this != internal_default_instance() && io_strategy_ != nullptr; } -inline bool DataLoadingConfig::enabled() const { - // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.enabled) - return enabled_; +inline void DataLoadingConfig::clear_io_strategy() { + if (GetArenaNoVirtual() == nullptr && io_strategy_ != nullptr) { + delete io_strategy_; + } + io_strategy_ = nullptr; } -inline void DataLoadingConfig::set_enabled(bool value) { +inline const ::flyteidl::core::IOStrategy& DataLoadingConfig::io_strategy() const { + const ::flyteidl::core::IOStrategy* p = io_strategy_; + // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.io_strategy) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::core::_IOStrategy_default_instance_); +} +inline ::flyteidl::core::IOStrategy* DataLoadingConfig::release_io_strategy() { + // @@protoc_insertion_point(field_release:flyteidl.core.DataLoadingConfig.io_strategy) - enabled_ = value; - // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.enabled) + ::flyteidl::core::IOStrategy* temp = io_strategy_; + io_strategy_ = nullptr; + return temp; +} +inline ::flyteidl::core::IOStrategy* DataLoadingConfig::mutable_io_strategy() { + + if (io_strategy_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::core::IOStrategy>(GetArenaNoVirtual()); + io_strategy_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.core.DataLoadingConfig.io_strategy) + return io_strategy_; +} +inline void DataLoadingConfig::set_allocated_io_strategy(::flyteidl::core::IOStrategy* io_strategy) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete io_strategy_; + } + if (io_strategy) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + io_strategy = ::google::protobuf::internal::GetOwnedMessage( + message_arena, io_strategy, submessage_arena); + } + + } else { + + } + io_strategy_ = io_strategy; + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.DataLoadingConfig.io_strategy) } #ifdef __GNUC__ @@ -2940,6 +3256,8 @@ inline void DataLoadingConfig::set_enabled(bool value) { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) @@ -2959,10 +3277,20 @@ template <> inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::RuntimeMetadata_RuntimeType>() { return ::flyteidl::core::RuntimeMetadata_RuntimeType_descriptor(); } -template <> struct is_proto_enum< ::flyteidl::core::DataLoadingConfig_MetadataFormat> : ::std::true_type {}; +template <> struct is_proto_enum< ::flyteidl::core::IOStrategy_DownloadMode> : ::std::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::IOStrategy_DownloadMode>() { + return ::flyteidl::core::IOStrategy_DownloadMode_descriptor(); +} +template <> struct is_proto_enum< ::flyteidl::core::IOStrategy_UploadMode> : ::std::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::IOStrategy_UploadMode>() { + return ::flyteidl::core::IOStrategy_UploadMode_descriptor(); +} +template <> struct is_proto_enum< ::flyteidl::core::DataLoadingConfig_LiteralMapFormat> : ::std::true_type {}; template <> -inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::DataLoadingConfig_MetadataFormat>() { - return ::flyteidl::core::DataLoadingConfig_MetadataFormat_descriptor(); +inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::DataLoadingConfig_LiteralMapFormat>() { + return ::flyteidl::core::DataLoadingConfig_LiteralMapFormat_descriptor(); } } // namespace protobuf diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go index fb00e93dde..d467ad1fe2 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go @@ -82,38 +82,102 @@ func (RuntimeMetadata_RuntimeType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_bd8423ba58d6ed80, []int{1, 0} } -// MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. +// Mode to use for downloading +type IOStrategy_DownloadMode int32 + +const ( + // All data will be downloaded before the main container is executed + IOStrategy_DOWNLOAD_EAGER IOStrategy_DownloadMode = 0 + // Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details + IOStrategy_DOWNLOAD_STREAM IOStrategy_DownloadMode = 1 + // Large objects (offloaded) will not be downloaded + IOStrategy_DO_NOT_DOWNLOAD IOStrategy_DownloadMode = 2 +) + +var IOStrategy_DownloadMode_name = map[int32]string{ + 0: "DOWNLOAD_EAGER", + 1: "DOWNLOAD_STREAM", + 2: "DO_NOT_DOWNLOAD", +} + +var IOStrategy_DownloadMode_value = map[string]int32{ + "DOWNLOAD_EAGER": 0, + "DOWNLOAD_STREAM": 1, + "DO_NOT_DOWNLOAD": 2, +} + +func (x IOStrategy_DownloadMode) String() string { + return proto.EnumName(IOStrategy_DownloadMode_name, int32(x)) +} + +func (IOStrategy_DownloadMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{6, 0} +} + +// Mode to use for uploading +type IOStrategy_UploadMode int32 + +const ( + // All data will be uploaded after the main container exits + IOStrategy_UPLOAD_ON_EXIT IOStrategy_UploadMode = 0 + // Data will be uploaded as it appears. Refer to protocol specification for details + IOStrategy_UPLOAD_EAGER IOStrategy_UploadMode = 1 + // Data will not be uploaded, only references will be written + IOStrategy_DO_NOT_UPLOAD IOStrategy_UploadMode = 2 +) + +var IOStrategy_UploadMode_name = map[int32]string{ + 0: "UPLOAD_ON_EXIT", + 1: "UPLOAD_EAGER", + 2: "DO_NOT_UPLOAD", +} + +var IOStrategy_UploadMode_value = map[string]int32{ + "UPLOAD_ON_EXIT": 0, + "UPLOAD_EAGER": 1, + "DO_NOT_UPLOAD": 2, +} + +func (x IOStrategy_UploadMode) String() string { + return proto.EnumName(IOStrategy_UploadMode_name, int32(x)) +} + +func (IOStrategy_UploadMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{6, 1} +} + +// LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. // If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. // JSON and YAML do not need any protobuf definitions to read it // All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) -type DataLoadingConfig_MetadataFormat int32 +type DataLoadingConfig_LiteralMapFormat int32 const ( // JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html - DataLoadingConfig_JSON DataLoadingConfig_MetadataFormat = 0 - DataLoadingConfig_YAML DataLoadingConfig_MetadataFormat = 1 + DataLoadingConfig_JSON DataLoadingConfig_LiteralMapFormat = 0 + DataLoadingConfig_YAML DataLoadingConfig_LiteralMapFormat = 1 // Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core - DataLoadingConfig_PROTO DataLoadingConfig_MetadataFormat = 2 + DataLoadingConfig_PROTO DataLoadingConfig_LiteralMapFormat = 2 ) -var DataLoadingConfig_MetadataFormat_name = map[int32]string{ +var DataLoadingConfig_LiteralMapFormat_name = map[int32]string{ 0: "JSON", 1: "YAML", 2: "PROTO", } -var DataLoadingConfig_MetadataFormat_value = map[string]int32{ +var DataLoadingConfig_LiteralMapFormat_value = map[string]int32{ "JSON": 0, "YAML": 1, "PROTO": 2, } -func (x DataLoadingConfig_MetadataFormat) String() string { - return proto.EnumName(DataLoadingConfig_MetadataFormat_name, int32(x)) +func (x DataLoadingConfig_LiteralMapFormat) String() string { + return proto.EnumName(DataLoadingConfig_LiteralMapFormat_name, int32(x)) } -func (DataLoadingConfig_MetadataFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{6, 0} +func (DataLoadingConfig_LiteralMapFormat) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{7, 0} } // A customizable interface to convey resources requested for a container. This can be interpretted differently for different @@ -677,10 +741,62 @@ func (m *Container) GetDataConfig() *DataLoadingConfig { return nil } +// Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets) +type IOStrategy struct { + // Mode to use to manage downloads + DownloadMode IOStrategy_DownloadMode `protobuf:"varint,1,opt,name=download_mode,json=downloadMode,proto3,enum=flyteidl.core.IOStrategy_DownloadMode" json:"download_mode,omitempty"` + // Mode to use to manage uploads + UploadMode IOStrategy_UploadMode `protobuf:"varint,2,opt,name=upload_mode,json=uploadMode,proto3,enum=flyteidl.core.IOStrategy_UploadMode" json:"upload_mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IOStrategy) Reset() { *m = IOStrategy{} } +func (m *IOStrategy) String() string { return proto.CompactTextString(m) } +func (*IOStrategy) ProtoMessage() {} +func (*IOStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{6} +} + +func (m *IOStrategy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IOStrategy.Unmarshal(m, b) +} +func (m *IOStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IOStrategy.Marshal(b, m, deterministic) +} +func (m *IOStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_IOStrategy.Merge(m, src) +} +func (m *IOStrategy) XXX_Size() int { + return xxx_messageInfo_IOStrategy.Size(m) +} +func (m *IOStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_IOStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_IOStrategy proto.InternalMessageInfo + +func (m *IOStrategy) GetDownloadMode() IOStrategy_DownloadMode { + if m != nil { + return m.DownloadMode + } + return IOStrategy_DOWNLOAD_EAGER +} + +func (m *IOStrategy) GetUploadMode() IOStrategy_UploadMode { + if m != nil { + return m.UploadMode + } + return IOStrategy_UPLOAD_ON_EXIT +} + // This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. // Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path // Any outputs generated by the user container - within output_path are automatically uploaded. type DataLoadingConfig struct { + // Flag enables DataLoading Config. If this is not set, data loading will not be used! + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // File system path (start at root). This folder will contain all the inputs exploded to a separate file. // Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like // /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations @@ -688,24 +804,23 @@ type DataLoadingConfig struct { // /var/flyte/inputs/y -> Y is a file in Binary format // /var/flyte/inputs/z/... -> Note Z itself is a directory // More information about the protocol - refer to docs #TODO reference docs here - InputPath string `protobuf:"bytes,1,opt,name=input_path,json=inputPath,proto3" json:"input_path,omitempty"` + InputPath string `protobuf:"bytes,2,opt,name=input_path,json=inputPath,proto3" json:"input_path,omitempty"` // File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file - OutputPath string `protobuf:"bytes,2,opt,name=output_path,json=outputPath,proto3" json:"output_path,omitempty"` + OutputPath string `protobuf:"bytes,3,opt,name=output_path,json=outputPath,proto3" json:"output_path,omitempty"` // In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. // This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding - Format DataLoadingConfig_MetadataFormat `protobuf:"varint,3,opt,name=format,proto3,enum=flyteidl.core.DataLoadingConfig_MetadataFormat" json:"format,omitempty"` - // Flag enables DataLoading Config. If this is not set, data loading will not be used! - Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Format DataLoadingConfig_LiteralMapFormat `protobuf:"varint,4,opt,name=format,proto3,enum=flyteidl.core.DataLoadingConfig_LiteralMapFormat" json:"format,omitempty"` + IoStrategy *IOStrategy `protobuf:"bytes,5,opt,name=io_strategy,json=ioStrategy,proto3" json:"io_strategy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DataLoadingConfig) Reset() { *m = DataLoadingConfig{} } func (m *DataLoadingConfig) String() string { return proto.CompactTextString(m) } func (*DataLoadingConfig) ProtoMessage() {} func (*DataLoadingConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{6} + return fileDescriptor_bd8423ba58d6ed80, []int{7} } func (m *DataLoadingConfig) XXX_Unmarshal(b []byte) error { @@ -726,6 +841,13 @@ func (m *DataLoadingConfig) XXX_DiscardUnknown() { var xxx_messageInfo_DataLoadingConfig proto.InternalMessageInfo +func (m *DataLoadingConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + func (m *DataLoadingConfig) GetInputPath() string { if m != nil { return m.InputPath @@ -740,24 +862,26 @@ func (m *DataLoadingConfig) GetOutputPath() string { return "" } -func (m *DataLoadingConfig) GetFormat() DataLoadingConfig_MetadataFormat { +func (m *DataLoadingConfig) GetFormat() DataLoadingConfig_LiteralMapFormat { if m != nil { return m.Format } return DataLoadingConfig_JSON } -func (m *DataLoadingConfig) GetEnabled() bool { +func (m *DataLoadingConfig) GetIoStrategy() *IOStrategy { if m != nil { - return m.Enabled + return m.IoStrategy } - return false + return nil } func init() { proto.RegisterEnum("flyteidl.core.Resources_ResourceName", Resources_ResourceName_name, Resources_ResourceName_value) proto.RegisterEnum("flyteidl.core.RuntimeMetadata_RuntimeType", RuntimeMetadata_RuntimeType_name, RuntimeMetadata_RuntimeType_value) - proto.RegisterEnum("flyteidl.core.DataLoadingConfig_MetadataFormat", DataLoadingConfig_MetadataFormat_name, DataLoadingConfig_MetadataFormat_value) + proto.RegisterEnum("flyteidl.core.IOStrategy_DownloadMode", IOStrategy_DownloadMode_name, IOStrategy_DownloadMode_value) + proto.RegisterEnum("flyteidl.core.IOStrategy_UploadMode", IOStrategy_UploadMode_name, IOStrategy_UploadMode_value) + proto.RegisterEnum("flyteidl.core.DataLoadingConfig_LiteralMapFormat", DataLoadingConfig_LiteralMapFormat_name, DataLoadingConfig_LiteralMapFormat_value) proto.RegisterType((*Resources)(nil), "flyteidl.core.Resources") proto.RegisterType((*Resources_ResourceEntry)(nil), "flyteidl.core.Resources.ResourceEntry") proto.RegisterType((*RuntimeMetadata)(nil), "flyteidl.core.RuntimeMetadata") @@ -765,73 +889,84 @@ func init() { proto.RegisterType((*TaskTemplate)(nil), "flyteidl.core.TaskTemplate") proto.RegisterType((*ContainerPort)(nil), "flyteidl.core.ContainerPort") proto.RegisterType((*Container)(nil), "flyteidl.core.Container") + proto.RegisterType((*IOStrategy)(nil), "flyteidl.core.IOStrategy") proto.RegisterType((*DataLoadingConfig)(nil), "flyteidl.core.DataLoadingConfig") } func init() { proto.RegisterFile("flyteidl/core/tasks.proto", fileDescriptor_bd8423ba58d6ed80) } var fileDescriptor_bd8423ba58d6ed80 = []byte{ - // 985 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xeb, 0x6e, 0xe3, 0x44, - 0x14, 0x6e, 0x2e, 0x4d, 0xe2, 0x93, 0xa6, 0x64, 0x07, 0x58, 0xbc, 0xa5, 0x2d, 0x55, 0xa4, 0x5d, - 0x0a, 0x68, 0x63, 0x94, 0x4a, 0xa5, 0x08, 0x69, 0xa5, 0x5e, 0xd2, 0x76, 0xe9, 0x25, 0xd1, 0x34, - 0x5d, 0x54, 0xfe, 0x84, 0xa9, 0x3d, 0x71, 0x47, 0x6b, 0x7b, 0xcc, 0x78, 0x1c, 0xc9, 0xef, 0xc4, - 0x03, 0xc0, 0xeb, 0xf0, 0x87, 0xc7, 0x00, 0xcd, 0xf8, 0xd2, 0x3a, 0xd5, 0x52, 0xed, 0x2f, 0xcf, - 0x99, 0xef, 0xfb, 0xc6, 0x67, 0xbe, 0x73, 0x7c, 0x0c, 0x2f, 0x66, 0x5e, 0x22, 0x29, 0x73, 0x3c, - 0xcb, 0xe6, 0x82, 0x5a, 0x92, 0x44, 0xef, 0xa3, 0x7e, 0x28, 0xb8, 0xe4, 0xa8, 0x93, 0x43, 0x7d, - 0x05, 0xad, 0x6d, 0x96, 0x99, 0xcc, 0xa1, 0x81, 0x64, 0x33, 0x46, 0x45, 0x4a, 0x5f, 0xdb, 0x58, - 0xc0, 0x03, 0x49, 0xc5, 0x8c, 0xd8, 0x34, 0x83, 0xd7, 0xcb, 0xb0, 0xc7, 0x24, 0x15, 0xc4, 0xcb, - 0xde, 0xb5, 0xb6, 0xe9, 0x72, 0xee, 0x7a, 0xd4, 0xd2, 0xd1, 0x6d, 0x3c, 0xb3, 0x9c, 0x58, 0x10, - 0xc9, 0x78, 0x90, 0xab, 0x17, 0xf1, 0x48, 0x8a, 0xd8, 0x96, 0x29, 0xda, 0xfb, 0xab, 0x0a, 0x06, - 0xa6, 0x11, 0x8f, 0x85, 0x4d, 0x23, 0x74, 0x00, 0x2d, 0x41, 0x7f, 0x8f, 0x69, 0x24, 0x23, 0xb3, - 0xb2, 0x55, 0xdb, 0x6e, 0x0f, 0x5e, 0xf5, 0x4b, 0x57, 0xe9, 0x17, 0xdc, 0x62, 0x35, 0x0c, 0xa4, - 0x48, 0x70, 0xa1, 0x43, 0x6f, 0xa0, 0xe1, 0x31, 0x9f, 0xc9, 0xc8, 0xac, 0x7e, 0xd4, 0x09, 0x99, - 0x6a, 0xed, 0x37, 0xe8, 0x94, 0x00, 0xf4, 0x23, 0xd4, 0x03, 0xe2, 0x53, 0xb3, 0xb2, 0x55, 0xd9, - 0x5e, 0x1d, 0xbc, 0x7c, 0xf2, 0xb8, 0x4b, 0xe2, 0x53, 0xac, 0x25, 0xe8, 0x33, 0x58, 0x9e, 0x13, - 0x2f, 0xa6, 0x66, 0x75, 0xab, 0xb2, 0x6d, 0xe0, 0x34, 0xe8, 0x1d, 0xc3, 0xca, 0x43, 0x2e, 0x6a, - 0x43, 0xf3, 0xfa, 0xf2, 0xec, 0x72, 0xf4, 0xcb, 0x65, 0x77, 0x09, 0x35, 0xa1, 0x76, 0x38, 0xbe, - 0xee, 0x56, 0xd4, 0xe2, 0x64, 0x7c, 0xdd, 0xad, 0x22, 0x80, 0xc6, 0xc5, 0xf0, 0x62, 0x84, 0x6f, - 0xba, 0x35, 0x45, 0xbd, 0x9a, 0x8c, 0xf0, 0xfe, 0xc9, 0xb0, 0x5b, 0xef, 0xfd, 0x51, 0x81, 0x4f, - 0x70, 0x1c, 0x48, 0xe6, 0xd3, 0x0b, 0x2a, 0x89, 0x43, 0x24, 0x41, 0x6f, 0xa0, 0x2e, 0x93, 0x30, - 0x4f, 0xf6, 0xdb, 0xc5, 0x64, 0xcb, 0xec, 0x3c, 0x9e, 0x24, 0x21, 0xc5, 0x5a, 0x87, 0x4c, 0x68, - 0xce, 0xa9, 0x88, 0x18, 0x0f, 0xb2, 0x9c, 0xf3, 0x10, 0x3d, 0x87, 0xc6, 0xcc, 0x23, 0x73, 0x2e, - 0xcc, 0x9a, 0x06, 0xb2, 0xa8, 0xf7, 0x35, 0xb4, 0x1f, 0x1c, 0x83, 0x0c, 0x58, 0x1e, 0x4d, 0x4e, - 0x87, 0xb8, 0xbb, 0x84, 0x3a, 0x60, 0x1c, 0x9f, 0xdf, 0x4c, 0x86, 0xd3, 0xab, 0xa3, 0xb3, 0x6e, - 0xa5, 0xf7, 0x6f, 0x15, 0x56, 0x26, 0x24, 0x7a, 0x5f, 0xe4, 0xda, 0x83, 0x15, 0x87, 0x45, 0x36, - 0x9f, 0x53, 0x41, 0x6e, 0xbd, 0x34, 0xe7, 0x16, 0x2e, 0xed, 0xa1, 0x3d, 0x68, 0x8a, 0xf4, 0x74, - 0x9d, 0x4f, 0x7b, 0xb0, 0xf9, 0xff, 0x57, 0xc2, 0x39, 0x1d, 0xed, 0x40, 0x53, 0x3d, 0x79, 0x2c, - 0xcd, 0xba, 0x56, 0xbe, 0xe8, 0xa7, 0x9d, 0xd8, 0xcf, 0x3b, 0xb1, 0x7f, 0x94, 0x75, 0x2a, 0xce, - 0x99, 0x68, 0x17, 0x9a, 0x82, 0x4a, 0xc1, 0x68, 0x64, 0x2e, 0x6b, 0xd1, 0xfa, 0xa3, 0x72, 0x4b, - 0x91, 0x5c, 0x49, 0x41, 0x24, 0x75, 0x13, 0x9c, 0x93, 0xd1, 0x77, 0xf0, 0x2c, 0x4f, 0x3b, 0x99, - 0xe6, 0x06, 0x36, 0xb4, 0x4f, 0xdd, 0x02, 0x78, 0x97, 0x39, 0xb9, 0x07, 0xa6, 0x43, 0x43, 0x41, - 0x6d, 0x22, 0xa9, 0x33, 0xa5, 0x42, 0x70, 0x31, 0xf5, 0x69, 0x14, 0x11, 0x97, 0x9a, 0x4d, 0xad, - 0x79, 0x7e, 0x8f, 0x0f, 0x15, 0x7c, 0x91, 0xa2, 0xe8, 0x15, 0x74, 0xf4, 0xc7, 0x29, 0xe2, 0x50, - 0x32, 0x65, 0x59, 0x4b, 0x59, 0x76, 0xba, 0x84, 0xcb, 0xdb, 0x07, 0x9f, 0xc3, 0xa7, 0xa5, 0x8d, - 0x69, 0xda, 0x78, 0x7f, 0x66, 0x15, 0x98, 0x50, 0x3f, 0xf4, 0x88, 0xa4, 0xe8, 0x1b, 0xa8, 0x32, - 0x47, 0xfb, 0xae, 0xec, 0x29, 0xdf, 0xf4, 0x6d, 0x31, 0x25, 0x70, 0x95, 0x39, 0x08, 0x65, 0x8d, - 0x95, 0x76, 0x45, 0xda, 0x2c, 0x3f, 0x40, 0xcb, 0xcf, 0x7c, 0xd7, 0x4d, 0xd1, 0x1e, 0x7c, 0xb9, - 0x70, 0xc8, 0xc3, 0x7a, 0xe3, 0x82, 0x8c, 0x7e, 0x02, 0xa3, 0x18, 0x32, 0x59, 0x75, 0x36, 0x16, - 0x95, 0x49, 0x48, 0x9d, 0xb7, 0x39, 0x09, 0xdf, 0xf3, 0x91, 0x05, 0x0d, 0x3b, 0x8e, 0x24, 0xf7, - 0xb3, 0x12, 0x7d, 0xf1, 0xa8, 0xae, 0x57, 0x7a, 0xc2, 0xe0, 0x8c, 0x86, 0xf6, 0xc0, 0xb0, 0x79, - 0x20, 0x09, 0x0b, 0xa8, 0xd0, 0x45, 0x69, 0x0f, 0xcc, 0x85, 0xb7, 0x1d, 0xe6, 0xf8, 0xe9, 0x12, - 0xbe, 0x27, 0x1f, 0xb4, 0xa0, 0x21, 0x89, 0x70, 0xa9, 0xec, 0xed, 0x42, 0xa7, 0xe0, 0x8c, 0xb9, - 0x90, 0xe8, 0x25, 0xac, 0x16, 0xbc, 0x69, 0xc8, 0x85, 0xd4, 0x36, 0x76, 0x70, 0xc7, 0x7e, 0x48, - 0xeb, 0xfd, 0x5d, 0x05, 0xa3, 0x10, 0xaa, 0x79, 0xc0, 0x7c, 0x55, 0xe6, 0x4a, 0x3a, 0x0f, 0x74, - 0xa0, 0xbe, 0x39, 0x9b, 0xfb, 0x3e, 0x09, 0x1c, 0x3d, 0xb2, 0x0c, 0x9c, 0x87, 0xca, 0x74, 0x22, - 0xdc, 0xc8, 0xac, 0xe9, 0x6d, 0xbd, 0x46, 0xbb, 0x60, 0x88, 0x7c, 0xe6, 0x64, 0xde, 0x99, 0x1f, - 0x9a, 0x49, 0xf8, 0x9e, 0x8a, 0x5e, 0x43, 0x8d, 0x06, 0x73, 0x73, 0x59, 0x0f, 0xc5, 0xc5, 0x3a, - 0x9d, 0xd1, 0xe4, 0x9d, 0x6a, 0x91, 0x31, 0x61, 0x02, 0x2b, 0x1e, 0xda, 0x81, 0x86, 0xcd, 0x83, - 0x19, 0x73, 0xcd, 0xc6, 0xd3, 0x8a, 0x8c, 0x8a, 0x06, 0xb0, 0xac, 0xac, 0x88, 0xcc, 0xa6, 0xd6, - 0xac, 0x7f, 0xc8, 0x65, 0x65, 0x0d, 0x4e, 0xa9, 0x68, 0x1f, 0xda, 0xaa, 0x27, 0xa6, 0xd9, 0xdb, - 0x0c, 0x7d, 0xa3, 0xad, 0x05, 0xe5, 0x11, 0x91, 0xe4, 0x9c, 0x13, 0x87, 0x05, 0xee, 0xa1, 0xe6, - 0x61, 0x50, 0xa2, 0x74, 0xdd, 0xfb, 0xa7, 0x02, 0xcf, 0x1e, 0x31, 0xd0, 0x06, 0x00, 0x0b, 0xc2, - 0x58, 0x4e, 0x43, 0x22, 0xef, 0x32, 0xc7, 0x0d, 0xbd, 0x33, 0x26, 0xf2, 0x0e, 0x7d, 0x05, 0x6d, - 0x1e, 0xcb, 0x02, 0x4f, 0xfb, 0x1a, 0xd2, 0x2d, 0x4d, 0x38, 0x81, 0xc6, 0x8c, 0x0b, 0x9f, 0x48, - 0xdd, 0xdb, 0xab, 0x03, 0xeb, 0xa9, 0x9c, 0xfa, 0x79, 0xa7, 0x1f, 0x6b, 0x19, 0xce, 0xe4, 0xaa, - 0xbe, 0x34, 0x50, 0xd3, 0xcc, 0xd1, 0xf5, 0x6a, 0xe1, 0x3c, 0xec, 0x59, 0xb0, 0x5a, 0xd6, 0xa0, - 0x16, 0xd4, 0x7f, 0xbe, 0x1a, 0xa9, 0x1f, 0x41, 0x0b, 0xea, 0x37, 0xfb, 0x17, 0xe7, 0xdd, 0x8a, - 0x1a, 0xa9, 0x63, 0x3c, 0x9a, 0x8c, 0xba, 0xd5, 0x83, 0xc1, 0xaf, 0xdf, 0xbb, 0x4c, 0xde, 0xc5, - 0xb7, 0x7d, 0x9b, 0xfb, 0x96, 0x97, 0xcc, 0xa4, 0x55, 0xfc, 0x9c, 0x5d, 0x1a, 0x58, 0xe1, 0xed, - 0x6b, 0x97, 0x5b, 0xa5, 0xff, 0xf5, 0x6d, 0x43, 0x7f, 0x17, 0x3b, 0xff, 0x05, 0x00, 0x00, 0xff, - 0xff, 0x0d, 0x7e, 0x2f, 0x5b, 0x30, 0x08, 0x00, 0x00, + // 1147 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x5f, 0x6f, 0xdb, 0xb6, + 0x17, 0x8d, 0x95, 0xc4, 0x7f, 0xae, 0xe3, 0x54, 0x65, 0x7f, 0xbf, 0x4e, 0xcd, 0xda, 0x2e, 0x10, + 0xd6, 0xae, 0xdb, 0x50, 0x7b, 0x75, 0x81, 0xae, 0xdb, 0x80, 0x02, 0x49, 0xed, 0xb6, 0x59, 0x6c, + 0xcb, 0xa0, 0x9d, 0x76, 0xdd, 0x8b, 0xc6, 0x48, 0xb4, 0x4b, 0x54, 0x12, 0x35, 0x8a, 0xca, 0xe0, + 0x4f, 0xb4, 0x97, 0xbd, 0x0e, 0xd8, 0xbe, 0xce, 0xbe, 0xc8, 0x06, 0x51, 0x94, 0xfc, 0xa7, 0xc8, + 0x82, 0x3d, 0x99, 0xbc, 0xe7, 0x9c, 0x4b, 0xea, 0xde, 0xeb, 0x23, 0xc1, 0xad, 0x59, 0xb0, 0x90, + 0x94, 0xf9, 0x41, 0xc7, 0xe3, 0x82, 0x76, 0x24, 0x49, 0xde, 0x27, 0xed, 0x58, 0x70, 0xc9, 0x51, + 0xab, 0x80, 0xda, 0x19, 0x74, 0x70, 0x77, 0x9d, 0xc9, 0x7c, 0x1a, 0x49, 0x36, 0x63, 0x54, 0xe4, + 0xf4, 0x83, 0x3b, 0x1b, 0x78, 0x24, 0xa9, 0x98, 0x11, 0x8f, 0x6a, 0xf8, 0xf6, 0x3a, 0x1c, 0x30, + 0x49, 0x05, 0x09, 0xf4, 0x59, 0x07, 0x77, 0xe7, 0x9c, 0xcf, 0x03, 0xda, 0x51, 0xbb, 0xf3, 0x74, + 0xd6, 0xf1, 0x53, 0x41, 0x24, 0xe3, 0x51, 0xa1, 0xde, 0xc4, 0x13, 0x29, 0x52, 0x4f, 0xe6, 0xa8, + 0xfd, 0xa7, 0x01, 0x0d, 0x4c, 0x13, 0x9e, 0x0a, 0x8f, 0x26, 0xe8, 0x18, 0xea, 0x82, 0xfe, 0x9c, + 0xd2, 0x44, 0x26, 0x56, 0xe5, 0x70, 0xfb, 0x41, 0xb3, 0x7b, 0xbf, 0xbd, 0xf6, 0x28, 0xed, 0x92, + 0x5b, 0xae, 0xfa, 0x91, 0x14, 0x0b, 0x5c, 0xea, 0xd0, 0x33, 0xa8, 0x06, 0x2c, 0x64, 0x32, 0xb1, + 0x8c, 0xff, 0x94, 0x41, 0xab, 0x0e, 0x7e, 0x82, 0xd6, 0x1a, 0x80, 0xbe, 0x81, 0x9d, 0x88, 0x84, + 0xd4, 0xaa, 0x1c, 0x56, 0x1e, 0xec, 0x77, 0xef, 0x5d, 0x99, 0x6e, 0x44, 0x42, 0x8a, 0x95, 0x04, + 0xfd, 0x0f, 0x76, 0x2f, 0x48, 0x90, 0x52, 0xcb, 0x38, 0xac, 0x3c, 0x68, 0xe0, 0x7c, 0x63, 0xbf, + 0x80, 0xbd, 0x55, 0x2e, 0x6a, 0x42, 0xed, 0x6c, 0x74, 0x3a, 0x72, 0xde, 0x8c, 0xcc, 0x2d, 0x54, + 0x83, 0xed, 0xe7, 0xe3, 0x33, 0xb3, 0x92, 0x2d, 0x5e, 0x8e, 0xcf, 0x4c, 0x03, 0x01, 0x54, 0x87, + 0xfd, 0xa1, 0x83, 0xdf, 0x9a, 0xdb, 0x19, 0x75, 0x32, 0x75, 0xf0, 0xd1, 0xcb, 0xbe, 0xb9, 0x63, + 0xff, 0x56, 0x81, 0x6b, 0x38, 0x8d, 0x24, 0x0b, 0xe9, 0x90, 0x4a, 0xe2, 0x13, 0x49, 0xd0, 0x33, + 0xd8, 0x91, 0x8b, 0xb8, 0xb8, 0xec, 0x17, 0x9b, 0x97, 0x5d, 0x67, 0x17, 0xfb, 0xe9, 0x22, 0xa6, + 0x58, 0xe9, 0x90, 0x05, 0xb5, 0x0b, 0x2a, 0x12, 0xc6, 0x23, 0x7d, 0xe7, 0x62, 0x8b, 0x6e, 0x42, + 0x75, 0x16, 0x90, 0x0b, 0x2e, 0xac, 0x6d, 0x05, 0xe8, 0x9d, 0xfd, 0x19, 0x34, 0x57, 0xd2, 0xa0, + 0x06, 0xec, 0x3a, 0xd3, 0x57, 0x7d, 0x6c, 0x6e, 0xa1, 0x16, 0x34, 0x5e, 0x0c, 0xde, 0x4e, 0xfb, + 0xee, 0xa4, 0x77, 0x6a, 0x56, 0xec, 0xbf, 0x0d, 0xd8, 0x9b, 0x92, 0xe4, 0x7d, 0x79, 0x57, 0x1b, + 0xf6, 0x7c, 0x96, 0x78, 0xfc, 0x82, 0x0a, 0x72, 0x1e, 0xe4, 0x77, 0xae, 0xe3, 0xb5, 0x18, 0x7a, + 0x0a, 0x35, 0x91, 0x67, 0x57, 0xf7, 0x69, 0x76, 0xef, 0xfe, 0xfb, 0x23, 0xe1, 0x82, 0x8e, 0x1e, + 0x43, 0x2d, 0xfb, 0xe5, 0xa9, 0xb4, 0x76, 0x94, 0xf2, 0x56, 0x3b, 0x9f, 0xc4, 0x76, 0x31, 0x89, + 0xed, 0x9e, 0x9e, 0x54, 0x5c, 0x30, 0xd1, 0x13, 0xa8, 0x09, 0x2a, 0x05, 0xa3, 0x89, 0xb5, 0xab, + 0x44, 0xb7, 0x3f, 0x68, 0xb7, 0x14, 0x8b, 0x89, 0x14, 0x44, 0xd2, 0xf9, 0x02, 0x17, 0x64, 0xf4, + 0x25, 0x5c, 0x2f, 0xae, 0xbd, 0x70, 0x8b, 0x02, 0x56, 0x55, 0x9d, 0xcc, 0x12, 0x78, 0xad, 0x2b, + 0xf9, 0x14, 0x2c, 0x9f, 0xc6, 0x82, 0x7a, 0x44, 0x52, 0xdf, 0xa5, 0x42, 0x70, 0xe1, 0x86, 0x34, + 0x49, 0xc8, 0x9c, 0x5a, 0x35, 0xa5, 0xb9, 0xb9, 0xc4, 0xfb, 0x19, 0x3c, 0xcc, 0x51, 0x74, 0x1f, + 0x5a, 0xea, 0xcf, 0x29, 0xd2, 0x58, 0xb2, 0xac, 0x64, 0xf5, 0xac, 0x64, 0xaf, 0xb6, 0xf0, 0x7a, + 0xf8, 0xf8, 0xff, 0x70, 0x63, 0x2d, 0xe0, 0xe6, 0x83, 0xf7, 0x87, 0xee, 0xc0, 0x94, 0x86, 0x71, + 0x40, 0x24, 0x45, 0x9f, 0x83, 0xc1, 0x7c, 0x55, 0xf7, 0xac, 0x3c, 0xeb, 0x4f, 0x7a, 0x52, 0xba, + 0x04, 0x36, 0x98, 0x8f, 0x90, 0x1e, 0xac, 0x7c, 0x2a, 0xf2, 0x61, 0xf9, 0x1a, 0xea, 0xa1, 0xae, + 0xbb, 0x1a, 0x8a, 0x66, 0xf7, 0xe3, 0x8d, 0x24, 0xab, 0xfd, 0xc6, 0x25, 0x19, 0x7d, 0x07, 0x8d, + 0xd2, 0x64, 0x74, 0x77, 0xee, 0x6c, 0x2a, 0x17, 0x31, 0xf5, 0x4f, 0x0a, 0x12, 0x5e, 0xf2, 0x51, + 0x07, 0xaa, 0x5e, 0x9a, 0x48, 0x1e, 0xea, 0x16, 0x7d, 0xf4, 0x41, 0x5f, 0x27, 0xca, 0x61, 0xb0, + 0xa6, 0xa1, 0xa7, 0xd0, 0xf0, 0x78, 0x24, 0x09, 0x8b, 0xa8, 0x50, 0x4d, 0x69, 0x76, 0xad, 0x8d, + 0xd3, 0x9e, 0x17, 0xf8, 0xab, 0x2d, 0xbc, 0x24, 0x1f, 0xd7, 0xa1, 0x2a, 0x89, 0x98, 0x53, 0x69, + 0x3f, 0x81, 0x56, 0xc9, 0x19, 0x73, 0x21, 0xd1, 0x3d, 0xd8, 0x2f, 0x79, 0x6e, 0xcc, 0x85, 0x54, + 0x65, 0x6c, 0xe1, 0x96, 0xb7, 0x4a, 0xb3, 0xff, 0x32, 0xa0, 0x51, 0x0a, 0x33, 0x3f, 0x60, 0x61, + 0xd6, 0xe6, 0x4a, 0xee, 0x07, 0x6a, 0x93, 0xfd, 0xe7, 0x3c, 0x1e, 0x86, 0x24, 0xf2, 0x95, 0x65, + 0x35, 0x70, 0xb1, 0xcd, 0x8a, 0x4e, 0xc4, 0x3c, 0xb1, 0xb6, 0x55, 0x58, 0xad, 0xd1, 0x13, 0x68, + 0x88, 0xc2, 0x73, 0x74, 0xed, 0xac, 0xcb, 0x3c, 0x09, 0x2f, 0xa9, 0xe8, 0x21, 0x6c, 0xd3, 0xe8, + 0xc2, 0xda, 0x55, 0xa6, 0xb8, 0xd9, 0xa7, 0x53, 0xba, 0x78, 0x9d, 0x8d, 0xc8, 0x98, 0x30, 0x81, + 0x33, 0x1e, 0x7a, 0x0c, 0x55, 0x8f, 0x47, 0x33, 0x36, 0xb7, 0xaa, 0x57, 0x2b, 0x34, 0x15, 0x75, + 0x61, 0x37, 0x2b, 0x45, 0x62, 0xd5, 0x94, 0xe6, 0xf6, 0x65, 0x55, 0xce, 0x4a, 0x83, 0x73, 0x2a, + 0x3a, 0x82, 0x66, 0x36, 0x13, 0xae, 0x3e, 0xad, 0xa1, 0x9e, 0xe8, 0x70, 0x43, 0xd9, 0x23, 0x92, + 0x0c, 0x38, 0xf1, 0x59, 0x34, 0x7f, 0xae, 0x78, 0x18, 0x32, 0x51, 0xbe, 0xb6, 0x7f, 0x37, 0x00, + 0x4e, 0x9c, 0xe2, 0x5f, 0x89, 0x4e, 0xa1, 0xe5, 0xf3, 0x5f, 0xa2, 0x80, 0x13, 0xdf, 0x0d, 0xb9, + 0x5f, 0x98, 0xe1, 0xe6, 0x8b, 0x60, 0xa9, 0x68, 0xf7, 0x34, 0x7d, 0xc8, 0x7d, 0x8a, 0xf7, 0xfc, + 0x95, 0x1d, 0xea, 0x43, 0x33, 0x8d, 0x97, 0xa9, 0x0c, 0x95, 0xea, 0xd3, 0xcb, 0x53, 0x9d, 0xc5, + 0x65, 0x22, 0x48, 0xcb, 0xb5, 0x3d, 0x80, 0xbd, 0xd5, 0x43, 0x10, 0x82, 0xfd, 0x9e, 0xf3, 0x66, + 0x34, 0x70, 0x8e, 0x7a, 0x6e, 0xff, 0xe8, 0xa5, 0xf2, 0xcb, 0x1b, 0x70, 0xad, 0x8c, 0x4d, 0xa6, + 0xb8, 0x7f, 0x34, 0x34, 0x2b, 0x79, 0xd0, 0x1d, 0x39, 0x53, 0xb7, 0xc0, 0x4c, 0xc3, 0xee, 0x03, + 0x2c, 0xcf, 0xc9, 0x72, 0x9d, 0x8d, 0x95, 0xca, 0x19, 0xb9, 0xfd, 0x1f, 0x4e, 0xa6, 0xe6, 0x16, + 0x32, 0x61, 0x4f, 0xc7, 0xf2, 0xec, 0x15, 0x74, 0x1d, 0x5a, 0x3a, 0x51, 0x0e, 0x98, 0x86, 0xfd, + 0xab, 0x01, 0xd7, 0x3f, 0xa8, 0x6c, 0x36, 0x8e, 0x34, 0xca, 0xcc, 0xd7, 0xd7, 0x8e, 0x5c, 0x6c, + 0xd1, 0x1d, 0x00, 0x16, 0xc5, 0xa9, 0x74, 0x63, 0x22, 0xdf, 0x69, 0x27, 0x68, 0xa8, 0xc8, 0x98, + 0xc8, 0x77, 0xe8, 0x13, 0x68, 0xf2, 0x54, 0x96, 0x78, 0xfe, 0x9a, 0x80, 0x3c, 0xa4, 0x08, 0x27, + 0x50, 0x9d, 0x71, 0x11, 0x92, 0xdc, 0x91, 0xf7, 0xbb, 0x8f, 0xae, 0xea, 0x72, 0x7b, 0x90, 0x7f, + 0x6b, 0x0c, 0x49, 0xfc, 0x42, 0x09, 0xb1, 0x4e, 0x80, 0xbe, 0x85, 0x26, 0xe3, 0x6e, 0xa2, 0xab, + 0xae, 0x9d, 0xe0, 0xd6, 0xa5, 0x6d, 0xc1, 0xc0, 0x78, 0xb1, 0xb6, 0x1f, 0x81, 0xb9, 0x99, 0x17, + 0xd5, 0x61, 0xe7, 0xfb, 0x89, 0x93, 0xbd, 0x80, 0xeb, 0xb0, 0xf3, 0xf6, 0x68, 0x38, 0x30, 0x2b, + 0xd9, 0xab, 0x6c, 0x8c, 0x9d, 0xa9, 0x63, 0x1a, 0xc7, 0xdd, 0x1f, 0xbf, 0x9a, 0x33, 0xf9, 0x2e, + 0x3d, 0x6f, 0x7b, 0x3c, 0xec, 0x04, 0x8b, 0x99, 0xec, 0x94, 0x1f, 0x45, 0x73, 0x1a, 0x75, 0xe2, + 0xf3, 0x87, 0x73, 0xde, 0x59, 0xfb, 0x4e, 0x3a, 0xaf, 0x2a, 0x3f, 0x7a, 0xfc, 0x4f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x87, 0x5a, 0xf4, 0x00, 0xa8, 0x09, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go index 3ed12e2074..f242e39011 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go @@ -630,6 +630,74 @@ var _ interface { ErrorName() string } = ContainerValidationError{} +// Validate checks the field values on IOStrategy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *IOStrategy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for DownloadMode + + // no validation rules for UploadMode + + return nil +} + +// IOStrategyValidationError is the validation error returned by +// IOStrategy.Validate if the designated constraints aren't met. +type IOStrategyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e IOStrategyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e IOStrategyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e IOStrategyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e IOStrategyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e IOStrategyValidationError) ErrorName() string { return "IOStrategyValidationError" } + +// Error satisfies the builtin error interface +func (e IOStrategyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sIOStrategy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = IOStrategyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = IOStrategyValidationError{} + // Validate checks the field values on DataLoadingConfig with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -638,13 +706,23 @@ func (m *DataLoadingConfig) Validate() error { return nil } + // no validation rules for Enabled + // no validation rules for InputPath // no validation rules for OutputPath // no validation rules for Format - // no validation rules for Enabled + if v, ok := interface{}(m.GetIoStrategy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DataLoadingConfigValidationError{ + field: "IoStrategy", + reason: "embedded message failed validation", + cause: err, + } + } + } return nil } diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index 99f3bad1e2..c3c283404c 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -2691,7 +2691,7 @@ } } }, - "DataLoadingConfigMetadataFormat": { + "DataLoadingConfigLiteralMapFormat": { "type": "string", "enum": [ "JSON", @@ -2700,7 +2700,7 @@ ], "default": "JSON", "description": "- JSON: JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html\n - PROTO: Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core", - "title": "MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. \nIf the user has access to the protocol buffer definitions, it is recommended to use the PROTO format.\nJSON and YAML do not need any protobuf definitions to read it\nAll remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem)" + "title": "LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. \nIf the user has access to the protocol buffer definitions, it is recommended to use the PROTO format.\nJSON and YAML do not need any protobuf definitions to read it\nAll remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem)" }, "ExecutionErrorErrorKind": { "type": "string", @@ -2724,6 +2724,28 @@ "default": "MANUAL", "description": "The method by which this execution was launched.\n\n - MANUAL: The default execution mode, MANUAL implies that an execution was launched by an individual.\n - SCHEDULED: A schedule triggered this execution launch.\n - SYSTEM: A system process was responsible for launching this execution rather an individual.\n - RELAUNCH: This execution was launched with identical inputs as a previous execution.\n - CHILD_WORKFLOW: This execution was triggered by another execution." }, + "IOStrategyDownloadMode": { + "type": "string", + "enum": [ + "DOWNLOAD_EAGER", + "DOWNLOAD_STREAM", + "DO_NOT_DOWNLOAD" + ], + "default": "DOWNLOAD_EAGER", + "description": "- DOWNLOAD_EAGER: All data will be downloaded before the main container is executed\n - DOWNLOAD_STREAM: Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details\n - DO_NOT_DOWNLOAD: Large objects (offloaded) will not be downloaded", + "title": "Mode to use for downloading" + }, + "IOStrategyUploadMode": { + "type": "string", + "enum": [ + "UPLOAD_ON_EXIT", + "UPLOAD_EAGER", + "DO_NOT_UPLOAD" + ], + "default": "UPLOAD_ON_EXIT", + "description": "- UPLOAD_ON_EXIT: All data will be uploaded after the main container exits\n - UPLOAD_EAGER: Data will be uploaded as it appears. Refer to protocol specification for details\n - DO_NOT_UPLOAD: Data will not be uploaded, only references will be written", + "title": "Mode to use for uploading" + }, "ResourcesResourceEntry": { "type": "object", "properties": { @@ -4511,6 +4533,11 @@ "coreDataLoadingConfig": { "type": "object", "properties": { + "enabled": { + "type": "boolean", + "format": "boolean", + "title": "Flag enables DataLoading Config. If this is not set, data loading will not be used!" + }, "input_path": { "type": "string", "title": "File system path (start at root). This folder will contain all the inputs exploded to a separate file. \nExample, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is \"/var/flyte/inputs\", then the file system will look like\n/var/flyte/inputs/inputs.\u003cmetadata format dependent -\u003e .pb .json .yaml\u003e -\u003e Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations \n/var/flyte/inputs/x -\u003e X is a file that contains the value of x (integer) in string format\n/var/flyte/inputs/y -\u003e Y is a file in Binary format\n/var/flyte/inputs/z/... -\u003e Note Z itself is a directory\nMore information about the protocol - refer to docs #TODO reference docs here" @@ -4520,13 +4547,11 @@ "title": "File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file" }, "format": { - "$ref": "#/definitions/DataLoadingConfigMetadataFormat", + "$ref": "#/definitions/DataLoadingConfigLiteralMapFormat", "title": "In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.\nThis format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding" }, - "enabled": { - "type": "boolean", - "format": "boolean", - "title": "Flag enables DataLoading Config. If this is not set, data loading will not be used!" + "io_strategy": { + "$ref": "#/definitions/coreIOStrategy" } }, "description": "This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.\nFlyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path\nAny outputs generated by the user container - within output_path are automatically uploaded." @@ -4566,6 +4591,20 @@ }, "description": "Represents the error message from the execution." }, + "coreIOStrategy": { + "type": "object", + "properties": { + "download_mode": { + "$ref": "#/definitions/IOStrategyDownloadMode", + "title": "Mode to use to manage downloads" + }, + "upload_mode": { + "$ref": "#/definitions/IOStrategyUploadMode", + "title": "Mode to use to manage uploads" + } + }, + "title": "Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets)" + }, "coreIdentifier": { "type": "object", "properties": { diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index 086ebd7e12..e2beed3408 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -197,6 +197,7 @@ Class | Method | HTTP request | Description - [CoreIdentifier](docs/CoreIdentifier.md) - [CoreIfBlock](docs/CoreIfBlock.md) - [CoreIfElseBlock](docs/CoreIfElseBlock.md) + - [CoreIoStrategy](docs/CoreIoStrategy.md) - [CoreKeyValuePair](docs/CoreKeyValuePair.md) - [CoreLiteral](docs/CoreLiteral.md) - [CoreLiteralCollection](docs/CoreLiteralCollection.md) @@ -234,7 +235,7 @@ Class | Method | HTTP request | Description - [CoreWorkflowMetadataDefaults](docs/CoreWorkflowMetadataDefaults.md) - [CoreWorkflowNode](docs/CoreWorkflowNode.md) - [CoreWorkflowTemplate](docs/CoreWorkflowTemplate.md) - - [DataLoadingConfigMetadataFormat](docs/DataLoadingConfigMetadataFormat.md) + - [DataLoadingConfigLiteralMapFormat](docs/DataLoadingConfigLiteralMapFormat.md) - [EventNodeExecutionEvent](docs/EventNodeExecutionEvent.md) - [EventParentTaskExecutionMetadata](docs/EventParentTaskExecutionMetadata.md) - [EventTaskExecutionEvent](docs/EventTaskExecutionEvent.md) @@ -246,6 +247,8 @@ Class | Method | HTTP request | Description - [FlyteidladminWorkflowNodeMetadata](docs/FlyteidladminWorkflowNodeMetadata.md) - [FlyteidlcoreSchema](docs/FlyteidlcoreSchema.md) - [FlyteidleventWorkflowNodeMetadata](docs/FlyteidleventWorkflowNodeMetadata.md) + - [IoStrategyDownloadMode](docs/IoStrategyDownloadMode.md) + - [IoStrategyUploadMode](docs/IoStrategyUploadMode.md) - [ProtobufListValue](docs/ProtobufListValue.md) - [ProtobufNullValue](docs/ProtobufNullValue.md) - [ProtobufStruct](docs/ProtobufStruct.md) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index bb3c25b41f..384bce6ebe 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -2323,9 +2323,9 @@ definitions: ids: - "ids" - "ids" - DataLoadingConfigMetadataFormat: + DataLoadingConfigLiteralMapFormat: type: "string" - title: "MetadataFormat decides the encoding format in which the input metadata\ + title: "LiteralMapFormat decides the encoding format in which the input metadata\ \ should be made available to the containers. \nIf the user has access to the\ \ protocol buffer definitions, it is recommended to use the PROTO format.\n\ JSON and YAML do not need any protobuf definitions to read it\nAll remote references\ @@ -2364,6 +2364,31 @@ definitions: - "RELAUNCH" - "CHILD_WORKFLOW" default: "MANUAL" + IOStrategyDownloadMode: + type: "string" + title: "Mode to use for downloading" + description: "- DOWNLOAD_EAGER: All data will be downloaded before the main container\ + \ is executed\n - DOWNLOAD_STREAM: Data will be downloaded as a stream and an\ + \ End-Of-Stream marker will be written to indicate all data has been downloaded.\ + \ Refer to protocol for details\n - DO_NOT_DOWNLOAD: Large objects (offloaded)\ + \ will not be downloaded" + enum: + - "DOWNLOAD_EAGER" + - "DOWNLOAD_STREAM" + - "DO_NOT_DOWNLOAD" + default: "DOWNLOAD_EAGER" + IOStrategyUploadMode: + type: "string" + title: "Mode to use for uploading" + description: "- UPLOAD_ON_EXIT: All data will be uploaded after the main container\ + \ exits\n - UPLOAD_EAGER: Data will be uploaded as it appears. Refer to protocol\ + \ specification for details\n - DO_NOT_UPLOAD: Data will not be uploaded, only\ + \ references will be written" + enum: + - "UPLOAD_ON_EXIT" + - "UPLOAD_EAGER" + - "DO_NOT_UPLOAD" + default: "UPLOAD_ON_EXIT" ResourcesResourceEntry: type: "object" properties: @@ -5259,6 +5284,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -5396,6 +5424,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -5767,6 +5798,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -5897,6 +5931,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -7745,6 +7782,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -7866,6 +7906,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -10568,6 +10611,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -10689,6 +10735,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -13347,6 +13396,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -13468,6 +13520,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -16067,6 +16122,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -16188,6 +16246,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -17532,6 +17593,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -20160,6 +20224,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -20281,6 +20348,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -21316,6 +21386,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -21350,6 +21423,11 @@ definitions: coreDataLoadingConfig: type: "object" properties: + enabled: + type: "boolean" + format: "boolean" + title: "Flag enables DataLoading Config. If this is not set, data loading\ + \ will not be used!" input_path: type: "string" title: "File system path (start at root). This folder will contain all the\ @@ -21372,18 +21450,18 @@ definitions: \ file that contains references to all files or inlined primitive values.\n\ This format decides the actual encoding for the data. Refer to the encoding\ \ to understand the specifics of the contents and the encoding" - $ref: "#/definitions/DataLoadingConfigMetadataFormat" - enabled: - type: "boolean" - format: "boolean" - title: "Flag enables DataLoading Config. If this is not set, data loading\ - \ will not be used!" + $ref: "#/definitions/DataLoadingConfigLiteralMapFormat" + io_strategy: + $ref: "#/definitions/coreIOStrategy" description: "This configuration allows executing raw containers in Flyte using\ \ the Flyte CoPilot system.\nFlyte CoPilot, eliminates the needs of flytekit\ \ or sdk inside the container. Any inputs required by the users container are\ \ side-loaded in the input_path\nAny outputs generated by the user container\ \ - within output_path are automatically uploaded." example: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true @@ -21421,6 +21499,20 @@ definitions: kind: {} message: "message" error_uri: "error_uri" + coreIOStrategy: + type: "object" + properties: + download_mode: + title: "Mode to use to manage downloads" + $ref: "#/definitions/IOStrategyDownloadMode" + upload_mode: + title: "Mode to use to manage uploads" + $ref: "#/definitions/IOStrategyUploadMode" + title: "Strategy to use when dealing with Blob, Schema, or multipart blob data\ + \ (large datasets)" + example: + upload_mode: {} + download_mode: {} coreIdentifier: type: "object" properties: @@ -22585,6 +22677,9 @@ definitions: - name: {} value: "value" data_config: + io_strategy: + upload_mode: {} + download_mode: {} format: {} output_path: "output_path" enabled: true diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go index 0b2a4874d0..f74fb3aaa1 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go @@ -11,8 +11,9 @@ package flyteadmin // This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path Any outputs generated by the user container - within output_path are automatically uploaded. type CoreDataLoadingConfig struct { + Enabled bool `json:"enabled,omitempty"` InputPath string `json:"input_path,omitempty"` OutputPath string `json:"output_path,omitempty"` - Format *DataLoadingConfigMetadataFormat `json:"format,omitempty"` - Enabled bool `json:"enabled,omitempty"` + Format *DataLoadingConfigLiteralMapFormat `json:"format,omitempty"` + IoStrategy *CoreIoStrategy `json:"io_strategy,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_io_strategy.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_io_strategy.go new file mode 100644 index 0000000000..d310d02903 --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_io_strategy.go @@ -0,0 +1,15 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin + +type CoreIoStrategy struct { + DownloadMode *IoStrategyDownloadMode `json:"download_mode,omitempty"` + UploadMode *IoStrategyUploadMode `json:"upload_mode,omitempty"` +} diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_literal_map_format.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_literal_map_format.go new file mode 100644 index 0000000000..bfb25fd456 --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_literal_map_format.go @@ -0,0 +1,19 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin +// DataLoadingConfigLiteralMapFormat : - JSON: JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html - PROTO: Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core +type DataLoadingConfigLiteralMapFormat string + +// List of DataLoadingConfigLiteralMapFormat +const ( + DataLoadingConfigLiteralMapFormatJSON DataLoadingConfigLiteralMapFormat = "JSON" + DataLoadingConfigLiteralMapFormatYAML DataLoadingConfigLiteralMapFormat = "YAML" + DataLoadingConfigLiteralMapFormatPROTO DataLoadingConfigLiteralMapFormat = "PROTO" +) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go deleted file mode 100644 index 3b758c5b01..0000000000 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go +++ /dev/null @@ -1,19 +0,0 @@ -/* - * flyteidl/service/admin.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * API version: version not set - * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) - */ - -package flyteadmin -// DataLoadingConfigMetadataFormat : - JSON: JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html - PROTO: Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core -type DataLoadingConfigMetadataFormat string - -// List of DataLoadingConfigMetadataFormat -const ( - DataLoadingConfigMetadataFormatJSON DataLoadingConfigMetadataFormat = "JSON" - DataLoadingConfigMetadataFormatYAML DataLoadingConfigMetadataFormat = "YAML" - DataLoadingConfigMetadataFormatPROTO DataLoadingConfigMetadataFormat = "PROTO" -) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_download_mode.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_download_mode.go new file mode 100644 index 0000000000..670fc15294 --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_download_mode.go @@ -0,0 +1,19 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin +// IoStrategyDownloadMode : - DOWNLOAD_EAGER: All data will be downloaded before the main container is executed - DOWNLOAD_STREAM: Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details - DO_NOT_DOWNLOAD: Large objects (offloaded) will not be downloaded +type IoStrategyDownloadMode string + +// List of IOStrategyDownloadMode +const ( + IoStrategyDownloadModeDOWNLOAD_EAGER IoStrategyDownloadMode = "DOWNLOAD_EAGER" + IoStrategyDownloadModeDOWNLOAD_STREAM IoStrategyDownloadMode = "DOWNLOAD_STREAM" + IoStrategyDownloadModeDO_NOT_DOWNLOAD IoStrategyDownloadMode = "DO_NOT_DOWNLOAD" +) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_upload_mode.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_upload_mode.go new file mode 100644 index 0000000000..d7b6e5f1fe --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_io_strategy_upload_mode.go @@ -0,0 +1,19 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin +// IoStrategyUploadMode : - UPLOAD_ON_EXIT: All data will be uploaded after the main container exits - UPLOAD_EAGER: Data will be uploaded as it appears. Refer to protocol specification for details - DO_NOT_UPLOAD: Data will not be uploaded, only references will be written +type IoStrategyUploadMode string + +// List of IOStrategyUploadMode +const ( + IoStrategyUploadModeUPLOAD_ON_EXIT IoStrategyUploadMode = "UPLOAD_ON_EXIT" + IoStrategyUploadModeUPLOAD_EAGER IoStrategyUploadMode = "UPLOAD_EAGER" + IoStrategyUploadModeDO_NOT_UPLOAD IoStrategyUploadMode = "DO_NOT_UPLOAD" +) diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 3221e6ab4d..2aa3fef848 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -77,7 +77,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xf9\x73\x23\xb9\x95\x27\xfe\xbb\xff\x0a\xac\x66\x23\xba\xca\xa6\xa8\xb6\xe7\x08\x6f\x4d\x4c\x7c\x83\x2d\xb1\xaa\x35\xad\x92\x34\x3a\xba\xc6\xbb\x9c\x90\xc1\x4c\x90\x84\x95\x04\xd8\x00\x52\x2a\xda\xd1\xff\xfb\x37\xf0\x70\x24\xf2\x64\x26\x49\x5d\xd5\x39\x1b\xeb\x56\x91\x4c\x24\xce\x87\x77\x7c\xde\xe7\xfd\xe3\x77\x08\x1d\xc8\x47\x3c\x9f\x13\x71\xf0\x01\x1d\xfc\x69\xf8\xfd\xc1\x40\x7f\x46\xd9\x8c\x1f\x7c\x40\xfa\x7b\x84\x0e\x14\x55\x09\xd1\xdf\xcf\x92\xb5\x22\x34\x4e\x8e\x24\x11\x0f\x34\x22\x47\x38\x5e\x52\x36\x5c\x09\xae\x38\x3c\x88\xd0\xc1\x03\x11\x92\x72\xa6\x7f\x6e\xff\x44\x8c\x2b\x24\x89\x3a\xf8\x1d\x42\xbf\x42\xf3\x32\x5a\x90\x25\x91\x07\x1f\xd0\xff\x33\x0f\x2d\x94\x5a\xb9\x06\xf4\xdf\x52\xff\xf6\x7f\xe0\xb7\x11\x67\x32\xcd\xfd\x18\xaf\x56\x09\x8d\xb0\xa2\x9c\x1d\xfd\x4d\x72\x96\xfd\x76\x25\x78\x9c\x46\x2d\x7f\x8b\xd5\x42\x66\x63\x3c\xc2\x2b\x7a\xf4\xf0\xc7\x23\x1c\x29\xfa\x40\xee\x12\x9c\xb2\x68\x71\xb7\x4a\x30\x93\x47\xff\xa0\xb1\x1e\xe3\xdf\x48\xa4\x7e\x85\x7f\xc4\x7c\x89\x29\x33\x7f\x33\xbc\x24\xbf\xfa\x76\x10\x3a\x98\x13\x15\xfc\x13\xa1\x83\x98\xc8\x48\xd0\x95\xb2\xb3\x72\x45\x94\xa0\xe4\x81\x20\xb5\x20\xc8\xbc\x0e\x99\xd7\x21\xfd\x3a\xe4\x66\x4d\xae\x48\x44\x67\x94\xc4\x68\xba\x46\x94\xad\x52\x85\x04\xf9\x25\x25\x52\xa1\x19\x4d\x14\x11\x72\x68\xa7\x0c\xde\xc2\x57\x44\xc0\x38\x4f\x63\xfd\x96\x4f\x44\x8d\xa0\xed\x33\x68\xfa\x32\xc1\x2c\xfc\xb5\x20\x72\xc5\x99\x24\x32\xd7\x55\x84\x0e\xfe\xf4\xfd\xf7\x85\x8f\xca\x23\x18\x21\x99\x46\x11\x91\x72\x96\x26\xc8\xb5\x14\x76\x06\x1e\x82\x45\xc6\xa5\xc6\x10\x3a\xf8\xdf\x82\xcc\x74\x3b\xff\x74\x14\x93\x19\x65\x54\xb7\x2b\xcd\x5e\x0a\x7a\x9b\x7b\xea\xd7\xdf\x55\xfd\xfd\x6b\x30\xa2\x15\x16\x78\x49\xf4\xb4\xf8\xd5\x37\xff\x57\x18\x8b\x5e\x2f\xfd\xf2\x6c\x4d\x8b\x1d\x2f\x8c\xf6\x1c\x2f\x09\xe2\x33\x58\x2e\xfb\x04\xfc\x2d\x88\xe4\xa9\x88\x08\x9a\x92\x84\xb3\xb9\x44\x8a\x97\xe6\x80\x42\x0b\x7a\xab\x15\xbf\xd1\x4b\x49\x05\xd1\x6b\xa5\x44\x4a\x0a\xdf\xaa\xf5\x0a\x3a\x29\x95\xa0\x6c\x1e\x4e\xc5\xaf\x83\x56\x43\x33\x3b\xb4\xc3\xc8\xcc\x03\xb5\x03\x9b\xb0\x91\xfb\x49\x84\x19\x9a\x12\xa4\xcf\x25\x8d\x89\x20\x31\xc2\x12\x61\x24\xd3\xa9\x24\x0a\x3d\x52\xb5\xa0\x4c\xff\xdb\x6c\xdf\xc8\xcd\xd9\xeb\x99\x1b\xf8\xb3\x79\x66\x6e\x25\x11\xba\xe3\x0f\x34\x26\x31\x7a\xc0\x49\x4a\xd0\x8c\x8b\xdc\xf4\x0c\x27\xec\x66\xa1\xe7\x61\x39\xa5\x0c\x4e\x9e\x9e\x4b\xb7\x43\xfe\xe0\xa6\xeb\x0f\x48\xbf\x0f\xa5\x8c\xfe\x92\x92\x64\x8d\x68\x4c\x98\xd2\xe7\x5a\x16\x5b\xfb\x03\x87\xf7\xe3\x04\x1d\x22\x3d\xcf\x44\x28\x98\x6f\xce\x14\xf9\xaa\x24\x3a\x44\x09\xbd\x27\xe8\xbb\x33\x2a\x15\x1a\x5d\x9e\x7e\x37\x40\xdf\x9d\x65\x82\x43\x7e\xf7\x0c\x33\xec\xff\xfe\x9f\xe0\xe8\x29\x3c\x2f\x1e\xba\x83\x91\x3e\xcd\xd7\xe6\x9a\xc8\x5a\xf8\x9f\xdf\x85\xed\xd8\xf5\x6a\x96\xbd\x99\xe0\xb5\x52\xb7\x8b\xac\xfd\x48\x54\xb4\xd8\x20\x68\xe5\x8e\x92\x56\x2f\x47\x51\xd4\xca\xb7\x25\x6b\xf5\x10\x9e\x5a\xde\xee\x22\x6c\xb1\x82\x53\x80\x29\x33\x87\xc6\x9f\xa1\xfc\xca\xa0\x97\x13\x2b\xbb\xc8\xdb\x60\x34\x81\xc8\x75\x92\x34\x98\x89\x57\x32\xd6\x84\x2e\xe9\xa6\x75\x3c\x65\xb1\x56\xbb\xac\x90\x63\xe9\x72\x4a\x84\x1e\xba\x13\x77\x30\xc2\xa9\x16\x7f\x2a\x15\x8c\xc4\x35\x43\xfb\x25\x25\x62\xdd\x30\xb6\x19\x4e\x64\xdd\xe0\x28\x53\x44\xeb\xb5\x85\xaf\x67\x5c\x2c\xb1\xb2\x3f\xf8\xb7\x7f\xe9\x3a\x78\xc5\xef\xc9\xa6\x75\x3e\x35\xab\x16\x61\x09\xcb\xbd\x4c\x13\x45\x57\x09\x41\x2b\x3c\x27\xd2\xce\x42\x9a\x28\x39\x80\x9f\x69\x5d\x9a\x88\x43\x7f\xdb\xc0\x1b\xdc\x2d\x9b\x4a\xf8\x04\xcd\xbc\x20\x63\xe4\xab\x82\x96\x26\x0c\xee\x59\x98\xa2\xf0\xf6\x78\x82\xa9\xdc\x6e\x9f\x48\x2e\xd4\xdd\x74\x3d\xbc\x27\xa5\xf7\xd6\xee\x16\xcc\x10\x56\x4a\xd0\x69\xaa\x88\x1e\xb7\x6e\xc3\xdd\x93\x20\xfa\xcc\x65\x2c\xf5\xe5\x7b\x71\x72\xf1\xee\x1e\x2b\xc1\xe7\x98\xbd\xff\x80\x46\x71\x8c\x4c\x47\xf5\x6f\x68\x6c\xae\xe4\x05\x11\x64\x88\x6e\x16\x54\x22\xb9\xe0\x69\x12\x23\x46\x1e\x88\xd0\x73\x4b\x96\x2b\xb5\x7e\x75\xb3\x15\x53\x41\x22\x98\x98\x2e\x27\xcc\x3f\xa5\x27\x4d\x1b\x3d\x6b\x33\x75\xf7\x64\x0d\x8a\x4b\x79\xfa\x9e\x61\xbf\x14\xbe\x25\x2c\x5d\x16\xee\x0a\xf8\xfc\x64\x7c\x7d\x3c\x3e\x3f\x39\x3d\xff\x54\x78\x42\xab\x11\xfe\xab\xdc\x37\xff\x53\x9a\x9b\x19\x4e\x13\x38\xd5\x41\x6b\xcf\xa6\xb8\x44\x0b\x9a\xc4\x82\xb0\x23\x85\xe5\xfd\x1d\xf9\x4a\xa2\xd4\xdc\xb3\xff\xc8\x7f\x70\xa7\xb5\x4f\x1e\x93\xfc\x27\xb9\x7f\x64\xea\x4e\xe7\x47\xbd\x55\xda\xf9\x49\xb0\x61\xdb\x3d\x07\x9f\xd0\xb8\xf2\xd7\xf0\xc9\x86\x31\xb8\xdf\x34\x74\xd6\xfd\xa4\xb6\x57\xee\x07\x56\x81\xab\xfc\x8d\x20\x4a\xac\xef\xb0\x52\xfa\x94\x6f\xa1\x33\xc2\x92\x22\x3d\x5a\x94\xad\xa7\x55\x1f\x8d\xa2\x08\xb2\xdb\x6b\x8e\xba\x07\xd9\x2f\x37\xe9\x8b\xe7\x3c\x26\x63\xdf\xec\x47\x2e\x6e\xb0\xbc\x7f\x0b\x3a\x63\xae\xe3\xcf\xa1\x36\x6e\x7b\x80\xbe\x39\xa3\x7e\x4b\x71\xd0\xbb\x00\x76\x9f\xc9\xb6\x0e\x03\x2e\x90\x5c\x4b\x45\x96\x1b\x5d\x07\x6f\x67\x22\xac\xbc\x7f\xad\x1d\x2e\x5c\x39\xbf\x81\x53\x9f\xbf\x40\xfb\xe3\xdd\x61\xca\xf6\xe5\xf8\x7b\xed\xe3\x74\x21\x98\xe6\xa1\x5e\xbb\xe5\x73\x01\x07\xbb\x4f\x5e\xfd\x30\x73\xaa\xdd\xbe\x3b\xf9\x44\x5e\x83\xda\xb5\x72\xb3\x7d\x07\x1d\xd8\x60\xf2\xe5\x5d\xc7\xfe\xfc\xe9\x47\x43\xe7\x8a\xf1\x98\x29\x6d\xf3\x5a\xdf\x12\x11\x28\xe2\xc2\xa8\x82\x71\x83\x78\x7b\x3e\xa3\xef\xf6\xfc\xfa\x72\x7c\x7c\xfa\xf1\x74\x7c\x52\xb6\xfa\x6e\x46\xd7\x3f\x95\x3f\xfd\x72\x71\xf5\xd3\xc7\xb3\x8b\x2f\xe5\x6f\xce\x46\xb7\xe7\xc7\x3f\xde\x5d\x9e\x8d\xce\x5b\xdb\x89\x61\x07\x3a\xae\x66\xef\x00\xdb\xa7\x03\x6c\xf0\xed\x7a\xc0\x6c\xf4\xa0\xbd\xf7\x0b\x25\x54\x2a\x3d\x41\xf6\x49\xb4\xc2\x52\x9a\xfb\xd7\xf4\x60\x38\x61\x9f\xb9\x20\x88\xb2\x19\x47\x1c\x82\x43\x52\x89\x34\x52\x94\xcd\xfd\x43\x1f\xd0\x24\xfd\xfe\xfb\x7f\x8e\xce\x28\xbb\x87\xbf\xc8\x6b\x9c\x9c\xde\x3d\xb8\xcd\x6c\xf5\xee\xc1\xf0\xbb\xb7\xe1\x1e\x8c\xb1\xc2\x47\xa1\x57\xf0\x69\xf0\x24\x26\x72\x89\x59\x8c\x78\xaa\xf4\x9f\xfa\xbd\x68\x26\xf8\x52\x9f\x1b\xf2\x95\x4a\x90\x12\x8f\x5c\xdc\xcf\x12\xfe\xd8\xce\x5b\xf5\x89\x28\xef\xef\x39\xc1\x0a\xbf\x05\x27\xd5\x17\x3b\x42\xdf\xf1\x4f\x44\xe9\xbe\x5f\xd9\xb7\xf4\xd0\x92\x1e\x5a\xf2\xb2\xd0\x92\x57\xe5\x29\x7a\x7a\xd9\x97\x77\x2b\x19\x01\x58\x13\xf5\xa8\x0d\x6a\xd4\xc4\x2c\x82\x90\xc4\x53\x0a\xcd\x7c\x20\x60\x83\xc0\xcc\x39\xc9\xdf\x8a\xd0\xcc\x75\xfa\xf9\x05\xe6\x6f\xc2\x87\xdf\xbb\xe8\xb7\x9c\xa8\x37\x29\x57\x5b\x5e\x19\xcf\xe6\x60\x7f\x7a\x39\x5f\x0a\x7f\x77\x89\x77\x77\x08\x70\xb7\x8e\x68\x6f\x08\x61\x57\xc6\xac\xab\x82\xd4\xe5\xa8\x74\x65\x18\x7a\xa7\xb8\x73\xd7\x2b\xa9\x7d\xc4\xf9\x13\x51\x37\x58\xde\xbf\xb9\x2b\x29\xd7\xe9\xe7\xbf\x92\x7e\xa3\x81\xe6\x3e\xb2\xfc\x84\x53\xf7\xad\x5f\x64\xaf\x37\x76\xfc\x1b\x08\x16\xf7\xd1\xe1\x4e\x73\xf4\x6d\x85\x83\xbf\xd5\xf8\xef\xdb\x0c\xf8\xf6\x11\xde\xd7\x1b\xe1\x7d\x52\x3b\x88\x3c\x10\xa6\x24\x78\xbc\x42\x75\xfa\x60\xc5\x65\xb3\xfa\x7f\x2c\x08\x56\x04\xe1\x82\xab\x09\x41\x83\x48\x90\x88\x8b\x58\xab\xfd\x18\xad\x16\x58\x12\xa4\x04\x66\x92\x6e\x52\xfd\x4d\xab\xe0\xdb\xd1\xed\xbc\x05\xad\x3f\xe7\x88\x82\x5e\x3f\x97\xce\x3f\xe5\x71\xe9\x68\x98\x53\x53\xf5\x4d\xb3\x78\xd9\xdb\xd0\x21\x0f\xad\xcd\xc8\x9f\x70\x37\x6b\x51\xb6\xe5\x6e\xce\x5b\xa9\x7b\xd9\xcd\x60\x16\xbe\x95\xdd\x9c\xb3\x61\x7f\x5b\xbb\xb9\x6a\xe8\xaf\x61\x37\xbb\x00\xe8\x96\x3b\xba\x1c\x3f\xdd\xcb\xae\xf6\x41\xcb\xb7\xb2\xb3\x4b\x51\xd6\xdf\xd6\xee\xae\x1b\xfe\xcb\xee\x70\xef\x7b\xdd\xd7\xde\xde\xbc\x71\xfd\x04\xbc\x85\x4d\xeb\x3b\x6b\xfa\xfe\x9b\xd9\xad\xa5\x71\xbf\x92\x6d\x7a\x24\x88\xc9\xa9\xea\xb4\x5f\xaf\xec\x43\x9d\x77\xac\x7b\xb0\xdf\xb3\x6f\x69\xcf\xba\x55\x7b\x3d\xbb\xb6\x0e\xc1\xd5\x3d\xcf\xb0\x01\x96\x25\xd1\x12\xab\x68\xa1\xbf\x34\x21\xa1\x96\x64\x14\x59\x62\xe1\x9b\xda\xdd\xcf\x91\x4d\xf8\x6d\x3b\x7f\x7b\xa7\xef\x6f\x90\xf4\xe7\xd5\x20\x94\xfb\xac\x88\x3d\x66\x45\x50\xd9\x67\x45\xf4\x59\x11\x6d\x27\xa8\xcf\x8a\xe8\xb3\x22\x82\xef\xde\x46\x56\xc4\xd3\x27\x44\xec\x27\xeb\xe1\x4d\x29\xd1\xbd\x02\xdd\x2b\xd0\x7d\x6a\x83\x1f\xda\xbe\x04\x98\x7b\xfa\x20\x26\x09\x51\xa4\x51\xfc\xdc\x10\xb1\xd4\xb6\x41\x8e\xe0\xb7\x22\x68\x90\x71\x07\xf9\x1d\x04\xee\x8d\x26\xb9\xe4\xdb\x7e\x9b\xd2\xc9\x77\xbf\xcf\xc4\xea\xc5\x55\x2f\xae\xb6\x19\xda\xeb\xf1\xca\x06\x87\xf9\x45\xdd\xb2\x01\x5d\xf0\x1d\x8d\xf7\xc3\x18\xec\xd5\xc6\x90\x2f\x38\x9b\x8a\x1c\x65\xeb\x76\x4e\xda\x8c\x7c\xf7\x34\x7e\x13\x7e\x5a\x2d\x47\xe2\x31\x53\x54\xad\x3d\x4a\x4d\xf4\xc4\xc1\x3d\x71\x70\xfb\xb1\xf6\x1e\xc2\x3d\x7a\x08\x7b\xe2\xe0\xde\x07\xd6\xfb\xc0\x9e\xde\x07\xf6\x52\x0e\xed\x67\x3e\x96\xcf\xa5\xa2\x6d\x07\x4c\x62\x31\x12\x64\x4e\xa5\x22\x42\xcf\x5e\xa5\x52\xb6\x19\xa9\xf4\x56\x4b\xe1\xb4\xc6\x7d\x84\xaf\x3d\xf8\x97\x16\xdd\xbf\xb2\xb7\x28\x1c\xf5\x29\x8e\x7d\xdd\x0b\x50\x9d\x96\x78\x8d\x16\xf8\x81\xa0\x19\xa6\x89\x31\x8c\xac\x74\x6c\x18\x61\x53\x87\xfe\x4f\xb7\x0e\xe1\x7c\x77\x04\x99\x11\x41\x58\x64\xa4\xbd\x51\x7e\x22\x9c\x20\x02\x4a\xa9\xf9\xcd\x42\x9b\xa9\x89\x20\x38\x5e\xa3\x29\x21\xcc\x6f\x9b\x0a\x4d\xa1\xa6\xcf\x7b\x51\x5a\x5f\xdc\x4c\x2b\xef\x9e\xd7\x62\xa4\x3d\x09\x7a\xa6\x5a\x24\xec\x6e\x9c\xc9\x3f\xbd\x2d\x51\xd1\x83\x68\x7a\xa7\xda\xcb\x3b\xd5\x7a\x10\x4d\x6f\x22\xbf\x02\x13\xb9\x07\xd1\xf4\x20\x9a\xde\x81\xd0\x7a\xb6\x7a\x07\x42\xf8\xdd\xdb\x00\xd1\x3c\x61\x9d\xda\xe7\xd2\xb0\x7b\x05\xdb\xfd\xae\x57\xb0\x7b\x05\xfb\x1b\x55\xb0\x5f\xc7\x0c\xf7\xda\x75\xaf\x5d\xf7\xda\x75\xaf\x5d\xf7\xda\x75\xaf\x5d\xdb\xa7\xf6\xa9\x5d\xc3\x5f\x8e\x0d\x74\x67\xc4\x7a\xf7\x28\xd7\x27\xa2\xde\x6a\x88\xab\x57\xa9\x7b\x95\xfa\x75\xab\xd4\xaf\x66\x40\xdf\x1e\xbb\x5f\xcf\x8f\x57\xba\x1f\xbf\x05\x7e\x3c\xf7\xf4\xc1\x2a\x6d\xbe\xfe\x6e\x57\xb1\x4b\x97\x90\x0a\xab\x14\x2c\x8d\x16\x57\x21\x1a\x29\xb4\xe4\x5a\xef\x66\x24\xf7\x1b\xb7\xe7\x0d\x88\x60\x4e\x1f\x08\x43\x0e\x16\x3c\xb0\x92\x6d\x00\xc6\xef\xaf\x4e\xc0\xd9\x3c\x0d\xac\x10\x46\x8a\x2e\xc9\x10\x9d\xce\xcc\x06\x8a\x70\x92\x20\x49\x94\x2c\x20\x4f\xb4\x42\x66\x1f\x62\x71\xd6\x57\xf7\x6e\x9a\x01\x11\xcc\xcf\x06\xee\xfc\xa5\x89\x32\xa7\xd1\x35\xfe\x48\x93\x44\xf7\xc1\x6e\x5a\x10\x3e\x4b\x22\x12\xf7\x64\xee\xb5\xee\xc7\x4b\x1c\x6b\x6b\x22\xe8\x42\x96\x50\x12\xfe\x1e\xc4\x3c\x95\x1e\x4a\x91\x7b\xde\x3c\x3d\x44\xd6\xee\x33\x3c\x56\xad\xba\xb1\xc0\xb1\x16\xfb\xd1\x82\xc4\x69\x42\x10\x96\x92\x47\x14\x2b\x12\x23\x6a\xae\x05\x44\x95\xb3\x12\xdd\x8f\xdc\xab\x63\x2a\xf1\x34\x21\xb1\x9d\x63\x92\x21\x3b\x1a\x7b\x4e\x25\x9a\x12\x3d\xc5\xfa\xe6\xc9\xcf\xfe\xc2\x5c\x4a\x15\xbd\x09\xba\x42\xca\x3d\x21\xcc\x74\xa4\x41\xa9\x32\x9b\xf3\xad\xea\x55\xa6\xf7\x7d\xba\x4d\xaf\x65\xf5\x5a\x56\xa7\x01\x7d\x53\x5a\xd6\x2b\x42\xa3\x39\x81\xf4\xa2\x68\x34\x88\x59\x69\xc9\x7f\xe7\x9d\x52\x72\x3b\x7b\xdd\xfb\xfd\x3e\xbb\x26\x47\xbe\xc5\x63\xce\x66\x74\x9e\x0a\xeb\x80\x9f\xea\x13\xbb\x31\x30\x56\xd1\xce\x9b\xb8\x71\xaa\xbb\xfe\x5c\x17\x4f\x17\x1b\x02\x1d\x22\xad\x5d\xdf\x5d\x8d\xaf\x2f\x6e\xaf\x8e\xc7\x1f\xd0\x68\xb5\x4a\xa8\x71\xec\x47\xa9\x54\x7c\x49\xff\xae\x87\x61\xb8\x6b\xbd\xe4\xb6\x6a\x88\x04\x85\x03\x22\x09\x72\x38\x61\xe8\x10\x1d\x9f\xdd\x5e\xdf\x8c\xaf\x6a\x1a\xb4\x9b\x00\x2a\xb6\x90\xe5\x2a\x01\xad\xe4\x3e\x9d\x12\xc1\x88\x22\x12\x45\x49\x0a\xb0\x66\x1f\x5f\x30\x8d\x8e\xff\x7b\x7c\x7c\x7b\x73\x7a\x71\x7e\xf7\x5f\xb7\xe3\xdb\xf1\x07\xe4\x76\x93\x6e\x56\xf7\x4b\xf7\x22\x5e\x33\xbc\xd4\xe6\x4f\x9e\x64\xf7\x97\x94\xa4\xa0\x04\xd1\x39\x5b\x12\xa6\x8a\x2d\xba\x0e\x9f\x8d\x7e\x18\x9f\xe5\x5b\x5e\x10\xf4\xd3\x9f\xb3\x4e\x25\x78\x4a\x12\x1b\xf0\x00\x7f\xbe\x16\xd8\xd9\x8b\x6c\x24\x24\x2d\x89\xc9\xe7\xb6\xa5\x72\x0b\x5a\xb6\x8e\x8a\x2b\x54\xfe\x45\x61\xba\x9b\x7e\x90\x9b\xbd\xd6\xc6\x56\xbe\x87\xcf\x26\xe9\xf4\x01\x89\xef\x00\x21\x4d\x89\x3c\xfa\x47\xee\xa0\xfc\xfa\x64\xc4\x1b\x28\xc8\x16\xb4\x92\x6f\x53\xcd\xbc\xec\x81\xb7\x20\xef\xc2\xee\xbe\xa4\x6c\xdb\x93\x3e\xf1\xba\x5c\x16\xdd\xb5\xb5\xde\xea\xe8\xad\x8e\xea\x99\xe9\xe1\x12\x35\x33\xbc\xaf\x6b\x67\x1b\x2f\xdf\x8c\x92\x24\x96\x25\x37\x4d\xee\xda\xd8\xe8\x92\x79\xbb\x37\xc6\xf3\x3a\x65\xba\xe8\xc6\x57\xde\x7f\x6e\x1d\xea\x7a\xb5\x96\x44\x61\x28\x41\xa8\x38\x4a\xa1\xeb\xfd\x2d\x54\x9e\xe6\xfe\x16\xea\x6f\xa1\xda\x99\xe9\x6f\xa1\x37\xec\xbc\xaa\x90\xdc\x2f\xea\xbd\xda\x64\xd3\xed\xc4\x7f\x53\xe1\xda\x2a\xdb\x72\x12\xc9\x05\x16\xa6\xd2\x49\xc4\x97\x4b\xce\x82\xc8\xeb\x7a\x45\x06\xc8\x07\xdb\xc0\x4d\x01\xdd\xd8\xe4\xf9\xca\x5e\x43\xdf\x86\xcf\x2b\x98\x97\xe7\x40\x85\xf7\x76\xe0\x86\x09\xea\x89\x82\x7a\xa2\xa0\x1e\xa7\xdd\x13\x05\x35\xef\x96\x1e\x89\xdc\x23\x91\xc3\xef\x7a\xa2\xa0\x57\x44\x14\x94\xaf\x21\x6e\x30\xd7\x55\x45\xf7\x7f\x2d\x7f\x13\x46\x2e\x4a\x25\xd7\x6d\x40\xc3\xd4\x23\xdf\x1d\x9a\x9d\x2f\xd1\xba\x29\xb2\x11\x16\xf5\x7c\xe5\x7a\xed\x2c\x59\x2b\x42\xe3\xa4\x5c\x8d\xf4\x19\xa0\x43\x55\x0b\xfd\x2d\xfa\x52\x2a\xb6\x6d\xef\x58\xd9\x38\x51\xdf\x2a\xa1\x6f\x26\x97\xde\x90\xd3\xbf\x9d\xf0\x76\xa4\xe7\x77\x35\x22\xbc\xfa\x7b\x2f\xc8\xab\xbf\xde\x35\x8f\x3d\x2f\xbb\xb7\xcd\x5f\xcf\xc9\xc6\xb7\xe1\xad\x08\x7b\xfc\x1c\xfe\x8a\xc6\xd5\xff\xe6\xe4\x7a\xd3\x5e\xee\xa5\x7b\xcb\xe9\xfa\x56\x65\x7c\xef\xcf\xd8\xa7\x3f\x63\xf0\xed\x3a\x34\xfa\xbc\xf3\x86\xc9\xe9\xbd\x3d\xdb\xcc\x56\xef\xed\x09\xbf\x7b\x1b\x79\xe7\xf6\xae\xbe\x33\x57\x7d\x00\x52\x3f\xfa\x47\xf6\x77\xa0\x48\x07\x1f\x56\x84\xfc\x3a\x00\x73\x1c\xfc\x99\xc4\x99\xfa\x91\x35\x5e\x01\xd8\xb1\x7d\x38\x74\x4a\x49\x16\xbc\xde\x88\xdf\xb9\x34\x8f\x9e\xc0\x93\x6f\x0b\xed\x5e\xd3\xf5\xe7\xc5\xf5\x94\x77\xc2\x26\xd5\x09\x20\x03\x5e\x9f\xa6\x06\xcd\xfd\xb8\xa0\x70\x4d\x02\x9d\x0b\x5c\x25\xc1\x82\xbb\x3c\x39\x0c\x80\xf6\x3a\x9d\xe3\xb9\xd5\xa9\xd2\x76\x6f\x37\x70\xbb\x47\xdf\xee\xb8\x5f\x1c\x09\xb1\x61\xdf\xbf\x28\x2a\xa2\x41\x66\xee\x07\x10\xf1\x7c\xf2\xf1\x13\x51\xdf\x9e\x70\xfc\x44\xd4\x73\x49\xc6\x6d\xc5\x61\xa3\x48\xc8\xd8\xe7\x5f\x89\x34\xd8\x4e\xf4\xbd\xad\x31\xf6\x79\x5d\x7d\x5e\xd7\x6f\x3d\xaf\xcb\x3d\xdd\xa6\xf6\xe8\x09\xfc\xe4\x19\xaf\x2a\xf3\xc2\x6f\xef\xb6\x32\xe3\xea\x2f\xac\xfe\xc2\xea\x36\xc6\xd7\xaa\xa2\xbb\xfd\xfc\x1a\x54\xf4\x4e\xa9\xf6\x26\x7a\x97\x55\xf1\x71\xdb\x7f\x63\x84\xee\xd2\xbd\xec\xed\x08\x21\xd9\x55\xce\xec\x94\xae\xb5\xa9\xf6\xd6\x55\x56\x70\xab\x22\x76\x54\x9c\x72\xf7\xeb\xcb\x92\x28\x7b\xed\xb3\xee\x7a\xfe\x5c\xc2\xfe\xb5\x88\x88\x6c\xdc\x2f\x2a\x14\xb4\x8e\x5b\x84\x7c\xe5\x91\x04\x77\x8d\x20\xb0\x0d\xbf\xcd\x25\xb4\x37\xff\xb4\x00\x14\xcb\x7f\x67\xa1\x63\xf0\x35\x74\xb9\xd8\x0f\xf7\x61\xf8\x42\xf7\x59\xd6\xb2\xfb\xc4\xb1\x84\xc2\x87\x82\x28\xb1\xbe\xc3\x4a\xdb\x11\x6a\x77\x74\x5a\xde\x6a\xd8\x80\x4e\xbb\xc1\xf2\xfe\x4d\xa2\xd3\xf2\x1d\x7f\xe2\x33\xdb\x7a\x4f\x7e\x73\xb8\x86\xb6\x27\xac\xc7\x38\x6c\x31\x75\xdf\x2a\xde\xa1\x49\x84\xbe\x9a\x1e\x16\xa4\xf8\xb7\x78\x72\xf3\x77\x52\x7f\x44\x9b\xe6\xe8\x9b\x63\xb0\x2b\xa8\x1a\x1b\xc6\xf6\x46\x98\xec\x8a\xda\xd2\xbe\x7b\xf5\x34\x10\xa8\x60\x35\x7a\xb6\xe3\x6f\x94\xed\xb8\x9d\x71\xd3\xda\xb2\x69\x6b\xd6\xb4\xb3\x69\xea\x0d\x9a\x1d\x90\xd4\x79\x3b\x63\x5b\x24\x75\x4e\x8f\x7f\x13\xde\x9a\x5c\x8f\x9f\x03\x49\xfd\x1b\x35\x3d\x7a\xbb\xe3\x49\xe6\xed\x5b\x35\x3a\x5e\xb9\xc5\xd1\x63\xc0\xf7\x89\x01\xef\x21\xe0\x3d\x04\xbc\xed\x04\xf5\x10\xf0\x1e\x02\x1e\x7c\xf7\x36\x20\xe0\xd6\x5e\xdc\x15\xbd\x58\xa5\xb2\x67\x0a\x6d\x8e\x18\x66\x7b\xf5\xfd\x34\x7e\x13\x7a\x7b\xc0\xd7\xe4\x2d\x6b\xf1\x1c\xfa\x7b\x4f\x4c\xd4\x13\x13\xf5\x4a\xdc\x6f\x49\x89\xeb\xf5\x94\x6d\x66\xab\xd7\x53\xc2\xef\x7a\x62\xa2\x57\x44\x4c\xa4\x15\xa7\x1c\x6e\x6d\x23\x7c\xea\x58\x10\xac\x4c\x75\x32\x91\x21\xa9\x0a\x0a\x58\x93\x76\x65\x1a\xd0\xfa\xd5\x5b\x50\xae\x74\x3f\x4d\x8f\x5b\xe0\xa8\xc2\x17\x1e\xfc\x4b\x8b\x8e\x5f\xd9\xbb\x12\x0e\xf4\x14\xc7\xbe\x26\x1c\x28\x48\x4b\xbc\x46\x0b\xfc\x40\xd0\x0c\xd3\xc4\xb8\xa9\xac\x0c\x6c\x18\x5b\x53\x87\xfe\x4f\xb7\x0e\xe1\x7c\x77\x32\x50\xaa\x96\xe9\x46\xc5\x89\x70\x82\x88\xa1\x50\x85\xdf\x40\xc1\x3a\x5b\x1e\x70\x4a\x08\x0b\x10\x8e\x6d\xfb\xbc\x17\xd5\xf4\xc5\xc1\x68\xe1\xbe\x79\x71\x1c\x5a\x7d\x91\xe7\xfd\xd9\x5c\xbb\x18\x5a\xf2\x4f\x6f\x45\x14\x3c\x87\x59\xf5\x0d\x87\x3e\xfa\xf0\xc6\x6f\x93\x71\xfd\xd5\xa8\xe4\xbd\xa1\xbb\x47\x43\x17\x52\x57\xbe\x51\x4b\xb7\x0f\x57\x34\x4c\x4e\xef\x06\xd8\x66\xb6\x7a\x37\x40\xf8\xdd\xdb\x09\x57\xd4\x6b\xcf\xdb\x95\x13\x7c\x42\x3d\xba\x57\xa3\x7b\x35\xba\x57\xa3\xbf\x59\x35\xfa\x75\xcc\x70\xaf\x43\xf7\x3a\x74\xaf\x43\xf7\x3a\x74\xaf\x43\xf7\x3a\xb4\x7d\x6a\x2f\x3a\x34\xfc\xe5\x12\x88\xf7\x93\x2d\xdc\x2e\x22\x65\xd3\x85\xdf\x8a\xf2\xdc\x2b\xce\xbd\xe2\xfc\xba\x15\xe7\x57\x33\xa0\x6f\x2f\x47\xb0\xcf\xb2\x2b\xdd\x82\xdf\x6c\x96\x9d\x2f\x26\xb0\x05\x51\x72\xee\x33\xd7\xd0\x73\xd3\x27\x0f\x9c\x64\xc4\x2c\x46\xae\x13\x9d\xc8\x94\xbf\xd8\x87\xde\x16\xf9\x5a\xb9\xd7\x3d\x85\x32\x0a\x56\xad\xa7\x50\x7e\xc2\x71\xbb\x73\xb6\x61\xe4\x6e\x8f\x1a\xef\xd5\x1b\x1d\xf6\x8b\xc3\x7c\xea\x4f\xfa\x8b\x82\x7e\x2a\x6f\x8e\x52\xc2\x45\x56\x8a\xea\xf9\x99\xa3\x77\xb9\x1a\x3e\x11\xf5\xad\xdc\x0b\x3d\x7b\x74\x4f\xc6\xb9\x75\x91\xa9\x4e\x12\xfe\x6d\x0d\xb1\x27\xc8\xee\x09\xb2\x7b\x82\x6c\xff\xd6\xe7\x20\xc8\xde\xe5\x46\x36\xaf\xff\x56\x2e\xe5\x9e\x24\xbb\xbf\x97\xfb\x7b\xb9\x72\x88\xaf\xd0\xe0\x7a\x15\x14\xe0\xde\xe0\xda\x57\x6a\x7b\x18\xca\xf2\xc2\x78\xaf\x19\xee\x6e\x26\xfb\x2c\x77\xfb\x7f\x7d\x96\x7b\x9b\xc1\xf5\x59\xee\x3d\x70\xa9\xcf\x72\xef\xa1\x39\x3d\x34\xa7\xcf\x72\x7f\x2b\x59\xee\x4e\x81\xda\x47\xa6\x7b\x85\x32\xb6\x39\xdb\xfd\x4b\xd9\x32\x78\xb5\x8a\x96\xeb\x6b\x9f\xf5\xde\x67\xbd\xef\xba\x77\x5e\x85\x4d\xf6\x24\xd9\xef\x15\x62\x60\x57\x43\xec\x6d\x64\xc1\xbb\xde\xf6\x29\x3c\x3d\x12\xf1\xf5\x23\x11\x5f\x5d\x0a\xcf\xab\x51\xdb\x7b\x63\x78\x8f\xc6\x70\x9f\xc5\xd3\x67\xf1\xf4\xae\x82\xd6\xb3\xd5\xbb\x0a\xc2\xef\xde\x46\x16\xcf\x66\x6d\x7a\x2f\xd9\xf0\x4f\xa1\x57\xf7\x6a\xb5\xf9\x5d\xaf\x56\xf7\x6a\xf5\x37\xaa\x56\xbf\x8e\x19\xee\x75\xea\x5e\xa7\xee\x75\xea\x5e\xa7\xee\x75\xea\x5e\xa7\xb6\x4f\xed\x4d\xa7\xde\x6f\x76\x7c\xc7\x28\x56\x90\x71\xf1\x96\x94\xe9\x5e\x91\xee\x15\xe9\xd7\xad\x48\xbf\x9a\x01\xf5\x99\xf2\x7d\xa6\x7c\xe9\x9b\xd7\x9b\x29\xff\x3b\xbb\x11\x0e\x02\xd9\xef\x2f\x89\x83\x1f\x12\x3e\xbd\x59\xaf\x88\xfe\xef\x09\x5d\x12\x26\x41\x63\xa1\x6a\x1d\x5e\x9c\x35\x13\x5c\x9e\xda\x83\xeb\xd3\xf3\x4f\x67\x61\x0e\xc9\xc1\xe7\xdb\xb3\x9b\xd3\xcb\xd1\xd5\x8d\xeb\xa1\x1f\x55\x38\x17\xf6\xb9\xdc\xdd\x7f\xcc\x97\x2b\x2c\xa8\xe4\x6c\xfc\x75\x25\x88\xd4\x5d\xbb\x80\xdb\x96\x8b\xed\x7a\x37\xfe\xaf\xb0\x67\xe7\xf9\x7f\x7e\xba\xc9\xff\x2b\x37\x8a\xb3\x9b\xfc\xbf\xc6\x8d\xa3\x09\x1a\x2e\x9e\xa0\x43\xf4\xe9\xe6\x03\xfa\x04\x51\x7f\x81\x6e\x16\x98\x41\x86\xd2\xd9\xcd\x07\x74\x46\xa4\x84\x4f\xb2\x87\x15\x55\x09\x8c\xed\x07\xca\xb0\x58\x23\x37\x7c\x93\x8c\x84\xc1\x1d\xe8\xa6\xa6\x38\x79\xec\x6f\x29\x03\x85\x35\x9b\xbd\x33\x3e\xa7\x11\x4e\x76\x9b\xc4\xd1\x79\x78\x5e\x0e\x2e\xae\x1a\xa7\x22\xfc\x75\x79\x2e\x46\xe7\x27\x90\x84\xe5\xba\x5a\x31\xf2\x73\x22\x15\x89\xf5\x05\x18\x9b\xcd\xab\x6d\x0d\xb2\x0e\x2e\xc6\xbf\x71\xca\x48\x8c\x52\xa9\xd5\xb5\xd1\xf9\x09\x3a\x42\x17\x57\x13\x76\x21\x62\xe3\x2f\x20\xfa\x46\x31\xb6\x0a\x95\x88\x71\x85\xe8\x72\xc5\x85\xc2\x4c\xe9\xcb\x54\x0b\x32\x6e\x67\x44\x22\x2c\x08\x3a\xe6\xcb\x65\xaa\xb0\xa2\x0f\xa4\x34\xa9\xcc\x18\x01\xd7\x44\x9d\xc6\xe0\x81\xac\x98\x43\x3e\xcd\x29\x3a\x07\x2b\xa1\xdb\x57\xb4\xa0\xfd\x1d\xd0\xb8\xa4\x0e\xba\x26\xb0\x10\x38\x2f\x06\x0f\xa8\x22\xcb\xe2\xef\x5b\x22\xc5\x7e\xad\xd4\xad\x4f\xb0\xc2\x67\x1c\xc7\x94\xcd\x4d\x1e\xdc\x67\xa2\x70\x8c\x15\xfe\xe8\xdc\x1b\x5b\xec\x8e\xff\xbc\xbe\x38\x0f\xb7\xc7\x5f\x46\x9f\xcf\xc2\x7f\x5f\x5e\x5d\xdc\x5c\x34\xee\x98\x5c\x0b\xe5\x2d\xa3\xbf\xfe\x00\xff\x8b\x8e\x90\x6e\xdd\xab\x0a\x4b\xdb\x7d\xf4\xce\x64\x8a\x78\x3c\x39\x65\x09\xec\x90\x95\xa0\x4b\xaa\x57\xd5\xda\x68\xef\x61\x2b\x21\x41\xf4\xf9\x20\x4c\xf9\x3d\x62\x1e\x30\x59\x5f\x70\xcf\x29\xcc\x62\x2c\x62\xf4\x37\xc9\x99\xbf\xf5\xcc\xcf\xb1\x74\x1f\x90\x18\x1d\xa2\x85\x52\x2b\xf9\xe1\xe8\xe8\xf1\xf1\x71\xa8\x7f\x3d\xe4\x62\x7e\xa4\xff\x38\x24\x6c\xb8\x50\xcb\x04\x8e\x3b\xcc\xc2\x07\x74\x29\xb8\xe2\xfa\x85\x18\x49\x22\x28\x4e\x20\x17\x6d\x6a\xce\x3a\x9f\xa1\xbf\x46\x5c\x90\xe1\x19\x55\x44\xe0\xe4\x33\x5e\xfd\xd5\x18\x21\x24\x46\x94\xa1\x59\xb2\x56\x84\xc6\xc9\x91\xfe\x51\xc5\xc1\xc9\xaf\x26\x8a\x49\x44\x63\x7b\x6f\x13\x16\xf1\x18\xdc\x1d\xe6\x3b\xca\x7c\x72\x0d\xb1\x91\x03\x3f\x99\xd6\xa6\x9f\x12\xb4\xc4\x31\x41\xf8\x01\xd3\xc4\xa4\x88\x72\xe3\xa1\x32\xb3\x4c\x84\x1c\xa2\x09\x3b\x35\x5a\x4e\xaa\x35\x3a\xc0\x7a\x81\xdd\xe2\x7e\xbb\xd2\xe3\x8d\x78\x82\xa6\xe9\x4c\x6b\x04\xc1\x95\x34\x40\x54\xe9\x99\x10\x24\xe2\xcb\x25\x61\xc6\x89\xa5\x1b\x82\x27\x61\xc2\x6c\x77\x87\x13\x06\xcb\x8f\x59\x6c\x36\x40\xcc\xe1\x54\x33\xa2\xb5\x63\xb6\x36\xaf\x99\xa6\xb3\x5c\x64\x44\x71\x24\x08\x8e\x11\x55\x13\x36\x4a\xb4\x1d\xb5\xe4\x8a\x84\xa0\x35\x70\xa3\xe6\xe6\x1b\xa4\x81\x20\xab\x04\x47\x2e\x09\x30\xe1\x11\x4e\xd0\x8c\x26\xc4\x96\x46\x0e\x1a\x78\x07\xaa\xbd\x9e\x34\x2a\x51\xcc\x1f\x59\xc2\xb1\x1d\x47\xf1\xb1\xf7\x79\xc1\xe2\x8b\x89\x8f\x85\xe0\x02\xfe\xe7\x27\xca\xe2\xed\x8e\xe0\xed\xf9\x4f\xe7\x17\x5f\x72\xa7\xf0\xf6\x7a\x7c\x15\xfe\xfb\xfa\x2f\xd7\x37\xe3\xcf\x8d\xc7\xb0\xd8\x4a\xb6\xb1\xa0\x7b\xa0\xf2\x7d\x40\xd7\x66\x12\xb8\x40\x5a\x89\xaf\x19\x94\xdb\x89\xd9\x07\x3c\x26\xdb\x8d\xed\xf3\xe8\xfc\x76\x94\x13\x28\xd7\xc7\x3f\x8e\x4f\x6e\xcf\x72\x4a\x9c\x1b\x5f\xf0\xc9\xd5\xd8\xa8\x68\xe1\x67\xc7\x3f\x9e\x9e\x9d\xdc\x79\xa5\xae\x69\x36\x0a\xef\x2d\x8a\xa5\x1b\x23\x7e\x16\x3c\x46\xd3\x75\x98\xa8\x96\x25\x0c\x3f\x62\x89\x12\x70\xc4\x93\x78\x38\x31\xb7\xbe\x69\xf5\x03\x48\x21\xfb\xb2\xe0\x89\x25\x8f\xc9\xc0\xfe\x46\x5f\x59\x26\xaf\x5a\x2b\xd6\xe0\x9f\xa8\x6a\x58\xbf\x1d\x33\x44\x59\x4c\x1f\x68\x9c\xe2\xc4\xe4\x3f\xfb\x39\xfa\x80\x46\x48\xea\x1f\xa6\xfa\x00\x0b\x3a\x9f\x83\x49\x59\xe8\xaa\x69\xcd\x3e\x0a\x33\x09\xcf\xf9\x52\xe0\x70\xa4\xf5\x6b\xad\x2f\x82\x6a\x71\xa0\xa5\xb0\x79\x10\xf2\xbd\xf3\x2d\x0a\xac\x16\x44\x54\x75\xcd\xad\xcb\x07\xe3\x41\xac\x19\x16\x1c\xbd\x0c\x51\x0a\x22\x4a\x1a\x4b\x78\x25\xc8\x03\xe5\x69\xf0\xa8\x4d\x4d\xcf\x2d\x6e\x65\xf3\xd9\x04\xc0\xb4\x71\xe8\x63\xd6\x4c\x7e\x37\x5f\xb9\xa8\x83\xfb\x63\xcc\x94\xa8\xd4\x92\xdb\x5e\xff\xd6\x06\xcb\xdd\xff\xd5\xae\x9a\xd2\xbb\xcf\x8b\x46\x75\xd9\x95\x65\x0d\x31\xfd\x92\x61\xa6\x15\x84\x3e\x1c\xb8\x04\xeb\x14\x90\x0a\x5b\x2a\x93\x00\x3f\x83\x89\xbe\x4c\xa5\x02\xa2\x1b\xe3\x0d\x46\xf7\x7f\x96\xe8\x97\x14\x03\xda\x77\x88\xae\x09\x99\x30\x77\x1b\xce\xa9\x5a\xa4\xd3\x61\xc4\x97\x47\x59\xfe\xff\x11\x5e\xd1\x25\xd6\xfb\x85\x88\xf5\xd1\x34\xe1\xd3\xa3\x25\x96\x8a\x88\xa3\xd5\xfd\x1c\x1c\x7f\xce\x9c\x3c\xf2\xcd\xce\xf9\x3f\x9d\xfd\xf3\xf7\x87\x67\x7f\xfe\xfe\xa0\xac\xdd\xd4\x9d\xce\x31\x8b\xf0\x4a\xa6\x89\x0d\x10\x88\x70\x6e\xe0\x16\x81\x99\xd8\xb4\xde\xe7\xf9\xe5\xda\x4d\x20\x1f\x5f\xde\xe6\xac\x8d\xfc\x3f\x3f\x8f\x3f\x5f\x5c\xfd\x25\x27\xd0\x6e\x2e\xae\x46\x9f\x9a\xad\x8e\x92\xc4\x2e\x4c\xc3\x4f\x8c\x3f\xb2\xfc\xe8\x65\x71\xd0\x29\x53\x74\x49\x9c\xc0\xb6\xff\xbc\x31\x23\xdd\x62\xe4\x17\x37\x3f\xe6\x2f\x9e\x8f\x67\x7f\xb9\x19\xdf\x5d\x9f\xfc\xd4\x38\x12\xf3\x58\xae\x67\xd7\xe0\xdd\x3c\xe6\x49\xba\x64\xe1\xdf\xdb\xf7\xed\xf4\xfc\x66\xfc\xa9\xd8\xbb\x8b\xd1\x4d\x7e\xda\xaf\xf2\x4e\xf3\x83\x1f\x2e\x2e\xce\xc6\xa3\xdc\x5a\x9e\x8c\x6e\xc6\x37\xa7\x9f\x73\xf6\xe2\xc9\xed\xd5\xe8\xe6\xf4\xe2\xbc\x71\x98\xae\x07\x15\x03\xd5\xc3\x0a\x87\xb9\x6f\x39\xd3\xea\x98\x8f\x6c\x40\xda\x1c\x94\xc3\x20\x5b\xd1\xf8\x9a\x41\x07\x38\xf4\xfa\x77\x64\x7a\x5a\x29\x6b\x54\x7e\x99\x50\xbd\xac\x6b\x5c\xe8\x26\x91\x77\xe3\xbb\x00\xfd\xb2\x21\x29\x9c\x24\xfc\xd1\x84\x05\x97\x54\x1b\x92\x36\x75\x5c\xff\x44\xa2\x28\x15\x82\x30\x95\xac\x87\x15\xe2\x24\xbf\x2c\x5c\xa8\x13\x1f\x38\xda\x6a\xc3\x55\x46\x61\xca\xf1\x97\xca\xad\x52\x8c\xb9\xb8\x6e\x41\x89\x08\x3e\xff\x4c\xa4\xc4\x73\xb2\x8b\xe1\x56\x25\xa4\xae\x7f\x0e\xff\x09\x86\x59\x1b\x01\x94\xeb\x21\x84\x19\x46\x53\x2e\x94\x93\x2a\xbb\xec\xe5\x08\xa7\xb2\xd3\x66\x6e\x0e\xab\x63\xb0\x54\x0e\x33\x03\x0e\xeb\x8e\xda\x98\x3a\x10\xb9\xad\xb0\xd4\x9b\x88\x83\x4e\x43\xec\xcf\x53\x43\xed\x86\xa0\x37\x35\xb7\xeb\x4a\x50\x16\xd1\x15\x4e\xb6\x3a\x7a\x05\x47\xab\x4d\xa1\x79\x47\x67\xda\xc0\x79\x5f\x52\xbc\x14\x11\x4b\xc0\x97\xd8\x6e\x7a\x25\x66\xd3\xb6\x36\xab\xc3\x18\x37\xc6\xaf\xdc\x65\x6d\x8c\x51\x5d\x37\xdc\x42\x2b\xf6\xed\xc6\xa7\x83\x93\xcb\xea\x36\xab\x26\x2c\xf8\xf2\xd7\xa6\xa5\xd6\xf6\x1b\x9f\x59\x92\x17\x84\xb3\x31\x5a\xd8\x88\xe5\xe7\x73\xb6\x69\xa0\xac\x7a\x17\x7d\x7b\x15\x23\x9b\x42\xeb\x5b\x28\xbf\x24\xa7\xb4\x07\x88\x1e\xbb\x25\x67\xa9\x4a\x85\x56\xa6\xb4\xda\x8f\xde\x91\xe1\x7c\x88\x2e\x7e\x1e\x5f\x5d\x9d\x9e\x8c\x07\x68\x74\x79\x39\x3e\x3f\x19\x20\xa2\xa2\xf7\xce\xf5\x65\x7d\x01\x13\xa6\xb8\x75\x41\xac\xd1\x82\x3f\xea\x77\x2d\x89\x98\x93\xdc\x98\x9d\xe3\x00\xf2\xb4\xe6\x54\x2a\x61\xdd\x17\x2c\x0e\x59\x8d\xe8\xb2\xa8\x07\x99\x1d\x92\xaa\xc5\x2e\x5b\x03\x4b\x99\x2e\xf1\x34\x21\x77\x14\x2f\xef\x04\x4f\x36\x9d\xe1\xca\x23\x95\xa9\x8e\x77\xd2\x78\xbd\xef\x70\x14\xf1\x94\xa9\xd6\xad\x6d\x5a\xc7\x13\x98\x26\x89\x56\xfa\x40\x81\xcf\xb4\xcc\x03\xe4\xa7\x4b\xa2\x08\xfc\xb8\x60\x3f\x80\xc8\x48\x32\xa4\x15\x2c\x49\xdd\x5c\x5e\xe5\x67\xa0\x9f\x4f\x33\x9f\x55\xd3\x75\x6c\xf8\xb8\x9c\x16\x1e\x30\x26\xed\x32\x7f\x55\xad\x34\xb5\x84\x9e\x5c\x5c\x1d\x1b\x39\x55\x45\x44\x65\xfc\x09\x05\x5e\x51\x70\x57\x15\x08\xd4\xcc\x7e\xd4\x07\xd9\xc8\x8f\x5f\x52\xae\xb0\x7c\x3f\x9c\x30\x2d\x0c\xef\xc9\xda\xf8\xb7\xb5\xb8\xf9\xbd\xbe\x02\x0f\x25\x61\x12\x3c\xa2\xbf\x37\xe6\x80\x16\x98\x0f\x58\x50\xbd\xb5\xc0\x21\x66\x79\xdb\xf2\x1c\x59\xe0\xc6\xb2\x8d\x5a\x69\x97\x79\x09\x33\x62\x2d\xf7\x9d\xe9\xfe\x9c\x28\x88\x5a\x2b\xaa\x52\xbd\xf4\xb1\x21\x86\x2b\x75\x7d\xa3\x26\x06\xbb\xe2\xc4\x44\xdc\x77\x72\xbe\x6f\x73\x64\xba\xea\xd2\xc5\xe3\x40\xe5\x2a\xc1\xeb\x92\x55\xbe\xe9\x18\x69\xdb\x53\xae\x70\x44\xb2\x88\xbf\x03\x47\x44\x7c\xb9\xe4\x2c\x59\x7b\x94\x5f\x4c\x67\xe0\x91\x54\xfa\x88\xa1\x29\x51\x8f\x84\xb0\xec\x53\x64\x8f\x3a\xa2\x4c\x2a\xcc\x0c\xeb\x1e\xec\x96\x89\x9e\xab\x38\x05\x0d\x77\x72\x30\x40\x93\x83\x98\x3c\x90\x84\xaf\x96\x84\x29\xfd\x01\x51\x95\x02\x6d\xbc\xc4\x34\x39\xe7\xca\xfb\xc4\x77\x59\x16\x41\x22\xba\xa2\x84\x29\x79\x47\x74\xbb\x4f\x1a\x20\xd9\x64\x4e\x38\x28\x21\xf4\x04\xe1\x38\x16\x44\x4a\x20\x9b\x72\x9d\xb4\xc6\x8f\x89\x2b\xf9\x09\x68\xb7\x87\xbd\x3b\x74\xbf\xdb\xb8\xda\xac\x8a\xb8\xf0\xb9\xf5\xfe\xc5\x19\x3d\x50\xe3\xae\xb5\x64\x63\x19\x89\x8d\x03\x33\x78\x6c\x54\xd1\x69\x56\x3c\x36\xfa\x2e\x6c\xd7\xcf\xfc\xcc\x5c\xeb\xe7\x1a\xbb\x26\x43\xd4\xab\x63\x9c\xcc\x54\x1b\xeb\x29\x2c\x3a\x27\xc9\xc6\x1e\x47\x09\x97\xa9\x68\x69\xb3\xe6\x3b\x7d\x6c\x1f\x6d\xea\xf7\x38\xd4\x04\xd3\x44\xc9\x4e\xca\x66\xc5\xc4\x67\x51\x2c\x93\x7d\x0f\x87\x5b\xd9\x5b\xd6\xfe\x7a\x80\x28\x8b\x92\x14\x22\x3f\x38\xc9\xdc\xa8\x2c\x46\xd9\xd5\x36\x61\x3e\xf4\x83\x25\x7a\x24\x49\xa2\xff\x1b\xf1\xe5\x0a\xc4\xb6\xed\xae\x6d\x49\xdb\xd3\x0a\x2b\x32\x40\x3c\x55\xba\xb1\x81\x21\xe7\xb4\x4b\x70\x38\xc5\x00\xbd\xcd\x28\xb7\x27\xec\x56\x3a\x0c\x93\x47\x4c\x9a\xbd\x6e\x04\x18\x65\xe8\x13\x51\xd0\x0a\x40\xd8\xc3\x01\x1a\x12\xd2\x4a\x11\x54\x9c\xfb\x1d\x4e\x94\x1d\x49\x87\x95\xcf\x02\x46\x3f\x24\x7c\xda\xb8\xee\x23\xb4\x34\x66\x89\x7d\x0b\xa2\x45\x83\x34\x80\xfa\x6d\xda\xa3\x44\x88\x5c\x10\x7f\xc3\xf1\xcf\x07\x99\x9a\xb7\x27\x84\x78\x28\x33\x01\x37\x88\x8a\x16\xfb\x69\x39\x27\x36\xf5\x11\x0c\xea\xbb\xb7\x63\xb6\x9b\xfe\x2e\xcb\xae\x8a\x4d\x9b\x20\xef\xe2\x78\xea\xc1\xc0\x01\x51\x0b\x42\x05\x6a\x35\x2c\x77\x7e\xef\xcc\x99\x6f\xbf\x69\xb2\xbd\x5d\xe7\xa9\x30\x42\xc4\x0b\x08\xdd\x31\x0b\xb9\xcf\x31\xe6\x0e\x27\xac\xd0\x09\x14\x93\x15\x61\xb1\x44\xb0\xbd\xdc\x69\xc8\xc9\xfe\x01\x9a\xd1\xaf\xb6\x51\x17\x20\xcb\x7e\x1a\x58\x5b\x35\x3e\x98\x05\x2e\x6f\xbb\x0e\xf7\xe3\x25\x3c\xdf\xe8\x64\xe0\x52\x1b\xd4\x91\x56\xac\x04\x89\xb8\xd0\x22\x11\x5e\xeb\xdd\xa2\x1b\xef\x46\x85\x85\x9e\x14\xbc\xc9\xea\xca\xf5\x23\x4b\x41\x89\xb1\x22\x87\xda\x70\xdf\x10\x10\x5a\x71\xfd\x1a\x44\x97\xda\xb6\x08\xe2\xfd\x99\x84\x9d\x92\x39\x66\x48\xa4\x8c\x51\x36\xaf\xe9\xad\x13\xed\x3b\x1c\x66\xad\x59\xe1\xa5\x36\x33\x41\x8f\xd0\x1d\xca\xf7\x43\xae\x60\x3a\x1b\xfb\x61\x2d\xef\xe7\x9a\x35\xd5\x30\x6d\x8f\xd8\x3b\x02\x6a\x3a\x9b\x42\xa5\x83\x57\xd3\xd9\x04\x4b\x85\x6c\x9f\x6a\x7a\x1c\x6a\xb3\x7b\x00\x29\x35\xb1\x55\x86\x86\x43\x17\xe5\x3c\xec\x22\x92\x44\x29\x6a\x59\x15\x53\x49\x10\x9e\x69\xbb\x78\x49\xc4\xdc\x29\x7c\x86\x68\xc7\x1f\x6d\xcb\xb8\xe3\xe4\x68\x28\x4b\x26\xac\xb2\xe9\x21\x1a\xb1\x52\x90\xdc\xf9\x30\x72\xf3\x65\xa4\x36\x4e\x1e\xf1\x5a\xa2\x15\x00\x44\x4c\xdc\x3e\x1b\x3c\x38\xed\xf2\x0f\x39\x0f\x9d\x56\xa8\x68\x84\x93\x64\x8d\xc0\xd0\x0b\x7a\x56\xb3\x58\x01\xa5\x6a\x7b\x61\xd7\x52\xf7\x2f\x38\xa2\xab\x08\x56\xbd\x09\x54\x29\xe9\x4a\xca\x6c\x86\x23\x09\xc3\xb2\x16\x1b\x0d\xba\xa5\xb5\x2e\xc6\x79\x27\x76\x9d\xc2\x07\x2e\x90\x33\x3c\x25\xc9\xce\xce\xeb\xad\x5c\xf5\xf0\x6a\x8b\x5a\xd7\xe6\x37\x31\xce\x78\x82\x1e\x17\x44\x14\x45\x9b\x73\xe2\x88\xb4\x9d\x6b\x3e\x1b\x67\x8e\x27\x6a\x87\x81\xba\x34\x8c\xed\xe5\x77\x5d\x8a\x46\x78\x91\x64\x39\x1a\xd5\xb7\x48\xd1\x7d\xb3\x4b\x1f\x82\x64\x8a\xca\x2e\xa0\x7d\xa4\x53\xec\xc5\x1b\xe4\xf7\x4c\xcb\xd4\xe1\xd3\x19\x62\x9c\x11\x44\x65\xf6\x63\x08\xbf\x1a\x28\x0e\x6c\xa6\x39\x61\x44\x00\xfb\x9e\x8b\xd6\x96\x89\x09\x9f\xd9\x28\x1f\x79\x63\x12\xcd\x28\x49\x62\x89\x18\xd1\x36\x0d\x16\x6b\xc0\xc2\x19\x81\xd6\x46\x37\xda\x97\xb6\x5a\x71\x7d\x58\x35\xd2\xa5\x16\x40\x2a\xa4\xd6\xc4\x0a\xfd\x42\x06\x2b\x68\x7f\x64\x1f\xb2\xc8\x97\x09\xf3\x56\x30\xec\x3f\x2a\xb5\x75\x37\x44\xb0\x6c\x2a\x7b\x4a\xdf\x31\xfa\x03\xb7\x86\x03\xa7\xcb\x4a\x93\x48\xd8\xc5\xf6\x77\xf7\x56\x36\x8f\x79\x30\x98\x83\xac\xce\xe9\x03\x61\x95\x05\x0b\xdc\xa6\x48\x72\x6e\xc8\x66\xa9\x63\x99\x0d\x5f\x81\x9f\xaa\xfd\x4c\xe9\x45\x4e\x4b\x9e\x2b\xc3\x5b\x98\x19\xd9\xc9\xda\x07\x71\x42\x53\xc5\xe2\x58\x0d\xef\x3c\x96\xe8\xf7\x8c\xab\xdf\x07\x40\x5f\x67\x0e\x1b\xe2\x4b\xeb\x9a\x18\xe4\x32\x5e\xf4\xdb\xe0\x84\xda\x4d\x82\xb0\x3f\xab\xf1\xe6\x99\xdf\x15\x5b\x9e\x05\x55\x9e\x54\x7b\x1b\x97\x03\xcd\x75\x29\x83\x26\xeb\x7d\x6f\x3e\x80\xe7\xa0\x5c\x46\x66\x1b\x08\x02\x61\x13\xc6\xd1\x92\x0b\x52\xc8\xbc\x37\xc2\xdb\xdd\xeb\x36\xe3\xb9\xfd\x2e\xad\x70\x87\x99\x6c\xe2\xec\x98\xe7\xdc\x60\xcd\xee\xaf\x7d\x40\x2c\x96\x79\x70\x6e\xc3\x0e\xd8\x00\xf0\xad\x36\xc9\xb7\x81\x45\xd4\xe9\xa4\xde\x11\x1d\x52\x8c\xd6\xc1\x5a\x87\x13\xf6\x91\x0b\x7b\x77\x4a\x9b\x2e\x32\xc5\xd1\xfd\x21\x61\x31\xc2\xa9\x5a\x18\x78\xa9\xf5\x1d\xaf\xed\xca\x6a\xbd\x00\xb6\x80\x5b\xe2\x98\xca\x08\x0b\x2b\xf4\x67\xf8\x81\xbb\x5e\x4c\x58\xd0\x08\x24\xa4\x40\xd2\x1b\x10\x73\xd4\x29\x10\x04\x92\x8c\xeb\xe6\xa2\x8a\x7e\xa2\x44\x3e\xd1\x7c\x66\xc2\x14\xf6\x09\xbc\x8f\xc4\x8c\x48\x39\x39\x30\xbd\x2e\xcc\xd0\xa9\xf3\x47\x39\xfb\x46\x86\x44\xbe\xfe\x97\xe6\x8c\x39\x8f\x8c\x1d\x85\x56\x53\xbe\x77\xb2\x33\x07\xb6\x9d\xa5\x02\xb0\xb5\x55\x6d\xbe\x8b\x16\x34\xc9\x7c\xd4\xef\x07\xf6\x3c\x9a\x26\x13\xf2\x40\x12\x93\x92\x11\x09\xb2\x24\xcc\x46\xdb\xbf\x47\xff\x61\x68\x19\xd0\x1f\x27\xec\x13\x88\xd5\x24\x59\x0f\x10\x9d\x65\x2d\x63\x55\x68\xe6\xbe\xb2\x03\x7a\xc9\x8c\x64\xc9\x75\xc4\xac\xf7\x02\x3f\x90\x09\x73\xcd\xfc\x07\xba\x47\x7f\x40\x7f\xac\x73\xe4\x58\x60\xf5\x53\xdb\xf9\xb0\x8b\xdd\xbb\x02\xc9\x30\xb0\xea\x23\x48\x0e\xe7\x06\xc8\x57\xad\xf2\xa6\x9a\x57\x70\x3d\x1a\x9c\xb2\x07\x5e\x8e\x5e\x85\x27\x17\x0b\xc2\xd4\x1d\xe3\x31\xb9\x23\x15\xa1\xab\x06\x41\xa1\x2f\xf5\x73\x1e\x93\x8d\x81\x27\xaf\x20\x7f\x01\xd7\x85\x4c\xa7\x7e\x39\xf4\x7b\x33\xa3\x3b\xbf\xc1\xaa\x3b\xec\x33\x33\xb6\xe9\xee\xb6\xb1\xb2\x0b\xab\x5d\x0d\x40\xa2\xdb\x0e\x54\xc7\x6b\x4c\x3d\x34\x80\x1f\x15\x4f\x61\xd1\x43\xac\x7f\xac\x47\x6e\xef\x9c\x20\xe7\x04\xb2\xd7\x04\x9d\x53\xad\x6d\xb7\x8f\xc7\x81\x10\xdc\xc6\xcd\x6d\x12\x3e\x5a\xf9\xb9\xb3\xa9\x58\x25\x58\xe9\x5d\x7e\xe8\xb7\x5d\x16\x63\x9a\xf2\xb4\xa8\x73\xdb\x09\xa0\x32\x04\x46\x59\xf5\x7a\xad\x45\xf0\xdc\x80\x6e\xc8\x82\x6a\xc9\xcd\xd0\xe8\xf8\x0c\xe9\x43\xc1\x97\xc4\x90\x72\xe8\x49\x4b\xd5\x82\x0b\xfa\xf7\xda\x80\x6c\xbd\x86\x9d\x05\xd2\x82\x62\x60\xd0\xcf\xbc\xae\x0d\x7b\xd4\x68\x06\x2a\x67\x48\x54\x59\x38\x68\xaa\x9f\x17\xa0\x7c\xcc\xd2\xc4\xe4\x23\x45\x5c\xc4\x86\x22\x4a\xe6\x4b\x8f\x09\x57\xc4\xce\x40\xb6\x5c\x83\xd4\x02\xd6\x6d\xc6\x53\xb4\xc0\x6c\xde\xac\x47\xfe\x57\x4a\xd2\x3d\x81\x66\x6c\x0a\xf2\x0b\x85\xe3\xf1\x5c\x66\x75\xf8\xcc\xdc\x68\x91\x5c\x28\xfd\x67\x03\xf2\x58\xde\x67\x0e\x35\x8f\x5b\x36\x66\x74\xd1\x9e\x6f\xe1\x7c\xb9\xb2\xc7\x6f\x0f\xee\x97\xe7\x88\xd7\x97\xf5\xa3\x0a\xf9\x03\xfb\xcf\x66\xfa\x3c\xab\x77\xc3\xcb\xf0\x82\xde\xb1\x6f\x4f\x47\x07\x4b\xda\x75\xca\xf6\xd0\x0a\xd7\x72\x70\xb3\x7a\x77\x5c\xe7\xfd\x28\x9d\xb7\x84\x79\xf7\x1d\x84\xb1\x76\x76\xdf\x06\x6e\xc9\x0c\x8a\x68\xb0\xa8\x66\x34\x24\x7e\x5a\x57\x4b\x3e\x30\x98\x47\xc3\x06\x71\xc1\x3a\x94\x72\xd0\xa3\x2d\x6e\xa7\xb2\x21\x54\xdd\x37\xf7\x75\xdb\xae\x34\x86\x43\x5a\x06\x37\xc0\xa2\x6f\x3a\xb6\x67\x16\x6d\x94\x0f\x0b\x18\x08\x05\x0f\x02\xa3\x10\x21\x48\x25\x52\x02\x03\x7a\x8f\x33\x39\x61\x5f\x8c\x16\x4b\xa5\xb1\x17\x6d\xa2\x3b\x98\xa3\x36\xb3\x16\x84\xa7\x4d\xc4\x53\x0b\x6c\x6c\x9c\xea\x10\x84\xa7\xa6\xf1\x27\x21\x0c\x42\x54\xbd\x0c\x5e\x64\x55\xf7\xca\x26\xdd\x44\x87\x08\xd9\x52\xa5\xf4\x6a\x5f\x31\x95\x80\x74\xc5\x49\xad\xcd\x38\xe5\x3c\x21\x98\xd5\xa9\xd5\x95\x5f\x97\xbc\x45\x34\x44\x31\x6a\xab\x4f\x6b\x66\x22\x25\xda\xa6\xc0\x49\x52\x18\x17\x06\x06\x39\xe5\x13\x95\x8d\x61\xa8\x3b\x1a\x6f\x08\x88\x0c\xc2\x93\x3f\x25\x49\x27\xa4\x89\x79\xa0\x71\x17\xc1\x4f\x32\x92\xb2\x56\xf0\xf6\x10\x00\x51\x99\x0c\xb0\xa9\x63\x61\x0a\x41\xa3\x6b\x38\x0f\xc3\xdf\xb2\x8b\xa9\x5a\x54\x82\x9e\x9b\x3a\xe8\x50\xd7\x6d\x34\xd6\x0f\xa0\x3d\x22\xfe\x40\x84\xa0\x31\x09\x7a\xda\x3e\xcc\x55\x1a\x78\x1e\xd9\x00\x39\xf8\x4b\x10\x88\x90\xa4\x64\xf2\xc6\x9d\x63\xca\x5f\x47\xb9\xd7\x41\x9e\x30\x3c\x1c\x73\x22\x03\x0d\x10\x7a\x6a\x8e\x17\x9d\x11\xad\x25\x4e\x98\x56\x81\x43\x6d\x15\x4b\x2d\x07\x56\x82\xcf\x2d\x88\x11\x47\x82\x4b\x69\xc1\x0a\xa6\x1d\x39\x6c\xbc\xe8\x6e\x6c\x96\xc9\x3e\xc2\x50\xcf\x87\x5b\x2c\xd3\xa9\x66\x39\xc8\x35\x8a\xd1\x94\xf8\x8c\x9a\x5a\xb1\xb4\x2b\xa4\xc9\xed\x35\x24\x08\x96\xd6\x34\x07\xe4\x4f\x01\xf3\xd0\x41\x8d\xf1\x7d\x36\x08\xc0\x43\xb7\xd8\xe1\x16\xb2\x59\x71\x86\xc9\x90\x4a\x44\x85\x20\x40\x51\x35\x4d\x6c\xc4\x29\xb7\x6b\x68\x56\xae\x27\x9b\x11\x6f\x85\x9a\x37\x83\x18\x97\x74\xa9\x0f\x08\xa4\x03\x33\x7e\xc8\x57\x60\xd6\x14\x7f\x35\xc3\x34\xd1\xf2\x94\xe6\xab\x05\x69\xdd\xef\x10\x18\xf7\x08\x53\x55\x7e\x78\xd7\x08\xf8\xed\x49\x6c\x96\xd1\xec\xdc\xc9\xc1\xe8\x87\x8b\xab\x9b\xf1\xc9\xe4\x20\x8b\xae\x3a\x24\x8e\xbb\x75\x7c\x7e\x14\x67\x13\xe6\x63\x24\x9e\x4a\x17\xd6\x12\xe1\x38\xce\xd2\x81\x0c\x3e\xef\xce\xf8\x7a\xdb\x9e\x8a\x8d\x61\x92\x72\x33\x1f\xe9\x57\x12\x5f\x61\xb5\x53\x70\xa5\x31\x78\xdd\xca\x89\x58\xb9\xc5\x53\x46\x4b\x8e\xac\x06\x11\xeb\x87\x72\xab\x9f\x6b\xbf\x83\xcd\x49\x80\xb5\x72\xde\x28\x89\x44\xca\xb4\xe1\x8b\x3d\xc3\xf1\x0c\xf6\x00\x8b\xd6\x03\x04\x68\x75\xbd\x6b\xd7\xe8\x4f\x68\x49\x19\x20\x4b\x9b\xe6\xf6\x36\x3f\x90\x2e\x7c\x13\xa7\xe7\xb7\x79\x26\xa8\x1f\x2f\x6e\xaf\xf2\xd9\xbf\x7f\x69\x66\x8e\xc8\xb7\xd0\xe4\x6d\xc8\xc6\x18\xa0\x77\xb8\x99\x0a\x3f\x35\x55\x03\x3d\x2b\xea\x11\xdf\x56\xee\x5e\xe2\x55\x9a\x7d\xa7\xed\x05\xd8\x8d\x57\x91\xb1\x67\x47\xba\x5b\xb2\x9e\xb1\xfc\x2e\xf3\xe6\xe4\x93\x5e\xd0\x95\xf1\xd9\xed\x91\x06\xd9\x00\xc0\xb4\xae\xbe\x7e\x3b\xe3\xf3\xb3\x56\x1d\x48\xbc\x83\xf6\x86\xb2\xa7\x9d\x83\x42\x5a\x1f\xed\x0a\x4f\x69\x02\xd1\x27\x1e\xa4\x4b\x55\x68\x16\x72\x38\x61\x21\x15\xbb\xb9\x33\xf5\x1e\x70\x19\x71\x94\xcd\x11\x67\x04\x71\x61\x22\x8d\x5e\x1c\x0e\x42\xac\x7e\x11\x6b\xa6\x16\x68\xcd\x53\xe1\xdf\x58\x7a\x8f\xdd\x7d\x72\x81\x1d\x1a\xc1\xe9\x99\x36\x56\x16\xa6\x34\x42\x7b\x2b\x41\x32\x5b\x10\x5e\x4c\x1e\x08\x43\x8f\xda\xee\xcb\x42\x27\x13\x16\xa0\xc0\xb4\x4a\xca\xbe\x53\x1e\xea\x41\x13\x5b\x9c\x10\xfb\x38\x51\xe6\x09\x92\x98\xda\x96\x9b\x37\xf0\x1e\xe0\xfc\x90\x9f\xb0\xdd\xe6\x83\x27\xeb\x9c\x1b\x26\xb0\x06\x7b\x20\x74\xb5\x18\xc8\x71\xe5\x96\x25\x5f\x57\x24\xda\x06\x83\x7d\xe9\xc8\x76\x9b\x9c\x2d\x61\xa0\xcf\x72\x1c\xd8\xa5\x53\xdc\xb9\x7e\x8a\xbd\xdd\xd0\xcf\x4e\x99\x10\xba\xa3\x3f\xdb\xd4\xc1\x8e\xfd\x74\xb9\x10\x33\xc1\x97\xed\xba\xf8\x3c\xe8\xdf\x9b\x12\x8e\x36\xe7\xbd\x78\x25\xb0\xdf\xcd\xbd\xac\xc3\xfb\x6e\x92\x7a\x3f\x9b\x7b\xd1\x43\xfb\x21\xcb\x99\x18\xe2\x39\x1f\xd3\xb1\x50\xdb\xf0\x9d\xe1\x9d\xe5\xa3\x1b\x0e\x05\x53\x38\x05\xb9\xb8\xc9\x94\x20\xab\x0d\x19\xe8\x6b\x35\x66\x17\xae\xcf\x2a\x87\x6d\x10\xfa\xb5\x99\x4b\x7a\xf2\xa4\xc2\x4b\x9f\xa7\x5a\xcc\x3d\x2e\x4c\xd7\x06\x69\xb4\x2f\x0c\xe6\x13\xe0\x74\xab\x6c\xdd\x1c\x76\xd8\x62\x24\xf6\x93\xa0\x57\xb8\xa1\x1b\x3b\x96\xcb\xd0\x0b\x3b\x14\x13\x85\x69\x22\xc3\xac\xb4\xf2\x52\xe6\x6e\x3e\xc3\xd0\xe5\xfc\xc2\x5b\x5a\xc9\x41\x85\xe2\x70\xe5\x51\x78\xc7\x83\x93\x65\x89\xd7\x01\x76\x4b\x9f\x82\x84\x28\xb8\x9c\x29\xf3\xff\xca\x8b\x5a\xb7\x99\xc3\x2d\x5a\x85\x9f\x18\xa2\x1f\xd6\xfe\x5a\xc4\x49\x12\xf6\x44\x5a\xd6\x41\x57\x17\x57\x1f\x05\xb8\xc4\xd0\xe9\xf9\xe8\xf8\xe6\xf4\xe7\x31\xe0\x92\xd6\x3c\x45\x8f\x54\x6a\x0b\x61\xc2\xc0\x5d\x69\x88\x2a\x4d\x55\x07\xf3\xc3\x01\xfc\x0a\xd0\x8a\x32\x9d\x2e\xa9\xb6\xa7\xb2\x41\xde\x82\x44\xb8\x72\xd8\x35\x73\x8e\xf5\x03\x70\x6d\x3b\x54\x5c\x15\x00\x7d\xc3\xf9\xd8\xc2\x0c\xce\x1a\xd9\x15\xf8\x16\x44\x53\x9e\x16\xfa\x16\xa8\xd9\xa1\x59\x53\x79\xbc\x7a\xec\x5b\xf5\xa1\xcc\x27\x80\x42\x96\x2e\x95\xaa\x70\x99\xd4\xa7\x7d\x66\x4b\xb0\x0f\xe0\x9b\xd3\xb6\xbb\xa0\x21\xdc\x23\xd5\xda\xce\xb5\xa7\x5a\xac\x54\xc1\x2e\x6b\xf5\x9b\xd7\x96\x7e\x93\x45\x15\xb7\x8f\x51\x75\x31\xb7\x32\x00\x79\xb8\x15\x02\x80\x44\x1e\x78\x4d\x8a\xa2\x9b\x71\x05\xc1\xe1\x48\x25\xeb\x0a\x64\xc6\x84\x55\xeb\x0d\xcd\x7b\x6c\xd7\x38\xef\x5e\xd3\x74\xfc\x8a\x5c\xf9\x51\x58\x8f\xc8\x17\x0f\x6c\x33\xc6\xa8\x27\xe3\x27\x85\x73\xe5\xfc\xaf\x35\x56\x00\xa8\x0b\xdb\x40\x84\x2a\x4e\x65\xcb\x28\xec\xc6\x73\x61\xaf\xcc\xa7\xb1\xa0\x76\x0c\x57\x43\xa6\xea\xfe\xf3\x6b\xc1\x89\x39\x00\x0f\xb9\x8d\x47\x01\xfb\x72\x40\x6c\xd0\x6a\xe6\x5a\x70\x04\xd5\xc8\x30\x53\xf0\x49\x71\x08\x9b\x78\x9b\x57\xb7\xe7\x09\x9a\xf3\xd2\xcd\xab\x3b\x29\x8b\x89\x60\x04\xab\xc5\xf3\x85\x3f\x8f\x77\x75\x19\x3e\x5b\x28\xf4\x78\x2f\xc4\x64\x85\xb0\x68\xc7\x88\x68\x07\xf0\x70\xc6\xe0\x54\x32\xa2\x2a\x5c\x5d\x01\x0a\xdb\xda\x59\x79\x76\xac\xa7\x88\xec\xb6\xbf\x5f\x9a\x6c\x12\xef\xd0\xd2\x06\x47\x9e\x50\xc4\x56\xf6\x6a\xbe\x24\x54\x4d\x2c\xa7\x0d\x21\xa9\xd1\xda\x73\xec\x90\xe6\x13\xfb\x41\x0d\x8b\x68\xe1\xb1\xe2\x68\x43\x53\x83\xad\x8b\x96\x3a\x16\x71\x42\x24\x28\x91\xc6\x7a\x28\xe8\x89\x4d\x56\xcc\x84\xfd\xc8\x1f\xc9\x03\x11\x03\x84\x15\x5a\x72\xad\x1b\x30\x12\x96\xbc\xc1\xf9\xc4\x5a\xe3\x24\xc7\xe8\x1c\x2f\x49\x3c\x86\x1b\x26\x00\xab\x59\x5b\xca\xfa\x29\xab\x72\x97\x20\x1f\xc7\x92\xf7\xdb\x8e\x4e\x18\x8e\x80\xd3\x1f\xa2\x45\x80\x90\xa4\x6e\x60\x70\xa2\x7e\xef\xbd\xa8\xbf\x1f\xa2\x1b\x7d\x15\x52\x99\xef\x6f\x80\x81\xae\xeb\xdb\x84\xcd\x05\x4f\x57\x5e\xd7\xe5\x53\x50\xb2\x8d\x37\xb5\xc2\x8b\x0a\x9d\x71\x2e\xd4\x08\xc7\xfa\xa2\x6d\xde\x38\x39\x6b\xec\x95\x39\x17\xf2\x80\xc2\x70\x03\xe9\xfb\xc7\x07\xaa\x2c\x18\x01\xb6\x51\x3d\xd9\xc1\xfe\xbc\xb1\x25\xae\x39\x09\x6a\x9e\x37\x82\x73\xe8\x92\x1a\xe1\xd3\xc1\x71\xe0\x8c\xec\x6a\x58\x54\xf6\x5a\x5b\x15\x01\x04\x07\xa9\x26\x97\xae\x59\xfb\xf6\x69\x76\x85\x5e\x5e\xa6\x62\xc5\x01\x57\x9c\xac\x1d\x16\xcb\x62\xa5\x57\x7c\x95\x1a\xa4\x39\x0d\xc3\x56\x95\x1d\xa2\x52\x7d\xc6\x2a\x5a\x68\x0d\x23\xc3\x0c\xef\x23\xfd\x2f\x27\x48\x9f\xd6\xa2\xa9\x18\xc1\x71\xf8\xf6\x1a\x6b\xbd\xb5\xb1\x6a\x32\x08\x1d\x22\x01\xfe\x95\x24\x59\xe1\xed\x0a\x02\xbf\xea\xb9\xce\x71\x06\xed\x3d\x74\xbb\x83\xc6\x79\x02\x15\x2c\x18\x0a\xea\x60\x58\x9f\x74\xe5\x91\x4e\x05\xdd\x4a\xb1\xb4\x3e\x0d\xf2\x40\x98\xca\x4c\x94\x25\x5e\x21\xaa\xe5\xb6\xbe\x79\xc4\x9c\x0c\xd0\xa3\xab\xf0\x8b\x30\x4a\x05\x75\x27\x0c\xec\x8a\x86\xe5\xcb\x2b\xf6\x47\x26\xc6\x60\x50\x56\x11\x0e\xe8\xb2\x2c\xfb\x7f\xa4\x52\xec\x23\xc1\xb0\xc2\x09\x65\xf7\xfa\x65\x26\x8d\xdf\xf9\x8f\x85\x96\x6f\x5c\x38\x14\x6d\x6e\x4d\x37\xee\xbc\x1d\x56\xb9\x9e\xb1\x72\xd3\x51\xa0\x6c\x1e\xe0\xff\xab\xcd\xaa\x36\xe9\xf8\x95\x4f\xb6\x63\x13\xa8\x7c\xd4\xe9\x13\xdb\x3c\xdb\x00\x99\xde\x9a\xaa\x34\x87\xc4\xb0\xc8\x03\xab\x91\x84\x99\x19\x56\x39\x87\xbc\x2a\x6a\xaa\x5a\x58\x0d\xe5\xdf\xfd\x5f\x86\x04\xc9\x4c\xcd\xbf\x23\x2e\x26\xcc\x7c\x3e\xf0\x7c\x09\xfa\x07\x59\x6a\x53\x4d\x32\xb0\xdf\x4f\x8e\xfc\x74\x3b\xbd\xf2\x66\x74\xfd\xd3\xdd\xd5\xf8\xfa\xe2\xf6\xea\x38\xa7\x5c\x1e\x9f\xdd\x5e\xdf\x8c\xaf\x2a\xbf\x1b\xff\xf7\xf8\xf8\xf6\xe6\xf4\xe2\xfc\xee\xbf\x6e\xc7\xb7\x35\x5f\xb9\x06\xce\x46\x3f\x8c\xcf\x1a\x95\xd4\xea\x3e\xd4\xb1\xc5\xe2\x42\x21\xc1\x8c\xb5\xc1\x5d\xaa\xd3\xb5\x5d\x22\xfa\x77\x30\x87\x2f\xcd\xbc\x1e\x0e\xdc\x5f\x86\x20\xf4\x50\x1f\x65\xe7\x10\xc9\x4e\xc1\x84\x79\x8f\x95\x97\xdb\x0a\xcf\xa5\xab\xcb\x92\xeb\xed\x07\x34\x5a\xd9\xda\x2b\x3c\xff\x52\x85\xe5\x7d\xd6\x53\xe7\xa8\x84\xb5\x05\xb6\x79\x69\x2b\x91\x14\xa6\x39\xdf\xa0\x1d\x13\x74\xc1\x3a\x6c\x62\x94\x31\xf3\x96\x38\x5e\x6d\xa3\x85\xf5\x81\x2a\x6a\x66\x72\xa4\xe9\x17\xa4\x09\xad\x19\x5e\xd2\xc8\x7c\x50\xc8\x94\xb1\x39\x34\x4b\xc2\x54\xb1\xc5\xdc\xb2\xe6\x5b\x5e\x10\xf4\xd3\x9f\xb3\x4e\x81\x99\x6d\xcd\xd6\xb4\x44\xf9\xe5\xea\xb3\xa7\x55\x0c\x2e\x15\xb2\x69\xa7\xdc\x24\x79\x7f\xe7\x2b\x59\x6e\x25\x2c\x6f\xb0\xbc\xaf\x60\x19\xae\x94\x3f\x76\xfc\x3b\xbe\xb1\x9e\xda\xb8\xda\x23\xe7\xe6\xf5\x0e\x16\x70\xbb\x77\xd6\x26\x86\x6d\x78\xa5\x1b\x71\x52\x20\xda\x69\xfd\xbe\x1c\x51\x4f\x7b\xa9\x0c\xb9\xbd\x34\xca\xca\x8c\x99\x2d\xe6\xa9\x83\x1c\x97\xa5\xa9\xe7\x60\xd3\x9d\xf0\x94\x3f\xe4\xf2\xe9\x96\xa6\x3e\x42\xa5\x26\x16\xd8\x7b\xbb\xec\xc0\x7c\x19\xd5\xd6\xda\x98\x5b\x7c\x28\x6f\x51\xb9\x06\x6d\xed\xb9\xe2\x60\x36\x81\xb2\xb6\xf0\xec\x06\xad\x7b\xd7\x6e\x1b\x15\xec\x04\xd6\x74\x0a\x7e\xfb\x8c\x52\xd2\x30\x17\x83\xa1\x16\x1a\xdd\x83\x2c\x84\x6d\x54\x33\x7f\x69\x1e\xb9\x7b\x14\x1d\x19\x4f\xc0\x51\x70\x4f\xac\x57\xfa\x82\x58\x4e\x2d\xcc\xb7\x79\xa1\x83\xb9\x79\x95\x54\x4a\x95\xd5\xae\xb7\x57\xdd\xda\x76\xe1\x19\xca\x52\x57\x0e\xe2\xa9\x79\x94\x4c\x69\x18\xbf\x37\xf4\x70\xdd\x6c\xff\xc1\x8d\xe8\x0f\x66\x4b\xa5\x35\x39\x03\x41\x6b\x3e\xd9\x10\x1d\x02\x09\xbb\x05\x28\x5b\xa6\x07\x89\x0e\x51\x42\xef\x09\xfa\x0e\x62\x65\xa3\xcb\xd3\xef\x06\xe8\xbb\x10\x8f\xf7\x5d\x07\xf1\x97\x71\xa4\xd9\x7e\x5b\x42\x25\x50\x8b\x72\x50\x8f\x8f\x80\xca\x09\xba\x39\x0a\xb8\xd5\x21\x1f\x40\x11\x61\x68\x7f\x20\xbe\xef\x63\xc8\xd6\x5b\xb7\x49\x36\x66\x47\x66\x67\x6a\x1a\xdd\x5e\x19\x2d\xbc\xe7\xb8\x66\xb3\x20\xdc\x80\x3f\x1e\x79\xea\xef\x8c\xcc\x47\xd6\x6c\xde\x3e\xb6\x5f\x35\xaa\x9c\x35\xe5\x26\xb3\x72\x51\x36\x6d\xbc\xb7\xb6\xdd\x5a\x44\xd1\x47\x55\x33\x62\x51\x10\x35\x9a\x58\xbf\xcb\x9e\x76\x97\xed\x03\x40\x92\xef\x5c\xf7\xdb\xec\xd8\x28\x44\x41\x33\x2e\x49\x4f\x6b\xb8\x4e\x4e\xe7\x39\x8f\x36\xb3\xfc\x75\xf4\xb8\x07\x73\xb2\xd9\xe5\x7e\x6d\x42\x35\xc6\xf5\x5d\xee\x6b\xb1\xab\x23\x65\x59\x18\x38\x35\x10\x4f\x45\x97\x64\x80\xa0\x7c\x45\x16\x5e\xb2\xe7\x15\xb6\x1b\x5c\x55\x96\xe7\xda\xbc\x44\x44\x0b\xfa\x50\x8d\x63\x6d\x5c\xe0\x1d\x02\x73\xe7\xa3\xcf\xe3\x93\xbb\xf1\xf9\xcd\xe9\xcd\x5f\xee\xca\x31\xba\xfc\xd7\x57\xc7\x3f\x9e\xfe\x5c\x55\x8d\xf6\xee\xd3\xf8\x7c\x7c\x35\xba\xc9\xaa\xfd\x57\x7a\x4a\x9a\x5e\x56\x45\x71\x67\x81\x36\x3c\x23\xac\x8b\x1d\x1d\x96\x4b\xfa\x36\x6e\x06\x25\x78\x82\xa8\x92\xe8\x81\x4a\x6a\x53\x16\xac\xb2\x77\x7b\xea\x3c\x1f\x15\x6f\xff\x10\x60\x15\x07\x26\x13\x3a\x7b\x09\xb5\x3e\xd1\x50\x11\xb4\xe1\x38\x16\x1b\x00\x00\x0a\xaa\x88\x0c\x2b\x5e\x62\x27\xec\x03\x1a\xd9\xa5\xad\x6a\x9f\x71\xa4\xd5\x50\x22\x4c\xef\x4d\xac\xce\x77\xdd\xd7\xa9\xcd\xe6\xd8\x97\x26\xce\x38\xf7\x7c\x83\xa6\x86\xae\x20\xec\x3b\x85\xc8\xd7\x55\x42\x23\xaa\x02\x1e\x40\x2e\xd0\x12\x33\x3c\x77\xe6\x47\x2a\x89\xd8\x20\x3d\xf6\x16\xbc\xdb\x87\x15\x59\x87\x13\x0a\x2d\x25\xbb\x5d\x3c\x0d\x8f\xe2\x16\x20\xfe\x64\x36\x68\x4d\x10\xa0\x44\x55\xd2\xb6\x4b\x7b\x32\x5f\x37\x20\x93\x2c\x32\xd1\x46\xff\xb0\xb4\xd7\xdd\xa3\xb9\xb8\x5e\x47\x1c\xb1\x62\x1f\xbe\x70\x20\x31\xc7\xf5\xb5\xb7\x92\x1c\x77\x9b\x23\x4d\xd5\x4e\xac\xfd\x95\xc9\x28\xd4\x40\x0f\xbd\x19\xce\xec\x3c\xaf\xa7\x3e\xec\x56\x8d\x20\x37\x89\x9b\x2b\x11\x40\xbd\x22\x2c\x6b\xca\x10\x00\x1f\x48\xfc\x5a\x8a\x11\x94\x53\x56\xf2\x9d\x7b\xe1\x4a\x04\x85\xce\xbc\x9e\x72\x04\x1b\xe7\xed\xf5\xe6\x24\x55\x74\xb4\x45\x19\x02\x0f\x99\x05\xd6\xc1\x6e\x22\x1f\xd2\x94\x68\x9c\x80\x44\x72\x31\x20\x7d\xa8\xda\xb8\x2e\x8b\x58\xbd\x9c\xf7\xb9\x30\x16\x9b\xc7\x02\x1a\x4f\xbe\x9a\x53\xbd\x50\x1c\x3f\x10\xa6\xf6\xa2\x2f\x40\x13\x15\x90\xe2\x76\xfe\x33\xc3\xa3\x75\x7a\x92\x89\x09\xcf\x3c\x1b\x04\xde\x94\xc0\x11\x10\xee\x99\x5a\x72\xb6\x82\x5c\x5d\xcc\x40\x0f\xad\xdd\x12\xc1\x4f\xcb\xf3\xb2\x01\xe5\x63\x67\x3b\x23\x0e\xcc\x10\x04\x3c\x82\x8a\xce\x9d\xb2\xdc\x72\x37\x33\x8b\x81\x8d\x22\x28\xff\x60\x94\xc5\xe2\x9a\x9b\x77\x2e\xb0\x2c\xbe\x72\xe3\x92\x6f\x91\x1c\x93\x6b\xe6\x13\x51\x27\x58\xe1\xbd\x70\x72\x77\xc0\x2a\x43\x47\x6e\x45\xb2\xb1\xc2\xd5\xb5\x21\x2d\x4c\x45\x92\xf9\x08\x30\xd2\x17\xda\x30\x00\x94\x40\x0a\x41\x6e\x46\x4d\x67\x6a\xe4\x40\xf7\x9a\x5c\x4f\xd9\x55\xdb\x9b\xad\x52\x5d\xa4\x12\x69\x04\xbc\x01\xfa\xc4\x55\xaf\xac\x25\x4c\x01\xd9\x69\xe3\x5e\x32\x97\x06\xe7\xf2\x65\x01\xa7\x52\x79\xaf\xd7\xef\x9f\x5d\xdd\x69\x79\xfe\xd7\x27\xf3\xaa\xe5\xa4\x77\x6e\x00\x7d\xb6\xd5\xb6\xbe\x32\xcb\xa1\xe3\x77\x20\x24\x43\x2a\x41\x09\x64\xe9\x27\x3e\xb5\x27\x2f\xe9\xac\xd5\xbc\x71\x63\xe9\x6b\xf5\xa4\xa5\x07\x2d\xb0\x4a\x33\x07\x5e\x96\xf4\x13\x44\x6e\x03\x9a\x5c\x0c\xc7\xa5\xb1\x2c\xcc\xbe\xaa\x90\x82\xea\xfc\x64\x7b\xbb\xa1\xd6\x58\xb8\xb7\xdb\x05\x28\x4c\x57\x0d\x50\x4d\x0b\x8c\x54\x12\x61\x7c\x67\x1e\xa6\x5f\x41\xcb\x57\x1b\x4f\xac\x2c\xba\xda\x14\xdf\x2f\x15\x7f\xad\xd6\x34\x8c\x93\x12\xbd\x7b\xc0\x09\xd5\x1a\xdf\xd0\x65\x65\xbd\x47\xff\x01\x34\x7b\xff\x5e\x63\x34\xe1\x39\x11\x77\x71\x9a\x0b\xce\x6f\xea\xd4\xa5\x7e\xe8\x24\x55\xeb\xea\xec\xb6\x9c\xc1\x93\xe0\xe8\xbe\x4b\xc6\x9f\xfe\x7d\x4d\xb3\x9b\x4f\x60\xe0\xad\xce\x5f\x04\x35\xf9\x74\xa4\x90\x4f\x67\x63\x99\xe1\xfb\x4d\xdc\x91\x01\x0b\x63\xe0\x2d\xb0\x21\xd8\x91\xee\xf3\x10\x7d\x34\x54\x35\x70\xa9\x99\x57\x44\x3c\x4d\xe2\x09\x23\x5f\xb5\xb9\x9f\x43\x21\x55\xd0\x8b\x58\x34\x9c\x7d\x53\xb5\x24\x28\x10\x5d\xee\x74\xc3\xbc\x78\xf2\x63\x79\x4d\xcb\x43\xae\xde\x64\x3b\xe9\xf2\xaf\xa4\xf4\xf1\xb1\x56\x68\x99\x4a\xd6\x03\xe4\x07\x59\xd8\x16\x09\x79\x20\x02\xcf\x89\x2d\x8d\x1c\x50\xc9\xe0\x2d\x2a\x21\x5f\x96\x80\x14\x6f\xbb\x9c\x77\x09\x9f\xf1\xb4\xdb\xd8\x16\x43\xdf\xa8\x17\xb5\x8f\x4f\xb5\x97\x69\x37\x7c\x75\x68\xaa\x2b\x30\x5f\xa3\xdc\x07\x1d\x12\x2c\x25\x9d\xad\x83\xe2\xe3\xde\x07\x0f\x10\x09\xcf\x58\x94\x67\xb6\xaa\xd4\x35\x72\xb8\xce\xfd\x80\x06\x77\xc7\xef\x58\xfb\xd9\x81\x49\x68\x1c\x26\xc4\x00\xa3\x6c\x09\x40\xdc\x92\xf4\x76\x57\x58\x8f\xed\x99\x05\xb7\xec\xaf\x63\x0e\x2f\xbb\x1d\xfa\xb0\x11\x90\xbe\x51\x3e\x14\xd7\xfe\x84\x24\xe4\x95\xd4\xc4\x2b\x6f\x84\xc6\xb9\xce\x92\xaf\x9f\x6d\xfd\x77\xeb\xcf\x16\x71\xa9\x1a\x08\xfb\x1e\xd6\xfb\x85\xa3\x1b\x35\xbd\xfb\x44\xda\x78\x77\x36\xee\xc5\xad\xce\x55\x9d\x70\xdc\x61\xb2\xf7\x16\xd2\x7c\xe2\x01\xd5\xad\xf5\x35\x51\xd2\x29\xae\xc1\x4e\x37\x3e\x13\x7b\x4e\x0f\x1d\x9a\x31\xc3\x06\x76\x58\xf0\x57\x12\x6c\xb3\xbd\xbb\xb2\x84\x41\x4f\x27\x0e\x37\x2f\x57\x97\xfd\x96\xf5\x77\x0b\x8f\xa8\x6d\x63\x1f\xb7\xff\xd3\xaa\x66\xa5\x89\x69\x69\x5c\x5c\x97\xb9\x68\xba\xe7\x5c\x0a\xce\xee\xc8\x57\x6d\x73\xca\x6d\x21\x49\xb7\x92\x48\x34\xfa\x72\x8d\xe4\x9a\x29\xfc\xf5\x03\x9a\x1c\x7c\x36\x84\xbb\xe8\x47\x9e\x0a\x89\x4e\xf0\xfa\x90\xcf\x0e\x97\x9c\xa9\x05\xfa\x0c\xff\x6b\x3f\x7a\x24\xe4\x1e\xfd\x85\x60\x31\x39\x98\x30\xc8\xfb\xb6\xb5\x17\x3d\x29\xce\x02\x43\x58\x4d\x5a\x2e\xdf\x3f\xfe\xab\x23\xf3\xd5\xaf\xf9\xfe\xe8\x8f\xff\x8a\x7e\x0f\xff\xef\xff\x43\xbf\x9f\x1c\xd4\xdc\x4b\xdd\xc0\x4d\x19\xdb\x72\x65\x6b\xf7\x34\xba\xe7\xb3\xd9\x9d\xa2\x4b\x62\x98\x3c\xee\xb0\xa8\xad\xce\xd6\x11\x5c\x4d\x2d\xc1\x88\xa1\x48\xcc\x32\x1e\xed\x4b\x4d\xf8\xd1\x29\x61\xbe\xa8\xbf\x49\x40\x64\x79\x62\x0d\x2a\xe1\x29\x12\x23\x3e\x9b\x75\xf1\x01\xba\x04\xab\x32\x7d\x59\x16\xc8\x0e\xe9\x72\xbc\x51\x17\xba\x22\xf8\x26\x3a\xe2\xb2\x8f\xe4\x1b\xb3\x8a\x61\x80\x4f\x6a\x11\x5f\x73\xb1\x93\x08\xbf\x27\x25\x7f\x59\x27\x07\xb8\x63\xfe\x08\x59\x97\x20\x42\xc6\x85\xcf\x50\x30\x01\x0d\x4b\x8a\x31\x61\x37\x17\x27\x17\xef\xee\xb1\x12\x7c\x8e\xd9\xfb\x0f\x68\x14\xc7\xb6\x40\x0f\xb2\x4e\x3f\xbd\x79\x16\x44\x90\x21\x0a\xab\x6d\x30\x3d\x71\x95\x1e\xed\x50\x1f\xa6\x82\x44\x55\x86\x6b\xf5\x61\xd7\xd3\x77\xe2\x1f\xa9\x81\x1e\xe5\xe8\x4d\xfc\x0b\x32\xe2\x00\x18\xeb\x3d\x59\xdb\x82\x9c\xc5\xf1\x6e\x53\x73\xe8\x7a\x45\x22\x6d\xfd\x9a\x22\x65\x22\x26\x30\x3d\xa6\xcc\x3b\x95\xca\x05\x5f\x2b\x0f\x55\xbe\xf0\xda\x2e\x80\xe8\x62\x52\xd7\x0e\x3b\xc5\xd4\xe9\xcb\x64\x83\x4b\x0c\x2c\x14\x80\x14\x58\x8b\x8d\x2d\x91\xbd\xb6\x06\x54\x58\xba\x26\x95\x44\x1c\xce\x70\xa4\x67\xaf\x50\x4a\x2e\x14\x55\x55\xf3\x78\x83\xe5\xfd\x7e\x1d\x4d\x3b\xd3\x6b\xd0\x38\x4b\x47\x37\xbb\xb1\x5c\xb7\xd8\x5e\x22\x0a\xcb\xfb\x3a\x08\x4a\x67\x46\x6c\x3d\x15\x0e\x9d\xd5\xd4\x3f\xdb\x72\x90\x75\x67\x6b\x96\x80\x62\x1a\x24\xa4\x2c\xf1\xca\x94\x75\x81\x0b\x86\x26\x24\x2e\x22\x81\x8b\xfd\xdf\xb4\x0d\x4c\x56\x4b\xe0\x27\x02\xac\xe9\x52\xab\xcd\x31\xc4\xe6\x30\x5b\x9b\x83\xa4\x2f\x2c\x2c\xef\xa5\xe7\x78\x41\x72\x89\x93\x64\x80\x04\x49\xa1\x2e\xcf\x00\x49\x92\xcc\x0e\x5d\x22\x61\x8c\x12\x3e\xa7\x11\x4e\xd0\x34\xe1\xd1\xbd\x9c\x30\x7d\x83\xb0\xb9\xb9\xf8\x56\x82\x47\x44\xca\xe0\xca\xcd\xc2\xaf\x2b\xc1\xe3\x34\x32\xc4\xd6\xa6\xb0\x04\x95\x8a\x46\x05\x36\x63\x2d\x11\xa1\x0c\x5d\x84\xc1\xc0\x00\xc4\xea\xd2\xd4\x95\x15\x94\x18\x20\x6a\xea\x4a\x23\x41\xa2\x14\x4e\xe8\xdf\x4d\x5d\x43\xfc\x40\x79\x25\xe6\x34\x5c\xb2\x5d\x54\x43\xbb\x3c\x77\x2a\x7f\x1a\x36\xec\xe7\x63\xfb\x18\x9c\xa1\xa6\x1d\x73\x95\xdf\xce\x7e\x37\xf8\x6d\xee\xf3\x99\xdc\xa6\xc8\xc8\x9f\x5d\xce\x98\xf9\x89\x0b\xab\xbe\x32\xdc\x15\x74\xb9\x06\x6d\xb5\x69\x4f\x1f\x1b\x3e\x65\x9b\xa6\x1d\x38\xe0\xa0\x75\xc7\x38\x6b\x09\x27\xf4\x15\xf1\xa0\x37\x89\x9b\x1e\x3d\xf7\xfa\x1a\x19\x78\x92\x63\x2c\xd1\x2a\x49\xe7\x94\x65\xe5\x35\xb5\x3c\x9c\x30\xe0\x26\xd2\x2f\x29\x30\xe6\x96\x77\xd4\x2b\x26\x36\xde\x8f\x70\xec\xc8\x6f\xec\x26\xb9\xcb\x26\xcf\xef\x5b\x57\x86\x72\xeb\x6c\x16\x51\x15\xae\xb7\xf5\xe6\xf5\xb7\x0f\x34\xe3\xd8\x0a\x5e\x54\xbb\xb6\x5b\x7b\x29\x0a\xbd\x2a\xe1\x58\xe8\xcc\x6c\x32\xe8\x1b\x84\x2a\x6d\x91\x9e\xba\x1e\xbd\x08\x32\xb8\x69\x21\x2f\xb1\x32\x85\x56\xc8\x92\x2b\xc3\x2c\x63\x48\x5e\x2c\xf7\x8b\xe5\x8e\x99\x26\x7c\x0a\xf7\x0a\xf0\xbf\xc0\xb8\x73\xf4\x7c\x76\xdc\x24\x46\xef\x82\x6b\xc2\xc3\x75\xde\xd7\x45\xdc\xf7\x07\x4f\x2e\x26\x8f\xd6\x82\x94\xf3\x84\x10\x43\x74\x99\xb9\x9b\x8a\xa3\x9a\x61\x2d\xb9\xeb\x6a\x42\x77\x83\x34\xe7\x56\x7f\x0f\x90\xe6\xc2\x30\x6a\xb8\x62\xf8\x3e\xca\xd6\x36\x0f\xea\x8c\xb7\xb7\x23\x0d\x80\xd1\xe8\x1f\xb9\xc5\x71\xdb\x6c\x5d\xb5\x44\xaf\x0b\xae\x5d\x20\x14\x79\x59\xb8\x76\xa1\x33\xaf\x19\xae\x5d\xe8\xea\xeb\x85\x6b\x57\x74\xb4\x05\x5c\xdb\xb8\xdb\xef\xf4\xa6\x6e\x27\x14\x56\x82\x2b\x3e\x4d\x67\xd7\x70\x9b\xb4\xa1\x4b\x35\xc2\xd9\xe9\x39\x36\x4b\x06\x7a\x6b\x74\xa0\x6e\x8a\x58\x88\xea\x2e\x0c\xb9\x25\xaa\x3b\x27\xd2\x7a\x54\xb7\x47\x75\x97\xe7\xe5\x35\xa2\xba\x0b\x6b\xde\x0e\xd5\x5d\xb5\xe4\x5b\xc4\x30\x72\xcd\x7c\x33\xa8\xee\xc2\x8c\xbe\x66\x54\x77\xa1\xab\xfb\x43\x75\x57\xaf\x6c\x37\x54\x77\xe5\xf5\x5f\xbf\x7f\x76\xc5\xdc\x01\x7f\xd6\x33\xa3\xba\x73\x03\xe8\x51\xdd\x3b\xd6\xd0\xc8\x6f\x41\xdb\x03\x20\x70\xb6\x40\xe1\xa2\xac\x6b\xc0\x75\x83\x4a\xbb\x87\x1d\xf5\xb4\xb1\x55\xf0\x42\xb5\xd5\xba\x47\xb9\x79\x90\x96\x52\x54\x5f\x7f\x0e\x6b\x1b\xd4\x99\xed\x99\x5e\x76\xe5\xe0\x28\x4c\xb2\xf7\x5e\xc1\xc2\xd5\x6d\xb9\x0a\x22\xbc\x1d\x36\xa0\xa5\x2c\xd8\x96\x02\xb0\xbe\xf4\xa4\xe1\x76\xdc\x4f\xb3\xbf\x0b\xff\x5b\x3b\x21\xbb\x56\x1e\x89\x56\xe9\x36\xe8\xd8\xf9\x76\x8f\x2d\xc9\x92\x8b\x4d\xe1\xc7\x1a\x73\x96\x0b\x3c\xdf\x84\xc8\x6d\x3b\x7b\xbb\xce\x9a\xa3\xe3\xec\xe6\xdf\xb8\x71\x4f\x35\x1a\x5c\xae\x34\x4b\xe8\x01\x07\x9d\xb4\x32\xc6\xe2\x43\x5c\x5b\x46\x51\x6a\x12\x0f\xca\x2f\x04\xf7\xaa\x24\xe2\x30\xc8\x24\xc8\xfb\x35\xcb\x3d\xc8\xcd\xbb\x53\xd0\x76\x98\xf6\x54\xd4\xc6\xf8\x5b\xc8\xd8\x91\x21\x72\xd6\xda\x5f\x48\x98\x50\xdc\x69\xd3\x75\x05\x1e\xad\x9d\x49\x6d\x0a\x66\x77\x71\x0c\xd3\xbf\xfb\x85\x9e\xd1\x84\x20\x1c\x45\x44\x1a\x16\x13\x8b\x01\x31\x84\x95\xa9\x48\x76\x59\x55\xca\xe6\x30\x6e\xad\x4c\x06\x25\x3a\xfc\xe6\x31\x77\xc6\x42\xf0\x74\xbe\x70\x56\x96\xab\xe2\x58\xb5\x96\x5f\xca\x04\xcd\x6f\x2c\x20\x50\xa8\xeb\x54\xdc\x04\xdd\x23\xa6\x6e\x4a\x9e\x39\x6a\x5a\x35\x8e\x0e\xbb\x23\x87\x1d\xca\x8e\xbf\xf3\x63\x1b\xad\x04\x32\x85\x26\x6c\x94\x43\x19\x39\x4a\x9c\xe9\x3a\x43\x2b\x98\xab\x3d\xdc\x64\x50\xb6\xd8\x5a\x2f\x50\x27\x48\xff\x05\x6a\x08\x3c\x64\xe3\xa9\x2e\x66\x0a\x40\x0b\x12\x1f\xe2\x68\x1d\x25\x34\x0a\x54\xd2\xb9\xc0\xab\x45\xd3\x4e\xec\x61\xff\x2f\x05\xfb\x6f\x49\xd6\xde\x08\x15\x09\xe9\xce\xdf\x74\x3a\x42\x79\x3b\xf6\x99\x08\x1d\xb6\xe4\x6e\xfd\xd9\xfb\x4e\x7c\x4b\x89\x11\xf5\x3b\xef\x85\x41\xe8\xe5\x8e\xbd\x64\x3a\x44\xc5\x7d\xb1\xdd\xec\xbe\x6c\x12\x44\xab\x61\xd4\x42\x0d\x5b\xe4\x3f\xe4\x6a\x6b\xf9\x7b\x7f\x43\x36\x44\xfd\x2c\xbd\x92\x3d\xb8\x4f\x7c\x54\x9d\xb4\xd9\x8c\x91\xea\xa2\x2a\x76\x83\x4b\xf9\x85\x7a\x5b\x90\x29\xdf\xed\x2d\x61\x53\xa3\xa0\x06\xc0\x82\x27\x50\x2f\x3c\x37\x5b\xfe\x05\x1e\x79\xe1\x27\xc8\x2d\x06\x14\x87\x05\xd5\x35\x23\x9b\x68\x02\x47\xf9\x45\xfc\x36\x00\x52\x1b\xec\xa1\x8e\x20\xa9\x70\x52\x77\x03\x4a\xed\x68\xdf\x74\x03\x4b\x35\x15\xfb\x2d\xae\xf7\x16\x61\xbd\x12\xb1\x47\x1f\x14\xf6\x41\xe1\xea\xb9\x79\x8d\x81\xe1\x72\xb1\xcb\x96\xc1\xe1\xba\xe5\xdf\xc7\x4e\xda\x63\x90\xf8\x85\x43\xaf\x8d\x51\xd7\x60\x83\xbd\x6c\x2c\xbb\x29\x8c\xbd\x79\x9b\x55\xc6\xe5\xea\xd7\xb4\x53\x78\x78\x43\x8e\x83\x7b\xcb\xae\x31\x3c\x8f\xbb\x7f\xd2\x38\x9e\xf7\x33\x06\x4f\xb4\x8c\xe5\x65\x89\x01\x7d\x3c\xef\x49\xe3\x79\x15\x13\xbd\x39\xa6\x97\x53\x10\x9e\x35\x10\xe3\xde\xfc\x1c\xc1\x98\x4d\x4a\x55\x3a\xbd\x7b\xf2\x73\x54\x39\xe6\xb6\xc7\xe9\x8b\x5f\x5b\x47\x8c\x8e\xc8\x72\x4a\xe2\x18\x8c\x2e\xc5\x11\x87\xc4\xab\x6c\x0b\x30\x62\x36\x6b\x56\x22\x1f\x43\x8d\x20\x1a\x1b\x40\xe6\x0a\x03\xd7\x8b\xbf\x43\x0d\x4a\x6f\xc2\x60\x7d\x93\x84\x08\xa7\xb3\x0b\xf4\x4e\x52\x16\x91\x50\x8f\x17\x28\xe6\x44\xb2\xef\x94\xe1\xfe\xc7\x6c\x8d\xee\x19\x7f\x4c\x48\x3c\x87\x15\x2a\x76\xe6\x10\x51\x32\x40\x54\xf9\xc7\x04\xc1\xd1\x42\x8b\xcb\x89\xee\x3b\xb8\xb5\xcd\x65\x4f\xec\xb3\xc2\x66\x9e\x07\x26\x83\x7c\x3f\x44\xe8\x94\xa1\x19\xd6\x46\xb1\x4c\xa7\x59\xfb\x31\xd7\x0a\x02\xdc\xfe\xe1\xc0\xb3\x46\x9e\x2c\x10\x57\x19\x78\xab\xd1\x5e\xf5\x06\x18\x25\x14\xef\xe4\x18\x7f\xc0\xbb\xa4\x02\x7e\x4e\xa5\x32\xe5\x14\xa1\xa8\xb6\xed\xaf\x05\x35\xfb\xb4\x67\x60\x09\x32\x29\xc4\x8c\xc7\xb5\xa5\xec\x0b\x43\xe9\xda\x97\x2c\x8a\x61\xc9\x89\xac\x49\x04\xed\x9a\xe9\x8e\xf9\x23\x93\x4a\x10\xbc\x84\x8e\x48\x5b\x15\x76\x66\xe2\x15\xc6\xd9\x40\x85\xb9\x81\xbb\x2c\xf1\x19\x65\xf7\x7a\x75\xb3\x44\x6f\x0e\x59\xb4\xfa\xcd\x15\x8b\xf6\x03\x65\x58\xec\x54\x78\xce\x30\xd1\x6f\x65\xca\x4f\xd7\x75\x99\xf0\x0a\x6f\x4a\x7b\xef\x62\xb8\x4b\xba\xd4\xf7\xa2\x7e\x1d\x02\x51\x67\x68\xe5\x30\x52\x78\xae\xe7\x67\x41\x92\x55\x40\x12\xb5\xc2\x42\xf9\x8a\x16\x36\xfb\x33\xe2\xcb\x65\xca\x20\x61\xd7\xda\x02\x8f\x36\xcd\xcf\xfa\x85\xb2\xc6\x87\x13\x76\xaa\xbe\x93\xfa\x7c\x71\x36\x4f\xd6\x08\xc7\x0f\x54\x66\x49\xf7\x11\x67\x32\x5d\x12\x61\x5f\x41\xa5\x29\x89\x60\xaa\xb5\x23\xec\xf6\x8a\xee\x9b\x56\xbc\x1c\x63\xa1\xbd\x1b\xe6\x68\x4a\x66\xfa\xd2\x5d\x61\x21\x9d\x0f\xa2\xc2\x7f\x60\x17\x37\xd6\x73\xf5\x62\x67\xf2\xe7\xf0\xd8\xa1\x65\x76\x42\xb1\xd5\x69\x8f\x8a\xe7\xd3\xd5\x11\xa9\x3f\x9b\xd3\xd2\xa0\x50\xf3\xc5\x64\x67\xe1\xa4\x54\x6e\xa1\x68\xea\xb9\xaa\x0f\x12\x0e\x8d\x7e\x8f\x53\x68\x4c\xe7\x3a\x79\x8b\x0a\x03\xb4\xbd\x36\x2e\x80\xf0\x6c\xda\x22\xbe\x52\x61\x45\x23\xab\x3b\x65\xbc\xba\xe6\xe9\xfa\xa5\x6d\x4b\x78\x5a\xb7\xbc\x32\xc2\x49\x79\x85\xeb\xe7\xf2\xda\xfc\xbe\x59\xf6\xd9\xe3\x66\xda\x6e\x84\x41\x44\x3c\x49\xba\xe4\xd5\x17\x46\x7e\x9c\x3d\xde\xdc\xa3\xec\x3d\x7a\x01\xdc\x5a\xc0\xa9\x31\x5c\x00\x38\xb1\x9a\x85\x54\x76\x95\xc2\x1f\x19\x19\xba\x46\x2c\x5d\x4e\x89\x98\x30\x3e\x03\xba\x85\xa4\xce\x6c\x5c\x09\xbe\xa4\x5d\x12\x93\x2e\x60\x99\xaf\x5c\xb0\x67\x83\x37\xcb\x85\x84\xf4\x29\xb2\xdb\xcb\xbe\xd1\x54\x8c\x61\x46\xcf\x68\x38\x43\x4b\xbc\xda\x6a\xc2\x4b\x45\xdb\x4b\x33\xbd\x34\xa6\xab\x9d\x3d\xc8\x86\x26\x40\x62\x00\x93\xfc\x88\xd7\x19\x58\xa4\xcb\x71\xba\x36\xba\x08\x91\x59\xd1\x6b\xbb\xcb\x82\x13\xe3\x83\x65\x66\xbd\xcc\x2c\xb4\x39\x41\xc7\x55\xdb\xb0\xf3\x59\x72\x63\x7e\x4a\x25\x3b\x3c\xf6\xa1\x7e\xdd\xe5\x36\xcc\x1f\x86\xa0\x45\x04\xdd\x69\x9e\xaa\xcf\xb9\x9d\xb3\xf7\x39\x2a\xb4\x83\x8c\x2d\xe7\x7c\xe5\x97\xd5\xad\x3e\xc3\x9c\xd9\x6d\xdd\x6a\xb2\x76\xc4\x9f\x75\xab\x32\xe1\xde\x58\x51\x54\x22\x38\xef\x5d\x2a\xd7\x6c\xb6\x21\x66\x5a\x77\x31\x6a\x25\x9f\xcd\x12\x8e\xb5\xa5\x66\x63\xd7\x33\x9a\x10\x39\x44\xa7\x15\xf6\x44\x58\xf8\xc9\xa4\xb7\x42\x24\xc4\xe9\x3b\xa9\xa0\x16\x95\x41\x04\xf1\x5a\x0d\xa2\x96\x74\x38\x73\x39\x08\xa2\xfb\x0c\x1b\x18\x34\xf9\x85\x36\xf1\x16\xa6\x01\x0a\x0e\xaa\x25\x56\x4a\x77\x09\x6c\x3b\xaa\x8c\x2f\x22\x26\x2b\xc2\x62\xff\x00\x37\x15\x49\x71\x64\xca\xc5\x66\xbd\xaa\x59\xd2\x7d\x30\x9f\xb4\x8f\xd1\xbb\xb7\x16\xca\x32\xff\x2e\xfc\x6f\xb1\x87\x37\xf9\xd6\x3b\xf7\xce\xeb\xe5\xdd\x9d\xfb\x1f\xe1\x51\xe7\x4c\xc2\x68\x26\x08\xf8\x1b\x97\x1e\x17\xc8\x62\x22\xa4\xe2\x1c\x6e\xa8\xeb\x93\x9f\x8e\x6e\x4f\x11\x51\x11\xf0\xb0\x4e\x58\x24\x1f\x06\x5a\xa1\xfd\x25\x25\x4a\x7f\x5c\x47\xc2\xb3\x24\x4c\x82\x24\xa0\x6d\xf9\xb8\xdd\xc4\xe8\xff\x9e\xe4\x9f\x6f\xd8\xf2\x41\xe5\x68\x43\x58\x05\x7b\xd7\x11\x63\xc0\x36\x85\x6c\xec\x5c\xc9\xcc\xdc\x7a\x70\x9e\x10\xcc\xc6\x55\xec\x67\x5b\x44\x83\xd9\xdf\x52\xd6\x51\x4d\x3a\xce\x1e\x0a\x7a\x51\xa3\x85\x2d\x57\x58\x50\xd9\xad\x79\xf7\x4c\x65\xeb\x9b\x84\x88\x9b\x57\x8c\xa6\x66\xa6\x50\x46\x14\x87\x94\x20\x04\x44\x88\xdf\x4f\xf6\xae\x87\x5b\x3e\x98\x8d\xe0\xa1\xe1\x84\x7d\x76\xfe\xcf\xec\x53\x99\x15\x8a\x5e\x4e\x81\x74\x25\x05\x9b\x29\xdf\x0a\x34\x1b\x53\xe9\x3f\x80\x5c\x7c\x99\x26\xca\x50\x23\xcd\x28\xc3\x89\xef\xa8\xf9\xa6\x4a\x4a\x08\xcc\xa2\x05\xd4\xdf\xda\x25\x42\x3b\xbb\x23\x49\x17\xdd\xf1\x74\x36\x4e\xa4\xde\xdf\xd1\x7d\xcd\xe9\xfc\x83\xa3\x54\xeb\xb0\x40\xd9\x60\x40\x73\x73\x04\x31\xc6\x2a\x31\x7e\xba\xc4\x10\x2d\x11\x04\x4e\xb6\x22\x38\xc0\x80\x29\xf5\x2a\x5a\xdd\xda\x96\x93\x83\x32\x90\xce\x2d\x37\x85\xb7\x20\xac\x26\x4c\xa4\x0c\x32\xaa\xbd\xff\x1c\x23\x49\x04\x35\x8e\xec\x88\x33\xa3\x03\x58\xe7\xc9\x5c\x8b\x09\xad\xf9\x99\x82\x89\x0c\x2c\x2a\x9e\x4a\x2d\x43\xf0\x92\x28\x7d\x41\xbd\x03\xce\x3f\x13\xc1\x18\xa0\x95\xa0\x4b\x45\x1f\x88\xa7\x41\x08\x57\xae\x72\x33\xef\x12\xdd\x5a\x11\x81\x55\x5b\x56\x85\xaa\xb7\x5f\xb8\x16\x2a\x0f\x6c\x42\x66\xea\xae\xd2\xef\xd2\x60\x62\xe8\x16\x59\x5c\x83\x22\xa3\xf3\xc5\x1e\x5a\x6c\x7f\xea\xff\x64\xfd\x62\xfa\xa8\x07\x37\xbe\xe0\x5c\x99\xfd\x96\xc9\x24\xe4\x66\x13\xd4\x05\xfb\x52\xc3\xc4\xa4\x17\x95\xc2\xaa\xea\x33\x7c\xcf\xf8\x23\xf3\xb6\xb5\x56\x1b\xc6\x18\xc8\xc1\xbc\x60\xb1\x71\x0a\x73\xaa\x37\x9e\xe7\x1c\xdb\xd0\x2b\xc9\xe3\x08\x6b\xf5\x02\x83\x62\xb2\x46\x19\xa3\x54\xee\xb9\x36\xd7\x9b\xb1\x3b\xdd\xd9\x35\x03\xb6\x24\x2a\x8a\xac\xac\x6d\x6c\x6b\x50\x7a\x90\x07\xb8\x57\xf5\xab\x86\xe8\x8b\xd3\xe4\x20\x0c\x94\x31\xa1\xd9\x3a\xbb\x09\x5e\xbb\xa2\xe7\x55\x13\xbb\x0f\x80\xff\xbe\x63\x33\xcd\x13\xec\x91\x9b\x15\xb3\x9c\xbb\x50\x19\x33\x16\x56\xcb\xd8\xb1\xbd\xb0\xed\x43\xd7\xa4\x19\x93\xf0\x11\x58\x55\x4c\x39\x7d\xf0\x56\x71\x96\xac\xff\x97\x59\x2c\x00\xf6\xfb\xca\xbb\x96\xcb\xc3\xfa\x30\xf5\xf9\x01\x1f\x1c\xe3\x4a\x5f\x8a\x33\x9a\x24\x10\x63\x19\xa2\x11\xf0\x82\x01\xe3\x93\x56\xe4\x5d\xf0\x8e\xce\x19\xdf\x14\x62\xa8\xd9\x4c\x51\xb0\x99\xae\xeb\x37\x93\x84\xdd\xe4\xa3\x0a\x7b\xda\x51\x7b\x80\xe0\x69\xd9\x82\xcb\x69\x64\xed\x81\x77\x1d\x2e\xe3\x97\x08\xd7\x95\xba\x1b\x9a\xc6\xd5\x5d\xff\x94\x62\x81\x99\x82\x20\x94\x65\x8f\x15\x36\xd0\x0b\x25\xb4\xc9\x57\x88\xd6\x32\x63\xd8\xc1\x47\xe1\xe2\x3a\xa7\xfb\x9c\x3e\x10\x86\x68\x3c\x40\x74\x48\x86\x03\xcb\xbe\x2b\xd3\x69\xf6\xcb\x05\x96\x08\x4f\x58\x09\x48\x36\x44\xa3\x44\x72\xfb\x04\x61\x51\x02\x3c\x7c\x41\xbc\xcc\xef\x7c\xeb\x26\x82\x02\xca\x76\x29\xb3\xe6\xb9\xfd\x22\x78\x70\xc2\xb0\x34\x5e\xe9\x04\x4e\x7a\xf6\xf9\x86\xfa\xe6\x4f\x9a\x67\x5c\xba\x86\x9e\x6c\x91\x0c\xa1\x5c\xd3\x02\xc1\x2f\x60\x61\x32\x80\xdf\x84\xf9\xed\x8c\xde\x61\x95\x10\x2c\x15\xfa\xe3\xfb\x4e\xc1\x19\x37\xbe\x4c\xb8\xda\xd3\x9b\xc1\x50\x5c\xe8\xbb\x8e\x26\x18\x68\x88\x10\x86\xc2\xc8\x1e\x98\x32\xd0\xcb\xac\x38\x7a\xa0\x32\x05\x66\xc3\x00\x56\x65\xb8\xe9\xa8\x92\x8e\x66\xc5\xf8\x29\x6b\xc4\x88\x63\x8a\xb5\xfe\x4b\xdb\xad\x8a\x8d\x35\x30\x53\x4e\x8d\xb2\x0b\xc8\xe6\x2c\x08\xbd\xd0\x5a\xae\x15\xac\x2e\x6e\x13\x50\x60\x8d\x92\x24\x1f\xf8\xd5\x0a\x4e\x4c\x98\x1e\x30\xf0\x32\x0e\x51\x58\x44\x54\x66\xb1\xc2\x3c\x35\xb3\x3f\x2b\x5a\x71\x9e\x30\x8f\x4e\x0d\xdb\xae\x54\x76\xaa\xcc\xc5\x67\xd4\x81\x2b\x5e\x7f\x66\x08\x32\x5b\xe8\xc2\xf5\x2c\xe3\x0d\xee\x95\x92\x89\xde\xa0\x1a\xef\xfb\x05\xed\x35\xe5\x6a\x73\x17\x6e\xd9\x47\x5e\x61\x3d\xd7\x2c\x6e\xa0\x5a\xec\xb0\xa8\x59\xd0\xfa\xb9\x1c\xb8\xb9\xae\x9f\xc6\x80\x28\xdb\x2c\x04\x33\x84\x96\x13\x1d\x60\xb7\xd2\x38\xc0\x98\x04\x01\x78\x80\x12\x39\xb9\x67\x7f\x59\xc7\x87\xf5\xb6\x87\x3f\xc8\xc6\xef\x86\xe2\xa3\xd0\xe5\x81\xd7\xeb\x7a\xa3\xf8\x6f\x38\x22\x2c\x5a\x9b\x37\x39\x5e\xbf\x4c\x8f\x03\x65\x2f\xc8\xe0\xc4\x60\x9b\x57\x6a\x87\x96\xeb\x76\x88\xc6\x70\xcf\x38\xea\x5b\x3c\x73\xfe\x85\xe0\xc7\x13\xa6\x0d\x13\x7d\xc5\x4b\xd3\x69\xd7\x7e\x7e\x8b\x57\x9d\x00\x03\xdd\xdf\xc9\x35\xb3\xdc\x4c\x0e\x50\x67\x4c\xb8\xcc\x01\x68\x03\x32\xad\xd1\x78\xfe\x01\xc5\x3c\xba\x27\xe2\x48\x90\x98\xca\x0f\xe0\x2a\x57\xb5\x3e\xba\xa5\x36\xb6\x77\x56\x34\xb6\x65\x9f\x37\xef\xb7\xe8\x23\x73\x6f\x11\xad\x21\xcc\xc0\x9a\x70\xa8\x42\x03\x35\xb4\xd4\x17\x88\x30\x25\xd6\x2b\x4e\x99\x72\x28\x89\xa8\x30\x11\xce\xd0\xd0\x3a\x5b\x1d\x16\x47\xec\x23\xa4\xb6\xe5\xb0\x6f\x16\x44\x12\x17\x3f\x30\x83\x52\x1c\x19\x56\x68\x23\x2e\x56\x58\x2d\x24\xe0\x22\xf3\x73\x60\x6d\x2e\x78\x54\xcf\x10\x5e\x41\xf8\xc1\x38\x29\xb2\x87\x3c\xe0\x4f\x2a\x9a\x24\x13\xc6\x08\x89\x25\x02\x9e\xa2\xef\x2a\xf1\xb7\xfa\xd1\x01\xc2\x71\x8c\xfe\xf7\xbb\x8f\x67\x7f\xb9\x19\xdf\x9d\x9e\x5f\xde\xde\xdc\x7d\x3c\x3d\x1b\xbf\x1f\xf8\x0f\x2f\x6e\x6f\xfc\xa7\xc6\xc1\xf2\x40\x04\x5a\xe2\x7b\xb0\xf0\x98\x34\xea\x1f\xc0\xe2\xc2\x9e\xba\x74\x27\xfd\x8d\x24\x0e\x6a\x62\xd5\x14\x9f\xf0\x62\xd7\x70\x43\x4a\x62\x07\xdb\xf7\xca\x3f\xd2\xbc\x07\xdd\xe6\xf1\xaf\x70\x6a\xe0\x92\x30\xa5\x65\x8c\xc5\xac\x65\xa6\x6f\xb6\xe1\x08\x9b\x53\x56\x17\x10\x27\xec\xe1\x29\x75\xf8\x9f\xc8\xfa\x67\x6d\x5d\x5f\x62\x2a\x5a\xef\xbd\x31\x7b\xa0\x82\x33\x18\x9a\xf7\x6a\x65\x15\x3a\x08\x0c\xb8\x70\xa8\xa4\xd1\x85\x21\xe4\xb2\xaa\x05\x5d\xb0\x19\xad\x85\x57\xbd\xd8\x70\x47\xc6\x4d\x4c\xbe\x2a\x81\x6d\x41\x50\x69\xc5\x0d\x7e\xc0\x34\x01\xc0\x8c\xbb\x68\xb2\x3d\x68\x0a\x3f\x7c\x40\x24\xc1\x53\x2e\x00\x46\x6b\x22\x7c\xae\x09\x3b\x61\x40\x81\xee\x1b\xaa\x03\x6e\x70\xf1\x74\x05\x79\x72\xf7\xd0\x25\x17\x6d\x6e\x72\xfd\x33\x98\x05\xbe\xd2\x26\x59\x41\x88\xda\x6b\x76\x46\xb0\x61\x42\x96\x20\x69\x64\xba\xd2\xe3\xb0\x60\x90\x24\xc9\x91\x6e\xe9\x33\x20\x87\xd6\x39\x9e\xfd\x92\x33\xf4\xd3\x9f\x25\x9a\xa6\x6a\xc2\xf2\x6d\x70\x06\xf5\x77\x7e\xc0\x2a\x5a\xbc\x9f\xb0\x0b\x6d\x30\xfe\xf4\xe7\x9a\x84\x9c\x18\x2b\x7c\x57\xbd\xbf\xea\xe7\xe4\x04\x2b\x7c\xc6\x71\x4c\xd9\xfc\xd8\x3c\x5a\x3d\x17\x3f\x8c\x6f\x46\x1f\xd0\x85\xb5\xc6\x7d\xcd\xd8\x2c\x8d\x2b\x68\x08\x64\x2b\x0c\xc4\x09\x04\x90\xca\xcc\x4b\x71\xeb\xec\x02\x45\x48\xdf\x3d\x13\x06\x53\x69\x04\x24\x55\x68\xc5\x2d\x43\x8a\x36\xb0\x38\x12\x29\xb3\x4e\x69\xeb\x13\xd4\xb3\x03\x3b\xd2\x2f\x86\x55\xad\x40\x35\x29\xcb\xed\x09\x03\x53\xdb\x83\xd6\x13\x1e\xe1\x04\xa2\xe5\x87\x81\x77\x4e\x1b\xe0\x3c\x05\xe8\x31\x84\xa9\xd8\x3a\x0f\x6a\x71\xfc\x75\x99\x7e\x15\x2e\x14\x98\xf2\xb0\x8e\x96\xd6\x65\xc9\xb5\xf0\x18\x4e\xd8\xe9\xcc\x04\xd3\x13\x33\x3b\xfa\x41\xc2\x74\xf7\xfd\xb4\xe8\x6f\x9d\x68\x01\x8a\x5b\x93\xf1\x8a\x23\x70\xc4\xb3\x35\x40\xa1\x80\x3a\x83\x43\x50\x26\x13\xb4\x76\x53\x96\x56\xd1\x5f\x6f\xe1\x63\x13\x66\x82\xf8\xb9\x85\xb1\xb3\x55\x7c\x3d\x67\x80\x31\xc8\xae\x3e\xaf\x2c\xac\x2c\xe6\xc0\xea\xed\x2b\x41\x0e\x5d\x29\x04\xfd\x69\x30\xa9\xfa\xb6\x1c\xa2\xab\xd0\x54\x8e\x79\x94\x2e\x5d\x4e\x2b\x60\xb4\x6d\x70\xda\x5e\x88\x7e\x8b\x98\x4b\xba\x72\xcb\xff\x2e\xfc\x6f\xa5\x9e\x79\xb9\x63\x01\x1d\xbf\xad\xee\x56\xf9\x96\x72\xad\x51\xa6\xc8\xbc\x98\x9f\xd9\x85\x2a\xe8\x1c\x10\x6d\x50\xc7\x1b\x2a\xeb\x70\x64\x2b\x32\xdb\x04\x96\x15\x8f\xbf\x93\xe8\xf4\x52\x2b\x1c\xda\xc0\xf4\xe7\x24\x95\xca\x84\x66\x01\x9e\x6a\x9e\x36\xf0\xb8\x01\xfa\x1e\x4d\xd2\xef\xbf\xff\xe7\x08\x7d\x75\x7f\xfc\xdb\xbf\xfe\xeb\x3f\xff\xdb\x36\x85\xa2\xa0\xdd\x6c\x8e\x6c\xfa\x78\x51\x03\x09\x57\xa0\x2c\x4d\x76\xd1\xf8\xa1\x06\x97\xde\x08\xdb\xc1\x22\x68\xe2\x15\x41\xdd\x08\x7a\x67\x3d\x55\x0a\x22\x5d\xef\x9d\xfc\xe6\x49\x4c\x84\xd9\xde\xde\xb9\xe4\x5d\x5e\xb0\xf5\xc9\xd7\x55\xc2\x63\x57\x87\x5e\x92\x15\x86\xab\x4e\x6f\xf5\x21\x9a\xb0\xf1\x57\xac\x25\xd3\xc0\xd1\xa7\x9b\x5a\x5f\x10\x23\x98\xe1\x88\x20\xa3\x55\xbe\xfb\xfa\x41\x7f\x36\x40\xeb\x0f\x00\x5f\x18\xa0\xbf\x7f\xb0\x59\x43\x58\xa8\x3b\xfd\xd1\x7b\xa7\x16\xda\x26\xa0\xd7\x54\xa2\xc9\xc1\xd1\x03\x16\x86\x3f\xf3\xc8\x12\xec\x1c\x58\xd9\xe1\x79\xa5\x42\x45\x32\xe1\xfc\xde\x82\x3b\x4a\x4f\xda\xff\x0c\xcd\xe6\xf0\x3e\x7e\xb3\x6f\x2d\x4e\x47\x2b\x3d\x87\xf0\x03\x82\x86\xab\x29\x1a\xfe\x4d\x72\x86\x86\x6b\xbc\x4c\xec\xa7\xee\x5b\x8b\x3d\xc1\xd2\x22\xa8\x63\x2d\x0f\x1e\x28\x4f\x65\xb2\x36\x6e\xbd\x1f\x12\x3e\x85\x71\x7d\x76\x63\x35\xe8\x0d\xe8\x68\x26\x5f\x33\x91\x6c\x07\x42\xb5\xb1\x89\x63\x93\x49\x05\xd4\xfc\xfa\x27\x26\x0c\x5d\x35\xac\xaf\xbe\x4f\xff\x6d\x82\x98\x30\x2b\x0e\xf3\x6d\x5c\x99\x7a\xb2\x2c\x64\x71\x86\xbe\xa2\x77\xf6\x04\xbf\xd7\x62\xd4\x62\x65\xcc\x3c\x54\xbd\x60\xed\x5f\xf0\x97\xe0\x05\x94\x21\x83\xe2\x6f\x78\xf2\xef\x47\xc3\xe1\xd0\x3f\x7d\xae\xc7\xf2\x7f\x11\x55\x92\x24\x33\xd3\x92\x13\xd2\xeb\x09\xfb\xac\x55\xfe\xd0\xd5\x9a\xe5\xbe\x02\x5f\x76\xc4\x13\x74\x98\xb9\x1f\x63\x1e\x49\xf4\x4f\x5a\x09\x0b\xe6\x12\x3e\xd4\x56\x47\x13\xf3\xee\x73\x1d\x2c\xeb\xbe\x2d\x1e\xad\x30\xa3\xd1\x9b\x61\x58\x5f\xde\x31\x7d\xa0\x71\xea\x36\x83\xde\x3a\x47\x36\xeb\x11\x2a\x1a\x28\xf2\x55\xc1\x57\xd5\x83\xab\xc6\x51\x55\xeb\x3f\x25\x69\xe5\x60\x66\x66\x57\xd7\x0c\xdf\x26\xfe\x59\xd9\x60\x46\x39\x08\x3d\xfd\x5a\x32\xb3\x90\x64\x40\xa6\xcb\x25\x16\xeb\xa3\xec\xb0\x95\xb7\x66\xc6\x35\x03\x52\x26\x71\xc3\x87\x68\x63\x62\x4f\x96\x0d\xb8\x07\x65\xd7\x16\x1e\x73\x87\x62\x12\xd1\xd8\xa2\xfd\xb0\x21\xc2\x23\x2c\xe2\xb1\xdd\xd5\x59\xaa\x42\xfe\x46\xf6\xbf\x29\xdf\xc5\x2e\x07\x49\x66\x8e\x23\xa6\x4c\xfe\x92\xfd\x85\x7b\xb8\xce\xae\x03\x2d\xa7\x6e\x93\x59\xf7\x69\x6d\x7e\x4a\xd5\xd7\xd9\x26\x4c\xf0\xdc\xaa\x51\x32\x54\x7f\x50\x4e\xff\x31\x6a\x1a\x68\x3c\x44\x0d\xf2\x6a\x98\x77\x0e\x58\x0f\xc8\xff\xea\x70\x43\xc2\xbc\xe7\x75\x60\xec\x2c\x28\x67\xad\x0b\xfc\x98\xdd\x95\x00\x7b\x30\x9e\x8b\xd4\x27\x8e\x98\x7f\x1f\xf3\x4b\x9a\xe8\x1e\xc2\x89\x1a\x4e\x58\xee\xe3\x01\x22\x09\x5d\x52\xe6\x81\x9c\xe6\x36\xe1\x33\xa3\x8e\xde\x53\xa5\xb7\x88\x8c\xef\xb5\xc0\x74\x39\x78\x81\x8d\x32\x62\x6b\xb7\x55\x7d\xd0\xc6\x5a\xe7\xa9\xd4\xfd\xca\xec\x57\xad\x1c\xea\x26\x0e\xad\x82\x47\x83\x8d\x0e\xd2\x62\xc2\x74\x6b\xee\xe4\xce\x09\x23\xc2\x11\xc4\xb9\xf6\x82\xe6\x0e\x41\xa1\xa6\x0e\x25\x0f\x2d\xc0\x3b\x70\xaa\xb8\x16\x6e\x11\x4e\x92\xb5\xd7\x27\x2b\xb4\x89\x71\xa1\x38\x4a\x77\x50\x25\xd4\xda\xb8\x63\x3c\x26\x1d\x99\x13\x2a\x8a\x4f\x58\x0f\xad\x0b\xec\x09\x62\x80\xaf\x20\x95\xea\x90\xfe\x44\xca\x8e\x5e\xcb\xca\x2a\x2e\xb6\x1d\xe0\x6f\x7c\xdc\xb6\x92\x5e\x26\x41\xa1\x15\xa7\xbf\x07\x89\x0a\xb9\xb9\xcf\x57\x9a\xd9\x49\x99\x8e\xb7\xf3\xdb\x9a\xb1\x47\x30\xed\x59\x4d\x4a\x34\x17\x3c\x5d\xf9\x6c\x1e\x87\x6b\x36\xcb\x60\xef\xcf\x53\x36\xe3\x1f\xac\xfa\x7b\x46\xd9\xbd\xb9\x79\x9f\x6a\x8d\x7c\x4d\x97\xe0\x73\x27\x31\xcd\x8c\x1f\xda\xc2\x5e\xba\xd7\x52\xe1\xe8\xde\x30\x6d\x34\xd5\x04\xea\x5a\xd5\x28\x13\x8c\x69\x92\xd8\xd7\x66\xe2\x3a\xe3\x1c\x7d\xa0\x18\x61\x74\x7b\x75\x5a\xfd\xee\x7b\x5a\x76\x73\x57\x5f\x9e\xf9\x0d\x02\xff\xf3\x13\xed\x04\x48\x2b\x30\xc3\x90\xdc\x56\xf7\xb6\x7a\x1d\xd7\x41\x81\x24\x67\x27\x6e\x95\xce\x2c\x6e\xa1\xdb\x14\x90\xdf\x4d\xfb\xc3\xf7\x32\x9f\xd9\xeb\xb7\xae\x7b\xbf\x93\x2c\xfa\xd2\x32\x8f\x80\x3c\x15\xa6\xec\x56\xac\x15\x83\xfa\x94\xa7\x1d\x89\x03\xc3\x5a\xc5\x8e\x3d\xd0\x70\x28\xd8\xbe\x4d\x09\x64\x79\xd7\xf7\x61\x67\xaa\xc0\xb0\x0b\x96\x99\xac\xae\x07\x13\x36\x72\x3f\xf1\x10\x63\xb8\xfd\x84\x09\x76\x01\xb8\xc4\x40\xa9\xe0\x06\x0a\x8a\xc6\xd8\xc1\xd5\x0c\x82\xe1\xe5\x2e\x92\xe0\x56\xdf\x80\x9e\xe3\xc1\x58\x1a\x4e\xf5\x72\xe3\xa8\x79\xb3\x25\x7d\xdd\xe1\xe5\xd7\x6e\x88\x05\xfe\xd8\xaa\x17\x6f\x3a\x9a\x63\x9f\x3e\x62\x1b\x0a\x29\x6b\x0d\x00\x25\x59\x67\x70\x07\x3d\xe3\x46\x6b\x29\xbc\x2c\x77\x58\x67\x06\x26\xbd\x9b\x5f\xc6\x28\xd5\x7b\x07\x1a\x68\x5b\x1a\xf4\x84\xf6\x2d\x03\xd6\xbc\xbb\x53\x05\x67\x78\xea\x4c\x8d\xf6\x3e\xe2\x94\x51\x4b\x6f\x64\xed\xa6\x20\xde\xe7\xfc\x0b\xd9\xf3\x54\x22\x89\x15\x95\x33\x5a\xa9\x3f\x85\xe0\xf4\x5d\x66\xbd\x53\x99\x37\xb7\xcc\x4d\x5b\xd5\xe3\x96\x86\xe8\x23\x15\x52\x05\x43\x52\xdc\x63\xcb\xeb\x0a\xc7\x68\x53\xeb\x29\xc3\x04\x6e\x04\xb5\x01\x82\xe2\x68\x1c\x46\x6d\x88\x46\x99\xd1\x67\xd0\xf5\xc6\x9c\xdb\x30\x22\x92\x48\xb2\xcd\xe6\x6b\xa5\xb1\x82\x57\x11\x36\x10\x02\x71\x29\xf5\xe7\x19\x45\x83\xef\xe6\x23\xc0\xc0\xf1\x3d\xa9\x2b\x37\xd7\xb5\x54\xe1\xc6\x0a\x85\x23\xaf\x90\x72\xa3\x93\x6e\xd3\xc1\xf6\xc7\x2e\x4b\x68\xa0\xb3\x23\x3d\xe5\xb6\xf6\xaf\x71\x53\xcd\x60\x1f\xda\x94\x88\xc7\x05\x97\xe1\x39\x73\xeb\x27\x4d\x65\xf7\x94\x38\x94\x19\x80\xf7\xfc\x04\x1b\x5f\x3f\xe3\x61\xc6\x04\xf4\xda\x1f\x52\x13\x9d\xf6\xeb\x8d\xec\xdd\x60\xa6\x01\x0c\x52\xd7\x54\xf9\x34\xe7\xe2\x7a\x3b\x1c\xe7\xdd\xaa\xc3\xfb\x93\x5b\x73\x8d\x75\xe5\xa3\xa8\x3d\x4b\x9d\x60\x8c\x60\x8b\xd2\x08\x72\x9d\xcd\xb5\xbb\xc2\xb4\xca\x41\x6d\x39\xbe\x5e\x6b\xd6\xfe\xbe\xd3\xf5\xed\x70\xb7\x4c\xd5\x4f\xcc\xd3\xce\x23\xc5\x1f\x5d\x8a\xfe\x3e\x12\xdb\x33\xb6\xb5\x76\x49\xed\x66\xf3\x48\x53\xd4\xc8\xf4\xab\xdb\x1e\xc9\x4d\xb1\x71\x51\xda\xf8\x9d\x84\x58\x9f\xc9\x89\xe1\x33\xcf\x43\x60\xc2\xb4\x86\xb2\x44\xdb\x9a\xa5\x3f\x7e\x48\xf8\x54\xbe\x0f\x4b\x31\xdb\x77\x64\xa9\x31\xf5\x5b\x70\x3f\x69\xef\x6e\x2a\x9e\xf2\x3e\x74\x67\x26\xbc\x0f\xbb\x4c\x7c\xf5\xa6\xca\xa2\xa8\x06\x19\x8c\x05\x4f\x99\x4b\x1b\xe6\x8c\xf0\x19\xf8\xcc\xc0\xe9\xed\xac\x42\xc8\x28\x64\x5c\x05\x28\x60\x41\x56\x06\x83\x06\x1a\x6a\xfd\x74\xef\x98\x3a\xbf\x69\x9e\x9f\x22\x75\x7e\xd7\x79\xb7\x07\xe7\x85\x26\x7c\xd7\x84\x68\x73\x94\x3a\x88\x59\xf8\xfd\x46\x63\xdc\xcb\x01\xb0\xbe\x43\xf2\x53\x93\xf4\x06\xa1\x6f\x72\xa8\xf8\x21\x64\x4f\x00\x26\xdf\x90\x59\xd4\x51\xbc\x45\x0b\xb2\xec\xc0\x17\x70\x0d\xbf\x6f\xd1\x4f\x83\x77\xf8\x1a\x74\xd4\xde\xbd\x12\xb9\xc2\x07\xa0\xcc\x30\xa8\x61\x0a\xf6\xd9\xc6\x9b\xa3\xa3\x8b\x23\x5c\xca\x66\x0f\x98\x4d\xd4\x2e\x10\x0d\xf8\x58\x1b\x0e\x84\xc0\x10\x41\x4c\x7f\xc1\x97\x5c\x5f\xdb\x3c\x95\xc1\x97\x06\x14\x02\x97\x4d\x43\xd9\x87\x95\xc9\x96\x7c\xb9\xd1\xe8\xa3\xa5\xbf\x32\xba\x63\xf8\xa3\xcd\x6c\x2b\xc1\x48\xa6\x79\xb6\x8a\x0d\xfd\xf7\x34\x03\xcd\xfb\x06\xa2\xab\x4b\x3a\x5f\x58\x12\x3d\x9b\x3c\x4c\xff\xae\x2d\x48\xbd\xa5\x3c\xfe\xc2\x97\xb9\x35\x51\x5f\xd8\x50\xac\xaa\x7a\x50\xad\x7b\xbb\x0b\x59\x46\x87\x72\xbf\x41\x32\x5d\x16\xbb\xd5\x93\xec\x23\x68\x2e\xd5\xc3\x3f\xf8\x90\x31\x38\xae\x57\x64\x80\xa6\x29\x7c\x7f\x7e\x71\x13\xfa\x86\x28\x83\xaf\x0f\xa3\x05\x89\xee\x01\xa9\x64\x84\xa2\x99\x2e\x47\xc5\x39\x5d\x4f\x58\xc6\x13\xa6\xb8\x73\x74\xac\x7d\x22\xb6\x27\x23\xe0\x02\xc5\x54\xae\x12\xbc\x46\xe4\xab\x22\xcc\xc4\x4d\x2a\x6a\xae\xeb\xcd\xb2\x9d\xd9\x02\x44\x66\x56\x0a\x38\x3d\x0c\xfe\xe5\x06\xe1\xf9\x9a\x3d\xe4\xa0\x4a\xed\xd8\x39\x35\x7e\x97\xf8\x49\x1d\x25\x5f\xc0\x52\x6e\x56\x34\x74\x95\x7a\x54\x3c\x2b\xc0\xdb\x27\x07\x0e\x04\x01\x1e\x94\x89\x23\x34\xd6\xff\x36\x84\xa8\x44\x3c\x90\x78\xc2\xf2\x79\x07\xf6\x2a\xcb\x56\x19\x65\x54\x4d\x75\xa2\xb3\x3b\x1f\x8c\x9e\x67\x4f\x57\xd2\x18\xda\x01\xac\x65\x96\x64\xe9\xe3\xfc\x0d\xd4\x51\xd5\x94\xc8\x4f\xc0\x71\xd4\xda\xf9\x91\x71\x43\x59\x62\x17\xcb\xdc\x46\x4c\x30\x39\x01\xec\x9a\xdf\x98\x1e\x55\x6d\x52\xae\x7c\x44\xd2\x46\x28\x4b\xb8\xb6\xaa\x36\x26\xcc\xe1\x9f\x66\x69\x92\x98\x34\xda\xda\x02\xea\x26\xcb\xc2\x45\x00\x5f\x0e\xca\xee\xed\x5a\x14\x90\x69\x05\xe5\xc6\x57\x31\xc0\x6e\xa2\x75\x46\xd0\x0e\x9b\x97\x30\x99\x02\x2e\xc5\x11\xe9\x00\xd0\x70\x4e\x14\xd2\x7a\x47\x9c\x26\x06\x95\x04\x08\x49\x48\xd9\xc0\x49\x82\xa8\x92\x13\xe6\x33\x4c\x0c\xc1\x25\x5c\x05\x0e\x42\x19\x5b\x5d\x10\x5e\x01\xcd\x5a\xba\x55\xb8\x20\x68\x44\x55\xae\x4b\xe0\xa9\x5c\x87\xec\x13\xab\x15\xc1\x26\xa6\xed\xea\x7d\x85\xda\x60\x71\x19\x6c\x00\x18\x58\x30\xeb\x0b\xef\xed\x63\xf7\x1a\x16\xd4\xce\x8b\x32\x44\x23\x33\x3a\xad\x0a\x3a\x2a\x48\xd3\x5b\x0b\x7a\xb3\xf1\x04\xad\x6f\x29\xe9\x79\xcb\xbd\x46\xbd\xc2\x42\xd1\x28\x4d\xb0\x48\xd6\x5a\xba\xcc\xd2\x04\xd1\x59\xc0\x6a\x09\x8b\x60\x12\x0c\xa0\x3a\x01\x87\x3b\xc2\x61\x30\x24\x5e\x92\x00\x30\x66\x0d\xcf\x24\x70\x22\x1a\xd2\x04\xe3\x9d\xd2\x6d\xbd\x1f\xa2\x93\x22\x87\x29\x1c\x8b\x20\x31\x91\x4a\x23\x01\x7d\x7f\x03\xe8\x81\xe1\x42\xa5\x33\xad\xec\x7e\x17\x1c\xbc\x3a\xb2\x6c\x2c\xef\x3b\x7a\x28\x6f\xb0\xbc\xdf\xe8\xa5\x3c\xad\x04\x3a\xdd\x00\x07\x73\xce\x6f\xe9\x4f\xc4\x86\xc2\x50\x1d\x3b\x19\x26\x75\x6e\xd1\xd1\x2f\x01\xc9\x71\xb1\xb3\xcb\x06\x12\x4d\x58\xc7\x8e\x5d\x0d\x08\x6e\xba\x77\x34\xd8\x39\xa1\x3f\xba\x76\x66\x37\x1b\x97\x5f\x72\x54\x33\x48\xf7\x4b\x2b\xf6\xc4\x44\x30\x0a\xfc\xf9\xd0\x07\xcb\x49\x03\xb4\x20\xfe\xb0\x4d\x09\x4a\x28\xbb\x77\xd8\x4a\xbd\xf2\x03\x84\xb3\xd6\xe1\xf0\x99\xde\x9b\xcd\x5c\xa3\xd9\xf8\x68\xf4\x7e\x42\xc2\xed\x10\x23\x95\x8b\xeb\xc7\x5d\xf1\xfc\xe6\x8d\x58\x35\x8e\xf6\xcb\xd2\x18\xb6\xf3\x4a\xac\x8b\xd5\x99\x0b\x26\x5f\x13\x7c\xbd\x69\x7e\x2f\x17\xb8\xba\xf8\x44\x41\x0b\x3c\x20\x2c\x5d\x1e\x7c\x40\xff\x2f\x9b\x99\xdb\xf3\x93\xf1\xc7\xd3\xf3\xf1\x49\xb0\x81\x0f\xfe\xeb\x76\x7c\x9b\xff\xe4\xea\xf6\xfc\xfc\xf4\xfc\x53\xf8\xd1\xf5\xed\xf1\xf1\x78\x7c\x92\xff\xdd\xc7\xd1\xe9\x59\xe1\x77\xfa\xa3\xfc\x8f\x46\x3f\x5c\x5c\xdd\xe4\x3f\xba\xfe\xe9\xf4\xf2\x32\xff\xd1\xcd\xe9\xe7\xf1\xc9\xdd\xc5\xed\x8d\x9b\xeb\xff\x09\x66\x18\xf0\xe8\x10\xdd\xf5\xfd\xaf\x9c\xa2\x7d\x70\xd4\x75\x8d\x3f\x07\x49\xa7\x33\x41\x09\x8b\x93\x75\x56\x61\x51\x1f\xba\x42\x90\x32\x14\xe9\x74\x49\x78\xba\x0b\x66\x40\x9b\xbe\xfc\x41\x9b\xd4\x09\xb2\xad\x59\x4c\x4e\xa1\x42\x71\xf0\x56\x41\x94\x28\xbb\xc1\x1a\x51\x16\x4a\xac\xaf\x95\xc0\x8a\xcc\xd7\x2d\xd1\xf4\xf6\x25\x68\xa5\x6f\xc2\xfa\xbe\xc0\x85\x2b\xd2\x95\xa2\xd3\xb2\xa3\xa9\x23\x48\xb1\xbb\x65\x67\x52\xad\xaa\x91\xbe\xe7\xd5\x82\xce\x71\x3e\xed\x48\xac\x02\x9e\xe9\xf6\x2b\x70\xe9\x1f\xa9\xde\x7a\xc7\x8e\x27\x4e\x9b\xcc\x0a\xb3\x9a\x1c\xda\x8e\x5c\xd6\x19\xb1\x8d\xc8\x18\xe5\xed\x4d\xe5\xac\x88\x2c\x31\x6f\x1b\xcb\xda\x72\x5b\xb1\x38\x2b\xbf\x6b\x39\xaf\x02\x62\xbb\x8a\x45\x28\xb0\x05\x3f\xf9\x2d\xd3\xb8\xe7\x2d\x26\x11\x54\x3f\x43\x2e\x62\xb3\x8f\xcc\xb5\x0c\x8c\x3d\xb5\xa1\xba\x3d\x93\x8b\x7b\xd5\x33\x63\x46\xf6\x5c\xdb\x4e\x1e\x75\x57\x34\x0a\xbc\xc2\x01\xe7\xb2\x29\xf3\x06\x5c\x32\xd0\x6c\xe6\x8b\xb3\x9a\x85\x91\x03\x0f\x24\x46\x87\x21\x97\x7b\x7c\x08\xe8\xb2\x09\xab\xb3\x30\x2b\x78\xd0\xc3\x1d\x70\xe9\x68\xee\x76\x59\xfb\x8a\xd9\xaf\x3f\x82\x6e\xb2\xdb\x81\x2a\x90\xfb\xf9\x10\xd5\xbb\x32\xed\xba\x4c\xb1\x71\x21\xc1\xd9\xf2\xfc\x7d\x75\x10\x2f\x7f\x17\x76\xf3\xb8\xb6\xf2\xb6\xe2\x7c\x76\xa0\xd1\x59\x16\x18\xfc\x6f\x86\xb6\x3e\xd7\xf1\x80\xb5\xbf\xce\x68\xf1\x5c\x4f\x7b\xc4\x9f\xd7\x59\x90\x03\x83\x08\xf0\x05\x78\x42\x82\x1c\x4f\xf6\xd5\x6d\xe3\xfb\xd5\xf0\xb4\x4a\xd8\xc9\x3d\x10\x58\x09\x4e\xb5\x4e\xbf\x4a\xb0\x01\x12\x2d\xb0\x34\x5b\xda\x39\x29\xf1\x94\x26\x54\xad\xa1\xc6\x02\x98\xf7\x85\x19\xe6\x02\x2d\xb1\xb8\x77\x99\x28\x38\x43\x88\x37\x6d\xfa\x1d\x03\x69\x19\x47\xe4\x73\x86\xd2\xb2\x23\xdb\xd6\x37\x90\x6d\x4b\x1b\x46\xcb\x96\xc3\x54\x31\x51\x3c\xe0\xbb\xec\xb6\xb2\xb6\xc5\xcb\xe2\xe3\xb9\xf9\xae\xb8\xa8\xb7\xc8\xa0\x33\x19\x8a\x1d\xc4\x7c\x31\x7f\xb1\xf2\x64\xcd\x12\x8e\x6b\x18\x2b\x5d\xdb\x26\x1d\xb1\xae\xed\x98\xa7\xd3\xba\x0c\x1e\xd3\xab\xe6\xd6\x9b\x0c\x30\x77\x6e\xf7\xa5\xd0\x85\x02\x10\x2b\x02\xc5\x4f\xb7\x9a\xd0\xac\x76\x6a\x75\xe3\x36\x93\xa4\xf5\x98\x4b\x1b\x2d\x4b\x5c\xf7\x99\x42\x37\xeb\x15\xa9\x60\x48\xce\x61\x97\xb7\x34\xe6\xae\x2f\xc7\xc7\xa7\x1f\x4f\x0b\x96\xd4\xe8\xfa\xa7\xf0\xdf\x5f\x2e\xae\x7e\xfa\x78\x76\xf1\x25\xfc\xec\x6c\x74\x7b\x7e\xfc\xe3\xdd\xe5\xd9\xe8\x7c\x83\xbd\x55\x7e\x45\xd9\xdd\x91\x25\x06\x64\x38\x6a\x7d\x37\x58\xe8\x2f\x98\xba\x15\xe7\xeb\xaa\x82\x27\x63\xdb\xaa\x9c\x4f\xe6\xd2\xf4\x9d\x74\x7f\x8c\x99\x12\xeb\x2e\xfc\x29\x28\x26\x12\xee\x21\xeb\xbd\xcc\x73\x77\x10\x09\xbe\x60\xd7\xfa\x39\x08\x36\xe7\x5d\xb7\x21\x1a\x3b\x8f\x90\x36\x4f\x6b\xab\xe9\x25\x7a\xc3\xbd\xd6\x79\x08\x31\x80\x30\x0b\x53\x9e\xb2\xd8\x91\x14\x2f\x29\x3b\x5a\xe2\xaf\xef\xdd\x48\xb3\xa2\xc5\x90\x93\x68\x2a\x43\x25\x5a\xeb\x58\x23\x91\xb2\xe6\xe9\x9a\xb0\x86\xf9\xda\x7c\x33\x98\x92\xdd\xf4\xef\xa0\xe2\x64\xfa\xa8\xf1\x18\x3f\x90\x75\xd5\xfa\x95\xd2\xb2\x8d\x57\xda\xea\xc0\xd0\xc8\x4a\x10\xe0\xe4\xf7\xfe\xe8\xc4\xc4\x19\xfc\xbf\x21\xde\x99\xa3\x6a\xa9\xba\x93\xf2\xb6\xf8\x4e\xe7\xa6\xd2\x0b\xf0\x04\x89\xf5\xf6\x4d\x7a\xd1\x8c\x4f\xc0\x65\x68\xda\xf8\x6e\x8c\x1e\x5d\x16\xf5\xdf\xf8\x14\xcd\x20\x1c\x6e\x99\x18\x05\x89\xc0\xbd\xa1\xd7\xc2\xa5\x17\x01\xac\xb6\xe4\x68\x70\x7b\x20\x21\x12\x9c\x6d\xc0\x6a\x4e\x7e\x49\x2d\x76\xee\x8f\xdf\x77\x4b\xd9\x52\x62\x8d\xa4\x9d\xe6\x30\x1c\x6f\xd1\x28\xd6\x67\x07\xfd\x4a\x19\xad\x62\x4f\xbe\x32\x7c\xde\xcf\x5b\x36\xa1\xf0\x52\xfb\xcf\x8d\x88\x85\x1b\x97\x06\x63\x7e\xff\x64\xf9\x11\x3f\x17\xd2\x22\xec\xeb\x20\x10\x69\x5b\x97\x01\xea\x5e\x5b\x46\x8f\x58\xc4\xc6\x31\x00\x3e\xa2\x21\xfa\x91\x3f\x92\x07\x22\x06\x28\x22\x42\x61\x0b\x57\xd6\x67\x2d\x49\xe0\x40\xd9\x76\x26\x0c\x62\xf3\x06\xfb\xcd\x80\xc5\x52\xd1\xf9\x42\x2b\x8f\xd6\x08\xb5\xcc\xf7\x92\x28\x80\x1a\x92\xaf\x2b\x12\x19\x50\x46\x5d\x24\x7a\x96\xe0\x87\x32\xfe\x7a\x1b\x68\x6d\x40\xee\xef\x2a\x8f\xda\x9c\x95\x46\xa7\x94\xe3\x88\x37\x52\x73\xb5\x56\x0b\xce\x06\x68\xce\x13\xcc\xe6\xc3\xe1\x10\x11\x15\x0d\xdf\x77\xda\xe8\xb6\xc1\xe0\x75\x59\x44\x2d\xe1\x92\x24\x6b\xcf\x2a\xe0\x91\x0f\x7a\x96\x01\x69\x21\xa9\x31\x6f\x2a\x76\xff\x75\x11\xa1\xfb\xbc\x6e\xb2\x6a\xad\xb4\x33\xd4\xa7\xa6\x9d\x62\xc9\xc0\x4d\x2d\x99\xdf\x57\x6b\xda\x1d\xa0\x6b\x8e\xfc\x26\x83\xb0\xd5\x64\x50\x71\xd6\x15\x97\xf5\x33\xaf\x23\x7c\xdc\x2a\xe5\xa0\xb2\x25\x0b\x10\xdf\x0a\xa9\x54\xde\xd1\x15\x3b\xce\x83\xfa\x76\x4a\x6f\x4a\xd2\x65\x99\xb5\x7c\x5f\x5a\x54\xd6\x49\xf3\xd7\x31\xbc\xae\x3d\x45\x98\xe7\xb5\xe4\xc2\xa0\xa9\x6c\x7f\x8d\xdf\xc3\x6c\x26\x90\x96\x82\x4a\x48\xb4\xd8\x06\xf0\xe4\x9b\x31\x4d\x83\x7b\x56\xdb\x30\x86\x69\xd8\xd6\x74\x04\x0c\x97\x2f\xcd\x68\x1e\x91\x46\xd5\x01\x9f\x6e\xbd\x64\xc8\x40\xa2\x5b\x59\x3d\xe7\x17\xe7\xe3\xd0\x94\x39\x3d\xbf\x19\x7f\x1a\x5f\xe5\x62\x50\x67\x17\xa3\x9b\x5c\xbc\xe9\xe6\xaa\x10\xa6\xfa\xe1\xe2\xe2\x6c\x3c\x3a\x0f\x3f\x3a\x19\xdd\x8c\x6f\x4e\x3f\xe7\x1a\x3f\xb9\xbd\x1a\xdd\x9c\x5e\xe4\x7e\xf7\xc3\xe9\xf9\xe8\xea\x2f\xe1\x27\xe3\xab\xab\x8b\xab\xc2\xfb\x6e\x8f\x9b\x23\x59\xb9\x61\x54\xaf\x44\xa6\x2c\x07\x78\xd9\x2a\xa5\xf0\x06\xcb\xfb\x3d\x47\x5f\x01\x6d\xd0\x25\x7a\x5a\x19\x2c\xcd\x09\xa5\x98\xdc\x6d\x17\x98\xad\x0b\x2e\x57\xbe\x47\xeb\x83\xeb\x3b\xac\x14\x59\xae\x76\xa3\x8d\x6a\x7f\x70\xba\xc5\x7c\xc1\xa4\x69\x11\xf3\xcd\xad\xea\xeb\x89\xf9\x56\x84\x73\xcb\x31\xdf\xd3\xf3\xd3\x9b\xd3\xd1\xd9\xe9\xff\x2d\xb4\xf8\x65\x74\x7a\x73\x7a\xfe\xe9\xee\xe3\xc5\xd5\xdd\xd5\xf8\xfa\xe2\xf6\xea\x78\x7c\xdd\x32\xe2\x5b\xf6\xb1\x1c\xa2\xf0\x3d\x1f\xd0\x0d\xf7\x2c\x05\x56\x2b\xb4\x95\x55\xf4\x8c\x43\xa5\x5a\xaa\x00\x86\x4b\xd9\x7c\x00\xe4\x4c\x1f\xd0\x58\x88\xd3\x25\x9e\x93\xcb\x34\x49\x06\xc8\xd3\x97\x1d\x0b\x82\x15\xfc\xec\x92\xc7\xa7\xc1\x73\x13\x86\x0e\x51\xe5\x30\xe0\xfd\x96\x26\xcc\xbc\x7e\x60\xdf\x1f\x04\x38\xbc\x83\xc4\x72\xa2\x78\x42\xc6\x0f\xe8\x07\x1c\xdd\xf3\x99\xa5\x51\x18\x78\x13\x17\xfd\x92\x72\x85\x11\xf9\x1a\x11\x12\xbb\xaa\x09\xc5\x7d\x72\xc6\x77\xa2\xf9\xea\x52\x1e\x2f\x3c\xd3\x9b\x43\xe5\x95\xcf\xd9\xcc\x86\xbb\x2e\x44\x41\x76\x94\x9f\xcd\xa3\x96\x1d\xa8\xb2\x75\xa5\x92\x3d\xf8\xef\xce\xf8\xbc\x1a\x45\xec\x8b\xd3\x53\x19\xf0\x08\x40\x34\x80\xcf\x91\xa4\xec\x7e\xc2\xbe\x68\x83\x96\xa7\xc2\x7c\xa4\xb8\x00\x40\xfa\x2c\x49\xe5\x82\x00\x9d\xdf\x00\x3d\x12\xb4\xc4\x6b\x13\x15\xc8\x97\xfa\x80\x2d\xa3\x37\x27\x3c\x9d\x50\xa6\xa5\xc5\x8a\x3a\x0d\xb2\xb8\xf4\xfb\x30\x30\x63\x2a\xbd\x9d\xfd\x84\xa1\x9a\xcc\x53\xf8\xb8\x20\x80\xfb\x0d\x88\x82\x5d\x8d\x01\x23\xb9\x21\xc7\x8c\xf3\xfb\x74\x65\x2b\x44\x63\x79\xff\x9d\x43\xd1\xc1\x74\x3f\x70\x1a\xa3\x38\x5d\x25\x41\x81\xf6\x47\x2e\x6a\x51\x0f\xc6\xd2\xe9\x80\x7a\x28\xd8\xef\x4d\x03\xab\x30\xa3\x02\xab\xad\x01\xff\xf0\xc4\x08\x90\x80\xf3\x24\x95\x44\x1c\x2a\x41\xe7\x73\xd0\x1b\x9d\x53\xe6\xf5\x43\x44\xdc\xde\x5c\xdf\xed\xee\x7f\x08\x5d\xd5\x89\x29\xae\xe0\xa9\x1a\xf4\x9e\x5a\xad\x92\xb5\x03\x6e\x9a\x09\x74\xc7\x7e\x95\x0a\x43\x0b\x39\x43\xbe\x43\xb5\x21\xda\x95\x20\xfa\x2d\xf1\x9d\xa1\x91\xd9\x9d\xde\xe6\x74\x66\xc8\xb3\x0c\x31\x89\x1f\x44\x46\x56\xe2\x6e\xb8\xec\xdd\x2e\xad\xc2\x64\x34\x33\x53\x5b\xfc\x91\xb9\xaa\xeb\x58\x1a\xd7\x08\xe3\xa0\x9b\xf8\x54\x0b\xa8\xed\x6c\x68\xc5\x5c\xb9\x6e\x9b\xa1\x69\x7d\x9c\x86\xf4\xfb\xe5\x21\x3d\x5e\x50\x03\x52\x35\x5f\xfd\xb5\x28\x22\x77\xcd\xbb\xf0\xf8\x87\x6d\x35\xe2\x66\x9b\x6e\x9e\xf0\xa9\xe1\xe1\x2a\x65\x64\x84\xb7\x4e\x37\x07\xa6\xab\x51\x9b\xbf\xb3\x1c\xb2\x09\x42\xe5\xbc\x21\xd3\x3d\x57\x49\x6d\xaf\x29\x2b\xbb\x4f\x58\xaa\x78\xc0\x7c\xa6\x07\x77\x5a\xa8\xf4\x35\x34\xf8\xe5\xd3\xb8\x92\x28\x25\x3b\x31\x6e\xe6\xeb\xa4\x73\x85\x0f\xa5\x53\xc6\xcd\x4a\x10\xe7\x3d\x5b\x13\xe5\x9d\x66\x89\xc3\x57\xaf\x57\xf9\xe2\x4e\x61\xd4\xc0\xf9\x05\x5d\x3c\x82\x40\x02\x40\x50\x3e\x82\x33\xc2\x94\xb4\x44\xcf\x13\x66\x1b\x77\xf9\x7b\x9e\x02\xc7\x06\x42\xcc\xc4\x0c\xac\x0d\x62\x99\x3f\x25\x4f\x1e\x0c\x5d\x5d\x36\x27\x8a\x03\xbe\x5e\x77\xf0\x58\x8b\x73\xad\xbc\x60\x16\x67\xf4\xff\x0b\x32\x61\x85\x24\x36\x41\xe6\x54\x2a\xb8\x58\xdc\x8e\x0d\x9f\xdf\x5b\x62\x4f\x4e\xdf\x69\x9a\xfa\xda\xc4\x9e\x4d\x82\x6b\x86\xa3\x2e\x00\xfb\xf5\x8a\xc4\xa7\xfe\xb9\xe6\xcd\x90\x73\x9d\xc4\x41\x68\x29\x77\xc8\xcd\x1e\x70\xac\x8a\x90\x1d\x05\x47\x35\x95\xe1\x22\x79\x52\x25\x5f\xf7\x48\x2f\xd1\x1c\xbb\xda\x57\xd2\x17\x3e\x82\x68\x77\xce\xe5\x5d\xa8\x53\xea\x75\xa9\x88\x4b\x65\xe2\x6b\xf0\xc8\x0c\xd3\x24\x15\xb5\x2a\x82\xd9\x96\x7b\x4f\x3b\x3c\x86\x66\x51\xd5\xaa\x79\xbf\x74\x70\x8c\xbc\x4f\xda\xd7\x3f\x4d\xd2\x39\x65\x32\xbf\xeb\xeb\xeb\x00\x94\x6a\xa2\x6c\x58\xf0\xac\x8c\x4a\x7b\x59\x3c\x32\x87\x5d\xc2\xe0\x21\x0e\x51\xcf\xe0\x64\x95\xb6\xa0\xef\x13\x76\x03\x77\xb5\xc9\xaa\xf3\xc7\x0c\x1b\xf6\x5b\x21\x15\x54\xaa\xac\x1c\x6f\x4e\x9e\xe7\x77\xea\x4e\x80\x96\xaa\xfc\xb7\xcd\xc0\xb9\xcf\x78\xd5\x94\x9a\xb4\x73\x8b\x9b\x96\xc1\x7b\x37\x8b\xc7\xb0\xc8\x54\x5f\x31\x7b\x1e\xfc\xf7\x2c\x41\xbc\x2e\x89\xd2\x1e\x03\x6a\x29\x06\x4a\x59\xae\x39\xc5\x34\x7c\xb4\x3b\x0c\x38\x8b\x5e\x59\xa2\x66\xd3\xe0\xd4\x00\x37\x43\xac\xe9\x0e\x59\xb6\x7e\x61\x5c\x5b\x0d\xcb\xb1\x23\x0e\x2e\x83\x2e\x3f\x23\x0c\xee\xe7\xd2\x14\x75\x45\xc1\x3d\x84\xb0\x5f\xb8\x1b\xb2\x92\xbf\xad\x34\x66\x8f\x7e\xfb\x39\x8f\xdd\xce\x4d\x31\xa7\xad\x40\xee\x65\xf6\x3d\x50\x5a\x62\xc2\xb8\x22\x08\x23\x46\x93\x23\x96\x26\xc9\xd1\x39\x54\x5c\x94\x92\xce\x4d\x41\x17\xc3\xe3\x0e\x51\xc2\x8c\x0f\x26\xe7\x2a\x0b\x8e\x00\x5c\x91\xba\x4b\xc6\x8b\xa7\xb4\xc4\xd4\x4b\x90\xac\x27\x4c\x3f\x61\x54\x2c\x43\xa3\x41\xb3\xb2\xe9\xf0\x36\xcf\x19\x6f\xde\xa5\x6d\x63\xb6\x0e\x1b\xaf\xd8\x60\x4d\xa9\x40\x3b\x85\x34\x7b\x8e\xc8\x57\xc3\x11\xc9\x85\x27\x50\x6f\xcf\x16\x59\x7f\xa8\xb6\xa6\x6b\xf4\x8a\x98\x0f\x09\xb4\xd8\x8f\x2f\x19\x0e\x78\xca\xc4\xb0\x9d\xb3\xc0\xdc\x4c\xed\xc3\x2b\xfa\x4b\x4a\x52\xca\xe6\x77\xd3\x34\x9e\x93\x9d\x7c\x74\x5c\xe1\x04\x3d\x62\xaa\xc0\x45\x17\xaa\xed\xf6\x5c\xc4\x24\xc1\x6b\x93\x49\xa1\xdf\x4a\x0a\x7c\x25\x9b\x2e\xd1\xcf\x41\x09\x09\xeb\xbd\x51\x54\x04\x7c\x0d\x13\x76\xc3\xbd\x51\x69\x4f\xec\x2c\xd5\xda\x68\x83\xf4\x73\xad\x9e\x98\x99\xdf\x09\xa6\xb9\x4f\xaf\x50\xa3\xa7\xcc\x45\xdb\x9c\x87\x39\x2c\x8c\x9c\xeb\x84\x45\x92\x99\x33\x0f\xc5\xc4\x54\xde\x30\x32\x2c\x19\x0e\xac\x66\x0b\xe3\xa4\xd8\x63\xf7\x61\x2e\xf5\x84\xdb\xc4\xf2\x94\x01\xf6\x8c\x7c\x35\xe9\xfb\xc9\x3a\x6c\x15\x12\x3d\xa1\xc5\x8e\x11\x79\xb0\xb9\x7d\x2e\xee\xc6\x85\xae\x5f\xcd\x5d\x9d\x60\x26\xd7\x61\x95\x60\x76\x67\x94\x9b\x17\x70\x83\x05\xf9\x16\x75\x54\x50\x41\xf9\xf0\xfd\xf4\xd3\x4b\xf8\xab\x5c\x16\x54\x58\x4f\x78\x50\xa4\x8b\x75\x1a\x09\xa0\x05\xb3\x0a\x9e\x96\x9b\x9f\x7c\xad\x02\xb4\x6c\x76\xe5\xe1\x82\xe1\xee\x09\xf1\x37\xf8\xf2\x4a\x05\xff\x5f\x99\x3f\xaf\xcd\xca\x17\x36\x78\x71\xd9\xbb\xbb\x92\x4a\x17\xc5\x56\xee\xa4\x0d\xdd\x7a\x5a\x97\x52\xad\xe9\x54\x76\x2d\x7d\xc9\xd7\xa5\x8d\xa0\xd0\x7b\x94\xa4\x31\x41\x92\x6b\x7d\xce\x59\x76\xd5\xf9\x34\x05\x1c\xc7\x93\xf2\x87\xe4\xd3\xa5\x5b\x03\xa2\x0c\x83\x10\x3a\xcd\xaa\xbe\x0c\xd0\xe4\xc0\xec\x2c\x39\x39\x30\x9c\x7b\x2e\x2d\xcb\xd1\x13\xe5\x0b\x4a\x14\x1d\xaf\x26\x26\x12\xdc\x20\x2c\x70\x0f\x14\xe7\xa5\xc6\x8b\xf1\x92\xbc\x40\x01\x5a\xcc\x84\x4d\xa7\xa6\x01\xab\x94\x1a\x5d\x7b\xed\x48\x83\x20\x75\x58\xa4\x91\xca\x06\xec\x39\x56\x7e\x70\x0f\xea\x29\x5a\xa5\x50\xb4\x25\xce\x0a\x08\x71\x31\x61\xae\xb5\x8c\xea\x70\x94\x24\xa5\xa6\xca\xf4\x42\xc1\x5e\x05\xb2\x31\x87\xe3\x86\xfc\x00\xfd\x23\x40\xba\x95\xe4\x00\xd4\xad\x9b\x92\x2c\xa1\x74\x88\x32\x82\x2b\x53\xa5\x3f\xcf\xa4\x13\x12\xe9\x24\x89\x63\x91\x31\xdc\x2c\x01\x75\x88\x4c\xa1\x4e\xc3\x2c\xd5\xe2\xc8\xbf\x5d\xf1\x09\x03\x52\xa5\x19\xd5\x87\xc4\xcd\xcb\x84\x7d\xe6\xd2\x95\x74\x96\xa4\x54\xa7\xcf\x4e\xdb\x77\x1e\xce\x6e\x3f\x38\xd1\x42\x44\x3f\xa5\x4d\xdb\x42\x32\x33\xc4\xed\x00\x5d\x30\x40\x6b\x9e\x8a\x9c\xaa\x38\x61\x7f\xd3\xd3\xe3\x98\x82\xec\xb2\xf2\x99\x39\xc4\x2e\xf9\x1b\xbd\xfb\xab\x69\xf4\xdd\xbf\xbe\xff\xeb\x7b\xc3\xc3\x96\xca\x54\x4b\xd8\x41\xfe\x0a\x71\x1d\xd5\x4b\x0a\xd8\x16\x5f\x12\xca\x95\x7e\xc8\x5e\xd1\xc8\x29\x60\x9d\xc5\xfb\x66\xd0\xce\x3c\x4e\x23\x14\x61\x15\x2d\x0e\xb1\xdd\x7b\x21\x7b\x12\x95\x19\x3f\xfb\xe3\x82\x30\xa8\xf4\x9b\xe7\x74\x37\x09\x15\xc8\x17\x49\x94\xf9\x79\xd0\xfb\xc5\x14\xaa\xb1\x5a\x61\x21\x0f\xd9\xbd\x09\x36\x67\x96\x09\xfb\x25\x93\x0c\xee\xe7\x2e\x3f\x20\x28\x3d\x65\x5c\x63\xda\x64\x8d\xd1\xc4\xe0\x69\x27\x07\x6e\xf9\x27\x6c\x35\x1d\x26\xeb\x99\x1a\x02\xba\x77\xa8\xa7\x65\x38\x6e\xac\x67\x63\x2e\xa1\xbb\xb8\xac\x95\x6f\x98\xee\x5a\xbd\xbe\x5a\xdf\xf1\xb3\xe3\xdf\xd4\x5e\x69\x31\xa6\xad\x9f\x9f\xeb\xbc\xef\x9b\x78\x5b\x99\x98\x78\xc6\xc0\xb1\xe3\x60\x16\x87\x8a\x55\x76\x3e\x81\xaa\x49\x5f\x74\xbe\x68\x11\x66\x38\x59\x43\x96\xce\x60\xc2\x4c\xf5\x36\x12\x23\x1c\xad\xa3\x84\x46\x96\xe9\x26\xaf\x0b\x91\x07\xc2\x54\x0e\x4c\x38\xd6\x9f\x3c\x97\x3a\x54\x07\x63\xac\x9e\xfd\xdb\x1a\x55\xc8\xb3\x92\xe5\xbd\x05\xc5\x6d\x62\x73\xf3\x45\x47\x6e\x03\xff\x7a\x10\xcd\xb1\xf3\xf3\x70\x41\xe7\x94\x61\xc5\x05\x7a\x07\x6e\xcf\x24\x21\xe2\xbd\x2f\xb0\x03\xb3\x58\xdd\x8d\x45\xa7\xc2\x05\x15\x34\x37\xd5\x97\x6d\x14\xa5\x42\x90\xf8\xae\x8c\x1e\xeb\x9a\x07\xda\x8c\xad\xd1\xaa\x35\x5d\x12\xa9\xf0\x72\x85\x44\x56\x2c\xc7\x67\x2c\xd9\x99\x49\xcc\x24\x20\xd7\xb1\x01\xa2\x00\x10\xf3\x61\xea\x09\xb3\x01\x6a\xb3\x6e\x5c\x54\x10\x1c\x14\x47\x69\xaa\x7e\x6d\x89\xcd\xb3\x84\x6f\x1d\x4b\x18\x15\x1d\x65\x57\x67\x0e\x43\x90\x5d\x04\x39\xc9\x0a\x03\x85\x12\x74\x5a\x11\xf5\x35\x3b\x3d\x0c\x6a\xc2\x32\x08\xd2\x71\xc2\xd3\x18\x59\x37\xa1\x75\xba\x89\x21\xa2\x64\x38\x40\xf2\x9f\x3f\x1c\x1d\x0d\x87\x7b\xaa\x7b\x90\x2f\x9c\x55\xbd\xc3\x4d\x69\xab\x2a\x88\xdf\x86\xa3\x95\xe3\x39\xbb\xeb\x66\x79\xb8\x14\x0e\xd8\x2d\xa1\x65\x9e\x07\xb0\x14\x5f\xb9\xc2\x82\x30\x75\x07\xa0\xec\x6e\x2f\x84\x17\x5d\xc2\xe3\x39\x3c\x71\x2b\xb3\x27\xe3\x49\xb4\x09\x99\x58\xde\xa3\x77\x14\x3c\xe8\xef\xad\x31\xae\x75\xe5\x26\xfa\xb2\xb2\x04\x6e\xea\xcd\x33\x89\xe2\x3a\xc0\x7c\x9b\xee\xe7\x9e\xdd\xf9\x02\xd9\x05\x67\xdf\xe8\x07\x3b\xf1\x5c\xbc\x10\x3b\x3f\x65\x28\xe2\xcb\xa9\x16\xe2\x7a\xab\x7b\xc7\x04\xc0\xe5\x47\x0e\x73\xe9\x01\x63\x0e\x63\x66\xd8\x2c\x0a\x88\x75\xef\xcd\x0e\x11\x61\x66\x8b\x16\xee\xa6\xba\x5a\x59\x66\x3b\x3f\x41\x4a\x40\xf5\x51\x1f\x15\x47\x90\xb1\x43\xdf\xd3\xe8\x9e\xe8\x7b\x6e\x96\xb1\xd8\x84\xd2\xcd\xdf\x6f\x1e\x22\x37\x61\x30\x43\x06\x8f\x41\xec\xb8\xef\xa8\xe1\x00\x25\x5a\xa7\x09\x30\x57\x1c\x51\xf5\x9d\xac\x9e\x9c\xa7\xce\x5f\xa8\x9e\x0b\x68\xdf\xa3\x6c\x6d\x1e\xad\x57\x2d\x8c\x32\x06\x12\xf9\x4f\x5e\x1e\x4a\x12\x71\xe6\x91\xb9\x7b\xb9\xe8\x2b\x72\x1b\xaa\xbb\x0b\xdf\x95\x12\x70\x37\x69\x1d\x3b\x2a\x3f\x99\xe2\xb3\x12\x3c\xb2\x09\xc5\x0a\x49\x88\x5b\x02\x3c\x47\xbf\x7b\x80\x96\x98\x32\x7b\x0c\xa0\x98\x20\x8a\xc9\x34\x9d\xcf\x6b\xef\xe4\x84\xcf\x9f\xd4\x41\xe0\x32\x01\x6a\x1d\x04\x7e\x84\x49\x13\xba\x7d\xc3\x0e\xfd\x86\x94\xaf\x46\x34\xd8\x3e\xd4\xa7\x53\xf7\x26\x63\x04\xce\x28\xd4\x28\x7f\x06\x8d\x69\x4f\xea\xdf\x69\x1b\xf5\xcf\x79\x11\x20\x82\x6b\x2b\x21\x3b\x3b\xef\x37\xa4\x17\x1a\x44\xdc\x9d\x7e\xf2\x49\x61\x71\x1e\xc8\x0b\x87\xd5\x00\xde\xb4\x6c\x8a\x25\x24\xcc\xef\x1f\x27\x07\xb2\x7d\x13\xfa\x7e\x67\xc2\x88\x6b\xbe\x24\x08\x5e\x25\x4d\x6e\x16\xb2\x21\xe8\x01\x78\x1d\xf5\x00\x6d\xad\xfe\xc4\x0a\x7f\xeb\x56\x8b\x16\x98\xcd\x83\x4a\x09\xe8\x1d\x23\x8f\x48\xcb\xda\x41\xe8\x86\x09\x96\x67\x80\x88\x8a\xde\x6b\xdd\x26\x17\xb5\x11\x24\xe2\x22\x86\xe4\x88\x39\x16\x31\x44\xf3\xec\x86\x4f\x70\x74\x0f\x0c\x54\x70\x1d\x99\x37\xba\x00\xa2\xcd\x1f\x30\xee\xcb\xac\x35\xca\x22\x01\x10\x59\x47\x70\xe1\xfb\x67\x1e\x97\x08\x47\x82\x4b\xe3\x89\x72\xc4\x43\x06\x9e\x12\x56\x60\x87\x37\x76\x89\x19\x5e\xda\x0d\xe1\x90\x14\x81\x13\x0c\xa4\x64\x2e\xd5\xff\x23\x17\x36\x17\x00\x66\xfc\xd2\x32\x0a\xfc\x48\x1f\xc8\x00\x5d\xaf\xb0\xb8\x1f\xa0\x93\x35\xc3\x4b\x1a\xfd\x27\x9f\x56\xf9\x53\x4a\xd0\x84\x9d\x55\xe2\xfd\xb3\xf7\x56\x1f\xf4\x2f\x25\xe0\x05\xaa\x4b\x82\x7f\x9b\xde\x94\x1a\xd4\xc8\xb7\x7e\xa9\x6f\x88\xc9\xf5\x8e\x91\xbd\x5e\x80\x95\x86\xb2\x73\x73\xe0\x78\x49\x59\xce\x56\x7b\x55\xce\xd6\xe2\xa2\x56\xa1\xb4\x72\xc2\xb8\x95\x75\xbb\x0f\xcd\xf1\x12\x6b\x2b\x47\x1b\x94\x4b\xae\x88\xb9\xf7\xa5\xe2\x82\xd8\x8c\x62\xa3\x4e\x42\x99\x21\x2a\xcd\x37\x75\x14\x9c\x51\xc2\x65\x2a\x5a\x8a\x8d\xf2\x82\x1d\xdb\xc7\x1b\xb5\x13\xbe\x5c\x41\xf4\x45\x10\x99\x26\x4a\x56\xd8\x6b\x25\xb7\xf5\x5e\x02\xf9\xe5\xee\x7e\x26\x0a\x9f\x94\xfc\x5a\x7e\x6f\xe7\xf0\x33\x90\x08\x35\x6e\xd8\xd3\x75\x57\xec\x38\x8c\x5f\xe8\xb3\xed\x8a\x38\xd9\x42\x15\x94\xcd\x93\x3a\x6e\xf7\x09\xb3\x75\x2e\x02\xd9\x87\xb3\x7c\x1e\xa7\x90\xb9\x94\xce\xc7\x1c\xc7\xbf\x2f\x92\x61\x81\x30\xd8\x1a\xec\x5e\x2f\x82\xbb\x7c\x00\x04\x55\x06\x18\xc4\x80\x9f\x6c\xc2\x64\x3a\x3d\xcc\xe0\x2a\x5c\x80\x74\x05\x82\x89\x15\x16\x90\x2f\xbf\xa0\x49\x7c\x58\x06\x23\x5a\x2d\x07\xca\x63\x78\x32\xb6\x29\x01\xbe\x25\x58\x71\x53\x8a\xce\x44\x4b\xfd\xd8\x7d\x3b\xd3\x54\x21\xe2\xcb\x0d\x50\x69\x9d\x47\x05\x4d\x22\x27\x2f\x72\xbe\x81\x97\xf6\x08\x6e\x96\x17\x75\xe9\x7a\xdf\xbe\x9c\xc8\xcd\x59\x1b\x39\x71\x93\xf7\xc2\xb9\x53\x83\x99\x97\x1c\x75\x53\x25\xef\x8c\x0b\xed\x09\x91\x83\x5f\x7c\x4a\xba\x4b\xb2\x92\x2b\xfc\xc8\x2c\x48\xa4\x13\xbd\x6c\x3b\xf9\x50\xcd\x03\xa2\xe5\x43\xe1\x9b\x50\x52\xe8\xeb\x08\x82\xfc\xd4\x27\x3f\x0e\x82\x2c\x6f\x28\x3d\x94\x65\xb4\x64\xe6\xcf\x84\x65\xe8\xa5\xac\x56\x6a\x54\x14\xdc\x16\x14\x14\x43\xa0\x95\x0c\x1c\xa2\x61\x60\x32\x00\xad\x91\x72\x38\xc5\x40\x85\xac\x94\xa0\xd3\x54\x95\x28\x69\x72\xa7\xb9\x32\xc8\xb1\x0f\xeb\xe0\xf4\xe9\x4b\x7b\x54\x5f\x1b\x59\x69\x94\x0c\xaa\x54\x1c\x7a\x40\xd1\xf5\xfc\xb4\x1c\xdd\x32\x8d\x02\xde\xac\xf6\x3b\xbc\x94\xcd\x68\x39\xa3\xc0\xa2\x8e\x03\xc6\xf3\x1c\x90\x02\xa6\x30\x63\x84\xf7\x20\x93\x20\xe9\x43\x8b\x28\x3c\x27\x68\x49\x62\x9a\x16\x13\xd9\x36\x47\xcf\x5e\x95\xd9\xd9\x66\x67\x69\x03\xdc\x1b\xa2\xe7\x60\x2c\x3c\xea\x5b\xdb\x40\xd0\xc0\xe9\x51\x4d\x2a\x11\xc0\x40\xb1\xfa\x4e\xfa\x68\x5c\x7e\xc6\x9c\x8b\xe9\x8c\x4a\xf5\x73\x81\xcd\x79\x8b\x7c\xa9\x24\x7d\x3a\xec\x9f\xeb\xaa\xe9\x66\xf0\x44\x23\xc6\xed\x2a\x57\x0a\x17\x36\x99\x71\x57\x00\x46\xc4\x65\x92\xe9\x7e\x77\x11\xe0\x7f\xf5\xf3\xf5\x57\x5b\xac\x57\xe0\xd5\x8a\x08\x64\x0b\xf6\x16\x4b\xf0\x9a\xb4\x2c\x78\xcb\x84\x19\x85\xe9\x3f\xaf\x2f\xce\x33\xc9\x9d\xd9\x51\x85\xa6\xe1\x67\x30\x75\xc3\xea\x95\x3b\x4f\x93\xa4\x76\xe5\x5a\xb0\xa5\xdd\x9e\x9d\xdd\xfd\x3c\x3a\xbb\x1d\x37\xb3\x91\x65\x3f\xab\x9d\x13\xdf\x13\x3b\x27\xe6\x1a\x53\x70\x75\xa5\x4b\x62\x1d\x58\xa0\x8c\xd8\x51\x1b\x80\x43\x9a\x24\xf9\xcc\x9a\x09\xfb\xab\x6d\x07\x00\x70\x29\x33\x6a\xe6\x84\xa1\xc6\x89\xcb\xbf\x1f\x7e\xf6\x57\xdd\xf8\x5f\xcd\xb3\x87\x28\x1b\xc4\x07\x74\xee\xdf\x5a\x33\xaf\xd6\xe9\xba\xc3\x71\x30\x09\x3e\xcf\x95\x3b\xb8\xdd\xf1\xb8\x65\x8e\x28\xd0\xa6\xfc\xed\xe5\x74\x98\xb9\xfb\x6b\xde\x84\xf1\xf9\xcd\xb1\x91\xf3\xd0\xee\xc0\x64\x7c\x99\x62\xee\x3e\x29\x6a\xc2\x0c\x9e\x00\x4a\xf8\xf2\xfa\x3e\xa1\x53\x66\x90\x8d\x09\x66\xf3\x14\xcf\x89\x1c\x20\xf7\xf2\x09\xf3\x05\x63\x2d\x41\x89\x2f\x44\x82\x81\x76\x3d\xbf\x85\x8c\xab\x93\x7c\xc5\xcb\x15\x84\x60\xd8\x84\xd9\x31\xb1\x79\xd6\xbc\xf1\x82\xfe\xe7\xb5\x1f\x8e\xde\x69\xbe\x21\x9b\xb4\xc6\x26\xcc\x2c\xae\xc9\x58\x74\xba\x1d\x38\x80\xa0\x42\x74\x6e\xeb\x62\x41\x5c\x9e\x2c\xc8\xf4\x39\x68\x99\x86\xa3\xda\x85\x18\xb5\xa4\x0f\x48\x56\x8c\xc3\xd9\x74\x69\xb3\x3c\x71\x8b\xe1\xce\x84\xed\x5b\xf5\xae\xdf\xf9\x0e\xd0\x07\xae\xba\x2e\x40\xf3\xb6\xcd\xc4\xd8\x06\x69\x9e\x6d\x28\x56\x3c\xc2\xa8\x08\x45\x87\xe0\xf5\x1e\x6a\x20\xb4\xee\x92\xf9\x7d\x63\xa7\x3a\x94\x4e\x68\xfd\x5a\x9b\x6e\xdd\xf4\x5a\x6d\xe1\x34\xbf\x74\x0f\x26\x52\xae\x53\xf6\x81\x4d\x93\x91\x46\x35\x55\x2a\x76\x8e\x89\x15\xa7\xc8\x49\x9f\xa6\x0e\x25\x54\x6e\xd5\x9d\x4c\x7f\x6a\xdd\x23\xaf\x21\xd8\xcb\xae\x93\x84\xb5\xf7\x5c\x4e\xc0\xd6\x88\x49\x8b\xcd\xb2\x6e\x19\x42\x8d\x78\x61\x40\x67\x88\x2d\xc0\x63\xe0\x37\xd1\x20\x5b\xb9\x81\xe1\x57\x4f\x85\xd4\xe2\xd2\xca\x3b\x2b\xb5\xb5\x99\x33\x61\x2e\x7d\xc0\x89\xe3\x91\x2b\xf9\x24\xfc\xa7\x26\xce\xb8\x32\xe0\x5b\xd0\x58\x55\x56\x2b\x0c\xab\x09\x83\xdc\x74\x06\x26\xe4\x54\x42\xf6\x94\xcd\xc0\xb6\x5f\x04\x74\x56\x98\x79\x8e\xf7\x0d\x32\xaf\xa0\x06\xe4\xee\xf9\xdf\xe9\xff\xff\xeb\xef\xfe\xff\x00\x00\x00\xff\xff\xea\x57\x4c\x49\x59\x05\x03\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xf9\x73\x23\xb9\x95\x27\xfe\xbb\xff\x0a\xac\x66\x23\xba\xca\xa6\xa8\xb6\xe7\x08\x6f\x4d\x4c\x7c\x83\x2d\xb1\xaa\x35\xad\x92\x34\x3a\xba\xc6\xbb\x9c\x90\xc1\x4c\x90\x84\x95\x04\xd8\x00\x52\x2a\xda\xd1\xff\xfb\x37\xf0\x70\x24\xf2\x64\x26\x49\x5d\xd5\x39\x1b\xeb\x56\x91\x4c\x24\xce\x87\x77\x7c\xde\xe7\xfd\xe3\x77\x08\x1d\xc8\x47\x3c\x9f\x13\x71\xf0\x01\x1d\xfc\x69\xf8\xfd\xc1\x40\x7f\x46\xd9\x8c\x1f\x7c\x40\xfa\x7b\x84\x0e\x14\x55\x09\xd1\xdf\xcf\x92\xb5\x22\x34\x4e\x8e\x24\x11\x0f\x34\x22\x47\x38\x5e\x52\x36\x5c\x09\xae\x38\x3c\x88\xd0\xc1\x03\x11\x92\x72\xa6\x7f\x6e\xff\x44\x8c\x2b\x24\x89\x3a\xf8\x1d\x42\xbf\x42\xf3\x32\x5a\x90\x25\x91\x07\x1f\xd0\xff\x33\x0f\x2d\x94\x5a\xb9\x06\xf4\xdf\x52\xff\xf6\x7f\xe0\xb7\x11\x67\x32\xcd\xfd\x18\xaf\x56\x09\x8d\xb0\xa2\x9c\x1d\xfd\x4d\x72\x96\xfd\x76\x25\x78\x9c\x46\x2d\x7f\x8b\xd5\x42\x66\x63\x3c\xc2\x2b\x7a\xf4\xf0\xc7\x23\x1c\x29\xfa\x40\xee\x12\x9c\xb2\x68\x71\xb7\x4a\x30\x93\x47\xff\xa0\xb1\x1e\xe3\xdf\x48\xa4\x7e\x85\x7f\xc4\x7c\x89\x29\x33\x7f\x33\xbc\x24\xbf\xfa\x76\x10\x3a\x98\x13\x15\xfc\x13\xa1\x83\x98\xc8\x48\xd0\x95\xb2\xb3\x72\x45\x94\xa0\xe4\x81\x20\xb5\x20\xc8\xbc\x0e\x99\xd7\x21\xfd\x3a\xe4\x66\x4d\xae\x48\x44\x67\x94\xc4\x68\xba\x46\x94\xad\x52\x85\x04\xf9\x25\x25\x52\xa1\x19\x4d\x14\x11\x72\x68\xa7\x0c\xde\xc2\x57\x44\xc0\x38\x4f\x63\xfd\x96\x4f\x44\x8d\xa0\xed\x33\x68\xfa\x32\xc1\x2c\xfc\xb5\x20\x72\xc5\x99\x24\x32\xd7\x55\x84\x0e\xfe\xf4\xfd\xf7\x85\x8f\xca\x23\x18\x21\x99\x46\x11\x91\x72\x96\x26\xc8\xb5\x14\x76\x06\x1e\x82\x45\xc6\xa5\xc6\x10\x3a\xf8\xdf\x82\xcc\x74\x3b\xff\x74\x14\x93\x19\x65\x54\xb7\x2b\xcd\x5e\x0a\x7a\x9b\x7b\xea\xd7\xdf\x55\xfd\xfd\x6b\x30\xa2\x15\x16\x78\x49\xf4\xb4\xf8\xd5\x37\xff\x57\x18\x8b\x5e\x2f\xfd\xf2\x6c\x4d\x8b\x1d\x2f\x8c\xf6\x1c\x2f\x09\xe2\x33\x58\x2e\xfb\x04\xfc\x2d\x88\xe4\xa9\x88\x08\x9a\x92\x84\xb3\xb9\x44\x8a\x97\xe6\x80\x42\x0b\x7a\xab\x15\xbf\xd1\x4b\x49\x05\xd1\x6b\xa5\x44\x4a\x0a\xdf\xaa\xf5\x0a\x3a\x29\x95\xa0\x6c\x1e\x4e\xc5\xaf\x83\x56\x43\x33\x3b\xb4\xc3\xc8\xcc\x03\xb5\x03\x9b\xb0\x91\xfb\x49\x84\x19\x9a\x12\xa4\xcf\x25\x8d\x89\x20\x31\xc2\x12\x61\x24\xd3\xa9\x24\x0a\x3d\x52\xb5\xa0\x4c\xff\xdb\x6c\xdf\xc8\xcd\xd9\xeb\x99\x1b\xf8\xb3\x79\x66\x6e\x25\x11\xba\xe3\x0f\x34\x26\x31\x7a\xc0\x49\x4a\xd0\x8c\x8b\xdc\xf4\x0c\x27\xec\x66\xa1\xe7\x61\x39\xa5\x0c\x4e\x9e\x9e\x4b\xb7\x43\xfe\xe0\xa6\xeb\x0f\x48\xbf\x0f\xa5\x8c\xfe\x92\x92\x64\x8d\x68\x4c\x98\xd2\xe7\x5a\x16\x5b\xfb\x03\x87\xf7\xe3\x04\x1d\x22\x3d\xcf\x44\x28\x98\x6f\xce\x14\xf9\xaa\x24\x3a\x44\x09\xbd\x27\xe8\xbb\x33\x2a\x15\x1a\x5d\x9e\x7e\x37\x40\xdf\x9d\x65\x82\x43\x7e\xf7\x0c\x33\xec\xff\xfe\x9f\xe0\xe8\x29\x3c\x2f\x1e\xba\x83\x91\x3e\xcd\xd7\xe6\x9a\xc8\x5a\xf8\x9f\xdf\x85\xed\xd8\xf5\x6a\x96\xbd\x99\xe0\xb5\x52\xb7\x8b\xac\xfd\x48\x54\xb4\xd8\x20\x68\xe5\x8e\x92\x56\x2f\x47\x51\xd4\xca\xb7\x25\x6b\xf5\x10\x9e\x5a\xde\xee\x22\x6c\xb1\x82\x53\x80\x29\x33\x87\xc6\x9f\xa1\xfc\xca\xa0\x97\x13\x2b\xbb\xc8\xdb\x60\x34\x81\xc8\x75\x92\x34\x98\x89\x57\x32\xd6\x84\x2e\xe9\xa6\x75\x3c\x65\xb1\x56\xbb\xac\x90\x63\xe9\x72\x4a\x84\x1e\xba\x13\x77\x30\xc2\xa9\x16\x7f\x2a\x15\x8c\xc4\x35\x43\xfb\x25\x25\x62\xdd\x30\xb6\x19\x4e\x64\xdd\xe0\x28\x53\x44\xeb\xb5\x85\xaf\x67\x5c\x2c\xb1\xb2\x3f\xf8\xb7\x7f\xe9\x3a\x78\xc5\xef\xc9\xa6\x75\x3e\x35\xab\x16\x61\x09\xcb\xbd\x4c\x13\x45\x57\x09\x41\x2b\x3c\x27\xd2\xce\x42\x9a\x28\x39\x80\x9f\x69\x5d\x9a\x88\x43\x7f\xdb\xc0\x1b\xdc\x2d\x9b\x4a\xf8\x04\xcd\xbc\x20\x63\xe4\xab\x82\x96\x26\x0c\xee\x59\x98\xa2\xf0\xf6\x78\x82\xa9\xdc\x6e\x9f\x48\x2e\xd4\xdd\x74\x3d\xbc\x27\xa5\xf7\xd6\xee\x16\xcc\x10\x56\x4a\xd0\x69\xaa\x88\x1e\xb7\x6e\xc3\xdd\x93\x20\xfa\xcc\x65\x2c\xf5\xe5\x7b\x71\x72\xf1\xee\x1e\x2b\xc1\xe7\x98\xbd\xff\x80\x46\x71\x8c\x4c\x47\xf5\x6f\x68\x6c\xae\xe4\x05\x11\x64\x88\x6e\x16\x54\x22\xb9\xe0\x69\x12\x23\x46\x1e\x88\xd0\x73\x4b\x96\x2b\xb5\x7e\x75\xb3\x15\x53\x41\x22\x98\x98\x2e\x27\xcc\x3f\xa5\x27\x4d\x1b\x3d\x6b\x33\x75\xf7\x64\x0d\x8a\x4b\x79\xfa\x9e\x61\xbf\x14\xbe\x25\x2c\x5d\x16\xee\x0a\xf8\xfc\x64\x7c\x7d\x3c\x3e\x3f\x39\x3d\xff\x54\x78\x42\xab\x11\xfe\xab\xdc\x37\xff\x53\x9a\x9b\x19\x4e\x13\x38\xd5\x41\x6b\xcf\xa6\xb8\x44\x0b\x9a\xc4\x82\xb0\x23\x85\xe5\xfd\x1d\xf9\x4a\xa2\xd4\xdc\xb3\xff\xc8\x7f\x70\xa7\xb5\x4f\x1e\x93\xfc\x27\xb9\x7f\x64\xea\x4e\xe7\x47\xbd\x55\xda\xf9\x49\xb0\x61\xdb\x3d\x07\x9f\xd0\xb8\xf2\xd7\xf0\xc9\x86\x31\xb8\xdf\x34\x74\xd6\xfd\xa4\xb6\x57\xee\x07\x56\x81\xab\xfc\x8d\x20\x4a\xac\xef\xb0\x52\xfa\x94\x6f\xa1\x33\xc2\x92\x22\x3d\x5a\x94\xad\xa7\x55\x1f\x8d\xa2\x08\xb2\xdb\x6b\x8e\xba\x07\xd9\x2f\x37\xe9\x8b\xe7\x3c\x26\x63\xdf\xec\x47\x2e\x6e\xb0\xbc\x7f\x0b\x3a\x63\xae\xe3\xcf\xa1\x36\x6e\x7b\x80\xbe\x39\xa3\x7e\x4b\x71\xd0\xbb\x00\x76\x9f\xc9\xb6\x0e\x03\x2e\x90\x5c\x4b\x45\x96\x1b\x5d\x07\x6f\x67\x22\xac\xbc\x7f\xad\x1d\x2e\x5c\x39\xbf\x81\x53\x9f\xbf\x40\xfb\xe3\xdd\x61\xca\xf6\xe5\xf8\x7b\xed\xe3\x74\x21\x98\xe6\xa1\x5e\xbb\xe5\x73\x01\x07\xbb\x4f\x5e\xfd\x30\x73\xaa\xdd\xbe\x3b\xf9\x44\x5e\x83\xda\xb5\x72\xb3\x7d\x07\x1d\xd8\x60\xf2\xe5\x5d\xc7\xfe\xfc\xe9\x47\x43\xe7\x8a\xf1\x98\x29\x6d\xf3\x5a\xdf\x12\x11\x28\xe2\xc2\xa8\x82\x71\x83\x78\x7b\x3e\xa3\xef\xf6\xfc\xfa\x72\x7c\x7c\xfa\xf1\x74\x7c\x52\xb6\xfa\x6e\x46\xd7\x3f\x95\x3f\xfd\x72\x71\xf5\xd3\xc7\xb3\x8b\x2f\xe5\x6f\xce\x46\xb7\xe7\xc7\x3f\xde\x5d\x9e\x8d\xce\x5b\xdb\x89\x61\x07\x3a\xae\x66\xef\x00\xdb\xa7\x03\x6c\xf0\xed\x7a\xc0\x6c\xf4\xa0\xbd\xf7\x0b\x25\x54\x2a\x3d\x41\xf6\x49\xb4\xc2\x52\x9a\xfb\xd7\xf4\x60\x38\x61\x9f\xb9\x20\x88\xb2\x19\x47\x1c\x82\x43\x52\x89\x34\x52\x94\xcd\xfd\x43\x1f\xd0\x24\xfd\xfe\xfb\x7f\x8e\xce\x28\xbb\x87\xbf\xc8\x6b\x9c\x9c\xde\x3d\xb8\xcd\x6c\xf5\xee\xc1\xf0\xbb\xb7\xe1\x1e\x8c\xb1\xc2\x47\xa1\x57\xf0\x69\xf0\x24\x26\x72\x89\x59\x8c\x78\xaa\xf4\x9f\xfa\xbd\x68\x26\xf8\x52\x9f\x1b\xf2\x95\x4a\x90\x12\x8f\x5c\xdc\xcf\x12\xfe\xd8\xce\x5b\xf5\x89\x28\xef\xef\x39\xc1\x0a\xbf\x05\x27\xd5\x17\x3b\x42\xdf\xf1\x4f\x44\xe9\xbe\x5f\xd9\xb7\xf4\xd0\x92\x1e\x5a\xf2\xb2\xd0\x92\x57\xe5\x29\x7a\x7a\xd9\x97\x77\x2b\x19\x01\x58\x13\xf5\xa8\x0d\x6a\xd4\xc4\x2c\x82\x90\xc4\x53\x0a\xcd\x7c\x20\x60\x83\xc0\xcc\x39\xc9\xdf\x8a\xd0\xcc\x75\xfa\xf9\x05\xe6\x6f\xc2\x87\xdf\xbb\xe8\xb7\x9c\xa8\x37\x29\x57\x5b\x5e\x19\xcf\xe6\x60\x7f\x7a\x39\x5f\x0a\x7f\x77\x89\x77\x77\x08\x70\xb7\x8e\x68\x6f\x08\x61\x57\xc6\xac\xab\x82\xd4\xe5\xa8\x74\x65\x18\x7a\xa7\xb8\x73\xd7\x2b\xa9\x7d\xc4\xf9\x13\x51\x37\x58\xde\xbf\xb9\x2b\x29\xd7\xe9\xe7\xbf\x92\x7e\xa3\x81\xe6\x3e\xb2\xfc\x84\x53\xf7\xad\x5f\x64\xaf\x37\x76\xfc\x1b\x08\x16\xf7\xd1\xe1\x4e\x73\xf4\x6d\x85\x83\xbf\xd5\xf8\xef\xdb\x0c\xf8\xf6\x11\xde\xd7\x1b\xe1\x7d\x52\x3b\x88\x3c\x10\xa6\x24\x78\xbc\x42\x75\xfa\x60\xc5\x65\xb3\xfa\x7f\x2c\x08\x56\x04\xe1\x82\xab\x09\x41\x83\x48\x90\x88\x8b\x58\xab\xfd\x18\xad\x16\x58\x12\xa4\x04\x66\x92\x6e\x52\xfd\x4d\xab\xe0\xdb\xd1\xed\xbc\x05\xad\x3f\xe7\x88\x82\x5e\x3f\x97\xce\x3f\xe5\x71\xe9\x68\x98\x53\x53\xf5\x4d\xb3\x78\xd9\xdb\xd0\x21\x0f\xad\xcd\xc8\x9f\x70\x37\x6b\x51\xb6\xe5\x6e\xce\x5b\xa9\x7b\xd9\xcd\x60\x16\xbe\x95\xdd\x9c\xb3\x61\x7f\x5b\xbb\xb9\x6a\xe8\xaf\x61\x37\xbb\x00\xe8\x96\x3b\xba\x1c\x3f\xdd\xcb\xae\xf6\x41\xcb\xb7\xb2\xb3\x4b\x51\xd6\xdf\xd6\xee\xae\x1b\xfe\xcb\xee\x70\xef\x7b\xdd\xd7\xde\xde\xbc\x71\xfd\x04\xbc\x85\x4d\xeb\x3b\x6b\xfa\xfe\x9b\xd9\xad\xa5\x71\xbf\x92\x6d\x7a\x24\x88\xc9\xa9\xea\xb4\x5f\xaf\xec\x43\x9d\x77\xac\x7b\xb0\xdf\xb3\x6f\x69\xcf\xba\x55\x7b\x3d\xbb\xb6\x0e\xc1\xd5\x3d\xcf\xb0\x01\x96\x25\xd1\x12\xab\x68\xa1\xbf\x34\x21\xa1\x96\x64\x14\x59\x62\xe1\x9b\xda\xdd\xcf\x91\x4d\xf8\x6d\x3b\x7f\x7b\xa7\xef\x6f\x90\xf4\xe7\xd5\x20\x94\xfb\xac\x88\x3d\x66\x45\x50\xd9\x67\x45\xf4\x59\x11\x6d\x27\xa8\xcf\x8a\xe8\xb3\x22\x82\xef\xde\x46\x56\xc4\xd3\x27\x44\xec\x27\xeb\xe1\x4d\x29\xd1\xbd\x02\xdd\x2b\xd0\x7d\x6a\x83\x1f\xda\xbe\x04\x98\x7b\xfa\x20\x26\x09\x51\xa4\x51\xfc\xdc\x10\xb1\xd4\xb6\x41\x8e\xe0\xb7\x22\x68\x90\x71\x07\xf9\x1d\x04\xee\x8d\x26\xb9\xe4\xdb\x7e\x9b\xd2\xc9\x77\xbf\xcf\xc4\xea\xc5\x55\x2f\xae\xb6\x19\xda\xeb\xf1\xca\x06\x87\xf9\x45\xdd\xb2\x01\x5d\xf0\x1d\x8d\xf7\xc3\x18\xec\xd5\xc6\x90\x2f\x38\x9b\x8a\x1c\x65\xeb\x76\x4e\xda\x8c\x7c\xf7\x34\x7e\x13\x7e\x5a\x2d\x47\xe2\x31\x53\x54\xad\x3d\x4a\x4d\xf4\xc4\xc1\x3d\x71\x70\xfb\xb1\xf6\x1e\xc2\x3d\x7a\x08\x7b\xe2\xe0\xde\x07\xd6\xfb\xc0\x9e\xde\x07\xf6\x52\x0e\xed\x67\x3e\x96\xcf\xa5\xa2\x6d\x07\x4c\x62\x31\x12\x64\x4e\xa5\x22\x42\xcf\x5e\xa5\x52\xb6\x19\xa9\xf4\x56\x4b\xe1\xb4\xc6\x7d\x84\xaf\x3d\xf8\x97\x16\xdd\xbf\xb2\xb7\x28\x1c\xf5\x29\x8e\x7d\xdd\x0b\x50\x9d\x96\x78\x8d\x16\xf8\x81\xa0\x19\xa6\x89\x31\x8c\xac\x74\x6c\x18\x61\x53\x87\xfe\x4f\xb7\x0e\xe1\x7c\x77\x04\x99\x11\x41\x58\x64\xa4\xbd\x51\x7e\x22\x9c\x20\x02\x4a\xa9\xf9\xcd\x42\x9b\xa9\x89\x20\x38\x5e\xa3\x29\x21\xcc\x6f\x9b\x0a\x4d\xa1\xa6\xcf\x7b\x51\x5a\x5f\xdc\x4c\x2b\xef\x9e\xd7\x62\xa4\x3d\x09\x7a\xa6\x5a\x24\xec\x6e\x9c\xc9\x3f\xbd\x2d\x51\xd1\x83\x68\x7a\xa7\xda\xcb\x3b\xd5\x7a\x10\x4d\x6f\x22\xbf\x02\x13\xb9\x07\xd1\xf4\x20\x9a\xde\x81\xd0\x7a\xb6\x7a\x07\x42\xf8\xdd\xdb\x00\xd1\x3c\x61\x9d\xda\xe7\xd2\xb0\x7b\x05\xdb\xfd\xae\x57\xb0\x7b\x05\xfb\x1b\x55\xb0\x5f\xc7\x0c\xf7\xda\x75\xaf\x5d\xf7\xda\x75\xaf\x5d\xf7\xda\x75\xaf\x5d\xdb\xa7\xf6\xa9\x5d\xc3\x5f\x8e\x0d\x74\x67\xc4\x7a\xf7\x28\xd7\x27\xa2\xde\x6a\x88\xab\x57\xa9\x7b\x95\xfa\x75\xab\xd4\xaf\x66\x40\xdf\x1e\xbb\x5f\xcf\x8f\x57\xba\x1f\xbf\x05\x7e\x3c\xf7\xf4\xc1\x2a\x6d\xbe\xfe\x6e\x57\xb1\x4b\x97\x90\x0a\xab\x14\x2c\x8d\x16\x57\x21\x1a\x29\xb4\xe4\x5a\xef\x66\x24\xf7\x1b\xb7\xe7\x0d\x88\x60\x4e\x1f\x08\x43\x0e\x16\x3c\xb0\x92\x6d\x00\xc6\xef\xaf\x4e\xc0\xd9\x3c\x0d\xac\x10\x46\x8a\x2e\xc9\x10\x9d\xce\xcc\x06\x8a\x70\x92\x20\x49\x94\x2c\x20\x4f\xb4\x42\x66\x1f\x62\x71\xd6\x57\xf7\x6e\x9a\x01\x11\xcc\xcf\x06\xee\xfc\xa5\x89\x32\xa7\xd1\x35\xfe\x48\x93\x44\xf7\xc1\x6e\x5a\x10\x3e\x4b\x22\x12\xf7\x64\xee\xb5\xee\xc7\x4b\x1c\x6b\x6b\x22\xe8\x42\x96\x50\x12\xfe\x1e\xc4\x3c\x95\x1e\x4a\x91\x7b\xde\x3c\x3d\x44\xd6\xee\x33\x3c\x56\xad\xba\xb1\xc0\xb1\x16\xfb\xd1\x82\xc4\x69\x42\x10\x96\x92\x47\x14\x2b\x12\x23\x6a\xae\x05\x44\x95\xb3\x12\xdd\x8f\xdc\xab\x63\x2a\xf1\x34\x21\xb1\x9d\x63\x92\x21\x3b\x1a\x7b\x4e\x25\x9a\x12\x3d\xc5\xfa\xe6\xc9\xcf\xfe\xc2\x5c\x4a\x15\xbd\x09\xba\x42\xca\x3d\x21\xcc\x74\xa4\x41\xa9\x32\x9b\xf3\xad\xea\x55\xa6\xf7\x7d\xba\x4d\xaf\x65\xf5\x5a\x56\xa7\x01\x7d\x53\x5a\xd6\x2b\x42\xa3\x39\x81\xf4\xa2\x68\x34\x88\x59\x69\xc9\x7f\xe7\x9d\x52\x72\x3b\x7b\xdd\xfb\xfd\x3e\xbb\x26\x47\xbe\xc5\x63\xce\x66\x74\x9e\x0a\xeb\x80\x9f\xea\x13\xbb\x31\x30\x56\xd1\xce\x9b\xb8\x71\xaa\xbb\xfe\x5c\x17\x4f\x17\x1b\x02\x1d\x22\xad\x5d\xdf\x5d\x8d\xaf\x2f\x6e\xaf\x8e\xc7\x1f\xd0\x68\xb5\x4a\xa8\x71\xec\x47\xa9\x54\x7c\x49\xff\xae\x87\x61\xb8\x6b\xbd\xe4\xb6\x6a\x88\x04\x85\x03\x22\x09\x72\x38\x61\xe8\x10\x1d\x9f\xdd\x5e\xdf\x8c\xaf\x6a\x1a\xb4\x9b\x00\x2a\xb6\x90\xe5\x2a\x01\xad\xe4\x3e\x9d\x12\xc1\x88\x22\x12\x45\x49\x0a\xb0\x66\x1f\x5f\x30\x8d\x8e\xff\x7b\x7c\x7c\x7b\x73\x7a\x71\x7e\xf7\x5f\xb7\xe3\xdb\xf1\x07\xe4\x76\x93\x6e\x56\xf7\x4b\xf7\x22\x5e\x33\xbc\xd4\xe6\x4f\x9e\x64\xf7\x97\x94\xa4\xa0\x04\xd1\x39\x5b\x12\xa6\x8a\x2d\xba\x0e\x9f\x8d\x7e\x18\x9f\xe5\x5b\x5e\x10\xf4\xd3\x9f\xb3\x4e\x25\x78\x4a\x12\x1b\xf0\x00\x7f\xbe\x16\xd8\xd9\x8b\x6c\x24\x24\x2d\x89\xc9\xe7\xb6\xa5\x72\x0b\x5a\xb6\x8e\x8a\x2b\x54\xfe\x45\x61\xba\x9b\x7e\x90\x9b\xbd\xd6\xc6\x56\xbe\x87\xcf\x26\xe9\xf4\x01\x89\xef\x00\x21\x4d\x89\x3c\xfa\x47\xee\xa0\xfc\xfa\x64\xc4\x1b\x28\xc8\x16\xb4\x92\x6f\x53\xcd\xbc\xec\x81\xb7\x20\xef\xc2\xee\xbe\xa4\x6c\xdb\x93\x3e\xf1\xba\x5c\x16\xdd\xb5\xb5\xde\xea\xe8\xad\x8e\xea\x99\xe9\xe1\x12\x35\x33\xbc\xaf\x6b\x67\x1b\x2f\xdf\x8c\x92\x24\x96\x25\x37\x4d\xee\xda\xd8\xe8\x92\x79\xbb\x37\xc6\xf3\x3a\x65\xba\xe8\xc6\x57\xde\x7f\x6e\x1d\xea\x7a\xb5\x96\x44\x61\x28\x41\xa8\x38\x4a\xa1\xeb\xfd\x2d\x54\x9e\xe6\xfe\x16\xea\x6f\xa1\xda\x99\xe9\x6f\xa1\x37\xec\xbc\xaa\x90\xdc\x2f\xea\xbd\xda\x64\xd3\xed\xc4\x7f\x53\xe1\xda\x2a\xdb\x72\x12\xc9\x05\x16\xa6\xd2\x49\xc4\x97\x4b\xce\x82\xc8\xeb\x7a\x45\x06\xc8\x07\xdb\xc0\x4d\x01\xdd\xd8\xe4\xf9\xca\x5e\x43\xdf\x86\xcf\x2b\x98\x97\xe7\x40\x85\xf7\x76\xe0\x86\x09\xea\x89\x82\x7a\xa2\xa0\x1e\xa7\xdd\x13\x05\x35\xef\x96\x1e\x89\xdc\x23\x91\xc3\xef\x7a\xa2\xa0\x57\x44\x14\x94\xaf\x21\x6e\x30\xd7\x55\x45\xf7\x7f\x2d\x7f\x13\x46\x2e\x4a\x25\xd7\x6d\x40\xc3\xd4\x23\xdf\x1d\x9a\x9d\x2f\xd1\xba\x29\xb2\x11\x16\xf5\x7c\xe5\x7a\xed\x2c\x59\x2b\x42\xe3\xa4\x5c\x8d\xf4\x19\xa0\x43\x55\x0b\xfd\x2d\xfa\x52\x2a\xb6\x6d\xef\x58\xd9\x38\x51\xdf\x2a\xa1\x6f\x26\x97\xde\x90\xd3\xbf\x9d\xf0\x76\xa4\xe7\x77\x35\x22\xbc\xfa\x7b\x2f\xc8\xab\xbf\xde\x35\x8f\x3d\x2f\xbb\xb7\xcd\x5f\xcf\xc9\xc6\xb7\xe1\xad\x08\x7b\xfc\x1c\xfe\x8a\xc6\xd5\xff\xe6\xe4\x7a\xd3\x5e\xee\xa5\x7b\xcb\xe9\xfa\x56\x65\x7c\xef\xcf\xd8\xa7\x3f\x63\xf0\xed\x3a\x34\xfa\xbc\xf3\x86\xc9\xe9\xbd\x3d\xdb\xcc\x56\xef\xed\x09\xbf\x7b\x1b\x79\xe7\xf6\xae\xbe\x33\x57\x7d\x00\x52\x3f\xfa\x47\xf6\x77\xa0\x48\x07\x1f\x56\x84\xfc\x3a\x00\x73\x1c\xfc\x99\xc4\x99\xfa\x91\x35\x5e\x01\xd8\xb1\x7d\x38\x74\x4a\x49\x16\xbc\xde\x88\xdf\xb9\x34\x8f\x9e\xc0\x93\x6f\x0b\xed\x5e\xd3\xf5\xe7\xc5\xf5\x94\x77\xc2\x26\xd5\x09\x20\x03\x5e\x9f\xa6\x06\xcd\xfd\xb8\xa0\x70\x4d\x02\x9d\x0b\x5c\x25\xc1\x82\xbb\x3c\x39\x0c\x80\xf6\x3a\x9d\xe3\xb9\xd5\xa9\xd2\x76\x6f\x37\x70\xbb\x47\xdf\xee\xb8\x5f\x1c\x09\xb1\x61\xdf\xbf\x28\x2a\xa2\x41\x66\xee\x07\x10\xf1\x7c\xf2\xf1\x13\x51\xdf\x9e\x70\xfc\x44\xd4\x73\x49\xc6\x6d\xc5\x61\xa3\x48\xc8\xd8\xe7\x5f\x89\x34\xd8\x4e\xf4\xbd\xad\x31\xf6\x79\x5d\x7d\x5e\xd7\x6f\x3d\xaf\xcb\x3d\xdd\xa6\xf6\xe8\x09\xfc\xe4\x19\xaf\x2a\xf3\xc2\x6f\xef\xb6\x32\xe3\xea\x2f\xac\xfe\xc2\xea\x36\xc6\xd7\xaa\xa2\xbb\xfd\xfc\x1a\x54\xf4\x4e\xa9\xf6\x26\x7a\x97\x55\xf1\x71\xdb\x7f\x63\x84\xee\xd2\xbd\xec\xed\x08\x21\xd9\x55\xce\xec\x94\xae\xb5\xa9\xf6\xd6\x55\x56\x70\xab\x22\x76\x54\x9c\x72\xf7\xeb\xcb\x92\x28\x7b\xed\xb3\xee\x7a\xfe\x5c\xc2\xfe\xb5\x88\x88\x6c\xdc\x2f\x2a\x14\xb4\x8e\x5b\x84\x7c\xe5\x91\x04\x77\x8d\x20\xb0\x0d\xbf\xcd\x25\xb4\x37\xff\xb4\x00\x14\xcb\x7f\x67\xa1\x63\xf0\x35\x74\xb9\xd8\x0f\xf7\x61\xf8\x42\xf7\x59\xd6\xb2\xfb\xc4\xb1\x84\xc2\x87\x82\x28\xb1\xbe\xc3\x4a\xdb\x11\x6a\x77\x74\x5a\xde\x6a\xd8\x80\x4e\xbb\xc1\xf2\xfe\x4d\xa2\xd3\xf2\x1d\x7f\xe2\x33\xdb\x7a\x4f\x7e\x73\xb8\x86\xb6\x27\xac\xc7\x38\x6c\x31\x75\xdf\x2a\xde\xa1\x49\x84\xbe\x9a\x1e\x16\xa4\xf8\xb7\x78\x72\xf3\x77\x52\x7f\x44\x9b\xe6\xe8\x9b\x63\xb0\x2b\xa8\x1a\x1b\xc6\xf6\x46\x98\xec\x8a\xda\xd2\xbe\x7b\xf5\x34\x10\xa8\x60\x35\x7a\xb6\xe3\x6f\x94\xed\xb8\x9d\x71\xd3\xda\xb2\x69\x6b\xd6\xb4\xb3\x69\xea\x0d\x9a\x1d\x90\xd4\x79\x3b\x63\x5b\x24\x75\x4e\x8f\x7f\x13\xde\x9a\x5c\x8f\x9f\x03\x49\xfd\x1b\x35\x3d\x7a\xbb\xe3\x49\xe6\xed\x5b\x35\x3a\x5e\xb9\xc5\xd1\x63\xc0\xf7\x89\x01\xef\x21\xe0\x3d\x04\xbc\xed\x04\xf5\x10\xf0\x1e\x02\x1e\x7c\xf7\x36\x20\xe0\xd6\x5e\xdc\x15\xbd\x58\xa5\xb2\x67\x0a\x6d\x8e\x18\x66\x7b\xf5\xfd\x34\x7e\x13\x7a\x7b\xc0\xd7\xe4\x2d\x6b\xf1\x1c\xfa\x7b\x4f\x4c\xd4\x13\x13\xf5\x4a\xdc\x6f\x49\x89\xeb\xf5\x94\x6d\x66\xab\xd7\x53\xc2\xef\x7a\x62\xa2\x57\x44\x4c\xa4\x15\xa7\x1c\x6e\x6d\x23\x7c\xea\x58\x10\xac\x4c\x75\x32\x91\x21\xa9\x0a\x0a\x58\x93\x76\x65\x1a\xd0\xfa\xd5\x5b\x50\xae\x74\x3f\x4d\x8f\x5b\xe0\xa8\xc2\x17\x1e\xfc\x4b\x8b\x8e\x5f\xd9\xbb\x12\x0e\xf4\x14\xc7\xbe\x26\x1c\x28\x48\x4b\xbc\x46\x0b\xfc\x40\xd0\x0c\xd3\xc4\xb8\xa9\xac\x0c\x6c\x18\x5b\x53\x87\xfe\x4f\xb7\x0e\xe1\x7c\x77\x32\x50\xaa\x96\xe9\x46\xc5\x89\x70\x82\x88\xa1\x50\x85\xdf\x40\xc1\x3a\x5b\x1e\x70\x4a\x08\x0b\x10\x8e\x6d\xfb\xbc\x17\xd5\xf4\xc5\xc1\x68\xe1\xbe\x79\x71\x1c\x5a\x7d\x91\xe7\xfd\xd9\x5c\xbb\x18\x5a\xf2\x4f\x6f\x45\x14\x3c\x87\x59\xf5\x0d\x87\x3e\xfa\xf0\xc6\x6f\x93\x71\xfd\xd5\xa8\xe4\xbd\xa1\xbb\x47\x43\x17\x52\x57\xbe\x51\x4b\xb7\x0f\x57\x34\x4c\x4e\xef\x06\xd8\x66\xb6\x7a\x37\x40\xf8\xdd\xdb\x09\x57\xd4\x6b\xcf\xdb\x95\x13\x7c\x42\x3d\xba\x57\xa3\x7b\x35\xba\x57\xa3\xbf\x59\x35\xfa\x75\xcc\x70\xaf\x43\xf7\x3a\x74\xaf\x43\xf7\x3a\x74\xaf\x43\xf7\x3a\xb4\x7d\x6a\x2f\x3a\x34\xfc\xe5\x12\x88\xf7\x93\x2d\xdc\x2e\x22\x65\xd3\x85\xdf\x8a\xf2\xdc\x2b\xce\xbd\xe2\xfc\xba\x15\xe7\x57\x33\xa0\x6f\x2f\x47\xb0\xcf\xb2\x2b\xdd\x82\xdf\x6c\x96\x9d\x2f\x26\xb0\x05\x51\x72\xee\x33\xd7\xd0\x73\xd3\x27\x0f\x9c\x64\xc4\x2c\x46\xae\x13\x9d\xc8\x94\xbf\xd8\x87\xde\x16\xf9\x5a\xb9\xd7\x3d\x85\x32\x0a\x56\xad\xa7\x50\x7e\xc2\x71\xbb\x73\xb6\x61\xe4\x6e\x8f\x1a\xef\xd5\x1b\x1d\xf6\x8b\xc3\x7c\xea\x4f\xfa\x8b\x82\x7e\x2a\x6f\x8e\x52\xc2\x45\x56\x8a\xea\xf9\x99\xa3\x77\xb9\x1a\x3e\x11\xf5\xad\xdc\x0b\x3d\x7b\x74\x4f\xc6\xb9\x75\x91\xa9\x4e\x12\xfe\x6d\x0d\xb1\x27\xc8\xee\x09\xb2\x7b\x82\x6c\xff\xd6\xe7\x20\xc8\xde\xe5\x46\x36\xaf\xff\x56\x2e\xe5\x9e\x24\xbb\xbf\x97\xfb\x7b\xb9\x72\x88\xaf\xd0\xe0\x7a\x15\x14\xe0\xde\xe0\xda\x57\x6a\x7b\x18\xca\xf2\xc2\x78\xaf\x19\xee\x6e\x26\xfb\x2c\x77\xfb\x7f\x7d\x96\x7b\x9b\xc1\xf5\x59\xee\x3d\x70\xa9\xcf\x72\xef\xa1\x39\x3d\x34\xa7\xcf\x72\x7f\x2b\x59\xee\x4e\x81\xda\x47\xa6\x7b\x85\x32\xb6\x39\xdb\xfd\x4b\xd9\x32\x78\xb5\x8a\x96\xeb\x6b\x9f\xf5\xde\x67\xbd\xef\xba\x77\x5e\x85\x4d\xf6\x24\xd9\xef\x15\x62\x60\x57\x43\xec\x6d\x64\xc1\xbb\xde\xf6\x29\x3c\x3d\x12\xf1\xf5\x23\x11\x5f\x5d\x0a\xcf\xab\x51\xdb\x7b\x63\x78\x8f\xc6\x70\x9f\xc5\xd3\x67\xf1\xf4\xae\x82\xd6\xb3\xd5\xbb\x0a\xc2\xef\xde\x46\x16\xcf\x66\x6d\x7a\x2f\xd9\xf0\x4f\xa1\x57\xf7\x6a\xb5\xf9\x5d\xaf\x56\xf7\x6a\xf5\x37\xaa\x56\xbf\x8e\x19\xee\x75\xea\x5e\xa7\xee\x75\xea\x5e\xa7\xee\x75\xea\x5e\xa7\xb6\x4f\xed\x4d\xa7\xde\x6f\x76\x7c\xc7\x28\x56\x90\x71\xf1\x96\x94\xe9\x5e\x91\xee\x15\xe9\xd7\xad\x48\xbf\x9a\x01\xf5\x99\xf2\x7d\xa6\x7c\xe9\x9b\xd7\x9b\x29\xff\x3b\xbb\x11\x0e\x02\xd9\xef\x2f\x89\x83\x1f\x12\x3e\xbd\x59\xaf\x88\xfe\xef\x09\x5d\x12\x26\x41\x63\xa1\x6a\x1d\x5e\x9c\x35\x13\x5c\x9e\xda\x83\xeb\xd3\xf3\x4f\x67\x61\x0e\xc9\xc1\xe7\xdb\xb3\x9b\xd3\xcb\xd1\xd5\x8d\xeb\xa1\x1f\x55\x38\x17\xf6\xb9\xdc\xdd\x7f\xcc\x97\x2b\x2c\xa8\xe4\x6c\xfc\x75\x25\x88\xd4\x5d\xbb\x80\xdb\x96\x8b\xed\x7a\x37\xfe\xaf\xb0\x67\xe7\xf9\x7f\x7e\xba\xc9\xff\x2b\x37\x8a\xb3\x9b\xfc\xbf\xc6\x8d\xa3\x09\x1a\x2e\x9e\xa0\x43\xf4\xe9\xe6\x03\xfa\x04\x51\x7f\x81\x6e\x16\x98\x41\x86\xd2\xd9\xcd\x07\x74\x46\xa4\x84\x4f\xb2\x87\x15\x55\x09\x8c\xed\x07\xca\xb0\x58\x23\x37\x7c\x93\x8c\x84\xc1\x1d\xe8\xa6\xa6\x38\x79\xec\x6f\x29\x03\x85\x35\x9b\xbd\x33\x3e\xa7\x11\x4e\x76\x9b\xc4\xd1\x79\x78\x5e\x0e\x2e\xae\x1a\xa7\x22\xfc\x75\x79\x2e\x46\xe7\x27\x90\x84\xe5\xba\x5a\x31\xf2\x73\x22\x15\x89\xf5\x05\x18\x9b\xcd\xab\x6d\x0d\xb2\x0e\x2e\xc6\xbf\x71\xca\x48\x8c\x52\xa9\xd5\xb5\xd1\xf9\x09\x3a\x42\x17\x57\x13\x76\x21\x62\xe3\x2f\x20\xfa\x46\x31\xb6\x0a\x95\x88\x71\x85\xe8\x72\xc5\x85\xc2\x4c\xe9\xcb\x54\x0b\x32\x6e\x67\x44\x22\x2c\x08\x3a\xe6\xcb\x65\xaa\xb0\xa2\x0f\xa4\x34\xa9\xcc\x18\x01\xd7\x44\x9d\xc6\xe0\x81\xac\x98\x43\x3e\xcd\x29\x3a\x07\x2b\xa1\xdb\x57\xb4\xa0\xfd\x1d\xd0\xb8\xa4\x0e\xba\x26\xb0\x10\x38\x2f\x06\x0f\xa8\x22\xcb\xe2\xef\x5b\x22\xc5\x7e\xad\xd4\xad\x4f\xb0\xc2\x67\x1c\xc7\x94\xcd\x4d\x1e\xdc\x19\x55\x44\xe0\xe4\x33\x5e\x7d\x74\x0e\x8e\x2d\xf6\xc7\x7f\x5e\x5f\x9c\x87\x1b\xe4\x2f\xa3\xcf\x67\xe1\xbf\x2f\xaf\x2e\x6e\x2e\x1a\xf7\x4c\xae\x85\xf2\xa6\xd1\x5f\x7f\x80\xff\x45\x47\x48\xb7\xee\x95\x85\x25\x51\x38\xc6\x0a\xa3\x77\x26\x57\xc4\x23\xca\x29\x4b\x60\x8f\xac\x04\x5d\x52\xbd\xae\xd6\x4a\x7b\x0f\x9b\x09\x09\xa2\x4f\x08\x61\xca\xef\x12\xf3\x80\xc9\xfb\x82\x9b\x4e\x61\x16\x63\x11\xa3\xbf\x49\xce\xfc\xbd\x67\x7e\x8e\xa5\xfb\x80\xc4\xe8\x10\x2d\x94\x5a\xc9\x0f\x47\x47\x8f\x8f\x8f\x43\xfd\xeb\x21\x17\xf3\x23\xfd\xc7\x21\x61\xc3\x85\x5a\x26\x70\xe0\x61\x16\x3e\xa0\x4b\xc1\x15\xd7\x2f\xc4\x48\x12\x41\x71\x02\xd9\x68\x53\x73\xda\xf9\x0c\xfd\x35\xe2\x82\x0c\xb3\x85\xf9\xab\x31\x43\x48\x8c\x28\x43\xb3\x64\xad\x08\x8d\x93\x23\xfd\xa3\x8a\xa3\x53\x5c\x4f\x14\x93\x88\xc6\xf6\xee\x26\x2c\xe2\x31\xb8\x3c\xcc\x77\x94\xf9\x04\x1b\x62\xa3\x07\x7e\x3a\xad\x5d\x3f\x25\x68\x89\x63\x82\xf0\x03\xa6\x89\x49\x13\xe5\xc6\x4b\x65\xe6\x99\x08\x39\x44\x13\x76\x6a\x34\x9d\x54\x6b\x75\x80\xf7\x02\xdb\xc5\xfd\x76\xa5\x47\x1c\xf1\x04\x4d\xd3\x99\xd6\x0a\x82\x6b\x69\x80\xa8\xd2\x73\x21\x48\xc4\x97\x4b\xc2\x8c\x23\x4b\x37\x04\x4f\xc2\x94\xd9\xee\x0e\x27\x0c\x36\x00\x66\xb1\xd9\x02\x31\x87\x93\xcd\x88\xd6\x90\xd9\xda\xbc\x66\x9a\xce\x72\xd1\x11\xc5\x91\x20\x38\x46\x54\x4d\xd8\x28\xd1\xb6\xd4\x92\x2b\x12\x02\xd7\xc0\x95\x9a\x9b\x71\x90\x08\x82\xac\x12\x1c\xb9\x44\xc0\x84\x47\x38\x41\x33\x9a\x10\x5b\x1e\x39\x68\xe0\x1d\xa8\xf7\x7a\xd2\xa8\x44\x31\x7f\x64\x09\xc7\x76\x1c\xc5\xc7\xde\xe7\x85\x8b\x2f\x28\x3e\x16\x82\x0b\xf8\x9f\x9f\x28\x8b\xb7\x3b\x84\xb7\xe7\x3f\x9d\x5f\x7c\xc9\x9d\xc3\xdb\xeb\xf1\x55\xf8\xef\xeb\xbf\x5c\xdf\x8c\x3f\x37\x1e\xc4\x62\x2b\xd9\xd6\x82\xee\x81\xda\xf7\x01\x5d\x9b\x49\xe0\x02\x69\x45\xbe\x66\x50\x9f\xed\x5e\xca\x3e\xe0\x31\xd9\x6e\x6c\x9f\x47\xe7\xb7\xa3\x9c\x48\xb9\x3e\xfe\x71\x7c\x72\x7b\x96\x53\xe4\xdc\xf8\x82\x4f\xae\xc6\x46\x4d\x0b\x3f\x3b\xfe\xf1\xf4\xec\xe4\xce\x2b\x76\x4d\xb3\x51\x78\x6f\x51\x30\xdd\x18\x01\xb4\xe0\x31\x9a\xae\xc3\x64\xb5\x2c\x69\xf8\x11\x4b\x94\x80\x33\x9e\xc4\xc3\x89\xb9\xf9\x4d\xab\x1f\x40\x0e\xd9\x97\x05\x4f\x2c\x79\x4c\x06\xf6\x37\xfa\xda\x32\xb9\xd5\x5a\xb9\x06\x1f\x45\x55\xc3\xfa\xed\x98\x21\xca\x62\xfa\x40\xe3\x14\x27\x26\x07\xda\xcf\xd1\x07\x34\x42\x52\xff\x30\xd5\x07\x58\xd0\xf9\x1c\xcc\xca\x42\x57\x4d\x6b\xf6\x51\x98\x49\x78\xce\x97\x03\x87\x23\xad\x5f\x6b\xfd\x11\x54\x8b\x03\x2d\x87\xcd\x83\x90\xf3\x9d\x6f\x51\x60\xb5\x20\xa2\xaa\x6b\x6e\x5d\x3e\x18\x2f\x62\xcd\xb0\xe0\xe8\x65\xa8\x52\x10\x51\xd2\x58\xc3\x2b\x41\x1e\x28\x4f\x83\x47\x6d\x7a\x7a\x6e\x71\x2b\x9b\xcf\x26\x00\xa6\x8d\x43\x1f\xb3\x66\xf2\xbb\xf9\xf4\xe2\x5a\x09\xac\xc8\x7c\x7d\x62\x4f\xf6\xf6\xbb\xf8\xe4\xe2\xcb\xf9\xd9\xc5\xe8\xe4\x6e\x3c\xfa\x94\x3f\x98\xfe\x9b\xeb\x9b\xab\xf1\xe8\x73\xfe\xab\xbb\xf3\x8b\x9b\x3b\xf7\x8b\xc6\xed\x5a\xf3\x82\xf2\x7d\x9a\xff\xe1\x07\xa4\x25\x23\x48\x30\xc7\x64\x13\x88\xb1\x29\x99\x71\x61\xc4\xf1\xd2\xc5\x9d\x40\xf2\x23\x3f\xb3\x24\x86\xb9\x2f\x8c\xe2\x03\x3a\xa9\x69\xd2\xf8\x33\x94\x20\x78\x09\xe2\x1c\x33\x34\x66\xf1\xe1\xc5\xec\xf0\xda\x7c\xb8\xc4\xe2\x9e\x08\xff\xe8\xa3\xa0\x4a\x11\x70\xc3\x52\xeb\xa1\x45\xd8\x75\x59\xdf\x37\x80\x2b\xce\x5e\x30\x44\x57\x5a\x3c\xeb\xdf\xfb\xbb\x47\x6f\xd4\x98\x28\x4c\x13\x69\x3b\x9b\x9b\xd7\x0f\xe8\x0c\x8b\x39\x41\x46\x91\x93\xe8\x1d\x9f\xcd\x4c\x63\xef\x4d\x37\xf4\x55\x93\x1b\x45\x85\x88\xd4\x5b\xc3\x5d\x5f\xf0\x3e\xfb\x63\xaf\xa5\x95\x77\xd5\xed\x6a\xb7\x3d\x75\x7b\x09\x33\x7e\x71\x7e\x37\xfe\xef\xd3\x9c\xc5\x62\xbf\xa9\xd8\x6b\x30\x70\xf3\x75\xf3\x5d\x50\xdd\x76\x79\x3b\xe5\x7f\x58\xb1\x9d\xd2\x95\x5b\xf9\x99\xb6\x81\x2a\xf6\x12\xf9\x4a\x95\x59\x98\xb0\xdf\x85\x2d\x94\x35\x23\xb5\xde\x80\x57\x2b\x82\xb5\x02\x52\x5e\xed\xbc\xba\x56\xb3\xf6\xe6\x4d\xe1\x3b\xec\x22\xbb\xf7\x0c\x10\x67\xc9\x3a\xbc\xeb\x0b\x3b\xb2\xc5\x1e\x30\x6d\x95\x76\xc0\x95\x8b\x68\xba\x3f\xc6\x4c\x89\x4a\x0b\xbc\xad\x69\x61\xfd\x3b\x39\xdb\xa2\xda\x0d\x5c\x7a\xf7\x79\xd1\x61\x57\x76\x93\x5b\x27\x8f\x7e\xc9\x30\xb3\x38\x42\xff\x30\xa8\xd7\x75\xc6\x4d\x85\x9f\x26\x9b\xb2\x9f\xc1\xfd\xb7\x4c\x25\x4c\x3e\x36\x91\x26\x74\xff\x67\x89\x7e\x49\x31\x64\x12\x0c\xd1\x35\x21\x13\xe6\xf4\xec\x39\x55\x8b\x74\x3a\x8c\xf8\xf2\x28\xe3\x16\x39\xc2\x2b\xba\xc4\xfa\x1e\x22\x62\x7d\x34\x4d\xf8\xf4\x68\x89\xa5\x22\xe2\x68\x75\x3f\x87\xa0\x82\x73\x55\x1d\xf9\x66\xe7\xfc\x9f\xce\xfe\xf9\xfb\xc3\xb3\x3f\x7f\x7f\x50\xb6\x9c\xea\xf6\xfb\x98\x45\x78\x25\xd3\xc4\x06\x1f\x45\x38\x37\x20\xce\x60\x26\x86\x1b\xd6\xfb\x3c\xbf\x5c\xbb\x29\x7a\xc7\x97\xb7\x39\x4f\x46\xfe\x9f\x9f\xc7\x9f\x2f\xae\xfe\x92\x53\x94\x6e\x2e\xae\x46\x9f\x9a\x3d\x1a\x25\x4d\xb0\x30\x0d\x3f\x31\xfe\xc8\xf2\xa3\x97\xc5\x41\xa7\x4c\xd1\x25\x71\x8a\xa0\xfd\xe7\x8d\x19\xe9\x16\x23\xbf\xb8\xf9\x31\x2f\xcb\x3e\x9e\xfd\xe5\x66\x7c\x77\x7d\xf2\x53\xe3\x48\xcc\x63\xb9\x9e\x5d\x43\xe4\xe4\x98\x27\xe9\x92\x85\x7f\x6f\xdf\xb7\xd3\xf3\x9b\xf1\xa7\x62\xef\x2e\x46\x37\xf9\x69\xbf\xca\x07\xe4\x0e\x7e\xb8\xb8\x38\x1b\x8f\x72\x6b\x79\x32\xba\x19\xdf\x9c\x7e\xce\xf9\xa2\x4e\x6e\xaf\x46\x37\xa7\x17\xe7\x8d\xc3\x74\x3d\xa8\x18\xa8\x1e\x56\x38\xcc\x7d\xcb\x99\x56\xc7\x7c\x64\xc1\x2e\xe6\xa0\x1c\x06\x99\xd0\x26\x8e\x05\xb6\xc5\xa1\xb7\xec\x23\xd3\xd3\x4a\x59\xa3\xf2\xcb\x84\xea\x65\x5d\xe3\x42\x37\x89\xbc\x1b\xdf\x05\xe8\x97\x0d\x77\xe3\x24\xe1\x8f\x06\x72\xb0\xa4\x8a\xc4\x8e\x96\x42\xff\x44\xa2\x28\x15\x82\x30\x95\xac\x87\x15\xe2\x24\xbf\x2c\x5c\xa8\x13\x1f\x94\xde\x4e\x9b\xac\x8a\xf0\x96\x63\xbb\xd5\x8a\x62\x21\x9e\xeb\xba\x05\xe5\x67\xf8\xfc\x33\x91\x12\xcf\xc9\x2e\x2e\xa1\x2a\x21\x75\xfd\x73\xf8\x4f\x70\xf9\xb4\x11\x40\xb9\x1e\x42\x08\x73\x34\xe5\x42\x39\xa9\xb2\xcb\x5e\x8e\x70\x2a\x3b\x6d\xe6\x66\xc8\x0e\x06\x0f\xc8\x61\xe6\x1a\xc2\xba\xa3\x16\xaf\x03\xaa\xc3\x0a\x4b\xbd\x89\x38\xd8\x4a\xc4\xfe\x3c\x35\xb4\x91\x08\x7a\x53\x73\xbb\xae\x04\x65\x11\x5d\xe1\x64\xab\xa3\x57\x08\xe2\xd8\xf4\xbc\x77\x74\x86\x30\x5b\xbf\x2f\x19\x74\x8a\x88\x25\x60\xd7\x6c\x37\xbd\x71\xb4\x69\x5b\x9b\xd5\x61\x8c\x1b\xb7\x9a\xdc\x65\x6d\x8c\xbb\xae\x6e\xb8\x85\x56\xec\xdb\x8d\xbf\x18\x27\x97\xd5\x6d\x56\x4d\x58\xf0\xe5\xaf\x4d\x4b\xfd\x19\xaf\xf4\x12\x1b\x02\x29\x84\xb3\x31\x5a\x48\x9a\xe5\xfe\x74\x3e\xaf\xc0\x08\xf6\xe1\xbf\xf6\x2a\x46\x36\x85\xd6\x6b\x59\x7e\x49\xce\x19\x10\xa0\x05\xed\x96\x9c\xa5\x2a\x15\x5a\x99\x5a\x6a\x7d\xf4\x1d\x19\xce\x87\xe8\xe2\xe7\xf1\xd5\xd5\xe9\xc9\x78\x80\x46\x97\x97\xe3\xf3\x93\x01\x22\x2a\x7a\xef\xdc\xea\xd6\xcb\x38\x61\x8a\x5b\xf5\x79\x8d\x16\xfc\x51\xbf\x6b\x49\xb4\x69\x14\x8e\xd9\xb9\x24\x21\x07\x74\x4e\xa5\x12\xd6\x31\xca\xe2\x90\x31\x8d\x2e\x8b\x7a\x90\xd9\x21\xa9\x5a\xec\xb2\x35\xb0\x94\xe9\x12\x4f\x13\x72\x47\xf1\xf2\x4e\xf0\x64\xd3\x19\xae\x3c\x52\x99\xea\x78\x27\x4d\x44\xed\x0e\x47\x11\x4f\x99\x6a\xdd\xda\xa6\x75\x3c\x81\x69\x92\x68\xa5\x0f\x14\xc4\x63\xca\x1c\x63\x7e\xba\x24\x8a\x20\x46\x04\x7e\x09\x10\x19\x49\x86\xe2\x84\x25\xa9\x9b\xcb\xab\xfc\x0c\xf4\xf3\x69\xe6\xb3\x6a\xba\x8e\x0d\xd7\x9f\xd3\xc2\x03\x36\xb6\x5d\xe6\xaf\xaa\x95\xa6\x96\xd0\x93\x8b\xab\x63\x23\xa7\xaa\x48\xee\x8c\x9f\xb2\xc0\x59\x0c\x6e\xf0\x02\x39\xa3\xd9\x8f\xfa\x20\x1b\xf9\xf1\x4b\xca\x15\x96\xef\x87\x13\xa6\x85\xe1\x3d\x59\x9b\xd8\x99\x16\x37\xbf\xd7\x57\xe0\xa1\x24\x4c\x42\xac\xe5\xf7\xc6\x1c\xd0\x02\xf3\x01\x0b\xaa\xb7\x16\x38\xda\x2d\x27\x64\x9e\x7f\x0f\xdc\xe3\xb6\x51\x2b\xed\xb2\xe8\x43\x46\xda\xe7\xbe\x33\xdd\x9f\x13\x05\x88\x18\x45\x55\xaa\x97\x3e\x36\xa4\x93\xa5\xae\x6f\xd4\xc4\x60\x57\x9c\x18\x34\xcf\x4e\x81\xbd\x6d\x8e\x4c\x57\x5d\xba\x78\x1c\xa8\x5c\x25\x78\x5d\xb2\xca\x37\x1d\x23\x6d\x7b\xca\x15\x8e\x48\x86\x26\x72\xc0\xab\x88\x2f\x97\xe0\xf4\x70\x08\xe2\x98\xce\xc0\xfb\xa1\xf4\x11\x43\x53\xa2\x1e\xc1\xd7\xe6\x3e\x45\xf6\xa8\x23\xca\xa4\xc2\xcc\x30\x7a\xc2\x6e\x99\xe8\xb9\x8a\x53\xd0\x70\x27\x07\x03\x34\x39\x88\xc9\x03\x49\xf8\x6a\x49\x98\xd2\x1f\x10\x55\x29\xd0\xc6\x4b\x4c\x93\x73\xae\xbc\xfb\x66\x97\x65\x11\x24\xa2\x2b\x4a\x98\x92\x77\x44\xb7\xfb\xa4\xc1\xd7\x4d\xe6\x84\x83\x29\x43\x4f\x10\x8e\x63\x41\xa4\x04\x22\x3b\xd7\x49\x6b\xfc\x98\x98\xb5\x9f\x80\x76\x7b\xd8\x87\x59\xf6\xbb\x8d\xab\xcd\xaa\x88\x0b\xcf\xdb\xe1\x5f\x9c\x51\x8f\x35\xee\x5a\x4b\x64\x98\x11\x64\x39\xa0\x94\xc7\x5d\x16\x9d\xf1\xc5\x63\xa3\xef\xc2\x76\xfd\xcc\xcf\xcc\xb5\x7e\xae\xb1\x6b\x32\x44\xd4\x3b\x36\xdb\x4c\xb5\xb1\x11\x88\x62\xd0\x83\x6c\xec\x71\x94\x70\x99\x8a\x96\x36\x6b\xbe\xd3\xc7\xf6\xd1\xa6\x7e\x8f\x43\x4d\x30\x4d\x94\xec\xa4\x6c\x56\x4c\x7c\x16\x1f\x37\xcc\x1e\x70\xb8\x95\xbd\x65\xed\xaf\x07\x88\xb2\x28\x49\x21\xa2\x8c\x93\x2c\x3c\xc3\x62\x94\x5d\x6d\x13\xe6\x43\xca\x58\xa2\x47\x92\x24\xfa\xbf\x11\x5f\xae\x40\x6c\xdb\xee\xda\x96\xb4\x3d\xad\xb0\x22\x03\xc4\x53\xa5\x1b\x1b\x18\xe2\x5f\xbb\x04\x87\x53\x0c\xb0\xfe\x8c\xce\x7f\xc2\x6e\xa5\x8b\x27\x78\x34\xb6\xd9\xeb\x46\x80\x51\x86\x3e\x11\x05\xad\x40\x7a\x4c\x38\x40\x43\x70\x5c\x29\x82\x8a\x73\xbf\xc3\x89\xb2\x23\xe9\xb0\xf2\x59\x20\xfa\x87\x84\x4f\x1b\xd7\x7d\x84\x96\xc6\x2c\xb1\x6f\x41\xb4\x68\x90\x06\x30\xe2\x4d\x7b\x94\x08\x91\x03\x08\x6d\x38\xfe\xf9\xe0\x75\xf3\xf6\x84\xd0\x31\x65\x26\x90\x0f\x78\x8b\x62\x3f\x2d\x9f\xcd\xa6\x3e\x82\x41\x7d\xf7\x76\xcc\x76\xd3\xdf\x65\xd9\x55\xb1\x69\x13\xe4\x5d\x1c\x4f\x3d\x18\x38\x20\x6a\x41\xa8\x40\xad\x86\xe5\xce\xef\x9d\x39\xf3\xed\x37\x4d\xb6\xb7\xeb\x3c\x15\x46\x88\x78\x01\xa1\x3b\x66\xd3\x79\x72\x6c\xdc\xc3\x09\x2b\x74\x02\xc5\x64\x45\x58\x2c\x11\x6c\x2f\x77\x1a\x72\xb2\x7f\x80\x66\xf4\xab\x6d\xd4\x05\xde\xb3\x9f\x06\xd6\x56\x8d\x0f\x66\x81\xcb\xdb\xae\xc3\xfd\x78\x09\xcf\x37\x3a\x19\xb8\xd4\x06\x75\xa4\x15\x2b\x41\x22\x2e\xb4\x48\x84\xd7\x7a\xb7\xe8\xc6\xbb\x51\x61\xa1\x27\x05\x6f\xb2\xba\x72\xfd\xc8\xd2\xdb\x62\xac\xc8\xa1\x36\xdc\x37\x04\x84\x56\x5c\xbf\x06\xd1\xa5\xb6\x2d\x02\x1c\x51\x26\x61\xa7\x64\x8e\x19\x12\x29\x63\x94\xcd\x6b\x7a\xeb\x44\xfb\x0e\x87\x59\x6b\x56\x78\xa9\xcd\x4c\xd0\x23\x74\x87\xf2\xfd\x90\x2b\x98\xce\xc6\x7e\x58\xcb\xfb\xb9\x66\x4d\x35\x4c\xdb\x23\xf6\x8e\x80\x9a\xce\xa6\x50\x45\xe5\xd5\x74\x36\xc1\x52\x21\xdb\xa7\x9a\x1e\x87\xda\xec\x1e\x00\x90\x4d\x4c\xb8\xa1\xe1\xd0\x45\x39\x0f\xbb\x88\x24\x51\x8a\x5a\xc6\xd6\x54\x12\x1b\xb6\x5e\x12\x31\x77\x0a\x9f\x21\xf1\xf2\x47\xdb\xb2\x79\x39\x39\x1a\xca\x92\x09\xab\x6c\x7a\x88\x46\xac\x04\xbe\x71\x3e\x8c\xdc\x7c\x19\xa9\x8d\x93\x47\xbc\x96\x68\x25\x4c\xac\x7b\x01\xd8\x3e\x37\x78\x70\xda\xe5\x1f\x72\x1e\x3a\xad\x50\xd1\x08\x27\xc9\x1a\x81\xa1\x17\xf4\xac\x66\xb1\x02\xba\xe6\xf6\xc2\xae\xa5\xee\x5f\x70\x44\x57\x91\x37\x7b\x13\xa8\x52\xd2\x95\x94\xd9\x0c\x9f\x16\x86\x65\x6d\xde\x05\xe8\x96\xd6\xba\x18\xe7\x9d\xd8\x75\x0a\x1f\xb8\x40\xce\xf0\x94\x24\x3b\x3b\xaf\xb7\x72\xd5\xc3\xab\x6d\x46\x8c\x36\xbf\x89\x71\xc6\x13\xf4\xb8\x20\xa2\x28\xda\x9c\x13\x47\xa4\xed\x5c\xf3\xd9\x38\x73\x1c\x74\x3b\x0c\xd4\xa5\x78\x6d\x2f\xbf\xeb\xd2\xbf\xc2\x8b\x24\xcb\xff\xaa\xbe\x45\x8a\xee\x9b\x5d\xfa\x10\x24\x6a\x55\x76\x01\xed\x23\x55\x6b\x2f\xde\x20\xbf\x67\x5a\xd2\x12\x9c\xce\x10\xe3\x8c\x20\x2a\xb3\x1f\x43\xf8\xd5\x40\xfc\x60\x33\xcd\x09\x23\x02\xf0\x55\x2e\x5a\x5b\x26\x3d\x7d\x66\xa3\x7c\xe4\x8d\x49\x34\xa3\x24\x89\x25\x62\x44\xdb\x34\x58\xac\x01\x63\x6b\x04\x5a\x1b\xdd\x68\x5f\xda\x6a\xc5\xf5\x61\xd5\x48\x97\xb6\x04\x69\xd6\x5a\x13\x2b\xf4\x0b\x19\x0c\xb2\xfd\x91\x7d\xc8\x22\x5f\x26\xcc\x5b\xc1\xb0\xff\xa8\xd4\xd6\xdd\x10\xc1\xb2\xa9\xec\x29\x7d\xc7\xe8\x0f\xdc\x1a\x0e\x9c\x2e\x2b\x4d\x92\x72\x17\xdb\xdf\xdd\x5b\xd9\x3c\xe6\x41\xa6\x0e\x0c\x3f\xa7\x0f\x84\x55\x16\x43\x71\x9b\x22\xc9\xb9\x21\x9b\xa5\x8e\x65\x4d\x7d\x05\x7e\xaa\xf6\x33\xa5\x17\x39\x2d\x79\xae\x0c\x27\x6a\x66\x64\x27\x6b\x1f\xc4\x09\x4d\x15\x8b\x8f\x37\x35\x2d\xb0\x44\xbf\x67\x5c\xfd\x3e\x48\x21\x70\xe6\xb0\x21\xd5\xb5\xae\x89\x41\x2e\x9b\x8e\x3a\x3c\xa4\xdd\x24\x08\xfb\xb3\x1a\x6f\x9e\xf9\x5d\xf3\x56\xb2\xa0\xca\x93\x6a\x6f\xe3\x72\xa0\xb9\x2e\x1d\xd9\x30\x6a\xec\xcd\x07\xf0\x1c\x74\xee\xc8\x6c\x03\x41\x20\x6c\xc2\x38\x5a\x72\x41\x0a\xac\x1e\x46\x78\xbb\x7b\xdd\xb2\x29\xb4\xdf\xa5\x15\xee\x30\xc3\x54\x90\x1d\xf3\x9c\x1b\xac\xd9\xfd\xb5\x0f\x88\xc5\x32\x0f\x6d\x6d\xd8\x01\x1b\x12\x07\xaa\x4d\xf2\x6d\x60\x11\x75\x3a\xa9\x77\x44\x87\xf4\xc5\x75\x70\xf9\xe1\x84\x7d\xe4\xc2\xde\x9d\xd2\xa6\xa2\x4d\x71\x74\x7f\x48\x58\x8c\x70\xaa\x16\x06\xb6\x6e\x7d\xc7\x6b\xbb\xb2\x5a\x2f\x80\x2d\xe0\x61\xd1\x54\x46\x58\x58\xa1\x3f\xc3\x0f\xdc\xf5\x62\xc2\x82\x46\x20\xd9\x0d\x12\x6a\x81\xf4\xa7\x4e\x81\x20\x40\x60\x50\x37\x17\x55\xd4\x36\x25\x62\x9b\xe6\x33\x13\xd2\x63\x4c\xe0\x7d\x24\x66\x44\xca\xc9\x81\xe9\x75\x61\x86\x4e\x9d\x3f\xca\xd9\x37\x32\x24\x09\xf7\xbf\x34\x67\xcc\x79\x64\xec\x28\xb4\x9a\xf2\xbd\x93\x9d\x39\x10\xff\x2c\x15\x80\xd9\xaf\x6a\xf3\x5d\xb4\xa0\x49\xe6\xa3\x7e\x3f\xb0\xe7\xd1\x34\x99\x90\x07\x92\x98\x64\xaf\x48\x90\x25\x61\x36\xda\xfe\x3d\xfa\x0f\x43\xf9\x82\xfe\x38\x61\x9f\x40\xac\x26\xc9\x7a\x80\xe8\x2c\x6b\x19\xab\x42\x33\xf7\x95\x1d\xd0\x4b\x66\x24\x4b\xae\x23\x66\xbd\x17\xf8\x81\x4c\x98\x6b\xe6\x3f\xd0\x3d\xfa\x03\xfa\x63\x9d\x23\xc7\x26\x6c\x3c\xb5\x9d\x0f\xbb\xd8\xbd\x2b\x90\x0c\x03\xab\x3e\x82\xe4\x70\x6e\x80\x7c\x45\x3c\x6f\xaa\x79\x05\xd7\x67\x99\x50\xf6\xc0\xcb\xd1\xab\xf0\xe4\x62\x41\x98\xba\x63\x3c\x26\x77\xa4\x22\x74\xd5\x20\x28\xf4\xa5\x7e\xce\x63\xb2\x31\xf0\xe4\x15\xe4\x2f\xe0\xba\x90\xe9\xd4\x2f\x87\x7e\x6f\x66\x74\xe7\x37\x58\x75\x87\x3d\x0a\x7c\x9b\xee\x6e\x1b\x2b\xbb\xb0\xda\xd5\x00\x24\xba\xed\x40\x75\xbc\xc6\xd4\x5a\x04\xf8\x51\xf1\x14\x16\x3d\xc4\xfa\xc7\x7a\xe4\xf6\xce\x09\xf0\xed\x90\x19\x2b\xe8\x9c\x6a\x6d\xbb\x7d\x3c\x0e\x84\xe0\x36\x6e\x6e\x93\x48\xd6\xca\xcf\x9d\x4d\xc5\x2a\xc1\x4a\xef\xf2\x43\xbf\xed\xb2\x18\xd3\x94\xa7\x45\x9d\xdb\x4e\x00\x95\x21\x30\xca\xaa\xd7\x6b\x2d\x82\xe7\x06\x74\x43\x16\xd4\xe4\xa2\x8c\x8e\xcf\x90\x3e\x14\x7c\x49\x0c\xe1\x8f\x9e\xb4\x54\x2d\xb8\xa0\x7f\xaf\x0d\xc8\xd6\x6b\xd8\x59\x20\x2d\x28\x34\x08\xfd\xcc\xeb\xda\xb0\x47\x8d\x66\xa0\x72\x86\x44\x95\x85\x83\xa6\xfa\x79\x01\xca\xc7\x2c\x4d\x4c\x9e\x63\xc4\x45\x6c\xe8\xe7\x64\xbe\xac\xa1\x70\x05\x32\x0d\x64\xcb\x35\x48\x2d\x60\xdd\x66\x52\x46\x0b\xcc\xe6\xcd\x7a\xe4\x7f\xa5\x24\xdd\x13\x68\xc6\xd2\x1b\xbc\x50\x38\x1e\xcf\x65\x56\xe3\xd3\xcc\x8d\x16\xc9\x85\xb2\xa2\x36\x20\x8f\xe5\x7d\xe6\x50\xf3\xb8\x65\x63\x46\x17\xed\xf9\x16\xce\x97\x2b\x7b\xfc\xf6\xe0\x7e\x79\x8e\x78\x7d\x59\x3f\xaa\x90\x3f\xb0\xff\x6c\x06\xe1\xb3\x7a\x37\xbc\x0c\x2f\xe8\x1d\xfb\xf6\x74\x74\xb0\xa4\x5d\xa7\x6c\x0f\xad\x70\x2d\x07\x37\xab\x77\xc7\x75\xde\x8f\xd2\x79\x4b\x98\x77\xdf\x41\x18\x6b\x67\xf7\x6d\xe0\x96\xcc\xa0\x88\x06\x8b\xea\x52\xff\x9e\xd6\xd5\x92\x0f\x0c\xe6\xd1\xb0\x41\x5c\xb0\x0e\xa5\x1c\xf4\x68\x8b\xdb\xa9\x6c\x08\x55\xf7\xcd\x7d\xdd\xb6\x2b\x8d\xe1\x90\x96\xc1\x0d\xb0\xe8\x9b\x8e\xed\x99\x45\x1b\xe5\xc3\x02\x06\x42\xc1\x83\xc0\x28\x44\x08\x52\x89\x94\xc0\x80\xde\xe3\x4c\x4e\xd8\x17\xa3\xc5\x52\x69\xec\x45\x4b\xa2\x01\xe6\xa8\xcd\xd8\x07\xe1\x69\x13\x7c\xd5\x02\x1b\x1b\xa7\x3a\x04\xe1\x69\xaf\xfc\x49\x08\x83\x10\x55\x2f\x83\x17\x59\xd5\xbd\xb2\x49\x37\xd1\x21\x42\xb6\x80\x68\xac\xf3\x15\x53\x09\x48\x57\x9c\xd4\xda\x8c\x53\xce\x13\x82\x59\x9d\x5a\x5d\xf9\x75\xc9\x5b\x44\x43\x14\xa3\xb6\xfa\xb4\x66\x26\x52\xa2\x6d\x0a\x6c\x52\x0d\x83\x71\x61\x60\xa7\x54\x9e\x00\xc1\x18\x86\xba\xa3\xf1\x86\x80\xc8\x20\x3c\xf9\x53\x92\x74\x42\x9a\x98\x07\x1a\x77\x11\xfc\x24\x23\x40\x6c\x05\x6f\x0f\x01\x10\x95\xc9\x00\x9b\x3a\x16\xa6\x10\x34\xba\x86\xf3\x30\xfc\x2d\xbb\x98\xaa\x45\x25\xe8\xb9\xa9\x83\x0e\x75\xdd\x46\x63\xfd\x00\xda\x23\xe2\x0f\x44\x08\x6a\xb2\x43\x6d\x4f\xdb\x87\xb9\x4a\x03\xcf\x23\x1b\x80\xdb\x63\x09\x02\x51\x66\xa9\xd1\xce\x31\xe5\xaf\xa3\xdc\xeb\x80\x7f\x00\x1e\x8e\x39\x91\x81\x06\x08\x3d\x35\xc7\x8b\xce\x88\xd6\x12\x27\x4c\xab\xc0\xa1\xb6\x6a\x32\x70\x57\x82\xcf\x2d\x88\x11\x47\x82\x4b\x69\xc1\x0a\xa6\x1d\x39\x6c\xbc\xe8\x6e\x6c\x96\xc9\x3e\xc2\x50\xcf\x87\x5b\x2c\x53\x35\x67\xdc\x06\x35\x8a\xd1\x94\xf8\x8c\x9a\x5a\xb1\xb4\x2b\xa4\xc9\xed\x35\x24\x08\x96\xd6\x34\x07\xe4\x4f\x01\xf3\xd0\x41\x8d\xf1\x7d\x36\x08\xc0\x43\xb7\xd8\xe1\x16\xb2\x59\x71\x86\x25\x95\x4a\x44\x85\x20\x40\x7f\x37\x4d\x6c\xc4\x29\xb7\x6b\x68\x56\x0a\x2c\x9b\x11\x6f\x85\x9a\x37\x83\x18\x97\x74\xa9\x0f\x08\xa4\x03\x33\x7e\xc8\x57\x60\xd6\x14\x7f\x35\xc3\x34\xd1\xf2\x94\xe6\x2b\x91\x69\xdd\xef\x10\xd8\x3c\x09\x53\x55\x7e\x78\xd7\x08\xf8\xed\x49\x6c\x96\xd1\xec\xdc\xc9\xc1\xe8\x87\x8b\xab\x9b\xf1\xc9\xe4\x20\x8b\xae\x3a\x24\x8e\xbb\x75\x7c\x7e\x14\x67\x13\xe6\x63\x24\x9e\xa6\x1b\xd6\x12\xe1\x38\xce\xd2\x81\x0c\x3e\xef\xce\xf8\x7a\xdb\x9e\x8a\x8d\x61\x92\x72\x33\x1f\xe9\x57\x12\x5f\x61\xb5\x53\x70\xa5\x31\x78\xdd\xca\x89\x58\xb9\xc5\x53\x46\x4b\x8e\xac\x06\x11\xeb\x87\x72\xab\x9f\x6b\xbf\x83\xcd\x49\x80\xb5\x72\xde\x28\x89\x44\xca\xb4\xe1\x8b\x3d\x7b\xfa\x0c\xf6\x00\x8b\xd6\x03\x04\x68\x75\xbd\x6b\xd7\xe8\x4f\x68\x49\x19\x20\x4b\x9b\xe6\xf6\x36\x3f\x90\x2e\x3c\x36\xa7\xe7\xb7\x79\x96\xb9\x1f\x2f\x6e\xf3\xec\x0c\xa3\xbf\x34\x33\xd2\xe4\x5b\x68\xf2\x36\x64\x63\x0c\xd0\x3b\xdc\x4c\x85\x9f\x9a\xaa\x81\x9e\x15\xf5\x88\x6f\x2b\x77\x2f\xf1\x2a\xcd\xbe\xd3\xf6\x02\xec\xc6\xab\xc8\xd8\xb3\x23\xdd\x2d\x59\xcf\x58\x7e\x97\x79\x73\xf2\x49\x2f\xe8\xca\xf8\xec\xf6\x48\x83\x6c\x00\x60\x5a\x57\x5f\xbf\x9d\xf1\xf9\x59\xab\x0e\x24\xde\x41\x7b\x43\xd9\xd3\xce\x41\x21\xad\x8f\x76\x85\xa7\x34\x81\xe8\x13\x0f\xd2\xa5\x2a\x34\x0b\x39\x9c\xb0\xb0\xcc\x83\xb9\x33\xf5\x1e\x70\x19\x71\x94\xcd\x11\x67\x04\x71\x61\x22\x8d\x5e\x1c\x0e\x42\xac\x7e\x11\x6b\xa6\x16\x68\xcd\x53\xe1\xdf\x58\x7a\x8f\xdd\x7d\x72\x81\x1d\x1a\xc1\xe9\x99\x36\x56\x16\xa6\x34\x42\x7b\x2b\x41\x32\x5b\x10\x5e\x4c\x1e\x08\x43\x8f\xda\xee\xcb\x42\x27\x13\x16\xa0\xc0\xb4\x4a\xca\xbe\x53\x1e\xea\x41\x13\x5b\xf8\x14\xfb\x38\x51\xe6\x09\x92\x98\xda\x96\x9b\x37\xf0\x1e\xe0\xfc\x90\x9f\xb0\xdd\xe6\x83\x27\xeb\x9c\x1b\x96\xd5\x48\xef\x81\xd0\xd5\x62\x20\xc7\x95\x5b\x96\x7c\x5d\x91\x68\x1b\x0c\xf6\xa5\x23\xf2\x6e\x72\xb6\x84\x81\x3e\xcb\x71\x60\x97\x4e\x71\xe7\xfa\x29\xf6\x76\x43\x3f\x3b\x65\x42\xe8\x8e\xfe\x6c\x53\x07\x3b\xf6\xd3\xe5\x42\xcc\x04\x5f\xb6\xeb\xe2\xf3\xa0\x7f\x6f\x4a\x38\xda\x9c\xf7\xe2\x95\xc0\x7e\x37\xf7\xb2\x0e\xef\xbb\x49\xea\xfd\x6c\xee\x45\x0f\xed\x87\x2c\x67\x62\x28\x2d\x7d\x4c\xc7\x42\x6d\xc3\x77\x86\x77\x96\x8f\x6e\x38\x14\x4c\xe1\x14\xe4\xe2\x26\x53\x82\xac\x36\x64\xa0\xaf\xd5\x98\x5d\xb8\x3e\xab\x1c\xb6\x41\xe8\xd7\x66\x2e\xe9\xc9\x93\x0a\x2f\x7d\x9e\x6a\x31\xf7\xb8\x30\x5d\x1b\xa4\xd1\xbe\x30\x98\x4f\x80\xd3\xad\xb2\x75\x73\xd8\x61\x8b\x91\xd8\x4f\x82\x5e\xe1\x86\x6e\xec\x58\x2e\x43\x2f\xec\x90\x25\xf8\x0a\xb3\xd2\xca\x4b\x99\xbb\xf9\x0c\xf3\x9f\xf3\x0b\x6f\x69\x25\x07\xd5\xcf\xc3\x95\x47\xe1\x1d\x0f\x4e\x96\x25\x5e\x07\xd8\x2d\x7d\x0a\x12\xa2\xe0\x72\xa6\xcc\xff\x2b\x2f\x6a\xdd\x66\x0e\xb7\x68\x15\x7e\x62\x88\x7e\x58\xfb\x6b\x11\x27\x49\xd8\x13\x69\xd9\x4c\x5d\xcd\x6d\x7d\x14\xe0\x12\x43\xa7\xe7\xa3\xe3\x9b\xd3\x9f\xc7\x80\x4b\x5a\xf3\x14\x3d\x52\xa9\x2d\x84\x09\x03\x77\xa5\xa1\xc0\x35\x15\x63\xcc\x0f\x07\xf0\x2b\x40\x2b\xca\x74\xba\xa4\xda\x9e\xca\x06\x79\x0b\x12\xe1\xca\x61\xd7\xcc\x39\xd6\x0f\xc0\xb5\xed\x50\x71\x55\x00\xf4\x0d\xe7\x63\x0b\x33\x38\x6b\x64\x57\xe0\x5b\x10\x4d\x79\x5a\xe8\x5b\xa0\x66\x87\x66\x4d\xe5\xf1\xea\xb1\x6f\xd5\x87\x32\x9f\x00\x0a\x59\xba\x54\xaa\xc2\x65\x52\x9f\xf6\x99\x2d\xc1\x3e\x80\x6f\x4e\xdb\xee\x82\x86\x70\x8f\x54\x6b\x3b\xd7\x9e\xc2\xb5\x52\x05\xbb\xac\xd5\x6f\x5e\x5b\xfa\x4d\x40\x57\xbd\x75\x8c\xaa\x8b\xb9\x95\x01\xc8\xc3\xad\x10\x00\x24\xf2\xc0\x6b\x52\x14\xdd\x8c\x2b\x08\x0e\x47\x0a\xd8\x20\x8b\xc8\x8c\x09\xab\xd6\x1b\x9a\xf7\xd8\xae\x71\xde\xbd\xa6\xe9\xf8\x15\xb9\xf2\xa3\xb0\x1e\x91\x2f\x1e\xd8\x66\x8c\x51\x5f\xe8\x83\x14\xce\x95\xf3\xbf\xd6\x58\x01\xa0\x2e\x6c\x03\x11\xaa\x38\x95\x2d\xa3\xb0\x1b\xcf\x85\xbd\x32\x9f\xc6\x82\xda\x31\x5c\x0d\x99\xaa\xfb\xcf\xaf\x05\x27\xe6\x00\x3c\xe4\x36\x1e\x05\xac\xee\x01\xb1\x41\xab\x99\x6b\xc1\x11\x54\x23\xc3\x4c\x31\xb9\x90\xc9\x17\x0e\x0f\x4f\x3c\x6b\x6a\x41\xba\x79\x75\x27\x65\x31\x11\x8c\x60\xb5\x78\xbe\xf0\xe7\xf1\xae\x2e\xc3\x67\x0b\x85\x1e\xef\x85\x98\xac\x10\x16\xed\x18\x11\xed\x00\x1e\xce\x18\x9c\x4a\x46\x54\x85\xab\x2b\x40\x61\x5b\x3b\x2b\xcf\x8e\xf5\x14\x91\xdd\xf6\xf7\x4b\x93\x4d\xe2\x1d\x5a\xda\xe0\xc8\x13\x8a\xd8\xaa\x81\xcd\x97\x84\xaa\x89\xe5\xb4\x21\x24\x35\x5a\x7b\x8e\x1d\xd2\x7c\x62\x3f\xa8\x61\x11\x2d\x3c\x56\x1c\x6d\x68\x6a\xb0\x75\xd1\x52\xc7\x22\x4e\x88\x04\x25\xd2\x58\x0f\x05\x3d\xb1\xc9\x8a\x99\xb0\x1f\xf9\x23\x79\x20\x62\x80\xb0\x42\x4b\xae\x75\x03\x46\xc2\x72\x5a\x38\x9f\x58\x6b\x9c\xe4\x18\x9d\xe3\x25\x89\xc7\x70\xc3\x04\x60\x35\x6b\x4b\x59\x3f\x65\x55\xee\x12\xe4\xe3\xd8\xb2\x20\xb6\xa3\x13\x86\x23\xa8\x16\x02\xd1\x22\x40\x48\x52\x37\x30\x38\x51\xbf\xf7\x5e\xd4\xdf\x0f\xd1\x8d\xbe\x0a\xa9\xcc\xf7\x37\xc0\x40\xd7\xf5\x6d\xc2\xe6\x82\xa7\x2b\xaf\xeb\xf2\x29\x28\xd9\xc6\x9b\x5a\xe1\x45\x85\xce\x38\x17\x6a\x84\x63\x7d\xd1\x36\x6f\x9c\x9c\x35\xf6\xca\x9c\x0b\x79\x40\x61\xb8\x81\xf4\xfd\xe3\x03\x55\x16\x8c\x00\xdb\xa8\x9e\xec\x60\x7f\xde\xd8\x12\xd7\x9c\x04\x35\xcf\x1b\xc1\x39\x74\x49\x8d\xf0\xe9\xe0\x38\x70\x46\x76\x35\x2c\x2a\x7b\xad\xad\xb6\x02\x82\x83\x54\x93\x4b\xd7\xac\x7d\xfb\x34\xbb\x42\x2f\x2f\x53\xb1\xe2\x80\x2b\x4e\xd6\x0e\x8b\x65\xb1\xd2\x2b\xbe\x4a\x0d\xd2\x9c\x86\x61\xab\xca\x0e\x51\xa9\x3e\x63\x15\x2d\xb4\x86\x91\x61\x86\xf7\x91\xfe\x97\x13\xa4\x4f\x6b\xd1\x54\x8c\xe0\x38\x7c\x7b\x8d\xb5\xde\xda\x58\x35\x19\x84\x0e\x91\x00\xff\x4a\x92\xac\xa8\x7f\x05\x81\x5f\xf5\x5c\xe7\x38\x83\xf6\x1e\xba\xdd\x41\xe3\x04\x76\x7d\xca\x50\x50\x5f\xc7\xfa\xa4\x2b\x8f\x74\x2a\xe8\x56\x8a\xa5\xf5\x69\x90\x07\xc2\x54\x66\xa2\x2c\xf1\x0a\x51\x2d\xb7\xf5\xcd\x23\xe6\x64\x80\x1e\x5d\xf5\x70\x84\x51\x2a\xa8\x3b\x61\x60\x57\x34\x2c\x5f\x5e\xb1\x3f\x32\x31\x06\x83\xb2\x8a\x70\x40\x97\x65\xab\x8a\x44\x2a\xc5\x3e\x12\x0c\x2b\x9c\x50\x76\xaf\x5f\x66\xd2\xf8\x9d\xff\x58\x68\xf9\xc6\x85\x43\xd1\xe6\xd6\x74\xe3\xce\xdb\x61\x95\xeb\x19\x2b\x37\x1d\x05\xca\xe6\x01\xfe\xbf\xda\xac\x6a\x93\x8e\x5f\xf9\x64\x3b\x36\x81\xca\x47\x9d\x3e\xb1\xcd\xb3\x0d\x90\xe9\xad\xa9\x4a\x73\x48\x0c\x8b\x3c\xb0\x1a\x49\x98\x99\x61\x95\x73\xc8\xab\xa2\xa6\x5a\x8e\xd5\x50\xfe\xdd\xff\x65\x48\x90\xcc\xd4\xfc\x3b\xe2\x62\xc2\xcc\xe7\x03\xcf\x97\xa0\x7f\x90\xa5\x36\xd5\x24\x03\xfb\xfd\xe4\xc8\x4f\xb7\xd3\x2b\x6f\x46\xd7\x3f\xdd\x5d\x8d\xaf\x2f\x6e\xaf\x8e\x73\xca\xe5\xf1\xd9\xed\xf5\xcd\xf8\xaa\xf2\xbb\xf1\x7f\x8f\x8f\x6f\x6f\x4e\x2f\xce\xef\xfe\xeb\x76\x7c\x5b\xf3\x95\x6b\xe0\x6c\xf4\xc3\xf8\xac\x51\x49\xad\xee\x43\x1d\x5b\x2c\x2e\x14\x29\xcd\x58\x1b\xdc\xa5\x3a\x5d\xdb\x25\xa2\x7f\x07\x73\xf8\xd2\xcc\xeb\xe1\xc0\xfd\x65\x08\x42\x0f\xf5\x51\x76\x0e\x91\xec\x14\x4c\x98\xf7\x58\x79\xb9\xad\xf0\x5c\xba\x7a\x4f\xb9\xde\x7e\x40\xa3\x95\xad\xe9\xc4\xf3\x2f\x55\x58\xde\x67\x3d\x75\x8e\x4a\x58\x5b\x60\x9b\x97\xb6\xc2\x51\x61\x9a\xf3\x0d\xda\x31\x41\x17\xac\xc3\x26\x46\x19\x33\x6f\x89\xe3\xd5\x36\x5a\x58\x1f\xa8\xd0\x68\x26\x47\x9a\x7e\x41\x9a\xd0\x9a\xe1\x25\x8d\xcc\x07\x85\x4c\x19\x9b\x43\xb3\x24\x4c\x15\x5b\xcc\x2d\x6b\xbe\xe5\x05\x41\x3f\xfd\x39\xeb\x14\x98\xd9\xd6\x6c\x4d\x4b\x94\x5f\xf6\x0b\xcf\x75\x52\xde\xdc\x79\xd9\xb4\x53\x6e\x92\xbc\xbf\xf3\x55\x72\xb7\x12\x96\x37\x58\xde\x57\xb0\x0c\x57\xca\x1f\x3b\xfe\x1d\xdf\x58\x4f\x6d\x5c\xed\x91\x73\xf3\x7a\x07\x0b\xb8\xdd\x3b\x6b\x13\xc3\x36\xbc\xd2\x8d\x38\x29\x10\xed\xb4\x7e\x5f\x8e\xa8\xa7\xbd\x54\x86\xdc\x5e\x1a\x05\x85\x87\x60\x8b\x79\xea\x20\xc7\x65\x69\xea\x39\xd8\x74\x27\x3c\xe5\x0f\xb9\x7c\xba\xa5\xa9\x8f\x50\xa9\x89\x05\xf6\xde\x2e\x3b\x30\x5f\xa2\xb9\xb5\x36\xe6\x16\x1f\xca\x5b\x54\xae\x41\x5b\x7b\xae\x38\x98\x4d\xa0\xac\x2d\x3c\xbb\x41\xeb\xde\xb5\xdb\x46\x05\x3b\x81\x35\x9d\x82\xdf\x3e\xa3\x94\x34\xcc\xc5\x60\xa8\x85\x46\xf7\x20\x0b\x61\x1b\xd5\xcc\x5f\x9a\x47\xee\x1e\x45\x47\xc6\x13\x70\x14\xdc\x13\xeb\x95\xbe\x20\x96\x53\x0b\xf3\x6d\x5e\xe8\x60\x6e\x5e\x25\x95\x52\x65\x25\xfd\xed\x55\xb7\xb6\x5d\x78\x86\x92\xf7\x95\x83\x78\x6a\x1e\x25\x53\x1a\xc6\xef\x0d\x3d\x5c\x37\xdb\x7f\x70\x23\xfa\x83\xd9\x52\x69\x4d\xce\x40\xd0\x9a\x4f\x36\x44\x87\x40\xc2\x6e\x01\xca\x96\xe9\x41\xa2\x43\x94\xd0\x7b\x82\xbe\x83\x58\xd9\xe8\xf2\xf4\xbb\x01\xfa\x2e\xc4\xe3\x7d\xd7\x41\xfc\x65\x1c\x69\xb6\xdf\x96\x50\x09\xd4\xa2\x1c\xd4\xe3\x23\xa0\x72\x82\x6e\x8e\x02\x6e\x75\xc8\x07\x50\x44\x18\xda\x1f\x88\xef\xfb\x18\xb2\xf5\xd6\x6d\x92\x8d\xd9\x91\xd9\x99\x9a\x46\xb7\x57\x46\x0b\xef\x39\xae\xd9\x2c\x08\x37\xe0\x8f\x47\x9e\xfa\x3b\x23\xf3\x91\x35\x9b\xb7\x8f\xed\x57\x8d\x2a\x67\x4d\xb9\xc9\xac\x5c\x94\x4d\x1b\xef\xad\x6d\xb7\x16\x51\xf4\x51\xd5\x8c\xb8\x4a\x96\xfd\x2e\x7b\x89\x5d\xb6\x0f\x00\x49\xbe\x73\xdd\x6f\xb3\x63\xa3\x10\x05\xcd\xb8\x24\x3d\xad\xe1\x3a\x39\x9d\xe7\x3c\xda\xcc\xf2\xd7\xd1\xe3\x1e\xcc\xc9\x66\x97\xfb\xb5\x09\xd5\x18\xd7\x77\xb9\xaf\xc5\xae\x8e\x94\x65\x61\xe0\xd4\x40\x3c\x15\x5d\x12\x5b\xb3\x33\x0b\x2f\xd9\xf3\x0a\xdb\x0d\xae\x2a\xcb\x73\x6d\x5e\x22\xa2\x05\x7d\xa8\xc6\xb1\x36\x2e\xf0\x0e\x81\xb9\xf3\xd1\xe7\xf1\xc9\xdd\xf8\xfc\xe6\xf4\xe6\x2f\x77\xe5\x18\x5d\xfe\xeb\xab\xe3\x1f\x4f\x7f\xae\xaa\x72\x7d\xf7\x69\x7c\x3e\xbe\x1a\xdd\x8c\x9b\x6b\xb8\x36\xbd\xac\x8a\xe2\xce\x02\x6d\x78\x46\x58\x17\x3b\x3a\x2c\x97\xf4\x6d\xdc\x0c\x4a\xf0\x04\x51\x25\xd1\x03\x95\xd4\xa6\x2c\x58\x65\xef\xf6\xd4\x79\x3e\x2a\xde\xfe\x21\xc0\x2a\x0e\x4c\x26\x74\xf6\x12\x6a\x7d\xa2\xa1\x22\x68\xc3\x71\x2c\x36\x00\x00\x14\x54\x11\x19\x56\xbc\xc4\x4e\xd8\x07\x34\xb2\x4b\x5b\xd5\x3e\xe3\x48\xab\xa1\x44\x98\xde\x9b\x58\x9d\xef\xba\xaf\x7f\x9d\xcd\xb1\x2f\x79\x9e\x71\xee\xf9\x06\x4d\x6d\x6e\x41\xd8\x77\x0a\x91\xaf\xab\x84\x46\x54\x05\x3c\x80\x5c\xa0\x25\x66\x78\xee\xcc\x8f\x54\x12\xb1\x41\x7a\xec\x2d\x78\xb7\x0f\x2b\xb2\x0e\x27\x14\x5a\x4a\x76\xbb\x78\x1a\x1e\xc5\x2d\x40\xfc\xc9\x6c\xd0\x9a\x20\x40\x89\xaa\xa4\x6d\x97\xf6\x64\xbe\x6e\x40\x26\x59\x64\xa2\x8d\xfe\x61\x69\xaf\xbb\x47\x73\x71\xbd\x8e\x38\x62\xc5\x3e\x7c\xe1\x40\x62\x8e\xeb\x6b\x6f\x25\x39\xee\x36\x47\x9a\xaa\x9d\x58\xfb\x2b\x93\x91\x71\x57\x97\x0a\x64\x38\xb3\xf3\xbc\x9e\xfa\xb0\x5b\x35\x82\xdc\x24\x6e\xae\x44\x00\xf5\x8a\xb0\xac\x29\x43\x00\x7c\x20\xf1\x6b\x29\x46\x50\x4e\x59\xc9\x77\xee\x85\x2b\x11\x14\x3a\xf3\x7a\xca\x11\x6c\x9c\xb7\xd7\x9b\x93\x54\xd1\xd1\x16\x65\x08\x3c\x64\x16\x58\x07\xbb\x89\x7c\x48\x53\xa2\x71\x02\x12\xc9\xc5\x80\xf4\xa1\x6a\xe3\xba\x2c\x62\xf5\x72\xde\xe7\xc2\x58\x6c\x1e\x0b\x68\x3c\xf9\x6a\x4e\xf5\x42\x71\xfc\x40\x98\xda\x8b\xbe\x00\x4d\x54\x40\x8a\xdb\xf9\xcf\x0c\x8f\xd6\xe9\x49\x26\x26\x3c\xf3\x6c\x10\x78\x53\x02\x47\x40\xb8\x67\x6a\xc9\xd9\x0a\x72\x75\x31\x03\x3d\xb4\x76\x4b\x04\x3f\x2d\xcf\xcb\x06\x94\x8f\x9d\xed\x8c\x38\x30\x43\x10\xf0\x08\x2a\x3a\x77\xca\x72\xcb\xdd\xcc\x2c\x06\x36\x8a\xa0\xfc\x83\x51\x16\x8b\x6b\x6e\xde\xb9\xc0\xb2\xf8\xca\x8d\x4b\xbe\x45\x72\x4c\xae\x99\x4f\x44\x9d\x60\x85\xf7\xc2\xc9\xdd\x01\xab\x0c\x1d\xb9\x15\xc9\xc6\x0a\x57\xd7\x86\xb4\x30\x15\x49\xe6\x23\xc0\x48\x5f\x68\xc3\x00\x50\x02\x29\x04\xb9\x19\x35\x9d\xa9\x91\x03\xdd\x6b\x72\x3d\x65\x57\x6d\x6f\xb6\x4a\x75\x91\x4a\xa4\x11\xf0\x06\xe8\x13\x57\xbd\xb2\x96\x30\x05\x64\xa7\x8d\x7b\xc9\x5c\x1a\x9c\xcb\x97\x05\x9c\x4a\xe5\xbd\x5e\xbf\x7f\x76\x75\xa7\xe5\xf9\x5f\x9f\xcc\xab\x96\x93\xde\xb9\x01\xf4\xd9\x56\xdb\xfa\xca\x2c\x87\x8e\xdf\x81\x90\x0c\xa9\x04\x25\x90\xa5\x9f\xf8\xd4\x9e\xbc\xa4\xb3\x56\xf3\xc6\x8d\xa5\xaf\xd5\x93\x96\x1e\xb4\xc0\x2a\xcd\x1c\x78\x59\xd2\x4f\x10\xb9\x0d\x68\x72\x31\x1c\x97\xc6\xb2\x30\xfb\xaa\x42\x0a\xaa\xf3\x93\xed\xed\x86\x5a\x63\xe1\xde\x6e\x17\xa0\x30\x5d\x35\x40\x35\x2d\x30\x52\x49\x84\xf1\x9d\x79\x98\x7e\x05\x2d\x5f\x6d\x3c\xb1\xb2\xe8\x6a\x53\x7c\xbf\x54\xfc\xb5\x5a\xd3\x30\x4e\x4a\xf4\xee\x01\x27\x54\x6b\x7c\x43\x97\x95\xf5\x1e\xfd\x07\xd0\xec\xfd\x7b\x8d\xd1\x84\xe7\x44\xdc\xc5\x69\x2e\x38\xbf\xa9\x53\x97\xfa\xa1\x93\x54\xad\xab\xb3\xdb\x72\x06\x4f\x82\xa3\xfb\x2e\x19\x7f\xfa\xf7\x35\xcd\x6e\x3e\x81\x81\xb7\x3a\x7f\x11\xd4\xe4\xd3\x91\x42\x3e\x9d\x8d\x65\x86\xef\x37\x71\x47\x06\x2c\x8c\x81\xb7\xc0\x86\x60\x47\xba\xcf\x43\xf4\xd1\x50\xd5\xc0\xa5\x66\x5e\x11\xf1\x34\x89\x27\x8c\x7c\xd5\xe6\x7e\x0e\x85\x54\x41\x2f\x62\xd1\x70\xf6\x4d\xd5\x92\xa0\x40\x74\xb9\xd3\x0d\xf3\xe2\xc9\x8f\xe5\x35\x2d\x0f\xb9\x7a\x93\xed\xa4\xcb\xbf\x92\xd2\xc7\xc7\x5a\xa1\x65\x2a\x59\x0f\x90\x1f\x64\x61\x5b\x24\xe4\x81\x08\x3c\x27\xb6\x34\x72\x40\x25\x83\xb7\xa8\x84\x7c\x59\x02\x52\xbc\xed\x72\xde\x25\x7c\xc6\xd3\x6e\x63\x5b\x0c\x7d\xa3\x5e\xd4\x3e\x3e\xd5\x5e\xa6\xdd\xf0\xd5\xa1\xa9\xae\xc0\x7c\x8d\x72\x1f\x74\x48\xb0\x94\x74\xb6\x0e\x8a\x8f\x7b\x1f\x3c\x40\x24\x3c\x63\x51\x9e\xd9\xaa\x52\xd7\xc8\xe1\x3a\xf7\x03\x1a\xdc\x1d\xbf\x63\xed\x67\x07\x26\xa1\x71\x98\x10\x03\x8c\xb2\x25\x00\x71\x4b\xd2\xdb\x5d\x61\x3d\xb6\x67\x16\xdc\xb2\xbf\x8e\x39\xbc\xec\x76\xe8\xc3\x46\x40\xfa\x46\xf9\x50\x5c\xfb\x13\x92\x90\x57\x52\x13\xaf\xbc\x11\x1a\xe7\x3a\x4b\xbe\x7e\xb6\xf5\xdf\xad\x3f\x5b\xc4\xa5\x6a\x20\xec\x7b\x58\xef\x17\x8e\x6e\xd4\xf4\xee\x13\x69\xe3\xdd\xd9\xb8\x17\xb7\x3a\x57\x75\xc2\x71\x87\xc9\xde\x5b\x48\xf3\x89\x07\x54\xb7\xd6\xd7\x44\x49\xa7\xb8\x06\x3b\xdd\xf8\x4c\xec\x39\x3d\x74\x68\xc6\x0c\x1b\xd8\x61\xc1\x5f\x49\xb0\xcd\xf6\xee\xca\x12\x06\x3d\x9d\x38\xdc\xbc\x5c\x5d\xf6\x5b\xd6\xdf\x2d\x3c\xa2\xb6\x8d\x7d\xdc\xfe\x4f\xab\x9a\x95\x26\xa6\xa5\x71\x71\x5d\xe6\xa2\xe9\x9e\x73\x29\x38\xbb\x23\x5f\xb5\xcd\x29\xb7\x85\x24\xdd\x4a\x22\xd1\xe8\xcb\x35\x92\x6b\xa6\xf0\xd7\x0f\x68\x72\xf0\xd9\x10\xee\xa2\x1f\x79\x2a\x24\x3a\xc1\xeb\x43\x3e\x3b\x5c\x72\xa6\x16\xe8\x33\xfc\xaf\xfd\xe8\x91\x90\x7b\xf4\x17\x82\xc5\xe4\x60\xc2\x20\xef\xdb\xd6\x5e\xf4\xa4\x38\x0b\x0c\x61\x35\x69\xb9\x7c\xff\xf8\xaf\x8e\xcc\x57\xbf\xe6\xfb\xa3\x3f\xfe\x2b\xfa\x3d\xfc\xbf\xff\x0f\xfd\x7e\x72\x50\x73\x2f\x75\x03\x37\x65\x6c\xcb\x95\xad\xdd\xd3\xe8\x9e\xcf\x66\x77\x8a\x2e\x89\x61\xf2\xb8\xc3\xa2\xb6\x3a\x5b\x47\x70\x35\xb5\x04\x23\x86\x22\x31\xcb\x78\xb4\x2f\x35\xe1\x47\xa7\x84\xf9\xa2\xfe\x26\x01\x91\xe5\x89\x35\xa8\x84\xa7\x48\x8c\xf8\x6c\xd6\xc5\x07\xe8\x12\xac\xca\xf4\x65\x59\x20\x3b\xa4\xcb\xf1\x46\x5d\xe8\x8a\xe0\x9b\xe8\x88\xcb\x3e\x92\x6f\xcc\x2a\x86\x01\x3e\xa9\x45\x7c\xcd\xc5\x4e\x22\xfc\x9e\x94\xfc\x65\x9d\x1c\xe0\x8e\xf9\x23\x64\x5d\x82\x08\x19\x17\x3e\x43\xc1\x04\x34\x2c\x29\xc6\x84\xdd\x5c\x9c\x5c\xbc\xbb\xc7\x4a\xf0\x39\x66\xef\x3f\xa0\x51\x1c\xdb\x02\x3d\xc8\x3a\xfd\xf4\xe6\x59\x10\x41\x86\x28\xac\xb6\xc1\xf4\xc4\x55\x7a\xb4\x43\x7d\x98\x0a\x12\x55\x19\xae\xd5\x87\x5d\x4f\xdf\x89\x7f\xa4\x06\x7a\x94\xa3\x37\xf1\x2f\xc8\x88\x03\x60\xac\xf7\x64\x6d\x0b\x72\x16\xc7\xbb\x4d\xcd\xa1\xeb\x15\x89\xb4\xf5\x6b\x8a\x94\x89\x98\xc0\xf4\x98\x32\xef\x54\x2a\x17\x7c\xad\x3c\x54\xf9\xc2\x6b\xbb\x00\xa2\x8b\x49\x5d\x3b\xec\x14\x53\xa7\x2f\x93\x0d\x2e\x31\xb0\x50\x00\x52\x60\x2d\x36\xb6\x44\xf6\xda\x1a\x50\x61\xe9\x9a\x54\x12\x71\x38\xc3\x91\x9e\xbd\x42\x29\xb9\x50\x54\x55\xcd\xe3\x0d\x96\xf7\xfb\x75\x34\xed\x4c\xaf\x41\xe3\x2c\x1d\xdd\xec\xc6\x72\xdd\x62\x7b\x89\x28\x2c\xef\xeb\x20\x28\x9d\x19\xb1\xf5\x54\x38\x74\x56\x53\xff\x6c\xcb\x41\xd6\x9d\xad\x59\x02\x8a\x69\x90\x90\xb2\xc4\x2b\x53\xd6\x05\x2e\x18\x9a\x90\xb8\x88\x04\x2e\xf6\x7f\xd3\x36\x30\x59\x2d\x81\x9f\x08\xb0\xa6\x4b\xad\x36\xc7\x10\x9b\xc3\x6c\x6d\x0e\x92\xbe\xb0\xb0\xbc\x97\x9e\xe3\x05\xc9\x25\x4e\x92\x01\x12\x24\x85\xba\x3c\x03\x24\x49\x32\x3b\x74\x89\x84\x31\x4a\xf8\x9c\x46\x38\x41\xd3\x84\x47\xf7\x72\xc2\xf4\x0d\xc2\xe6\xe6\xe2\x5b\x09\x1e\x11\x29\x83\x2b\x37\x0b\xbf\xae\x04\x8f\xd3\xc8\x10\x5b\x9b\xc2\x12\x54\x2a\x1a\x15\xd8\x8c\xb5\x44\x84\x32\x74\x11\x06\x03\x03\x10\xab\x4b\x53\x57\x56\x50\x62\x80\xa8\xa9\x2b\x8d\x04\x89\x52\x38\xa1\x7f\x37\x75\x0d\xf1\x03\xe5\x95\x98\xd3\x70\xc9\x76\x51\x0d\xed\xf2\xdc\xa9\xfc\x69\xd8\xb0\x9f\x8f\xed\x63\x70\x86\x9a\x76\xcc\x55\x7e\x3b\xfb\xdd\xe0\xb7\xb9\xcf\x67\x72\x9b\x22\x23\x7f\x76\x39\x63\xe6\x27\x2e\xac\xfa\xca\x70\x57\xd0\xe5\x1a\xb4\xd5\xa6\x3d\x7d\x6c\xf8\x94\x6d\x9a\x76\xe0\x80\x83\xd6\x1d\xe3\xac\x25\x9c\xd0\x57\xc4\x83\xde\x24\x6e\x7a\xf4\xdc\xeb\x6b\x64\xe0\x49\x8e\xb1\x44\xab\x24\x9d\x53\x96\x95\xd7\xd4\xf2\x70\xc2\x80\x9b\x48\xbf\xa4\xc0\x98\x5b\xde\x51\xaf\x98\xd8\x78\x3f\xc2\xb1\x23\xbf\xb1\x9b\xe4\x2e\x9b\x3c\xbf\x6f\x5d\x19\xca\xad\xb3\x59\x44\x55\xb8\xde\xd6\x9b\xd7\xdf\x3e\xd0\x8c\x63\x2b\x78\x51\xed\xda\x6e\xed\xa5\x28\xf4\xaa\x84\x63\xa1\x33\xb3\xc9\xa0\x6f\x10\xaa\xb4\x45\x7a\xea\x7a\xf4\x22\xc8\xe0\xa6\x85\xbc\xc4\xca\x14\x5a\x21\x4b\xae\x0c\xb3\x8c\x21\x79\xb1\xdc\x2f\x96\x3b\x66\x9a\xf0\x29\xdc\x2b\xc0\xff\x02\xe3\xce\xd1\xf3\xd9\x71\x93\x18\xbd\x0b\xae\x09\x0f\xd7\x79\x5f\x17\x71\xdf\x1f\x3c\xb9\x98\x3c\x5a\x0b\x52\xce\x13\x42\x0c\xd1\x65\xe6\x6e\x2a\x8e\x6a\x86\xb5\xe4\xae\xab\x09\xdd\x0d\xd2\x9c\x5b\xfd\x3d\x40\x9a\x0b\xc3\xa8\xe1\x8a\xe1\xfb\x28\x5b\xdb\x3c\xa8\x33\xde\xde\x8e\x34\x00\x46\xa3\x7f\xe4\x16\xc7\x6d\xb3\x75\xd5\x12\xbd\x2e\xb8\x76\x81\x50\xe4\x65\xe1\xda\x85\xce\xbc\x66\xb8\x76\xa1\xab\xaf\x17\xae\x5d\xd1\xd1\x16\x70\x6d\xe3\x6e\xbf\xd3\x9b\xba\x9d\x50\x58\x09\xae\xf8\x34\x9d\x5d\xc3\x6d\xd2\x86\x2e\xd5\x08\x67\xa7\xe7\xd8\x2c\x19\xe8\xad\xd1\x81\xba\x29\x62\x21\xaa\xbb\x30\xe4\x96\xa8\xee\x9c\x48\xeb\x51\xdd\x1e\xd5\x5d\x9e\x97\xd7\x88\xea\x2e\xac\x79\x3b\x54\x77\xd5\x92\x6f\x11\xc3\xc8\x35\xf3\xcd\xa0\xba\x0b\x33\xfa\x9a\x51\xdd\x85\xae\xee\x0f\xd5\x5d\xbd\xb2\xdd\x50\xdd\x95\xd7\x7f\xfd\xfe\xd9\x15\x73\x07\xfc\x59\xcf\x8c\xea\xce\x0d\xa0\x47\x75\xef\x58\x43\x23\xbf\x05\x6d\x0f\x80\xc0\xd9\x02\x85\x8b\xb2\xae\x01\xd7\x0d\x2a\xed\x1e\x76\xd4\xd3\xc6\x56\xc1\x0b\xd5\x56\xeb\x1e\xe5\xe6\x41\x5a\x4a\x51\x7d\xfd\x39\xac\x6d\x50\x67\xb6\x67\x7a\xd9\x95\x83\xa3\x30\xc9\xde\x7b\x05\x0b\x57\xb7\xe5\x2a\x88\xf0\x76\xd8\x80\x96\xb2\x60\x5b\x0a\xc0\xfa\xd2\x93\x86\xdb\x71\x3f\xcd\xfe\x2e\xfc\x6f\xed\x84\xec\x5a\x79\x24\x5a\xa5\xdb\xa0\x63\xe7\xdb\x3d\xb6\x24\x4b\x2e\x36\x85\x1f\x6b\xcc\x59\x2e\xf0\x7c\x13\x22\xb7\xed\xec\xed\x3a\x6b\x8e\x8e\xb3\x9b\x7f\xe3\xc6\x3d\xd5\x68\x70\xb9\xd2\x2c\xa1\x07\x1c\x74\xd2\xca\x18\x8b\x0f\x71\x6d\x19\x45\xa9\x49\x3c\x28\xbf\x10\xdc\xab\x92\x88\xc3\x20\x93\x20\xef\xd7\x2c\xf7\x20\x37\xef\x4e\x41\xdb\x61\xda\x53\x51\x1b\xe3\x6f\x21\x63\x47\x86\xc8\x59\x6b\x7f\x21\x61\x42\x71\xa7\x4d\xd7\x15\x78\xb4\x76\x26\xb5\x29\x98\xdd\xc5\x31\x4c\xff\xee\x17\x7a\x46\x13\x82\x70\x14\x11\x69\x58\x4c\x2c\x06\xc4\x10\x56\xa6\x22\xd9\x65\x55\x29\x9b\xc3\xb8\xb5\x32\x19\x94\xe8\xf0\x9b\xc7\xdc\x19\x0b\xc1\xd3\xf9\xc2\x59\x59\xae\x8a\x63\xd5\x5a\x7e\x29\x13\x34\xbf\xb1\x80\x40\xa1\xae\x53\x71\x13\x74\x8f\x98\xba\x29\x79\xe6\xa8\x69\xd5\x38\x3a\xec\x8e\x1c\x76\x28\x3b\xfe\xce\x8f\x6d\xb4\x12\xc8\x14\x9a\xb0\x51\x0e\x65\xe4\x28\x71\xa6\xeb\x0c\xad\x60\xae\xf6\x70\x93\x41\xd9\x62\x6b\xbd\x40\x9d\x20\xfd\x17\xa8\x21\xf0\x90\x8d\xa7\xba\x98\x29\x00\x2d\x48\x7c\x88\xa3\x75\x94\xd0\x28\x50\x49\xe7\x02\xaf\x16\x4d\x3b\xb1\x87\xfd\xbf\x14\xec\xbf\x25\x59\x7b\x23\x54\x24\xa4\x3b\x7f\xd3\xe9\x08\xe5\xed\xd8\x67\x22\x74\xd8\x92\xbb\xf5\x67\xef\x3b\xf1\x2d\x25\x46\xd4\xef\xbc\x17\x06\xa1\x97\x3b\xf6\x92\xe9\x10\x15\xf7\xc5\x76\xb3\xfb\xb2\x49\x10\xad\x86\x51\x0b\x35\x6c\x91\xff\x90\xab\xad\xe5\xef\xfd\x0d\xd9\x10\xf5\xb3\xf4\x4a\xf6\xe0\x3e\xf1\x51\x75\xd2\x66\x33\x46\xaa\x8b\xaa\xd8\x0d\x2e\xe5\x17\xea\x6d\x41\xa6\x7c\xb7\xb7\x84\x4d\x8d\x82\x1a\x00\x0b\x9e\x40\xbd\xf0\xdc\x6c\xf9\x17\x78\xe4\x85\x9f\x20\xb7\x18\x50\x1c\x16\x54\xd7\x8c\x6c\xa2\x09\x1c\xe5\x17\xf1\xdb\x00\x48\x6d\xb0\x87\x3a\x82\xa4\xc2\x49\xdd\x0d\x28\xb5\xa3\x7d\xd3\x0d\x2c\xd5\x54\xec\xb7\xb8\xde\x5b\x84\xf5\x4a\xc4\x1e\x7d\x50\xd8\x07\x85\xab\xe7\xe6\x35\x06\x86\xcb\xc5\x2e\x5b\x06\x87\xeb\x96\x7f\x1f\x3b\x69\x8f\x41\xe2\x17\x0e\xbd\x36\x46\x5d\x83\x0d\xf6\xb2\xb1\xec\xa6\x30\xf6\xe6\x6d\x56\x19\x97\xab\x5f\xd3\x4e\xe1\xe1\x0d\x39\x0e\xee\x2d\xbb\xc6\xf0\x3c\xee\xfe\x49\xe3\x78\xde\xcf\x18\x3c\xd1\x32\x96\x97\x25\x06\xf4\xf1\xbc\x27\x8d\xe7\x55\x4c\xf4\xe6\x98\x5e\x4e\x41\x78\xd6\x40\x8c\x7b\xf3\x73\x04\x63\x36\x29\x55\xe9\xf4\xee\xc9\xcf\x51\xe5\x98\xdb\x1e\xa7\x2f\x7e\x6d\x1d\x31\x3a\x22\xcb\x29\x89\x63\x30\xba\x14\x47\x1c\x12\xaf\xb2\x2d\xc0\x88\xd9\xac\x59\x89\x7c\x0c\x35\x82\x68\x6c\x00\x99\x2b\x0c\x5c\x2f\xfe\x0e\x35\x28\xbd\x09\x83\xf5\x4d\x12\x22\x9c\xce\x2e\xd0\x3b\x49\x59\x44\x42\x3d\x5e\xa0\x98\x13\xc9\xbe\x53\x86\xfb\x1f\xb3\x35\xba\x67\xfc\x31\x21\xf1\x1c\x56\xa8\xd8\x99\x43\x44\xc9\x00\x51\xe5\x1f\x13\x04\x47\x0b\x2d\x2e\x27\xba\xef\xe0\xd6\x36\x97\x3d\xb1\xcf\x0a\x9b\x79\x1e\x98\x0c\xf2\xfd\x10\xa1\x53\x86\x66\x58\x1b\xc5\x32\x9d\x66\xed\xc7\x5c\x2b\x08\x70\xfb\x87\x03\xcf\x1a\x79\xb2\x40\x5c\x65\xe0\xad\x46\x7b\xd5\x1b\x60\x94\x50\xbc\x93\x63\xfc\x01\xef\x92\x0a\xf8\x39\x95\xca\x94\x53\x84\xa2\xda\xb6\xbf\x16\xd4\xec\xd3\x9e\x81\x25\xc8\xa4\x10\x33\x1e\xd7\x96\xb2\x2f\x0c\xa5\x6b\x5f\xb2\x28\x86\x25\x27\xb2\x26\x11\xb4\x6b\xa6\x3b\xe6\x8f\x4c\x2a\x41\xf0\x12\x3a\x22\x6d\x55\xd8\x99\x89\x57\x18\x67\x03\x15\xe6\x06\xee\xb2\xc4\x67\x94\xdd\xeb\xd5\xcd\x12\xbd\x39\x64\xd1\xea\x37\x57\x2c\xda\x0f\x94\x61\xb1\x53\xe1\x39\xc3\x44\xbf\x95\x29\x3f\x5d\xd7\x65\xc2\x2b\xbc\x29\xed\xbd\x8b\xe1\x2e\xe9\x52\xdf\x8b\xfa\x75\x08\x44\x9d\xa1\x95\xc3\x48\xe1\xb9\x9e\x9f\x05\x49\x56\x01\x49\xd4\x0a\x0b\xe5\x2b\x5a\xd8\xec\xcf\x88\x2f\x97\x29\x83\x84\x5d\x6b\x0b\x3c\xda\x34\x3f\xeb\x17\xca\x1a\x1f\x4e\xd8\xa9\xfa\x4e\xea\xf3\xc5\xd9\x3c\x59\x23\x1c\x3f\x50\x99\x25\xdd\x47\x9c\xc9\x74\x49\x84\x7d\x05\x95\xa6\x24\x82\xa9\xd6\x8e\xb0\xdb\x2b\xba\x6f\x5a\xf1\x72\x8c\x85\xf6\x6e\x98\xa3\x29\x99\xe9\x4b\x77\x85\x85\x74\x3e\x88\x0a\xff\x81\x5d\xdc\x58\xcf\xd5\x8b\x9d\xc9\x9f\xc3\x63\x87\x96\xd9\x09\xc5\x56\xa7\x3d\x2a\x9e\x4f\x57\x47\xa4\xfe\x6c\x4e\x4b\x83\x42\xcd\x17\x93\x9d\x85\x93\x52\xb9\x85\xa2\xa9\xe7\xaa\x3e\x48\x38\x34\xfa\x3d\x4e\xa1\x31\x9d\xeb\xe4\x2d\x2a\x0c\xd0\xf6\xda\xb8\x00\xc2\xb3\x69\x8b\xf8\x4a\x85\x15\x8d\xac\xee\x94\xf1\xea\x9a\xa7\xeb\x97\xb6\x2d\xe1\x69\xdd\xf2\xca\x08\x27\xe5\x15\xae\x9f\xcb\x6b\xf3\xfb\x66\xd9\x67\x8f\x9b\x69\xbb\x11\x06\x11\xf1\x24\xe9\x92\x57\x5f\x18\xf9\x71\xf6\x78\x73\x8f\xb2\xf7\xe8\x05\x70\x6b\x01\xa7\xc6\x70\x01\xe0\xc4\x6a\x16\x52\xd9\x55\x0a\x7f\x64\x64\xe8\x1a\xb1\x74\x39\x25\x62\xc2\xf8\x0c\xe8\x16\x92\x3a\xb3\x71\x25\xf8\x92\x76\x49\x4c\xba\x80\x65\xbe\x72\xc1\x9e\x0d\xde\x2c\x17\x12\xd2\xa7\xc8\x6e\x2f\xfb\x46\x53\x31\x86\x19\x3d\xa3\xe1\x0c\x2d\xf1\x6a\xab\x09\x2f\x15\x6d\x2f\xcd\xf4\xd2\x98\xae\x76\xf6\x20\x1b\x9a\x00\x89\x01\x4c\xf2\x23\x5e\x67\x60\x91\x2e\xc7\xe9\xda\xe8\x22\x44\x66\x45\xaf\xed\x2e\x0b\x4e\x8c\x0f\x96\x99\xf5\x32\xb3\xd0\xe6\x04\x1d\x57\x6d\xc3\xce\x67\xc9\x8d\xf9\x29\x95\xec\xf0\xd8\x87\xfa\x75\x97\xdb\x30\x7f\x18\x82\x16\x11\x74\xa7\x79\xaa\x3e\xe7\x76\xce\xde\xe7\xa8\xd0\x0e\x32\xb6\x9c\xf3\x95\x5f\x56\xb7\xfa\x0c\x73\x66\xb7\x75\xab\xc9\xda\x11\x7f\xd6\xad\xca\x84\x7b\x63\x45\x51\x89\xe0\xbc\x77\xa9\x5c\xb3\xd9\x86\x98\x69\xdd\xc5\xa8\x95\x7c\x36\x4b\x38\xd6\x96\x9a\x8d\x5d\xcf\x68\x42\xe4\x10\x9d\x56\xd8\x13\x61\xe1\x27\x93\xde\x0a\x91\x10\xa7\xef\xa4\x82\x5a\x54\x06\x11\xc4\x6b\x35\x88\x5a\xd2\xe1\xcc\xe5\x20\x88\xee\x33\x6c\x60\xd0\xe4\x17\xda\xc4\x5b\x98\x06\x28\x38\xa8\x96\x58\x29\xdd\x25\xb0\xed\xa8\x32\xbe\x88\x98\xac\x08\x8b\xfd\x03\xdc\x54\x24\xc5\x91\x29\x17\x9b\xf5\xaa\x66\x49\xf7\xc1\x7c\xd2\x3e\x46\xef\xde\x5a\x28\xcb\xfc\xbb\xf0\xbf\xc5\x1e\xde\xe4\x5b\xef\xdc\x3b\xaf\x97\x77\x77\xee\x7f\x84\x47\x9d\x33\x09\xa3\x99\x20\xe0\x6f\x5c\x7a\x5c\x20\x8b\x89\x90\x8a\x73\xb8\xa1\xae\x4f\x7e\x3a\xba\x3d\x45\x44\x45\xc0\xc3\x3a\x61\x91\x7c\x18\x68\x85\xf6\x97\x94\x28\xfd\x71\x1d\x09\xcf\x92\x30\x09\x92\x80\xb6\xe5\xe3\x76\x13\xa3\xff\x7b\x92\x7f\xbe\x61\xcb\x07\x95\xa3\x0d\x61\x15\xec\x5d\x47\x8c\x01\xdb\x14\xb2\xb1\x73\x25\x33\x73\xeb\xc1\x79\x42\x30\x1b\x57\xb1\x9f\x6d\x11\x0d\x66\x7f\x4b\x59\x47\x35\xe9\x38\x7b\x28\xe8\x45\x8d\x16\xb6\x5c\x61\x41\x65\xb7\xe6\xdd\x33\x95\xad\x6f\x12\x22\x6e\x5e\x31\x9a\x9a\x99\x42\x19\x51\x1c\x52\x82\x10\x10\x21\x7e\x3f\xd9\xbb\x1e\x6e\xf9\x60\x36\x82\x87\x86\x13\xf6\xd9\xf9\x3f\xb3\x4f\x65\x56\x28\x7a\x39\x05\xd2\x95\x14\x6c\xa6\x7c\x2b\xd0\x6c\x4c\xa5\xff\x00\x72\xf1\x65\x9a\x28\x43\x8d\x34\xa3\x0c\x27\xbe\xa3\xe6\x9b\x2a\x29\x21\x30\x8b\x16\x50\x7f\x6b\x97\x08\xed\xec\x8e\x24\x5d\x74\xc7\xd3\xd9\x38\x91\x7a\x7f\x47\xf7\x35\xa7\xf3\x0f\x8e\x52\xad\xc3\x02\x65\x83\x01\xcd\xcd\x11\xc4\x18\xab\xc4\xf8\xe9\x12\x43\xb4\x44\x10\x38\xd9\x8a\xe0\x00\x03\xa6\xd4\xab\x68\x75\x6b\x5b\x4e\x0e\xca\x40\x3a\xb7\xdc\x14\xde\x82\xb0\x9a\x30\x91\x32\xc8\xa8\xf6\xfe\x73\x8c\x24\x11\xd4\x38\xb2\x23\xce\x8c\x0e\x60\x9d\x27\x73\x2d\x26\xb4\xe6\x67\x0a\x26\x32\xb0\xa8\x78\x2a\xb5\x0c\xc1\x4b\xa2\xf4\x05\xf5\x0e\x38\xff\x4c\x04\x63\x80\x56\x82\x2e\x15\x7d\x20\x9e\x06\x21\x5c\xb9\xca\xcd\xbc\x4b\x74\x6b\x45\x04\x56\x6d\x59\x15\xaa\xde\x7e\xe1\x5a\xa8\x3c\xb0\x09\x99\xa9\xbb\x4a\xbf\x4b\x83\x89\xa1\x5b\x64\x71\x0d\x8a\x8c\xce\x17\x7b\x68\xb1\xfd\xa9\xff\x93\xf5\x8b\xe9\xa3\x1e\xdc\xf8\x82\x73\x65\xf6\x5b\x26\x93\x90\x9b\x4d\x50\x17\xec\x4b\x0d\x13\x93\x5e\x54\x0a\xab\xaa\xcf\xf0\x3d\xe3\x8f\xcc\xdb\xd6\x5a\x6d\x18\x63\x20\x07\xf3\x82\xc5\xc6\x29\xcc\xa9\xde\x78\x9e\x73\x6c\x43\xaf\x24\x8f\x23\xac\xd5\x0b\x0c\x8a\xc9\x1a\x65\x8c\x52\xb9\xe7\xda\x5c\x6f\xc6\xee\x74\x67\xd7\x0c\xd8\x92\xa8\x28\xb2\xb2\xb6\xb1\xad\x41\xe9\x41\x1e\xe0\x5e\xd5\xaf\x1a\xa2\x2f\x4e\x93\x83\x30\x50\xc6\x84\x66\xeb\xec\x26\x78\xed\x8a\x9e\x57\x4d\xec\x3e\x00\xfe\xfb\x8e\xcd\x34\x4f\xb0\x47\x6e\x56\xcc\x72\xee\x42\x65\xcc\x58\x58\x2d\x63\xc7\xf6\xc2\xb6\x0f\x5d\x93\x66\x4c\xc2\x47\x60\x55\x31\xe5\xf4\xc1\x5b\xc5\x59\xb2\xfe\x5f\x66\xb1\x00\xd8\xef\x2b\xef\x5a\x2e\x0f\xeb\xc3\xd4\xe7\x07\x7c\x70\x8c\x2b\x7d\x29\xce\x68\x92\x40\x8c\x65\x88\x46\xc0\x0b\x06\x8c\x4f\x5a\x91\x77\xc1\x3b\x3a\x67\x7c\x53\x88\xa1\x66\x33\x45\xc1\x66\xba\xae\xdf\x4c\x12\x76\x93\x8f\x2a\xec\x69\x47\xed\x01\x82\xa7\x65\x0b\x2e\xa7\x91\xb5\x07\xde\x75\xb8\x8c\x5f\x22\x5c\x57\xea\x6e\x68\x1a\x57\x77\xfd\x53\x8a\x05\x66\x0a\x82\x50\x96\x3d\x56\xd8\x40\x2f\x94\xd0\x26\x5f\x21\x5a\xcb\x8c\x61\x07\x1f\x85\x8b\xeb\x9c\xee\x73\xfa\x40\x18\xa2\xf1\x00\xd1\x21\x19\x0e\x2c\xfb\xae\x4c\xa7\xd9\x2f\x17\x58\x22\x3c\x61\x25\x20\xd9\x10\x8d\x12\xc9\xed\x13\x84\x45\x09\xf0\xf0\x05\xf1\x32\xbf\xf3\xad\x9b\x08\x0a\x28\xdb\xa5\xcc\x9a\xe7\xf6\x8b\xe0\xc1\x09\xc3\xd2\x78\xa5\x13\x38\xe9\xd9\xe7\x1b\xea\x9b\x3f\x69\x9e\x71\xe9\x1a\x7a\xb2\x45\x32\x84\x72\x4d\x0b\x04\xbf\x80\x85\xc9\x00\x7e\x13\xe6\xb7\x33\x7a\x87\x55\x42\xb0\x54\xe8\x8f\xef\x3b\x05\x67\xdc\xf8\x32\xe1\x6a\x4f\x6f\x06\x43\x71\xa1\xef\x3a\x9a\x60\xa0\x21\x42\x18\x0a\x23\x7b\x60\xca\x40\x2f\xb3\xe2\xe8\x81\xca\x14\x98\x0d\x03\x58\x95\xe1\xa6\xa3\x4a\x3a\x9a\x15\xe3\xa7\xac\x11\x23\x8e\x29\xd6\xfa\x2f\x6d\xb7\x2a\x36\xd6\xc0\x4c\x39\x35\xca\x2e\x20\x9b\xb3\x20\xf4\x42\x6b\xb9\x56\xb0\xba\xb8\x4d\x40\x81\x35\x4a\x92\x7c\xe0\x57\x2b\x38\x31\x61\x7a\xc0\xc0\xcb\x38\x44\x61\x11\x51\x99\xc5\x0a\xf3\xd4\xcc\xfe\xac\x68\xc5\x79\xc2\x3c\x3a\x35\x6c\xbb\x52\xd9\xa9\x32\x17\x9f\x51\x07\xae\x78\xfd\x99\x21\xc8\x6c\xa1\x0b\xd7\xb3\x8c\x37\xb8\x57\x4a\x26\x7a\x83\x6a\xbc\xef\x17\xb4\xd7\x94\xab\xcd\x5d\xb8\x65\x1f\x79\x85\xf5\x5c\xb3\xb8\x81\x6a\xb1\xc3\xa2\x66\x41\xeb\xe7\x72\xe0\xe6\xba\x7e\x1a\x03\xa2\x6c\xb3\x10\xcc\x10\x5a\x4e\x74\x80\xdd\x4a\xe3\x00\x63\x12\x04\xe0\x01\x4a\xe4\xe4\x9e\xfd\x65\x1d\x1f\xd6\xdb\x1e\xfe\x20\x1b\xbf\x1b\x8a\x8f\x42\x97\x07\x5e\xaf\xeb\x8d\xe2\xbf\xe1\x88\xb0\x68\x6d\xde\xe4\x78\xfd\x32\x3d\x0e\x94\xbd\x20\x83\x13\x83\x6d\x5e\xa9\x1d\x5a\xae\xdb\x21\x1a\xc3\x3d\xe3\xa8\x6f\xf1\xcc\xf9\x17\x82\x1f\x4f\x98\x36\x4c\xf4\x15\x2f\x4d\xa7\x5d\xfb\xf9\x2d\x5e\x75\x02\x0c\x74\x7f\x27\xd7\xcc\x72\x33\x39\x40\x9d\x31\xe1\x32\x07\xa0\x0d\xc8\xb4\x46\xe3\xf9\x07\x14\xf3\xe8\x9e\x88\x23\x41\x62\x2a\x3f\x80\xab\x5c\xd5\xfa\xe8\x96\xda\xd8\xde\x59\xd1\xd8\x96\x7d\xde\xbc\xdf\xa2\x8f\xcc\xbd\x45\xb4\x86\x30\x03\x6b\xc2\xa1\x0a\x0d\xd4\xd0\x52\x5f\x20\xc2\x94\x58\xaf\x38\x65\xca\xa1\x24\xa2\xc2\x44\x38\x43\x43\xeb\x6c\x75\x58\x1c\xb1\x8f\x90\xda\x96\xc3\xbe\x59\x10\x49\x5c\xfc\xc0\x0c\x4a\x71\x64\x58\xa1\x8d\xb8\x58\x61\xb5\x90\x80\x8b\xcc\xcf\x81\xb5\xb9\xe0\x51\x3d\x43\x78\x05\xe1\x07\xe3\xa4\xc8\x1e\xf2\x80\x3f\xa9\x68\x92\x4c\x18\x23\x24\x96\x08\x78\x8a\xbe\xab\xc4\xdf\xea\x47\x07\x08\xc7\x31\xfa\xdf\xef\x3e\x9e\xfd\xe5\x66\x7c\x77\x7a\x7e\x79\x7b\x73\xf7\xf1\xf4\x6c\xfc\x7e\xe0\x3f\xbc\xb8\xbd\xf1\x9f\x1a\x07\xcb\x03\x11\x68\x89\xef\xc1\xc2\x63\xd2\xa8\x7f\x00\x8b\x0b\x7b\xea\xd2\x9d\xf4\x37\x92\x38\xa8\x89\x55\x53\x7c\xc2\x8b\x5d\xc3\x0d\x29\x89\x1d\x6c\xdf\x2b\xff\x48\xf3\x1e\x74\x9b\xc7\xbf\xc2\xa9\x81\x4b\xc2\x94\x96\x31\x16\xb3\x96\x99\xbe\xd9\x86\x23\x6c\x4e\x59\x5d\x40\x9c\xb0\x87\xa7\xd4\xe1\x7f\x22\xeb\x9f\xb5\x75\x7d\x89\xa9\x68\xbd\xf7\xc6\xec\x81\x0a\xce\x60\x68\xde\xab\x95\x55\xe8\x20\x30\xe0\xc2\xa1\x92\x46\x17\x86\x90\xcb\xaa\x16\x74\xc1\x66\xb4\x16\x5e\xf5\x62\xc3\x1d\x19\x37\x31\xf9\xaa\x04\xb6\x05\x41\xa5\x15\x37\xf8\x01\xd3\x04\x00\x33\xee\xa2\xc9\xf6\xa0\x29\xfc\xf0\x01\x91\x04\x4f\xb9\x00\x18\xad\x89\xf0\xb9\x26\xec\x84\x01\x05\xba\x6f\xa8\x0e\xb8\xc1\xc5\xd3\x15\xe4\xc9\xdd\x43\x97\x5c\xb4\xb9\xc9\xf5\xcf\x60\x16\xf8\x4a\x9b\x64\x05\x21\x6a\xaf\xd9\x19\xc1\x86\x09\x59\x82\xa4\x91\xe9\x4a\x8f\xc3\x82\x41\x92\x24\x47\xba\xa5\xcf\x80\x1c\x5a\xe7\x78\xf6\x4b\xce\xd0\x4f\x7f\x96\x68\x9a\xaa\x09\xcb\xb7\xc1\x19\xd4\xdf\xf9\x01\xab\x68\xf1\x7e\xc2\x2e\xb4\xc1\xf8\xd3\x9f\x6b\x12\x72\x62\xac\xf0\x5d\xf5\xfe\xaa\x9f\x93\x13\xac\xf0\x19\xc7\x31\x65\xf3\x63\xf3\x68\xf5\x5c\xfc\x30\xbe\x19\x7d\x40\x17\xd6\x1a\xf7\x35\x63\xb3\x34\xae\xa0\x21\x90\xad\x30\x10\x27\x10\x40\x2a\x33\x2f\xc5\xad\xb3\x0b\x14\x21\x7d\xf7\x4c\x18\x4c\xa5\x11\x90\x54\xa1\x15\xb7\x0c\x29\xda\xc0\xe2\x48\xa4\xcc\x3a\xa5\xad\x4f\x50\xcf\x0e\xec\x48\xbf\x18\x56\xb5\x02\xd5\xa4\x2c\xb7\x27\x0c\x4c\x6d\x0f\x5a\x4f\x78\x84\x13\x88\x96\x1f\x06\xde\x39\x6d\x80\xf3\x14\xa0\xc7\x10\xa6\x62\xeb\x3c\xa8\xc5\xf1\xd7\x65\xfa\x55\xb8\x50\x60\xca\xc3\x3a\x5a\x5a\x97\x25\xd7\xc2\x63\x38\x61\xa7\x33\x13\x4c\x4f\xcc\xec\xe8\x07\x09\xd3\xdd\xf7\xd3\xa2\xbf\x75\xa2\x05\x28\x6e\x4d\xc6\x2b\x8e\xc0\x11\xcf\xd6\x00\x85\x02\xea\x0c\x0e\x41\x99\x4c\xd0\xda\x4d\x59\x5a\x45\x7f\xbd\x85\x8f\x4d\x98\x09\xe2\xe7\x16\xc6\xce\x56\xf1\xf5\x9c\x01\xc6\x20\xbb\xfa\xbc\xb2\xb0\xb2\x98\x03\xab\xb7\xaf\x04\x39\x74\xa5\x10\xf4\xa7\xc1\xa4\xea\xdb\x72\x88\xae\x42\x53\x39\xe6\x51\xba\x74\x39\xad\x80\xd1\xb6\xc1\x69\x7b\x21\xfa\x2d\x62\x2e\xe9\xca\x2d\xff\xbb\xf0\xbf\x95\x7a\xe6\xe5\x8e\x05\x74\xfc\xb6\xba\x5b\xe5\x5b\xca\xb5\x46\x99\x22\xf3\x62\x7e\x66\x17\xaa\xa0\x73\x40\xb4\x41\x1d\x6f\xa8\xac\xc3\x91\xad\xc8\x6c\x13\x58\x56\x3c\xfe\x4e\xa2\xd3\x4b\xad\x70\x68\x03\xd3\x9f\x93\x54\x2a\x13\x9a\x05\x78\xaa\x79\xda\xc0\xe3\x06\xe8\x7b\x34\x49\xbf\xff\xfe\x9f\x23\xf4\xd5\xfd\xf1\x6f\xff\xfa\xaf\xff\xfc\x6f\xdb\x14\x8a\x82\x76\xb3\x39\xb2\xe9\xe3\x45\x0d\x24\x5c\x81\xb2\x34\xd9\x61\x15\xec\x21\xa9\x9b\x7e\x6b\x7d\xd7\xc2\x9b\xab\xbe\xce\x30\x13\x09\x9e\xdb\x53\x28\xc3\xd3\x83\x72\xc7\xc7\x9c\x72\x38\x30\x44\x0d\xf2\xa7\xd8\xeb\x96\x56\x81\xfe\x5f\x0d\x49\x6c\x77\x7a\x37\x6f\x87\xed\xa0\x89\xd7\x66\x75\x23\xe8\x9d\x75\xb7\x29\x08\xd7\xbd\x77\x97\x10\x4f\x62\x22\x4c\x9f\xbc\x87\xcc\xfb\xed\xe0\xfc\x92\xaf\xab\x84\xc7\xae\x98\xbe\x24\x2b\x0c\xf7\xb5\x3e\xaf\x43\x34\x61\xe3\xaf\x58\x8b\xd7\x81\xe3\x80\x37\x05\xcb\x20\xd0\x31\xc3\x11\x41\x46\x35\x7e\xf7\xf5\x83\xfe\x6c\x80\xd6\x1f\x00\x83\x31\x40\x7f\xff\x60\x53\x9f\xb0\x50\x77\xfa\xa3\xf7\x4e\xb7\xb5\x4d\x40\xaf\xa9\x44\x93\x83\xa3\x07\x2c\x0c\x09\xe8\x91\x65\x09\x3a\xb0\x02\xd0\x93\x63\x85\xda\x70\xc2\xf9\xbd\x45\xa8\x94\x9e\xb4\xff\x19\x9a\x1d\xee\x03\x15\x66\xf5\x2d\xd8\x48\x6b\x6e\x87\xf0\x03\x82\x86\xab\x29\x1a\xfe\x4d\x72\x86\x86\x6b\xbc\x4c\xec\xa7\xee\x5b\x0b\xa0\xc1\xd2\xc2\xc0\x63\x2d\xd4\x1e\x28\x4f\x65\xb2\x36\xbe\xc9\x1f\x12\x3e\x85\x71\x7d\x76\x63\x35\x10\x14\xe8\x68\x76\x49\x64\xf7\x8a\x1d\x08\xd5\x16\x33\x8e\x4d\x3a\x18\xd4\x17\xd0\x3f\x31\xb1\xf4\xaa\x61\x7d\xf5\x7d\xfa\x6f\x13\x89\x85\x59\x71\xc0\x75\xe3\x8f\xd5\x93\x65\x71\x97\x33\xf4\x15\xbd\xb3\x62\xe8\xbd\xbe\x0b\x2c\xe0\xc7\xcc\x43\xd5\x0b\xd6\xfe\x05\x7f\x09\x5e\x40\x19\x32\xa9\x08\x0d\x4f\xfe\xfd\x68\x38\x1c\xfa\xa7\xcf\xf5\x58\xfe\x2f\xa2\x4a\x92\x64\x66\x5a\x72\x37\xcd\x7a\xc2\x3e\x6b\xbb\x25\xf4\x17\x67\x09\xbc\x40\xfa\x1d\xf1\x04\x1d\x66\x3e\xd4\x98\x47\x12\xfd\x93\xd6\x24\x83\xb9\x84\x0f\xb5\xe9\x54\x7d\xae\x6c\xed\x87\x67\x3a\x58\xd6\x07\x5d\x3c\x5a\x61\x5a\xa6\xb7\x25\xb1\xd6\x40\x62\xfa\x40\xe3\xd4\x6d\x06\xbd\x75\x8e\x6c\xea\x26\x94\x65\x50\xe4\xab\x82\xaf\xaa\x07\x57\x0d\x06\xab\x56\xe2\x4a\x22\x37\x4b\x63\x35\xfb\xba\x66\x02\x6c\xfe\xa2\x95\x0e\x66\x9c\x83\x30\x60\xa1\x2f\x18\x16\x72\x25\xc8\x74\xb9\xc4\x62\x7d\x94\x1d\xb7\xf2\xe6\xcc\x28\x73\x40\xce\x24\x6e\x02\x20\x68\x9a\xd8\xb3\x65\x71\x03\x41\xf5\xb8\x85\x87\x0e\xa2\x98\x44\x34\xb6\xa0\x45\x6c\xf8\xfc\x08\x8b\x78\x6c\xf7\x75\x96\x71\x91\x57\x2c\xfc\x6f\xca\x2a\x85\x4b\xa5\x92\x99\xff\x8b\x29\x93\x86\x65\x7f\xe1\x1e\xae\x11\xe1\xfc\x4e\x2a\x2d\x2c\xe7\x1d\x02\x92\xa7\x17\xd7\xee\x99\xf6\x17\x2f\xcc\x43\x5e\xb5\xc6\xce\x30\x73\x4e\x00\x81\x1f\xb3\x2b\x18\xd0\x14\xc6\x21\x92\xfa\x7c\x14\xf3\xef\x63\x7e\x49\x13\x7d\x73\xc1\x1e\x1f\x4e\x58\xee\xe3\x01\x22\x09\x5d\x52\xe6\xf1\xa1\x46\xbe\xf3\x99\xd1\x72\xef\xa9\xd2\x4b\x26\xe3\x7b\x2d\xc2\x5c\x6a\x5f\x60\xfa\x8c\xd8\xda\x6d\x1d\x1f\x0b\xb2\x46\x7f\x2a\x75\xbf\x32\xb3\x58\xeb\x9c\xba\x89\x43\xab\x37\xd2\x60\xe3\xc1\xf9\x9d\x30\xdd\x9a\x3b\x4b\x73\xc2\x88\x70\xbc\x73\xae\xbd\xa0\xb9\x43\xd0\xd3\xa9\x03\xdf\x43\x0b\xf0\x0e\x9c\x2a\xae\xc5\x4d\x84\x93\x64\xed\xd5\xd4\x0a\x25\x65\x5c\xa8\xb9\xd2\x1d\xab\x09\x25\x3c\xee\x18\x8f\x49\x47\x42\x86\x8a\x9a\x16\xd6\xf1\xeb\xe2\x85\x82\x18\x3c\x2d\xc8\x89\xba\x04\x02\x22\x65\x47\x67\x68\x65\x71\x18\xdb\x0e\xd0\x42\x3e\x6e\x5b\xa0\x2f\x93\x69\xd0\x8a\x33\x0b\x82\xfc\x87\xdc\xdc\xe7\x0b\xd8\xec\xa4\xa3\xc7\xdb\xb9\x83\xcd\xd8\x23\x98\xf6\xac\xd4\x25\x9a\x0b\x9e\xae\x7c\x92\x90\x83\x4b\x9b\x65\xb0\x37\xda\x29\x9b\xf1\x0f\x56\xab\x3e\xa3\xec\xde\xdc\x85\x4f\xb5\x46\xbe\x54\x4c\xf0\xb9\x93\x60\x66\xc6\x0f\x6d\xbd\x30\xdd\x6b\xa9\x70\x74\x6f\x08\x3c\x9a\x4a\x0d\x75\x2d\x96\x94\xdd\x97\x69\x92\xd8\xd7\x66\xe2\x33\xa3\x32\x7d\xa0\x18\x61\x74\x7b\x75\x5a\xfd\xee\x7b\x5a\xf6\x9e\x57\xcb\xce\xfc\x06\x81\xff\xf9\x89\x76\xc2\xb9\x15\x08\x67\x48\x6e\xab\x7b\x17\x40\x1d\x85\x42\x41\x76\xef\x18\xae\xd3\x32\xe8\x6e\x59\xb1\x53\xab\x07\x9f\xbd\xf8\xc4\x3e\xfc\x59\x3f\x5b\xbd\x22\x9f\x01\x0c\xea\x33\xe6\x96\x98\xe9\x01\xba\xb7\xd6\xf8\x88\x8c\x58\xdc\xaa\x4b\xb7\xab\xad\x3a\x64\xde\xd8\x48\x5e\xe6\x5b\x70\xaf\x72\xad\x3c\x1a\xa7\x11\x4e\x8c\xc1\xa5\x16\xa0\x88\x0f\xd0\x75\xb4\x20\x4b\x0c\x18\x83\x65\x5e\x21\x07\xbd\xe4\x5d\x82\xc5\xdc\x68\x09\x92\x28\xf9\xbe\x62\x85\x33\x76\xa5\x1d\x56\x78\x0b\xfa\xbf\xd0\xdf\x0e\x29\x03\x4d\x12\xc0\xf7\x32\x9f\x12\xee\x85\x93\x7b\xbf\xbb\x3b\xb4\xb9\x6a\x1e\x81\x1b\x53\x98\x7a\x6d\xb1\x56\xc5\xea\x73\xe5\x76\x64\x9c\x0c\x8b\x5c\x3b\xda\x49\x43\xbe\x61\xfb\x36\x25\x40\x0f\x50\xdf\x87\x9d\x39\x26\xc3\x2e\x58\x4a\xbb\xba\x1e\x4c\xd8\xc8\xfd\xc4\x63\xd3\x41\xbf\x11\x26\x4a\x0a\xa8\x24\x83\xc1\x03\x1d\x23\xa8\x36\x64\x07\x57\x33\x08\x86\x97\xbb\xc8\xfa\x5b\xad\xe3\x78\x72\x10\x63\xdd\x39\x65\xd7\x8d\xa3\xe6\xcd\x96\x2d\x78\x87\x97\x5f\xbb\x21\x16\x88\x87\xab\x5e\xbc\x49\xf8\x8e\x7d\xde\x91\x6d\x28\xe4\x3a\x36\xc8\xa5\x64\x9d\xe1\x64\xf4\x8c\x1b\xbd\xb4\xf0\xb2\xdc\x61\x9d\x19\x7c\xfd\x6e\x0e\x3d\x63\xc6\xec\x1d\xa1\xa2\x16\x84\x81\x26\xd8\xbe\x65\x48\x52\xe8\xee\x8d\xc3\x19\x10\x3f\x33\x5c\x7c\x70\x21\x65\xd4\xf2\x62\x59\x5b\x35\x08\x14\x3b\x9f\x4e\xf6\x3c\x95\x48\x62\x45\xe5\x8c\x56\x6a\xc8\x61\x56\xc3\x2e\xb3\xde\xa9\x3e\xa0\x5b\xe6\xa6\xad\xea\x01\x6f\x43\xf4\x91\x0a\xa9\x82\x21\x29\xee\x93\x12\xea\x2a\x0e\x69\xe3\xf6\x29\xe3\x4b\x6e\x04\xc1\xef\x1b\x83\x6e\x1e\xdc\x38\x44\xa3\xcc\xcc\x36\x69\x19\xc6\x80\xde\x30\x22\x92\x48\xb2\xcd\xe6\x6b\x65\x93\x80\x3b\x1a\x36\x10\x02\x71\x29\xf5\xe7\x19\xb7\x87\xef\xe6\x23\xe4\x0f\xe0\x7b\x52\x57\xa7\xb0\x6b\x8d\xcb\x8d\xa5\x2d\x47\xde\xe4\xe0\xc6\xea\xd8\xa6\x83\xed\x8f\x5d\x96\x09\x43\x67\x47\x7a\xca\x6d\xd1\x68\xe3\x1a\x9c\xc1\x3e\xb4\xb9\x34\x8f\x0b\x2e\xc3\x73\xe6\xd6\x0f\x16\x53\x89\x94\x38\x78\x22\xa0\x3e\xfd\x04\x9b\x20\x11\xe3\x61\xaa\x0d\xf4\xda\x1f\x52\x03\x6b\xf0\xeb\x8d\xec\xdd\x60\xa6\x01\xdc\x35\xae\xa9\xf2\x69\xce\x05\x84\x77\x38\xce\xf7\x64\x53\x5d\x8f\xa6\x45\xf3\x27\xb7\xe6\x1a\xeb\x4a\x64\x52\x7b\x96\x3a\xe1\x5f\xc1\xdb\x40\x23\x48\x92\x37\xd7\xee\x0a\xd3\xaa\xc8\x86\xf5\xaa\xbd\x56\xba\x87\x7d\xf3\x3c\xd8\xe1\x6e\xc9\xf1\x90\x98\xa7\x9d\x0f\x90\x3f\x3a\x6e\x87\x7d\x30\x22\x64\xfe\xcd\x76\x6c\x08\x66\xf3\x48\x53\x0d\xcb\xf4\xab\xdb\x1e\xc9\x4d\xb1\x71\x0b\xdb\xc0\xaf\x84\x20\xb1\x49\xa6\xe2\x33\x4f\x60\x61\xe2\xfb\x86\xeb\x86\xcf\x2a\xfe\xd0\x56\x8c\x7c\x1f\xd6\xf0\xb6\xef\xc8\x72\xaa\xea\xb7\xe0\x7e\xf8\x12\xdc\x54\x3c\xe5\x7d\xe8\xce\x4c\x78\x1f\x76\x99\xf8\xea\x4d\x95\x85\xdf\x0d\xa4\x1c\x0b\x9e\x32\x97\x6f\xce\x19\xe1\x33\xf0\x8a\x42\xa0\xc1\xd9\xfd\x90\x8a\xca\xb8\x0a\xe0\xe3\x82\xac\x0c\x78\x11\x34\xd4\xfa\xe9\xde\x91\x73\x61\xd3\x3c\x3f\x05\xe7\xc2\xae\xf3\x6e\x0f\xce\x0b\x4d\xf8\xae\x99\xf4\xe6\x28\x75\x10\xb3\xf0\xfb\x8d\xc6\xb8\x97\x03\x60\x7d\x87\xac\xb9\x26\x5b\x12\x30\x13\xe4\x50\xf1\x43\x48\xbb\x81\x64\x0e\xc3\x82\x52\xc7\x0d\x08\x4e\x8c\x2e\xd7\x81\xfe\x7d\x8b\x7e\x1a\xa0\xcc\xd7\xa0\xa3\xf6\xee\x95\xc8\x55\xcc\x00\x65\x86\x41\xf1\x5b\xb0\xcf\x36\xde\x1c\x1d\x5d\x1c\xe1\x52\x36\xfb\x38\x6d\x86\x7f\x81\xa1\xc2\xc7\x37\x71\x20\x04\x86\x08\xc0\x20\x0b\xbe\xe4\xfa\xda\xe6\xa9\x0c\xbe\x34\x68\x22\xb8\x6c\x1a\xea\x85\xac\x4c\x9a\xed\xcb\x8d\x46\x1f\x2d\xfd\x95\xd1\x1d\xc3\x1f\x6d\xa6\xe9\x09\x46\x32\xcd\xd3\x9c\x6c\xe8\xbf\xe7\xa7\x68\xde\x37\xe0\x40\x5b\xd2\xf9\xc2\xb2\x2f\xda\xac\x73\xfa\x77\x6d\x41\xea\x2d\xe5\x81\x3b\xbe\x3e\xb2\x89\xb4\xc3\x86\x62\x55\x65\xa7\x6a\x03\x18\x5d\x58\x56\x3a\xd4\x89\x0e\xb2\x30\xb3\x78\xb9\x9e\x64\x1f\xb3\x74\x39\x42\xfe\xc1\x87\x8c\xfa\x73\xbd\x22\x03\x34\x4d\xe1\xfb\xf3\x8b\x9b\xd0\x37\x44\x19\x7c\x7d\x18\x2d\x48\x74\x0f\x10\x37\x23\x14\xcd\x74\x39\x0e\xd7\xe9\x7a\xc2\x32\x82\x39\xc5\x9d\xa3\x63\xed\x33\xf8\x3d\x8b\x05\x17\x28\xa6\x72\x95\xe0\x35\x22\x5f\x15\x61\x26\x32\x56\x51\xac\x5f\x6f\x96\xed\xcc\x16\x60\xc0\xb3\x52\xc0\xe9\x61\xf0\x2f\x37\x08\x4f\xf4\xed\x61\x1e\x55\x6a\xc7\xce\x9c\x0a\xbb\x44\xc8\xea\xb8\x1c\x03\x7a\x7b\xb3\xa2\xa1\xab\xd4\xa7\x53\xb0\x42\x5e\xc4\xe4\xc0\x01\x4f\xc0\x83\x32\x71\x4c\xd8\xfa\xdf\x86\x49\x97\x88\x07\x12\x4f\x58\x3e\x61\xc5\x5e\x65\xd9\x2a\xa3\x8c\xe3\xab\x4e\x74\x76\x27\x12\xd2\xf3\xec\x79\x6e\x1a\x83\x77\x00\xd2\xcd\xb2\x73\x3d\xb6\xa2\x81\x73\xac\x9a\x4b\xfb\x09\xc8\xb1\x5a\x3b\x3f\x32\x52\x31\xcb\x08\x64\x29\xff\x88\x09\xdf\x27\x00\x7a\xf4\x1b\xd3\xc3\xf1\x4d\xae\x9e\x8f\x39\xdb\x18\x74\x09\x10\x59\xd5\xc6\x84\x39\xe0\xdc\x2c\x4d\x12\x93\x7f\x5d\x5b\x79\xdf\xa4\xe7\xb8\x18\xef\xcb\xe5\x40\x78\xbb\x16\x05\x2c\x6c\x41\x9d\xfa\x55\x0c\x50\xa7\x68\x9d\x31\xfb\xc3\xe6\x25\x4c\xa6\x80\x05\x72\x0c\x4c\x80\x50\x9d\x13\x85\xb4\xde\x11\xa7\x89\x41\x82\x01\xb4\x16\x72\x7d\x70\x92\x20\xaa\xe4\x84\xf9\xd4\x24\xc3\x8c\x0a\x57\x81\xc3\xde\xc6\x56\x17\x84\x57\x40\xb3\x96\xa7\x17\x2e\x08\x1a\x51\x95\xeb\x12\x78\x2a\xd7\x21\x6d\xc9\x6a\x45\xb0\x41\x2d\xb8\x42\x71\xa1\x36\x58\x5c\x06\x1b\xe2\x07\xfa\xd4\xfa\x8a\x8d\xfb\xd8\xbd\x86\x3e\xb7\xf3\xa2\x0c\xd1\xc8\x8c\x4e\xab\x82\x8e\x43\xd4\xf4\xd6\xa2\x25\x6d\x3c\x41\xeb\x5b\x4a\x7a\xc2\x7b\xaf\x51\xaf\xb0\x50\x34\x4a\x13\x2c\x92\xb5\x96\x2e\xb3\x34\x41\x74\x16\xd0\xa1\xc2\x22\x98\xcc\x14\x28\x6b\xc1\xe1\x8e\x70\xa8\x17\x89\x97\x24\x00\xe9\x59\xc3\x33\x09\x9c\x88\x86\x6d\xc3\x78\xa7\x74\x5b\xef\x87\xe8\xa4\x48\x7e\x0b\xc7\x22\xc8\x68\xa5\xd2\x48\x40\xdf\xdf\x00\x5c\x62\x48\x74\xe9\x4c\x2b\xbb\xdf\x05\x07\xaf\x8e\x65\x1d\xcb\xfb\x8e\x1e\xca\x1b\x2c\xef\x37\x7a\x29\x4f\x2b\xc1\x65\x37\x40\xde\x9d\xf3\x5b\xfa\x13\xb1\xa1\xa2\x58\xc7\x4e\x86\xd9\xc0\x5b\x74\xf4\x4b\xc0\x8e\x5d\xec\xec\xb2\x81\x7d\x15\xd6\xb1\x63\x57\x03\x66\xa4\xee\x1d\x0d\x76\x4e\xe8\x8f\xae\x9d\xd9\xcd\xc6\xe5\x97\x1c\x47\x11\xd2\xfd\xd2\x8a\x3d\x31\x11\x8c\x42\xe1\x05\xe8\x83\x25\x33\x02\x3e\x19\x7f\xd8\xa6\x04\x25\x94\xdd\x3b\x3c\xab\x5e\xf9\x01\xc2\x59\xeb\x70\xf8\x4c\xef\xcd\x66\xae\xd1\x6c\x3c\xde\x60\x3f\x21\xe1\x76\x98\xa0\xca\xc5\xf5\xe3\xae\x78\x7e\xf3\x46\xac\x1a\x47\xfb\x65\x69\x0c\xdb\x79\x25\xd6\xc5\xea\xcc\x05\x93\x2f\x26\xbf\xde\x34\xbf\x97\x0b\x5c\x5d\xb5\xa4\xa0\x05\x1e\x10\x96\x2e\x0f\x3e\xa0\xff\x97\xcd\xcc\xed\xf9\xc9\xf8\xe3\xe9\xf9\xf8\x24\xd8\xc0\x07\xff\x75\x3b\xbe\xcd\x7f\x72\x75\x7b\x7e\x7e\x7a\xfe\x29\xfc\xe8\xfa\xf6\xf8\x78\x3c\x3e\xc9\xff\xee\xe3\xe8\xf4\xac\xf0\x3b\xfd\x51\xfe\x47\xa3\x1f\x2e\xae\x6e\xf2\x1f\x5d\xff\x74\x7a\x79\x99\xff\xe8\xe6\xf4\xf3\xf8\xe4\xee\xe2\xf6\xc6\xcd\xf5\xff\x04\x33\x0c\x89\x0c\x10\xdd\xf5\xfd\xaf\x9c\xa2\x7d\x90\x1b\x76\x8d\x3f\x07\xd9\xca\x33\x41\x09\x8b\x93\x75\x56\x9a\x53\x1f\xba\x42\x90\x32\x14\xe9\x74\x49\x78\xba\x0b\x66\x40\x9b\xbe\xfc\x41\x9b\xd4\x09\xb2\xad\x59\xd4\x55\xa1\xb4\x75\xf0\x56\x41\x94\x28\xbb\xc1\x1a\x51\x16\x4a\xac\x3d\x8e\xa7\x11\x3f\xe0\xd3\x30\xec\x4b\xd0\x4a\xdf\x84\xf5\x7d\x81\x0b\x57\xa4\x2b\x45\xa7\x65\x47\x53\xc7\xf4\x84\xee\x96\x9d\xc9\xd1\xab\x46\x57\x9f\x57\x0b\x3a\x47\x16\xb6\x23\x23\x0f\x78\xa6\xdb\xaf\xc0\xa5\x7f\xa4\x7a\xeb\x1d\x3b\x82\x41\x6d\x32\x2b\xcc\x6a\x92\xaf\x3b\x92\xa0\x67\x8c\x48\x22\x2b\x45\x60\x6f\x2a\x67\x45\x64\x19\x9d\xdb\x58\xd6\x96\x14\x8d\xc5\x59\xdd\x66\x4b\x96\x16\x30\x22\x56\x2c\x42\x81\x66\xfa\xc9\x6f\x99\xc6\x3d\x6f\x51\xa7\xa0\xfa\x19\x56\x1a\x9b\xb6\x66\xae\x65\xa0\x7a\xaa\x0d\xd5\xed\x99\x95\xde\xab\x9e\x19\xa5\xb6\x27\x69\x77\xf2\xa8\xbb\xa2\x51\x20\xa4\x0e\xc8\xba\x4d\x7d\x40\x20\x21\x82\x66\x33\x5f\x9c\xd5\x2c\x8c\x1c\x78\x20\x31\x3a\x0c\x8b\x00\xc4\x87\x80\x1f\x9c\xb0\x3a\x0b\xb3\x82\x40\x3f\xdc\x01\x97\x8e\x1f\x71\x97\xb5\xaf\x98\xfd\xfa\x23\xe8\x26\xbb\x1d\xa8\x02\xb9\x9f\x0f\x51\xbd\x2b\xd3\xae\xcb\x14\x1b\x17\x12\x9c\x2d\x4f\xfc\x58\x07\xf1\xf2\x77\x61\x37\x8f\x6b\x2b\x6f\x2b\xce\xa7\x95\x1a\x9d\x65\x81\xa5\xc1\x20\xba\x8a\x4a\x19\xeb\x7f\x56\xee\xa1\xce\x68\xf1\x24\x61\x7b\xcc\x3c\xab\xb3\x20\x07\x06\x11\xe0\x2b\x37\x85\xcc\x4a\x9e\x25\xae\xdb\xc6\xf7\xab\xe1\xf9\xb8\xb0\x93\x7b\x20\xb0\x12\x9c\x6a\x9d\x7e\x95\x60\x03\x24\x5a\x60\x69\xb6\xb4\x73\x52\xe2\x29\x4d\xa8\x02\x14\xa6\x31\xef\x0b\x33\xcc\x05\x5a\x62\x71\xef\xb2\x7f\x70\x96\x03\xd0\xb4\xe9\x77\x0c\xa4\x65\xe4\xa2\xcf\x19\x4a\xcb\x8e\x6c\x5b\xdf\x40\xb6\x2d\x6d\x18\x2d\x5b\x0e\x53\xfe\x46\xf1\x80\x28\xb5\xdb\xca\xda\x16\x2f\x8b\x8f\xe7\xe6\xbb\xe2\xa2\xee\xee\xb3\xb5\xa9\xad\x1d\xc4\x7c\x31\xf1\xb5\xf2\x64\xcd\x12\x8e\x6b\xa8\x4e\x5d\xdb\x26\x8f\xb5\xae\xed\x98\xa7\xd3\xba\xac\x29\xd3\xab\xe6\xd6\x9b\x0c\x30\x77\x6e\xf7\xa5\xd0\x85\x02\x10\x2b\x02\x55\x73\xb7\x9a\xd0\xac\xe8\x6e\x75\xe3\x36\x57\xa8\xf5\x98\x4b\x1b\x2d\x63\x3c\xf0\xb9\x59\x37\xeb\x15\xa9\xa0\xd6\xce\x61\x97\xb7\x34\xe6\xae\x2f\xc7\xc7\xa7\x1f\x4f\x0b\x96\xd4\xe8\xfa\xa7\xf0\xdf\x5f\x2e\xae\x7e\xfa\x78\x76\xf1\x25\xfc\xec\x6c\x74\x7b\x7e\xfc\xe3\xdd\xe5\xd9\xe8\x7c\x83\xbd\x55\x7e\x45\xd9\xdd\x91\xa5\x7e\x64\x38\x6a\x7d\x37\x58\xe8\x2f\x98\xba\x15\xe7\xeb\xaa\x82\x60\x65\xdb\x72\xae\x4f\xe6\xd2\xf4\x9d\x74\x7f\x8c\x99\x12\xeb\x2e\xc4\x3b\x28\x26\x12\xee\x21\xeb\xbd\xcc\x93\xbe\x10\x09\xbe\x60\xd7\xfa\x39\x08\x36\xe7\x5d\xb7\x21\x1a\x3b\x8f\xc0\xb7\x40\x6b\xcb\x30\x26\x7a\xc3\xbd\xd6\x79\x08\x31\x80\x30\x0b\x53\x9e\xb2\xd8\xb1\x5b\x2f\x29\x3b\x5a\xe2\xaf\xef\xdd\x48\xb3\x6a\xd7\x90\x07\x6a\x4a\x8a\x25\x5a\xeb\x58\x23\x91\xb2\xe6\xe9\x9a\xb0\x86\xf9\xda\x7c\x33\x98\x5a\xef\xf4\xef\xa0\xe2\x64\xfa\xa8\xf1\x18\x3f\x90\x75\xd5\xfa\x95\xf2\xf9\x8d\x57\xda\xea\xc0\xd0\xc8\x4a\x10\x28\xe6\xe0\xfd\xd1\x89\x89\x33\xf8\x7f\x43\xbc\x33\xc7\xf1\x53\x75\x27\xe5\x6d\xf1\x9d\xce\x4d\xa5\x17\xe0\x09\x18\x19\xec\x9b\xf4\xa2\x19\x9f\x80\xcb\x89\xb5\xf1\xdd\xd8\x24\xa7\xe8\xd5\xfa\x1b\x9f\xa2\x19\x84\xc3\x2d\x85\xa7\x20\x11\xb8\x37\xf4\x5a\xb8\x04\x32\x80\xd5\x96\x1c\x0d\x6e\x0f\x24\x44\x82\xb3\x0d\xe8\xf0\xc9\x2f\xa9\xc5\xce\xfd\xf1\xfb\x6e\x49\x79\x4a\xac\x91\x4b\x55\x0d\xc3\xf1\x16\x8d\x62\x7d\x76\xd0\xaf\x94\xd1\x2a\xda\xed\x2b\x43\x04\xff\xbc\xf5\x36\x0a\x2f\xb5\xff\xdc\x88\x58\xb8\x71\x69\x30\xe6\xf7\x4f\x96\x1f\xf1\x73\x21\x2d\xc2\xbe\x0e\x02\x91\xb6\x75\x19\xa0\xee\xb5\x65\xf4\x88\x45\x6c\x1c\x03\xe0\x23\x1a\xa2\x1f\xf9\x23\x79\x20\x62\x80\x22\x22\x14\xb6\x70\x65\x7d\xd6\x92\x04\x0e\x94\x6d\x67\xc2\x20\x36\x6f\xb0\xdf\x0c\xe8\x4f\x15\x9d\x2f\xb4\xf2\x68\x8d\x50\x5b\x32\x41\x12\x05\x50\x43\xf2\x75\x45\x22\x03\xca\xa8\x8b\x44\xcf\x12\xfc\x50\xc6\x5f\x6f\x03\xad\x0d\xaa\x42\xb8\x92\xb5\x36\x67\xa5\xd1\x29\xe5\x8a\x0b\x18\xa9\xb9\x5a\xab\x05\x67\x03\x34\xe7\x09\x66\xf3\xe1\x70\x88\x88\x8a\x86\xef\x3b\x6d\x74\xdb\x60\xf0\xba\x2c\xa2\x96\x70\x49\x92\xb5\x67\x72\xf0\xc8\x07\x3d\xcb\x80\xb4\x90\xd4\x98\x37\x15\xbb\xff\xba\x88\xd0\x7d\x5e\x37\x59\xb5\x56\xda\x19\xea\x53\xd3\x4e\xb1\xd6\xe4\xa6\x96\xcc\xef\xab\x35\xed\x0e\xd0\x35\xc7\x9a\x94\x41\xd8\x6a\x32\xa8\x38\xeb\x8a\xcb\xfa\x99\xd7\x31\x85\x6e\x95\x72\x50\xd9\x92\x05\x88\x6f\x85\x54\x2a\xef\xe8\x8a\x1d\xe7\x41\x7d\x3b\xa5\x37\x25\xe9\xb2\x4c\x77\xbf\x2f\x2d\x2a\xeb\xa4\xf9\xeb\x18\x5e\xd7\x9e\x5b\xce\x13\xa2\x72\x61\xd0\x54\xb6\xbf\xc6\xef\x61\x36\x13\x48\x4b\x41\x25\x24\x5a\x6c\x03\x78\xf2\xcd\x98\xa6\xc1\x3d\xab\x6d\x18\x43\x51\x6d\x8b\x81\x02\x86\xcb\xd7\xf4\x34\x8f\x48\xa3\xea\x80\x4f\xb7\x5e\x32\x64\x20\xd1\xad\xac\x9e\xf3\x8b\xf3\x71\x68\xca\x9c\x9e\xdf\x8c\x3f\x8d\xaf\x72\x31\xa8\xb3\x8b\xd1\x4d\x2e\xde\x74\x73\x55\x08\x53\xfd\x70\x71\x71\x36\x1e\x9d\x87\x1f\x9d\x8c\x6e\xc6\x37\xa7\x9f\x73\x8d\x9f\xdc\x5e\x8d\x6e\x4e\x2f\x72\xbf\xfb\xe1\xf4\x7c\x74\xf5\x97\xf0\x93\xf1\xd5\xd5\xc5\x55\xe1\x7d\xb7\xc7\xcd\x91\xac\xdc\x30\xaa\x57\x22\x53\x96\x03\xbc\x6c\x95\x52\x78\x83\xe5\xfd\x9e\xa3\xaf\x80\x36\xe8\x12\x3d\xad\x0c\x96\xe6\x84\x52\x4c\xee\xb6\x0b\xcc\xd6\x05\x97\x2b\xdf\xa3\xf5\xc1\xf5\x1d\x56\x8a\x2c\x57\xbb\xf1\x8d\xb5\x3f\x38\xdd\x62\xbe\x60\xd2\xb4\x88\xf9\xe6\x56\xf5\xf5\xc4\x7c\x2b\xc2\xb9\xe5\x98\xef\xe9\xf9\xe9\xcd\xe9\xe8\xec\xf4\xff\x16\x5a\xfc\x32\x3a\xbd\x39\x3d\xff\x74\xf7\xf1\xe2\xea\xee\x6a\x7c\x7d\x71\x7b\x75\x3c\xbe\x6e\x19\xf1\x2d\xfb\x58\x0e\x51\xf8\x9e\x0f\xe8\x86\x7b\x1e\x0a\xab\x15\xda\x92\x3c\x7a\xc6\xa1\xc4\x31\x55\x00\xc3\xa5\x6c\x3e\x00\x42\xac\x0f\x68\x2c\xc4\xe9\x12\xcf\xc9\x65\x9a\x24\x03\xe4\x79\xef\x8e\x05\xc1\x0a\x7e\x76\xc9\xe3\xd3\xe0\xb9\x09\x43\x87\xa8\x72\x18\xf0\x7e\xcb\x2f\x67\x5e\x3f\xb0\xef\x0f\x02\x1c\xde\x41\x62\xd9\xd0\x3c\x93\xe7\x07\xf4\x03\x8e\xee\xf9\xcc\x12\x65\x0c\xbc\x89\x8b\x7e\x49\xb9\xc2\x88\x7c\x8d\x08\x89\x5d\xb9\x8d\xe2\x3e\x39\xe3\x3b\xf1\xc3\x75\xa9\xab\x18\x9e\xe9\xcd\xa1\xf2\xca\xe7\x6c\x66\xc3\x5d\x17\x72\x26\x3b\xca\xcf\xe6\x51\xcb\xc7\x54\xd9\xba\x52\xc9\x1e\xfc\x77\x67\x7c\x5e\x8d\x22\x06\x60\x94\x85\x3e\x67\x3c\x02\x10\x0d\xe0\x73\x24\x29\xbb\x9f\xb0\x2f\xda\xa0\xe5\xa9\x30\x1f\x29\x2e\x00\x90\x3e\x4b\x52\xb9\x20\xc0\x03\x39\x40\x8f\x04\x2d\xf1\xda\x44\x05\xf2\x35\x62\x60\xcb\xe8\xcd\x09\x4f\x27\x94\x69\x69\xb1\xa2\x4e\x83\x2c\x2e\xfd\x3e\x0c\xcc\x98\x4a\x6f\x67\x3f\x61\xa8\x26\xf3\x14\x3e\x2e\x08\xe0\x7e\x03\x86\x69\x57\x9c\xc2\x48\x6e\xc8\x31\xe3\xfc\x3e\x5d\xd9\xd2\xe2\x58\xde\x7f\xe7\x50\x74\x30\xdd\x0f\x9c\xc6\x28\x4e\x57\x49\x50\xd9\xff\x91\x8b\x5a\xd4\x83\xb1\x74\x3a\xa0\x1e\x0a\xf6\x7b\xd3\xc0\x2a\xcc\xa8\xc0\x6a\x6b\xc0\x3f\x3c\x31\x02\x24\x60\xb5\x49\x25\x11\x87\x4a\xd0\xf9\x1c\xf4\x46\xe7\x94\x79\xfd\x10\x11\xb7\x37\xd7\x77\xbb\xfb\x1f\x42\x57\x75\x62\xaa\x72\x78\xaa\x06\xbd\xa7\x56\xab\x64\xed\x80\x9b\x66\x02\xdd\xb1\x5f\xa5\xc2\xf0\x89\xce\x90\xef\x50\x6d\x88\x76\x25\x88\x7e\x4b\x7c\x67\x88\x82\x76\x27\x30\x3a\x9d\x19\xda\x4c\x43\x4c\xe2\x07\x91\x91\x95\xb8\x1b\x2e\x7b\xb7\x4b\xab\x30\x19\xcd\xcc\x14\xa5\x7f\x64\xae\x5c\x3f\x96\xc6\x35\xc2\x38\xe8\x26\x3e\xd5\x02\x8a\x82\x1b\x22\x37\x57\xe7\xdd\x66\x68\x5a\x1f\xa7\x61\x8b\x7f\x79\x48\x8f\x17\xd4\x80\x54\xcd\x97\x0d\x2e\x8a\xc8\x5d\xf3\x2e\x3c\xfe\x61\x5b\x8d\xb8\xd9\xa6\x9b\x27\x7c\x6a\x98\xd6\x4a\x19\x19\xe1\xad\xd3\xcd\x81\xe9\x8a\x1b\xe7\xef\x2c\x87\x6c\x82\x50\x39\x6f\xc8\x74\xcf\x95\xe0\xdb\x6b\xca\xca\xee\x13\x96\x2a\x1e\x70\xdb\xe9\xc1\x9d\x16\x4a\xc4\x0d\x0d\x7e\xf9\x34\xae\x24\x4a\xc9\x4e\x8c\x9b\xf9\x3a\xe9\x5c\xe1\x43\xe9\x94\x71\xb3\x12\xc4\x79\xcf\xd6\x44\x79\xa7\x59\xe2\xf0\xd5\xeb\x55\xbe\x2a\x58\x18\x35\x70\x7e\x41\x17\x8f\x20\x90\x00\x10\xd4\x1d\xe1\x8c\x30\x25\x2d\x43\xf8\x84\xd9\xc6\x5d\xfe\x9e\xa7\xc0\xb1\x81\x10\x33\x31\x03\x6b\x83\x58\xb6\x55\xc9\x93\x07\x43\x48\x98\xcd\x89\xe2\x80\xaf\xd7\x1d\x3c\xd6\xe2\x5c\x2b\x2f\x98\xc5\x59\xdd\x88\x05\x99\xb0\x42\x12\x9b\x20\x73\x2a\x15\x5c\x2c\x6e\xc7\x86\xcf\xef\x2d\xb1\x27\xa7\xef\x34\x4d\x7d\x6d\x62\xcf\x26\xc1\x35\xc3\x51\x17\x80\xfd\x7a\x45\xe2\x53\xff\x5c\xf3\x66\xc8\xb9\x4e\xe2\x20\xb4\x94\x3b\xe4\x66\x0f\x38\x3e\x65\xc8\x8e\x92\x9e\x0a\xcc\x2f\x92\x27\x55\xf2\x05\xb3\xf4\x12\xcd\xb1\x2b\x9a\x26\x7d\xc5\x2c\x88\x76\xe7\x5c\xde\x85\x02\xb7\x5e\x97\x8a\xb8\x54\x26\xbe\x06\x8f\xcc\x30\x4d\x52\x51\xab\x22\x98\x6d\xb9\xf7\xb4\xc3\x63\x68\x16\x55\xad\x9a\xf7\x4b\x07\xc7\xc8\xfb\xa4\x7d\xe1\xdc\x24\x9d\x53\x26\xf3\xbb\xbe\xbe\x80\x44\xa9\x98\xce\x86\x05\xcf\xea\xef\xb4\x97\xc5\x23\x73\xd8\x25\x0c\x1e\xe2\x10\xf5\x0c\x4e\x56\x69\x0b\xfa\x3e\x61\x37\x70\x57\x9b\xac\x3a\x7f\xcc\xb0\x61\x1c\x16\x52\x41\x89\xd3\xca\xf1\xe6\xe4\x79\x7e\xa7\xee\x04\x68\xa9\xca\x7f\xdb\x0c\x9c\xfb\x8c\x57\x4d\xa9\x49\x3b\xb7\xb8\x69\x19\xbc\x77\xb3\x78\x0c\x8b\x25\x0e\x2a\x66\xcf\x83\xff\x9e\x25\x88\xd7\x25\x51\xda\x63\x40\x2d\xc5\x40\x29\xcb\x35\xa7\x98\x86\x8f\x76\x87\x01\x67\xd1\x2b\x4b\x8e\x6d\x1a\x9c\x1a\xe0\x66\x88\x35\xdd\x21\xcb\xd6\x2f\x8c\x6b\xab\x61\x39\x76\xc4\xc1\x65\xd0\xe5\x67\x84\xc1\xfd\x5c\x9a\xa2\xae\x28\xb8\x87\x10\xf6\x0b\x77\x43\x56\x2b\xba\x95\xc6\xec\xd1\x6f\x3f\xe7\xb1\xdb\xb9\x29\xe6\xb4\x15\xc8\xbd\xcc\xbe\x07\x4a\x4b\x4c\x18\x57\x04\x61\xc4\x68\x72\xc4\xd2\x24\x39\x3a\x87\x52\x9d\x52\xd2\xb9\xa9\x04\x64\xb8\xf3\x21\x4a\x98\xf1\xc1\xe4\x5c\x65\xc1\x11\x80\x2b\x52\x77\xc9\x78\xf1\x94\x96\x98\x7a\x09\x92\xf5\x84\xe9\x27\x8c\x8a\x65\x68\x34\x68\x56\x6f\x1f\xde\xe6\x79\xfa\xcd\xbb\xb4\x6d\xcc\xd6\x61\xe3\x15\x1b\xac\x29\x15\x68\xa7\x90\x66\xcf\x11\xf9\x6a\x38\x22\xb9\xf0\xa4\xf5\xed\xd9\x22\xeb\x0f\xd5\xd6\x74\x8d\x5e\x11\xf3\x21\x81\x16\xfb\xf1\x25\xc3\x01\x4f\x99\x18\xb6\x73\x16\x98\x9b\xa9\x7d\x78\x45\x7f\x49\x49\x4a\xd9\xfc\x6e\x9a\xc6\x73\xb2\x93\x8f\x8e\x2b\x9c\xa0\x47\x4c\x15\xb8\xe8\x42\xb5\xdd\x9e\x8b\x98\x24\x78\x6d\x32\x29\xf4\x5b\x49\x81\xaf\x64\xd3\x25\xfa\x39\x28\xdb\x61\xbd\x37\x8a\x8a\x80\xaf\x61\xc2\x6e\xb8\x37\x2a\xed\x89\x9d\xa5\x5a\x1b\x6d\x90\x7e\xae\xd5\x13\x33\xf3\x3b\xc1\x34\xf7\xe9\x15\x6a\xf4\x94\xb9\x68\x9b\xf3\x30\x87\x15\xb5\x73\x9d\xb0\x48\x32\x73\xe6\xa1\x0a\x9d\xca\x1b\x46\x86\x25\xc3\x81\xd5\x6c\x45\xa5\x14\x7b\xec\x3e\xcc\xa5\x9e\x70\x9b\x58\x9e\x32\xc0\x9e\x91\xaf\x26\x7d\x3f\x59\x87\xad\x42\xa2\x27\xb4\xd8\x31\x22\x0f\x36\xb7\xcf\xc5\xdd\xb8\xd0\xf5\xab\xb9\xab\x13\xcc\xe4\x3a\xac\x12\xcc\xee\x8c\x72\xf3\x02\x6e\xb0\x20\xdf\xa2\x8e\x0a\x2a\xa8\x3b\xbf\x9f\x7e\x7a\x09\x7f\x95\xcb\x82\x0a\x0b\x51\x0f\x8a\x74\xb1\x4e\x23\x01\xb4\x60\x56\xfa\xd5\x56\x5f\x20\x5f\xab\x00\x2d\x9b\x5d\x79\xb8\x60\xb8\xfb\x92\x07\x1b\x7c\x79\x6e\x07\xbc\x56\x7f\x5e\x9b\x95\x2f\x6c\xf0\xe2\xb2\x77\x77\x25\x95\x2e\x8a\xad\xdc\x49\x1b\xba\xf5\xb4\x2e\xa5\x5a\xd3\xa9\xec\x5a\xfa\x92\x2f\x68\xac\x6f\x1d\x13\x1a\x22\x48\x72\xad\xcf\x39\xcb\xae\x3a\x9f\xa6\x80\xe3\x78\x52\xfe\x90\x7c\xba\x74\x6b\x40\x94\x61\x10\x42\xa7\x59\x9d\x9d\x01\x9a\x1c\x98\x9d\x25\x27\x07\x86\x73\xcf\xa5\x65\x39\x7a\xa2\x7c\xc9\x90\xa2\xe3\xd5\xc4\x44\x82\x1b\x84\x05\xee\x81\xe2\xbc\xd4\x78\x31\x5e\x92\x17\x28\x40\x8b\x99\xb0\xe9\xd4\x34\x60\x95\x52\xa3\x6b\xaf\x1d\x69\x10\xa4\x0e\x8b\x34\x52\xd9\x80\x3d\xc7\xca\x0f\xee\x41\x3d\x45\xab\x14\xca\xb5\xc5\x59\xd1\x26\x2e\x26\xcc\xb5\x96\x51\x1d\x8e\x92\xa4\xd4\x54\x99\x5e\x28\xd8\xab\x40\x36\xe6\x70\xdc\x90\x1f\xa0\x7f\x04\x48\xb7\x92\x1c\x80\x82\x87\x53\x92\x25\x94\x0e\x51\x46\x70\x05\x39\x8b\x05\x26\x9d\x90\x48\x27\x49\x1c\x8b\x8c\xe1\x66\x09\xa8\x43\x64\x0a\x95\x38\x66\xa9\x16\x47\xfe\xed\x8a\x4f\x18\x90\x2a\xcd\xa8\x3e\x24\x6e\x5e\x26\xec\x33\x97\xae\x16\xb8\x24\xa5\x02\x8f\x76\xda\xbe\xf3\x70\x76\xfb\xc1\x89\x16\x22\xfa\x29\x6d\xda\x16\x92\x99\x21\x6e\x07\xe8\x82\x01\x5a\xf3\x54\xe4\x54\xc5\x09\xfb\x9b\x9e\x1e\xc7\x14\x64\x97\x95\xcf\xcc\x21\x76\xc9\xdf\xe8\xdd\x5f\x4d\xa3\xef\xfe\xf5\xfd\x5f\xdf\x1b\x1e\xb6\x54\xa6\x5a\xc2\x0e\xf2\x57\x88\xeb\xa8\x5e\x52\xc0\xb6\xf8\x32\x5c\xae\xb8\x47\xf6\x8a\x46\x4e\x01\xeb\x2c\xde\x37\x83\x76\xe6\x71\x1a\xa1\x08\xab\x68\x71\x88\xed\xde\x0b\xd9\x93\xa8\xcc\xf8\xd9\x1f\x17\x84\x41\x89\xe8\x3c\xa7\xbb\x49\xa8\x40\xbe\xba\xa6\xcc\xcf\x83\xde\x2f\xa6\x14\x91\xd5\x0a\x0b\x79\xc8\xee\x4d\xb0\x39\xb3\x4c\xd8\x2f\x99\x64\x70\x3f\x77\xf9\x01\x41\xb1\x2f\xe3\x1a\xd3\x26\x6b\x8c\x26\x06\x4f\x3b\x39\x70\xcb\x3f\x61\xab\xe9\x30\x59\xcf\xd4\x10\xd0\xbd\x43\x3d\x2d\xc3\x71\x63\xc5\x22\x73\x09\xdd\xc5\x65\xad\x7c\xc3\x74\xd7\xea\xf5\xd5\xfa\x8e\x9f\x1d\xff\xa6\xf6\x4a\x8b\x31\x6d\xfd\xfc\x5c\xe7\x7d\xdf\xc4\xdb\xca\xc4\xc4\x33\x06\x8e\x1d\x07\xb3\x38\x54\xac\xb2\xf3\x09\x54\x4d\xfa\xa2\xf3\x65\xa9\x30\xc3\xc9\x1a\xb2\x74\x06\x13\x66\x2a\xe6\x91\x18\xe1\x68\x1d\x25\x34\xb2\x4c\x37\x79\x5d\x88\x3c\x10\xa6\x72\x60\xc2\xb1\xfe\xe4\xb9\xd4\xa1\x3a\x18\x63\xf5\xec\xdf\xd6\xa8\x42\x9e\x95\x2c\xef\x2d\x28\x6e\x13\x9b\x9b\x2f\x3a\x72\x1b\xf8\xd7\x83\x68\x8e\x9d\x9f\x87\x0b\x3a\xa7\x0c\x2b\x2e\xd0\x3b\x70\x7b\x26\x09\x11\xef\x7d\x09\x25\x98\xc5\xea\x6e\x2c\x3a\x15\x2e\xa8\xa0\xb9\xa9\xbe\x6c\xa3\x28\x15\x82\xc4\x77\x65\xf4\x58\xd7\x3c\xd0\x66\x6c\x8d\x56\xad\xe9\x92\x48\x85\x97\x2b\x24\xb2\x72\x48\x3e\x63\xc9\xce\x4c\x62\x26\x01\xb9\x8e\x0d\x10\x05\x80\x98\x0f\x53\x4f\x98\x0d\x50\x9b\x75\xe3\xa2\x82\xe0\xa0\x38\x4a\x53\xd7\x6d\x4b\x6c\x9e\x25\x7c\xeb\x58\xa4\xaa\xe8\x28\xbb\x3a\x73\x18\x82\xec\x22\xc8\x49\x56\x18\x28\x14\xfd\xd3\x8a\xa8\xaf\x93\xea\x61\x50\x13\x96\x41\x90\x8e\x13\x9e\xc6\xc8\xba\x09\xad\xd3\x4d\x0c\x11\x25\xc3\x01\x92\xff\xfc\xe1\xe8\x68\x38\xdc\x53\xdd\x83\x7c\x69\xb4\xea\x1d\x6e\x8a\x97\x55\x41\xfc\x36\x1c\xad\x1c\xcf\xd9\x5d\x37\xcb\xc3\xa5\x70\xc0\x6e\x09\x2d\xf3\x3c\x80\xa5\xf8\xca\x15\x16\x84\xa9\x3b\x00\x65\x77\x7b\x21\xbc\xe8\x12\x1e\xcf\xe1\x89\x5b\x99\x3d\x19\x4f\xa2\x4d\xc8\xc4\xf2\x1e\xbd\xa3\xe0\x41\x7f\x6f\x8d\x71\xad\x2b\x37\xd1\x97\x95\x25\x70\x53\x6f\x9e\x49\x14\xd7\x01\xe6\xdb\x74\x3f\xf7\xec\xce\x17\xc8\x2e\x38\xfb\x46\x3f\xd8\x89\xe7\xe2\x85\xd8\xf9\x29\x43\x11\x5f\x4e\xb5\x10\xd7\x5b\xdd\x3b\x26\x00\x2e\x3f\x72\x98\x4b\x0f\x18\x73\x18\x33\xc3\x66\x51\x40\xac\x7b\x6f\x76\x88\x08\x33\x5b\xb4\x70\x37\xd5\xd5\xca\x32\xdb\xf9\x09\x52\x02\xaa\x8f\xfa\xa8\x38\x82\x8c\x1d\xfa\x9e\x46\xf7\x44\xdf\x73\xb3\x8c\xc5\x26\x94\x6e\xfe\x7e\xf3\x10\xb9\x09\x83\x19\x32\x78\x0c\x62\xc7\x7d\x47\x0d\x07\x28\xd1\x3a\x4d\x80\xb9\xe2\x88\xaa\xef\x64\xf5\xe4\x3c\x75\xfe\x42\xf5\x5c\x40\xfb\x1e\x65\x6b\xf3\x68\xbd\x6a\x61\x94\x31\x90\xc8\x7f\xf2\xf2\x50\x92\x88\x33\x8f\xcc\xdd\xcb\x45\x5f\x91\xdb\x50\xdd\x5d\xf8\xae\x94\x80\xbb\x49\xeb\xd8\x51\xf9\xc9\x14\x9f\x95\xe0\x91\x4d\x28\x56\x48\x42\xdc\x12\xe0\x39\xfa\xdd\x03\xb4\xc4\x94\xd9\x63\x00\xe5\x22\x51\x4c\xa6\xe9\x7c\x5e\x7b\x27\x27\x7c\xfe\xa4\x0e\x02\x97\x09\x50\xeb\x20\xf0\x23\x4c\x9a\xd0\xed\x1b\x76\xe8\x37\xa4\x7c\x35\xa2\xc1\xf6\xa1\x3e\x9d\xba\x37\x19\x23\x70\x46\xa1\x2e\xfc\x33\x68\x4c\x7b\x52\xff\x4e\xdb\xa8\x7f\xce\x8b\x00\x11\x5c\x5b\x7b\xda\xd9\x79\xbf\x21\xbd\xd0\x20\xe2\xee\xf4\x93\x4f\x0a\x8b\xf3\x40\x5e\x38\xac\x06\xf0\xa6\x65\x53\x2c\x21\x61\x7e\xff\x38\x39\x90\xed\x9b\xd0\xf7\x3b\x13\x46\x5c\xf3\x25\x41\xf0\x2a\x69\x72\xb3\x90\x0d\x41\x0f\xc0\xeb\xa8\x07\x68\x4b\x94\x26\x56\xf8\x5b\xb7\x5a\xb4\xc0\x6c\x1e\x54\x4a\x40\xef\x18\x79\x44\x5a\xd6\x0e\x42\x37\x4c\xb0\x3c\x03\x44\x54\xf4\x5e\xeb\x36\xb9\xa8\x8d\x20\x11\x17\x31\x24\x47\xcc\xb1\x88\x21\x9a\x67\x37\x7c\x82\xa3\x7b\x60\xa0\x82\xeb\xc8\xbc\xd1\x05\x10\x6d\xfe\x80\x71\x5f\x66\xad\x51\x16\x09\x80\xc8\x3a\x82\x0b\xdf\x3f\xf3\xb8\x44\x38\x12\x5c\x1a\x4f\x94\x23\x1e\x32\xf0\x94\xb0\xea\x3d\xbc\xb1\x4b\xcc\xf0\xd2\x6e\x08\x87\xa4\x08\x9c\x60\x20\x25\x73\xa9\xfe\x1f\xb9\xb0\xb9\x00\x30\xe3\x97\x96\x51\xe0\x47\xfa\x40\x06\xe8\x7a\x85\xc5\xfd\x00\x9d\xac\x19\x5e\xd2\xe8\x3f\xf9\xb4\xca\x9f\x52\x82\x26\xec\xac\x12\xef\x9f\xbd\xb7\xfa\xa0\x7f\x29\x01\x2f\x50\x5d\x12\xfc\xdb\xf4\xa6\xd4\xa0\x46\xbe\xf5\x4b\x7d\x43\x4c\xae\x77\x8c\xec\xf5\x02\xac\x34\x94\x9d\x9b\x03\xc7\x4b\xca\x72\xb6\xda\xab\x72\xb6\x16\x17\xb5\x0a\xa5\x95\x13\xc6\xad\xac\xdb\x7d\x68\x8e\x97\x58\x5b\x39\xda\xa0\x5c\x72\x65\xea\x6f\x43\x1e\x29\xb1\x19\xc5\x46\x9d\x84\x32\x43\x54\x9a\x6f\xea\x28\x38\xa3\x84\xcb\x54\xb4\x14\x1b\xe5\x05\x3b\xb6\x8f\x37\x6a\x27\x7c\xb9\x82\xe8\x8b\x20\x32\x4d\x94\xac\xb0\xd7\x4a\x6e\xeb\xbd\x04\xf2\xcb\xdd\xfd\x4c\x14\x3e\x29\xf9\xb5\xb2\xc2\xea\x21\x7e\x06\x12\xa1\xc6\x0d\x7b\xba\xee\x8a\x1d\x87\xf1\x0b\x7d\xb6\x5d\x11\x27\x5b\xa8\x82\xb2\x79\x52\xc7\xed\x3e\x61\xb6\xce\x45\x20\xfb\x70\x96\xcf\xe3\x14\x32\x97\xd2\xf9\x98\xe3\xf8\xf7\x45\x32\x2c\x10\x06\x5b\x83\xdd\xeb\x45\x70\x97\x0f\x80\xa0\xca\x00\x83\x18\xf0\x93\x4d\x98\x4c\xa7\x87\x19\x5c\x85\x0b\x90\xae\x40\x30\xb1\xc2\x02\xf2\xe5\x17\x34\x89\x0f\xcb\x60\x44\xab\xe5\x40\x79\x0c\x4f\xc6\x36\x25\xc0\xb7\x04\x2b\x6e\x4a\xd1\x99\x68\xa9\x1f\xbb\x6f\x67\x9a\x2a\x44\x7c\xb9\x01\x2a\xad\xf3\xa8\xa0\x49\xe4\xe4\x45\xce\x37\xf0\xd2\x1e\xc1\xcd\xf2\xa2\x2e\x5d\xef\xdb\x97\x13\xb9\x39\x6b\x23\x27\x6e\xf2\x5e\x38\x77\x6a\x30\xf3\x92\xa3\x6e\xaa\xe4\x9d\x71\xa1\x3d\x21\x72\xf0\x8b\x4f\x49\x77\x49\x56\x72\x85\x1f\x99\x05\x89\x74\xa2\x97\x6d\x27\x1f\xaa\x79\x40\xb4\x7c\x28\x7c\x13\x4a\x0a\x7d\x1d\x41\x90\x9f\xfa\xe4\xc7\x41\x90\xe5\x0d\xa5\x87\xb2\x8c\x96\xcc\xfc\x99\xb0\x0c\xbd\x94\xd5\x4a\x8d\x8a\x82\xdb\x82\x82\x62\x08\xb4\x92\x81\x43\x34\x0c\x4c\x06\xa0\x35\x52\x0e\xa7\x18\xa8\x90\x95\x12\x74\x9a\xaa\x12\x25\x4d\xee\x34\x57\x06\x39\xf6\x61\x1d\x9c\x3e\x7d\x69\x8f\xea\x6b\x23\x2b\x8d\x92\x41\x95\x8a\x43\x0f\x28\xba\x9e\x9f\x96\xa3\x5b\xa6\x51\xc0\x9b\xd5\x7e\x87\x97\xb2\x19\x2d\x67\x14\x58\xd4\x71\xc0\x78\x9e\x03\x52\xc0\x14\x66\x8c\xf0\x1e\x64\x12\x24\x7d\x68\x11\x85\xe7\x04\x2d\x49\x4c\xd3\x62\x22\xdb\xe6\xe8\xd9\xab\x32\x3b\xdb\xec\x2c\x6d\x80\x7b\x43\xf4\x1c\x8c\x85\x47\x7d\x6b\x1b\x08\x1a\x38\x3d\xaa\x49\x25\x02\x18\x28\x56\xdf\x49\x1f\x8d\xcb\xcf\x98\x73\x31\x9d\x51\xa9\x7e\x2e\xb0\x39\x6f\x91\x2f\x95\xa4\x4f\x87\xfd\x73\x5d\x35\xdd\x0c\x9e\x68\xc4\xb8\x5d\xe5\x4a\xe1\xc2\x26\x33\xee\x0a\xc0\x88\xb8\x4c\x32\xdd\xef\x2e\x02\xfc\xaf\x7e\xbe\xfe\x6a\x8b\xf5\x0a\xbc\x5a\x11\x81\x6c\xc1\xde\x62\x09\x5e\x93\x96\x05\x6f\x99\x30\xa3\x30\xfd\xe7\xf5\xc5\x79\x26\xb9\x33\x3b\xaa\xd0\x34\xfc\x0c\xa6\x6e\x58\xbd\x72\xe7\x69\x92\xd4\xae\x5c\x0b\xb6\xb4\xdb\xb3\xb3\xbb\x9f\x47\x67\xb7\xe3\x66\x36\xb2\xec\x67\xb5\x73\xe2\x7b\x62\xe7\xc4\x5c\x63\x0a\xae\xae\x74\x49\xac\x03\x0b\x94\x11\x3b\x6a\x03\x70\x48\x93\x24\x9f\x59\x33\x61\x7f\xb5\xed\x00\x00\x2e\x65\x46\xcd\x9c\x30\xd4\x38\x71\xf9\xf7\xc3\xcf\xfe\xaa\x1b\xff\xab\x79\xf6\x10\x65\x83\xf8\x80\xce\xfd\x5b\x6b\xe6\xd5\x3a\x5d\x77\x38\x0e\x26\xc1\xe7\xb9\x72\x07\xb7\x3b\x1e\xb7\xcc\x11\x05\xda\x94\xbf\xbd\x9c\x0e\x33\x77\x7f\xcd\x9b\x30\x3e\xbf\x39\x36\x72\x1e\xda\x1d\x98\x8c\x2f\x53\xcc\xdd\x27\x45\x4d\x98\xc1\x13\x40\x09\x5f\x5e\xdf\x27\x74\xca\x0c\xb2\x31\xc1\x6c\x9e\xe2\x39\x91\x03\xe4\x5e\x3e\x61\xbe\x60\xac\x25\x28\xf1\x85\x48\x30\xd0\xae\xe7\xb7\x90\x71\x75\x92\xaf\x78\xb9\x82\x10\x0c\x9b\x30\x3b\x26\x36\xcf\x9a\x37\x5e\xd0\xff\xbc\xf6\xc3\xd1\x3b\xcd\x37\x64\x93\xd6\xd8\x84\x99\xc5\x35\x19\x8b\x4e\xb7\x03\x07\x10\x54\x88\xce\x6d\x5d\x2c\x88\xcb\x93\x05\x99\x3e\x07\x2d\xd3\x70\x54\xbb\x10\xa3\x96\xf4\x01\xc9\x8a\x71\x38\x9b\x2e\x6d\x96\x27\x6e\x31\xdc\x99\xb0\x7d\xab\xde\xf5\x3b\xdf\x01\xfa\xc0\x55\xd7\x05\x68\xde\xb6\x99\x18\xdb\x20\xcd\xb3\x0d\xc5\x8a\x47\x18\x15\xa1\xe8\x10\xbc\xde\x43\x0d\x84\xd6\x5d\x32\xbf\x6f\xec\x54\x87\xd2\x09\xad\x5f\x6b\xd3\xad\x9b\x5e\xab\x2d\x9c\xe6\x97\xee\xc1\x44\xca\x75\xca\x3e\xb0\x69\x32\xd2\xa8\xa6\x4a\xc5\xce\x31\xb1\xe2\x14\x39\xe9\xd3\xd4\xa1\x84\xca\xad\xba\x93\xe9\x4f\xad\x7b\xe4\x35\x04\x7b\xd9\x75\x92\xb0\xf6\x9e\xcb\x09\xd8\x1a\x31\x69\xb1\x59\xd6\x2d\x43\xa8\x11\x2f\x0c\xe8\x0c\xb1\x05\x78\x0c\xfc\x26\x1a\x64\x2b\x37\x30\xfc\xea\xa9\x90\x5a\x5c\x5a\x79\x67\xa5\xb6\x36\x73\x26\xcc\xa5\x0f\x38\x71\x3c\x72\x25\x9f\x84\xff\xd4\xc4\x19\x57\x06\x7c\x0b\x1a\xab\xca\x6a\x85\x61\x35\x61\x90\x9b\xce\xc0\x84\x9c\x4a\xc8\x9e\xb2\x19\xd8\xf6\x8b\x80\xce\x0a\x33\xcf\xf1\xbe\x41\xe6\x15\xd4\x80\xdc\x3d\xff\x3b\xfd\xff\x7f\xfd\xdd\xff\x1f\x00\x00\xff\xff\xe6\x1a\x9f\x8a\xee\x0b\x03\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -92,7 +92,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 197977, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 199662, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java index 3ec07d4cf2..5fc56386e5 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java @@ -10747,10 +10747,969 @@ public flyteidl.core.Tasks.Container getDefaultInstanceForType() { } + public interface IOStrategyOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.core.IOStrategy) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Mode to use to manage downloads
+     * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + int getDownloadModeValue(); + /** + *
+     * Mode to use to manage downloads
+     * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + flyteidl.core.Tasks.IOStrategy.DownloadMode getDownloadMode(); + + /** + *
+     * Mode to use to manage uploads
+     * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + int getUploadModeValue(); + /** + *
+     * Mode to use to manage uploads
+     * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + flyteidl.core.Tasks.IOStrategy.UploadMode getUploadMode(); + } + /** + *
+   * Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets)
+   * 
+ * + * Protobuf type {@code flyteidl.core.IOStrategy} + */ + public static final class IOStrategy extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.core.IOStrategy) + IOStrategyOrBuilder { + private static final long serialVersionUID = 0L; + // Use IOStrategy.newBuilder() to construct. + private IOStrategy(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private IOStrategy() { + downloadMode_ = 0; + uploadMode_ = 0; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private IOStrategy( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + int rawValue = input.readEnum(); + + downloadMode_ = rawValue; + break; + } + case 16: { + int rawValue = input.readEnum(); + + uploadMode_ = rawValue; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_IOStrategy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_IOStrategy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.IOStrategy.class, flyteidl.core.Tasks.IOStrategy.Builder.class); + } + + /** + *
+     * Mode to use for downloading
+     * 
+ * + * Protobuf enum {@code flyteidl.core.IOStrategy.DownloadMode} + */ + public enum DownloadMode + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+       * All data will be downloaded before the main container is executed
+       * 
+ * + * DOWNLOAD_EAGER = 0; + */ + DOWNLOAD_EAGER(0), + /** + *
+       * Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details
+       * 
+ * + * DOWNLOAD_STREAM = 1; + */ + DOWNLOAD_STREAM(1), + /** + *
+       * Large objects (offloaded) will not be downloaded
+       * 
+ * + * DO_NOT_DOWNLOAD = 2; + */ + DO_NOT_DOWNLOAD(2), + UNRECOGNIZED(-1), + ; + + /** + *
+       * All data will be downloaded before the main container is executed
+       * 
+ * + * DOWNLOAD_EAGER = 0; + */ + public static final int DOWNLOAD_EAGER_VALUE = 0; + /** + *
+       * Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details
+       * 
+ * + * DOWNLOAD_STREAM = 1; + */ + public static final int DOWNLOAD_STREAM_VALUE = 1; + /** + *
+       * Large objects (offloaded) will not be downloaded
+       * 
+ * + * DO_NOT_DOWNLOAD = 2; + */ + public static final int DO_NOT_DOWNLOAD_VALUE = 2; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static DownloadMode valueOf(int value) { + return forNumber(value); + } + + public static DownloadMode forNumber(int value) { + switch (value) { + case 0: return DOWNLOAD_EAGER; + case 1: return DOWNLOAD_STREAM; + case 2: return DO_NOT_DOWNLOAD; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + DownloadMode> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public DownloadMode findValueByNumber(int number) { + return DownloadMode.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return flyteidl.core.Tasks.IOStrategy.getDescriptor().getEnumTypes().get(0); + } + + private static final DownloadMode[] VALUES = values(); + + public static DownloadMode valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private DownloadMode(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:flyteidl.core.IOStrategy.DownloadMode) + } + + /** + *
+     * Mode to use for uploading
+     * 
+ * + * Protobuf enum {@code flyteidl.core.IOStrategy.UploadMode} + */ + public enum UploadMode + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+       * All data will be uploaded after the main container exits
+       * 
+ * + * UPLOAD_ON_EXIT = 0; + */ + UPLOAD_ON_EXIT(0), + /** + *
+       * Data will be uploaded as it appears. Refer to protocol specification for details
+       * 
+ * + * UPLOAD_EAGER = 1; + */ + UPLOAD_EAGER(1), + /** + *
+       * Data will not be uploaded, only references will be written
+       * 
+ * + * DO_NOT_UPLOAD = 2; + */ + DO_NOT_UPLOAD(2), + UNRECOGNIZED(-1), + ; + + /** + *
+       * All data will be uploaded after the main container exits
+       * 
+ * + * UPLOAD_ON_EXIT = 0; + */ + public static final int UPLOAD_ON_EXIT_VALUE = 0; + /** + *
+       * Data will be uploaded as it appears. Refer to protocol specification for details
+       * 
+ * + * UPLOAD_EAGER = 1; + */ + public static final int UPLOAD_EAGER_VALUE = 1; + /** + *
+       * Data will not be uploaded, only references will be written
+       * 
+ * + * DO_NOT_UPLOAD = 2; + */ + public static final int DO_NOT_UPLOAD_VALUE = 2; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static UploadMode valueOf(int value) { + return forNumber(value); + } + + public static UploadMode forNumber(int value) { + switch (value) { + case 0: return UPLOAD_ON_EXIT; + case 1: return UPLOAD_EAGER; + case 2: return DO_NOT_UPLOAD; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + UploadMode> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public UploadMode findValueByNumber(int number) { + return UploadMode.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return flyteidl.core.Tasks.IOStrategy.getDescriptor().getEnumTypes().get(1); + } + + private static final UploadMode[] VALUES = values(); + + public static UploadMode valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private UploadMode(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:flyteidl.core.IOStrategy.UploadMode) + } + + public static final int DOWNLOAD_MODE_FIELD_NUMBER = 1; + private int downloadMode_; + /** + *
+     * Mode to use to manage downloads
+     * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public int getDownloadModeValue() { + return downloadMode_; + } + /** + *
+     * Mode to use to manage downloads
+     * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public flyteidl.core.Tasks.IOStrategy.DownloadMode getDownloadMode() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.IOStrategy.DownloadMode result = flyteidl.core.Tasks.IOStrategy.DownloadMode.valueOf(downloadMode_); + return result == null ? flyteidl.core.Tasks.IOStrategy.DownloadMode.UNRECOGNIZED : result; + } + + public static final int UPLOAD_MODE_FIELD_NUMBER = 2; + private int uploadMode_; + /** + *
+     * Mode to use to manage uploads
+     * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public int getUploadModeValue() { + return uploadMode_; + } + /** + *
+     * Mode to use to manage uploads
+     * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public flyteidl.core.Tasks.IOStrategy.UploadMode getUploadMode() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.IOStrategy.UploadMode result = flyteidl.core.Tasks.IOStrategy.UploadMode.valueOf(uploadMode_); + return result == null ? flyteidl.core.Tasks.IOStrategy.UploadMode.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (downloadMode_ != flyteidl.core.Tasks.IOStrategy.DownloadMode.DOWNLOAD_EAGER.getNumber()) { + output.writeEnum(1, downloadMode_); + } + if (uploadMode_ != flyteidl.core.Tasks.IOStrategy.UploadMode.UPLOAD_ON_EXIT.getNumber()) { + output.writeEnum(2, uploadMode_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (downloadMode_ != flyteidl.core.Tasks.IOStrategy.DownloadMode.DOWNLOAD_EAGER.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, downloadMode_); + } + if (uploadMode_ != flyteidl.core.Tasks.IOStrategy.UploadMode.UPLOAD_ON_EXIT.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, uploadMode_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.core.Tasks.IOStrategy)) { + return super.equals(obj); + } + flyteidl.core.Tasks.IOStrategy other = (flyteidl.core.Tasks.IOStrategy) obj; + + if (downloadMode_ != other.downloadMode_) return false; + if (uploadMode_ != other.uploadMode_) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DOWNLOAD_MODE_FIELD_NUMBER; + hash = (53 * hash) + downloadMode_; + hash = (37 * hash) + UPLOAD_MODE_FIELD_NUMBER; + hash = (53 * hash) + uploadMode_; + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.core.Tasks.IOStrategy parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Tasks.IOStrategy parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.IOStrategy parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.IOStrategy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.core.Tasks.IOStrategy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets)
+     * 
+ * + * Protobuf type {@code flyteidl.core.IOStrategy} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.core.IOStrategy) + flyteidl.core.Tasks.IOStrategyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_IOStrategy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_IOStrategy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.IOStrategy.class, flyteidl.core.Tasks.IOStrategy.Builder.class); + } + + // Construct using flyteidl.core.Tasks.IOStrategy.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + downloadMode_ = 0; + + uploadMode_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_IOStrategy_descriptor; + } + + @java.lang.Override + public flyteidl.core.Tasks.IOStrategy getDefaultInstanceForType() { + return flyteidl.core.Tasks.IOStrategy.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.core.Tasks.IOStrategy build() { + flyteidl.core.Tasks.IOStrategy result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.core.Tasks.IOStrategy buildPartial() { + flyteidl.core.Tasks.IOStrategy result = new flyteidl.core.Tasks.IOStrategy(this); + result.downloadMode_ = downloadMode_; + result.uploadMode_ = uploadMode_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.core.Tasks.IOStrategy) { + return mergeFrom((flyteidl.core.Tasks.IOStrategy)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.core.Tasks.IOStrategy other) { + if (other == flyteidl.core.Tasks.IOStrategy.getDefaultInstance()) return this; + if (other.downloadMode_ != 0) { + setDownloadModeValue(other.getDownloadModeValue()); + } + if (other.uploadMode_ != 0) { + setUploadModeValue(other.getUploadModeValue()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.core.Tasks.IOStrategy parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.core.Tasks.IOStrategy) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int downloadMode_ = 0; + /** + *
+       * Mode to use to manage downloads
+       * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public int getDownloadModeValue() { + return downloadMode_; + } + /** + *
+       * Mode to use to manage downloads
+       * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public Builder setDownloadModeValue(int value) { + downloadMode_ = value; + onChanged(); + return this; + } + /** + *
+       * Mode to use to manage downloads
+       * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public flyteidl.core.Tasks.IOStrategy.DownloadMode getDownloadMode() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.IOStrategy.DownloadMode result = flyteidl.core.Tasks.IOStrategy.DownloadMode.valueOf(downloadMode_); + return result == null ? flyteidl.core.Tasks.IOStrategy.DownloadMode.UNRECOGNIZED : result; + } + /** + *
+       * Mode to use to manage downloads
+       * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public Builder setDownloadMode(flyteidl.core.Tasks.IOStrategy.DownloadMode value) { + if (value == null) { + throw new NullPointerException(); + } + + downloadMode_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
+       * Mode to use to manage downloads
+       * 
+ * + * .flyteidl.core.IOStrategy.DownloadMode download_mode = 1; + */ + public Builder clearDownloadMode() { + + downloadMode_ = 0; + onChanged(); + return this; + } + + private int uploadMode_ = 0; + /** + *
+       * Mode to use to manage uploads
+       * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public int getUploadModeValue() { + return uploadMode_; + } + /** + *
+       * Mode to use to manage uploads
+       * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public Builder setUploadModeValue(int value) { + uploadMode_ = value; + onChanged(); + return this; + } + /** + *
+       * Mode to use to manage uploads
+       * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public flyteidl.core.Tasks.IOStrategy.UploadMode getUploadMode() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.IOStrategy.UploadMode result = flyteidl.core.Tasks.IOStrategy.UploadMode.valueOf(uploadMode_); + return result == null ? flyteidl.core.Tasks.IOStrategy.UploadMode.UNRECOGNIZED : result; + } + /** + *
+       * Mode to use to manage uploads
+       * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public Builder setUploadMode(flyteidl.core.Tasks.IOStrategy.UploadMode value) { + if (value == null) { + throw new NullPointerException(); + } + + uploadMode_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
+       * Mode to use to manage uploads
+       * 
+ * + * .flyteidl.core.IOStrategy.UploadMode upload_mode = 2; + */ + public Builder clearUploadMode() { + + uploadMode_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.core.IOStrategy) + } + + // @@protoc_insertion_point(class_scope:flyteidl.core.IOStrategy) + private static final flyteidl.core.Tasks.IOStrategy DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.core.Tasks.IOStrategy(); + } + + public static flyteidl.core.Tasks.IOStrategy getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public IOStrategy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new IOStrategy(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.core.Tasks.IOStrategy getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + public interface DataLoadingConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:flyteidl.core.DataLoadingConfig) com.google.protobuf.MessageOrBuilder { + /** + *
+     * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+     * 
+ * + * bool enabled = 1; + */ + boolean getEnabled(); + /** *
      * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
@@ -10762,7 +11721,7 @@ public interface DataLoadingConfigOrBuilder extends
      * More information about the protocol - refer to docs #TODO reference docs here
      * 
* - * string input_path = 1; + * string input_path = 2; */ java.lang.String getInputPath(); /** @@ -10776,7 +11735,7 @@ public interface DataLoadingConfigOrBuilder extends * More information about the protocol - refer to docs #TODO reference docs here * * - * string input_path = 1; + * string input_path = 2; */ com.google.protobuf.ByteString getInputPathBytes(); @@ -10786,7 +11745,7 @@ public interface DataLoadingConfigOrBuilder extends * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ java.lang.String getOutputPath(); /** @@ -10794,7 +11753,7 @@ public interface DataLoadingConfigOrBuilder extends * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ com.google.protobuf.ByteString getOutputPathBytes(); @@ -10805,7 +11764,7 @@ public interface DataLoadingConfigOrBuilder extends * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ int getFormatValue(); /** @@ -10814,18 +11773,22 @@ public interface DataLoadingConfigOrBuilder extends * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ - flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat(); + flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat getFormat(); /** - *
-     * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
-     * 
- * - * bool enabled = 4; + * .flyteidl.core.IOStrategy io_strategy = 5; */ - boolean getEnabled(); + boolean hasIoStrategy(); + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + flyteidl.core.Tasks.IOStrategy getIoStrategy(); + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + flyteidl.core.Tasks.IOStrategyOrBuilder getIoStrategyOrBuilder(); } /** *
@@ -10875,27 +11838,40 @@ private DataLoadingConfig(
             case 0:
               done = true;
               break;
-            case 10: {
+            case 8: {
+
+              enabled_ = input.readBool();
+              break;
+            }
+            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
               inputPath_ = s;
               break;
             }
-            case 18: {
+            case 26: {
               java.lang.String s = input.readStringRequireUtf8();
 
               outputPath_ = s;
               break;
             }
-            case 24: {
+            case 32: {
               int rawValue = input.readEnum();
 
               format_ = rawValue;
               break;
             }
-            case 32: {
+            case 42: {
+              flyteidl.core.Tasks.IOStrategy.Builder subBuilder = null;
+              if (ioStrategy_ != null) {
+                subBuilder = ioStrategy_.toBuilder();
+              }
+              ioStrategy_ = input.readMessage(flyteidl.core.Tasks.IOStrategy.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ioStrategy_);
+                ioStrategy_ = subBuilder.buildPartial();
+              }
 
-              enabled_ = input.readBool();
               break;
             }
             default: {
@@ -10932,15 +11908,15 @@ private DataLoadingConfig(
 
     /**
      * 
-     * MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. 
+     * LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. 
      * If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format.
      * JSON and YAML do not need any protobuf definitions to read it
      * All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem)
      * 
* - * Protobuf enum {@code flyteidl.core.DataLoadingConfig.MetadataFormat} + * Protobuf enum {@code flyteidl.core.DataLoadingConfig.LiteralMapFormat} */ - public enum MetadataFormat + public enum LiteralMapFormat implements com.google.protobuf.ProtocolMessageEnum { /** *
@@ -10999,11 +11975,11 @@ public final int getNumber() {
        * @deprecated Use {@link #forNumber(int)} instead.
        */
       @java.lang.Deprecated
-      public static MetadataFormat valueOf(int value) {
+      public static LiteralMapFormat valueOf(int value) {
         return forNumber(value);
       }
 
-      public static MetadataFormat forNumber(int value) {
+      public static LiteralMapFormat forNumber(int value) {
         switch (value) {
           case 0: return JSON;
           case 1: return YAML;
@@ -11012,15 +11988,15 @@ public static MetadataFormat forNumber(int value) {
         }
       }
 
-      public static com.google.protobuf.Internal.EnumLiteMap
+      public static com.google.protobuf.Internal.EnumLiteMap
           internalGetValueMap() {
         return internalValueMap;
       }
       private static final com.google.protobuf.Internal.EnumLiteMap<
-          MetadataFormat> internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap() {
-              public MetadataFormat findValueByNumber(int number) {
-                return MetadataFormat.forNumber(number);
+          LiteralMapFormat> internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap() {
+              public LiteralMapFormat findValueByNumber(int number) {
+                return LiteralMapFormat.forNumber(number);
               }
             };
 
@@ -11037,9 +12013,9 @@ public MetadataFormat findValueByNumber(int number) {
         return flyteidl.core.Tasks.DataLoadingConfig.getDescriptor().getEnumTypes().get(0);
       }
 
-      private static final MetadataFormat[] VALUES = values();
+      private static final LiteralMapFormat[] VALUES = values();
 
-      public static MetadataFormat valueOf(
+      public static LiteralMapFormat valueOf(
           com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
         if (desc.getType() != getDescriptor()) {
           throw new java.lang.IllegalArgumentException(
@@ -11053,14 +12029,27 @@ public static MetadataFormat valueOf(
 
       private final int value;
 
-      private MetadataFormat(int value) {
+      private LiteralMapFormat(int value) {
         this.value = value;
       }
 
-      // @@protoc_insertion_point(enum_scope:flyteidl.core.DataLoadingConfig.MetadataFormat)
+      // @@protoc_insertion_point(enum_scope:flyteidl.core.DataLoadingConfig.LiteralMapFormat)
+    }
+
+    public static final int ENABLED_FIELD_NUMBER = 1;
+    private boolean enabled_;
+    /**
+     * 
+     * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+     * 
+ * + * bool enabled = 1; + */ + public boolean getEnabled() { + return enabled_; } - public static final int INPUT_PATH_FIELD_NUMBER = 1; + public static final int INPUT_PATH_FIELD_NUMBER = 2; private volatile java.lang.Object inputPath_; /** *
@@ -11073,7 +12062,7 @@ private MetadataFormat(int value) {
      * More information about the protocol - refer to docs #TODO reference docs here
      * 
* - * string input_path = 1; + * string input_path = 2; */ public java.lang.String getInputPath() { java.lang.Object ref = inputPath_; @@ -11098,7 +12087,7 @@ public java.lang.String getInputPath() { * More information about the protocol - refer to docs #TODO reference docs here *
* - * string input_path = 1; + * string input_path = 2; */ public com.google.protobuf.ByteString getInputPathBytes() { @@ -11114,14 +12103,14 @@ public java.lang.String getInputPath() { } } - public static final int OUTPUT_PATH_FIELD_NUMBER = 2; + public static final int OUTPUT_PATH_FIELD_NUMBER = 3; private volatile java.lang.Object outputPath_; /** *
      * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
      * 
* - * string output_path = 2; + * string output_path = 3; */ public java.lang.String getOutputPath() { java.lang.Object ref = outputPath_; @@ -11140,7 +12129,7 @@ public java.lang.String getOutputPath() { * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file *
* - * string output_path = 2; + * string output_path = 3; */ public com.google.protobuf.ByteString getOutputPathBytes() { @@ -11156,7 +12145,7 @@ public java.lang.String getOutputPath() { } } - public static final int FORMAT_FIELD_NUMBER = 3; + public static final int FORMAT_FIELD_NUMBER = 4; private int format_; /** *
@@ -11164,7 +12153,7 @@ public java.lang.String getOutputPath() {
      * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
      * 
* - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ public int getFormatValue() { return format_; @@ -11175,25 +12164,33 @@ public int getFormatValue() { * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ - public flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat() { + public flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat getFormat() { @SuppressWarnings("deprecation") - flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat result = flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.valueOf(format_); - return result == null ? flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.UNRECOGNIZED : result; + flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat result = flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat.valueOf(format_); + return result == null ? flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat.UNRECOGNIZED : result; } - public static final int ENABLED_FIELD_NUMBER = 4; - private boolean enabled_; + public static final int IO_STRATEGY_FIELD_NUMBER = 5; + private flyteidl.core.Tasks.IOStrategy ioStrategy_; /** - *
-     * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
-     * 
- * - * bool enabled = 4; + * .flyteidl.core.IOStrategy io_strategy = 5; */ - public boolean getEnabled() { - return enabled_; + public boolean hasIoStrategy() { + return ioStrategy_ != null; + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public flyteidl.core.Tasks.IOStrategy getIoStrategy() { + return ioStrategy_ == null ? flyteidl.core.Tasks.IOStrategy.getDefaultInstance() : ioStrategy_; + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public flyteidl.core.Tasks.IOStrategyOrBuilder getIoStrategyOrBuilder() { + return getIoStrategy(); } private byte memoizedIsInitialized = -1; @@ -11210,17 +12207,20 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (enabled_ != false) { + output.writeBool(1, enabled_); + } if (!getInputPathBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, inputPath_); + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, inputPath_); } if (!getOutputPathBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, outputPath_); + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, outputPath_); } - if (format_ != flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.JSON.getNumber()) { - output.writeEnum(3, format_); + if (format_ != flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat.JSON.getNumber()) { + output.writeEnum(4, format_); } - if (enabled_ != false) { - output.writeBool(4, enabled_); + if (ioStrategy_ != null) { + output.writeMessage(5, getIoStrategy()); } unknownFields.writeTo(output); } @@ -11231,19 +12231,23 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; + if (enabled_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, enabled_); + } if (!getInputPathBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, inputPath_); + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, inputPath_); } if (!getOutputPathBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, outputPath_); + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, outputPath_); } - if (format_ != flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.JSON.getNumber()) { + if (format_ != flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat.JSON.getNumber()) { size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, format_); + .computeEnumSize(4, format_); } - if (enabled_ != false) { + if (ioStrategy_ != null) { size += com.google.protobuf.CodedOutputStream - .computeBoolSize(4, enabled_); + .computeMessageSize(5, getIoStrategy()); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -11260,13 +12264,18 @@ public boolean equals(final java.lang.Object obj) { } flyteidl.core.Tasks.DataLoadingConfig other = (flyteidl.core.Tasks.DataLoadingConfig) obj; + if (getEnabled() + != other.getEnabled()) return false; if (!getInputPath() .equals(other.getInputPath())) return false; if (!getOutputPath() .equals(other.getOutputPath())) return false; if (format_ != other.format_) return false; - if (getEnabled() - != other.getEnabled()) return false; + if (hasIoStrategy() != other.hasIoStrategy()) return false; + if (hasIoStrategy()) { + if (!getIoStrategy() + .equals(other.getIoStrategy())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -11278,15 +12287,19 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getEnabled()); hash = (37 * hash) + INPUT_PATH_FIELD_NUMBER; hash = (53 * hash) + getInputPath().hashCode(); hash = (37 * hash) + OUTPUT_PATH_FIELD_NUMBER; hash = (53 * hash) + getOutputPath().hashCode(); hash = (37 * hash) + FORMAT_FIELD_NUMBER; hash = (53 * hash) + format_; - hash = (37 * hash) + ENABLED_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getEnabled()); + if (hasIoStrategy()) { + hash = (37 * hash) + IO_STRATEGY_FIELD_NUMBER; + hash = (53 * hash) + getIoStrategy().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -11426,14 +12439,20 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); + enabled_ = false; + inputPath_ = ""; outputPath_ = ""; format_ = 0; - enabled_ = false; - + if (ioStrategyBuilder_ == null) { + ioStrategy_ = null; + } else { + ioStrategy_ = null; + ioStrategyBuilder_ = null; + } return this; } @@ -11460,10 +12479,15 @@ public flyteidl.core.Tasks.DataLoadingConfig build() { @java.lang.Override public flyteidl.core.Tasks.DataLoadingConfig buildPartial() { flyteidl.core.Tasks.DataLoadingConfig result = new flyteidl.core.Tasks.DataLoadingConfig(this); + result.enabled_ = enabled_; result.inputPath_ = inputPath_; result.outputPath_ = outputPath_; result.format_ = format_; - result.enabled_ = enabled_; + if (ioStrategyBuilder_ == null) { + result.ioStrategy_ = ioStrategy_; + } else { + result.ioStrategy_ = ioStrategyBuilder_.build(); + } onBuilt(); return result; } @@ -11512,6 +12536,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(flyteidl.core.Tasks.DataLoadingConfig other) { if (other == flyteidl.core.Tasks.DataLoadingConfig.getDefaultInstance()) return this; + if (other.getEnabled() != false) { + setEnabled(other.getEnabled()); + } if (!other.getInputPath().isEmpty()) { inputPath_ = other.inputPath_; onChanged(); @@ -11523,8 +12550,8 @@ public Builder mergeFrom(flyteidl.core.Tasks.DataLoadingConfig other) { if (other.format_ != 0) { setFormatValue(other.getFormatValue()); } - if (other.getEnabled() != false) { - setEnabled(other.getEnabled()); + if (other.hasIoStrategy()) { + mergeIoStrategy(other.getIoStrategy()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -11555,6 +12582,44 @@ public Builder mergeFrom( return this; } + private boolean enabled_ ; + /** + *
+       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+       * 
+ * + * bool enabled = 1; + */ + public boolean getEnabled() { + return enabled_; + } + /** + *
+       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+       * 
+ * + * bool enabled = 1; + */ + public Builder setEnabled(boolean value) { + + enabled_ = value; + onChanged(); + return this; + } + /** + *
+       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+       * 
+ * + * bool enabled = 1; + */ + public Builder clearEnabled() { + + enabled_ = false; + onChanged(); + return this; + } + private java.lang.Object inputPath_ = ""; /** *
@@ -11567,7 +12632,7 @@ public Builder mergeFrom(
        * More information about the protocol - refer to docs #TODO reference docs here
        * 
* - * string input_path = 1; + * string input_path = 2; */ public java.lang.String getInputPath() { java.lang.Object ref = inputPath_; @@ -11592,7 +12657,7 @@ public java.lang.String getInputPath() { * More information about the protocol - refer to docs #TODO reference docs here * * - * string input_path = 1; + * string input_path = 2; */ public com.google.protobuf.ByteString getInputPathBytes() { @@ -11618,7 +12683,7 @@ public java.lang.String getInputPath() { * More information about the protocol - refer to docs #TODO reference docs here * * - * string input_path = 1; + * string input_path = 2; */ public Builder setInputPath( java.lang.String value) { @@ -11641,7 +12706,7 @@ public Builder setInputPath( * More information about the protocol - refer to docs #TODO reference docs here * * - * string input_path = 1; + * string input_path = 2; */ public Builder clearInputPath() { @@ -11660,7 +12725,7 @@ public Builder clearInputPath() { * More information about the protocol - refer to docs #TODO reference docs here * * - * string input_path = 1; + * string input_path = 2; */ public Builder setInputPathBytes( com.google.protobuf.ByteString value) { @@ -11680,7 +12745,7 @@ public Builder setInputPathBytes( * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ public java.lang.String getOutputPath() { java.lang.Object ref = outputPath_; @@ -11699,7 +12764,7 @@ public java.lang.String getOutputPath() { * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ public com.google.protobuf.ByteString getOutputPathBytes() { @@ -11719,7 +12784,7 @@ public java.lang.String getOutputPath() { * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ public Builder setOutputPath( java.lang.String value) { @@ -11736,7 +12801,7 @@ public Builder setOutputPath( * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ public Builder clearOutputPath() { @@ -11749,7 +12814,7 @@ public Builder clearOutputPath() { * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file * * - * string output_path = 2; + * string output_path = 3; */ public Builder setOutputPathBytes( com.google.protobuf.ByteString value) { @@ -11770,7 +12835,7 @@ public Builder setOutputPathBytes( * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ public int getFormatValue() { return format_; @@ -11781,7 +12846,7 @@ public int getFormatValue() { * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ public Builder setFormatValue(int value) { format_ = value; @@ -11794,12 +12859,12 @@ public Builder setFormatValue(int value) { * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ - public flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat() { + public flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat getFormat() { @SuppressWarnings("deprecation") - flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat result = flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.valueOf(format_); - return result == null ? flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.UNRECOGNIZED : result; + flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat result = flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat.valueOf(format_); + return result == null ? flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat.UNRECOGNIZED : result; } /** *
@@ -11807,9 +12872,9 @@ public flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat() {
        * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
        * 
* - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ - public Builder setFormat(flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat value) { + public Builder setFormat(flyteidl.core.Tasks.DataLoadingConfig.LiteralMapFormat value) { if (value == null) { throw new NullPointerException(); } @@ -11824,7 +12889,7 @@ public Builder setFormat(flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat va * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding * * - * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + * .flyteidl.core.DataLoadingConfig.LiteralMapFormat format = 4; */ public Builder clearFormat() { @@ -11833,42 +12898,121 @@ public Builder clearFormat() { return this; } - private boolean enabled_ ; + private flyteidl.core.Tasks.IOStrategy ioStrategy_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.IOStrategy, flyteidl.core.Tasks.IOStrategy.Builder, flyteidl.core.Tasks.IOStrategyOrBuilder> ioStrategyBuilder_; /** - *
-       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
-       * 
- * - * bool enabled = 4; + * .flyteidl.core.IOStrategy io_strategy = 5; */ - public boolean getEnabled() { - return enabled_; + public boolean hasIoStrategy() { + return ioStrategyBuilder_ != null || ioStrategy_ != null; } /** - *
-       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
-       * 
- * - * bool enabled = 4; + * .flyteidl.core.IOStrategy io_strategy = 5; */ - public Builder setEnabled(boolean value) { - - enabled_ = value; - onChanged(); + public flyteidl.core.Tasks.IOStrategy getIoStrategy() { + if (ioStrategyBuilder_ == null) { + return ioStrategy_ == null ? flyteidl.core.Tasks.IOStrategy.getDefaultInstance() : ioStrategy_; + } else { + return ioStrategyBuilder_.getMessage(); + } + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public Builder setIoStrategy(flyteidl.core.Tasks.IOStrategy value) { + if (ioStrategyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ioStrategy_ = value; + onChanged(); + } else { + ioStrategyBuilder_.setMessage(value); + } + return this; } /** - *
-       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
-       * 
- * - * bool enabled = 4; + * .flyteidl.core.IOStrategy io_strategy = 5; */ - public Builder clearEnabled() { + public Builder setIoStrategy( + flyteidl.core.Tasks.IOStrategy.Builder builderForValue) { + if (ioStrategyBuilder_ == null) { + ioStrategy_ = builderForValue.build(); + onChanged(); + } else { + ioStrategyBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public Builder mergeIoStrategy(flyteidl.core.Tasks.IOStrategy value) { + if (ioStrategyBuilder_ == null) { + if (ioStrategy_ != null) { + ioStrategy_ = + flyteidl.core.Tasks.IOStrategy.newBuilder(ioStrategy_).mergeFrom(value).buildPartial(); + } else { + ioStrategy_ = value; + } + onChanged(); + } else { + ioStrategyBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public Builder clearIoStrategy() { + if (ioStrategyBuilder_ == null) { + ioStrategy_ = null; + onChanged(); + } else { + ioStrategy_ = null; + ioStrategyBuilder_ = null; + } + + return this; + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public flyteidl.core.Tasks.IOStrategy.Builder getIoStrategyBuilder() { - enabled_ = false; onChanged(); - return this; + return getIoStrategyFieldBuilder().getBuilder(); + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + public flyteidl.core.Tasks.IOStrategyOrBuilder getIoStrategyOrBuilder() { + if (ioStrategyBuilder_ != null) { + return ioStrategyBuilder_.getMessageOrBuilder(); + } else { + return ioStrategy_ == null ? + flyteidl.core.Tasks.IOStrategy.getDefaultInstance() : ioStrategy_; + } + } + /** + * .flyteidl.core.IOStrategy io_strategy = 5; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.IOStrategy, flyteidl.core.Tasks.IOStrategy.Builder, flyteidl.core.Tasks.IOStrategyOrBuilder> + getIoStrategyFieldBuilder() { + if (ioStrategyBuilder_ == null) { + ioStrategyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.IOStrategy, flyteidl.core.Tasks.IOStrategy.Builder, flyteidl.core.Tasks.IOStrategyOrBuilder>( + getIoStrategy(), + getParentForChildren(), + isClean()); + ioStrategy_ = null; + } + return ioStrategyBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -11958,6 +13102,11 @@ public flyteidl.core.Tasks.DataLoadingConfig getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_core_Container_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_IOStrategy_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_IOStrategy_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_core_DataLoadingConfig_descriptor; private static final @@ -12010,13 +13159,21 @@ public flyteidl.core.Tasks.DataLoadingConfig getDefaultInstanceForType() { "dl.core.KeyValuePair\022+\n\005ports\030\007 \003(\0132\034.fl" + "yteidl.core.ContainerPort\0225\n\013data_config" + "\030\t \001(\0132 .flyteidl.core.DataLoadingConfig" + - "\"\277\001\n\021DataLoadingConfig\022\022\n\ninput_path\030\001 \001" + - "(\t\022\023\n\013output_path\030\002 \001(\t\022?\n\006format\030\003 \001(\0162" + - "/.flyteidl.core.DataLoadingConfig.Metada" + - "taFormat\022\017\n\007enabled\030\004 \001(\010\"/\n\016MetadataFor" + - "mat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002B2Z0gi" + - "thub.com/lyft/flyteidl/gen/pb-go/flyteid" + - "l/coreb\006proto3" + "\"\233\002\n\nIOStrategy\022=\n\rdownload_mode\030\001 \001(\0162&" + + ".flyteidl.core.IOStrategy.DownloadMode\0229" + + "\n\013upload_mode\030\002 \001(\0162$.flyteidl.core.IOSt" + + "rategy.UploadMode\"L\n\014DownloadMode\022\022\n\016DOW" + + "NLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023\n\017DO" + + "_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n\016UPLOAD_" + + "ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rDO_NOT_UP" + + "LOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007enabled\030" + + "\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013output_path" + + "\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteidl.core.D" + + "ataLoadingConfig.LiteralMapFormat\022.\n\013io_" + + "strategy\030\005 \001(\0132\031.flyteidl.core.IOStrateg" + + "y\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022\010\n\004YAML\020" + + "\001\022\t\n\005PROTO\020\002B2Z0github.com/lyft/flyteidl" + + "/gen/pb-go/flyteidl/coreb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -12077,12 +13234,18 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_Container_descriptor, new java.lang.String[] { "Image", "Command", "Args", "Resources", "Env", "Config", "Ports", "DataConfig", }); - internal_static_flyteidl_core_DataLoadingConfig_descriptor = + internal_static_flyteidl_core_IOStrategy_descriptor = getDescriptor().getMessageTypes().get(6); + internal_static_flyteidl_core_IOStrategy_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_core_IOStrategy_descriptor, + new java.lang.String[] { "DownloadMode", "UploadMode", }); + internal_static_flyteidl_core_DataLoadingConfig_descriptor = + getDescriptor().getMessageTypes().get(7); internal_static_flyteidl_core_DataLoadingConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_DataLoadingConfig_descriptor, - new java.lang.String[] { "InputPath", "OutputPath", "Format", "Enabled", }); + new java.lang.String[] { "Enabled", "InputPath", "OutputPath", "Format", "IoStrategy", }); flyteidl.core.IdentifierOuterClass.getDescriptor(); flyteidl.core.Interface.getDescriptor(); flyteidl.core.Literals.getDescriptor(); diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index ee17aa1969..2e745b08f3 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -3735,9 +3735,87 @@ export namespace flyteidl { public static verify(message: { [k: string]: any }): (string|null); } + /** Properties of a IOStrategy. */ + interface IIOStrategy { + + /** IOStrategy downloadMode */ + downloadMode?: (flyteidl.core.IOStrategy.DownloadMode|null); + + /** IOStrategy uploadMode */ + uploadMode?: (flyteidl.core.IOStrategy.UploadMode|null); + } + + /** Represents a IOStrategy. */ + class IOStrategy implements IIOStrategy { + + /** + * Constructs a new IOStrategy. + * @param [properties] Properties to set + */ + constructor(properties?: flyteidl.core.IIOStrategy); + + /** IOStrategy downloadMode. */ + public downloadMode: flyteidl.core.IOStrategy.DownloadMode; + + /** IOStrategy uploadMode. */ + public uploadMode: flyteidl.core.IOStrategy.UploadMode; + + /** + * Creates a new IOStrategy instance using the specified properties. + * @param [properties] Properties to set + * @returns IOStrategy instance + */ + public static create(properties?: flyteidl.core.IIOStrategy): flyteidl.core.IOStrategy; + + /** + * Encodes the specified IOStrategy message. Does not implicitly {@link flyteidl.core.IOStrategy.verify|verify} messages. + * @param message IOStrategy message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: flyteidl.core.IIOStrategy, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a IOStrategy message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns IOStrategy + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.core.IOStrategy; + + /** + * Verifies a IOStrategy message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + } + + namespace IOStrategy { + + /** DownloadMode enum. */ + enum DownloadMode { + DOWNLOAD_EAGER = 0, + DOWNLOAD_STREAM = 1, + DO_NOT_DOWNLOAD = 2 + } + + /** UploadMode enum. */ + enum UploadMode { + UPLOAD_ON_EXIT = 0, + UPLOAD_EAGER = 1, + DO_NOT_UPLOAD = 2 + } + } + /** Properties of a DataLoadingConfig. */ interface IDataLoadingConfig { + /** DataLoadingConfig enabled */ + enabled?: (boolean|null); + /** DataLoadingConfig inputPath */ inputPath?: (string|null); @@ -3745,10 +3823,10 @@ export namespace flyteidl { outputPath?: (string|null); /** DataLoadingConfig format */ - format?: (flyteidl.core.DataLoadingConfig.MetadataFormat|null); + format?: (flyteidl.core.DataLoadingConfig.LiteralMapFormat|null); - /** DataLoadingConfig enabled */ - enabled?: (boolean|null); + /** DataLoadingConfig ioStrategy */ + ioStrategy?: (flyteidl.core.IIOStrategy|null); } /** Represents a DataLoadingConfig. */ @@ -3760,6 +3838,9 @@ export namespace flyteidl { */ constructor(properties?: flyteidl.core.IDataLoadingConfig); + /** DataLoadingConfig enabled. */ + public enabled: boolean; + /** DataLoadingConfig inputPath. */ public inputPath: string; @@ -3767,10 +3848,10 @@ export namespace flyteidl { public outputPath: string; /** DataLoadingConfig format. */ - public format: flyteidl.core.DataLoadingConfig.MetadataFormat; + public format: flyteidl.core.DataLoadingConfig.LiteralMapFormat; - /** DataLoadingConfig enabled. */ - public enabled: boolean; + /** DataLoadingConfig ioStrategy. */ + public ioStrategy?: (flyteidl.core.IIOStrategy|null); /** * Creates a new DataLoadingConfig instance using the specified properties. @@ -3807,8 +3888,8 @@ export namespace flyteidl { namespace DataLoadingConfig { - /** MetadataFormat enum. */ - enum MetadataFormat { + /** LiteralMapFormat enum. */ + enum LiteralMapFormat { JSON = 0, YAML = 1, PROTO = 2 diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index bbdf6e8134..2b4c206bff 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -9076,16 +9076,188 @@ export const flyteidl = $root.flyteidl = (() => { return Container; })(); + core.IOStrategy = (function() { + + /** + * Properties of a IOStrategy. + * @memberof flyteidl.core + * @interface IIOStrategy + * @property {flyteidl.core.IOStrategy.DownloadMode|null} [downloadMode] IOStrategy downloadMode + * @property {flyteidl.core.IOStrategy.UploadMode|null} [uploadMode] IOStrategy uploadMode + */ + + /** + * Constructs a new IOStrategy. + * @memberof flyteidl.core + * @classdesc Represents a IOStrategy. + * @implements IIOStrategy + * @constructor + * @param {flyteidl.core.IIOStrategy=} [properties] Properties to set + */ + function IOStrategy(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * IOStrategy downloadMode. + * @member {flyteidl.core.IOStrategy.DownloadMode} downloadMode + * @memberof flyteidl.core.IOStrategy + * @instance + */ + IOStrategy.prototype.downloadMode = 0; + + /** + * IOStrategy uploadMode. + * @member {flyteidl.core.IOStrategy.UploadMode} uploadMode + * @memberof flyteidl.core.IOStrategy + * @instance + */ + IOStrategy.prototype.uploadMode = 0; + + /** + * Creates a new IOStrategy instance using the specified properties. + * @function create + * @memberof flyteidl.core.IOStrategy + * @static + * @param {flyteidl.core.IIOStrategy=} [properties] Properties to set + * @returns {flyteidl.core.IOStrategy} IOStrategy instance + */ + IOStrategy.create = function create(properties) { + return new IOStrategy(properties); + }; + + /** + * Encodes the specified IOStrategy message. Does not implicitly {@link flyteidl.core.IOStrategy.verify|verify} messages. + * @function encode + * @memberof flyteidl.core.IOStrategy + * @static + * @param {flyteidl.core.IIOStrategy} message IOStrategy message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + IOStrategy.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.downloadMode != null && message.hasOwnProperty("downloadMode")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.downloadMode); + if (message.uploadMode != null && message.hasOwnProperty("uploadMode")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.uploadMode); + return writer; + }; + + /** + * Decodes a IOStrategy message from the specified reader or buffer. + * @function decode + * @memberof flyteidl.core.IOStrategy + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {flyteidl.core.IOStrategy} IOStrategy + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + IOStrategy.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.core.IOStrategy(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.downloadMode = reader.int32(); + break; + case 2: + message.uploadMode = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Verifies a IOStrategy message. + * @function verify + * @memberof flyteidl.core.IOStrategy + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + IOStrategy.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.downloadMode != null && message.hasOwnProperty("downloadMode")) + switch (message.downloadMode) { + default: + return "downloadMode: enum value expected"; + case 0: + case 1: + case 2: + break; + } + if (message.uploadMode != null && message.hasOwnProperty("uploadMode")) + switch (message.uploadMode) { + default: + return "uploadMode: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * DownloadMode enum. + * @name flyteidl.core.IOStrategy.DownloadMode + * @enum {string} + * @property {number} DOWNLOAD_EAGER=0 DOWNLOAD_EAGER value + * @property {number} DOWNLOAD_STREAM=1 DOWNLOAD_STREAM value + * @property {number} DO_NOT_DOWNLOAD=2 DO_NOT_DOWNLOAD value + */ + IOStrategy.DownloadMode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DOWNLOAD_EAGER"] = 0; + values[valuesById[1] = "DOWNLOAD_STREAM"] = 1; + values[valuesById[2] = "DO_NOT_DOWNLOAD"] = 2; + return values; + })(); + + /** + * UploadMode enum. + * @name flyteidl.core.IOStrategy.UploadMode + * @enum {string} + * @property {number} UPLOAD_ON_EXIT=0 UPLOAD_ON_EXIT value + * @property {number} UPLOAD_EAGER=1 UPLOAD_EAGER value + * @property {number} DO_NOT_UPLOAD=2 DO_NOT_UPLOAD value + */ + IOStrategy.UploadMode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UPLOAD_ON_EXIT"] = 0; + values[valuesById[1] = "UPLOAD_EAGER"] = 1; + values[valuesById[2] = "DO_NOT_UPLOAD"] = 2; + return values; + })(); + + return IOStrategy; + })(); + core.DataLoadingConfig = (function() { /** * Properties of a DataLoadingConfig. * @memberof flyteidl.core * @interface IDataLoadingConfig + * @property {boolean|null} [enabled] DataLoadingConfig enabled * @property {string|null} [inputPath] DataLoadingConfig inputPath * @property {string|null} [outputPath] DataLoadingConfig outputPath - * @property {flyteidl.core.DataLoadingConfig.MetadataFormat|null} [format] DataLoadingConfig format - * @property {boolean|null} [enabled] DataLoadingConfig enabled + * @property {flyteidl.core.DataLoadingConfig.LiteralMapFormat|null} [format] DataLoadingConfig format + * @property {flyteidl.core.IIOStrategy|null} [ioStrategy] DataLoadingConfig ioStrategy */ /** @@ -9103,6 +9275,14 @@ export const flyteidl = $root.flyteidl = (() => { this[keys[i]] = properties[keys[i]]; } + /** + * DataLoadingConfig enabled. + * @member {boolean} enabled + * @memberof flyteidl.core.DataLoadingConfig + * @instance + */ + DataLoadingConfig.prototype.enabled = false; + /** * DataLoadingConfig inputPath. * @member {string} inputPath @@ -9121,19 +9301,19 @@ export const flyteidl = $root.flyteidl = (() => { /** * DataLoadingConfig format. - * @member {flyteidl.core.DataLoadingConfig.MetadataFormat} format + * @member {flyteidl.core.DataLoadingConfig.LiteralMapFormat} format * @memberof flyteidl.core.DataLoadingConfig * @instance */ DataLoadingConfig.prototype.format = 0; /** - * DataLoadingConfig enabled. - * @member {boolean} enabled + * DataLoadingConfig ioStrategy. + * @member {flyteidl.core.IIOStrategy|null|undefined} ioStrategy * @memberof flyteidl.core.DataLoadingConfig * @instance */ - DataLoadingConfig.prototype.enabled = false; + DataLoadingConfig.prototype.ioStrategy = null; /** * Creates a new DataLoadingConfig instance using the specified properties. @@ -9159,14 +9339,16 @@ export const flyteidl = $root.flyteidl = (() => { DataLoadingConfig.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); + if (message.enabled != null && message.hasOwnProperty("enabled")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.enabled); if (message.inputPath != null && message.hasOwnProperty("inputPath")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.inputPath); + writer.uint32(/* id 2, wireType 2 =*/18).string(message.inputPath); if (message.outputPath != null && message.hasOwnProperty("outputPath")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.outputPath); + writer.uint32(/* id 3, wireType 2 =*/26).string(message.outputPath); if (message.format != null && message.hasOwnProperty("format")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.format); - if (message.enabled != null && message.hasOwnProperty("enabled")) - writer.uint32(/* id 4, wireType 0 =*/32).bool(message.enabled); + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.format); + if (message.ioStrategy != null && message.hasOwnProperty("ioStrategy")) + $root.flyteidl.core.IOStrategy.encode(message.ioStrategy, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); return writer; }; @@ -9189,16 +9371,19 @@ export const flyteidl = $root.flyteidl = (() => { let tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.inputPath = reader.string(); + message.enabled = reader.bool(); break; case 2: - message.outputPath = reader.string(); + message.inputPath = reader.string(); break; case 3: - message.format = reader.int32(); + message.outputPath = reader.string(); break; case 4: - message.enabled = reader.bool(); + message.format = reader.int32(); + break; + case 5: + message.ioStrategy = $root.flyteidl.core.IOStrategy.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); @@ -9219,6 +9404,9 @@ export const flyteidl = $root.flyteidl = (() => { DataLoadingConfig.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; + if (message.enabled != null && message.hasOwnProperty("enabled")) + if (typeof message.enabled !== "boolean") + return "enabled: boolean expected"; if (message.inputPath != null && message.hasOwnProperty("inputPath")) if (!$util.isString(message.inputPath)) return "inputPath: string expected"; @@ -9234,21 +9422,23 @@ export const flyteidl = $root.flyteidl = (() => { case 2: break; } - if (message.enabled != null && message.hasOwnProperty("enabled")) - if (typeof message.enabled !== "boolean") - return "enabled: boolean expected"; + if (message.ioStrategy != null && message.hasOwnProperty("ioStrategy")) { + let error = $root.flyteidl.core.IOStrategy.verify(message.ioStrategy); + if (error) + return "ioStrategy." + error; + } return null; }; /** - * MetadataFormat enum. - * @name flyteidl.core.DataLoadingConfig.MetadataFormat + * LiteralMapFormat enum. + * @name flyteidl.core.DataLoadingConfig.LiteralMapFormat * @enum {string} * @property {number} JSON=0 JSON value * @property {number} YAML=1 YAML value * @property {number} PROTO=2 PROTO value */ - DataLoadingConfig.MetadataFormat = (function() { + DataLoadingConfig.LiteralMapFormat = (function() { const valuesById = {}, values = Object.create(valuesById); values[valuesById[0] = "JSON"] = 0; values[valuesById[1] = "YAML"] = 1; diff --git a/flyteidl/gen/pb-protodoc/flyteidl/core/tasks.proto.rst b/flyteidl/gen/pb-protodoc/flyteidl/core/tasks.proto.rst index 8514532564..d316d52df7 100644 --- a/flyteidl/gen/pb-protodoc/flyteidl/core/tasks.proto.rst +++ b/flyteidl/gen/pb-protodoc/flyteidl/core/tasks.proto.rst @@ -399,12 +399,97 @@ data_config +.. _api_msg_flyteidl.core.IOStrategy: + +flyteidl.core.IOStrategy +------------------------ + +`[flyteidl.core.IOStrategy proto] `_ + +Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets) + +.. code-block:: json + + { + "download_mode": "...", + "upload_mode": "..." + } + +.. _api_field_flyteidl.core.IOStrategy.download_mode: + +download_mode + (:ref:`flyteidl.core.IOStrategy.DownloadMode `) Mode to use to manage downloads + + +.. _api_field_flyteidl.core.IOStrategy.upload_mode: + +upload_mode + (:ref:`flyteidl.core.IOStrategy.UploadMode `) Mode to use to manage uploads + + + +.. _api_enum_flyteidl.core.IOStrategy.DownloadMode: + +Enum flyteidl.core.IOStrategy.DownloadMode +------------------------------------------ + +`[flyteidl.core.IOStrategy.DownloadMode proto] `_ + +Mode to use for downloading + +.. _api_enum_value_flyteidl.core.IOStrategy.DownloadMode.DOWNLOAD_EAGER: + +DOWNLOAD_EAGER + *(DEFAULT)* ⁣All data will be downloaded before the main container is executed + + +.. _api_enum_value_flyteidl.core.IOStrategy.DownloadMode.DOWNLOAD_STREAM: + +DOWNLOAD_STREAM + ⁣Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details + + +.. _api_enum_value_flyteidl.core.IOStrategy.DownloadMode.DO_NOT_DOWNLOAD: + +DO_NOT_DOWNLOAD + ⁣Large objects (offloaded) will not be downloaded + + + +.. _api_enum_flyteidl.core.IOStrategy.UploadMode: + +Enum flyteidl.core.IOStrategy.UploadMode +---------------------------------------- + +`[flyteidl.core.IOStrategy.UploadMode proto] `_ + +Mode to use for uploading + +.. _api_enum_value_flyteidl.core.IOStrategy.UploadMode.UPLOAD_ON_EXIT: + +UPLOAD_ON_EXIT + *(DEFAULT)* ⁣All data will be uploaded after the main container exits + + +.. _api_enum_value_flyteidl.core.IOStrategy.UploadMode.UPLOAD_EAGER: + +UPLOAD_EAGER + ⁣Data will be uploaded as it appears. Refer to protocol specification for details + + +.. _api_enum_value_flyteidl.core.IOStrategy.UploadMode.DO_NOT_UPLOAD: + +DO_NOT_UPLOAD + ⁣Data will not be uploaded, only references will be written + + + .. _api_msg_flyteidl.core.DataLoadingConfig: flyteidl.core.DataLoadingConfig ------------------------------- -`[flyteidl.core.DataLoadingConfig proto] `_ +`[flyteidl.core.DataLoadingConfig proto] `_ This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path @@ -413,12 +498,19 @@ Any outputs generated by the user container - within output_path are automatical .. code-block:: json { + "enabled": "...", "input_path": "...", "output_path": "...", "format": "...", - "enabled": "..." + "io_strategy": "{...}" } +.. _api_field_flyteidl.core.DataLoadingConfig.enabled: + +enabled + (`bool `_) Flag enables DataLoading Config. If this is not set, data loading will not be used! + + .. _api_field_flyteidl.core.DataLoadingConfig.input_path: input_path @@ -440,41 +532,40 @@ output_path .. _api_field_flyteidl.core.DataLoadingConfig.format: format - (:ref:`flyteidl.core.DataLoadingConfig.MetadataFormat `) In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. + (:ref:`flyteidl.core.DataLoadingConfig.LiteralMapFormat `) In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding -.. _api_field_flyteidl.core.DataLoadingConfig.enabled: +.. _api_field_flyteidl.core.DataLoadingConfig.io_strategy: -enabled - (`bool `_) Flag enables DataLoading Config. If this is not set, data loading will not be used! - +io_strategy + (:ref:`flyteidl.core.IOStrategy `) -.. _api_enum_flyteidl.core.DataLoadingConfig.MetadataFormat: +.. _api_enum_flyteidl.core.DataLoadingConfig.LiteralMapFormat: -Enum flyteidl.core.DataLoadingConfig.MetadataFormat ---------------------------------------------------- +Enum flyteidl.core.DataLoadingConfig.LiteralMapFormat +----------------------------------------------------- -`[flyteidl.core.DataLoadingConfig.MetadataFormat proto] `_ +`[flyteidl.core.DataLoadingConfig.LiteralMapFormat proto] `_ -MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. +LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. JSON and YAML do not need any protobuf definitions to read it All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) -.. _api_enum_value_flyteidl.core.DataLoadingConfig.MetadataFormat.JSON: +.. _api_enum_value_flyteidl.core.DataLoadingConfig.LiteralMapFormat.JSON: JSON *(DEFAULT)* ⁣JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html -.. _api_enum_value_flyteidl.core.DataLoadingConfig.MetadataFormat.YAML: +.. _api_enum_value_flyteidl.core.DataLoadingConfig.LiteralMapFormat.YAML: YAML ⁣ -.. _api_enum_value_flyteidl.core.DataLoadingConfig.MetadataFormat.PROTO: +.. _api_enum_value_flyteidl.core.DataLoadingConfig.LiteralMapFormat.PROTO: PROTO ⁣Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py index b0b33f5b66..7b0d103879 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py @@ -25,7 +25,7 @@ package='flyteidl.core', syntax='proto3', serialized_options=_b('Z0github.com/lyft/flyteidl/gen/pb-go/flyteidl/core'), - serialized_pb=_b('\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x9a\x02\n\tResources\x12\x38\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x12\x36\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x1aS\n\rResourceEntry\x12\x33\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceName\x12\r\n\x05value\x18\x02 \x01(\t\"F\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\"\x95\x01\n\x0fRuntimeMetadata\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeType\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x0e\n\x06\x66lavor\x18\x03 \x01(\t\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\x9d\x02\n\x0cTaskMetadata\x12\x14\n\x0c\x64iscoverable\x18\x01 \x01(\x08\x12/\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadata\x12*\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12-\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategy\x12\x19\n\x11\x64iscovery_version\x18\x06 \x01(\t\x12 \n\x18\x64\x65precated_error_message\x18\x07 \x01(\t\x12\x17\n\rinterruptible\x18\x08 \x01(\x08H\x00\x42\x15\n\x13interruptible_value\"\x86\x02\n\x0cTaskTemplate\x12%\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.Identifier\x12\x0c\n\x04type\x18\x02 \x01(\t\x12-\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadata\x12\x30\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterface\x12\'\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00\x42\x08\n\x06target\"\'\n\rContainerPort\x12\x16\n\x0e\x63ontainer_port\x18\x01 \x01(\r\"\xa1\x02\n\tContainer\x12\r\n\x05image\x18\x01 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x03(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\t\x12+\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.Resources\x12(\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePair\x12+\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePair\x12+\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPort\x12\x35\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfig\"\xbf\x01\n\x11\x44\x61taLoadingConfig\x12\x12\n\ninput_path\x18\x01 \x01(\t\x12\x13\n\x0boutput_path\x18\x02 \x01(\t\x12?\n\x06\x66ormat\x18\x03 \x01(\x0e\x32/.flyteidl.core.DataLoadingConfig.MetadataFormat\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\"/\n\x0eMetadataFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\x42\x32Z0github.com/lyft/flyteidl/gen/pb-go/flyteidl/coreb\x06proto3') + serialized_pb=_b('\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x9a\x02\n\tResources\x12\x38\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x12\x36\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x1aS\n\rResourceEntry\x12\x33\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceName\x12\r\n\x05value\x18\x02 \x01(\t\"F\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\"\x95\x01\n\x0fRuntimeMetadata\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeType\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x0e\n\x06\x66lavor\x18\x03 \x01(\t\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\x9d\x02\n\x0cTaskMetadata\x12\x14\n\x0c\x64iscoverable\x18\x01 \x01(\x08\x12/\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadata\x12*\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12-\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategy\x12\x19\n\x11\x64iscovery_version\x18\x06 \x01(\t\x12 \n\x18\x64\x65precated_error_message\x18\x07 \x01(\t\x12\x17\n\rinterruptible\x18\x08 \x01(\x08H\x00\x42\x15\n\x13interruptible_value\"\x86\x02\n\x0cTaskTemplate\x12%\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.Identifier\x12\x0c\n\x04type\x18\x02 \x01(\t\x12-\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadata\x12\x30\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterface\x12\'\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00\x42\x08\n\x06target\"\'\n\rContainerPort\x12\x16\n\x0e\x63ontainer_port\x18\x01 \x01(\r\"\xa1\x02\n\tContainer\x12\r\n\x05image\x18\x01 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x03(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\t\x12+\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.Resources\x12(\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePair\x12+\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePair\x12+\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPort\x12\x35\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfig\"\x9b\x02\n\nIOStrategy\x12=\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadMode\x12\x39\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xf3\x01\n\x11\x44\x61taLoadingConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x12\n\ninput_path\x18\x02 \x01(\t\x12\x13\n\x0boutput_path\x18\x03 \x01(\t\x12\x41\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormat\x12.\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\x42\x32Z0github.com/lyft/flyteidl/gen/pb-go/flyteidl/coreb\x06proto3') , dependencies=[flyteidl_dot_core_dot_identifier__pb2.DESCRIPTOR,flyteidl_dot_core_dot_interface__pb2.DESCRIPTOR,flyteidl_dot_core_dot_literals__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,]) @@ -87,9 +87,61 @@ ) _sym_db.RegisterEnumDescriptor(_RUNTIMEMETADATA_RUNTIMETYPE) -_DATALOADINGCONFIG_METADATAFORMAT = _descriptor.EnumDescriptor( - name='MetadataFormat', - full_name='flyteidl.core.DataLoadingConfig.MetadataFormat', +_IOSTRATEGY_DOWNLOADMODE = _descriptor.EnumDescriptor( + name='DownloadMode', + full_name='flyteidl.core.IOStrategy.DownloadMode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='DOWNLOAD_EAGER', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DOWNLOAD_STREAM', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DO_NOT_DOWNLOAD', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=1659, + serialized_end=1735, +) +_sym_db.RegisterEnumDescriptor(_IOSTRATEGY_DOWNLOADMODE) + +_IOSTRATEGY_UPLOADMODE = _descriptor.EnumDescriptor( + name='UploadMode', + full_name='flyteidl.core.IOStrategy.UploadMode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UPLOAD_ON_EXIT', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UPLOAD_EAGER', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DO_NOT_UPLOAD', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=1737, + serialized_end=1806, +) +_sym_db.RegisterEnumDescriptor(_IOSTRATEGY_UPLOADMODE) + +_DATALOADINGCONFIG_LITERALMAPFORMAT = _descriptor.EnumDescriptor( + name='LiteralMapFormat', + full_name='flyteidl.core.DataLoadingConfig.LiteralMapFormat', filename=None, file=DESCRIPTOR, values=[ @@ -108,10 +160,10 @@ ], containing_type=None, serialized_options=None, - serialized_start=1667, - serialized_end=1714, + serialized_start=2003, + serialized_end=2052, ) -_sym_db.RegisterEnumDescriptor(_DATALOADINGCONFIG_METADATAFORMAT) +_sym_db.RegisterEnumDescriptor(_DATALOADINGCONFIG_LITERALMAPFORMAT) _RESOURCES_RESOURCEENTRY = _descriptor.Descriptor( @@ -492,6 +544,46 @@ ) +_IOSTRATEGY = _descriptor.Descriptor( + name='IOStrategy', + full_name='flyteidl.core.IOStrategy', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='download_mode', full_name='flyteidl.core.IOStrategy.download_mode', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='upload_mode', full_name='flyteidl.core.IOStrategy.upload_mode', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _IOSTRATEGY_DOWNLOADMODE, + _IOSTRATEGY_UPLOADMODE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1523, + serialized_end=1806, +) + + _DATALOADINGCONFIG = _descriptor.Descriptor( name='DataLoadingConfig', full_name='flyteidl.core.DataLoadingConfig', @@ -500,30 +592,37 @@ containing_type=None, fields=[ _descriptor.FieldDescriptor( - name='input_path', full_name='flyteidl.core.DataLoadingConfig.input_path', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + name='enabled', full_name='flyteidl.core.DataLoadingConfig.enabled', index=0, + number=1, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='output_path', full_name='flyteidl.core.DataLoadingConfig.output_path', index=1, + name='input_path', full_name='flyteidl.core.DataLoadingConfig.input_path', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='format', full_name='flyteidl.core.DataLoadingConfig.format', index=2, - number=3, type=14, cpp_type=8, label=1, + name='output_path', full_name='flyteidl.core.DataLoadingConfig.output_path', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='format', full_name='flyteidl.core.DataLoadingConfig.format', index=3, + number=4, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='enabled', full_name='flyteidl.core.DataLoadingConfig.enabled', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, + name='io_strategy', full_name='flyteidl.core.DataLoadingConfig.io_strategy', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -532,7 +631,7 @@ ], nested_types=[], enum_types=[ - _DATALOADINGCONFIG_METADATAFORMAT, + _DATALOADINGCONFIG_LITERALMAPFORMAT, ], serialized_options=None, is_extendable=False, @@ -540,8 +639,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1523, - serialized_end=1714, + serialized_start=1809, + serialized_end=2052, ) _RESOURCES_RESOURCEENTRY.fields_by_name['name'].enum_type = _RESOURCES_RESOURCENAME @@ -570,14 +669,20 @@ _CONTAINER.fields_by_name['config'].message_type = flyteidl_dot_core_dot_literals__pb2._KEYVALUEPAIR _CONTAINER.fields_by_name['ports'].message_type = _CONTAINERPORT _CONTAINER.fields_by_name['data_config'].message_type = _DATALOADINGCONFIG -_DATALOADINGCONFIG.fields_by_name['format'].enum_type = _DATALOADINGCONFIG_METADATAFORMAT -_DATALOADINGCONFIG_METADATAFORMAT.containing_type = _DATALOADINGCONFIG +_IOSTRATEGY.fields_by_name['download_mode'].enum_type = _IOSTRATEGY_DOWNLOADMODE +_IOSTRATEGY.fields_by_name['upload_mode'].enum_type = _IOSTRATEGY_UPLOADMODE +_IOSTRATEGY_DOWNLOADMODE.containing_type = _IOSTRATEGY +_IOSTRATEGY_UPLOADMODE.containing_type = _IOSTRATEGY +_DATALOADINGCONFIG.fields_by_name['format'].enum_type = _DATALOADINGCONFIG_LITERALMAPFORMAT +_DATALOADINGCONFIG.fields_by_name['io_strategy'].message_type = _IOSTRATEGY +_DATALOADINGCONFIG_LITERALMAPFORMAT.containing_type = _DATALOADINGCONFIG DESCRIPTOR.message_types_by_name['Resources'] = _RESOURCES DESCRIPTOR.message_types_by_name['RuntimeMetadata'] = _RUNTIMEMETADATA DESCRIPTOR.message_types_by_name['TaskMetadata'] = _TASKMETADATA DESCRIPTOR.message_types_by_name['TaskTemplate'] = _TASKTEMPLATE DESCRIPTOR.message_types_by_name['ContainerPort'] = _CONTAINERPORT DESCRIPTOR.message_types_by_name['Container'] = _CONTAINER +DESCRIPTOR.message_types_by_name['IOStrategy'] = _IOSTRATEGY DESCRIPTOR.message_types_by_name['DataLoadingConfig'] = _DATALOADINGCONFIG _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -631,6 +736,13 @@ )) _sym_db.RegisterMessage(Container) +IOStrategy = _reflection.GeneratedProtocolMessageType('IOStrategy', (_message.Message,), dict( + DESCRIPTOR = _IOSTRATEGY, + __module__ = 'flyteidl.core.tasks_pb2' + # @@protoc_insertion_point(class_scope:flyteidl.core.IOStrategy) + )) +_sym_db.RegisterMessage(IOStrategy) + DataLoadingConfig = _reflection.GeneratedProtocolMessageType('DataLoadingConfig', (_message.Message,), dict( DESCRIPTOR = _DATALOADINGCONFIG, __module__ = 'flyteidl.core.tasks_pb2' diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index 1feaeabae3..9c83516616 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -242,6 +242,7 @@ Class | Method | HTTP request | Description - [CoreDataLoadingConfig](docs/CoreDataLoadingConfig.md) - [CoreError](docs/CoreError.md) - [CoreExecutionError](docs/CoreExecutionError.md) + - [CoreIOStrategy](docs/CoreIOStrategy.md) - [CoreIdentifier](docs/CoreIdentifier.md) - [CoreIfBlock](docs/CoreIfBlock.md) - [CoreIfElseBlock](docs/CoreIfElseBlock.md) @@ -282,7 +283,7 @@ Class | Method | HTTP request | Description - [CoreWorkflowMetadataDefaults](docs/CoreWorkflowMetadataDefaults.md) - [CoreWorkflowNode](docs/CoreWorkflowNode.md) - [CoreWorkflowTemplate](docs/CoreWorkflowTemplate.md) - - [DataLoadingConfigMetadataFormat](docs/DataLoadingConfigMetadataFormat.md) + - [DataLoadingConfigLiteralMapFormat](docs/DataLoadingConfigLiteralMapFormat.md) - [EventNodeExecutionEvent](docs/EventNodeExecutionEvent.md) - [EventParentTaskExecutionMetadata](docs/EventParentTaskExecutionMetadata.md) - [EventTaskExecutionEvent](docs/EventTaskExecutionEvent.md) @@ -294,6 +295,8 @@ Class | Method | HTTP request | Description - [FlyteidladminWorkflowNodeMetadata](docs/FlyteidladminWorkflowNodeMetadata.md) - [FlyteidlcoreSchema](docs/FlyteidlcoreSchema.md) - [FlyteidleventWorkflowNodeMetadata](docs/FlyteidleventWorkflowNodeMetadata.md) + - [IOStrategyDownloadMode](docs/IOStrategyDownloadMode.md) + - [IOStrategyUploadMode](docs/IOStrategyUploadMode.md) - [ProtobufListValue](docs/ProtobufListValue.md) - [ProtobufNullValue](docs/ProtobufNullValue.md) - [ProtobufStruct](docs/ProtobufStruct.md) diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py index fb4446bb2f..1cf1549b25 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py @@ -145,6 +145,7 @@ from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig from flyteadmin.models.core_error import CoreError from flyteadmin.models.core_execution_error import CoreExecutionError +from flyteadmin.models.core_io_strategy import CoreIOStrategy from flyteadmin.models.core_identifier import CoreIdentifier from flyteadmin.models.core_if_block import CoreIfBlock from flyteadmin.models.core_if_else_block import CoreIfElseBlock @@ -185,7 +186,7 @@ from flyteadmin.models.core_workflow_metadata_defaults import CoreWorkflowMetadataDefaults from flyteadmin.models.core_workflow_node import CoreWorkflowNode from flyteadmin.models.core_workflow_template import CoreWorkflowTemplate -from flyteadmin.models.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat +from flyteadmin.models.data_loading_config_literal_map_format import DataLoadingConfigLiteralMapFormat from flyteadmin.models.event_node_execution_event import EventNodeExecutionEvent from flyteadmin.models.event_parent_task_execution_metadata import EventParentTaskExecutionMetadata from flyteadmin.models.event_task_execution_event import EventTaskExecutionEvent @@ -197,6 +198,8 @@ from flyteadmin.models.flyteidladmin_workflow_node_metadata import FlyteidladminWorkflowNodeMetadata from flyteadmin.models.flyteidlcore_schema import FlyteidlcoreSchema from flyteadmin.models.flyteidlevent_workflow_node_metadata import FlyteidleventWorkflowNodeMetadata +from flyteadmin.models.io_strategy_download_mode import IOStrategyDownloadMode +from flyteadmin.models.io_strategy_upload_mode import IOStrategyUploadMode from flyteadmin.models.protobuf_list_value import ProtobufListValue from flyteadmin.models.protobuf_null_value import ProtobufNullValue from flyteadmin.models.protobuf_struct import ProtobufStruct diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py index 8d110e3557..7e9491a525 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py @@ -138,6 +138,7 @@ from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig from flyteadmin.models.core_error import CoreError from flyteadmin.models.core_execution_error import CoreExecutionError +from flyteadmin.models.core_io_strategy import CoreIOStrategy from flyteadmin.models.core_identifier import CoreIdentifier from flyteadmin.models.core_if_block import CoreIfBlock from flyteadmin.models.core_if_else_block import CoreIfElseBlock @@ -178,7 +179,7 @@ from flyteadmin.models.core_workflow_metadata_defaults import CoreWorkflowMetadataDefaults from flyteadmin.models.core_workflow_node import CoreWorkflowNode from flyteadmin.models.core_workflow_template import CoreWorkflowTemplate -from flyteadmin.models.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat +from flyteadmin.models.data_loading_config_literal_map_format import DataLoadingConfigLiteralMapFormat from flyteadmin.models.event_node_execution_event import EventNodeExecutionEvent from flyteadmin.models.event_parent_task_execution_metadata import EventParentTaskExecutionMetadata from flyteadmin.models.event_task_execution_event import EventTaskExecutionEvent @@ -190,6 +191,8 @@ from flyteadmin.models.flyteidladmin_workflow_node_metadata import FlyteidladminWorkflowNodeMetadata from flyteadmin.models.flyteidlcore_schema import FlyteidlcoreSchema from flyteadmin.models.flyteidlevent_workflow_node_metadata import FlyteidleventWorkflowNodeMetadata +from flyteadmin.models.io_strategy_download_mode import IOStrategyDownloadMode +from flyteadmin.models.io_strategy_upload_mode import IOStrategyUploadMode from flyteadmin.models.protobuf_list_value import ProtobufListValue from flyteadmin.models.protobuf_null_value import ProtobufNullValue from flyteadmin.models.protobuf_struct import ProtobufStruct diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py index 344ca5a76d..83e4629d4a 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py @@ -16,7 +16,8 @@ import six -from flyteadmin.models.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat # noqa: F401,E501 +from flyteadmin.models.core_io_strategy import CoreIOStrategy # noqa: F401,E501 +from flyteadmin.models.data_loading_config_literal_map_format import DataLoadingConfigLiteralMapFormat # noqa: F401,E501 class CoreDataLoadingConfig(object): @@ -33,36 +34,62 @@ class CoreDataLoadingConfig(object): and the value is json key in definition. """ swagger_types = { + 'enabled': 'bool', 'input_path': 'str', 'output_path': 'str', - 'format': 'DataLoadingConfigMetadataFormat', - 'enabled': 'bool' + 'format': 'DataLoadingConfigLiteralMapFormat', + 'io_strategy': 'CoreIOStrategy' } attribute_map = { + 'enabled': 'enabled', 'input_path': 'input_path', 'output_path': 'output_path', 'format': 'format', - 'enabled': 'enabled' + 'io_strategy': 'io_strategy' } - def __init__(self, input_path=None, output_path=None, format=None, enabled=None): # noqa: E501 + def __init__(self, enabled=None, input_path=None, output_path=None, format=None, io_strategy=None): # noqa: E501 """CoreDataLoadingConfig - a model defined in Swagger""" # noqa: E501 + self._enabled = None self._input_path = None self._output_path = None self._format = None - self._enabled = None + self._io_strategy = None self.discriminator = None + if enabled is not None: + self.enabled = enabled if input_path is not None: self.input_path = input_path if output_path is not None: self.output_path = output_path if format is not None: self.format = format - if enabled is not None: - self.enabled = enabled + if io_strategy is not None: + self.io_strategy = io_strategy + + @property + def enabled(self): + """Gets the enabled of this CoreDataLoadingConfig. # noqa: E501 + + + :return: The enabled of this CoreDataLoadingConfig. # noqa: E501 + :rtype: bool + """ + return self._enabled + + @enabled.setter + def enabled(self, enabled): + """Sets the enabled of this CoreDataLoadingConfig. + + + :param enabled: The enabled of this CoreDataLoadingConfig. # noqa: E501 + :type: bool + """ + + self._enabled = enabled @property def input_path(self): @@ -112,7 +139,7 @@ def format(self): :return: The format of this CoreDataLoadingConfig. # noqa: E501 - :rtype: DataLoadingConfigMetadataFormat + :rtype: DataLoadingConfigLiteralMapFormat """ return self._format @@ -122,31 +149,31 @@ def format(self, format): :param format: The format of this CoreDataLoadingConfig. # noqa: E501 - :type: DataLoadingConfigMetadataFormat + :type: DataLoadingConfigLiteralMapFormat """ self._format = format @property - def enabled(self): - """Gets the enabled of this CoreDataLoadingConfig. # noqa: E501 + def io_strategy(self): + """Gets the io_strategy of this CoreDataLoadingConfig. # noqa: E501 - :return: The enabled of this CoreDataLoadingConfig. # noqa: E501 - :rtype: bool + :return: The io_strategy of this CoreDataLoadingConfig. # noqa: E501 + :rtype: CoreIOStrategy """ - return self._enabled + return self._io_strategy - @enabled.setter - def enabled(self, enabled): - """Sets the enabled of this CoreDataLoadingConfig. + @io_strategy.setter + def io_strategy(self, io_strategy): + """Sets the io_strategy of this CoreDataLoadingConfig. - :param enabled: The enabled of this CoreDataLoadingConfig. # noqa: E501 - :type: bool + :param io_strategy: The io_strategy of this CoreDataLoadingConfig. # noqa: E501 + :type: CoreIOStrategy """ - self._enabled = enabled + self._io_strategy = io_strategy def to_dict(self): """Returns the model properties as a dict""" diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_io_strategy.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_io_strategy.py new file mode 100644 index 0000000000..8260e8eb17 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_io_strategy.py @@ -0,0 +1,144 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + +from flyteadmin.models.io_strategy_download_mode import IOStrategyDownloadMode # noqa: F401,E501 +from flyteadmin.models.io_strategy_upload_mode import IOStrategyUploadMode # noqa: F401,E501 + + +class CoreIOStrategy(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'download_mode': 'IOStrategyDownloadMode', + 'upload_mode': 'IOStrategyUploadMode' + } + + attribute_map = { + 'download_mode': 'download_mode', + 'upload_mode': 'upload_mode' + } + + def __init__(self, download_mode=None, upload_mode=None): # noqa: E501 + """CoreIOStrategy - a model defined in Swagger""" # noqa: E501 + + self._download_mode = None + self._upload_mode = None + self.discriminator = None + + if download_mode is not None: + self.download_mode = download_mode + if upload_mode is not None: + self.upload_mode = upload_mode + + @property + def download_mode(self): + """Gets the download_mode of this CoreIOStrategy. # noqa: E501 + + + :return: The download_mode of this CoreIOStrategy. # noqa: E501 + :rtype: IOStrategyDownloadMode + """ + return self._download_mode + + @download_mode.setter + def download_mode(self, download_mode): + """Sets the download_mode of this CoreIOStrategy. + + + :param download_mode: The download_mode of this CoreIOStrategy. # noqa: E501 + :type: IOStrategyDownloadMode + """ + + self._download_mode = download_mode + + @property + def upload_mode(self): + """Gets the upload_mode of this CoreIOStrategy. # noqa: E501 + + + :return: The upload_mode of this CoreIOStrategy. # noqa: E501 + :rtype: IOStrategyUploadMode + """ + return self._upload_mode + + @upload_mode.setter + def upload_mode(self, upload_mode): + """Sets the upload_mode of this CoreIOStrategy. + + + :param upload_mode: The upload_mode of this CoreIOStrategy. # noqa: E501 + :type: IOStrategyUploadMode + """ + + self._upload_mode = upload_mode + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(CoreIOStrategy, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, CoreIOStrategy): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_metadata_format.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_literal_map_format.py similarity index 89% rename from flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_metadata_format.py rename to flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_literal_map_format.py index e0a4812962..1606391004 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_metadata_format.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_literal_map_format.py @@ -17,7 +17,7 @@ import six -class DataLoadingConfigMetadataFormat(object): +class DataLoadingConfigLiteralMapFormat(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -44,7 +44,7 @@ class DataLoadingConfigMetadataFormat(object): } def __init__(self): # noqa: E501 - """DataLoadingConfigMetadataFormat - a model defined in Swagger""" # noqa: E501 + """DataLoadingConfigLiteralMapFormat - a model defined in Swagger""" # noqa: E501 self.discriminator = None def to_dict(self): @@ -68,7 +68,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(DataLoadingConfigMetadataFormat, dict): + if issubclass(DataLoadingConfigLiteralMapFormat, dict): for key, value in self.items(): result[key] = value @@ -84,7 +84,7 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, DataLoadingConfigMetadataFormat): + if not isinstance(other, DataLoadingConfigLiteralMapFormat): return False return self.__dict__ == other.__dict__ diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_download_mode.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_download_mode.py new file mode 100644 index 0000000000..6210f026ef --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_download_mode.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + + +class IOStrategyDownloadMode(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + allowed enum values + """ + DOWNLOAD_EAGER = "DOWNLOAD_EAGER" + DOWNLOAD_STREAM = "DOWNLOAD_STREAM" + DO_NOT_DOWNLOAD = "DO_NOT_DOWNLOAD" + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + } + + attribute_map = { + } + + def __init__(self): # noqa: E501 + """IOStrategyDownloadMode - a model defined in Swagger""" # noqa: E501 + self.discriminator = None + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(IOStrategyDownloadMode, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, IOStrategyDownloadMode): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_upload_mode.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_upload_mode.py new file mode 100644 index 0000000000..95cfe6e357 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/io_strategy_upload_mode.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + + +class IOStrategyUploadMode(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + allowed enum values + """ + UPLOAD_ON_EXIT = "UPLOAD_ON_EXIT" + UPLOAD_EAGER = "UPLOAD_EAGER" + DO_NOT_UPLOAD = "DO_NOT_UPLOAD" + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + } + + attribute_map = { + } + + def __init__(self): # noqa: E501 + """IOStrategyUploadMode - a model defined in Swagger""" # noqa: E501 + self.discriminator = None + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(IOStrategyUploadMode, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, IOStrategyUploadMode): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_metadata_format.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_io_strategy.py similarity index 58% rename from flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_metadata_format.py rename to flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_io_strategy.py index a8f8f6466c..ce24dadfd2 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_metadata_format.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_io_strategy.py @@ -16,12 +16,12 @@ import unittest import flyteadmin -from flyteadmin.models.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat # noqa: E501 +from flyteadmin.models.core_io_strategy import CoreIOStrategy # noqa: E501 from flyteadmin.rest import ApiException -class TestDataLoadingConfigMetadataFormat(unittest.TestCase): - """DataLoadingConfigMetadataFormat unit test stubs""" +class TestCoreIOStrategy(unittest.TestCase): + """CoreIOStrategy unit test stubs""" def setUp(self): pass @@ -29,10 +29,10 @@ def setUp(self): def tearDown(self): pass - def testDataLoadingConfigMetadataFormat(self): - """Test DataLoadingConfigMetadataFormat""" + def testCoreIOStrategy(self): + """Test CoreIOStrategy""" # FIXME: construct object with mandatory attributes with example values - # model = flyteadmin.models.data_loading_config_metadata_format.DataLoadingConfigMetadataFormat() # noqa: E501 + # model = flyteadmin.models.core_io_strategy.CoreIOStrategy() # noqa: E501 pass diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_literal_map_format.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_literal_map_format.py new file mode 100644 index 0000000000..1f96ce5d92 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_literal_map_format.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.data_loading_config_literal_map_format import DataLoadingConfigLiteralMapFormat # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestDataLoadingConfigLiteralMapFormat(unittest.TestCase): + """DataLoadingConfigLiteralMapFormat unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testDataLoadingConfigLiteralMapFormat(self): + """Test DataLoadingConfigLiteralMapFormat""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.data_loading_config_literal_map_format.DataLoadingConfigLiteralMapFormat() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_download_mode.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_download_mode.py new file mode 100644 index 0000000000..12192e4964 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_download_mode.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.io_strategy_download_mode import IOStrategyDownloadMode # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestIOStrategyDownloadMode(unittest.TestCase): + """IOStrategyDownloadMode unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testIOStrategyDownloadMode(self): + """Test IOStrategyDownloadMode""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.io_strategy_download_mode.IOStrategyDownloadMode() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_upload_mode.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_upload_mode.py new file mode 100644 index 0000000000..25e3179cdb --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_io_strategy_upload_mode.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.io_strategy_upload_mode import IOStrategyUploadMode # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestIOStrategyUploadMode(unittest.TestCase): + """IOStrategyUploadMode unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testIOStrategyUploadMode(self): + """Test IOStrategyUploadMode""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.io_strategy_upload_mode.IOStrategyUploadMode() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/protos/flyteidl/core/tasks.proto b/flyteidl/protos/flyteidl/core/tasks.proto index ac6cedd761..bde550f49b 100644 --- a/flyteidl/protos/flyteidl/core/tasks.proto +++ b/flyteidl/protos/flyteidl/core/tasks.proto @@ -166,21 +166,49 @@ message Container { DataLoadingConfig data_config = 9; } +// Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets) +message IOStrategy { + // Mode to use for downloading + enum DownloadMode { + // All data will be downloaded before the main container is executed + DOWNLOAD_EAGER = 0; + // Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details + DOWNLOAD_STREAM = 1; + // Large objects (offloaded) will not be downloaded + DO_NOT_DOWNLOAD = 2; + } + // Mode to use for uploading + enum UploadMode { + // All data will be uploaded after the main container exits + UPLOAD_ON_EXIT = 0; + // Data will be uploaded as it appears. Refer to protocol specification for details + UPLOAD_EAGER = 1; + // Data will not be uploaded, only references will be written + DO_NOT_UPLOAD = 2; + } + // Mode to use to manage downloads + DownloadMode download_mode = 1; + // Mode to use to manage uploads + UploadMode upload_mode = 2; +} + // This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. // Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path // Any outputs generated by the user container - within output_path are automatically uploaded. message DataLoadingConfig { - // MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. + // LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. // If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. // JSON and YAML do not need any protobuf definitions to read it // All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) - enum MetadataFormat { + enum LiteralMapFormat { // JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html JSON = 0; YAML = 1; // Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core PROTO = 2; } + // Flag enables DataLoading Config. If this is not set, data loading will not be used! + bool enabled = 1; // File system path (start at root). This folder will contain all the inputs exploded to a separate file. // Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like // /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations @@ -188,12 +216,11 @@ message DataLoadingConfig { // /var/flyte/inputs/y -> Y is a file in Binary format // /var/flyte/inputs/z/... -> Note Z itself is a directory // More information about the protocol - refer to docs #TODO reference docs here - string input_path = 1; + string input_path = 2; // File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file - string output_path = 2; + string output_path = 3; // In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. // This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding - MetadataFormat format = 3; - // Flag enables DataLoading Config. If this is not set, data loading will not be used! - bool enabled = 4; + LiteralMapFormat format = 4; + IOStrategy io_strategy = 5; }