From f33be68703fc1bdb7377ed86a28727592740a2ff Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Fri, 4 Nov 2022 18:32:19 +0100 Subject: [PATCH] [macOS] Adding QuickLook feature (#7491) * [macOS] Adding QuickLook feature * [macOS] Adding QuickLook support for Conda and Homebrew. * [macOS] Support non-square app icons in thumbnails. * [macOS] adding icon for .FCScript files --- src/CMakeLists.txt | 5 +- src/Gui/Thumbnail.cpp | 2 +- src/MacAppBundle/CMakeLists.txt | 30 ++- .../FreeCAD.app/Contents/Info.plist | 67 ++++-- .../Contents/Resources/freecad-script.icns | Bin 0 -> 98455 bytes src/MacAppBundle/QuickLook/CMakeLists.txt | 35 +++ .../QuickLook/GeneratePreviewForURL.m | 74 ++++++ .../QuickLook/GenerateThumbnailForURL.m | 72 ++++++ .../Contents/Info.plist | 106 +++++++++ src/MacAppBundle/QuickLook/main.c | 212 ++++++++++++++++++ 10 files changed, 581 insertions(+), 22 deletions(-) create mode 100644 src/MacAppBundle/FreeCAD.app/Contents/Resources/freecad-script.icns create mode 100644 src/MacAppBundle/QuickLook/CMakeLists.txt create mode 100644 src/MacAppBundle/QuickLook/GeneratePreviewForURL.m create mode 100644 src/MacAppBundle/QuickLook/GenerateThumbnailForURL.m create mode 100644 src/MacAppBundle/QuickLook/QuicklookFCStd.qlgenerator/Contents/Info.plist create mode 100644 src/MacAppBundle/QuickLook/main.c diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a2eb27a4eb..5b76900f44 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,6 @@ if(BUILD_TEMPLATE) add_subdirectory(Tools/_TEMPLATE_) endif(BUILD_TEMPLATE) +# "if" clause moved into local CMakeLists.txt file to support Conda and Homebrew builds +add_subdirectory(MacAppBundle) -if(FREECAD_CREATE_MAC_APP) - add_subdirectory(MacAppBundle) -endif(FREECAD_CREATE_MAC_APP) diff --git a/src/Gui/Thumbnail.cpp b/src/Gui/Thumbnail.cpp index 4bc2d3a9ad..620d801e8a 100644 --- a/src/Gui/Thumbnail.cpp +++ b/src/Gui/Thumbnail.cpp @@ -106,7 +106,7 @@ void Thumbnail::SaveDocFile (Base::Writer &writer) const if (App::GetApplication().GetParameterGroupByPath ("User parameter:BaseApp/Preferences/Document")->GetBool("AddThumbnailLogo",true)) { // only scale app icon if an offscreen image could be created - appIcon = appIcon.scaled(this->size / 4, this->size /4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + appIcon = appIcon.scaled(this->size / 4, this->size /4, Qt::KeepAspectRatio, Qt::SmoothTransformation); px = BitmapFactory().merge(QPixmap::fromImage(img), appIcon, BitmapFactoryInst::BottomRight); } else { diff --git a/src/MacAppBundle/CMakeLists.txt b/src/MacAppBundle/CMakeLists.txt index 708821cf79..a6c72dcecd 100644 --- a/src/MacAppBundle/CMakeLists.txt +++ b/src/MacAppBundle/CMakeLists.txt @@ -1,3 +1,27 @@ + +# +# Build and install QuickLook for FCStd files (org.freecad.fcstd) +# This is used by Homebrew and Conda/Mamba scripts alike. +# +if(FREECAD_CREATE_MAC_APP OR (APPLE AND BUILD_WITH_CONDA)) + add_subdirectory(QuickLook) + install( + DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/QuickLook/QuicklookFCStd.qlgenerator" + DESTINATION "${CMAKE_INSTALL_PREFIX}/Library/QuickLook" + ) + install( + PROGRAMS "${PROJECT_BINARY_DIR}/src/MacAppBundle/QuickLook/QuicklookFCStd.framework/Versions/A/QuicklookFCStd" + DESTINATION "${CMAKE_INSTALL_PREFIX}/Library/QuickLook/QuicklookFCStd.qlgenerator/Contents/MacOS/" + ) +endif() + + +# +# Build a Bundle in Homebrew. +# This is ignored by Conda/Mamba build scripts. +# +if(FREECAD_CREATE_MAC_APP) + set(PYTHON_DIR_BASENAME python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}) if(PYTHON_LIBRARY MATCHES "(.*Python\\.framework).*") @@ -122,8 +146,8 @@ file(GLOB CONFIG_GCC "${HOMEBREW_PREFIX}/opt/gcc/lib/gcc/current") execute_process( COMMAND find -L /usr/local/Cellar/nglib -name MacOS OUTPUT_VARIABLE CONFIG_NGLIB) - -install(CODE + +install(CODE "message(STATUS \"Making bundle relocatable...\") # The top-level CMakeLists.txt should prevent multiple package manager # prefixes from being set, so the lib path will resolve correctly... @@ -133,3 +157,5 @@ install(CODE ${APP_PATH} ${HOMEBREW_PREFIX}${MACPORTS_PREFIX}/lib ${CONFIG_ICU} ${CONFIG_LLVM} ${CONFIG_GCC} /usr/local/opt ${CONFIG_NGLIB} ${Qt5Core_DIR}/../../.. ${XCTEST_PATH} ${WEBKIT_FRAMEWORK_DIR} )" ) + +endif(FREECAD_CREATE_MAC_APP) diff --git a/src/MacAppBundle/FreeCAD.app/Contents/Info.plist b/src/MacAppBundle/FreeCAD.app/Contents/Info.plist index c8683067e7..504a70123a 100644 --- a/src/MacAppBundle/FreeCAD.app/Contents/Info.plist +++ b/src/MacAppBundle/FreeCAD.app/Contents/Info.plist @@ -2,6 +2,56 @@ + CFBundleDocumentTypes + + + CFBundleTypeRole + Editor + CFBundleTypeExtensions + + FCStd + FCMat + FCParam + + CFBundleTypeIconFile + freecad-doc.icns + LSIsAppleDefaultForType + + + + CFBundleTypeRole + Editor + CFBundleTypeExtensions + + FCMacro + FCScript + + CFBundleTypeIconFile + freecad-script.icns + LSIsAppleDefaultForType + + + + UTExportedTypeDeclarations + + + UTTypeConformsTo + + public.data + + UTTypeDescription + FreeCAD Document + UTTypeIdentifier + org.freecad.fcstd + UTTypeTagSpecification + + public.filename-extension + + FCStd + + + + CFBundleDevelopmentRegion English CFBundleExecutable @@ -31,23 +81,8 @@ NSHumanReadableCopyright NSPrincipalClass - NSApplication + NSApplication NSHighResolutionCapable True - CFBundleDocumentTypes - - - CFBundleTypeRole - Editor - CFBundleTypeExtensions - - FCStd - - CFBundleTypeIconFile - freecad-doc.icns - LSIsAppleDefaultForType - - - diff --git a/src/MacAppBundle/FreeCAD.app/Contents/Resources/freecad-script.icns b/src/MacAppBundle/FreeCAD.app/Contents/Resources/freecad-script.icns new file mode 100644 index 0000000000000000000000000000000000000000..377cafe86a43502c474c86602ce9d3492f752eb0 GIT binary patch literal 98455 zcmYg&cRba9^#8ps*SaVpdnH@0E$h0HQL>__xOS19k#TV)WRC_RE;1^)C}dxoWbYBz z-Wk`Pzqe1{@8kRXL-#88<@I`>bDrm%=Xt(zuyOGKfiX!AHWCUT@TKku13fJoDmE$* z2t;#R`_?@Why-{`0-}HdFFQU1N5Bi%F97PEs6UANnO&B>bF3!6yq^=dA;3P}Jb1q&I7vvRH#DO>HkqL&mK z!i1$H%2_whshySD&)X!{B>W$r^k_k^LO59o+(nR*C%V2a)oZ@|6c1gEHy!2Ni)Ryp zd0DYoV%^KN^Prx~B1t*$WjuKd>=rc4788W$Et0j{QwVm=z6SMAjYinpT7G+q{brxE zvxNO+&Ym$oGE$dV-B?GK4obW3HK{Odl+y^{aPqi)griDa@p(e9p%m77oqBJ)l)=xw zkQv5aoi{_AUTk;f)q)N=L9@V1K`Q~g`(!AMpf}E`j$f*KVRMKlcOWXyd)n}ixw&X}89UjxTlfo;YW4>8>2x<%A&wjc{yeWQ=4Sp1xq zu2|yor;=0NWn#qbcyHay=?>OM|KcMB3$PJKzq$FiNZGWOakjmnPwNZ2tHZ9SD)04{ z9GxT=v!8C$M<1l07S?XHun)&_s|KD9eS0kLbom+SNv?pJR18S>)n_)&D0043=utXj zTtcvHO7IPmqRpnoPz$N><9B(T8K-McH_lHMRnP03CaVu!{2`AwWxD2!PmbU6-hw{x zh3+VJTdX=)$%yEMP8F5=?Vh&`rpmjb%Akb4!LKH8vs(1wL~|5#cbaO@*}!st-W2+D zcX&$TY^K6vu`n5ZSh1L1<+(EO*>M4vOUQM8Msmvmgk=mkGu%Coh&{jW^d#~!tEoTh zYpCU>!fCFQTYh_P@!(B+@Bh|j`#jr0pHnS+$nANm39njF}rrCwSLf)uY3?@ zpU;bx{OPc*dpsA^%=VJO+Zd^f-zuNc zL>3~l_KbA<3Ep@)NQn(>ceN#@8z}>#UL+Sj@iWBtlM3mxuN%w@_{a5GohM8&4xfmM z(HA|FmgrhF8!?3bOj$XqHz-$VfeVs1avF(0tCMq?FdgkJtNQzMHa7Ler0*il z@l@5`& z%~n~Q$v3IkSd&9ww;(!>2Bf={ zJ%(EDdo1Q-^cdc<1>ft1FaLPUk`P?caq%4Vg>^BJwLXzSM?0?Dn#Z0A;wO*YD8;2D z>R8*N+#U3_>f5?!HK#vNiw*3s7YL7F!|-~|>l2k;t14A5HqNdq-P|k|H7Tri(#7}d zD{nRRs~)!Nqk@i>^QKC&Au=RquQ8F;Y$Rc}r``UM*MYcpk-n5+&y3hT&ce;$CO+w( zY3}aUadMw7X>A;}X(6_&ygBjWZ)|Qs7vvy?1U)bAfC;&D%Hl=FD#O$6l_1ZkSeU7_ z+thSp_!P10MJ=(04sk#ztomEI8p&B&b-0k~I$5&tr-J`MEnC*+ZNvCp0AzmOzli2j zBGDm3|NIxVE+!V_RP0@PeDz);-!$$aWKLg^dW_} zX6kqCWLb>2r{&__`uIjkKO_#Z)1w~8q450ESY6OLlOsvtm^|g3@O|P;H;1#|ni?PE zD+1CB5<`;^-he_aDtcRJFlFO;=T(Tk;1jJ@<@qIYb;-! z@^%~QSfKvT(4`aZpu?n~Lw&hPskF1!3T*=`{;vvzBTylEyl%GV4)$q8Ya3pq6Y!GL z#dDz(1>G3Tq>R(juetk2o~tm&>v{hV$S#LgEfVUqZ=)8fscGHz-9FA*2zog53Y2qD<%@k)T2310@1JF?0(m)Nz)89`KMAdQOYG?1DVAnC9#=q;C=N_`)qc1!m z0!T88YKdOb_>WkRH^KIxv5Y%x;1tjwkbRAF-vt~;zsT@qK!|gI~v5TbiF(~H`jt(^Dsu9@4H{aCtk9tmAXWOJSTn* zI_lGQrQOr)e*!;zB`#I;MGBd4{d$T3mO8|OS)iPE@vUjr$n%doP9?>fTOucnK@xk8 zA@5FqVcitz-7@~DY+A4m9ARRDi1YBE!~0d)STo{fU1WMf{GtHh&^ul0%aol_{vt=E z=}=3T^n;OvHvCW4O)_t@DRE`8^qVwgx?NkS_c&EH9`+I+S@7O{)NkZJDs+VZ+on-~<(d7?64~_=y@S>+q`(qhFxrk#KeL z-7>?&iE>>{c#3O^j$(ikQWx__*6lPHLjE^!>UeVh@W?(m1!FR!jnD7CLwMj19rA-9 zt+?lXImngnRO5k^b{{HKm@QUG-I4H$W7e*Fk!TfSo%B1b%g9M&Ph|UOP)!ybPRm)@ z5ootbd@>wbYjO0;q&ABWJjsNJC5?~3dL#swPJ(_nzhP0j%$ht1%U@b(TqR^GJSZuT zcq(eu8{8gHy!u4VwPyE$odsn9EthgWANYmJ(NcEMwQ5v1c9I~RS) zs5M2~S}L+`hCWxkT$O!rsEo^oz;>LqV6PaU9DxQ-260JxQ?MIeE5>$pBKgOp1?8^f z6T5{kYF6W%5azq*8cLj-&p9Z0Qq>kEA&#fzpc{GcU;C#Thnyfo+1p35`1QT<*>D7a z!hyeP6@N6&0Z=ddF1YNbk{WXIuXdP_K|<;q%x#-lY(4+g6s%nUAk+kzp7v`(BpTrZrenXJ zBAdTET88_HDO$`G+o*SaUUMq(tzIlX{Cc+4A#BPNBnwt#vaDmmy21*+JBQ1XYOQqz zf2Q=Ae`k_KY0zN(+Z>1vpd|Q<8YouRc@tbcq9>&z4AoWRqAOV2G$=xaxn^%0df-8M z0?5>WZQR;l%+Y%c;?mMEX(}HW2;ovJ@huR-S>WWnVUM*A`X`u|70JTJzlkqZ?@Y)= z?^MtzpVI0FpcUPD>ATp)(XnAc@JshfJ4NI+34mz@NAZjUk{Koa|D@rdy42wU>(mj`vo6 zy%X*H3?{BBaascYx~Y%c{3`z6Q!ZLT{U|29YX^mTjeU<}FlkPm_Fb+P;~F*EF*nWw zuf+#dUP0anP)8cC{zw22SrC&-)*KpqM<;qP`9CY0#^ActR3*%UQogN;b#RNP$}ePr^i$p z>>_E4<0sX%ue3~3>OL7MFBjLx-K=0SXb$R5S6QaO#8TN8(H0*?T5?coJ4A%vPx<%z zbKrkW_kKtdBFBHI=lS@e;Zb>}bg5_-TBYX6?(C7Js{9ntsaa7#gZ_`RJC?OA3);vu zT9&z8_RZ%XZpBHH8O!>pyy$Y*#%0a5JMd31OlBd8DIzH9S~J(-X1yS-dpb4br$Lx_crdy3w#0%3aaf%IsV82;w&sqH9cp zkvlamDkSTXhj_Aq?k+Isf+#5~zg#2<8PL}iGWIC*F(9`Ys(zL5<=xp6uVv)^bHiO$ zH82HkL02MFZDCTV)%E$WG`1gf^Z=9xPL|K!8V4il>v53)gk7S+fAPs|xoTnp6^d5h$Ro<9o=+(KO$>Zssk_tW2+r@-gx zrhb8t(|!UL8^ZT}*U#GA{(6{8*%Lr=ms5-6Z5oSo(m&{^V73#p50pk0zbeVAn8;y% zPa>W+m#8Nfr>?2hs|EiOjCw18uU$wA6fva%c@K$wm_Ar&z}u6w>GeFkD5ZNrzsDS< zhNK~^*q>h4`QerPV(!=mpV|(=^7%lKvL$RGNd9l1*K)CMnh#S@ejtms1?7$w$kqm> z`+zX3jUD_}QPeT3Nzx$rr7v;e zjuu!3{(|gUt%Xi-oB-w)*~f~1&-ZtYkd4~+1hB>Lu?N?p;h&suEC(oezc}<6&-ZXp zY1$8+XtnN4_d}U(e8qvelzoc&c0m(#NRK(kt6>=(5}zpvW%W;@97)hGUs@FZTQaid zze!xQb~K?|j@N zt3~2DZb^(0z>q@C|NoUr-+-yE4s0C$@QVD_U>>=;nDaARJ?su{74-8`528MA734_@ z;;hZ7s4iT{rsT0wdwTUBLNmadOqEt{6%sEYX5yl@rBfWn8947Hyw=8DK$Dhi>fw;N-%>1Xe@L#oKaz| zg;QiVJeLeArFqIpp9C~@*zFiJf068T4yn)w*0L2|dVWzF*@ND%mR=ziY{OupE@L(B z5(*Ebn#)8V#PWS(bb>dQ8wLq+2MzJ04m+TLv{dS7Le$0Fn?Tp$v4XYB$9m++9C;A! z2R(NGz)!4$`nte}IG90G<(?*s$y{WQ;fzl!V9eh!1ztXrt+p{)n)797G*6q0aS8G%? z##fc&{@}iOGJ?!whjAn;VMs+zf{i_G9l};sUfD7H*Wk>0(ZY;&8ZD2GS`yzsRO7&X zPv(=7hzFa1j-9fv^dSTp?rd#e{mAUu+~(Cba_|FpaAb%4b4gnsnsxh9?DQ~x0+lqI zc0C1@$ly8p58FEStfL|p1R;fPrGE#6SQO%-Rz(WLG+Aa|Ch01dEY{Gd42&PxA!SLP zfs)l(po&6%%|u0?{LxfuNX0_~GZyW=m*N^wIdP31-LT1Rkg_dX*E*blWnd?rql#mCK5uzUhVcPN}+a69MMVktD`~uYR zt9>LZyN5sfsOi2fn!8%aE1wWT=+34$PA50ocbahl>yB`XpKiRq8ZHU!~GMKWv^$;)B36Gc;bMg5vMAE!ql zv$NV5dU~7oe`!hQ>}nL{f;^3cUGHUkicLt~i2wdy-Ez_v z0q*6~>KQw&Md3h&up3!&S(Hojyj)2V|7`gRj-#l#B87Bc9W#kEXVxrJe$Y+_z|gkF z6 zZewJ2DirTR=`>7o`y-UdtDZBQYig zU%n*}EK+ z23M``%KihkL1tsp$K$NnqEb7nWX?K6cfz<(^L=k0`@%Pfa$aDi6%Q2d` zY?AE^uX=CDR_&%{e*#c|zRsY3uwX4F_s;?&!v+Uh&?6~i{fd#IRq`J-_OebbzsRSM zLRNG&Cu+d;`IeM2KnhlOoqh%Pl!AVP@2Anj&-*~4R8X$RSEM;9U-yG^oWfit{+;kA z?gL&68V0~FE|UPmz-6Qbi*4V;UX6^ibsia8BUGD{Wn|%eN^TF)`2VdYc6q`pS|&C#DHz4eYFGZ{Thj?qp=v$|gDuv02c4W)^NEN^2NKijv>iD_ zHM;K-P(E~%Y>a--6J9FNHFl5xpkGq%o9^`%jV|~-`9cxD5RpMIFsi2Y4{@VUtSK#R zEz@AOWRCcES8rIlMH*UD=w0?I3=s3yZ>D>rK*GaOJ@jd&y9Si}x^!V++|EeMush^( zv+8i>)6SQVr0MIfE-^5jn6kc}B4H6VuL;sSyWHwY;{$NZ@pj0JTywS6@Ar6W=*|DC zbBx~4C)S@A{E6}(#&0}A&#Y6(={lv z!SVReVCKOdSMZVyruH)4Ql-ai!)}Ow#n);x{F&}1A`FONP&gE`$e4TKjz@$5=wy$ z4m~_r=KJbc;(;ZWi?7Z-jJi!;T* z^6lSIISB9NkBFNkb#@C+6!At+37ut)30fm-^pwd`d{=IMyhZhsl*x;#Zg`gbo$gPd zIMeRA4PYDo(+BFhHl(d(0W2R`CJU}`PEONLn=O{Ma7l{RGloRM-?Fr2iPSDd@To}J z5>Kw_VrEKX>`BI?7>?Y58A#i0r$up;D--}|AxEI}W2Jl%( zsL;=zGV?ueD&dTYDs(lC>N4Rzy7Vxidp?eYLf(M^nYr&#Z?me%X<3KzIhYRTK5O(_ zw}=+NtdYe)c~AiIx8Y0d@XYP#KJnBd=RLWaxDCmf(>6O-$Jqc#d~0q!a$^>Ei^0-E zju{%b_dR1!T!W!!uc=TnKnCQvMj7`f23GJMW`Jych}++)w)T0boEll;BeA5StGUm^ z?VQ7_>a>{!8x>IC#ODRf_(Xp5yoOCzN&#gQ5sWSnn)&91b%?Ck_}I!G_pQj)C{KjG zi&1?}+w8c&_bc2slDe4lE5Q~|A2Z<1!eRvQf?@|EY#5)*w}5F;M+%r~Mn>>@^V`Bt z!_|FBnyFmet|nH_qDO?{@39j>iG1K3uWV6S@W@IFZwiQ>UIzFi&BZ6bN<$b24NdeV zq41zOUzKVh7SG>btyAfomTF+|Up*~7&$if;_*{KS+XhQ{&ULj_y-H;AfL&7Y3Vtmye?Br^tre8;=!$y7P>`8v=BheZ~>w^+? zM+dSbXTI$|?l6SL2zOxzL)!qp}bs z?~Ta-TYxdGTYAqYhJqHx(#HH_}M)hE%>oc^(Dnn@$8F>9>+30|L4 ziy^*GZkW!U%CazHa-^aSKh}wf@{7KgXXX<`MCqaW%n)8J23@`|-C zW+@=D=fz5zY1K%26F;Z)27iu|8^-SMODM6t23CvtpjGx9%KZKBKHsqbCe5An*n<`p zE232*V81n>+gIE5N|%ev4K3X2-+Fp&>0H|4R~Tk+<@mx97zl5Sl6rODYO%j&htY2f z9m(A73dXuRk|c9m*e*z&?;d&M)#+3Q(r9~d6q*d!-(B4RkrtTVG4iGjKk*bpqVOv= z_9atT%vGTZXV1|w^c}xuE5v9GY-5prsAKz~69d*KGIInN7|5rjfP(&OV@^(@|8IK% zP;{@;_(Q7vwV9fUg%Fgf>SnhWD*bKu@VuQ*Zy~Qz3@G&Rfnh8u1t0fw5tRDYYr7v6 z0vKvYHo%yqM1=z@%{WAV1o-q?pdET*H_!N3U#EIV>09Zddo>I`CWkJ*64pQym$7rW z400vvzS=<)%2EKFUV%b3&{2;vuvIazCNIJa7`6UrA^ya!3Mz*V8|`E9T5OV{Z^RH1}DD}l=9}2D!L*?ptc)6yLY2X z!o2KW{jMUDmNROY$u;@91ukj2Y9Y%s>RJ8>b=>b0XI;#iF9ROE-CJa;%YemEjJ?KD zh){p^0T|rKjA~QA3&^X1y-lHxDT)rlxlc1Mb}D)JYH<&CBW7 z2aw2ob?F%iS~^}HEOKJThh*T1hDuK7%#gnV7}Ez2HUJ~o1GdP^lLheTSx-=eSu+5lk{QaUvtFmf7*=tB zA8fm-4xu90;y zn|6wPxNZ>|iG>$b1U!1~pc`0|BAE0c_2%_a-2Kor;;E&MqHCk7E6K_T&^-fWf#cT@ zO-PYqdY-A>MasU*YS4R~CIu{{QT*y-uFG2iB=Pg*w&BS^(u3XpTRtDB$e9A2as=>2 zouR?KqzAt{<+y3^PO7TKl>qAVbbvHsv)+9;z7;8Jy0Pk&zCmqCBKf?A>gv|>@gH`b zjciQg9gRa+ucNHaF~;uWm6f1&MnAWnYD&C`-E7_^46XA4MvIifjQ|xFAC6sP=VhVc%V72&?Ax8 zGg~3t3typxrU-_?&qjGESt1`Jvk(uDJ6DD9Sq-nB<>zlqRD8!J{}MPYG_Oh#XzcKo zPJaeyASn4Nfs8wcoB1tJy+_IVWu(E;dFGU@lzZ$4;!w);tL-#Xhml*>6CGe!0TASv z?%z&Zz!rvxm%l~;TTqlDL|xLTf*@oWVuInXMG}V#%^f3a;A!b5ygAq}mJ961pI%bI zsq`;Defr8qWk&W^>1SbpJJ))~c58oa)W{hii`$>kH;JapO=l`bs;T3TM#%FQc65W` zXOaA)bp14FB_4o$gnd&6JmZ%tdGX7OdY}Q8FJve*e$zlKl<0$VB|7)drW#RM6>cQT zh7V~@YlM9PNxvchw^~<{Gy!*&ujMIeCv#*iL?-3^c$5;=B~+eGAwO8LBy5Hx#8sebKe85b8q)YXgq^geie}tjlDzf-LDX*udK!7$Ci1 zwfwfGrAx$7oP`6^!H!mOv!8?))Bwmz6~h2PvD1Ej_cGvo1%Y$Gcpca5-@ zMB_5|u+7L$OYwz9XyJ8)U!+tZqoeJDLco!y*V;(&0tLRzdAu*-2`L!WB3JU{!*%%RGRB4(jmAc@=x% ziXEWlZyidlb7VAA9E-ap^WN=j2Ac*u=|JBrNY%1Rue+Hrz<3dZOiRMR0cH@Ej+Yh+EWF_pE;!?N@)yP=ujy>17=$TB7)>ggNUU^_+~* z^|dm3^JBDZ{X!&>sXto8yhVGVa<~c+O$Jk?S-kXg_G99s85Q;;)XpR^pw_q^wVgq$u!C;#ke)hn3XCF@E&L)^{+^wHz)^U zo09MRV_QVvpD5^AlS5$!Z9>`wln;M2QHRq+7K%bO5c>&h&YMkdInxia3b;So;zGh_ zLd2-_VG?bY*a|LIRky51RS7-X8V`uXV#w307Xs=cOHd3>8GT+=1j_; zK^v1bCSpVE&q&0y%yp5Gj&wk>j}Y#;K_(G;P4o4IHy=tP)vOoHG&ep=5R@$%v;|=h zbOcqSg6o#$bJTMO3VkDjZ&4FN%WTnbC{uB!b1~_rJE5kQvajAvl1Ga?aQCZ44mHI_ z&Hm&HprO#qqx4)sTBr>eg7xT3v$6f)ePv)gdmbapD8E)1X>mGKUh6gC2lCQHZ|ipy zlgmQU(jay%vR4t3R=`6^mT;fG0yy?>7wDZ(*SCXys#|PXf$HSV0uLLHcV%j{+zc#! zOlLN2hJG*|iQfW8iB&CbLBhq-7Wt*|SCfQTQi64o#B)-wsT{9;Uw#x!&gH`sP=z_Z zwDcMo&`a=3-LGxs@?WcyJ^XSQa7wOv046*0Q(-P~C9zFJ0EEfyH;MKjfljl7i<}YF zg`uJ&v+b=H!++YE3x`(^&H4@rn!7-fj0y?iD?;V1ml#%TbdnZxuXSkoq3d7!Au=Ej zW%hUFx*7Bpeb4|2AQ|i#?8ey`g z-5~$X9lP|E5@T`zfPScOEU*jh+@N}W0+;wj#X$cAe;yQR(whTv9GmFM^j|LhjER_; z_4RC+yU|{O{qp0eHx?n}yK>x0iwU8vCW`A-u@u!i zeL92euGI;(8dy!_lt9mCaDXHJc}acQ3+2PPH$l(xpoM|c)D{PS0X=7Jy7nI*Y!;Y%zU`D}=C7VPN^a2E3sl&c#b_mURMd8M zDdI&171waoWL|t%Pva9~K}(e&=N4RfD$RN+js;==LQwe$^Obaj$3nDAur?nyKDt^s zzP8Shg!P9sK*mLnf|`awN*4N7(XijQpvG<|ONqr1N1ew}c|592 zfDkQ9b@V7W{cfE@yJT+sze!d@htSPi&?j&Rqs=!Ms=1BX#?^+d$mnN$@vQn?&V?t~ z4oMU|)tZ63Hi}lXt-=)*?V-@B!^QMw_S$0QJ@oTysoR;FNO|@?xX7J6BNA^JELI;>BT#BMd_eWjn*GgSs9HptWAEl!K@splT*L?4JQ<7xnw|}(tRyV*i-DfqB zTxJ^)ZnLa0n;EB)Kg+UI)}RxQyZ%8|EtCoO%~&~r_xjesbQG*vONzZxj!HaF0p-2? zoTH??bjz|m#6|qmDg+SJCFxO)^kQ@YB}5TBnez`mGOhJ2e3W-Ek1j^F&gf`o>Xc+U zf+|Ja`*DXu4|S;Xrzp@Y8>aN+c|?Fk7c5^J#-447Ruf1c_C^!SJXNC?YD z$bw%yl6LC~%wLi{&b)eR5KI*a%+ldMH8!_o@fz3QW*6-(FqVsq34>4e@h*B>q*Z6^ zh!`_^_%Mm1KdHkxQe6VG+2PXPgc)&eq$N*47C zW-OjGRN;c>`vWjzTK+S376(l>M09)WtnntRi0zT*IyL)QR;5WTdOrK5)^{Fu#Ek4U z>Q&$6lTE}(b(c-+bU*=`CUSPYX}1zh(cX07tFlrBP-i!u{fcNqc#{TBtDXl{7C_zM$ zY|w4^$MSh84Ku$jHh`vUdbRzT`;I$fdILqb87l5ujGvgYG2*a?qe3OgBSWrgC$N!@ zv!buoQG3I8tz_Bdz}A5p=i8e)R?)_hH+{C|Ph`-N`(BO5(dJef-St5MckT*os1DLIT^P=4Hk6so$bzX%%m9jpph!K$j9ui6mn==bXfLF*R zoCl8WUEEL`v-8!hi*nqJvrT-BNw&`k&b|oSetFUze-c34^=FSdq|Q}~BwY!R-Zn3$ z`-`hmVVOhZ*gz-_cSh{a+y`+s%=@NSiohO{Ghq1#4hL6-xN4k4kNL+MH6jf@RyB8rdQZW5`Qcm}N$LjNH7q*?1 zueieRuA~#ht+=2Q{Wa)KZ>?zt)lL`YyAYlioSbd!;ANYiK#fdDy!;Iq=bH+GwF>b4fz6Kc}4GC@a5MXzW3)_AmXCJcW$ty`F`|_04qpsZ~O; zTCab~c)ZRJUBMbQ9vZ}MR8qQb3ACh;vPi%(yO6wS%I+i>nw%UV+){MB7xL8e3Sq(1V55_F`8}}u7Zof(A0@qPH0NJ=;n?Q^s?jWj%s> z_@R9E$Q18}|7qQ-EpdG7snXG46WeY#6dhjvVhgD4J<~_o)2RX_j9~5g>Bedcas~fmIiA{B3wk0L)Sc?!90%B7kI3!M&6<1&n`_Q`{t#9Ol5TvpSD_*9WDjmOMBU|n`qZq zcw>p)NY%32d2-kWKYt8ERlFpBtS{TcvGnxSdTg-&vR%7I(moJ0KNY0VL9#rw>57m^vN_RVw_BV>&>NELe~vU;v4ICy310pWwSk!8tJ7 z6Y-3wP6ib_;z(jXtL`xxIT3tJm2CZTUvXjAd!ZGo0ayIebqt%;k*uNf&Uczg(D`92 zsLFrNv0<~aa3@LJymI#Jc;kHFcwUyeg7qU4xQoZYFjh%kZRdJc6z~uyAVtoiXw@+JGfXZg_ zAASQ1>H$Mg3MiHo5E5xJo};+>Y-B*UW$dMlRKP!C~Hz zZigf|anumwD$jSJOk@D(kjb-Hgd*$3_7TmW8(}ajDFTMFpX|bB^(1PUAv{rB*e89Ch?p zIE{;&`Jxh;7dqD`$yGhKHOQND(Id@4<9i!Z=YRb-YF^;1ri#*5*}+G1-S6eW&xe;j zE-r65Zc74Acle`KPYe3M0*cODdlbOjHQwYnr)ay@kiV(Dr%0uwaa)cG;e+O13_sao zxV{y+xEnc7F6SBOoZk9(tK!f2t8TlxD>G{KH)~WC*>Wbr{`&7TI#X-B349NDX{RJoY4CwHPWX;UiyB9MwYj8eP zRq#i5qOBKeQ7z&k7Vs#+FdsQwh(6N)QVWhodBbuNo} ze(sWN=8R){zH)_A#qZ9lZUlUQH=`w>>u3I*>j?6k%+R!SvnDg0_!+_lTa8`?$~@Ui2#oTAQAwk2wlHI2bDhJqB(FyqL;V4=-cA)ocMi z%{xnr%Lcv2+JnR>XQTV5eK^kX7oPX#Db|?qy5(G;SL%0@@V=8yqY`&vS zm*p!rL>DobNCERKZ|m26pDyPOeegS_t?GIHrd@R7@Rnt%a$dhnl0Fy>t5vN2u5ki$!W@fw%9HR`zKP6y)c9UkLE-BcKEQb z!s021h(w7a(t!kDadm*vlZshxBTiRw>+oc$$lqcsr+(}NO(?o8KAN-7((ar+m$7rahZ}>0H!08jH+AvED)G|h8y0|JK*tZQt zmhEhT&ID68laJcisYCNfLi95J$_gQx;@7+?xKf4WxCP7eZciw;IltX)*At7|_1@t! zDLM9fj~??x6iOu4(4u5A%3tmJEbJKX9py(+RjJPDXENLQaQ#Wi0SNrjJcPHhl*BPm zBW2!xpvz&;6>{@du^M!7mt$r)&ty52ztA?WbGI%187&(7d(|1xvAA#Za{A5i`a31j znEef>^X^UTTCFixey#`5SCoJXHRNxte3nN3eL?k9^l~p~^En0E1x5G;wiJ^= z(p$D^#p240Q@d+xNPE8{Y!Z-8y+Nf)IPt5n%p4@oux=7QX_0FVjMq$#Kab8ZlH+D} zDkLHfmAOP8$2NpfVKJyLU_GNE|3gk7Z!5>ybHK6Rx zT&X)FJ-*ydOSb@>)Cu8D16MVjqJD99V}?S{3qv%14!Bq&p0stnb9MMNr--_%l^iMhg&c6k{GJZzc0+Y6ItEn)rHU1Vv{PYL?T>&;c zuJz}#^Xh}+;nj~y=I=QdrvljC=t@6uQ2BgGZ1-ADL=O8l*#0zZWv}qh;CkoLv)vUA zM(Be$Sm$oyA@_bWSz2BRwN5691#?y|p@aN!#J=1p@i51RB8rpK_(+bOML%@cW3i;w zdkX=*0Wfxc(Vk10BPzQ;&EnSf%+C!@jOKp?4=3}Ulj0ZO0DArw;xB5LV%REL-Stm_ z9AZD}+3NXT-Gf#AhYUR@8xf`Fs#P~%tQnq^e|tB=I6%CcxEjx(kzbD*ctlM2T0OBz zV}y#cR@9aboy5pLa*>NYa$O3EKCFG$_$Ey>^zBuLb>oOw-A#^4 zH=TA`QL_zl<$z4wRO1GZ_H`kHzUpp z@6t!-zd8nwEL7!3>sZfI3{G(kbU7d=&Z2LO>XhSFqTjTH?}(RXc(@KFNK9hr2Ary& z?$#fXYOqR`Sf@v{D-82jJXk0zUnhUW<>OlVcjesxY{y%MoaSL4W2c|RB268mcd|Kx z3qr@Ao7C($d!j0de=l@aaDRYUat!9;G_^Iv5zn0c;f*@qU(+s^1pZpQ~K z$s6w4+`wkeX=!}tQ=_O2n-{*BdVXh*@hdobYsiW>R# zQ9$M}*-G>+-S|ETKJpB>NoQcd--xVXE_$F?mTvbqf(iqtIHWz!BBABZ-``T)YMW&K zctWrX7fiQ>o*68waEW=(%%3&Pn{tz%+%sGdKuE2+Jk}{})ps8;;SM?AuWB9411VR> zEVi>8&^_}=HVNPWCl5dMF5O^0&vKSo=WanibyRs`kBXju??i)DHE3VR{Ht3tb-5iM z;Ik7ew->g|D&6ZVR%CfJ+49NBfh5g=SG&_U)yG--#`a7C+&$Uchbk7%#mF_<8`5dF z0ElSnXFHZ5MN2Bp3juao@W@W0v*hNRfSmB5PQMZIZUHjWKPvM$Jx+#x{b`&JyCI8t$lg-Bqmjb*Xx;8JPl@ogRS=& z3p~^Jllx94Ygy72PC58LE(ooMdmh{*?!G-yeiF?GnsnAB0vNxX7o_Q3yMI<`a1!78 zkPE^1WKJN=2!E43+U8DKVpqiu(+S78h*F46z(|4*I#m-%#qg}JscpVR!Xi3S|1ocG zx^;LKLr%}!nXj7q`?#=H8$QH<&0Giy?ND@O^!2j4ud=Hnam#&^yDV0@Fo`MTMvlTM zdNTc(XK^bz>W0DQNX*LMx6U}Ty)xNut^axu=`_p^&XMkfdf)IB??l>=>=waW2R@iKWq|@~ZPSu&?LyuI6$tfGVH*0!eZ6=#n7vr;= zi6kW)tZvP21Iuph4oN}GW!+&0N;2CvUr>kPaVaEys%b91lpYReaJCRBAkKFYH`>MGWNkkL4}fS5N9M^C7&> zl&!ZR%2<3akLV8YIFYEb{_!pI)8Y=5yT&xrS1$AO>tENHy2W+l006Er)BJQ>s_`5& z^}qiYK##wxxlnY4Su~}P{E*-8p3pC;3M|-qTY(7v$L27qrSvazke|hacljW0p2m-t z*L7?8Ri??;AXM?v`nzEn%qi&JSxX@v-+DFi&d|7p=D%J!hrPk@ZwkY@R~e>odDpvy zlI5lnCtGbexwL3|C}#tD$_=gRqx5`e@GAjZ<@`@zfKtrnnkcs8Blvh~pe|37ef?n- zx5pHHC0&RCL|W3Jrf`})cX6pX4EI5^>q>uaw`GhF`tykVQHsM{i-!wK&0!K%^i;i} zJ_?*8%KkPhdi`iPQTj#Wu>xi}(v+^pd)ecTAbMOg2)$+m{zip>f;18Q%p znk&dNYfQiiL{TnqA*kAR$SD2zz$?X#@XQtDz#~5mW%QD^I(qrJqjS=Z&7)D~ix?_f z-nMc0E}y(1N6WIN9TRSVGAfSqd)A;ui zBh_@(o95m#A@KG-Nt|`Pe+Iopib*a1d7{feayG$~`o|nY<#QmUg%YOrX|M8 zuiyiIsexHMFBM~#8+Rz@8`9LSkPMpjqC|Dd5?y$fE`?gp=_0colS6sP24A{+J+T5N~87iGGNdMnT>4|IpPu-MTM!aBj?d6V$C4>nbEa#PBJ6?cD6OyRzE zwjTQ_A7TGouzE_WR=`z?{F{T2vY3~vSrx97#!MUDdLmwx zFOp5pHc^jK*{PxXEK5F8`iAAY6LVQ;WoOpy<$4x0{jDnOO7ttS}kfKZ0+g z{GhCEMDOk-?{A%xc`t4r4dy5sm;l1X_JC_^ZAk6_0bi!z!k3vEMnYlJBWiJgF5Oy$ zix>itUNIwVaSzj-=j0Z|`95b=G2TO4RCgVRggkFnExsdD2o|!-dCW|Md=c1CY0Qc( zjJebQ|9HB}xTw2eO{3JRbb|pR-5rX6bayP>-L;emNQxi`NGM2m=h7gZ%fiy#&BBs< zm-qhe{j%To!#V$%IWy19^Na{uLgU+&aSlN)wS>Q&J5!9wG{ZB64*7`=?M5lh6Z}eq z5klf4QYH)716~7d5UCS7+UGOJd;#A%*^Eo5N#zKDdE;L-3M-{M|7Go0`UO{f?oSXN zuaF%CBkCG~;;L5S%* z-RG|UeCogU)%;52R2WQ{daL|$+vA!7rBnL>%AGKXx_(oDJAd&4)CS zmRflhKdlL2SFoGXepVB9@<<9IDLtI;cw3mRC*eHWF!(nFvxbc1%)t&rtU2P1HudqT z@UmEYQaLZ6F|hhU7j(Llo`&34Kb0UuRk)I=;$%w}<6jkyEh^~}%fEC*wMi~pFh7#2^b-hpSO;Hw4F)VM}HxTl0+SiF6(_P5diz~Ke+4#mD@DF5W z|3;v&pI}FcJ7?dMqK6qd%78D?+kKO+`cNj@p2J<0wy$@-0cK?_;fmGt?CaeQU`DFT z%{K=Uj1f2Fb=OaOes9|B2CpTE#lhb(xfMKjDeFNEHvx&ULsdjulv| z++$}Zt%s^||3&vcTsQ7St-9@yNrUdnXM>c}0du#vUbVa8Oo-mc8nSnjvz2)?q{21{ zXTY3c%QN`|kz9!>ph>VZJh2b+?Nt>3NHMQJkuJyVZ7ZZ<)Faf-yWJr!W2-Ka`k^D6 z_}vMHJ<2GV!brp+FYzZ_t8 z!Enz^okygc5SJCP&&2MsyfBt2s@;&kSE%Zn;O3NQVgt$Jf=4*A)5oeap` z<*lj>*U1dLO%FkrDcS!N(Oc@2_f&_BPab_b8pKWA5K?|X2N;#GBf@!A=MV^1D6FR; zI)6ph*a$$Qq|8J;W&Y(D!gU0(n)-d6FpSXcTGT*7-SY_vN>mj2mU4nU6UnjqAop5+rpx z5omjP{h|Gta3hOl$XeCUHCcj`nxA?-KV^#Ve?dVRy@8yY=_pI*ZSgcLM0P6D}p0hcoXR=Z^vNmBzS*h$esd#T# zKn485pS--$mE3_y@1dbUeI-g;VTf-nb&Vrc76G;(y{WH=I7WlTBz0*)>7&2;|}Lb;X17eXLv4U`4+f3LV421-^g;OhXFBaclu7L zqa@=!hVDu}DW94Yzm&VvP~c;}blXnNzG76d%aZr((J^vzX}`aGZPsNY``D<96?^W{ zPJp*u$oB^8K;5-|>_=q_ZSR}QqRqRo0<{b9+U~}U&pqo<7lYYMSe`g*P5+Qyd_#O z3UpBns^jIhybA2fFqhiKtUEbl0S(fJ_@KA^ciLWpSdCJ$sn>6VjwA|R z_WaSGX1~%1*y>F=XCzgzPIHFBn;VoGq)9c+s7oHfy|CtJA7!d8Bj=Y&}^72 zj*bwf@yG{0+@bRgRNFwz&t$!Zpu}B5ToHw82xWC6mGHg3MJNjdyfss3?yItPSK`?A z<;17%U9fqL5FVA%^-zNy3f%z*2VEC$R=-I-PAj5eJ2%<6HL?A%rP0EOBzjpbn}g#Y zNPmotpYrwZNw*g<7G?h%s`ypa_Y5eKfe>nfqjZhg#fua4OM#Dx455a{FlPBaTkBGd zixA?L9BQY)UFkKkFgBER9R0i=g|Ra5sM#>6p!X=6MeuN`kY>D0Q4>BKB$y2^`XWI) zn#M!?o-`wBlG*h-^+Gx4hsDk9uTEOpX`c?iV8rGRPW-{O1;t)U>>0M)BUAfD@yP>jR1d&B*cxGqv+u9tc|cL&h$i~&k+{^k>H0m*3aYYrH`$Hu#B zF9CFEbiW?%jmbZ_i!KYkE&fM;&mj{~PF?bfg;EY+o3?R_H!JBSE7Vy>x3mNJBhdJ! z!C}5^uX(_p%31Hc(q(LGZ~3l7t~f!Wz5-UuJ*q@xEzFk~y8Gz5+#XcA8DuZ4zm%t@ zhB?V=<&x$vO-on)oVSJEoSy#tK04n^&TW#W9hlZSIFvQEtzYU`l>u$pVqr59AN?{U zSQ3ofw16}OyEBpA8(wk)<*+<$fvuo_f=izKkckk(%MNw)!+9_-w8Z89L<>IqDxkQ{ z$FVXOE5@M1nVU;GeTI zi&XAoN+3s>8KtM63Vk2(WmH1xR_gRLiTd}xkK594fBrgx+Is_`zu=Zt7>MGkl<7xN zQfK0JwRlCr4a0qumF@O7Zq&0XA5^dYTP+k7~SbA*bF$*omJ zJWlJ)7G&>s3~W_E;4FhVo_5V8i}U~SdyO|o&VvYT#s1WbTfE@5Es0Ewrw;R^qUk3?mfrP`S>!meA zy>F*s!?tm98_N!(rhIi}bcmzbn| za=+J7z1KJJB`9(f)_`_{*ED0~Vv>y~;{QHYRitdhm-fAo!xv;)c4oZ;UU|PDdU7gC zu;tCLR3N_T@Wz=}68GX3we#^>F6dtN_#uXJ9id98*!b&ak!5bYsEfbVW6+D3)Eb+z zf5MD*U+0IOjFZW+T_%2v_Ua6F$QbMj$vM4^bTg1j%SWN!I!rG!xd$u(eCRiO*eL8*31k16rQ_?J(# zT-5JcoQ=j#882Jca>lq>E^J`Uk70{lg_SO?q~gNr@lc_;yNDJ~xHUY(g1mUh+k>9; zG*FRoW6Me753%7nU2Y6|`~A8mL`Jk)Z8*cc=h5uRGErZSEVJtgO2)6P#D`$GtX7~F zwm&;SRA>PpC;vw()=O_KUo3=Y_$!3?#(jhzEfJ?a zxc&Ot*MTu&XBXL#SGi-VVX29r%rNCO>dj!2H+Z#k!TW8n$FpnC(gSu-V!f;D;QlT^ z9{LBWzsF?V=Y!(nMEjR9$1MJvJ>%#6aI{#^z`uO+(0+s*gCf(rI053?@R^-973-wB zzv}1mwYbIvzDH+ed%M|L<)eMQAzt6ZKH}tOhc-TOy%CO!dSw%WH@=FN_eoiQ+OQQJ zR93m?9?(y#UALX1O?A5|?8?SCa2X;|u<~)fa!DZM3eS96q~sX%Dpiwr_1Wz2CSx^6 z&@`51m!EzsKY0UyuDn<|!@dVY3e?}EC|I0ZVO&@~SA<6DzWa}oMKL~~9*!Y(J)~RZ ztcU4-f!N$DXcso5U1+F-)%Ruzjy!+$IP7D93Y$L--n~+@!70R(wj)G?QhFNYlGc^Y zml&!(sCb>%1e?ZnjJjc7tlv|KFDJZHbV9gA|LXS#i>=!ltQEqXmoyfeuR@pP&R~W^ zV0&F8^5zFVgz}aUt@B1=gg0ha^R0)iw|29E9&_&LQwsnMAwyPItKDh41vzHWLDl^X znj_i06A#xT9!tR}k50*rxjT~SgMjt#%M#QG>4^s$ej}tVnfF=JT=YNq zx_5ab-jd*eNq4l2xos!(l_;rH*irvh_RI|DUe zuSfD@oV8ePBZF^B8j7KZveE(GPUQlnKKl$OcdlGoILNfi{8 zS_U7}@^=AU*4|BuH%o%Ag|>8}-_P-yFsBK^ejmnVD6712u%2rEgYO``wbXKde65w^ z1p(6sR?DSUI{+@8vE+$ki@ma>mrQ_i64EtfKMmU2E-3L?XsLnKEv5_7{51Vi2*y6$ zN^^irc|*H&RgH=sVpNy4#a+jU_ETqTNDcIqs3|EP6&PX@OGAi;I)q$;X!Vpbr(elO80%|J5WpK-jeetS$%LYI*gZokpDyRE|C0K&J8ISK^O31J8+hm-tN8$hLreBRxX{ z`!*97R#G27^_9)8sVP(CqA85Y{RW(%iy>af)0X{}Bjb!>xI`lcd*^to$c^isLE3`&Etl)Z(5$)zyEqg8x78KR=sEwyuU?w$>MGyLN0+H*AZvvqT8=BTd>?v zK3A|je>nikG)QJTCGjK~Fb62N31t1@XqfavhI^eZMg4~*$k4Fz7qi?_z zYPa5(YjJx`3Vkwv=OM)7_vmj7Z{Zy^UhVE$6cG$5NNy4pPQKk z6&?D(?WMf|08Js$;i5f|cV5qF!S=RrO=yutE;_%fbRL<1j?|ge&=xd4*Hk0<7$d8> zLLIi1)Mh;;@p>8CL}a8BOgZl}u|g?|d|1rRDt_qgKQj0pgU;_GGUh@~3obpsTNX39 zUksK|zu&84h4{5BR?SqnTz}24oBMp30Jm?TfFAzq^vOo$M)xs5UGjqndDS^VETW@~ zkz0z&tsIBPx%1MIZP4zO!SQ$h5+%>cU9wF_59mV-0q^c!KfJ{)Vb;b=tT8#VN!@(0Nd72zn+Pra$Hkg=|1!rySMi_e0TkS|MPU$VTL1uy55( z5h*?CH^I?4pApW5(xCgBO;4>A%ww2ET*vRds>n;N79Z#OmUXAfF!RV&%{RudzYfvo z-ku+_u>Dly|EZnTrDO7!k=fGL`b<~=gj!7nrvw3^h zUQ5q+v$p(r^sM6etkx6`=e*N#3{B+A;>F4IxCwAopPA-f3`VV7{ovR*lhpYG~ zjMX1nLH+m34{&@4Z@ZYTv0z&AmX>7P?b?7LWdBmLNwS`Pz;E_Q>}mi&SG$izq!W4N zQsc3naWL-7NuEU3H)&!|3w4>TK+d6ZW7u`@NC!-df-=xO_1DF_6u4&6jD;AKU?&O< zk-st%eQmuy%dvYce>uyk(P(JMW!@&p(s`nMud=m7p=MWeC#J%r^r4LQ61g>Y81H_` zk`Xp1w-1skkUpt^IoYbts%}cyZ1=RAW1qe{o(F<%8i=$3OKn47e}T4rte=|X%ny@P zKNK%T(P%QqRr3BO>Jn4wD777dF@XDC_6)Ryg=Pa|bbP?if=$<0&i;!A+qK37i0$B8 zcQ^p)S?%Ax=(^o~ya;UTkB{1E!0=SC^pNB2@Oy9xL|URAP=r4`CRgN-+46P;G?~mu z_sp7Bz@`SLtj;96YUF`mG&6Y6&FA#mPU%J6nr>p+{i<&I5>((4`cQ`{9{v|r z117rj&ib1ocI`h4{viHI4j7gOKR{s|CawUD$%@G z*uCqaTjGK|P;NQT%*?73)(09`8jBTK*rl1+i20T=p2}*fLy{5^ow?|CZ7`q8KLWqY zea0oSs}EBvjEWzoc$td>h@8tLPRc{g=!<*!d=$K1q-Q`jb%`APf|U;*4N{l| zmk@OuXOAVO-%*#x0l^NtcMp1PLVAdp`A_}uqIw!hufI2v?e4WV(WI3Pr6HQHZ{M~U z9(!afi(31OA~NyT^;=}6w*LXEj)x@A57PEl0}d}baEY|(1C~P-A_skDf1i0S%`rjm zoTN2(iL1bgt~ag5G*?4YkY(gb+@8MZr0d!O+&Ysbf=-VbUAf?8@dV9Us_Bi^>)!ci zmcReaOXMj4EjngSGnjHNSNDCJPe+AY8jogo_aS44T>}+?x4vG-znxGQQzmhjbq^6u zI4Bm-C(g-b1K#vQi(Pib+KuJh;LR9NhfnzOYauVobRD>BB=N>IrzKuWL}*@Bk!{Bx zQWrBXwO9D>fR~Q3`IKepxx)W-oIN&aHix{1H&9rGa-0CHCjR78$nzXt48N%(+biT< zfdz#8uw}~y_T$jcOttz@2Ug>Mb;C7))8UHm=ru<)(H=PHZ0w+0kL+@uyM+`0DFGEzEt;gFgwIc z-7!ma*NG2X{At@CmKi||!U_tnQWH1Yil??`W~X&WHO*?1R7JTiCM7}U@_Pp$YwPRitlZrCd`+Ma_bL~wx!~I0s zKC_8wC@4Vx9|{GmIbj=Kr@H7XoRAIB!L=osveEneaz5iuA)eQJ>A~fo5a+&&)`yrg4ynrLCp=6v>JNT+?eRtm@`)1|$ z9_V;hbFu1k#d8=GLJ%+zPxq^~3wcpfaBz1+?QOR3cdypCE{o{e@D7|^Z^khtxSN-w z$oyuXe~JG2r@%N;CFxav4v}=m$fbw3@s}~aPhSU?DQdZo3HMHb3!e*FTx|vKZa_Sz z*NYcBK3yHUxaYC_oW9Gz=DQ24N*i(nNf3H>f;tuZ9)3$d9Q)a#X0Cj$g5DO|aom_O z%HX6t%44xPG(!h1{aKBMDW>Rsr5$kmxE0g>9Q(DfE(n6JWZ}V}!yle+)5l5jKRS)r z%^idlPO0DFa^cNH@=jQiYJuX^3ZBHz#W{no7Iyb0ZhdsKA9cLv{XFh_%7d1!<|QTd zLHqs8CAr?lVR*Khh^ddITBkR1JWy;3Y7S8K(|0*bva6S0On~e54j3ErB&)Bd9R_^2 z#w8ZUQ%~!@5xg=+0fFaVmk_mNBe~;F5vGEG@lgDTXn@l9oN?H_-AdFI%Tua{UGc`4(XibgBM|32DG?S|&=UUb0sm^rh` z=qgz!;PB2=lNM7bk&$xb1pKMU_4Gqq4t@e?Pb9PG?Nz>WbeR&kqoz;ms+I{;ZJ2-g zld=>oFaL|P)B{l4B7%v@KOxmvG?#%YOSQT!pFJe|)hdspdkt=SRH#tIvgz`5Fyi0k z9`WV6)QwXl$p`!d?mB{=+cV3eSRB*p)-U9g6xVU3>x2MJYOC@hb*6NKj!`Lv#2}5! z3`zf*n;(miu^>(6`wrFh9`}z9S+z_PbT|^%%*FtK>?u`yUUFYVw?eBk{y0Ad^Wnn7 zR_f?q(OdmRRi8q`WuH>u&RNd4A()aCce*u$_NWP{SLMBqwo`OtER)0HEOA|-5yelY zXR>MmIewq2ui)NgCGmESF0UhlB#I6~G2)Hv2`WRC6Ter-+r1{90@K3ks%|dih_oXw zoifwty$$r-TpfflUp=%`Y?AbXIYlu2b*CwE-uiEy(leiAcUawd5&ApUEJq+`EpUsw z1H5osvcyRp3{?$YOe=w8#C8K@UEM>jYR6PHpXj1GUom?USh|N<7*wE!0`2j7_TS`d zFF1?#n>M0@yA^+gXAz3?HBDcJ^Ma=@o}`*HTk{1mnv50cNA~!SW?8+rHU@1;bRGgm z(~Rv$ypXHx5Xl-G)BYF8XvQJbP%Xuym&B$Qbr6n)ETPSXbF?xN0jfV?9Ul!JvfRBa zpnw`@+rp>7^i>%%fou1-C7GABUa|(?#rbMY);~<_QC8tU$=2+3^p@;?4v5{DQFhzY zBh1fJWRNk6f)LvaQ<9m7I&h6H%@<_>%T(e~(gc)~K~et8&o9CX5@{Ujx2Uzde~O>t z<82-KnOCewu}K9eh{MjoQ1H!F)iMmY7<_fP1mz+x?UcdM5qm685Sq{McgCc4Gp8B3 z8q{$!`Mr@x?2zE=`70g3VqKXJNzPK_$AjN~!? zB!5gx)Wwlx0l5*}{>PmokmH~`*Je=*4}(xslx#oiV=b+Ncp9~9$g{HaacW+`9lzDE z?d|r_xP_iq_JfbOs~kKHFb`P~-5YYL*Pk%m*Kr2R5o7Qr+^liafY4j|n0nZA+p++GrAJ@|RNdFrGYV0XM>mAZ{U{h$VyM+4>vAY%k6+~Z@i$@P3(=S8y1FJ_z=vC+<4?*RnU|Ta zgqN>L>50?Nm+H*kFJm&-xz-t@ra|kgK+K;~D8_0;TJ$d#|X?4^soJQo%Fu@GNT4Z?61I4bUUd{xhas zQeNSUwW|wpt6Y~3GzUDEo{niOL78YdHMF{gLh5{++JEv+y$>fxaVT)%POUEZm~6hC zX884^b!CJ$0y-$Jx2=g!0hw<`mR9_a-C{tw)D!f2Dm7Mh(Oaom-K2pQGlaemC92DY z;x3Za=VABXfiTjtn86;f9kU3cucEI~QSCZR{%vj}zgr#PC zUzIp|N6q*}j90E#7UzpqgLh2py3@tue8(6>6{XkP{Hj~~o`(#ak(pTL6!E>ymx7NL zCl)S&0?efy-1x%IZFe?5I8{|(Kg_gT>C!g@U>;NkU|sB)xd8Ru6r5ClxJwn|Ucmp{ z9!w7CcG~Y9Y7_*DQ0rYdX$f6_zG@}->(|Pm%+B2RByc^ON$=;YFDDQAdL0U;-_vK@ zbDe);2V}o{3QA{N=?dg2)Sq(^e7Nq31nBt8a}qo6v~+fbIJ`wEXgv0PbolNa%+9(p zn2QCPY3$U0=-F^0trlljmxzv9EEM5Qs!N*Up0i-G9pyC#;pYK`y`gI}vkqvzoR9&f zRBwHe`4^mIOx+6xYG9gHVJ zDVl)5+e7=sA48C4-h$%2KEkQpnyVLafoasG3+%QR=NByAr&5GVfh9`K+R=w3B_ZHQ!A@=RCMvo)~I zwDvr^YJe;ALMRfh?!sK|Kfh;*GRz(LD-CBjkvocUQkVf&GiPRuRS_Bumph@-ZMu1& zcp!3AfgD3XcwhPp3V}tfX2Rs69_zj<{cs!$)A6s2kg&IztuQX03BIC+8-mEoy!fOcRuBZY({pO%) z`ZX8pwX}44K6;?$xPwv6$0X{EzGwcO8YfLY$gREX{gPnO zfaMcCG+gpWEE#o@fU$u+3=L)LGb8qk`*I~-%qEA7;i?js-`={@ zh7?0>SWT1Ka6+}CdJO*>wpaPz!XU-Xer-C%H*=i5b5+Oy031x_d$F;(hcJYG2kR@U z+DCIvamg&7DGBGKVt|}_3ML$g9N~d+82XSI*<-iPJ!1C5RKkaL%mIP(L1^1ftUZ28@76#0V-l_`e5m?MYVc;()ML*E zt>zDdx-M$J4+;?&ySp3N8%|Kwh92Vje{ab@apR#g{L?iv)v%k?6pt>eBCg$?M+*J@ zV%gCBb2X?kd*FvHPOrRo|1A>(_A&O3@^mMZF{AId3u7HHUDaa_cvEHai{O_Yv*5$5 z+Qv_#(bGC0eW~gvmZBrrRLkMwU-@~{ybYQEdHr9JRu}3gN)n; zBeV}csSJ4IjBx*IT<$9GBoSt87UR?@r^B6$&nHDL%fH z#f)=aU^vPU^8NbyW8(KhN<03Rnpg94b(9$Zhg+}q(Nz9m% z&v$Mr&GeVQ9fbWIz_QShAPX=~t}DdUhl|Bl(0+KkCrd)}zIWB`+grz0Z^+75$12l8 zlg|~5e+n_)E^1Y#3iNh;|DC94l`KY-NF(vd8^-j z>&bZLP*-bH&DmmbO@O=ecYg)|8q@CAGy&_PWk>7+MQMu=7vjzN+9U&1dpSbX#fXXy z?BsV{C)LEJ<1|PTI)nFe?jgCCVNgg6$1@tw0Mj4>+56jnut3fGqX?z+v+eyKa}l=H zR^P5# z@p@PSluB{W&`izmB|&u!2YQBN(-*zA`%o=js`|t@%&za)pw%KdU-n8#aOMuCkz?Jx zojoX#WoR;R0tdV6NnAna@{=VnfzkCpEDKBLCkjJtG-J@GF4GP#GA)16iU3CAKPjBa z>(r&2(dLIU4+v;6e>7QLs4eCc3uiZ#q*IHe{e5pY zm=VnfwAX$wPoWtO#c-LeT{RFpxSo! zcIPa~Qs$xSldpC=1OJ(2bWf(c7#nb{*Yv9xOW51eL?7GFrokn)kRBqQ7w_fkr=dih zN4@vF-S<8m0BAX-?M;Vfi+>YafGLkJ11H8W0-M$12D8`36~f98lElHlRkh6)`0=NG zKk<(|11w<~oaJ3+hNczRLH9u>_+nHhOH01&T!Y;DFUa?A2&`lz!gQ?0y#R+=PAeJ?)b9+)$lz7}{Ok$IEAN=0daS6UvgA9FZ0 z>f>lkb8|QstTKnGIe>XhF8X71Cb{}YmPfMuOM_1J=wm%&e^DNPoDUz=Cve#l0xq$# z?K)A=2DU^k$BDrTn3(*7u=4i7*TQ?ZJRZ%I>krQ-bjM{B%*?;fX5e6)wgp>EGlX=_ zek7g|oWcNO--im2n?R&VvgeU(}59&Iu zhss7}^ZB6VA#G$$o1z1c`g=t)R&kqvg;x(_QrlhEct@3HLvO z4l`=3*89`blfHTjv)d!h)tz0%)r}QW{OWAL2!StVKq&d)zATB8koTp6?8u zl3__W0`V6>B7y!p3uHA)IRti5XD#C(FL3PP4%mM!o?77F;Js z%*@>;8E>L$FnC^mi7MLNuig7}rt64xF_6`HQUjzXpoS8K_u@MaZM#iNzR2*%JV1Z^ zCf7dWhJf+wVtRU}CaX@aQTs02eO*N-3)d37vR%)+iQz;!H2X7ymDGARLcn7EOB#PW z7a@<;!Ed8ogvv{w?8>?RT=pjpD(UBUB?HQ2rwF9Nv7HjxwH7KpO&XC~q^m;>WqA83 zfbi>cYr}EQaD8c8#a9$Fr~S_WHQ0{ddOGEjoGUv!pvOSsrRva*1e00fCB%-UkndU8 z2!-iz4-<|Yt}2j7GGJEZF1u>6(L(*BzIn_eS3En_j$En zfD2ZCt0WY3dFH!xl6nMxlE6`aOh+IYd~K@dQsKt&D;tP=@i2hcxR9bl^Yk;J63rLFG@gI9kD1U_@%{JkBt2C)Cg$zg!pgd zc=)-k+2=A=L>u#V1d5_S7G(Z8Bpci+8R))ZWF*J+&S_V;gmrjtH4KxPx(01Iss;^T zp?!ul>00(Ebb&Kr*asENdD=G(&O-L@WCkk*=}gsW#@Ye2k}lcL5$2ZYZ)7)KvoX(^ z%@{PPI0$dLC=EH~{)u#IMkQWA>T+NW7tXqwSAS@T)A`{98ZUZD$|#|s0LK&LCcSsK zprp7J{u6ep1io(xlip-JL5=5*zL${CW`~1*r|Kcr+_Eepx?^+{#DHWMiny;AY!~m~ zQUy;mSIM+@smMr0ATjTHwSEWJ=F#EOhS5~~XuDiZbnVgU(9N%MByy{@C9Zcgn4o`{ zOBMVQ3^z3Fj-w`1)jPQgGR^Eb>-Ff?Ju)PIIHY$Z1T57GUCjOI9^{)mpOO*3t3~$w zJyGSPc@i0)#d)u5r^;jvP{IIgP=?66zR0h8il>ojnnc{Q@R7#Yn&6|ilNxzvc+2e6 zCDC2R7J8=ERFQOg5c>5} zDrWWUW5y4-sviJ>Moi5c%f+pH@R!oAB5MosVW(`cXPtrROnxQd>K9(i!JMS%rglEr z2Gi2NsfdYaEho6Qp*`itS@oL;^;=GRP;7UdPXieSItA%Q|yO!V}55%DHkTmkw z?{eisV$RApWyKx3j$g>(6orSvLELwUIgr`*67Omq+okKcK6vfgQiW#h9cVC~4Y)H5x6-IC_}zyg@F7#ck!UQp6nQ`c9}A8ikyV zjdt#-RBUtZ^Kqkwc%hp+k-(Afa+$9feu;T--)-gQy1f%sLHbm_AuAA*0l!X-O4}I< zr%o=%CM(UVYTET2GQPi8Aoo=ze>7UpJ74oa6@eZWLnP|qInU22_hQU%l49?bHfk%eAj_3ch z^IygX(~t$IL}=vxe(ahB}CC^b>3C!C=XoW#=*n@Cw7$lAgnoPg;b60 zj@n*I8Ka&>DPvX2>?QuVV|O2Q7g)^;#(ab1LNARSzo%)m8q5OF(EeqW3++0i=(US> z5a9_T2b)N%;4CIko+GhKWk@hiG0-oJ6@fW{Ia_IIf;hw#jDWL}&1M$0@U!=*Vs|V( zT@G-!n5{!PA|@(`B6u%5vv^i96|rqCqubwOLpfq%3}%s8V~vX$ zcIAXxaOR^D{suFk`%FfFp;8X3!BO84GfZZ+PZ_`KWx!omWYXDs*kp}U;sSGnm+DZL z7@F;Fx{=xtW;aIg#5$x{?90!cSqNVOtBBx)QAk;UF^1;`m-_-XKZeg~2 zmuB`woMX1t&a80}2eXuZw$?j{qO#)Mkob z>ChE_U;lfus4q+bmY!9jVDMTXrUI|Adp6>Ex>a)1T5DHOr-WbN30D8#lU4BfYTThs zH}7Sm=~u!hI_wQ2@#QvBro31J45mqpsIzRkg&In#Ss50wzM8`%eRLGO0?Wy_Vp0Y9 zA#e0v?EPbBCFG7t?qZBzGQapY2~jxX$}+<$d0OW6^4pYMc01*7rktYzVo`dP zxqXRVGFY@UU-P;8E%9gJ*z!^>Me3X+ygPhDG1oZlNd~lL4BV23;Qb{pv-RlfskNkf zK2T@J!O6ybNjGo3@yYXm+_3lBX(zxmyU>pjL`I~&q(%Z(Q=apRmtGFqf5V;;I)e{C!_t$2Yx5NPcHlWojPG(T)PAwR@Zr`!Wn+Z z1Y1>Z4}W|a^+s3rBnlJ%)vd@ML0?KNhJ>AEHDcYd3LptxtCiJGgDH>kiyA61JjB^z zNmu`+Y{&BqcNc}3hx~A0`jZrSJ8WrUpn}6YCG44Da?G%?!;MU_fH!oa03d9x5xPsFFHHPz)ezI*i~hyk9H)EyjNZ~hO?ypoye;*% zdlp=rL{l&Mc#|_~_V_d{*--u?4+|4h*6rgKJHLek=6L+K={R4lx$sZ;Z<9|rO@yDt zX9|zlMRBla=+@Rbx_^BgXoW3JlfaxnY4SkvVPSsdq-ZGA;x_cz5@N$q$P;0NIAn%~ z_X@;Vu!{E$$FlkQ`=M(3eCYLXSQ8WgUo=Kj7t>Aty#r2mp|A>pG*2ma94*KdaFYQ;(PENrdr{|qus|n0AZFR0; z-11hG`%?fKTT>;O8Z)I|yc?S@i70Sde!@_LEo=pthNG-y8m_gKaYy%7q&Gg|%zmEW zcDI{;f0iDo+nB@2X2)LJCX8MH>TAe08?~YF^>B9GLCgP-T=Rde<0j(Ccr396? z&f9FdON$%(#P&}i`^nqkcz9`uFE`YCe7-v9H%Q;bc%!`b#Q=nm5Ms} z?T(;+oNp3!=)E1@C6|ItC;2`e?)O3$U&_0fKy?zUKT?|~9JRa1mIm0vHK-;xYWETs zTG=$Q1;_6i{0mxL$K0lhL1%gUUF~innQi&wJ09iQe7qDp!=F4?3@+P0p?Lb5T?8G& z2#bTz1vYb70LpGoKLV@Fhk+9$MQMZJGpi@Cmi{iA)Qa#|z+s}#yw+4uezORf2%Zz-*H1>r53<9& zYxCYJo_?yAbTdW!h{Z$j^;_U;5d(Fcnmw7e6H>dmJK@#({gl~@cKw~5ciCj)G<>E3 zG>-My9_>})=qmHqFSY9%PTucEzuiCY`1cB6bJjTbjZ|6u z@!L#`+RUv@_=e0M`(ZM&89xW>)z->j*;a&@DmL35J7){~u+Y>(uS|lj3d@EiXzGte zNS6gAy+)5N*K0r+V(86PeE3G_)Rf#4hU7fjWb&8Hnb>O2T>cm?>W%dj8of8c#5yA& z`lk49`U^^F`=FT=(`+{kjMxKONjYkztp&G79S@^6*8i#O@Wv7I8nrf`e);QV{}V62 z*@)}jA9B;1tMtpB%7G=8pSwG~ccGN6URpYS-mrLD#tp4PHeniu+y`kCxMiVuZGIetJjikF&%*^f`-H?(6&Pug7?B`qjzG^T1 zOTEXK(>GY7@4SjmfB#GKqsniKG`6?Kdv99inRkxGEi>S)AfeWa3~96erJB{10maq4 zwg%M`Qzym|^(1qtN&-L2XTOF%xPJf1E_qO%wWi`Zz_wwBgBGQ+8(++p%Rr7xpd(?k z6B@#fGCEKWZ`kykq~;>OPuz(xzP9a?|Vot>WcbpFgFb{|A1) zJvxt{Nt_oPXpmNS0Yia%;|>Yde!1r%7;8IuTF`tCn)kSVy+?bJvu-?h5LHS13YZoW zoJ-!t-7?=^*aE@`er|N1=}Wm#h0}I|cA!dmFcf%Ohvs?km#8PLR6~Uku-Z5#Rb&vT zE{L5>TK_T$y+a`b{ijt4vLL`b#VTI>Os}<)bGY6cI9?yJ71_m4NWuF@Z|)h)HF1c! zlz8idHQKB?Pdko~S%Im-yHUC%^i$pps}Vb7O_ij}RFKDzYB62z$Tyz?aSkOiRJ zua?KpYQ?MGd4kb{_Tn>#<#Wi}Y#(2$lUzsLcvozn&cdl3bzSsc+}JI%)KzZENgJPD z*3{uR%#iOK^ZAS$7Tl--L~-(T7;Cm(#w+_^nxf&T87*?jzjx~gqK9n4!{u)EuSzlu z=uDS53l2gLLIvm;Tw#P3t?LB^38B;HEu+DDxTR6(!J%?enS4MLE-q2p$|${QHU2&& zwZcEkWTlE@Qzj@Lr0;zF0S9fWoi%5UApXXYEN6k2-aJvEJq3$#Mqg*JPUY zh#o=ppXjIs^AYzS`bXkRZSDO`Z-8*k{Xk0xO@LAu*fC;};|y=k(WIh!-U)vG{N3k8 zBHgr4cpQIHN5a*3eoTL7dSLoQs#{Q0nj?tqpZgUzoaammZm5%sDB!yK~i9# zq_lv5G@^u3ij>4aT3TZC2mvLfrAtA&WYmZO(kaq8x*0tfY`^h+&+k3w{eNeB&fOFD z6ZhVSz+_HQbBeDQBXBam-;BICq%(aIB#)k^yxgpv`=(>{=j&~u;hV@=*&17$gQSH! z+P7b4?B5et{uk6Z^CWE>IAB_|%FdvCJ7T)mGxBp1_QWHG?CNb(p zcO$}e@P>fHm!g9}I`F}-A^czmH(HPTAAR!nTOAQRf2WSa+CNy)4lunFM-M78f(SIsW4U`$v?OHl3ApH zU*))c%F9n4Z^8yi2WnMQ?x6A#OAY z;J;PdP&#q1d00T|i*p>3Xc4Q|%XkIIJ9uX_!CrGhcXNL<>FM?FRv4^vWE!ET@}59M(*4omTqoa3+J_E}H26nw2IN5yeCPfaShsbUPrwr#*uKLyPb z?1+@A2I!AJ@bRyZeX$A2Cj^AtzInslTCgxEu$TOt)VI`d?2nomLVZ&wr1#`eeE%3r zNSEZdnoi+G+LxL?70GXA`gRaCr|?d0R`}Z?%JKEVM7ekW0$ga|16ke2%34xs7VQ;| z-<_*I#Z7NWE5z<;zXlL^ZizIWk}F**3_gAD8%$DANIy#VW1?m#$A+!E0w5yGyyvsF z2buze60(W72X9Jklp$9lN72cklQ#3mqoJSjecG8T1un6tmxLlE?ZTl>N_YX2-+XGN!ravrg_?cV{ z>HX|xSy%-&M@d->FR(-z@Il)xa&F93T>pRaD0KZ@9<{fG|AH&gf>X*Hyu;M1&WKw- z%79nvCr5<0b1Xwo&F2_d?8WA)m!}r<@=zuWC#w{fP(io);{%coYnun;7HhtlXhk>A zvBMZ=US^c(xTm(z(x<>U?Hpce!w_*Iz6)YrVM7F(BGCh+;?hZZ%Vg`4Br{=^d)e)fkBU8z4OfPDu2FYIdyvaeZJ4wbsKuMY2|l=nt1rIb3fH0zcngz>8pHr_4Woc9gAq^!Or_s<)om6MrlEFQQ4*QQOGP#;y$ZNbnUjo zI+l0&uFC82SL)}unwFn<8F>sl&AJxOUhGpG`xnM*JWRiwv)u&Z1$%Vt*zn~i^I0gq zl-H8y{0hZG^e7OF$+16YVI>3?(wf$^`EcUCr=#v{iZ<*l_ScDoou(Z`2Pbk=IuKN} zLJu4LF&0)hx-nxPqK9WcHsRTaxf~ecR`R(ebj$LXi*Z8(Ydz6J)wVlXZl@GvT~?P> z+(qytfrlsx0m=Wn|*}i zaTWx9|2^MwEd57AMYe5wFWch>qbNkyKzLw9Il}r%tguW0SG^7wk(6d?9V+D$CH5t? zn~ahSOegAd0bcJ8uSSho7}Y1c;x!U=%Er=$Wi>$9sCbE-A%zHiPbTN?t(Q@4uxSNX zpSx(k^c@ZE|5M&{G1)m8Z5O#WHB5H7SR*IrcNFEeM-jcxLR8lUMaq1Xi#}$JOL;8s zsK+2ta>s-xU7u+_Tze4smrks)t;Dld4wY*ckMkW@x7dWpNx<-1QTY!Op3MrEvXguz zYq_4SJ$_w*J}N?_wHc1qV^2E1JWIQW;xSN3_U-OCoeA5V4m1Ys4C0(wBe!7(M2{6`J% zjlBvalwfrL7oRzC%TafAd4hpjamK4tGSQfwp_&q>%^?}ll_zxLe{gFBSvh`gC8~(9k2Y|4Ih z;k1m!Z&;+Zh2Q@F_B?`VjDR@Pn^HWdTMt^*u zbn#-9oXP3qR4buUn^<0EoO&^9-F|$ipF?3`iQviKh#xV~>6iC2d`py0g>>o8akn2Z zNdK}g!AXd`$rB<7I7+$?ufw-o4u48(Uo3CC$|>kVz2cQyY|hBORE?LTe%8GYTU)ZXgy5ophqKb_l^@N3AcmU!+i z1D*5bP16EUjrsQUNz(8H(%8=N2w>~B?+NTn+Z`pIUbFJJkD2u&9i_G zV?Xg5q^6V8ews9e+XNfBiCC+mpEt6TD8-9)Q{}7AFs0yV!g4sbxH8 zYA-+J{{1!#_GV`yXP-N3U&8r<7I{w}Cb$(QC;Es2+E26kcy|)pIJ2HJ`ry3vDYUI2 zh(pfj@`MRlWj5~<7;lHVUQE7r6zGeY#pgV|OZSIdo2K5K;IK90<;YwL?-#3VUSaNE zn5OdLxH`+yDAd?(s%e|YkPUo)-fkfT-ufjJHKQVtd^|111 zZhHX7zWk^0faRHEQAu_~`XIj3myRamnM4Fn<+?iDTZOh;yoaG~qinC&>Tc&71WBWv zzWw3k#$4xkPEltX*An}!Vy~O+uPk-nb`Eh3dY7v$gN)j16>pZNg(H&~-a!uJ=$Dp) z!~zh<_xxM;HKko926>&8*`kMLJ~TYRvnN;*8_O(wPY60rR?bl-Na(kS*?S>AsKx;e zeiF=VPD$`e6=_*pO6WS&sQB#(Xd33>&S0^&8&d6qKKoACXnlkRBX;_+ipL?Dnl_N1 z*jy__PNvH33w(f|qgT$8UV6D+<=Lpo^biGRkliINtXF?E_>>yZpdtGFR$J* zLy3Ins1BxPXZ()e%uGO?@I{{BvSlhj4uYmb5lPjq&jY)ZHyC5Xjlr z@L4I!h^mDa9>MC%A>&}l$%%yfTU}H+vup}CPNG4`FBg2@)Qpgl*V-cl2Jl7cu3eF8 z!XO~T5E-;pw%66Hf9rmse$Cy+l8`RtpErH?pql$j3}zZpjn(xu>OYdNSA*f_dpL74 z#96e|R2a=MRxVd_1e}LVLK@H;)q}PKOSedCpHU+G+yHMGR(ba)tPKtq6Ofg|0(s$; zTNKleCk-Scr29`eGOr$R<&|~EHhkZZ`Vpd68BCk$0)}SiRKZN#)Hd@60ytbzSQ&-g ze1^?n4#)220hy@&eJxo>@h2isUuikiZoag*iphE!t?KGGjLf)YRi?q5KPrA^0Br+l z6ls$yNP1_ev^fZ1vbsa-OtR9^>?%}aCIV3gCHY0#x zZB~PS-C&34QF3$AJ4m#2z3t0SDWgee9xc(cl}voQtQ#E$z$>$c%CkXLLkVj(i;^ejK7#nt#jSaIxJW?ED*Z>w>}E3Th}=ToRlu zlMRWOxbGg8kpz)l)W9}d{Ee$}BbH0JgKP}8aE7Fb))h3Le;8=;>jF!WSY}d?Qv%wl4L8I&8awxcxzYT=0^i?J5OlMoSG+C9AOFTz z@{sb?;OCJBP!1(#IbNY=8n6{1#KPFa9G6PZV+?!ZFT2K`Gk+hwxw8n*gLlmdu`?x$ zaB}IG5GZrzqlhX^C1m9SE~6TwftU3jvHKy%$9Ex)&#g;M@C&AFjQQaF`QL^k=Lf;) z53G+vH73?Vu}k%Z7ip1oHLx4AXwN=}#)EPx+iQ9W75z7qeC&El-1_l81suk+YpQw@ zEDzqaBGR65UB4J3Phrp8PF8z8zKb`oGR_mY_>+GnVqad=@V4i*z!tW5#EA$=Ruyy$-8yAB#$?PKX-?J2JXYN=X zWL%P?Lr(y~v`e$TMIH!{vcmN@IbmuiZ?)E}NwW_?M9ZGR{H!ZHt4K}ioWQyg8`9H` zfBub9L2dmRJY~cmL>7CbfrrPE`aI2FaJqS(aslYetM!rba{>`k^Ftl`t6tDPe0(Pa ze(*~L2KuY#@4`mMxx)ApCrCS6mH}!v=cAXOF=t%|mc4Bg8)csFay7rECjsXT+A*U* zC#ouN0RP-$_7`8ML}$9xMH4OF0Os|_9xZL;>Py~Yz8#$Psw!fEjHWHsI&j-sL3S2W z_7|Uk>u^17{`9g+zL5ut+9|0<&4f$icWC*?Xc4|$>gM(RPCv8WEiJ3mLo7!R!A`28 z?_pPHkg7C9CLOtab;RQtvj zOqg?B5$hO1Uvs)#zjxhrV8YNFvS4pbaX;tYEWZ5R(LS5WH(ubnz+r>R+-NxQ6wydu zZ;eE;P~0NJTSGX84ns-#Y*r#?#VT^HqN_eCDNQ!-RJTHqg^X06JuY@v+iR6OrW_f2 z%nnvFNxj0)z8`h|6oBjbx1O}4*G3TWqX$&%?9x)d@e6mN+Qbxl^vrP|+w<#XC(Jo? zrp^UnK=YA-M*IE2ueTh3Jo0G8-ZytaCx|Yd9n00bvMpjKxAMc`PI&23PYsemvrg)XTf9@r> zRIWEeEU>{S+#HSSOrpT$$Kif%&ieS>Cp_oE71chD)5PMMkLXRcy6hxPg*PMy!YJ&c2O1&Edz#9s9e!P8Yi7010{OUPZ$!4Qj8E+qIDd`h;-0nGh??*w<*7}jD_d#~^e zN4|YCX2*g4VMe$1qA=6o72l}g5s)p&iRD!E+)Q$obTD9onmN5)@u2gv@>WQT8o6)*&R$m!$MxVlM!!zwz;V9PIL~=gkue00#@j8;^k=w)Mu3b$-fR zwMgYG{R)l<4bXQ}D-PhC={D>Ob}gs%r-5F<`Vnh(myzHr|I<}p76CJ3;r1HU_AJ!q zVGzatm;yk%Axysi^bNx^em{?t%l4q^PJR!SD^O;pc@?J-zY<3Vk-|h?rVH^3pX^vA@_lIGn zanWT3c&I|7ntM33^dymJjj6b`S0ub0Gn<1LGZW}sggmWYN@TLCHx9T^a;93Z2zG4Y z7x&%>`Js1IdT5`{`}We_xvJEaCZWP5_v##7J)IMNx*$iS<;bhW{p(LhkvF67IA`*L zk>#(p^?#wIseSQY2}e6G+kPZ8yl@lgiLp_5bgegF&vDVfy6{Urk-4mc=xxU~v0?H0 zPdTxk_iHDS>9LpISrlNqu;4XbmSqnn#y`dy7fM=pZWb*y8^|$2sRhu?cPgmWILZYn zdg-8Gnd>zBI!%#E_9EwARa>A$7Jtzs{XZ++LV52OID&CR`S!7eWdU5G123#oprPie zFx!Ay&VrY%eY=Q!8HxfQE3^KuDGyd(q5HmXyZ`>RJgwFvT~r83g{L!KMoKLy0_>C} zaK+9bA+sd1o*{hCv1gMfIG{nnI8@W(?NM#GP44_+d+2*+qv6~qoAe=7 zKQf8N%R*a`bFfms1fD&zY;Ja$Y&LW7KfPo%fHjkfiuqUa$xEoppIDifizK=qN*)q( zp+(RV+XD|B+e8kd{tml&!MmE`d>^zAY8`oxnzZsZpfKKowKept)Cc)&IAL z(i<^1AHun{&xTaFcwlPvhE4xNb)Do@o*|Lmc3g2n$O>ho-=`?4$;YI6i|g{hp}E{d zZTAEb2b;DKi4@r&mCQLlg|ieN7{2QdS*G(pp-B2wWBKRAnQ%HwK*d|8y&=#+<3Psup2C6r7fQ@=FNuBD?1KdImx<7tnlX z1!uTmWpdg#mxeRg;MWpAUz>k4OEZg~w1i(F$e`lNdNLm-NJbC8&B&SHx=*utz(9Nb>CYTlp~3Y5>2g5 zbNF92l>x2__^LyB#iFD>Y33;I+aNNjbp9MMX303uKhptB)N&iv5TB5D=m(q>n@`*$ zOeG!b^E{SPO%z7*eoJY=ctGBa2tW`=T{=3w(>N>%ahI4`hTcyfb>Q)jApAX&sFD>e z-{yX)WCragzFoU-lXpXOMg7oyhQD$BG*!yqXw%VS=sw(6;B8KCrqTR63-olQGvy1wJ+440qfE(r-2_WyI;?4Mx7I(3d&@UR1Ao=~PLr@(N+@T?w( zazhi?b;stFkI5iwLWAq(JBfh%oj5O}*d90+ynn@#D&kWh4@jHg`#~KU^tz84%%$0> z=oE0aG*Sn5&7Eb7!|ph=SD%Kxi{uVJLTQQQS9DSqDDxv+(66=!!$5A9xHIJcRPFu4 zGIzlExB#~qq>4zEWh=k}wbFhLKX&W6NbP+WYAP|yF&uTTy;n1g7Sm(tz!rI?me;9d!Oi9YLNW%{DZE@KA*eQNdO?NKZzk@baoZFB?2Iip9QfY ztq}{)u4HjrrGdMd{tx#)CMMY7R2J3AGdK%{{)*u9eOAH*76cgrUhysc+NJ?kQVRB*<*RSHF zRC)0QPt>E5v62tj<{KeTeA%e;RPgD1xKub@HN@mxyQ9V63BK4NWX9~+iNJW^EFf7H zUa{j`=67P82{fHfArXV}LrCA6!+m=Bx7T$2KnS5#%l`ewcJwd}YG5fvn)$iMAcyg9 zGg!@!iMBpzI%&>P>e+r#RgpYy^J)#%w_4W)yT1i#vojv)Wd9ZJvI6Liab_ZZK+DMj zql)S-TEo(oWf+1i*!(0&CVd%fE9vxPx`V2WdZ&@$$mFEQfNiqu7)9<@tfs6ew$~v z2@%f>48{ITiya}Yo}x9wei!-(eG6Gi+5YA*_G{tu?td>M_L7DaLRlr=2y&|3DYHU02s7g;q|eR|XAB@Dd@vG}eZipER8?*(6J~ zK{Nsg&rV(~5Rlj9=lS~4S%P0>tmSKZe-(k$t$ejXXx9BcBB&xfyvH68AXcrTge~=0 zJGje1UE_hV*QM7G{*2355%viG(6Z!2tKaS$d5?A8$|V>N$=fQ!?L^q@q1Ta3GbS_S zm7H_N$zOSVOOYGz_c|9i_^I%CLoer%PoM0( zpZ?1}>>s&0u1o6@3Gxz!ULTITp$mkNf`CQM%c89dEy_FoYF(OYHVVs21h4946vy<5 z5&pe5kKD@5X)wgZnUVwPfVa`9r^V8bsugQA3iM3JGVq^=??bfjWYtFyn z9}|0^ToxTEJpw`yM25mn_Anyf4?IVY}QLfUj5*cqQ?5rrr16> zME?X4NK!gvlfqME{?>kWc#fAnD{8g*)KUX8B-$0wJxyPQ2;sge^LpL;dp)a_0XZHg zerMdUJdg6VyeK~tj48Pmyy5>3*!|%J?`LXPEti6v-)#0*ApW_Hsu^d*OMFQZe{#Sg zh4ys^BZthXqG99q3hF&2@Pd0ZD^rh-sfc>dM|ed-nTx zJZZwxJ89FQ?{74Z$fJ=0jKic-F03R}3$2fauw@l2SoAmVT(hxcmF9Ha%Csw;8^A~(}o!;_wrMnPEUrx>9N{}rXOkq)qNeb;Sy>D+iN03A#zcIHl_E1WahGp1^6m6i; zMG{SH8=g+2LmA{!RZOwST)1{h%B&u>&R|2KwT7JD|1Q6mQSH*7<+kQ^+GTifc+C=D zes9m+$RTMO3}y2KomDITq@>&-?iTeaorFYlZuY=Md=^{X$q5p0NA9uN%w5;Dh!t9veLS_0QH1D8 z0U^X_CY#;U2t06|QY`+KvC^hdv%Pj>;9dcOczKQ~r+$$M?Bb7=Sax=DD(`=HYzthi zD6wzybpKZ%N3Hw_F+$BM4Yg^^v>Jo2YA0Byuq)&NufTW`{Y+FlfX+6V= z1YlZF_MS8DoP2{2WxHz#2Hs-WBMYDPE*{#_XPiIX(Z4XgKFmz}ytdpbtew=3?8!$I zwU$(0u3RjKccwjBS#16 zjZHMF{J^8rOHv5)Z*8xWOj5~z4nS3{9c(C}R;P`#tl)=QMI50wwBR`=Y2j_pWLQdG zKFgIC{oiw4obTOn&~5Z4C-K7)4cpwh&vuevpv&oY@u+zeXm0JvPk>77Rmkk-2AN%? ziPR|7^3~imLaW8f+z~ZCTBnBd>Ug3(6>fa}Va?1sEM#(UYYwz;7}3=`5{XR{ZOOJN z!yB;BWoh{-(}+END?yC7sWS)z47B$mpPMn2LKvoNm@Pdpk^p-fSvV5;Jf)g-os$VE z20E4BpRw5^h|6mF;3yf>wAqo`fC4l+ge+dU-lJM-g7z=#dt1N1=rFp20zGqG#%MPx z>KI4wjG7apQ>q3xQ@#b8D&QhJdP{MRRv5U%kmHYfv679bQ6~VKDu8q3x0Xdk0&Z)b z!drl5?2@iV)L~hNsd|fz<_$=4YH1_62KQlXg_%gzy?Ia$DF%%R5|O*ytZ@qg?ecOQ zJAsFHeYIfijJBfGUli)R@P_yVMW*fr+|2GsJDzq5M6PxY2l5I>zE0bR)?aC5euck= za2x|M@Ki+iZP|g`dSwIS7T+LKHt|W7n8iaBC+X$Ii@oFE zse6JZ{}^3no%RTZ;z!&3_$Y}WvoaxzY9bLZvRo+!W*J4%wNDe*XoO-A#*am!BDU@^ zr^Cm}B>6GNJ49S1pRvIW_(k(wzc8^r@z;Y2I7wMOgS0m{Io@|#0LQNjFkR5eYQEdq zkjDw+cj{MD?lDJR3yxwIL5>(d8 zaM6w~%XH?!zMAj}|1LW6cAM~zlmvAnk4xogH-6cEeG}&fh@2@nrkBGaZrIw%RBG7(eVKN2rDoN;6K_j+ z?d<#lybMJW!PqW*HbBmhjWmerN@yTFLF)e0JkN_1#cB6i@v?rvue;KQcfLOw(@gxCoCtd=FUOYTts`c!QiquZ%-%9efZj68fGiKVPSH9xk?Y zEw%c0nSmDRH%D{X_uwJ}A>$weeYZ-&c9aVcP}!i|tDT8%6T?;?cN5K4hF@6bnm~jh z#!1FM-4zRo7o=+J^am{IPP};RtTz1h8_p|@1 z23RpuF%n;{nGTML*F1ujo?ODrh9frPVK7*=-DnO1JFGiWYB@lhRn}Xu+_;Ws z!EdkPB4d8*Ni{!`vun+>v0HK}8;m&IfFHzb&)O=-vQhK~G2|WJU`8@iyR`!TwSA4) zG@oCvi)dB&N{pC(VUm1qNA>RR1}(i!Ea5y?f{wd`WS`$EDNA@JH$LP(+zEeZW87&- zCpF2YD!^aH$w0Tv^|>+H?gEVbS0uW;^b!+~@$&ZxM5VjUE}Bi0{=6W+p4ubs1nsA^ z73Y|;7iSp1Q)dR{a^XQ}ktqU(o$2Csog>+@U6JfTOiS41yRCNLt9e1f4r4b5gSeqz zXMa=7WFyxg9SF72{a6+PjWr`mylR`-)meDa9%GNJ>-3QADG#62?0!0jly!a5%pKwV zRc9nwG}b)M{wa1zUd`N}=>>+JI!CE>A|nrsD&{(@m+wP` zsg*!ugk*@)IZ&r|X zL0Y#~_uL-qRGpqWMOf7x6pjjNlm(LeRfrD`0={eC<<~o&lDwrt;zHk-{M3*)%a~m6 z`Dc``+cU6NLac4ISXKKIi}Xhg_Rvok*as<^<>F>1*Oe@HHY3>I#e}vEQ{mVp-yj%0 zapZm}>+y1q3-6f*jNRw@YzG2UG{6?=-2&SJo)Lj}pWx^s7(X-0Y>+t*cUoOmkczYh z3GT}Tv-peu@z|QN#gDi4?g=R0 z`8BGM&@iW-UG9@Yz)sOmcSrLB?q!nG*eU854L~TW5H@=)0wn+w;SS+ZBLc^Yd3*`M zwt+_XFk{&Q*d*V3rbt?l$VsT3k^42{keH%i%{0adXN7Hy3~sD?(V>5*!8DR;pCBd1 z{Zj>7~$xq z1n@_eAGShD##>}ZBCLudCB=8o1#$GyPWGN%J%k~KxTiX!xvepFRR2yp5Rty;yEa%M zcR%FGSuhm@VCQuOZCqPKtQ-x$VY7%5IJ(kf1%xVA5#l{%$z#UFQzY)+vw%Gkr+0L| zgh`y2*VWi7F59v|T+Epm)y0t5H-*DL&!6gSKV#qAt1?0UoBWD=o>D1Jg`8X`=UEDC zrC%J~8{jnYVe;r!Nnyt_Ke8(f`tS9pQ$sLzw(bFAozn{p7~dX zbir%a5$Bu2Wg5BiET?*~xt;&=ve*3I>M`@lvXc=i0`?Yjj+)B7I!_kNNKEWldDPJr73h*a_4+h_6UC$9KfiMq9 zbRz^4r?+enDbQZ$*Q=A!TmLc$br(n2-ddrSPtMz$3&|e$iQfHjXG&Xp71qP*7fKf$ z>hj-+taBL;!yI0zRN2=m`vP@r9-ql|>H%^i)k1PDs#d5D!@wzmJbXyL5wi>5wc+WJ z_+0XfT3PskEcZNmdWvDeudBfQ_QsVr)5G_oM5$9zki7OQRXkRg? zq-@rY2v;9PQgb|B&$2ZSz&Y*Il*GpdJr5C#xwR?&cdFDDx_edfRRA-Vv5+9{EVmM7 zOHUcgLAEZ8LcqJ=S6jJM7`Wn1WOX3w!V=dA`s?gu?z=7ntg4U;qGYWjgQFX0Q7o~X zGpXo(#BV|_JxxTA-58lhwU?#2L7U{uQigG64^HS~t>o4#3M2lMD_2|h-3~`}v%yrr zKTm)P8N3t5Ckft5p_CC2~n~i0?3Prt302Q>2ia<2D%1sVNN&2#NYl&aJajkyzWr4mwd`q zEphW%FrGF2x(Bqy`+&5n?fT;l*HMXHafF8JQyh+&Ix59a^@@s(?9}Strzt8`HYzv* zNUuXn$==Zl^T|-pJ)dVrd?hvr-vT~cV8ZctMq~aeM3!Mv`@z&b#sbSHUrU zXOC3fYB!bj&-;t7k4vMvO-#v30=_N=KPW~C2r$0D6LG{P*~fl&atK+de>T9ixX_GQ z?Cmp$oNIlF{tfM0^n4oDzB zh&$8EF93#swHSW3kqiW0O#!SzA(6wLGaXn`D#i^Jdv)4=0>YNU7oIES;4)PZd))4a zFaUIw-XZ9?f~PeIz{5E91HkiSH3n&MoL22xu*9dP*SVuPIG0tVn1da8_*j2*>@0a* z8b#QCd&Q=deXk&k;7}+L!19f)w9TH=WqXT@@dHIn<`G)W!{F26enPV*_&6}_kN425q!%Slp+Pd|%Nn)~8~TtUZ_mVM^97d%na$w!C7WYeTyde%!Vuq6 z+a3#rX#`qfaDE`j`*KgpuN(ekE_h?s+-DqHE+nadg5Qg8UxRG9{PTG4 zF2tNh_fKSR)N;I=4`f&R7mNCBvjbwxIzt{SBr@Y1qBXJ<*$BYaJ6WZs*M0t3H}*-c zqv|&OMRbqiA(}s5ut0|$g81uyvY50u*hxVbXTJIRuVJ6e?O1l+cTw$q9VXl<_d2(Z zf9HfoAFaR5DSNm)qUJTH6A1ptMqp17eC7d=rn`BHujJd}@$=ft=^&yw&UDs5&4u4p z?B>uK{4sMb>F)#-Nx-X;Y5m&FXtId^y?}2Hh#%6f-%^Axk4oM^D8BjRvFMoe=a~xtL^KTSe&Gm`lHhj(9 zHAtX&t0cOiS^8(8zOUI8Lc^d%W|d|?d`aed?)bMrQnpgOUL+I`B+JY{fi0glhUNC+ zCgPse;r!hSMqFJew;I}|nyPj`~Cir2|d0={4?%%TY zqTlZzB07U_ulRL#%zM<``!CMR?AsRR-~1t~*hPrFhwmuhkfI5KDDb%E2fwj}wvj{W z1AhdRMw;FvJWm0ImY6Ly{L}Y+b;Q+R)?{sP9P@i<@RhTc4dm|oHr0>cHKa{cI&lS* zuFb=}-i^y^or|-Y+_B~}*Ps`FZ^Iwq>i-^3Eol>m^0PUlpOn7NPA;mYGw81>xbkaT z*xOO9N;3@iXG<==DwQeFKaS$zOJ9FRvgDO$i{p6-q(^e=Q8z8=c%6B!DnoPzUKgJr zd{|`zmIi-y>a_%#0ePB>_51f;B(aVfrm1H0n~Rj`qgofuRp}Qep!+UvRbA72sg=zY zyCtlAEqY7*ey{YF1_zNdcW0)jr;0N%!(5Q0q(FaMKDSp-h3~b9=;+a4hdz&A#wFwn z@8pi}JDz71Ck6Q2hF$^Yjax_99W}X=%$OUwL^OFxoyAG9g8eB<#V{NqoSj8Qo5Vd! zel?qdq$8fM?es5FJ--lxNvg`qO0`pfdKshBllnF$uN+f!b`CuKmb|@7HE#wuSu#c& zCel(ha*E?W8|e2A66hS9d08t~M+s*j-x`-xW*uSK7@Ry%8*2)e83AqLX1;%hn=0&Hjg?5o3O#}#-sxV<>5PDB%P-)8S z(g=^J_Bmb^wTlb1t#35)8vp6*Sw^1Usn=}C=bwL%*e}c50+Z?5#(aP-RJ<;%wt$6N zo{X!>Q*j$Yd=~W^&q~cn^(pDhxq0hhr^x0N&mWZV14$93#|Y;nA>=nA}!P4G)tQ*Z1$kBt+6Oo$b^B2h-d)P zFPx|NLr-E>b7^fA|LtZH@`YmxBeugumPlonRc~B4o2>Wewchw%^m^T>LbOEx1-0xy zgL)SBUyHT(x2dcVvPuoxoi_2iQHSTYP^r6DY6)56`1m?OuZEP7;upTTDjaoj5Y4zv z%pO49E(AW?eiQYPS4NzYTljY@i&R9*VY9#;CsA|1P!mS*EBg0t!I^}}ebWO(hr;TLobdIx4_SbYlZO&A0OSPc5T{7 zbweFA^zKD_CwT__gGh+Th_yI#o=gJbRqijYEpWLx%|nEQ$fVx=|6TwP7FPCuT78{5 ztgpy%w$%=yrz6$aK{uZaUL4T=5SBh*jEgCiM19)ncRRa_{Wz-H@!rk%lu|c)bY7Bt z0MgB8ucG02B9`T$g(*D2GO_!P`)WWVg4sT8zAmrNZWBKg@HB zue@P}7ox%N%H3?x(pM0Q+_uz*Ua(aGPAbzEt{S*=A-$pCE8iKy+PAJvjDfsHeh%IY z#BF!NPm>#&z)~Ez4lj1Pzupfi)XR`^HTOB`=e1(#-n-3*ye+zjs$zR5EB7w&#tXY3 z>5lxLe3^QXeI<2cC^fzwS`VE0zD4nK$wf5Ewgs1xfir&e);`dZKe{(rCOoC9kxcY;YaAhqYt8*SNg6J)NDhP z0XN6J@S;o?(&g)^hR!H@fmN>;#(shMgAK~g_q8O8d}n`ss;Bt^u(dZ2JfCFx?)y%9 z>R$Gl$?w~mUH}<+uyob$=>`^Ad$P!DI=B4`YK8F*j|cyyIA;pwLLux`iEdP|XC$JU zvG5f zFH^QX7VsAEt1GRcvnJc(HQT;YdtL*f!j3(6S(@i8clyjD|9@=>Glk8+(`DZSCaG^^ zvsGrtDXe#|dKJ;`HwR$U{Bm4;!B`mBi$ljbtVquL`l1K#Qq9@WKX~CvjN=y7jzRfo zv!TA{{SNPyA>Z}2KK&^Y_*kJ0#;~lN4Eo3^_wl~8hHsvtr<%5je_+G%*aBK)T24Ir z%whRz1hnd_ulPvTi{fF)F0`}wbl%)V_@L+RJ&A2lg$+^}X*A}^=y8Ay+ix~R*61FL z>hOv^5xQmsA2Y&BigQS@HyFq?J$~3UPYK>^VN=$w`-k@zB&vb5^L59#Sp^Y$j-lk2 z2<=@BP*gNkbD~=wWlDYMOcgVZ+iZyW5%B<5drGGUJ;WAsSjN#Akf9I@GX$TmC+2f z&7hCDF-OVX`!HPaEy?9Uvh(kXsLB)ay*tit7xl3_Ylkq3V|+WNBgC`Tl%ss*h{yej z=+DM}hS3_F$jMt%rSfh^KO z)B4EyO~v{AywnXzB9VccS2_K7HnB=>j5j5^2pYM6=Lcm<5TRG`cB4fl_F-&n z{6c@@2jQ7jfzv> z@A@n3yx9Dda^Faz2j-h4@9&)@c|o0pQ{b&$bflDTX|?#dLQrNy8>%for`5rswEI-l zsmG8UU_{+-#eJhIMPt$Ezu}J4?s`jExlaOhiHv5J{zL2q-P7A|azuDHV_$HEMKW zM#E?j7z5d;Z@lmK{=eVzocr17>pJI7HzWnAAJJ@fjuY-orz+}i0HAAa*db%M7iA9Y zm>j2(=B!I>;c|YmNil7@HEYT7yR;?ZN;KIIv%hoohwcc^syAq%zxPk*bZTMKyzL&HSpKtLU$)>-4-T`c>EHb|^(gP*hTQz!F$_g!iyn z7QS;ATTdSAo&9PxlM9ylio4@=7I`YK;@<;Z(B=KHiV+4|^j}=aS-9R)^auzONXVtB zgdkeki2@*RN-Uci^Nr(4-n`29Yn(b_vGl+6m^TlgL;l;P&s*$*UxoJZdlH5~!2xqq z)*<`{G)t~eZpjx=j>ZPOVZwwvBDbq4WI65Dh7dZBt)6HuAHVhmFK}acV>agJp5GIA z`#}GnMk+wbe@&3+JU{^6F>7$lcp&zK8rMeUtI2=5x=4sW;>||M>(k)>!PmK9WJ>jpS*M+VaRi0 zmtX3!M>}nP&&{+NTRU1h4N(rN#u>EW_3WVhKA9TE3sKAB9d9DgUM!9mQO`|WqvAa? zl&@4mN+i>+=dLdv$~ALYUxo@Y{S49wArG~TUD~_HEJ)8tFQ5Qmxcrn~=91_9f>4W* zrx?KNjy{mM6?QT+(Su5=x5{7l=9uYgZ*Z7u4Jn+te66Jojz-)K{;8(OQt6}2Gm`+5 zb=*p(Oe~>v0q>yw`bIOFw!eYCnrtPN@$p=`l^17v^K8OmUYZa#U@IOfuVsqeOQ*=Q zZ`?yX*!B1l2{PZIH1+hCstf1dJWzcA51WK_-G$8!iUMy^=bgG`-N1 zl-GK9yMA2~IAG(iV{maxf;WUW(wRBINhh#nQz_*_(+ByUlhl8p-O*$+t8K@xs=Wk% zKQTwG&Ly?UwjniE^LNQz%Huf$vmNEpb*%D~MuKnNWjny2Fi)c@@s89F2k%wJLq#1& zY^APH4ewz1uu`D-@Cl5r59RMhHa|D{#Ac)Yr7X~ess#H99_1#*6BMmM)gG{uitGy@}|9 zl&^ZHMvW6{#4Tujg{^;kU#KKU>K@f?WO}U(P}-(uyQ`v}d=q02f~ICp@iA0B3OV@p zxw)kvjUuubYeZ3;56r~_OuFc@4z{BYYl&Ld!J)GxgXqI zW|axQ-9tG;ibbfH@V{Hw(5uw>erl+2IxYfMTZ`lxb_j003jSRPpP%=hy}+IL{%o%Z z>Mv9Zv(Q}-3tCjIkMgVQ zJ)c{Q=`cfcFiQV?k*|iYDs}K&B0F*XwkKgRu%jmY+hl-8Z*-H!58|V^UmTB< zCrFQCM?@_~FG$o2dl2~}Qk)1?i&!0-_*ymQuxtl+Zrnj}Mxc$5#gcX40-s)D7%5hn zpW#PG_?zb3!1Y-&p{H?DJ@>oYDg9hDNL-s`bW_nfq#F0$z(zlP9F&__i^`Cm*|A#( z;-u)C2W{Xk9`j3;Y6!qP(N=tbRG56*ips@0`l@)539*^p+B4x-IDb*c^&sX+ht_eL z&e;T=AEnFld`-ybZ)vSxcQweQYkpGBy5@=DplnU?b||(hGNd1dLBuN8!4g%b4@32@ zzF?sUa95okWCTygq2f`TXE&w$^y`mpVbpAvx~)T&ML)E;CjSBC-ezHm|GZ2~@-kUI zC}7S+`fqg=%Tt-_mUWC1y!ku+y5GBe=^O4Y+O7J`_xIZE6_#C5pd0XPt;0OZmCuAup!@gp~74o%4Z97HIYRP=|*XX~@72bR=;Upk+Tggy&432q%{FJ_?TwrlrX+k(`+d0^HT z`WxUqJCaF#Hed6Rx7@-dt7msJ40hX1986K&PZw3QaK4+L?7CbM$BqCW?r3=9J9Jr6 zSX?J|K25$9f^DbNZH|%aFl$S{W=00|E~Ro-0ebfmQizs19&P9O8ss$)5g3w|t+ji}8?I-boBu3AMpn2a)zQ6iBm8>8eHMIOj`S?fp8Cq4JVNYl6Et+@cY z12*N*Den3)ejejr*>+f2ZR0k5*T#JIXpZS3S?@|UO)(gQjWp(f!Xlk@I|d%VG%l(4 zM2qF^%MvN7O~n>D@eC|`mV*5Em`9Cy{j)dU$SeRcvEJ)`?gKIvYD{fK#-G490wvv4 zYSE_%6`|-mZ)5)O=46q4>BabJOM9OMtI5T1WLQgE!|lxJLZ%o}Pq;Q~)C6KyT}|Bv zbY}B{JTanm-nSP(AJa$yMe3Md-828@NE30XF*i>yo(;9=^g@l2!;2+Srr)P(kQ{^lD$A!6x}<%eWYJiQ+~dk!Qw|>R6FC_vYTsspTDoqp+r_t$yvfsbddh^7``H z!Cq0ZkhK574cDbYDKc3#$|pQ)Wp5eRsd*$~)@HvNVVW>K_o0n9g~+kGKodvG8cqm1M2|t!)!$m$ zf*$i)J+cZA*QV0g2}o-TcRNmaQyj$7m!OeY6Ew}9W<{@3=_74T53A9UImiW5U-i=+ z0=AS>$Tpt>vde~Y*-ip-O(93rIChowGg~Q~4~KK1a|WU2FRa?|Yh7xfZjqZ<}=;H4(4Hda&s>(J&Vo(sEMKfAH7Qs+|)Auv26elU`rm~pI z$&JaR>fd^MSWl}GRG5zqw~P_L_v7Rq%Yz!#1YrPSle19A>}#Jb8%{MB2YLv5Q3mD_ z>2V|Jjoj1VUO!|j`GjtjuX`6Y(8Xg z_#STmxQP!>9D4gS8}#0oEshxdI4G1Htg?n0{WYE-FrH%Pqq-5vL}^~EBoAuH2V?T# z%=aB`k4q)gs_CuiJvFcX;e|Wcr2bu;`S1664)jK8e9UrCq}&v5l)B$3^e;pKj+B}K zWSM*V$Zqb`3q74FmMUU74;DgGB`U$I6j{7zd9YsbGMG3ZYl~W-U16u!Rdw5Jo?FRa zH3bXCrVw=-PU*5$OEhupFDFAazA8hxSuGYobl1JKH1@Scwy8)3vyZDblAod1AkF{M zUm2gTw3l$j8S0Eox$H4;jTnwsz5Wg{RNPocFnqwclN<=nu&k=i;I6aPPfb%ZuQb-yXY_&IX7CvxARC{ z_}PD%COYJoe4847KdH09@s;W|rcsXD#N=Cl@@2ZB+7Yi{;{H)3?_}co@)7=+F;~aI zwHK7_qMGHMKg8^l5H_S+izyP61^f8c-hL>LRRLjM+jaHZ{L@fLBi90p^=I|!8MZyU z1=#QhyZUp~0KKxwkd#Q+&DPeS+J`94-Hl^q!OjU>3}{O^6g97rX?N7rtL>%p)9o8@ zW=!zigq9p3L$kG{vWUw)Dn#5Wo|~Oh`3!>Z6B=MY_e}33$wrWkiO&#F*0vp znGMY~6-@3Z41AdTLD`&7p++2Fk#BR3>vqLcf;dw;^)w<|8h z9C)(h86?rjKe}a@JvK3(K6{0lzFNblY$^?tbf{ZzHgsL=XyMqJz~UeQM+HaD!&7f# zTygxe<25wqm=!_Rb(NwOv%bT#1{}`Okf$${;!qeJ57+mMT|VAfS!q`yWtMX1!-BA|85FUzzTW^y@ah*ubxpu}DtOf)2kkk>9AG@zD#=bDr(fVrWub za3kQOc`UB4JSV0Q$3H*rWk$Er8U`%kKOW8y#fm9*b+u%Vo8o0K9h z=d8o@=SU*h3B!>MdXNp$M%KN38Kl8&YH9dkTjWijBCCnP57AXk?wIW_E%vHD@#{NC z2L5J^lT(CQ(CJIK8GRE|x*^p|2jFk-ExJfg*L&XS{l!6xuW9G6D1WoqEm21{a9Evx zp6H(VGogXRMHUb#Jw=y4sTsE|?OoGglFp-xJ3ctG|zONPGehQtnF3GAwt#J1*wn9$ka`l>z&+}51e z*K~cK2&Qc~-y2RmXn;`r(PB5=ubF_J?yF&3X_|Vc_7yV-D5T3Fv5uEHu!Uk-zK{6N zn~BwteRUC%cQRAfMEngN6ZsrollC?IAqys^J^hC#T3P7XZy7R}pP~T&WQD+jt5{%U zQ1J6HdNStARy7QwWU%+%-;YRs+9H#hyOMF73mTekDg_w5W1fzJYiEQvnBR1@AR8ja z=SXWC>dJZe32Q6Re=qc6%6tl!VhMzfv;k6`bvHsH^uydn6!M7yn=aac6Tp40n$^Nm zW0<&ScYHE*^o=Sm5&TFb2iGy)Fv@FUp5JoUmj)ks3%^L=QKE$Lem>0qdoO#aen?J} zNXw&eii|Uh2q4A_Gi=q7wvf}5@J5nC3z9(pgrBWBTK9?aE84``%fk-tHIX>1{l4MQI#M3acJuPd zM7eR1Lu}=R*?EXI_@IqR@e_sb&MC!xf)v|Co4jLv|%# z0dpA#@79vUi*Q57R$9ffSUFxgBa-|>kp=3qjb89B~9<)pi;2Cr*C%{fSbs2%zbGOcO` z8bcgLv*LvjsOSU(()TOu47d|vi<7qBh_lV=-H!~L#H}A;(r@|c!;~V?!INL&9d0HP z6{|6=$kPjC?@buC8)qA(_-m}(HL7$S_dtt4eg0goJ?ltIvr3r%WNvZM%K7qxFz$ZhQRXoj)W44J*_p$kcRxa2ldosJAvMR zd>z8pxcbpGjS;@v4o_v*tvWe{%u1imlIi%8xid))RSu@C+QWV=B`bkA&3XqJ8us`K zqg>cX8Z;Rmx$GVCWJS*)5_Sursyq(i841E%tBKqhZfp4wb6_S+Vn zq9U$&`K8sdCYVtl5U}G1GXL&splU zJ1bVk`CCv#4R5(NY3ru%Rcq`wt6snNPRi_RgLIGSg4#V)L;d((;OxRZ@{8UOUU5I{ z@~pu!U85khhT*4KtCQ9iREv*WUD8_q5be;#YrJ<4Ss`91t!x@D3O8OcTr^fW>t-vJ*=k2Sv`y0dh(C>^XpT~=h?Xz$#Mp`N-m&W= zNRBYyqU)XL`r4Cg*rL%z{sz==thFZidOpOh!X%m86)}3sQ*alOTQ3@3k0T1}pnwiO zX{i|YsF?8w7 z?CP}*-AM*P4UE6-dBXFXi?zd{r*%z`m++nPSCa22!hDZWhE*;rl-#jo{^Sje@ zC1==m2E%UHiwSy}yHZ0NW&ZsS!&@Xl=%h-h8ce|Cj0tewLR1h=()W_r2}j{zPx?o! zIsC8WrRixqy}k45zJY|kIPYHY$=2#?x`&~*myp9G5qH4!k6Dq7fc!gHq7S^%wJAL} zYL0DH&wtEV<;=Q&WX^A7VH@gL?*)$!i4*4@IySSc|8fFMW0<}EwkCI<&b>{`9ahFZ z3B`5w*x82oYQjabY=y*H60y3a;9Ny$sI z<)mo9smEaQ!@Vr(*|1@pji==Y5U~#+rGG#$cO$UNY_u@T7w>Xts7m6%hDJ>n^LkHTRqI))-3tM!psxaPAwGIpMQV<*lAFZqz@Bv{P8E>hrlQ zY!KqD=izMHjEKUQcWvZ&8rlu_VLwSGr(SGDRm5`1&G&b28R#gBj5QNrLGV721dD$S zUz#Q^PjDGYEcrq1ctS^Qg(mvc6#Iid!~W!?zFkjAaD*Y{TA@GRgQ}a;N9U&?dViW) zK*(D#iSYFE*_Mm6mGBsnZ^{YvJo$mxykE;Q-`9?`R<&ej!}=XOev3HvPQTsGIq_dS zdcG(M$yCD}NB|C+$wP!|^tsz2{g`rTF%=#0VA*<`5N=ypGAjw`dY z+hG6^G8QrxFc#dW=9}++Rww#IeEsw@GAWu!!VXg%?i4#IEUYZb4_#I9RfPB~lbcH5 z_OCAY%_$C(35Y2bQyHxC>oN8f%BR3~6@_)9e!GnajBiS$F)RKp(v;HarP4VvMxKbcRe{Occu2oE|If ziqRS*Gq5cxLNYsKW{{13*7zXA+ z+`@I$^sso@z5i;I?fmgZAzHD^aL_j7Wt?(Vccgcu=q!dN(6E|az2Rw26K7rYZd`^B z3{U&F#E%YFWiMhmIXqpHxM~yZxBt&~pUi#Kc5U(MViD}k5L2?>i0ZVb{WJb)+22 zdP^KNn#U$fu=xns+c*`IW3Aa<#j0ZIxOjJ(92l(#9qz$WsPATIfpGnVW%qOUHC#nJ zkSGVotYF7IkI-a6$YNrnOPfEa?ZRP$wgrU`Bx_H*-yrt*%hfEGVhFBlDW=poHj2FO zA%~2)zzWoJVcwA&O8~kKh>Rh+y%|^iCMT7llmIAsLO5;97-CKN{b@vkc>cyGliVo} zWlS%}?`=El+?IT%%GXto1{3S+@^fpSAtYIQG{g&|1V2W#O|@Jeb1z=ZFaAc+%91YC z3e6p4(2#Z6M%iYr8T8Iyoh@En_VsAX!@bw|!5$5-@Aizfil=FP1XJZt$QgE zg994R?S~KY6x*K^`%YGsZF~i^3uz?lV<3U>VW87mYkIkrb!q+G zvK}YBpBKBq6jZJJtmgsv!R7AorQKK>dGKjiJTCDtXq;*zX+$z);ZJ4su6~-JyN@VA zcw5K4>04K5@TEB_4<;>3pLF-{C-mdQJ-+?*t5Cnw&@|aI%fn^Dpl|{-7D=Ki75-+W zI@W7`$E0@43;-Imls!s~r}EiU8mIXdG2bO&y`pxZ_o~;R()Zf1(1al2uF*o}tECip zsna)~)HBu;(|1)`I9(WwZ9@o;>zll_NSMD7`R*O6M>j&~qkY7Z3d*+`bqN|N`+*`&PeqvN`3gPQ_v)YD6-U-)gmbS0y`zMf??x1(?~t$~zI33% zI9coJkCk{1m93AAm@gsG+WR)p*ed36iOoQ0Ra8%?&gFdOLS3IBVMZEdzN%oC z=0iCSNYaIP8z)BJ_~XkQvq*9p-f|iqKkRpT)Zw)5;d}?B@p{3Uy<`2#u;tir+?AK+$<`W7X+V2?71Dy7QV^2aPS4V zpz--ekb)~k}rHt zs3&J`~L6-oB@Y4VA)#u^iQR75^rJnHU?q#scb3tK~c^MTB6 zgk6NyS@$2zziVATtCui{2=k5&$r7?Sx@-l?KDqeN8+|by{U+_E(DY$%d>1=C8J)Zd zc9r`zY(Qlmv)H>!EX3`!1o%XMR?icO0_mbYU{qHHH?q#^v(hrH&}}bg?xGJmlpi&z z49?$U6#&P*he4^wWOb8!B<$9Ua`;EYO=w@FU(~mp*w`{ zD3`UqF(xh{tj%wl&B4&~cmXlB~z4$A1XX4M|*=x+8swATB_w=(h%666D@ zTQ^7_jHi$Id0*CaUDVTr<5NyHTZh-prlo2G+nd{KROH;iJATK*FMCP&9yPre-dG_` z7$&_Gl{*q0r-}R(3a~q*RbUy{uIK_cV{p7q4JnSb!>iE0<;RhKVF}gAr*yO3K(y51 z^W$irU9<4wCSdF57tJ0k9aM8MP%0vM%#woqSFKeVkktDRe_qxj=yit^6LD!BeI#8E zX5_cz5<7&=q7J*g-y+Fn%zrke|3ghRpP+~SQg@4!OWg9JDDO%!r^I;Ou$>wYrk;`} zP|NxXoT#OpHq!6?WAl%2-kbsNf!YRAozFH)baKRk6I=2jc6uiQVkN)q26WWJ|z(Y7TN#_r1M6p8Q^T9660kN%;Mkl^ei>o-Y?kwM`bNx=TF# z$}=$jfW>cm7Xzpc-B$R~>5w5BL$2RtjP^&LSo)n<7Dg+0FgO)0#SexcwnoDDm~cye-;oMBE;~lz!uzbge&9iq6`BcROG1aAGR+3C#Ai zS*q7-KElG3(N_4GUpnE85l7Ctx-3+cOHl606RtxT=@9(naE61GU*gd_Z=)Ea^n2~@ zLGC$^xx^o_d3y*nG2K`=Ul#|bEt_7hnf^Vl=!Bgl($m0fD%}iHWcPH&?ulC_lFlPv zVXlMqxaE-H6*0RhRi5_g+n_SFb=)ajr@9O|F48wzFLNT_Q<$sN~r z#`|^#&{-p>Lad>KUt~j&QwZ#rjby^n(oI1^1NUeGdiHe}Of2J3_&=AA6qci<)xguc5Dx4ahkS$wUijj6?DLI?Bl@(c{OnWd~ zHSL}~c}XZGE>Q3b6jtk&d+Hg!hm?^_&vc|X17)(4EBp`|QUqVjgLM5Hea4j|JW2-~ zE10(IPK8+MQfheLB)CJ#n+MVWB)EO!9O&oZvt!7eHNa3t-}QDc{)qR{;W#PE;H=`A z-@3BTELm0m*)(U;FU(}<;q;Z3jG>)Ftjc2K{({05hf(yM^0(!H1DJR;#S90mzwUB8 zy$btGXHWl%Yo|PMHl_8E#m!`nzh~o?KvOSDi+DwiaI|&bC7}Hx=hczwwAiczt4UA zekOR?`$*4kbJKxUdaM5djg9DD;Sik> zD%z}f4Mr<#vt$d`?Pgt7KkHN#_U#U0^c#ZDo$G`)PwX_`cVFi@N|02Yn|>u0+u3XxGfeLa4+5ldEml}!s$e(X>5hD?tPuXuKTpNT5l$@j zvsY>+J$UnpmT`Ldv-f%Ft=p-^>2;^AEWTrf5>idpgZ~hc2?vSF`1Z6vGPK!p*hG4k zck*9}y|4k&0xmP?)^{Guwv2D-IaaA39zA@jJR|N>DG1^a>I86nc7)nSV1ovOND|<= zqXzgPgNIvk&S*fI-9#_c7}IbUC@Zk3IkKE~^E{JyF(ErnnGKfnI6PhW9%~&fi=G#a z^L{iokCRf)Y?N;GaEj1K0Iw1nhd&$=BEsq-D5SfA6CkM*pto)U?LBhfN9O@)@c~}S zj}c0gH;sUH+Q)rN<^m#xDc~g|#&4DK;m!UiM<$8kdnoW(fiY@&&6ruXvSe!FoPk(O z)B#VbEdn|WtH3C~dvxNvX5ee_(9lFJM_AHCl;x}_Bbebo4S>cD>;-u_m$%v}AwCk( zfA1UYTn71*d>yV%H3EGH?W+5R)37jL6GNzm$w*xS8`vQ8=QROuyf??YZZ)pRhkFXN zZZ0KLJhzA$oQ|m~rpg=fQ^l(qEhPQp+iX1H&OKE2Q}{lj%B^wED0I>9(aO8|sDpG^ zAyRR6hlqm(PClhM+xv;zC)}3Z=P_LFg1=A>rEmUg`vxz*e)j!k35CyS=l~FPz?6kI z4JVUaEzg3+@&I2%AKvH$x(}?gG&_AzgFV6|V7cuzV)L~p#*=+8p11R7xsM}XN~el@ z;9tmD)NoIfQG4N2Zp^PnH*^P6ts+wnEWCU9fWg3tr1~H8Yu=)ce##Q2jgUPi(WMt3 zKA|}#L%e6zOA{<^XlG9qYt$$hGOEAgwz8K9uI*| z2iAu#jR=_7BdLSn%@GZWXMZn7;pY+D$JMFAlJ+GO=1UAT)Zb}wrKijv0#WK07!oT9DFaCSSG>n1pD=`3M>T#5AGg>-~ZfGY^+X%A+0Z zh)c>m$zoqp8h`Um>_bRszRPadVobMD=(#jtaj~g^+bjAgDTOlGq#=AlspgsZspLwe zP=NQNeK#_03^c3gP<=Iq&;&X4i2|!5Lo0a7nlaUF$04$Nd7NcUZV%koZ&+2ZZrhkP zKf&=5&wmqI0gln<_}t?w%#@7?5fkRKEZc>$WLD%DXG^|FzMb_$XqM)1fz=962ZlNB z4R+mp4l!3>>VDkG_0mHqArv(h(irXd7t9w%0lvUB>O z5}MxS_#c9(6B5%Tv>H39IdgdTPg$vVqoRH&e+QL!kW?@1fJ#lyB~$tl(fr#z@^XDM zEqyQfPdWa!R1d`>bfoaS@ZqKcJhe^j2}Of%O;LoDBE&+ySJhxq?1`Bo*ig}DN9R^c z(!4a|Z`@Q~!pTLd{)2g$%sWr&Qt#w`r};vbK*Q;^^aC&$mhA25QbVNfm)l2XD#@mI z)xJ&4K&SgbaQgvJ1k}0dKTDM(Hj=|JVKUY>`HXH?+i0_}dx@(41ORBnKOBuvn0YFl zOuVV@tZu}RCYDI#DTroJL*zU%Bo{#gSbPOWYWCiiQzT@`w(_=Dzg);6pQN!dWM-@0 zZG5__^0ibiO+LI%W^-kGi|Xs%!0**pKj-gG7~uWC80W|apV9z7KO3qJhnVwpn%^~0 zX24a8I;@OLjz&XVH`ts{^;mwgx`=S~yhmyOc{@OYt*_H=S!w(S`^%jt(&+R3I)N%! z@rX@Vw^OvougG)XjtPwF>I2?S=5|?;nsL4%#k(BFZMuk}{v^FRLXQzBZ57xistIGI zyF>p;JZP8P1Fs@I4bHqA87*+~pw=u<{IvWVh#n6;3DFap<;^w4S&v^bvX|4L6B*m8 z3r*oIkZf`hP1)w9d}H|Yr!b^7yt{7VRnND<_e(QZ5&bDlL5f?b`=98U7<=;sEjFbk zypM7m*raMci9<#UKJ@(Xd3172Y+?q7SWJQ&qsVsOehodAhj}1*i6LmihK5#wT(Qe+ z^4P*i!P_o;7l9xLUM_P{s%@gG2}IMpxTWWjI0Jt<6@Z^iiWCvw9Y!=je;`9G5fCQH z4Wx;Aoc?evTGoHXHP%u4_A-B(XG%dvh}dO*ZvSIIp1k{A($KOymoYV;dcKuijGZvO z_!Ag)a-e2>w*M79lMFcg*!3B&-XMd+7iL_5>(LBmC*lw`wM>7Q@c^q!ahI4I@60P@ zxv>CLu_lYAAsP3la|OyXWJmjFy3_mS>v+oHw>DYJeN#i`2MerwKj5XBeg~Z)>zt3c zB5U#GzaSs*PcJ!tf<*44=*|_nWpCG2@Bo9qsAFP6fTg(j&^P8|bk*;%M8-^CnN{(w zzKmcDHci;VZhAn9q2(XYGhyMJox#?M74S#I<)%0H{rC>DcJv3O6*ho9^P79z4~P|IHkKaiPs$#gNWoByP@S)?c?D3=|-!Njv?Z>%7o9t(((E`mz zMLRgH`SByl&VmpGt!Fn$Mx5|h;_)Q0F%aUFSYk*r?)98R@H7d$>p_mKL5i?qznBMN zlE}tZafJ%g`T7tQlxwy-5~*Xj)q~5pOz8NN6euIBO=ToEoefd1Ru<-Mq0_;)=_mg` zN`@%z0=W9aZ^Lg%#HQTO-8QrKKztX(@H$QUQ zu>S4@ut_T*Gn`apEN|m++lrdNi1VX@49s-JuQ%CU9tm2kX);N9<+!8!AId%inLa43 z4=B6n9FOw0TI!B<@j!inGu26IQq2hTzOVUc_)`Y57e0=7T$nYHQI#gLl+>9ss?oSK zRz6shJ#FBzvi;^pqa2Eqj~n!YZZ57)X19RKJT7UK%2VHNMB`Q_p_a@2wtx4zb$k#* zzyk%vuXxB3@ytW3r#sWYD} zl8^^XQYfcqJzVEj-M9^YcY4cTqP$+WBGw!7Fr0dEMcynv6LKwJlnJUl!%_R2+(9*` zJ)^LbM?&?pAH1Sui}Cc}pF&nEiWuaxiZ^%k(Hoz}=sfkUTeU`kF`o?m+V3*M%6jY3P**VwDm>3NCN+ z*h)jfiT`!g0Cf$%%f?gMH_6X#a|9RKcO|MdSKob6hF6FqFG%1^ArYz4E}q1U6FB^Xe6#Ju4JE%gJNa&a!(VKd5=hoLnsdc&#gF+ovd+_{2l(;p#$KpW zeDxYxqA+Nyx~&MKZTkD}#23v}R1zp5>ypo5LZ8ZH1qo6>A9I&Q4iJeYsCgk3)x0M( zo;$f#L!@!tId^27axet>6$w{Ys*G!3@_3V*6NB`fP`rkF)B51EG37n9o{=A_KP5r0 z+fDH}8`7pzd-y+^z}9>9Tl_;^G=C_<5S29Am)X*MVEr_&uQx5Y*=y7Y0+Zt7QyRi+Ure3Oqipcvh&(+R zi`{sUzId^~P^6w8ie-jzG+~k6M(qkw!Tt-So{AnE)p=z!gMCDiD%pTPh&9kK&T)o1 zYS>4~R_2xpv$0diY*h>LR=tR?73%cGYxt>v8+qA%Uc^rw>|RHa8EBnNjs_|13G-ZU zp~lK|f@#iWLf^?flfA;-dqQi7mFW_4rTi_OdgK(nw?*d+whcFM<+Ja#*ypuyl-V_W zQPE{^wLln%&XmD#<`&kwuCgkuR6JCJr~!w%;CIdiPI#^LxL{!h^-2&u>8;h$I)td0 zwJo9+8M*s2%{Ml_Y>24^$!oeyS1%|s34$E2e`4Bttuu83Q`lqCQQw%XP5V?xpi`h# zrBd&>Pn1) zxE#vv0syFqR9-0P!cfIAZx=90wdvP``#M=O2QadcNI56-4VxNUM%Xv%Igd7FP77sk zYeRJL01PMgrAnT#$Uo)JIZ{q-@m0fywSgg;^1KpSH_=k_cA|y~!DwQ1jrTj%XViEv z5I3Q!1PA0_RilTOL$?QKq!a!=76}}iKH!!2o!<}R&Xm9rs0Xw0RNhO(g)Qf`=&a`E ztv3!*unxurM|`51RqmkaLu!U24kL^XOt0rsS8}$OUFR6RPdwbwEqjURHPKU_giD$< zvZ(nKizS;62NlXK!=`0QBF(<7mHO24;t9PAG(Rj!#lI}EJlU>~rmSx`|IzV=IVdhO zyiB5eWo#Oo1zS&zzdDV+lE9tz$oXQzz}}yZm3>8g|L)cw`K>Z8NP-eGdMK6=>H`UuI*-;(pHa7d%La&nd< z>&!&s>n8it(@#|!a;Jw%vgZjxa_dJk!@ehI!W_304wKx{*go|~{{0=-q3l_}%RLYP|a;e03-=jymVDapq^^Jzy!4{UAR%Sul z3LijlC|1x3p>CNiI>I0^d>y=Gs$dF;xu^d6Mk;chd+%JR4r^ap+S9lztskAcx17z7 zueWq9&@uR~{M&QzJKHjD*{6zO6+4mv9AwcSwFn^%#GtqB4eK~FleX@-kV+9JClaz2 zBmIJoXvV-NZ+uh`(X4L;IO z%-3dpd~h*R?xWA`?97AG!y4cJNLjaeEoHjs0BKBG(t3_%&LHX0x_Ao?-9Z>h$4a_k zXbi;mC2}I|ei&?7+mg2+O#jfCHPyYSp_=z6=~m=I+c@ z2iu9*eK-eDL>J?17+Xw$a{E$8Lpp}?P7T#0ErDfOeVmNq?guScwH6l)fo-l?Fvv7Ymhpns0u*MWl5h(?@AoI{)iWzSO&YqLCp1O4Yx*2UO-A{%Nt8T(lI z1Cha%MjHW)F#OUb0$2i^gqusVGs`ww&Sn^(Rqw) z69F0+wH3vMPLm{!E?on$A#a$hI4|!~Mtb*}qRtavn#{dn`Cd07Lw*c4^dl6}SN}CK zJAkm?>+N;%maHM`Ph6K3 z#Qm(530+#Xru9GRh3R71T2|bpr=7cU|NVNs*I!Sqfz9roowmIg)PAiB7Af|OaA-bs z6=)`7m02{SIkk3|8|H5U&6B~gD{qhWOaR4`!_9u3QjXjd9SsRRbL3Wb+;n09v;K=zfP}pB4nPk}h+ZbJPdXwXx9mAyt&io4j~ zbZ4FG>O(yC6YILaze~H)1V;0@@f$yk`H|81D|B}3zwgKl7(e#hkUYH8N%AE`TLxE4 zx=-91lQjd!^d5a>SQ`yrGW9#v_HUN6{&_Ra_A#e@N{aZH z`nXV|_0p3`Bf!75id^q5Wr&rr6v0pQ4+D-|{*Ch5KHaIQAr-0ZHmElo{Y%{1kvtQi zvn=l3a{FK8Je#x?Kv-fvyOZYL7l@-pTNRrU5m%-NhJUZ2T9j&qY%jFBW>9Wzw8DS( z|JZxWs5qKvZL|k>NC>V8Ng%iew-6wZ1PKJ!;O_1aED#6|!2`kF-QC@7@BjmY+W@!o zo^#fD*LUvEyY9O8TOVr;y?a;BbXE1!RlBNo?Wcr*%#4VpI@9Sdj7zwYR~M*&mhv!P z4Sb}M9aZwRa(*!L2qL>S_8+7Qqp%fDpKTw|EhhcV)(YC4l^`FC;f?DhRuks%_qXKX z{^^GwCIT-HQmx;a*#yhWVSS9Vz^!~(7rYWn^A|avc81kmKk6VMDX6qqZMMC{KyLZ< zPveI@;OlU`f+%#DaKgW0Ny7q-WnHfuaC`oZste5K&Em8W%E3=<^S_N1FWn?Rv9 zw1)N%osiky^XIQ+17(s?tlQFu04wy{z%%EId+XAE z$SPCTNph1ip48ONa^dJ|JITRbR^v^dFeSC4(ex~_Gfm&oA>G%>i_^5=n`I;~-jLiL zJnuzoJ$d`FD{H|Q$ID_5GZ7+IZ{aQvL^d5RxvMfWq7zoS^n3%;4Dy@Zo|w{i&rQYx zw|N$F!7v-!CELVgvT=>?VXc2(9)4rrdKn|G%OIS-7>bd3^<{-oo;zG(SeS38+MF;QZsU7h+I1lxBv)}vYbDVO zSeAT!`7}NLIjg7xdU1_~$n<;H82gkv^Cm9aY%*KIQgq<82R_8DH=WOOYi!iL5FZ8X z;C*Tjw~w@&k_D5!sZoSb#FToFeP0h1+S1?X&085t=vdq0n+q+GTPX`Je5V-8(wY{U zmT2poZ+M@dEIg%1y>oWdzgkDhc3$h2>c=$Vdy2ce4I>12o$(jUS4$ZDv=-w_AlXvYzRZe3op;&81 zyuWOmC#&1TsZ&Rm4hD`+me2gG5pDIu4=Tl}=g-pIPV>=9^%p7Yt|y(jTpZ9p@uP%* zvkm9vnaflSTGU{GuHlO5iNnUyT4x~rg$+;Sd)Q*i#_uNXQZCz2vOZ)nVU)W1Mkwg# zIw}$1Y^r1pyOG(!UvX7v5%0#O*p*775OiI>GE=>-s#JBS_Bh~h1~ zwmJOdf_o%XYLs`K>i2%oH<|Ybu8{u9mIs0DBuP$F4J*r)fn(Kdjzc&VUv8rPhFlXh zl9bhEW})=EwI@#ltg4&ffo#g&iWf{^D4CZYVN%u%4iCF6)U@iEE&<59b#y{5Fl{C5KaKDfc*f9aHo;5-{#uSi|4!{dvyU zcWD)dhUY(%8k&FHka{@G*kcVLj}ciImmyTv!u z50*MQMkl$H|R@Ix8Pv)hv*mmM~YhVneY25 z^jVHA+b}Bp&mEtt82-H7j5nyoA6xlkz?-wY&VUO#IF9 zKX%(++x0&R@c+Nl+2_a)qT?Tua?G(}Dgp3MMpEu=$s0X?GXr)W0Kga(|0Mm!4*(dx zg+QF1e+K}ium_|QDM%OqD2G2Fok>ByfztPXq)rO1DzU{Lz;j}!z-Q4f$a z@xMa!17w#t5ENn_fRF!q{Ph3wQTadb_xXQ0{+Ir5ew1SF0L4H6nShOx!`}PNIXQ}<}WV!~dtiEsi=({W3rzf!42C&BZLJu(a_n>{rzFt3a ze}nZk_zi}6ur<|CkdvMEGYrhvpx@!wV{G^#Y;S#LbYx_(tLPu)5r7DIz`i^>I^5sg z-rCxPwu9;szhmGo-~qVuJ%+&HzDG!hhr|DNP(SW>4(jjDHyC_8sGpl+M*E-tr~U%eKiu7ZeZgq)g%E4X|KcD0wBHqQ z@B4stn@(SSd69+nZRphZ>c3L(?jP<~)hM3sUtK}b0i;zhWfr{0wBHRbn6jJjj%@Pg zrW-kA!|&!l6K-+9gqzzTe6f-|R-nrN_8EUlX|CkrcUf6|W5H(m*ncD?jEuvVCzCc;cUG=<_7~^Yw+~O(!6eK% zM9~rA;i|Xo$oCHG;qLzK_U`Wf{%#peTDaT3yuU|mZQXvm2bMq}vI`0G`wBpWguj9R z*#AEPL|`dk9(&_|K=H9T5hdL#X2z2Lfkt$55}KFHY|N$q1CW>&;VP3ZI>4X{E;JP|H7orGvg6?c~#ie)jAI|3-n)@w0&mvCtd%;?9ELdd&K6yFlqPH z>h^X_Oue%BEpzR^Flk3?g+OF-b91uF@XGuflL@YIcXx&56E-Y+u;Kp|lP!M#2b2F# zHjcoO-yH7z{QnIqO_5O0F|n|U{wFF;kx?zffs`YIuH7*xFoBSeM`PFH~Bfar))7gW8(>{LO!%(h?05+h?d?`tou( zzY}`?->Ag0MAM!BT~Kgxb#>sI2kid~l~!oR@cy!bt(%*byw1aap%P5EyEOz|d;19hAfN~VFwnq*mVKV_-!li$<^jO9mp|aiTO&0Y|Y&0OSk^fD9fXe{~s1|CI^>GLZjU{(GUx9=XhaMP7D=z?w1Z zjHK;$lB$nB7kIJ7DFZ~V#h=n*?hYqSh{EU zxuq{WBs`oj=~0qNbLSiW$+DN`JXt(uDp5D4eo8DgHgTnrc0`&!8W|r(o@@IKP&UHN zlHB9aMv+#=KObV^rPX{M4J3w-eC}fxd&e(i>l!azSFwwnEjRrUo49R$3vOd#v={58 z?YU0GUBif5gDQnrgQWgoZ=2$?2?jtGx(=X0to;H>sUkeU_|(Cg)XsZTuU!4xi)2u5 z29b*A=3M3G>zcgIcE<^W@u&nEz_8qO$-FiqRbVXYPVhvy#$jhU^jh_bWK3fI8bcOt(lz#ox05CnSW318905nZ5N@5gz1&ts- z9k1rf4Q^Qo4r-dZQy#usE!GsfEl+?!=xc-@5T_n9CE6ZcroA86WCpP?{)}Xlv=(r( z|GmrFJG;ZW8wyIJ7^8KNq{f5+XjAy@SMFQ9uq?o6dr$h@GQ6WNimr2aJgf67CSf>C zIg!U=Ce&e6__B{kRjYh!tv#UhXrX%lI6>F@`uOku&El=*8YMn+DrLWni zYT*QAlWV#CX;Gr?I&YLfRkhp!5&Xz!=9eRo@E%tX zeK|6JJ?%SP)`Ecd0Z2~OF{hoqC1TfL?b6Z9rMMn~{6Ie7<`pj0Vzu%wvn^h?wupg0 z95X;JCn_-VAgxI)54eJ>+)mO&0GjJ-HJ24Xiu1!%O(WX=*;ltpNCP$47{T~7)Yc@p zJB!tRMqI{2YR&dr1F6oJ85(yKWKA^3MJ-0}7WR?rcOrE<;>26IWYJL}K4bQlkxJ^^ z_?g!NMlhrUM_S9(7O%f(Ds=_1cWWbhSwE`XXgdB&X67rZ@1&?UY00)PS(fOe-VyMt za}n|jT@W}?YgFL2xjxxC0D3fa%F_1#<`G6 z@PIQomI`9MtL2v+buf&J|0fC`ZB9+an1M;TIuwDrm z(56_^2%z}uUmUa*RgMVkBVnU_CfGetIA30VvrInL@p)=V6RPdgITzewmroSw=QB4K$%L4VjPO^90>l0O< zWc$bD*Qg$*rgbnR)|VKF8Jjy5B9x}~n{q8wUvKV1g-0yXudZ(Y z-oNdrHyF?v66b;-kuwrk*U~1qXVNban?$7+!{`dHjS+Bc3&{<@;Qu8W|AfBxquW=KC)!RR za>E9+-d4$nc2kKtlM}cg5#y}$_%UMiRip-hcS>QA7nHGI`h^^W9JcKyNoXioTA}v{ zkGvLT9upq-)Zf<`NsDkyZtd?bq>@5sqzcbfJ@BC#w@w!D;3eifp+~>)>~OU7!e8rXV2K=z!-k_Wiz2`-Sx6;@9_}je?MLO_+(ZLhl0c_*pi@a1 zea8i|04bv=n-&&%lI`3Fx39cm$0oRV1|2eT*dEGvMk4(^tPBGdxaX3F($FA#9c~Ow z!5V)8J0lo9$c>`!78F`;EJy%DdSJ@BZQz(V)5{rg`8P;_stfwBbBzb3fdoGV-I%O% ziF`gmD@adUXn}$b#5`KB= zbHC$rzZrx}Q9u&%4JTnumI8PzT)0Q8E{0cfm>;w0+kyQ}PTNRNK8beCtqxBtl{TX# zj|nrkq1}^SZ;KIwualceB^MYjQX2n-+O*-vP=HOpd)^O$<+4Y(UlCG);bF8K>a;-B&fwX9PQ{ z&JoneZ?b4Jc2Ejv6}Sb?>-L^xtWbY0_CvMRXobZaU?^P3=dubbl{qqsnuodZ_7hc&=&cStoyj#OyK!Kpfzbg~{BPVu+#*PL_BV>1X(kHm( zVOI_;VIG@8vL7)1upXs^9491aG>$?9D2o%AAhT!O@NrQh9aup5d1UHhok5>0wRbhbSh4{C#qkz1KVE}$iUGVVFL@o zJXs4q`Ih-o^HlH}#(-=mC~9*SHa$jh2x}7c#cK@1ToOC_HeR&iBd(L5U>C!^&p20u zx*5`<{|HaOHC-uXkGcXG-iR_@g-l@i0wd4H@cEx`Jfz>az(+J@vep6tHR2!06Rm9T zX(A1Tye6)42uv>cR;7$~qgm#Z2r@p##G*qs!UX-ew$Nof&T}LQB~-Gx`jA%gzYS0a zt1FYl=I1emv28sn&Df=WjN-X{=&SQ0r)Ws?>&-F*8qS7~;<^r4@&Zh=ER0^;$iEQrDo-%rqG0h zpRsfppO~g+3t^DLPXF2W-#Fu@Tk}s??V;(MGL7i)*nTXm0zxfUHd?Fq z9_QjohC;bk1bIkeR^f%McY2T%Ca0V#3fFg%5p^H~BOKm|--{mrcVjmadE$R+-y%2D z?0K`U1U2Xh552tZ{Z2vB16qDQ=9H9Mp@j5kx8}B+Pf2%^fX%16x=*8Zmo7 zlV^t^35^{6>39V|r;6ZHu$`{X?cwAsQW#241QkU#(CFb;6^g2e=&3vQh`z@E(87AF|fwgxlhXwmw1{M$?jFhYRU|*+#FEfH=86SoO z@w$4=$Kz@5Y#NIim|)$Z6r3~dJ(?!0KV9(Ij^6ilG+k6Q#p`0;FQe@bvUrz&yRC&! z|M{%$L#z7Tsy7&*#?^SS#_GNnV+-NGSL0Y#yz~54+(QoN-xX(HPoV8xh!h%WJno@5 zDuXSk6{`N>E(7GYxq`DBRy&kbw2f+3W1U7y8?FqgQ#8m@2ENlmB-*3OyNaQrank5gKN2FN&p;GZV2Z;|Bj1ZokALQ5=&Sf#*HzVt<6)5Xq zueEuHPYC?Pp6$a_^4yD^;qG5=nvMhR_MIbA?OXu3epxAUw@DMz7e_Z zPfl_Hm6%zMO!+f=9mV|GpP$fU942&(GMpj)9ifpTUbYJSxa6;>8!Aj+opCxAp-{^a z{-w!+X3N9`&3AWRJO3=}lY6A&2@NESUK7&UdQu>d)DH4*2WSI^I~+@LsKn|7iTa$n?jT(c{?D{O zfnu#(yT4HdSBs`{fmG2Y*>y2>K>8`P>^Xk~{ME?htK5AI3}GR@UpK%`3|!2} zFk8m622D3^(nks#`DYcmcX*YQf9K{*|{+7L#WO0@Rux-J7=O196S#X*|-1d}P&MYY?Ek}Tl zlZnsj69c7dN=gGKXIl&=mi^n^>}MEw(&uMtb_hu)wy=td6di?=zZ_*cZd-A$K#Tj9 z1SFKXByW_1a|wR@F?ky9i{zKlK*g;#0QmB7+o26}e(q&a_qB`8%HEPf+JwVznT1Xm z2Ct(wZhfVCu8DxPsF*NaD_;=_)yMLR+T5%0B6)+?!YHG+*v?q&M9R9^65;g``j$cU-3c149*cWlNTuz61eGWi3$NP0~N}22 z!iv}gIoi)FiI`M`tVpoculxCY%vdp0AihzhpIS9C7#RAZgkw7glbSZ(i(e5@Zu+j1 zd`+Kyx8#41sF0_@t- zbIF0cY`QIoeR-kdE*%fC5G4pIWOjdzs1RUxtr4~I=xN`4mtP4ETJ04H;DxOVA-ZzX zf=9M{N(9J-%ph%tkTA=wfR$H{{P=V$ttVrrfr#iND~1j@dr=gZ{MzaZiR}_+Yp>$B zec&@t7M1sDmBm-djsE?Mfj?bY0zVF@sL?y>C!gz};#_T7+AA#NMOJA&XWKfq68?DN zXO{kpr!BHNA&^zO$@TaxHh})|B?Xcq3RxDr!A0$Tq;5q@WHMdMI5CS3A z-B@5?(wtA|0M`=m^VeQM46)w9CT(Bb2A03UbON1HF0T5{bu2VkT0P<=|5RL5rifqF zWu2Ox&s&$ghKr8(Erwax{Tr_WRdNc`BR?&ecMUu~%aHJTW08*R)Wv`1B zqz}&gGK`WVFB@C~6S9zH>^W)ukVKC2ic@g!t8nCG5W{=FFlFWU@-3(RCY1P4A*&;2 z)CL0K99nybGF{_#&D4wPqrR#2Z+<0;iK&sl=WspX|37 z2a7HA0%mXiL|QKeR{wlN-_&;cv-!P6bjW%7$zrOneoye^;PHDdKiNjGu@~TQwTf_Z zac(>kItkqA=&QD{j3;x8O|pDTSlOLv#omHD=9HQvWY!!puRKsQbZ*L1z%MCWEHf

Q;WuGSS*o>Af;Fw*JIjds51t0l47c0&S5Y@GiY-hu0ko zxF*<0eEGuozOJIzB%3_zcrCGBf@BIe?(|bQ0+TfXb0s=O8+F>jG_XjB*}E%erbzT* z{i|WksQo)iNh4aP=z(8@nHizdWf-{^W9~88N|oNztr<6pRHpV5Q8N4HuQST904m;E zn%N>8Jp|p*fLkjWzSFp*5``{_E?(t@T=*Q_6A_)@=-FAjsT(UXSw78@oCt7W^*qIs z&LOr5e_WW&=qlD>8>dv@OzwGqR7BsCkpxU**)+U}M$(iXwFy%Ue~PKU2K~?U%-F0N zuA*`(t7as1N$#j;3*&9r37OsGPwO1-rBm+6j8RPa<#qB1$3wrl=xq{BD^Ys#{czzs z&Q@p=`#p92^>XYqk0#Qhi^+4~y>>%ruY^aOn;J17)bIqH`fzk7h38t&6Rdq1z*ZR? z0Jg}La24Cg`ybi(kdNy>X2C^K^u0yal^2R=UjDL2YDVQ|-=SPXIk+*cW7Wh(e0*C| z9N+w5q3RP!BrR-A@#Zxqa3_RhI>GlDl2LBuE*>>IK9#_wnBh4x#`EJij8&s3m%Gp; zuWx(MoF3yN9`)dbbRz)nXNo1vORmDB)+&@~;!7T=Iv<%WD3bEbXV$$mTDAEW9OTW{ zI$Noj9^hAsB&J(5l5)QIpk^bHafN!C6Vzw-gxQFe_@ttj-iW_>;YNV(vHdrA)ZDx% zpRWr6|Jz3;xoOiZ(T?GTKN^3(Ytsym-nJfk<&P#Cij(OVO<_lt4u529&q*+k zNZ;M48uSM|Pds!ltk5#Tm7ehbpezmv()jhhTgv_|oB4)WEXDbYmMZybGjx2LN3A!c zAJkBNBQ$A(xiUF;8F&x4pd>UEvC1_vL@|56JTN|r(_VUx{)lsELDCS-+$501n+uOG zpj&w&N_zfGn@D0OcKpi5TLW#VAq@L z&MXUrJ0BO3j*PTna+qh!)w%H|-{h?Yt{t(u|<;u79xO1-nh`6Hh@@WLpj+`&T=4 z2)OEj5u_glCE$W+6FW=~n zkdZ$LC%H(hwBJO5M!SlcB@hgz(VG$8&GB;?syeZ}*Ze@0Lyx|Hge-F|b4%F#PJVpi zwNaibBttdp2cMP_S=wv@Ho5r4Jlk=LnNH0c9p{raqGkl)@vHR0gu1yHLLz>htWL9+ zg;e~KC&~S+>ok^HM8EtdPYxtYz@RlIQvF&j z>s2eJp4yN~7smFgb~0m~<)ltZ#VmNXKO?C^!o|Uzt%WQ-_wyE{RxAlwvKracM4<0g z@*BF>zcqvTQ~f^$R5)YsYxdAPi;tg9>tY1Jv#*||SgeQj%BNt_!vaV=*>|lPmD+}p zYFcwwM2I3%T?NC*d7gbp;v3-2ACTxm`i%n!m@vw3erRT608R3cN=lmgUgf+JHfd@cj3^@lalJK81aJKHS56Y63 z4>IUo!K+UUM;=aHJNA9uxzSVll*^1jwC9^|L9d)heXz2`_d>zk& zC4Ql771dYn1pX8x>Tvk)rC~Bo|_+SbM|D zF=I)1_5IGaZ<_TtsBdWt8Y;;M8=cOl1tWrXbXKfst}PW!@x4?w{VKtUfQ9nvl;V<) zPb(s_3MYI?9J7|D>%!2rkQLLKrKu6sp`+Bbr?;xAN0_&fi?befp8P&&*CQ|5K>`sa zs9$ew&|UD=f0q2>Ne1`gOBR=A>S-0B&mF=xDri@6)GB+ji~~{mh0JMb85@_*qF;8d zMvLYM(_ekl?l3voSnS@T4;XE>qit$2)~(x~ND@9*8GmmG34?w%H->DxusFs2BEitc zpknL(l~U`_#9t!*w89t>{c7eJ2Vaqcb@@yN{gpk*Y>!oN$KG)8mnNtQ%LJ8gsg1Df zGokx~c-tXo?9T45pQ#xlb^UAov$4%DN~iJPPl5JTW1fM z=|>nejT^RVd?s&-#m{Tch{0Ks^q{;x?B=$fvl!LY#}Rj7K4fy=sdgx)5-4~}kKF|1 zmKb=lu3v8>Y~)L=ppjIfWICQ!E_}v2mmC0Xz&)oL2@WS2SO#((t#Z1dbYT&kqqYKR zJ@Lr#tbyCl+BPkjY9&Zwi&@*vC9s}qG``?FU}q6~1TVMe`_b$do0Th% zn$F=z=hjgw2qDspASyfvv`m}Z6W-4Pjo;r64BfcB&?A_o(ebuYbzK`DhDK;^2ft@c zG^Ux^^@ZKeT1v>dgYPzv;m~m6Fd5!(FDtzlt+-*m} z`EAD*$%oRXiwKYP%|-p?o&cx^ei62Aqm7cQ*WxjJZqy~{;k-5>(4sWaNOVL?yT*Jn z`{O*grZOcI!O+U$X#I%FN1G#)ep+BgM@4Q<<*v>up*Mm|-6bZ2cfBsXb>Z;gsGR=3 z>h7rK!~rL1<5uJ~4Ig!yyS_!8>7S{ZlsFL=wKg}n2}S3_)yNI}bUL{6kq1iBq;GnQ zGXo_;o-NqtT$ALh%PKo>IGMJv-LBP20=R7DZq=ODR7dY#DtI{ac?@(ut`S)@h`Lm7aDF3Hl<(B*2%%2JNrLQyIJ>Z&^%%i) zFy^jriK0Ta=UaB&3$%i!dCUf-3$?Nxh9O9ubJ&ymP?r zZApZ}NqF&h%5PW4@!C3_oi6z|_3n@E$Coon0X&5BU|1f0`r(bVDxypLhns46PlN%~ zyYaEl{5mESnRf(tR#$|6D3xENq^tUH%FQ6NZ>jmnRIUDA%<*h#zW5J&BSD4*#O_*} zaz)1ZPxZ&(&i70%U+0fB68m>o*zPE+FEMnqs|7tz?|Gn&qRWq7!$i&G3BSaAP$Ne9 z!p=U0B}jGU;&UQ3XVVxizvO0}$gLlH{B8b~0+D8o*ehhQ!3BI2117?7{yEu^=GGj( z7~bR5nh1|^VEtetH=>6*^IcU#EkE++um zf<7DAdON-i@2N3>)}dCIV&6QwzBf<2a)G50LPb4|K9ZWvB8i+w{U%+$J%Id^Tki(yyC-fhT|A5;Glf9>tx5Dx{Z9a$AR|j`0j+}lM zl|5N!pm=)7N1(Rv|H+bTUPqL=eNyK0UJNRjWv0_}?ql~~mj#nek474tH}2uRKGn~J z%5TKZsE-hQ*2N;saIKY_=H8A~p@tVr4?`EW=YlVTFLii%wcMaZb)5LT^b0<4SJ&fn zDrk!|?^k-AMGEJ6rdC%&oR=qZ_zoY7+A`OFry!K7in8cK5MMSP4N`Opi>^?Pr1HED zrxF%ws@qnWOGw@66)`mpB*l788=$31YeXB*ChDS9*K>%G;SqOZ{CE19(<<3~vPdF^ z<l*XhRG$%bXy>3waFjFs z2RSNzt-D4+pCux(u(Oia&Xp`Wp8HZRP3~K~R{OWzXxiug_nC`PZG=iij&YJ->Q3^U0s}E!wmLaI{~niZXHH?>yIxs0>=oILyG=gRJkRAKX4vBK zU6Ad0{>2=}egX#;Ms63B42T=5^Hb}xMMmB39ci}o>9jACQ)@Q2zOT9I(^D3`ko1XH zpFX|k60Q)Sl}~Z(B$aQ`PHI@zfSYz2zG)npKCMX#cTFr&^nOa9)iLSxvCUK}Sjb=r z4$oZN#-9)Nk>yAjjxb|10^Y?j`z+@$R8}b-Is+HqV8;f|8(u!7&e7=B+Ha)f`s*bk$R73_zRRb%4kqsoD)R(^3!1Io1tG0r3ytcnymEiu5Z#Q$fG)zS0qYdxh!z^AvhHgw1sj z+QH~FgY+3Nolg635+7ekjC#089VGmqV0Hd|#T>Rv$ENvWhKuq`zNUZ^;^kt{X^4Co z%_b?K$Z?B9$LQ)Dg)3oc;m7AL_$Wz3C4k~S{kM@#mtw>@dde(k%Ur;-fOb-~iiQ;4 zNXm#bG}7v6reyTJ7oTy5qPI+=)o-(1ku2T$`C z@qa4XDO;(}+CFJyZUe#x@0}$nby|}2NNAyLO0HQ#)B84!4tVGIj%|7wh;Iw7(w5p@i-q`-I z5xh4i!Yc!o*O`*sJ{2V|=WOn@TTJciHukQe->{7XUlB?z($#5~oOU)W=C;HixzEkPxCos&b3xQoIgoN z5B<>C?c9B*x>EUk$+o{~_bMulR~GMS;fZBOcx6uzS;8o8LYgSolIQdcocEzj0C6_$ zb$q_Lu0l3LlWu@=*XQ8TS=l;AZS67ZzlSSkk}UV+Jp~|OXG;||-kE(=A4yHwWC97K zw8(t;$RKk|uFDP9&vmJOWOOh4oviHd63UT}M?`ohHb zWyH;*y@{|~Y?mJRgu6)Nxh3Fq7JM3|LUa@A1? zO#}N-I!Aff%3GDf>?Eb$K%a|pBmJE;187>hHSRI}+pK5WkH37b!zsX;4f3MzcsLJK z?eIvj!B0r>QBm`}h%K`{M7ibL?YnX-W0m=wPxW^=yo=CX?03e?6Lrm^=F3Tsx*Jy< zCbEeB^Im?F8v|=aL^@*L=CrwvWhKJkHj+WumM~R#pb(15=}jbw_^?>~f&Pq}lXD@Aoj*976KJMoY>~?2CWwv{L zw$O=C=nYd&;OQy{53{z=i?QB0j?UA4logR^LDDj2_a{^ypb;DOD8S6vUx2IJpCM^2=#W9P;~EfwGj1|QdFvGtF1pV-Tm|( zSOzO>2m0@2sY8jjAhSG+JhrONYr!;D!(qlXW(8EhB%C^I{MEitr3Yc3h|5l1uW1EI zXkh$?ML2zDUfDxm2z-F;!22ON_`t(^@t|@+y5rI9)N4GNqdz9F^_ia+djV;c_PACy zFBV!gS(AviM@SQO&x9=|5^ZOT!#e0%%XFy)v^>%wsR~ScOsM12pKzt0swCh0ZRJ@# zx^m>ZhN|KRy;_|oy+2!Rq9Ptr*T4?>_#(xv3-rFbOx(dsapZPW;j2D-+;|l4HH&RO zkUT9vZv@Xmj|gIE3=TGlV8axhYvdNX4OH!PUc^f0EFGnyA#?Ss4$FlUn3xtEbG7#k zpKRLEbr9{~FWDU0nXILfj8?IsL}HE>3sO=E-PBMD1zZ=<#2qfv98w>MIuCe%+;#Pg z{-Ko0IIRgT)16=JrfUcs72RKa<_#o#I9UxG+nn{go=$JRjSM2X*r16Nu74$jKpd70 zh)g?tHM&=THQpVIu%2v*sq?E)tq|=;*o~i+>-YP=a;m#8Nih=DbUu#m=K#7|vKz&} zEvww&tWq@ps9jB?qYYW8>}q~wr%{`aB-R^T+b#2YfZDV?9fR%04c>WSKOFQCy~Bac z23OS6)4_G5B(V-njCx>IM@5a04l=-7*dWm(DR+8Zq0@ox{+DWxr zyHO^#6!OFC{+cVKM_xNjEsi64yq?M5o*6%665f1qOD>l8x$vX9o?J~UrpkQj2H_o@ zd|19z4Su*7=I#8M+S{Rc>RZ>%dvv~Y$sETq<*MFd+2#3yWjFXjOI6Esb=Kz6to4~4 zY>f{$(RvgO{{7)_S#q_jhlu8NgB~9Cr{O^@7=0rNVQG(dHosRWx|t@xJ(( zWIUE|H&x!**&Wssv}lt;WvwkD>fM%&`^W^x z0-PlzGdEUoNw-o&;%cn!5fC*F3}?BD;g@>L=M$P57XR6`E*B3q?e)vvBL>?N)!74F z=>uHBl`Wb)#|~D?F`wWv+d@Oyyy7m!Hu#8dE=De;eyG9)!m9m+Mxx$Gu5P7; z<_gb)!xV89_51p(T9Ul5EE&L_XfIEgvHC|b!Cz-n0X19T30Fgis{KZ^*6g$JawXq! z=ct3JSMh!B8npuJT*3Jp;dcu(n}rV{TqQV2HHV^)R9fnpQcT$PY(1=LCoF6ZF-wcK zayu+?`8d!LIomW)`t*>E#_Wr{QqG#@vpQL3e`{W3=Odm zJu#NCgc0`*wh#87Qef3zZd?wFj-e7qKgrT`%LOgxoR(I+D{trc-hrO^n#=1b-qbGG zyV;cLm3SNXtut2P{A52*;kP~)Ds|&4XelDUAADRlLZ}8eMlD1AdId%Hrlz^>)}Pji zp28&4E!ch<7Tzt{#(6#6O$m&F^}c~Y@>jwGV?1(*3ju|WDAC!M=dBOvrC5RoZ|3)^ zJvuE4T>^7;7Kl_zLYUgo`7 zZNRHot(wX6wm10zAv%ekIuZT_)$CjI{zIwgX#{*6KZU|I-?WQXs8u0j=7$ux&Lzi^SXAKAYinWB6|GkKrmF%k>ixJ>=X-B% z%i3TqxkMAF)^ap-bAPP*((snr-R8No|J> z3kDxdb+vpN5H!VYw6e!(U4)josYk-P+s>CG7al|%V;Co7%woisiMPFF{lB{&{d zjVqy!yM3YXwk(PcpR0*)@Scl9%?FjyhXfW%3Rd;k%?)$2q2hL&1ysIVQYPQ5L*v9E ze=W(IOPZ6pSWb^qR`pu;EdIFMC@kqSo%!7NBmK$%uGXl7vBS(MfH<4*-zkd%UKrqG*D-Aea%+9}lY zF0a7a1X+h=n59qb6W91#O1^xpI;6NL9{STxH|b zYJ)+br8cb&!>19Uo|%gbDAA}CTzcr+hF=YOY_N6-whRc>W^k6}q72fp9pa0+8+u*! z((sqM&*jnwREx7&0Sv=2zT=4+&os-JE32iQhi^t&k4<%PuvNAAn3$7_r;j`~&*-kEQ^=GzkBxBRQ<{tOAk ztIJ0zYm_*TAnD`Fwx+9JQ>O*HUdNNW!ZOC2qv#Id&6iW4C>E!|4FMNH30FKi4j$K+ z$468gY_axBzX)DW@060igHm?sAAaXx8RR_dveLR1^+hE%D|@8oVf`E^GOUhP$&HuBy1gX)mR3@RaxB=bHDOsXbBamVuD9{4&??>2lHN&DvL10v zkL>FX|(cIR^6a3N~OUB1fyU^h-@(P_Yr!g8R5$-epufUE}-pYh*cG@WWOpcponF^^O$oyk+X_ z+gNqrxGuI-NAlgI{n6+%$*Et?HR&Oi21UNE7U>PaCygC5-KB8IMlk$=~(EuKoB}DhhziOwf9uR#jR$Eq1mvr$Qa+XNGaA$8Svy$ypJu91Q;;XlA z5hBX?)vMzqK^}K-J8Puu)iXY{_|~9xSeYjFDM-Kj$DgF9s?Nv(qHjXe&EoSEdSfF^`#Udutd8);-c4!8*0I?am_9JqIGl+en}Vn$v&J z`!vtnL8Mn|zubc62NJ29zL1e%LE=^q$i%BH@ka8a_%-pN#!{bLg!!QsM4ET+%M4ul ztDqFNy{6o`E!tCVXqUvhXoJmgf4APr`*b3tpH$BX%CDLs0=+gri5Tw2cj8YP zE_^?3XlDGyMn#NPSy(jYjbLGb;Z(@m%KY9KB$>

*mk?{T4TTG3@givBKM1^PP-0 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 Z$Kd3j^}lxt;OOA}D}uQHiT@4<{|D{H!*T!s literal 0 HcmV?d00001 diff --git a/src/MacAppBundle/QuickLook/CMakeLists.txt b/src/MacAppBundle/QuickLook/CMakeLists.txt new file mode 100644 index 0000000000..7ded90b6a8 --- /dev/null +++ b/src/MacAppBundle/QuickLook/CMakeLists.txt @@ -0,0 +1,35 @@ + +#cmake_minimum_required(VERSION 3.23) +#project(FCQuickLook) + +add_library( + QuicklookFCStd + SHARED + GeneratePreviewForURL.m + GenerateThumbnailForURL.m + main.c +) + +set_target_properties( + QuicklookFCStd + PROPERTIES + FRAMEWORK TRUE + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/QuicklookFCStd.qlgenerator/Contents/Info.plist" + #SUFFIX .qlgenerator +) + +target_link_libraries( + QuicklookFCStd + "-framework AppKit" + "-framework ApplicationServices" + "-framework CoreData" + "-framework CoreFoundation" + "-framework CoreServices" + "-framework Foundation" + "-framework QuickLook" +) + +set_target_properties( + QuicklookFCStd + PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks" +) diff --git a/src/MacAppBundle/QuickLook/GeneratePreviewForURL.m b/src/MacAppBundle/QuickLook/GeneratePreviewForURL.m new file mode 100644 index 0000000000..2c0827e3a4 --- /dev/null +++ b/src/MacAppBundle/QuickLook/GeneratePreviewForURL.m @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include + +/* ----------------------------------------------------------------------------- + Generate a preview for file + + This function's job is to create preview for designated file + ----------------------------------------------------------------------------- */ + + +OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options) +{ + OSStatus ret = coreFoundationUnknownErr; + + @autoreleasepool { + + // unzip -qq -o -j -d /tmp ~/test.FCStd thumbnails/Thumbnail.png + // -qq : be really quiet + // -o : overwrite without prompt + // -j : don't create archive paths + // -d : destination path (create this path) + // extracts thumbnails/Thumbnail.png to /tmp/Thumbnail.png . + // We add a UUID and use a system temp directory here. + + // TODO: do we need to release any of these resources? + NSUUID *uuid = [NSUUID UUID]; + NSString *uuidPath = [uuid UUIDString]; + NSString *unzipDstPath = [NSString stringWithFormat:@"%@/%@/", NSTemporaryDirectory(), uuidPath]; + NSString *unzipDstFile = [NSString stringWithFormat:@"%@%@", unzipDstPath, @"Thumbnail.png"]; + NSURL *zipFile = (__bridge NSURL *)url; + NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/unzip" + arguments:@[@"-qq", @"-o", @"-j", @"-d", unzipDstPath, [zipFile path], @"thumbnails/Thumbnail.png"]]; + [task waitUntilExit]; +// NSLog(@"%@", unzipDstPath); +// NSLog(@"%@", unzipDstFile); + + if ( [[NSFileManager defaultManager] fileExistsAtPath:unzipDstFile] ) + { + // Preview will be drawn in a vectorized context + CGSize canvasSize = CGSizeMake(512, 512); + CGContextRef cgContext = QLPreviewRequestCreateContext(preview, canvasSize, true, NULL); + if(cgContext) + { + CGDataProviderRef pngDP = CGDataProviderCreateWithFilename([unzipDstFile fileSystemRepresentation]); + CGImageRef image = CGImageCreateWithPNGDataProvider(pngDP, NULL, true, kCGRenderingIntentDefault); + + CGContextDrawImage(cgContext,CGRectMake(0, 0, 512, 512), image); + + QLPreviewRequestFlushContext(preview, cgContext); + ret = noErr; + + CFRelease(cgContext); + CFRelease(image); + } + } + + if ( [[NSFileManager defaultManager] fileExistsAtPath:unzipDstFile] ) + [[NSFileManager defaultManager] removeItemAtPath:unzipDstFile error:nil]; + + if ( [[NSFileManager defaultManager] fileExistsAtPath:unzipDstPath] ) + [[NSFileManager defaultManager] removeItemAtPath:unzipDstPath error:nil]; + } + + return ret; +} + + +void CancelPreviewGeneration(void* thisInterface, QLPreviewRequestRef preview) +{ + // implement only if supported +} diff --git a/src/MacAppBundle/QuickLook/GenerateThumbnailForURL.m b/src/MacAppBundle/QuickLook/GenerateThumbnailForURL.m new file mode 100644 index 0000000000..336c0d4f99 --- /dev/null +++ b/src/MacAppBundle/QuickLook/GenerateThumbnailForURL.m @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include + +/* ----------------------------------------------------------------------------- + Generate a thumbnail for file + + This function's job is to create thumbnail for designated file as fast as possible + ----------------------------------------------------------------------------- */ + +OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize) +{ + OSStatus ret = coreFoundationUnknownErr; + + @autoreleasepool { + + // unzip -qq -o -j -d /tmp ~/test.FCStd thumbnails/Thumbnail.png + // -qq : be really quiet + // -o : overwrite without prompt + // -j : don't create archive paths + // -d : destination path (create this path) + // extracts thumbnails/Thumbnail.png to /tmp/Thumbnail.png . + // We add a UUID and use a system temp directory here. + + NSUUID *uuid = [NSUUID UUID]; + NSString *uuidPath = [uuid UUIDString]; + NSString *unzipDstPath = [NSString stringWithFormat:@"%@/%@/", NSTemporaryDirectory(), uuidPath]; + NSString *unzipDstFile = [NSString stringWithFormat:@"%@%@", unzipDstPath, @"Thumbnail.png"]; + NSURL *zipFile = (__bridge NSURL *)url; + NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/unzip" + arguments:@[@"-qq", @"-o", @"-j", @"-d", unzipDstPath, [zipFile path], @"thumbnails/Thumbnail.png"]]; + [task waitUntilExit]; + // NSLog(@"%@", unzipDstPath); + // NSLog(@"%@", unzipDstFile); + + if ( [[NSFileManager defaultManager] fileExistsAtPath:unzipDstFile] ) + { + CGSize canvasSize = CGSizeMake(128, 128); + CGContextRef cgContext = QLThumbnailRequestCreateContext(thumbnail, /*maxSize*/canvasSize, true, NULL); + if(cgContext) + { + CGDataProviderRef pngDP = CGDataProviderCreateWithFilename([unzipDstFile fileSystemRepresentation]); + CGImageRef image = CGImageCreateWithPNGDataProvider(pngDP, NULL, true, kCGRenderingIntentDefault); + CGDataProviderRelease(pngDP); + + CGContextDrawImage(cgContext,CGRectMake(0, 0, 128, 128), image); + + QLThumbnailRequestFlushContext(thumbnail, cgContext); + ret = noErr; + + CFRelease(cgContext); + CFRelease(image); + } + } + + if ( [[NSFileManager defaultManager] isDeletableFileAtPath:unzipDstFile] ) + [[NSFileManager defaultManager] removeItemAtPath:unzipDstFile error:nil]; + + if ( [[NSFileManager defaultManager] isDeletableFileAtPath:unzipDstPath] ) + [[NSFileManager defaultManager] removeItemAtPath:unzipDstPath error:nil]; + } + + return ret; +} + + +void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail) +{ + // implement only if supported +} diff --git a/src/MacAppBundle/QuickLook/QuicklookFCStd.qlgenerator/Contents/Info.plist b/src/MacAppBundle/QuickLook/QuicklookFCStd.qlgenerator/Contents/Info.plist new file mode 100644 index 0000000000..c7e5a51687 --- /dev/null +++ b/src/MacAppBundle/QuickLook/QuicklookFCStd.qlgenerator/Contents/Info.plist @@ -0,0 +1,106 @@ + + + + + BuildMachineOSBuild + 21G83 + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeRole + QLGenerator + LSItemContentTypes + + org.freecad.fcstd + + + + CFBundleExecutable + QuicklookFCStd + CFBundleIdentifier + org.freecad.qlgenerator.QuicklookFCStd + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + QuicklookFCStd + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 0 + CFPlugInDynamicRegisterFunction + + CFPlugInDynamicRegistration + YES + CFPlugInFactories + + F70BD796-FE76-450B-83CC-609688F17873 + QuickLookGeneratorPluginFactory + + CFPlugInTypes + + 5E2D9680-5022-40FA-B806-43349622E5B9 + + F70BD796-FE76-450B-83CC-609688F17873 + + + CFPlugInUnloadFunction + + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13F100 + DTPlatformName + macosx + DTPlatformVersion + 12.3 + DTSDKBuild + 21E226 + DTSDKName + macosx12.3 + DTXcode + 1341 + DTXcodeBuild + 13F100 + LSMinimumSystemVersion + 12.3 + QLNeedsToBeRunInMainThread + + QLPreviewHeight + 512 + QLPreviewWidth + 512 + QLSupportsConcurrentRequests + + QLThumbnailMinimumSize + 17 + UTImportedTypeDeclarations + + + UTTypeConformsTo + + public.data + public.archive + + UTTypeDescription + FreeCAD document + UTTypeIdentifier + org.freecad.fcstd + UTTypeReferenceURL + https://wiki.freecad.org/File_Format_FCStd/id + UTTypeTagSpecification + + public.filename-extension + + FCStd + + + + + + diff --git a/src/MacAppBundle/QuickLook/main.c b/src/MacAppBundle/QuickLook/main.c new file mode 100644 index 0000000000..aa320bf0f8 --- /dev/null +++ b/src/MacAppBundle/QuickLook/main.c @@ -0,0 +1,212 @@ +//============================================================================== +// +// DO NO MODIFY THE CONTENT OF THIS FILE +// +// This file contains the generic CFPlug-in code necessary for your generator +// To complete your generator implement the function in GenerateThumbnailForURL/GeneratePreviewForURL.c +// +//============================================================================== + +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// constants +// ----------------------------------------------------------------------------- + +// Don't modify this line +#define PLUGIN_ID "F70BD796-FE76-450B-83CC-609688F17873" + +// +// Below is the generic glue code for all plug-ins. +// +// You should not have to modify this code aside from changing +// names if you decide to change the names defined in the Info.plist +// + +// ----------------------------------------------------------------------------- +// typedefs +// ----------------------------------------------------------------------------- + +// The thumbnail generation function to be implemented in GenerateThumbnailForURL.c +OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize); +void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail); + +// The preview generation function to be implemented in GeneratePreviewForURL.c +OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options); +void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview); + +// The layout for an instance of QuickLookGeneratorPlugIn +typedef struct __QuickLookGeneratorPluginType +{ + void *conduitInterface; + CFUUIDRef factoryID; + UInt32 refCount; +} QuickLookGeneratorPluginType; + +// ----------------------------------------------------------------------------- +// prototypes +// ----------------------------------------------------------------------------- +// Forward declaration for the IUnknown implementation. +// + +QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID); +void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance); +HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv); +void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID); +ULONG QuickLookGeneratorPluginAddRef(void *thisInstance); +ULONG QuickLookGeneratorPluginRelease(void *thisInstance); + +// ----------------------------------------------------------------------------- +// myInterfaceFtbl definition +// ----------------------------------------------------------------------------- +// The QLGeneratorInterfaceStruct function table. +// +static QLGeneratorInterfaceStruct myInterfaceFtbl = { + NULL, + QuickLookGeneratorQueryInterface, + QuickLookGeneratorPluginAddRef, + QuickLookGeneratorPluginRelease, + NULL, + NULL, + NULL, + NULL +}; + + +// ----------------------------------------------------------------------------- +// AllocQuickLookGeneratorPluginType +// ----------------------------------------------------------------------------- +// Utility function that allocates a new instance. +// You can do some initial setup for the generator here if you wish +// like allocating globals etc... +// +QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID) +{ + QuickLookGeneratorPluginType *theNewInstance; + + theNewInstance = (QuickLookGeneratorPluginType *)malloc(sizeof(QuickLookGeneratorPluginType)); + memset(theNewInstance,0,sizeof(QuickLookGeneratorPluginType)); + + /* Point to the function table Malloc enough to store the stuff and copy the filler from myInterfaceFtbl over */ + theNewInstance->conduitInterface = malloc(sizeof(QLGeneratorInterfaceStruct)); + memcpy(theNewInstance->conduitInterface,&myInterfaceFtbl,sizeof(QLGeneratorInterfaceStruct)); + + /* Retain and keep an open instance refcount for each factory. */ + theNewInstance->factoryID = CFRetain(inFactoryID); + CFPlugInAddInstanceForFactory(inFactoryID); + + /* This function returns the IUnknown interface so set the refCount to one. */ + theNewInstance->refCount = 1; + return theNewInstance; +} + +// ----------------------------------------------------------------------------- +// DeallocQuickLookGeneratorPluginType +// ----------------------------------------------------------------------------- +// Utility function that deallocates the instance when +// the refCount goes to zero. +// In the current implementation generator interfaces are never deallocated +// but implement this as this might change in the future +// +void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance) +{ + CFUUIDRef theFactoryID; + + theFactoryID = thisInstance->factoryID; + /* Free the conduitInterface table up */ + free(thisInstance->conduitInterface); + + /* Free the instance structure */ + free(thisInstance); + if (theFactoryID){ + CFPlugInRemoveInstanceForFactory(theFactoryID); + CFRelease(theFactoryID); + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorQueryInterface +// ----------------------------------------------------------------------------- +// Implementation of the IUnknown QueryInterface function. +// +HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv) +{ + CFUUIDRef interfaceID; + + interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault,iid); + + if (CFEqual(interfaceID,kQLGeneratorCallbacksInterfaceID)){ + /* If the Right interface was requested, bump the ref count, + * set the ppv parameter equal to the instance, and + * return good status. + */ + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GenerateThumbnailForURL = GenerateThumbnailForURL; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->CancelThumbnailGeneration = CancelThumbnailGeneration; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GeneratePreviewForURL = GeneratePreviewForURL; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->CancelPreviewGeneration = CancelPreviewGeneration; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType*)thisInstance)->conduitInterface)->AddRef(thisInstance); + *ppv = thisInstance; + CFRelease(interfaceID); + return S_OK; + }else{ + /* Requested interface unknown, bail with error. */ + *ppv = NULL; + CFRelease(interfaceID); + return E_NOINTERFACE; + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginAddRef +// ----------------------------------------------------------------------------- +// Implementation of reference counting for this type. Whenever an interface +// is requested, bump the refCount for the instance. NOTE: returning the +// refcount is a convention but is not required so don't rely on it. +// +ULONG QuickLookGeneratorPluginAddRef(void *thisInstance) +{ + ((QuickLookGeneratorPluginType *)thisInstance )->refCount += 1; + return ((QuickLookGeneratorPluginType*) thisInstance)->refCount; +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginRelease +// ----------------------------------------------------------------------------- +// When an interface is released, decrement the refCount. +// If the refCount goes to zero, deallocate the instance. +// +ULONG QuickLookGeneratorPluginRelease(void *thisInstance) +{ + ((QuickLookGeneratorPluginType*)thisInstance)->refCount -= 1; + if (((QuickLookGeneratorPluginType*)thisInstance)->refCount == 0){ + DeallocQuickLookGeneratorPluginType((QuickLookGeneratorPluginType*)thisInstance ); + return 0; + }else{ + return ((QuickLookGeneratorPluginType*) thisInstance )->refCount; + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginFactory +// ----------------------------------------------------------------------------- +void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID) +{ + QuickLookGeneratorPluginType *result; + CFUUIDRef uuid; + + /* If correct type is being requested, allocate an + * instance of kQLGeneratorTypeID and return the IUnknown interface. + */ + if (CFEqual(typeID,kQLGeneratorTypeID)){ + uuid = CFUUIDCreateFromString(kCFAllocatorDefault,CFSTR(PLUGIN_ID)); + result = AllocQuickLookGeneratorPluginType(uuid); + CFRelease(uuid); + return result; + } + /* If the requested type is incorrect, return NULL. */ + return NULL; +} +