From ed401627751682e36a960f6401ae23ad2846ad0b Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 24 Sep 2001 21:21:25 +0000 Subject: [PATCH] been working offline.. wheeeheee! :) SVN revision: 5374 --- README | 93 +++-- config.h.in | 140 ++++++++ configure.ac | 63 +++- configure.in | 57 +++ data/backgrounds/view.bg.db | Bin 57344 -> 57344 bytes .../appearance/default/guides/display.bits.db | Bin 0 -> 253952 bytes .../default/menus/default/separator.bits.db | Bin 20480 -> 20480 bytes data/config/behavior/default/actions.db | Bin 86016 -> 86016 bytes data/config/behavior/default/apps_menu.db | Bin 20480 -> 20480 bytes data/config/behavior/default/grabs.db | Bin 12288 -> 12288 bytes data/config/behavior/default/settings.db | Bin 12288 -> 12288 bytes data/cursors/Close.db | Bin 0 -> 16384 bytes data/cursors/Default.db | Bin 0 -> 16384 bytes data/cursors/Iconify.db | Bin 0 -> 16384 bytes data/cursors/Max_Size.db | Bin 0 -> 16384 bytes data/cursors/Menu.db | Bin 0 -> 16384 bytes data/cursors/Resize.db | Bin 0 -> 16384 bytes data/cursors/Resize_Horizontal.db | Bin 0 -> 16384 bytes data/cursors/Resize_Vertical.db | Bin 0 -> 16384 bytes data/cursors/Title_Bar.db | Bin 0 -> 16384 bytes data/cursors/View_Icon.db | Bin 0 -> 16384 bytes data/scripts/build_app_menu_db.sh | 8 +- data/scripts/build_db.sh | 37 +- src/Makefile.am | 16 +- src/actions.c | 200 +++++++++++ src/actions.h | 1 + src/border.c | 139 +++++++- src/border.h | 8 +- src/config.c | 8 + src/cursors.c | 238 +++++++++++++ src/cursors.h | 11 + src/delayed.c | 29 ++ src/delayed.h | 27 ++ src/desktops.c | 34 +- src/e.h | 72 +++- src/e_ferite.fec | 38 +- src/embed.c | 2 + src/entry.c | 12 +- src/guides.c | 329 ++++++++++++++++-- src/main.c | 81 ++--- src/text.c | 12 +- src/view.c | 53 +++ 42 files changed, 1509 insertions(+), 199 deletions(-) create mode 100644 config.h.in create mode 100644 data/config/appearance/default/guides/display.bits.db create mode 100644 data/cursors/Close.db create mode 100644 data/cursors/Default.db create mode 100644 data/cursors/Iconify.db create mode 100644 data/cursors/Max_Size.db create mode 100644 data/cursors/Menu.db create mode 100644 data/cursors/Resize.db create mode 100644 data/cursors/Resize_Horizontal.db create mode 100644 data/cursors/Resize_Vertical.db create mode 100644 data/cursors/Title_Bar.db create mode 100644 data/cursors/View_Icon.db create mode 100644 src/cursors.c create mode 100644 src/cursors.h create mode 100644 src/delayed.c create mode 100644 src/delayed.h diff --git a/README b/README index efd27de55..218dbe159 100644 --- a/README +++ b/README @@ -1,15 +1,15 @@ -------------------------------------------------------------------------------- - Enlightenment 0.17.pre CVS Code.... -------------------------------------------------------------------------------- - The Rasterman - raster@valinux.com, raster@rasterman.com ++-----------------------------------------------------------------------------+ +| Enlightenment 0.17.pre CVS Code.... | ++-----------------------------------------------------------------------------+ + The Rasterman - raster@rasterman.com ******************************************************************************* **************** READ THIS! It is of the UTMOST IMPORTANCE! ******************* ******************************************************************************* This is the source code for Enlightenment 0.17 - If you got this you got it -from Enlightenment's CVS repository - or from someone who took it out of -the CVS repository. +from Enlightenment's CVS repository - or from someone who took it out of the +CVS repository. The CVS repository is full of code *IN DEVELOPMENT* - that often means it's in the middle of being worked on and may install strange things in strange @@ -19,9 +19,9 @@ to remove all traces of anything this CVS code base has installed on your system (it is COMPLETELY up to you to keep track of that - do NOT expect any help), and then install the full release on a cleaned system. Don't come asking "can I just keep using CVS" once things are released - that is the -reason I put this paragraph here - so you don't ask. The asnwer is the same +reason I put this paragraph here - so you don't ask. The answer is the same as above - if there is a proper final release use that. CVS is really only -for those havily hacking on the code, or whose curiosity is too much to resist +for those heavily hacking on the code, or whose curiosity is too much to resist not giving it a look and try. Now we have that warning over and done with. How to build and install from @@ -42,19 +42,10 @@ so it installs relative to the /usr/local/e-17 directory and keeps all the e-17 development code and data in that tree so it is easily removed when the time comes. - +------------------------------------------------------------------------------- NOTES: Read these carefully! -Enlightenment does not check for previously running Window Managers right -now - so you need to make sure no other WM is running - E will not do that -for you. - -Enlightenment has no keybindings right now, but does have a primitve menu for -launching some applications. It is configurable - it's in a database file -and tere is a script that builds this menu - you could build a new one after -editing the script or do whatever your like. - Enlightenment only handles a small subset of ICCCM and thus will have bugs - some applications will not behave correctly and may appear in odd spots or not resize or place themselves properly etc. Expect this - it's code being @@ -62,42 +53,42 @@ worked on. Just be happy it does as much as it already does. Enlightenment RELIES on lots of libraires that have been written. Ecore, Ebits, Evas, Edb, Imlib2, Efsd just to mention a few. Especially Ebits, -Ecore, Efsd ferite, and Evas change in CVS often - you will need the absolute -latest of these if you wish Enlightenment 0.17 code to run properly or compile. +Ecore, Efsd, Ferite, and Evas change in CVS often - you will need the absolute +latest of these if you wish Enlightenment 0.17 code to run properly or compile. If you update Enlightenment from CVS update these too to get any changes they have in their trees. -If you plan on working on the code... STOP! don't rush in and work on it - -even if you have CVS commit access - EXPECT me (Raster) to revert any changes -you make if you do this - regardless of the changes and how much work you -put into them. First read the code well and LEARN it. If you have questions -about some of the more obscure hidden program flow - ASK - but don't go -tampering with it - Enlightenment 0.17's code is much more complex and -intricate than E 0.16 - but at the same time it's much cleaner and more -object oriented. Learn it well first. Some parts of E 0.17 are "hacked" with -hard-coded stuff, just so, for now, it works. They will be virtualized and -imporved over time. If you have plans - tell me about them first - discuss -them before you go impliment them - once you've discussed them and we all -aree on how it should be done, you can go ahead and do it. I know I already -have a lot of the components of E 0.17's code planned in my head - but I -won't get to them for a while - and if people go impliment or hack bad stuff -in, it means I have to spend lots of time fixing something that is bad in the -first place, or we end up doing duplicate work. There *IS* a plan - believe -it or not - but to be honest - it's more complex and large than I can just -write down in a README, so talk about your ideas first. I'm going to be -ruthless in keeping the code neat, clean and free of nasty hacks (except ones -I put in as temporary stop-gap measures to make the thing work - since I know -where those are and what I need to do to do it right). If you can't find me -or I don't reply to your e-mail - don't get impatient - just wait. I currently -have no network access at home, so I'm doing a chunk of code offline. I'll -get to your mail and queries as time allows. +If you want to compile & install E 0.17 you probably install the packages +Enlightenment needs in this order: -If you have problems with the code or bugs to report, kindly forward them to -/dev/null (the code is in now way or form ready for bug reports - I don't -want crap filling my mailbox), unless its a patch hat fixes a silly bug -somewhere. Only experienced people should in any way consider sending a bug -report as I need useful reports, not junk cluttering my mailbox. + (*) imlib2 + (*) edb + (*) imlib2_loaders + (*) evas + (*) ebits + (*) ecore + (*) efsd + (*) ferite (optional for now, but recommended) + (*) e17 -I hope that clears things up for now. +since you got Enlightenment from CVS (if you didn't you should have) you must +get all of the above from CVS - because the libraries Enlightenment depends on +keep being updated as bugs are found and new features needed - and often they +are not released for a while until things settle down, so make sure you get +the latest of these from CVS. -In the meantime - have fun. +before you start installing the some of the above, some of the packages you +will need - if you don't already have them, are: + + (*) freetype (1.1, 1.2 or 1.3 ... NOT 2.0) + (*) libxml2 + (*) libpcre + (*) fam + +and possibly ... + + (*) libjpeg + (*) libpng + (*) zlib + (*) libtiff + (*) libungif diff --git a/config.h.in b/config.h.in new file mode 100644 index 000000000..aa79be36e --- /dev/null +++ b/config.h.in @@ -0,0 +1,140 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +#undef C_ALLOCA + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define if you have and it should be used (not on Ultrix). */ +#undef HAVE_ALLOCA_H + +/* Define if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define as __inline if that's what the C compiler calls it. */ +#undef inline + +/* Define to `long' if doesn't define. */ +#undef off_t + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +#undef STACK_DIRECTION + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +#undef ENLIGHTENMENT_VERSION +#undef ENLIGHTENMENT_MAJOR +#undef ENLIGHTENMENT_MINOR +#undef ENLIGHTENMENT_MICRO +#undef ENABLE_NLS +#undef HAVE_CATGETS +#undef HAVE_GETTEXT +#undef HAVE_LC_MESSAGES +#undef HAVE_STPCPY +#undef HAVE_LIBSM +#undef PACKAGE_LOCALE_DIR +#undef PACKAGE_DATA_DIR +#undef PACKAGE_SOURCE_DIR +#undef PACKAGE_BIN_DIR +#undef PACKAGE_LIB_DIR +#undef USE_FERITE + +/* Define if you have the __argz_count function. */ +#undef HAVE___ARGZ_COUNT + +/* Define if you have the __argz_next function. */ +#undef HAVE___ARGZ_NEXT + +/* Define if you have the __argz_stringify function. */ +#undef HAVE___ARGZ_STRINGIFY + +/* Define if you have the dcgettext function. */ +#undef HAVE_DCGETTEXT + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the munmap function. */ +#undef HAVE_MUNMAP + +/* Define if you have the putenv function. */ +#undef HAVE_PUTENV + +/* Define if you have the setenv function. */ +#undef HAVE_SETENV + +/* Define if you have the setlocale function. */ +#undef HAVE_SETLOCALE + +/* Define if you have the stpcpy function. */ +#undef HAVE_STPCPY + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strchr function. */ +#undef HAVE_STRCHR + +/* Define if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define if you have the header file. */ +#undef HAVE_ARGZ_H + +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#undef HAVE_NL_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the i library (-li). */ +#undef HAVE_LIBI + +/* Name of package */ +#undef PACKAGE + +/* Version number of package */ +#undef VERSION + +/* Define if using the dmalloc debugging malloc package */ +#undef WITH_DMALLOC + diff --git a/configure.ac b/configure.ac index b3ee27753..78c8b7df5 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT -AC_CONFIG_SRCDIR([configure.in]) +AC_INIT(configure.in) ENLIGHTENMENT_MAJOR=0 ENLIGHTENMENT_MINOR=17 @@ -90,6 +89,19 @@ if test "x$GCC" = "xyes"; then fi changequote([,])dnl +dnl Check for Imlib2. +AC_ARG_WITH(imlib2, + [ --with-imlib2=DIR use imlib2 in ], + [CFLAGS="$CFLAGS -I$withval/include" + LIBS="-L$withval/lib $LIBS"]) + +AC_PATH_GENERIC(imlib2,, [ + AC_SUBST(imlib2_libs) + AC_SUBST(imlib2_cflags)], + AC_MSG_ERROR(Cannot find imlib2: Is imlib2-config in path?)) +imlib2_libs=`imlib2-config --libs` +imlib2_cflags=`imlib2-config --cflags` + dnl Check for Evas. AC_ARG_WITH(evas, [ --with-evas=DIR use evas in ], @@ -177,8 +189,51 @@ AM_CONDITIONAL(USE_FERITE, test "x$ferite" = "xyes") AC_SUBST(CP_OPTIONS) -AC_CONFIG_FILES([ +if test "x$ferite" = "xyes"; then + pushd $packagesrcdir/src >& /dev/null + echo "... building ferite binding c code ..."; + rm -f e_ferite_gen_*; + $FEBUILDER -m e_ferite_gen e_ferite.fec; + mv e_ferite_gen_core.c e_ferite_gen_core.c.old; + cat e_ferite_gen_core.c.old | sed -e "s/module_init/e_ferite_register/g" > e_ferite_gen_core.c; + rm e_ferite_gen_core.c.old; + echo "done."; + popd >& /dev/null +fi + +CFLAGS=$imlib2_cflags +LIBS=$imlib2_libs +dnl Check for db loader. +AC_TRY_RUN([ +#include +#include +#include +#include +#include + +int main(int argc, char **argv) { +Imlib_Image im; +int width; + +im = imlib_load_image("$packagesrcdir/data/test/test.db:/test/image"); +if (!im) exit(-1); +imlib_context_set_image(im); +width = imlib_image_get_width(); +if (width != 7) exit(-1); +exit(0); +return 0; +argv=NULL; +argc=0; +} +], +[echo "checking for imlib2 db loader... yes"], +[ +echo "checking for imlib2 db loader... no" +AC_MSG_ERROR(Cannot detect db loader: Have you installed imlib2_loaders?) +], +AC_MSG_ERROR(Sorry. Enlightenment cannot be cross-compiled.)) + +AC_OUTPUT([ Makefile src/Makefile lib/Makefile client/Makefile intl/Makefile po/Makefile.in ]) -AC_OUTPUT diff --git a/configure.in b/configure.in index f6eb54856..78c8b7df5 100644 --- a/configure.in +++ b/configure.in @@ -89,6 +89,19 @@ if test "x$GCC" = "xyes"; then fi changequote([,])dnl +dnl Check for Imlib2. +AC_ARG_WITH(imlib2, + [ --with-imlib2=DIR use imlib2 in ], + [CFLAGS="$CFLAGS -I$withval/include" + LIBS="-L$withval/lib $LIBS"]) + +AC_PATH_GENERIC(imlib2,, [ + AC_SUBST(imlib2_libs) + AC_SUBST(imlib2_cflags)], + AC_MSG_ERROR(Cannot find imlib2: Is imlib2-config in path?)) +imlib2_libs=`imlib2-config --libs` +imlib2_cflags=`imlib2-config --cflags` + dnl Check for Evas. AC_ARG_WITH(evas, [ --with-evas=DIR use evas in ], @@ -176,6 +189,50 @@ AM_CONDITIONAL(USE_FERITE, test "x$ferite" = "xyes") AC_SUBST(CP_OPTIONS) +if test "x$ferite" = "xyes"; then + pushd $packagesrcdir/src >& /dev/null + echo "... building ferite binding c code ..."; + rm -f e_ferite_gen_*; + $FEBUILDER -m e_ferite_gen e_ferite.fec; + mv e_ferite_gen_core.c e_ferite_gen_core.c.old; + cat e_ferite_gen_core.c.old | sed -e "s/module_init/e_ferite_register/g" > e_ferite_gen_core.c; + rm e_ferite_gen_core.c.old; + echo "done."; + popd >& /dev/null +fi + +CFLAGS=$imlib2_cflags +LIBS=$imlib2_libs +dnl Check for db loader. +AC_TRY_RUN([ +#include +#include +#include +#include +#include + +int main(int argc, char **argv) { +Imlib_Image im; +int width; + +im = imlib_load_image("$packagesrcdir/data/test/test.db:/test/image"); +if (!im) exit(-1); +imlib_context_set_image(im); +width = imlib_image_get_width(); +if (width != 7) exit(-1); +exit(0); +return 0; +argv=NULL; +argc=0; +} +], +[echo "checking for imlib2 db loader... yes"], +[ +echo "checking for imlib2 db loader... no" +AC_MSG_ERROR(Cannot detect db loader: Have you installed imlib2_loaders?) +], +AC_MSG_ERROR(Sorry. Enlightenment cannot be cross-compiled.)) + AC_OUTPUT([ Makefile src/Makefile lib/Makefile client/Makefile intl/Makefile po/Makefile.in ]) diff --git a/data/backgrounds/view.bg.db b/data/backgrounds/view.bg.db index e27af174519ae5d1813978be3e4b17179329fca0..d6ffa9efb6893e329dbc1d4f78b25906d7b00c46 100644 GIT binary patch literal 57344 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%0A+X+^))}b7;NP09vqrbHqp!YMbslZl!!gua zz0}J5(rWa?fjL&-er5PKX zad2Jd$6$)JdUJbE7x>i!9=*)r3l~>czU<}Zx!S@vCkNPi3Xb{kTN-fy+9wD9@u*Dfayt9)d9=r9zQ%v8C)ySUJ zJMnVm?+P0p{ls@K7XNz1m5wxVEibzHYtV($ zegF5p-){ha?&SOb%m1J5e&f?&qV`6pqaYYEX=m#gqb|otW*Ds9GMP|FMa|31r-=-D zyAekvV7p>$9Y#CGnv8XhlV8?2G!LIG)u<$ns)fZ4CL421EP(P`$} z)%+<*8~KW3cj|2TxY@;Yfx*U(VuwTd$_Ecau3}hMLB8_D#Tp#IuBq+fizPBRxFJ6}CP$ zFQz#du583pFEQY#EAF^D31OPc7Y8xT!7%uW$)-MX&(69$#P7{)={f6o@DtaSUhMd& zi+}$Do;lBQv4*b!Uk>d?Ag)*PqFZ@k8o*D zU$8AV_fBLS*jd-l_9EPBz{Z?4HgXc1KW?;3SMze=BQBd&oAHrDvH0P^mk<8z^EdBV zEL_^B@|K%<*lEX}9e;jdTW5=(99`vL(5aq-rGCx}S8F(mt8VaNWp9m7*zzjAH6smS zh^;>IG*2J;;=$HB&bZs3d~l^5JAA~#VdXLR^$tHcu59^QgUjC@6xVw7=)A>6ZuzmN zuX$SJmyO}Mn>xYAtsK{xGdA>BXB?di?8G~%*Vt4i zKIP!5KK3YkywZ`cxa`wUZgi6yUe?^p5eMtI!7|#@Yz#T5N5iubSD2k!bmwDF(wa~4 z#q~^AK0e>%=NVTcTsWO8{H=xEnrk&um-YkO>Ov3m&1EkRKD09DxpxE{>FH`77QQrR zTOKqs2j7*R_2<%Z>gS3lAHIfX`vSgo+|1)5mVvi{2M&DnmAPV?=SM^Qs@JmJ!HvU; zHyC`_jo9?dV8#li0^__iCkIJ8qH5g&5Bdx^etLNF_0UHjE*2M4ggAZHt z-l_PDMFVs4boE>;xav{wxr*cS&bjVtzp*!p8&^YCFhC-C;Zpe|x~hU?1S6<6zg z>6?D)i(h$(E2i48r=4|i*i>`%6GKh(f;{2!tv~P;+gexmFvNi&KJECLW5=)W|GxM8 z4dBn8eE%0!1XtOyriM;4pF-3W!MqGoqRy%^6j5Cas4wG`#;6YC$A^tLPDKM_zOFc> zpqS#r;->=UWRDvRLwr@^3&XvbluZq>t&6Q2%)5tcO=VO;Rdp{_#ls7hIXg^zU0tWe z)oF{1n0)y;NoZzXyz~>p5SQ+K8?rmtnddJS&Q3z}?ycGVYQh&UoonFIw@&=T<3kVp z+{XjQx+jhCq)A;$8!_l2ERgJ~>Y?t|T^=WGt(8y3%8mpggt77A# zCwfz^Kj5&(fjzF(h<;)<Urnvy!4IzZ*6D>OZgPhwroJ;Lzcq%FIsWRQ z?_nEoJf}(cV$>tn*ctHcAvuXDj=1tHFLrP|^M$V$40bf)*E)aq=IOC)hC9yklLIb% zXd$j=^SIDKE@FxW!@T})55X>{oWv8~Xs_ZQJ`LCJtP__nj;`kA z!7m-k*_`}5S0nNAp%I;}*0VSSxpv?nZtz+VplIY**i3_E>HWTe5|RTn#hxe z_JzR?H#*>j*jS#7%V6JH#< zW=9`$_6)Ap^o{+j7unT+>CaZ5o5#PL#NaQ!9O*-6e)(F5%U@jh^#dPq@nqvlJ6Cq* z;E97H4C{1OUvcH*?cV3Fn9g7|qiK0A&4;&h!@7Q`zOcm*lU;h@t&jAkyu~#~-)z%^ zpZ-uIJaPBTr@n*(TU_yB8=mQ~um+orykNLmS9iI2rk!}~X|T?O@rx%+T6B)%ig!7< z;;5#y&_jAxPl;{NgB|Yh#8q3**44#2PW*6?YdwOOb$Ququ5_!`^`PAN8Tfd{-LwDF zN*wv(pQdo|ONX?;FK*6k&wS*MH%|IS&hXU=N9*(`mYncSBeCJS(%9!S&8m?YIN@Fm zJoCZLx?x>Baq*)S4DrO`Q%yQU#gVK12D>`K_ADdfpCxeWTmJPR9Swf!?5dXd!GW(&_~05x`K1vbF_w07@0lIl+~e*Z zr}QtToZ`U8SZkBJ{9)ozY#1={TJg3vY~{~3-r~Ba4_i8_BP=|`ajy>e8TFGo$XV~v zj=d{>bSl5jM|$X8F{`0HB(8mm8*K5-v6n}&aWOBywePlhiHiqY@eTLRBJoyVJCnAx zFNd!3qYa(KS0~Rt*Z7;q7p`l+9>QlQPggu>=^my$>7bvhAAk4ll|Ccc@G<0vgE{u_ zs)M`?+~j3mpPqYP-~WB@_Zz@pIQjlR|1VyXd0F)d1EpxxG}xS|JL@uQCtyK+KJ7A! z@L?y0T|hCFYv(ORwpgpvwx3{duxHy2wVr?7%T87BQnCDW1z%O5H2ylR&cHYOb|xJD zuyMx`2iUHB1xN1A53{@+W(!k9BQ>Ej~IDi z_;guKhk+{`&#=5v#Cl`1=_5OguKd;KtkX+g_484`T4<=2&JirQ{P4oZf=NHMdWKDh z@Z7^ypExt{!%x58e2CLOx!7@HgUPaSBuW_^)14)7<+7<&FRkj#hG^t zFK4Mb`)22xzc>qT9OSN6xz%jBFF$Uy@f>#?=q-ny$!X^Js?i?q_T@@bIOY+Sd%0km zSvEL&rw-ik5D%-`dZwKiImF-r({p+C0H$Yk`ov?y9}jlV_QdM3ezAFWHBZ&UPYexR zz3XsO2khx^X9n-S-J30(>2DvV{xl=%ghL0s%nA~oJo1a`>)2G zYy0--Q(y76;N!Vph{st@ob@U##L-0k*7|WV>@Z-v(xCVG{Emk`IhuKXYUJB2(GhPk zd@b13%3q!1ewgL8&!$%Uu=S>Q5}x|&vqF7-*~r`M*u$^bG=ifC7Ty*ty^_0l_jGB` zKJIKV;n|}j-|A}C?DtMuW1n_J{qFZSfZzH2{>MhNDj|x%Rt7A3 zRw?CNF|_#0BCCZhJU-%7X{z8iEk3nl%f`=Db(ZIB?0oAE6^g;py~%K;3I#i1eCK~Q zb>PKM4zVyTN_ocJzPe4EH-}|k4$}h9)ugK%*83FFhuZ!IAO673I}&@Be~$H$33iOl&$*2dFHE*W+;F2WKUl8(AG@J<6aH8dE2O=K5o7q zf4Fj3{L@SvEj+`bp*-s98!~%migs37v1dzHyxEI!#YGNvxL0F5=-4c%uQ+(=g=2k% zzj=6k;p`26pRzQN!|XM`&JKLf@NlQ8)hDYO<*?t3!;}kGi`{&gWwH3tiX8{|`d?jq z#N%Z4bBISW_$XfNAkJSL#?>r_qjj2xszXBcKGr&tFYAL+~Z`AHuiDSV|lG+ zksmF@;n}CxxLkg5KAn9tfyJL6ZpE2DI*3tU&vKY`HgV;MTeIz141e0NeJ{Wv(w{PJ#4es8)9+k6x z;USMY#o{iu{<<#@EQ{8#>DJshM;078#CztKMmX4W4)jic`IviHdf~sV>z!Z*=nadO zdqnGYo!uQ#?)I(o`HjOPsT%A8{Aw9tYUoar&({7CVl(x_6bs zJznDJK_mG)=P>Qz>0P7ezN70uz4_&XWBl#GXOqKK&v0RvgLZun#!ZZCI=fo9+7k<> zD}88@{_1d#PkG_V#m;8IgvT#U(}8CE`)$V0`Re?!H%G3p%7K?W-dDKLil*7CakV`8 z<>HG6tho9Nwdg6H&iY#Y`l~1MwfI#}cyhLAg_9cfKs-GAIN;s;gpDT74V#4@4)*j; zKRy4;KlJy$SD8?O1|V977eJ-qVC87DUPuwD795pR0Y$QunWIQ-$_h?^L_ z(S7&o5Z@HLngUo|^HYO;F|@JliI=au>S7Zwe>gsk@qp7O2EOji6m0(0hPN8T!{p;$ z&N#)tXL-|Ay>gmSIdG&s3~|NcU~TS>L!3NYFuTHt2OKryEx%`dHDkD|lScXA#cuXt zT6C^%dG)(K^d^JB*S*@EZ~wO8YR~`m3*CH@<1L>$;51Kc>VsPjHa=qI*8@KE@GKVR{At_2 zsqhoW2M3ynmzN(~_3|?(YA|o=WaHmi#zl-}AD(+WPkh9Q*H2fo zN*nv?HkTGZ-!$u2ICzK4PyYJk${$}mVA4elyTu<5y3q!Pb6h|8^W%fp>N;Q8IQI>K zpZUjy{^DWd$=6)aKnxzReAbyCe(xUQTYYfF>I;9Xd+$$miKUNwx!~d4EPBRC9DeGz zXf40@0AIX3t5II}IO`W&yz-+Je>1>WjD7d~X{ZMAc-hB;zW9o>@UREhb7us$8sM>6 z{P>HUIj&dXih%=9jG1!nvp~F_@OLiNfTz6f+00$K$jPpz`bT@(%45O8 zhc9e7*U#ha%7;c`V0mBTB(MI6<3khtapgxJHS!f}hUAjJ9{9Cnj}IJqXos(7_Rag* zX~GT%Up#5c<}Z8Y>z9aF`8zLRyW);BO!>vi$Jd_NW&!7PHzzR76JI>|ry0NWfnilU zp5kew?{ce^7CuY$Ol_|C$j`?N;y_c^_KVl=eswgL;w}25quhAo!Cy|8eB@P!cdh4o zz|UTD;9gBM#E*t_ki)$=&+gT&)}C>{)Wspd8uo;D<9V^w3}Y@nC23jHmi(SeGq{qZs_cbkCbr)%!?Wiqml@}u)}4Jg>XwuK{-r}cOPtxoo1W!_V;<)7XlItI zLma;H^K-4A>VgMLUwhx^5&n4Cix+#GXr)%?11_yy^~;{T;`E}krLQ!=haZ2w=951R z_2>_6;@9tgzx(|S;P*bi|DjO>noRDo>GGEB6S6K*J@%@Xoig^RX>#DR@$eI-*#b4*>;L}x2bX8~F7w)Pnea}dI_bg(zFOoq zCl+pUtILEoA9BEVV%YF{b8I%!-<3~&F?)FEGyQuT$QM7pIEn2ITt0Q#SC83+O>b|D z>ZFCb?8CZEEg1A=>paM>FYNf>r$_GL!RacGJ-Dzs_4I4WukOyFtFxhJ zw16ev8N*o}YQU*J$?d*c)ZM2kzVOu}wmF1ZpV-VH?&b_{zG7jqdxvC~-@bf&dI#VL z3vW5~#|)`S9pWtW!q2@~q`w;EGFR0tA0K(*BcBCBTyIeEzPXBDZMV-ye6xiE4dr$f zuRmh+gGSzK^v5}U;qkLaGx@y>SKrlY-#p;h`;iY$Y+^mji&OmMRa<<-;s{G_v6g%B z&Z$^Fa;sf^YT@Hu<=$-YU!I3A4tk=7=1p&Q_Rj~7KD&B9`Gwi16`M1sFSuH;^}GD? z;T67n*xp5a?5l<5`U*>5=&2T1c++hCdfp|@jM+3BaMU3;J3qK$(o+3w_UU2yCLlL_ z`SF5f$xBC^^oEZm4_y9gfhjLPSD0*`;lVI7>ZL1OGsRDjX)6v7T-nVV9hzl$?D}KA zss#`4cvrX1==>JvX_2Pb~` z^=_v}IPUqG8M$bO11y}?XnCgdzR_QO;_So0>y!VfrJDHRV~)&)cr$2Uti0;;jHf*6 z=3`Ht?!}uSet6nr>wTdHvHF5PKN_cDpBrM?_~I>2es=wLttQWEmrEV|VaAmm=gy-( z<4EhYF{|mvSFHS&-iYxIGV5|wt2s+oJj@CkZm=zQ@Xb(M*!Wnqkq19@dEeAq*m&VX z3;y&pOMK*{CEe`tkuzU@w381OAN;FdUbWyxGYeO?G~h2DH`uQ5LO{_TF zVVftpahAJfR@Gm9y*K;Ipq|4POItacLmb)VbA=&Zo%lLO^FO;ix`}0{nObpFk9+-v zMH6;Cm)liOa8?gYn#w6oeYlBjrf~2~rxs4>SdQi>Up#T-S6p+MMsna%KlB*h=Hz1W zqAQI2@Yg42T+aN};@MIQOz~oAV3`M3nC?5n@>#T0Z`|RyhvB`TCvwY$k9c|J|I~{Q ze?IVByY+VWxAb5_|dW_f3RP)wL%lf87<&M;FE6z$Tx2TwTSm!*CUggJ)ROQ5&W3 z6k|`El}#S?dN#3sU8P0Jn*g7@rbT}Id_(beOb@m=#K%O6U9QV5el^`aU#H2Qd)+q) z{PD*L-%a0BFFvN#8$*oTeWO$pfBg8_Pdj_^TDZZNdp;Lq-+eXEjE_Dw8_RY4%z&J@ z!tcK+krQWe@Oqoj(l=Jz;F>Enm|{8UYF{k-w|&CNUbFD7qnxnY-y80p;nXi0H$S`H ze)B7*8OB*%W=P$*!lb_%_~VO>NSsL$22nyPoRdU4GjOf@)9>V>HuG4it6 z3)8-H(OlL)xH#_9>U5@8X9os;zn{VAB(eZ;Krdn!R!5 z)br*5hFI@IwOD+dUp&*3e?7q6vpsS7;j1rtTAet+qduqUiuO3vd{FXYz_*JAn zpJ#7Bvw@d>ij~W|k)Nf8a*0<5?rhoPh>KYJILf0oJl^LGj(zpwR!z@T1<|FogAJn+X;&Rb?A3~}~wHWOC!!S}6y{b0k@ z!hz0vKL6&{Gky8OmX8*EtCbxWda&aXAAPgO7fu?fmF{8SXwJ7Jq$`_#$cw8p z1p~I4^d2u5#oLF00~}YnSUA&6yqx0U-qL2Ol;| zjqvridg0*)3lEFVeSY)9)#sVns#fO@cIQ&A@p&|q-@f=T~i$|9A}*5;+Hnl^7yf{$;lUf3#Qpui?iYio3480SsqIaZE%L^ z8F&BkrU&-e;i=zT_50uNet!e_{m<`zZyp{ZDMvxM7@~-JVR;O9@P1iEn~B zaTH~PV-na^jky@Hb%;7DW~)ldx$liCzR9!)L$z`{mFl51C19~NQEXzxS#P!EhQ;3$ zQL$-=i#(P%9kQBQQ{@+$6Gu;bItf#K?CQoTJ~S4Oi#;{C;=*p~X`v>2{F*#|>^RER zw*_|3@>Hiha6H#@_?5(_9_2z=@w&`?QqDy}fdTZ-(9T^NvwFu54ELdZ9*d zXp6=)loO`>xXA%SJ?_iR$2}Wu<>Rks^1!n%_k8c_S9+xzvnTb>Rocsu%q6@ScsAD-O7+LA+e9 zG{o(#N4;^5%raj-w6J^<(M*0z9rke)TRyX>4z_fUhdS|w?TQ=jmOb3Wz{Rm& z-p$UNeV=1#BVLXAiJNbaY_RAa4>hRIv;1TL0ap(a}5spd4b?_Pakn^!f9!w=VH znXi>*a>{4LiB9%mT;D!jAuQ;%jcJRJbN$DfggW(?&VjDIE$^C;pLmY>M={{ZeK17rWFskVZg>)t>S&Y zG=K8hlN%0=-QzA!FKA-E*ev_4a^TVu=Uy*yman<#+q1d#-cd_&@|X|x;_6$fUpjD_ z0oZ!lJ5inDtKE6yD^AbUre^ixf`?wiF$ZZ2M{Vhb3l5%ff@AeLK`XHqE$F}(4}8+} zW4}GT)!%&Muo!W-!b<})*gl=?!&V2bu=(Z>4`=UE{QG`LD|^)dmriC=|M7bF(fzx> zp2gF%a|;U>d(IV%`jDMJ-Fvt5weppNFFwvl{5H#{hhFKOdd1Pgy&B8U$DVh$I9Qz# zb{xc+Uwi6hhvOL+Ha>i5j5B>Y5A>y{xcB!m`oU#`2Pb^|?5Vxk=ObS$f7s@Vy&juU zTGQQM^zi8&g&z&%|IFSqcg~FZy??ydahIpF8!xeH_Kcr}uU?upcJ;H#>$!!KrFU#% z%(Q0_bJY3k>T=Awy&(+k7R5yG4y5`%Soa%w= zoH{pr&6Ts{+2_3X5j#Kc5Iyd!!Lrm4u6;cTt62N;;Yu$xm?c*}ddsJ?=pGj}HK%al z)4-l9PU2zGjn2(5?(q4Vckf|m$39;*(K$V{vBQg#KC#gZpMUfa>y?a z4oyZid6Upap6cd%_UIqdhpLtT&rF#q)J9FYcCm zG3@o3O)fTA-ePKF*Wad-zc(cxSn`XJr#BVu;=*ph_TbvnV{dIeurEJ6IB}qnoSxypGcSw1_m5}Vx$24Kp1*u% z46az%?A7BLHXrx#=F_v9J5Tgux6A`vHr&OCr>7+cpMLGg?;9>(+SzZO;E9Jv7grj{ z%ZINRxa{uLCT6pD{(Sos@lJu!;-^3LgMQ*@$cM)8oFB83wmxa_$3bm)!fC$D4I56) z;`kgFb}{Lq?#__e##c_Y@xj@zb~A2|O&-{07@qp^jZ3-t*%Q+{U5)Ll8*k6};iBf= z5$aQ?_lQ2#1HQC|@4B8`emM1n-LriCmCv)e&<`~`pR_bfY`BP5NA=4^1J7!K!5>%J zHVbTcs52hwW{bajw#6Oa_4zd2JlvI^`}OLs{9$!Q)P%ENdvStAv+7k>{y5@|n_TQ_ zaIX3$EDk5{SDzJX*K2v=EtiFlr7vQtui0xKhMeM^dG)A+HhlEdv#ZY_K4wo2{gT@% z7LJ_iDJPv^nTdGX>+IMsKR%vmAunwC__~+VzIieSdI}piT6h=YMnCtsm{Ho52bO%W z?7LUDd->&sTa5eqK^Jvcoo%(~lm5Dghbvy{fbEK}czo!Cr|*Aw;E%8Q(0BfNh4c8_ zRZjc*C8qlL$YtSx3k(ZJeQ<@VPO}H2S;5D7v#&0Dof9@3)TI~AjC)ve;KfcS9N?uX zerh+fIMg%sxM!pFo3Gk%#A$v{{cN3~<`zFS`)n|WbPxxR9T&Xh;#;0{z;m;B`*QK6 zi+bepPKV(+zxtw9+|476;P+mEB?c$j;pMqGbB(JQd;EG=$_-C0d+E)Wo>o1>j~`6@ zEislo9Njld_RXm07Jc|s+kDUFT94I4Kk;-E!^Wq2_^L~T@R4Brne5(w3i^ zVLQw6(#dS6qkA?n#p6mJ+;IuR{Nd5O*Atppuhoig^Z_AMk;#5OVE!r<#|*{NZ( z@0s1cSlldJbi`G6Oo?3b>x4y3x#aG|=`^mem;b3d938Z;^LYC-dQZHVsefG5s5`jn zAZ(uka*30_x1|`k7T)U87hQ(01`7|*u=%?3;TuPj)G1yK$3-rY))FSG}3u zmmeSc$|qh=+~a7m^=9xaUaTuE>F+tM36x+RUg>Qm3r`%*V?Qc z7G3*g0^6C_8#%xD3eT0U_C2c&$9hoh zu6)c@OWnBXnVf2^uejM)iyGxHSA06}a^bI^{n|D=YT&DOOC1(pI^lt1vHB}s-1g50 z&btOV(g0S!C~%+wo;ccr?dQ}c>Lh2K^#8zar10-*2Pbg!%YW%z5nz8 zUK)DF7k9Yqu+;9}Jj&&)*{?6~yt6uc>geCs@eyyOJB(`L>)t*t?r|1}iyGwFUlmT5 zddAl~%N4KQ%X{A)7yq4y7iM8aiR@3RCetqzaBfa?H1viapDHom0 z9IkNe_nA%S&I7#O$8nd-zNHsc_=%`}yz_kDJ>0>2-7W zzS5}V9QS<&-T@ge_DHv2OFNB_1dc*+~st3^ny0@lOvrz@864u z34fa0bJ(7pADXhkOp%7T-|v2Z1NfuQ@Bgnz z)mRjuk`8*7RrQpu+LTdw6{oJfI_q9HJiAh;H;u|ng(}5139h=qX2pw=xNTAow@%~W zK0o_?>dGljE%K<#G@2l9LcVHy|Mv$t?i=l4rYNpzkze=ZREG}0z*l~L@`$s??%Fq= zv|@Mqbl-p7jW2w-o8-IaBS+e)(b5BpzdHDR{%Z1YjEB1UsGH4NFVC+}k~D_by_(b` zH=a(vJh-WccAjagUYIy}Ls<2MUiQooY*_Z(+e;_8;}{;U?5q2(_`qSuuRUCFTF&!> zsYh_c;)#P8b?Cpv->K6Z_w|*Z1=E6uuYAjKn7G3htA~BUvZ;f=*y@G{9~ZIq_`-Ho zn>hDk;vipK=-d48QG++kxIFss?d>m2l34Myl*<7Wet5`hZ7!Uq(u+RT|T|LVo z#uCrYA8#|wW=8nA*MIYfH=DWji%)Iq*Tu7|!F<9?tInHTa_FTTxOq-HZ%=#lP7C{b z1E3VbpJm`VNjw}3k{c5+; zC2jRV&T6K!{GOYq@qg-p;aT5(rl>nz)z>PYE8f%RxOL?hR@$g7EIQF$Pt2pwRC{Xl zeljn5ZU687=KIyxF%F$bqi~4{zq;+yTK(?R1+K-p}^)7tA?)gm1>t{Bc)e(0Z^W*;?|7p(So|SbS#&>pREHw!qcMb0#_ zPhZ$rch=b5#7+Zl3QeYdYJ&*sD|zxxzEo1En_pSY$4 zUheh6S;IvgVv3EsT<$Fz;N}XOKg~SLfs@`^@M#QN?fhWiAyyuHY@K%)Y-ZPa!0Daa zx%BMp+1Gzq`YNX1|9}O+N?u)a>Zr{CpII{79Z%#co7yR()ZL9`9<-v!hK55jBGw$N!3j3Xx?(*7) zMT30aa~pOxIFfXE2tKZ2;MvzN=ail>>F9r5XSUOcT^xR9A1|8m#h)Ed_1m+W0XfW) zJp4SXMeVd?x8LUhUD-GH=aZ)J;EIJK9tZdI_U#Sdc(UV05B17pZtzUE=D2gfR}OJB zqcI%0@vuC%JktYi?;Q9$J9>T`VZ*@-Pq8%M=iXKCT=~l7KD}^+!&e>ZH&?w6nmaN0 z$epiR*!jSraec{$&0KhY!)32ddDVuOcNTs0#T-DEC z9&-oNXQ@4l?#?DWHQ|CEo^iHEKj%rTeK`DSi0}G+y;8S*&vc+K&Dij>>_eZ(;R2OaSb;@;PhryZ`rJ z_xs=Pet!e_lh5z}ueY)&%tb&qb(C>ROriVUZW!qxmi+DMAT_X{EH&V$P8F(^17mM` z7&?T#dl;DV;jasF!&My|S8Ee>eiV~aj7433_Pxo)hR-itesc4Rmo9q7Tb=lrFq}-P zZ`bf>1WRr)xWmH>zWlxA*yv-Q7JWk(W3O+KX)dP@ZgQ_4Sn^onajQl)+;QO#Pb`}r z=#6{z>tCNRa`J7W)C{YbCY&8EuI^2}D^4&i&#>ZKAL1sz``-AT`Kv>%_RI>qUWchx zd+_Yh6F;$f0S_N6cxkB7Xt>ZANPr=fVc#n8$=oB0(h zN8I4Mmy4hKba!pu#N(-7=A6d(duGRnkCp!Nsg)k`z~YN{OI|rWn@!yMrXofTHL49R zec9woYkk!(`}&Bt7~i6BV8f$#ntS=g!SFu9OT2q?NGBLL@KF~#?0CSXF`GL2v{r*y z&lVr}&N(gQR#hD+?%#3@r@NHiC(Lf#caMMfk!B0*0*xmDQPSY&zu44GoAYH}t6$e)yHoXtS zRSY`}*Y|mnTQAHXKRv*+Uz>7;%a;!vIhW(`^+-;7w#=E;`$BzUEXEyKcp znjcqJ{bIuzU$K14Vc(23U+nnQH#%8j#M^_H-u1w_p^Qyjd z&{K=hjaGyr69OkU^h*Q{X`h=ex-iPA#)w8;3&foVLv&hH2 zoN93uqn6Gsf4J$b2KClI^UyiQNBub1r;}eKuKaNK%ukKw!p*w^Pd4$c{M?JxFTC{3 zv%1Wq7cW>DJ}wp?{WEYH=-SB!o9J;R}$ zeE8rfr$s}x+V3x)`17;OiamVciV?3Sc=1g0_GrjoZv50G79T$HvYP>1;nUHc{H|aZ2ZE#M?ctFmUBlj9z<&hdX?Gdcn>n z&hoBmo;>RbAGQ{JHM=&?u&SfaSNq-z=2We)d>*>WPoL)8)iW;r{`b4z-vIvf^ZQ?v z$?|Was)jDoqM%GBv`+;r>j-}=sV@t5ogmCrt5RyK)D*Fcw@eO|RiF!U!q+kRd?Vy% zFFQ5ivdJH=7+icB;S)!^`1w@QO{$3%hZjC!)1q$}a=cHKdt524#%dOC3hIhD*f4cX zUOwVr(11TqFys^y9!_H6xn~zIRzGOQu7;hYv(w!Kno2%m_`sISDp#0t;=l)AIpp+f zm1cdKi>=4F^M_%vn;kspEndI-uYLKH$Gse4@PuzqE|{zFd}ypTIIgtzZO`JbR$AaJ zt{L#{*r$g%z_}9vUrsjs@et=3Hk&t!*<*tz*XH1^=1II5eUZZ(k)E{f*Q$8D*l~nw ziJ=W&|0e4VCq{05{N+`vZyV}2_wvERO-;0opE&tw#+I*G_0dL*Soh8n-f9!)>e*Ss zOCCHe7|j@5_x}A;KkUh8(N#a##nD8a?%CjW)^NAvjUNme&{uxX>9=~W4!rSgc0K1K zKf8Q%rb%<c7HyWY}RZFs>Kt0sMLr74@f>4|$9y7G~aA52TG_3f!s z4!OkAi+}Tj4^5kceexb>b-^*u)}GIfgF5>p#@TyAt<4*s^vA=!8Ivn~`OF$_?6}d+ z9HcQ`{%d!=Q?EIP1z!wIy_Hu@eRilVeth&64?5Bbmb`H2C0~2aEUo0}95gHRmWQu7 z;-e0=(+FSMu;HYhe(lS_-@=Ku^5EQA^WP?Tr@+VG66alGKGckhTGS+7t#Rk8rshT- z9Mo!$zi08V#KEJXzTk#GKYi`ptM2(8XMMt59M@6M=pmo<;zuW+iSp~6{mzc-d%=)bt?4E=9a=Q958F&s zqul124syYTCth!HglUg9=A@dM4S4X)Q|CgwXP;;M%rIPaxuzXVF*LymUwiuD{Lqp1 z>J#f(3|>Ch#F!VpG{#vi=^&21a{?D%dE_)pboU%ibG&|BFXg3+E3I(&%+l@ajs9Es z;3qH5)DDLh>fq~YeqqW9i#=ZM#i;>~dv&Q-4l(qVi+1+pXl~qxCzc=Xu-L`&5vLb= z!;enz=*O2P{Cq#CuYBw~-+XY!NB`lz=iZ#CTYQ?Nk(~7Ltj_mL&R|K!a)s4Q;{ZqPYQa$+8d>2WpE8fLQv z4;Fo4@!zk|r@wSebJ%d|yI6Bu4~p--s1|jmTQ%TM*J|@F_r8~hT`%Po>)whVEP6O+ zc%-`;;mT>AX~EYs9bnUi_U6Eh(BG9`*SP8#Uao4U7j0%BL|#j7Dr27n$g6PTa7I>rk8sf`0p+B zMyy=s0zMw*N8Vrlyx;$R_xl^bpM8G+fBi4om;`JfV2F)sRp-Q*=#-}*mVBXOClj{( zF-$4Xuwhb(5A}3PEPFVnKrBD%@YVS$wFfUX_}3|az349(xUs9p^iZ85@L-rsxSp-* z;)9!fYUJC$-Ol%L>0)Byf&>0|iD#!34o#?9d;8%oUVV7+FDGnq)hFj{ca?{oUh1MR zOnGsI#h0cQ4f)EYUflFZUa{rC-N~vxdpNZ(Z<@>FnI_&meB_Kbe6`TCoH)S4k3F66 zf#s@ZeBt4Pix|8tI*McG)2Bl*>V;+E^;>TDR$9RD&7)cK7StE|#7*sLRF6Dy6=SK- zDsO)Hq?HSKVWgB-Z`HgYeX7PvYK^~a|MUe1n%8y@h?gjo8!s!M!xUTx+>ZaKWQT=9l2 zPMz}UwOo6nKRV&EIk;!nX?nfZZ!tb4@n+}iSuQxmkDhqQ?;bb(neB4G zZC+sW6ARB??-lpeN+W)*a*Hc(y6~r?nXxA~{qTijPmOAEEhk(WdlwY%ULVwKR>}oS z&)9LWmnLHSreQ|#fE&LwfMu3En=e>>GoTS%HhEz3?HsBnef6nYlUZ$Q7vtOB&dK@0lgA!C(wU}a)MugE)rT7&HT4S! zSGoDCNp3vDv5$us`orRbCoK2)$hEn~|EXd7cMr?*&QK4|a=BW1Kzmm_EwT30X{o#Z zi&b-6a8xIbAN?;c&An&T!yhIdW?IkW!Bu_o^MNH7+w@S&Eqk8r$s@OWIXv@`$I?5# z>fxhz>}>GmHW%`<*;At#GMo1BECvRhaY)-@!gg)OXaHA?I&j6Y`}#1v^XYSCeZ6Pc z=E>&|uDCP@d|=^gW)^d`%m0ptfvdAAPkm6EXT4Qdp9Sv6`C{PU3{!46uKH)`mG_p< zjQse}6W?sH!sSC}*lJKq+|3t0tLyOW_sowbV)3UX&gPkq9Obp|TP+Rh6JNQf z%kfaZI@sM?>Ew!g=Z$9S!pC2>)r}9m%$QiUdFDe4{i1og!sJUwd0o{|p8UnL^EZq5 zPV0L|*yC?cE&b)hJc+@hGm6i3yzKnMx~~Uv$>E)2nIE|P_=u68maz1} zJgEWSz8877TIw$kZg|KSXS`{k_v|of#8)hQ_r>5KRxUPt;p6H2dp1M$fIl0~e4I!7 zV&q|WAC7zZR>!@g-SZLWcNW|*`8KaKqX|y5z#E3&Oy&)a9Ad*O7Y)pWUW&)d447xy z(9ul0SGRpJ=35SN>^|4zg&_}{9CT#UM||U^7SFix=TpDjtHU0DpO<*c1qVMIe2%Tx z$D^|h)1F@ItNrxRBYl8d57om@JZ!n;tkl0Vx}eKD{KlR{fFW>2PeW0l+ zc2Z4~TsYyXCNa3cQVUM5a(N@jo#AGzeQ>{W+6_RWfV>E2sJynOW$5BFlilDGY8aix{M z*{747_|aD`y^$AA8o8IlRUAH+XK~_jvR8~;R-Ev)#K~#VLr?WYPFltrZf{msy2uBE zpSZZlNgsH4%299l^TPv2v96vi9OKO1JiyNv*WRjn%TLX4ExF|9=bEngz~-wL;+l22 z;ahUT6^9SJW@sF5-!<*{jqCZ=6aI3Q#}zj1^qfBo{QTY2oOWK>>Zf|d^2OCT!pWzA znT5&Mw{bku8t3=CdX5W@)rAM1u-W9X*kE-=#Iwa)zP?51seRo1+W|id9xdT{SMm2w z;SWbnIJCl*zkRXl)+hFAQ*W{2)gdpQ^gX?P1B~b4omIVX&)B4dZa!J)329<6q5sCdR_a z?5IJ%dY9u*8>`u*r#$@VNhi2`tJkdAW4F|=_x5qtJ2`Qnxp#)#J|omCKcDJRgMD1( zW<9NWVkj(oWCmCIFa>~W(5&GM7GIdHYF$NXW^00%igIWDGsT6aL~;;#<%#ET|surJp8#o56FC-cWg zZgXHy{`A04oIL7duXg$B0Y4fv|DNIPEIk->#e*MRV6nlIqg?hnuj19(?6_AO-s1VH z#e%EX`pe%lfAz`ZnO%%kz3|eE#?A|TeWoogVqIzA3Ks^>@bNdF{X(WK+|FiP@RW;P zyjXeU!?F2;MO(P+?)l42_v)}G4}UqmU-i&4Yzwx$eCcT~UF_FSx;dM!V&HaOh)BNq;ytFjZt zmU8^y=%C4xLvCwak4t>{@HatI{h5$X34i;h87KE_PFd4}gFPJ701J2b_Qb>)Z@J;o z3n%;H+4))a+3D!MHy3RB!@*;E9cS@!=^Jih_`nF?H0T>UKl#*YU+wsca}Te3_Ug+Y zZ}mG7Fsoavc~Kh;?7^uY%XxX_6t4!n`LLN8{bHwsxOkZX`>ybNLx`t|Z;#^CCpXS8 zaTe3J)pYR5;@<%Lbp@7MU^(HP{4nsd@DE?D?k%wv4t&(Wu5W&A;vh%8QG1_UY6(}( zIH#Sr8$K=lm&d+1p9rws!(@krt4~Ed^uwN7aH>~oGzaXRXZdL8O+pKJ>a;w&maly{ zVdF0bUsqi5f!AEKTb{$FjT-QS?+Pp!yi7* z|NGznIjqhZJ52h}4j1ukv~pJYjQe4^stqPzwff{1W2xVKr2$^fI$PN4gv%FaSgm-f z&7K%FxY7}h-WP|b9P)`(1AIBt+^;;f+vh9BGhZ5+!{!|?XBD1W<(1Df9(*me!f^F0 z7eDy4Y_8d0v&#=dPP6P@9crQl4RE(Fcl{H`uGeNlPS0}cGj3w}$t$1QJj1bvM|H5# z0EYVP!+`63Y@Y^}+UkLOoWymn2L2X&xO>l>9S5~}FUrxZ<|7}D_UK{W@>hdA>Pb`n za#UwL-Iuv{b(ta34>+S_hPBuCE9GP|(C#JKk=lpQP$^CL3PkZ8NRX+1!nG3U@ zKAy$V1rKpzw$7eb{LDCx>Q<|oT(g=>;;%OGtV)5r|Cgp~SM>;D zHR2)O;$u%A*x@_3aaDspyQ-gda_Of&s9!uioE=xaPy-%()S^y)xZo)dym0yAMjKal ze49s~y>R*IyE9*(V5=o=?(w(qu+k3~v2gI=6F>O!%d0**<4YqpSM|y3SuCz_ESz!R zW8akxU(0>m)Gvm%VbdjS{BRM|c}R1y`X!gx&JC?#;^f{{ZM35`4dCO2kKW0{Zt$V&sD(Pw#j8?DAO7`u*JB|MR>5yIX&8>+APFMX*vWHs10oQ!RTF z3Q2a?rrLg!tD-8wR`=|Qry@q;ReD0dey3X>$1L7(dn9how6f zZerQ`mBnsa#Zrmdy5k;Ciu0An!UG=|xT?oho%Dg1X4!P!36=vddb;w%hfdtOH8Wm9Ni%mQo(!`aY7_ofP z3a;F^b`r&_&$X#{kI!^Jp6vYDVCgHL@Ws2|Jf1&pI8>*+dPy5`=2U&A<4UZ3Qc z9(PYieNhjbIKt}f8a5n#FE5O=k&nNHTN>J@hkf&mn>y5^Uu<~76@!a>X3et4A5OW| zf+v6VvU~gMg?Ug*v!G_V)hwntQ40=ghGWks8ejR?)xn=1|2|>l+kZKEeS#}qjq>7b zUraM%mf^vN**AP~`QnMg@UAa-sF^<;&lWy3^l2?tFKA%Tn~t7zPy_Acb=4Q2JbGr) zxP1IQ^HqoW!$Ypk%<(ig{N#bBJ~3**0Y^Sv%K;NV3nmOJZP>-Zpt0x8*OOB`4dmnJ zSx$=$7i+fL&yO#D_`~xKDL%Y6He0g`16Qm0cJ=LzKK9|NLoej^41;EB*9&K8wHy~V zJo(5AoBn*@c!ta0eKuE^;nKe|88uQ+L^J$m}8$$&Ac3*&69g^eDP2l z9dW~3kNg!wJ>l`Qhr7ksVmF60>b&7^;ei)T?5D}}x}0j7wx^xG;lW2v^{H15d+MNx zJvR7$MTYJCHE;a&S%2)~CkD1SdtKw?ywXMw*k~l5fA@grUEn<8Tix>UH#fL@ufbK9 z+VNwjqk8HyTW3HlJ)B2**u{(KywW)Rr^gd7W^wn-E@u0Oqi*%M;zkU-aDi_| zXeJgeEdJGK=J8^y$GG}D(K~zW{9)5hANiOCesajg4lhpP_}O zigCWu(!Ctch`e&ygQL%`^3p;4TYvS_2BtXwTOZ!TY&fv-f$f|+>+Evk!zPxd=E2O! ztrzO4kMM9?p1a~hCo%ZpFOKeVy4uItRel)a@VD=3-+em6*CToD(b#pm(B`F&d~&rs zTj@h9In4n~_Hx3ZLm2Y&5u+ZQaNuW7*yXWT58T6`6CM24_}<@ z>vj8bdZrzl95j}*`ozF-rIXo{i+|klm*edV3r5&{+~X@pzrg8k&il?N*ZZA9FS_Ar zk3Rh2^K&L(c*YMWIeeDN-;$pn-mYeZzkSc{)xDbZ`~1~uhWYfp!#)iDxOH~eaKjZB z-!tv|T!PEL8G=z>H7)k?>A9ZhCtr5^`W}DS*03%HPWSBcdsd%CA3XF14-0;r~gLkX{7Q8(C@Bgn~^s4<-qXW;% zK9#<)$slHXrv`Q^6`Q>)1=;PhVQA`ltBBQcY^mn0Q>+-Bw%^-BXT(!ojQICtQG&lX z9oSzZ4ww2=wqHkJh=s|2({g;P9SXvU$ zIt|Z0{B&~9&s5M#4RTkn{Is)QO}MKAS9ngm<;3z+mp%EKXd1kq`Pq}7uDvZ_c$SMl zZPE=lpMdc7fnQwsdTYXaf8%Rr#Nh0c8&_Cx;iX61?ZH!f|2w7fm;-MLr-841bv6%b zpyjw~WZs|nULI3Cmg zxw3t0=iB=DI#1usC?7TR!IKth=xswE&+GB|I3N7z;_6vldI*b-xZux6eDk6{_iAtE z;%E;CvFfGK>ONaOaa2P((nxMx@bGNkY_Pe)g3k}8+&Fl)^pCF@iW`43U`E#a!{oy* zk1H&(V&s*FR-V;K8{GNC2L>&x9}dmL$itU*{N#b>-m)*&5@*pw9=5b_#f_HU=5l%V zE)m1dA9nTQ*Ln1QqM;i2!FS&*;>E_t!e6XB_=|CF+4RXAh?kE)E@E8eAI{Z*n;bNw zJH9aah}R$Yu6iS``fzgI*!bv08pDI-N=La}<);znP{)_~0EDyVbL+8pO~7ANOhP$_GaG?`Jjf7uSrsx6D9iqkXY@frD7us8?>a#UosK z>ydt%Cw(%5u+y0jeyjB~hHs|m?M(EphaZ1A^rso56%0ObpZDCrl*jd3f0*s_ zkvrY^TJ?(G``$DE_q_6l$8@upN^KfRvT>3?wvPy_Soa) z`7^J_Qy%-?Lv)qPlE)q!JXhHJ?R9704CtpGHiz!z5ho8jY_Xp8noTa>Ti~hJ9LeEc z?#=GSm`|VUa@ngM_!b@TjI(E&@vYwG1}0y7&Vt#Z1I~QRK5piv{O~-(V&gBDE1P}y z`|78{M2Q+=jXm} zaP(^Nmy1uQ1Gbe0YDf!lV)&O|Ji8be_~U86z4EC~e_Y|1MBg0bP_KAgn+}-#?1}N5 zpPKPv>qN+>581`K*BAb@f@9%?qug=fi@(!EFMMFKrw@MWGXrv)js4y2@Ywm{;NI0d z;LI*3JbXOE!oj>cojCGW4^GuZ4|&YFxq)k69rT2e4tTm}lcW6J3ha2vFFsB9TJlw= zeg5EK=t8207CNerww*FQY@%fZ*a zPfvI-JhMBCILcwK9*AexJDS2#k9>Tc9T;X54x1Y7<3$6SW@A?;erhW>Onf|xu?O37 z&sLprgXJC`p0v&e2QPf(hQW`&+_dsOvd^!Y>W}^T-#(qgjh8+(H!!yUV97xUA%_dkel_3+l$nzFBdOEOp{#Ph7Y(rafHW?tBZir`O`yJ?o+Kfg4`V6CAj5 zs-M02QyWgsmb_|)<4g?a_QlChe|*i7c(H2c-(2JE86SA&1_!+`WA#c-_xAO|b3EPS zi)T3UTJ_h}S+V57kfwX4-r(}CNsX{@p$9Jf*x7bg4;KzU zbW#Nw$g8hRF!w(!N-!?Aabv!*tF&S(EU6n<)eNrSjG1NgD?Npn8( z(}6~vDR#WsI?s6HBCkC)=BFp@bioa8-|295#+qmK_1}l_=cf;J(i_)i6Fv?6^|9F! zBPV;c;OJf~Jayur@3^apCOFf}`GY|Nz7~vd`H5|AoJadGp zYQWF6GeJ}Py({3+s2PI+S8mw!huLg3FZTF(&Zk&)!B@N5VBx?%9WG9-=1V+n)l`q^ z)a<$ElQ#V7gFXDsTRECFe)y?1TpGyLyO=M1tJnM#C#P7w6i**<_T@7puJCAK?r3eF z9x(ewho@&XxaZH8&9nJPEAjsQmyi7ZH{$h--Fc(qYP?ul(#f;M2W~y7HqUgj>bpIB z^ww2A=LUXuwb6{W;TMNHJ!qrva*I=oca1Zq4w$f;2fkwL)6l;O(}`y4u?I_!Y2#il zcKdj!5ig%%`18TrIi{nYP1}p(2S26;5noF^;)DZviK27w4U5slri4}*3 z1z$e*V%31V_|X47Enb_yx)vCwSy!0;Z;F@#)`udN5+wXtB`~BPh zUw?l8zy7`Yvgnd&G*PBWC6)>>vuB#Ig>FwJGV{?D%qZ+WyGg*ZX=s|o%SjbD6co!Y zPwJac>Un!KiFHg2|0VzrSgE3W)ZkNIyx6G47Z#fse-p&BuBn5sH4hyy%V&I7p>shS2_?uq#CdGZH0B_hdO5^-H z32@{Sw+XvEILPTLmj$0zuzo=v%U8aQdy z7+yN5&l?^#4XZ&O+VXeL$DUgG$srf5_<4q@9(m0=KH{7Uws_WiK4RnCTveypp;NN~ zPaXE_F5p<=Yv-6%XeG7G2r+cveR`<3nF|y66MGa4mMT;e4wd4jV3T z)X@Cn6~29YF!0xR&(*~ijygPtoga?&@PlKf^j2MLG@~C|SUA<+;^bs=rGyVeT2%r-%*~mB&TtDB0w_|hA|QfDv0$2FN&`hMa)}Tw0fZt6DilNrP%Ib` z6|DY0|NVaVS!cidR0l6XGfn`^P{=`1h&V8PtlI_Iws z`jiNRKMpv##+`o}ncw!2^=d^U^%s*Kv=0led?vTS-J1TzgS~6MbSrmj?rXSd0f)Uo zmvmQ4*KqVIANkFFee4DH0~qD8#SteSe5$ph`?F8exaq@s5GL(BQ~h?mznUi=P1OfC zJmsSw#i$2i*B`}ntv|BK$I%d*M(pG%UpV3z@}ns{oZSDg+;83U_~3>M4dBv5ooMLu zGX40$F~^RNTDxvt{Pa~Tz?vRpW~@KNxaofA9^3H3O&mkS&dj^fSi>AK3K; zPV(}N2wnKF#VgJDi0x<%fAyi6=QSSc&&HZ_T9{`8OD@&%tR_S6YJ!{GX&?rDU>W>j z!%R!p?s>Yi!3}qKaGcY{ytw*9KRKr#9D1p7HrB*850f3dbcG4qTJQhf`+W!Sw6phr z2qIGfGKR5)VAw4vC?g%m2eN3;8!F(O0@ih_oly2-@XJ<4u=$9`#yR#XD?63vBaRM$ z>AGsR)9_`hdh>g*v3tX2Yrqc+4>81&ua01ws(85*b-0RAl`lV4XKUUkN}AP8&f$8> z*tKzOn8#V}GtZG59D_#i#1+evl73a64&|ARIXLY2(?%!q*SY4z^a%?e`BWPknTrPu zzSXv_rMaB&z@5L^8}gvXd3e-GaY)yGoyI;wyi7!>6Try20Yl zKHZwfK@3k9JZ3&Pjd?hR+VWLrvCY9WF9yFf#X${e1WP=z)LZ^)>)Ow6;L%}iUlJn2t!daH+;S;G@9 zOc?DEG?ptocChHE#?JKz-qvx&!?`v40K95#J*{x#Cr6{W{Bf~PgYeR+diRNlru8E~ z+}XmU5$^PXFJ5`UDYiJ))QbjkbB;HBcraXxr4O468_&4n;GC`ghpDb?^$=a)%8?#y z>TC1ceiTby`RXqAB?i7jjx zY^*yM%Q;{1s;k~{o)#U&VvCbFu4y#;>FQ}usR3PPZUYmpn2vbN^MOG_=i(UFaV}pv z(WHGx-PplrBQA|`(+`evQkR*}hykNHe5^UbQEUEq@U7=)?-?yWdBEQ4s}JakEB^ee zGh06R)wg1~F88z$L(c9=M*|18IEvZ*;2KAB@v3J0#8+R~?vwf$UUt^luy+pIH9XfH z*@u_C`(K{&3r}B9-osvQw8WD(Z0%9{12(^6bYF;1EA_-vZD;|5Ki$;6&tGiSrZwm0 zvezrt)JJW^5g$&qW#7DW{O2=ckC?yBQ9yePVd2Vq=zG0 z1HL`pp5n6_t#L_nx#LJ%+UR9-^qMgSceOAlcO1p9N7&$K9T(TQ@X02P`Rhl$Bc8nJ zgs1bq(bt=5L@WH^ia{Gk+|4`3m%q4d|c~wbK=I+ym-|TZ|mmM0cZ2<W4JX(n*ra3j9yhkpyg+sGh z&k;i$y()(I=IICvhIq|6rwPvD!08&c0Z-2I!2^f(VSR0{H%~J)k-Kv-jONn@7jeXc zPY*{uBY$!5!4(&4@{J>Z`wl$#=J`0+uZCKu3vLbh!euY7=EZTY=V)hLZ{PR)-v7P# z`wrk;&))x^H#5fqJ5`|!baU=dNRFw}UCYKD)UF@{3@Bp2VGGA69Ja2pQVAm;8Hq1j z?5PdkH5|5ZDDGO8uB!@P!@L;Obxs|MswQsmT#F$e3g7*)A3nRxb=(|vo_KIv^G)G) z8F9>&3%e>TC+9k2<~g{q#hE@ZaCTiMnG=sMKlTQDM_r1)>pDPZ@t3Q-bd`Kz(cIw2 zj!oxq*cft?gEif2jyCc!=UQ(VFlcYYi5)y^&ht$VnB^01zU8fE^46`m$j@+IUpS|? zJHwhjkW<>ibuE^4_;YO>aVwTyWH4jcD^ID8z_kjBp0@Z%#V zgC@Sw@QIqnt{d#tOWo{7zPEJ_LqD1;51f7Su^WmFLoW5bxjxC*h46t@t#D$amiW@T zPYi76gRhvL7W1ANG3X4dHFe;Rqi>sh6Q+mR)2ZC8Kw z=Zj}#jANFG64VxV<@{}X~)j@tf!B{UJeZo&Xb?_<6 zFhBVZPTf=Dz@kC8)m0wmU8j?ySaFRbUgE2p34K=9`ae|?T=H4){9jg&uG=V_} z_UfFjahm-*eC1W|TH`x)9&5P67O#GEE*87KC6YJZ;yJIbIN)gw79MfIhn;mkGv*vVH;&*ETR z-1a5c{ON^PeJCz_xz`tJ&mOmQbj=nXT=w;kdUUVO=l0-j-FY}-c7Lmh`&2ym)u1}2 z8+#hKriYq1>LD1`Xu(bn&T*u>^Cs2!$=2l4K{Kx zJRc47{2kL27dpsIonf(|q0a*5+2Ag(*5yn)IPw#Z4IXiVVWb0l`SHSpkTFOHn$u5Zkn^BGX@(Fta~15# zBmK?O$r?_cl{66xXY*p?v2KkVSi4<1e6=_~&Fh$hy| z(bM2BZ%6nB{qQ#@j(E7kEHCl+$+;fj>l`k7T&pizdC4CpPOxa(yNxwQO~RtPM(Gj7=kz*o&GHSi!RHTo$^B z3UIMeeT>9qGmnQV%GPyr)TUY;S0`JaRT}HEXQwO5!x0u0td&!K_^~mnteoM?$6cW+ z@-wG<;_PU>HTVV``q0eV-uyQ^hbnjXlnYz2+3OyGIj}M0AwTuf z6RvS_m(N|{>R*|0>Ipu0va7$G!-b>XYDE**Y;hHvHgITY-Zib+v$ZA{`pUzOVApk= zJN?kie0SE|aRwG0=!EyoZ{Xlr@6k(4`k3$jQGYyKi!Y9$mhkwqp{-nD%e7d1@!@M8 z4>`#}een^m!5)|1NX^p)H<*SvQ;RW2H^V%eYEUinfg>gk_@*)5w7rqRH9CpS3N z$hrRUr1Z9ecl{)m+&p<`RL_bhzL@I8UTl2jfuA|`GslkB-JkkTjo875jSt=E;)s{| zwDc5;TYA8&A072_`w>5U)qLI?W6ibN;h0|P3J(wcC}x^;ufd{)Yx%gwz24<3f5%zF zp>_4FhwB~vf`gjiFza~e0U8*5!xFD~IT~WYV~1Bcn2XEog<-eNzx_<_TX)~9IgWTa zua@=_zIeivFCRyosTFW24`r*f( zEesmC76(_hox^v|M(xT4wmQSN#%60b`3_(B;<7QypPzHO=SO>^`kPOenfI{g1CQQ) zql2%U+(&Zd-zReSq@3AU!-p^IdJ(31T=1g3xboxco=`8>Z239I11>*xDmE_S>J>IL z6OSf%!FG?*13o|Nu+7n+9(6Q_m$-6^XIkMdcUazD#1mT_y_B68`cc0XvmC@01Gara zAF_ubzWj0b7Ml)mjd*wDhbL|D7sGzleTG|k%E>x=y5Xlju;gLhIp6tP?c<(e&%a)z zE8aeru`_R&htJlzBRl-?#t$z!!W370z2>@}avzI5?`6Ek*w&COe3;H@tG>?huZFJ0 zwr}G_Z=B5Whs(a<8kcIto~_)(3Ks?&`8YSvmmU8!(I@3DzCKq|KH|$s44S}-7du1D z;yR`?zWPI4n$cMN$#opfi5*XC)q@`_@$|3#RDZzK(>;&sadYX)Mhw^0TMYP)uxZW4 zwfgcGOH8?XTX8=aY{ap~&!7oyJWdJ z=I|0H8~e3=(l!4$;L4WYdvh?^Z+SV_Yq;qn{%r84y*S}J z=G(V3;=;zoaprM|3x^gk;IeV;UeE*SrzXz%8~Rf2hBQ3gTul@ah@BO|5c>3A<|BGfdyK}HmU6C<>DiS2B)G;&b5mjW2 zd-K82oe$4i)si)A>nepQ40voPi*+iACAJL3=SvBl=`L_L__XL~%^Lz=JlIpEU8!nX zXKNidHiint%@Gg$9r@y$EniPccMDs-Y@EZ?8T5;@yzqc!9)I~7@}Ucz=>eOv#B;KEm(M0iAdL0&DT-jNdADpyKH#xx!2VeIcdzgH1R_n=e@S$HibPtGuGrQ_eKRj@N z%O`BQS;GTHc{`eem-h9ucGX*4WSkzxvOf2H##KhV`DhxQU@h*;o^sFOE34 z?jG0QhB$GAYpz;`NkeP)9Gbg^0~c>^BGrseQ-hHMj%*z9NHg4Ug(s)h)GnRyux7xH znC|L}+F)2X`f*$(zN z#8HnMaB*@kv4L%l&hwM@A(j|vP;K~#$xmE8CWdvnxQ3^faP2;KZhh)MG{J*zdR=U} zxTddj`M~0*AKH)jTN8seco_AQdD`Qno^p~uT-sMBm<{~JbYus&zKxT(bf+)7bT(J* zaMe5Vk+(H^=`VvHY<9D!hYol;w}!iGHqQCTO-;--&qiN~;i%ulq!-=gPcIzhsD^CH z4M%#_GjbQNb!!Gp@#W4(EOxl!&`&?;EGPNmC^l^8Y0S?MtDbSMx|i6Ar=P^Y-<-JJ z3+X8*HgSe&uG+v+Z*{I0;mFOkeS)s+#gUg9i)YyT`i4^O*2Q8Q*L>B@y4=OoGiqfI zWh-Vm;ECJheaO+eAs>1fIA%wG{`l2%c*Hv$V8E4^Ib7s|7yZrQ=ALtociPL*9DT*( zBc>ejF|RK04ZQ@jyx8NW2aFj{tp}#HIKaWrarVMkmzO?*i!&{8s~+++PfIrX%KcOi zRC{`fXI?xwuKB@YM-S_`;y!)w90O-M$kQ5a_={S68)6LpXfG(9>`XHuS^+Z&VVU$9c7(k2St(pa`K8 zIm#7h@!1!+5!#KOY!7 zmU@aWHtel_y3QJV$20Cj3-RmHS%WdBMzp1aCkA^%ZTZ(rZ0weDb8b!k>gSvW@M&J2 z>1BQDG5p1IP8T?aUZ$J)Fll5?-eSsy?nWBJ)(`SYpLpQhU6*gVizh$2>lYYy9loxs zEgflM9bY*3$sdRGE4IAxV}q04=I=-wdDNHUsF|k>p0Mx}12-|n;HM6b?Ve&-*FSh$ zmy>+-kTnDU$@5STbNJ{neI!q@{ zn|3=#`QpK!y>l^P;4P+Wet0`~gfHi=t&0y2KU%UA12&%O1(y%b20g`L3y=TY@5ZM` z>wNHXQhZ{m^lwk#5NDlaLrcj)tE2)a%4j{ylBrC2Yarg zoIDq4MT_btcQN_F!&k2C`QmKe(R};9{=ldF#luBzll!n2M_;fN&l-IFAf8&mE?4)7 zyl|2aUUK4Z9tW8A3puG3e0o@esjhK`O)uB!)|^nhr2bs z==Zyvry<@rsWEK%nUfQn8S}sif9vhp+2CWIR^q!h@K+ZDj$s~GIqEf7V&kYr{Mk+I z27h~a`vpAn;)=H&bi<#{?8S7{M|`ZuciN6?G3mq4njztOb(oHP(Gq>T3lRV(_ zqm6q*Og@f!cWN-~VCh@^Wj&rS`IP_UF3&OGcEoMwf0!3rKI!8q20n17@3?jkJ2%8(CntHpz=>ab zjGo}5zK#=j#H0^<>tf(3M>giF5qoy7o#Sm?@3F^0PtXfbw$^Z>yJP44#4+I1$Ikh} zH;SEJ_6r#D5{FJ<5sv)j z;9L!@rGuE})c;dHalZT?-urzA;D47dJ?)QNdi?m_Xhf!Xs$+*35Q*oX-?rTI_w2PPlB z@C|EXsJf1h2Rzu~!GbFeUp96NPiGofGY_jfP6eEsmyahWTY2aR^Um=R16TIAo7cs0 z#6wlB$wO>UsA5~kkw4xr#n2%>Il0ECJHHz6XD2>C^Ky`n!7qKBi;@0mqYuo%vCht# z`EXzu@Ntx%yQywv@7hz%u;Y7D!(*!_npryjkCG> zO-veCOCvb=vX!fN(`InPfvvqyKJ<2-jX3Io6Cd+(OA|iT84tCUC%!YUfkgxP(~d8V z_~AA68tc<`9C75!2RFQFz+Oxk;^BlRe}jMe^T(A=dKnfU`=G&>zWiXb$JxBT>Dy^s zJ^A^=Kg(ytWh)-vYMT!1oZ!NAO#?NRx0s#Nnk~KMs6N%r znsYJb1nDJ zulX!tKY#-tHvQ@Yd}#n%j5xTatyr*W;vN>Onp<=4S)++_-v+SJ2XMvHH;!Rhrw@F5 zU5krLb#V=orhL`Ia6W5%=polInule`g+Ctp!!_P==-#DMHKP|CM?7gX_waGuJ?Nf> z*|)-C!j(TParA;5($sl5;3bAyh{K*A-DuJM!G>nAX@ajB;BK%rXN^C+u;H@BUu=B@ zR}a|tt!XCr7xrxfj{7F)tsu243cj;_|VEyL!Q8 z2iID8!VHgHwW^+SVNYNwHxT59ZWx_*N%8 znoAdU@F(ZNRZWbuxv?gexNO9L)BSADn;su};=Qde9QNis8=Tj3a)qaV=_ZCbIjFgT zpSs8q5B>%lYwBPgzMhUNKI-f!f7*$qp6Vd~G;;6IMJ?oj2OGJ_lN~O2iUTiPwz$#3 z(LBEOqtD%N*{QpGzB<8{OWd5}Z{T61A1-|1;KL?<@WmHbesso{M)kD(#C6RVS2zaF zIIywqXbxY)dEDgBhqhtUC2ag~;nV$)=6uylEWX`0w1SC~b4R)LoHr!_`oOjy}E7 zM+~^~Pz$kL^QD>G)xuM0<}$dL!;_7;FzL?*j%&E=oj2zQGhF(66Y0qaOV9ZRLqE!s zhH#5dYfs0XkowrC3-R@&7_Rk`bAD{`kQ*Iw6HAS}70M?(cGhq=*c#^bA&vN%!{49- zUNo_uCR48wQ%+Ocp`E(n!A4B^$rqkAdGv-`3~!NP_bD!Wbygqi_?d@|m$i;@a=+3> z4b0ITIrifG<7NRUGsD`E6@4m~+m4JLD@z*jvtG!+^(z#_|>08Y~>l zu~TC>;=reYzD^5%ICgKcasN5iOYHRsF7WjT&G^EF#l9T%JYMFiF|Izns+~3S>|xWc z`&}=v6GJTX@Z!V|mUTzI^obizaB;V8pN4^FTDqoDvGHe5FLA`RRzKq#2WznKVBcE> z4EnQW14pj(@7|`Fp2OF==L?Q-Ol)w*>tUDM8-7&I2M{P@6eq?6tgi+$Yj z7h`J+3r5&%oZ~A-Z{T#-=kDF=wB1waMK?V0pbvZa?A#OlT;qq67@no#H^gU$x1%0m zZ{4+XdC#2Gd)UiU53}iWhjke2aqHeOha0ZAc&1zTT!PEK9)eL^IZfXYPtDatJ=vPK zuI}-NZA`4;1E+KI;=7igK_5KS1`h*%oW!hl&eOg+`^+GQdj{`@&mVA#!%plpbxv3L zz`yqI|KD@-7PPzc@cz_m$Eh%U#P~UOsGj-{l$0QxIy*UwZ%)tGM|5bOuXAhcX(hIS6OLlXg)RQ>WqRQw z2lMHJpZxTI*q-C_z8iSv+2Y{bQ9s~pUQBrSxQ2y;`@?e^NA~i;sl4bRj(b$!z_p&9 zFwy}}=jOyHzP->qUgGml6SjtUa95!OvudU+?4~D@8rd$oU zw5Bs1oQna&x;QxTffeWKhbMb6*jl$2!Gq!2yn78tF|1Vs{^r$=rf}pV9$WVgj6S27 zlcROKa&}eYR%ugYc+I#;D%T4UU0>fzxn!4ZaBHO#FaA~_r$~*>-@y0KfZd2KVRI~ z*VlNv#s{9h!9gwbShW(KUM zda$RBJj9U~U-M}$7i;1exTp~y!*y}Z(;SXDSoONN)?vwmpBUje@)birbg$tLi?4jd zWT%((kk3D2n4&45!(YD@qh4c&pIqx58i>_i z%$C08tAFwnldoFxrw>2t;^`4bc(l-WwEn!yFTVS}s}Ehibn?Qx9(vIKom@G2;Lf{m zJ9*&Y%eUTg>-^v4ix%&?_ng;5cinyG$xG)CH?MOz%pcjm@V*CLbms#nFXVC4bslFc zH}ZMlhCUBme(<5Ox+Q$?)qC!|{6TlzckgvE=IlBA+fMGe`tZriE?>I*IbXXmZu-dj z>Vx;+dB;O1kDSl>wv)4!BcGw|m6L}r|F`kK>p~pn&)MI4a?f4&9*f%ak@bTQ-Fg2& zABtYSd~$=*j`}`w`L-LBb}pWSoegniq&YbM-iGwq{QssFO6Nx}{|z#I)J^<9$KdLN zcg{u`y?)v#XA`~lzgH*Y_zstTe!X$BJQSoiC1 zFTb@scU(Ply|O-Oed2o4`j+KamtR_bZ295k+m_dk?*hJRd>8QY@m;_tEFZNzcX^-X z%JQV;iOWsPTXt{S{mSkQyPp`}1-x$e)w{3QefI8CcQ4+(VD}-r=j^WRZrPpwEd#rU z-N%k)H}%A^!`Ly**fl&CVxAVC$(M9 zZs`ftr)+kfTy`Fty_xVA&Wf{h=ao(z0l^OYBST9}s; zT<3C!hd1n=0%BzkKMlp>CqEcCi0LSn0iRZ|tjW!_JhP`CZD7N~5nn?r*!*$8-5e~# zIX`QzJstSdz$bum3@@GJ=cx=^&gCGEeAzo^W33($Lo8aca}85I;(8+D!_U*oTs(2I z#wJaz)mP=Icj#1a@R5i0YHThY%ukIEI=QxGl{s;JbB(t-T-8S` zImsP&1Hw9HT>Y{J++mWIhxVW zTv#|&-~7Zh=SU0ZV!;=yJj8%!4PThu7un#sy|>unWiIaBH{w{6gSq;q`?A=0#0N(A zAs;sKEWi2@SGrq=TQ9(d*AbQ)`!+)iLl3F3oU9x0^o*E}{PieXbJoR9TQO+muf{my z0MFh{v$RNKN7^~6i=+D|zv`(z`phR?zfEB8pD_nE9{9uIXW%7w1Lv9B@W-Wniw|73 za<%4Kez5t{Q66mEM`zqdENk+i3!C&}>ssxr3l8jYbdjaG;ll=2`kALgwJ?uYcH-kF*XH7ZGt6{VkL+;fJL3%e zw9B`AywT)wR6UNBzoi#u^;9dg0`n4_}yS6j6Yrb?VcWdrzxM=~0y+N0B zS4-D$^eP|u&3%3B1@;3N<*~&PCmwvNwWIsfV2_(VtOsGz&NJ0d*ZWIIG*utm@RW~! z6r&!5U4InQwf@K^A4fxM8nKh7eBp>=$d9J*aB}~{a=&%YU-X_e-W})r+okg_T65usZ(5JMwU_lr&PTfK@U&i(W^YKC(W%1|KDK_JaKI@tfONyZf$}+&f;wZ@uLi=f8fq zws;h4zCh1+)C*p$FHqp(uPbglx%lgf+fL5Dlo)cIeO+<>+lJdu?!E7Ud#>Jna@Rdq zUvlT=lb7Ci&z&a^Tph3F51c%7^1{2X-tmbqyzk*#?!WgX8^zB#oy+XX)O>s?aebMZ zzPKaCtND$;zL|?hQ4U`~j3|%Wa67!?pVsMo8{K~WYj9s6HGS@zm~(0VzO=bG+wq?N zX#4-dYK||zHg!Iy(Amn-mrvJL)X4vCIX%q(f2T{IG~WN;y#JN`Pw)Tv{=4_zzW;{( z*X_Sxd;@Ub{;vJ=_8+$YGy7-k|J43Z?jOH@-2OM$UtfP_{i*eP*6&zfwSN8j#p~Z% zA6Y+X{m}J;)@Q7@txsP6*!ni><@L?WuPr~b{M7PY%j=h~TmIf+C$ux!W$Z-l`gXdx zdmWx4Y}%dr)Mtm{V|VlkrQOWV+;@g>`LZ?Fzi5Qb*XU{DoV^`TEW4&paBQ91A@Q=~ zdP>-(?ZmM8c>=IC?-QlnRy;=ouBVJ$8`p+;oaH|A9C6?nc6E5-iseb^iS3CrckE$n z*B3t<^KjVl?-L(?-))-{(FE$(4X|BF~GBcmP&fOF2 zaD+z(yxmjvvUUD&)!a~D9Exd|B4~Z5>xU zoLjRGz^m5Q(+W3!ax{v|9~bL12rr$gx4pZ2wSMG>J6o7E!ks?w#Vap3#TLh!deJ~` z&hb_=craXxr4O468_&4n;G8XvFx8c<9-<3eInskoeQkc*k7CIyU;U+q>L-T0aHTm- zycLM6hvAeb?rhu-FleK8;qk?R4Gzx5rJv`Y9N5B!!N$6Cv7GZ2ue$0T=V{SVEVej_ z;~M_#r>mzur3Q4FxeZLXVmjh6&j$t#or_~w$GLpzM3eR%bz=vgjkq+%O+PrwNnK_> zBL&TRSMSKo@|y4=%33^}_e9St1V z;wWbKgKHek#jBd}6JLE{yHDz4c-dKF!`?Y;*YI3-WFKDk?tgj8FFbucc@KNJ(GpME zu(e0&57_*Q(S0F4t<)1wwV?$J{&Z9OK7X-Qo7SA0%U-WoQy;YvM|?QdmVNWi@t@C( zkpr8saie!NbU)Da8@}>Orf%@-3tE*UE@=Wo@4qosKp1kRVr}Mti*PCiYEBxV#K^sTh z%{#}JzqpQUramJ+&Dg*b7Ym&Pk6*Zo9(^E(!Y z`6K(uX?|gH^csHK_{sh``|;*`=lQumcnrsHJY2otmn7yl4rAe5PPg{k6GvYgZB~xH z2)OmF{npC0#iLl)z6KhzL(Tl*U5+;$#9Y62? zobmJi)4y8kZga=mY20DP+%3l4;O^|MbjR40x`W+yY~A_pD%b8f*X-PNd=2wrxZ|9= zTiY4jb?$oCV(@d9-~F*4K6ee*adWhjhzG|tUl^|2WyCR8F6`vg&fvT!8!l{dwhjYl z*Wxq>pC0_!8`d0sBEjD^eZ;df@rN%jPqTJHnj8GsvFRKR4n{krH9M0z+Q2vG+O9l5 zNem3y8*yR>55Dt!oznnj`NW%Vd8?Vc?Zmjq&v0H}IH$MW+?qa+)9j%U7p`lutizvc z_lbcGeef02lXX6+MhrT` zYE2#Z$u|y-&$`Abi@@GocJ_oFV{2@+qt7$tsBny&ln?4HJoz? z-t>m0_vofK_~OG}OuS*U!$qEQ#J@Vo&nFn`<)csdiKh-eWf|rt|G`Oo_m4QRXb^67 zm4|uP>EtL@T;qtB`0&K==}v4zP3l9OVCbQ_HwXPwWCdB|T(Ycz4LmubegJpg~c zxLDKI;ux-Rp&6de#Zxbsw3X|;FGr8F*F$3JdolUoEXV4~ubOXh)D1^9N>8_ z`B%Ac`0&M1Ts18gjl|QhxaxfzaW*`=tm`Xz!Lv>`NB1la*2QgKa?PJ!c-4pEvX^^( zq4w-?OGnpi;lX8J|ENdz>U?ew-qxLmBWCxvnz&EJgI^7*W4f`YfopoGiK8BZVT~5- z^$4g!_w{eZT_&vLv%gcTP(>jcF5Z7QM2gCExFwfsHO>v=v+|(Hs z8yfm7V4e-`@@ieqw1Xo*@z~%ICm2RLu$Lbn{a3wU;#3YD@i5YxZ+7(ZS+*E3#7{@q z)sMc_37&6>^y&2fg!3`WxeCzX{%t zz?(jY?seVE@X?#?wS}V>+r!d@zq9{;KimHy|D%i#KWU%8XL9y?6WgD(KXg8e(|_G? z^cxRNpNnwzrNGfQ44aiBRr^NZ!rvP>TYTJjfA=T)#$WIozale#r{lqsxAKb%z4qVQ z$v8gs(yg1{|9}1doA+O}|FZpG-+$V5-vK;j{LBBF_HS8#ZT*GyM>qfO|5MjbUSGIA zfBlg4IqQ3`x30VO@#}9bzp?!6^3%)rj-UR2)AGvY3zyGdUbZ~2eBAO^muD}3etG)x zF3a05>+-w1-`Tx!_b+$fzx$`VSMOf6`_kPP?mlhzvfUlKkKg^J-LrP@wR_jy+wcD9 z?zeA#^UdzGdAE%_zPr+$>MnH$+f5wZ?RK-Ctab`JiZyqw9VS0_aJwHIw$|Z$^4O{D z9KDIzaoZsrt+xi>fMe%zw|m?3l=GDEM6f&d`vP)dD?WQWh@Atbc{|PAl?SG{xbd;u z;lvJqIhCuta5rzr+Ys9m)_G3^dBW@IAr?FSj^gw*^)%osXZGgd$emrj{NycPTns$u z!p4w?{M5_SE6shU+|PEzX$R$lCp$Z=xX$6iQE#=PiEFmFicK3h;+uC(YxZod$%Vf1 z@MQ7k?KpS(p_zGHaS{ubb2`y*<~MNgtoP`}jy~pT!e0IHa4o(#hFV(Z&qj`Ng)P@& z@x_O)c|7DK2ld5Ayasz*dLuPY7u;YP;!G{Z9Ni4_Y^p)E%mVqzSC}K zC7#^iR3qp5$CJ|A3f}dTSaNgk(5RjjPkb@ei@n(R$^$=h>SvA}t-C+S3f%H<@O_f_^SE5H^!Q4wZk#J)D<2c`ccd@ktd$8XyIBuu5qt- z`O4pM)^KQDJ?r6mN59~pCOFJG9(sTV2H&v6YhI3qSn$~4RSxFjGJ9dzZS!wG)BD!l z_iBzKUe2qfy@W5GFy+g~5odYILk{rR;G)j<1RBD`fBFub^0sEg(Yjhr?G7>IX^z(N zhp&G4v1bc|2Cl`ym2KznowHH9a)GVR@U5}g+D*R07rwY`jPmE_obLJ2-l+cO(`Dv8 z?D@c>ci-sXD<}7nT>1Bj+&w90HrDXr3%g!~X&x86XfLk(__`<5%Qahm&hdcDPo0X5 zi@17)4b8-(30|<>qx68!&pK>#G^j@%&EX}k+~S#5xXT@uw-@om7Dq2-Cx(91Z^bMJ zvBiLGpU{WwVTdn(+`Yx716(8C9r@u&8~nwvUv;11R-SUQ&Yo`gsShl9n0L;1{#N_A zr`Yqa7wL+3zwcq*Fb|)tb4Pag;f)_&a)c?a_@#KueV4gZ z1NJhv`BCrL{85A({ZjdrYyWuQdY|)xkKddh|Gwga`kYQ*?|gFm=`R-?eYbHoe?gm_ z{@aR|Ui5D(Za@6PiZAFs)ciZV<{{K@iJ%7Ca_xJyPZ2v?1*N?vd_z%aw z0r-;rEB2p0{s!QS_b(j(3gCmsZvtG|KY9O-`%C-(vi{rgR{*wu|F7=>{@Qx?_)CD# z8-EG#&#v#bK6U&yz~k3{zr1OFAMkz4cQ3D6{=xD$$8Q5Xu-vnJ^zyvr{g?M!p0>R6 z_%`5emfzg{+U}>vzy1FwyKmin-T2r4pR;@U?w;LCcOS9)(B1p(p1FJH-IK?+0hf1g zy7`xH{>htv=;qhm{F?sJNPdW1DXC8mK;^7=`80DUg^>TNfJsyVmv^9Jx^S!hf=6%9|mmhn1&;yrp=_zYY zE*<6Rlb@R5$Bqx423y$lk*{MKvg-+q4}Sw6HaN&jEn9;j9u4)YwYal2&(^v4&eI!S z{P0pkaoDjD*Ew9DYJHOSi3Ap{*u!%!CLaR_eGQ9t)rCfM;m^1Gfd=N|qyN;!96P!g z*74y-r+S3F7EfIBA`3a)KESzI{@M$p>e(o*V}s`lUnnfEYNl ztM2r}1BY}Bn{L+dfKlF#=HNJIgFBw)@qw2IMskYVWPi z8y6pQaM-egA&wkrflGOdYrx)e=0`toXnIMHh*5lNZ0Lbs{nsa1dzBd0``Hj~V(3vE ztclGRM;u&tkLyW8oH)WYS1rS&p*4FB&0WKRi?=tCYDTB2!N>teHja3t8E&}3lT&MI zmri(CGhoNf5q@t)?8HL>HG$45QoB!9THuTC%<_>1Yt4sLxLCvoXc zUv}wiuG-E*9Ik=BsYj zR&rJQsCMjC-^_}mkZ9< z>8y{Xw8`mg{)pkVR=m;IQ{!#==*yN(r`))Qj$&Oa`2}iRTRhTymi@+m$Kl*Bi(-QdeL3?zT|qlYm*zx>%OO%fB(-H zH=4`;uACk&-F|xXAN`yEd*l8M`ybzb-}oy4uin3E{1(6$?H~L5|JObRdct^e8O}X5 zoO=Q}?+MmZ%#+Q0p9DMwjGmt7Kb3fjus7K7hs6hmr;{hH_122%Y3XU=2*=aS6J3m+ z;<)xCgUQYsAJ^G=Vu^3Ar>%HBh4W?86S7YzuyDdr?6|PS->3hc*f7nf4}S9V^c2G< zKsmrO&lU&gjy_@FY@Q7~d|boA!4tWkEA^=er}CnQIQ{GguJ!bUkq&q|Hz!8%eOfS& zm-zf?NE5b(c;#uGJ$?A#E}qzOkP~0^6o-viJ}Fwq7ak0Q4NSQjaA{3vIye^tMxRh{ z;sYzrI2d@c7Xv5jK6$}|;o5v}LtulnvXTuhI4b}88=wY;o(W^=HTFkuh=lyu@{?GKEYXMS5DQ(`m`VGbPhLO z>QvvrnCk~DF=*y!9(R1=FTQ#CIv3x$0pA;jym7LwSKLR2Jn^!|FI*ba9s3 zdGR%$=5nznj)99B@iAN%*F4SPn1fZXi)$U0Jot$bo+Do|^h5U={;>GUM@)8lNe_8@ z6~i12Xh~DN>nZW9=^JwfP0AHt_g}o=IX5pZyts<527K|97Y$wWNn7~*tl`*R<6e^+ zJNKtIPC4Qy2beU7TRniEc{XXzMtnNZsC&vh-sZZW@y115YjVs^P0Z5;H@v;6;%XnS zpXG;dIPBDcPHN*=Z^Ea6x7~V63^C1@3y#kD!jmTsG{Id?G{Ko(?mrkbU~9k#mmS~w z#{Fm=h8Xra8p^|3obcUZ@u6+~B?tT*yC-OBy}be+jp{KNaK(mAH<umCs z7ks(P4HgdOrw+qUuKJ5VZMQY1Q@!V$P1>-l4%YD3Z^fwB*x@JFdWQyLwHLFcZ~6AE zRC)1LOaAoX2Uom)LIIB!`i|C*{r&&Ve=FehxAw=6-yi$?|JVN~6t2CK|H1tG|KsKQ zy0`xu{pT0@?YR zbmHv&|I#I=^G`XB;}f3pbpN=Z|2^veX83SC?-SOeJ%;mW{jz_||FjnA@o0~a>G%JK ze%0|&AAM%=dBiin-w^N&_Y)qU|N4C3`R(&XpR@V6cJ%qy=aoM1`dsO=htCJF*!b+| zv(CgDpGSNa@>$2{6*#W@eB?7qzw79;g3lh-dKdFK!)FOG#C7bmyU!|y&pX9q@0#uW zTyw}v?q{EA2Pbyoz{8o39B{y~&sdJdfQg?WHyB3R%+F239tMqFJBJI0f1la9o@-+r z2V9Ko&9O7^!ylf{TKR{!#WqKy)^Ih{prg-b^r>F*Pz$le;Y%~QtA)>=Gnc`|9G+~% zg-L%la9qP>@4PujnBmgjdw|cBVf8swKgyGaaEniCpFa&g`q<}A@%5w_{bbHLKel+t zjgGkCtww$dD4+1yS;O66Yna!EG~#Cte*+J^XktB0rd}haoTj#iTH?V*O!;|Ff~ThP zpoz6&_+BV%_h0?SUY*s)I(~d$<7KU5oZPSOQ#CM0Bk{ie?|jjWZ!d5^;tNaO;<491 zxT_ajdC46=^K_I?bvD;Mz?UBCinn?Ge7ax7O8=?H!Jp6c8`tLf%=LjIZ}~XlNdp+x z@8=pVZdWUWBH104HgdO*r_8Nap2QHU#A5>9J@E!xc?mM zCH8s*7x;RFW_;noVqcDW9xrp%7+3F}YG=(nd)Ty7M>cwaofu-7hZiS)?5sQTrBB>& zf{VL#-?6~JGc8@ysMz?krKXR^yeB57Y>0Au=h`3@|gQL!l;?jZtR)6`^1|~oMg#!DqIULNff$ctZubUSW zA9H+Zsvq=>*lHo4>Ie_F8D|{vp%Wkc@aIQ&F&(Yr>?l4Ae)wB=wC+5e;j59j*3{K; z>Oz~1KH`bhaBZXyt;Ey^FwGYe4jsY}pA8@R;DiG^ePUi5Yt_Ix3_8)#zwO~8CY{Bl zJuQn>y!2siOZryVUF8g{2MsejdeMdYsR}=MQYu>uL#~-#av4#(v&drPOT7Cw7 z@K75(4ES*pv)VaN`|9j7gBb1^yc<4$z$p$pvD4H!UF8G+)9>lE@9^G#=^3XJXYc=_ z8!0NPYn|aK4@nk|=0x<9uhM)eL{Wa$s(Son z=bTbifQ^`9#G$xV5Uz8>ni#rFSH}Y$Y-+-S+pf>X(?A9KLo~H2F>Iu2aTYj(|;nB#hMnAEQ zsoP;<0a6MePd4?MW# z;hHZzc8;y#Kui6mhR)?;UJYr(zPdP?Q)_yN37?;Hqj~-`7Yj!B0N?I&edJvJa>ZMG zHaNpgbFr;ACyvnptEi?g}^XiI+v?>(`InPfo-1>>Fqijanu7RKIY|?CN!wd zc&M#B@tt`MEE>q4c6@2X53i}$Sf94zh$CMi4<|hN8~kbDoIkE~(#x>; z*ar>1^koa1JiUM%^r z)x(C~QNOqplV;B0^Krz@zUH%p{QwSp*z~Ip@TCE4G2-Bwwqn7iiF;VAYHrQFXN@M# z{k0c1`T(wY`o=LV>-2$-uWNB}sV=Tz(v+`y7|v&n4?W}>M)R-?x$wtBf4Ih54&A$S zs%G?p{ApD@{b9gsZ^hR&Kf2(-uUO{Oik%+EQQmyz;f>^P?bN%vZ^z56$L0m z6;B_X<6ruV4`WvDpqyAZrKYU;c!G-!+mIt%mB1fgc&U#oPS)g#7Y)ik&SL2h-1)=7 z0j?ZWLoC(NLG0k-EIxY!Co%9gFRp8TeF}rm!wV#^N(-f_@1;=6pcRJ`$Yeu_Ky~IXrxj8R?^>a>7 z_%tui^s?@5}=@So}`Qwpqx{D`2y6YDh z?tZ?mt1TUAVjXul_{krK^eeW!@#`+v+x#7ABaix095wT;9Gpb)qX@TspT_FICrSZ{Ng;W-!x8OnF$NAHHzp zo%Yu8v0vb)x9Cp~J%<}SxO$8|jLzzF`NdbR?D^ts-qC#fzW%_c{KdmXZj<}47e`;P70((y^n-Y6 z1-o3`C-TBcK6uHAzj+*B+Arj!R`BUz4W_!r88*FKr(1Jk;f^!z{KTb?zA(>5&N!!u z+OxymoL=r6h#z~D~%g>yg*vyy*PWW4I&&~!P^RyD*wSm977;p^pxXMwl!4exs zHR8{1YB%`1&)P5GnHN{Q?Vua}bY?H6qdwweJ-*X+T#HE`e%2guVJ}zw*y2SCbDlAB zz>}|f(-mjyF!T;B^tN-pY{f8#w_FSy=udNXan0V`8Rp=?r@Zl^p}5Xz2`k;iVn1^m zzBtJPK0n&HH^k)QsCTCZ!w#0d)nC@*2}6$hxtzpc!*}l4hj{GdGV3uk6O)f&p2p7U z16O?7yZ2nj&AEBGnxngX)s|2BPww&@18zs$X8wnHvE`FKj$+^gclwTN_pozA9CmV& z2MnC}wa4fQKI-c@aYs!0u(vJ-o^oVkt{Smt=h`{m*7Y8H9P|Xe@MLQZC%QX!&QBZz zPJQg0FMOle>1DrwAun<06h=PQoQtoY(hi3DgvrJlJ4d56^>8kR`v;C#-TTvb*odvy z+81!w2j=DMSPXI0M!(Stwp?fq!yJAzbnRSRyv4&uP0bho?0j&KBkr(iYT#CW^&Bp8 zX^*f+<6D1NH_`(KT+1gMnuwKMJUg-zUrzkhUH*N>pa);?Fk;IAC+BcG=i_rST>9F( z)J6XM^|*bMfBTpDZ6Cs%x(%)3#|A%ZxVoklp04#HU0ge#eK^+VajZ{W#}OxkW@-l? zcO2o!Uk=XI&{{f(X-@q=)cVSxW*AL@!^T#)2i4;_j;UQ;I8k*a)bjPFPgxhgB<9Uu5p_EJACC;?^@%V z_V8efhlh3NVzHZV@Po6w@fOcHo^rtfPiwI7hzmaKtn;b1Y{j%j6X)I(X~wrb0Dr!? zSo6t+ui+XOy5Z?uJo_C?+RA0#m*ZP!_IgOne)hu$XE|2a-XO%-;>Z<8wMcus^%jn} z*>7+*Zw@xy#o^mG!gv|@@?)E3c))S(EfNRo?By0uHG+#5K5EBDOg8d##6|9Kwlz0b z-&kWWXK~=cGB02H!?F&ajq7TF11<(kd5O!`H9YqfAN``f*|8BDmRJV6;=*j*Ilbi$ zpLYDrIf~O>Y_2zcykYV);K6Eci!WzApjXrmKl!i~&k!fg@Z|3ZQ$MN&O~g&Jw1x}M z5C<;q#o>p$W7uqPp&@*0@NnQqQ#EldKedC+7M7p7;AS3IbNp~I_?k;Q{icsS+t|wi zo=?-h35LUmFOK4>X|ZS|o_@tu@8gKG;d6p@eI+k=*6HTxp2fksxa~`>`O^!p`cPc< z+rChH_PC{^Yqs#QwBWCxvnz&E(A^d7k9n+0H4P4VhO&s+Q3~RJt zCkN*^(p;``G-%|SJznyfxs7Yw#qZhWTweAYnATyWgSZA8IT)UghI#&uX^IOSeK1}|H6O&@A%L7&3|4$|A77WpV!Yn)_3LPfAqcQ&C z;zM`dfBIio-2T_xbxz-aoK^{{AEP z@4tWF{nPeO+CO3Z*ZUhf$H{l5=fpS_-} z?>^uE|LgLfmS0-lxcuny{mW~XZ(P27`Qqg>mQPvkSf0Q9#pPMc*DPPPeD3n{<=*8J zmXBJVyS&eGWqH!_#O0>tExR}Eer5ND@!tUW_TB5oe*xetcAvfb)ZL4BFW7y^?m4?F zyIXdDW8Qc6zImUG`@em`zTtjzKiePN$M&`EcY9NNQr}|RJIuL{*}`f+@ebzs1IJzf zldaFd?q&D5``+`x-qn6%@7zAud-i!I^vn$l-rUCqmVC_HN9>V!yS69dhJzSef1b2irM5i!J~6+723SmZ@3nR_M!Jjt#Vw!WLg>$jsi&Y+Cz_W%g%8Z1FP39v)xw;#iZP zx%#I2veTz9QFoX(p@cG!_ljJvdEn8YjbxF0s)-+9s zm!g<7HmTJ%1`;(ULKGp2L`*Od4OL7uufNZk_xsM7_q^LbjKqjD$us9U&+mSDZs+zU z){fR@3VgcB!{i{Id}mJec72|N>|`%K zCg8KWK1D5yS-UW z>s$6`{RzTNuo>Cwzoa+ap=A%8<{7EW^;>!`@SAWOz=4$cU&fnk-3NZ3eo24FS$~aT z$It_lUwyd!tTeZuGqY{KcyZtMTX&xG-kmGUy)>G%&e*X2vwDM%9;SH)d$LRKHq~=> z?{hLV8}yZV7b`Y^gNWpZ_~!ne#0GFizijRYzbCN)m`^eI{lE#q%DI)h%7q7CRDE*K zt=o6)Tw0vD5aMSwFWA3tmo)eHru9Sj{}tPwsQdrVx8H2P*8WZF_y0ayPXPQ%`^)X| z_GtUT`t`r}v{%+ufQ#B!v@ffx0RP$iL-V!f&zjFSpKYFKj3h=2qmz+QG18cAj4nno zqmfa`C}s5Bdj5aw`F}H<8PE(SPs~1l1j^intL zo6W)Lix2(qhRol6S^FF!?0+ z)RSk%LFbO}w5uEcb44gS7dh#Quv|38!;!znc1Po%F%_QN*CwyGp8ub`S5|)J7yjW> zF?2L1ix9$xZRet|ou7anYs&ve9J zfrD1g!66SG8sjCOk%>mpo;jX>(C9n4BH)}(_^NAXt2TaTuPcsdVt=PQJFAe9W5=V{ zPBweuA4f9igKtM$=lXE;%{qro?7)Lg==jlkOHQB>bH|Qv$>ksT;AGI#JOoEuVgw(a zb9H)y%RTsXkQ4kxPq<)o;&;c?(UGIzlRQ>Oi@y@t@t5%e4|b8mPvH?7Fm>|fQ+$Vq z_=G1MFnEqiU}B?AhW>*OSz=4aj<#^fmTT-x+~t9GHakWJIbtK<_zG{f@HrmZ=*Nf7 z)ybtddGrxe?U6sNm+sM#?s)U5LbuqLoTCeU6?~1+^i6(%EAa;%=o)*%hfjuA8@ekR z+XwsS$t8^f%iEiS$L2i$f2Mx@ z?`V6d-PP`>-T%AVpJ-oS&;P%q-Bxb^^!NY2+MH?bY>qV_Xx`sk-n^r^pxy%b!RE!y ze~kWZ^tYogk3K(oZuFVaZ`M8kGj-4ZMBVe>GrD^8v!l0+-Z=V^(GQQlZ*=bHpBBEc z@Wq8cseAsPS&-iupX8ssksoryxg1yIpnOdp$yqrBCfDVf{F480^sC?-qrkMmGbcEv zACPaHNdHM6(Fc;(=?~7)qnY-D>MwYat6d*a$W-uF*x(2cEgJZdpLR6p=}%Aaz#@|^ z#=VRm`nY+A4ECa@tNza(Jjnw?<2-no3$*Erd`})a`i52=3_f4sqtJK`22&0?&Oip1~&00`Q*SM%RC59U;OY; z;NZzt1z*1AXMRv80}pU==!6EZ=$!b`6FwPm!Chy-4-e;D z;OaYg$P0Y5u@RhJY~<6lX=f+>*cRD%(#JU(FuWCYZLu@D;iZlrJ^4Cq_|S{KWa9x3 zKG}R_JOYOon-U-J4!_|19KO*@oRT+qbnpo;GWg6mr@A9O!-rfY@paT!6msaO zO`!`~{Ply5u5{%;W17Nm?14jPv7t-fCN|tDVpB(S}!Yom_Cd z*ny6W@N+~|Ip~=w32Ykt=^iEEZ2PSW{DSQ%J>8t-mFZ|TC zlZ#(;C0`8C(vw|$=p0Rai$6LrI%cfV*VqP6|MYY<8|lXeJozBHB?suI9Zq}>hkSnE zqx325^wyUCOmDi73&zIaiHUZ8p&PyJG3lz0C7;%2@`M@4AxkUz< z+G7hH)zRX|PCD=j-Pyz^bmlMp4-Y?BVExA0H*h@W7XBy!j2!)wCv z^8nfV5A>PFUNOL*?(heX|Mws>mRz{#KK{BX{bw7d?LGV(Z#%fJdynFK zCdzaT+4jFBl{&tB+jF)5|Ht<0?Vs1(|KF>7|DS9htb6|-YHzAH0Ip~+t2h6DtbJ+Q zwBK&N)qJ)2a`U<7xw`xRT;2WujpmchCu;Y9xY^y@(7dbO0eD06`sRn4mo?|q6@b4V zeRcGe(O-`KX!P{x)1ya5r$;A82S@uyKRxO58DD+%)#Gcfxn_LrwbzcXyY9O2_19lN-oAbN z_{JM=9N&EN&Eq|L_Kf%Lt*_nf+c!RN;J|o!xxVgKJnp~${_zt}JaOc~2Os>%0}niK z_kH)>cW=r6XvsfP^7oberILTRmC4a5tpD6izOa2E+{`DpQ z=90g^NPkrjvhaY};>7j=ny6eoDGpiMw zrHajwip@&p#_`IHLzNpVl^b{6a?33%uYUEbcVBwxrK^`+cG*WSzx?u*E3UX=@4Mgq z?ju)TdF83AuDWV@k{fH48z(C_PF8N*UAb|ja^tS*j@>WwWhHp=#m{uJvzd@?;Era0 zv!oS)l>vLqyjcmFZQ0|~E;p@2=SIuh<`% zj0-0!_Qz{nSlhjO_wn=2J8xIT{?>~9YQ=uJVt-r3es9HoZ^eFBjSII`?3XI`M=SOp zso1Yp>~F7e;Yi|7Z+446Tj)tYaQi0(~_A3?pqctZS+qrY+;q%Ww|4_yLV8#A$#r{ymezjtMxMF{_Vt;4F z{!qn!rDA`)Vt-e~{zS$8Xw3va>^CFBm<# z7#06cRvn`=m^xpumyV8T#Wz>7*vk&>;pK?Vn8Gjc;gCUxr=EK1zKZ>!iv7Nd{mF{` z-4*+_$(Vn*V!yXy|B;IQa>f2|#eSt?f3VgAt2=h=IPtpIz3%pk{S6iS0~Pzj75kHu z*q^G{pRU+{ykdXXq~EVq?AI#xtF<0Dn)vHe>=S>srhsdwvp&c^eud9QFh14K_|Q>& z6mWg1A2;|4xY&?`x7@M=7ejsmBhPrxM|h)w3x+3J?P&N_OpNc^`Il_%>hwkHh;Qx? z(p_xmt**o_Z3=ypmx&uZ`p6?Z>0_*re|=ft^rf4AAAZj9)%N6*Pad80`_+p5p~-xI zp!)rxiv3E({&2;9tzv&?#s1!k{ppJR(OL^0yWxf#PA)Dko~YP=uws93((jK|zrVL) ze{aQptzy4cu|Hn@UhEH5>zF;r>#DxFU z`AEM*3m@O~v-k`Tcw)#O{8D~AXU-;R<8k!=;WxZ{o0uJYmKUe*e(#-qyu1gQdA$5P z@>clVUF1cR&E<^J(|5%yVEvuiw0+>v+V$<-vuoet+^5MmfCD+*+ZDZg+q3)So|8(K z7j4>^PM+J}J4+LzilDz^PV;w6_vIx&TE94X=Dv)YZ|$5r{I_mju`NF5!w>fitamB8 z<{2*avcy^Ly7wS62{n0CpnGZIr*FJ%-zF(t2s+Rl&vd*0+gHxHX!s$7&d$1SFtGE& z7kH;+6Kuw^?u~%TmBF=Kedx z?N8NL04``>TTlPLq@Mo&c3lJbO7nMBTnBifdAxa`z5}pz|9|WLznMibQ<-(lHf9qu zyqU$!zIFe9{T&7~GXI!i`HSDo#%5i!x|N6-n&049Em_fko1HUbUhWt ze6+CbQL?fyLJD6>;Av|k~8VIc38Q(0A}}_ zv1aT3|JMC~d14GnzI0=MjVI1CR%L$3ShRKjzuO;nw_0oSboLvx9dKrI^oI4Dr-L`{ zr|kp$$@X~gD*SXyJ$My<3K_f#--FC-E$do^SK()Nm6O&PooWX@Z=;*$0ruH8y3Yv+nTcYCQ4Uyzg5~uf3Gx`d4KxTAV^=G|MJ_V9W+!LeYKhub(K>hHk@O z|K65L9pAL=we|hKueX2N{%-r*?L)QmUu%!Fx3oLkpKE`n-ur)J`=j;!zlHXD+vl5q zZvMLYVtxJpsrvrkBlY$FQ_UUCf!h0DThIPq+WdHPUh~qXY5slme0}}zOQUB;e^B55 zdwleX?)!fq8toiyudn^RbF?^m?bi4Iy48Y_-Dsa3lGVOdr`3X$t8=>mGldnX6)c*} z3|Vz#Cj{T>Rl5}kzUo#U_*og_ZAELQAuIS<;bw<{&T1DAI*{o|mV$qGy}fvW+3`3x zlLg-{&a8!Zc1iSC$j3XYZn|s3OHoHhKj&8TbmIdn@YooB@e}*3%JF7%Y#@id@YS>H zc!_D^8@lu>M|lUH_>zSty5a{$Up&(euxGRJ7Zt+kw5fHaD2(ohBtmW;$^(Z+ur2pf9^Z730y&I zY$4MTeXd4n11CGaC4;ZFzW=xN{Xcy|4kgdiztU%tyWpwoSLOxh@=;#OF}WHXIhKBj zmvenMR{@OE`WM=aF`>;l8noKwt9qBib)*me#sob3xa#uW7@y~E@IX%ox;oEX7TdIw z9eqCJL=QBHwWF)I-4)!DOE=@7XAjJa9pB0GEnDCJ`+xrZzv0$&@t<08P!)uIbu@b?b#nZHd}V*0;zkZu3lQ>o+Iw!O0U|KDuC(f(EYh4zozKWu-e zo&fOuzdP#}0B>z~x9@GQYJakQbNvp$tJ=2xf%adUf2q6we^I{!@ML!#;A71_&B6K| z!1p)rt*ZcUZC=y7s;&ZjfAg);H|r|E7wYN%-yc0T`nAzLz32bmIeP2pHKSLKvhp(n z8tskf>it!p86YFM)t=cZvz=X`nagZ}7OuALcXMmDFcZL4GMlKwCxa}rvUio>s+&!+ zqBKjG$;@teqcfwy)ow*;RwU0+!PhKfcShF~?Ph4RU1w*>!AHqEdgPL2rZi)l&FQ1W z&fsXv44C)i%;xAld8ds`vm1S^kl9N=A6xBiW42JCdf$a zz}4}hBOG-{{=iQ?vC)PfnRHaZ=m^g_9QKikCpi7kh?_R&3fcIiF`VqK-b_3DSmMyOoob6rV(2_Oly*zSPcd=;#kWeoH&KWLQDbqqAqC z4?YSRXvLXqZFoj@-=}mCLq5WbJhH@_{bK9f)4lldJsq^kKlt#p%N2P~HXOX;b9P#} zvr~KgtFBMLqa%L&KyQ62xeSgTUolt2mkyDsjc@o4ALnesi@tPF(2<*5h!4qE$buI; zwTUTR*ohw*;Bfhq9{fZ1F4l$5AE8NKfr|z{pVE8r^{baaP{Cm+$B zfAA+ScHtA*`dmC!SXzR}SM7JLwKbf53xp#4h~M(g6+~)XC+)d=C;X-gv+P zS0_syEqRHn+)}=$ zPn_YRpm2e@=3GyTCi9koTT#0(wz;)}O_l03#QcwlhgtK;n) zKj%5Z55M5+|LkO6_{r-|@4{yrU(%Cr;2NXk2j1u+BmIJWz7kJ*iVa`jfu7&Q-g=Hc zaK$Dtb#1|yD`4UyHsp|xPhtx{?dtUJ=8UodPI%LezY|0Kflq(^%>A9;@K0XQEjH36 zKEXro;pxa9j&K$Hjq%15Yc;;6OMK3DI`S>w$YpK()yXK`#X=j~=}3NZ1P&d+>EfI& zXo3?TqnD3zhdg%k6Ft?twd7*13d3SK<*|+_3@9$>YKe&xP+1__s!T#Ie)ApII;PkuugP*?ZL1t*C8~nk=g&t%; zv%dA8LlVF|ih5pPu&d41fAIABrr&3<&+P3+H^F8k)h+gVPk(U5AkA~`yl=dM^2XU8 z8O$3Kzc748#e#| delta 277 zcmZozz}T>Wal%RFj*NvH&*aGQBn9czY<7`vVBCDfVHWS?1+pxY<#gjV zAJALGsE}Bks-K&gr(e#G$##mGoAnj9Fi!SY$U}65M$3m`X(mraeNOC%lrj^Bg_cT! zo$RxP#%#eB$LO2pX@b(OlVi4wTCQVG=@??!I4z>xhfdx4R{nkFs z9Y(};Pgw8j7d3I`wmN%wbCx0foU9Is>CAOi@_c@Tr}89@<53*N;D2xxzv3*u!y&uY zd6}eXl0)XYAnn6gnq1lP?)^>~5ECaSTnUmK<5fknET&1WmpW~yJ5njXn6cip^<2x3 zaex7h^3`(Oo8XJ5)R+TtdsoO1i5+y!smi*+6ibzgMl+9UgIbBB5nN@(a+hr+9 z)^JwQlI*Ptl}ej;gfn+#an0=tPlnaT%9Q#_Gu$&?JWYe_)ani6$ewcH4 zg61fenfvoq{DBiVicYlKwK-FuS=ck9;d!@H@_jL?+OG7qDm72cnf}~gLR4Z8KE~S` zf@W;MO4Miw{FshBq$33*5CcG=TSIV+4pX~^;4ONCnrH*9q~)}L=7mPz=8z9c4XG&1 zRB7@~VY5n=On;lqzA;FRmzlmn_MP*?!_{6f7yA8Q;v=--HMC$I)}R_Cn2iGDU?So$ z3Ijp-i~gij^do&rd+96MNAFQ9ZPuvQQLRS3kfu|fMtvNa6is1t#c|qk+;PD1xueao z!~S;Ri2=G7pVVhLl}G<=%Ej`f(pZ+NDy6gRjNEl&fV@}kmKW;``$&0CxVj`}RlsFo zEuO+M1TYKv@L~c+V>lR*_=7IlFI7EADp7uWVu)Cc17%QMefUFF@^W3b?5-qx^QzTK zxy7va7B_G;S7_tR+=tvO=go>5$CEBt2zmqhId}HoC1^pGvc1 zpNm$#rz88N_xd6)bUBvh6jv;%T(MwgS<&Kvy=mjCK21)-$b-eq*jN&A8V{H7y>*6@@!9ZKhI4C dq+17Ps5vUt8s$@4%${>@1xJ0ARwV+96e1=%|7Ze1NFfWxR?)7tx?WCoT$# z`iWQEe8o+LL?^p$_`(^t$($Oadm0~MYUVa&V%&_=sry>ZZf@=$_dEH{@BAL8W|zKZ zmwrRLq8z=`Bk+WTrX1;!tPS3fs)!IH!v$e7y3AhA=b1d7(>RKUa$i>X1wEzT={8-W z3)&K6H;NZs1~Jo2;=~{p4dyiQ$m|f;&Cwzu!lBEsi$xI)!s#|@MoTY%`NCv%jB4QJ zyp)Ui9nR$`?Bp?l%R{*r|3%$&gRamSI!&L@0cxT~T1iXkZJICESO@Aa;VC?!HCq`6 zd3{jne=DFz+`K|xQMtD=&Ym1s;#mS^Vx!F}9u6-SJI#7A!>x$YSO<(0EwRU-N_cF; zpiJ9ns|9Ejruh8K%XE^C(LUNnt7Wrt^3p7tPA*EOC>ly(WTY4P6o128coEOxXLtyk zun}vq3K!s9oP^`ijlFN(mNV7G~mT9F7Ap z9E0$Y;iln+;k=>4aM*B2yEOM&Z_!ecy~$z}hSE>P$DUZ;~a#cKyr$13No{MZ39=7JcJS zfJkBL^q9YIuhE4u4YSh}iYl(u%oh^G2b?dPsE9n=X^ zw@1H6TB=Ug^d`~ptiRsn^Hh|H=4bhkpanlyLLo#o8Nuu*QD!OAl?)|aNl@aH{z_lv z8UMq-@-KXW&+_Mdkhk#`evemh85i*kev4B$kt3z!kwe-R89^oKKchM@0*b+|u8x4y zP@!g8U|6qoPpQY}Q7bI)5!_NuR&cpq-jd5XJXWrmXdcMHQj-S(O@5F|rk$GUV+nk% z9JZY1P!2gMm13kGVWi01KgK(F%g^~Z|Ky>){p%&uTj{Crss9d#7_t8us`gm8@3-3B zlGoH^8)O8zs*2ibZ7^RE&9SIHbij1+O_#B4W*W2u99B(Eh;{T+f|VepoA2^Z{2jOR z5#G()xt?p-D>q{$ihtx^e=sX3I)3(A12_yj-L+mewPEs#sK`x9^ Zquj7nq^&ck-?||u$mLz24w?kF{{v~p+))4k diff --git a/data/config/behavior/default/apps_menu.db b/data/config/behavior/default/apps_menu.db index 2bed126d21ae81244843e36f595f15cc4b26005f..cab6d4ecfb1a65f1fec80660aa8671d28d5b5f48 100644 GIT binary patch delta 237 zcmZozz}T>Wal&4H=6^v9V89_{y?#;a#*60s69ZT$a|rM;%1;&-$mNaZ_2hNsHRmxk6VKMYX}?1-hn;2Ai+xIxsPMO%^wZ$SPj;3UsvA6t7A zU51mV*_tvMZa!n{#l)ySS==F))s|PAR~@K&9?xV=UsOAcCI|YOPCjkRwRwVX0TTeu CQ%OJo delta 259 zcmZozz}T>Wal&4H9t&OuFkoi2?%;X5@uE5Z!~oXG90Gidij&0!a(QEUy?NbvEqP6N zRe2RRPZa3mVJc0UEHCTK9g^>oTAW>yU!Y+!IbYV4(PZ;d*+M49ipk;%sjPjxHM|v@ z8x_9tXfZG{7MBz;GU(@~=9TIj>l^47Cl_TFlrX01rR8K6AdE4byg=7<@@ZSH&G&W9 znHYU0iyOr9w(u75=J6&0-4Vd+v$@gWB+q0ITSp|zjV4dCHDxr~e8$#`iBWU1xI-?h gJ+CgWCQ$7Hp2_OIvPf!;CkOhPG8%7g_pM|C06*zWvj6}9 diff --git a/data/config/behavior/default/grabs.db b/data/config/behavior/default/grabs.db index 6a4e45b91cd6af90304b91576ee326db23d6894d..dbae82edb35b8d0493255a8497d2be595a4dc5d3 100644 GIT binary patch delta 32 kcmZojXh@i_m!J8cDFYaA2wAUR)U?@9!G?b`hrkbc0HhxYtN;K2 delta 32 kcmZojXh@i_m!E%MDFYaA2wCl5u-|N`V8g$eL*R!z0Gjy-+W-In diff --git a/data/config/behavior/default/settings.db b/data/config/behavior/default/settings.db index 1f82ab144a28cd9c2ee2f24aba2d75b9330239f0..1e9051d6f0b2081a6a5d23dc199771ed76a3d43f 100644 GIT binary patch literal 12288 zcmeI0v1=4T6vk&xBBEhF5rq^M2Z96(CkR$1jemonRdBhT=;GeZakFP)$`mO=Eb<4W z2^MxXAq26pv9S_@DBNEl!VxPgab|BfcYB*M7>jS3nS1Yhytlurz9+=^L^m#qneg+f z5V8n|yL`_Vu`jQmFBi}Ay)OK@HyYs5wFmF^HqLh#b|(Q6AOR8}0TLhq5+DH*AOR8} zf&ZUC>G8v)bKQZ_v>Mu;QV?)h?%NkFA{af o?$;JCf_~2HCoFp&uBn62fANH{AhcpzeV5PLY&L^RNL`8j1qWm9XaE2J delta 84 zcmZojXh@i_m!E%cH3JxM2wCl5u-|ymoPS~f>tqfA9x)DvCHxFb@A+Tx-{8N(e~^C< i{|f#k{16q+lb6UBum~`O@K2UdP}+D=ihpv5{u%%-n;I|x diff --git a/data/cursors/Close.db b/data/cursors/Close.db new file mode 100644 index 0000000000000000000000000000000000000000..3a061f7e92d71aa0bfffc6dd192244f6a6acfcff GIT binary patch literal 16384 zcmeI2u};G<5Qd$$v|E7%3A_Ohz`(-9!o_7baHCqSwqwS@7V+H{TKmY;|fB*y_009U<00I#BhXnMFFRi!CTWlI%@hEwJ9g+-=#AJpR7}w93xo^zlNKF2^!z^hoq;^le!|ZM9_~yK501NSUVoaL(DDP)gBC6@`;u;5 zk+!zwbY)Sewi;FBp>oMAn*LbO!GTwKmY** z5I_I{1Q0*~0R#}(cmX@Uys>6*ayz-cnhfspKlE)e)a7^d!1p~fFYW(doFCB;KmY** z5I_I{1Q0*~0R#|0U;_lYehu{D&H>j~RzhaHr{0cRa`S3jG zbD@3e8LP{u=EvuXyxvn!gmFAS9_Q0bb2VPK=5meHye2gyAGap?IIH8-y7U@70tg_0 P00IagfB*srY^}gIal<$m literal 0 HcmV?d00001 diff --git a/data/cursors/Iconify.db b/data/cursors/Iconify.db new file mode 100644 index 0000000000000000000000000000000000000000..633c66ed5e25ba2f57eb775e53f8b35a759e2328 GIT binary patch literal 16384 zcmeI2u}T9$5Qg`Xn3!s9gfxPs*rc{)J^`cV_+>Kh9!NrADi>URNt}TvIBs*J9ysS^w$!c;ALy4CjT~ z#?Jk3ziMswuC=$&-fTt!BtQZrKmsH{0wh2JBtQZrKmz}e0N(gAdQH7*Rr%5%`b`^; ziv&o31W14cNPq-LfCNZ@1W14cNMPv+B;C`CM70ktd*^4p_Eq`^{lpzHeg%%Pb@gE0 z|DWdd|DvDuK${a636KB@kN^pg011!)36KB@kN^pgz!DJ1zViFoSAM^0CX~I|H2=+y zw}1Dfb99K&C5n|uUgQ0H!eX>mea;ODa~Z2WF7G z)Q@R<^Z7MVedr)T^l=xnn8B;@UHojg%g<4Ce$+=T=F26Z|0J6$3m!AGNBa4Nl9H+M zgT5cg8&_9Y*X!Z*0=go^AI*ZhX_7|U=a{28!HPt3oR^- zGs*s&+vN7{0=baDzp&2k&dmQWpQc!hG2_wRS~qLD-83e$#~QKTwd>d0(?gqfIqVl2 z>-$e5ziRE^q4~H_Z<>(+36KB@kN^pg011!)36KB@kiZHOz#Ct$UNaxDsr<&@@n%5+DH*AOR8}0TLhq5+DH*Ac3VP5OvP4BGWp$?p|JWTQ|dh=tpjg>sPRlxNe^1 z{r@Ac|M&PU?#Hs@AOR8}0TLhq5+DH*AOR8}0TLhq5?BHP{wu%dzw&!kxuMRThJ2eJ zZ~x9&`{Wo`*DOY)b@i{m?fa%2>BP4K8h6HQy!7{U%JINX38jpI4pG)w#u)0C=;8EB z^6>Oa@R-t{vq!4_96f^ibMna4Pk7*Oc;=X9ARmM&owT~FGiapM*j)1SHsy!@ya;{N zP3+;J`m>JVom5X6(GU6Lnd-W{T_Ycg=s{lh7-=3(-z5VJ5plJNHMBLl&P0B)2looa zp^p9t4D=!G^wnGsLs3(<3DIsd18Ot1t*2L;sX9)&p3uE{Zj4l@bRZ# ze{l4$n=iFDnt=cafB*=900@8p2!H?xfB*=9z#0;eJ3fy-Ft3H_eHI_ZTR|Qc2!H?x zfB*=900@8p2!H?xfB*=9z{(TICYRTl8J*lrXIInFZTW|O=C(3^PaLwjdGhZ6F9q$e zKmY_l00ck)1V8`;KmY_l00ck)1Xh4RpJw1^f0Mq~m)rg1VtjU5z5mav_y4(!&b6{K zRvEs3?cMKCh#&v!069f=VIME_ukM0ZhdoOD4tqHLj(Sw|JLplxTG)9HxJ4!OK zuj$LVrk3^XS=N$vevIR?TwZgiKs4C;%au|vnRAB{j;#&rxsR)e>3enld?}yxVoT14 zIoDfrs4zBrs2A=vS(k6CZ|mg!G#k#R?cIEu({_GMSMqK3ZJowN@*0mYFXO4U?fj~+ bJ!3m00cl_O$dAgrn!LY literal 0 HcmV?d00001 diff --git a/data/cursors/Resize.db b/data/cursors/Resize.db new file mode 100644 index 0000000000000000000000000000000000000000..4316e225e7f89353fbd55606136fc77cae18980c GIT binary patch literal 16384 zcmeI2&q~8U5XLucZSfQ@f)~M~x8A(?E)#%I&S4G%9T7w41Vb@qpTqM;nWBM#ZVdob_+Pbo!M zAOHd&00JNY0w4eaAOHd&00JNY0!u)kOK0F~XPv&+m$&=z>FD^V`2IgDzW>kU=)6}} z!YYH;&+XeSO7UgC4v;RgbAOpsqwbtni!(C)7H6n_OEU`kEzJ0#-|&o5{RU@L>C3Za zZP^2C>jghHfS*~rYCOZXU1t=MKJZ#vs-aCS*$Ve)Y#r*%=5vmHvAIO_SNlwVmisOC zYPvU~9@YzdXb;D{!g+Z%{|z;y7R|GszoeJ#UuML#MNiHxah1N-$*Iz|nxS8IU$*Bz z+E%B`S8aBvp^QPq!9{Qsmu@coE z-b<77Qqq!y3crJJ_ujqx{~tfda3o4iM}MQOR&2PgROHfjmi3NXKVBd2yX|C8;#%j< z-rcWXv(>wO@73y!83Z5z0SG_<0uX=z1Rwwb2teQ;5|BH-ZM~&lv}%0m5B;jmiU9!# zKmY;|fB*y_009U<00Izzz|s?l2B#O1>KZ{2j3RFy56aGf&);N|m~t*ioTJtY4u=qF<3mM!y1&Kl&wm z1ocbw$ki{&W2Sxy9zlKgKFE6^^CBe%>;e`4j{`R literal 0 HcmV?d00001 diff --git a/data/cursors/Resize_Vertical.db b/data/cursors/Resize_Vertical.db new file mode 100644 index 0000000000000000000000000000000000000000..f2ad2f167e1614686bef4b2b239d661495bb442b GIT binary patch literal 16384 zcmeI2ze)o^5XSeCm}s>&f);|M*rc=ZU4$T_DO89G<{@l+4()vei-1_!q_VIR(ZbR= zv+k_B@%}~kLIU5wGP`>--^~4TS1dWDeyp?7R13UZRw}XE>}9@b=MR^MyY{lXChMvC z*7ogpy?SHk=5;vL+9(DBAOHd&00JNY0w4eaAOHd&00MJJK+gEwdP6;FRr}Cy`dQNq z1_B@e0w4eaAOHd&00JNY0w4eaATaX;lJ4rn;l^ z|2v)jhx$`Uu>RV?AS*30Mm^(t-gkgo&Qu9RB5A8hfU?U5biDzOn8Df6hpjDCeRoPI?$ z0{seV{L+tHBUL|QjZFO#HOf45x%xRZOddVZMKx0OZJxXr;^qAaatdk$v9id?k&wWb ziMKH>FC$0p#l%TYMl5YBKhCXrGbhKz6~vghlo(U9poWP_$z@I7xX*EmsXwkQ>sWk5 zZ&F{D&!oB%Kd<`oyZHUfp4{7iynD9%2??e>hkvc(OULZp@5krk@5h|SWD>J4Xn_C- LfB*=9Km-C`owv|B literal 0 HcmV?d00001 diff --git a/data/cursors/Title_Bar.db b/data/cursors/Title_Bar.db new file mode 100644 index 0000000000000000000000000000000000000000..11775f94c96ada6eac87d4189cba417094df7d8e GIT binary patch literal 16384 zcmeI2u}VWR6ozx#+Ts)!!9{R%>*nIS2t`CYs8AK`L-+{3fo?v8gNu`klY^Ur4vy9& z=8s95_FlQUMd1(Jp5){||H=K(A+$pLjKOMGEa~Nn5QR*l*(yR&`$db!ZvY(@ekKmsH{0wh2JBtQZrKmsH{0{@Tz?)duX9q}YZ>qEZDXQ^f! zBtQZrKmsH{0wh2JBtQZrKmsH{0)L)BF+4ggM1S{ebaFiEpPMiA3%A7aTbQWW6}RgC z|E_NTkMcp@Nwwl20TLhq5+DH*AOR8}0TLhq5+DH*_yYvOTmCq_<&WFyg!0!MfsG5VmEaI%tCH>W=*3}v41%xs((Bf%LtXy!>DCD_00TrIOZJYpNvkaj0RPEb*ns-AU z8VG;@2!H?xfB*=900@8p2!H?xfI#I5=-UEU7RH%cu(4R*NG@X&TLQQD9jDRYm}M*0zJIQ>X9 zQu+~UOz4+fBU8V`8oBx<)hN_2p+=@YJqYql_;#M>qey=qy>N}wmp#jXjl=vf_Rp8~ z8!(ddv_xLkg?fJMa>em0n_W4&k>q#b<=M7kPmD9KTip6Kv^CBMv NKmY_l00bft_yy2XI_CfY literal 0 HcmV?d00001 diff --git a/data/scripts/build_app_menu_db.sh b/data/scripts/build_app_menu_db.sh index da1f973fb..1df57f96a 100755 --- a/data/scripts/build_app_menu_db.sh +++ b/data/scripts/build_app_menu_db.sh @@ -114,10 +114,10 @@ entry text 'Reboot' 'sudo -S /sbin/shutdown -r now' end_menu menu 3 -entry script 'Goto Desktop 1' 'e.flipToDesktop(1);' -entry script 'Goto Desktop 2' 'e.flipToDesktop(2);' -entry script 'Goto Desktop 3' 'e.flipToDesktop(3);' -entry script 'Goto Desktop 4' 'e.flipToDesktop(4);' +entry script 'Goto Desktop 0' 'e.flip_to_desktop(0);' +entry script 'Goto Desktop 1' 'e.flip_to_desktop(1);' +entry script 'Goto Desktop 2' 'e.flip_to_desktop(2);' +entry script 'Goto Desktop 3' 'e.flip_to_desktop(3);' end_menu finish diff --git a/data/scripts/build_db.sh b/data/scripts/build_db.sh index 13c073511..79648b6fc 100755 --- a/data/scripts/build_db.sh +++ b/data/scripts/build_db.sh @@ -1,4 +1,4 @@ -# enumerated variables +# enumerated variables - don't touch these ACT_MOUSE_IN=0 ACT_MOUSE_OUT=1 ACT_MOUSE_CLICK=2 @@ -22,6 +22,14 @@ FOCUS_POINTER=0 FOCUS_SLOPPY=1 FOCUS_CLICK=2 +WINDOW_MODE_OPAQUE=0 +WINDOW_MODE_BORDER=1 +WINDOW_MODE_BOX=2 +WINDOW_MODE_TECHNICAL=3 + +GUIDES_LOC_WIN=0 +GUIDES_LOC_SCR=1 + # actions defining how to react to things DB="./actions.db" NUM=0 @@ -161,6 +169,14 @@ edb_ed $DB add "/actions/"$NUM"/button" int 1 edb_ed $DB add "/actions/"$NUM"/key" str "" edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_NONE NUM=$[ $NUM + 1 ]; +edb_ed $DB add "/actions/"$NUM"/name" str "Window_Place" +edb_ed $DB add "/actions/"$NUM"/action" str "Window_Move" +edb_ed $DB add "/actions/"$NUM"/params" str "" +edb_ed $DB add "/actions/"$NUM"/event" int $ACT_MOUSE_CLICK +edb_ed $DB add "/actions/"$NUM"/button" int 1 +edb_ed $DB add "/actions/"$NUM"/key" str "" +edb_ed $DB add "/actions/"$NUM"/modifiers" int $MOD_NONE +NUM=$[ $NUM + 1 ]; edb_ed $DB add "/actions/"$NUM"/name" str "Key_Binding" edb_ed $DB add "/actions/"$NUM"/action" str "Restart" edb_ed $DB add "/actions/"$NUM"/params" str "" @@ -293,12 +309,19 @@ edb_ed $DB add "/actions/count" int $NUM # basic settings DB="./settings.db" -edb_ed $DB add "/focus/mode " int $FOCUS_POINTER -edb_ed $DB add "/move/resist" int 1 -edb_ed $DB add "/move/resist/desk" int 24 -edb_ed $DB add "/move/resist/win" int 12 -edb_ed $DB add "/menu/scroll/resist" int 5 -edb_ed $DB add "/menu/scroll/speed" int 12 +edb_ed $DB add "/focus/mode " int $FOCUS_POINTER +edb_ed $DB add "/move/resist" int 1 +edb_ed $DB add "/move/resist/desk" int 24 +edb_ed $DB add "/move/resist/win" int 12 +edb_ed $DB add "/menu/scroll/resist" int 5 +edb_ed $DB add "/menu/scroll/speed" int 12 +edb_ed $DB add "/window/raise/auto" int 0 +edb_ed $DB add "/window/raise/delay" float 0.5 +edb_ed $DB add "/window/move/mode" int $WINDOW_MODE_BOX +edb_ed $DB add "/window/resize/mode" int $WINDOW_MODE_BOX +edb_ed $DB add "/guides/display/x" float 0.5 +edb_ed $DB add "/guides/display/y" float 0.5 +edb_ed $DB add "/guides/display/location" int $GUIDES_LOC_SCR # what events on windows are "grabbed" by the window manager DB="./grabs.db" diff --git a/src/Makefile.am b/src/Makefile.am index f0f7dbbfa..f8aca2c68 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -CLEANFILES = e_ferite_gen_* +DISTCLEANFILES = e_ferite_gen_* INCLUDES = \ -I$(top_srcdir)/intl \ @@ -8,11 +8,13 @@ INCLUDES = \ bin_PROGRAMS = enlightenment +EXTRA_DIST = e_ferite.fec + if USE_FERITE ferite_c = e_ferite_gen_core.c \ e_ferite_gen_header.h \ e_ferite_gen_e.c \ - e_ferite_gen_Window.c \ + e_ferite_gen_window.c \ e_ferite.h e_ferite.c endif @@ -21,6 +23,8 @@ enlightenment_SOURCES = \ background.h background.c \ border.h border.c \ config.h config.c \ + cursors.c cursors.h \ + delayed.h delayed.c \ desktops.h desktops.c \ embed.c embed.h \ entry.h entry.c \ @@ -36,6 +40,7 @@ enlightenment_SOURCES = \ menu.h menu.c \ menubuild.h menubuild.c \ pack.c \ + place.c place.h \ resist.h resist.c \ scrollbar.h scrollbar.c \ shelf.c \ @@ -45,10 +50,3 @@ enlightenment_SOURCES = \ e.h enlightenment_LDADD = @evas_libs@ @edb_libs@ @ebits_libs@ @ecore_libs@ @efsd_libs@ @ferite_libs@ -lm -lc $(INTLLIBS) - -e_ferite_gen_core.c: e_ferite.fec - rm -f e_ferite_gen_* ; \ - @FEBUILDER@ -m e_ferite_gen e_ferite.fec ; \ - mv e_ferite_gen_core.c e_ferite_gen_core.c.old ; \ - cat e_ferite_gen_core.c.old | sed -e "s/module_init/e_ferite_register/g" > e_ferite_gen_core.c ; \ - rm e_ferite_gen_core.c.old diff --git a/src/actions.c b/src/actions.c index c799c9fee..46bd8537b 100644 --- a/src/actions.c +++ b/src/actions.c @@ -7,6 +7,7 @@ #include "keys.h" #include "view.h" #include "util.h" +#include "guides.h" static Evas_List action_protos = NULL; static Evas_List current_actions = NULL; @@ -64,6 +65,7 @@ static void e_act_snap_start (void *o, E_Action *a, void *data, int x, int y, in static void e_act_zoom_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry); static void e_act_desk_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry); +static void e_act_raise_next_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry); #define SET_BORDER_GRAVITY(_b, _grav) \ e_window_gravity_set(_b->win.container, _grav); \ @@ -385,6 +387,34 @@ e_action_stop_by_object(void *o, void *data, int x, int y, int rx, int ry) } } +void +e_action_stop_by_type(char *action) +{ + Evas_List l; + + again: + for (l = current_actions; l; l = l->next) + { + E_Action *a; + + a = l->data; + if ((a->started) && (a->action_proto->func_stop) && + (action) && (!strcmp(action, a->name))) + { + E_Object *obj; + + if (a->object) + { + obj = a->object; + OBJ_UNREF(obj); + } + a->action_proto->func_stop(a->object, a, NULL, 0, 0, 0, 0); + a->started = 0; + } + } +} + + void e_action_add_proto(char *action, void (*func_start) (void *o, E_Action *a, void *data, int x, int y, int rx, int ry), @@ -486,6 +516,7 @@ e_action_init(void) e_action_add_proto("Winodw_Snap", e_act_snap_start, NULL, NULL); e_action_add_proto("Window_Zoom", e_act_zoom_start, NULL, NULL); e_action_add_proto("Desktop", e_act_desk_start, NULL, NULL); + e_action_add_proto("Window_Next", e_act_raise_next_start, NULL, NULL); } @@ -508,15 +539,43 @@ static void e_act_move_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry) { E_Border *b; + int move_mode = E_GUIDES_BOX; + double align_x = 0.5; + double align_y = 0.5; + int display_loc = E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE; + E_CFG_INT(cfg_window_move_mode, "settings", "/window/move/mode", E_GUIDES_BOX); + E_CFG_FLOAT(cfg_guides_display_x, "settings", "/guides/display/x", 0.5); + E_CFG_FLOAT(cfg_guides_display_y, "settings", "/guides/display/y", 0.5); + E_CFG_INT(cfg_guides_display_location, "settings", "/guides/display/location", E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE); + E_CONFIG_INT_GET(cfg_window_move_mode, move_mode); + E_CONFIG_FLOAT_GET(cfg_guides_display_x, align_x); + E_CONFIG_FLOAT_GET(cfg_guides_display_y, align_y); + E_CONFIG_INT_GET(cfg_guides_display_location, display_loc); b = o; if (!b) b = e_border_current_focused(); if (!b) return; + if (move_mode >= E_GUIDES_BOX) + b->hold_changes = 1; /* if non opaque */ b->mode.move = 1; b->current.requested.dx = 0; b->current.requested.dy = 0; b->previous.requested.dx = 0; b->previous.requested.dy = 0; + { + char buf[4096]; + + e_border_print_pos(buf, b); + e_guides_set_display_alignment(align_x, align_y); + e_guides_set_mode(move_mode); + e_guides_set_display_location(display_loc); + e_guides_display_text(buf); + sprintf(buf, "%s/%s", e_config_get("images"), "win_shadow_icon.png"); + e_guides_display_icon(buf); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_show(); + } return; UN(a); UN(data); @@ -534,6 +593,7 @@ e_act_move_stop (void *o, E_Action *a, void *data, int x, int y, int rx, int ry b = o; if (!b) b = e_border_current_focused(); if (!b) return; + b->hold_changes = 0; /* if non opaque */ b->current.requested.x = b->current.x; b->current.requested.y = b->current.y; b->changed = 1; @@ -542,7 +602,11 @@ e_act_move_stop (void *o, E_Action *a, void *data, int x, int y, int rx, int ry b->current.requested.dy = 0; b->previous.requested.dx = 0; b->previous.requested.dy = 0; + b->changed = 1; + b->current.requested.visible = 1; + b->current.visible = 1; e_border_adjust_limits(b); + e_guides_hide(); return; UN(a); UN(data); @@ -566,6 +630,14 @@ e_act_move_go (void *o, E_Action *a, void *data, int x, int y, int rx, int ry if (dy != 0) b->current.requested.dy = dy; b->changed = 1; e_border_adjust_limits(b); + { + char buf[1024]; + + e_border_print_pos(buf, b); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_display_text(buf); + } return; UN(a); UN(data); @@ -580,11 +652,25 @@ static void e_act_resize_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry) { E_Border *b; + int resize_mode = E_GUIDES_BOX; + double align_x = 0.5; + double align_y = 0.5; + int display_loc = E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE; + E_CFG_INT(cfg_window_resize_mode, "settings", "/window/resize/mode", E_GUIDES_BOX); + E_CFG_FLOAT(cfg_guides_display_x, "settings", "/guides/display/x", 0.5); + E_CFG_FLOAT(cfg_guides_display_y, "settings", "/guides/display/y", 0.5); + E_CFG_INT(cfg_guides_display_location, "settings", "/guides/display/location", E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE); + E_CONFIG_INT_GET(cfg_window_resize_mode, resize_mode); + E_CONFIG_FLOAT_GET(cfg_guides_display_x, align_x); + E_CONFIG_FLOAT_GET(cfg_guides_display_y, align_y); + E_CONFIG_INT_GET(cfg_guides_display_location, display_loc); b = o; if (!b) b = e_border_current_focused(); if (!b) return; if (b->current.shaded != 0) return; + if (resize_mode >= E_GUIDES_BOX) + b->hold_changes = 1; /* if non opaque */ e_window_gravity_set(b->win.client, StaticGravity); e_window_gravity_set(b->win.l, NorthWestGravity); e_window_gravity_set(b->win.r, SouthEastGravity); @@ -625,6 +711,20 @@ e_act_resize_start (void *o, E_Action *a, void *data, int x, int y, int rx, int /* e_window_gravity_set(b->win.container, NorthWestGravity); */ } } + { + char buf[4096]; + + e_border_print_size(buf, b); + e_guides_set_display_alignment(align_x, align_y); + e_guides_set_mode(resize_mode); + e_guides_set_display_location(display_loc); + e_guides_display_text(buf); + sprintf(buf, "%s/%s", e_config_get("images"), "win_shadow_icon.png"); + e_guides_display_icon(buf); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_show(); + } return; UN(a); UN(data); @@ -641,6 +741,7 @@ e_act_resize_stop (void *o, E_Action *a, void *data, int x, int y, int rx, int if (!b) b = e_border_current_focused(); if (!b) return; if (b->current.shaded != 0) return; + b->hold_changes = 0; /* if non opaque */ b->current.requested.x = b->current.x; b->current.requested.y = b->current.y; b->current.requested.w = b->current.w; @@ -650,6 +751,7 @@ e_act_resize_stop (void *o, E_Action *a, void *data, int x, int y, int rx, int e_border_adjust_limits(b); e_window_gravity_set(b->win.client, NorthWestGravity); SET_BORDER_GRAVITY(b, NorthWestGravity); + e_guides_hide(); return; UN(a); UN(data); @@ -694,6 +796,14 @@ e_act_resize_go (void *o, E_Action *a, void *data, int x, int y, int rx, int } b->changed = 1; e_border_adjust_limits(b); + { + char buf[1024]; + + e_border_print_size(buf, b); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_display_text(buf); + } return; UN(a); UN(data); @@ -708,11 +818,25 @@ static void e_act_resize_h_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry) { E_Border *b; + int resize_mode = E_GUIDES_BOX; + double align_x = 0.5; + double align_y = 0.5; + int display_loc = E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE; + E_CFG_INT(cfg_window_resize_mode, "settings", "/window/resize/mode", E_GUIDES_BOX); + E_CFG_FLOAT(cfg_guides_display_x, "settings", "/guides/display/x", 0.5); + E_CFG_FLOAT(cfg_guides_display_y, "settings", "/guides/display/y", 0.5); + E_CFG_INT(cfg_guides_display_location, "settings", "/guides/display/location", E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE); + E_CONFIG_INT_GET(cfg_window_resize_mode, resize_mode); + E_CONFIG_FLOAT_GET(cfg_guides_display_x, align_x); + E_CONFIG_FLOAT_GET(cfg_guides_display_y, align_y); + E_CONFIG_INT_GET(cfg_guides_display_location, display_loc); b = o; if (!b) b = e_border_current_focused(); if (!b) return; if (b->current.shaded != 0) return; + if (resize_mode >= E_GUIDES_BOX) + b->hold_changes = 1; /* if non opaque */ e_window_gravity_set(b->win.client, StaticGravity); e_window_gravity_set(b->win.l, NorthWestGravity); e_window_gravity_set(b->win.r, SouthEastGravity); @@ -731,6 +855,20 @@ e_act_resize_h_start (void *o, E_Action *a, void *data, int x, int y, int rx, in b->mode.resize = 5; /* SET_BORDER_GRAVITY(b, NorthEastGravity);*/ } + { + char buf[4096]; + + e_border_print_size(buf, b); + e_guides_set_display_alignment(align_x, align_y); + e_guides_set_mode(resize_mode); + e_guides_set_display_location(display_loc); + e_guides_display_text(buf); + sprintf(buf, "%s/%s", e_config_get("images"), "win_shadow_icon.png"); + e_guides_display_icon(buf); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_show(); + } return; UN(a); UN(data); @@ -748,6 +886,7 @@ e_act_resize_h_stop (void *o, E_Action *a, void *data, int x, int y, int rx, in if (!b) b = e_border_current_focused(); if (!b) return; if (b->current.shaded != 0) return; + b->hold_changes = 0; /* if non opaque */ b->current.requested.x = b->current.x; b->current.requested.y = b->current.y; b->current.requested.w = b->current.w; @@ -757,6 +896,7 @@ e_act_resize_h_stop (void *o, E_Action *a, void *data, int x, int y, int rx, in e_border_adjust_limits(b); e_window_gravity_set(b->win.client, NorthWestGravity); SET_BORDER_GRAVITY(b, NorthWestGravity); + e_guides_hide(); return; UN(a); UN(data); @@ -786,6 +926,14 @@ e_act_resize_h_go (void *o, E_Action *a, void *data, int x, int y, int rx, in } b->changed = 1; e_border_adjust_limits(b); + { + char buf[1024]; + + e_border_print_size(buf, b); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_display_text(buf); + } return; UN(a); UN(data); @@ -801,11 +949,25 @@ static void e_act_resize_v_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry) { E_Border *b; + int resize_mode = E_GUIDES_BOX; + double align_x = 0.5; + double align_y = 0.5; + int display_loc = E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE; + E_CFG_INT(cfg_window_resize_mode, "settings", "/window/resize/mode", E_GUIDES_BOX); + E_CFG_FLOAT(cfg_guides_display_x, "settings", "/guides/display/x", 0.5); + E_CFG_FLOAT(cfg_guides_display_y, "settings", "/guides/display/y", 0.5); + E_CFG_INT(cfg_guides_display_location, "settings", "/guides/display/location", E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE); + E_CONFIG_INT_GET(cfg_window_resize_mode, resize_mode); + E_CONFIG_FLOAT_GET(cfg_guides_display_x, align_x); + E_CONFIG_FLOAT_GET(cfg_guides_display_y, align_y); + E_CONFIG_INT_GET(cfg_guides_display_location, display_loc); b = o; if (!b) b = e_border_current_focused(); if (!b) return; if (b->current.shaded != 0) return; + if (resize_mode >= E_GUIDES_BOX) + b->hold_changes = 1; /* if non opaque */ e_window_gravity_set(b->win.client, StaticGravity); e_window_gravity_set(b->win.l, NorthWestGravity); e_window_gravity_set(b->win.r, SouthEastGravity); @@ -826,6 +988,20 @@ e_act_resize_v_start (void *o, E_Action *a, void *data, int x, int y, int rx, in b->mode.resize = 7; /* SET_BORDER_GRAVITY(b, SouthWestGravity);*/ } + { + char buf[4096]; + + e_border_print_size(buf, b); + e_guides_set_display_alignment(align_x, align_y); + e_guides_set_mode(resize_mode); + e_guides_set_display_location(display_loc); + e_guides_display_text(buf); + sprintf(buf, "%s/%s", e_config_get("images"), "win_shadow_icon.png"); + e_guides_display_icon(buf); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_show(); + } return; UN(a); UN(data); @@ -843,6 +1019,7 @@ e_act_resize_v_stop (void *o, E_Action *a, void *data, int x, int y, int rx, in if (!b) b = e_border_current_focused(); if (!b) return; if (b->current.shaded != 0) return; + b->hold_changes = 0; /* if non opaque */ b->current.requested.x = b->current.x; b->current.requested.y = b->current.y; b->current.requested.w = b->current.w; @@ -852,6 +1029,7 @@ e_act_resize_v_stop (void *o, E_Action *a, void *data, int x, int y, int rx, in e_window_gravity_set(b->win.client, NorthWestGravity); SET_BORDER_GRAVITY(b, NorthWestGravity); b->changed = 1; + e_guides_hide(); return; UN(a); UN(data); @@ -881,6 +1059,14 @@ e_act_resize_v_go (void *o, E_Action *a, void *data, int x, int y, int rx, in } e_border_adjust_limits(b); b->changed = 1; + { + char buf[1024]; + + e_border_print_size(buf, b); + e_guides_move(b->current.x, b->current.y); + e_guides_resize(b->current.w, b->current.h); + e_guides_display_text(buf); + } return; UN(a); UN(data); @@ -1320,3 +1506,17 @@ e_act_desk_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry UN(ry); } + +static void +e_act_raise_next_start (void *o, E_Action *a, void *data, int x, int y, int rx, int ry) +{ + e_border_raise_next(); + return; + UN(o); + UN(a); + UN(data); + UN(x); + UN(y); + UN(rx); + UN(ry); +} diff --git a/src/actions.h b/src/actions.h index 08854096d..b29da78a9 100644 --- a/src/actions.h +++ b/src/actions.h @@ -63,6 +63,7 @@ void e_action_go(char *action, int act, int button, char *key, Ev_Key_Modifiers mods, void *o, void *data, int x, int y, int rx, int ry, int dx, int dy); void e_action_stop_by_object(void *o, void *data, int x, int y, int rx, int ry); +void e_action_stop_by_type(char *action); void e_action_add_proto(char *action, void (*func_start) (void *o, E_Action *a, void *data, int x, int y, int rx, int ry), void (*func_stop) (void *o, E_Action *a, void *data, int x, int y, int rx, int ry), diff --git a/src/border.c b/src/border.c index 4410af9e5..e9ac05f95 100644 --- a/src/border.c +++ b/src/border.c @@ -1,10 +1,12 @@ #include "border.h" #include "config.h" #include "actions.h" +#include "delayed.h" #include "desktops.h" #include "resist.h" #include "icccm.h" #include "util.h" +#include "place.h" /* Window border rendering, querying, setting & modification code */ @@ -21,6 +23,9 @@ static int border_mouse_buttons = 0; static Eevent *current_ev = NULL; +/* Global delayed window raise action */ +E_Delayed_Action *delayed_window_raise = NULL; + static void e_idle(void *data); static void e_map_request(Eevent * ev); static void e_configure_request(Eevent * ev); @@ -100,7 +105,8 @@ e_map_request(Eevent * ev) b = e_border_find_by_window(e->win); if (!b) { - b = e_border_adopt(e->win, 0); + if (e_window_exists(e->win)) + b = e_border_adopt(e->win, 0); } } current_ev = NULL; @@ -390,6 +396,7 @@ e_focus_in(Eevent * ev) b->current.selected = 1; e_border_focus_grab_ended(); b->changed = 1; + OBS_NOTIFY(b, EV_WINDOW_FOCUS_IN); } } current_ev = NULL; @@ -437,6 +444,7 @@ e_focus_out(Eevent * ev) } b->changed = 1; } + e_delayed_action_cancel(delayed_window_raise); } current_ev = NULL; } @@ -742,6 +750,8 @@ e_cb_mouse_in(void *data, Ebits_Object o, char *class, int bt, int x, int y, int if (border_mouse_buttons) return; border_mouse_x = mouse_x; border_mouse_y = mouse_y; + if (class) e_cursors_display_in_window(b->win.main, class); + else e_cursors_display_in_window(b->win.main, "Default"); if (!current_ev) return; e_action_stop(class, ACT_MOUSE_IN, 0, NULL, EV_KEY_MODIFIER_NONE, b, NULL, x, y, border_mouse_x, border_mouse_y); e_action_start(class, ACT_MOUSE_IN, 0, NULL, EV_KEY_MODIFIER_NONE, b, NULL, x, y, border_mouse_x, border_mouse_y); @@ -764,6 +774,7 @@ e_cb_mouse_out(void *data, Ebits_Object o, char *class, int bt, int x, int y, in border_mouse_x = mouse_x; border_mouse_y = mouse_y; if (!current_ev) return; + e_cursors_display_in_window(b->win.main, "Default"); e_action_stop(class, ACT_MOUSE_OUT, 0, NULL, EV_KEY_MODIFIER_NONE, b, NULL, x, y, border_mouse_x, border_mouse_y); e_action_start(class, ACT_MOUSE_OUT, 0, NULL, EV_KEY_MODIFIER_NONE, b, NULL, x, y, border_mouse_x, border_mouse_y); return; @@ -1138,6 +1149,7 @@ e_border_adopt(Window win, int use_client_pos) { E_Border *b; int bw; + int show = 1; /* create the struct */ b = e_border_new(); @@ -1187,6 +1199,7 @@ e_border_adopt(Window win, int use_client_pos) e_window_get_geometry(win, &x, &y, NULL, NULL); b->current.requested.x = x; b->current.requested.y = y; + b->changed = 1; } /* reparent the window finally */ e_window_reparent(win, b->win.container, 0, 0); @@ -1201,6 +1214,7 @@ e_border_adopt(Window win, int use_client_pos) b->current.requested.y += pt; b->changed = 1; } + if (!use_client_pos) { int x, y; int pl, pr, pt, pb; @@ -1238,7 +1252,7 @@ e_border_adopt(Window win, int use_client_pos) break; case SouthWestGravity: x = b->client.pos.x + pl; - y = b->client.pos.y - pb; + y = b->client.pos.y - pb + bw; break; case WestGravity: x = b->client.pos.x + pl; @@ -1264,8 +1278,9 @@ e_border_adopt(Window win, int use_client_pos) } else { - x = rand()%600 + pl; - y = rand()%400 + pt; + show = e_place_border(b, b->desk, &x, &y, E_PLACE_SMART); + x += pl; + y += pt; } b->current.requested.x = x - pl; b->current.requested.y = y - pt; @@ -1299,6 +1314,7 @@ e_border_new(void) ZERO(b, E_Border, 1); OBJ_INIT(b, e_border_free); + OBS_REGISTER(delayed_window_raise, b); b->current.requested.w = 1; b->current.requested.h = 1; @@ -1321,6 +1337,7 @@ e_border_new(void) b->win.main = e_window_override_new(desk->win.container, 0, 0, 1, 1); b->win.input = e_window_input_new(b->win.main, 0, 0, 1, 1); b->win.container = e_window_override_new(b->win.main, 0, 0, 1, 1); + e_cursors_display_in_window(b->win.container, "Application"); e_window_set_events_propagate(b->win.input, 1); e_window_set_events(b->win.input, XEV_MOUSE_MOVE | XEV_BUTTON); e_window_set_events(b->win.main, XEV_IN_OUT); @@ -1368,6 +1385,10 @@ e_border_new(void) font_dir); b->win.b = evas_get_window(b->evas.b); e_add_child(b->win.main, b->win.b); + e_cursors_display_in_window(b->win.l, "Default"); + e_cursors_display_in_window(b->win.r, "Default"); + e_cursors_display_in_window(b->win.t, "Default"); + e_cursors_display_in_window(b->win.b, "Default"); b->obj.title.l = evas_add_text(b->evas.l, "borzoib", 8, ""); b->obj.title.r = evas_add_text(b->evas.r, "borzoib", 8, ""); @@ -1847,6 +1868,7 @@ e_border_update(E_Border *b) int visibility_changed = 0; int state_changed = 0; + if (b->hold_changes) return; if (!b->changed) return; b->current.visible = b->current.requested.visible; @@ -2120,6 +2142,17 @@ e_border_set_layer(E_Border *b, int layer) else e_border_raise(b); } +static void +e_border_raise_delayed(int val, void *b) +{ + int auto_raise = 0; + E_CFG_INT(cfg_auto_raise, "settings", "/window/raise/auto", 0); + + E_CONFIG_INT_GET(cfg_auto_raise, auto_raise); + if (auto_raise) + e_border_raise((E_Border *)b); +} + void e_border_raise(E_Border *b) { @@ -2221,6 +2254,11 @@ e_border_lower_below(E_Border *b, E_Border *below) void e_border_init(void) { + double raise_delay = 0.5; + E_CFG_FLOAT(cfg_raise_delay, "settings", "/window/raise/delay", 0.5); + + E_CONFIG_FLOAT_GET(cfg_raise_delay, raise_delay); + e_event_filter_handler_add(EV_MOUSE_DOWN, e_mouse_down); e_event_filter_handler_add(EV_MOUSE_UP, e_mouse_up); e_event_filter_handler_add(EV_MOUSE_MOVE, e_mouse_move); @@ -2241,6 +2279,9 @@ e_border_init(void) e_event_filter_handler_add(EV_COLORMAP, e_colormap); e_event_filter_idle_handler_add(e_idle, NULL); + delayed_window_raise = NEW(E_Delayed_Action, 1); + E_DELAYED_ACT_INIT(delayed_window_raise, EV_WINDOW_FOCUS_IN, raise_delay, e_border_raise_delayed); + e_add_event_timer("e_border_poll()", 1.00, e_border_poll, 0, NULL); } @@ -2311,3 +2352,93 @@ e_border_focus_grab_ended(void) b->current.select_lost_from_grab = 0; } } + +int +e_border_viewable(E_Border *b) +{ + if (b->desk != e_desktops_get(e_desktops_get_current())) + return 0; + + if (b->current.x + b->current.w < b->desk->x) + return 0; + + if (b->current.x > b->desk->x + b->desk->real.w) + return 0; + + if (b->current.y + b->current.h < b->desk->y) + return 0; + + if (b->current.y > b->desk->y + b->desk->real.h) + return 0; + + return 1; +} + +void +e_border_send_pointer(E_Border *b) +{ + XWarpPointer(e_display_get(), None, b->win.main, 0, 0, 0, 0, b->current.w / 2, b->current.h / 2); +} + +void +e_border_raise_next(void) +{ + Evas_List next; + E_Border *current; + + if (!borders) + return; + + current = e_border_current_focused(); + + /* Find the current border on the list of borders */ + for (next = borders; next && next->data != current; next = next->next); + + /* Step to the next border, wrap around the queue if the end is reached */ + if (next && next->next) + next = next->next; + else + next = borders; + + current = (E_Border *)next->data; + while (next && !e_border_viewable(current)) + { + next = next->next; + if (!next) + next = borders; + + current = (E_Border *)next->data; + } + + printf("current desk coords %d, %d, real dim %d, %d\n", current->desk->x, + current->desk->y, current->desk->real.w, current->desk->real.h); + printf("current coords %d, %d\n", current->current.x, + current->current.y); + + e_border_raise(current); + e_border_send_pointer(current); +} + +void +e_border_print_pos(char *buf, E_Border *b) +{ + sprintf(buf, "%i, %i", + b->current.x, b->current.y); +} + +void +e_border_print_size(char *buf, E_Border *b) +{ + if ((b->client.step.w > 1) || (b->client.step.h > 1)) + { + sprintf(buf, "%i x %i", + (b->client.w - b->client.base.w) / b->client.step.w, + (b->client.h - b->client.base.h) / b->client.step.h); + } + else + { + sprintf(buf, "%i x %i", + b->client.w, + b->client.h); + } +} diff --git a/src/border.h b/src/border.h index 6b7e6c9de..d3a265e35 100644 --- a/src/border.h +++ b/src/border.h @@ -115,6 +115,8 @@ struct _E_Border int first_expose; + int hold_changes; + int changed; }; @@ -143,6 +145,10 @@ void e_border_init(void); void e_border_adopt_children(Window win); E_Border *e_border_current_focused(void); void e_border_focus_grab_ended(void); - +void e_border_raise_next(void); +void e_border_send_pointer(E_Border *b); +int e_border_viewable(E_Border *b); +void e_border_print_pos(char *buf, E_Border *b); +void e_border_print_size(char *buf, E_Border *b); #endif diff --git a/src/config.c b/src/config.c index ff0ec66b7..ce5fffdd3 100644 --- a/src/config.c +++ b/src/config.c @@ -22,8 +22,10 @@ static char cfg_menus_dir[4096] = ""; static char cfg_entries_dir[4096] = ""; static char cfg_selections_dir[4096] = ""; static char cfg_scrollbars_dir[4096] = ""; +static char cfg_guides_dir[4096] = ""; static char cfg_user_dir[4096] = ""; static char cfg_images_dir[4096] = ""; +static char cfg_cursors_dir[4096] = ""; static char cfg_backgrounds_dir[4096] = ""; static char cfg_fonts_dir[4096] = ""; @@ -63,8 +65,12 @@ e_config_get(char *type) PACKAGE_DATA_DIR"/data/config/appearance/default/selections/"); E_CONF("scrollbars", cfg_scrollbars_dir, PACKAGE_DATA_DIR"/data/config/appearance/default/scrollbars/"); + E_CONF("guides", cfg_guides_dir, + PACKAGE_DATA_DIR"/data/config/appearance/default/guides/"); E_CONF("images", cfg_images_dir, PACKAGE_DATA_DIR"/data/images/"); + E_CONF("cursors", cfg_cursors_dir, + PACKAGE_DATA_DIR"/data/cursors/"); E_CONF("backgrounds", cfg_backgrounds_dir, PACKAGE_DATA_DIR"/data/backgrounds/"); E_CONF("fonts", cfg_fonts_dir, @@ -115,8 +121,10 @@ e_config_set_user_dir(char *dir) cfg_entries_dir[0] = 0; cfg_selections_dir[0] = 0; cfg_scrollbars_dir[0] = 0; + cfg_guides_dir[0] = 0; cfg_user_dir[0] = 0; cfg_images_dir[0] = 0; + cfg_cursors_dir[0] = 0; cfg_backgrounds_dir[0] = 0; cfg_fonts_dir[0] = 0; /* init again - if the user hasnt got all the data */ diff --git a/src/cursors.c b/src/cursors.c new file mode 100644 index 000000000..ae1f1e285 --- /dev/null +++ b/src/cursors.c @@ -0,0 +1,238 @@ +#include "cursors.h" +#include "config.h" +#include "util.h" + +typedef struct _e_cursor E_Cursor; + +struct _e_cursor +{ + char *type; + Cursor cursor; + time_t mod; +}; + +static int cursor_change = 0; +static char *cur_cursor = NULL; +static char *prev_cursor = NULL; +static Evas_List cursors = NULL; + +static void e_cursors_idle(void *data); +static void e_cursors_set(char *type); +static E_Cursor * e_cursors_find(char *type); + +static void +e_cursors_idle(void *data) +{ + int change = 0; + + if (!cursor_change) return; + if ((prev_cursor) && (cur_cursor) && (strcmp(prev_cursor, cur_cursor))) + change = 1; + if ((prev_cursor) && (!cur_cursor)) + change = 1; + if ((!prev_cursor) && (cur_cursor)) + change = 1; + if (change) e_cursors_set(cur_cursor); + IF_FREE(prev_cursor); + e_strdup(prev_cursor, cur_cursor); + IF_FREE(cur_cursor); + cur_cursor = NULL; + cursor_change = 0; +} + +static void +e_cursors_set(char *type) +{ + e_cursors_display_in_window(0, type); +} + +static E_Cursor * +e_cursors_find(char *type) +{ + Evas_List l; + + for (l = cursors; l; l = l->next) + { + E_Cursor *c; + + c = l->data; + if (!strcmp(c->type, type)) + { + char buf[4096]; + + sprintf(buf, "%s/%s.db", e_config_get("cursors"), type); + if (e_file_modified_time(buf) > c->mod) + { + cursors = evas_list_remove(cursors, c); + IF_FREE(c->type); + e_cursor_free(c->cursor); + FREE(c); + return NULL; + } + return c; + } + } + return NULL; +} + +void +e_cursors_display_in_window(Window win, char *type) +{ + E_Cursor *c; + + if (!type) type = "Default"; + c = e_cursors_find(type); + if (!c) + { + Pixmap pmap, mask; + int hx = 0, hy = 0; + int fr = 255, fg = 255, fb = 255; + int br = 0, bg = 0, bb = 0; + int w = 32, h = 32; + int ok; + char buf[4096]; + Imlib_Image im; + + c = NEW(E_Cursor, 1); + ZERO(c, E_Cursor, 1); + + e_strdup(c->type, type); + + sprintf(buf, "%s/%s.db", e_config_get("cursors"), type); + c->mod = e_file_modified_time(buf); + E_DB_INT_GET(buf, "/cursor/x", hx, ok); + E_DB_INT_GET(buf, "/cursor/y", hy, ok); + sprintf(buf, "%s/%s.db:/cursor/image", e_config_get("cursors"), type); + im = imlib_load_image(buf); + if (im) + { + DATA32 *data; + int x, y; + GC gcf, gcb; + int have_bg = 0, have_fg = 0; + + imlib_context_set_image(im); + w = imlib_image_get_width(); + h = imlib_image_get_height(); + pmap = e_pixmap_new(0, w, h, 1); + mask = e_pixmap_new(0, w, h, 1); + data = imlib_image_get_data_for_reading_only(); + + /* figure out fg & bg */ + if (!data) goto done; + for (y = 0; y < h; y++) + { + for (x = 0; x < w; x++) + { + int r, g, b, a; + DATA32 pix; + + pix = data[(y * w) + x]; + r = (pix >> 16) & 0xff; + g = (pix >> 8 ) & 0xff; + b = (pix ) & 0xff; + a = (pix >> 24) & 0xff; + + if (a > 127) + { + if (!have_bg) + { + br = r; + bg = g; + bb = b; + have_bg = 1; + } + if (!have_fg) + { + if ((have_bg) && + ((br != r) || (bg != g) || (bb != b))) + { + fr = r; + fg = g; + fb = b; + have_fg = 1; + goto done; + } + } + } + } + } + done: + + /* FIXME: inefficient - using pixmaps and draw point... should */ + /* use XImages & XShm */ + + /* get some gc's set up */ + gcb = e_gc_new(pmap); + gcf = e_gc_new(pmap); + e_gc_set_fg(gcb, 0); + e_gc_set_fg(gcf, 1); + + /* fill out cursor pixmap with 0's (bg) */ + e_fill_rectangle(pmap, gcb, 0, 0, w, h); + e_fill_rectangle(mask, gcb, 0, 0, w, h); + if (!data) goto done2; + for (y = 0; y < h; y++) + { + for (x = 0; x < w; x++) + { + int r, g, b, a; + DATA32 pix; + + pix = data[(y * w) + x]; + r = (pix >> 16) & 0xff; + g = (pix >> 8 ) & 0xff; + b = (pix ) & 0xff; + a = (pix >> 24) & 0xff; + + if (a > 127) + { + e_draw_point(mask, gcf, x, y); + if ((r == fr) && (g == fg) && (b == fb)) + e_draw_point(pmap, gcf, x, y); + } + } + } + done2: + /* clean up */ + e_gc_free(gcb); + e_gc_free(gcf); + + imlib_image_put_back_data(data); + imlib_free_image(); + } + else + { + IF_FREE(c->type); + FREE(c); + c = NULL; + } + if (c) + { + c->cursor = e_cursor_new(pmap, mask, hx, hy, fr, fg, fb, br, bg, bb); + e_pixmap_free(pmap); + e_pixmap_free(mask); + cursors = evas_list_append(cursors, c); + } + } + if (c) + e_cursor_set(win, c->cursor); + else + e_cursors_display_in_window(win, "Default"); +} + +void +e_cursors_display(char *type) +{ + IF_FREE(cur_cursor); + e_strdup(cur_cursor, type); + printf("%s\n", type); + cursor_change = 1; +} + +void +e_cursors_init(void) +{ + e_event_filter_idle_handler_add(e_cursors_idle, NULL); + e_cursors_set("Default"); +} diff --git a/src/cursors.h b/src/cursors.h new file mode 100644 index 000000000..389cc73a4 --- /dev/null +++ b/src/cursors.h @@ -0,0 +1,11 @@ +#ifndef E_CURSORS_H +#define E_CURSORS_H + +#include "e.h" + +void e_cursors_display(char *type); +void e_cursors_display_in_window(Window win, char *type); +void e_cursors_init(void); + +#endif + diff --git a/src/delayed.c b/src/delayed.c new file mode 100644 index 000000000..62af6b9e7 --- /dev/null +++ b/src/delayed.c @@ -0,0 +1,29 @@ + +#include "delayed.h" + +void +e_delayed_action_start(void *obs, void *obj) +{ + char event_name[1024]; + E_Delayed_Action *eda = obs; + + snprintf(event_name, 1024, "_e_delayed_action_notify(%d)", eda->e_event); + e_add_event_timer(event_name, eda->delay, eda->delay_func, 0, obj); +} + +void +e_delayed_action_cancel(void *obs) +{ + E_Delayed_Action *eda = obs; + char event_name[1024]; + snprintf(event_name, 1024, "_e_delayed_action_notify(%d)", eda->e_event); + e_del_event_timer(event_name); +} + +void +e_delayed_action_free(void *obs) +{ + e_delayed_action_cancel(obs); + free(obs); +} + diff --git a/src/delayed.h b/src/delayed.h new file mode 100644 index 000000000..aa85c4b9d --- /dev/null +++ b/src/delayed.h @@ -0,0 +1,27 @@ +#ifndef E_DELAYED_H +#define E_DELAYED_H + +#include "e.h" + +typedef struct _E_Delayed_Action E_Delayed_Action; + +struct _E_Delayed_Action { + OBS_PROPERTIES; + + double delay; + void (*delay_func)(int val, void *obj); +}; + +#define E_DELAYED_ACT_INIT(_e_da, _e_act, _e_delay, _e_act_cb) \ +{ \ + OBS_INIT(_e_da, _e_act, e_delayed_action_start, e_delayed_action_free); \ + _e_da->delay = _e_delay; \ + _e_da->delay_func = _e_act_cb; \ +} + +void e_delayed_action_start(void *obs, void *obj); +void e_delayed_action_cancel(void *obs); +void e_delayed_action_free(void *obs); + +#endif + diff --git a/src/desktops.c b/src/desktops.c index b31677c00..c0165d4fb 100644 --- a/src/desktops.c +++ b/src/desktops.c @@ -59,7 +59,7 @@ e_desktops_scroll(E_Desktop *desk, int dx, int dy) desk->y -= dy; xd = yd = wd = hd = 0; grav = NorthWestGravity; - grav_stick= SouthEastGravity; + grav_stick = SouthEastGravity; if ((dx <= 0) && (dy <= 0)) { grav = NorthWestGravity; @@ -104,7 +104,8 @@ e_desktops_scroll(E_Desktop *desk, int dx, int dy) /* if sticky */ if (b->client.sticky) e_window_gravity_set(b->win.main, StaticGravity); - e_window_gravity_set(b->win.main, grav); + else + e_window_gravity_set(b->win.main, grav); } grav_stick = StaticGravity; e_window_gravity_set(desk->win.desk, grav_stick); @@ -118,7 +119,12 @@ e_desktops_scroll(E_Desktop *desk, int dx, int dy) E_Border *b; b = l->data; - e_window_gravity_set(b->win.main, grav_stick); + /* if sticky */ + if (b->client.sticky) + e_window_gravity_set(b->win.main, StaticGravity); + else + e_window_gravity_set(b->win.main, grav_stick); +/* e_window_gravity_set(b->win.main, grav_stick);*/ } e_window_move_resize(desk->win.container, 0, 0, screen_w, screen_h); e_window_gravity_reset(desk->win.desk); @@ -128,17 +134,19 @@ e_desktops_scroll(E_Desktop *desk, int dx, int dy) b = l->data; e_window_gravity_reset(b->win.main); - b->current.requested.x += dx; - b->current.requested.y += dy; - b->current.x = b->current.requested.x; - b->current.y = b->current.requested.y; - b->previous.requested.x = b->current.requested.x; - b->previous.requested.y = b->current.requested.y; - b->previous.x = b->current.x; - b->previous.y = b->current.y; - b->changed = 1; + if (!b->client.sticky) + { + b->current.requested.x += dx; + b->current.requested.y += dy; + b->current.x = b->current.requested.x; + b->current.y = b->current.requested.y; + b->previous.requested.x = b->current.requested.x; + b->previous.requested.y = b->current.requested.y; + b->previous.x = b->current.x; + b->previous.y = b->current.y; + b->changed = 1; + } } - e_sync(); } void diff --git a/src/e.h b/src/e.h index 02ee97566..2a336ed2d 100644 --- a/src/e.h +++ b/src/e.h @@ -92,11 +92,64 @@ printf("%3.3f : %s()\n", __p->total, __p->func); \ #define E_PROF_DUMP #endif +/* Observer macros */ +#define OBS_PROPERTIES \ +Evas_List watched; \ +Eevent_Type e_event; \ +void (*e_obs_notify)(void *_e_obs, void *_e_obj); \ +void (*e_obs_free)(void *_e_obs); +#define OBS_INIT(_e_obs, _e_event, _e_obs_notify, _e_obs_free) \ +{ \ + _e_obs->watched = NULL; \ + _e_obs->e_event = _e_event; \ + _e_obs->e_obs_notify = _e_obs_notify; \ + _e_obs->e_obs_free = _e_obs_free; \ +} +#define OBS_REGISTER(_e_obs, _e_obj) \ +{ \ + _e_obj->observers = evas_list_append(_e_obj->observers, _e_obs); \ + _e_obs->watched = evas_list_append(_e_obs->watched, _e_obj); \ +} +#define OBS_UNREGISTER(_e_obj, _e_obs) \ +{ \ + _e_obj->observers = evas_list_remove(_e_obj->observers, _e_obs); \ + _e_obs->watched = evas_list_remove(_e_obs->watched, _e_obj); \ +} +#define OBS_NOTIFY(_e_obj, _e_event) \ +{ \ + Evas_List obs; \ + obs = _e_obj->observers; \ + while (obs) { \ + if (((E_Observer *)obs->data)->e_event == EV_MAX || \ + ((E_Observer *)obs->data)->e_event == _e_event) \ + ((E_Observer *)obs->data)->e_obs_notify(obs->data, _e_obj); \ + obs = obs->next; \ + } \ +} +#define OBS_FREE(_e_obs) \ +{ \ + E_Object *_e_obj; \ + E_Observer *_notify; \ + while (_e_obs->watched) { \ + _e_obj = _e_obj->watched->data; \ + OBS_UNREGISTER(_e_obj, _e_obs); \ + _e_obs->e_obs_free(_notify); \ + } \ +} + /* object macros */ #define OBJ_REF(_e_obj) _e_obj->references++ #define OBJ_UNREF(_e_obj) _e_obj->references-- #define OBJ_IF_FREE(_e_obj) if (_e_obj->references == 0) -#define OBJ_FREE(_e_obj) _e_obj->e_obj_free(_e_obj) +#define OBJ_FREE(_e_obj) \ +{ \ + E_Observer *act; \ + while (_e_obj->observers) { \ + act = _e_obj->observers->data; \ + OBS_UNREGISTER(_e_obj, act); \ + } \ + _e_obj->e_obj_free(_e_obj); \ +} #define OBJ_DO_FREE(_e_obj) \ OBJ_UNREF(_e_obj); \ OBJ_IF_FREE(_e_obj) \ @@ -105,7 +158,8 @@ OBJ_FREE(_e_obj); \ } #define OBJ_PROPERTIES \ int references; \ -void (*e_obj_free) (void *e_obj); +void (*e_obj_free) (void *e_obj); \ +Evas_List observers; #define OBJ_INIT(_e_obj, _e_obj_free_func) \ { \ _e_obj->references = 1; \ @@ -114,16 +168,17 @@ _e_obj->e_obj_free = (void *) _e_obj_free_func; \ /* misc util macros */ #define INTERSECTS(x, y, w, h, xx, yy, ww, hh) \ -((x < (xx + ww)) && \ -(y < (yy + hh)) && \ -((x + w) > xx) && \ -((y + h) > yy)) +(((x) < ((xx) + (ww))) && \ +((y) < ((yy) + (hh))) && \ +(((x) + (w)) > (xx)) && \ +(((y) + (h)) > (yy))) #define SPANS_COMMON(x1, w1, x2, w2) \ (!((((x2) + (w2)) <= (x1)) || ((x2) >= ((x1) + (w1))))) #define UN(_blah) _blah = 0 /* data type prototypes... not actually used */ typedef struct _E_Object E_Object; +typedef struct _E_Observer E_Observer; /* actual data struct members */ struct _E_Object @@ -131,4 +186,9 @@ struct _E_Object OBJ_PROPERTIES; }; +struct _E_Observer +{ + OBS_PROPERTIES; +}; + #endif diff --git a/src/e_ferite.fec b/src/e_ferite.fec index c7512fbf6..53c26bee6 100644 --- a/src/e_ferite.fec +++ b/src/e_ferite.fec @@ -5,34 +5,34 @@ %} -class Window { +class window { - function getName(); - function getTitle(); - function getClass(); - function getX(); - function getY(); - function getWidth(); - function getHeight(); + function get_name(); + function get_title(); + function get_class(); + function get_x(); + function get_y(); + function get_width(); + function get_height(); function move( number x, number y ); function resize( number width, number height ); function show(); function hide(); - function isVisible(); + function is_visible(); function shade(); function unshade(); - function isShaded(); + function is_shaded(); function iconify(); function uniconify(); - function isIconic(); + function is_iconic(); - function isMapped(); - function isTransient(); - function isShaped(); + function is_mapped(); + function is_transient(); + function is_shaped(); function delete(); function kill(); @@ -41,25 +41,25 @@ class Window { namespace e { - function flipToDesktop( number desk ) + function flip_to_desktop( number desk ) %{ e_desktops_goto( (long)desk ); %} - function getCurrentDesktop() + function get_current_desktop() %{ int retval = e_desktops_get_current(); FE_RETURN_INT( retval ); %} - function getDesktopCount() + function get_desktop_count() %{ int retval = e_desktops_get_num(); FE_RETURN_INT( retval ); %} - function getWidth(); - function getHeight(); + function get_width(); + function get_height(); // shutdown enlightenment function shutdown() diff --git a/src/embed.c b/src/embed.c index 1c12a827b..f56fff02f 100644 --- a/src/embed.c +++ b/src/embed.c @@ -269,6 +269,8 @@ e_embed_image_func_get_min_size(void *_data, double *w, double *h) int iw, ih; em = _data; + iw = 0; + ih = 0; evas_get_image_size(em->evas, em->image_obj, &iw, &ih); if (w) *w = iw; if (h) *h = ih; diff --git a/src/entry.c b/src/entry.c index ec06be09e..b6a350638 100644 --- a/src/entry.c +++ b/src/entry.c @@ -379,7 +379,7 @@ e_entry_new(void) entry = NEW(E_Entry, 1); ZERO(entry, E_Entry, 1); - entry->buffer=strdup(""); + e_strdup(entry->buffer, ""); entry->select.start = -1; entry->end_width = 4; entries = evas_list_prepend(entries, entry); @@ -473,7 +473,7 @@ e_entry_handle_keypress(E_Entry *entry, Ev_Key_Down *e) { char *str2; - str2 = strdup(e_entry_get_text(entry)); + e_strdup(str2, e_entry_get_text(entry)); str2[entry->cursor_pos] = 0; e_entry_set_text(entry, str2); free(str2); @@ -689,7 +689,7 @@ void e_entry_set_text(E_Entry *entry, const char *text) { IF_FREE(entry->buffer); - entry->buffer = strdup(text); + e_strdup(entry->buffer, text); evas_set_text(entry->evas, entry->text, entry->buffer); if (entry->cursor_pos > (int)strlen(entry->buffer)) entry->cursor_pos = strlen(entry->buffer); @@ -769,7 +769,7 @@ e_entry_clear_selection(E_Entry *entry) if (entry->select.start >= 0) { - str2 = strdup(e_entry_get_text(entry)); + e_strdup(str2, e_entry_get_text(entry)); if (entry->select.start + entry->select.length > (int)strlen(entry->buffer)) entry->select.length = strlen(entry->buffer) - entry->select.start; strcpy(&(str2[entry->select.start]), &(entry->buffer[entry->select.start + entry->select.length])); @@ -786,7 +786,7 @@ e_entry_delete_to_left(E_Entry *entry) { char *str2; - str2 = strdup(e_entry_get_text(entry)); + e_strdup(str2, e_entry_get_text(entry)); strcpy(&(str2[entry->cursor_pos - 1]), &(entry->buffer[entry->cursor_pos])); entry->cursor_pos--; e_entry_set_text(entry, str2); @@ -798,7 +798,7 @@ e_entry_delete_to_right(E_Entry *entry) { char *str2; - str2 = strdup(e_entry_get_text(entry)); + e_strdup(str2, e_entry_get_text(entry)); strcpy(&(str2[entry->cursor_pos]), &(entry->buffer[entry->cursor_pos + 1])); e_entry_set_text(entry, str2); free(str2); diff --git a/src/guides.c b/src/guides.c index 10bc2459f..66d14a25b 100644 --- a/src/guides.c +++ b/src/guides.c @@ -2,6 +2,7 @@ #include "text.h" #include "config.h" #include "embed.h" +#include "util.h" static struct { @@ -35,6 +36,10 @@ static struct Evas_Object icon; Imlib_Image image; } disp; + struct { + Embed icon; + Embed text; + } embed; } guides; static void e_guides_idle(void *data); @@ -65,11 +70,16 @@ e_guides_update(void) { if (!guides.win.display) { - guides.win.display = e_window_new(0, 0, 0, 1, 1); - guides.win.l = e_window_new(0, 0, 0, 1, 1); - guides.win.r = e_window_new(0, 0, 0, 1, 1); - guides.win.t = e_window_new(0, 0, 0, 1, 1); - guides.win.b = e_window_new(0, 0, 0, 1, 1); + guides.win.display = e_window_override_new(0, 0, 0, 1, 1); + guides.win.l = e_window_override_new(0, 0, 0, 1, 1); + guides.win.r = e_window_override_new(0, 0, 0, 1, 1); + guides.win.t = e_window_override_new(0, 0, 0, 1, 1); + guides.win.b = e_window_override_new(0, 0, 0, 1, 1); + e_window_save_under(guides.win.display); + e_window_save_under(guides.win.l); + e_window_save_under(guides.win.r); + e_window_save_under(guides.win.t); + e_window_save_under(guides.win.b); redraw = 1; } if (!guides.disp.evas) @@ -100,9 +110,18 @@ e_guides_update(void) e_window_destroy(guides.win.r); e_window_destroy(guides.win.t); e_window_destroy(guides.win.b); + guides.win.display = 0; + guides.win.l = 0; + guides.win.r = 0; + guides.win.t = 0; + guides.win.b = 0; } if (guides.disp.evas) { + if (guides.embed.icon) e_embed_free(guides.embed.icon); + if (guides.embed.text) e_embed_free(guides.embed.text); + guides.embed.icon = NULL; + guides.embed.text = NULL; if (guides.disp.bg) ebits_free(guides.disp.bg); if (guides.disp.text) e_text_free(guides.disp.text); if (guides.disp.image) @@ -132,9 +151,7 @@ e_guides_update(void) if ((guides.win.display) && (redraw)) { - int dx, dy, dw, dh; - int iw, ih; - double tw, th; + int dx, dy, dw, dh, sw, sh, mw, mh; char file[4096]; if (!guides.disp.text) @@ -143,16 +160,6 @@ e_guides_update(void) e_text_set_layer(guides.disp.text, 100); e_text_show(guides.disp.text); } - if (!guides.disp.bg) - { - guides.disp.bg = ebits_load(file); - if (guides.disp.bg) - { - ebits_add_to_evas(guides.disp.bg, guides.disp.evas); - ebits_set_layer(guides.disp.bg, 0); - ebits_show(guides.disp.bg); - } - } if ((!guides.current.display.icon) && (guides.disp.icon)) { evas_del_object(guides.disp.evas, guides.disp.icon); @@ -161,18 +168,264 @@ e_guides_update(void) if ((guides.current.display.icon) && (!guides.disp.icon)) { guides.disp.icon = evas_add_image_from_file(guides.disp.evas, guides.current.display.icon); + evas_show(guides.disp.evas, guides.disp.icon); } if (guides.disp.icon) - { - evas_set_image_file(guides.disp.evas, guides.disp.icon, guides.current.display.icon); - evas_get_image_size(guides.disp.evas, guides.disp.icon, &iw, &ih); - } + evas_set_image_file(guides.disp.evas, guides.disp.icon, guides.current.display.icon); e_text_set_text(guides.disp.text, guides.current.display.text); - e_text_get_min_size(guides.disp.text, &tw, &th); + if (!guides.disp.bg) + { + char *dir; + + dir = e_config_get("guides"); + sprintf(file, "%s/display.bits.db", dir); + guides.disp.bg = ebits_load(file); + if (guides.disp.bg) + { + ebits_add_to_evas(guides.disp.bg, guides.disp.evas); + ebits_set_layer(guides.disp.bg, 0); + ebits_show(guides.disp.bg); + } + } + + mw = 1; + mh = 1; + + if (guides.disp.bg) + { + guides.embed.icon = e_embed_image_object(guides.disp.bg, "Icon", guides.disp.evas, guides.disp.icon); + guides.embed.text = e_embed_text(guides.disp.bg, "Text", guides.disp.evas, guides.disp.text, 0, 0); + ebits_get_real_min_size(guides.disp.bg, &mw, &mh); + } + + dw = mw; + dh = mh; + + if (guides.disp.bg) + { + ebits_move(guides.disp.bg, 0, 0); + ebits_resize(guides.disp.bg, dw, dh); + } + if (guides.current.display.loc == E_GUIDES_DISPLAY_LOCATION_SCREEN_MIDDLE) + { + e_window_get_geometry(0, NULL, NULL, &sw, &sh); + dx = (int)(((double)sw - (double)dw) * guides.current.display.align.x); + dy = (int)(((double)sh - (double)dh) * guides.current.display.align.y); + } + else if (guides.current.display.loc == E_GUIDES_DISPLAY_LOCATION_WINDOW_MIDDLE) + { + dx = guides.current.x + (int)(((double)guides.current.w - (double)dw) * guides.current.display.align.x); + dy = guides.current.y + (int)(((double)guides.current.h - (double)dh) * guides.current.display.align.y); + } + + if (guides.disp.image) + { + imlib_context_set_image(guides.disp.image); + imlib_free_image(); + guides.disp.image = NULL; + } + + guides.disp.image = imlib_create_image(dw, dh); + imlib_context_set_image(guides.disp.image); + imlib_image_set_has_alpha(1); + imlib_image_clear(); + + evas_set_output_image(guides.disp.evas, guides.disp.image); + evas_set_output_size(guides.disp.evas, dw, dh); + evas_set_output_viewport(guides.disp.evas, 0, 0, dw, dh); + evas_update_rect(guides.disp.evas, 0, 0, dw, dh); + evas_render(guides.disp.evas); + { + Pixmap pmap, mask; + + pmap = e_pixmap_new(guides.win.display, dw, dh, 0); + mask = e_pixmap_new(guides.win.display, dw, dh, 1); + + imlib_context_set_image(guides.disp.image); + + imlib_context_set_dither_mask(1); + imlib_context_set_dither(1); + imlib_context_set_drawable(pmap); + imlib_context_set_mask(mask); + imlib_context_set_blend(0); + imlib_context_set_color_modifier(NULL); + + imlib_render_image_on_drawable(0, 0); + e_window_set_background_pixmap(guides.win.display, pmap); + e_window_set_shape_mask(guides.win.display, mask); + e_window_clear(guides.win.display); + e_pixmap_free(pmap); + e_pixmap_free(mask); + } + e_window_move(guides.win.display, dx, dy); + e_window_resize(guides.win.display, dw, dh); if (guides.current.mode == E_GUIDES_BOX) { + int fr, fg, fb, fa, br, bg, bb, ba; + int x, y, w, h; + Pixmap pmap, mask; + Imlib_Image image; + imlib_context_set_dither_mask(1); + imlib_context_set_dither(1); + imlib_context_set_blend(1); + imlib_context_set_color_modifier(NULL); + + fr = 255; fg = 255; fb = 255; fa = 255; + br = 0 ; bg = 0 ; bb = 0 ; ba = 255; + + x = guides.current.x; + y = guides.current.y + 3; + w = 3; + h = guides.current.h - 6; + if ((w > 0) && (h > 0)) + { + image = imlib_create_image(w, h); + imlib_context_set_image(image); + imlib_image_set_has_alpha(1); + imlib_image_clear(); + + imlib_context_set_color(fr, fg, fb, fa); + imlib_image_draw_line(1, 0, 1, h - 1, 0); + imlib_context_set_color(br, bg, bb, ba); + imlib_image_draw_line(0, 0, 0, h - 1, 0); + imlib_image_draw_line(2, 0, 2, h - 1, 0); + + pmap = e_pixmap_new(guides.win.l, w, h, 0); + mask = e_pixmap_new(guides.win.l, w, h, 1); + imlib_context_set_drawable(pmap); + imlib_context_set_mask(mask); + imlib_render_image_on_drawable(0, 0); + imlib_free_image(); + e_window_move(guides.win.l, x, y); + e_window_resize(guides.win.l, w, h); + e_window_set_background_pixmap(guides.win.l, pmap); + e_window_set_shape_mask(guides.win.l, mask); + e_window_clear(guides.win.l); + e_pixmap_free(pmap); + e_pixmap_free(mask); + } + else + { + e_window_resize(guides.win.l, 0, 0); + } + + x = guides.current.x + guides.current.w - 3; + y = guides.current.y + 3; + w = 3; + h = guides.current.h - 6; + if ((w > 0) && (h > 0)) + { + image = imlib_create_image(w, h); + imlib_context_set_image(image); + imlib_image_set_has_alpha(1); + imlib_image_clear(); + + imlib_context_set_color(fr, fg, fb, fa); + imlib_image_draw_line(1, 0, 1, h - 1, 0); + imlib_context_set_color(br, bg, bb, ba); + imlib_image_draw_line(0, 0, 0, h - 1, 0); + imlib_image_draw_line(2, 0, 2, h - 1, 0); + + pmap = e_pixmap_new(guides.win.r, w, h, 0); + mask = e_pixmap_new(guides.win.r, w, h, 1); + imlib_context_set_drawable(pmap); + imlib_context_set_mask(mask); + imlib_render_image_on_drawable(0, 0); + imlib_free_image(); + e_window_move(guides.win.r, x, y); + e_window_resize(guides.win.r, w, h); + e_window_set_background_pixmap(guides.win.r, pmap); + e_window_set_shape_mask(guides.win.r, mask); + e_window_clear(guides.win.r); + e_pixmap_free(pmap); + e_pixmap_free(mask); + } + else + { + e_window_resize(guides.win.r, 0, 0); + } + + x = guides.current.x; + y = guides.current.y; + w = guides.current.w; + h = 3; + if ((w > 0) && (h > 0)) + { + image = imlib_create_image(w, h); + imlib_context_set_image(image); + imlib_image_set_has_alpha(1); + imlib_image_clear(); + + imlib_context_set_color(br, bg, bb, ba); + imlib_image_draw_line(0, 0, w - 1, 0, 0); + imlib_image_draw_line(2, 2, w - 3, 2, 0); + imlib_image_draw_line(0, 1, 0, 2, 0); + imlib_image_draw_line(w - 1, 1, w - 1, 2, 0); + imlib_context_set_color(fr, fg, fb, fa); + imlib_image_draw_line(1, 1, w - 2, 1, 0); + imlib_image_draw_line(1, 2, 1, 2, 0); + imlib_image_draw_line(w - 2, 2, w - 2, 2, 0); + + pmap = e_pixmap_new(guides.win.t, w, h, 0); + mask = e_pixmap_new(guides.win.t, w, h, 1); + imlib_context_set_drawable(pmap); + imlib_context_set_mask(mask); + imlib_render_image_on_drawable(0, 0); + imlib_free_image(); + e_window_move(guides.win.t, x, y); + e_window_resize(guides.win.t, w, h); + e_window_set_background_pixmap(guides.win.t, pmap); + e_window_set_shape_mask(guides.win.t, mask); + e_window_clear(guides.win.t); + e_pixmap_free(pmap); + e_pixmap_free(mask); + } + else + { + e_window_resize(guides.win.t, 0, 0); + } + + x = guides.current.x; + y = guides.current.y + guides.current.h - 3; + w = guides.current.w; + h = 3; + if ((w > 0) && (h > 0)) + { + image = imlib_create_image(w, h); + imlib_context_set_image(image); + imlib_image_set_has_alpha(1); + imlib_image_clear(); + + imlib_context_set_color(br, bg, bb, ba); + imlib_image_draw_line(0, 2, w - 1, 2, 0); + imlib_image_draw_line(2, 0, w - 3, 0, 0); + imlib_image_draw_line(0, 0, 0, 1, 0); + imlib_image_draw_line(w - 1, 0, w - 1, 1, 0); + imlib_context_set_color(fr, fg, fb, fa); + imlib_image_draw_line(1, 1, w - 2, 1, 0); + imlib_image_draw_line(1, 0, 1, 0, 0); + imlib_image_draw_line(w - 2, 0, w - 2, 0, 0); + + pmap = e_pixmap_new(guides.win.b, w, h, 0); + mask = e_pixmap_new(guides.win.b, w, h, 1); + imlib_context_set_drawable(pmap); + imlib_context_set_mask(mask); + imlib_render_image_on_drawable(0, 0); + imlib_free_image(); + e_window_move(guides.win.b, x, y); + e_window_resize(guides.win.b, w, h); + e_window_set_background_pixmap(guides.win.b, pmap); + e_window_set_shape_mask(guides.win.b, mask); + e_window_clear(guides.win.b); + e_pixmap_free(pmap); + e_pixmap_free(mask); + } + else + { + e_window_resize(guides.win.b, 0, 0); + } } } @@ -180,8 +433,25 @@ e_guides_update(void) { if (guides.current.visible) { + if (guides.current.mode != E_GUIDES_OPAQUE) + { + e_window_raise(guides.win.l); + e_window_show(guides.win.l); + e_window_raise(guides.win.r); + e_window_show(guides.win.r); + e_window_raise(guides.win.t); + e_window_show(guides.win.t); + e_window_raise(guides.win.b); + e_window_show(guides.win.b); + } e_window_raise(guides.win.display); e_window_show(guides.win.display); + } + } + if (guides.current.mode != guides.prev.mode) + { + if (guides.current.mode == E_GUIDES_BOX) + { e_window_raise(guides.win.l); e_window_show(guides.win.l); e_window_raise(guides.win.r); @@ -191,6 +461,13 @@ e_guides_update(void) e_window_raise(guides.win.b); e_window_show(guides.win.b); } + else if (guides.prev.mode == E_GUIDES_OPAQUE) + { + e_window_hide(guides.win.l); + e_window_hide(guides.win.r); + e_window_hide(guides.win.t); + e_window_hide(guides.win.b); + } } guides.prev = guides.current; } @@ -240,8 +517,7 @@ e_guides_display_text(char *text) IF_FREE(guides.current.display.text); guides.current.display.text = NULL; guides.prev.display.text = (char *)1; - if (text) - guides.current.display.text = strdup(text); + e_strdup(guides.current.display.text, text); } void @@ -253,8 +529,7 @@ e_guides_display_icon(char *icon) IF_FREE(guides.current.display.icon); guides.current.display.icon = NULL; guides.prev.display.icon = (char *)1; - if (icon) - guides.current.display.icon = strdup(icon); + e_strdup(guides.current.display.icon, icon); } void diff --git a/src/main.c b/src/main.c index 029f280eb..e79b5d013 100644 --- a/src/main.c +++ b/src/main.c @@ -26,28 +26,16 @@ static void cb_exit(void) E_PROF_DUMP; } -static void ch_col(int val, void *data); -static void ch_col(int val, void *data) -{ - E_Desktop *desk; - double v; - - v = (double)val / 10; - desk = e_desktops_get(e_desktops_get_current()); - e_desktops_scroll(desk, (int)(8 * sin(v)), (int)(8 * cos(v))); - e_add_event_timer("time", 0.02, ch_col, val + 1, NULL); - return; - UN(data); -} - static void wm_running_error(Display * d, XErrorEvent * ev); static void wm_running_error(Display * d, XErrorEvent * ev) { - if ((ev->request_code == X_ChangeWindowAttributes) && (ev->error_code == BadAccess)) + if ((ev->request_code == X_ChangeWindowAttributes) && + (ev->error_code == BadAccess)) { - fprintf(stderr, "A WM is alreayd running. no point running now is there?\n"); - exit(1); + fprintf(stderr, "A window manager is already running. No point running now is there?\n"); + fprintf(stderr, "Exiting Enlightenment. Error.\n"); + exit(-2); } UN(d); } @@ -60,7 +48,6 @@ setup(void) e_sync(); e_border_adopt_children(0); e_ungrab(); -/* e_add_event_timer("timer", 0.02, ch_col, 0, NULL);*/ } int @@ -69,6 +56,7 @@ main(int argc, char **argv) char *display = NULL; int i; + srand(time(NULL)); atexit(cb_exit); e_exec_set_args(argc, argv); @@ -77,33 +65,38 @@ main(int argc, char **argv) /* Check command line options here: */ for (i = 1; i < argc; i++) { - if ((!strcmp("-display", argv[i])) && (argc - i > 1)) - { - display = argv[++i]; - } - else if ((!strcmp("-help", argv[i])) - || (!strcmp("--help", argv[i])) - || (!strcmp("-h", argv[i])) || (!strcmp("-?", argv[i]))) - { - printf("enlightenment options: \n" - "\t-display display_name \n" - "\t[-v | -version | --version] \n"); - exit(0); - } - else if ((!strcmp("-v", argv[i])) - || (!strcmp("-version", argv[i])) - || (!strcmp("--version", argv[i])) - || (!strcmp("-v", argv[i]))) - { - printf("Enlightenment Version: %s\n", ENLIGHTENMENT_VERSION); - exit(0); - } + if (( (!strcmp("-d", argv[i])) + || (!strcmp("-disp", argv[i])) + || (!strcmp("-display", argv[i])) + || (!strcmp("--display", argv[i]))) + && (argc - i > 1)) + { + display = argv[++i]; + } + else if ( (!strcmp("-h", argv[i])) + || (!strcmp("-?", argv[i])) + || (!strcmp("-help", argv[i])) + || (!strcmp("--help", argv[i]))) + { + printf("enlightenment options: \n" + "\t[-d | -disp | -display --display] display_name \n" + "\t[-v | -version | --version] \n"); + exit(0); + } + else if ( (!strcmp("-v", argv[i])) + || (!strcmp("-version", argv[i])) + || (!strcmp("--version", argv[i]))) + { + printf("Enlightenment Version: %s\n", ENLIGHTENMENT_VERSION); + exit(0); + } } - + if (!e_display_init(display)) { - fprintf(stderr, "cannot connect to display!\n"); - exit(1); + fprintf(stderr, "Enlightenment Error: cannot connect to display!\n"); + fprintf(stderr, "Exiting Enlightenment. Error.\n"); + exit(-1); } e_ev_signal_init(); @@ -128,6 +121,8 @@ main(int argc, char **argv) e_entry_init(); e_keys_init(); e_guides_init(); + e_place_init(); + e_cursors_init(); #ifdef USE_FERITE e_ferite_init(); @@ -142,6 +137,4 @@ main(int argc, char **argv) #endif return 0; - UN(argc); - UN(argv); } diff --git a/src/text.c b/src/text.c index bcd54205c..5c849c9d8 100644 --- a/src/text.c +++ b/src/text.c @@ -66,13 +66,17 @@ e_text_set_text(E_Text *t, char *text) if (!strcmp(t->text, text)) return; IF_FREE(t->text); t->text = strdup(text); + evas_set_text(t->evas, t->obj.o1, t->text); + evas_set_text(t->evas, t->obj.o2, t->text); + evas_set_text(t->evas, t->obj.o3, t->text); + evas_set_text(t->evas, t->obj.o4, t->text); evas_set_text(t->evas, t->obj.text, t->text); t->w = evas_get_text_width(t->evas, t->obj.text) + 2; t->h = evas_get_text_height(t->evas, t->obj.text) + 2; - t->min.w = t->w; - t->min.h = t->h; - t->max.w = t->w; - t->max.h = t->h; + t->min.w = t->w + 2; + t->min.h = t->h + 2; + t->max.w = t->w + 2; + t->max.h = t->h + 2; } void diff --git a/src/view.c b/src/view.c index d57f2ae2b..f2baee8a1 100644 --- a/src/view.c +++ b/src/view.c @@ -21,6 +21,8 @@ static void e_bg_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int static void e_bg_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); static void e_icon_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); static void e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); +static void e_icon_in_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); +static void e_icon_out_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); static void e_icon_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); static void e_idle(void *data); static void e_wheel(Eevent * ev); @@ -241,6 +243,7 @@ e_bg_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) Ev_Mouse_Down *ev; E_View *v; + if (!current_ev) return; ev = current_ev->event; v = _data; if (!(ev->mods & (mulit_select_mod | range_select_mod))) @@ -285,6 +288,7 @@ e_bg_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) E_View *v; int dx, dy; + if (!current_ev) return; ev = current_ev->event; v = _data; dx = 0; @@ -379,6 +383,7 @@ e_bg_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) Ev_Mouse_Down *ev; E_View *v; + if (!current_ev) return; ev = current_ev->event; v = _data; if (v->select.on) @@ -772,6 +777,7 @@ e_icon_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) Ev_Mouse_Down *e; ev = e_view_get_current_event(); + if (!ev) return; e = ev->event; ic = _data; ic->view->select.down.x = _x; @@ -820,6 +826,7 @@ e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) Ev_Mouse_Up *e; ev = e_view_get_current_event(); + if (!ev) return; e = ev->event; ic = _data; if (ic->view->drag.started) @@ -860,6 +867,34 @@ e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) UN(_y); } +static void +e_icon_in_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) +{ + E_Icon *ic; + + ic = _data; + e_cursors_display_in_window(ic->view->win.main, "View_Icon"); + UN(_e); + UN(_o); + UN(_b); + UN(_x); + UN(_y); +} + +static void +e_icon_out_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) +{ + E_Icon *ic; + + ic = _data; + e_cursors_display_in_window(ic->view->win.main, "View"); + UN(_e); + UN(_o); + UN(_b); + UN(_x); + UN(_y); +} + static void e_icon_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) { @@ -868,6 +903,7 @@ e_icon_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) Ev_Mouse_Move *e; ev = e_view_get_current_event(); + if (!ev) return; e = ev->event; ic = _data; if (!ic->state.clicked) return; @@ -961,6 +997,10 @@ e_icon_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) imlib_image_set_has_alpha(1); imlib_context_set_blend(1); imlib_image_clear(); + imlib_context_set_color_modifier(NULL); + imlib_context_set_cliprect(0, 0, 0, 0); + imlib_context_set_angle(0); + for (l = views; l; l = l->next) { E_View *v; @@ -1033,6 +1073,7 @@ e_icon_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) imlib_context_set_drawable(pmap); imlib_context_set_mask(mask); imlib_context_set_blend(0); + imlib_context_set_color_modifier(NULL); imlib_render_image_on_drawable(0, 0); imlib_free_image(); } @@ -1439,6 +1480,7 @@ e_mouse_move(Eevent * ev) if (e->win == v->win.main) { evas_event_move(v->evas, e->x, e->y); + current_ev = NULL; return; } } @@ -1452,6 +1494,7 @@ e_mouse_in(Eevent * ev) Evas_List l; e = ev->event; + current_ev = ev; for (l = views; l; l = l->next) { E_View *v; @@ -1466,9 +1509,11 @@ e_mouse_in(Eevent * ev) e_focus_to_window(e->win); evas_event_enter(v->evas); } + current_ev = NULL; return; } } + current_ev = NULL; } static void @@ -1478,6 +1523,7 @@ e_mouse_out(Eevent * ev) Evas_List l; e = ev->event; + current_ev = ev; for (l = views; l; l = l->next) { E_View *v; @@ -1486,9 +1532,11 @@ e_mouse_out(Eevent * ev) if (e->win == v->win.main) { evas_event_leave(v->evas); + current_ev = NULL; return; } } + current_ev = NULL; } static void @@ -1625,9 +1673,13 @@ e_view_icon_show(E_Icon *ic) evas_set_color(ic->view->evas, ic->obj.event2, 0, 0, 0, 0); evas_callback_add(ic->view->evas, ic->obj.event1, CALLBACK_MOUSE_DOWN, e_icon_down_cb, ic); evas_callback_add(ic->view->evas, ic->obj.event1, CALLBACK_MOUSE_UP, e_icon_up_cb, ic); + evas_callback_add(ic->view->evas, ic->obj.event1, CALLBACK_MOUSE_IN, e_icon_in_cb, ic); + evas_callback_add(ic->view->evas, ic->obj.event1, CALLBACK_MOUSE_OUT, e_icon_out_cb, ic); evas_callback_add(ic->view->evas, ic->obj.event1, CALLBACK_MOUSE_MOVE, e_icon_move_cb, ic); evas_callback_add(ic->view->evas, ic->obj.event2, CALLBACK_MOUSE_DOWN, e_icon_down_cb, ic); evas_callback_add(ic->view->evas, ic->obj.event2, CALLBACK_MOUSE_UP, e_icon_up_cb, ic); + evas_callback_add(ic->view->evas, ic->obj.event2, CALLBACK_MOUSE_IN, e_icon_in_cb, ic); + evas_callback_add(ic->view->evas, ic->obj.event2, CALLBACK_MOUSE_OUT, e_icon_out_cb, ic); evas_callback_add(ic->view->evas, ic->obj.event2, CALLBACK_MOUSE_MOVE, e_icon_move_cb, ic); } evas_set_layer(ic->view->evas, ic->obj.icon, 200); @@ -2234,6 +2286,7 @@ e_view_realize(E_View *v) image_cache, font_dir); v->win.main = evas_get_window(v->evas); + e_cursors_display_in_window(v->win.main, "View"); evas_event_move(v->evas, -999999, -999999); e_add_child(v->win.base, v->win.main); e_window_set_events(v->win.base,