./bugsx-1.08/ 40755 765 144 0 6416051670 11513 5ustar rgaschusers./bugsx-1.08/COPYING100644 765 144 30310 6416051650 12656 0ustar rgaschusers GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! ./bugsx-1.08/Copyright100644 765 144 1702 6416051651 13502 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ ./bugsx-1.08/Imakefile100644 765 144 3714 6416051651 13425 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ # basic definitions for the Imake. Call xmkmf to generate the makefile. # If you do not have xmkmf installed use Makefile.std to make your # own custom makefile. CC=cc LOCAL_LIBRARIES = $(XLIB) -lm CCOPTIONS = -O2 EXTRA_DEFINES = -DAPP_DEFAULTS_DIR=\"$(XAPPLOADDIR)/\" ############################################################################## #!!!!!!!!!!!!!!!!!!!!!!! Do not edit below this point !!!!!!!!!!!!!!!!!!!!!!!# ############################################################################## OBJS = bugsx.o xbutil.o util.o breed.o grow.o noise.o SRCS = bugsx.c xbutil.o util.c breed.c grow.c noise.c INCLUDES = -I$(TOP) -I$(TOP)/X11 ComplexProgramTarget(bugsx) bugsx.o: bugsx.c bugsx.h xbutil.o: xbutil.c bugsx.h util.o: util.c bugsx.h breed.o: breed.c bugsx.h grow.o: grow.c bugsx.h noise.o: noise.c bugsx.h archive: $(HOME)/sh/makeshar COPYING Copyright Imakefile Makefile.std \ Manifest README breed.c bugsx.ps.gz bugsx.c bugsx.h bugsx.man \ grow.c noise.c util.c xbutil.c > bugsx.shar ./bugsx-1.08/Makefile.std100644 765 144 1447 6416051651 14046 0ustar rgaschusers# path to X header files XINCLUDE = /usr/X11R5/include # path to X library files XLIBS = /usr/X11R5/lib # the C compiler, used as linker ;o) CC = cc # use this for SYSV: LDLIBS = -lm -lnsl -lsocket # use this for SOLARIS: LDLIBS = -lnsl LDFLAGS = -L$(XLIBS) LDLIBS = -lX11 -lm OBJS = bugsx.o xbutil.o util.o breed.o grow.o noise.o ######################################## # Do not edit below this point !!!!!!!!! ######################################## xfsm: $(OBJS) @echo -n "Linking xfsm ... " @$(CC) $(LDFLAGS) $(OBJS) $(LDLIBS) -o xfsm @echo "Done." clean: rm -rf *.o ### dependencies for each object bugsx.o: bugsx.c bugsx.h xbutil.o: xbutil.c bugsx.h util.o: util.c bugsx.h breed.o: breed.c bugsx.h grow.o: grow.c bugsx.h noise.o: noise.c bugsx.h ./bugsx-1.08/Manifest100644 765 144 1145 6416051651 13301 0ustar rgaschusersThis distribution contains the following files: Name Amount Description ------------------------------------------------------------ Imakefile 1 Imakefile Makefile.std 1 sample Makefile Manifest 1 This shipping list Copyright 1 Copyright Notice README 1 Docs/User's Guide bugsx.ps.gz 1 gzipped Postscript Tech Report bugsx.man 1 Man page bugsx.lsm 1 LSM page for bugsx bugsx.h 1 definitions bugsx.c 1 main() breed.c 1 breeding routines grow.c 1 drawing routines noise.c 1 random noise generator util.c 1 general utilities xbutil.c 1 X related utilities ./bugsx-1.08/README100644 765 144 27565 6416051652 12527 0ustar rgaschusers This is the README file for BBBB U U GGGGG SSSSS X X B B U U G S X X BBBB U U G GGG SSSSS X B B U U G G S X X BBBB UUU GGGGG SSSSS X X 1) Author & Copyright bugsx was written by (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs is copyright by the author(s). I (Robert_Gasch@peoplesoft.com) maintain the X11 port and Joshua maintains any other ports. See section 4 and 17 for more info. 2) Distribution Policy Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. See the GNU General Public Licence for more information. What does this mean? This means that you can pretty much do with it what you want as long as you don't charge substantially more than the distribution costs for it (of course you have to make the source available). This makes software distributions like Walnut Creek or Infomagic perfectly acceptable. It does NOT matter wether you use it at home or in a comercial environment. If you want to include it in a major commercial distribution you need my permission to do so. 3) Guarantees bugsx should work all right *but* No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. 4) What is bugsx? bugsx runs under MIT's X11 window system. It was written under UNIX but should be easily portable. It is a program which draws the biomorphs based on parametric plots of Fourier sine and cosine series and let's you play with them using the genetic algorithm. The original version which ran under Suntools and XViews was written by Joshua R. Smith sometime 1990. See the 'credits' section for more details. For more information about the theoretic backgrounds of bugsx consult Joshua R. Smith's paper distributed with this program in gzip'ed postscript format as bugs.ps.gz. You have to uncompress this file with 'gunzip' before you can print it. Gunzip should be available at an archive near you. The paper can also be gotten from: http://physics.www.media.mit.edu/~jrs/biomorphs.ps I (Robert_Gasch@peoplesoft.com) maintain the X11 port and Joshua (jrs@media.mit.edu) maintains any other ports. See section 4, and 17 for more info. 5) Version Number The current version number is 1.08 6) Where can I get Bugsx from? Bugsx can be gotten from the following FTP sites: media.mit.edu (/physics/dist/bugs) ftp.x.org (/contrib/applications) 7) What if you change the program? please mail me (Robert_Gasch@peoplesoft.com) the changes(!) as I'd like to act as the central source for bugsx. This will also enable me to include your changes in a future release. If your changes are generic, I'll pass the changes on so that other versions of BUGS can also benefit from your input. 8) Systems currently supported Any resonable UNIX-type system running X11 should be able to compile and run bugsx. I've tested it on the following systems: Linux AIX 9) How do I get started? This section assumes that you have all the necessary files. (The file "Manifest" contains a list of distributed files.) a) Customize the Imakefile to suit your system setup. On most systems this should work OK as it is. b) Make the Makefile by typing xmkmf If your system does not support generating makefiles from Imakefiles use "Makefile.std" as a template to build your own. c) If your X headers do not define APP_DEFAULTS_DIR and your default X Resource file is not /usr/X11R6/lib/X11/app-defaults/ edit bugsx.h and modify the definition for APP_DEFAULTS_DIR. On most systems things should be OK the way they are, but this gives you the possibility to customize this. d) Once you have a valid Makefile (see step a&b) build bugsx by typing make Once you have created the executable, you're ready to go. The executable will be created in the directory in which the source for bugsx resides. 10) Brief users guide You can get a list of supported options by typing one of the following: bugsx -? bugsx -help bugsx help Once you start bugsx, you get the main window containing the menu options at the top and the evenly distributed drawing windows below the menus. The Menus are: Initialize - Initializes the gene pool Breed - Breed the selected organisms. Quit - exits bugsx Once you have chosen "Initialize" and the first set of drawings is shown, you can select the ones you wish to be included in the cross-breeding by clicking (with the left button) on a drawing window. The selected organisms will be drawn inverse. Clicking on Breed will cross breed the selected organisms using the genetic algorithm. If you have not selected at least two organisms, a set of at least two will be randomly chosen and used for the breeding. The following keys can be used to control bugsx: q - quit bugsx i - initialize population b - breed Interesting/useful sample settings: bugsx -interval 3 -number 4 -batch -nobreed -segments 500 bugsx -interval 3 -batch -showbreed bugsx -seed 10 10) Command line parameters bugsx accepts the following parameters as command line options: +rv reverse video (use to override xrdb entry) +synchronous syncronous mode (use to override xrdb entry) -? help -background backgound color -batch run program in batch mode -bg same as -background -bordercolor border color -borderwidth border width -cycle re-initialize population after n batch turns -display display -extend_print show extended reproduction info while running -fg same as -forground -font font -foreground forground color (also file system bar color) -geometry geometry -help help -iconic iconic -interval interval used per turn -mb show menu border -name run bugsx under this name -nobreed do not breed when running in batch mode -number number of biomorphs to draw (must be a square #) -printpop print the population when breeding -rv reverse video -seed use this seed for random number generator -segments use this many segments to draw an organism -showbreed show breeding subpopulation when in batch mode -showgenes show a graphic representation of the genes -synchronous synchronous mode -v verbose -xrm make no entry in resrouce database help help 11) XResources bugsx recognizes the following XResources. Usually bugsx will search for resources under the program name but you can override this with the -name flag. If you do not wish to use a specific application defaults file, you can execute xrdb -merge to merge your resource specifications into the XResource database. bugsx first checks in the directory pointed at by the environment variable XAPPLRESDIR. If this doesn't yield any resource definitions it checks the APP_DEFAULTS_DIR. This is defined in your headers or in bugsx.h. If you want to change this you'll have to recompile bugsx. background universal backgound color batch run program in batch mode batchbreed do not breed when running in bactch mode borderColor border color borderWidth border width cycle re-initialize population after n batch turns display display extend_print show extended reproduction info while running font font foreground universal foreground color help show help mainWin.geometry main window geometry iconic start program in iconic mode interval interval used per turn minimize minimize window size menuborder draw menu borders name run bugsxunder this name number number of biomorphs to draw (must be a square #) printpop print the population when breeding reverseVideo reverse video seed use this seed for random number generator segments use this many segments to draw an organism showbreed show breeding subpopulation when in batch mode showgenes show a graphic representation of the genes synchronous syncronous mode verbose verbose mode 12) Troubleshooting Problem: Compile failes with a problem with the catlist() function definition. Solution: In terms of portability this is the most fragile part of bugsx. I've done my best to make this portable, but there may be systems whose compiler simply throws up once he sees catlist. If you do have problems with catlist(), there are a number of things you can try: 1) Try using another compiler (gcc generally accepts the catlist() function as-is). 2) Undef/Define __STDC__ in your compiler directives. Most compilers do this via the -U flag. If these fail, you'll have to adapt catlist() for your machine. In that case, accept my apologies for the problems and please send me a mail telling me what you did so that I can integrate your fix into the sources, sparing others of this misery. Problem: Bugsx won't find my resource definitions. Solution: Bugsx handles resources as follows: a) bugsx checks in the directory pointed at by the environment variable XAPPLRESDIR. If this doesn't yield any resource definitions we go to step b. If bugsx ignores your personal resrource definitions, make sure you have XAPPLRESDIR set to the proper value and exorted. b) bugsx checks the APP_DEFAULTS_DIR. This is defined in your headers or in bugsx.h. If you want to change this you'll have to recompile bugsx. The reasoning behind this approach is to allow user preferences to take preference over the system preferences. Problem: Bugsx seems to start OK but I don't get the window. Solution: Check if your DISPLAY variable is set correctly (you can always use the -v falg to see if it does start up correctly). 13) I've found a bug. What now? Read section 11 (Troubeshooting) to see if it falls under one of the problems listed there. If not either fix it yourself or mail me. If my time allows it, I'll try to fix things. 14) I've come up with a feature which I think would be useful. Here again you can do 2 things: 1) Implement it yourself. If you do this then reread section 5 (What if you change the program?) to get an idea what I would like you to do with the result. 2) Mail me. I'll consider it and if I agree with you will implement it whenever I find time. 15) I would like to receive future releases of bugsx. Send me mail telling me that. Somewhere in the mail *list* the email address you want to receive future releases at. 16) I'm extatic about this wonderful program. How can I make the author happy? If you really feel this way, how about a short mail message telling me that you are happy about using bugsx. If you're really, really extatic, send me a postcard to this address: Steneveld 26 6715 HB Ede Holland 17) I hate this worthless program. It ruins my day. Don't use it. Don't mail me! 18) Credits Much (maybe even most) of this program is based on the program BUGS, written by Joshua R. Smith sometime 1990. I've rewritten the code to run under XWindows, fixed some minor things and added some options (both user interface wise as well as in the breeding/mutation possiblities) here and there to make it more fun to play with bugsx, but the basic engine is adapted from the original BUGS version. If you are interested in other BUGS ports, mail Joshua (jrs@media.mit.edu) about this or visit his web page at: http://physics.www.media.mit.edu/~jrs/biomorphs.ps ./bugsx-1.08/breed.c100644 765 144 43426 6416051652 13066 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ /*************************************************************************** * BUGS software * Copyright 1990 Joshua R. Smith * file: breed.c 5/10/90 * * This is a simple interactive genetic design system. You can grow * creatures (graphs of Fourier Series, at this point) on the screen and * specify which are fit enough to reproduce by clicking. When you've * choosen the ones you want to reproduce, click breed. Breeder varies * their genetic material and displays a new generation for you to * inspect. As of now, breeder uses only the three most basic variation * mechanisms: reproduction, crossover, and mutation. Reproduction * means that only the fit will affect the next generation. Those which * are not fit do not reproduce and therefore do not affect the next * generation. In crossover, pairs of parents from the breeding (ie fit) * subpopulation are choosen. We then choose a random chromosome locus * (a locus is an index into the array holding the genes, ie an index * into the chromosome), snip both Chromosomes at that point, and cross * the strands; that is, we glue the first piece from the first parent * onto the second piece from the second parent and the first piece * from the second parent onto the second piece from the first parent. * Got it? Or wait... Did I get that backwards? No. Just Kidding. * During crossover, mutation can also occur. If an allele (chromosome * array element value) is to be mutated, we just add some noise-- a * gaussian random variable with a specified STD. * * Crossover and mutation do not happen every time. There are variables * specifying the probabilities of these events. Right now, these and * many other useful parameters are in the file Curves.h. To experiment * with them, modify the values set in Curves.h and make to recompile. * Only breed.c should need to be recompiled. * (At some point in the near future, useful parameters will appear in * the control panel so you'll be able to tinker with them without * recompiling. At a later date, all or some parameters may be specified * BY THE GENETIC MATERIAL ITSELF! Then things will really get * interesting. If some variation mechanism is counter-productive in a * particular application, the probability of that variation should * diminish and perhaps vanish. Further down the road, hopefully the * genes will code (some of) the variation mecahisms. Then new ones will * be able to develop as required by the problem, the changing search * space or the environment--whatever you want to call it. * * * This file is where the action is. The main routine, which sets up the * interactive system and then lets it go, is in this file. Also, all the * genetic operators are implemented here. Once again, parameters to * tweak are in Curves.h. The embryological stuff (routine to graph * polynomials) is in the file Grow.c. * * To run, type 'b' (the letter b). This is a command script which * executes 'breed' (compiled program) and passes it the time * as a seed for the random number generator. Hint: if you want * everything to go faster, shrink the population window. The smaller * it is, the faster everything goes. * * Acknowledgements: the code for the user interface was largely * appropriated from GED, written by Mike McDougall, Rob Allen, me, and * others at Williams College. The Gaussian noise generator was written * by Donald House and translated by Rob Allen. And of course the idea * for the program was inspired by Richard Dawkins' Blind Watchmaker. * This program was originally written as a project in Donald House's AI * course. Thanks to Duane Bailey and Don House for supervision and * funding over the summer of 1990. * ***************************************************************************/ #include "bugsx.h" extern Display *mydisplay; extern WinType main_win, /* main window */ menu[], /* menu items */ draw_win[]; /* windows we draw in */ extern unsigned long fg, bg; /* foreground, background */ extern Population G_Population[]; /* Array of Organisms */ extern Population G_Kids_Pop[]; /* Next generation */ extern double G_fit_thresh, /* fitness threshold */ G_pCross, /* probability of crossover */ G_pMutation, /* probability of mutation */ G_mutation_std, /* gauss fn STD used to mutate*/ G_weight[], /* weight for each term */ G_sum_weights; /* Sum of weights -- yscaling */ extern int G_size_pop, /* # organisms in population */ G_size_breeding_pop, /* # organisms reproducing */ G_generation, /* # generations so far */ G_switch_default, /* switches start on or off */ G_show_genes, /* display gene window */ G_current_width, /* Current size of pixwin */ G_current_height, G_org_height, /* Size in pixels of organism */ G_org_width, G_x_scale, /* These are used for scaling */ G_y_scale, /* curves. */ G_x_trans, G_y_trans, selected[], extend_print, verbose; extern long seed; /* ************************************************************************ */ /* ************************ initialize the system *********************** */ /* ************************************************************************ */ void init () { G_size_pop = INIT_POP; G_fit_thresh = INIT_FIT_THRESH; G_switch_default= INIT_SWITCH_DEF; G_show_genes = INIT_SHOW_GENES; G_pCross = pCROSS; G_pMutation = pMUTATION; G_mutation_std = MUTATION_STD; G_generation = 0; seed = time (NULL); } /* ************************************************************************ */ /* ****** set organism's genes to random values between -.5 and +.5 ******* */ /* *** 6/4/90, changed max and min gene values from -.5,.+5 to -1.0,+1.0 ** */ /* ************************************************************************ */ void randomize_org (org, name, size_chrom) Organism *org; int name, size_chrom; { int i; org->name = name; org->size_chrom = size_chrom; for (i=0; iX_Chrom[i] = (2.0*drand48())-1.0; org->Y_Chrom[i] = (2.0*drand48())-1.0; G_weight[i] = dpow (WEIGHT_BASE, i); G_sum_weights += G_weight[i]; } org->fitness = 0.0; org->mom = 0; org->dad = 0; G_sum_weights = 0.0; } /* ************************************************************************ */ /* *********************** initialize the population ********************* */ /* ************************************************************************ */ void randomize_pop() { int i; for (i=0; iname = org1->name; org2->size_chrom = org1->size_chrom; for (i=0; isize_chrom; i++) { org2->X_Chrom[i] = org1->X_Chrom[i]; org2->Y_Chrom[i] = org1->Y_Chrom[i]; } org2->mom = org1->mom; org2->dad = org1->dad; } /* ************************************************************************ */ /* ************************ copy entire population ************************ */ /* ************************************************************************ */ void copy_pop(pop1, pop2, size_pop) Population *pop1, *pop2; int size_pop; { int i; for (i=0; isize_chrom; i++) { org->X_Chrom[i] = 0.0; org->Y_Chrom[i] = 0.0; org->size_chrom = 0; org->fitness = 0.0; } } /* ************************************************************************ */ /* ***************** pick out a single eligible individual **************** */ /* ************************************************************************ */ int select_org (size_pop) int size_pop; { return (rnd(0,size_pop-1)); } /* ************************************************************************ */ /* ******************************** mutate ******************************** */ /* ************************************************************************ */ double mutation(allele) double allele; { if (flip(G_pMutation)==1) allele = noise(allele, G_mutation_std); return(allele); } /* ************************************************************************ */ /* ************************** crossover == sex **************************** */ /* ************************************************************************ */ /* * Note: if we removed possibility of combining chromosomes of different* */ /* ** lengths and it were still possible for chrom length to change then ** */ /* ************************ we'd have... speciation! ********************* */ /* * Should try to have GENES specify how genetic material is recombined.* */ /* ************************************************************************ */ /* ************************************************************************ */ /* ************************************************************************ */ /* This is how Crossover works: choose a crossover point, i_cross. * p1 = p1a.p1b p2 = p2a.p2b. * * Then the children c1 and c2, are: * c1 = p1a.p2b c2 = p2a.p1b * ************************************************************************ */ void crossover (parent1, parent2, child1, child2, first_born_name) Organism *parent1, *parent2, *child1, *child2; int first_born_name; { int i, i_cross, short_chrom, long_chrom; if (extend_print) { printf("Mom: \n"); print_org(parent1); printf("Dad: \n"); print_org(parent2); } child1->name = first_born_name; child2->name = first_born_name+1; /* *** use size of smaller chromosome as max crossover locus *** */ if (parent1->size_chrom > parent2->size_chrom) { long_chrom = parent1->size_chrom; short_chrom = parent2->size_chrom; } else { long_chrom = parent2->size_chrom; short_chrom = parent1->size_chrom; } /* *** Now we vary X and Y Chroms completely seperately. *** */ /* *** They don't cross over at the same points or at the *** */ /* *** same points or at the same times. Also, we don't *** */ /* *** use any inter chromosomal variation operators like *** */ /* *** segregation and translocation. *** */ /* *** X_CHROM *** */ /* *** Crossover occurs with p(G_pCross) *** */ if (flip(G_pCross)==1) /* *** pick crossover locus *** */ i_cross = rnd(0,short_chrom-1); else /* *** INCORRECT if diff Chrom sizes *** */ i_cross = short_chrom; /* *** Copy first part of Chroms directly to children *** */ for (i=0; iX_Chrom[i] = mutation(parent1->X_Chrom[i]); child2->X_Chrom[i] = mutation(parent2->X_Chrom[i]); } /* *** parent2 to child 1 (a cross) *** */ for (i=i_cross; iX_Chrom[i] = mutation(parent2->X_Chrom[i]); /* *** parent1 to child 2 (a cross) *** */ for (i=i_cross; iX_Chrom[i] = mutation(parent1->X_Chrom[i]); /* *** Y_CHROM *** */ /* *** Crossover occurs with p(G_pCross) *** */ if (flip(G_pCross)==1) /* *** pick crossover locus *** */ i_cross = rnd(0,short_chrom-1); else /* *** INCORRECT if diff Chrom sizes *** */ i_cross = short_chrom; /* *** Copy first part of Chroms directly to children *** */ for (i=0; iY_Chrom[i] = mutation(parent1->Y_Chrom[i]); child2->Y_Chrom[i] = mutation(parent2->Y_Chrom[i]); } /* *** parent2 to child 1 (a cross) *** */ for (i=i_cross; iY_Chrom[i] = mutation(parent2->Y_Chrom[i]); /* *** parent1 to child 2 (a cross) *** */ for (i=i_cross; iY_Chrom[i] = mutation(parent1->Y_Chrom[i]); child1->size_chrom = parent2->size_chrom; child2->size_chrom = parent1->size_chrom; child1->fitness = 0.0; child2->fitness = 0.0; child1->mom = parent1->name; child2->mom = parent1->name; child1->dad = parent2->name; child2->dad = parent2->name; if (extend_print) { printf("Fred: \n"); print_org(child1); printf("Jane: \n"); print_org(child2); } } /* ************************************************************************ */ /* ************************** mix up the genes **************************** */ /* ************************************************************************ */ void breed() { int i, size_eligible_pop, Mom, Dad; /* *** Isolate the breeding subpopulation *** */ size_eligible_pop = 0; for (i=0; i G_fit_thresh) { if (extend_print) { printf("Copying %d to %d \n", i, size_eligible_pop); printf("original %d: \n", i); print_org(&G_Population[i]); printf("\n"); printf("original %d: \n", size_eligible_pop); print_org(&G_Population[size_eligible_pop]); printf("\n"); } /* *** This is a tiny optimization *** */ /* *** don't copy to same place *** */ if (i != size_eligible_pop) copy_org(&G_Population[i], &G_Population[size_eligible_pop]); if (extend_print) { printf("%d after copy: \n", size_eligible_pop); print_org(&G_Population[size_eligible_pop]); printf("\n"); } /* *** Increment once per FIT organism *** */ size_eligible_pop++; } G_Population[i].fitness = 0.0; } } /* *** Each couple has two kids. Nuclear families! *** */ for (i=0; iname, org->mom, org->dad); for (i=0; isize_chrom; i++) { printf(" (%1.3g, %1.3g)", org->X_Chrom[i], org->Y_Chrom[i]); if ((i+1)%4 == 0) printf ("\n"); } printf("\t%g", org->fitness); printf("\n"); } ./bugsx-1.08/bugsx.ps.gz100644 765 144 1140605 6416051656 14016 0ustar rgaschusersta1bugsx.ps64w۫oMsm_T3yEU\ůOWuUKMb6+2/,~-oj(/j1\NFzRɴ.SSZ)SnOWVsYrq:21{lsi.S%4O 7 \<.WI1x\ޜXaFg8tx.duV/6Aֵ9 xD:eʪҢ/~yϼLdO Jf 7E.gK9$תozy%U2=b.WSzp"o)Lt2!c&] Qx iBϮ`栺O6=ao ;l >wWLP Y3q 0^t=dey%fpV`6u9#}yȲY hF\0%t\.$#ip6 MCN!NЄ8̦GLSydd/dFeF֬/镄5_%C ۳ZvQ%c6+}[]-|/0 "okFpY)jZ7RW<gipͺO. /JG-&e/->y%g[.ky9)t~s6GufbӦEcAnnhAVUFxQU+$,P(`vi2g"UJCOmژL.3J+0x(5HKY7nUfS޹/Z/=X;_gH+sLU]"WX@vCRAh ct/L=gVZu9`48Y٬1'[gfh8i]74lmKv1I,%TB rỳ  yns:]k!B66Ç($>t[Syd7]#jf#w"0i: nK&@ CYUT!ԙvνY/t@maJtC(a'tdJ[BĈ&(Co `whBVrs) FVE.E\o I`%إcnۥ4]oxbb,+=`y c:k݂K/ <+1/j9/!}xVIZM` 蒳"fWf+HeEU>7M֤ͅ$0WZg33y<78C=_^* R#خ(7 9"KuӴ bvO+ll xuQ$ʼnQigEz$/rpץ|Jc"zYWKl"Y!8MgB7~iRE.1%d-REjHm BbA![X\YOF>K5@V:mJ54e0W }jq8z"5 ֍MR[~`e3U2sc&cqt1aj] "Z4J^K Z51#yZvJ ˡ)ZfV*VaW|] ٪Ś N|]Yq^'嬬i&]Úc'"Vq(Faj6\UpauHp2ΝO?{.'@zUP%8=㋷PC"8d^8(` 8x5q*cE;M}q[ G \ykJ7ATN6Zk>pkjBA߬L[l̝h^8b@ӧ=eBˆ߯5 vHB.7gWSk&񡺉JbGU+?QmhlIV*TCf]>npk~ >Վ,+˺nls[EGcg~eN+`8ƭh mnU]٬-2؀|{JeNt50||{ow_X- ʾT0_ |u$пsA;H:V;֜g0ި^~ }.mJ8Ma!oH*1XB`O$83#2#l`@ - {ˆG, )3hN'.qz6}0L%bwKA >$yUd ox8/x@_~gY 62TġFyD$oHZr*e&(.g]Aj4N?!Uj1Df+|g";ҫ`W)b_#mt!mLt$M"ׄX75/;/7ZАN'XPen%;+:EQDX VQ axDm+%0|3O%=I|@}PWb5lu ?ɛ"<1q fd-a4HQF񞹽Kws!G^ Y OFV_z΅%g `Q 8E {aAֵF.}\ =]:;G_{H}= Ke[< ;H3GG.> FCZtHt!xp<uIE#r<qpM Տ')RslRd՜{;4j|8sBF}X<A]>1ww&@D08@ u fld6#6?REJFՏ {LDxwvУ7Yc/fxbеR313q&3UxO\ù$_hD[sY!7gc3FY!TDcEw5WHe)f)KkkkWNˢ#Op~ɍMRg r >2PMpㆷ YCȧdc| m:(ޗqÑ !z%{<G}xc4c}]SԉPD)}|M<b%q/8FIO=41M p؂;sp&L4nk&t8H3nġy;ϷxT0M S_L^y1\8HduŇ)J|T9EY'Jst|U_3:X7`pEc$5~*zOA,^8%ZUԆ Udž)RVca'lئ\%muxH@!࡫@powqӞ,]o=ӸSOENTQBD :T\5ȸb';*s?#/a|QhXJܦ9U\ Cnx/|hw42#+;ggҲ-6Qf'HS^p+*0z.ΒvOGCzχ\گ"m?wexS`v~RF JqaܱŠ|rIgCQuR&&M6k[pBPǗ'm8oR k;`r1 ֻ1V@g~X9rzڅIcygᇃ7ԗQRX8Ddoɩ1> ]2k6UI01$,"J4[dO,ܝt͎&,R~>B/F"wuWǡ7f FƣŪvqgL{XϪ)򮳳AE-\4?uEI>D OTXT0hv=YrA/gĝIqyK?ۈ\p'vw.I+PC`=?qwsw}&]8=jvCqtWr/$voit{ɎK,O,=g_`7 }9Ӑt C7 :hכc/NwG'`F%\'I1dw5]&C]Sh6ɔ/|1jAt]_D7N"utwcG#k/VKM;:@DoC:[ϭKeZӑ"kCdړ-( \(iiD>ɶ! dd, ]H3PBЮ:9I$cFnhIH_!q|w{ tpmb\$;\B+N,7VhE'S0.] aG cxm'wKg/yOғFjd>]W,bv`A ވێҏ\/Cތ;~ԝC,(0?zpTƎ:e0<\%]M 8#v!,K[j4cᾂCġl?l0\߂C'jc]XZOMLfe|tMڻ`| ;vr 6% kVjN]0R{$Ce5Om?K]MҤIȃ~?KNVq^N˂.*$戋I_,EGo{d :~\9@w33뒃Uz{$9d +BdwJ2edL@+S>>dvrJzz$FU:̓,#dxӡBУ_?vP!`JQl-7`Y0IA]TM%ZN36sU6bWw ,}ԈmH,!|ĉ(-1Np}M?1ٯo `,<0,zau-Wvcz>㴎iM$gN=-|,(_t[aKG&yEٿ>m)ifW@x?]W\K I״-b]O=9Ą0} d&c~xaG]uUSB7SB7( 0irvJv;Ca?yDždg׏C׻k(shz%y4r2 9,`c qEcN6S3)#e$R~)+/3澅~sZs*F$q#p8`oFNj~G5k?oGQmKK(ˆ,0K^jv-?^D7 ܅dG3Hϫ?N5n:1\ .A< -Vojղhj\.;u%ԛU+ ;r)۽YFF)i$@$̏&UbPo&N8]%܆O-,fC$ZyޤEO漘ls?c7ɇ7L[a[7b6 B8E¸2,"w1%ª&,n+(+گe=ػWcf?5ms;n?(od}m|_v }1S{}֩;U}r]%.q漛lF{2 MY;'9z"%Ǵv5 ߿[k}~[G曵̯[,ㆁZ:epG++~^ޚv'w!] q{nU?ILC)>v 6SiT:i-K\cu *ֿB><5YvnoOp* UŴI#'Uɖt!X;e܈rd`UnGbIEw7qzB{cjx} ~Jj~s-b0nR>*%\; 1ƭqEoo}M{pxVLoxt79lS.&"#j$&ܧ==Y]h[MboҐ8X["hNq8yy3 |8D_z<8w1-1(-q|+EdyQk+,pc$*ױv3{||_H>"S-V]PqXYYڼN6oeM)M '.jw,goV`\k死'c%GÂ-wILSaUJ`tz4>VTd-5~.I@!`"Y;`~rdceWǡOL\㔼5}Key:B؏Iljyd{S>nU}fC?> hnHir}Ok&0$55X둄M:ƪsbtx&th`tthf1bN B|8y`XmrJY}[Ŏ;Jg'\`zk_̗I'א ?t&nts>0j6u‰L^S;dwzu&t>g&FlS "Th 7**^-װzDK3ux쳜5m3+Xk1A?]ѤB4^,`CqoA`6iaxOǀ sQ*I7ǟꤣv&&}{i3k#0b$ Mt*]9vh-r0ةCÒP)}r*-ul a;t(' VX!%D)e}_2Jv@M[V[{*/bvF.(e}D9ЫbA&vys"vhmtIT(JGnvo]n$~3SֻBfuƤ[ۻ'W@O.ROحzxM)%q 7۴k;sn}onWqצqyav/j'|W4 1<SY\JޤJ6vң8S@gY{_Y= YĊӴr 4?ƵG # :zn4~C|Z!a& 7*l}2POd.JRcS)s qfd2|6*['K,]ǝѐMMONSjN#I߭#.M[PG?fy74ijxܒ|֟,J<׌5POk`9ͨwjgIJu07 7iݶM ѮN5sl<'\I.M/Փ5K ]E'5BZtCû'8Oޭ_wOަ^ ٦'_Mke~Z2ݿwq!]zس'#wT-fz>?v\v~cɞ> .4"z]<9j_lI+kȰ-L&IK0Yn5$;^3:?+!GRpW\urߘIu׹CW_핽z#܇LtαʅZ"PPb[4)jՊy_ޏN3,r80\ >EnӣSR*?䕡W1|vR_h> -'zLl/].K oTx:eū tҪA[xK>'' 6_zc)} `Lb~/Q08їN_y>3<`4w,Œ t k^z|\}7ݪAfNDDt#8(O^ lx@_Ȏp$Ȏ1} JµYr0Z\[aU,3 ĂqiuBz@xl|n .;m8bֵ[Ȯ*ADJT W$ʍ#ڴ=0_txfe[uUZX9D.P3M2O}Lc #ǵWhFOwk7{*0I0u98yv//j<,tk+,ri=ÈORC/K*ZKCэߘ+_i8.?\&ٷ9wdi~=:bUP#֎9z7N+PerU'@歝̹=ʔ(\_]$B4"M۰6. ')#㩃cuI}8Oԯ ԰:vȏfb !FtFzp\uviz5p"}>*F{4n*p'I5)eQL[aRȺt@99^(W]DOʎ.2O?>XIA&9NU1¾LUM7l }qHc\槕˝|m r )i5St!1?|>oNK#p֝Mx57@\\9Y'XP Y`8LLKJuq@)(Ln*,I@KGp&{Y'Iz6%+LKVv #!,ȇ4xsQ*jMcSzL9zsHWRѪIaG?TXn"vp~*e3@±]v0k_ˍ##)'3ΰ3Rnk/ɰa lbU;T8R0BW`'=ZuL;"c65\C 4Fzic??XÍ4˴ m^ p`cotkHc͈^ʭ3:XhFcO0hq`PԖWi*p\-T_ ' ^>)[MIJ2?`(K\ 3]$RXܤ~J_.U>K[K&Iߗ{-OiO?m |Yīݥ4(2a}wi8e{ iu [Wo]6Q`N=:s݉+<)l[I=|K ʹ'}:aԽ +G8Q7+3b䁣[$ۅk+,)ʚ *RXkFPJdQ긄` N3& :|Z -R{VGVHu ;; 9$W\psGNL!Z|D bWs(±]tUR&VElNq{myD(mS96ٝjVulQSs)jsjv>p;8ΈHӪj 4aD/' w,Jܩќ_Іc]jo>Pnоb09e BE$ ;cGjFTɈs1ufEaIVFy(z6w\[aɽ;BxI]`_ӥ0޼h,SMp95_iF,@_u=}G <ŁA6H*upbXA#^PR0päH%R:I6bD6%oA幸"w[S@ %#1:U9`tZ<_9*KTͪ#-X!$% 9DIXTTpy7^ǂ_ IT:baTw,\c dbcd!IhcĂۘg~ Nm֦PysWn*iX&88h3F2~J W&4;BٗӴ {1iw\2]*M# wȰiW}b䁃MPR2fPHI >U@ɠkN+SO1fw!]d"iԟ iYL3 n5ᮽMܛpc#%?}ޣ&w9};ocCLryĔڜvA^6@:(Tu%o k_ɳ#|>0dM}P F-̛t:jjMv9HmuUӘі!;ScGg,-wGSҗgEqޘ">#_gEASFͧDd@եq9!bvzTq 3'Pd!IQTfRpa- KIjk+q<xvT8"m>61ƾ枖\ nkv(gĵuGX&q_Ăё1L\do|=f &jY`H*^-[GkGd &#{EJuF:'R5baET Erkur޴ "jz_7H54ة=?٫៤]'asB?lJx8HgOlMK ?N8 kTY`H% 80(&V?NhY6ٞǢĂщ8[{hE3FMyh fo͒Um>|Vl :pܳ#N1'X8y`XsN$#ώPeCJWIK-՘&Ðp)( zDzs~9C;N?؅>|prvN#L1ʉ} 8 HFyOTQL;B[˚/̴ֵvC4l2YC%ïdSgu+sůgw3ۼ.k+,Ԡ_e>|Y@5ɭɝ`p-B׻%gy$@$3k#ބϑF(ELJ+(á ]1 E{Lk$!ÑI]g130< X;g0<ĂёSšX4CFfeT wꪇtjӾ퐋gGQ Eǚ¥o! 蔎c(I"D_6dK`d}Փ]b!PYi(aP.ΜleĂNt3C071-sB4"`OOD-٧)~|/5!_pl춂<wZwW*9ݳ+1h2W5|:G6pt5DeĴnb)5 smEbrGRoO>"w_GFJFq(V_P">"' IRUC`{ s_UN7\' !glF?n? Cn#ÐZ°D4pXצEUNSZI]"'}}F0ryP((& vԛzYqjg*%*"1@d"Q  &ӓ@E][ FT}2Y*,wĮpzbvI; Ԕ0ۘ櫠Y'`"$H)}$0mEPvSnn6A #N]Zmone]8ކt:;CNPn;c{VNlLw⍁`,RrJkBnYaw./ ;ۗC;r}\C|6aĂxRJnJ"-MyN3k8ZDTz 꾳>Q"]!q.43cP.̝֥ә:N^JԜ }-vDMd;BO=VWШ"C?9YxfWR9VXnЧY`6>pbOqcq\-)&?rl Hj3RtP7YC 3Ns4J}ΔH(*&&GxJ8v*7i+ION55s Fq}N-1k2IAvDΘ(l]G[F]Λulkf+Q^_~׶RӓD{Gd^YbhIav=/ڍ0R8W镒;u2FeKmrMp஘|'ٓʼפ f=To0㼂 >bGh PK &91Z(p$ QJ}x%"Թg :jm8Nǔiӻ[d{n@pݤw37᭏1\F9ߙ$;SpnjULp k ?GlrBx#.RPk,ͻ~sўڕhUENu+#X= +vXW h?"Q MhkR1fG;4 Ɇv1־hEG5j -՟jZ1OK?Vbv8ʵ0ѤMbEBFnZ7+EpCv4qEݏbb^]PtŴpmy dҕF>I ԍĉ3xgy_-֎X^H?dq6ojP^^-0^arF_- 2 zܑL x6O) 4V;k+,r[g0c'jBڝU^]w' ppsŝ2k3eXpln c?r",䶿v'3?ͫzo)IWr p5 ;u6YR)p(h2¯2,D3mvsIxmGݽs% tk1]eg8䁃%h-ar=<mB8<ږX;ڷ' bpm_] |3ʃɄIp}|}6iuʲS!V>U0;z{[{M7VQa`L[wķϔEۺ#tK,#GKl^毟4*2xL9>Y\)7МXpT8A6?!$OM DԀ9'qm#xⱃ:w 7KjF VXn m>5vۻivpAT땴N"mE_]zejKYTUvV%-#Ms)lj bQ"X]ZH D^Ûx?= J*WJw.`'ij3pf Tqm0ptd*7' ^HW]o kdX+h997xqΠ)af{դY`H"D0N,#WSk+Xs؜Bo0͘='Xѻ]+ nUrT|^в\9*Dt]/Y=ߥj~uk`T>#nMe`ګ>—sS`"76O6@wOm~ʸg4'=ا?>}γNO~c觿oVC, ͌ 8>9.hw}t #3]>C$wwNusؙ<0, Ř4smEo l . k#Ir P|řUx΀Hp{8NG_*%) F8ؕZNWsȎQ;+QUY,;"O/D``c5l{υ@ !%EpmE6^s/wv-7PG >L.2\L"d?vo4t]4cvEBǕБ _$6uyq.&PɊd!1f$ 5 ne`Le' GW) tۮ.$pvoͺ_F8Y8T@:x(~5[o܉WIc}t("pxUD&#ڴSf yO/mO)8<>Aâ=MJ6/, Z]T~1A#0?ګN_Ök+,\Edn =ObGpnhC+JNrWD!a0ݔ*sC&5l+pbuAǚWF;p:KcOKNFh=VX>_A^}I5{F,80I,{ $iPevtףݪ1Vo5we0GM](NtVXdaȳ#hwg  k>p&=n|UÈY& 칶"nguqie\}o&|ﶃ]xAd%! $ÓRsvÒbT@cdvZ .Sf~`zCj.r>q8]=zJ"cJ#ô]6.hn&[+mn&φ/>~<܎>^:]`X0:]LZJiRGq3\0IeNBi5]Sf#ˎF3k7"0L)&nH#!+(FYЀxx|" tl)# K#si)#18\$F#ώUN{+(i+s;yD?5Ѻ0IƟi2_̸%oqdl*9jblg\[vn/ՄDwd0nD3QWuS#Noh9fĴUG؅K]sa! (^q(KF8Ч|,ϱj ,'siD2RQS+# I#'n&Vv vw1fmp<Y <8p0%CDL?' 5(X^NF3^S1v3hDd/*i+,G-VH[A{WSVzJ:X;({70 8"YdNEKڷEAH%Lva]Uk+,6jr0!{2sjhp>ɝ3UW!\BpطOz@4tcz?'#l6%퐘‘wm,PM$q|"c}gSCV[HfjtE5v.C;oDsZC #TqҚMӵ͝ ;6.WV}wFu)/\wB>#iᜅ} $,}d  FGGٹ:/6ˠ Gۛ)UGtZfNB9A$}}2BA|4Iˌ:)7>: ]8GOMrv$wN=$)nd<iLm+e GR'*۸"0Z L[XadES~B8'9|N˂uץPWըp 25PlTo6]5 ;c`SSwFgcd^o{a*i݋bw߂͓1<1̗&'&NrDGÈ. aGhߍקaǓ Uų1Xtʹ] a9^;ٗBJN,6gsM/' 2*Z>LHI`#  $]QQt[aKxu A_oݺ];)igPnsdG?7Nv߻~y9{a=`wbpGMWC+ [{f}~>^u8vCs^!\oRț$Z!- ʰ$lW3/倫\0exuȁ&)D\ h,^cż_I`()܏i+,V]'% |*7I .š wU)Uwg02bo/Ԫ#Qsmc:9yvDTqG$3V8Ulo,Jc 6OPϝB~u`ਲ਼ x"*Gvεq_;"f =N3$״\K Nj]r6nyVW`P;cϰe䁣wqeLօ`at:#/RÐר+6Ch+yjO[8\0\l#榜v2a1e;4e5;!> F[+)tjdĂћc$8!swr@Tf0pvAa$FBM,;B[QޠdqK>9T*reM3!Kn85vAkyg3'a<=,0$1o g>#Zn*VۓZ<0,)xt&qu0Rs}͎Zqt#kJ8`x%1)&9#2aĂё9L~ݬGW MZ[3eW͍J둶r 8ž|랔Ǔ-(k뮨m~'3 6Bv[Riȵ#^NpR 5&4WmsM*͢;7nu,Wp[T{%琕\c 䪍~jC-a7Fv'-T8- neg~v>?lC;䏩]v CUs)ქ&Ӷ _a]ibGuɎ3ޝc^#IWw[dVhƌkNoMW?.=lSPw&qh9*/:PY#ofTϻlĒ8Hv-Zf|%>k'8Q8}2|-Rrb}Ү'b2‰zC>ږwۧVOv?O*>S3`OO4C?MZ@؉\Dx (JR4%q՘>%Q!Ǫma ;ŭ|! ;ߛSadC#gȨă'jW/ {'E [.\Asm}!K$}٧ ; NB!\/R*(w5](J1´ucHIruQa1!&b`)'VuF7%r\=!C4d\=Cխּ͇5˵]3ki}o)eFpvSd\u5{{a;B:$RAU#"p1bUu&Ш~d;xiaFI1u"6fInSGt¥\v~cGY_=z˧zߋj2\N 9Yl۲RgW0-֪`tL v̈mv/uiBwqVRc<17bA&l[//Yrou=1X]6sΆrq򠰈D Gsޅ4Kot;긆o̘ kװzn#| )! d at/r4],75lQ(Ԧaf*`CbAjs}.'oĬ>ӒĞ"eDC|H N`/Wl8qmzj]ؒ~3?&]9S&m-'Sttm~_Ezm`[{>s'xxS@`ʞdOY6=ZoDNl:/JݾAOnOuEnK */@&oĆSQ7$'rE,ȜN&'N?<̉ޚ~ͮst<M_R%VTd-Su<kh_Ŵ;j7 7Wsr"&o;oEENF,@HJ]r"6Mޚ:R ꪇlz#7'pA>;[GM`FqmENڝgWωS,+rbxԘrL jW=b o R-[ݭ-l)0ԄZf nA ?:W@IZ5{&2L~ m'ϙ&L~Kڔ3䑶"j`mL[a;glӞ] j` u[F,Sg],oѫc<~Q MLZtF4M}N;1FT)5)`^KŰo>}QIw>&:t"ɶ׼Qµb9ݯzS"oǁ|Hd`ψ$Fe8((zQfS\7~l_c\vp y#2uN E9*,0$.5I\^ &gIQ"u ȳ8sfϣc'ϓ~ a޴l#;{jSUY`V[ p)d /fzsõy{yZ &%-.Xs\̵ф ȿ.y[nrWu~q;eYd40?lu}TG*u-.7s/P)FzE?[fE9>Z0+ðbL /sML%.Y9a\mWid!1 4:%Y(&~Un٬;M. kTOCv"euc'>Z"%`SKJ`t6ZZMi)1Xn󘿶d|<J?"ں 7'9 Èc2l}G6<_3bKbھF'CM蒀]K mJ|3c.hx}q>دzyczô]"T^mfһ7LP$If2?MJ^( Ӥ 8Go k #+.*sdL{2#PN 1sywcoHILJn,ބgmQʺIp0y`Xt$#ꡝ0֊G͓/0eH`\ܮexZ,meۦO7d{ IѪ^ kT );#5Gx. .tKLh;wtpI}fzoFvۋExL8`tMuSe Peںɷ>kߘ5haV+&y@JJ7ZtU=\ 0 SjyYPo淽s?8ŖȿPK_p"w]ôygܵ0{K&4v&'N+Yf5=Dw%'NqN,{Io٤Fo`F3±oGܢ+1I?<:`RYT/Ubeqٌ<0,KAMb;ȅ[3LZ>C\@i v O&9krsTĈ%Ìf<0ol;֦*# Ii1o`EiUbkjcTdvlc0τ\l@yǓ7* 9L!A_zu4v%/7 "0ޤԤWY`HR׽@Ha䁉m4ϵD&r~\0î]$L~x`.wFus}/F1bќ&m͈ÚX3EEEF2MEiIT!%pE# ?ܢѨК EEG.5L*;`A[PNLb V8`3)%=N\ ̦G;fGIq?CP+d窵Q瞌r=쏺S^յ2 mgk8y`X@Ŋ2Jo;A sES%Ԗ; Ց9Vk)]dI'Ϗ.֮tZnC%)EHRL7w2) ,)F~lmΨwe<0,IaKRє)˵fRWsH8Ӛkn&QԻ-NN|( c ':'Zty5"m|O,\[aVB> aĂёjL{67Ū-Z[_1ɟ)[#™rgH`FF3vsU^D%IVߗRϟZПUp:]VUh 0QƄrrh<0JƚcٽG P)ki19Mf|YIg'\[a 5;vs#U+5ҹ#a3P:]ȳ;VչfĂёY\G9e2=? F7ǃ| w;7f VE(KnbR45~f-ZLߺUsâb}I_Ɯ34`ܙkI~zb#F}I;*^P"ro}AƸԽn}\ocuQ}fؕY`TR@Vmnj'rnQeI3L~󀢺5F|_dOšw nw/G՟¡ r%T H[aYt~lnk9Y`򗘢ϳ%$eqϋ^3q[Z9J" w^m \dw `] r6v9KEoN<0[e2g:EkL[aRvk&_cJ5FĽ%\B<0,B_Lk? `;a]~eLm0AG fϵiɾIFnU5WI vCs//EH5 6'-W4%A5~xWS]~~+; L& 49%01qP:[Z 1ME6a&KẔi*L!k#EDR7~Um8my,lu ?uV6qvb5e*fΙDήHu Ls'Vue)P9mIr s03{VNwݝ'zmSHN݋tbM 4`H!31}:_SwⵅpmEVJx'i6/2ojO~ Sd *%8ٕ{=dh^t<0U?U4#' KB$=79[xx:)a&M˞' FGƪ3ڪgD֙_/Oϝ4(cGpMN(&qak׺h &#M$Ѱ6v!~,N~F}цW0MYHbkRpMV! -oAaxtKaVN̋,HT06rksRTOjkaM+SO0RufLmYӂP180(}dtL`R]_# ʦRjk!vˆcv2WQ] ަdfs.TN,q5_]kk{h[׸a[6%"I7 5מ`*7ay;7W鳓pxb׸䩠ϵE-' +Ne9<0oz-) jصP˱E6>'? ?oMʁb Kɵ80]b gUy~ TvG5!:GX0:һML N:nnA{I`ZԻodA~mʘ@6'#.rah9LVL ƿZgXF{pjr8(=Yz*:c*;ô]mВ{n nһsa~^N^)Ejx@TO \턹9MQlTCaasLtڢr'bR]RWJ0\ A #w&#jYvP!,߭;T?Fgt^nItt?%ѵ 0\(';NT$ J$MesH\Uvi5Pҟ{lbXd b!J03MřR\u5T(6!0{#=H큺MWuSru#W)u(@PXF9v0!3:Z*j_$w_Ȁ e0SNVVtݒIFcǙ39)D6̶q]iƵ_bq}fՓ_e8d$b_|FL_gxU} afbЈa3^-3&~e&?E <'#T VXd[6SD-9I7a/fRLO>ĄiFȥn%Qwϟ!ПU&7-s̰jDY9 ar,WQW' .Y#m&yS=A㐄 ~&&)/eƴg ֢4kϒ9r?!cPe[09K,yTK'i_&%gz f51MpFC&x߯G+R=fs8d>82"n_c#mEb` 6p<0,CbB{Bv;Ǘѝ0C0 a:%!-y9[&tz3]";ծ K H! 'CB3V;k+,ک&$vW/Q76]P~KOޕ _jH;~GzGvfJ? -Ll]1q$'S ۵e tlbҧ:VSF,ēa {PSrMо%Pyws!W],0$7KRRdCa"_{P6zYҌX;[i]*\?p(w5i5Ft13×DA,Ѭ=*(cUxS=؏n޲4pϘqtrʵI>yj"N~FV0%DK&# Y^i+,9`jS[y.7uLj>G)2~~2A&X:ZdpbL6) `h~rHv3|:5pTJƜ-XsނJxgASj^#L`:6Aknhlܚ+;qnFv4fB$V5A<"DңPCbbZ#>IV-fZ 'o9\[a]kQfRGN, mv_ v{.3$ A@w8Jf3DՊ;JRwNl-J݅Cl>BM<:_Q>cK- f:&E6jח,0$ҵꕮkHS[=dYj"j 3&& -ªe'cůʧ8'R Lm֢\/S2;魠\åSa-;y@Z+m/s`b*lk+,r !EX^0KOBx9aĂQa:Npr /3ZV7%?66A;])YvΉtHtOZbGZ=K\j0fG0~ ?GkG>u}z|?Lޅw-ͤw;lMPIf ƻB+B^2x5pT\:lSEScUh ֎!1nIH0*1b5O =naY셝죡_1d_1wwؼp!<1 ;xu&p]Q`@d/ʂ ǗaRn 4_R=\Y g3ޯu9pqPP.# Q.\%H7XB 8D1-khcT&4DD7~=>?NǓWhPlLܪޥEiDʝw︖=VBTw=>S<;N0hQ`@V gaCJgWZ_ۿ\~R\ rrǏq _w_&xH_/no7LkC1i7NV} _<~4OI/}k0#'F12)tWZ$v(ٮs*aa-ڭ vC1nsP"\}~sBHtx-ezs]҄VYMEKzP|vq7sSGByrg}Ī `@RBDO#ո}.kqEXFv5_b]-7Q`-cHtm~Dufqj!s\h8E wQ,FO2&>ﺣ`fpbw]cmcG=UJ,QnAA&‚ UtgqOVf'jUfRٻK NǕlWF^;)SWutz_t 9Q7u:vKܮ?V>i,Z|7K]9>:&|-gv`#6'ތ$;b[XHO%*v˱LyrW鱐M}uܶ1 R&4E mvǭmOxu'v10¼vî;+#rSAŲ`R\hɵ8Z] ~Zc$"ƙ{yG;D3uV@Db30}o;f}L2*:p75g|ӱFXsSCCoz߫mvߗM̿wnܮs'9αU L53t,A?8)+6iC׌M4wzH)ٲSm`g\pR6QIR-Ebcۅ2ARY^rǜ ( zP0h&OMpTs?sZ-_qg POSA[]( (Ad(A-e!*jzk+Zh\QvUa|4ѣ;[w{|'ueoAa}䴑r!`feQes8.kWpժ<0,}b>犆u1 `նQBv;( @Skzd&Wf~[9wZ9a?ZJq85MrpmEv5-2' p*I*7RQgˣ6\[aUȟlŴ `ta~[`yPXV{ewϮˡwZ^hϰ5=~p3`{^׊K@djr–;[Iph&XcjU*فW3ëJ~*!͚~JCvk̹X(:N6~po[b uNO/f~e>bx/G;3e*iȵh; zQ ȃٻflUn9`t24yl\*Wxe]ȂBⲫ,Gu~qxǞF Ώp,h1'K7X;UП=܏h+M{&3b\ȵ9aKP"d_sm|IbNJ{չ{Ă飑C ŝV1)Uʍg#%3XktF\ND(8:j- F^ ߓ(ww"1uӦw+xْ{nMUV)tfwh 6U[?LOsN"R,yY2YR۹\\ζѹL4-1{"6^Ԙ}ơ<,xj*S@ 7uy`~c) yĖ}2JQ}~&(gyBfpvPTwގkyD`` wqmE6=G%/GUwo A 0QƘ88vPBL~뤥ǦesU}v1 o)lޘHT&1WEDmeժ`t_jR 4VکƞeMDw?2~tܦA\W (,K "0fsSUϴfv&\9R6& 0%i3QW929y`X׵MhQ? =8r]A5k)) $L7=EL[a_$=+A lbl8`F>}\ &J>oCQ_`PȡcrDg]:/ *uzݶ9aZgX%)vھ} L6T|[vd OXXN&>iH4."5qn'T%Tg6:5&/Aa1 l-'' K'Qtɲ/c H R\[a%#%>uJ Q]Tޘ oIeRj 40"Ǡ6yoJesha\q̎uza*|`V-nGoOHV `S9!ӡ)v7<0,æSSM33"0&a{n_2mYXR?&&% JEmO:' i:(8v06Ve ЫNsvxirIu"RQ?ݑO6+pWOi0GneJ:ںWuYcA)A,0InZ%"O0]KlZ#NOa1<@*#`I~wȺuL15)w_ ;Y[jh-V߻~օJߛgnd4H-1[Qs{s&unHB)cw5LVmaǜ<0,eMh$3P1pvQOIboS8Y`=FA u;-TnըZuu ukt\v笵hboX:0Ԭ+6E//~*RMf].Jω`tͭGI>VX=?qƄ;uزYåU*Ժp-C WT^ ^gs aW \ <,(-r5иWԠn*f8O4/# 0RcN &}T4GaI Tz\Ήs˚%Svy`XbFNk"k;wzFQux>\X>CTd& A]n:kPA_ÁT'ANi/6[{[LG̼_\j l"?urpxnW5f8U0MOHqYrbd'ѣYר~dNia gKsa$nj<>@{D_}ƛvIXvR1Gևt:\*UX;8sT0IFK[̤A>d/GwIBZD{c 0yڄU5!k"MJ<0CU&As`Cj6}Or$:`%NEsN/k+_l6CjK4oԕOt4A>~GOg݄݆p&|O 1ڏ*|GùXӻ+li#d89y!Vx"kUY-rSBAM vF+)hj) 0g-d_on!mE6_N\T4V]{i+,$JSK%ՙ&3.Kvu[c Sr|]i7ڽML3pI˽{I`Iryn{VIWRe[KݩQZ~Kazf#A]nj<0,IApŘ"+[y`YJQW׊gO"3ѽ4`]8%b:>#lb5h :TΜ,0$ tuS(Ƶ&&9 D ŸkRXvП۷㻝?XiIewD; BH9buݦ{#_>RL;: $vm6Fּ˼~y&h;vd&cMGmЩcI -Gikl:NV;]Mwۺ4bը*yjE&Cp51uR+?r3:~nt#btdqͨ opV[(0 Ŷ7'q" w?O>A\P?FO*HuUmN`7bfsatsl?;[Nw))~O)G -j1mIA`+ytrM]uΏ(2$cGǍ8ߙw_(hg'it/\sտ>(wwkӗH/bsakcn3GNsi9J|٣i`Ѷg\96nk9h' 3ܱ ;u Lc£"tT%ehqcZ`tUPcv MRɉ'Xk.P#wk$ 0e$GEFKcF msmj2{/>fmOA&;z2"A/"lH6k3\UTŸ JoG÷P뺋}}0-!>;Nvz<0,I8KIv9VX$P#N4F>,59qb1;5` :E ϗHPW #LJF,ѣ~v8kels˝;JpەwNL0+taV'ʬje}l7ⴣÎo3*169fw0(Lv8;̯bj!)/?φ9 b d(;2d=[Bȁ;k"0Y4Mrb=Bt#gc9\[avSR6;#ᲃ<S}@AdCa.XR{-o%%ߥ5 2,f ʿT?2~g;~, %QZo:3J:oV@QX`✫<AxYYonzJqmYN"Ɵ߆UaQ1%1mPErnW9Y`H~rNԹ9K>i ^;25wz;5̝renOXLPCi40! MJ$tό\yItV*)7>* 8GOMrv$@9cCLry9٬l )1: .H[aJXԵ{E8)j M)gqoUf # I j5vp7&ht4{ЬM Jѥi! 0 qg,,ս IVNlLwW[Jdv 8a-hó4 .bkV<:W( af1VzɉwCEhh} ;8[Gpp$J2mypͦq_É##rD]+k9/|xшvj'WI*P8C]!zAƔ[NC4N=qb4[9(T%\[a5׾0R.= ZJX1m(>t*&Q~f&8D``X{/n+72L%ɨ)(k+,rr ^N,䬋@6gskEaں%I܃\Jb>SBD x.drɬ؈Um|Βpэ8-\Jy-g ZGQnF彿nCJY*F>E Y>?o6F~O~[)%õy9FAݲڞ0 ',0b=B,h?us%s3D6<ƣ4 H*UdyvrS=oCvŔNx䁹r-tN$\ln0IMlmH nRNjrM )_ˍso9;ttY(:|֝nU`Iq<[ F.Vo&bʨ&VX (F]0tcQi+,vtLYT\]_oWTxCx?s?pSr]sܶc.%E~Jd/>:{,ѬV;K<8> Q=ߨh%dgHgSW<6Z'#tێycŁ8VԹ:qu*ic??Lޅw-'?IF5tĽ2>#kMd觜[>Gְ-=3LQM\&v:@~*+$BC.ݶYhd]P*9*_%5-RȮFu7 5,.'lpձ 3G?Uk\]݀3=MfJSB r=\&, ҂\[aik,J4Dr hEł3$.G"'W"DDF # K$S43D$nN,<Ԍ|tŭM^*pIkr 0->ON} D&rq m,-E1+=#K@<t{-?Υ_eO9a>Ă gI ~ ut?efpԗJ`֩TOuIs'(  `>a0t$CyVHF,a.n(0b0R!Zkګ{7*$ʛ2x<0,I +f#kc3,<0,z_J7͝V F{~XYH -7ΒʅE,M=5W) ;XK)qF,o*i֊9NH.ωyࠢ#{6uzN,$v1NV(q%LSawtLQV ͜ f3mZgdA\xNs\wClb9#W|F`Πgg4'ھ̻4~R>ǚri&mXyn2M,,0vpw{.oGrCSLrI./Nmf5*јbQ! "_މyo#¹s/j'g|wѽӻӗcxc0l]R29rݼkK+׹Ps$ _(H Ϲ$䀊9ʨн ϮG JR˵!xO[n-" ,:8vPn~n9.~xCfL \ξ"*eFȩW&% IK79"9~mrfQ ق1f+j] Թ.{loJR;L[av_cx mE1ΝԴ WM4%'LSJ<h*LK0 RGSZ:u p_ pmJfuRݳG]9ӥO4]%1+Q; Ԣk#`B.B)s2q$2.GM}UVu?eWJm2#bsȵuokG I#TV ȅQ;ȅ D: F' Ob"꿾۹~}w;{]~jgXs[ĤI?P6&5*Efu̢{=u:eāipO[bp[ͦZw%IJ}8 N2=Ѽy-ץ@w;N$rR 7*O21&F20L.%M b9Y`HTd#bWK*?}*N&봋v,iN\[ FG&uD+كBeRKf.;:)Mݻ]5jʹ77",3.QwMa(XJ lT"m%Hk%bKι%"0.Vw‭вĂ>Xb܊Bbp9O6'Lxz>! 抑% zȱmoxðNlN0ȱ9[ 9][ʸ"˥wIjRyh|#Pq0x8y`XgsV >fr dwȲ3?zs|]/>怮藓$2~_A&7}'O(åcLvoPgOSrZ䁉b'5 ,mg9yϝɉf 8`t> j} "]x? x\W|+O 0d0qF9{y֣yXdS7^3Kb]M4Q77]6tM # AsrEyUfy`X,v3әκF '7"[M{i}ZCBnj<0vx+ ˵ی(եCutN&?pYon$wב۷l$ #L CO]Ad0Z[ #mEN2eYS"qf8֖Vϣx\P+$՚i+,rrF\Q'r͚::f~"u镩~C kṗW @b]'#6cl2>PO,h\ RCZWWggnC䒿,ݺ] \uysk` ͻH8BNmoɕA}]ԺOd'{S>nU}':OzO?'}r6(mi?M>1X>k0N}B=Ibku}OCAm0[o0kSp6rMKVәkn%Pw4/.G;ӣ p&~+u"7:'K2Ò$G9cĂKm*>2 =-4L=cʵ' r rDv%IN!tV4fjI40 3挮Y`HHƗ@E~8?ևn[ N~(Nݪs&2EaK,ZkĵM_bmai<0,j|I!9D`شUj%J3b$q3H[a?ڞpz 2?bֶ0`m/9}ő ;(% mi~ԫvz 4U+wr#8~e3<`J-SN,)y#GW^ؕjԥpJ>xEAv=S х8UvP>]VWdv[Dρ 3m$6VX=]WN+~lK6UXe=p0lSyg>)b_U5IOhY&|K+8GOs4~6 Z=?Ih3rMz7!QNOe&2$D$p7v\`\\nO9`fb9:_eߓNVAnJ:& jR7+'NKvmVvՏ0׵ٴJ1D$O֜vϣJ*yWɮ^N !99i8D`kzS6sdk@,d;P1OV3F,F8 hbہi%LG#['n3Xfw1zu,*M%j?EPO4> lR?N*c/QϦQ")L7\](s9AVź-<0VlFd߷r5i4pO"g{ٽޛi}}RuMrQaf4V3t*DH>BOuL[/:I`lT$ c\ťd_Q?cfɽIf$s`NT~Rr[짅f=ho.7eE&J"ę s,]=E~c,`Hrv@Λ(F#xȩU%v8z<_fB[C ƦGԌ|@+{5(M]H&bIMO쮫T9([U%?f{݇:)lL؏l|;kFR~_999gĂ5w@ ;(jK6ʌkVB0Ü*(u1}o'*D.ܑĵ v<0,U;keO%#QC NGk\[a6TqV ~֟jWnn*8"LK'z<0疼@a?hKׯ6s YGz(^f42+q +#L!I2|UIc ԰mJڌ{ d?zW7vK̦c5pJ!(Fü(&t`Xh:?)r5,{W7!\%3kN7ɳKUP~ &85KaЊ@iT1VXdsV$‹.=maZYÓ_Qrm9Ns@Bޒ7sĤb0w)AC\ F'f$90=cp}t }ɠłys"e+h%:L0P/ɀɚW"o' `x;'CX~{B}rȌ,0$I9r*'k+LjbdDAK VX>2#ΰa]u.lG3zN_Wp>g4k/JgQ 9X"/\aqmEVZs'#sNUY`H>R'-k6]%y`XeD7:+1~xKJBhwr)dMڪMƓM:k.@Y979h^od/U0C/Iy#TJLzuղ} )5VwJ674yE1akZg4vENB=I0%9e' &ډk+,^B/1-PDF,.r Z"d.v)8eUݼM%p7$ufA*?_&@d2=J\0On۪<0,&R ? ͣٚN8Y`H'p29ts"9D``U}wM 'or>D7`{Gϟ~Ú>߾߭u@֗ zć|4;K FmU}'~R@Ȃ`sh@  j8Y`Hؚğdyʉ 3M,/ZƬY [g9xI| @նn3^HӯVw+s!IQ6jr>8M=1ea.kyro47ޯ2A&ؖ캭 Q^,7(*GVlpo qޭd]ﭷڕgG]W5{stA{ml#:14`vJ ]5,0$IrR,%ꨠyu_mOQÒD~T糉{ _5;3gKuЯBg@ajG>ˈM-9詪$Z~d>e-" K9ۨw>fwy_ ڄ][WWװ~];p>CYeͦ_y VX.jOg~ȕuX0.wN,kqny47uX9~Z+Be })iδf#vXڟݙ7WԹ.5#=j"9D`^n$uaPKw̜n~ܛC&5,Ǟ(`B ga6^vshx0SI2Ls $瀫URs.<øk.% wpm 욌)RtU"OW$gS4qUO7~\wLRxeĭ_Tڏ])w :&+.ƿF\Cn4n?&hӬ#mE5/F-6`y$-4x)B[Ӎ 5iECn*,+nŒxztSaBuyȈvhMpcr}ζjq :.?#\?\u;Ooғ1u?.MIfW# fu˱#u2 cf- ؓ[::lZUZ.G{%wkϟ?l>]dH&&~=Gznj61f&{m jsM]- ^…{x4$iڔǢf;왦 &dlsƈbU\ 9g ܷnѧ ]92H1B\99r1)HOLiӻ3Œ{n nһXDg]}bBa';qH@`.[q4r &d!NV[\M# oayΘ[9UlVguö3@`Xuہ'kwS&H omNVbāI.M+w,`*{=U!:ڌ5ψs$i̓Xك ۸$`pAUɹM|_iQͫ6[K,d-FDDkrJ,04!_ : TB>Un3]sy_z],cPVX <<;Xܸs Xy9 ;(Kx&YW"/L Yi6"#D^''>l?ZAVXd=ŠI#KW\pu}Y剠a'̈́"&&QV0>u48L.m7o&6+JA SNM롶<0,}wz,062sNq`P̥wAnj-]Ăi"Fv4&+Q2l6-ǒgѽeĪ'9aR˵`R=B lD#MQd'C'iܬ(fmb;s \Xt͔4Q.Nd:"Cאr y8HFvfϓ]-.`M$YP9gOGEeC<EJ0R衂6VX,?gAԍ1C7yz"w-e<59ؽ&"'C0?1)@ ,:Q{V Ԩ{3vP '#䁙(-laMRA.3lGͨ/08`ttq('kc֨ʏw9Y`HH^=օ F=kQ䁙s`btGZ{>Uz30{tΚ;I' :Y@F䁉m$>K腃J5D>C eTv"0IlT1ߺ0PÔ c <;tδ_,n) u`[VKrnLaQI--x:{P'z?/0t(" ɶE-D`OwKWֶԭ]40`|gJ1}RP1ݦ+*i#l!8y`y "'n+L5[?fC{*7-i${3 aP }D)ȨCںεCʀ8ӯ~ 01V#$&U*I>q"a? nW^/ҿL[aж VX.F]f{]Q$<0,ö{~Xe "#.!jQ:i+sj\D}j$%,Ztz䜄C&iPGazNt-.0yo).1f'_Zp&C$0l QSXݲ2Lv0$%b(=E9\vP !0@gŠCAJɨ0QD]H!#0~n͕;v=Ǟeg~8-i\0yg,\<0,Gݑ|bz+Iϕn~4&o-ё%@X:qoZfhvӾR~epR״- om ' \rES " *ShcziQ-0lʾEd2$)X*'lty*z6havBC^"D>0Uٜ";h! YTcsmE6<-\[a] Q,zrSHCIf1$c]nN">Xe(*80(:VUfqA0BDOsA i+,rp[5#K^*4p w?|6k~~}s{.w7.|׉k2~lKKL$hƈiD /Ȇ:Z}P5p@ђu!jZ'8WaQR%\[a:O3{LG^vQLW=m{hޥpۃͿgڼoϝU<QC"25|4GZmnmplO6ޑ)҃0mzߵpͤkLIfi<{Ym0t&=]GmW&ěEʚKT{?;-9s*Kp4ylqbv]m!S<0l{[k+,zsi}M,f4' ͟vjonoAJC 3:2[uuKe~1<5d3zuMvִwptX.nM;.M\'s}eWmayp0" 6qk`~߾[V?ۋ E>7ܳ즿>ZjN/e*ܿί3x$XgKnʹUnU9UB k-&gަٽkrUO\|0y>Ѳc j_{aJeԛv붽Btu FU^LthpN֘I]XIJaYSwO!i>Pcҧ1MIvVsŧb΂O{2L5 O_zx`z&芧&^dSMD7 $M[{>n¹&ۧpØ"ۭ39mxS,c\}!ƣKR9Tݦ;`?~4 VXdW(Z3mlr{SOv~?AiĽ`'5mP=#%qTkic\׹sE!&~݁ .07_g<#]2V٥p¯D``[Y'LsDauu2D9B'MǹᕫV>P=?. "C<0lr;uۻܯ! mA"a?O)%V[n,Q0WLlZ˄O&WK[#u׾m9}3~MC"/C'K~AᲶPtU1 ;RK@iɮZ%8y`XҾFvoF}A07Lbt\?o{A5g3z TfAsZ\q##?IIZR]L4C\[MN!RΠyvPV' C2-rw80\-__;s}M+] 2mX oqGuHRz2f좤]CAFD.sKr 1V'cDR"+ yZNGL64;p[$eȼ5ƛ>GyMm JTDl8`tI"b aYFp=1|`(Yj}s͎jnP 敉MZ[GЃL0<@7)(y`ܶqbG#DRZ _ێ.͵uo"2&(#~ߖ$VX.9Z/iGʴ!GEJ84,)FޱOkGy˜\[a~]RaR' k0O4 `td?<0,&b[ 5]zbRR#^_ÿ-ڥ-aև!(RrkuLa8鳞bU ,``-z|n}B_A8_N}RWp|el&2O\[aML@|cQK2y`XB &9yGW6ݽu([_`lD v'\[bf<2'uht?WU՛ҭeg 0$Z }na.]v[݅!eŸkz]§?nҫ{7Si`" 1̿5Lu?R[;;>vϴX>rzɧ D0.IkE\r'vTs;cu (=;8ʾ_ЕO(YdGc_6 l]o%o>|nYݿ /[8D~sWK UqC&:JL[aZ`5vRFaUV.ͤLi`d'kۇZ6Ux|dR 7!x8[ -aB z3W.flTdQL\u.qNjppF Irr_\Qiv{_kw܎]~xn,,$f=dd[ܓ,8+:'R{Tu%a阦U9rB }J|+l- gյ1_!~}빴8 E$Z[Օ]VwbS# s)> 7Hw0]+f$QeQ5G f-/ptW+3 d>̶$V0T_Ƒd]V@ Sed'1bŕ`A)^/cX2'6V4%R9y"ПSω3D5*yeL"h鸠WO,*]꣪jLwciLWokIk"e{?'89IeM;hv}͓-T7)08>@ :-FH Ϸdy2JZo(9uM{up!:i` 3"ld|wWK=G5.꧇ aH#59B)-7LZK9 bāAQ[Z/0îYgVds]\-}12W:UQrC|Y< 0 5*1 Evw6;iw0)ݮr;ҼCpÏw8oqRZQxV8ݐA uk3cmXn*,p8yWI1%qڪu.{ Pq;3͈"ك ;HZ6%J,OLWu0Xv=I _k778ZFrN´XB)""\\W+;Qgz 歅C*-YAn*y;rJrz~hZ9ZmO;Bq ؄dDDD'ehk3^m޷gj<&e )UReGa Zy#oE Z'+b&-Q9nXÒ}^ntݛqljM$5ʍCyEf"VT+)>L+1jW3ܧr0"0香c)\kÁV^5($0gwR&/ɥ =q;qmE֛&o#VDK#]ruN9 PH$nxk`bPt$ŸTax0ӫwWr sAZBpoĥk..6&wYV_jЕ|mœX0:pNm+NlXASsE))TEP")D YŅ .;c0s%Y$#λu`ǵ.gLJ RG6n\N6%.+=O'vrLjr\'\[a ULLrhGWr~Sh ވ~ZZ?-ܖ4-#ȇyB'eg"wHI`-ѭ‡+6hJ-A<0Jijr_~lNqWyy˹0m_jɳͶenõYϵOtHS͚M/Bm<0,}$7ZSOl&Q I0kX0:|=MGB<¹(Ԑ_t1UBE{0DUk+Lk6ww%T"''Ka6 B1M9r8*CZ;X0W1ɂIWXo}_Ȩ{=ok2 ¤Gd)ʮ QKU,tXmԨw"g i\e<;ѝBGj=es*v[r&NG>?̓J-lN,2Xޱʔ/# _nr* U\C _&*@j}L_O9i'ӽo p_ a԰GU~#е.mLm6׼˥V VtԠUGȶ1K^y`Xs,ΜXmu\ >]^} o oplV|@pU.Y <īkO 3U?$i*,V3_y8iv_F*8ǀCb}m8Y`HX=Hz(VFF؟ 07&I i#LE% e571e+[&hɑ&II"F=-a_ӊ#,0$*f&qViI7^\[a:}-󸹙}n䮄W |7^Oنum8i~z9-b9ʄ94/˃sA}R{{vZYYINoDȆ ESkH]^t;up}lUěqtJgOɿl pmEޱІ?*x7VϏg \a">+(VX>8-hA |\[aTHO퓄7;͐davG/N]2m+dzfsラAJRun{9Y`H3r$75֞c+Zq?t^g s0aRTҩ>) oÒ6\[a@GNr80᪋y*%"'n+LJ+GSlZHk10ýbQJ7"ꆕ-p" 2鐶m' ml0>C$;ve%5*j'ZG;Ii]#s apɻ{:㋑fna3^k'nYŚG ][Pe̷avVE 5Krm}XEa# #LKk<0,޲}7 Sp"ThT!1p_rЌ^Sgpa-R5R%rSY:tqf}v-w4p%V ޭs|7̦ӱi<1'Lkd"k {&wmW3{W$zski];:s q|" m;OK6Ny`XTSD.= R?{=n P?|w?~fZER>rv[{fX>ssmC\[agp16P*a+#B9.;e 6'̙jc =5 5 YQ#dN,!sc NU0Lkxz]vEst]&؞vJ&䬥1sr젝-p0Cݴ5Ù"H9eĂIJn3-#kW18aVrTsˉeir$O<}u*i 3֒O~aʚXpk+,riԶCQM$n>"wFZU # ZJX0gK,1x_RUC /s6_&E527)vCHN$r}`dۊ(ʄ`  S#l(,l9k5`tgГ<0QKnL;d+Jy:[YECw9e f fIjk+, ذNIwG3LҎ5Әiֳ.GZe@4pic+)y VXQMZΉXC'<0,.*Z:f㰀9l""!bhu]V6hH$IsG43;z U- Hc)iL66a? ['l(LTkʺg5&H~2fXGfG@za/պQ玍 FDKl:iE 3 u,QP\\VF[J1綹uJ^ЎDuת7((.z#_ ]PXعwْ޷%IzKѯ U[eX.d>{Jb GKkygin=+yas6Vݢ44PXؤLM:[&3_s]YE6^"R$H>[z',:I`\diVu$ L_+)a`Z>qi[Ln|ub-x'hX$3b.duWarx~_u_&bR;NX 8XGZ:ov]f `$?V-ğ*hXXiJ|åuD{K@>̲;H l_{XqPs[O,oCd)~=:L8 8&Do8Y֛Q}n1`}t3E8HU xkHp$+Ǘ˵K**#)nLBɐBHA %yEwQj̧0[JL[دƗEāA7"'(+:ddtXSs#*N,/j0mXʒc'ϓ?eWbdM`9D3]l+Azu!n-Tmlkw_9:zǟk2`}"V8L.8̉#-#1vIn8ݪ?[{y-AbQۙx`o@h 7_m$»}{55'{8{s۵˹ݳ\voYA4paR2 A00Æ)[Voڑ͘Nc (aPmŴyw:끑0-;Xrg"!DŽ51WiSi+,r&Duˆ] )9\vDt;ߘ"M#k(ի02 }a%]Z4AhLA&>nĻZOɬ4jnv ܨI@?,f7;E]i馨cVI\AJ`iV^>:7kQ*=b4 .buLkih98DюJQÈ|o[i+*r$g.ܢ _5ZF#Ò*ozA9x3qUO7K3W5hh+O qʞʡ?מ F'PѬ˷/hfU h4yaŖqI^Jƴ^K :NR4mĸ,Avj52g-q@.su?d'*"LilZD``iǨ578IIOG]gPN;?{tLhՑ?N~]<0a畛C,;i N( - HV߈oq}\-17:f/_\`꜈\mF-;D*܌Gg]]kaF8D``M'WD^A]AŀA^C"k 먃X 0a2I?SʴlW`L}RjV)#2ȳmuvSi'lގyC GvSx 87kRK$\ʋ4r Ăqivk˧ LyQ}M8E:2D~Aa(ҭiYҶk+, r !mAEIL7urkX׺3bdxvT,̶yg`Au3;FrtvE۷U/, @(+ k9($Uj^d-E%DFqU18mN%\+ʝq4w5{k8 gH%YFg(0 jKזt4u/q΍XjJ7E L6xOb>aWt"7VhM`!WKfM0i|Zׄ,|=Agu;ohͅK[Gt1P5j#%w׺t@`jX*LjM4jЍh$SgFg)O1^3yX>+FfYzi`d?#t: Ýa6O'40jK)ժi`ldtKaƛhc_Bvƈ 蒑zOyk}ԋDhkK_ z_ړ歹[1/k)z*uvwx. .Ħ3+5`Xs\@bS TX~!FP>^蝮rd4p?źF\,,1\nxa x^ËQ6%Hv L얼Qv_m'ovo!Ƌ"y{tMK< 4Lr@D9&W80o9#}-ܜnb}>A-y`͒-Xkx߿fR3os('BAʄ8yHh sx40݆wL(V&TwU]lv/(8[o_^Uf;z>6bo "pF $N2`LϠџ+[w*?zWZ\[`731GWkk9nOpo߻>NJwJd!}3wwcz㤉)mn5}63SL_䲋~FC ډ(9>h6Dkݴ̎9diK:ON>tC}=EK6 Z5i?IF0tD4^*"{3ܩ{ єĤhruHÈ3Ė%Vi*,p,8W{x YrԶ`$:;`+GUMO\ .2+ɮz28=oOZv/+;cnײ=15W]٬njl )~!nu>zۘ{vyi?r>{UV}Նp_^tnјoAK݃cL쮟'u㑩v[kfk1Mڒoh+]vPӺV2kBdڢ pcbl}͖7x.˗;e2s+e?S-udb F*I,|=D *- ٘%\,yhc 瘲q,vW@|Ÿ`}FAR۔eāYP1Uʹ$Vd}sOݹhˉ)lܵ0R vq>x;QӮ TT+,380(1q`زJ=:zVkս+*j&Hdml*J e b ʞH~ |Z|90_axR KVܣ9_`8(4na4PUy7Q˵o;%XG L\GK5Q`@bU^Fq#u+ Lj( ԣ>UZfo,aUP=RT(,8I7\q`:T))pi*,pn/^`0mY?~ܠW&hnL(2W1n/vܾ{_cvFq@Sa-$Z1JcSWRāAKQ;j. f'$m=wm~UU`\H]zgPo)LOȈ65~MIZ,T,80(|XW[ ƚ 'ܼۿǿ/.<~pK/ ?n{eo?{,9d +eF2Em ڔٞ}؞ psceTwVeLϯ_|ʋC ,".ia= =7ӿo?jܫ7۟~~1wq}?J6E__WpsEppoJt o+qF_n>؎s?s_@/`|$g.=|?o_-o?WoYo8x_pn7+7Uv&z/ٷ_o_m퇓on/o[#AP} +'[~>*άnm9~7>Lh{1|yCh|)6Dԛ{֪x/EkƷ\cK&{fh5)o3"M\j&7UlLMfbacGI?3TP`64j.MXՃR$Q񩦬S笍yEs_iQ-'ۙRS(r q@PD#S)6AٟOʾĂRLb͵S[0ElеqG8y`XtEOSDP`Sw4}׷f0_Ԥ?C"À1G*I8حһV:b DgB9V^vcΛW5VNgWvRx6ϸˎ>n4ƂƷ7aWh]ҏ_j*wdS>7N~Q>K_.[GvFt6ڏ녭YW3 MIGf"w"||Q p\[C dsU,8ꞻiKdJ*.]" v4y`XtLB2I-*" [(C+,v pI7cXAU#gҫ7E, tJwp`Z95g@Sz, 1⠠c/JI)Gq-QWt0tFm:MEF*1]4orzRf FəZHԮ~R-f5mFh#w7b>!uHfq{7A{{m|w{2-}Hnj;{1{qqG9(WOSxjb ƅo.Ou,5|HY[q#b; 8ֲCd#G.cu92d>}Kc EK\EJCf cqbUl z B6F[ ghRfi} sbS!3ۚ+Dڕko}y Fڥ`s& <>6zlنzrqSS u"Vd)~M&@2^6H6R:7fJ49upB1>mF̛\Ky~X;& "N^;2 ^ T۴ΟL#~ܟ/\uq["j*'-7 tKƊfb4/9,XaͶV.ŦTSωӦV-XFM@dx)H<4צӷh83=;ne!0rΘH0w@SF6>o{B<;HSny`/ڣjHc 72Y`bij1bĂ:ATe 2}z4wS]oVix"p,x<0,~d̮dEl7#qчw,Y-3;ifflk,Abu\ĠqPZT:eLf649xfї6Mhܾm3c2-.F<'*Wd0MK[Ҧdb堹";ݴr%?I#"0S$!gr<l6gW"h098(ۯV02kTf;XݘSe=6GK)?&7c3~l[϶Xȁ2L?3nMIld˙,xgm9+ggs*%a9;FySŦsz>=,U4Z`l 3L4)tJYm2p?fʵb;#0-Pxm,<ōfɔwY 7VXdpN3/+$d!8aĚ\W߭@#ޙ\N$7]Ӟ@{Ar6e@Q3Qi.>#L\ё{:r; ڝr 0fdw\35kUA17VXXXs_Ò0*Fkc@\聤(ӥ29RD!|p ΪݝU9J.Ρ Ov+2VA& R lA`0b5'_0&ոgۯs>vya "0L~+ۆ<;xwSÂLd;xw[)Bb3z13b#+M؛.b{tFF 8n/J7ļ= JtBLR cɭ~u~/v=%+f;? dz7+ 6f#,mxk+ ӟ-y/Vl}#- !Lө#1& MiEaP6}=d4?@aRH4qf{AKf5Pgb'ν>*=2!T* cRt{˕4Ok]X0CMˇ`MWNb9=,z0*qf&n>2'% "et"cEnx"leĂq \A֤f.牸sbQ-~ P)*,0Q\yJ:]3s ؊O:ue18QQg}}Ft_ݤw6j֝N.bfe θĪ.)!**O_F\P)3T7J:}F* wZ bBꦎwJ8L]*ܮ`̜.ֿ:Ay&qǓ?77?7y6i>vLK1ҝe)_,Bn,@)i/~LXoMx0;7I*X@i)-tCAY dr<.%'La88ꥏMY}϶W(.RN sc}rjth>1#Fe/tD``[E7V;˿"krW_q8y`bj*Jd՝TRvѽ+zVHԄͻJ{N]Dۍp'H%bZs0eYC+%eІ9!{O} [{L@61Ilp^|-|)klb:%$L)۩BfFg>aF+_Î)L;9[}s]An q/Ͱ+Uձ# 8>sl?xKEg# (bؘF=^%5# I;URY tk^fK**,3l-p%ݑ~q<ȃoTnʗvy?RM̍mRy{{mZ%Xa,: lqǎ?|ievn+%U"d N"|A= kR <#L)\o"SEN]ٌi(%|?~u۷*} e=LL_3dH\`luj(httG=i=xi`tĀL-ݧ[fFnlImQP#Nf9ЫpQsnqQ|#*U? U@e{gvL*tb CxGu߮ „(Գ+~C6罇&f$0}QP+LYU)s0u%!b(<K~{B2ڙ /$A ψ Y= j~k+dž-XamΫpy梽C[]&#"'3V#HF? xgc~ҳMFIa% qcЅ7XaiFr%쐱"AhJ`,C2VXd홱&%LĂI!N!>7O #53Vw_6&590CRnZW$Cdt,S.e s(Ŷ r"0⌜<0tF(}1cE6)Dfeйfɂɗzb0:E@5^|h3װ/l-)1Zz8+,G*P_Hsե?HM|gM}eaћ .">{e*6 Zل?hxfM+ϻdtMA/ fϫNl.gRyoБ 8u"wP{]fTS7W LT0/Tܡ:"N㐶Zt R\՚LfŠ|0檫̐igkAZ.1$O+L(WݷY OݴjW䁹^r4鼧l\8dcl?fqz9?62Wg7@ɵv>ĥک:o)9P(f(): '-3Ɔ(PJאT>eAA1#ϯ/X-TyyB,4y1{[3l\F5&& Ng,Vإ-K;E,R,NG9`tډ>HڣW<0,,MzD%Mݝ^]sx_T}6?׹)1`gāAI 2{+!VmI OpLkpmni;nc)^RV(m$^YaAS2Ju7 :5- @ q +u&eq+{oqa׆5wf VCbM^GJĔ!wn9|Xau RzKlD8K0V~A7@XaS'# ,EDF#LLEi/V17vig2SNIjmL4ڤ@ <+:V[_R.4w/ 8LsmR+)E^+ sblUج/N bcW3YqJ FݴS<0, litWFk%,DAoeRx| +@QgP3qJg6Ǧ2,rY.gAl%X0U()'lMxx2O.0/5uǢo g <+46R6|_sL.J&7X03:{i\m. |[ɉ {>eyQ9v*p" ʩ34#NvJ OmN h`6L)*~Yq΄Fsٲy涛9%q)L+Eh/ ԁqw"Wnpc-?dkn~:-/]Ո߉P>fƺ;RQt%B&p6)s"s FG"'_qXѝ1Ă"Q@N#NPVû^K׊ye^L6i"XH:NA=?„jgtx2zo} 3r9Dv02f0TܥWXa)3F4)%cr!AYCkVȐdqћgQQ/3V*.V/W{ԌN˅ g}*&Ĥ) vT"`S ìS%JH0%88wx*Ek<ڧ1x[5:ygw6BsC2`HlBDEhM`u4x_8C${@ɣV%PAZf k;Sj$-KKOQfP|ՉAN]9Af}J ͞fām zҢĂљ/It*SJU0BmB],0$f@Ă٩aSaRqʜy]k=p0lTNvpu䁂Ƀi o+fto@r8"ψ,ƧxVwB-0!lxpW³q1Q!jG]TxZ9k||-t#׍I;N׷JOz FV3_ۋ~ZXw/Cݯ`rr9r8} ީH3;NTTZIҖ՘˩!pɗ'8((ݘrVƉ'nOA {n,Tm\V% 345(0N$2eT.Wo |$Ob<0ůx" k4~lߏ ;hv' ' I$*Ic"0/V.k^ڊXx]:St)Fvigpm:Dm3UD%~l|G;u_s'0~wV;cwq\A>1äQ D;0W3"xA+, <0,}J*~%cIgm/n0M}P8'TMZ0_(hʸ ȭ3 ˬ5/xsyuіXel߻zFF`0cq,_$%ݢCCa4Y FgSuGy0K%:HeAZDYdrٖ+LN~6 'άUF/' Iz6umDڧMpT9xravTV  FGn^1@>JLНZh[h1hOdA׬+,~A+A j!]PZO);3VX~֪J2>nj0bD0jmdqXE8_Gd#d|KZЄ c b%+V0toʠ O #3LN]Z]][NӚ[q0erE]o(PTff+881tZp(5*(( m: @*TPlLrwRňR:e"j ryBHw:J}՝aTv}Zg^+ pap\DzɁfsצ9y`Xb7r7ؐ7c'tǤɌM,hX0:*5:&wc9QnȳKI8} q)C%qR`[ZwE0.h\ Jk̴Tiyxe*#X X:X'ۄfhܚQNO{OoD&lg2_  #av?*6Z ΃Ow3TDM}~Ov6ki:m+1;SXC# 1󲉅!4v"h?oyc뵑TOGAc;c z Ʒ9z܉1j7{x2؋3tIh0~ByЛmQ2aFrɨ}ԝ7{7 >hFfFo5pu}ܣ4َAKPЛݕne|g.v/01r!a)&TPkSϽ?Gٻ xLo\he'sӂ[kk j c[5ɵ|1:Pc uMQDNm=q5Pxk3' t0Dz+lV|DȂSFΈ}X(a-I#ZDm ZRRR|'*LHJZRTATMUUXnQ`~x0MmؠfpxE6K+1DR[b1' K?Ջ\`L6?MBwc;;fzP=}R FGǬζ j052ܭ.#91SR+,:N!>Ci "H*ҧ8F~R_9XaS!'RwU6ɂB ޝ.O! 7+k%Gopλ/_rWZ| 6,9exZk(XFZdWS TŒZLY#ؤ<0,Dd:Έڤ5D䁫۵S R}ĂSIJ.WSe vsm=֗hsC_L5ka1][0k(_Ǡ 4fR'#֎~f{I9hopo:yxAWS`%vR×6Xa8(Q AD|N{jҶ.8y(_v]IuQ|u=Wnu3P/W5!u$,Hi׮# O%_Rj:jTvfZGw^N-Ǫuxź ;M_l^MyI9;JLWa/' &s-6Ȉ/²+V#9]n6iwF*;GڄDxq(S7Jƛ DBkW|oZDC%3qjm-vz]PIQ=/Fؽ:Vv̈ smu,0:h`l8YI*,L)LRzh;if@oz )Fˈfy?Qgj^b:|gWmN؎~F&[aQ=TX~붳(Ã*LXR)%40Ttѝ_#X)?iW)-Cz_4fR1T&xvJ0`< tu+UT06:SgL:5X`j6x+[q8;V\@f0qG$ r?m䵼 Ԇ!7ey獷A9M [.0#AHn-Dxsfoل۝'6DFo2v e"Z.#J΄klj3̒-v`޴YiT$)h]vQ`DAr&5,)0ˆoMȃT,xMcf[Yh|~r`6cRt[5Gh;Ck/{go58f}CrĽ}'Ty,*EJ_ XaC&MNqb&BԂ:ZJv+B62j&a 3HMMD!ތ9 9zznnō|)0vQT "nQo!~o%CN{4Dnr."rInA1v]F #9Ħz8)q_2PƟ~U_ozmDڵ;<0%oЋ_Yisg9YVfgDakLjĂQ NiLbߜa1t"bsc}AwӳnvDZFZ9d=TxrYn>i &/: Ͽ8{hS >0`iKrWr/l\1e0m6]f.͎sXx$ 2"T9(<;HZ %# qX򡢈ybMM{60̨ esp T!C0aƓ[+#*"5%[cDIG6!9wu2mv:a_K#uqƛ\6`z,OI[eAɂRDL/4"8((&T!@)L3T:* F]5dI**I](%YDVufe :74!< oRUצ"  R3nN+gZv?fbHd/qvC&: Vb(rLv&axf|y\y'S${B陀mY!OV/WϷOPpXSV΍Y rsƍusoMHDd!i\L}`0Ye<0,ĖՉl7RwZkv/2sեT[2[N"7VXYEOUf0eP+ea~\ǰrnj. ܺT'K?t40N@rj|â?<秦|_pr[@r ;9nrفw-OejoJ޼. }( nj[N[kD3r*!SUr:u65EO?Q3^_i {射)=7g0p6XB=l@?צUr(eݗo}ېsCT|RR_Ƚ`f ΪZdI"cEתt+,r.Eb > "=}feӲɲoA[Pk@ ah?掓u۴+1[mkP9L͕zI1C^0>NO9>ӫrLlrU(]2c*8lj;0pQ+kR$#+<n͠hMBZ>VS %"[}!`=uJ;ˆ'B[n JX*F #?u_"ma2}o/Vw:0yuf3c|m<;8S~Aq7d;8[Wu+ŌŴ3lP`NJ혱,&%W-p*h"ͅ_YΉ=aL,(x4per;C[ΙmJy4mU f} mQRzU{X? cfUkEMSz5[`AgLJ-<0\' ˶USb`ĂRy`݌~_Y|E_ p/q?aݙog`3##\vUyQ)ju[콾xIX*_b lz% ÍJM3F,6qyqĂaFܴsk݁X0:I980sVi@1(:g,cL\NX[M3RMBѰuK~TkSs׍rT wm{$FaۚP ~̨tÜOZF|0OrԪ'1؏R0_-OjCF*J{zo*0|*xN]ܢ}>ݖu`<bueAj j;h(YP8|g1HBi1.z^ʈFjv^?MߖI[KS/>HOLR[娼 G0Hf<p?9tmo\_!j}Rnna^(;S 7V%6ɒfnJ^qGP]. ONNM"IztX ܥ(/g dYʏ3vʼnӦz:')8yv0N]'p>9y`>WO)%UQ' MW/ +L Fkwb|JMr wզy`X.PݮhAw۲iK^݉p6sK՝ݲfT tGL+b39y`նU7â7O钢Xa&S HT)p)<N,eeāY]۞V`2ؾ Ӫd*OvEâR[`Xf" 0^5,0$:^x;ʆfEPf‰0J*bR_v<' mjSY gwk⤤;~n:ut9J`x8\`x{d)z(i5,0$%&yOsчjn4Ssnع߿4On&,VrFO~g n6˹~ T鱧zۯno֮ql m.&JY6HB_lvD`%O rGԆOytr@} L|r>j3>1[ S0,~i n9އ5^@pS$NQJ%%8J }|J |AMEA׺XaT6&`Z6sF]vNt&*4Q' :LPjYð*gc?,YL~Rc &{6u3|Xa:,)>a\yA"R4նʍ"p`ZMYuQ3:e=9x{5cc!VBުefkmy2;7WPf2p`rmiڨ<0,ݦ IkS|`6Nf& em+?-y W݇|||sO#f0k@͌٤{䌏0Jnw%X<m͇5ҹ?`Tx;1;ofo5W;w'!;+Qe Ib80}ܢ;.0'K/gXt<0,"[[7V'Cœd%0U)/\`vVW_If5۬$yVjVOw]>>ŜF_Nϳa〟! 6G0(+<7)\P! d6YSM(vL^W @)`[ZU/M~augB'd.%̋523eݱ.TaqF{ppYː}]Ffeo(jw%y2Ŋ&D..>fClT)F2vR +J2MUׇN]*R4CrK{2o xLc5ժ o3[(^~7 w_rfw'ყ0ڽW._O˵LfuN\zĵま[cy 5΄4{D~lmh9@AzY]ɖl=C0Mkҭ6b/sKÓ4˞ vc\ivmev_5l4 x7"XڋB%: ?߾W'$ʞfr+S$O[ox1f^γy4=1;h }/iWSp$lJ!< 6䞍}E\ )< C\CZkFޫvWn<0pF'e0;ɍ48^Ze "g׫I(,9B(9}Eki]tLsפhn8awkx%C9W!Of<[=phG i,IR5mI%H`"]hBE+.jϰjF@AkxyRd.OM%Nap Ef>5#LV- HXS 9BQTKf֤c)A`04o ` yWZ{'Ykv2DU]dwՆC8QQZ"cB/I1Վ lnNgF)b%FA jW%U S'uT8\`xt W p03ڪV3crHN=JdXaV'^ܗ(9Ҍ0G5ee4iF(.G1m#K3钐^-{8? {= Jz/E͝qqKT?/nU˾_>)6XaDv.Xd s S_ }nݥѱ9*=uݞpDN!Y1_ݸs~5fGR棵3e$59Q0 Fg&nR.w\S,ɋ[oY} %rǒ;Fl>! eSrƐޣ H ڨS1>Ÿ+wz00cA 5'{y }~mp4pڗ[xV7'yn,6pydM@](W8!xTT ~X\! v]r8`R܌侫~:.|l#=!OKrYs| 80aΥپz 5*EXaې!9P ɍ=974g,O[:;Vz&N1)`Ԉ7- 3ToVSĹ}B5/co!3#$c x %X oGjjuIDNZ9 3Tx'S>90P\D[z M{N,پpMƍ&FK+|8Bd温=Tp+F MB+ pⰎ)/HC؃(KA4x-ʌf`;2WbćA鮁32{~ɉY{ݦ1_ӚT1ayN5ѭ}$IsMvW1g}pcE։qS=[Pؙ+,z&qI4W֬3̆\]7VXn~OعHm!"LcSnNUoٌʂ<0,C]U:u׶}[Lgz$t}&l$4Ĥ>fG5Ny%NTMYh" Nus&P 6;s'6kP8xʏ.! OTjt#XŸ03tjDZfV_[} +n6;|[͢B$|٧aXЭUWnR<7[0Pş"{l :7FV-'S]!n_P3V\T;*Aƺ $Ty%C~$.$VVeF/"ցZ_Ķ_h,`Z0`s6+Vќ!@ J܍2 L8|lu 14O&aVA4 gM g=#Wl5N$פʨ8;˛888Yq4ᚌF)'R IO2"yELZ(]BLƾܬ=߽TF-/xJ;eoo f"=L5G:}Ckm,#k7Vze+% + lg>vHfDj)\Gk}i|7@8y.LLSBVn^~w{q7gxJ6Yogw[j\7^w!>nz:ZI󧾟ꮚE_Լϖf!"PrR9WXaF`RIZE' NX'"QJ7ј¤9 "*q;2<ۺb<0,:SnOul`tMuSe eJ=.]2cART߁;zeD5Bم1ԄzɏCҏ+y=x q&AI68eAL*fPPһ^W%:Zw׬Y̬cn1K(jg-0P0&M3Ct;W!Xf d s;D>' &s3t9X0:bMAfW7cN1_[斺^**r͌nꥢv3]ڱn/~nނMF,Jm`딞h)[˗a/yJo^u FPؔCO#P9 ؤkS|Iv=;Qyvdۅ, bCKC;׆w;-}d|O!/Tq> 1b*BȎy2&۵Ajr(UgVvPcFj sfҊ뺮vW(iI%o4޷~])Hc OMxX0RlѫLnZ(aOM tTBRBp1ؔMm#b>ĚYoJ2F,YYR5TV{gS^>a ܧ|LDϫPX0:Fef#&f [(Ʈ\  NYG+[F ٤ZF"AYWq-5 tkDFa.iJ}Qqoo =e[NǭstLflRC³7"ԖX7U/;E1VkD$0ی+|}^n$a[4r%"DGNI rF3{[o3ݏo/ES>x,ǷeBƷhrOqoZhf٣-c42M>xŹ˄`&veZ'ڡuU{mx0+߭􋃹!`n 8VDGXwI g[mw,z.-#!L7YY]IF> XKgI]ȧ:P-3W0OԊ4DrXh8DYޙЛNq` OIKqc)}*]X "Eg0(3V7l}' Gg[e/#Փcc{{'O 5NxuDpb訔E]=p*3IOF(!f,0YOMo׌u_M|4<3 'z9 8{vz97VצZES#'r#8a6X.Er`/NLw~DF~rݪAfMӾ*o3{Ƿg&T-G}~ƷIn0l1cGqLj<3Bjwf7Ϛaƙ?컃g!]tn'@xfnĂɒbZ0+٬T$Z }z5 ;<}NQ;D='?Lm7s#jKan0j[T%f0U>0 Wy`XEc5 .0AuV3V(+Cd!EZR o.ZMsF,*7ר憡swA߲zϽTV_Z,SOSĩV&4t}O{=Q!=2W% *%n\0⣴K K#8((& JmV6#JlK),"FͫJmJ$>u Ϡn*qv=R1y`XD&+\BWVd~!D,8䁙bs=`OWL\ F8J45~ser*fOB udzUX~k%V/8ƴ?;8\.ݺU`xf#g8yv16R;ƺ ^Kn\<ƾS XmWí)+nSBIa cքz)( s$OS,9Z%~b©'SΤ?ds=;[j;问sxl@7b5b"N\ïlw 1SAKD :g/M0M>>\T-w}t1.*7BSA>7.Q+5+k)܎5 l2*ȕ9y vEړ}vCx*4׬-|s߭~`gܾ5I'w6|jçԧp#Ow~~?O,ʄoOˈһEXaٌ|ju2e婾A6LtWmC" &^^wx nslSn`MHhSۓ; Ӕ'ŊǰOswn۫_mޚF>6F̟ل5>?#'r43bu/1ܶ1-2н-5(<$bʼnf MhUUnbe~Ȝ18eB5\=Y%c$0{ʷ{+Oo! 5{&nJmt8L3QGg-3 ]* <d5{h׿5?۷W'3x2_hiP/\bܔ'Sp>Qַwv:.4dDž>hf<Ǟo' W虺SRVc).#+^<q8^% ouK [Xa}XX|D!~G{j5S׏A#i6ͱ\;зze$kʯ Ӟ:2j2K?:"s<ϔxQ༗]Bcݛ3kp:2=QQcNg?"p*BAk8v1L96ȱ밲qgE2h2k0z.J1cEEnٕ2iT{> # G.HA++*rl5Y,0$>*`ĂI}BX[?BKgk04|@ >jɃbv dfͦ$W+*r6~V#=%O,iq@P|ގ@&t2%É3鵋{DbMlMMG4Q$K r:uЄ(n#{f&x4e %AF.7y>1&=X{Cs8^ór|6XenLlr9W ;KZ^αLtazPv,[quJd&^jgaeS&{>+;)/@)/c :W1R$! ɢq¢Q¬+Lf YP- jAskJTP>x]vu9uKuhwbōu"1NXTJ_ _}xP_cQ'nS[ i槩[dgzGNgөwHንc1Ϩ>n`Jb\d!='"0;rk@37VXdiݔ D&Q,iV1=hcgl?)<53+z,0Q]޺3S pc9*D-cնy`XV5K5 .0Y2ީ f/Ɏb EYC҅d&&[ o.ZZX0qVD!/QVçb~aPXwr%sC9Dw2'E^z#8qnѨ:e9u!KE6# Um%o*pWKT. fyH+rXa_j:KoIW9y`&%4e LHՋ|ӧ30KQ`t1+XːCF@f)LGYuAfb$" 9`t ! qO~:S6h6rj[s<0,^*7VXdF/#?Lq~IC5M"04J~pcEތՑ֊Tffwp0Xui|kvs+ n9{_A1UJ'Ӹ()2Hz%4yAZ**pr4 +u#p͔oOWh#Z;!t: [+&0O}Ĕ8D``'L"i>PK0bS"' zEENN@$Ɣ ,rwJ }i%[ FYT΃`hrez^V/=̒p+'`ƍ̐atl zRz LIE3~ o/_FSuF3+ވeƺ3s}^[p()ň;uښ.Š3rf4S୞WaP{Mߖ>%!3rc<0,]J,;Ԯ)f0:ݦU!C3RnzD[e W3_쬪V0# I2jI; ;|վo L7=%>;VI e&ĚI *,pAQ9/n0KHM+N!Ă)mn,-MaFt-_0 zIW0b f c}u{pA(;O&Y:?fTKa3E(sN75Wv>< uM羥++bDjC\^gGNһT>ui$\{ 0CE馹p f5oi 0zԍz(X6  HDn?)V}HnTsm'L5S '_~g=isk\)tP?f7ptr?:L>> !C տ,~iۚßȲo-Ձ'CN[sy{$my`SsܷtfAs:* )Ǹ`;TYZxukf|@47:GA OMy״М+?l»e|LJë`ۢ T9s8q-\GG~3?y }_8ysfn&\sg9nA)R D~F31",7GLMtStUT׃NSkw ړwH=m 2ѧ[jC)CFz@$fI{PO+8@JyHcǡX"(R8_ \פL3:F.;Ki0cESuWtܿvӹ9 5)~o:3I?2|˯ %$FFVJ]k[wksh“2kp*Uxx+,,gGS]J` /؜ZbnëJedS>4ӥϗ *bmzٙ4贴ćvbٮ>僛NF/ʀ \I1(nvsj0bqONO2@|ܣ;h.AΙݰ<})#)glR :ř""5SA!bl9%@6ɦ2`s 5\bW_Z|Z|r"f-V77;yQfc`=P}Ԕ;l^M^v[dRt՛ݔH(*&d#זj6ٝfQbf7Z{lQZ^k./?qr{ϔcrm$YgSEZXLtP߈ H3`OIEO"D?J䁩2C\`>ey ^3osMZIxBv N)65Y"0: XaiڟpcEn*uf0ɖr놶N,IyLXcje sFEWD0f *z_uIfWV`P'oF^R<@}+y`XEAf0R(l ["_a0bԽfӍժcĂQ8;~vG1<,]0cEvXٱb*?S=ѶEmgm; bK7UN ]JYqE`ep(K2u񴚰y7'yx)4`.ԀDA3dyJ=5<f^9_vGWsNѦT=JI={:}IFb.Vt5.n?Yz?o7"n\JN`wsj[7&^n9fpn[NN߸?Ƅ-^w#+(5_n/WJ>j} nf+oezGUN98w\}lW&Ff$~˶.~n͕M %3[4!J(.%bnNMؓL0.*u; .L;XS:i [DĵK5s7WiAptG?oo 6!9{7=C_ԅ1j|qnQ1cnifhTphLa"YKV氵_<Ý+z;T58gvS5 @IպT=UJ bc]+;Vتu:y6T7xirDz/Φٲ/0n#e5nz}d|>oG7jJ ooV yeklҡk۱0B69n^ft{FꃆH(*01R“ #J7`cF>k3&Z@@J jW`AA6WiIPq䓼ؐcwitn sJ(3sdۭ" ٶ& ōupj[z Fg'V8Y`HLyC9E)Ⱦ3u:;=H OW_dv"c銾 &-YկNWeYe!~ml.)<5$EAҕ''PϺ"0Kt3<0ysV̠t+,-#kD]Boƅ%`L-I֪u9&1sON% xXaΨH=sɉn<%`M6F,{ks0Qn!ـ kzt{HN\crn"""Bo^JmNƊC&׶ہʒY8yvPlr InȳY_ry/Q_q)'88yvhG_YNĤJo8`>(u& vÓ+LZ:, vlN\a |hû\nz ?)4* 0 ;HƇe|0C\r̦Hy0[VN 9O6 %<%fj eK!.fYۓ;9y`ꨘ%џ;GϾЮ4fyr)'?p.n,tn4Cp/W ު:jseA0!* }\Po =v*n2رiY(M,RS(<К 0S&RTӇ U;1XΊđNTRSuɳ;:J_ Xa*-g_mP"Lel49ut8yv0v7*'Ǎ9(HL+h Zkl6e{QD67g$X0:zA/ƌuokԺ vp?3FQ$Q A֦& ./YvX;[Z5 vg2¼f@8?x^M7De Yϑ2Vդ'RƌX0:j۹++ `n7MOusJCk scG;GXh;} 8DIN֭V|j|pCNı 0o K[[H Svf_BS18vpbŧlav趃g8'WRC-zU_-V=fe?ϰy`Ɨ/9~ˍum~4kUy ;(m+m4ޒk4of vjgaUwtGT>4̮HS7#=>m ~ Pi @+ P>[(㾤M N^ w(A7OM}o͒IPq㙡t'G\!3T"%[u-'B\?4r_?6R?{砇﷿/,7i//xsX acHqjۧd)I'.ߩ{}4k}rǯ ݊8}ڹ1*ulX^i+c B^lu4oq{|4VYmS|0T3`Xc }çv\Gfc0zS[p[F~ǻ<1 ȹ f**Oj12gPW}ƟBb@M&m榸s>5J6e?ׄՍtdҘCjWFp+B-^@ȝ\kIeZ~2=)S*jj`~q[*^E{ 9OwNiEw ;j*rУqZ? =[E[QQGJ &7[ʻwa1a ["rpCG«:hy.<șrՍ_|pܧ;b-(ര&> ]2q9(_ŇA4)y)_z0>6Y-_ Y0Ǫ^²`J?PԷ5}*L&4کz˻g WL/5N]v5/[<^; 4zYE:$`Q$08q;4[ "v's88ŗ "ø$MXVsz{?aʐiO> -+ X?֫.KOIv5=BTLb>4B)=nzOT 0)Cm!‚ Vɂf%XDa>zbHtVs1ㅥ:O e2Pm(=de zazv1y|}d"̣lcJ4 9\X2 d?",hVA`ƝO[ؐ\UʭXQ*# Y8b ؜aBX oޮ6)n 4i(= fK8D-0 &B(Z;K'!œB.CIT\ڵ$- # /Va&^u<{o׮,~Lng%m3-W740pbV f0NNBw'75``}Hޖn¥Y)s?lJ=-;4JvD(Gcŧ 6|Y-!Q٩6;Ӏsȕ]3HKAMuWHSM 1K'Rb{v,4kkгsXS ?HN* vB*Ak|NVR|Lu[y$;䢪 uN5@#3)r/Jqv2&nugV!y:6b!OaƷ\a?l> =9v5 > 2*hI`j3%js"@tSV;E1"(4 ϲgwbinĴгr0ɭ闇S厨6TRGU6-yca<#Gt;?*.?x7!|[9>#eƯڍʳf/$@:{`qCֳAOhKոaJdUEK+1iwlu$ UaNŖaVB|.zmL[M0x/dD9*C>^<7- .Lm6TخaA?-?ufw6NDpVi6z|Wz ~ j|0_6f/D,^,,,",>b|]vRb`6vF&FB=UJSd _}~vW)LkCڍ زfGw]5 /c|p]Nn|sOI(p^形s\sc6=\Tf=e>UZ>ޞ$)Q1Sܐ\図(NL-j :7&Ɖk̆(}FN$b* тT޼;b0PvJiեK &ʩK cBo5F.zuJД4 f{/Y|Ӓxt[G[y*4w.HWkF hafar,]z`ƻx϶&b ʞ-1;1rl<*XԚq"ZDݓVs=;;rS$&|wlV!܆ 4fm 3u<|(_s2~~Ϟ&5[",ȰY3CO{r"oRϲ/aʧHH2[^P/,aӯBv M3i{?04 6}_1pNwP? G{ܼ*lY119@yk|Ik;^-v|ߚ6-f t7վ_&>zLκ3 zӯ]q xOϨ~OK]^O:~Gjҧ񀿏Rħ8k Ro|h ~! :NOO?3o[9`S1'ǁ81rf=˲O,QG&+C('3x黥џ{6dnЩYw&y7tkX8xy"*OL|$1snnvn´9 9a$dS͞fY~iܟVzdLfڅ i ΄`B}*g9)0 Z~*A!GlNKsoCƉ {e>9Qa@.Վ{MOugy5gfQY,ƒoջlێ_8VxT*Q*Ch$xA):j]cYbɞX*}`N)ԌńېB'hhW:Acc&&,qgḰ4sL&6g&8=Lv\0Mv N?qnď1{NjI\Zb2qPYB\7d)3D`kQ\Spm b,KvIS7cKHɾ3_cSlßBDK:ΐAj*%Oye(:Դ>ܢJܡe8tB0[)~Fnn{&&Jji}r߰6ei xU8~wV;cUq\MmP! V 7hCj֛R]Yg'yTZtOfr5W<;.frV7VXY>PE " eX 1=b1Q4q>gXr9\"8KFeWP/L6c;;ܫ|FTL>h_K9uѝ̶l۫)6t k sM>E ۪`\v6.T|O3ƣW|x$p3X츒&䁯R=Szz4ףǟ`07VX䱞lJ&Te2tr xq;.4X~LCYjK rcEE6bCV׍R\$rD9 _U-ȡ܇"`dA!CGŎXMgD')Y1Wf<ge}|޿G;KkPa'6d4̘@Y'kPNpwɜ<0,}J<@Ga;sU߱ks6 ns8yPXdz '%8`tBBz̠1Ƅ)\[7DC}xjauB= I*zWds<=N,j5g9yPXژ9M})_g'8NΉӆv\ࣜWa}ٛu]əO^q慭~rb4")Y #uˉ #N&NM&0' ,L  NɔGS+bU|__h`VdO`tRQj ϸ7W'nM{WjD_n/$5K|JWdfSǖ ύf1^~Ί!w{zof# {hvVnՃt# fԉr"wTm&#L>y`XWՋpSmlgO;= 4!Xt`oEU)@磽ℛ}E]~cd`b[;á6CJNkxKw.{'gietYYj.̥6/kJ pcE/33*:XwF-S+d)W ԆG3ڥf*Н;'y]9Ɯ<0uKmޕE d \= 7V4s?3>_] ti@a լ&y9`tfķdzafbrb|pj~Q3d0-mԬʗE|]hNIc?9?ov(O'>}=|=?y~iA fK_K,%Z+JHa4"06E8C7V|5K=+׫=_^CzkCY`H}A} ӕ RGtXqq$)ۏ\uE8y`Xf w>C*hW"cA EN0+gni7eޘ' X5ӎii;~n S 4`pKɕLXaa"Ed:q9w6oT*r9Y`vφz^1  %;iw&T2c9b‘Wͧ? n%aS"Xycz6~huyu>cp~,&D)]2cE/:zzNg>]kLN>^owa GKF277l)$87V2kD\[苓%]iPkP TZ'u^Upbƃԕy`Xz"i 3Jx<g]}պ`V:^$IH*XX)c/MR+mSD.)e l?pi=gəy4й0-L>Ԥ\g>唐 .6'̖5[AE"C=XaΙJ^Nyr[&-OygrsS=Gny<ݳ@Axw<=fw>erz`ꈳ^q;H[sNieO3'Ӥ;Zk "<;mSU8`t=䒂Xa™Lʈ1 XX0:SFkItK8BA5ʶ!#LG\XqcE։2r[\ kM+\L|.17N7O.cM[f\GFzໍHyG[:zL=f[0;>!F|b.jKF5P0 S6&{4ěAQYXe_VV}Ʒx"9:HU?:\qJŶ]b=&F1L]r7by<0,}"Ҝ;mE%ĹHS=E0aodnȩgT)3T}^gᶌiZbUEA%NM14da1i*+(XN+, U&0݁)Á #i.z;#yu*`kl,= vދ=/,ǥ<~b&^  ]q}4Bم2Pw6 3f?s? sΚe l8X0:LRe:s *NYn4g&z"n ؍NLNָKٸ4)^g-邇\skXaS1~EyV"{ME(x=X7u qZC\Q]1s;[6‡goل۝-6nv,Fw3 xsS> {=!kR<'LjR$z4 pf2~`\yށo9Xesf<Z䮫p&S3r?ɥ$w l>r*RT}۴_VbeejޓA2Pg-  kʔ̃SO6'dxir﹛-35/HP`Nn3`3MĿN~dNRCC޾}ofY{Ax%sk=Z՗Sn |ܰ]IV=7VXYEJ753{Yf;܄$.'88y`_텤j玪 0gie;6pJw;mgw;;ӚpF;"cE&|GC>oބ4{Ll'n囱޳=@i@`NH|gЕ8g\haֹ^嵅8y`z5]ՊI`\R.v]n`&O-haQYƌoEY-Xa{)qI%|5XaSwخs  r3Vhn>2)}wȉfCu]qE9Q%YXa[g:-fcqpcEN]6ol~ՉuSM@ܟPd5b0AL_SsC_[+r7E=S!%S+3;q접 0cApK:̫C T3Oc/γj|WZa'1|YKg8SXaڌ8{[A+,.2`Ĥ6.RW1#ZsE3Ƙ'z%(QH%ڊ\SLL*Bza)4{X-݊o|&ܝ4bbix}pfgBjc&m'%҇n6%h |/h>̓oK GS<" ɬ^>%7pY4JCޜX0::5y Q(ԋ9w.~]]xvz1zн Om*KvK80j:ZfG:JgM;benneX%S"ky3d3hw5\p8ܓ"c֌VB8efom m F?6Aƛ"bĂљECiv=ԥ{F˳7%m!g4 SriTMyI{Pj A MӨVʈ3Y#Щ)3fmi;ègtjZC- p?ٍyur+隘+,V%qcALt0݇ WN,*N`lJbe0cES~ f!qAۊ"w)_ =T4[ͶephR^,0$t5$)7vٮܖX,.Ӵt*澦ᳰ$}Muvl3< 7#3jhg[ nuC`5'XjsG«> qb贛go+ʺg >lRl9qbmt];8a ITev0/YVj˚{m߯B[R:%+òz*)I+LN=yIr" cHWpkB dSW aRQ/qb\mJ}Aqn'\H3Tw64rC{TP$L$S*jrT v6+!ldJky[}/g`ha,\g3cE֛Pɥy`H*t9`tf_XmK唖UY 0M3_FPدgghsk\HrH20R]\͹cm*)כ_:JZX0F 3QLJyg4A[3:ȟ@j4Nʼn7MT<05~_DґtXa2ˬߢR9o\'Ag'13=DМanllߛ/\1U9] OoJOyďv?sac\#^*C0q إk-7 ߬j{Ad0I%H`mF*d!Z+F\ޭhDð`ryhxEF,hy#4:iJ9k4" V/1j8y`WSYT&5!o)^c X <'Lj* q`MSN/%ÖT ޺_93p0m6FA gs&+[z80(޴Vequjf4PEdna pv+[<0,3o0 q8ğ!CIun:SAd!Y$/Hv`9T}1ŬT WO}2D#4"&:.Xw0s 2z٠P8`tTZ.}A0cE>J rcA𚮎k7wYvbJWĂљj.&  ݌9Y Bu~mQMu[+&AEi6rw!TL6tW700 KNYGb*y`NҬ>;ɺjed8aލt2oMUޑOe05StuvInv`v, .oIG03VX~3қ?N,%SjAT҈P&΁wU nn`UB@uGQ`@w," m=y<0Mپ(tNZ%YNk _3E Ot>Æt+Ȑ |;In:)Œw'Md!iCus%z`:X0W.24Xc9' >4aeP/'vnW2 ۧ N,:7lES[' K`OnFgk{skSe4!=nV[ǡϪay"w5fh+ >f5qɧ3oCa| մ}␆)f"??U6_#|U M~nϪmq/Ӻ|>_n)|=$P߸Uz qbMهȽ?ޮX"zWR$ 9TX`I%} I?&bA /6/mUtHݹ:4LXvD8Dalqc}F\qcE5)^dz01jrvd8Pȋsݢx+sky`XgAAf0h;E*v8 dqp³bSW D%VA<֏cNp%Sg6,QS2tP#>|BN~֝*lɳ6uK,F .- U,0$>^u2K8`6Z(_2pcE_c0/]r ?Tqq}c!NlB3ƹ76A m t ) tCĥ6 z|ert+i@o@mݯ|-M"18'= 7e!UIbsfW^ A-' ۦԝWP,5PXXˇ(k5] {jh60} ${?vYi^A^ fpD|-B=ki =XVj`^<Lȁœ&WT)a`@:":H3t Ph>pQM) p|p<Σ[&UjEqD'6hJ\.c'7;$k_rd(LR-[O) % ;?I*)LAj6J|Bw[{cl=70oL%ɬA !pOs3q[9 FxtMxߛ0~l02̩4wʦt ҎOldqG]Iʱ|mb2u |}<{}N! :8܇"'3g\j ƦqrY}_-&=٧Rt'Ʌ[0ä9|p)c5yk$0"-)s6=vII\Rܑ+, {UXa&gѐs>>\/l{ǗaMVs 揥¤2)z;{*4!=g+[O2`h B:Gյ…f!k,0$݆|3敉͸ɋ4nt]t <0.U =Xa%xpc)oj"tw4I1KCv 9C]—O 0fˑ.w&V]vqcf&23k`fȩuhIf 0 ͫ.3'Lj>ؖ*QD RCGom:Wz__GfفUܬUzHc/) ukS<0 Mp-"0fjuȈǷPVmmu8y`Wsl2NcE聒cRu&Pd!iŊM7aSѼ4g>*L_i2Fc ӧ3 ܌듬`Fq$?И:Gbk~n.؋컾 fov' x?ӒC |6šs'N2)[NEly/ۊO3:F5A(XaO)h Dda•RfA~${V- -|h40Wl*<0J^Z_fXav5.%:7!҉`Ӱ`$3w98Y66ѺO+x&lIx:mq'x- jq83XM]Hiɮqa OG>MAiXaV)w%FBEf" ݶ >|^F 0CiV\}6jS$XaM"pcYBrӶ,Jdfzi^. sf7+ڻhnS$00 M V=jed3艀E?f͗]_)#w.abO +Ɗ풌f[IXaY$6ނ,Ug~VtGc`xy0] 3Bڢ<;x1 ˋ&2 ^Ě^)P3 G SQQ|fdꐑtE^1 F%|d0C%';tκ~ǖlDwve\[-tvS#Fm@`Xͥwb=ȺkN)mg>KxtkfarK喱ޙĂ1)&@S[AGN);JAv;ndĂɗ"u]Ai"ڷP 2&G6)Z 8Y`HVn6%1t4TlW/7]0KLo}Z=*Ri.NG 8Deɢ3LE;h\;~hn361JY+<-Fgբs8אQv ީ$iEes =CfM"9 m(xmA &T7g.z3N݌LeC)j+`2X`GPek壋r*qĉ\Ӷaԩ\@ ME(,+G9!<vI~fԊ! љYTϸ o*̉+gƺy!-HS݄sUo|v Cu[Ufm^:zm 7$ =߸]v1g~[qi7vgD(}LZ ސ d$}VԆOytr?Pnm,F|2{{ ^=LG K_ڒ7jB1Nc/>RueBLDvcl009j6ɨȈ_ODiTJb6rc%UJy]),o?LHC 2Ί3RWevBjX7`4ފg5"Ҏȉ٠K+t~8I {as.m Mm]iN'ά zeg\ە-a`sGmBoG5H=wfMS++,rnIR3VXd S=ȒXaM5np rS?I2"20ómFlYE(P"fYe C>*MĂb/ ~J6!CDFrkg'j9Q[M />jxL6$f"3L9]* FdžVE= JEc Ө+ȑ <#4;__4¨(nU{2O]'#9t-szM ҽG9}م]d jG;j+M RFoQV3gn1=aX~Ŝ9aNԂNakE`=(VeW@$d+cYn LT?XagU>NpmE^nfSD'8êcA2%,ga @wiaEZ^S0` MTeTPaNLk+)a*ҩ>?B!ڧkN?E޼}P6]l_lu"MwڏCN|)t<'L HVP+,ykaG0@SMIFru&Sf_xoU! A<"rIIn0uyK7>|l& $<}J.*"X\/8anL! ZO 5d;oJN֎5$?3\#A{E7 cݡn{{|OỌ[7y #ü7VX⯵;<0/ 7TF&R{m GD.#G%t>'\Z#άhVrXaM-]U(Ox#X;إz)%CutSeVfq8㾦cvI,'Nld% )LAlZVQz[F"P. xM'#L$"ť[AO7nc3bb{ jեu|_Bu|:[/d|KM\4vEaSm@hU~fl|0w]o8b{aw\!㸿rQ o39LwklkqNVKmɨ<;S4\-B"K% 2=Vl:-;N,Y4&# M],=x*>7=ܪ|77<VDM ?d!N.Nt00b#t3(Ҝ%wKP.Uikr &q趞M_*SG/aF|qޑ 0SnZ"% qZ';e*I"*ڗ6m@D[4nzdkl hKL mgn&jɞbvJ,`c 3hT$AF~Juj*E`gVkkàSͻ3BatM"n5$ v_74F(Jg0¼] LTS҂ l0:W>Vi!٭ɲȘ`e g2 &Xa͋J/i8`tLh;6aݰsy`X| ?.wU+ bu:@O+Bit=@W|apf{*d!QMA3ܲ^Ut!%LۑLLN(&'xZ칭J}XN,F}kȍusp|m}mir:v &'NjzIE[B5*o"KÒ+,jj<-jIN+7Wns63A0)QWj]HBN"ad:99t2btM.{SnSXy49j;d?K#xŒدZ:sy]:CEMLk mH57<;؋cPId(E{ rѓv+/ )XBоagrqün@C䇙q)m ,Ee1cEiX80/_Y. RAܒ nf)/fk)U5jeU@s6$# Ij@Er3%^}K,aHC M+ECb7O!Z9B&EI0¬ N~FSmfjME<܎fBY,`ؼ,jk1cE1tfxհ6۽%WT-,gķ}gʽdor2ܬ\w4򡅖߀^fpr Qi]=X_No!ڜ/>?_2]3ڻ3~Lq0H!-.~ÑDxdQfO~݄3%<ކ ~WQos3s[DY pr@ՙ郓gY*ՙF}r^Ch,M*x~&U6>]OA}rg[;278%cIa*m@j=1YtQٻ9픋:b ; ͑Q\z->'G[]Ӝ3c ?c1K0VsSCPM|.Ebڥ.nִTl"Yfx2|!Fda7Iլ!&b :\I#E\1dF=xa<)di>Iڍ=Ϣ?zʘrCKpV^y O~k݂t+h6]eDN8wm;mpr39$T X ӄ|-$g*b-#~')q[IzS}N&0 NkC/㣂s Qڨ xM_OGE VlKLN#?&~xgFDN.[3 |+J}\gqLRi?\g1KRǙ±fcmo/mˌRXuTF@+RO8aQgUV۹%ӎRSRj쮉/ϋ9S7˽ЧfhGẻV}! ) ,K&=ptAwx/nt)_,'%Kj:^+X\X_O}vXgh.g 0% " 'zn%eɁ>Sz{p)FrT}5JXLv]Q`TV˅iGjzJ;Ozۘ]YW)s*E"$ww"7u]ۑn#q'] Gsw]o >c㘽c(gQ1D ;Vo!)Zl`\ fƒoYKw+n>q[H 1g!o/c׍bX3\k'ܶ X9~@7rt gRiG49-NcR vVO`jЎ'6L~Z 2 fa׹AQOl .wt]̵)wPsiJԩ4eóԧ6jkc &_edSYQOh C iƚf|#9߭:[l[6io;[6{b ޴Ǟ< ೞCo''ggE4*yLO;= Vv(91q5NO nSLHATYǮ\돶W*ij3dxmϔ4;dSr0( T!͔:cL0.osA^ӿޒ(3b>ݕmiJ*#tkև;KUݱDWXL0.}k8[Ir].p뭚3!E,aE`t9(v'ʝC~5,0$3j&=MLTONQ7I.F6U `TOsb#F\T뾆G.F馄2Չٸ>0[00óeHT[.@u2$¿!8haN)cg8y`_jDRb\j3: g}ESR$U+̹U#*0cEvM=# ID3'k?Tv2(:t-̝._Sy؜X0:6kO9y`Gs:X-& fKdDN<0,&]R#ٛ&B5Y"6-(In:d<ݐ OdA2jyOۇ\I|nd#&,g86e"<ׄ93<0'm֝RhzZU8a*U ޥӞ)@ OzÅ>JĽ $\&=kPWRKӻYhY\:9<ou]eè wz+rn`ؾ)ƺkehqcYSfZJmQ"NdO^UI&sǜL{d6*)AYgԍ*I :X0gIԂA%Xj[)8rK_?2ɥbPph$vpr+2;+"jgmlOi_!0 Vnk3juCkOVMIaO8\`BqXgĂљߜA1kM;u$LJ+, x<E?aJS2,k7Y`Hl*F*:<VvϞ "05v);_iHz-&ՙkE9sJj@60& ¤ '8y`XL|P'EMfpy.ͦ"lk,ң ;;ONĂ).bS?H^')M]~+ ;Gɦ|ac+ɳgn& wu0JxWq?g^ > AZ\Vnȳɔȧ.Or4Ҷ+ gȮMLҩkqF$.r*;IӮnӁ}V^;7Mi r";{Rn3nl3V%7vI7VXYE 3uK>wy`X2K/1k#ϷoU6ςDڲ("o.tcSQ' IL$kM%S}4ԧuSl $Lj4*bp<Ï*ܙ vL(/.+S(4nQF\эeEMDk䁙?^T,%{BGhMbgDސsP?AJ}OUxKr R)uXi̍&È}_zks@U̍u1i+3NtN/ot t 5cY;*ʡfJu\0<EYŒ.$Dd/O[v=R'o.BFz<0,IRr<fSvSyDnV"-7Q0q0d8GϺY 3-|5MS;<;)eP{9Y3’`AgÌ/Z(6MJ9`tډC-<0,T6{g~fc~F+4L|m3,T"EdrSZw,{V:i̶I纟2-PNh+7T)R\ 2CN`rT;y$8ÁĖwTƠ m{?] sci8ђ"ۿzm EҾ0(L뷎X3^ :jmûeMx7E0>ݺbyoD LS=O;= PL`Ň5Rx$6̻nr`ULfΞ7$ Li>8ٟO>ĂQS/ҭRnȾ0 JuFwZ:QbUmB+Spnd20a<>~z&e*_$6#/+p)g!5&K^S菏dgj0xSXaSN'Li-q l" 2G,H#cE>2YY`&LL,X0:f08 "Ȼ.h~%3cksP3oVᒗ1"Zf6ЩuJ?5Rn9ΦT' \0RB1u8jd!iSE!>g1[;|6Ҋn2;fWU/yf&xrXwPPﴰSϙo{ŒX0:6Ăyb3[R+,N ޵ȳb:r~ǖkwDip' (#߁`Pm/`7R C+LUUR506'3_rsRȩRɉ3ZEJ%R97VXnJsK;e`m ZO+(KbEW;= - ,=t++,MҤȹ`l3lnLނ{w2;hIڵepSjU:CzD"o]\侢"w({3Sf}mF5w!8Qd0O+036Uʹo{,KsJәt "0sKItmMza:csiN2?d;醼CPx%+ֈ|`& Yk>/35v5X?zj`qzE*ӈHv v{ 0OL:p,# ټ8*+L.TоD %hAQ f<1 ;^5*|!{ 2cG*ݢ0I'F+K|-gsWX0*;/*x&" rT8y`]Y,]L #>jI+7VX.Ѵ*p/l sD@(}{1cE@T2RI "~Lвx3TL`/uVBx&D|߶MNRnTLYS iA+l8Lj+ ZUf]zD~4ӇҢM+C")ۂd/2=Vs%S$+,IWOlMθeךjl&fdN$b퇣YeJ/}M <6]x}|wvrgCj7hwn/V9:&SThy&Y3߫GߴenLxNf0fC3VSI@9y`kIM\un0q)R?=?kCnK8veCt!Gr406 ֐"xM\[mx[v;}/~36*RX30|6!6yRf(=ɌK5 ^sc I[: uf`)t:咖„fvI,9Y`HM h3 V*B=jױ4&SS&a7ok ,q 6K?"TeSeOAw`l3^4SiF_)y&)Zm/R53VX.,cUw1`en%*Kw`B0M ك YN,cpb̿ҹ2&km7<0,&@ng6Iўgt3N4woLyT]P+,1!˩΍K-C6 "w,r#<0L},j%0cEn'tA헐-:Wi-IY{î덭nĂ1*@+LaEBڂ080(>.y>VR5TDn{WtC2ˤ!a&KZb ט砆&Չ}3A.{+CvF{(T:,ٯv~go{eב3Q{.x(J"Uh5owg0 Ltjϭ}vz'#(FRIe*IڹO߂x1NuӫyM0>s}8B,HcA1F4a.sr8ؙ^I 71-1Żgcwm!ye<4"849pi/>s [F>'jTU'Ʃ7gK41Wr0[\TR=&},a{;G#X,~[~`阉*`%,=1^qR̯c,֥/ Rd"U@\$9+ ؙ"kd-t/xIlE;&c𪁈H7=ڗAY,6F?oi%cB6=@閹,2C#Ǧq_RoOs"b]IİRhc>T0dے b=x#YL.H\;$ErTh*^"[p d>{QT2*F=!,ȓ'/"h"E_[?4_V]Tz+o6†L=PrPS;dԀ@bUo˜=JE (cr;M8a ox̦zc޺@']ڝka(o."vI$J̚cX!1!Gӂ YsO(9^Qwt(btIqmm"+}A&״d6x5fV; !Pt^J o]ɛ)=AAF˜ JQ,"9&, obJw:n"3(ErKCo˸BQq7T{b@l|Sr"tGԨeu(sO$ Ar+dc>CAKƒ{:ڼƠE/OCɭF+rZF@@f+.JfV3U;SNh^0P~PIz uۺك2&G1qf3{Q$gr[I>"IzCzy=l1Zpy *k^1c {՛$u\N\GUQCq[LT'h8-@>5`fȱQov+=*<{TupwL ̋T<9!OVuQ1%YF %Ǻ%"j6|+l{P`q(TL[D+ d 2%LWS J?ٱ'pC&3q_)i֭+2uF$"/*D)MQȑkɘ V= W!%^|P'%c ,лpC K& [dLLtf!ȳ~R=珬Gr)ǐ 9j/=_aQG!eb}0~ȑdH: IL_t\VTΦ^,e>Ș$Bda+Q_/dL"7D`ApWr-esJhk#DkޅCK>j_{P'G--2`_vjL"GAj{(/%ٛ1,?SHx!d:&-r %o#R,5<%rR2b!ϙrz!P ^F. qc+;Bp"frPa?1<Ն™gA爸ɭR(X,Cx:8l@!tT QqY9D>l0Կz}9gu&\񪓆EIKFOW0 B6-t&9aM?aC@N6!r=줭m 1YV-.`!&ӃgGb[v.m +r̥$Ss~OF#u()!%%^M_3@]f" 񋉑gKhkTcCfӺa%<)(mzW{%2z"F'B=f5&( TxuZ1Ke8J8JMn/U;D +ru&zi.;(,frܟ7fro)Yp7HA{$H+tSd{2D."^|tJ,I E  ;[ @GH~kL~^j%## ]gTu!BXVcN#r^u׌Da%,8'uSBbJfY/jTm͗Aa;HS#cİY^dyL' cB+Vr;uI+BT5|WŒ#P3+}1^n$e N11j+͔tw YplLjV +9pdRi(B=|zm0͙. ,h3= 9ru OeF1EL"d\AwvCqȞF'L]*%("frZ2zuCԣg1)K+̰_PKItOL8H`%,aqGd-BM(LG]<.`%\,Ur#:wQDh;Tq"KG\޼rfO& /d(ivX.|! gVkЎeט2C{L&HIV!Z-̲s.8c9 H,OT򀡒Rhվȅ7v1!臮133Cˌ:d׉VJ#VŵUxD7Zx +liN`!VϲiўapC"GPJfפ7$Zg swdx!$͟vx-tƲy|#Wa1 -[7Dr&:Xp_ ߇%JnaNj,'-?92W" AY.轘4+9Ґo0dc2Ǽ{a~bKF?!X`%d2Nfbf#$$sOФT2W笊a'(`yO{r<">:.A1gD=z9͠A`ac=9a! v//Mf؍9"1aV2y_m 6 QÖclS'"J(XqIQXBvB%$B3R̵% f Ԙ4 "0gH!*Op$߻j>cE"K'Ia,90[~[rb-9>:Αq2jV{pȡlX`X,{1K!P qq2KBXN,%/`%.Qm_C P1L7NPlxS5}|2/WEw̻`zc=yOI-jvc#4i>f&y&MCR1); bl#-=G;<䂉\R@"'7['L6S{c,Y,ŘEr2!Ǭ^/+0ds[E׀BKɐy7 Y$b>l<!uH6^ΰOB<"BrKt3 w#S)0/g+weڙa7xڽ>Y:A/ٛCv`ENfxK־?7DD=L+ڑrO؈1)WXavn_cٺtOUQ{^Akwy`?%&Z'Zĝe<:X!#~|tr,?c@%c /Zr,'֑Dkh-:3$O)0a#4{?Qp։JfVnJtf89W,gd9-!NYE:NhlȄ3P{5Nb(Q٘h0~nd:m4Qw91o3vWx!T mYA!@C-'u# hf<%,^}g[+˝͞>Rb!tA,rCos-r eL.䀾d | ǰٗTW:Sҗ2e+3"rd`5 Xҵ&F/=Y <厏B'&Nζe+33eD"7}s/XVr8"1kQ!A1~q~0#r!ϥ^&zO+?? C+޲u REe27?HW卙I;JfjV֢scumm{d|l6)ȎHĉCKۉs(1B,hr[zyv0ɢޮ u&M̂b!.;C%BxY$,E1:$8ɭ"&G@ɂՕ~ʔ)ųǰY^( ?ШUO@Y.>K5px!G%`[7ʕZ1eWLT-DBdi_xb\~Li|;vtӕLńM?o/̵j>MQYL"d6=1u;1ҙ,GN})gO 9,S"Ue.a~4CUi$>2n+8M,(rW4чBOvtQnj65NpK.mzXD nkC579NxQWX+wC:.I&)N`*&Qr$F7 N̼g{eS}w)wfjO& KEdHn Hzľ7\Ҕa 'j8kx"Dr\6==1vu=Cyp {82t0 b&TOɞڴWs֘0"aV uoCچAX|T6xCc^Nbl7GU JfYzU-oq:XpUD7y{" vx1dOf 7rxT# q8"BrKdŪoSg ꬽc.əHaL& G֡r̆V}iQW%Nn7\uݍ2 ?Iyda,bLJg_%0~'ӾR/2`vB)RTH%dJclH BaS^SY:X?ΛKs4U &Lr#-c1)l?(z,+9N2Na11d3b10V2Ȩ@9r ㍗ۺYzrp,,hr|ڛrC$`B;BXOnNVrTلC9vm!GwfCIPDzOMvjjW%tVm$e~CȘOɊ$enHO@{uF"GMCň {3 9nQ Y,Ĩcf'& rL`❜:u#l1[آ`%rut-ϝ@^L7RPO=<.*26sɤ-lCaN~&o[o!#3'19R"K'bAH2C]dC4"X! d|-tx .9>tr,R!L..X 1cX,Oǁ})VrcEuEغ!Vgnu@YgTƤ/]-b밾,Rk0cƚjx]H[Dk$̲z sC̫oqܩꀱE,vOY nZ Sk[h^LU=|C[՛H3 4 Jf9"R7uXY0QN8"Y,o嵷`C;ys[C!eVmL,ccl_#}6D؂F&( Cz1Jkڊ|#ǰ:֌'A{;cB'fB,x!drd;P-rX ?qux90A۫eJdeZ[t,{2 MWFƜfV'h1yzLc!)LKtzo;yr|I¬.}(w=GtϝK2NGT͢z2B%MO'ǧ1pDs*+e1/[k c@YR1VH~b^^W_-rP-+ͱej(zF﷎F͚y*ݺv"kiv^ D=yCK9ۼ̀sC@J;8İC&sj؛އT$S<_y}J?`p}KP&BrPbs,"wr'. ^ ' ol13&nq6N3i{w~Nj9}Wm*[kHӣ˨UCA_ޮb`0QLzLM\d3l1 Vg`2I%Mm4:_D5&rLSb"lD*8ĝb1d'ycrpŰCRޑ Y$ '6@4&f,1$<\DRXusqX\;#A"%M*(=H'5do& OۚԈ9VDȂ uD6)xjX#-rSU6 9Dga'`%{r<C|ub;9"&bK1rxS6F!u~Gh[`ZR:] /mۃ9yrcR|wU"̀3sVzOSEJcmu +e)Z kЛKWÑv7J^c3v~be{Ь%vr7ef=ubWj=gkT܂!G+15B8bפNm*ÈE[!ſ>g c,޶_?7DXiUi^$aY'.#MϬ_R\i{bXYZgtJBX! d:#!GMH,-$̰R@.j,r|Y9Ĝ|9!ZQ{Vέ%m6@=!,"i+F ,bY!G'MYG0TrO2~~Q: p6ĺ 䞎@!kr^R,CmNr&d/?է|/{bVvGeL=AKrÝ/ӟ??*Zߟ~Vo5M5VtTtwY6)t`* )k) fDF^O?T>2xGg.Kg-1sMCaDrw$MHn/$@s)'? %T)~'.Omvt3*S+KOI~*'#2N~VOSL9.g1/(:](. 6 .Kہ^ʣaZiH);(g\׃֊N몕<~//$7\ ΠJ=z6n 0Uu)w3]EhU;'Zݿ9iq㥪k#хL}qa񓷦@z݂^w}VchTP !M9?.[m#U  9SJ{Wbmny w!@Fȑֶ/ʹ+7K7'!Ո2Pjju涪(K6 [v}d,EƕF =R[M#7Xp߸MvĶ ,iA$iګh^C9KT'2~gQm(v.! _!?MZC(_zíYclI9028)#,1*]0ә.yQ *`=4$9x>,"iBWJ\Ѻ3;U{"Q{;8ct멏%t;eN7}΅ᓅ X{? vYZR| h|~:!?va\~+ةd-2N' \F}ƥBko=O˜l14Fm:gD7' 'N0^r޺ F>x6ފRSB#eP DOB_~vٿ!dHc&U h4v4:2$xhDݓ%lWxɌ ()rkk]!WBEINd BəqjD215IjCZ>H W]?WwK!~A,Q;2"0L!o%[XnRqd!C"r֠)"C ->gf݂Y)/sX{ZmX-3ǚZ"ʃ!&>\RZ es}k3W=$QNb8ł,>| C$gI>sYʅqbcWY]fBgxڴjkٸ&a4I92AdC~!O|+rØT0v\[DrU]{ӫVLiwu2{N}:hq]!SB "z# (."yȆ. v{%.m[}w>mþm >LuuN4oS {$"< Ԡ,-"X9dFŠOƠ rPj7|̫9!쓅8&`nYpX皛wc!Eڍaّ# y nJG4$5Vz>[]MMgrjW2 Y2agFݵMckk#f)R=e#v I* qt+d /o=/Pw))h! 꼇s!rX:Ԩ@"@#.nn 1skҫd!jI;vLpBǘfs)9hkdiIպIڴ麜N|^mӗsMU~MiPˇG4ekْc] ,7^_ޒ`6DdG}g OJƅɸ9MI!ç@[ropAt:ҞF $̈́ '226/:p))ÃJ!* awlx''Gԓ^; QCW,eGn9{F8!ʣEfٺú}ƻYA`;\7L'G(ad6P$K#xCP=ō7);}Gb"Qmfe) DCxwj bxEX|k!sQp9J0ʾvuTj٣NpQ mYʋ+.K~|2LD2{TO5_D!0KJ>mz "Q1?BKDrX^wބ"YPiFw9׮mp?߿>>N[xuxmJjˏ޼n?Μ=Nx;P84GF0n-?FHn9d.DrPF&?;@#oiz`Pl|pBG/䘿uAHtszeBT^!fhR'gWz^lJpG=AH8رo> <"Yrxܝ"VXElk6izezrWUVP-|p)ѡ dak19H"5a#ɌCVM[Y ^+9r ̯9xBʢ\QU"bV#?A -=ZZ KAE0ɌzO'w2pBǂ3~~0'8t-_ɽckY8S7iBf=5{ ,cc;̢oBGA P8X5dWnHːӡRp|r_'}r`s~qs96͊: Jw C$>{3,|ރKKGq!@D6EiV}t@oal Zմ)"; sS0k_Q%Op|%GɍBĐHfTy^|l` gN!9#<7D:& c:!MH#w-|j"ѱVh ; Q Ɍ"[㹽*y"#_ h|o?WmB* XDZ>8B@$3:A`޺fVWcEM(mJɇ̻x\n`ϋ܄@H>s*zj 941ma` G' uB[܎r.*SS}L)9 *!>Y`Â% 2N{B>E fyt H$Aّ\q |dXArM 3x_CдmU&jݽܠTT [tڤ˘#WGfk"E{Cd_鵱/")gD4>rx6h|dstHGfWPsVBMA$r$a626,ʹyN̵jtȑ{~(ju{C"6fߺ/f%<<+9f wvGdhl# ځ?f>ۖ~C|$fzp*wrԥGfQ~fJ@ wGd峷s[ǡEAA#K_]?#(ZJ|9;TmẎϞM<]'Qͱjπn`! S[ p1{qmxN| a3HG3"AlNpzk+٧/Hw]jޯ7ErD`[[y.|@i= O$ "بl{p6|vH dRa82sg!˨տ|[}qL/o~_~]]OUկv^|7?jGyᲿA՗,7P殟oWDkݜ4߿{^-v?(q(>#/_Eo׾-vm]hL_@&?T?.FկTS|kҏ٣_R/':ӿ}~֡+\􇟾_K.oY_>Oe~˷/?e9_TS#8?.G_sk^'!}~>ft}*P"IN"ONL 6֍mPK>&PBcWՑUm]37^1~]_?C 刺/`<9;zJ@y%k>Z1-`n»Ec4t/Muڀ'M۟XaM!`"%jܖHY\.YKdJJ~R*!l\U}׬F夑)l O4yn0_.XrttJMXxM׀ ^uarx+8M㭅jUMI ]<P0ؖM55߭*[c?{|- 3}4e>7 oszDLBr-z-[}5LMxuc<;W5&8g`<ohG8vpKuZ>v6݃wO4},C)]xᖏ0H7 Q`^xJt8D8BpGu[>rxM Nr1V3|\)iok|- /#a0Z:FKCr]a4t-:@a<Eءh9a4t-:儢la4@020=x}F0_B0^1-+ O\+% n[ARUv ë x{kuY8s8+ p X}tҽ6Z*UC_{ N]y  ܊ BdTK`D#+Vu3g`VE ^~jΗP5''MXͽ[-Y+ ,j8 \6g^;\1n /kևRưEN X6%W Qf檟"xEd̚G%|U fM 3ou t5 /y)0XոH`Y;-. P,b̳T›hd2Z@p<:)tV H,՘ sL͹8I/brђ롩{l +E fѤȫR'yU@lUq5$ L&FK]pE^e\gѰI[+}kR=؞#!qh+eZd<+!ѲUŪBBR׬.+' vyRI䍫Bp0^evgV'xI) YXW]PC=j*e.F,W€x*ip@h:5 OnzhgEjup9ӟ:E`d!U}?TV]X Ӡ.,k>8^݃Րs4h)4 9B F(4GTsDC igV9L~,\4 ˜C˜js2wJv[9/sz%EKqUzXJq^kje AFvTah hpj6,ҴCFK\\ 9.GCkDP(5hI3HLTIG,>Imh4x_F˩YxӬ³nC]=6B&zrd\CO/D?];ltxZ(rOˁOKM儢lii7tt:G ᆎpCGx@Gx#<0ZZ9`@a0Zj:E-r rMf;6Z"s2xu-%MSXJ`g96B|F[r[h )`ݪs ւr/ g˪q-;iZ;FI_<`dYΫs?S+c3v>g~e .agk5vmv`;xKȀ~J5f*9e{Va@Q di9rL FKHs Љ4ʪW%U oH-&p}fJ}ZY$q0H7}^ 'Lj6ޡV4FHtxZtxZ:<-:<- FˑvxBrtxZ:<-:<- OˁOKC@rB0Z:FKCrhi0Z :@a0Z:Ң;t-:@R{-o{ђkZ4a FK5S![kR0|pBz01 J5Z)1W"0PZ+.KR.Cl0]){/^, pY0VK#tyP\W$Biuu6paXM[^Ywz8V4\:ljEWŸ^>bMތ@GC7e^+:XW[ʹ 5Y?J0Ӡm-s.WC/P5Z6Spe`ֺ~\탓mH!k ęUפЂRAEg6@s 4n\K!2N/@QWBDӀNBLPQW+(m;BB]Bٹ*h)i &Y^o, z X*@)kW*Tbc4z^]*ZaF˚պ`uRVUB=,E)*juZ^jE' jhnv&a!V4h)TȂCb9Sʘ9ldRY[#p) '@.o2&+-zCnmj\5]愞٠{e& >umZv؅eé]x\օuDړ#Im#U$ܶIvPs$wT4n$j5jkEz+C9eNe2W%Ud V kEzZ6V4 #AS[] bVtFPy2H9R(T]r6` [/za:<- OҢ;txZtxZ:<-:5EGx#<|#<>ni't::@a<Eءh9a4ro-hEh:k׊hFKzZ+ڦhn7t :@a0Z:Ң;UjEc򙵢[nkE[z4%jEct-AZSkEJE:tX+zFRFkE ҅Th#UjEO(JCkE-kERAJjEcr@XyP[m?,hmB xoeU{v)Z.]*kEc4g~gt'}j"G TҢ 1Mx ^w#Nz͗o9sfOyB|8_G;t&ƕȓ;߰I>c߿%|ztZdǏ/_tǵn>o͗VK?|\|~(Sk?OsN_{=pXm1F&Ϝ'fW,,nu2iC l ] f4.ne-:' gq\d.U)**u֙ x ż| E[TU}׬F夑)l O4yn0_9z]Zś>\ ` 5 b^6xyׅE&6RTGW5=&m&v{T@a> ZT|b[6,`~pl-CH6.8ha]>Z2F[!0zI0ۿu|ކ-x'XyCv#V+?+o舕舕7tt:bXy"БsxbHiH9Б+?.bt- Fˁh9a4t-;z%^JՇe):n T8x3cG*p3૤6Vg8 #x#R blq.[Qי,|x̓gR!cԤ6Mw}М0^]L܋n <8ow5mFzD@z"J1f-Qh4\ x3 ЭѲ|<ةǍg8y`hYA(T3Fw=8Bq x^h! ԺNjd=n53 #? r¹5Z6{Ж iqٺ x@PwCf97ZWqϤ^ߊn ɞV$|  #l7׸JmzI`xϼXl=+ɵ'pTwy. XapXch Ŷ>`34-EG"W{2mFY e !f 3QƇc4X\V-0g=g!Zsnj0_n̊(=-hx<p Z`xiY(Oۜ"w'*HydUkWsd$H <[ݥF|5 6&H@WG05G$!s0 = ', ._LZ|2g)>U! zzog4  3jjUkj`M-\6` {m"vERFOk7-n^% {[d2HPђf؛g4xZ>Ŧ6-G [~ov6p%r`rؓ@?{%y'ȧRG;^Ai zfp 8-EuڢS[M8hgk㨀k]Yor|#[pμt7`(p-5Z@Ax4d pbbn :{ZkG()ZQ@XW߸NT׉ֵ9e]tE&Il.O7txEGNKCGNˁ9- 9-:rZ:rZeNK)Sm;Mx-Rsnjh=ϔ^?3'S Y Lv9-](`:Gr&:?g ,Y[9- iNiW&f:}}eGoCIe.`<Wo~ETK]x"%9.-'>xi0Ɇouۖ߸E[U-J,K"tKքxh># J+^`# ҍxWC MwQH4#bl=xB[t- Fˁh9a4t-G JƂ>F/-ypqFVyc(YP$,GMbOx pK]\6QHX^'*\F8mVl˝uu%nvܭ|xe@⡞y%p畛E "XX=)1Αdv|>t_$3^mWemngC}AS'-+p0汁x`%oI\C9g! Eؿ-sDvμp!)" ;q ~'|0K{EGw6O }Fi v4w?ʓKhbagȡFK '92 ߂k 4w0`prcwgbF*0u pP!7o~hٶoP>B$. v#`:%wq_fa*ࠒ :7wx:> @x@9Ta9- 8KxӜ̅]iu+N tև6o 0\ތ5ۗ- ӅV L) pecO:|oÁ9۳p 9ZV,|7o+;ӲvM㹦_Ʒ!4SY>iAFZ'4p$ռ-/s&-uìnShsdT]%}Lƾ.Ey̡ S37߉$ǻ܃ۜu lلĠ{| -!-0ŧSˍK-0hb Њlʮp,}[jEClX+zBѲ M~))tŰ@r-z~ůBk-CZ6~ 䡀oD)yx6%I PZ&2@^+ʱցkVl Cvyhnl8y TLu @k< 0orɜS)koƌN TGĦ۴c2OC9Xۻ#!K³eN?V ,rMUSgvz;_Ntaf^saL ;RP]ɂ'guN?<-:q..;-6GH4UU"Ʉy3ۀM !7a{1Z~\b9} L+܇lU,& OC8b6+-a?`u[{Yc/s cp1 ( bfup •][]x 8`h֖Ip8 <:@}ɑ?ӲyXaN?;^t|ųs=-!DomN>#mDunznj%5=pwse5?,܌; Є}_3Zc"nO{@x5,׊\CjOԊB6 fxT>&tԸLAGRԑCa]8Eu5\8u'QE[{ pKGx#<|##@GNKCGNˎ=𔎜9- 9-'1Wm/_+Ax?jEc=R O=#?ՊҴ͵RnUmal:nͺ׊hGd$֊^~䂜jEcHP+Պ~鵢RѧԊoFϨ=kԊh^^~Zm_CNkR@Giڌ<n(cS̀!Q'bFK{ ha4txZtxZ:<-G h9|xZ?6eG@r{<-=q-[h9a4t-:es-RJMVR#9 I_ʋ9ee1墪\7vAyQWIXf ۏlpe-[HbOkV3"g,ũeRvzFBө8sB2%u~3RgqpCᵢT"xYJ3y3ZɳB2v_CAYmdM B&Gx`jvqx =C-Ԑ{ å x; 8`: ۧWj/exHB>LNt4^ѲuZ( p}!KOpݝGyӓP=x>a{Ň; pH e~` ಡ&^珄 IHů4M0`(=-}(?>ÃʱQ n考*tɄlE :EIxOOAgcEXOɇwрv{qBY8NL,>yfi  axZ@4p8 i?5-EۿVKc ūОh}C0\R Y0%oK*h+JzwXeQh|Wa]0JQwopk(dC0u>\8шy kѦ€Wqa切y$c@\%b YMJ&T@ZM.ںj*]3V+"9]V7CBI RrR nwhR]PYL ➖ jYVI`4j9ty`tN0)fIm LL*6޺gGMDѲ?Tʸ UHf-cc,$j‚J/#V|$`ZΌ-w}; Vk^CIj%5PC׬M\#P k݅ۮЅvs. k' @zas #ȓpNO2.sreNvEIR*~zo$vAњ'GclA^hI;|2ty<_$8<1{HD肂xZ>1>>s/P㼨qS P+zw9 <^wݱaz{x Gl<0bcbH̲e)V#H"Ӳ==#:ls$ׄLp\ĸfDrZ<0V4\k[9-9kE~mxx Պ0Z)`xšk֊0ZNi X+zA(ujEOhn|Z lV4lw`ԊN@U%t׫* ?4g~gt'ާT& r7၀פ{]8W7_g}$?KgB|8_G}k~?m9>}ߝ~/?\TO/_OLO5L~J?ʌ/?t?:ouοz=5_~ӏ_Ϣ(>,տReZ`2+'OH]SJn@K_wSζYIvdEOId㘄{uukرuzv2 ޷s4wJfG%û;q7\'NZ(ywlGӷO/?_~_~O?$,O_???^~Xo]+C}Rv?2"i??Yd& ߨo̒[7} /K7LiR_")s05f2l5zW۴)ڟ{kzT?ZTON?( T~Lm9,P UZڑTKwtP˕M.+lz O>eIt%-L4Rp)ԤǽwΨ "L 7aF43]ŤJ3W0L_^ ʽP&Js= 2 s\+}eW1r:餺Z+7WfYOlK-nA!_Qa]BMhjP鵝V #u&|{TLdz͆+pIR<6Iw-&OLתh(=Cf[o TPW[ s9+*{AI{{**3OV{sHTƽJ i]T5Fkjz:\Y QF mZYK-W `UR!Kfaާڬz6/*5mcG`oV?btXݰ6+25 RzXl*WP*ol2gj ^-R[~7ƁѾ\Unõ6n;ngJ7A8 J$ ڽNpHTYf&%lu^Q1wrB+$tjɅ}Vj=RXژet7Vllu:^´)_Ybۮtd(LHYh+"-@m2%2WQtV)ݲI{Us2w b,SjIh_6%[T0K&AU#א!QPi. *FM޻u'F*W|iZR٣ bz!YPؚqqGiյJguE"6_*_&qHܸVST"6S6 7傱-s&mq9$acƐK{N7Z.9'%wyC|iK*_U8$ j[CtGEAA`lP^`zأH0nW ۺ~I?˲LIoHaZ/c5~sPew|wչ?o~qR=,m@f>ƤgU'#q2B_ N2eH&ZLԶ+vfڗfԁ+s^~i<7#-*bh/^`%B 4'Sa7jѯJ.b:ΘyibjIOe/mש:+ vUVLxi\ۅJUZ4"_&tj۱D0v>dWCn2hWnfŮWLO+MH藻É0+?S훎z4 c*D ?d$EDxi$RU00DcY?ItX$L.Th69zY,Tcx0T3>gI"gl5kf]αYgz"v*)x2ZVX-]7SsKBuE흋{QqJ.N$"/疂gXSQ[8Hƀ-?dIk T1lAWXJ Ak#U6IɌ1=j;[ۉW1lv-t}N\K}4'V~by:RK8HJ9 10sEMɵ ~b)?i4z7rX`~bɒTF 43}e[IdFj<}2#W2`X,=2qÞ"㹓-C3dx~6"M6sDc|;M8&ꮓ1+MdjQx" @Y2 `X,Zɹ,U*f}6`%<)NJe9eey驩:[2&,嘗HZ))X!5;3f=kEs:& Hy6#r_*X/0UAQ@]Pka庹9";ڋ`%\i`-=0P[,÷[~b,q;yEL)wI^L( ~r3vzE"TI8!I- +2^4c,|#Tk-Tځ̌&$ZcX'2U0?ZgA}`%vafoSY,g=!f:D. gghrtDcgnʠ(,=['@&z.cH Q\vpMKXSkKV2˥wJeyZ 0YE~O#%&xkN)r&ЎTɍUxj7{f*"rțl>^c°YA}&ERYJNgYP_6,:1d͌}|P I؇r!X,nW#P K ݡLv(l,EiAAɭV~&ڧ~gZ%HxI#6(i0ARۃ%ލO&cR'Pyʢ.DQyh!'E4(X,Dcy-tr@`*>ɤrLdꔸ#a,Uo3ٺ@$3 DDImLo> 4g1AbX,>o򝭭3Tl/*ؾ@WܙD Ta B]efRl䘙lx{H=1I̜ m/eJ;#26= <! vL ]8SF:`K%߻c#-t[v@ ?DN=NJf9Ѽ U̿ƾZJ$%&Nro i>DM+¥0~bQ%V*<~ Y:76HJ +ǝ 0;TdWپuU)1Q[cɱ*\/%ꅸ $Y,қrVwɺܩWdIׅa%,:[LG;V*"=ΈdA?L])1P+9V*e{h* '>4yv#G(+Kߑ{)[ԕLBy[%O H>T[d1O~ba732ۮ׊ _kp-&>}R^\+bm^aP&x-/-tvK8vd=X87x bERx=1{YqjOL&A^"EMT??5jVě=ƽR2*YSࢮ,M2BUJ!j/ Um+>`Dv%7TJ&31])dỳ*r,:] d(OM8PjÑ$rB^Xh5 G'M/(wޥ '6R]thuXcoBa Tv9!U8SZ'4m K;;dL<&){%* t ƼBGƠhZ|jZ#7kf-t}.{\vl&rc{_&+:M%LmܳskW;tW%t cL^6\j5K!o;<֐ V s/Υ, ~fMQd%7>7al#ƪՀttB:wTü^,MҚ<' FPeZKL'GV2b6TDK9ʒaYm[d9'Nkטqm"sV8oHY,MWA)-tb_gclm3n;Xws"s-`T)R#d/Fvl~ݗ$&`y:z;b;Y,= B+E<  en?\=|*7nL6"SЃ}͜'jaŒ{UR`X,23ϋ)RYpO6}H3<"'2@e>w3Lk|ͦf3\A$HmǨ5VZXQ%iNu"PRNQa,I:PP:nmfUHk.Z;JfOXԊ1Ëh%`%]=AB?~PK2gHDJ)iq$ HgQ p+tR4N0~bk+`Tm{>c5换 CAڊ%>P %a/-tdѾǯtƯc3rmT156lEg"tFL9c0cژ2yOI-Ae;Njd.;])oU1kb­Ambf?T6ٸxa%ق#ZS#*/tĝmZ~b^OI+2t77! q"kQ(JvPnK0^"Y8Yܧ Y:׊sS7 N4Lm-P#XƳrbX,>_͓e.,#7,KRKTc>@01/"'+[%d%a*1{sEM9NCى U(Xr0[G5Դ)~YQ.SG5K#6":8܄<Mx5 ȍ uU~ d1U{_ɾ0~bISY:9U,S?B0^"*կ"KGxݭ?Td#~g柍͚蹙`R6V Jtg:$7PL&>پxҾDeۛ^ӿ{57h,&[X#ΪϪ,74-;iwX+;kxBVbͷ\^zke=]kc:ܧݽ!E8)ɦHfYʜ:@-^'/g2U'-vDZʱ0r1q^Jm]Kꊙ2 1w31h m1ԃ6^RxglwcxЉ HW~EG\vk?}:j1x'_&oP&' E=uԭ67TN."HQZjQȾrEwpτ{\ާN14/D # 7,zLY0YPEZ&޾o̲2&Y,eU}7MIbŰY n1~ba| ڹ,I' +唵7y5ȶ97]ٵVL͹bWڧ1#u)P\:-P*2+ZT"t㋵y[;")v X,g} ,?d^+TCXl̍v#E"TK}bŒ{uF7 &'3?f'_ۉi?5lWԓ^C+׉c..[dOlUצTclSIGg5}{ZڸF}>ya 1cEͱ"4m$($HJ`֗xow&$]yX ݻ^hKagmWQ;^cv點gִsVs5wO\( "3q>B,OaN>K4^ |#]y^")1dsW5I֏>V蜕̲RQF>T5}QƕG阰mV=1R+-X1cX,1~bVݧqdKB&j2 krCN& H36&}a@Yν:N0~beT=Jf9Qi0T2gS~b)2՞ I/dH㔐V'U:Ӓ/pȋCK>neEE(bo*8s&"4"Dr[HXF.U,%䒗b'M[w"l{8OYQ_Q)V"˙SfrWs(fJĴW-Wz͓{{1~baK+ћ')l#iCBN=mY1^")@e"K&CBN[9\aR:^%5Ra+{x.uD"K',j@( Y$ŧ w\ޱyhBwiHSQ[*B`7.]XލA۫uCآJGA3GW7uڰ5/smE 6' PER.cǰYν;V0d'U_A'A!%WxjPL"OMu;M Պadow4bPER0StȲکa~KJJ$, 8h͛(%LSxDTFՌgw,LQ%ӥ=i0'DqL#lA dm{2EB.M<Ʉzhm3:C&ƟNȀRQ,RQim5ިVD8TɫL+dd< Xy2T%w0秢pv\" vAHn iQ<#P O\A!PoHƴOBRӡqܗ+3gëXb&7=F`R.ؐ4CflмPjUN3rku-'VS]ҙ(#-4SpS&*x7E6}.Zk0T*RgxnC_HCNՒX-MjΩ'xXHܿgOGB.C6[vB&6TkTz(\ߜTHEU%)(LjĿ^ X igDP2֗zsXdq~3a)`ڜ)88 _D;) :nWd٤>N}tȲ}+o̚3Iߦ暙jm~m'V#mٴf=|+t Em"2D#P۝$5%$ c&hΥu.w={վ3z^= 9dnqǗIvJ2u!"ˆJq)NѲ:p%tNeMn09Ȋ})Rڥ C%3\"P ;Ȳ+uYKrZ0TPhõiSa޷%_Mt<{$:Z|v=Y1dewrfҽFbLyM_kp-&>}LH>>\>*֔溽0Wdd@w=FB.CAx0WdC^j{yCJyi"f̐JfXUb+\ T|SJfX"Ñ)KEZ4Ei.2LUw 'BHSpʃB~O:doW7LP$){sB! e,~Z(5jOo6!6z׵}h;TdH#r=f`?"grk=X $e'PtE"˦ܾy$O?$hHlK\:=pܽ^x!*F'Q O>&Ob&*acS̺֣\:9 NHfy;͉)p7Is@2\#:CFbx59<)+$|DH*coM2,PenCu܉"e)FLmcat6T(dQ;`Ū5-h\Hh!!Xv` "[7-ȋ`dSÍDniJekvBIϴ/ 쓅DKEء .dhA"˦Zb7vBɘw~ޑڍBHnK?@"F G}wPEb$`w}5\L,2&>R@JեfE- U 5)a,٧Zʄ9 <5>ns ρʮR"쾇Lc}.X(!71E2P)Y(:!XG-ќ`CLm*%T P *+Ց{O:' 7 iY:ZRS(kŬśvdIݯvR;A_"OSnf]Ҵ~ޗfmmjp30eC‹u8V%?5s)d<3ߧ<3r| n#!CG)% 6RP#vu#CzIHDuN'䕶/=EV0Gdn4LŌab6wm"dfp;۬Q+ɵ6Z&ׂz뮚k;,Xy:DX] UEϜ*\ C4mP76d=+'] :A[u Qdk~,ҫzټ̱QڂX6rH Ɏ,+T?kA*>ϣȲɆ,yX-o;;9gxADPw>3"Ә߷.ÚzJd"ij{LfHJs$CJ:kWm!BHV1,ֹ 8X="ō,ŚQ рpRYظ6A ,3>Y0C2OZ! EӼHR= U&KDsnivXjKCƊ2cVut2LPoHt;4޳b_I9x?Qܥ%gpn"FuvFPhmW,RF!jL-: U6,9F P CH)&i9P U#v!CJN%!)S8ͶnvX! j 5.X1P%Zι"-XgEY`qR%>Vrn#T-ԫN*BOgFK4]]#d,3' BR.LlKly!^IwpkwF@Nc:E\e3z8žf*i35OP'sD*@W0;dC8N2'Z˰͖N|q#[});T"3C>I]x<*\ 9~mѶm]ƔH3Q;gohDw{ DDF!Dmj>_}ua,b(k>U:3juٛ2 Y$3q~k V-(+l1+0;dyGK@mK+l ) tvRCJ1$28l:ԹԹRJEQ4/BSOC"lnrP*(* pcDxuJjoJcrYMK`(py63;dwAX E#_dom]0>PSKŽjVHaz]'i[䪆ASZ﹪WVvw X TQd_F?cQ 7,br;bCX $KZEXcRuayS[-W;_<-J%nt"X d !&7|*b!0"uJf8ߋ JeX$C !utWҜV4%f{E)!DA4B$&5%3^T-DΌWxfd[!!J AjqĢ2.ɤ'EhDȒ6Dog@B+KzO`,Ÿl|wsCJP7Tn8<Ǔ\HkhPf~qZc-쐅 EeJA.%XlBVB6dyyxY.hHYXW9:GX! ; n]ԎN,X^D+2ھvԞ;L%@bG*| QG" &5 F$Hn̗േ֭$|i+jERU!|'=!5O߈, e/fu@,DniJvBIu-^ >Yޚ{˳C ߺnfLxXX! Cq!S N:JW hFR˴=kOjJ0ή:pSk2\7ìDNei>"-\^Ud`R*3G<~6L"ӒLrU(S" @rđ*a]` eYi6Ŗʛ"6IMPv^r4bq9mLp1[>Q1jNOT ƭ DnjZuRdxT@b-4D{x*a9TULKtQٸTbۢ.`-2c23 ̰U(2u.X$ \á.!!Ju CJQτ`vI1RL G;CX! DP UbcPjS麿R@HS#6O|o;d^VT$aIJf8oA.G̲INE;m _y}I`eY4D>-P Co  ʰCN{[dz ʰL>6@@ ;0T2cPRfCcdoGaDuMþ 5~VkdƶwYO$f, wY(cߝ͸1t8,ij{}Ydpdv!OZVc۝Mb]ۃK.R&=RW2ն3sgx_DRs,ǰŻS"!4>;T䭫j*a1eZ BH;[pEM6$~ߵ1͝(Xa" n@Im1I:v-pVwP"5\T2ÙoJBȂ6(PJ7sP@%3,"Jm].6y"%t]KO׋iׁ@%3\z<2an"aIU#E=t,sL%HngxmkB]+# ?!-EmE@ء gC6fNnHZEXԶRolv/+d34A ṬGSˏ"] V\K]BBSψ[wP"B냦Tޘ>јO^"UG_M$SnUg\M5)oյ]}fN[O1%$tzۉQF$l]Qu7D54"CjKHٙ!f*rtox{| V%ضyRvCP{v^Lm]1ڙ#>ҙw3GX! DBog*Tۑ8=Ե9ZQuQTV¤O}#NbWdDء eRS: Y6~=-0+d _@LQ%3Βs6nw;d^9>}2nB>e<[ 3+6.qܨifjшDEU0!6E*h!jKc3c!~07DHn:=?{e[R{3QfCIAPѯzLQ%3ZMI!%wBa,VP'&,9~a*?l[:;T8fI)LWX  ,|HU(<L0avB.i]em s5I6NݕozUf,1_&{p^:f@"hjsrHmm U XS7u_@bJmSs;dgP7DfYvz& s8;+״&UiIUG7կt4sE3QP 7> o_AG! d#PR2 S *|(LBH+lkpCzepk"!b6K|g'1e'AD>dP?X d kD[~*}ڏx-JmSO X]UæUCU+yjff_UצK"țDST%D!Cnb}!Fn@#ZM@ȒɆ-/]vB)#1-6^w\onvkr4Lon&uffxumk+VU5R+)N QP*/' , տ~?ͱ~wjJo<[o|nZR GW5uImt̠M;YE`* %w_.;d~2h1&ء %Gv6,ZL0T2Å1gxG+dts1 CC,Q۞+avB hgЭK4J% I)] ˚bE1ZM( \d:}g̼ &ļsRfP'Uû^2T:2Up/,@`yZZ^bFI"RĶY{Z~ Z&o7n̵_ &pkQۼ̇\ozK QYΜ ^␣-0ƾx2}Y3Iy8(PjG:}#Ddzm19W!P wiY(~[eLJe8K,wU5DvUG&_8]wں'P&~Y^ %v~BH1ml])1sou&\ 5 #:ER^cvBY8}cJeXzF7t[3x)5!9N2&VӊڬP g5)XJf-r1™ 8 +/&'UuȓS޿mPt4-%?߿|^׺߾_7_|]_?_/_ӜɿYNk> UIF&[N8-u1P=*xݖCD^蘆x\̀!o e {5-=`‹wHt-:@ai't- Fˁ!~F+-/%x+N#R7c+[]0Z&*0uNM0+2 .o{F{ ,/S8^hi20`#;x] r[hY(`w胀9xѲ|iG~XuxxYG&޾p'v `50:g@6tm[;hzG(`w_yOFSpDԓZft6p٭MU,bhp!'v;akpx+ZO=5֊ ։;^S7@90c>╥pF˺@59tJ1. o7 'fxMU CsZr95LH/]܎i]`tHXhRJL{&UWx`4 y+~p%Ԉ+_E}] \KBlf]=&xo=XAe+~NW0Ww/miҜkˈ{nWs52Y j΀P* ^ZVM֣\}-b_V#L h1e0ffHZN8՘膳lo}J&ڭ3xQY=oٺ˕uOSk6ìV}G6ޢܴ5NwҒTݲglW-p'=i'r{z ֋k)VŬofTgVFKsKd h06=Z+E@)tL1w]<\J#W-/5{)Ҵ̟{uKͭ́ yY:3n꺀WpRJ0hYTfqA\̸n"y_R=3 NjЦ& 7ZVn]K*w*ejUfY{։U:tJ;^w]Ь99$z#ƠrDvO7IXAn};څ/ua/ޮ C]e+kQ.IXMnp0̙'̝u.`MS$x ޞ%#O[0Mjja;US+;Mͫp;nTQ.3j|MXmljᱭђ-/,\ja>nv`í\CyZvvB1܉v2n6}6`OKɆuc/`6iu3퇟-zZ kgsE\g']`WuN?G-^5a5Zb%3$g˭\#'54iM8#uݒugf&3#`̤f?h0^sĂle.xQD`؋rK[~XzxK~a 3Zv8[U-J,.EBzzɇ8i%pk蠽}^ւZitȹ0tzZFK"a^OK^Gh9ii4txZvleO-i8͎wtxZ:<-:<- Ӳ tTP-:h%mhyfɾiSepXQìki4I[|uZ`H!aFڛr4Zv %*wd Uݻ%V2Z 50w-.` uX^ 3V vѲ̓@x!eKNN{\ Iti܁jN͎J` km47s؞U |,S.lkكJ F˲Ϻz XvPD_'*!j,kJ 2Zv`8ZAN԰gzIA)jj-kYOr\Η *N.3.-Tlrj>a|p /EcޅuGJ1uUR{N *y7\Ue3eofZHPW3?A zCkѰc)=#pp@k@)L7&," K\ Bkaٳ2Q,<#jYpe\xZ@\'?U 6&\:35)(-c9\Ghԥj^XWDGZUSc +y{jW/ .$Z .2pY,}&6z/Æ3$`@Y(2Zֺ|P=$a}hT|< RxsxВ8p-"}ت}B ^e踹h Jt?$[+e<a/2uրf񦋞znTmb}گrn/Iu-*لI4 L}6}œfh.\< =p҅$!I@9LjasD$<|Ö9 /s' Lq Z;EBC􈄨GTD=i552֭2TS4MA!l.Xm6{7^C5ޚ5fk;i7Wݜo9@l]F~* gd=u+9 y =`pL>~OC@Ӱ f 6-/E!Sw$ɦnP!lhyiM-,~YU8 ?uU1vwTvqlLУXjhgsrS*eul-C9/')tyh9=_>u8&k <p=ADiy+ӲI¡Pp5ս'G{sx8!d #6&!1 _=&AAGԨ)=*Q]~7qs&nOkoG/!tO0OpxSH<(}I:Z:rZ:rZt4tiii9БbN˵+M-)rZ[/ӑsZ^KrNKRPڢGxK`y`$xy9-GhBJ&v9-}c  $|D[gq(x'2[~I-J-2t{F<N6(ptU ]8"mb\,)ߤ#h +\Fآ2 /xgU5! .Զ[.wjJ*J*6CJ$Ű=zt3{>F^BuE4Orl6BiFEzB<ExZ:)`4Zh-=-quC-Ci=b(iRT><-Ӳri9iihҢ(%@h9a4t-:@a5`J˘%-b%P-QT-+30.nSGgW>[ p7Z֥?k $SsiBVFp htbk^0y!o: x:9p )vO4؃?wKh9,-gxh9fts*aRa$' pR&cLwBP1bhi%w{}t]S*VFKYJ.H t?V=if o^3n na6<p\ܼ6`}I v1V'Pln(X瀻~ &uP3ll-L>-D- R@bg{ f߳uYQHn0/-Rdj~39\o?\gq"SnΎ*'oQesU6Zr]ET`3j8=uefeԢ Xw3f})' aA2jf{y8(UXO\u"$l>I]Q@=6>&Ǎ 0TJW3 憫L5j,yqoeff$.nВ+3.A0aK!3@n+Tm}Ysx)BmyѦ6P=9OQ&qZd \:vy[ВU[b72O/bԏnĆ]}IqۀҬ]Y$8t ^.isxEV\oTgz 3s~Qr7 XMR`94ҩ`u>Փ"ZJc=# V-Tw/}Z)aaJ&..gyooѲC&V:0+5zp pv2<RzWum9^hkxMTljN[<ՇqxZnP\UP3IE$.9B!8G\4T$\&o^{\b-s2dKNXN:*\eAr]=b^5UZ`~* -ۍÂ.<U͆ ln9ru,˧˃AB7Ħ ѵ|k3E`X|S,>Q͋dRI-OlS3:)S`t,- AfapoV OZ4jwϩM6\}$VS⮣'GzjyZgslx6遧/zv{~G3>9sm%C.(;ӒgщզnjxZ.8 [{Z۹'pWzZun8Y8 Do%G,W@M 48b1HQ=Gz>\7stxQ Q|_qs:)5B?Co9ئ )p"5zD9- 9-:rZ:rZt4tbPe{9-}[hy{)c|]v*B%n9esZK&o!,-gG-sZ+[xsZBGVU)Ea5V#&4GGNRm^p1-a #nI'ČnͺԊb*-Wz ` zFueOܧLJ_N oWQ2EѲ4`}`Ք Xbp' *8,5\ p.t ]WoW_Tl -uv3PYj~u' )^"`3ejoZ\#c0In IfJs xe7IL̍e(pkIr3[ޗ\* 0JԶ6C)5cnEt 3Ӆl*AI<w:4?>~mvVqj֧MUe$Nr)HzS--9rZv]eF Ӳ q-qh n:ܹu`m[`5КpXɮCZѾB-tRFo%9źExa%=kug-ue?ThoWZh}jf'`k>hZY[YVE~;~L%AC(̯;֯nMkyjW|9-LM\s2ݾq\2qկo|=oqK??o׿/?էN>#X?߿}Ǘ}Q:?߲B~揘H?#-O)ŧw/|pR}?]w?UR\~~SS?G?V')NLFq HJ1^o fsk8{a4t-:@1Z˨>#EV4ZfV0#}2M~ߌ1ZA/M>gN1Za]*C""&p r,(]W.,z7Z|vC;-n v7W`n% \p8޲qh|vdWui-CѲ+4a\| 7ZD{9\QՓkҽx}F0|WDeR*Ӫ횼/ Fhy`BJH7.kⅷ+ B0[wFK[Mh[`c&l 0mF- hq;}'/>7;!kE#_'zR$2:x9hIlπ`a xk#m`k A^h~ՙ5fa6Zx śJ8hyȞ|A"2+0$1ZIpQPLR( MJl4x5*_-k^ Щ X:SU>dqVz&Y&M-`^l*a\, Az '29hiv BB(@2&,Iܺ+B,^eC;eҰI$[ZM~,M+t+WA8I*؃\5EIp y |h »,p'AjHH܅}x- `օ9žS#4vX}Zwn VIsg߷̥a"!K[CqzqԜjjZ`U5ZVg.lN; Xݝ~^Q{SfCζ^} *^hDL0Cmj3Z>0H7u;O(`4ZXP7a~riOCO?ܠ M?]&<ཝO<- dQxtP<-im̧xqOINI7x}=-o{f7OK80Yx捭yZnU@0UhĊco11oL :Z?Q]'ZXWqsR`7rHm`I]*N ]lO^m*ii Sq:rZ:rZt4t=6eXa=Flz(^VCWr]x圖3D<# pZ(H[=sZB3(`wqs7 .K~9-EKWgFß=hF#2Z.i=`=-n;MMGFK޼rK<%Kx'dh9i)` rʑ0>*o3͗`7]qbDǏS,]=b.D x=UeU$3B7̼46Z^+ xM0H7}^ 'Lj6ޡV4F2ZtޣOE8x;`{ Xa4txZvtxZSzEOKC@ri9i>[t- Fˁh9a4RFKW-\pMH r\?V2Z7HxB(20H-e8 80NNՌ􈫛y:!#y=SZhy~Zq0Xp\RW΄r?^!hIG>.ࡒpiu(`7%>̕vJ^[R ;E&54Ax37;!$ޅ"`‡'8hNs=0B &~,`ђ uva GKV\OPQ ra9- ѱ`8Exzdp^EN^VhYUpUpǭl0j=g,[ř o_Mr᭙HM41x'ʎ 3 o\Jm2r$e^jXmk H! ofv.ee뷠T2QeX!i'F"GUE5qk{f.BɄY0VjhTI"` )p{L" p 9IXm&..VdSPJRX}.gۙA,!MD~e+*p${5 W rSxv' v([i($<,\A B^ۗ9h.sI2H9 ӫ#v-aQQ 3ZDd) UcOu {'^n Pyvs γ[a7G.O_2Z)@6w4@ jp i❎s  F(4KmĨRP{w*`A+ J&S ˩xE#B$d|`hw {mJd21`3w` ?^.C'r~ r)*bFA.]6nhp! *a'3f J+C +=iF'sj!I>l5|@3Sҕ`= U:rxpv6½b8 S!2Z˪fG#E 8ҿM7E; pJ.oU Sl4uM믕Fd bpX{Wb 3Z%waЅMպX`=2ZD4IhU`h9Bm[WA0N-Tp2 \̅ܩ_BV(_.Ρ}FK4-UarAa{ =UvsNZi7]ۜ/Oa 6Z7QuEhj[C+[{wowovyHaG]KFK\~zn#|Ĕ;SaA O;A7n,l>8DoW" nxN3lt-+(o.k.d)n.,<V4FrJ`f]h=%T+zA=2Kh۪[{#ZfFK/vW4Z>V4T*Z:I; b@U+kE[>'V4Jny Mo p1W4H:ɡtbeB z|a]&1 Ļ}c]=<-Ӳri9 GF˖xhi0Zt- FˁՌn|=b \9 3IzW%n2퍖m[6|v:Ial;Qa,'מׇoc>]y>(D*x4ZvO ^k9"5kf| `0[8e>p'`HXfW!+<p;VX2ZJIKk"+SBJ{ Z`Mp%))58fY| pAI AԹpK4 5 o"'<0>(BGK).础ySma`סxuIݤBHr1 G5e5Z55$*-2-+f0ywsndyvCF˲j;U 0O`5 4Q`YߤvzMmwF *LrtiI3= 1GGG]'?llnOH{gr `-Z|y8!Չ!]P* kxZ>t}/񢞖;J{pS 0^r{W{ãq}|ae1wGmpJF=bbsßtD0+n#n.G~ڴZxx,-+xhґБr##H<##@GNKCGNˁiFQN˅˛r(ux M!u5#o{Ϯ bzphTwaNKBGNK?mxwՊ(hՊ 3kEc􈜖Zn}#@VajE/-}Ec{Kxu%ehhMwԊh ؙܺ3˴eĊ[V4H+->ٵ6, t_vZ(Y.`hhY'IPc xoeU{o[+:rP?*A<4g~gt'ާT&(uG7၀פ{]8W7_?}Oxo?g?'i,yR߾?߾w~ZyM|j<9? DߞN_?[1Ǘ?'E|X{O\߫?~V|}1oϿO?o|mӜ3 0F&\&۽f W0=#|1Xaz˳`"%͵ʼ :տ' gq\d.U)**ob^^J"-0 WH㽜42MV& BGKWxs:Gw{%,V&Ak/ﺰ|hBĦBJ5ۤ }ք.sO (G@OlKݦV1z|=f>z݅>2 @:lK~6g# a\^hy =VF?u;̎oDB鈞o9ئ#z~#z=?=o舞舞i >(zC1P )?!zyEh{zFOv#b!~JO^'zޥHѲh9a4t-z!.v>}FKg{Ǖ;A9(ax OOX.{}O*ڱﭭ[v;#L1BPѡ2U)9OeD x3#̨~R}jE˲cNK<7*l㜖9-zZ ~z/jȚsHTOr?%uZ^*ע[4+z{?$:l2 CɠJ0$Vsn>d&*(&/rgzʚ~iYAJwvrlՃ鑊-`(gza|V_VՖH-3> l7^&]|rYu|"xp<Έ`Пzh85Rzkf5O[]ܻûC{KQس?W[9uׄ\ VNdkaOOܮgi\qNaE]?`}j)ݠzi]XzDzulP޶?|V`.Bznikl*{uYħBthRf'53-Ftz'vVzr0wykQ/#Ѯst^XFCpZ gpq];|$r9 q{[@>Wv53JW- %n鴜|U?v6= 61ցpZkWƹGLoml6yCJ iiwfIf:6@Qm}ǔ(~7kte XNmn?ژ&V )3Zs>ۥCف` 6fg1":X  Z;d^:cLI1pNˑf0J8wQL{5{K\%8e>͊6[^4wY>Y['˹,`"9k?{=UsS%g g 6m}UC^:- C#Z#7T #ND .f"j‹u˖iẢe.dG Yv숱]}R-*R,sey)8-g[gl!)Ll5@jee Ѷˮee-|OpHzEOG( ;%ѥfeiѧv.=NӲ":-Et =~~l\GZfl,[hH/Z]aj7#-/'8+v?07>Zbe^(vx8!j¡&iKew<<{ <Gp6 @l 6v?QG9mQOxxFҾ^\D~ j?I8s{trnsZҵwN˹sZiо3e7I?~tÿ wN˨A^+ t蜖FpwݲE (8崴AՈ8ndeF #:CQ[ =(%c7d0|6UyHWsۋ洜nԕ+f$8-YNN[qgÿ_ÿ*p9-Ǚ&1wNJN1N[6T '1R  ixtB5[^N˕ZvZ-'U~ʪN--J,zCؐpca~dt]Dv[WƆªB}`4<[t9"`y:/cl;Պ1|Uㆊ9riъ᜖@{Q@% LGDёI{;-ti9wkH˹#-]{)%ޑWp;ҵGZvJ tii9ҵ2Ckzs$c+i_ 8".P:tZ^JtZvÿD?.`8 tZ!g)@\NKէ{IZ#A\ G$}l4}B. ׾Y@rZ:m5~{D$#'-קPP%ojE f]Ћ%sA9-X 5 2>cյmZ3|7!bv ]˜bp^q% vZ"5df/={z!}MBd r}oU׺nK$,Tz`PܢֵE:}JtڧA @@ auQ@Ez{WJ:[& ;Qoubw5&hl62P!BخK? ѫtR]-$T*+%gI-ǹ_Ve\z--SAFXD+M)njaVhhEm*İ&= Cpos6;v:k(io%m1iCfvD{g.# v&uiDƕRyJ^Z\:`U 6S,`%`=929K`3srTzj2Luut޳y3ktcFQE<\l)T} JR&z1\\vcS63U~ _+H@_kHE, nmoE`kwc[pL" f$|cD)gMid aWϫf4ڇ]VO"OmtZ8-3n+|yn+N-~w@mY'1C8Xw<ذO O6n !N&QBQInٞ:laHKۉǞ~?>ty=r=- ȍib!/JA#-p2c|HKGEQFQUB Sˋn - ҵi^ѧHB-V4XPi2ڒKon8-m<ޡ#4ӍX2+9>. .V4NKN4vsZbU?֊NTI8Lh|'XR]S4g*KUX}"Eo9-bJ3J֦;)>ۄdY "اK'HG ԑ'r.87Lrt?)78-]H̨\! kF Ȼ%νl1;?vi`VtƒDpJ&SDƹ9 ޏ1*gO-<`d?u& ~{Mmڡ* o<`*QyxEN.^f W! p@+K02=VMu X*W_*C C:U;zNK;mo "gn 7 no|'޾K Vۯx/\~I+WrXs.ޏ0Lp7>(h-}w޳lALvNU=5 zVFA1kW] Tܼ".flC>XXYfmY'mesբ0KỲ nlYcVZ Hp}'$)܎m #׮5-PgI8BQ@FXr0UM!$aB0, fӥG> jJoowЧc姯8Pd`X¦ t`ň[eBDgVvHd8lH]pb+LpOp="j@kZPb|ܣ$A9m^GLqƜ3r[Z,s]2w'i9\㖹+-p6$p;Z.rGNRT=rYjJi̙ v)Θ)M[x6vEf'n6*w:X]*s7]ni叼!Vf#&m?|:w[F>D ORCK qZf$FuZz3g;-upNN|[09mg$%@.6`{A6=XwtT$B>(9iI?\쳹pW?y?=$/W[O?l%洼?Vi .EPV P0E;-/ ھN ڮKtZN?JDeq&zKwZ\n_!(6'Za tCē|emE.ue`6]H;I0<"WMuf\9-U7W~03Ŧ9km'=y/r99po\<օ1dwHL-2}˺464"̸̒^ZGhm'7,Ww'?,-˼0J֫WzV ^ ރvD BNK3 *lA8 UFU8w0BptѶi+b%Gp+zV .<@JHyh9H{W^>UL4H,:`wEDmJA]7܆ JG<@bA U֝#|n[WCրOnMR]9'1j 1,fG Q$gtY^ҕcAp'5H-Gvi-GWckw(v^#CNӲ퇦[,v_j?x9ۂ6']4UmZ&aI-8ԞI|m-?$6VI cդ @/YEolwh} Rl eqAʬ] 2VⵠבT鏎 "[#/HSOu"֤kNJnP$rZ:c%C /C[5F&؏j;Dtv%uwU}ȀlVIi里Vw8vmcC-b97ҷSc;IZ9Ql)|R Gگi`ނ v;C;@&X3;a %%{шH0@^'\1H}BFԥess3c7S2h xѻ.Y€6s$< ɋ!l?ja!|0FX8-JB6#J80)a[#[ $C20CB4|ML;;bEfl^gҋj2Ԓ3RdYj Sxv_ed p7l6m{ ZAwsSw~7AQ.w|l]N"-ˑCB{P eUz洌\>]A hWͥ6tڎ~ S3}j%9-%-޷*-'%4V J3JCFr,3X{紜!rZ}y`Bhߢ7#š쨵 8i8NooԂpʪe vnD|_> ;UfohOUcnۯ?돟/?tc[w kO29~J?_޿1_?}O~D??gWf?qGϿ\_/? ?zU#3'>}/v~`K06*?rY Q$„ݨ̳3x1pv#~&{Oj_b?5Kp>|=?wCmkZkE(Q[/{VʐrK_>k,KlSC8/={rgONm~g V! b6ϖP\b6ofuDP bRx~fU@a SRek X%ŏ%hwþ2_ ½^υi4N-K|yigh+O߂{bo``yמ!ts{]{˻`nC+`s۞sqDjEgZ#",vD j;gZ ,bvZ`ߠeGuZn xuZ~3FoN˝8GıHr&8,G}N/0b:/ . fNpNrIc_FHօNK wjApJ/x2`l,*$l/_D8 f% WE5EN|f,ó ͧpZ2ďm :6vui;n)|L?;EwډۿjRJ CZm!xzTn3pR:-GRgkk19q/d֍zQm,;^\v}W#ۺM3g/ "X `vz8CaI "؎ޖ+N^h'z U{uHқq\"Si^C.ggin234+!sl<~ b~slZQ^NsuNK1Ժwa `ΎwrcWjP&?'!ERd:-5D 8*GJ*P Υ2nUtZ [Z g惗yǦ} Lp˲#+>~Rae&TG'w|޳*k+`c*D`Z6 vFg>-GU#p-a'xa(&*՜lSWֺ 4#ز\|J:h|470CgkaSYCIzaptD홓M`V6#V!퍫YTJCI]{qv:#Zx k6z[C/H`] I%Eέ]7?F0"Ywg3~z+慍쬱Z[>NKӵyvd˟/W! W 6HqK RMRzb,XR|faW"!,GS2`m6D^'/欓l&UPhZz?.^(Nzvb.g_ޒ:5v+l=o,)`QpC<z5:f#4YGsT+NjaK~F -lNn?\nYZ>u.鎕enyC.ĎycuƿR뭥6MS%\8W _Ih{"k5?vG 9KY.u7"󝖗/vZ:M[xyU0w~wwo;aۯq0vN6*{1qF"-eh6rOh1'G}trqU =ԳySf~a?~N2~=uxWGA^?)8YxFZFc"$YhKBBP&zoGZRCPT!81>ir5'L69N!aj7o72##-1#¡iI 6v0h졙 2P'dcl 6=4L}#ugúTÿH?LxN~<#X^p$t? `<i;9-]{ oAphOrPz紜#Z 9- E$xzT:vZP4߲=>>CZJrsޕ꜖9Qvl.9-;HӾiW4Pbr_%rF8K\HZshg-D(d~D Cú'>i'p"3\!K~ ΍e֜$1EN%־qNYwu:-}X m:"ɁI\~[iNKG:LN˱#UVujiyUbY ܑec]k]U p3 * /g$x _`{jEgmߠԖq֪͏xՀ6OiՎa viy %mGZ3P{^o_jI+`i|eh@N˴洼Jp1N˛활;ҵwܞ0rnH˹}ãVG8-/* =`MS [NWWP%9-߮ mw Jߵ&CV|΢W qZ V=z[994 5FŲA=Z,@Χ77ďpZa6pܫ/0pz+p#KPtʉꐔު $?-FH'JpK0P}ǗmN˪,%} Ob@QLoӒyPӅ'%u};i٦ɘQ[Gpk3 lOyVvs}L=mUb/A<+uAo?,*:~FX9N6`+_5QQWܞ7[/4c3`#MeubR ֮o\YU\`/S1.yW;^?$Eodf:\uF9^_p@okF!ur98K7r`[." "V^Q'f3DkR Wc1\ǚv,׵pZ:Ƃ:WD u8ܻgG xiI07m 0,©XFmn)aEp&jd?~28-FY"C⺞IbH|d!k]9R8RSC8MBk٠mX8-z7͹1Sn2t2 g2<>K-Y &ZFZ;-U8-qcSCv_wZngl8G!8'GG?9Z,u*kAgsyl?!w9L/x|7N"-ウl./@"$45Bbi!FOIDGZE>rHajo8爴$s(kF`t Ps.eDc w=_H;PB' r! 6s;ҲL#2<0m  揆k3 0a[E'Vx8t ^/|4xMJ:< _BKsZnM;ks{trnsZҵ7+B.yD>\F{񸜖^jެ}KNj‰{82=%i ^4Gzon8-m+PbdTfZgd"Ho^?j1요-^i ht́7#x U:-2tG5ijض>"a xUV'8wiyG}X1Ntz~2 ൱yEZ'崼5d\N˛6iίd%ݖ.:UUMkHCXs2ѫ?*wfG UN^Ϗr_U=|1 Rj+qT=76GB<N]'Cpfi֞hDx+ @;ĈxWOZi9wkH˹#-]{GZ#-pHЊ /[Cii9ҵrFe.nLB="$}MN^E;-s1m9ӲҠ w %byӲ w QyԂXGp p]ANKKpZpW-Mԫm8_t<: 6q>68i㴴/'vi(i'9NYcvOLoȳݫrZ%_[zDZ Cqn V uZNvI`|dj7 n6 x;Kz{ҏ^BɗIoڵ>q +,GqR2CN˥Ԓ,tӲ"|/*Sc/iz[UJ>l&`,{̤ƜnAp[] %UG׹Cyᄖ z-A6IYfjҋU"7W )/o9-{g‹ C p&rn@$7>kFLlu$,eBe-_3ya _eVŭ"d*q"Æ}+x֘RBpu?C+5D" H}ڧvpK2%UFYk"}1Ke&blKM}榨1 SxR)‰2l|>p!͆- ཆӕ59[UE9vUnciqp. ~)˕C"8߷dZ:P2.\QW?!xy|tNkZzSCmi5e7N˖괼- ul۳tlid演'Q<~e{pt{r$h'GWgsh?CqYS??N?kئ2K ^=^z<xUp0RböGZFCP!AWVun 1>/Di9WGQvoQ@EFZκۏ#q2x xPeV86hlGEco w__>3; (@5.`_Xl%&v>_:z^"!g {LNKռleeo`,cޤGc\E]|']jcMȣ%Z/iI/ʎ4wMJpI 4ҵ2ثePjuJһ_>KzqÇ;-oLoP$XV:N:$By{۵I|[QЛ(itZ^Oq=`u+ZL/-k{dxrJ&5Vܿ]eOe3MSzJ ]-5ܯ|bt.Qf7ҋ9-$^p!3lyʎk"` H\6i ,F/aI 6=p^l[괄Vr`cWZO7V o:۫9-5:*Jf!3r]PMMץ:^ հ$oP fF5SUIx`W˥7S~&Յ@',BQLu{!P:0"CV!B# ZlX%x,k7k[jq<# ۺej@YD[bĭ,6KwVz؊ TNKS9ǯwNcnG_NO֧9|nh* 3;!䴴lTk9.07m,2R׵3a,>UYs_-Jy#DFGl郞yDKGo̧vr~Mo?UcktIhM}%Ԅ`[XҿG@Ֆn(`FnXC.Bnоb4\& 2#啒7mJp`HN %YJxݏ,-̳2C˲Y]ŗgz?`C[3$.j!юYvDx]EcCjpeϷ,5ש]e)|)m2m`Sd gl6l6nhvszn ;qcdg9$uHtThY<>UGչ#x|SkԬrtZvuZmNKf7žLU_.g% r/ =l|+?ˎnNn1RL=뒪8>~&mi9~Br9x,같Y%?%:?_"I|F !(vHu1>bCв"%4`l/05=*u cY3n|oտ=nǶYؔpw x | %-R- h?.{?܈x}ϟO/1ïӯ/?ۛjߢMo|o}}o?>4Ͽz|?^~O?QW?~Vo|__}h?/SEݏK?|XVGIT5NL ysOo?kƟ+/y㯌l`ߺ!o?ΖCO8K}գs~nϗw49ӯßp?1^ӯ!ͩi~O~j1׶}Oo>z㏋C`kѺ'h,?cӯ???l;_}O??ϿoomV~8w7'WU:uש_ʌz ^U'UcXxӶ|@ͺRلWܯ>KO\*[]BEgWdxf9J_ m.OW毊uLYS?DeFXc3K}?~'3`R|q'zM-{:NRpxLF[0\Y{o L.z׍s< NB퇨AYm:JX= FwQ gs];EٮwQ+fml{= S-c܅x+YꔩwR8qC|uCu_U| K;qLD8t-\Pu[gaۓx?ڮh<5o?x{E{՜?6ԌPfa|L.?[D?ٕ0St.$JSuD&y0qލz{ah5ĸ[]ݏEsV #Iѻpf1axwr>`Ɂv"ygwK=ylqq<,q= g{9ݣwÔ^w] D4%sWd@QecvQqv 7]n7-U\6.,t'nS]MnKwfU):O6vHݢeBOܮtw*FCk;+A۵b|Mm:yW6_S8tq v*ZT%)dDQymfMnD^Tkn.1 7qMwsOыQ׳c|'5mNjNmx"f*(^dNH︴7 B n@I~QFTnQlׄ'n/7 H߫#[ /I2UpO ۂP©ǁSALy"&&+5ŸM=ُMH2Rw3O Gf{Hjiv&fG){?>sgO~fٞXkϰ19ќ}A+G>nwUG"Gmxn2-P0)6:ey`5b!Hm~Pm8 UhHymmm?Fd [V,SDtU5::rvt 6 z\3 )e;9?9w^ѽ}- &FͫvgE,,i3n2Z_=Ivc rKtߏr툽IWV4}dquܣ2"V*:yé| n'ޟ*G!ɹ/%C|yS-E6vTQueE4u 4=8c=r'+#K|y5~ْ0KZg"DTjCHÇ^"=?[no g^q@( Pt"a[:O^̾=,MՏ X a*h{TSm&@~dObǏ0h6^f3*ZIDZCCu7'foc, 'UdO:w挦?BrjGe}u5Ԛw,I}$Dء =iz>N$| q/G[ǣMnqFaԍ/a^U M^7TDG*ә.tQleg׷Q۽Qyw7g]w]q;{]|^w~+EC38S%&;nW' ڭfgh&{tne#g*tEm/gMiՔC>_Dd$ ?YİnY/vXϣ9Wt􍵀0DȂU~tiPENDdo^L/(~93WW׋[6.l>l m+rt B&_8C). s\֪Xdv*u~b`O#ݕ5o?G{E?1]|1C7ž:c֊BzcT \:ߤ( ?d=1*z{rV9UFfƩ3*DȐ,~zڠ&N]Mҁ=܋1ӺQfPTƼA8Acw(Y'mM6Ds,j@UMEF KvWwVu|ۀWN 寧o Ԙi61ƣ*'p'z\JeaG],/ nZpDs%Yk|k7Yj6731ܹ\aѝ7nE~]wGGtbbFՊa5L]ȓ3(J,^yo]ryާ\@Dc8ݥv}.>wl1]rbGdIYG"MPS>d5kPl5 dnyk;jk&@j?wWM{j(((VS 'w>leAe,dX'ݓ\ˉ.h% Yr%DȂm̞wLh^J Iu~Mc$,"mV? ήWi,"mBD#ӎ"KG[<2 d:eoT2,`:žPΟPK%Cc|`o? i0c/s`r c2Rc287>.n͚1(-W|WǴ>khp0Zɠ(?w-tD8z Y,mBvΨY¼(YȨ3li~`<~X nqWYk+w#&͐L<^(W迳of:S^ MdjHY16)g\{MT;\ԲQ""'c Px ]%U`,D=LOdL.Xyߘ=poF+8 DxqOd l1,$^2Af* D\ 3MdQ9B+6}~?!Xl-~)/`G۟<OB@UEHƼZ|:A!#5_-<뵓V.DBU,tmw8x"YnEUͨ6[gsWPpԳo{gv[~"2P[@!EE6ձ~Kqfn^cso' P?Qs{XP6tVdOjZݖɃ褲*}xksFdsu 3s.^;s\Š߸k봏F5D9p eZk&["0;T8,ޞdc; 'yRXά$TAˣ ?R@~jkDt.Ie hoGXBj*Ex cu-{W 7"I2dQ&hN&w@6K ~r 9X:cj 5.F"! p/dU#h%2/n`Y+NGh%#Rs-G\TY\Mh=ⶨ8Z +nS?:,,Īk4d$q޻ALj"wu?p{3x02$Q4*( $ltbqtᅌB` 3 c,x ـ K.VEl@, н9<`B˭/*%7ab2GLSUй;־.;ߐ b6)׀Mo00(+9t6Z\.pf0!Jͅ< 7L~1@y\κVEd;Ww=fun)5ƻ*;e("dʃ,0^Ȉ V r)jWy@f1meEBUEHdԔ:i۫w@z@XdUzޥ FLd ݒb=M3ēP 8 {o(V1L 2;zvi|hDn<1 issktz~ F,b``KbBHdRujl gql"lq'OO}UX_> Ǥ;HJށ(@bX$P*툐ɨ08;U+f5%֏,#``Yqk x~842<+ckJeawum룡嫒uv*HLTوW3|R;*Qf (D'U9Cܖt܏,1|4݊C(xcD Tt:G4crLW iQJ[}Έ ӓpuguvNtҶW]^GCg۴MlL$nW08 z'j ?*@Uz(Ȑگ-y*ENf{g=).C_3f*ɬh%\qdt|ns*Y> B&Bã;\IMvfLdY}]aK|ţbk[;u9plΨ5!AijbBdhV2r6@,+\`WQl ;o}][F(g Dnx7|X`~pj.[|Y,jG͗6WOa 8Sx&Y(21c9$7l&|~6j6uoְ;aw+70>Gύb;:StG>ȗ㏏Q)SKE0B2%CU[=^yxrmJB>uxx|'1ރ)}P5B̧YDn~.)vu$OVgƨ0}Ru6?d-OJٳ 'ϚKM/Jox3qrb #RtM_;!X~C'v{D&@r?hp򿆇uޮ(2OW Bƀt3+w Fq-rs@bB&B/}go  :ܷZ;iLg)ظx?^!pr\F|fanI+[)Ţ-dؙx]hllpY,MpWHکVIdjeT'K|e;6m4csD|d~&"EҜ+E E"d i q;~gI;D !lժA.0Ӛ!tȯHijuSu-;WEIpګթA!:ƪçXJ% :cêk 3מ`nыǀvB #+w@pE @r a 8CZ5b4!"g2f/hV6.(u3qnRz25YN3}2Oь,6( ^GS ?d4noB^4Ťo:Yۢ50V*;t(F"=?)al*i33̄<迳oЃV.[f"'D&2 °L|JDȂ(+.aqhɬ`L׏w?[ھ+7B+(Bj`[ H2?\o=ߊh3}Oi7MmΕZh }.ڀas4]<3(`a:U:0("|2>BY2T`z"a,6-~CsF9`5Ѳ\(=Ba!bc[E׀r1Z*>У E|pXED"pkfkX|yaS:7 "/h SQ {ja?d  _ԃXJET:oeHq凛-F7 ! gƝCK)Sdu*H ]]NJcNH܄085B}rXsL"dȘX]rj`lӸnEXێ{$o\we| O):[swg½@ƯE٘T^XVebZw뵙5`X[NJfy});1Ir"E "YT˅}4TH&U(EҮނ];3^ `cf`1wQ靂Z729dۘ=s<倖ʮ-tuAJrU1Z,U[g-tp n Ek/HX(Θ)s_56Ϯu )UMǦi>{&&yUP< hU?sCމgbc#}̋{vJxD@x<%V' Y$Xڐ# Bn'R-[d4tS_[gM,)φJfY=8%Y::z{U9[U~ISLG}!mJ:c]X6*WdpQM8VnI6-%{SڽܻJwfw{Wջ~zgJMqTk}w I'w.YG]p` \\ y0ږpw(%[ 4ɐ?zL)7%37< a dإ[d鈓8⥳7U iK)llmɛEu{Ki@H#Ru5F ͏C%8,]Wt 9lvFkk FTqOV+(SD$ا 1gB98I Y-Yg3CHssp:`|g>ߺ]d =BƠ:Gx!ٱ6uHN( 1~D,ds! Dh9|Їs^(jkl]CƧˀc{+r!̛ ;J *ggѺu>^j JA)~t\}.?G,F}к^⌦к> Cn4g[si*'$ rTiJFW!1Y)lӄoC#{ғ!P2BY]5x!DXI!1Q)˻K瘐Y$,XtJ$QWz'2}v>CKj@h%ܮFSEޅ̮ i@>62\H3[퀴NJW:lݲ&,e0FãHZռ(atrG5&!&O\A[x B[`XWҪ ?T6ݯ3[mnrvL*06naJM|7N}ɽ[9j|ntjnP;U(j[qLu"Yj.BDا Qhz4VኊF-&A/DlJ:@HC0gXv`bꃢBg| H)jV--tY:G!3 Ջd~Q5DЩNwjԭ}[EVN!vI/?n_?~Oc-G8dKO-'mc !M*yRɢLK(7Z51.u BFPםRR⽱":\,z"2µϺuܓ f5!$F(XSS L0~zM d [ٜxxt^t& Y *}IpQr^DEXl&, Bch'H 3w` K.$CxH5\r.-rqypB;׸ ,[(83RR/H(Tɧׇ2CrVXs [\EJd#Sӑs%NUc4OU!ʰAiz& 2EXA~6`(̥HRIu[:7! &E2QePgL黼X; 贊Ri Oai[k6Tڑf]/n]}6};Jc2-DJ:5i?!r ɽ^O7 e#[9C]j棦UjobzHu!:ʌ2V WqU>w2`?d_󊟄0}DGd1qKJdk$4w||c,h0Ȩx'?df| Qc{l_%R$BljU!lm@Fθ'ZX$9?"K rNIQDp[;W7έ f½BFg {] ӡ:ׂt/c &4*sRDJIG>qcu#-VP^D: GCMu"CzvJ@"غ Hpѩ?d ! 'q7&t+"$l]yp,Y쓅؆T 1ZZBACK+Ü`D/-t\Z)<=N<;+_dl<,@X^!WZd:Bs'"A2.Tg%Ν{J$D 5)5 $ @յU&V2ͪ(Vh%ܮf "~J)&!Vnt?4â:xM?&2P)ʙ\JDNgЌ?d4&ھb_Tbg̏/G4ɝC^6fۀ^(Tܴqg|u,}%m>FI $P`vA{ d}|C l3V2BG6= "KGo^ dNT;s V'{v_φr&wWt{+2ʉ[QJ`ɝ%W]ҥn2v(v;2e; 1S"Tk|3vۧa܃*| JfY'3dhOu#5#04֢v8dU?S@ڐf1J#heAh%^}cezΞ]nJp{l>otDw$~bѫ1ZP֒MaZ|´jvLJ:C뤧s.PiGȩs艳쳫"d|+WګK{ܵvWg]ܵW~)V+Y?s!PPQPء#&v.fK_d`D} ăك;&w\SxR}ϪϺ~dOW(w=Y>WGtzumclxUIrka|" 08 7+ɐm qTlyz,ulo{T=-tַSeb#EPƈ 8p6D,0p;9Tc-ab0~6aƬwFJ1*[yQ,w#&#Xݚ&+uZaM 949vX{> P ^ v0}KᇌnV BZ,Uo@ʜ VJ1Z,d f)Y,QqalokkɋȾRsF3cF5=L=iLTE: yrFJچ ,jjH"o$"`3+4um=Kde/_/ 'dhݪFGᇌ5I[`JfY9?)ul.$q1*mPɷg\eW iCܖݲc}'h6P):PoެWI+Z)yÜA/5a*&̀s0O-c8d@H ò92@YAXW۪ NG+lPKCs[-}aPψ@=2 ~?W5\AkC 2C>q64"z SIٔ*$" ˹4LFEz 6Y:UHr\Edթ~ElԮ"D*TĕyLʭ6H,XKv}DrǸ5A6c;wsկ<~-d| [.݋FdAiT7fQ%F:ZȐYlBKbl_c;M 6#2"G24*"3k+Yߋ-*d4zwFc鑅Tŕ@6xlUEێJfCZ,hN5oZz 525+@cҮn'BF 1shme$ Ųu* BԹupάTMw&OQj9|<ҤDx!D8H)hBh%X `; fwƠI6TRg"@dIƢ5Vga!#X(TXJf9J ]BrTyu0Hyx\PdaXv֥UɁP5S׸N.DŽ`|ӮEm Z:^@I,[? Q-H(Azظ>U4kuzL`9lI{T*Ñ5rVT*íK펑 7Jؠm6w٪Ow\eґc)=Zv8.X=G .`qIIH"KiކMl@WCO4i<:1͔Y$u9<0xQOErX̿ͯzljdm{Huzf T!.n!EWģ-2|'1~bM~ [9Ǩ+dy6Ym( :-`x4x]zyn8xk /-<2>LnhrS)q}DA$֗=l&sl7_.YM)Grls9a$\kQ@-td(剛E׌$dAF'x,jkmZH"@] 8.Kpkm콂 ]wjlQ쎇{R&?P\s ^f F׌>toě7N^o׋I,v"-2 JWd婒wdh u%v7.+] ݚ6fy')ܢ_ܜ徰Z1V7׍)|Jf>5lL6}-RUQffW$7 lB6Qc oZ:hh-tַE V2>ؕcN0[ϐMB!'!E < |O3"lb VZo"4iL 6ȦRB 2 dͩQMSf ީ'V:Sm:U;T M-tZ@ffQ4`R`(3B+e"J:#~t}m+4gJU=]ۈ=oI,XA7@6WQ² ٱŁhB"KGH!H]&HFM$dPRJfY}B52,PH5-YZGGگcErkG]c՜$BcAWw XչR^A]߀E],gٓppIql~ 5&k\WZkuqW^5c"Wdx ?@ᇌƬW'ɇ1;݄N&eFJ6٧h׆\%Lmʆ)Oxb yܢu9wwŽswzMj]zh3c^Džy&#<yiu#L8y~@$Bl`;/dA_SDh%+g;Q@N~mCX2d0cjƾ18'$)]cdtKWC^[((u kMZ^NZLt Zyi~mQS;ih庨7Zt5feEs5E 4VPŪDXBء\Dkϼ1YnL*tE(Je/iCDA42֩HV챏 Zjr-!L<}qwbAH?Aں6AxSN5PnA&cNJ!<v,='7<{ڀ윀=t!%@N`?F+ Ba AIJR);ƚ VVLW:t˺ }aj-/2Z%( & nʆ $C8N Sxـ\ [tXטD6=Dś,dS(b%(cTnf\*Coeէm:N|=xׇ&-aYnW?|ADAFT1}30~bifP(6Pg!9{X̟%,֪Jc; J-|1%w_ NuDM3gV]zƲ(Y٨fOpkwoD+{5|yFw1ݯ#>ż䓯~,]˔Hu#N9xK[ղ͢at?"(Qf3l0~bѫڰF& xC9aW2%J7:ZɈP?x!^ -j n=vJa KKT";&M2IzJ:h%|XoOc(5 v8 gb 7)1"Y>F+PxJoȁ|rFpƜ)qM6V +sU}2+?~#DEi<0 ~Gk!@0\;V+} !!|IWDԮŁ]q,ag.j.Z-p1Z,GYHIDQɜSlEӞAdJ1ա5G1qL,t1j_ Oc*IB@mHBupQeg=+1n\ïkk iMPv$F+eYfZ誨(Q7B+eU_cO,T'n 2$D=F"KGw ٫ͤKo Y߃^;BI{ ~-JC='R[d%V&|;,soYAuY98F+ejk@h%Ú*[qTߗkP!e}oYh%Ç %3+CD4EE%5ڥQFI'v (!Pwihaw6lڞ/*i^uSb @i[BHt0 !pLYR.e@rC@þxoTrK,23A"K v XnV ?"Q Y:Qi,, ܪY7Dc9Zu>Ƞzl$b!,Ex'S[#5x+]\;a1Pe0f9F5Y,d\R]ˌ rp3\l:ZfuEĉ[YH,fNV<jC֚}'9IDcYz~biWG0~bjc0 ߏ_aN(&a7Jڅ2"SPDL ^h%\TOU,r}ymY:~-YxY߰|$~ӵ?MѨm.FPɑS)ь<?P.V2MH 4^`$Bs.[%.Z(x/" s*7JfY`(1Ou*bR{ܴ=FFU.@#l0 ^hP*KvRzXdbu{EiN馺l#c`gjRQH7Xd@nE nQ 跮FH*w"&w ח۪ O;%+Nª3b$Xrΰ2ڨ|ْ`"wt3b? 2*Bh%\ų JfFTA][d%iVE"dFc,vm-zӯ*v-Zِ]@dpZ=-/uLet.s0kiwņpS_S<%uI1ղhNfwbTR2Tdx:as{峹,j޿"v )n{ӈ@P" $X%;Ti52 dJU_6sB[m@qzJHSf^6Je`I;5[qrSQ!\*&tdbz 6LK߸P#0ݻOi2lϪ~7mG}9&Ȱj#&֕}z:WDȂ'0ͣ.[dըXlk|Z(=ҮzŎ:ju^^oUa|11ⲡWBaǐ N-LTA \Qe# :/*P}hSMZѾwζ=^"PV*]]s# X<`1rNc҆uq~"w\UEJ'HcTM\ȔjB/d0 |b_>$t3xfB7@tV2+oh:ID0b!!偌K /dWk-3dD ^ΰH .JMǼVf,OAl!;Y&C2G_%^\t0&"-a 4w&Wm*[  eKl`@Jm۪;s oាmAv l|np(*w9B+z0(TPx!DM` ?dݭ?dpf\PL"dX]=|YCJ N’0dP^nch\ H uӴUۄmQf*;:`iW.*36FZKBdC+T@-rb$Z( v)mAl4VYu\^B,Qx3Lɣ2iX(%e)EH2Q J10F2_a!Ҥ"6@aDڼNL;U|6qLcv6$?D?B<}u`l۫B+T'NM\9X0Kh$TC RaXfVl,C2Ҋji-td/YfvѺNF\v.? c!btJf>vNJ ף?d2x0juU:[d4!n ;B+\ew͂!ތt5e"wxI5B91~:Qos+2BШ'8!Y ٹ7<.K UC;&'VQlA#}ډJ>!BɰzU'h%Wz0@KjH cMeG[~uD䎓맡OH ά -t*;}1Z,#s>yܚ[dP?z  %M 1 #0^ΰMbgW !%Mɮn | YrU9ΜB!8m`Z*!RXm@sCA}h%ܜHQ[dC"bڐ 51 fH]撉u4zVunZELqUOGċ{z*"P"p!jZƧ6I; Dmfȵs&~=RRh ӚF[9j|ntjxGEN|^F>0Vvt)pJr?ILOiNs`S ųuۘ0B4)q ]>纓\޾Ωc#3BN,a"nN-( &̰2;j\#d+ `A!^ z>0~/k]$]qʠ7qJ)u?3)IըIX )K_`RSqbdA\.]j iGԁjڽ+{꤫: P5G>9 1tJɦ P +L v@Uw${ts.a7 2W\|j?jm;;hgO99@<2!76/EQr$wqDg"wt|voΝ_6át&p;W(t&Jtc3E<5v 5xv'I4A~j-Xdjf=7o9Cv@6pW:L;d/܀Kr' Tف|B]Wh%@Ay,=}Y jNgbAT2U% ~C uJo] +=R%Ep8jaM޹{ec ;i~Gh#ȲeYDdſ !yqg$O|yDk~#F#,Օy>ɔ-cwv/Vf_.6C7 aJ;.1<\u\qWJDd\sc3uQ;̙@wc@ɂSkgG=\݁|+lČ#>lvPc7v5" 4hh%w6pѹ kPGΫ2iͺ쉋-0& P 8^Sc!P}nNdĕHBH%cp& BľyUcK&kruN8Vᇌ%\/]V2:cPh%#!/(|ӄ Ϡ~ȴP=j;*~]dmd͂] 9T@=Ig2:1T*Rah1"{u8ib=(BDsRd0IsU:о@QwCD"QApo`mV"XTJƒMWC{uYcMXҀ+vs'jrSs3mɠʹ`~b[nVIZ߰ %@[`W٧#Xϐsu*}#Y֫p0wsށ,r吝1U70~Ȉ ydƱ6l=!Y& hh^DȂub!_odUS[~3Ƙ7f?ɉ(!w RـӮmZػukTJpA)HH붤4ddX2(9&{S{:Ll4]64(}=1Z7E7Ah%4pA, :siLd\ul;+,ԛI,j%8jp=ֹ4&2Ύ _v[2TȽ;=BB'Sk1̢\^P$R"JEr> =U(((t)n"Z)5sOp#b⟢T/%A5PApJf'X1~bi}@ڊiTP8 D&ڸc=㇌ڊd Px!DP(4RyENTT 4!ptg|_&41&M@3 ?`fst<8WkߡȈ4 &3-?dD}A%UY!F+e-0,%d)-.("e2Kh'26!\6@渶x0^kFZ7u7S-%o Zpy="`e >ZeX!c9vفU /d/%dV2* ~ Y:MtOHD''򩳪ԉv+;_/>PW7nutuWw=ni/Px>iH_cҤȏ:g(mN,ImJ^V8'E+(12za5 R,j<,,L+e<8 NiDdV\v0+dܚH8uJ"xGHUT 1Y,6sh5zy0%އHZU@}=nnS0 mů{{ #5G*6 377NU5>U.2gN sSŔ}󿘋{S%aE=|}77^P~1?rӣ_>@"rfW4XJx(^ %4w}~鍰BHT vv`fQu k'*4!RO`|~2M%?㝅iO/p3C8&Yd~> [DיyglZ@L95Į_}Ս/ZVCH2'`56KQ4O>wR0\u3 Y$2zcifob$cqUf%+ᶎ^گmn*1WQa=Ƚa$f˷XjU󪭲DAB$w ]bxxx[=j%%]1n7}}2na|xwtDw>|/3 X:`#n16 #" {C{{>xpN|c: qrA`T;N[=n2x5˒ S!q#O*JYY|rH/Y8:ssxE+{⠄1t!,- d~a_ˏG \.6ፐCF@w6Pu۴R^[Uh$̈́ h#^_4aT6+S R:MkH!ڹbNq"FrG:qѴ U vJf43^:a4 u͢I ΢P*CtwڲSn&s#B'4}r]^fs^Y4zBf{oGA%{>q)ƮVMJd{e'0N غ'$oJ'w*l9w"RXCa`Da,I_= {I9w]ೋ:D?s:x6B]H_\tfA[' lKժWa,&Rw<& }#+xUF^]x!"ۧ*]r#y1)P+=(%ϺW|FU 6QjS%~"'c';wD+ Xw]Ȕ$T'ik0~6 F*`?=NpP\|لAS0di 7ĈOcy:[Bl;7c,:vdJfY1OaܓnDȂի GU[lEm=n#Lk]}}S ='8(bqY;}:q]VV}a',⫧%w!Xd¯B':eCZ*4,'\% r!Rs 'x0WH,3%nWIM13v y8`+R=B+e[kf {Xڹ.ї+{c=@"KGxF!kkMhVl涉LUf1%;81U{iu;w2?<Ъ,_s)?;(X@FpDG"b״3*ƕ^u'~<,'p!p8D, 0l2DMn0! ;(DW:JJfy}z2@<5Y: )v$jsUA[~6lGx,zpV8Y:r6:E!7O%! ^%Bp>z9V|/dܴ: ,–KfyBFO5!ztnMtnyXu`q22^=uxW*i3Ė  [dD%6I:0[dH156W\S%<8K!Dlp`aEUW ނ+jõ9tE^\La*ca,zUivݩtNc&wT,oLafY3|uAWW-_櫳qutuW7@Z z!".S浿d2{~!Cx0= b @^yPVS̗FӾXzLY 'Ph6bScC$0B+U ۣ lV% R9e7!`,>ᏱuVF*󘫺Jk-/&:NnUe2RW@bX5Q*.:jDwAc:@Zm@^¡odЄH"_@n9Y$R Gax;FV$ :1҉R9 bhg*9ܬJPJ AH2\ Å.V )iqLoOJF+xq9!#Fةea/o&[dyrXl݁ł':%O&4zw~y̯x-7K r;ww#ݝ5?nܹkf aB%!cϯɅ b@(bYnfSlQ~bioM47rC5 ^U?^o҅82{f1GY.<lIs'x,3< YReɐ"ȡxx)|#VG;!VDS9RV2Z6_!coTkwnd'y32s}}8\6Y,č.Vﵶ2G"K5FYuC`d@PqɌb^jjo6![c崛=BV'nѥoS}j޹{e=;+ΝwXBn;jԠQ#рОj9)>x4iZA=0ST(sh@2/g]^>JH/lM~?PTi(KI"R*0nsCI TвB ̰rg!(ԇs4A[Q ;*ɵuV߰ɝWm#d< HeAKT2+d~A >͉q;c⳺uu ˝s-ب֤u+r&Qs4_*WnL_z;~qRcr1}>& 2&.kgMvlE] "'w\A>A14 I%3ܮyD@ـ7[qe>wJ@bm$}C" -܎I%3,\M5ikVgrwNJ,ȡ^V|@H"@@d!X>͆CZ)r,2 ǬZFF9^1B&:pd!QLUlA&vX>OI=G*~AET "`P7<`mAEء %J: ߹1-,mg݁w*  YТJp8.yR!EڳY8Uq<6AFEu]g[Q @2$Ǧ*gbV2˵?=0d {F+k<6D"K'@  _b!1 $;Co*I6"}ELyf1+cY MQ)',rܨ uEغB EdpTf쌠jruec`IATUdϋYX{*W,_acb\U8J3_ Zi" Ja,([C" M&)7pi l0XaUjtku9wwVtOn@W+|㺪Zp (LFbU]1QM|2ʭE  =Νt9ivzO4(Y^p=rEFE -8qe@Pd;a_6[/sXwm@?ٳ?:Q 2Б!M}ZS PB)4Ae!3~ 䠄6 7B^ A=}C@!"~PPB+:@PB,@ ?A$zĔ?ɓ/YH/DiVD#*0V DWɶݱ^"c=+D"2Hqe1=Z Y T} MZdOV`@LV )Rh6gc:10ґqg3CEf<*z egUhR$DdčR#Ҳ!cXpb#lRP$Blv#fkLyD2}e./Q27?7&Q2­ ~z*(\F 4s0Q?dD@}Zrk楱f$Uuz;onʅ .9 &ޒd#7mW2j^ ,Cn`(랭RY;CPD+-"&wTm[E|;wlNH?0rװ4K;l3dHFgn ^e(!c4Cq X#?d$/7}g!UbO0h O,::KV;g\i"P z1[dda-t:\JfO`9'3LTiGsK#PbXe9@BEaT']X@f*g&YMoTEi_]i^pam5wj)b2hrr7KdP6?碼Ruik]V2,ίymP!~H`u}XnI7l\p.`ѝ;X[9j|ntݽc`YTJ:;Sc޹7&ugsv3+TRK#P2iZrtx %g0&;( p-C1@VuQ wpm#ΫXUgb8MF3Ym,0=W%)gKq(m,0YcvY.lsZo_l.?w}]O)\mUs?;׿?K۟>*Zeo1_?_{2;{*'i|.K]>`ԧRW#O#8jKƒڿ5A#|綸~KLWHun1mXl[R(xgy^kUtZpWly58Ca[4 !һes1%]C5$~3^b/7k9o$efeHe2d(ư;>P*=)>hƳJ#[#n/? wُ_~bxQbcwn(a>$/0`r8z i;qИ|1(O{<'0kA-q絚O6Ѫr([f]jV9^6`ڢ09 AXmGPE d}T\*p`lQ=nUmn1ŤpR-9sQW+?~~~&0V3]` ^ 9 W/ݛ"!F؊_G]Ѕ'I%Gއ#210d6eѧlZE.1d=u{4Ek 8=XdL!Mi p;cMv>d6[fN+xozQ q=l>o|t0ؗ1.GkCpnQ ,TقnK)9 L)$#|m!.WFCn=GY #+p#.̞ţ:4/V#ﶰ,}LS%"p6Xg=]BC-y/{*ݤ8B̓Qlu SHf^qY2NJufU>QLx51~f)MT;00#d7 "=͎@Dodsxj.PdpaA-\x7Y%/nmsA0wBsv@eaߝd 0ay']0׻bgϾMkS/  sdl@'䱳1:Bvr0DPy O hIVխjsB~MD2}y@"Q9 {RfȮ: *$@>Y!izze*14I\b΀wqOZ/~ !%+o);"'#p>Uts]1:=WL!lݘkoGNe#[BSOڧ Dn"^kP~`1,92AnD2 b[zE'RؘbTcsgCwqk/* w]BmMQkN@D26nMpADE|@WKA=T f n+zȞg:l2n_J|ߔ$BT B"US>Z,%mrajx+ !hT,IfP',z<-@$ F}ڝ{]kچXYWy]1h䓅(`N6`WE 1L"'s#~|䚮.aH]!/?׏gOl Xa)ב6W̾"[D2aɌ!eX ,TW Em!VA d@affEH$3*jD3OeQ&">2,^sa sc.V,D2Ir L"ѵՋaScdJ?`kxm5RrI/B&ؖjB' !܅P:HF9O#h 1dF\B l6^[@ oG%c\UuDH$3V 7h0udAr B0d! \y+1L`+a7F%3.~)`*TTf8FhlN lUa 63 8{K4(Oqbyu]Sm\m9AL$ӺlnkUsB,*@^QcyƯ| ~00'TqS]r8p̊n41 oV;e\U+sW^0wn-5]Ѩ7/ Eni]n>ݹXz]"eKXz&BڇScLw=ޗrGD"( @@$WrX%+b]P=0n玴:#M#̲S AR9'q;qD2GE>qD2=kpBlbsƣ8?:B/ )NJf"sRft!ˏ@DGFT(c;N#]8y7ۣ%jUX09#$k2`^"$+ \~?^ 0,Ԓ`{ū2 ?ܡlAlax!58jʏXFX BXǘ>0 d]GX`Ɍʵ]yqd! W ʵPHf4>&Jdk3zGS۩\.dKVr9]%wmC%Z{W5o_]%z w339A~("c0<5U !,r?@K]^Nr%llHKȐfeg*DvM, X9p@K: H$CVOK`&̨xYVlnl-^Wal<{5>@ d!Q\S $mVE"(y!R$c֖2t5Lpwnw~w~pu{o醃pu䯽VZ7a0k% D2$(~ Oc&lgHYGH$3Z8f~ox8e+Fej32 {GP 9Gdt$89"XN>āͼ+{5_*EUB).bd/ܹk:΁JvNP< Z#Pq@`,=C<^vZ&v-. v &i~pDZJs"$C`s=D`,vC:D2BoKbJ`u :EPƐ]6[.="drWpi^28 _N}oJFqAKF8UyV '8ldl%Q pN7[rXig{zCnՌ m@GN 'z`) ,63d'Y.}dCt ?s; F9#| t[b, =إR$VQvRBHdܠav2Ĥ_t*KGf>{HU>ȢPBEQ_"v2*jQ}4}΅ ]+ @D_,V $|VWp|eU:1XffhHu}3#Ò`Gk<d.J|8njgM0,XȂop%D3*Y.:Z^qLfԓ;@C##*CFcJ."9\JmZ8֮6ԯAY7$`L DZW`F+@ĕyBs,#@>:Ci|bPO2+`F<*#|Bh1aNZ'Xd_H|ry'C 9n6YL#w@(|U dkJwjɀ~ɮ U;J qu' $ P($a e'n' $b`rwvs}n%dC18%W9d)+iH$3Ö3aɌjc>xC0ī ,l.kQZ%zT`ё;@`%/5&H}2W:"d2Q~WdF듪QHicLs4 d\c=ܗ:apۭpB uf,W`gp *9d9Sj'I0KY;#m =@H܀\q컀 IGca;AEhBH$SOD2͜ôШc 0)_ bq sS"#C!2| x<[J({XgD8,brG5FV*HE<|UŝŽm" VO9 B' A~H}O< `)z\՘vT0 'e=Dqݑt{㝳\:Z|UUJj*Κ|釐Fh>SVfݢ+ܢP&?V2s+c>v,^2Ybp3ɼƗ@U[1H*>YBKaor;"EjgHvR6b8w 6gNo,u-#7i-.3u'fM2ATz2N¢W&_>pY'*.*9଀5sZ^\me\.2+K{#暻dt;F]m&%:WZ,q>5:7KDwC\u: ^;,hq榵LAx)zliM!+#?ý1V6vR+$J%!|fYSƷb(®p\iupYr.}ۥeޚ6{)E g\|k exn&z{;B Vl{ &5ZC-m#^C-~]/K[hZ(;VOO&:CC^C{8(j;a6RHa?S@Gl5}״>b# L0Ta z+d\d{Ru?7J=1/;zL@c7UlKQsd\S8D&/VaX~+9Nec"~H rgbvDLw҈_DfE̛SCB=2=\4 ú nlUl,!w'[ NJ)zli%c-{p+Ɔ}s"Z5/:SԊ~![+ $lDd}w@$IA헓W;=lL5y&1V6P*X$jwB>Q`f1@U觢ɷ}3牁-s柯S!>DDE~oh 29Ktrp Ư Xr05bK!(4}ݬ#C3^oǓ)Ӹ]a*'vH+3.jn`f PlE % PҤ{A̗}8͈ulX.=luqgh/fnS,g#HhaDFdzE'pQYHj-T$R. zli>PV۹)f'wۺ߭(޳agWSn z\c! D-iC㧽#b:TIp~6 ؼIfIIY;IGPOƢ~d`<64)d~G^^pCX~ YezaFa3ڄP_RceK%aZ{S&^Utd&3h5b7z|h)حق(Ne}"7ND HsOi{lSmo[']cAp=)hhu1Aq *bz#C-M J?A7-uOTӆ"6s_8 ͭV~6Had˞] &ٮ9? YٜAe2M2>E1amNbtas6_`u^AErlZ9l7ȤZ_쌙&'6F M5VW\gý sij~X)#mjD 5V66Wy2*Qceã]!_AqX^*jl,d|uuDk-\|dJ +.mjgn[(Z,+#l N͓,=lԅ%fkFݲ x|V5$(`.P{ |~;(*Lp=!.NA݀b".eh24ɘr^.z_>n'ާ @ hApjle3X$ŰNm :J08^^Ug!bM 9(^KWU̧hwQdWRpbQDj0Σo\͐`8{ފ*/xgAѿOcelN %zVwfm*Oq 9LU+=NeFɵ:ٓ~"q|"n|d%ȗS|aCtƂ\fKDW%MT<-kfDu _l V)WCa3UϾyI.ќHiጕ h;ZBD9 @WGAv䍏{ 챹36,㶔)v~O#%w ݏ<;keiKv@&m]8͖l%–X[xuVv6Yh#VgsVl\]4r+"8Bbjl`_SF ʈ)^$6޴;.Ž^YJ2$$R5AHB\nBjԣ!x˝oЃ9e f)sNf9=眱qzU;X$AϣQdfD}lp^T cfˑp<En/t(ccZ=l/?`8er/:?k8=_\e;X$7IuGh[=wж5Sf7׍̋z(v[\5O]߂6|S\,&@QjEyȇWKߜZ"{2g=92$ܢZyL) Q%xnk jzߺ .xD_O!8lD3V6B#ЦZ/ƍ|3ʈ)pJoZ7m~+dk$_$b< {ĿkZk^/IbpvD,3_sac4e6*l9EMro+s2U>we')_.[ cvR+z403mݺ.N ̵tlEUa@Ub5XJwusQa{AbfvC'3h =l\\=ġ͖"Ɩi W2fv-1Jg2|gZc#l$X_Vq\fOVP_ 's9:e6*(x"e(|쀱~O!#SWóZظ1J_`8f"|@&a#TNW]m9'a(w/82/_N=68W<8 )Z`\=2%gsڇg8 z4#'h.6{ K}NǏ`3WBe)be]x٤f9Jpg( y}=w[+Ph@eDG'Dg$5~؜ȰÃW{@*4)\6YW/d#Sy曧/A970;\Y B֖[lk{;x M<=tzNK'tIQE>L2É x #0E G,6wޙ=li:a~onN GlHÓꔈG#6|֙ƋUGϧ^D)l{L'S_;/TRc1 rϙ]iaOpKnf$+4^L1]H{G#jp `Azxʥ[[ ^h9 k(z`lDP& 7*شn{bؘ|bxWuqr6lZ=&+y\ä̞,ne~Y=vq: os2b;Cv*VO=;SlXxYOhp^+k9<).'ýIPuTf]lasO )zlirJ<%7aMt .&ނo=x\u+t@ 9[tEMrL=rA X7>م4G EP?ai/l9=w&߁]կ5ՉIGZ\*nU.7gK|xӅuOn7J+f#J^0.zI^wtEshaN bl䧤کt@UjQ=lRDA[O=fyV.nI9DڣQjl#:ôziNT85V64(Y2D5V6ɐQrb8 =rҧf)60f6A,.,ѺuQ:׽C-QP;#F7TCG>. :=aEVXr^O{ J^ث m/lHg_P o*DG,2V}jEMȕW6KVJmXݴ͍Tൗ LeWZ;''1^E;eўVxNt~9u^:/L`#̔).A&d9skʟJ"(* Y񠷨6aT#-P|aBjb1tf7`y\YlșQ"3'l_W>޵ +!ha$C^=i#dȬh 4&`'XZtaKsgZ@b4cm/l\J}>ʞف#wأJxO΍"?C{Nyk3zU j[E)ie_k`ӥ3YAMݫkB]3PH5`nwX #ut͖v}(Ғ7I;ܷκPI$`b:LB+b~Hʴsi]a9+fU>b߼,"؞7m{|6mv<7JN״% 32V'U)&6[rPwY]!ha)dhmk'+TmJW.;[?|Ib_|d[hsm:\2'v6=36kW 抜;İ鵋KuR {/v#mj-q&ѻ%QNa6pkߡODM]F |MnF*my1HW?g ӋA+m'@!m9x9LRGgeuu> @f]vgraua|4]l4a% '_oxP\(Y6[n;+ʙyڶ fˍ8;7mXg, +[<18sm SQHI @70w6 ߵX.-i|a늍.PdWNd@ X#_9ce̮~GF%2 D,gl7aup;8D4:h &AP޴Jν7[srSܑkuK&K*[3*bb<{{b+I9!N[N5(M{U |5 E;͘2=CE-w)kvJR`mH:DBqD2,\lOGHn/[˃A>bJ_cռT=l ]TSY TW5u,6F-)N=l5Ra46IHK*ԥ VAT %gU;MCqk4Qّt56gU^!a?iVqs6|ڹצ+h)GeӫMG]c0&Vn37rxFMNGo )UػY}> {OLƿNtCsxx|rġ͖vEÆnH'P)z"8wn;yܫ'A;ГO}hoǼ{u$拍р,c(uөQ͎tme<܁ Y^'ف BbZ!=l<THuD蝃лl֙K4S1 zPkb A-"Kgr94aϣ^3.GT#lr -) t-%gaM0]9rxc.LPcI%,|*.-Pe#;[`肦9^(_ 6Kp zQj=Y;09LվYٴ]SҦl9ŃX)Kx5/(()R+9+;=idspo0 ?حVbZ"߁W=len/ыslN.Ҿoy'xDP#WXPw~'շXD[xS߾oߌfo~7jIU\~ǷS1sh SUۯnbsWE_)lYlgN,6j@="bsǬ9#(zliYQ`d>P@Η}`>X&@6)pQ[ITI2DE>ZȹS>Q/za;s柯S!ǩ8hno)jau5͖"Q=YlXID!bsGɓ{9M|3m:U xA)t8Mx^W_# GI+F1(c|s@9#l6^W6H|pqX6[캙qX'ȲksC(Q>߿C e%O"71Yx:;l\H%ف[ %a# ?i9|bL[6ҕҬOm:ݶvkP U:D"UGm~<: fo>LB7=&v`oίxS MB0OGA7KYlYУۍꨥƏ]̼QwJLqXO`Pqp2t:c+u"9>gB+ss`zZf}e|XG_:8X:w`Zcpfkf31lطBaZbm^Cǩ-{Bf5\4Ȇ +.|sI8ce~]Zbs4yx5)5SXD kbfEUΟAK akquAt?03q*(9cؚb>&@ }/|=1 ;oo,6w|  wdah2㵞;YlzE HW6)zP5!umpٹeíSns1sl`^5!,$$y+V$<1)SE`q3j oO`䰙h5u`^žfV/R.wҮ:mkaV9l8g_l2Uz-.6{̪ =lDX'j`gv.3rBnCݗ6c B(42abN<,6wKnqXHgol$Zlȕj{Dijlϫ)j=lX֯J^A۫6/ާ4qz"]+[Ҵ:0m"wVO Y^-; q. [p @poAkݳ(E=lDZ]_2Jnw@ȦAt{لUpM9KfI’pQaCŠ c/܈5. Faչƣվieުwo֍/̾7i1#9b%/qK72g3`t[jEsȶzhѶ3aV뀚6֫tyWI6ʣ3'+dK.Iy5 4r ;ߔ;vHߺkFIf!7!h88T zH ;1[>.Ŕ ìw>]ueC0TzԏHZ(ۻ&(x#xWfj Tƕ+Y-l@Vʉ:bl`a$RG fs{N08) b1J gbr@364؛WQˈF1ѽRxC*3n:C$NEV8y6' xT1#i=lM ƖStӬm*OٹPs}SUڡ= sX9#%ߣKՎj?*{)wRVv6'Np&پI+j\Jh1YJ)H\僾!)EL+;GS]15V6>7h,̚Fυv#Tbsǭ n[)AvG鑋;Z9}=gG=$` 5oԾ=ŻZ<n[!gO kdb!x͞{Nv4ϜC;XùXl3E-KB9λZ}JsŦv6;Cx3vl,flSb4J#?Ev6_3$v°&i zl DVE;q_ !ƖJufs#; "WRoyA=94ʞB8@M+߄lV~e4b,HH l}^vy*fcSJ/o$`2'Օ&C %n6XzGxL5%鯮׸RmFxsZ:w@ch67x XIE [qۦ d_15diWC3nY/hw Cz|4*b9Z0KkK7 anQĄ`E1gt)A|llaٓ )q3`e{ȠYԗ>akVVZ+Wg||Olo xUn c|C٬;^C4Jw\k{y0[Cz'v`\x<%k'qhbfazf]CVuS!IigfQ9-mu\4 =]~Ia3ĭ1vLOU/ĥ A % xҹRx:1u6VWPTMO \J%Fbt?p/˟u"{ߋc.{&sвU<<E:AL4j=rBɋd8 e⢽PKʾV??uUSZvEPAfC]hC$0FbSY#+0MW:l-xs.rI+Ά =+(A ?tz5nzI,7/Zw$9//x*sN!څ EޫZۨ[b[9@XU#em%*8Sws3=# _5+}_uwAtavC%(c}3t/pAN'FMt=}Q>@A_J2&M^L'$@c –+.IF&I&e82IxB*U(<n~uoRԲ S/ki=lē4Ui);`RA|X/w~%F[IpAIDK{V+IfP KSqO1V6~N{[*k})ƍ։' Z]'S-C4ŻZj6L!x׸C{{48#,GX354 >qi5ߝ *OPXxf SPtiQx_N]]جnA9'H5lebrN؅}ju9_n9?iu#K/Kɷ;((Ǐ3NHB1%쑿I,]]Q9/={6~|)LdJi7) lb(;]FQUf-A[܋X{1 "fI1-ό~G]GPf~I"iG;SQu!&sy?#S" ݓ]A;V t <%5V64A4'rQce v B;ѻ(U!2!} V;Zat='&9W:>yl"|i/QdADܡѤ+fD}e3-Wz!7.jpD4mjֹ#7e)/GI._r#61' gWЎ׋r12^N߿OV'fp,A99kIl`X-=WT/} Mw‘>'D\D   |r{|5㋘6Oe`vD؂Y؁g7 \*o"%ͷlojIq8:l5>(d }KGuqEN84#G!6Qž^k?YHPª7jC: `~uWhOQˆ5j!9l :߭I}!- BHӾQֱn6@PGV~@IiS \Џ"e.Fo4X[1 諯VmM1MM Yk}3mPT_ H2fTYZg,?}ߋߒƔаSpxf[?"ъ|7!azmk4,5<(Nqj5Do`~JQ0-uta^̾/f\W.hlpY5{׈ħlY:)}&5V6~u^-ErYZe)zv!Qâ#|_/RS.8 V!n*Y[~uzPR\l~BH)Yg0oiZjP|R'PބJTgXӫ{'VL+]y`p}& Lz:ѡڡk?nߤLX^)$xd#llɹ+=SjlL97C 2 P hbг HKK6rHY[)^\ E; b]N]!a]š=<蚇N-L@.)@ͼ_W\_R1oju[Z ."}m-ȴ2>TӨ%0lG،o*CT⌕ISc}"eW}{b C>1Kгw81{[ {q@63֯l~BU6_Pށ[;o /(AY&sGr ߎ ߃z|,k*c|.Z5vvX6̯h7kbq(@MS:h}7G!O:4VYZ4$f65Ev6?qyss* UeGxBn*!l0YQhǩ^(XG.46·5=nvFk)gl,g+/m{Ls~qj+l Jk?4퀁vԕ!l%4yo~/kommLbTS*d p@$d_1'S2,<}bXP=|_C2p8)<ם4i>Nؔ:+h/ '9.4AH"ٴMlQ*l}|Fpvpvŝl}y8+NgSfdD!G.PƆ}zH;mì%xA+Wb0A=%İ6bQmJ.ԏkAtdA']#v=%dպ7sYq sc;Q|T=zCQ }qqoʙҊe9NBr0?|گw#+d-Aiwo>bOMIEt1sOyby7 ݽMlNĚNXl*yka4NZ״^ߺXLwCt"S}A\9zpWCF{yI:SdOː"H\MR:O k^xٸ ;o@t a=[k RdG2}ۈ2XM \-8A-Ezz;Qbl}6k"視$ȷ+7Gէ6(jxThGV%-)rb~yi׉.=j'1O!hfAl|x>=H;=_Z6;E]gdHU(A.2͚PSomXo5X4N.[ D\S&ƺ+kRL%P3׸e 51Hjs^~ce!TuϻD\vk 6`Z3W%93) x%b##ԏ2fm/;)=;9)(ʧS7x +&8hĨpZ,iƻ1k4Wo.'t zɓZDP*ZfE`O#c¬QµXuTL&G56>nHVyoOh9שSTM[hk\DZ0@`uȾ7ս>n]&jSLG=>]0>|Q" *4wNhMMr*$HfI\ 3S*j~CYǼkcQ sе '96cUL7X$`~hi#[]_H]sO7p9.}n8Ҹ&:d+V=@ ԰&~.Vye<6lL;UwLݞ*#̌^:P,\溛 S9u<zl7˖2 Ujㅌ_6KO`Rqb*'xiDs> \=rMZmx8;8]s;3kl\jlO6ˬ:.z @]$Z@Ʀg mrjA-љnA^M Ԛ]Aꥳ0y ΰk3ze͕۳PBq rXjZi7kĄA|zM<$6gܛAgLZ1CBQ˚@3Mz.x¿ǎsǵ+nPn\||9WFf:Y<*> {P;XN/MT[Vn.zǚh]-[tT[WM7maNwgu5߃|[84T'im}/߇p:5Acp,#9c݁T>ؒIl a0Nwy1h(lۧW]zUSwAceTW'Ty2m:nŏǦcVZ*ѿo \gO_<9â.Q3kc0t*U+~v.]J$‘ U%.3meTbUMaG%*/Qaoċ KGtU^>/k Ag%3zx>ir?nȥ;i^}ޏ7c29½5AwTe/|G{!Ɂy-#juy[1 x L= 8†8n1%Nہ!s1ҩjGK{x'7[CeZ^W):6pSLݥc|asɮ*h)n_B{E,Nyh=ab"6%XȞ ru)Gτ_'WlXQaOv G|;Z. (=PR`%{F|PnǠ~%ɢF0}~Byhƭ66NR"&J _Z+%ꖠFr.w+KݓzOm~K `((Z&%4/@E`#J}!5px G+xz9;],TUB{8T͒ W8k.Pt@2ʢ'MQK-`"h>?"ጕM/8Wۑ_W")Zl 1lxjls^ۍ^mP #5Ol"8s/.0:+ ]spg)PH.E JY4<{3V6.Npj AXzSSGWgZ6W{E3AچѺͧx8ceJ_egl}I$ iwJ#Sso8HA!;(x!-HRWQ\KФ~ /#E?6AuNl'Ilt2_?#ƺxvÇCnޣ˳ R*px\,`(87I6>Mpf lrJܓ_Rce#D>D&HbsƬ<ǿX3ǽ{OehI6ƗSЩ3k\^#lƶ311ISFˁg( O. LW?3PMhn▶ګO h'oBK+d(^cUӳ|m;hƸ/tMfI8 O,y9B!@KgG}`_v~] ςbpA=3GRg *Uj-vu2`KNnت/3Z :,cĖRf|aCՂǼi[s~g"6K*f.[Ms_erI9F *nS_ ͙F8Zx4p╁of3F6Jet]OM{= l^O3hk[Y ]jvѦh/Ck?_O Hbsf B30t+CGCH\W}"ľ5~(_oBpѿ| "p}f1~ԉ^ęEMjM8Zq[8 |jضMb$a\а#Ylyv+Wud=ɩG[m<]:5V6|HeͫlFm%Nds~bξI6Wyy%W~ϫ gn:(ClL0usSȜ:}B$/vOe$;nVAHv|,3MSgP%+fJkzN6T1hX](4dû(vqTE*//|a׽GwQ1ErTaX$Pga-;eOÅ@M0Я_PeR\ɫ)g®im<*˷aU:RTA4nb1ym:_&FZP"yH~!yeAw?>'}{1yk1j{y:H F\)qYA n:hom 6* A-D?s cecdߺ 9 jDv2fFo}'O  Z=sdh-*` ѓN9ew?ŕ{.AW`̔}'GS/lCVHÃŶb{{7b*ؘ,s#dwJjh-ǕGz0;OO?9_xg?[ fkuXqlɩ^z| YjyΉbt6+ p FTgӱ| 瞕M9pOxM}:RI9שSTM* 'psK𔍱Sَx{37d{9CP!E;zh1iǧQw6 4XNAyН1=3S,fT7#$+%7mܲjjcԾYȰD?S;opT@{f5fO5-;SrvPvqLK,`1gfSbs:rlSPH@7>b$|w_+d.aםWPuu\ski*TьVZ8a0 {n8_y|S} 0Wb0e[?_᩿y@6oǧ|* G^Kwշ_qHV..鱞Aڭ"@JV<tp$ƺ`J U+EC|x 1T6ho8tjZ`6/ K(Q0Hy<X8=KݱN_FVfEn%ͦj BD]5x{ vBƙo( 4ul|/Nu..{:wǺ v5ʭ5V8+֠p=gH{OLƿNt!RM%IV!7ᰟ<C UoAh[rU/ήvSm&kFtTeyn:ArM:+8jª rڭĸpo[̘0mE|}2?#وIX[ ۂm~1hSNK4f~^צ ajwzlqTv1uSr6;Z( #tu߱EߌYhҍCTANeY׭jbϷhy;]̖^Vf6TfKb -[[+mQlfϖ_:PaA%2X J-A쀬D\@Na/z]Oi{H E$!V@l!~NfQ̡ 5V A-aAǩr|>|d&Y}g8W:*\Xِu A;f;Y EVGD6|UBQvfKTC!ϟS0jm8c>/lhD* k5(^&+,O|Fjl MB)6Rϼ9!r@MrM5/BƧUypQ-"͝"̰`^E5j@&ś w:[P@U$݋9(zl)!p:% 6KAUIUL^X$&/IWW%qo&l6Y'8n"([ԿLeZpe#*,ʺBy,mFaD<`Ҭo!Z{kl;`4YutFҀ;[ʿ!XۗslQnZoKY٧+wy\xɝ.Wpf >%/=eDff6 r]K~n)BfCŠg]l"vzrҜSn֝L@|?){j6y܇X'B+d5/ġ kV1V6V06[1=nz]^骀%}I@fF<[͒@$'52^4M1+?o? (+*e`b!Ŧ4W}lyk h_-w26cU},6JgA %E]'8a# 'w Qce\x:O~Gvq+'sx&6TFfPhuj`iNx]" )%"nw7He_qT7, Wx܏L"06Cv?8V;Z ){j|ή>fQsDhc Bx cÔ$'%ʆW^׿G / ?忄_~(iz&};vgF$۲}%p-ALӔ FḮ*e&,Qbu؜i, Ú 6/=4XژGC{I dsYZ; LXݶP{=:˱Oߧ> F>rfKrͤ`/>PnzIWtYq xJ |,Qէ|iGWV*vHL~,~>6}=0(YlW½ٴ6%8 YG+ ,(V%KŒ)qH†|!D>8,TX(kwAf]`X j_~hPtԞmEֆK}#)ɨ ㌩R4C3Hbs<MfKQQXԅAKᇇĪf )`:Ã!8z6Jg\M<0t+:`$HbKW}b ?s> ~cƏ:\/#W-tl4IUh.te3L$-|:;/`,pbB]Sg#{6>0]u AdOXk~.rXأ"약#ب\z'w8,ڱJqJi1Uc'Ma…eWBC. Ew=Xj4ϥFr߉bC \k^)q4Ne j{30>?r?@K?o#~ '7-堒M= ̗FG8{Pc=zS ͙vMo=U8wmLjNxD 8&Z ^L&#=ke5[vR1ij,taTeó~S{/:lP* .zC{:6A]$׸sea8uPuvge*L>-jl-z{6IѠɠI-$6glykjlH\ z/6?cFDMY}%gl,̥Ij$[1`K?H뷇qfq%Ոne?; _|rHsR-|2cQc*hԧ>1Mr~nMH.~eT hv}sE:٨'%RG;1V65I&dYfFaﺂ9ƕ W7k6VHLx`ʗgVh#,dP&ϹzzLLY?7Wy噰v1O G˥߫3'R~9 E%ք(Fk8Yӽ?.6oϙ텑)&OЕ3f5V6KA1MtykcjrފmqeA}x9-r]nq7Pvت/zY 0(S:,>zu8W{)l|F-P0xx^iLMf 6g]H5x(F5ѐ4pCyD,Nfpk}HO(zb^oǚ5CTYx{)E6?s-;c3)ƜI6kgL;!F1~Wpxj;yw%KD~p~^$6g'1V60gymK0ON:%F5/|0˭լJ`7o x|gIݿ ѧu2p q`$sFi?kxpb!*&_`gme%޽1s(XٸLznπzJ/¾*bCr:ݛjS.YtQ>ƴgl4[.~W!9l~z_BX0\7J)Zv!ܨ .wuHLVKX>ʙN (!qm+~JbRTO9ּ8.pȿ1] ׸䗼^e%DEz\QNaC=4(cT]:7C>0.Q$9Tg6K|'Gv@J:UU Э_60K^J4N͵^U{Jkw?k| /{U mĂ66 י|TY0h)y{b?ubiـ+ յ.]GumZ{ bsG6,(bsg;pYnZ&RC8&Sf@iGw{ =#ƥQ5n@h[[U:P xY?~Ck?Mt њu[DT/:Tfˍ˦ "M 8_MV=\ຄ>۫7O$}%2tࡔp/lڠk ijV 5ZVŝ`~uaE+gH蒟]ػ}}샨O}{zRbH=f*z=eGwH~]wlX]^`ce~ Ut' L܉Kw.Ds/~zURb3J`//O@ Q]t^ϋ 3;mU:ɛA(Ne|Phtzv++d1'7]facknM JC,aǖZOtO;Obj+pCS~j쀧E(a )~[2 ^"ZV{f Ъ5u*΍n`tgT=\Nӄ!`7JU4qg.ʄ!r.KBgyx4]).6{7O':A$B&J l @BOpHI8KSM-.Id}S US {[L tvE0wfQC.(Ǘ/yZʻyWw|wwzxC5ayE$2jd:gYٜᄊ pfmg\S<`Dv@^0##me+} F6Xp5> C` K|-`| 8TL(Xg8'YJpmU)r"5V6jh {&g@uGcu8K rCEC%8Γ:=lz zG,7. яAWGg-48°a-9SXg?҈I6oMeC|X,6wu-3ӣkn?jS2^w #†D8@MrT}+3<h{DL^GatNYWD{Ժ@KPH҇d?>-'W?,.܋X:iX}&Tϱ@'r˔$`ޏI潑}S*c,¯uJϩ=*b1Szq\]p& qZ&#ޙHcRp(21d]=WS3Tio9Ci>}m72C߉{7 ʬbl]XU)6~] XWxD}[mLaK|0dlppűE2bkxe/툵y32[ܘ́2UVq?~̧e"E`=WC ~yIi׉. 5gt́aM877cly#{;efˀBJŎ89XUx< f쫢=>21 /,Yz O1flgZp;Ftcf7J8 +c bTx zc/^ĞZ(*s\ܢשq=ӥqLtDZ=*5'wYzvD,w>C 3i~;pf%1Sm' p~B^ JM׎p)*Otc@rXau'@+d}AAuhZ.?xgOKD;}g1zDDXbM̰jtwZl㉝.5iWvR`5|}GEUEE׳fjK.bv\5SSiq2dXwNM~Jv#,6} ceǦ| g.AfYObLU޳ob`"՗Ԃ:vPbcGM9;&kݨh);,6w f>s>\s=]E %^dX75V6&Wj՗iGLwA͈ ˙Vo+-l47Wo ^M;#dBY_5m=Mpv;`oJpk7gH%ȝ ٬u^Hbsf5*9]b 4۳Q3ĝh2rg1$fh7\SW׹Ȉ3:#oDDߜhC~Ic03Cx-WGL2V8]zŬt[(&M^0.,1 v' ݥG|zեXe?u$X$U_Z}*udߞ6{[Uԭ'y9ct*A#l6Y:-e Jï+<Ž1yMM!D{)/Z;~%8F?7Մ5qS3mG H>g.cY|ږppHC)C,R.xS=MtxoR#LքEEA4wxD dȫ1;  -aTiTR; ~6tL~û7͒"ܢƒy(؜)r,9<  s#L9Vo6~Mm5hN ȭH<gE*z%~(6>i։I. $B&]YW:jlI$A36Y9O5V6HMNh} >isM!}c[iI>`5V6jI1blՄ-|Vc1f}d}S'bBƮhaaQ<[n{C[o?Ic#lTaB":2xn{TP5B|. Mp78Чo&xӛ7 |o;'xu+$spb}՞暈+&g rDGv& s~Il|-z6?ukF.47 81m1=rޒw]Q췭mL>3%Pb}L/u-1ElV-N{l9e}N\6q8m6[Tew.ߑ^lvOEn6-hDR(6*[ ]Def7b7:I_J6A\qbȨ/o@*)xʷ C$DS[yO͵w|=>h{n\h-U͈bAI`ۅ\ˬH0--BOΟ3Y71)FBNqjl:LZ (ϾI.ri-a:AiC^>%f+1+;2%bn{B￁n q_jg6|oxou>TUY%۫ *Ǿn.}N$jdx{yUuSw]n/"91V6ɅӠ.NVC%$4˹ L: Q\Tky(zli[Նi^Z 6DFЧs=0)N; Ȕ͈*؜^?]% +Qo-"Sn odV`oc"ȝeֺ&(H=lN0jlM(X$CrX,|OÆ/;fNt 7^IO@w:ƏKm.o=_ g\ebY=5$f=5΄f5i;]UHΓbc%;L=l||c+.sCMp7R>:Eot"WqåHZH/6K8, ƺ5)OpZ"ks uj$5(8ʻp'Fo{\Dib#tJ*H1d]9)tZu ҸzT$".6{=gɞtZ !5@&]Ϙaۄt=8uR`.FYA9͔m)t.MhlS7vO ܻ8e/$KC>{7ʤWmĠٴ/Ѷi3ﯘ?wH`d %? } rn5[U oD䳋yoKcpBwB06Ъ< X g|A?򝥴k,vr*p[^*_ Bѳ#;%Oەf 2A0~QKyGtRaИ1sz̈3"]Xp:*S/"rj.Ѕ1NVq!_+| 'x-m'PBz1M@ jnr[hkeS' *ܹZ EώbZ(6[l.;^/OqZ`SΡInoBwÇ`3үn\V (1zֻY3d{=fdml$+լwQ4cUɱOUzO|9km'. NL7[nӫ+`p8#y#j'JMrʼY>LV)ٱ2熫nən=&$MϙQ^7OInÞԭǥVA#5\0/A3'VH*4^bq)063Ўp)Ez$6gb0{0\@<#isj>0bG/d\C1:SqzEzSS/!ѴW7=ZeSzy1~Q?oU#qgFI.N^]%haį]< \X27SaS+܆MZX=>rl[|WJvGҩzVlNoљ*1V.J[_WS06t{+V/Dq[?:V]Rt{#bŘ\Bz,$6g[ 'hᲤ4 F(~9$E31׮lK eq''LgLӒ,&:m˱fkM(<+5S!L1+T|9IGLƙ٤X$g'SDAZS$諭Amۚp<.cT>Fݜ$I 8Hy▟I\+k \4" K*Z;b Ax-|PߵJ *"+5\ՀI\X2? HLM5V9QHsha@6pG39 I o1>ESݎLbl찪|!{ fokVAzH3OdXX$"|I_y;AtvA?)CϠogИk;WЂ5~(_oBG>DǤ)G-w(Q/ ɧ#Us=e;`!{& s Hw Xo̬s ^+@ȕe >X =@B k;U{!*ۛJ;^OC6J LeN815 x)y}]/Mc{HE(|rJ<9q78١1$1b4V$޸qxfX=vZMD5?W4Fv&WYz畽[6An ؽ 9Otrƺb1ևHǧ;j&M]elukmY_UTdcrxemӟŴ5\Lv3bLr5U}z8!&+ Vkka\Ջ!@.XV,Quo[7$EޮenIkfYʒNsʒ߁RBy&,6I(A8@lƢYɞ/6S> ,6wr*~Z1Y=^CjJU#h9|,ImfTF Q6 j1xy\kgI)Тp9?R`">ז+As>橱IvLjjl\]ا"WXx5^O5bLYO@c](:F/{*X*!`FާL=Q:ms% 0xx<"bW8]+d#\rW3sz!Acˣk@l jrو 9~cJ:zL QU%Wq߻Q&Gm*DžOk#.9cHUslXSŞs`s~R@)컟+dBaZkڈvRڅ{3!63'b\K(i<lq2M3s/2֦HpG2jC&b̔?wɝG:CX||*f2w)ݾ|>c|BTͻk滻ӻ=j=Eʴ#a^A<;{?kPW"2it7e}\.7 Y 1Xb$؊shz-g~jlFq+U နDR?i~sD̊.AiwS`ze:EgTF]Eoq4хpWuG De3<س*5F9=LiSޟ>zlm)6W&@|馓 iUOв#5uU@@j$ͣFDf; & -BJbJøȴ$RN-8^tB D˩ψGx0ϙ{q68)f+щ0HUX@ 稗UG{ <~B)>pZMYnJR־Jp֧=MR~Ŋ Q =oy˖:[BB͙U}Qce+VH(("jԣO a%|+>z)Kgg?xxvg`1Vvb,f@P|;}blӬP|F./:8).sxUW*-y<ܑ7l R8fYGK]؞2bמXN8eWͱ9)zv L'ƺ#T (B-;: dHdS" Q^]0lB9dUZ&ڨl>к | \QÌ%8#iIK8cݑGjńFS Zhiv=f| jwGP@GSgD##Қ s&w5V6n(zؙ{rg8F(zliVx]ےy/# v2ud1V6 :!//ƺ+uR0v1{Q"͝-e¹KHv{FlVS&">ަ<'wp!hb$Rúm.?)&ٴ<,P<8ם1`F\[)R E5*p `|:EɎL2E?z{9~ueRǩ86wztXE];M}<Gv$NuƞG?&N5j$_T?bs͡~5( 5V6hCh W`hafp%W˒Cг#aYܲ8"T_GvdqZSdSce\Hy4z1 1Bu&"9 (D}N8>:Ӹ&:dK, POw@/x6(XTߜMTSUϐS+1j,[` 0 0y8֙;_C0@P:\:sE=lȹ4 +P`YըdSY=9LFO 2 ]E*^grVP'^D!+䦸:/^..rs0~5`|Tϻ,^z7"1cb1Ec}.}6Yxaٕ) 5$9S8nSWT^&~LBkoV0uZ3ԗSZ+ $ҫu؜)*i&mс8o*4蹰;? yP;HF!Sա[K~RXKr|ej_Ri7u-lxb.c{o .9ȞSU(:}ǓkzX,G{K]Po w%A3yP7& a̝bvӫ.=V*ktYr"CtZ8>֚eikm[# 'gH\]x x}xZTZ"I_V18heN˅Y!bƇ{\R`#1SY؜q,qY\>XD0_%du58_.rUDA,وƭ=H/</E).U%CBÂd+ h,e{dL˓S%bwڲ +9!!6 HkL 4\fa#Iz?O) :XĐlNc NLXOxmX:^uA'j u(El$?,q,$^_`"!b=5Ce9t.ifK{Px'g[D5fZ^W)V6p5r&}1fyu{-qaY[=/1Mg"^L\BLu2S\ 8O6k ٠/|nL,dDQugB1alR`%{F|X)Mnנ~%ɢhl$h1 c'l!$+ZcHu]w0'Y:BW<Il5!TJТ^ /Q-0wA^Yj[j}CA2)G~L`lV+q߅OX.:=uW@ja,=,w!E8jp`6C6h^6j^׸t!@L2ʢ'=QKxv3d.W,f=+d_p.D>oO8rsZ7bfTXو<XڐU'6R j$$wAY20vKz\6O粚'rp&٥^\j%С !*'{r^pXE<"͙6C N[,p'⌕MϹOd$NsʐZ!Ϙ'al% mCRB.F%cH~) L[ ;}t=,6wg9Hbr՗6?v&O1V6r5f$6g˓ r)px\+`%87 N;Cu}b`T݄͘)cL}YJh? HoPNQtSkѓ0 _b~?tM%V~ɘբgf@_La)Mc:\ Mm)z9YҦ`W/6sjr-G l_' G@-ǜ猕Mu5F *nR_ﲝ ͙F8Zx4b━pQF6JetUOM{= lܕ^O-hk[Y ]jvЦH/Ck?_O Hbsf B30t+CGCH\W}"ľ5~(_oBBk3~/߂Cyf1~ԉÙEMjM8Zq[8 |jضMb$a\#Ylyv+WuSc=ɩG[m<]:5V6pHeͫlƢm%Lds^bξI6Wyy%Wb+gn:(?lL+~`}ٸ3r]/S#u^؆mԭ^ 6&tңZ2Zqф^A$LmSO-#Z-+5vb3}fr⇗;=Bnsbؠ0 %,tl04¹gEdS0ܓ>nSNTuw?~u88UAdždG1g Abc.5EsM]"͝M:w P#dkRP&m>>̞:]lsf/ 6POrU{}tz6S>T6\Rpp2-OahFaRY,?l%bsNQA[F,ʼQI WMfdn`69@Cl>٪zrEn|3<MlP\@\^$mz7n!`"cmzz, O<<\͞"@=)J MPѯ3=pdoz$PC'] DXs]># B`q{tOzqsf)wHr9w]5`{lFacUFDW- .EvWwz/D_WCTELMaFĀ.xA?ă.T/و81ʟM3r8fl+1v#lxxk(TE;zՑ*5@ YoC]z!N~ jlN ;\w_Cf TLq7HoB{tGDPeG3[E;`hU}0D=T7QX<)|S߾ o+12¯<]W\~ǷSRQD;ۯߌ8qW+XϠ P j N%+T6zvcAf,sS.vUśh[]N_FVfEn%ͦj5bH~hX]ܾ7 ߥ>/ЖǗ/yZʻyWw|wwzxGb¸Xܾ;go吁cʪa5vA%Wx&szL3G~װ+Sq&u4䝪NQce C-޽NcG}n Oim>5x?vLĂ|*s51V6M!}_c=?H $T]i=r!K1> `Tм&׎ŋtܵ0Bf" 8P SW1m2%]urH`(.՛o֣mo;nÈi/;rE(i?H?2;20L:g?%Q|aC2}FvV5k)PqzXZE82g/VcmF\"%kr,ELF +3SL=l%ȹytz߯㯡x_FA39&_86NKL_?)iNcΣ̃:nM O=#P;PEPk揧ƆK\.&#U3ZrNNM9v%IGp'@)B1b$.H?;vv^FAݗc#lƶ9ՉGƒ wV#`D$sLc ۋw#o{اf=EFYo2 i0=91R{V_m8%DĄfM v_~h$h4?mE6'K}#Yha8$6g|s ESPsx(؜1SUc>5jnBFHWrM!1 [ju/)^ݴ{1oG7vRr s G-g0 <9W3V6I$6g 9pEl5\dQ٥6ӫ.=V*kt`Cce58&΋3<6Oc1C^rڎ$͞4v^$03bڲ̦y7m@qJE66?a; BޠB x&L,ߜ_{Ѷ:>h,R=AZSX()Le4n?ʚ:MldhV5.F9|.\0'0 Sp0&(Fp#R.$2E6|"%D2]I)*aΏK&lSacexTV|*d1Х){3ʆՅ}*@CA՗*ɮ᜜iPjk;lz sSU׊=5~ nxdy a~Ժ *%nUAen6J|w0\]տ=oG،QqLbUu(~"k? ˷NpXJt7ӆinCqӠwQc7E /H82=j?Ua;) ۥe,  ~W 2P3X$9,w+Oг"wX/caMuNV"6AN11V6EgX=lP@Fc4.L4ܷUShAOmwWC59ُ)bl S61V6VPO85O.A !nu_#uZ.-$ In&M<~y ǯvs4fGlP3-.blMc=1CMr< $K3V66Lg_ugdNY:R۾VvH0¢# ztfaVm>EL~˽ M]}e r $bsα51wU T҃o@0ۜ,(VZ!5d6"Igkhɑ?*6olFԖTa6R(eUaTa6[\ސC4G̭Rf{mElfK˨SX{>GaW01X<|vS95s|M?QC9':@L;), Ihb8E PN[P;F5P᧐s^.9lgPP%qtSX篐G#bPTڈ,~1MeN%? >㵿|侘h~ G`SoJ?wӈ?ogot'XR%,vN9ǿ~[hߛc>e߿?zސiJ}Mt3ʔkkF0jMA-Wh O]kU2|6ܤUՎ9bLAîN %8z[(ؒB%ǂMyAq ;F ֡OGFه- ]˶3־C*I2JUβ\l;p4NdDI ?q~P1=sk6۫eGBP3xC J:б!IE5ދQ̘b>i@'?d Rq|0fB$̠0}rtbnŨt+| -zŲ:&{XDƟPbyB4P_ ZWUT&ў^Rևv#5I rb&n/@pwG=pӌ1|w&]G:l&) ڃwv#$dU;博:T[{:v\ lF8R k߁'bUlR klɧU{"Cr9>v&m;LήVA>r?x37Z\;Pc/Z\Z}o5dSŔaT{P#L| >^6vM!(wa 9>z[]mЧG/dO~?%l~hK,uIQ:clBݔQr}BaRɅԴo 몡;=uPIa3ĭݦLRAK ZXHr|CPEx:9 c ySOTULe9xM5z 6 6nabct`*kv@H)s2<6ݱGȆ-"ٔS|@ȥ%egorspB|_ul}v_<9 pd:lZYnTrSPP1 ۫&^6tOO(/䮈u<7g#f= !rvv>a]"5EEh8(' . Tk ꚃԷLjU (?ט-:גּS ]U'\ͪ'0s ­LS*GtRu%ߩ_͆‡3٠F5OCd lTWSWQXVl/Y'3j>mUqw`2ǫu،h'smzGE%(a ̯F4IUtf{Ґ@E*:uJX?O v6<`߸r\hw9jVT"AKBw1EMYsN> ~Bžhs . fYi|[_Ggw䳙a]B˦'<Z0$Hd*R鮵e %f}J86ߪ'zCdCdȝ`\u~blBQ췃ny;v 9YG7wε}!N>9ؒ'TeCr!hV7 kͯrn{dE-fsUp+Njbl|և&VCq l#6cلBJNݺY!L7%ѫϷ!> xj7n mnͶ<.a݁V[n R%gΜjͪEܙmބlZw!51|6r {Eƀ\"ܰݬdf XYhחwݒmdf;B9l!1^rXuSSj|z>C<ΆbN? l frM?""qU{~{ ͈ e>Mh;;z x6LMsfLܻX@0G{xF8y%>c&r#ƻA8N6|/Vj|)`a8?U"Õ+]@{(v^[ U]Lȱ'P R~ 7s&&RI\xI>gZ^wWM$@ >YEPǪRw7Nk -\̀;K&"f Eh/r- 3E:>6~*<{,ێ0v"Rdm'8˯¼ۥ:x9Ķf_k%/u v`YV66T6g,o4TP6Tƈ}:>6 * Mo[?,fl.kc{*&&5Q1nb&L>۽疗}{- B5>:>6Z> Rm|l4 ބZ,fATWWS`|Xxul}S "ӹu|l8!*pUC 1>a|8xO\t=a@`ءhWfԾYB7jFE8fAܣ׍Bԣi$^H1$Xc 1D6OF۬BlGQZn툔 csc+P~{&\Fחn|asN kK3gePxj_ Zl7^ .MNp9aS̴SU,|JS޴ , A1ҊpJCu &vaݘ@vj?4A"|&ք3]s1g3YYml!˦&yUG)ed8& ZԌ_n.*]erLҾ5&(O/b# 뻒 w&! +zZ=1P61e~d/o[q8mK_o}i>~?w?-W۷?^R&J./bugsx-1.08/bugsx.c100644 765 144 43322 6416051657 13135 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ /* ************************************************************************* This program displays a list of bar graphs for the file systems of the machine you are on. The following switches are supported: +rv reverse video (use to override xrdb entry) +synchronous syncronous mode (use to override xrdb entry) -? help -background backgound color -batch run program in batch mode -bg same as -background -bordercolor border color -borderwidth border width -cycle # of iterations after which we re-initialize -display display -extend_print show extended reproduction info while running -fg same as -forground -font font -foreground forground color (also file system bar color) -geometry geometry (will override extreme window sizes to apply reasonable settings) -help help -iconic iconic -interval interval used per turn -mb show menu border -name run bugsx under this name -nobreed do not breed when running in batch mode -number number of biomorphs to draw (must be a square #) -printpop print the population when breeding -rv reverse video -seed use this seed -segments use this many segments to draw an organism -showbreed show brreding subpopulation when in batch mode -showgenes show a graphical representation of the genes -synchronous synchronous mode -v verbose -xrm make no entry in resrouce database help help Version History: 10-05-90: 1.00 First version by Joshua R. Smith, running only under Xview and Suntools. 21-04-95: 1.01 First version running under XWindows. 24-04-95: 1.02 Lots of improvements. Added resource handling, -printpop, -extend_print, -number, -batch, -interval, -segments, -nobreed flags. Cleaned up some other code. 26-04-95: 1.03 Added -seed, -showbreed flags, lots of parameter sanity checking added. 26-04-95: 1.04 Made sure breeding subpop is selected when user clicks on "Initialize" when running in batch mode. Fixed bug with handling of -nobreed. 02-05-95: 1.05 Added resize support, changed #ifdef __STDC__ to #if __STDC__. 02-06-95: 1.06 Changed the #if __STDC__ back to #ifdef __STDC__ since some compilers rely on the ambigous construct, changed HP check to #ifdef __hpux, updated resource handling, updated README file. 29-03-96: 1.07 Changed method for checking if -number is a square number, added some (double) casts for sqrt(), got genes to print, added -showgenes, changed address to Robert_Gasch@peoplesoft.com. 20-08-97: 1.08 Added code so that you can select organisms to keep prior to re-initializing the gene pool, added -cycle flag. ************************************************************************* */ #include "bugsx.h" Display *mydisplay; char* myname; /* Name we hunt resources with */ XrmDatabase resourceDB; /* X resources. */ WinType main_win, /* main window */ menu[MENU_ITEMS], /* menu items */ draw_win[MAX_DRAW_WINS];/* windows we draw in */ XGCValues gray_gc_val; /* GC values for gray fill */ XEvent myevent; /* event */ unsigned long fg, bg; /* forgrund, background */ unsigned long warn1col, /* warn color level 1 */ warn2col, /* warn color level 2 */ warn3col; /* warn color level 3 */ XSizeHints mainwin_hint, /* main Window size hints */ szhint; /* detail Window size hints */ Pixmap warn_pix; /* Warning Pixmap */ Population G_Population[MAX_POP]; /* Array of Organisms */ Population G_Kids_Pop[MAX_POP]; /* Next generation */ double G_fit_thresh, /* fitness threshold */ G_pCross, /* probability of crossover */ G_pMutation, /* probability of mutation */ G_mutation_std, /* gauss fn STD used to mutate*/ G_weight[MAX_CHROM_SIZE],/*weight for each term */ G_sum_weights; /* Sum of weights -- yscaling */ int G_size_pop, /* # organisms in population */ G_size_breeding_pop, /* # organisms reproducing */ G_generation=NOGOOD, /* # generations so far */ G_switch_default, /* switches start on or off */ G_show_genes, /* display gene window */ G_current_width, /* Current size of pixwin */ G_current_height, G_org_height, /* Size in pixels of organism */ G_org_width, G_x_scale, /* These are used for scaling */ G_y_scale, /* curves. */ G_x_trans, G_y_trans, cycle=0, verbose=FALSE, batch=FALSE, batch_breed=TRUE, show_breed=FALSE, upd_interval=UPDINTERVAL, segments=ORG_SEGMENTS, selected[MAX_DRAW_WINS], do_big=FALSE, do_print_pop=FALSE, extend_print=FALSE, Draw_Wins=DRAW_WINS, Draw_Rows=DRAW_ROWS, Draw_Columns=DRAW_COLUMNS, menu_border=FALSE; /* menu border */ long seed, mstime=MSTIME; static XrmOptionDescRec opTable[] = { /* KEEP THIS SORTED BY THE FIRST ARGUMENT! */ /* the char * should be XPointer but many systems don't support it */ {"+rv", "*reverseVideo", XrmoptionNoArg, (char *) "off"}, {"+synchronous","*synchronous", XrmoptionNoArg, (char *) "off"}, {"-?", ".help", XrmoptionNoArg, (char *) "on"}, {"-background", "*background", XrmoptionSepArg, (char *) NULL}, {"-batch", ".batch", XrmoptionNoArg, (char *) "on"}, {"-bg", "*background", XrmoptionSepArg, (char *) NULL}, {"-bordercolor","*borderColor", XrmoptionSepArg, (char *) NULL}, {"-borderwidth",".borderWidth", XrmoptionSepArg, (char *) NULL}, {"-cycle", ".cycle", XrmoptionSepArg, (char *) NULL}, {"-display", ".display", XrmoptionSepArg, (char *) NULL}, {"-extend_print",".extend_print",XrmoptionNoArg, (char *) "on"}, {"-fg", "*foreground", XrmoptionSepArg, (char *) NULL}, {"-font", "*font", XrmoptionSepArg, (char *) NULL}, {"-foreground", "*foreground", XrmoptionSepArg, (char *) NULL}, {"-geometry", "*mainWin.geometry",XrmoptionSepArg, (char *) NULL}, {"-help", ".help", XrmoptionNoArg, (char *) "on"}, {"-interval", ".interval", XrmoptionSepArg, (char *) NULL}, {"-iconic", ".iconic", XrmoptionNoArg, (char *) "on"}, {"-mb", ".menuborder", XrmoptionNoArg, (char *) "on"}, {"-name", ".name", XrmoptionSepArg, (char *) NULL}, {"-nobreed", ".batchbreed", XrmoptionNoArg, (char *) "off"}, {"-number", ".number", XrmoptionSepArg, (char *) NULL}, {"-printpop", ".printpop", XrmoptionNoArg, (char *) "on"}, {"-rv", "*reverseVideo",XrmoptionNoArg, (char *) "on"}, {"-seed", ".seed", XrmoptionSepArg, (char *) NULL}, {"-segments", ".segments", XrmoptionSepArg, (char *) NULL}, {"-showbreed", ".showbreed", XrmoptionNoArg, (char *) "on"}, {"-showgenes", ".showgenes", XrmoptionNoArg, (char *) "on"}, {"-synchronous","*synchronous", XrmoptionNoArg, (char *) "on"}, {"-v", ".verbose", XrmoptionNoArg, (char *) "on"}, {"-xrm", NULL, XrmoptionResArg, (char *) NULL}, {"help", ".help", XrmoptionNoArg, (char *) "on"}, }; void main (argc, argv) int argc; char **argv; { int i=0; XrmDatabase commandlineDB=NULL; char* myDisplayName = NULL; XrmString str_type; XrmValue value; /* *** Try and work out the name the application will run under *** */ /* *** This needed for finding the correct resources. *** */ { char** ptr = &argv[1]; for (; *ptr != NULL; ptr++) if (strcmp(*ptr, "-name") == 0 && *(ptr + 1) != NULL) { myname = *(ptr + 1); break; } if (*ptr == NULL) { char* ptr1 = rindex(argv[0], '/'); if (ptr1) myname = ++ptr1; else myname = argv[0]; } } XrmInitialize(); XrmParseCommand(&commandlineDB, opTable, sizeof(opTable) / sizeof(opTable[0]), myname, &argc, argv); if (XrmGetResource(commandlineDB, catlist(myname, ".name", (char*) NULL), "Xfsm.Name", &str_type, &value)) myname = value.addr; if (XrmGetResource(commandlineDB, catlist(myname, ".display", (char*) NULL), "Xfsm.Display", &str_type, &value)) myDisplayName = value.addr; /* *** connect to X Server and assign screen *** */ if ((mydisplay = XOpenDisplay(myDisplayName)) == NULL) { fprintf (stderr, "Error Opening Display ... Exiting\n"); exit (1); } /* *** init the simulation constants *** */ init(); /* *** process arguments and the resource database *** */ process_databases (argc, argv, commandlineDB); /* *** Turn on X server synchronization if the user wants it. *** */ XSynchronize(mydisplay, getBoolResource(resourceDB, catlist(myname, ".synchronous", (char*) NULL), "Xfsm.Synchronous", False)); init_all_windows(); srand48 (seed); /* *** Check to see of the user wants the colors reversed. *** */ if (getBoolResource(resourceDB, catlist(myname, ".reverseVideo", (char*) NULL), "Xfsm.ReverseVideo", False)) { long temp; temp = fg; fg = bg ; bg = temp; } /* *** create Main Program Window and set up the properties. *** */ { XClassHint clshint; XWMHints wmhints; mainwin_hint.min_width = MIN_WIN_X; mainwin_hint.min_height = MIN_WIN_Y; mainwin_hint.width = main_win.width; mainwin_hint.height = main_win.height; mainwin_hint.x = main_win.x; mainwin_hint.y = main_win.y; mainwin_hint.flags = main_win.flags | PMinSize | PSize; clshint.res_name = myname; clshint.res_class = CLASS_NAME; wmhints.input = True; wmhints.initial_state = (getBoolResource(resourceDB, catlist(myname, ".iconic", (char*) NULL), "Xfsm.Iconic", False)) ? IconicState : NormalState; wmhints.window_group = main_win.win; wmhints.flags = InputHint | StateHint | WindowGroupHint; create_window (DefaultRootWindow(mydisplay), &main_win, fg, bg); XSetStandardProperties (mydisplay, main_win.win, main_win.text, main_win.text, None, argv, argc, &mainwin_hint); XSetClassHint(mydisplay, main_win.win, &clshint); XSetWMHints(mydisplay, main_win.win, &wmhints); } if (do_big) Draw_Wins=1; /* *** create all the buttons using child windows *** */ for (i = 0; i < MENU_ITEMS; ++i) create_window (main_win.win, &menu[i], fg, bg); for (i = 0; i < Draw_Wins; i++) create_window (main_win.win, &draw_win[i], fg, bg); /* *** Map window definitions onto screen *** */ XMapRaised (mydisplay, main_win.win); XMapSubwindows (mydisplay, main_win.win); randomize_pop(); #ifdef DEBUG fprintf (stdout, "Setup is Done!\n"); #endif /* ************************************************************ */ /* ************** setup is done - main event loop ************* */ /* ************************************************************ */ do_event_loop (argc, argv); /* *** we are done - destroy all the windows *** */ destroy_menu (menu, MENU_ITEMS); destroy_menu (draw_win, Draw_Wins); XFreeGC (mydisplay, main_win.gc); XDestroyWindow (mydisplay, main_win.win); XCloseDisplay (mydisplay); exit (0); } /* *** This is the main event loop. Here we handle events and deal *** */ /* *** with all the user inputs we get *** */ void do_event_loop (argc, argv) int argc; char **argv; { XEvent tevent; int iter=0, count, cont, this_item, i, done=FALSE; char text[10]; long target = time(NULL); while (!done) { if (batch) { /* *** here we wait while there are no events *** */ /* *** and count out down our interval. *** */ while (XPending (mydisplay) == 0) { struct timeval sleept; fd_set reads; FD_ZERO(&reads); FD_SET(ConnectionNumber(mydisplay), &reads); sleept.tv_sec = target - time(NULL); sleept.tv_usec = 0; #ifdef __hpux select(ConnectionNumber(mydisplay) + 1, (int *) &reads, NULL, NULL, &sleept); #else select(ConnectionNumber(mydisplay) + 1, &reads, NULL, NULL, &sleept); #endif /* *** interval has passed *** */ if ((time(NULL)) >= target) { grow_pop(); target = target + upd_interval; if (!batch_breed) randomize_pop(); else { breed(); select_breeding_sub_pop(); } if (++iter == cycle) { printf ("HERE\n"); randomize_pop(); iter=0; } } } } /* *** read the next event *** */ XNextEvent (mydisplay, &myevent); switch (myevent.type) { /* *** expose event -> redraw the window *** */ case Expose: /* ********************************************* * * since a window can generate multiple expose * * events we can collapse these into one redraw * * ********************************************* */ count=0; do { if (XPending (mydisplay) == 0) break; XPeekEvent (mydisplay, &tevent); if (tevent.xexpose.window == myevent.xexpose.window) { XNextEvent (mydisplay, &myevent); count++; } } while(tevent.xexpose.window==myevent.xexpose.window); #ifdef DEBUG if (!count) fprintf(stdout, "got expose event in window: %d\n", myevent.xexpose.window); else fprintf(stdout, "Compressed %d expose events into 1 in window: %d\n", count, myevent.xexpose.window); #endif /* ******************************************* * * ** now deal with the actual expose event ** * * ******************************************* */ if (myevent.xexpose.window == main_win.win && myevent.xexpose.count == 0) { redraw_main_win (); break; } cont = expose_menu (menu, MENU_ITEMS); if (!cont) break; if (G_generation != NOGOOD) cont = expose_win (draw_win, Draw_Wins); break; /* *** change work window if main window changes *** */ case ConfigureNotify: #ifdef DEBUG fprintf(stdout, "got configure notify event in window: %d\n", myevent.xconfigure.window); #endif /* *** we don't allow changes in the detail window *** */ if (myevent.xconfigure.window != main_win.win) break; /* *** size stays the same -> nothing to do *** */ if (myevent.xconfigure.width == main_win.width && myevent.xconfigure.height == main_win.height) break; XClearWindow (mydisplay, main_win.win); handle_resize (myevent.xconfigure.width, myevent.xconfigure.height); break; /* *** process keyboard mapping changes *** */ case MappingNotify: #ifdef DEBUG fprintf(stdout, "got mapping notify event in window: %d\n", myevent.xexpose.window); #endif XRefreshKeyboardMapping ((XMappingEvent *) &myevent ); break; /* *** drag in work window *** */ case MotionNotify: #ifdef DEBUG fprintf(stdout, "got motion notify event in window: %d\n", myevent.xbutton.window); #endif break; /* *** mouse enters a window *** */ case EnterNotify: this_item = highlight_menu (menu, MENU_ITEMS, TRUE); break; /* *** Mouse Leaves a window *** */ case LeaveNotify: this_item = highlight_menu (menu, MENU_ITEMS, FALSE); break; /* *** process mouse-button presses *** */ case ButtonPress: #ifdef DEBUG fprintf(stdout, "button press (%d) in window: %d\n", myevent.xbutton.button, myevent.xbutton.window); #endif if (myevent.xbutton.button == 1 || myevent.xbutton.button == 2) { this_item = which_button_pressed (menu, MENU_ITEMS); if (this_item == INITIALIZE) { randomize_pop(); grow_pop(); if (batch) select_breeding_sub_pop(); break; } else if (this_item == BREED) { if (batch || Draw_Wins == 1) break; breed (); break; } else if (this_item == QUIT) { done = TRUE; break; } /* else if (this_item == PLUS) { while (!XPending (mydisplay)) { msleep (mstime); if (mstime > 5000) mstime-=5000; if (segments < MAX_SEGMENTS) segments++; sprintf (menu[SHOW].text, "%8d", segments); XDrawImageString (mydisplay, menu[SHOW].win, menu[SHOW].gc, 1, LETTER_ASCENT (menu[SHOW]), menu[SHOW].text, strlen (menu[SHOW].text)); } mstime=MSTIME; break; } else if (this_item == MIN) { while (!XPending (mydisplay)) { msleep (mstime); if (mstime > 5000) mstime-=5000; if (segments > MIN_SEGMENTS) segments--; sprintf (menu[SHOW].text, "%8d", segments); XDrawImageString (mydisplay, menu[SHOW].win, menu[SHOW].gc, 1, LETTER_ASCENT (menu[SHOW]), menu[SHOW].text, strlen (menu[SHOW].text)); } mstime=MSTIME; break; } else if (this_item == OK) { grow_pop(); } */ this_item = which_button_pressed (draw_win, Draw_Wins); if (this_item == NOGOOD || G_generation == NOGOOD) break; else highlight_org_window (this_item); } break; /* *** process mouse-button release *** */ case ButtonRelease: #ifdef DEBUG fprintf(stdout, "button release in window: %d\n", myevent.xbutton.window); #endif break; /* *** process Resize *** */ case ResizeRequest: #ifdef DEBUG fprintf (stdout, "got resize event \n"); #endif break; /* *** process keyboard input *** */ case KeyPress: #ifdef DEBUG fprintf (stdout, "got keypress event in window: %d\n", myevent.xkey.window); #endif i = XLookupString ((XKeyEvent *)&myevent, text, 10, NULL, 0 ); if (text[0] == INIT_KEY) { randomize_pop(); grow_pop(); if (batch) select_breeding_sub_pop(); break; } else if (text[0] == BREED_KEY) { if (batch || Draw_Wins == 1) break; breed (); break; } else if (text[0] == QUIT_KEY) { done = TRUE; break; } break; } /* switch (myevent.type) */ } /* while (done == 0) */ } ./bugsx-1.08/bugsx.h100644 765 144 27014 6416051660 13134 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ /* ****** include files ****** */ #include #include #include #include #include #ifndef DYNIX # include #endif #ifdef __STDC__ # include #else # include #endif #include /* ******************************************************************** */ /* ******************** general program constants ********************* */ /* ******************************************************************** */ #define TRUE 1 #define FALSE 0 #define STRLENGTH 255 /* length of a string */ #define NOGOOD -1 /* to distinguish nogood from false */ #define MAXFS 50 /* maximum number of file systems */ #define QUIT_KEY 'q' /* quit key */ #define INIT_KEY 'i' /* initialize key */ #define BREED_KEY 'b' /* breed key */ #define CLASS_NAME "Bugsx" /* How do we look for resources */ #define DEFAULT_FONT "6x13" /* default font */ #define UPDINTERVAL 5 #define MSTIME 100000L /* sleep time for msleep () */ #ifndef APP_DEFAULTS_DIR #define APP_DEFAULTS_DIR "/usr/X11R6/lib/X11/app-defaults/" #endif /* well, I did write the damn thing */ #define PRINT_COPYRIGHT printf ("\ bugsx v1.08 - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu)\n\ http://physics.www.media.mit.edu/~jrs \n\ (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com)\n\ http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm") /* ****** define window constants - these are positions and sizes ****** */ #define DEF_BORDER_WIDTH 4 /* Default border width. */ #define MAIN_BORDER 20 #define WIN_X 700 #define WIN_Y 700 #define MIN_WIN_X 200 #define MIN_WIN_Y 200 #define MENU_ITEMS 3 #define MENU_Y 10 #define OFF_X 10 #define OFF_Y 10 #define DRAW_ROWS 4 #define DRAW_COLUMNS 4 #define DRAW_WINS (DRAW_ROWS*DRAW_COLUMNS) #define MAX_DRAW_WINS (10*10) #define MENU_HEIGHT(w) (LETTER_HEIGHT(w)) #define MIN_MENU_HEIGHT 4 #define LETTER_HEIGHT(w) ((w).font_info->ascent + (w).font_info->descent) #define LETTER_ASCENT(w) ((w).font_info->ascent) #define LETTER_SPACE(w) (LETTER_HEIGHT(w) + 5 ) #define FREE_LETTER_SP(w) (LETTER_SPACE(w)-LETTER_HEIGHT(w)) #define NFS_TEXT_Y (fs_win[i].y-(LETTER_SPACE(fs_win[i])-\ (LETTER_HEIGHT(fs_win[i])+1))) #define SM_MENU_WIDTH(w) (XTextWidth((w).font_info, (w).text, \ strlen((w).text))) #define MENU_SPACE(w) (MENU_HEIGHT(w)*(MENU_ITEMS+2)) #define INTERVAL(w) ((MENU_HEIGHT(w)+FREE_LETTER_SP(w))*2) #define MIN_INTERVAL(w) (MIN_MENU_HEIGHT+FREE_LETTER_SP(w)+\ MENU_HEIGHT(w)) #define DRAW_WIDTH ((main_win.width-(MAIN_BORDER*2))/Draw_Columns) #define DRAW_HEIGHT ((main_win.height-(MAIN_BORDER*2)-MENU_SPACE(menu[0]))/\ Draw_Rows) #define MAX_CHROM_SIZE 30 /* *** chromosome can have up to 30 genes *** */ #define MAX_POP 100 /* *** Population can be up to 100 *** */ #define ORG_X 4 /* *** # orgs horizontally *** */ #define ORG_Y 4 /* *** # orgs vertically *** */ #define INIT_POP (ORG_X*ORG_Y) /* *** Initial population *** */ /* *** defines, typedefs, and externs needed by genetic algorithm *** */ /* *** This should contain almost all the parameters which are *** */ /* *** interesting to play with. Do a 'make' after changing them, *** */ #define WEIGHT_BASE 1.4 /* *** How much of curve we see *** */ #define ORG_T_MIN 0.0 /* *** Length of organism *** */ #define ORG_T_MAX (8*3.14159265358979323846) #define ORG_X_MIN ((double)(DRAW_WIDTH/2*-1))/* Coordinate range for organism window */ #define ORG_X_MAX (double)(DRAW_WIDTH/2) #define ORG_Y_MIN ((double)(DRAW_HEIGHT/2*-1)) #define ORG_Y_MAX (double)(DRAW_HEIGHT/2) #define GENE_BORDER 10 #define ORG_SEGMENTS (150.0) /* *** # of segments used drawing org *** */ #define CHROM_WIND 0.1 /* *** Fraction of window to draw genes *** */ #define CHROM_OFFSET 10 /* *** How much to offset bargraphs *** */ #define INIT_CHROM 8 /* *** Initial chromosome size *** */ #define pCROSS 1.0 /* *** Probability of Crossover *** */ #define pMUTATION 0.067 /* *** Probability of Mutation *** */ #define MUTATION_STD 0.01 /* *** Controls size of mutations *** */ #define INIT_SWITCH_DEF 0 /* *** Whether switches start on or off *** */ #define INIT_SHOW_GENES 1 /* *** Whether gene window is on *** */ #define INIT_PRINT_OUT 0 /* *** Whether print out is enabled *** */ #define MAX_SEGMENTS 2500 #define MIN_SEGMENTS 5 /* Not interesting to play with if breeder is running interactively */ #define INIT_FIT_THRESH 0.5 /* *** Default fitness threshold *** */ /* ****** define constants used to identify menus and windows(buttons) ****** */ #define INITIALIZE 0 #define BREED 1 #define QUIT 2 #define PLUS 3 #define MIN 4 #define OK 5 #define SHOW 6 /* ******************** define the warning bitmap size ********************** */ #define warn_width 4 #define warn_height 10 /* ******************************************************************** */ /* ********************* program data structures ********************** */ /* ******************************************************************** */ typedef char MyString[STRLENGTH]; /* ****** Structures related to the genetic scheme of things ****** */ typedef double Gene; typedef struct org { int name; /* *** Keep track of names, just for fun *** */ int size_chrom; /* *** Actual # genes in chromosome *** */ Gene X_Chrom[MAX_CHROM_SIZE];/* *** Genetic material itself *** */ Gene Y_Chrom[MAX_CHROM_SIZE]; double fitness; /* *** Fitness of organism *** */ int mom; /* *** Keep track of parents just for fun *** */ int dad; } Organism; typedef Organism Population; /* ****** XWindow struct - this simplifies function calls ****** */ typedef struct { Window win; /* window ID */ GC gc; /* window graphics content */ XFontStruct* font_info; /* Font the window is using. */ char text[40]; /* title (for menus) */ int x, y, /* position */ width, height, /* size */ line_thick; /* line thickness of window border */ unsigned long fg, bg; /* foreground and background */ long event_mask, /* which events will be registered */ flags; /* window flags */ } WinType, *WinTypePtr; /* ******************************************************************** */ /* ********************** function declarations *********************** */ /* ******************************************************************** */ void do_event_loop( #if NeedFunctionPrototypes int argc, char** argv #endif ); void handle_NFS_change( #if NeedFunctionPrototypes int ppnfs, int OFS #endif ); void fix_menu_pos( #if NeedFunctionPrototypes int width #endif ); void redraw_main_win( #if NeedFunctionPrototypes void #endif ); void create_window ( #if NeedFunctionPrototypes Window parent_win, WinTypePtr this_win, unsigned long foreg, unsigned long backg #endif ); int highlight_menu( #if NeedFunctionPrototypes WinType menu[], int menu_num, int hightlight #endif ); int expose_menu( #if NeedFunctionPrototypes WinType menu[], int menu_num #endif ); int expose_win( #if NeedFunctionPrototypes WinType win[], int win_num #endif ); void destroy_menu( #if NeedFunctionPrototypes WinType menu[], int menu_num #endif ); int which_button_pressed( #if NeedFunctionPrototypes WinType menu[], int menu_num #endif ); void select_breeding_sub_pop( #if NeedFunctionPrototypes void #endif ); void highlight_org_window( #if NeedFunctionPrototypes int i #endif ); void handle_resize( #if NeedFunctionPrototypes int x, int y #endif ); void process_databases( #if NeedFunctionPrototypes int argc, char** argv, XrmDatabase commandlineDB #endif ); void do_help( #if NeedFunctionPrototypes void #endif ); void init_all_windows( #if NeedFunctionPrototypes void #endif ); Bool getBoolResource( #if NeedFunctionPrototypes XrmDatabase db, char* str_name, char* str_class, Bool deflt #endif ); int getIntResource( #if NeedFunctionPrototypes XrmDatabase db, char* str_name, char* str_class, int deflt #endif ); unsigned long getColorResource( #if NeedFunctionPrototypes XrmDatabase db, char* str_name, char* str_class, unsigned long deflt #endif ); XFontStruct* getFontResource( #if NeedFunctionPrototypes XrmDatabase db, char* str_name, char* str_class, XFontStruct* deflt #endif ); char* catlist( #if NeedFunctionPrototypes char*, ... #endif ); void randomize_org( #if NeedFunctionPrototypes Organism *org, int name, int size_chrom #endif ); void randomize_pop( #if NeedFunctionPrototypes void #endif ); int rnd( #if NeedFunctionPrototypes int low, int high #endif ); int flip( #if NeedFunctionPrototypes double p #endif ); void copy_org( #if NeedFunctionPrototypes Organism *org1, Organism *org2 #endif ); void copy_pop( #if NeedFunctionPrototypes Population *pop1, Population *pop2, int size_pop #endif ); void erase_org( #if NeedFunctionPrototypes Organism *org #endif ); int select_org( #if NeedFunctionPrototypes int size_pop #endif ); double mutation( #if NeedFunctionPrototypes double allele #endif ); void crossover( #if NeedFunctionPrototypes Organism *parent1, Organism *parent2, Organism *child1, Organism *child2, int first_born_name #endif ); void breed( #if NeedFunctionPrototypes void #endif ); int fitness( #if NeedFunctionPrototypes int i #endif ); void set_toggle_to_default( #if NeedFunctionPrototypes int i #endif ); void print_pop( #if NeedFunctionPrototypes void #endif ); void print_org( #if NeedFunctionPrototypes Organism *org #endif ); double dpow( #if NeedFunctionPrototypes double x, int n #endif ); void resize( #if NeedFunctionPrototypes void #endif ); void grow_pop( #if NeedFunctionPrototypes void #endif ); int grow( #if NeedFunctionPrototypes int org #endif ); void develop( #if NeedFunctionPrototypes int org, double t, int *X_scr, int *Y_scr #endif ); void developF( #if NeedFunctionPrototypes int org, double t, int *X_scr, int *Y_scr #endif ); void developFG( #if NeedFunctionPrototypes int org, double t, int *X_scr, int *Y_scr #endif ); void display_genes( #if NeedFunctionPrototypes int org #endif ); void graph_chrom( #if NeedFunctionPrototypes Gene *chrom, int size_chrom, int Xl, int Xh, int Yl, int Yh, int org #endif ); double noise( #if NeedFunctionPrototypes double mean, double std #endif ); void init( #if NeedFunctionPrototypes void #endif ); void msleep( #if NeedFunctionPrototypes long n #endif ); ./bugsx-1.08/bugsx.man100644 765 144 12231 6416051660 13453 0ustar rgaschusers.TH BUGSX 1 X11 .SH NAME bugsx \- display and evolve biomorphs .SH DESCRIPTION bugsx runs under MIT's X11 window system. It was written under UNIX but should be easily portable. It is a program which draws the biomorphs based on parametric plots of Fourier sine and cosine series and let's you play with them using the genetic algorithm. .PP The original version which ran under Suntools and XViews was written by Joshua R. Smith sometime 1990. See the 'credits' section for more details. .PP For more information about the theoretic backgrounds of bugsx consult Joshua R. Smith's paper distributed with this program (in postscript format). It can also be gotten from: http://physics.www.media.mit.edu/~jrs/biomorphs.ps .SH COMMAND LINE PARAMETERS .PP bugsx accepts the following command line options: .nf +rv reverse video (use to override xrdb entry) +synchronous syncronous mode (use to override xrdb entry) -? help -background backgound color -batch run program in batch mode -bg same as -background -bordercolor border color -borderwidth border width -display display -extend_print show extended reproduction info while running -fg same as -forground -font font -foreground forground color (also file system bar color) -geometry geometry (will override extreme window sizes to apply reasonable settings) -help help -iconic iconic -interval interval used per turn -mb show menu border -name run bugsx under this name -nobreed do not breed when running in bactch mode -number number of biomorphs to draw (must be a square #) -printpop print the population when breeding -rv reverse video -seed use this seed for random number generator -segments use this many segments to draw an organism -showbreed show breeding subpopulation when in batch mode -showgenes show a graphic representation of the genes -synchronous synchronous mode -v verbose -xrm make no entry in resrouce database help help .fi .SH RESOURCES .PP bugsx can be controlled via the following resources: .nf background universal backgound color batch run program in batch mode batchbreed do not breed when running in bactch mode borderColor border color borderWidth border width display display extend_print show extended reproduction info while running font font foreground universal foreground color help show help mainWin.geometry main window geometry iconic start program in iconic mode interval interval used per turn minimize minimize window size menuborder draw menu borders name run bugsxunder this name number number of biomorphs to draw (must be a square #) printpop print the population when breeding reverseVideo reverse video seed use this seed for random number generator segments use this many segments to draw an organism showbreed show breeding subpopulation when in batch mode showgenes show a graphic representation of the genes synchronous syncronous mode verbose verbose mode .fi .PP .SH BRIEF USER'S GUIDE Once you have started bugsx you will get a window containing the drawing windows and 3 menus. The Menus are: .nf Initialize - Initializes the gene pool Breed - Breed the selected organisms Quit - exits bugsx .fi .PP Once you have chosen "Initialize" and the first set of drawings is shown, you can select the ones you wish to be included in the cross-breeding by clicking (with the left button) on a drawing window. The selected organisms will be drawn inverse. .PP Clicking on Breed will cross breed the selected organisms using the genetic algorithm. If you have not selected at least two organisms, a set of at least two will be randomly chosen and used for the breeding. .PP The following keys can be used to control bugsx: .nf q - quit bugsx i - initialize population b - breed .fi .SH AUTHOR bugsx was written by Joshua R. Smith (jrs@media.mit.edu) and ported to XWindows by Robert Gasch (Robert_Gasch@peoplesoft.com) and is copyright by the author(s). .SH CREDITS The strstr() used for DYNIX ports is a slightly modified version of the GNU source. ./bugsx-1.08/grow.c100644 765 144 22442 6416051660 12755 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ /**************************************************************************** * * Grow.c * Embryology routines for breed.c. Grow takes an organism and grows * it on the screen; in other words it graphs a polynomial. * This file also has a bunch of general graphic support routines. * ****************************************************************************/ #include "bugsx.h" extern Display *mydisplay; extern WinType main_win, /* main window */ menu[], /* menu items */ draw_win[]; /* windows we draw in */ extern unsigned long fg, bg; /* foreground, background */ extern Population G_Population[]; /* Array of Organisms */ extern Population G_Kids_Pop[]; /* Next generation */ extern double G_fit_thresh, /* fitness threshold */ G_pCross, /* probability of crossover */ G_pMutation, /* probability of mutation */ G_mutation_std, /* gauss fn STD used to mutate*/ G_weight[], /*weight for each term */ G_sum_weights; /* Sum of weights -- yscaling */ extern int G_size_pop, /* # organisms in population */ G_size_breeding_pop, /* # organisms reproducing */ G_generation, /* # generations so far */ G_switch_default, /* switches start on or off */ G_show_genes, /* display gene window */ G_current_width, /* Current size of pixwin */ G_current_height, G_org_height, /* Size in pixels of organism */ G_org_width, G_x_scale, /* These are used for scaling */ G_y_scale, /* curves. */ G_x_trans, G_y_trans, selected[], segments, Draw_Wins, Draw_Rows, Draw_Columns, do_print_pop, verbose; /* ************************************************************************ */ /* ****************** take a double to an integer power ******************* */ /* ************************************************************************ */ double dpow (x, n) double x; int n; { int i; double p; p = 1.0; for (i=1; i <= n; ++i) p = p*x; return(p); } /* ************************************************************************ */ /* ****************** change all scales upon resizing ********************* */ /* ************************************************************************ */ /* void resize (TheCanvas, new_width, new_height) { G_current_width = new_width; G_current_height= new_height; G_org_width = G_current_width/ORG_X; G_org_height = G_current_height/ORG_Y; G_x_scale = G_org_width/10; G_y_scale = G_org_height/10; G_x_trans = G_org_width; G_y_trans = G_org_height; } */ /* ************************************************************************ */ /* ************ grow the entire population on the screen ****************** */ /* ************************************************************************ */ void grow_pop() { int i; #ifdef DEBUG fprintf (stdout, "Entering Polulation Growth ...\n"); #endif for (i=0; i < Draw_Wins; i++) { if (selected[i]) { XFillRectangle (mydisplay, draw_win[i].win, draw_win[i].gc, 0,0, draw_win[i].width, draw_win[i].height); XSetForeground (mydisplay, draw_win[i].gc, fg); selected[i]=FALSE; } XClearWindow (mydisplay, draw_win[i].win); grow(i); if (G_show_genes == TRUE) display_genes(i); } if (do_print_pop) print_pop(); } /* ************************************************************************ */ /* *************** translate: macros to scale and center ****************** */ /* ************************************************************************ */ /* scale x and y to fit inside cannonical screen box*/ #define SCALEX(x,xs) ((int) (x*xs)) #define SCALEY(y,ys) ((int) (y*ys)) /* translate scaled drawing to center of canonical screen box*/ #define CENTERX(x,xt) (x+(xt/2)) #define CENTERY(y,yt) (y+(yt/2)) /* translate and scale x and y -- this uses global variables*/ #define TSx(x) (CENTERX(SCALEX(x,draw_win[org].width/10), draw_win[org].width)) #define TSy(y) (CENTERY(SCALEY(y,draw_win[org].height/10),draw_win[org].height)) /* ************************************************************************ */ /* ******************* grow an organism on the screen ********************* */ /* ************************************************************************ */ int grow (org) int org; { double t, dt; int X_scr, Y_scr, X_scr_old, Y_scr_old; /* *** shortcut to keep us from calculating with no pop *** */ if (G_generation == NOGOOD) return (1); dt = (ORG_T_MAX - ORG_T_MIN)/segments; /* *** Base case: t = ORG_T_MIN *** */ developF(org, ORG_T_MIN, &X_scr, &Y_scr); X_scr_old = X_scr; Y_scr_old = Y_scr; for (t = ORG_T_MIN + dt; t <= ORG_T_MAX; t+= dt) { developF(org, t, &X_scr, &Y_scr); if ((X_scr_old >= TSx(ORG_X_MIN)) && (X_scr_old <= TSx(ORG_X_MAX)) && (Y_scr_old >= TSy(ORG_Y_MIN)) && (Y_scr_old <= TSy(ORG_Y_MAX)) && (X_scr >= TSx(ORG_X_MIN)) && (X_scr <= TSx(ORG_X_MAX)) && (Y_scr >= TSy(ORG_Y_MIN)) && (Y_scr <= TSy(ORG_Y_MAX))) { XDrawLine (mydisplay, draw_win[org].win, draw_win[org].gc, X_scr_old, Y_scr_old, X_scr, Y_scr); } X_scr_old = X_scr; Y_scr_old = Y_scr; } return (0); } /* ************************************************************************ */ /* ************* grow next point--evaluates organism at time t ************ */ /* ************************************************************************ */ void develop (org, t, X_scr, Y_scr) int org; double t; int *X_scr; int *Y_scr; { double X=0.0,Y=0.0; double t_var; int i; for (i=0; i < G_Population[org].size_chrom; i++) { t_var = dpow(t, i); X += t_var * G_Population[org].X_Chrom[i]; Y += t_var * G_Population[org].Y_Chrom[i]; } *X_scr = TSx(X); *Y_scr = TSy(Y); } /* ************************************************************************ */ /* **** grow next point using Fourier - evaluates organism at time t ****** */ /* ************************************************************************ */ void developF (org, t, X_scr, Y_scr) int org; double t; int *X_scr; int *Y_scr; { double X=0.0,Y=0.0; double t_var; int i; for (i=0; i= 0.5) { sign = 1; u = u - 0.5; } else sign = -1; index = (int)(didu * u); #ifdef DEBUG /* *** leftover as a result of foretting #include *** */ if (index >= ITBLMAX+1) { printf ("Index Sanity Check in noise() failed!!!\n"); printf ("Index = (int)(didu * u)\n"); printf ("didu = %f\n", didu); printf ("u = %f\n", u); printf ("index = %d\n", (int)(didu * u)); printf ("Exiting ...\n"); exit (1); } #endif du = u - index / didu; temp = mean + sign * (tbl [index] + (tbl [index + 1] - tbl [index]) * du * didu) * std; return (temp); } /* ************************************************************************ */ /* ************************ test the noise generator ********************* */ /* ************************************************************************ */ /* void test_noise () { int i; double mean; for (mean=0.0; mean < 5.0; mean += 1.0) { printf("mean: %g ",mean); for (i=0; i<5; i++) printf("%g, ", noise(mean,0.1)); printf("\n"); } } */ ./bugsx-1.08/util.c100644 765 144 40662 6416051660 12760 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ #include "bugsx.h" extern Display *mydisplay; extern char* myname; extern XrmDatabase resourceDB; extern WinType main_win, menu[], draw_win[]; extern XGCValues gray_gc_val; extern XEvent myevent; extern unsigned long fg, bg, warn1col, warn2col, warn3col; extern XWindowAttributes attribs; extern XSizeHints mainwin_hint, szhint; extern int G_show_genes, verbose, segments, menu_border, do_big, Draw_Wins, Draw_Rows, Draw_Columns; /* *** variables accessed only in util.c - make them static to make sure *** */ static char *Menu_Text[MENU_ITEMS]={ " Initialize ", " Breed ", " Quit "}; /* ************************************************************************ */ /* ************************ set the menu's position *********************** */ /* ************************************************************************ */ void fix_menu_pos (width) int width; { int i; for (i=0; iwin = XCreateSimpleWindow (mydisplay, parent_win, this_win->x, this_win->y, this_win->width, this_win->height, this_win->line_thick, foreg, backg); if (!this_win->win) { fprintf (stderr, "Error creating Simple Window %s ... Exiting.\n", this_win->text); exit (1); } #ifdef DEBUG fprintf (stdout, "Created Simple Window %s (%d) %d %d %d %d\n", this_win->text, this_win->win, this_win->x, this_win->y, this_win->width, this_win->height, this_win->line_thick); #endif /* *** set Graphics Content creation and initialize *** */ this_win->gc = XCreateGC (mydisplay, this_win->win, 0, 0); if (! this_win->gc) { fprintf (stderr, "Error creating GC for %s ... Exiting.\n", this_win->text); exit (1); } #ifdef DEBUG fprintf (stdout, "Created GC %d\n", this_win->gc); #endif XSetBackground (mydisplay, this_win->gc, backg); XSetForeground (mydisplay, this_win->gc, foreg); if (this_win->font_info != 0) XSetFont(mydisplay, this_win->gc, this_win->font_info->fid); this_win->fg = foreg; this_win->bg = backg; /* *** specify which input we want this window to process *** */ XSelectInput (mydisplay, this_win->win, this_win->event_mask); } /* *********************************************************************** */ /* highlight menu item (window) in response to a mouse entering or leaving */ /* *********************************************************************** */ int highlight_menu (menu, menu_num,highlight) WinType menu[]; int menu_num; int highlight; { int i, state=NOGOOD; /* *** figure out which menu *** */ for (i = 0; i < menu_num; i++) if (myevent.xcrossing.window == menu[i].win) { state = i; i = menu_num; } /* *** ignore breed menu if we only have 1 org *** */ if (Draw_Wins == 1 && state == 1) return (state); /* *** check if menu is valid and change fg & bg *** */ if (state >= 0 && state < menu_num) { if (highlight) { #ifdef DEBUG fprintf(stdout, "Enter state in button %s\n", menu[state].text); #endif XSetBackground (mydisplay, menu[state].gc, fg); XSetForeground (mydisplay, menu[state].gc, bg); } else { #ifdef DEBUG fprintf (stdout, "Exit state in button %s\n", menu[state].text); #endif XSetBackground (mydisplay, menu[state].gc, bg); XSetForeground (mydisplay, menu[state].gc, fg); } for (i = 0; i < menu_num; ++i) XDrawImageString (mydisplay, menu[i].win, menu[i].gc, 1, LETTER_ASCENT(menu[i]), menu[i].text, strlen(menu[i].text)); return (state); } else return (NOGOOD); } /* *********************************************************************** */ /* ************** redraw the string in an exposed window ***************** */ /* *********************************************************************** */ int expose_menu (menu, menu_num) WinType menu[]; int menu_num; { int i; for (i = 0; i < menu_num; i++) { if (myevent.xexpose.window == menu[i].win) { XDrawImageString (mydisplay, menu[i].win, menu[i].gc, 1, LETTER_ASCENT(menu[i]), menu[i].text, strlen(menu[i].text)); return (FALSE); } } return (TRUE); } /* *********************************************************************** */ /* ***************** redraw the org in an exposed window ***************** */ /* *********************************************************************** */ int expose_win (win, win_num) WinType win[]; int win_num; { int i; for (i = 0; i < win_num; i++) { if (myevent.xexpose.window == win[i].win) { grow (i); if (G_show_genes) display_genes(i); return (FALSE); } } return (TRUE); } /* *********************************************************************** */ /* *********************** destroy an entire menu *********************** */ /* *********************************************************************** */ void destroy_menu (menu, menu_num) WinType menu[]; int menu_num; { int i; for (i=0; i DisplayWidth(mydisplay, DefaultScreen(mydisplay))) { width = DisplayWidth(mydisplay, DefaultScreen(mydisplay))-1; if (verbose) fprintf (stderr, "Specified width too \ large ... adjusting to maximum size\n"); } main_win.width = width; main_win.flags = USPosition; geom_used=TRUE; } if (HeightValue & flags) { if (height < MIN_WIN_Y) { height = MIN_WIN_Y; if (verbose) fprintf (stderr, "Specified height too \ small ... adjusting to minimum size\n"); } else if (height > DisplayHeight(mydisplay, DefaultScreen(mydisplay))) { height = DisplayHeight(mydisplay, DefaultScreen(mydisplay))-1; if (verbose) fprintf (stderr, "Specified height too \ large ... adjusting to maximum size\n"); } main_win.height = height; main_win.flags = USPosition; geom_used=TRUE; } } for (i = 0; i < MENU_ITEMS; i++) { strcpy(menu[i].text, Menu_Text[i]); menu[i].font_info = main_win.font_info; menu[i].width = SM_MENU_WIDTH(menu[i]); menu[i].height = MENU_HEIGHT(menu[i]); menu[i].x = ((main_win.width - menu[i].width) / 2); menu[i].y = MENU_Y + MENU_HEIGHT(menu[i]) * i; if (menu_border) menu[i].line_thick = 1; else menu[i].line_thick = 0; menu[i].event_mask = small_event_mask; } if (do_big) { Draw_Rows=1; Draw_Columns=1; } for (i = 0; i < Draw_Wins; i++) { strcpy(draw_win[i].text, ""); draw_win[i].font_info = main_win.font_info; draw_win[i].width = DRAW_WIDTH; draw_win[i].height = DRAW_HEIGHT; draw_win[i].x = (i%Draw_Columns)*DRAW_WIDTH+MAIN_BORDER; draw_win[i].y = (i/Draw_Rows)*DRAW_HEIGHT+MENU_SPACE(main_win)+ MAIN_BORDER; draw_win[i].line_thick = 1; draw_win[i].event_mask = small_event_mask; } } /* ***************************************************************** */ /* ********** Returns the value of the given bool resource ********** */ /* ***************************************************************** */ Bool getBoolResource(db, str_name, str_class, deflt) XrmDatabase db; char* str_name; char* str_class; Bool deflt; { XrmString str_type; XrmValue value; if (XrmGetResource(db, str_name, str_class, &str_type, &value)) { return ((!strcmp(value.addr, "true")) || (!strcmp(value.addr, "True")) || (!strcmp(value.addr, "TRUE")) || (!strcmp(value.addr, "yes")) || (!strcmp(value.addr, "Yes")) || (!strcmp(value.addr, "YES")) || (!strcmp(value.addr, "on")) || (!strcmp(value.addr, "On")) || (!strcmp(value.addr, "ON")) || (!strcmp(value.addr, "1"))); } else return (deflt); } /* ***************************************************************** */ /* ********** Returns the value of the given int resource ********** */ /* ***************************************************************** */ int getIntResource(db, str_name, str_class, deflt) XrmDatabase db; char* str_name; char* str_class; int deflt; { XrmString str_type; XrmValue value; if (XrmGetResource(db, str_name, str_class, &str_type, &value)) return (atoi(value.addr)); else return (deflt); } /* ***************************************************************** */ /* ********** Returns the value of the given Font resource ********* */ /* ***************************************************************** */ XFontStruct* getFontResource(db, str_name, str_class, deflt) XrmDatabase db; char* str_name; char* str_class; XFontStruct* deflt; { XrmString str_type; XrmValue value; if (XrmGetResource(db, str_name, str_class, &str_type, &value)) { XFontStruct* font = XLoadQueryFont(mydisplay, value.addr); if (font == NULL) { fprintf(stderr, "Could not load font \"%s\".\n", value.addr); return (deflt); } else return (font); } else return (deflt); } /* ***************************************************************** */ /* ********** Returns the value of the given color resource ******** */ /* ***************************************************************** */ unsigned long getColorResource(db, str_name, str_class, deflt) XrmDatabase db; char* str_name; char* str_class; unsigned long deflt; { XrmString str_type; XrmValue value; if (XrmGetResource(db, str_name, str_class, &str_type, &value)) { XColor screen_def; if (XParseColor(mydisplay, DefaultColormapOfScreen (DefaultScreenOfDisplay(mydisplay)), value.addr, &screen_def) == 0 || XAllocColor(mydisplay, DefaultColormapOfScreen (DefaultScreenOfDisplay(mydisplay)), &screen_def) == 0) { fprintf(stderr, "Color specification \"%s\" invalid.\n", value.addr); return (deflt); } else return (screen_def.pixel); } else return (deflt); } /* ***************************************************************** */ /* ********** Returns the concatenation of the NULL ********** */ /* ********** terminated list of strings. ********** */ /* ***************************************************************** */ #ifdef __STDC__ #if NeedFunctionPrototypes char* catlist(char *str1, ...) #else char* catlist(str1) char* str1; #endif /* NeedFunctionPrototypes */ { static char blocks[2][64]; static int current = 0; va_list ap; char* c; strcpy(blocks[current], str1); va_start(ap, str1); while ((c = va_arg(ap, char*)) != NULL) strcat(blocks[current], c); va_end(ap); c = blocks[current]; current = (current + 1) % 2; return c; } #else char* catlist(va_alist) va_dcl { static char blocks[2][64]; static int current = 0; va_list ap; char* c; va_start(ap); blocks[current][0] = '\0'; while ((c = va_arg(ap, char*)) != NULL) strcat(blocks[current], c); va_end(ap); c = blocks[current]; current = (current + 1) % 2; return c; } #endif /* __STDC__ */ #if defined (DYNIX) || defined (MACH) /* *** for some reason DYNIX does not have strstr *** */ /* Copyright (C) 1991, 1992 Free Software Foundation, Inc. */ /* This file is part of the GNU C Library. */ /* Return the first ocurrence of NEEDLE in HAYSTACK. */ #ifdef __STDC__ char *strstr (const char* haystack, const char* needle) #else char *strstr (haystack, needle) char *haystack, *needle; #endif { char *needle_end = strchr(needle, '\0'); char *haystack_end = strchr(haystack, '\0'); size_t needle_len = needle_end - needle; size_t needle_last = needle_len - 1; char *begin; if (needle_len == 0) return (char *) haystack_end; if ((size_t) (haystack_end - haystack) < needle_len) return NULL; for (begin = &haystack[needle_last]; begin < haystack_end; ++begin) { char *n = &needle[needle_last]; char *h = begin; do if (*h != *n) goto loop; /* continue for loop */ while (--n >= needle && --h >= haystack); return (char *) h; loop:; } return NULL; } #endif /* DYNIX || MACH */ ./bugsx-1.08/xbutil.c100644 765 144 31126 6416051661 13306 0ustar rgaschusers/* ************************************************************************* * bugsx - (C) Copyright 1990-1997 Joshua R. Smith (jrs@media.mit.edu) http://physics.www.media.mit.edu/~jrs (C) Copyright 1995-1997 Robert Gasch (Robert_Gasch@peoplesoft.com) http://www.peoplesoft.com/peoplepages/g/robert_gasch/index.htm Permission to use, copy, modify and distribute this software for any purpose and without fee is hereby granted, provided that this copyright notice appear in all copies as well as supporting documentation. All work developed as a consequence of the use of this program should duly acknowledge such use. No representations are made about the suitability of this software for any purpose. This software is provided "as is" without express or implied warranty. See the GNU General Public Licence for more information. * ************************************************************************* */ #include "bugsx.h" extern Display *mydisplay; extern WinType main_win, menu[], draw_win[]; extern char* myname; extern XrmDatabase resourceDB; extern unsigned long fg, bg; extern XSizeHints szhint; extern int G_size_pop, G_show_genes, verbose, do_print_pop, extend_print, Draw_Wins, Draw_Rows, Draw_Columns, segments, batch, batch_breed, cycle, show_breed, upd_interval, selected[], menu_border; extern long seed; /* ***************************************************************** */ /* **************** select the breeding subpopulation ************** */ /* ***************************************************************** */ void select_breeding_sub_pop () { int i, count=0; if (!batch) { printf ("Sanity check error! select_breeding_sub_pop() called \ without -batch ... Exiting\n"); exit (1); } for (i=0; i= 5 Exiting ...\n", segments); exit (1); } if (verbose) printf ("-segments flag caught - will use %d \ segments to draw org\n", segments); } if ((upd_interval = getIntResource(resourceDB, catlist(myname, ".interval", (char*)NULL), "Bugsx.Interval", UPDINTERVAL)) != UPDINTERVAL) { if (!batch) { puts ("-interval does not make sense without -batch ...\ Exiting"); exit (1); } if (upd_interval < 0) { printf ("Invalid -interval flag caught (%d) - \ must be >= 1 ... Exiting\n", upd_interval); exit (1); } if (verbose) printf ("-interval flag caught - setting interval to %d\n", upd_interval); } if ((Draw_Wins = getIntResource(resourceDB, catlist(myname, ".number", (char*)NULL), "Bugsx.Number", 16)) != 16) { if (Draw_Wins < 1) { printf ("Invalid -number flag caught (%d) - must be \ >= 1\n", Draw_Wins); exit (1); } if (Draw_Wins == 1 && batch && batch_breed) { puts ("'-number 1' doesn't make sense if '-batch' is \ specified without -nobreed ... \nExiting"); exit (1); } tsi=(int)sqrt(Draw_Wins); tsd=sqrt(Draw_Wins); if ((double)tsi == tsd) { if (Draw_Wins > 100) { printf ("Invalid -number flag caught (%d) - must be \ smaller than 100\n", Draw_Wins); exit (1); } G_size_pop=Draw_Wins; Draw_Columns=Draw_Rows=sqrt((double)Draw_Wins); if (verbose) printf ("-number flag caught-will draw %d organisms\n", Draw_Wins); } else { printf ("Invalid -num flag caught (%d) - must be a \ square number .... Exiting\n", Draw_Wins); exit (1); } } if ((show_breed = getBoolResource(resourceDB, catlist(myname, ".showbreed", (char*)NULL), "Bugsx.Showbreed", False))) { if (!batch) { puts ("-showbreed does not make sense without -batch \ ... Exiting"); exit (1); } if (!batch_breed) { puts ("-showbreed does not make sense with -nobreed \ ... Exiting"); exit (1); } if (Draw_Wins == 1) { puts ("-showbreed does not make sense with '-number 0' \ ... Exiting"); exit (1); } if (verbose) puts("-showbreed flag caught - will show breeding \ selection in batch mode"); } if ((G_show_genes = getBoolResource(resourceDB, catlist(myname, ".showgenes", (char*)NULL), "Bugsx.Showgenes", False))) if (verbose) printf ("-showgenes flag caught - setting showgenes=TRUE\n"); } void do_help () { printf ("\n\ BBBB U U GGGGG SSSSS X X\n\ B B U U G S X X\n\ BBBB U U G GGG SSSSS X\n\ B B U U G G S X X\n\ BBBB UUU GGGGG SSSSS X X\n\ \n\ bugsx runs under MIT's X11 window system. It was written under\n\ UNIX but should be easily portable. It is a program which draws\n\ the biomorphs based on parametric plots of Fourier sine and cosine\n\ series and let's you play with them using the genetic algorithm.\n"); printf ("\n\ +rv reverse video (use to override xrdb entry)\n\ +synchronous syncronous mode (use to override xrdb entry)\n\ -? help\n\ -background backgound color\n\ -batch run program in batch mode\n\ -bg same as -background\n\ -bordercolor border color\n\ -borderwidth border width\n\ -cycle re-initialize population after n batch turns\n\ -display display\n\ -extend_print show extended reproduction info while running\n\ -fg same as -forground\n\ -font font\n\ -foreground forground color (also file system bar color)\n\ -geometry geometry\n\ -help help\n\ -iconic iconic\n\ -interval interval used per turn\n\ -mb show menu border\n\ -name run bugsx under this name\n\ -nobreed do not breed when running in batch mode\n\ -number number of biomorphs to draw (must be a square #)\n\ -printpop print the population when breeding\n\ -rv reverse video\n\ -seed use this seed for random number generator\n\ -segments use this many segments to draw an organism\n\ -showbreed show breeding subpopulation when in batch mode\n\ -showgenes show a graphic representation for the genes\n\ -synchronous synchronous mode\n\ -v verbose\n\ -xrm make no entry in resrouce database\n\ help help\n\n"); PRINT_COPYRIGHT; exit (0); }