From f1330324ab27670227a2a06267b4fff3b7e56c7e Mon Sep 17 00:00:00 2001 From: Jason Scurtu Date: Fri, 10 Apr 2020 15:45:34 +0200 Subject: [PATCH 001/334] upstream required files for FlatHub https://github.com/flathub/flathub/pull/1446 https://github.com/prusa3d/PrusaSlicer/issues/3064 https://github.com/prusa3d/PrusaSlicer/issues/1124 --- .../data/com.prusa3d.PrusaSlicer.desktop | 12 ++++ .../data/com.prusa3d.PrusaSlicer.metainfo.xml | 62 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100755 resources/data/com.prusa3d.PrusaSlicer.desktop create mode 100755 resources/data/com.prusa3d.PrusaSlicer.metainfo.xml diff --git a/resources/data/com.prusa3d.PrusaSlicer.desktop b/resources/data/com.prusa3d.PrusaSlicer.desktop new file mode 100755 index 0000000000..8987222984 --- /dev/null +++ b/resources/data/com.prusa3d.PrusaSlicer.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=PrusaSlicer +GenericName=3D Printing Software +Icon=com.prusa3d.PrusaSlicer +Exec=prusa-slicer %F +Terminal=false +Type=Application +MimeType=model/stl;model/x-wavefront-obj;model/3mf;model/x-geomview-off;application/x-amf; +Categories=Graphics;3DGraphics;Engineering; +Keywords=3D;Printing;Slicer;slice;3D;printer;convert;gcode;stl;obj;amf;SLA +StartupNotify=false +StartupWMClass=prusa-slicer \ No newline at end of file diff --git a/resources/data/com.prusa3d.PrusaSlicer.metainfo.xml b/resources/data/com.prusa3d.PrusaSlicer.metainfo.xml new file mode 100755 index 0000000000..b62a57e480 --- /dev/null +++ b/resources/data/com.prusa3d.PrusaSlicer.metainfo.xml @@ -0,0 +1,62 @@ + + + com.prusa3d.PrusaSlicer + com.prusa3d.PrusaSlicer.desktop + + prusa-slicer.desktop + + PrusaSlicer + Powerful 3D printing slicer optimized for Prusa printers + 0BSD + AGPL-3.0-only + +

+ PrusaSlicer takes 3D models (STL, OBJ, AMF) and converts them into G-code + instructions for FFF printers or PNG layers for mSLA 3D printers. It's + compatible with any modern printer based on the RepRap toolchain, including all + those based on the Marlin, Prusa, Sprinter and Repetier firmware. It also works + with Mach3, LinuxCNC and Machinekit controllers. +

+

+ PrusaSlicer is based on Slic3r by Alessandro Ranelucci and the RepRap community. +

+

+ What are some of PrusaSlicer's main features? +

+
    +
  • multi-platform (Linux/Mac/Win) and packaged as standalone-app with no dependencies required
  • +
  • complete command-line interface to use it with no GUI
  • +
  • multi-material (multiple extruders) object printing
  • +
  • multiple G-code flavors supported (RepRap, Makerbot, Mach3, Machinekit etc.)
  • +
  • ability to plate multiple objects having distinct print settings
  • +
  • multithread processing
  • +
  • STL auto-repair (tolerance for broken models)
  • +
  • wide automated unit testing
  • +
+
+ https://www.prusa3d.com/prusaslicer/ + https://help.prusa3d.com + https://github.com/prusa3d/PrusaSlicer/issues + + + https://user-images.githubusercontent.com/590307/78981854-24d07580-7b21-11ea-9441-77923534a659.png + + + https://user-images.githubusercontent.com/590307/78981860-2863fc80-7b21-11ea-8c2d-8ff79ced2578.png + + + https://user-images.githubusercontent.com/590307/78981862-28fc9300-7b21-11ea-9b0d-d03e16b709d3.png + + + + + + +

This is final release of PrusaSlicer 2.2.0 introducing SLA hollowing and hole drilling, support for 3rd party printer vendors, 3Dconnexion support, + automatic variable layer height, macOS dark mode support, greatly improved ColorPrint feature and much, much more. + Several bugs found in the previous release candidate are fixed in this final release. See the respective change logs of the previous releases for all the + new features, improvements and bugfixes in the 2.2.0 series.

