From ae4fed826aa105eca9d0098180af2b8aff014ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 4 May 2024 16:40:31 +0200 Subject: [PATCH 01/45] Add basis for showcase window --- CMakeLists.txt | 1 + sandbox/CMakeLists.txt | 2 +- showcase/CMakeLists.txt | 30 +++ showcase/resources/qlementine_icon.icns | Bin 0 -> 145050 bytes showcase/resources/qlementine_icon.ico | Bin 0 -> 160734 bytes showcase/resources/showcase.qrc | 8 + showcase/resources/themes/dark.json | 71 ++++++ showcase/resources/themes/light.json | 71 ++++++ showcase/src/ShowcaseWindow.cpp | 322 ++++++++++++++++++++++++ showcase/src/ShowcaseWindow.hpp | 23 ++ showcase/src/main.cpp | 46 ++++ 11 files changed, 573 insertions(+), 1 deletion(-) create mode 100644 showcase/CMakeLists.txt create mode 100644 showcase/resources/qlementine_icon.icns create mode 100644 showcase/resources/qlementine_icon.ico create mode 100644 showcase/resources/showcase.qrc create mode 100644 showcase/resources/themes/dark.json create mode 100644 showcase/resources/themes/light.json create mode 100644 showcase/src/ShowcaseWindow.cpp create mode 100644 showcase/src/ShowcaseWindow.hpp create mode 100644 showcase/src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ae104ba..b4d601d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,4 +39,5 @@ add_subdirectory(lib) # Sandbox. if(${PROJECT_IS_TOP_LEVEL}) add_subdirectory(sandbox) + add_subdirectory(showcase) endif() diff --git a/sandbox/CMakeLists.txt b/sandbox/CMakeLists.txt index f5ded43..61b6849 100644 --- a/sandbox/CMakeLists.txt +++ b/sandbox/CMakeLists.txt @@ -27,7 +27,7 @@ install(TARGETS ${SANDBOX_NAME} set_target_properties(${SANDBOX_NAME} PROPERTIES INTERNAL_CONSOLE OFF EXCLUDE_FROM_ALL OFF - FOLDER "sandbox" + FOLDER "tools" CMAKE_AUTOMOC ON CMAKE_AUTORCC ON CMAKE_AUTOUIC ON diff --git a/showcase/CMakeLists.txt b/showcase/CMakeLists.txt new file mode 100644 index 0000000..a3a9d05 --- /dev/null +++ b/showcase/CMakeLists.txt @@ -0,0 +1,30 @@ +find_package(Qt${QT_DEFAULT_MAJOR_VERSION} + COMPONENTS + Core + Widgets + REQUIRED +) + +add_executable(showcase WIN32 MACOSX_BUNDLE) +target_sources(showcase PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/resources/showcase.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ShowcaseWindow.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ShowcaseWindow.hpp +) +target_link_libraries(showcase + PRIVATE + oclero::qlementine + Qt::Core + Qt::Widgets +) + +set_target_properties(showcase PROPERTIES + INTERNAL_CONSOLE OFF + EXCLUDE_FROM_ALL OFF + FOLDER tools + AUTOMOC ON + AUTORCC ON +) + +target_deploy_qt(showcase) diff --git a/showcase/resources/qlementine_icon.icns b/showcase/resources/qlementine_icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..32d7547210f1535a0266a1c8ff94091c3f688e7e GIT binary patch literal 145050 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 literal 0 HcmV?d00001 diff --git a/showcase/resources/qlementine_icon.ico b/showcase/resources/qlementine_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..49774ac5cc52f6aab18f4d8cb2c5701f10a88825 GIT binary patch literal 160734 zcmeEP2|QKL7r)PzELpN8p-l?eTL{lu%JQ_RNGMs`6DrG7QBu)LQPxn1N-4=2X+;~Y zR4PRgDf|7Od3wL!`}r$tzn|*)e8#(T@7%dF-*e{7nKNf*FpPk)Vd#&5iDTuHF)RkI z$>ff>Br5^)mBlbCtB!cwK@2-Rm4Fe6-=1q>nCUG7CMWmp`FITT9L9i2N_NEUg)vM* zi2)NA|Mr|4!}c06U_wG2@ts34Y>FiV#>dwYzsQ1N8TJeqH>5-5v1h_Cmo*HSAIWGY zCz~)TD5w4`ow?{K3apSGTe3dR7Q-gT>g#CEcYFNd*pSeX56 zNKZr><2aC;jL8`c%Vo%to6f{A-Sj%V zGF?93hgqCG>xS1vQO`Xm)n8<`Z*}0@l{K_@lg;j->_p#fhj88*Gxl6p%Aff>-+A&b zVpwImLjE>p@ogifv~Vpyb*wzfH41arb@m+bDw`oNI~_@jwYgSttzu7;J=geKA#;+_RC|U-5!>ktF7<(blXW5DUug& ziSjFJ7Rf`K->*Ho?Ihbgo|uWb`b;zBKZqICaKw5@a~wd$&fb;AeNZ#Q<`S>ejgQ-% z_{yz^#+=i1C^o*PQ*wK_hu1{n!(4(v((>lvF&ZyDGNe@I9l_X%EZYtRd1jg#JkW2y zzAgB4?q?nYDR~Qy*{`RLZ~A(K>CnwJa%%qXHt}sYDjuOQMj9J2Y*&_=TjSjQVl|_T z?(M&#t|o4Kj;WE$KytW*evVSz2F>a22S*Fdf4;-=W+c1*8E(&jcP0k6C0P<96>a#S zaw2@>yzptQafCg0<_MfSxbUE?{w9H;32#1&?IQ;67f~7ZVx1iM8aC?n&b5`Se%bZm zyN}J-x~#lJZ3xR&ASjW?jfYFn@TKu}!;2$^?_nop9?>g*QN1c;)mdpvZ`maIkmwC7 z1x|{Xdl(+)=OufOUaU`eJxeQMxJB^CYo9lyf6Yzvi1)T46flr5^<6tOVjAt{zr&fu zT9*&^sLhFyo$b+HZl;8raF;X0>z*pA%N|Xr<-AcY#^$?Mg_WU6zdHN#Sm}UF$M#jI zICF?R7rD5mN_;9N7&v{>^s+r$<|DvxyP<5gd^QW;HkL%OG4Ce_a)0Iul(c_t=O%K` zb-ga@BJAvT>%z+#%a2aYp854v?iEsE&3O616&G_IeWlLClTI{v%niy`<(_{P)78|T zUh4C15-If>oaBW<%KghuE1lKB+Yb*DA2HPD{x80wW z(9pJD$f|_tfI@g2L5bKH7TnHw^H#{myxpwq#KYcWYDdp#704GPsHzvKC)Oo9S4j*} zU*!6FakP_+?e&Oj9`j1FUa?1R4EI~Gmg(Lb=QKk-)RIPg;f_9e+E-qEt{>NipodLD zqBGJtFSC^D2C_9=bQP9!j^cJJQV4vokYRmvGuz=~^8&UMGYXKUSCsOGAMxIA(!Ry_ zxyO?g=2JaJUS>%(H<+6tS~l|;W9n4a)eSymTf@`&bzAfUT8f0>9Tweki5acy58_9o z-rg;j+vP=AdFDy9)cHE8S=+aVr&^w2y`L@}LwY9TG!-LJ^bRxmaK#1hvy(Lh zp2?6G9iEZm;C)+K%}*d(`bx%u7~U<-{Fw~=n;7mXFFJf>^Rpd~0nF)=3`$b9FSg&) zVixCcVb55edL+Z=A$hg`KKth6SlRFxc7;T(C4R4)yqA6rmypI5-w|RUiMq7#-@cm| zVl>mK{AkbG;!HH-+xpkh;cmLfIslqLwY!9pYk* zA+>k5vG67rGPC&2tQ)xD4EHr#1B!_Y&c3+nbEYxEaQv|N`;PKeuhd2Sca0&=+io{f z`6V|<>M=EG?rg!g?h*G36BQo3G*;q19dt%#djRheu;vWpZS}i2PmXk%4<=_y_DM^Zwo3SmYR)lTaX~v!YVo#N# z z4EMUYit}wXU^b0noiXvfI)af1@X(AUOQ$ipK6u4GN0jWapC`Q_;6hmyQy9+Ax4p$gTvSt& zq_$VqjNrq(DQ4+8{acguDx~i}9Lf5@DNrJXebPqCsqzk18q?kr*!xVX`Nib&w7+Jpv~Zl;96-GIFwXg{P6i`<*mEYcR0xJ z${NRJIcgEMU+4Kc2er}<0owX`bE_u=SgfA^PHj|UpsQqC;}Y?4Or?gb!vy_vhmrOQ zXz4y`TvlG+LgH}A%_`Th{+e~*)9mJ-J>mhh6c zaV}h|iK8ozSH|CYlF_7de1T(d1?`7hk)0j4ksbjF)xO+v(M^#KjHMqb@YACpmoBV)Rn`cvPZ? z0*4t%{G_?ujY`IiJdW{%NoV}!9tWx~W-=-fs1|;@RZA`>kLNNWO!7j=Qf?3b?Yrce zJ`xFy8PA*S2s<@bFTFBq(y1ij^8sQab0=M?k6u=%I9%JpyWJ$gTh7#f4Ac1qQN~ht zg*20@%A$d62OBK~tJ{|m3+;23YchJv7%gC7a)`fh&xC2%yCYr#7^~si#2shrR*@D> zS$}oXl22QVB$JNZA59P+9eB;{sk9{1##gM~H#acM@Nill%T@T~%q5w^F$?@Nl(lrr z$aW^!;i@BFLj}lzB}=VegpighI&C*rKhk{vvFoT;yOLN4(q-y9){C&8WfgWjv~KIw z)0*5*N{>IkV$Yv2p(f{C>ZSin%JJ;!S8)(3l)HcmUg^vG<3=&~wM4DwezuM6ON z~mVN?bjrqPS%NU5>_)exX=6!iGb+u8MxEua<>Vuaz28?8%8ON3C3)X?zax7opT=mz zH=b{Kl$wldosTbVTy^7OmQK-UYYR@IM`E3dFS{{|WQphq% zebv6N39GlB^5q;W@SfyUwwZj}gC}r^b*9>-!pA1kwuVC_*XkHqtRI7U9#|)8eJGK< z#ROaZP^B<`qS_wffwEzFc{?H!Bs@Jlk&>I!LpE}{Q=TEo0{7=JQakNJ{_<6isnm)|JD%;z zrt4nMm-#Z@v(1v(#vHjpo#8C@^u5~<-Y^&un8c^sp1=wW<2^af&&wPZ6Wp%O`SE-v zSJ9I(DqC(XDhdzR@L`=@pv!5uTS$bDa}ObO{i!#qb;2?ABqpVI)k5(V^NG*TZ5F(5 z@J#4!srKp1vCrSUyJC>F=S>@_Zgj!vgi!XxFMMfSDw-jCzHr5v+BrP=wBvk%o#{|= zYr$g;t%myn`NyK$+plNVOM1l+?`WOgS}e%3C&x?hVb1ZhN2Ar_C-7+`-#%eBwcdjC zaA@4e{YRA<#5FcIRgsieEPkr*_{q3^o5d!@J>J}y__s^j}CkvhKo@u{ZrP)Uv>Sb8aQ<>xqC=Ay}l z6(SW26az-cVo^uiDsCFzQLBCs^vF$Q_7d-*7gNJoTn?7(y7M6}W!i#AbHr~YN@A`j zk7Vu^AQv^arM+8t?O61UGA&ih4X+E`B+~-p*H*8%n#(~Rs{U+k+6!AoR{l}jSa
pW-8)lH4XA5|uNdH3pBkR=mo3cr-s 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 Otq!BDdVX(AJ@ + + themes/dark.json + themes/light.json + qlementine_icon.ico + qlementine_icon.icns + + diff --git a/showcase/resources/themes/dark.json b/showcase/resources/themes/dark.json new file mode 100644 index 0000000..663b1bc --- /dev/null +++ b/showcase/resources/themes/dark.json @@ -0,0 +1,71 @@ +{ + "backgroundColorMain1": "#1f1f1f", + "backgroundColorMain2": "#2a2a2a", + "backgroundColorMain3": "#363636", + "backgroundColorMain4": "#414141", + "borderColor": "#4b4b4b", + "borderColorDisabled": "#444444", + "borderColorHovered": "#717171", + "borderColorPressed": "#a0a0a0", + "focusColor": "#34988666", + "meta": { + "author": "Olivier Cléro", + "name": "Dark", + "version": "1.4.0" + }, + "neutralColor": "#565656", + "neutralColorDisabled": "#353535", + "neutralColorHovered": "#4c4c4c", + "neutralColorPressed": "#404040", + "primaryAlternativeColor": "#126d5d", + "primaryAlternativeColorDisabled": "#1C3B36", + "primaryAlternativeColorHovered": "#0d6354", + "primaryAlternativeColorPressed": "#177665", + "primaryColor": "#349886", + "primaryColorDisabled": "#2c403c", + "primaryColorForeground": "#ffffff", + "primaryColorForegroundDisabled": "#3a534d", + "primaryColorForegroundHovered": "#ffffff", + "primaryColorForegroundPressed": "#ffffff", + "primaryColorHovered": "#2a7a6b", + "primaryColorPressed": "#2f8979", + "secondaryAlternativeColor": "#8f8f8f", + "secondaryAlternativeColorDisabled": "#8f8f8f3f", + "secondaryAlternativeColorHovered": "#797979", + "secondaryAlternativeColorPressed": "#848484", + "secondaryColor": "#ffffff", + "secondaryColorDisabled": "#ffffff33", + "secondaryColorForeground": "#2f2f2f", + "secondaryColorForegroundDisabled": "#2f2f2f", + "secondaryColorForegroundHovered": "#2f2f2f", + "secondaryColorForegroundPressed": "#2f2f2f", + "secondaryColorHovered": "#d5d5d5", + "secondaryColorPressed": "#ebebeb", + "semiTransparentColor1": "0xffffff18", + "semiTransparentColor2": "0xffffff23", + "semiTransparentColor3": "0xffffff28", + "semiTransparentColor4": "0xffffff2d", + "shadowColor1": "#00000066", + "shadowColor2": "#000000bb", + "shadowColor3": "#000000ff", + "statusColorError": "#ef5151", + "statusColorErrorDisabled": "#ef515133", + "statusColorErrorHovered": "#c64848", + "statusColorErrorPressed": "#da4d4d", + "statusColorForeground": "#ffffff", + "statusColorForegroundDisabled": "#ffffff26", + "statusColorForegroundHovered": "#ffffff", + "statusColorForegroundPressed": "#ffffff", + "statusColorInfo": "#4ab9e9", + "statusColorInfoDisabled": "#4ab9e933", + "statusColorInfoHovered": "#429bc1", + "statusColorInfoPressed": "#46aad6", + "statusColorSuccess": "#32cd79", + "statusColorSuccessDisabled": "#32cd7a26", + "statusColorSuccessHovered": "#2eaa68", + "statusColorSuccessPressed": "#30bc71", + "statusColorWarning": "#ffcd1e", + "statusColorWarningDisabled": "#ffcd1e33", + "statusColorWarningHovered": "#d2ab1f", + "statusColorWarningPressed": "#e9bc1f" +} diff --git a/showcase/resources/themes/light.json b/showcase/resources/themes/light.json new file mode 100644 index 0000000..2c7c841 --- /dev/null +++ b/showcase/resources/themes/light.json @@ -0,0 +1,71 @@ +{ + "backgroundColorMain1": "#ffffff", + "backgroundColorMain2": "#f3f3f3", + "backgroundColorMain3": "#e3e3e3", + "backgroundColorMain4": "#dcdcdc", + "borderColor": "#d3d3d3", + "borderColorDisabled": "#e9e9e9", + "borderColorHovered": "#b3b3b3", + "borderColorPressed": "#a3a3a3", + "focusColor": "#40a9ff66", + "meta": { + "author": "Olivier Cléro", + "name": "Light", + "version": "1.4.0" + }, + "neutralColor": "#e1e1e1", + "neutralColorDisabled": "#eeeeee", + "neutralColorHovered": "#d9d9d9", + "neutralColorPressed": "#d2d2d2", + "primaryAlternativeColor": "#106ef9", + "primaryAlternativeColorDisabled": "#a9d6ff", + "primaryAlternativeColorHovered": "#107bfd", + "primaryAlternativeColorPressed": "#108bfd", + "primaryColor": "#1890ff", + "primaryColorDisabled": "#d1e9ff", + "primaryColorForeground": "#ffffff", + "primaryColorForegroundDisabled": "#ecf6ff", + "primaryColorForegroundHovered": "#ffffff", + "primaryColorForegroundPressed": "#ffffff", + "primaryColorHovered": "#2c9dff", + "primaryColorPressed": "#40a9ff", + "secondaryAlternativeColor": "#909090", + "secondaryAlternativeColorDisabled": "#c3c3c3", + "secondaryAlternativeColorHovered": "#747474", + "secondaryAlternativeColorPressed": "#828282", + "secondaryColor": "#404040", + "secondaryColorDisabled": "#d4d4d4", + "secondaryColorForeground": "#ffffff", + "secondaryColorForegroundDisabled": "#ededed", + "secondaryColorForegroundHovered": "#ffffff", + "secondaryColorForegroundPressed": "#ffffff", + "secondaryColorHovered": "#333333", + "secondaryColorPressed": "#262626", + "semiTransparentColor1": "#0000000a", + "semiTransparentColor2": "#00000019", + "semiTransparentColor3": "#00000021", + "semiTransparentColor4": "#00000028", + "shadowColor1": "#00000020", + "shadowColor2": "#00000040", + "shadowColor3": "#00000060", + "statusColorError": "#e96b72", + "statusColorErrorDisabled": "#f9dadc", + "statusColorErrorHovered": "#f47c83", + "statusColorErrorPressed": "#ff9197", + "statusColorForeground": "#ffffff", + "statusColorForegroundDisabled": "#ffffff99", + "statusColorForegroundHovered": "#ffffff", + "statusColorForegroundPressed": "#ffffff", + "statusColorInfo": "#1ba8d5", + "statusColorInfoDisabled": "#c7eaf5", + "statusColorInfoHovered": "#1eb5e5", + "statusColorInfoPressed": "#29c0f0", + "statusColorSuccess": "#2bb5a0", + "statusColorSuccessDisabled": "#d5f0ec", + "statusColorSuccessHovered": "#3cbfab", + "statusColorSuccessPressed": "#4ecdb9", + "statusColorWarning": "#fbc064", + "statusColorWarningDisabled": "#feefd8", + "statusColorWarningHovered": "#ffcf6c", + "statusColorWarningPressed": "#ffd880" +} diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp new file mode 100644 index 0000000..4407b20 --- /dev/null +++ b/showcase/src/ShowcaseWindow.cpp @@ -0,0 +1,322 @@ +#include "ShowcaseWindow.hpp" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace oclero::qlementine::showcase { +class DummyWorkspace : public QWidget { +public: + using QWidget::QWidget; + +protected: + void paintEvent(QPaintEvent* evt) override { + QPainter p(this); + p.fillRect(rect(), Qt::black); + } +}; + +struct ShowcaseWindow::Impl { + ShowcaseWindow& owner; + QPointer qlementineStyle; + + QVBoxLayout* rootLayout{ nullptr }; + QMenuBar* menuBar{ nullptr }; + QTabBar* tabBar{ nullptr }; + QToolBar* toolBar{ nullptr }; + QSplitter* splitter{ nullptr }; + QWidget* leftPanel{ nullptr }; + QWidget* rightPanel{ nullptr }; + QWidget* workspace{ nullptr }; + QStatusBar* statusBar{ nullptr }; + + struct Actions { + QAction* newFile{ nullptr }; + QAction* openFile{ nullptr }; + QAction* saveFile{ nullptr }; + QAction* closeFile{ nullptr }; + QAction* preferences{ nullptr }; + QAction* quit{ nullptr }; + + QAction* undo{ nullptr }; + QAction* redo{ nullptr }; + QAction* cut{ nullptr }; + QAction* copy{ nullptr }; + QAction* paste{ nullptr }; + QAction* delete_{ nullptr }; + } actions; + + Impl(ShowcaseWindow& o) + : owner(o) + , actions({}) {} + + void setupUI() { + setupMenuBar(); + setupTabBar(); + setupToolBar(); + setupLeftPanel(); + setupRightPanel(); + setupWorkspace(); + setupSplitter(); + setupStatusBar(); + setupLayout(); + } + + void setupMenuBar() { + menuBar = new QMenuBar(nullptr); + const auto cb = []() {}; + + { + auto* menu = menuBar->addMenu("File"); + { + // TODO: Use the enum provided by Qt6 instead of strings for icon IDs. + menu->addAction(QIcon::fromTheme("document-new"), "New", cb, QKeySequence::StandardKey::New); + menu->addAction(QIcon::fromTheme("document-open"), "Open...", cb, QKeySequence::StandardKey::Open); + + auto* recentFilesMenu = menu->addMenu("Recent Files"); + for (auto i = 0; i < 5; ++i) { + recentFilesMenu->addAction( + QIcon::fromTheme("document-open-recent"), QString("Recent File %1").arg(i + 1), cb, QKeySequence{}); + } + + menu->addSeparator(); + menu->addAction(QIcon::fromTheme("document-save"), "Save", cb, QKeySequence::StandardKey::Save); + menu->addAction(QIcon::fromTheme(""), "Close", cb, QKeySequence::StandardKey::Close); + menu->addAction(QIcon::fromTheme("document-print"), "Print...", cb, QKeySequence::StandardKey::Print); + + menu->addSeparator(); + menu->addAction(QIcon::fromTheme(""), "Preferences...", cb, QKeySequence::StandardKey::Preferences); + + menu->addSeparator(); + menu->addAction( + QIcon::fromTheme("application-exit"), "Quit", + []() { + qApp->quit(); + }, + QKeySequence::StandardKey::Quit); + } + } + { + auto* menu = menuBar->addMenu("Edit"); + { + menu->addAction(QIcon::fromTheme("edit-undo"), "Undo", cb, QKeySequence::StandardKey::Undo); + menu->addAction(QIcon::fromTheme("edit-redo"), "Redo", cb, QKeySequence::StandardKey::Redo); + + menu->addSeparator(); + menu->addAction(QIcon::fromTheme("edit-cut"), "Cut", cb, QKeySequence::StandardKey::Cut); + menu->addAction(QIcon::fromTheme("edit-copy"), "Copy", cb, QKeySequence::StandardKey::Copy); + menu->addAction(QIcon::fromTheme("edit-paste"), "Paste", cb, QKeySequence::StandardKey::Paste); + menu->addAction(QIcon::fromTheme("edit-delete"), "Delete", cb, QKeySequence::StandardKey::Delete); + } + } + { + auto* menu = menuBar->addMenu("Help"); + { + menu->addAction(QIcon::fromTheme("mail-send"), "Contact", cb, QKeySequence{}); + menu->addAction(QIcon::fromTheme(""), "About...", cb, QKeySequence{}); + } + } + } + + void setupTabBar() { + tabBar = new QTabBar(&owner); + tabBar->setDocumentMode(true); + tabBar->setFocusPolicy(Qt::NoFocus); + tabBar->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); + tabBar->setTabsClosable(true); + tabBar->setMovable(false); + tabBar->setExpanding(false); + tabBar->setChangeCurrentOnDrag(true); + tabBar->setUsesScrollButtons(true); + + qlementineStyle->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::None); + + for (auto i = 0; i < 4; ++i) { + tabBar->addTab(QIcon(), QString("Document %1").arg(i + 1)); + } + + QObject::connect(tabBar, &QTabBar::tabCloseRequested, tabBar, [this](int index) { + tabBar->removeTab(index); + }); + } + + void setupToolBar() { + toolBar = new QToolBar("App ToolBar", &owner); + toolBar->setBackgroundRole(QPalette::ColorRole::Window); + toolBar->setAutoFillBackground(false); + toolBar->setAllowedAreas(Qt::ToolBarArea::TopToolBarArea); + toolBar->setMovable(false); + toolBar->setFloatable(false); + toolBar->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonFollowStyle); + + { + auto* toolButton = new QToolButton(toolBar); + toolButton->setFocusPolicy(Qt::NoFocus); + toolButton->setIcon(QIcon::fromTheme("edit-undo")); + toolBar->addWidget(toolButton); + } + + { + auto* toolButton = new QToolButton(toolBar); + toolButton->setFocusPolicy(Qt::NoFocus); + toolButton->setIcon(QIcon::fromTheme("edit-undo")); + toolBar->addWidget(toolButton); + } + } + + void setupLeftPanel() { + auto* widget = new QWidget(&owner); + leftPanel = widget; + leftPanel->setMinimumWidth(200); + leftPanel->setMaximumWidth(400); + + auto* layout = new QVBoxLayout(widget); + layout->setContentsMargins({ 0, 0, 0, 0 }); + layout->setSpacing(0); + + { + auto* topBar = new QWidget(widget); + layout->addWidget(topBar); + auto* topBarLayout = new QHBoxLayout(topBar); + topBarLayout->setContentsMargins({ 12, 8, 12, 8 }); + + auto* lineEdit = new LineEdit(widget); + lineEdit->setClearButtonEnabled(true); + lineEdit->setPlaceholderText("Search..."); + topBarLayout->addWidget(lineEdit, 1); + + auto* button = new QPushButton(widget); + button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + topBarLayout->addWidget(button); + } + + { + auto* navBar = new NavigationBar(widget); + layout->addWidget(navBar); + navBar->setItemsShouldExpand(true); + navBar->addItem("Objects", QIcon(), QString("%1").arg(12)); + navBar->addItem("Materials", QIcon(), QString("%1").arg(3)); + } + + layout->addWidget(makeHorizontalLine(widget)); + + auto* treeView = new QTreeView(widget); + layout->addWidget(treeView, 1); + } + + void setupRightPanel() { + auto* widget = new QWidget(&owner); + rightPanel = widget; + rightPanel->setMinimumWidth(200); + rightPanel->setMaximumWidth(400); + + auto* layout = new QVBoxLayout(widget); + layout->setContentsMargins({ 0, 0, 0, 0 }); + layout->setSpacing(0); + + { + auto* topBar = new QWidget(widget); + layout->addWidget(topBar); + auto* topBarLayout = new QHBoxLayout(topBar); + topBarLayout->setContentsMargins({ 12, 8, 12, 8 }); + + { + auto* segmentedControl = new SegmentedControl(topBar); + topBarLayout->addWidget(segmentedControl); + segmentedControl->setItemsShouldExpand(false); + segmentedControl->addItem("Properties", QIcon(), QString("%1").arg(4)); + segmentedControl->addItem("Scene", QIcon(), QString("%1").arg(2)); + } + } + + layout->addWidget(makeHorizontalLine(widget)); + + { + auto* scrollArea = new QScrollArea(widget); + layout->addWidget(scrollArea); + auto* content = new QWidget(scrollArea); + auto* contentLayout = new QVBoxLayout(content); + contentLayout->setContentsMargins({ 16, 12, 16, 12 }); + { + auto* checkBox = new QCheckBox("Some checkbox", content); + contentLayout->addWidget(checkBox); + } + } + } + + void setupWorkspace() { + workspace = new DummyWorkspace(&owner); + workspace->setFocusPolicy(Qt::StrongFocus); + workspace->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + } + + void setupSplitter() { + splitter = new QSplitter(&owner); + splitter->setHandleWidth(1); + splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + splitter->setOrientation(Qt::Horizontal); + splitter->addWidget(leftPanel); + splitter->addWidget(workspace); + splitter->addWidget(rightPanel); + + splitter->setStretchFactor(0, 1); + splitter->setStretchFactor(1, 6); + splitter->setStretchFactor(2, 1); + } + + void setupStatusBar() { + statusBar = new QStatusBar(&owner); + statusBar->setSizeGripEnabled(false); + } + + void setupLayout() { + rootLayout = new QVBoxLayout(&owner); + rootLayout->setContentsMargins(0, 0, 0, 0); + rootLayout->setSpacing(0); + rootLayout->setMenuBar(menuBar); + rootLayout->addWidget(tabBar); + rootLayout->addWidget(toolBar); + rootLayout->addWidget(splitter); + rootLayout->addWidget(statusBar); + workspace->setFocus(Qt::NoFocusReason); + } + + void setupShortcuts() { + // TODO + } +}; + +ShowcaseWindow::ShowcaseWindow(QWidget* parent) + : QWidget(parent) + , _impl(new Impl(*this)) { + setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); + _impl->setupUI(); + _impl->setupShortcuts(); + setMinimumSize(600, 400); + resize(800, 600); + oclero::qlementine::centerWidget(this); +} + +ShowcaseWindow::~ShowcaseWindow() = default; + +void ShowcaseWindow::setCustomStyle(QlementineStyle* style) { + _impl->qlementineStyle = style; +} +} // namespace oclero::qlementine::showcase diff --git a/showcase/src/ShowcaseWindow.hpp b/showcase/src/ShowcaseWindow.hpp new file mode 100644 index 0000000..51e2ddc --- /dev/null +++ b/showcase/src/ShowcaseWindow.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include + +namespace oclero::qlementine { +class QlementineStyle; +} + +namespace oclero::qlementine::showcase { +class ShowcaseWindow : public QWidget { +public: + ShowcaseWindow(QWidget* parent = nullptr); + ~ShowcaseWindow(); + + void setCustomStyle(QlementineStyle* style); + +private: + struct Impl; + std::unique_ptr _impl{}; +}; +} // namespace oclero::qlementine::showcase diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp new file mode 100644 index 0000000..3e45265 --- /dev/null +++ b/showcase/src/main.cpp @@ -0,0 +1,46 @@ +#include + +#include + +#include "ShowcaseWindow.hpp" + +#define USE_CUSTOM_STYLE 1 + +int main(int argc, char* argv[]) { + // Must be set before creating a QApplication. +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true); + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true); +#endif + + QApplication qApplication(argc, argv); + + // Must be set after creating a QApplication. + QGuiApplication::setApplicationDisplayName("Showcase"); + QCoreApplication::setApplicationName("Showcase"); + QGuiApplication::setDesktopFileName("Showcase"); + QCoreApplication::setOrganizationName("oclero"); + QCoreApplication::setOrganizationDomain("olivierclero.com"); + QCoreApplication::setApplicationVersion("1.0.0"); + QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); + QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); + + // Set custom QStyle. +#if USE_CUSTOM_STYLE + auto* const style = new oclero::qlementine::QlementineStyle(&qApplication); + style->setAnimationsEnabled(true); + style->setUseMenuForComboBoxPopup(false); + style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); + style->setThemeJsonPath(QStringLiteral(":/light.json")); + qApplication.setStyle(style); +#endif + + auto window = std::make_unique(); +#if USE_CUSTOM_STYLE + window->setCustomStyle(style); +#endif + + window->show(); + + return qApplication.exec(); +} From 33f31906c05030fadef9a187be52df5e06fa4560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 29 Jun 2024 14:08:30 +0200 Subject: [PATCH 02/45] Add qlementine-icons dependency for showcase app --- CMakePresets.json | 39 ++++++++++++++++++++++ sandbox/CMakeLists.txt | 24 -------------- showcase/CMakeLists.txt | 71 ++++++++++++++++++++++++++++++----------- showcase/src/main.cpp | 5 +++ 4 files changed, 96 insertions(+), 43 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 7e24687..519cf58 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -76,6 +76,19 @@ "rhs": "Darwin" } }, + { + "name": "macos-showcase", + "displayName": "Showcase for macOS", + "configurePreset": "macos", + "description": "Showcase - Release build with Xcode for macOS", + "targets": ["showcase"], + "configuration": "Release", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Darwin" + } + }, { "name": "windows", "displayName": "Windows", @@ -102,6 +115,19 @@ "rhs": "Windows" } }, + { + "name": "windows-showcase", + "displayName": "Showcase for Windows", + "configurePreset": "windows", + "description": "Showcase - Release build with Visual Studio for Windows", + "targets": ["showcase"], + "configuration": "Release", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" + } + }, { "name": "linux", "displayName": "Linux", @@ -127,6 +153,19 @@ "lhs": "${hostSystemName}", "rhs": "Linux" } + }, + { + "name": "linux-showcase", + "displayName": "Showcase for Linux", + "configurePreset": "linux", + "description": "Showcase - Release build for Linux", + "targets": ["showcase"], + "configuration": "Release", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + } } ] } diff --git a/sandbox/CMakeLists.txt b/sandbox/CMakeLists.txt index 61b6849..c71ec20 100644 --- a/sandbox/CMakeLists.txt +++ b/sandbox/CMakeLists.txt @@ -45,27 +45,3 @@ set_target_properties(${SANDBOX_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Manual" XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF ) - -# target_deploy_qt(sandbox) - -# if(${QT_VERSION_MAJOR} STREQUAL "6") -# # NB: Broken in 6.7.x - -# # qt_generate_deploy_app_script( -# # TARGET ${SANDBOX_NAME} -# # OUTPUT_SCRIPT SANDBOX_DEPLOY_SCRIPT -# # ) - -# # add_custom_command(TARGET ${SANDBOX_NAME} POST_BUILD -# # COMMENT "Deploying Qt..." -# # COMMAND ${CMAKE_COMMAND} -P ${SANDBOX_DEPLOY_SCRIPT} -DQT_DEPLOY_PREFIX=$ -DQT_DEPLOY_BIN_DIR=. -# # ) -# # install(SCRIPT ${SANDBOX_DEPLOY_SCRIPT}) - -# # add_custom_command(TARGET ${SANDBOX_NAME} POST_BUILD -# # COMMENT "Deploying Qt..." -# # COMMAND ${CMAKE_COMMAND} -P ${SANDBOX_DEPLOY_SCRIPT} -# # ) -# else() -# target_deploy_qt(sandbox) -# endif() diff --git a/showcase/CMakeLists.txt b/showcase/CMakeLists.txt index a3a9d05..b35e66a 100644 --- a/showcase/CMakeLists.txt +++ b/showcase/CMakeLists.txt @@ -1,30 +1,63 @@ -find_package(Qt${QT_DEFAULT_MAJOR_VERSION} - COMPONENTS - Core - Widgets - REQUIRED -) +set(SHOWCASE_NAME "showcase") -add_executable(showcase WIN32 MACOSX_BUNDLE) -target_sources(showcase PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/resources/showcase.qrc +include(FetchContent) +FetchContent_Declare(qlementine_icons GIT_REPOSITORY "https://github.com/oclero/qlementine-icons.git") +FetchContent_MakeAvailable(qlementine_icons) + +if(APPLE) + set(APP_ICON_MACOS "${CMAKE_SOURCE_DIR}/branding/icon/icon.icns") + set_source_files_properties(${APP_ICON_MACOS} PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources" + ) +endif() + +set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ShowcaseWindow.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ShowcaseWindow.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/resources/showcase.qrc ) -target_link_libraries(showcase - PRIVATE - oclero::qlementine - Qt::Core - Qt::Widgets + +if(${QT_VERSION_MAJOR} STREQUAL "6") + qt_add_executable(${SHOWCASE_NAME} WIN32 MACOSX_BUNDLE + ${SOURCES} + ) +else() + add_executable(${SHOWCASE_NAME} WIN32 MACOSX_BUNDLE + ${SOURCES} + ) +endif() + +target_link_libraries(${SHOWCASE_NAME} PUBLIC + oclero::qlementine + oclero::qlementine_icons +) + +install(TARGETS ${SHOWCASE_NAME} + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -set_target_properties(showcase PROPERTIES +set_target_properties(${SHOWCASE_NAME} PROPERTIES INTERNAL_CONSOLE OFF EXCLUDE_FROM_ALL OFF - FOLDER tools - AUTOMOC ON - AUTORCC ON + FOLDER "tools" + CMAKE_AUTOMOC ON + CMAKE_AUTORCC ON + CMAKE_AUTOUIC ON + + MACOSX_BUNDLE_GUI_IDENTIFIER "oclero.qlementine.${SHOWCASE_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "Showcase" + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_ICON_FILE "icon.icns" + MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT} + + XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "${XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED}" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}" + XCODE_ATTRIBUTE_CODE_SIGN_STYLE "${XCODE_ATTRIBUTE_CODE_SIGN_STYLE}" + XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF ) -target_deploy_qt(showcase) +target_deploy_qt(${SHOWCASE_NAME}) diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp index 3e45265..8bb165f 100644 --- a/showcase/src/main.cpp +++ b/showcase/src/main.cpp @@ -1,6 +1,7 @@ #include #include +#include #include "ShowcaseWindow.hpp" @@ -25,6 +26,10 @@ int main(int argc, char* argv[]) { QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); + // Custom icon theme. + oclero::qlementine::icons::initializeIconTheme(); + QIcon::setThemeName("qlementine"); + // Set custom QStyle. #if USE_CUSTOM_STYLE auto* const style = new oclero::qlementine::QlementineStyle(&qApplication); From 2a9ba7ed0294d8325fd1c34ec17912bd756829d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 4 Jul 2024 22:02:23 +0000 Subject: [PATCH 03/45] Move qlementine-icons dependency to lib's cmake file --- lib/CMakeLists.txt | 8 ++++++++ showcase/CMakeLists.txt | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 496ba05..deff591 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,5 +1,10 @@ set(LIB_TARGET_NAME ${PROJECT_NAME}) +# Dependency: qlementine-icons +include(FetchContent) +FetchContent_Declare(qlementine_icons GIT_REPOSITORY "https://github.com/oclero/qlementine-icons.git") +FetchContent_MakeAvailable(qlementine_icons) + # Declare files. set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/animation/WidgetAnimator.cpp @@ -20,6 +25,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/BadgeUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ColorUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FontUtils.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/IconUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ImageUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PrimitiveUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/RadiusesF.cpp @@ -69,6 +75,7 @@ set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/BadgeUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/ColorUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/FontUtils.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/IconUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/ImageUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/PrimitiveUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/RadiusesF.hpp @@ -124,6 +131,7 @@ target_link_libraries(${LIB_TARGET_NAME} PUBLIC Qt6::Core Qt6::Widgets Qt6::Svg + oclero::qlementine_icons ) set_target_properties(${LIB_TARGET_NAME} diff --git a/showcase/CMakeLists.txt b/showcase/CMakeLists.txt index b35e66a..8ee5d31 100644 --- a/showcase/CMakeLists.txt +++ b/showcase/CMakeLists.txt @@ -1,9 +1,5 @@ set(SHOWCASE_NAME "showcase") -include(FetchContent) -FetchContent_Declare(qlementine_icons GIT_REPOSITORY "https://github.com/oclero/qlementine-icons.git") -FetchContent_MakeAvailable(qlementine_icons) - if(APPLE) set(APP_ICON_MACOS "${CMAKE_SOURCE_DIR}/branding/icon/icon.icns") set_source_files_properties(${APP_ICON_MACOS} PROPERTIES From d9b7de1fcb6df338521b93b8ff90d489436a77cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 4 Jul 2024 22:03:19 +0000 Subject: [PATCH 04/45] Fix missing #pragma once --- lib/include/oclero/qlementine/utils/ColorUtils.hpp | 2 ++ lib/include/oclero/qlementine/utils/FontUtils.hpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/include/oclero/qlementine/utils/ColorUtils.hpp b/lib/include/oclero/qlementine/utils/ColorUtils.hpp index 248dab1..3bc51ca 100644 --- a/lib/include/oclero/qlementine/utils/ColorUtils.hpp +++ b/lib/include/oclero/qlementine/utils/ColorUtils.hpp @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: Olivier Cléro // SPDX-License-Identifier: MIT +#pragma once + #include #include #include diff --git a/lib/include/oclero/qlementine/utils/FontUtils.hpp b/lib/include/oclero/qlementine/utils/FontUtils.hpp index 95d5849..77090ba 100644 --- a/lib/include/oclero/qlementine/utils/FontUtils.hpp +++ b/lib/include/oclero/qlementine/utils/FontUtils.hpp @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: Olivier Cléro // SPDX-License-Identifier: MIT +#pragma once + #include #include From f4f771c76b256d43e4b164c866d436e52b8e28fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 4 Jul 2024 22:14:44 +0000 Subject: [PATCH 05/45] Overhaul of the icon system --- .../qlementine/style/QlementineStyle.hpp | 14 ++- .../oclero/qlementine/utils/IconUtils.hpp | 39 +++++++ .../oclero/qlementine/utils/ImageUtils.hpp | 3 - lib/src/style/QlementineStyle.cpp | 65 ++++++++--- lib/src/utils/IconUtils.cpp | 105 ++++++++++++++++++ sandbox/src/SandboxWindow.cpp | 1 + showcase/src/ShowcaseWindow.cpp | 69 +++++++----- 7 files changed, 253 insertions(+), 43 deletions(-) create mode 100644 lib/include/oclero/qlementine/utils/IconUtils.hpp create mode 100644 lib/src/utils/IconUtils.cpp diff --git a/lib/include/oclero/qlementine/style/QlementineStyle.hpp b/lib/include/oclero/qlementine/style/QlementineStyle.hpp index 46bf425..d039cb9 100644 --- a/lib/include/oclero/qlementine/style/QlementineStyle.hpp +++ b/lib/include/oclero/qlementine/style/QlementineStyle.hpp @@ -5,6 +5,7 @@ #include #include +#include #include @@ -74,7 +75,11 @@ class QlementineStyle : public QCommonStyle { QPixmap getColorizedPixmap( const QPixmap& input, AutoIconColor autoIconColor, const QColor& fgcolor, const QColor& textColor) const; - static QIcon makeIcon(const QString& svgPath); + + QIcon makeThemedIcon( + const QString& svgPath, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary) const; + QIcon makeThemedIcon( + icons::Icons16 id, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary) const; public: // QStyle overrides. void drawPrimitive( @@ -237,6 +242,8 @@ class QlementineStyle : public QCommonStyle { virtual QColor const& labelForegroundColor(MouseState const mouse, const QWidget* w = nullptr) const; virtual QColor const& labelCaptionForegroundColor(MouseState const mouse) const; + virtual QColor const& iconForegroundColor(MouseState const mouse, ColorRole const role) const; + virtual QColor const& toolBarBackgroundColor() const; virtual QColor const& toolBarBorderColor() const; virtual QColor const& toolBarSeparatorColor() const; @@ -284,4 +291,9 @@ class QlementineStyle : public QCommonStyle { private: std::unique_ptr _impl; }; + +QlementineStyle* appStyle(); + +QIcon makeThemedIcon(icons::Icons16 id, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary); + } // namespace oclero::qlementine diff --git a/lib/include/oclero/qlementine/utils/IconUtils.hpp b/lib/include/oclero/qlementine/utils/IconUtils.hpp new file mode 100644 index 0000000..2fa33ec --- /dev/null +++ b/lib/include/oclero/qlementine/utils/IconUtils.hpp @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +#include +#include +#include + +namespace oclero::qlementine { +struct IconTheme { + QColor normal; + QColor disabled; + QColor checkedNormal; + QColor checkedDisabled; + + IconTheme(const QColor& normal); + IconTheme(const QColor& normal, const QColor& disabled); + IconTheme(const QColor& normal, const QColor& disabled, const QColor& checkedNormal, QColor checkedDisabled); + + const QColor& color(QIcon::Mode mode, QIcon::State state) const; +}; + +/// Makes an icon from the file located at the path in parameter. Fixes the standard Qt behavior. +[[maybe_unused]] QIcon makeIconFromSvg(const QString& svgPath, const QSize& size); + +/// Makes an icon from the file located at the path in parameter and colorizes the QPixmaps. Fixes the standard Qt behavior. +[[maybe_unused]] QIcon makeIconFromSvg( + const QString& svgPath, const IconTheme& iconTheme, const QSize& size = QSize(16, 16)); + +[[maybe_unused]] QIcon makeIconFromSvg(icons::Icons16 id, const QSize& size = QSize(16, 16)); + +/// Makes an icon from the icon ID in parameter and colorizes the QPixmaps. Fixes the standard Qt behavior. +[[maybe_unused]] QIcon makeIconFromSvg( + icons::Icons16 id, const IconTheme& iconTheme, const QSize& size = QSize(16, 16)); +} // namespace oclero::qlementine diff --git a/lib/include/oclero/qlementine/utils/ImageUtils.hpp b/lib/include/oclero/qlementine/utils/ImageUtils.hpp index ad31628..b0e6261 100644 --- a/lib/include/oclero/qlementine/utils/ImageUtils.hpp +++ b/lib/include/oclero/qlementine/utils/ImageUtils.hpp @@ -82,9 +82,6 @@ enum class AutoIconColor { /// Gets the pixmap in the cache, or creates it if not yet there. QPixmap getCachedPixmap(QPixmap const& input, QColor const& color, ColorizeMode mode); -/// Makes an icon from the file located at the path in parameter. Fixes the standard Qt behavior. -QIcon makeIconFromSvg(const QString& svgPath, const QSize& size); - /// Makes a QPixmap from the file located at the path in parameter at the desired size. QPixmap makePixmapFromSvg(const QString& svgPath, const QSize& size); diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 855c996..441545e 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -52,11 +53,25 @@ #include #include #include +#include #include #include namespace oclero::qlementine { + +QlementineStyle* appStyle() { + return qobject_cast(qApp->style()); +} + +QIcon makeThemedIcon(icons::Icons16 id, const QSize& size, ColorRole role) { + if (const auto* style = appStyle()) { + return style->makeThemedIcon(id, size, role); + } else { + return makeIconFromSvg(id, size); + } +} + /// Used to initializeResources from .qrc only once. std::once_flag qlementineOnceFlag; @@ -211,6 +226,27 @@ struct QlementineStyleImpl { return QMargins(paddingLeft, paddingTop, paddingRight, paddingBottom); } + /// Makes an IconTheme from the Theme. + IconTheme iconThemeFromTheme(ColorRole role = ColorRole::Secondary) const { + switch (role) { + case ColorRole::Primary: + return { + owner.iconForegroundColor(MouseState::Normal, ColorRole::Primary), + owner.iconForegroundColor(MouseState::Hovered, ColorRole::Primary), + owner.iconForegroundColor(MouseState::Pressed, ColorRole::Primary), + owner.iconForegroundColor(MouseState::Disabled, ColorRole::Primary), + }; + case ColorRole::Secondary: + default: + return { + owner.iconForegroundColor(MouseState::Normal, ColorRole::Secondary), + owner.iconForegroundColor(MouseState::Hovered, ColorRole::Secondary), + owner.iconForegroundColor(MouseState::Pressed, ColorRole::Secondary), + owner.iconForegroundColor(MouseState::Disabled, ColorRole::Secondary), + }; + } + } + QlementineStyle& owner; Theme theme; std::unique_ptr fontMetricsBold{ nullptr }; @@ -336,21 +372,14 @@ QPixmap QlementineStyle::getColorizedPixmap( return input; } -QIcon QlementineStyle::makeIcon(const QString& svgPath) { - QIcon result; - QPixmap pixmap(svgPath); - - result.addPixmap(pixmap, QIcon::Normal, QIcon::Off); - result.addPixmap(pixmap, QIcon::Disabled, QIcon::Off); - result.addPixmap(pixmap, QIcon::Active, QIcon::Off); - result.addPixmap(pixmap, QIcon::Selected, QIcon::Off); - - result.addPixmap(pixmap, QIcon::Normal, QIcon::On); - result.addPixmap(pixmap, QIcon::Disabled, QIcon::On); - result.addPixmap(pixmap, QIcon::Active, QIcon::On); - result.addPixmap(pixmap, QIcon::Selected, QIcon::On); +QIcon QlementineStyle::makeThemedIcon(const QString& svgPath, const QSize& size, ColorRole role) const { + const auto iconTheme = _impl->iconThemeFromTheme(role); + return makeIconFromSvg(svgPath, iconTheme, size); +} - return result; +QIcon QlementineStyle::makeThemedIcon(icons::Icons16 id, const QSize& size, ColorRole role) const { + const auto iconTheme = _impl->iconThemeFromTheme(role); + return makeIconFromSvg(id, iconTheme, size); } /* QStyle overrides. */ @@ -5792,6 +5821,14 @@ QColor const& QlementineStyle::labelCaptionForegroundColor(MouseState const mous return _impl->theme.secondaryAlternativeColor; } +QColor const& QlementineStyle::iconForegroundColor(MouseState const mouse, ColorRole const role) const { + if (mouse == MouseState::Disabled) + return role == ColorRole::Primary ? _impl->theme.primaryColorForegroundDisabled + : _impl->theme.secondaryColorForegroundDisabled; + else + return role == ColorRole::Primary ? _impl->theme.primaryColorForeground : _impl->theme.secondaryColorForeground; +} + QColor const& QlementineStyle::toolBarBackgroundColor() const { return _impl->theme.backgroundColorMain2; } diff --git a/lib/src/utils/IconUtils.cpp b/lib/src/utils/IconUtils.cpp new file mode 100644 index 0000000..70a9c55 --- /dev/null +++ b/lib/src/utils/IconUtils.cpp @@ -0,0 +1,105 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + +#include + +#include + +#include +#include + +#include + +namespace oclero::qlementine { +IconTheme::IconTheme(const QColor& normal, const QColor& disabled, const QColor& checkedNormal, QColor checkedDisabled) + : normal(normal) + , disabled(disabled) + , checkedNormal(checkedNormal) + , checkedDisabled(checkedDisabled) {} + +IconTheme::IconTheme(const QColor& normal, const QColor& disabled) + : IconTheme(normal, disabled, normal, disabled) {} + +IconTheme::IconTheme(const QColor& normal) + : IconTheme(normal, normal, normal, normal) {} + +const QColor& IconTheme::color(QIcon::Mode mode, QIcon::State state) const { + switch (mode) { + case QIcon::Disabled: + return state == QIcon::On ? checkedDisabled : disabled; + case QIcon::Normal: + case QIcon::Active: + case QIcon::Selected: + default: + return state == QIcon::On ? checkedNormal : normal; + } +} + +QIcon makeIconFromSvg(const QString& svgPath, const QSize& size) { + if (svgPath.isEmpty()) + return {}; + + QIcon icon; + + QSvgRenderer svgRenderer(svgPath); + svgRenderer.setAspectRatioMode(Qt::AspectRatioMode::KeepAspectRatio); + + for (const auto pxRatio : { 1., 2. }) { + QPixmap pixmap(size * pxRatio); + pixmap.fill(Qt::transparent); + { + QPainter painter(&pixmap); + painter.setRenderHint(QPainter::Antialiasing, true); + svgRenderer.render(&painter, pixmap.rect()); + } + pixmap.setDevicePixelRatio(pxRatio); + + for (const auto iconMode : { QIcon::Normal, QIcon::Disabled, QIcon::Active, QIcon::Selected }) { + for (const auto iconState : { QIcon::On, QIcon::Off }) { + icon.addPixmap(pixmap, iconMode, iconState); + } + } + } + + return icon; +} + +QIcon makeIconFromSvg(const QString& svgPath, const IconTheme& iconTheme, const QSize& size) { + if (svgPath.isEmpty()) + return {}; + + QIcon icon; + + QSvgRenderer svgRenderer(svgPath); + svgRenderer.setAspectRatioMode(Qt::AspectRatioMode::KeepAspectRatio); + + for (const auto pxRatio : { 1, 2 }) { + QPixmap pixmap(size * pxRatio); + pixmap.fill(Qt::transparent); + { + QPainter painter(&pixmap); + painter.setRenderHint(QPainter::Antialiasing, true); + svgRenderer.render(&painter, pixmap.rect()); + } + pixmap.setDevicePixelRatio(static_cast(pxRatio)); + + for (const auto iconMode : { QIcon::Normal, QIcon::Disabled, QIcon::Active, QIcon::Selected }) { + for (const auto iconState : { QIcon::On, QIcon::Off }) { + const auto& fgColor = iconTheme.color(iconMode, iconState); + const auto coloredPixmap = qlementine::getColorizedPixmap(pixmap, fgColor); + icon.addPixmap(coloredPixmap, iconMode, iconState); + } + } + } + + return icon; +} + +QIcon makeIconFromSvg(icons::Icons16 id, const QSize& size) { + return makeIconFromSvg(icons::iconPath(id), size); +} + +QIcon makeIconFromSvg(icons::Icons16 id, const IconTheme& iconTheme, const QSize& size) { + return makeIconFromSvg(icons::iconPath(id), iconTheme, size); +} +} // namespace oclero::qlementine diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index efd0b11..9222e6f 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index 4407b20..17f4a2c 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -5,6 +5,9 @@ #include #include #include +#include + +#include #include #include @@ -22,6 +25,12 @@ #include namespace oclero::qlementine::showcase { +using Icons16 = oclero::qlementine::icons::Icons16; + +static QIcon makeQIcon(Icons16 id, const QSize& size = QSize(16,16)) { + return oclero::qlementine::makeThemedIcon(id, size); +} + class DummyWorkspace : public QWidget { public: using QWidget::QWidget; @@ -87,26 +96,25 @@ struct ShowcaseWindow::Impl { auto* menu = menuBar->addMenu("File"); { // TODO: Use the enum provided by Qt6 instead of strings for icon IDs. - menu->addAction(QIcon::fromTheme("document-new"), "New", cb, QKeySequence::StandardKey::New); - menu->addAction(QIcon::fromTheme("document-open"), "Open...", cb, QKeySequence::StandardKey::Open); + menu->addAction(makeQIcon(Icons16::Document_New), "New", cb, QKeySequence::StandardKey::New); + menu->addAction(makeQIcon(Icons16::Document_Open), "Open...", cb, QKeySequence::StandardKey::Open); - auto* recentFilesMenu = menu->addMenu("Recent Files"); + auto* recentFilesMenu = menu->addMenu(makeQIcon(Icons16::Document_OpenRecent), "Recent Files"); for (auto i = 0; i < 5; ++i) { - recentFilesMenu->addAction( - QIcon::fromTheme("document-open-recent"), QString("Recent File %1").arg(i + 1), cb, QKeySequence{}); + recentFilesMenu->addAction(makeQIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), cb, QKeySequence{}); } menu->addSeparator(); - menu->addAction(QIcon::fromTheme("document-save"), "Save", cb, QKeySequence::StandardKey::Save); - menu->addAction(QIcon::fromTheme(""), "Close", cb, QKeySequence::StandardKey::Close); - menu->addAction(QIcon::fromTheme("document-print"), "Print...", cb, QKeySequence::StandardKey::Print); + menu->addAction(makeQIcon(Icons16::Action_Save), "Save", cb, QKeySequence::StandardKey::Save); + menu->addAction(makeQIcon(Icons16::Action_Close), "Close", cb, QKeySequence::StandardKey::Close); + menu->addAction(makeQIcon(Icons16::Action_Print), "Print...", cb, QKeySequence::StandardKey::Print); + menu->addAction(makeQIcon(Icons16::Action_PrintPreview), "Print Preview...", cb); menu->addSeparator(); - menu->addAction(QIcon::fromTheme(""), "Preferences...", cb, QKeySequence::StandardKey::Preferences); + menu->addAction(makeQIcon(Icons16::Navigation_Settings), "Preferences...", cb, QKeySequence::StandardKey::Preferences); menu->addSeparator(); - menu->addAction( - QIcon::fromTheme("application-exit"), "Quit", + menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", []() { qApp->quit(); }, @@ -116,21 +124,32 @@ struct ShowcaseWindow::Impl { { auto* menu = menuBar->addMenu("Edit"); { - menu->addAction(QIcon::fromTheme("edit-undo"), "Undo", cb, QKeySequence::StandardKey::Undo); - menu->addAction(QIcon::fromTheme("edit-redo"), "Redo", cb, QKeySequence::StandardKey::Redo); + menu->addAction(makeQIcon(Icons16::Action_Undo), "Undo", cb, QKeySequence::StandardKey::Undo); + menu->addAction(makeQIcon(Icons16::Action_Redo), "Redo", cb, QKeySequence::StandardKey::Redo); + + menu->addSeparator(); + menu->addAction(makeQIcon(Icons16::Action_Cut), "Cut", cb, QKeySequence::StandardKey::Cut); + menu->addAction(makeQIcon(Icons16::Action_Copy), "Copy", cb, QKeySequence::StandardKey::Copy); + menu->addAction(makeQIcon(Icons16::Action_Paste), "Paste", cb, QKeySequence::StandardKey::Paste); + menu->addAction(makeQIcon(Icons16::Action_Trash), "Delete", cb, QKeySequence::StandardKey::Delete); + } + } + { + auto* menu = menuBar->addMenu("View"); + { + menu->addAction(makeQIcon(Icons16::Action_ZoomIn), "Zoom In", cb, QKeySequence::StandardKey::ZoomIn); + menu->addAction(makeQIcon(Icons16::Action_ZoomOut), "Zoom Out", cb, QKeySequence::StandardKey::ZoomOut); + menu->addAction(makeQIcon(Icons16::Action_ZoomFit), "Fit", cb, QKeySequence{}); menu->addSeparator(); - menu->addAction(QIcon::fromTheme("edit-cut"), "Cut", cb, QKeySequence::StandardKey::Cut); - menu->addAction(QIcon::fromTheme("edit-copy"), "Copy", cb, QKeySequence::StandardKey::Copy); - menu->addAction(QIcon::fromTheme("edit-paste"), "Paste", cb, QKeySequence::StandardKey::Paste); - menu->addAction(QIcon::fromTheme("edit-delete"), "Delete", cb, QKeySequence::StandardKey::Delete); + menu->addAction(makeQIcon(Icons16::Action_Fullscreen), "Full Screen", cb, QKeySequence::StandardKey::FullScreen); } } { auto* menu = menuBar->addMenu("Help"); { - menu->addAction(QIcon::fromTheme("mail-send"), "Contact", cb, QKeySequence{}); - menu->addAction(QIcon::fromTheme(""), "About...", cb, QKeySequence{}); + menu->addAction(makeQIcon(Icons16::Misc_Mail), "Contact", cb, QKeySequence{}); + menu->addAction(makeQIcon(Icons16::Misc_Info), "About...", cb, QKeySequence{}); } } } @@ -146,10 +165,10 @@ struct ShowcaseWindow::Impl { tabBar->setChangeCurrentOnDrag(true); tabBar->setUsesScrollButtons(true); - qlementineStyle->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::None); + qlementineStyle->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::ForegroundColor); for (auto i = 0; i < 4; ++i) { - tabBar->addTab(QIcon(), QString("Document %1").arg(i + 1)); + tabBar->addTab(makeQIcon(Icons16::File_File), QString("Document %1").arg(i + 1)); } QObject::connect(tabBar, &QTabBar::tabCloseRequested, tabBar, [this](int index) { @@ -169,14 +188,14 @@ struct ShowcaseWindow::Impl { { auto* toolButton = new QToolButton(toolBar); toolButton->setFocusPolicy(Qt::NoFocus); - toolButton->setIcon(QIcon::fromTheme("edit-undo")); + toolButton->setIcon(makeQIcon(Icons16::Action_Undo)); toolBar->addWidget(toolButton); } { auto* toolButton = new QToolButton(toolBar); toolButton->setFocusPolicy(Qt::NoFocus); - toolButton->setIcon(QIcon::fromTheme("edit-undo")); + toolButton->setIcon(makeQIcon(Icons16::Action_Redo)); toolBar->addWidget(toolButton); } } @@ -202,7 +221,7 @@ struct ShowcaseWindow::Impl { lineEdit->setPlaceholderText("Search..."); topBarLayout->addWidget(lineEdit, 1); - auto* button = new QPushButton(widget); + auto* button = new QPushButton(makeQIcon(Icons16::Action_Filter), "", widget); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); topBarLayout->addWidget(button); } @@ -241,7 +260,7 @@ struct ShowcaseWindow::Impl { auto* segmentedControl = new SegmentedControl(topBar); topBarLayout->addWidget(segmentedControl); segmentedControl->setItemsShouldExpand(false); - segmentedControl->addItem("Properties", QIcon(), QString("%1").arg(4)); + segmentedControl->addItem("Properties", makeQIcon(Icons16::Navigation_SlidersVertical), QString("%1").arg(4)); segmentedControl->addItem("Scene", QIcon(), QString("%1").arg(2)); } } From 38cc6dd1d02912eaee4d69972e6e5524f8f37911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 4 Jul 2024 22:15:50 +0000 Subject: [PATCH 06/45] Add icons to QLineEdit default context menu --- lib/src/style/EventFilters.cpp | 129 +++++++++++++++++++++++++++++- lib/src/style/EventFilters.hpp | 7 ++ lib/src/style/QlementineStyle.cpp | 9 +++ lib/src/utils/ImageUtils.cpp | 20 ----- 4 files changed, 141 insertions(+), 24 deletions(-) diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index deb0859..62269ca 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -7,6 +7,8 @@ #include #include +#include + #include #include #include @@ -16,6 +18,8 @@ #include #include #include +#include +#include namespace oclero::qlementine { LineEditButtonEventFilter::LineEditButtonEventFilter( @@ -367,10 +371,9 @@ bool TextEditEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) { return QObject::eventFilter(watchedObject, evt); } -WidgetWithFocusFrameEventFilter::WidgetWithFocusFrameEventFilter(QWidget* widget): - QObject(widget), - _widget(widget) { -} +WidgetWithFocusFrameEventFilter::WidgetWithFocusFrameEventFilter(QWidget* widget) + : QObject(widget) + , _widget(widget) {} bool WidgetWithFocusFrameEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) { if (watchedObject == _widget) { @@ -387,4 +390,122 @@ bool WidgetWithFocusFrameEventFilter::eventFilter(QObject* watchedObject, QEvent return QObject::eventFilter(watchedObject, evt); } +class LineEditMenuIconsBehavior : public QObject { + QPointer _menu{ nullptr }; + bool _menuCustomized{ false }; + + enum class IconListMode { + None, + LineEdit, + ReadOnlyLineEdit, + SpinBox, + }; + + static std::vector iconList(IconListMode mode) { + using Icons16 = icons::Icons16; + // The order follows the one defined QLineEdit.cpp and QSpinBox.cpp (Qt6). + switch (mode) { + case IconListMode::LineEdit: + return { + QIcon(), // Separator + makeThemedIcon(Icons16::Action_Undo), + makeThemedIcon(Icons16::Action_Redo), + QIcon(), // Separator + makeThemedIcon(Icons16::Action_Cut), + makeThemedIcon(Icons16::Action_Copy), + makeThemedIcon(Icons16::Action_Paste), + makeThemedIcon(Icons16::Action_Erase), + QIcon(), // Separator + makeThemedIcon(Icons16::Action_SelectAll), + }; + case IconListMode::ReadOnlyLineEdit: + return { + QIcon(), // Separator + makeThemedIcon(Icons16::Action_Copy), + QIcon(), // Separator + makeThemedIcon(Icons16::Action_SelectAll), + }; + case IconListMode::SpinBox: + return { + QIcon(), // Separator + makeThemedIcon(Icons16::Action_Undo), + makeThemedIcon(Icons16::Action_Redo), + QIcon(), // Separator + makeThemedIcon(Icons16::Action_Cut), + makeThemedIcon(Icons16::Action_Copy), + makeThemedIcon(Icons16::Action_Paste), + makeThemedIcon(Icons16::Action_Erase), + QIcon(), // Separator + QIcon(), // Separator + makeThemedIcon(Icons16::Action_SelectAll), + QIcon(), // Separator + makeThemedIcon(Icons16::Navigation_ChevronUp), + makeThemedIcon(Icons16::Navigation_ChevronDown), + }; + default: + return {}; + } + } + + static IconListMode getMode(const QMenu* menu) { + if (const auto* menu_parent = menu->parent()) { + if (qobject_cast(menu_parent->parent())) { + return IconListMode::SpinBox; + } else if (const auto* line_edit = qobject_cast(menu_parent)) { + return line_edit->isReadOnly() ? IconListMode::ReadOnlyLineEdit : IconListMode::LineEdit; + } + } + return IconListMode::None; + } + + void customizeMenu() { + const auto actions = _menu->findChildren(); + if (!actions.empty()) { + const auto icons = iconList(getMode(_menu)); + for (auto i = 0; i < static_cast(icons.size()) && i < static_cast(actions.size()); ++i) { + if (auto* action = actions.at(i)) { + action->setIcon(icons.at(i)); + } + } + } + } + +public: + LineEditMenuIconsBehavior(QMenu* menu) + : QObject(menu) + , _menu(menu) { + // Hack pour modifier les icones du menu contextuel des line edit. + QObject::connect(_menu, &QMenu::aboutToShow, this, [this]() { + if (!_menuCustomized) { + customizeMenu(); + _menuCustomized = true; + } + }); + } +}; + +LineEditMenuEventFilter::LineEditMenuEventFilter(QWidget* parent) + : QObject(parent) { + assert(parent); + if (auto* menu = qobject_cast(parent)) { + new LineEditMenuIconsBehavior(menu); + } else { + parent->installEventFilter(this); + } +} + +bool LineEditMenuEventFilter::eventFilter(QObject*, QEvent* evt) { + const auto type = evt->type(); + if (type == QEvent::ChildPolished) { + auto* child = static_cast(evt)->child(); + if (auto* lineedit = qobject_cast(child)) { + lineedit->installEventFilter(this); + } else if (auto* menu = qobject_cast(child)) { + new LineEditMenuIconsBehavior(menu); + } + } + + return false; +} + } // namespace oclero::qlementine diff --git a/lib/src/style/EventFilters.hpp b/lib/src/style/EventFilters.hpp index 2058eb5..cf3f836 100644 --- a/lib/src/style/EventFilters.hpp +++ b/lib/src/style/EventFilters.hpp @@ -104,4 +104,11 @@ class WidgetWithFocusFrameEventFilter : public QObject { QFocusFrame* _focusFrame{ nullptr }; }; +class LineEditMenuEventFilter : public QObject { +public: + LineEditMenuEventFilter(QWidget* parent); + +protected: + virtual bool eventFilter(QObject* obj, QEvent* evt) override; +}; } // namespace oclero::qlementine diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 441545e..0148f33 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -4729,6 +4729,9 @@ void QlementineStyle::polish(QApplication* app) { QCommonStyle::polish(app); app->setFont(_impl->theme.fontRegular); //app->installEventFilter(new AppEventFilter(app)); + + QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); + QApplication::setAttribute(Qt::ApplicationAttribute::AA_DontShowIconsInMenus, false); } void QlementineStyle::unpolish(QApplication* app) { @@ -4890,6 +4893,12 @@ void QlementineStyle::polish(QWidget* w) { viewport->setAutoFillBackground(false); } } + + if (auto* lineEdit = qobject_cast(w)) { + lineEdit->installEventFilter(new LineEditMenuEventFilter(lineEdit)); + } else if (auto* spinBox = qobject_cast(w)) { + spinBox->installEventFilter(new LineEditMenuEventFilter(spinBox)); + } } void QlementineStyle::unpolish(QWidget* w) { diff --git a/lib/src/utils/ImageUtils.cpp b/lib/src/utils/ImageUtils.cpp index c351e84..f2ee77e 100644 --- a/lib/src/utils/ImageUtils.cpp +++ b/lib/src/utils/ImageUtils.cpp @@ -165,26 +165,6 @@ QPixmap getCachedPixmap(QPixmap const& input, QColor const& color, ColorizeMode return pixmapInCache.isNull() ? input : pixmapInCache; } -QIcon makeIconFromSvg(const QString& svgPath, const QSize& size) { - if (svgPath.isEmpty()) - return {}; - - QIcon icon; - QSvgRenderer renderer(svgPath); - constexpr auto ratios = std::array{ 1, 2 }; - for (const auto& ratio : ratios) { - const auto pixmapSize = size * ratio; - QPixmap pixmap(pixmapSize); - pixmap.fill(Qt::transparent); - QPainter painter(&pixmap); - painter.setRenderHint(QPainter::Antialiasing, true); - renderer.render(&painter, pixmap.rect()); - pixmap.setDevicePixelRatio(static_cast(ratio)); - icon.addPixmap(pixmap); - } - return icon; -} - QPixmap makePixmapFromSvg(const QString& svgPath, const QSize& size) { if (svgPath.isEmpty()) return {}; From d8fea0253fc2e3587cdfc13632ff1f002eb3c0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 4 Jul 2024 22:16:07 +0000 Subject: [PATCH 07/45] Apply clang-format --- lib/src/style/Delegates.cpp | 2 +- lib/src/style/QlementineStyle.cpp | 12 ++++++------ lib/src/utils/PrimitiveUtils.cpp | 14 ++++++-------- lib/src/utils/RadiusesF.cpp | 2 +- lib/src/widgets/Switch.cpp | 16 ++++++++-------- 5 files changed, 22 insertions(+), 24 deletions(-) diff --git a/lib/src/style/Delegates.cpp b/lib/src/style/Delegates.cpp index 3c3aa3f..bce38a6 100644 --- a/lib/src/style/Delegates.cpp +++ b/lib/src/style/Delegates.cpp @@ -86,7 +86,7 @@ void ComboBoxDelegate::paint(QPainter* p, const QStyleOptionViewItem& opt, const if (mouse == MouseState::Disabled && autoIconColor == AutoIconColor::None) { // Change only the icon's tint and opacity, so it looks disabled. const auto& sourceOverBgColor = qlementineStyle ? qlementineStyle->listItemBackgroundColor( - MouseState::Normal, selected, focus, active, idx, _widget) + MouseState::Normal, selected, focus, active, idx, _widget) : Theme().neutralColorTransparent; const auto premultipiedColor = getColorSourceOver(sourceOverBgColor, fgColor); const auto& tintedPixmap = getTintedPixmap(pixmap, premultipiedColor); diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 0148f33..f5f11e4 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -2676,9 +2676,9 @@ void QlementineStyle::drawComplexControl( const auto grooveRect = subControlRect(CC_ScrollBar, scrollBarOpt, SC_ScrollBarGroove, w); const auto currentGrooveRect = horizontal ? QRectF(grooveRect.x(), grooveRect.y() + grooveRect.height() - currentThickness, - grooveRect.width(), currentThickness) + grooveRect.width(), currentThickness) : QRectF(grooveRect.x() + grooveRect.width() - currentThickness, grooveRect.y(), currentThickness, - grooveRect.height()); + grooveRect.height()); const auto& grooveColor = scrollBarGrooveColor(mouse); const auto& currentGrooveColor = @@ -2696,9 +2696,9 @@ void QlementineStyle::drawComplexControl( if (!handleRect.isEmpty()) { const auto currentHandleRect = horizontal ? QRectF(handleRect.x(), handleRect.y() + handleRect.height() - currentThickness, - handleRect.width(), currentThickness) + handleRect.width(), currentThickness) : QRectF(handleRect.x() + handleRect.width() - currentThickness, handleRect.y(), - currentThickness, handleRect.height()); + currentThickness, handleRect.height()); const auto handleMouse = getScrollBarHandleState(scrollBarOpt->state, scrollBarOpt->activeSubControls); const auto& handleColor = scrollBarHandleColor(handleMouse); const auto& currentHandleColor = @@ -4579,8 +4579,8 @@ QIcon QlementineStyle::standardIcon(StandardPixmap sp, const QStyleOption* opt, // break; // case SP_DesktopIcon: // break; - // case SP_TrashIcon: - // break; + case SP_TrashIcon: + return makeIconFromSvg(icons::Icons16::Action_Trash, _impl->iconThemeFromTheme(), _impl->theme.iconSize); // case SP_ComputerIcon: // break; // case SP_DriveFDIcon: diff --git a/lib/src/utils/PrimitiveUtils.cpp b/lib/src/utils/PrimitiveUtils.cpp index f93beaf..6b94911 100644 --- a/lib/src/utils/PrimitiveUtils.cpp +++ b/lib/src/utils/PrimitiveUtils.cpp @@ -831,10 +831,9 @@ void drawRadioButton(QPainter* p, const QRect& rect, QColor const& bgColor, cons p->setPen(Qt::NoPen); p->setBrush(bgColor); // To avoid ugly visual artifacts in the rounded corners, we cheat by reducing a bit the size - const auto& ellipseRect = - borderWidth > 0.1 - ? QRectF(rect).marginsRemoved(QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) - : rect; + const auto& ellipseRect = borderWidth > 0.1 ? QRectF(rect).marginsRemoved( + QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) + : rect; p->drawEllipse(ellipseRect); // Border. @@ -861,10 +860,9 @@ void drawCheckButton(QPainter* p, const QRect& rect, qreal radius, const QColor& p->setBrush(bgColor); p->setRenderHint(QPainter::RenderHint::Antialiasing); // To avoid ugly visual artifacts in the rounded corners, we cheat by reducing a bit the size - const auto& buttonRect = - borderWidth > 0.1 - ? QRectF(rect).marginsRemoved(QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) - : rect; + const auto& buttonRect = borderWidth > 0.1 ? QRectF(rect).marginsRemoved( + QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) + : rect; p->drawRoundedRect(buttonRect, radius, radius); } diff --git a/lib/src/utils/RadiusesF.cpp b/lib/src/utils/RadiusesF.cpp index 8704377..3f1ccbc 100644 --- a/lib/src/utils/RadiusesF.cpp +++ b/lib/src/utils/RadiusesF.cpp @@ -12,7 +12,7 @@ RadiusesF::RadiusesF(int left, int right) RadiusesF::RadiusesF(int topLeft, int topRight, int bottomRight, int bottomLeft) : RadiusesF(static_cast(topLeft), static_cast(topRight), static_cast(bottomRight), - static_cast(bottomLeft)) {} + static_cast(bottomLeft)) {} RadiusesF::RadiusesF(double radius) { *this = radius; diff --git a/lib/src/widgets/Switch.cpp b/lib/src/widgets/Switch.cpp index 946ee07..395cfc4 100644 --- a/lib/src/widgets/Switch.cpp +++ b/lib/src/widgets/Switch.cpp @@ -229,9 +229,9 @@ const QColor& Switch::getBgColor() const { const auto palette = style->standardPalette(); const auto& bgColor = qlementineStyle ? qlementineStyle->switchGrooveColor( - getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) + getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::Button); + QPalette::ColorRole::Button); return bgColor; } @@ -240,10 +240,10 @@ const QColor& Switch::getBorderColor() const { const auto* qlementineStyle = qobject_cast(style); const auto palette = style->standardPalette(); const auto& borderColor = - qlementineStyle ? qlementineStyle->switchGrooveBorderColor(getMouseState(isDown(), _isMouseOver, isEnabled()), - getFocusState(hasFocus()), getCheckState(isChecked())) + qlementineStyle ? qlementineStyle->switchGrooveBorderColor( + getMouseState(isDown(), _isMouseOver, isEnabled()), getFocusState(hasFocus()), getCheckState(isChecked())) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::ButtonText); + QPalette::ColorRole::ButtonText); return borderColor; } @@ -253,9 +253,9 @@ const QColor& Switch::getFgColor() const { const auto palette = style->standardPalette(); const auto& fgColor = qlementineStyle ? qlementineStyle->switchHandleColor( - getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) + getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::ButtonText); + QPalette::ColorRole::ButtonText); return fgColor; } @@ -266,7 +266,7 @@ const QColor& Switch::getTextColor() const { const auto& textColor = qlementineStyle ? qlementineStyle->labelForegroundColor(getMouseState(isDown(), _isMouseOver, isEnabled()), this) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::Text); + QPalette::ColorRole::Text); return textColor; } From 2b63f3735e769216cc66c93c6822b66704ac5d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 5 Jul 2024 17:32:32 +0200 Subject: [PATCH 08/45] Fix typos in doc --- docs/widgets.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/widgets.md b/docs/widgets.md index ecea3ce..9a63127 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -6,7 +6,7 @@ More information about them coming soon. You can check them in the Sandbox appli ## AbstractItemListWidget -Base class for [`NavigationBar`](#navigation-bar) and [`SegmentedControl`](#segmented-control). +Base class for [`NavigationBar`](#navigationbar) and [`SegmentedControl`](#segmentedcontrol). ## Action @@ -80,13 +80,13 @@ Improves `QFocusFrame` by adding a corner radius property. A widget that allows to switch between a range of elements, such as seen on iOS or macOS. -![SegmentedControl](assets/images/widgets/segmentedcontrol) +![SegmentedControl](assets/images/widgets/segmentedcontrol.png) ## StatusBadgeWidget Widget to display a status icon: info, warning, error, success. Available in two standard sizes. -![StatusBadgeWidget](assets/images/widgets/badges) +![StatusBadgeWidget](assets/images/widgets/badges.png) ## Switch From 8495337fdbfa4f59df5c44e46195fb4b6c00e0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 12 Jul 2024 15:28:31 +0200 Subject: [PATCH 09/45] Add horizontal mode for Expander widget --- .../oclero/qlementine/widgets/Expander.hpp | 6 ++ lib/src/widgets/Expander.cpp | 71 +++++++++++++++---- sandbox/src/SandboxWindow.cpp | 33 +++++++-- 3 files changed, 93 insertions(+), 17 deletions(-) diff --git a/lib/include/oclero/qlementine/widgets/Expander.hpp b/lib/include/oclero/qlementine/widgets/Expander.hpp index 1722801..97b590a 100644 --- a/lib/include/oclero/qlementine/widgets/Expander.hpp +++ b/lib/include/oclero/qlementine/widgets/Expander.hpp @@ -13,6 +13,7 @@ class Expander : public QWidget { Q_OBJECT Q_PROPERTY(bool expanded READ expanded WRITE setExpanded NOTIFY expandedChanged) + Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged) public: Expander(QWidget* parent = nullptr); @@ -21,6 +22,10 @@ class Expander : public QWidget { Q_SLOT void setExpanded(bool expanded); Q_SIGNAL void expandedChanged(); + Qt::Orientation orientation() const; + Q_SLOT void setOrientation(Qt::Orientation orientation); + Q_SIGNAL void orientationChanged(); + QWidget* content() const; void setContent(QWidget* content); Q_SIGNAL void contentChanged(); @@ -37,6 +42,7 @@ class Expander : public QWidget { private: bool _expanded{ false }; + Qt::Orientation _orientation{ Qt::Orientation::Vertical }; QVariantAnimation _animation; QPointer _content{ nullptr }; }; diff --git a/lib/src/widgets/Expander.cpp b/lib/src/widgets/Expander.cpp index f91a397..f76a6a4 100644 --- a/lib/src/widgets/Expander.cpp +++ b/lib/src/widgets/Expander.cpp @@ -7,13 +7,20 @@ #include namespace oclero::qlementine { -constexpr auto animationDurationFactor = 1; +constexpr auto animationDurationFactor = 1.; Expander::Expander(QWidget* parent) : QWidget(parent) { - const auto animationDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration); - setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); setFocusPolicy(Qt::NoFocus); + + if (_orientation == Qt::Vertical) { + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + } else { + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + } + + // Initialize animation. + const auto animationDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration); _animation.setStartValue(QVariant::fromValue(0)); _animation.setEndValue(QVariant::fromValue(0)); _animation.setDuration(animationDuration * animationDurationFactor); @@ -25,10 +32,20 @@ Expander::Expander(QWidget* parent) QSize Expander::sizeHint() const { const auto contentSizeHint = _content ? _content->sizeHint() : QSize{ 0, 0 }; - const auto w = contentSizeHint.width(); - const auto h = _animation.state() == QVariantAnimation::Running ? _animation.currentValue().toInt() - : (_expanded ? contentSizeHint.height() : 0); - return { w, h }; + const auto isVertical = _orientation == Qt::Orientation::Vertical; + const auto currentValue = _animation.currentValue().toInt(); + + if (isVertical) { + const auto finalValue = _expanded ? contentSizeHint.height() : 0; + const auto w = contentSizeHint.width(); + const auto h = _animation.state() == QVariantAnimation::Running ? currentValue : finalValue; + return { w, h }; + } else { + const auto finalValue = _expanded ? contentSizeHint.width() : 0; + const auto h = contentSizeHint.height(); + const auto w = _animation.state() == QVariantAnimation::Running ? currentValue : finalValue; + return { w, h }; + } } bool Expander::event(QEvent* e) { @@ -58,9 +75,11 @@ void Expander::updateContentGeometry() { _content->ensurePolished(); const auto& availableSize = size(); const auto contentSizeHint = _content->sizeHint(); - const auto w = availableSize.width(); - const auto h = contentSizeHint.height(); - _content->setVisible(w > 0); + const auto isVertical = _orientation == Qt::Orientation::Vertical; + const auto w = isVertical ? availableSize.width() : contentSizeHint.width(); + const auto h = isVertical ? contentSizeHint.height() : availableSize.height(); + const auto visible = isVertical ? w > 0 : h > 0; + _content->setVisible(visible); _content->setGeometry(0, 0, w, h); } } @@ -76,8 +95,10 @@ void Expander::setExpanded(bool expanded) { } _expanded = expanded; - const auto current = height(); - const auto target = _content && _expanded ? _content->sizeHint().height() : 0; + const auto isVertical = _orientation == Qt::Orientation::Vertical; + const auto current = isVertical ? height() : width(); + const auto contentSizeHint = _content->sizeHint(); + const auto target = _content && _expanded ? (isVertical ? contentSizeHint.height() : contentSizeHint.width()) : 0; const auto animationDuration = isVisible() ? style()->styleHint(QStyle::SH_Widget_Animation_Duration) : 0; _animation.stop(); _animation.setDuration(animationDuration * animationDurationFactor); @@ -89,6 +110,25 @@ void Expander::setExpanded(bool expanded) { } } +Qt::Orientation Expander::orientation() const { + return _orientation; +} + +void Expander::setOrientation(Qt::Orientation orientation) { + if (_orientation != orientation) { + _orientation = orientation; + + if (_orientation == Qt::Vertical) { + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + } else { + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + } + + updateGeometry(); + emit orientationChanged(); + } +} + QWidget* Expander::content() const { return _content; } @@ -102,7 +142,12 @@ void Expander::setContent(QWidget* content) { _content = content; if (_content) { - _content->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Ignored); + if (_orientation == Qt::Orientation::Vertical) { + _content->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Ignored); + } else { + _content->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::MinimumExpanding); + } + _content->setParent(this); _content->installEventFilter(this); _content->setVisible(_expanded); diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index 9222e6f..15f10a0 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -1152,29 +1152,54 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru windowContent->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); { auto* container = new CustomBgWidget(windowContent); + container->bgColor = QColor{ 255, 0, 0, 10 }; + container->borderColor = QColor{ 255, 0, 0, 40 }; auto* containerLayout = new QVBoxLayout(container); containerLayout->setContentsMargins(10, 10, 10, 10); container->setLayout(containerLayout); auto* expander = new Expander(container); + expander->setOrientation(Qt::Orientation::Horizontal); auto* expanderContent = new CustomBgWidget(expander); - expanderContent->bgColor = QColor{ 255, 127, 0 }; + expanderContent->bgColor = QColor{ 0, 0, 255, 40 }; + expanderContent->borderColor = QColor{ 0, 0, 255, 127 }; expanderContent->customSizeHint = QSize{ 150, 100 }; expanderContent->showBounds = true; expander->setContent(expanderContent); auto* checkBox = new QCheckBox("Expanded", container); + checkBox->setChecked(expander->expanded()); QObject::connect(checkBox, &QCheckBox::toggled, &owner, [expander](bool checked) { expander->setExpanded(checked); }); - auto* button = new QPushButton("Increase content height", container); - QObject::connect(button, &QPushButton::clicked, &owner, [expanderContent]() { - expanderContent->customSizeHint.rheight() += 20; + auto* vLayout = new QVBoxLayout(); + auto* buttonGroup = new QButtonGroup(windowContent); + for (auto orientation : { Qt::Vertical, Qt::Horizontal }) { + auto* radioButton = new QRadioButton(orientation == Qt::Vertical ? "Vertical" : "Horizontal", container); + radioButton->setChecked(orientation == expander->orientation()); + buttonGroup->addButton(radioButton); + vLayout->addWidget(radioButton); + QObject::connect(radioButton, &QRadioButton::toggled, &owner, [expander, orientation](bool checked) { + if (checked) { + expander->setOrientation(orientation); + } + }); + } + + auto* button = new QPushButton("Increase content animated dimension", container); + QObject::connect(button, &QPushButton::clicked, &owner, [expanderContent, expander]() { + if (expander->orientation() == Qt::Vertical) { + expanderContent->customSizeHint.rheight() += 20; + } else { + expanderContent->customSizeHint.rwidth() += 20; + } expanderContent->updateGeometry(); }); + containerLayout->addWidget(checkBox); containerLayout->addWidget(button); + containerLayout->addLayout(vLayout); containerLayout->addWidget(expander); windowContentLayout->addWidget(container); From 68723078101610569e7d0d51ff6e2723a6c1cccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 12 Jul 2024 15:29:19 +0200 Subject: [PATCH 10/45] Cmake: move qlementine_icons to 'dependencies' IDE folder --- lib/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index deff591..7ba1aa6 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -4,6 +4,10 @@ set(LIB_TARGET_NAME ${PROJECT_NAME}) include(FetchContent) FetchContent_Declare(qlementine_icons GIT_REPOSITORY "https://github.com/oclero/qlementine-icons.git") FetchContent_MakeAvailable(qlementine_icons) +set_target_properties(qlementine_icons + PROPERTIES + FOLDER dependencies +) # Declare files. set(SOURCES From dcf7561d77dc1c05624399caa39c7ffffc7404b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 12 Jul 2024 16:04:11 +0200 Subject: [PATCH 11/45] Improve Expander API --- .../oclero/qlementine/widgets/Expander.hpp | 6 ++++++ lib/src/widgets/Expander.cpp | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/include/oclero/qlementine/widgets/Expander.hpp b/lib/include/oclero/qlementine/widgets/Expander.hpp index 97b590a..93f6241 100644 --- a/lib/include/oclero/qlementine/widgets/Expander.hpp +++ b/lib/include/oclero/qlementine/widgets/Expander.hpp @@ -21,6 +21,12 @@ class Expander : public QWidget { bool expanded() const; Q_SLOT void setExpanded(bool expanded); Q_SIGNAL void expandedChanged(); + void toggleExpanded(); + + Q_SIGNAL void aboutToExpand(); + Q_SIGNAL void aboutToShrink(); + Q_SIGNAL void didExpand(); + Q_SIGNAL void didShrink(); Qt::Orientation orientation() const; Q_SLOT void setOrientation(Qt::Orientation orientation); diff --git a/lib/src/widgets/Expander.cpp b/lib/src/widgets/Expander.cpp index f76a6a4..db6882b 100644 --- a/lib/src/widgets/Expander.cpp +++ b/lib/src/widgets/Expander.cpp @@ -28,6 +28,14 @@ Expander::Expander(QWidget* parent) QObject::connect(&_animation, &QVariantAnimation::valueChanged, this, [this]() { updateGeometry(); }); + + QObject::connect(&_animation, &QVariantAnimation::finished, this, [this]() { + if (_expanded) { + emit didExpand(); + } else { + emit didShrink(); + } + }); } QSize Expander::sizeHint() const { @@ -95,6 +103,12 @@ void Expander::setExpanded(bool expanded) { } _expanded = expanded; + if (_expanded) { + emit aboutToExpand(); + } else { + emit aboutToShrink(); + } + const auto isVertical = _orientation == Qt::Orientation::Vertical; const auto current = isVertical ? height() : width(); const auto contentSizeHint = _content->sizeHint(); @@ -110,6 +124,10 @@ void Expander::setExpanded(bool expanded) { } } +void Expander::toggleExpanded() { + setExpanded(!expanded()); +} + Qt::Orientation Expander::orientation() const { return _orientation; } From 1484f219968fd91259669d0da4998fd48f73b196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 12 Jul 2024 16:11:18 +0200 Subject: [PATCH 12/45] Improve Expander class description --- lib/include/oclero/qlementine/widgets/Expander.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/include/oclero/qlementine/widgets/Expander.hpp b/lib/include/oclero/qlementine/widgets/Expander.hpp index 93f6241..4d061e9 100644 --- a/lib/include/oclero/qlementine/widgets/Expander.hpp +++ b/lib/include/oclero/qlementine/widgets/Expander.hpp @@ -8,7 +8,8 @@ #include namespace oclero::qlementine { -/// A QWidget that allows to expand vertically, displaying its content. +/// A QWidget that allows to expand vertically or horizontally, +/// revealing or hiding its content with an animation. class Expander : public QWidget { Q_OBJECT From b9109d1d8251ec02b0efd1c9b62ea940fc871b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 12 Oct 2024 17:05:07 +0200 Subject: [PATCH 13/45] Migrate showcase window to Qt6 --- showcase/CMakeLists.txt | 21 +++++++-------------- showcase/src/main.cpp | 6 +----- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/showcase/CMakeLists.txt b/showcase/CMakeLists.txt index 8ee5d31..2cece6b 100644 --- a/showcase/CMakeLists.txt +++ b/showcase/CMakeLists.txt @@ -14,15 +14,10 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/resources/showcase.qrc ) -if(${QT_VERSION_MAJOR} STREQUAL "6") - qt_add_executable(${SHOWCASE_NAME} WIN32 MACOSX_BUNDLE - ${SOURCES} - ) -else() - add_executable(${SHOWCASE_NAME} WIN32 MACOSX_BUNDLE - ${SOURCES} - ) -endif() +qt_add_executable(${SHOWCASE_NAME} + WIN32 MACOSX_BUNDLE + ${SOURCES} +) target_link_libraries(${SHOWCASE_NAME} PUBLIC oclero::qlementine @@ -50,10 +45,8 @@ set_target_properties(${SHOWCASE_NAME} PROPERTIES MACOSX_BUNDLE_ICON_FILE "icon.icns" MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT} - XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "${XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED}" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}" - XCODE_ATTRIBUTE_CODE_SIGN_STYLE "${XCODE_ATTRIBUTE_CODE_SIGN_STYLE}" + XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED OFF + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Manual" XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF ) - -target_deploy_qt(${SHOWCASE_NAME}) diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp index 8bb165f..c3c87a2 100644 --- a/showcase/src/main.cpp +++ b/showcase/src/main.cpp @@ -9,10 +9,7 @@ int main(int argc, char* argv[]) { // Must be set before creating a QApplication. -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true); - QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true); -#endif + QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QApplication qApplication(argc, argv); @@ -23,7 +20,6 @@ int main(int argc, char* argv[]) { QCoreApplication::setOrganizationName("oclero"); QCoreApplication::setOrganizationDomain("olivierclero.com"); QCoreApplication::setApplicationVersion("1.0.0"); - QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); // Custom icon theme. From a7a361f614fc33cdf7fa54ac298c04f1e9eeb0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 12 Oct 2024 18:37:42 +0200 Subject: [PATCH 14/45] Check if the size is empty --- lib/src/utils/IconUtils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/utils/IconUtils.cpp b/lib/src/utils/IconUtils.cpp index 70a9c55..67f2cee 100644 --- a/lib/src/utils/IconUtils.cpp +++ b/lib/src/utils/IconUtils.cpp @@ -36,7 +36,7 @@ const QColor& IconTheme::color(QIcon::Mode mode, QIcon::State state) const { } QIcon makeIconFromSvg(const QString& svgPath, const QSize& size) { - if (svgPath.isEmpty()) + if (svgPath.isEmpty() || size.isEmpty()) return {}; QIcon icon; @@ -65,7 +65,7 @@ QIcon makeIconFromSvg(const QString& svgPath, const QSize& size) { } QIcon makeIconFromSvg(const QString& svgPath, const IconTheme& iconTheme, const QSize& size) { - if (svgPath.isEmpty()) + if (svgPath.isEmpty() || size.isEmpty()) return {}; QIcon icon; From 59302178b557ad680c50641d25088d7eabaa7ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 12 Oct 2024 18:41:29 +0200 Subject: [PATCH 15/45] Format with clang-format --- lib/src/style/Delegates.cpp | 2 +- lib/src/style/QlementineStyle.cpp | 9 ++++----- lib/src/utils/PrimitiveUtils.cpp | 14 ++++++++------ lib/src/utils/RadiusesF.cpp | 2 +- lib/src/widgets/Switch.cpp | 16 ++++++++-------- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/lib/src/style/Delegates.cpp b/lib/src/style/Delegates.cpp index bce38a6..3c3aa3f 100644 --- a/lib/src/style/Delegates.cpp +++ b/lib/src/style/Delegates.cpp @@ -86,7 +86,7 @@ void ComboBoxDelegate::paint(QPainter* p, const QStyleOptionViewItem& opt, const if (mouse == MouseState::Disabled && autoIconColor == AutoIconColor::None) { // Change only the icon's tint and opacity, so it looks disabled. const auto& sourceOverBgColor = qlementineStyle ? qlementineStyle->listItemBackgroundColor( - MouseState::Normal, selected, focus, active, idx, _widget) + MouseState::Normal, selected, focus, active, idx, _widget) : Theme().neutralColorTransparent; const auto premultipiedColor = getColorSourceOver(sourceOverBgColor, fgColor); const auto& tintedPixmap = getTintedPixmap(pixmap, premultipiedColor); diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index f5f11e4..7f43625 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -2676,9 +2676,9 @@ void QlementineStyle::drawComplexControl( const auto grooveRect = subControlRect(CC_ScrollBar, scrollBarOpt, SC_ScrollBarGroove, w); const auto currentGrooveRect = horizontal ? QRectF(grooveRect.x(), grooveRect.y() + grooveRect.height() - currentThickness, - grooveRect.width(), currentThickness) + grooveRect.width(), currentThickness) : QRectF(grooveRect.x() + grooveRect.width() - currentThickness, grooveRect.y(), currentThickness, - grooveRect.height()); + grooveRect.height()); const auto& grooveColor = scrollBarGrooveColor(mouse); const auto& currentGrooveColor = @@ -2696,9 +2696,9 @@ void QlementineStyle::drawComplexControl( if (!handleRect.isEmpty()) { const auto currentHandleRect = horizontal ? QRectF(handleRect.x(), handleRect.y() + handleRect.height() - currentThickness, - handleRect.width(), currentThickness) + handleRect.width(), currentThickness) : QRectF(handleRect.x() + handleRect.width() - currentThickness, handleRect.y(), - currentThickness, handleRect.height()); + currentThickness, handleRect.height()); const auto handleMouse = getScrollBarHandleState(scrollBarOpt->state, scrollBarOpt->activeSubControls); const auto& handleColor = scrollBarHandleColor(handleMouse); const auto& currentHandleColor = @@ -4730,7 +4730,6 @@ void QlementineStyle::polish(QApplication* app) { app->setFont(_impl->theme.fontRegular); //app->installEventFilter(new AppEventFilter(app)); - QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QApplication::setAttribute(Qt::ApplicationAttribute::AA_DontShowIconsInMenus, false); } diff --git a/lib/src/utils/PrimitiveUtils.cpp b/lib/src/utils/PrimitiveUtils.cpp index 6b94911..f93beaf 100644 --- a/lib/src/utils/PrimitiveUtils.cpp +++ b/lib/src/utils/PrimitiveUtils.cpp @@ -831,9 +831,10 @@ void drawRadioButton(QPainter* p, const QRect& rect, QColor const& bgColor, cons p->setPen(Qt::NoPen); p->setBrush(bgColor); // To avoid ugly visual artifacts in the rounded corners, we cheat by reducing a bit the size - const auto& ellipseRect = borderWidth > 0.1 ? QRectF(rect).marginsRemoved( - QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) - : rect; + const auto& ellipseRect = + borderWidth > 0.1 + ? QRectF(rect).marginsRemoved(QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) + : rect; p->drawEllipse(ellipseRect); // Border. @@ -860,9 +861,10 @@ void drawCheckButton(QPainter* p, const QRect& rect, qreal radius, const QColor& p->setBrush(bgColor); p->setRenderHint(QPainter::RenderHint::Antialiasing); // To avoid ugly visual artifacts in the rounded corners, we cheat by reducing a bit the size - const auto& buttonRect = borderWidth > 0.1 ? QRectF(rect).marginsRemoved( - QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) - : rect; + const auto& buttonRect = + borderWidth > 0.1 + ? QRectF(rect).marginsRemoved(QMarginsF(borderWidth / 2., borderWidth / 2., borderWidth / 2., borderWidth / 2.)) + : rect; p->drawRoundedRect(buttonRect, radius, radius); } diff --git a/lib/src/utils/RadiusesF.cpp b/lib/src/utils/RadiusesF.cpp index 3f1ccbc..8704377 100644 --- a/lib/src/utils/RadiusesF.cpp +++ b/lib/src/utils/RadiusesF.cpp @@ -12,7 +12,7 @@ RadiusesF::RadiusesF(int left, int right) RadiusesF::RadiusesF(int topLeft, int topRight, int bottomRight, int bottomLeft) : RadiusesF(static_cast(topLeft), static_cast(topRight), static_cast(bottomRight), - static_cast(bottomLeft)) {} + static_cast(bottomLeft)) {} RadiusesF::RadiusesF(double radius) { *this = radius; diff --git a/lib/src/widgets/Switch.cpp b/lib/src/widgets/Switch.cpp index 395cfc4..946ee07 100644 --- a/lib/src/widgets/Switch.cpp +++ b/lib/src/widgets/Switch.cpp @@ -229,9 +229,9 @@ const QColor& Switch::getBgColor() const { const auto palette = style->standardPalette(); const auto& bgColor = qlementineStyle ? qlementineStyle->switchGrooveColor( - getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) + getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::Button); + QPalette::ColorRole::Button); return bgColor; } @@ -240,10 +240,10 @@ const QColor& Switch::getBorderColor() const { const auto* qlementineStyle = qobject_cast(style); const auto palette = style->standardPalette(); const auto& borderColor = - qlementineStyle ? qlementineStyle->switchGrooveBorderColor( - getMouseState(isDown(), _isMouseOver, isEnabled()), getFocusState(hasFocus()), getCheckState(isChecked())) + qlementineStyle ? qlementineStyle->switchGrooveBorderColor(getMouseState(isDown(), _isMouseOver, isEnabled()), + getFocusState(hasFocus()), getCheckState(isChecked())) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::ButtonText); + QPalette::ColorRole::ButtonText); return borderColor; } @@ -253,9 +253,9 @@ const QColor& Switch::getFgColor() const { const auto palette = style->standardPalette(); const auto& fgColor = qlementineStyle ? qlementineStyle->switchHandleColor( - getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) + getMouseState(isDown(), _isMouseOver, isEnabled()), getCheckState(isChecked())) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::ButtonText); + QPalette::ColorRole::ButtonText); return fgColor; } @@ -266,7 +266,7 @@ const QColor& Switch::getTextColor() const { const auto& textColor = qlementineStyle ? qlementineStyle->labelForegroundColor(getMouseState(isDown(), _isMouseOver, isEnabled()), this) : palette.color(isEnabled() ? QPalette::ColorGroup::Normal : QPalette::ColorGroup::Disabled, - QPalette::ColorRole::Text); + QPalette::ColorRole::Text); return textColor; } From b8b53c68c5afaf1fcf817625b78b70675002a9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 12 Oct 2024 19:02:12 +0200 Subject: [PATCH 16/45] Fix deprecated calls to QMenu::addAction --- showcase/src/ShowcaseWindow.cpp | 45 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index 17f4a2c..32071ed 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -96,60 +96,59 @@ struct ShowcaseWindow::Impl { auto* menu = menuBar->addMenu("File"); { // TODO: Use the enum provided by Qt6 instead of strings for icon IDs. - menu->addAction(makeQIcon(Icons16::Document_New), "New", cb, QKeySequence::StandardKey::New); - menu->addAction(makeQIcon(Icons16::Document_Open), "Open...", cb, QKeySequence::StandardKey::Open); + menu->addAction(makeQIcon(Icons16::Document_New), "New", QKeySequence::StandardKey::New, cb); + menu->addAction(makeQIcon(Icons16::Document_Open), "Open...", QKeySequence::StandardKey::Open, cb); auto* recentFilesMenu = menu->addMenu(makeQIcon(Icons16::Document_OpenRecent), "Recent Files"); for (auto i = 0; i < 5; ++i) { - recentFilesMenu->addAction(makeQIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), cb, QKeySequence{}); + recentFilesMenu->addAction(makeQIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), QKeySequence{}, cb); } menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Save), "Save", cb, QKeySequence::StandardKey::Save); - menu->addAction(makeQIcon(Icons16::Action_Close), "Close", cb, QKeySequence::StandardKey::Close); - menu->addAction(makeQIcon(Icons16::Action_Print), "Print...", cb, QKeySequence::StandardKey::Print); - menu->addAction(makeQIcon(Icons16::Action_PrintPreview), "Print Preview...", cb); + menu->addAction(makeQIcon(Icons16::Action_Save), "Save", QKeySequence::StandardKey::Save, cb); + menu->addAction(makeQIcon(Icons16::Action_Close), "Close", QKeySequence::StandardKey::Close, cb); + menu->addAction(makeQIcon(Icons16::Action_Print), "Print...", QKeySequence::StandardKey::Print, cb); + menu->addAction(makeQIcon(Icons16::Action_PrintPreview), "Print Preview...", QKeySequence{}, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Navigation_Settings), "Preferences...", cb, QKeySequence::StandardKey::Preferences); + menu->addAction(makeQIcon(Icons16::Navigation_Settings), "Preferences...", QKeySequence::StandardKey::Preferences, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", + menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", QKeySequence::StandardKey::Quit, []() { qApp->quit(); - }, - QKeySequence::StandardKey::Quit); + }); } } { auto* menu = menuBar->addMenu("Edit"); { - menu->addAction(makeQIcon(Icons16::Action_Undo), "Undo", cb, QKeySequence::StandardKey::Undo); - menu->addAction(makeQIcon(Icons16::Action_Redo), "Redo", cb, QKeySequence::StandardKey::Redo); + menu->addAction(makeQIcon(Icons16::Action_Undo), "Undo", QKeySequence::StandardKey::Undo, cb); + menu->addAction(makeQIcon(Icons16::Action_Redo), "Redo", QKeySequence::StandardKey::Redo, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Cut), "Cut", cb, QKeySequence::StandardKey::Cut); - menu->addAction(makeQIcon(Icons16::Action_Copy), "Copy", cb, QKeySequence::StandardKey::Copy); - menu->addAction(makeQIcon(Icons16::Action_Paste), "Paste", cb, QKeySequence::StandardKey::Paste); - menu->addAction(makeQIcon(Icons16::Action_Trash), "Delete", cb, QKeySequence::StandardKey::Delete); + menu->addAction(makeQIcon(Icons16::Action_Cut), "Cut", QKeySequence::StandardKey::Cut, cb); + menu->addAction(makeQIcon(Icons16::Action_Copy), "Copy", QKeySequence::StandardKey::Copy, cb); + menu->addAction(makeQIcon(Icons16::Action_Paste), "Paste", QKeySequence::StandardKey::Paste, cb); + menu->addAction(makeQIcon(Icons16::Action_Trash), "Delete", QKeySequence::StandardKey::Delete, cb); } } { auto* menu = menuBar->addMenu("View"); { - menu->addAction(makeQIcon(Icons16::Action_ZoomIn), "Zoom In", cb, QKeySequence::StandardKey::ZoomIn); - menu->addAction(makeQIcon(Icons16::Action_ZoomOut), "Zoom Out", cb, QKeySequence::StandardKey::ZoomOut); - menu->addAction(makeQIcon(Icons16::Action_ZoomFit), "Fit", cb, QKeySequence{}); + menu->addAction(makeQIcon(Icons16::Action_ZoomIn), "Zoom In", QKeySequence::StandardKey::ZoomIn, cb); + menu->addAction(makeQIcon(Icons16::Action_ZoomOut), "Zoom Out", QKeySequence::StandardKey::ZoomOut, cb); + menu->addAction(makeQIcon(Icons16::Action_ZoomFit), "Fit", QKeySequence{}, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Fullscreen), "Full Screen", cb, QKeySequence::StandardKey::FullScreen); + menu->addAction(makeQIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); } } { auto* menu = menuBar->addMenu("Help"); { - menu->addAction(makeQIcon(Icons16::Misc_Mail), "Contact", cb, QKeySequence{}); - menu->addAction(makeQIcon(Icons16::Misc_Info), "About...", cb, QKeySequence{}); + menu->addAction(makeQIcon(Icons16::Misc_Mail), "Contact", QKeySequence{}, cb); + menu->addAction(makeQIcon(Icons16::Misc_Info), "About...", QKeySequence{}, cb); } } } From 0cce942486517c20055dfafc4ce4a38203b2e609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 12 Oct 2024 22:45:09 +0200 Subject: [PATCH 17/45] The format.sh script now also handles sandbox and showcase apps --- scripts/format.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/format.sh b/scripts/format.sh index a80debe..b32a2e1 100755 --- a/scripts/format.sh +++ b/scripts/format.sh @@ -1,3 +1,3 @@ #!/bin/bash -find $(dirname "$0")/../lib/src $(dirname "$0")/../lib/include -iname *.hpp -o -iname *.cpp | xargs clang-format -i +find $(dirname "$0")/../lib/src $(dirname "$0")/../lib/include $(dirname "$0")/../sandbox/src $(dirname "$0")/../showcase/src -iname *.hpp -o -iname *.cpp | xargs clang-format -i From 4523664db4512d1b438169e72a700a1c0aa49c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 12 Oct 2024 22:45:32 +0200 Subject: [PATCH 18/45] WIP showcase window --- sandbox/src/SandboxWindow.cpp | 3 +- showcase/resources/icons/scene_light.svg | 1 + showcase/resources/icons/scene_material.svg | 1 + showcase/resources/icons/scene_object.svg | 1 + showcase/resources/showcase.qrc | 3 + showcase/src/ShowcaseWindow.cpp | 116 ++++++++++++++++++-- 6 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 showcase/resources/icons/scene_light.svg create mode 100644 showcase/resources/icons/scene_material.svg create mode 100644 showcase/resources/icons/scene_object.svg diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index 15f10a0..d98f327 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -727,7 +727,8 @@ struct SandboxWindow::Impl { } } - treeWidget->topLevelItem(0)->setSelected(true), windowContentLayout->addWidget(treeWidget); + treeWidget->topLevelItem(0)->setSelected(true); + windowContentLayout->addWidget(treeWidget); } void setupUI_menuBar() const { diff --git a/showcase/resources/icons/scene_light.svg b/showcase/resources/icons/scene_light.svg new file mode 100644 index 0000000..5e46abf --- /dev/null +++ b/showcase/resources/icons/scene_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/showcase/resources/icons/scene_material.svg b/showcase/resources/icons/scene_material.svg new file mode 100644 index 0000000..e46b631 --- /dev/null +++ b/showcase/resources/icons/scene_material.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/showcase/resources/icons/scene_object.svg b/showcase/resources/icons/scene_object.svg new file mode 100644 index 0000000..57bf3b9 --- /dev/null +++ b/showcase/resources/icons/scene_object.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/showcase/resources/showcase.qrc b/showcase/resources/showcase.qrc index b364d37..31a3fe0 100644 --- a/showcase/resources/showcase.qrc +++ b/showcase/resources/showcase.qrc @@ -1,5 +1,8 @@ + icons/scene_light.svg + icons/scene_material.svg + icons/scene_object.svg themes/dark.json themes/light.json qlementine_icon.ico diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index 32071ed..175b23c 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -23,11 +23,15 @@ #include #include #include +#include +#include +#include +#include namespace oclero::qlementine::showcase { using Icons16 = oclero::qlementine::icons::Icons16; -static QIcon makeQIcon(Icons16 id, const QSize& size = QSize(16,16)) { +static QIcon makeQIcon(Icons16 id, const QSize& size = QSize(16, 16)) { return oclero::qlementine::makeThemedIcon(id, size); } @@ -101,7 +105,8 @@ struct ShowcaseWindow::Impl { auto* recentFilesMenu = menu->addMenu(makeQIcon(Icons16::Document_OpenRecent), "Recent Files"); for (auto i = 0; i < 5; ++i) { - recentFilesMenu->addAction(makeQIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), QKeySequence{}, cb); + recentFilesMenu->addAction( + makeQIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), QKeySequence{}, cb); } menu->addSeparator(); @@ -111,13 +116,13 @@ struct ShowcaseWindow::Impl { menu->addAction(makeQIcon(Icons16::Action_PrintPreview), "Print Preview...", QKeySequence{}, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Navigation_Settings), "Preferences...", QKeySequence::StandardKey::Preferences, cb); + menu->addAction( + makeQIcon(Icons16::Navigation_Settings), "Preferences...", QKeySequence::StandardKey::Preferences, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", QKeySequence::StandardKey::Quit, - []() { - qApp->quit(); - }); + menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", QKeySequence::StandardKey::Quit, []() { + qApp->quit(); + }); } } { @@ -141,7 +146,8 @@ struct ShowcaseWindow::Impl { menu->addAction(makeQIcon(Icons16::Action_ZoomFit), "Fit", QKeySequence{}, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); + menu->addAction( + makeQIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); } } { @@ -188,6 +194,7 @@ struct ShowcaseWindow::Impl { auto* toolButton = new QToolButton(toolBar); toolButton->setFocusPolicy(Qt::NoFocus); toolButton->setIcon(makeQIcon(Icons16::Action_Undo)); + toolButton->setToolTip("Undo"); toolBar->addWidget(toolButton); } @@ -195,6 +202,7 @@ struct ShowcaseWindow::Impl { auto* toolButton = new QToolButton(toolBar); toolButton->setFocusPolicy(Qt::NoFocus); toolButton->setIcon(makeQIcon(Icons16::Action_Redo)); + toolButton->setToolTip("Redo"); toolBar->addWidget(toolButton); } } @@ -225,8 +233,8 @@ struct ShowcaseWindow::Impl { topBarLayout->addWidget(button); } + auto* navBar = new NavigationBar(widget); { - auto* navBar = new NavigationBar(widget); layout->addWidget(navBar); navBar->setItemsShouldExpand(true); navBar->addItem("Objects", QIcon(), QString("%1").arg(12)); @@ -235,8 +243,94 @@ struct ShowcaseWindow::Impl { layout->addWidget(makeHorizontalLine(widget)); - auto* treeView = new QTreeView(widget); - layout->addWidget(treeView, 1); + auto* stackedWidget = new QStackedWidget(widget); + { + stackedWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); + + { + auto* treeWidget = new QTreeWidget(widget); + stackedWidget->addWidget(treeWidget); + + qlementineStyle->setAutoIconColor(treeWidget, oclero::qlementine::AutoIconColor::None); + + const auto object_icon = QIcon(":/showcase/icons/scene_object.svg"); + const auto light_icon = QIcon(":/showcase/icons/scene_light.svg"); + const auto material_icon = QIcon(":/showcase/icons/scene_material.svg"); + + treeWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); + treeWidget->setAlternatingRowColors(false); + treeWidget->setColumnCount(1); + treeWidget->setHeaderHidden(true); + treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + + for (auto i = 0; i < 24; ++i) { + auto* root = new QTreeWidgetItem(treeWidget); + root->setText(0, QString("Root %1").arg(i + 1)); + root->setIcon(0, object_icon); + root->setText(1, QString("Column 2 of Root %1").arg(i + 1)); + + for (auto j = 0; j < 4; ++j) { + auto* child = new QTreeWidgetItem(root); + child->setText(0, QString("Child %1 of Root %2").arg(j + 1).arg(i + 1)); + child->setIcon(0, light_icon); + child->setText(1, QString("Column 2 of Child %1 of Root %2").arg(j + 1).arg(i + 1)); + + for (auto k = 0; k < 3; ++k) { + auto* subChild = new QTreeWidgetItem(child); + subChild->setText(0, QString("Child %1 of Child %2 of Root %3").arg(k + 1).arg(j + 1).arg(i + 1)); + subChild->setIcon(0, material_icon); + subChild->setText( + 1, QString("Column 2 of Child %1 of Child %2 of Root %3").arg(k + 1).arg(j + 1).arg(i + 1)); + } + } + } + + treeWidget->topLevelItem(0)->setSelected(true); + navBar->setItemBadge(0, QString::number(treeWidget->topLevelItemCount())); + } + + { + class CustomDelegate : public QStyledItemDelegate { + using QStyledItemDelegate::QStyledItemDelegate; + + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override { + const auto result = QStyledItemDelegate::sizeHint(option, index); + return { 0, result.height() }; + } + }; + + + auto* listWidget = new QListWidget(widget); + stackedWidget->addWidget(listWidget); + + listWidget->setItemDelegate(new CustomDelegate(listWidget)); + listWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); + listWidget->setSizeAdjustPolicy(QListView::SizeAdjustPolicy::AdjustIgnored); + listWidget->setAlternatingRowColors(true); + listWidget->setIconSize(QSize(32, 32)); + qlementineStyle->setAutoIconColor(listWidget, AutoIconColor::None); + + const auto materialIcon = QIcon(":/showcase/icons/scene_material.svg"); + for (auto i = 0; i < 16; ++i) { + const auto itemText = QString("Item #%1 with very long text that can be elided").arg(i); + auto* item = new QListWidgetItem(materialIcon, itemText, listWidget); + item->setFlags(item->flags() | Qt::ItemFlag::ItemIsUserCheckable); + item->setCheckState(i % 3 == 0 ? Qt ::CheckState::Checked : Qt::CheckState::Unchecked); + listWidget->addItem(item); + } + listWidget->item(0)->setSelected(true); + navBar->setItemBadge(1, QString::number(listWidget->count())); + } + + layout->addWidget(stackedWidget, 1); + } + + { + stackedWidget->setCurrentIndex(navBar->currentIndex()); + QObject::connect(navBar, &NavigationBar::currentIndexChanged, stackedWidget, [stackedWidget, navBar]() { + stackedWidget->setCurrentIndex(navBar->currentIndex()); + }); + } } void setupRightPanel() { From 49b4d2b5365b2ab821274748bb6391f202b79784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 13 Oct 2024 19:16:11 +0200 Subject: [PATCH 19/45] Add utilities for QLayout --- lib/CMakeLists.txt | 2 + .../oclero/qlementine/utils/LayoutUtils.hpp | 34 +++++++++++ .../oclero/qlementine/utils/WidgetUtils.hpp | 4 -- lib/src/utils/LayoutUtils.cpp | 56 +++++++++++++++++++ lib/src/utils/WidgetUtils.cpp | 29 ---------- 5 files changed, 92 insertions(+), 33 deletions(-) create mode 100644 lib/include/oclero/qlementine/utils/LayoutUtils.hpp create mode 100644 lib/src/utils/LayoutUtils.cpp diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 7ba1aa6..b512b53 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -31,6 +31,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FontUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/IconUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ImageUtils.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/LayoutUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PrimitiveUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/RadiusesF.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StateUtils.cpp @@ -81,6 +82,7 @@ set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/FontUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/IconUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/ImageUtils.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/LayoutUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/PrimitiveUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/RadiusesF.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/StateUtils.hpp diff --git a/lib/include/oclero/qlementine/utils/LayoutUtils.hpp b/lib/include/oclero/qlementine/utils/LayoutUtils.hpp new file mode 100644 index 0000000..fe4365b --- /dev/null +++ b/lib/include/oclero/qlementine/utils/LayoutUtils.hpp @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +#include + +class QWidget; + +namespace oclero::qlementine { +/// Retrieves the widget's QStyle margins. +QMargins getLayoutMargins(const QWidget* widget); + +/// Retrieves the widget's QStyle horizontal spacing. +int getLayoutHSpacing(const QWidget* widget); + +/// Retrieves the widget's QStyle vertical spacing. +int getLayoutVSpacing(const QWidget* widget); + +/// Retrieves the widget's QStyle horizontal spacing and margins. +std::tuple getHLayoutProps(const QWidget* widget); + +/// Retrieves the widget's QStyle vertical spacing and margins. +std::tuple getVLayoutProps(const QWidget* widget); + +/// Retrieves the widget's QStyle vertical/horizontal spacings and margins. +std::tuple getFormLayoutProps(const QWidget* widget); + +/// Remove and deletes all the elements in the layout. +void clearLayout(QLayout* layout); +} // namespace oclero::qlementine diff --git a/lib/include/oclero/qlementine/utils/WidgetUtils.hpp b/lib/include/oclero/qlementine/utils/WidgetUtils.hpp index e8d33cc..ae579b9 100644 --- a/lib/include/oclero/qlementine/utils/WidgetUtils.hpp +++ b/lib/include/oclero/qlementine/utils/WidgetUtils.hpp @@ -13,14 +13,10 @@ QWidget* makeHorizontalLine(QWidget* parentWidget, int maxWidth = -1); void centerWidget(QWidget* widget, QWidget* host = nullptr); -QMargins getDefaultMargins(const QStyle* style); - qreal getDpi(const QWidget* widget); QWindow* getWindow(const QWidget* widget); -void clearLayout(QLayout* layout); - template T* findFirstParentOfType(QWidget* child) { auto* parent = child; diff --git a/lib/src/utils/LayoutUtils.cpp b/lib/src/utils/LayoutUtils.cpp new file mode 100644 index 0000000..ee1274d --- /dev/null +++ b/lib/src/utils/LayoutUtils.cpp @@ -0,0 +1,56 @@ +#include + +#include +#include + +namespace oclero { +namespace qlementine { +QMargins getLayoutMargins(const QWidget* widget) { + if (const auto* style = widget ? widget->style() : nullptr) { + const auto left = style->pixelMetric(QStyle::PM_LayoutLeftMargin); + const auto top = style->pixelMetric(QStyle::PM_LayoutTopMargin); + const auto right = style->pixelMetric(QStyle::PM_LayoutRightMargin); + const auto bottom = style->pixelMetric(QStyle::PM_LayoutBottomMargin); + return { left, top, right, bottom }; + } + return { 0, 0, 0, 0 }; +} + +int getLayoutHSpacing(const QWidget* widget) { + if (const auto* style = widget ? widget->style() : nullptr) { + return style->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); + } + return 0; +} + +int getLayoutVSpacing(const QWidget* widget) { + if (const auto* style = widget ? widget->style() : nullptr) { + return style->pixelMetric(QStyle::PM_LayoutVerticalSpacing); + } + return 0; +} + +std::tuple getVLayoutProps(const QWidget* widget) { + return std::tuple{ getLayoutVSpacing(widget), getLayoutMargins(widget) }; +} + +std::tuple getHLayoutProps(const QWidget* widget) { + return std::tuple{ getLayoutHSpacing(widget), getLayoutMargins(widget) }; +} + +std::tuple getFormLayoutProps(const QWidget* widget) { + return std::tuple{ getLayoutVSpacing(widget), getLayoutHSpacing(widget), getLayoutMargins(widget) }; +} + +void clearLayout(QLayout* layout) { + while (auto* item = layout->takeAt(0)) { + if (auto* widget = item->widget()) { + delete widget; + } else if (auto* item_layout = item->layout()) { + clearLayout(item_layout); + } + delete item; + } +} +} // namespace qlementine +} // namespace oclero diff --git a/lib/src/utils/WidgetUtils.cpp b/lib/src/utils/WidgetUtils.cpp index d92f4fc..01bfa7d 100644 --- a/lib/src/utils/WidgetUtils.cpp +++ b/lib/src/utils/WidgetUtils.cpp @@ -61,18 +61,6 @@ void centerWidget(QWidget* widget, QWidget* host) { } } -QMargins getDefaultMargins(const QStyle* style) { - if (!style) - return { 0, 0, 0, 0 }; - - const auto paddingLeft = style->pixelMetric(QStyle::PM_LayoutLeftMargin); - const auto paddingRight = style->pixelMetric(QStyle::PM_LayoutRightMargin); - const auto paddingTop = style->pixelMetric(QStyle::PM_LayoutTopMargin); - const auto paddingBottom = style->pixelMetric(QStyle::PM_LayoutBottomMargin); - const auto contentsMargins = QMargins{ paddingLeft, paddingTop, paddingRight, paddingBottom }; - return contentsMargins; -} - qreal getDpi(const QWidget* widget) { if (widget) { if (const auto* screen = widget->screen()) { @@ -90,21 +78,4 @@ QWindow* getWindow(const QWidget* widget) { } return nullptr; } - -void clearLayout(QLayout* layout) { - if (!layout) - return; - - QLayoutItem* item{}; - while ((item = layout->takeAt(0))) { - if (item->layout()) { - clearLayout(item->layout()); - delete item->layout(); - } - if (item->widget()) { - delete item->widget(); - } - delete item; - } -} } // namespace oclero::qlementine From aa5fcde171f9a9f103628759a9c39a54f40db809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 13 Oct 2024 19:16:31 +0200 Subject: [PATCH 20/45] Remove warning for unused const variable --- lib/include/oclero/qlementine/utils/PrimitiveUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/include/oclero/qlementine/utils/PrimitiveUtils.hpp b/lib/include/oclero/qlementine/utils/PrimitiveUtils.hpp index e715a0f..805716d 100644 --- a/lib/include/oclero/qlementine/utils/PrimitiveUtils.hpp +++ b/lib/include/oclero/qlementine/utils/PrimitiveUtils.hpp @@ -14,7 +14,7 @@ #include namespace oclero::qlementine { -static constexpr auto QLEMENTINE_PI = 3.14159265358979323846; +[[maybe_unused]] static constexpr auto QLEMENTINE_PI = 3.14159265358979323846; /// Gets the device pixel ratio for the QWidget. double getPixelRatio(QWidget const* w); From a113406f8c207eb6a4612fe8592874182ffdcaaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 13 Oct 2024 19:16:57 +0200 Subject: [PATCH 21/45] Fix context menu icons for QDateTimeEdit --- lib/src/style/EventFilters.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index 62269ca..c674dd2 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -449,7 +449,7 @@ class LineEditMenuIconsBehavior : public QObject { static IconListMode getMode(const QMenu* menu) { if (const auto* menu_parent = menu->parent()) { - if (qobject_cast(menu_parent->parent())) { + if (qobject_cast(menu_parent->parent())) { return IconListMode::SpinBox; } else if (const auto* line_edit = qobject_cast(menu_parent)) { return line_edit->isReadOnly() ? IconListMode::ReadOnlyLineEdit : IconListMode::LineEdit; From 100c57a043d9dda7430e09b6c9d45bdc3ba018f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 13 Oct 2024 19:17:27 +0200 Subject: [PATCH 22/45] Fix QDateTimeEdit minimum width --- lib/src/style/QlementineStyle.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 7f43625..c4be874 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -3887,10 +3887,12 @@ QSize QlementineStyle::sizeFromContents( break; case CT_SpinBox: if (const auto* optSpinbox = qstyleoption_cast(opt)) { + const auto isDateTimeEdit = qobject_cast(widget) != nullptr; const auto hasButtons = optSpinbox->buttonSymbols != QAbstractSpinBox::NoButtons; - const auto buttonW = hasButtons ? _impl->theme.controlHeightLarge : 0; + const auto buttonW = isDateTimeEdit || hasButtons ? _impl->theme.controlHeightLarge : 0; + const auto dateTimeWidth = isDateTimeEdit ? _impl->theme.iconSize.width() : 0; const auto borderW = optSpinbox->frame ? pixelMetric(PM_SpinBoxFrameWidth, opt, widget) : 0; - return QSize{ contentSize.width() + buttonW + 2 * borderW, _impl->theme.controlHeightLarge }; + return QSize{ contentSize.width() + buttonW + dateTimeWidth + 2 * borderW, _impl->theme.controlHeightLarge }; } break; case CT_SizeGrip: From af1703b2c857a025acf6abd475d059dd4e7085ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 13 Oct 2024 19:18:00 +0200 Subject: [PATCH 23/45] WIP showcase window --- lib/src/style/QlementineStyle.cpp | 15 +- showcase/src/ShowcaseWindow.cpp | 287 ++++++++++++++++++++++++++---- 2 files changed, 263 insertions(+), 39 deletions(-) diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index c4be874..47500ae 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -434,8 +434,19 @@ void QlementineStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption* opt break; case PE_FrameMenu: return; // Let PE_PanelMenu do the drawing. - case PE_FrameStatusBarItem: - break; + case PE_FrameStatusBarItem: { + // p->fillRect(opt->rect, Qt::red); + + const auto rect = opt->rect; + const auto penColor = Qt::red; // _impl->theme.borderColor; + const auto penWidth = _impl->theme.borderWidth; + const auto p1 = QPoint{rect.x() + 1 + penWidth, rect.y() + rect.x()}; + const auto p2 = QPoint{rect.x() + 1 + penWidth, rect.y() + rect.height()}; + p->setPen(QPen(penColor, penWidth, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + p->setBrush(Qt::NoBrush); + p->drawLine(p1, p2); + } + return; case PE_FrameTabWidget: { // QTabWidget.cpp, line 1296, in QTabWidget::paintEvent(): // The widget does not draw the Tab bar background unless it's in diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index 175b23c..a5ff648 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -1,11 +1,17 @@ #include "ShowcaseWindow.hpp" #include + +#include #include +#include + #include -#include #include -#include +#include +#include +#include +#include #include @@ -27,11 +33,23 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include namespace oclero::qlementine::showcase { using Icons16 = oclero::qlementine::icons::Icons16; -static QIcon makeQIcon(Icons16 id, const QSize& size = QSize(16, 16)) { +static QIcon makeQIcon(Icons16 id, const QSize& size = { 16, 16 }) { return oclero::qlementine::makeThemedIcon(id, size); } @@ -42,10 +60,68 @@ class DummyWorkspace : public QWidget { protected: void paintEvent(QPaintEvent* evt) override { QPainter p(this); - p.fillRect(rect(), Qt::black); + + QColor backgroundColor; + if (const auto* qlementine_style = qlementine::appStyle()) { + const auto theme = qlementine_style->theme(); + backgroundColor = theme.backgroundColorMain4.darker(110); + } + p.fillRect(rect(), backgroundColor); } }; +static QString getDummyText(const unsigned int minWords = 3, const unsigned int maxWords = 4) { + static const auto loremIpsumWords = std::array{ "Lorem", "Ipsum", "Dolor", "Sit", "Amet", + "Consectetur", "Adipiscing", "Elit", "Sed", "Do", "Eiusmod", "Tempor", "Incididunt", "Ut", "Labore", "Et", "Dolore", + "Magna", "Aliqua", "Ut", "Enim", "Ad", "Minim", "Veniam", "Quis", "Nostrud", "Exercitation", "Ullamco", "Laboris", + "Nisi", "Ut", "Aliquip", "Ex", "Ea", "Commodo", "Consequat", "Duis", "Aute", "Irure", "Dolor", "In", + "Reprehenderit", "In", "Voluptate", "Velit", "Esse", "Cillum", "Dolore", "Eu", "Fugiat", "Nulla", "Pariatur", + "Excepteur", "Sint", "Occaecat", "Cupidatat", "Non", "Proident", "Sunt", "In", "Culpa", "Qui", "Officia", + "Deserunt", "Mollit", "Anim", "Id", "Est", "Laborum" }; + + auto rd = std::random_device(); + auto gen = std::mt19937(rd()); + + auto randomCountDistrib = std::uniform_int_distribution<>(minWords, maxWords); + const auto random_word_count = randomCountDistrib(gen); + + auto randomIndexDistrib = std::uniform_int_distribution<>(0, loremIpsumWords.size() - 1 - random_word_count); + const auto randomWordIndex = randomIndexDistrib(gen); + + auto result = loremIpsumWords.at(randomWordIndex); + for (auto i = 0; i < random_word_count - 1; ++i) { + result += ' ' + loremIpsumWords.at(randomWordIndex + 1 + i); + } + return result; +} + +static QIcon getDummyColoredIcon() { + static const auto icons = std::array{ + QIcon(":/showcase/icons/scene_object.svg"), + QIcon(":/showcase/icons/scene_light.svg"), + QIcon(":/showcase/icons/scene_material.svg"), + }; + + auto rd = std::random_device(); + auto gen = std::mt19937(rd()); + + auto randomDistrib = std::uniform_int_distribution<>(0, icons.size() - 1); + const auto randomIndex = randomDistrib(gen); + + return icons.at(randomIndex); +} + +static QIcon getDummyMonochromeIcon(const QSize& size = { 16, 16 }) { + auto rd = std::random_device(); + auto gen = std::mt19937(rd()); + + auto randomDistrib = + std::uniform_int_distribution>(1, 410 - 1); // TODO use a constexpr variable. + const auto randomIndex = randomDistrib(gen); + const auto randomIcon = static_cast(randomIndex); + return makeQIcon(randomIcon, size); +} + struct ShowcaseWindow::Impl { ShowcaseWindow& owner; QPointer qlementineStyle; @@ -173,7 +249,7 @@ struct ShowcaseWindow::Impl { qlementineStyle->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::ForegroundColor); for (auto i = 0; i < 4; ++i) { - tabBar->addTab(makeQIcon(Icons16::File_File), QString("Document %1").arg(i + 1)); + tabBar->addTab(makeQIcon(Icons16::File_File), getDummyText()); } QObject::connect(tabBar, &QTabBar::tabCloseRequested, tabBar, [this](int index) { @@ -190,20 +266,54 @@ struct ShowcaseWindow::Impl { toolBar->setFloatable(false); toolBar->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonFollowStyle); - { + const auto addButton = [this](const Icons16 icon, const QString& tooltip, const QString& text = {}) { auto* toolButton = new QToolButton(toolBar); toolButton->setFocusPolicy(Qt::NoFocus); - toolButton->setIcon(makeQIcon(Icons16::Action_Undo)); - toolButton->setToolTip("Undo"); + toolButton->setIcon(makeQIcon(icon)); + toolButton->setToolTip(tooltip); + if (!text.isEmpty()) { + toolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + toolButton->setText(text); + } toolBar->addWidget(toolButton); + return toolButton; + }; + + addButton(Icons16::Action_Save, "Save"); + addButton(Icons16::Action_Print, "Print"); + toolBar->addSeparator(); + addButton(Icons16::Action_Undo, "Undo"); + addButton(Icons16::Action_Redo, "Redo"); + + auto* resetButton = addButton(Icons16::Action_Reset, "Reset"); + { + auto* menu = new QMenu(resetButton); + for (auto i = 0; i < 10; ++i) { + menu->addAction(new QAction(getDummyMonochromeIcon(), getDummyText(2, 3), menu)); + } + resetButton->setMenu(menu); + resetButton->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); } + toolBar->addSeparator(); + addButton(Icons16::Action_Copy, "Copy"); + addButton(Icons16::Action_Paste, "Paste"); + addButton(Icons16::Action_Cut, "Cut"); + toolBar->addSeparator(); + addButton(Icons16::Media_SkipBackward, "Skip Backward"); + addButton(Icons16::Media_Play, "Play"); + addButton(Icons16::Media_SkipForward, "Skip Forward"); + toolBar->addSeparator(); + auto* exportButton = addButton(Icons16::Action_Export, "Export", "Export"); { - auto* toolButton = new QToolButton(toolBar); - toolButton->setFocusPolicy(Qt::NoFocus); - toolButton->setIcon(makeQIcon(Icons16::Action_Redo)); - toolButton->setToolTip("Redo"); - toolBar->addWidget(toolButton); + auto* menu = new QMenu(exportButton); + menu->addAction(new QAction(makeQIcon(Icons16::File_Movie), "Movie", menu)); + menu->addAction(new QAction(makeQIcon(Icons16::File_Picture), "Picture", menu)); + menu->addSeparator(); + menu->addAction(new QAction(makeQIcon(Icons16::File_Archive), "Archive", menu)); + + exportButton->setMenu(menu); + exportButton->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); } } @@ -224,6 +334,7 @@ struct ShowcaseWindow::Impl { topBarLayout->setContentsMargins({ 12, 8, 12, 8 }); auto* lineEdit = new LineEdit(widget); + lineEdit->setIcon(makeQIcon(Icons16::Navigation_Search)); lineEdit->setClearButtonEnabled(true); lineEdit->setPlaceholderText("Search..."); topBarLayout->addWidget(lineEdit, 1); @@ -253,10 +364,6 @@ struct ShowcaseWindow::Impl { qlementineStyle->setAutoIconColor(treeWidget, oclero::qlementine::AutoIconColor::None); - const auto object_icon = QIcon(":/showcase/icons/scene_object.svg"); - const auto light_icon = QIcon(":/showcase/icons/scene_light.svg"); - const auto material_icon = QIcon(":/showcase/icons/scene_material.svg"); - treeWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); treeWidget->setAlternatingRowColors(false); treeWidget->setColumnCount(1); @@ -265,22 +372,18 @@ struct ShowcaseWindow::Impl { for (auto i = 0; i < 24; ++i) { auto* root = new QTreeWidgetItem(treeWidget); - root->setText(0, QString("Root %1").arg(i + 1)); - root->setIcon(0, object_icon); - root->setText(1, QString("Column 2 of Root %1").arg(i + 1)); + root->setText(0, getDummyText()); + root->setIcon(0, getDummyColoredIcon()); for (auto j = 0; j < 4; ++j) { auto* child = new QTreeWidgetItem(root); - child->setText(0, QString("Child %1 of Root %2").arg(j + 1).arg(i + 1)); - child->setIcon(0, light_icon); - child->setText(1, QString("Column 2 of Child %1 of Root %2").arg(j + 1).arg(i + 1)); + child->setText(0, getDummyText()); + child->setIcon(0, getDummyColoredIcon()); for (auto k = 0; k < 3; ++k) { auto* subChild = new QTreeWidgetItem(child); - subChild->setText(0, QString("Child %1 of Child %2 of Root %3").arg(k + 1).arg(j + 1).arg(i + 1)); - subChild->setIcon(0, material_icon); - subChild->setText( - 1, QString("Column 2 of Child %1 of Child %2 of Root %3").arg(k + 1).arg(j + 1).arg(i + 1)); + subChild->setText(0, getDummyText()); + subChild->setIcon(0, getDummyColoredIcon()); } } } @@ -310,10 +413,9 @@ struct ShowcaseWindow::Impl { listWidget->setIconSize(QSize(32, 32)); qlementineStyle->setAutoIconColor(listWidget, AutoIconColor::None); - const auto materialIcon = QIcon(":/showcase/icons/scene_material.svg"); - for (auto i = 0; i < 16; ++i) { + for (auto i = 0; i < 15; ++i) { const auto itemText = QString("Item #%1 with very long text that can be elided").arg(i); - auto* item = new QListWidgetItem(materialIcon, itemText, listWidget); + auto* item = new QListWidgetItem(getDummyColoredIcon(), itemText, listWidget); item->setFlags(item->flags() | Qt::ItemFlag::ItemIsUserCheckable); item->setCheckState(i % 3 == 0 ? Qt ::CheckState::Checked : Qt::CheckState::Unchecked); listWidget->addItem(item); @@ -354,7 +456,7 @@ struct ShowcaseWindow::Impl { topBarLayout->addWidget(segmentedControl); segmentedControl->setItemsShouldExpand(false); segmentedControl->addItem("Properties", makeQIcon(Icons16::Navigation_SlidersVertical), QString("%1").arg(4)); - segmentedControl->addItem("Scene", QIcon(), QString("%1").arg(2)); + segmentedControl->addItem("Scene", makeQIcon(Icons16::Misc_Globe), QString("%1").arg(2)); } } @@ -363,12 +465,114 @@ struct ShowcaseWindow::Impl { { auto* scrollArea = new QScrollArea(widget); layout->addWidget(scrollArea); + auto* content = new QWidget(scrollArea); - auto* contentLayout = new QVBoxLayout(content); - contentLayout->setContentsMargins({ 16, 12, 16, 12 }); + content->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::MinimumExpanding); + scrollArea->setWidget(content); + scrollArea->setWidgetResizable(true); + + const auto margins = getLayoutMargins(content); + const auto vMargin = static_cast(margins.top() * .75); + auto* contentLayout = new QFormLayout(content); + contentLayout->setFieldGrowthPolicy(QFormLayout::FieldGrowthPolicy::ExpandingFieldsGrow); + contentLayout->setContentsMargins({ margins.left(), vMargin, margins.right(), vMargin }); { - auto* checkBox = new QCheckBox("Some checkbox", content); - contentLayout->addWidget(checkBox); + { + auto* groupBox = new QGroupBox(content); + groupBox->setAlignment(Qt::AlignRight); + groupBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + groupBox->setTitle(getDummyText()); + groupBox->setCheckable(true); + groupBox->setFlat(false); + auto* groupBoxLayout = new QFormLayout(groupBox); + groupBoxLayout->setFieldGrowthPolicy(QFormLayout::FieldGrowthPolicy::ExpandingFieldsGrow); + + { + auto* switchWidget = new qlementine::Switch(groupBox); + switchWidget->setChecked(true); + groupBoxLayout->addRow(getDummyText(2, 2) + ":", switchWidget); + } + { + auto* spinBox = new QSpinBox(groupBox); + spinBox->setRange(0, 1000); + spinBox->setSuffix("cm"); + groupBoxLayout->addRow(getDummyText(2, 2) + ":", spinBox); + } + { + auto* comboBox = new QComboBox(groupBox); + for (auto i = 0; i < 5; ++i) { + comboBox->addItem(getDummyMonochromeIcon(), getDummyText(1, 1)); + } + comboBox->setCurrentIndex(0); + groupBoxLayout->addRow(getDummyText(1, 1) + ":", comboBox); + } + { + auto* comboBox = new QComboBox(groupBox); + comboBox->setEditable(true); + comboBox->setPlaceholderText("Placeholder"); + comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + for (auto i = 0; i < 5; ++i) { + comboBox->addItem(getDummyMonochromeIcon(), getDummyText(1, 1)); + } + comboBox->setCurrentIndex(0); + groupBoxLayout->addRow(getDummyText(1, 1) + ":", comboBox); + } + { + auto* dateTimeEdit = new QDateTimeEdit(groupBox); + //dateTimeEdit->setSizePolicy(QSizepol) + dateTimeEdit->setCalendarPopup(true); + groupBoxLayout->addRow(getDummyText(1, 1) + ":", dateTimeEdit); + } + contentLayout->addRow(groupBox); + } + { + auto* groupBox = new QGroupBox(content); + groupBox->setAlignment(Qt::AlignRight); + groupBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + groupBox->setTitle(getDummyText()); + groupBox->setCheckable(true); + groupBox->setFlat(false); + auto* groupBoxLayout = new QVBoxLayout(groupBox); + { + auto* radioGroup = new QButtonGroup(groupBox); + for (auto i = 0; i < 3; ++i) { + auto* radioButton = new QRadioButton(getDummyText(), groupBox); + radioButton->setIcon(getDummyMonochromeIcon()); + radioButton->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); + radioGroup->addButton(radioButton); + groupBoxLayout->addWidget(radioButton); + } + } + contentLayout->addRow(groupBox); + } + { + auto* groupBox = new QGroupBox(content); + groupBox->setAlignment(Qt::AlignRight); + groupBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + groupBox->setTitle(getDummyText()); + groupBox->setCheckable(true); + groupBox->setFlat(false); + auto* groupBoxLayout = new QFormLayout(groupBox); + { + auto* slider = new QSlider(groupBox); + slider->setRange(0, 100); + slider->setValue(30); + groupBoxLayout->addRow(getDummyText(1, 1) + ":", slider); + } + { + auto* slider = new QSlider(groupBox); + slider->setOrientation(Qt::Orientation::Horizontal); + slider->setRange(0, 10); + slider->setPageStep(1); + slider->setSingleStep(1); + slider->setValue(7); + slider->setTickPosition(QSlider::TickPosition::TicksAbove); + slider->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); + + groupBoxLayout->addRow(getDummyText(1, 1) + ":", slider); + } + contentLayout->addRow(groupBox); + } } } } @@ -388,14 +592,23 @@ struct ShowcaseWindow::Impl { splitter->addWidget(workspace); splitter->addWidget(rightPanel); - splitter->setStretchFactor(0, 1); + splitter->setStretchFactor(0, 2); splitter->setStretchFactor(1, 6); - splitter->setStretchFactor(2, 1); + splitter->setStretchFactor(2, 2); } void setupStatusBar() { statusBar = new QStatusBar(&owner); statusBar->setSizeGripEnabled(false); + + const auto margins = getLayoutMargins(statusBar); + statusBar->setContentsMargins(margins.left(), 0, margins.right(), 0); + { + auto* progressBar = new QProgressBar(statusBar); + progressBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + progressBar->setValue(80); + statusBar->addPermanentWidget(progressBar); + } } void setupLayout() { From 940fae376a080c0fa782b038898bf9f9fbfe1577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 1 Nov 2024 14:42:36 +0100 Subject: [PATCH 24/45] Update cmake to Qt6 --- CMakeLists.txt | 12 ++++++++- lib/CMakeLists.txt | 37 ++++++++++++++------------- sandbox/CMakeLists.txt | 49 ++++++++++++++++++------------------ showcase/CMakeLists.txt | 56 +++++++++++++++++++++-------------------- 4 files changed, 85 insertions(+), 69 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b4d601d..8b816c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,16 @@ project("qlementine" set(PROJECT_COPYRIGHT "© Olivier Cléro, MIT License.") set(PROJECT_NAMESPACE "oclero") +# Temporary hack to make it work with Qt6 <6.4.2 && >6.4.2 With Qt5, it was +# "path/to/Qt/6.7.0/msvc2019_64/lib/cmake/Qt6", but with Qt6, it is now +# "path/to/Qt/6.7.0/msvc2019_64". +if(WIN32) + string(FIND "${CMAKE_PREFIX_PATH}" "/lib/cmake/Qt6" USING_Qt6_INDEX) + if(NOT ${USING_Qt6_INDEX} EQUAL -1) + string(REPLACE "/lib/cmake/Qt6" "" "${CMAKE_PREFIX_PATH}" "${CMAKE_PREFIX_PATH}") + endif() +endif() + # Global flags. set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD 17) @@ -23,7 +33,7 @@ set(CMAKE_AUTORCC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) +if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) set(CMAKE_OSX_DEPLOYMENT_TARGET "13.6") endif() diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index b512b53..31123f1 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -133,35 +133,38 @@ target_include_directories(${LIB_TARGET_NAME} $ ) -target_link_libraries(${LIB_TARGET_NAME} PUBLIC - Qt6::Core - Qt6::Widgets - Qt6::Svg - oclero::qlementine_icons +target_link_libraries(${LIB_TARGET_NAME} + PUBLIC + Qt::Core + Qt::Widgets + Qt::Svg + oclero::qlementine_icons ) set_target_properties(${LIB_TARGET_NAME} PROPERTIES - OUTPUT_NAME ${LIB_TARGET_NAME} - PROJECT_LABEL ${LIB_TARGET_NAME} - FOLDER lib - SOVERSION ${PROJECT_VERSION_MAJOR} - VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} - DEBUG_POSTFIX _debug + OUTPUT_NAME ${LIB_TARGET_NAME} + PROJECT_LABEL ${LIB_TARGET_NAME} + FOLDER lib + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + DEBUG_POSTFIX _debug CMAKE_AUTORCC ON CMAKE_AUTOMOC ON CMAKE_AUTOUIC ON ) -target_compile_options(${LIB_TARGET_NAME} PRIVATE - $<$:/MP /WX /W4> - $<$>:-Wall -Wextra -Werror> +target_compile_options(${LIB_TARGET_NAME} + PRIVATE + $<$:/MP /WX /W4> + $<$>:-Wall -Wextra -Werror> ) # Create source groups. -source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES - ${HEADERS} - ${SOURCES} +source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} + FILES + ${HEADERS} + ${SOURCES} ) # Select correct startup project in Visual Studio. diff --git a/sandbox/CMakeLists.txt b/sandbox/CMakeLists.txt index c71ec20..33b28a6 100644 --- a/sandbox/CMakeLists.txt +++ b/sandbox/CMakeLists.txt @@ -2,8 +2,9 @@ set(SANDBOX_NAME "sandbox") if(APPLE) set(APP_ICON_MACOS "${CMAKE_SOURCE_DIR}/branding/icon/icon.icns") - set_source_files_properties(${APP_ICON_MACOS} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources" + set_source_files_properties(${APP_ICON_MACOS} + PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources" ) endif() @@ -19,29 +20,29 @@ target_link_libraries(${SANDBOX_NAME} PUBLIC oclero::qlementine ) -install(TARGETS ${SANDBOX_NAME} - BUNDLE DESTINATION . +install( + TARGETS ${SANDBOX_NAME} + BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -set_target_properties(${SANDBOX_NAME} PROPERTIES - INTERNAL_CONSOLE OFF - EXCLUDE_FROM_ALL OFF - FOLDER "tools" - CMAKE_AUTOMOC ON - CMAKE_AUTORCC ON - CMAKE_AUTOUIC ON - - MACOSX_BUNDLE_GUI_IDENTIFIER "oclero.qlementine.${SANDBOX_NAME}" - MACOSX_BUNDLE_BUNDLE_NAME "Sandbox" - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} - MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION} - MACOSX_BUNDLE_ICON_FILE "icon.icns" - MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT} - - XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED OFF - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" - XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Manual" - XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF +set_target_properties(${SANDBOX_NAME} + PROPERTIES + INTERNAL_CONSOLE OFF + EXCLUDE_FROM_ALL OFF + FOLDER "tools" + CMAKE_AUTOMOC ON + CMAKE_AUTORCC ON + CMAKE_AUTOUIC ON + MACOSX_BUNDLE_GUI_IDENTIFIER "oclero.qlementine.${SANDBOX_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "Sandbox" + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_ICON_FILE "icon.icns" + MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT} + XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "${XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED}" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}" + XCODE_ATTRIBUTE_CODE_SIGN_STYLE "${XCODE_ATTRIBUTE_CODE_SIGN_STYLE}" + XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF ) diff --git a/showcase/CMakeLists.txt b/showcase/CMakeLists.txt index 2cece6b..2d935af 100644 --- a/showcase/CMakeLists.txt +++ b/showcase/CMakeLists.txt @@ -2,8 +2,9 @@ set(SHOWCASE_NAME "showcase") if(APPLE) set(APP_ICON_MACOS "${CMAKE_SOURCE_DIR}/branding/icon/icon.icns") - set_source_files_properties(${APP_ICON_MACOS} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources" + set_source_files_properties(${APP_ICON_MACOS} + PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources" ) endif() @@ -19,34 +20,35 @@ qt_add_executable(${SHOWCASE_NAME} ${SOURCES} ) -target_link_libraries(${SHOWCASE_NAME} PUBLIC - oclero::qlementine - oclero::qlementine_icons +target_link_libraries(${SHOWCASE_NAME} + PUBLIC + oclero::qlementine + oclero::qlementine_icons ) -install(TARGETS ${SHOWCASE_NAME} - BUNDLE DESTINATION . +install( + TARGETS ${SHOWCASE_NAME} + BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -set_target_properties(${SHOWCASE_NAME} PROPERTIES - INTERNAL_CONSOLE OFF - EXCLUDE_FROM_ALL OFF - FOLDER "tools" - CMAKE_AUTOMOC ON - CMAKE_AUTORCC ON - CMAKE_AUTOUIC ON - - MACOSX_BUNDLE_GUI_IDENTIFIER "oclero.qlementine.${SHOWCASE_NAME}" - MACOSX_BUNDLE_BUNDLE_NAME "Showcase" - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} - MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION} - MACOSX_BUNDLE_ICON_FILE "icon.icns" - MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT} - - XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED OFF - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" - XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Manual" - XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF +set_target_properties(${SHOWCASE_NAME} + PROPERTIES + INTERNAL_CONSOLE OFF + EXCLUDE_FROM_ALL OFF + FOLDER "tools" + CMAKE_AUTOMOC ON + CMAKE_AUTORCC ON + CMAKE_AUTOUIC ON + MACOSX_BUNDLE_GUI_IDENTIFIER "oclero.qlementine.${SHOWCASE_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "Showcase" + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_ICON_FILE "icon.icns" + MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT} + XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "${XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED}" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}" + XCODE_ATTRIBUTE_CODE_SIGN_STYLE "${XCODE_ATTRIBUTE_CODE_SIGN_STYLE}" + XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS OFF ) From 25db9427cfb0fbe135bc7d11ad0baaa9b0a27b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 1 Nov 2024 18:35:12 +0100 Subject: [PATCH 25/45] fix #63 : textfield of QFontComboBox is cropped --- lib/src/style/QlementineStyle.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 47500ae..e38a27f 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -3301,7 +3302,9 @@ QRect QlementineStyle::subControlRect( if (comboBoxOpt->editable) { const auto indicatorSize = _impl->theme.iconSize; const auto spacing = _impl->theme.spacing; - if (qobject_cast(w) != nullptr) { + const auto isBasicComboBox = + qobject_cast(w) != nullptr && qobject_cast(w) == nullptr; + if (isBasicComboBox) { // Strange hack to place the QLineEdit correctly. const auto indicatorButtonW = spacing * 2 + indicatorSize.width(); const auto shiftX = static_cast(spacing * 2.5); From 9388eeaf34c272e5df9e1c1d7868a1f4a9ee1fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 1 Nov 2024 19:00:20 +0100 Subject: [PATCH 26/45] Prevent menu from closing when clicked in a non-QAction area --- lib/CMakeLists.txt | 2 + .../oclero/qlementine/utils/MenuUtils.hpp | 15 +++ lib/src/style/EventFilters.cpp | 93 +++++++++++++------ lib/src/utils/MenuUtils.cpp | 69 ++++++++++++++ 4 files changed, 153 insertions(+), 26 deletions(-) create mode 100644 lib/include/oclero/qlementine/utils/MenuUtils.hpp create mode 100644 lib/src/utils/MenuUtils.cpp diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 31123f1..e3610ab 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -32,6 +32,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/IconUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ImageUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/LayoutUtils.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/MenuUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PrimitiveUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/RadiusesF.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StateUtils.cpp @@ -83,6 +84,7 @@ set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/IconUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/ImageUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/LayoutUtils.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/MenuUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/PrimitiveUtils.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/RadiusesF.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/oclero/qlementine/utils/StateUtils.hpp diff --git a/lib/include/oclero/qlementine/utils/MenuUtils.hpp b/lib/include/oclero/qlementine/utils/MenuUtils.hpp new file mode 100644 index 0000000..95fd51e --- /dev/null +++ b/lib/include/oclero/qlementine/utils/MenuUtils.hpp @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +class QMenu; +class QAction; + +namespace oclero::qlementine { +QMenu* getTopLevelMenu(QMenu* menu); + +void flashAction(QAction* action, QMenu* menu, const std::function& onAnimationFinished); +} // namespace oclero::qlementine diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index c674dd2..f4d9e54 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -281,32 +282,72 @@ MenuEventFilter::MenuEventFilter(QMenu* menu) bool MenuEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) { const auto type = evt->type(); - if (type == QEvent::Type::Show) { - // Place the QMenu correctly by making up for the drop shadow margins. - // It'll be reset before every show, so we can safely move it every time. - // Submenus should already be placed correctly, so there's no need to translate their geometry. - // Also, make up for the menu item padding so the texts are aligned. - const auto isMenuBarMenu = qobject_cast(_menu->parentWidget()) != nullptr; - const auto isSubMenu = qobject_cast(_menu->parentWidget()) != nullptr; - const auto alignForMenuBar = isMenuBarMenu && !isSubMenu; - const auto* qlementineStyle = qobject_cast(_menu->style()); - const auto menuItemHPadding = qlementineStyle ? qlementineStyle->theme().spacing : 0; - const auto menuDropShadowWidth = qlementineStyle ? qlementineStyle->theme().spacing : 0; - const auto menuOriginalPos = _menu->pos(); - const auto menuBarTranslation = alignForMenuBar ? QPoint(-menuItemHPadding, 0) : QPoint(0, 0); - const auto shadowTranslation = QPoint(-menuDropShadowWidth, -menuDropShadowWidth); - const auto menuNewPos = menuOriginalPos + menuBarTranslation + shadowTranslation; - - // Menus have weird sizing bugs when moving them from this event. - // We have to wait for the event loop to be processed before setting the final position. - const auto menuSize = _menu->size(); - if (menuSize != QSize(0, 0)) { - _menu->resize(0, 0); // Hide the menu for now until we can set the position. - QTimer::singleShot(0, _menu, [this, menuNewPos, menuSize]() { - _menu->move(menuNewPos); - _menu->resize(menuSize); - }); - } + + switch (type) { + case QEvent::Type::Show: { + // Place the QMenu correctly by making up for the drop shadow margins. + // It'll be reset before every show, so we can safely move it every time. + // Submenus should already be placed correctly, so there's no need to translate their geometry. + // Also, make up for the menu item padding so the texts are aligned. + const auto isMenuBarMenu = qobject_cast(_menu->parentWidget()) != nullptr; + const auto isSubMenu = qobject_cast(_menu->parentWidget()) != nullptr; + const auto alignForMenuBar = isMenuBarMenu && !isSubMenu; + const auto* qlementineStyle = qobject_cast(_menu->style()); + const auto menuItemHPadding = qlementineStyle ? qlementineStyle->theme().spacing : 0; + const auto menuDropShadowWidth = qlementineStyle ? qlementineStyle->theme().spacing : 0; + const auto menuOriginalPos = _menu->pos(); + const auto menuBarTranslation = alignForMenuBar ? QPoint(-menuItemHPadding, 0) : QPoint(0, 0); + const auto shadowTranslation = QPoint(-menuDropShadowWidth, -menuDropShadowWidth); + const auto menuNewPos = menuOriginalPos + menuBarTranslation + shadowTranslation; + + // Menus have weird sizing bugs when moving them from this event. + // We have to wait for the event loop to be processed before setting the final position. + const auto menuSize = _menu->size(); + if (menuSize != QSize(0, 0)) { + _menu->resize(0, 0); // Hide the menu for now until we can set the position. + QTimer::singleShot(0, _menu, [this, menuNewPos, menuSize]() { + _menu->move(menuNewPos); + _menu->resize(menuSize); + }); + } + } break; + case QEvent::Type::MouseButtonPress: { + const auto* mouseEvt = static_cast(evt); + const auto mousePos = mouseEvt->pos(); + if (const auto* action = _menu->actionAt(mousePos)) { + if (action->isSeparator() || !action->isEnabled() || action->property("qlementine_flashing").toBool()) { + return true; + } + } else if (_menu->rect().contains(mousePos)) { + return true; + } + } break; + case QEvent::Type::MouseButtonRelease: { + const auto* mouseEvt = static_cast(evt); + const auto mousePos = mouseEvt->pos(); + if (auto* action = _menu->actionAt(mousePos)) { + if (action->isSeparator() || !action->isEnabled() || action->property("qlementine_flashing").toBool()) + return true; + + if (action->menu() == nullptr) { + flashAction(action, _menu, [this, action]() { + // The call to QAction::trigger might destroy the menu or the actions. + const QPointer menu_guard(_menu); + action->trigger(); + if (menu_guard) { + if (auto* top_menu = getTopLevelMenu(menu_guard)) { + top_menu->close(); + } + } + }); + return true; + } + } else if (_menu->rect().contains(mousePos)) { + return true; + } + } break; + default: + break; } return QObject::eventFilter(watchedObject, evt); diff --git a/lib/src/utils/MenuUtils.cpp b/lib/src/utils/MenuUtils.cpp new file mode 100644 index 0000000..93dbb10 --- /dev/null +++ b/lib/src/utils/MenuUtils.cpp @@ -0,0 +1,69 @@ +#include + +#include +#include +#include +#include + +namespace oclero::qlementine { +class FlashActionHelper : QObject { +public: + FlashActionHelper(QAction* action, QMenu* menu, const std::function& onAnimationFinished) + : QObject(action) + , _menu(menu) + , _action(action) + , _onAnimationFinished(onAnimationFinished) { + if (_menu && _action) { + _action->setProperty("qlementine_flashing", true); + _menu->blockSignals(true); + _timerId = startTimer(flashActionBlinkDuration); + } + } + +protected: + void timerEvent(QTimerEvent*) override { + if (_flashActionElapsedTime < flashActionDuration && _menu && _action) { + _flashActionElapsedTime += flashActionBlinkDuration; + const auto* currentActiveAction = _menu->activeAction(); + _menu->setActiveAction(currentActiveAction == nullptr ? _action : nullptr); + } else { + killTimer(_timerId); + if (_menu) { + if (_action) { + _menu->setActiveAction(_action); + _action->setProperty("qlementine_flashing", false); + } + _menu->blockSignals(false); + } + if (_onAnimationFinished) { + _onAnimationFinished(); + } + } + } + +private: + static constexpr int flashActionBlinkDuration{ 60 }; // ms + static constexpr int flashActionDuration{ 2 * flashActionBlinkDuration }; // ms + int _flashActionElapsedTime{ 0 }; // ms + int _timerId{ -1 }; + QPointer _menu{ nullptr }; + QPointer _action{ nullptr }; + std::function _onAnimationFinished{}; +}; + +QMenu* getTopLevelMenu(QMenu* menu) { + auto parent = menu; + while (parent != nullptr) { + auto parent_menu = qobject_cast(parent->parentWidget()); + if (parent_menu != nullptr) + parent = parent_menu; + else + break; + } + return parent; +} + +void flashAction(QAction* action, QMenu* menu, const std::function& onAnimationFinished) { + new FlashActionHelper(action, menu, onAnimationFinished); +} +} // namespace oclero::qlementine From eed448db018c72a2896a9708a3c9d1f5e161f631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 1 Nov 2024 19:00:50 +0100 Subject: [PATCH 27/45] Showcase app: add Quit shortcut on Windows --- showcase/src/ShowcaseWindow.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index a5ff648..ccffdb6 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -196,7 +196,13 @@ struct ShowcaseWindow::Impl { makeQIcon(Icons16::Navigation_Settings), "Preferences...", QKeySequence::StandardKey::Preferences, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", QKeySequence::StandardKey::Quit, []() { +#ifdef Q_OS_WIN + // QKeySequence::Quit is empty on Windows. + const auto quitShortcut = QKeySequence(Qt::CTRL | Qt::Key_Q); +#else + const auto quitShortcut = QKeySequence(QKeySequence::Quit); +#endif + menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", quitShortcut, []() { qApp->quit(); }); } From c452d2e56a657f3a9f4285e9ea46c5c9f742e940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 1 Nov 2024 19:05:56 +0100 Subject: [PATCH 28/45] Load qlementine_icons lib for qlementine --- lib/src/style/QlementineStyle.cpp | 1 + sandbox/resources/refresh.svg | 1 - sandbox/resources/sandbox.qrc | 1 - sandbox/src/SandboxWindow.cpp | 56 +++++++++++++++++++------------ sandbox/src/main.cpp | 3 -- showcase/src/main.cpp | 10 ++---- 6 files changed, 39 insertions(+), 33 deletions(-) delete mode 100644 sandbox/resources/refresh.svg diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index e38a27f..beb44e5 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "EventFilters.hpp" diff --git a/sandbox/resources/refresh.svg b/sandbox/resources/refresh.svg deleted file mode 100644 index 2f29c6b..0000000 --- a/sandbox/resources/refresh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sandbox/resources/sandbox.qrc b/sandbox/resources/sandbox.qrc index 3d148a6..7dab1bd 100644 --- a/sandbox/resources/sandbox.qrc +++ b/sandbox/resources/sandbox.qrc @@ -4,7 +4,6 @@ light.json qlementine_icon.ico qlementine_icon.icns - refresh.svg plus_24.svg test_image_16x16.png scene_light.svg diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index d98f327..b5c87a3 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -51,10 +51,16 @@ #include #include #include +#include #include namespace oclero::qlementine::sandbox { +using Icons16 = oclero::qlementine::icons::Icons16; +static QIcon makeQIcon(Icons16 id, const QSize& size = { 16, 16 }) { + return oclero::qlementine::makeThemedIcon(id, size); +} + class ContextMenuEventFilter : public QObject { private: std::function _cb; @@ -337,7 +343,7 @@ struct SandboxWindow::Impl { void setupUI_button() { auto* button = new QPushButton(windowContent); button->setText("Button with a very long text that can be elided"); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); button->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); button->setDefault(true); windowContentLayout->addWidget(button); @@ -355,7 +361,7 @@ struct SandboxWindow::Impl { { // Icon, fixed size auto* button = new QPushButton(windowContent); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); windowContentLayout->addWidget(button); } @@ -363,7 +369,7 @@ struct SandboxWindow::Impl { // Text+Icon, fixed size auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); windowContentLayout->addWidget(button); } @@ -371,7 +377,7 @@ struct SandboxWindow::Impl { // Text+Icon+Menu, fixed size auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); auto* menu = new QMenu(button); @@ -391,21 +397,21 @@ struct SandboxWindow::Impl { { // Icon, expanding size. auto* button = new QPushButton(windowContent); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); windowContentLayout->addWidget(button); } { // Text+Icon, expanding size. auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); windowContentLayout->addWidget(button); } { // Text+Icon+Menu, expanding size auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(QIcon(":/refresh.svg")); + button->setIcon(makeQIcon(Icons16::Action_Save)); auto* menu = new QMenu("ButtonMenu"); for (auto i = 0; i < 3; ++i) { @@ -423,7 +429,7 @@ struct SandboxWindow::Impl { const auto tristate = i > 1; checkbox->setChecked(checked); - checkbox->setIcon(QIcon(":/refresh.svg")); + checkbox->setIcon(makeQIcon(Icons16::Action_Save)); checkbox->setText(QString("%1 checkbox %2 with a very long text").arg(tristate ? "Tristate" : "Normal").arg(i)); checkbox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); checkbox->setTristate(tristate); @@ -437,7 +443,7 @@ struct SandboxWindow::Impl { for (auto i = 0; i < 2; ++i) { auto* radiobutton = new QRadioButton(windowContent); radiobutton->setChecked(true); - radiobutton->setIcon(QIcon(":/refresh.svg")); + radiobutton->setIcon(makeQIcon(Icons16::Action_Save)); radiobutton->setText(QString("RadioButton %1 with a very long text").arg(i)); radiobutton->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); radioGroup->addButton(radiobutton); @@ -587,7 +593,7 @@ struct SandboxWindow::Impl { combobox->setEditable(true); for (auto i = 0; i < 4; ++i) { - combobox->addItem(QIcon(":/refresh.svg"), QString("Editable comboBox item %1").arg(i)); + combobox->addItem(makeQIcon(Icons16::Action_Save), QString("Editable comboBox item %1").arg(i)); } auto* model = qobject_cast(combobox->model()); auto* item = model->item(2); @@ -602,22 +608,29 @@ struct SandboxWindow::Impl { combobox->setFocusPolicy(Qt::StrongFocus); for (auto i = 0; i < 4; ++i) { - combobox->addItem(QIcon(":/refresh.svg"), QString("ComboBox item %1").arg(i)); + combobox->addItem(makeQIcon(Icons16::Action_Save), QString("ComboBox item %1").arg(i)); } windowContentLayout->addWidget(combobox); } } + void setupUI_fontComboBox() { + auto* combobox = new QFontComboBox(windowContent); + combobox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + combobox->setFocusPolicy(Qt::StrongFocus); + windowContentLayout->addWidget(combobox); + } + void setupUI_listView() { auto* listView = new QListWidget(windowContent); listView->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); //listView->setAlternatingRowColors(true); listView->setIconSize(QSize(32, 32)); - for (auto i = 0; i < 6; ++i) { + for (auto i = 0; i < 2; ++i) { auto* item = new QListWidgetItem( - QIcon(":/refresh.svg"), QString("Item #%1 with very long text that can be elided").arg(i), listView); + makeQIcon(Icons16::Action_Save), QString("Item #%1 with very long text that can be elided").arg(i), listView); item->setFlags(item->flags() | Qt::ItemFlag::ItemIsUserCheckable); item->setCheckState(i % 2 ? Qt ::CheckState::Checked : Qt::CheckState::Unchecked); //item->setForeground(i % 2 ? Qt::red : Qt::blue); @@ -778,14 +791,14 @@ struct SandboxWindow::Impl { void setupUI_toolButton() { auto* toolButton = new QToolButton(toolbar); - toolButton->setIcon(QIcon(":/refresh.svg")); + toolButton->setIcon(makeQIcon(Icons16::Action_Save)); toolButton->setText(QString("Button with a very long text that can be elided")); toolButton->setToolButtonStyle(Qt::ToolButtonIconOnly); toolButton->setCheckable(false); toolButton->setChecked(false); { - const auto icon = QIcon(":/refresh.svg"); + const auto icon = makeQIcon(Icons16::Action_Save); auto* subMenu = new QMenu("Menu title", toolButton); toolButton->setMenu(subMenu); subMenu->addAction(icon, "Sub Action 1"); @@ -799,7 +812,7 @@ struct SandboxWindow::Impl { } void setupUI_toolButtonsVariants() { - const auto icon = QIcon(":/refresh.svg"); + const auto icon = makeQIcon(Icons16::Action_Save); toolbar = owner.addToolBar("ToolBar name"); //toolbar->set @@ -1104,7 +1117,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru for (auto i = 0; i < 3; ++i) { auto* item = new QListWidgetItem( - QIcon(":/refresh.svg"), QString("Item #%1 with very long text that can be elided").arg(i), listView); + makeQIcon(Icons16::Action_Save), QString("Item #%1 with very long text that can be elided").arg(i), listView); item->setFlags(item->flags() | Qt::ItemFlag::ItemIsUserCheckable); item->setCheckState(i % 2 ? Qt ::CheckState::Checked : Qt::CheckState::Unchecked); @@ -1122,7 +1135,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru tableView->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); tableView->setColumnCount(columnCount); tableView->setRowCount(rowCount); - QIcon icon(":/refresh.svg"); + auto icon = makeQIcon(Icons16::Action_Save); auto* headerItem = new QTableWidgetItem(icon, "A veeeeeery long header label"); tableView->setHorizontalHeaderItem(0, headerItem); tableView->setSelectionBehavior(QTableView::SelectionBehavior::SelectRows); @@ -1347,7 +1360,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru } void setupUI_navigationBar() { - const QIcon dummyIcon(":/refresh.svg"); + const auto dummyIcon = makeQIcon(Icons16::Action_Save); auto* navBar = new NavigationBar(windowContent); for (auto i = 0; i < 3; ++i) { @@ -1363,7 +1376,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru } void setupUI_switch() { - const QIcon dummyIcon(":/refresh.svg"); + const auto dummyIcon = makeQIcon(Icons16::Action_Save); auto* switchWidget = new Switch(windowContent); switchWidget->setText("Label of the Switch"); switchWidget->setIcon(dummyIcon); @@ -1462,7 +1475,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru } void setupUI_lineEditStatus() { - const QIcon dummyIcon(":/refresh.svg"); + const auto dummyIcon = makeQIcon(Icons16::Action_Save); auto* lineEdit = new LineEdit(windowContent); lineEdit->setText("Label of the Switch"); @@ -1628,6 +1641,7 @@ SandboxWindow::SandboxWindow(QWidget* parent) // _impl->setupUI_lineEditStatus(); // _impl->setupUI_dateTimeEdit(); // _impl->setupUI_contextMenu(); + // _impl->setupUI_fontComboBox(); // _impl->setupUI_switch(); // _impl->setupUI_expander(); diff --git a/sandbox/src/main.cpp b/sandbox/src/main.cpp index 15ab031..01bf2b1 100644 --- a/sandbox/src/main.cpp +++ b/sandbox/src/main.cpp @@ -9,10 +9,8 @@ #include #include "SandboxWindow.hpp" -//#include "CsdWindow.hpp" #define USE_CUSTOM_STYLE 1 -//#define CSD_WINDOW 0 int main(int argc, char* argv[]) { // Must be set before creating a QApplication. @@ -33,7 +31,6 @@ int main(int argc, char* argv[]) { #if USE_CUSTOM_STYLE auto* const style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); - style->setUseMenuForComboBoxPopup(false); style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); style->setThemeJsonPath(QStringLiteral(":/light.json")); qApplication.setStyle(style); diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp index c3c87a2..a8afaba 100644 --- a/showcase/src/main.cpp +++ b/showcase/src/main.cpp @@ -1,7 +1,6 @@ #include #include -#include #include "ShowcaseWindow.hpp" @@ -22,18 +21,15 @@ int main(int argc, char* argv[]) { QCoreApplication::setApplicationVersion("1.0.0"); QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); - // Custom icon theme. - oclero::qlementine::icons::initializeIconTheme(); - QIcon::setThemeName("qlementine"); - - // Set custom QStyle. #if USE_CUSTOM_STYLE + // Custom QStyle. auto* const style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); - style->setUseMenuForComboBoxPopup(false); style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); style->setThemeJsonPath(QStringLiteral(":/light.json")); qApplication.setStyle(style); + // Custom icon theme. + QIcon::setThemeName("qlementine"); #endif auto window = std::make_unique(); From 716d9a01e2fff7abfbbf5dc5c17651265f6bf380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Fri, 1 Nov 2024 19:16:47 +0100 Subject: [PATCH 29/45] Fix initialization of qlementine_icons resources --- lib/src/style/QlementineStyle.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index beb44e5..fae7c86 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -263,6 +263,7 @@ QlementineStyle::QlementineStyle(QObject* parent) : _impl(new QlementineStyleImpl{ *this }) { setParent(parent); setObjectName(QStringLiteral("QlementineStyle")); + oclero::qlementine::icons::initializeIconTheme(); } QlementineStyle::~QlementineStyle() = default; @@ -442,8 +443,8 @@ void QlementineStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption* opt const auto rect = opt->rect; const auto penColor = Qt::red; // _impl->theme.borderColor; const auto penWidth = _impl->theme.borderWidth; - const auto p1 = QPoint{rect.x() + 1 + penWidth, rect.y() + rect.x()}; - const auto p2 = QPoint{rect.x() + 1 + penWidth, rect.y() + rect.height()}; + const auto p1 = QPoint{ rect.x() + 1 + penWidth, rect.y() + rect.x() }; + const auto p2 = QPoint{ rect.x() + 1 + penWidth, rect.y() + rect.height() }; p->setPen(QPen(penColor, penWidth, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); p->setBrush(Qt::NoBrush); p->drawLine(p1, p2); From d2256617ea3414335f2b7ac72f1068de0389a65d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sat, 2 Nov 2024 10:43:57 +0100 Subject: [PATCH 30/45] Fix #61: no character delay --- lib/src/style/QlementineStyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index fae7c86..9044213 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -4502,7 +4502,7 @@ int QlementineStyle::styleHint(StyleHint sh, const QStyleOption* opt, const QWid case SH_LineEdit_PasswordCharacter: return QChar(0x2022).unicode(); // Bullet. case SH_LineEdit_PasswordMaskDelay: - return 200; + return 0; // FocusFrame case SH_FocusFrame_AboveWidget: From 3fb2271f32c2375c8c9217f0091af8a38e4b663d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 3 Nov 2024 18:37:01 +0100 Subject: [PATCH 31/45] fix #30: QComboBox popup frame/shadow/border --- .../qlementine/style/QlementineStyle.hpp | 6 -- lib/src/style/Delegates.cpp | 14 ++-- lib/src/style/EventFilters.cpp | 42 ++++++++-- lib/src/style/EventFilters.hpp | 9 +- lib/src/style/QlementineStyle.cpp | 82 +++++++++---------- sandbox/src/SandboxWindow.cpp | 5 +- 6 files changed, 90 insertions(+), 68 deletions(-) diff --git a/lib/include/oclero/qlementine/style/QlementineStyle.hpp b/lib/include/oclero/qlementine/style/QlementineStyle.hpp index d039cb9..dbb3419 100644 --- a/lib/include/oclero/qlementine/style/QlementineStyle.hpp +++ b/lib/include/oclero/qlementine/style/QlementineStyle.hpp @@ -21,8 +21,6 @@ class QlementineStyle : public QCommonStyle { Q_OBJECT Q_PROPERTY(bool animationsEnabled READ animationsEnabled WRITE setAnimationsEnabled NOTIFY animationsEnabledChanged) - Q_PROPERTY(bool useMenuForComboBoxPopup READ useMenuForComboBoxPopup WRITE setUseMenuForComboBoxPopup NOTIFY - useMenuForComboBoxPopupChanged) public: enum class StandardPixmapExt { @@ -61,10 +59,6 @@ class QlementineStyle : public QCommonStyle { void setAnimationsEnabled(bool enabled); Q_SIGNAL void animationsEnabledChanged(); - bool useMenuForComboBoxPopup() const; - void setUseMenuForComboBoxPopup(bool useMenu); - Q_SIGNAL void useMenuForComboBoxPopupChanged(); - void triggerCompleteRepaint(); void setAutoIconColor(AutoIconColor autoIconColor); diff --git a/lib/src/style/Delegates.cpp b/lib/src/style/Delegates.cpp index 3c3aa3f..863976d 100644 --- a/lib/src/style/Delegates.cpp +++ b/lib/src/style/Delegates.cpp @@ -21,8 +21,11 @@ void ComboBoxDelegate::paint(QPainter* p, const QStyleOptionViewItem& opt, const const auto& theme = _qlementineStyle ? _qlementineStyle->theme() : Theme{}; const auto isSeparator = idx.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("separator"); + const auto contentMargin = _qlementineStyle->pixelMetric(QStyle::PM_MenuHMargin); + const auto contentRect = opt.rect.marginsRemoved({ contentMargin, 0, contentMargin, 0 }); + if (isSeparator) { - const auto& rect = opt.rect; + const auto& rect = contentRect; const auto& color = _qlementineStyle ? _qlementineStyle->toolBarSeparatorColor() : Theme().secondaryAlternativeColorDisabled; const auto lineW = theme.borderWidth; @@ -37,11 +40,11 @@ void ComboBoxDelegate::paint(QPainter* p, const QStyleOptionViewItem& opt, const const auto mouse = getMenuItemMouseState(opt.state); // Background. + const auto& bgRect = contentRect; const auto hPadding = theme.spacing; - const auto& bgRect = opt.rect; const auto& bgColor = _qlementineStyle ? _qlementineStyle->menuItemBackgroundColor(mouse) : Theme().primaryColorTransparent; - constexpr auto radius = 0; + const auto radius = _qlementineStyle->theme().borderRadius - contentMargin / 2; p->setRenderHint(QPainter::Antialiasing, true); p->setPen(Qt::NoPen); p->setBrush(bgColor); @@ -128,8 +131,9 @@ QSize ComboBoxDelegate::sizeHint(const QStyleOptionViewItem& opt, const QModelIn const auto h = theme.spacing + theme.borderWidth; return QSize{ h, h }; } else { + const auto contentMargin = _qlementineStyle->pixelMetric(QStyle::PM_MenuHMargin); const auto hPadding = theme.spacing; - const auto vPadding = theme.spacing / 2; + const auto vPadding = theme.spacing; const auto iconSize = theme.iconSize; const auto spacing = theme.spacing; const auto& fm = opt.fontMetrics; @@ -142,7 +146,7 @@ QSize ComboBoxDelegate::sizeHint(const QStyleOptionViewItem& opt, const QModelIn iconVariant.isValid() && iconVariant.userType() == QMetaType::QIcon ? iconVariant.value() : QIcon{}; const auto textW = qlementine::textWidth(fm, text); const auto iconW = !icon.isNull() ? iconSize.width() + spacing : 0; - const auto w = std::max(0, hPadding + iconW + textW + hPadding); + const auto w = std::max(0, contentMargin * 2 + hPadding + iconW + textW + hPadding); const auto h = std::max(theme.controlHeightMedium, std::max(iconSize.height(), vPadding) + vPadding); return QSize{ w, h }; } diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index f4d9e54..df1d9fc 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -21,6 +22,9 @@ #include #include #include +#include +#include +#include namespace oclero::qlementine { LineEditButtonEventFilter::LineEditButtonEventFilter( @@ -353,22 +357,47 @@ bool MenuEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) { return QObject::eventFilter(watchedObject, evt); } -ComboboxItemViewFilter::ComboboxItemViewFilter(QAbstractItemView* view) +ComboboxItemViewFilter::ComboboxItemViewFilter(QComboBox* comboBox, QListView* view) : QObject(view) + , _comboBox(comboBox) , _view(view) { - view->installEventFilter(this); + _view->installEventFilter(this); + _view->parentWidget()->installEventFilter(this); + _comboBox->installEventFilter(this); } bool ComboboxItemViewFilter::eventFilter(QObject* watchedObject, QEvent* evt) { const auto type = evt->type(); - if (type == QEvent::Type::Show) { - // Fix Qt bug. - const auto width = _view->sizeHintForColumn(0); - _view->setMinimumWidth(width); + switch (type) { + case QEvent::Type::Show: + fixViewGeometry(); + break; + case QEvent::Type::Resize: + if (watchedObject == _comboBox) { + fixViewGeometry(); + } + break; + default: + break; } return QObject::eventFilter(watchedObject, evt); } +void ComboboxItemViewFilter::fixViewGeometry() { + const auto* comboBox = findFirstParentOfType(_view); + const auto* qlementineStyle = qobject_cast(comboBox->style()); + const auto contentMargin = qlementineStyle->pixelMetric(QStyle::PM_MenuHMargin); + const auto shadowWidth = qlementineStyle->theme().spacing; + const auto borderWidth = qlementineStyle->theme().borderWidth; + const auto width = + std::max(comboBox->width(), _view->sizeHintForColumn(0) + shadowWidth * 2) + contentMargin * 2 + borderWidth * 2; + const auto scrollButtonHeight = qlementineStyle->pixelMetric(QStyle::PM_MenuTearoffHeight); + const auto height = _view->minimumSizeHint().height() + scrollButtonHeight * 2; + _view->setFixedWidth(width); + _view->setFixedHeight(height); + _view->parentWidget()->adjustSize(); +} + TextEditEventFilter::TextEditEventFilter(QAbstractScrollArea* textEdit) : QObject(textEdit) , _textEdit(textEdit) {} @@ -548,5 +577,4 @@ bool LineEditMenuEventFilter::eventFilter(QObject*, QEvent* evt) { return false; } - } // namespace oclero::qlementine diff --git a/lib/src/style/EventFilters.hpp b/lib/src/style/EventFilters.hpp index cf3f836..815881e 100644 --- a/lib/src/style/EventFilters.hpp +++ b/lib/src/style/EventFilters.hpp @@ -8,7 +8,8 @@ #include #include -#include +#include +#include #include class QFocusFrame; @@ -73,12 +74,14 @@ class MenuEventFilter : public QObject { class ComboboxItemViewFilter : public QObject { public: - ComboboxItemViewFilter(QAbstractItemView* view); + ComboboxItemViewFilter(QComboBox* comboBox, QListView* view); bool eventFilter(QObject* watchedObject, QEvent* evt) override; private: - QAbstractItemView* _view{ nullptr }; + void fixViewGeometry(); + QComboBox* _comboBox{ nullptr }; + QListView* _view{ nullptr }; }; // Works for both QTextEdit and QPlainTextEdit diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 9044213..28a6eab 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -255,7 +255,6 @@ struct QlementineStyleImpl { WidgetAnimationManager animations; std::unordered_map standardIconCache; std::unordered_map standardIconExtCache; - bool useMenuForComboBoxPopup{ false }; AutoIconColor autoIconColor{ AutoIconColor::None }; }; @@ -298,17 +297,6 @@ void QlementineStyle::setAnimationsEnabled(bool enabled) { } } -bool QlementineStyle::useMenuForComboBoxPopup() const { - return _impl->useMenuForComboBoxPopup; -} - -void QlementineStyle::setUseMenuForComboBoxPopup(bool useMenu) { - if (useMenu != _impl->useMenuForComboBoxPopup) { - _impl->useMenuForComboBoxPopup = useMenu; - emit useMenuForComboBoxPopupChanged(); - } -} - void QlementineStyle::triggerCompleteRepaint() { _impl->updateFonts(); _impl->updatePalette(); @@ -438,10 +426,8 @@ void QlementineStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption* opt case PE_FrameMenu: return; // Let PE_PanelMenu do the drawing. case PE_FrameStatusBarItem: { - // p->fillRect(opt->rect, Qt::red); - const auto rect = opt->rect; - const auto penColor = Qt::red; // _impl->theme.borderColor; + const auto penColor = _impl->theme.borderColor; const auto penWidth = _impl->theme.borderWidth; const auto p1 = QPoint{ rect.x() + 1 + penWidth, rect.y() + rect.x() }; const auto p2 = QPoint{ rect.x() + 1 + penWidth, rect.y() + rect.height() }; @@ -3329,8 +3315,17 @@ QRect QlementineStyle::subControlRect( const auto frameY = comboBoxOpt->rect.y() + (comboBoxOpt->rect.height() - frameH) / 2; return QRect{ frameX, frameY, frameW, frameH }; } break; - case SC_ComboBoxListBoxPopup: - return opt->rect; + case SC_ComboBoxListBoxPopup: { + const auto contentMarginH = pixelMetric(PM_MenuHMargin); + const auto contentMarginV = pixelMetric(PM_MenuVMargin); + const auto shadowWidth = _impl->theme.spacing; + const auto borderWidth = _impl->theme.borderWidth; + const auto width = std::max(opt->rect.width(), w->width()); + const auto height = opt->rect.height() + 12; // Not possible to change height here. + const auto x = opt->rect.x() - shadowWidth - borderWidth - contentMarginH; + const auto y = opt->rect.y() - shadowWidth - borderWidth - contentMarginV / 2; // TODO remove hardcoded + return { x, y, width, height }; + } break; default: break; } @@ -4101,9 +4096,11 @@ int QlementineStyle::pixelMetric(PixelMetric m, const QStyleOption* opt, const Q // Scroller is the part where the user can click to scroll the menu when it is too big. return _impl->theme.controlHeightSmall; case PM_MenuHMargin: - case PM_MenuVMargin: + case PM_MenuVMargin: { // Keep some space between the items and the frame. - return _impl->theme.spacing; + const auto borderW = qobject_cast(w) ? 1 : 0; + return _impl->theme.spacing / 2 + borderW; + } case PM_MenuPanelWidth: // Keep some space for drop shadow. return _impl->theme.spacing; @@ -4384,17 +4381,13 @@ int QlementineStyle::styleHint(StyleHint sh, const QStyleOption* opt, const QWid case SH_ComboBox_ListMouseTracking: return true; case SH_ComboBox_Popup: - // This changes the way the dropdown popup behaves. - // A different QItemDelegate will be used to size/draw the items. - // - true: not animated, uses QComboBoxMenuDelegate, that calls QStyle::drawControl(CE_MenuItem) - // - false: animated, uses QComboBoxDelegate, that just calls QItemDelegate::sizeHint()/paint() - return _impl->useMenuForComboBoxPopup; + return true; case SH_ComboBox_LayoutDirection: break; case SH_ComboBox_PopupFrameStyle: return QFrame::StyledPanel | QFrame::Plain; - case SH_ComboBox_UseNativePopup: // Only on MacOS. - return true; + case SH_ComboBox_UseNativePopup: + return false; case SH_ComboBox_AllowWheelScrolling: return false; @@ -4827,25 +4820,26 @@ void QlementineStyle::polish(QWidget* w) { } // Try to remove the background... - if (auto* itemView = qobject_cast(w)) { - auto* parent = itemView->parentWidget(); - auto isComboBoxPopupContainer = parent && parent->inherits("QComboBoxPrivateContainer"); + if (auto* itemView = qobject_cast(w)) { + auto* popup = itemView->parentWidget(); + auto isComboBoxPopupContainer = popup && popup->inherits("QComboBoxPrivateContainer"); if (isComboBoxPopupContainer) { - itemView->setBackgroundRole(QPalette::NoRole); - itemView->viewport()->setBackgroundRole(QPalette::NoRole); - parent->setBackgroundRole(QPalette::NoRole); - parent->setAutoFillBackground(false); - parent->setAttribute(Qt::WA_TranslucentBackground, true); - parent->setAttribute(Qt::WA_OpaquePaintEvent, false); - parent->setAttribute(Qt::WA_NoSystemBackground, true); - itemView->installEventFilter(new ComboboxItemViewFilter(itemView)); - if (auto* scrollArea = parent->findChild()) { - scrollArea->setBackgroundRole(QPalette::NoRole); - scrollArea->setAutoFillBackground(false); - scrollArea->setAttribute(Qt::WA_TranslucentBackground, true); - scrollArea->setAttribute(Qt::WA_OpaquePaintEvent, false); - scrollArea->setAttribute(Qt::WA_NoSystemBackground, true); - } + popup->setAttribute(Qt::WA_TranslucentBackground, true); + popup->setAttribute(Qt::WA_OpaquePaintEvent, false); + popup->setAttribute(Qt::WA_NoSystemBackground, true); + popup->setWindowFlag(Qt::FramelessWindowHint, true); + popup->setWindowFlag(Qt::NoDropShadowWindowHint, true); + popup->setProperty("_q_windowsDropShadow", false); + + // Same shadow as QMenu. + const auto shadowWidth = _impl->theme.spacing; + const auto borderWidth = _impl->theme.borderWidth; + const auto margin = shadowWidth + borderWidth; + popup->layout()->setContentsMargins(margin, margin, margin, margin); + + itemView->viewport()->setAutoFillBackground(false); + auto* comboBox = findFirstParentOfType(itemView); + itemView->installEventFilter(new ComboboxItemViewFilter(comboBox, itemView)); } } diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index b5c87a3..efad4a1 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -604,7 +604,7 @@ struct SandboxWindow::Impl { // Non-editable { auto* combobox = new QComboBox(windowContent); - combobox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + combobox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); combobox->setFocusPolicy(Qt::StrongFocus); for (auto i = 0; i < 4; ++i) { @@ -640,7 +640,6 @@ struct SandboxWindow::Impl { windowContentLayout->addWidget(listView); // Context menu. - qDebug() << listView->contextMenuPolicy(); listView->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); QObject::connect(listView, &QListView::customContextMenuRequested, listView, [listView](const QPoint& pos) { if (const auto item = listView->itemAt(pos)) { @@ -748,7 +747,7 @@ struct SandboxWindow::Impl { auto* menuBar = owner.menuBar(); // NB: it looks like MacOS' native menu bar has an issue with QIcon, so we have to force // it to generate icons for High-DPI screens. - const auto icon = makeIconFromSvg(":/refresh.svg", owner.iconSize()); + const auto icon = makeQIcon(Icons16::Action_Save); for (auto i = 0; i < 5; ++i) { auto* menu = menuBar->addMenu(QString("Menu &%1").arg(i)); From 0e7a6603167e506b48259c83c3726049ec9ea2ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 3 Nov 2024 18:42:00 +0100 Subject: [PATCH 32/45] Remove config from CMake preset --- CMakePresets.json | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 519cf58..2ae3f20 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -54,9 +54,8 @@ "name": "macos", "displayName": "macOS", "configurePreset": "macos", - "description": "Release build with Xcode for macOS", + "description": "Build with Xcode for macOS", "targets": ["qlementine"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -67,9 +66,8 @@ "name": "macos-sandbox", "displayName": "Sandbox for macOS", "configurePreset": "macos", - "description": "Sandbox - Release build with Xcode for macOS", + "description": "Sandbox - Build with Xcode for macOS", "targets": ["sandbox"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -80,9 +78,8 @@ "name": "macos-showcase", "displayName": "Showcase for macOS", "configurePreset": "macos", - "description": "Showcase - Release build with Xcode for macOS", + "description": "Showcase - Build with Xcode for macOS", "targets": ["showcase"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -93,9 +90,8 @@ "name": "windows", "displayName": "Windows", "configurePreset": "windows", - "description": "Release build with Visual Studio for Windows", + "description": "Build with Visual Studio for Windows", "targets": ["qlementine"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -106,9 +102,8 @@ "name": "windows-sandbox", "displayName": "Sandbox for Windows", "configurePreset": "windows", - "description": "Sandbox - Release build with Visual Studio for Windows", + "description": "Sandbox - Build with Visual Studio for Windows", "targets": ["sandbox"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -119,9 +114,8 @@ "name": "windows-showcase", "displayName": "Showcase for Windows", "configurePreset": "windows", - "description": "Showcase - Release build with Visual Studio for Windows", + "description": "Showcase - Build with Visual Studio for Windows", "targets": ["showcase"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -132,9 +126,8 @@ "name": "linux", "displayName": "Linux", "configurePreset": "linux", - "description": "Release build for Linux", + "description": "Build for Linux", "targets": ["qlementine"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -145,9 +138,8 @@ "name": "linux-sandbox", "displayName": "Sandbox for Linux", "configurePreset": "linux", - "description": "Sandbox - Release build for Linux", + "description": "Sandbox - Build for Linux", "targets": ["sandbox"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -158,9 +150,8 @@ "name": "linux-showcase", "displayName": "Showcase for Linux", "configurePreset": "linux", - "description": "Showcase - Release build for Linux", + "description": "Showcase - Build for Linux", "targets": ["showcase"], - "configuration": "Release", "condition": { "type": "equals", "lhs": "${hostSystemName}", From 601798b882735480d0db2cd5fd3769e87ac4e98a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 10 Nov 2024 12:44:52 +0100 Subject: [PATCH 33/45] Fix QTabBar scroll --- lib/src/style/EventFilters.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index df1d9fc..0162ce7 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -240,12 +240,20 @@ bool TabBarEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) { _tabBar->setIconSize(_tabBar->iconSize()); } else if (type == QEvent::Wheel) { const auto* wheelEvent = static_cast(evt); + + // Block non-horizontal scorll. + const bool wheelVertical = qAbs(wheelEvent->angleDelta().y()) > qAbs(wheelEvent->angleDelta().x()); + if (wheelVertical) { + evt->ignore(); + return true; + } + auto delta = wheelEvent->pixelDelta().x(); // If delta is null, it might be because we are on MacOS, using a trackpad. // So let's use angleDelta instead. if (delta == 0) { - delta = wheelEvent->angleDelta().y(); + delta = wheelEvent->angleDelta().x(); } // Invert the value if necessary. From d09410b53005c3fe2930d07c5e662621e6467926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Mon, 11 Nov 2024 18:22:19 +0100 Subject: [PATCH 34/45] Fix QLineEdit "clear" button foreground color when changing theme --- lib/src/style/EventFilters.cpp | 35 +++++++++++++++++++++++-------- lib/src/style/EventFilters.hpp | 5 +++-- lib/src/style/QlementineStyle.cpp | 2 +- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index 0162ce7..a47d070 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -28,7 +28,7 @@ namespace oclero::qlementine { LineEditButtonEventFilter::LineEditButtonEventFilter( - QlementineStyle& style, WidgetAnimationManager& animManager, QToolButton* button) + QlementineStyle* style, WidgetAnimationManager& animManager, QToolButton* button) : QObject(button) , _style(style) , _animManager(animManager) @@ -53,7 +53,7 @@ bool LineEditButtonEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) // Instead, place the button by ourselves. const auto* parentLineEdit = _button->parentWidget(); const auto parentRect = parentLineEdit->rect(); - const auto& theme = _style.theme(); + const auto& theme = _style ? _style->theme() : Theme{}; const auto buttonH = theme.controlHeightMedium; const auto buttonW = buttonH; const auto spacing = theme.spacing / 2; @@ -72,29 +72,46 @@ bool LineEditButtonEventFilter::eventFilter(QObject* watchedObject, QEvent* evt) const auto hovered = _button->underMouse(); const auto pressed = _button->isDown(); const auto mouse = getMouseState(pressed, hovered, enabled); - const auto& theme = _style.theme(); + const auto& theme = _style ? _style->theme() : Theme{}; const auto rect = _button->rect(); - const auto& bgColor = _style.toolButtonBackgroundColor(mouse, ColorRole::Secondary); + + const auto& bgColor = + _style ? _style->toolButtonBackgroundColor(mouse, ColorRole::Secondary) + : _button->style()->standardPalette().color(getPaletteColorGroup(mouse), QPalette::ColorRole::ButtonText); + const auto& fgColor = + _style ? _style->toolButtonForegroundColor(mouse, ColorRole::Secondary) + : _button->style()->standardPalette().color(getPaletteColorGroup(mouse), QPalette::ColorRole::Button); + const auto animationDuration = _style ? _style->theme().animationDuration : 0; + const auto& currentBgColor = _animManager.animateBackgroundColor(_button, bgColor, animationDuration); + const auto& currentFgColor = _animManager.animateForegroundColor(_button, fgColor, animationDuration); + + // Get opacity animated in qlinedit_p.cpp:436 + const auto opacity = _button->property(QByteArrayLiteral("opacity")).toDouble(); + const auto circleH = theme.controlHeightMedium; const auto circleW = circleH; const auto circleX = rect.x() + (rect.width() - circleW) / 2; const auto circleY = rect.y() + (rect.height() - circleH) / 2; const auto circleRect = QRect(QPoint{ circleX, circleY }, QSize{ circleW, circleH }); - // Get opacity animated in qlinedit_p.cpp:436 - const auto opacity = _button->property(QByteArrayLiteral("opacity")).toDouble(); + const auto pixmap = getPixmap(_button->icon(), theme.iconSize, mouse, CheckState::NotChecked, _button); + const auto autoIconColor = _style ? _style->autoIconColor(_button) : AutoIconColor::None; + const auto& colorizedPixmap = _style->getColorizedPixmap(pixmap, autoIconColor, currentFgColor, currentFgColor); const auto pixmapX = circleRect.x() + (circleRect.width() - theme.iconSize.width()) / 2; const auto pixmapY = circleRect.y() + (circleRect.height() - theme.iconSize.height()) / 2; const auto pixmapRect = QRect{ { pixmapX, pixmapY }, theme.iconSize }; - const auto& currentBgColor = _animManager.animateBackgroundColor(_button, bgColor, theme.animationDuration); QPainter p(_button); p.setOpacity(opacity); p.setPen(Qt::NoPen); - p.setBrush(currentBgColor); p.setRenderHint(QPainter::Antialiasing, true); + + // Background. + p.setBrush(currentBgColor); p.drawEllipse(circleRect); - p.drawPixmap(pixmapRect, pixmap); + + // Foreground. + p.drawPixmap(pixmapRect, colorizedPixmap); evt->accept(); return true; diff --git a/lib/src/style/EventFilters.hpp b/lib/src/style/EventFilters.hpp index 815881e..7246b05 100644 --- a/lib/src/style/EventFilters.hpp +++ b/lib/src/style/EventFilters.hpp @@ -11,18 +11,19 @@ #include #include #include +#include class QFocusFrame; namespace oclero::qlementine { class LineEditButtonEventFilter : public QObject { public: - LineEditButtonEventFilter(QlementineStyle& style, WidgetAnimationManager& animManager, QToolButton* button); + LineEditButtonEventFilter(QlementineStyle* style, WidgetAnimationManager& animManager, QToolButton* button); bool eventFilter(QObject* watchedObject, QEvent* evt) override; private: - QlementineStyle& _style; + QPointer _style; WidgetAnimationManager& _animManager; QToolButton* _button{ nullptr }; }; diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 28a6eab..11feaac 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -4766,7 +4766,7 @@ void QlementineStyle::polish(QWidget* w) { // Special case for the Qt-private buttons in a QLineEdit. if (w->inherits("QLineEditIconButton")) { - w->installEventFilter(new LineEditButtonEventFilter(*this, _impl->animations, qobject_cast(w))); + w->installEventFilter(new LineEditButtonEventFilter(this, _impl->animations, qobject_cast(w))); w->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); // Fix hardcoded width in qlineedit_p.cpp:493 w->setFixedSize(_impl->theme.controlHeightMedium, _impl->theme.controlHeightMedium); From 7e8250303186c2120df6e184510e6557f1d8527f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Mon, 11 Nov 2024 18:26:39 +0100 Subject: [PATCH 35/45] Attempt to fix QComboBox popup height --- lib/src/style/EventFilters.cpp | 35 +++++++++++++++++++++++++++++----- lib/src/style/EventFilters.hpp | 1 + 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index a47d070..48cf372 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -387,7 +387,18 @@ ComboboxItemViewFilter::ComboboxItemViewFilter(QComboBox* comboBox, QListView* v , _comboBox(comboBox) , _view(view) { _view->installEventFilter(this); - _view->parentWidget()->installEventFilter(this); + + auto* comboBoxPopup = _view->parentWidget(); + comboBoxPopup->installEventFilter(this); + + const auto childWidgets = comboBoxPopup->findChildren(); + for (auto* child : childWidgets) { + if (child->inherits("QComboBoxPrivateScroller")) { + child->setFixedHeight(0); + child->setVisible(false); + } + } + _comboBox->installEventFilter(this); } @@ -411,18 +422,32 @@ bool ComboboxItemViewFilter::eventFilter(QObject* watchedObject, QEvent* evt) { void ComboboxItemViewFilter::fixViewGeometry() { const auto* comboBox = findFirstParentOfType(_view); const auto* qlementineStyle = qobject_cast(comboBox->style()); - const auto contentMargin = qlementineStyle->pixelMetric(QStyle::PM_MenuHMargin); + const auto hMargin = qlementineStyle->pixelMetric(QStyle::PM_MenuHMargin); const auto shadowWidth = qlementineStyle->theme().spacing; const auto borderWidth = qlementineStyle->theme().borderWidth; const auto width = - std::max(comboBox->width(), _view->sizeHintForColumn(0) + shadowWidth * 2) + contentMargin * 2 + borderWidth * 2; - const auto scrollButtonHeight = qlementineStyle->pixelMetric(QStyle::PM_MenuTearoffHeight); - const auto height = _view->minimumSizeHint().height() + scrollButtonHeight * 2; + std::max(comboBox->width(), _view->sizeHintForColumn(0) + shadowWidth * 2) + hMargin * 2 + borderWidth * 2; + const auto height = viewMinimumSizeHint().height(); _view->setFixedWidth(width); _view->setFixedHeight(height); _view->parentWidget()->adjustSize(); } +QSize ComboboxItemViewFilter::viewMinimumSizeHint() const { + // QListView::minimumSizeHint() doesn't give the correct minimumHeight, + // so we have to compute it. + const auto rowCount = _view->model()->rowCount(); + const auto maxHeight = _view->maximumHeight(); + auto height = 0; + for (auto i = 0; i < rowCount && height <= maxHeight; ++i) { + const auto rowSizeHint = _view->sizeHintForRow(i); + height = std::min(maxHeight, height + rowSizeHint); + } + // It looks like it is OK for the width, though. + const auto width = _view->sizeHintForColumn(0); + return { width, height }; +} + TextEditEventFilter::TextEditEventFilter(QAbstractScrollArea* textEdit) : QObject(textEdit) , _textEdit(textEdit) {} diff --git a/lib/src/style/EventFilters.hpp b/lib/src/style/EventFilters.hpp index 7246b05..a863647 100644 --- a/lib/src/style/EventFilters.hpp +++ b/lib/src/style/EventFilters.hpp @@ -81,6 +81,7 @@ class ComboboxItemViewFilter : public QObject { private: void fixViewGeometry(); + QSize viewMinimumSizeHint() const; QComboBox* _comboBox{ nullptr }; QListView* _view{ nullptr }; }; From d2f70b85ffe99e96d447c92462949671e479f1e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Mon, 11 Nov 2024 18:30:42 +0100 Subject: [PATCH 36/45] Improve support of ThemeManager and theme switching --- lib/include/oclero/qlementine/style/Theme.hpp | 113 +++--- .../oclero/qlementine/style/ThemeManager.hpp | 4 +- lib/src/style/QlementineStyle.cpp | 9 +- lib/src/style/Theme.cpp | 349 ++++++++++-------- lib/src/style/ThemeManager.cpp | 54 ++- lib/src/tools/ThemeEditor.cpp | 8 +- showcase/src/main.cpp | 18 +- 7 files changed, 311 insertions(+), 244 deletions(-) diff --git a/lib/include/oclero/qlementine/style/Theme.hpp b/lib/include/oclero/qlementine/style/Theme.hpp index 069a65c..b2892b2 100644 --- a/lib/include/oclero/qlementine/style/Theme.hpp +++ b/lib/include/oclero/qlementine/style/Theme.hpp @@ -3,6 +3,8 @@ #pragma once +#include + #include #include @@ -32,8 +34,9 @@ struct ThemeMeta { class Theme { public: // Ctor. Theme(); - Theme(QString const& jsonPath); - explicit Theme(QJsonDocument const& jsonDoc); + + static std::optional fromJsonPath(const QString& jsonPath); + static std::optional fromJsonDoc(const QJsonDocument& jsonDoc); Theme(Theme const& other) = default; Theme(Theme&& other) = default; @@ -48,89 +51,89 @@ class Theme { public: // Values. ThemeMeta meta; - QColor backgroundColorMain1{ 0xFFFFFF }; - QColor backgroundColorMain2{ 0xF3F3F3 }; - QColor backgroundColorMain3{ 0xE3E3E3 }; - QColor backgroundColorMain4{ 0xDCDCDC }; - QColor backgroundColorMainTransparent{ QRgba64::fromArgb32(0x00FAFAFA) }; + QColor backgroundColorMain1{ 0xffffff }; + QColor backgroundColorMain2{ 0xf3f3f3 }; + QColor backgroundColorMain3{ 0xe3e3e3 }; + QColor backgroundColorMain4{ 0xdcdcdc }; + QColor backgroundColorMainTransparent{ QRgba64::fromArgb32(0x00fafafa) }; - QColor neutralColor{ 0xE1E1E1 }; - QColor neutralColorHovered{ 0xDADADA }; - QColor neutralColorPressed{ 0xD2D2D2 }; - QColor neutralColorDisabled{ 0xEEEEEE }; + QColor neutralColor{ 0xe1e1e1 }; + QColor neutralColorHovered{ 0xdadada }; + QColor neutralColorPressed{ 0xd2d2d2 }; + QColor neutralColorDisabled{ 0xeeeeee }; QColor neutralColorTransparent{ QRgba64::fromArgb32(0x00E1E1E1) }; QColor focusColor{ QRgba64::fromArgb32(0x6640a9ff) }; - QColor primaryColor{ 0x1890FF }; - QColor primaryColorHovered{ 0x2C9DFF }; - QColor primaryColorPressed{ 0x40A9FF }; - QColor primaryColorDisabled{ 0xD1E9FF }; + QColor primaryColor{ 0x1890ff }; + QColor primaryColorHovered{ 0x2c9dff }; + QColor primaryColorPressed{ 0x40a9ff }; + QColor primaryColorDisabled{ 0xd1e9ff }; QColor primaryColorTransparent{ QRgba64::fromArgb32(0x001890FF) }; - QColor primaryColorForeground{ 0xFFFFFF }; - QColor primaryColorForegroundHovered{ 0xFFFFFF }; - QColor primaryColorForegroundPressed{ 0xFFFFFF }; - QColor primaryColorForegroundDisabled{ 0xECF6FF }; - QColor primaryColorForegroundTransparent{ QRgba64::fromArgb32(0x00FFFFFF) }; + QColor primaryColorForeground{ 0xffffff }; + QColor primaryColorForegroundHovered{ 0xffffff }; + QColor primaryColorForegroundPressed{ 0xffffff }; + QColor primaryColorForegroundDisabled{ 0xecf6ff }; + QColor primaryColorForegroundTransparent{ QRgba64::fromArgb32(0x00ffffff) }; - QColor primaryAlternativeColor{ 0x106EF9 }; - QColor primaryAlternativeColorHovered{ 0x0F7BFD }; - QColor primaryAlternativeColorPressed{ 0x0F8BFD }; + QColor primaryAlternativeColor{ 0x106ef9 }; + QColor primaryAlternativeColorHovered{ 0x107bfd }; + QColor primaryAlternativeColorPressed{ 0x108bfd }; QColor primaryAlternativeColorDisabled{ 0xa9d6ff }; QColor primaryAlternativeColorTransparent{ QRgba64::fromArgb32(0x001875ff) }; QColor secondaryColor{ 0x404040 }; QColor secondaryColorHovered{ 0x333333 }; QColor secondaryColorPressed{ 0x262626 }; - QColor secondaryColorDisabled{ 0xD4D4D4 }; + QColor secondaryColorDisabled{ 0xd4d4d4 }; QColor secondaryColorTransparent{ QRgba64::fromArgb32(0x00404040) }; - QColor secondaryColorForeground{ 0xFFFFFF }; - QColor secondaryColorForegroundHovered{ 0xFFFFFF }; - QColor secondaryColorForegroundPressed{ 0xFFFFFF }; - QColor secondaryColorForegroundDisabled{ 0xEDEDED }; - QColor secondaryColorForegroundTransparent{ QRgba64::fromArgb32(0x00FFFFFF) }; + QColor secondaryColorForeground{ 0xffffff }; + QColor secondaryColorForegroundHovered{ 0xffffff }; + QColor secondaryColorForegroundPressed{ 0xffffff }; + QColor secondaryColorForegroundDisabled{ 0xededed }; + QColor secondaryColorForegroundTransparent{ QRgba64::fromArgb32(0x00ffffff) }; QColor secondaryAlternativeColor{ 0x909090 }; QColor secondaryAlternativeColorHovered{ 0x747474 }; QColor secondaryAlternativeColorPressed{ 0x828282 }; - QColor secondaryAlternativeColorDisabled{ 0xC3C3C3 }; + QColor secondaryAlternativeColorDisabled{ 0xc3c3c3 }; QColor secondaryAlternativeColorTransparent{ QRgba64::fromArgb32(0x00909090) }; - QColor statusColorSuccess{ 0x2BB5A0 }; - QColor statusColorSuccessHovered{ 0x3CBFAB }; - QColor statusColorSuccessPressed{ 0x4ECDB9 }; - QColor statusColorSuccessDisabled{ 0xD5F0EC }; - QColor statusColorInfo{ 0x1BA8D5 }; - QColor statusColorInfoHovered{ 0x1EB5E5 }; + QColor statusColorSuccess{ 0x2bb5a0 }; + QColor statusColorSuccessHovered{ 0x3cbfab }; + QColor statusColorSuccessPressed{ 0x4ecdb9 }; + QColor statusColorSuccessDisabled{ 0xd5f0ec }; + QColor statusColorInfo{ 0x1ba8d5 }; + QColor statusColorInfoHovered{ 0x1eb5e5 }; QColor statusColorInfoPressed{ 0x29c0f0 }; - QColor statusColorInfoDisabled{ 0xC7EAF5 }; + QColor statusColorInfoDisabled{ 0xc7eaf5 }; QColor statusColorWarning{ 0xfbc064 }; - QColor statusColorWarningHovered{ 0xFFCF6C }; - QColor statusColorWarningPressed{ 0xFFD880 }; - QColor statusColorWarningDisabled{ 0xFEEFD8 }; - QColor statusColorError{ 0xE96B72 }; - QColor statusColorErrorHovered{ 0xF47C83 }; - QColor statusColorErrorPressed{ 0xFF9197 }; - QColor statusColorErrorDisabled{ 0xF9DADC }; - QColor statusColorForeground{ 0xFFFFFF }; - QColor statusColorForegroundHovered{ 0xFFFFFF }; - QColor statusColorForegroundPressed{ 0xFFFFFF }; - QColor statusColorForegroundDisabled{ QRgba64::fromArgb32(0x99FFFFFF) }; + QColor statusColorWarningHovered{ 0xffcf6c }; + QColor statusColorWarningPressed{ 0xffd880 }; + QColor statusColorWarningDisabled{ 0xfeefd8 }; + QColor statusColorError{ 0xe96b72 }; + QColor statusColorErrorHovered{ 0xf47c83 }; + QColor statusColorErrorPressed{ 0xff9197 }; + QColor statusColorErrorDisabled{ 0xf9dadc }; + QColor statusColorForeground{ 0xffffff }; + QColor statusColorForegroundHovered{ 0xffffff }; + QColor statusColorForegroundPressed{ 0xffffff }; + QColor statusColorForegroundDisabled{ QRgba64::fromArgb32(0x99ffffff) }; QColor shadowColor1{ QRgba64::fromArgb32(0x20000000) }; QColor shadowColor2{ QRgba64::fromArgb32(0x40000000) }; QColor shadowColor3{ QRgba64::fromArgb32(0x60000000) }; QColor shadowColorTransparent{ QRgba64::fromArgb32(0x00000000) }; - QColor borderColor{ 0xD3D3D3 }; - QColor borderColorHovered{ 0xB3B3B3 }; - QColor borderColorPressed{ 0xA3A3A3 }; - QColor borderColorDisabled{ 0xE9E9E9 }; - QColor borderColorTransparent{ QRgba64::fromArgb32(0x00D3D3D3) }; + QColor borderColor{ 0xd3d3d3 }; + QColor borderColorHovered{ 0xb3b3b3 }; + QColor borderColorPressed{ 0xa3a3a3 }; + QColor borderColorDisabled{ 0xe9e9e9 }; + QColor borderColorTransparent{ QRgba64::fromArgb32(0x00d3d3d3) }; - QColor semiTransparentColor1{ QRgba64::fromArgb32(0x0A000000) }; + QColor semiTransparentColor1{ QRgba64::fromArgb32(0x0000000) }; QColor semiTransparentColor2{ QRgba64::fromArgb32(0x19000000) }; QColor semiTransparentColor3{ QRgba64::fromArgb32(0x21000000) }; QColor semiTransparentColor4{ QRgba64::fromArgb32(0x28000000) }; @@ -198,6 +201,6 @@ class Theme { private: void initializeFonts(); void initializePalette(); - void initializeFromJson(QJsonDocument const& jsonDoc); + bool initializeFromJson(QJsonDocument const& jsonDoc); }; } // namespace oclero::qlementine diff --git a/lib/include/oclero/qlementine/style/ThemeManager.hpp b/lib/include/oclero/qlementine/style/ThemeManager.hpp index 5db2d9e..ba66528 100644 --- a/lib/include/oclero/qlementine/style/ThemeManager.hpp +++ b/lib/include/oclero/qlementine/style/ThemeManager.hpp @@ -29,6 +29,8 @@ class ThemeManager : public QObject { const std::vector& themes() const; void addTheme(const Theme& theme); + void loadDirectory(const QString& path); + QString currentTheme() const; void setCurrentTheme(const QString& key); Q_SIGNAL void currentThemeChanged(); @@ -44,8 +46,6 @@ class ThemeManager : public QObject { int currentThemeIndex() const; void setCurrentThemeIndex(int index); - QString getLocalizedThemeName(const QString& baseThemeName) const; - private: void synchronizeThemeOnStyle(); diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 11feaac..03b8798 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -250,7 +250,7 @@ struct QlementineStyleImpl { } QlementineStyle& owner; - Theme theme; + Theme theme{}; std::unique_ptr fontMetricsBold{ nullptr }; WidgetAnimationManager animations; std::unordered_map standardIconCache; @@ -263,6 +263,7 @@ QlementineStyle::QlementineStyle(QObject* parent) setParent(parent); setObjectName(QStringLiteral("QlementineStyle")); oclero::qlementine::icons::initializeIconTheme(); + triggerCompleteRepaint(); } QlementineStyle::~QlementineStyle() = default; @@ -281,8 +282,10 @@ void QlementineStyle::setTheme(Theme const& theme) { } void QlementineStyle::setThemeJsonPath(QString const& jsonPath) { - const auto theme = Theme(jsonPath); - setTheme(theme); + const auto themeOpt = Theme::fromJsonPath(jsonPath); + if (themeOpt.has_value()) { + setTheme(themeOpt.value()); + } } bool QlementineStyle::animationsEnabled() const { diff --git a/lib/src/style/Theme.cpp b/lib/src/style/Theme.cpp index 529363a..0e638ac 100644 --- a/lib/src/style/Theme.cpp +++ b/lib/src/style/Theme.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include @@ -139,21 +140,39 @@ void setInt(QJsonObject& jsonObj, const QString& key, int value) { void setDouble(QJsonObject& jsonObj, const QString& key, double value) { jsonObj.insert(key, value); } -} // namespace - -Theme::Theme() - : Theme(QJsonDocument{}) {} -Theme::Theme(QString const& jsonPath) - : Theme(readJsonDoc(jsonPath)) {} +bool jsonObjHasKey(const QJsonObject& obj, const QString& key) { + return obj.find(key) != obj.end(); +} +bool jsonObjHasAllKeys(const QJsonObject& obj, const QVector& keys) { + for (const auto& key : keys) { + if (!jsonObjHasKey(obj, key)) + return false; + } + return true; +} +} // namespace -Theme::Theme(QJsonDocument const& jsonDoc) { - initializeFromJson(jsonDoc); +Theme::Theme() { initializeFonts(); initializePalette(); } +std::optional Theme::fromJsonPath(const QString& jsonPath) { + return fromJsonDoc(readJsonDoc(jsonPath)); +} + +std::optional Theme::fromJsonDoc(const QJsonDocument& jsonDoc) { + Theme theme; + if (theme.initializeFromJson(jsonDoc)) { + theme.initializeFonts(); + theme.initializePalette(); + return theme; + } + return std::nullopt; +} + void Theme::initializeFonts() { // Fonts. const auto defaultFont = QFont(QStringLiteral("Inter")); @@ -251,160 +270,170 @@ void Theme::initializePalette() { palette.setColor(QPalette::ColorGroup::Disabled, QPalette::ColorRole::Button, neutralColorDisabled); } -void Theme::initializeFromJson(QJsonDocument const& jsonDoc) { - if (jsonDoc.isObject()) { - const auto jsonObj = jsonDoc.object(); - if (!jsonObj.isEmpty()) { - // Parse metadata. - auto const metaObj = jsonObj.value(QStringLiteral("meta")).toObject(); - meta = ThemeMeta{ - tryGetString(metaObj, QStringLiteral("name"), {}), - tryGetString(metaObj, QStringLiteral("version"), {}), - tryGetString(metaObj, QStringLiteral("author"), {}), - }; - - // Parse all values. - TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain1); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain2); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain3); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain4); - backgroundColorMainTransparent = colorWithAlpha(backgroundColorMain1, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorDisabled); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColor); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorPressed); - neutralColorTransparent = colorWithAlpha(neutralColorDisabled, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, focusColor); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColor); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorDisabled); - primaryColorTransparent = colorWithAlpha(primaryColor, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForeground); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForegroundHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForegroundPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForegroundDisabled); - primaryColorForegroundTransparent = colorWithAlpha(primaryColorForeground, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColor); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColorPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColorDisabled); - primaryAlternativeColorTransparent = colorWithAlpha(primaryAlternativeColor, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColor); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorDisabled); - secondaryColorTransparent = colorWithAlpha(secondaryColor, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColor); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColorPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColorDisabled); - secondaryAlternativeColorTransparent = colorWithAlpha(secondaryAlternativeColor, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForeground); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForegroundHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForegroundPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForegroundDisabled); - secondaryColorForegroundTransparent = colorWithAlpha(secondaryColorForeground, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor1); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor2); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor3); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor4); - semiTransparentColorTransparent = colorWithAlpha(semiTransparentColor1, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccess); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccessHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccessPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccessDisabled); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfo); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfoHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfoPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfoDisabled); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarning); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarningHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarningPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarningDisabled); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorError); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorErrorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorErrorPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorErrorDisabled); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForeground); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForegroundHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForegroundPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForegroundDisabled); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColor); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColorHovered); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColorPressed); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColorDisabled); - borderColorTransparent = colorWithAlpha(borderColor, 0); - - TRY_GET_COLOR_ATTRIBUTE(jsonObj, shadowColor1); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, shadowColor2); - TRY_GET_COLOR_ATTRIBUTE(jsonObj, shadowColor3); - shadowColorTransparent = colorWithAlpha(shadowColor1, 0); - - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSize); - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH1); - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH2); - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH3); - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH4); - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH5); - TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeS1); - TRY_GET_INT_ATTRIBUTE(jsonObj, animationDuration); - TRY_GET_INT_ATTRIBUTE(jsonObj, focusAnimationDuration); - TRY_GET_INT_ATTRIBUTE(jsonObj, sliderAnimationDuration); - TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, borderRadius); - TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, checkBoxBorderRadius); - TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, menuItemBorderRadius); - TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, menuBarItemBorderRadius); - TRY_GET_INT_ATTRIBUTE(jsonObj, borderWidth); - TRY_GET_INT_ATTRIBUTE(jsonObj, controlHeightLarge); - TRY_GET_INT_ATTRIBUTE(jsonObj, controlHeightMedium); - TRY_GET_INT_ATTRIBUTE(jsonObj, controlHeightSmall); - TRY_GET_INT_ATTRIBUTE(jsonObj, controlDefaultWidth); - TRY_GET_INT_ATTRIBUTE(jsonObj, dialMarkLength); - TRY_GET_INT_ATTRIBUTE(jsonObj, dialMarkThickness); - TRY_GET_INT_ATTRIBUTE(jsonObj, dialTickLength); - TRY_GET_INT_ATTRIBUTE(jsonObj, dialTickSpacing); - TRY_GET_INT_ATTRIBUTE(jsonObj, dialGrooveThickness); - TRY_GET_INT_ATTRIBUTE(jsonObj, focusBorderWidth); - - auto iconExtent = 16; - TRY_GET_INT_ATTRIBUTE(jsonObj, iconExtent); - iconSize = QSize{ iconExtent, iconExtent }; - iconSizeMedium = iconSize * 1.5; - iconSizeLarge = iconSize * 2; - iconSizeExtraSmall = iconSize * 0.75; - - TRY_GET_INT_ATTRIBUTE(jsonObj, sliderTickSize); - TRY_GET_INT_ATTRIBUTE(jsonObj, sliderTickSpacing); - TRY_GET_INT_ATTRIBUTE(jsonObj, sliderTickThickness); - TRY_GET_INT_ATTRIBUTE(jsonObj, sliderGrooveHeight); - TRY_GET_INT_ATTRIBUTE(jsonObj, progressBarGrooveHeight); - TRY_GET_INT_ATTRIBUTE(jsonObj, spacing); - TRY_GET_INT_ATTRIBUTE(jsonObj, scrollBarThicknessFull); - TRY_GET_INT_ATTRIBUTE(jsonObj, scrollBarThicknessSmall); - TRY_GET_INT_ATTRIBUTE(jsonObj, scrollBarMargin); - TRY_GET_INT_ATTRIBUTE(jsonObj, tabBarPaddingTop); - TRY_GET_INT_ATTRIBUTE(jsonObj, tabBarTabMaxWidth); - TRY_GET_INT_ATTRIBUTE(jsonObj, tabBarTabMinWidth); - - tabBarTabMaxWidth = std::max(0, tabBarTabMaxWidth); - tabBarTabMinWidth = std::max(0, tabBarTabMinWidth); - if (tabBarTabMinWidth > tabBarTabMaxWidth) { - std::swap(tabBarTabMinWidth, tabBarTabMaxWidth); - } +bool Theme::initializeFromJson(QJsonDocument const& jsonDoc) { + if (!jsonDoc.isObject()) + return false; + + const auto jsonObj = jsonDoc.object(); + if (!jsonObj.isEmpty()) { + // Parse metadata. + auto const metaObj = jsonObj.value(QStringLiteral("meta")).toObject(); + if (!jsonObjHasAllKeys(metaObj, { + QStringLiteral("name"), + QStringLiteral("version"), + QStringLiteral("author"), + })) + return false; + + meta = ThemeMeta{ + tryGetString(metaObj, QStringLiteral("name"), {}), + tryGetString(metaObj, QStringLiteral("version"), {}), + tryGetString(metaObj, QStringLiteral("author"), {}), + }; + + // Parse all values. + TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain1); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain2); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain3); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain4); + backgroundColorMainTransparent = colorWithAlpha(backgroundColorMain1, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorDisabled); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColor); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorPressed); + neutralColorTransparent = colorWithAlpha(neutralColorDisabled, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, focusColor); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColor); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorDisabled); + primaryColorTransparent = colorWithAlpha(primaryColor, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForeground); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForegroundHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForegroundPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryColorForegroundDisabled); + primaryColorForegroundTransparent = colorWithAlpha(primaryColorForeground, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColor); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColorPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, primaryAlternativeColorDisabled); + primaryAlternativeColorTransparent = colorWithAlpha(primaryAlternativeColor, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColor); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorDisabled); + secondaryColorTransparent = colorWithAlpha(secondaryColor, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColor); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColorPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryAlternativeColorDisabled); + secondaryAlternativeColorTransparent = colorWithAlpha(secondaryAlternativeColor, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForeground); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForegroundHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForegroundPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, secondaryColorForegroundDisabled); + secondaryColorForegroundTransparent = colorWithAlpha(secondaryColorForeground, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor1); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor2); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor3); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, semiTransparentColor4); + semiTransparentColorTransparent = colorWithAlpha(semiTransparentColor1, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccess); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccessHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccessPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorSuccessDisabled); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfo); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfoHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfoPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorInfoDisabled); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarning); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarningHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarningPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorWarningDisabled); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorError); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorErrorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorErrorPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorErrorDisabled); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForeground); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForegroundHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForegroundPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, statusColorForegroundDisabled); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColor); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColorHovered); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColorPressed); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, borderColorDisabled); + borderColorTransparent = colorWithAlpha(borderColor, 0); + + TRY_GET_COLOR_ATTRIBUTE(jsonObj, shadowColor1); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, shadowColor2); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, shadowColor3); + shadowColorTransparent = colorWithAlpha(shadowColor1, 0); + + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSize); + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH1); + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH2); + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH3); + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH4); + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeH5); + TRY_GET_INT_ATTRIBUTE(jsonObj, fontSizeS1); + TRY_GET_INT_ATTRIBUTE(jsonObj, animationDuration); + TRY_GET_INT_ATTRIBUTE(jsonObj, focusAnimationDuration); + TRY_GET_INT_ATTRIBUTE(jsonObj, sliderAnimationDuration); + TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, borderRadius); + TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, checkBoxBorderRadius); + TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, menuItemBorderRadius); + TRY_GET_DOUBLE_ATTRIBUTE(jsonObj, menuBarItemBorderRadius); + TRY_GET_INT_ATTRIBUTE(jsonObj, borderWidth); + TRY_GET_INT_ATTRIBUTE(jsonObj, controlHeightLarge); + TRY_GET_INT_ATTRIBUTE(jsonObj, controlHeightMedium); + TRY_GET_INT_ATTRIBUTE(jsonObj, controlHeightSmall); + TRY_GET_INT_ATTRIBUTE(jsonObj, controlDefaultWidth); + TRY_GET_INT_ATTRIBUTE(jsonObj, dialMarkLength); + TRY_GET_INT_ATTRIBUTE(jsonObj, dialMarkThickness); + TRY_GET_INT_ATTRIBUTE(jsonObj, dialTickLength); + TRY_GET_INT_ATTRIBUTE(jsonObj, dialTickSpacing); + TRY_GET_INT_ATTRIBUTE(jsonObj, dialGrooveThickness); + TRY_GET_INT_ATTRIBUTE(jsonObj, focusBorderWidth); + + auto iconExtent = 16; + TRY_GET_INT_ATTRIBUTE(jsonObj, iconExtent); + iconSize = QSize{ iconExtent, iconExtent }; + iconSizeMedium = iconSize * 1.5; + iconSizeLarge = iconSize * 2; + iconSizeExtraSmall = iconSize * 0.75; + + TRY_GET_INT_ATTRIBUTE(jsonObj, sliderTickSize); + TRY_GET_INT_ATTRIBUTE(jsonObj, sliderTickSpacing); + TRY_GET_INT_ATTRIBUTE(jsonObj, sliderTickThickness); + TRY_GET_INT_ATTRIBUTE(jsonObj, sliderGrooveHeight); + TRY_GET_INT_ATTRIBUTE(jsonObj, progressBarGrooveHeight); + TRY_GET_INT_ATTRIBUTE(jsonObj, spacing); + TRY_GET_INT_ATTRIBUTE(jsonObj, scrollBarThicknessFull); + TRY_GET_INT_ATTRIBUTE(jsonObj, scrollBarThicknessSmall); + TRY_GET_INT_ATTRIBUTE(jsonObj, scrollBarMargin); + TRY_GET_INT_ATTRIBUTE(jsonObj, tabBarPaddingTop); + TRY_GET_INT_ATTRIBUTE(jsonObj, tabBarTabMaxWidth); + TRY_GET_INT_ATTRIBUTE(jsonObj, tabBarTabMinWidth); + + tabBarTabMaxWidth = std::max(0, tabBarTabMaxWidth); + tabBarTabMinWidth = std::max(0, tabBarTabMinWidth); + if (tabBarTabMinWidth > tabBarTabMaxWidth) { + std::swap(tabBarTabMinWidth, tabBarTabMaxWidth); } } + + return true; } QJsonDocument Theme::toJson() const { diff --git a/lib/src/style/ThemeManager.cpp b/lib/src/style/ThemeManager.cpp index 93cb279..d20e1f1 100644 --- a/lib/src/style/ThemeManager.cpp +++ b/lib/src/style/ThemeManager.cpp @@ -3,6 +3,8 @@ #include +#include + namespace oclero::qlementine { ThemeManager::ThemeManager(QObject* parent) : ThemeManager(nullptr, parent) {} @@ -32,11 +34,30 @@ const std::vector& ThemeManager::themes() const { void ThemeManager::addTheme(const Theme& theme) { _themes.emplace_back(theme); emit themeCountChanged(); - if (_currentIndex == -1) { + if (_currentIndex < 0) { setCurrentThemeIndex(0); } } +void ThemeManager::loadDirectory(const QString& path) { + QDir dir(path); + if (!dir.exists()) + return; + + dir.setFilter(QDir::Filter::Files | QDir::Filter::NoDotAndDotDot); + dir.setSorting(QDir::SortFlag::Name | QDir::SortFlag::IgnoreCase); + const auto files = dir.entryInfoList(); + for (const auto& file : files) { + QFileInfo fileInfo(file); + if (fileInfo.suffix().toLower() == QStringLiteral("json")) { + const auto themeOpt = Theme::fromJsonPath(file.absoluteFilePath()); + if (themeOpt.has_value()) { + addTheme(themeOpt.value()); + } + } + } +} + QString ThemeManager::currentTheme() const { if (_currentIndex > -1 && _currentIndex < themeCount()) { return _themes.at(_currentIndex).meta.name; @@ -54,11 +75,12 @@ int ThemeManager::currentThemeIndex() const { } void ThemeManager::setCurrentThemeIndex(int index) { - index = std::max(-1, std::min(themeCount() - 1, index)); - if (index != _currentIndex) { - _currentIndex = index; - synchronizeThemeOnStyle(); - emit currentThemeChanged(); + if (index > -1 && index < themeCount()) { + if (index != _currentIndex) { + _currentIndex = index; + synchronizeThemeOnStyle(); + emit currentThemeChanged(); + } } } @@ -93,18 +115,18 @@ int ThemeManager::themeIndex(const QString& key) const { return -1; } -QString ThemeManager::getLocalizedThemeName(const QString& baseThemeName) const { - if (baseThemeName.toLower() == QStringLiteral("light")) { - return tr("Light Theme"); - } else if (baseThemeName.toLower() == QStringLiteral("dark")) { - return tr("Dark Theme"); - } - return baseThemeName; -} - void ThemeManager::synchronizeThemeOnStyle() { - if (_style && _currentIndex != -1 && !_themes.empty() && _currentIndex < themeCount()) { + if (!_style) + return; + + if (_themes.empty()) + return; + + if (_currentIndex >= 0 && _currentIndex < themeCount()) { _style->setTheme(_themes.at(_currentIndex)); + } else { + addTheme(_style->theme()); + setCurrentThemeIndex(themeCount() - 1); } } } // namespace oclero::qlementine diff --git a/lib/src/tools/ThemeEditor.cpp b/lib/src/tools/ThemeEditor.cpp index 130f881..d727346 100644 --- a/lib/src/tools/ThemeEditor.cpp +++ b/lib/src/tools/ThemeEditor.cpp @@ -220,8 +220,12 @@ struct ThemeEditor::Impl { // Get theme from file and set it on the application. const auto fileName = QFileDialog::getOpenFileName(&owner, "Load JSON theme", previousPath, "JSON Files (*.json)"); - const auto theme = Theme(fileName); - owner.setTheme(theme); + const auto themeOpt = Theme::fromJsonPath(fileName); + if (!themeOpt.has_value()) { + return; + } + + owner.setTheme(themeOpt.value()); // Save path to QSettings. settings.setValue(PREVIOUS_PATH_SETTINGS_KEY, fileName); diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp index a8afaba..1cc45a0 100644 --- a/showcase/src/main.cpp +++ b/showcase/src/main.cpp @@ -1,6 +1,7 @@ #include #include +#include #include "ShowcaseWindow.hpp" @@ -21,22 +22,27 @@ int main(int argc, char* argv[]) { QCoreApplication::setApplicationVersion("1.0.0"); QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); + oclero::qlementine::ThemeManager* themeManager{ nullptr }; + #if USE_CUSTOM_STYLE // Custom QStyle. - auto* const style = new oclero::qlementine::QlementineStyle(&qApplication); + auto* style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); - style->setThemeJsonPath(QStringLiteral(":/light.json")); qApplication.setStyle(style); + // Custom icon theme. QIcon::setThemeName("qlementine"); -#endif - auto window = std::make_unique(); -#if USE_CUSTOM_STYLE - window->setCustomStyle(style); + // Theme manager. + themeManager = new oclero::qlementine::ThemeManager(style); + themeManager->loadDirectory(":/showcase/themes"); + + // Define theme on QStyle. + themeManager->setCurrentTheme("Light"); #endif + auto window = std::make_unique(themeManager); window->show(); return qApplication.exec(); From 7955ffa29718b529930bfc79a4040cf6af0b34b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Mon, 11 Nov 2024 18:31:15 +0100 Subject: [PATCH 37/45] Showcase: add ability to switch theme in the UI --- showcase/src/ShowcaseWindow.cpp | 124 ++++++++++++++++++++++++-------- showcase/src/ShowcaseWindow.hpp | 7 +- 2 files changed, 97 insertions(+), 34 deletions(-) diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index ccffdb6..7b4aa6e 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -1,6 +1,7 @@ #include "ShowcaseWindow.hpp" #include +#include #include #include @@ -12,6 +13,7 @@ #include #include #include +#include #include @@ -43,6 +45,7 @@ #include #include #include +#include #include @@ -125,7 +128,7 @@ static QIcon getDummyMonochromeIcon(const QSize& size = { 16, 16 }) { struct ShowcaseWindow::Impl { ShowcaseWindow& owner; QPointer qlementineStyle; - + QPointer themeManager; QVBoxLayout* rootLayout{ nullptr }; QMenuBar* menuBar{ nullptr }; QTabBar* tabBar{ nullptr }; @@ -135,26 +138,11 @@ struct ShowcaseWindow::Impl { QWidget* rightPanel{ nullptr }; QWidget* workspace{ nullptr }; QStatusBar* statusBar{ nullptr }; + oclero::qlementine::Switch* themeSwitch{ nullptr }; - struct Actions { - QAction* newFile{ nullptr }; - QAction* openFile{ nullptr }; - QAction* saveFile{ nullptr }; - QAction* closeFile{ nullptr }; - QAction* preferences{ nullptr }; - QAction* quit{ nullptr }; - - QAction* undo{ nullptr }; - QAction* redo{ nullptr }; - QAction* cut{ nullptr }; - QAction* copy{ nullptr }; - QAction* paste{ nullptr }; - QAction* delete_{ nullptr }; - } actions; - - Impl(ShowcaseWindow& o) + Impl(ShowcaseWindow& o, ThemeManager* themeManager) : owner(o) - , actions({}) {} + , themeManager(themeManager) {} void setupUI() { setupMenuBar(); @@ -168,6 +156,20 @@ struct ShowcaseWindow::Impl { setupLayout(); } + void setTheme(const QString& theme) { + themeManager->setCurrentTheme(theme); + } + + void switchTheme() { + themeManager->setNextTheme(); + } + + void updateThemeSwitch() { + themeSwitch->blockSignals(true); + themeSwitch->setChecked(themeManager->currentTheme() == "Dark"); + themeSwitch->blockSignals(false); + } + void setupMenuBar() { menuBar = new QMenuBar(nullptr); const auto cb = []() {}; @@ -230,6 +232,35 @@ struct ShowcaseWindow::Impl { menu->addSeparator(); menu->addAction( makeQIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); + + auto* themeMenu = menu->addMenu("Theme"); + auto* themeActionGroup = new QActionGroup(themeMenu); + themeActionGroup->setExclusive(true); + const auto& themes = themeManager->themes(); + const auto currentTheme = themeManager->currentTheme(); + + for (const auto& theme : themes) { + const auto name = theme.meta.name; + auto* action = themeMenu->addAction(name); + action->setCheckable(true); + themeActionGroup->addAction(action); + action->setChecked(name == currentTheme); + + QObject::connect(action, &QAction::triggered, action, [this, name](auto checked) { + if (checked) { + setTheme(name); + } + }); + QObject::connect( + themeManager, &oclero::qlementine::ThemeManager::currentThemeChanged, action, [this, name, action]() { + action->setChecked(name == themeManager->currentTheme()); + }); + } + + themeMenu->addSeparator(); + themeMenu->addAction("Switch Theme", { Qt::CTRL | Qt::Key_T }, [this]() { + switchTheme(); + }); } } { @@ -321,6 +352,44 @@ struct ShowcaseWindow::Impl { exportButton->setMenu(menu); exportButton->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); } + + // Spacer. + auto* spacer_widget = new QWidget(toolBar); + spacer_widget->setAttribute(Qt::WA_TransparentForMouseEvents); + spacer_widget->setMinimumSize(0, 0); + spacer_widget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Ignored); + spacer_widget->setUpdatesEnabled(false); // No paint events. + toolBar->addWidget(spacer_widget); + + // Theme switch. + auto* themeWidget = new QWidget(toolBar); + { + const auto hSpacing = getLayoutHSpacing(themeWidget) / 2; + themeWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + auto* themeLayout = new QHBoxLayout(themeWidget); + themeLayout->setSpacing(hSpacing); + themeLayout->setContentsMargins(0, 0, 0, 0); + themeWidget->setLayout(themeLayout); + + auto* lightIconWidget = new oclero::qlementine::IconWidget(makeQIcon(Icons16::Misc_Sun), themeWidget); + themeLayout->addWidget(lightIconWidget); + + themeSwitch = new oclero::qlementine::Switch(toolBar); + themeSwitch->setToolTip("Switch between light and dark theme"); + QObject::connect(themeSwitch, &oclero::qlementine::Switch::clicked, themeSwitch, [this](auto checked) { + setTheme(checked ? "Dark" : "Light"); + }); + QObject::connect(themeManager, &oclero::qlementine::ThemeManager::currentThemeChanged, themeSwitch, [this]() { + updateThemeSwitch(); + }); + themeLayout->addWidget(themeSwitch); + + auto* darkIconWidget = new oclero::qlementine::IconWidget(makeQIcon(Icons16::Misc_Moon), themeWidget); + themeLayout->addWidget(darkIconWidget); + + updateThemeSwitch(); + } + toolBar->addWidget(themeWidget); } void setupLeftPanel() { @@ -543,6 +612,7 @@ struct ShowcaseWindow::Impl { auto* radioGroup = new QButtonGroup(groupBox); for (auto i = 0; i < 3; ++i) { auto* radioButton = new QRadioButton(getDummyText(), groupBox); + radioButton->setChecked(i == 0); radioButton->setIcon(getDummyMonochromeIcon()); radioButton->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); radioGroup->addButton(radioButton); @@ -628,26 +698,20 @@ struct ShowcaseWindow::Impl { rootLayout->addWidget(statusBar); workspace->setFocus(Qt::NoFocusReason); } - - void setupShortcuts() { - // TODO - } }; -ShowcaseWindow::ShowcaseWindow(QWidget* parent) +ShowcaseWindow::ShowcaseWindow(ThemeManager* themeManager, QWidget* parent) : QWidget(parent) - , _impl(new Impl(*this)) { + , _impl(new Impl(*this, themeManager)) { setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); _impl->setupUI(); - _impl->setupShortcuts(); setMinimumSize(600, 400); resize(800, 600); oclero::qlementine::centerWidget(this); + + this->ensurePolished(); + _impl->qlementineStyle = qobject_cast(this->style()); } ShowcaseWindow::~ShowcaseWindow() = default; - -void ShowcaseWindow::setCustomStyle(QlementineStyle* style) { - _impl->qlementineStyle = style; -} } // namespace oclero::qlementine::showcase diff --git a/showcase/src/ShowcaseWindow.hpp b/showcase/src/ShowcaseWindow.hpp index 51e2ddc..2c0d6b8 100644 --- a/showcase/src/ShowcaseWindow.hpp +++ b/showcase/src/ShowcaseWindow.hpp @@ -6,16 +6,15 @@ namespace oclero::qlementine { class QlementineStyle; -} +class ThemeManager; +} // namespace oclero::qlementine namespace oclero::qlementine::showcase { class ShowcaseWindow : public QWidget { public: - ShowcaseWindow(QWidget* parent = nullptr); + ShowcaseWindow(ThemeManager* themeManager, QWidget* parent = nullptr); ~ShowcaseWindow(); - void setCustomStyle(QlementineStyle* style); - private: struct Impl; std::unique_ptr _impl{}; From 1911c25559eaed7d6440f9ad3e4a5a9f632a72f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Mon, 11 Nov 2024 20:28:01 +0100 Subject: [PATCH 38/45] Fix Switch theme change --- lib/src/widgets/Switch.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/src/widgets/Switch.cpp b/lib/src/widgets/Switch.cpp index 946ee07..107f098 100644 --- a/lib/src/widgets/Switch.cpp +++ b/lib/src/widgets/Switch.cpp @@ -122,7 +122,9 @@ void Switch::enterEvent(QEnterEvent* e) { void Switch::changeEvent(QEvent* e) { QAbstractButton::changeEvent(e); - if (e->type() == QEvent::Type::EnabledChange) { + const auto type = e->type(); + if (type == QEvent::Type::EnabledChange || type == QEvent::Type::PaletteChange + || type == QEvent::Type::ApplicationPaletteChange) { startAnimation(); } } From 92f66dee84813e0554faaa5ddbc0fad962870eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Mon, 11 Nov 2024 20:28:30 +0100 Subject: [PATCH 39/45] Fix typo in JSON themes --- sandbox/resources/dark.json | 10 +++++----- showcase/resources/themes/dark.json | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sandbox/resources/dark.json b/sandbox/resources/dark.json index 663b1bc..f330d7e 100644 --- a/sandbox/resources/dark.json +++ b/sandbox/resources/dark.json @@ -11,7 +11,7 @@ "meta": { "author": "Olivier Cléro", "name": "Dark", - "version": "1.4.0" + "version": "1.4.1" }, "neutralColor": "#565656", "neutralColorDisabled": "#353535", @@ -41,10 +41,10 @@ "secondaryColorForegroundPressed": "#2f2f2f", "secondaryColorHovered": "#d5d5d5", "secondaryColorPressed": "#ebebeb", - "semiTransparentColor1": "0xffffff18", - "semiTransparentColor2": "0xffffff23", - "semiTransparentColor3": "0xffffff28", - "semiTransparentColor4": "0xffffff2d", + "semiTransparentColor1": "#ffffff18", + "semiTransparentColor2": "#ffffff23", + "semiTransparentColor3": "#ffffff28", + "semiTransparentColor4": "#ffffff2d", "shadowColor1": "#00000066", "shadowColor2": "#000000bb", "shadowColor3": "#000000ff", diff --git a/showcase/resources/themes/dark.json b/showcase/resources/themes/dark.json index 663b1bc..f330d7e 100644 --- a/showcase/resources/themes/dark.json +++ b/showcase/resources/themes/dark.json @@ -11,7 +11,7 @@ "meta": { "author": "Olivier Cléro", "name": "Dark", - "version": "1.4.0" + "version": "1.4.1" }, "neutralColor": "#565656", "neutralColorDisabled": "#353535", @@ -41,10 +41,10 @@ "secondaryColorForegroundPressed": "#2f2f2f", "secondaryColorHovered": "#d5d5d5", "secondaryColorPressed": "#ebebeb", - "semiTransparentColor1": "0xffffff18", - "semiTransparentColor2": "0xffffff23", - "semiTransparentColor3": "0xffffff28", - "semiTransparentColor4": "0xffffff2d", + "semiTransparentColor1": "#ffffff18", + "semiTransparentColor2": "#ffffff23", + "semiTransparentColor3": "#ffffff28", + "semiTransparentColor4": "#ffffff2d", "shadowColor1": "#00000066", "shadowColor2": "#000000bb", "shadowColor3": "#000000ff", From e182e7bd12e949de393130087afbb022785a19f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 21 Nov 2024 23:31:51 +0100 Subject: [PATCH 40/45] Improve Theming - Use symbolic links for JSON themes - Use ThemeManager - Add new colors to Theme - QSplitter drawing --- .../qlementine/style/QlementineStyle.hpp | 6 +- lib/include/oclero/qlementine/style/Theme.hpp | 3 + lib/src/style/QlementineStyle.cpp | 69 +++++-- lib/src/style/Theme.cpp | 10 +- lib/src/widgets/NavigationBar.cpp | 6 +- lib/src/widgets/SegmentedControl.cpp | 6 +- sandbox/resources/dark.json | 71 -------- sandbox/resources/light.json | 71 -------- sandbox/resources/sandbox.qrc | 6 +- sandbox/resources/themes | 1 + sandbox/src/SandboxWindow.cpp | 168 +++++++++--------- sandbox/src/SandboxWindow.hpp | 7 +- sandbox/src/main.cpp | 30 ++-- showcase/resources/themes/dark.json | 126 +++++++------ showcase/resources/themes/light.json | 66 ++++--- showcase/src/ShowcaseWindow.cpp | 81 +++++---- showcase/src/ShowcaseWindow.hpp | 5 +- showcase/src/main.cpp | 5 +- 18 files changed, 352 insertions(+), 385 deletions(-) delete mode 100644 sandbox/resources/dark.json delete mode 100644 sandbox/resources/light.json create mode 120000 sandbox/resources/themes diff --git a/lib/include/oclero/qlementine/style/QlementineStyle.hpp b/lib/include/oclero/qlementine/style/QlementineStyle.hpp index dbb3419..67eaa34 100644 --- a/lib/include/oclero/qlementine/style/QlementineStyle.hpp +++ b/lib/include/oclero/qlementine/style/QlementineStyle.hpp @@ -203,7 +203,7 @@ class QlementineStyle : public QCommonStyle { virtual QColor const& menuBarItemBackgroundColor(MouseState const mouse, SelectionState const selected) const; virtual QColor const& menuBarItemForegroundColor(MouseState const mouse, SelectionState const selected) const; - virtual QColor const& tabBarBackgroundColor() const; + virtual QColor const& tabBarBackgroundColor(MouseState const mouse) const; virtual QColor const& tabBarShadowColor() const; virtual QColor const& tabBarBottomShadowColor() const; virtual QColor const& tabBackgroundColor(MouseState const mouse, SelectionState const selected) const; @@ -252,7 +252,7 @@ class QlementineStyle : public QCommonStyle { virtual QColor const& groupBoxTitleColor(MouseState const mouse, const QWidget* w = nullptr) const; virtual QColor const& groupBoxBorderColor(MouseState const mouse) const; - virtual QColor const& groupBoxBackgroundColor(MouseState const mouse) const; + virtual QColor groupBoxBackgroundColor(MouseState const mouse) const; virtual QColor const& statusColor(Status const status, MouseState const mouse) const; virtual QColor focusBorderColor(Status status) const; @@ -282,6 +282,8 @@ class QlementineStyle : public QCommonStyle { virtual QColor const& statusBarBorderColor() const; virtual QColor const& statusBarSeparatorColor() const; + virtual QColor const& splitterColor(MouseState const mouse) const; + private: std::unique_ptr _impl; }; diff --git a/lib/include/oclero/qlementine/style/Theme.hpp b/lib/include/oclero/qlementine/style/Theme.hpp index b2892b2..32c3a6a 100644 --- a/lib/include/oclero/qlementine/style/Theme.hpp +++ b/lib/include/oclero/qlementine/style/Theme.hpp @@ -57,6 +57,9 @@ class Theme { QColor backgroundColorMain4{ 0xdcdcdc }; QColor backgroundColorMainTransparent{ QRgba64::fromArgb32(0x00fafafa) }; + QColor backgroundColorWorkspace{ 0xb7b7b7 }; + QColor backgroundColorTabBar{ 0xb7b7b7 }; + QColor neutralColor{ 0xe1e1e1 }; QColor neutralColorHovered{ 0xdadada }; QColor neutralColorPressed{ 0xd2d2d2 }; diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 03b8798..ec97fb4 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -449,8 +449,9 @@ void QlementineStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption* opt const auto* tabBar = tabWidget ? tabWidget->tabBar() : nullptr; if (!documentMode && tabBar) { // Draw a border around the content. + const auto mouse = getMouseState(opt->state); const auto radius = _impl->theme.borderRadius * 1.5; - const auto& borderColor = tabBarBackgroundColor(); + const auto borderColor = tabBarBackgroundColor(mouse); const auto borderW = _impl->theme.borderWidth; drawRoundedRectBorder( p, opt->rect.adjusted(0, -borderW, 0, 0), borderColor, borderW, RadiusesF(0., 0., radius, radius)); @@ -490,11 +491,13 @@ void QlementineStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption* opt } case PE_FrameTabBarBase: if (const auto* optTabBar = qstyleoption_cast(opt)) { + const auto mouse = getMouseState(opt->state); + const auto& bgColor = tabBarBackgroundColor(mouse); if (optTabBar->documentMode) { - p->fillRect(opt->rect, tabBarBackgroundColor()); + p->fillRect(opt->rect, bgColor); } else { const auto radius = _impl->theme.borderRadius * 1.5; - drawRoundedRect(p, opt->rect, tabBarBackgroundColor(), RadiusesF(radius, radius, 0., 0.)); + drawRoundedRect(p, opt->rect, bgColor, RadiusesF(radius, radius, 0., 0.)); } } return; @@ -830,7 +833,8 @@ void QlementineStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption* opt // Filled rectangle below scroll buttons. // We need to fill the whole surface to ensure tabs are not visible below. - const auto& tabBarBgColor = tabBarBackgroundColor(); + const auto mouse = getMouseState(opt->state); + const auto& tabBarBgColor = tabBarBackgroundColor(mouse); const auto filledRect = QRect(rect.x() + rect.width() - scrollButtonsW, rect.y(), scrollButtonsW, rect.height()); drawRoundedRect(p, filledRect, tabBarBgColor, documentMode ? 0. : RadiusesF(0., radius, 0., 0.)); } @@ -1821,8 +1825,14 @@ void QlementineStyle::drawControl(ControlElement ce, const QStyleOption* opt, QP break; case CE_SizeGrip: break; - case CE_Splitter: - break; + case CE_Splitter: { + const auto mouse = getMouseState(opt->state); + const auto& lineColor = splitterColor(mouse); + // const auto currentLineColor = _impl->animations.animateBackgroundColor(w, lineColor, _impl->theme.animationDuration); + const auto line_rect = opt->rect.adjusted(-1, 0, 1, 0); + p->fillRect(line_rect, lineColor); + } + return; case CE_RubberBand: break; case CE_DockWidgetTitle: @@ -2860,11 +2870,13 @@ void QlementineStyle::drawComplexControl( // Draw an opaque background to hide tabs below. const auto isLeftButton = toolbuttonOpt->arrowType == Qt::ArrowType::LeftArrow; + const auto tabBarState = parentTabBar->isEnabled() ? MouseState::Normal : MouseState::Disabled; if (parentTabBar->documentMode() || isLeftButton) { - p->fillRect(toolbuttonOpt->rect, tabBarBackgroundColor()); + p->fillRect(toolbuttonOpt->rect, tabBarBackgroundColor(tabBarState)); } else { const auto bgRadius = _impl->theme.borderRadius * 1.5; - drawRoundedRect(p, toolbuttonOpt->rect, tabBarBackgroundColor(), RadiusesF(0., bgRadius, 0., 0.)); + drawRoundedRect( + p, toolbuttonOpt->rect, tabBarBackgroundColor(tabBarState), RadiusesF(0., bgRadius, 0., 0.)); } // Rect. @@ -4084,8 +4096,7 @@ int QlementineStyle::pixelMetric(PixelMetric m, const QStyleOption* opt, const Q // Splitter. case PM_SplitterWidth: - break; - + return 1; // TitleBar. case PM_TitleBarHeight: break; @@ -5613,8 +5624,8 @@ QColor const& QlementineStyle::menuBarItemForegroundColor(MouseState const mouse } } -QColor const& QlementineStyle::tabBarBackgroundColor() const { - return _impl->theme.backgroundColorMain3; +QColor const& QlementineStyle::tabBarBackgroundColor(MouseState const mouse) const { + return mouse == MouseState::Disabled ? _impl->theme.backgroundColorMain3 : _impl->theme.backgroundColorTabBar; } QColor const& QlementineStyle::tabBarShadowColor() const { @@ -5627,18 +5638,21 @@ QColor const& QlementineStyle::tabBarBottomShadowColor() const { QColor const& QlementineStyle::tabBackgroundColor(MouseState const mouse, SelectionState const selected) const { const auto isSelected = selected == SelectionState::Selected; + const auto& selectedTabColor = _impl->theme.backgroundColorMain2; + const auto& hoverTabColor = _impl->theme.neutralColor; + const auto& defaultTabColor = _impl->theme.backgroundColorMainTransparent; switch (mouse) { case MouseState::Hovered: - return isSelected ? _impl->theme.backgroundColorMain2 : _impl->theme.neutralColorPressed; + return isSelected ? selectedTabColor : hoverTabColor; case MouseState::Pressed: - return isSelected ? _impl->theme.backgroundColorMain2 : _impl->theme.secondaryColorPressed; + return _impl->theme.backgroundColorMain2; case MouseState::Normal: - return isSelected ? _impl->theme.backgroundColorMain2 : _impl->theme.neutralColorTransparent; + return isSelected ? selectedTabColor : defaultTabColor; case MouseState::Disabled: case MouseState::Transparent: default: - return _impl->theme.neutralColorTransparent; + return defaultTabColor; } } @@ -5915,8 +5929,13 @@ QColor const& QlementineStyle::groupBoxTitleColor(MouseState const mouse, const return labelForegroundColor(mouse, w); } -QColor const& QlementineStyle::groupBoxBackgroundColor(MouseState const mouse) const { - return mouse == MouseState::Disabled ? _impl->theme.neutralColorTransparent : _impl->theme.neutralColorDisabled; +QColor QlementineStyle::groupBoxBackgroundColor(MouseState const mouse) const { + if (mouse == MouseState::Disabled) { + return _impl->theme.backgroundColorMainTransparent; + } else { + return getColorSourceOver(_impl->theme.backgroundColorMain2, + colorWithAlphaF(_impl->theme.backgroundColorMain3, _impl->theme.backgroundColorMain3.alphaF() * .75)); + } } QColor const& QlementineStyle::groupBoxBorderColor(MouseState const mouse) const { @@ -6150,4 +6169,18 @@ QColor const& QlementineStyle::statusBarBorderColor() const { QColor const& QlementineStyle::statusBarSeparatorColor() const { return _impl->theme.secondaryColorDisabled; } + +QColor const& QlementineStyle::splitterColor(const MouseState mouse) const { + switch (mouse) { + case MouseState::Normal: + return _impl->theme.borderColor; + case MouseState::Hovered: + return _impl->theme.primaryColor; + case MouseState::Pressed: + return _impl->theme.primaryColorPressed; + case MouseState::Disabled: + default: + return _impl->theme.borderColorTransparent; + } +} } // namespace oclero::qlementine diff --git a/lib/src/style/Theme.cpp b/lib/src/style/Theme.cpp index 0e638ac..88496bf 100644 --- a/lib/src/style/Theme.cpp +++ b/lib/src/style/Theme.cpp @@ -252,7 +252,7 @@ void Theme::initializePalette() { palette.setColor(QPalette::ColorGroup::All, QPalette::ColorRole::WindowText, secondaryColor); palette.setColor(QPalette::ColorGroup::Disabled, QPalette::ColorRole::WindowText, secondaryColorDisabled); palette.setColor(QPalette::ColorGroup::All, QPalette::ColorRole::PlaceholderText, secondaryColorDisabled); - palette.setColor(QPalette::ColorGroup::Disabled, QPalette::ColorRole::PlaceholderText, neutralColorDisabled); + palette.setColor(QPalette::ColorGroup::Disabled, QPalette::ColorRole::PlaceholderText, secondaryColorDisabled); palette.setColor(QPalette::ColorGroup::All, QPalette::ColorRole::Link, primaryColor); palette.setColor(QPalette::ColorGroup::Disabled, QPalette::ColorRole::Link, secondaryColorDisabled); palette.setColor(QPalette::ColorGroup::All, QPalette::ColorRole::LinkVisited, primaryColor); @@ -298,6 +298,9 @@ bool Theme::initializeFromJson(QJsonDocument const& jsonDoc) { TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorMain4); backgroundColorMainTransparent = colorWithAlpha(backgroundColorMain1, 0); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorWorkspace); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, backgroundColorTabBar); + TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorDisabled); TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColor); TRY_GET_COLOR_ATTRIBUTE(jsonObj, neutralColorHovered); @@ -452,6 +455,9 @@ QJsonDocument Theme::toJson() const { SET_COLOR(jsonObj, backgroundColorMain3); SET_COLOR(jsonObj, backgroundColorMain4); + SET_COLOR(jsonObj, backgroundColorWorkspace); + SET_COLOR(jsonObj, backgroundColorTabBar); + SET_COLOR(jsonObj, neutralColor); SET_COLOR(jsonObj, neutralColorHovered); SET_COLOR(jsonObj, neutralColorPressed); @@ -580,6 +586,8 @@ bool Theme::operator==(const Theme& other) const { && backgroundColorMain3 == other.backgroundColorMain3 && backgroundColorMain4 == other.backgroundColorMain4 + && backgroundColorWorkspace == other.backgroundColorWorkspace + && neutralColorDisabled == other.neutralColorDisabled && neutralColor == other.neutralColor && neutralColorHovered == other.neutralColorHovered diff --git a/lib/src/widgets/NavigationBar.cpp b/lib/src/widgets/NavigationBar.cpp index 868ed3b..51cf411 100644 --- a/lib/src/widgets/NavigationBar.cpp +++ b/lib/src/widgets/NavigationBar.cpp @@ -16,11 +16,11 @@ const QColor& NavigationBar::getBgColor(const Theme& theme) const { const QColor& NavigationBar::getItemBgColor(MouseState mouse, const Theme& theme) const { switch (mouse) { case MouseState::Hovered: - return theme.neutralColorHovered; + return theme.backgroundColorMain3; case MouseState::Pressed: - return theme.neutralColorPressed; + return theme.backgroundColorMain4; default: - return theme.neutralColorTransparent; + return theme.backgroundColorMainTransparent; } } diff --git a/lib/src/widgets/SegmentedControl.cpp b/lib/src/widgets/SegmentedControl.cpp index 0ff3272..049f706 100644 --- a/lib/src/widgets/SegmentedControl.cpp +++ b/lib/src/widgets/SegmentedControl.cpp @@ -15,11 +15,11 @@ const QColor& SegmentedControl::getBgColor(const Theme& theme) const { const QColor& SegmentedControl::getItemBgColor(MouseState mouse, const Theme& theme) const { switch (mouse) { case MouseState::Hovered: - return theme.semiTransparentColor2; + return theme.neutralColor; case MouseState::Pressed: - return theme.semiTransparentColor4; + return theme.neutralColorHovered; default: - return theme.semiTransparentColorTransparent; + return theme.neutralColorTransparent; } } diff --git a/sandbox/resources/dark.json b/sandbox/resources/dark.json deleted file mode 100644 index f330d7e..0000000 --- a/sandbox/resources/dark.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "backgroundColorMain1": "#1f1f1f", - "backgroundColorMain2": "#2a2a2a", - "backgroundColorMain3": "#363636", - "backgroundColorMain4": "#414141", - "borderColor": "#4b4b4b", - "borderColorDisabled": "#444444", - "borderColorHovered": "#717171", - "borderColorPressed": "#a0a0a0", - "focusColor": "#34988666", - "meta": { - "author": "Olivier Cléro", - "name": "Dark", - "version": "1.4.1" - }, - "neutralColor": "#565656", - "neutralColorDisabled": "#353535", - "neutralColorHovered": "#4c4c4c", - "neutralColorPressed": "#404040", - "primaryAlternativeColor": "#126d5d", - "primaryAlternativeColorDisabled": "#1C3B36", - "primaryAlternativeColorHovered": "#0d6354", - "primaryAlternativeColorPressed": "#177665", - "primaryColor": "#349886", - "primaryColorDisabled": "#2c403c", - "primaryColorForeground": "#ffffff", - "primaryColorForegroundDisabled": "#3a534d", - "primaryColorForegroundHovered": "#ffffff", - "primaryColorForegroundPressed": "#ffffff", - "primaryColorHovered": "#2a7a6b", - "primaryColorPressed": "#2f8979", - "secondaryAlternativeColor": "#8f8f8f", - "secondaryAlternativeColorDisabled": "#8f8f8f3f", - "secondaryAlternativeColorHovered": "#797979", - "secondaryAlternativeColorPressed": "#848484", - "secondaryColor": "#ffffff", - "secondaryColorDisabled": "#ffffff33", - "secondaryColorForeground": "#2f2f2f", - "secondaryColorForegroundDisabled": "#2f2f2f", - "secondaryColorForegroundHovered": "#2f2f2f", - "secondaryColorForegroundPressed": "#2f2f2f", - "secondaryColorHovered": "#d5d5d5", - "secondaryColorPressed": "#ebebeb", - "semiTransparentColor1": "#ffffff18", - "semiTransparentColor2": "#ffffff23", - "semiTransparentColor3": "#ffffff28", - "semiTransparentColor4": "#ffffff2d", - "shadowColor1": "#00000066", - "shadowColor2": "#000000bb", - "shadowColor3": "#000000ff", - "statusColorError": "#ef5151", - "statusColorErrorDisabled": "#ef515133", - "statusColorErrorHovered": "#c64848", - "statusColorErrorPressed": "#da4d4d", - "statusColorForeground": "#ffffff", - "statusColorForegroundDisabled": "#ffffff26", - "statusColorForegroundHovered": "#ffffff", - "statusColorForegroundPressed": "#ffffff", - "statusColorInfo": "#4ab9e9", - "statusColorInfoDisabled": "#4ab9e933", - "statusColorInfoHovered": "#429bc1", - "statusColorInfoPressed": "#46aad6", - "statusColorSuccess": "#32cd79", - "statusColorSuccessDisabled": "#32cd7a26", - "statusColorSuccessHovered": "#2eaa68", - "statusColorSuccessPressed": "#30bc71", - "statusColorWarning": "#ffcd1e", - "statusColorWarningDisabled": "#ffcd1e33", - "statusColorWarningHovered": "#d2ab1f", - "statusColorWarningPressed": "#e9bc1f" -} diff --git a/sandbox/resources/light.json b/sandbox/resources/light.json deleted file mode 100644 index 2c7c841..0000000 --- a/sandbox/resources/light.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "backgroundColorMain1": "#ffffff", - "backgroundColorMain2": "#f3f3f3", - "backgroundColorMain3": "#e3e3e3", - "backgroundColorMain4": "#dcdcdc", - "borderColor": "#d3d3d3", - "borderColorDisabled": "#e9e9e9", - "borderColorHovered": "#b3b3b3", - "borderColorPressed": "#a3a3a3", - "focusColor": "#40a9ff66", - "meta": { - "author": "Olivier Cléro", - "name": "Light", - "version": "1.4.0" - }, - "neutralColor": "#e1e1e1", - "neutralColorDisabled": "#eeeeee", - "neutralColorHovered": "#d9d9d9", - "neutralColorPressed": "#d2d2d2", - "primaryAlternativeColor": "#106ef9", - "primaryAlternativeColorDisabled": "#a9d6ff", - "primaryAlternativeColorHovered": "#107bfd", - "primaryAlternativeColorPressed": "#108bfd", - "primaryColor": "#1890ff", - "primaryColorDisabled": "#d1e9ff", - "primaryColorForeground": "#ffffff", - "primaryColorForegroundDisabled": "#ecf6ff", - "primaryColorForegroundHovered": "#ffffff", - "primaryColorForegroundPressed": "#ffffff", - "primaryColorHovered": "#2c9dff", - "primaryColorPressed": "#40a9ff", - "secondaryAlternativeColor": "#909090", - "secondaryAlternativeColorDisabled": "#c3c3c3", - "secondaryAlternativeColorHovered": "#747474", - "secondaryAlternativeColorPressed": "#828282", - "secondaryColor": "#404040", - "secondaryColorDisabled": "#d4d4d4", - "secondaryColorForeground": "#ffffff", - "secondaryColorForegroundDisabled": "#ededed", - "secondaryColorForegroundHovered": "#ffffff", - "secondaryColorForegroundPressed": "#ffffff", - "secondaryColorHovered": "#333333", - "secondaryColorPressed": "#262626", - "semiTransparentColor1": "#0000000a", - "semiTransparentColor2": "#00000019", - "semiTransparentColor3": "#00000021", - "semiTransparentColor4": "#00000028", - "shadowColor1": "#00000020", - "shadowColor2": "#00000040", - "shadowColor3": "#00000060", - "statusColorError": "#e96b72", - "statusColorErrorDisabled": "#f9dadc", - "statusColorErrorHovered": "#f47c83", - "statusColorErrorPressed": "#ff9197", - "statusColorForeground": "#ffffff", - "statusColorForegroundDisabled": "#ffffff99", - "statusColorForegroundHovered": "#ffffff", - "statusColorForegroundPressed": "#ffffff", - "statusColorInfo": "#1ba8d5", - "statusColorInfoDisabled": "#c7eaf5", - "statusColorInfoHovered": "#1eb5e5", - "statusColorInfoPressed": "#29c0f0", - "statusColorSuccess": "#2bb5a0", - "statusColorSuccessDisabled": "#d5f0ec", - "statusColorSuccessHovered": "#3cbfab", - "statusColorSuccessPressed": "#4ecdb9", - "statusColorWarning": "#fbc064", - "statusColorWarningDisabled": "#feefd8", - "statusColorWarningHovered": "#ffcf6c", - "statusColorWarningPressed": "#ffd880" -} diff --git a/sandbox/resources/sandbox.qrc b/sandbox/resources/sandbox.qrc index 7dab1bd..694cbba 100644 --- a/sandbox/resources/sandbox.qrc +++ b/sandbox/resources/sandbox.qrc @@ -1,7 +1,7 @@ - - dark.json - light.json + + themes/dark.json + themes/light.json qlementine_icon.ico qlementine_icon.icns plus_24.svg diff --git a/sandbox/resources/themes b/sandbox/resources/themes new file mode 120000 index 0000000..afbec12 --- /dev/null +++ b/sandbox/resources/themes @@ -0,0 +1 @@ +../../showcase/resources/themes \ No newline at end of file diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index efad4a1..ae175b0 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -4,11 +4,13 @@ #include "SandboxWindow.hpp" #include +#include #include #include #include #include #include +#include #include #include #include @@ -213,8 +215,17 @@ class CustomBgWidget : public QWidget { }; struct SandboxWindow::Impl { - Impl(SandboxWindow& o) - : owner(o) {} + SandboxWindow& owner; + QPointer themeManager{ nullptr }; + + QWidget* windowContent{ nullptr }; + QBoxLayout* windowContentLayout{ nullptr }; + QScrollArea* globalScrollArea{ nullptr }; + QToolBar* toolbar{ nullptr }; + + Impl(SandboxWindow& o, ThemeManager* themeManager) + : owner(o) + , themeManager(themeManager) {} void beginSetupUI() { // Create a scrollarea to wrap everything §the window can be quite huge). @@ -250,20 +261,16 @@ struct SandboxWindow::Impl { } }); - auto* themeShortcut = new QShortcut(Qt::CTRL | Qt::Key_T, &owner); - themeShortcut->setAutoRepeat(false); - themeShortcut->setContext(Qt::ShortcutContext::ApplicationShortcut); - QObject::connect(themeShortcut, &QShortcut::activated, themeShortcut, [this]() { - const auto light = QStringLiteral(":/light.json"); - const auto dark = QStringLiteral(":/dark.json"); - if (lastJsonThemePath == dark) { - lastJsonThemePath = light; - qlementineStyle->setThemeJsonPath(light); - } else { - lastJsonThemePath = dark; - qlementineStyle->setThemeJsonPath(dark); - } - }); + if (themeManager) { + auto* themeShortcut = new QShortcut(Qt::CTRL | Qt::Key_T, &owner); + themeShortcut->setAutoRepeat(false); + themeShortcut->setContext(Qt::ShortcutContext::ApplicationShortcut); + QObject::connect(themeShortcut, &QShortcut::activated, themeShortcut, [this]() { + if (themeManager) { + themeManager->setNextTheme(); + } + }); + } auto* focusShortcut = new QShortcut(Qt::CTRL | Qt::Key_F, &owner); focusShortcut->setAutoRepeat(false); @@ -453,7 +460,7 @@ struct SandboxWindow::Impl { void setupUI_commandLinkButton() { { - const QIcon icon(":/plus_24.svg"); + const QIcon icon(":/sandbox/plus_24.svg"); auto* button = new CommandLinkButton(windowContent); button->setText("First Line with a very long text that should be cropped"); button->setDescription("Second Line that could be very long and should be cropped"); @@ -463,7 +470,7 @@ struct SandboxWindow::Impl { windowContentLayout->addWidget(button); } { - const QIcon icon(":/plus_24.svg"); + const QIcon icon(":/sandbox/plus_24.svg"); auto* button = new CommandLinkButton(windowContent); button->setText("First Line with a very long text that should be cropped"); button->setDescription("Second Line that could be very long and should be cropped"); @@ -673,7 +680,7 @@ struct SandboxWindow::Impl { constexpr auto rowCount = 3; tableView->setColumnCount(columnCount); tableView->setRowCount(rowCount); - const QIcon icon(":/scene_object.svg"); + const QIcon icon(":/sandbox/scene_object.svg"); std::vector columnAlignments; columnAlignments.resize(columnCount); @@ -716,24 +723,25 @@ struct SandboxWindow::Impl { treeWidget->setColumnCount(1); treeWidget->setHeaderHidden(true); treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows); - qlementineStyle->setAutoIconColor(treeWidget, oclero::qlementine::AutoIconColor::None); + + oclero::qlementine::appStyle()->setAutoIconColor(treeWidget, oclero::qlementine::AutoIconColor::None); for (auto i = 0; i < 3; ++i) { auto* root = new QTreeWidgetItem(treeWidget); root->setText(0, QString("Root %1").arg(i + 1)); - root->setIcon(0, QIcon(":/scene_object.svg")); + root->setIcon(0, QIcon(":/sandbox/scene_object.svg")); root->setText(1, QString("Column 2 of Root %1").arg(i + 1)); for (auto j = 0; j < 3; ++j) { auto* child = new QTreeWidgetItem(root); child->setText(0, QString("Child %1 of Root %2").arg(j).arg(i)); - child->setIcon(0, j == 2 ? QIcon(":/scene_light.svg") : QIcon(":/scene_object.svg")); + child->setIcon(0, j == 2 ? QIcon(":/sandbox/scene_light.svg") : QIcon(":/sandbox/scene_object.svg")); child->setText(1, QString("Column 2 of Child %1 of Root %2").arg(j).arg(i)); for (auto k = 0; k < 3; ++k) { auto* subChild = new QTreeWidgetItem(child); subChild->setText(0, QString("Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); - subChild->setIcon(0, QIcon(":/scene_material.svg")); + subChild->setIcon(0, QIcon(":/sandbox/scene_material.svg")); subChild->setText(1, QString("Column 2 of Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); } } @@ -898,11 +906,11 @@ struct SandboxWindow::Impl { } void setupUI_tabBar() { - const QIcon icon(":/scene_object.svg"); + const QIcon icon(":/sandbox/scene_object.svg"); auto* tabBar = new QTabBar(windowContent); tabBar->setFocusPolicy(Qt::NoFocus); tabBar->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - qlementineStyle->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::None); + oclero::qlementine::appStyle()->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::None); // QTabBar features. tabBar->setTabsClosable(true); @@ -949,7 +957,8 @@ struct SandboxWindow::Impl { } void setupUI_tabWidget() { - const QStringList icons = { ":/scene_object.svg", ":/scene_light.svg", ":/scene_material.svg" }; + const QStringList icons = { ":/sandbox/scene_object.svg", ":/sandbox/scene_light.svg", + ":/sandbox/scene_material.svg" }; auto* tabWidget = new QTabWidget(windowContent); tabWidget->setDocumentMode(false); @@ -1081,24 +1090,24 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru treeWidget->setHeaderHidden(true); treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows); treeWidget->setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection); - qlementineStyle->setAutoIconColor(treeWidget, oclero::qlementine::AutoIconColor::None); + oclero::qlementine::appStyle()->setAutoIconColor(treeWidget, oclero::qlementine::AutoIconColor::None); for (auto i = 0; i < 3; ++i) { auto* root = new QTreeWidgetItem(treeWidget); root->setText(0, QString("Root %1").arg(i + 1)); - root->setIcon(0, QIcon(":/scene_object.svg")); + root->setIcon(0, QIcon(":/sandbox/scene_object.svg")); root->setText(1, QString("Column 2 of Root %1").arg(i + 1)); for (auto j = 0; j < 3; ++j) { auto* child = new QTreeWidgetItem(root); child->setText(0, QString("Child %1 of Root %2").arg(j).arg(i)); - child->setIcon(0, j == 2 ? QIcon(":/scene_light.svg") : QIcon(":/scene_object.svg")); + child->setIcon(0, j == 2 ? QIcon(":/sandbox/scene_light.svg") : QIcon(":/sandbox/scene_object.svg")); child->setText(1, QString("Column 2 of Child %1 of Root %2").arg(j).arg(i)); for (auto k = 0; k < 3; ++k) { auto* subChild = new QTreeWidgetItem(child); subChild->setText(0, QString("Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); - subChild->setIcon(0, QIcon(":/scene_material.svg")); + subChild->setIcon(0, QIcon(":/sandbox/scene_material.svg")); subChild->setText(1, QString("Column 2 of Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); } } @@ -1592,79 +1601,66 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru windowContentLayout->addWidget(plainWidget); } - - SandboxWindow& owner; - QString lastJsonThemePath; - QPointer qlementineStyle; - - QWidget* windowContent{ nullptr }; - QBoxLayout* windowContentLayout{ nullptr }; - QScrollArea* globalScrollArea{ nullptr }; - QToolBar* toolbar{ nullptr }; }; -SandboxWindow::SandboxWindow(QWidget* parent) +SandboxWindow::SandboxWindow(ThemeManager* themeManager, QWidget* parent) : QMainWindow(parent) - , _impl(new Impl(*this)) { - setWindowIcon(QIcon(QStringLiteral(":/qlementine_icon.ico"))); + , _impl(new Impl(*this, themeManager)) { + setWindowIcon(QIcon(QStringLiteral(":/sandbox/qlementine_icon.ico"))); _impl->beginSetupUI(); { // Uncomment the line to show the corresponding widget. - // _impl->setupUI_label(); - // _impl->setupUI_button(); - // _impl->setupUI_buttonVariants(); - // _impl->setupUI_checkbox(); - // _impl->setupUI_radioButton(); - // _impl->setupUI_commandLinkButton(); - // _impl->setupUI_sliderAndProgressBar(); - // _impl->setupUI_sliderWithTicks(); - // _impl->setupUI_lineEdit(); - // _impl->setupUI_textEdit(); - // _impl->setupUI_plainTextEdit(); - // _impl->setupUI_dial(); - // _impl->setupUI_spinBox(); - // _impl->setupUI_comboBox(); - // _impl->setupUI_listView(); - // _impl->setupUI_treeWidget(); - // _impl->setupUI_table(); - // _impl->setupUI_menuBar(); - // _impl->setupUI_toolButton(); - // _impl->setupUI_toolButtonsVariants(); - // _impl->setupUI_tabBar(); - // _impl->setupUI_tabWidget(); - // _impl->setupUI_groupBox(); - // _impl->setupUI_treeView(); - // _impl->setupUI_focus(); - // _impl->setupUI_specialProgressBar(); - // _impl->setupUI_lineEditStatus(); - // _impl->setupUI_dateTimeEdit(); - // _impl->setupUI_contextMenu(); - // _impl->setupUI_fontComboBox(); - - // _impl->setupUI_switch(); - // _impl->setupUI_expander(); - // _impl->setupUI_popover(); - // _impl->setupUI_navigationBar(); - // _impl->setupUI_badge(); - // _impl->setupUI_colorButton(); - - // _impl->setupUI_messageBoxIcons(); + // _impl->setupUI_label(); + // _impl->setupUI_button(); + _impl->setupUI_buttonVariants(); + // _impl->setupUI_checkbox(); + // _impl->setupUI_radioButton(); + // _impl->setupUI_commandLinkButton(); + // _impl->setupUI_sliderAndProgressBar(); + // _impl->setupUI_sliderWithTicks(); + // _impl->setupUI_lineEdit(); + // _impl->setupUI_textEdit(); + // _impl->setupUI_plainTextEdit(); + // _impl->setupUI_dial(); + // _impl->setupUI_spinBox(); + // _impl->setupUI_comboBox(); + // _impl->setupUI_listView(); + // _impl->setupUI_treeWidget(); + // _impl->setupUI_table(); + // _impl->setupUI_menuBar(); + // _impl->setupUI_toolButton(); + // _impl->setupUI_toolButtonsVariants(); + // _impl->setupUI_tabBar(); + // _impl->setupUI_tabWidget(); + // _impl->setupUI_groupBox(); + // _impl->setupUI_treeView(); + // _impl->setupUI_focus(); + // _impl->setupUI_specialProgressBar(); + // _impl->setupUI_lineEditStatus(); + // _impl->setupUI_dateTimeEdit(); + // _impl->setupUI_contextMenu(); + // _impl->setupUI_fontComboBox(); + + // _impl->setupUI_switch(); + // _impl->setupUI_expander(); + // _impl->setupUI_popover(); + _impl->setupUI_navigationBar(); + // _impl->setupUI_badge(); + // _impl->setupUI_colorButton(); + // _impl->setupUI_messageBoxIcons(); + // _impl->setupUI_fontMetricsTests(); // _impl->setupUI_blur(); // _impl->setupUI_themeEditor(); // _impl->setupUI_messageBox(); } _impl->endSetupUI(); + oclero::qlementine::centerWidget(this); } SandboxWindow::~SandboxWindow() = default; -void SandboxWindow::setCustomStyle(QlementineStyle* style) { - _impl->qlementineStyle = style; - _impl->lastJsonThemePath = QStringLiteral(":/light.json"); -} - bool SandboxWindow::eventFilter(QObject* watched, QEvent* event) { if (event->type() == QEvent::Type::Close) { qApp->closeAllWindows(); diff --git a/sandbox/src/SandboxWindow.hpp b/sandbox/src/SandboxWindow.hpp index 4c1a4ea..4acbc24 100644 --- a/sandbox/src/SandboxWindow.hpp +++ b/sandbox/src/SandboxWindow.hpp @@ -7,16 +7,15 @@ namespace oclero::qlementine { class QlementineStyle; -} +class ThemeManager; +} // namespace oclero::qlementine namespace oclero::qlementine::sandbox { class SandboxWindow : public QMainWindow { public: - SandboxWindow(QWidget* parent = nullptr); + SandboxWindow(ThemeManager* themeManager = nullptr, QWidget* parent = nullptr); ~SandboxWindow(); - void setCustomStyle(QlementineStyle* style); - bool eventFilter(QObject* watched, QEvent* event) override; private: diff --git a/sandbox/src/main.cpp b/sandbox/src/main.cpp index 01bf2b1..a2bc3b3 100644 --- a/sandbox/src/main.cpp +++ b/sandbox/src/main.cpp @@ -2,11 +2,9 @@ // SPDX-License-Identifier: MIT #include -#include -#include #include -#include +#include #include "SandboxWindow.hpp" @@ -19,9 +17,9 @@ int main(int argc, char* argv[]) { QApplication qApplication(argc, argv); // Must be set after creating a QApplication. - QGuiApplication::setApplicationDisplayName("sandbox"); - QCoreApplication::setApplicationName("sandbox"); - QGuiApplication::setDesktopFileName("sandbox"); + QGuiApplication::setApplicationDisplayName("Sandbox"); + QCoreApplication::setApplicationName("Sandbox"); + QGuiApplication::setDesktopFileName("Sandbox"); QCoreApplication::setOrganizationName("oclero"); QCoreApplication::setOrganizationDomain("olivierclero.com"); QCoreApplication::setApplicationVersion("1.0.0"); @@ -29,19 +27,25 @@ int main(int argc, char* argv[]) { // Set custom QStyle. #if USE_CUSTOM_STYLE - auto* const style = new oclero::qlementine::QlementineStyle(&qApplication); + oclero::qlementine::ThemeManager* themeManager{ nullptr }; + + auto* style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); - style->setThemeJsonPath(QStringLiteral(":/light.json")); qApplication.setStyle(style); -#endif - auto window = std::make_unique(); -#if USE_CUSTOM_STYLE - window->setCustomStyle(style); + // Custom icon theme. + QIcon::setThemeName("qlementine"); + + // Theme manager. + themeManager = new oclero::qlementine::ThemeManager(style); + themeManager->loadDirectory(":/showcase/themes"); + + // Define theme on QStyle. + themeManager->setCurrentTheme("Light"); #endif - oclero::qlementine::centerWidget(window.get()); + auto window = std::make_unique(themeManager); window->show(); return qApplication.exec(); diff --git a/showcase/resources/themes/dark.json b/showcase/resources/themes/dark.json index f330d7e..5921357 100644 --- a/showcase/resources/themes/dark.json +++ b/showcase/resources/themes/dark.json @@ -1,71 +1,91 @@ { - "backgroundColorMain1": "#1f1f1f", - "backgroundColorMain2": "#2a2a2a", - "backgroundColorMain3": "#363636", - "backgroundColorMain4": "#414141", - "borderColor": "#4b4b4b", - "borderColorDisabled": "#444444", - "borderColorHovered": "#717171", - "borderColorPressed": "#a0a0a0", - "focusColor": "#34988666", "meta": { "author": "Olivier Cléro", "name": "Dark", - "version": "1.4.1" + "version": "1.5.0" }, - "neutralColor": "#565656", - "neutralColorDisabled": "#353535", - "neutralColorHovered": "#4c4c4c", - "neutralColorPressed": "#404040", - "primaryAlternativeColor": "#126d5d", - "primaryAlternativeColorDisabled": "#1C3B36", - "primaryAlternativeColorHovered": "#0d6354", - "primaryAlternativeColorPressed": "#177665", - "primaryColor": "#349886", - "primaryColorDisabled": "#2c403c", + + "backgroundColorMain1": "#1f2127", + "backgroundColorMain2": "#282b33", + "backgroundColorMain3": "#333848", + "backgroundColorMain4": "#333848", + + "backgroundColorWorkspace": "#17181c", + "backgroundColorTabBar": "#1e2026", + + "borderColor": "#40485a", + "borderColorHovered": "#4a5670", + "borderColorPressed": "#5b6e98", + "borderColorDisabled": "#2f343f", + + "focusColor": "#3097ff6a", + + "neutralColor": "#4c5368", + "neutralColorHovered": "#535c78", + "neutralColorPressed": "#5b6688", + "neutralColorDisabled": "#2d313b", + + "primaryColor": "#5086ff", + "primaryColorHovered": "#6494ff", + "primaryColorPressed": "#7aa3ff", + "primaryColorDisabled": "#2c3448", + + "primaryAlternativeColor": "#3161f8", + "primaryAlternativeColorHovered": "#4571fe", + "primaryAlternativeColorPressed": "#5a82ff", + "primaryAlternativeColorDisabled": "#293346", + "primaryColorForeground": "#ffffff", - "primaryColorForegroundDisabled": "#3a534d", "primaryColorForegroundHovered": "#ffffff", "primaryColorForegroundPressed": "#ffffff", - "primaryColorHovered": "#2a7a6b", - "primaryColorPressed": "#2f8979", - "secondaryAlternativeColor": "#8f8f8f", - "secondaryAlternativeColorDisabled": "#8f8f8f3f", - "secondaryAlternativeColorHovered": "#797979", - "secondaryAlternativeColorPressed": "#848484", + "primaryColorForegroundDisabled": "#455170", + "secondaryColor": "#ffffff", - "secondaryColorDisabled": "#ffffff33", - "secondaryColorForeground": "#2f2f2f", - "secondaryColorForegroundDisabled": "#2f2f2f", - "secondaryColorForegroundHovered": "#2f2f2f", - "secondaryColorForegroundPressed": "#2f2f2f", "secondaryColorHovered": "#d5d5d5", "secondaryColorPressed": "#ebebeb", - "semiTransparentColor1": "#ffffff18", - "semiTransparentColor2": "#ffffff23", - "semiTransparentColor3": "#ffffff28", - "semiTransparentColor4": "#ffffff2d", + "secondaryColorDisabled": "#ffffff33", + + "secondaryAlternativeColor": "#67718d", + "secondaryAlternativeColorHovered": "#8b93ab", + "secondaryAlternativeColorPressed": "#9ca4bc", + "secondaryAlternativeColorDisabled": "#575f763f", + + "secondaryColorForeground": "#282b33", + "secondaryColorForegroundHovered": "#282b33", + "secondaryColorForegroundPressed": "#282b33", + "secondaryColorForegroundDisabled": "#282b333f", + + "semiTransparentColor1": "#b7c9ff18", + "semiTransparentColor2": "#b7c9ff23", + "semiTransparentColor3": "#b7c9ff28", + "semiTransparentColor4": "#b7c9ff2d", + "shadowColor1": "#00000066", "shadowColor2": "#000000bb", "shadowColor3": "#000000ff", - "statusColorError": "#ef5151", - "statusColorErrorDisabled": "#ef515133", - "statusColorErrorHovered": "#c64848", - "statusColorErrorPressed": "#da4d4d", + "statusColorForeground": "#ffffff", - "statusColorForegroundDisabled": "#ffffff26", "statusColorForegroundHovered": "#ffffff", "statusColorForegroundPressed": "#ffffff", - "statusColorInfo": "#4ab9e9", - "statusColorInfoDisabled": "#4ab9e933", - "statusColorInfoHovered": "#429bc1", - "statusColorInfoPressed": "#46aad6", - "statusColorSuccess": "#32cd79", - "statusColorSuccessDisabled": "#32cd7a26", - "statusColorSuccessHovered": "#2eaa68", - "statusColorSuccessPressed": "#30bc71", - "statusColorWarning": "#ffcd1e", - "statusColorWarningDisabled": "#ffcd1e33", - "statusColorWarningHovered": "#d2ab1f", - "statusColorWarningPressed": "#e9bc1f" + "statusColorForegroundDisabled": "#ffffff26", + + "statusColorError": "#e96b72", + "statusColorErrorHovered": "#f47c83", + "statusColorErrorPressed": "#ff9197", + "statusColorErrorDisabled": "#3f333b", + + "statusColorInfo": "#1ba8d5", + "statusColorInfoHovered": "#1eb5e5", + "statusColorInfoPressed": "#29c0f0", + "statusColorInfoDisabled": "#283345", + + "statusColorSuccess": "#2bb5a0", + "statusColorSuccessHovered": "#3cbfab", + "statusColorSuccessPressed": "#4ecdb9", + "statusColorSuccessDisabled": "#28363c", + + "statusColorWarning": "#fbc064", + "statusColorWarningHovered": "#ffcf6c", + "statusColorWarningPressed": "#ffd880", + "statusColorWarningDisabled": "#393737" } diff --git a/showcase/resources/themes/light.json b/showcase/resources/themes/light.json index 2c7c841..963e6a6 100644 --- a/showcase/resources/themes/light.json +++ b/showcase/resources/themes/light.json @@ -1,71 +1,91 @@ { + "meta": { + "author": "Olivier Cléro", + "name": "Light", + "version": "1.5.0" + }, + "backgroundColorMain1": "#ffffff", "backgroundColorMain2": "#f3f3f3", "backgroundColorMain3": "#e3e3e3", - "backgroundColorMain4": "#dcdcdc", + "backgroundColorMain4": "#dfdfdf", + + "backgroundColorWorkspace": "#b7b7b7", + "backgroundColorTabBar": "#dfdfdf", + "borderColor": "#d3d3d3", "borderColorDisabled": "#e9e9e9", "borderColorHovered": "#b3b3b3", "borderColorPressed": "#a3a3a3", + "focusColor": "#40a9ff66", - "meta": { - "author": "Olivier Cléro", - "name": "Light", - "version": "1.4.0" - }, - "neutralColor": "#e1e1e1", + + "neutralColor": "#d1d1d1", + "neutralColorHovered": "#d3d3d3", + "neutralColorPressed": "#d5d5d5", "neutralColorDisabled": "#eeeeee", - "neutralColorHovered": "#d9d9d9", - "neutralColorPressed": "#d2d2d2", + + "primaryColor": "#1890ff", + "primaryColorHovered": "#2c9dff", + "primaryColorPressed": "#40a9ff", + "primaryColorDisabled": "#d1e9ff", + "primaryAlternativeColor": "#106ef9", "primaryAlternativeColorDisabled": "#a9d6ff", "primaryAlternativeColorHovered": "#107bfd", "primaryAlternativeColorPressed": "#108bfd", - "primaryColor": "#1890ff", - "primaryColorDisabled": "#d1e9ff", + "primaryColorForeground": "#ffffff", "primaryColorForegroundDisabled": "#ecf6ff", "primaryColorForegroundHovered": "#ffffff", "primaryColorForegroundPressed": "#ffffff", - "primaryColorHovered": "#2c9dff", - "primaryColorPressed": "#40a9ff", + + "secondaryColor": "#404040", + "secondaryColorHovered": "#333333", + "secondaryColorPressed": "#262626", + "secondaryColorDisabled": "#d4d4d4", + "secondaryAlternativeColor": "#909090", "secondaryAlternativeColorDisabled": "#c3c3c3", "secondaryAlternativeColorHovered": "#747474", "secondaryAlternativeColorPressed": "#828282", - "secondaryColor": "#404040", - "secondaryColorDisabled": "#d4d4d4", + "secondaryColorForeground": "#ffffff", "secondaryColorForegroundDisabled": "#ededed", "secondaryColorForegroundHovered": "#ffffff", "secondaryColorForegroundPressed": "#ffffff", - "secondaryColorHovered": "#333333", - "secondaryColorPressed": "#262626", + "semiTransparentColor1": "#0000000a", "semiTransparentColor2": "#00000019", "semiTransparentColor3": "#00000021", "semiTransparentColor4": "#00000028", + "shadowColor1": "#00000020", "shadowColor2": "#00000040", "shadowColor3": "#00000060", + "statusColorError": "#e96b72", - "statusColorErrorDisabled": "#f9dadc", "statusColorErrorHovered": "#f47c83", "statusColorErrorPressed": "#ff9197", + "statusColorErrorDisabled": "#f9dadc", + "statusColorForeground": "#ffffff", - "statusColorForegroundDisabled": "#ffffff99", "statusColorForegroundHovered": "#ffffff", "statusColorForegroundPressed": "#ffffff", + "statusColorForegroundDisabled": "#ffffff99", + "statusColorInfo": "#1ba8d5", - "statusColorInfoDisabled": "#c7eaf5", "statusColorInfoHovered": "#1eb5e5", "statusColorInfoPressed": "#29c0f0", + "statusColorInfoDisabled": "#c7eaf5", + "statusColorSuccess": "#2bb5a0", - "statusColorSuccessDisabled": "#d5f0ec", "statusColorSuccessHovered": "#3cbfab", "statusColorSuccessPressed": "#4ecdb9", + "statusColorSuccessDisabled": "#d5f0ec", + "statusColorWarning": "#fbc064", - "statusColorWarningDisabled": "#feefd8", "statusColorWarningHovered": "#ffcf6c", - "statusColorWarningPressed": "#ffd880" + "statusColorWarningPressed": "#ffd880", + "statusColorWarningDisabled": "#feefd8" } diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index 7b4aa6e..beef36e 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + #include "ShowcaseWindow.hpp" #include @@ -67,7 +70,7 @@ class DummyWorkspace : public QWidget { QColor backgroundColor; if (const auto* qlementine_style = qlementine::appStyle()) { const auto theme = qlementine_style->theme(); - backgroundColor = theme.backgroundColorMain4.darker(110); + backgroundColor = theme.backgroundColorWorkspace; } p.fillRect(rect(), backgroundColor); } @@ -157,16 +160,20 @@ struct ShowcaseWindow::Impl { } void setTheme(const QString& theme) { - themeManager->setCurrentTheme(theme); + if (themeManager) { + themeManager->setCurrentTheme(theme); + } } void switchTheme() { - themeManager->setNextTheme(); + if (themeManager) { + themeManager->setNextTheme(); + } } void updateThemeSwitch() { themeSwitch->blockSignals(true); - themeSwitch->setChecked(themeManager->currentTheme() == "Dark"); + themeSwitch->setChecked(themeManager ? themeManager->currentTheme() == "Dark" : false); themeSwitch->blockSignals(false); } @@ -233,34 +240,37 @@ struct ShowcaseWindow::Impl { menu->addAction( makeQIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); - auto* themeMenu = menu->addMenu("Theme"); - auto* themeActionGroup = new QActionGroup(themeMenu); - themeActionGroup->setExclusive(true); - const auto& themes = themeManager->themes(); - const auto currentTheme = themeManager->currentTheme(); - - for (const auto& theme : themes) { - const auto name = theme.meta.name; - auto* action = themeMenu->addAction(name); - action->setCheckable(true); - themeActionGroup->addAction(action); - action->setChecked(name == currentTheme); - - QObject::connect(action, &QAction::triggered, action, [this, name](auto checked) { - if (checked) { - setTheme(name); - } - }); - QObject::connect( - themeManager, &oclero::qlementine::ThemeManager::currentThemeChanged, action, [this, name, action]() { - action->setChecked(name == themeManager->currentTheme()); + if (themeManager) { + auto* themeMenu = menu->addMenu("Theme"); + auto* themeActionGroup = new QActionGroup(themeMenu); + themeActionGroup->setExclusive(true); + + const auto& themes = themeManager->themes(); + const auto currentTheme = themeManager->currentTheme(); + + for (const auto& theme : themes) { + const auto name = theme.meta.name; + auto* action = themeMenu->addAction(name); + action->setCheckable(true); + themeActionGroup->addAction(action); + action->setChecked(name == currentTheme); + + QObject::connect(action, &QAction::triggered, action, [this, name](auto checked) { + if (checked) { + setTheme(name); + } }); - } + QObject::connect( + themeManager, &oclero::qlementine::ThemeManager::currentThemeChanged, action, [this, name, action]() { + action->setChecked(name == themeManager->currentTheme()); + }); + } - themeMenu->addSeparator(); - themeMenu->addAction("Switch Theme", { Qt::CTRL | Qt::Key_T }, [this]() { - switchTheme(); - }); + themeMenu->addSeparator(); + themeMenu->addAction("Switch Theme", { Qt::CTRL | Qt::Key_T }, [this]() { + switchTheme(); + }); + } } } { @@ -598,6 +608,13 @@ struct ShowcaseWindow::Impl { dateTimeEdit->setCalendarPopup(true); groupBoxLayout->addRow(getDummyText(1, 1) + ":", dateTimeEdit); } + { + auto* lineEdit = new QLineEdit(groupBox); + lineEdit->setPlaceholderText("Enter text..."); + lineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + lineEdit->setClearButtonEnabled(true); + groupBoxLayout->addRow(getDummyText(1, 1) + ":", lineEdit); + } contentLayout->addRow(groupBox); } { @@ -661,7 +678,6 @@ struct ShowcaseWindow::Impl { void setupSplitter() { splitter = new QSplitter(&owner); - splitter->setHandleWidth(1); splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); splitter->setOrientation(Qt::Horizontal); splitter->addWidget(leftPanel); @@ -682,7 +698,8 @@ struct ShowcaseWindow::Impl { { auto* progressBar = new QProgressBar(statusBar); progressBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - progressBar->setValue(80); + progressBar->setTextVisible(false); + progressBar->setRange(0, 0); statusBar->addPermanentWidget(progressBar); } } diff --git a/showcase/src/ShowcaseWindow.hpp b/showcase/src/ShowcaseWindow.hpp index 2c0d6b8..6c93088 100644 --- a/showcase/src/ShowcaseWindow.hpp +++ b/showcase/src/ShowcaseWindow.hpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + #pragma once #include @@ -12,7 +15,7 @@ class ThemeManager; namespace oclero::qlementine::showcase { class ShowcaseWindow : public QWidget { public: - ShowcaseWindow(ThemeManager* themeManager, QWidget* parent = nullptr); + ShowcaseWindow(ThemeManager* themeManager = nullptr, QWidget* parent = nullptr); ~ShowcaseWindow(); private: diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp index 1cc45a0..282218a 100644 --- a/showcase/src/main.cpp +++ b/showcase/src/main.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Olivier Cléro +// SPDX-License-Identifier: MIT + #include #include @@ -22,9 +25,9 @@ int main(int argc, char* argv[]) { QCoreApplication::setApplicationVersion("1.0.0"); QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); +#if USE_CUSTOM_STYLE oclero::qlementine::ThemeManager* themeManager{ nullptr }; -#if USE_CUSTOM_STYLE // Custom QStyle. auto* style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); From 85fd01df2af9bf3cef70c0e7bbd1db326bf43995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Thu, 21 Nov 2024 23:32:30 +0100 Subject: [PATCH 41/45] Fix alignment for QMenu items without icon --- lib/src/style/QlementineStyle.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index ec97fb4..9de4845 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -1435,6 +1435,7 @@ void QlementineStyle::drawControl(ControlElement ce, const QStyleOption* opt, QP } // Icon. + const auto iconSpace = optMenuItem->maxIconWidth > 0 ? optMenuItem->maxIconWidth + spacing : 0; const auto pixmap = getPixmap(optMenuItem->icon, _impl->theme.iconSize, mouse, checkState, w); if (!pixmap.isNull()) { const auto& colorizedPixmap = getColorizedPixmap(pixmap, autoIconColor(w), fgColor, fgColor); @@ -1445,11 +1446,9 @@ void QlementineStyle::drawControl(ControlElement ce, const QStyleOption* opt, QP const auto pixmapY = fgRect.y() + (fgRect.height() - pixmapH) / 2; const auto pixmapRect = QRect{ pixmapX, pixmapY, pixmapW, pixmapH }; p->drawPixmap(pixmapRect, colorizedPixmap); - - const auto taken = pixmapW + spacing; - availableW -= taken; - availableX += taken; } + availableW -= iconSpace; + availableX += iconSpace; // Shortcut text. if (!shortcut.isEmpty()) { From 740354f7d4e6990651e5dcd1375ef8a7addb44c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 24 Nov 2024 21:03:19 +0100 Subject: [PATCH 42/45] Make dependency qlementine_icons not mandatory --- CMakeLists.txt | 9 +- CMakePresets.json | 12 +- lib/CMakeLists.txt | 10 - .../qlementine/style/QlementineStyle.hpp | 11 +- .../oclero/qlementine/utils/IconUtils.hpp | 10 - lib/src/style/EventFilters.cpp | 52 +- lib/src/style/QlementineStyle.cpp | 213 +---- lib/src/style/ThemeManager.cpp | 3 + lib/src/utils/IconUtils.cpp | 10 - sandbox/resources/plus_24.svg | 1 - sandbox/resources/sandbox.qrc | 7 +- sandbox/resources/scene_light.svg | 1 - sandbox/resources/scene_material.svg | 1 - sandbox/resources/scene_object.svg | 1 - sandbox/resources/test_image_16x16.svg | 1 + sandbox/resources/test_image_24x24.svg | 1 + sandbox/resources/test_image_color_16x16.svg | 1 + sandbox/src/CsdWindow.cpp | 766 ------------------ sandbox/src/CsdWindow.hpp | 25 - sandbox/src/SandboxWindow.cpp | 100 +-- sandbox/src/main.cpp | 9 +- showcase/CMakeLists.txt | 12 + showcase/resources/icons/cube-green.svg | 1 + showcase/resources/icons/cube-red.svg | 1 + showcase/resources/icons/cube-yellow.svg | 1 + showcase/resources/icons/scene_light.svg | 1 - showcase/resources/icons/scene_material.svg | 1 - showcase/resources/icons/scene_object.svg | 1 - showcase/resources/showcase.qrc | 18 +- showcase/src/ShowcaseWindow.cpp | 98 ++- showcase/src/main.cpp | 7 +- 31 files changed, 231 insertions(+), 1154 deletions(-) delete mode 100644 sandbox/resources/plus_24.svg delete mode 100644 sandbox/resources/scene_light.svg delete mode 100644 sandbox/resources/scene_material.svg delete mode 100644 sandbox/resources/scene_object.svg create mode 100644 sandbox/resources/test_image_16x16.svg create mode 100644 sandbox/resources/test_image_24x24.svg create mode 100644 sandbox/resources/test_image_color_16x16.svg delete mode 100644 sandbox/src/CsdWindow.cpp delete mode 100644 sandbox/src/CsdWindow.hpp create mode 100644 showcase/resources/icons/cube-green.svg create mode 100644 showcase/resources/icons/cube-red.svg create mode 100644 showcase/resources/icons/cube-yellow.svg delete mode 100644 showcase/resources/icons/scene_light.svg delete mode 100644 showcase/resources/icons/scene_material.svg delete mode 100644 showcase/resources/icons/scene_object.svg diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b816c4..bb53cc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,13 +41,14 @@ endif() find_package(Qt6 REQUIRED COMPONENTS Core Widgets Svg) qt_standard_project_setup() -# include(DeployQt) - # The library. add_subdirectory(lib) -# Sandbox. -if(${PROJECT_IS_TOP_LEVEL}) +# Example apps using the lib. +if(QLEMENTINE_SANDBOX) add_subdirectory(sandbox) +endif() + +if(QLEMENTINE_SHOWCASE) add_subdirectory(showcase) endif() diff --git a/CMakePresets.json b/CMakePresets.json index 2ae3f20..d18512e 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -13,7 +13,9 @@ "generator": "Xcode", "binaryDir": "${sourceDir}/_build", "cacheVariables": { - "CMAKE_PREFIX_PATH": "/opt/homebrew/opt/qt/lib/cmake/Qt6" + "CMAKE_PREFIX_PATH": "/opt/homebrew/opt/qt/lib/cmake/Qt6", + "QLEMENTINE_SANDBOX": true, + "QLEMENTINE_SHOWCASE": true }, "condition": { "type": "equals", @@ -28,7 +30,9 @@ "generator": "Visual Studio 17 2022", "binaryDir": "${sourceDir}/_build", "cacheVariables": { - "CMAKE_PREFIX_PATH": "C:/Qt/6.8.0/msvc2022_64" + "CMAKE_PREFIX_PATH": "C:/Qt/6.8.0/msvc2022_64", + "QLEMENTINE_SANDBOX": true, + "QLEMENTINE_SHOWCASE": true }, "condition": { "type": "equals", @@ -42,6 +46,10 @@ "description": "Makefile for Linux", "generator": "Unix Makefiles", "binaryDir": "${sourceDir}/_build", + "cacheVariables": { + "QLEMENTINE_SANDBOX": true, + "QLEMENTINE_SHOWCASE": true + }, "condition": { "type": "equals", "lhs": "${hostSystemName}", diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index e3610ab..05ee9a6 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,14 +1,5 @@ set(LIB_TARGET_NAME ${PROJECT_NAME}) -# Dependency: qlementine-icons -include(FetchContent) -FetchContent_Declare(qlementine_icons GIT_REPOSITORY "https://github.com/oclero/qlementine-icons.git") -FetchContent_MakeAvailable(qlementine_icons) -set_target_properties(qlementine_icons - PROPERTIES - FOLDER dependencies -) - # Declare files. set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/animation/WidgetAnimator.cpp @@ -140,7 +131,6 @@ target_link_libraries(${LIB_TARGET_NAME} Qt::Core Qt::Widgets Qt::Svg - oclero::qlementine_icons ) set_target_properties(${LIB_TARGET_NAME} diff --git a/lib/include/oclero/qlementine/style/QlementineStyle.hpp b/lib/include/oclero/qlementine/style/QlementineStyle.hpp index 67eaa34..45d1256 100644 --- a/lib/include/oclero/qlementine/style/QlementineStyle.hpp +++ b/lib/include/oclero/qlementine/style/QlementineStyle.hpp @@ -72,8 +72,12 @@ class QlementineStyle : public QCommonStyle { QIcon makeThemedIcon( const QString& svgPath, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary) const; - QIcon makeThemedIcon( - icons::Icons16 id, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary) const; + + QIcon makeThemedIconFromName( + const QString& name, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary) const; + + // Allows to customize quickly the way QlementineStyle gets its icons. SVG paths preferred. + void setIconPathGetter(const std::function& func); public: // QStyle overrides. void drawPrimitive( @@ -289,7 +293,4 @@ class QlementineStyle : public QCommonStyle { }; QlementineStyle* appStyle(); - -QIcon makeThemedIcon(icons::Icons16 id, const QSize& size = QSize(16, 16), ColorRole role = ColorRole::Secondary); - } // namespace oclero::qlementine diff --git a/lib/include/oclero/qlementine/utils/IconUtils.hpp b/lib/include/oclero/qlementine/utils/IconUtils.hpp index 2fa33ec..bdc6e16 100644 --- a/lib/include/oclero/qlementine/utils/IconUtils.hpp +++ b/lib/include/oclero/qlementine/utils/IconUtils.hpp @@ -6,10 +6,6 @@ #include #include -#include -#include -#include - namespace oclero::qlementine { struct IconTheme { QColor normal; @@ -30,10 +26,4 @@ struct IconTheme { /// Makes an icon from the file located at the path in parameter and colorizes the QPixmaps. Fixes the standard Qt behavior. [[maybe_unused]] QIcon makeIconFromSvg( const QString& svgPath, const IconTheme& iconTheme, const QSize& size = QSize(16, 16)); - -[[maybe_unused]] QIcon makeIconFromSvg(icons::Icons16 id, const QSize& size = QSize(16, 16)); - -/// Makes an icon from the icon ID in parameter and colorizes the QPixmaps. Fixes the standard Qt behavior. -[[maybe_unused]] QIcon makeIconFromSvg( - icons::Icons16 id, const IconTheme& iconTheme, const QSize& size = QSize(16, 16)); } // namespace oclero::qlementine diff --git a/lib/src/style/EventFilters.cpp b/lib/src/style/EventFilters.cpp index 48cf372..e904bc3 100644 --- a/lib/src/style/EventFilters.cpp +++ b/lib/src/style/EventFilters.cpp @@ -9,8 +9,6 @@ #include #include -#include - #include #include #include @@ -522,45 +520,48 @@ class LineEditMenuIconsBehavior : public QObject { }; static std::vector iconList(IconListMode mode) { - using Icons16 = icons::Icons16; + const auto* qlem = oclero::qlementine::appStyle(); + if (!qlem) + return {}; + // The order follows the one defined QLineEdit.cpp and QSpinBox.cpp (Qt6). switch (mode) { case IconListMode::LineEdit: return { QIcon(), // Separator - makeThemedIcon(Icons16::Action_Undo), - makeThemedIcon(Icons16::Action_Redo), + qlem->makeThemedIconFromName("edit-undo"), + qlem->makeThemedIconFromName("edit-redo"), QIcon(), // Separator - makeThemedIcon(Icons16::Action_Cut), - makeThemedIcon(Icons16::Action_Copy), - makeThemedIcon(Icons16::Action_Paste), - makeThemedIcon(Icons16::Action_Erase), + qlem->makeThemedIconFromName("edit-cut"), + qlem->makeThemedIconFromName("edit-copy"), + qlem->makeThemedIconFromName("edit-paste"), + qlem->makeThemedIconFromName("edit-delete"), QIcon(), // Separator - makeThemedIcon(Icons16::Action_SelectAll), + qlem->makeThemedIconFromName("edit-select-all"), }; case IconListMode::ReadOnlyLineEdit: return { QIcon(), // Separator - makeThemedIcon(Icons16::Action_Copy), + qlem->makeThemedIconFromName("edit-copy"), QIcon(), // Separator - makeThemedIcon(Icons16::Action_SelectAll), + qlem->makeThemedIconFromName("edit-select-all"), }; case IconListMode::SpinBox: return { QIcon(), // Separator - makeThemedIcon(Icons16::Action_Undo), - makeThemedIcon(Icons16::Action_Redo), + qlem->makeThemedIconFromName("edit-undo"), + qlem->makeThemedIconFromName("edit-redo"), QIcon(), // Separator - makeThemedIcon(Icons16::Action_Cut), - makeThemedIcon(Icons16::Action_Copy), - makeThemedIcon(Icons16::Action_Paste), - makeThemedIcon(Icons16::Action_Erase), + qlem->makeThemedIconFromName("edit-cut"), + qlem->makeThemedIconFromName("edit-copy"), + qlem->makeThemedIconFromName("edit-paste"), + qlem->makeThemedIconFromName("edit-delete"), QIcon(), // Separator QIcon(), // Separator - makeThemedIcon(Icons16::Action_SelectAll), + qlem->makeThemedIconFromName("edit-select-all"), QIcon(), // Separator - makeThemedIcon(Icons16::Navigation_ChevronUp), - makeThemedIcon(Icons16::Navigation_ChevronDown), + qlem->makeThemedIconFromName("go-up"), + qlem->makeThemedIconFromName("go-down"), }; default: return {}; @@ -582,12 +583,15 @@ class LineEditMenuIconsBehavior : public QObject { const auto actions = _menu->findChildren(); if (!actions.empty()) { const auto icons = iconList(getMode(_menu)); - for (auto i = 0; i < static_cast(icons.size()) && i < static_cast(actions.size()); ++i) { - if (auto* action = actions.at(i)) { - action->setIcon(icons.at(i)); + if (!icons.empty()) { + for (auto i = 0; i < static_cast(icons.size()) && i < static_cast(actions.size()); ++i) { + if (auto* action = actions.at(i)) { + action->setIcon(icons.at(i)); + } } } } + _menu->adjustSize(); } public: diff --git a/lib/src/style/QlementineStyle.cpp b/lib/src/style/QlementineStyle.cpp index 9de4845..a2ad7d5 100644 --- a/lib/src/style/QlementineStyle.cpp +++ b/lib/src/style/QlementineStyle.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include "EventFilters.hpp" @@ -66,14 +65,6 @@ QlementineStyle* appStyle() { return qobject_cast(qApp->style()); } -QIcon makeThemedIcon(icons::Icons16 id, const QSize& size, ColorRole role) { - if (const auto* style = appStyle()) { - return style->makeThemedIcon(id, size, role); - } else { - return makeIconFromSvg(id, size); - } -} - /// Used to initializeResources from .qrc only once. std::once_flag qlementineOnceFlag; @@ -256,13 +247,13 @@ struct QlementineStyleImpl { std::unordered_map standardIconCache; std::unordered_map standardIconExtCache; AutoIconColor autoIconColor{ AutoIconColor::None }; + std::function iconPathFunc; }; QlementineStyle::QlementineStyle(QObject* parent) : _impl(new QlementineStyleImpl{ *this }) { setParent(parent); setObjectName(QStringLiteral("QlementineStyle")); - oclero::qlementine::icons::initializeIconTheme(); triggerCompleteRepaint(); } @@ -371,9 +362,17 @@ QIcon QlementineStyle::makeThemedIcon(const QString& svgPath, const QSize& size, return makeIconFromSvg(svgPath, iconTheme, size); } -QIcon QlementineStyle::makeThemedIcon(icons::Icons16 id, const QSize& size, ColorRole role) const { - const auto iconTheme = _impl->iconThemeFromTheme(role); - return makeIconFromSvg(id, iconTheme, size); +QIcon QlementineStyle::makeThemedIconFromName(const QString& name, const QSize& size, ColorRole role) const { + if (_impl->iconPathFunc) { + const auto iconPath = _impl->iconPathFunc(name); + return makeThemedIcon(iconPath, size, role); + } else { + return QIcon::fromTheme(name); + } +} + +void QlementineStyle::setIconPathGetter(const std::function& func) { + _impl->iconPathFunc = func; } /* QStyle overrides. */ @@ -1832,31 +1831,31 @@ void QlementineStyle::drawControl(ControlElement ce, const QStyleOption* opt, QP p->fillRect(line_rect, lineColor); } return; - case CE_RubberBand: - break; - case CE_DockWidgetTitle: - break; - case CE_ScrollBarAddLine: - // TODO - break; - case CE_ScrollBarSubLine: - // TODO - break; - case CE_ScrollBarAddPage: - // TODO - break; - case CE_ScrollBarSubPage: - // TODO - break; - case CE_ScrollBarSlider: - // TODO - break; - case CE_ScrollBarFirst: - // TODO - break; - case CE_ScrollBarLast: - // TODO - break; + // case CE_RubberBand: + // break; + // case CE_DockWidgetTitle: + // break; + // case CE_ScrollBarAddLine: + // // TODO + // break; + // case CE_ScrollBarSubLine: + // // TODO + // break; + // case CE_ScrollBarAddPage: + // // TODO + // break; + // case CE_ScrollBarSubPage: + // // TODO + // break; + // case CE_ScrollBarSlider: + // // TODO + // break; + // case CE_ScrollBarFirst: + // // TODO + // break; + // case CE_ScrollBarLast: + // // TODO + // break; case CE_FocusFrame: if (const auto* focusFrame = qobject_cast(w)) { const auto* monitoredWidget = focusFrame->widget(); @@ -4583,144 +4582,6 @@ QIcon QlementineStyle::standardIcon(StandardPixmap sp, const QStyleOption* opt, case SP_ArrowRight: case SP_LineEditClearButton: return _impl->getStandardIcon(sp, _impl->theme.iconSize); - // case SP_TitleBarMenuButton: - // break; - // case SP_TitleBarMinButton: - // break; - // case SP_TitleBarMaxButton: - // break; - // case SP_TitleBarCloseButton: - // break; - // case SP_TitleBarNormalButton: - // break; - // case SP_TitleBarShadeButton: - // break; - // case SP_TitleBarUnshadeButton: - // break; - // case SP_TitleBarContextHelpButton: - // break; - // case SP_DockWidgetCloseButton: - // break; - // case SP_DesktopIcon: - // break; - case SP_TrashIcon: - return makeIconFromSvg(icons::Icons16::Action_Trash, _impl->iconThemeFromTheme(), _impl->theme.iconSize); - // case SP_ComputerIcon: - // break; - // case SP_DriveFDIcon: - // break; - // case SP_DriveHDIcon: - // break; - // case SP_DriveCDIcon: - // break; - // case SP_DriveDVDIcon: - // break; - // case SP_DriveNetIcon: - // break; - // case SP_DirOpenIcon: - // break; - // case SP_DirClosedIcon: - // break; - // case SP_DirLinkIcon: - // break; - // case SP_DirLinkOpenIcon: - // break; - // case SP_FileIcon: - // break; - // case SP_FileLinkIcon: - // break; - // case SP_FileDialogStart: - // break; - // case SP_FileDialogEnd: - // break; - // case SP_FileDialogToParent: - // break; - // case SP_FileDialogNewFolder: - // break; - // case SP_FileDialogDetailedView: - // break; - // case SP_FileDialogInfoView: - // break; - // case SP_FileDialogContentsView: - // break; - // case SP_FileDialogListView: - // break; - // case SP_FileDialogBack: - // break; - // case SP_DirIcon: - // break; - // case SP_DialogOkButton: - // break; - // case SP_DialogCancelButton: - // break; - // case SP_DialogHelpButton: - // break; - // case SP_DialogOpenButton: - // break; - // case SP_DialogSaveButton: - // break; - // case SP_DialogCloseButton: - // break; - // case SP_DialogApplyButton: - // break; - // case SP_DialogResetButton: - // break; - // case SP_DialogDiscardButton: - // break; - // case SP_DialogYesButton: - // break; - // case SP_DialogNoButton: - // break; - // case SP_DialogYesToAllButton: - // break; - // case SP_DialogNoToAllButton: - // break; - // case SP_DialogSaveAllButton: - // break; - // case SP_DialogAbortButton: - // break; - // case SP_DialogRetryButton: - // break; - // case SP_DialogIgnoreButton: - // break; - // case SP_ArrowUp: - // break; - // case SP_ArrowDown: - // break; - // case SP_ArrowBack: - // break; - // case SP_ArrowForward: - // break; - // case SP_DirHomeIcon: - // break; - // case SP_CommandLink: - // break; - // case SP_VistaShield: - // break; - // case SP_BrowserReload: - // break; - // case SP_BrowserStop: - // break; - // case SP_MediaPlay: - // break; - // case SP_MediaStop: - // break; - // case SP_MediaPause: - // break; - // case SP_MediaSkipForward: - // break; - // case SP_MediaSkipBackward: - // break; - // case SP_MediaSeekForward: - // break; - // case SP_MediaSeekBackward: - // break; - // case SP_MediaVolume: - // break; - // case SP_MediaVolumeMuted: - // break; - // case SP_RestoreDefaultsButton: - // break; default: break; } diff --git a/lib/src/style/ThemeManager.cpp b/lib/src/style/ThemeManager.cpp index d20e1f1..4e2c12b 100644 --- a/lib/src/style/ThemeManager.cpp +++ b/lib/src/style/ThemeManager.cpp @@ -12,6 +12,9 @@ ThemeManager::ThemeManager(QObject* parent) ThemeManager::ThemeManager(QlementineStyle* style, QObject* parent) : QObject(parent) { setStyle(style); + if (parent == nullptr) { + setParent(style); + } } QlementineStyle* ThemeManager::style() const { diff --git a/lib/src/utils/IconUtils.cpp b/lib/src/utils/IconUtils.cpp index 67f2cee..cc33a6d 100644 --- a/lib/src/utils/IconUtils.cpp +++ b/lib/src/utils/IconUtils.cpp @@ -8,8 +8,6 @@ #include #include -#include - namespace oclero::qlementine { IconTheme::IconTheme(const QColor& normal, const QColor& disabled, const QColor& checkedNormal, QColor checkedDisabled) : normal(normal) @@ -94,12 +92,4 @@ QIcon makeIconFromSvg(const QString& svgPath, const IconTheme& iconTheme, const return icon; } - -QIcon makeIconFromSvg(icons::Icons16 id, const QSize& size) { - return makeIconFromSvg(icons::iconPath(id), size); -} - -QIcon makeIconFromSvg(icons::Icons16 id, const IconTheme& iconTheme, const QSize& size) { - return makeIconFromSvg(icons::iconPath(id), iconTheme, size); -} } // namespace oclero::qlementine diff --git a/sandbox/resources/plus_24.svg b/sandbox/resources/plus_24.svg deleted file mode 100644 index 1bcc698..0000000 --- a/sandbox/resources/plus_24.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sandbox/resources/sandbox.qrc b/sandbox/resources/sandbox.qrc index 694cbba..df575d2 100644 --- a/sandbox/resources/sandbox.qrc +++ b/sandbox/resources/sandbox.qrc @@ -4,10 +4,9 @@ themes/light.json qlementine_icon.ico qlementine_icon.icns - plus_24.svg test_image_16x16.png - scene_light.svg - scene_material.svg - scene_object.svg + test_image_16x16.svg + test_image_24x24.svg + test_image_color_16x16.svg diff --git a/sandbox/resources/scene_light.svg b/sandbox/resources/scene_light.svg deleted file mode 100644 index 5e46abf..0000000 --- a/sandbox/resources/scene_light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sandbox/resources/scene_material.svg b/sandbox/resources/scene_material.svg deleted file mode 100644 index e46b631..0000000 --- a/sandbox/resources/scene_material.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sandbox/resources/scene_object.svg b/sandbox/resources/scene_object.svg deleted file mode 100644 index 57bf3b9..0000000 --- a/sandbox/resources/scene_object.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sandbox/resources/test_image_16x16.svg b/sandbox/resources/test_image_16x16.svg new file mode 100644 index 0000000..b4b1bb2 --- /dev/null +++ b/sandbox/resources/test_image_16x16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sandbox/resources/test_image_24x24.svg b/sandbox/resources/test_image_24x24.svg new file mode 100644 index 0000000..e306dad --- /dev/null +++ b/sandbox/resources/test_image_24x24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sandbox/resources/test_image_color_16x16.svg b/sandbox/resources/test_image_color_16x16.svg new file mode 100644 index 0000000..c8e978e --- /dev/null +++ b/sandbox/resources/test_image_color_16x16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sandbox/src/CsdWindow.cpp b/sandbox/src/CsdWindow.cpp deleted file mode 100644 index f395bc8..0000000 --- a/sandbox/src/CsdWindow.cpp +++ /dev/null @@ -1,766 +0,0 @@ -// SPDX-FileCopyrightText: Olivier Cléro -// SPDX-License-Identifier: MIT - -#include "CsdWindow.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -CsdWindow::CsdWindow(QWidget* parent) - : oclero::qlementine::FramelessWindow(parent) { - setWindowIcon(QIcon(":/qlementine_icon.ico")); - setupUi(); - resize(600, 400); - setWindowTitle("Custom native window"); - populateMenuBar(menuBar()); -} - -void CsdWindow::paintEvent(QPaintEvent* event) { - if (_useDefaultColor) { - FramelessWindow::paintEvent(event); - } else { - QPainter painter(this); - painter.fillRect(rect(), _backgroundColor); - } -} - -void CsdWindow::setupUi() { - auto* content = new QTabWidget(this); - - auto addseg = [](const QString& caption, QWidget* parent) { - auto* segTitle = new QWidget(parent); - auto layout = new QHBoxLayout; - segTitle->setLayout(layout); - layout->addWidget(new QLabel(caption, segTitle)); - auto* hline = new QFrame(segTitle); - hline->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); - hline->setFrameShape(QFrame::HLine); - layout->addWidget(hline); - return segTitle; - }; - - // Basic Widget - { - auto* page = new QScrollArea(content); - - auto* root = new QWidget(page); - page->setWidget(root); - page->setWidgetResizable(true); - page->setAlignment(Qt::AlignHCenter); - auto* layout = new QVBoxLayout(); - root->setLayout(layout); - - // QCheckBox - { - auto* widget = new QWidget(root); - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - auto* checkbox = new QCheckBox("Normal", widget); - llayout->addWidget(checkbox); - - auto* checkbox2 = new QCheckBox("Disabled", widget); - checkbox2->setDisabled(true); - llayout->addWidget(checkbox2); - - auto* checkbox3 = new QCheckBox("WithIcon", widget); - checkbox3->setIcon(QIcon(QStringLiteral(":/plus_24.svg"))); - llayout->addWidget(checkbox3); - - auto* checkbox4 = new QCheckBox("NoneCheckable", widget); - checkbox4->setCheckable(false); - llayout->addWidget(checkbox4); - - auto* checkbox5 = new QCheckBox("PartiallyChecked", widget); - checkbox5->setCheckState(Qt::CheckState::PartiallyChecked); - llayout->addWidget(checkbox5); - - layout->addWidget(addseg("QCheckBox", root)); - layout->addWidget(widget); - } - - // QComboBox - { - auto createCombo = [](QWidget* parent) { - auto* widget = new QComboBox(parent); - widget->addItems({ "North", "South", "West", "East" }); - widget->addItem(QIcon(QStringLiteral(":/plus_24.svg")), "Directions"); - return widget; - }; - - auto* widget = new QWidget(root); - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - auto* normal = createCombo(widget); - llayout->addWidget(normal); - auto* editable = createCombo(widget); - editable->setEditable(true); - llayout->addWidget(editable); - - layout->addWidget(addseg("QComboBox", root)); - layout->addWidget(widget); - } - - // QCommandLinkButton - { - auto* widget = new QCommandLinkButton("ClickMe", "A vista style button", root); - - layout->addWidget(addseg("QCommandLinkButton", root)); - layout->addWidget(widget); - } - - // QDateEdit - { - auto* widget = new QDateEdit(root); - - layout->addWidget(addseg("QDateEdit", root)); - layout->addWidget(widget); - } - - // QDateTimeEdit - { - auto* widget = new QDateTimeEdit(root); - - layout->addWidget(addseg("QDateTimeEdit", root)); - layout->addWidget(widget); - } - - // QDial - { - auto* widget = new QDial(root); - - layout->addWidget(addseg("QDial", root)); - layout->addWidget(widget); - } - - // QDoubleSpinBox - { - auto* widget = new QDoubleSpinBox(root); - - layout->addWidget(addseg("QDoubleSpinBox", root)); - layout->addWidget(widget); - } - - // QFontComboBox - { - auto* widget = new QFontComboBox(root); - - layout->addWidget(addseg("QFontComboBox", root)); - layout->addWidget(widget); - } - - // QLCDNumber - { - auto* widget = new QLCDNumber(root); - widget->setDigitCount(1000); - widget->setMaximumWidth(200); - - layout->addWidget(addseg("QLCDNumber", root)); - layout->addWidget(widget); - } - - // QLabel - { - auto* widget = new QLabel(root); - widget->setText("This is a label"); - - layout->addWidget(addseg("QLabel", root)); - layout->addWidget(widget); - } - - // QLineEdit - { - auto* widget = new QWidget(root); - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - auto* normal = new QLineEdit(widget); - llayout->addWidget(normal); - auto* placeHold = new QLineEdit(widget); - placeHold->setPlaceholderText("typing..."); - llayout->addWidget(placeHold); - - layout->addWidget(addseg("QLineEdit", root)); - layout->addWidget(widget); - } - - // QMenu - { - auto* widget = new QMenuBar(root); - auto* menu = new QMenu("Menu", widget); - menu->addAction(QIcon(QStringLiteral(":/plus_24.svg")), "Item1"); - - - layout->addWidget(addseg("QMenu", root)); - layout->addWidget(widget); - } - - // QProgressBar - { - auto* widget = new QProgressBar(root); - widget->setValue(42); - - layout->addWidget(addseg("QProgressBar", root)); - layout->addWidget(widget); - } - - // QPushButton - { - auto* widget = new QWidget(root); - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - auto* pushButton = new QPushButton("Normal", widget); - llayout->addWidget(pushButton); - - auto* pushButton2 = new QPushButton("Disabled", widget); - pushButton2->setDisabled(true); - llayout->addWidget(pushButton2); - - auto* pushButton3 = new QPushButton("WithIcon", widget); - pushButton3->setIcon(QIcon(QStringLiteral(":/plus_24.svg"))); - llayout->addWidget(pushButton3); - - auto* pushButton4 = new QPushButton("Flat", widget); - pushButton4->setFlat(true); - llayout->addWidget(pushButton4); - - layout->addWidget(addseg("QPushButton", root)); - layout->addWidget(widget); - } - - // QRadioButton - { - auto* widget = new QWidget(root); - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - auto* radiobutton = new QRadioButton("Normal", widget); - llayout->addWidget(radiobutton); - - auto* radiobutton2 = new QRadioButton("Disabled", widget); - radiobutton2->setDisabled(true); - llayout->addWidget(radiobutton2); - - auto* radiobutton3 = new QRadioButton("WithIcon", widget); - radiobutton3->setIcon(QIcon(QStringLiteral(":/plus_24.svg"))); - llayout->addWidget(radiobutton3); - - auto* radiobutton4 = new QRadioButton("NoneCheckable", widget); - radiobutton4->setCheckable(false); - llayout->addWidget(radiobutton4); - - layout->addWidget(addseg("QRadioButton", root)); - layout->addWidget(widget); - } - - // QScrollBar - { - auto* widget = new QScrollBar(Qt::Horizontal, root); - - layout->addWidget(addseg("QScrollBar", root)); - layout->addWidget(widget); - } - - // QSlider - { - auto* widget = new QSlider(Qt::Horizontal, root); - auto* widget2 = new QSlider(Qt::Vertical, root); - - layout->addWidget(addseg("QSlider", root)); - layout->addWidget(widget); - layout->addWidget(widget2); - } - - // QSpinBox - { - auto* widget = new QSpinBox(root); - - layout->addWidget(addseg("QSpinBox", root)); - layout->addWidget(widget); - } - - // QTabBar - { - auto* widget = new QTabBar(root); - widget->addTab("Page1"); - widget->addTab(QIcon(QStringLiteral(":/plus_24.svg")), "Page2"); - widget->addTab(QIcon(QStringLiteral(":/plus_24.svg")), "Page3"); - widget->setExpanding(false); - - layout->addWidget(addseg("QTabBar", root)); - layout->addWidget(widget); - } - - // QTimeEdit - { - auto* widget = new QTimeEdit(root); - - layout->addWidget(addseg("QTimeEdit", root)); - layout->addWidget(widget); - } - - // QToolBox - { - auto* widget = new QToolBox(root); - widget->addItem(new QWidget(), QIcon(QStringLiteral(":/plus_24.svg")), "Item1"); - widget->addItem(new QWidget(), QIcon(QStringLiteral(":/plus_24.svg")), "Item2"); - - layout->addWidget(addseg("QToolBox", root)); - layout->addWidget(widget); - } - - // QToolButton - { - auto* widget = new QToolBar(root); - - auto icon = QIcon(QStringLiteral(":/plus_24.svg")); - - auto* toolbutton1 = new QToolButton(widget); - toolbutton1->setIcon(icon); - toolbutton1->setToolTip("with actions"); - toolbutton1->addAction(new QAction(icon, "Item1")); - toolbutton1->addAction(new QAction(icon, "Item2")); - widget->addWidget(toolbutton1); - - auto* toolbutton2 = new QToolButton(widget); - toolbutton2->setIcon(icon); - toolbutton2->setToolTip("QToolButton::DelayedPopup"); - toolbutton2->setPopupMode(QToolButton::DelayedPopup); - widget->addWidget(toolbutton2); - - auto* toolbutton3 = new QToolButton(widget); - toolbutton3->setIcon(icon); - toolbutton3->setToolTip("QToolButton::MenuButtonPopup"); - toolbutton3->setPopupMode(QToolButton::MenuButtonPopup); - widget->addWidget(toolbutton3); - - auto* toolbutton4 = new QToolButton(widget); - toolbutton4->setIcon(icon); - toolbutton4->setToolTip("QToolButton::InstantPopup"); - toolbutton4->setPopupMode(QToolButton::InstantPopup); - widget->addWidget(toolbutton4); - - auto* toolbutton5 = new QToolButton(widget); - toolbutton5->setIcon(icon); - toolbutton5->setToolTip("Qt::UpArrow"); - toolbutton5->setArrowType(Qt::UpArrow); - widget->addWidget(toolbutton5); - - auto* toolbutton6 = new QToolButton(widget); - toolbutton6->setIcon(icon); - toolbutton6->setToolTip("Qt::DownArrow"); - toolbutton6->setArrowType(Qt::DownArrow); - widget->addWidget(toolbutton6); - - auto* toolbutton7 = new QToolButton(widget); - toolbutton7->setIcon(icon); - toolbutton7->setToolTip("Qt::LeftArrow"); - toolbutton7->setArrowType(Qt::LeftArrow); - widget->addWidget(toolbutton7); - - auto* toolbutton8 = new QToolButton(widget); - toolbutton8->setIcon(icon); - toolbutton8->setToolTip("Qt::RightArrow"); - toolbutton8->setArrowType(Qt::RightArrow); - widget->addWidget(toolbutton8); - - auto* toolbutton9 = new QToolButton(widget); - toolbutton9->setIcon(icon); - toolbutton9->setToolTip("AutoRaise enabled"); - toolbutton9->setAutoRaise(true); - widget->addWidget(toolbutton9); - - layout->addWidget(addseg("QToolBox", root)); - layout->addWidget(widget); - } - - layout->addStretch(); - content->addTab(page, "Basic Widget"); - } - - - // Advanced Widget - { - auto* page = new QScrollArea(content); - - auto* root = new QWidget(page); - page->setWidget(root); - page->setWidgetResizable(true); - page->setAlignment(Qt::AlignHCenter); - auto* layout = new QVBoxLayout(); - root->setLayout(layout); - - // QCalendarWidget - { - auto* calendar = new QCalendarWidget(root); - layout->addWidget(addseg("QCalendarWidget", root)); - layout->addWidget(calendar); - } - - // QDialogButtonBox - { - auto* widget = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, root); - layout->addWidget(addseg("QDialogButtonBox", root)); - layout->addWidget(widget); - } - - - // QDialog - { - auto* widget = new QWidget(root); - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - auto* colorDialog = new QPushButton("QColorDialog", root); - connect(colorDialog, &QPushButton::clicked, []() { - QColorDialog dialog; - dialog.exec(); - }); - llayout->addWidget(colorDialog); - - auto* fileDialog = new QPushButton("QFileDialog", root); - connect(fileDialog, &QPushButton::clicked, []() { - QFileDialog dialog; - dialog.exec(); - }); - llayout->addWidget(fileDialog); - - auto* fontDialog = new QPushButton("QFontDialog", root); - connect(fontDialog, &QPushButton::clicked, []() { - QFontDialog dialog; - dialog.exec(); - }); - llayout->addWidget(fontDialog); - - layout->addWidget(addseg("QDialog(s)", root)); - layout->addWidget(widget); - } - - layout->addStretch(); - content->addTab(page, "Advanced Widget"); - } - - // Organizer Widget - { - auto* page = new QScrollArea(content); - - auto* root = new QWidget(page); - page->setWidget(root); - page->setWidgetResizable(true); - page->setAlignment(Qt::AlignHCenter); - auto* layout = new QVBoxLayout(); - root->setLayout(layout); - - // QButtonGroup - { - auto* buttonGroup = new QButtonGroup(root); - buttonGroup->addButton(new QCheckBox("Button1")); - buttonGroup->addButton(new QCheckBox("Button2")); - buttonGroup->setExclusive(true); - layout->addWidget(addseg("QButtonGroup(checkbox list)", root)); - for (auto* button : buttonGroup->buttons()) { - layout->addWidget(button); - } - } - - // QGroupBox - { - auto* widget = new QGroupBox("Group", root); - - auto* llayout = new QHBoxLayout; - widget->setLayout(llayout); - - llayout->addWidget(new QPushButton("Button1", widget)); - llayout->addWidget(new QPushButton("Button2", widget)); - - layout->addWidget(addseg("QGroupBox", root)); - layout->addWidget(widget); - } - - // QSplitter - { - auto* widget = new QSplitter(root); - - layout->addWidget(addseg("QSplitter", root)); - layout->addWidget(widget); - } - - // QTabWidget - { - auto* widget = new QTabWidget(root); - widget->addTab(new QLabel("Page1"), "Page1"); - widget->addTab(new QLabel("Page2"), QIcon(QStringLiteral(":/plus_24.svg")), "Page2"); - widget->addTab(new QLabel("Page3"), QIcon(QStringLiteral(":/plus_24.svg")), "Page3"); - - layout->addWidget(addseg("QTabWidget", root)); - layout->addWidget(widget); - } - - layout->addStretch(); - content->addTab(page, "Organizer Widget"); - } - - // Model/View - { - auto* page = new QScrollArea(content); - - auto* root = new QWidget(page); - page->setWidget(root); - page->setWidgetResizable(true); - page->setAlignment(Qt::AlignHCenter); - auto* layout = new QVBoxLayout(); - root->setLayout(layout); - - // QListWidget - { - auto* widget = new QListWidget(root); - - widget->addItems({ "Item1", "Item2", "Item3" }); - - layout->addWidget(addseg("QListWidget", root)); - layout->addWidget(widget); - } - - // QTableWidget - { - auto* widget = new QTableWidget(root); - - constexpr int rows = 100; - constexpr int cols = 10; - - widget->setColumnCount(cols); - widget->setRowCount(rows); - - for (int row = 0; row < rows; row++) { - for (int col = 0; col < cols; col++) { - widget->setItem(row, col, new QTableWidgetItem(QString::number(row) + ":" + QString::number(col))); - } - } - - layout->addWidget(addseg("QTableWidget", root)); - layout->addWidget(widget); - } - - // QTreeView - { - auto* widget = new QTreeView(root); - auto* model = new QFileSystemModel(root); - widget->setModel(model); - model->setRootPath(QCoreApplication::applicationDirPath()); - - layout->addWidget(addseg("QTreeView", root)); - layout->addWidget(widget); - } - - - layout->addStretch(); - content->addTab(page, "Model/View"); - } - - // Main Window - { - auto* page = new QScrollArea(content); - - auto* root = new QWidget(page); - page->setWidget(root); - page->setWidgetResizable(true); - page->setAlignment(Qt::AlignHCenter); - auto* layout = new QVBoxLayout(); - root->setLayout(layout); - - - // MainWindow - { - auto icon = QIcon(QStringLiteral(":/plus_24.svg")); - - auto* widget = new QMainWindow(); - auto* focus = new QFocusFrame(); - focus->setWidget(widget); - - auto* status = new QStatusBar(widget); - status->addWidget(new QLabel("Status1")); - status->addWidget(new QLabel("Status2"), 100); - status->addWidget(new QLabel("Status3")); - widget->setStatusBar(status); - - auto* menu = new QMenuBar(widget); - auto* fmenu = menu->addMenu("File"); - auto* emenu = menu->addMenu("Edit"); - auto* vmenu = menu->addMenu("View"); - menu->addMenu("Window"); - auto* hmenu = menu->addMenu("Help"); - widget->setMenuBar(menu); - auto* anew = fmenu->addAction(icon, "New"); - auto* aopen = fmenu->addAction(icon, "Open"); - auto* asave = fmenu->addAction(icon, "Save"); - auto* asaveas = fmenu->addAction(icon, "Save As"); - fmenu->addSeparator(); - auto* aclose = fmenu->addAction(icon, "Close"); - auto* acopy = emenu->addAction(icon, "Copy"); - auto* acut = emenu->addAction(icon, "Cut"); - auto* apaste = emenu->addAction(icon, "Paste"); - auto* ahelp = hmenu->addAction(icon, "Help"); - auto* aabout = hmenu->addAction(icon, "About"); - - auto* ftoolbar = widget->addToolBar("File"); - ftoolbar->setAllowedAreas(Qt::ToolBarArea::AllToolBarAreas); - ftoolbar->setMovable(true); - ftoolbar->setIconSize({ 24, 24 }); - ftoolbar->addActions({ anew, aopen, asave, asaveas, aclose }); - - auto* etoolbar = widget->addToolBar("Edit"); - etoolbar->setAllowedAreas(Qt::ToolBarArea::AllToolBarAreas); - etoolbar->setMovable(true); - etoolbar->setIconSize({ 24, 24 }); - etoolbar->addActions({ acopy, acut, apaste }); - - auto* htoolbar = widget->addToolBar("Help"); - htoolbar->setAllowedAreas(Qt::ToolBarArea::AllToolBarAreas); - htoolbar->setMovable(true); - htoolbar->setIconSize({ 24, 24 }); - htoolbar->addActions({ ahelp, aabout }); - - widget->setDockOptions(QMainWindow::DockOption::AllowTabbedDocks); - auto* treeview = new QTreeView(); - auto* treemodel = new QFileSystemModel(); - treeview->setModel(treemodel); - treemodel->setRootPath(QCoreApplication::applicationDirPath()); - auto* dock1 = new QDockWidget("Browser", widget); - dock1->setWidget(treeview); - dock1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - vmenu->addAction(dock1->toggleViewAction()); - widget->addDockWidget(Qt::RightDockWidgetArea, dock1); - - auto* docs = new QListWidget(); - docs->addItems( - QStringList() - << "A custom QStyle named QlementineStyle, that implements all the necessary API to give a modern look and feel to your Qt application. It's a drop-in replacement for the default QStyle." - << "An actual way to have client-side decoration (CSD) on your Qt window, with actual OS window animations and effects. (Windows only, at the moment)" - << "Lots of utilities to help you write beautiful Qt widgets."); - docs->setWordWrap(true); - auto* dock2 = new QDockWidget(tr("Features"), this); - dock2->setWidget(docs); - dock2->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - vmenu->addAction(dock2->toggleViewAction()); - widget->addDockWidget(Qt::RightDockWidgetArea, dock2); - - - auto* mdiarea = new QMdiArea(widget); - widget->setCentralWidget(mdiarea); - - auto* subwnd1 = mdiarea->addSubWindow(new QTextEdit(), Qt::Window); - subwnd1->setWindowTitle("Window1"); - auto* subwnd2 = mdiarea->addSubWindow(new QTextEdit(), Qt::Window); - subwnd2->setWindowTitle("Window2"); - - layout->addWidget(widget); - } - - layout->addStretch(); - content->addTab(page, "Main Window "); - } - - // window color - { - auto* page = new QWidget(content); - auto* verticalLayout = new QVBoxLayout(page); - - // Slider to modify the window background color. - auto* slider = new QSlider(page); - slider->setRange(0, 255); - slider->setValue(_backgroundColor.red()); - QObject::connect(slider, &QSlider::valueChanged, this, [this](int value) { - _backgroundColor.setRed(value); - if (!_useDefaultColor) { - update(); - } - }); - slider->setMinimumWidth(255); - slider->setMaximumWidth(350); - verticalLayout->addWidget(slider, 0, Qt::AlignmentFlag::AlignCenter); - - // Checkbox to use or not the default background color. - auto* checkbox = new QCheckBox("Use default window color", page); - checkbox->setChecked(false); - - QObject::connect(checkbox, &QCheckBox::toggled, this, [this](bool checked) { - _useDefaultColor = checked; - update(); - }); - verticalLayout->addWidget(checkbox, 0, Qt::AlignmentFlag::AlignCenter); - - content->addTab(page, QStringLiteral("WindowColor")); - } - - setContentWidget(content); -} - -void CsdWindow::populateMenuBar(QMenuBar* menuBar) { - auto* fileMenu = new QMenu("&File", menuBar); - { - auto* quitAction = new QAction("&Quit", fileMenu); - quitAction->setMenuRole(QAction::MenuRole::QuitRole); - quitAction->setShortcut(Qt::CTRL + Qt::Key_Q); - quitAction->setShortcutContext(Qt::ShortcutContext::ApplicationShortcut); - QObject::connect(quitAction, &QAction::triggered, this, []() { - QApplication::quit(); - }); - fileMenu->addAction(quitAction); - } - - menuBar->addMenu(fileMenu); - - auto* windowMenu = new QMenu("&Window", menuBar); - { - auto minimizeAction = new QAction("Minimize", windowMenu); - QObject::connect(minimizeAction, &QAction::triggered, this, [this]() { - windowHandle()->showMinimized(); - }); - windowMenu->addAction(minimizeAction); - - auto* maximizeAction = new QAction("Maximize", windowMenu); - QObject::connect(maximizeAction, &QAction::triggered, this, [this]() { - if (auto window = this->window()) { - if (window->windowState() & Qt::WindowMaximized) { - window->showNormal(); - } else { - window->showMaximized(); - } - } - }); - windowMenu->addAction(maximizeAction); - - auto* closeAction = new QAction("&Close", windowMenu); - QObject::connect(closeAction, &QAction::triggered, this, [this]() { - windowHandle()->close(); - }); - windowMenu->addAction(closeAction); - } - menuBar->addMenu(windowMenu); - - auto* helpMenu = new QMenu("&Help", menuBar); - { - auto* aboutAction = new QAction("&About", windowMenu); - aboutAction->setMenuRole(QAction::AboutRole); - QObject::connect(aboutAction, &QAction::triggered, this, [this]() { - QMessageBox msgBox( - QMessageBox::Icon::Information, "About", "Example of frameless window", QMessageBox::NoButton, this); - msgBox.exec(); - }); - helpMenu->addAction(aboutAction); - } - menuBar->addMenu(helpMenu); -} diff --git a/sandbox/src/CsdWindow.hpp b/sandbox/src/CsdWindow.hpp deleted file mode 100644 index 81bc455..0000000 --- a/sandbox/src/CsdWindow.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: Olivier Cléro -// SPDX-License-Identifier: MIT - -#pragma once - -#include - -class CsdWindow : public oclero::qlementine::FramelessWindow { - Q_OBJECT - -public: - explicit CsdWindow(QWidget* parent = nullptr); - ~CsdWindow() = default; - -protected: - void paintEvent(QPaintEvent* event) override; - -private: - void populateMenuBar(QMenuBar* menuBar); - void setupUi(); - -private: - QColor _backgroundColor{ 255, 192, 0 }; - bool _useDefaultColor{ false }; -}; diff --git a/sandbox/src/SandboxWindow.cpp b/sandbox/src/SandboxWindow.cpp index ae175b0..05609d0 100644 --- a/sandbox/src/SandboxWindow.cpp +++ b/sandbox/src/SandboxWindow.cpp @@ -58,11 +58,19 @@ #include namespace oclero::qlementine::sandbox { -using Icons16 = oclero::qlementine::icons::Icons16; -static QIcon makeQIcon(Icons16 id, const QSize& size = { 16, 16 }) { - return oclero::qlementine::makeThemedIcon(id, size); + +static QIcon getTestQIcon(const QSize& size = { 16, 16 }, bool colored = false) { + if (size.height() == 24) { + return QIcon(":/sandbox/test_image_24x24.svg"); + } else { + return colored ? QIcon(":/sandbox/test_image_color_16x16.svg") : QIcon(":/sandbox/test_image_16x16.svg"); + } } +// static QIcon makeQIcon(Icons16 id, const QSize& size = { 16, 16 }) { +// return oclero::qlementine::makeThemedIcon(id, size); +// } + class ContextMenuEventFilter : public QObject { private: std::function _cb; @@ -350,7 +358,7 @@ struct SandboxWindow::Impl { void setupUI_button() { auto* button = new QPushButton(windowContent); button->setText("Button with a very long text that can be elided"); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); button->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); button->setDefault(true); windowContentLayout->addWidget(button); @@ -368,7 +376,7 @@ struct SandboxWindow::Impl { { // Icon, fixed size auto* button = new QPushButton(windowContent); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); windowContentLayout->addWidget(button); } @@ -376,7 +384,7 @@ struct SandboxWindow::Impl { // Text+Icon, fixed size auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); windowContentLayout->addWidget(button); } @@ -384,7 +392,7 @@ struct SandboxWindow::Impl { // Text+Icon+Menu, fixed size auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); auto* menu = new QMenu(button); @@ -404,21 +412,21 @@ struct SandboxWindow::Impl { { // Icon, expanding size. auto* button = new QPushButton(windowContent); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); windowContentLayout->addWidget(button); } { // Text+Icon, expanding size. auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); windowContentLayout->addWidget(button); } { // Text+Icon+Menu, expanding size auto* button = new QPushButton(windowContent); button->setText("Button"); - button->setIcon(makeQIcon(Icons16::Action_Save)); + button->setIcon(getTestQIcon()); auto* menu = new QMenu("ButtonMenu"); for (auto i = 0; i < 3; ++i) { @@ -436,7 +444,7 @@ struct SandboxWindow::Impl { const auto tristate = i > 1; checkbox->setChecked(checked); - checkbox->setIcon(makeQIcon(Icons16::Action_Save)); + checkbox->setIcon(getTestQIcon()); checkbox->setText(QString("%1 checkbox %2 with a very long text").arg(tristate ? "Tristate" : "Normal").arg(i)); checkbox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); checkbox->setTristate(tristate); @@ -450,7 +458,7 @@ struct SandboxWindow::Impl { for (auto i = 0; i < 2; ++i) { auto* radiobutton = new QRadioButton(windowContent); radiobutton->setChecked(true); - radiobutton->setIcon(makeQIcon(Icons16::Action_Save)); + radiobutton->setIcon(getTestQIcon()); radiobutton->setText(QString("RadioButton %1 with a very long text").arg(i)); radiobutton->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); radioGroup->addButton(radiobutton); @@ -460,21 +468,19 @@ struct SandboxWindow::Impl { void setupUI_commandLinkButton() { { - const QIcon icon(":/sandbox/plus_24.svg"); auto* button = new CommandLinkButton(windowContent); button->setText("First Line with a very long text that should be cropped"); button->setDescription("Second Line that could be very long and should be cropped"); - button->setIcon(icon); + button->setIcon(getTestQIcon({ 24, 24 })); button->setDefault(true); button->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); windowContentLayout->addWidget(button); } { - const QIcon icon(":/sandbox/plus_24.svg"); auto* button = new CommandLinkButton(windowContent); button->setText("First Line with a very long text that should be cropped"); button->setDescription("Second Line that could be very long and should be cropped"); - button->setIcon(icon); + button->setIcon(getTestQIcon({ 24, 24 })); button->setDefault(false); button->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); windowContentLayout->addWidget(button); @@ -600,7 +606,7 @@ struct SandboxWindow::Impl { combobox->setEditable(true); for (auto i = 0; i < 4; ++i) { - combobox->addItem(makeQIcon(Icons16::Action_Save), QString("Editable comboBox item %1").arg(i)); + combobox->addItem(getTestQIcon(), QString("Editable comboBox item %1").arg(i)); } auto* model = qobject_cast(combobox->model()); auto* item = model->item(2); @@ -615,7 +621,7 @@ struct SandboxWindow::Impl { combobox->setFocusPolicy(Qt::StrongFocus); for (auto i = 0; i < 4; ++i) { - combobox->addItem(makeQIcon(Icons16::Action_Save), QString("ComboBox item %1").arg(i)); + combobox->addItem(getTestQIcon(), QString("ComboBox item %1").arg(i)); } windowContentLayout->addWidget(combobox); @@ -637,7 +643,7 @@ struct SandboxWindow::Impl { for (auto i = 0; i < 2; ++i) { auto* item = new QListWidgetItem( - makeQIcon(Icons16::Action_Save), QString("Item #%1 with very long text that can be elided").arg(i), listView); + getTestQIcon(), QString("Item #%1 with very long text that can be elided").arg(i), listView); item->setFlags(item->flags() | Qt::ItemFlag::ItemIsUserCheckable); item->setCheckState(i % 2 ? Qt ::CheckState::Checked : Qt::CheckState::Unchecked); //item->setForeground(i % 2 ? Qt::red : Qt::blue); @@ -680,7 +686,6 @@ struct SandboxWindow::Impl { constexpr auto rowCount = 3; tableView->setColumnCount(columnCount); tableView->setRowCount(rowCount); - const QIcon icon(":/sandbox/scene_object.svg"); std::vector columnAlignments; columnAlignments.resize(columnCount); @@ -691,21 +696,21 @@ struct SandboxWindow::Impl { for (auto col = 0; col < columnCount; ++col) { auto* item = new QTableWidgetItem(QString("Column %1").arg(col + 1)); - item->setIcon(icon); + item->setIcon(getTestQIcon({ 16, 16 }, true)); item->setTextAlignment(columnAlignments.at(col)); tableView->setHorizontalHeaderItem(col, item); } for (auto row = 0; row < rowCount; ++row) { auto* item = new QTableWidgetItem(QString("Row %1").arg(row + 1)); - item->setIcon(icon); + item->setIcon(getTestQIcon({ 16, 16 }, true)); tableView->setVerticalHeaderItem(row, item); } for (auto row = 0; row < rowCount; ++row) { for (auto col = 0; col < columnCount; ++col) { auto* item = new QTableWidgetItem(QString("Item at %1, %2").arg(row + 1).arg(col + 1)); - item->setIcon(icon); + item->setIcon(getTestQIcon({ 16, 16 }, true)); item->setTextAlignment(columnAlignments.at(col)); item->setFlags(Qt::ItemFlag::ItemIsEditable | Qt::ItemFlag::ItemIsSelectable | Qt::ItemFlag::ItemIsEnabled); item->setData(Qt::DisplayRole, QVariant::fromValue(true)); @@ -729,19 +734,19 @@ struct SandboxWindow::Impl { for (auto i = 0; i < 3; ++i) { auto* root = new QTreeWidgetItem(treeWidget); root->setText(0, QString("Root %1").arg(i + 1)); - root->setIcon(0, QIcon(":/sandbox/scene_object.svg")); + root->setIcon(0, getTestQIcon({ 16, 16 }, true)); root->setText(1, QString("Column 2 of Root %1").arg(i + 1)); for (auto j = 0; j < 3; ++j) { auto* child = new QTreeWidgetItem(root); child->setText(0, QString("Child %1 of Root %2").arg(j).arg(i)); - child->setIcon(0, j == 2 ? QIcon(":/sandbox/scene_light.svg") : QIcon(":/sandbox/scene_object.svg")); + child->setIcon(0, getTestQIcon({ 16, 16 }, true)); child->setText(1, QString("Column 2 of Child %1 of Root %2").arg(j).arg(i)); for (auto k = 0; k < 3; ++k) { auto* subChild = new QTreeWidgetItem(child); subChild->setText(0, QString("Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); - subChild->setIcon(0, QIcon(":/sandbox/scene_material.svg")); + subChild->setIcon(0, getTestQIcon({ 16, 16 }, true)); subChild->setText(1, QString("Column 2 of Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); } } @@ -755,7 +760,7 @@ struct SandboxWindow::Impl { auto* menuBar = owner.menuBar(); // NB: it looks like MacOS' native menu bar has an issue with QIcon, so we have to force // it to generate icons for High-DPI screens. - const auto icon = makeQIcon(Icons16::Action_Save); + const auto icon = getTestQIcon(); for (auto i = 0; i < 5; ++i) { auto* menu = menuBar->addMenu(QString("Menu &%1").arg(i)); @@ -798,14 +803,14 @@ struct SandboxWindow::Impl { void setupUI_toolButton() { auto* toolButton = new QToolButton(toolbar); - toolButton->setIcon(makeQIcon(Icons16::Action_Save)); + toolButton->setIcon(getTestQIcon()); toolButton->setText(QString("Button with a very long text that can be elided")); toolButton->setToolButtonStyle(Qt::ToolButtonIconOnly); toolButton->setCheckable(false); toolButton->setChecked(false); { - const auto icon = makeQIcon(Icons16::Action_Save); + const auto icon = getTestQIcon(); auto* subMenu = new QMenu("Menu title", toolButton); toolButton->setMenu(subMenu); subMenu->addAction(icon, "Sub Action 1"); @@ -819,7 +824,7 @@ struct SandboxWindow::Impl { } void setupUI_toolButtonsVariants() { - const auto icon = makeQIcon(Icons16::Action_Save); + const auto icon = getTestQIcon(); toolbar = owner.addToolBar("ToolBar name"); //toolbar->set @@ -906,7 +911,6 @@ struct SandboxWindow::Impl { } void setupUI_tabBar() { - const QIcon icon(":/sandbox/scene_object.svg"); auto* tabBar = new QTabBar(windowContent); tabBar->setFocusPolicy(Qt::NoFocus); tabBar->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); @@ -931,7 +935,7 @@ struct SandboxWindow::Impl { const auto tabText = QString(tabTextList.join(" ").append(QString(" %1").arg(i + 1))); if (i % 3 == 0) { - tabBar->addTab(icon, tabText); + tabBar->addTab(getTestQIcon({ 16, 16 }, true), tabText); } else { tabBar->addTab(tabText); } @@ -957,8 +961,6 @@ struct SandboxWindow::Impl { } void setupUI_tabWidget() { - const QStringList icons = { ":/sandbox/scene_object.svg", ":/sandbox/scene_light.svg", - ":/sandbox/scene_material.svg" }; auto* tabWidget = new QTabWidget(windowContent); tabWidget->setDocumentMode(false); @@ -987,7 +989,7 @@ struct SandboxWindow::Impl { tabTextList.append("Tab"); } const auto tabText = QString(tabTextList.join(" ").append(QString(" %1").arg(i + 1))); - const auto icon = QIcon(icons.at(i % icons.size())); + const auto icon = getTestQIcon(); tabWidget->addTab(tabContent, icon, tabText); } } @@ -1095,19 +1097,19 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru for (auto i = 0; i < 3; ++i) { auto* root = new QTreeWidgetItem(treeWidget); root->setText(0, QString("Root %1").arg(i + 1)); - root->setIcon(0, QIcon(":/sandbox/scene_object.svg")); + root->setIcon(0, getTestQIcon({ 16, 16 }, true)); root->setText(1, QString("Column 2 of Root %1").arg(i + 1)); for (auto j = 0; j < 3; ++j) { auto* child = new QTreeWidgetItem(root); child->setText(0, QString("Child %1 of Root %2").arg(j).arg(i)); - child->setIcon(0, j == 2 ? QIcon(":/sandbox/scene_light.svg") : QIcon(":/sandbox/scene_object.svg")); + child->setIcon(0, getTestQIcon({ 16, 16 }, true)); child->setText(1, QString("Column 2 of Child %1 of Root %2").arg(j).arg(i)); for (auto k = 0; k < 3; ++k) { auto* subChild = new QTreeWidgetItem(child); subChild->setText(0, QString("Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); - subChild->setIcon(0, QIcon(":/sandbox/scene_material.svg")); + subChild->setIcon(0, getTestQIcon({ 16, 16 }, true)); subChild->setText(1, QString("Column 2 of Child %1 of Child %2 of Root %3").arg(k).arg(j).arg(i)); } } @@ -1125,7 +1127,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru for (auto i = 0; i < 3; ++i) { auto* item = new QListWidgetItem( - makeQIcon(Icons16::Action_Save), QString("Item #%1 with very long text that can be elided").arg(i), listView); + getTestQIcon(), QString("Item #%1 with very long text that can be elided").arg(i), listView); item->setFlags(item->flags() | Qt::ItemFlag::ItemIsUserCheckable); item->setCheckState(i % 2 ? Qt ::CheckState::Checked : Qt::CheckState::Unchecked); @@ -1143,7 +1145,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru tableView->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding); tableView->setColumnCount(columnCount); tableView->setRowCount(rowCount); - auto icon = makeQIcon(Icons16::Action_Save); + auto icon = getTestQIcon(); auto* headerItem = new QTableWidgetItem(icon, "A veeeeeery long header label"); tableView->setHorizontalHeaderItem(0, headerItem); tableView->setSelectionBehavior(QTableView::SelectionBehavior::SelectRows); @@ -1368,7 +1370,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru } void setupUI_navigationBar() { - const auto dummyIcon = makeQIcon(Icons16::Action_Save); + const auto dummyIcon = getTestQIcon(); auto* navBar = new NavigationBar(windowContent); for (auto i = 0; i < 3; ++i) { @@ -1384,7 +1386,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru } void setupUI_switch() { - const auto dummyIcon = makeQIcon(Icons16::Action_Save); + const auto dummyIcon = getTestQIcon(); auto* switchWidget = new Switch(windowContent); switchWidget->setText("Label of the Switch"); switchWidget->setIcon(dummyIcon); @@ -1483,7 +1485,7 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru } void setupUI_lineEditStatus() { - const auto dummyIcon = makeQIcon(Icons16::Action_Save); + const auto dummyIcon = getTestQIcon(); auto* lineEdit = new LineEdit(windowContent); lineEdit->setText("Label of the Switch"); @@ -1613,7 +1615,7 @@ SandboxWindow::SandboxWindow(ThemeManager* themeManager, QWidget* parent) // Uncomment the line to show the corresponding widget. // _impl->setupUI_label(); // _impl->setupUI_button(); - _impl->setupUI_buttonVariants(); + // _impl->setupUI_buttonVariants(); // _impl->setupUI_checkbox(); // _impl->setupUI_radioButton(); // _impl->setupUI_commandLinkButton(); @@ -1645,15 +1647,15 @@ SandboxWindow::SandboxWindow(ThemeManager* themeManager, QWidget* parent) // _impl->setupUI_switch(); // _impl->setupUI_expander(); // _impl->setupUI_popover(); - _impl->setupUI_navigationBar(); + // _impl->setupUI_navigationBar(); // _impl->setupUI_badge(); // _impl->setupUI_colorButton(); // _impl->setupUI_messageBoxIcons(); - // _impl->setupUI_fontMetricsTests(); - // _impl->setupUI_blur(); - // _impl->setupUI_themeEditor(); - // _impl->setupUI_messageBox(); + // _impl->setupUI_fontMetricsTests(); + // _impl->setupUI_blur(); + // _impl->setupUI_themeEditor(); + // _impl->setupUI_messageBox(); } _impl->endSetupUI(); oclero::qlementine::centerWidget(this); diff --git a/sandbox/src/main.cpp b/sandbox/src/main.cpp index a2bc3b3..cc0dd0c 100644 --- a/sandbox/src/main.cpp +++ b/sandbox/src/main.cpp @@ -25,20 +25,15 @@ int main(int argc, char* argv[]) { QCoreApplication::setApplicationVersion("1.0.0"); QApplication::setWindowIcon(QIcon(QStringLiteral(":/qlementine_icon.ico"))); - // Set custom QStyle. #if USE_CUSTOM_STYLE - oclero::qlementine::ThemeManager* themeManager{ nullptr }; - + // Set custom QStyle. auto* style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); qApplication.setStyle(style); - // Custom icon theme. - QIcon::setThemeName("qlementine"); - // Theme manager. - themeManager = new oclero::qlementine::ThemeManager(style); + auto* themeManager = new oclero::qlementine::ThemeManager(style); themeManager->loadDirectory(":/showcase/themes"); // Define theme on QStyle. diff --git a/showcase/CMakeLists.txt b/showcase/CMakeLists.txt index 2d935af..ca1a1aa 100644 --- a/showcase/CMakeLists.txt +++ b/showcase/CMakeLists.txt @@ -1,5 +1,17 @@ set(SHOWCASE_NAME "showcase") +# Dependency: qlementine-icons +include(FetchContent) +FetchContent_Declare(qlementine_icons + GIT_REPOSITORY "https://github.com/oclero/qlementine-icons.git" + GIT_TAG 0a269d7c4eb77fdc8ca92a7fb2ceae1baae29727 #v1.5.0 +) +FetchContent_MakeAvailable(qlementine_icons) +set_target_properties(qlementine_icons + PROPERTIES + FOLDER dependencies +) + if(APPLE) set(APP_ICON_MACOS "${CMAKE_SOURCE_DIR}/branding/icon/icon.icns") set_source_files_properties(${APP_ICON_MACOS} diff --git a/showcase/resources/icons/cube-green.svg b/showcase/resources/icons/cube-green.svg new file mode 100644 index 0000000..c3c2b4a --- /dev/null +++ b/showcase/resources/icons/cube-green.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/showcase/resources/icons/cube-red.svg b/showcase/resources/icons/cube-red.svg new file mode 100644 index 0000000..de7c25a --- /dev/null +++ b/showcase/resources/icons/cube-red.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/showcase/resources/icons/cube-yellow.svg b/showcase/resources/icons/cube-yellow.svg new file mode 100644 index 0000000..48e79d2 --- /dev/null +++ b/showcase/resources/icons/cube-yellow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/showcase/resources/icons/scene_light.svg b/showcase/resources/icons/scene_light.svg deleted file mode 100644 index 5e46abf..0000000 --- a/showcase/resources/icons/scene_light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/showcase/resources/icons/scene_material.svg b/showcase/resources/icons/scene_material.svg deleted file mode 100644 index e46b631..0000000 --- a/showcase/resources/icons/scene_material.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/showcase/resources/icons/scene_object.svg b/showcase/resources/icons/scene_object.svg deleted file mode 100644 index 57bf3b9..0000000 --- a/showcase/resources/icons/scene_object.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/showcase/resources/showcase.qrc b/showcase/resources/showcase.qrc index 31a3fe0..55f4ce2 100644 --- a/showcase/resources/showcase.qrc +++ b/showcase/resources/showcase.qrc @@ -1,11 +1,11 @@ - - icons/scene_light.svg - icons/scene_material.svg - icons/scene_object.svg - themes/dark.json - themes/light.json - qlementine_icon.ico - qlementine_icon.icns - + + icons/cube-green.svg + icons/cube-red.svg + icons/cube-yellow.svg + themes/dark.json + themes/light.json + qlementine_icon.ico + qlementine_icon.icns + diff --git a/showcase/src/ShowcaseWindow.cpp b/showcase/src/ShowcaseWindow.cpp index beef36e..6ceb9e8 100644 --- a/showcase/src/ShowcaseWindow.cpp +++ b/showcase/src/ShowcaseWindow.cpp @@ -18,7 +18,9 @@ #include #include +#include #include +#include #include #include @@ -55,8 +57,13 @@ namespace oclero::qlementine::showcase { using Icons16 = oclero::qlementine::icons::Icons16; -static QIcon makeQIcon(Icons16 id, const QSize& size = { 16, 16 }) { - return oclero::qlementine::makeThemedIcon(id, size); +static QIcon makeThemedIcon(Icons16 id, const QSize& size = { 16, 16 }) { + const auto svgPath = oclero::qlementine::icons::iconPath(id); + if (auto* style = oclero::qlementine::appStyle()) { + return style->makeThemedIcon(svgPath, size); + } else { + return QIcon(svgPath); + } } class DummyWorkspace : public QWidget { @@ -103,9 +110,9 @@ static QString getDummyText(const unsigned int minWords = 3, const unsigned int static QIcon getDummyColoredIcon() { static const auto icons = std::array{ - QIcon(":/showcase/icons/scene_object.svg"), - QIcon(":/showcase/icons/scene_light.svg"), - QIcon(":/showcase/icons/scene_material.svg"), + QIcon(":/showcase/icons/cube-green.svg"), + QIcon(":/showcase/icons/cube-red.svg"), + QIcon(":/showcase/icons/cube-yellow.svg"), }; auto rd = std::random_device(); @@ -125,7 +132,7 @@ static QIcon getDummyMonochromeIcon(const QSize& size = { 16, 16 }) { std::uniform_int_distribution>(1, 410 - 1); // TODO use a constexpr variable. const auto randomIndex = randomDistrib(gen); const auto randomIcon = static_cast(randomIndex); - return makeQIcon(randomIcon, size); + return makeThemedIcon(randomIcon, size); } struct ShowcaseWindow::Impl { @@ -185,24 +192,24 @@ struct ShowcaseWindow::Impl { auto* menu = menuBar->addMenu("File"); { // TODO: Use the enum provided by Qt6 instead of strings for icon IDs. - menu->addAction(makeQIcon(Icons16::Document_New), "New", QKeySequence::StandardKey::New, cb); - menu->addAction(makeQIcon(Icons16::Document_Open), "Open...", QKeySequence::StandardKey::Open, cb); + menu->addAction(makeThemedIcon(Icons16::Document_New), "New", QKeySequence::StandardKey::New, cb); + menu->addAction(makeThemedIcon(Icons16::Document_Open), "Open...", QKeySequence::StandardKey::Open, cb); - auto* recentFilesMenu = menu->addMenu(makeQIcon(Icons16::Document_OpenRecent), "Recent Files"); + auto* recentFilesMenu = menu->addMenu(makeThemedIcon(Icons16::Document_OpenRecent), "Recent Files"); for (auto i = 0; i < 5; ++i) { recentFilesMenu->addAction( - makeQIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), QKeySequence{}, cb); + makeThemedIcon(Icons16::File_File), QString("Recent File %1").arg(i + 1), QKeySequence{}, cb); } menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Save), "Save", QKeySequence::StandardKey::Save, cb); - menu->addAction(makeQIcon(Icons16::Action_Close), "Close", QKeySequence::StandardKey::Close, cb); - menu->addAction(makeQIcon(Icons16::Action_Print), "Print...", QKeySequence::StandardKey::Print, cb); - menu->addAction(makeQIcon(Icons16::Action_PrintPreview), "Print Preview...", QKeySequence{}, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Save), "Save", QKeySequence::StandardKey::Save, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Close), "Close", QKeySequence::StandardKey::Close, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Print), "Print...", QKeySequence::StandardKey::Print, cb); + menu->addAction(makeThemedIcon(Icons16::Action_PrintPreview), "Print Preview...", QKeySequence{}, cb); menu->addSeparator(); menu->addAction( - makeQIcon(Icons16::Navigation_Settings), "Preferences...", QKeySequence::StandardKey::Preferences, cb); + makeThemedIcon(Icons16::Navigation_Settings), "Preferences...", QKeySequence::StandardKey::Preferences, cb); menu->addSeparator(); #ifdef Q_OS_WIN @@ -211,7 +218,7 @@ struct ShowcaseWindow::Impl { #else const auto quitShortcut = QKeySequence(QKeySequence::Quit); #endif - menu->addAction(makeQIcon(Icons16::Action_Close), "Quit", quitShortcut, []() { + menu->addAction(makeThemedIcon(Icons16::Action_Close), "Quit", quitShortcut, []() { qApp->quit(); }); } @@ -219,29 +226,31 @@ struct ShowcaseWindow::Impl { { auto* menu = menuBar->addMenu("Edit"); { - menu->addAction(makeQIcon(Icons16::Action_Undo), "Undo", QKeySequence::StandardKey::Undo, cb); - menu->addAction(makeQIcon(Icons16::Action_Redo), "Redo", QKeySequence::StandardKey::Redo, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Undo), "Undo", QKeySequence::StandardKey::Undo, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Redo), "Redo", QKeySequence::StandardKey::Redo, cb); menu->addSeparator(); - menu->addAction(makeQIcon(Icons16::Action_Cut), "Cut", QKeySequence::StandardKey::Cut, cb); - menu->addAction(makeQIcon(Icons16::Action_Copy), "Copy", QKeySequence::StandardKey::Copy, cb); - menu->addAction(makeQIcon(Icons16::Action_Paste), "Paste", QKeySequence::StandardKey::Paste, cb); - menu->addAction(makeQIcon(Icons16::Action_Trash), "Delete", QKeySequence::StandardKey::Delete, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Cut), "Cut", QKeySequence::StandardKey::Cut, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Copy), "Copy", QKeySequence::StandardKey::Copy, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Paste), "Paste", QKeySequence::StandardKey::Paste, cb); + menu->addAction(makeThemedIcon(Icons16::Action_Trash), "Delete", QKeySequence::StandardKey::Delete, cb); } } { auto* menu = menuBar->addMenu("View"); { - menu->addAction(makeQIcon(Icons16::Action_ZoomIn), "Zoom In", QKeySequence::StandardKey::ZoomIn, cb); - menu->addAction(makeQIcon(Icons16::Action_ZoomOut), "Zoom Out", QKeySequence::StandardKey::ZoomOut, cb); - menu->addAction(makeQIcon(Icons16::Action_ZoomFit), "Fit", QKeySequence{}, cb); + menu->addAction(makeThemedIcon(Icons16::Action_ZoomIn), "Zoom In", QKeySequence::StandardKey::ZoomIn, cb); + menu->addAction(makeThemedIcon(Icons16::Action_ZoomOut), "Zoom Out", QKeySequence::StandardKey::ZoomOut, cb); + menu->addAction(makeThemedIcon(Icons16::Action_ZoomFit), "Fit", QKeySequence{}, cb); menu->addSeparator(); menu->addAction( - makeQIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); + makeThemedIcon(Icons16::Action_Fullscreen), "Full Screen", QKeySequence::StandardKey::FullScreen, cb); if (themeManager) { auto* themeMenu = menu->addMenu("Theme"); + themeMenu->setIcon(makeThemedIcon(Icons16::Misc_PaintPalette)); + auto* themeActionGroup = new QActionGroup(themeMenu); themeActionGroup->setExclusive(true); @@ -250,7 +259,8 @@ struct ShowcaseWindow::Impl { for (const auto& theme : themes) { const auto name = theme.meta.name; - auto* action = themeMenu->addAction(name); + const auto icon = name == "Dark" ? makeThemedIcon(Icons16::Misc_Moon) : makeThemedIcon(Icons16::Misc_Sun); + auto* action = themeMenu->addAction(icon, name); action->setCheckable(true); themeActionGroup->addAction(action); action->setChecked(name == currentTheme); @@ -267,17 +277,18 @@ struct ShowcaseWindow::Impl { } themeMenu->addSeparator(); - themeMenu->addAction("Switch Theme", { Qt::CTRL | Qt::Key_T }, [this]() { - switchTheme(); - }); + themeMenu->addAction( + makeThemedIcon(Icons16::Action_Swap), "Switch Theme", { Qt::CTRL | Qt::Key_T }, [this]() { + switchTheme(); + }); } } } { auto* menu = menuBar->addMenu("Help"); { - menu->addAction(makeQIcon(Icons16::Misc_Mail), "Contact", QKeySequence{}, cb); - menu->addAction(makeQIcon(Icons16::Misc_Info), "About...", QKeySequence{}, cb); + menu->addAction(makeThemedIcon(Icons16::Misc_Mail), "Contact", QKeySequence{}, cb); + menu->addAction(makeThemedIcon(Icons16::Misc_Info), "About...", QKeySequence{}, cb); } } } @@ -296,7 +307,7 @@ struct ShowcaseWindow::Impl { qlementineStyle->setAutoIconColor(tabBar, oclero::qlementine::AutoIconColor::ForegroundColor); for (auto i = 0; i < 4; ++i) { - tabBar->addTab(makeQIcon(Icons16::File_File), getDummyText()); + tabBar->addTab(makeThemedIcon(Icons16::File_File), getDummyText()); } QObject::connect(tabBar, &QTabBar::tabCloseRequested, tabBar, [this](int index) { @@ -316,7 +327,7 @@ struct ShowcaseWindow::Impl { const auto addButton = [this](const Icons16 icon, const QString& tooltip, const QString& text = {}) { auto* toolButton = new QToolButton(toolBar); toolButton->setFocusPolicy(Qt::NoFocus); - toolButton->setIcon(makeQIcon(icon)); + toolButton->setIcon(makeThemedIcon(icon)); toolButton->setToolTip(tooltip); if (!text.isEmpty()) { toolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); @@ -354,10 +365,10 @@ struct ShowcaseWindow::Impl { auto* exportButton = addButton(Icons16::Action_Export, "Export", "Export"); { auto* menu = new QMenu(exportButton); - menu->addAction(new QAction(makeQIcon(Icons16::File_Movie), "Movie", menu)); - menu->addAction(new QAction(makeQIcon(Icons16::File_Picture), "Picture", menu)); + menu->addAction(new QAction(makeThemedIcon(Icons16::File_Movie), "Movie", menu)); + menu->addAction(new QAction(makeThemedIcon(Icons16::File_Picture), "Picture", menu)); menu->addSeparator(); - menu->addAction(new QAction(makeQIcon(Icons16::File_Archive), "Archive", menu)); + menu->addAction(new QAction(makeThemedIcon(Icons16::File_Archive), "Archive", menu)); exportButton->setMenu(menu); exportButton->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); @@ -381,7 +392,7 @@ struct ShowcaseWindow::Impl { themeLayout->setContentsMargins(0, 0, 0, 0); themeWidget->setLayout(themeLayout); - auto* lightIconWidget = new oclero::qlementine::IconWidget(makeQIcon(Icons16::Misc_Sun), themeWidget); + auto* lightIconWidget = new oclero::qlementine::IconWidget(makeThemedIcon(Icons16::Misc_Sun), themeWidget); themeLayout->addWidget(lightIconWidget); themeSwitch = new oclero::qlementine::Switch(toolBar); @@ -394,7 +405,7 @@ struct ShowcaseWindow::Impl { }); themeLayout->addWidget(themeSwitch); - auto* darkIconWidget = new oclero::qlementine::IconWidget(makeQIcon(Icons16::Misc_Moon), themeWidget); + auto* darkIconWidget = new oclero::qlementine::IconWidget(makeThemedIcon(Icons16::Misc_Moon), themeWidget); themeLayout->addWidget(darkIconWidget); updateThemeSwitch(); @@ -419,12 +430,12 @@ struct ShowcaseWindow::Impl { topBarLayout->setContentsMargins({ 12, 8, 12, 8 }); auto* lineEdit = new LineEdit(widget); - lineEdit->setIcon(makeQIcon(Icons16::Navigation_Search)); + lineEdit->setIcon(makeThemedIcon(Icons16::Navigation_Search)); lineEdit->setClearButtonEnabled(true); lineEdit->setPlaceholderText("Search..."); topBarLayout->addWidget(lineEdit, 1); - auto* button = new QPushButton(makeQIcon(Icons16::Action_Filter), "", widget); + auto* button = new QPushButton(makeThemedIcon(Icons16::Action_Filter), "", widget); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); topBarLayout->addWidget(button); } @@ -540,8 +551,9 @@ struct ShowcaseWindow::Impl { auto* segmentedControl = new SegmentedControl(topBar); topBarLayout->addWidget(segmentedControl); segmentedControl->setItemsShouldExpand(false); - segmentedControl->addItem("Properties", makeQIcon(Icons16::Navigation_SlidersVertical), QString("%1").arg(4)); - segmentedControl->addItem("Scene", makeQIcon(Icons16::Misc_Globe), QString("%1").arg(2)); + segmentedControl->addItem( + "Properties", makeThemedIcon(Icons16::Navigation_SlidersVertical), QString("%1").arg(4)); + segmentedControl->addItem("Scene", makeThemedIcon(Icons16::Misc_Globe), QString("%1").arg(2)); } } diff --git a/showcase/src/main.cpp b/showcase/src/main.cpp index 282218a..4cd3521 100644 --- a/showcase/src/main.cpp +++ b/showcase/src/main.cpp @@ -5,6 +5,7 @@ #include #include +#include #include "ShowcaseWindow.hpp" @@ -26,19 +27,19 @@ int main(int argc, char* argv[]) { QApplication::setWindowIcon(QIcon(QStringLiteral(":/showcase/qlementine_icon.ico"))); #if USE_CUSTOM_STYLE - oclero::qlementine::ThemeManager* themeManager{ nullptr }; - // Custom QStyle. auto* style = new oclero::qlementine::QlementineStyle(&qApplication); style->setAnimationsEnabled(true); style->setAutoIconColor(oclero::qlementine::AutoIconColor::TextColor); + style->setIconPathGetter(oclero::qlementine::icons::fromFreeDesktop); qApplication.setStyle(style); // Custom icon theme. + oclero::qlementine::icons::initializeIconTheme(); QIcon::setThemeName("qlementine"); // Theme manager. - themeManager = new oclero::qlementine::ThemeManager(style); + auto* themeManager = new oclero::qlementine::ThemeManager(style); themeManager->loadDirectory(":/showcase/themes"); // Define theme on QStyle. From 974653e63b8190405447d20db7cbc68f72953373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 24 Nov 2024 21:03:45 +0100 Subject: [PATCH 43/45] Add Windows 11 screenshots to README --- README.md | 5 +++++ branding/icon/icon.psd | Bin 1282546 -> 0 bytes branding/screenshots/windows-dark.png | Bin 0 -> 58298 bytes branding/screenshots/windows-light.png | Bin 0 -> 55452 bytes 4 files changed, 5 insertions(+) delete mode 100644 branding/icon/icon.psd create mode 100644 branding/screenshots/windows-dark.png create mode 100644 branding/screenshots/windows-light.png diff --git a/README.md b/README.md index 84475e3..ad73cb1 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,11 @@ Modern QStyle for desktop Qt6 applications. See [documentation](https://oclero.github.io/qlementine) for more information. +
+ + +
+ --- ### Table of Contents diff --git a/branding/icon/icon.psd b/branding/icon/icon.psd deleted file mode 100644 index 58c095c38512ba3ae97f9ebf849d91e6f02f824e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282546 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
dTC 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 OO;%{-vv1~GWUYfps^ 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

C>= za!`PQ6$fhz{FpGw@RhfYYQV6tmiaN^l97{4&9I>3{1~k4!D2ZW)C_ed`WUrfh`}Js zX!MwAy&n@&!vP~-`zy5`+Hd(WSONyafuwhQhGG&SzHy#fGX=wP@Q(9X5R?2Eti*yD zJziuj*JCrgIIv^dSME{FLT z>=Fc4F)mhB?{tDWG-_G`CPXrPzD(<3O^oo!KSh(PIC*1Fu$GFzu$rwO&Fmz>3ba}iTr5b}M?cs`v5^!kA->jEYKS!`%r{R2 zGeI&k?V4c?n&HQUNrw5hLNlx!^Zl5~l3}OjESDy$$`Rv(u!R@6gI06szm5=Q-LhNt zV}f^ZC4s};M9om?sEIuEOpuJ6$ZLiLKhd`~047W_Ojw*|n1C66%oNG+d5mUQz&Lr$ z4CK#6^kds;5A)wDlQtW&P-Fd|@e*QcdOqLA1B1E)iXtP{%R|axgU=sExn2%xHpHM&a$B_)1*=o%&ALscPxDEwvq#l-QoMxD(F@DSh$w-T06lBD( z^Gx-lCT-*v4_B+!@q#vN2QlZvxUr*t;4~GufebBLqZwKh>Bo$h3^OTSGqh->A2VqK zcD#(K76PIbBrU>51b4dB5B$XfE4eYo{lWDGFbVr^G-;|IGhQ<6G*@eet$Lv!6DAqT z#%YG-w#JW{Qpt@)yc7*9T0us%3slIX5sPl2YFChA)lSZbMcAuM!tb;Fm@vuEiUiHD zCdK*~c>M*IW4l!C6UJ%?Cdr*rZ~8%vC&ly|&S+BDf`$K)n5um73DSX3Ld<}*d5U3e zSnOlq@)%e~Mcg@x*9^-f*^ik}hCO0*q1YHyj1kN9Pkb_xekckj#7R<0F5<$rHj_W! zhroF=s1yj>SAs_P4p`%dgaVnKj>j^4laSq4?S?LXhQJbFd-1($Ap1Nq~Gn@ zEQPQv*Z2@@e9>SV_Qe6kYbX}k7y4qvVz@=aV%rio&v0AI2*D49kwy7IlK~|W5^FOR z!-OUI7CN@`^!$ zNk1KLVE~#4O>^lOEaEi8*k-&MNgD3a37i5b{yn$qozbM=P{i61H=1Gwpm~uJYkp7= zS|N%=ZND*2ILjjk#6syQ9IGI7Lr@jzgW%&o9+oE#al=0KduW2+6)Sy`9}^BmGwDJs z5;PMJ!>7C%F&u{xLZB!59k=k)qZMStJE1AYk3wc*H=LMA=JlZPB15UbIY#X_((vah zH>2oQEaEl9jEeMQ!f5xP-1}cn2(E6-rxYLbLMfUl{fF0ltC*EgG*#`4GBPk!6eF1! z#TYT{8Df3VOQ{G>EN{8{pTb*D;kJjm3#UVMvW2QZQPm>pPP|e>w0n_{c?C^HSgL*l zcL0o(GY)Lt(&fug1e>1n*0cd!DY;d6b=Yo%$mWMUL!#4y8?{U9hZW~RTU zA3^fh&;-{?p6Q;Z&et%uH)y-CDMtDp$16rvl$CzaBxsuEdPSFGGnyD&K$DpaX!z_sQW5S_nD*Uv4=?jA-P6%@s1D=pDKXKp11f;rI*afyZqEJZ=|^5Im+d1qkZB;f_;? ztOJG_22vRArxuPX=S?*!N^CQB`;5?<$Vq2{)AqIkFI~151^p(~lZAFFzK#NoZ zk96%}t`N8n1&Ybg!&;J{t~&-3E4|j8Azw>9fF=Togu&Jd#ax6rvNA4K2%MLK9bi(R zW;H+YvWdR(@k9*Qgm0u8FyRiQY611&nhHV}phq^3<%)st)C7lvb#Fa2sq2{m#SwzD z_MfCC9IOo*1|^n2l`C3NzagJxyN(}$!iOE`%ceP*ws$fxzLElRXu5qF79A$XPz`bv!y1p96q+=}EbuUy94oU|P5<;mMsqm6wR-Hwg&__gm zkgDj&H+j%eju!}z1ijIe5se#v@Y0F%QX=fFqXOBG2IG@oOA5zXR?6cn(>+oZd=$sO z0YpD%BR$3o8PV(I8JQG$cqs#}k2v}K#!(5+UO3r`MBY`oiAQhZ>V5*Z7aYC`aL5P6 zP8i}H*3Vf0ov61ahlK3|#lPhy60Rk}hY&<$rJeAS0oKZ8<6GXV=kABgUg<6OI93bg zSz^djWDZ^;Fn7gjxvT>OFbXAY1RznbgE00yyli0!S`+ip;xZ2szyknOc*8vbeQ!{d zhq(|5vq^UEVcoPcml-VpQaG=u@F3i&8@Q*y zrm)zE;)r`jAP`nnTKND_kE=wFA%M|vX}$s=v6j;VqLPt7m^rb358(h+0T@dF4}lKr zx$r`(E))QR?;k*-YH>R*SBZ$xwR$crEo0Vk&w&5p0#3&U0TNc1V%_4#h>R!7j0J_i z1SCocVhfQlQ2+_OytNQ{m_XtpO{JIIB=84#rPxxq5df@jHFp6hUj?B@2q;8np)0-M z!duu{s3iM(LH+RVqXpW_7Ty$9q9qVm4Ev(=oSO{1g8snfLNE-&ZJ;6}0(+FeVmKLy zg#~Ye<2qAsOW}3}Fg%8Jj3VAzh@~GRunCBL$~_0J1f|$wG+k6by!mS3f%T{m*hB&g z@o#7l{|4S+M}8qLlMwxZR2bY^pkP?yjlKt=b!ZS;=K>7mK)KLU6K<&hV^oZ_V+!*G zj1vSD0`|}#V9y2cKFF}bT@#T9SZ8eyDuc))0A-#epvO^VRosg(o&c!*GXWGfe94O83K6>Ko2NH7PiB0ZJBUO*d^aWBKw z?F3cw&4gfBDPx794U9j5Y10VoMbJViK+&DSU7iSvg+U2Q<}(kF^63OJ1$1zSn+=N{ zFvAjKN29;sfC3V{wLhT|G6`rJ3U-^D16L!gOt8W5)g)BJoQM^n0azu*B?1ev&FD%c zTv#xqkF42am}~??a0_z?5dg|<2j|Knuo+<7n_O6nq>JG(c=Lr=SfzzZ5OGy)M<%if z@Fie^UCbp`MnN9m{DGikSTBZJ5aFo+T8WWEptIm=P`tr~Wmg(t3lUF?`vNp{@iC5w zgYrkv1R1jBGDdv6&V>bCYRI9trEm)t?4g6ewryyOJfhqju_+al49hSrJOFG4U?sWh1Q_C@Qsr~GHw0i;h|o&10l{G`AqW`74B}-e2!aV+ zLkG^`76TZgxA4t{d*49B87p|fl41eRlUX;3f{Wn3eVKa`q(dg$%}WI3!m3v*AAnlD z2L&@q2rLo2F^hYPR0Z56aNkkX1@vmIA-Io?GJx6CI|LX5M9OD!OTZc!yvEZ)xG4|x zZfyW;hhQaUDFKEclnkW|E-YYG!^k<_mbecSmJIz@jBDhe{0_vUml0rya!F&Saba<+ z8WFX}@`eBmJyZlcsX~A+HuW9>z5@X)lv264?ADDa8F!4rlA#NVU{^H&E3xhq;Jd(v z;zjOVXi+>7Y=v7+AsD)t2zJwK0&OrK5@3i2N@bttmci8oIt4K9V})SoYT5zVQ|B%4 z%y>+I?;#uKxaBba1zH8)#Eq~Je2)Zs>qF!)4y}R!Kfw5_XSw%a@gg^O47t&)0C~wPr z0Tz0NHV})-PK5wJCCaTt^PS*6f(8@gHhEd*3BVA!$_B$=IjccTGI@xjjQ7H7cq^O* z&$}MOf@OCCenkMk12+zDNO9MKxTH$*f=7t(jy2$qL6jhP*%NX-EOQ0;+vuWLf<6Q& zlNUU`dPcw#Fyzq!VAS0rM}UTyT$Y|7rfD5$gib#3ctL;3*TB7Iq6 zAT(PQfO8mc2-fQecpQYH0!bm$#r(3MaEKsgff2-9G+u%sndDsgD}c)@#Xu-5Smy?r zJo79893qpMyF!Ym9z;P?VhMr^LJVjc%)-_}{5BuRbTq#tfJ4AD3m&BSEP$Y%Y>2px zdTa!1!W;^uC|kh_Lc0tB7^0||J7Baq706OxlJk>I;3f+DFqoPKGVWuOEwl?T!G9`s5tQff!V1n#Z6rBPh|^;=Vu48-pSJQ z01hEXMeJ28Ac7;Cfs+%RfM#+cF}|Lr3l?R4PJqruNg>5uuM!?&0QU?W^^47Au$9(f z=ssi2^sr18z;i%U43B88Tn&$yM3vZ#O}I*mE>BTf1AzfWRIz3ki?afFHc09MDbAW0 za8XQ&&4gj=dWilkuf*l9#;AjO80XN@JV`)s8LbK_-V18s6#-F>90ae}I9HS*uhao} zXdYFpFxTd^01uH8ZM-3cr|}GOMHN`|Jur+FqcYh_pMe1G0J?6F?QVHWK#&OnV2Zc# zbKsZYC<@kiiqhmbZ9o8bE@exMn`wShK#+mjhZINkm!NDhMR^8dzV5V2B>4kXWk1iG7s5F1p)!|I5D;yh{! z0*+d%zJ<0FE1{pCdjk2ASEvRG==WMS&G9zf-+{SI!r;))y=lYV*b1#l9m2%?0n1}`>n z2LK;l79lH2LIpsKRx8yO=&FjkB%5AKe^vMa1RKgy+#1r0We3OHViT2puZPTiO9YS?1=&@2MlSvZE(T!K7t#G z@{LuZ0Cj>Zs`(3i-ts z9MEaLatxr7Ku8nUr+~7=c~}w!(a_DUVfP&H22Tr(IDjP+0p0=TY>Bg{Bn)D$!#+cu zu!)PP<9y{K0K0&txxjufE><|1Nx~qIJHTMm7f~-OouhzC;fl_)gUxjSg)@*O3PQx2 z+fXoOzN@L)aX_U*Xm1OT8mtnh1WD9tXg6#H|I6omozQ!_LA=0A{&rDbO zCO|8odVLE>5`%4Lh=~Lt7Iwq1bimz1yqy;6Dc=EX4Obi%=Q;bpCLyqc1`gweSlH~+ z+{PI;FY)G?>#39j_BpU%VCe$u0KH-34jh&Xv9R@rg&n^PxBam;(tHTmSFp>6wu!CV zUC^tI1rDHvSXg{&>EHo-w|F|3>8n-(wvj8YZeYRlhV5BkzZV?33bC-=iMf@d*KJr~ zZfB~m`V_$L5p3?@0h_~k;I1ZJ;3p*b7VNoXZ)TuT2jF&YFJ-Oy=8m2a(-P3IsY)08 zA?3TZh?93QOkX-%FVItM1bhd#m-;+YTUVcAa3#Rw08hxvJt*GV$+O6}mj}<5Oa_d;JuAHKbXv7QFZH*MldDQnI%v2<|r z@x2Odi=8D7goG5Zcc!Hs{|XSeIoX&Q>Z((ecXK6`HS~-Y+VVU;`QAW-+7jaxAxSYs z%)-XW>oV+x_BE>Y7QHoIq>)%u)PZSj+=uu(VZ8T zmkZ_D@<4-k;Vs9nUfZZCO~xh_HuW2u(2}7`>wEzJroI0rah1E)#ken zTom?66NN(7c7trCNLpCh*g1juzWHwTmGp-F-q1q$K(nhL*yYU}VPaqx&x5c(l?NCS z_mgY;35J`}^#LGZKo>X9bH06G?>QGI2Rqn7PS92hd0P!{Aq^m~wssCqJQr6t53f?+ zfj(XyZm!NeAhERu8d$U5oe$jH87i=_w6wCawzje9w1uaL_Fo;o+QZ{s+wV3M>rSih zmZBEs<~UbI@(;_petb9@`i3UFpdd`Zb00r%21TkMeG?RcW3|qvfYC`!w{_ZL&{rP^bSTEKk zsDD1+&ppUPn#qu3Q_X^%gAi|JIG;)o3Yk+;2@DG0^L+dF;i@iK#B=fH2T42g-97!3 zWty{cWu!e_m1QhhhBU)PntTsWy`=$sv!zB0U6y*gD7ea~s`TM5QC#A?$QMMFUgGQH z7pS;IS%wFk@D<@4lc_S&1SH5?Sw;Ii@sQVJ=-BMl$kq zq!~0in@Url(%7;zx+0yf$Y4kdJ~AqO;EWsK>ZWK4W+1DBU&=BbK|zZYsnpQW(7B<^ zx&8s}RJwu!l)<1f7_xwn4Gi-O;w_Q&3!F?AA}mLXALtU`xhTlf-%lFL~{be_!en-Xbb}E{*EzOZ@}oKhyO@w5Xe0KUD@9P#Lqw znp|CeRJ15Kz=zO;s|%Iy!}sO;1qA{fo%%xoARiY@XK1Ks3cllsI?(jt1qP}t3h?)L zQ-pfB)E@J@lp~6`keXSZ+)XLso&#c9xZsr@6^0a9DD(JRH!` zc`V3d zy8Ym}8|}~KDr$ne2l2JwPlZ7P|DbVX>CA<6mLiL#NN3EZF%)Sug1hd>p33kKSm^KX zqe42hzK>5ZTuHnj{{U%CO=$*WE?s(tr6*jJp@B2I6(=D2r94A_S5LRFzu~DH^4Bs1 z&COqx(jD8a95A{fv{J6YF8lz2VA$gMcsd900>Y%}thuP0pHSVXU0oF2`~!S>K`OjO zi+ns?c<57z=2E+|1b8kLueWa3A9-;Tsc>~e!$SShvJhE6F311BPPzp7|EmTl_x~#S zPs;s2b^V{Z{*wm&6ZrqU>;KgCpEU5F!2jo6|DUO=+t>uUs>(8F*bWJ!okT7Db)U3k)JUVxD~08Cr_ijihntOgf9jB6^V1X|(AxVf^Rn$@^oGCcFSB zQ81P>@#I4{*U!x#28G>wk_uQIjQdRaf&Re(F2ul5)8EHGzzl|Jd;n{jA*TYA_L3l7 zvmof$LWVA8;9wNVe;RliYSN^MQKt%gx|GtT6O>V)6CF>VAbtQ<#|L}Nd>4OLK2U1LYRjcY9ow!M_^SNV0=rB(NbXfG&}kC8sDPP;B6N!#V4C>Atkl#^fFta)jU zp$w@BvA#A#RIkc39CwT@C_i35Ed0}Z1)pTwJ_;q@Z{MuR_0L^Lttf9zo;l8cQsgji z*^GH7CtV(I^<}id${gQhyFzMYtV^0j#Dhmm_b%#4UA+3CayrMR$liH%Y_`;g(M_zx z@S8&YM=cARn|VPs?arrc zKZRsUEhn~D)6o$}Gioxmb`HK5Z*AQ0sQM-~I=IlpIP6(~mrdD)#Xik1_nV~+iQemU zU(;(uQfhhAuDMwT;g1WsSEd$xJ@#^2!zW9d{(6O#x%=<+I{(pXS#fiq*A?+|?N-H7 zSz9~~go+P5cD!F@aADco>IFr6%M#!2Qa<+Pv)!61@hOLyTSFQgWYPwTbB#uK=1(0z zk@4mGJ-_wL1;^1zwfJv(kofLcDcm4Pxiu!@-v(efmTQg`69-Rs_c9D61Lw|9j zPEy9umGhp+>D{_IVnNZ2!$uPl+*0gU>`>Xu5GyZ44CWyq(qbkQ9XKQ@Z2iX1iJ zMvFkel*Zt2EQ?VRY5@*TF%d_dlz%S6n!<|830Kwu)5SoShE-Za!I( z)wi!uwcK_sNLW{rnLqQKbi<4HnoWnr_daCF&m3re$YsddIXk~?9Lbd*)F(W`HB0B@ zJZW{c^^^ke3;P?+ z$>s02WhjhJ9O5dec%ePj?f`dd<%U)%6LrUsGafcG21)I)JNVV^sK)&9uCd$ptqoz- z51O?*Y1O0!&J)#NX^tKcp*e!Sb%(_EQAZ{Xz0&VwRlQDp?@`}RXUsk`t#*CC=)-DF z{UWAsT)bx7DDmM-*GEd2u4oHrner^^7Jmmbv{va&#J9_bj}LirWW&ai+wX=;i`d7M zT&A6!kmDOg%O7)X5M$VCM%(?pQz;$61@yWhqh_C*eLaG@Y-LfRo#GnVZ5+A7XX356 zm;EOySx+|In&-Cec)Q7(b#?KItwWL{R*3rSqD^wDGn+J8vNAtv@vU{Q)s8NIo4-)( z{LVQK`de68H>UX7c+?$~s2`KDouQr{YdFfGfIj-6yxiy4Rkw8e%{#NhyWCp-U0RF% z=Gz-<=ggWj;L(}wt^HRYGoKn)PYtTR zT^ChyW7doSe@SW8T{E?uf{%%d4v)DXaiA=3YyLp$`=$qZu0AaXBF~n`i#rBfG&&e+ zkirSyXkuP8L%hUi8-wRUlmC9}{l>P{yF!ZH+Nb0h_xnVDptiR$+n{K&VfdG|&5!R? zsEYQZTzx;>vxi#-HiUwJvrRn5soe|HMKVv>G3})r%Gs#vGrsAmPfiMFnO($mH zx>`(v28*$!T6pq9sW7bdboa9t&dCvQK`q4WgMWaatrz^7@%tPCP9V(uF>MF;rcnO? zZ)~xD6xwa3QC;6m+KuNE$fs%;QjKs3?nBj7m&Q3MV-rD+v56tv56#r2g93v2R5L?f zpf^DM_@rzL+4A@wyiHF$x1S82K&-eI}~#h(H}|9tCUu-I}` zBWY&$+sC1OVGGSdM-;8}zY)7*@3{h({mN$gOmDEoLM~H^#_4vAlU=bGt%&XmfK_ zO?G=sD@H;lrGd_NIvSkro|HVT2{kl~tM~S-b0+!8x1C z-W{7`9VB;nX3NYkzCwHVeWUEdhW-?_(HzMcdr|`qDJ?#Giv4Q-$I*wvj_sYce!3)-vTe-$ zu2jC95H&+?;g+d0-<;kf5kb?Omb|B7c+^pwgx#KFMWS+B4{;KoI4{{5p?x?nPh;i8 zyGrZ6BuD3(Bv#)p-+e1HR=uOIzprY&rE;HDOGYG@d`V9$lcj7)7QfO`XB&Ojg zE&1#z`Pb)dV&tXWrbi^w@~)*9(r%Pcnb{_Q9-s62Yk>%)Gyw z4PD89WGtupFeAeyStR+92 zJvZ#Sx{N6V6TW5iM|18YPyM7rtoFmWb_nz2E6Bny|e0+10jAL*_?B zI!SPQB}+@msQ25@*IIqRj@d7Ieb#iIF=SJu>ESsiD6>{C+%bZoAzRw#gyieU^@qoo z`n_r|UGPdgXuu`$6}=4A2gWzY@282D^CtL6X65Ca8?|k2za8(WHr?A;h zecDdl>wWiZ2w2c>_>rd`Lk?~(zB?vm_*?DByY{bmALN$yiqUW{eJC!Gx35-PYO-GM z%~G>8ln-yF={?f_v|-WuMO$fxOXf`(@>xrSzBWp0jL#&dGy1AYcq;wjGS4%$8w>(x!TtFI+NKa-rk$^I{fwM*S@cZj@eqL z)%O^`>|V;tlu1vTJ>tp}J*cn7U7BvMK|M0I;mxawW!uYhkErr!qx`mb=u9fOVpa60 zgmd-N!S|J0yz5-1vCN`U4{VJZFQ4V}F-o6ziQy7uaKP}EdflWt?YhY$*1f#8>zwNu ziw9C~X1tN`-dDok{HVdFf7br&$Q9dG#A!auSo}<(kJ0pcvD-6m+t1ApuA7$;(A1}C zRC~YBgSszzFEMrKl^oe_TP^N??U2g^k68C=Cl%+;ji0AXe46$CSjVjJiQlEaD}Fz= zE=GIHx-#djSHm~o9C2rk@0u918C)uugFlb7YJNLjJ& z+p2HJKMow1F<|EauSk)|JL5Vx9dMyr4VPaVbIom>@A%#0wr*1zH+`I=LhnNXF^Y!< zaHtY?X69tW}QS-c;7*QkUjA_00{`_KELv$6S%plk(`x8S>6I-ZGxC$hI~vB17F%{q!0miEooRQ>-RlR{f;D z!9Y*{`m#yvLhj=A8I~PkGbYK&r^tSIUOJMO$6J3cg12(u$n}=%n|tTxs-08Ibn?lo zk~%JBUAS$-4ZS%RrnG#!egk~a`ku!<_TAfeH@%9v+wRPDp5^@UDtBAk=KDqA!@kZR zGR=CL!i31esn>#w3=0FF1wM~_o@=ydp2^fk!zlfJ^L&iBv08fb^q=eq()60X*C5ou zeV690{Zr$N4j*?t-tYMG-LDUvGFILvaeV4=-}zbDrNM_oo-R?;+n?w^KX><}>nCn} z(ws(TP7a*XO0_<6X5X2Mk1HFWH7Y+g4s;Iu65#jpQvH}f<2rilrk0R;<(u1YHs6V} zdy(bw_(*H72fbdenY`|3{^k6bbr&~3AL(zywI86iUt?Vu~eMA|2q5T#92p%i*1rDmg48OI9O|0uYA11e63f) zYxS^&pPfEWPSsLA)0rl7(s|j{i^U&`2hLu3rZ`zKev7wt_uxBmyZ|{99{-_%K zDfmO^@?4pfSI-+|-F_JpYB}v}Wd;AivF1zXXDz?~@%}5Xw$~e3BHn3d!m5&9bsi~7 zc0X4i=@8aD(p%d*@`Gv)8zj;H;eB3{Hcgf{Ic4w zhF7C+_m>#pS2MrLr;@9%=Zi7rsEBQ6RK|fR2X-9jIOuWkezZn(@}Y5uHXdq^ag8a9 zRf|0vH$HB2+?ROI_(z9z52qcOc4S|IL_$bH-BF99MaMYDP9}~?+?@FBxZm;G6Q(B$ zPqI&*JT>mr_S2%LgHJb{u{%?mq?MF$R`%@S1Y>HLEW1{d-#axR`t znVNDab!h6QG?BEhw0G$q>9rZw8Fw@1W#(T}x|EtVH|zN2NtdIuhi7lk>65cI=X>tb z+_o!=t~BPk=RMDN%&#c0D!5m;pz!upgR9rC>0B!)QZLHAu6+IS4aFOo#hl{woANi) zZn18qmas}vZ_D3KyTiVdQL0dS=`QzfPMK<1Ub$BJwR`&aZr(S#fA@j;gGUeT9@ai` zee~+F&*S$`LY{oBSXJ4pa#Piys(sbts*lvntVynwug!j{_4L*=vu730U7o*r5%{9x z<=VRbb^Gck)}MUEcy+l!r=j$c56|NOnYhoB8chr$J}sci->d zp_|^mw)JZd-E^D>5%eqnZtle-z%vBqEZ~V1c2K)@V!L(t)%EcqI6N+c9xwUiU0olZ zb_qx^oi0r$=8mYpW-z4bs8JQDGPd?MIvn8^|&2w5gfT=nlW zb*g{`Md{xL7Bfs|f>3j5h*H<*IR4D6BJtpo%+>J^P?Vlw?Bf~Y34E{lUWQrgoG3kaAZ2$L!~u*;Kc?gR9&Ct2;&kyhz3t7VHih9s;*CGIBEoY`nZCfocSO%lg=Q}Oh=+r zV$cUAjNC#@bKjYcw^E};$Y@NzV9NONF$_W$kXPs zq~#RgtLs!y%0gg~0Ld~~^3t;K&b2hW8zC(xCoceWiOvV(gepqoK#s^`Il@rUjMTE6 z91S#z--0aDU>|;fxu0hcutyf9Kne(RnS39xOIHyv<44FviqZ8gKrG}1xbuT>R?;UJ zAM%3Hf7Aj>B*x892^KgNXIzZ~JmHlRMOg+@L0VRhMOMUi)D7@-?NTC}0n@9*7Y=P{ zbD>E5z)T~9roezE;O|o4%@6pn<>@RAT@D8Gb2WipxgEiaGX3JUnGsVPil!UxYWm&wFjCX>w7 z(ILo5GI@D~$-@V~5hgE>FnM_$9busg3W!lqKn!Z1AXiX8n1TYr@C?5Zrm2ZAO-(FH z6F&Hj7#$tV)zOhhU&Rvy=;)9{B-13zBu8YOWG<2-F@7_#slfxnP%ivN7?X)GtXr6e zLg6`LP$>K+WEZM~Bu2R~1%IJX_>Dy&>%yW@C_E=*#}kC1Tv#i@NET5#JjbF)(RAR0 zJfT7n2h8IMsc%xFq{2v2%t2A`n`EElj;x1kDR2C$mvTOhFjw>nJ0s z7m^si5rYB(xzNi=w?I>23Rwph*5%Gv9||P&JA!%qi7?VNP)1Z9rlE}ZP4b5rQnf(l2;m8JYt0Tc!mNJ%##-?%1GLklpMcF5K2k9GKwbD2o??GNQUyE zT=ENsW^{A*M^6MD1NF5weR={0M8t zbJA3rnsn%O;0KRDPM*?<4?No=K3zv>%;AGKR{V4w<%kcEvsh$S*Abo!!iUW!)4Psr z;=>W#>hLJ2og?_DtCJ*MM|I+(p+Tm19W{s#kZWm?SzSjh;-jrirgt5+i4U2I--O-q zK>k1lk!P4j{vwYkBSTJ8j-{iegIfKoZx%~OM_rpEr;fKO9W6ExvJ{wdxUh@Egx~6r z&C$`Kv6ymjszuYn-|9d9bhOa!>e@u#j3k45pBwCr7kFb7Bhr{H^ zLG4%%OB+i=2o}MFLO1{*&ygo#F~1&x{O2Sr6&Yq}fN%9!Hx#NN6@X|^6couJdfmt({8Rt+ z2%sLBM;xIqP!6gNm>|`IMxzl%6LN!vB6q(X1r$GI$1>>*79k}I&BqZIiee!1a1>M| z6r-En(M&=zlo`NiOv3g;UVcA9?Z_|?Ke%A@|DNG0QE>?u>5_YEp zIY>=NhPAvj0$wKp{v3JV7165fsBBctZZ@*gOJfWJTR%Cwahn448b?`HxKu`>nMHbqn50ZI86(qaAYXS-c$+0+14*Vm; zf+JK#I4!Ab@FbcL07ta4;41u~nI2pSYbV@QSO^|bNlb7RO&v`J*7xh5y1bCbZif3E z23)8E7oZEchP&xosCV*;!@5viC>h8E1oCjC6MwLbyuZfI$`UA(`W3ppaMI+PunJ)!`V5&uEi0MOE;vo%<3_yzyqiid)US`k5N z1AGF=X?WvB)BTHo3)Lk&;x&)8gCj!i41owxGN?%hYGM$z2t`Akfd8Q=U8Y3x9xess z1#9U#qWdzz|9^;y0^leS>Y<^0|I3ji7m#Xb5QPX;1IENw6+{8^2_^12V(Sa!3~)}u zzew}ZH3i!Ko1?JyeZXvvcQOBTf;xcC7H9-0WVH<|JCS5~= zsGXD<4Wr2+8l=DW0U#GD15Lv~-&Ys13BR?0X=EJ#5q1A;W+3l!f}gW~wLEw^Rsh!o z;ZB4IKn^Vb&z48o|HWxgGlD;GW4PZ!<0G`=j9B}x79|^G;#NR_f6edqTgZI3q<J+v*-5m_bg{l%B1xyp|DiqO^N3cN{LStCF@D|+D@n2dZA@e=gg2ckw zfAKfc?|{6^1%kMiXDy(P!BWnLO zOQ=NQk?=o~3-ov7;ZI%%b^q`}(m{a>CJ+E8*sJ@g8B-@^heq!=7yaRX$OHZ(`Wan! zIKo#@cGPb-_aJ`v;Cns!B#{5vC3`IRr;5nhAxWrV4GkEMce@F8wSL$Qq~q;G*s}+p z5HjE89zr+yp+Lfr-4xpWHvb4$Ce`KKxbv2j7u#>#Mqeg!BO`Mw&7zMrQFI}~(D3bgqN9?JVZdLqr zg%IRjx<=(PsZ-5pi7M2 zj5jJ&&5zzZxGc^lbaz$KWsxhK2!SCZFwcP-KkJ9wzqu^9G(fQ~AVcScB7eA8m*#&Y zK{o#TtKTH~UqO2+@~7H+)-EtjvQ5m=b!7Mc%1+s%oXh*_O0_K17u%6P%+W!g) ztVsSpn@u=l_LoiqBK}fU54Hcn`lu{{#Kc_@Mfitq;on$7Fx~f8P^=C9h+2h5 z(r`Z|39^2(F{ESKPgVf(f3$ITi3w}V;Uurnpv2q-$q**}a0gV=uUhWuw~+Z?4AK)6 zivJtK{SB$mxKO+BRCw%WUl8VZZ4+DwtUxmVn?brm;QWvILfQWT@()D`G~bhrf3m`# zj7!uGQg^$C(R`XP2_z?&-Xd!MVQB#`0_Op8vIQrS|FikJWdF~kSRqONFQh_~{&Iu{ z9Lc+1#eX%yDUct`DP;bSmhFNPXTRW({FkIZ{_erNNRBrl;xQ7@mV!yJyMSi<{1^o}i%?^jGD2zMG>Lz%)C9oB$TuU!ZKP{a^I{Px(UC{f|X-tNjm>qQrzYh^ck# zeUq&dp>VSHzt#P3I3e@@+XeeeJKuw4!AL|CO86$un+QfYa>SG*QF~8PlSE)JBq5$w zfG?m+3r$BHN#=z$K<5x<8GG!42^98=g^>K0r2q0;sJg!>q9+l79FhfHFXE{T`aH^r z|9&&nuj#_t{{s3eDgGwO|E(5OZI6FQE^K9SMvj=31rxy(TTilL8vH}?&`S773y9z+ zkaU~u_{q8m#s&>1eFaV<>{knA{|n6%_5OlG@?Vnv%Wok6ql~B%Y?Qhlhb%M>$|)EWfEiIvEcn->z>G{B z^%BECsPESil7Q@AZ6Z|NZ+)h}GoO(8KgcG~1&BpFz9twKa7HMcto^_0{s+E``5#H$ zONaAc(|@uPN#2zt)GPU-2Hp%ot;|1;YlO8E_YoMalD39IfC%gD$#g|^VDEq&V z{7DcX7t~6~f?Y5sv@^u@Pu$Jn4BP)dSOaVSLsnP1poktUK*}yO2+_`Aqa}xvilk16 zyR8PiZ->u@eicH%eD`F+D5zf$gm^`Yyk!&Wg*=?!B44KgMPu!MysiWqKyL7o5(cHFbFY-PFa^lAQ!km=6lfS-=_6UPC6#h$Crcm zD}Q?1i_x9Ke_*~l>`&(c@*i>v4Tg6(vfU%ihW9@5iumb>%>U7FJ(6Grf+C4`jac}& zqRYq7*Py^ZvHNp6QG2%}WKC!;JQDA?;Y*=Vfv{HL5i06p{!iu;7AACEJQ6lxL8k@D z1>FEh#((5x({=35&9C{yAe1Oe9`7*fL{ZRp6MDO#$nG_hA}L@K$40LMGLTUC_jfNN zgDQYrhkR2VUMA|AFFurz!Glg`@uNNd2`dUT3C< zq(A7pCDGO^Rq>?lrK_(E{k<-aHoClLAiJt#@v`W{(<8pE-*%w%PGVU=*rT_epLQoa zl^e{PIKcMUyqzi)7np}bTT2w(Wb`NIaZ3u?$EUvRP;Kq)TRf+xKz&U$$8f;(<3B&drvHWLyF8Y4^P3NDa*y9KqF=7BzB>Ovu7tN)Fs+xd zL}ImTW@U%xJgQ_uuO-vX`+RI|eJS40m-Q%Gs?SzAbD8VmUucfo;s%_4D!%2QjNS*O z`?@9-N|XU=>*MY=KMnWn74Bv9aapOts$um9%cI|VsZm2(s`De0Zg^#h57UU4q?tkW z=%bZ4@#*A;gMtRLT6X2_xM9#sV_Ki(QsNpuV!T&FX$mW^%{Pv2TRYxyQ#E_^EJ@Kp z${jaVyvFStdMP`$S-pLf$pW`k_e+*s5cijoZn>GaXT12TNgaIK6p0T(7bJ(KSWo!4 z!C!_uLang4Ho5nqzEbbf2Fx%|s4xGlSU2_Li5p|3hRhk>_rvlzgXr@Q%G{c`wpdav zf2EYnyk`p-ULW?)_%eN*%$mV6YGXdHo7!tsYq+X)U=U^g&Xb!GN41+rFXCplaV}b` zw=@qLXnf^5W#C-4*~gRbdMS%Z53t=Q|0+@?DoIhJ_uFG>2&wDwCI z`ZP2#X7Gl#mrly@pVb2wb`D&^pj?z$wYLBCuV)8GtqS#6;9hFk^nLvo@dr0Y?C8~| zp*ZtWf35BP4v%ScSCcV%@O=Ehn9s95Of-%7Tq0F?%PI4aaYJ5+{KNxgA9!qLs(kd+ zf%Z=ow(EEFQ(ogg=2>m7ML|hGj_rGo!rXfz1MleG)Nf6$3U}TzyY|`fhp8;hxaSMb z^?xBo$=?-Lf3*7h9p~pYrupI%I&0P*Q_$G6Ab-+|!son|osJvUMZc(AGC=%DasES} z@{T~tln}nkJ?j%YZq>B5jrx!k7S%jG|4HSUw9@MgmV3lo@uYEQ`DT>Sjbho;9@si0 zpVisSxD&5@;k&oO?Dm2Ca$jRBZ~S%^bz7pASKBZk%?{xHfv3Qp5(2rA#Y=arG6D_9YS#&Hq*l|T_yh!xLOvx1o z!BQJ1PG&^S51SA^ew(xZ(lKW^C$t6y9ixwq@6vuXwM?pRea<~;s9V2Sif zbIH;S7sY;2D>Fuyx(r>+m37_}Sa|yQ7_P~hgqa%EQFCmgB_j4W=&iUIU7(Usw06T* zqa|DSFnv6Wf-@DYMfXK-xo=B}UbM)nN&9)m^Uk7yDDK~Svt<3*6)PjI=F6Km zd-GeelYLjK=hR=D&_`nC-lqlE`p4eR)05NiNSRL^$UUzyWpJs7P5kuTseXBu#B{g<#o9*PX>(SmN%%ypwE*?%SnmzeMFKZ|H)R`J3T3hNUrY6?vYTA@xYqd6T z)*KCav;XrF)uETJcz@iXXE1P83~$Vw`iK|}&GU*i<31XUa(HCinZb zpDYM3n7wqTiVJJmu=Pr#hI7`Or>)ah^%LLs*d)quaM+PVSz3Z;xnGXr97!2789j;X z8x*-iM%mh>>o2&dtZdbsCbsm#gm3(Vq85y|Yt>(UT(Ih7MbIpp@y{Bj&3C!obU^Hl z$GNywJB>|D9=y7)wWrM2JAUluHn$YYA;~9xOA0pcNJ$C|@$dVN)^bRq;IpaK-5HdU z&Fgmch}>-Hiu|NRL_}ya(rod zR?7=&cuIAAVXW!Cf-81ou2A*H2TQ#9>?g5w+K8J68B*&~6kDqf9hThldWij?ZDUG% zi5`96He1KnE=EeaEc#pc#a(K>*Y)1GUdyS!`obxCoH2zf<`=TZY}~bHrpDk&_Df8r z9v-0a_2!NVBOX^xtyTS=t}xp7L8a&x@fqPJ;uE%wdb3t7@#34=cTUwhc{EwerH?THl3%jN!XVQhL%$+CGbVpn0zU{rPNiT0= z$WW(giBBKKSRB{+@JQ0P<)zb`XodTdeJkGTRJ`2K{&a<_N$SJrH`sR0D>qqiR-b-W zqyD&wS@}+NOqJH7>E5G)MtPTR5|OuQtv>Sn(KfDV-@0W3nIdha&9xGz7aaUvWF;w` zoYX5~$3mX&3+w(*C$t-R&)uK0y}e*P&Cw)*J}~5*OH|BAFE1a_e)FPsoT$ydZYw(N z@oo7JHHs_jMUE_T6}?7xI&hQ1;DF+J*WgnlK5@b^@ z6MS4J>%A*G?yTgc{MC||YJ6A+B-1(qC(B2%p6Hu5(t~-Er^E)Um-IVw$S`Pw%=MWr zAFM=Y8$@pZ*m_L5xc_yB-W&HSW%N2x|E77XgVNEZ>&0yRv$x87UpcePV}=Kd?^Jg1 z+jGkob<57mdK^u7@Z93w7#$mvFDX}&x3M2gHs7#cZ+)h<#={YpX9VYMAN2O4!HG%I zdUD%(`_7ljZ+|pW%iG4ju*~fISrh-lq#f~nmibygtj@TwujNd2;j2X)yFLj8Mmr27 zt{0}%_@(ZNUoz&?dYwckrS(I?G9Sdku0ta(=Wy>2UpRZ>NR7%ycW!~l^}vne7)Po{ z@6zAD$3j)-bnb|23Tx!6$1a`UygZ`qVCYQo=7tjo)>5U8`Ng{(YQ0##OZmjHdm*O2 zA6HmyH|ld{)1;2j)9yD{jmRn(VY;-v-X|x{qgbW#Xc zrXlB@Djqv=4}Xr|Q1(RJb=@qh4JStL2w#);@)4_#r`gQ?y$9blxo+@fn9L_#QA?j! zmG8e+$4e#-dsrqueo4gb%VlzX{cZ=`xH>##)S$FTiS6gaPDq+dj_PkAksW=-Z;V`I zt*xEq>fWmNoku(hNssbhot|EovhRY8y1m4;il7@YR0kW z4RxXSO%FH4(zb->(QV@&>0R@>u_7ooIp_QMlWhYoUQRN3-1)7&W>j5Av2)Z-ziYIj zgwd8~@bp?(PLB;I8?j%_xb;Bq zZ+&yqo?7}h&3^x8)kKL}W4Wkl?wVs(@O6gvTG6+crAEZ^y04QvLtn8{VqUJ7tvr-_ zXM(B9sg~L!W#RtH_rFwC)dhNv?EUKPr|bQb&Zjq~XD^ACop{1ni=}03b$O%Pm6!`o zOor`|Q?3ubj3~%e)Oy~W>uWnZrr){=_2nivE0#?SjAFlyOB&+mXLRMwyOkbCo(@aP zeLOQr*5SZJZQ~@l_-$AFdA@B*nE3QfZM!aQ;j+&|J944|x0cX3+Nml_OueMW515>& zugab%bMNc!?K6%pOWwNBrNhafzGENd_09tJw{Jo2LpLwEoz`%vPeXgD<JY#nB!q!zKl?~%Q+v^QZc^Gr+QRK-D58ZEvFRMA}bIHc= z`t*GGyO|?SX)PPwZ`qQ{g4lzPdk0=pxfRuV^6TbI z=LI93L)=2thlaE%s?@R#s?Tq%T^Z?c*&sBa{*X@XWU6bxt@Q_dC(>^{yP?9fC{r%< zD{vZK@r-3@>woHzCL&MU6g>~p%G-`7Xw z5fvNn`yL+hkvqTSyxYk!SDq|M-x@qX)$L5y`xoaPhA)@6dpWd%*Vr2NdE1KAH4}Uu zdCHw%9O`{Fr)Xmz`HFrYALXwfdEWd?`(|IS9MO+TOFv)zIN^fFwRsT{k1rTnmZYUz zbql$5$@ijC>#FGNtO_dAVSMF*nMW>(dfdv3dz7Hi;u;#&?EEG)FkdBuJ-wkiS%K*- zSMvEzz!keMGh|ElwmX;DjkOf3yVers>({I#8#qvMRkfMH#mt(*FLh7*#CPV*-dPtm zmSSa{HnGlE*>sJ^$B!Y`o&CxzHp{-FUF6gkjNF_)dX|mUsgdW!efLxhvF;zT?`v|F zzrls~tzI`&lpoBwIxRMRp~Hy92H(CZIC*|6%-$D!)iZs$R=V5Gc$IkB-JXH`&y#Md zQnvD|uHTxYWb5U{dN?5`Da6>#D|qDyH;az59WMQy-|l67ss5fit=RU~!5c$Dym!tE zOEPaaD1Gv-@!5lsj%S=!w1>Wapnj{x?c3RX?hmd$Y;vk<>YHQR*fdDe!_T+scyZEK zrR72mrV+%_Aq>Y9aAaB-Sf==ro%pV*AI zZJD%`{_n!B$j6A+_`GS{d?)0cqGMxP)#isyF`u$Ns?`^`=Pt`xmVW$Z^s4NI-rL@` zwHHQw<2OBeqB`*6sc%a60xK-{n%3kvPMH`lmooiX6wJZARn)j^a%=GSjg8|oJM14W z=*1|zYs2>4*500XogQ9kG47_^gn-6!{>Adx*e!=Tw`4W-vz*ntzM%eg{hSWB(A$^% z=^-H#nbh0K{VhUn50%|;?Q_-^ar^Ygj_EhumtD-znE2T7p(g#@qTw^&6t?+P^s~z@ zc~RbLOG@ZN=g#+aPyE05`yCJb@^sqd=$x--Jtkbb==dr9>y6#^mmE*oKT)PN`&Fsl z-*6|J&CaK6ExMb2RM|D>!;8#zziMu#eR$K!tsx_fn-h$}bQ~AnzBp#C!{xeQ@273m z(<-YM-HL8Wj170Z{PJb{wTj+3X4T2<`%i^F^}cmEvSD^p;PIMMIXiqaK1_AD-Ehsa ziQ}+5ra1dPdq(=^oR`m+Hn3Gq+r#}6=pS^i?Tc3poDu%T`@HhYmA;AmSnQ>_)@%XNL7#X7qnI z>u&X0eP=ya`NB(9%{$U_TZidid+WzIe?#_0K;1>%5c?d_-t+5dpKZ@Sn(3aFnW!OB zKXPyH@YIt_Ip6eFXeH^tKF-)Gev8Vox;61#GqXvpL&c{r_hV(9+CzSogb0zbhm)zIGPs`5t z`=+xj?c5vXL49;%o^$UlT6ZUaU8%og^Sh|(jQlM6Lizho3|{0|Rq7NU2$F6&n6Yfr zt(!OEP8{1eCE>+UyX}d-F}@!Z*jd}d4bM2e)NN9xKfK&NZu85MQG*-@uCwxIR9ve| zS~4O&^Wwh!(OGJVJ92Njz0Jz9_?QsD4i8JIc`NzprgGCc@#ftJ;y$lfAwR2XpiJ}a zuQkmNlQY^6@83Ax&c(gMlQ#D1*YVy8IV<{^_BK8|fBLh>Pj#Q2Y@9XqOS1WO(T#7H zdoO#pl({*waOk)9CKVR12S!|;{#DIi^6t@Gi+9t_c*U_kihk!`EJ=Noc<#=2?M-7Y zmzZTP_CL7vK+f{x;f)d2Pr`FQ>FdS~JRKCaxxC>{P~NWUvdL_<-S3q%Pt4zRW(uR^ zTPM9$c}~!U2Ti;~{U64LJT5wTXaBb)2aa8+NcLjZr%$cR3@UtiE4AkQLcb=Pww90k zzYxcK~cAjXmK++@ge`?^We2jNcX|u5|Wh_wBrP?z45EpKa9V zs;W&X6Pj$>q7oh)Y|4%FeR#sf^LS11`H$Yr&y|U`p_`4~F^z&wUDQf#^}YG+GN-(R zqSm_WV0gNt!~et5H-?GU^X!go+qSJewrz8dZQHhO+qP}n_Utpy_nu!XSJK`|({-)3 zX;(_zdV>DJ9e)`TfzQ94v1z}WO;=Hv^EruiW5T~NxHF24={^khc)Pk*^>DZGFvM0{ znbr6p>UFDaYhwBF&h~>twv&C2_>$9}-P_X(-x>~oHE0HG&UcezI2ill*!WOyK|7f1 z|7Yw$V^Fu3|I|RO^VX`>@jD?9;#F)r{c{qN0=I|B%JBaAy#*h(s(Al%k8s@`vy1F< zx<6mp7jK94;@QA#s~p~9wT>}@=b9T}x~!deM>NyHf&tFGg#YjqQ8rdBoBfpJE)1Of z`OV6sVQP!Dr~Kgdtn+1o*NeUA5s=8!S^{_OerByZ2%$1v(=Kd?(xW z@zmwYy2qzNVDO1t89&)4a zeOJ4hZ~W_U<0folm6Q9v2k-sfBgUngcZK2Ss&i=rR`zP)B9Hdn1DFHlDV zy&-IzQUj?-*Y@Tx4KtTb0xku%a>b%cw}&7Jgz4;+%DA@zOkX}2;r)z7ur-9+7UMPE zgv3`m)W9Mf*(6P3>DHA#OYNFqwqXfV7x2yMlOJesR{phXJu;!Rrm}5tkk)qms!`w# z2>qCT7qF0#Y4p6#`aIHAe77f{S5Ygr^?qU>vXbw=hK8>>bj5M2oqN;~P!bU*H2+ zRm0$3>2YOPS9`NpkVxx1_@qzi8{8mBU&%n9R*nqTse8rK8!VW!`^Z5Vfb6(at0nCq z@uMJd_q8?sQ<*Q=5QZ#_)30^+eN8xDpu`FKA1RNBi6gz-eaIm$B@0}U4FVtxFfFY5 zHNa=vCt3phyXkP3!&o$Uxr~xPbHpA!$u}nyGU@=$rilYEcYlnSP#gVKm7E$>H4{Md z8y&C~j6t$j9Q=zHwMk@}(^4(C^{k5d?-LNt;uGTF3yOsi7?V`cC8(~q!a?&wE);jX z6ZKJd_$mnIl{_bKS4JqW?+_)ebt1WFlv*;z^dD~Y`7Ne@cR@TD^d34jxE>&@L?n*% zJduo@cyd4opBTzsj;@H7Jv(fv4i=ZNrRfBul9H%%{uUQII~XK>IU9+{QW>$Tqq=zD z1w;|my}+Wng-ZhjZbV_~nKt4T3g<6il;ys^Zk@^Ipupq-IxZ0}fh#%+hx25dKWJVJ zUdI)SKACc?F@t03vfM1{f<-`^@A&%%F$S|=VCR`QqlNn{^rA7j=nQN{X5-}dBeJC# zcl17yE0iYvvB1x1Ey56`tQPCjW)#O9|BAfI!ZCs|0n;*VbmEIIg2^&|#;3I%u1ZFx z;%Fw5GC3AE2lUdJOVT*N+}SxD5d-1KRbD4Vv!DbX1{yU)NW+}m-U0s+dk35RHkSZz zx=KGhIkK3BgbhJ%&AAm0{|ooxr*VR!QR)!l_h#MAGj-^r(1l*Ro$~}M?5rpWEwJT6 z?^eq7O<=O5c0grs#XBmql`_4=RZaXQ{2oT2)P@Tcr<|rdHICE^moz2IfC6J!C~GB) zh0`7s>776DytBbFOu8uYHX!Y9PJk03Z!oNFWA7@vPbA4kDydu0 z_N>d@Luo^`&!HEl561;5?-obkM84OQte*yKzi#(j0=VX>WnYtTBPQUfU?$i>eVv)} zg(o~y{6pl|%vjLnV4WM>lYU*ka;|YEGCe{1@v%)825l^Ugd5&pTz=n zv4kl9TOc9UPfCZj8lB9IteV5>d4RbVh321cY~KR#{Vk&UKRo|u-%UjI(aEn6et9hy zFV-a1srD6y>nu;VNAQTGFki(PWLNS4J%d*vv$N6fn~K$MhE1hAWXv|-7=^Duvmay+ zJ2Bp-m-8#vraB5utouJN*teu_rA6F35Yr6gDp5wdz1@Iw`Zq%dc#eGCqKvbD;c~pa zKN(&LSB7|&ZO|SMRFGarJ>i1*!%VVf{c+nX19nW%{X;j@0wl%C#D9Ya9^J1#$L#y) zQ25Yt_lCX+fad00i1;Nuo28@1oE=ia5wG+;Uni_{z0szbVs;2duXA zGMl!;cfiB>SFka=-cX+s_0;P{-L4vAEad>OfV1<@!LQaSf>l^InKbctPo}7sGO2?d zIaHbq0hk{)r98cBitUnI%ct}$6?aC@X7>WV>oe93Jd1%P=|!y{MwfIKct>M|7~5j^Y4TPKe+~)qr$tMnka6(?K;MSgUzS&YPX&`W+*D?#aIkaR$NW z7(=s|W(TVs6%+=}yR=4-s8xiK$FFx-sv}ru-TUtk-naz{ST&rz5j$Wx4YQK!_g|(z zWf9A&)iO{_RS>X|ZUN{yw6zn$J|6wH=s&W^`mnagk)yh2N;E4utAvACUpg$)nUyV#qyF38+O#e0-SjP&$NE6k}{=GD}y~6lwHA~RRGZt_Tam-D)lX7azE)< zD@Z%`;m`N^fGUUpT{- z9lMORel|C{HUQKUx!=_t<+QSfJAC~p$C=vQBDFrJ4hZ>Q>cz@~JVqSbUGNN_$LkhC zYqh5M?1MZ3tbPavBT)QzKL-eW2qttfRUI$umj%?zLtToAMkH@mG1Av#2~@w#t8g#A zOEbG&0jpv$1c=F*WKOrT3aV?3=U(O+%mi7K+`N%5g0ww2)m+`|o$=g?Y1h(CFR{yZz z!h$U2@{yKBqs@nH*j~v#Kc`uDo>%e>|Gklp^V}$n4G+<%3 zS1u2JQ^cEi+jBZ9z?s%~CIc{NsCKtY`{V9)2I8eZ19*Hl7YCuRA-!?vOfS}yUA$Ns z8IoBi?{f5)=|`UCaRphpwHHfc(;s=4m%t1n?(kC=l3E^)QP2juE==PQ)m25M4#NOu6EJT1V0#E-Kak#Eiv|ytRsj72B3i>d6naOCE+B(;T~Bpvt;X9 zZ{QnqJpS5}{k#kztu%~v8<9M)!%K1`4y{-Ca?XVtIcK3knB{exlL3nsY9ZsflhmsBDsddkG!zI|oR=h8b70;gPPX zmc-B!sm=j27R&x+-*;!z5y$l?APBd=21!u`J2+4d#qRo{AaP#Bo$$ib<`eE(l%r%U zd9#hEbCc=8ab1yWxEfD3`qlv}=sn*ZDQ%qsMDsfyjS}jpq8(UHCWimRZPc2z>hZFJ zuRo@Y25jZCFGr3597?%iiOwJ_w&Op zmk;zpI?5$8h$CVYMyDLea;wjTt9@_HrJuz^3E7T6Sv}oLn?EeGGoWvoKi~fmza#Y> z2SRZ*6UQ@dq;vz>3i>!rNdx~j5Fy$qli!Q>Z?|2^ReTZ)6JiFuBgPxY4;N-^BH>$a z{T9Q;R+MGc($}v^sPMYXwcffnx|BB3!~jk}kEqI4ook$dk;=FCw=4F2U}7DU>rGRJB@TfVn+1YzNn^*iAX?*)->;I%-@_$O@+m3LQ( z6x~KOKlc0R2r{oKFQi?Fv;jB&F{i{flo77)N*#0 zja2OR{dw5pS9j*T9?KTR9*h9l*tPsLs1nPQA=s1vQ7nMNnKquY#eO11p%rDw=$Q!! zF@NHAj6g42L&op{$e!0267?WzMf8=1eg$@`%$_x}idE^^*cAYdl zB*J~$8(YvX?lmC+LwT>yypikAL;HE7q~zQSFexOFSVEf^y-`!SrG5!V&X(NnNT2{% z8LX~v^Fvg)t9MFsu($DUnK|ieyq>Q;PdIZNy@j>di8hK$C20cR3z1J5)n zMe|oS9Ha)XI8ui+Z9oL)4I(LNo5E_!VA+W#`U59+tc@K>nh{}4hgUM%^L-BiYy3?a z4Bbu}3Bo|IqEf8AgpXGoByFF-nOj5%Nz_PRd|pp-d3^;ADV*~f(VAHgg9Iq(J%&@a zxiIj-E_~=Q6-k`9#gPUD0ZT$z(9+^FmOZ}3q&&Sk5HNk+^717Ax4kXuHQpgg@&nn1{uZtKcW$rJm46P!P{2Ov2F?zmp- z1|(3*0rjGt|;xEheKDGd;dNkNlTOPD5~u<7kb5OLAEfEErINs~JY-t5L0 zmm*9Slc2oOeIy1tXrNYT2ZskeZiO!tAozZT1rYagU=fwDRfA^NoCh+4B@fOu3YSR= zB^cj_jL-VrfaM76&%R_H2l^|?ER3L|#T8chHA;m#8pG)l0_$){d4bbmD!DS*=mPAQ z3+j2uiD_$_8$E+#QZZpXfp*?xo;Q5H%F#?D;CV@vEkP5POSzL3^ujd}C4lKnp3`DH z5W?K?0xT(&o{f3ljkXCoI$(k%`}oRqV;yvnF}^s{ZMyp+RE2~KL9&pO)_uaeLkDW% z#r8~divx6b_1@pgjEfF5>?}nQ#&Qz-eeWi(<&H}BW zn*%JJwd}$mN~44Qutly^j2|S5gCwYxHeUER`&KR9q6h$sBG&WuOCKh2<6ViwT7c$4NovoWgv}@Swa9G>xMd92ZZ8hM!q^D}6!w z7(aU&JJ4^4j>2*r*h*H2v9#w}5D~jI#JtDnLazm7=<)CMMELW`W} zzrJ5^Phz|z)Eu77y6BT0Emj{0(_Nw+_^vg3u$?BxP$%A#>Y$pv1kKL|{>Q8le_3$g z)7_<5c?b`nOili;$~HuC$Av-_pOX(FLuH61CwK~1@~n1rC&eWbLP6x?nalb z-4;0Tfi5x^cHg?I{>Q^VL^LN8s6;0oZvDuqr+L)v#wb6fEpvk$`5dasjB5F`jUV%T z)*Q~Ze29wUHm?)^gGaDJl&tH=LEQ>4lhae8K@UDbQO>4#TpKs4x}7I%LM&o2{cKT` z5P-+=#%8r&5NE|b!%Q&O|pEsNI(D&i@#Bk#8e3&7}e@VdmJylVRIF1 zBjuU8`r10r(L#m8=ImZF`8k}XT_y5_`5I{G47#x;O1{ABtAtMy-kIjwaV5%blaPA zjen6N$uydu4#f=P)UFa|oLInug^@*~-y-)m@K7;re=pUOE96c3J$K9DMA3OJtC!lG z=di&*2%OF#7x7-|0DaGEoSxs*esHbsP;hSO(qg@WC(ASyB;;{GxnB0q@s5hv;R}l< zHyMibTFSYmAaP$~xs)pvb@AxeXXl{ElZ-}J@yyiax@tD(khscMJS<&da*$jI|@GoZG}_)2;tcPOeUXXi_ij|4=aUf^1zQNJ}+m}qcLK3_G(epk!pSNqE-uE#jVRXlTgKy*l^4xpPhjc1#mZv3FHK^wpmpb0F*X`f%~@F3RgN+jvO}f6>VvM=Aa?@> z5?`f~lUL(Ki`uG>3N_=&k{2uTdpwREZ|Uaa$+CM4{uMb}fzrk51~ezI4k$&3C`S-) z=Q<0^k6!K{z3_CmxDxtQ9$=%mSHctTCdft05_3J`Z zme7B|jLvA~BB>ad3+2T)Gu50g+?N>TRHu{a);zY)ZevFx+5L;IMss7wnd&hPrOgTT zLhS@oHl(|XNiK<-f^MeMTpQ|A{-h2Y)XCB$=VD~SnflQtjf%(Jey5rG@hEYU}+vb62wav8Kg~_JCMKJ-WlkAS) z988h!g_Qry$-#v$MeLR+GMzJEIbN^*fGH#JS(2mLQsuOagT4DPjpXruy8q(NT{vqn< zlS*$qb(<;VmeJa56n3J2!)8Xuho>mVj4;+D&>Y0vBpN~#IJrKxMMca#ld`?3a7x-8 zZZ;D&5E-UB`AZG+61+hsP8nuQImYY8UZ)`}v1X08%q}Qts!SkNAxm@qL@jY8v6jx0 z1X>iAP<(FmRmN_~IYerWkA5}?+cJ!|AMLU3T)CW6nFV}|w?-`B^kuVsa=cT_pBDZ6 z5>vbnyg)2zw2)|w`+ ze6?v7BagGSyc%DwS6^VwG#RpXHR>WC#f<%XarF;-}w`|lJ#MFFhF^=zs~rJC#6y7jws zc`Vv3S2K^x3d2zJ+u7x)Y#&XL-w&vrRH`1UvicS3^+%ztr0J^?Nt?t1dO_oMrn;ll z8cM@1xuMINt+N_2^}^imb2u_GFVS8o5y7HQI)c4BLesTN>t^E;db;Z5&Jy=@tU^0y zsjifu#_Kp+S81-4DlU|!usW*h*UHSZbk2}LL;F*la8vy*R(5tS#nW5 z?Un|)DS*zy1AL^7$>HnT&2@4XaJEnMn_RyXaoV83S#{Ob$&s3XxKO)|cqDy<9gW(Y zC4PjF_KTsUoVK%iTTKBlM@YjxXYg&C(6e!(5c5X`^<2>UbTDRKZXJ{=BbKyuLv@(+ zrYTDYQ?Rf`O|andrD3+Cuj;qLKnEZ4Nys?Q(GEgu)yg4N3al%$OHvJ1eu#cPDXdjX z?tL4-Q$D92d}ba}$LU+7>e?j6%jdj3^gb$8%XWOl8kw_te&0V;i8&h-y8hc8PW`tX zcJsPadEU8q=E$d@@%YmlN&im?A=~3Q=2ZKK9A1!W_n)h9rV{&f5=*F zPIHmPKVe=%fkA0Gg5-JS8NLJQ!rv0 zGP#yIiF=+{T`jj=(njGgLC0RA6%NjkxUo#wwkWZ4i*kyAsaQGk3r>z+>nTfYAwY{h z$_p%Kmv%wYj}}MHY;u}@6~Wr8(#=3~HEEVAdfDYaHb=o}Tk6R35SPwfqw*Q z5<7@Z0WtF`QPQ}0N03IJ05RJur_~QIf=ZM=OVhDNk)s=hvS*BR)~t0N-Gl(HsY>uS z8N>A##fi|VnN=)ftcyNW{#3jkSgI=Eyc)$OeTRIyqw?b_GL;h zX~CoKe!Uf?7*g)}xE&IdMh*N|_9low$4M&Vfc|=R(fc?`svCu6DT5z(@A=QE-~wU; z_2wJ-Az$Set!+b1IbfN=E+*8*J3Zyz(Q!ee;x4AUF)A0kxKWv~X|mFL*Ejg9{IM|5 z?s3&BZ$s@hiVo!LU=KY2NMp~z0;aPtU6|C(s>3fzb(dPC&lr)yDRM7(`Sn1?T0IjK zy$}cX?VaipG3wH~mT=L@vOJ~?(-C8wxN~1Ne6?1(lSJep&3u(>5Z4c>>$A}?Td^Rx z=EO4q@*3mbSOvN~%?+zVb3vXqxu0)*T@cBKqwt1p``X{|5? ziP|!!7@FA7&6EFFYWF{%CJrnb68fCVO8y%aYRWr%G|sscV?Iv7G<}ijT(D`P|2JN`Px$}X4x%?olvv}^mpQgN~aV3 zlf*iXgD4Fds7KaZrCYM5UUx}AuwzZiE%82ISLL=9rc5i)4M<|~I!{;3ee(jGqut)} zFk;n{gp2SyDblIwkRgv(K?4z`$y22|l3b2HYCD(B-KL4C&{M}NO(*to)O64KBvFLS zGyVt(K51Woc*kKVq>R8Ke!@Ikj6OSYsJ1C53B|rfZbi+<)#Hm-9_7?8kg3(wdJlk2 zKf7>WahNa0&+K7zGm@Sy)UCJXameh{6j?Hp9T!W1#4faPn6=`wu$$NvZl}hn-+cTV z%&_);&!SFYHq^Po-O2459mY~6267YFk-#R4eduh}p$i*CR&K?0txrS8bi3XQ=UTu2hGm?5{HxodknRv%M<^3#$ z)lccSMPb(eaoZpP5sE*kk& zau0!~MJ23@#Mu!h>%pPgxNFX`&5GT3cS`{c)Y+D#-PiJ@`wvgh@br?`tUmksrhs|# zn_f@!JY8SP)I#WZ7rB?FV>-{BV6ylHAkHbUEjm!f2rRXb^AbY=te8<4o1!EQu{Ah z;kBqPq5Jsx-bE{J1ja`LH2m;0&FF7|EDbzYr~P~vf& z{Y*d8hM=tneX3Y)`UUK{mbbT=`L%+27+XinTid~YCOA~mN>AJzQ96csaxChaG4c_V zuH#PLvsSta;y;3*Ey2FF>Dhbb7gjz7SjSA)tqkHA%hf}M1Rc*(Xr6{NJ?ppe@k=|@ z+HMpYv0|;b4lWzXD}@{9^9Qiwk-u77o^4SgQ)b%k1ocn=Qs8bz_?PP#(Tb=cnzZ*DvN#q{3HXM)bM-_K`5dDf0W{_UfHg;Lue`R#Fz z>O0BLUo4^0A?#msK3jx__r5uQ+p+6XR<-huE)am*^b+z8R4UT}p2A!J%SHNn0*%UG)wpzy9Lp z^Eyb|q15*HEop`?Rd|8^+g}1rb!hW5zi?XpyI=XbrI{SZza7lC4PjE8s^dnnin;)t z;?9EKS#C+fG+w3O{X1oRv#$_-g$)i|4vv=X>1_&QqL1`586vE$-7I!$OshY6OEM9a zZgjGXFi(V7VF!{h*`cZ$pcd^)yN>ge=+)nAJyB&?{!E0C869^j_?~yvZ@shwXdJ!c zIoV*zWn@~Z>bOm*Z{kKQO}ue&Hy!=muZ5ZwbClr8r8~U~IGyXG-haZ@b@#;GS6Q72 zWxu`p)3xp^plbGM#xcVE@(gpU9H!UR=-qTc4?jrrqo9>^AKP6U`6{);`g3f#b)ff} zE1Ti-uyL+)K`eaB)`H|6cD?J8V*Rlxra}bXvgFiJPA=$DwIREkVBj~xSSNRpGGj$; zptJbX6%F&0d!;w6KD6b5^Lw$g*LIFuPj1kbmrg-9hx@GiAnGQ38k#E}+MYY3$IpIm z^>iid5ex-**f44B%sW#=d#b z*Fpd{Twn3M_Z2BTdUZBu4|I3T!VT3P?dIc{&+fAdS!N}|^vUnH^X<i$+!SHz*hYuaFXIpywM&*t>%|lF^tm@xr!R4?C{m<*g*7{m z-ltlaG}pRu&3~)p*8qCICJ#(_mW1!T!FxY6;&Es;-sRxj8uyXFV)nWPMbMQZVU*jz zeV*&|nECL(E|3p^`U`fmFP$Rm#BP^_%ra-DzKRnQ!zUr2L~3`F$P0o4n8P~WQe z1C<~81c}HWE%a~P=E((~OCsNse2OFNre6Wrw^QfH{X(*L_gTVLU=@YheCJ>K2_OMY z=?ul-0q&9l-&yKR5B|EM0VmwfAn2R(+rgLkd&N`@pnhSY#F~opHa*U{e*n!2*6vjK z+Sx|RtiHJX@S(pUqVQHmLT{U~m5qKG1O{jAE4HI^AXR66XX3vgrM;9V{hHwE>%^QZ z%)2W``GlQ*)9%=C6Qrv)Z1VEyvMRa5?*v@#fDZn^{Dugkc)Z>Zi9NyA+k7koChi%EnyoRF5xw;&_yox3ImFYuiRE<%U~+*m zwrPXt_^o+%Scv)+XO0F={!(G(;=M{n#{xCdYv2x2&%wilkLCq#4-)9%HV%srE7&?Y z8X>Fh0V`Z8M#c4Qyz+T6^4;GSn)zLj+Gzy(m399ovV0QiRB(O#h;o(>m}{ZCSlg| zjBryNkzZT-r1lJIQ!DBiA5SjkJHmIXOMNM9uzucC8qv?rbG~bBHfD~J`~nQMx&PE2 z?_&zjIre+@DO>zXqa|J1!$7as%-i4-F0VaP_*|sIz0Y)i*RU`F8|JEK>vD}pNHu6| zpmW>H*tjQLp$b4|45^YOp?=FaN0$RcF6z7H?{tqDbnqL|@`Pe9IV{G&BXmy^1u0&{k-%a2L>5tDnci5{tn0so+gtvyqwT|jd|~I2 z5LLpjL7f4YlPtYHi<4Bqb zpiAxjYBurO|2}#Fene->qW5#RZFt1uwXzu>)pHwnTdF~!-U$2nFLL$Q0fwwJEj6-C z6|op9+E7GT6CWfyU`4@UFC1seBsW#eG?Vw_*R%y5smq(K%2hN5j`cXePpV?7_gnG~85%d4$2rCmCOC^>V*+z^ zzw;H}&7y|lSf_rmFll%V;l_NK;H!pd{)@g^cXTVAknPX~l41xw=^bpzY^@U6LgZ%s z$zN?-lYcP;95PaUl9pdru7}h1hcOe`3`_hyhP4utpCfy5Okp><%QN@6v1bH5`#q*M zv{Xw~teE6qRP>+;KZcH(*#pk+eeF62U~X`EoEF*H?PG6y->4vyB3UjG`U*P6rxQ)c z=$MI)R$l+f2uibW`un)p+n5tsCmAOmGIG!Jy?fi8;7~3XL7UfC;mF zEn@{tt+Ttt@@{8-h;y14p)=#>RvTGWvT!K=&b-h?b8F09@X&j?BOPMLlwRYmhL>j7 zQ(NFPtMXhU$sPK#IZVE*dGW~f4;vj?M3!Avxn*RJbj8loJ*W|s0-ln3iRgvs-IROz z);k?5O#<@h_4OHw<;rsrdB0Tzy(b~&D!7QX_=O!_$4udPI$|X|3f|MZKLX4fDm$>rP)a*6y5{~c&qNVO2%&bJQ}2h!?QQLGeON!eiuk2@Q~ zs&qH0-zl*86P0}QkO6ph#pz)U^>IiTB3cSK{xQxO(@p*fpSTG+4G&s<8bIkU!1j5# z?|pyYo$EJ+ltV6C?G6-$Oy#(_>z+Via@?M~=6xB~ReeMykDs5}eR_f;qm>7MhbR|y zt_qqy@OuP)KpHXL+1;(i`XahvbblIk#j|Ih&uf?9p0uf%$a~vo{@27AeG_OA=9~r@ z?s4SA(?u%+6I??rDqJ|w44SzjhX>)`{5vVuL^ZX^Xuk=gi*N`JyAxFsG93k;ClrNn z`fqO>Pegbv^aBuz^Hsf7pN*`$9a8Y}8`7n7d)sDRV5EDtkyI=-nrmdZ664O|keSb{_;P77YY`Lr(_RvqdhBLN`Tu! zWb{5;cjeo2pqc@aXdWO8YCkwZQlP76thj;a4E*H8g6goFTGX!vvNR;cl7#vn(f7(} zP*7c4f6BToEqO>vE$a13h^F_0IrAi<2YWz!RwBJZ7v*RS&~9zBrax5uo$o@pMI;(zC{%PYOtR>n>w8ywD z-+w`G>LQT`CC4H8x)J}L@7*Oz3rmrt)$aQp@I?bd0Ay&JZnJbri%{|$1AARNBo9Zj zXMH|NgjI;Wf0*6rONZlm87k*eCVW@?>@*Z=R0(SPtqH8xl$ol%5!bG7y9RsoAx_eN z%3=5rKnX7Z_P{{gEUK4z;?@uQeCGBkxCVU6?i@>R1#{~M5PS#D-AG&MU$*NVJ6ir~D&PKnzN&aCwPx5Y?gWmB{17T;_Xj`p;k z?!5TeKuw3?7vGkbSgi*$vL!tK0c@f_Pn^^q$j)_V7e&P7P7E2V{F-kmU2u0E2tI-K z-S8M_`?Dv9L3MBz1ox9ih5ed01>rpqSli2Cq3u#{l99eiyLm2*1PKZ*WlGTBmNCHu zg#aB2GlHf0WDEfAUw(84j?i=)*Eh-`oaNx-Hzl?06v!##CkYm-InfzbnNPn7E4`p(4 zq%{-&-8B9$&zuZnBLDJKl4QKT3)4mvIoU~E=AK$wDz2^z2~A+6Ty8uF_B@#~*C#G5 zO+<>QSKRlAXLunoO_?FiO(LsJn!}+d8Sfl(W}ungF5i@Q7;FB)w4rX7q~LLd+gAmJ z%Q>S)%neff!FMEmuRE-h!_y~qj`#Gd=DQme zpP`9@^#T~#;s5zou}T1>fnP@uuqQmx6739)So2k@^bvpEXB zeM&5U9+uZ+g_g~u6?TG7pnTf(|Hwk5lELxs{l!?$9!a8h&Jo~erkH_n6bv}7{z{-J=Rlz3lSaV9 zzCCNecyTxn#_cmZ?twElgcwzA+$pn1nPa#gG6Z~FndL>{Nya(Mf_MNIVDh#iYD*g1 zpnS4;l7%l~`y~_~qgEb=9^v+iVxJe=UPvyB?I!;l*ugeU(Jwu8C_#m%bo&!zZL@&k(12nWpyrn53TZMY_j%7x8%zv+Ytm0ACMIW@h&Z_;N=hv=3QtfOOWGL3R!xjd86q zbRWH<0f-;UcJ2E%fX6a|F99a=lk1aQ&ter{g}*C(1)`^XBbXyMWx+3Mvv9`p>jgFD z4cK;{@pbk{ui`$KI(1x@4Ptgs{o}^d;_o+%IW!yds zg~EI|>I#Xgp=f>xGhNo0J<4x;U!|h6f&wtkMLAaV)R`O@pGlZhtJ-Jt>ORZryw6c> zd1Hu7ES{jhqpoqiC~VaD0}$;{7dz~6Z<{aXo)4iRByTD<7{)=+CjVZp~)vJux?6d_8V#OxK<> z>HC*93=uHm@hER_2>77jAayoR;1!=p_OyX*k&*8sv%Ma1XW6xnyKuyFntLTKx}Tin zP$Y+O814R%4iYh*L?o054+CJ&$*1jGAlySg1MqA@uyzo9l`<=RC2Uc56tCJ1@xooyHTKKOd^AEvVdU5^Z-z9+1@7RIF_oTdczSn@@* z0`!ig1_UsV8t|)F&+nLNM&~Sr(AOSxCxbx~aJub~U+WWy&_WFP(;~2=Iea}IOn5Vd z$hsM%<|!GEGA9Y^A2NekMGD3cUD(zq!q9@Lor(lFd z6|n)Rwl>}}`42&mI}P%M^tefIxN3$%bOe;WMfLxe7Q z3nMO_!BaFEjQO2zlTG9f&y3?nIxuAjRgk}|ILCDvK0K^qDYDam+#NuKe|N1nJrKiJ zmvea1lg1E+?6yr|w*K?9J%7uPNEPTHm##nUQgYKuR8*J!uEe-?-JKBGkZ69?KODfI zfXqG3)n^Wc-YPQK13^lQJM;u7X5D z_q|!05=eEJxIa1FU1EJ%)^T=yMk=}9f0LM!{MojcXRgemB3Pf2gSkDtiQAZ69&LPj zlfnVxX5^#Dr6=DHWY}dCtH(i}5=HYmX z2k?!+v1h%k4Yy3suqk(7zLCSd^B4m zUKaPS6QN<_IZyLulVVTCD7PLxAsZAXR!KnKp?+Y-Vb}Fk)Am@``B~KW^k(R09cvG& zw`)7^;r{{HTu02Tp^82}2bjphK|_B!JuomQS+xE?_TD>?%I|*wN3tR%6%8&W6uHB7 zk-a4m5~=JxvqwfLG&Hoxh*VNZWs|KkBcigEl!&r3f9E{Uy;14??)~}we*b-++kMV? z&Ux+E>&)lqhO%+HPJSh9Ygfr!(x05|sj=CudG1kLF>yAUP)JM{kzjNh6NgJ z@>|>#org|*W7s;b{m^CV*_2}#V=?}ia0hFgdtFMsVAigPk-egBE)?&YtVmBcky$3Jn=Womy{H=gv# z-&3Z!mefZ*b5$@Tpih6>7o8?{0&Z}mc!$>(`cItg^fkqs_?tt&l+KQ=6q-ny;_u&S z=Q{jceuR3h%&SiB*0s#Er3nJ7Z_ym3;-c9&cB1s9%X!Qa+LNJ-5oRG>%jha>f-ofs zavZEGyq#+!*yh-Y9`q}CH{cm(`(~FGN*~jb?aY$Zq;=vC&k-eo z4QE11sHJvAnCfCaEmJ*4&AX0ShZ?{0nm$u_`9qOop-YrDvn>zeiny&^ww8xRPjsi! zF{R@eP1+Beid#0zA5}?ED`IE({*__%*<*7qTa{?f8c}Jg>BwwVTWQkWd7Wydq?6K$ z=jFxDs`+$9MYTMYYnLD8c8TC!auj3Bt5|^LVthxt`b;O)ZNUvgCrV6Dl`Vo;ELzq4)f5`9=f;{?uO=xUSS#l*LQBhhKap7oRV zJ0#5Hi!2K_?C2EQF}>sc+&$|J*|c&QDVL8cVU(z8&dW=&mmR%CRj5=%t4+0Lg`)+# zP=Jcs@h}?()?jPe)haZ#szC{=>bxAMj+eV&?qD{Ti1)AmWG~9L`~-Cr%}Q1An8w!fvP{SIUjBSz|qD^GyAatER-z9LCehItxGPTYyR`)FmI!6VlCmFMkecj`Y z3A<>@OG|g7j>dKA`M{OOik4hZ+q{!D`MrwCT|sQXsU(rf-a8FKy2p>Ob26>$a-rSj z#&CzaUX}KwHak_)v7jXONE#2qitu9{RMy&+yQq6Mb8Ja`iRDbV!K8hbVGYy74GZ>& zEgV!1a$H&3>q_`^;)RXpKFyie`CKfu{Y-PnPe1sDLYOOykILrK3k()HCJX|C@rKk@ zNBNjJjxv|VY>6=8#8nTikH>V&mY3W}Rl?pc3ZrJbKdQ#SPqSw$&8q}K4!SBriO41z zJg<$?g`l0{pQv_Itzo6Xv0;vFHi^P=GAU{5y`mqn;dnwDM4iIuE)%)FVCmBR+68wQ z_LQ;H>h4xP{9x$~Db8>56=gg(cFEV%7lf_2AkTfEq?1@gE6+BvR*gyAX~Xt<4Ciq+ zhKIJ1v1S|6!;bA;#V|dW5^dyc^nCS+j%6dVF>9CD2GtX+2aZ&&W;78^Ziye=v~ndL zY%~irf1jFZl3A<6yL!JRC+2L0zm-)-(|*756+zFoO0=kOifa}xeHL5JliMo7pxZId zX(}h5+^Q&H(7jx(^6b#C1Y?2DTJPX?FX^SPtQ+(1)+m1!Jr=|+a8bp5*;GqdsJe;` zLq|hll>YLAv`39bUmP7w7pr2hdB;%kG;6^1Y{BIt0a&PTx!173}UTeIM2pa*iNNYxBTmT}g})ql~VApom%WFuv35=4gFP*O3tS>-#$| zFx_fW^4}9tH;}yY%<016ZLwUp#zhs>OpHtW+?#l`ww0A`9TnXkr{Y97rf`z~k@O>R zjcKj$-T0K*t$cY215vck>^Oy816AmxGKvxhZ@nv&-gjlm$kcv?8m>=sCer@$zA>wW zYVD&}af*f|wex5k7&v-uPBU0j=K<^eQu*EC+pCIe>&33})nn4EL}!jX@?@B%k~W@o zWtkQ_<(pXRKwYpJclG(nutP5e4}_VKOjbFYxN3bnIY?EuF0yQ$$NON~YpmxEUF$rX zVaV?FOtrasJ^!vgNv90O^AE(d zRbqJ_Z!x@+>uXA+6?4%w5LYoV(NER4=w^8RkooZEuw`|JS_QcMh=MDEyT20U>O(q} zyzC@*sI%CborrO`{seQu>G4VYjmaMTGNxrT!sk574RlI)<)3b%&-Gm=Zm7MYAmKEX z%98yw^zyqKSR8pbQFEV)DCQE5uUqq!QSav0eC4xLM zd|p3%M|iWKYMXG*wG|sfU)a^lPT;;v`ChU*-LJ`$u|!qbki8-%!Qip_p);GQL*D1w za5XB$zuNkV?M2Hg&da%SLFzocPrLFI| zmmTkJ$~_ZzHkK=4U#QBI3cm%>FWiak*aA`!)o< zi1a1df4|bg%$8$+XzlS;FLvyBhk5Q9Sa>)jfGf#BIAKx`zOQ&nL z`sIdmMr(QM-bv+;>+g8MJ)E{8Xk0wHp<4KXe(XE<%ghxLV+naN9bT``(s!)OoYY~J ztKAZ}Djcgz7qWSePl)nXnoZYgwD^ zA&cq$bEg`&xwKD#Q;qdy0$0wa1ux|d>bK}3##}r8reE^VmhR#8$%fLsH&&!QIDs?M zU+VmF)mAYhl@h~oUJb zyg6@wJj1n*Q!M(nL)#L&GoGQ}zD*A)9As%J-Nk2})Gsl6neX{&&8&-=qx$&?oKb6( zt2wf3l68fA&E#be7*Qe99b~@fS5?%fb(YnD)44vVDKAkjJ*% zG5&lEt?4JF=5zATx;GmhkAB>HKi*G@Eyls=Uali$TOCR#4;Aw_jtD(Q^B6BYai$i6g^7n|8B&I^K+F zH*f2R1Sy6udv$_Gawh5v+d0#;ZwuIYNFT;-Y4|&E~HG% z@wCm@%0zW5cF~g|?J>c|XSzoE)#L-rvacm+=-yRfrr$%Onn0B{lg8}zVdlffw%wBh z_c~PUypMFfZ8pmdDrY}duyYD~Ah-ahYdv?^Y_xT1Y+&r|AfrgZ;m4hQS$&NM$Di7z z9Vj?Bmuu|kJlItAp-_x8HEu3Y!f~5_i>woAs^;^+Aoo5}UZbb%y1;Mm#~MC6xeZ?( z7!_#=pQV2p*zXnn9F_gVbWKk~^FxQ6 zX`c)ufA7c_v!A+#xi&~omD>5aWwp;Zj+)L?PhLNHF{$uC=XDL)L*7HHU-GSx@#(C2 z{oWa0(9-_qL13en)}fgvxd-RmvYK0a`PXH!-qY%H%4lmJ+&4AqeB@QzKojfKR9mi} zci>!J`%A^)C8>w}#~a22XBz^k1-~7|vM^aXS-82oTADhtfSj|L9g7$Si-D;T5oB}@ zQi^dBw~5k&y+ZtLs>epJL#KuHph#pAK!I0BAHB;xSfuy}qfmR}Hsa&{Gv2V^ZV z>JAPbfRU-YvnxhX5rfBX$6*c#?6U<-z1$863W{ht!(SHp2YTAB&K4f#mK1{8N-7u! zTQgTvS04+Nc3#lnQe;DLhJ9~VZ9NF)$3u!el$fU@wyIQ=NYiHiPO zMi3PPKa%nb9K=G)e$XRgiNIz*!HJ6F@W1gO5TP-Dg2NI>62IbN#j%9n_yPrflaGiO z#r;YTIN~>YL>%!qS%?Jj-((TT;eMkhj+gkYOalC<`!9U)cp~;!dcX#v3(7zY*g9Cc zvM_-_(zW%q1Wppsadvjc0Qwjm5p^dkXABZ-Ag^R3MNr0)2ugVH8%0E{g0iTBgcuI5 zpn{bUl~9q80Kd*HBc&h?;tsEfC5eJxa3hHlB~(O3NmwyOQDsqr0tqi6a}WdulbgG# zt2-JO;OD&Y@F#lsl(ke?n5f{jmC6HrY^f}$B&p1(#Hg&Oh~P`05~spb2~$Z>;iyQU zT$oA})L}slEE5MXq9A7q?gRjb10OMvl0ZF<$`Yab%dN1+!B#~H6w+_TnOTULnTryH zE%9bpVKFO^GczaQh0U?%qM~Bv1d_NZ4ghYX(gKX_06BLm3=q$U$_X%Z1fm`W0$YMI zPjEK}wa!$opwyDefoeN|u%)7c4Mbi?kBG`p@Rf=WlnCRt6IuA)y{~OxVS)ySEgd*Q z)6(740{lb}1`o<~M6?t^V{@@|b+@&21GP%vtF@clA&6+XT3EVbU^k&7qNAYd>g?g- zW&~^uuvFd1K;TK+)Y{SwLqNdvd|WI=6ajq)XY2V^3VD(FlYe=LfEOi+=z5sBLwEzt zT_Ok~MY#E&B$AT#b}==#w{*vtSz6mVN%Ico74l+iEu?w(5jC-zE{c{mwrakvmb$*X z^~`DDV!T>_p&Bw{z)LYoeZ4*j_ zLPyEc&D_=21@^lbNY~WN*~49$mlrbnagp_MbkWrO!OF>PJEG-wb7w~pZ&Mc$+;*&p zqoc?lF#j2EF(j7-di}%+j0P7Lgx43sUu?IsX5ZnOEfhFAjk2|1tSb#{EBY{hzu1lLh`0@c%{E z|C#GQS>Qhb|6g?de`YSG`Lzj{s!H>EftAN1yDV^BL|*$SI(s;Q)vt(#t%aKr39gq8 zqU#=H1vS51f>mS`c~^G@XKy3ycCZHlzBufU`#}*!XD4?!gT}xgcGVHtW$NaROvG$0 zE&jY$qiJbjYx+l$+NQ36B6%&RZEFdpxnPwJ7KIBpb-)rIqXX7`I+kwE93ri95suG8jz|OB7)lMGQ*Est@jJb7+JvXS4O?gkfSS;qA zJhq&d9vk5xxx{@Phl$hmtvfS~z3>cNagO`hWS{c(CK<<-HY9yy519BS;gD*?BvCW> zqN=0Nx$uNYOT%!g;09-&PV z(bv*h;`^T;G&>rX&oII{K)fAL^*rHs9M4~;)w6%QR zx!Ucoe|*?s@WWNzOt$FDCXI@AYf>^A1|qiSX#~72lPcmXox1hmZ12Rr{VZx_t%X-# zEqyd*;8!{5W>-Y}aNMAhA@7V$lou`Qtt94FkFxqN?R%bIuD|^yLi$$U_XEe;Xg4Pi z!aaKr@n*8pO6}&HE#ce9jh~!*FVy~JV7zZOTH}&+4!7FKC1mev~o>& zHn!=_T{kUr-ftD^hx=7hvR4J}Y!+3ke!6DQbAg22T!~icmx7orhGeZWsJ36Ou%%*~ zcz~lh&pp;p9TdvJRWYO;>!;$|X|aEGqSIk-mhIoSCk(R;)km?OOtDZpaAWJX-XoG? z#<|^TFFxkn`>d7!@wDZ{kj=B=vZu#r6M0oHStK1ewW_W7%T=(tH$LxGnMX+CD zqb(Um1s4uETRG&>x4$S7QL>8IlX#*gr$q1}rnmc>;y?oJ<<~?pLDs!7=4{7>F3g-< zDD!%9X=C^%T*wE@V8f<;3 zy~%pjiSC0HW~mL|&Spz+-e$9)mwY^)aUe=6yfti?L0jI~^S;e~ffWpw4qTf$a8qH| zMvJ(!SB`rUKd#t%F(rs+j~Tc8Cq>TX!HR2e;pgejaopfpRm7a!_E9CCkz?*&_O|<5 zIzyPF6XXV%gZWP$KDL2_cC~LvD4mY~sO!+?cahbW=Lue&JNklWo+Ko(HQxw3S@YuS zY7F(k*qSHU2V4b?k=T-T&sN~skK#ugFY{4Ndz9jO*f_R5+*Tee;urY*_5sOb!e_-r z6Yj?wNIh}p-eI^&C%o9|MAEqSu@gPt8K~siTj0Xsr+U#E_A@faMsTesWP(NbWSsSntd!wI6jB-n}*+3N;&;4nC3 z2X4N{L~tM(BN2UDOD_?ythKdvn&0MMI55F&erH#5UytlXEV`W!_wogQY}`{2RBO*1x=CNa0%`pq9~7nds1536+E-W;YqBmM~#xR#M@8Qnm~4;Gyq~c&71i ze=Fnk>9|Am=WX+OcU2Z)zs{W$e%;GLCC4dFFK{WtHD<@*2X{%Ic8zhy_}sd@C1lU4 zzHhXLGesZS#pQoI(j(Da#uTo9G)>StRv{7l%{FG=YtGB!o07%78j~-NiW@%#fBk)D z&->|C_IrCO?WpB?x8%tSiadYIYMm>?uW@XchN|4XamRtlfgUg}*Pd2@f_Mceh%k%hxC;kMO z!Nd#yiQ7JcBo24ef`ZY}Q5m~it7s?GjseSI=8a-rkxDp@rs4^((^On>H zcf~$G+8?{?LD_NHjqi*%P7M2aTMJfQ^1Zd@TzP5Iu9Ur9Uz)bQqVvdDqia8>yDHG~ zjh3kF>+EdvRO-|>^bfZWQ4M7+qxw)!rIXImakPCz_;Lh2{wuMgt9`n)mT_`iw@aoW zQ9tF{>5CR0Ok5KSoC0b`3~6ZMX|{AyZ!=+yIl5y7P2dWe5_!=u`U=d(?jV|n?B((j zbyU)K=!N4qx*z3w$mKv&YO;f4NnUY)%Zf9>=ZYD>s=9C;VSI4Z$b@ZIaHt8L)Y4Q8 z1Ft-D*fK-;<>$9`Fa54)Cct(oR3|~`4%OD9dgs^R6@=@U?$Cb@4N2Ho=k#g3ZqFxL z_vN{?{!2CGS>p%euVQH$Ot~EB^NI@|a-2P?+quD;@%}OU&Mn!i4$-p~Cw`Tgz#gHI zVKols?+X1YM6+UDiRy-xJiIEK)g*PoF7f!@T-~cecVUl(tShs`=>zgxE~u6-yABsOJDs(IrQbhPo^WHzDr{jtm|IW(iLCnRA$(u#(0`xtAcdGX{_2C zb@0FKg}8)cHNAIkX8W#0jXNHxB!tml5q&bhETwEo+50k$vb-`wwv!ghL%ho8>(%iQ zM_(y7D>SQ4o^g*7)%4wc`@+WZ*=|}_9z%@*3~R*rd09T=EghQ*Z#)!ua0$CpQd!>i z=E$CB0?!533N~EYrzf^oE z-f-JSG2cSe zjm(G&kK8Dh=P(wjZkmfXkJO0Ltd{TL=~3?4wC2QzXAuuA?&~)(^a=FQ*=W zQ9G^kvlw$On>g!s6B)DFlixRUcjbM%HN7=}dk!-vId|(stn!%?^=9Eu15Q`1sTFb* zN)*0)rR@s6P^w`;dddBFDO*#-48o1t9;u{Arw~&5QnC!MKMJrYO=HZu(Bj^*Aw9=- zS&MJ8)myQa029Ar&!!jc+h6Xs&U!j31w+p2Xt=%wt zD#{#Zuv+YR>@%wkjvFt66EizD@NY1dV2p8%m5f;~-gfx5)I$ zWiBJ>f|29W!BSPys!}4p#fORy*`=l&y848%J)wR7;GV(t3b|Mn1OC=+F+*KbHz(aE z&P+*-d3+NdY3uZB8qY93Z+y8UvO{>K>LsDiD>kn3|2WtyGS2<2a9t6D8iUO;akj6H z@%!TOE=HZ#gR|vrB1xL z>(-hUn}$3LHVtH58?rBCkg>2(?x9?ci9>N4LlT2w+1aoPHKE6whi1wvKnxnbvUx>% z`QqiNPq8n@&7{n>nvFe`Iy-v0@p%CI)GoFyhFc`KLd*D`c|6xFb9?9ZKJdZSGc1y)6sqIv6KJTt*$A4MFOT#)sG2$xU_1y_c7D>!WM=pMjx~nC9g)WIN z$#GX+ew{~xXP396+SS|6y9zJzl;5eCP~3teY;xN?EMj=${+0V_Z(IA{^-I6iax-(A zbancW`*EF{Ru69Y)R5;#>8f*8gSFQWbm!T;y)nGBY3b)@}b%%n54vKA!1|e9mPjb`Ma#9ud z)*GvroT9H}uq+%pWT<2q_||{#al6FN@;-XsO}=l+P?Ekso5`DO=JzzMa-@=VTj2f5 zRLOWA`<U9!4s&kQ`f z{46=QJoiHG$5Efr&~6J<>SV z_{nbc^GPDLedc}e-@kmCz41KN`r*gWLq3CR?Un6An`W~gIJ7AlyL4oZmW?)#z9uO- zzGK1>53X;#e){@kylwoO1l5Gh8(VH%Nu*2kOzgR-fAje* z@mtBa*WEsSdnU;#sq>D`ow8(7a`N2`chB9Ux#w}O_x^$Vbty_I*$;#tB&4oMJ^hgC zp~u6|k4zplJ=SvmDfP0TUbeotL8;-{EA>}Z zjk_CPHtlVC^ZLN+&NmisKD~8#`>oltd8#F-b!qFVwiRtx+BdY{=n(8k?G)?G?^5cj zey97c<-Pg)zHYbf=?}+ySbDB}^`a`~~{1P)DFpxed zH(34E;OmEPuHWW{&J1%7Cyj`Xl#FVRwvRcEO^u(L;GDSgUHtp=$$gU_r@W@=rz2+s zXL4sXW?SbR=jOmPef;?F)FRV#xDP^}SN`4Ji?*w+C)l$9hgjeQb-^Td!GvF49lity zugk!U7k%?CuMXaJkx^ke4ueDXjzoT~z+-UeP7vG}GPQNGbk(Ki1GG9sL3=vwZ;_NDk z5zun5^|S?xAVr4*BqGk$Sr8*22yyjn-5o4JJ@SAMA)j56#E6UF2qN&+Duw{wsbaJ> z5s6HlJi*Ila5hB}SeqbDfQ1Us7`9HaD2u#0!5E>6EcyUt$N?!Q8LK-24!V}^?m&9L6iSSMgN-&v zQ&)Rf^piTUQqR)S1#YAv+Tz8q+ld(P|3nZm^I0+#Js=_iB#Z}#i-f^ZDGWFpfdNNY z$N=-ITLR~JNn+qa4yhv=gQX%o0R*fpDhiHMA$M|>jt4j+wAabj9f*gLl0X#%dzqFF z0Arp6*zrU3Le-eRlOgm>U9BzM;jW~E2Rt|coQ`-68W0j(b*9>P{G2qNMD6?89z5y z95@@bu)+Sn3VeBWlCho*h*T$V<_idm7e~J0P&Ng4atHQYpqzk}AYjxiy)g@F zf+C?pqavdcp*+!AhzgP6odCNUm_RV77ra9-0s(?S-jq716wE^ys1&>-x>L-7B164k z34DS|!8;@cMW>L4O2Is$JIp{Zs2Ai4!B7#Qb}$b~p{l8X3(5oy3gLk8FoW6~wJ2&Z z6cyG$Rp1>JAC(T}j|h*VqLuKDUJwlG2=9;->PS>`w2tgJSOvkLjucO$ra_URj<6g) zK?Tt`fOoR+un0avFsLKEqs~Ob1vM@z0pv-E1w?o#5CnrdQiOv!n1`HE<3S5S@~{Rn zgLlO8FoOyRIYQbfD!fAw$^~Jdf|MAA3IfYhG)JqUj<5uRp|K8iMD2ni!#jk53IcRW zl%rt*T?I=}9+234I75C=AxhjK!ox=hhK2^z5gHGcK^@^8l@G$8rllAU5grPHY7fES z7ZnYrXiG!MLl{au%s~Ya;n9W)bwvG&Y7Xxx5Y!S4WvCj(B9JsdhiFhgs299L0MuA0 zIamrK1HwS1C{aRo9DGE%LNKToyhAXk6uhGrM`eOA^X5dj&zpoIE(C=ag)_{fu2NLQ zfmsKCBH{o5%|n?eWPVKn`p-p>DioNg0Ag!V-hikAMHU1d(qHULl#o{jgv6m_ z0Eq-Fp$u|>0aOcq0Xh)~jXW+$2?_vQ3DFQ(gh+y>r7!@h0aAdZI5O*oB7%?nuPFdp zRCox7*b5j3nhpqong==!i#UxU4I~Ps`z1NK8Y)US5ZzFM-)#crq?7~nc~L0hB7VmK zbf7gFjUb$$tA4WrqWcfSkPQNnfJ}e~kO+_=A~HewaIkv>lA(+i=#I(&`HCVsqas2Z z;DAaf=S6j=Q~`dV)d6%sLs1@lB;-MyQ4|7X04hxKfC~6dH*DLPb$U5fAzO`jrQN(|{_q zz;VBW0V(8x6u=gs4KJ`a#qMZ}gS?=*pk_cPfFK4^9P-5xL`k5CqzE-7DaZqtk-&fg z>!7UwcZdSM@B>>lXx*TvS4*3e*a5~qLWb-6c8d5(*S3}UKOYU+(*%P zK83w6K*xjNMB)q85vNGD_TQuw?*E2@2XaA|K^8C;$xRrb{~i{UCJb#1?2R;IJZuAK zTp+%|%PZm(6cFyH&d@Q6;z)<|*D(OlDaL@V!Nb^>r-%ujm4VPuaQH!Z|LkUfJ|6@> zSN-aF5ao~oXcI^{Au0fLAoBn0d8qrp1P!zd`3wID3WhW}CV%Q_5#7PaiMR&p`4k^UQrJxcj6Eg$XW@NnpWdv2)6hynk_g}=KP zqNA4o&!|5&8Q7QN2#a+KaLmDjZVGKuWM*VHLhiqM6z!0ap#TB?wSK`fMfe3p|A>M_ z2C({n>n>nhgYqM>0S6J-kU?P2TOLL^+K>DQ8tC1B3L4b!WDrWQP*NB)IM|J%T`1%U z+8)_}c>ENC9wkup?x)HUQHN)>2l zfFs3Vi^m_r{nsjr5h*DWf2b5N_Mi-ZiaNmihXK(51yT?I0+0mG>VE3RdXJwVO=7@&yI&?5_?6LSAiga*h$BcdMvb9V{QAqXWr=Towk0Vg0GoL@tp zznK$qN5%Q63dn(Un5fB+rN|;3B~cmW{-X+p(0q4^EIZNh9a`k~*o1piWT(Jr`pZzA zCxxQ_6o`v)S-|3_7J{J9+ZqP1JQkRZyv$peB0&omE~u@LIHd?r3Dt$^qPG6o&=4K9 z`R`G`kkrCXb3yrH+{s~!7zoM#IdlQ~d{hIsffYOKXW?c8kP3JLFxbQu}tQJMk8vrMFScY9*Xrp1@5BU7qdHH z0Hi?rqy+&D(2>yt>`)=*`uo^JVigtsr>=tR325U5;fYw|w`WxNzX3%(j=Jwhp3EIC zwdKXPmVhpV zt8R!6+8YXvP((umbsi;T5Qra(^aXB(=>N0ZC_83<86-f(Usx@|{SV%U#v*HsjEYc& zf0!2jjVH+4eSZZCxq&ajm6D>4`>BXr^_!1DIV}6h3jqBeeY{X(#M`29lb7O9WbXnM z2p0Va2WX~Wt-RPXMfhJFvKS~J|2K~N8&ryO0e4E4k}mKsQ08}QBT|sPfC~ScLl%O7 z{2%Kny8i>nKae6@elZ{a^vxv`vnf7|5EhF=SAEL z(cvJ3yhcL$Qs5FeU4U-;MOVr*oDaY~JaR`(p0A27KAOWQ0Nd<%bOV^;f3mS5_kXeb zKh;xA_dk+Y!2J)JLX8n?AY1Ej_Ko&Vh`~|re{1{S;3&fXZw>aBetr?p0w*C|C=#1+ z--Nuv5k9_Zbib|V3kaiH!EIKB1WIw>i__xsM|JA9N$z z0;q+&zD5KmONJO6<^Er7{{wzr_#Z_Jse}BlB|GH5Bg1 zI09CysILJLfCTw2<~oWi0Te_BEf*{b(f3Uh@PBm~sv<=HOVGvO$igokl1Qjh^q+sh z3ne5Q6r%rX+yC%P=KhZ)=Kbr#J-Z=U}HL3O5x|n;@gD0yu96-wpk$1X=in#fVd&eSsp#5h--Y zM$8N9;QkhRoCX*ga{ptyB3l4T1Dh1(r6$=+kmWDj0jWRsdJ83_Mmf+8py#a%E(&bYxt zp@0E}DDBae^* zb2mz~lSwY*jH)C7yEqbzI)DZ=q0&=ly^*jzO@@oPQAc%K>OA?dOEDcE=-Gw zE7k;C(Ro~*Zr2Evb?rdtREx3t#ZdL*{-1NQJhPgXow;pfmm!&Kl>79vrnB7>&fQNg zv69-R5Bo(Y@CVO?oQ^X7}~#Kpue(Uqp$%Z+aBydcx^n2_K#Tq9}4tIl04 zRZ}{?G2_Fu>@cHarBFwy{IPa%&E@<@ny(FBy~r`Ol$tu#n%?iLQJI!@02{yhs@2Qr zG)K4E;SJ`jAGXxY(XoWBSe?*$uD8ZiIxaP-wmuk`7Znwy3ownU6LZ7(Qn}09U*zoWNT4qP$n`j26 zaM8WI?P65gR6@V(zX@uUELQBo0LspRdqZs<4IW2m`Hx!xGa^ ztFRJ*&vt1=j~?G>e5#$qxs{$~h4gflj2-+H$^5uM`Ed^IJyt=DHQtYDof$AgRmGP! z(gyKNTNu7)-C&*AsWX_TQJ7b zW0bVKuE*>#cTKm+TVoOG)~GW<;?&IIVvQlPoy(5XtUaBq%&KBi*14nO8ADNj_j-)A zAJZYLfSQy!f}vC9sxGhFu`9zyKbT0zf0uXDn`QOJQ>F0+9cSU6dayDw$jfGrb=|&! zxsXZPrm8jPmyRk(3g)sXonuZ|*KaMyySwTAM%LKxTSvHcg1^@=lvSJL#Ax*vdx~*K z)sL8x2pMA0e5?n%B+jW%GfN+HUiYrEP`|XswZQ0`OPYI8I*?ZH#S>v!1(cP`y z%V}>^mb`Xon0BMu>}e_U%J9zl>W<-2j*&c{$U**+=GOa}b>(=Xb?_J3lnoCob*VV} zm*j70GCGv{K;<;PHeUMioV~=`N3t|>_1E1^UejyD2OsrV;&^`YYtK2~{odh$-usQW z4!6x_@0d>gc;-q`ROp!%$Kq#Y2fV0u&E8u_mw7$LpT57BdLn=DV*vJPWa{wB^jx|T z<7(F971!y6=zG{Z3H}66=E%>&(r-0w;&EbgQFTUPOkqdPHLXwlaKwHcb)3QOS^FFE z#$xuft4%Z~HR4%^ygpH%f0RBht9CCsWJx?xb=4T(b0ZIY9Jl_KV*P2CYtuyx8>yqy za_If90Z*Oe-h_|b<---Q@vND%@4EZqca&DR-@ifcp2%x^RYXdpzTag0O258~A?w-U2!^}6xi?r36v{<>(eg{B&QTlUeNa#M z^m5p~(_lk+^b$qO3Knq%rK2kt1sEdtOXb~m}>R6c2I1%rdOTo?*| zxj7?l`>4^T`toS|8iH>zM_R(|=i4^jS!!q^mLaH6qjaW+N=MsJUQU^c{kT$?__3Rw zeOJGG%dW~TvL8FIrokE%Yr0P8V{oj3;v>n94PzP{hu&z-=8@jGXC;wNGty6}?fsUT zN|(2^Ho4z9?@Nfaz!l%bnh2{vCO2N6C$UrA`P7MBE;>9;3R%H8(t7R6tGkj*14_5~ zUXU>-`mu-X;8-nw>=E{ax~voJmABfFnk#*7+!n?r+BP^9ND9&O>hh}5m4``6v2hq3 z$Wq^vCM|6+n7PFFG1rXcH5z^Vm*euE#`Xjyx43WJzwuq~mR;sA2BMbq**v@+bU{m7 zyXjN8(xrMw`}p;zN3GJSV(6Qlyh~4?Pfv04bYAuqI}}4#`d!E1r2tipS1_SJaz%z3 z|BgtLY?~Tkom-v_g=??e#T7G?M&{HwEU5GzSmgCKtBJ2G^WRlQT6Z$ylAyv$o`c@nd-*LIyX?_>3H|)swT0yXV7}D$~6~6t009V~x=BJ9{ zJxMN+ogZa4FmiPBGiYCk9q7E5$RZtgX7!r2KOzoY2}Kt zuU0zM;+%Bv1Z!vP8B#|_0ng*MoD0dBs+{_&Ul>mes1!l5{>lBTE3{XdTVDbigd|l)m`Ud+$2r-wqI3zsjy_Q+mU1&*9Et zUw4XHZ2xfkjrVWPO3^Iq@na=WkJb%#(%sv0ZSJ`NJtj3}Y4CYHQ`K%mmM*UG-S*qB zrk@)x4Z#{~C*oK=ADTzTuC=pspkdw_dHzmkez_6NmbWj&Mmi+@4^rQ7v7mW|Gr9lB zcH*j_#u8=azFnx5I%L zMV~qCwn;3K*sQ*{ALn7ZX>**1d=2xB7)|#u-f}_n5d)fS8lmULhHqgiS;`MFp1iyx zd+D8zeS_hLcHHz0S+d_bKU~bd=)RwgfDO^or2g8>`+eO#eh-9gZYDOp*MGH6Wxw`h zdQs|GQq!irVOP~catsw-uX!TiQG9O2mobeyJQy|6vy6_r7)r+9tW~n#f3U1x_t67w z=dzUZ@l1Y>hOgVRA72@|-(L2~Mf?C$V(ISl8g%7l=^aiPm*TzGO@yf2HrWxv=9AMD zXZgl)&65JD#?^Y;xYsJQ_FGGp+LXJU+T7tIy>_}0*5xC)5bTnAzy2|?7s=RWiczr(_Y29A3r|iJ3)va|w z2T~l@Cx*xsrh3E+Gcq{GCrf$Cm}FG+T+s1+WYY51L@MEXd{})mt;LD024QzN&j%bU z{_uv#WUDK9m2u@u?Q)GtcHRk9ntcwRTE9)T$J5_te_cxo^#PW)#+<=r{~(9Fs#(prBm~`eNVIKtzW^XP}AIz81rmBg6>x3V{aK_Bu3av zAGY%B58O5W=n${G0r zp7ta~`|a$^cn3$%bfsBjmD4lq^F+>|aN2D-%^fAOR4gi6dOxyJ%NW>BWL#zn+;z3H z^b29a{49HYh5FIn3yyT_X)nf}Gv=Q#$x2MkN!`=CG9X{kxIwRbfI1)r7jBfA$T2Oc zV61z=+HRSQc=d`2|E)T6-|4Q$9G=KnTF2gBaEboN;bQ$Bl`hY3N=LQg_$Pd~6FM@c zzi#_%hwZcX_Ua72DyKCZ#W=I9Ftcl)^T4)meL>uGom!%iTdWn=`CF>2TI#=S={|+v zBRx}_X1zWU(_=q`2)D)*)^h2{+#Tw?Q6Jze-8k9S*5hWomhsb1LQ(7pg^nS3=(P&#N^9inx4cb*Letd3`q%YS~ z*qoep7xjG&w7Jp6o>}--&|UaY6t}WgifH`Vr_8or1`@fu`Z~u|v3h>rS4|g0x`o%^ z#FaB-ymjmtHZI?ETV0mK&HHNV;yHnveyQPl=F=t`AE&QSeZEjinwfF8UUl00MP_d< zQ}1})KHrt={UQqUefF2_p?R~eo5WzKbnKDix9I(jw?n7>3-p$qs7%~##U=8rHOKCR z+N{i(l7Rz!bL=ea{W<_NqT14EJ(4bspb0$Y|{O*pK1k zp~B%_i~e5gE|I{zC0&i{UtSqa^4-_G+CGP8K;mYlbQLMGmfNd&y?;Q}m1lfAsIDH` za#hcl^U21L(%ClBNlauVXv)U z1o(9%JLK-yEa$%x`?7E)VJ_S-=J?t)D&-SV&!2KLR~67w4cBur`+2vP#$9{M=$0!} z9XXslbvnmv&ssB2D^K}Vo}-d7og|I+M<+W2Lk~UC@N)eaqtdxa#KN^YB+8K+SN*O+ z##Fyvy3DE6WOd6sqJh@wx8~l|Zc;)WSnCHl#Rop@;O+?!OTuY=ObhnuaFdO6{^Vgc z+beap>)s?mrN3m=naBMp93D2I597bgu3Y9Lblo8GQ-i@~!&?t+WVFl79Q#-0tq<=M zH9g#-!J)C4%l?fbzs%DJ`;zcm<`0Cf_@s?IiV4p&`#$N+wyoW%Qp$!7V2n9TV8bq;}OjvPxc8)a;!V?y+3f>VDq0?uV}fj?le);?-i>KkW1UtbfKa zE{8X^qK^)H**^t8XU8Pg!aVk-BxLQQz4ymYJK7b{jP3CK{&bA%vCXrc!NG4IYwoMb zOn++SS)J>cwqrObIzO*Pgm7qMYn0%PTpF9|;_Gh`C59}#A_vX-yxdA;vPt~C?Wqz3 zd(oQjwXQ`6CIy6RE{~hl99X|^Nzbz(A4jLb9l~y`^g->q8fiHlWs^N!O!2b?+b;C@ ztfw+C%;fHIl-4Dtp-oLl!Z++F*K*6~scn<0zmm8sM` zXN||-hV3e3q??4EZi&m%JGADo#>|X_iS0~T{*}0=wpmA%vaG7&W#WY|+PYbO=c$sV z3b$-4uNK;2WM@Zw%~g=%sbyv75xB-mfBM0+Ig8ns%f!j{xr{B9M%C9U*gWko?DR?5 zJFZdJ{I&mG(^}*ECjR4IpPS^Xhpc8ET(NF?`g*{mZD3h}QUAaSdK)Llwxr6GDU-lL zzBszRmO7aa1^I!G`J5UiyoNKeesOL3Rfj)168bgT$Ev3WzI=53=C@-uD%2@((s;Dx z%eakY>9gRVngR~lmLr*sO=}pU2OSZIoNcT zuRcX$v9uiyef_6vJ-nOrFQkoxs&}HbEXfz-m?^6|8hUc z@$C3`aXBuaRewX3D3@!0gJoJnT-=$M*)w?q%=@-7ek}d?;-k>CmDh`0XPl=eH$mh@ zDvQ47i&es5&%WoKp*@)O);O!m+Al3zf%~oTYen2cm(_xOWup!)%m?yox*L|BN%wkf zHv6ro*?H30DamcJYs;qSf~f~KT)An+6IoLg7Z2td-#yqYjU9AqlWh#E%_oscsKTGW z%(^LUQ83b-Gw#$bm2)s)AUWJ~jn-h|ZXXq6y%%ZgwjX-Z<6+-5+P-GcLu*&}?`Mq$tP4Tv8)5?h(yND|08 zUGU+(Z!bw!XFR|;5jUdx>`J_>n?S&%{UhlQfsV2PlhixtW(r4Zc?Mi=4jjJgXxPbG zEYB6#`dZlA`kH@nXszA~<0WNfjum^TZ5ZBF^zy&c{CGxy?=N_=C72Z z{y7OBPFpQPG^pnOI!G9ho0f4{CNg72HdPB93PizetvJE7>vJ;(3=&FCjJfq^5`LIuV1(Ry*d#P70 zCu&_ut?K7be~oO`+lx{?BX(mTG;PgF?{Jft1G7ZHrz1 zbZVo$M1eoE4x?7WF8+6KyHwvL_iyE!Ox;^fbMng(d%v%~gwvsAt7g7wx9ERn4SvEu zCFe~4@@Ap_SAJd7$~Xr}r$^o18E-JHYD*L0-N$%n|>6|;ePTk*(ubG*}4ND8TKW-W@jbV8m=lS;ewc4vQ z-ch$6x1`z;K4$Uth*)OFJw>mT;FoqGr*u_kjbE$Q-n7E zLajo@ciNZiGES6IsSDto5|GdfhF>b274 zWF=X<8_dnj4$F!erJZ|jXdNN2!_GO+b$T>Smu~lAc81#T1@FS@@^?PbDzSU9vmwrP zuT^Z;^}82~Bpb`5Vv{qQ-5yU~EGUg@?dt6pTwR$jolh&QrFCy=+@WS)O-JM7>*9uf z1a7H}j@FVx{MJh}@<+Y~+!-IgK4snie(LLn3g_zDj63hw#QV&8hQ_dj7M>+>{XZ;y zW0+_?&+gc^ZQI&o+cx*uwr$(CZQHhO&pz{f@AY@1NgW@L{Wp_doXt*WEF@$S$Y*^Ob$^c33Z-4a~O6;Vo9{7$bPDxdEoj+KG2W zGaW1#;M`024^I(gW7V?RPf6~=z{#KAtUMZ~wpe@04{pyoUlw@1=z9{El8DL|npT>g zOCz_zG8JYoJ2kd@FQ!tUGjhOpvRxlfU9PNqd@2M6pU9Q*lYKI7ZT8`c3 z$4dqxw`X1Ix@LLBQo4Z|HPSmPhp60lwX6BYzYaHU!Zubpx$k@M-tXT=kYBFZV?{1Z zn6b%jT1j*p|6Wf2thyYI-~ndrj;Rs7eJWz5Swua^oE6;`3cc#=56rlK;(qf(_BWCT zCoOOx|7GlV&@S9Z8Rj5%8n|5d>UGDsA^ZF??Y8ZcA=OBUTEJe0y}L1cGG!fym~VK< zlB0*G5G5S8HDmX!aRpA}ii$ZDhh_KDhRb0p{BiKd`vR3KLIedsDb&*TB(r6N|Hv?$ zLA1E{uUXuw3~TXIMxt(W)q3&*bu`c$!p12zkcxC|Zw}KibJ--|QeZ1rEV^`i2$DdU z&R(gEdn>^7<%1F4&sYRoL%3}*UgJ$je5FGTEW(jZ(j=B{UFoybt_fxvmN0bz->g3Q zfd*&gU%S>L6H03;+Xe?|ZO5+~1>S(rkLh;-3mKV4&+DwuBVEOJdjfhDwPIWEC-xyL z`TlEY_zEM#{lY=CnAqg!2VToS^@a z@`#u?(#ze49O6>4z!ljb0Kx#%!m3{be71d}CBVO%4tF_>MT3{iCUt|2G%w^ramPDRA9aVXf?!_Ba{_l|g!1|hQPNr`l8Z*EC1Xtg z;YOd|V)}O%#DhWap;LqF0kTR&;z-XE$=Hb}2Xyd>q3q@8ifGxh!?)&T3 znQRUUOdg=)67dqaqN8v)PsaI!=GEYJT(RhrDaRT!IHoSk&7v+?1hn~%zkd*8F#82| zo{2MBxX(f_8k398z*b~7PJTZkTbgl4?-RK~Y0@7H{G8Sz3{lEzu|91^am?|r$g3{|y4*dKHdOl@dSUu-T#)i^aRg4}drisuX~6dD zcF!e%Yo1#6HTgDT0-g$Hf*sV?nK@s0!ZXD`M1IYT1zir-$#Pj7KnF{R2;{MTaj^oK z$79H10y$hj4@Zb`4~XVf?xyouEI=1ai1NP$5@P+NbZD#5$=t}QIjo)sm}^mJ{`toC zEdbx&BC7wx^MCf;L{uN0{0iZh*K+Y2=f-E{H$OBx}|mx4kl8 z#{}I!bVDsbQmjn;H+bOD{pxefzK;%t4=s0Z=$im&Zq9{>U&6ClI%>?>AtfB~O5gK! z!a6rTe_QMJ!n$j9d|3XQGQD`fYD+J(X*+xeJe+?88?);T^(j$LymU)CiCw{oj6My$)ih3!NI@pmzrO6P0`C(Ja)4QhFF3GigO5aj(XY_1#FW|dA zW8J{B7+8{C)cRp`Nq2#FG)9OaUXHTpC=X*1`F^D#sSW|Tb`pM{yY>0}K;FyUcJI zNe;(3^FDaLEiGYM0dlb=#`~ldsR|}q7gR?q#YIl{l4d6=u-Z{UVc@(=YXpf}MHqSfdWWStf_2ut z|Nh{OTcChd!`U0L1D4Y;E2)0}W%^SVv8-Ax1I1JY0UPNSfSyBJJ0a}j(Qk|XBa5sL zYkM3ys(YqHvy!t)IEeM7!-Ab9P3&+R*=5{T3)!U@p@>j(?qNQwp^* z*rP$&6%1Mh5Dj4uzB{W@-$Ew$la955wDaCXo>Z?|z#vt3*q4Kc68d>?y{25>Q-tG+ z##-h0wT%1^rEXw841qtHjDKzHSbpe(kws0Vp3YF}vk+>S_@r0 zD?+`utVRg6vivQUWkpHD#tUSnL#IfB4&+vJ?ZXvW*Yl_c4$P>WohhQ)Q#ees6fWU`fLKjoj@v?qd zK)pQFrI=_$@@5qyeLa>y^~<~p_u{)Wv)dK0Di%Y4n4C%GbStZ%y4F~ZkxBDI)mJiF zQn$D?OVg43AhY=5QUGDoe7V%^#^-83hb@-HnN-6IIY=hok>r*-T2=4x{LQN9rzwKA zbYRh_V1LQi#pWLSU`9td~B*2E$8a43wZJ_JIG#*i1RaEML%qX_(e9H8%yQvL8&C~WX9i}qvmh$M$I9Zwg}0T$R5kuxi~JzK zt3@nl;lC-@6Riq@T8#mHN6^R965!h8t*-WI)`cw93-$_zBr`5+gao)u2*6qi;aVM) zZz+sIMWdA00ftrA`G@{HGKpqT+p;agP3}+L$e$O_IMAz6p8yay?t^py9vJ|d!XBkw z^TENA6o%f0vGDDaiepRSaY?;9;wj+Atfd|d1<5h!-e>-*Caj_oSS8SAzj-o!9eM)x zniydC1DBr?PU+XH1FmO1N6FX50TX3EZHVApYP0DelOZvqg=|dlgVEKE`a{wZV;{*n zf=FNh8aR?yIj&a{P9hxck@Yf5wyyOCzA?w+uPxcn%Mj8^!&tWw$pbsQBuC=VdWA3N zT)07wg0A0@yldeyDd@Hl1pecWJnFI*vn;IaYj-rkRN*L$jEwh<>C_l-S;HbY;h|P@ z7LD-Zk30mTq+B|0gI1#847V@njmT{|N^DFd|D5b^!NL&wc4W4oaG>ZX8m+52=MtHk z=$3=ZCi%CQ&;h@5fb?saaWxwr>6&Uu3@wrB957?C>|geMcQzeyT#o{RaQkbJ6jiW; z1LaWct{(~#=T+PZFFb8N;jTqFO2(2m+lV?hnI0V16{&`+@noZK9k7Dl^WBls)+ss#1ma*^Sru^oj1?1TjJ&TJ&!yE#U%VPaWmE*L@;$zi zRH>@SB5|9GdH+GLvJH5@*Pcn|}VjE>U$F1#1`G=oJgXLs31#cto9hb?|}XU^-fY*FmN2#}3k%TI$Uu{;@q zO$iXi0yvy$<2hUGCsGtzQHG43nSc=UCvL|G^s+T%3?G2(d5s}a528k{VqU~5S>A>- z8jbcx4u)IkfB~e;KoOKjzF}wANy9@T+_$~41^wb)6B00#_xj8mx&Az~pEpWM&biRZ6M1{M0*EQKF=rZISkF%zVkz@8%a!~Kb z`pokx3(m)iw0F{`>M^bC)CRO4>wnjllMrN9;&)NX+OBm_FXW;`q>dE!g#_I|YK5t8 z#g~?|#2({l-1lwBXxtZYCeb$VOrugXe`Ui#YVe99bx6|&L~!09l9IM5tfmZ>ooJ#z zaAL>W*pZ|e5yo_QC8Isx_Ykng-;}}7?X-~~3vvP;A=!l0)E*>$PrBau8`lRS*HKDaXqA+2)F?0STMZ0I`@9G)c9D zY4Qo1-hKoT7p)6u;ee4exuf9CZj5m$!elWC${XEBVxWTtYK3-ic+lfk_(B1K?^jp= zaW4lJQ3+c$Xm-tcATwC<;9R3{nWRvH@qNhntlte-j==uxOXhK)zmm+t2s&C^VU=H_ zRH&mdoGu}-4u_N%I31>vE0c{bz<#-)o`;;6wzj#^GdLy{6UGy0=S}8$!{@6U%|rs8 zmsHsjG;z6O%pEVll2Yl}nCIPSo1miuCP=c6uS_@AK^Gb0 zi!!V=(Ktw*W8*!t`&&>Ffqz|vXEE)1eHI@k|el8+jJ*{^pHro2~c`0uEwWq1tOr{hYf4M0CsF$+>DI9j!z_TxCpn~jRXi!s5M`L6SPA;zxP6Z4L z-DoK>Aja^^(14)?BEG~C&@va>jcx2?4Kp>ax8lqr3b|PfQSDk`qtQm>D^6>rSe9fr zlAAErtb8_)uXijgFAwQ7l40G-E-Hz8QC?QY%=LI%5Vy>tp<~#h6oE@#N$2Z*s!88~ z&Kq~=WYM|8w%_k%VkyvWS7b10V@3%@yNWr~7V}~ImQ3%d;J%`A0hgASe+4G_OL&tw zp$c-5@~34^GSXxf%t}aYU?L{8$cg^z`vvzT#!EuY;mNFvKIze7^?@+mCE9`STC)e+ zX<`g@;ytMjs@Y4>{A}QV%o_2R1qVLeU5b^5@BqrxAL}H^`CCp{mTNmQUOGG0$hs;cUx?s5ox(I`Kbv1S>?zx_%tgtpGDQJtZ3S z;1d+(Y>LOVaigl+dBP^dA{Nun7DWjGNT2NMg&3>v#7U$G6Bo8^f3UFkJ6-lG%H-HL zg40@}ZGiIg`7oiJEaE2g?{i$>lK%8ecc&^#Igx}lLpvtJ{qEjX14b~ zAH_2rvv6ehXXofSWZ6MZ-fXE+Bqq`HI|2{YUEKs(=VCW&ZsnL&?jvGsR{I5UR@^fj zm6iQjv=5%|m=7S6xpTnPLJRE5xwKIhJWb9zOyn_&C+8i@Rer5dc;X`QHG$S7%a@A; z1n{u<8x=`Rl>mZKt!}i(@zNVMSHU(?o~f&^t@9i$R5)zT?j@6-!)e-8B2SpFfrieY z8(X5}3%tHc_$1+-X|5etqAZDWYT+EC5UG07%@8;O)l{S)S3Ko8SRC_ER@%?mrBFk; zR5{M+PdxVrR#9t@$Xt_@>+eaoy*bzT7detlqxtDj%rH*vDsje%1uR$?StR-`a&H3< z71Q?jQa!ms-lX4iw;WCso#(Q8sm*x~8w`ZN=^Szq@1+jV_q@jG`AzKy*Xj-h=Y}pV z)+>0jOjAKZ9tV``W&a%SsE8fDuxN6Vp-8W#oNEda_cfMFxl&OVkA8i24vIX<7V;)iL5M>c*WI@0FC$v_=JDWLis#) zbp;njcl<{V*!p9eoJXZ*%?eA0v*wd1FR89>zAILF(LDA9md;zOET;R?BnAswcYYOP zqaoFtg@s+^D03k@RQjtv=z0xuH((&~RVq1oHD0u+t@@}?GoCDYu_C|6MjM3!Mi{rdKBM8QKbG^_Du^bPY|Ff%z)4-=61iNi-JT;)rL zZV!xRTTGJNeSKu}1hB2=y$4gjE<|Ms{RhnGj8-m^ih;RMUW_wS&H2K8iBV2+PB3Ldx~rJvlDH}8W;)Hap)Tc5>aanbEKPDQ zMkbu8A8pd8c--xGnyDX;;x`**_^&5;{*;U-ud7f$8t>b|nfEZo(Qmgf>t=5^p1WaoMS$n?el(ui8*L2nq3ULt!J5F3 zNMcY;D%L;Sz6mu)*N)Cel+T$nR@mjAf!=_YlJ+7AUP9 zH9}7Xbh`HtmS5trN!MHiH7;}bUb|33V1vl`0IRXN=wQjP7CXh=9joQ_8#YDFW@do7 z){KIwPP$>6DDWnpBA})~it= z`E;lzT1P(w*SQqw(}!ES|FfEa0`dKqV%;MN*J(N*kiWH=HKYHzOd)BsNHbfN-bqve zPl&}NK)0SEmT+UL&s`fG^%yhSSyw%&^u|-SnL=(Et<6SZC;B&RW^{abigL^dV@(3h zLCj5}Aw+?b>r-1)#N0C}+nWlfq}}0WGf@MPVY-vQ)G#l>8)V{?VaAkWyl(7u8p0B5 z)_BY8f|91n1X2~UH0Mv$5?2yy={!lGMR5tm=SE*;?3SEEq}KT8XM?aU!+87A9_!AP z%Q=-sidv74;=keRZQ!d37UJ zxpwapfZ9o=>ai-T zU!h)q6xvFfzABNlNi3ijG;U|AJ4&sgH0+Wax~$oX>&W_GR-?6Ojg?iuHA@X&_(0B$~v&9!;#Y67^^+dY^$mit;MnY zGv|Z-5)(gPjr#GY3GrgLM!!od#8KVEJ0TSRiGG=Rhg@MVjF~g4Xa$SrY7rViue@$n zeCh-$*jrM?yJ70n3gv|oHb&;O-PB;$Uar9=@H3|r6!xBO~(??S&E%Ec&D) z*t;V%UAweyHZGy3t4{7LaZkr8v~!l~N(pMbjamvUD&73v1K_3oc(8W;^<-ek%-g@FAasjPo4r zAhcGk98#sgx-z>Y)nMg^=;xEdTD9cfxA8mWbLzoo<{@>QzD268O=7%!&f7!pqf)hO z$5*V8IjiUQ{Zo~gvq7Qjzun=~f7@XsfYpIjC=ZV$Ta@!?s6#f!)>?K;^;2en?%Y5#z<$)TIbPC2;iEk1b>q;Tz^rV2%VZ)#WKda=tJdC#p{8kssc_f8*C(y z(MD#F7+k02ii??}J?|u}<8;hSUvz5R4O)cZ5ltwrAhVNIdJYPLtV>UxX+A9m#=%hi zBLF5<{@nV9s2?5QNZw=+K3(rVwzJrGPCdy%6LJNGehgU6MM-X>#$UCu6+aPwOlvGG zxE-mQpU%7z<*_Lg7|Zsq%scZ zuV)v%kE5izQCOBT_;L51|C|agAU05MzL6jDResUhHq?{@mKp3~LT$X$Q|=ud7c?sF zV!9inaK&;x)p_8cr=It$ZGeOY{abVxxsV)(tF0E?`7o9B2W6CfcF~*5I_hrLZ zYo$9$L>|)2SGfjp{gApo8x6A+3xaD-JOd!FG4733pv%+TusSps?3G3?Y(lvUQw^{b7rG&G*%`@D8F`Qy+!m-!BdOVc zEMGenx%AzZR^+`gMKbuHwy43bRsWEvEpv*Yi4EO6`H!V`|MO|$z@j0c&#A2Bzfqy4 zyt7A>cdrzNnmYfz^1LpOYemri=3f2y*)L^xZeOQb^aeO@oM2#83|UZu+Ir?5=*Gi>6}2K{G7z8b+k&%fDkRJnek^Sn@` z&tq^an4AvMt2JoDQuxI@y4g5!np(S1H|SpoW%8?oN`7d)rILMThKXTOc01aru_p+X z%(;-SJ+)$%-ICY|MQcERCtj#@I?+E#tm8O{(vX3AWX)B&C2Q(+mjnbm)}-7L@AGw4 zZd+l>v;y6LBo?ppbj92^FTgq4?JW-@Ry|3$2)~meoth3A@^}?A5K)>uRjMP&<>;ff zbJ^T&nurQLb-dDaVjo9M_pDD6MaVqkkC5P#_63M{9EL*52rS|!%(KPlvlEAEn{tv+ z>}%v!)O=h$zIf$PPW=LzT1~C@0NC`i3-=X=`C|Oc9!57K>DfZvdTSns%uY>_B{SJ^ zu@p$`LK}x!D?SUmiA~{lYMlDb$G^c0Yw!0g>J(-}oh#g(+^*4KELCD4H-Q}qY_iyg z&Q=||ut8+yR$SNmM1&CIsSg9hw?!)wKL^x!ZU)Q@t}5_IT;qu|)WdNi11CkiPU@ef zImxal414MVv_Oe!yq~+~QF7`zSK1x1%t#}k+lhoQn3U!$kzpUjBc*6f-Pg%cDEBr= z_n8+?v7sEr3ztPwDl8vOzHZ91Dy!_v#oh^FzU~S{`0cE!sphT+!ypBL4a6 z!&NqHk{5`a-j1dc1@j)l5?r(Aq~R5&EftZTs{e6@8V~16by&*&I%CmEuxQ4*6*^XD z%Kl0;6eayQ^GOs$=y8^bcg$1X&r(P(9D6tJugQ~1u&TvaE+i`d?pv%9H*6z1fMYXt zMv#vr(@`s%o>l6pnsfYhT{j7)sHm|$(ecp8S6}-IOhvu;E3SLlFo5l(n0qnox7ty4 zN0EA%+g^1idVW!Nsi*2@46W^=kzXbE5NKLd!n#PD9bvK_9IB1G<}BN+*nM}m6wpAO zZAsdFEl;}t@B|G{FL}-Cv!8DYm^Z)a^+eCp^`%TLgpPNSYw4T}4c~0bee_~W*K;S& z&8R4T(Rnu@WNoFJk>%7M9Lgg&ya{K5SoTQIvow=zcwt*(x1axF9hy4A_5NFP)Va|0 zJ$(L``i)Vy4+Mv9wBqhy)VwaW|AG}>i|P`(kDu>dwBkl!d^AAA4?ok4{uap6z;kul z&vzj>5dFTZTBPGyVyR_B#LW?}#8zy;pu=Jea-+guT8nVr`P_zg&NAlpK*A=j;{eB zcZ<5GmO<=c!6{}so-TosY=`~)mV3uRoOO@);83qo6kG13D->Oa{r&Lfw$oos@6CKB z=q&sFd^VJ4?HJ_WJ_=YUwf&Lb9_OgOll=U}5-J_S{x#>bMQC{MoAb9FyDnu_EB{&e zpER4fBMM#DV#mdem}~Q<02)4egp0oGPTrXf6>fp2@GheB?v9HxqT{!oR+M;&&f)Ky z5vkCnJ;=?{M<#FK#}sgR~t=ZI9oQX82Nt7wEtJCD2rdHb3(Vr`5mv zm9JZx$#MMK!F<~gCdH{bZWODi3&1JvEcl(}mLyE$Rr=k(Q^q&@3gK7S;K1eJXxX0L zrZ6V@NI#Py!rI!+VyDKm`jfXL6H)0#C%XvqM2Ho3APJKls;U8M(XO=XI8TXQ{k_%` zRfgryL>QUTai@asc}M-$OFMwZ(L0`#4VGL+rj@FW+m!kyZp6~W8y9!e(ck@As97;b z37%ZK)4PDvxjyRsCv07JPuzW#)tONC+p9la>%Ic2W}jvpBit{~Ft^HKdR>j)O$YSw zgET)1T1oe@-L;XgQah|a$Cg_Mdat>%89omi=QGexwg`kRe|rr&i;`!$~S z^uCUuoCl8qg8d!rt%xyOR|mvex7&6t1aQOk72kVbk;0=_XLI&IcgHN;Q0>ufK92e9 zKC6&rRw7KF{C+#%{yc&EG3DfIOV^+cSWXVJ6>(uTGOAP9kW}s}C1xc^$9x~d-#gCN zIq^}DdoGUT>;hH~0G0B^-_PZCyEeyt{IJfAbAWWiKj-fH%L2ts5vGo9bSV8Y4v|s2 zWT~`XJV8&NdsB7#66cB{MY>m5v-9YEs)b2&tsB?;w@Q8up!aL?z=UT>_|6-=_d_Ed zhi2nl4$iG{9|(tBIFu+0z<1=%D%D?#w`qmX6fRpe z7x_K9tyfL35pvErj2q3W_C(0M%qb{hONK9dH(i4Qo;LG|$uK;O19_Srr4ELrJ#vx~ z2%uqK4X7Lh-dY3$aD4+Pz)a6E-CPxrOx!=uPYjG!tD%#zB#`ge2KqT zOw|DD7ZysasW@-b?>_{tHstOL@|-37)=A%(=q6yK-~_}6KuWB$D)zDWi5*6Qvh51Z_#(E|Zt7LR6P$Rtt z?jZFXJWTj#Uf}j1fgWz-un4h&t&^h>vg#hN!lhzVT;IkkpC=>V{cWL{-vz0iMxb9= z_kSYGC!tOS*T+AO`@8fwiEwE4#c2HS01TjGt?tK@wsz@Z!4`ItPYYc$$huY*BecWhiSd@O=2SOi-8Bx;1{A%Kab z?BZ2|=OMreY(ALwSU4&9q%TAAi4-AJKz61nVf&}mYNp(HxO2vd7+&AqE&ZtypLR$X zUfrchW|8Ddg{P%nFa5Y)((Y^$WvFyVho7<|xT8z)+j}PwnwOrtq9&zh|Ga#jiA4(xp8N^m@&_4L;%W+B1dE zMJn9;O!s#U3lp$mu6njE*LZ|fgT@9rx4n#wd%_i}0A$9HDp?Zhw~TXiIdEp%4ZUSa ze3gEbTbeR%AJ$3ZPp+D-aO6AcL(z-)8C#SN^ao+`L}~1zzH9zY_n1KkzY#4@DE5-W zVhlV&_asq};zb+@EcWAK?6(etrNdVXF61znalV_ZA8$RbYE&${=gSFB$Ao|^#8F6O z5fzr{jaALM{!6&MY-V+l#f=V@NCU6<*=<3!pYQp%lT=nE}8vq)J zWvd}{bU%ynGXxB#xpX3pUcajl5SRta2<+-a$CJ1ZzFo)6;)C$T>!d9H)_p)4xWA>D zN*pIU|I%(F9qCkjNUG&7O6px{xg%^b%E|>8N>tQi4Cr4FB{6m#Td9srpTbPLJ`O4l-xzO#ktJG9vx%df{C)1bl?X$xwPv9Qv zz1DceGo(j5W}2tSl9C*w8HAM{IJyS9)ZVXV6R-X6qZi;ubha#dKX==PM=V||oAFUS zw{f?n8Wie{u#f*DSAQK~$V$^vBg<3~i=m# zTi}tpyxFQ;MPuNY-%tcl6PRU{k*bN6i^WDRrS)IkpzMvc;VEozSJZu12evcT^YNQW zp((Mv+A34prDOYXDmIKD9wJ_FG+3`s`&GO!hEUq$IV)7M1k#U$Q1$(gm-9O9t9-U{ z9#MrrwxZ~V>CxjK*rlM}BLhDsFjx0GU-8{6YAB9%>K6->hSv~o%$EtiYMAD~=&N-{ zx6%pO4qYHAhR~DV!IsR{Dv>QjZq}dt)wVVH7el}yBh@Eq`E})bIBkCzGm*`(#NT6B zD>3;wvKPk`c9Xk2bDtY~M$oh0V`@W7wN%B5N&ZDe51Q~}=$M&3;QZd#u5$q92A9Wa zk)7Q>_O|zp3Nk5@7t%o3i*>13p!_9@SeZ0IcyGtzZcIJmTr->0dGk$KhkyRxNhvM(d z3tcp~#@q!Dy_Y-EA$CmZHSTJ7X?8ue1x~Xn&oz?Vp)Z@m^$9r8bK-GDXEu;UWndJxtDLf)3MSdAdg;OpP^W;JQtDoTSd@&5@N1`i&%?a z*x_}|6pp7ORk$K{M4zj@W5gS70y$3k{7U@-F<=J5~4%u4Bo7eB;O9ixP1v$v4)*DkOBh^@1| zaNv{cCMj|a&pt_)4UNPqUi}eD9@~U174ucqTZY4wNnA`?l3rn z(9Dx6NxMjD)VL)+Di73|(33?)QqH#@{Qix8@{>HhzF?nDSRRvH&fOrF$j|WKftH0- z3(@U-`!I1JtzH$yO0kuc9hUI8voWknca!>^0*gOU$wvP#2pNIS2_xIhoep5&}s8ba#821py>m@N8ksf5#ycR-D<2aq8mo{r%_itd-nOf zb_woDo0^Hdw|(Y+O`Op;ffixTX^`O_M@~Flv?4IUHPoWQg#*o?nJaR55dO`-lVVL& zQ=5$Tn=rZvhw!jFQ6(YMQQ&z(Q3$91_7`$-aJ_UPae;cbm|T1!!Ube=-HEy)!T~yn zBcbyi!<)|;+I$6_1h(^cQiO#GfRwg~2PRh7yu^(&$Z)*|sLl+rePalLvTwRE^}$9G zW$`%B`1OHs>-uh{M;7xd`(f^!aAM+aCAWqgGRUG%G_gbI0B%6ir1YO!cmSSF`e&lC zqF#5Qx&3XZk5f=5o_rgtaMm}E*4U}#xA!rJj74a7&0rt#E7<8NUrCmCh4;mr>c#M768-gZ3t^`*q z=;0~=)|Pa=F|eg`GcLH|7?&-W!3$fF^!J7>ZAlo5ciiDF!au0Hm*872C)%5B>ei%(MSq)Q>$B|**THwV6iP#k2q7 zCViuOEQqjwvYy;AWt;Q__%PLaw;FjKO%t&6CzMqwX`7@&aEmM#7BG?=*vtbfSZEO) zq9(^Yh`2+@6da+i@@&f}ZAq~TmVudgKMQV=R^XxL(;4#=fDZ7();4SUL)G8;E`(b|!gAmh#Un->?6tsWVIpPpa-qslL)Tw#ABmCzdanIK z8#Q@#3k$?vkg)5YHXg!SqMby0jN9`47xbns5_wQ^9Fnga@$dQGU81zG6iHg`zTW{~ zG%y4}hPLT8OP90=CC@Ri*R@0Pa3p)y=aWQOh1mOt*`2<0IG&fGaxP`Ucg4?6L!m~M zptj$dzkrxh7SRh@B&~D48+Z%dYLC~{jkqxZl8i{z^Cla zvGi6jx2_}WKb3Bg<^qd}mEGX`(Ex6UlS|^D2&4V2y5N%KW)?$Jvtx9v$jhS$&P(i+ zxb5J~O5cB5j6_y8HJfhn%|_v9PwVN|I`IgcJcjtlN6KLNJkAb#7dvX|52WLTWKY3KxuX$4t-UETPy&M+W zF7+lE>6^5h=fX&kpx{!b1pRFp6HHJD(4jzXEtpxA*Gb`xqu?$H{?dn{Z%1gWEH7k0sQ-LS(#I-M63ppEB++Ne$WR|+~O9mzDVr8LBH9eBH{oCj%@$S z$R;{l`q&IPR^6G&|5c9kr)l+2CMQQ)Gx6U|&#_PKbj871V+l`#)DwblPPn3;?mMYq=UK#A9#^=1RZv)dVQF^nc=kSI-a!Y)nqVT035XAcQqI1dGit=# zAjKbiN7DDY!#X)UeNyLmPrquuyHW8OnkZN=fRP>k-%lfVZx?yFUjq@W14g;dNfD;S zl)DE78f-1qnk<9VpX(dAq(0 zr^@&mZYQ8~sV{*FQ^;iF)?;81Sy4ByR_C#6uIxSCo$~s4yxvylla~jqd`w%|pw!h; z@Co>@kJd-tKK2b<_dam;F35K;HGkc-1U&59vj&V8hx1_EKC|NKR|8dz^O>p9eA9F2w`z_26V? zcAtPRcQiu#ko5*gXPp^j=K#_e*D6Ez(JLB&_@QjqzHb9~EF<_5U@||sKFRegR`FH% zyV6%6ddfF~IdW4L{Gv7sXDq*7P-EVJZTA^pXOHwM?t`gQ$7R_dW(UBU2fCY=m&SHW7p0Z&!_#hsW!VyRJgC56qH`##JVN9oPjNxRJ#kvwesw(gzGXQE(sAIX=1eQ#v$ zS=w)Bk2enUB|Ooyr0jN(^ufZO15V}WmxYcPbWh!@esRH2$zM46BSLz1fi z0Es|^cnQ=E9Ez8)iq;VULKs`d?XyrQ%!i|{khmI(=7%uTWsTXR{I>U1Dmp7D0OMSg zV?|G$$${~igh{okeKxP|v#ieh9MzULhRDR?3Hm$g8rO@$MvXrJ(GFF9gR*t8!yfmx z$)j=r5BWUog<^dEe(y96v{OdwU3ww@8bWk~KH$$$C#ayhUezfeEUh`++iAE99Omaw zJ9&!!982rgY_{GLa|6cL14+;)aXY&MJ@rh(l8`u^Z z`93n+>k)UBUHiBTM?9ywSK^}k$w>}Hau|ov?jPwO5#vcjLW%G&0QQ`G+P($CJ@hjG z&n5(G2f7IjBqI|=snN?m)dA9wB@`)|8k*|E6xwu!ZvRwU-WyL4PYKbpQ9 z1!~45G8iWd2xd$V0OgkLeL_*$LIxB-uT5W_frdSYLs?DCyEBqkiEIG#82urfoJp{R zdv}w|OyZ1te`TPaMQ*}rN>Gm_UqmZF??`Gu0Q0B;zl!zzj+th3&Qb_{?Ll`k7&HN= z+Yb4)K7j}=#E?HN0y~<+*Ym-IH$#Z5n?Y)xlJO{WlCb_EGniGRU<}cPZG9pPEtuM= zNFbMWm3?=bQXq-9R&*$fI8kw+CD&gO8-QwS<1Lf_5Cpl?AYVw2n*@ieW++5QKxzIs z1CkuD$YA91nb0wg-B8SM!JaWh=#sZE;?fyBMWex(-|05lMDFm+IBui^Q-)9l`OAuP zT$ka)!zz{{I}OO)0YvzB*Lu?fF?@A7hbKL03}MJ_+Z1N&KTq59w+x9?fev!%`qM5Y zH?2fPb=mJqj9b^;36Twn=12X*0SpSr>@yK*Dcr+zw4^;47WKah?A!(AbIu3iIWG%- ze)Yec0LR%?_{xB^Y*)OcY~{dy8}7$Jp=>KCI5f0MWQ}rQ*s*inC;c3*2R~WyNXJ0u zVL}o?StBOiG)0+ia?I4+L*~iBy=G_dVe8%P3!+G0<2$3dJQ#57A(wtrv@_2$MIQ(` zsF`R%5Qb-J^}4FNiU%d!1i|N{`5dB`Iou`6)pR4^#!RqJqc-JZ_#lCc0&=H-bK(s* zDio0J$CyRN&j=V5DnKwP10v=sNF;RMo3$x{RELTClhfTL)|X`+XV+(>lI#69i7CmS zZHsy4$}B2^^(i@++ryii;>l{&x zF4Eroqvvfc?AR(iyfAKEf%gBg_uhe2e*XjbHL@~_QVLyCA>3_`>?9+kq+yS;GO{BI z4QYyuXlY4{q_RuNCfTDQqe%Ato%1~RMy2<=_viQf{r7!t_c`Y|=e1w2GoPdT>fnwH zo#E>CuV)u>oR<5XRDLe1?n=8Z>0}mL@%OGiGafUon!>8F)aspvYfbf*hp~ z1C_SNDte4Aw=T9QyH$@eDLOSxE*1*V5amA+mQSa+`HZD8wsWC&2%Yc>b|X6Cri-R* zk+1IILc$p|M7TMF1LIP{M$Pv@9hD+9+Tq$t+%Z>Hp z=a?h1-;NTTzF(;IKYOKKY%uO&-hry|eF}0`s=2l~{0eOn3X=*SW^UW_XEJU`Pd$HF z1FJzte@azxN#UV$m>i8~9T&hK1t{t4Lts}hr*x^@h z*c(`peAzE6JNJ>fIgilA(l1_xU9KN||GfxZi*;r5k6>4EeUj2ODwLQkaqHas|Enf>S|@Lvk5TZxq?Yc=Lmn z#Vs-X!DA`7@va-y62^xEmhiDHZg*qc?7?z_u1cHnsNoV!N=R_Zk{Eg~(xS+aR*b!2 z@n*UXk>zWzRO0!PFS8k*WZ`8Sy==4O%-ZD`rwxLS4Oir^F-nr$Gt)U^UEzDSz_FWt zx4&s7;rYI>rugU0FLO|qRBeGD%bJ%Jk=B4QDX=VQ~* zGpS)7bXfk3F_)$E^k(?V$P0O zbXs-Q&ipn?E~6^<;IfTuvM&5mRam~m+${GTV-l?RA4P<05#c&o4lJ$JIkBdkyBH6d50xG2dnEma#o;~6>lcrE z-A`tZ1sT4(5Zo#zn{tF0CGLLhs@10rBI5_fbsSBSqH1*mMSKg%I$JrOpMQVzg`9>m zfz8JsGkogph}-7<$|I3gA@^S4Hv~m!FCJ8nraU}w_nX+qwt^24?O{)8cEMCiliNzTC?v=^muTq?n$2 zrSIDN9Hnj141*Ip)Jg?AXDpNgRsG_5B+B>2@$iu&Qd)#`clI8-IHMP;XLOhAPJya^ zq|}?d@+#>IYpSph?Z{IB_Ybg4VwCnwyK_uR9P_(U?nIZplyITwXvFSHv7HfCG8R0p z7VZZ9NBb~^D`E;)czpX-`t7RNrJD3R-=4d*UrT5` zbLyomqb13&MVGG@VX=9Hb(MEXS3h-E+E6P&=)qdE8(Dsq6h>(`yH6+BCfP$}8w_I9eTvce?Zpd)no}QR3zC4&p+# zh4hk9Uaz(rzgqO|vDhVhTzsLR!S;5v<@ICUt~_P4 z&b`T#Z23!4&zMZddp3w}|ETZuaZ$Y1P3|pP%Z+NfosxIoxf4R(tCLh9u~E{errpOB z$KY@gzclGYb%XM~qaXPrPi`uCko>^kVflH3Op}J1!yOS#-=4mrH({u{yf0otH)acq zwyn9Cpz^w5K#0#jqOd&jr6a4$8D-{jvYsPfQh2mlc1-EL(vE9lXt8ZVC z=+8L%p6n(!YW?xrj&%0tCY0l*yHq}+8=cJ3$pb}u{3Q>LKs9{cWV9hsDP z#(pqrpJe`~SMt@k6VHrgAKcorjLFz)X(fM@`7)u3_lnO)Oclyj4Ln>FJR%!cT_Snc zG~vDHdG^b`Qp?qy3PbA)$DNJOGZ+s(-mPTw{htu7A_@v{mJ2f-xJ#iqszkl+(+Afa9 zg3W8}Q@+SepI=jST<`JOj3LwK$$YWAnkCCKOK%!W_*to{V1-z$zG&Yn-w*yHM7whV zE7oW(7a^Y2ODK%o8D`nxp20o#LG39wr*qP&ct*=kjfN=ImmfvU4#z#{x|8Iu$Q|$G zay!eJuyR9V!|B0Vi9_{VdpJ(CF5H;ap`9lDdhBDE;h6ym#Y%M!x&_=($5t9{)L2AE z(2=^xrflHx>2f4b$&rA8;MMvZorfE+E!NE+9jbD0wSMPL=lKsX+cIAyRevfFuD>ey z-HkEPs`@EUc@#qf{*B=hn=&DXO%)=yr8YV8E>K-s;usa37gGONpGV_NXmn5i9n)Nw zmUZhH|vl0-fq>}>l4sk-(Zy${Ax)^_NEE^&d_XvvHi?` ztD&Ze;ojl;K2}`z{s(P6k9*$k8hNqz;m+(`Gg*6_UHfX^e9DoQnHaGa&0l_f-C7kF znTgWw-o91aWS+h~pt2&U|HE)~w~NQXh29}tW8^e*WzZMzxUXMde`sy$%jiiE&fb}I zL3wg``onM-m!L{-;{J~HQ-lW5yPs1JZg+KQ?ZZh>;>W*s+YR(vKKYWizahurw%e|V z@ny~(Y5hI6=DT9YmxX^Cy;@z6?LRd%H5GfdrFmxjQmYJCPfwYw=GoJwD$C9e9mr{U zzLLXhisU6$oIKgCK9h*qH#%9`QQdIQ>B*#Tx_O{aOxbj2`+y+7(nP^te~-s4Q_e${ zQzhexutL0#E@%1O>=K8*Th6~mcLKX%+r=i^#O*o-GL+3BSF*EL3CpMhwvP1 zwk|dvp6<4m&Kw};YPFX`8jHum)SLn`M!RUm1UYKCq9RTmzH z5dY)CN>eB#3KrH-F9J{&URakOWdt($*D?}W8vIDgFK`eGE&D-_f~NqR{RBsrB@ln( zL83ro{sf07$;kbRiCe8UQLs%CMQiGs%hcn$Z}e8a^Tmwl@--wLEI75@iJua3vM!G zikudiEQ6O;Cu@>PYBEGQO%4Nd|xd7z4m~ zFCgcM!215q_Hp`bEk_hZ(8 z5=nv-g=5Y859QSyY|!Aar2|Lk*?L;qfS(A$5}e+y{!k9gn*g&y4m8?0evS|``K0s zc~SXOe|d;RB+KB8y{tST{C2&~I0TU<-0V*hDXRFmSz7P2^~74)+B>=^3HLqC5ym>& zC<$+)=;8I;)NLIcH~P8T8vE&+So`g>ma`F7QD#&0k@sv8v!?-HZ?d>h)O_FkTx5p9WPkkOBes+Y5yp56~u zE*?^dmQvQP&Nv@SHyl9iz@#aHvo1@oH%s>TTMw*wCjr9*kZeH$Ah$U>S zakfsj&bBU|9srMk`(Xf}pCWLbo}RoB7^NJc4b+`1Jv@}%++AJmb z=<2wD4#vgWmPVH(BTbei%E(DdQ}AR-GQmz-QdUj|FG(cZ%E{Tt+JP?U2i-ZiKhu>* z23lJ;Erx3tME04z`(#?gOkA|zeiL0xV@}Gxd+DI%mha45@ z7kXfvcC_>T8=2-n{z`+|-TW1mxv+ES0H@2-rUX>Qewz{~;(mgfgKc9iZ|CanZ0V_N z>E`C-XpPKgAhaTGwu%a`h=c8IPWwX}H&O~(H|SV!KYA9V>PK_@|0^@A$p2p)0Nwv% z@}G?Rf9Co>bNwd^{3qc5i?07O*MG9We**r$==%T6Tx_#z6EIa(67~iwk9l@k;JS#q z_EC5BasjJfoUWsdhq(+~FYQ9tJ;(}bcDV$rs3@xLo@%Z>=6ETv2LZkW{Ez!CoVu%v zC!9fJ;SakS;Wk@(cp?)qM_Zep_iDg4#E-oiJzE<`%RiDdv~&j)scShyM_Vw>1*>$h zD4e^g1D5z$Be3o>vh{HFa<@hnj_R&XuI|QQsb&j+)s3N~R47d!PiUjJHu zZQUBbecRpNw+sbHZH?TaEh;uFbfI^Rm4BG^%}cl{U#TY#R5Hp(pS#GVVcKL97xZ4` zy_(tjMC0`0nj|xWuDX^txHzvuLj&LU?t6DsJ=pKm_vwOh26x98iGqy9NnNcK}6nUU)w{Qj*qoO|Fbp9HFRmAa`8kaEAmTQ4r z3zmN56bg>N$3_@ykht0Trj)McNM#IjMVwpju`IIy9D}EtA@YO1&1#eeEr=p!C%X-&1T2aD=zze zIHbm;k_R}xSH*H2O|{Y3d0BjYSAe|qo~(}#%RWE3-EHvv^KskJ?+!2X3SWdUUJ=$l zXOpt?7*BKF*9%~Ezvq;9ah42SN5kciVzs!9ESoQDaNg2?$)5M(bl$R7 zG%B9hy^Cv(>h|*VemkZr6Zqirg|7*BhZ@t(vrq4KwR3vP+)|c{)37_U<;s!LC;4Lc zuw5Vf)q9f}&%dKci*ap@x8^=9aeC_LGDYb{YzISao@(9PgjL-Twle&bK+73JKWo`g z5|2!&phSdF2d<>kczyP^TvxaApS8a<^U-G?>pK_bStx#jYy9OW%$nBY!@9v@GG}(0 z>3+kU6kVZp4YQ`m)cU&bA_qp3x7)=l4OiRq9QnBGwN+Ym|H(`_zU$mJ%<>OL(s#xx zMm9wZuo$ZDIdI2ehv*`fb2~3i?7XVBS->XoWc1+!l+TOA&!z?oZLwOV+NsXR8LG}p zh&;sRECMcf;j~qorlvmSX94C6qqH-xbVuj=|@zc)5tUPQ(K zv(yQZspNuf+6NuiejqS?bIiXp`sL6X&z7=|n9|qcqVBHDSd}wk8WvvH80nWLybX=5 z%8ShB!u9vo=Gi!Xj}5ZS?>yf>PdAIZ7UcT6mZ96bFdAqvrgFQBFJ09uWX+xKeG1kt~$-@?>riasqOK>Ng zx+)g#Nf{VYYYYtaz<6k^iuH8&vc(zeS$gaPpf0wkZa;<&oV6u_=jw*y&0z?K8B|Ff zb#*mM@T=um0@$mb`#u9cQf2z{&_Sfgka7B0(%j)AKHAsB*qgT~$n|yNsq^;=tU1hs z?=hXCI9Z++VBEr@!$QZcwy|!3s>XsPni_|1ohQ~hdukbICP>}2PUWl(?5<)M!gqJd zKH`0MGGUplc7neB_3FM=eIs%s-hF+|tQ70qmu8sI4~RdWSK?J zrMt%~?7w?UrgQT!U%c7j>W_6cfN@coYQ z+ure=mtB2R*8A$eU7b}vZ&P9m_Tfz{ z9eASY`$A~SViFd9)ZyTUmtt1H|PAW@kYHW zNZFjawf$?YcnyomHwI_7&)-!b1GFT{MR!Wcc`Xg$<2 zD0%)2Gw~axwY_Dssho9u#JF9#`ig1l#p7pfK3TY5$#ywdK4?ZypG3d5jc&aKSNtJ` zMf5?7=<`*{5zMc#0w06v?=5+yDp!F~y1^`&B;a{S@SdO(eSw9-a)zgQ2i+E(2#v~P z{if|E7{Ge>khul-=Fo5pCdCD5SQcSb_K1aMs+_0Re_Sx8ZY9cnEZitr;s!?ikjW`t zqMBp{+YRRK@UUco3YX52iY=Xto}5{XfeZ9hxsv*lF5u~_Ed`yJpXO!XTYmD8aT~u6 z>z$B&ZEG`mb~AJ3UHPUwiVvVy=Gqgwu08yl1pT5F`P%%8g@m<4Hp&}CoD=f9y0lA+ z>GT#G6?b;I<2zN?p4NV~@LYuZ7WSo=+a0(s9xtw3@o4E+&G5=yotA@SzXb_u_7(3K znew9BG+9<}WIfIzuBMcH9KW$n2mEh)VQ!IlJ)cb?++!Magu^i!5?IqkaYvsQrWP_3 zekjx}d|GJ6ebh$tyRhb|DjnjPLp7QWY7N@sCp=@xdVc!XPYb-7{>bPqWTxATfn}_qD7+1#H!D2Gm+l9Au_4MaQ%(1HA3A7yZO4E zyLnbbc4#cTW?NPB=+h&ihCYW&)z=+xo%~trcB$bmuk7mSTvZiSopV{m62IK#goBn) zLGJdVx>DH}qZj*|PVDQjUQ02KNso<;5s-fBG#sO2nMJgY(T&wBQSA`w(Ck>vd*sv0 zGxu!nnAWoNi1sk;i!QZ2Uf1Qs@$|y;@W7LSm(<^9?td@GroZkpLz!6FE~$L4j!l{F zy==Y9N7%hDYJX()G1|Q#Equhhh0*n8ytSZ1qJ4{nveop_F_Bg6Py4S;iXU7xgPoC| zxppK$^Td%VtH>7zkH6t9mvEN2B6&W#Iht7_%`E#-{+;)!;;GWxBh8!dYo#isl2Ut8 zADdmef6%7jA?xGQjh>DCkDfR#Z1iietCwy(XyKoCpth_PUwFpalH9VR zZ%f}wwJf~W_H|9`P!L4W~TS_pUpy>#b{lM*Yl% zHJ9|0Q*2V$Qv%L*$KEnfie^e#lj6Mj>GKM&xH_JPbMr1INA}_^k9M>P=tyrJWz2I@Dht zSWvs5J7o2dtNG9J6OKGQ{$ZKx4#izdOlr1z1|GH0DLCVyn|i@ia_VY~nZ$Z!6E)G- zxO(I7p%S~K#p6H-W^a>Uec_eNn^oeMmogkf{SGrYwO~x$7 zR;Ozy-I>l1zG>zE;$iV%G1vN_JH=`8NkaQJk+swLov#ghrU!bd53NbKa93BxjK}oh zO*^eims`yizLmPEWYyNLV!Z4`@5}QqZ)Uy9I-T`-$ag4wMIA>&*uu!f$bBpNC~L@5 z*ZG{IWiC1GcXD)%-NF0NNqc?Gjt0L6rB6~HI{W#)|Gw*M&2aIsir1*upm#uyaL|kU z`cKO~C3tUJd$+04w)R?I)_w7Sx5IBc_YQR*rO@rmxC8$Cm(JBW{o{=trC(En z*{MlU?%cQm<|>`}bWCQfNbITD$%_sb-^QuMrN#5dAB`VLut}&&+>m(plE9_om&TJE zlj@SSlQS-_y&Qdo>B@mC9al}S7G0CQcJum*>&LH8rMRTD-7vaQcvI%)&0GApqHfdQ z_PX75XXl-YRE^ZkyOMX4(|FU4-^1MVy4QW*;(qM|-3R#(Wgp&swB}KKI#2qs47v>8 zjBk$}9=BzhWmZ1f^dvt^AuIi<)YFt_LeJu!FMS@B&6a&QdnU&(XDHV#_e-9A-iQ1> z`HcnJ3u+3t6qdcveevq0*2{t-)uNnNO0S;1mVf=ESho1_8|gP0C6to%Qc7uhnRHo3 zxlDOxgd$;plTb)f^XT4K>f5U->iN@fj z1x?4A7d1z>@V8uU6>CjvlWu$7uF+od-uQjv2kQ?#A3Z)!emdO2(GmT5)#sa?#Lj13 zT3r?0=G~uq+-8_Z}i5P>{!wGw(-vs-jmFeF;ikwS<|}HO*76jGhmuNa(G~3o@qMV2cga@|8DQa z(B1I>*s}nKSl|S8&LnougkMz$z61xa%fO5mee^D{ z2yP5nI=a}po7%d2z_-W*0_}_rt%OL#>3cb=Ik{Tz!xF)%3@;ZOPw>v!7&#yW-^GJz z`H#|Bq&YG};b_|1y4ZUVpvfzh->2L>0}G) zkq3kb_3V;7Ru)Gf;oz%PEO?8bC5a?CtR$I&GLqS&?e1tZYeX3$*j`0$aNiOy z1xUgR>@*VbazxMt{9Oq+`2j8&X#xeDkphc(DcOH3L6nl)19v&WE-%dvASl%JW~Bq$ z!Ft9}A59kq5|nzS?olLi;OLojJ+2qrD9r9~quCkJ8VRK7uYM2f^gzAQ;TSI|Nf# zhhXaJkd!*O;2pwfX~9}8Eom65FarU!v`{2eXjEiWB9tdu3sE65ypv#80}}`a^@4W@ zMj}Bl$eUINm4bN)1C@ezM0c7wP-LhVEP+o@DR_sZpy)KxP$`&4bcY!T2K9nmAs8wm z)DGq$DO5Era6y@%K_MIv9%fK`qZUOChN8k6s0zHJ;-k``{1M?%RJ0P_(F=k>9pN34 zLLG@}j@D5f2df|$)RE?C)HEnE)Df1$C#WDA2k=f69u~nz2nKb8chs3^xS+;GC4f9> zv498<1%hBuN1AXj2lJ3KYCLEmNFLTeX7G+!9%fJhAxB6XMTK_=Lc1UgRFD>YGN>cGqw+x*)U-6?A;LpJQ0*ZY{Gy`46m4lJc?d(RhdHPqB0Snqp^m6uQO)5U z1%g_lp$t`{Sp<>>=nxI+2law?2!I+3B?n7kWI!0G6fH`qj)RXVR|p36f_Df8m4bKF z;;2jzX4aet_gRzB#D$>nqH%_K)K%*01TgD>7fb;yo2nw0ni^U@o2nrfK-bVf zt7cOTXs%5n_@DvgmWHs;_@LBc8S4#u>T~!mAo1ti6>>~p} zGAKqUQ?%fRM5fjLoRWaJvLsnD;12mvG$Azz0!fen5m^9$=Ale9GQXw({pTV`6$(sI z1FCgA2$f;@qLb6aYfFuJfp$T$;0aOcq0XhW;jXcgtNooLG1JMvz zgdzh?OJe|31Ec^+S!C7?MFbz!UsC`yuka8Ku@^87G#wBEH4k(e9&s8?8b}mM_ghNE z_@O(b2@caET2i37q83O2Dh zxYCHg6dH*HLPcFmoe25;`c(yg(|{^9$8o=d0V!006u=gs4bQPR&F*N6gS?=*pk_cP zfFKQ00`eu0$TFZvMjdJ@qoxX6CIbc(SO;wdxI+~1g&)|eLF)!R&78*jySt!7Xsd&| zgKiHY0Cj{PKpOyPs1sz=C^Fy)d_ao_gb}U~0<{K+34o4=121&lzr;7qT(lIndB`0E zBH&J>ssJbhGid=%;IBszX;9UmO+frXRc2iY(dTIjP!`B#Hih9!0`dPtO-LH95&<7P z)bD>uQFJP*ni@icW*Xp3*sB6nfct0~&!({V1?WT&oJf43Iug{W*8ZE6#{J(=h(Ipr zGROkPBDDzv^xwmR)`X#rfxVGtOoVL!jSIv#L{)Wyni|3#)fqZQT^8w({yGK#I?Wi+ zHAEQusx&ddvnCK43JyOA@1NZa&}W0-=c->l527400Br&ZCqxB+4n+Q+Jr8yNm!N@` zp?={XLBWuw#^g^uEuuRZIT6=DJ^vyCAa~R-|K|C5>rr%A1?`J`Wz_#E5@;O>8W8{; z_U%O2WxzIs*pnpvLt7B-XjeLailEb~Xc0h55yGI21ENTK08Lg7m5~AlPbddOpQryu zVvkn-OUp-lIU*c7;GP>QGGf4gapCVShUlo}|1;`OO$PR*1k!xn0vvOQpqoOQ6qOm( zjgb4V9z{E3WGFy@f32VMOcQ=i(LbUfkpZm!-?|If)}Z`IY`{STHe?XkvzCWZj`kxz zf(Cl`pMnPUI~9Z$EVL8`4FPteXcr23g0@FBAhir~r)Fu9MWg`1h;m?1{-yhv=NX`* zy&L2SKeQAs4hV3y3cD`Y8s?1))biBEf`HAFM+Ba?M?%r(twJ0)hbOJqnHyjLon|Up zN);OER{@FnB0>fzgIEl5pPgO&WJIL=UwR^%@bhzl$TaT1#2XrS0DU$DX`u)^O}N~F zV<-U*9Mph<6BaZN?noIbJn9;15v>ZeGr*B%u=(Q;;r?qC&4{!Vi9b{d7<*8LKSdqj z{lkE0fC4E<00Bq>XLUbyW2&g`pws&;M1RB|lmUK_dB*Grhr|lh9olzJcp%U7#NK={ z3DEx>lJgS&i4n>j6wxfKrUsVda|XfL-VaU#32-=}&Fn!;(1f224_cV~Fd*W{IR>5k z4AEiLzXa!>>VM~s1SgmdgDE(4(rhHo_YBa1>A>6x=^mhFe+*DWXy}nS(FwW#C_)2d zt`Sj>|GB#a=n#Y!p0g>{%77D)4$iM3&)>`mxufFzR0ZTfI!x4L$WmmUj*_B@a{o~U zLuj_UM3$ZC_zo@ddu+nJDXLRoH2r0$&XPjWe+tC;xXfYkQwu@RXKf9GR}~M;MqTF3 zO_8953m4Q@NSxAyr-ka=bY5HkY-os%+WhyZpG#_Pr#Yv5KJL`8MGS=G{~WpieKx9r z+rWw)_Oo!a0Z0Wr0rHUZyq)R%<2#sP|7=Y38I1NIK9J9k6mb8w=;t6t`g*v21BQfB zQKN$zz)<&jVi~b7*e3uRiRerhDgaSwsjMm->xL8B2h+q?md3J=Blp8|JY?(^9lFaS~@ebStO2I$D>0d}YmbNzknA+d@I|5H~% z^#ru>obW`f@!K;h{NI409!K5xBTwZHm)febv*9~mr;J8E3@T*$0H>(%r6Dv4@FzK)Ri>cFa1-bK}$dv!c{j!2ki|7M<}A9fjW;CG6=+vMfx1KLiGRH zZL}S;zYG$f;xDY`;r<8jLt{}jMn*-b!aqz4|Hc#4?Y_SPh1|dw;Yv$U$Nf}9t@_Q! zpd6O{6xq8#1%gFC!U3A;S1Zr=OcVYWhs*~G$p4Mw{sxui zT)>@{rKNNH3zYfY+K3cXFQCHz=8(A{ApggDn(qGq@(-k_mY>hZKY8I#&PBKbt>?61 z=stC@2}GuDZz0@&c$z8;HFy9z+Jhs-|Ji-By8mZX$Ph*U7gU-{e@Q_H4$F4M1EN~Lig(9&D_f4oP95S*ciEy7!YZM7M45A=!D?lv3kfyl~ zNm1cx9Khrd>@vX)S#iwt7*Fbh2;^xzraECUyAPcM`05?KCA>m(BsvAjg)r%|x z0l!~YNK~|c^$E>%zs;Hc&V4lD|DYSy7C&93M{4LBGAvy%R}uAy;9#u2buMSTs303^tFKG)G)37{Z4Xt`ifh`w*4 zf&Z(^P!%EiUxLmDM-_hlkVHb2rvK~(;m79&o9_63R{N2Jgp8!<1agZo?PaT;J~$o-G)ifREU4Qx`hmzq>B zL6*O82c-Vk>&=yrmj4BvRt!_{LA^ml)IcU>vmODpKnf`QJQn@iviZ@`z(nTwWN^On zr_)}cbl&7Nq(39pcIKrX*9_ltY_Mt7}rxXhRN5{>J0vS+AB4>>#@O8y( zjKNp~1pg%N&*cdBIYm%3n!8|%oNHr$hkoNt%!^prC z09^|`sSb`7!&4DZ6Zq#n@DFI_|I?m1|1}cz|3M;BDAJTUe~X9wF&X&#AUAjLH)*yA zDWCW+&+R?vpHzuX9&8bxVP?Y1ZN@fQxZ^GGuiFmmFl`>h*q8T)Pc-h)IUBBXII#Q4 z;{%Ut7oNCozBgU|rg_$jZavq%&-nD8o#T>ep4{&rm%J`?D(qxzMfvqAci+0Nj-zL< zw38QGuHrPmw&}ET;{#H%_duzNRmJM4N+2Vx1FL{hz#SRu}>Doob1Uwr)??3i~%_&N)l zVCD;PViP8#A&GR0!X@Vt2%qo(aGEExt(PV3=T@49EU& zdv3Se$+f2Xkl*j=4i5i(<Gq}QhJ$DyHX8J9*?fWtur{yr*Pl>C#B}_JU^o{wk zk2fopjPO`GyO^3g*u-80KL!5YLt1KLWG&t9r1rsB?zxdb%{OuzHc(rqhI*J4pMoLM!ZfLS}U zm4l(tpe&nVcn~w$GUA~UV^#8QjAh3zhH+d6bN)vIhG+&4wr{c7d1p@|^CRHD+v-g*D1Y$7k=h1~nM#vFp8 zd6i3qTsKFj>V@XL@w}Q{Uut=&(ps%hYuz)gV!n(=AF`U_CFtJhz3i3@){~W$7`eQ^ zY5&Xz=93O3%4^Kzk4lJlULG_La+bqf&Gq|ks_9VeQv2d{fPCYCQ%bEo!%pMQ8~qZg zZ}AKogS%rke+nD>WT*ZvJ15V|GVaz$I&rM!T}Cdp)x(-=!J)LfiUD<*dDU{uk7}_* zMt6NWw9Yg_gnotI!aT`qLajI>7GYh7g>4sAh!`EjU%XmdeeK{rjTOEgslHmc<<`DYxO z*QGUY#70!|Z(tK&&vJt$IOG(|V(n8kE>px+efDb0d`bnm9lPl6kv4~Z3b<$NAZq$K zuHYbR!NQ5xK_g6Yy~Bfcgm%oTo8r?$Z!I3T$(^5ae%$UAE#ci1s(8apHARp;uXiL0`|V;7b0#(afd8_#vU5Y}w(w6IY&J2z#_(+k*QU2V-XkrxHzS3)r}@AJgW4-On~iffT~ENXG%K^= zz2fvWZ>uXdA9gIMSMsnB;27q?e`jSYULg=0VU*>};c0!pveYM4x$`D>GxJR-7V541^7v^ta06&;i)8O>tM&xZCIt{;vt*)lrqRDun%2OO!ttA~mWGL3~vO!cU(vPJW(|UU#MRqIvLX%nPn#xdn@@6BfPlJb?S| z;g>SPX|BJvY3j}yQN-jEkKmW4K z*d=NIu7RNE12gNMdz2l%5xm>I%tq|?=dAVLigFSsfB83KWw2Y-W2&caCg)4t%9y~z zwOla~iCkP0ughj0@{NZLOzp))Hm>%FjNQ0@;;U!+H@atM`#UBYWi&DrWQcEvMGLxb zC?!`2h>aGw(3cdFC$p-%Ya#?ElJv6qodQWI;}(`rn;o9=_bWe(V!t))r#Kd-`^BJ= zZJpcJNd?iyz_69m+E?OOCTuuDIjuQ%5OTHlwU~SIH=fqE$P4JRT$>~~F3@B_*)%Y- zya)3!J>6o_8SyU>inoQDKD0QNemXPUf3R**$HKkjjy%o-><9l3H+&rdqUCQZj;X|n#v8v}D9_8G^ zC}(>@P}jn?>s#f)>?Imc=<3%C-FIhxj2Q};dS1CN+@#!X1Nbk0D(yI8ytp_Pq+Vy= zyyIceZssEh=bnk%H9rQb*d91Sn^}El956s5#+r@W74-%<1PE^lz1B zbM;i}9NJ1aJmWIt#8+YEU8lCGZ#uqogh$VpWrb_ThtS=}6KbDb=3Oo6$hBjG{gScE zArH1#1ypb|rFreRH;x%gYH+B(E?h2sN95)PUB|+>{H>TO?dfB}pPl%!7w_jdc3{0~ zyrAmUb0Ybi5m_^vqgND6?d}Ww@F{w_3T(@VkurH zg_S4PkykC*vLi0|j^ToZizy6M2KY?=r&>bJ;-82@!YkN(buOtf&TMQu#*v_Kuyy5N z?z#6nE+#R!R>W?*XqQ)NCiNsUgqIWsK)#QHC;n-TMV>3B%;0H1H7GrLfd8V_<`j;=8 z!f(Ei=)rzruid6=8}SN zl{i_ug-cex-Y)qhs%+rxNY3i?7R%_zOT`;=W~Nsb#P2a<_oy#j-r+-LxOduO&9({i zQRbw)S0Yn8g>#wLbL3dS#a$_PbV zDL>7-bKk{dO-i|GlAPFi-lCg)3bv|5dB3wM~D zdhERK+S%la4*@Io`ueBYa1LCbdbl;ew3O9HV46#h9G^cdqj2Qzi}eFnI&Yq5s<|H{ zl-e9PxH>>!a+)PE5*IstY0tFoL-@29B-{>FUYH#ZCR!%sfG$k?l3H&c7&-_+5JeW4=+w{~*Ql?NT z+~kS<7}LPm2Yvr5<*xNrnKsOARc}6?*@O#yT;NuhGjZK$@Pr87r^`Jbw0@6>riF{6OYt zsAc^HjKyyGP)n{T|2kumf~Eeua6S)ZuOPxUiEg!$vJxqW{JXo0m?!OCD@ZS%?5jBL z-KF0fU(FKm@yO-M}j{)&f;YFr%I1eg3`7102uwOH>ky2mxDzUPkQl3E2|;eCZX=uZwseHLF+&MSbE~ z$P>8YxXA4#yrs;?w%>^iwDP{PIDV~!i$AON(L!qu|IWgc?e2P+_dQF_zaY9sD@Q-9 zG?myhqi6M^@vDOAEoaH?_5K?z&*wR>^7nI7xSu6ylAjoUQ?6EGE5r7ceHr)5+KWzj z$t3a*H$;_VFOIkylbGBD*EeE-p{dyzZND#<8J;_w`D* z<5BCn)xIk=NyB%s69oS6#dI_?=@A5t_+yUDTxzBiwIO|9s+$~w3QgrcJUEx4<@f%^6n>i}X5~-Im-&H-7 z{TdzBS?k1C!~DpW=zLc~#b%5->HeLSv9Y%Hx_YS{4F!+i_P*Yn+FPDqa;)`y&>ht~ z&mU;DPUO^T_#QVSndQ4k8i}Q)cOPWku`+R2)A;-2OYihe>o?0sn6=z#efzy6YqUY& zPGex6_wio zUpFTDwmzTQDRt1bNM)entHI3egHNXfQ=RI37Tv2~_Q5``Jfoq3-f|#8(sW&m(`(;i zx{5lsWc_;6uTr%c(WN|(pDQm5%b-){s=I!+EzUV1u)m&j_vhoy8UFnZ&v}C033djI ze(^5%?i=>><+*oZZ|VK#(}_O!a!LfuCq7%6rU!-lxlG(L>TVo4{*mEa*sun_$7uGI zUD~26j>)}OIsJU~g`6JwTN||Gcl2B@?Vna&F84C3@tAe&OZAh1SxyHUs?VOTzO?^c zLi?sQ?E#}rWAR5?zm%DcNWLuVweEN^mY!E!=6iWTrEJiJ(@8zj6FmpUoLqUgb*`T1 z@e^g@y(?^+keTQlcj)%x*nq6y)5Eo~QPUy{)e)ZH>X|l1Y_HJETs_s3!aOQxD z?*rWt-E`fj%pJ|C6DceDpNw>9El=u~9glt#UUDH(aipa*Zr$TI_gQ7EKa{YAh*fpl(V+_-QF9jl6!<`QmB{uSR zX5E>{y=vdQ;J`VrWuCa56BdJOoH%)jv5gjudpwx5Tf_t>hcfepF07wgbZpU{7lz7T zUBh-n+NqFt%10-+I+XJsc+RZWe#0X^e8t^wX1!qwtnP~it5EmxiLk zq_de}?imkmIQWij+D3eH{aL*t$!PvG-o_=v zWA`_134QDGAL}UM_9s0V7rgB?0$t9><8*UUe9zV+4sr~s-fZyiL61_!s`-b~vdp2|1YJYX! zb~5MSf#O`Tll1L!t=sq)XKgz=qO-l!%(21vZtYHZQHhO+qP{d8{62}Hox4@Ti?H~p6O|vQ#Dg(A3Z(qx|+zv zoy}7$*xp*2ns<0=?);ro{aW$bsqutLZfScISo)Nyxq5zJrB|Mczm53#_2u{-3+K%qL3Boe7a~0S4?`Gw81oRQr#);@FbmXl3bM-;i>e8ft2a}D@a@rb}xwlg@ zetFQl65nxAW8w3;?h@OX=JG+4W7)@=EO*1{+-45iXCz$4Ii<{{$GSZi!?Xhn$V^9J z;reO9@?iNx(3jj{OYU~RRMU~`s$)UKdC}2VeX#pN%yaeKjhMK0RqyK)J5w27M>A*j z$T`_jWjpLT`@C98nr~+$cW|hanRj5Dx%GbK`S~B)t-tq+70}e^mZH_moR5tPFI%774$$I3RTF8N9^Rd&LjPtKF9L27F8aU~ zqi&AhNoO;Ioub{m7g1b~zb>)aMB_`nA@i_UU57Tz6zSkce$70XesB+*-d5ZnWr5+} z?iS(uO3S9CcaE?tf8cqq=yZf$54$F0D3B;;EN8TQIn{6IF`v16vsb>WX0JI2EZp~X z-rIa_#&l1u$O6pLzJksQ=VkA=y5H7hByU9)TX5+)*Oc7q-`5aQp4*Sd8e9p1E0@UAeYH05$+uUC`S5q#26{e^>i=|GnG6nnrVLr8Sa+{|uiI>{67%2V zyh?!i>PmnzN6Ys>XFqs5o%B#^t#a7*7Jifea(gO@Q_wICpe0j_v1G|Az%&h#apTFn zW=9;{GRobldWLT+Cz(i)_bBWD-u{f*t|G(wrJ<5@e|iW!Oi}c5d2uxJXal4eI%kht z{?qw;qF>QuQI~Euuy;3{r2xp!z$wyl=79D{Kv!{+gNT-Q)_L6%Fozx|VF3PY6PZ)1 zM|TnF7P!x1WqwQ7iq3dGX@et7{+CQS!U<0{hXJ~veZd2OqRX;B6Y5W)<+u)nv$vH3 z*D2<3w_R)ymoylzU>S6}jI9~Ptj_MX*%TR<+tAEVQ?9hsMNYo?D887{n>xHQRZ=B5U-+VD1Sh&f}XE6LdhjcSCe`s**=F?fE@E~N#N@` zODf@A8W7Xh5^I|Kf)A)b6j{kDJ{x{oN?@;^FpAWU1FymSiz}qt!0fb=hN(Py7*I%m z3&f-|Q1^xx?8!0Lf_}GJ;P5`Ps5p>^@J#Fc7H%;#Y~He!LK-lynN*1Z+pI-|%(8@J z1EG_Oj8H~Y-hu{Qol{0+Q91fOll8G>^#i#M3J8w^%AG({5)@HL!x@oyaW+>y(4w67 z-%eYUs(}qL0Evf%Z2RE)?_xY&!SZTL`B3A(DyUde+jtk`)oc2!T8KxIKJ1cWy#CD; z;UAW=0Z}odje2SL5KB2(+C?6+&(b1Z86JV-;AY_o4#SDnO-(X%Rtdc}Rb%4DRS=Z} zGBZMP@?gt7`5^T1(0X#2jQbN-%Z5o5O4y)}%-=aUTjPlVz$|((9zk#X7BLj@V$9k) zk=|{14U1vhaFCuygoBYI-s=x4H=^F4O;yuGbFyzMf+IDOX`c0o#4NuD zAQGjXQ@=>gl9(ti2k%qR1}Takq0*=!D2da3=Mvnk@I`tcbivWU)=rjd|(t5ZYWH|Zmu_nJ2nd;H5}B+P-s zHm<<0l}ZVUqTVF5NNuW*+rl>*(ltt*gK{Ydkd0tkg@6-a5+gX&_g4H9)}TWI1gsX# zr^Ew^Q|;mrtOVKYcw`7kvhD>vo2mjnbDs~{c$b! zUP#;t9BW_H1*>BdO;W9?z6(bc>$hBSn5tYDX9J0jYC@yDaw%KmlVyAr;kzVJDL`)u3Me(WGH@r3aq0)3ugjPSjg z^c6(BDhpla&Hju*M;DPK<{k6d?*{u$avH_S$2uyCu%A3{We38Z%vRepoGx9VI7*-D zZ>+T?IN}}pIb_$T40O6A_P*R^{BI!ZqwYECh+UOuJ1>ZC4M4s*^c;CsdvOB@kZY9O zqTekOTe#-l32#R|hyyWt1AOjash6Q*y_e-Lq4^E-m{~sk@aA=wgjki~qAeIVJg%s~ zo|i~YgiF&Ou5Z0A3RAX(do#At+@9@&W39VsVx1=@rS;Rp(5v~NexE!rjLrnYvr1cK zKWjd4MtaQtY0T}xCz!S5{ib_?bhClPWs@zf- ze5RE|R;URb#1beDM5yiBuov-tUSR~iK%FbDo15FF0!XX4CQK=+Lz>gv5Nf%gsQDdP zHvJmUdvKO2BGjf{XZ)yCxO3^qlj}fOfb7Q%v=^q^nBqaZWx2mU7nMdd`mU^p410^i zn&n6|p{Vzo42cqJ!8C~t-z{~;F+5NS;P)o zHmUmX5UQWm*vq`1jGC=Vb!3qFcH0sRj>MvqdY@h|7G?Uh8kD13olMJ~7lx+k(%4Kt z!htUw`%)hosy~)rbsE#;2e2B|f8gs3{#66*X6M%JsTE?87-T(Go!jVBd{T#|&e@qH zP_AFEXciX;0p#l=%iat$9xA7g$=x?P3!ju>9Q=QL6a?2R-DOf(n1 z@{Ui1duH`lm5_%qaK?*nZhL`;oJRyEt#UJdt2Xhp z(lFDS52$CWM3WF#!LcbuqJUJY>jA$}DL+-}_gH184sNaU1LPt9y4rnjr&?Y<80S+Q z)EMB(eF|b)mOwLscEMd;2;8&N?ZV5XT24*cpDqY-j_LK-%LP&Sjg7olI)4C((~cXV z#usu_LA5MmW$vrg|Avsbb2~Gm#P8n5+UkA|5~+xMj2~* z;~cq09%F~7H$`Bi7Eg5Jsf#&;D7;2JXko+Cf(=FeI9sDMq&EJEP0aj`JQP6?-7M7o z?bP^8=l6&VYIY!8a+;N?*z}luK`AOKxpO94ES=@fI|T|9SY$&Ke5y_l;~f2ic#UH7)ATZ@OzcP5*eZKiZe zDaO*pF;TpvYx@J)SSo$k7IM(2ndQf5UjTq!wm=yRtjcm4Aa>Mp;g^~q? zJt<@vFX{Ti_p~qN`q1FA7MF6*@#6W{yq)JR%!HpQ=G~z}KbHC(_x37`5HN>gjCT=g_R%YImgo?=k-oQA3ou=3|$pdxeN`4dqW zW6c)n=WL3&0cKN7q87+py8q9baxg;5Ic1Ds@1I0{#yw~*mCAuenI61)p6)Ga19;IO z{KFfz8tif$r^<=ySRGRd=Y-s>3|5)Gb(vu_cQV(RT7EncfDNb~z;<(!+f{{p6!8w< zT*%a>z{P?suJ|zlki-HChx;vH)2F89=f3X-z7Z=V6mFKE`RfwV4SGH#Ve|?mCrj*s zeBaslC9aRTirp)umo-Qk`~*Abd?b7OA}7tqPgWh1Z0y$}6C?Od>-laaJm)YZMyNky zjXGSx)uOd#jX3kTyJY~}5J6yT>pqmiQnF`PhZ8H4;zQ zZ+@H%@;FJ#Hpr2i6jBHk&-l{(w6}2KtCY|EavP=hpgj<&);q2#8+9nz%$q(w+r3qU zjrxqRGsGAzby4RSGlPLbzCarlyRBr=KkCr(?P71O`8%IFQm zF5QBpz$$u}7@{GLka9nyI3=`TX3ORzVb^VL9Z+T(2Smd!*@dqRRojAke;;++3lwMv zzl|9vkn-?5Vn6mW_p~k;gUz$U1W-KZ*oha*$PA-WKrRpRG(MZDwY-I~UH{4SdKE2w4d&UD*r=yL8pm5O-v z>q+bIAsV8+H;b()Mag4t?T%X7TPq5UVnYpGPVas5r$yUs941S5b=v;xBLy-W+e>La zr}7KC{#7{&1SN=J)11PlIphS#ZAC5)Cn}GE{t0cmPc&~1v~=z~MJbG=6{nMpIRfJoo-*q_!UE1nwJ zW{6(5Lr01<+ywK*#z(jreWfZ}IO#(4ZcZKR7(cR6=vgoF+f*Ql7V;^<`&?*gU^E}) z0%TQEYG6BURDGLbS+uqPOdZwgjG_C&n!tRgI~bRRvwjf zGv@LY&ojC??~s*rrFiWNW`=6<{O_99d{K{3P0&VM;rtSd{)OpqZ`Of5K?TE5q6;hP zvq;fCrZTr608fxX#5`us$kjixMk=LE5aP`%(ZgA99Ha{@DQG5`So|zi-LrTWDAtof!z3HLbU}o3>J5$6IM(J>s)7 z_wlimqw7sOfm?Pb1+15#ATT-yI@VH(HRQzv%O4I>=2kRjo?Jp-EUBlc9~qCWAAztt@PXxQ};_7clbXXY;vT zCb9>Z3l8h3i1KK`u^vYuI+|DsgV34zg~%i-jUvNHS%T1abSVrvq??BI`2{UQZ~skZ zSAl}hQG${Vhf z2`{)AoEa*m<%D(mn%%rW$G8SJiD_UVK?#C&!fLwy)fBPm&PceG^avlMGD??hV=d63O#op~H=CnFXI+eAbSZ(9#hEH9O`^DNxS#^i_3= zT-DYpgza=pVlbBC#R8msM#M*Mh1avF6vCLux1}euK`AbC4C>zua_VVQ2 z-lY{{E{ev57E)KXjrUcG4 zWN$WL%RcLTY^Fq)azWKORD1Z!4;tpo$1jL>$Xj78f`5x?3|+&#{$gFv`b0u)?KUpy zD!6y2XK*u~{!}97E9yDef%j5_mt>(ve!5h9!ZlC^t6h*I7eysMMHUKPTkU_$LBP0< z#`Nep&aeirJi}qbeA#z2!M_H5*f|MJcqqs(zXx)!qeg#(>k&9WT@z zb|M4bwUwqz^*l_Po_S`d{^J>PgG_;$JsK3fsO&JO7;jf%5I=T-1L*tRa?_j>=Ul#N zQQT{FD%%vLbC4Y%;n69_K!-Gn=3$Xc57GP97FJl!5Baf3mqaT*0C%euI7wwzMHJQT zywOSuat7aIo@o1=zCjIOg6f~}?0*c2y;kV70FS4lok$BUbJBz?i{wK7bnpsTG}{Z) z{!C-7?av7o;V~rg>ZMVVwgl4by}}GOo;nwMcFgQ;Iot{*SrDbnZ4393F{pI|HDO=ffmyU%hkv}juR&Ef(PCy)k7%P4VE`ZgHvxY%~U1PQgTBpWv!XR$N zaVuKlq$|PEE5VfJt_boq@l1y`LMQZ~)=FT4+TLDRBmt-pUy-6va-kCtO@fnq?U4#c{FMTjf#Y2Vh?2Ge9r02mhhc3h_~DpH5zt4Ng{lY zyLy_@V(xDjhRLj&e+tW4d6K(r+oC-FBg^kl_P?yb9;_VXc3_-k0v51ZVA7Ssp;KM# z2-4)~-@*mv=$Bcm^=bQ$9>NRU)%`$oMz?$3d#Wj7A|;)VxE=vbrrnZxe4OXpTc66h$LlzxVjGnr`(Jqt;VMcfXk!0tcrZJT+n}xj z$I22^s!midPp1_OO0@^+oFkG_A!%9`52*vY+aEmnfT9>%{-A zn-`-R3Y-CaZ8{ZlhsMPr#FMvh!obI0_&H{kIaxglm6ah2*%fvc2tDzi#ch=*mNGA7qG=Sv-W)3t_+KD2Zb|umVR4*ppaIRHVQ;Y2j@i-Ao=tf8FC(5pFma zuSg;b8DiZ|G5$wTT-MPK zg@l9N^*;Nh;WwlqV09D))K{ZJu?H1W>!esVf&Jx zyER5hBKI-y`+yQcU*c~HUQXlUxu1lexO!cJVmRh@w@ix3-Fgg8nr;Bk8w}WTP zX{mNP`4~$(Q>TS-4$UU5>?wCG)3qC@`kLkhF5Z}z&K9<<=4RPaHI{6*70#b-v?9Oh zaU7%!|3yh}%Got7txv?m_zkmxVmiX5eRi2u8WW&whpPw=S2tK)O2{)Xe(ddLl1D`n zaHSREs(VGmywep%zhMe^CxOfhH=ckU8J*a_`T0@)!q7s->QpUX@V;d&w~wnFlmKj6 z(MMWtsLPK>3M5?G5m;&GvSl8Lb9snE(d#lpu#<;Jw~IX{KRTUQsECYFT1CqaKRD$Y z0?kjD0SE!boxUY$?Nrgm%ag8soY!W^y49)zM~IO8&&q-KYv%|f=thr%u~U(Tpfx%5 z%6=mC0o=CLW?-;f3YE_+bUfi;169fd?{d(H{*_Ot)9F`Vn7xoLj0EEusP+1(B~iI zt8K81V2!o=A+Ljz;cDj<4=h~pXWOyFiMom?=3~NNcCY>!iqyw2#-qnm@U~{(>nNX7>PkyT~fk%oa@|EqN8x!`b zT5M8TF?Q!?4af zElv@vwCT*4tL}flM4!F=c?<}ueWbbYQzluFZ-br9^?a4yp7c~Ndy*+^Ur~yw{;cHs?b+Y9ZvMKJq(F452{q?8Z zD>N5eSK`aoc02b;13mY!jP%>6Vvdem1H7aId2?E=b+XS4iRWlfSPJv07*EjNC|#D9 zcF*d;-V(pC*p8nveh6jn2z8-Uz!Rl<)OGw7?4MyEmb?5J+Ka^5 zqU+Sr{95H7bth$#{*AEjBnNt~dc*B!s#F(>M5ECI`q3EZPvu2XeKz1TYOx9g@gJ-3 z-Uv#Q<0vg{^~*_t0oR0E4GssgPS z7>N<(NWmo`^64dmkj%u-d)OB#`uTR7nCOX8{D_HflEwR|}_k7aaL4_DuvFL%8- zbDudLtlk*7-qYk%mfPR1w}-wk1&X!Xw^UepYECnkQ{1y6WxWRNS?T^_Nzou$H5ENhXHEL zS;2LPh7i;#8AP#kRBbPfmyp=C8A}p3aMsDwzJw2-xexQd-%bS ziwxNcTl~PlxI|*AK3b`l>d&K&))ZC5{z8eqyq=V2;?0=8>eTv`6MoxonWNz#)IAUEK9bq zxV&Hd{IvxYoc34sJ6kQR+~9@)pnC$!Sz081wTG|$>H5_+6e%xMeG1CtbDb-rgeTBB z(CsV8+w}KmHP!bBi8^eE>D$?A`UNH*8yQYXz;?ZB%B^FeQwmj(i+l6+du<$_vyT&! z&6fwf()(G?TriL}?uVcpA*>c%w7x4#Vi}mNG)COqnP)Ln8VyLW4RTlAn@(3byk+CA zK~fWYSABj)JqN1Hc+_$S6`JXMTw@_ zB`;Zqd_3ZuDvMtLR9PWaN$iSZrd4td%|8Q(ri)u8ojkRZ2HXY~-zx+Cca(Hv~_Z%+@MTW=D0 zS@GP6=|`7qJHfp<51FKdX%2BI`tw5DyOOg(1eeKziWPpqhGKaZ0%``UL)@SCu#U|N zzh25?&ftKtCpE7i?R{O5O`PSu8j)P%B1Och+i=g4-Qzn5FcO<&Gt-UKzAQM;O{i6T z5-Lw|g)9y8U0!pKSiN#})VZZqP|^^V{&y;{Iob&8y3^ca41eTr3sd$8qV z~^gtcOnVPm$ zN0Q?L$g^2Z6UwcpBn^K9`oh2$C4#leJK}NKw@w=~MdTl0C-zw!hiql2V;ysaseqHD zcIsxiRk45Nf|{_1$QuUnf_ir#Z)w#m(Iy|*6?*Tr5H;;jkSCn|hLmbLRkozot^0+l z%`>Ax*YRMuzz$&>b?UxI-4ZQkuxhe#d@!d1wkfpnTs|jYVy*lq=%|w( z#eHU@7Mn~wiWKWb2Q{!iWRGiTJb7Kv~qm@{Sztg9--%6qyb{_ z$c+684o%IqFg_U&`c$m0arl@2WF5NsH8qTZZ$T~!Bkql%<5p%pC7GB=*LD*pR_3;m zPXproBedSGAoV!~pyOWbxxATIBlrE0Y_oZw<74#rp?>~RtG4}Qm|F&M1|M@ce-<-s z+8U!Kq36KU`fL$G7SeV3m*19i_|h_%$vm+i^Ro|$Bz}oZiSYWv66Jt?Kg7fm$1;Z0ps>2Sn2gVCiXpj zB0m$Zlfwc1KLiYzD$`YROV3QljU3Kj`@Hi>SVTa+*1k+__`!gXHAO}-Ng^s8H%r30 zXD}=x>G|zRi_o-8=e&m!7mr5QFZa10tu0^C26OXR82A;g7ccyMj?2WJ|NaG+bj-mb zK2Frv{$H%w$+s2VN=9i}ZDN1?yo?a!pm_bopQ`IdK@Xp@?c!Fb7Un(@9Evg4r1%pg zHXoZbVomzqo4D(=J?qef>;XwSZti;Y=gpsp*m5bE_%r{^3Mt5$u-^*~)sTC8m?Eg) z!YT#mnD4l_8J;A$f&MtT<5Gs%#dka)bh&|$ytMvf;SbBL&`~t?c7S?n1Ho3Tj+>jXjD!t@Say}^ zt{XYe(NJ031+HMp>mLmlhUQA20YAYDLtiFZPybOx{gTPIcH$gUhMOqLF)a%HMS<&#N1>B+aN>!_O>e@;c0KQczHi~4===-ioPgU-B+ zo7*rMW}bo|gKUk`|0YUUKB*b3>^2;R(TL|je~JP3vAhXW;^CW+fBHLJrisr3;lc$E zLGKAOXH+Zmh*@+bL-~1&DaD0+&uM;(Zsx-6%3Si_s~KJR@xmdl&J8ZM8)=r$Ahm5R zao5@U>&;O%PZ;|<;@FwhH{7V(Xiv_+Y?#|f*Opk7k3;>mVLppUrmy;E=Ubog&XHcN zXw8rFuLbc1Ssku!N$;SOtr3+1#QM*T=>}=v_cDotzLX3Z_DA8d80C#qO(wY6-w;pY zTl4PLq*a#dxvla3Ux}ZUSdnR(vBb5V$+a7(GtY@}nYEHl806O+wrvLQzzciRgCN}W zqBDFStK=o}0OFwNn8K0SMXxa%;by~6Po;IJKx6_EakvRJNtY1`@ZfS6+ z`H69A-fhr;YWESLxpzFq_rWJhWUh(m4V5O+DfTN+wrjq_p&+$U>TQ*|o69v&`aKW^gR#Tb-> zc`Yt^_FQ{W2NrL^Hl#!YU~qO*ebu|7LNlOxu6I@Ws1pK3xW31MZP~O2`jER+%T5d| z;{9Qs`)cu@EJuz5b-e|(2-O}s9kXqapH8wpPOKKvU;AWtzl8hxT^~USxNsS-1SUzj z2_16lJ+B1jiMfH^Y7+PnkxEJLc;^~p2Tc<^%YU}(&>;Y;a-GM%E z;|*N;#_n-M?i|{eAbcqKdOM}1Q!}LQ1_{^|2$2bavHl{n&FT>7SJ29?<@khnGN>Xi zxKHIvT2+1?r1k-*kNK`#5bEv>rq3mlU3uv8`sif-!kHscFY@!Vgc%!f2Aut|wrfqK+sHGO}sGYcNQPKbfmNhX@cq+lK^U@@{@L6fxmO8xYfC z%qUZN%jFd{Gi+*Wxr)VSfC?bp$I+X~>H^pKc)Sxv6coWS|F1#Jc+XHGcNG*3GmzzC zD@ZS^SDXaC+Mfd>Uie8o`Zut$Z70Uu`C299npgbYl6RChu-UqMt}KYT4gm|OXZm$s zOp;%HlOh)XC~J69Ux@1Zt?%2#{*J`j8X{1x0>zx9RIj#^tb z&2Dj)RL%mh{N5pZk+-Sb6Nc(%NvAwk617)f?kIb;5Z2Ok>lIT{Qy{ z@$;ncK;1WJ4Qg~@y}gc87GFr)sX(hk`}>U)X743DHBvjs^p+31jr+5b4{2 z_vBApUe)HHC2Rdp9{z}w=1zL-Y_{=XKHD|wJ~+5m`Q;>Vt@!0Y7R5VN!)QCFkfa+j?L9gKeB3zkb%Z`73gq~O?aFD5K zCaGnXaL~;6y^XDphs~un#*F=i$KdgwWG#{E)N)CbkTdAIS znWkeANa}8_nXyrm?2HkBJZN=;WKpJ+%*h4V(0vZos+sTu+rPPgQ&jG?c{@qwv$9jN zK_%FqZUP?2M_eRutE3;QLdJJ_ zYOy4hO|Q;U1^Ko~u1;s&!~ULP-NGYnX)H)=VkY;k6Z2A9k)!ZP2ZVD~$1T`-rD~U2 zJ|2ki;=uV7Yq;{oSe?>7K*@1U@_Qb5e-wO(V8heS2zOrprIc<(>BoZhW}AwI?rD7o z8D4}5t1{vL#bRXlQ@Vl2iNAUBE#Lxb<|Ouw4*&;2>7TAeQe~x51jd%BYPr48XYdp- zV13wwXlw2CWuYh+tSatDe?yH0M!Cg z6$nR(g7^M3rZ*IjAC8!Fuha0)`t**KPq*S*`s>w$qbJ}OqWN_5JB!(5XVx$ONeSy7 zJj#_t&rj5F(r>HF(iZIHSL->AG~ZCp3@+;(k8GMb;cANtcz7YR6P^s0;vR0e+cZDqi8qF zH1CZTrW(Qi-^YuXYI(n`LI4&{977tuE%UgWUAzU~)V#I`I@c#iO z)6Mapw$|8W;!8YNUrM;JyWtnUn;@Z;FKap8s_CA z<%k_`FgyJ?*v8FN%!3uOv>aC@y5t-#LCG$0(k=~_P=0tLp1 z2MX)vc30?Ac@m%up&WU;Me~`&2l&j(SaZ^9={gVbD-vOpgaKuWfB)=6dGVI{XWXQ6 z!^w^8(jk5!o@P3V0F!$T^HxheZQGF#>a3L}=ciomVW)g#i#I67r1mLT>9^O)S(j8> z%&CCYT7Q>5PO&OwyZxZhmvEWU*d8N6*(ppM_oP56cj`@8_aRFiu{q8<6I`zweU?{V z3Yd3pA8(u{&dQPwa_jBeE+7lfFQjq;$wrGMH-Tn=S;(s!nK7^kx_Sfj+QSxPkZCF+ zFSOEK_J|A}Y@%!b8#`!P;K6Kb6)Wjvc1IG(lDubtALTt;GONIZ>5rnj`F?kLJ0HIb z@(Dj8f^0zIMw;4`>`)hfdqzA|VqASP*1gXrdx{S5X^s+Vo74Me?g?fZYL_Gx z<4YKHFMEkRR#lz&4E3_Qq{xExWcy=VS0BWlC(9T8hf+2&@&ZH?@l4UlbINPA{n7x{uYVA<^osy&&w znczvjrcbHyvf%JLhQ(C7I6;*VD?-#wX2@mQWBz+JhK^+4wH2RkXe(3bATx&dz-Sp76p`io2~_s$#6tK%LjK8o3;a2ktY)LbXE+R3#>V}XESJwgt*(b3K4 z;mE8HXv&#PozKKES$r9vVXw(js^JN4hv6|NRrZI-#lhpY@9WBTIVG_~R2!G!vP@`( zoctYpEX{<2L`=Hzu?OZmTk0X&C8n49u+okGj(d`aF$cV7w~(a_ZDU^ylCUl&QakWE z>!nda0=e@|tj6^+g!=&7Hf!7JUwXlOoH=V_&xh>y9$I2V4MN}T>7{_lyc}U5eb#bN z@~gf3DAeiW!3feIrM8>2s2Zj7v_6>LZO@>Yy zk($$>EbkXP-!~5DD$PH0kjD4GLTI33-iJ*yKIJ$ocf>#vzP+x(p`WeE4++(k9>EJCy@ryZWDCbJMUr)4=f3*MIvBDA=W35>JPr#0fHK!B5e)-R6&1B1 zf3SttM|uw`AaGr3m(e68i(E4TJo3K9sc-!*-W;hEjv32s9)rwaaZw8%s3M|_(^uW; zM5%o@f&ZF!G_xj1K}sK&Lt!BWD`5!>vzEEi=ug4+np7i2Y}evDU4bD?t|v40WZ*(M zLBf{UHHI){eCRKRqR^>N8%>PbRMEF*@1a1<7f<@w%P8$M zkMJxPg<8t1s?`bW6kaMMS`3a7d*Bc1kh{xo0?QozNzz}JT}(q)y%F@`2SfPxC?HzH zc~z5x?|M7!fxOVhp7Ch+DW?_1ivbye&kB?Y`*rJpDzxd`7dj|30p>oN19aEH6b1h( zF)i;<_%^ra^_|l)fTwuEQvEWvB=rRNv+3euM=J>P(h=5(9#}5MR3I1TrJhHz{ULQ@ z_bm%d3KGqVjXyRkij!R@ueLIu)Y*a=St9+-W)nZqK$tzz6KtRU*)6aus&vPN#JpBF zk`&oc+%?#eTiu7}VsD^E$yr>}77ljLiYvESY7Yd=pEyyK8IoE~5nSr! zSF2sq;C370n9B<-|45B17J90rSoL$Lu^x`6RLVC{Ub zkwg4#@M`=GJ%}jm|A(_L6}aCU8`im&xMkJ$8};{@jNQ(7XI6Np-Kb^FQEx?SnF@>a z+FK{Xmzo`9zn6EAoIOnzPRndlM~dj=Mb(FarG2&*qp9~GN<*iebTC?tN2yfC>f$-nqBUZrSp zG+yr;{d|9`fM-1}l3Az?3X2(uruIxWV`MY}K za3q+jit3`k2LI%MX4nE9o3okhpI-W8nBvSgp>j9()~99Ba^3F+A^~Ovb>(*Hzhw80V(pTMq>!2T(>|gH9RycSUY&Z_fZLs2??d^N ziNc;dy2ck0#Vzl4yj_?%tH{o~DNXK5Gtw0(Q6^ zBUQ!Av;eWX0Fh{2p~@A{YgHdqpZuG88X*uYsPGqt!!=$WvWYouB84vB+e7wRf0-B` z-{HpER~>2s*3b@3h&b=B%c-7Xqq6y~Z}4mGt{CPrG6BTZ2A zHzt91bDbJfZhxh|Qm}O7mrkx`JzQTCBz|qZ&=EA#oVBNt3@?s@uvnE_LE#W}3ZS2n zZALP50d+l(GrBp`n(^ch5wyuj5@-fY;cCqlszZ0V)=|2B@^r5EQyuXlBa~U<(Ub@1 zD~-UBCjXPv{*h-@6+3=zpRgC<*k z&4hb_Ox@6Jj55u2S~fUgLfbt;8{dV1;YGhwAJ`4F8f9i9#OWLG*MrV3DL4Vx+fdX| zAR2qM4Cqa(UzJ!L*UW3J41J=rSk|jo&3d?<=rmQBY)Cy4=SM)p_KvT>!r4;aIR8bs ziuu(LoZAPWHJ(h|A9lmA1s-dxyU3S|->IYF%8bEo272xi)J-mUJg1BXojZ~b>eV`2 z_q<|2z3W4Tl-WG?Cnx2P&x}6T_YsD`ZSN>82VXl1ISxnp++(kqFjj zEHoDaKns2MUiGMa5lysDer|ntAmZ@lnHU2|4TuESp^FB4&3?9ut@5fN5#Ag=DF-M1 z2X2F2t2uS9IA;T1|DSgehA^*IeyH=vNAA3Q@G0}v?* zOpwvG4xBTao2bPo$fg%uVc~UQRvbhml*q`tBg{?UYMfvnAb5JQ=mpX;CqAba54=O@ zmN8Itr(~W>)H0)dwxe7%1Xl~tSWFnISR1!01`wFMjl@84;Hx|qq#^S`KX5^PG9g62 zzb#zcLu2M>Aw+(*@3oR@=vp?L;?$t{*$2Gks6bQ5QE7vYYy3>SwN~Da!pyvJ5`C^7 z}@poixIz|^q}*Sqtc z3O2|HL~iJ7%GQg@!K0d)&_#ICBb+d4a~~ zXRLc}z7_!r$!(>JPvDKj94z0kZbGf<;kX)2X$x!CQyZnO3+_l*&WMj^zv7~7he!7r z3tFW}y3Hl_le0r@s~U4b+ccD^7U^20i1W64?(8e2Q}QFnYp(m^wbOp}+vkeVWfq`S zJ>xk)cgCXZ&QOFbw5B%v>*(`)5vHesvzCP zMiJI4V6?ID6JliM=ou#si4=7MGTT^N%We8O2wE2g0eTrA<}f{rpdU~SM!f?Y5FId z*@D&<$EWP4J$I&}&^KRugVKjrHaHIb_LYKb9t29_4lcth++k=md?WKZSpIpCdx{YL z3*T_u_i8@5qXEGfRT(dMeRcTM=s<4=f$OVNeF9v%^mDKRs-Fc|SGctM=Cb32c4?)5p2|PRk-c61bBxZ} zoF3IDx;IhK|R(z5GUOwe3;>dA#UZlu*5+}5G! zL9D7#88$E<&CAZEL0ZQAF@H1tw3^X}%U5pnq12A3ug?!@&Fy%iJLv_gUcDFxdG1PzWx<{ey;%%W4O z%^*g5l5d&^tyU7n{9%>c__tf{P^-q}G$sm!2IvfotkGQS^sQg5e7RONA^Gr9zC6NF z^_;DwEoXdDp5l=a(NlhPw4odfL5IwjMKj)J<~{zQ=-}10XZgJ}FMmf>KUu93u0LDj z@9IuaI2!CB(_mm0;=Dmyf;sE!MJuKRn}`s*>5!3=bQe*#GBeJeWV_Zww-&+ivOfJ~mF~N)-7S*9wKf}e#LBITn#;S-Qx}Yen zf)p&;82y2czK{jGBVk>h!p5Uo%UISgDGR3GoMe8U)@ps=QaoSrpm`{*D-8?Z;GqhQ z&Ei}ln^b6aaw)TN(jUZcIg+<&nc1fMsP7mxE?+eFF^ywruNLMlM244!gTtCC{9c!A zj-QSeRu>ZHI~D4{K||a$8HrwcoVLS+Yv4Ssak2~Jm2CrSI@omM#PSm83#|#O*RM4( zp($OOuST=~{7JPMdb&{dS07jCs%L4iKK|S*I1|Dq@9Iv{-!@KgAVHx9rF?lj*ME3(VomSK&4t&JbXEuYuOp z43#G^6q@^KjoWB!(xQ(N<=)D|#Gl8K_dyk{MXPa|UV>-6`k`CLj!%XPu!mhlVUvl6 zDwsS9pCoTuQo3@v(DB&A=B2kqD>62n->_C$G>)WkUTpJZ-pZxI_^vR$RnHk?(VGv? z((2HZL=|eTUKh5NmPUsCk@3l}72DDsX=yfv&gFV}^g8!uT^R^CG#fEwiDuvG-&vOE z`c#qNRB1PXr*shn~xGho!#3Pcgi&f2!}(L ziJsH)Tr$-h8KI+P&)i;{8@GdFFa4q2BNd1GAIrR9w*SEVy7)<-`>C9Xkge}7hPI25 zZXU%)i@RUHX8C#3x=HUz9S4)-=z6`Nb$&$zo$c%|E_}FMET^H2WAzO{jh=ox=Co>O;q+J7O(BumONZ5Ch>yJQ4~Tv0DEt@+e%?b`h2H+Y+vnxIRWu+ibqSu-CI*$Z%s(q4)?v zDoM*l`moxu4G)wako2YvqYUt=v*IGpQu^ZPUpn$ix`${nDrV$e?Z5sZS7~Pq-SCu| zTDd^ioVikvs(%8HMCE~a9$rG^%{C#uJ$;8R&FP2f8{Ox;SEy+Y@OiYtG|p?ru1EtRGdhI<{!F z*T*pWOPtaBE_IyBFkR;JQoE^a&4!n+EF-iwzG-t@ggdT&OseYngG-uk4&uc!?$*RD*QDL^_WYfLT0$F{QZHv4ElYVVx@zq@ zX6wgjS9zBV_0#udwrV8`JzQ^kE8E|KNH61Nyo;n|ZoVUJhxI4scj;^gdm@)q?Q0Pg z3?Pbeg?$*NDjaK6#&Hvh{^xB^eAO4qpwregUG_R5 zW!FQUeJ9t^gn!Jo7kI0YTqoYeUC~^}djb4Tt&ULlb6-);(>ZS?x=xX{Umvs+m(myD z-LaWzt;a3=i__a@FjcmwX6_}mfVDeKINV)KqzCWT`o~YUc5M%Is_JUX>WkJobU$CO2;N>AG14 z+Y1xoi5+`YyVyU?NEn@EjpdJ)QS0Nbly^I2B;pd*AB)-G=Mu)(yArkTrBN(~6z0zs zq}-pB?NhdsFSH`oU-rO6Ofwtz(*yff9^t7_Q22m;_pN~-opjc2IQoEOf$l5$TFlAk z#-xXL_OE0#wp?D#7rlF>P}K*;7h^jVDg=ifafObN;%mz!@9#+b;CX@VwcKdRvxIh^ zcc+-zS7%Ndac-(ypTrY|HD(N7x6LnHQ=E3~rEHzuoB8Hg&r@uck;e=G3Dw2I0`J*6)c4myR@imEX7i)6kmR zrb^vcxE|d(!Q3BTS-R%MmnHkRI>F)?MePZ< z=ycEIp7^NtjGMzb`E&xkMVCfXwCc-G>r9WtKkUAj9H7XZ;N)^Q+ZnfJQ*+aq;d+Tf zjhy@0Pqr`FoZYFNCj5HhQ~1`iLlTPB>g+TO+|kF^Y~8HEMT66ky2Pq%=<)eV6i?aF zz@gB!2JBr&n$T@lt)J{`axwM(=g;H^3^Ca-U6QW-TqxXlP2js5eUfGEGoH$5x+d(K zt;?({gzR;z*4>rTby&fmy1dLGIwt>c;}ZiOjk94fy@U65GW4G*{eb|o# z*wOo>_wC-XV#h~&a`w(;?{{|XuYdD7S4MVf%u2Li)r}47Ra|7J%6t0y1$W9md+V*T zI%M$UXl;*+$I!*T5lnN`EK_yJSD*NA-(G)gZ|TqMO%%@AlYLQndUW>VXgH^UN?+2! z&W$s;Ceiy}QiFH7y0rIWB!~%<-+F9^1}&a`O*`0>Yk${mZ{*}k=gzdjUYp%}<0e-| zd>+46TbL6tGcq$1cdo5>nH)QTvTebQSUE02&vD&ea+1d~quQ{*)XSH#$_V9GKv2bPwIafHyx;!PN!4Rm4VALmrRC1G>%A=CgL_?@f)z% z4Ps;{S9eiWK-LDW-bFL<9P0BaDuVtt%P{HjvlYt*EXAtOdAZ zrNIl@%-_q*xRId`KXb z1SPg0F9&k443Dw|ISZ6D$_jiXL7fc95l}Wr&Jslgb=H8!??-NhlY^E9C}&z{YeBS- zv$3$0w2`*9lC-cUSV~%26Qw2P2v}=dyp<(*hdZRek1_<@906@l6dF+VL%9Iz&Op+G zKwcYA<_*qPpw<=T4oYoMPADk=;ebNH_MvKILL`fkGl&uaC6YKPBD=_kkCnCTtkB-D zp#wkY+jv@7gI5Hh@rVx$)j?ZxvvK!yu<-!38sKYaKEpYaw$a$BI+Ps~6CU?#mNCu^%8jNH83oe)b{TVZURY@BUeJUsv&4)enR zKtDy`I(>b4BQQugKpUt#S$KFTyScl%+R6hyikL;~=Z!s08gq6hE667Qa1iYoBg|wBlq^*na;uQwL(P1>`75zt982w1chR-^jE8@>d#^ z?&hzkEQDP^2RL1xIwPPc_S=j=5%Uw&0&Ht5d0SU^XA4hd3pY0>2Pr@e{|Wg2qU--RbFt2^O~6!DN!SOhJQmqxf$Jj5+DF~h%LOccF?tTx9=pL_ z0oZdPuX~Uc)ckS@R#8w?-96P@eRpG}z_J>Aao8W{y%=>@7f(2YM#C4o8ez6rcz7Zc zF$Wv#KX29O+gLkT{E_5V3wJ<~vX2ILaFqBm#4kw45UpsC-c4UX%sn0TOEmO;~L*H_1ZmW?= zMBi1#z7l4_o^_I^^IW~k+~u;kZsvX;JhMQOvl+Kav2gdz{YizjH@_?k9v_r*O54pU zS3Xzqrajj+_b8^hb|_7Z&s8X5*#XHc-P=OX`FBn7>V@Pur|l`iL?l^d?g*=I@W0?T zopJEcJEbQivy#1*hmu|}5A*gBZv?+7$$Ym0{Ai@MUY-AeUG5*+Mgpa_N117hij4|g z>=UsJ2)DX@8B^mY_4J`iX65(`7r8W42Pui6@7juMS?y0X&Md7i+@jc;d_uJ=ytIowLW zE=4-ZyL+E-CMUh30q<;q2)`hHa<0xLTzcE}AWnwmpE!g<6K>NDE(zx^L8->I-H+ES zkIKTMb6N3j(t^EFInbX;8f{h5o`jqKp{l_5>^LBNAt3 zj;&Ob;bILAvwo&^TNkamDSS=DY5umeTm7v_VbVOZpDuLWQWxaKQ4QElefFX ztGBMT<2m|i?`zAn+QCyj%DnLQ;cef9Ae(8y5IYry_qN%^Z7lOruJM@ z+rn?1bSmbEH}MOX__@?jp>39es$J^59AWA!a8aijqgP!K;>lyX-TFlrG z)^~)n#iwlQV+-4G?BHR(RrJgK!y_1tf=1lGulo>NW^-EFr$eDPZ032&P41>Ek;lp_ z29~2~_9m7;$KDsnagN0ntbWObUv>yT^7euVYTBz1*U7zVWBSHdVVHoBk{f&E4@;gR z5mN3Y?^1m3DyU$()+j39_UO&At%r|xCd&_Tr-cR4I-SJ|nRgls@iMg(#2zd=+Oz3e z;I{%3x(8<@>e+YfGX474+04H4662TESvxnK2U2a zGm!ax?}>_I9TMUa91ZuPhuFkhBje)FMjx%9VUjwzZYHI0r*^Qz`j0rq0f&Nn<6jSn zc(zq^#+JVp7j<`KLaUq=(=hkCPEWf$@oiXKO@34XCuXp(KHu8udtAi*+GP6u?vD&E z`RF|+1s~hGy+oA0-02kf%?7N@T-o5Ukwa&_OKr#2HdOK8a)(8R4A>D;`hOjyi$~+gyLAQ@&NiZ3Ed0Q(98QefOMT zJ8<(oCV~UW?8fYHu<^lwWvzpq%lt0?!hs3y^1HfI`g&w9V$t1vxRo#VW7`glO+K#f z2Vjp)-Hk^&ck0lkV~n=7aPqLhsOe)2;1b*kqppgEds2p5DK&;$^}%>(tcvz@_p-ql z>sxpn0H7{5WZixY9T+PM1kcrtjJJRx9A?N$>Zq%$S%9~eqj6xXdg1L1cuA4z&qD{E zC`-T?prscM9|J2ai~G||c83_txgW*uf4Znez~45}Io z%QQ8P+_`|SclOjW)J&ARZYglKv3!~3H5L>dE1GsG3h$RHC8;39)N%HuUb;6u3nQfc#f{fXZ*BWH z-LmZNwo*r$P2KCCsfuAr8aeH9P@_ehXXOd&hd3MIy>+9ZTYrQbr?vmH? zSs+%FU~*DKtoQDD#xSh<`n2=i%VV#ZT|MWph9)+5D1mgN$a6l*rxI(Z?~1hY$tRgLlBknu^m*SqcgMe(LSYAU_;bc9 zg2r$7iOH_=w8+UB85vP_yxvk`QYAZinIm^o|MSWc&zAV_<_AmhaSuvE<9gPo-M=H# z^S~@|%l)DwD*PYz^N$bt`PzxSIq!dcMf9t}n_E)1zyDS*UdQN_vBLPkoH0*`O@kpp z)xchvVMOHiL{P)3j0+Yhx3OI|q3gdZTbzi*pvsbrZPGk&jJdv!&2b5?95$t;O{QJnL9@}EGvSZ|7i|a^ZGkEwlIb;?|5GS!`m$H5a#bj$ zTTGJ4{GNvd(gmDo3(XZ)(LKu#cH=r37M;&BpzS6Q$a4SCZgcJ}VG-txiVSIJW?@yf z$R(z#9H%#aVwh036y-i1VU!|q3nhNYnq(F0EvBA`@D%aOFS(4fH`iPexm@8F6*_M#}Yh_2{kkzUcWB2(^T)|%giHBZ;*;Ljea(`-^} z(w;o&8As6fH@I@i(@ z*&Ft%VXmy{?(Gt+iLTAPqGEwv<#N(qOQHzD%$Z zuurmUGgr2pJvOmU@cpyF>(k=Ff^+CO`MK*y6E#mBt+9+M4nFZ_MWuwZ#8t@)F|9F7 z5^1J6j|=X7NEJ_&*%h_B^?_EZQmS++c*(EnMb14-GToBl;lrwxp zDNON=lC~noKYw5TKF74weHWjzw57C}^>6E6qn3@;+O?r&W5W0MQ`aUv$4^cvj(QDB z4!3p$)Q@HCKfV7#du+SpQtk5+JzV@eL0|g2F=K**xvTS-H#6HWA#o2lC+|$gyY23{ z9G0c(pnCVP0prYC(z;!O&sD}%BlR}xyb2JKEmAxfp0#t@PgIB?^H_5DW7SHFe2eh( zFpCh*mEk+X`&n{xH>GcSYVMTZ%6yaAwCGgi>&+4m*L|OP^%}&WX`OwYY;{HT@vg+` zF-t{Dam&$S#Zx0E-j)O}o7%#?-gLd3Ktz$qORp0BB99LqA0s~I8o23h75S9nW1_wGV ziuZe8`OOz^xNgZkC-myp>v8q>xM93eS4zrC!`2Idd)6RAQsDiJItZOr!DlFp0e~;_)B^b9TzFz4%J@jiC6I<#flH zN||kPzwa~EFb!!8+J40GYLBX)$%OgD+6)b)d$XCsw=DyTAC(T5a&8Q{SDGfDEObDZ zpq;_ze0|h2BgjjAL?rRzeLY!Io*j>F+iG3D(r&ust<-HL%Z~Rd#w$HH?TK_FNsQuIhEK^x3)oeoM1W{q_Fr2jYQmN8ffij`SQO z(j3UV=hvFrHG8Eb%`W{*#6G|Nl?OBrMAXk_-FIr$*zeY!IZ`yzH1bYX!@1#YWuI$L z?lYY8$M-Z&$pIZx`o-}T?2H^P?OR%%S`_8ZPa2}G(d?d$&5BzWcRFtRlKrK(@oMpD z3496162=m(6Kj$-CEdTwfBD4a$z+G*h7|3T%q#1!#9U>(>V38I+Ky`_*GboJ-&lR) z#EqGoE;l=F8Qm(nEqnX+9lkr!cWLi>-R-`&=U!E+Mrzi5$@?j3E7DG+qtd<7dmflS zsDG&Uu;3Bt(f!9Fj}tO@GLC1`WcpspWJh!~B`F8mq3-%W@7w#&oE8136QLI<|>ZR7p!V=Yz+*eAkp1+oV z{j`)+`s9two6Is|Sw=arJflLUBC}GqGOJ3iD!W>-I;TdZCcjpr_GO(;-J7=tZ>#IK z*EhV|^RA=8x}mGlsd2E$yJ@O9w1uJNcq>c_#>N3|Tn1*tqYoarc0Ck#RWcBRbR)JRW1<<*er9 zYIOjO2M=Xs=bYiou@sTB!{1$J&Oo!HI_u~ zLP|=5jVt&J24!6#kN)lEq^OY?P)Z6s!XqN0szcgOfu!)2M;;*}*J^=(Q$mXxIyrbd zfJKnH(;itO&fQfEEh+|aO&mO(Y(PD7fe@iQx+IS#VQ|tIcxx36Zm3G5x9TGjS-5zE zo6F$Q6nS86X%h0Nh#EA8gNq&5B$Ed^BAae-;|(Hgb^x1R{{%q2a||}Oz{Z#dvMuHz zk5>1ya6#*XRT^*%+SJC$3B2)I%?Ui%0EnvU5ch+1i49N<+@%D|I7Cxb9UOkYnwNu< zHSm+A4bWN|hex2L_aju1MIWFHH{OtP+5I}sfP=A(rzemeFohDU>Hu)C(dKO7egGEz zqz}iU|-A0g}XnXNx4klTv8#Yy_G>kf8v~t8N3F z<0FrT3pu2YxF0MP;R8Ux$^-&0+(!>Wn;4!Opr!UxjoTKQ~vLG#o3(tLn(^H?aqi>H;450>a`+$d?3VQ-e?Lz@7_~OJn7v(VK02(Q1C4HXfiB z8dF*to@HdhwOZhbE`Ux(laYa7GT?w`2qq%~!DM8> zV__7ca&izxP7cCA>m%rLau7^T4uZiPJVP*bbqJ=e4oRtl1D+v_mKLnl(vpF(3NsKu zON)#|7Md(FSt2q|axFxK$nY!;yBe54FsK(iLojJ+2nKmm>!4CF4`HBE@QmnAH3u0P z>IF;S6;ukIAt@+2l{8ce<`Lat27*DoAXf-R77=O(^N--91tF6$o3{% zlx#3EDy)I3z%yBVvUFtri11`oawR;I4+sWzgl9;K>`1caIlo>6;zNM2k=Z09u~n%2nKb8XRAtS>x zgnqc(4rW2+w5sAPm{GRO2DS zLqW*eLooOyiw0A2OCytqFw}aOg9;+TlN&13k?dEp=I~4gf?AS88LCFL2qX>AAsW;V z>IKgbfNU%>IamrK1HwS1s8K?39K0lRg?(D29GG>$1Ev6-oCQzpf&)B;jU4kS=*+P#eRX{l;wAdrMKAVLBF|(qR9O)8 zg<>tt6XjGj0U;8U3?Rt@OK5@|U;x#EUw}>oLL-+8QfV~+u7PL>EJ6fNXcOhAgn?>+ z6d*}LX5COk@KOCW1we}m58)7d0pmc^0U^ldflk9BPNPZ#i9+dqODPyXbcZy-v-F6T zMCd*el_*pL3J+2WBdQt;{0`kjMT0s6VCYQ5_f%PaPXTu*FhBs*Av#$NEe#xqZYaU; zHi2?d%K`elC{%F~zvBQp(3%{LAe^A9ezO9i`wzoV3<8mWOn?WF2#_HnGC}!puzLiO zkr^$}oh$?7OF(ociwJFi11ga@FRDAW3h)E14xj@X>Z;%)rwZbXst_OpXpxD|+k-4T zVhXajzgq$j1e!x~>Ll<%)B-7Bg#<0x)*zCwQ~;1dFH>6K56dhPLXbNWu2dp0g+`JF zp`xy(j)(ky{i@1PWnAF6-@$+ssz3^03($ra*qds1a*Kn!pt+!CKqr7815zCF#Yq#u z|4?YjszXg>)l`AYWWj&}>!7UwcZdSM@B>>lXx*TvSNr_7qAa)qAJF0fVT3D$AX@{(1VG2affu^&U*el;E@}$fJmd}n5pc&-Q~;EL znX~{WJi>*l8ng+BKd8#QD;7r)70#$(fs2b0wu=fS%co3XOe39LUQ>R$_Z&E7ve?!3oxuDA+3mA)(CJfMj z4-0A&hBgNFMw&4mwgGZnAilw?g8$J`L%5T5hK^AuAsy0R#{fX58Uwlp4`W}IDkiwr z1VTf>;RoUUvzr0>d=UIx^{eMWltTufO(5Zfr~uG`$p5qFq3-_@G|)1XF9>5W-h$4P z8V68#N=P8OgOL+)4b<~5A^>tH8|L3Uzi2%f9acg6B41hce~JWZM?#JWM0j9N*k!;r zgxFJB=7+W*+R0t%;wgeot)fN%HHCu)9<*^l6lo8j$;y#sB!a;c$^p?A>A#WKqn7{D z^2xm%9u6IF&y6fHV!(fK;qNYn=w!?PXVjmX4D3sB($pAOn8Gm!54tIGlcF%AxDj&y z)uZGN85s%?;9u((TvLT#Q1p)|NMr!3|F`Y}wlyd}5*u(3fejf1_Ppg`l#~0BA3+1X z`%ghb_B#cH8Z6Wl1`Q5&qm&U4@C0p-Vn9k6{?!Q)1jYv(A_#;aJ;~mQIr>FzGe?%cU zK!Fs}00Bq>XLUbyW2$7`L8tdyi2jH_CQ5}^M% zBo`(86C*NrP(-z`ni^P+FBk;pdp$S}#KGZ&I)qL?`6_qlg?J3ynzj z_@BE=fDS>Z;W?jDtPD5->EQet^8C%5kULqNpQ?ZyNQX%_8L||ij<-LhWbQwTU6%waZ;i;jzFkRHvKN}jNlWqQc)Gs8pu+v;nz8H5(*dhi(@_!CpfIc79z-?f~ z4*OZS*#M*ho&b5sdC|^v@$ntZuzxlt`5KJ&AU=@Kj}&nKwdm&{M*4cVeglStQcr-bQd5#D7Ag(7{|H%fi~j8zL;yLMp&ckqni9Z}`y#PS z;X{r_ve_05XtMB7tp6!+7v;W~-2nq21=1%i2xx$gj2>Wz3NhE;#~u=^WZ{46Dkz?S zHeL{(h&6t@CJX;Jpk$Ae-S;C;;SQJDs-*ewU93|kM?MTHWcmQ7sPLvCGzsu1n2N$2 zAXLqKGDHHf28YVi?VEpn|6PF`EY=3wIM1 zhAKH^p;T}q1S}bW@FXzs6MyLaTgZZt2B44^K!d>xNd5@1dCUJO0@d*ISJ!0pzXDy1 zdn1D*6v?4Mb{;ik5Qra(^aXB(=>N0Z zs5@qV86-f(Usx@|{SV%U#-eD9jEYc&f0!2jjVCDEeSZZCxq&ajm70Ng*Q za#;407XbP{`goznh_?xFlb7mHWbcA35G?u;4$w@$T6wW+s_?%!WHC@c{%;)jH>gzS z0`Al-HC^Cepv>>qMx>y4fh_!Q4p|5S@_($S>i!QP|3Hdj`Ne$vlNbKvT!cH&dO;h8 z?gKw^q(Pu;Zz0@&c$y*$C3pZjxd%sz|Fiq%b^p((kRciUUr?zo{Urq*I7DCAivMbZ zlcGOxCsp`AdUhTZ$^8Nc(SIrWI?XT^ShjP)GRr%~8LW zQ@Q^I=&z{onvDK$T%c(e{X%qVFAI0%kX>2eBCy4_n69u4e4u*JOYoK!KmwNlWx;00 zPu_*VutS5JzLcP$&a0`q|ApldzQ4dh^k0hp%QZm%qmIxfuv419k@uTBslxx8?f*~@ z(f?5O$MOX(gy;({L7wVHxO$=Vy3%0JYH<}2;XxI24%CyfC;)DRdP2g#rW7|y!&NV` z3{?#W`)BQGQ`aAbgh5v(Y6k7nbklWXY;1tOagOj=cSKI%9pBMf|(L(AV z|7-bAej=mK7g6m>eozArhQO@Se_Yp4xg+BUSgn$M4Tu0F$agWx)>Zq_{BpK30128^EY^*gcO59^j~fJAFe6f|B=MJUw-Q_Av)5t z1M^XaCpfc_2G;!tg`n*br64-AJnUu3H)|=#e{>l+a3Kyrgy^t^0|6m7JV4f+>JX%#gPj%uZYq*( zf{eCm;CVZEZ|GMgD8er+Mw|le3lu>fks=S-hDK}3nlyq;TMAaDNjNFp(oX0aD*fGdt|r4v5(v$eoCS6e{|fUD3Ae#B=W2g z5#Fwtk1-f)fZ(6R{ka_BzMu$-Ms*iVk!RfCL!p2Hl`Ay`jOK;^ll!Q|sG$o}#3w{B zX@TgJX#gmOA9AyqPZvt_Ydx|EMQF*u5k?gu1?FzlXs3`|$eFB?9PHv`VblRMpdt19 zcMl^2Qvh@=@{{V|(PH>i1k?ondk_2vn#KRMXTeV+QGN#rPbA6^7yK_C^3P=8|AXAz z!T+S$Af$W~zP_;YpnX~+Ivw05KF7p}mD_@DHh0IGV_$b1(P7*&jIyijiX)3nvD-02{`T(d;vRih$LG8T&(CwpwoV@mh)>xNHWPj-uB!4zjk{mN zHwW;7*7t;^7J?kRuj`&sZhk18;xkk(Z!4@Ln6Fq~IL4pxd0J(N#ko|Xy-@XV8%dvI zLtxXT{)^{UO)=2Wq}eeA4D2p4+#1ZiL5FAg5~Cab%Za@A=A;|Gb%um7YD6C2I#4p) znJ!TIu6DRH7stafE8;dR7`P)rcD+I>V`F(&`lWkgUjEXTzIw-%yQ}wG-YDB2mT_A? z_V5NeW7mg!TxJQ^FNRgqK0hbUFf}pZP8*)N`l~+uQLRhjORZIcVlgF#5pUgSwe**+ zn@sFkd+QrNiV0m<*)`^t`4+XUbAUNJa<$)U^H-m)(+cr0DAUslWgfx~v&1H-Slzf;?q6^UquC$Nc7cv2 zQef6bkjU|drFCEBSaJZ{Em7&b9$Q7z!?N^T6Q9jXIcW2^W*IE@)9TYmd)^REX`+LijJBtI7@rdFZc32IeFBLS0*wMmWSfr-DAZOk7frgS z3sg-f%Yo2UG5%9@#SYD?hhoCtP2ho$d_e5 zII#cjdt15oRA0h}{XL-(U#@<>Hu26y1^05f+hA>P)1{QkLD2@r?=&cj*UvqS`seH( z47!S0&~nbX7S!+wm5RPUt^8pyU1bhaRG{zfqR2$M&F1}qOov%H6!$Z{V2^~!=Fa{J zf40e1#j-IT3ul)dyX~#xEkD-9xcZw$VfTczPw%cJ92Y8E01|&^VWo@U=mZ z2HkBapWYiLQk9>VeMn|=knfPTlH~K3DvGI?3llCOE&Q|ZJhb#W%G9-(RkzLwjwztl z&uwR?Yc{ONp&K1WO}CACsKi>9y_;Y*+e0~PSWJni7=fOGTxMd_J>Fatz z)vEZpEnSit3>rDwy;0TfIm9TGp~QwcVs$bmo;b&vzJ5leifKY&81-sb)0E(~xB7)N zRhO=^Or8ChD$iTVx$&I&#$b|uu=$Zwq2-M&VaoczQ$^8BdAHn9K5q8$TOk+n{ry9|^@AQA z)jPv0)n~)BKkZaa>p z>AheczP&xP@n~*5->Wh^2^Zd&uYpX8r*rSn*|*^M8Ou~!*t#AZBPFfC70Z2iYs@Yn znqR$4$aPChs(x7h8_#PwjpY`XtF6?Ev^G4~D&@_5{4u*FL4xLu{>vW8P<;|fV(iMn zmVGl|R-5Qig zeT${j7~U7V<#YJNXIu4mIl1|k7V&q+GVl{^?=thy?H*Q~42RP0D+V@X<=4usI;O=O z71RCs(1sn6>u6W&FB!IeSpRLKw3LpW7@m*yE=sHXXkU-a@)23ClSkf8o@mmQ=X+mI zGT>Hy+a30?Y-Z)=hcgcSMD$9XeMQ^-8I}Bl+4)Y;`FWV%l6Xp^9VyBsOv51LK3pH1 zm!@;dZ0TFEFiVa|F0|{Yunkw$I-_9hrEB%I*MkpetoHLr_0z(vvXZGA_O+qUKrbn~ zA)|RKF0z_$6RY?}=3C66hfgyv)jnP4GJ_ZFw^Li`TQ0!u&`pyry(R2(V7jrr=#DS( zg~2R^OQv3jj4{UdjSk!5-lGI>i_ea{HGk3}cVWi)N$UVxv61Uz)0(e_76$90pLkq; zE^AKUGY~J*@AAfW+S2JxoE7tGaP`&1)Y#p#jV^Fwx=O2!U2y~3T@satU&H!HOxUpQ zF@r6^xv6|-#OF=cy7aG6yxStQX{}E5%7{5;-el@+_1HcDah~ptL@aZwGAq_A z-azxNx?<}Qhq6W`4|9I@Q6B7f7S__${Be;++0N{qRu9@vt_U64)XeVcyYy_PS4E#Q zjeu5CtvP8w>&Dd#$rCPa;ru*TR&-l4@vyB-eX4oqyo$udmNiawe2Uwxg7OYO$8icw zc+9oB*jL4WUY9}V@4qu?x;VOi&G`o7QukG{dUWFqx35;1E47zzsw}cJHD*jXy~8di zUV1pxXz!IJ1>5Mr`;zLKoQiKn-Q}Ut@PE|qx`SIZ1uIm2n)#kksTrIz}JM;{ynDcmE;Zmzau2-JknC~9` zH^(?E*R$7e4T!#3eVwnEPCh=xm$_tm83)hwbi`VkuxWZ4@rSkifnJYOO3pnfxFS1o zStg)+DCEV^+=dq(6-RD`?sKoO7Q6c;d*eV!ZqoEGe{+_G`&2z0)zc#Fi4LVZK z85^0z$vO49V(t;|WcbjGBPyzStw&Vc=7Uq;JTnGpo}U}+oNAWU$W)NUza14V?75|s zQpGPeUg$zwRz#T2uI;Id6qriZ&*5_llD;`9m|=1~6m?C4-{16St~M?z;lhd0}!AvOId{ZLgF9`5DOSNiGY zt!r)!pWS^kZR4h8r?%vg7*7&q*yr#z4#~Id6OT35SY{u+dQG_U@D7jIERo$8ju;#; zyVh4{FPrqWvvy?DPSU`pvG~;WLwPYFE=7!wv=nY1SGpnPbfoB!)U7zx^N)^kY@?U6 zIVqrLZqq$b9h|dF<0(z!Mxh7pOixfFfio|v4@8($x@`hK`BQDn9_z))&X9V8ZHw8X zkm=(sft48yQJ!`FEyv9YH!sn>ykh+A;7k8&tb^RIv9fwyO@~)rml|Jsr8Ss^NKb$4 zB`zh3MRiae~3-4na~#p{>%L}e}KHnB*P>}^`Jv)(A_ZTu>JjtD&q&juFv*QmJI z(dN_`?q!B_?NzUqIhAY`#=L8K#P+QG@VkpQvkyCd{-_oiKXcM<6}z9*8Fj5X1$BJ) z*_xgb`;m7AB<-q~0qW7+iLUAUhNO;mDDe}|4KSqCvDcmS2=+F6$dqxu$>2_T4rgz* z&Y|tNBXcezPP|o?J`HNR{j&+>V?6qP%&T29KZfl)ky!uy%8Ip;4xDD2?3PVjIs9;& zWndLIW15#)`Xp*1xyioqhH$0Ky>+)Y={Xd|7i>q>XwM!O{^G=&v-BYQaqo?)2?DCu z&aW%rh|Heb60^E+W?z5M$ImgdZTE;H>ztk_u=xbAi-%>1Kjd4kS;s+gtNK!FUpTy( ze)Bes{=nYXp6KJTcOM^Kv-r4uCB2Rj>jT2@7W0#N-CJ{$uue&l}fE}Qdo0x z13_@vHnaH9ds`WnEG5#_7-F;do@og=i+{!o39n}L)48lhKexH#ID4W(aQm9!yz?K- zE+x~sR>keSWSd`ZD)lt$@Cv$u(W;K6-l&n}9@N$R(qtc=2K}&3uD}z$;@I~$&B|z- z`&JA|4vf|()En*Cc-E;%x|h4-WZP$^C!UI})A!B9>soojt1%?o zCCk>l-X-}ox?=VsRwChRw5^Jpwz)#*#1OFv^SvU6(pI8$=| zt93Jbg!7m-vgc+Ry^rqZ4$KN-3@JOKCNC$3ReD%%9%lYPQaf~RgRFLM= zb>PzR7Nxv2;*Ep7UdzJvYj+(G|GvdJpDBWuHrG(IN2R^voHR#nChF4R){EamF;Wes zEut+_NumR&@z}@AbES(ba{+-NpPkE3?F#kXyYWf&s z?I)+rSJTSuuOz#sbm-cjt_%z*n&Ws8p82RH{b>BqSfhHW_I80iCQbdRH_dXNH3v$4 z6Q+5=FZeWtI2tpPxzhE~XS$JNx5B$vPRLfXWf`w<(z4Yvxlm@-ZaKa)!hU+@iSvQ$ z=TfRZ2CjDW3rMr(7`id@XnR3+8Q*x zHjsaMmO0!J6LPqHrN{jTa*Q``)iW9DvZoYU6cM_=bgCcm5Ba|IsAqr18OM`?PTdLZ z+?$l#$8Y3b?sKwSTG=SGcc;*dz@#q5(#r7r6IsI(Bwf_*uxUo26PvM_lEKDz%ZE?r zR$g>W+3HvKy6j_dtisMzuGj4m+Zqz@e!8r7egr!?4=u4<& z4*Ya<%c(}}qi^74qKb_h%5<|M8k|?%v)uihvDX0?z=knD74dmZXBkm8_HN*p!j{TT zLT7iNH?}{Zk7 zu0&rNb5S@Mq>O2QkhY^Lj9npWy-c4=YQq?5TfS|4zQFE=0pZN!Bf$^!%Xj7lYh!X7 z+SFH+?{aX%?#}GK(-@Q4PM zI?cEkG%$^Iu4|nl+Sx|kkef5*h}9Fke*Nk9efQ!He00of*`=IT{w?UHP2YP|Re+;| z%vk)ccEvq3b?rVPHHxlusEuz%3!kTI>vEO1wQ-o1={Gq(U=Xlf@g;EFa!^KHbBXGR za7=QP`)=X8`4#SSUSrNWGQs;K8*i3ey53MU6jS;}*yVPv3X??Y<*au#k4WEQqPyyy zc=4$=klyTT=Tf3(AhSUkJIUdhf+Ut@f$h zdJVr5rqZSbE|NxKX&F7iEM{wx_O?uZII;X*|Exi)e57gHz4o`?%d*Ft`0q6b<@=my z<^O;xPfeXNdFmzjwf{*`t$EOzrkgEK#tbuyoLA4ew5_nMeAMhH*Z15xJm__El3)9a znLSd$t|cl%Ro@Kf?gl@b5lD4v@a0NxT=~&1zB03^iPmB$QF6zIHmBEqr8HFytSJVK zJHAQPXU3HCJb9tKGCY$;nX}=>xsG_}#Gt`Oj(uNFv}OhjHof2pc_+{nIR4eA(x-pa z(~l?pqGS1k7qdye>A7Y6yQjWb?8pd-@OPQIW7N|;cH$G=`S4K759a0 z60?$=;}6|^5*L^qdS){2uC!>1F6W zW9n>8ow~Vt@ab5m)~e(|(qzozh_Z`Gieqi%@f)7JsZ`3SuK3U$R3}#1b)wX7M`7`a zch6lUpSLw1X6&$z9ww*SPF=hJPz3i&>zQzNrRBT|7;abwt^;-J3a-EUVuWWSj6 z$!SUTcqxC$i8SMc#8Ab& zBzf-1tXvWQsX8Tt49O+aLZnw8qo=YN`nNp7j1R=IemD>sntR1l?@VOa93A2517hWj-w8#IXV&*KFRr--A)RO-x{VB&$H^;>H=S<6QfTw<>>g4L6IjRUzz= zk4b5_uUz5%f=TWDEsunV)%OQX`@$7i+?NW}uG#4;8(w6b{x@TIM2UN$=MVDq-HCw}6x zefq|j+Kc^l(Lq?f=Khr`-CaW#7o=Pd%Fo0}?W)=B|B2BapR-}*1)Vb&G;Ta?SFz2B zIBHPeq;&Gp`=(l{sa-=84+SxgOuVPIJ9kcJ7Aamlm6h;xR3WCceDB?TZL{AWy=kAY ztDdg4uCCxbFtwNFgxtrY$+F)~MddD|FBO!0yJa@+rO+)bAZd5JQT~Ofx7|~XgP+X| z^pbYSZPS%YRJlIdENVP?Y(Xe$iL1CZdnT6Hp1iAm&13YmnVKU(QDLe8=BK52=mO& zRcyn*o0Z#P&_@(&N5Zd=;j^;O)dv~NOXI#B3|3x?X)9Q!o(_$;JcmW~h0o{O zODreq%LfhiWp69eoDIiw>p5ue;V@~Z!%5egXIqaA2Rzb z+1vdR4F}Gv_61?5MF$_XfvyWtkJWcqBBGjA-LFrq3?)2mjqKGUrz8jE?a=G2^D0Rx z-ksr`fx!+Yp8jp7miv|G=YOoXeqJw@KvN@I3YIT(-qy-ItW`!YO!QD{JQl0x&&OOB z=FeW2&eb~hi2uGyIURi1L5l`djHRf%d3K%({F<0O@wtdO=>k>^yV(CEp3Mw&h;;E> zL~=gZzRUFJmM;w$XO0F9^ z>%q(Mq?<}}mEESN;G68X>r-K@yt;`$4XJ9h1#@OThDo5bD|f~<8^XYrVa`tFGkj|q z@kG3wdqF$!_GjdFB`M}_b>-~)(?j4P^1_$Pi=&xGYaoS?IXj%PpT^%4eG0~lI<&I^ zJ-cDd`9QwC0 zG=}p@YiuF1aZ;slM_id~dg%PN1$O|l4)gv@h#$G8!#WW5-c~YPhp7GCc9DK;;y{?Z zMd0Z&mTJ^Q(`@mdvB@jlj-^eXf4N7H9iJ11Pzh*F@4maN&jF9FeAvK~46D<2`(gENDTIZ~1r*?DFoc%p`H4y+issT+ezH}(aN&&bZ zY25sT8OH^IJPIBmeEvQ1x;|FFiZ78n8`UyM_t`!DWtn!1176peQwZ)-ff&D*SW?{< zyg~URNsC|cSn*Pm1A26YkR^BQdGzOBTp(ThXQvg_P2|u*fr9&*Ats%Gx;8vvPmVbk z^tx07hW436#DLs|W?JUAaEhQ|bC)gUQ-OI*C5!c0XU)T}zjLAd3S@Aw-Np$LQP&j`hevN-F27G<@@J8Y0E`!_@Z#O~%Y zZ3F9nig0-Z%Bn2nLX5_hQ7|R9aWBZK*7R635soCh*(5}H{F=zaJ}hMXBcn$ebW`yl zma;Ro3f*O%rG!1x-2=wJO~c~thZ3q98>MM2<9nA9Vbw74ieHB<*M$g!htXuv~9fiev|L$w&By9`X+NbY-Vy*vFG*K z?k(SEk;hH-;n7cI5}qqgBO>-xrG&U`(uF_oHEkqx`;|(In*oPzT!CLJmf#mgzKLs+ zSXUjlhHccRsh2nf=8)qf8N##(0>{H7gtM#dt@y>SK?nQuTP~VSi3Jd)*v9>`6kxUG zmL?$1)J6PbRJuQ?hKn$&0_y?RaOM76T9t0lYyywh%KP>{7q%12*bRUXNY03{j6H!= zV=f6pn}vD_Ey^#43%%8D=@+r)?~}wnqw#Dc|53j!-%lbT zR>MMKRVD2gS30YaQQT_S4yBVyfe0Tch(uYLIze+aO`$0?RxC6of!eZdF~T+^MS^n- zi!{kk1`LCM9C!tm*^CV5KtPLKz0C~dVM8^|vUmw)N_Qst*QLm7Az>$Av~5ubtd>=R_72Im ztfJ_#A8e)&U{a;+dX(gU_Q3;*4RXFiRQqMa33Be5wsQk%J`r6LTp!H7f>oU5 zfMD~*7l(W+Gw!x`C3Hh|;e7)4*}9|k*p6@P0pm>w`aHuB?sGHgBY<#K8nVoj^%;$Z zCM-e3GwQwH1@@ijID(yrc~lr~H+kN|281=4rMhV_U9v)cls47ZP-BCC#54GF$gWT6 zYj=w8eYwu~-9Xkw-m}*dxhTzcToB&KzKhGALII$=f|YBYw`)E~KLq|6{G-smkYNOZ zmm=F6NHlqWNTn8a3Hy8dHI%Z`3Bkes_6eBjKJuvYW>t z1)%r%d*8uQEknh4Ez4a(^BLqaF@O5v&g(1*vM9ktnKNv-Ur~ZRFA<*zm83mf-+EpY zByS1zq;I3TKHCMwSangyI897S>7|9DRq;aoIeDNTnF)Yrk+RHs)_CBEaG(9#kkgHa zKWoABP5T1N!_p!ug^_q-c?0eTR~mI(ap zaQZIlZOl36RLe+o!KFjxZNFN3;M0#(vP$R^fEbVx_RQy^d`qtXnOYoCt}1vCgRjsZ zuDWZ@R>=E#g&z0Fd?rBZc26iRl^BI#pl4h>DzGLjlEPJt~&KP z<4dW`l|xIGR13lkWH+j>wJ_bv7zf%V!}a~Ss5q?Ndu26f&{GuJBulITMYY#xK$uVy zwv66SsmEn(u5+&(s9SB(mSKPSJyhQ2DIFTITs= z&}dPtC56nh-4>^JAQG9>{q%e>FV&+_rx@AlU|jaNFfd7z!eaap4tQbTm;6vy`LX<} z!-zW1pT)5515bNkTots7jZ3GyMvz&2faO?aZlhP>Ne!ARduI|~scyZzNsK=jkf(#^#vYs9s!u7($(mZJ5JANwlx|Xb>eBIex@Z4P{&$DJNc zCzNi~=lIZqpQ?*$Wkjh&Fd+B!GDL-0Kyn==I$!aAajR~M2eQsRI>mCrMtKZEi9AVm#+7zuTCkD_Q~B-2DPoN*+7>}~3g1vQ zj_}4q2V)RHXpL&X+?u-?3ySJ-wpwveb?g(1i0K_^FdRRsNwDkNvEiB4_Yn!y^gyWi zG&4h?@iFOwLPSJj=S-$dZmi-VQNiL$$g@Gw3l~ZsyXp;fW-Eq!bKxkixSBY^#=n-r zG5Wx(Xzt8{3)d%VF-N)XP|?+0lDQMB_H9w81{aO@OeQ1CRPmHTl)00AqG(CS<_EH| zRPwMbXs=#9%c(w`<@}-|)addWKESy!$^Us8(PX{kiskMCB?Ab3lFu|+((!@sZd=On zrp93@D&d;r!S$owwN#Qil?81t^ZvjvM{mJWw~GaL=#NNrdm;W<_MTm7$dbLyaz~iY0NIP1-7G`ZV){=guI zbU^EZ)>XZL`RW+rjX}urMVMsI#lgcu{wPwx*SG%7cK~U8Uaw*-M8(tf2#Tw!3WP-2(W?e+A z8o*St|IdnIAY9TZc@%%|pLkvRJ!lT4@_~A(F1%W<&Miqjc;Nv2!yA?=>~buJ@`=i5 zEn_jqgzT&|W~rW4sX-K166cv}UK}BS6{rrtdUKQ0S&4KM{tn+%z}PC!$&4kY@G$|9 zzyu0|`@?VDtE%ejw(knQ5hExVW}27r`x3zwdOkRQ=% zB~S_c1S{}-IBWYNJJs7)Mh$~>^!Fko1NcqL`ECU~#}FiXh#y0>8eIO>qLoIq7}J=W zg+JUNen3l0f6m}CgLU2T9}wb7-B}Drme&d9xIl8bn1!!3Vh`AFKJ0X|SP6<&$l;r0 z5(s6FxRSiow=kirkn_gaGVY}T>~Y-%DWlqqacnD zb3P|VI1`*z;AMM;zvJZInnZv6DV!J=(6n-6yzMb?K6jf+LAd(;q4i=2stg%|0>q$k zPJYu2a)SM~JO`TtgrEWnZ#JjORe z_InfgK9{%huMjo>rjvpGdFo9e{0qv?loZH&km!{tjyyPdknFwryVO8%yv!IDZc<4; z$>y^miqqRN%S;m1fbUKqu4w_reK}2!f|(Yv`awp!xHy#?#9+D5G#)*!t2sR$Nq#ko zBinHHb7nv(vK&N!2(UTwU?1jG=bl4q+{D8#-1|KGw|60pZKC*K^okfRX}%O{t%SN!iw4~VwAUu^eqU$17rXp zmx&`{^{$>Sy_x*AS0gzCxLX3Nm=Fdn*eXIz1r_&(p7s zFgswUeg%Xq<)zk-qqo9b8y;t-EEXCQZ2(hGU^Bq2;$D8azvr??%L=p45FR=^F8utL za^KhB-$KJ*B-W^fD!b+n$Tf~ymu^CIYx-n(F8%tVTX~gpm;6VrVL?+AalK0gj&&7a z3az1__P$L-n|CMq zt(Kr5&^!9u*OH6Wu=j~SU%EK9_oiCG+ypbbYSgEF)%&20p^j(3k2&~xW!^SGQRvih0w4{Iq2b7{aa zA4eeC8(9bf(U|xINyRG+BSJ}-1JQPL$o1Q$8i(}w1S~>s|4n99f`ZRcfD${g&aB$` z$-X#^W&|9A% K=F)Gclja&|xwaD?utpqWN0IR-KrH@?t`js4%fA_z87!gUjSSu- zAlHOOJ>JVcNaHu9jnX1&$`SxffE;CF)D{3WJ?2QxSIYA6QE`k|)zU10?Qlq>HgGymGDxQTze%HIj0BXn}+?uveoU1QT&7N0XC$i7)fUntf6I z3Bn{$XkW*Y(qb2PuvRl2c3@^EibGtSC5+h29U?&2I_16sf)18g zRKgH=FlW(d-aN;`amqG}f(J0OnsrKXgclL*hf1(WB9#hEF`P^A-mL$YUFP}dOtB8d zf{Ig!*3gwNG|ZW|Zy?Q}m;72d-xlL2nz~ut#k#K5iMZ<8ZEWIIP|r^Hz-AoXsd)5P z3VU>i?JnfH7_L>5+5nA$1-(`osGF zM7pu_9B= zbI(xz$1~spnF2F?)GvHd-eF2M+O9w+dh7%T(Dk|Iq&g+cIe*h2yVYn{v?@qtBiTd3 zqfv~44yqTz2^}k6yQ1>}} z0_(v9)IQ?bqnKnzfcE~}ECI1BRgBb%5A6-73mr*)Y50%R0&HYOMYo-4 zBgSQL4aFkUNaPACB{B2F9?0)0fs8x_L)U%B;R%8JOSqW`S9G1`w?p{@c(OXHO*PgE{Xr{(oa zv<7IM!V^;C$6`>XPH=oLg z)yS)yg_koqo(`(U)(LbKOzDH?C^u14nY3kRJ=OIrQ8cpDijA+E6`>gLp8DmT<-W?P!70jK$ zpSzYW51bY%o{8GvwPkKlEe@QD*rZlLZK?N36tDro7fRhcfcyr4P^duSGBnn4yr_E7 z(M5Tg?vx*&Y~F-0o?y@SPBvtYA?fQWbpHVvWZ6zO`iEas+TI6+h>n!m_%kyHbIg;^uW(FG7w1B4F<|STdYm|am_GQv&Qa!8Q zkuRh_+wvZHitN@VaIe!sYhbK4Md>Ka z9&%{N4LwRi4|g2LxxiPtYEofKwawaS8(txZjBdKa*(jUK-lO@nL@SMKl(~(u!`vvF zdXq-xl&gmE+7(o7O=AKFchpmR3(H1hvvjEnQ>M!j`)?O&q3`ql!J^$4PN^DS;}fPIf?r{$cS%Ys zMWo^Kq;ntpwF$CzwKCrUA~^4}qW}HcDclgc!99QURJcBHO;)XE3q6-RR(vO4ZL_HoPF9)7PBc?u}nw@#~ zxVc$`sTGeU{4Q0oV&N=knta?Kv{-VM3hj_VCIw%RQ zW?tdI+!=2cKEH$FNQ?KGLFSk##7$w5?8qzfXcznu^QA1r&6tnPhDN(Hp0dn0EmD|dtTtYrxk0MpV)_`s6a`lCo}I}< zrPrlbgBp?&*Hf0X)n%Tv^=S%t_u^$K+7OzTXLiMW{R@AtT0uy?g{pT*)o=ac0b_!~ zFEB1Kw|lwyp?YZK!mU*4+iy3e&&!2Bl%rT1OualD{-H?Ku|V~-0iGB zBI4|+Q#@9@eqZn87ju`!gyNfH;#^V^_NYlp<)KqdUiXPRcaiGi6#h!9_KfK&ZADI# zRji^5ElG?dk;_eF#^YkYGp*B(!nZN^KGB1@(RL22z~=@a(q+Q-S4E}F-A%w(k^AsF zF$|6!X-M3ndO(nuJMbPA;0ZHqO*5}nrmS2h+07@apQos=?v!hV`hxRHY}v|o=RUE& z`yQ5oZW~3^!C|YPhonDuPP3&}=9xa>9Q6rPem({L3EB&})8f+hSuMy*{5K}+@l*N_ zq2v{=CYSaPu9g@! zGcsgUpgmDc{fqiC(kS_%{5T96RBLKwpcC7d+?@4tu;!{YS6#UCPt_wiggQj@a^`6x z1&%(8{-0$GCA9yJtEJc` z3R71kZY)oGp`_zth%`k1AS7;9rE5rr&DbGJ<0Fx>f3aDGzvTiwA-oJRs5n?It#|;E ziRgI`>mpe%&vuintn632k*nVMqnJK`JmXA6%*a(~$25lrrb7w3Gl!bD=u6(y$H5aE znfh{m!io`j97X5L#k+h-Ealq{uFANEH#_^Wl-Ba$>bv9Rt_OSWGuxfT3mwO6nvBw7 z``hLA&<7@8p=SFwbK?7e|L@`ZceJU)*`d!moE3S?_~@aJ{=`w?Wl4Rf{dXl(yYE~% zN*42(vjW0p?dR~{$8z9^&dMxnPlL*ID7a}iv6G}NQp%jPf8-UX3RM=!o-zR|PgyBu z)N|RjnKOTts;%qx<&5{E_K@7)#LREx2T;V*t)uBS;@5{|b=PCW(;>WYqhrl@qB^IK z#9(EcV$ajdl!4X(3RPznOiMdaornr#3G1rAixsr(J#oD0p+=qLT?VNMKpm4n6iP-^ z_fmNXh+LX5C2#^}9nHU)74}{8?VL*&+$v!^sx0tqpmMc_9t=21ku0&q4)l$R#i#0` z6niNDK5A=DQHJj?6zj?9N_r&RjOwXOtzTKvR-3fxRj>m~7F?D7Tt9^}odp2klXJaF zTMrJb5tlG)SheKz1yX_oeI8>=KIn@nVIo!WhI+2tSe?%@qzjA7`$f-RTTnr%<0{`- zs-b22H~0XZ6HtzlLb0noJgrZcuhzi`Il-z^P)6_T9BD;d{*L}G9|4}m@t@UH-owRf zu^^^zXRGKI7`?5fIV1qvbuP)b4h4?Ml!4A}P1o-=vAj;+j)>M@?(mB5XW4T>Kw3B- z0C!YyNGt}wh};a>HYsl3lFU*H|Kg!ss++We%KE$bC|4?oH_k43%FyTG5@lDK{|2DQ z2&zb6l@~FtlCf+2?ME`k95qt zWW(%%Q^aPxRecHh~G|B&dDT_XX1IC)vxPr9v zaX~V6lJjgpbcu}+7Ncs#IZJYjYsW`VXq3rFGgSRD=QuZ}QudCoIK>gPFvxR$%{gN6 z%+Xfkl2S%a{k8PJQ-Q^4MWq7rBT>(YgxQA$7fo?QoqU!Xuc8xg_70n)vtnt~3y2vj zD0D{b7CvGgi~V`4zDgMZBeN}@uDZ$>5G}%}`6wX7cR*1c4w&&lT{6d)bKCsMW?+^B z2!AoxqTQrYD!a3JHA1P{q;}j4lK5RG%W6c8;#JipTh_Y;Su94}?9dn8X;)J|&?{R} zTB|fjMm937?4?@9@D)*bozPhehoeNljp7_C)4Q(h$5JR9=!g~IApcvG{o^cfz8=(W zMY17{3{o9@x6nw(yM;hr_mY+K?eE_Xs<&&+IU0BTW_KkRwD1oG7_dJIkel^*aaDm|0lP zAdm;ts~u@evwDdp>A<$YYp2J;TU<~|C1RiCK zB-gX}vgqI3(iI;^xE;mlt&nwfi&&!Qp5<5;E|T+v5Odac_Ey~9D1&@UM<;$j)G~aA zTxGJHjE60o`)+YL5h|TJujCYk$0*^TnKX}qD`jtXPyxqeu0l=4tmz{ zr^JRheLG2@1j#C&oF26zb!kdOjGM5;W|~@zSv`ha?3lfaSZ--j*~xB(@;{ENGtOIM z1VmDm^Z-ei$T^aYW3|%)g%~r3gg7)kSt4=yNl=0NAodg^{#Lw@*Odxq_h(_eP{CuU z2)9`h4cDdnPqB!=m9C(%%I#q5yiw3NoY&(741CBXZAT@d@Y3T{rvx1pDr|<&O}#)C z{FsH7vTK0!nL-!Fjd}_I@6i5(DFv`iu7&ITIRO)6={G@3mG~&;JsY{$XzX67P)FTy z6I%h=Fzq}`_kj<~DA#^-*G7%UtFLZ6!QmZM6gaq2wn^@6O*Nr@C5T_rZ^)`9Q&nW;c z*JAhO&Acj^&yQrQ^#d(0gZmHl^N(7k^(VvJJb*p$n9cFCm`UT-C>1dsJFezuvmlb7 zj`P2~*6hQV=79{RiT&uGWqt{5mf~kStp|mqA1MXv`B7=QmUaOQViz9hxVR3p1)BPI z6VCo7Ip*r$d}YESH06;iS7ti=%M;1*&9UHf#OnAzbx{J6`%C7$C|R(1B+b6sP3g-& zwzl9>PEWD_SW)C!U{MhxK|9@cBWrdE3r*ucW@n6y5@*WD}pGvPWZ4AA#Oz<{YR zUL`em&$QpjVvpP9o=?Ie0P-~VrE9_t`US1X(~F1`P-wZB*9r=>gQ z-4!{x)jNN?&HZR?{)*C{o5w`QD|fkg;p=r+Ci3|AFQ~YE4i@2YqORuuV$DXjt>9Wb zLc?Mm^W*1bxBxr(>u1S4Oe)fdjUQmd-?AyZ>emN&*2|(Ly$Jy23B+(W0 z$H^V%QjAXC<9@-*jbBMi>pvF$uv`lqL{e`1siro5*$A0zXgU7Nn^Qdw`muhxxSv1W z1XbG(9Z#D~Snm19{|Kb9MvI>hWW^Bf0z=n+a}$~#zws-EO?kTWM%H5_LF>epFGtWbiJYJED~Q$ZwTk=T$z`!y+8E3%K_(#vB>2DMbm9 zrU5El7%NbCrISv&^K5I|Yv;zEQ_$p&jF4(0{~SCzbtGD&F)icd)K7+*CI6B}vO?~A z6Co&@)Cf{?9STKnz_q74MTh%X-h?T3_leIt{gWo$$m{;=!Ws9M?h{7#h-StSlgMzo z((@K$vNPG9RJz$e%f*}JTu-?1&P z?YNKagHIGoUlY<9C~l0WR5Wke^`L7lnHf_OJG9~Rc6sb<_U%xQK(aAa2-mhF-&T!Q z8(YG$ife?0KRXse5Hk_szk+shHBM~Oot1SvGK9DQN!03|UK4#dK-S<^8EE%hqR7(% zUlVzSq(q76L4qS$7+7YG@nG`bC#hReb|}6c9xh}(ZsOfV>z9FfE-ra=Uwcvo6m7xQ zCr1Hbuy<2@)H)+W(xJMqcU5?);sb;^zsG=WST*~5kvdgMPxQ^>{9vAYYw(^dhK~bu zyaY4}R3ADVvaFGwPO{ujEEm#Vdu4XNgnIj29zpRraTu=nCrP*n>~rcouK4GPxPacO zLBP>;L5JW*o0UTr~(hTcg0I;WnM0%)&Z!u z*{*CL%I*w?_a&okS;+GG$YkEanFC=D((|*pDJyU~oZX22<&q~9d{VS*T*p|+Jtq_F zVV+Tfwg@#6l1ct+5J<8gsf!)EFc2T>hd4pfZeA4>5y3_)5aVL>2xD3E|litOG^_^p{26xPJ6l_h157B@{Iiki}vPNDqr=tT>+P-vdJ) z_(@#4H?Y!eM~0mF8bze)SG?WgcjPy)+1h)~Oo+L5esid2x^*55;@`cK!WSpNK-u>6 zIS|W|nU~Z0e0N)zAaIwESAEQ}GjU3-{yG7Bb8uxL&UhR$I=gBoOBs&{S5|eW>)X>i z#~{4^`6f3p`2o3_14KG1f;3rN{3SLEc0Q z+%D3~S+nQmt&`q6SL$Q$A=U&+S9^Tk5WN0;2kT}@raZ8ZI(=Y(FwL%O^O+*l8sa>(LwR~lVp5M?Gy)LtawTy=-8N|St94+# zJRAM-k*D@{2eqB1s;}1vgGBmX*r;O&&_YCy2K=uHqIG2v=-Pny;+cxMt*t=Bv<}mS?GB~OI()}d$rV0FPNg%i0+K!U)u2J+Q>URElM3dymgv(`ifh>1bqQ21JiNT>*?Aywu9?V{j?g`ceF}jQM=Sn)u9bjgc1oE!GEC{RA9~zd5_5prdDIT~PCZpkqYOXCAF_DvO z4B>!WXf^#L5ys?<$pzSueRh?~nXm(!@tpBw<$Eoj4&wRDtmG_Eaki%${|B;RXK@_M zRN%!>@aVdoq^h-N%REG#LUpyX=R#mXSMRU{z3G^Zuc%MU9kYm=fheL_6uR*_8jG0A&ddg(WXUcl|3nm{W2VaSp2UY|yE2K;hE z;d5@a>VBD@UNLfMmb^>jp555G{Jy~&Pd9%unT&U4ee<3aG4H`6U6^%!MGPi=w>m9s zz+Qg0oKs8j4rb5bu-tLWq?!?|HYgg;e@%4p=H}q_>`-o+oju0S@ZRc z{zXvR&7n6k1YJIAtT0nNK|PCE1L`m<=>8W2(qUK(SXmj$bZ!TXKx3021!!8?eMtTG zJsM;Ed$P{0ccmhV3<0>m+3gg4S^7m}fln|06qwm>a*ulyhI(N5;4l z_@ygwfXZRE9^h6>$N2!qDaz37j^k=^i{~+j11C#_5Z?s;Kfq*K+Od^my}|VtDVuP6 z%C$#$vZ9r{4sav1YQxS<2Luf9buEHNa#qMo1^61AV)$_Vyj+AVk;4r}hc5@)%Q#K^ zxz0Cw@6HKk6T?TtM$|F6eFc*--nqlmMspJ%FfZ7P=qCy_wy&#{1Wm+(q&TPuASJ)l zSYBJKrSBw{-)kCE$*ki{vH}?gCIi;go21E^rioIb^+U9hoX^7dh(jc(StMlma_sI2 z-+6VcOX{LCFE)iCTg9b7x}Y1U$8ymU?CeY(!oiES<-P^vKgcPG-5r_?X~CWQ-5c6gT-;S1q3!$BCB z%wveBO7dyjmTW+Ktt2Tg`Em~{`6ElLULiWASKd;utwz?WxXOG^8LYS>k}je%2B1a^2v)yz-LIv~&A-<2Z3vns|^? zXV-cGS#W+KnH@knQY5hnGy}{`R@K0Sj)~vdXVVqeHQ6U__0B=6l-!*q+siu?msgRFq075M9F9$g1~#3OQg}ts)T2# zhpjcA!30)gJtpKg_vYg81kj+Vwe2E1GFbJj;~+X2eb0g0#;$#i+eRj5lBj~^@Di;( zvyT}OYxeK(m=cOsS4%D{B&RHZOv6IzGsC*@7t8_kZf9W4$;8bBchWUoa$XDG(@e>4 zQqi0{FF4Qkd#JcbCg*}_O!^Ts?UX7lVGt2pu*aAUyOq$aoz6o;jPtdUxBQ_!t$;QVX zn9pp9yGW;~Zpy<-7uq|{NiO;v@Sg2LrV_NZT@gt9x~OnX|Ld%$dO0!V&Nq=N=gT0@ z18nQ8O^aX21=DfHthF64lJ9#+u^|-*U6+TaJOrjx ze`X+$?Jl$A|By#;yH(NzjH|KRyGFWKC(OI|h#A*kGqSh)3c+D^fqyTRMkm#(;n;ff zY4@j2zQ1=U1?UWNlg50#OcPy^VllIsnXFAIVWRSS9_6r>%z4qn*ZpGpEf32EEZeDuPVfMXEK@7GU$;pf?? zfElVh!QB*%;b|ELq|s9*nLrf=Bt92IJ77niI#yhWXPMAnrJRc!@u5&cy5Sx|s%z`P z2w{>7g#j|E;98dZGYmqx3teoWlfACo}5Ka`> za0OcAn6!(CrZSRm$mF$1vaMQ<)~Nd95I+DYW4!{wAmCI%K@0K+TWEEp`=AU0*Qt6L zMO?hdIm6E_=TnsO*5~ZSox!{f>EW$8-)s;q=(t8u|uW3gkbAkk< zZyKnQO^9 z>bX$P3`qwO#>VKrL0Y5}J=PkfO|B@RHI#nm+CliwBfLua;wEzTDf2&(vfT?KjaDB$ z<1^$m0rp+jmpK(xxIs8g~LpD+$BS{CT-VllcLsUSDyJd*VrP-wR7R>Mx$sbnhxc+*AtcmU*yR^?P{#_BpJ5EHVwc6pti29<=f##g5UR-B8 zeN_tfz7jTn8eAOj_%PEjuzMC9+07C=AYi_PiOP)Nlrr+55>MY6t?GK$+hB(r9%#8o za-DBDyhw_<0GY@$CgFOWr5z1t<_M)wSVU~{4ZzX`jL!i}$9uIb!XN!tqi^T|1R=k_ z9K9*PeO_3wPBlc$t2W;#f6k45y}?u<7cZsptH8I2)|pwVj8+ zLFtjv9qS(>`cgB<)qQf|sNDk@U2a4m@uKB~$ZUxJ#hvjeMv0;Fc-`==MXknpNrNNPF95o-uy z%b#fnNpbllvv(9@n@A{$#K@QW5j9{huyXS1*v$&u=Hzl8!mC6W`sCg@wvZrZakt~; z%*0Vidfr80d{>g5CQpGpDJ_z5J2;4AkMaR?Uq3Jr9cW~Gd&(5AOSB#+Zqic_Bs@1C zicr7fN@wR72(A=4;8i~iuVC#tQwZs9>~M2&z7f)fP)DlRsWus*B37yih|vKEN9hPw ztax0jc%yjd-PBPFf?z_0z0e=7@o^SIK;+p~*Zk+^iH~jFPu83A~%**pPhtJLQ#} zxjnCBay9ee`WipsYwLv;zlr*+Erob!aSVjnvdj_+o3Mi)?TmCYg1!@|^LdQH)rrQG zJ8uxbRaydH!+#1#bFM%Qy3?hW!u6B8W4({^hzIFcsRb@|nZKUmF#HS~wUr!z^$kY( z8at}IrfucUyPFFeeHj7O(YL(QNYOcbMcI*e7r%7~f$|FJyO+xQ1~dBx;e(NRV=~c4 zBvhNS&?k@P@c{XI*%|IN-Yn*&kD2}m|0OmT(tfvTdXicJ^5?5>r+(8%Z0G)pDN)yhlvdf>Nk=?QN^Nm(@*kHl_ahN+=Zp*SIObF8qiY$E zGO(D9e0_c%l|6rA=&SQ(v48t4j8ZHJ%WhXrnjsu{!cdmfJSBzCVz+2we9R9Qg05f+ zH>++QdKdbP@0ore&qFgbzUV-nFaH8_prrqGL}>u;x`yxaCXN4&Fv9QD3KK zffK~H-v4Ulz2G;v=yU7^yMb1v$Y_8#eFOe_(B35h#|L{Gj64cJWvh|~y=n2S6s_f) zd99JAOK=j+eD$ne53?1SrVNz{u0!Pb@UP$A@!?-MTk0L-y9iS@yBdUZ{Q$JYk&5}j zZWuJfV~%ze`f&0&w%1>o(%a5J&s~DL$_9;Pmr|o~MestsT7~JHm-nl6ekhYLnZ^9% zr2O!h(B^tSLVt1DIY`OE*Ni}p!BISS8!X%ki$3|*=wXFP58v1o?P-LaSVE|NQy;w? zUKAIiTd50N!>4j)|C&mR`{(f$=)ODCMUhSV{F&yN(g5TM6jY_dKi!UrH1YTn066Zg zG7#POeJ6%Js)Y$l9ExiKkxHt&FeLa_2*Z~P)fbBZrR<6`);J8MObp~F3D1}bK|;w< z*PnhMJxRW3I~;_<9^L=ruXkBof-EA@7SzZatb_<{akkKKILk98sxv;InXYTEYDBJ( zI?6jQr>-jiVd(NqlpdrSM4a=`S)HwVKTFw0Y1M!bcMgw)odfR!r(UG4vJRjRRuO{-bQq5ENRrwO?e6kWn`F95b7nC`HIf zCKsHcVYQ)_?1aP=NJzWGOpV~G9AF?Wp?cN6|(#Dq6YQ=?Am^8A%E)%P}L>Bw>J z!f>uRzv2s+LNfJr7iKD#rY>O)jkfxdl+yYNWfnv4FO*D@K&;^osg(fZip-r4vK9}J zM0U^l1H*4eEL+WGjJQd2IuH!W2GP$#Lzmz_?&tBJIr>Y#K;!W-)IK*|3j+n`w9v-I z^F&|_lx?3H8`r<6`EW}AkG=Pfr}F(D z$C0dvwp1L7C~}6wA$v_RFpOuk(Np-o3fLHM9Llw5+OVDcU|{=PE>lm zdc7aN?|+~BIQMnk*Y(`b=QZ#9xQ!K6-0)jiryHw8s83Vl%hRrmGeo7atX%GO|4Z80 z2<;GjO^9z<^i25PMrZ_Pw)uX8zU@dSZ>#mYy_n#$ z9vRb2o!eGOp3Aai-?D>7Z9*u|*K_L3a^9w6w{<7X`iwtBr)q>ZGy83R7L#a1bKzWd ziC2-zR;l;p7P#da?d!NUJUS|bJF*(T^X}3{&6lDt{3V|Fxg>JqyEl$R553+fe!|yZ zSWa};_p8AeqoQlvIowk(nN~gFn+l~{HvO{klXw5VCmB=jVzZrGg(-(#ug@#C&OiLH z@`Z_s$+bP4mLd4BV_NSO_Hg-IK5H)b2$Whg-Y-<{U$J~5`wRWE%-;LjL;Y{?DQAy* z*l^zDNb&S_{H&3W<&^ux$+Xt7-K&5F$E~mY@Y7V$h2^>XBtBhMJD>kWE^F8AmbO8$ zCZn$jhBtK_*JpUt2RUBalcVHow~os#=6KAF!3nPHHBGNlp1*g{8XOjyNEUD8%DkiY z@LK%t?%s-yR7SsHdK1&xXGH~rP9$5N^01T4bVXM%(;4_D-%E}ih+(*$OmlIaW@@XB~uCFULO^w9{M%3OCMi4 z=QbC7NKM0WmJ}x4Q5?!K9W-_Pm@#Sf&Fi`twnBx3l6+?p$MTitftYVtIqgd9(IU)x z7B)rFYK9L*sYms)J^P+Ow z78ZJT%KHsX;PRz@$Bb8>rAua5f9iedk)+M%H@Pca8=`uh#UT@-Fv#}$SsDyBl3 z>k;9{pS@x@$+m)}(_}C_p;)!!I|FuvUyWAb9NYTkv}=MD*+c!7_(doeCt@)=nDNYlBSsCj6 zY|>1uv`6r}g9~L>ACP@OH6$$0=7m{#Qt>3ly@g>nacP<6w-F_oP3~7MPDP&OQQ+p; zcqY(hIWw5<`bTIFV7ATCREio72;M=ULOI@*|NS@m0 zVz_)Q?UF#2@(*iwDP$`$rGM(>nh9W*aB?AO94fSXWm{vwu=fG?t1xrY%434-n5lV} ziflI)e;7=?InpGmPI09m_*Y#1OI8O@(;MiITw(}W!;X_Zp25l3sfgL76euCGw8Yq3 zdBQ?bR+%<}f29^9{iZ_3!uN6*Wg5juTESI(3dio8JT)1}$r5yh3Y$PYR!#3(l9eF4 ztYY07?o(06jVqG*t21OTZrv=+A5BucD4;r7xNZdx{&SEz`xCk-jOy`O8a3+Y5hY3- zTY|J`s6|=Qbi#wy?tN%WLoFLPSK#j2>(HBhebD#VZ0N8lhDFP#t1`|hhle_x&wWF> z{}vv3KCsoSv@@Wfy{TJ%*A4l5f=fzqIj<`Fnh)5qMwe|9Z&qGU(kNP57FW)l+ak=M z(>}i5L{=`jML}Hu<8sxCGeg7TjQQH@yn@<1rIx<2s(*U7N@-B!c;IUO3(9WGrkcY- z)s(Fn+Up9U^_Cx^J!UvseQY3I^d*D!dxjU!vie=lq}R^4xlcd3ZlK9;AK-X}j3SCqyvdHGU}Mb?iy?>-_u9#MPzVL4Vd zAWUV&h{9!Jn#Y4dfsY*}AHu-D_aMm7T0d~+D2_E`l-A)F5H?L7#&?+B7_E)%JR0J5 z?LfylrkigS{q~-(=}%q}e!5_IdmQJ@aS?e{W22H@x3}Dy+e=Hfjf(7uS9T;Emp{4n zk<=rS`m|=m9(>B|Hr~9%{%G1V+x0>&0m^ie8HGs$H{TaX?Z3QaWa@x?73b$UV<|s5 zpV(D`uk2!0trrQq-Nvncu>aWAIgKCNE#x9!QP7Y9&azvGKxPJ(uy~=v_ z@YRkp83wC8%T$^wH*75{Hw{(ZntyJ_CsF*7joTf4tWfO7j)`4|PQ=zeTJie&>)RHm zcvnWh9p6#&^@Uw5;!eE|`aguP% zP>6gWs-+yq{g}_-POgs$kyg}MN1vo@Y^;~6Xa14l-9zRhU&5Bv9B$#~@+Ate1$`VO z%GQQ-D0{Mg1F+CA$f9(n8oa5t@`0JBh_+?DXXoSwXm+Na6^T<8hOrPt+K{C){ z%TGK_rM%<-4ZYl+Iu-|>&D30{&KGeCCDg2a#;AK^@Tt-ns$&w`h4msSsrESQeIlYe zTwQMGT7TIvd`D=DfJ&=S&Q-Qeq1CpvG84G(l0FwLPxonXXDm@sGFbg0Hc|hv+Trjm z)FB^otvTxz6W(n5yt2Ca&H78=|J15+_dN09XN}CS7yNvNwD0COt8F_pIM?f`(r4@c8wUVXMxk*R*7?M2qwo+4?3&$fxvOvS5H&g;&`x;63Zf81mL zku6p^dF5VZcI`J`>=O^)zkgiBRxP1KP*uq5O{bTh@Dl5**fj~^bxqO_Pk!7Oab{QL z7#ep z+Sz6Qs%MuR?rzQvk3V{5s;VNa!g!@z=BdNdESv8o34Y5w`Ci0Xe8TMG%>x z^$y8>X8AZHsC}L(YSUR!`Tmu!B%IG^^Ew6%LFT}?Z^J3dQ-<_dv z=g6GYW|e)#7r!b3t3wyEWv_RL(l(mSSF1F)Cfhn%HZp!zGrYtQs#(@nuUp%+v*tg&>XvCF991Jn(a>-oz z{eyho%H<9Tk+HNUpB0qqO_0^zql7ta;>4%1uEUnSIiD&c9o!8zni8*f^dx9Zi|B~93uTC2^g zxvh8AY`M2%m(ALxa%(DW&R#A$-k7y#mE!rJ%e~+3>lHe-ZEXxY^13U6xShwW!{AKq z%jd;84JYqd<-OmVs5G+dQN~JoA&gP_j^!iDM?w?WZ1=|Y%ZBD`Z@4IQYIs;x1iR7e zgdW~mEE5x)wgp>}q-MEV-iS=SZKboWE)I)!XVica@px_tK~&Ql-tLF?)WR z`PALIXR`lZyRxm<(ay#u)7-%F)yMO9O<@lP<>Pd$=8l+-woHxnk2MZ33g;hr+|irW zTYqT$nQhv^{6llOMh;E`Z(n{Y5EYvmH{&m6zqOT5#!+ml>P!Cs*M70QdJh?nfNvkh z>b^L-4qxdX6>g50rGFjJ=Na?$>x&QVEd!aoaXk44bFWBGkIjA<3t{Dy>5o6swS5NH z#Q&f>#b4jav3)>TkQh7p^^4{3HVN zCHcNHqcbzn7us6qCa<-NvG(>>lawx;tCCrFVbr6b?db*<_Zfn_KtOa7Y<*p`+GZR^O=c=5ubsSbyWn8QHFcT8UPEhM z^Rh{McT~Om;Dpa_ZfkfDP_LjiEbph1wb6^3^WZ`J;>gHl$;=lrOPNudjq8Ka& zriMh2(LO{e#)*^5B_)Lw0KA)xlOuSmhy}l*1RjgWV@Wsyjz}aBaoe%@tyt_<0Tjx~ zgnH7zG6k9=`*JImo}?1~Bz>Jt!a`tl35&sF!THC55rqO`U=8`e0cGKVar{w+ z6A}5fj36Qk-jebQ9K=G)e$XRgiNIz*!HJM?c(Gr~u)s*bm_NZ`31Z^E;$lfy!f$+m z0>8;e#Eam5rANf!f1^jl5r5N{NFe{cp{!CrywRTMo_|$NYauxG4Q@iIXMCeFRG-ZBqAn{RgxDYf%j?2i-1?&Dr2P& zfxuvLbu)2sL*oLx&l?Zl=*_F73Eq!G1&?i1?%-oXWlkkQg`*M!DV9nEd`KV_0wtCp zFAj3B3{PbWawb#+Dl_mE0(GJwCqiX`lEpw1l7`28rTvbRxI1m*Nw%*BZoc!Gtf zkg27)xRAMph>4I1QPfPx#7x|TBxWv(BZw0L;3g_fz|9uWcB8@os@_zNfVu;a^azmG z0+e}xvl*y$qH+PH7F70BI{<_Y6%}kBa@x9(3OMoysdzz&5N-#Nh4=l3S9L5*(B812 z13ze3xS5!PR|H}3hz~RsKwERRaB;J-a0RuB;H$ZZ+#d*Qx|mzIU|=tyEvzlC;^O4) z>}m*1EUc-Z;z|YrS6U`k7Oofq0;cQjY$2=w=-WG4%{NlWi_D+=<{<)JL`+!6-P8@j z>uc;5Mi42&&A*aJQpU^K#LUjZ4ZOj|%EnQOXCSYD2V-L{#j~HNfz@zUu&}mK^>MM# z@!6wm=3{3jZq6ek%_Qk1;pO1$093_zIoLb8N_a`}n83bC0_0(_Fb@U+akG=+K|3vd z4K0j7pO0p}1!1wq{6#DuZp!dNjOEKUN4lfdIKbLRi?-({qO>VTY58l`u|R9MHfET35(D=d1(RBx+jf6?{-o4J_g*Ct@9D#haoRvwFNvcPo_dF`X%mS`ITts1Coe9XBws1r;i=0$KdSW#htyr-lL+gX}^{ zgJa$(^EO%V@>*pZdp8RgVP$(jRMEoB$=pJiysE_E#If^hN7a+Tdg^CBi88lLt-&kf{9iuLe76?-(?}KdH$HayF7Mk$kM7tP zaX^J%V2t}pKd-58h*|PA;acw|7gV=fujE7-10$*Ai;zavlGzp+%Zkhf&&=BG0~ z6Z;RasFt=ATzRwf(U`t(#el1AA??F){R)P>aO-GKTGpGlnOodTYrnSbeSWF-*4Oh= zH+#PyJl;yXC6N%}(Q}w5la*F-&-&S7-c4Ni$+R$1w>^kas*1?QzHPYcs%gga?SaKXDIdl4bhEKxXqH z8Osc+9hY9%P_3MJfTM}z8tbDD3}xqhF{BmetL)QZeqc?K;}I{G9p85(4zmo^Mzfww zF;_fzecSe)qY|PTz=9+ivcw-26L)mrrR3RvA6 zMS51`icxnpT|ZtSAEU~!`?})tyL-x*i=Le;S{GI5cp*wxGX1+^O^)TenAWpj+}%9u zzsrgFJ-&YBYutm;<_yF9bKsRB_IdPe)rG=}mgn~-ov6ww7I=v1`S?wtKauv*JEEun z>%LgCmBE7NW=^h?6lG)b4>HeFPTqx)lMUGr8o8AX`oNF%@=pz13~?*n7S1|Z_KAwO{q&f6pn%xS!Tymck)-MlISc{8@q&v%goqJUwb8>69 zasng!+`a7W_xUGZNE{Mp)K#DDlH-jo*g@TgJzy2 z-d@>sJ?vyv_23!|^`W?`C)fv^`3_OoVvaI4{OV))(fUigRMYMyxUQA#+aGQ(4-)nb zcz)}k#BrfBB$34X3Hp*xoVa!xY}Sq_vOIBnTLf#cQ|0(b(OB0Bl|2~E-PMx{cs6x{X0>S?_XLg zRhW0(kF={Z5FN}MI&`}FWQX83!Q~D2&ki$hYYmHzIe+#^<{U$BVnz;I)=-Q%)VpidA{cnrR?T4a6 zAJiq#8o8wHx$3E&PVzsgweLAUZI%5Q@IM={qH~qsPL3Ws?@?hnzNJW$c>?!V_EO(d z_2-*4{3nA48ecWb&@fXy`?khrks$+igyjBT4e8=BICQsekBNf?|85g+uq%fXKzm8B z6(_vU73{!aaL5kae2{0 z3;fu&17nk?lZzefu_?RpNas!&y3}+qmL~SD7Q*rx!h7Hn++J8g4g>e3G_}YznpzrQ zJk*iHxVgAn2QrkDa+sbeW_hCiv9ALl)m=enYeW%mAE}t zx9SGC2FAt5JqHF_+nJJaJFixM2KTIEK^OR?IMIm-@?xfJW9u_Lu^(1=!iy1DlJC8iLEB1N! z*!o!So0s@P_O9yvMtdYvpiShGR*$noPaU z1t}#K70Cy1z213ZGBu_^>sDKJ-G$1Wc)96iP7X5N`=yuyz1F5yO=e}*3Q>ip(iRSN z8OFSvqQZX5-;_U5?Kg4DTR@E6%_Kj6baYhO_GZg--5RmUYs(8{2cEoo?$#1BWPGFo zAN{BzF!~E$>VvzYUmhKZ+x?(4SZ33EqfHaT-dUyT^h&?M0Cbx?0NW{o|zlZ_^Tjiy*mB#izA zX4A(&nun{)<-}{Kr0&oQC2Vp##`%!bo~FcjC;O7TB7bML@Sw9rjDsr9oJScS95Xat zxjQJ-m`-wODu#hajyY_Zf!y-Q?H`wZS1{#Yc`8&pQSc7cwqv@HYw_|zHB5Ktzl4S) zZmMzoJYKW+Gp*b5Tw1@S8gi@&0|{5KG<7DN_Vjs0`48F89MkF8=*4*dxLpTd_Nv45 ztVKzK(i7ODG}5d_L0daR2L)-^IEqy^uHfcT-l8g@9d?o1=f;{IWx8{F&1GDe#ZMoU z<2$EPzU*R{%U`XVC6}3 zr6C@r$XYf0`D1UCn&g{QCd1vLMKpZ&+&Z_ZeD)))3%7xKKZf=Ec%%%k5nub}g6j|Y zA6&%ll2DSfxiPZ0jQ=_RI)S>2`*lV4$wnk}X>Gsr^$qtI|1aymIDA>f5z(c%?50KS zoAgiV+)V@4*XnLr3xD32yY-N~@bwKny`Q;i&(;-OmodSzJBC{;bC(qAKX0faJ)5}t zttH&9%Z!hx6O|Di5w%G)&weaQ%_J9Z7Ns7oQ7PBO-KEsEdF_c$W#=E7-`9J~(97RT zXLq^E;&elgJxkt|r=fml{H`gy&pz^AoN3S2?j_X%)rWQzyLau%cIjv8XCG(wysGk% z(M$XA($vs#!!}x{vRE@t>v*d+V`@A$IlaxFYYsCfF?aJsoKpCSTGNPU z{-PHy1K2lDRN+G0xm;4%Bd*p9klE#>I zuGy`5V|tFwvSyzq%SO>=e`DVwkGIurJ6`Xx%6is+v30X=zF)fEiJ8Ee+heR7vzMP+ zZW~G+`fB6ssc18t{u`>u+t@ z9y`=Ibz{A3tNNb1h+wlyeNTW;bQSCx2R4xjBVcWFIuX~_Jc%1870Y@Q& zDueYh(#k=Hg#8J4XTy$bLD_OPa`%q!p_|!E+M>_(L}o%ROkGv2+?QLdRPsnj_Wo&a zer^%bbfJ+CHS0`@OhO(8nFO$|3)vqsz*tZq`%pH=*uJQh;WmRo>6x$>s)CQV49%3k z05NFr#`=xe>+091KF7TtHiXXG zL+FQsJ6S>)R=eK?~#mGRNbZ46zQg5yY-T~r@Ga7h4WW$$3}xlq-5dGdH3P1h-4;%JaVvZqykH5O z{(gzgSIWg+a&5c5X2~h~3I>aUp~D7>1_6zJ`+{wgzQ}p&emDNUIYUwE{%j^svZ?R0 zw2F}m*6jiJD^evAxb1d{sAOz(xH;yQ;peU}${Tm(fx4K%D!sI1OXX|V+YOf0??{$1 z?dX)zSr^`4cBw2mw>Ob3#emO~`w#&Tl-J0@w_WJWwtB2j8hrI{Z*(uqDzMai}VBe}}wMQQC($K& zBz4`;yYc)c>1OgRj$5a1&D?gp-El|zPHD1Oa`N4cchBCVx#xbb=l;R_H7SZI*$;#s zB&M!SJ^hgCq5H!xkBlF^eXRbtIE|F{Ae}coHe*%BsZ8oj@65q0>#UA!gY4HiyK;(i zcjji~?Z~_Rg!@U%(=|`e<}>97=g$@R6pR)+7xood6@4f+DsC>(FL_hCx3v11`m^#f z<+76Ja?cCOrOKbYka&?(L8{1lDf%+Al31BhMXbuG7Ol>FCH5-2M!Y8XwdCvkTAA9S zI>oxOH)?NQ*6*o*{dV8mhIa?wbu^ead~URF{MO{rG}Ro~vb5z?D_iU3wvBDq+XdQF zJ48F4b}DvOzSnu*{K4!)??=~<)1QL7Sh_BEb9EnHAfCw+fDxqq^I z%5$22I%-B>CU;hSwq?#?ZVpV-$AgEb7MZ5QeGu}z^6&Ouv|MaFz@7zoh6PSg7ffOo zO!(#0;7xFFy9~^D(L3*QYT#}c85Ne}FgRrINch(ZJO+pE1i_6V6B|bh7d;CXS9lj0 zhod~ALn*=Ih4;8S$lE)a*=Nk5CLpl!DleY>k0|XZ#O6TwFQ7uJHR76yu5O1BqK5;nXd%$ z2oYMV41T7B;n%dc@vs4lAO-t_Vnm#alK_Ta0OIP}xY=8PdgKBjLVk2f0z(qU5rpBb zRSW^#Q^ja$AQG84dVrhD;L#KbU~K{kc~nFm8pFoX3T%=|03DG{H@NWz5mar!rq@3K zQ0^Rq%`LDo=89~Kxk_LZyiFW28eo+M9D^~iu(tkaza%w~)ur9Fxs)4(d zU>S#KDyN3S8_B!d*qZ}CnOXp?2{=3gO)x^JB8xsi8E(8Gg_|3Y9x#Ox z%c%iyu+ipV;$jDjeo_Zk>RLEB!;LgVTf8WC2N5G84o>q~G8J7QA_63Y2hSD>fhVOf z;MoX_h=?c|U|w|#;2cj03|z<|bwneuRD=%z0V|7$fTyXDGr3CJ9Xukm&(X#Wh=-CA zM->EnnHKf{W1a-q@k8`N)tEn%A#_b#tSsE%uB5#?d~g6b9q}48FfbyrZU#&sL0-7y zs_9|_9x0I!!V|;>IKgbj6i^3kT<0cDh2Zp z1}X*5i0%|~pvX`!SOTx0Qt%8(LD4Csp;9o9=ngXw4C)2BLNHWBs2$8hQmAUm;D9ng zgF-kUJj|f>MlFgO3`K=CP!)Ja#Yd$>`6I%ksAwfTqXz_oI>Iv~g*p<|9IYce4pu=h zs3XPGsA*7Ss3R8j5De-F&!{uea6yfWN&tCMVgV5z3IxHRjuhcw z4(1_e)OgTBkUXq`%-|WZJj|d1LXMC&iVDvVgmOR_s30Xqp@P8j6wT3Us3RAI^{;REQFHi16?df}x=Sb%e%)Wl%?WM&*Mr zsA(z2LxhKdpxQ$)_(es7DcaId@(_kn4|7mKM0m8JLLE`RqME}q3Iw%8Lm8?@u?Qp$ z&>Sp7uh10gh!;^1Au1~>L#zJPnMhPtmQx~$$ibmXSy2oi62%E3 zIPkzTi2$zUKs8BO5lbY9fUF``5njvv_$n(xzso5hb2AhTjC~>iPy`esl!?mlLlB|V z{+tqkxFiBe1aOCZh)R$e1c4+7fCvcypm``0h0L!hK>xW2QiTE&(p^?i4DM229DKix9yR+C*^*1E3lp z1xS*RSvM3BeB^#j0nnntLpa1Xnmh7$a4 z6DTL89H7sOLJ=47I}V@&t}Lh2BeS!QUF_kHoU;z6uYA>4)TKLf|>!H0D>q;amW`(5COlT zP!>~wnu^KG0hft^0R`4UTLJD61$^NLwrbG2K~J-w@&4{EC=uG~pzfgCLkK_};RnzL z0E!AYF?pgGxB?&0;sIfVD}+F;0b&B6W8uIHUH32XO)(cGg>4>k2Z0E<eK-ZOwf`oiaQ`>;{x#wUJm?5M;_sh>I@yDKtejCzm5TbPB8{_4Iak697RlUtptRI zg2NBO`)4-;^!Xt8x$0NXgD8g#K$}3q2~h!{1Cjq{&qLk+C1{{!$X^h~V7vvLCnXM` z@Z^v{bO$3R;u@&uUqk@pjvD6QJill?iVmxweUY!2!aqdM!Yl`p-ivAG=i40)%|JGf=wg%-#Vgn8$upxuMp0_-Va){)l;KZN2YCO8LNq{u6a;_( zB!RQKpSm$QRCmzn{T8A>;t$FIKgc{|euP6}1?mp%yC6J}>qTO3v6uwte-6n-3ID_h z%kc$+;C!zKr-3*)oKR-=ASNin&xZ#kOnw*;apVGnF1&{5u^9n zLJ80Llx$_d2}lR$*O2FL=7ii)aek@-av&WhYBFRgLK$y=N>T1VieL!McbCYr6CK~7 zMShP>xHm<13XG<|4Aps3DEd!QIOVeraff!RPS`}KpP<%@AAhb>|tB>(5o1?clp4crD+?69AOn+-rJ z;0ch2oEPm(7a!lj4EtweqSs)w2l0V?ex!i=uSGuxG1Aw=^&2oGl!_c3DNw0S(ZR(F5#IA?Et~*h69!75=BLg6s)s;|1Y~SmU>A zRQSIEMLmwX??;}@9WJ%yNb}*lSf`9eJ`5^k`T(b>@TMU&3GgVGiozWE3mYrUBe8}D zbL_>;i7tU5ATnF0Y@z-h+Y1Amyq^rGtK=y$jAl4cLDT%0&4ZAIy9oAu(P0*i zFY-zn?w9^4(x4@v3*o98qJ#E^f+G~s&_JC>2^j?9$0B`!TOs=Y>^91d*wGRbbmo&F% zZ(N{h7yUwXN-qm{wE$|D%r3Ca_bQzmfNwJ1N5do9+Kl57GZn^~drBE`;a{ zETnf}gw6yg7%8`%~>E#&q!A~;zx#Na6R|7!am@bkj|C|XDzrgepb<`5U}YLb5?2`meVA57%Vw|43rqFTZt|5FP2+f%(Y86P(!)fOY>t zA!vIEdZr~O^R|;lk6qP@)z!a)E|4j zg%VQozo1i!VG2H|H}HrW$fRuEBcK*Y0fk@0qJLYqI64}b$Q)k;JYV_K(_Z+668?km z3&H-BC!_z+lj1Nq!lC^h>NYs`p)KO46bk=G$1REi8IVaL&l(Zo?TYyrgRuq({z=@Q z%MtDiilAr|cfk~S#tl9c3K&qhQc}QZUid$`k3x(Rx-dn2LIjf*h)$jcfMWPTo6UT> zP?}%skwqv%OB9YUatJ9fccVl*ndCyws7m6nixY!U2hf0ql<(g?j0{Wx(3R0A)xo31 z@Tmx>3H*5v`~l74KkZrYuaU_A2MJFkii#}wEgte?GVuE#XBY6BGz)~3S8U%?D_5GF zTK;MOwrz9tbXf7-m}X-atTFaQN3a^*?hz`hSN)+=%|>b$Le+x(zT{+iWW8M$e#_7{ zLn7HQ_t_T>C)+3M_dL1CD%LuE#5X2!YtT%{ndq8Vw`yIy8@}3r7qoVYtT5qPZg_Lo zIqBxdghbEbDhW#-HLfDbs*>?d8K0(Qh8Z0y1lvpGj<=CCmTx`Ubamj$1@@_>)YPd~ z^uB|JrJ7p)E4QkxTCUVqN&VRO|S9ZMM7n#7K?Jyj-B@u|0asshaTHcqQ| ze3qHGPjcGrae(D<%xe>(!9eebrAXsfe9Whiwr9Je3+U{0+_6hF>29@|=d?`Q>=LF= zTI#iRAJf?I@F!Yk2Vz4E15<>^KAv*_NvzSCYs>F-(uQB4?~YWW~;g=}GKCdDGI&du-G+*S~W z&KE_#P+uy~$8?l|R^EPz$>&vA@qn`3nlYonn~YAiiLKv8Ps1iP{ZiU?aP1P(Z!p5=fwtwm4a)QjT{wZ!|lGxQ^^%vK`&bzz`(QX{a(E7$QAy{ts8lc zui%m8_8KP5DIeWjE1sFjAu7(bpQ}s^4+J0_>{kH(Eg!qhF%;ejM-W|C-qh)l<_V48KO zla*MNjY~UrwwEy!_I=!dvGQd)Z0TQ>GDk3Q%v{y!c`I&3*ytx?sf6!xuDY|VUU;fB zp1@$1ty2$HLKJh4dSPJCT*`!=vmYdEQY2TZ@}o z?q}ANJFHPvc)DNIjmj6K{MZLnB*z&CU27y?R2> zG4~}7k&}a6XMGNMMFe;qFxocUI-9+7I<-6ea$$66INR}rS($!Ms@=2qIOsC3#ro0r z^-xbd9q9JQK8s2nUXh+lH)2%D8vNoKogjVJ>JEY*!Gk&Ki;z^KhIIl?bS}EaFpMee z=-Ia$l0F@^UCv0yYPX>c~gw<1(uEVnUWA5LH%<@jf?n z$H#N&@fGP!J71kHWY|Odwcnc6^Uj>iOw&!XO#H+HuOH-!ZEmaZd=gk2-VlCla|Y_@DL8RJZHbb z*S~~aP^`l8cFh2l>!zr&)_CS6ZX2}=Pw(O;R!fiEw)PpkQV|=PwAzH`?e-$(d->F9 z%L2s2BcosGx8MaEzc2T~1ni@)$u^Tc!WjwcDow?zpW z#?S>_=~4Adiz$&#dLA4WvBxXoBEjC~xqFVd0nO!@@One47-whwex(oDA7-DkZhRf( zx9hRnN(0>*rJk(WCKoEzW1}BaPSxCMy?^?`cel*$#yu(SblJCR_I@xpaL zbOp=s%c_tEegQ$xibeMg*jWrcO?5aXm)~8+$wVh`sk5YvCBC{yRYcx8eYY^HMxKz|5ejBl{!ati045q;q&WZyAJ)0sPzV22**btrG|e&9&t*c2xwQBKEYzThF&|zO&T8STsXGzDhB? zi%MI|Ku%VPYIU$;80q*8kKQZay<}G97TS$Ps;aXF#+h&kb_d1DD?E~D-#Dhuez-w% zHczaMWGDL?((y;w6KXP!w3i#TqBK@`U%w@UO|q$T z%$E?P=h5L&r7I7UkX*@bcrZ(CZ<>^p{y^pupU0dt7FTKX@Lz-FK9B7UOm24Dc3{){ z9=_dX)&0>+daWN`3p}T(rS8t_mE zY7^X=ys4%xZ|I}2e|lR&X}tF3lEQ-=g~F4G(IoCF}@^;9~Wr?qMc-uk~PRsAFMay}Hy*F6)R+{g*Yjr!Hda@C0 z9)>jeN=EGX#LrpN$ox!!)OFiAs-s(GBP09AtqfY{;`%%8C9z1whp$=t^u=6yqx!YE z-ncoLo;X)N#ib+XUHQ}vq~0AmCNn$waqgGDb-qJPS9^_~&(2vqZ!7HEobF$!IC9jh zLDOUQT2+l$?7;pd)-9aTc9n{!nw@UnJHgr!7cSP`p3nWbHRoJ%rpkIfm9LB^`c;d# zJXRU=-RgW7r*~Ug*`cIrw=`pD( zOM@bHO;kP_uyk^c@3Gr)CH?GpNeI?RD+$Ny@z5+PZk?^IJq`1&sK`4VPs+=e*rc|v59e;Oc}u*zTov>6SPi!@o^k=R5q+BN z>Y-=HhHqjjSjrDGp1ia(d+D9--hqh2J8$@eEIHuxG(yy_@V>7#zctaqxc2JIhy5SB zd>;r|-$;7M^up9LVsAI^3%jBkl4BtMZtW9(_oB0GU&qw%aAQuc3SC%jPFMncy4Z4 z;UW8G#_I7K_Wp67fepf0Bjc7S$y-hGT1~Q>?X=e4-*@iQ9scVcg~x)VuPJZ1rNSe7 zipQthQ1jN3y`=|lu4$^i5Az9Kx+BoAy*EwyEN5;*K#*&HO z6T)hnXw6S-(+|6|KGOeq(WeF?lZ}qR6~+~>waV2eSMyA$(CoMW-12RzErI^l>UXuY zo4kUmpVW#hbF6lG@oY^xJ6mQb-Pwmr?$Ga}XJ^r)dm2;d$RQHiVR&%=F-Dns)3psA zSy4{Mva-6;FF!sYcZjYmmHqm~uCp=RmFa7BrsrCpFs#thp;L9gbx)(P(Kr8ds7dZf ztXZ}$L1&xN@kYj2@sZUf4_mko1neGvbeKoZVkX0MWQR=l%?~|Yp7q*^{qfjv|00}W zLW63V?F&D*_|*KlP06Fn)1IVgHO|hAx3hOmSC~e@ zs807|Kec}fF2XQ1iG5l^-bm-1mF+TVQYG7j-!|>J?{wE?eHGey~wxmEp@xwrYgW>i# z<`bOVby_c*eR*A@#J*ljS?TDwr?7W0!1{XU>db;h0XLz;(OgQJDIy7Ho-x~e?N8$B z?Cls=!Rq>cUp1W{dc;8rk?Sd{XQ!;_?|C#>V2SeFHHl-M==Hi#p910zQr7HxD`6> zm#@3*L`BjbOHSdkmK@s?s zjo%Ncu1J3uSJ@Dn9QMwt+TXW5**^DxM)}suajy$j5auEbVuRPEQ7N5>e*TP$`DH#W z)o|^4W?!$ClK88QjIO!Tl~KdVQ>SxG_pUSbu=J2yYgs$ zvC18rh0R?mL!uqHaFy?0NSo-@N|id67_Vu5Pt?~u-Du`T?J6nQj3TTg+J~~VRyFCu z7~FhlEv;2*>d?0;Z$m_fh{=&=b$0bFoOTTgTcw|!w=0ggY4$+yvUl3Zqu7W{)9;f` zE4Q~fwm;H#uq&!)Q((Hs>^Rj>7u0;R-XU@2nB?xNN0!MPg-u>r5$?-nEbr%i`}pvk z|53WvPduAV`i8x~pYh8$&S~FZBl75or`ZvGq%&` z`?E35$JS-Lf`S?!YwWMeOn+wSQJL$IwsSZz=4oEDFyZi~mS}_n=*zj7%&ILR+mb!ptR>fna`OS;O2yd4||b_%(&(g(Kb zsHf$$mrizdG9}FBZ$H=Ny@5*KAd{=hK}!3$_1Kt4xv68V-f5vhY#OP%WZmhk_1g|G z++FvG*5P9FN&^;;%TuX&PU?@p4coqumU=7rj4wV*_wd>y>N7Lq#x^shPcO$mv&lND zm}U7gK{`R`f{m-ickY)mR1p@f<&}av4Q*|S?>O^QJTxtB-2>KI>Pf4k1;zOmo9=a;u~l|z;@4=!81efF;3xV3*- zzF}WK8@;uoL+kB|lqutY0^WGK-sT$VPx(&+9`icZO?VDxVtwOV^FXbv`=Wzf4&G>*32zPIo6D~~}5qrS}6)9?D@Ci2E)yGyJJeDi&? zZoiBPe5z}A=IiKqY0!*Ce?yZDYueqJoo`&5_g~U(&o|n_l^~M7^?elBgZU~U|5~eZ z#oWohO*zwt-tAqAuYG+$%;C)Vcu_gdzeR83OA$_&zB-Gvy7>6;*xB&Be&+q#7`scl ztGflKEj_Dqop2r=Tm<3jR2Dst>QzEvW#99{X%A&J8fCq-@=eQ@=V~;1r+|Ctyhfn6 zbkx3?`QX#4k9AAK(>>pr&VK7^a+-8n7##KD67vs-5o&V{BPmh?4_PD=O5^hAL>~eyPE5HAw-6N?_0S+?$lhixu zW(r1MarZml=s$AT!Jvb+NRBh0<(-h1)m6Wu&{w)_MoUUd9bW9Ewq|($qG#)SjqY%M zmcebW+k(|hRn0|9bM*%zvkHb+tCf9q#6Nl=^unbpO~vC-J`LmUF6?*1M-2j2nK`%Q zsk_%*V)V~Q_94xv`YEQUeYuT~psf@p>Q{0N4iNffr={(eNshI2$-c8_rRS6C-SIH# zeqMraXA^yru!-x#$QLbi&9hetq@g|EI#QpnS)OySCsZqVVq3_NO#tDIt;kejXYC{A z8D-zhhrLp4Oe%37B;Ponc;zD2q8532Fsd!PI1i^QTHmDpF<-w$xgy#PGjuiE_f+M} z7uW9Gyu2mpwlx>CH> zCgh}Dz7mrsdn>ZwrRCSWJiW0b7cqbD^!Bgx6ECIuAJPt7h`#pS&rft)D=W`H^;G-7 zyVUIQ#49Ja9yGI>w!v`?m2;rtT}JIr;Udo$sIz z;dE%}s+n(E&3a#0gPv@il69hgeWO5caI20Zdgjt z?eW`wlUSB_@g9xOufDo6;}w1LadWCIp*xGWE61($Q)Nc`BVEV-|Bt0_3=^&A*&W-q zZCiV6+vXnIwr$(CZQHi(*=L^bJ-=42q`i}->soEou2l2+;UzU!=VyjL@+6lm(#1!8 z^A<{d3X>kBJAPJh{2gQ-h0jK8d7ySv0{z~cQ)z1DT%?|Rk~D&P)j{*2X(C*4;{1!U zc~>-jL9R)Fp9}tI(a6xyo}W#tF?LkLEP;aC(zes#>$y=0Ox7L+V)nh~AZ)H%vP*8j zaz=77$3ew3yEV5Wv5#wch$p+eWy7)IBe7>NXKVlbiV}6Ao3|T;R!*++^Y!nv+Vt*n zLoSDgCo?`z^X}GwF1Z=7RQJ=JPuc5h?x)$+;pZLBxb4(zbJ-zUp8JnWXclZ}ZwxzL zS*~3n@;yI`s@(NxiLap*JM_;;-MfaPjaJ(G_I5-Q-i_9CTH#8@O>e06YMGHm>Fz}R zixuk0Y?cl>2Y1U~EwJKGNq*-rL7 z;!93@c5hEFd}}!T)u0)$Ip0l=;b82GW8*`;1?^z2|DUl3jX~XB{!;_B&ReTi$M1wd zh*z=g^v_953fvwhE5rNe_ZEEEs^b06J;HT&%r3Ia>Hd6WU%VaGi)RC~t#Wva)jGxq zo@;J^>9Tg>9nnk&3kEp%68^(eMA=xiZ1z)mHv9fx#zoW&C8HjN6;# zSr^R+`hu2YxB2msfynJym%6T5Ua^#JU`CDf&dMPw_g(F3zVWZajhnEIRZi~v9=!Ma zw-Mx*YxY=?3lnB+vYS>C-NwI{(?6>&ha-4^8M|X@L~oypSZNkf4>D&(w}nElI{O1N z?w`2d{E+>Pc5{zf8Mr`(#KpQlb{HmtpU2 z%$`hH$06n$9Fy|m$Sm(ND&yV?Fn#%8g!eNR!PXFNTa4Fu6B1wPPy>r_WRo+?ug@!g() zUPZ0g*87Ql$V$Hd8XCUB$Z)@K5H035j&C$!e}NBRRSkoCrN@PD{1m z*0U<+zfV9oi%*DyFDMp9U`$d$m!P`d3J1*#xlr8kPSi);;j18+SMr>|T^XUgzC)C> z)`{ezQEJH;(|@?p=eL;t-39Sr(0l0A;Cg_p5|KF4^F%Us;>iIWd}1hjIl3ZR_Uy2w zI#^u7mZlSsN=l;6`CDA<>|l`i>X_K+gt*?=_>v3~Ir zF8R!bn?R4|8gZKQDzyE82cfLi%bUexWG=YQ-ZH~vr5k~8e1F}JdW@Tjk)qvskvYA* zV2?mF%;4Gvxv`>1W4Y7$V-}#?*@_9Y_7vJz<&^tQ2Yuo}>T?Pbora`GHKm1>GgOpt z@XiLyFzKSm+kmvcIRQ?Dyuq-xjlHYvK9M9FsibZ}+p{ir52X#&K8IeIJ{%XMyjvWB z6Zu|KvVIz{{kq+A3E-NimVHgWjhKL^f|+0k^>t>>7oPA;@eh$-Gh;!QgLSf876;J5 z5+VY5tY2KLK<4onvY0>)7tq5IV%!6wd6m2Ad=?AP#S)_YZ-InZKPesBYIHI;vT6>i z=K5R_~o@+yjYW1r`lH-uCqMd9>F7$!h98H zkX^|G^bB5w%+5x?Zz@*588(&fkTKhQV-&su&3=$Q?8JDRUe2#vo9ZYuvF`u8VBeCy zl@@XDKuj}`t3(;;_I3l#>E8?;;5qVji!#psh0F2w{$zM1Tp8k7wn2M5P(gYf^@I!J z4>QS{^~Y_m4A?P2_Yd7r3y>5m6aNh!cyzz|9JBAEL*YZq-5dHQ0GgX~A>xX-vJNjU%|%gdP99m)Kjk) zb-QYev6KVA0?y7q2fvE@slcl!H#Ap{TwifiBW$ZB`$Nt(UE~{kYJ}f>MfS1$RMOWO zOYQad(!{+=%hU#HQn<Ht1*;lMfub4TPtR|Dx{vR!{d#xh z?Yx!)2-fK1wOU2Q8;t>U2v%X;WYWanJ(;3j%A^i<;EuYf2 zRNNUoo81feuFqIE@GJ(Fq!+b*7+um`;2n(-Vu+WcEIP`=SVX>GX-KL=K(3vH-{-Eq z1Vdu#xeKyVo}E<`2HP5ZLKdu5!$Xd4+keynGYa>?vUFaz%T!f{EN6VdlDwcX+^4niPivxRsxhMZF#2EyeV+_q=njNfmR8SZ=@6sAUqE-<` z9>3mUsg7Wsb??7Fc;gl*VAXK;M(lv)G|Wn>-+!6@ltnD7R?9#!RYAZ;x&@%;(AG`} z`*`%*qW{Pu>%-a}M~>>ADbcLttP&1led(}ZXGs$~+(vd8x79*+DMlzFR9>1_4G-IL z#Q8u_7z|Ta-iE_a2Zo5?l%Md0TB`HkZ#1kZk7%~^rg-}*Y_0RxT3LEIesl8|3j%8m=8nXPbTAE8#|UC`e0;HQ>mvjl=>`$T5(PLit+U+ z0h$=BZlBgdSI>%2?=7nlLal6nJ%4~!kJm(=go-M8dBRd zfg9==G}IB+VX6X{w&m|CKr~#)u|p}&D7}fXe&GyTcI-0N`q|v*+5k{b9)2ni>99f*}6mqK&Xi7bxsr>n{x|^>4c{18BqvSmf ze>sP6TGsoQ)VS6R}{G4Xp zd0xpk{P#vW&U2$QHatY5G8}YOp8`DyBiu}_LT>xjn6&c#sU{vBG1{UI^)nU_o(UhD zYDUYs`n(JEkaq9OWZ`EN-H*&ForkRv{>GI0VE8ZiUAa8?O%ZS6ZO`eb0B2g`nGC?7 zq1xRp?T@?H8Hktu4B+wITpWbLhV;gvGrd?-cJX3mWJqS6yvxyFrXP8l#}#DZ)?O@) zO@HKFUIH_SxWi9fNNRaFMnN0sx-gALR96+1Iv_KOEjynw{p)UO15op{{ftK~NsG2B zeq(p*O2g*VkRHm=<~kIk?$IoWN_}XM3{}SX%Rh=i&VL&E2=HnV%USqu%JoF6f}mDoK;IGc@w5cEHhHV7eVTP4OZ9@if+5L_%Nij8 zE)xQjPuq1_{w_z-N`=sL7l6YKF?~Zs1_%Um#2SY(}47&H3zp4qVs03CC zwApW-OkandfW0OL82-TJr-W1b_3D7@S=;5%xEDS6Z~Lw zb))`}w8Yp)vW_4U7=Q+j?_VY4?w9+uvZA9|G z4ll`(IJ92j%Q+WrkfWgMcO>sxxJ(MVZ3Kb;xFe6cti>z~EBo3VO)ynB3L_)qePcQ` z23*##2u^sY)tp5m{P-gefhZ}L&fB1sC^*CI3wk4RTaFSN6Ujd(`&+OuguWe_Ehro) z`iVyCYRs>jO?zW$V|)RtxJ`?x8;xo81-Hbu|k z;?S^2V11;)4`}mrr*Y>umXLRDJ&ZG3D;8c?-_H-bTt3hX=_r@XAdZMp7@cw;%dI{W zuJ*k(mwpxxC1gAPWc73}ZT_&#&VasU{(S#O{EpOj90woKU|oxiG**x^;--VTTzx(OJBbxp~CAj*Lv&T z=u+B969YH_J)$aGb*^y+Mk?Rl->%sAfr)ka3K64`OeC=@?5cS=DJpKjX6c?J@WvOf z#!wj*0jqqEuOwBfDsuUgg|YG(k_xCtOthoe_|o3Hg7s~fI#;OwC{DUCr`pU7uF%li z$Q-NrZ28{O5rlD{MhfKBgnj}#B_ankP;}| zm7Dg!=##*;{#d%C(%$JkO=o}Z)`!oxYvXP4CTE(^G2>e z5AElTl9F>Tz@(5wVhL?x^hQnPmii?eIa_kOBY^^7Ww5%w%@0xGuHJP`HVV27ImhFy zsbb`qeU%*4`>{Uryvl;}u_EoAw5fVbD?7CT?Z^7xwdEuPnU(lml(M#K9n=fCC=sb6 zg?%AGH;`Iks$21;lSVC9&3%c$g3@!*Re9oDBexjI#4q>%Sus(wl&n1 z=@y#h2reYaV)E9Yi?+7;vrv)A06HFTaiS0~91^8Kv#@|QW-=Auq>AhkvCKGs&eZgF zLv9&Kg7WlAX#ycrx~(fiB~R=FPH_I*9)RQ!xZ`@Q84jrh47uz$HJE1ZY`A$9+0pExL4~@sxP)aI}5aiZVs??*0KwOD2)#G!xp(xF@BIJ z4w9f&+IZpP>|3>Xiy{ClidfIrFOlS<#_gL4*m3sj9fT?G)f#^Mr62YBDW?F^7nWDd zFD4W+947^ta|-h@!-Mid&@_%-a9lhU8h&Qwt@H)yWBlxC>_EREItt5iU@KW6#?qc^ zK}77<5c3|N3%wSc4(3WP#cu6ssy34;#l~MQ%0KGmtUwBf-8Jy+3mT{(I~W?&l+)1| zS%Z_y>w{AP!$LP&N(_iG{4z9PD1nGCaRju?#dc#GJ6Xd_jq9yA^N2!j7DH6KR@i8? z5&4SKS}B$#*^T5Tj5RBt&ExAG3(LzxI*nvlx3Y^$;$D=Ol`(TY-WJ3yvuNlTwkSp5 zl2_9CdY@|2H=y&z9XeTbuCVR*dzn}YwA&RKOxl=HLeZ{b4zg<2N&XVvBu=P;T%`PInUjn(Sp~BaQX80v2`zG>|N4HxJ&Ey>P;+=P>!MG3v{-#0 zOm~TP;JeoB!FHM$L!Ed}s)K6w5;Q*>_#d-I{AIy`Pj{DM9S`w#*H3UN&639*R9^s_}#LIBby`+6b9>N{}~DZ<2sZQCC# z?EOxc{faU<_Ko1QmS`KG{Cqx4C?|`!3H|#V7r3N9J=5K(%2G}w;S*dY+8&?g9q*(8 z_M4A}=%JbI{m)17Ovfx7+5Oo$dJb83kdrrCY7~h{H2sdiLv>d-LDsq0&6-;|W|jMh z7@O68L7Wx$3`b>Ue-`b7=R4*D$YkyuaJA3^yK*jVlm$q9BU{tFc?Qy*HhRs#5jg)8V>TByfM++4Wo3ne#h(rs_fHU348B-3bqIutXEQ@cu>abf`r z7Dg6{ev91Oz(d8f{k>FAu8=qB_uMUq6Gi8_tX^t!p2G$MA#gf}T*P~+1N1$wae97J z`@yxkL&3SBON;dio-ET;kdVg#<$Bpa$2%%whc7Ie++--yYbocNg2a7|#EtDL*go5@vwA-$w6}csA0U5%2Pqt%z)Y=<16Wr+@YwZoSiR4 zJ`xaxdVy<=M*Y@QVWPn~`FzzB`&})YU+piWxFSoPjRCD#`{uZr{6Qis%OqZLwIe_y zJ_0`BU$am?k6m5Ch0z`Vkps5=*e2&usadna(&4Q6B+5&wtDEnNRbDiYJ%Oe37AuSC zzBGx!g4Ug1#n@;_HD_UAS2@aD$PShMst>wegWL@mNPLw_PF{@{Eo!SiD%6Z8OJ1zV z@9{Wxyrr9uC(G_J_*dj?1xgpI8_=Av`|N)UOLsSwjB-GdiP{i=<*;E|eGJ%v5u} za9?7SQ=LwxTl3gHyNw-*WcM$+8qJLzXR60Ilr|^S3$+tW*^urkCb=YT3c8t2b8V z*kcnrnkQ!hCyy5^Zkq?9)i%>^7bcqm7sUjiPO>|Gb1+4^7gGK+CkGe46tP>P$aKzt z<#@gJ1E!3?XGxA~OPzySZ<3tyr zUoHQL~vDV6OF0cYJG=NTkx1kws+b6G*2*CNyEu#*t3?hHGF6-h}HfPMgjMs8Bj3 zHFR7gG@s)^Ro55aXVMf&vNmhS(oCZIrk|D{;>NWyiR&IjagZD!5re=bu< z8ZFYyR;70mRlpNsF$vJEr-&uonCf%aMn^ryjCR&lPb$6f)NQ7aTSjZMQP_$84VxJq zAD*HdGs0MtKywgtlV}K0;N<$$78Nn~Ov?7A!YOHYxYlqKh? zWL7O+kxKyLbQ9ZH+#e(>OMp%p(@;r-BqtT5TWgxQ^3|qUkf?9J9zAJ5Uc!17b96<0 z$y8t6s8n9vh*hrLewI^ilO?1S^iPh7S*nj}q8gl+Kv3%;x(x0rab!XuDe6Xm*`A(^ zQqgx_mK%bi#8{zy?!Qy~6a}yv*R!b}m1?eM>(=km<*{hDT+KW#D-1)?Z)caIvVAl~ zem|ggQmJ~Z%Ia6B*B^zplBTapByAE4=mm}2nd**GYbXu7LEm~t` z)o+bbDXG6bU_^z@JEb4HibT`Io z4>a4VDn)B?EdR{;V86t~&sU><{AohG*sam;(h6}@H}Osg#ebq-X5JxJ*b8Ikj4E2e zqPbdxM$jv-n-!lrfeQAPRPk<@`m{oMp@fZ*Ic+yJ*tM5yunGLkDMfk7)(dmL&*8|( zyhMAUL+rMgmr8n5GQU8T8Fs<=>^!s@81 zlN&coQWeoIu9GXTxD~y>3XO#NOggF(U(>GqWywYLv|AeFrT{t*5AcyTCWo(UH`mEo zz}Y_0Z*u)okV}}E!ydop`0uRV#;7DX^~0E=e_5`62rGq_9>kx%X}SPWhaA@R@l?9j9-Rs%w)N zFQ4=F(EF%VE!*)GYh=#q`F;OXCFX2U==yJWIQ8Fl*v;!w<$34cnIoTq#^Xg`n zglv!Jm{aW^a(F?i-G8panM(Bk7ER5C+Eqm9{vm6zkz4a8A18mBWzT~~sb-%QDYRyK zn1^1oi&m(?svntLI~`&hEeq@0%}5E>Ua={>Pr-<3$mCk;B<^`)b+z1fNgIW~1RZ;c zRya6E;>I#z+oHtIEy^hdrefvDFE}}Rt*0!pg#a!3C@-*_UD^dnKUy3)v&m`tRRn9V zN;d<|)udUf=w+Ax*c=6?aiuSfKrv=NBpe>z1^yAJN$emt1;os&L`mb~9YGp>0>o^u zoK`=;2r5zfEKSE6MUHM1%APUOS+mx8bQ1!&rYgbTWDM6|6emKbW>&F`u`c>h`BU+F zV5zErlgkDh31qa986*bRX}RKJ=4j753F|l=Gt(EH8h3*hVR%FniYv(MWR;$Sf*|YC zlV_Swi-B=4RR0KoNtHjh{vql|$2XEU8H7*QyN~TG_MKBta?pfaL7^W5R&!C3+o+@`}J0oVo15?<90|;8a41= z*_$B#94D!a1N!UPMepM%scsaOr3`-Dz2`rtf(wWZ)SGYQhkTV^w6+a3<$z@dyO>ZL z@AQ;=N5=(?io2NZ#;9EE;znh{rpZe0UEkoZ^2fqJyT?_lybZP2C_0d{gFW;BAdNi- z3z*KrbYW6As}8>?)m>_lK4U}*r^vnF<<|olYxPV}^g{Yd zF+r3hkbTNGE_z$ zWCphdYSTz+_8-gFPDL(#x1|+%Z%mO4KBz5fuxr&nBx=i?VrXJRH&6a!sonp4nmDj% zNa%AaEBS9!s44I4(d6ALg`uX-f3G~R%i~%R^uM`RKYsR0*`3?hsTREf&YPzY_L7aT zRZm(OYrjpgZuaQgn@aYww+5}UV@cSrKqmqslCxK-a{DPPQ~eB^IJ80knUSwXu+Q^v z_8V2MU+6q96zTIA+zKYAgY;?*+OQOUF^_IGPMoIJF4PVB7ebl*>Y$PzT5qXj-pWdC_st7%j&^&?!-!Q+5-!5;q)4ZxLxwzF1r0=$ zCQp^>NOC#)sO?-fcbg`nLQfs9G@aPTQPVx^lSC0R&-f!G_@sRS;vI*fkTL>`_zClD zG5YMpq1vXLBozA^xfL}ZSC21Vd6ZMXK&Dnx>pcKA{p`Yh#bLe}KeLC?%}9E-P`BQi z$04&*Q)J0Zc3dn461&jGVb+Sz!fs+yxSblOe)I8fFvHsWJ&QVp*-+;ScPF=NbQnvO z7|2avM*^EH_Mx*?hc0XoS-BP0wLTFc#CYn%0P$_nip0+WHJ+ORGlQ!NJQCM<;tch0 zoXEgQ5wDZ_XK7BdD+Yt7@t_Z)3~T znjg@%o|T@c(*O?MDYQ0-%qf=n3?&PM%q^W(8g=tGgq^IhCoT0|Uxl$dLvcJw) zbP_C@v2KNq)tR!t5)DO3KhAs-1rd6jW#S$4l=rg~k_*S)jr(izWD=}uF_sI7%D?*- ztHcf4hz{V`Oq~(rBgu5s%BE+PdaC9ee_hv2f+;F$Y)^DNH1gHgz5-KGFaC<_UN#J1 zJ1OQ~4EwEiRNYae9_F@J-HD!G)LrVSx*0=jyJ+NB$vp&`7L~9r5@$!4tOti`1Jd(^#_OY2o7(;nIM)u((^3MBpY7X*4XXmzgUN+ zj&QyI)*N*%bbSw>|D}Fo)a?Vop&PBZI~X;uOYOg4h1a6Ggzn?#dl#*^5f~p0(D1|0 zG^4)-vNZ5qo%Zux2o6NQ@2VE*c$QddnP8x`_XmWot1$wzN__YCDPK`4P{DGQ#VU$` zQ3GF3wcW~KMd}TYv!LNwKR~{;feRMb{-@3y#Sp7j^)vlU8-lhT^r>RG=@+o)THfAf z=GO}9VQd{OZ*2$rncz@KD?M>@MClmj$+4(w#>hudx{f<}&sym!i2n$Jwgmgyrf2V! zUs(AVU>!4Ew=#%hELRU15_CLEp?Mn8^sL{;$1m+rYr9cs#EP}zI=E~kuM}>a&mX{! zNB(MUdA3D~OqprBlkYYf1qaG$#9RM$KFf0SFO*)4_y2s|#d)7Iz|3n?Ztv-}zi*+2 zGVx~|9Om`D_sy-uveK zZO5)lS=Gva7XByAX6}eW*R|MjaUR|=)Ak*qKxSH zt)~?wUZQjO`({KcbSb&b2ZxF+C2hI5b=5nZ{Q8TV&+8y?)x1<@qRN)2sZ+{6i z)uGML{K9GV?|$X$mS%Ds|8_9nHiSuWs*W4QD(V7oiaQH_XSpQ_(|DDB_wSVP&AvkT z6*f3B!djAPq*WD9$UuAVBl>PSVPuIGyfU4Q28OI3s%QMWa za+qFMqj%E*J^UcekAhaxeQbAa(8;})`8w@u55uO`p}jK&hN#} zUfVftJ-Intrt(w)92n)oxa4mqDYbM71r!LdY@`x(p>AtHUF)WUjyjMz*MzI2ML z6T4j!GRvHq0`~!WB?p4*slBGKjQ@<GY;cMv#LE2GB0xqirA9j%ic}bpn#{%d}1;T592_d zrbnrRVQG(?qyz$J*jEE82Z6U1!2nzz0gcOd;YpEbwszG^*J$gKX;!>MZ>ku3%DhZ8 zFgh*cmfKNbz_L?^RzY)=ej&{{G7!;E2UIWYL4B*<4^)2W6C@&kw9vnCnxfmEIOor(W~l=f1d^lO5ruM=~wFz>D$9-QVn7C&sYPQByM)cOB;1eL9=MYctCYIM7fXM~M*rpAlJx(GVntd@EKRf^f=vb@!@gthwHH$rf0=th; zHW?2pyR<*8rvg3XEX&O--;S+adRVZ9-Q?3k*9@|*mBk3{FgbY!!H6HV@)RG7APW|O z);@_EA$ka4A}PCgmEd^@Z~~hTracx;NX-e4sX|G)q5{6fIX_8qaxl-Y2sn<(Cu9vhsn}k`6b!TNbmX+%Fe&-t#k*_b&>@(VE3=KfQAypJh7=h*Mrr)=>njh1w24+Fhk zGjD@WxV-jE;d7A+_de78UBkizY?!N_t;;nYA=RL*#3SrT8RALW*&jN6BG()g3BrYjuzj`~paB7Vjer33vzm^@J$yQuG)ztcTt z(7|s+%M*&dxRo52UJLnBp=->$sSiTT1<^&j6YLg6i0N$_{Kmh|R~ znetgel07I`8D+h@HKE+XEe4TaL(k#v0kuI%Ch7k@yQKHTgpQz6jhYEuhB~^s^^BS@ z{w!BLdE5qo24dN22p!$eV*CsNgJ~|ENTb*9Dg*>(!7>87I??eY?t^dFF|+s}eDOLd zi@$XrkOuB=X{Hj#$r|S6c1}Ta2=D0frJ4^%w*C7eq;nUB_0c zBU30?D(^c5wkCu94C{-sM#@~>)XqaP zp)4&F{FHZ~)&)c3(=Wb({0N0F^OnJONNezFvnAOc)ZYw(FaDkE2^^WIbWUOsZz|Ax zJ>P7NGopU^uum)Ub&dE$-w(?@u8Q{m4or?u@z@q7;(ETaw^J^3d+jPU6Of< zliXA>(@frzU(*(Nq%Lo^Dp%1MIOaDL0n`L$S!JYZV&!77kxOa)S2rkoV{Lc}8{8Fj z-_?QbjP-o{W>RQMEU&i8ly>RZew>O8BZ!BH7aR@N>(hP}FN`6S_IS<;l`MhuBOz3M zKjh`SPWvjKt(-?xA&{*o`eAzX_y=|=sQ1Xgj|t4x{mxf>H;WpIW1afN!ldCfgd6i^ zg0C8;`7iov-O;UdLbgK}NQxo!q<63-v$aZO3z3`kCx5kVP5#9YaL7pYNm_ngxgJj2 zAI3~%Gc57<7}iQmeva(LF@@daF3;TO#-0)M?Dv@3&{8c`v0{>cQPG1Y{1`fBW)C>O z_qFRBfVsitaav?&w~xK;eWQX*ie$M&=quF?|2W!laj z4}>_-&Iq;Ocu}YoRT`FuFm>|(w_CcXCznG0B*lWx85g|gZ+@b?FfF;z>r3(bZEB(a z%(!LgSL4BNv~H-cGQk;$27{K{B(iJ;T_n<~l3V2HDC88IicT?`=TkmwNGzrL~*Vkt#mMhOi4=r=D0q{%Dq&`L3Y|G8H29oj+3d>)%gFhWbZfM?m@O7& zoK=tQJmbeH``GcfxYKbtq1o&$ zr2MtZ>px=aY%d)6c7rxTXPB$snH z$R+YK{CA*bA=N^3JKsJ`97wBIMX^$BC1r;tJnn1^tJ2-1ey70VPgL^JLk8g46{m+a z)W;!Vh-fL`_{TVBOgH%_eBvhPG(2eaX#l0a0Ndx`zW4oocdp+QQVzLnwL4H0GL_@z zu6qK7$#Hw`n)hW`SM?E^-xhiP-!0!?G0cpf|XLq+6>x<}y z(fw)E70;f1KCfMZd(x(6BJXXV`Ck)f^i7~em~$FrxW|zbPZzBSOmGdgsBqyxGic_D z93F&!^Y5fs6V=ovqx~j~F2W%^>`qik$aEBVo=_CR>A(GjTpV04T}WJ@-Yq55ITSxkTfa% zrxqT7XOsS!XsoE$U1)B98|vfKQ+Eb=(&8Nf1b`VFo)E@$J&w5auv+zk>?uvDE0Ud{ zLe2!0?C0}KZJ@l?c)-1IQ=E~{7efQ3+e!$ULS{w$1xbKCa}oyKW_@Xw4(5Y~2ml^q zANGcz$&V|+l?r;e3V^jGU2hC*>D-J9t~kbJ3uf@bRwVtsVM|*Q#^N1!xQp-)>h2}@ zmdnX@;q=9(k!9>0LO0@0|l}Iz*1@Rz7VG1Wg?P%;Tn= zelH1fgwk$J8js1Ct!`)r22ZmU6jwuzB}9R$o_V4Xy9ZALa?>VtiCk9V!QmMIEpzJg zeGlIfghPNYycyMnIm$p%kvW&I7|wzMik!n~R6m1Gy2O;dau=&E@@UD(w*YxJ>dahc zrh{%jr_8Zvs_Y?=pm(2K>Vb0GHpSwTlsoBCNOnn3Gy2VeZ)j$v)G?F^z|q0jo&iG& z@XvFz07>!ezqm=?=pG9q?4PVBcTCwPJpn#Uwcf2po=4LJEd2>(RZ7|>=@8r^%Y_Au zBnLM0zzP;xM2D!!F%Kf{5HbZv=&L;2GD=%gtb%1=Cf?72Tcj0usQGlpJO$uHOTh{7 z#iVOIbWGdcVkWM#`pf?SUMN@~o{~MxjrOc~DFJQ^kqh*0zIT@> zEi6TnR=e+az!wb+0g$0>y3NuhEken24D5C7kUSj8p7r@85mq7g{$X~fFCC8OWvHA> znebilv(r$hQ6;GDwT@ z2e66$JaJNcAUoHcT@(?QJ27Oe@@u}Obiv(uAov8@cf(_#?a!VZ2Gzk?5Zq5574~c1 z6omIcU~Mmlg|Bs77Ma=Gy!*z;t{T%WkKG!ZGHUUASVUIT&8yXU?3yckPj{!hJ|3^P)%oP* z0V^NV7B(n#wG?~;{_CUlk++Y11J}I|oV^S3-Am11H!b;M7JO19{D!tJCr^EAZ7~{4 zmG&I^T?{k+>k9?pRo|4zqW()BvBT2@oCAT9PZ|La`}V8>fXUm6s4Z!1gYwDZNfy3{?Uzt|j9PgddW736 zihW*edm*_jwwwI7J%|;wWvE?hiJASOano2WqDaDw(bpGAoYZX#4Hf#K9SNO8!cMPM z77D*M-lD?2ZpN|pkZTE&R#4yQo|Cj&E}~T&s36}Ae}FhGV02~^+6X;y{S*eJjo!xw zunS;s5T5)?*beFz6gR8RKbPW1$qz8DQ>*{cTUW#FTOr4AWt!UeW0HEt7wI17UBu@> z%(hGM0DL_-nVH=u;L9D2&^~0n0n%A#2H81)G{&{c(0%lZ1|WVY+qLi803OQ-z66-e zPp(gLJ&RR*75=XD6^NeljbM)4lm)-2&B7VWuNTyqH(=X+#@E>+y^8x_>eO*rHi+3l z^^X@*RPfwBdeZaH4|IlVEto8rpYzGsaPRGj`H$^F<^N+rF)PC-a#o znB7P6C1BqhnR}M@+u5VeEYLk*iof4b4lC1P>NTVIRUF_pxZGIaTjUxHp(^4RDgZzt5FuUybpwauC9I-#M1T;+mT~(m6bkd0TS9Kb_94||~)pTFNbjRWnJ(R!C&h`)vq-JlQnbJPhcsIFIa3J6PU zPWN^i?gEGT`O{9GqCdydx;2}v_r%f08gVfnP zfmeJY+0zELMMl1l%=UW3on_ZP?!pnzY3`M{=zemNLy;WDVYK^4I!MHL5|L0MJPd$6 zC!e-&fp8D~48XGq!P-IaRm!aNm9RzKQP@s`eZ5lGp6kb*d&mCUE?0IeuDxwyEv6NT zx$iC=7toKU??!=|F^LSu$pV5I(*r=cWqY4cRJM=-1<-5LS7)GM&*4y36Z7tj;;j`O$|6ow9B9e)SHuRO+S+)_A;jBR6+i-;vCmy`0%ibrN~YLa(4g`{@u0S^gs+>UC!Z2PZ~oQvfDO=+4|4Z_WUhF zB2}P+T)O_WOUX?uQBhs?yAtEpb$3E!L!$Xn|8M|<0y6tdL|O{>@Ek2^4~9kkuL3)F zLHV5Xfq2f#f}dagFDJlpb``!dAT8S!Zz)?ju-}IJaZo7R3JMMltrA(I92j=&T=z*o zhwH&lRy@)%(0Q1UL{Qdvce=>PCW$DK%HA`3WRyZfNsEj~C6!cW zWUG`!M6#7cMA@0YbDrnksPumK{``Kw|Gv-dKIc5=y!PvL=5uu4-+Ph8q0ElYKHPV| z@7!X(CVE~uk;yV~tq*PdSNC~iwsJ=virQi&hn?8C^faB1&{B8V6Xr?Vb`*0}E$6** z^qJB%4$E6~8>FwD=ksZ=a=OWEz#5?tpZ{2`DAqB;rO15GRey&I_zOoQnhCG^tWTdL z4PQLI)z^PR4#9KCDWLGe3EGHPI;RD9R0zs`J+nl-M>X#Z9pB-MJ0JHl?LE}b|()xB1@m35jk>a;u0(U=D`)GgSL{h}NU83ay`?54fYdgN2U&3}y>Qh41g|l7d!p%c|%nx_Hc)OAQJIf5~ zbGCQJ`cdtqck)DocH>uKRc>kTQ(MyVzOm2JIDI+!s$r$-(8y8ColBQ2nRFk-5-!+g zhjQ||PJAV7X;sZy)R&Uu<*YEO=UMb@kGxRU0qcvAUdfki{X5e&hlJ{E@|)b0oClA8 zW7<5XbKhn1>7-*Ab20v?Xd8RHdv$7!aQ2SK;XUlRd!#>(h7`V@v14r69OqhbEAtMI z`yKZeqK!s*;|WbGnl~PQHd~Zh9pEIp$~pMxRp(;u%I7opRkV&y4_inZ?_~(o>W-0T zT0SJcbmn+q>8|Apsyi&OOa=5EX%{;xd6&LvRF>3Qnef;}kEQi}^;mMZzo%Sd6}gvo z`m%6HK(GFmFS_+B2)Kda;;mkr7`wS!87qr72sVa(DV-TzCNiEpDcHB&&UNUS!Z7V> zxi{^+&8u1IOB01w-k>`|!$Y@z^myrOmk7)v`V*ndk!B$sOBkNp1Yt@Nw{fwn^0%*! z77|zD0@^}zCBxBi{9z>l~y^I+HnRMhvunee20~V)}0P1p_SPY zX{v|mUZQrCmVXVaE-ilh6@8ZQ^84aPLl-G;DIHH=UUbKSg`&XuwXO7OgY*wZ}V??8+t}C}$eVIvT`&F7{(oV`8&&rFP)$$pN zimLcttX_JA*CmpF(GiR-zfu8~hxtAI%G2#MH-*;?9xpLHS+*!aPeJBzb5+tR8h4@Y zCG<(&M0J&NofU#-)~-L-cWcYU1;(&~x^bMt;N^P1^GWZ7hhx%ZHw@R5Q6j>Io z+uAO&b!zK}**n(ja_F~Zrd~Xzj8Uegi%^hRQFi14O`&oTy$;PP4o8a>A_1!E$HHuw z*n_REx68VVDy zsbdXIMmKC5q)%GGMd&yc(IIq(anTCzCF<>A?CzTsb&m+qPB7;j{kqE=6L#K|pPu1b zHJ$6?h`?n>ix!Hn2Vu;P$Is84$p6+d@g9a zWH-%DnpNy{I8MybjV94pZWd*&-ESC&ZMYuO2hpZ7yURtbEm*vGpH9Iord?$#==FB0 z9J;sonhf_hh392_*LEn>FcySyoKxW4U(!x0qF3M?Uaig|>9kI)2E%=flj*)~RGitm zjIg77mNQMwrp6dK8$DZjylu&_eC+B)wm~%n>;A(PE16A*DNP9@8V9q`B(0<}$oFnMzW~nAsZb_};#ZTkP`Er}Zne^JmxJ|byq%|8n(L= z&em)CZ}cf6YV2XlzxY1oiIlP&j>X%LW;CL1%w@+Rxv}t?qxZ|P+XBPXmJKUiBBguY z`zqYoUiu-dBjhYWp5Er3%bJo{BW5{0Az^W|lp%b(+4Yf{*p9;??pODd?!A2 zX0t$EVt+LKQ#)=^*FaSUnarZ3fgA4&W%piMG(5Rav682I)EmhbVE>=-oRU>g(pazp}MVvnTz>{f;M%H-7m2FDoq;FD{ z18u=d+~sE{!VbO`-XCU0Hd*d$;;Q}a!~jj%ny9ih9v_0~udtszc%}VJrr`>&r)rHa z*9tx@Hw#r2EI2pqn<(|b*8P?NRy4M=eSG_YUS`;U>dd zxxS_(dI=Xj14&gA6a6%Oi%zDu_gN2p4qH-vuvv)Lk0i_y-1(KXttO;h*~?CPs|K5` z+3{G1tB*0~oF1OQUz_N{FJW0iCwkVS+(5U4U*X9H#$4Yul7>1Q1&OCHUx~QGAyYbDj zuCV5>dF6Dw7u8&|j}_63+Qp=1X(Y@eCpZcSar=dpRfRvbWp;{`W2_=-*>Wd@#;Wpp z@9jyDP@*&N;`Y0@+v_&px^?upS9XhhzufY;-oy3!u)LSA{y`fT*S*W1Ty(s>A@_9r z;WLw!FT!4!a4KY-JSfMu;ZBmsx2zNIi7ry(=AAe8WwPe)CY{nhpwP|MIW3|a$r82x ztb}4eXO*Vu-l24kpfSmq+LxmD^yA*UUu1nQHJX?g+vfH53}f4xtO;HAZB?7%mxp8Z z7(zDg@(EGdOt;}mrM6&-os-o&=57t6i%g-~Ph0DDm$yx5GzoGCmAI|HB4RPsclKo6 z7MIpZaH_GUOz6^?^x(z(L46h-q}VIR8v3LUZt5Ibn_?*2bB!bY-f^6n{$l6X%Qs6H zsg@W<-Va%K*YCz_v+5B>p?gW4(ac8;Bi=KUpM{56NnkA|V$Z#^ug>}&*$`oWEYr1@ zTO#JBL(3w&)1IN-;?HZvm4)vQG3|2A;{5(WF^_YpV?snMy=k{{ z<5`8Lof{30#XRh}o8TwI8SCJ5C)W|Tc3V^9x#4<|Bk$Oa*-p1DQP1sCOXGk3y)#57 za!5qxwGtccV$QQC*XpP%bI{^6#ICT&X}f*A7QX!D@xwzw8+NjFA8W+4nzwY?)D()> z`(8L#>^H<{$#{iO`>~Y&-F2Qp7y5X!+PvjeXBRbMD|A*^yyCOjUcK>-*mm1hixpPB zv^{&N_~^Uroy(OYgD>@dyQ^R1)GGKc?9l73aMBij^LE2CH5JcF9yOe}Wu5naSE9=B zk_VZbjG`Fh46&uds)s@oIP7-C_HPS)w58#K=*giWbs~11_i=r^3popOEPW&PMUsZq z3gU^7*4SX<(;dTo>Iwm7IaiW3^=_-OGVY>NOQcDkPG|M{IQ{Wc%g%}ZJ8i0V-iJHh zHJarHm9IEjuzeD{Kezy=XFYq!Y@~T|w14#70JC_(p@;3g*}ZiK#-7-v?=Lton``Xo zJWyZpu~33MIc6?Y!gW({le`movhs8P0PkLMUY)1>n!s-#Mr%JixeZa{n`*SbLO^wcc7!6_Pk?)T`)U{%~Np>L*-`qBQ}>hmL>g{}E(**vBR9>OmYr#h5o<7w>2rz*Q@8}B}fEvW=`lvObfwq~xTu09wX zNeqh>mXo6j>+Nc3#m0ig;DLhJ9~VY~L?Vzdu!eHsfU@wyIQ=NY5sAN+5r`7tM^b)) zgIH+U4|*gl3E1o>IHDvD{~Hei2^#Y!I4prI^(!t`5=;1vFHqn&`AB#o?pJ!i5x>zR z;Yh#9LLx~1CW|Bv_ZvM)ywq=HQs773f8mSAld!+i12!PeD+4iL>tN~1#sUIK&(_xx zI7wXB+1VWf=wo!nHJq%RF-Wk1yt0uDK?O@DDC5Cz6p^rsDnvyo2^?Ng6)Q!QQk9Yd zzs@ZuqbLdD4zGkI6TvUIk%=TJRU(m$l~5w85DAK8yp-Gl5Ev|O?xwEpXk37w^TxxU z=n+uSR%K(Mf!Agl5Ad<2v7nKrF{6>7v7#Y?FM&pq22UeOBSnLwA%k*J8X~B}f*M#R z31EmIXA15F0EYt~36PROJ&wi_q5I3Nu+qU+RT&gAZZs#Dl86?PWKpuYshOy$B~e1u z)Qn6Jl_HTPEeLoEb3DNU0IsLe28`_hId>Wi5YLCk2{3d7q827KPej*5i z2W7hA+Df3Yxmdco+giGTT4nIn-bv{Y#I;>5EL}0Mo6r^4RaA3z_Hc1C0yYL%YHk!D z@T6mEZRv&~AYi+FTr9$z46c~SUNetC$1Cz8eWJj~o7yn)sZaRiYn+}uwR z$;f-Vn3~&Lx?{{Nt!Q+X&3*07r7Za6 zvNrOBr7U#zxAnx|E{AjObprwORa(1=Eki;ZJ z&2dBmhAbt9lfV&35+WdQab$67 z+qk>CNQ;Ymd3lL>5yYHbt;KOtQh)|t9FG?T5Tb5APVT1OqE2obP$E=1%9d{CuC^|) z-^D<>re@9_?y~&+kkOBeqL-tKmevnePHtj|mSX14j^f^?F5);bthl42_#ZI;8E+vZ zmw9^q#0*pbW`qSfS(yJ|%Pyfwcxt)<1E_iD5(Eo@Ey zNK(ht6;PzC<#cQVc)2B>+~^ zgOXC9RJ`5Q^xVP37F4Lg3S{*UmyPomo?1#+46+R+2d+7z%-IC$NU@2kt%JLztGKEI zAgXL>?rdQxPFYpra8lU0wWIopWBQtBK1#4QPp-%fs^e7IRU;9HxubwB=V!!5I!G^a zU&CeMbanIgEMqS`6HmP3K2G^3{5{FW@ujuNpH>8nf0J@ZGh&gdoPAZ%R_I)KT)e4v zC{1{sGhgTmd(oWjDSVID8%%I(1{OG`?JpA#jW^HI53X&qCy`P%q8((_^*Y~X>hsE}U?^6>J9_72-FJR^uVxDqUyv9fD z(L?#Hs_}d$sWh5)$@sN7X?vu6ZrPgzL+zf1)(Y_$k1`!?pZBhI`)VE@av1n{ zSucw-=AucRlHID*%-a4)u{_OycV#j~0;Q8TKA!0r-@A`Zy{x(L@|(pEMh*O447k}9 z(cd34c)^r++9ukIp8ZBLYqLjL&6n0)&o0*7{1Pd9qxbv%qb>9s6A9s-JqP)-*y&|< za?g|qtmnl~%)W67A?&*0&%StN=Tg3)*px-zmV~T-MxzkjdM`$$GCT)c-*DSa+noQ~ zbB#lNs;N241GhI4)n7hYwd`%f-!DgJU9tnQ5?yk6vzX}cP)9etq~qt3MBn)1@y zJD;)^KRH*tI;zO&eAI54jPJ_TkF4Itw4D9y;qF!UU4iWX@Y>}sarZ`=GK~t(9dx#G z$YX4MRV1!#6}c@9M3x%f$~uZ5eg;N-xC5cjgp zr`ac-exwm-J2k2qButLnZ>af|=8Vu9)f+Sd&-Bf2`f%9L@2)f0{90#&_44DL2cDay z)qXpZBgK7_(}Gd@;aKMWXqoWlupuTL1!K>rnN_CQ?aW9&Vi z0>>z9$(pAe_!UR+BXt)AXr??$ab28TTkdZu4;J?ee0Foc^ik0>lElQj2?jEcoq4w! zZqN-cwmP0XrgQXoSAz5qXIij7okJv+&!kI_kDIZ%BtHF4`>h1=`{$OIYOLGuM%dRHN_@>4JaFpOiFT3A zB1;?Yo*iP{+!7WY6M6RdD_Tae(;KG~OZTb;*lzlOWB6)Ya(BG%h=6su@N7odGm#~X}>#r}ia2SjZy;qw+Z|s`B^NN>dhGf7AojuQl z=qnx0;7!f360G{HHY-6!D>o~4{+r_?o&1W050w#_PysK)Gr(>mg@@=K< z0z(Gu2q}G?2GYf2aOiH`PE$uqp&h0^U{?+&jP{aXD^7fm8`y!v;E)}-xgHb2fn>!EwM$=y3fxnq59T-+40YkBWC`a@a72X^uK zpAL6PHI}i2>mNxMwvJOw!hW-j-TRjNqU44YNw2z;izAZ8PrzS)-`e$Is(HnoT`%lt zxAknwQxFz^_Kw{;S58p#=nx%ExqIE#{S!;qUSMOWy|J+_S2cg%9;c$_k33OA#NDR_ zgnRE?U;ZWeZBSgL|ROt&dt_W zwdY?xidUFg;_N8@X|F6xkoT&z%8Bf(8c~|lY4k;dT}Ck#lQh_G1?vmOU-^&U^bsa= zxtkUgjEs!P+1+Sf0&)l1122BpVz(+rL5fuG-Q`)`T5}zOJi`#Lp z?3n!e_r~kThkU%Pg)1)j-dJ_Eyfk@7>Yk1-^_$-?cx0~9v!B&l9%$L1O_YC|lVhGn zo7TX1Uu=+OFnbBj#~K>l47Ro-t;3=hBN_2uNo^giQ_WS(6JvTEaP#Q`oHr-RQHGk;Zc;W^BF?}(8J=Z@e|69$>ZX&5Gc1=g@7h6+m~ zwsbE3u4E>}c`{TtQREiQ<|Df!R^b&zt66R_ehv*uTwm?fJyyM|o8EnCF1`O^Ed}<3 zfrQIgx>{2n2gbbOg8N)&j_9?o^Jcz#)V_UF&hmqd?8Ql6<;Jmx>Ezgrg9ST6zlzXt ztSM1jw~UWpb)&kpZrBAr-|H)TR2k0gvXFOWl{&RwVbeLa@+B9-Tz9dqyw+jEdF9lL z*K0CXeo+a1eW2TPnCQDWPSLvhEj>f=rFIpj4eHFNm^LfQCZ58oH)w$WZ7;+n9INHM zeIw_0Wm?>^C}k0hK1a-n{Ib-tMP(n#G|TeJ3^`9&s0{L}MAT^DBaggMX;f@fn>g(r zP1N$;dGp-*@|jM0S3X0{ehho$ScJTQ@us#7h1c#2-MfI@F0GZ_TIeyUaI{^rAAO!=u(qWO_|*Zi5|6I!Ij;RI{ajNfR@XlgprDty(k5f5)yv8j2Nx-R!RaGL6B1xhbFST4^6iG8I z$SAq{K6P`dgh9Ab%LCO^*;GPmZ)&#T)dv9B|uQp~Zgani9%C0h>Nls*+#5z82>EnSr(nRES7Moyo{qn_=DR_0yG zbMln!op`C$erX`c>YH*H% zt-_t7I~k@oNNzOXeJnq&5T>cFQSQe_E|WPFlCyWpM~IIoks&(#p?bAxv1!QtVADYM z)ggOB2AB&Ax82|N$i$(zg(;cIuj=rredx;@gAlY$8UVgPlqGyM< zwEE?n&N~Xv^OfIvKCZM0N7&%DaY)?o+TBZc)894sz3-EKr|o9uHsR{@G56CNH|;Lm z(8)p1PqGzfD+a2r?(fXAd3SASasA@YM>ib5Uh=pk?s)pC538N`$sAa*`^_GA{}Uz} zrIBu$sh9Odr>{pDifobFttj+d{GHxlu*d<4%`qSZ3-(HHxLi)I;N5&}<)V{}FPJO~ z2M-!58wS4f-*e0^>9c~*?(ZhwH)JZy-kr(fPcid*lKx`&1^br3yD!qD6Zq`66V)=; zIo=p`&-C|D8WD)Qd{2{XxLiLy#Y*++wKl^gbz&*9X6+sFdaFflnUn%zO1Q&TH?cd(BOj^*07`A8bBcH(J+iH}d%eiPk>r zF8J?Xx@WFEOS8WJDfFPvz-oIH`_THCoO=!}%Em5jStDg5jU#W#%8m_nRsGJN3-fS} zA3A6q68zdHwVuShVq;k9)V8C=p;<=i!h|->by}mDsGR7H(Gk&8S8T4-#VE$4#jcAz z5jz%V5mytxE&krs^;b__ok*}vXh>8`%(}Me+NC6hB+sO->-yK9-H^PIa&yhiQ#YrR zos!#c>E0?!A*ZC=UU&QK9lARncY5ybzgwNEoSJh_^j>1xsGv`OGGa5AXP(TW&GO0mnr)Nao@1Ev`qB1BCAnL3GxNmqk{|Ouj>%t{f3|?7 z;8?+Ip>N?xkxNluv32o>662DlQiIYrWxL8=J<)tp{#5m8=`)3Ah2^s4kDp6FfAm7~ zMRtWmMb=Bw%gjnrW#%i1S6Nl$s+?-6>fF~duM2AAYl>@?YoET+cvDfgv+i~Mp8AHj z``@-VSTuCMb9ncy(X(-~DX4jI^T`&DmP@VcTCcSUx23g9wC8sycf5SB_rB?a`G?+4 zx6Y}L$GX_ME`8$tl+umwe%zzlQ~lZK^T%G7-pRg@FU!8f_6zlA3~U>C`PJa-$8WCR zW(Q9XaStUA6NgJibVgc79Y-g}PL6Yr-})~3{n^CciBFSWQ;btl)56oaGnzBavyQW~ zV46O5Y-nEWp8;B0P> z!Glv79!?hS;GMG`azF^aiwD#4AEk3h^JIp?QMI>pvUaz@NJ`=7X3qkAI(nkWTS!p? z*tmj+FevK^Y0PggCxvu{fl^}N43B_-f`+6q1(L#78aYFR)~Y(YN@Iky9c(>q!6Hb> zVLzFKb9ENR2nj>n-L~!ymY^PaK!{MzE=gk~#c>32_-YkH0Pj>WI$DTCrcR#V~~e1)E;~1VDXr3^upG#u)e;4zMleCXG?@ zF?GUdfmIrC493vX!NJ)Jqv!w*HUOdu8YE+|F0llvfwz=k8HZ@9pn=01D|*;ESO7nn zSpuyIICzvrL4#n7P(>DffHLHOl#`7$903PCOLuo5JzxqYM!>;Fo1>|#JuLc39ay>B z($NKOq#@ekC9q;74ETQ{NSL`Sh01OqA_63e2ZxJ9!BHs;I2(Z>5+x`AbE;bc=XgnD z;6e_mBN>CGB0K>EtV|?=<5b9TM43+ zlrh}p1iQRcJAj~2(wdVFYzJ%UL48!5ER>ubkpmTMEDQ8iNSE<*bH#zPQS%$@|Es`P z&>$P{wgHjq1kQW`Veyj4R}#vm2v6?7o(q%{uu=q!x}`Tp(Z}7=4b(zo5(w}vAp!4F zQt+;%L@gzN3+7=hfdFd>1hiHa9O(k+D4K)>1d{+4yhAVv2?!=3p{hzHDkTMBq@*AW zv_66^B?ZBxq#zi~!8-&~Qi5PgN|2NixZoYasH(zRRaFTXt1trrR8>(VRA^LWR3elo zS_@GjGQ1ODR|69W2K9n>2u2`4Fvy!)2bF?(2m_UZcSLupIZ$M%7c7BKP$_taq@d_j z(oiXwM|6i72nO|nTp<`LBGeA%At_WfRd7L>pg|!V5FTbwd!rUb4Thq^8mJ1qqvE5| zq5KiyQB<@N-q8z!K^@^8l0qGcYL3=X90#i)7}SyKY1A|*GSm^4!zZX98VB%B5gr!7 zM+gRWgm=`LXti4=O~BJ4AT+2*J?MfI33s!7`{Lyrc3#7}T^>;~~OBK~U`>82qB5!4z$2D0v7& zt%o_NAR;{4P@#^fUs28B9R-3~qM-~`qgn)#2IvqC>Ie0LcL;zQ3nd3jVPrrUs1!9y zD2{`VC|3vu^@4W@29<($)Z(a25N6Jt2=_UYP{oCy@S<{tdDK-(N;ojwI+_JX zcEJVCVI$XE3OaLe!QmBNb14zI06K|;R?Vg0G%dKuWVC!PB_o$4WvGKGg}Wr>Qcyrq z=28XZQdC6C=Tb%F0_e)hXw_V*j9e-zX!%^Kf?Q}Ryd!>x3HksHgyvuw`h=!XM?6u9 zNK#c+g;xEmJBg&Ks-PlCRDeU3sxlcMlB5Vk960eTNdV6ZpjuK@8A~D%K~@>744)N# zd{vd9-xXAlxfzNE#y%ndB!XguGD#JF2t;b_&nW?jD@l+f0`8CxNd;1aAdmzB5Rn7` zXdcQ$CG%?v(0?w1RH48mMG#vH@&-f|sj?vGkp4nnl9Yl9AS4MT14v|G2^Ek744_)@ z3(!eGXykETN>Bvg%7})*A|x_2EtLUK4UhsPC6QS-6cKzBeoX<;g2F>M#9qKS&~!iu z)I88>Sj1^mX&_N3-ES!c%kL@R4h04XfI37+)lgN&f#`-3{B9E{C$$`)&xt}67x6m|paZSZXawN|UGsJB%O#`abJjeYG2Bc5`QUF_k zHaySXRJ)@s4)TKLf|>!H0D=TaamW`(Ad*25SqW-NR#X5kBZC12)&lPcf@{(1zF22~B(1jHXyWzLlleSxL`Wr1Ag zQW(Aj5dS~agrwmr5%9r6{r;B}MW>)DDk4OvrUA}`y(&-zxR0vwTnc+%fQ|>jiNqJG zBTk88?Y~K>-2V*)59ER_gDhYyQkpP8|2-_IO&Ho3*c)lac-RKexIlb^S5U$!Dk9ub zouOltB#{p3uVVn9Q;h*#gNL!NKot`_s{o;);P8X+{@Kj{eJ%)ouKLyUAj%;F&?b;@ zLR0|gK;-|~^HBGH2^we_$`}3-6bxxfO#al>+Jb0DyV8YI1f5z%jR0zj5C&}=5JlPp zXtGkMj3h94LOCG%0{u4*8qG|;>M6f~&cDInBfp{6isaIhOiyHLmzv^|OeDP@p5B}yz5oDkYVll{lZg%mL5s~tL>4~VqFU$oZQ@Q^V zZ)n^B^tlkEh9c}V;c^F#p*T2jPyz~0SkOGUBW0-YsB0)i)GE-<07t697LGrJ`>$10 zBT`c&{!l4k>_Hj+6m@|24+EkB3Zx(a1Rx2V)&10sDWJN8PVcu6{Skjq2KYhd8FM2X z5-U)5Xy19^fjln|dke)RK>u?{E=c$%MksesM76M@B3O>k8wBTiKR6APCTu@sfaY_}Q8mjZt1#SJap&>eI^WUR>KB@Vg=DhNS zxKqLwF%XjfbLax}xu^zi11ome&%(_HAQkWg$V1KxcBTuD?_h@gvoXvpMx0b>*4wh7!pcFi4IBtL){mMWyHQ)hR`IyqhKlubCfS^tT2zn8XnBC7cwWh1crdfY@ND=`g?584{XYQGMuhb zro=Fs;XnmV^J6v-LKf~O%nwyGWT8}WBLplNf$)-G;3xgi`?rtO5-5AP_$m>GRwQ(f?<+QFqM#GDv`mzpz?>`yadyjYZKI85N-l|1d558&6QS`~C_P zasyw4D>X$O_frw2>Ng*Qa#;407XbP{`gp#^h_{Jwlb7mHWbXnM2p0Va2WX~Wt-R1P zRrp^VvJfaB|2K~N8&s-u0e5Pan$GhtQ08}QBT`VjfC~ScL*|2k{2%M7y8i>nKaiqW zejy+KY5RtOIg>e7jX^JeA-~s4p4~`W7XZOwN{-04HLlpgA zP^m8cB?TQgM4#V^|7wGiqCapaRro)8b`BKD{Q?Kke<}Lo^8)UL=x`81ULzrWDR2p# zEh{%>C!hIpF zQ6%6nh=RPW0I>i=n(8_vMTMtw0Fy(o%edeajAF1~JOt5yDf%zZRMY(hiG@@I=%AP~ z^+Mjtz?g?R!q0Dx`n8t|eWr2&p7TZF)!ZPrI z>On8TS6ToGJOY$?n;k!S7Xrf$4Q~2Uf`&S;rt1C|mPh#h0teB5Df%zZ0R4|TLYu%& zY3@bdZ|yP^j*;9v;MO8DcthRPioN5E1}?+_h!7pN za3CP$hJ5~mC#bsr3(B7q0q7L2h%RsnMgaW`(*BXr9OPjC{|9eC?tiG7E2ofHzyql6 zREHq_9PG4+a8nVr2{PI$g7bFp-O#T}P=udfj5r0_7bt=pkwS-T#Jr#m?r)*TX@H?2 z_dm8PiUpuFut`y0YErxeS^mNukose zM+1A%RH?M5jyxKr#HF&1Np0FU_y@$RZS>B>_hm1%wosyHTT^LUKN5R3$0c z#gSpu0W_c?_4{{+k%1`yx+;279ULu&ry`&x@XveTAJ8oPr#IOmGNn_Da-V$Ga<+TSz4P$}c5=(qA-|YJ!QknT zGtt#mH)~vd8ot<$pHJ!_E;Hp_YII}!Ik~2Xgha2QN@**84c=mz%F?m*nIEU*hnO8- zh_sa|9Bq}-eA`HepBTv z16vr!%Eb1wJ(Z@i@oC9Dm4W7))=g=)cgv68m2}?WxsUB3`g@DL!&bz1U+^&>Lt3Bg zh%RKX*Ym(G)@HcbYVoLf%67XrW71-8!96UaLqi|wSsh6YF-$Ds#6A4w0TWo`Ggp`1 z>7YM-g}%~~q7C+Sn|cj+#Hlv~f&GI5HmTrzxEgafzZ3ja&q zV=oxDl>{>JZ-2iFZ#R5dXhLuu|Iuaq+tz$PF0hzuC_vuO&7Ee)xs;PPxyJUyxX3&j zkxVyK7#!eW*DfljVHYFoji!8EEV~G^)aa5#cc@%cso3g?;wCq)C6&gcnEdgeyx3s@cew#^By82<)eYVa; zG$oNfpRTvgR+)Wh(=DOrnQ1$ALrU?&t`a`~vJa+#Gsa=ZV>+9?m(pK*QS#QIcFK)r zqo<|Z8^c=>FWZJjxQ6q5q6P#@8k_HCRhQ#Q*1=!sQ`g@4-soW3J=IhA zss!1Gv-VQ&9>~*etGViK@|ICEA^3>LBFBh{uU%(-_j!j0dhavdJk&Civvn%%)9Fh^ z(V?d~jwZ~=_j}Ron7OltA?s?aKVx4H?RfscrvU7esI;MF8MzF@#xL2AJ-^Bz!q~N< zo#0RKWR3bPD*H~$CIKfg8(nP_#u9e;Z2j7#kB9Bo(8e3=oUy;AU@T!jv(iLsLNkGV z(5ss^;z7oky!xG(kVOe3wdJD%&x}0q@x1z*iuI>lu1pm%t*4Dif5hm21$gQN?*@F- z4j-O?^=HhSeb?NTyrs!U_n;#n8DuhT6$wVjXj zN^UsW#`o*x7qOw>ms;uSw-mG9DWFYX5=fSch^{hd#*4iBzSJ8NxQDSi$6T5{wX%PVevw1P9w^9*?99 z=`O{bt}~*Ead9!|SNV|hVdfe8y4O+u+aJ1f8t$%E>B*jHbfr;0GSZoPvifGr-Bahk zyJvlRw=>m)A?IfGt`CO$?wB%!b?0NFU$6~TREFI14-9@%BC%({-f}QM&GCpr!KbG@ zEDXXIJ4&Cj#lI?6Co0-x>=0*{d7!v)S+&i+1i|x}PR7xPG^91pb?6u@#@dOw@6ArR zRd~c?)yCvWZKUg5Uw7>!T*YT@9ZP3H!KUvJEe7aK9!P*Wab zUrF#S=1Nbz`E1LETZ;`%Br=5+E0s@o(dgw z3tjR}s*JP>WO3v7c^o&{nNOS4;iAjuq?jFyBd^tYad}5dX+Y@~-*a;2B)=6QTe((B z9({m4t|9M4f9ai0l-4qzYd1x)Nw&341=1pn{CfQA4CP_cGMrpS`?EE6rOV113}h|x zeaJIyd4*0N|K*rM_vo&mlqUDh`_{kj*|fv_Re$uNUYq+@gU)H|=+t+YD_^K_v`<)j zYQ!poCYG_$$-DGaL`JHcr}L7p*uhwa((k$kuZ3tTy@CmSQ5>1-f?K0Za%?I^b#F|W zKI&{WN$P4(S<|~{RcE-**Yc~A1D;C3ts;Uc>#J+?20O(AGFlVL;&m^T7VTeCB(A>R zgQ54k6NB%jRTWq8Ovf{%hgxD2883Y1Jiu{gP4!~B>-AP!R2}!nF=1+ArUTL=w=o}Q zJ`tj9!ltl$qq^jpGXEWALOj*)Sf40Kb|t$+wSSUd$IR6! z$fR>FuD|_G5}R!N>6NSUpU-Bz)4V#{8#gQ86X&)`dGTrN*tV_J#R)zj`sR=W>%xH#^?O=_jiWH!wO5el+Qgk*Z@{()2~O z>0{VfhrfkR=Gza?$@|R$PwGn^x%0kF;axwW`K$bz7Uc#(doFh_`|6Xl68nZ)uYG7Z zBSW{O%a5HvJ5oK+&TwbfmDy(ojF`04#laD~P1QOL**bW}cG`OP%`jH0wN#yXvu!NAX#XFQb~b_%Q0kGt7=Vm`cVPRx8`@J5W}m_u!t6b6ILc0*jxc;oH`n zhnEKLww86fNbYAzD%}~O$xvRF(dLwSA;Ejic!=svldU0~K9B0-EgKwHJuZ-`Te*7+ z?`p;7K5Lm$n{u}k>+siFxg#|$U(lCVy;HdAsnk)4*0sJn1`Y?0T=5d7ALzLieN3F` zhEsx7>`;1br0lI5Z#;D!NBs@X?qs=pl5fiEj&()Qs=U%wy1rwd915=5yilt4PG8SE zyss~#Yh@;vt%hGUope(9>XjG5IX?tn!g{CH9<5_6XRK4LkXY%HWh$Vtc;EI7tt;-) zMaT{AT_I&%@ijcmUMItd`TZ~x|Ba2yJh#1>wto1AtAEUQV6Axe@R(IE1Ro>_NO|oO$ymonC6in z%FN`PkRszLXOj86>zuCV1CyqACNhcN6T)g5=`D_LHVC`L9T9M}_+tZ!#a2)FGV`+6 zI^~)ZEBMFN==M5vH-DRKO<=sa;%yE6dhg&@k86laoL;#;f3h-ziz6$P;q3iIw;1;@ za<{ zre<3nGcD86V^H_Fc}J`0onJwBsA=wSta;9Eg5GA8qwknwrG{6O-f!mH7r0~W!9jin z%jrzBVKMof8y|YQyy|ol`{S{v1B!7*2@UE`?VkI)$EOv{u1^_Rn*KOd=iSWoSQ}T@ z)C;qy3a6*oXGz>a;q+S`HMW(=)3B*->iNV;D`#Lko_UcaaL48L(l3N@^D`@Io@*TG zIp@f*mi~O)S!2O*lkB9lM`^oymIdT18Q1Ra?57P##f2NCC2>tjD;n#av$k6zC;5_N z+<&v~?01H%v4_Sp7gw+7E4aXT_)xKamuiRSH{~PR@q**NVuZHLsjpi;+hKd{y}jCl zFK^Qxie{c(Qkd1T*SUYox85LLhIVaY)Fx}CHU5^W%NP4ES-e*<_;A9PjOJC*P9-LsdBSS@r9X+cqqlub4ZGX#`|_!RD7WxRoTN&ooVTtW)B2?w zZfeMrdHLT=o5~5a0<$Zw z-3@)+7C5>3tmVtNhFa50+k2lG-0so1M;Pkia%w-ecYxX0^PwNpr-Ow#Es|8XmCSAaw^PWw}Ouuq$te3WyyhuKVz%$bfm69m=1 zlI5o#_N8)p*o59s_%gF>iI2!tgQ)IWgN=qa?%T-el$km9EzesU-cB?<)TGI!xsk`d zK}k^VNu+&A_zm-WBA0y9habd-XPJGUaOT|7>eTi?*U`TCMXM6a9ag8whT7n!6LpS> zoTD;3Dj!&-tSM^r&JOojDsOc+?_1~nw*iM4UO)C~GVL4k`F_Sf^C*u)gDvsFAuszU z;OFdEB$`-98%jb}KiG43?3ANj0o~|U-|tUGc^=w4-5wnL?xEJ+%B+khR-P|&9n-fC z1;ym&HHi}ru5XSOzLra8^RoDALz2{>g;&&oS+AE{iChj@u%|UmieOKy{9ff+w0}ZK zwDRJZS>^tK4 zM{Pz&J-r~e`%PNZ-VI61Z?zet@l2`m(dXXtIJmit(c zANWwfsdn6JC=2Ts-=be}=#wL%PqTIOwIIFIH6;sTB!vpDWR+_K$mIgi5XYzQFW#{!EE7Ku9=gY_=YzEs`pCXAk`ZkB& zzEf46U!{%vvRY2P?T;JJ8{PJ))Vk2Gz%M(wA|@z*xBZzfBV%R3)0X`Wjq>d2x2Lzh zackOpQMawYcq4BDF+=cu6xf6LBCYsZ=jF256MgF+O&xfO z{<;bxk85A8WqNIV{OQ=4(|P@@dp9$GD*g28lgN~n*Q;D-oTn!*LHt!3o4)6(<)UFv zzvrE%Kal;-IJ?5yFFi+*_nq-uCER_NmBPJcBMwch`|~S1YZsr+@Oo=D^R27VdBWK# z*=?d@(}tLW$$K_Dx#`B^*^|%DAILSneV|bmJK)qJUl&%DPbQbpgg<+oeO=a~V7T+q zm{Y6FqXPl`DdC>0v}eBo zfnICc*yY<^9riCDhxTmgcS~-&T@c}zGb~_j6!vs)zvRKgaWC@g$U@nt3O;`D?IFwS zjs-X;;fB?oUP_R66AGBHe<1rY&`~~Mf_5vzbm2%9U%$)s{zJDN4cpm^6?g)h-->!$ zU-2&vt=i3Dyr`_q@%b)V8>aWqdj#KWeL5|~_I2~?)?*rG>J}1ZxdsCf*@Z(ZG@gEO z!asN}`rNfEUCr}A0Uh&>F6?)s2Mxm3S&wci(tcWfkvSkU#aD7#-CsFX<8v}Toc^Ua z$>1gL*8xKRwkbJ>B{HMUUEAJTwlHpz?G?M9bT==-ucMJMN!--!e#G-;hNhV-1j)gj z-`dljtz7zOe^02+vGL6zgSLT$H+ICy#EzN=tkbG~S@(NoIat){KsgIRh9LDU&4V>{!PrFjRS0y}3zjQe!Z`;j?!V0S|d3pMyNv`Ao zpNzIIjN=uu{rBky&PQMU?(Z+LxrLp7;MHW?z}vK(vBb+K1oxX;PuXJEKABu^FIC{r zs>`gMxI^&$yAHMYDSev-Cerql)1CNo*xv7}FX2>Z+4AXcI!*eY*@GVoPHuB%e0{x8 z|Er*$>5F&=X{QIB-kA+I?^m5wIl1O>rQW0ehox@}6Rqdj9ox2TTYGHV<{sO&ZQHhO z+qUi5XP)mpzgDiKy_2TvT5Z#=)ZRA3BfZC~)aNQtW5cKSO+qXezS7A(a`AlDsXt+7 zftXz&@t(K6Ogf^9glYQwhw+h@#;IZD#vluJHOFOrG-EdP+bzAgVYAkf`Lvbvq}^%g zc&d4~UfJeG^ZDT=HCN|nhClKomn_o7M}6}aN_`5G9;7>dR&e|sWFCdjMr?VYc2ffV z-keiuYUNy{o_mrsf_l|K^Py=XTyf(3i?VrFG<`v?Nr0aV{%Fz2(9oWrO{+0>RKqNR zg4@!z)8Xs6Q3*`e9tC3dz2_iou3NH8ZoqOzaxuq2#WcG$w<58RYk7z#yS!z?vEd`J zXE0}L|NM#)b)uWM8-!L)uJZHs@3h+V?s7vehlVFJK2P)R)_^X#8L(9M)16P*>uc_( z+126a9nQGz)NFIvAzGgMk4tD4Y-n!`J6>6?T_N&4KZ~l|^=OH&p%pvy&q&?7hNF#E z+WYo)L=)bP)^l3nO2$oZsP$@@kwxk5ME#2u^ZQnbmTRQ!9kZ-cMWb-@qxIx>7sui> zfWTuyhEJ=WE^+G#`UiLXWk>`*|8~Zv{c1K{MPbh8B-V`y|Hk0XC^n}1Fxcbm>RQ#q z-NwTZTWw`lVao zj2!TtY}dzAmn-WYp9+D&Cvs){WS@-No8?&-%?SE}mSea1@sfea?OB()u328Olx|=~ zjr7jSAu9J>?P|X9ufvU-u#Htt?)x6R_xraI~5k*M2T zwVu2{9S!t`uyINaq#|A0o5M8BTs8@~6xhlYi!R+Bf+P^8vsWtP-U={%`Cx?iGZw+t z5N=zH*LV{WU+GW-i*RIN5KSNbfqYl7K^B}`qwH>*#6put)B*RJ)*gwmSIw!uMK z+wrSLfj1!ZWBOgdLPn<1^E&JENLTUQo`7COt=QK4iG9dQzW*8;zQV|Gzi<#O<~ELR zG+}>%4`5XdgL|dNm0?}&&0awwt@GfMKBaGPgCKn+1ASUKGFYeX6;E%lV9xF%2W0@V z<4&!Xw1dQtg2dg|*7Q$hzF~F=9e(^jB4K zYEaco0L^c7z*;Z{$zE~rFJ9Cpk!em#wcysXD(1gWKsbv}h=VUE7Dix9QbCuXy50&0 z%?r6u-0@D-N8RD8AedM3oWNZfp}f9Bl(g1~? z#HxwtWTR!9CQ3D@+u3*2*w0V%e2vnFTMyS%lH|e z)^@lm8JUWsnM}&$Slk@YOJ^=g;{bDK=X692gdqJ{738^ zZ1US&0=(%e{qW?-Vj2=Q1i3ZmRyh1G+>4*a35rIkLx|s-bvMt{p^rirdhK@36Rfba zq9nAymJ7XGDc3iF$&%UumAw`3sLWQ%^b%J!@t5#>7=cn7E>xUyn)1{*QZHQ6lq>@Z zjA5ayl`Ixcdr+j4K5~Qqr9BYgK1g66r4TOp%!QjkkLDV2n)52O{eTCdtk%n$#babH zxX#`(!(^o!fpC0(-Hv*Un~IU5-FcBYy}V$LKs3zY+6K9?qDW)8)A?f-pxoJt3AFYU z+E?Y2`%VXa;z8qofTx0) zUhn4y)$@=2{e*f4;GO3&8ici0c3F{GWX{5!FX0 zze4!swOqVdlUS$PR~W9dJl!6_Ba*^=6=#rL$piEZUWLrgM!#<=R=*iGmF|!++k9gb zz5>mDkUi|gc$;3%uUwnzC^WI||GZ$|lD?G|aqmD(Gmxu98R_(vHVoh*BMLg_4m@my-Lf}25M5c$^83I-=ES@P9MC# zWfq2)UAqOV8cTtq8Q)LOZ+^Ou@2>rNcjfK8mIDaZ=;O6oMZ_D80dxpfVclfX#NR!c zqF&0R4tC^FX)*+0e%O@q^sXtkOL8rr(zjIH89kfb3;3?jSU2!229~53wSE{~(p}&k zjS*sqm!m8?%EMShzF%obszX4oorK@#uDt|9V(PgIvQnO%RTKu>8hk<)tX0E9j&9q3 z)B!UJ_rbDsUbo9sRfa5Qe8H6K58jZ`7}_pum+M~6W7j*116VmBf*(}_(yYgdltmLc`4q|=j zuwZ9N6Fb~Sb{V(TLUt)eC?Zr|npX`E+j7MDKu{PAQ&--G!%zo?h~Si;@P%5c^WSeY ztSFCYw)CcW_rO+%HER^hOEzrSQ3nff<^?>{`n5{RltQfx_GnOc1%p-rL_^qv@6M{! zw~)#Gq+_ih?YuXUC)KMKFi6!M_T}KAgnk}euPN8}6ydm{u~s>LEhGO!sT-INL*P#) z<6j#)mLK|HWKmP8r!$oLEQDHdP5X-R^(g_G7_4re)-1F*VMqsxIC>KHWC5!PX<0+_bt?Rp-00c>P*3E3S9g@t${OzQ^`jhTYIlp&`kXo-~;mLip3BhCTEg4-O4Jct~HipWYYXl^_7g4)GaQ}(sU$0$Sl6N6hPQC zUoLgK@wwX1VT)yPCe`pl4wA`tB)O%IR@FN^f3qt3X^NmN9auCf*kATrF8%Siu6tAP z-MA7il$7Hv*q_#*tN!t*tS>L;D}KdGSab;9nP<9b8tf%1=$=%=*-1BryO7hXa;_X% zoa+>Fs}N{PJ)o)l`LMd1uKsy4+ApKzJq~|4hj3cf`Mmo-Oqck==M58hsbXA`MJqRP* zOszt0`_-7V^8TqN9vv~-q7L;l77(5ZADe1M%enfz3-yq8@5^N2XB6F!%qpFStr7ml zl=@)!FZf-#Jorr!Z{lsw>8Jo_TH~1vz@VYp-7f8qyVn_rm;Mak@!eb;gu;gO#-TI4 zSW|ZKVr67VW}Upt(O;$?d78%+WZ~9cER9WnS=G2fL%FyOI6r=9ZEQm^dXpjt5 z#`w!Wib2kQ8#O?xxINd%?5Iimv9dUE;ccZbRgHhwB0mW5Y7xs>_;1SfM5}_JR%1Zl z5%lr21h_VNtE+vQbsxK>ByTMDC4(J1A0fML~j{-OVl zOrjaowrtCAllzl5^5?}f4)ki&Cji8a`yd^FM+ShVut%xad~mQNg`u}$EPVT<;@FaS zTvG3jcnbJ2YpDlAL2?Yb_nE({39G0CRtdD(Z=OtFhn|4FCI%S(z~!feQ~LGlfa_V$ zQS!BMz(mxY8Gc@=lU3s0L* zxNA|4lCk8?Hlof=rU%D$MXKRyJlW`52dtp?e0QX@bqWy8?|3vysH2K@U^$r>{tvfN zYu2jA%MQN&l&aL0W$gR7DZjaB0eLn>&*I|Hut;Eiq`?np^K_?i=Qoy+cWyn5Gg~Vb zURU4G54&7G&R#nnt4&$yA&4P-0m<1{4={M$f;XroMiFWSG|b|qKwNi0l=8Ssu6ZyY~d zn6Zh3Z@u+f3>RBbmQ_n%zb2u=>oV7R>)z;6+DH=vH~~GPDqD4~aRx>z-`?M@*!O{n zb@&PqqmfJ`u`BGVc{wR6Zop>go+R+b7q7-p85IGme2=drRjMj-`ICjQ@)?o}s7Fk+ zquBV;-n)YJZJ0V&sQ)NVx-h5O%nh#4(A&rytNCpC-qI0-g;Un=ggd+!M81L70xjd8 zv^iAXT_sX<8`b>S@1rBgysE@>eR_}*DBP8s_Q2?qz_tEZx}?)69>l;TqoXvx3-1L! z&0tZ>*01ju`c+M94i4=ua zlp&*MCLqN8iQ6#(y=)B`!v`RHUSmkqgQ$_Km>021mbc-IMx*_agW(oBU;rsIPz2?X zZ`j#&((sT7_ib-%LBF`ygai!by*~3su0Id$=Z%t*b1%T8kVIk$ZDRCBP34yQB^)_h za=Rme0$^pZy1va1QQ@xMbxk%3x(qqT=LoeIDgL6^mapT8A*cj^h#+0Ayc}oD?=qu>;q14{@fmb z{r9`v{szEFVR`xO>I+{=MQRKivbnq6}q$PAV| zIM*m#CMlF)d>=AC>vsc|Bd|aFl6f5HuOzcDf{qqfSmoC!73ydVr%MQ|!y)AbPKT-F z%4DMpuwO2y=OHJit!-}f430^~gz*I0d6RkG@cAl7Gm(JjB~`WrOrtvN zwmv%xw1#dDuyoe43xg<)4)((qxl%EHkSGq4pjO&=;p6OEwRnpn04$1F&(|-J}l*kzacsb%W+^USs}*Ko@+rw?A8$T9-j-n7Mu>|N-xE3?P;nulPSf< zUoOf&>gB9J3Wwb_@azj3s31ES8q}22(HL2SlgsOaQvt(5H(E*zh%x*!G+-!!h%a#j zw9LhJV;ehJ!%U6qtvK_DLT(mARJ&H#XtWXeiql#tmL=JZm3Wr%R@Si zWLUSdi%Q~Nl$Vt;b3NV`#4WRE=oq#rMc|TG()oIyYSK5L^Tr)IS#++j?e}|`SPHb; z6&Xz0m{CH}u3`?g#eCSlCDVHYW5N|KO6WT zvqt=7!GTYAmty51Jb*Ga`M)aL5XF)Iqr$DvA}8LrGMc^E1q5I5UAA^x;J^pE$XwWc>#q7A5C0I+oJ^n+op`wQBd4C`QMVhT{FJuL4RYjjs46q6 z< z`y3azq(42=-Kok_P9)(ITqfEcpXMF!qyhGukA~=>neF}0NAXO@EF9VW**SU+S$2?< zH(P2HiAgm5j=)28S2sb{x!BE`TRCQx`-m8u)qX*o755BBWo3UB?Stn#<^#xN?i_Hn z&;q-1E^U+rPm{9_6M2l{$$7_em0v3qp14SSO`tW&^5r4{0X!`JMnw`+C4gX5s~hcc zy!3|6Rj`eeXX@%}>pVvb6%L!Td&%VIaGG|N$P?ykprJG9#+E4g0;2GX#!6H5Dny6;F8%7RNl4mG*OXDb!FdRgQD|6VLsDRn*!eGS?*K z`g_uCZ_YLTMUEuXXnr~rGmKNaN}O?G0SgvJ7Kwg~+}prI#kBpsR8OvuH|h7>Er%0D z=eew2YIB~$1_L2*I)_}ud#MBTJ+Ew=bD1VeU0T(u2j^;qhFt$gCb8d8ePRRQ5<%_sHU8qFGW5Q5QTbyYmG+z)>L7l!8!SS)fD?(Et_BM zFQd33OP!4Ytyuf!xS9MxA}h-zUU9V}KqEc^KH*=pP(F`cUBQLX9siL7w*J^A=TWIy zv%=EhtobC$ORB4z?}}AkG><)jrSldmi|M{JiNS)_onOV+Xh=0@VPRJ}%3R0}mHw&^ zx?Y3a4H!s#l}b)tjTbFyt3E2!j3-N8tjO>2ICi|Hn~x{U?lJgR7poi4oWMGu z6dj@*LA;&oEG$2IxqtM+)7|1q=u?$f>@CbK)m}$ zk!4s>zrH;jQSeX<&1$?EeZxE#%uJ5d!vrLL;_y)lSNYPR+XJK77Lz1*Umw{#0c`7e z@4?is3sG4@{{b^Pqm_%KVqh+m7vs!SbG~q2Vw6*zPNrM)*gm_B9f@T3FS;7djU8vI z$2gQWC)5kI6HM8V?kXm^ByI}2nND+Us7v{iI&4rUOOu?7kqKw&N1HS%9(VhlX6nbI z_{~Nc{_6>zKPBVI>nhZb#``wzlBe#;?xWaa6FZtGX96dW7b|X?2cp$B({2|gn*tZb z1fWi`JAQL8MYP01mxy034<5>JuqH4hk{DEziuKR7Z$iz{wWBi< z<#XnY6}J0-%uj2@{P)Zmb|W0@$}J;ZQ{1xjm2jnGp8o$ft^<(GJD(lr-B zjmsRq*Dll$*dQ`Kz-nwRI#@ES#ZGZ|$7*@~hD}kknHgZN^-yn~25&IqVbIwj+;CRHMg^=ec|J{_uw*3l2abuLBv^x>B7 z|EwmUKz#qDSocW6b(+oxk zJ;sc7)>Tg`z46p-rjT1kYqL?SRnC|2+HOx!!2AMczm@(xTuN!-vhOoq%HQqA2prolXfmDSo&G{3x z#FfNaI!_X4QCvdtxzSe{yCvrksWm?O*&uAoFy4N&$GUUna!zFy@G;&Rv4GQ;&GyOh zPBDL4^z%zh@jmbZv80i2j`i{1O)Qip=c;5@EnbmJ0OE8L+gRKmBr8jRP8risNrWUP z6{K5hnz-`Srdg1vZ@(TrX+U1WdKPnZMSaOsU)`uwUfqaQuHAl?Q*M(bq!jc|j)_^S zk7}YCoR>gQ>mj-f?kaI)LLe#XMu6F#o{Un_cV3nof}+G&p?&VZQ~VSKuo~C1sUDST zu4n7k@6zS5Xt!L=JT5B?L(y+%m!q(j#6tV4ZGxqE^D^pI(vJNcjaHMoM#%d2V+o~!>YjG_9%=uuy#Kg~6qkjBpLcG|m z(eKgE3caspE`jG_LfxfZkYPCLV2Nt zjgdKRH#OL`mus*I{LCpudCArbbHC5w$jH1zd!a-Gi$3WH_U;Hx*DkG_jZ5h1s*^iQ z+|#iN?VP2$Qi2+<<7{1}xl*dQP@2N(sH&42H%w9$(Jro&E3dc}y}t^Lg!)W6suEw* zuKZ=mMfJ2>8sw$`Iu8%rZTwF8oO zZ+AHL-*(u|>r&-;=iZqkpMu8YPj4jsKP7~0kLQ?E?H_V@L8{$)Xvp3D#b* zDZEd?h-t{=TIwY3d17_7+;&MDg}($Hdx=&!I7i~fGGW`I#Lg|sDF&uu<;X8MIeM+9 zEU|?EE&3=gu$*1m1xY_z967VeY5G+JYp+T-1I^W>S*qw|m;cxt1*dVPFO5JkWJk2G?o1;$r4#&pQe0 zI2|+77o8e+gBD?UL=%cD$n0d5o`ZrQ>(Y~Fnoo;?aWGW>2!KhIKezrN>PN>nk~bNI zPuIJT?JV}4Q%`cxgj_+P9|Kl%QIgxJ@mFnZ#ZSZ^(;5p4Zbz!-r!%idn#D4i1bXmt zey`h?DZQixkG}i$R+M5$x##0{NKhIz@L$=RApRUDsf+{q>)A!`<0z?a6qcn7e%!t1 zKc|8Vhz-=6Z{&x3m0z^B4K?L}Wd^&LP#f>`lzT_V1&xZknC`}?T!a%#nRja%Wwbv**kh6n5^Z+1@JqHVz&cbwIQa7s(zbMsRYLPx;L<*;J zn^5k;R0Ax@?PTYR=@&lV|D4TuaWPX!>sc&Co5uTT&g*a&Ho2YwG50;xa`APth8 zoX2XVRVG9A%Q-8XLCopzIPiykc1AK(Mjm7aw*_j`NNV;U%hygtE`7J96?tz=kqkbl zEo!i9)juR^%ba3pVna7i{$r`#|9qM_uxLo=b1EzOZ&au$@9fd!-7AHmrp|w_Jg>{+ zS`qZWxmQ1a_Dk8F+t;ZUy#dafrx5m%jj&ZuS{ZACnf&UYk{?=csbt@oVPaU6-HtYD>o^XgG-RM2S#y};XH7U2m`+QxM+g6w|tw1**iN)(YT`~8~ z3viBhd&|R!RZkKw!tbO=r=~-OJYEG2M3g2^mFh@xIr^yWTsC)`CZa-59j`Q<*vC=R zJ?oQ15i-yCBP95weF5SfhoO)%0*m+w^K3Et?8Kqkrko@c`x?0wH6K@xFJ5_+Q@=o_ zR#WRe05<*X!hOYIz8F8VhtbVQdbUuv-kQfDvr|)K$xL=!ECmv~(8gibiqFDsVpF)C z8mE5q@ozB0+WS3=I)&L#=L&Zxw`+75OO+VNO<+d?n=JOBvsH&KY!F$w71y;s5h28Q z>car>ZPALv&jB@_n*lR}s|q|4*LdO#^>CcXz)2CWllo_APO>Ws!=AbTEl{Ew@8_<0 zl$?6bm3BugGtvm?b|N7RCZ#z`WY|aXNGV!V_jPg<%Dqj}eddKzY$!+Z!ex<^3d={6 zubc9$$}0PEv3Ek4ue$;femkpbsyT0C%hQ@4(6*kHo~Y9R4&EuWHi*nAmiY`N3xv!q z5uu7a`vcecKzvHOc^X(nxU64EBd`b2{8J4ISF|~@h=0ENaFq?4VKS}#>2T%9hS1c&RBF3ESj-yg^tykvcD1yMM*!-d=do_dYonA z9rKj;vlNmG$KH+mYw~0gtZFfq3yI3V`xdLj4cmwg;Mh!^5#%GubkxeGXO()Y<{W=r z*G+;cDr#&`bUZZj)z`iPQ&BJeitAoB3}8Dc=3Wf@t#(x1QKTN`wpZPWo?p~m>Z!UJ zLu~eq+?_1Hqvit++cF zHLpwUzhH&eqPm3cY`$YHfM8MTtzAX}go}HW~#7%4x(~|8+jg za`Z2hUX1tueBH%)pEJPBYg2CT>9xOap@uT?XB-}|<7+_3-J0(yW^sa==iOt6(wGxbNKsaL@IPCxy=WMiY+B=xwv)J zJDmLbi<{5uAZ>?I+vB&S8NO8E1^RD)2{hHA&CmS8Y4z`Z0&t2u3w~$0B?;4bm45f{l=02JLiiOnIB+>QTDGURDU69e($8dwu(o!y*r_qC z{^TvmL{z%b$u7b?5n_cMNWx@?s%n5*v@7j8&QqdSf3NjKm0|fa5k_Wo+^OJu-ci5x z(hi_;^p59bgC&=dX{D;;Hl@Ca8?iL;#>L%q^mo4&YF5lqf+v^m^e*6Zu8(^E30v3Q z6L()_btaVk_Ucd9y03t$*{2!D2=~h~%&l^mURR@c(*ZsFAkB}0R?>ZJcWvaW)DG*< zvE|l*-fOOGhR?&sxy}W#@GV;ll6Tnku1kvb$EKJH5qQgzQ%5~4aA-w0!! z+(pWa6}5rR;!jsJ%v0`_-n9DAmIu!7#m-*aIc`0GF(v+jeaoA7C9u6SsB z?u;Hk`@PlEm9R%J6yRaQq_s2eOcCv={$}H#>31E|evPL+y{{uE=fPuuV1EaDD`L#n z)d8{A?Y3PD0o-tX#rNJ^yp(YGKk`>&7+zt&(2@=>3{JFyUDezVim}{m_WVq1kwsgL7-#M*@r4>lPG2 zSBivDZUgsuuG3@Y!~eQKJ^<=3*v-ClimVg6T@o_OoS6dm0eU3|g6pZoe_PuRvxhgN z+XsyQjM{dDPr%y;oO4YE@$loIjeiZ#@y6jx+>%1ob|V>!oQOO4kgM0@Ey6cO7)lGZCc?oh09jWMShQN>s1qMgq$-D<3_Wp zJrOc5a|(*slHtqVP1m4+r_Fp~G7JynK%S;Yse@r@kDR0g0%+J*11blBw-&(wTpt0A z%Xi^Pk!ZGd)l1iC>yl|!yhLxR7<{H6oUu2OA35vsWUzJ>xu@Pa65ybZ_aNAU*hi-Q#FA4g@qDpD$d*VIOqNW zG%HxUQ{`)C8!5B;;_}0X{)ULcTNw$xZN^qM`ehIpoVBmmj?RHpo%x-K|ALhEQl9i{ zf~T(&bFMJ&t{mkPcKS`bW5Z35uG+B4%csk#4Wi?>=GkE(>Q|gO8aVk&g_Vo*Q#JthxuRaH$v-*SGP?=gG)-e_LqgcR^~W5$IRe{h!G4NvKo7_3@A6{w_UE zA{?51F&aNS00Zb)tNZaIn%^~xJ%9qck5D!l4=TH~Kdq+%J>)FQ%`D%JtzCLpu!Y^^ z(?Zt_vaXfI2<C2FOB1H%lkez8t*#2p?nkhFP?woNVhSzs@OMj}wryUZ8S9fWWStPkq;c2PYOFyoc zv^$%GSsniZRwNRGpJ3isAGIQxtQ+=->ok7rLe*Jc~5CXKReI)uC>{iIZE;i zFx2M$Q+vFRDLm)c@7bqp@hgp%bZHL*yg|E>G0Kp3posCobM*<$6Jr98Wqd#`Er8OF(DueaTF3+M1^H~V^y=R{}OI*`NNL3 z4-4{zokv1c3BLw)23$_E^!hAn&TlB{vr)5)vN_)ac@GLZLIme0tHie~g0n&nJFmEO zD#`gD*7fhGmpeY~jiqe!#r!r5z&40)57Ce57tGDw$u_*zWGy<9A!fwS8ZCUJ@4C0q zDN0lYj9G!9@(BYA`5n*Z?)OCh!8c$F6moyOmQf(YLAdw?w^b;lL(SP4HbS3P;$27m@)*=h(K-OpnD3;}~_E}clD z*Y7F>1ZKf90=qiV@g(kpZ`U!i_#k}oIw_04bsvxh?r&+P635BTzqH#(M>-WBl4`k& zl6qHK?g(3qvT^~25*76r1Ns+4NsL{`R;nXYC|D}*I|a5TgZ&Kai?T+_T;0|~cha<2 z%^|x+5sq2GX&YD}kXbEfoBecc9hhLbe)+IZEAn-X_(b0i%RR1&_Wuq{ zj!*H}7AE3)zOuJdE_8eCDm4{ZE`CDg$@FD>`|PmF6S#+ZuQgur4C&F1ndT|7q$I~^ z24STKj;?_&wfC#p#B2Zi=mq!@oh^&r&)v4+5sTN#W_(o7ZQO0C28DVf?Bl=4)n5k~ zveLBF$TC&LVyI|C5n)YyknDgJ1&6(GoGFvsR58;`-jiR`7I>sCZ?-B|(HJ=9HxvQX z1ZG)fq-tX2VzH4+Y5i9>D0^dVcnTZb6?Na$f$fa-eEeooXi6-vw#t-t>DYdpiVY)( zhlm#(4c6<^eibi_A(Zxb&I*+*f%GFGRDD0><-AV&Dxa;KM^qt@ttk3odi3}Qb}6X$ z$iR;Y%+>wQS9~{%8j53``o+Se;WdOC^JRjs8m9R#`fAoAoDuwQWuQ#Sn1FNcBlteqFg9PTL>GOk^`G@%I?kN=$x^?8PyK-Q+IM+~>xg z5%lc$nA*@%Emg5%l7CUrgC_hKI%Z}MIKTI`>l}c&!R2vUWM{XJz3qLYf=r5JxkTtI z=op_)G$Es7COTSq{U;+R&A#dH>*i(J&K?hhIMB`rwcvPBs1;QjmWMEP^8dG6x~M0Y zLjEMhg3cKiyytIzqPs9HxzOuN@%wFRq5sUdW$9Pr!Edx~sIM}?8HfghmfIxe;0`J@ zcK8A&%<{F26)?5V?h?zpo%tcoX<~%VjGtR=WL3$+q4+!VLKn@gF?Yd3@8ynkh#gaU zjk_9Nnq5zAfzzzYbB!c-=*#9X`L5>0Bhx=@bZ8M-c3I_?kv-BCJ5TqZMo@B4Hwae>2V(V-#9QfqANs3&`)t5-#_Qfwt< zhb27jYz(W?-K2h}z~WC-^3g*E;MoXV#CT_Sw;Jn<=!Vh#Y19?Zo_#*AU4nbkre-4VZJ+sH6KC{I zphcK-8f3V~krPiBtq4qT4YjCn;XpHJ=87C1gn#qzq*xQx)Fz|-CX6n^Aw29(R7uEm z6nLIc6vFAh{e@f{TrXWnT%g`9CKsQGZ~@s|ccQL{aDWctNa(!B@aA)dHeW#}f$jXA z6k%ZkAf+whfr%A1FLC1xGF-0#sxw1u-xxxm?3->(eXx;4Sv(FjetjU^y1tv~k;VMV zewaHaoS3*<$*m!W46>*bP3#alfE$oBDgCDw9)M?){+Vd3sMlR+Zhsr<L^UkMf?RxfIV{(2Hj?TX_pS>gN6tI9%CQ&hM>uhE5VftdbkRJwIy9|3~cG#j0>(f z#$^j;@WNIk{k>sJTN1|N9e22k@DJ+lCHR)h$#&uN#io&E>>NTrhpaM-x7pFfG@lm)rC3AKvI!8m#-Mkf&z-1 z!)a7MgHF1{l)Z8nt1j|r$;h_=c{l3JTxX_(Za=5Yv1qF7A(5bWpIqvJa@#h=;**p+ z=~75`Nl-KT&4F)dW~J0IlnKDm!PuSwLkjTEbF%s5uAZ^t2A(tUlM@T7!)|I(zZS^SkQ7T2 z>VHJvE2lw0b#47A>$bGyAt|+}*DE2K-Vf%?lZYPd0qt3d^a@>+qcK3cwauFTQ1y4d z3*i=#upD?r@rV%zdoA!;m`EADT&ObC(Dm2bN1~*Fo@>9*MonJb!UC}uB<%X9jfb$7 zXeZGg`nJhve%<{CmE4mnbbPMUqy#?{~l#4GaO0p>4X&(j_fI$#V?s zb?uNm9Lb*b`6LlmA@=@ZcBd~Lj^|~loJ*PTUGcNiP^eKQsO`5VuwGMUs`f@)yT0uj z?9qofN&hK_;X?o=ya3n(197vcUgn8gKkW0F+o#|f@F}}=<1u^71Hx^AbBHZaX-$()ZsMBaxL&&8Ay? zvr#zO(|Wq|;$s6f9fn_gTV7(d9?Zy=@caj`iT*rsQhOjf*PUGy5tlnLWUTUQzNK`* z-FYDR1lo7QW1#KNo*V|%!C4U8PaYNaYu*%u_dsB6FNcM;OT9@(`X=q>xiAtWD7cg< zL4RAu1QQejbSRKp3uad3by9faD7Z_4zx1K#+Y#ETi%-GZR3f@=l>l0RKK* zR_4?y5vxJuia!amAM`;Kx46ZtFA}?N&~LV=h&aH3BisKnvWd=?J~l&+Rd;6cf0ZNs zX<9v$$;pw{O#FA#_`f`JGK`7*%Tq~`@%k=I8&TwBCvlm3YH6vsx-KL%fst~#@gUgq zWXfEhxU@78DWYC+-y@#kg~T*vhB!BgtTt&5hn{4-bIh56W_r7PQ{G{$`3KX6x?Pfj z#}#g06%>|VSeo5Cp1lv5chJGHCYVTL0^&oVl(R4Aj2baFNbv{Xk@UUpuucw7pVT?t z)32KEZd81RCJNRIU}T5?_tVJT+eKdP*FXg8fKjehUXziNB46KsX-~H!uJ2_g3bWlLlqIrgc?MD@LTd=?unqF;`?^8< zpnKhNG5wWRe=Z?OfBKv?Kh}``p6o^7O-t@|2g>wc-mWjhsWQHX+X?7g>Pw))6f)Vk z^%z)0R@BX_)p_iiD|=6Or@THMuea6tsfSl*pp~OCGVq(*&FY zfs#)e0T283tO4W2;XD|(&+NDd&e#xQRJC!Z%pPTq;eN;v@Ns397lkJo=P(Q60bGE| z+lr_yX>5b?$>K>CzKHFYP<)J9c^rC#+bfEFUTk|Ixh%Gu{I@-b6|`ljU22J${h@Kw zSS_MR!i>?^7fGDdZ3_(*`k@^OokYS;uT>Tbzc${Y!o67J#qaM2BnSO#|E$qU~dqf{7cvl>J}6?tIj`{;z!93Fs@Up z|Iu4l!|huk$8cqu+V^9Udd3&&9_L-e=RwT2OYs1FJvf<}-6!D79gWaFWW52>S!V{> zIe;|AwaU7gJR5+&+5J^Un`-hH5RCESRBOlcXcL zY2RUOTQrLVl=d24qxG1;4e9qLV8LRtvsj?Nr)-!FeqSJ!^oy`b{hr3xpD|mhFHJSn znS{`60}7S!4DnzwLdMip~lOz&ID>SkY5wa$tNWVN$JXpUtcL zEUWWAN44dRAu_Reg8q)W#`U7GQR5Flv_qBOpln_2u*bb^@~9lZLp~3Cp%|aP-#d*1 z?Ud1amtKg!h7jGL5BPJ`2`Z?rS9J;qOKVQ|b{g&ihxz%_PM)Ga$I`kro2~c6+<@`* zxUn%^d(NcqU)nH4z=+4Ayul&hgMx$9**t+)d?MM?2DU{;zK_iIdc>V&*FNsT5zlGv zmAL4Ba*{)l9L8a^`$sxR#CQ^sP$E1GfITOlwr_!O5B&_lvkAf4LGV?|tn`(zMcq-@ zPJ(^CQrDjA$DMn}{@X5Bb}X*FZDK8^6^Xg;E*%%pkEZWNftoRi493X22H@}wnKicPar}IG2~B+z>end z^?Wel%@88%W{{evWIW28B&>hP3}zK67(;YnTb~F+3#N7|63As;W#65q6iDK&6&=bV zPE;Id$@N#n2B6y7c+2EJ1VQdJ$QRP%Cc)vV84A%6P?|r^fFuVjG8nmhCUlHrHxx5m zuxAVry5ud4xO4_j(P%K{ce+hBkvlvyjvMK~lp$0>{<7j6*Jb$du!^O~P6Kjx01^J( zwchkV3}0Q&;Ym*#Lm0B#Hig;x&(rq&Ekhzzpo3hx{YWKmo3QQ?>d`EJqP z_oeQILfgmnTx}DrSCxjozxzC!LxmlmbExlL-`U0dP4s;7qLbwk+8^2kuI%-}Y~hJI z7`@qA9y_sN=_xv2;iVpO$1PH}ZZF|}wVdzrk*CVZ99B2z*2^THwwt^Zf90P3KCLA^ z{~P-(jq{fiFB?{<4UHVJ+Oc%Wl1Yz2EaALeP8cVj+r(GG=2o@rMSVAOyl@Tg9! z5y{yeHN2ZWZ@0|H(a@sTGxm%vo8sLnZ)Dx(^||~?t9iq*r?bUr)q&1( zD_ug4TyZJUsd_eZPgVQK^suFj$sUFv?e16wrsYEtOJ|M+mF--vsJ7h_%T!3;k$$10 zif`$gMinXT6^V~r^;ufqSC6H32YAUhz9RS1PG1rU4eT}8{6(*xi+~##F4^L}k+GYn zm9eU1y-;J=m$I4BWuoJ$lR|yl?A?Z*Dh|`Gl7G|A*Sw0AzAQ<2#WlLaG`w`{Mvs-f zc8$a=qCXzS9AzHbv4r87Z7`-ZX)8Conn3%iD9%|fk|!gFz*;=>Oz+I%BDo_v3hg-x z+Vsx1F1O0N){ZmCIyO%&<3FS#y!KRRDXr}GC^LOb_Y(CZv;wPH^=R?iE*r2!RNRv| z61GTX1Lx9U-l*%k<*WGVb`iI!98o!n(Wd{nzNBe`;$gKUjbbjQ?_Zf#oIWz^x=Drp zv@wmghMxQ;jb)~t?N?})$vCTUJgq2kQ7>R9E`G)TeAUv!e6CRfiw`iioLnqQ@?r122$UP7PZL)1{M(B%?3y=L9nz8jk-&NGG= z){WyF2QSt8pG$csG8~&x;#D)@utnNjvDm6;?Ur`YEmK=Q%-*(Hn@hhnEA7Hj6^sfk zU8JHcSNY-dG({@K^tv=FIh-uHL<7|{j)vPZv4_~uuTZ0Vr5>E5t|`EM;%J2{<_2a% zsZ`&ZZU-Xg(qptSbj$cK+&hBrzu!RHY9vBT*1#H>j;`N2NT0&RP3Slo*&%$IaS@l# z5{>q7c8`rpdWVH+Czx}OeBJ4T2|s5hK+lj|P3N{aGHBV6;zegQHf*E6`9aO}mIyZR zM5@F@&y8A9{iBDtcvzNoxYBQTXSzXKqfUQZmy0I#NN_4wG@U1bBjQLKjg9W}?X+DR zxHqP}#_}X3v*?~?TFEk=Y{?b1k(QX_yL@|@u?pcd!-*aVlpXmna-8>38la4!beBw{)hDoT^nRj_x8!)ZD1 zjA$?k(e2zs_a;e%o1v0WDzTmpFJP;3Hh7yeq{G@rm5MqSYsFCrz?)NEg4pbTeZk8 zxQ1ZUf2eW=vnlarQ{u?_Wy|njqglA|`{Z=J{3<kO1ot7llTh$yk-d|{kAb4v#p9Zo0X*vJC|xaKRq}k&0MIr$|t1NTW;|io4SHq zRjOZ!M}oP8GVnQRIV(^Ru%YO5`ZF<82v{;=`L%fkbil9f!h@0p%G&gpkMUHCmn z_wA+NHW8`RWB4y8q^~QzwgtHplZ`8zU-dn3|OJderml zY%VX`G(r?lP;(|6Q93SkU+%t?)|5`f4t(0oCc*rq{uufv_B>*4L23-LS;Z*>*WMS& z?YX#Ucyg~&6>s;fsa$}fU)*xhR}Qhud5Gbut^8X1`VU{8)eh0tyUTv3OmRnqcxB0} z8p%t7HJA)*;`E{WUQAOoawaowY*V5q{8C;y(iX13U3z*v{J?9Gec|S0)8#IvZaUwN z573majxJyA`5}btZ6>~-?%RI3w$oH6xd;?9 zP_I-#@$q`bJipaaM!Fn@NhfL47VV{DRNPU^<|MG5mhVJV39ndU^~%T0yRLpMP(4j^ zSVph7j+mD2h_l^IloWS&OU<+Wyk_Wz*ai{x7O{tyIo5@}w69SZ$9Yuk%ceIx7xK0SYx4Iz@)2f_EUXjlJ}tHT z+Bcg`;@Z4C1{#d(-EZIvBF`U_x_4rg>a_zg4B3|-Z&6{X8*hDl=}DASrZe>B@xQyv`xgJ&we+}`_KWwioiy05*v-~CEvgsA620z>q*6cUD;d|*dVwV^XoTFU0N|#J~5r z!1_#jG$}u>&HL?X#a?z8M5#a%wy z&?j?XW9QJCn?`ay$s8GXkKxP>7Q4J&zDd$pt<)&$Ug+98{?}fcSC23X-%aU^VLoCM z`JS2lG$Pzu5^FgTclMn_b@unDhDe8_S#G^NlCjqvTNc@$@(TO*ZE8?yKU-7Tc0rre zKIxeYf=^Fs=bXzPF(^pliCL-of;+eBroO13xuODwpUJ#W{no34;6FmNK7VMnpepwU z{5kFT@`!z*W?gRCoZmkv<#R4|N{o!7H|thuJfrxebA!>**atm#68&X4;~brD=Q-il zY;9^hJ6tb%_#L|m+o`rC8hKsn=>pHbcZTXl4T;LWR%WAJ%z5U-8eI()4qBY1_+=J( z9rusP5zAj3J2Vu$eg|9k(MC+GMN6k`O_4;s-}$p8{zHsbjF$*&CaDfDxu3KGd5tKr)XMp5s!zq#)X)i>KN|RPz*HBy_~A0e@l&( zaVMR65>3W*2CMhS>5rdUc1-l&Zd0@OIn?p4(L67>g6l}(wn^;1kV2fk&Fn$*k><(K z{?T^>%o2qMAGG)8^w#Ykdu*SvuW#tRhg%ey2$H9GTQ zG?blJp+DhZ*XC(lqww8NX@Q0=&TRt{qNKQqFQ2W4zL`DjOF!6HWP96nfB3{Ir>^vG zy;jEiVQJ6dpm7+Vs_Lq3yyy6E$~Vh6z$g0UOn1i+?^?OZGJAjboYrZl5wqzR6IYI( zOD)>henm^+fY0EH*Mc1KzU@_SKe*rvn_3(02G!~49GHHTw|~|>r?I(5Xmt+zZJl1{ ztd`b+J(D9Yhu*aG*RxMfw&eNy1kL8RzE&Pulzt#!tadDDrZ$LHK9Kt^vrwHPN&DVLR%PzLZGb}r7~M@6iJRb=p3JRU2BBj89R z5)Qu^ixFDSQ7@2vvxM7r)F?hT<4zo{qj~!s@?Y>V$L_*sI z{<6qF(9?BuvGlaCq7u|qQNuXenY)>}`C@P+aV%CuUY;tfkDHY>8w(bL2MS_;To_3b zi9o`@8p?$O%EAld{G$vq}PAWDKCN%;j1VxeU}=#j7_V6&g#h*CKGZ#)PjXw0AB zumrO7ueew#Ea5l4K!M-nBjJg-U+Doy{6>$2BmE`|i6HfxEK)e!Z}g<_(!Z5SgCBMO zg)bgY!v0DR*nl{%48(w)qm>&Q3kW2AJ3lMnBndqi7Y_`ekI|FRbhdWEAi)OmD#o$| zRVKxGLQg_ZN!`uG)79M=*cf1`yHkL`ldhSKl{0;*zsoE)9qWqjlW%wXpv z1M;v~LI8t+csR%jpuLu%wk}55#mx#s5|8xA$|WGr0&=o$mew+Qzzrxn@FXW->*3)lBO&4K?Je$25O;C2k-$ky0~&Y< zJYEbyh`IYZdzkr%IlHe%iBRdNSh-uc*}1}g7X#^8GMf57}_yoHcl=jrtmGf)AT5f4U`?t+}-6}-CSI(WdI*pi3RKDj6=a! zak21(3^Y~bJw5F#Wy~e5N!A1@yqGkOY%WHW#9E6PnXU{n z&|1M^Q63JmVpu6L9AOuZBts&}AS0~|7K=zXA95iYE^fPATpZ>9JQPz$Vv%{|C`iB1 z1LL%vweR1^G!ODu8kFwluc*w2oks^aU4}X(peXj+lt5PEC#ZSYmKHMBE^ba{9`a_c zu8wvV$b1Gu%Sy~uQQ&1IV0)X_{?Nval!Dd`Iu?l^JquFxqdETnm6=oI|1S=J?*B3Q zPsaT}bN!#W{*wj%6Y&2<*Z-O8KUv^E0smig{eNaImbtYFn5xPNc!QP40=q15T|`;? zD7$z%gVnEumYt=$F&VCx_M___WCb<1T!K{;6h$`=B^MuKtT@<%0AC#T$9=zqvWv3^ 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%0AC#T$9=zqva^#roIzvY54-9~Y&UarMJZO#5j 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�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 z ze)4#H1w~Q8`S-HFF%?RWG$I9iPgVYo_51QuU0Rz8S&(%){)WxMvHHwCa9lHhP+fSs z7S(I@h-Rjb|pcFe_VQ)^<2Fz&s#?Y z%V31u43R-pzujPeX0Qtf`iOKAtNCF%Ax57x*VuN_>v4AwH`8Lq$_I_ZlGTL0)~>e* zDx}M-4XfXtX>9X-6S%7(3?Ev>ES&0qXyAfk&euc11x57IrOvKKp<`GiA05K=;X9l& zXk{3RpRYW$8?sr-Vp=^*+Rf}M5lgun#nTSdozLo$*{k1qz39E45L(kjso+w6_ z)`!4jcsH&$#<7^>q$N&#f{{Fvb-J>`i4HR|8NYL5VL&(y_l~&8=$?wT^~7a2F;PgQ zraaFjkbnZc_NctG6M_P>_0y@@)0dEN1IHZ zAl())K=Yo=+ifg#B>N4ggTMIG32~v&u`Tv>_kmf?&6`&;k=(S%GQAbN1fRRG8r(~T zO@o~52%z!UH+3voKmM_Hwu=2aq`5b8ckvwg$#DoV7}jzPa46KG#BtvWMC=+Z^kyh2 zm+Ge44Twk%bJl+t^D2AAdCJV_v&fJ5RHu{+rX2`@!~O%IX6$Y)p-V{0lQh`EgGGLB+}5y3}U;WhanSz zsWI(JNL=weR?x$m`{XCDT!lCM!UC^mwJi<@$nhW1PD_bzOp=n$!hb z-1+;3<$8PAla$tx#Cj=I%9SHPZ79rgSby2UQhev7?WwrBw~bb9a(DN`+NSTy;hOB^ zS}Nh@y_F%b>h<%NOES5a<-GiP8+T_U3smH4b04=`rI<_p5cPY`y2l+X9~wg9gGA+^ zwIskY7u0xJVYw^|pth~1Dwf~hy!pW@GRn_6^**#iH8~Ig<9dz5&SjNyQ!5_#H%D^r z#kf21fj7Iozr7}CWRuQisAU5R?hjB7|8hP6R8e%XI0oIa#>TDj>m9lc`mE+#P zOJ%?oo^Y{|P^Snu$m4v)mD9r4`P_t^n(pz6gsc@Ab(9x*-I)Tw&5LLUVR;FkB|cug z-a1&aekcqqK(PK*UYJycXTXp7{VJ{w1_@)@^gn4LI-V?`d;);|HR5r3IrucLkLbLf zzT$@nr>`Ok&_irny+mW5VU(YSv)Yux0k!WH5a$~j!BYeL=~Kg1=6H9YBl zQy{RUWjtF7udT0tb$5N-w@?GM=UH0Z@qPyD1O&a+UMP(aLPOM)7J>n|serJqtIItF z6i`j8LoHLy7>u3Oxg6{0Y9KnMMVZWOh1{S3A{2BPp8mXzSk=m+{uiR%HGFSfiHMuk-vZv>knvUlK9F7wc6SdA433Cpm#SCnj8C9YnGpWq@bzT&#c^t-@ zC6m8NWVCpi+92q$D8u`jjS+Kf?WS#k2;ae$Y7+t_ZYyvL&rpA*QA54f$CzcYB0>>H z)uzn%6S43!I-4erBb0uq-=`6{IHB}`SNnD!0DE8I%pjzH#iXk76i}kG_W7h8#%6lZ z$MBs0>R=_XQ&cUTwv12IMf`3K#27Ckp2)A&l#$*#9UI4P;ZGcpUTP9)HN`}h4IYux z`8Dav#cEp5Yvfc#R@T26CZFJLFvqfJ_Qi&P2TTI?S+d#0H}!t~o@5rwHhg+@wmZD& z(9<(?<`N+(&0>F!*&{5Dd+~Z#@VOUB)_&f^oistml$6s-Ps46nwyd|No?gJka#Mxl zA)(D`D;yxUX6_^R)~%ofJT^%|aSCoEOz0K6Vu z5HLM0k4ySy7lg!Qp3yv~ZZ4wgM2-?*cEJ1Fz-I0wfxd*|;!$D-MPju&^Qr^1A+GkT zk|4%=wA{_I&m|7NsuCS(81Qfx^aDDEFzBpB{$fGx3fHXrs+gYf=I*M!NddS})1mme zq@9~mC}2FvVfc&RrbrD~ijiSo=S?}$Vexo$Emy>Ea#lE8CwVe(k)}=+|6X8I9I>Q7 zt9iCQ&x+J2^q&f05rS&I!HIX(8M!H?qA?t4aH7o1pGO~Cc0N$1BAgF(m#fLJDtIt@ z*?X&sm;5EF*Q6=DgVm0M25zNWbT9wCTdVW@UM+k1fpxZJlCW%Y*WTCwU(xZR&)O@p z2L73|W@-fB*(zbO4s*4O`-Tz|hs3^HfRe<{{_RHqDFR;FMw*KY1}vN!=lrB|{q=8P zt5MXJL|yg`nm8^>-8o8l@3Qn9c8T*SY+WJR&_tIQIU zb)i%y?ZAT3$j15uMf{}`=bS%a4sP+`TWt$lp)_bQIUM^?SV9s-FFxq&e#PxMCoErC zJ->#b0hXreU8#YSVU96@K?Ru7=gM#5dIb8<V zr?3NtMsk+Y_ipTnsuH>rD&_aw*pD@VFrctLksko%1dj|?m?YkmhJ-9-no27!KJ~$^ zWC7CbF*qa`Y(6pyk`ww>%8#tLODW}fAG|4*+peP+7w#V$7=Rn*uo11uGyM)XHMvH7 zJxPJ~&!a2$v0%;&xiR^3(~7_Qnz9}U$ehsvEdSfzg!(iB@OVrTo;mm?!A!yWchJ`1$ORkRN`O)dtQLL^3%ojZU#0S*B` zg*8V5DL!v<>79BCou*05PYV1;KoUg;ltFtY0V<5s&#LL^;f=?Xw+)_q|`WWNp28m%RPGc`3$fR0S_oR|o@t zlAz+0Jq(_jsiVFWl2njn{Ff!<6wBA@Hh=K5BjMoDHQ$Vv8|es5Fg_B&Ow&xHdhKIw zY(-Y07m)OtO~)^%QXZ?)ek_u7rtfD1A1R~Q;2>Af`8(=~bTJBBcW@K^t7blxajVe} zvqUwK%-YC|)9gDY`!-C&O@$#kToy&cF!36#UMRgIT>AhSCrGO{q(frD1{wSpr2l%0 zaLCTCypWyStnqdpx1O;}m+YX^dDa>xhIHy@(h_(~)ZB(~Fm!uo-OYHDA-~~cMt6_v z)T3blty=BBo0VFH%%`?)omp2GV(R=B*wAw3h?S@>dnREew@;KdD~j;?!Q z)?hjxug0D3dGDEMK>Bna7xxuxrD3Bur0OKHsws;Yp~b(8R;{+}B0#JpsdG{(2UGJ% z#1tyuDV=Qynq~Vb#52Pu{C9hz80gn1N&oWYkAa(Ii;g5cZc*c01cw)+#K&k-GpY&}|7HgsroVb-u8Kbm4WCU3xzQks+D|ZY z4vaS;MimbGyp84>##%+!k&~81$f!GuPism`;?*$XF8O-9-UD8VY@UBu^;Tq5`$qLw z8e&>U_Xn^}l_SKzaAZ91P?OdD=jSOiZ@uKXIp9@WRY4{he)t?qXac(o!4kn?GcVM^U zD}Nxn55T{qk+S75WSSRa^O94^!C!F16awEfcJ;q5vR{5_{V?zpKTT{EeP=tjXKpbL9A9qtySFPt9b`jL^)rv{UK)ll6^DVdk}O<*?p zDtGfTn8@Et%`ITq0&r?C%OfCpG_Lv*L;mf4Z$XzhDqLC2R*bvA_%2MIn&w4QLE9j;~r!V_wC z>URb3_DRZPOjZ9`g%Ub3zxyDYnLqYjjc#dl|(2&H6TE< zjMdb?X<&jSBEp*g#6NKg-$;+YVf#wnA*%ozjOcAVr`3S}OKIfjH~B24JbJ=fh$+%j zyCcqMvqFxCh+_%wK9e-PoIEW^m{sY(n%y%NpS8}2AGFZS8=O$djdq$}JTBtU z0ZOzexOcU-&2y-Nl1>+jp1lIpgI)K(eWlzz!LTtr6TW9R!JW|binu?(g4BXk6qywt z8!*1(GW7(nK8cJ6V-*~~{Y{U4({3RTE4iq;2v=U*Cy=8t5yY|0m*$TC3Ca-!%rXj= z-+|Kjvqa&u=sV`VJA8E94}OfZr1U|UP?{^q1^Hl%22*ljgX-vDfd^ztM3!9zUGP50 zup>5;l?A=Y=N6}E)r%;3ho$>bn2Vf65V_A+C#-9gQEW8+kd{|JV+Mh7-|+Zy_Sk_{ zIRNv46tVPZW|@o<5w7Yskwcc~bRx*q=tQiXi#FEKV2kuMLZ6w~y!QgU@L5P0eO((_ zU}DH-gAd~bLR%K;=8>Bo3DGn5muY{$y-j29GdtmcXJ#;nFF%bExAHG{%seW1O$<1% z0l9qQg=QSxwj12}wi1cQQbC=M!4RhWIVzN{>={GV-W&>t=$IGT)`;B}IYyZ#2vSd9 zdn0x{cDw;!6OJ*$cA0%WJI8#Vd4ibmw_SI-WF|ZNZmeV>YR2O$mw$)>kh(R_9$Nfi zP^{_hRzAUC|oxh`8=^WyK$^9q$`>6M07Rl+AnQ{vT3#LQ{UuET3rk7D(-!Od2 zKe;`W4p9&{?CX~x+nJ1Lm8>{rU1ce^mcn61b;F8b)8M?B%<~zbMXiuO2+v3EWtt5r zou7DFF6=>LZiI*!_S^%BEM;`$!}4zcaSXfUnC->z!^7WLg+oFBG-}{=stu5lDH{}= zyG>Ym{xq<1NvkkoxIY7_nfwytUk;~z+^3B5Td^wtQEKuXk|~lZ)6Tm10*l>VoKZEt zAj(EQG0(qC-!$hSTnZr(-%tCHhJq4Iv0))>Mab5-xC#7xR#I_Jj#iUnb%w(^7vzgq zloRCO)g<-;0Q>jTeodCiPaV@J74oin``Wi9Aqx=Xak!wc&U0n02wZ5Hx7tm5QSAk) zYeDlVCGN)JK#W}sR{WUvC?fxaruZ$CuaT#PJn|d*r7aI4EJ(j~>kMt$WWTy~6aWSq zRHdyPnfzU6y=J^voqsCKwqHoiU~p`xC-}hR8Gp&Pye(_%WW?3eZG*Yx0{@6tJVKr> z6q_fqFiYk8dhKG<$KB+bT|Zc-5|`N*XzyeIIektJBgH4VimfCSzr>Z}q1YFHOHmm< zX++O*O|>sBQIz|OdMsDFieow&y&9@uIZBgAYyAdD=Bi7G*!FwwYkfjcMR;8>TBeJ~ z{oXc!d7%x#iTo0pDfWj-5KfqMiA*$~1&$60?OzH#h!*scJ`!nfee7LT_0<$zbF(!~ zubKIpZ(sPjxC%x%PD=0Y!WjueTbEedV*r^b{ol0&NU$>J0Q&wdA^^V8YW<9&$Wre3 z*KAqk9pIP=j1BPOQ2vEyz$c-9;Lrc~uZ;q4an4s#hm=`H>jmDN-+N%EN@ibOW)Woo zy_CLuJ$1d=FRri02l^*D?3;1{*f!=4<-0)mKLTbPdVyx#q?%75y$ZVI6qRU!1%x6i zChle1f(g%F29+E0f9*9$WvC%CRT@FXSb(p0UetA~Oclq4lmA}~gb{_8!)s`o+GrJQ zMgKZ)OOO1YtKEX%!;+wKW7hf)J~lOaP0``h0aZivNrToPdAv_$^F|o zX)pp#F4BKDKwTQ$m)XvE<3|6qjL2i{OmXzP^P|~0Zgb0puk?*ci;x$kibC)DSTL;? z&%OKQY+mYl+uLs;%shycWQ{~&L~&eq^o;bKQv}DGO~;x=m=IO;mIZJ4E9-rOsGxC+S-)oU~|!5^-8EIr9|g|x;Z5}eoo!H9&5pgNtNFS7qI&$5~O zG~68z-h;gSw77#J?{$R{>b;|WuvDWNr)p+RMwb25M9C!gG)sn(BMP+FQuDm-#0q>o za(?qJiOV*0+_w$&cv%P_-k#e^PQa;Y<{OoCy|0OYpydgTS>Jh(QSxcy-L-B!_#DnS z&nc=;R%(1R>N7;*8Z}h4f|f`Kc<#aUqdcGG<2-;AUcdCBO|ojAiwX|u?+D!h2mR?v zN~Oh`=_2sY1hT7gaA3ZPJw!NKq0cOJMZDlk8k~ila9MbK7_4FMXKJoGaP@q`u@vx4Nfs%Gp{WKqw7f3y2**IcP!Pf$z+=1 zMjkf5PwD|#Nr+z|-88Ku_DPgI5<-La1!qy~Z3Ak>A#{<%H}Nf(MG3Ma3ZOyf%{shZg;x6&AKMu9pFBcD>KF2n zu*3Ks+)!=9)pYGrt^`W9(fYvG0>x0Y_lI5mBD}4(D?)<64pebd({y?^}Fm;CFuRcW*-ETBn&L`7dCsIBf`TVpN}hI`Fl z+faAMnh#Q&uBW{fOerf$AQU)I;;*F=D64IdMedz)uuBZnt*+EHSS&5WO=9l(v-c2b zzxz@btK(FsUFK-y&av>HsPyj$hLJs?m^WWR^jY6MJ77El<~qHZBf1rr$#zi>i#l7! z3)wjF1v+HThkk!Tu^Aa-MiL`>=qf%Px0dBv8`!uWt&QTR!dfHj-^%rpG4e4Crm2TSuob(T#!6a=%i<2?A6}cj7dQ!?uN~)) zX4N07Zg39`QV_j+r@AYFprGrDPYO6Ms3WHoFFJTFdntAUFE{Eq!u2p4I}dvtf&?;| zHvxg`au^0Wy66GovGs@8JSA?uy0h(x9bcU{(Z%q3!L^SHMUlo+yxP~ec1i2JrFDYH zi4_$y@^So?ZN*9_@yiu8A4HWXC##VLB!S8-@8$%YK)3H1%sHv^$aR}wYpjkvsC~~# zrnIuUIL_PQG39JMAH7Q~Qjb3vx~xEZYGB0TN=*bdTx?w3*+^H%hgwy`VOy5}qe_@M zyOoi)#|`C)w^QJNmlSfW9Gg|c{Iw{vO7+?nliK!TgRM}@X39PG$E;cMe?VCtKx_9~ zhkNHxK~1&3)d>Z42rm1!W9`@|)X~WMC)5<`XUJd)Eeh={`MW@tvO`gt7^iDP^{q;& zwZ1C}tB$#DQw%RVAsEm3{-9URy^LZHD2&)?E>cpb4#Fgb4XZBM7hTcpSSZEI*-I`N zSPr1-1`=IVij2$gTrx3ysV{9FCRm3HlEH%>4IV%{LY26;3b%gpOa2KX58pLfZIGIa zV}@Ypn+K?P_s<2=0xih`g~r1>xayW+N~u8Ck!`a~>!sOPOjZ<$kwd zF`+8Is2by~F|0Gg4gO@wx_!h3?9u8X7A-QX=k;cOHNojCTXy5JUbEoHt_%$3Z_EkK zCP(cLE`fZphm>YPVchW6d42`Qk(C5=P0px_R|!*KJk^A6j;l0Cc`$Vs)kL{Uz}9%L zwwHYc1~^@z8;bmT>5-eGFP3YsXLn2>DCHT~n^7I)2u2#70|oNp_Xko63cIq&`OYN# z*l970JBL84YNw^rg#S`tY~`@T7Wq@j!_2m?3z_CrliOrocoGV%HZtDH6I%&ui6;?W zd_btS=lT`c)W@?8h3X6*nkgA{0;TLa zdLlIJp>ngf1ddlL5S5^D={K@jTN)cAReC&}vlWqbsb>x6%0Fc9W?`<322KFKk3Rc~ ziMW`M7U*GI1|};dHSta1D>Kx5EoulOS+L9KpYvX~dXXg&Xk6))6Z`+p_XT=7W&anC zO0SdbawN4F9d&NHhUn{dty9mKcrbWT7p$>uJyjeBh#f4dT}U;z()e(b{6Rl^0<59jBCB}{;}Zkk znJMt9+WCs>EhLMlBS*`$SFZ1cv)%xF>|f6Ga+faB!}n^)&1`}Hk5ix>-drkQ@5iOz znf0FiSdcFPCEm@KD=PdG_hXW5kx1hrgXA#NH_p(FZ@mh?B<^O7&~khPKfg-Pu~_R1 zyla7yNr1utRF`G+kzD=39Vv&oag8_>-vy75v$#yQ*$HrSmQOtunt7~{iBqOEBFEYA zkJVo6m)2V?$6ziqBqQ0_EVmgW9UdAMUl@q7LZx^{wH=)zklS;>ByXfsWM69=oeP7O z|NQ*)(f`5CzR%@CuNEbS%NB5d1Ku!fa-buCRk#&j8nVVT_21gRtTj4D9-xUy-e!Z* zzuk=m_?+2wM^qI0oI0LKY2a{=b=t>2J9nJMoCZ0f^*8)0@9al*y#7h~{fhl3q~p2# z(a#mL@?V^70CXVi&V=K4xHy4H86DfqfaCOQ?mIIW@?<`4Nr5xXMfY84R!`BP%Gxis zteUYJH89_yey+#c?tF%)pqIvfoGe%R|I)gUZ9;;7#zHRH zf$bSM5LBsgk?n8bEjG6Muvoo2QR~?<;r6AZeybfHkz7;;M>x;UMmhf#sTG)Sc;~!d zUvDp&trKe_8vW4KiwY|AobOXwE3$j)+#O<9(HmamSNpUE)IQQ`xsg4S_D8S(2Wg)I zlteDYe406suff)H6kF>InB)P5waryc<^^*ToHH36f@+e5o!yTR4{9r?*1Sa7^3(kE z)9yuWtHc7UXHoF;b2X=BrWX|l#kx4?ep!m?i%L%q%<69+`{Ej45|{ zU=Qdh7bMF=+U-Cg^f(XqK<~$C-Yz)x8^wodkDNAJEPK~tohyIh$$mRp zlw;#-Pj548?pmb(3 zL!eLO?3KyUr_BcI$%mps?{0()+?5C5IS0eYC5Pscmg7TASx;NV9)LD`JC^Upe*^4(Un9Zv)O3 zMk0TDVFrd?pb6Xe7@aBdXD~<|_Mr1lE&j#B-A{Ioo#8Ov{$GRn*J1%LO&}{NY~z9N zHyvE&0k4k9?yD}{yuSYbrw68scFhD>7T03RtR1JTWbynb%tSyo#<{2S7n z^zz*K*C9o9>J!)FIkNrs^p4;3WowEsdZFgsIsKo>nORcLI@7L;Oa0@rgGR{~mOFs1 zMrsY}r)}XSQ!y*T(?1!HsI^V7%? zd)mwviyZpRN=IK)C6}?+t{#~#3G1l-5c)`3np@r)=#t0Yl7Uy-V1A0Q{0tL zc33%Ds`sVAb5tZWM*izd*y|yW$`-@bju4l{rWcwrGXs{XNv=}p_wxQ9W`tJZGG9~) z8cON3J9`r0G!LFHZd;rSxt3+?LdyrC6-4sT+ZJJfwORX{Mfw2=C@+U#bOH{$nN5MC zi+){i=LVNrfXwOJj*;Kq^~;}-u6~Y#6rJY1A?`n&qp7X8bJ16fY@8ffc*x+GgO&sh zWBwGeh(kF%KPKteO_}XvOi6ukBUwh;cm&kpQ+jk3X22X3-y-Eu-QH5SZVMHhbI*$j z4O&qen6epqJ7+b!5VGSU8h|`K1@1l)%I)YWJJw46o=B~m*Oe}>T9=6rKglJ<(qXH< zjV?HM8e8bpJAGbb8EDOtAY_?4)^yzNT0U7SoP@sA65jEq`(b-G4jjE+{LBl`YAy8j z{Z=b5A9>Dj(Q03iqSd(dS^e&~CKE=~)9CR6f!Y&?M!Km`EL-Hny#u){ zfa2;jM_~dojb` z9a+s9?)TH)jp*Ji^%v>9o;1!Z(n%LTMw|bnQfEUmXnr_!^>V=z<X z`hpClhp7xaYh9GYcbQeeJv5I@12e9C@Ou`Sr9@N0Agb@Od*crxt7e??ry%HOwk+t4 z(90V?T@T~Ca7LgpR8=eE2hjH`wx8GAs^0T>P3(0*BLPmUnL+4tM#5Fu=?dW6OeAHo zt^I$YH)Wk}{opuVuwyFUvnNqkn<3+8a&!2I|81o3>y*MYiO+LIc|eq!1Y1adO26@)ZhT?=YrH=i9g2wBJC}J;_8=m?<52W9vp(ZySqz* zdvJFP?hrJ%1PyM%-5r9vySuwP-x}WRefRy&xwlT$ovI0yWSCjA?BD(L@98GZ>w&v} z3uPxc1gU?_zi69J1($g^qa+1UJJ?O5rm6&&DV&mL!m^X~)*6s{D-)9qN(Qeg9|{2n zQ(R?_>DEAx&Z31~eW61>Wz_e+51D?056HqwsIb|R#H9BZ{3tn(<47Z(UZlzfQ$2k? z^aeX`LtbDzP9xeG)&{;k#vyjU0jk(}oMT{^MA3kc)PHdHYYZ#ry#I|6CT8AI!u2qv zhEp?|$<y}D)7oPt@ky`>vw{PRZ0X>R zBF_{=tWqicaRvY;`ue49Q%j=Q;S7wv@JW~$A<`Bql=Pkc0I4q*Hsa3@>3LT7l| zFj@eb7eb!)kW&r|&(g$4EUvn1snT3`+DUiTrL*x_HbeZlr_;y-NM)k0JV?OJRSHdq zaZGaiiz_0Hte_0wtAHx*Jr-9PO~(+w+)^s}(hpW1^z=V|1w~iUk?D{?(vIh%sgEy)w#BlS+vCkMbI8Raga4fas0$r< z4-ZT{sAjnOwf`OQM$`W!jt&g1xYLQjY1K2!MJxA@_3V>zR#Ra9P)QW#8 zWnq}W?S#Zr%$r!Xe`S22m$XjC=Sdsm2~)1rwb*n%7~Xxi$YQU8N-x$ z_0TUwPeF#2@@asggPkqEhPmx*m&4{onr(%az$7V5}%nBP`$sG0}uM(~3m^M8qF`$RLu<*3aC&{g?RM342 z=)4ow)H;-yk{{t4DVDa7`GT$*h-pN78XDZi$->l5R-N5e$~ZyeR{!xcQ&4GN^nYaJGzN=M5owG5> z(%k8*qu%hj#Hpq!|M z{cN&e&Qq6Aa*boBh(y0Yr2uNc4x$$Bdoj#1O5hVskX0U6?Ggu56|L{8abA-{e*mId zpKxKX-a^OLV1()Myo0XCJdkrYfDC5z*%E#Fw_lj>K|!i{n|`u)LFEx zw&1o-Dcr$doC2lea`^O-w!iBzTpC$7ZWFu6hwm{-dKkALpbN(NxN`V{RmIyc%QY2) zerY^Pzwgc~k^vdJ(rJCFzZ>7L+J`F7rH^qHEhKP#O`7qkL~$9sicTlf(2E}R3@X~8 z0LwahwSPSU45-PUA9T|)hrf^b-gaE>OyCh+>ASzNOW{RVz}I&QwMwo1{A-6&U^TmL zTyieK9u{+X<*vas|4+wrl|EL0*c7Wmway^+cku5?8`E=INyEEbT=3BoT5mLAojJbs`P8k!tVxkh8jq+Bn|?c%?wZn-^i&Dh<^_ah0In! zB9{O4P^yw^PP>10oYeLHdD0!T9HXMG_gk;xCyhZIZh$q#Yp*L8LgaG`Kod4iw&Hr* z475$1VBl0``;%nk9DZOaCFJ@5pA#AegR8v*kfBXA7e+eDqS%}ej33UN7k`%y-52kv zF|$w99REX-&J1o`yh5vh)lz9}GgGDF<8b2b(X3TGPq`-hfd2h&-2}wmK~_V0N?vuV5WLeHx(8==uWjM{m!aji_k2jn6^3HiIX zBFEj-y!A3z!LPWEx=VP>SddRlI?EWR$XgO%QN5vZn)+6qi2>EtzK1k~LSM=|-ociG z-=D9CVO2^pz!dN4XSM$6&&HWKD)sUXRf}SuB;HYXDEz4&E2Ey#I$KnGFSc$>5ic+?H^p$HcxY>}C-I6(F)941EknTF0mU!cB z!Q^?JC0@5Y-zj5#PPQP8ZD!U&{^Y0uySTc^F24jDsdJ+t^|qsJ&5(&pS{vP|v~q@3 zZ;i3XTc~P>9hlHv%5~jm+umX0wt36~(+fHVwk36WAF2rntJ(W~4v8Mhx$Ka~Ym3$t z;c@^LZC?|hfzK)zB>mIiCmiZ8bfx7CaO0X5n8!C zR-E!xFR*Hwtp=S~4@nSBybDUm^gX=t)9K=(d+O}$npYGRtY=9@H)%h27y-aFq8#3H zm78d5+l8ylt%S1BxQVoR;*g1}L>v9&W+xoBO4n0nkxvX6q2~z4X@r1&1n5+qSA--i zERs=%kN4xom|$np1_c!@kCX64csfWh+Q`_?z^ES(dwC?TkNOltSQMNSz}Xzbx;1B* zMHjjaiPnvd)C=q7F(2&Cx@Wk~whF+=X=ztXJcVOvN+!Dg%X|v?Z~x0;F-EYaA7$>n>k25yU0klWZ=_SWbAaU~kavq z(xK1xc*@3`1&I}&j|b!stqq7g-OmAZp0gwPAZpXh5703-Q@Kmx0^b#C*>8c{JnP{b z%4^8`;MHucu5q|Am`u|Ssz-*R=ly3zfQloWvO!;hsb_*$!@BR0o|#gDG(7I zBGXR1oIVgbnN5Yu+GY59$G|KgBzI?b{TMxnmDIRC9Z8@!hO9YSi-!bG`YFk^YO_ii zl)1arBd@~xip41oA~0FMPuD;v1mKxztB;qzFLNK;yKAM$hY++Ix@C-Ry!s z8BKbt`i37Ftg+2dt#T*CqnM+}K@<`UD%u|=9f|X7t8uJv)~uUVm6qaO0OUYRt3~ac znvD*j+RT3&&WYzAT!LjLGxzic;X5dC0&h>Qw?#LoSCgSiW5XcQlH1||nb1-|#oHM| z#m%i$MLR>dWF7>bI5@y4ZEX1ytAp+j`$qV!W)D7#)P8hSX7FHxW2jL7&%1kfof@LI z{#T-R_m1}@M4s}dt6PqEiRaTvN>i4xGx2FH;r@0jmu5d53aS2~X|pV~?!f@-m#(Ed z@t-l|w)e5+pDw|Ww%K8FxQo#3AlKt0mX;D~ELg3^rt7z=j|v!>r-Fi&?ZWS~ob)KQ z((2@BMtUaa=Bexz&=2%_j+`|c>tqsk5AU1=v}ppCG9nm0<{jC;nln;!Ro)zstzE^u zzno@b#=Vw1cCECvl0d*_BXTIBhCHw9m$~P^0wyh}L>H-R{sUw%Uj8dHn>>%36W5x9 zfa1Za_>4QF?vIjH(r_^U_6*>oBD`xn%{kZCxzy0Nhg61+lE-{-vvt;7Em>uOKEHw4 zw~&$tYQC^MW#?59z`lreQdfJEkPaEH_6?U_R zO(ug`&lDbWb`x3kIPNlp>b_=I-+ST=$4mR1Ez)Z?bXE_80@HXpK7DnW7jronD%h_f z*LjV6<-(@xcUVk};e#!P9*c&9Ewi?a!J-1tsb`={_n6`ImI&3E<{(a8YlH)03ItL9 z0&O;}!*2Y>kt@p|5a1Q|qaN!Q>|ga z9C^af43vJzJ!m8WWo#&n9E4!}dw>NvLcO2IxNY+&RuPZcf{K z{L14D0u&9_V)gvEz(9AWYw)Eq>)c9m!f$HTM}GQ0uJcI>O#V%1M!|CMA_(afOHk-@ z67>-X5u@Mqnevp+VtmkROAo%Mo)P>3|+Xb8dPYZUo!lJhO`&Lj}?8^x8;Gq+wN zRXrJdG1vD7?jGT&SHAsa*V6gt#7pS2O*thAwB_HBU&-qjjAG^U%kO0g_r_T#QrU(4 zy(YM9(onAts$4g#l`ayONkSfenO3(4Nb+UM?kK>dQC7YR2!&S}}Nj>}rW z{vxMfvU#yXERxsw?e*XtG>M2vK@2%FsN8j~2b8`Q`u)B>QB1+=KdLr6|!dcYXwI5SEe&cmyTqUU7YQqx!h;jeb?i5(}`SSy9XE5EpBgcmQihl={CjNN{DF z501ZppopRb*;}7XX0^xR;PmWg*Vm^Rh~)kux$582X~SYhMx@h^H4vs;^-oyo%jC>ngmwJvel|Y z7#yI6v5Ahd8d0o%wpU>tRdJ7QG4(Fj7ZP5lQ2F{Hai!e&1{Vb_@m^S!+N@hlEpim( zC3E&t!XH${aT16tysA0}x=vWt)GsbrHV{Uz8FygEH?QepnK{cmVN`G6u{#F!({dE$ z8t3)%qCXkA0bmUA!G?!tFp%VJj_oaC14LmquwWldejf42EBFNHME{4b5_m-~oL%B91ok@{37vv`UhIZ@xm5vqawF!i6a`A!rM-+>B23m2!M4M2e@4CKIbty(j7E-}f zL(XBJYr!+@Af38*Q4Z+S%4cMt_i>tlyw9xQ=TE(({xP5Kp@lr8%(mW<0g>T+eKQJs z`p5!Gh)ZETQO2B4Qft#P?FSSfdsqkkA?^&*(wzFV6sG!ole9M5+vb#Ol3mBV6OXp}D+k5xPreDgbI#%1YEJG-MfJH>^^uMx{idIO%I2=`Mt56}qZE_FHzhqXj zwv!LW*I`+97W;mX7I3H#GcluZ-E&;tL{Seg>(m*@WzVUV{tjeW@>W0Y=fQ~})YTI^ zI@|BITP`6(tvJqp?}1ZU!DeD-1R|)0Vu^L zRJ}CvysOXswmz%NQ|FL;E}depHk`jNeV*EPx`E1YG*^!Ud2I-EBkh8e1BS$U~t1#TP2Bbpap?3CysYIb}HpyK}q zJ$*c~h5!FOCxEue|Iu(FrqBg1w(D6MH3HOSw`o=^I8YG$K^$D(h9PstQs@9vJH4yt zMJVO6xgfJBlV-2i?ZR%8n+@5YuhjUXk{07?Ku2>K2xsn5u72$?q6p3q$vEMYnP=HJ zdfs7ev#kyz`%*jfVPHt8FCQDFNW(W7-IxeyJ}O&h!v&VdAEi6Al`88vgrLcy1j?uh z3qH+OMFfJL{b5oM0AgDPbWj3405(=MI1q%(+UkoIkW##DZ%3qH+YI{#OtQ@6r=X;6 z1MWfWDe=Al)n44GS4{o`um^);2he?&4MLtp$VLv4Ff&sY81VK_K{`u&7YRJ%{eD!G zgB)8!6k3})03_#jovjs2^Zjl1i<%64;(?O&v@p|nU*r_`kWW#DPd9;xT7kQ zQe#E6PS>Yi?1A~flsW!u+G6*Gx0`!^WU%<-4401P8*sk(;?7AM)J$6Tv~VlsoEdVt zJk**Wu=0n*AyKjj4{YDf*6Wfn0<))kD*?7&Ih(d?N<}k2uIWa_igo+h8k5y9JEJU5 z7GQaS^YiK9M*nEufgM{b^UKm+#Aek{Z&?yxMN>M!GG3Su-F&My^_{Ky?p1v>Qeya4 z!^s;B(6TWu@YDJGI9?PkM*}YIxXVNf=37UuTOR{00Sp;jj5yJWo{^vN*E@WJjW$oz zL~O1=-@B;14eG6lytkhWPADyr5}e*ZR;A}=SPIRtA4}N@AS`giRm0p3C1oi|(9m-^ zf3)xxe+DcrW`Mtlexq8&13oACKzMbw5Bb(+iPOEwfI<1C`faZ5z_RJX<(|8Nk&)hz zwRvO>5u8hXeVMRGftm~>eWA8-XLlh8&^-yU{l8k-yD>&cn8R1Bms`XLF13LBDR?T7 z^QJt5lf%s?_%N8;akbVh4ci>@<$-&`RYV!ScNX>pTpFOc?rRx8@Xn|b82<-B2wHwM z3rHM|a?Du#cN8*5>g7Z2(iFAFI0Exv*cdu`&QNyzMO`cjk8Ob+LbVm(2Awoy>Nuuf z9r30SdwIbg8)gs7xLFR(-Z?wJIHwnHhLVmN-4Ob%R(KmXj2^acy0*->c3d3?=9@zF zV=N{&h4F2EI=IoMkpg!&a$uU$8>wh*U*)=`aKN}STFRk!N$M&5oDb0DqV!i|$xb%M z^*ed;E2#f{b1YC81HN~}6{B^VEA>8fQ1Z1W*0Ep^xr~Kc(XC(ws&N%6h1Qv>a%6h|6Yp^O41!TPKaVhg|bmmlnESh zVTTYyN015ZGYwOoSGD>DA+U{g4mqKrorS_#u&jI$JHpg6L{y!Y^u?;ch(>Vb(oGd3axeMa_ z*6Q6oA^MZQ*Burv5+m{}nIdNkThU7$_O6$hEWQ4^jiBO^vAujM(+3x33N%XdLjXW1 z^UYVFQnegrsvdd=P|$Sf3k;Uu3pVmRJii?hZE3!-KWr07cX4BpUk0WQu?LDTI2M74 zI!8yHJ8}V>r0URxQW}jpa%)WiU;Gm5eigsiQ8^BY{?*IT5{x^_R0iMa%Jy47V`mD= zRZ{%743@=8)>Bv?7G&!Jd;M#iheXVuz2!GEe!i^mS1XF#YNTiCs>{=IlyE`I69Uaq;PkzYKGTyuw{OpQrWagQyY+tGHz$-h!mO&a)ye^s{h zPi|K`M2eLBjV<)7u=HG)H;gXYdbPVCI{CCA!%qvKv~Mw52vBJ>f8-=z+d zb~X4T$pLf2d*(ry30CEVPQG?#iF}I_Ye-DF?JRjjantYy-rn6MQwO}N(-O%Yj8ppF z5MFWn(%tqm?~pebxRyejhWa0ts86Z`;xBgG)awLK+@=ip@VtgOI}y%V9b$l0F;K7= z*o@Q7D9V8t)_ecq|xR26Q$KK>a2QFO_l znOyC6UuctKS)i-0akw%r$2nr+HKS;RGiLJbs5yJCMXTdaBB!WoRPdHsORXBZ9`;kV z4C6cOr+Aa#Qf_em&9rVUX_CYdQAdX`s@+wR&*BBlG{xzuz6EiH#FgbRCgM9sR}^cna2){C4SeH?_ud% zTmpZ@+1Un<)n6K$UQnUo;TR0;2jk3nr`_yuVJMbZrNF>Y#erw&=}BG)3PL?VHu%mU zUQObdAQ@$rZZ^{bhMt~oM1mHVS5m<5VCa9YGLlo3fX(%;4PYe&I)FdCLBI2DtOh*^ z)C+}>&`bbU9&~043qvscZ7+)13A_&UF!<>Eci_bT>_s$a*#WToA@SS1KFxO$QEoys`_8hQdac|=6gY}g0f=fo#w*5((i>}Ly%h8{=x zS~0J=FZQn35$sIeL{?~iIO{#RaYP}_lEi$863>K*4NijW_}^j zt9EU^c+nwXDEa`P{mv!E9Wy>UfMe0) zZzo$!8tW;)EmCKSBtL-Ph|;Wjhb&^#4*fNRRp06fzWdez-UhC}+QniHdGnYQ+_fpd z_37Ad(-=OMOO5T!_+aJ<331G!J)8=?RY`&&rLo|pV$e7zFppvV7dgYvCAqs4U8cF1 z6$0Z}(KB*=`XFdLJVYNEs6EA5_JencED7`GBB z0%q;dn+R&*zrF^~oQ9HOnE1ws<$W3Ce{Nvz460zkva_YZ&}9E|S9Xlq;+`TzVT}_g z)o&v)K4dnsPHmkbjJ?70!6hImKv(S4qv=a1BaL(%DwVS9(ar|;zT3wLw*938!LO4Q z*Baq&JdV_G3X>^!{VYJkAd)~S#M+W3FMToUZqKEs_u8euPj4$#^OLQ=Q;D-LFRGtL%vMk3f>Qu6wPcK%kk=2kelI7c*<-{LXsowf8dc8;Ebu~Sp1K@Zwa?vM-YuR2e?6_JJdkC`n@H8qjZ?p9Pq|H=~I&RMo}Y zBI#`lr8uY>Vei|iK`|c}dE{E@7{CNL*NO3NQ4e4}L9k zoj?e3h4%!LC4Kwhe3NLdxfZ zu+gTa7S+Lh;6;xykMAZTCs;a}R9OQ1L{DH0=RUZkYA%$N-c*aq#G4&^!P1i;C6874t8$7f-i}ytd_v(#7g|?=zuz<94szyZg?X#fO#d zu}4%na&BqH!avqK^Wkz#OoC%4Pka(Xzr%=<5A>%Q#FQOA;r_8RzSHl~WBhLT#sG+H zhH414^h>8sN4CSLcP^V{{~mUsfOr6-Ht>UbiJQfY#@h||T*@*iR4;v7+xs)=N(214 zY>k+A_72CQrcL>Rsr}XoH3)UHY9JfgACDGrS9q_V?+DxTK<}ULJm)F+jNX@)uA_Ug z2XUOFb0XP0pM zC-eL!&(G`lZO-yF)(IkO=je}q2m<~~TKv1GFaHdf$}~d$39NII4K`+Yh~U9MM6l~R zxeokzeUy-412x!ifH`XO;UIMAhB%0-$$S17}E~qs)mf+C!fz zM{h_J8&D%k#(PG1gtN1Xw;b;n5P7hA)J>M>upd0@x~@&MNxGej>Ar8&y0~%v%E|%T zog9`p!>qS>GPN-|#MJBDk~-!#R#-nQfg+0W+C*Jxlqp4K7aJ_JS^aKKfR&tZ!6}x6 z=bq?jM&DpADeU$Nhp#=7E43T4;zGL8@tt@v^O2dhFN?8FT=OuvW4^zL_Y>H3;3wBJ|SocPjbI* z0XcO-jO9GJ&gf9vZ}YZrp>Rhp61vl5D>9d)@Z1z>GS;IQ&a{b}OXMs$7(;$WzViN? zO0f-Uab=i=sHYudvp#G-{-?dz8FMUOzPe+PDz1YH8U34+CfX6+`G&%xJsEo(AO-_A zN;%g&6p8j(6k9l;-#VrzBWIE!V7LUM#!6G3@}&PvtRXkAI!W#2HZ)0^>y)hx_Y>af5<+Z?{Exr8KgdX3i6yV$YK253&sb0 zu@Uz>-p|e6d^}LxFEDKe@1CzY%9?fCPdh{()t=H<@JvID+aFY{z8om`uQFqrPolm+ zml=e9fO!cgc`HrFym=i}*85S>Uigu^P0nGD8=pgDC2wT(Eh8h&N`Tb)JOZa!jgKBz zO;NPS&O=U9&zZ)2M2Qe6T)jN_5l_k&++5n4X$2EgVFDtUC}~vMCtldw6&16yEJx&4 zH95?XQ4UfaL*D_kP4V(O_|)V-pDpGBUkcry#U5bgq6aZBR`Ui&zIJFtYbNOz9?Vz-Z!g}0WC;B6IR;<{XrKM6hlNz7G1e)@$K21jW$xt&;0avX6*72hX6J>lQpBHK{0MoIHCX1dX=s4`#I&@ zu85{mhyK-EAlv4?Qw#Q^M-7ohK9F6Dk5YoY&3GfB%$bIIpMu>tAI2iXE*Nz+Vy8I) z7J<^IblX%spZjZi$GxVno+GVzoTXWYX=#|FV5NWq`9W-cB-Qk?_QycYBTWL^N$suuj&X%Z8XF|MaOrZh&BYR5XPDDsc;K!{eGiwL zB@Jann&4d&p+<{66kp#G;ms{0?wp8%jm08)Q{i6AT{0b?=Ej>k4`}>ErjySZv2P}CpImU`BRCpLxh8KuXQ0J@LvNWQ zdx=O0>_rgrjP$D{Ll{VWv6AW&wBPXz+@F=GVJ@jze^*e7-4oQ5U*QjnJkVGu5l2O^ z8=iaSZNW;6v4d~s4@!^anSt~;EKEG;WA)>e%C{E}zBrnD`_Mq)yDka#hC6-ta(9y8 z+9xoj-zr;LwGHRc8V@@H8nboaDy{dQ98^j(C6F@;kIMD7>VUwsu{PjOA6CQ$<98B~ zBnGxfYky#HBXq?^{a&5xxxS{tm2g^Nj~$R@=grMpI8jE#c z8v35`NUsZCB+_rQzfIz9a$_78ALfJ6cjlNpUZT;Vv6Z-Z)N;SCfBS5kqicaiZg{@$R2; z>YL&t?~Aa@KF%QvH-7jC^Y+YDZ>5eqyJ+G)l-(x?3$%w$dqHatmA2jq-RH%XXE+yf zTzc7n64H_xlByd}T0V3*YK~D%tAW@S)1;H^n}^z<>y@~WLs>h@#N*SmQ&Ro=k(mEIqQF-TRUp?+P7VTQw|PW>*+y-Y+~0z03$?`Ag_ z$?mre8*+E^J)#-Z;0#g+6Do!|+KFoL!J|n_Rm^IDodi70G!GrQO0?<&?N-nVlgL9@ z|9t!3M8ElNwK%=`WU9I%387>QCvwpY$6GP1s&JfQHb(opyeNMm8W@(fUIwWVt`XyG zpSm}G%LkTm|GYOeUVu*wlW+JT_Z!;!d^-Qq$CJmdzY%M5q@MUK1Pb!t@(g^*a!tfQZP#CM00? z$7kgZHM76D$T4F^X{a5!1*h{~L#MxRUIeY1$jyfFd^zu>N%j#xBHzr_#HXY4S1OUb z(GZh@5Q9_0d1BJcyT1|k4s%T>tYq!isK&K)i_woBGzu&uL_x+O(3_RY-McM(B={vV zblu7J95iw#S2d&mY(X_?fX`pW&cmTtGA{I?=gzKTvhE2+OxL0W{6KS}7dr&oM2v5` zDGn}s=l1K=@WmWa{dd7(=0T3QZO)Tj!V$!L_rW=CdE97Uik{?=_r)S=?xgt2W5^HF zs*wj5ZUw?CYz%Ez_i&|4Ll>M&e>z8>Xaag}#P^z)w;Sj{$1d|!cNfOx300SIO}o*) zYc`d~CM*8L{|m**=1^s3 zW`d-jBVpmIIZKDU;$jhzJJc9$8bq3KoVU;}k>mR_Ej*(3AzjUy4LUmR*tR3d0>ft; zK+`of6hi%5D+j{MViVqS8lczh zu=cAdLN`M{{+RxkBrGt6CceL-kX|HVwA`-90t)t31@re$2-lQT*CYXn7gOY|LY*f+ zb^b<|_^EauM}&bf2@;R+LFX00b$ov#$-p1o^=0o7!37`Tp@3-v|F2S;YzTNhf$#nL z@A?QG>t}ffb^05=NmkIICCr?r1qB=JelfZ$9om&?-8na2zLRNiLN~M0``5c8KPPKi zpZ6%LBX<8WfJ}b!Cl(hGNj%-$)SU(Ddj>QQEXQ|i`1QFNZpU9_9}br*-Z0_fh4+dN z^S)NgGp9+2DYob?JbgH1qy$Hnc?=~cTrUs3jg6k(ozS?7gO+6AQ4LQ3CC?U%zTO_k zm(^r~cj!=EQH^-bIZKO@S)v05(U}|_7KRydnECE2Pt75et&?41S?03&Hc00}*>4$2 zNFt|P|D>Xm*&w72&uV?*A2nk(Yz_*`2pf3)h{YX_KL*VgqRTZn!3=xdLTd1wLhVz2 z+0qJ2WSkv76gl#4{o`ncei-{3X#D%-*diE}ss}EBW4ZbFRL^d1(LOJrbf@4>42rGg#T6N7xo@U&92$9{_}M6^mTesIBC|{uebrp@JDOg z-4K=BdDn`Z?h?YnZ~eT=WB#KIhcXYR4|#=g&2JSxPAAKPMcCOJnL{MIw5zy1$>C_f zHQ+YN6@sFkC=;!D19^5{WP$(m8H`9K)uYPccag@-BK1yn;B`hqqtf(&rX5iXKN~Ad z0;64%#mCFVtkuG_>-nlIE7xJ57xUz~B;wIWE@n8kuv?;gzACLHt545e9xk7S zXc4QG8hj?3Tw1%%XSDOtbA(l^f;>FS=VV<9-l$w#_#Acal*MC19y-=D1tKw>s=1b% zPnryuGdGcnhPqc5>go_g5{TJ#ZxI-##M8&He>|J!F1o?CoClVZv-xkR_@EWaQDfj= zve0?ccFxgC^LG?{k04&@R$V`k|EYWMm2c)!y*P>1JrIhHgJ*Ca||>I1?BQQ|y?9EtdH@ zOF!dE5>Jn4C{5m%E{zC6cM2DHhlUDl)C8ADWZ0xb}`n>$J*1&VS9{!2c zjN+dT5oNJII%)mGI6GMnr`H8u3e9i{34CGywi?-hY4aayRCgdrZ!=B* zY9Ws?%sI8f0bPOYrX|Hy^;c4~Z+SP^qq2h@EO5PQR;QR0Hz;+TgZUrs`NM5Xfl10b zd*(O}HWAy*gO1D5NY6RyMZHU_3|n&6d;&KQqQDu?*Z_AYV=_~Qk#P2dtsNSmFTv7y3eF$>AJwA zxFgUi`WkQk$91lTmjppyB>i-%pOaJ7R0=xuwhVuT7uVKSeli|yyAQHVr z%SO|cSkn5(885PPW&w*QrZ4Ggszn>iD7-7$W+DGkGr)~PBz;uZGnVvB=el>Wu1hxg zZ`3oRuR{@m8tX{M?Q9P<1EAW>Klz6*C+rx1nkN)_{Ws<5P~?H6kl4HAPDNe@=&hkG z^ETwtf#7y!g#hFOyq_#jtkxP~Sk}8V=I}c$ToH2mq(u z+4bFePU*}><0r;Me~ zgZHS4xAbJqqbx9rQRsxO8XQ=PrCA$sxWZ%fy9=zN8qQH{uVXT^GvVV)rgW5+F+)>p zAtPvbzdw3unZ=cYyd#-4h1>HKs2QVPG|(UU6nvi>~M zAQX3xJK#u&0F?dI#99lx*QLo47~+ss6>NE# z60P$mD%=?9bv=1cOxlyYvf4QRqdhyfU>D(6GQMrx42GmDV3BF%vx*kc{pRkadY&H6 z>H>xBs-0W?8Dn;}0Y*#PU*_k}#gnybk;I#s@_NyX_N$hB)vB+reSM&RQ-ND|l&IF8 z2vVFXvX*UN^)SilAsd1|Q6ycMqo#|5mQ}2ej>W(ubh#cN=Y3f{j*N_%v zcHfvZU8(^m=~=1!Q8AawOiN{M^1+s7mf+YDbzP%0S5>2Z^g+T>KwKH<2Ra=FRQu)9 z+jXaSbFF-F1#T8zkORMYF_f|qe$#y3rinp&R;tmU+b{h#qjsxh8bMyyZZ^gH8mg{; zS#ztqy~2z6iD78V$FxP5nkDb3dGC7XfRU*d1TpazN1IXOP(wVD9QN;yv8#3lD>C;A z{%QRTITepkxPnZ=Do0Cki}#i97OF&zFQ%Ddw-crDj*MC1x)X&nYXU4t4J{X-5rC&$ zTRQ*_B34@_|I?LJcvA2+JO@-a*jEh_*e1q*BvODl#0To?uMgjnBz%@^ZN4VvJGn!T zCsYUZ^ca!XhR29Z~EO)s80|H1;buTS=1Bsqv{$gch2Q==DH|Dcu zW(I}U*Yj$M*p=(+Vs~|WfwAPvjNw6&_F6zu5 zY3VFM^=fA`pV?TPfs|Esf2YE`;2(mwo%whwH(R)rrA&IK(0bOpoakMzsuv^v9&2O_ z&vL1<)UMSorjMV#|5re{YFo^&4MX4b8;zEGmquP|>?cwqtGFF<{_FSkA;6IZDizO| z6vhdzPE*?7dT?q7ls67pv1n0HGEX}qWE%ZJ{>N_8k->Z z1nLKoH&vNLs+FxedHUzss;5w6Iw@72`n@bpT!6@?9ejmhv`y8VY3)OSlXf^{WgQP! zhV5(si0Y~zG)*|-W@P}Ipi$nmikvt}zPtv7#vPdpwPLlYZ0Su+C?q>F8!=ar4Vt`O z5V3|T9~TZFglo;|+zyyt?qIoDc3c)+YP&{RZ`fca|8B{rRPOQ8sJzmW*uI}OFYI2@ zagRXVaeo~qJm0mHK;~`){kQdF5=PlDNA*bg2frIc3Z|U8dx`};9qC8rq9`|{ zPFIRK9j;hEGWgRu9d*fg_LHOpwuk-IhB;^p*9h7TfFX!`!R0(|>!NfkFtPOC(y8lH z$f-Kid&1W{CUSLQrU8j%Cg{I_O?@2|)7a?NLD=K2)J9C9g16OD5E_XVVcdF;L?!l}-mR%vMcF@Jl zP8KGgS62=Y$(7bSwxQysrT8<|z!@{CxZxFhpM8|J+DF&g7JjiK*xLIZw7)5F^f=eg z{h2CqwEO%gOz?=%(myPYkcM^%z3^i4HSLh?@5bIz?6)S|MjqNUv-{V|AMnAjx@9d+ zkw~mW1&NTkJI_-8T3F#!P((2+pfr$b z-7okeEG*iurlY6dxHezSXfa==hGT=sC(c5n#9SN~!^QCi+yjcY2H*aY}ektHchSB9AD^N1hVmJ&+d$3bv~bfpK>k!Q^$~vg9JoMv%@d%4;C5hcLAi8qOzrH+bsEIp z<429sd)qM<}M0&r^@Flh|KG! z;B0PKLXFo|=(QZAOB9pNLJHL(UDS=2GI1Pp@&8qJ-9b%l-&$!3DoRHnAmK_cqI3u- zgkB>eAXT~`p!ANSNDu^qG^r9gp$Q^2z@--<^j@S(389xD_&Wjb%$@h%AMdwkGLtzc zr|gowzxAze?PcYR3tK?+1lM?gF;&{TQ+4eSMQyAv8^39q=W1A+zNE5OGkvCc|H7VH zw}%D;BvIXL_{!~Zw}=*nZt6dj|1-F$xrA(K{!=M0a-2WHXMv)2eq5L>1YL~+hO z9@}_9q&TkF`Sn4UJ%Jf+_EC$gRq=UD6TvdDTf5_@v?^H;?@N?@;FGji2cJB54QuA2 zPzp8s!ll`126v~jSteqRg!o&#gt}1&uP3WSYlMa7NcmkZ#SaeU{$3P2p(;)}6)TZ* zawq%X!=c~cxKvlV(BjeU(5^WHraons*}iyCPT^Br5j(>WEO*vm_B8pOU47_-ZlD?m zrv5NJ7^g!W_Hg&gUYI*XE-ECPQzATNP7*w%zw>?Y{&$}_S-(|x>mn4z<2vro%j(+YM_#q`k*gbz|Cy% z+d0BveyVKvj2u6S+)=1SYR^o(DBLYAC?`wBuy&Bripho$4As=<6$TLHOpm#vLe=dA z@vX|CBMluvn;G=w8>pY5{wUV_0r^XYC?DvI9^4gO2PjK%9O9`XE0mmT`bA`%^(&S` zvV=blW+aI|7iifvpk@Eqd>SXe^Qd4G)Mw753X@?#X2`t#=C5SP%AT%$@9s+ctLQ7X z*4=?H81@Dg-D}sJ$PRiO6i$uN8yXtyq_=FArxu^?H4>0k&TeMde2WP+f$3@iPLLFq3xHY196k2f5Y-3OkEbfACuPcPgHJvt*Q|OlQ3(xKxqjYRuJ-w;!M?(MQ1xdcOwx-o@7(H8 zmk=$JA^&o>pKFnPdk>w-*fVQ zUhDHG`S-2HyDILdno`uZIq9xAf}c|u;`?LYupU|;Z_`14wzPwP18eViTs^Qu&4H!i z08U4dXV@<}%(*}@x6lE94Cq*-lBGQKAM6s2X?jR!JERgY;y} zdrO?1J{+7jM?L~=?xK@i;{eH8aFmVBIbb9_1-S+Qh&=C|fUw2ldJ74SF{!T#9p$J) zw;9>m3U3+@kkqTv_bycZUvWP>FDmXe2w=_vS{gi`Q~Yar}HyO zmw2bYB|?;XL>5^xHn#%|ufMYXQgy6E#BBEa%00kg@DWYN`H}yy%ayh@4fct%2a)jFZ<%{|_^QVD zNq*%h8GIhcqnroh9xEJle^Y%@$tF4O08#_Y6WsYU5UX(S(cIYR_5|>`G1x#Afj3^K)=J-uIb6|6L%T#T<|08Jf#&?MYt;-q5QGgXfJ} z!;&tj^!s=_W`wOqUMTd|l=&T#fve*8hB*D}{t)5+N^(A`iKD@=ewb$Y;i*F<3KpCd z^ec0&DWIadDZX$?Rl;|>q(C%M_Jmr;Wwrn~dc^fjKkZeZnR^)aW;SYn?D@}H++`=j zQ}M~o>9(IbzX~V&bf#u49u*y$#nf+d+RM$%;1y!48 zP!M~zy0{y5T760i0F9I&={!LF#YB_(pi`AxQCL}Pw)OYvW%1uHLDlPm_o0fn*R2(`nKl5JlfZ8&&MOOfLQ zG+(YyA13$jGnx)T!ubB-k_R5s803|otCYn4rlku`%%?CMD6Y;2vKk^vmy(trK`;m& zGY-8|(gIrkF4eZto6a>#7P1M#IvW5PJ3f`cm&$Q}yn5cRtl2KyC)tjHy=8|*Qzxj4 z19u@(8}UFX3nXmMZ*{bqgBHWg&!4ffVx9RG=d|qPkJJ{s-YcpNB}bj!ep8r#QNh(S z+LpM;gX7*kJniE@*a#l+UP(`{3aC5*bN&QvMdj@Fl)MAfHRjcpQuYCPO5jji;aJ6rRXw>HFD^1H(xpo0kp;Q ztYbXfQWu|_Em8<57v!*zX0-nGbToA6FvGR^=L`DMii15yEKFpq_%!$91guu-0Xe79 z$A!yLrQYv&(J>biZKhvGHbcTjDtxqX16!x?+9 zSn1Bh0Ial|yrX7p!I8)Qq_<(d^I(E%>B3YMu9j^i^Niml-D^UB_VWsq*dysDx<>!E zMfotZ|JKdU-TfUUfBH^gie0$qP_Zv7fF&o#1F5G!;wG-Bni8e45(v)}A0SS11oQ`4 zuCA{37Wo5%lPgZ6f~QT)diTv9@kiVH+jI$u6i;OLaFG*MFh-Ucvp8C?1}P)|uPicZ zM{XC*9oNe4N&PsPpV*w(J0*XYDUlWzH*%?}ZjT9}$>wsJV1ct&-K!TY$uJqCbtlfmfp>cyVoyN9NN8IxzEO{nLD@8q^VH+-P!WGvi^%0lw?hem(ldzLjp85Anc1 zQAocP70VT%k4Sn_WI2s$Y1q|d^!4<0`HX@T{2J&7&_oii0oD4keel>@uu+-aoTBlH^ez5?j>d8F*B?3RXJi9*bcLls)8ad(i=lqS7}%bJyA zGLNR9RSG#pt94JZv|TTsmOX?HQa1t`Ltxq$m&MGfmX`NI^x!jY|G>txfA>1!$#C#8s#{q&d*y9xHdr|eG z#63%)hNSJOxA^uBCF)e?D(Moq9lEt^O)nO(Chep$)yrY#!;L+2aUahBP9>oI=uSE? z;txEbYkJx_oDNbeGHJ;<-k(KxCzY)AUX0O;=|VdV4e3b){E{FfqDERO<`(3>;>ku& zs#88LU=e3r@;Zo%X8Mps#H_*iO;!dPN;m8>nL0cQ_$irdFGax;Cp-rrPN> z=h7W>9fl-;s8fG@7IFcE{m|(PNdyhXMu(N2AAvKun)tH|0X+>6d%0&uCGhS48OyZ@ z>|zQOd46y{G5)mc9=z%qi3Ya1W4K||LG5Y%F6ndIQ_4|$Yd%SU5&Qggmq;*0j<{xu z)99q>&!taZU50_2L2O@d+)hB&fah9ip_9LW2&%&NTst@1OB$cuI>T=y@6LqCaPH=2 zl}E0^dzH#@?MX!@z8w$E|0g3)@#Vd9Md!oKF(H2*^@R^!TD**Zej>j*##7)sY7h>CA2HPP7esjAS?RA^jp2Ewl^~|0rszyxN{!UHb{#|v3H2Q zst1F8Xm95pBP8MjN*#Rt5eya#@8mt3u7Onw0`;K2$vda^?B;lRVk)^aC_36H9Ud~@d@gYUzDdvqS27mm6e-cq>!U!B60Wp+D!Jl z(d}yBdnSTat9H6BF{=wJxEEX7qHY`g*FaLux1^+=m>_}(Jpm6wY1fk&B8Szi*b$*n zG3uMDR<{wK);-`~xD%@PSdlTYiFUAnZ($MgBSk5_>HgBqZgwHMRNq5P>5W>(y za}WIA_gmju_pW!{d)69QGjnF2eV()Tv!7q=5H%GA{6`dz?%lhG4^otc+`ESfyfC~T zJ^(&(wjNyt{@r(jD7?8>I`m=_c!Omltt@@-UPTn%r5QHx9@j-t&+Xnlf?v0<``ym@ zmiO*W^MYihHNA}gE#N{)j~68OR0$sTynH7W`T3rF$#EfR#Pjfl?vzP3c=aVG?St8r z+VN)w2V&X|zrh;c&)YS;!J8KPcri*e`bzuZCm_m@Z=uTpTD%Y5bl~?Nr-@BCMoyY!}xSEUN^-+f5hvYBW38->S@T>YqwfGQSBWCCBoeB{!_un|6l}P z3CM$;RWgGA;VG%d zoan?!%-+$?hNB^c|6D4-$ZLh=C{YTWK{AodH6$tQ_a@@*bRtH)DpYRtYox%p-=nsYW2bGy!vV_S4A#o!)3L?fY zTsWU)y#6T2DKZBu#%{a$tLkEPu2_@noGPfb(tmdIJhWFoSdgV7j*ar-v4mAX9m6A>fhfSkxw9|WKcUFs>9n0V(xSKh40Na@q~q2 z)8uSR(?;t8Lf9H1QFiqZq+tIsqa`LK?UNZud1EA-s%PxD-Wz!+RrD;K@xI?!Z288Z z&7U7+(6d@MB*DP>qLI%Y!>>7%|3}FZU;VZJ#Nt&=ZS9uycmtAPPdJ>~@4JL*am+ms z1|#mbVn&UahuLofd3bT8> znzaC5BlX10-=6+KF2V2R)&dqk=fJ*y@8;_bFIUhvfhIRTG2qRf;;6G@P+b9O4nx1b z&X}R`wf@v`13ULb5y7J~`%;;%l72kBp%kXMCzIY*eoO^E?|$^Zz8g;Noc26VduhSb zgt-z61Zl!nZ(mGdI{LG9nd`WkurZE z{=*rzt>RhJHX9}Bfi!XNwAnL1yJDOFx4vr%#~;-#dYh=mW!cMWCw3n!UZ~s-f`wG?G4W}s z{az2+iOH%qLC?^XM_B^6j^b(QPhkG*dg8P(_qu20!59>An)m0ceCw#o=Z`v5k4HJi zFb}EUXidns*kxfELQ)t4#wu^lTBt2?&)6p(FkXE(5i8E~=2x}GU4C0>ggal%pzFIA zaItWxRFFbmeis_t!ymro0Uh1?>BIVi+{D#Vea1K&gEFP}M<3*~O6pfn)G+0^w?9l+ z4v*(6(bxL%BQ1uQj`wiRb7gSQc_SbW%OHolS>2;Y>^XB$-il@}AQ^jB{j+VM)Jc zSf7q5F#g@$b=0T!oJiIdtl64pU&JfIkKPn{^b2mbwjQ+OzT-h+Wy*ci=YGy%s!V~9Cd z*uTY@f)s6&ij^iow;_#JjE##s<{G-1sj`UzhV%YZg)BoLtAfJH_&2)h$1S+;#1+aq z^6ba1GnBC-k4HY`yS=v_uuSW9fN^QkLMBvZX_K`OxqWHz_ps?16(IP33{?tGlC`b| zq?9tG86_l7DE#ziRdIWhh?(8=$bWn8o@e;ZQVf7tKZ$JR*F+uq3T zZ=k|`4}gZYwwjuXO8{St_&K@FuK$Kf0Il9cK^ zWF+!WPAdh7`Q+uM1IesUM&RV3{PMtt!5^^=H#@GoX_eg*XUYbmwx(nR@T|`rXFw$UTPpN!J?VM*0CM-8ECFxy-B0LTg9AwK&We$FoO^dt z@C$QVxx2FvPcZ+}FkMirt5Mvnf1PD(3d4UcCDkhFn?a=5ayrGA@Si4S1E6O`*u}H| zN%9EN|L?c|kKG`^D6r$m;JHuI{Izo;wnmpSGr}Ez9U4}1L(kcMeX70X_VnL!Svyi|j=7Kcl(Rv? z!uqa5FC3w`Og7Kmj>?j%m=(^F zyOMT}K4;b9trPX7+S00YH-Tdnx-dy z`=NwNYgB|yuQul7V8+LpT}+#|K}Dp4)S{^Gf>9oii{MAfgLAFJcfku`>~PFQU^HW~ zXfw+9AE*hlgD0-7OWGCPn$Q>t`t1l#o1q7!P4|)p>MZ$0Ow{57wh!dLcMyXFnvHP> z>Zz#k`YvfGTP*EuS|0uLu$Uq+Rao2Zs>ZVZ7BCl>(EKGL5be_asJNr03rZQv>)Kh& zf&;y~@W={J^lZS>s)1Ns$A{XX8b)6p>Ad%KZwl|N|Fx!NKE`T%VUc)pI$uf=RUW>5 zz%g-=t4|Z{nI83o^G`)gEGMU-j}bws#L{EV53}$unkfrSK*hR_yH{V^RN58WEokNed;83j0t1CX-ln%w0caISb*l&-$K3 zz4lY*1^m$0fiGIv701IiMnmRGrQVgo=L=cy0vc+OXUUit{U7r6f59A4~C^OKvRXw@M#f8I*FohD$9p>+PQ@a z4As;*Tiqb7```|b$sl0_r0jwSHgPUnZjpm5Yk!mvp?35^gvOq1zQe7}q-HDc6Sok^ zFs`5VQ036R%g3_7M@P=XxGi=j1_qQk z1TV}jZ!5R#4OdON&M=|u>G=3~1n+IFsE$w!i7$}?fBG>wsf}JrOneq)8Y=x%{V4f< z9Jv@gHH&Gea3R!s z5Mp^dejZ601dIbK$ooZaKAw+cZhNvqQf`+y^Yilu4r$qa z8HuWcnS^1U+XVc@XPUnXdk8ocgqnZfn<7pFtx(6ml%4!na2iCub%lP zjx$84clk`rYA(;+tX^PseSzW*W3`g-^m7F_>4<()Yf*n#!dc~NG@POYO7oFn%8+%N;Hy63A|e^ zq`4<53BroBYDp%-#3y-ujRO0E9Vfz?rnYPPZ{F{_4{=OF97m((9Avj#Kv|lanx7r# zY762$4rZd8191oo<4cc|hoL{*Bo7Q|rcm`MznYOJg^wdLgb3wFwZ*PWx@&G)x_>E8 zF0@K^En6DI%nPm9-?V<|rmy>1PkesH(mf$I#c?7L}1%4&8rt zdWm~^-kcN$AC@!Up7-84ZrQ3O8y*~6?0$Z65bd^SkT{(7)Aicxl1nzlp{{BPZ*n-C z7fT$W?iWD{>J5e%94)r^Zj)7^mtbuY;;?JzRheH7kHyRbhv`2O1HI~cf&#^<5x9&} z6~0vc(K^EHE1&Q*JbhcJywmwRr9u{#S!^O}2Z-Mesg0QldhMBBDIDswohK;pFiMZ- zL`j4;xFOB|WJ$BtY#(h+DBY+>Uy(+MpM1NXDs34a{8g8Duj=Mh;ZmK3T3+S&YDe;1 z2d1Nx8f6ef5jPSS(o2|nk&9myz{q=?vt9$6-CHQq(iWPWIjp#NczhXh4BYdhZf_%# zmQHq_k$(%HwtNJr`D_11C@0S*Ye#Ti4;67;7(LW_m|0iv8-a*>CL>oOyS15@>C~1r z@xT`LRFE3Zb{K|3wql2)2TIY~b+YGqK0o`YzRPVQ1?pn2uBY!#CUb3u{RxyF_pG0`rIcPpa%n zOKTiv_@ZcVY%=FcrppOt2?sn!u2cC)>xNPu7tfi_dyk{mv75qn#G~BxDKpV8GU7zj z&eNqpI-X`$jlYakC97#_f{qs|cSDXc%Iqulf2ov{5%-Af`{lmK_?SGd z!ZMKDp{KLT__IZ^y&g52jozmKD)w^rsU8DC3uZ8r7{q-6T{I7Pc;`a2Sf zbopv9ImdAhyWTQgiOJr~+=YB<&1`(g$0i_pX=={fnujsHoI|&q_Q$7umANJy{AA(h ztA5>%8ztXv6zp9lK*!tV7Zj@)h?QP^-GdUVb`A?4k1i38s0m z!bZcxQiI&o{MyQB{?Z;cpp|#U&Qqp*h@^~mworD+f!C&K%?gLk6CM7kh&Rq4nG2)M z8FJ&F-Ao+bs}%I8C_)R@U&Q@iOpk^#)r@H*$@Xb6K5s{LLJ;@Lc)Uy+IG*BA%B|Vx)S06__K)jQDa zs!JON?wPOjsi@Q9d}hedRiye+r#fv7CcAYqoR}{k?}Io`x#mv_i4OFagI%L(UOxW4 zP7n8|Z1RKcJJv*zwY#E*qH1T24T5B@TE_D0ijD^aXpf+%=T_kx4gaK}05T9IdUQB<5QiBYPIuqy?ZayY=!j+I^Vyeqz zsGn%wh^RZv>z5=$OifIg&i}BP|GBk@%ovH>7RV4PuC~}liyfb36ueJ=7N3k~EPg+Z zpR!!x+2d*zXMLB$w}FifOxwc`)mnxThnH%r0k3DuRPc_x58dWPg4X#qLx2)= zwx}5Nl-u*8fc=+eu4krbjCuCcy~oiV9OI5NdR(z(I-gRl=*#=W)+a?^PZ@VmUj!8= znuaQmujL_GQ*$6|_f{NgFDcaL&Za?4!>|oP9a1ms0DsuPzaeHp&Wg)viU~RBVW}HU z7qM9A!5@k04YW6Die&6(+K zH-91_zjq8q61IvMMjvYxS5{BO3ThO_g-Vry@(SWjvu!R%sso zHR>eC_ongjfMD5TZpzyh_XePd3Y6orVDY2q;EI-GR8_=SV<7hw!v3Oi zw3_@nH|tw&Nz$c!;DG+K+_bA~niwW-i$Hl3X*=6ye)oHjF;dHV?A3_4e7|@8cgsy$ z-o3%S{>FbtRL~~8TX<(3B{s2yQ?-*J4;vo$;<-QU*JwWy z(h%EyIny9u*t9u+sT|Cy-n z160|2R}i9~v6%cN2L15hPsY>Jt3lpuImv*?Dd8McWDVJ`dvi4h7d|q~3z^);&C@pB z#Kdnw#vC7Di+VE7>4Z6WR#l;$SNTKU&kq-#PVLlFEKN{uQf%w~XmR!^?7>;r$}@7_ zb}EVd?l?C6o*oDU@v@ncpRZ8UA#SoKu}4##{i|}cA9A5-sKwiiJj7zeujlO4MWv?6 zE~X5x=Bu2eRGt^_Pc%!_2Wf1 zWSN$>%C{16?6?+VWaQ0W?Cn{;`i7d}+sPXqN>cjcwv>gY-Jq|JW6MmtlOEZ%gN2fva+&b`_f2nd!d=Ied%p#Iox)A%$?>oBz(>fhCm?E@$tE?Vppf# zl3nOlw78+qCLH+f?5sYAUL_WAYMIs}_0xT5t}JO3vZk8XXEkLS&(6ZVE&n3>H)9EGSt(xoABv?26j zZi&Dr=W{;)Z3!QGcIbn0`-W6^Wzpiu{OQuh7-AF@K-w8vjsuZZ;fW6AXu5@rG1Va# ziST||Zzl-H1NO(cEZRKLbYRo}uuOC^7zMvKYNGBKCzjAp44Og~vrp=Bg9w5Cl+O#FH{B&xdhL|rUqxD@(zP%8B2E!(Aj>V*Y?VE6p1P%Xs9rxbj9 zdq(VVIW%#N-_gG{1n5=%p$NcN{`j#)I6x)xAzwm8c3(;2*MVN*@GHqX&SoV?QemqT z-^%We&c}&9e zw!QxS>QUIm#cmU~`A>J|>L3DmZnt*7cXd+}0xEe8ZY&>)uO z)GfaU#K&2e`yR1CbS#>lpP$5Y(VN)^y;}mA>qR2UU{~xO|E2?k-PZHRH==id$xkSG zb2fa;y^2EveIgS?(3ve4HvVEnz-|5Q)Qs{WXkMwL;n__RV^>4k-b zqh-?E^~)Ft1j6+1?~vy_rXTy<ug4KF71+h~GCL2+UYVPs_t?_z#t0;E!WLc+@JxYPn8dM}JjOv*B0H$V@x z?2g2b$2D|o?6lgOz7zlJeKI_-MAp#Df+%~dBtpcb=NnYsfsunt_}#ULc@Wc&e}3*FdMwFkG-s!m_+Wkkuo@~S+WVz z$HB;cAiVGXn9=CKs?{Yfm7}w>^L&u(?BKdfsC8wrG+Zg97SW3hd*#%ld%QWOP^M3N zKV1kEM=1okdT9*$Ll?*mWZlj(|6}&6Zf%UvcX6Vz2Q3xWgDG5R^L_S-Tbz)EL6bqe zGtT&z86W|D+zhU^OIJVr>%MBemc(FU4KuTs1T+%iu*+2%A7xJ4NV60H`$XeM)$dp3 zTQoN=mTp@6_LVUb;+R#prk=SDGBX;W+HP8}#km5*l~NF(%|sG<`S6FV-_AS8TC;Ba zVW%rW=k{?FTnB#FU6juG!fChwebms-tCUu}y7+I1jLV~zsP`&ZR^V}i1`N?dB=B^) zJpl9l$`>;814J(oVPh^;KcIE1YiQ))@OdciZ=ql}z5-9FU5V()d|i<;T=jluh&a`w ztINa8n_?L6C4yOUBua}XM88Hgv~EpTu{RF%iD4$PjgsL&js@OdDS3z-)+tz7LGY7D zporLU+t&^?_4PwhekkAilUe)Y53H4*JW$q4lcAU=n}tTMVqeg_38Pm*H2%6b zX<-P2<<%iI{*Uq#GE8l#nC{08>*hAh)~XpMO&r$wB{GmvgCRPe zn_BdoavhN$^6p)G<4je#c@SPF-Z!kO(eo6Yd;z|-cm`EY2A`!}LP4MX`%s=~5Qqa0!lO1kuFyV#9~ zW+1|JC4wMuJ%0zw=t2U>8zyhAB&EUh=ZK-q_$MjSnjF#XTK-vZWqqA!v|ejB;_I8{ zxY#bq>-{JnExiV{N3sW263HfsZn7B6+s@LOfh=?f$hPb4wxe|}2r;8jFT%PiUaB_& zt2a)%i&5Dh#Snbnc5@+#Mr8?Y>b@!bBaWVTlMZCrpEPjZJQQKP;^?VOdoEx{da}Dv z^dqZ{%k}}CP+WSbE-hn3Z>~zN5Gbr`LFO!ge@0bIvd3NKDy{I0{f@P+-W;57ml4jos76*mS?Fh0K9j!%so608j2-V6 z=q3BwjB=G$Gd3=Tq{q?yl`?r2Yr{zwg#&T#y=?C5jDyM#{A`|%y);elmrXH@mWu-_ z7e?LPp5BURTEhnghn&c`SJnx`hS||HnylV2g-(q^*d}9Y_-hipE2(Zo#ga;VFlmvT)UJ<z&MrX{CD&}GyjU@z}#Nxs8_fYzyg~o+}IxL4gbI}yTkcrjo}+H%`ubS3$L^s=#Zz12@cy%ZS5zbsL(I8Xaq*uO-Q^qDnFGGg ze~+WV2gTuCcsbEqF$z)V*2xyAJS!UT&@h@H>gc9{g$GglC@Oa{H&k&%l&zWf5+tjx zC#{LF+YIpyJjed0yI=i`R%_KZmUJw+}q7{er{Co<6nFw)0xloA=iGY3sIMepo?Q}|NXG@YD1m# zLcN!^>jKE6)+5F%bp}`bHRVr~xURWAnMNw>0$+#~dp&D4ajIjDy-MJk9&#Mf=d)9- zKXmA;jJUO6Y~;(+3s z72{5LT}fniO+gcUxI^%GaN!)78mPmU#G9n!LF-AW4y)I8E_SGIRExjajfPgi# zuOuJwJE4mYgzUO@}X8&*h#PCf^jvL z$$Ny>y=v_Z}m0|O{xZ$vPMY$?B%shm3a=c5wrG{*1TN>I~v7;*6J8y*VUHnH%=N}v9GFxhTCqg zP(E`^Rc?>iS+k<;xlys1QfUMBv5w!qy!_eY5BBwEl|JNhjHBEJ-NW9fEz8s*u0m#bv0$Ng;(Q%!P{Ly0bFJV}(1hKg_j) zYL!GiytTV0xf-I$cg=r1`Mr%6j}fv(vt+tgMa0j4i|>A`xEV3e5HH=ewokYop^5u8 z19|}RM0six&nqT~+KM_P#d#}_cKT#Vflt&MwUa35A%RM>9^eud)SEA4CQ$VoDo?iJ zfcPVymsA7~8|JvxGmkrzdZh6cRyCV)GktBJGaHHGP*`TjHf-!GP{{Plyn(Q2cN-KWpT*>BGkdPVlPYPhHWYk#s7ea8JQOVy z&)WNqNKm_j@DF{>IdsVE0ZJ~&0a?gso8s9DAuPY{I405@ak%VPoK00e{d9+z^~^tR zI0j0jDpL-QZMfr(!K)yWHC=&G#n6`f#$cE)Dw0j? zR#qzf^~lk`pGkyq5kS|?$xDt09}QS5V(ff3H#dFI>kuBg+xqnAEjzpnLcsvNde$TG zdA_=|tZb@{9TQt4mih4Ym2%9M7huC2D_e!eY>RBl=~KJWmw|ld6Mj%>6U+80tKyRG zXcJX~`>r~sW{v0fa#Q|^HMm5x(H`(j-m*8;IC8D8lt-OFyZ%Z<1|U!f7@wv9dA5-g zwS^;B_`VlY2Qx;G_0+W4Ya-9^|V(orUvH zVlrN@`4KX2#!CFLQEydc@QTe+3Ef%iUwE85(5x8k)DCBm1#@TmY_YZ^z1-wgQ50om zh4UOD+-R4AR-SF5P5l3Sj+Z*4^JIrl20+`u0$uNTV3G*K_(iRzLbgmz`xr`o;-0gM zktAcvFJ)U?D^EhuCKArByk^bcyJVzTx0U(ghJB;Jfmr$?&WC%j-VR zbTO~Re*uuvx!fS@23$_K&Vi28C=Ojfa$>(0+Wi- zg^yeVIN+-5p5Mei{27SzOSHl3^^7u9OZ8qEr)twc$Ool4A7prHX|?JS0bz1_(-WcG zWR#`!gpmw#VA>y?sKy^n7g{Lpd$Q4H;F``wm9H3)esei|Gk%ym88dDivt-opok?ha z=dugL!)O%Nf81)Q)boVn-T{+z`sD+~2%!RbZXrbA)7WnakvE@SdoO1F3)0h1jEl?Z zei-2N42QTvicPzRt{%hW7FvkLGbS!}|B4lkeCKwvx9moA< z^TfE-FlWIa9ZP?7u)$Mc6yO)P2%o)0aP^#}kG9DDy-IqpexPPtFhnm6;URVaT|8{) zrK6gV1>7guT=Z~-Q73)7gW$FPr0x5PEQ7QN>tkSMA4@4dFqt9^=sEs6{wX?3Vbjbi5`<0FQ|T~bALhrbs~E&Eqd)PTbc5rqXI@}=dzwN((QXa67UZ2w0BPQ86G zfmn&-X!*BWq3`N{HFq+tAR7P>mv_hirCIKOZ~c4jJU6st$Mfb2PvF0dF#*sU1;Xb6 z<6)E;njqP6s-5`;5`f>a3k~jR2oHY@;4+9Z5fNi8w`zTy*2Nu98l3ijbt~Uhj%TN) zV?Uph^uC_{_IYg9%dM!77W|~3SE?*t@bT8d*8z!=jr7?cuEco0JM`H@=4F1eZJc$7YRjeWBP(brux`Ury6pc5d>?Rsa(_^w4c+mx$YUSq}LuT1tp~x*z$OHfimy`{%D)w zU6|7+v;s6WG)Po3#6l*uwIg0`IRW0%kvvtJTsXWSe&fAi4UlLis8vT$zm=W{@$e!h^`qNZteX0ghUCqf8*OHg6v2zvPig>4tCqoqo^Fea;bSZW z_CQ^BAr5-7CMwm6*Z3(%3M`TsodWVz{Xr)nj4RnPsXH~>n0 z8AAxLHhB}8M~Xa*b4+yL53VbugQ;4wq)mvXEcQ>V3V;lF0^h<%-5i;zLN5v#u2jU; zJ?XSA`xYI4<%SJsIY$X12yC^5Gdxg>B|1Wzk08zB&{G!yE5f1^B6SFN z6A}fZHYFl0t)-d9=TeAazf95a5IqOUc_YP%)*&(CuF`0l9{Z_8P6HR9yxv^klRW65 zKixLD2?h9stp(Dd6al4S=B?794Dqmk{~W|lrY)p{On@@&T<($Y55SkFLd|K$=$IXh zu_8R$;ssNXh5W`S@VhuMyS_YQ0eE3Ev+w>yEJWtk)=aI3>8NF- z4qRIj_rpP}amn9vz*U9a#?yRs81|{!N4l!_Qz(!^c3*H0tsLEq50dq5q$-7<{2{0Ei!`{ z8)p$-5TXbUyp>h1D2!&qGGD)cQ|3p1M|<{)h5RvmX&w+iZ%>9~HqE+pp0?>2dt=`U zI`~5KSrEW$OZ@e8BVyW#VkQSi{UT+=^=;Ef0#XKBZ@#Dj%Ko46Sn^@dI7daL&ephL zA@lQwS7w(G3-BYnTn*BKE^cpy$QL6>WrQghBS$$^(5yR>img);Kok*ZQ#OFG`FJ1G zWp7zpU@aAq2~_`feUU^xeOw9^p17LUOneh8F_M7FxoZk|B^gSJ&WiprYn@-CZmy%W z&Vio2d`06VZ=Z98XOpax7@}oASuDNO>UV4h9gUftb8agUG6M4b2o5=HyQFSDy%@9^ z&k>hj>o~WbkHWnDg$)s2Zm#-e=JgS?z}j3tciX@6eJIn91nn%kvdWeS(xPK^44$IX zTYjId^PSBpaEE#@%X@%da#CX0=JKo7jQAfK%2n!JtWt=#kyT&GtiMq)Q*~RV38DNR zQogL#b6)33!spn`*_nIa%b2vW z`ld_re1qQ45QDuTfW3d(nZM>~lzo4X>p2ff_@9<=g}mLjGqw;gjVJRi;IFi(pAcJ_ z?d6Mc;(rPP?q#=rm7w`(ROuXdwIAS#g8^yM^!#X(tutW00T9-$^!mx)#&Aw<`=2p#QqRZ}SJV)Cx1gl||E|u_Q$guoMvj0d{BgJIxAat_* z{h>$hJco3Anb*c4YrStd1zOHP-bAnqpy_Yg0nupx7tQq_KcoHiRA=*L4U|zZD zuP0csv9nL;W6Xph*E#Q7Q`Wq*{FYupfR=34TI)`1Y!nf&e!pK*zpB5SS%gsM;?82a zcs4IwYEixGHuIXOLdx!RZ^dixC(f}n#mvOi)HYd=@5#TPp-XJ7qE^HlZwBB}o5IWJe@J(JlJ=T^B?ZMa2c zT7zWAl22)+!yKqL1;ysq>s3fgUc+6NWe7k0n=4{keJgDGltHbd=>x^EJbGgpcQ=LM0897pseANZRiy5^K_tF&JC$x!i`YpOmpU;aW zpgFy|tOF)Dmw+mGT({{+wXo*i7RX@~^GJ2Cm$}^=nVyH#JJT05mgR^h78Vx1RmhI% zh5<=%V;A`9oO~RYR$UmRxSISz!WcCTiva4)UZL=C)=>X&#gT4*Te+{CTqgU3}brA(fiw*Yuni-0k4oy~ zL*r!iTXd%J&w6xep!=5|0@>JdLiSTBVFR{1`X53BQAyQSZl9D|Vgxre{IeBRn;VwTqZ3#0!9*^6TjI3P19mt*V{H5umSn^P4Q0*s+kpOWnt zU6Nk-^;2j%`eCMa4R(1B5*K~1Gry)mu4;!=LJ`Uob-2#;WHdpb^YD}+W>Z&d%oD|X z&ptG$8HF1-_fBT#!~SCDc(IwuibYo*XeswT{sB0=^Uxl|@mLy#e(@4K!P!`JCLIT9 z*uVx*pGiAt00x(6D@?)Hb~0>MU@fVJ_BS_Ybfqy-i*rjzSwvfzeCOO`2fky=B!s`9 zm5dm+JyIG_W`aE+c=)3F5WKbGjsM#EEuXwS><}+ECqxrrznbH`8;~baX5+hOEcmRa ziVBTdD*G`jAShVKo0Hoq8XZgRO(jltu!W+4%gpZW?b(P07Dx$l+7h-`|D=H8kp6Xr zoUf-olU;BN^8imQe_oy}!3O(?BFVTO6oN7hy@#A=cG-zLPF%N&;VWC>x zji=orxpbRw8_f$*ZB2?G`-pQrW)%mk7GiL%6`_LyHA_0qx=XC2ZmlUIFIpXP`&jk>CaP38nd*rD&WPN z-~wmg*rU{pvX+EZRBQ=>&3T#@``shS$%X5!S={B47{dk|4un>%TR(`u#EmBjW!gFW zQ$sfg8s^(zFzD5`iNY;;_5MdyCOuG3Ivr$&6O+A!IY+o^%wo*c9_2GLntQ&J9%maa z?KK&FP*u%wk+}nxtDOIm$o6^E>~kA&LCwT0O#jI`JI`$n`qSj3vngG~qR(*r_D$&0 z$NZ;D&B(_RsGKoeJ^924fl-`~VtDRn2W#(aZAZqq8aL>!^dL;$-Mm_eNp{*`eDu7}n^F0Y)`6%H|#c6r{srsO$9mB|nNDvXHF5W;Oj2_*@LL_ajH zB;9iDs_D;H&l!)eyb=~W`S!ujiM+WG-OINRU46}p#xt?^eIM8on^ovn@cO+VF6_LV zxz$gLxOKz5Ihc4ssiwWpb8fHZzd_gj)o*w2X=4qIxRlURz?|Z1GWtx^b5~YICNPDL z&XtRvo}SG!QQQY(EZl%5!x3z1`aqSb$##SRE;DRDSLdNg#EtMr&-e}2Ht{F1`H6qc zrF((K5mKHn=;~1Tlp`1RY*YLgwEWUB&B|w`ryaZG+}1Ni^zcN@1wMqUQNHa8d7j91WWxSk^HF%;u-^%~KsBcEJ% zKE>uY#YnLUjnyAo0#7UZ*TeS_Tz=HwBcJ^!H=1_UmttDky~cS3`6?J`%Tz-;_2ek|A*lyS$Rz+Vk@t;}#ooH)AC``GF_v5|~iG~+*X zka4jr!Z+L-3!z1$1`bQCaiywJRH9$`ZH7L#$dH~@0(?uJae5g)qdMSI%dg6Qs^|x7 z658#$`dixf-3vALNWjvwm{`dICvw}D*pN3|*pd<{;j^o(KEI^1 zcclvH!*{1X;SD=Rgl#)5^)7#B*@cAXbCRmaB3AH+ zQ58;#!51$)1ldC6*BH;|CqYGt* zJaQH=`~5x~Bw6w!Sgg0*5!X;flHC^|k;KmSK3UA{KA$rqw^w z_>0o)FGVEAxOlHGH}Yc|o~sH^@Ro6|P5V16btd3SL`p!+#za~;QjK%v=>Satr)S2-PN1f?z*DYxhq66fE1b@cyC5~}Bm`Or?EPa@b z)#eRwdn`^Mo$k?kL#`i|h8ZtO1_g;_NyQIl5{K(&Ivb!TR?S7_5u`*Fz{_2~dJedR zJ7eu#*MZGy!2YoRu#-XmJMZ{E?)Qa8k`nC;LuAKo4_>eWIr{H~q|Zmdxe2%mvxinO zy+c@t0OR2bKo`9BzpR&7C^L}+c#_q`vS;OXG`G|$Q4BY+?CrP#Y<`osApGZl?=!}! zV(9C8Yw_Rvhy&x_c=M0_Pu;7yIDB{xSa8byE<9QcHUVeQd9ej6L__12aBJC~4&!cp zj!gH===&~9`mcE-^e|u{lSJL7;=+v%EbBVB-v2M#q+FJb7%>C^hLD< z0Up+K{Or%b#O5pGpzrS!VX2rF=k}7gb!m3Co<7W_m^3^2jQfqpm&*Jqqrq^m6@Xt} zH&xcS}gu5JM^r(k1EHgTMbd?|HBHI@j@oAGn6$ z+0WklS@&A&zV9V=;FM=#@~*=A!^KUdlcK=X+zCzj2s&^Fb8M;o{o)*sbRpTV6$t1? z*p!_%41rb>f*qZovABBZf!%r2VLVuNp6CEC=+wdOSBB?4#}^$o_2L5O@aD<>W+&Yy zkky;r7?UboBx}M!1L2=dSl{8S@qLOn z8nzndWN#DYgL=blAEt*?n3%7q=n;U3aC4?K==yVjIFsS$lfw8;e)pQ# z{f?h41|#jQJ)s}cG-E;Q?@aqZ8~091tq;OrMZjU@NhqpTCRFllWM3KYmtNUe_~NTY zW`_C759-%-Fe1;PgBpbhw+i!Zpp``QU8$>q@(vY}G`93;zNbO0Iq7aK^RFaOjiaOV zgv^64o7NkWH~rb3Y4XlHwy+#zFJH*6UU>74zOY%^aj8D@YJEGndAaI4FXHlRVe62R zvb-18r~Wf@x-0+m#Hi3t; zG=a1ZeWfv)*=4IHH>s}iJmmzP{?Uas|R6gf$&wg zW3{+_G(nF!nCU0v6DDOyQ5RY zg?MB&DszR#jvfB7ql~O;GxkBYz!IXW*;T%pkLm#Y?P9S;LNGBj;)X7^l@_WHW#jgI z+)0AJ21BVFHa>z;JpCqLZSyBWXXso7`L5wx0h|7e$|z2RZ^v{rP`4V}aAfZxn>E=^ z#4&5DYDcMMKImzl_FSr2+b(v}%s5GGA~DgD(~UE)p{lPR}#ygx@Y6P*?m<~v_pgGn}AD7UQ}=^YAbZOSlP%$7$kDCMVdA| zYBnpzazPhp*Yvs= zTU-pblo^Q{x6Ha;A%&jZH0yXt)GjMQ=wo1c3yns*!m6!*NIIPbSO=ze{VdHR3;zgG z0U)XIc5aEjLcVjHOOCOpJy$`_-N+oXKzLav|2eLd(r1BGcD922#gMZPD$Sp`=TjOS zTbpvqI~c3|Lh~(`o=~|w;^K^8AI=R;Bu!Y14#67olGj*x20MAUJj!3Sw!5dF*KB?A zs|iJohqgG3?VJ(fcroBcS>7s9>+Rs?W;05csGHOKOJ-z`i+L|wx1n36GNO4ePIZ2= znQl2kPaKrz-+JK6zvyZ{8iBnT$TpwZ4fFNM0WlnmjijFAy)SVW0xsfr%tZcTUyS`q z-0fhj1foUo>#Ltc%*mnN35wZWYFtZohlI2Wqnxthw&(GS51f+`MhCQEcWJbMIf>cWzHoGfsu5gyb3L<=GV+Jb}10cRG`z zO8(K=$HGxrXQP6u5LWzPp|!!|+2Y)oCAIg32b^gMWlZB21vXfPBbktL1x!!84Q90N6sr}}h zhlM2eK&>-D`mgejyOhpMIf0UI%hDhu!+UEi+mg{4NoANJ$mFz756#o{A!U+F<=(yK zvg~bbkRaeo7HE?JF3Iz^^}NdFXv9bc(UCXu3XBT{GKt5q=vzqnW*|>o@_sB;i8Ri4 zz_w8hMHpXgN$hq1p}t)Sx02X($y&TUb$@Ltn=b6Kzymg?Tle{CWy5Cc4pHc(57|09 z=Q*}tp8flvrluyVsfiTH5(YU)gDBT>`041R@|9_xoV5h^UVd}hR20b#4Hl3>*hi9+ z9G0spPxwi)TOc%kX1;l3{N=&P-NU%He9pI2-kYCEPr5hHKCed;KeYSROLPJaheWh? z4@+M-u)B{MdneGQ>3Tw`49I5e9$ri;fcl5D6~1(w$oQpOsR*7Z56!nN%Dj1;GAGp@ zY!afHBnvLTG;*6t_n3*sTH38>r;L5A&}Eva_r+;cn5ek;u7v!aF9ncAnFETx8(*}n zT#8AqrN;3KJI3Nl?g?U)UU+-2MoqaY*J8JT1coN?j1L(rtB$f<+Xn~H>a<^PJz5*y zOWLhxo?j_!O67ij>{Harc21RdaGUbFLut}!xkW#7@76gns*znnO>NF-Z+fnmW82>P zmf1KiJW#WiV{M&YzsHAqy+G>3!8K79(W~pW=#nG^tvc__^gHm{6cj=K5eqfZ*ZP8| z^X9SchfLI{Z`^b0-mkKRC-r1B4#vvvvt{ z(cyg)DiYSkiNeXl`>M%HJ@1AOe^Q7uap9vNCKb|c$cVac>0Pe-zKwNsmJK=-n(>if zfa6HltS?lC-LtOtv;>9j4n+vZ(W@na3k!wb2w1AA$Vre?4iEqqd*en?aKh22y&uVn zqW^hE$gY%1=%oL631Jr=G_MG?mH&p`f$pj7*+5B66>K_ZY8LP-{p<>@eKZI`7E8hB z6VhL_=By&t#1B&&AJr)BHMcQ@H73@FlOW~jao zyrR%+gZ3UCKdfa-HA)hUMaHvFZ^N}4{vv~IL&QRd(_>)x(=`Jx1x>MX zWXPrNcFUtb>oVoF%@783&PtZOFx z=#X+E64B0*Ilp*y)`9 z#k}VaDh?j+`(S*uP)Rm2wwTWWz3>-);NuId+wJb*@g96ysOdKHxggGj8z8@S+uo;s z^C8_YS?$?v<%QwRM|&zND^D)B=dvN8NNE>t&u6De0cknB_ugl|esa5?j1?HigC2?` zoK>LEnZ*kZN=%zClpwZHp$~301B8o&r_lR#C_l2L^Y!1*3CaYj3YT_E?42=){uYv5 z_EJcQ$=2!(`?4E3Cin=eAv3|!+pL+^i9MCgrF3aV%8McsH0J~|xffK?zkWYtD}BXZ zW;xK-*{XfSZ8I0OO(!!QREqBT!0Q`u7p@*aZ5lm=<%2>GhE-NaoV|*?sXM9isJ6I= zF&fh~R&Gmu5MDP5p3Sr>kzlHE`j=tKeY7L}N0k{bCgx8ml-E_`vVN`lwMgQFy#NY{ zi#i`=KU0D544Ggg-On)w&kGN>G5@0INAur~nIeGFB)!+KYv9w8l2bONZMC=tBy%51 zU>QSBgMlnhbApTHze$D$-}4y=%kh9LOS233ANenb{r^DbIOTy*`R85}|92)87k3>PV$*(ofCtb@776al2*~7&js}ndZ;<&- z^@g?=y`lk`00JmJfawrPAy}XUlx(R0qC*#uAN2tVn*bdGAVz;p7lPsest+kEs}c|$ z&2d~>S~#V!#|j`k>;!tOC6GO2HrE6YLsw#zM8GQd!a5~$;AiQ$NZXdzjW1uV{i5gQ zR%=(Lp*fan<4Q?Qb=VjpxoxHq7G4~8lg<(gT^5pD4A#OkU1y32rdOAH9v>I?S;YG) z3;4UhUeQxuMn)Zkws~LgOa@_7O#J=wsNFlb3Ad4Uby$NG7tAc+aawez0o!_x%TKpV zF){QLAd)cVJKgUFSeMUbCr&^8YcRd)F-6yXBHBdokBER92x^n)QX?xIL@B;XcwK5K z^eL14R+CDdXMbiA$*l2;mR_}f0bI(<<(EHqwz*)-(l&_0^SKv);71-qqWVGYycC@w zb%fr3WG2DFdter&jc6!RB^Vt10j!ErOlaf2Bm2n5ee2Q9#v0{R&0A6u5$l;_lMGLh z%jdoVbwpmAsK|U7w&_+({oZRqtMLWA76%P0E3ET_<*#Kr%U!#IB9LM~RU^NW=Ow#v6M7h72Z14l8kVl6 za{kxZ)QT5372Tt|r3MjQU2yhT3O1@Z=6bQ~%=^_!0*j?JS6uB6SuOI|WhsRop|u=U z*znD{gVyT=oeD5qTwL6pPEw0*8wd-@$Q*8dlf;u5H9CR8;82TXO9WN($^CVJyQ&Ce zkwr9}I%}}X9zZ!x`zYW^XlJ(^S*Y)W;p>@8I$ztdz2f(1wmjbk>V$RvdnsVU%tFo7 zera2hfDpf28ou)msCRfDGN(sR5YR4GoBSx5k^(`8E^E%<#cNTUCrQ)2x4(1aUK1of zTJPz-N+YCnv4pnPD6|q9&}mG2eGOo&7@l$L-PJAIQ}JwS|93xr1(k_e0>mQst?VEn ze+DEm01J4e$y|RgMGTbLnDNJyf3V8<7*yl@ zgUKm7r(>q4g~vdgK|1wh_z`2xN*-oYUmD8rWSgK@OX|*$H8lhKUOAG4fo?3cl zm5O|mw;&DefP6=MjSUhgfhm0{i+ZO)lrgMzq)F&UEJVoQL_0v?{=NTW$P`7&W%iWP z>rmW{9T2?%RENqpR9wSNZjF=RB)u?!#%~ocNvIFT#s;ZYf7%y_0sPc!h*t$mQQ(_k zrjpNjWr;gg7_L@-d0BPbN7G#Urt82DDd+D7nQEWQMvA+>L{zU4Pi6g5bNb=6mJAj7 zs=;r<4IEH_AKiCXG6t?BKs7iKH2W-vUKPSJrsq}_1^X$ z#76ZkhZ^sMC#E!s*EU|Z7vS#~h8`XAeX0t@tM)z7BRCf?8? zowfzXmi%GW&E~K-$cqZ)>GM;ie{J%(Xoui?L;%;6Cg0izTPX}`VZ=6khH-`Q1RmeW zW1#iYa`ld*T3#i8%Jn1E`2E+PG)&0|VEZU5RbG!N*HITSQMrG>xN%Y*4 z$5zFPS?gz?iaK=F9}~!Kj7a_1f?RkoRkz6J9fM;uiW3;bwm(*v#V#5%nk*$3IoY+Z zw%r@Y_5=W2!S~klnny(3BqS_0Hk#lQR>GEM4DLP=wc-5Vdwi;NUB zfqtqNClyK_D;hf2tGTqre2Xz_e>iv?Gh5t1WL4;ISKByb9JV{m;wA94eq!e3Kx#){ z(aG1FnytpODRc_HXb+(BGJ87VdDh#JVUd(_Msh=EM+2%DmZ1c+TR=!ma<1dXSpItr zZCG7DIU32P{Ale;DT$%A5m#4QYOD=ysvGgUY6|%!1@sC_m>y$yP3#^!*bfN1pM|L$ zRu4KxExLUgphJF>CavEHuYnL1{Mr+Se;rdxY;m>T;k1lu>0|hm6X5G;w2D4c(HF?< z#P5k<#k%)Eqi?$@a-?=8S5i|sf3}Tvb1>s4V~5iF^x@Sh`(xxm5(~Bbn*ZUvq@_~v z=$|Q?3s!2PV$W25DqOW$c=w=t>U!GvYl^GM3FLjc2i0^?%{PTBo*HkBZf{p!!VT|O z9&mPoJ03j#wPz+f5TbuWG`Ugn81&vVbs%;OE-oG+eOf z#{Gnfh(a&-lvp~U;D~? zw^GZWG=5qC8{HtY4bF%V=&L}vacf-YHneJpvb0@E;hGtDKHPj7MTKzjnfHZrH@kxo zF6Rs@c=sI9)>mVmK^d2PZDwmX>akF$Fpn{08TnZq^i~Z`#x>~#r1VL$GV&fhy1eMN zA8uf_u91XzF3sjiF~-)2N%>>9ZuQY$YQ4oy4P|}^TGR%N9BC^)3h}U3J!T64s z?T{(UrGH_SSviznmiw}=U*~N;Wmo|#KuMXDO17%}E|@e|O?IZWYOfH4mtWaWVi5FY zrBX@IW;vmB*g4U^{{ic>JrI+|0Wqs>e=(&l@u|^45Ixs(2b* zK4i34YENys#t5+f-T$^npPQ_Oa*sQ$OEM4 zc|r6%iQ^r9_rF`gYwSF&Y+g29n7`O+#z`8g3g?9%ea^)zu5{Z?=ff}Fae|YiGe=K6 zO>KB?75Yi)N+9f;x|ErVRVH|^rRH{8u${fGQPNXk^~{+K(Z)hr|D)ATDz(=rx`hwD z^;}Qj8wo$r+hT@m?fFm52AJgUf#x3VNhI0C=dh7yWv5~EDM;&%N*m)IgQ-`zbX7Pa zf5al7mbSLi5&;qOfs&FwCMG6^YyHudjGV6f3n8bc&fHRZKdr6s3R;{+EWh#}Wav`X zF^z`Au#OBbUFIposUmxF7&&=YD?6z;xiXydvfwpx0q6en3phX@gC`ZvNu9hXl!UeA zW0a8Mth|vCoeqkRxITM}3{;pn81~aX+wA3Jc-lXv25dUYlq?=j+C>1u)?wxl?QZJO zU$VOBkYf(d>)#kRJMO|8R2ALJsgWy^I$^3kC`15z6N9(n zY_}VQg&V(ZI=@b;DET$uw1KoX&N*MzPP4WCepGF)YD;~l zsi*lgPBkm1ix?!Gn3HAvc1muJp4nMUch(aR>v>_7dRS@L zlzdq;<_pIggumxn(T9g8U;~B~7^|#P@HJW`6kIyDa#wLt@6Y+F1KOBt1UFL^(%H!x z4T!t$KQ&o}rO)a0ES}AxSoaZXEirFbMPiLwe8qd|hLOhem8Z?auMvl{9W`a?B;>(0 z=?=%yirua2#duQ1z_9?9u`(AnH|uNJ4642hg~vMb7ihG;Qs@1e(83@iJ~>P zPJhnoH!$=W%uYkJ0C2fDi5M}NJ3&au3_bZ2>L}cuFhr&cKvb*t!-H?>PxSh&{6=mj z#t{YKHgXsXUQQC+`9*_V6N8vm;NK}YLnj$*V{NYcNyI1=P7!6^Z#Q%zp}hi(Aoivj zF*S~-j-`vc=G(-`j;%UJ^7>jrqR!^k7rZs7LKB)6)hPYq68(DFqcGAixLcX{JQ=`Vq zly??5W}XHT_>soP-FyA_N?AShUjD& z+iECKxE6!K1{x*3Z^wnEk$(e!rs-{zc8j}%toRgQBtMnpbnBT{Tq%Ym7@A)!oRuWz zE-(-G4^R5T)-%#^lTPII6&Mz7rKT!+9h>Ris9`Bn@5K#mb!;{vp|!T{FI7($zFTgR z+^afa!AN_0;9hPdB?0$RW}tGRHHNX2xl9~@;$i)j$ngX@l5pV79EfLjftN^L!#XOJtjg&%fP(mF~X%UnN zYiaRwig6}v$~EyBC9D@=dba(w3#+0-Bgi0l?UfF}4gF7926ejQv^pwzYAUZoKhl$_ zg@y1hUmkNyNv`QiOFsrY@rw&+j5kNpWtEgPfc{oCzcXO_a=--5i(#t{+vqc=HnoJK zz&6Q5dMp0clK9RytK@q;hOABm{ThkR?0FWz^}F_K4r;F$vH~ZC`KWk*^K^Uiin{$} zNU2h$2(m>FNaz6<9KdR23tmEmbed68u{NY$Utd(h`Q=7s+cPP++-E+)){z(#*~MGU zD(<@c&=Q;GF$4(h^blfM7aTm|x7^&@zSrk_CFoCzi;Ed~IRKl~XJut&mW*$alyZRW zP5izm*d7gnaYA1Fe?Z{GlF>vK=x}c&p3fPHp@spa9by4zdcb`n@laf~Ax+qmFd`xX z;Iv3}q27Cu<7+|ixB**IZYf1sZdnlXJPFJE~=mm1&ZlAl>0jE zGN!22B=Uu<@H?DpDJhQ!rZEnHtpLdDA5fZ~t-cd^uZN0X zrWL?__3gI|YWBnZiDKtzDVGRXZ;Mnv74qe#+ZEe$M-)c^~;F_%+LpoXc zvdRSowL-lg@CX0Fyo+yz4_%VGaod!Qgbp0}fd6DDB)Vvec;!_IMdOI4RPe)Gnolkn}B@%*IG4=kZZAunXp z`7pdxAGOr|AQrjmmqi*{^jx?chbO??C9i%#kCBbw&bHBBAtKt6eem*qnB{QP3?al6Hq(M5e3!x8XgD zQmd5?(b4UwtL*yg&TsVx^>U_ZJ4b02SRAHio5697gi@Ada1tL--rJ086;u|&NqD0t zZcU>oc&m1_Vn|POyUH0_uCYfJkqnVxC0j59T*l}*} zE9aqPE_6V-0cJS2P7!)0JUPMsJB6cR<#?2)Q3fY|RY%8(OL2yKWlE;@qm4yxmJCQW zQgnjdk-uu7)WzKfru{&}p)ut_71p4#r4?P(FlbF}D6n}l)&7Z#@9DZFn0SCAE9tBg zovMgKX&7Oimz^yR6khlNi!Q%tS{Ybz|7@ev8^DAduBs7R-d7U+0%YgwumhB38g7mU z;c-M5QJ5g3n(%@1CLeZzH1=}oQmFonh~pkOIS3P;1@m!vxnZ0!yj#>iS7$?}t)l~1 z-Fynzc0~Z}Kc~6<|H&q(hLe|T=^%KL!lz>rNW=}QEWG?KmnLw7VX5zh25*Ow3*Ox^ zrbJR`H126Da{u}+c<^(~X`Qca-KK_IG_tODl9Bgj?U9}Hdt*YI#7;Hvr!Ll}y@}%6 zAL%8-qtwV=g!PzUGQoT-M?oj`;WCE> zX&A`2S3Dk-?urZhM!2jQlS$sMi_rapD`mH?$O+?v)Nepi>f3A3ds8V40ldPW< zaSUQHJodTk3T8IB-g)+>|8C0F{UH*~-64$%Z7hoykueNiQ9h9sj-=xOmnak!!{`kG zT&%>|fJ$pTY0wSY+w6f6|DCt0g`#o6u|0|09-hJAJ>2M62;)e_3fslY-1bA-iZf2$*A)!?wi+SKwG zs%#bowry%rj(6qy;y^=X?K5gloF)8Q;>k8W!GVfjQp;IJQmI_9>r z{#W8wWp}K>yaHt7Cg<8WMq{chaOJffwiVCC;|Ra*l5V2>+R+Uyp1eX`0so^IvVGfZ@IKph#@5xb>fw~et$$!ug7u@nhgPLG@G1JO#9Lhhl5*m2I zvEe4qep*+NCG+=Ac7Gnd^~BL(Y4q;VBcD^@)0UeFKFl2CTNg|}-Qz}WI&N-4Smpai zSoh*IR(1vjD46+D6iWmZEx5;qH8Mv4PaRN=*TQ&lKV1P3=wbc;Vzu^MIOPTR7Ui6a+ueG1@H z)93JK{hrJRwJn>+ON0DkkM9d~k|szWMPvt)TWT?)=-81Pw3)XTc`+!h1- zC_RUSZ;+!DGXLI~17#M2VW~>742mC{GOqgn-vOH!340ZLR4a_O&EhHKQWGubn{ak7 zl48&6cR4C%JU)atho#5I=NCLB(zSp1S|R1L!R?L)C7s%|IH>YQm_4IQiIV*q>0lDj z9yA;y>_8&B=f02DqSZw1S>G0+PPS-Y$IY92w3^O$13^=4*H_Zu&(eX=yh=B#dF|kk?kVS@uG$QGQbAW{LN@*1V2CLNCMM?TMCr;>Pwa(|f1*|c z0q6ggC2alTjItDQz$?V|^-m!(5I?h{?2Bw~4=ph6Q?qSOP>J9>8u8>i)#Z=0gOaiI zea$T!*KfZ#E5Z5+G!hvZm9ue7?bYySu?ieFEl(0ZXcwf^eXCxA4LGhP%4Sqzf87qb zo7sEWA%dC^(Z%VsT$7DT?@AtptZ*dWHxr8Gjh1ZB(&`dSwB!S7PJ!OSEyT*>6BK@x z_t|1x+HjS|hSCOV%)wx>)1cc2ou4s&(qfl-He7PL3 z{P~}R*L*6yuUvU^-_;ePNO37G8>oD`o!ZbTYgMFOv}!+FXYNx=tskg*R*gDv-7x13 z1)k^+v)=>hN!xLEPgg#0WoV^_s(oo_?o6D%P+hx}&b7~Tz!*whN{_9VUkyQk z#o+O~@o7Y;1eJB)`KCcv<*?59RF-$xXGEo>H-%-jUPHEog(Bm>esz~I$dE9bj1)`Lk+5KBqi%3s@3>A=^yn&yF+a+GOw4m zZ|H>M;GH1+uw|1h!LRgcQCd!ox~jF5A!)7B&Sm!WOXHgRdmaq|SG)ofxUt(9V?+Sp2ozYbQu`9WHg-w@d(Xpz1&ZYbQ=>YzkNT))f{M_< zauc{7&;Nr|XTgP(C0N5*S(x$bbN!?*w_hG=R;az1wkk9!wtN^0{-7E(Su#yPqhmS; z{%aX%E~njQs%Lq~Ou#iUP?b=RuHu*Q5{Rk~Jx>|Et1IoZ!97Y9t-L(wtGwkWJ8!#` zX4X0F7PX5u6ksYrkv4hn&!#1ocv;&m_A-Yzzt+@yw^I&CjN757 z6K_^yq_ejt#6Yr2ES!ANi2ARjPOOb?cHD%rtOfGuSRR6u+fQ?z2G&AyAmNBEXadY> z4?el0!8TLiUs*o$$}i=@!)9Pu!Uw1)4yWg_#I;AhVt%Lr2cgqJw4bX}?_~@X$<%4J zEmT)ON!&RV7pOUek4t2kdO3RN&IjruCA>`-2RsmIpA$;#LTRzS%|m!UE*6zg^4p>MeCBQYlA5huRn+52CE&*j8m#Ii6+- zgtrH2umb<6jw}g^8m~CjBK-^I%elZnVm<93Az>wyKoIwSz>G&V)?j#@WTd| zrs0>hZH%=bRApoa(YLMznbyBaBNlT1Mj9pxFtVy{y-isE{{lL<#4>w_3uQd zL~F4lJkNpBXd6m#ocQ+ENj}?-UtHOawg#yCjz@=QZ-*X}Lw9ZBw@75qTGl?Ktqw?x4vKU? z2yGGu@D@J9(>y$bZ(<-HWA!raz}3F5CHS5|g|Sdn<}^m070iH-LoD0lNp0%jXijl1 za!rG+W-EEV1(qc{;XiHr>5+#`kpoPS{a?N*w2A03dgPixX>3^oFwB^GYs{ z4Itas`=*QEo5m--sx-r405INvC>6X03>brP?CiU<65kiIaKXy0Hp1_|G(F0|`VU0n zt5)c@j#Zm00U$CSX>RlUAFiz`_WgVJw4jLtdazDT{pi0R((&_?JbL_ejIF@)bgNSl zz3CzJ>w0U#h3=9kKYD+Z^KFEIjZWQX95LD*Y`{D`yH^O9q#OAA4!HAyNIg`G;l(Br z_DM?WeZKFs0}`$O&#{igvX|o}GF)FW-S84kDFLUA#QSa|4X`(qh_Uty5?%LBu&xl` z)pRiPIc`neI|^Cj1l&K6BnvkJGA)n*9wfbBC>ujMzLG zUwL{}@!$Lb)McUgA~LXRe($Rqk+;0ny^3y=fUb*N)JGQx*Fw+vxVZ^hJujqzy;8N@ z{JhH#l%(HwE2`1lP7Ky?6e?}nb{~C7pB+Djax37^1A7h5V~^UQ1g0U3AzjM>@AL{E z2PUG%saEU%DOYt$0Q~B}*pV~DcLfd*l&B982H+%2n z<%-s+&`klT=I7!YhkKkYqrX(aiPzn%v=s1WS?vWS01*>rY@RAv7V~WP?csiQY%s~( zhpw6OX-)mzeIluE{P7wXxrxvADmW%=E?Xif$DrNkX%0OMX>f(~-z_fh69dIgIg$?d z;jGS1JCb|d)$_IOQGK*HJ$juk95OAeGv2Z{`q9Sykxk*(m-z|^d9?b!>oWGE2Y$_z zo=?ASci%R6>~>=iy}#rouV1ulbG2!}`qR4Du^K8^Yr5YvOjKksztp3X8f2xj6zWF2 z0@T@DQsN|^0c9ZtT&YY{6-fSD!aS46mbK0L#bZ0mD$kwjO#<%MfeOQXp6=-8D%0zVxfxP2T)_<^ioIXM1-2 z*zBn{8QcD-bh+p1UA;@k=5CaiXy5qo6>05d?ZvLx9v(CF-NwP!86U!xTIf(o0!~xw z7&*VAWCTu!td)r_nwBf{%qoAz#_eWu@a` zjf>HnhmbO5Sp1hA!2TFuRv|kIy+W;r6QY_l>xt)&({2AekXiP6Sk|mBGaoI$@(J_k z^ISWQXOKYzQ$)#@E73x@Csp$cjjb1sN2NqsBy>C%1`%aAIv{IT(J&%*iTI81o{i-a zn1i-h&9Axa{h0FRFCt+CSMS=U&D9Ghk12f!C5Br_5I+uo+X}y-#%S|tuWvQkF3)za zThLr3aI>7J#0rmhS@NvLBt~go87SfKIuMb8@87g9MJ{<;v6W9_H(8_WELYa1M^?~| zIXo5fY(Mu_OsE9MY;f2G&jUsCPEy>%?^2+k@N_+i-4B9B zpg&6)O!-F(C7@Fx4gHlP()tbBu+;m8di$nR<6^0*ZJ15dqbIhG7p7yEIS*NFI)|BD8~BK)R((S? zJVqA?EGy`4YrQmVcY`PpVoSW$$#!L4D0ZBZ?a-7x5*IRd&ZMj{sxCFU1Al zGj%tDx}bV}fbOy)IqimZE^KW(y4BGUtW(o+ZP%^uq{H;7WYH$CMyQnwi`FiXFsjCU zvDj_j&~~@%Wdi&_YuQcPk}KYd1@6b77}jFO#!Ixh z`i}WyFABfNTsJirVP_T?IXk<%4wDMJ+mnjU8&I=xSD<|(&nA-_Jl=zi_$_a4x_{^RGJjE|L z?@PUVwUg~=3Dq`cDf@Q%p>%lc$>MQQN6P+1nw??; zj0_kGn?8?aSlh5NbL9OO*+@tkMt_8PD~BDNrBXu zm-QYWTQ}Gqjwa@$MP*RwcxDn-=5bJbhJ!Z^iL(0Na|xK|IWxpCD_k-wd*lIW1i>f zmb%}Fb4kY>9h#@yEJ}nY#-i7xN|k6Xr{#I%L_^pliWKYsn_dK%G0=(p^}~1JO~=Ul z3>|*COqLy*EC$;-*j2;Bb&)v^>_*Uf92+0}U|8WP1x(LNVl&(~5gD|3B;vmzzHhfU}4TlAO}pMEGCY zBPBpQ+wR+*LKE7SA?&$x{~PN{gBV#3g7&2Y#QzTF;HF~0F9*pV0o>!pchKll?0Z&3LTBcEK#o^za)y$!KP+_o4wStB11sf z#31eRwHS|8@t2WFh&j?J!@YA;HW0kp%oG*lJm&M9E+#f=s)?#h@UI3PfWm=(w_B$e z$mwQp)1l}FBMs(_Wy8X=b5&QHbvEW&<8{ca?WR%uT@3cEW4+5CyBc(bviEmPjpeX* zY3z@FV&wsA#Y^4!r$v^2b!9+Q;(fDcH)E_{aps&s{(@?^@*PX~d1)_J=Q0^)Eq$;Ih>28>(E>P3gCP zt%S94Zm>S`=WY<%?AWo-^^c;1HdE;c+cf2Ug#yX}ZYHB1nQC!RToZnx{3o*li$N=2 z4Xf?m<0ZP6`jZg<4_fBwpt`}?!t*nz;7qmDQYJ~Yj7eo zW%hM#bg@Q`O_L`q#;|lPLEywUCumH5<8>O!q2n9p8xIMz4}VGm$`70Cb6`(x@Opi885>O4x6?EKZAhQ)qAt(^lmXm7$=8~em1_mOUt*i`%}9hRc(W_ z@ZZ6`=Z?ng_pW%Eo`DML3S0bfek_kD+1j30S*4iDs_9_<8I>*E(4Vg3Kc3H2>2c;b zMW{IAPaiSrl9)R|!KQgW-q(`v3i}Bi<)y)zt941hBNO$f-1HiHtC1o|5ja;{gk}C5 z&$)g6tAg3|M;pfi&m~-~xn9{UW5Uz3`)8aFnEJ=lxD^k1VxV>-Z4QmgXkbe-O|D{Q z=6#f0bb4yIz9rN3`X($_4}>u+WsrJ(o-5GDVY>MUBmc7u6r`zkrz%Y%A7y&J$E z6sYt)dJIV??BdFE+=N+b>zBo}fK*-KTCA045OmrohCyx048s9M3`J!~zS29E3dXQY zx`d8F;u}|G+yNg|7BLRyd3vU)^UeaXzPSY4Lz2|rFf2-Z7qj*<6pCuab|9eUtN<;; z2%u)RHM;im`QHE`!%JXv6qp3CXbM&my;T(r`bF}HLBVlU#F81cc(VxCJe<)X-=1jd zKbg`7=UGW*ix62k8RuD;-Du=vA^77`&uRVqa-XwfYTyoF_X}8IZD!X@75yr#P@L9l zTYz|j5qp2O8#?=Z@E>nccdpiIqkLgxNjbqL0v>T-rFDR~>3E+{(lerGy+3n%@%3O3 z^)-bmu-yqWfE&r04hVz^oV(-G(_fJ6v$?rBBy)uSRfj#`WOv3YlaVG0v^9Gwjr&dw zTWV|7*1rSQt&|#EegKr`om8kAE3SViKMh_fP|%2bFfo~?zg~h;&I#YAb7LLQC7@S^ zcVaT?(yR0cHcsXbtNCS$4bFa9@=UK=@M;)qlVYhTeO?PZ`+ywkHa^0=KAO{?W;?$k z%elr<#YFXpX?kAihgEWjzy+uDCi?$H*;_`%(RJIxNw8pn1oz+`9D=*MI|O%4a0~A4 z?$&sqaVJ;^mLQ=C?oM#$R+HyF_MLOj{b~&O!Dy;>Rqxt+uDRBnt5deqx!n;Ge2#hO8Uh`xE=b^L-CaszW2)_{I(5A%TJF zpmqf);&vC>nli|cn5?{T8~~Osp2v~mCieC@yrOR8)ZQcVFpj*aO0E%ID)5q&dBr2^ zH-?i{Kz%}^T`+0JamqRI9iVby=nqe{UD2D|2KxBL1saw)J90`Q(Ms)lcoN?$Qot=q z4dn1+WDT(72mo5=?b_u9;62g34FA|m6_h2swH}Hig<9v9BS=1;8v6PGvYU_5C85!$ljbxKrs^75XARq3rI?yQAYb(6 zF-pBU3)I=mo*>89BvkJ1S;yy=_U6`BO1?l^6TZIj{021|C3c7V9a2(%tx?xnJ$5s! z=o&GJ*A@iJBBLMHgm!+yKa3iKT^EcfyFF;Q}Gn>= zwaP~89gV#&AH0BsGxtG_(iqU z(@5_#V&uh7S*d^(GjZz_YpQs~QCR;WC3suHl(en!mGFpYk$z%}ZS%}pv9&Nzs#8kf zuU>2SiF1igV^-X#@2{vE%Pn!*o{!lGglr5P+)^u*I;{nw88^ z3qJk5l0x-JA&{#$#0i!KvQ)lcptx~wnj(EyH$%x|lZG>wyIRq&)57rguaD1IRrfD5 z6)~9r+w744xgH(U4v6%7H&P9&OWLJV*WhTXSV~T0=_W`+Cf^<6G}FafxWX!fp9Q=8 zoUd5e>8&M36he~8*I1e9to|^+ZQH3{SzSTif^BJMr>^<{EY}FohE(UF2N0*-DOyY% z9Fsq*{eag{Par}?-Ozt7Q}hV)Pg2k1Z2x!xYruC;YpsJHEyjdXdM4ppU`+jm;uM zNmDbFi>oUf5^LksTK9TzJV&{u$F#7v@&y)_HO=z~J9xy&6|f&p~(<1Uz^Az(CR3aLC|U{~_6`tLRWo^^{UTumRw5BULOz#23|g!q8ta?)nMJd#EI=*%*`xD-~JYYC!?L zz!*$Q=Dn+qbgjDHyuqqED}*R$bF4~8x^r^WLVTwoOrR$dc(HjCIoW@-`_p6rIVQXY zgl?^`K#v?X^#VRXZ8QpUe9|DnW7T+ys|at^^UdjQjxt%*7?h6d#>nKxtD(vufB!*@ zCxY1AK4Vn+X=rOtc}+vdvmBhU6viNnE(6@)WE{}By53^kcsz&Sa|d%?PT4{l-KBrtSF;g1ko`grelbXSTFy5 z%7Rw>)75IE0%3eETane&p!{^Rcnt<}x1XzU!mzi`Y=`7TBw(O;d-|3ym965q#p=0M zI-UP28wF2j#|04P*3EVvO8(dCLfQy~lN|Ai-I7lXq;>^GJcgP{V!#J+C(|FqcMYqA zMzFY{dDJ%FhlzaL8C35*_?jksNxZ*-(V+oEH zkD(e`=(>F~t!0pdI*V%1&kJ0P)#2J%mY1G(1+h5u_+s}nplGsD%|EVx+>Pnzy7KXfJKfoAthP+=y|V zAk!_MXv>csdW&pk0|?g@V1m3;r91!(4D-&8i1Jz@)?EkU-Mn0ZsQSTwCVwLtt6;{P z|MYok4eI)n1psE5PsR5WhWKyU@AThd*UmyQFIfaqWBiYX2C$L%Xq(pYA=MP&ty*#8 z>9ho0g`yv(fje9$&z%Ux;0nxFW4w7@aT34)6!=mAGthqI#(1PcOh)vZ3vtcWKIx_Y zkW8wzlKcm>{pPd$tAk&e$NSNV$KWVic;#$LB71j!~4(gOdmB!z4q7a4gM#=n3Cy3qWfiYTKW z=EkL;zI{RsK$8E*b}pbos(}8HU!3)S=nYkt`75ee^{DTLALtNYhVh0f4&-3f3mSmA z8lH?jH!@rE<$tOLCELN>UGhRZ@<2TwRC9ecxO*^)Blms=quM9`kh~hEoYT(z|0?Mn zf_e{$g^X%>E_vD-_>ll|B@mh{S4Aa16yE}~y_!&}Z+U;jan9^O)Z8yw9I!V6>KZ3Q zN@LiULqi3+9TX0Q5>-BVKehVe$w4m zuR#sDh8<7}<)<_{t}^>@?narE)o_QIAlUFEsijj2om}$U5f>82gFjWkBP=9GMx7HT zdGPM`jOdOU|b1;;Q42{k@mT* zRZDrV3GzK|pXzlp6QvB9pYOF5A$hiTize^$BsCyQFjf%Tble|CL}EQIfFKtTg4oV| z5tpC4Om%Dgut3kWcApKlv`1Ww_5SbNc1GY*2Wy37QG;t-T55$fG@gXV)(7>(vLNiT z`}#6N{a-5_xT5<9e!Scl*}uEq9>w2k&1KhM^wzzC<}NLJ{qgHzrQl_s1wG)}N(kH| zm^kWScnc_=|57I0%bhczWVSiez7$n93mX#lW&1A27~A9c#T zmSj)-@7|n(zYacxen0fWlsuvYR*NfOo%@EuD8#MdfH=T2c`e#~Zt1`9f$^Bv^BrrI zxUSeM=wtm~b5=S>B8Aw}X(5hqsg>Gv}%6Hp1bQpX<&IAp9EH?@N3y zSlp_MDQZ9AYaNS=VG8eqnLrueJ$>)T#UD)&_;}MCmFUde_~kv5JLOC*2-NQ?E8J=V zheF<=6|HIja<+P87Jblm_;;(cbVEQO&8z2QW38lB`Z&G%~Y z?8@H3htwOSZ~Md*3Ph@c&~h0gW^A__?U#jqh7rmn%y-DZE9qwJ!URctZ{+7~w9l^fZ+aHZ3fSB-##-(1Ou0AimvuSqUI1zm)4MCS?MUDN(P&j(+_kLot_)P6kT86(BKEQi49a|@a(G;7Iao? zL|c*hR2~oqI*vn)h{c@BWns$uBXL48#Zb5BWTUxfyClQh&_URFLJ->YNnv~96C0V8 zL$3l~j+9i3K9@l7@2}+-yN*xzC*o7pLi#KC7Y7wU`GtLIWubSACIV{yr)m9|jl*O$ zBQq=1lj1Q0u^4c0>^aWOZgcNp9THD&?&VyF&de#aIwAs5A783UuZ6WJp$suSUvsb3 z$uR^Ud7wf+aS_KKEMxF)6W^zR;2I9gG5LCLzq>6usphSyZth~s=XgP=9D7>oA2~KM zKrwz)`;B2~2yXu(GL_+R>YpC05L;8}N45LAW^%i^$0D8t)bYhj)9R870Mq2 zxwx|*w2kQnQi&hs#=r}0Za^1CH~?>{aqBa^gMv`^Cr5hhc>v!5sbd+IXg#V2T;$NHvNG88NF+PAq z?EmUxua6@I&U%L51TzSV0{l>*sA?#5eciO7u@MCQ^4599I%RuFzxk^XI9{MT8b@;4 z!jJ7wCXC_#(|3&(+9@>tN1-Gd&}p*b@4rw0PKNR>3P~@@fi&P;NMj#Xce$O=2ut!| zAYdk+`#@wj_*hKIoCm#|JZL8I<7O1JgNH(==nWvBFX5r4^H=+u6-1XVf5n-a6;w2H zZ@F;YMF$nVwblcP%RO~x0B;tn0B**KM=?oBnD=cIgoJP^KyBn8&=+tj$!BoMmpJrW zZg)APX=28>P^z;Et}3*#a3j!Svb9Zy5~2$3hSOZJo~p1C#lmjJwtO7fe$lKKtaZR0 z$VOTvdLcZ|Rb%9TkUBfJ!FYD>U?^!+`by$#$cx~|9wk{pP<&2K^&`L2YLKr*x?M>a z4La0-5$Spi(BSo6Z{^lF^Dyn)5OhH_&M(icS(yL%djj~aAz0;>kl)atg zp^CIfz2rAO1D$5c+Lt5YWA7XQ5ET~iW0J;+BoZoG7YeRGDbCh*!jyWep04TNqJK$6 zRr%lY`Mj?CX}(4j2Sm7Xuj2((A{gxop!L9L3U*7K`q3Uh#d2sCoC;aehi~{&EmlmR z+1ki>*B+Xpb3p{V!Ha@}?RR-qCYfbZ1hUgw=zzI}78lVev*9h*_#0d;7}^>@bjyK+ zER!E>FXT!pqlZ=Yoo@QwOh+J--`>Ok@?Kmiqoy9HMqD?#CQmHo57A2x1TLaLq7^@n z>?BsK)QWIh%$uz7ah@|1rOaAVOy~6r9k-5{MsgQ{KpJWgoy|%sDFz@M`5d9y0lK^{(2ugg*)5cPDp5K8yg`TS zTm;x4g1hAnCB+dXQnBBI0#dlEFe$Hrbf#uqMeny)!fNPm95H9DdxAWPo{CxqUro*C zbI!vZpnCvXc$J#BGV{+(^r65<3&dhwqaJ`aOiy1aUS}h~Jf8M$@n)Qazjr!PZ>-im|=aF zGCaV3CEza3BtbuHhj_3^B2sn~yg{zGVP+mZLuJw0#7jm$k2^V+#x&9RqJvBLG9J1h z(R?99P%-}x<}Ug*57S6fQ%MCvaCrS2%I&pdW4$jq=+3%(sLKONWRwB8v`g_^s|p*v zg?Ze8h~sf&FWWZld5SjCSZ3F=kxb3n4ZOF(+GX<*n*vV-6du5Y4u;H$ZBdkW`A>;P z7PbeV6b4aSqVn?ki!*b${3@0Z_tCGy|0n{u%#@jy6I*CPO%;po!Kql*dw)pTkPB_R zlcuDng=BZqE?MT(aYS4s+g{kwPk3RB`T(dF@Lye}`N!Qw?cXw&@z0?44DIs|>tsw_ zgaS6d(w$G^3{{cbK9ZFaZ`+5GLsDx1e?=GD<;b~CX(=JKK<|2kO!+SlfQW;J5sdfD zvmO>(T}Nz_w=zzJ2}moyVYia4%Bc}|G<6sua|*Q{1wz% zkvjt(Gtygz>>oSOtw*>fxC+RRch#c!YjfvgKQ5 z4V?8urs9*p)^obmnDH&$=}++{Hv;Ol7AbQk9|>Oi!U)4UaL~}`<;hTXh1>E64V%jE zC#qz{@iB~aGI>=?dZBK!TaZ0YbLJD|26PT%{#7`L#^9y7dHyx1pd}UxsKki44Ln)1GFyKrnVeI{B7c<9`JtsE7m@YYO5Mnq>5{QhVJjojylgVR`X6KRX4 zUmietqkSYb+ZUB;agG6v4Lx-XK?OKFRWZz$E!x2Se|Ub3^K4o-Cag_!C$dKe^A#< z(W+44scd2(gw^l1C=@V_Ezv__NHXNA!H{BdQ zvY1XE;MdwWnq?}eG0mj@L^u)}@bXeHjMR_UVNxbEdh&i@=}~YIV9CQ#a_4ZYE=J## zN=zIq+3$`hg%M}sPOCS9;j~RFjGkNh_IRc-bBbA71A5>LdG zXZR|@-#a9*qU{ESci-_XU&yK()6mIerNZ_HS!=D)AR^JjNCFZQ(kFmI^G+)LCpp)1 zz(W33;l-Yh;9`Gc#G9jC*NB>3_nF;KtXdUQ*HxVsxk(bqWzVbzBeWmpiPbfG(nf>v z*d%sLcwOPj^tL`Of$DzU>rgCYX`I4(-f#MPjGJV;#_DcT%Lx6w%x2c?e{funQbwAd zdf{yY19Ug|=J*{hRrWz6@2f&x5-hxVk_n{lMSbgADM!t{j~m7(E*=x2{t~%pZF$w4)rBIFk8c?>>LE72s5D|K?H_7v$zSADv#o9 z&G9%H(xXsJeiS@Er(1Q}*nEaJOFAA_q-4gWQ4aJ8h{6fP8(9b2c7NeJDBezAS)t>c zY3uP8c8y_C{s;20Y?b>xCn1Cv_$W}jG2fk0V}-*g-R-~$AQn(#!}$_Y?s;yLS~Q)$eWV9iWk zr|i+JaNrf9{RIpAom5mQTWqFl6wI^$MT91R7XLq{Fa`EUj^xLW54NzX{3;KAUY9Sh z27Q*0?~p}~LQU|7IpM1c^4hc3*SD9I@ECGCtS0StwUR3?WLP!-bTCHi5?-p!XOd?- zSILCxPHk3xjJ3v}U2j0rlqf1uFUJ^^P;fMTNhP8s<7g|ZWsIt`=U@9(wB7CK&it{B zw{5?7KQK7>XzNq&cfSWV-g+xq!~2I*62xbuR{tchc0`ua%{M&n^ zQwIO6RhSLE)zK6P96i6e4$?v$_coZeQy~YH&K>9 zy(lcq>A#L&EIIml1C*sr-p%;TW0WY^_`Pd)!K3j-#dWL5c1qYITIC9_&L~C2pdM;i zvbM}kCw1vuar0NLcALKIa0tsTZDmh>*Sm4`#x*`Ogt2qmAaIzQ8?e`L`P?nb&ji>FCo4Y< zu7*Df8um^VGCiNS`MhW}joV8tLTID#?m=qQ7e`?;W{}@VmIOkboF^Fh_N}S$;M$@^ zu#7t8-rg14IO6fJgZDfa-*Kl)&fZIIn_MF;AX=q5TJ^#lmP=qoX*$&ax6iJwA^SNG zgHERZNdN46Y#;Pq(0x}gkn@W)P7E<2?ybuP0+X?m8`lq&QNJuXrwq>xBzVOsPkaCk zSSrk?@Q0k4y#t#qLMY$eb-LO%u)2Bc21hy;Az|sYBnX+D;FbUGaKH9iN<$YjRS6*v z!GP5pEJic(t}MGYoR)JBvB+$9K5duY6`zvhMhrz!WnYZMqQt0{-#fK4$(-4m*PXgi z3mBuu__V)4?`35#<8izqxe)D;hD;wE9Q>=zjfv9^Ql#_U3Q|W9iOnQ20F&u>i6am@ z6^uNcGx6KR1lRe~$^|f>=vbrCrBo3A3VXqKPt25WNc&?d@&)xs;-Q}{=v+lJ2u3R3 zgNuo8Px;#JdkF<8xeqZLr;Y}LR27h~+uux;Gu8yCjPuL;`t=NA^UT1>Mvfz{ItY*8C&CKLu!4WZBKX$$+ON68$LU{N!rkP z>FH5}O;Cs)`w@LqWNSRs*Jz>Xf;g&@jFNPBxhD{sCuZD?I!9Z+h$e36y5Y&l^?IJV z=#J6X;bUF1bafzn_P9&*>9P5hPt_Ll;w-}DavVgKc#Z~CDe2SUmyVkyg2f9JF<7vCa`tiUQUC8cEMuHEi69BsK6(R;_YAm$AY zPWGVc62sNA%g$Ig#rCL*EeP|c9ns&`JkbO-Sziw>=U0gF)H^twJSAj69F#6X`r%kJ z1)$+lZqykq_zHD{MQYiwW24`OGiCU}YR)1=rC^&`rDFZWE`B}3k7S))?e}F2FX&>@ zTNXcrw=t2CW%xZ@ZW?91BkT?qJk0$RFW`5to5=SbAngj1=`}$df)2W0$E7^_l19z@ z;L^YF$=IhNFC1kLUTYeNI*iQY9y%-ReSPC`yQi$Pj0dk-6LOPI)(0c|?xupfm>{56 zl1N6uPB}S822-EGpITP>GmZauS1&qxDX8qVmw8NaFc zg?K2EzN%i0qVZ8AFwIM}H(wD>Qdfr=Ng42s39};?1C8Fsc#ozkl)enLHiU--PPHe3 z39vkAl;-ysLXJtlD64G~>81uRC}QRvCShaYE9Spzd-_D4*ZcX#QGSo<^MqR)?} zyeUC3#Uot=?oqLWvR`Xe$3t&QKd^3`)BSWcd_rIKvOqB#;A`J~AYgMRZEhTe9pHCTqGs^7cd`4~&obVQwMQ~tLVx>ctC)^pD$)@ey z%|RIIlHl>AIy(qiBNE<$93iRb>6b_)JZ92B3zeX5Wee7zu~XY5HwivvCAFYPNR|7dJmp|^FLt`j@7a9J z^G-C5oLN5sMXzJ8^cOWoz2H3&{nC5~u}hp?eiieYSzE!^S9AGCk>>bIKvRmkh*>Xy z!%66wkt9}>i%Y<}sm{K`C{pYjWj(p5*K|(Jt8l#WC4hvO5CC_ zO95%ExD%(g$@fMBbBk_UyG>dXd_cou}6K< zqt6k8M^SjFDq`$j%+LY9!78dY=m2%~i9fichta$Nl9Mxj)%tB3k9f$4DtFX`K)5A? z)MUT#!;e)Ah|bsDLgx=83=MOw!%=}d0K_G5*R!U0W0GQ+jMqfHPhj>mLXLrSTns?v zvc921Y^r~{pZ+W@Obm4Adn1O4d`LV~?`UgDci3r-hzgZ+2b^3aRsKFSrGl$EbOn z@m_v`5*_Ll;?Rm)zJaCN*LtZ0>T9O>%I4r+{D!1-Zg!1mv*)?mYSZPemS;ZV$Lzx# zDOQho?ZgiGosm)kHas;?_h4x+B^Bo!jq;)L2;Ot4y6;@`;kA#Q;NaDVuoa&|7)S1< z0j>G2zG)ZyL(;18UwIJjWLr%2nZnM+uKjVbJ8+iB&8u$L_MHhT~k^<Cx}pz}I8G7)B2_e(y=?n%joRX))vCKHI##*g4|3&CJ)1BjiC+@_ET#mIu zG1j@4NKn24!aH-_KT3{ZS{p99-RKoMi32Q0+dq1;W|QJcT4>M5VGU2Gz7T&QyDbof zt5LedrMr@w9Cx!*abdge0G{6H3nnmA-)2VJAEqP5!8U&6Nx_T)rmo4E$LocStE$vP z;ZcMUH3zbSaA3^xnVc&?;dLkT2CDK8s$26=SGD~=8lt9%_mbX=51wj4xHelh4t&9_ z0V;zT_=$gk84z$CQew(XfdbVAt-bhUVYeD}Ro5~`yS^eCZ znQJi3>$|8V5R!Co*^hw2#m^hr{$zS>W%Mkttn@OwYHgD|k@>xeK>;EkekqwZ<}#l? z-SpdXF`vf;EL>tmWyTfM=;GzzMy#u*$V$1_lVY#sIZ1nVfW{3Isb7Q3%Kawgr9~2v zw31T_{f+30^p&^Dz$i!6ncRiOPRNujY3^M%s;mR{(uLY8Y znD(#;U3LbLk19XUA0O4fN%OsVUwiPgTjyXLRonF5LMM|&E*$CL*IXgoC@QwrM9@!j z3?T)U7!tuKJ3MP%!utE(@bjxUhF?~K)!DOMm|JD~1|@>C;Se9!?oGi|#tMAS64D5f zuflZrk+T~h@KEvZb4oC0^0GzI6v-b}lWZ`tm)d-eCp{gdQjpCo*~G&Q_40A{2%Eo1 z**BS)LnIDxbJG#=lrFufKpE6pR{nmX#5YyaLKDKFhO0mK8A3vhTvK7~M zMuk)z6P#y^bMt>VYjb#km_eT8dyvi)h)*ZzyMQ6$@GnJ$ts@Mr78VVcD6Fz!LF%_P zu=*8ekpkmaf|?+)3;4XALvDv!|JB zT@_t1vG|ei-@gL9`t;1%_V%_AkOqT9WXU|U2RuU)|33hgQc6D+&9b(=u!nNqV z4}!4PG&ke&^YdGen4IrU(=ah<>c-p9E`^TFqnQvi2=2x{QzTi0S0t5q@wpUIplQ1v z>#NK0<;-qwHtP3U|B&)Mj~m2Ei)jTnmhJ3k>{0Kldt61K^5G{ zO|Pwz+jwiTiS=lqRf5Q!uCPfXgYe)O=GG3?d&243 za`X=lj&g*H79o_X>UDgqhsZ4UhA$HMF*x#HNb;F3;5eeLzzLFXl=Jk9`IUV8DBxu- zzudv`>z-8hF-DzNIqoYwZD0fMtjYAI;2>mSTFUFVO=_W;fOcf`KKIFizlgZq0=7KF zuav*&-rw6s%MMp6bN@8K#Z7>VEuNb!oEJv%ip2N9`n5^G}I!=v|1 zm)H|bE4Ivh%UvJ+lY6C=t?@v}SG4|-_j?mwr{VZ&g$U)I&(DUmx+m0=B<1JnN3yIz zfM42pZD;^%J?@ngo&Z1|`3sL>Q;em%fPABp_lkvx)>^rWubewX$DN(ykIDuR9mwL0 zJ{wigqL#79F*_AN{JqyuP(*U9GMKdkslIOQM}GSDky|owL9pd((JX$pf)9#O?a%jL z=pBC`TiBuEw`1|#w^|2KjVs-g-}qVye1PJ!0uQ773(fI|ECUAZWkuCDX*qY{7RHF$ zrVF?Q*fu_Be2z96e2x>&1^B=2x`S36@zSx`r=*sLh3kB%dCVGl@KRi1f7Sgg@Pr$g zC7XNA;XTSm8dS5pnyiX)yGgagETa3<{MWexWQ(xr`QrE=dG;0V?^)rqt#iQUrP|d- zYjLY!i6D;>aN{W6w`CpaYuJg%yT0g}H*)C_GE7MZ9jDayN*^)y3a1%>DpF_t4%s?~ z?$OA0^k=CD3KAkyxqfvdUIJ`+I-3#Qc!%bZ$7~0$`!$_MAu^HaPCqEiekM(^{sDErc1tAoSLv7a#ND6e1b3TK9!UJr?%{j4mFWgm=?g8Md1so9yD)8m>g6^*)+uGt&tRGHP z8z|4eVWH$KkAyw}X&O#8{30Y|WPnBiHGXe9TgzRR>sR(ZyWnm%#a+ULk~epGFkA)| zl8?HKAi%whrXD*Vq-v+Yd(B5*`CK-A#yW+NMEX(bjnDYg=!R`10;d)`yqu1gd&2sr zv>u@YE@*u5}?;+;_78|iFEO>najJePQ1-E zZe2~^Fol`F&BuO&qT9ML(+jX%_57crLE@6mG znBNe&^xATINS>XTKj92%%leb4RnYMwhEatU)P2Y>jjbSLh{z6Lb`Yz&j&j%F9eR6Z zXys7n_Gjv&ARf&!W_EGG`pbfI-Uti6EgD84ed$V3gr_fIGX@V$WjOzt?#a|{65tA> zm|vZTdD}6s4J9jx6vPvy*7fGZX;9v40?Y-9jEd?7n->$Ddv9jL36gS>&+8b({J%km zZ^oaul%hALmbnY|g9Fh7>U)GLnyUoF0Oyiz9XkMz93@`ll41+S{%R}ucYb_}f~R!| zOUUrk=}=Z=?lbT;!VP7TE1Jxd0xy}6e1~G(Wg`Zkmj8}XvTPj zBxhFJMQt95{2yp`@xgU9WPo+Q{MTm{huwsaV9jo>OEC+qm>ILa8>NXr1@l`dS~npl zCvSFIga0?Dd@S;q>%)IH}k;6KQihwg}No#En!SA?PfT$tpe#*nQ9$PK%6>b}SIU+!_}=L<)^IO^)^p4$nz zUwi;<+O$b^?T1qSW9{1T9@?b5HQUcVvjS5*)Aj}06fFP`b8?PtDtIn`H`DbXSY*>< zy+Ohs(%^NZ>;=4xmYoCy1bqpVvQsG@fX7__)m1YjB3i8gsCEe{&GD3}`7o?Fm$Fr1 zJfm`$iRh?V2BldS3;sp39#x3jwbVgb)*^f}hiCZvkUx-?Qa-*?+>30Xb40dT0tTl` z@zbAKh);Y;VthC`1*W)6O!z1GF30wtAi>MuA3giUeIqPObkUY8`vts8yE05hkdR1F zYq_>SGO! zWa3*ZQyyzlyp^&IDf=(fl_54crUoGTS$+RJXl^e%<(BNkhKsTqu_%tXj3H<_B2hIKe-` zeVbJAVL7Lt5+8Mffm3f>iVw#=?aP~R>6WVyu#NRdJH2LgT1L_8h~dMR2jhih!6A$R zbV3~kSj{5B5Q~zmvMMW~&M3Q)Ve!sF{0Dt-nN{tFQk<4z^E*>|FqH2h8R6w@0=*VC&?E1pWG=8bUTNSV6BMDy1RX z5NI?wy_kik7ym7ku}PcAMARkaGChwF(`ys=a=)I#=;NH0K!t+V2IunULbV@F48Q) z!kqn0fvHq33Sv}<9L40%pM^DE^r~%cM>9)A8&LZ&LOyp#5#HDGB%N_kDK8BYs}oSl z2ohikLOD-#;~nNLF^xZm5|)qM6j+s(qDjXJG)9DrP0kxKzdL<&?S#>kzc6B`qboZb zi35FxA))|QaPEQ*+mD`ZryVo2Y&wiRJn3fTssqb@D z;o4b}0mUt0#%zVcpxRn=Xmgs8_QxxAdTRs0a5vs}#%ikI!G%_mwiAYW?d>}517LPi=Mvm)wp=S-fi zv6%u8!Cse#(}rR=R%xx=tU;OgK9+o5*n@`mhzgG-s4#&Ksq-GuQ7C&3l!8B<;c*0; z!}5EC&!S_>I#h=xl+E~e_wGj?_`o9#?pb|r9lBg&pjo+j7Jx;<8G5>gWdU%FOisIA zz-p@iN!6gQu<*Ux1D~(^3CG>pC$=%0o}C-8&HEZKIL9jZ^b3ZG$%$IB^-J+ZrBNN zpWc(7$D|(H+P{)c!N}$z3&EStElxWpW?7!MD3E!9=FP^!Xa1OYNAQ2F8oiJTlxclx$DOT2-L%Fz7|jdIiCvbcN#Wz zWqq_9V>R`=WsO+T%v(eA0RgRV9?#aZ)!*YE!k~z5;m68XKGXk{R>8J$z||NnO(!_=T~t0JL-?p-vZGD zckR6kHSDNDotg*)Egw0)`7Q)qEXJx=EZy52soVIbY*Z+nl{2kQ-U8wz7<51>2w8+y?J%t@p@dskbV9 zkQ?5f33B-&9yvU!w%<(?UF~+PbcK!XT&|LQ?2I7cZzt-?P3ONAO?r4myT+S_?*w{B zkm6#U2z)22=9ZQ(@9*!guGV7D#b*!@5LOh%+{)0EUr?IGog^roNojBzEVW{EK`sWb zPRH#s0y7Xv3Chk$`w4=hK6eT#W>RO#rU3Hz>YH z7}*HuH&$lM=O%mwIK3LL^ag_{1pxB&$#IsEOs2tuANUtwPT{MBCm4CD2GfxGP&kU~ zq|?0v=0~E5Sp-eXQ)D{X4xqbGm%Z@s{y*l)LOZDU*u0fb8 zMXSxV3c~6zn!#~X7mrjemtLhtiG%D4iQN;$I`4=7g@J#ORkmP(VEbTGYo^|}DNoPc zuQP9CJ92ERPzB{v52`a9J!fDwGOC`kNtOnr5iKgxf9NIK;wOnw8 znmA6aj#6h0HY51fJ2}lK*$?6|vK&miyQ#*n0a3}k8@)5hQ0Yaqxg#X7Fzxn-@*7NVOV?djt@(lilCgeIHZ<&L7~B}g*np)VAc%Op^9G?H-vD#{CuE`i}RQ(5DztUmL*x9drSG*ZXGGUy7#G37eB&j;NX6t`exl1#)*9}3H=_!|vQ zU1IDC@ClCrUxl;LQ(8_&=K9x)EEe~#&YuAxn|VU{@q)`}nfUXYHT$N&Q;Y2mkAqX9 zzL!&Py)1vieZLN?aLoYX&|6XoEXiip)eTBCgl{C836Qq02R*ZrZ9pTndfrg-k*$Gn z680$T2Y@0i@U=*NUq0zI#th}QH;7N>dN71_gasHxlYQx)~k74*C=8{_qZKWrqY+H8rC#cHx z9CjfK^)UU7-s6={I=8P6w!QE9>Kp+)PcpEXZjrBbOTl!&#{aRv>tep4*%*z3sAbMq z_{=DZcXEecLHFzyl`UO#%r#wQf|Jy;F{>;j1wutg-iJ(JO_pw?cxZyq>b(?hv5II| zjdFUOl%+!KeWmQSMgRuZ)Xl=iM$S(zF6F>FJ!EEXZVY(oSlf7h`t<27&<5O2T+w{_ zV~gI+h$}TYDRe)L>vm5NtTk)av@QBE8TI?~gov2=zc26O*%4}6SIh>4?IB(5=l-39 z1nr652bnSMHvxh9$55B#omsa3liJ4xA!$) z0AUfgGu-#Gx%1BZDrND4$S(IRz7x9Hiu5MIX3RG^K(Sl1<4Qp1&`o#uXM<~<2Fv(e zBEvs^8o=2^RN!enny%0sTvy5uFOPqJ#yD78DP`raIY<=nn>-bGsJbL?R^tT*IO?F{ zlpsx^QK{w6d(^IKXv&`vPWeVLr+=kZpddXdNqAQgqOjufdq67VdW1wyzNeyE;7;9( zLbc|}yY00+`~LJC%I7C zS}Da~vejcc&54JGRv`A#-#ROC=Y{Z2#V3?>1?Az~jtqc^fO(bK<)i6KuG`xQ_X~!Y zt{aT32YCW`c!!FP|Fb$}<-@;vtka{;J$S?}ZfIiBvG1bb*6B9D^*E9JzpDOkviE;G zE964qQU}kFhmiH`KYcf>+53= zSFT&oioTW+ro3iw%!LW}xh zBSg0gs6L6&uie3BzoVo-OL6hXkA-)3m2v|IzgDT5L7l^?Hg(0zPnWgl2V{$!0;bET zZpac3q-7XFZ?dP|&eHw2uj;(-R=0&Z@%v)d9&Lm8OXJ`-+Zj!VdiU-=Wm(Yy>luruSr`6**G=pw2C!w ztCezTK?aMs-Hs)*AR(tAbJB0p!l3qc_lx)LEkqJLd^p)-?^W}TSJVFqPoG<(0qwWR z02fEjt@_PA(aOq-?fFzWoA^SXx1gQZz~*|w|0Stv&!_iGCyxldeLMZj!y2Qm_m5{YXXSUX ztd#NZy0qhNo=()1wovWqNhcq*{+hHcp;2seO{`GPGP~<7ku{l{#rK1btLIX6{i||0 z?Q8h7KmTj93^^AkKbDY^yQn^GLi!>%w__6~J=(in Date: Sun, 24 Nov 2024 21:03:53 +0100 Subject: [PATCH 44/45] Update doc about themes --- docs/theme.md | 287 ++++++++++++++++++++++++++------------------------ docs/usage.md | 22 +++- 2 files changed, 169 insertions(+), 140 deletions(-) diff --git a/docs/theme.md b/docs/theme.md index 277569d..ac4b3e9 100644 --- a/docs/theme.md +++ b/docs/theme.md @@ -24,25 +24,29 @@ Not all the `Theme` struct members are customizable, because some are used as ca ### Metadata -Metadata must be a JSON object for the key `meta`. It is not mandatory, but might be useful if a GUI to switch themes is implemented someday. +Metadata must be a JSON object for the key `meta`. + +!!! info + + It is mandatory if you want to use `ThemeManager`, because the theme name is used as the identifier that should be unique for every theme. Example: ```json { "meta": { - "author": "Olivier Cléro", - "name": "Light", + "author": "John Doe", + "name": "My Awesome Theme", "version": "1.2.3" } } ``` -| Key | Type | Role | -|:----|:----:|:-----| -| `name` | string | Name of the theme.
Example: `"Light Theme"` | -| `version` | string | Version of the theme.
Example: `"1.0.0"` | -| `author` | string | Author of the theme.
Example: `"John Doe"` | +| Key | Type | Role | +| :-------- | :----: | :--------------------------------------------------- | +| `name` | string | Name of the theme.
Example: `"My Awesome Theme"` | +| `version` | string | Version of the theme.
Example: `"1.2.3"` | +| `author` | string | Author of the theme.
Example: `"John Doe"` | ### Colors @@ -54,72 +58,74 @@ Example: } ``` -| Key | Type | Role | Default | -|:----|:----:|:-----|:--------| -| **`backgroundColorMain1`** | color | Textfields, checkboxes, radiobuttons background. | `#ffffff` | -| `backgroundColorMain2` | color | Window background. | `#f3f3f3` | -| `backgroundColorMain3` | color | Container background, more contrast. | `#e3e3e3` | -| `backgroundColorMain4` | color | Same as above, more contrast. | `#dcdcdc` | -| **`neutralColor`** | color | Neutral interactive elements, such as buttons. | `#e1e1e1` | -| `neutralColorHovered` | color | Same as above, in hovered state. | `#dadada` | -| `neutralColorPressed` | color | Same as above, in pressed state. | `#d2d2d2` | -| `neutralColorDisabled` | color | Same as above, in disabled state. | `#eeeeee` | -| **`focusColor`** | color | Border around the widget that has keyboard focus. | `#40a9ff66` | -| **`primaryColor`** | color | Highlighted elements (default, checked or selected). | `#1890ff` | -| `primaryColorHovered` | color | Same as above, in hovered state. | `#2c9dff` | -| `primaryColorPressed` | color | Same as above, in pressed state. | `#40a9ff` | -| `primaryColorDisabled` | color | Same as above, in disabled state. | `#d1e9ff` | -| **`primaryColorForeground`** | color | Text written over highlighted elements. | `#ffffff` | -| `primaryColorForegroundHovered` | color | Same as above, in hovered state. | `#ffffff` | -| `primaryColorForegroundPressed` | color | Same as above, in pressed state. | `#ffffff` | -| `primaryColorForegroundDisabled` | color | Same as above, in disabled state. | `#ecf6ff` | -| **`primaryAlternativeColor`** | color | A darker/lighter tint for highlighted elements over already highlighted elements. | `#106ef9` | -| `primaryAlternativeColorHovered` | color | Same as above, in hovered state. | `#0f7bfd` | -| `primaryAlternativeColorPressed` | color | Same as above, in pressed state. | `#0f88fd` | -| `primaryAlternativeColorDisabled` | color | Same as above, in disabled state. | `#a9d6ff` | -| **`secondaryColor`** | color | Text. | `#404040` | -| `secondaryColorHovered` | color | Same as above, in hovered state. | `#333333` | -| `secondaryColorPressed` | color | Same as above, in pressed state. | `#262626` | -| `secondaryColorDisabled` | color | Same as above, in disabled state. | `#d4d4d4` | -| **`secondaryColorForeground`** | color | | `#ffffff` | -| `secondaryColorForegroundHovered` | color | Same as above, in hovered state. | `#ffffff` | -| `secondaryColorForegroundPressed` | color | Same as above, in pressed state. | `#ffffff` | -| `secondaryColorForegroundDisabled` | color | Same as above, in disabled state. | `#ededed` | -| **`secondaryAlternativeColor`** | color | Less important text. | `#909090` | -| `secondaryAlternativeColorHovered` | color | Same as above, in hovered state. | `#747474` | -| `secondaryAlternativeColorPressed` | color | Same as above, in pressed state. | `#828282` | -| `secondaryAlternativeColorDisabled` | color | Same as above, in disabled state. | `#c3c3c3` | -| **`statusColorSuccess`** | color | Feedback for success/validity. | `#2bb5a0` | -| `statusColorSuccessHovered` | color | Same as above, in hovered state. | `#3cbfab` | -| `statusColorSuccessPressed` | color | Same as above, in pressed state. | `#4ecdb9` | -| `statusColorSuccessDisabled` | color | Same as above, in disabled state. | `#d5f0ec` | -| **`statusColorInfo`** | color | Feedback for information. | `#1ba8d5` | -| `statusColorInfoHovered` | color | Same as above, in hovered state. | `#1eb5e5` | -| `statusColorInfoPressed` | color | Same as above, in pressed state. | `#29c0f0` | -| `statusColorInfoDisabled` | color | Same as above, in disabled state. | `#c7eaf5` | -| **`statusColorWarning`** | color | Feedback for warning. | `#fbc064` | -| `statusColorWarningHovered` | color | Same as above, in hovered state. | `#ffcf6c` | -| `statusColorWarningPressed` | color | Same as above, in pressed state. | `#ffd880` | -| `statusColorWarningDisabled` | color | Same as above, in disabled state. | `#feefd8` | -| **`statusColorError`** | color | Feedback for error. | `#e96b72` | -| `statusColorErrorHovered` | color | Same as above, in hovered state. | `#f47c83` | -| `statusColorErrorPressed` | color | Same as above, in pressed state. | `#ff9197` | -| `statusColorErrorDisabled` | color | Same as above, in disabled state. | `#f9dadc` | -| **`statusColorForeground`** | color | Text over status colors. | `#ffffff` | -| `statusColorForegroundHovered` | color | Same as above, in hovered state. | `#ffffff` | -| `statusColorForegroundPressed` | color | Same as above, in pressed state. | `#ffffff` | -| `statusColorForegroundDisabled` | color | Same as above, in disabled state. | `#ffffff99` | -| **`shadowColor1`** | color | Shadow for elevated elements. | `#00000020` | -| `shadowColor2` | color | Same as above, more contrast. | `#00000040` | -| `shadowColor3` | color | Same as above, more contrast. | `#00000060` | -| **`borderColor`** | color | Borders of textfields, checkboxes, radiobuttons, switches and other elements. | `#d3d3d3` | -| `borderColorHovered` | color | Same as above, in hovered state. | `#b3b3b3` | -| `borderColorPressed` | color | Same as above, in pressed state. | `#a3a3a3` | -| `borderColorDisabled` | color | Same as above, in disabled state. | `#b3b3b3` | -| **`semiTransparentColor1`** | color | To be used over another color to lighten/darken it. | `#0000000a` | -| `semiTransparentColor2` | color | Same as above but more contrast. | `#00000019` | -| `semiTransparentColor3` | color | Same as above but more contrast. | `#00000021` | -| `semiTransparentColor4` | color | Same as above but more contrast. | `#00000028` | +| Key | Type | Role | +| :---------------------------------- | :---: | :-------------------------------------------------------------------------------- | +| **`backgroundColorMain1`** | color | Textfields, checkboxes, radiobuttons background. | +| `backgroundColorMain2` | color | Window background. | +| `backgroundColorMain3` | color | Container background, more contrast. | +| `backgroundColorMain4` | color | Same as above, more contrast. | +| **`neutralColor`** | color | Neutral interactive elements, such as buttons. | +| `neutralColorHovered` | color | Same as above, in hovered state. | +| `neutralColorPressed` | color | Same as above, in pressed state. | +| `neutralColorDisabled` | color | Same as above, in disabled state. | +| **`focusColor`** | color | Border around the widget that has keyboard focus with `QFocusFrame`. | +| **`backgroundColorWorkspace`** | color | Window workspace backround. | +| **`backgroundColorTabBar`** | color | `QTabBar` backround. | +| **`primaryColor`** | color | Highlighted elements (default, checked or selected). | +| `primaryColorHovered` | color | Same as above, in hovered state. | +| `primaryColorPressed` | color | Same as above, in pressed state. | +| `primaryColorDisabled` | color | Same as above, in disabled state. | +| **`primaryColorForeground`** | color | Text written over highlighted elements. | +| `primaryColorForegroundHovered` | color | Same as above, in hovered state. | +| `primaryColorForegroundPressed` | color | Same as above, in pressed state. | +| `primaryColorForegroundDisabled` | color | Same as above, in disabled state. | +| **`primaryAlternativeColor`** | color | A darker/lighter tint for highlighted elements over already highlighted elements. | +| `primaryAlternativeColorHovered` | color | Same as above, in hovered state. | +| `primaryAlternativeColorPressed` | color | Same as above, in pressed state. | +| `primaryAlternativeColorDisabled` | color | Same as above, in disabled state. | +| **`secondaryColor`** | color | Text. | +| `secondaryColorHovered` | color | Same as above, in hovered state. | +| `secondaryColorPressed` | color | Same as above, in pressed state. | +| `secondaryColorDisabled` | color | Same as above, in disabled state. | +| **`secondaryColorForeground`** | color | Text written over elements that already have text color. | +| `secondaryColorForegroundHovered` | color | Same as above, in hovered state. | +| `secondaryColorForegroundPressed` | color | Same as above, in pressed state. | +| `secondaryColorForegroundDisabled` | color | Same as above, in disabled state. | +| **`secondaryAlternativeColor`** | color | Less important text. | +| `secondaryAlternativeColorHovered` | color | Same as above, in hovered state. | +| `secondaryAlternativeColorPressed` | color | Same as above, in pressed state. | +| `secondaryAlternativeColorDisabled` | color | Same as above, in disabled state. | +| **`statusColorSuccess`** | color | Feedback for success/validity. | +| `statusColorSuccessHovered` | color | Same as above, in hovered state. | +| `statusColorSuccessPressed` | color | Same as above, in pressed state. | +| `statusColorSuccessDisabled` | color | Same as above, in disabled state. | +| **`statusColorInfo`** | color | Feedback for information. | +| `statusColorInfoHovered` | color | Same as above, in hovered state. | +| `statusColorInfoPressed` | color | Same as above, in pressed state. | +| `statusColorInfoDisabled` | color | Same as above, in disabled state. | +| **`statusColorWarning`** | color | Feedback for warning. | +| `statusColorWarningHovered` | color | Same as above, in hovered state. | +| `statusColorWarningPressed` | color | Same as above, in pressed state. | +| `statusColorWarningDisabled` | color | Same as above, in disabled state. | +| **`statusColorError`** | color | Feedback for error. | +| `statusColorErrorHovered` | color | Same as above, in hovered state. | +| `statusColorErrorPressed` | color | Same as above, in pressed state. | +| `statusColorErrorDisabled` | color | Same as above, in disabled state. | +| **`statusColorForeground`** | color | Text over status colors. | +| `statusColorForegroundHovered` | color | Same as above, in hovered state. | +| `statusColorForegroundPressed` | color | Same as above, in pressed state. | +| `statusColorForegroundDisabled` | color | Same as above, in disabled state. | +| **`shadowColor1`** | color | Shadow for elevated elements. | +| `shadowColor2` | color | Same as above, more contrast. | +| `shadowColor3` | color | Same as above, more contrast. | +| **`borderColor`** | color | Borders of textfields, checkboxes, radiobuttons, switches and other elements. | +| `borderColorHovered` | color | Same as above, in hovered state. | +| `borderColorPressed` | color | Same as above, in pressed state. | +| `borderColorDisabled` | color | Same as above, in disabled state. | +| **`semiTransparentColor1`** | color | To be used over another color to lighten/darken it. | +| `semiTransparentColor2` | color | Same as above but more contrast. | +| `semiTransparentColor3` | color | Same as above but more contrast. | +| `semiTransparentColor4` | color | Same as above but more contrast. | ### Numeric Values @@ -131,47 +137,47 @@ Example: } ``` -| Key | Type | Role | Default | -|:----|:----:|:-----|:-------:| -| `fontSize` | int | Font size for normal text. | `12` | -| `fontSizeMonospace` | int | Font size for monospace text. | `13` | -| `fontSizeH1` | int | Font size for level 1 headers. | `34` | -| `fontSizeH2` | int | Font size for level 2 headers. | `26` | -| `fontSizeH3` | int | Font size for level 3 headers. | `22` | -| `fontSizeH4` | int | Font size for level 4 headers. | `18` | -| `fontSizeH5` | int | Font size for level 4 headers. | `14` | -| `fontSizeS1` | int | Font size for level 1 captions. | `10` | -| `spacing` | int | Spacing between elements. Multiples of this value will be used across the various widgets.| `8` | -| `iconExtent` | int | Size for icons. Multiple of this value will be used across the various widgets, according to their size. | `16` | -| `animationDuration` | int | Duration (in milliseconds) for a UI animation, such as a color change. | `192` | -| `focusAnimationDuration` | int | Duration (in milliseconds) for the focus border animation.
Note: can be longer to allow the user to see the focus . | `384` | -| `sliderAnimationDuration` | int | Duration (in milliseconds) for the slider animation when its value changes.
Note: must be quick to feel responsive. | `96` | -| `borderRadius` | double | Corner radius for most widgets. | `6.0` | -| `checkBoxBorderRadius` | double | Corner radius for checkboxes.
Note: smaller than `borderRadius` because checkboxes are smaller. | `4.0` | -| `menuItemBorderRadius` | double | Corner radius for menu items.
Note: Even smaller than `borderRadius` because menu already have a corner radius and padding. | `4.0` | -| `menuBarItemBorderRadius` | double | Corner radius for menu bar items. | `2.0` | -| `borderWidth` | double | Border thickness for widgets that have borders. | `1` | -| `focusBorderWidth` | int | Border thickness for the focus indicator. | `2` | -| `controlHeightLarge` | int | Height for most basics `QWidget`s, such as `QPushButton` or `QCheckBox`. | `28` | -| `controlHeightMedium` | int | Height for a smaller `QWidget`, such as `QSlider`. | `24` | -| `controlHeightSmall` | int | Height for an even smaller `QWidget`, such as the scroll buttons of a `QMenu`. | `16` | -| `controlDefaultWidth` | int | Width used as the default width in `sizeHint()` method for widgets that are extensible, such as `QSlider` or `QProgressBar`. | `96` | -| `dialMarkLength` | int | For a `QDial`, the length of the knob needle that indicates its value. | `8` | -| `dialMarkThickness` | int | For a `QDial`, the thickness of a tick, if visible. | `2` | -| `dialTickLength` | int | For a `QDial`, the length of a tick, if visible. | `4` | -| `dialTickSpacing` | int | For a `QDial`, the spacing between knob and ticks, if visible. | `4` | -| `dialGrooveThickness` | int | For a `QDial`, the thickness of the knob highlighted zone. | `4` | -| `sliderTickSize` | int | For a `QSlider`, the length of a tick, if visible. | `3` | -| `sliderTickSpacing` | int | For a `QSlider`, the spacing between slider and ticks, if visible. | `2` | -| `sliderTickThickness` | int | For a `QSlider`, the thickness of a tick, if visible.| `1` | -| `sliderGrooveHeight` | int | For a `QSlider`, the thickness of the groove (i.e. the highlited zone). | `4` | -| `progressBarGrooveHeight` | int | For a `QProgressBar`, the thickness of the groove (i.e. the highlited zone). | `6` | -| `scrollBarThicknessFull` | int | For a `QScrollBar`, the thickness when the mouse is over. | `12` | -| `scrollBarThicknessSmall` | int | For a `QScrollBar`, the thickness when the mouse is not hover. | `6` | -| `scrollBarMargin` | int | For a `QScrollBar`, the margin between the scrollbar and its parent. | `0` | -| `tabBarPaddingTop` | int | For a `QTabBar`, the space between the top of the bar and the top of the tabs. | `4` | -| `tabBarTabMaxWidth` | int | For a `QTabBar`, the maximum width a tab can have.
Note: any value below or equal to `0` will be ignored and treated as if there is no maximum width. | `0` | -| `tabBarTabMinWidth` | int | For a `QTabBar`, the minimum width a tab can have.
Note: any value below or equal to `0` will be ignored and treated as if there is no minimum width. | `0` | +| Key | Type | Role | +| :------------------------ | :----: | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `fontSize` | int | Font size for normal text (`QLabel`, `QPushButton`, `QCheckBox`, etc.). | +| `fontSizeMonospace` | int | Font size for monospace text. | +| `fontSizeH1` | int | Font size for level 1 headers. | +| `fontSizeH2` | int | Font size for level 2 headers. | +| `fontSizeH3` | int | Font size for level 3 headers. | +| `fontSizeH4` | int | Font size for level 4 headers. | +| `fontSizeH5` | int | Font size for level 4 headers. | +| `fontSizeS1` | int | Font size for level 1 captions. | +| `spacing` | int | Spacing between elements. Multiples of this value will be used across the various widgets, including default `QLayout` spacings and margins. | +| `iconExtent` | int | Size for icons. Multiple of this value will be used across the various widgets, according to their size for `QIcon`. | +| `animationDuration` | int | Duration (in milliseconds) for a UI animation, such as a color change. | +| `focusAnimationDuration` | int | Duration (in milliseconds) for the focus border animation.
Note: can be longer to allow the user to see the focus . | +| `sliderAnimationDuration` | int | Duration (in milliseconds) for the slider animation when its value changes.
Note: must be quick to feel responsive. | +| `borderRadius` | double | Corner radius for most widgets. | +| `checkBoxBorderRadius` | double | Corner radius for checkboxes.
Note: smaller than `borderRadius` because checkboxes are smaller. | +| `menuItemBorderRadius` | double | Corner radius for menu items.
Note: Even smaller than `borderRadius` because menu already have a corner radius and padding. | +| `menuBarItemBorderRadius` | double | Corner radius for menu bar items. | +| `borderWidth` | double | Border thickness for widgets that have borders. | +| `focusBorderWidth` | int | Border thickness for the focus indicator. | +| `controlHeightLarge` | int | Height for most basics `QWidget`s, such as `QPushButton` or `QCheckBox`. | +| `controlHeightMedium` | int | Height for a smaller `QWidget`, such as `QSlider`. | +| `controlHeightSmall` | int | Height for an even smaller `QWidget`, such as the scroll buttons of a `QMenu`. | +| `controlDefaultWidth` | int | Width used as the default width in `sizeHint()` method for widgets that are extensible, such as `QSlider` or `QProgressBar`. | +| `dialMarkLength` | int | For a `QDial`, the length of the knob needle that indicates its value. | +| `dialMarkThickness` | int | For a `QDial`, the thickness of a tick, if visible. | +| `dialTickLength` | int | For a `QDial`, the length of a tick, if visible. | +| `dialTickSpacing` | int | For a `QDial`, the spacing between knob and ticks, if visible. | +| `dialGrooveThickness` | int | For a `QDial`, the thickness of the knob highlighted zone. | +| `sliderTickSize` | int | For a `QSlider`, the length of a tick, if visible. | +| `sliderTickSpacing` | int | For a `QSlider`, the spacing between slider and ticks, if visible. | +| `sliderTickThickness` | int | For a `QSlider`, the thickness of a tick, if visible. | +| `sliderGrooveHeight` | int | For a `QSlider`, the thickness of the groove (i.e. the highlited zone). | +| `progressBarGrooveHeight` | int | For a `QProgressBar`, the thickness of the groove (i.e. the highlited zone). | +| `scrollBarThicknessFull` | int | For a `QScrollBar`, the thickness when the mouse is over. | +| `scrollBarThicknessSmall` | int | For a `QScrollBar`, the thickness when the mouse is not hover. | +| `scrollBarMargin` | int | For a `QScrollBar`, the margin between the scrollbar and its parent. | +| `tabBarPaddingTop` | int | For a `QTabBar`, the space between the top of the bar and the top of the tabs. | +| `tabBarTabMaxWidth` | int | For a `QTabBar`, the maximum width a tab can have.
Note: any value below or equal to `0` will be ignored and treated as if there is no maximum width. | +| `tabBarTabMinWidth` | int | For a `QTabBar`, the minimum width a tab can have.
Note: any value below or equal to `0` will be ignored and treated as if there is no minimum width. | ## Full example @@ -182,55 +188,58 @@ Here is a full Qlementine theme in all its glory. Please note that every value i "meta": { "author": "Olivier Cléro", "name": "Light", - "version": "1.4.0" + "version": "1.5.0" }, "backgroundColorMain1": "#ffffff", "backgroundColorMain2": "#f3f3f3", "backgroundColorMain3": "#e3e3e3", - "backgroundColorMain4": "#dcdcdc", + "backgroundColorMain4": "#dfdfdf", + + "backgroundColorWorkspace": "#b7b7b7", + "backgroundColorTabBar": "#dfdfdf", "borderColor": "#d3d3d3", + "borderColorDisabled": "#e9e9e9", "borderColorHovered": "#b3b3b3", "borderColorPressed": "#a3a3a3", - "borderColorDisabled": "#e9e9e9", "focusColor": "#40a9ff66", - "neutralColor": "#e1e1e1", - "neutralColorHovered": "#d9d9d9", - "neutralColorPressed": "#d2d2d2", + "neutralColor": "#d1d1d1", + "neutralColorHovered": "#d3d3d3", + "neutralColorPressed": "#d5d5d5", "neutralColorDisabled": "#eeeeee", - "primaryAlternativeColor": "#106ef9", - "primaryAlternativeColorHovered": "#107bfd", - "primaryAlternativeColorPressed": "#108bfd", - "primaryAlternativeColorDisabled": "#a9d6ff", - "primaryColor": "#1890ff", "primaryColorHovered": "#2c9dff", - "primaryColorDisabled": "#d1e9ff", "primaryColorPressed": "#40a9ff", + "primaryColorDisabled": "#d1e9ff", + + "primaryAlternativeColor": "#106ef9", + "primaryAlternativeColorDisabled": "#a9d6ff", + "primaryAlternativeColorHovered": "#107bfd", + "primaryAlternativeColorPressed": "#108bfd", "primaryColorForeground": "#ffffff", + "primaryColorForegroundDisabled": "#ecf6ff", "primaryColorForegroundHovered": "#ffffff", "primaryColorForegroundPressed": "#ffffff", - "primaryColorForegroundDisabled": "#ecf6ff", - - "secondaryAlternativeColor": "#909090", - "secondaryAlternativeColorHovered": "#747474", - "secondaryAlternativeColorPressed": "#828282", - "secondaryAlternativeColorDisabled": "#c3c3c3", "secondaryColor": "#404040", "secondaryColorHovered": "#333333", "secondaryColorPressed": "#262626", "secondaryColorDisabled": "#d4d4d4", + "secondaryAlternativeColor": "#909090", + "secondaryAlternativeColorDisabled": "#c3c3c3", + "secondaryAlternativeColorHovered": "#747474", + "secondaryAlternativeColorPressed": "#828282", + "secondaryColorForeground": "#ffffff", + "secondaryColorForegroundDisabled": "#ededed", "secondaryColorForegroundHovered": "#ffffff", "secondaryColorForegroundPressed": "#ffffff", - "secondaryColorForegroundDisabled": "#ededed", "semiTransparentColor1": "#0000000a", "semiTransparentColor2": "#00000019", @@ -241,16 +250,16 @@ Here is a full Qlementine theme in all its glory. Please note that every value i "shadowColor2": "#00000040", "shadowColor3": "#00000060", - "statusColorForeground": "#ffffff", - "statusColorForegroundDisabled": "#ffffff99", - "statusColorForegroundHovered": "#ffffff", - "statusColorForegroundPressed": "#ffffff", - "statusColorError": "#e96b72", "statusColorErrorHovered": "#f47c83", "statusColorErrorPressed": "#ff9197", "statusColorErrorDisabled": "#f9dadc", + "statusColorForeground": "#ffffff", + "statusColorForegroundHovered": "#ffffff", + "statusColorForegroundPressed": "#ffffff", + "statusColorForegroundDisabled": "#ffffff99", + "statusColorInfo": "#1ba8d5", "statusColorInfoHovered": "#1eb5e5", "statusColorInfoPressed": "#29c0f0", diff --git a/docs/usage.md b/docs/usage.md index 07385f4..bdb26ed 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -26,6 +26,26 @@ Define the `QStyle` on your `QApplication`. QApplication app(argc, argv); auto* style = new oclero::qlementine::QlementineStyle(&app); -style->setThemeJsonPath(":/light.json"); QApplication::setStyle(style); ``` + +## Themes + +You may want to use your own JSON theme. + +```c++ +style->setThemeJsonPath(":/path/to/your/theme.json"); +``` + +Additionnally, you can also use `ThemeManager` to handle that for you. + +```c++ +// Link a ThemeManager to a QlementineStyle. +auto* themeManager = new oclero::qlementine::ThemeManager(style); + +// Load the directory where you store your own JSON themes. +themeManager->loadDirectory(":/themes"); + +// Define theme on QStyle. +themeManager->setCurrentTheme("Light"); +``` From 3348d14092289c62b9b0d4034434b16b3656c7a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cl=C3=A9ro?= Date: Sun, 24 Nov 2024 21:04:05 +0100 Subject: [PATCH 45/45] Add changelog for v1.0.0 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..00a786d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## v1.0.0 + +- Initial release. Enjoy!