From b64b1bb186a7461f6245fa5bbd23c0f8bb7ba316 Mon Sep 17 00:00:00 2001 From: Lasan Mahaliyana Date: Tue, 10 Mar 2026 00:12:48 +0530 Subject: [PATCH] updated desktop icon. rerouted all stdout and stderr logs to logfile --- .../workflows/release-nearby-qml-tray.yaml | 2 +- sharing/linux/qml_tray_app/README.md | 7 +- .../file_share_tray_controller.cc | 90 +----------------- .../qml_tray_app/file_share_tray_controller.h | 5 - .../qml_tray_app/file_share_tray_main.cpp | 62 ++++++++++++ .../qml_tray_app/install_nearby_file_share.sh | 7 +- .../qml_tray_app/nearby-linux-desktop.png | Bin 0 -> 46351 bytes 7 files changed, 78 insertions(+), 95 deletions(-) create mode 100644 sharing/linux/qml_tray_app/nearby-linux-desktop.png diff --git a/.github/workflows/release-nearby-qml-tray.yaml b/.github/workflows/release-nearby-qml-tray.yaml index f055dfed..1b569d3d 100644 --- a/.github/workflows/release-nearby-qml-tray.yaml +++ b/.github/workflows/release-nearby-qml-tray.yaml @@ -115,7 +115,7 @@ jobs: "$STAGING/install_nearby_file_share.sh" install -m 0644 sharing/linux/qml_tray_app/nearby-file-share.desktop \ "$STAGING/share/applications/nearby-file-share.desktop" - install -m 0644 sharing/linux/qml_tray_app/tray_icon.png \ + install -m 0644 sharing/linux/qml_tray_app/nearby-linux-desktop.png \ "$STAGING/share/icons/hicolor/256x256/apps/nearby-file-share.png" install -m 0644 sharing/linux/nearby_sharing_api.h \ "$STAGING/include/sharing/linux/nearby_sharing_api.h" diff --git a/sharing/linux/qml_tray_app/README.md b/sharing/linux/qml_tray_app/README.md index d2ff955f..df4b5ce1 100644 --- a/sharing/linux/qml_tray_app/README.md +++ b/sharing/linux/qml_tray_app/README.md @@ -8,7 +8,7 @@ app for file sharing via Nearby Sharing, wired to: - Receive mode (incoming requests + accept/reject) - Transfer status list (progress + transfer status) - Persistent tray behavior (window close hides app to tray) -- File logging to `/tmp/nearby_qml_file_tray.log` +- Process log redirection to file (`stdout`/`stderr`) ## Files @@ -31,7 +31,10 @@ app for file sharing via Nearby Sharing, wired to: - Shows pending incoming transfer requests. - Lets you accept/reject incoming requests. - Transfers are shown with target, direction, status, and progress. -- Logs are appended to `/tmp/nearby_qml_file_tray.log`. +- `stdout` and `stderr` are redirected at startup to the configured `logPath` + setting. +- Default log path is `/tmp/nearby_qml_file_tray.log` when `logPath` is unset. +- If `logPath` is changed from Settings, restart the app to apply redirection. ## Building diff --git a/sharing/linux/qml_tray_app/file_share_tray_controller.cc b/sharing/linux/qml_tray_app/file_share_tray_controller.cc index 9c602623..4a3f265c 100644 --- a/sharing/linux/qml_tray_app/file_share_tray_controller.cc +++ b/sharing/linux/qml_tray_app/file_share_tray_controller.cc @@ -1,11 +1,9 @@ #include "file_share_tray_controller.h" -#include #include #include #include #include -#include #include namespace { @@ -26,15 +24,10 @@ FileShareTrayController::FileShareTrayController(QObject* parent) LoadSettings(); CreateService(); - ReopenLogFile(); - LogLine(QStringLiteral("Started file share tray controller")); } FileShareTrayController::~FileShareTrayController() { stop(); - if (log_file_.isOpen()) { - log_file_.close(); - } } void FileShareTrayController::CreateService() { @@ -55,9 +48,6 @@ void FileShareTrayController::AttachServiceListeners() { QString::fromStdString(info.device_name), QStringLiteral("Unknown device")); UpsertTarget(info.id, name, info.is_incoming); - LogLine(QStringLiteral("Target discovered id=%1 name=%2") - .arg(info.id) - .arg(name)); }, Qt::QueuedConnection); }; @@ -70,9 +60,6 @@ void FileShareTrayController::AttachServiceListeners() { QString::fromStdString(info.device_name), QStringLiteral("Unknown device")); UpsertTarget(info.id, name, info.is_incoming); - LogLine(QStringLiteral("Target updated id=%1 name=%2") - .arg(info.id) - .arg(name)); }, Qt::QueuedConnection); }; @@ -82,7 +69,6 @@ void FileShareTrayController::AttachServiceListeners() { this, [this, share_target_id]() { RemoveTarget(share_target_id); - LogLine(QStringLiteral("Target lost id=%1").arg(share_target_id)); }, Qt::QueuedConnection); }; @@ -119,18 +105,7 @@ void FileShareTrayController::AttachServiceListeners() { NearbySharingApi::TransferStatus::kAwaitingLocalConfirmation) { if (auto_accept_incoming_) { service_->Accept( - update.share_target_id, - [this, id = update.share_target_id]( - NearbySharingApi::StatusCode result) { - QMetaObject::invokeMethod( - this, - [this, id, result]() { - LogLine(QStringLiteral("Accept(%1): %2") - .arg(id) - .arg(StatusToString(result))); - }, - Qt::QueuedConnection); - }); + update.share_target_id, [](NearbySharingApi::StatusCode) {}); } } @@ -233,7 +208,6 @@ void FileShareTrayController::setDeviceName(const QString& device_name) { device_name_ = trimmed; emit deviceNameChanged(); SaveSettings(); - LogLine(QStringLiteral("Device name changed to %1").arg(device_name_)); CreateService(); if (was_running) { @@ -254,7 +228,6 @@ void FileShareTrayController::setLogPath(const QString& path) { log_path_ = trimmed; emit logPathChanged(); SaveSettings(); - ReopenLogFile(); } void FileShareTrayController::start() { @@ -280,33 +253,9 @@ void FileShareTrayController::stop() { running_ = false; emit runningChanged(); - service_->StopSendMode([this](NearbySharingApi::StatusCode status) { - QMetaObject::invokeMethod( - this, - [this, status]() { - LogLine(QStringLiteral("StopSendMode: %1").arg(StatusToString(status))); - }, - Qt::QueuedConnection); - }); - - service_->StopReceiveMode([this](NearbySharingApi::StatusCode status) { - QMetaObject::invokeMethod( - this, - [this, status]() { - LogLine( - QStringLiteral("StopReceiveMode: %1").arg(StatusToString(status))); - }, - Qt::QueuedConnection); - }); - - service_->Shutdown([this](NearbySharingApi::StatusCode status) { - QMetaObject::invokeMethod( - this, - [this, status]() { - LogLine(QStringLiteral("Shutdown: %1").arg(StatusToString(status))); - }, - Qt::QueuedConnection); - }); + service_->StopSendMode([](NearbySharingApi::StatusCode) {}); + service_->StopReceiveMode([](NearbySharingApi::StatusCode) {}); + service_->Shutdown([](NearbySharingApi::StatusCode) {}); discovered_targets_.clear(); discovered_row_by_target_.clear(); @@ -333,7 +282,6 @@ void FileShareTrayController::switchToReceiveMode() { if (mode_ != QStringLiteral("Receive")) { mode_ = QStringLiteral("Receive"); emit modeChanged(); - LogLine(QStringLiteral("Mode changed to Receive")); if (running_) { stop(); start(); @@ -372,7 +320,6 @@ void FileShareTrayController::switchToSendModeWithFile(const QString& file_path) if (mode_ != QStringLiteral("Send")) { mode_ = QStringLiteral("Send"); emit modeChanged(); - LogLine(QStringLiteral("Mode changed to Send")); if (running_) { stop(); start(); @@ -416,9 +363,6 @@ void FileShareTrayController::sendPendingFileToTarget(qlonglong share_target_id) this, [this, share_target_id, status]() { const QString target_name = TargetName(share_target_id); - LogLine(QStringLiteral("SendFile(%1): %2") - .arg(share_target_id) - .arg(StatusToString(status))); if (status == NearbySharingApi::StatusCode::kOk) { SetStatus(QStringLiteral("Sending %1 to %2") .arg(pending_send_file_name_, target_name)); @@ -455,7 +399,6 @@ void FileShareTrayController::startSendMode() { this, [this, status]() { SetStatus(QStringLiteral("StartSendMode: %1").arg(StatusToString(status))); - LogLine(QStringLiteral("StartSendMode: %1").arg(StatusToString(status))); if (status != NearbySharingApi::StatusCode::kOk) { running_ = false; emit runningChanged(); @@ -472,8 +415,6 @@ void FileShareTrayController::startReceiveMode() { [this, status]() { SetStatus( QStringLiteral("StartReceiveMode: %1").arg(StatusToString(status))); - LogLine( - QStringLiteral("StartReceiveMode: %1").arg(StatusToString(status))); if (status != NearbySharingApi::StatusCode::kOk) { running_ = false; emit runningChanged(); @@ -570,7 +511,6 @@ void FileShareTrayController::SetStatus(const QString& status) { } status_message_ = status; emit statusMessageChanged(); - LogLine(QStringLiteral("Status: %1").arg(status_message_)); } bool FileShareTrayController::HasActiveTransfers() const { @@ -587,28 +527,6 @@ bool FileShareTrayController::HasActiveTransfers() const { return false; } -void FileShareTrayController::LogLine(const QString& line) { - if (!log_file_.isOpen()) { - ReopenLogFile(); - } - if (!log_file_.isOpen()) { - return; - } - - QTextStream stream(&log_file_); - stream << QDateTime::currentDateTimeUtc().toString(Qt::ISODate) << " " << line - << "\n"; - stream.flush(); -} - -void FileShareTrayController::ReopenLogFile() { - if (log_file_.isOpen()) { - log_file_.close(); - } - log_file_.setFileName(log_path_); - log_file_.open(QIODevice::Append | QIODevice::Text | QIODevice::WriteOnly); -} - QString FileShareTrayController::StatusToString(NearbySharingApi::StatusCode status) { return QString::fromStdString(NearbySharingApi::StatusCodeToString(status)); } diff --git a/sharing/linux/qml_tray_app/file_share_tray_controller.h b/sharing/linux/qml_tray_app/file_share_tray_controller.h index a1563ae6..031ffb1c 100644 --- a/sharing/linux/qml_tray_app/file_share_tray_controller.h +++ b/sharing/linux/qml_tray_app/file_share_tray_controller.h @@ -3,7 +3,6 @@ #include -#include #include #include #include @@ -99,8 +98,6 @@ class FileShareTrayController : public QObject { void SetStatus(const QString& status); bool HasActiveTransfers() const; - void LogLine(const QString& line); - void ReopenLogFile(); static QString StatusToString(NearbySharingApi::StatusCode status); static QString TransferStatusToString(NearbySharingApi::TransferStatus status); @@ -127,8 +124,6 @@ class FileShareTrayController : public QObject { QVariantList transfers_; QHash transfer_row_by_target_; - - QFile log_file_; }; #endif // SHARING_LINUX_QML_TRAY_APP_FILE_SHARE_TRAY_CONTROLLER_H_ diff --git a/sharing/linux/qml_tray_app/file_share_tray_main.cpp b/sharing/linux/qml_tray_app/file_share_tray_main.cpp index 03e08571..46df1109 100644 --- a/sharing/linux/qml_tray_app/file_share_tray_main.cpp +++ b/sharing/linux/qml_tray_app/file_share_tray_main.cpp @@ -1,6 +1,9 @@ #include #include +#include +#include #include +#include #include #include #include @@ -8,13 +11,70 @@ #include #include #include +#include #include #include +#include +#include + #include "file_share_tray_controller.h" namespace { +constexpr char kDefaultLogPath[] = "/tmp/nearby_qml_file_tray.log"; + +bool EnsureLogDirectory(const QString& file_path) { + const QFileInfo file_info(file_path); + QDir directory = file_info.absoluteDir(); + if (directory.exists()) { + return true; + } + return directory.mkpath(QStringLiteral(".")); +} + +bool RedirectStdStreamsToFile(const QString& file_path) { + const QByteArray encoded_path = QFile::encodeName(file_path); + const int fd = ::open(encoded_path.constData(), O_CREAT | O_APPEND | O_WRONLY, 0644); + if (fd < 0) { + return false; + } + + const bool redirected_stdout = ::dup2(fd, STDOUT_FILENO) >= 0; + const bool redirected_stderr = ::dup2(fd, STDERR_FILENO) >= 0; + ::close(fd); + return redirected_stdout && redirected_stderr; +} + +QString ResolveConfiguredLogPath() { + QSettings settings(QStringLiteral("Nearby"), QStringLiteral("QmlFileTrayApp")); + const QString configured_path = + settings.value(QStringLiteral("logPath"), + QString::fromLatin1(kDefaultLogPath)) + .toString() + .trimmed(); + if (configured_path.isEmpty()) { + return QString::fromLatin1(kDefaultLogPath); + } + return configured_path; +} + +void RedirectProcessLogsToConfiguredPath() { + QString log_path = ResolveConfiguredLogPath(); + if (EnsureLogDirectory(log_path) && RedirectStdStreamsToFile(log_path)) { + return; + } + + const QString fallback_path = QString::fromLatin1(kDefaultLogPath); + if (log_path == fallback_path) { + return; + } + if (!EnsureLogDirectory(fallback_path)) { + return; + } + RedirectStdStreamsToFile(fallback_path); +} + QIcon BuildTintedSymbolicIcon(const QString& source, const QColor& color) { QIcon source_icon(source); if (source_icon.isNull()) { @@ -46,6 +106,8 @@ QIcon BuildTintedSymbolicIcon(const QString& source, const QColor& color) { } // namespace int main(int argc, char* argv[]) { + RedirectProcessLogsToConfiguredPath(); + QApplication app(argc, argv); app.setQuitOnLastWindowClosed(false); diff --git a/sharing/linux/qml_tray_app/install_nearby_file_share.sh b/sharing/linux/qml_tray_app/install_nearby_file_share.sh index 5079fd44..91fa408c 100755 --- a/sharing/linux/qml_tray_app/install_nearby_file_share.sh +++ b/sharing/linux/qml_tray_app/install_nearby_file_share.sh @@ -71,7 +71,12 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BIN_SRC="$SCRIPT_DIR/bin/nearby_qml_file_tray_app" LIB_SRC="$SCRIPT_DIR/lib/libnearby_sharing_api_shared.so" DESKTOP_SRC="$SCRIPT_DIR/share/applications/nearby-file-share.desktop" -ICON_SRC="$SCRIPT_DIR/share/icons/hicolor/256x256/apps/nearby-file-share.png" +ICON_SRC_STAGED="$SCRIPT_DIR/share/icons/hicolor/256x256/apps/nearby-file-share.png" +ICON_SRC_FALLBACK="$SCRIPT_DIR/nearby-linux-desktop.png" +ICON_SRC="$ICON_SRC_STAGED" +if [[ ! -f "$ICON_SRC" && -f "$ICON_SRC_FALLBACK" ]]; then + ICON_SRC="$ICON_SRC_FALLBACK" +fi HEADER_SRC="$SCRIPT_DIR/include/sharing/linux/nearby_sharing_api.h" for required in "$BIN_SRC" "$LIB_SRC" "$DESKTOP_SRC" "$ICON_SRC"; do diff --git a/sharing/linux/qml_tray_app/nearby-linux-desktop.png b/sharing/linux/qml_tray_app/nearby-linux-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..2273e633c9787b5875bd9148cdd648e9a5bb56cb GIT binary patch literal 46351 zcmb?@1yq#l{xvFyV4$FMh~fa!<q^omvns(o^$Vsd(J)Q-2btmz7rAAnYzQDMbvKEQ7HK=_#3RX>Gl? zElz^@ZE50zT~f%G{uVI3UNN^7&lvXn%It-)oQ+D->s&-PpFGKksY3rPpH(PlT%x8DXv*V$^}#!JrW*O) zUe8PS<~tdpjG!S1(nYYfRKDZLK9wBqSYcU}c=&T!>w$1pE@y|55jdAwYZ$!yF7 z>#QX#Ct{-oHs6arx*b2vIwr|uq4zF79_f6$yn``u%vLXgq9@|@eGPcR)>o?zm*7iMJWZOssSLAB49g`42q&JxzwYGStK?_n*_$K!z$ z7aw!lkV}sWzh7r|p<9=#S|e&xNMN_XRj*?y;@R=EM0#kNM>GOyy@?H{nQFEW4`FDz z@&LcD4~e39>?J0ium22zr2F7$DRsHM082{15ZL{V)bLvQE#$(h^)SkSs=gg*OC|y& zHDE+oqj_euCk%lk!oWTVJ#@3Bhri%{U*&bDWwSwqF$mQii$JGe4IIdC;L$Fv@qfM6L9EEYWm zbsM$RP~f;Qu$zByIH3rnjSyTjEM@;vGXpe+K}LV9y>5wW-e`^8y#nzKWF%kWy~GvuWJ+ES}e#gFbn^cw`)O?T@aQa zhR}qIj|C7Kt%6)%TKJ$UNeuCwXcYovq9YhJ9x??t>OOq(2WF%B|IS5zxTY-zHj{;+ zh!C^6`Q{eSrP-ClI#T0>b2WY?N2;^N56?nl9c`q7QK#li@n#2z0PxX+PUl{_TZbDWVJ>b$r^gHV z8eBJSvpYivRhe9{x!DeXs#o0ZX(vp8TygW4=bswA`Yd&H^zLF)47%k+UjtgDkPe!r ztmP9n5sYdHPT*d)e6Sg?&g+wAwEp^g05bvNyeJ44JT0TYGUnN*)_{0kA|Es$(_FVw zoz16Yc}zlxpc>CFfAQT9>7t^mhNifRH&i_KkrOI{QCA1DkXDyBuPrl-4 z;pAVU@_v=9Ao%PWnw4h>`Sin%-L(%aRJRiuR-}}qY%hf!fQ18Luf31 z6HDm>@k_8;T#1ftXTB@bVTw;$FanWsR~;+;zBVJe6+$@f6hK?-6BRJ=+{h%P%`WO5 z-pr3`D)&_3ccDFIRla&_ndT7@#O`$y!LoK7Fy z%msY~153$C6wDUqswzH()=7T-r(q95otp3Mj);HI|E~jJ{@ag#w~_g3qTZfU!Z!i9 z<_0eTVp?$pVYKb;9OwB@!hRNkw8|Wt^~iBQevZ3d(Q_^GPP&#f9B&pEPeKdTr-+UX z)grX@m43ABU+ERblk3a*?0kB&9BL~HicW+8S&M3dg`>}RALf93(NX)tBqo7Q;~Df! z*~OSIXcde!2DZ);-N*pNem%?eLBVt0XatcFlrbZA1ASq9q6Gu~30#@UP|HS$g`pL# zqQdO%ihea>?TYR#bA<2;$*qH@dx(Ku?d&!&b0a{U2<)o6F|^(vDw<7Z9>c@ylDDa( zKoc4=$D3sqv;Fg4$EXgc{4#Xg(`!)&G<$-zzErumAe{0uTIJE76}uM*d1B>4YX~pLZfm8Ac8fei&t?_KLJOQ(vxD3L$LS9 zx#Vvi@8TafCQt| zOq9$GoprtK|5g&dAX60>W$?&RFla)n^k%<`B&@};oN4*g`8^P?;}PTN~04Q+7XLsXs!I1AK7G zrNI$T5%YgEN=-rEfpW5(hh$=Wa|_zF6x{(N{qUF1m)ZaeUjTuyIr+>@RpBmaGcA;C zXlKOy5E;_zHD2jK)Sm*4FpCZv^ZG@@uMjdQyxZ4}v@}X5IsXhPDRwc3Be=}S_U3CJ zU}UmKf6DCc0d5Cm9emHGiI|HPlz`c`IDmrrD;~{H40On`|8+`eN^_{)2_}md9%-+n zhxS=`)i*7>w^5LSDg0*%x>E}~I@B@9?%vOH!J3I19Fyzf^XMzI&=~8#Oi^c8r0X3| z(?u}jCTu5tj}e6Y#1&0nc8&+5?5r`cXAXw7)j!TAtyrG`!5Vhj{vV#HAl2Il^aSjH zPOf8l{A%q}fb#wr@A9qfJ0Y#IRQ0sTqh1x9i4uTQmTy!yQwE`0gtK3(rW0P#0muqK zsUYjg&<2gOWpB`_7BLsB08RPutTZKedC7jmSO^|&EX2-8n;_6FKrayivB#UK3c)FT zf9dzF!chH&SCp#}0>6OSjFvBG?B~BT(Ek;xf*fgP7eg%wC^)Q&$Kgm%;hC*lAyN@J zvVZIti3vjh3uqDXrNJnY;zNQp?gdKAsJ&4!+8xvyN0Y@M$j-Ys_cQ-6GrJmHm9zH- zDl$5vYE~1f8wbo^#o8j5O*?dz&S*DEYHd3zi9I>g(`FCdG9gyENlmE9#P~+S4 zW<+IYMpZn>_9g+Mz|}A-Cd2sV&p6w@W;;JLpf0d#(1WM`ANLhS%nf%$p)r3pm~wLh z@V|I0Nk^o-&s{CZ9gwXANEhxlo!;BXVTQ%|63m~IG66tWQ4tj6RJx|m*yl4?65G)! zL5*RO}FbF-Ci#_xPGM`)8;?3^K5g-PCV-mj0wlL@)ONPu4FcrY-vMtbTkrVq zi$GjEE4Rt$j}Uc>B){$o-U$xg#Ghfc!n>!yevNE?mE>jTE3b8Sf#P$Yxdx}k%ORB- zf>ieuqQFdmdgs+81dOuZPkpZ{Pj;)A)DHicDf5cqQPy)^wc~`4w<73wUeiX)CdHZv=_wnQ7 zQio*ypC!Vlt}n^)_VDnQS=8EU#G@h%%n?#|sLaG*E;y<<8wwozDRL0A(O=OvfLiWq z-@*wCGIs`EMq{t;`QWiky%j6fr-X@~!o1 z%MUtMDJ~nl`EMCY;?$vFf1Mn;$E#{ME(eMtfaVw;culHGKtehGtaTG z@GWnroLa3*hx*jbb!^cu`qbZ;USZ3xjqz_$Y|Ent#U@i0w)iCJQUnsej6alST7|kC z{s3^i2Q+@L;=4_gKUZXr=CF>173ei!?CgZ9f>Hj*(!{Uu6tPCXp3L>jpKa3}kZjVQ zB$I*G2ZpP51(;O#@!aSakkAmi==zWIuW0Vw z$0wO3*p)fU2Zi(qnfx7q>Z{{EL>!}cOD07NC|KhiTJWZ$=l81kDxI)^dM_Z*#GUp&fwW{4~o}~0g>*l zMq~Li_~DKwHsEt(cYsP%8Xp$SyEY0G*?tib5a@@!-~{3$zm2Z^H){5CrE0uE)nPvu z+aEkP3-dgoZt(t4+oyw)-NUnq|H(W8#F{mwNBmu^rasS_k+~lRb{xnZc?W3uAs~zR z-8siIX1jPa)WFmr}!HK3wCMy_1HUt^=Tl;pKWC496zMXE$4k9v4$hqR5s ziST+OS44Phxnw@G9Qn{wJ+ot z7y#XW@uUJ}Cv)@}_owRtn|RisHF?9K|Bt53?+rNdeUjYoh%fA5_x=I*W_y$PrM^cv=jBEh99(?=b=*bFA+! zUmMWaeFEiQ>0K|#G6brT>pdD@PAtW$$Dn*i@^jMse=BcWH;d;=%4#0&yqf)Ug1-aJ z{|~89KU(FXOX$q1#F`}l5Z^NszkoEZ;=_*g9(++7| zkE;ZD^d<&qUnlq%qrdDafPgarS&sae67jz#WN9d#ZGCz3{}MH+Yz=m!o(S)xYjD8= zkV@|3B5=WtQXoDwIuE<|{v-*nwX3!fjaU|U4=q{06mUbbeV0heEj#O19lo<2p0;Qn`zCoFvjt;b z?dxV40x30R&=X<(`}*U_JMkae1q=N6_YxJ#gR1*p zV>9m3pMrESGHC#Kf~Wf1RW~c72t99ES+;Sk%?YF=qh6Tx#(y>#^B=3Ud+&&GU~b0z z=rBTU#hVNBEVNKgu=@DVDqH{?)`baAmqpT~=G;$!&!EghltO4EEgXaY87dW5!n4KO zd%&=NXE^*B`ve2AsH|a)E|I}rv;ib=Om2LjB+~0Q5?K=W;f|Q)RK&<#u$!d1whzaT z`%W4dmhRnHHdOx=ExBQH*X-OchJ~N0H_++n#twma-46u)KR<3Npf?u`v>bm~ll?x8 z|90wPzF`=$J1xsYh6fK5_#EM?;QSCJ`|xko>pyz#^OLiHlIO_KSY@V^V%6azL8-!T$dRxd!&3 ztf4-+f`!BR{)&Rp8=ad?EbQZJgWT1S`^AG^bgdhAB0p2;OH2hY)*5o)yoLW$(P5# zzW5LJf|{53^naipsqA*zLDyOpJli!5g!SUf%1EyqK-nDe%D;yPe^9-t0wyW!RyIxC zzi24Rut4trT#L~`#Y_OD*aAm6b_TS!IhLv$1z4^hk~ZO=_o!nnu<#g@%Do#r^cvV7 zzL;O&yDQ!DFC07a+v{{74g8{){sa;Z+trYR0G_RnhIf7s9J+qWpuyPhMYV{DL*LT# zr<8_(K%3QIhJ#UY7|)n^BGXFWyfn_O+n3#gTC*Np3dGslo_WJ~BvI0^qKmfh2AXi5 zVlg`HyAjPne_D2+B%OtBUi>n8KH_%$yg#uXxl&D&X;2|9jG4Y9Ri@r-_a9}H-OHV$O<*`A|N849b&(yDX_S6!}J45&5 zQ}2f+V@`$8O`3QG_pwTrzO>Ua5(-LcWMJrkRPa6wgIeH~88-%EE;$VNu~=0&-MQfx zydugb?^T(tyhm(^_d3y<f~3M7X?Nyf5-oyDt|(W|7`4p?zSmLBt%37Yk~izIe}1!s~-n`MVy?H0Gg& z+;c0~cr6uy1S(b9;%3j>qT2);kt54C6oOA_RjyQzsIQ+_W+mB z=TamrJGR2ut!L5a1Vzl_dM-)f(JCSufVsMi!&jqNT3R?a@>X zzjHH&Mqo)FyXfJiXhdhzG50+H&$f(i_K=y2*T^kVL@nU)1`}ICZZ0G`?PrF@z%ocB z#5B*BET=gL7Y5pA$x(o5ZKyBLo7mym7^r3nD?N8k!z;F!r0Rc)4F)FXAFbOA^EB$e zWZ!}g6J014QWz;ZEdyFd6)y&sPN0YCA2{Dbt9+JrF4-T#b;q3no6Ux-q#%@C@X-e; znuXN6@|IV{aLKB535;+tpXtB>;@!G$bfGLXgLh*1YhN!@Jui0M{erf{vn8ga?*nb! z3YTNsB$}b%js{cQ@4fk{@*wKvu6crqM2~YAdu_|jULgT3te-)9S_ucR2Uv0eR8*s( zI{Pv~nojYflXE2Ss8uem(K(xcRLJkz7=Z+A^hhStzuj9pJ5K+w)XB*{a;klN@Pf9K zglix>_zGenKT=%CSP6iQDRQt^OVSsypKROZq5|#2tgjldP zW|WY>0)k|F{;W`Bdf^DWxE8jA*XYvzxI^=nstF!4!milvx{LmXY4WA>3re6ZuP403 zNCCw_L}zX4Es9vS?|3?=zSob8;Hmv0c-&YqaC3TnIp^(6X(RH!#g*BZH)&?ISySDH z5kTT-8UDcBPU4{vM-l?rx$=$jToAnU037Ax-K&1CGCfm+Ab zAfR94i!;Z}Dub=u2@(*~*m~t18jx!k-)ksRN%MX2&c(OO!gIMi621r|m0@&IBZCl} zEo5h2&CYe5zxNpnKRn!oh5+e71fwz!#5eJ5-7Y)t(>M!_fkK%2H> zwraG$j2PZ=zmukzY%`!kh*^fWG*|GxA1i_Vxc&0xdqg{0MG>a6_q+}k&XsygYjVwj z03po%kFnQyhN^=X=WZNNO?howFx}Q#p%X8IbkV!DHaEf(4?INUq7cesKmkGx3e~uL_~ql?|V7eA@~iA(5dcD4@Ze5;KJVEd>+%A z^WC)R4nD&N4VW^(MR@Za`v3Uhd3wLp&K2pE6-_t9k9?WgOe?~)zJ=!O&b7XQ2^8w= zOw1TvU@y`pyVYm;{r#a4bIR&^js9m?ngBpU#Lf8zYa>xHOvalG~Eic zNKF8y2$`K%t~Xh6R$XsV9vPB8kj3nGGkw(tl7PWu5o%HVqs}qQ;*QiM;5@VV>>o;R zY~$`uifNmKlEWAYY-}Kr1bmO zm>`rS5q{kDd3ospgV|SV(psfxy#!;okK0{`tGA6n6x$otAG+dYzzOI{>VCZ)0Xw)TFh6)9u=>m$stI+_tLg2c#*sX8;4#=d2 zpg%b_ZK--L$<+0HVi~p;D0BSi%fy(SPC^9ppKKRCBb(13?S zo*#hL5fx7k{3J5}?m2D5&@J|yy@}PF1D)m;i!z=wem>>f2D2yGK_|Tc6vbdNCcQT; z_gB|N)N9ZxZH>a_K|$rY=Xh9G9^Z{-mOvtqPE9cQg5g2kBqQE7*iQBNsEOp#qqR>K z4Bq0Scro_!6*tjdIB5euMq;zAMvi1eaY|AJEtIaT?B$;8zb4gA9gGrXkN2)ctLSL_CUIm+ zupqw^b}_3wRN@>Dy++4ba`t=2?uiCC+s$7Qq#^;uQNKuut0Acla6*2h(F61fIDaJI zY=@<2C-?1sCW(y0w-W4Bw)gzK=Or%uJ$ezy-5~^_ z%2)DdS-d7b;SrJjo%c5DN!xhOgd~qK0ty2pCsU8Eilu<~ujOdi1I@B$>6RNb#0`;)suAho0jt{hqRl-pX&-;f_1e#oh-^G?}s5{e6)y+p^+9!hphr zR*@;nr%%-QUN>3)kP_JsrZdvzg)C6*9T|~V)Le}$%0uuh@ReIq0)44cMdjZ2*G%8K z(6G9xXEXIlCnoI$g3XhuT*C!w%S-qxyxI85s86L}`Kb#pG`u+;JS#EWW`-YUL?BTT z>jF66B4Ju%_f4%HFyn*U>7mmmj6%bHsoj!s>t8L>x|Ii+-7b$KUHor?>G^ZD^s#;r zij12Td>boBT^v{Ss5(mr$wWWIjig^39gF$M5ob$t-qar~i7(ep`(bo!nhcqlTlj4* z1f%dTe}OG3JzC{8PBt>COE+pH5l9A^3iyCo@%rY|?>2T|PS(zO@vv{PCz zU$NyvqW)p$_t^oK7FpYL+(d8s5;n-8szv{i7?TuZY7Z7DO-folpM}iUx95Xqg1f}I zf?0cOZz*`_XX`#}$a&@DU^JPkJ||p>00rxD{DysfMysR8qYUwn@uq#ugQexQp0!xv zfs)8BOFd>_gm(5d8w7jqfTTc>J7CojG+%>yr(yOH8NY#i1hW4wo5B#fa&=zqa50ir0M0_XwER`^*_`A95`%9_73^gw_+H|Z5IOVuJKw;Z4{Gc8nnY9+Hcz>xy^^#aHte0bY z*l89;bu;ku>V=2+@wywrc2y(Wdkv#4Efpw3-t2)E9QFTAe)d-O)<+KDoZMXbYd`7; z!yP-rqV<1)2fvzgK;JK}uU>jV8h@AZ)FG~P{@lK9wK3LByjh${WBOT%|td zVJSQ#_*38aw4g@br-h2a;Eo9X-QHRsQM%naN2Cq4@zL`Gi3u{xP5D$jyc#@lAaG7u z0$0BpvBl9sr*{_1osj5?Sr_T8vO6jBO@FWS=eyIfN>R9d0%`nF>O%xeds65Wos591 z*7E9t52B&!?r!t}u2t_~I$;B1_KG2Ku)aEXXFtFG+HmNrnv%!Y1^mGHk&=sppR+ak z(q3tiY2-?B=m2JCa*O$oW^qXT`a0V(C0#8hZbYaj3d^qpDSGYJU=YA(sQ?;P3mWWFvlj?B3?$LG!TNcdv|7-WE?#5&dO86ME6d z8;19|s>I(XWbLQ=3=J^P?`PEeaAxXI9;bAXCP22{d=ct6gnONE-C7 ziDmmcioOorj`PnR{J<=}qJzYyqg>=E54fv)BCv;G2?4m1&US0K00;riG6e~=q{w0H z1!>#&+8-QJILXoNb#vspgh$IyQwyT9?-`=|q zwNnv!w?a6$nZ(z7oKwG3@2Up(yhTXnSPXsW-1gJXswceXBA0Zf$tgx!pL`83IXbFD zA3fve!5Q{O0O;*|S z%Y>2kF<3Q4>QnA2QCegF%^2*NdHiI8$oqPOz0L-r09APDE(tNC$jZ$}9Cc^cA~DBF zA25!f3rF_ovwZo^Z+i^%-~ar@Dp0Cb!Dc3-hKr2jqt;x@cX=Uh{qtrFR=j4oRtEZ; zqIak2M)wyx>psLs)WE3OvN+2PiJp0uU)++rooe!=v#->ScrPSa)hF=DiI*celcnws zA0?coNp1==nrIQV7BtXnr*OpyUn3rKe=RC}tW^4>u&(*waxVKZQR}Nqlozgah`g@$ z`BGBwHINy1r$)u7JX zU?oq@^G(QoWjxx)_;5ijKlc2R7P{6wpa~Pe>HUg6omM8Ye5bj=P0QqoZ$htl_;SMs z4rT-6DuMpiHvJ*mdE@=QLameR0&4zpuCIhYzL2Y#&vIY45^vpob?J@!{Elp|6}NPV zkOH<}=EQ~WjdO783z(=qh1*fz-&90j9-OM(|5g(-=EBP+?|>}KA?Zinc{yotzUJ;o zGRHLHh{9I(@Yc9irkfdYM(3yr*$UQ$9+eD;G`K4yNCPkVh$ATm>#0rFBWDM5*#>C1 zPx~DV%PdyxAHb(X`dd2|Oq*xJxMu!e{?CD=UQsqFm;;Uetwdhk_1%blBP zh#DV0G26>qz8+~Y2nzh}KtIzRI3;Psn9QKJ*6_i633lI^a#$kqb~NI0eiEbe6TT}r zpHto!M<8LRO1z!~A!OrGnf+2e%i48v&fo%AOK5_%Bou2X=6#h#j(c!(qCMZ|{JLsS zexwd^jFR-Cx8HPdX_yqWuL7=~t8H6-a&a4%usbMwsk5v9vc0e8O9_4;#8(Ic-DU1< zN6gJO=V@$BnN zXvWcZ9I7<4P6po^Y<2y9wB`WARE8C%d4~wJz;B;Azuyv=e)4md z^GZ^c1wO^YvHs3{jkT_*)`hSB%DL`_vV_ttiPbTzR`SQ54)^nG8L5TH25M6LIeMDV zU>*`H$8V8iq*bNO%Poy%rEg&Fs^FX=X#wHl-PbcrwD_{%-1r9c=wgVM>=<<2V9K-hF2WympXo#H!B^r_Op ze#qk!P4P8y3cRuxV+FeKxJ~n?Wr3vX*proC-|nuF&$n-TKQ$yTH!c1gyqf4EYaB-L zLGSx}t9F(_=BGCjPcn?t?(jVQC?pgx^)+{|L(aH4yD0-Mpe?H(`2+yY8F<;dK~Rj_(}n!JCDQ<@ADjH_h@>S}G9t5U zhxO8BNI~^CKwHQf4wQlh4AwTV86}YwJm1DA)xkQ;BCg2hRyr)Ey+G2*ka{3ySJKKf zo=HLJHW%-^!Ueyc#N1@zLFw?lHBRch&aikVB{TK3X=Mz&V}XL(B+7KXTK|5~%RFL^ zXM0R8z2D|UKiL?%oZdP)fX>7vi%m*WTb@U2#OvK7N7@)ZMKNl4oeHLGa_?1GgHN{v z>P%msI}OE?Rl zN6$4r!&r^wS|{XrYxC8c0%-)&9;MUXj1V_CWzIeSQ80kF*Y< zCQBrTC|kZ>(5#H;nP#%M+v>iFV0PnbhDG_K9wBH4O3nzGuQ5p(sL_1~GkblK|S zQiBBup3%M`%BSNP^=y(eSLDdn&}mIG600aj;|PSr&L+-pi%By<+b{c4hpqm5$j8X5 z)m+D{q(*TO0wPaezdDj`eq+ZMpA^UNAR~P zuM+5sWj`qiOh=g^_*=^K1>0eQ8*)#wot^lIGmeXBo9~`){2~pxvioIv!bK z)?Kno*}aQx`nsUc!{-bQs&r?I~&9o;**F}^MKfB?z0>6z^u*(5a29@3o$qd>$Pfy1<0 z6HaOY5!>w(TBV$%BsP5VB&Oiqb94vBb%nd}PAP92wJ7LY`(fJ6CIT zo6<`)2}br^&1uUOPq}OCU(Ub;%lO_v0_8p71|w7dV!r=TsXHuTXQYKP6z}g5$&h{Q z%Y%z4bs>TtPBB$>{1D+0;w?Z5ZA;Y>A!9}z}l-sWq}bb8U~%U-3A z>|=W;u1T+OM9mO7tz`$_i??mEeq~5BD(JmZ)>~alz?c%@qCehKh?Ks|*SjCLSoY5E zmFhnpbK!_`KXN4~18+4X(|dLQLLDFfco<(|*@Zds z2y-{$9y$VXS3Jrr!R-3c4s*M&rVN59ZXR&CQtk-m^{q{`GY-(}HhibvVig(Y`z zl^hN27qTi+fNE5U~!SXDt0w5IRE=0ZVI#-R>Ifr{Xj77^{ty_H3FH9J0Oi zA9-pqrthj_x$40vygN(h1`n4vETC7ScR(9muska2v9Vx=qdU>6)JPqSWbCA>3{-an z3psQH%=Tz(+(QMTl$!y<=G*frDXlU*XR74Oj zyg}tHtAnD#+9&Tjs6Ao>ySw#X=uzIfl?sAMrj6fO|19E8=Z_xU{WeAtL0Q3YzWz#t zl0)SaO}eEO1Ru>sl6TrlD_f$d#P^1$a6ae|vstkS+w<}2Br^@oOa-3!9$HUtz1Lx5 zD~Pz5j(A`9Gc+Cd-NyxMwvSeY*riSR>nPI&I2vgxJrG87pKE<)-RNpRXJLcx@7d^27$K@;o8> z1g%VP#(hhO>*}mBi;OXk-13d__tgx%98%mp4Qs+)(JQz0EBs94aU~Du3@LE^CN7L6 zzO>J> z+Z^Ev(_Da4YDrLb`(4O02)*bqa~xpL9OnM`kdOHYEO7x zk2KIg&XT(>*vwfRYTH1#pv3!aF5|ZENkhp<&KtM97ft)v#7%M7M8OZaTk!RU zFP|BALN4UzboVQzS1=97Ij1@FIE)#yyKy8#;hjQ6pq(jQEInsK6i`BVj)5JWC`z|& z&y?J3?eh6@Gabm^e3DDuF+0+A1SPd~sa-|~cxRxVrJj26=?eou!C$*uR-YXP)`cr= zpBHO>Bw2n7?12^|lYRVn46QT`k$Zz*&gCsn$#T;hs|XJ`W$^5y(`HL7-b`uz?2RRJ zB`QoZg9#|R1_~k~?jf<=nqwLd7Yv8-C6y(s5btiFA9$L%IXjQa=SQw=F56b#SjH#0 zw7W5ZgwhT9T&);sYAKdoP1ervx$~~S zgQ-CpI?dU!+19bNzPTw5(0vHFl_O%3B75DH$d{DkV)(3E-Zp$&j0}m!p;g2bS<53yWJ_Ed_zBQ~NOSZ8dYP6VzH-k2sn8Yn-QW_(Ij|te zAqzr{JKnGZ_v#dOMyluok|jb}cY`9oED>_nz_+m76?Mi5&POmv05vIT-vbS%Lx|Fh z#O%1SjC#U}9dL+ujf2A#SHOD!nk zP6D52Ad44My*uycP(ENLJjO+eOuo*XzJjr$8RQ|yy{$WI_vv#mxV^ua^Ui}^`yq6A zZxZsBRHy3DUe?G%2i0$lR_Q;-Of-6g{3>wTBKuxTlX)`^fjgkf&wKBVKvbF$4)XwooqB2d- z$sP%OP8dZG_OA~Vqsb$ypU9Zd>)v()H*LkhvxxJCyc=%_R{zRQfP{r#@k(CVywJ+1 zUoRw5Ap^&=&HI0$lQtboPCrtnpaiT3;0~q(Dd%U3)a%?sa@+yvtEg#H)2(PZQ9U*N z2^;Xj6J?l}j_Z$u0#aGgSciBpxKi@5{lf}E8w~GhO5MY&;2mhJ#WH_(DNw!Mn>5#H z0n0{?j!73dyPh*t(0~^qV0W+503?=JKCO2bC5dW|o!72It3dKuz38E2-of4AUN5;0 z%S?$t|BL;HhFU8>^2P}{5|R;{mzRe?3ga@`fdn$?_Z57mSL@Y2TM{1;$m_&&wXiW$ zj@9{ywME}gv`bT}yXW+Q*UX&{1#Z$-g?cCCsju9+3Fx3D5x6uHD*NbiHxZ>1Fh2Wj z0>46$o;^G-i5A-l-*p6O(f)IVuC~F(9-sf*-tcsC5n!V&(e%r~s7GWO;6}hKxIL2Z zN~7ioGfWqc_-7EmE1Ha94f-;@JtTTdB zb}PZs3z_Thm6}EA%6a7gUE6){%xS1t{QXuf!NY~MvKIjo(5ez2hy>UCtIMu^y$&uX zUAm`u_@V>Dtamydq9$XZjo=7+J^FTmsS`i5!FeS4I|k-{9Nc(XJ|Pd4JAF~W#SU-g z53ab_dQ40}W@93W+@#x%eR|aJx|lRyakJ+sEvYD+CkXYZlJJ43_{-22HCfJ%vg82< zwqedIT#oZrPbts+*!wJU30E*cIY*UDz&j35^|k0&VrT$dP&QllmKGhd(JVC=MliHIB+|n72Id} zXb*f-Vpu1YPIJ((9)5ZbicbEs3V7SfBm2n#&gcckYsYI=>#ioQw4kvo7lHT|9oo&w zQqr*?$^f=9LkbP20{K{y=rOP{tTH~F?>?UGZ4n{)%VF_@%|7Yt>+=hsJyR$8838V?C9N{ikf2|z`&k^l88E~%ICODKom2m| z(H7-_G`ItDT{>h2m<{%J2M>3+blme?P%Jh7;6U07k0V)3uSMt$n$g(1rjHhV)8{88 zz(Z9!FL)>Xcy&%Nco&MJq*KJ(77}PcFFo&~;d91^2nV}N2J&R!XYsxrRT(;>uu9mS zb3%UgG=zcPfk1LhIYaD%Ad~r`DkoFG(SVgt>=AW$Mn3>Rj|`{= z-u3y*t@Z&C9I2}-m7m->tk2xBUvhp%%*%sd`qJNhg-Fzgt&l|D=#fk*$INyP_imY# zDI#toSnJhtL}MN@J=;5ZMbyW7rSf8bsbp?8=UX)?I?ty_mmFcf$4?Zt^w1}dcD_sV z#p|HeKXj@a(*kMF1{NkIE5Z@kFm^`9Sz5xFUk~~&WSJ|=++gXsAbhFd%E~vPU`Fqo zFIhN>m5Sk&UbZ{YWdn%@L=LO-CV0kqcqsg#mabjc{&?5e$k(xZXm^~{tw`p{=TBKhnBE7fDy8^|!Lt9-mArflEGdXw!a zv~;UZ%;%hQ?NO^RHrzZ~Kz0B-cfjV0&v3!V9@av}~lQ zk(t5A*xqqfkNs83(fWF4PJFG_jQu0EV>c_7M2C8{?t8w(e5RI1#!}wj`B)a%JWhyj z8U;cx2nQuir<$qppl7c2}2^Ow0Sq4#uF*Ks~oI>*ir5S@5bn$!@6YXnekoF!<9tT!TgxNim*^f30-3e z#ZtQWr4DuiR~5!WC_TR1tGn{Gcx_?mrXMLRRTox8A(!!~m}%Hc@~Hr?NIVMZ99n^H92 zu@GJKxT>Hq7i>XG%S($K9KA+CF3Rf0oDg|#7?OfC7}%~+kWP-OK_jMI~%UOi)Y*$+rm{{(^4?A^{{iB58KGj8uYqE4jfIaM;t;* zuqjy;yY`M=OU|pc2k_~TZPS)#+dzFa@Y=ac<5UA1yS~4_ZcrJ!2G-FJ378K&i(pyJ zMtob^U;e4&=gGFUshoYC-PAjlSzzgz?a_)(=FQpTgg=D!41;d zy!nHz)^=8fLub)O+q!;Dv@t=$qUz(-oqvC-_=b!|OvLD{Ao20om z^*FRHE1eIwD1GFtd~V3*^x2L##+QU{KWV|6bqP{OXmBUETg($Ow}GNcpdw8`)y;HQ zX<)~#Twfl(9YrPJq;-lwAby;CHEggSe4Ic7hESdynTnN>&U;|MuWi>C^IGmc_`dc6 z3BCevXT(b+xOB>smjZVGFV7~h&_Vmm4Hpewr~gO3O4WoV4Y}O>F?WN zmK+Dj2Ye6$JLe)}-VE@k!Pn+(japct0h6<<0BaTnGXxfuA8vTg%5Pny6x(WjJDc#; z^S;Dl4qvO80sX0}&Cgv!df(QX509-4rYo`c0%yEG*ON2O&n{eSd^lSuO?OV9b4qP1 z#lCpkQ|jZqj$Pbu722r)$n$lNQ_7fkRPBzsUIDk8xBZHS@lL;ziQ7KE9g@i5r!AB* zdRymJLbyk89m7KMsXeSo1@>Tw&E?1uCCo#|UC$FF0%siJ76%q#*BZVUHfE!s!c@0z zeuq!5A3yK0x;w-+7}B)V^OWi4le~0J)5WiBJt{U99VPLB>6v-BurPhiD)I34mhtU& zCN4Z%IID}~Yk_ii-s!gdM%b&(fD(#ogETKDFd@8sR!^?(O!rD>@$!bcRJ(~o)80MH z(0j0We3oVY-pg&f-e;6V*`Av|`t*#dSs}jZ@+I%~s06M;(<*g?`F0Y)?I&6W36uAa zPknlY#=6cb1rg`HHT`6?yEk8)l>5WkiC3qpy75|q;jS=nGY&2ivC9wnBPyKsgiw6; zMq71}d<888+2Z8trH+Zhd@hQor3_58@Vu*O;J~3wDHjWu^;S1qp1E#_ew|*_x zm}y34M;UIH@L09om8nFg9X13im`d+VV}5u^|8@azeRfjez=;T`~aGtl%7ED3dMNJgRmlm~jp9A8)j!*J2sm?fO zIrGB>H@w-z@+FXnz?hGqoi#wKFsc2vfxeQBkm%KiC;C=s&}%xO-Db7Z^!7!@&0m z>i)MWR zX@f~~tXXoObJp?W`_fSC2;DpP_|ABgyjIHP0Vm`>nndh4TySE?LMB3(jL51)qJ^Pz~KI+2yOPX7=)Eg0t5x!!aop7yLb_0pS_1HH_r zkGMLdDjDP2;QM`n2GPirvwi6%iGZew=cnqu6ZHhEU~Z2BqK#=z4|tw#x?P0LRvZsK zu8V3~m*_2#G{}brA0?(s#s>y-+#wMw9g@Gbq#NJ#Nn~2=D_$?WLMQS zQDY6I6)#EWIo`I0`4SaR(fCEY6m)v{CQ)p=#v^|_rJ}hc!AAL^ z>T_22N51xsLs@3yDzwU(8Ly5uIXd=?11Wj3HUWs4rVEszr-@0pK6trvX~%?C>;Pej zHjzGFkaH#du1jD!!fR>(m@>gZ1-7yl)Epm7O+^n6V7i8*#JK6zwvjiujqHlM*~y*^8oO0ZFtMbgJ+)Yu5Z+dp;^+!^$8YeTDKS{283${_EQ0j~)? zxIG^Ja7X8d2Pg3P=;cKNR z@WNo>JeG^1B%mm&cJ@R!)CRvVSSqkH94*@5)!lcnB2T^P2?jCT$okUM z$boW5aR}&Nv}GzBws&?J9LtS4l3NZu3dnQb0vjWix#n|nVN;z88rk|>%VTg9EHe=P zQ0bu0p^{(=o}6IdvoWumoMo&Nx2%^cznT(X9q>M}Vwp+xNdzXHP!g+qWIXKlmSi9V3JD5Q5S9B4UxpG*rIC6y%?(tY&;5xBkONmS1ypx>OHOx-*NDopx147s7Y8fua|!mcyD$P#m8JnQl=pK$;hy z*{-yBacmF!tjiGgSSscxEFKP;EYt1R&7}D2QP>+mnOU zez>1N%fj4N*araRX{@a1<>?i`{IhUK@|sTE0FGwO%pkXp1(^2s%Aqj`@%sc{5qmWZ z{TKm-jVA!pxh=ZNBHT5qIZWRnpXr)u@kBJn%E4x=mPP(o*gHy(#QQgYv;}~io!yr5 z^|TDpbG~umy$mqUHoN!0`VGCGP;;yf>@`+cP}cmCtpliGBr?S6r&i!U+N1|)Wmtor zVuzq2_>M=ykxkmCCLrYIK`I`-RfQ(sb4cl%rF(ZZQh=UBK&V<`b}BVxy=9vj#r!KG zdB+>7;_AQ@XVt@3l%E436cFRKXUd8ls##nmAmq!49FQ^ub!CnS3EBr4=+<#s76jmCCe1{#YpwSTDTX6eY2;bB{AG^Wb`-ODYfNH(Q z9Ucrf%OopM+R)xjvEskHNpcyY?Z>b+Ub&A?zjEut$DhC62Q@@Yd{zt4@wcIR{?%M+ z<5#v(#Pp}t2hr+O_l|vf6Qy7SD))#)SI={@PpF3Uj44-C#cCuzIODUo|+djF8hM@7>{d@-OAa7 z3&K@uhev8pB(r8F&FheFaf$Aw36_SH^kxaBpaMBIA5J8P(mB{rQMp<24^IL?`2G+X zCY`TFv2801i%@Iw)>skTKR4Sw@l!YPRcQY)7(LpQML4ZB`?ZBpdyZbFaP*NGs-M4f z;(L$|R0*dfTi)A0*tTAJoj`2~#vM?h=3dS85u}d?#&xzPZdjwzN6Hc!l~(I|&Jslk zW~=i^`Jm&!-FUNFQcq)OcT&1kHDvTr($V#g-qA{G@b9T|l+yN3EXT!{I!EcBkI;Vd;k?%MWFX+K(4oP)QE%Tzl{VHb_7)$?Znn zxLdcl33-LGiSx0`&V*?1{J8BToB;i*zd>Dg`X>!<0j2zWzfHByeSM~gtadvjIolxZ zqJV;A%8G67_Ufi5x=^lUd#J)l7u~(tK>cQS)a)s9o3Pc^*W)eVh&&$hXfPO{Qvwb= zHLsG9f0)VE=~!)e%NYO)bz1r^8XA#X$gn0#wZ!5LMhny$Ry}jd}pfL#FIj_lKT)TTzUY5X`D)-2h~YSISF_nZf6U(1BSrH z_81C22mWnhH#P@_a^I~UY+wK-o*pQvmaO_cnR#Rjl$%x_$UO&wjQ))oBNX0?U>(&E zY6PJ6llfYa4Uj@6tqz;jfi%UwBe3qlr$>!jexPH-`&&b?OgN9D@H5ZclD!pP8O-cT zP259Py4~YS3S(=H3xiIDxYQ_srfTf#1nysu?`}t&@H&gH*!}wHT^y4;c+k5CJsH#S zrE*|)?pusX{eg&YS#r|}FbADQt?f$2V}o_Tk5yQs_BSqpf2E7gtABss&+=v<42_Ox z?_U|h@{a*xuV9O*Eq#Nsh-stf?m&@X)SonXa|%+UbBol!;^FHnD4gz{zAbr0@(z&j zKc@cfGc*WDTdE>B^6Pkyt9R|(@ZXZPAnD48Pzq9|P+Votj2zLI!&4`kW%@39p8Y85 z^`{nK>Q*hC2>?r38^rYzAT=Dw9tZpSKu%?tySQD87)EsU-ZE0K1YJ-+T6XH1b2pg_ zZs!Is#4JP(0A{#?ZEiTB8&t)F^Swq!fJl4B;1DZgwYqX}X(p(dP||9%QO8O|=tbkQ zT`s=yWCf!M2-i9@_E&UN02n@MwFH=r*(zHOT?xekke>|o7wPO~O$Bx=cbXK6odblM zY=HyoL~S81OwQjG4BcgbO89xRr*A6+n_Y;fzWJ6Df6?Zs*>ADuF~Ka1uJj+z%rn-V zO&M+lACIMq9x}}zT$<*h}tBbs@k$b!hLmV1Yik}#{dkIW|Ol0a-io8 z8f0$a$7&WA`UjQGAgn4XJ%WmZ6@{PL2#9g3Y}UezOQ{b_@Xn)#;JjJvZ$dQ1Yh=v< zG&+6t_SF)?fy8<)&ua`)pi}~6OR*mbE;=8F2R_oU&@`0%EDglGenRZOqmk3uY3zEO zw;r**2kLQgDs61X$6YpEWYykcYRA7NAtSjk9QK_+2lpkC6cAxa;Is98%F!p&Cz>Nw zIXqdfhV_|bYp?%SAVy)1pnGnqi{Am2Jv=#FB**G;;^u27Yf;;5c@f)eT-+XvdR=Gpen+MDg;SrX(Fg#h8(TZ0_y(TU;-3BF2-Z|Wyfg#UN{+24@ zkyJ2AZvj@K2zHDCRD4AGTz47bP*I{lAsb>XH{lG-D$3XCCq#IEZM$NxZAL@8OsaTY zZGQ*4oz$yUN<=uJrc_vuF*$?Tl))5&jD8Vpxb9l>ha)3KUNcH_Arg>>Zy&ng4*-3q zHMtJ4x81y-kEsSqS`MuDV%T=xbUi{5OwB9-z&;raHEWyd8QPX$0C1){fr8X&K4D%n z?IjENc-vcl%^3urW8rY~_`Xdv1D^q(O9aRE1Q-mKX$LTVSGL!&rgV*ZL|YEC+=MPT zU-wtCYpM`BKD#qMMA(LwH#i1szmmtDz*mEDhxP3e@x*%op+3n}sx0sNXfQ7>4IqR` zMf<5a+=JKeZ#d-;oDfLzR!k;~qn0wrv3gjdXx(ax!@j^sX}aTtO1j!FA^8NSb;?nF zPPN}t-nDMxlPpl>XzIN^txoX$mbR}ghTD?cBomxnhLBCFrF*w`b~l-#@GhI?RJYFj zD9m*E4OEUZ)qaV7QY=-S9J{>f*_X*br!s-J%^fGm7>bK8;0O{)E zE{Pv@7i|_4vNbfia6zWPp;#UA5o6|!j`^8zZlbm7gp`!AS&t-ln#$|2k_Q$NFjx#G z(_7rni(@QY=h5QH=J*?L;31$4?&CD3LX;_RVjMPGvVL)ZAVjWTsAQPok=vlsTK6lI zHn?-5{5CCODW9crvxWcb4X>Q|-)`!>tPz#IXdLuP{^~=%e7V5*Lb#Z*xewMu&qH8-zx!3Wga@F%NN4eZC-wVYi@ou`?glG znCIDIj8=SLjiGX9JCk0L!p5T$VcD_U{qp8gz17Ogsps@QIFufNopd@a5N%Z$m8!o) z8`!di&Hkma{IDiFVTDJ`Lt5zTsP32FuH9$1Su7<@O2p2Xgy(1vPxi}S20HLG8>2$8 zI0_lh*V#0k$2ibm6mBg98VLBqo-OZnjh=Y>AT_vQhK;U!>!x+!dy#s5Kb;)hp%3Wi zH7)0S6DxXE@A7|0!Xa)=Bs)2#0MVPZt1#b62g*M0PHBtGK&dn)*p!<3{@6|?@n)aC zP0yuF>9XDT36^=j9AP^*DP7YkTKLLvg6`0lm~e^!?lOtCO)od< zvrg(-Gu1=2EphV)WTuh3a%1e&spfndk*IrP5L&16LNoU}6DM;dPo79hbU+)$e0hcz z%Q&Lt<3?g_Z9Zk3N9(UBa71^41nmkv;Kig|ydvNW z;)%)TWV$fDx;rROTahpZu044mp$z}EvtaDGJm2^5{UEj#;7p_8K}m484wjg)&AGlR zz|g+sh-NYJB;~9H5no3E`3VgFu3o^V9Z~Nyp+uZt;uvr(J|WjiVK?z}C+;JcRdzIG z$?KkI6!R;l&$FxAE+HpbA{>GQXA_QyKSQmwGyqtsFxIaZ}53Fddd zG?fZp$R;?kTin(DG!`jNX}3(72?kg)baSUplaaQktd(A3E^ig%6FWtw2?L#V@}ND> zb}IKZjenr!GxX5c5f*&0Sd0d!%^R%-j#z?e>~Y|B5}xD#f@zvV2UMbBqxoz*YuZ~o zmQ#*LeAEUEB!|9{%n(ZEP>xI0Yp(cb9+PhX1JU%xatX{Z;Ggi55FZN5fYGpO%8~@3JHQvd^|JZuYns)HYi?>US()uKSMtGEUyg_~;FH z(BVy?c5_v}DPeBfhUTq^>Q-#G^k7xn=#A1gnnC+ny;>;uGGmHN6F^jeM@-gJ(gCB! zE*%gIpky+J-WwfIc1thtpmj4o`~Uz49}_(OXuFAbY||TjX9A z!nr3i5FZiHi$+mIvvuKth+E!s32Re9W-1yk=l530hwsdyS1IR$Z4nu@F*_dI|7%h?(0NNH7Y9 zRkt)Ah*t^Q8Um}s+$I(Awm{i2Y|Wn|(#vHXB9ovojJ(CBYRd zDjV2BWt*PN<5U33DL*$ZaV+%igQp@7nY&Lc8B+CM9C?|Y4y^-S@tRwqF}*-xvxDMd z#RB32KqwJ>5~v3`=qxnuPD0XF(d5_{?qd)=GBVg(J|?*OVmIi<|6mGBt1k(#M|+7Y z&p>eAuIn)z7Vk@~V4&k&iZYf<`|=8#u-fD+S#ar4_6kdZP#mUL=@G*NfXT=xQ&%wi zKc`jV8=sfJHBnv+byt}^`nok^+#?F62KFbWQQ_<<%GQuqXyo%kos*e6$f@OM}|D%eL88=q<%q@Lj^P&yqO2A3lWb zB#faz#$$^ycLFmwy(y*D!9pCEGs`-Ecel%Qox$~{90#a6*&Cz|9ojB~b28iypW=m9 zRI=qM0qTj;3-vp_@?@_Jeg+nOEPH3%#EmqjW-ihF0x9hEt8{min`lHX!|iUB!Oe!L zoSc5#D=pk^Q@a&lhUNOJ`C=Kg*I7D4)bE%7s*D6rh^}fED}+xs#b0UeT>4;BCC6_`nU;YAWFdZe+>M%AFRFn3)x=(l}ofg{8&Sr9(gN;lKz|z5-@r( z4(4}Bxm1CA90&QYm6QT2IS}`S((?!;d+U{djQn_O4Wtl&z>1pg8)@~{XT4CdGN#t> z7h4G24mcYPN~Po+^JhL_@{(e~;Z}r>2-ss)GYlPZVpZr|ASk2W145ET;?z1QSFL~V zxoMSrcDW3E6AeYs0!9X_M40jKUDv1{c-lG4EiW&vit?A{eIbn&YMOQ~wIGW;M<-RA zv)<9WWP5yxXjUP7-(yCEqr%}fq1V4t^o_pd7y565r)Qme{;MgbV>t3=Zx6GsOh~9Z0 zSIyq5thF6_x8SA0kH(UU;U-h9Gbg+sE;Mq=vf}G*HJl6wg>?`mgii*=4ejKhHZaY- zs21%tuh;qy-+VXsQU6?>aCaIoPQ}lXwqj_H{|zkyzKO?B>pKevy3t_Mudw*#VS#n_ zhfl2v%5Icf=$t<~&!%~2R?!?tD0j0S(xyJW`S=oRA&rEeqSfOl7KzW@8}dFJf|;Xx z_M)JkS5tBlnQZT>+`0U-?)^dxxRzsBYEs>;oyE~Rd?&q3-M-Wq5JB|iICiQAu=u?u~)Sg$D)mI!CQl)On93jPSz z2ABYkGDWJo-z(<376USVaMENn!AXt`9CqP@hA?CLBoeO&yD;YFljpk z#67Ga?if|w0%0d%h%yBLR7nK}T4SvDmjv3=bh&dgf_E$z3OlwUm4WP;jlvyFXOyEJ zle$S{HE@EIni}rtqrf~nK^<@hjs*TU%tS~)TERlH0zfkFN=vnd+qwaFAB0v5+B$K< zzWJ^OpanJ}H+_Ia$*@{VT&}FNA6^ z;%!WmghN$N=_x6}8d=c)nRXOxw$EOxtL*6IMo^qg>yoc%EoopH}y%^qF7hi~b$;`L>_!*wzsI%q63~!>fD}6gQ z+Iz=qLBhL;Vpi!NKLPh>2&SIw?RD)%s0OwQlJ>S%;z{yhl?{og*Of1Z&c+wPsSBUr zXtSNTzvY9ld|o+uRzR)i@^eLpTkozu-Ld1mxV_BJ>iPZqv$#e)?GpoGG`Re1bL2Mj z&?N`-ow4+${sD6Q<9b#hlmZhy?9tn2 z(iMbTlbR8a@34Uy=QxmN>Y;={5%x|dFCPaWR=@V}Cfa``I$kTneOk<^t_cLiyuCTL z2-i$I3MK(%&Vx=5P}RVf>_7ULW^HNTan=}2#|i**2DqfUF0hKqJZo8FvDQ@PmhjH>v~Rk6nDR%tOkJFlyIz3=|anu}w~>RFjExx-4mz${2E~U1r5Y;pTQ~7F9X}f$g#u4> zkTnxirMgUIO_EtBG8EGEINJq7EW&@J6FS)&&PMcc7#m^b$vJX^Wx0+vrZW%gDNBGl z0F!@o+99s-SzAYp){YnA2C>BN6^e!GlU&FNyOhgD(=kY+nAV2thYo#v=H0jTc_HJb zZy#T${_s(2hPs9q>Obha@B1gpY%Cf0Mkd{b7`^iHUEXf!*++}V&L zY*ZnQoY*?n*jDSe5L>2NgFSsKB)9(fz=E4?wnB;gNZ);Yqh$l+LPfQt?R^;zn{Sao zvE|WSQ;*6)V*XHO6yM!_r>Z6BdgDY^<%?628`mpgA3g-P8HA~Ik@sJTfDmZoGn!8?M0Mi8jSR7+o{8cgM7f(Pstr$lIEJVn%M2}q zM`M1Q&=|R&!8fH>cr0<{!EjHQv%Ef54Q+A#yk6qrOmjnOzXb+iVaKm%e;OR^Fn8wC zGkFY=h7a%9aEg_?P~r4MGC-c|92tx;uDGp7O(*?1j@o5@$ItoOpGkigq1OjQp2ruy zupXB5VOX*Cr~=zb^%Il@sN9h5Cw()wm#+^PRx-S8ciY8udG*3xaq6CA;xfn3q`_y z8#>Z1`Go06@uimnceOP6H+38Be~23CP1$7IW4U@8GK1DkX?41RFm&^_QQ*xQ z>B_0e7j%0ySgwwyBBXIk(Fp*CksMY$H;Rn-27Mb#N<*;>v(iAcL+y~O6wy~rKJ`tS zySSq|A;i_^jmNe#xQ^gm0fPpGLUS;Cd0JPd_-WHIG1)sF=*!HH{ngCwx93kN`E~&T}LD^wur#Ywc~BF5L6vd;J7NuN69v>h;pG_R8JSgtSZ6 zQy)5?lhd8#PF#@%wd^aA#~pkmzJq~fkA(+^i`u@36=fXEx2ntp}`G9zc*1b-(_#tx6BY7Weda{!FK6^vaOK|bG7Vmc0Kioi*B|W zcgH;djcUEK28IaeJKMVIau!-Vm0quAxw(12i-h&odanK0gV1KcW?$Z#;spQ8<6_vq z&#}vMqxWK!KS`Hx&-l?5)8^Zldb3^o!+NFFw%V{Ud)5rhf4cnnb?i8ewiHFUE&~Pyl0kA^&IGzH@=WDIjz2?7 zvT|Gn)o>uN>_jYnc0ey4Kn=NoHh@~uk@ZbqOl`lsf0q*w&9Bk& zUfs*3za*je+HT#FGP&l?Yc|mNz#$3Jphv07F`F_IJF=2GShi5x+>v*5BQFD@W2sD z7@HyB3v#!*q`v`)Um?jQw!Qr9eK$eiRt`O(%y8PUF^X?iP0($7n5y=xrTX73uQ1q9dkQl~*UrBleI&u+|z7{Yi z(o-1RnQ9Eko1($*v5m~2__hBPut5_S6>YO)pB*yKjB=oif*bkpvlldg7}zihuc|_^ zZJ?3>x;PL(V(Dq1*{g4P-01vsvREZW-bBWvl z;HrOnXS4iep>IL2qfwhVXpLxJv`4F&5!)`CA^)vK?pKuM9M7JRT=6_}N2Z#!?yc_O zlfs`4pJRG*aLaBUk8g=cy)7F_>Ku%Nm`%Ccn0@oSxc}p1wRUVZ6^7PkNHXFOw!BAdurj zXuZIQNx*v*dlu3|-H#2J?R2MU42{GU)ev4GULO2O+Pe_D-4KCrAtsR7DM6C+mb3?@h=AqytwHak49LpnK3vDNh zV;2NwfP~)MajA29@J<#y3!ajC6qDWzk-@vPk$gT8AZR8o?68uRVY1tfE-qyCqWv+oW>PPJ=2}8A$ zimm+PKA|9?maLIh9Y(E44Hm9N1(v>u#VCeP*e}F;t_y0_&VE`X)v-AyeBb!caUgJ$ zbak$hW*eA%N6NNW(G>b|W@hUvFBNU0UwJ1>+Y} zI61C#w|cs|ZB56pVMn}YTzydSo4aH?m%W+gebPu35U&fJ=XzMM=UaO9ZHreo%J0?o zo~1hL>0=K;RS?H`Q$o?9IL!QRO4G2lL%a&iI4J`9*x)VqY<}a1sB2uI;z^xZPwwVh zDMSl%sP&WNPeLPw+9MyMcNt1$+Rq5o3@-1r@OpS;!G+?>P^;U%o*d^{TrBoGFs`^5By$4WR2IJs=kjRR#iR}eO z7#Fs8TW~lb0KcP&y;M9hTGF@UzZ$aS>a*jc+w1*oZwNmXr!}<8+j6=AHWuPIgBp#w z5k^drfE`<9?H@oC^fMap9!jpk`3?OlyzK zOpM)Ly~*lH0t206Qrmi;kz(s=W&|+!<_0>r@RG znOIu*Y5XZJ`M75mH_m&pEFUkmd*m+FmaZ;CC z{ZqPJjy3uDZ7$_sgX^o@Y3F6GX!|NA$zR;4Pdp^MHgm1>L!U}QkSWU3jq2Vq2L7#2 znrqWnIz5S8r1CGeTf>vH?FbEc2fq=?C=b2TJ37)Rmc7qy*AcMGJKtV_UI$uZpY^2O zFV=%D8ysb%1vc=J%Rp(p&UyWVQ^O3zl5T9m&%|$UNDb|qr;fW<(JVi66hqfL^Ew-s z6%5;tv8q6sSopYD6GrQS8^W!nv^8_3;xfGoT?;ad++bglT!gkbSM;-RKd0iEr09%a zA!4sW;g18zy~g`%>tZK<<9!`@^=Kv))Us$*JsUnaqqf&kVCSPvqYd5MnVH$ALyB0{ z^qUQOZ#M9(HO!4K%50yJx6Ec6oOwigoZnQ`yq{uAOv0p#psvvWuJGW{4uGk}q zZAHnQ7WgIgi?XW6FtT;X>=Nj{HcB(tad}B*|1dK9EJkIhZI6!f;W>J!-U~$M9gnEV zx4Vz{VZX16Qx<%?fIixF5&Qi7aQ?KC!$24 zA1T-~Z037&y1FHtT9*owJ4`Cf!aZ%?!@>4=H#a%<@phk#9VOGj>E5&xmWw0CeYpM{ z!8$YrGpyKNJl3CZt<%KXLE#mGKF6-GDcKj%xxw6T)+ckB%HkbDF|`ae=I<3}2A+R$ zcS*mS^@Y-Xe#T5roZ73i-MCQW7$dNP+fDra-2L2vzTE{?kcKR{gYLf8e(6vh-C^X) zVixWlR<>Yccf;K>W@96!!hCsTphN0a#ro3w9B|)HC8P@cNy~vVX*0x)&lg={JQ+fh zGV_!jo|Yr8{9f}Jw1L2681=c!j8i4Gdj4H=@Jnft7WZQ2A05{fP@f7Q&fMt8;#sAU z)YmCGVFfNlXK;7PsMHGIr~sn4LRh4;M~9VcQ$W{FpUnR7;O6?0VYkbMMIT`&V;1(J zV*U64JRXbLf8)06jz zI@QbNMG6y?-WLRv)k|q^O_w~+t0S(vq8}wc*9x%Wua0shP@nKuEq9^gU&y@$xubJI z^68=GrI>PQ+rH~t9PaFAUm>Ft>I@CEq`a%u@6O%ZGm-d_%->OSI(yF^ch^9MkBT&C zKX!8xcUb@D+cReI20z=0t(~F)!MxoCdT9k0&(?2EZ!`Gxug9=gLC~=luMyJKx~wey zUMpL1yDP9KN!p#gx;p!-j{6=Ho-FJW$|mT;L$5gYBYIs-&_u5~MicbcCC{_{+%{^Y zt@I~xOQGvTZqeVYUy8+XYM(0GsF{$JXq5Sgf@YYLF&)*Hn`k?wx$foHyp{rE_EA?` zng`dy!;)TH%#GJ^ocZ?bxNcT+^){PSF}LA3%T$L@rui!wO%_Rjn>G(E0<#Gms_6F; zSwJBCU)r9jX~EjnmS!6#t|zXVUAd~1f;qx=Nd-IbxYse?CFD$UCM3qu4z`JI8&x-F zn)jIL zLa$sngIgT+n{U1pdUdA|_Rcdof&O04myncT-!gl6G`)4xl|THYu10j|jry}uk0LX= zBZ36)_s6`A`^CDnvUThc9b=m?tF(vm2VMC6yE~+mS$mQG$w+hbA*^GY)TRV%hozK- z&PIluqia{ro*A}m=XDtKesFp)Q8#Xc3ShtYvS*MQ8#CS1Aufk735uH)k$4GM)jL{z zq4KH*IUvR`?x&yc0Khb?Y?t;n8GV$J@ODVj1q+ z+W9iKA0gqBuU&Gj*yGVe>&)K0QajQN`cx~-^! z9I+4Ip0p;OhSnHM>A)mXj4<`GTTb=uh{4UfW19DDa$Vb2q^gmp{hp6u;WN9DgPhu0 zt4nUn;9t0Qi`j3RCl3{f zoW6?m*>BBsTyCN`@~Wj>mdxE>aj`TQ6@oy}CEip0W`UZ&)^cz+%)cbPCo5Gj-&%^n zM#lR&s>`=p1Tq>o(|$AA6Q*;-1T>#}V9m4Zn;BfFQxs!Tf=zK2@sYi$Hy7=>v|?Q9 zO{$Bg4;XR#mX1+#cqaW~I&mij^~i#LIIuYd0&^P!%g>YeDq4;%sML!-^ND5AVdX(T zp-kbN5YRK44=Fy}#1Z==D~AJ9?s4#f3ScSJf2 zb`*MEo*%Y=%+?=XZt!s|63IXgg161iV*x=$9{gJUrqG7x3E0wN6d*2VY zM2d^9b9;Z zq5bR|-gZ@QjWRM>3ASep8ybj9Q9L&a1zp4B9qW5E?lV_BQyXbcxPILvc(06E7vR4K zpBrX{o{zl(hF%s0N7*sizy5UXS`zMs+65kZ7@(GVUe-EV0yW>NAp_*{ z3a^F1r8qVPdL&pkg8csAwrg9=Z&1=;hU*@A!?!C#v9A*1+urBV`5e)UIXDdwLlN|u z?T{3vJqe#e258DMXGv_bKO$Q#)d#h@#5X$FmAC$}Mf`PI=&N2|#z=%&N zsX30-PB+o8EDIcyz&eaq=tyJC+SmTcnF^n^(T!eAvm93yBw*SaXh}@aCg`(x`p2}J zd?BVrN-q&ss**=BX1dd5iB!$sGO+2k>4v4*F2wma0vn>$-tl60CP7-<>~3w{T?sM# zCEb=fH%ASX(h<$VF>z*nw6v@gu>sZu{?qLhvXyrvo^aQZ`gy#)4c!2&`-`hB=?u4xjku-U zdaINq#~U2qIScOr3t7??c-)Rmaq_JCboAKVRAJQZPuMgZpVUaVQz63*p`|uiIcPd+ zeyBBtqbDqY6hx+VJ-V6~edEmHP+LTx@7vV+$#z489zUF;Vx4NWUz0KEmnygkg17$J?3|%)Z zGRu}1+oSLjPFho@-4rheI0B1rgcuCxctWVb4s+VGxD}?4k^R<9zexU4x0&oNL<^0h z0Ie*BukK2W_413|)!ba;Ge3u=JFg*>-#EZ8kprK${u$!eX+tPkrHT2}_{`=<8*FB3 zzDRO>XoYKfpg4Qn$WQPMBP{R!*nC8ZBiBYHR)E%U6>?Kb~?H!Lh-U~F@dBzoIds=N70#+pq`tE5Z)30G_GduwEWO+T-ArQzpE z9*@ra5}4=iMtj6YQHW+&B}AY#g5xA0g)F5;%zc(^)OUg|X2GY{&p$$^v)exihf+8J z!#R%)9*>uZD7Cd4s+EL?pymN(8`ta$<; zeNh2+hb;>?PMTJtP-JI~G#%?^0vvC{c&ghBcQYq4tPQVZ!INMkFPfjAZ8$jOda52p zf+H{k>}GuxZ*&wh>A}NQ2_g5LSyEQJIX3&5_e1K6r8)XVbY{||sshEA{q5y=eSA6P z0++U9*zCr#CMj5o!KiS0c*Psf2Xc$a$yM>_3Gv^J{&W^R_1heUqib5oX@PunLBgaR zUfTdli$=I~wDcH;8#_>T7%J6SuAr6$U-i4#bUD04#^=W|n=E+qKWt1U@^>3caq|kr zzXwU)sDK1sgjRBDsfQM0XH0@`d+FyU9yCA9qBjQFOK(`ZO&1)U+SDb=PuHCL+uJV`yH(fL z_ziHc+Yk?4-#QEKX`O&v8Y%Nw-F`mCTWnaeGoIHhY)?be&t2kL2~ir1m<6^W-*H>2 z)C&{U`GMxBx_r=<33{I1uOiby#C}u!j{Y4D;`W1mt6;~`r5$e<5D{Dp3R=e1o}uNh z4~YHWHIRayuT@;valQl|J&FdGvW*FBD*>sFEfmqWlCi#Q?Q zueSBNHv*i2Ort`Fr4{A$tCbM65$?AvFqQXjM;;YE0Os4I@LAer!Sm2llR^XPy>zc+ zEW6Pq3Tmdb2t!ASW%x_?@40i>V5EyU?{ta!BuU--iwwp>n9lxWS&*H807tO1W3OS#;p4>0mlTy}v+^D`K_eeE646P~`!k6r zI=Lv0RoVl-oP;`AZdg;E8NjO|D|-wn^5fHP>*2h3lqA6JLsu;#5i3zsE+&o|wo4;6 zncyJD>^8KqKUDoOeII}qH}9#EwxYm1SI#g1_^DrD$YI?`W0#!>e8)Vqx{ z$JWZ12(2715lvp%GTeK`O}N^TK4zOU@VW&@W~9TH97~BO{o1ZZlpqV6>e#!<@TfdI z`9bw|vcN@4Y#_)R|KV!2AAw797<f@nmBj zk2C6ZukOl(S%VWbqoO8U1rg}hHbGCjF*PwR3DBJy$2EW>1yH7z>)jpak7&OVEZ-o1 zsDIzg>l|F?F%YMYL;32$pCc?myd-d#J0wqz#TsXjU+IDC5dEb zJUC9k#~s6GKEk_{BV}bT1FEsB;%oA?CSO--Flz?Xi}DL@Ue1C?q;b)}wVqHzQ~1Hr zp~Sd9?T@+hL-368bHw~Y^y>TUzgC|HnZ02<2|#iES4t{Ji%lsCuYz}_}B2HvH?%(=FJ#j|za zW$&oODP$)FL;b^I)`9&lIThg2E7+7_3u?Ed;=SG+a(?>T6mX!$7GW_e!(NCE zoe-^3c@uP=D;Er~z85J7P0tO{>fDVCy~nDjN&kK;f3L}F$)hRlI24zTnS53K`Y0^A zRK7@e;`5zi|9S1dsoiE(#ZBIPOUaOn{y3@s##VyPU=pMZ-2e3LtzucY zM~ID^kE%h#`ErU0`c=ZT>HDr|HlzbJIaSZ_i`^>(u$Xst7O}?p;ynFkN&nGYa)&p}j^IR)1G1k&MdxmlFm*qp{c8@Gz`fu%f0oCu}3tFMPl&>c^Ko#CpjtujrU zA@CiEKm8?saR(&uVgod9j?;PG7eXYVU`lI$4QT zkahCI-`%9p?=D3(8yHAH;wo8S?kJS6A(C;!W~RBmCZ`et7hJNwNBMc2>!tq5abO}J zP~aNCKk}fz4E({xlf<}|ik3SlfIk0=Wia(~e@y-TJi?X^L+9cNGFkBA8%`0d+Q%^6 z8JdX{nG+7cs(xt#+L`SF9qKhbr2%$L0s(`fjEYa{07w%jKLejg|pyNZSS+} zWQ?H~W3NNuvD^}b+4EkkAJ>9&aT#u_z?g;~B-@lzV+`)q!g-1e*ro2qivW-U|VrB*1wime_wCW7T{vRDu(r971_`0QzJFD zfX^lk{>Mlp$MVO#@{sg&z%^3~cx%)RX*9U)sei5cNZA=#c4rDGve?mYx zp%OAj-C<~@bsnIDWB}g&9$BRzX`e`|EYDwPAEZWhN_BN9 zXW>pbpXpDKihb>%Kt6FeC>GI4+FqhOe$hcH4APWJh&4gc8#vyBlb`)7DrzA&3wLAu zh&a#xYA}6I&}(JbfG7YHE3o1WsfLc46M!m7EJ03trN) zw6|GKFLQ>|#zA1T6o7q+-v1>INtPo+>3s1xO@BG8ZXtqOe zjo1IpVoxT%YXcR<7hXN-nLj8cFiPl&sD-=|$Hx)|ILmd(cUQp~e)!bj_ox$XCIJ#^ z<^LOXOwdO~{B(v^g`3sh+{Fz0O8|J)8t6PYEs%vvREX9JZSDzq#mz5z2&45e)518O z_b+n+bw@g_QThI~|FG;lP|2-Bp_#rxnyruDnF@l|4{kQ)Aj;G)U zOPH&Hr$!R~D7by@EV9$XrY|nKO-_!Pc;kPclD2`>CPAL_zIzFVl18}utveudhEodi6#i{!fx^^ zfOt6`tonsuPX^~~(NZ{DfWO1r2-pOc{)7t_ioYim0CbuSw#T?B7;C;n1i>;AAya&m z%{D=|F8o1G{TXGP0EBF}pfNT-dkCpv^M5S@uqO*c2;`XcJ@hdX^zEoc3UbmH?$MO% zPcVEU57Yiv7!pSXh0iR&Fg}TD?7+sxz{>wuk9V-7xr}>Vq>KFtx%npOUh9%QN}d%X zDpz&{lYU?K1tRLtrv;U*&#-0?y4L^Aa^{qeG=%3X8*4_1QDH80nsG2g1p7TwV&|(M zOCnc6UGZOB9{Kfm0H712LigdgpcTr?AG>ekn%YkCP70lb8IOQ~(f8To^cDfP#1_j7RnJ9183=1Z9X62?}TmkU%i~#H4I&S&^JC(T-f3j zN-AUdgYy9GO8t>^FQEq901~;><-Pok3uRyob#SAgSUZPUYG_gPJM=w=B58*Y3g!?K zbZY1N;sHI=fW9B})c8>)sF_rqCk|BUQh14f1=D{#@UOjLvMgl>e8mp{U%pXlGLT7? zv>3d%kNQ`;)vSiR+R}TVxdP++&rtdlGW$l-?y&m*SJ}0PLz(Y!DQ4S>Ezy}eQ|&gr zQo}w?yb+G=xZmHurE+_LB5pBH5WekX8peunUsUN>-NnIVJ0T$0(N;qaK2N7=%o$U=s z;R*W7t!(8L#NG+MsygH{q)TPxC1dI(HSGsq|L@0!`A|+a>-^){CT^=sq&X3Jjyvu0 z*OSwwc>@rI$q0z79joUTp29S}q=Um({7-~qtGy(l8faeJr1hgl(7pCXMGaJHFTG@b zEdFwXE=(2XKh;ob?3i~2Q{r{tG8g_4qZs`#jCErc9%mTONC%H)@NLxB z!8~zm|L;TsEqNPCJ;m`7pP@Y?nfJWicV!P+-U%87Zd$;x>vxcur;{s}0jUlCa9V{l z=fHm)9Ya``dAmrc@l_)@#$$6`hT?BeY-->)5-MHgG;9so+gdYzwYkZ6&MVS_$5oTO z76!JH>TlvU4TLOqxQ#55b|v~9_K>b>{3NCkTKH)MTMz@7vgzf@N1<~Z;uYr)czZW` zKZBdsau@bBgfI^UC(A4>4-I8Qf-P{C^z5J0TWRy>T`F_etw)D10JC;++E-lsa%?0S zm6}#4F%^_ZVH|QcaYM8(yETdsO_w2X{za}!06u3=1)XH+OFlH_Y;&BniDO!#*ObF6iujufh9CMDA$N2vJChdQ zPe1*L(Lv5AzqO^F%Aj9_U|&_8X9_4gt{FrIKo7x>PO8*B0HikSBd?CUBt^AO4pV$?R?TIC>3RP_36w$^PpaS?tYfu+cW=z{3VcP3{m; zJmj~{;?N4Xb@DY0woZgViZ#RVe(WW-U%EZ-;@q0qTqf@7<~Fgsm-VgQQ`lRzyMxfK z>IJq#WlkaU)o@O?3yv)?!!S?FgkK6ON#8d$Tb)cUI1oybZ-dN`u*EubuK#4W?Tk%qGEah`D)Q)d=@*M%STS<*liSbk5cAYqbx3MT&!u+w>^iM$_I5-EFy zvY~6g47UbM3ISXupkJ`x+Clo;O3^D$(4xGYrZfU+y=r zz5dsJUGAC0qlbE(M$}^y-Oa!bi}w^c96vsDG@g*>=g^^sL4gC)s(-~t&{~E>CUiaU zfb}~I(8a2qu5c{tm8CjLO%LAX$RpuLoNahPm$b;}eHAjJn9N&8IV zZ6uayc$3QQc36(n`?}3iDR}v+S?KR73A3yj?w!OmrNd24nQNzh5%e?pZgjff+ilPJLMAqo#wfHw%N)c z{bv0s@Q5}OrFLDi!Kjs>ysD;EMJFETMiN;C=b29W;5YNmo_(kPO5f{0p9R77D`()w z;+*I188@sfxy(N@DI>jM8aP)o61%C=aFmT=7F%#vPg+z|Tb?vfr&md?+$mT}5tw^e z{g31Yw@0S+OkMyn~Qc}i-7znKlUwD<=7j^RP(h_dgFV7xmUGZ6$nd)5W z=_O_Z%w>yq?0jd1EfIhfCfZyJ-l>HCQn&>yyExB>6>P5~8|pY8IV>$-Ms7w3K>?p= z+j4PG?}Cw{fRS~8PAL-k4{1}=3o&dwC}l?qr$1Fkr$Ocy-Oq8?Kt+vC+rWYBtDeX) zCE+wL`%Y*50z9P*-KY$xLHi-lU^@R!`lsV6-wIDz@lE4H$X7T4u%9r2@ESdLIYQgh zaiW_g3dsn7e;OZUyi;GU3mqC*`vld6+UUi6O#fz+gXt_I7aKGLNEa`2dWQXc5Xv^<1 z54nxRq-&uG5PVe$XWG@vOK};pqOz`f z;(*zPtAfS!Ldz&jv!(3sT(CAuJscmpc@{V8ekW8u7zkgP`{pR*btKRET3koh?Yw0= zfUMKW5Iq^U4MJ!N=zh~FV~1j-p3htLYrl!> jL=dR*#AoZ@P