+
+
+
+
From cb73dd2ca6a11fd1e98b5f5ffe282590bb145520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Nov=C3=BD?= Date: Thu, 7 May 2020 20:33:15 +0200 Subject: [PATCH 002/334] Use https in config update URLs http://files.prusa3d.com/* always redirects to HTTPS so use https scheme directly. --- resources/profiles/BIBO.ini | 2 +- resources/profiles/Creality.ini | 4 ++-- resources/profiles/LulzBot.ini | 2 +- resources/profiles/PrusaResearch.ini | 4 ++-- src/slic3r/GUI/UpdateDialogs.cpp | 2 +- src/slic3r/Utils/PresetUpdater.cpp | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/profiles/BIBO.ini b/resources/profiles/BIBO.ini index 4a10de3cbc..b084d47b34 100644 --- a/resources/profiles/BIBO.ini +++ b/resources/profiles/BIBO.ini @@ -7,7 +7,7 @@ name = BIBO # This means, the server may force the PrusaSlicer configuration to be downgraded. config_version = 0.0.1 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/ +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/ # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index c8d8d9bfbe..a05728da64 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -7,8 +7,8 @@ name = Creality # This means, the server may force the PrusaSlicer configuration to be downgraded. config_version = 0.0.2 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ -# changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ +# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. diff --git a/resources/profiles/LulzBot.ini b/resources/profiles/LulzBot.ini index 53151d8195..fdd673d256 100644 --- a/resources/profiles/LulzBot.ini +++ b/resources/profiles/LulzBot.ini @@ -4,7 +4,7 @@ # Vendor name will be shown by the Config Wizard. name = LulzBot config_version = 0.0.1 -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ [printer_model:MINI_AERO] name = Mini Aero diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index cc22d50939..d279e7dda3 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -7,8 +7,8 @@ name = Prusa Research # This means, the server may force the PrusaSlicer configuration to be downgraded. config_version = 1.1.2 # Where to get the updates from? -config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ -changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1% +config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ +changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # The printer models will be shown by the Configuration Wizard in this order, # also the first model installed & the first nozzle installed will be activated after install. diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index b3b35d68d7..97a3e38805 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -25,7 +25,7 @@ namespace Slic3r { namespace GUI { -static const char* URL_CHANGELOG = "http://files.prusa3d.com/?latest=slicer-stable&lng=%1%"; +static const char* URL_CHANGELOG = "https://files.prusa3d.com/?latest=slicer-stable&lng=%1%"; static const char* URL_DOWNLOAD = "https://www.prusa3d.com/downloads&lng=%1%"; static const char* URL_DEV = "https://github.com/prusa3d/PrusaSlicer/releases/tag/version_%1%"; diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index b86775c88c..94e4a4c901 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -303,7 +303,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors) const std::string idx_path = (cache_path / (vendor.id + ".idx")).string(); const std::string idx_path_temp = idx_path + "-update"; //check if idx_url is leading to our site - if (! boost::starts_with(idx_url, "http://files.prusa3d.com/wp-content/uploads/repository/")) + if (! boost::starts_with(idx_url, "https://files.prusa3d.com/wp-content/uploads/repository/")) { BOOST_LOG_TRIVIAL(warning) << "unsafe url path for vendor \"" << vendor.name << "\" rejected: " << idx_url; continue; From 06e329655d94659239e503861ef9b81fd8440c98 Mon Sep 17 00:00:00 2001 From: Manuel Coenen Date: Thu, 4 Jun 2020 11:20:09 +0200 Subject: [PATCH 003/334] Add support for DuetSoftwareFramework based machines Also extend Http to be able to send PUT requests as well as setting POST body data directly. --- src/slic3r/Utils/Duet.cpp | 103 ++++++++++++++++++++++++++------------ src/slic3r/Utils/Duet.hpp | 11 ++-- src/slic3r/Utils/Http.cpp | 68 ++++++++++++++++++++----- src/slic3r/Utils/Http.hpp | 13 ++++- 4 files changed, 144 insertions(+), 51 deletions(-) diff --git a/src/slic3r/Utils/Duet.cpp b/src/slic3r/Utils/Duet.cpp index 4536dd2174..cc6b0ebd94 100644 --- a/src/slic3r/Utils/Duet.cpp +++ b/src/slic3r/Utils/Duet.cpp @@ -36,12 +36,10 @@ const char* Duet::get_name() const { return "Duet"; } bool Duet::test(wxString &msg) const { - bool connected = connect(msg); - if (connected) { - disconnect(); - } + auto connectionType = connect(msg); + disconnect(connectionType); - return connected; + return connectionType != Duet::ConnectionType::ERROR; } wxString Duet::get_test_ok_msg () const @@ -59,33 +57,39 @@ wxString Duet::get_test_failed_msg (wxString &msg) const bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const { wxString connect_msg; - if (!connect(connect_msg)) { + auto connectionType = connect(connect_msg); + if (connectionType == Duet::ConnectionType::ERROR) { error_fn(std::move(connect_msg)); return false; } bool res = true; + bool dsf = (connectionType == Duet::ConnectionType::DSF); - auto upload_cmd = get_upload_url(upload_data.upload_path.string()); + auto upload_cmd = get_upload_url(upload_data.upload_path.string(), connectionType); BOOST_LOG_TRIVIAL(info) << boost::format("Duet: Uploading file %1%, filepath: %2%, print: %3%, command: %4%") % upload_data.source_path % upload_data.upload_path % upload_data.start_print % upload_cmd; - auto http = Http::post(std::move(upload_cmd)); - http.set_post_body(upload_data.source_path) - .on_complete([&](std::string body, unsigned status) { + auto http = (dsf ? Http::put(std::move(upload_cmd)) : Http::post(std::move(upload_cmd))); + if (dsf) { + http.set_put_body(upload_data.source_path); + } else { + http.set_post_body(upload_data.source_path); + } + http.on_complete([&](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(debug) << boost::format("Duet: File uploaded: HTTP %1%: %2%") % status % body; - int err_code = get_err_code_from_body(body); + int err_code = dsf ? (status == 201 ? 0 : 1) : get_err_code_from_body(body); if (err_code != 0) { BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Request completed but error code was received: %1%") % err_code; error_fn(format_error(body, L("Unknown error occured"), 0)); res = false; } else if (upload_data.start_print) { wxString errormsg; - res = start_print(errormsg, upload_data.upload_path.string()); + res = start_print(errormsg, upload_data.upload_path.string(), connectionType); if (! res) { error_fn(std::move(errormsg)); } @@ -106,20 +110,28 @@ bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn e }) .perform_sync(); - disconnect(); + disconnect(connectionType); return res; } -bool Duet::connect(wxString &msg) const +Duet::ConnectionType Duet::connect(wxString &msg) const { - bool res = false; - auto url = get_connect_url(); + auto res = Duet::ConnectionType::ERROR; + auto url = get_connect_url(false); auto http = Http::get(std::move(url)); http.on_error([&](std::string body, std::string error, unsigned status) { - BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error connecting: %1%, HTTP %2%, body: `%3%`") % error % status % body; - msg = format_error(body, error, status); + auto dsfUrl = get_connect_url(true); + auto dsfHttp = Http::get(std::move(dsfUrl)); + dsfHttp.on_error([&](std::string body, std::string error, unsigned status) { + BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error connecting: %1%, HTTP %2%, body: `%3%`") % error % status % body; + msg = format_error(body, error, status); + }) + .on_complete([&](std::string body, unsigned) { + res = Duet::ConnectionType::DSF; + }) + .perform_sync(); }) .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("Duet: Got: %1%") % body; @@ -127,7 +139,7 @@ bool Duet::connect(wxString &msg) const int err_code = get_err_code_from_body(body); switch (err_code) { case 0: - res = true; + res = Duet::ConnectionType::RRF; break; case 1: msg = format_error(body, L("Wrong password"), 0); @@ -146,8 +158,12 @@ bool Duet::connect(wxString &msg) const return res; } -void Duet::disconnect() const +void Duet::disconnect(Duet::ConnectionType connectionType) const { + // we don't need to disconnect from DSF or if it failed anyway + if (connectionType != Duet::ConnectionType::RRF) { + return; + } auto url = (boost::format("%1%rr_disconnect") % get_base_url()).str(); @@ -159,20 +175,31 @@ void Duet::disconnect() const .perform_sync(); } -std::string Duet::get_upload_url(const std::string &filename) const +std::string Duet::get_upload_url(const std::string &filename, Duet::ConnectionType connectionType) const { - return (boost::format("%1%rr_upload?name=0:/gcodes/%2%&%3%") - % get_base_url() - % Http::url_encode(filename) - % timestamp_str()).str(); + if (connectionType == Duet::ConnectionType::DSF) { + return (boost::format("%1%machine/file/gcodes/%2%") + % get_base_url() + % Http::url_encode(filename)).str(); + } else { + return (boost::format("%1%rr_upload?name=0:/gcodes/%2%&%3%") + % get_base_url() + % Http::url_encode(filename) + % timestamp_str()).str(); + } } -std::string Duet::get_connect_url() const +std::string Duet::get_connect_url(const bool dsfUrl) const { - return (boost::format("%1%rr_connect?password=%2%&%3%") - % get_base_url() - % (password.empty() ? "reprap" : password) - % timestamp_str()).str(); + if (dsfUrl) { + return (boost::format("%1%machine/status") + % get_base_url()).str(); + } else { + return (boost::format("%1%rr_connect?password=%2%&%3%") + % get_base_url() + % (password.empty() ? "reprap" : password) + % timestamp_str()).str(); + } } std::string Duet::get_base_url() const @@ -201,15 +228,25 @@ std::string Duet::timestamp_str() const return std::string(buffer); } -bool Duet::start_print(wxString &msg, const std::string &filename) const +bool Duet::start_print(wxString &msg, const std::string &filename, Duet::ConnectionType connectionType) const { bool res = false; + bool dsf = (connectionType == Duet::ConnectionType::DSF); - auto url = (boost::format("%1%rr_gcode?gcode=M32%%20\"%2%\"") + auto url = dsf + ? (boost::format("%1%machine/code") + % get_base_url()).str() + : (boost::format("%1%rr_gcode?gcode=M32%%20\"0:/gcodes/%2%\"") % get_base_url() % Http::url_encode(filename)).str(); - auto http = Http::get(std::move(url)); + auto http = (dsf ? Http::post(std::move(url)) : Http::get(std::move(url))); + if (dsf) { + http.set_post_body( + (boost::format("M32 \"0:/gcodes/%1%\"") + % filename).str() + ); + } http.on_error([&](std::string body, std::string error, unsigned status) { BOOST_LOG_TRIVIAL(error) << boost::format("Duet: Error starting print: %1%, HTTP %2%, body: `%3%`") % error % status % body; msg = format_error(body, error, status); diff --git a/src/slic3r/Utils/Duet.hpp b/src/slic3r/Utils/Duet.hpp index 702efbddb6..41c6b1d755 100644 --- a/src/slic3r/Utils/Duet.hpp +++ b/src/slic3r/Utils/Duet.hpp @@ -29,16 +29,17 @@ public: std::string get_host() const override { return host; } private: + enum ConnectionType { RRF, DSF, ERROR }; std::string host; std::string password; - std::string get_upload_url(const std::string &filename) const; - std::string get_connect_url() const; + std::string get_upload_url(const std::string &filename, Duet::ConnectionType connectionType) const; + std::string get_connect_url(const bool dsfUrl) const; std::string get_base_url() const; std::string timestamp_str() const; - bool connect(wxString &msg) const; - void disconnect() const; - bool start_print(wxString &msg, const std::string &filename) const; + Duet::ConnectionType connect(wxString &msg) const; + void disconnect(Duet::ConnectionType connectionType) const; + bool start_print(wxString &msg, const std::string &filename, Duet::ConnectionType connectionType) const; int get_err_code_from_body(const std::string &body) const; }; diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index a16aac5b5b..3360f6eff5 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -35,11 +35,11 @@ struct CurlGlobalInit { static std::unique_ptr instance; std::string message; - + CurlGlobalInit() { #ifdef OPENSSL_CERT_OVERRIDE // defined if SLIC3R_STATIC=ON - + // Look for a set of distro specific directories. Don't change the // order: https://bugzilla.redhat.com/show_bug.cgi?id=1053882 static const char * CA_BUNDLES[] = { @@ -48,17 +48,17 @@ struct CurlGlobalInit "/usr/share/ssl/certs/ca-bundle.crt", "/usr/local/share/certs/ca-root-nss.crt", // FreeBSD "/etc/ssl/cert.pem", - "/etc/ssl/ca-bundle.pem" // OpenSUSE Tumbleweed + "/etc/ssl/ca-bundle.pem" // OpenSUSE Tumbleweed }; - + namespace fs = boost::filesystem; // Env var name for the OpenSSL CA bundle (SSL_CERT_FILE nomally) const char *const SSL_CA_FILE = X509_get_default_cert_file_env(); const char * ssl_cafile = ::getenv(SSL_CA_FILE); - + if (!ssl_cafile) ssl_cafile = X509_get_default_cert_file(); - + int replace = true; if (!ssl_cafile || !fs::exists(fs::path(ssl_cafile))) { const char * bundle = nullptr; @@ -86,15 +86,15 @@ struct CurlGlobalInit } #endif // OPENSSL_CERT_OVERRIDE - + if (CURLcode ec = ::curl_global_init(CURL_GLOBAL_DEFAULT)) { message += _u8L("CURL init has failed. PrusaSlicer will be unable to establish " "network connections. See logs for additional details."); - + BOOST_LOG_TRIVIAL(error) << ::curl_easy_strerror(ec); } } - + ~CurlGlobalInit() { ::curl_global_cleanup(); } }; @@ -120,6 +120,7 @@ struct Http::priv std::string error_buffer; // Used for CURLOPT_ERRORBUFFER size_t limit; bool cancel; + fs::ifstream* putFile; std::thread io_thread; Http::CompleteFn completefn; @@ -138,6 +139,8 @@ struct Http::priv void set_timeout_connect(long timeout); void form_add_file(const char *name, const fs::path &path, const char* filename); void set_post_body(const fs::path &path); + void set_post_body(const std::string body); + void set_put_body(const fs::path &path); std::string curl_error(CURLcode curlcode); std::string body_size_error(); @@ -152,9 +155,10 @@ Http::priv::priv(const std::string &url) , error_buffer(CURL_ERROR_SIZE + 1, '\0') , limit(0) , cancel(false) + , putFile(nullptr) { Http::tls_global_init(); - + if (curl == nullptr) { throw std::runtime_error(std::string("Could not construct Curl object")); } @@ -284,6 +288,22 @@ void Http::priv::set_post_body(const fs::path &path) postfields = file_content; } +void Http::priv::set_post_body(const std::string body) +{ + postfields = body; +} + +void Http::priv::set_put_body(const fs::path &path) +{ + boost::system::error_code ec; + boost::uintmax_t filesize = file_size(path, ec); + if (!ec) { + putFile = new fs::ifstream(path); + ::curl_easy_setopt(curl, CURLOPT_READDATA, (void *) (putFile)); + ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, filesize); + } +} + std::string Http::priv::curl_error(CURLcode curlcode) { return (boost::format("%1%:\n%2%\n[Error %3%]") @@ -335,6 +355,11 @@ void Http::priv::http_perform() CURLcode res = ::curl_easy_perform(curl); + if (putFile != nullptr) { + delete putFile; + putFile = nullptr; + } + if (res != CURLE_OK) { if (res == CURLE_ABORTED_BY_CALLBACK) { if (cancel) { @@ -455,6 +480,18 @@ Http& Http::set_post_body(const fs::path &path) return *this; } +Http& Http::set_post_body(const std::string body) +{ + if (p) { p->set_post_body(body); } + return *this; +} + +Http& Http::set_put_body(const fs::path &path) +{ + if (p) { p->set_put_body(path);} + return *this; +} + Http& Http::on_complete(CompleteFn fn) { if (p) { p->completefn = std::move(fn); } @@ -509,6 +546,13 @@ Http Http::post(std::string url) return http; } +Http Http::put(std::string url) +{ + Http http{std::move(url)}; + curl_easy_setopt(http.p->curl, CURLOPT_UPLOAD, 1L); + return http; +} + bool Http::ca_file_supported() { ::CURL *curl = ::curl_easy_init(); @@ -521,7 +565,7 @@ std::string Http::tls_global_init() { if (!CurlGlobalInit::instance) CurlGlobalInit::instance = std::make_unique(); - + return CurlGlobalInit::instance->message; } @@ -532,7 +576,7 @@ std::string Http::tls_system_cert_store() #ifdef OPENSSL_CERT_OVERRIDE ret = ::getenv(X509_get_default_cert_file_env()); #endif - + return ret; } diff --git a/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp index f162362796..1ee47606e0 100644 --- a/src/slic3r/Utils/Http.hpp +++ b/src/slic3r/Utils/Http.hpp @@ -49,6 +49,7 @@ public: // for a GET and a POST request respectively. static Http get(std::string url); static Http post(std::string url); + static Http put(std::string url); ~Http(); Http(const Http &) = delete; @@ -80,6 +81,16 @@ public: // This can be used for hosts which do not support multipart requests. Http& set_post_body(const boost::filesystem::path &path); + // Set the POST request body. + // The data is used verbatim, it is not additionally encoded in any way. + // This can be used for hosts which do not support multipart requests. + Http& set_post_body(const std::string body); + + // Set the file contents as a PUT request body. + // The data is used verbatim, it is not additionally encoded in any way. + // This can be used for hosts which do not support multipart requests. + Http& set_put_body(const boost::filesystem::path &path); + // Callback called on HTTP request complete Http& on_complete(CompleteFn fn); // Callback called on an error occuring at any stage of the requests: Url parsing, DNS lookup, @@ -100,7 +111,7 @@ public: // Tells whether current backend supports seting up a CA file using ca_file() static bool ca_file_supported(); - + // Return empty string on success or error message on fail. static std::string tls_global_init(); static std::string tls_system_cert_store(); From 1da6a2c20fd96816291b3105b04f383f9b3f4f23 Mon Sep 17 00:00:00 2001 From: Manuel Coenen Date: Mon, 29 Jun 2020 12:14:53 +0200 Subject: [PATCH 004/334] Fix compiler error with VS2019 (hopefully) --- src/slic3r/Utils/Duet.cpp | 24 ++++++++++++------------ src/slic3r/Utils/Duet.hpp | 10 +++++----- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/slic3r/Utils/Duet.cpp b/src/slic3r/Utils/Duet.cpp index cc6b0ebd94..4a510bb04b 100644 --- a/src/slic3r/Utils/Duet.cpp +++ b/src/slic3r/Utils/Duet.cpp @@ -39,7 +39,7 @@ bool Duet::test(wxString &msg) const auto connectionType = connect(msg); disconnect(connectionType); - return connectionType != Duet::ConnectionType::ERROR; + return connectionType != ConnectionType::error; } wxString Duet::get_test_ok_msg () const @@ -58,13 +58,13 @@ bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn e { wxString connect_msg; auto connectionType = connect(connect_msg); - if (connectionType == Duet::ConnectionType::ERROR) { + if (connectionType == ConnectionType::error) { error_fn(std::move(connect_msg)); return false; } bool res = true; - bool dsf = (connectionType == Duet::ConnectionType::DSF); + bool dsf = (connectionType == ConnectionType::dsf); auto upload_cmd = get_upload_url(upload_data.upload_path.string(), connectionType); BOOST_LOG_TRIVIAL(info) << boost::format("Duet: Uploading file %1%, filepath: %2%, print: %3%, command: %4%") @@ -117,7 +117,7 @@ bool Duet::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn e Duet::ConnectionType Duet::connect(wxString &msg) const { - auto res = Duet::ConnectionType::ERROR; + auto res = ConnectionType::error; auto url = get_connect_url(false); auto http = Http::get(std::move(url)); @@ -129,7 +129,7 @@ Duet::ConnectionType Duet::connect(wxString &msg) const msg = format_error(body, error, status); }) .on_complete([&](std::string body, unsigned) { - res = Duet::ConnectionType::DSF; + res = ConnectionType::dsf; }) .perform_sync(); }) @@ -139,7 +139,7 @@ Duet::ConnectionType Duet::connect(wxString &msg) const int err_code = get_err_code_from_body(body); switch (err_code) { case 0: - res = Duet::ConnectionType::RRF; + res = ConnectionType::rrf; break; case 1: msg = format_error(body, L("Wrong password"), 0); @@ -158,10 +158,10 @@ Duet::ConnectionType Duet::connect(wxString &msg) const return res; } -void Duet::disconnect(Duet::ConnectionType connectionType) const +void Duet::disconnect(ConnectionType connectionType) const { // we don't need to disconnect from DSF or if it failed anyway - if (connectionType != Duet::ConnectionType::RRF) { + if (connectionType != ConnectionType::rrf) { return; } auto url = (boost::format("%1%rr_disconnect") @@ -175,9 +175,9 @@ void Duet::disconnect(Duet::ConnectionType connectionType) const .perform_sync(); } -std::string Duet::get_upload_url(const std::string &filename, Duet::ConnectionType connectionType) const +std::string Duet::get_upload_url(const std::string &filename, ConnectionType connectionType) const { - if (connectionType == Duet::ConnectionType::DSF) { + if (connectionType == ConnectionType::dsf) { return (boost::format("%1%machine/file/gcodes/%2%") % get_base_url() % Http::url_encode(filename)).str(); @@ -228,10 +228,10 @@ std::string Duet::timestamp_str() const return std::string(buffer); } -bool Duet::start_print(wxString &msg, const std::string &filename, Duet::ConnectionType connectionType) const +bool Duet::start_print(wxString &msg, const std::string &filename, ConnectionType connectionType) const { bool res = false; - bool dsf = (connectionType == Duet::ConnectionType::DSF); + bool dsf = (connectionType == ConnectionType::dsf); auto url = dsf ? (boost::format("%1%machine/code") diff --git a/src/slic3r/Utils/Duet.hpp b/src/slic3r/Utils/Duet.hpp index 41c6b1d755..597df02b35 100644 --- a/src/slic3r/Utils/Duet.hpp +++ b/src/slic3r/Utils/Duet.hpp @@ -29,17 +29,17 @@ public: std::string get_host() const override { return host; } private: - enum ConnectionType { RRF, DSF, ERROR }; + enum class ConnectionType { rrf, dsf, error }; std::string host; std::string password; - std::string get_upload_url(const std::string &filename, Duet::ConnectionType connectionType) const; + std::string get_upload_url(const std::string &filename, ConnectionType connectionType) const; std::string get_connect_url(const bool dsfUrl) const; std::string get_base_url() const; std::string timestamp_str() const; - Duet::ConnectionType connect(wxString &msg) const; - void disconnect(Duet::ConnectionType connectionType) const; - bool start_print(wxString &msg, const std::string &filename, Duet::ConnectionType connectionType) const; + ConnectionType connect(wxString &msg) const; + void disconnect(ConnectionType connectionType) const; + bool start_print(wxString &msg, const std::string &filename, ConnectionType connectionType) const; int get_err_code_from_body(const std::string &body) const; }; From 7e926e36eae4e32fa09423a8511acedcf292ec6b Mon Sep 17 00:00:00 2001 From: Pascal de Bruijn Date: Sun, 5 Jul 2020 14:15:24 +0200 Subject: [PATCH 005/334] ender3_bed.stl: Ender3 improved bed model Simpler bed model, with a modeled front lip, which is a clear visual indicator which side of the bed is the front of the printer. --- resources/profiles/Creality/ender3_bed.stl | Bin 50484 -> 115894 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/profiles/Creality/ender3_bed.stl b/resources/profiles/Creality/ender3_bed.stl index fb8f86d094e6cc1adf87808aefa292fb217000ea..724d8905e002a42e5a3cc1bc3ba193594fda1a72 100644 GIT binary patch literal 115894 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 Date: Mon, 20 Jul 2020 20:57:37 +1000 Subject: [PATCH 006/334] Add G10 temperature G-code support for the RepRapFirmware flavour. --- src/libslic3r/GCode.cpp | 42 +++++++++++++++++++++++++++++++---- src/libslic3r/GCodeWriter.cpp | 21 ++++++++++++------ 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 7fc531b92f..975e15c6c7 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1574,9 +1574,9 @@ std::string GCode::placeholder_parser_process(const std::string &name, const std } } -// Parse the custom G-code, try to find mcode_set_temp_dont_wait and mcode_set_temp_and_wait inside the custom G-code. +// Parse the custom G-code, try to find mcode_set_temp_dont_wait and mcode_set_temp_and_wait or optionally G10 with temperature inside the custom G-code. // Returns true if one of the temp commands are found, and try to parse the target temperature value into temp_out. -static bool custom_gcode_sets_temperature(const std::string &gcode, const int mcode_set_temp_dont_wait, const int mcode_set_temp_and_wait, int &temp_out) +static bool custom_gcode_sets_temperature(const std::string &gcode, const int mcode_set_temp_dont_wait, const int mcode_set_temp_and_wait, const bool include_g10, int &temp_out) { temp_out = -1; if (gcode.empty()) @@ -1619,6 +1619,40 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc } } } + } else if (*ptr == 'G' && include_g10) { // Only check for G10 if requested + // Line starts with 'G'. + ++ ptr; + // Parse the G code value. + char *endptr = nullptr; + int gcode = int(strtol(ptr, &endptr, 10)); + if (endptr != nullptr && endptr != ptr && gcode == 10 /* G10 */) { + // G10 code found + ptr = endptr; + // Now try to parse the temperature value. + // While not at the end of the line: + while (strchr(";\r\n\0", *ptr) == nullptr) { + // Skip whitespaces. + for (; *ptr == ' ' || *ptr == '\t'; ++ ptr); + if (*ptr == 'S') { + // Skip whitespaces. + for (++ ptr; *ptr == ' ' || *ptr == '\t'; ++ ptr); + // Parse an int. + endptr = nullptr; + long temp_parsed = strtol(ptr, &endptr, 10); + if (endptr > ptr) { + ptr = endptr; + temp_out = temp_parsed; + // Let the caller know that the custom G-code sets the temperature + // Only do this after successfully parsing temperature since G10 + // can be used for other reasons + temp_set_by_gcode = true; + } + } else { + // Skip this word. + for (; strchr(" \t;\r\n\0", *ptr) == nullptr; ++ ptr); + } + } + } } // Skip the rest of the line. for (; *ptr != 0 && *ptr != '\r' && *ptr != '\n'; ++ ptr); @@ -1668,7 +1702,7 @@ void GCode::_print_first_layer_bed_temperature(FILE *file, Print &print, const s int temp = print.config().first_layer_bed_temperature.get_at(first_printing_extruder_id); // Is the bed temperature set by the provided custom G-code? int temp_by_gcode = -1; - bool temp_set_by_gcode = custom_gcode_sets_temperature(gcode, 140, 190, temp_by_gcode); + bool temp_set_by_gcode = custom_gcode_sets_temperature(gcode, 140, 190, false, temp_by_gcode); if (temp_set_by_gcode && temp_by_gcode >= 0 && temp_by_gcode < 1000) temp = temp_by_gcode; // Always call m_writer.set_bed_temperature() so it will set the internal "current" state of the bed temp as if @@ -1686,7 +1720,7 @@ void GCode::_print_first_layer_extruder_temperatures(FILE *file, Print &print, c { // Is the bed temperature set by the provided custom G-code? int temp_by_gcode = -1; - if (custom_gcode_sets_temperature(gcode, 104, 109, temp_by_gcode)) { + if (custom_gcode_sets_temperature(gcode, 104, 109, true, temp_by_gcode)) { // Set the extruder temperature at m_writer, but throw away the generated G-code as it will be written with the custom G-code. int temp = print.config().first_layer_temperature.get_at(first_printing_extruder_id); if (temp_by_gcode >= 0 && temp_by_gcode < 1000) diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 38a1c3ebee..98a6ed4a49 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -72,11 +72,15 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in return ""; std::string code, comment; - if (wait && FLAVOR_IS_NOT(gcfTeacup)) { + if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRap)) { code = "M109"; comment = "set temperature and wait for it to be reached"; } else { - code = "M104"; + if (FLAVOR_IS(gcfRepRap)) { // M104 is deprecated on RepRapFirmware + code = "G10"; + } else { + code = "M104"; + } comment = "set temperature"; } @@ -88,14 +92,17 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in gcode << "S"; } gcode << temperature; - if (tool != -1 && - ( (this->multiple_extruders && ! m_single_extruder_multi_material) || - FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { - gcode << " T" << tool; + bool multiple_tools = this->multiple_extruders && ! m_single_extruder_multi_material; + if (tool != -1 && (multiple_tools || FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { + if (FLAVOR_IS(gcfRepRap)) { + gcode << " P" << tool; + } else { + gcode << " T" << tool; + } } gcode << " ; " << comment << "\n"; - if (FLAVOR_IS(gcfTeacup) && wait) + if ((FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepRap)) && wait) gcode << "M116 ; wait for temperature to be reached\n"; return gcode.str(); From f6d25d0634c0c40855aafce02bad4c3de734eea2 Mon Sep 17 00:00:00 2001 From: Paul Arden Date: Fri, 21 Aug 2020 14:07:50 +1000 Subject: [PATCH 007/334] Rework G10 temperature support to be enabled only for a new Firmware type `RepRapFirmware` leaving the `RepRap/Sprinter` behaviour alone. Rename the enum for `gcfRepRap` to `gcfRepRapSprinter` and add new `gcfRepRapFirmware` enum value. Also adds code to only use the G10 searching in custom G-code if the flavour is RepRapFirmware. --- src/libslic3r/GCode.cpp | 5 +++-- src/libslic3r/GCode/WipeTower.cpp | 4 ++-- src/libslic3r/GCodeTimeEstimator.cpp | 7 ++++--- src/libslic3r/GCodeWriter.cpp | 16 +++++++++++----- src/libslic3r/Print.cpp | 5 +++-- src/libslic3r/PrintConfig.cpp | 9 ++++++--- src/libslic3r/PrintConfig.hpp | 5 +++-- 7 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 975e15c6c7..f863fd3ee8 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -500,7 +500,7 @@ std::string WipeTowerIntegration::prime(GCode &gcodegen) // Disable linear advance for the wipe tower operations. - //gcode += (gcodegen.config().gcode_flavor == gcfRepRap ? std::string("M572 D0 S0\n") : std::string("M900 K0\n")); + //gcode += (gcodegen.config().gcode_flavor == gcfRepRapSprinter ? std::string("M572 D0 S0\n") : std::string("M900 K0\n")); for (const WipeTower::ToolChangeResult& tcr : m_priming) { if (!tcr.extrusions.empty()) @@ -1720,7 +1720,8 @@ void GCode::_print_first_layer_extruder_temperatures(FILE *file, Print &print, c { // Is the bed temperature set by the provided custom G-code? int temp_by_gcode = -1; - if (custom_gcode_sets_temperature(gcode, 104, 109, true, temp_by_gcode)) { + bool include_g10 = (print.config().gcode_flavor == gcfRepRapFirmware); + if (custom_gcode_sets_temperature(gcode, 104, 109, include_g10, temp_by_gcode)) { // Set the extruder temperature at m_writer, but throw away the generated G-code as it will be written with the custom G-code. int temp = print.config().first_layer_temperature.get_at(first_printing_extruder_id); if (temp_by_gcode >= 0 && temp_by_gcode < 1000) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index c0f778687c..b2534361f3 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -102,7 +102,7 @@ public: } WipeTowerWriter& disable_linear_advance() { - m_gcode += (m_gcode_flavor == gcfRepRap + m_gcode += (m_gcode_flavor == gcfRepRapSprinter || m_gcode_flavor == gcfRepRapFirmware ? (std::string("M572 D") + std::to_string(m_current_tool) + " S0\n") : std::string("M900 K0\n")); return *this; @@ -351,7 +351,7 @@ public: // Set digital trimpot motor WipeTowerWriter& set_extruder_trimpot(int current) { - if (m_gcode_flavor == gcfRepRap) + if (m_gcode_flavor == gcfRepRapSprinter || m_gcode_flavor == gcfRepRapFirmware) m_gcode += "M906 E"; else m_gcode += "M907 E"; diff --git a/src/libslic3r/GCodeTimeEstimator.cpp b/src/libslic3r/GCodeTimeEstimator.cpp index 9e8137ef0e..795fecbeb1 100644 --- a/src/libslic3r/GCodeTimeEstimator.cpp +++ b/src/libslic3r/GCodeTimeEstimator.cpp @@ -622,7 +622,7 @@ namespace Slic3r { void GCodeTimeEstimator::set_default() { set_units(Millimeters); - set_dialect(gcfRepRap); + set_dialect(gcfRepRapSprinter); set_global_positioning_type(Absolute); set_e_local_positioning_type(Absolute); @@ -1201,7 +1201,8 @@ namespace Slic3r { if ((dialect == gcfRepetier) || (dialect == gcfMarlin) || (dialect == gcfSmoothie) || - (dialect == gcfRepRap)) + (dialect == gcfRepRapSprinter) || + (dialect == gcfRepRapFirmware)) { if (line.has_value('S', value)) extra_time += value; @@ -1313,7 +1314,7 @@ namespace Slic3r { GCodeFlavor dialect = get_dialect(); // see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration - float factor = ((dialect != gcfRepRap) && (get_units() == GCodeTimeEstimator::Inches)) ? INCHES_TO_MM : 1.0f; + float factor = ((dialect != gcfRepRapSprinter && dialect != gcfRepRapFirmware) && (get_units() == GCodeTimeEstimator::Inches)) ? INCHES_TO_MM : 1.0f; if (line.has_x()) set_axis_max_acceleration(X, line.x() * factor); diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 98a6ed4a49..569ae65e58 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -46,7 +46,13 @@ std::string GCodeWriter::preamble() gcode << "G21 ; set units to millimeters\n"; gcode << "G90 ; use absolute coordinates\n"; } - if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie)) { + if (FLAVOR_IS(gcfRepRapSprinter) || + FLAVOR_IS(gcfRepRapFirmware) || + FLAVOR_IS(gcfMarlin) || + FLAVOR_IS(gcfTeacup) || + FLAVOR_IS(gcfRepetier) || + FLAVOR_IS(gcfSmoothie)) + { if (this->config.use_relative_e_distances) { gcode << "M83 ; use relative distances for extrusion\n"; } else { @@ -72,11 +78,11 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in return ""; std::string code, comment; - if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRap)) { + if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRapFirmware)) { code = "M109"; comment = "set temperature and wait for it to be reached"; } else { - if (FLAVOR_IS(gcfRepRap)) { // M104 is deprecated on RepRapFirmware + if (FLAVOR_IS(gcfRepRapFirmware)) { // M104 is deprecated on RepRapFirmware code = "G10"; } else { code = "M104"; @@ -94,7 +100,7 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in gcode << temperature; bool multiple_tools = this->multiple_extruders && ! m_single_extruder_multi_material; if (tool != -1 && (multiple_tools || FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { - if (FLAVOR_IS(gcfRepRap)) { + if (FLAVOR_IS(gcfRepRapFirmware)) { gcode << " P" << tool; } else { gcode << " T" << tool; @@ -102,7 +108,7 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in } gcode << " ; " << comment << "\n"; - if ((FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepRap)) && wait) + if ((FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepRapFirmware)) && wait) gcode << "M116 ; wait for temperature to be reached\n"; return gcode.str(); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 0c8a11fcf0..878380955a 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1259,8 +1259,9 @@ std::string Print::validate() const "and use filaments of the same diameter."); } - if (m_config.gcode_flavor != gcfRepRap && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin) - return L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."); + if (m_config.gcode_flavor != gcfRepRapSprinter && m_config.gcode_flavor != gcfRepRapFirmware && + m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin) + return L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."); if (! m_config.use_relative_e_distances) return L("The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."); if (m_config.ooze_prevention) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index d6a23d75d3..0d7ddeecdf 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -953,6 +953,7 @@ void PrintConfigDef::init_fff_params() "The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("reprap"); + def->enum_values.push_back("reprapfirmware"); def->enum_values.push_back("repetier"); def->enum_values.push_back("teacup"); def->enum_values.push_back("makerware"); @@ -963,6 +964,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("smoothie"); def->enum_values.push_back("no-extrusion"); def->enum_labels.push_back("RepRap/Sprinter"); + def->enum_labels.push_back("RepRapFirmware"); def->enum_labels.push_back("Repetier"); def->enum_labels.push_back("Teacup"); def->enum_labels.push_back("MakerWare (MakerBot)"); @@ -973,7 +975,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back("Smoothie"); def->enum_labels.push_back(L("No extrusion")); def->mode = comExpert; - def->set_default_value(new ConfigOptionEnum(gcfRepRap)); + def->set_default_value(new ConfigOptionEnum(gcfRepRapSprinter)); def = this->add("gcode_label_objects", coBool); def->label = L("Label objects"); @@ -3290,11 +3292,12 @@ std::string FullPrintConfig::validate() if (this->use_firmware_retraction.value && this->gcode_flavor.value != gcfSmoothie && - this->gcode_flavor.value != gcfRepRap && + this->gcode_flavor.value != gcfRepRapSprinter && + this->gcode_flavor.value != gcfRepRapFirmware && this->gcode_flavor.value != gcfMarlin && this->gcode_flavor.value != gcfMachinekit && this->gcode_flavor.value != gcfRepetier) - return "--use-firmware-retraction is only supported by Marlin, Smoothie, Repetier and Machinekit firmware"; + return "--use-firmware-retraction is only supported by Marlin, Smoothie, RepRapFirmware, Repetier and Machinekit firmware"; if (this->use_firmware_retraction.value) for (unsigned char wipe : this->wipe.values) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f28ef2a228..0ab51718bd 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -25,7 +25,7 @@ namespace Slic3r { enum GCodeFlavor : unsigned char { - gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfSailfish, gcfMach3, gcfMachinekit, + gcfRepRapSprinter, gcfRepRapFirmware, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfSailfish, gcfMach3, gcfMachinekit, gcfSmoothie, gcfNoExtrusion, }; @@ -84,7 +84,8 @@ template<> inline const t_config_enum_values& ConfigOptionEnum inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { static t_config_enum_values keys_map; if (keys_map.empty()) { - keys_map["reprap"] = gcfRepRap; + keys_map["reprap"] = gcfRepRapSprinter; + keys_map["reprapfirmware"] = gcfRepRapFirmware; keys_map["repetier"] = gcfRepetier; keys_map["teacup"] = gcfTeacup; keys_map["makerware"] = gcfMakerWare; From c2ba096d062a5978b149c510e7537cf1c596778e Mon Sep 17 00:00:00 2001 From: Giles Bathgate Date: Mon, 7 Sep 2020 19:03:12 +0100 Subject: [PATCH 008/334] Document the additional cmake flag Document the additional cmake flag needed for compilation on ubuntu 20.04 focal --- doc/How to build - Linux et al.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/How to build - Linux et al.md b/doc/How to build - Linux et al.md index 9206ae1ed2..a8f2441be5 100644 --- a/doc/How to build - Linux et al.md +++ b/doc/How to build - Linux et al.md @@ -56,6 +56,10 @@ This is done by passing this option to CMake: Note that PrusaSlicer is tested with wxWidgets 3.0 somewhat sporadically and so there may be bugs in bleeding edge releases. +When building on ubuntu 20.04 focal fossa, the package libwxgtk3.0-gtk3-dev needs to be installed instead of libwxgtk3.0-dev and you should use: + + -DSLIC3R_WX_STABLE=1 -DSLIC3R_GTK=3 + ### Build variant By default PrusaSlicer builds the release variant. From ba7f39afee6eff37bdc6110f9fb7e469795e396f Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sun, 13 Sep 2020 02:17:19 +0200 Subject: [PATCH 009/334] Introduce GUI_App::code_font() --- src/slic3r/GUI/GUI_App.cpp | 6 ++++++ src/slic3r/GUI/GUI_App.hpp | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index d59a83e875..1673610da1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -869,6 +869,11 @@ void GUI_App::init_fonts() m_small_font.SetPointSize(11); m_bold_font.SetPointSize(13); #endif /*__WXMAC__*/ + + // wxSYS_OEM_FIXED_FONT and wxSYS_ANSI_FIXED_FONT use the same as + // DEFAULT in wxGtk. Use the TELETYPE family as a work-around + m_code_font = wxFont(wxFontInfo().Family(wxFONTFAMILY_TELETYPE)); + m_code_font.SetPointSize(m_normal_font.GetPointSize()); } void GUI_App::update_fonts(const MainFrame *main_frame) @@ -884,6 +889,7 @@ void GUI_App::update_fonts(const MainFrame *main_frame) m_small_font = m_normal_font; m_bold_font = main_frame->normal_font().Bold(); m_em_unit = main_frame->em_unit(); + m_code_font.SetPointSize(m_normal_font.GetPointSize()); } void GUI_App::set_label_clr_modified(const wxColour& clr) { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 9bf470a42d..56b2f7f1af 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -118,6 +118,7 @@ private: wxFont m_small_font; wxFont m_bold_font; wxFont m_normal_font; + wxFont m_code_font; int m_em_unit; // width of a "m"-symbol in pixels for current system font // Note: for 100% Scale m_em_unit = 10 -> it's a good enough coefficient for a size setting of controls @@ -177,6 +178,7 @@ public: const wxFont& small_font() { return m_small_font; } const wxFont& bold_font() { return m_bold_font; } const wxFont& normal_font() { return m_normal_font; } + const wxFont& code_font() { return m_code_font; } int em_unit() const { return m_em_unit; } wxSize get_min_size() const; float toolbar_icon_scale(const bool is_limited = false) const; From cd4ad5e78b7b3477b589de13b40a2c945e01aaec Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sun, 13 Sep 2020 02:19:36 +0200 Subject: [PATCH 010/334] Introduce ConfigOptionDef::is_code to select code_font() --- src/libslic3r/Config.hpp | 2 ++ src/slic3r/GUI/Field.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 87e0208986..c6b7c77280 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -1413,6 +1413,8 @@ public: bool multiline = false; // For text input: If true, the GUI text box spans the complete page width. bool full_width = false; + // For text input: If true, the GUI formats text as code (fixed-width) + bool is_code = false; // Not editable. Currently only used for the display of the number of threads. bool readonly = false; // Height of a multiline GUI text box. diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index a21826205b..44bb22e8de 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -373,7 +373,9 @@ void TextCtrl::BUILD() { const long style = m_opt.multiline ? wxTE_MULTILINE : wxTE_PROCESS_ENTER/*0*/; auto temp = new wxTextCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, style); - temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + temp->SetFont(m_opt.is_code ? + Slic3r::GUI::wxGetApp().code_font(): + Slic3r::GUI::wxGetApp().normal_font()); if (! m_opt.multiline && !wxOSX) // Only disable background refresh for single line input fields, as they are completely painted over by the edit control. From 87534bf0d4d0c78d0a64dc4f9dcb0bc84778acb1 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sun, 13 Sep 2020 02:35:07 +0200 Subject: [PATCH 011/334] Format all G-code sections as code --- src/slic3r/GUI/Tab.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 29c9e33022..274c6b297c 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1790,12 +1790,14 @@ void TabFilament::build() optgroup = page->new_optgroup(L("Start G-code"), 0); option = optgroup->get_option("start_filament_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;// 150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("End G-code"), 0); option = optgroup->get_option("end_filament_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;// 150; optgroup->append_single_option_line(option); @@ -2204,51 +2206,60 @@ void TabPrinter::build_fff() optgroup = page->new_optgroup(L("Start G-code"), 0); option = optgroup->get_option("start_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("End G-code"), 0); option = optgroup->get_option("end_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Before layer change G-code"), 0); option = optgroup->get_option("before_layer_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("After layer change G-code"), 0); option = optgroup->get_option("layer_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Tool change G-code"), 0); option = optgroup->get_option("toolchange_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Between objects G-code (for sequential printing)"), 0); option = optgroup->get_option("between_objects_gcode"); option.opt.full_width = true; + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Color Change G-code"), 0); option = optgroup->get_option("color_change_gcode"); + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Pause Print G-code"), 0); option = optgroup->get_option("pause_print_gcode"); + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Template Custom G-code"), 0); option = optgroup->get_option("template_custom_gcode"); + option.opt.is_code = true; option.opt.height = gcode_field_height;//150; optgroup->append_single_option_line(option); From 0edbc59fa317dbd0bd282ddbd11c7176e16e89ef Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sun, 13 Sep 2020 02:35:32 +0200 Subject: [PATCH 012/334] Update FirmwareDialog to use GUI_App::code_font --- src/slic3r/GUI/FirmwareDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp index fe7ff4e5de..9ebc250059 100644 --- a/src/slic3r/GUI/FirmwareDialog.cpp +++ b/src/slic3r/GUI/FirmwareDialog.cpp @@ -790,7 +790,7 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) : SetFont(font); wxFont status_font = font;//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); status_font.MakeBold(); - wxFont mono_font(wxFontInfo().Family(wxFONTFAMILY_TELETYPE)); + wxFont mono_font = GUI::wxGetApp().code_font(); mono_font.MakeSmaller(); // Create GUI components and layout From 1fb400a091747c142befe32ca4d8430f2d06b7f0 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 2 Oct 2020 08:32:44 +0200 Subject: [PATCH 013/334] use wxYield on mac to show the splashscreen --- src/slic3r/GUI/GUI_App.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 23f79c65fc..409ca0a150 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -696,6 +696,7 @@ bool GUI_App::on_init_inner() // create splash screen with updated bmp scrn = new SplashScreen(bmp.IsOk() ? bmp : create_scaled_bitmap("prusa_slicer_logo", nullptr, 400), wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 4000, splashscreen_pos, is_decorated); + wxYield(); scrn->SetText(_L("Loading configuration...")); } From 3ec462e8f5f2d3c7c637997da0d82f8df77e0f93 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 2 Oct 2020 09:02:16 +0200 Subject: [PATCH 014/334] Fixed a crash when preset with "modified"suffix is selected --- src/slic3r/GUI/Tab.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index e3ee9481c8..3517381cf7 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -176,7 +176,8 @@ void Tab::create_preset_tab() m_preset_bundle->physical_printers.unselect_printer(); // select preset - select_preset(m_presets_choice->GetString(selection).ToUTF8().data()); + std::string preset_name = m_presets_choice->GetString(selection).ToUTF8().data(); + select_preset(Preset::remove_suffix_modified(preset_name)); } }); From 1130778d5e29d9bdb071b050b7e0b8db995e7c59 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 09:14:43 +0200 Subject: [PATCH 015/334] Small fix in debug tech ENABLE_GCODE_VIEWER_DATA_CHECKING --- src/libslic3r/GCode/GCodeProcessor.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index b31591ca86..a0cf5d6e5c 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -305,10 +305,12 @@ namespace Slic3r { {} void update(float value, ExtrusionRole role) { - ++count; - if (last_tag_value != 0.0f) { - if (std::abs(value - last_tag_value) / last_tag_value > threshold) - errors.push_back({ value, last_tag_value, role }); + if (role != erCustom) { + ++count; + if (last_tag_value != 0.0f) { + if (std::abs(value - last_tag_value) / last_tag_value > threshold) + errors.push_back({ value, last_tag_value, role }); + } } } From dd94b34a8d092305f184cf2e5029fd19e91c8296 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 2 Oct 2020 09:30:35 +0200 Subject: [PATCH 016/334] Fixed missing include on Linux, printf format string fix boost/format.hpp was missing in the header --- src/slic3r/GUI/GUI_Utils.cpp | 21 +++++++++++++++++++++ src/slic3r/GUI/GUI_Utils.hpp | 20 ++------------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index 97e66812a6..e2a6ccb885 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -267,5 +267,26 @@ std::ostream& operator<<(std::ostream &os, const WindowMetrics& metrics) } +TaskTimer::TaskTimer(std::string task_name): + task_name(task_name.empty() ? "task" : task_name) +{ + start_timer = std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()); +} + +TaskTimer::~TaskTimer() +{ + std::chrono::milliseconds stop_timer = std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()); + auto process_duration = std::chrono::milliseconds(stop_timer - start_timer).count(); + std::string out = (boost::format("\n!!! %1% duration = %2% ms \n\n") % task_name % process_duration).str(); + printf("%s", out.c_str()); +#ifdef __WXMSW__ + std::wstring stemp = std::wstring(out.begin(), out.end()); + OutputDebugString(stemp.c_str()); +#endif +} + + } } diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index 249ae74f69..edc9fba1fe 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -399,25 +399,9 @@ class TaskTimer std::chrono::milliseconds start_timer; std::string task_name; public: - TaskTimer(std::string task_name): - task_name(task_name.empty() ? "task" : task_name) - { - start_timer = std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()); - } + TaskTimer(std::string task_name); - ~TaskTimer() - { - std::chrono::milliseconds stop_timer = std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()); - auto process_duration = std::chrono::milliseconds(stop_timer - start_timer).count(); - std::string out = (boost::format("\n!!! %1% duration = %2% ms \n\n") % task_name % process_duration).str(); - printf(out.c_str()); -#ifdef __WXMSW__ - std::wstring stemp = std::wstring(out.begin(), out.end()); - OutputDebugString(stemp.c_str()); -#endif - } + ~TaskTimer(); }; }} From 3fe61cfec2fa3fa89cf47bdc4a21aeef9c95937b Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 10:26:27 +0200 Subject: [PATCH 017/334] Progress dialog while generating toolpaths to render enabled only for standalone gcode viewer --- src/slic3r/GUI/GCodeViewer.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index a6914f7681..aae0f4f071 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -865,8 +865,9 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) unsigned int progress_count = 0; static const unsigned int progress_threshold = 1000; - wxProgressDialog progress_dialog(_L("Generating toolpaths"), "...", - 100, wxGetApp().plater(), wxPD_AUTO_HIDE | wxPD_APP_MODAL); + wxProgressDialog* progress_dialog = wxGetApp().is_gcode_viewer() ? + new wxProgressDialog(_L("Generating toolpaths"), "...", + 100, wxGetApp().plater(), wxPD_AUTO_HIDE | wxPD_APP_MODAL) : nullptr; for (size_t i = 0; i < m_moves_count; ++i) { const GCodeProcessor::MoveVertex& move = gcode_result.moves[i]; @@ -1248,10 +1249,10 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) continue; ++progress_count; - if (progress_count % progress_threshold == 0) { - progress_dialog.Update(int(100.0f * float(i) / (2.0f * float(m_moves_count))), + if (progress_dialog != nullptr && progress_count % progress_threshold == 0) { + progress_dialog->Update(int(100.0f * float(i) / (2.0f * float(m_moves_count))), _L("Generating vertex buffer") + ": " + wxNumberFormatter::ToString(100.0 * double(i) / double(m_moves_count), 0, wxNumberFormatter::Style_None) + "%"); - progress_dialog.Fit(); + progress_dialog->Fit(); progress_count = 0; } @@ -1322,10 +1323,10 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) continue; ++progress_count; - if (progress_count % progress_threshold == 0) { - progress_dialog.Update(int(100.0f * float(m_moves_count + i) / (2.0f * float(m_moves_count))), + if (progress_dialog != nullptr && progress_count % progress_threshold == 0) { + progress_dialog->Update(int(100.0f * float(m_moves_count + i) / (2.0f * float(m_moves_count))), _L("Generating index buffers") + ": " + wxNumberFormatter::ToString(100.0 * double(i) / double(m_moves_count), 0, wxNumberFormatter::Style_None) + "%"); - progress_dialog.Fit(); + progress_dialog->Fit(); progress_count = 0; } @@ -1473,6 +1474,9 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) #if ENABLE_GCODE_VIEWER_STATISTICS m_statistics.load_time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start_time).count(); #endif // ENABLE_GCODE_VIEWER_STATISTICS + + if (progress_dialog != nullptr) + progress_dialog->Destroy(); } void GCodeViewer::load_shells(const Print& print, bool initialized) From ec6599da98a5a478a2ca6c0f0ca5e042b0712875 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Thu, 1 Oct 2020 19:39:51 +0200 Subject: [PATCH 018/334] notifications: sla supports outside error appearing/disappearing --- src/slic3r/GUI/GLCanvas3D.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index c138b937c9..60192f0a24 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2662,6 +2662,8 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re _set_warning_texture(WarningTexture::ObjectClashed, state == ModelInstancePVS_Partly_Outside); _set_warning_texture(WarningTexture::ObjectOutside, state == ModelInstancePVS_Fully_Outside); + if(printer_technology != ptSLA || state == ModelInstancePVS_Inside) + _set_warning_texture(WarningTexture::SlaSupportsOutside, false); post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, contained_min_one && !m_model->objects.empty() && state != ModelInstancePVS_Partly_Outside)); @@ -2670,6 +2672,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re { _set_warning_texture(WarningTexture::ObjectOutside, false); _set_warning_texture(WarningTexture::ObjectClashed, false); + _set_warning_texture(WarningTexture::SlaSupportsOutside, false); post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false)); } From 092a9f80b6828bc214ae65428ae0984acb043379 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Fri, 2 Oct 2020 10:26:11 +0200 Subject: [PATCH 019/334] notifications: avoid collision with gizmos on same position by moving to left --- src/slic3r/GUI/GLCanvas3D.cpp | 17 ++++++++++++++++- src/slic3r/GUI/GLCanvas3D.hpp | 20 ++++++++++++++++++-- src/slic3r/GUI/NotificationManager.cpp | 12 +++++++----- src/slic3r/GUI/NotificationManager.hpp | 10 ++++++++-- src/slic3r/GUI/Plater.cpp | 1 + 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 60192f0a24..b88b642f89 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -215,6 +215,8 @@ void GLCanvas3D::LayersEditing::set_enabled(bool enabled) m_enabled = is_allowed() && enabled; } +float GLCanvas3D::LayersEditing::s_overelay_window_width; + void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const { if (!m_enabled) @@ -297,6 +299,7 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const if (imgui.button(_L("Reset"))) wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), SimpleEvent(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE)); + GLCanvas3D::LayersEditing::s_overelay_window_width = ImGui::GetWindowSize().x /*+ (float)m_layers_texture.width/4*/; imgui.end(); const Rect& bar_rect = get_bar_rect_viewport(canvas); @@ -1426,6 +1429,16 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas } #if ENABLE_SLOPE_RENDERING + +float GLCanvas3D::Slope::s_window_width; + +void GLCanvas3D::Slope::show_dialog(bool show) { + if (show && is_used()) + return; use(show); + m_dialog_shown = show; + wxGetApp().plater()->get_notification_manager()->set_move_from_slope(show); +} + void GLCanvas3D::Slope::render() const { if (m_dialog_shown) { @@ -1482,6 +1495,8 @@ void GLCanvas3D::Slope::render() const if (ImGui::GetWindowContentRegionWidth() + 2.0f * ImGui::GetStyle().WindowPadding.x != ImGui::CalcWindowExpectedSize(ImGui::GetCurrentWindow()).x) m_canvas.request_extra_frame(); + s_window_width = ImGui::GetWindowSize().x; + imgui.end(); if (modified) @@ -2151,7 +2166,7 @@ void GLCanvas3D::render() wxGetApp().plater()->get_mouse3d_controller().render_settings_dialog(*this); - wxGetApp().plater()->get_notification_manager()->render_notifications(*this); + wxGetApp().plater()->get_notification_manager()->render_notifications(*this, get_overelay_window_width(), get_slope_window_width()); wxGetApp().imgui()->render(); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 03d42089b8..127f822c80 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -186,6 +186,8 @@ private: mutable float m_adaptive_quality; mutable HeightProfileSmoothingParams m_smooth_params; + + static float s_overelay_window_width; class LayersTexture { @@ -241,6 +243,7 @@ private: static bool bar_rect_contains(const GLCanvas3D& canvas, float x, float y); static Rect get_bar_rect_screen(const GLCanvas3D& canvas); static Rect get_bar_rect_viewport(const GLCanvas3D& canvas); + static float get_overelay_window_width() { return LayersEditing::s_overelay_window_width; } float object_max_z() const { return m_object_max_z; } @@ -254,6 +257,7 @@ private: void update_slicing_parameters(); static float thickness_bar_width(const GLCanvas3D &canvas); + }; struct Mouse @@ -425,7 +429,7 @@ private: bool m_dialog_shown{ false }; GLCanvas3D& m_canvas; GLVolumeCollection& m_volumes; - + static float s_window_width; public: Slope(GLCanvas3D& canvas, GLVolumeCollection& volumes) : m_canvas(canvas), m_volumes(volumes) {} @@ -433,12 +437,13 @@ private: bool is_enabled() const { return m_enabled; } void use(bool use) { m_volumes.set_slope_active(m_enabled ? use : false); } bool is_used() const { return m_volumes.is_slope_active(); } - void show_dialog(bool show) { if (show && is_used()) return; use(show); m_dialog_shown = show; } + void show_dialog(bool show); bool is_dialog_shown() const { return m_dialog_shown; } void render() const; void set_range(const std::array& range) const { m_volumes.set_slope_z_range({ -::cos(Geometry::deg2rad(90.0f - range[0])), -::cos(Geometry::deg2rad(90.0f - range[1])) }); } + static float get_window_width() { return s_window_width; }; }; #endif // ENABLE_SLOPE_RENDERING @@ -772,6 +777,8 @@ public: void set_slope_range(const std::array& range) { m_slope.set_range(range); } #endif // ENABLE_SLOPE_RENDERING + + private: bool _is_shown_on_screen() const; @@ -892,6 +899,15 @@ private: bool _activate_search_toolbar_item(); bool _deactivate_collapse_toolbar_items(); + float get_overelay_window_width() { return LayersEditing::get_overelay_window_width(); } + float get_slope_window_width() { +#if ENABLE_SLOPE_RENDERING + return Slope::get_window_width(); +#else + return 0.0f; +#endif + } + static std::vector _parse_colors(const std::vector& colors); public: diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index b9e7c7a6fc..228e6c3e9c 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -54,7 +54,7 @@ NotificationManager::PopNotification::PopNotification(const NotificationData &n, NotificationManager::PopNotification::~PopNotification() { } -NotificationManager::PopNotification::RenderResult NotificationManager::PopNotification::render(GLCanvas3D& canvas, const float& initial_y) +NotificationManager::PopNotification::RenderResult NotificationManager::PopNotification::render(GLCanvas3D& canvas, const float& initial_y, bool move_from_overlay, float overlay_width, bool move_from_slope, float slope_width) { if (!m_initialized) { init(); @@ -76,6 +76,7 @@ NotificationManager::PopNotification::RenderResult NotificationManager::PopNotif bool shown = true; std::string name; ImVec2 mouse_pos = ImGui::GetMousePos(); + float right_gap = SPACE_RIGHT_PANEL + (move_from_overlay ? overlay_width + m_line_height * 5 : (move_from_slope ? slope_width /*+ m_line_height * 0.3f*/ : 0)); if (m_line_height != ImGui::CalcTextSize("A").y) init(); @@ -85,10 +86,11 @@ NotificationManager::PopNotification::RenderResult NotificationManager::PopNotif //top y of window m_top_y = initial_y + m_window_height; //top right position - ImVec2 win_pos(1.0f * (float)cnv_size.get_width() - SPACE_RIGHT_PANEL, 1.0f * (float)cnv_size.get_height() - m_top_y); + + ImVec2 win_pos(1.0f * (float)cnv_size.get_width() - right_gap, 1.0f * (float)cnv_size.get_height() - m_top_y); imgui.set_next_window_pos(win_pos.x, win_pos.y, ImGuiCond_Always, 1.0f, 0.0f); imgui.set_next_window_size(m_window_width, m_window_height, ImGuiCond_Always); - + //find if hovered if (mouse_pos.x < win_pos.x && mouse_pos.x > win_pos.x - m_window_width && mouse_pos.y > win_pos.y&& mouse_pos.y < win_pos.y + m_window_height) { @@ -820,7 +822,7 @@ bool NotificationManager::push_notification_data(NotificationManager::PopNotific return false; } } -void NotificationManager::render_notifications(GLCanvas3D& canvas) +void NotificationManager::render_notifications(GLCanvas3D& canvas, float overlay_width, float slope_width) { float last_x = 0.0f; float current_height = 0.0f; @@ -835,7 +837,7 @@ void NotificationManager::render_notifications(GLCanvas3D& canvas) it = m_pop_notifications.erase(it); } else { (*it)->set_paused(m_hovered); - PopNotification::RenderResult res = (*it)->render(canvas, last_x); + PopNotification::RenderResult res = (*it)->render(canvas, last_x, m_move_from_overlay, overlay_width, m_move_from_slope, slope_width); if (res != PopNotification::RenderResult::Finished) { last_x = (*it)->get_top() + GAP_WIDTH; current_height = std::max(current_height, (*it)->get_current_top()); diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index c2cbc242c8..24be35b91a 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -76,7 +76,7 @@ public: }; PopNotification(const NotificationData &n, const int id, wxEvtHandler* evt_handler); virtual ~PopNotification(); - RenderResult render(GLCanvas3D& canvas, const float& initial_y); + RenderResult render(GLCanvas3D& canvas, const float& initial_y, bool move_from_overlay, float overlay_width, bool move_from_slope, float slope_width); // close will dissapear notification on next render void close() { m_close_pending = true; } // data from newer notification of same type @@ -229,11 +229,15 @@ public: void set_slicing_complete_print_time(std::string info); void set_slicing_complete_large(bool large); // renders notifications in queue and deletes expired ones - void render_notifications(GLCanvas3D& canvas); + void render_notifications(GLCanvas3D& canvas, float overlay_width, float slope_width); // finds and closes all notifications of given type void close_notification_of_type(const NotificationType type); void dpi_changed(); void set_in_preview(bool preview); + // Move to left to avoid colision with variable layer height gizmo + void set_move_from_overlay(bool move) { m_move_from_overlay = move; } + // or slope visualization gizmo + void set_move_from_slope (bool move) { m_move_from_slope = move; } private: //pushes notification into the queue of notifications that are rendered //can be used to create custom notification @@ -252,6 +256,8 @@ private: //timestamps used for slining finished - notification could be gone so it needs to be stored here std::unordered_set m_used_timestamps; bool m_in_preview { false }; + bool m_move_from_overlay { false }; + bool m_move_from_slope{ false }; //prepared (basic) notifications const std::vector basic_notifications = { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 6607bd5752..8111cbcae1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3625,6 +3625,7 @@ void Plater::priv::on_action_split_volumes(SimpleEvent&) void Plater::priv::on_action_layersediting(SimpleEvent&) { view3D->enable_layers_editing(!view3D->is_layers_editing_enabled()); + notification_manager->set_move_from_overlay(view3D->is_layers_editing_enabled()); } void Plater::priv::on_object_select(SimpleEvent& evt) From 11d8a2ad8e8635a568d1ba4f6ea5e83151eb4d2f Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 11:40:21 +0200 Subject: [PATCH 020/334] Start PrusaSlicer in gcode viewer mode when dragging and dropping a .gcode file on the application icon --- src/PrusaSlicer.cpp | 11 +++++++++++ src/libslic3r/Technologies.hpp | 1 + src/slic3r/GUI/MainFrame.cpp | 19 +++++++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index d79196cfa1..8f96de3edb 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -154,6 +154,17 @@ int CLI::run(int argc, char **argv) // Read input file(s) if any. #if ENABLE_GCODE_VIEWER +#if ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES + for (const std::string& file : m_input_files) { + std::string ext = boost::filesystem::path(file).extension().string(); + if (boost::filesystem::path(file).extension().string() == ".gcode") { + if (boost::filesystem::exists(file)) { + start_as_gcodeviewer = true; + break; + } + } + } +#endif // ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES if (!start_as_gcodeviewer) { #endif // ENABLE_GCODE_VIEWER for (const std::string& file : m_input_files) { diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index a0484b259c..786557cf1e 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -59,5 +59,6 @@ #define ENABLE_GCODE_VIEWER_STATISTICS (0 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_VIEWER_DATA_CHECKING (0 && ENABLE_GCODE_VIEWER) #define ENABLE_GCODE_VIEWER_TASKBAR_ICON (0 && ENABLE_GCODE_VIEWER) +#define ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES (1 && ENABLE_GCODE_VIEWER) #endif // _prusaslicer_technologies_h_ diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index ca9ddf512e..4ecd36c7f2 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -89,10 +89,26 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S // Load the icon either from the exe, or from the ico file. #if _WIN32 { - +#if ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES + switch (wxGetApp().get_app_mode()) + { + default: + case GUI_App::EAppMode::Editor: + { + SetIcon(wxIcon(Slic3r::var("PrusaSlicer.ico"), wxBITMAP_TYPE_ICO)); + break; + } + case GUI_App::EAppMode::GCodeViewer: + { + SetIcon(wxIcon(Slic3r::var("PrusaSlicer-gcodeviewer.ico"), wxBITMAP_TYPE_ICO)); + break; + } + } +#else TCHAR szExeFileName[MAX_PATH]; GetModuleFileName(nullptr, szExeFileName, MAX_PATH); SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO)); +#endif // ENABLE_GCODE_DRAG_AND_DROP_GCODE_FILES } #else #if ENABLE_GCODE_VIEWER @@ -1965,7 +1981,6 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) // Load the icon either from the exe, or from the ico file. #if _WIN32 { - TCHAR szExeFileName[MAX_PATH]; GetModuleFileName(nullptr, szExeFileName, MAX_PATH); SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO)); From 97e3100c730c68e74bd727f406da0d86cfa6afe7 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 11:42:27 +0200 Subject: [PATCH 021/334] Removed obsolete images for splash screen --- resources/icons/splashscreen-gcodeviewer.jpg | Bin 135897 -> 0 bytes resources/icons/splashscreen_.jpg | Bin 104443 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/icons/splashscreen-gcodeviewer.jpg delete mode 100644 resources/icons/splashscreen_.jpg diff --git a/resources/icons/splashscreen-gcodeviewer.jpg b/resources/icons/splashscreen-gcodeviewer.jpg deleted file mode 100644 index f170f390c2b822410ef2853041ce58563410ed25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135897 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 diff --git a/resources/icons/splashscreen_.jpg b/resources/icons/splashscreen_.jpg deleted file mode 100644 index 2b83ed3516ddc2ba943775da9221890564f23ed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104443 zcmeFZ2UJwc(lELaBuEmKBxwW$m7FspB1r|59K~T6U?qP?nuCA`C?yBzH)$F~Fy#e6pB~=YofQX0) zPzQg&-r!Mk6*r_c0BC9g=Kug82lI{r#NZPV_#+%A0a7C39}rRyd=fakp9=uCL@d9a zoruo-z&Qi}hll`@A2@D@4*h(l^&^l2j~n1gpuK)7iClmT*5QZmxRz4> z5h4l-3Mxt}CTeOX(NnCaME~t$?>#_A4zd+TOmqr3L`OtSN3>S~aDdz%1~o=d+K+?i z5HZPNQZjOiBa|RQ?om);V&X$2#D@=)fPxcwf%yOl-Qi=WM3hL6UxSfxI-d}|9sH7< z>q6!SdYy0c++voPI}}G47@3$)p61~_bM~CLgrtS333qu#0O&ilI%}%(SdRu zA|W9rAtT5|bjTGviRnlVpAsQGrgV)A=6sw}^fvj43&AflKTvRq>CDqxV!j<=;1(Y| zy+9CcU$Va^*q#3)$$km;n_OK06)_Rmc*Jx76c{c!JLuWZXpel|DXMl)w2m*9>(Nn) zY8}jZz*WIleZq2H$S+qwZHr5F;i;iV3Zv1mJ)=<~f+SjSc;k4&@B$@hwvxu^osQa6KGkNIbE0e4bnG== z@v}3Z*aLDB^uifJG@O?%eO1ZLuaTo-ePk28ylu}c#ng*(Jj|@Yvn(W$Bdg!T?m7B2 z{F##U(g`bojO6$_>&OU|brE`9EytKUr`+^mhGRNU$7s))hFTiom+D-0yFL#`D%(=D z*vGndR=-Ytx)!gmQ8#3gpF|TrCve`N2QqaY?zJ}vN zG)eZUZc7HGS&pkS=Ux>+{5t&a-zK?3p`$cQo^D-CbM)1%Bg##;gdH=&`S6c}l(hT@ z)Em??(_KlUY~rFR6! zU;UTgGzYZCijOpB2Ayt6N^NkTt!UZPdBf<`zL9*Qpt(C&z7glhW%S)Vq=dFu znluOeoEnBF5xFR4UzEx^BITLn-p6WzV@EtZ^$~({!O&qHq zR0TM3l}OD4NGRHQHl5fRmx>p43$G_74TU#a^tQ1#nAgjEW9xsAmac!##4Dx{LRHPd zwU8PtwlU*6CQ1*>3=^eb9gdB8`_vur#UxH#h9mjgL>Zg;)u`gSkUlKKsiRh#tg&Pk z+MkR0w1G)iYUaX%(m3*he$Hs(#x<|$&lT2T$QGy9VL>+3q2FRo>%_ZyOrjSh`Ui7Z zXjd(QONK4Y!~<69k~jAN+V%F>X-wWjZ-)``4|Js_Vee~Bm2hhZ{AwFburVLEzggyUmT3{P*j43~bj zC3B8ZaEbhClf!O{pYsy@m?Mun*R0&RnPx z*DB!&oqp5nZnCglW;$zk&4lUx3E&P^!Cq z=d0P3uyd)Zs@6Uigll?!yXK265y!QHxR+gCeA$$YGssGhSk-fvI~%Snd}%WL%1$&9 zQuI1_;JLQ`{RqV<8-YC_+kheC6hq{R;Hvbh)?0?m99~-|G2dQa!E5@MhTA4w1$ibg z&iX!2JBQ!f~g@a(WlQ0LEK+Y2)^zuk*C#>{;xrknds<;_Z;wTD7t6UoT? z0gGxH*mIw3iR3N>MJZ&qm02z1Zbw!>OwTZ1eB@G*ST;oiRJpB4&uV(CpL9(->!RUf z;k?wbvDkENb`KC*$I|rmo~ACd3L;xCZXV3h;KeP40#=e9?eAXYv@G;IZ?kKF&nMkC zr@5Joif?TG4Be7YmdKBC9^7(noJDYiDqQ)<(cX9ZM8J_V0O&sCzLIe!jgcn0_Ti9>vyfLr-pOF65og?O8+S@^fluiIwr%wV$-OUyjpbDZEJ4`|(M| z@N_=M!;Cn=(IsAi==S^wJ{@$5O}#bE%CYYch=!um?ncf^2S!fm3f;%y8|fPH)vb`^ zn-by?il>{?Mn9Ok^XLt~dg@X=9@h|~38k&kYoC(!S3Z#D46!&Zwar}5uIf`EU(Z_n z#>uJ`&yyx>)eiHSdq8-;&suHL-N7fqf@okFXhOyJ(g=!l#*p35WfH*4={L=Ci>UD) zeu}_GuWXJ>e9wDOk69z3pE6Y_3mdc?YIXF|PWq%NFY0X|?^oG(u1Q|Sdv&dS4T{JM zyLU~6oiR|oy!7}|pk^S&KBLQdKogO2OZKB1M_7c0UMIgnlg38#E0uX()Ld4Ul;X@G;FIXt6juC z=JPL!w3m3L9m@o|8BaNSzxWwb^8k-?=BDLcX|HYPI~>?w80Nb18OB|^uh{Ce__;Bg z$_>E1&tPG*QACtgmqt`wi?0*NR|{A#zgYNHUen9Qnex>}>U=hBIkSuot+(uO0aq?8 z&@ICFy3}5>-u6cZ+>^9jS4Cj#vtG^@Wz4POaIVHX*F;SV zmcLO5msD;c+|ur;m%nq&8<&$w%dYu$Z}@v&!D6iSczuUg%q>mXqoyp?&trS`fR&W2 z`L~*|Hy9$yj(Mz7}#!>%ixigYUncSJ(3cWa7UDO zKKgjgh+(5EgNIkd1N`N)Cf7)4<*x?Uehy)ThT%sg%%UFU$(QuqyD@wwc=BtfUiY&219XoIMv&=Ztm1@qFM57?% zapx6M!UHL%RzgZ=<0kM!Vu$@d)h>3`b0|IEm8li+MEX=I zwM}lZHnACh-r!ZzQ%P4lxC2Qs+HA6Glg5>b-tg?M>JALu_lM=9IaW5swG>Nn?jCy077V&f~tD<2;`IvCX#qKI5A6i)Lwsa-5lA0_g z=@aeeuagVh4?aDq7P!4G42|)~3Yz1L-Hg3*dMmjsQmAp;Uz@)u?bR11OFmgYmuiPmf$^LC|t zx7JksRWIlTSLxs8c=n>Ev*w7R{~4krXPJ@KV*6l+WQhC4H`TUX!i8j1G#GOE<(cSa ztuLC4FLNnQC#XXC%^|k!^@pPwx+v*BFVfcCa&El9m%2c;$#0U9JNC#X#OU_1hrPt~ z9|vx^0Yr_HW=6@HZTFChhBo8f+daCV%|fnp?9N-V?JTpAz$EUKO&5A58^i8P66Reh!(3`p z3o%SNQBx`^uCWJ0r4GCAEt#9T+D*5ZT-jUh5k0cnTsTjzAky9y{hkzpA#?7#1q{Hs zZg(pnzhAzu9txl;?i#g4^TN2xY^OxGrJrh*SANs4 zN~z|I<$hz4-c%9v)&CJ2^T&il#n;d8d*~*T>rQ^%>jd^@*h8+`qH$=fE!qhpCMXO@ zU(nDbIlceJd-Ugv@6Y>wo-82+t_=VHA^+gzn9>P@MB%jYI43*~1QM1CfU8)Xt|c1n zu#cgE!XXeSydxol@JzTXJ75TD+WoS+NH+q;1tgA8hLC+g6M@l!IU@8_jPyXzQ9uH4 z0w4eq&;bMhCEy}p0H%~ds01Jeo`mCo+*J%3ZLN#I;hnTC?cgAo3b+bj05tfs28-wd z2mlA*L1KjCh|@1@FtyL`1qU4J2ftL7c%%akiP|R#=2PrrD{C5GKG2mMfy5yJ@ba5J zj{Qy_+D0i$Cqr8V z*tlT-MWSqes*i?{p#$=C0gc0<9Uagpn;%7}e&!HZ_#K@3CtL?t9^Z>#2tD!0K7@Q9^25dtod>G{&mV2VPI%g1@jPgwlY}I(CU`l}6(I>6G6G=) z>8SuLs2>La2HtJK6ApSN1o%UNc|XjPfdA|G9gI+(Kibc*CZ!GA!eutj4$lpK&YKQ%>rAiVldFeo`0xTXxl z?>lJ<7X$|P7w85*!GA=jw6sx1JD@SYQ!d>B{R?WpGQc8$78*s+H3bgs1WpC8h~Im` zBMzXu{0AtN<-U9U2RJ3z#I}D%-?zdugo;250=qMGe*gKv;^_9D!L|B*tP}ewLWe%S zpC;e~^n&1ppz#;rc>{bL0Dv6uk^UIyBZ$C=#0)^CWQDdwSSV`(hxTRxn*9`Dbqhoy z0z(b=04j2Fatd-PFyKH(d4!UVo|cM=mY(VOar)!OndqqYj~};##GkK3)RdIeG}K3F zXpWwsp`kfJxX_$9C_?vl2>gsyydWmx{28n01ugf;UIh^p3mz1^aQxxe}RjeUgv|Q zm^kLnH)XQZA-eN}3vjFi!>g>jJQqXttW-Y6<0KiI^oJ0O+4nv*KBoeU)?^w21XrzgdM;T3m6oV*k|FC$T1R- z182_Thrv+F2?7Tnz(|T1x8)$_PKdHDJsc~(aGI3B02zMew)qyR-QbZ zb9G_)!Hv?0yz;)h*CUc+V!L8HC(BpFURvS4Z}L?l?tE^XF4Tsngp1QnIJ&WiK_{Hc zqgS9t#k+^(pI?+#B6%LmR0XYDHg>)duEk0I2zLDJB~v%r`Pf5KsOqvWH+@fLyqry+ z>OIz;Gvn!%)xV_2P~P_a`}LPAac{<81yHtCiAR}5evv5|>~&0PP4Lv@EskBf*p(*< zmO2{TAx}dzLUiL=YH3)aXxw6O!`<7AFMI;Nx9wJ@zrv?iYkyHU^V69u)qP_zCB>wl z!{9rI3>GWWPY()O@k`9fd;4s)IGp7qB#`we^9_lilj~WJm?_dJ4EoP{G-hnT`VAM2 znrm-BsRuFTdf3cTi%ct-G_0A0)-Ee6>6njs25JwONikO{bxnqK2A~x51GsvpiAk7; z?W&-!e@*x#x$#n3Y~ zpIH}_G+Ej$hqCXfD%b<`{e9h>zZ~^WpXI-?xL#zmLcD|4ZI+w%QDdcy*?F)Byv4AT zp*vZiIE*vJyP5tyPg6Y_5(00hU zPnCk(#?u@4FUkUIuo2?;NPJC|#`;=jarNzs<@S1rfA$(5E{ZLR!thoyg1Mx1&d>7IWHGEEPI?Kk_B2c z(|t`j>sClr!SkM>A)DaY_9b1a8gArjGxrU0G7C0ozi)55dQ2{x&e+J)bieRHl&d61 zH?=bqD4nDm|CnciUFNs#X*TnG;5)l%@f_}>F|$)~|M}_qt~N%k`Q8ewpxm=@>TOT{ z?F#8e*lJQYTVv-QfN6!BE#)!xR7A(F9-iGtX_$ zI*BT1cP*CXT|4IBPPUp{++Tw8kd0PIG8n>eyP#nyjyxU?1@~uMbEnSYF%d8wJo)kY4gzP{=&o|bXQL;{Pxp|+$X_B zI~Xmc<)g3% zpmg^D@;Fu}o&sQz723ODl=NlHH(opuj^z@HRV-*JDEGX-#Oh#Ha=9`O*z7lb9C&&p zH}|e%AhpY!cWXpz(YqS-)rz#@$?`X>pVNoC4!25_MMV|&o97m9QD&1qZoOf$2hMy0 zkPPI$j1u)UTuWskLl{{DgnQu$#aH|t; z@}WCM&mRea(I{y07pl`AUf2x*>tQYp4_nT`JUfWb^Tr)6T)|FFr#0Gd`f1nHR#Jz1 zSQ$vw!5Tb!4aP)@duK9nG1^H8sW--}kI2f29tphcxRTjgAhQR=mrbAQ&RBNc%-sVj z+oGcUWg3`*CmH29_kiM0OMEAssn}m>P~8c-8@Rp4r>5c z+-2x`p%Sk&1qVXJpRg<^Tq03dB#v8seUcgFR{?P=qPxzu2V5|d=DUjic;1_p+IPTO z&i@fR_buo-<)pDt_Pc&nWE>I}Xs@JMEhX*{3hpU9&()RPWuHpu+T@PKY~42K0jF{@ zKGmib$6dZ_&BObAr*o%;yG!b`w+5R`^U#B`*W336B)-y(xs}fus$)WwpZL=)n?;r* z)mQUjhX8iU#4quJ>0#F$b2`2_BryzkjRUObxj&JWquRDu$F^Fb$s9v#Z}8g|U7rM= zNq?A4&oXlKtn-Q9VX@FPwkY1=U1dxTN>PyGOSrMzkV@({Sx*iB;HBwo?*$oe*N>an z1H?RAIu@Ni`4*?YDIlj7!7uk=9&D-P4DvN6{uK8!?CS-zJ{{ECtcrD zr6bcJq4{xe2ae~gJ~Wn2>mhb!=v;nIv$|_tncH%%x-N-Q^z)~ko0oPfFs4aOyIq00W!9@tD+ zCu=#j@{Fnq6_2NiT#{$oF*6$715~N6KWy90xH>NF^`=~GnMG6*dc(fdD=G!#pDmhy?`f^i3yjlRExe@|C9-%Cz1b| zf&50S%$HlIkDq+-bp7$%(j_h0Hh>vHW39|OHcNej0VP+i5Qx7X*ydB622EdEUTATS z95)SmVyjsCbmmmw+}9|hnX;MUsNywxbVuRFMsAdFme)yUn@K)<6UueC!j+&)ahiL; zq|{reNs*LM-DYiEaL~nfg|{;VsYxV@I%nE9&Yo{z{en3Jn|SIr>?84MH)OJobwhnf zF(AKOoiO-%zz{k3#l@dD-ugIfTCG#e?W_R|0Cc(y+1NiQuF-6rI z2;Q|0YcmohiwMTpM{kw)K|>ZL`3 zYB}8>-H(1#*}tQ?`FR@_t@zI9Y?j|Q-F}kX*aE@o-gj~xTMDWk{osHr9u?tlTy>s{ zk3`Em9oo0N2lNWuCZ>8}bLt|~M?b2dy41M6rjbnLfS5d`qh1Nb{cAgK-+PWcZkx_i zXbnn$Z?TVRWepbO-d-RH>FvhHZC*mOG3)`t9b`JpqzJV$ofGvGE$7?QYo`(Q&+I>( z%FO*jrgUt$P|nMeijqR^(cF#a@>3}&*PZGN?US{#YG)4(K(2mDZfVnKuO~j{=_52B z!b2LHk-rC=cX(IEWHNo;i9|WYY1nn#>%@#?j;}Izh4QHM~Ti4FDi#2{cfvK#ZPJvTPYA!(^R8XQoHu`2b1;TdYD^P+XbMlu5iqJMTyhH)+TD&Dx1gwqBtbgB{t&J&chKVEHh~22? zj-EhT#q%e#Gj@sXndXmM=T=zQvyC0tx1#cQlY=zxd%ozMkA?V*fjvv;X=C=8`3DaJ znbq=2%#@ZLP!Ua!6>Dl!?u^|UJ0=qWH~0)178gsAwUDH~c4e!9&-`Vk(f3~F8DyM( za2x4%|1Z8p)wd|@S^E>(!aFx+K%bL;u5vR;IpuVF*Wp#kuWd6lFDMo3;Vy=TrTr;$ zYv^6qja)Z2XfSrPa1U_rWwTFIY&YmBa(E}@Wba_#o8!exXPB~4$H$R=Bepn5H>vMdT=X>AM}m1 z6FXM2l60yaz4*JvBnCF`N0H?Q*@M=v;$GfH6K`>Kv$u5@9hIJK;x4Kp3E=v(DYiBjS?*EcK`Swc+ZKBQK3di+o zIrcU=&c-Ve6~r^xX_nIKUVIkYvvnsfIQN^&9cpl{nS5Pjry8`^JUo?|8)8QB>`psF zFgxtZsBraCh}>qv9zfFZVWdFH6-jODzCHH^lPS4wns8KsM=OgZY1J$~IEW#B7k5{j zq(FrYTFeY#79f#jHy0hAin%gfz3BCDx23;F)81f0JDx;UOdN>n(dR;bTxv|8%<^;TYEsg-$h=|QiwvlvF*F+RVZF4M@*f8 z`W1JjxL4Yd3)3ao(Tq_R~XhVR<11Yb5BlH z6K5OmOhxUcjlwOjc~X0q2Knkc-UHq%tQw7FyQVC=H02lR<6%Rh5i(^jPq)k5o540j zMU`(5`OA+uF&PhK`YcBbJRClrp?MOV2?wq6$h0?;Y_~e}r?|P}ilWYr-(ek4T3AiL zpRdbt$=gmSE2c~S?!xZ;TUIr1vDLgPt>{yGEyK^gT078JU}g7!$i&GUA3qz|OXu;C zqfHlraChX0R}<(1*D@2BT8g&^i6;`y!Qz_V*=IDh*B6~i2xA|g*FL)QZ4Z!fRd;5| zS9(bDL6f&)XOi2$Rbv6_VdHhYSJuYsSV(NzYR++54#+)6SIgl=gFre#u@^dMO^4O> zFhhUhl$TQi0&}v5M#(4}shyWhzD&-{+p4fhvy-pCoV&<(tKdTF!%f~fP3zS>vp)GF zeLG>reiEd!5AFSOa^n2Co|8*&Ux&Xzpgt76j<#MqRDIAgU!8u7H3cRa@{G2cCpL z26{i7dg5PTKmbudc>e@R9<0_L#7M{hvV&Uo2AM9|;&4u~LP994AdIjgD+otB3c10Y zghT{|g#dY|n-dIfkHA4J5nyycfpf07oD+hyQs6X{&=l5mQbyP!)jco>T@NiixQ9Jl z#)=cFNPR@!P1eoP$q|8rLEIc2P*_j*h>uu{aeMP>lbnt+9llgOCmai^gN%2o)Ew zMy{WgVR1T$-&FdSmHn|eh`wLgNmdzyfPvv=Jv7?kXH);S3qn*xP!w{;5Q(xvyJF80 zYWq&?7Z8>a5Ej=Hk&+dcl$DU?6Bd;f7Cu1L1bdPd7{~rcWN8pbRz&6x z$Y?91wfnzB{nawE`vDhCv=zvQ7$?LEE^Cd(IKn_JA{}8i2q8Nsgv~x1nwqj2C@cWk03jnTDj;PgE-3&L5wjGKf=P=@AtbED;385# zsU1Y^U=F{hO5n;0q$naPVks>O7Z-qwfU1>2h$94~tt@2(#9&gQQsOWeOcE}BU=9@W zztv8Nj$MJdBQRKkwSmXJ!Cipa{74?89gvXUitM8kHk2rEUd7E)<1|lj5>he!m z1nU2YCG@vwUjbc)BLwM$#XEwVD8SGe1dGH$z-n>)5IDFO1l(5uZcV{JU{**cBo+?t zJAfb@kYFYjVFecWC%pWJR3Qi?9_xsRz3gM)nv3qyhR!9hG1gagDH21hy|u}G{Sg!AvI7mQP4 z!7Vj}W)l?Vb48*g!9M$!&G%QBf3J@JP}%>4pZ}2R|9_fL8SUi0ALE56gX5@(qyWLG zLiTME0(yG{3U8-Qew8Egl`cYu)9S?^iAq4** z2AT>MLfCi!8m<)t+&+Q8KybDQh?95cc~NVUR0$tSube=VXuO2cPXhOVk9%G8Bv- zqJjb~7!A?GV=zd5$VGw~LoS1U9xSg4+NBdj9gndG9RbJ(xPK1;ZqdL((4hDj&|V=* z7@R8_V^66366oHr5OoC1!ToQV@f9@a|3KFVdPHla4IbRYLD(lJC@A<(TKAvh|1@cN zA;RqF*9agl^qW)o^I-A2apdQSqy)AZ7MvCQi{V7^ug5}ZDRCcdmIen}NeS=|CT%4tbHJYi@=t?^;?HqV?1Gqxl#G(t1#wYj5fK$BB}rA43ldT) zDiW$PDi=j1{#5>d5ci+RBoEdE&J5I%1UcP*KWyqEod3iXWPf@l3xgAyMS&Aem@*-( zIDdeVe=)iETf_K|@~&WK{2!-M2eo6-);L!f2BBmFPDK9YRPAR!_%-tXQ3Nc^<$o3c zAuSEJmXNd*khDZt3P_8JO9{vb!z~5Gq$ObDRw7nn)-ai$3iw9>4yJdaKc{#9Cj$IX z4%`-ovO$3FGeZApO8=%vFiUGoOKF%0IH8gj7LXPbmllwbkbx8CSJKvSaS6C2%=%x6 z^lQfY|B6VUI{^LW@4A{33`3YYfgVSJ(;9h5o{;{O~jv z545XFXtw?LHQB#%9Dlcyf-i8g;5*2#x00WJ^Y1zyLivLoh5x~O$U%QP(82Fs%n9D} z00_SFg9%V8KbIT8)X#;1|IPb2L3JN|Msr`s_WmiR7%0Ip9d@VfFs75Bd~bBKtD@b}{&K1@tFNWm|hfV-W+PtSlSIRzyJIr$OrLo`RI zj~t;SY}+QIprNIvq9Hu*e`N+NO(+HaQIV686EOb0V}IxNAy(qMzuUR}->=O4fA}ji z+jXz}!GA3Ob&7#shI#dW=j0onk@iXO-y$u$@U7jefABnBf%d&*Kk~U^*rX);Ne#>1 z9Ne(~up*-|S%G$<$7&QTfNMG9;SfJ=P&a)1yBTBnM>mvpAp6><048`fd+)io6MWgX zWIYTGQ@XyBX20?q&7g@rr+Iz6$)IjB*`!*?>%|*^=Ec;gUS`82?L-&Zuza3ObXuXr z#J38K*+xeC+jq+R*piVi8513EO3%-Aqv$iY)uQ#yt*KP|O_qf^`#-d^pF%9g)1+2& zmX)6hNHbQlyQzw1YFaD#I^%i%r1$ee@9XDLvh9+VJ^hb8+N(H@n7R3=s{~8(NmtX4 zt(w?tie$(=u$48cX6)p6J>RQhNXC4s2w%uGpJe{wR#mQJPPjjVgPs(F`-9E)2Dv2; ztK{9OFYgQUcfM`5OQm&N!u@B)ns-&xJ$0J{u8VG2m+}+uOev~8IOCHoiII}LACKbm z{MhC5eAG+jGLPSwX>BFiP3lv_N4i@j9$-?+ zp)@ZaakP4IImNY{2Ep->Z_==N!E7=PY47;Hlpp0b!he>V-OXt4(v8NRdYqYe>SQ@b== zqCJ@Rn6}PB!2gqU{DjlW#`7^o7gMb97^{Z4K}uo{tRU4Oi%0jmoJq&>EWVE zn7*~e?-c?~#FPP9-3}#&H!ZuZ%RZJTN|PN)yfx+(ys?YE_O?xpFU{zNH@ep^O3|eC2&$=c^K;h^jXhTxxv2QG)3VEMEX=|Bxe8!%r`rSU zrrkzuqoux_&`a^2==*6@ZDXcN^}=d7t@%Nm@wOYOoi91Up*3$1T6WDs^i(O40a-cc zr23K_+c~4o4W$~X6v-A$XJ=;l&`n8D1@hH27x`=&v5hR)T;GIDQb zMzN8BG+}2y<65Kh`IVa4S1fd%*5+!<(WvDb-Ah-TuTHlsZIK(8}Z+>quw5R4~~wypmq0yA!n%N470$L4SR6Q!*LB zV!2t>Xec@*t7mm9Tl*MCZ(2#yL zH@0P%wJrMbgiSp|Ns#wW0(9V|N#phjpViT3MV|G$7n-+a+}R()U$K}g8iqp!yCju( zOk?Upw3*lrqwRLta~Be$Of8h@Ta&(2Qo?PRnAjTE+iMgLx1n#c4KrEi=NqTbBve23 zo~Dc5rJo3o%Pn1vajH{{aa?=&QC+op=6aj{vuiK4^rrD%B|%bbx07}3^orPCr_Fmb zerV6vsY9bVyU$m$hJ1NWZ2Mt4$ZlhIz@a5+0_x@yRCuf4XTNx#Vl?!YIxI2Af64dTtW$P!Q!Sf4&v2FGtSAOTQqN zPLCfX`=HI_{Z&yU=+iFQd{zEXz1S|=fLnm)UE){to-6Q4>)@TwcSJBYC%f-jMY>DUN25h!j*tV2zUd{HMu4s>?TlYZ=_gIz} z+ZVqmUumF+NM#FG@%1hHtc!;X*-Oa!RjcF|RP#9wqD913?8Bgm-i_{IK||;V9<+Bt zU2@YVHf7)SP|tjK*?r435=dVOV!^@GItV?~asxQ@K-vW&#xtC{+2UFum^;c?HXTqSlcy4ei1-@j=u z9Hh1&PBAD|B+^Y3jN$M@MPa(zWnr|sNtatI+~4SEB)!(=54xuf)g>f{;1=TiQIbAwFX zG2gPREaM68EPaY>cr3kRdm*0J|$1^c{QZ-0=>d-+JTY_0c|VbHnwWG}~3 ztXoEm0a1c<*vgysFOc3=Nr5Yy;D+79_LogFI;)Ji5IyBi{_K)b69l#3gI;Afyt#048( z`gU@PS<$Q=KM#r}!2Kj98g+doZa_c;Eih(rX(fng;?#|NIk&#j(&-iX4AMj-$LEc{ zbC(iA zY~j_{Zb@;}v^Ux?ncyZbc?H1*GGtmFG3tKw=CQMn?-*h*2zTjvHvWj+zM44S6=Gx+^mYiRcC#nFX!^#tX{2JcZb8a z&aX?U`8G6Y3RQ-Sn)fAsqyU~C#Uw0GM=tp=cvqCuu6QQ}An4zOo0#A(?Vo5pZyn)>pz_08fnc$udgwX4eBzS{{?WL$S{ z(^Rc9DDj0xtCTxg${B|4Hf44+dNd&=p`DU018O81Yfp&UGLBn_ePKL(^7yB&na>FZ zJMf^i!rs^1h6^w^Np81-h&3fxRZABbeI^3_~q**x6i1(OE zFv9mHcCjc#)+K|lFmrJ%BbjqO*mFT`FfVt&+!866&Oq#%&{N~8alFEHrgr6s(h6xA zqSSE>UDeh=zO1kZT(ut;?NQ~y#86=_rLvdgk0Pg;`KB_gQ@gXZb@Q25Z0Zatyp08- zG?QA*Pvf(-y2T3DJ(D)V{SUhsN>a1ENfo;9^iZJLe@5amj4jv4%!%sQ=jKJVQJGS; zl>ql>^PRGRev|QSHT&Ji=KAv=&}rCRF0-!4M`I1qrPNMYu4;S(XzIElp%bMg>Q-p} zJSg3+M5o&xFnD;?Z(u7R>3$g8EHwCiOoRT)(P5YAjRWn7{a_CB%&_c!=A6pLJ zywx}od~F_WuW?~xQ#nua(+hd*_}JaG0gn|i3Z2yC46dcHoV?DNYq@vfiKu5!Gq&`v ztNZdT83bhrr#p1esF*bA)&<*{wh(g$knBt(pBq<8>X!HnQ+0cT*CbURZs;+*HlV;V zgIvSDPYa@7cXmuIn?at*Nq29mFmaKO9IA~+MO!~#RfT>smA#*_sY;e6k|vzn$b*0D zt8Bz^>5ly|T4j?aDsTLCkASR}N2XDh46mD2TatyM{Ka$nk9*mhm}KUC*J}%OX@gCh zbba@v_s$LRXbb6a?x3`MR?QPug)B%u1CALoFQ}nM+)S@7_?Fwho^;9T>+h4SfjvUR zltMShZ(HcO@$OOt`y@}e>)V-5UAQ~xyqLN20c!Fdv}`99Q%%## z_7LUc*G;>-)zBi$w#v*>Gs_L6_H9r*j=;J3>OsWEPhviH_8b%85NJIU)WgA5pP1F> zct)wWMMaNNl(vMimO%^KP;_dPW5VX^5RK`?<({4H+v`#g;}ZpU6-rf*ilzk#uX?=e zG(T%1({eAhcUO8#cz@X?T~}jV)e0Rponv&HT6J?wU5+wkdvH<}VCIIN`F`kbL5MVQ z4S8>rFyAQRzn#dke2_kMqScS-J3(h7MGJpIj}c%_~mpm5dmAC?RpD zcMg3&Cz7?IYITj4NLQfl(s#*o)FoEAo|5m%=bxp&^vY;Fvd%8udHP%Q&B(l@l7}&; zWe~R$u8kHsn!RH+>>n+#>##e=&Wfu>zJb3 zNw2bI;k6A?61N!(RH}ijaB&utSS|GjE$z}zHRMbwBIU9_CaE4Z%QWFg@R`@r_V*$7 z7OfY^cr4F2sK0=(Z0-q|OcN8+$i$GGD*#1x*PT zKFK1K-<8iQL`Z(T+-!BIoOQW#Md&b_kWo(TW%pTEZ3XgUWwQh0!?GD-F3bsI4R2n;#?IyS8 zGwv;KDJULyc7`+!?KBDLu3^0Iaz_rrck*-4q&HPFn?~ooW*?#zDn!&=o#O*k1KiC6 z;pf<6`9S^2M^kE++uKIxXqg(*+~%r67sOWm z%H~lKL(?(G9OXW~`-FaD_pNthY5H6BxuUET>Tj8P`dsofe2d;3A4kF_+TH7o&pq^f zyQu(W^okhpo~&4(J@v`bDRXdJoc9uXEwG;^CELKD7;Rp*TfX{w=SdpWZtf1dc>X+l zR06X9=uJHVK~!BZbzbtS>oMZs#cDA?b(h$OLAHIA<5LWDi?_On;jt(Bjqx;t$xKl_ z)hD~kysON{9=`NjiCbcCA}TZ=7hj}0VKe&(x6QW@x*E1XbuwaRDZ|bHliJqK4$%nF zlUJ8|+2FCVtG`xua)DHe(KjWm9d$K{bYQdE6x08<{ql^xfVjoe^=}_Ly$|JJ9r*QZ zjNjDbZr0{=7l{w2n8@``m(Sq8bK5amK)3UsEbu@deY@_uKsn@_9lu^SONm@A7$9O} zunLYwsi4$JTwj$xLyk&}9~N(WJ3fwAxD%=w7qxs%#pjjZ$Y8W#7r4H15xves49=Y{ zmfLFN($aO;f}dq9e~(d7EP5Zd+Y(b|n|fm2+lf+Ltyk&poyjw8Lc5FOdfEK= zd(VJI-*Va^?6LKL&m8kl)^98A0jBH=0pu(kXNX?kP!eEpX&%aC`ZYj)- z%UPsbOEHnXri>!7pNxN#LC9P52@AB!#^tN!kg{}YM&B)AE8_b%9;8ago&VK&u4Ccx z1yg%YQW*Uzpuj$#RZgpIx}vj$xx7JWCD=8~phPR$KFEfPd|?X^1UIxMg=ZR%NN7%yoWV;AFk9cFeN!0p2aXGOT>;6lo{^m1Fp>f%Z)dkH%NF{RAi^toP6L( z0qRHZ$2-kk5r4r#EJTpnMAMC#3)rX$NZrOs;X5YR>w%R0T%Bb1^rc9m_Vwo>1y-{~ z3%;qMCgArA=JVU=@h>o0uGWB2MMw)%j+&omL#9)i=7AvQtXL;G<#+e8e{_nSX=;>f zA9SSj@iEF%W&u_mv5e30ywt`oQ5EzMxRINrQ~nl$XpvUWRmI2WYA!at8`s;N!caxV zmj^Lvu=424ryEeemf9|xGNEj}UQ*GeyE^>38dK0}W#tDk|^Rr(u?^q(krJpM# zfb_eL;K9ks@abv{+*|#58_SLQLji2#f6fk{(wbCfX_$i+L&TL zuvaqp8zw1`t+2O7RW1-0SIhW439NODxuVi=%iF0w;o7;ltH=;UR?@0b{!^iN?a`c5 zbgy3r1bWM?{;|iA4qao4hk+pV*sR0HE^>^(gvyGU@XHLtRKxxRa+JWL>_Ft}2N`u; zmY#;bxqEGFPlPpK?>%azk6CIH&Rymg8iW!L0BPyk`hKj7f%PtH7GQq;kgnl}hx6cg zH4iDrn2-M$TzdNK+R$u20w#zPLhQva6hGc&qat>K_zTwO1nNRH5xB>uBNeO(>^xPA z$jXq>MpP@h+F75LWz_T)mnW#0IuD<>*+|Ezj1tV&?!0!tGs?+gtSSHSZ5Oy{z@d(q z!gOZ!?^gnQp+VN=r(NCd?j{xwy^37B{4*aGpoG|6?&G@sc*jcAs^!i*t609Kq;?Ft z?1g6cJn7U_Rl_O~pbqpd1@UHVm^rp}fXf$8(HU0~GJhLr`29(7^2=)mLW}Ik0X2>R z{aE3SXz_>KrM)@A!f3%6-&mOFZ5{q@!}IZcg&NmB-=$ZP8-W3+QVkRh9IRAzHY%Mx zZ9F7nQ!w4=sdFa#+w&}5T}t9kJ`Rgr$5(QON>*JCET*MCcSHvyT3(|-CeZsjF|J!g zzi}nrC2eFiEcKlvSJci8SSYJ`>dmK`%)4m)FMgQBC1+PtU0tvDLspe_^9dtb&UwOn za0{M)3_wVB5YkJHV671QoaF}z{C{M@mV|1CpYDoK{;P5VmKp}g?* zCc9ib)c%EP-5gKQ^z*pS&aoJz<9}CCi~Z#_8^PI!P1BnmwktcEUHO}2^R>U`pq6=d zUs>(41UW`zIZsi-K%d#-y-BUnxsigQvP4jj^jVlJf4-s_eBF{If$H)-p3P> zdXqAh-oFPYNShPRU!D2+G8=DzTiCAVQ7s3j>Ha-@ul-l~S@2C#)fA>EuNNb)ANGDn z&Ks|zujhbE89Rb2*(0AEK_vo z$J8A6NLuET?@05lQYB{mj{1C$)kS0QPJa;%MppY=TO``zFxTDaz+vG6KLw#z>@N zPE9z%*c}q`1X^*e1$qPgyWY`j_{qnJ1 zaOx=bTgmFwlh`14D466)G#FKqEvVX~KFkDtob=8p?F~SNya(j>S9Ya!9%)+)+;u9t z8iT2paaBp&XHwGoTJTgh;3!B>HP<@FFr#X?P~|;^f4AKra~fn_wOd3{AepdDyDw!= zH7U~A0E9H7^N6_{cjxhh}ZJi z-PE^8w-{0!Po2EgRp#Y5p!;<`+x{Pe+G=!3`(LHNjuK1tkN<536>SIyOglkoObeM` zf|Mvma)293jCHJz?V|Vd{jfhW^w0od_@?kcL8`+SYx*NJ{Q~Gv+1XMu-3YPze@~KK z%&iezTStWn7Lv>%U2C!5Fl9MIN;Z$4A+D1Q?LhA~s?!mQLXCZ>=%WKkuYH`}!1LJd z3)80$-I^YBB~-LOCtJ~99Pu^>sveWm$4in|2V&m*6)(NCyYt42sEW*SCLtH;b)G!; zhrF(Q%ZzZ{p$Tsmp>F!tHxp&sz?UZk)^0v4LUkH}_tB&m{OGgE_!${dD2Zn>y(Yh-Z=++Yk{g~4@! zB;J&2+VsjoyR3%0mmDpKqWb^Nu)tqx1($bX2m$z<;|>)yVuUxk)yvHs9UI6k62>D& zSXnssK_F#Iew`jO_RM4%`wz#}{M->bg65cFJ7+3^Bflh3;AE4Mg&rCDcKwVz z$ns4k5KMhCfSNzY8juq9*YtP`s|!|d0mkx?hiU&9?vivIrYd|3cU9>2)0)(&ic%$? zg<4+6G>tJaIk|a{hRn$=T!}Xh#9CUQLoGS2=ud)3XSF>I+&kqRl?I=Ci~SWEk#A{1 z8faCK8L3(y6Ao|@Qg^8FJ@C(6x_qBu zX6Yz$Sk<_eV4+jXXUO}aNh>{RqV-(lA?Rb~qy0v7+g_z_{U`vw-1%amb>AW?NX#2A zpUKMQ@NCm)KOh+T^yzo&%{j%UA?X*3X@6AMhl~62D;;fH9^q39VF6{M>BQzg6oLHSwV+-q=#7ZwFS;-@I6Q{J_OuN*~ZaGZ8tMVBo zIWAsTnEn&x2*-E zNXc!i`8xm30koc<&ic`m`7!SW?Te?sV5{>npqtV`b{*vw&Bah>^XxCujWpcU%d$?j z+l{Ma6`*<#Qla~3l}Z zBBjOIoQ1s#H_by!yqUYrFs{~qs*d;7}Gu$vmWb!x?nTD{Whx61s&sBKk_xWS;4s+wrmh}k#W59LD z#Xknv26%(><$U9*`~hXz?i02f%SFFTRgZe7jONHc9WkyQ_o!nA!pN@jG#$Sx29;l~o&X)Sv{>P>G z)y3BHkU0(-?+%!tVc7Fh9k%8*>pJFdYwc?HPnS0R23%l#t?)yCJRCS08hfUggTyQC zDev`i2Xr74$a2dMq-ySYA3N6b$1J2og2wh0ik0uj%F%wr zYwRRWI2_1S8%?WvX4XaMutd_uVOFx5&@xRKnox%U9=DtK9X*k#F=vxaY`+i z1?)XOo(4a^10ky*WCG@?x0e?Az;}@gKLCH3Kt(UM3`g1Uo!wodXq4EseqVBjFu6jv ziVC>-G&9(TfES9u*Xe^btJ(`GbO7H(v(TRKn=`Q6N76OHu6yASC@a<#9!-DHbXqDc z&atU|^dk3h2lkVC*19lx+Vv+k0Z9Tvj+OxQN9_J9RE#xSy;)o_)xyv3%6s9atGR3v zkB=`ryd-sINt(N_*V}tYM=Ii)grFavXO;ecU3|o|@vEzficXJGpM|m;HN?wL7TPrFt zT+CR5$L8CsW}B6Wwk~xEhzr1{sTp+br&frxt+Ic6z3=9ko)Hfni*TJD6g5RQEB#|w z$n@9SrY+EzmuhfGCK}dsgrSM#zQ6SOB6XlqwXhOBQ+<5=Gb@{O2L-*s`SrL&1CdDrD(m9y~lmn@zH1#3HYkv>t4Pp*t$|418rR|u%sd8f3DgN#< ze>a?4SMlzxFaDe}1OBJM^ee*n$*R3c*8Yw+v%rv`7x>xS+I?`SGy?sjT^Vo&s+SN+ zPwbLp!n_u=-Eox59e*=cv
4Hl*M_ZBS}*5}DTSJ_Yo%^-|{F*7!Q*_Hs>{;|K- z(Z!jzcZHO3L`=9_Qnm9N&T*17H;29Qv=g(QM!)e+f{FBS_j^fAFPzy)Rf&9xlcP#P z`|G_hmIR#sbD+V`|8na|i1Gu^g1ehkhtpjCoM13w$fYUhiQWO`%RAIw*w}{+yWu7- zD?cCo@dC5?z?dTp*FN`Jq6d1(I>n|Cv8VF0Nijn3P)G7O_G+8Q->SZIo=L9G_UIGU zvOc<1VH>2i2a}q}8dT|i*|k87v)nNuwX9%n8E9Iv^$5SUDm|^9RS68>6M_aro- zIozQRUSd2ZCd-)i=cI>aTG)NyViTJG#QD)cL|GI&2_SA%dZ}r6DVcEkXX1(yubiMipA@}OM5!=E! zO*SjkB$9FUSROnKW?Wx&sYZr))TgImIDZ4#HQw@cmoMYj*pV`dsBBt7g}VFiw;Wn% ze6#A<6ZxY49~HJCPk&@>-qG5J@|HinBz=J19?q9;s_+U`G*L;}v#tul+|-k&`a_!C ztC_YqD$|e4Bgg-eu{S)KitGy?4;>^RTq)SvU1_Fh^RMTYYhPszUhq`d>nMT1YNk3j z-R}4Y2`7wrmE*XuoXb>)Qf-?YOP#w2Pk{wU^2g5gZcRDfb;%nKN-ozGyhS}GfN-eW zFwVxK1m}~}RL7a~D@M_A(KjSMnik>H8j*%I7Euw8u6${-gHH~BMCW+==VY`WZx0D2 z^+?Dmoz;9)?5i#)>QxC@OsR+LeX|r5lF-j%;jY&719i$#5xlny42ld4e#1@Xc4@j{ zX7FEg5?0fu_IJmW=6Gd%5VmSuFK*~Awg$n<6oPU~^7Odd3gCSA8a(1oKJ-HlORsj$ zN=iP)6@U_bj1n`$lG*1yxYYq`w~mxJqcw&zUxNQKTj4^%Z;`CNAl1;Ras67ar{VV) z&VTmbm$ZDx3VT1lbw}*Kjj;%|?gKv$5kJ01dNw2D%36;LOALgp3s<{!6(#4zknp_- z&`rdZ8DDT4Cw|t~|7}Qql?>t1Wd)m0yEIR0pZ&v*FC-7e{F2mFfmz0F%@iM0AP+1e zqM;G&`EsZ;`)K1I!&af&ra>BN7P0kqN(0jfsdyFhGybwVdaCZ|&OEn^4awN=noO?n zK-ILIkLSJno|#-KRSEn%&x@vXuNO|V-g_l``r-;rIGkj)(4_>26^Qm7HyQJo1OFO`pt@jj-U&+fv)@8=H6)T_S9C!BZuf4wZ(4@6V1JZ3^TvZX2j2RVe5&E ziM)()Aur6jto&J~i9ZQa>7pyc{w`1HEZ5MLj!~t|@Qgsn$WNdMW<%n^D}f~8)+JN* zltzP5(Xv$w+EYwn7s=Xmif7I@6Dq!ug<}4u{`HiFua}=Ri2scNNPI=MMS29;wxRT{ zyYu^xN@T}&AjQCPG;f?-3>)kHEHX&HSXt8Q>+imrB#K2-ZyDmcb-N=e*oB*@i2AX; z3|oLoWs-nL{EWP6wowwhSBEX}@R$*-wQJxs!`MB361s&OYvSh!`;-uw7JrP)Qf^Rr z;11E(Ud9@E6%kOcqFq`2FaKlkACW!GV?x!BVrQ*xfOAuTbYc<~?8HVH-yBIXe)mU_m|2l$>< zyz2FjVajXO-~xOJlxS9It@5f@B{8_m1IHQd*(MWMT%yJI9`{9@Ym>r!R6R&O{V?HmZCw`u@Q z3w6q9sg|aVZ#O~`so36aCLH+AT)IqS;bYg@bkvIRF5Sg}_670F*rcF=RSvi5)Zup}v>=d;_V&rZ9C+oJ0pH zhq8i9AoRTzST`K<-s+kSX=+51Hcu`jI^=%f9C+;23 ztuzG{bL^izz!%TaNyKx~79t4ugY7>p^3c$8era z^U|J;k#x7cN)RkMW)0Z4$ zbUgd9%6+Tf)5!WjliMoIQ-GagTY`?H8Bh5_btzuI#*f7-s;c>FLgsrUa1RQrPwuWn z?lQ0}f9%|p@AJN{K-|P{w#dJGPc2lti&fP6!`|aAv8b0Fug-jYAYIcw7szhqdCtO}|P&A76pC8Rb4tO48 z7xHi=o%pSlSLbRewy;G^lv|LtG6}iq~NvX8^ zBAQ#V0KqYxdYL4NM@{|4kGBS?_165QO6>3Im&{$!&#BE^|73DoP9KMGyWs{qR3ny! zlpthX;3?GblgI0A%>P4?ZxY@z^X84*91yF@;L9E=_tcp^Z7e0Di)^24PhV+%m6KK= zC{)m_Ih!xHUgHgEOqhn5(kk|6vwfPb?DzIY)87Q=%6RyJY{TvtV?&&{$D8-g_1r(r z*>C#tj{!N>a#jGdC}QlSUb$2nLw79WbSj#lmH;eM+5_+{! zu9e9NQv4KG692jG^waAJ>q@=o93&(zJyYJ&EeJ*$44Oumyq&JN-zs=~sf>m80tlh+ zBVD+V(^*8;eN<#7US3Hvt3`_GwyNA?XPM5AUEH6`DhYUbJQB}FT#pOH&w=+v-7S%ON?;>o%nqMXHGe2a1ZdF5b zp6l{bEN`e`{$^|Qxw*O9(_0e}6mL;|r0q#iq+eMAPULuy&Op)tD$6`73U6Wg&Ql+( zG!_S1qXw%=Ctl-OY3I%m*WUBVHvst$K>r zgwCAU#rX5Rm19(NEZ`d?oWo5Gv_m;JdH4t{hnwbO`HOk!`-R_cmZ@W#Ib&HgUal29 zDraB#pXPz5jxlmWO*%)@LH@IkbekP8V{730r=;F4lREg5F0pLmPH?M`uN4cg8h4l9)z(46l4Zoz_&?awCg)sTYl5>6@Ol}GW~ z-gBLl25Ye-*61>p<*duO(*b-{KHz8Ig?Rd%w5POqk-gkk*lBXf3RQ`=9-V0*i!b}6 z9Da<+>jXkF6HqJWED)PrYq*s~LTUzYlU<`6Sz?Nzhy8MYA4H!l+<>`Jdm`!mo%>AZ zl80JkeJ*FudnaM`z#mA#lJvpet)=+#0(nibu12;Q#4BX;IFfzwFZc~QROMW(F$Er} z^jxOof$Nrw!x@v#qeIspKpJ5`z8Dh(z-Sk`Y2|>?sS6WHfIqzI`lAik2L6R_Y%No~ zS#K0Sf1J&$y}NLld|NY=+wMh0CkC}OrsVej=!yQ{+M@qYpU;#>ceIY&g5I0HrU`}q zb}@i0Uqv=*yi$N)o1OI<^=3SC*w8IpG{fgTA9ybm3fvj3jKmDw; zP}JLTUk%zUV=Y!{s%poC^UggUwF&(1hsv>U{GTS=m|Wac&oa`UsM z9Flqs(i98U=4}y))`P^Rp#1qX8M4u1O(1&`TI>_s1o^dk(pp3YWS-{VOGb61@zwP` zd&pR|+QG?l>^w*K;pvm6wd%S&i$H`{xt0>(rlR60h`Dd2GuIV$*9HhTgfmkkHo#{} zRR)UZK*S6FMipIt@5?%_YTlpv?!`Br7H(wMX+x@J&m&4A9}KgsJWgz#W^h)oz4RbCtM2uu|HcG z<$lHc+Y^`R6CJp(I368=0By}r&Iwrb1ax%}Lzja_c<+Zkc?=69jhC8lL7>hRE`J+( zCp+YoVPRL3Z8vP`CDB?_Qe(J0h*A&13_0#`syyYa4Xr)+4f_nK7d|mJxfftRYNb3* zza2h3N-Er*5I^(;no}qw=q;I7{bO*dAKyBn-$6>*f+NHsr)hHn52XsycFSY0d#bSf zT_HF|h)7jt%JIVVOz$Sen+J^(Mk&e)ev_p_Rt=@P0q+ss%iP&F58V z!XkyF5pU7u7?<YT6?B!24Y zBOHGspPODS=5GDiGPcrmZHBZSbcVrkpT%v(ecZ#rOZ3`XN6q&Iw^`Q=5v|e7 zdv7U!fzFbSv3t?@?mgn#-zpT>+xlEIz}xqFQ0a3cj)uRu8{8NG-VWJMXm64ZZmX`? zsvi$=*>>S*_{Dg-6L*kKEEOlJkurW#pAd3JJ1V@00Ri8h*|drCV_q|r1Zge~Oo=x? zz`e>;cJ9@X{w-ADs)`#ve=e2W5PUTxKE}W5-RN-4PTsudnrHO$w>7#q2Pfyol`cXj z4-JN;_MRMC$7Lm{zI1=-Bdh!ZXWm0VHv5Xczv5`IwUHg;!*E~^2`Hex-2d#ada7{T zF#Zy^Y~(6GU{%!z1K)YCo$=spM-G={?wt#+o+K00)#Tye&n_6Wp&VYqGyW@P_{Xv} z=g?9UU*}N32Uu2ei+`Z^Vq|CErg>fCMY^I$l9#n!ql*qc01^V}1D`Zw3?CFEsa<#8 zygTPzHy9oJz*xCw;)^e$8N7m8GV&5t8M~u+U*C`$!Exytaxd7(i(6G5vWHyCttZG8 zW8?A#Xr29uBF~TO63;ukescjOYUV${+0P5~J%@|H+}bpMqjpmfKSbcJlqjKp3;`^s zt1{VE>iB@Kwx>Y1kv{@Xr+Ig(cxms^Cw)@1I6ZO~SZGn;mQ=Dkd?->Ao9 zG3k+IC{bPIzO$hGzUp$ZoEaqN--gC#@Hq`KU@iOseJoFX%RXU$TIi6#A8GIZ$@SD$ z|9D4FAy#8nuRG_2o#TnKyv4*&bv}-QO_Vq`yOg(LVBBdgBYt9WQ1By!aKd$v3xxeI z-DDAo59WHiPOw5b9`EnR_nUw>=MVC+6^?fFl0q}-E5KB5I(l`k7rByUI3jf}7qBC5 zCJ)jQWE8~L^p%IvczAz8-y4u0R>3?<6~0{{5i+=fM4sT)QXw%)?2qVliKsKKjoPDOoRW&#tZ}?t4>>8=)Ij^^yBVkVc6g z6Sn|9PZfD1=`?GDH@>6VLXTNvX>6+zy|5ji{_%bN-6Zh4+M4*jEE^AE4f7d3F1Mo4 z|5|MfKgO#wndcEe?f!2X7pJFnbiq51A}3Z4@GN1js}~ zF9D0;B)PDv31bIJgbQC3ny_8O?Pq5H0wDJ%E48J!58L8N*jLDEJ-)FmUcEn3igK2HVSl*(XxE_Q|k~e(W`-ymcNCj|NE&^s*eAhkrVcx9(#vJP+d{A0)+bL zm-7uTZ42nHw(*;43gu<5w&J}Dtj{rzm-+)eNT9W2GpzkBHjZ8)`*4t?KPS+vNL$wfB=h)wT!J zY^zc3Y(m+ToE(EZid^h$O_uBUPlU2T66F$K;*Fd3{9eoN&>N?~$iH#ChO+-&-IC>wD)!_Gb?^c%%L7rs*y3 zv~5Xi(Gz7x>~wZcwAIllw0I<3JOo+27o0WP#O+(&YU+|!Ds_V7e^sX3_DiqexO!Ns2)t zD);sgHSoKRbQPD9se>_H_c%VAddf#j^xIhJDV~do@olm~QbCYo?gsI# zeQkYxicRPRZnKPV#!Cg##0H5!e%?CbFx|rf>QHsYb~S`T9T=$n-IhMCg8EfBB8cRJ zV_-E!M}vNrO}a+otI1Th6FTFdBSk1s3`1j{a<#|%75V0sUZYf#*8)f#EwpnwP9csT3h0KWzZpQ?`d3*{>x*=<+#C*oGl zKJlRqlS1%VR_7)qf_hddEH#l>Rsv%a_d_BBBz4^VB-1P76>pnGZ0eC9Gaxj_`tSch zV;TQTc<29uh0bsfPy@Q?8<;P)a?X^q&wJk~s|&BapkLhVMUG-u^bN9YX{%6SnBJD% zw;J$64dr3=fN>wEeQ_i3K_6DgVeOBValeV|3BH^-lDTt3B6VUBqW@YUHO|YMe(Z(X zKW92X&ZXvqDt3Rh(ky_rQTm2aK$h=Vajd$IPUJDoDfpHA7J1weNaK!+|1k{6gZEOw zia9IcEdN=xzfW?IrMc9;z_|7Prz3 zQHEcB*U#RNH2bApPuVY>T3fi-kabZIEL7sS&t@J=5#>5MD&4#@Vs_{k>%xVdU4b*E7c^&^ThcIA@}V!*&K*s^lac9zz$zMD3=&Fu(^)f4G&K*!5bGAxMCr zj;5g(wjSeF4RUIi(Mw^O|eT=z4q2WRnV5#pi*#9 zXY2Q9h1NHDn_r_sczL_r2)=k=#u|9oh!oQV&w=|heyHrcndjfF&7Ex-KR{-c9@e5; zVr~p+b3211ym#H9KZZ?SP-SnyogV$JC?o_U+deJZk>oIMXlYb#M-084{=o3fRLCf? z$OSHS3oT~IH1&O^kj8?-I1{ie7^-11KS#^^V~htawbIW^Z=#xnTa)_7Fr7ruP!dt< zdF=XQ-Sc2=7|T+kmSH{b*Giv4Uq6BZ{AN}qai*}!=^&6!U74yV^J1`%fWSy!+g(Q_d6kbo--Uq`}1=j+mnZvnerGINQna?z@8-*N&iz!Yx#dZ0)Qq zW;LNF4fZNSDhHWWvVVu5H+MMccrGVEy18?Esn?o=Vq{XnM+kY%<{3D-3B!;;o_0TA zK8Bm#`dh4`&g*f^Xo0v^yQx~@uT<@>ruL>qpZMD4{63?~2w~6RrgOe$aUGt{uV&6q zbE@C@wGsaZ$cV{IL^v&jdK=B9B$>CV@D4JT%r=Nq=+rd0;fJ|J`=)fMST-ck316Tx za4~K1o9J?;VE?4p|0-)bJvCTsZQ&RFTdz3dQ^0$={yz7u@#3%5Abl<*Mq z`IYskm_3ydiA~)+0p%#hIMX}CTSG@eSJ=7L?n<2Ub1O^_m_CGNK!Fl z7u9sYu9>>EA@QyE&W5LfdrgnevhO!@xkSjk9=T?|1|Qg-lQ=Ukl&LGMpYtkfMgNG! zM~B3ZZ@Fy6^on0;Rmr3Q#Gqv7(eSncL+Q;Tj}NR&kc~FXDmJzT6XJTMNUrmVMos9e zBaom=+XG8ia0<@+lwpB9>~;!%3&^b@jv&hTRg3YydrNOC;W zsl-~aJ?gS5wu#V(1s(P?XdIR(LMM~|m~0%9T3@BzMGKAGq84aLf_2w%(VMg(Nyo!=|Bb&gTQD6bHr>>L4@y;IfwRzxKl84IPr$8t7%#Ya)mrhMWP|c{bla|-#8NH@M=-Vgn zB+27SW#66?Ov32rvAr9y7O3RbFo0{K+2){A5N-Bs`3V>lbo{%2GAEB|Rxm zgQ?wrR50Nj|-I`G^KPa$TVdPLE$J+?dJ2DZJXLe(dQ_AQ=EiE}N{^7tG3>~(=U3n(0?RnLk=Fou;=%_Wsssj` z;~vMH>~5fR=?gub>f1nnI_W)gR2%rNW>Nzww1qxK|1QQUg(Us5#!4K zF+6=#l9giPP?>fLK9ES#M#WY{T9+VGdIMER8hE`h!?_t)s#s3W^z74e+4}0Yi365r zpT8Q->gx%DmHzcY?iBTWPH0Pjh1l{5_aB6l16x&^fES<|@vOA(1d^~WyykA4CGsvk zK)jQ(jb@Ttaf{x0zfyrUOdXR784>NgciJrn5aXt%f7Ko=LsR@efpfe}>g%D}4_e{w zeC{y=4`Od28#Ju4#$qfqbkteZ*&Qgwijab^Hm#`Tf(oUVt)ih40p?6|(1>Gf7;+(% zlLas@P|n#(rZWw`Asja(IMI0<2&`K>XYq3v?XNC^UmQ) zOt1a&?Ev(Kg+kKDg7Tb__BN!wVIA0i?mvG1dw@9Beyo~&H^3h3oK_$qV;rlnHq?kS zU>@T{@Z*B4b7Xr={xNvxl&G+j4NZ-DcaF0=X?t^rZJ5=^eso_OaF^Okz71%I#Kb)6ShI8eK>hwGL3u84s% z?Sw)5gY|JB}-n5TZJFZAB^QrX;x%%3~pD&g~hBO}yb*CYx&fu^tN7l*0bJl** z?UQJc$$nkGwTWd;Dv{(DC>5in81t*M_xFphmrRZgF7xhVvXAzdNgW3r+@4QIM5kNl z?pA0Q^$2p``Ycgv$fHnqZ$T&?*1QzUk>nB*%FE_o9v$FpVX?O z%0gB|@0=kU6V&K85^3L+pn00GMeH@I%)alJ*On!T{aIdY^(k*|A?Nj_10j?bh*>Z@ z7WTV30k6>}e#`eK_e%TM;cyW<{sQf{pH#8?cUV@WUY%2Q*Zu#&r0o5<_g(a1M)GAU z-{4<>eA)my`GY|NSjW;T_$0(zhoS*G-61oc_TS4gKnzTt(!+|9Mxu@Cs3_wal35mp z`YV`Di>zR4$>9FSurfCf>>S*oWle%t7Li(+;!`@wbZf8@q(2D4yy~Ah6}SC3@ZR7z zpzR};wlA~|x_D&JU}1rxyb4Ea*T&cg-$$y2v|bHx03UZELwsL?s(?9tVBnyDX~({`i&}0oK~e;w+$aMi^-Z z6qChULFc5*x_7Ip;1s~vq`sP#@t(D2U}Ae9Z&w4H6WEhQpF~eKBZodvi?S_a{_D|!d}vHj)j$9@70TP5bqj|#*BrM0_NwGvxpUg@6p$MojVle>@-X5 z&)<0^#|>Ni9X8$f9?gb$A{#@MxHieg#>#iIZrfK0A-(JaWp+)MnSR_D5}2tdUSd!q zWfHb!DVlEc_O)`NrrGSq3AgcRe-NyrNue9p@pvWnJmY`-dD5dZfvQceNm&ONS;Blc z|2Xw2UxnM>m=AXBXBz{<#EZ0V4Lr-O`fmaz>)T1b0aNR;P?p3a@#d)fQf#DhnvN57G^HIypjc= z{>lP#3DRU2qnP=#uq9bs&wNZ1xQf8~BhQH_`=wCi(})cJlxJNHbDv_zPp%!IDLmU7 zz{w(tyH6<7P0xMD$ZIdOel3(YRl7uJmiMzmhFj~Abk@E?#{dq^{9c*Y*o5+sHf7Pt zd)|h9VPVizl^mRhyrsJ zyBsUaw)W+0_#C)$W|p{ByJ^NhbzcqKuA^_J;v{;1)pA;ovzbUO&FMTO9UmwhG!$`s zGa15oKEhMTy$YR9IJGl2JtNF1lCde5H7JtBAmc= zp3>_>M=F;Sh+oG|UiRTL5Y)0MyQGyAOG@-#u=DlTwCSFb#!fprasb0ZuAuNDx{!?2 ztH>ouy9KKoZ^e#s%IfIDQIuy&&x3ECpZ*lsY$0$b)R^~zQH*%_d>I5Ndq<^CZSp+W z=SgvQGwi-?K4-PDxp3`TNo84q+^)Kw2dozr!*N&s>xRj!$JApVld+ThIfo>Xg(E^XSuQ7z|Fb$A|$x1=9l-rF8&SOOY|%Agkz3QkF27BPzx z>kDJM%1S*>Oo#Xy5hZRy?Dj`cs~{ivXs8caf++NDCF+vu7GZjoP8zLELLo*{5l(KR zu4kJ0L_8TV(XVX|Jmj{l!AnTiKn;?^9TZ;goNuc}EQ>f_xsx8>i|+^ROV>VXc<3=O zTjzqpf0@oY$pI%Y??Wj?FZd=NGz^^GF@F++t>X&XkS3vTP6zUlW_?Z&>>B`=z)JK- zi7<3>eyM#-hQ!-iO=-0K02wmDR>xH5)J{8_oN!&aW)}x_RY8v*0K~CYYe6K5YcT~O80Yb36lp2&slRR*WSPZMc5QOHAPeSh8gxD{FG zFaC}`-6ap-VVx@7Sr71ilWpWeI+(rGeJ#)+a-Lon2G})P|3p_`1DtD6Iq*`sqML|` zvI1Zy{2#-8vpK!z>R0JAsMD(y)uz2$hW{AOC7)&nT%s~x#XGDHdJ(b=ua1OM2k1hT z-+>p=fRy_h(E6g=b(ML2Kon`8Ux*39nSTr*!BbIPY_%mHaPn=)FIh=>TJF|gP^Y&E zqt?d&wzhMMOz8lqD9sOfRDs_+;tc)q8_DFcb`2t?K4dPNSF^W)CViCs z2bN(bIQkWred1q_IRW&Xj{h2ZtXO;p4M&m4sDnF4w2G1eYNH0arRZdgcbdNeJ=gUb zxGY=1oA5Z5d-U%S+Nkaea^1@xM0zyPvi{#chDb%t1nyiXK2VV{@MPYR&H`6Bgh=G4 z$^_M&qX{yts3s!z2)wCG9%N**f(knh0KCLQxQ2rw%V^HefMW+xrHxuh%*}}O^|7_n z9LKz!AFkk)6_o}<>|(_ZkgI|8>Dop);k$IA-fm!wFLnWqy}|My&&7QMnv^hG~6KL&AqI(z9QVlW}^6F@?xM5-P8>+|KnYBL}Em*Bx+B!< z>>qCiVDO`d9G;I_ntr{nll2rpXJNM4r+^>y7#+@q20%#P=oc^aT7nxi>tRX|E|bp#S4ZF(XhQI@9Ca%U=gQTcq1(T zvZGq=wzT8QHHH=hzvHi^tL+!sBJ8NfG08hnFa^BhJD6EuE|Q^mT3okamYWrpKle~e zmLsfHA=cLj4EVhOd+lc}|NpFhzu-rm?DU^p6cqE!@TMwG4n9(TiQ#hN(j8&a5U%~X zi;s2Z!VlAU+M!savx^6U0Uo$d_v8jN;PAnn-`$E=duwj^%;M=qGD4@E?JPX=<{IV^ zFf2M>l(jreNKr^pGP|O(;@Bdsk&tRp=*awSMXS$GZf0fhn#SkHb&Pp%*L!>o1 zgXH4kT`;?KUh-ja>u~Prkc*_{6TU9Jhw{z@*Yu`UsWon%;heF2zhHyc%4?S&)dVeW z4ec0_F0AljDJc67Uy5?RqCX8zQgafG7T>Ow_V9a5WOyZ4LLtSvT@@YrhOUX?ra5B` zC*}%6qkFJZJQfzLbYp%7uWFB!Dwd^LFfmb1Ng7cbx{KyEq3=aKB>AoGX|2dayGS{i zzG|KnDdW5AyuT*Qqk3&d4*CGC!g>9C_SCt&x&}YAs%?8UVG`X5rkC=`cKY;VP&i4w z7)>oJOCm#h{()>4r@4<-sdw{nj_4h(hAI5@{^vG6O747AZ|L)V@pF}5+$hYs@>NKI zSFzg7<|!KYv&Kv*e&C!8%@S)OGgM7Eku}Wd-KbJ9#bIMQ>0T zRP=wR1Vjj@mlu*BAZv8h)(5lekMG~seVy>%jrRDj#%Ta$5Ev-Cn;;!8YS8%EBcwA> zsYECJ11&HeZsGX3w5<#|Cq)>`r@36qDZeQmKu{9t*k!OTdqw2YC_RHa$sqB!YRm9G zv<8MuUQCm9bh|tRj6R!irRqQ&=mGoAw9tmRyUH^>HI(`9t7nmfu@Ka~f1o~9Kp-jp z3S;z3hT%2r{Vv8o^V;lS%pf@Y1Et-?@PZFVDo@IU;BirT(RdB$jHKTM;xn&yizGy! z9Wb&`wfPQE@gp-zUBTEmU0^%A8u1nIkyqXj_WE*o;nH1k?>u$&8 zI8FpMVVD(O0VC!7UticUCYvX#-He$L?qwKp>?fInf3BDge9TzjW=WobF^d+z5-6II z>eG^{a#u&oITXG0n2j~!(on6=7BIz7E`-@#O4lQmRH#l<<@y3AM>K3_(Zl0o#o{<@{%6#(G;T1_&bjaEcv8{6Rj@2{`IXZG^wQ!sv&{FZLySrSJ~@_1dOVm!G@XeMh0%+xh*?DNdTiM-Zgi)Cnxyf&sgS{1QD|#Z+Bq ztPE)tO(3d6#ibvv=J)y_d28)G=JjNc=iOh%nAdc250nH{HZo0ap;+%=NKzufr9QRH z@ctWD#h=c9g+9lbvDQ+0Cz;i4ZKLGeLNm`-@EzuO1p~2Ovaig=)33 zkIa=!xCTPoe>OcmV?Ikx&%V?vj_XOFMWy-H?*0Q2MQ3|fAP9!X=oi1oY#Eh3?}%8( z=%~ltX?c_mLb8tSyEJL7$d;~RN|#!MzPI&%D6LzvUabkB*CaY>H4$|~WG6DKs#QKO zD2=E#U7#rC#0|PzfZ1?N&nxLz-`@MNiSXI!jju74DNAe^nOAB-hLAWy2XXF&Q7+T^ zwGCzUDJ_X6Ii;l~Cx-8~Nw=1wY4I+d-WGSpNYH#~RDtHvK#|$6`i7Xf_3(u5=l?*z zsVAG+hxC)lO+7h2TwU|K)9*dH0>ru?q1cm_*>_%8Biw+OJY(Qq;Ct6mRMJt2&3glT zqYmv}onmhUmL+zW@~6j*Bz@(}2fVz)O|5suq8Z*BCjl=)y6$s*@OF)wsQQS0$3dKT zHTHTKbZws{E_t*$?fstOZ2_qxw~6%Q7dxkKzwNz*HwLamg1}LZ_AGsMgG<|{bzQQ> z;EPRwui+}XRZ;oX_u$0W-)}2m8$UA9KF>`RKLb-5k_+cy=i>q|4pYqc@Epk+f6OD~ zt>kvh`F?`;G3)wc)$S%{nqsvOGNfqi%2YPnahF3@Sy_ammKKM+KaI%Z4{*U>M{kV^ z^#YLG+;}U4I{)~l&%?$R z9ccXI3SI1#GhR$riwq!xyVIkNodhJHJ5l~-25A&4G46xuvXDKwYY$|JD$Sh zlxPzXul>#RlS#az_R*>>!C1Z5tA{HxAd!BPkj`!PL$FaPdI83J-~yz82ecEM@46f0 z#q9$f#kUdC;A*?wT%7yqJxpdLK5g0Dw7ur+y-Gq+j+woDlsrL3I|Y7%#}g*nvdzg8U;&d`*)lJRDoyi%yZ7h9Ct#hRCyWA9mOb!)Kp6u)fpWG@ zkJ<~+xW5!2s?QBkMyeJgT!;7tA|;TQw6%(6S*2KH93i3Hg147fI??)C+dIGgp7~zI zb^U^_Z|D%WKdq)cai_%dlTR!HfEnC@I81@)@2E{+-u~~8ZT!jxp6dTh_G;19v^Y=x zO$#rDSJb7l@XE=I3Cx?*ug6bT_tYqXIixK#dM0WSe;#*)e553#tEuq%m#1V)S8|!={?CmAiEQ%JfFEj$DpetlE2{9UxT9YMB#J#ZTfGBkIBL zpIw>s*X6wb<6`?+!uzXd91^ftC@oO-)>cpVTanFpGjapx5Uu4m)qqoYDW05p58dAa zIilx|X=^92pNiv=_E)u>SSZhMz;tzHqy|_2xVi(T3 zVJ~d`;riZ(S4@_gwFU~|$1Zrmki=!w$8;Wy0yxXw=vGf*O^k(ec00f@bk^9MLd(zD(KX*nc3Nb+K!H?+l}2y}XZ_qNq*DyQmf;ZOC58Mf}d?~u*K8JeYpLZXDf3#N&sSmX3t+KsqSDh#LwDKlnzsJtqt0e>banMJGdTbi%P)6mHC&arE+7GI=d;6WwPHjoAJpORn)!l7as^WHY6Jt}4Lg2k zDLhZa7lW?;JALG-aQg0MkIveIVj#NnsjdoB_xt|}W&U^H`~T7D>OfaZ`~QbbaT{Zg z0ljTeJO9FuUsU~)nD60U^I6%kA33A6AN5OdI@XZ|bwtBK3X|Cb4hjtl4gb$yFB?@j zTq(Z87kx^#eQr1?cNe7kSAhxz@~4q^j@!L}zDv!5{H@OX^h%F3#FpwCE22bvJxzsitm;09KOGvsE8*DfWs zZ8s|AIY;(j;QOc_Ef0jr(E=8Yey@Dx#Ce<`^*;YVA92YF#t_9g!H9%5H{T$O=YbL< zVaEwU4oITpy8%{$;nj)I6-Z1qn8&-_ignApdNOH&8Gj*js)zC$&3$4Ol%7{tuzd8n zH?r2g9f@*)bk>5Oxi78n4;*jAw;W}SWEpuv_&DSQpB$KbrQMv#j8}g01(p$< zZMZdsG02-G6;~5I^Is@h3Mr52dus-3Mz++omPKm?Svj-mH3^)MAk?Zi7}!$0rAF<; z4mUHBF!@iE&^@a;1ExlH6eh*G)#Q;Xj=@QS`{HQ9Oy1Z$oV24i5*WxDt+}sDvD&~f zN|luK&>cpLQt>kUQQRpXKHf{%?tR$1_>kDBQ+{$*LI=@00hzccOrmUy9d@_!s!v|bpHjH!q<()&$`OR-&b46_iS_0n>)i9Gt*b9R? z#TROmzfZJc{Rc__Tg?zbYCg$mw0o&_Wc&y0pWiLbU2amtq!#$e$I|0#@kgT>SO1>Gs)L+AeEE)r3*z zStsA1c-P3RH(3HSBG>E1qW{_%H!Vt2_cw>KN)5oz)J902%XC`pKydk$+$_h0iq{Sa zagn%1)9yxdR_=#t%Hub$u3bN@P~vFJ=BE81o&lQRHd?1Go2YEmf@oDoS(Uq{uR#x^z2-Lm)Q}uH}rKko~d=i(Em)!AJ!~8+(;$ zfQfCqCA1fHe4uci94!B;J=c>nbF-S;Cuc^0^$jBZ-Gv386Ul(gU^Nwx?A&k35wBI$ zCP1Bd{d~+wE-fIMj=y?&3H2V~(wlOc2kv~H^-)pz)HWs`clr2@v%PRHt?vfv18NDA z2VkvBP2{}0d*H8gt7B(06efHy@xD6C%5`+)f{*&3pUp?)EDA5xF9bZyI^dbuMPkcc zf7;b(o`0ZHb5^#0pc+-^GJ+u1o;n7AsC~qNHey{m@B^aN#$zu7YXqJVUYi+(! z^j2e|R3Aya3(ho)nm92cG5gRZl9+BF)eJAT*nK_;;=fpYPR8+y|sW1ix9f+8_n$fCOxMby`7lQo*4 zISQTc`}MC7AA+>*F5`(MP2x-3hD|dtIvt%6?)U&fJ=o--oDQD<=Apu~;;}RT&GKH% z6d0?g%?VFDWtb>2ZmMdmuL@2frsSy%Eq_N`$NvLSuC4f^nD{FIK9QU06tRa-x7*by zmN^qC0sPQBXfsKQ)HX^I@Gg^vI^w@D)+2(sbS&weNm%y-SZ+o+eP^0X zC!#z9tqquQW=$p(F1z05Gvw8D8cBM34Si2sGl)D%l?Pdho=NWk7=v$oDrP>XA0#sL zf4`v^EKs_A>nEK(>2DAQXp^gdoK8lG_{Us2;HF{>)Dw%T!usBtX$cZYoP4{Ro<1Uq z^2Ddxx`v)N+X3mNB5RmFJ3P03W|@bhPCQ~fAMsY@b@-&y1*LZB_2m8}YduaT8zAcy zeFrxaKIX(0D)HCv%8-R_~N)5ZSwb2eb%+%ix2)3Qfo$~hu-_h9BwEl`2z@nVf{swt0pSB>EK8k4!TMn6vMs)a{3OeEGid{*a>tdFr6H2)+I+}lC8 zyezQhkId;8f8}hZ%9oF#Z*FalZitd;js8*xjYMQeJ&JWa0>YqHVZZ+Y2=pK5SPYiQ z&7cEZ?33cdMaGOqwNV(+o>=?2ys_gP*w^Z;$kXmXD^@V*YM$_;(egY!pg0;k_Fy(5 z0iEk@LK_GtL_EwQZ&;l<5@sI;9zhEp7P_S{i?G;lKZN|k>p11_AecS;oHSKK2IUM@ z-!!-W8LH9Q(#D=n5SbNmHnjTb_S*g8+miV;uEEyBFh-|mvz-y36&wxPKmGqS7Hd5=ZD{`86YFfPT?vk;YZ4q{SxeA!>rInrw-2sqx$dk3~#6)%GtU zHMjf)>^PneZlj%VNW`3+ZZr#VLG5)_p?*p(Tt=~Ul?B*^1S}hyDtxAAF5|$8w9#$v1Cid zd3s0DY%k00*jUQXo!7NT+@Ud~;-`c|pAtojRqOY2d!V?W?u#wrrCOD{AAX#c6V3q3 z5bNIti&`LI)A`VaPf<$+r=V@u7{eB5ue;=>AEf*eHSMO^lB>Cxbb zgnuA%Bj$Owr_>-FNIv|Xv%ok=H(X%Jzv{v^w1RmNZVv+p0FJ3&Y1Mk}JbQLeaRWiD^nQ|RG63?RI+|NTi$g1(2q2%ANk zkB`Y6sAc_+i6nts^29$-?!$p>fM41|5eTAW>FA*Yyl_7PSZT2)u$gPT>!#-6&k@Zw z&MNTqlzf^L_^iu<`C^9DJ_2j;7o!POFU$TO(as0*lr}TFM*Gt>%ur3>ox>8IXfNrv zu6QFaSLQ7NkyytA*~7%5Z#ztQUVx6}P(HPvEo0ueq6dpU`IeTA*%@v5Ppo5u>FY(3 z#xP&4`Tg9)c6N=QzY>()IJ(gXH%T!yb8b!Id(OWwJxULLz~0FuzP3GF|LVdJY(T(# z_N^VO4u}SJRrr0~8iA{xt3)bIFKgejlFs23|HMI6LBE9N2=d^SKS6Rw&J==0$<^E~ z5DncpO7j+X01?DbG8ANq5cmfg4h|?K!cFZ?Z{aRbc4h!k4z&ei1h^g9eI?B5{dtV7 z59f&qvF~)V+!*y%lnGSd@$%tnT|6W<0w#`fTZhb%Mn+pMZT$mP$?Una1W5@bPbxaL zRcKspi>R*d@Y+z%L3`dPy1Ji(831z1NGg0`E0462IQnAD#N{ZoH&xYMDB_Wo6sk;M zuKb*g=M5O+52-mO&X$@PwVG&8e{+`j4i!QO?)5srE_fDg?Ni1iqBnq;o$s zxMHvvr`2hc&Rc0e!{rn5tG_%|GPc0y1`Ei4y$)oR%Ou(ko6+_Vy=b4{&2FByRx|vS zv{@HpJbtV8wj2RE886kO9*;kvwVoScpnyHjr=ElcE0Kt@Zw^aq{#h zTfp)aHGzffsz>p|3XoAX$sqG%mb{V2Hx}$)Z6vAMr{7b!u@`v}&6HA% zce13NqZl0iIGUC-+1#2+r_0J5=!JJs7??NlMZuKFHI-we+Qf0H7|_TPX-|CPaP}Kd z&@QfA6RYQvclA;OXFbVawBI4`6ogWgAjkZz0~`6~jXD-51R`KA$cAUXaBg(D=hD*| z_z5rn&Dz?N}2N&iT4nC@4cF3jVYYLGdWY3-<^lW z>XY+Id4ttwjGV?eGjE{$0_~0y*qz0VrYei!@&|2WGz0ezmu(H_3{@|`J_VM#QZm0hEFt|sSqHCsJTkSmjHL{y}PU5xs8w&XPspoabSxE4nr zx@#Mv>Qgmq+Yqn09BKm&dpqEhR50;Dw0^+gsbZcEPuyA$r@aHr6EI^K_pH$sea4g0MqZfj;OG*0Cisn`!>BaPk?8nJgZ&
y7RU#j?MXk&UBo}@y~E_n>Rg}XdAU9S9KD1MuX@+b>rgH&Z*Y8f=V{p zg|E59LM6*y)kc`py|+Tn?E>|BlmM&y+2_shbA(0n;TYaWaUc+|VzdUL-cR5waW$A_ z!>Ill(RKoD!(YlrzSclZB~9hgzlNGByj6)BAH!OatwyJ;xPhuf}928rJBogC{qa~^L8=aK;5Zt zC@U;s;PM~HQ_Hb20#u)X8E5MRb@3|Ro2|9Xi5 zI@EOh+WH0O_V}r0+N{k#>^VP=cq7L^S1dEc)0?jZhRW{2oPmqvkXxhk1w~i({&*)h z7IF1m-ZmktHVTp@v)BHnPh@UyTbdb^ppR~!RLR17mUIopHf1@_e`KSvQCp5kM|17$ z4&jBgt7M=TTiDFY(%b&xl~pC?MAG}k60Sbm(Ehkoks<8UZP+R}aa8w=oco%9*vlVY zrCg^&SP&I}(4e0MVz`gaw=2LC2`FX2zEe;72byy1OrMOY9Xktyr2w6BHBc)^*qJPv z*ayo7SLc+c*o_b*6Ckxd*EC;z8W>(osAnf{D4H)|pbzzQrmIoeqhn3UnOymY+ zQ*`>^)U*+Qgymn!53BO73ou1KkN6byRFUPJ_qaI--$1&;D$&{`1#!!Ct$a6 zbVzA!Sk)s}LU#BTYU!gE*8xd%M~=ssrw+?CD*y1Z8SC05hJ$p6Lm%jFIDHQ#6n0B3 zQLaPu0NDwqnZieDIjWEFzcSzi0Xm8agn8kp?-SFH{h3E27Ksx3J_^OiQ;=jNY}a!@0j(s@D?WxrrR|{6}$d{d12bK=i}P#2K82*hOS43F?LMv zrY~v4ofLlYn1vrYj6T-H6o%&aN8QNbwh*}PYS=PpUwVzQ=b`!SHz8c4PBW@hhncy! zVhO{gJ|&vz*IvHgVsb9J?3IDi254nh$4%t*&IU5#`nlDzN{dI5?4~7Vlk`@%D_LzP zoq2gebAQvEIj-^dR*bO{&!}|v2PKEy()V~`b1|gD%Wnez7jnd@beE`nPR;d6Gi+^U z@Vhs-)RiJob6C0WKod|6N9TATaPAq7&dUNMx0Npv-XcWvsFB%}sntp5q{n123rvkPJ1UU!Vu9 zsMm-+bUr*lPs?DoPU1rAMuVdC;(Ij*EMl5z5bmZ}$lY%j?Yp~slT}%IexVMz+5f&2 z!gH=q&(YC^^D+HKD;~nu%8Jen@FsFN;jSbi)#}Zij%}yh5m1XB@JJ;_{8y##j6|*}FkLm4`rH0$Zb++Se=tgz+ z?NO}^@YwFOCpj|`sE8=2plwP{$sk{t0lUOew7yCD-4L0Wrg|pAc4^;@`rC{2$k?Yq zHI*sV&NaQIsnIFnr+S&iQ80nO=$KUed!%$^73Ml9kAYfUY}{W8@D1ORG!Uq+Ta9`l zVLr~39vYPN0w*7NZ$A05oEhdxo&@2O`&r}pvWR<*~w8nUEy8J2j z(}E-O`-o;RbwpwFU}alF;L(OmLaKGlRw`igJ1MRRxnSqi=(R7uQsFO`|G;ul z>{Z>&-+|G5Em-H9K9!Y+Jd0)_*8{vLS>{xZoGvxQxqaQ4@3#)WPBp8rj}PB7hNYOp z#CEaWa5Ob5bO7^BK_g&Q^p*pASH8#DOhTcj@cevVYSm$P=X}qJPzMHR8p7#>tH79G z0=e-w&;}Z19_8L8j?!XvO8VV*wV)E5Ay-Az*@zVaXk}R9VEWqw*a-J+>kn<~Fj(x_ zjx?Evc@(B-6IfW*O%m;VzyCU7zy=$*e!IoZUYeqjyLK@DecbxZcu8HJ_y$T3D!9R+ z?V9ZMK$7-#h@dAc)AfMuBoV`ptVUPjnC{=cz{Z+~(u_&Gm)w5uBTwNg=YqzGuSRYZ zNzfv&c*iKCgAD!S)Ug?wWqLl*s^l1sKK$yhS~9eCj0~)9^mwVg1X1R|sRWet3Kt63 zvx8GUefbT_eth>INC!(#`dUpi{|CC#0eON$p0-uLcRu_XMNgEtzSh<|-2giV$mlIK zFB^_EmVco9K3ph?YB?G&Zzvr^p)tj=11o{3yzRFKr$Fmm52|ycjuzU<4qYLqI;1Pi z1<^WQU__x2T~%u(?+0he{saAC-B|+DFA&^B2cn)JZCIs$TY8-LRBjtrO6Iwi{vCavD(e95pU}?Ym zZo&i=m!vf;Ih+Fxbu*&(tXaTxC-yN0RI_#Wt?nj8<|qDb_H!p-FfgovqRt)^*yNG| zliz<9+A8noqZ7br+GS$6evjI3^X*(DdBWx|{>bC?%p|3GYzpZe+%7Xs0R(5twcoC* zw`SL&=Zu)Y2YZ^4GP^RX5&l!7Ngo5gLPt?DK;A|&ngS6mvJP~F8=e_az-kPBIgRomspn|7hFbH9dtAQQyJhShyhxX z);sCxR8pogF56OXINh72rd&B0L$o%z`DCyv3AHciP|dF{2ANpnwD@v&?w?5%hjSej z9W;I;jw*{f6CFx=zEE{tMbl%nYs6l0sQ3yq@_&x>UO|omD`5a!MAlEU;ZCH zKs&HI1o-a633dmjh-&Yl#%BC6QsGo6T1?E0G#Lp-jxR?TZ)rbpHBTG*v~ZaiNibB( z&6K3tpU|O^-G8vcBOGxvbzvd(J?dLqtd!Cl0Jr=Pg(rOgsajp>O+J1oTb+J>8bWy&9KORMA>^=qx*H0nH z&|HpvKaY|$pt$YC0+H<-0Ld6o-yNqUc#bApe)e*FUJkhYo2JeT^a& zcqhfgrpJbjXy4B~N;hiu7qL$q{6a9syr_t65QWR=hz9)m>$nB`GFj5_Ou@?pDDvdJ z)4ZCDMiDeX6YhjrQuAYEH-0-c`_j-n37kJ!^hnsAZT_?6_0c=GvTYsBT2n);YJDV$0A?e8x=e z(?qe0&_-V`KFh$CHa*kXp7LHy0RsM%yxSfHxG*;X3_&gT&*eTl zgeWyNuy1o;vRL}rKahHi73<)}o$D)-S4Bj#wMQkzZi+Fw#_T)RVi)3FuHPeQQE*gJ zBw|#BZ{@i@4NI>zzHO4Dj_2WajH!7CF=luly>1TsgJKc=Sp6+52S+77Z(4Q3@K%?x z4%=UNSHQJWZKZ+7T@#$vZ#+uPm4v$UU8vG8e<0fvp>|{I6j6BcTUf)czU12Ob<(*CX9o z-@l2N^jKd!d9-I(lo>eS(PFveMO}c@p|J(#n|!>)+L83= zs3yf>F>-O$%1`TC@9f!+HLB!o1x05Oex3L)^>bgMQ9ESFt#%eK_I4lfA#$Ami%YjM z=GFb)$DK=g`!auW&r;^}?qiKou9KB}srEu`eyF?^ncL@fUTrhPx&ZNt^*X`m{KOjP zLE`2UVt0>G`G}Z_ch({)%tnr@mwaQiTYN4-McKX|?@|+nMpL8jHz$+kbsjYu8pm8t zagOuC%=ty-BQfE`IRnkAEkS*4h>vouiXUOy|JmCC5f|~&+1tNky!}ZrL&~#9Wp;)s z?oQMj3RVlXC)ZZBfS~+4WO|cz(aj^Pm?@{3D-z>zqb=0Z1!-BRVzA1`P(wS1TW^*t z8hzLf($%&s{BUtA7KvEopL2AWRO6TGQIAI&F8k|NkuhDl(JLQ7Ts;>XQ8&$k!v)w( zpz~k;fyz=4-=qlf0P*`+;^ z8ut`s;hf!+ri{Z@hsF7<{TcHYq*bNt*mX|{_Fhth3PLhHED%|teGC-`H0ZDy)ZR55 zq9a`vBi;}lhRkVt_Z2V@dq9O;>8&Gm5f>c?tSb(OUAvJl03%v;ArU2VL!B#NXK0_t zZk6+fBk>}u?8`6j^b8~PG=yU{djimh+V5?it7uq49`$P15Nq~7&= z>8}*AMhT`qmm9mQXkSua%xx|w^p)f zuXcL+rATvxuhizUm(N;4r)jg4Q_r47nk#m_ws0CV6O4D54cy!^M@?6|SS9WZE3|hz zL}tCUi1u0H`;w7(TxMlF+|qBl-sx`GI>?ct-_fNe8xuQK8X)oFC@%LU!;kplD(sc- zGhZNwn;RwX#@rJHs!hVh>c8>DTD@)E$cods>uZ!huoP<e}P!9k$ zSdtYGmjIAoLC8C=QA@w&=lKKY{zj#-4s5 zVG-dEBo=tdI$!5>o@7@9pq0L~Z z;4xUA4B0)v3wR{5hwdt44WF?rXyWf-yyM=dTa3uD`9zD0xW-J1Q`W55h-y@#yJ9#RN+%Iu zPQK5efRLD_lniK;pPilV;)V%X3Qq)>xT&BOMgZ!4aXWyXtw(-9v>FBN7zc`e+d}{<#qKFbe2PxEM6_c9 z6M{lF`3B)|z^;l|&ks6K1I!KV;@*JY@g{5m;N^2AMpkkGo?i+~_C@$x`hUAk?LsV3 zTYFcy&(YIV7cG0Z8RL5{ciX7;_AcCFP{%a=0Dw17uLFIw|ECWwmj0a+rccnRrvXzy zzRY6iPb2a&Oun|0Cac*fqty4Ov+&CelxbjoMpSz*QW${FiV`NV!(Fp_(B3)(Bd`rQ_Wdk<(Va=<(CCu6@d+tS|pM>=7KgLVNn1j}2im*MQIb z(07&)W-IV6V33;LS0lan{zOx(hcey}79Kcw`kqNY!{G=X$lE{EV-jS7|0X$Hfg?*CGuB-ubY_YRYqG zVttn9Qa-20ADjz!CT}^$M?*CUk6O7QaoQg37s8JlMZ+a>lM8H+Gk6*4Y&H5m5%gwK zD($9j<@Cb#L>NK;u&8!)ri%JHD&7Z75|&HE2P^yFH0{0}TtA;v4N(4pCMwz1cD$-h zUU*#8GUtc+zFiZOi@tu@37?48x8U(_tD7aiO@HbROLDy;A8&8YT?3|npxS?+#HG#Y ztp(E~an~3hJKA=^FJZbURFlS{YAu%o!mxa+h!7`Jaxle!L|Bm)Q;mgYD==jHmLg2E z$G-?{wlx|drL4>VZjJ8^_4;Uq-8h@5RhMj`6!~R!7!$tVb)*5BUw%7a(&ry2LO45F z516qb-AcU1sx`Ho^u5h$o!)yvCrBaOZkMTCb7z2;4&O#HRCwhz((eA+(2a5Z-icMn z*_U6dluKeT4}S%2A62WmO{ys`WU#*)+=Hw&Ff_ms%62M8NkTR#akMB@udbtYEihm8 zT&O}FiHk>P&HkK0yirJgP2=ac#JePl$Q0;+l~an6S@)s}g%7!?XHhuFGCCyu=^= z`G?3&PEW%8&{it6&BO4~Q}2OyCYR|Kll!WEHlZ4zr53e6D~IWk4$Cs~+SH6@1$VwX z4mU|LN{=1gXlvSRcUQ*5p zsnbpAb}YXQ^*Yelp|MmNvj%IfrHZlW;#gLqmMOG1PCPE^!r8c1uNI86n77dTt%g%QC+_B(!VZp}ou2iSx#*3WV>;+309c&TXxpt*3ARO0pG zgt^D9$YD3mq90pC&B}FO<1*EQF|`Mc-X=gs&4zK1`MWBl+%AWQ4fq+)RybVatFEkQPHS-79+Vx4;9I62vJ7eT zZrOC6Q_YqgdhY>1nZ&-D(0V!HA>WaSgMp4bRhkCnL24>MO!;Ow=Ft)JGo_#7G1txt zuG(BfQ_F^8H}a;i;IQ*VHiHd5FDZJ%!8`d&x_SCH8ud}DeYNVOxP#6>g}~uJxjK9{ z?$&GEWuMEdZ0}!~!p(mC#$b z=&#H?EIRiyv7=}C6zS%P?W|egEm9QAit5+Im*s+WAWWPC`zx>YkP&pXuUeG94kdgx zr9i%6%pxw2)-IQZuY{M=ReX zUawiq{59v(+(&U?S=*}U$^mzW0dODqMO*%@X#&iXdf5UZ+R+y|Z*=m@U$3r9998O< zF@seY+TG$#E1feXEeZx2Y;p^{UYn1sPIJdG`+f8lp9JW`u;k4`qzqG(0mF1?Yh4A+ zH=Cmrmr~#S)<|ilYV&q}S4E}xHAh5?S@OOD)v81uIyy0=OhH(MJr!+nFXcn|esW}5 z$%m&*M&JDmwMo)MonBPDo14F?Ujb&rLf*g>$zDlyBph(5{CoLIiDa1vg@K_R$D%v~ z8X&3V6Q81t5KD7x{z$xl=$`hKKx2=9sS^U?`~*+N9>6HW_{1z{p7mzH39#CRvVbnl z&gQlNdUs~v$a0`T<8aKMQ^9&3K z0fl{)CT;Z(B;3ONSI_#4U;_q_j?_GdXSkUv%KHEZ1KOK=r0picu(}7=&7NoSrYuK& z-sED95gP~$u-E(6txyAoh|u}g=iG+$iuN6<4Xqt+wv8nsHwH77mPD~b#sOthM8zC$0BbZd3#Bz5dHnrk!2goVhc-Fm368^~Q%6<(P z6Nz_>vAs3@PH>{%1=q@T{=O?xn{qQsbx0)2k*udBisxtf^OGm3t#rA#%F8}h?BUT$ z{~MFFdtjWZ=Kp1-08Yzm+Kr+ae!wPTqnH`SpF z90{oBN{?hnZ|OU9h|HqV>&_b}S;X7Er2QsW+9q6?KV0g9m-(#2b9yw+1BgZG9OEpmB`84Too)uyP?-Xa9N+4`Cf)mT0F&3UKU(ZQgrh4i% zA}NXvkiG-~U7FMz@pK);V&NBIuZD}gKd3wO*7KsI^4%sfK1@rE=(wZ1G;w^RIbtZ2 zEnz8U22ZKJ8RT~8wxp0jBONF+CGM~b{e?(R+M-sfhuAHp1AJ7tVxV?_RF&>F8iW~$OOu* zcNAA+S!9s{-96)XHAVE;sPs0}T^!4e`K$euFW47Z2E0R0KhrBMn_@_U^tWYV98~yH z5JyzAR0IPs^Y&9~z*Qu<)ia?^N$z~587B+9)l<*jgz3unOhsuP>o904)SP3|;5~qW zCKov@4kvb#^1s@^HOW7h1EsVv!Z3FdJ6(yr*YlFT4bzTwvfD>MvBGWi z?UqoHWQGr%Z+AHhy$uL0Ab`MqQakWZB4%Yjh|(>`sBRKqaybK#bW)PH1{tu<{M=h$ z#%@gU?0=BQxMcrryaU6P(9^?Xd#{doi@wLWW;!x^cV}u+JW12xg))$CN=B{?$DN?( zGt|2Hi9SDuyX*DEM!G^`5cb;TehcfM)2_%r$%or7i2&| zqF9-x&@wyuSo8*bbo60Se`cuWLReqehU=M*9(M41DPy6@o`O_X0MQ)JyvMw0S;cYEzCNezYui+GOpT}AN1y`51hOk9m|S- zHk`@!VfOT+?;h1VifZ`@<7A99%un47B)2NJc~oke5}&B`b)A<%dJfr#;Xe;=8@JUM z_HTS$E=0Wv6ZqNt@N9yQ zH9MzX5Sy*s66jZ)Inx|5sesybDZue4gL3_h2&WTQG+Mq9biYHsW2Bwj=yPLgIb_se zVe;?voXz*kbbl_2tGc;bI6sN8bdT`(AnUZ=xW!t!MuxIv%^gb!ZPNc(z8~E|5;GA_ z&2_rhw767us@8+5PTb?*M-N3U@Zz4i`y|M?3%4Yx0+3Gm>+P>g$9CYRw_WT{<*4}E z{MC?>7$IMZlyr76DcBu7#_4NWpQcBW?5s!bZcA>xeOQI{V9L~fkh>Niz4l()x2{S1 zxw*H`Kt0s(05F*}@KATnq_8UeIz!5|#3wH$@A<<#8=!wMbncX@NyfA(f@;rQv=o~! zuPhVyIjx*0r>cF)cy5J2XsMP>mwe=tkmB!h3SCw;+ zIGk{&hA@0%4}YPp3A>WzwUVb-H(Cz9TdbvC|1Nsrz?jfeoS^Ko`OG{iw@4o1q#Z9$ zsZuKFNBLGHY`T;}=G@J>Cz6PgUW=DSl*VvIYIJAX<36O$z)nPK4a*gJJcJ%i19%8U zEjXgN=hR@48I`12is)Y-BFf=8#S&!&EZ&Kx2)s~eXI;qBeQduq6=m0RT@{9{1Pp&i z`}vzxb3YKP-~ysiHsLve1?V=3qYdOGHz;w>qt9&d`oCme)Eh?vVN?r`krk*V)R|LZ z;27+>^UqqgmfP=mkiUKyby3*0dr_L_N_Ru~RsMdq3k zETxHo+y9ZT!XK2-F9DuSCD?OMIa2Xo1A8o!0GB%<5J zA44~;@gVxeDxuKNK+EVvywN((mc(UB=Zk-!0ntI~@W8f3hHNallgQMtGJ^~3T~FCx z{}F^|ILB-QYR8o$1ki=!@y$h?h669dBAHPc7EGbTJxjik%{g2t^pURQ5%(|5cJ1yK zQC}IiO1XA~gQzswvsjEYfeTB%tlm-;zTe8Z8NQ3wJN+K{?tlxNx$$<}Pd+Mc#ssOq z4*OOg+KB+!Qg*#*jyrpkCjp)((Do3zlqIe<)<1l5nS9xj*)17{cmgf?=DCj85G+t89e=PVtGUT7u_T8mC}+XL#M_!1|RWK zXcPI2Ctr&9dCiUjwxapAziM>yp!!}PriuLO$pB5T%_dhrvNq6wOI1r1wtn?i-dl_@ z%1XRgxi?5>tRZ1RVa`^^rLQL>-bTk=%o4Xu9$hnfUPMP%C&y&aVk~ISA$4sDLuYK3 zU59r?(r7SvJGE{l1BQZ@hKAtyh7dynAbkWa_h_0UogKI6KR2WczcpX{BLPdrb(sCV zKSj=N6Vj>ZkXoc%*e{7j5qq)>PMhi(|zKA|Rcps0fJkA}z1_(tC~6pdc+25$PeZ0ZNO2fE0=JPUsyX zUAojzgaDyP4?W$p{l0&>I~V8qoeLfa$zD5queE0xYtAuX(*$1Q#A}gp4K_f2zKh@+ zTkebTS`;>a16>a*;Ht^2)){ z1|#R?U(bwf*+~X=zCd#}J#c0ztmTFO95_AsD&T|Tr&mAZNV5-2ItG4X)Vrw4pr3Yh z#ez0}wOC?z3}F`>Zk!R{e=5E<<#+LxfGk$cES{&AmY1>!ekyUgXYn975Ylh{f<-eI zwhrckE57a1rrz^gKbgi*l-oU&l#03eDyzaz)vNTr7Tyozu+j|egnZaq^8DBIxLH*H zl z;HPi{mL5ACXD9tRg)=x;ke3)rB%$s^scEE}X6~=Svoju#?nK`{!bhFj^oBI)6Vs{l zKyOM$%jnRw3b?rTEAwZBH3TemLDRfvK1LEY*UKn>NcUnb48>Gd1i4iYZxybiLI+jD zp27u11qZVX6DcCrl_3@sKzjP4^Thyy>(a7LT7h6@MNYjB|HnOT{vX3lUdIL+C%}&$ z=KhADiJt{Hzare9wZggftjHkd1|)kcSlhC+S)gjq6=R0* zF+kmXwcKP4^*{7Z2aP+7HOX^qaT$pgPbrG7OTJVkatFQJbmMEA`{#kp-EJ#z<;|*z z%Ojn_6s^4_mzgul;oXlk4PSHwNAeD))Fi68Rs5A_37l?j5LEXWYt~U2hF++w-C#KN z8b#Zx;SL>A#xNOW(Yc>OwLbq?D!cIdQk>y8{`hI^SJX!kCq_*QuDJ_}+^H?WMac0S za%nzrG12JvPOlT;j#fOtOn^z^np->ytd1UsPjQ2~#$SeVUjuy;+9$( z0e0yHFKJL1+W=9JJa|tL*ppbBg$^>;N|1$tbPcx-{yg*%Ip5ITPnsqA>9;lwg$99z zrgAy=prIslLUo8Mu!GP}-|4`0%pojkEn55`afvBtdOj zPgtQ<=hUE)@KD&0(!>fhb0;RD#){^tmq&&2e`vF>ciIjjcUZKpZddeCp$BBcNn`!2_P)5Evjny0w1h*!8}WW=kJB& zRH?>9+%0(Um%aAn|M1Uw;4=Qh_zFit?SbNt?tbLX1rkw?NiD*Yaw*N|q!hVu0DHDD zv0y%A?1Ts3$?O;drEwEdHkVwq)}b=-u(%j{)o~;N(Ow`NVWYn-N`c(h3KoSJN}25fwkod)Z^oI^4M)o zC-?QFRKkW$c*OR@H{I1%V=DhN0^@Ah41K8XOuR;J48m2vY3tE;fya1!d1Mrn2L3p> zHr6yD(zi;tOX-fr%SK}TQ-x0qiU1*Fjx)39! z$-9_vNtNY!W70BcUj@iDem9V4W|>Duv}K06Ewe^>OQ@CdR%)15Kn$5w-ZJxcJG*&UIm0N0hdb< z<~UH>x!+B-5~(i8AtrsFRxJr_?oNj$lF2g%d#d1t+;pzC zB;#CgV0_rxL`KSwRv}NL#-JcJE4$M(&I=!dq?S&kGsfdf-THVLJ3{`K@~T6^9Mm;W zsgKR7A5ZUiSmA@^yq3WdQF$uny1vf`uHW z?5%8{EH&`{x%`3u2%|&%+Tk|$ysb#Hj)|Yh0+tzMW?K^byKf5$w$feSjoj!5SQDYG2T<=F#{e(a4{@%tX%fNK7K|WIyn4YN zEA1Nf$c~uT;Whb*_99|pai}|;wWVq_C)w*3_1^R=9G@VYr*^b8ymw*jtg?YN0rcrA zo{HN+ZkZMXxC{`$ymg_$i5(QVNH+_{)uyqnr%%gypUC(2%N$!thT_IQvxt#*lg#=; z0AY1#Q-FSoE?azq0p#dq#h!(g^|-=5`0_4HBtT_bzdI>)6){MEkHZUE%aA_ z^A5$EtST3lOk}0e#wl;ef!C_RUtrf9;@rlUhrR@jKX~x%!d{I?YNsk?R6c^~(LqN3 zqzLCreI~1FzG#E?i^i7sEpqB^TfF8;5tR$_1M;EQ0(wv1J=WH9Rs6;*(eL(L(JG8B zCC;>3ok=7Z*b-Ve-SCTmlnoUfoCU9-#Xn8>=+FKTP=mviTM_w_JII zIlvrn1c+4bP%~_dp~Rwa2QqD=;p)g&Fd~&wGNGQm6Ci`#xY2u3wF)^C7U)vtw5G*hqG z%}Py)5BNuf z&+(kv+WaxtARI8zXs!>X*!lF9Gx(dOKdLjCrv_T76NC>`XGJ`X`SflI8BmDFPysL@ zPAye(l$muGJILJ55G|V=?$26|UtXIl3h?uiu&h4VkN;cK;7YnotiTb#Gga1QDm^zO zPQN~B^6>RJwQ#v5D{SaCoNf1{{++{1{z@V9p{;^Zl1R1z*RX>A`k<`DYH(GJS`j@< zL82WLsuy(GVCmFhj8Z2s7600j!9?RBmY$*hV~2f<60d0u-}nXL_D9V^<9Gfr4WGBc z)2>&XyZ*!_=#!+iX7ITD|QA?Gv7-uhp2hX>EF1;+JH|85&Xkc z(U4Eg2H5q%jAjJ}kEQl+#4?%%r_uYYQ)Zh1 zvdkA#s$CaF?%g_r2y0#dJLVdr=<&eNdZ|YbU73+o0`Rw`SprXyc2*JVJ$0@Dec3=c zY=>o*-gBgAjNyk-=N*=ogpD4mK<#lVgML7F@tT}1?-N9>q5m-1)g`i@M}$}GZ?;W9 zR6Gfb{3FNE-u&5s8r=jTfE2rl(S0dz2e|}XwGgAbII>THP6dLEiJ$EYS=BLC^)*Uv zgR8HH{5;=9(HGu8;Q<#rAGsW#?XA0%Hzo*cou|k4re`B()PT~CvthM%mlEfC33s%f z{o6x$af*rYs0AGJLbBuO)4Q-AC$#hsoKq-MxL@^WEHO~NklIS5{a>n^k3~Sy!Qj8 zU$ySURFku)T%;YFU5W2K)zSA?MiyZ_?eFL6=3!7I7^on35(Kp$veP+A_B?qZR9ma$W# zgo7;uh^I2Nki!S$Y??!gg%sB1R_B%~1AX|Q~2XYlCy zjDpE}pGFMO>kWSJ^%=9^Q}yqssfqM6#-ulks_d2|SD%uAPx;Pc?-)j(1GB|V*PUS z238vBfkpuWTUbw3ll37xT&b+#smc?s3*vX1g4{&Q>_;89>px2udBuaJqeNdz9i+*$ z)iw3T6lv2 zfK~4R?6o;fgos<1s|Sh~d}adPbVmKMv3kdxD=V`<> zZml7u=BY|wllQ3F_4yBOwq$_HFUD;B*O(pNM07}l{vU&+S(`&^1q`s5nz`>{R=0rI zdKW$X)}S)lN8I!Uz?MVlK@X`+(h8KW|GrQw*CfB28ed~4 zP__6#zF1M~d~Q&~tg6`N7qER|G;%_L4#d10BQ}V(t5?*XA-9qYCs1Cx*(G575aOpND>2EzeX878pD2h0Jw0Gz17x$Cvbyd zhQ)O4`JqLz!&Jt(hcAYatsYIFcvKZhvXqtnQiuZS3>w1`uVPOHfp$<&|oUz3V3qN&p`9sC{B7u1CtI&vk^h1PA8$ z405z()|YtZZLQk*uiB^Tut_x7s(@G<)!lSQklD+PI(jrklEiaWf!`*veah`_OY*+T z<%e8+dOJ`byIG_nzX0!A>;BIIJ!o>ct1DNS3XGbawL~)g`n;;R0X%?KAqDkq%1G{6 zX$(G`W|?DEIiTPgVC>baH1?s^^6D`^YpB(E+4N-DFJ|ly6MIntuJTgsV)9w#P+tN z&*ZxZa{uK-8OFT=F0^dd+^YKP^@&Z5&8iEIGY1}ZL+&^M(VtP<$uDz%*;uKm&@(iXiKYviU**^L z?+5#MhLt1dKS`Yj&u6t<1S&{4JKF$AqQnX<;AydX6ih<2gZFs-n8)~@V-$cQIkDRB z$QiG8wd;F{>Z6AWnrCWg#X9k1iz#1uf(7_sFB7PcO~!SY=;Vm}VHzzo+t`Ijs7rgr+h+8905@o z3W)o6<}v6Y5nO6``95|&sQ$Um3zMUC%@$Txbu8V+{3hw;y+2GvF-@m|Bc5Ujdm!qj zStQkF3Q)IM0v`i~p}b_^eM0l+yuj=fTTqNGpHZ%`y<#Ss;J|Sxrv_|L07m-CJ** zuzO_S5O5c&$N}EI!R;`I3bhCA^(x&YHi7;7bcmt!GWW{AT|`KHD?@gfUUttP*$sR* zq8S~^w*r}vqz{EewpjqdT478s^t?5OR-uP`(@u4Gat62qlR(I6%S;-bIr=erjO;!D zjzdN}5lMJSN*Aa>m98S;{vNUB_IM%K8ML0*0teL?pwT2CD_UD&-7SC|^^P9xh5$An zcuGc&xbf1>HK6*Po&~;_GffExomz7&HP8PrnWZP}QxH=YpnWF5^Nomf9fsL5QLY|(sBOm%6oaMa*3z(#Nk70{*^x*6qnb3V zHQ-l(D{YQZ=*JX4ZOr<`_npWRE4*qD*_ya6vs4n0f|yEi1yqbSkkn0Nv;lRI_SoeW@FnX6pVhS)ii>iWpNACp?K!3pyG@MxUp;xCVC5 zY%!n|7ZIw8|ChgaW3&7FCy}AJ^kx_ku>)>8yw7=IL-iT=IHLP*4cf~WVG6K%odz8j zabn$P@1cRQfDjuX`~`mm`Wt6Koq~eRqbu0jJGp_{3bNiQ) zL2TB%EUCc-w)ecTUuSr_!O`&NZv1gR&8W3Y_ivhCt!Pjyp(i%6`z~OwPSIo3W6oQi z&KsEGdn+~MN!Je>kWsye!3=7UuFh1vst z+$5Tb#!1k>qmWQyGH$2h0n7enplNg-)8oV99GxVyf_sGk`oty*d3}K!qngQ+Q7349 zOi01x2dF#i?-IsN&DG&QKJE&#cz3%qG!ZS{@kB+(Ur;0XS%cSmHQD$sH35x=k0smj zV)r~+Ed+u_R&0L7sT7zL7y$lSTQs;X|dokXZ5IBtwP1vqp zcFo>$m|tH^pgc>}40pu6Q`HjPsX?XR3aH1{K$p^waN(yvtr zk&x~~==&{)SA21!kb zN2l7-qDZXQU@M*MF@Mn$>@Q#!{{31pa{M;@2<)kP7uo-4hQW{^jm0u%d7psy*lIvW z%j+Zql1& zKSRmqt%12tZ>PDbCISzzNBA}>b9AA(060i$w7Wgn9K7y8D_ZrYhO99mf9T*CjCXX` z_9N=>E+D!h2BlK4ghyG?`&>2c02!k;aSqT{jtVR=T_{QZI|6P{=!ibtP3tH@?yLh! zp}HU%$3+c(q^orh(E9`3&6*?xOHtjyK5J)4Phr3YLslNLt*RQZrxIN)J^)RDI2UN| zD$uil&7!%0iAEmW$bJJH1E~BUjUFiuNd>!uUxkQqwQop*$GZ(t3(M&&H)C3!0|(j) zSTi0aVvi4zUD;65UAqYMK1UVpHi)1*Nl@wjYu*mNlY(84%b(3}fmuBs0-~t`@Gd;j zXqKY}T(xCLuYvC7A=}$u8DaO>t7%Tq-6AvZ$Smr|BNE~_#h-B{_#fnWH)*VZNEy39 z|7E_{h-`gaWrW|mTKS*JC{_oS82it0rDfdNJbHVgy)i{*w_g&Hz zdCK#?&=d14Y~^(TWO>C2oc46U7%-h@8cEtRVmCaPIyjEow7{Z!pcrUPP13IN_qEI! ze5-6y(nKNK^UG;E(R8sxfq5#{(Iq;kYz8NZKT|j>MEmw)3J^r8=ITZ%zLoR^Y8s#gj zb8UT0Y*Fl5+}qWP(~`|66osSfdAe25TRzl(r)bVenqdI`Vw|)|{`Kis-sGS*bpwaY zSc{k>@hnP^G{Da2)A&aHno-NK!O4~DmqL<1Tz?699k68Ycc*U8W$3GjCjc!U5q=Kj zafLR_d<7^y#*u6YuF0A8;H>kXeq9Naa|#jK#Gh8N2Q~xCB{UiT1QDBsfw*M%_=7_P z-=xzoX6?t$dCkFN{s0mLJ_(21++T4?LZh|?oAl(AV(rMYR@qMU(R~zwx165V#N6n~ zW$~l+uolBa+@PZfj$~y&J3X1-FJX9wBxn4QBT*g@pEbcpH^Wy;e(|wJDn*9O)>iBT zskqz$*)FDN%LJL~#QzUQRP7buvDfbUf52QMy`_J+Rox$DSZb3Znwxb!$>?i6Iop9U zY-@fyP-ZYsJ~Q@EoWt16=l@1i^X1Q;A6vp&)aK@LTRKDidyD9cXW%~n(8786Kmk8* zd+jK!YS+YbobylVCPniN9jBy585!I?G4q3QC-);CwR`s)|4)s(C)z9+yIBKXJG>qo zOgnPeCYOC{YFBCm(*P5oTmN^ARRH1I&%T(V!-P!3&$&I8IdaM!21vWwT)|C9C6x)r zZtj~Dzg{L|WgtevDnYAy{xGTX?dN*rO#Raxl4(f(jsFUA1(MA^O`5)BsmS?GCh*o( zR^zF{3J;LW<#g=@hGV7PWpR(YRLr;~LUd>)NVrWR zYP$5DFJDLu#9Zi&@Lx=Ej-G~4aT8S2T3`&oo-9V*(fm}yqUp5(m4T~`RMnk+?hx9* zmO|-13LY1C07Nd#FS%(jtxJm$`<+C;>S=Cg^p)mqLm^9T)!^XA6UWtC$@>rPNp(7t zf*;z78OO#VEcqT7Z{Q9~YeuH|W<2_8aU;b~0z9>E&$barAJ!2GBTMN7GR|do5R6A!Lf{Gg4_5s+!<5HuuXTE?n7=T7vUKwNIZdoi7QriO z+AFLieQ?5MTjJbZ3z@HZSOU~HX~AXTu8P4O9g&dZkpYRSYRHbD<0hcN4G3V2ADIdH zli2`iWQU5zy;^vUThSZZzxj%wbg?~V28*NX^-7YUqq1ji2*Pg_FsdEZMhNbwq!hXx zaW(vY^^xtP13Hcxho@^&1uCgIz2%krO`vEWcJarT8Ta<_B(Y6F&35D)qzt?O(~TQ7 zmfK~dJ5rVQX2H!+S7htc5>5mUjfY$zG}fdmhy<_;@JNg9&x7jp9`Bg9EtOHgwO=qn z&W1B$*$E_b055`bVO9pfVSsUDKTD2T{O1QM_|1@^4uwnKozc9+ zpY?n)vuN-(zc2I71tRqFR7vy-Uk|zbc&v8mOfcqc-w;)N4c4%(;Q=u-)AcCpEm>|q zcJ$;#DGr_X+&%*zWTsO90_K8)FF=-jeusw4R53gM8Mad49V)jN9lp&#R%mhsE0zW83L;sK}u? zK;ra&15o(?nS-Z$KGUbEC-Dq5hd)dKkoRsN*3*{|rvC`KPZT#7q#D3##+q)`?6SwG z`}j}$e_oA9e^#&8+NrTp%IAJ0$8O~_7vt!<=?t5EW5~gt@_7aj7aeo~AW7*>O?55% z?>qWZY?{*SIX4tclX7HBMTVosuP#n3j=4*jaQw*qT)6BQ&B5NO{4~p%gUo$7@9cMu zRD{(d#hl*naS=`gs|KeS&+i-i7ILC@#VXyn1I?4}=}mC*VK|4i7c9DG^Jm&GW#!nH zf1aAXm)Y>!{!L0i34};~e5|i|KX&=Pw?+9Crg}a{&Zx;>EVIR4Qsqupo+q>F`6*AcgC6|=KiEjC^! zn{wVi)HdN#m1*+c6dSL?aI9Mt_6g9(+}ckUe-VyyIK*`A53;ql6}=bVaG;omks4}b zF7l4(+pXp9RDvzx52!A+Z&hRjCd%(5pB}k?y(WX#|*1A-jW_$f_n+jGILTTl0K63XU{QjL>#kT3;?wwK%-gdiVl8EKG$cJ*?-mgj0%sX>;a&wOZgM)uEL_dH*X;+ zo7cyd)QlLMOb!BKXx1-}6nx$$OhnJl3_*t1oxj*Gjf6f>Jg!NiqU;$zKB~xY&NgKJ zFiUtQ4XHVS0W2&@Nr`89m${YiqvxHt2jbQF777m4mW~y-V!nS`XNBKA!c0kA%9}xO zSwj({TVDN<6Xr2-|~ zyMh-oD@-B}nli-Ij$%nz?$NY88(X=eNa)KHWE_}p>IJwhMMGW7+Iwg}w_y>R!MZ9{ zDDC#Bs zcAW=^yYKn(XK{MU{a7>KhHz}22^6VXSxL#d^XUwy?2EHjyy8_%lU=U;jp{dFxGp)p zmT%#fL@jE(HDq$T;z)sSKr_H)blfCzz7T(6nlLtR}Pj$Y(~u9@i$w)gWne z_ZU+~;LiJkocRo}fqy`AwJX^t6=P+lWdkc!q{TGyVk~=C_crXN=FxaW&$U>_wjn8X z-OXW-*7eE#H7y?j0dGo@>%eWWR=8NuNUPv^%G^t6+yQC}oSOK}JXBd9 zUliL$1kfIzz&eSuJ)B)$-+cl8g(PCq)I>2r3TOq~r+2PbuWRk5Ddwi7EU-Duy2r5l%zYR<)J*vMNK;HNB0bd~Rw z*jTeBZR1i+s*{hu*p%y}c<}#9abg9c=PcMIRz~%!tCNoDqRl`>UET~!pbg~lrKx$d ztJCjGlEtOW@7vF$i)oEDs;p0P#G+(_UGwYZo*jA{|BEHqr3=_jlG7XmpF1iF%T5@$ z>1Piw?_fL?VObyDA2074I2I({GkW$TYkm66p;*GSNNPZVrJ7Y#6oga9;;tt?rTOCb zpev1UWf+4&kW;)%D61pX`v${laeD$u9o`jUJ!Q0_hJE*66B9Fs<3 zoguJA81yQIxz??FOx9f$F3vw(TTeYJd?U(yGq8Fm{4KBnSp+g3X{wt+jWlyXMkUh| z`e2D)LW_R2Iq(<5Yn~=*oc|p-SmL#;YD4^rn$9tfaB4|)a+@N-T#q6X2rXj2VP?zi z^&s@m_I<(_%Sd}$p@)N)k+OOD!hIz~!ql3bfUx05ptSGYmPJx~`Z!TeMzjAA?2z@T zJJ#i;8t*W&!Z+W^c&|*VmH=!Yo@|8a70hm#Z_7$l&Qu=kbuGFLyqUd<9v!KZGN)Ip zk_8#2p_Iy3jT;mJul8uOY1j*l;!sJ*5LJX!?o|2Y$zI)e;Wy9|0d9|3Fns<4A(m8G zQspMsPfuzd&k9y$F-mDA`d>usrwPxrg39dyE;A#pUo7WKiY{&)^M#Nw;>4YZ_L*%J zhbVU2@K8C-*2Qsiuf~nJ76a=!Rlmb^)Jvn4$ohlh_8L5KWz0dPZfzU3f+UG5Y+}5r zP((+I645+Tbi?k^`m~0I|C|-OsOF5|v+xgsU3TF)A#y}O1^2Z$guaO)u@zDnNjG&W zH6CsCaL;cKfq+=B1Zo|XU?p2N`3u~suZ}TyW3#oC4nAN@OzlUw4 ze-y`w+(-!H(ON%unC;yyM*#z755P0t+F>`zgjr33=KG03@JUjo$wxU=dAazZ5jma- zNSwM+>Y3uG*J1ZA^xf6Z&~e_6b8LGl8KNpiQNBHRcO^i}L2^givmtLBEQ^#|<#r!q?d85<2@<*L&Ps(zWpEahJ z+T6LB_q0SucW<=yN9H@@e%R*sOBZAYIDXL%d|0Pac-?kr1r2GS##!Cm^2?@k8Oba# z^FqnEN~y0(CTCiUP_6@V9^S@Ir@ecs0}D=tS@GgeX2t5rF)8budiG1cc^KqVeugNzHy*<}~+}(wK1C?(|4NwDV!u1GVzEEE^0B-^jpchH7wo2Ez zd!u)}lCN#w5oVkf+uE7RCAmUt4BP7Yj@@y}U{F;~;1jYAchha`>gpQuCj}lORq&>( zz~cv28blJmutkC{l#liRbqg-LYm85q;pa2?ZBZqNcgR+k_yN-MXW=d`YQh0=(oAbf zXR&Ist;+^jE9&5VoFKLpcoMZVSK-PGV4A&j_f?^-P`M^&&rLRf%jL&0#-AuRHjL;i zMfzWE3Zf6k_T6)T-&P0T>x%*1gKpCU=h0_!eR+)AWPaw&@(bvX5iQ+7peKnL z2fw#686bA;`W=>k5(H1mkKM>sN&WeUX-Td`dP;XApz3HP9N#+xQ;I@XzPL&?xQfm6E=PN6PL0xs)vwJU z2GI}IgPDhJXB_$h8OGrMj-&nm^gYcWZ&w9sI2qCcHyUZG@>Hfk-pmP1#QkBa18Trj zcai!xtWk@lG=8u1G^}Yjr+^U(eL|`YH_$(ro!U@pFw5O5JoA45kCz_b8 z%z0Bi)>0Nr01{Dq-y)DnS1PRGMyH*8xbw;Ao0o@6T;;Ia8!IsFeNf$VlG*RPrDx5# zR)up`^C8nSRIr?;S)|9m&IRUW1&>xZep-Yq+6#(3^KF~(_)X?*SP)wA{v4;*+5%0< z`1sOofJ817^L?-eeVC+~VgXj`Z;@6<2{o&FFzgbZO^@e#iuO&)I^?-g`_)d=%?kCs ztO@gqA9#?tSP}@96KdZZHa$DS^YxzZDbz^mFZIyEz5C4j7-lYw!A=pj4s5d(g>ODI zJk`Ogn<(K%J~}gdGlJqgFP^@^=fh~jtu#5`*AsPKOXnUjm$`;589Z9m>2O}NnZr0N z_lzE39yV7^=fz~!>wDte(E!{67raq}e7y4H->i(*jiVfsx@H9Umuisk$7dbpZKMRS z@9mI8YvV>xnzNaE@`|94jUJ+Uga)eJzYi?F0Ep_MBYguDw23%t9hlU2$a(l>ZErpm zEYat>?=)=Z{4+%@4q17fjC^hWdBnhanVR+B`aucz{ViGjt7q$C%_A{)Vs$reD;-L2pE~7;M*G;LUoZns zf?bO3u`t?;;oICv~2&j@1ZYzOp*bJ zn?1X@wqOuH$-!vY*F$>f$?##Ma}~C{@xAVuU-u;)d_8##Rf6`Xu|TjipAU3+vU0+& z;7Xe;i4gS(70Y>Q!Rw@UzZX5h#V+pMe9s;>=;liYJimO)P3?ubUih(?0Vy5FC9N@e z;oV)$UEV4cW9K4T(oczgjVU2&-wb-y+OhulNZ-r#bwO587xW^vCItN(zU|w-A(gXP z{`t^a8?H;ky+Ynl8jSQ^n0>a`Zd6@Y)>8SYTeZ4FpQEg7y*PY@S@mHnrvWw(JJZcL zFHXcTE?mqJANqK2y00T~m!o3$exiwhHdlU($wTW8t-mWyYARd$KtF(L6liRkgzimv zQbQ;%%rL4+*s0sEc40iYE<y>tmtI$! zlrMP#U>#5SYX0_Dn>Hh(5?1W()CSB#pJCP98Nq~+ITvg3^WBQ2h29M+G>y3OK3SDf zJ?^5tDcY}5tIHWJ;d$gOhHT&!qqyq@b@MDsX^3jO1qihr_W(1x1GHAq*!$Y;u989) z@E`4j%LQ-j%GX}N1412%t;MebdhRIfO|sove(@c9zV7MEdaxTvbT&NM!RZfE@C6U! z$hX}EGhOE#;%7qUYf8h*X5B++JWZHcgLgqrI^-+oJ_rIuvA|{k=7Z+f!j5UQCpc1 zlxBax1-stsTta+b%5M3zddfs#q%DU$i)EWn3x9bmvqlVkh;EEdEz4uxRjXdFqkF zYqggI-M$Z`rgjE_I`OQL^Hm9#_icsC_ivu`?UHxEgGUlPOAu3+`f}H#nqFS3{jx?Z z{*=b@Q1rsy1ECf%G}|Iwv^swxz@j;=zGU$0fg7In>)&YlJF1GL|W3x|k5E>=U z!8A{L1L!=m)iFD4qm}DSiee|W(*q$-4m;%_Oo6P%>0i}l)Tm+SfanHG*@{Me+_VsQ ztUGe3xSb=DKPLOT^rF^Fy+%uJPesuu0t4wV7HDY8#T4##5^Jk;6*^c=ph{Ta1-|k7 zTDO5=buhU$<_p~O285E9<fY;Wt>+ju=U7v53m!%oA zNq#)fqnuBD@=3677fW-<+11?KDMSpG$(jb@f-WDN)mI{CPS5aYKUwC!uE_jWl5cX? zuEn&Qn|~Tp8D(>OSlN;ymqYuC8CmVv1&0NqS#wN^%&$|rDERV8)fYurs->xW%>|9&`CUJ}})LMAs z86#GD(uGw%Zr5Dq4<1ZDz%=&}sQr3aEQo#+yaKoL1|Qk*Luphb#T1(H6CU0GSNZ;>vB{A*H$*+B?w$OVbak9bh--O}GZaz0&67SZUxN~#(U|A&eA z{}TJ3R>1ErD^R0pMVqK7D|fd;I`odVk`pVbXfw zdlvs=+4Jr?xi7D}c3qc=qOVGomuY8~o1R+IUaGP=}oIg-gVS z5#Hz6Qi{4^E8h1~OxbGG63V@`W>>+u_Wl7GvRCTg8N~l$=opgs^a))*&qvRsS*Xu* zGopx{RwT%{Ha$M;mg4rontQ{hrO2U5&Xw2C`NztYpGy*1ea~`7-KQN4$DVZ%Hf+P& zy)Km&dGl7h+vp6zoqJx{Uck+d6A74)f1Du9!}eRRWy!=)FE9 z6Tl|fhA2z4Dn9}0&y2Z&Cc?2K5Oc}1cWQdJ;0CdQt^jLMZ~xfrx;P0(ctZYflSfUt zQd>`O@;PF^F&{uI*DGs36?^agu3l0TBJO=32n8h|Bs%$pRrpg>qpmp?{k!b$(Vui4 zkV7g0JI}Js=vLV`kzq5_EiNPXUbjSnpc_zk!~lg~BGWRih>@cl4B5vD+W#s`v>lpJ zxe=G>3|1$n1hu3OXTj?TBX!MAli{?D=_cc>Zrv9474_`GbPn%yDQM&ZaX+ts zE|&bVN6>OHKwbkjMAH?#9&{+dV|n+nozG&hjkUr^OS@P?iO)Vi1;n;2cpExbyRTY= zLpn)>LwFOv(hDR5+&jV)dr>J)0*DADXPi)VAmpRHYiUzm*V=9S4^m_CZz#CwBQ;PJ zaW2`z!TCZf%mMc=LV$$Olm5ZnJIKpo zuCu*IWHDu0jK9ffqUTf@UJ|i@~EtDp$ss+>TIF5=H>0S?tLp_qQQpE2_d)0r$%54h}KdVEc2{kln2Qz`ey=pdb>z zAKU0L4Yv{!BUtewDdQ;84R5cGYS;@Y(!h17g_MrWRN_+R8DcOjG168Lv6m}<)ccMO zyZC6gYE*;y3tpkwXQJb!e#idWazwM7vG3TSvbgh)uPvTZ8&-Y{VQoj~oP1!bfaXNg z;N>9AXv?(d?unXL)CmjI_)_xj`^_(kieO_}Kh2k9 z8c0+ia7DoR@gc!hf(7xchtq#7!N}|2A!%ckPfo1s{sD^wENFJ_x^)G7Q<$ zBnaCQ!`lZI4X=nd!RpIX4p={6FWj%vXUlQ1gm~rnVTpQRfV>K~csAGbnKoiDvi9XF z&t(SZ5qe9Gs^;o2pIh%MP}0x?a~Tm~1JK3EW%51P^TEcTMh1x3jpFa@25rU-%eGLF z$z&DTF4gGkqkM9|LBz;!UUki?BB+J@v5?M#H7L{4&^WSusvYShKhy}&zU4`Jex>5P z^Kg)-Rmsc^X_E?_Ix4!ej7m2qWo#ytg5s(Tc- zj1X;hY^Y8oPj+>joTKh}&}rw`TaPKYUubs5*~xCAk42(#fWM~8rrN_bXz-_{-41)( zKrhTZ0@m^1eHjVs*zklll-k~Jz0F9F2!~&z;6GN)NaoQ+x9`RT*_REirH`*kECfu_ zJ84CkB+xu+3mh5ruNZITz4}uE=gFF*JCLpwQfO$ac?Y(f2V4)`SBnpSfrR!GNnkQr zv3qISkO($v;q#~@1ur!EML&B|)o7nzD72&wy5+yF-E+8RH3}tvYJivCIx`4>2fg2x zir5mE_TTInH9XF6<+|W#t*a`}BOGVkA*p^&)7r{^s(TMZu(<<`?($K&En-$fD`r(YPb7~VQ*J(5}7qLmr%m2k^FgVuFY-JCil z992^!m`Pznc7`dR(uq==ISYp5y;H*W$Q2x zCezsL%S`riz;MnLUhGNTQ!-qinm(DtH0m6kRwhIuHp!0T^oD?gD*2T9toIu_j2RfU zT~!B6pQ?)>@kt|F$~fZ8NjVew-F*v?sI6lz2~JM!AwZ$ZnbFU0 z)j7=09N6*ZP%8SpL8rXe_$=yVzrk;o|KqZTt>ddQRR(=Up3KpcCTa~G!!)u3vOg;Y zmiAhEDCfA!mV7Spmu#V8BtHdbhP4r&jV9Kd@m9;is^`u?JN!S(uq1?OEmOaUk%#+aQ|+M9`~Hli+w$Pab4SvXgK?*tTy&n-&0A*)8o(y((+9<5 zLMy(_d(QWky;=>PLnv3UtC?weB%4)^G_V;dRND6NSESJY7rgO*`}}2PEb%DqqK#Cv z8yADQ(S1w~MKPlQrN#sFwA%{Ao8+vwIk#u>Gq|8v9|6Sbbv!u?!yc(=5(oJ;D<5tm zI)UNis2OdF+u~e})Nc2a9m>%?oOMVYJKi?~#q-=>^joyu4N!1ykVy(n zY~GJOkdizJ3Ho|2PfSTruUvseC|!swvI+M67Z_UdkHQ{^Y}14Oqp(OmH8})@PZVg; z!cIUQ`%bjy`i=xh%B~tep7UA%QK_KW2R_Y z7&8+KkQS9Y6}GGb7Q-MF=%do54v;j{o&_l4Z671VF|m6CD1r~6Skj)X)}u^sz_*pxq%po}0pQCeXa zeqITPVI-cobemkQll2U9=tjO&8wR^wR=wH0q8u0xSsl3lI;XmO^Y&u#>uHQ%oBM1c zQ1OEN=i{2B)T+OF{qA;@Na5M(okICYMUSTtJU{>FS6|5Ad$p#xd94`C1e5&{>{-Oc zb8XLz!#6yYhg;v@ME&PX$Kv&-q)tYIErXq+7lGKfOFD@V--7IY!8Wwx;5%bFSf?;H zT!p9RM7*b@1*t`JoBuA;{J>03k^2!(H7KGospYj57mk?&6al23&}r^keZ{Y zdzKa(uJO`RJD6GIk2ZT|q50;>Lz22!uR|~QPTmTUwY2)$uY~-<1SgNot?p8er4CPB zK>cc!?Z(sv(jlV#vhx2?I2tNDmS)4SI)6q5qe0H^DzM?Ed64nk7xklNj*=(M6l<~; z#mmUp;E3I36Dz5NuvDt>qQZnMNl_1j}!l|wJ2U*uG9TwW!aPts=*3;egP(VU& z`R_h6Uifr`W!{`C=MDLZ7sMzlW^iX$dhoj_oc};61u#I@&_r$iI+|Wjv^;N25a8*c zYTiE~g#IkpdX9pRx)+*ocH4#19do%VuI0iZi|?%S-H+iW#XHQ0h~<>CtWT%*V|7Ig z%cTVcdZb@~LZmxY?dwHJlev5wb|QI^P~-a6JUmcU_M2btgQSfi25QQpGM+r@JZ54P zYXXOiC%c*{;dckumq%?L!|Ww9SX*pN<1q-cCpPON}BTk<|c%&tuS#9*xxe5{}{k^qc z5{?y)-2$PKQ?+` z%xdS+VU@6PT~q_>-BGcpAu3%dCFEzMPLqVhD8(0zD7-?+4uTNW^jF5kc&D279l0$c zr}4GeN|YbXbtcK@&!mjBxvsva=KP49%3rBV86uSZPWNq2MxK)5TJ0hulSR_%*D5Rg zhWs3;6z@nW(oSV_dYqV$PnjnrT50#TAIRQM>MvO;3%$sWdLRF*r$UM4Mg6PG(hcCc z+yue&=&YMCmh;v#p5%PXi|_XfKj%nxqo9T#dg7x4qq}NCm=I;q=mYkDe=OH^9M z_-*>y-kp__UT#Os-)+t#U*B2~K`@i2<`~4x*o@h{9|t^8pb)(_w7kp|oqwTLy+rjU zZUth3XyGQ^O$8?3Z@dbgNB?!;;cc#SDQcuUzr$0f@U@XA@vzA#($qQYmPz5~lFiZN zMQrhWphyS)Doya@NH9F20MsH)NG1qZktc{4DF3tJd(~ByB3IUL-FcOXZhs~yaJ(i< zpdV{y{2VBszs34ethqGJ?cT`1w5TITk{FRfFRs(%5ag;31g4ulxbq zuA1{z1r?@P#bYe4#t*n=5e4Tk5x;D1;R2QL0_AnCv8j54FBwbcMewtivdR4{C*S6l zBQE1)xZ|7PbLt8qCSwQ33Q7 zLoY!|9*Gv~gJ^poK}DOK=X?H?WIv1&BiWA!YPfJkUCkA~&C|;vn0GE?a;eY}Vc%?P z5b~mK>Ef#fsL&h`B3G@RG-ka3=B?O?DHp8Jx?ugQC1*LJ7CEC3-}XYVN$ANUM}Pz?Ilzp$B8Red(#W$|fDFdfF8u zDf+Wq&w*@M6F63CXUGMy1$+a9PZ4@UrPb`?+k}%_h;fBpgw6>z)JnN#|6K~5@3USR z2YLPq%qME__q8KrCvl6~g!!@IPgX&A*rpZh>UZa>az=Q=7csT=bxuQW>GSrH9b>Qg zYQ^}4qrC+$H|@1Us&3bs(A6~FF&NR5F9XK@JRsqvV{mw~S#j}@c73BvUI60{Rgrnm z+3Ow3Do?+$y38%)Ey9uMuo7UguOOt8y|<6SkMAqHF+pqK?^JeXa~Q68G_008!r1x0 zBpvfdcBUCYYcG!a`8K-ujtcW$(0u3gR6y3W?(g1=w>m`l0uD4PQX4mhJ@iiF6G?Dx z8p+k4ce^@QD$uAQ&0p#w%7NlQsuh(9)$2YR9{`mv>-sGGP91b>$9^!m9&@?;}h^9YOk+Y5#zK&zGYdH;6)Lg=sZ70 zpYg>jCVMV*Tjfrkd8bPK!l^C)n&II+_qQTeD#cs5`UC3(7wQg?fSlGwQ`VRD`~}@5 zB2VuJ%_#BadhxK9$wgJ89F}+k%Bl0#EH%DmT9kLfja)w;k$}EyX?mu}*>$6@@wT*t z&QPo*^(^Gu;cGKbyELCMo@ykQT{3dPOe1|X>W1|535s3JnweQ(z%u)JT?C4(e|oO5W7woD~+~4G|spS@}9T&i&~Jwe0>Hi3RzG6>^^PqOS!Dm+3F|PxxZ;iIJEa?@JuVJo)++uf)9k!+ z#*4)Ts*TglLI`^2&k&!V_+gl7VVq|A4f;P%0HI$#C}61h3BB>@k~Yi1;YoNg+w)1a zFvS9!@#AMWU)-M3+J)nPB$;z5BPP;|ACqe+j(yhxH{S+JxiiTxYA{pJ0OQ>}fO}g0 zRU>0;Wj;<6Z>bK;d-bINx`mqTP0;0ylzsMX2i0KN9xs2KjXQ6uk^8lxZ_#zoeN^-v z7SEpTY!AJ2wRx!pQIQwY1U{#SwJpAyB2>F9&e2(!t6%+AgKy65^L%I`z8q%E-t|XS z*+fM3qGR|$rlwc))o=FvwSr|O{eqqH#ykwDVg3Y{=B=wqYI0p#&tt=wvHIOJ8HtjW z-<+#PdG3{eI68}L`~izpy}FWfF5BFj8LB_0bEMj3c%cVS4{F~2JQr(pHLj{wISGFm z@@tnZ+NQAHIJ`S*>6$fFje*BF^b06aA1>y&RXb2^4Zf!vQw-wxdjk+O+t~i$LA@y8 zz=BVWE#*2A>w2Fm1sJ17PZa!YCU#UF1NR-i5i%3b)Dgi@tta2j$e-LJ+aECwo={$20w^_5woVZ7mJ6W8rtah2hk!T>H+ZiG3PC#xB6=zpO9 zp)2bClzQQI`WXjlkzFwQJ$4M$3`|}o1E0io&eh;1T6>p?T5V>=@i(}_mmdcGGO}u0 zOJ7Cl4U1(rG)F25n7(=YI!E;CG^1fh5O8g?CIcYpf@2Roz&1KX&Rap!5>9Cw{kqXHO1;X?SZm_X|(ph{Es@Lufg z7HEt-=7&PN*>#n5*gb-)G8MWEM`)Ii&SO2sMs<-J)FJ{lwcHmCUl{$5<0b;0g&7iO zhjoE9gZ+kyyfFBwfas&lX1eM#LB`>N@IIl1`sr6Ix3{N;2nf&m)73Xluk01?!SW`z zfd7D7_dfOFw<2j^V0jJo!&S+V#P@8yjNj_%!WZbm18L?JWM&VKy*Q7k6c%b58n z&<|XzPNQ#8xo>jovt6YM9K)nwBceUJI=OccA=}QBH$g7g5T^6k1my8_jbN<`D2yc z_whxKJob_JV4ucX6W5HSUX%B64cRmamNF(T>q)an-@gYV0>PL%U`dXc4^!gu+C<;3 z)(mC8UsXQr!j$pYp}k^Y+awdcz7%_k{0hHM^yX~)>$JA*VWk0ozhOKkv=qASd`R^n zkDgD_gpZ-%%Qa;b7WjCw<1D5evu>CE^bXha%59B5b!qm|@@pzEIKV4l^ZC5*qG;Q@ z&bfkbAkp_wUUB*v;Gw{Kzt%eHOnbNM(GBUT7mVZR3EgLQsIlrx2Sw(XYg3-DT&a=B z?#zIs(m68Cy`>V7g)AVxXOU2X6h?iU<*pn49nN^X1v8%Lq<&)hysgCGBBBbmt;XwA zt5d*fVI^Gfgr=ep*e_89&NM@T4giq1abe~m#Cvk}_N(Emc)b}r1!hoFuO_Ii*b z0VbF5cG62xLFf)D6~@knpxY@%VA9dcOC)!ZWMU>Qu?IIR^ynBc_>b>Q7d}9O|B~Mo z$P0U%lASkI+_F(wi;8#7Rbpz`{3wIJe_1>J)x5N*6;e`6(xQVue@*Tio>-1vo@@ng zI^-J4TkQ50+&(z^mEiwnP=h)A|8|b@f5*GA$$P+<^*{21YBIlN1SPQi%mz?3aqRz7 zBcE+yI70WQPYS*je;Thnp1^}*bXQHW8y`tqtBfqAy=x@s1|n+MwJbdVD3_6)S@_d? zUWQ3A+@?XoomRF=7IO`dH-=!fNf8Nf-IU4dg%h+f7P^LKx>y2v{#i^O9YivZtwTj# zBujDdHMbrYCLg*v$Muv&iw+cPis_`@Njyv~@IM8&=EPeGmyFa$k3Y33I3z|!_O*|~ z@r7gd^v2aUfrwjg5pbey){zx0Qk# zz1FOB?idWS(+3a#<@gJxaa4K>aGWfro#N?sS&CL#0Rx3grz!7?#FJ`;WB}k$a;Vk| z!ML^W^J{uetUaxUf(Q3xlP95WGJR@<(Jlz4cFFPzs{VcgFG<(M<^8BLeb=Ygz;)P9 zPzC?za>4Ahh10FmliB}{B%Q+Xr`dgxxg`YJ)$vEvTf zfv%bH_V2Bezy||h0eq~|s|}}Tf@(9W>j8#Uc5tgKofU5eVtd}b7R=aB=(c=c%2wx2 zJ+|3FJFf^pS6(<3-A}A{ZwWj9m2Ufd>F=33fvq+ceAQ|E&NXP%L2e|ezxp->_y=|q zI+q>tQVcB@@DBC(A`{MU6)00RBBr02oa75e`|JM&yOILCzZiU+zoDh}t2tQbBCn}2 zsB(iNs*K-l@5Vk9uP@$(udWoX-Y6eiuvj8Wk&Tz%Wk1BSb-GKaF1blLw1YNb#jr}y1 zrZ%JkPVC<>3OrK1tO}Au(gqKeOqnuoOnY^B7(;kTQb=H0%qZekeADY6MeJB&*3PAc z*PLEXW%(FTBQP?IDCMYsr;6w;2*Q$Lr(P3G2_?ME+?{DobcL_keCEANcEkrIlj!nP zFGL24;VQ6K@pHHuXl%-~^l9{1H4?K&!)HMZ*6ZGDMiWyHJlL%i0aN{d2a9_d>zj%^8ZoUmTSL{Zxy$0lE?X(PH*g+_s7o z@^|Zyd{mVQWH+a@4-DB|J1W6}r-}eoCQ5>9z2EhRoW=9fKl5~*Hq+MxD937JO`^@t zA0XyM7faHtc`~O!{;Kc^yJl5sbAJoY6jPV2Eh|~-9h?0FP9pHypDPB8zRdfv)Ji>6 z*rhW1nFpWdxin}nC5LDE$;T^f=8(|!gYecu;&`>Otlml(OmqoMSzM|VRf=l_P&_-c z%Fi8*dF7Utwg38O9&f=D1v6>g5&Ic{8msPJmq8%>@^gVw>dNiuy%~M?hz11O? z>qjf1#22dYLdfXpBYoya6bu*o+V`7jUW;zN{Z^=EX#;g4XoVj>8*1&jVKQXa4Ac}U z`|SIB1l{V2nsu?spRrn;uLrehbe4Antd~^mxsHFMvZ{hsRL{op!o?1iOZ_E#ZAxsg zoDa@(-IaLIF$fcb4jm7@tS;I8FL{E@e+_N#PWj%K{+kH`4dZiD6-We!rGs&gsh_o1 z*78c8qz%HK+oKqD;_q1lsvXXE&%|o^agoDQ(pi&tDjrwuqvc>&|5&lU^uTHV(T$`> z#PezUJK$d8h?Pa3lEl(*D$+sXUE~%IF`4M;r&<6w^<7rXDKqPHQ|^aq%+!j`3CHTD zFVSvoe7Ii1iN0#-kjyFDwOgFqxnLWPcKYhhU@F-z{Fp3RH@^VO+fh!~?)yliTT4~@ zeZt6S8jJg&l#Y+BZkoLn*JciBHh_#gN-2L8^$_J+BMr%y85*jGR<+TO-r{oZJb7vD!wfr zSuRg@TCSh4$dyg&6qZ{`3#%<0y3i)zeyX)ol~I|wmyJ~inreDPA7 z?mlHpr(DM^i>Ss6&p!8Ro_m8~$_;L*F3^%xLX0?}d<9|qw}97vU?+Q0tP0)QNVZc} zew}AJA1R+?SvS$_Ne$|)-?4m`ytHMm%l0O%ZD1JJ$}jbLwn@#MjiRg3!j+G^oq1*? zdQIgdtVz{xvDtO*`LLKkGYa)ZgNi9GRTHyJK@qPHJUmi2R`=z@tQ(=UaoobwnmW3o z{?6kZ{<_`#117zteuvBqkEf*+k&&$nn>{Lc9h{X#0VF_BOuVUa3xzrv<5mnP$y*5^ zU*(Mq)STr{Wr^*0zol%X_UhW+-F(4hd#@y))5mYAuLV;GA&18A*PI5@L)&q4zefiv zy^KrSx!L`IZx9J_ASb3*TZ;)rm9w1yw70e{5@6m2db_6x(&wV{D&$f6%P;z$2(Os=5C+}0o zjn&OX+1p2!yhf}|-4zLFF^zQ*beoxdG_#S~M(ix&jSvIxU&O0{Zb6E5O(AEKyq`*n zp<5u1>Jq^AmwK8B7FRe79%OpO_($lr$xXM!Q_LF;uLJe6i`})cBLj_Rt^YrO*{^y3 zzw+ul6~ltl@(c`GZS;`mC%`_GMvTjmjW#*{QFJu=-Tg;l8d~omRTDb0;}LIlaNm zmKwesHDkYqRW|}H@Oy2Tj{$ojw zq=Veg3{wjI)h9;bUDMZ8G9B$Nid7yj@kWNV``2VFSehF)v+Q@(n(5HKeEV!Mh7{g& z$GZHtX>>VN&7!vI`+awtXX-l z=uFfwN z!Fyps+OUaI^-IHov>R3$1td700abf*#^T91>(J@J^qqJ`PSvtv=2zD4g%l^HS#MmJ z7J8W;G>(jBTEnp=sclsc2BZ%arfOymp_@5x&E>*Wn6QnrZOq&8FZqHZb+3 z0*M}6W+&XW(RZT&cW@q=IW=mM`09wAeaoU4#C1}4E{TdwKFKU z;>-;+H{3!tN-wJjGN_U?(0W7v>*VPluE?)4$B%n@n00_SBPK-PIs{t2!_WVvSonmQ0L=!3n9OiZ2vQl!0BJg-ZTnC z?Vnu;&h0AC(clE=o`e`-sm3j73iD=--VAg1!*;Sda79<$?t^HPR0<9SIpM*5!0exi z_t=enGH9)U zM;Pc1rO#8g+_37VNlza;m9q#qe*^kECs@{i){cG9qDnDQ$!GyJ+w ztn|7ng5y9LG-W&_H$BTadif?}H-i1o9*K)=RAP7ja>Jvox=9i#KBRBFdY@;mE%i{? zeZVH@0lJx|nn$#!VFUs+p!}nE8{SlZwomF*j+`DuvfQj+NM2Q;|J7uLBjoRsSjC4N z)PywFvnAyQ_da6b-%I*I1oXaa6J&!!E1J2+o2gTC?~pj2Wgc>PzqmkpxDEgA<;;vj z=8AQ3MYgNak`LHp$Lwq1Zex}&exB7#twhb54Gv_d2vvJndbbizDw~v>t50s2E zvJ=185bXHfRlC;;NJW^t7d2$&G7U@L7crhvw!@GWZeaO1R(VlHzPXL#jkZ-!M`rx) zDO3aIF*GY#jH||D-^i;zhKtXCHjA_Y6hE!f$6g=mQz|n}OW|*@Zo^~M+p-UC?nE)e zK2CWYEZaxh)M)8{9#1fZk7UtSj~i9uSL1P=0=q`qiwTFh?#s`9Iifb~^QEsN!g0Fwlg zc5`{a#(R8Fp4hTAORXP=V!e^|Biu$XF>sUVOXyE1aiZH@WOyJb-vKIp+ZYwyTKdN}M8F#tT#LMmc4{3=%}F!k z#nx?p@wQA=K$J_NdpVE_|0o1Wgj}d2n+T})U_o>63-wS#8e?ecYRST+ET^j4;v!pw z)aRJE$tBABS_-FH)a27&*tRLV=!dggsZ~Bco{Bj7-?&EH7f>UcvXQ6S`Pc31i;b!o z4LojA(`(}Vk^G15<|``mJkvKAf*Q|E%1O5`J_B#(H!N3A@WpV|siLD@TvyEH(xp}X ze-sTLBQHjShHhb!Q%@Kt|4}T|{wabmY6}M6$B(yTIi|Wk;5NqY_i%pW+cWeQCNHqE zi*tw~uXy!)L8_^DnioKHL>k1^b%TiN(2iU}#zItz=zC5L6H%94*WXgu0I3?I)Dc`! zE#C*|Slf!LJD~!aj0U5TU5f?LE6I1w{!u{2^0JBi1OySZpW3<9Rs*NSQ+K#Um^_r) z)KVXh$xK`r{LszaPw03kpBQ$Bt?~oL+1_&;5U#KV+U?galcdRGO7FgN?V7?|Ld@P}M2i+#D3E{5n~iiY=qJ%cJ54i4TNy;J+CeOiwy?zR)NMU`7T#R*sJ zYpMQ`YHSpQ$0d7ABB!aMHvZl#J6fI{ zT*MN00=fjA56i<8?dQ$&w!5(`Dx|fNSw?nuGW_nUyAD2$$yAIt;u#XM3d{QS(LKanZ{ufBbLdf^+OZRq#WrouNwr4QS-*YqY-e2>m@V+Eey)pfA;>6a z`S|Yg^Ve;qdmj~}sts|4J2SInGqawV26L!mxz&J5dW3`TlggtRs(S zO39nhr=$1W9;V#*!@EpZ^i^67ZbyFT(L-G8IE0P2k8^z6q|`p(n~?wf(r3@Llz2YS zk@7v>bj+#Osk^G>uG}Nh3La{;dbP0q-&g^a~@lmN6JRy9S;l%?-zd| zeG-p-YId4gYOI2uNG9&d%_Ju7oN=49#K7A$@H~0Y{8_}i4x}Til9JQYn+@;dcP?xG z5$shETE6_GYsR0`Baj9!)wZH%Z*SvJd7Yua!;eY{7Jc+ZuaPdJ#j-s%Sdh70qqgrQ z?vt%6#xgHB4skeCT&1LW9|!d>X->Us$K&QQ@%d>NxOh!*jwtciPn z%H|@<>ROhwcI6SEI8uG&4y%&#BU}#!P0|(h1Yue=w_;r*F2yZYSh$w}Iak*!~mm z1}9YAn#L0$(L_u{QOK{8goFy*c1K|1)Yd9OJBZi4=dMFo_(kLO^wj-qAw-tU9B1+sPHf$jZa<-PG<^|CJZ+IkIu z+nbi+zer%ew@k4tp$hFE?!2klku=bMeZc3k5?OW%CPMg)m;XRwLc)AHoCnetbqyV1 z0*CUq6_zPld~JQNq87YVc`(ZZ-8@QSrVLSA8cw<{wDQ;fSW{eDmpuBFEZTVKSmUQ^YInPv9w7E1cAvx@A9sgja#V@oib#F;w~!P_KP<) zw3FFoZ>^cHj*El)=`sRFB-fP^v9mEK*U=+pOe~p;sotCI5K!9VNWy7>+C* z3KB;&V7vD>_8m6Ujm$Y`(fC#lz?C|EC7S2+p1va?Dk0i&kqCyv{&Ba{)wzWyBz>X} zP)PGa()Gy9c_P9>rv)h1xnMGIsJ&G6{T>ofMFWz|@nIWG7Q@Qg`4iwGU*ke%<{pnj zap91p&-`uxx$Y3SS4_X)K!~%>&C_+)qM7f>&+M{eENvke&#D}cGr|tmC(y{)(lO1 z+lWLTiKQTk9us4`#IR(^J1D!>=o6~_M*{DURHCRmS$xMs{bY+wE#hB9y#^*WUWG>9v8Ao$Svi z29>mek&;u|GcI{$*o&i}%AsEzVV@bOQj^N1j)cDmJUS6n)&}G&61jRmWF|WRvg^Hf zWdnZ@Mb;p{J3S{V4E1blbNl(WgKsQ~-Ek|1f|)62Cp@F$u*P<)o7MX(%c&OrafEE) zVtUbKO-{aBRTOHw`qI&HtxdC*?{+EVnet1N- zcPMGwe#sbm*3l3@$|;zuZpYBAmX*jEgw_eFZg+orp71`aE%Q^7?vjd~k7jQ3Z8{rO z5NIgpS|laW-(ZE3>}9+?HCnoI!9y^6g7{CHRfU;U9-( z75`AKLVnLXvXSQeKU^_Y$!<^#wh3-x%K9yQQ7P`(vBi69uC zuMJmUk@vK$$pK=M>a0B7uSmIxabA}l_KJl=w)AK%*IK!ycg{2j6DNLNBDPn01DmA~ zpw_B99(x-_ot`yXE??Jk!yQnlmthCAkg=h*(4Dh@i?_2`*{HH6%xy2YqWoEd=Grk56Trl>%thnhv5!5+`d+#n%I!Aqs$e}Vzyl&T%7zd?T54rx%#cD zw1t$*xufCqDM@gIP%?_wOtydDSIhJ@`m&lQh>M5b7=_Qw@_bFT#ewAWdv1iwoS1*V z7;9RZGiw>S_Z!L*lB8$oXyMw%vNfCgjo-gUdM$gRpf<(j zMD!w*t=)YqHC#W~>r@H$Wx?@CKuu(7X=XbS#-_z#j5S{avb>#1uZNPuO4!KXXpNQE86|iA0$`R*evBCrp_N}Hd2Xy?+%n} z*~s1&x&V`>HacSys~I}A&AWgTZ2RQgD9{YQ*TF6QxExQ&&XxNqntXY!=VmFlfbVDIz=_|unt^32rSaXM#=gbZTdA~@nR z%m>>c<~Kjbh_jenzlK}XcCk;iOE_@}8N6T7v-ap zZs$*)F$^BeT`8F}LUwgr)F7a$@3t)Qm|&8kUoNnipbxxL7^5_RYb)nuQ+dpra`#@} zHVB6M{1z^DEbcgCglZRrL{%0Y62L(!A38%RB)NOpA63cMM zN_Qy)z{#Dap&a=&>?q>&wkHOpBUfcW^blg^VRv~={HlJQs~mD9lX?*v#Tr>;{LB9= za3F-Xq=IsTyEjuLX)*zXa$*By#4R z_eq~JsBYDw(=>?zd7ZWKkMmki-dg5~#Wr2a>a2-nsao(a9Xtn2g~a<(?S|1MU}Fy+ z79v0Ww_nh1)I{4as;Lj;z_H{=?-_{}mH-RUge4I-c6QK$DdL8jY*4jr&0t_JY=Sh- zAlJx{&M;@zz3$HPyRo6ng!j;!j?994 zuY3+b+Q4={LCM1BKSHUVt3$h|(@pcv8y9~c+O3ptYP}go>mW$1f{T@o2 zEucQdt8YS!I&XC@6>8pinbwr^tF%gICkJ8YVPziOwlAhqE0HUl;E~6vDV0#2c%)qg zcb>!0Xz<4O4GGQgvrw;=Q%bWq0&`srceS_e+KX`(&y>w2%G0V2?yLRsAdSuK>B(yFja&s%g}f z@tnlR19Z+gAF*0fO0nq|TCx|Hz!6gRexjB@u7-y-ny_>Vuf1mf*MA-=aUNoL95FAb z6MVtw`a{yY?x6$Wlx?F?>?C3vM&;?zZ}4CxX_ig=8DDIe>Z!^FeE`6m{p1(uP^$%v z3ndE~z0hKb?g+=6cv7%)-BjRbFHXJ)Ba50_75nlss@T!_S@xwqAEGimh9{| zvW?7NtG6Z7X{aL5yoZW&^lMBeNi0Y*ZSpCPO*YZ<1adPdY1T1`i(06$rhMCpvsulY z_S7Xu+a^`+!OAz~ULUq&|C%cN$xFVlz9^Tt6Z zf50potS_n>7$dT04rQ`6nhZI4>(m@tdaak#QZ|Au4KVX7oUO%>3pDE~S4EE`-Y4-o z(zHA1L`xPFx+~U>kn)p~c1|F&(b1jT;)A=+UfpzbyFD({S6E}6!YJtWD4Q}XKl5IaICOexiXC0?oAP`zV`at?%b`bZ{}3I2Bg=u z6iP$FvjKOj&{`5B6SbqpMc*;N%L0EI$7I#=wsEr8@ct z7ziuv@+5kia=;6sT1+=eb4yyK9BY#eKqxLXg4*gLX|M@`ih> zmA8KnR2qFEi5}1g@0VXFFQ{=Zz|>hIef4v4YBn4?;9^-X*T)SuDrvhTb66ng#I$H( z(l(exbt{#up(Y0#T3WR4M6knt8l?oPm(DpAPYygCXS@&p?nEv^JGyac?BfXL#H>Zm zi1;yX-d6wIVV(JJQ7-8}Bq`HfMTW=FNpVpK4l&dNn0;HBTtwdbi52hQkHO({Sz{py zx%+Cve4S<{ys*sUGkaR~lb2b?jiCGZ%X!T@Sw-h1Wcw`IZpJI+#8*)&G1K;^qwh|q zYu%hGoz)+Ys!O{LD4UFWNgoDSY`o8+ZOeE3+c*5I2v5FVMDv>WH zel6JewnA>m&Rya`TI3f#Q_vg)2f%^!D547J3o|k?u;0Y_SYkvrIHfE)~_j6uL z>o2V8Z(n)pr|Kl1oaz{#{P334F83qCZyPt_FkQ|IyMD^@gi`S8tRJF{k#bJ<`Ee0P z9_jP_Ge9+le4X^)DUi1lpME*`h+c9vPV~~AK3A%d<@QhbTMQdFc<2NB%Cc9gO4Hd$ zh+Miax26(@J;l@1|& zaNu?!=zb^{v{-*yz87ucC>U2Iv(J;9=Xhq3>RRAjE9uk_YKeYzhhvA#IKQ|= zsoYZ_;7Rw*{h+bWSGv+GJqysa72)$qDB-cZz^SC4s=ZfC>b~Y!7gf=v?^7QX9#Q;F zM;vd^aKL_~Qn+&dqZrjR%b1F!po&$?{8nM{Y@>DsrwyDL`iAtYl?gTk_ard^k6Wl4#0;NE3EmkB@w79!F1S!D@?oNP^b93(f z7ryt0&15Fooz2W{_IaPrBUQfwEjDR2u+0uK84BU4S(S<}zF+-lRg6QgdC!wkHJox9 z`~rxG?hl`LMud->{#1JhK|F9ziGDhO{OCyPDpv=Q9NjH@)jceYm8zthdkuIZGWk!zZeBk|t@;%i$r4{dopTm;`-6`8$@JTw4$vmP)Y$Z~2XT?q_fl6`%E02OXV{Wpi{9W7FDv+A z)%f9KNH=I2Qm&A!?dl5CxIiZ?`(|w_MxwBxib0!dpGOs7#mR%as}oVI*5WbtZ98&x zq$x74E*@G){>=!;Ij}p|^F|o%UP%$k{+H=Y@dH{Fy~@CM z&iW%*a&5%{-gbLq?D!*ylkH-&8Ui>X5F!4VxMF&tAt-#5_3#l1xe1(K-Bs<3Q{s^_ zQ&er1ojTC^8Hiv!*uL`W);YkZxQ`_zEQ%UId@nE(n^C@iPuE%y9|tU{w(}IF?r#1) zrA{RkOC_X`86>3~*$(mF-{){bY*ijtoSx)XW9w*+5~;xWpAQd>{=s42a$CmklGF_d zrC%)tySB`)8UY)LWR=GBc4S5Lk7tRV^S$TTNQa8Z^}48y?hG7yEpIJmgQmH3b*5cmeJCIXMgr@Ko?T;B~}V39dC z=Vt6Ry{PB0+b`*uPzLoJo;v2Aer~he$fS6TE_+v56Jrv6*%6CMI-Grc)i__t6)uo8 zNi$adFuWs3N5slO#W@~h6;J*XK_NKMSYm&3NVBTEJ??a%Ga+7}tso=1%S6;58|L<` z-`D5p^a1QkdJ}3g>eGr*vica+Hu$;J9quFUq9*n~C9kV8%;5n^08F7jVI3^!wOj%e z!HfoY)6vXB*T6b;P@>*Z^XO16r2fO=!hq6}X0x?9wqp*W)xYII^(YF?{I6TGv}q)y5^gC@k+@i)gJhbpeBVWZICPv1KwZ$WE&D; z3gcvaE?APz2VePMFv@Fs_kk{rxfzfY|Nb$;1X;t;(?N`0!j#!neXP0Na(WbSY+lx?z_x`Na>w1Otyq^WiB#^F|D&a}>4yoB+SZl<0ytWK*R z=(F_Gy2ElXb}qCl#sq zhWVjkOc7P9FJXmikBj>ZjwxNse~hggs5^_x2XeS%+99pG&B|^yVBiz5*|IPt=SVi{ zU%*=r@P`7rVrUiwot(Sp4mvZ+jnYDiVHOMqD5oYreV$`3e9yw+9gJ%VhgNY`v}#8n zyYL~n{t-K*do-9$3Nzjgvr}{_?{Y+Q!vr?*&OdQ;R|j=Y*CGkf!Di}eA*yc6&R;vd zL+H=9|2dxy+o$c+U)zg6q>SVEGE=<8bdLIsa7aB6R!9O>rCi@XzsB$ zCKh^M;7vIjmRUh9PvuoNSpNk?yDw}rdfaDnG?1mSi&$k(di{##h&mx)`}O62y#d>u zj8)MaXuV6436A~4T;xsKBMeoxedBJYJEOglptJC-x zg;iunsqgJW16^v%GE#NWaE9=HbP=vpC*)S3go;WKY(@>%t6=~~E_<7kf!$!$jyPI? zf|@yK_~Bjf2qS?Mt6i|bS?3@Rh2t7&{V@anLglNa&hwZUeaUXQ z_2;TINHgH2QOH+e_xJBP%y}3c=37kX!7HP5!esc2`Odwd_fFOt%vLWjmGa#9DMr1P zWO0ThIyvg%kL=sbGyE}5#7{7FvD#^x0S;iJBnKd4CX;=8&Bq zv8?v6oz90oQh;(z>R)y3;z`>7F)e?o*y@zPJ>dQvx9b2)B04O>e37O6l6|c9*^p@{ z}L^;I&_V_mz0K3;C9wQf^ zN%VxT>im4Csq4KGCl;)WWvrC>%KD=mmuNnG3>u*`Bv zV8MHzUwMbqHwu-dWJ)@TlQ3BX(A7ocyql7SH7P9w@ODwK%(YdI*B3ai_A=cSQ!ad5MaVoD+(IVjzr0h!HW?XxQ|HvQOyxPLBAZT8eJ_#b|E-O`WAOy>mY-Gg z@13Q@)w;)N^e~X{3IW<({X)TI{*S)lmbK*<*+fziIz%(#@WWEVqhsDIB1s)~JpU?{ zn%048$^E$w@$qyGKHV0{z@Jk~JKKv%aXo`sM9E}x-ZO8+!}1kt%nV8A*uDNlJwQya zN-w>e`WaM5Zjq|PTDP{BeS{tAPI_RwF@X7;E7S8Q61PXnP5TCYLd2A z`fx)l2LAbaFAl2CKcAY6fPM%Tn`h|=P})eqElEd8np3pv8-v%BZlgi#;gaCB{WbD0 zb_sFhjdXOjA}BTk4%B%LhpO41xUS5z1iLVz!QoPTzqPw`XT7Aq~-8pRTd8cDh78kYn7Gjl~7;0n@iGBJGH^ivK$B|}TM zm5zs#R5AtP;`@&8_uB50_TBZktimPaGi2((f#7UiR+BzLQCNE^s8lz?b#-78EmJg*EDOYPtdx!{{@kX9^0pN*Mn zi8J7f?=mjEf^He(iy5!10P(BDlQHw2!qgbi*zZ!9nHHVTfcU~eg{t{`v*G+ARP{(^(BMrB%>MR`7vY;pSJyX7@%h?z-Q3ja3tM}LDyZnG z9=pp6gMcLJw~JRikphe)hZz6WX`_+xzC);WYjdANC6@S;^=~eDY@>9x#cH06XX>4# zj|DfGuys*wU3YCF^TT#$n=G7+$F=_P8+>wU<2$1|O~ zkW$(#3Sz4oN0%TMZc5L_8sW<=k)z@!sfh+GA%1C}*S&_h4bhSuyH)rmCj9|kZc~sZ zOp4QPcHXYBFBrc2&XjYj#CKw@GOC1YEX&$8rsOlbEhEZl-%`4B35&a(NG7)Ph> zLwUhT*>kCEj$1VDK+9hryc7mb&EPR9MMHcO7BYCl;ps< zL=;&NCWEOQ+t@p*?>XYTY^iWaJrXrk9xl&e1!ucocu=mdiWpMF<$Rz$EcQZeQ2VXy z0@fIplb~2XpJ-=Hz7qEa73R~%Tg8UbNejemMaj6zm zBmZVdx0zrIJ9|wlUQtu*<7PX@CTlk%Dds!cu)=znp66)RKucTWcNIAz81bs6o=9ZA z+Z08d%&hI3)<5L-+M~NaT#@#}Rm@ezaMb9i{cPV3`I)B5H49aL$MKSR!$SUrMK2^O zmasrM`>r`WvYY8iYS%bR9cd2@TmD3E*_3@Hy@*f<| zuKGI6z|a6+#<;Th<@L{IV_H}`r~Z5Ish~c{+$i-GgYbSH{;$#9f5!u2mLw2m5JsTT zVKKpRKv;|Z!TMiS%xI7uqs$$mN+5EZe13h3PyPwH5M0(rr-2R(%P(-P04S{ahZX1O zP=mI#YJuW$8Zy$vOQ8xIDmsk5kddr7Pzr#~e@elB2J@2=lm_GM07H}h_+2Rb@?{;> zWBL-Tz69jdAYf~j2OO@|wnb8hMSs5HzNUf!Dr(&4PVx^y-1yc#~hlpKT|N^V4?s&ew>$u0z4%cp$qi@RjI60>j?Qw zCA^6ul}i|aQ9W{BOXjmx`68Vu^n`AYINq^rFf#m?7Mr&YHd1y_FP!aUDIv`(d8aB^C%)O~>_ z;&p&Zp#4_kv>n@K1;JDs>EM{)kRnO5%pQ4?2ZJ3ZDRR^Ze;n%Gr_{DNQpd(#;?Vm} z_M6#=$N(?I1=o%3NsfESk7fVO=Hv8emQWd<+~cQY~t8J9ts|qeCL`02KAP zprs+eNTN|cHm!tJ(vPtSq*CpyqaCq`PwcjYOL~Xedx9ZLj@H}fE%joQ8UcO3WWD=V zCeNF1dVU=oULKj7hy$JC$_xBLx0!9Fa3{2 zCq;)O+}ZuErWwB%1mF`nl7-UMgtsVDxb5P^G|1rPsIr}~H;@#2=be@xj+013#;u|v z?sRkRFv$$qJ6DIg^>RB7I!}H7MgaXuQzm6~y>TG(6?VN0@4n%VR|rjq4v>yWUtQh& zzOO?Ep%(RYdg9xNLMO0_T=E=!zp^8}$5S%e4t=MSo$pk_q*;H*yqxm5^w31UwfUjj zbkQr2Yx_B>jsL|2-u57dRBe0$Aut?o5VG5p?yqgNUj|_3n{|2oh4>e(H_;p#T}*$7 zo0ghlUQB|RFQe;LHv=g9+)WP_rWcnM$LSnQ9KwWO53@Ck?wRcQ?#EayW2COu4*EwG zK04YLdROZ?8apN;Pb8DE3GyJ`#X!e521zEZV5v`h%sqW;z zYcEJj)ODBAmSLT$^cybb2My{6y#4xn8Ha2rW~M>6dQcR7POp3bC`O8{O~xI_>v6d@ zIG1;FR0Z|6#O%`hBkG0wgv9Iqy1WvMWloMWtc&s+$yF<)*yDS0uH#E1THG*4gX_x6 zWWXL90rX)}5bYWsl;snjIlv_z3p2`YtB>I)dx1sJb_KZkMVrC3=#6kcqjKvCl7HDs zUAU5B6Evv6>Tn=c0ZdOD1SKhiY}cLV z59SYniXE@kZt!6Sx--`mdIbq>!}+k|h{@za`?eS_=B@Kd>iurU^vr-eu)_F76KKiTXyJRQv3ceqglpYF1dMp!W zG4vjaI{)A$zf=nJPBZl7FO!JR(vrM6=>ta}&*9B`osOMEy_R&m!+s32e`UT{CMqut z15aP%_+AxuJeCK(7VKE7UwP%+osmSONbBa2^K3#%((#PIm(J8Yd8_>;sPy1-^@Rmp z@RfTG7ZRKguNd#yg9nD##;Y-h5=sER-6bWo;*<=U3d_xRivLG&VvnEQZhDv6^HrNb z9h+oCS?Ch^g7abw_86lvJs3}yzZ2cgXuO@bi}~{th+v}g8nw-%V^F3xzVo>G0qO31 z!O7edeX&Vh7qIlhi9)!M!|H0SoIs+4wC z7Tk8G1?(5SB}@-t;s&tJ>fES`>$T%;L-fG>uNkVEhx7=tr?h9!9%3|PraT=kvI%eO z&Oy;AEpH}A+5n%XBv7>D3|Z7~;(KfV#f+6OnU-#n$Uzn}HK#dq^; z`gQR+%l_#~ zQJ}cMe+o>9E|zQ51}x~x=W|CYQy(p?tvweXUvE@>GyKWGV$<9wYR$MYu#fpm;IDPq z59F9Q)s5wP^K^3D?0AGo{NMOXOpy0_rXL@xAS zfR%l`$>Z8v7L8(Z(wPqav-;!8tW84k=E5JN-}AG9vHZ=xmJzJXKYu229E~!P8zN78 z-3~GXGZY8Y3oi<9q}n-7M0gfkQoKy(jlCRAI){+v;(DTXMp9}n_h#_XOAt9|eGf#l za>!T@?FEr8u`6{jo_VaizY;b`JX`Jmtb!V7f_ag${4%tSdo^Kc#23DR-MC@lk1_Qyw@aN1#^yn6@c67oU2(lk6PG`{q zn=uAb&Ssdv@HKa3G;1zB*;zyIBr8KQvM%eF&|{8;Ij&=KvLBfXBlkhBdWuz+J8JnO zTjlBR;$x5Qn@JBmSy(00Oujyr(j;;Bfn8;$s_)|PWy6EhzP#(Tr-xW;EtM(#Th}|92wWp|c~3_QEvcqWsnVqwFpoh3%3&1M2 zJS!T|X*9+Wb`KxE*HnRo_?zYJMys_2u>tVx={$=eMIzTFi;)6=LL$`Q+Tn-z(*0XI zo6!K6hxD`Y)9Bc!BAdfKcHmoi08r^wfnT*_M|c!(8%_%?9CmwtJa}EwPJ=3z7^l&?4*%`S_M|y#7`nkt=>FRDr&S~IsgONho-BU ztyPP+nfW4Rb#b)=Z#ps`e`6x=SGker540!_Bv*yQtNY^EvsL@5PYNcvbk(b`T=qTWVR;X-s5^{#L;$!A>p<&r5gxXv9YraVbpAAcWy z=e3#rs_2LBM)p6``7Gprw41v{fD2W#1eHIUs`3xbv(K`+jTQf16UM4PC}sv2u{0#k zRm%P$CKT{_UEPgP77G0OX+ke*C4Q!f!NV)CMj9BaG9ap{8`vp#c;MjLXzXCXdCObp zbj%P~M39FS(M3N=b=B_}Xw-hTT7Vc`g5d8r8cRiTx(VnTP+B-R+6N|I&RGqZgT%-F zn(X}5B~yCa{L3E8fi`{OSB%QQpN4hs6F{6I{Xl^KOI4v(FcV=jj)OZuI`1*aW56Nv zOid(q7R%M3DPjk$%%mU7%$&j+zc}H6_NAcsIsiw%OKGd6#l<1{>JHMnpB2!28moTp zQn_QdV8zG#nlJdnHL3<|4A1@XFQ87qQQYjut}MQvks?lI53bmjdyv}4Y5A`D{IQ0X zinc1&YMD(eyRjR=^j3IA|-Yrhp^m~OPic{ zMav2ATSV$o?v2c~XjR~27HB=AlMLiUd7cgJr58q%9b0t6RULUgeGXi_X46(GNEDIX zy&c^-dGY6I&xZR^^n~!THq4{ft6g9GP!Pg7BfGe)F|r7F&rq;!`f{>L(4&h?j!yUx z%)hiW{#=9Cou2A>cPK-4(0Qm~OGgSg|G?mtLF(n=s`1FwB+hyIc9=Yi5w%Im$F49^ zrWgj9-{?(byL-2hd>P$tU$_N}dZ=gOq6W<5*gxC+!V-I9 zV*60@4(+uEBD@YcS|c+lJVyU`Ey9Y#rwgX8d;(__!^i6gQ8{dT9!r8*cOfmS zTZ|{m22!?RoERI>yQwC4Avu2Sd4V=+x!TPuuh7sjWnA^%Y|6zL)b5Azrg9uaIWgnl zQG2`&gaxSv*H?`60sFe8xyVmpg7LefNvr*~lahvD4xBFSMkl0}_Gd7;YH@3IU!pD4 z99=IU1nZ^c$$m@qJcNN`_FF!!d@e|vzx3?^tEI=y+u0@A8I)sCv-jZBa;0)U8Uwzs zO!wiK+G6P9oSxNgvBzqgYj>vEWa#I%h>;5o?z;j%iX^n(>C$Aw<(>W!1IJt*h^r?T z`K&VTZJ+9U-I5u{)XacucOTc2nmZ~tb$V-ogNZhax>Dwq@}tBWi=ef!>m^C|%{fY^ zKB5=5?d%80;yWMVoWU=OljcG>f^$<`xU<>h?HovWCOOs`Q+jDMo3wxo~rYPdhnbe7sr7ue99-?EuU5H-DBt808wvXmo@KWNm`Qy{n*hq>_2plRTkLDfCkrtt%jR5xtGT;hU zXUyuc3A1n*aWv$_GPh+(JqYz__HSL&`$zMFTaxUV=l?jjr_6u^L9UP}#m&>>@$<+& zwuAEn2CfdJAyMrF&|){k-zbA*^ciW2f$ME@T#8hIhfsaxn%TtKK26GUW2HMGZl;1e z{)vpGmZHO;i^gb-3ljmluNQXXS)g{M95i_M23h}%37(N#A=KeDGOj{Hxg(3pI%q(?%cC8``Bk4X&|$wNCA@aU(Bhvmf5 zpO-VymZpQPJJu_+7h=zT`#J;pTdEmC2_qK!?VuYN^TTZEkF0ggPHgG&1wX`~R&j6T@WRtZVHZXTH~ z$8DF_lI))@DQ=-3O@=D-tb~K@o@9~X{|msZ{;=orso?fP0J|qiF~SQ)f{`QYQXO*v zM+Y*fePfovjYs=DexW4DWu`sWsi&4H3iDEp*eN>nKO#d#q zQ#AF=GvMo^J_;ewV9ptHG|M-f2BXaEB37*MIBwN6$5JD=_LKIt9@BaE=NnQNy&E5x za;IQwHD91P;@aETz#}FGchdPp4x#V23T7%7&p><+^W_O&UBrY%iX~JNPW+1Bj_o^H zC1hkO3^OGL%qk4mqHC`z zpLE4DLCMO+d_9Td2|h8RT?TZgsoutOa(2HT*9FNh`Nzr@O)A+g(( z>G4dQwqMK|uSL7~n5kFUfFM?|mQ1LXi+-Hu&O1EZG%wQ!=8%;@s9A!@|mn0v)Gm$stg1*jbuOD&y)}NZk+M!Iz>B!eTO2dgyLhmMWrB2jT?vrPh z?uhQbXL+v_RDGBmFl~Rz(LT|Mxa|*^gfP;fED=HS&I_97!L>f+E6?6s6!1-QC~fN? zb!*A+J~}25M_28>x7p1vm~hZeS@}C0X&k(v`JLpQ&ul1HK4zPi79$aM%>TS**fJy{HxP6I``#Oo|lo@azoWgsSSvY^ov>~ zjo141eV&(GzUG3RV#ys;|JmydCvhB`xA=4kUe+&8qKc!Ytt5bC?F>o!KXMFW#7*|l z!nGC5_~Ai*@Y>m4OJlnJp1+AEnH3peQ)E)IhSZRn+Z`tx<_9;rae|j;4Jcz>)H+9* zJ5M=Y!4+%&Dwr7e+UGzF0RHwS{<0>i4tmfvFxYG5zNx>@5%L?LE_Rls za?;aSk+YLGmZ~!Ffgdjw#mc!=yg7Cr{SqD0A%>>gy?`>u9oKq1^++T@K=&u}ewX|r zM>MUI1zQvuHj3NAJ9#E>H|E< Date: Fri, 2 Oct 2020 12:11:10 +0200 Subject: [PATCH 022/334] Deleted use of TaskTimer in OnInit + code cleaning in MainFrame --- src/slic3r/GUI/GUI_App.cpp | 3 --- src/slic3r/GUI/MainFrame.cpp | 2 -- src/slic3r/GUI/Tab.cpp | 4 +--- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 23f79c65fc..09dcf875be 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -634,7 +634,6 @@ bool GUI_App::OnInit() bool GUI_App::on_init_inner() { - TaskTimer timer("on_init"); // Verify resources path const wxString resources_dir = from_u8(Slic3r::resources_dir()); wxCHECK_MSG(wxDirExists(resources_dir), false, @@ -759,8 +758,6 @@ bool GUI_App::on_init_inner() #endif // ENABLE_GCODE_VIEWER scrn->SetText(_L("Creating settings tabs...")); - TaskTimer timer2("Creating settings tabs"); - mainframe = new MainFrame(); // hide settings tabs after first Layout mainframe->select_tab(size_t(0)); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 4ecd36c7f2..6ee496052c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -668,8 +668,6 @@ void MainFrame::add_created_tab(Tab* panel) bool MainFrame::is_active_and_shown_tab(Tab* tab) { - if (!this) - return false; int page_id = m_tabpanel->FindPage(tab); if (m_tabpanel->GetSelection() != page_id) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 3517381cf7..924f3c8bbd 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3471,10 +3471,8 @@ bool Tab::tree_sel_change_delayed() //for (auto& el : m_pages) // el.get()->Hide(); - if (wxGetApp().mainframe->is_active_and_shown_tab(this)) { + if (wxGetApp().mainframe!=nullptr && wxGetApp().mainframe->is_active_and_shown_tab(this)) activate_selected_page(throw_if_canceled); - // m_active_page->Show(); - } #ifdef __linux__ no_updates.reset(nullptr); From 1f4010ba4ed3bd306cd81381c3d8ef27de18f5f3 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 13:02:56 +0200 Subject: [PATCH 023/334] Orange background for imgui buttons --- src/slic3r/GUI/ImGuiWrapper.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index f9a23cb51c..d759f4b9af 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -23,7 +23,7 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" -#include "3DScene.hpp" +#include "3DScene.hpp"+ #include "GUI.hpp" #include "I18N.hpp" #include "Search.hpp" @@ -57,8 +57,8 @@ const ImVec4 ImGuiWrapper::COL_GREY_LIGHT = { 0.4f, 0.4f, 0.4f, 1.0f }; const ImVec4 ImGuiWrapper::COL_ORANGE_DARK = { 0.757f, 0.404f, 0.216f, 1.0f }; const ImVec4 ImGuiWrapper::COL_ORANGE_LIGHT = { 1.0f, 0.49f, 0.216f, 1.0f }; const ImVec4 ImGuiWrapper::COL_WINDOW_BACKGROUND = { 0.133f, 0.133f, 0.133f, 0.8f }; -const ImVec4 ImGuiWrapper::COL_BUTTON_BACKGROUND = { 0.233f, 0.233f, 0.233f, 1.0f }; -const ImVec4 ImGuiWrapper::COL_BUTTON_HOVERED = { 0.433f, 0.433f, 0.433f, 1.8f }; +const ImVec4 ImGuiWrapper::COL_BUTTON_BACKGROUND = COL_ORANGE_DARK; +const ImVec4 ImGuiWrapper::COL_BUTTON_HOVERED = COL_ORANGE_LIGHT; const ImVec4 ImGuiWrapper::COL_BUTTON_ACTIVE = ImGuiWrapper::COL_BUTTON_HOVERED; ImGuiWrapper::ImGuiWrapper() From 38ddc5fdc4efece8552780a6ae8257377d466736 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 13:20:48 +0200 Subject: [PATCH 024/334] New image for gcode viewer splash screen --- resources/icons/splashscreen-gcodepreview.jpg | Bin 0 -> 127316 bytes src/slic3r/GUI/GUI_App.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 resources/icons/splashscreen-gcodepreview.jpg diff --git a/resources/icons/splashscreen-gcodepreview.jpg b/resources/icons/splashscreen-gcodepreview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bae384935ecadff5051a4d2f06f9bef7195a7e5 GIT binary patch literal 127316 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

qKg8 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"show_splash_screen") == "1") { - wxBitmap bmp = SplashScreen::MakeBitmap(wxBitmap(from_u8(var("splashscreen.jpg")), wxBITMAP_TYPE_JPEG)); + wxBitmap bmp = SplashScreen::MakeBitmap(wxBitmap(from_u8(var(is_editor() ? "splashscreen.jpg" : "splashscreen-gcodepreview.jpg")), wxBITMAP_TYPE_JPEG)); // Detect position (display) to show the splash screen // Now this position is equal to the mainframe position From 0f44caa99cd0a238b8882f75008ae0a040631361 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 2 Oct 2020 15:43:39 +0200 Subject: [PATCH 025/334] ENABLE_SLOPE_RENDERING set as default Slope rendering active only when using Gizmo FDM supports --- resources/shaders/gouraud.fs | 6 +- resources/shaders/gouraud.vs | 3 +- src/libslic3r/Technologies.hpp | 3 - src/slic3r/GUI/3DScene.cpp | 30 +----- src/slic3r/GUI/3DScene.hpp | 22 +---- src/slic3r/GUI/GLCanvas3D.cpp | 99 +------------------- src/slic3r/GUI/GLCanvas3D.hpp | 30 +----- src/slic3r/GUI/GUI_Preview.cpp | 2 - src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp | 25 +++-- src/slic3r/GUI/KBShortcutsDialog.cpp | 3 - src/slic3r/GUI/MainFrame.cpp | 11 --- src/slic3r/GUI/NotificationManager.hpp | 2 - src/slic3r/GUI/Plater.cpp | 10 -- src/slic3r/GUI/Plater.hpp | 5 - 14 files changed, 30 insertions(+), 221 deletions(-) diff --git a/resources/shaders/gouraud.fs b/resources/shaders/gouraud.fs index 45175acc21..b1a8d6ac28 100644 --- a/resources/shaders/gouraud.fs +++ b/resources/shaders/gouraud.fs @@ -9,8 +9,7 @@ const float EPSILON = 0.0001; struct SlopeDetection { bool actived; - // x = yellow, y = red - vec2 z_range; + float normal_z; mat3 volume_world_normal_matrix; }; @@ -33,8 +32,7 @@ varying vec3 eye_normal; vec3 slope_color() { - float gradient_range = slope.z_range.x - slope.z_range.y; - return (world_normal_z > slope.z_range.x - EPSILON) ? GREEN : ((gradient_range == 0.0) ? RED : mix(RED, YELLOW, clamp((world_normal_z - slope.z_range.y) / gradient_range, 0.0, 1.0))); + return (world_normal_z > slope.normal_z - EPSILON) ? GREEN : RED; } void main() diff --git a/resources/shaders/gouraud.vs b/resources/shaders/gouraud.vs index d60f6eae8a..ed7e3f56ba 100644 --- a/resources/shaders/gouraud.vs +++ b/resources/shaders/gouraud.vs @@ -29,8 +29,7 @@ struct PrintBoxDetection struct SlopeDetection { bool actived; - // x = yellow, y = red - vec2 z_range; + float normal_z; mat3 volume_world_normal_matrix; }; diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 786557cf1e..a1f503d59a 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -39,9 +39,6 @@ //=================== #define ENABLE_2_3_0_ALPHA1 1 -// Enable rendering of objects colored by facets' slope -#define ENABLE_SLOPE_RENDERING (1 && ENABLE_2_3_0_ALPHA1) - // Enable rendering of objects using environment map #define ENABLE_ENVIRONMENT_MAP (1 && ENABLE_2_3_0_ALPHA1) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 84a5e4d2fc..fc285e3356 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -506,24 +506,6 @@ void GLVolume::render() const glFrontFace(GL_CCW); } -#if !ENABLE_SLOPE_RENDERING -void GLVolume::render(int color_id, int detection_id, int worldmatrix_id) const -{ - if (color_id >= 0) - glsafe(::glUniform4fv(color_id, 1, (const GLfloat*)render_color)); - else - glsafe(::glColor4fv(render_color)); - - if (detection_id != -1) - glsafe(::glUniform1i(detection_id, shader_outside_printer_detection_enabled ? 1 : 0)); - - if (worldmatrix_id != -1) - glsafe(::glUniformMatrix4fv(worldmatrix_id, 1, GL_FALSE, (const GLfloat*)world_matrix().cast().data())); - - render(); -} -#endif // !ENABLE_SLOPE_RENDERING - bool GLVolume::is_sla_support() const { return this->composite_id.volume_id == -int(slaposSupportTree); } bool GLVolume::is_sla_pad() const { return this->composite_id.volume_id == -int(slaposPad); } @@ -775,9 +757,7 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab shader->set_uniform("print_box.max", m_print_box_max, 3); shader->set_uniform("z_range", m_z_range, 2); shader->set_uniform("clipping_plane", m_clipping_plane, 4); -#if ENABLE_SLOPE_RENDERING - shader->set_uniform("slope.z_range", m_slope.z_range); -#endif // ENABLE_SLOPE_RENDERING + shader->set_uniform("slope.normal_z", m_slope.normal_z); #if ENABLE_ENVIRONMENT_MAP unsigned int environment_texture_id = GUI::wxGetApp().plater()->get_environment_texture_id(); @@ -791,7 +771,6 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab GLVolumeWithIdAndZList to_render = volumes_to_render(this->volumes, type, view_matrix, filter_func); for (GLVolumeWithIdAndZ& volume : to_render) { volume.first->set_render_color(); -#if ENABLE_SLOPE_RENDERING shader->set_uniform("uniform_color", volume.first->render_color, 4); shader->set_uniform("print_box.actived", volume.first->shader_outside_printer_detection_enabled); shader->set_uniform("print_box.volume_world_matrix", volume.first->world_matrix()); @@ -799,9 +778,6 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab shader->set_uniform("slope.volume_world_normal_matrix", static_cast(volume.first->world_matrix().matrix().block(0, 0, 3, 3).inverse().transpose().cast())); volume.first->render(); -#else - volume.first->render(color_id, print_box_detection_id, print_box_worldmatrix_id); -#endif // ENABLE_SLOPE_RENDERING } #if ENABLE_ENVIRONMENT_MAP @@ -2020,12 +1996,8 @@ void GLModel::render() const glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); -#if ENABLE_SLOPE_RENDERING shader->set_uniform("uniform_color", m_volume.render_color, 4); m_volume.render(); -#else - m_volume.render(color_id, -1, -1); -#endif // ENABLE_SLOPE_RENDERING glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index 31e974be15..a6362dadc6 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -447,9 +447,6 @@ public: void set_range(double low, double high); void render() const; -#if !ENABLE_SLOPE_RENDERING - void render(int color_id, int detection_id, int worldmatrix_id) const; -#endif // !ENABLE_SLOPE_RENDERING void finalize_geometry(bool opengl_initialized) { this->indexed_vertex_array.finalize_geometry(opengl_initialized); } void release_geometry() { this->indexed_vertex_array.release_geometry(); } @@ -494,26 +491,19 @@ private: // plane coeffs for clipping in shaders float m_clipping_plane[4]; -#if ENABLE_SLOPE_RENDERING struct Slope { // toggle for slope rendering bool active{ false }; - // [0] = yellow, [1] = red - std::array z_range; + float normal_z; }; Slope m_slope; -#endif // ENABLE_SLOPE_RENDERING public: GLVolumePtrs volumes; -#if ENABLE_SLOPE_RENDERING - GLVolumeCollection() { set_default_slope_z_range(); } -#else - GLVolumeCollection() = default; -#endif // ENABLE_SLOPE_RENDERING + GLVolumeCollection() { set_default_slope_normal_z(); } ~GLVolumeCollection() { clear(); } std::vector load_object( @@ -572,14 +562,12 @@ public: void set_z_range(float min_z, float max_z) { m_z_range[0] = min_z; m_z_range[1] = max_z; } void set_clipping_plane(const double* coeffs) { m_clipping_plane[0] = coeffs[0]; m_clipping_plane[1] = coeffs[1]; m_clipping_plane[2] = coeffs[2]; m_clipping_plane[3] = coeffs[3]; } -#if ENABLE_SLOPE_RENDERING bool is_slope_active() const { return m_slope.active; } void set_slope_active(bool active) { m_slope.active = active; } - const std::array& get_slope_z_range() const { return m_slope.z_range; } - void set_slope_z_range(const std::array& range) { m_slope.z_range = range; } - void set_default_slope_z_range() { m_slope.z_range = { -::cos(Geometry::deg2rad(90.0f - 45.0f)), -::cos(Geometry::deg2rad(90.0f - 70.0f)) }; } -#endif // ENABLE_SLOPE_RENDERING + float get_slope_normal_z() const { return m_slope.normal_z; } + void set_slope_normal_z(float normal_z) { m_slope.normal_z = normal_z; } + void set_default_slope_normal_z() { m_slope.normal_z = -::cos(Geometry::deg2rad(90.0f - 45.0f)); } // returns true if all the volumes are completely contained in the print volume // returns the containment state in the given out_state, if non-null diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b88b642f89..d90ad8a871 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1414,7 +1414,7 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas ImGui::PushStyleVar(ImGuiStyleVar_Alpha, alpha); imgui.set_next_window_pos(position(0), position(1), ImGuiCond_Always, 0.0f, 0.0f); - imgui.begin(_(L("canvas_tooltip")), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing); + imgui.begin(_L("canvas_tooltip"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing); ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); ImGui::TextUnformatted(m_text.c_str()); @@ -1428,83 +1428,8 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas ImGui::PopStyleVar(2); } -#if ENABLE_SLOPE_RENDERING - float GLCanvas3D::Slope::s_window_width; -void GLCanvas3D::Slope::show_dialog(bool show) { - if (show && is_used()) - return; use(show); - m_dialog_shown = show; - wxGetApp().plater()->get_notification_manager()->set_move_from_slope(show); -} - -void GLCanvas3D::Slope::render() const -{ - if (m_dialog_shown) { - const std::array& z_range = m_volumes.get_slope_z_range(); - std::array angle_range = { Geometry::rad2deg(::acos(z_range[0])) - 90.0f, Geometry::rad2deg(::acos(z_range[1])) - 90.0f }; - bool modified = false; - - ImGuiWrapper& imgui = *wxGetApp().imgui(); - const Size& cnv_size = m_canvas.get_canvas_size(); - imgui.set_next_window_pos((float)cnv_size.get_width(), (float)cnv_size.get_height(), ImGuiCond_Always, 1.0f, 1.0f); - imgui.begin(_L("Slope visualization"), nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); - - imgui.text(_L("Facets' slope range (degrees)") + ":"); - - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.75f, 0.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(1.0f, 0.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.85f, 0.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.25f, 0.0f, 0.0f, 1.0f)); - - // angle_range is range of normal angle, GUI should - // show facet slope angle - float slope_bound = 90.f - angle_range[1]; - bool mod = ImGui::SliderFloat("##red", &slope_bound, 0.0f, 90.0f, "%.1f"); - angle_range[1] = 90.f - slope_bound; - if (mod) { - modified = true; - if (angle_range[0] > angle_range[1]) - angle_range[0] = angle_range[1]; - } - - ImGui::PopStyleColor(4); - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.75f, 0.75f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(1.0f, 1.0f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.85f, 0.85f, 0.0f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.25f, 0.25f, 0.0f, 1.0f)); - - slope_bound = 90.f - angle_range[0]; - mod = ImGui::SliderFloat("##yellow", &slope_bound, 0.0f, 90.0f, "%.1f"); - angle_range[0] = 90.f - slope_bound; - if (mod) { - modified = true; - if (angle_range[1] < angle_range[0]) - angle_range[1] = angle_range[0]; - } - - ImGui::PopStyleColor(4); - - ImGui::Separator(); - - if (imgui.button(_(L("Default")))) - m_volumes.set_default_slope_z_range(); - - // to let the dialog immediately showup without waiting for a mouse move - if (ImGui::GetWindowContentRegionWidth() + 2.0f * ImGui::GetStyle().WindowPadding.x != ImGui::CalcWindowExpectedSize(ImGui::GetCurrentWindow()).x) - m_canvas.request_extra_frame(); - - s_window_width = ImGui::GetWindowSize().x; - - imgui.end(); - - if (modified) - set_range(angle_range); - } - } -#endif // ENABLE_SLOPE_RENDERING - wxDEFINE_EVENT(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_OBJECT_SELECT, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RIGHT_CLICK, RBtnEvent); @@ -1577,9 +1502,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) #endif // ENABLE_RENDER_PICKING_PASS , m_render_sla_auxiliaries(true) , m_labels(*this) -#if ENABLE_SLOPE_RENDERING , m_slope(*this, m_volumes) -#endif // ENABLE_SLOPE_RENDERING { if (m_canvas != nullptr) { m_timer.SetOwner(m_canvas); @@ -1887,11 +1810,6 @@ bool GLCanvas3D::is_reload_delayed() const void GLCanvas3D::enable_layers_editing(bool enable) { -#if ENABLE_SLOPE_RENDERING - if (enable && m_slope.is_dialog_shown()) - m_slope.show_dialog(false); -#endif // ENABLE_SLOPE_RENDERING - m_layers_editing.set_enabled(enable); const Selection::IndicesList& idxs = m_selection.get_volume_idxs(); for (unsigned int idx : idxs) @@ -3105,17 +3023,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case 'a': { post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); break; } case 'B': case 'b': { zoom_to_bed(); break; } -#if ENABLE_SLOPE_RENDERING - case 'D': - case 'd': { - if (!is_layers_editing_enabled()) - { - m_slope.show_dialog(!m_slope.is_dialog_shown()); - m_dirty = true; - } - break; - } -#endif // ENABLE_SLOPE_RENDERING case 'E': case 'e': { m_labels.show(!m_labels.is_shown()); m_dirty = true; break; } case 'I': @@ -5684,10 +5591,6 @@ void GLCanvas3D::_render_overlays() const } m_labels.render(sorted_instances); -#if ENABLE_SLOPE_RENDERING - m_slope.render(); -#endif // ENABLE_SLOPE_RENDERING - glsafe(::glPopMatrix()); } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 127f822c80..886944488f 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -422,7 +422,6 @@ private: bool is_in_imgui() const { return m_in_imgui; } }; -#if ENABLE_SLOPE_RENDERING class Slope { bool m_enabled{ false }; @@ -437,15 +436,11 @@ private: bool is_enabled() const { return m_enabled; } void use(bool use) { m_volumes.set_slope_active(m_enabled ? use : false); } bool is_used() const { return m_volumes.is_slope_active(); } - void show_dialog(bool show); - bool is_dialog_shown() const { return m_dialog_shown; } - void render() const; - void set_range(const std::array& range) const { - m_volumes.set_slope_z_range({ -::cos(Geometry::deg2rad(90.0f - range[0])), -::cos(Geometry::deg2rad(90.0f - range[1])) }); + void set_normal_angle(float angle_in_deg) const { + m_volumes.set_slope_normal_z(-::cos(Geometry::deg2rad(90.0f - angle_in_deg))); } static float get_window_width() { return s_window_width; }; }; -#endif // ENABLE_SLOPE_RENDERING public: enum ECursorType : unsigned char @@ -534,9 +529,7 @@ private: Labels m_labels; mutable Tooltip m_tooltip; mutable bool m_tooltip_enabled{ true }; -#if ENABLE_SLOPE_RENDERING Slope m_slope; -#endif // ENABLE_SLOPE_RENDERING public: explicit GLCanvas3D(wxGLCanvas* canvas); @@ -621,9 +614,7 @@ public: void enable_undoredo_toolbar(bool enable); void enable_dynamic_background(bool enable); void enable_labels(bool enable) { m_labels.enable(enable); } -#if ENABLE_SLOPE_RENDERING void enable_slope(bool enable) { m_slope.enable(enable); } -#endif // ENABLE_SLOPE_RENDERING void allow_multisample(bool allow); void zoom_to_bed(); @@ -770,14 +761,9 @@ public: bool are_labels_shown() const { return m_labels.is_shown(); } void show_labels(bool show) { m_labels.show(show); } -#if ENABLE_SLOPE_RENDERING - bool is_slope_shown() const { return m_slope.is_dialog_shown(); } + bool is_using_slope() const { return m_slope.is_used(); } void use_slope(bool use) { m_slope.use(use); } - void show_slope(bool show) { m_slope.show_dialog(show); } - void set_slope_range(const std::array& range) { m_slope.set_range(range); } -#endif // ENABLE_SLOPE_RENDERING - - + void set_slope_normal_angle(float angle_in_deg) { m_slope.set_normal_angle(angle_in_deg); } private: bool _is_shown_on_screen() const; @@ -900,13 +886,7 @@ private: bool _deactivate_collapse_toolbar_items(); float get_overelay_window_width() { return LayersEditing::get_overelay_window_width(); } - float get_slope_window_width() { -#if ENABLE_SLOPE_RENDERING - return Slope::get_window_width(); -#else - return 0.0f; -#endif - } + float get_slope_window_width() { return Slope::get_window_width(); } static std::vector _parse_colors(const std::vector& colors); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 8ea54c6f18..b9e0afc65a 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -74,9 +74,7 @@ bool View3D::init(wxWindow* parent, Model* model, DynamicPrintConfig* config, Ba m_canvas->enable_main_toolbar(true); m_canvas->enable_undoredo_toolbar(true); m_canvas->enable_labels(true); -#if ENABLE_SLOPE_RENDERING m_canvas->enable_slope(true); -#endif // ENABLE_SLOPE_RENDERING wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index c6b9a952bc..3455a30d27 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -150,6 +150,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; + ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("cursor_size")); ImGui::SameLine(cursor_slider_left); ImGui::PushItemWidth(window_width - cursor_slider_left); @@ -163,6 +164,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l } + ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("cursor_type")); ImGui::SameLine(window_width - cursor_type_combo_width - m_imgui->scaled(0.5f)); ImGui::PushItemWidth(cursor_type_combo_width); @@ -180,8 +182,10 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::Separator(); - if (m_c->object_clipper()->get_position() == 0.f) + if (m_c->object_clipper()->get_position() == 0.f) { + ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("clipping_of_view")); + } else { if (m_imgui->button(m_desc.at("reset_direction"))) { wxGetApp().CallAfter([this](){ @@ -206,23 +210,24 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l m_imgui->end(); } else { - std::string name = "Autoset custom supports"; - m_imgui->begin(wxString(name), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); - m_imgui->text("Threshold:"); + m_imgui->begin(_L("Autoset custom supports"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse); + ImGui::AlignTextToFramePadding(); + m_imgui->text(_L("Threshold:") + " " + _L("deg")); ImGui::SameLine(); if (m_imgui->slider_float("", &m_angle_threshold_deg, 0.f, 90.f, "%.f")) - m_parent.set_slope_range({90.f - m_angle_threshold_deg, 90.f - m_angle_threshold_deg}); - if (m_imgui->button("Enforce")) + m_parent.set_slope_normal_angle(90.f - m_angle_threshold_deg); + if (m_imgui->button(_L("Enforce"))) select_facets_by_angle(m_angle_threshold_deg, false); ImGui::SameLine(); - if (m_imgui->button("Block")) + if (m_imgui->button(_L("Block"))) select_facets_by_angle(m_angle_threshold_deg, true); ImGui::SameLine(); - if (m_imgui->button("Cancel")) + if (m_imgui->button(_L("Cancel"))) m_setting_angle = false; m_imgui->end(); - if (! m_setting_angle) { - m_parent.use_slope(false); + bool needs_update = !(m_setting_angle && m_parent.is_using_slope()); + if (needs_update) { + m_parent.use_slope(m_setting_angle); m_parent.set_as_dirty(); } } diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 4affd13269..f2cc6f5a65 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -140,9 +140,6 @@ void KBShortcutsDialog::fill_shortcuts() // View { "0-6", L("Camera view") }, { "E", L("Show/Hide object/instance labels") }, -#if ENABLE_SLOPE_RENDERING - { "D", L("Turn On/Off facets' slope rendering") }, -#endif // ENABLE_SLOPE_RENDERING // Configuration { ctrl + "P", L("Preferences") }, // Help diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 6ee496052c..f5570c5147 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1278,20 +1278,9 @@ void MainFrame::init_menubar() "", nullptr, [this](){return can_change_view(); }, this); #endif // ENABLE_GCODE_VIEWER viewMenu->AppendSeparator(); -#if ENABLE_SLOPE_RENDERING - wxMenu* options_menu = new wxMenu(); - append_menu_check_item(options_menu, wxID_ANY, _L("Show &labels") + sep + "E", _L("Show object/instance labels in 3D scene"), - [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this, - [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); - append_menu_check_item(options_menu, wxID_ANY, _L("Show &slope") + sep + "D", _L("Objects coloring using faces' slope"), - [this](wxCommandEvent&) { m_plater->show_view3D_slope(!m_plater->is_view3D_slope_shown()); }, this, - [this]() { return m_plater->is_view3D_shown() && !m_plater->is_view3D_layers_editing_enabled(); }, [this]() { return m_plater->is_view3D_slope_shown(); }, this); - append_submenu(viewMenu, options_menu, wxID_ANY, _L("&Options"), ""); -#else append_menu_check_item(viewMenu, wxID_ANY, _L("Show &labels") + sep + "E", _L("Show object/instance labels in 3D scene"), [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); -#endif // ENABLE_SLOPE_RENDERING append_menu_check_item(viewMenu, wxID_ANY, _L("&Collapse sidebar"), _L("Collapse sidebar"), [this](wxCommandEvent&) { m_plater->collapse_sidebar(!m_plater->is_sidebar_collapsed()); }, this, [this]() { return true; }, [this]() { return m_plater->is_sidebar_collapsed(); }, this); diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index 24be35b91a..dfdf39f0ed 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -236,8 +236,6 @@ public: void set_in_preview(bool preview); // Move to left to avoid colision with variable layer height gizmo void set_move_from_overlay(bool move) { m_move_from_overlay = move; } - // or slope visualization gizmo - void set_move_from_slope (bool move) { m_move_from_slope = move; } private: //pushes notification into the queue of notifications that are rendered //can be used to create custom notification diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8111cbcae1..b9dc23ded1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1590,12 +1590,7 @@ struct Plater::priv bool is_sidebar_collapsed() const { return sidebar->is_collapsed(); } void collapse_sidebar(bool show) { sidebar->collapse(show); } -#if ENABLE_SLOPE_RENDERING - bool is_view3D_slope_shown() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_slope_shown(); } - void show_view3D_slope(bool show) { if (current_panel == view3D) view3D->get_canvas3d()->show_slope(show); } - bool is_view3D_layers_editing_enabled() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_layers_editing_enabled(); } -#endif // ENABLE_SLOPE_RENDERING void set_current_canvas_as_dirty(); GLCanvas3D* get_current_canvas3D(); @@ -4698,12 +4693,7 @@ void Plater::show_view3D_labels(bool show) { p->show_view3D_labels(show); } bool Plater::is_sidebar_collapsed() const { return p->is_sidebar_collapsed(); } void Plater::collapse_sidebar(bool show) { p->collapse_sidebar(show); } -#if ENABLE_SLOPE_RENDERING -bool Plater::is_view3D_slope_shown() const { return p->is_view3D_slope_shown(); } -void Plater::show_view3D_slope(bool show) { p->show_view3D_slope(show); } - bool Plater::is_view3D_layers_editing_enabled() const { return p->is_view3D_layers_editing_enabled(); } -#endif // ENABLE_SLOPE_RENDERING void Plater::select_all() { p->select_all(); } void Plater::deselect_all() { p->deselect_all(); } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index cc80186202..71cd32415b 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -164,12 +164,7 @@ public: bool is_sidebar_collapsed() const; void collapse_sidebar(bool show); -#if ENABLE_SLOPE_RENDERING - bool is_view3D_slope_shown() const; - void show_view3D_slope(bool show); - bool is_view3D_layers_editing_enabled() const; -#endif // ENABLE_SLOPE_RENDERING // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. From 8df01818dd85560a76d3a33bcff1f3437cede618 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Fri, 2 Oct 2020 17:31:55 +0200 Subject: [PATCH 026/334] Limiting the application of Machine Limits https://github.com/prusa3d/PrusaSlicer/issues/1212 WIP: The hints do not rescale when switching the "usage" combo box. The new g-code time estimator needs to be updated to not read the machine limits if not enabled. --- src/libslic3r/GCode.cpp | 82 +++++++++++++------------ src/libslic3r/Preset.cpp | 24 ++++++-- src/libslic3r/Preset.hpp | 2 + src/libslic3r/PrintConfig.cpp | 15 +++++ src/libslic3r/PrintConfig.hpp | 20 ++++++ src/slic3r/GUI/Field.cpp | 2 + src/slic3r/GUI/GUI.cpp | 2 + src/slic3r/GUI/OptionsGroup.cpp | 3 + src/slic3r/GUI/Tab.cpp | 46 +++++++++++++- src/slic3r/GUI/Tab.hpp | 13 ++-- src/slic3r/GUI/UnsavedChangesDialog.cpp | 2 + 11 files changed, 161 insertions(+), 50 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index febdff7e02..5c8c454aab 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -819,48 +819,54 @@ namespace DoExport { // this->print_machine_envelope(file, print); // shall be adjusted as well to produce a G-code block compatible with the particular firmware flavor. if (config.gcode_flavor.value == gcfMarlin) { - normal_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values[0]); - normal_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values[0]); - normal_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values[0]); - normal_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values[0]); - normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values[0]); - normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values[0]); - normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values[0]); - + if (config.machine_limits_type.value != MachineLimitsUsage::Ignore) { + normal_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values[0]); + normal_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values[0]); + normal_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values[0]); + normal_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values[0]); + normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values[0]); + normal_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values[0]); + normal_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values[0]); + } + if (silent_time_estimator_enabled) { silent_time_estimator.reset(); silent_time_estimator.set_dialect(config.gcode_flavor); silent_time_estimator.set_extrusion_axis(config.get_extrusion_axis()[0]); - /* "Stealth mode" values can be just a copy of "normal mode" values - * (when they aren't input for a printer preset). - * Thus, use back value from values, instead of second one, which could be absent - */ - silent_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values.back()); - silent_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values.back()); - silent_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values.back()); - silent_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values.back()); - silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values.back()); - silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values.back()); - silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values.back()); + + if (config.machine_limits_type.value != MachineLimitsUsage::Ignore) { + /* "Stealth mode" values can be just a copy of "normal mode" values + * (when they aren't input for a printer preset). + * Thus, use back value from values, instead of second one, which could be absent + */ + silent_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values.back()); + silent_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values.back()); + silent_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values.back()); + silent_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Y, (float)config.machine_max_acceleration_y.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::Z, (float)config.machine_max_acceleration_z.values.back()); + silent_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::E, (float)config.machine_max_acceleration_e.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::X, (float)config.machine_max_feedrate_x.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Y, (float)config.machine_max_feedrate_y.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::Z, (float)config.machine_max_feedrate_z.values.back()); + silent_time_estimator.set_axis_max_feedrate(GCodeTimeEstimator::E, (float)config.machine_max_feedrate_e.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::X, (float)config.machine_max_jerk_x.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, (float)config.machine_max_jerk_y.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, (float)config.machine_max_jerk_z.values.back()); + silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, (float)config.machine_max_jerk_e.values.back()); + } + if (config.single_extruder_multi_material) { // As of now the fields are shown at the UI dialog in the same combo box as the ramming values, so they // are considered to be active for the single extruder multi-material printers only. @@ -1694,7 +1700,7 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc // Do not process this piece of G-code by the time estimator, it already knows the values through another sources. void GCode::print_machine_envelope(FILE *file, Print &print) { - if (print.config().gcode_flavor.value == gcfMarlin) { + if (print.config().gcode_flavor.value == gcfMarlin && print.config().machine_limits_type.value == MachineLimitsUsage::EmitToGCode) { fprintf(file, "M201 X%d Y%d Z%d E%d ; sets maximum accelerations, mm/sec^2\n", int(print.config().machine_max_acceleration_x.values.front() + 0.5), int(print.config().machine_max_acceleration_y.values.front() + 0.5), diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index ddcadf9281..182cf11930 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -454,6 +454,21 @@ const std::vector& Preset::filament_options() return s_opts; } +const std::vector& Preset::machine_limits_options() +{ + static std::vector s_opts; + if (s_opts.empty()) { + s_opts = { + "machine_max_acceleration_extruding", "machine_max_acceleration_retracting", + "machine_max_acceleration_x", "machine_max_acceleration_y", "machine_max_acceleration_z", "machine_max_acceleration_e", + "machine_max_feedrate_x", "machine_max_feedrate_y", "machine_max_feedrate_z", "machine_max_feedrate_e", + "machine_min_extruding_rate", "machine_min_travel_rate", + "machine_max_jerk_x", "machine_max_jerk_y", "machine_max_jerk_z", "machine_max_jerk_e", + }; + } + return s_opts; +} + const std::vector& Preset::printer_options() { static std::vector s_opts; @@ -468,13 +483,10 @@ const std::vector& Preset::printer_options() "between_objects_gcode", "printer_vendor", "printer_model", "printer_variant", "printer_notes", "cooling_tube_retraction", "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "max_print_height", "default_print_profile", "inherits", - "remaining_times", "silent_mode", "machine_max_acceleration_extruding", "machine_max_acceleration_retracting", - "machine_max_acceleration_x", "machine_max_acceleration_y", "machine_max_acceleration_z", "machine_max_acceleration_e", - "machine_max_feedrate_x", "machine_max_feedrate_y", "machine_max_feedrate_z", "machine_max_feedrate_e", - "machine_min_extruding_rate", "machine_min_travel_rate", - "machine_max_jerk_x", "machine_max_jerk_y", "machine_max_jerk_z", "machine_max_jerk_e", - "thumbnails" + "remaining_times", "silent_mode", + "machine_limits_usage", "thumbnails" }; + s_opts.insert(s_opts.end(), Preset::machine_limits_options().begin(), Preset::machine_limits_options().end()); s_opts.insert(s_opts.end(), Preset::nozzle_options().begin(), Preset::nozzle_options().end()); } return s_opts; diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index e3e16b65dc..5713b25c81 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -218,6 +218,8 @@ public: static const std::vector& printer_options(); // Nozzle options of the printer options. static const std::vector& nozzle_options(); + // Printer machine limits, those are contained in printer_options(). + static const std::vector& machine_limits_options(); static const std::vector& sla_printer_options(); static const std::vector& sla_material_options(); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 93d9cfbcff..f4b0de707e 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1201,6 +1201,21 @@ void PrintConfigDef::init_fff_params() def->mode = comExpert; def->set_default_value(new ConfigOptionBool(true)); + def = this->add("machine_limits_usage", coEnum); + def->label = L("How to apply"); + def->full_label = L("Purpose of Machine Limits"); + def->category = L("Machine limits"); + def->tooltip = L("How to apply the Machine Limits"); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("emit_to_gcode"); + def->enum_values.push_back("time_estimate_only"); + def->enum_values.push_back("ignore"); + def->enum_labels.push_back("Emit to G-code"); + def->enum_labels.push_back("Use for time estimate"); + def->enum_labels.push_back("Ignore"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnum(MachineLimitsUsage::EmitToGCode)); + { struct AxisDefault { std::string name; diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 52e3bc38cf..9151fd8093 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -29,6 +29,13 @@ enum GCodeFlavor : unsigned char { gcfSmoothie, gcfNoExtrusion, }; +enum class MachineLimitsUsage { + EmitToGCode, + TimeEstimateOnly, + Ignore, + Count, +}; + enum PrintHostType { htOctoPrint, htDuet, htFlashAir, htAstroBox }; @@ -102,6 +109,16 @@ template<> inline const t_config_enum_values& ConfigOptionEnum::get return keys_map; } +template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { + static t_config_enum_values keys_map; + if (keys_map.empty()) { + keys_map["emit_to_gcode"] = int(MachineLimitsUsage::EmitToGCode); + keys_map["time_estimate_only"] = int(MachineLimitsUsage::TimeEstimateOnly); + keys_map["ignore"] = int(MachineLimitsUsage::Ignore); + } + return keys_map; +} + template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { static t_config_enum_values keys_map; if (keys_map.empty()) { @@ -597,6 +614,8 @@ class MachineEnvelopeConfig : public StaticPrintConfig { STATIC_PRINT_CONFIG_CACHE(MachineEnvelopeConfig) public: + // Allowing the machine limits to be completely ignored or used just for time estimator. + ConfigOptionEnum machine_limits_type; // M201 X... Y... Z... E... [mm/sec^2] ConfigOptionFloats machine_max_acceleration_x; ConfigOptionFloats machine_max_acceleration_y; @@ -624,6 +643,7 @@ public: protected: void initialize(StaticCacheBase &cache, const char *base_ptr) { + OPT_PTR(machine_limits_type); OPT_PTR(machine_max_acceleration_x); OPT_PTR(machine_max_acceleration_y); OPT_PTR(machine_max_acceleration_z); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 09e29caf92..5392deec99 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1084,6 +1084,8 @@ boost::any& Choice::get_value() m_value = static_cast(ret_enum); else if (m_opt_id.compare("gcode_flavor") == 0) m_value = static_cast(ret_enum); + else if (m_opt_id.compare("machine_limits_usage") == 0) + m_value = static_cast(ret_enum); else if (m_opt_id.compare("support_material_pattern") == 0) m_value = static_cast(ret_enum); else if (m_opt_id.compare("seam_position") == 0) diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 6c76b62272..d822c98736 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -184,6 +184,8 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("gcode_flavor") == 0) config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if (opt_key.compare("machine_limits_usage") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("support_material_pattern") == 0) config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("seam_position") == 0) diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 7080dc11c2..8f593f1f20 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -821,6 +821,9 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config else if (opt_key == "gcode_flavor") { ret = static_cast(config.option>(opt_key)->value); } + else if (opt_key == "machine_limits_usage") { + ret = static_cast(config.option>(opt_key)->value); + } else if (opt_key == "support_material_pattern") { ret = static_cast(config.option>(opt_key)->value); } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 924f3c8bbd..d46413320f 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2510,6 +2510,7 @@ void TabPrinter::build_sla() build_preset_description_line(optgroup.get()); } + /* void TabPrinter::update_serial_ports() { @@ -2556,7 +2557,18 @@ PageShp TabPrinter::build_kinematics_page() { auto page = add_options_page(L("Machine limits"), "cog", true); - if (m_use_silent_mode) { + auto optgroup = page->new_optgroup(L("General")); + { + optgroup->append_single_option_line("machine_limits_usage"); + Line line { "", "" }; + line.full_width = 1; + line.widget = [this](wxWindow* parent) { + return description_line_widget(parent, &m_machine_limits_description_line); + }; + optgroup->append_line(line); + } + + if (m_use_silent_mode) { // Legend for OptionsGroups auto optgroup = page->new_optgroup(""); optgroup->set_show_modified_btns_val(false); @@ -2583,7 +2595,7 @@ PageShp TabPrinter::build_kinematics_page() } std::vector axes{ "x", "y", "z", "e" }; - auto optgroup = page->new_optgroup(L("Maximum feedrates")); + optgroup = page->new_optgroup(L("Maximum feedrates")); for (const std::string &axis : axes) { append_option_line(optgroup, "machine_max_feedrate_" + axis); } @@ -2953,6 +2965,17 @@ void TabPrinter::toggle_options() toggle_option("retract_restart_extra_toolchange", have_multiple_extruders && toolchange_retraction, i); } + if (m_active_page->title() == "Machine limits") { + assert(m_config->option>("gcode_flavor")->value == gcfMarlin); + const auto *machine_limits_usage = m_config->option>("machine_limits_usage"); + bool enabled = machine_limits_usage->value != MachineLimitsUsage::Ignore; + bool silent_mode = m_config->opt_bool("silent_mode"); + int max_field = silent_mode ? 2 : 1; + for (const std::string &opt : Preset::machine_limits_options()) + for (int i = 0; i < max_field; ++ i) + toggle_option(opt, enabled, i); + update_machine_limits_description(machine_limits_usage->value); + } } void TabPrinter::update() @@ -3847,6 +3870,25 @@ void TabPrinter::apply_extruder_cnt_from_cache() } } +void TabPrinter::update_machine_limits_description(const MachineLimitsUsage usage) +{ + wxString text; + switch (usage) { + case MachineLimitsUsage::EmitToGCode: + text = _L("Machine limits will be emitted to G-code and used to estimate print time."); + break; + case MachineLimitsUsage::TimeEstimateOnly: + text = _L("Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, \ + which may herefore not be accurate as the printer may apply a different set of machine limits."); + break; + case MachineLimitsUsage::Ignore: + text = _L("Machine limits are not set, therefore the print time estimate may not be accurate."); + break; + default: assert(false); + } + m_machine_limits_description_line->SetText(text); +} + void Tab::compatible_widget_reload(PresetDependencies &deps) { Field* field = this->get_field(deps.key_condition); diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index a3711f453e..bc396ae304 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -376,10 +376,6 @@ public: Tab(parent, _(L("Print Settings")), Slic3r::Preset::TYPE_PRINT) {} ~TabPrint() {} - ogStaticText* m_recommended_thin_wall_thickness_description_line = nullptr; - ogStaticText* m_top_bottom_shell_thickness_explanation = nullptr; - bool m_support_material_overhangs_queried = false; - void build() override; void reload_config() override; void update_description_lines() override; @@ -388,10 +384,16 @@ public: // void OnActivate() override; void clear_pages() override; bool supports_printer_technology(const PrinterTechnology tech) override { return tech == ptFFF; } + +private: + ogStaticText* m_recommended_thin_wall_thickness_description_line = nullptr; + ogStaticText* m_top_bottom_shell_thickness_explanation = nullptr; + bool m_support_material_overhangs_queried = false; }; class TabFilament : public Tab { +private: ogStaticText* m_volumetric_speed_description_line {nullptr}; ogStaticText* m_cooling_description_line {nullptr}; @@ -418,10 +420,13 @@ public: class TabPrinter : public Tab { +private: bool m_has_single_extruder_MM_page = false; bool m_use_silent_mode = false; void append_option_line(ConfigOptionsGroupShp optgroup, const std::string opt_key); bool m_rebuild_kinematics_page = false; + ogStaticText* m_machine_limits_description_line {nullptr}; + void update_machine_limits_description(const MachineLimitsUsage usage); std::vector m_pages_fff; std::vector m_pages_sla; diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index e7dec9fa81..e43f738c4f 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -809,6 +809,8 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& return get_string_from_enum(opt_key, config, true); if (opt_key == "gcode_flavor") return get_string_from_enum(opt_key, config); + if (opt_key == "machine_limits_usage") + return get_string_from_enum(opt_key, config); if (opt_key == "ironing_type") return get_string_from_enum(opt_key, config); if (opt_key == "support_material_pattern") From 48f775decb0e1609ef4ab356f6a558666db2bfc0 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Fri, 2 Oct 2020 22:27:20 +0200 Subject: [PATCH 027/334] A part of code related to loads after App::OnInit() call is moved from PrusaSlicer.cpp to GUI_App.cpp Splash Screen under OSX requires a call of wxYeild() for update. But wxYield() furthers a case, when CallAfter() in CLI::run() was called at the wrong time, before some of the GUI was created. So, there is workaround: Parameters needed for later loads are encapsulated to GUI_App::AFTER_INIT_LOADS structure and are used in GUI_App::AFTER_INIT_LOADS::on_loads which is called just ones after wxEVT_IDLE --- src/PrusaSlicer.cpp | 7 ++++++ src/slic3r/GUI/GUI_App.cpp | 47 +++++++++++++++++++++++++++++++++++++- src/slic3r/GUI/GUI_App.hpp | 30 ++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index d79196cfa1..6110a3cc7c 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -577,6 +577,12 @@ int CLI::run(int argc, char **argv) // gui->autosave = m_config.opt_string("autosave"); GUI::GUI_App::SetInstance(gui); +#if ENABLE_GCODE_VIEWER + gui->m_after_init_loads.set_params(load_configs, m_extra_config, m_input_files, start_as_gcodeviewer); +#else + gui->m_after_init_loads.set_params(load_configs, m_extra_config, m_input_files); +#endif // ENABLE_GCODE_VIEWER +/* #if ENABLE_GCODE_VIEWER gui->CallAfter([gui, this, &load_configs, start_as_gcodeviewer] { #else @@ -614,6 +620,7 @@ int CLI::run(int argc, char **argv) } #endif // ENABLE_GCODE_VIEWER }); +*/ int result = wxEntry(argc, argv); return result; #else /* SLIC3R_GUI */ diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 409ca0a150..9a32a76b6f 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -123,6 +123,10 @@ public: memDC.SelectObject(wxNullBitmap); set_bitmap(bitmap); +#ifdef __WXOSX__ + // without this code splash screen wouldn't be updated under OSX + wxYield(); +#endif } } @@ -531,6 +535,41 @@ static void generic_exception_handle() } } +void GUI_App::AFTER_INIT_LOADS::on_loads(GUI_App* gui) +{ + if (!gui->initialized()) + return; + +#if ENABLE_GCODE_VIEWER + if (m_start_as_gcodeviewer) { + if (!m_input_files.empty()) + gui->plater()->load_gcode(wxString::FromUTF8(m_input_files[0].c_str())); + } + else { +#endif // ENABLE_GCODE_VIEWER_AS +#if 0 + // Load the cummulative config over the currently active profiles. + //FIXME if multiple configs are loaded, only the last one will have an effect. + // We need to decide what to do about loading of separate presets (just print preset, just filament preset etc). + // As of now only the full configs are supported here. + if (!m_print_config.empty()) + gui->mainframe->load_config(m_print_config); +#endif + if (!m_load_configs.empty()) + // Load the last config to give it a name at the UI. The name of the preset may be later + // changed by loading an AMF or 3MF. + //FIXME this is not strictly correct, as one may pass a print/filament/printer profile here instead of a full config. + gui->mainframe->load_config_file(m_load_configs.back()); + // If loading a 3MF file, the config is loaded from the last one. + if (!m_input_files.empty()) + gui->plater()->load_files(m_input_files, true, true); + if (!m_extra_config.empty()) + gui->mainframe->load_config(m_extra_config); +#if ENABLE_GCODE_VIEWER + } +#endif // ENABLE_GCODE_VIEWER + } + IMPLEMENT_APP(GUI_App) #if ENABLE_GCODE_VIEWER @@ -696,7 +735,6 @@ bool GUI_App::on_init_inner() // create splash screen with updated bmp scrn = new SplashScreen(bmp.IsOk() ? bmp : create_scaled_bitmap("prusa_slicer_logo", nullptr, 400), wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 4000, splashscreen_pos, is_decorated); - wxYield(); scrn->SetText(_L("Loading configuration...")); } @@ -785,6 +823,13 @@ bool GUI_App::on_init_inner() this->obj_manipul()->update_if_dirty(); + static bool update_gui_after_init = true; + if (update_gui_after_init) + { + update_gui_after_init = false; + m_after_init_loads.on_loads(this); + } + // Preset updating & Configwizard are done after the above initializations, // and after MainFrame is created & shown. // The extra CallAfter() is needed because of Mac, where this is the only way diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 9bf470a42d..68c9b2efd8 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -140,6 +140,35 @@ private: std::string m_instance_hash_string; size_t m_instance_hash_int; + // parameters needed for the after OnInit() loads + struct AFTER_INIT_LOADS + { + std::vector m_load_configs; + DynamicPrintConfig m_extra_config; + std::vector m_input_files; +#if ENABLE_GCODE_VIEWER + bool m_start_as_gcodeviewer; +#endif // ENABLE_GCODE_VIEWER + + void set_params( + const std::vector& load_configs, + const DynamicPrintConfig& extra_config, + const std::vector& input_files, +#if ENABLE_GCODE_VIEWER + bool start_as_gcodeviewer +#endif // ENABLE_GCODE_VIEWER + ) { + m_load_configs = load_configs; + m_extra_config = extra_config; + m_input_files = input_files; +#if ENABLE_GCODE_VIEWER + m_start_as_gcodeviewer = start_as_gcodeviewer; +#endif // ENABLE_GCODE_VIEWER + } + + void on_loads(GUI_App* gui); + }; + public: bool OnInit() override; bool initialized() const { return m_initialized; } @@ -236,6 +265,7 @@ public: PresetUpdater* preset_updater{ nullptr }; MainFrame* mainframe{ nullptr }; Plater* plater_{ nullptr }; + AFTER_INIT_LOADS m_after_init_loads; PresetUpdater* get_preset_updater() { return preset_updater; } From 62557921814b27e54fc4e7f672e1545955c19a14 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Sat, 3 Oct 2020 03:15:54 +0200 Subject: [PATCH 028/334] UnsavedChangesDialog improvements: * Changed some labels on buttons. The Dialog name shows a purpose now * SaveDialog is called, when UnsavedChangesDialog is shown. * Added prototype for the "exit" icon + Fixed layout for the "Machine limits" page --- resources/icons/exit.svg | 20 ++++++++ src/slic3r/GUI/GUI_App.cpp | 37 +------------- src/slic3r/GUI/MainFrame.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 25 ++++----- src/slic3r/GUI/UnsavedChangesDialog.cpp | 68 ++++++++++++++++++++++--- src/slic3r/GUI/UnsavedChangesDialog.hpp | 9 ++++ 6 files changed, 102 insertions(+), 59 deletions(-) create mode 100644 resources/icons/exit.svg diff --git a/resources/icons/exit.svg b/resources/icons/exit.svg new file mode 100644 index 0000000000..eca78da625 --- /dev/null +++ b/resources/icons/exit.svg @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 7b3309398f..cfbe4104b1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1526,41 +1526,8 @@ bool GUI_App::check_unsaved_changes(const wxString &header) if (dlg.save_preset()) // save selected changes { - struct NameType - { - std::string name; - Preset::Type type {Preset::TYPE_INVALID}; - }; - - std::vector names_and_types; - - // for system/default/external presets we should take an edited name - std::vector types; - for (Tab* tab : tabs_list) - if (tab->supports_printer_technology(printer_technology) && tab->current_preset_is_dirty()) - { - const Preset& preset = tab->get_presets()->get_edited_preset(); - if (preset.is_system || preset.is_default || preset.is_external) - types.emplace_back(preset.type); - - names_and_types.emplace_back(NameType{ preset.name, preset.type }); - } - - - if (!types.empty()) { - SavePresetDialog save_dlg(types); - if (save_dlg.ShowModal() != wxID_OK) - return false; - - for (NameType& nt : names_and_types) { - const std::string name = save_dlg.get_name(nt.type); - if (!name.empty()) - nt.name = name; - } - } - - for (const NameType& nt : names_and_types) - preset_bundle->save_changes_for_preset(nt.name, nt.type, dlg.get_unselected_options(nt.type)); + for (const std::pair& nt : dlg.get_names_and_types()) + preset_bundle->save_changes_for_preset(nt.first, nt.second, dlg.get_unselected_options(nt.second)); // if we saved changes to the new presets, we should to // synchronize config.ini with the current selections. diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index f5570c5147..3ef5012ee3 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -361,7 +361,7 @@ void MainFrame::update_layout() fromDlg, toDlg }; - State update_scaling_state = m_layout == ESettingsLayout::Unknown ? State::noUpdate : // don't scale settings dialog from the application start + State update_scaling_state = //m_layout == ESettingsLayout::Unknown ? State::noUpdate : // don't scale settings dialog from the application start m_layout == ESettingsLayout::Dlg ? State::fromDlg : layout == ESettingsLayout::Dlg ? State::toDlg : State::noUpdate; #endif //__WXMSW__ diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index d46413320f..c5ac0b9d8a 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3336,17 +3336,8 @@ bool Tab::may_discard_current_dirty_preset(PresetCollection* presets /*= nullptr if (dlg.save_preset()) // save selected changes { - std::vector unselected_options = dlg.get_unselected_options(presets->type()); - const Preset& preset = presets->get_edited_preset(); - std::string name = preset.name; - - // for system/default/external presets we should take an edited name - if (preset.is_system || preset.is_default || preset.is_external) { - SavePresetDialog save_dlg(preset.type); - if (save_dlg.ShowModal() != wxID_OK) - return false; - name = save_dlg.get_name(); - } + const std::vector& unselected_options = dlg.get_unselected_options(presets->type()); + const std::string& name = dlg.get_preset_name(); if (m_type == presets->type()) // save changes for the current preset from this tab { @@ -3358,9 +3349,9 @@ bool Tab::may_discard_current_dirty_preset(PresetCollection* presets /*= nullptr { m_preset_bundle->save_changes_for_preset(name, presets->type(), unselected_options); - /* If filament preset is saved for multi-material printer preset, - * there are cases when filament comboboxs are updated for old (non-modified) colors, - * but in full_config a filament_colors option aren't.*/ + // If filament preset is saved for multi-material printer preset, + // there are cases when filament comboboxs are updated for old (non-modified) colors, + // but in full_config a filament_colors option aren't. if (presets->type() == Preset::TYPE_FILAMENT && wxGetApp().extruders_edited_cnt() > 1) wxGetApp().plater()->force_filament_colors_update(); } @@ -3878,8 +3869,8 @@ void TabPrinter::update_machine_limits_description(const MachineLimitsUsage usag text = _L("Machine limits will be emitted to G-code and used to estimate print time."); break; case MachineLimitsUsage::TimeEstimateOnly: - text = _L("Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, \ - which may herefore not be accurate as the printer may apply a different set of machine limits."); + text = _L("Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, " + "which may herefore not be accurate as the printer may apply a different set of machine limits."); break; case MachineLimitsUsage::Ignore: text = _L("Machine limits are not set, therefore the print time estimate may not be accurate."); @@ -3887,6 +3878,8 @@ void TabPrinter::update_machine_limits_description(const MachineLimitsUsage usag default: assert(false); } m_machine_limits_description_line->SetText(text); + + Layout(); } void Tab::compatible_widget_reload(PresetDependencies &deps) diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index e43f738c4f..68ecd49d1d 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -13,6 +13,7 @@ #include "Tab.hpp" #include "ExtraRenderers.hpp" #include "wxExtensions.hpp" +#include "PresetComboBoxes.hpp" //#define FTS_FUZZY_MATCH_IMPLEMENTATION //#include "fts_fuzzy_match.h" @@ -515,13 +516,13 @@ void UnsavedChangesModel::Rescale() //------------------------------------------ UnsavedChangesDialog::UnsavedChangesDialog(const wxString& header) - : DPIDialog(nullptr, wxID_ANY, _L("Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + : DPIDialog(nullptr, wxID_ANY, _L("Close Aplication: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { build(Preset::TYPE_INVALID, nullptr, "", header); } UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset) - : DPIDialog(nullptr, wxID_ANY, _L("Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + : DPIDialog(nullptr, wxID_ANY, _L("Select New Preset: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { build(type, dependent_presets, new_selected_preset); } @@ -577,12 +578,12 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_ // Add Buttons wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCANCEL); - auto add_btn = [this, buttons](ScalableButton** btn, int& btn_id, const std::string& icon_name, Action close_act, int idx, bool process_enable = true) + auto add_btn = [this, buttons, dependent_presets](ScalableButton** btn, int& btn_id, const std::string& icon_name, Action close_act, int idx, bool process_enable = true) { *btn = new ScalableButton(this, btn_id = NewControlId(), icon_name, "", wxDefaultSize, wxDefaultPosition, wxBORDER_DEFAULT, true); buttons->Insert(idx, *btn, 0, wxLEFT, 5); - (*btn)->Bind(wxEVT_BUTTON, [this, close_act](wxEvent&) { close(close_act); }); + (*btn)->Bind(wxEVT_BUTTON, [this, close_act, dependent_presets](wxEvent&) { close_act == Action::Save ? save_and_close(dependent_presets) : close(close_act); }); if (process_enable) (*btn)->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(!m_empty_selection); }); (*btn)->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { show_info_line(Action::Undef); e.Skip(); }); @@ -596,7 +597,7 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_ dependent_presets->get_edited_preset().printer_technology() == dependent_presets->find_preset(new_selected_preset)->printer_technology() : printers.get_edited_preset().printer_technology() == printers.find_preset(new_selected_preset)->printer_technology() ) ) add_btn(&m_move_btn, m_move_btn_id, "paste_menu", Action::Move, btn_idx++); - add_btn(&m_continue_btn, m_continue_btn_id, "cross", Action::Continue, btn_idx, false); + add_btn(&m_continue_btn, m_continue_btn_id, dependent_presets ? "cross" : "exit", Action::Continue, btn_idx, false); m_info_line = new wxStaticText(this, wxID_ANY, ""); m_info_line->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold()); @@ -667,7 +668,7 @@ void UnsavedChangesDialog::show_info_line(Action action, std::string preset_name if (action == Action::Undef) text = _L("Some fields are too long to fit. Right click on it to show full text."); else if (action == Action::Continue) - text = _L("All changed options will be reverted."); + text = _L("All modified options will be reverted."); else { std::string act_string = action == Action::Save ? _u8L("save") : _u8L("move"); if (preset_name.empty()) @@ -692,6 +693,58 @@ void UnsavedChangesDialog::close(Action action) this->EndModal(wxID_CLOSE); } +void UnsavedChangesDialog::save_and_close(PresetCollection* dependent_presets) +{ + names_and_types.clear(); + + // save one preset + if (dependent_presets) { + const Preset& preset = dependent_presets->get_edited_preset(); + std::string name = preset.name; + + // for system/default/external presets we should take an edited name + if (preset.is_system || preset.is_default || preset.is_external) { + SavePresetDialog save_dlg(preset.type); + if (save_dlg.ShowModal() != wxID_OK) + return; + name = save_dlg.get_name(); + } + + names_and_types.emplace_back(make_pair(name, preset.type)); + } + // save all presets + else + { + std::vector types_for_save; + + PrinterTechnology printer_technology = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); + + for (Tab* tab : wxGetApp().tabs_list) + if (tab->supports_printer_technology(printer_technology) && tab->current_preset_is_dirty()) { + const Preset& preset = tab->get_presets()->get_edited_preset(); + if (preset.is_system || preset.is_default || preset.is_external) + types_for_save.emplace_back(preset.type); + + names_and_types.emplace_back(make_pair(preset.name, preset.type)); + } + + + if (!types_for_save.empty()) { + SavePresetDialog save_dlg(types_for_save); + if (save_dlg.ShowModal() != wxID_OK) + return; + + for (std::pair& nt : names_and_types) { + const std::string& name = save_dlg.get_name(nt.second); + if (!name.empty()) + nt.first = name; + } + } + } + + close(Action::Save); +} + template wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false) { @@ -866,11 +919,11 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent } m_continue_btn ->Bind(wxEVT_ENTER_WINDOW, [this] (wxMouseEvent& e) { show_info_line(Action::Continue); e.Skip(); }); - m_continue_btn->SetLabel(_L("Continue without changes")); if (type == Preset::TYPE_INVALID) { m_action_line ->SetLabel(header + "\n" + _L("Next presets have the following unsaved changes:")); m_save_btn ->SetLabel(_L("Save selected")); + m_continue_btn ->SetLabel(_L("Close aplication without changes")); } else { wxString action_msg; @@ -891,6 +944,7 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent } m_action_line->SetLabel(from_u8((boost::format(_utf8(L("Preset \"%1%\" %2%"))) % _utf8(presets->get_edited_preset().name) % action_msg).str())); m_save_btn->SetLabel(from_u8((boost::format(_u8L("Save selected to preset: %1%")) % ("\"" + presets->get_selected_preset().name + "\"")).str())); + m_continue_btn->SetLabel(_L("Select new preset without changes")); } update_tree(type, presets); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.hpp b/src/slic3r/GUI/UnsavedChangesDialog.hpp index f78a1fec0e..a50a5f4804 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.hpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.hpp @@ -227,6 +227,9 @@ class UnsavedChangesDialog : public DPIDialog // tree items related to the options std::map m_items_map; + // preset names which are modified in SavePresetDialog and related types + std::vector> names_and_types; + public: UnsavedChangesDialog(const wxString& header); UnsavedChangesDialog(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset); @@ -241,11 +244,17 @@ public: void context_menu(wxDataViewEvent &event); void show_info_line(Action action, std::string preset_name = ""); void close(Action action); + void save_and_close(PresetCollection* dependent_presets); bool save_preset() const { return m_exit_action == Action::Save; } bool move_preset() const { return m_exit_action == Action::Move; } bool just_continue() const { return m_exit_action == Action::Continue; } + // get full bundle of preset names and types for saving + const std::vector>& get_names_and_types() { return names_and_types; } + // short version of the previous function, for the case, when just one preset is modified + std::string get_preset_name() { return names_and_types[0].first; } + std::vector get_unselected_options(Preset::Type type); std::vector get_selected_options(); From 2b24a210982fe129b8f29cfd600ec7395aab28fa Mon Sep 17 00:00:00 2001 From: David Kocik Date: Sun, 4 Oct 2020 21:11:07 +0200 Subject: [PATCH 029/334] Correct strings in configWizard --- src/slic3r/GUI/ConfigWizard.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index cfc81f5a7d..ce2ea42e13 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -647,7 +647,6 @@ void PageMaterials::on_mouse_move_on_profiles(wxMouseEvent& evt) const wxClientDC dc(list_profile); const wxPoint pos = evt.GetLogicalPosition(dc); int item = list_profile->HitTest(pos); - //BOOST_LOG_TRIVIAL(debug) << "hit test: " << item; on_material_hovered(item); } void PageMaterials::on_mouse_enter_profiles(wxMouseEvent& evt) @@ -661,7 +660,7 @@ void PageMaterials::reload_presets() clear(); list_printer->append(_(L("(All)")), &EMPTY); - list_printer->SetLabelMarkup("bald"); + //list_printer->SetLabelMarkup("bald"); for (const Preset* printer : materials->printers) { list_printer->append(printer->name, &printer->name); } @@ -680,7 +679,6 @@ void PageMaterials::reload_presets() void PageMaterials::set_compatible_printers_html_window(const std::vector& printer_names, bool all_printers) { - //Slic3r::GUI::wxGetApp().dark_mode() const auto bgr_clr = #if defined(__APPLE__) wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); @@ -690,9 +688,10 @@ void PageMaterials::set_compatible_printers_html_window(const std::vector" "