Event-1.21/0002755000175000017500000000000012062657023012067 5ustar joshuajoshuaEvent-1.21/ChangeLog0000644000175000017500000007713611260760547013662 0ustar joshuajoshua2009-09-25 Joshua Pritikin * The repository has moved to a (hopefully) more permanent location. See http://gitorious.org/perl-event/mainline 2007-05-21 * Event is now stored in GIT. You can grab a copy with "git clone git://nirmalvihar.info/home/joshua/event.git". I will not be updating this ChangeLog anymore because the full history plus changelog will be stored in GIT. 2006-10-11 * Add casts to quell warnings as suggested by JDHEDDEN@cpan.org. 2006-10-10 * Release 1.07. * Marc Lehmann suggests using mg_ptr instead of mg_obj. Sounds good to me. 2005-05-14 * Release 1.06. 2005-05-09 * Fix 64 bit issue. Encouraged by Eric Rybski . 2005-04-23 * Release 1.05. * Fix ancient memory leak in loop() noticed by Nikita Savin . 2005-03-29 * Release 1.04. * Preliminary /dev/poll support from Michael Pergament . As of yet, there is no config test to turn on this code. Patches welcome. 2005-01-31 * Release 1.03. * Apply Win32 patch from Graciliano M. P. . 2004-12-08 * Release 1.02. 2004-12-08 Zefram * Generic watchers: implementation, documentation, and tests. * Documentation refinements. 2004-11-29 * Release 1.01. * Event.xs: Due to popular demand, queue_pending() is now a public API, for better or worse. Beware of race conditions. 2004-11-29 Zefram * A var watcher can currently be created with no variable to watch, provided of course that it is parked. However, once a variable has been set, the watcher cannot be returned to the no-variable state. The variable to watch can be changed, but the watcher rejects any attempt to set the reference to undef. Applied a patch to allow the variable reference of a var watcher to be set to undef. * Applied patch to clarify the documentation (with tweaks from Joshua). 2004-05-14 * Release 1.00 (with Marc Lehmann's encouragement). * c/watcher.c (pe_watcher_now): Check for a missing callback, not only a missing perl callback. Marc A. Lehmann 2004-04-26 * lib/Event.pm (import): Make NO_TIME_HIRES actually work. Jerry D. Hedden 2004-04-22 * c/signal.c (pe_signal_stop): When a signal watcher stops, the signal counter is cleared. Otherwise the signal watcher can generate one last event after being stopped, which is a bug. (Pointed out by Zefram ) 2004-04-21 * Release 0.88. * lib/Event.pm: Simplify hooking into Time::HiRes. Add a NO_HIRES_TIME export_ok symbol to turn off the probing. * Event.xs: Remove U2time. Remove install_time_api(). * lib/Event.pod: More refinement from Zefram . * lib/Event.pod: ($watcher->pending & signal watchers): More specific description by Zefram . * c/watcher.c (pe_watcher_now): Fix SEGV reported by Zefram . Add test. 2004-04-05 * lib/Event.pod (timer): Correction by Randal L. Schwartz . 2004-04-03 * lib/Event.pod (timer): Doc clarification (jdhedden@1979.usna.com). Tue Feb 18 21:57:04 2003 Joshua N Pritikin * Release 0.87. * c/var.c (tracevar_r, tracevar_w): Fix declaration for recent versions of perl (patch from Nick Eggleston ). Sat May 25 11:23:50 2002 Joshua N Pritikin * Release 0.86. * c/unix.c: Solaris works better without POLLWRBAND (Clemens Schrimpe ). Fri Feb 1 12:20:33 2002 Joshua N Pritikin * Release 0.85. * Apply patch from Allen Smith to avoid infinite polling loop on some select implementations. Also reported by Marc Lehmann . Tue Jan 22 12:20:24 2002 Joshua N Pritikin * Doc StarvePrio (Allen Smith ). * Remove IRIX special casing. Reports indicate that new versions of IRIX don't need any hacks. (Allen Smith ) 2001-06-22 * Release 0.83. 2001-06-22 * Waste less time in timeable.c. (Peter Lombard ) 2001-06-21 * Release 0.82. 2001-06-21 * Stop watcher if $w->cb(undef) (Damien Neil ) 2001-01-31 Joshua Pritikin * Release 0.81. 2001-01-25 Joshua Pritikin * Fix callback.t fail without Time::HiRes. 2000-12-08 Joshua Pritikin * Fix typo in EventAPI.h. 2000-12-07 Joshua Pritikin * Release 0.80. * Update Tutorial.pdf to Jochen's latest. 2000-12-06 Joshua Pritikin * Remove silly warning on $io->poll(T). * Fix $DIED doc. (paul@miraclefish.com) 2000-12-05 Joshua Pritikin * Change C callback prototype to (void(*)(pe_event*)) at request of Jochen. 2000-12-01 Joshua Pritikin * Warn if loop without active watchers. * Slightly more reliable default_exception_handler. 2000-11-28 Joshua Pritikin * Inline 0.30 integration (briani@activestate.com) 2000-11-17 Joshua Pritikin * Release 0.79. * Removed Event/inactivity.pm 2000-08-29 Joshua Pritikin * #undef HAS_POLL for sgi (treygraves@yahoo.com) * Moved REENTRANT & HARD flags to EventAPI.h. (Jochen) * Removed obsolete CBTIME flag. (Jochen) 2000-08-28 Joshua Pritikin * EventAPI += sv_2interval. (Jochen) 2000-07-06 Joshua Pritikin * Applied patch for IRIS poll() from R.de.Vries@fokkerspace.nl 2000-05-25 Joshua Pritikin * EventAPI += unloop_all. 2000-05-24 Joshua Pritikin * Release 0.78. * Invoke Carp::carp for internal warnings. 2000-05-19 Joshua Pritikin * Fix SEGV triggered when Event-Stats is enabled while loop is nested. 2000-05-12 Joshua Pritikin * Release 0.77. 2000-05-10 Joshua Pritikin * Fixed an obscure SEGV discovered by uri@sysarch.com. * EventAPI += NVtime. 2000-04-26 Joshua Pritikin * Release 0.76. * Fixed a horribly subtle bug in the handling of reentrant INVOKE1-style watchers (e.g. a timer) in nested loops. Added test. This change also removes at least one conditional from a hot code path. 2000-04-25 Joshua Pritikin * EventAPI += unloop. 2000-04-24 Joshua Pritikin * Release 0.75. * Attributes called in "set" mode now return the new value. * Renamed data() to private() and added back the old data(). Added tests & updated the pod. 2000-04-19 Joshua Pritikin * Release 0.74. * Resolved data() quandary. Added test. 2000-04-12 Joshua Pritikin * Updated perlqt.t example. 2000-03-24 Joshua Pritikin * Spell checked pod. * Release 0.73. * Fix for 5.6.0 with implicit context enabled. 2000-03-21 Joshua Pritikin * Rename unix_io.c -> unix.c in anticipation of Win32 support. 2000-03-14 Joshua Pritikin * Offer assurance about future compatibility (docs). 2000-03-10 Joshua Pritikin * Release 0.72. 2000-03-09 Joshua Pritikin * Rename NetServer::ProcessTop -> NetServer::Portal. 2000-03-08 Joshua Pritikin * Removed unused QUEUED & RUNNING flags. 2000-03-07 Joshua Pritikin * Made pending() aware of context. Added tests. 2000-03-03 Joshua Pritikin * Release 0.71. * Moved LoopLevel & ExitLevel from Perl to C, squeezing out some potential bugs. * Fixed SEGV triggered if $DebugLevel >= 4. * Warn on unmatched unloop. 2000-03-01 Joshua Pritikin * Added Tutorial.pdf (by Jochen). * Moved semaphore & msg into demo directory. No one has ever asked for them to be finished, so they aren't. 2000-02-25 Joshua Pritikin * Release 0.70. 2000-02-24 Joshua Pritikin * Fix bug in select() engine spotted by perl@jochen-stenzel.de 2000-02-22 Joshua Pritikin * Prune demo directory. * Add repeat.t demo. (perl@jochen-stenzel.de) 2000-02-18 Joshua Pritikin * Add perlqt.t demo. * Release 0.69. 2000-02-17 Joshua Pritikin * Tweak documentation. 2000-02-15 Joshua Pritikin * Release 0.68. 2000-02-14 Joshua Pritikin * More careful checking of intervals. (suggested by perl@jochen-stenzel.de) 2000-02-10 Joshua Pritikin * Fix yet another typemap bug. (perl@jochen-stenzel.de) * Make io default to poll=r; more stringent start test; fix demo/stdin.t (suggested by perl@jochen-stenzel.de) 2000-02-09 Joshua Pritikin * Release 0.67. Hopefully this release will prove stable. * Fix bomb in group watchers. (perl@jochen-stenzel.de) * Fixed another bug introduced in 0.61. (Insure++) * Tighten typemap. * Warn about non-existant methods. 2000-02-08 Joshua Pritikin * Release 0.66. * Fix horrendously subtle bug uncovered by Event-tcp. * Eliminate (hopefully all) silent failures. * Restrict var watchers to scalars. (perl@jochen-stenzel.de is too creative) 2000-02-07 Joshua Pritikin * Release 0.65. * Group watchers for watching watchers. See demo/group.t * Fix got() documentation, spotted by perl@jochen-stenzel.de * Make callback a prerequisite for starting watchers. * Add test checking FIFO dispatch of equal priority events. 2000-02-04 Joshua Pritikin * Release 0.64. * Applied patch from gbarr@pobox.com that allows one to obtain the number of events a watcher has pending in the event queue. Also, included was a cosmetic fix for the typemap. * Load the basic watcher types by default. * Adjust hup.t test (conrad@fringehead.org). 2000-02-03 Joshua Pritikin * Release 0.63. * Allow var watchers to watch the same variable. * Deprecated AUTOLOAD of Event->$type. (Nick & Graham) * Reworked priority documentation based on comments from perl@jochen-stenzel.de. 2000-02-01 Joshua Pritikin * Release 0.62. ** Please upgrade if you installed 0.61. ** * Allow implied stop() if required attributes are explicitly unset. 2000-01-31 Joshua Pritikin * Release 0.61. * is_cancelled() method (requested by perl@jochen-stenzel.de) * Doc updates. * Prevent starting unconfigured or badly configured watchers. Added tests. (perl@jochen-stenzel.de) XXX DANGER! THIS CHANGE CAN BREAK EXISTING CODE !DANGER XXX * Refuse to start cancelled watchers. Added test & updated doc. (perl@jochen-stenzel.de). 2000-01-26 Joshua Pritikin * If parked=>1 then the constructor will not invoke $watcher->start(). (uri@sysarch.com) * Release 0.60. * Added $watcher->data() attribute. (This is Uri Guttman 's fault.) 2000-01-20 Joshua Pritikin * Fixed refcnt problem caused by extra invocations of cancel() (Discovered by uri@sysarch.com.) Added test. * Release 0.59. * Fixed serious memory leak (isolated by perl@jochen-stenzel.de). Added t/leak2.t. 2000-01-19 Joshua Pritikin * Doc for timeout_cb (demanded by uri@sysarch.com :-). 1999-12-15 Joshua Pritikin * Added demo/variable_timer.t along with minor doc update. (jsalmon@gw.thesalmons.org) 1999-11-22 Joshua Pritikin * Release 0.58. * timeout_cb for io watchers. Added test. (suggested by Uri Guttman ) * Copy the callback specification from watcher to event for flexibility. * Removed support for clump. The performance trade-off for this feature was probably unmeasurable. Now it's definitely unmeasurable. :-) * Rename Ev* macros to Wa* to make room for new Ev macros. 1999-10-22 Joshua Pritikin * Remove EvNOW macro. 1999-10-11 Joshua Pritikin * Added demo/readline.t. (perl@jochen-stenzel.de) 1999-10-06 Joshua Pritikin * Release 0.57. * Memory leak fixed: ioevents were being retired to the wrong freelist. (thospel@mail.dma.be) 1999-09-23 Joshua Pritikin * Document is_active/is_suspended. (perl@jochen-stenzel.de) 1999-09-22 Joshua Pritikin * Skip hup.t on Win32. (Paul.Moore@uk.origin-it.com) * Release 0.56. * Fixed detection of EOF. Added test. (Gisle Aas) 1999-09-14 Joshua Pritikin * Figured out the strange pipe symantics on AIX and modified the io.t test to cope. (dfavor@austin.ibm.com) 1999-09-13 Joshua Pritikin * Release 0.55. * Changes for clean threaded build against 5.5.61. Unfortunately, this breaks threaded 5.5.3. If this is a problem for you then send patches. The threading variations in the devel track are driving me crazy. (dfavor@austin.ibm.com) * Fixed coredump trigger by attach_to test (cpan-testers@perl.org). 1999-09-10 Joshua Pritikin * Release 0.54. * Improved cb(...) diagnostics. Added tests. * Devel-PPPort (schinder@pobox.com of cpan-testers@perl.org). 1999-09-09 Joshua Pritikin * If a file is unexpectedly closed, the io watcher is no longer stopped. Instead the file handle is reset. This symantic allows io timeouts to continue to trigger and should make recovery simpler. Added tests. * Prohibit attach_to blessed refs. Added test. * Minor doc updates. * Release 0.53. * Fix Event::MakeMaker to pick the correct install directory. 1999-09-08 Joshua Pritikin * This release is NOT binary compatible with 0.52! * Obscure potential typemap bugs fixed. * Reworked the typemap to avoid the exotic 5.6 self-tied hash mechanism. It should now be fairly easy to backport Event to older versions of perl. * In the tradition of adding innovative (or at least strange) features to Event, constructors now accept (attach_to=>$ref). This will cause the watcher to attach its information to the given $ref instead of to a fresh anonymous hash ref. For backwards compatibility the default is still an anonymous hash. * Removed a bunch of deprecated features. * Reformatted the source to be more consistent (if not beautiful). 1999-08-18 Joshua Pritikin * Release 0.52. * Moved t/inactivity.t to demo/ because it fails occationally and I don't have time to figure it out. You might say that it takes too much time to write a good test of inactivity. 1999-08-02 Joshua Pritikin * Make mention of Time::Warp. 1999-07-29 Joshua Pritikin * Don't complain about Time::HiRes (uri@sysarch.com) 1999-07-27 Joshua Pritikin * Skip t/idle2.t if Time::HiRes is unavailable (lukka@iki.fi & gbarr@pobox.com). 1999-07-23 Joshua Pritikin * Release 0.51. * Notice bogus fds in both poll & select. Added test. * Make mention of the mailing list archive. 1999-07-20 Joshua Pritikin * Don't request benchmark results (artur@vogon.se). 1999-07-10 Joshua Pritikin * Release 0.50. * A few Win32 tweaks to get working tests to pass (jan.dubois). * Minor cleanup in preparation for 0.50. 1999-06-30 Joshua Pritikin * Release 0.44 (thanks: jan.dubois@ibm.net). * Renamed abort() to scrub() to avoid clashing with Perl's abort. * Removed remaining dependency on gettimeofday. * C++ clean. 1999-06-22 Joshua Pritikin * Release 0.43. * Tweaks for threaded compile (dfavor@austin.ibm.com). 1999-06-19 Joshua Pritikin * Release 0.42. * Rename event.c -> ev.c (Jan Dubois). * Split flags into individual methods: is_running, is_active, is_suspended, is_queued. * Repaired default_exception_handler. 1999-05-19 Joshua Pritikin * Release 0.41. * Added attributes() and configure() methods. 1999-05-18 Joshua Pritikin * When using eval {} inside a callback, $@ could fool Event into thinking that an exception is being thrown. 1999-05-17 Joshua Pritikin * Moved attributes from hash entries to methods. 1999-05-07 Joshua Pritikin * Fix unloop(''). 1999-05-06 Joshua Pritikin * Release 0.40. * Regularize event constructors. 1999-05-04 Joshua Pritikin * Doc fixes catalyzed by perl@jochen-stenzel.de. 1999-04-27 Joshua Pritikin * Release 0.39. 1999-04-20 Joshua Pritikin * Fix broken t/eval.t. 1999-04-19 Joshua Pritikin * More conservative refcnt policy for watchers. 1999-04-16 Joshua Pritikin * Release 0.38. * Rename 'mom' to 'w'. * Deprecate the accessing of watcher attributes via events. * Fix PL_ macros again. (*Argh!*) 1999-04-14 Joshua Pritikin * Release 0.37. * Redesign typemap. 1999-04-12 Joshua Pritikin * Make 'e_cbtime' available from perl. Added test. 1999-04-09 Joshua Pritikin * Release 0.36. * Return unloop_all($arg) from loop(). * Make compile with threaded perl. 1999-04-07 Joshua Pritikin * Release 0.35. * Documentation updates and reorganization. * Switch inactivity from e_interval to e_timeout. 1999-04-06 Joshua Pritikin * Release 0.34. 1999-04-05 Joshua Pritikin * Plug typemap holes. Implementation still needs improvement. * Make io timeout respect e_repeat. (gisle@aas.no). 1999-03-30 Joshua Pritikin * Release 0.33. 1999-03-29 Joshua Pritikin * Store 'e_max_cb_tm' and hand-off to stats engine. 1999-03-17 Joshua Pritikin * Morph events into watchers when they go out of scope. 1999-03-16 Joshua Pritikin * Refine typemap fix. 1999-03-15 Joshua Pritikin * Release 0.32. * Apply typemap fix as per gsar@activestate.com. 1999-03-09 Joshua Pritikin * Cut version 0.31 for PerlClinic. 1999-03-05 Joshua Pritikin * Simplified typemap in an attempt to squash bugs. 1999-03-04 Joshua Pritikin * Search @INC in Event::MakeMaker. 1999-03-03 Joshua Pritikin * Make io timers non-repeating. * Relax io watchers more. Now they can be started with either e_fd or e_timeout or both or neither. 1999-03-02 Joshua Pritikin * Allow creation of io watchers without a valid e_fd. Should probably do the same with the rest of the watcher types. * Added e_suspend. Do we keep the 'suspend' and 'resume' methods? 1999-02-26 Joshua Pritikin * Fixed refcnt problem triggered by deleting hash entries. Added test. 1999-02-25 Joshua Pritikin * Avoid qr// in keys.t. 1999-02-12 Joshua Pritikin * Reroute C-API croak through Carp::croak. Added test. 1999-02-11 Joshua Pritikin * Removed backward compatibility up to 0.24 (inclusive). * Factored event init/dtor code. * Added 'callback' hooks. Updated docs. 1999-02-03 Joshua Pritikin * Release 0.30. * Constructors now populate the watcher hash with any extra unrecognized key-value pairs. 1999-02-01 Joshua Pritikin * Better typemap diagnostics. There seem to be bugs lurking but I can't construct a short test case... 1999-01-19 Joshua Pritikin * Arrange for events to have the same careful typemap treatment as do watchers. Added test. 1999-01-12 Joshua Pritikin * Release 0.29. * Unplugged Time::Virtual (suggested mainly by Sarathy, Nick and Graham). See patches/time-hires. 1998-12-30 Joshua Pritikin * Added AllWatchers & typemap functions to the public API. * Moved Event::Stats to a separate tarball. I wonder if the stats API is too restrictive? 1998-12-28 Joshua Pritikin * Split Event::Watcher code into a separate file for intuitive importing via 'use' (suggested by artur@vogon-solutions.com). * Fix SEGV in keys %$event (ophir@internap.com & artur@vogon-solutions.com). Added test. * Tweaks to diagnostics. 1998-12-27 Joshua Pritikin * Release 0.28. * Event destruction now must be managed explicitly. Use the 'stop' method to disable a watcher and use 'cancel' to destroy a watcher. This change is an unfortunate necessity because of optimizations in perl's reference counting. * Suspend & cancel now abort any pending events. In previous releases, the callback could be called after cancel in some cases. 1998-12-25 Joshua Pritikin * Release 0.27. * Replaced newHVhv. Some versions of perl have a buggy implementation. * Fixed a few minor problems detected by Insure++. 1998-12-24 Joshua Pritikin * Fixed typos in croak messages. * Generous updates to Event.pod. * Bumped version to 0.26. Merry Christmas!! * Renamed (lots of) keys. * Added 'use_keys' method. Comments? * (Try to) remove support for leading dashes (any left?). * Factor out code to Time::Virtual (& Time::HiRes). 1998-12-19 Joshua Pritikin * Moved process.pm to demo directory. 1998-12-08 Joshua Pritikin * Added discussion of event loops vs. threads (kudos to Mark.Mielke.markm@nt.com & fellow loop'ers). 1998-11-20 Joshua Pritikin * Release 0.25. 1998-11-19 Joshua Pritikin * Move SAVETMPS/FREETMPS up to Event::_loop. 1998-11-13 Joshua Pritikin * Split ACTIVE flag into two separate flags, ACTIVE & POLLING, to more accurately track watcher state. 1998-11-09 Joshua Pritikin * Tweaks to io 'events' mask handling. * Move @EXPORT_OK list for qw(R W E T) to Event::Watcher. 1998-11-06 Joshua Pritikin * Fix SEGV in all_watchers/all_idle if zero watchers present. 1998-11-04 Joshua Pritikin * Nuke obsolete backward support code in io.c. (Poll constants to set event mask.) * Rename event_vtbl->watcher. 1998-11-01 Joshua Pritikin * Release 0.24. [Massive code changes -- caution advised!] * Reengineered hash-object implementation to use HVs. 1998-10-31 Joshua Pritikin * Removed tailpoll support from io watchers. File::Tail can just hook up with timers & a generic "block on read" API can be built on top of that if need arises. Nick, this okay? * Split watchers & events into separate C structures. 1998-10-24 Joshua Pritikin * Fixed misbehaving autoload code. * END hook to cancel all events before global destruction. Still needs more work to be sure the memory is freed. * Fixed bad arithmetic in io timeout code. Renamed interval epsilon and added better diagnostics (see Event::_timeout_too_early). 1998-10-20 Joshua Pritikin * Timers cancelled within their callback weren't! Fixed. 1998-10-19 Joshua Pritikin * Fix typo in c/queue.c (thanks again Jan!). 1998-10-18 Joshua Pritikin * Release 0.23. * Unified Perl & C API for hooks. * Niggles for Win32 (thanks Jan!). 1998-10-17 Joshua Pritikin * Release 0.22. * Include copy of self-tie patch with dist. * Documentation for Event::MakeMaker. * tailpoll revamped. * MIN_PERL_DEFINE clean. 1998-10-15 Joshua Pritikin * Improve sv_2interval typemap. 1998-10-08 Joshua Pritikin * Release 0.21. * Try to normalize benchmark. * 'now' was broken for inactive events. Fixed & added test. * Fixed infinite loop triggered by botched exception recovery. 1998-10-06 Joshua Pritikin * Release 0.20. * Rename inactive to inactivity. * Use new self-tie to wrap watcher objects. Leak test now passes for almost all watcher types. 1998-10-04 Joshua Pritikin * Slight improvements to gettimeofday.c. * Merged c_callback & perl_callback into one pointer slot. 1998-10-03 Joshua Pritikin * Added timeable methods to the public API. * Var watchers weren't working very well. Set up events/got mask stuff mirroring io watchers. Added tests. Does anyone really want timeouts? * Release 0.19. * Put in code for tailpoll, but I can't tell if it works because the tail-f behavior seems to already happen automatically. Comments? See demo/tail.t. * Added inactive watchers (& tests). * timeable API changes to allow multiple timers per watcher. * Fixed non-ANSI function declaration in c/signal.c * Reduced C API. * Renamed queueEvent to queue. * Fixed refcnt problem in DELETE. * Dashes depreciated. * Added -timeout to process watchers. Might be useful. * Fixed typo induced polling in one_event. * Moved R/W/E/T flags to Event from Event::io. * Changed the arguments to $Event::DIED in order to cope with $Event::DIED dieing. Fixed sweep exception handling. Added test. 1998-10-02 Joshua Pritikin * Watchers created with the C API now should require their perl support code automatically. Moved idle support to an autoloaded pm. * Added sweep & loop($timeout). Fixed sleep. * Release 0.18. * Added non-working export_fail prototype. Suggestions welcome. * Re-factored start & stop better (the preCB method is gone). * Finished up sleep(). Added tests. * Tied watchers are now based on pe_tmevent. 1998-10-01 Joshua Pritikin * Applied patch from Gisle for pe_sys_sleep/select. * Renamed 'watchvar' to 'var'. * Added tests for 'now' (it was completely broken!). * Tweaked debug levels. Someone needs to inventory debug warnings are decide what is reasonable. * Release 0.17 * Added tests. 1998-09-30 Joshua Pritikin * Added sleep(). Truly a tortuous experience. * Added min/max interval to idle watchers. * c_callback no longer prevents watcher destruction. Use refcnt! * Renamed various C APIs for accuracy (unix_io.c). * Reentrant flag added. 1998-09-29 Joshua Pritikin * Release 0.16 (only as a patch) * loop() now terminates when there are no active watchers left. * Depreciated async. Moved -priority to -nice & added warning. * Fixed minor stuff. * Make io timeouts work for real. (Thanks Gisle :-) * Release 0.15. * Improved the EventAPI.h version check. * Added -timeout for io watchers. Untested. * Fix io watcher bugs (unix_io.c) pointed out by Gisle Aas. 1998-09-28 Joshua Pritikin * Release 0.14. * Gutted the internals to make events reentrant. * The $Now cache was not being refreshed and that was causing timers to be queued, well, never. * Fixed whitespace in Event.pod. (Gisle Aas again.) * Optimized priority queue (hopefully). I probably should have benchmarked it first. :-P 1998-09-27 Joshua Pritikin * Release 0.13. * Moved and renamed lots of methods. Yet, added code to ease backward compatibility. (perl-loop suggested) 1998-09-24 Joshua Pritikin * Integrated rewritten documentation contributed by Gisle Aas. Thanks! 1998-09-21 Joshua Pritikin * Release 0.12. * Event::MakeMaker & event_api.h. 1998-09-14 Joshua Pritikin * Add 'total' stat. Moved stat methods to Event::Loop package. 1998-09-11 Joshua Pritikin * Release 0.11. 1998-09-10 Joshua Pritikin * Regularized exception handling. $Event::DIED is now called if an event dies. * Allow timer interval to be a scalar ref. 1998-09-09 Joshua Pritikin * Tweaked queue scheduling. Events with priorities <= 5 now starve if higher priority events are available. * Changing the event priority of a queued event will now reque the event into the appropriate queue. * Split NetServer::ProcessTop into it's own tarball. 1998-09-04 Joshua Pritikin * Release 0.10. * NetServer::ProcessTop implements a top-style control panel available via telnet ($$ % 7000). See util/top.pl. * Proxy "tied" event type that allows completely perl-side implementation of new event handlers. * Event::process is working again (implementation is entirely in perl). * Eliminated race conditions in signal handling. * Zombie events are still not being collected due to mysterious refcnt problems. It is possible that this cannot be resolved until perl implements tied hashes properly (through a VTBL!). * Removed $Event::*::Count since it is superceded by NetServer::ProcessTop. 1998-08-28 Joshua Pritikin * Fixed serious bug in the event destructor. 1998-08-22 Joshua Pritikin * Accept file descriptor numbers in addition to filehandles, etc. Maybe non-portable, but nice for unixen. 1998-08-19 Joshua Pritikin * Fixed repeating timer logic. Tweaks for idle events. 1998-08-14 Joshua Pritikin * Completed re-write of almost everything in C. Change 144 on 1998/05/31 by (Graham Barr) Event::watchvar - Now passes $ref to callback All - added use attrs qw(locked method) to all subs, and code to ensure this will work on pre-threaded perl Change 143 on 1998/05/31 by (Graham Barr) Event.xs - Fixed so will compile with threaded perl Event::timer - Added -hard option Change 124 on 1998/04/04 by (Graham Barr) new files Change 123 on 1998/04/04 by (Graham Barr) Event - Tweaks to keys dispatchAsyncEvents() Change 121 on 1998/04/01 by (Graham Barr) Event::timer - added Time::HiRes Event::idle, Event - moved idle events into sub-module Makefile.PL - Removed INSTALLDIRS => 'perl' Event-1.21/Makefile.PL0000644000175000017500000000123111013441642014025 0ustar joshuajoshua# This -*- perl -*- script makes the Makefile require 5.006_003; # 5.006_002 fails use ExtUtils::MakeMaker; #push @Safe, OPTIMIZE => '-Wall' if 1; # Parasoft's Insure++! push @Safe, OPTIMIZE => '-g' if 0; push @Safe, CC => 'insure', LD => 'insure', OPTIMIZE => '-g' if 0; my @opt=(PREREQ_PM => { Test => 1 }, VERSION_FROM => "./lib/Event.pm", NAME => "Event", TYPEMAPS => ['./lib/Event/typemap'], INC => '-Ic -Ilib/Event', H => [glob("c/*"), glob("*.h"), "lib/Event/EventAPI.h"], @Safe, 'clean' => {FILES => join(" ", map { "$_ */$_ */*/$_" } qw(*% *.html *.b[ac]k *.old *.orig)) }, ); WriteMakefile(@opt); Event-1.21/README.EV0000644000175000017500000000465611245152110013256 0ustar joshuajoshuaDate: Sat, 21 Feb 2009 09:07:14 +0100 From: Marc Lehmann To: Joshua N Pritikin Subject: Re: EV On Fri, Feb 20, 2009 at 06:32:57AM -0800, Joshua N Pritikin wrote: > I just noticed EV: > > http://search.cpan.org/~mlehmann/EV-3.53/libev/ev.pod > > It looks like you have based your work on the Event interface and > extended it to be much more flexible. Wonderful work! Actually, the API is much less flexible :-) It is heavily influences by libev, which in turn is influenced by libevent. However, I was using Event for more than a decade, and I think it is correct to say that it was influencing me most when writing libev and EV. I of course surveyed many event toolkits, but Event was the most well-thought-out one. The only "bugs" I identified were: - watcher lifetime != perl object lifetime (it sounds like a nuisance at first, but it is really non-perlish and hard to manage). - the event queue (it is quite possible to get Event into a state where it queues events faster than it can remove it, especially as it becoems less efficient with more events). - the interaction of priorities, queueing and event handling is undocumented, but crucial (starve prio etc.) - EV/libev has no such priority system at all, as priorities only determine order of callback invocation. - Event isn't reentrant (almost no event libs are), which is a non-issue for most uses, but a big issue for me (Coro). So EV/libev is basically Event + some "fixes", as opposed to some new invention, or some other event loop, even though the API is drastically different. It took me some 15 years of gathering experience it write it, too. Event was crucial to my learning :) (And, yeah, once the API is set in stone, the only way to "fix" it is makign a new module - see object lifetimes for example, which you would probably do differently if you would write Event from scratch). And, oh, yeah, the XS interface to Event also inspired me a lot in EV and other modules that offer such an XS interface. Without Event, EV (or Coro) would not have an XS-level interface. So thanks a lot for Event :) -- The choice of a Deliantra, the free code+content MORPG -----==- _GNU_ http://www.deliantra.net ----==-- _ generation ---==---(_)__ __ ____ __ Marc Lehmann --==---/ / _ \/ // /\ \/ / pcg@goof.com -=====/_/_//_/\_,_/ /_/\_\ Event-1.21/Tutorial.pdf-errata.txt0000644000175000017500000000043611257122265016460 0ustar joshuajoshuaDate: Wed, 23 Sep 2009 14:41:50 +0200 (CEST) From: "Kiss Gabor (Bitman)" In section 4.3 page 31 (33 according to PDF reader) warn "Event after ", time-startup, " seconds.\n"; should be changed to warn "Event after ", time-$startup, " seconds.\n"; Event-1.21/MANIFEST.SKIP0000644000175000017500000000007010743146017013760 0ustar joshuajoshua^MANIFEST\.bak$ Makefile(\.old)?$ \.rej$ ^\.i.*$ ^\.git Event-1.21/README0000644000175000017500000000051211244711356012744 0ustar joshuajoshuaEvent - A Generic Perl Event Loop This extension aims to provide an simple and optimized event loop for a broad class of applications. Available via http://www.perl.com/CPAN/authors/id/JPRIT/ ALERT: Marc Lehmann may have taken over the future of event loops in Perl. Check out his libev library and EV Perl module. 25 Aug 2009 Event-1.21/Event.h0000644000175000017500000000775511013424505013325 0ustar joshuajoshua#include "EventAPI.h" #define PE_NEWID ('e'+'v') /* for New() macro */ #define PE_RING_INIT(LNK, SELF) \ STMT_START { \ (LNK)->next = LNK; \ (LNK)->prev = LNK; \ (LNK)->self = SELF; \ } STMT_END #define PE_RING_EMPTY(LNK) ((LNK)->next == LNK) #define PE_RING_UNSHIFT(LNK, ALL) \ STMT_START { \ assert((LNK)->next==LNK); \ (LNK)->next = (ALL)->next; \ (LNK)->prev = ALL; \ (LNK)->next->prev = LNK; \ (LNK)->prev->next = LNK; \ } STMT_END #define PE_RING_ADD_BEFORE(L1,L2) \ STMT_START { \ assert((L1)->next==L1); \ (L1)->next = L2; \ (L1)->prev = (L2)->prev; \ (L1)->next->prev = L1; \ (L1)->prev->next = L1; \ } STMT_END #define PE_RING_DETACH(LNK) \ STMT_START { \ if ((LNK)->next != LNK) { \ (LNK)->next->prev = (LNK)->prev; \ (LNK)->prev->next = (LNK)->next; \ (LNK)->next = LNK; \ } \ } STMT_END /* too bad typeof is a G++ specific extension #define PE_RING_POP(ALL, TO) \ STMT_START { \ pe_ring *lk = (ALL)->prev; \ PE_RING_DETACH(lk); \ TO = (typeof(TO)) lk->self; \ } STMT_END */ typedef struct pe_cbframe pe_cbframe; struct pe_cbframe { pe_event *ev; IV run_id; void *stats; }; typedef struct pe_tied pe_tied; struct pe_tied { pe_watcher base; pe_timeable tm; }; #define WKEYMETH(M) static void M(pe_watcher *ev, SV *nval) #define EKEYMETH(M) static void M(pe_event *ev, SV *nval) /* When this becomes a public API then we should also publish C interfaces to set up perl & C callbacks. For now we can be lazy. */ struct pe_event_vtbl { HV *stash; pe_event *(*new_event)(pe_watcher *); void (*dtor)(pe_event *); pe_ring freelist; }; struct pe_watcher_vtbl { int did_require; HV *stash; void (*dtor)(pe_watcher *); char*(*start)(pe_watcher *, int); void (*stop)(pe_watcher *); void (*alarm)(pe_watcher *, pe_timeable *); pe_event_vtbl *event_vtbl; pe_event *(*new_event)(pe_watcher *); }; #define PE_ACTIVE 0x001 #define PE_POLLING 0x002 #define PE_SUSPEND 0x004 #define PE_PERLCB 0x020 #define PE_RUNNOW 0x040 #define PE_TMPERLCB 0x080 #define PE_CANCELLED 0x400 #define PE_DESTROYED 0x800 #define PE_VISIBLE_FLAGS (PE_ACTIVE | PE_SUSPEND) #ifdef DEBUGGING # define WaDEBUGx(ev) (SvIV(DebugLevel) + WaDEBUG(ev)) #else # define WaDEBUGx(ev) 0 #endif /* logically waiting for something to happen */ #define WaACTIVE(ev) (WaFLAGS(ev) & PE_ACTIVE) #define WaACTIVE_on(ev) (WaFLAGS(ev) |= PE_ACTIVE) #define WaACTIVE_off(ev) (WaFLAGS(ev) &= ~PE_ACTIVE) /* physically registered for poll/select */ #define WaPOLLING(ev) (WaFLAGS(ev) & PE_POLLING) #define WaPOLLING_on(ev) (WaFLAGS(ev) |= PE_POLLING) #define WaPOLLING_off(ev) (WaFLAGS(ev) &= ~PE_POLLING) #define WaSUSPEND(ev) (WaFLAGS(ev) & PE_SUSPEND) #define WaSUSPEND_on(ev) (WaFLAGS(ev) |= PE_SUSPEND) #define WaSUSPEND_off(ev) (WaFLAGS(ev) &= ~PE_SUSPEND) #define WaPERLCB(ev) (WaFLAGS(ev) & PE_PERLCB) #define WaPERLCB_on(ev) (WaFLAGS(ev) |= PE_PERLCB) #define WaPERLCB_off(ev) (WaFLAGS(ev) &= ~PE_PERLCB) #define WaTMPERLCB(ev) (WaFLAGS(ev) & PE_TMPERLCB) #define WaTMPERLCB_on(ev) (WaFLAGS(ev) |= PE_TMPERLCB) #define WaTMPERLCB_off(ev) (WaFLAGS(ev) &= ~PE_TMPERLCB) /* RUNNOW should be event specific XXX */ #define WaRUNNOW(ev) (WaFLAGS(ev) & PE_RUNNOW) #define WaRUNNOW_on(ev) (WaFLAGS(ev) |= PE_RUNNOW) #define WaRUNNOW_off(ev) (WaFLAGS(ev) &= ~PE_RUNNOW) #define WaCANCELLED(ev) (WaFLAGS(ev) & PE_CANCELLED) #define WaCANCELLED_on(ev) (WaFLAGS(ev) |= PE_CANCELLED) #define WaCANCELLED_off(ev) (WaFLAGS(ev) &= ~PE_CANCELLED) #define WaDESTROYED(ev) (WaFLAGS(ev) & PE_DESTROYED) #define WaDESTROYED_on(ev) (WaFLAGS(ev) |= PE_DESTROYED) #define WaDESTROYED_off(ev) (WaFLAGS(ev) &= ~PE_DESTROYED) #define WaCANDESTROY(ev) \ (WaCANCELLED(ev) && ev->refcnt == 0 && !ev->mysv) #define EvFLAGS(ev) ((pe_event*)ev)->flags #define EvPERLCB(ev) (EvFLAGS(ev) & PE_PERLCB) #define EvPERLCB_on(ev) (EvFLAGS(ev) |= PE_PERLCB) #define EvPERLCB_off(ev) (EvFLAGS(ev) &= ~PE_PERLCB) Event-1.21/Tutorial.pdf0000644000175000017500000065614110624507753014406 0ustar joshuajoshua%PDF-1.3 %âãÏÓ 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj 5 0 obj<>endobj 6 0 obj<>endobj 7 0 obj<>endobj 8 0 obj<>endobj 9 0 obj<>endobj 10 0 obj<>endobj 11 0 obj<>endobj 12 0 obj<>endobj 13 0 obj<>endobj 14 0 obj<>endobj 15 0 obj<>endobj 16 0 obj<>endobj 17 0 obj<>endobj 18 0 obj<>endobj 19 0 obj<>endobj 20 0 obj<>endobj 21 0 obj<>endobj 22 0 obj<>endobj 23 0 obj<>endobj 24 0 obj<>endobj 25 0 obj<>endobj 26 0 obj<>endobj 27 0 obj<>endobj 28 0 obj<>endobj 29 0 obj<>endobj 30 0 obj<>endobj 31 0 obj<>endobj 32 0 obj<>endobj 33 0 obj<>endobj 34 0 obj<>endobj 35 0 obj<>endobj 36 0 obj<>endobj 37 0 obj<>endobj 38 0 obj<>endobj 39 0 obj<>endobj 40 0 obj<>endobj 41 0 obj<>endobj 42 0 obj<>endobj 43 0 obj<>endobj 44 0 obj<>endobj 45 0 obj<>endobj 46 0 obj<>endobj 47 0 obj<>endobj 48 0 obj<>endobj 49 0 obj<>endobj 50 0 obj<>endobj 51 0 obj<>endobj 52 0 obj<>endobj 53 0 obj<>endobj 54 0 obj<>endobj 55 0 obj<>endobj 56 0 obj<>endobj 57 0 obj<>endobj 58 0 obj<>endobj 59 0 obj<>endobj 60 0 obj<>endobj 61 0 obj<>endobj 62 0 obj<>endobj 63 0 obj<>endobj 64 0 obj<>endobj 65 0 obj<>endobj 66 0 obj<>endobj 67 0 obj<>endobj 68 0 obj<>endobj 69 0 obj<>endobj 70 0 obj<>endobj 71 0 obj<>endobj 72 0 obj<>endobj 73 0 obj<>endobj 74 0 obj<>endobj 75 0 obj<>endobj 76 0 obj<>endobj 77 0 obj<>endobj 78 0 obj<>endobj 79 0 obj<>endobj 80 0 obj<>endobj 81 0 obj<>endobj 82 0 obj<>endobj 83 0 obj<>endobj 84 0 obj<>endobj 85 0 obj<>endobj 86 0 obj<>endobj 87 0 obj<>endobj 88 0 obj<>endobj 89 0 obj<>endobj 90 0 obj<>endobj 91 0 obj<>endobj 92 0 obj<>endobj 93 0 obj<>endobj 94 0 obj<>endobj 95 0 obj<>endobj 96 0 obj<>endobj 97 0 obj<>endobj 98 0 obj<>endobj 99 0 obj<>endobj 100 0 obj<>endobj 101 0 obj<>endobj 102 0 obj<>endobj 103 0 obj<>endobj 104 0 obj<>endobj 105 0 obj<>endobj 106 0 obj<>endobj 107 0 obj<>endobj 108 0 obj<>endobj 109 0 obj<>endobj 110 0 obj<>endobj 111 0 obj<>endobj 112 0 obj<>endobj 113 0 obj<>endobj 114 0 obj<>endobj 115 0 obj<>endobj 116 0 obj<>endobj 117 0 obj<>endobj 118 0 obj<>endobj 119 0 obj<>endobj 120 0 obj<>endobj 121 0 obj<>endobj 122 0 obj<>endobj 123 0 obj<>endobj 124 0 obj<>endobj 125 0 obj<>endobj 126 0 obj<>endobj 127 0 obj<>endobj 128 0 obj<>endobj 129 0 obj<>endobj 130 0 obj<>endobj 131 0 obj<>endobj 132 0 obj<>endobj 133 0 obj<>endobj 134 0 obj<>endobj 135 0 obj<>endobj 136 0 obj<>endobj 137 0 obj<>endobj 138 0 obj<>endobj 139 0 obj<>endobj 140 0 obj<>endobj 141 0 obj<>endobj 142 0 obj<>endobj 143 0 obj<>endobj 144 0 obj<>endobj 145 0 obj<>endobj 146 0 obj<>endobj 147 0 obj<>endobj 148 0 obj<>endobj 149 0 obj<>endobj 150 0 obj<>endobj 151 0 obj<>endobj 152 0 obj<>endobj 153 0 obj<>endobj 154 0 obj<>endobj 155 0 obj<>endobj 156 0 obj[11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 89 0 R 91 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R ]endobj 157 0 obj<>endobj 158 0 obj<>endobj 159 0 obj<>endobj 160 0 obj<>endobj 161 0 obj[157 0 R 158 0 R 159 0 R 160 0 R ]endobj 162 0 obj<>endobj 163 0 obj<>endobj 164 0 obj[163 0 R ]endobj 165 0 obj<>endobj 166 0 obj<>endobj 167 0 obj[166 0 R ]endobj 168 0 obj<>endobj 169 0 obj<>endobj 170 0 obj<>endobj 171 0 obj<>endobj 172 0 obj<>endobj 173 0 obj<>endobj 174 0 obj[169 0 R 171 0 R 173 0 R ]endobj 175 0 obj<>endobj 176 0 obj<>endobj 177 0 obj<>endobj 178 0 obj<>endobj 179 0 obj<>endobj 180 0 obj<>endobj 181 0 obj<>endobj 182 0 obj<>endobj 183 0 obj<>endobj 184 0 obj<>endobj 185 0 obj<>endobj 186 0 obj<>endobj 187 0 obj<>endobj 188 0 obj<>endobj 189 0 obj<>endobj 190 0 obj<>endobj 191 0 obj<>endobj 192 0 obj<>endobj 193 0 obj<>endobj 194 0 obj<>endobj 195 0 obj<>endobj 196 0 obj<>endobj 197 0 obj<>endobj 198 0 obj<>endobj 199 0 obj<>endobj 200 0 obj<>endobj 201 0 obj<>endobj 202 0 obj<>endobj 203 0 obj<>endobj 204 0 obj<>endobj 205 0 obj<>endobj 206 0 obj<>endobj 207 0 obj<>endobj 208 0 obj<>endobj 209 0 obj<>endobj 210 0 obj<>endobj 211 0 obj<>endobj 212 0 obj<>endobj 213 0 obj<>endobj 214 0 obj<>endobj 215 0 obj<>endobj 216 0 obj<>endobj 217 0 obj<>endobj 218 0 obj<>endobj 219 0 obj<>endobj 220 0 obj<>endobj 221 0 obj<>endobj 222 0 obj<>endobj 223 0 obj<>/Dur 10/Trans<>>>>>endobj 224 0 obj<>stream xÚ=ŒÁ Dï|ÅõR ”®MêY~ÀEL¡Š­ßïV³“·ÙÉÌ>Y]u „†Ðj”€šFÝ‘ñ¯Å!ÛM×ÄzKµšÌ?¨v8ð®’°#„¨ ¤¦°n7¼}^àJ¤G™C¹¤s@Ì8ù2a}m×róøEÓìÖÉïí –Ù; + endstream endobj 225 0 obj 137 endobj 226 0 obj<>>>>>endobj 227 0 obj<>stream xÚ+ä2Ð37U&@ÂÌB¡(]ÁM-M,LŒŠRÒ¸ ÁB† Æf ”œËåÂåÂÈŒZ ˆendstream endobj 228 0 obj 60 endobj 229 0 obj<>/Dur 10/Trans<>>>/Annots 156 0 R>>endobj 230 0 obj<>stream xÚ¥šKsÜ6 Çïþ<&3"R%õTÇyŒ;íÄ­Ýæ’‹¼+ÛJv¥­¤uŸ¾vƒ;ÓIfmÚ?I‚H@þç,MŠ\À‡†SŠá^¤ð/¯rQj%†FÜIû#)2ƒÿWÛ³W7pY ?œ?ಗo+!‹$7w@™Äo×ÏÞ<6Ý$ÖC _Ånèï‡z»m»{Ñvâª6b?âhzh„C·ýz¿ižß|:{C#ñãÏw¢2I!ŠÔÀÝ·B¥:Ñ~´×(ìåÛRÈÔ‹H '"Qpõ¯ýê4\OM÷½ÙˆÏðG€y<Ûª_>YøÅèàdÝÂaÒÏ>>/ÄëfÕlo›ä¤é"\˜Ÿ« ¾ΘV"X …[‘FãŒ@äM}»iD'.ú;OÚ 3xw%ậÐE"ýMð_š[QUðÜ…~uó ,&„å6J9y2—Ý4Àꬦ¶ïxqyUØÇåy’ûÁÅ`+Š]PºÊ’’Ð0›We ‚oÀ«¦zü[æD¬pb=-Áà ‹Sx†dyB o8?†§ðy:Ï…Ø£4Á p»Û4[ð­—pDg«ÇoÝêaè»~?†øŒx^^dÄ^vÀÙËÓ¥].†&XKa€p8%кù¬ì)ëê¤Zxcm=óÞZ…ÖÊŸên½Áõ¥lÊŠXǸt&. rxš Þæ=§ðÒ®Ç}[%Šç ÖLc÷'ð»á½õO5à©çè›á±m¾ —ž¼=¸%P4 U, =]Äè‚ÒRÚ)08%ÐAËÞOY™0eŸ®¾Ôì<ƒXõݪÙM‘‰J‰2‰ž®ÒMô…CÜ —:‡Õú½þl#Äi¥TÑ©Œˆöteã•¡ €‚û‡SÓ]ôÈ!ÓÙ!!\Oõ0…³Ê¦ïwü4uY-Ótfš6˜¤8š8M”Íá”@'4EÞMSÃzûijˆÇd¼nÀÉöt™Fh ìNÜ îesð‰ø ö¹“C7ËÉVàÌVèJEh`èÚ ç\è.†"æÂûIæ>õìL£¸ývÚŽ—)êR*æRž.—K™=,ÐRâ^v(Æ5n×í}WoN5ŠN²µ,ˆÈ"â®btEiW$Ë£òQ†ò1Ç])@Çý¸kº1Ú—†ì nÀé6!ËãmÁ½3¯:ìHûqê·í÷:Þ”—9IónÀ‰ÈIß–£ €Ç3úæßom3â¨Ô•>FÏw»M»² $Tú±*9ÚéÈÉγ%jÐGÝ6ŸÆàdù~?Áþ±Sæ¢[—³§SÁòû-®—^X_IûDpžˆ×¾ÈùÑßm@¦Â—ý/àŠá’ÿñg¹,Ej_¢úIþqö/—+[Jendstream endobj 231 0 obj 1934 endobj 232 0 obj<>/Dur 10/Trans<>>>/Annots 161 0 R>>endobj 233 0 obj<>stream xÚ|‘ÏkAÇ7 Æ9xQvŽzÙÍæ×&PšÚ¦9UÚ€­iZ•®1¿° $ôT<åj%²èÕCþäP¤Ñ^íÉHJC±ÕÛ’Y²™çÌnj"Jgv¿¼ÏÌw†÷Þ¤n^ò#*>* Ê,"7þ}”I¢‡h.‰È`_BvD⎉8=é¦ëLD&3QHò†¨ÊÈC¯ëÁšýyÀ #_ˆ÷Ÿê0È( ñÁS݉¢ÈKöÈ?©Ó¢…É Ý(¾@+•|4˜¿6Æ‹<»ŸÊçPîÁÃ,šO%òròqîzüÑßå»{w˜å{˜ú=^ªú› L#Ow›]dI˜>‰)ëeLŸ½-Ä„™h‰#“"Ö½#ÄP.“O ·hn!a yýBäæ8}ŠØ ކÞÀ€9»³Oß ý³O h¶¨šêS«ú.ìúCõ¨4jc‘jƒ*ÞZM—?0ªsÜY¬4Þ„ä²öÂÊÆ:4º+îÀ.ש‰ž<ØÅ5Ã¥7YhR½³eÔíyp3§Jšp;c$Ì=ã¨Ùí´æt½Åö y›<»ØÑ_ï›dSôÎ<´ôÑŠ®h¯ž~±?ÇÈn(Í·©ÖËK5šoIX;ZÜÕ×–³¤«vÜzoQºà44¯E:àìîe-z„ÜÕkšEW‹¤0­•Yôÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨IF 1#K#=KJMv á äËoendstream endobj 234 0 obj 727 endobj 235 0 obj<>/Dur 10/Trans<>>>>>endobj 236 0 obj<>stream xÚìÛsä6vÆ,iº­¡®›Â´7-SÉCfF#ÍEU©TíÌÎ$~K%®Ú‡T¶ví]ÇYOvl'•ÿ> ’û¢¾|¥n6›ÙÄç€ ð׳çO_¿¼/wâåÕ›ëOº~.¦—÷/¯ßܽ¸þôíõwg7jÑÍõí+ù÷‡¿œ½ýFlö\,¬_ÄfÏ>Ü_ß¼~z{ýÍwbí×·7rö{óôúëþôñ¿üáçï?þøwßüç™Zóîé]µæß¿¼yú¦ZS¬ûÍŸ¿½þù÷?ýP­÷æúæ¹^ëÅ\çýÿ|ûéÿ>þøíõÇï®ùéú‡?þïO×ÿýéãŸ>ýþ/?]ÿ×÷?ˆ­ÿüýOrë÷ßœýõúîæV$.ÿÅëû§/äÁŠßp'æäÏøúÙ»û÷g_?û×z{}{óÏk½~+_?|xþüöæöÞ|~ýV¾Ë¥7o^܈ÿûÛ›W·/îïïîï^Üøpw{ÿî7/_ݾº}÷ÞÝF¾¾~ûæNN÷wÏŸ¿º½¿“ÿrÛ½“Óo^¾{ÿþÃÛßÊéÝ{ùý»÷ïÞø ÷'÷*÷$_Í2ùZÍ«¡üg__ÿüé—oŸýîúåí›gÿ,~êí³·ÿòîúÍõ׿=ãÔuú™˜.è3õþÎdD®^/„ó]BâB¼r€Y•´(ËrÁÅ(•b·ŽY9:µeÒQ_®jO´åâ‚JªÁˆ8ÿI™µ©üR€:{$Ë곋òâ³ >@äÚ N a/ˆ]P+?«óZêóß‘ù+Û/üïkwT竳Žóæä{é|Y¶üÚ‘¿gãö¾\æj!Ê% –Ó‘%£¬}¶>ÙU–˜O­8che÷ ÷í¨µapUÿ¯l$Ð"#´½³·ö!@VxÁD*µ¸pͰsy'´¶Ýñ+§’áĶÕGƒ_('ÓÇà‡¥cƒÑò&Ò“,‰™`f7s0gô­<’ o ¸GÒ<†£î=ŠA©Ð3§Å5â çŠë>¡Q+¯Ô›D‘ò&ƒlAͲ‰ô!t´h×g˜Wç|‡¼ûàÊQèQdj“+;ê3¼Ð§‘`‰4Å›H(..êbë&b›.Gn ¢Ë&$ü®„6‡ÆÒd,>‚ŒX)¸‚bƒVÚ—$ ŠZµAAAIq9u}WͶV Žå­R¿ í&j-JÛŠ;óÔŸ+ÔZ…"2:W¡q9H cûÉ-Š¿ài¹£›"C9…–}'×ò‹‰Bd˜ ë¿PFö%]½xïúˆÈIÞ¬éÌ„ÈЇë« ¡HÀDŠêŒâa2¨F+@Ù¬áoJ~‚­ã2kŽ…ˆ<¦`9Vh3¨u¡5²¯ƒš,4A,ñð¥<Ž ·z'dX d¬œŒ.¯>H†“ÄÚÈ ~›á숃Œ5‘d3L~PWökÏßIu“AÔð ñdÀfl ¥:ø£váÙðŽ² ™& ×gxÁ«õˆp‹\B++ÝBIE“¾jÊîk¯ÿ[wµqú¯pÒAA[ªœõNý_ oܵÒðÆ)SD‚øKý+!((i7L'ö(8PKÓi›”•°PHe|œq6‚ Ó}7¹»pUeV‰‡·ú™Êæ©TtÊø‰9…jJý-Ó‘çbƳ̀q5êöÌüJOO6q³œÍr1‰×ÔšÇ1?É+4’wшƒg31e“£Äñ¹€b&^Ç u¥¦´3GDÓô}0®F’‘‹«f ¯8“36¥)ãù\öÇ{¸±ÞD€ñèä¸Êâx‰É¢ÆL*›LRѸ’PÉíGØŒ«zJ‘8×#0¼ºš ]$#›—ó‹‹,î'NçÙœ Q>›OYM†üYygó“ã^Õ¢I…M’[6ÉøD aј$T­‰]LªËwÊem3Ì4O C¡‚YµËh2.敲$2Ä.é “nD–MâÁˆ)›œïid”©ò”ß6Dñ¥»6oÓE£2æœþ8WêMƱ¿U“ÁJó’šG;A_’Œq;àM¸ÓǦÛsg&)§"_$túO/P jwC?лgm3ô^òêölÞ[Åàõˆßìíž»#¬{¢µ+7 Šðdº; ô¬q”N 4”d¡vpyobӡ›q†L±,séYÕŸY ¿é #Ðû}dWÑUXéì–Ëwõiȇ{»§°Õ"¯›b·#lÿõø)ÛÝmÝá~Dœ@œ‡úR¾RíöÄÓ;ÝÎclFÝû7 Ç & ÈKi7Äåœ3Æ4'ޤѥ|½ë^oRÍn廬Ü,‡l­É*¯“dêògä¡·ž³¬·U?©a2ü“Â9O$ƒó&Ï‘dDy“f·óƒÞDYö*¯ä“qiòŒ÷{“Ðõ7d3´7qv«Þƒá Ãd8Ö„Â œ ±d8oˆŒ¨²I Gøþè27¯ NyæäÙÍàÁnèÉhÛŒ²·z·û·Q]Ã* z“D2:Ž’œ(nû{mk‹Ë£2IÞše‡ÊFHÓ^Ö3iè`àÄLjv«áŸKú~—û}?Ò?BÞŠ@)6õ#Š©ðÃq¯ïþ¨úŒôtå÷MtV(;^rç_.©gÖP_gW3úoõ{_ÞŽ}¦<Ž€Úñ]&#µ†3muu¸iœ(\I„ÓµíEŽ ShBÿÚú‡’c]0­qŠèwüj²ñAëÕp¿ãWŸk2äU+…äTh´Í Dë4X?§ÝCÑŠÁdä c›#м ©Ó ‰U‚qy¹ dlœŒ™ìàRÝ¡šÏ}0œÛw‘-Ê{jé/¿’Îäè2je Û R“+r^äaúËÂk–·fÝ…d‹ìª7™ÍfWjq9›Íç0Ú SÉXH2(¿\™º¼I s=2ôìÊÉèg‚¢’Ù0Ú÷ZÕSÿÙÃIc5d|u)I¾¸d£È`qd”2Vg¸ÝB”Œl&£Õ¢¼j¼ÂmãjâÍŽ.¿R&ãè«k@íÙÜoÓMÆfho¢Œ;5ÁðÞ«µÔ™-Í—TÚD¨Þ€*Ça· /]7Y³&Õn¬J‰ôìþ”M<2NeÓPœá·@󛕹- Òdœ “Ñ|,­Ù(ÍKǶÂÌM–Z¯1D†ãb¼¥ÔX^Cþ7MÄÜôÈ“zÞMz?¼‰GF†ß‡O¨m¢ÓŠÓm‰Ýñ ž&#g çFo“ î¶ènÃ2êˆÐ·NNª•Éc…<2ȵM2 k{Eî:¥ÇÞN“*µZ2äx“f'’ÁV«®Íð[7ó“A§ùå‚xÔ²¼Ãf”Ñd”Í¥M2¼U†ÉðiØ#2‚5]ŽÑ˜ËŠÏ)&Ãý -óË%¢ÌJ áLXÍ 2ÚQF ‡–7ñŒC+?L4ê´+{d3‚í@ëÎõfå´=*µÛ37Ypžë < Ç./‹Sº$§»%rZ¨û Ç95wãz“:m’QîG»rÃmùñj#ÆtÂ\¿¢Ä]³lÏï—7QÝÜUh”Ùd 7ÔèRÚ ~²±MÊjÇi…Ǭríºo¢»­œg“\v°·ò[¥ËÄÅ–ºo2VáMª“_õgšOóu4àlcã7LJ¼£& G¾Ãã^ë&ÈØÅÖ~ cÝÚÕ§ Ðvõáž*¨ÿbÂSâ ÂÏPHOlåÐ&ÔÿTAýDtpê}ª z¢' qFŒÓÏ?‡ÙŽ‘wL$B5þÃݱ=LÿUмIVÎç-0MÆ#:¡»]8iÛ †hÙÏkìM²ÒR;ËÚdÔ ­lÐÜëÝ~Ö½¦ýð&ÞøÅ5ɰm‚ƒ-A¹Ûññp§ÃÐNy×f´É°]Æû´7»íûçMmF£OtÞh#N cO½I§Í @âøÓˆdìWÙ$h3ê±áÈò¥Õ‰»Óa;ÈØ+o2ÚŒa€}÷&ž¢³eÓ½÷&œ&§“7œ#xò„Ö~PÀ^`¬(l/Ð~SpB/ÊPXx®‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚bDÎÁ~«p;hbnÖ÷vÜT{sjô÷T ­ÐZ€þ¢¶• //9S´<°£°ÑàE_Öz»â¡-@Ævy§?éfþ³à¼;㊣Á‚_ ¸9óÐâ]hð&*^óAÎXs?,¸Ÿ€‘(@ƶ9ÖÈåžÜgƒd´LPô¡…ÈØ6Â"È(Bùn·)º9‹&£#Æ…Ž /8èÈβG3ÿ=x J<å^’ñ`}‰Ó Èps3œ;EoáA,fA̘H9 ¶—d<Ð~Ùx2ÂQh8óõ ± •<¹WÑGiþö’Œ˜b<á(4Hï*{ØmBF£ó1dhËÇAÆ ¦X‚Œ A2XWÙÃnÔñ82Š==wÑfë¡Bdðî ‹PZÜVf”qd0±edŒAø–IÁú*°ÕÂvÁ•©4cÈ C$#0 !m‹7 Õ…†2É‹0‹®´: ‹ £8L2Ú(ÐöØ .2d­DÙg4ªeEž¢z&ƒÈØ>2ZQh “”(zï´7ªHìfÃdT÷w˜ŒÊ©˜QÕiK¼I; mg7ÈtÆ z¿àª7 cÿo¿ÇĤ1¡Z¥mFv&U¤c4ø gbj³dDÚ CÄ*ÇØ^~ÚÊ$n ]FÃ>xZ›Á›É Úfð•ÚŒå½I# me’¹ö{bP[•iá) @Ãh2ì+m‘Íð£ÐV&Õ º ®˜E%£dgTï&]+!à 5š™TX:F½ A'Ôn×}“0"k3ßyWZªnGíx—É U†œk±í ¯Ð7Oì6E;™Ä;j6c«È·¯hú™®;®Î6¡›·ÑwáË}¼¿ãÞ¤Ýп D]1¨³k±“ÐrGnŸƒŒí²Nž‹¬½1h¨\&‘a¿` cÛȨ³=Êç]k±æ÷Idû÷ðìÎ{›]}EùÜ‚‡"£ó9(ñ6Ãdj¸ÈÚWpm×°rìÈÈ™˜†²w;ÈÐùî}î°+͇蛉cÈ?f«¼ºÉ¨¾îÏÞrãÞ„gùÏ–òÞgÛ‹.Ðz²  ™žb?oºö‘½åÆm†°Ûyx±_ªàdدÏÏÞÇ¢ÿYxÆõ•SPß“³ûH†ÎuåRr&‡þÓ ”»Ù0¼È»ž°•O…ßéE J´°>Àäp3:á‰ýg2ã% e™KÏ" ¨þÌù Û¬7ék1Óna/ö"ÐÞ&”V][ì:¥·Ï=ìñ©?ÎP(0I@^J»!\LÎÓœ,gä«vÌžGߨ7ÉUþ+䛘”©P¨(Èè¡Ô 2‚¡ dྠ2  d@ z2ÔÀXÍ©úëš–üÛ2x±®g¬X^ònùñMV“K§¸#¨1¶.2vÆ›p;ê6Åo³Þi_ÝânÅu6Äs3°æÒ)‚Œ­èC¸Î½9£õ¦2¶Ëf”ñ8­7E±udp3 c5ò!gzœ;U\ŸŠÒŒöÎÖ˜¢N@­lr´Ô¦óFàó–Uô¼›†ÐŒýÉê1ü䪕y3sUñÈ;F}˜Œž7!}¾X]j“#Á ÜXU\( ynŠˆkzé«O\~eFv>èM«tœòL½¬õ“ËAhƒi¥{$¥<ŒÊhÕsUñÈ?F‘× –ÍÐ1 ׃ú’>‘æLV'W—6âÈŸ¢^Vh£Ã[ªœn ,î,«¿ñ7cúÊ÷„ꃵsæœcdj¾XjÙ.2H¿Òšž^K†W÷PÎꨰ2óDnžÑzS¬.`=°ºb½½<€cî$JƒSãHÔÑ(obçüÃRoÞñ®‰Œî¢èMŠúdÊÓ“s·Ê*™Œ%SÔרS+â}¨ãw+o™…2†_§Œˆ $ ßlmˆŒžü§‡@ÉýLÍsÐíÚÎeSôr¢š! } £c/æþXþÚ¹6&Ú`k$£n lŸr%שè†åT?¹éiVSj•g °ÀdŒMqmdðfTR:åî͵ÉP^Qœc¾V2ê‡ êçŸë§×ߦ<{ÀVB†ŒõÉ)l}Õo2>E»:ªâ†óÁf< á­à§a÷îIEDîÍÈPå’u•Zë\W…|3yÏ(5Éàzå Ø n iaƒx'°ÑdŒLQG ¬¬ËšÞS8£ð"Pg3wïî¼-8%‘6œ–¿MAFý)†ŒMÕt9?æáUÉ,#St‹Œu)²ýù.ÌYæx»¯®x•Ãî‘Ø§n%g¬“ TxÏ=7zÖ¨˜Ø˜71Õ@[¤EAäÕ,·Uâ$q¶¾Mõ%yeMçC•­~V¹ËŠÚ‹x›9{wç‰Lm–+ôvÎ1Ö¥¶N2¼°Â{zM‡œˆµG nc ó“ëV+2cE½–~W§*__ŠuDËs·vÜù ÎGÞtùÎ27$n¥ÁŠÆ‘"ȹ;ç71©ÞŠ Ö~kVÈ›­ý.œ±iËœæ%É ù¼+kÃú.‚Ín¥LÓx€ á×-Ñvã¯۰· ¡e+•jº!wTð6c[-F»Ä Û¾wæj¡Š9Åšê3@ÆA ÞJ#£§å­â~ƒàMÑ›D´Ü!x“&#ÜrÇ´Õß&6c÷ÉhµÜ1Løw`AÆÁ”M:[îxwàÇ’o²d4[ ØŒ®Ïèi¹2@F åŽß€kd o²Ãd vdt6É!2pß‚7@oÁf@ z`2zz‘^Óo²d<À^a3àMàM@Ê& 6d€ oÁf@ Zx*)Ðfƒø˜þdáMöŒvž#6cwɰϴ‚  £òÆ‹Ôm…mG~öA6g™ÓE(¼Éž‘Aíþ`mœá÷ë<èh™¢~«›±odúvO2ÖE?à2ö’ rÇ"è#ói3àMv• j=ÁØM†û×Ù6c?ÉhF ž¥O2ºÞ¤¿|2v¸>÷M@Æ4ôˆllÈð& 6dl,gøÛÜßÃy“„ƒÔdà:†Í*´Q•}åÎÁ’éØnºä(³ Çm‘Í `# ßsën—A(›ì%|ˆ >– ”MvŒÆˆïn‡Ò5~‹j2ö’ ¿¿Gÿ£°5pÕïgÞd?Épn·Rcè÷®;ò^»/ØŒ=¶¼9<È8ô²I0ë‡[ñ¸#ÆÃ›ìYM—ÓÚÏ„˜Îx'~}†uº#ÆsD ¨Å5‘ÒDÞ66d€ 6] 6¼ ´žš®ÎªÑå‡K‚ÍØY2:škQw«q8dðõ‘o²ódèû!έ“Öx4b€xØŒ]3lˬFÏ;ÄÃý(€ŒC(›Ôít½hÔ·cÝÑãáMˆŒF+j´ jÕ›±¯eêêy‡w|2¥>£Ñ"§íMÆE ð&;íMâi >ãÉèh£3®>d†Í@MÈÀ½V2@¼  cóAä7dÀ‚R«¨,£ª ûh_ë2¹–$…ò':LÉeE@%I<¦ïé“ m ºëKOÞ¯H‘RøH^H‹{Rý¨LÚË í"+åJe Êô´z+Ö„’Jô)ôNÜ@åÚA5I(Ñëì b¡JÎkî%Äzµ"ðI¨¢}¡$J·ãÅãZEP„´‚>¨²2Š×h ûª¢iŠÒ x$Šò¨Ã±PU‘X£ÁHûl=¥}^ÓAäñÄI?Y. ²v÷$2H¹Hˆ„ž™~ó ÚÌ ÝzL‘Š4kÞï§;ÎHh4,3憛øÄGËš”p¬ƒf1(k2–OGßËfåýBâÈ€kÑ“CŸ,N1ZQ²~\QkÇ€Y È2ü6'_¯£EÈšJÚ¬’™ÎY„¬éÂm±úƒí\YSSî±úƒÕ¼ªâgV²ÇÍÆŠŽe`ÆJ¶pœ,mŠgô[ŠÁX“ÕhŸ·Ã-Ä•ìIà¢by=5Yl+6àR´ÃUü çSŸ«ÅÌÂ8ÜR´C.Dï¥h°–ÀRXCçÆçܸ³?ÄÊáPÑê³Îþe V‡bá¾Î8ûáYÖÅÊá¶Î8û~V¨›M«¬Ý`œ}ÿLÇ!VùqÖ`œ};6]-g¬•ÜfšÀ’l†Ì¬³xYgÌ,† 4—Äê3³pè`céËdåayÄxî.ßž…`±FëêêÊN~Y[ˆ•[€Õdcué‘Ì­ _7ƒ²fÅØu“ÉäÖº 6–ý¥ig³fÅØeÓãºÉÌêvayÆx ßtYY/rÝëf6 kVŒ}k+›ÅXY8—»É¬%ƒ³>/Dur 10/Trans<>>>>>endobj 239 0 obj<>stream xÚìÝÏjÜFpÓÜLÀ¯°OµÛIÀt!iÓúVÚ,s(f%í©”„šžÌôy¼½;`õ zt2ºoÀ›Ë ²;£©¤ý#i5’FFRáS‚•L´Òo¿ùæ“V«!ïöŸ<;ø?NügÏïú¿N_œžŸÞ¿üº6 žž¿ù}ÿå›ýoß쿜œ=yþãñÑÑ“`7þ+Oý?] _ýôóðbøãw/OÏý嵿Dë×áòõåðbðçû«·C48;|6ü~püìtøò‡WƒãÁÅ7û²Ÿ ¸À.p \à¸À.p«U—»Z9$\‘Þ¸ìÕê21ñú¿º°À÷„9„ »O.æº.rLÈéU¼\i;qÈøº_ý芿B=s¹nO]~?:ˆ~õ#¥ì !v©_T†ó#¸À.p \ëEŒ× é•k[úãò1h{qQWÖ˜‹íHü¿â¸ñ©²†\TõkG.:Ξ¨S—Ȫ ¬rŽ5âÊ.W¬j%kÂEqénÃÅr“¨bŠ5àäîÆEIQÁíÄUü –â.\c*Ò‹ázãÕ”K'UÆÍ‡«RÀ¸ùpU o!\UÆ[W•€ñ6ÂU!`¼pU7®ä•DÙ€ÕqåžEòs‡@­¹òŶ߰­ßDk®ün´CZ•1Rו‰ì3DbÔ’+¿ƒËŸä%PÑuZS®ü~a‹Ê]¨5ãʯHlcU3¿²+ÿÓÆ AÓ!4î*H{´ÄP0î*:± E„h ®‚n\Å&Y(vÿjÄUЫÁ·;±yWA7®CƒIgÔUt^gR£®¢³S¨D‚q#é•á*‘`ÜHzmJ•UŒI¯ €©ÓΘ«ðb*Ã¥î®æ*¬Ü(#>Ȭk½{gµºN[qƤF]›îX­ÄU¸"DÃ¥`•\›½'âEE¡ÂUŒ×I¯„K긴Œ×H/yO¹’öµD.ÖtQƒ®mgØŽsÉõµÁáˆâDhËŠ Æk¤—té³äµ»¾Vê¸t¬’Kn]Ì ]ÁØ®–Ktّˉ\Žž ™s¡˜ r})„›¬vö5æŠR!J/±}E´øí›—fâói¯ÑÓLVL|^#í+¹¤1—]bÅ•32åÒØ1ÎqQC.Ésé%>7‘ö¹.½Ä/ïÒ震0äÒHûX”°¬–ø¼¹´Û¬ò]Ôˆ+3=DôäW¾K+ñyci¿z !ü–#ß%̸²Ú×ýÜ.pa.šÕ‹Û¸‘¸ Éj’74£»æ~àb.»Ú £¼ „+˶ .¼aÁp‹pe$mâP¨ÀÅL¸HqïÒ"iÞ¥ÞgR»¾a‘é&\:Åc\àÂÍ»¨Î mDÓüÖÃÀËÖ ±Îf‰éšŽ«[ÀʺNçÚ‘“%§Eºº¬¬ ëѶ³\Žn+éR§ìn£Íb.ÅtMÖ¼K9ÄwíèÞKL×\¿-Æ(_"í"Q¼Ó5]ÝÆ(_,o8æŠO×tu o |Ùé;æŠO×tu¯ÀxåKárã®ØtM§MNoµíZ–˜®¹ùµá ×6³YÅÏ %]HkŒÚQ [ra­1s©KmÃEU.;×ÅÚp)ï…·ëRD¤r¹ù.Ò°‹hÅGD{? »D_]Dåù.ܬ‹Im×êk:VÏ;iÁÅ”®ñÖ…»r©Žºñ0µKÎÜ4äb¹.1nØ¥yw&r‰L—ìÄ%"—*0m¸°ÌÉû¾º¤ÚE;sÑêÜ¥× »°¶k3S”våRq4µUí»ÔÏßvã ›r]²p²¦1í·Kô͵¾üɺßßWWìU|dÂÅ2\¯Úß™pe…°„k¯¦KU«Š\Å{ò] ¸¬TÓR¼'™p¥a ×^ÑÏáVÿì½¾Ó Hz‹¯þÞ¼c¿á |ɲÓÚ"ѸR)V;^Þ4Õ4³J%mq¼ ]¤Û ×´´«^~}Q¹&©¦›Ò®Q=— g פ¤ëQÍ:1S¹nRWÚU·Þ§ ~p®›r®Úç¡¥kwô-JºêŸ·Ó† 8 —ÕªËS»R£o!eÛ®tðÒ±1áåÂ,Ù•KöÒÅÁUÊõù`tøY>ê_¼øùÁÁ9ïa?ŽF£ó½žº$¸t]ÿ®æ×ùãÇú7ûZïÁ.p \à¸À.p \à¸À.p \à¸ÚuÉ>¸ -ðÿº \à×n žôÁ•F,½¶]Šz»msåff]³Th|ƒ•r-[uyŠ@‚k¶¸µ&ËéMHëʵ¸û0yŸ‚çÇ7.ëÎó¼Ùr®J9#.o:™,¬ÛÅ4æšÏ-˺½[Ƭ7¾ëf¹l/¿ücÍçÓ»øgSËò!ËX2Yò£'Ût-&ó¹ïH¸æòAZ^àšwæZÊ¥5—Y®íp´¬~Ãò¡µñ¨tÍ‚D_ZQ˜ùØÉlöI5ÁP~ù®¹u7Gk†[é5ð¤våñèuáƒåkàz\à¸À.p \à¸ÀÕ×ÿÿârõä äÿÿìÜAOãF`W¹!¤ü…9Ri—˜-­h-A—–[Õ‚r¨Pd‚!醄u’e9¬ü‰ÜAŠ‘¸"qBœV¹ GBQ$;Ìtœ°%qÆÞÄÃdôF(`¿÷Í›Ûs€•)yV–Ñ㋾‡bk2ZšG»HF‹qyvmìÌ õ]´Žtí]I+‘еmt îiHÍí RACÅ´† ê>ýàà ›I©ÅL>÷ýÆ¿S2z='w#ó(•ÖRoÑþÚW3Ùíüt˜Îd{çvƒe (›Ww´WÝ# ƒöÕ#¤êz潆¶µÝ¼þxâ¬{`lm ¹Gºî×ñ÷”Õ|®¨«ú‘›»˜Î^¡=¿§«ût˜)¦ó%·+ôçƒ4gQ&WÔô]5¥Ñ•Ôlöæõ·¨ü§‡à3…£\*­çsùR!{4˜x¦[Ž”šCiú í™ö^Ë (Ÿ£±2»Ÿ»wmÔîv‡óá@KµŸÝ_¿Ù˜z‡ç–fh/d4·§CA‡ÍÏɳq”ÚŸZY­þýOl=ö×ï+h~Y¦m¶Ç÷µnûu+¶ŽŠzI‹%Ð?.Äþ@sK‹±•?WQ­ÿ6EžIk (@ P€ (@ P€ ß´Ý{«F÷ý>D>Oˆ+1ÐëÞÛV/ÉY|CPÑ(ë:J?µM_¨áMa-&…4ü¡ÌËÓ`”µº;î _hr(ëòD Pö…lhÐå‰0¡ô¥Qõ&†0îÝ”}úzż {ãŒðôÔqÏ(ûA‡D}nÔØzÍüÔgÔǼreÄÏý~ýú:Zœ¡xd¨o³Çƒ’°Ð2?´2¨Ím„*ýP3LøN?´<Š›3q#ns×á‡Þô¡E"‘¦"G9 ééèY§oë#zIÛÅ2WEÚdá¥Nå†v–…Cïæ•æ%ôₜOzÉUÄC›Mr]¾äžŸ“åå;Ñ‹©Ó!ggÓ ¡u ½»#I¦×8E}}6w&€ (@ P€ (@ P€ (@ P€ }áÐ¯Þ P€ôe@1Fg"ЯwƒjŽW ΊZ©è·µkÇÕÒ •†Y!Ç¡’4ì“Ú ©àjWñ©(¨e™µªiÖ°ƒ17GéÉv cDZÇ6GÕ[bZåqpÙ 7ôeó“ZÙ!–]±„ ½Eg•i™˜BIH¨I, ¥q¬î—0è-?ôtPË4{s”N3¿¿¿úâÅÝ9zKçhCøª· ÷ª¿¹ê{cÇÛ¸ï½/ Š«ÜPÛœHEáy }ZèlD*6¸‹‡bþŠ:4‚ù< D$W+Û<±«á¡îƒM߸R.Jw–u[­qTÔ}T4OjGˆ tû`5ª&”žn–émè=èh%Ži.hw—€]¨õ\ ¦H¨C¡tÏlñÌÑ[w?â˜XìªÇî²=6Ã?TÚ¦ãîGNüÿm<” (@ P€ (@ P€ôëAÿÿÿârõä äÿÿ|UÍoEwT¡ˆð‘P$:ÇDJí|IEU‹„4õ©õ@ŒwÇÞivwœ™Ù8(QO§\) ²àÊ¡þ€åP¡z¥'‚RÕªhÀÁ­²–ÞìG“MlÅöÛ7ïÍïý~ï½ÌÆÐÄô{Ù T4‡‹AeÊ…Dd™¸Õ¨m£A‚ðebF®Q„]IK?5ü^I%ÎÛõ,Z¾Fl{ Zq±,8l.æY1HURæ"‹À““¢îHñ:À87‚¸J¸Þ1‹ÎadS‡J¸ßÁRž]Ñçs—ÆÐtvËB'Æt(úyƒk… KJ‹y]g%`%göÂ2°ë2cC.©%÷GI æ8à¨fQðS‰¨@Bj.ªœDêV!`4hò‡'ÓY Œ•Ëaé:Ì©sð,¾Ûd .-És!wȨD§³„ Xx¨"ès`kÔ ÐlDÇ4Ò1ïè` L†4~—ADJ†8’S#tÆB›œÂ7H+ê®aqæ2OKfXÀ»!=HqŽ«5€^ªa”1P¡ŸƒPDË1Qœ`Û®§µ0/¦®Pú¿fþ“ÂÿJê¢È7‘ø†£<7K_cžmjÞ—©Ibº"Nð›H+K´\1¯ÐÄì¹,ðPgÄ6ÔgÖÓIBUŽ+´èQ:Eç‡v¢â)]'¨ãÙ»ª³ëá$D)Âv …ƒ˜£eLm\Šº2EÈù“aæ¤êØ+‡Éc éôŒ›Ðë§4ÚܱJuM4öQG@†#=‘+\1¼.©C¢îr Ó¡~íHV‡žø á0–žŸTwA33·˜¤J€,V©“ Õ½ ?Ñ«Jb±(¢Q0—Œ˜Cë:UÏõ‡QD=½¤w)Èi¦n^®ª6‘ng\/«*¤°b–wM¾››¹:‹ÆQáÃd2gUüò•Ÿé<²þTÿY»ªypÌÚbGÖþÖù¡çÖÎüÔÅ>ý«Õ§¶ü{7—6~ÖÖN&ó²ßØý>¿¼Ù¯+ÿW¿qç¶Ú=¼±™yM©'þÆÚm8‘Ï”zèo÷†:Mý3´vº÷z;ýž|¦O¶‚¦ú"óRÏ}½§ÍÃî>îtöµ¯çܾ|½Ûùîqhõ5:Ý·ü3ö_ÚºÑi´¿­ýÞ÷ê+Úêï5š?°;ûß¼¡Ô¶6hì]hæ[ͼz௩ËOVÖZb3Ó÷ÀW ©Õ¿Õ£AÕÊ ùêðfì©»÷¡¨3¾ ®ô‚®Zÿ¬»p2mu«±¤Öƒ•5žX¿©•ƒ'Öžª½ØòU;0¾îýjáùöÓÊÃέ|tr½Óê÷÷Ь®:Tƒ½ödduTO >‘õ• ‚Ï;ÛíÈz{-X½ÒÞø7²þÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I& 1330ÏPOÁ3¯¤¨8¹$3?$çÂÈS¯endstream endobj 240 0 obj 4861 endobj 241 0 obj<>/Dur 10/Trans<>>>>>endobj 242 0 obj<>stream xÚ”XÍoÇ—FÝzia ™ Ƚ"ER¢Ô ‚­ØŽÔl>TE:Ü’Sí½³«¶°‘SГ¯MáBh¯=äÐ? .|Š¤Íµ9Õ…ƒAãV®˜‚dnofw)®hF•lгûö½7ï÷>~³·Ï”­Ù:ÃG 3 ¶Y¿õ¹:kÔ¦Y(XëLE_ª°ê ý³½3—VðXó<6u¥ÌV•­´ <‹gWœIÆØæHÕuù–ôÛ¬¶PŠþ¶Cú²Ñ‘®`QGä·T$]7êGçW~~¦Ì.TʹBnÛ¢‘>;ð<î;£„Ba ¹NB8k…Ç 3K#U«¸+Âu©dà³ Å”X!wÙÒò"lù¾°#ÜQluRXm‹-ÝX\=?J‹lûÜÍ Á‡2ðJÀIOúÎh˲èâÔ•9V©Y5× Õš5C"kö½®+<áGܸ¹ÚòíNøAœ†™{Êèi0Ò®µL×HÇ ¢!ÇÿlŸ|K±(`ÍXºÎh]ûqìF2‡kKEƒiŸ5¹䂱6Z›láÚêäêùa'&µ]XÝbÝ »<Ì" gu2êHÔQrÄ*†w ЈP­ž·Ru€ˆ«µáñÕáëB³Tnו‹»,žÏŽpE Æc½’áˆ6ö8jY³©qÂ)ŽFZïvœtŠ£ñƒö?N8ÅѨÖ8¤‰ò²Úô¬Aï–Œ: yžŽQ3þTI÷V¸±.+ª…(J2²…‰)k@Ø'õµJŸÓÆpË$P3ŸíÕÆœqáZ‰yV˜ï`tŒ8̃Y¤nY0ªL/Žb]›bÓvcG0¡¹€f*4÷3‚c±›y Û6÷ià*­†ò¼)}Íà=Úl[D: ïÈÜS'ÈIf“†óS[ir{ !ÑÄZS±É)›5Í»GL“Ô%P´ê6ˆ»|è’]åôUf¼X[Ñ<‰»í jÞÑ€Wkõ‘Ç éË/`€,ŠCbÜq”bL}V@ô|ݵß?Ëà« cZ}Îò6(¯–Ó†9‚±_d¦Ô)PML1ü¼Ô<}]:@¿¹•fG9ËŽÞ\ºzŒjzŠŠ°ÅmAR8˜n,p  ="èìJ¨ç¸ppþÐÙQèpE¤' ¢©ÄªÀZÒ" *lù#šj¥:Ì. u B¶Q^d+öM² =Š©«ùbÚ–:¸Â0“Œ«D|MБ/ ƒá飺\ìKSïŒ3#6!sŽ|ÆÐ‰±«4Àiy܃œ$în¶Ï.:ޤM™S„ƒ®Y2ªCdÙpÕmJèäChu:O¦iÚ<“-ªúŽ>3¸°Öá]¢äiÎ)}8BlíP6M¶¬#4A¨Ïäè  HÕyâtl ºØуˆ2¥›‚Ë“ÞÄvéúüüMøbнÀ‰u²FÙ’º ‰; MPž âM‰î¹…Ó(¢µÒ.Âá|¹%\·Ä2j«û¥aéäè“­{M+œC´ºPÚé<<* |ŠgÊMÀ….L)tÜ¢;iÔô ÐÁ9Ï”œ:VÙ×u$¢­®Py«0°Ó4°‰õQ/âù6 «²™2:?iâ è•jaÐQt›:…ÅnéW:2z·òØ)=ù‹c™*CQ¥˜ÝŸÍ©cY2u?§ ÆYË›ÚÌÄ(†7M)'Ì1{P‚:­úmq¼umn>Z¨9ÐǨ)ÑÂ×h¾èž¨À7Õ‰9»f±eÌ*¹†Î²:¹¸|ñÚ…¥×ØË7–VŽoöHì¨Îµí¢4ä³Â¼Õ¬œnq ´=ÔgóÃ…nüyÅ—¨Y «§û¡÷(ôZÈhÐI¦çAÏ*¶ÄfÀ#·ìáR9íØÔ†º "†éG¤íìÑÆèíHidÌŠ±°G>YÔ>ŽÎûFYÛˆÔ ó«›# •ÚŒUg³³å±“>êé«4oÒ)nºYjî67-ë§sú”BšñI/P—¦oþdjiêÆÕK¬òÊå+üšŸW:µÄ¢0S·°¯¹©×Yµ>uiy‘UØÒkg’þÄÄËIúÓKz§ÏVÿLžýg°zœì<;²z VOþqá\¾ztuöÕSôm÷Tò°÷ÁÛ·ïÿ™V&&¾ÞÛ~üû…ÇýïžN>Kzím¿÷nòøù[&¾•$Ÿ÷îß}BxòË$ù¤÷áá¹ýúªW>8|t:NÎ~I’»ýäg_;´õ½Ã/vž<åûûOéÞ¡÷Qÿ—ß>ØÿÝgzuj{ÿà{½—ÜÑê­ýí½ßnüýÔ7¿A«Ó‡Û;Þ{ú›ï$ɇ½—ûÛO^ÙYØÝ°|Ü»›¼þùgwwÕƒ‰S÷’„%wþ|z6Ù8×Kž¿Ýï?IÞÿ›z©—ô¯ö’{ÿÀê}HNõû{É;Û&Jɽþ泤’­þ–l>ëólõ$éڇ骗ìõí_þEcÑë/ì}Ñþdÿ#yo÷tïéŸÌê yžœ=Ü«šÕ~r˜œ}þ©2«_%ýþ›ûî™Õ÷ïöï\ß»ÿ_³úÿÿârõä äÿÿs á2P0PIÑ0Ô3ÒSðÌ-ÈIÍMÍ+I,ÉÌÏ+VÈOSH,®ÌKÎ(ÊÏË/-V((ÊO/JÌ-Ö Éâ25´€è4ñ\C¸¹A àUendstream endobj 243 0 obj 2614 endobj 244 0 obj<>/Dur 10/Trans<>>>>>endobj 245 0 obj<>stream xÚLÑÏOÓ`ð6„4Ö=xÑ,‘÷/ +clKM†;a”ă1Jä"Á ‰$š-œˆ§]ÅŒ4põÀÁ?€™ˆaÊUNΌЙ¶Ò÷Mß¾ïÛ‚ó}Û§ï§Ï·iÚ·¤&3iÄË0/#YTžGI>Ó¹4Ê¡òz®Ñ-¥FÄQ\Pó3êÄŒZBCÙÁdÔˉ+?3QE¢ ?|¬ô“ydŒNÜ3øŒÇؽ€^•—çôGÈHæô)”Jëùûãü…»*0I€‹KŠÖÓOðÿôÔÛÿOÍÅžÜæG3ñOíÉ̘,VŽ M¼·VªjKÒlu6Í»¥À1à¯ØÚÙ†N¸Ú®œàzu›‡ø“g‡¸EÄËHí`¶•eÐÎDÒa6<“úi1êÑS; ÜYB\Ñ£ ûìÍ€lG’-ÜÆ}/~ ­Ëûðú»|íªB-{kqÇ} …˜ÕµM‡4L8ÀU˜:©øUg©!ÉAå7iàH ác]ØÝçÕ‡MS@í×.OêŒy°nÅ jlÅãRß`Åg³—êÂË"½ßÑ/Ñ^`fz§ó‡dÝŒ“5â(Øý+€4ê¥b  …GK±ÞcOIË‹u§Ê*Ó^ýo¬sÿÿârõä äÿÿEMË‚0»ï+zÔs‚^M0ñ¦É~`qFö ˜ø÷2ÑxiÓ¦3'Œ2†?„»Ë'ðyYÑêšËMóTn‚ zaŒÁwAX«]ípSÁ`ŽIM½Âµ^ÎFmù@²u(û.UÉ+ FK|tN÷W;e—ž˜´w¾…ˆ/÷èƒw~Ž¿Ç˜º 'wòÓaÜÉendstream endobj 246 0 obj 648 endobj 247 0 obj<>/Dur 10/Trans<>>>>>endobj 248 0 obj<>stream xÚìÝÛsÛÆÆáU#±1ë8m\€Œ \¦3Î>u:©«õ]§õL.:½P$ÚV+‹Ž$;Mÿúâ@€ u¢ˆ]àûˆß«„¢h ^,HŠú±¿µñôqœœì%'OžÅgoã­äãñóÇñ³½øl¿éogmÇ»OÒÿß÷_¼N¾m+¹°ž ÷úßýÍýgñöVþ­ßìì¥ßøê4f×::;N>ÇÎF‡Ãóóô›†'ç¿NNâäëäÇ'ÉBOßžÇï>|H®{œ|ï/N~Žó¥Œ—þõètæö¾.¼¿ÅïNÞÓ¥%·¬èÏÉ¢Î/Ò›:8^R²žÛ;ézæ+y2}˜]ð7ñAüÃÁy2„O/ŽG§ñOïŽßÅÃ÷? ’åŽN/ÎF'çɲâóáYr?Žÿ7L¿ü9»;qr?‡ñ÷ïŽO†Ù¨¥7ŸÇgOO“OÖð§Qz£åº\œÿ'„OÉõGñÃøÃðìÍèìýð(>x{ŒJzKÙ¹?äƒ;u噡:ŽÞž&kt4{Dz¥œŸ.’Ew¯º°©Õ:L0¹^ò37ñ.YÒÉ¥ ’ÜÕ÷é…/_÷Œïìlìdw÷žll§ÞâÝíÝä²Tâ«ÍoÿñÏÍW›ÿË‹xçÙ·Êìï?M>¶¶ÒÓìünv~/;¿¿ÿ<ùØÚJOwóÓì’Çû/’­­ôt/?Í.y’>ÝúnÿåÖ^rºŸ\çåVz>9}º—\š^’þ_Üòþ~~É~²Ì4O²óÏóÓý<ú׿«øâìãpóûøÉÓç›÷om¾øÛ·ñ³øÕwýˆB!„B!„B!„B!„B!„B!„B!„B©ÆÜøO†"”š›þÉÀ”Ц„À”,ÓñžÝdŸ+_–Lgþ…V&§&*þ7•/¯øBÚÛé›KbMe§oL‰—–™Nöò³LoÄÒS3å¦D*ÓéÉh6LHKGPÅqS~¦ø2ŸgMÄ!q?Ad …)Q ¦DP˜’¦³rsüëÂÈBo–Êð1D©T"Šè"óS´’¦ˆÖ:‚*qM´ÎtÕT€!&V.¸Y‘—­2ÐÄ Ñz‹º‚ã¬UÆ›ÔCjcqWZD*d´„zå-!•1:†zÝí•È0zÛ­"•ÈFZÞ2R‰`£“Û§SÉœH[^  ÑH©T2R)kT")û~r“Rq+T")P‰ ¤— ²­@*yŠRÑHJäWie5 ÒHT¶H5@eã1)*©%¨lÂÎ(Uºâ8E©žBe3‚TC¡²%QÊŽŸ §d¹‘ŽïNQÊ• §¤ H«;~6,JqJPŠS²äHó»S”â” ÔÊ]c·¿TJ—öÞá¥8%(µçt… Rœ”Úpº‚S”j¨Sœ¢TCâ¥ê§(ÕP§8E©†:Å©J¥ÝÙlc¦8E©†:Å)J5Ô)NQ*›i„S”*`ŠS”*˜œâ¥*˜âTÓ¨£L#˜¢TSœ¢Tü1NQª„)Naª`¯S”j`ŠS”j`ŠS”j`ŠS˜Â” Ô Sœ¢T,SF¥Ê˜âT.Ó¦ eªfjʈ T SƤ›J{+wºâøê½^[LqÚÁ‰éÜ7ÑË®Ø+®ÞSæë”iv+wºb³B®eŠÓŽMLõ1ÅiÇvùÒ™^÷Îæ0íšRéLÛ"‰éÊJor Ô+ëË‹Ó˧™Nû§®Ô³­¦(­–dl%ÃÖ›ÑÝ­Œ¥WŸ>ì/®Ô³=k¼á™à´›LWfvëS§½K;ýËWêUÉ:.S˜vMi•Z¯w Óh¦ö§®7þe(œ QÚ<ÓrzUÉ6ÎÔ¿•)N;S¦³GF½hA¦Öwú·ü™=˜v©L/OBdå‡^ •)uÚ­2ãª7S»HÝþ7KaÚ¡2µv¤Y]c>¦8íH™N×fïªC¨ÉC©+7Båé5¤”:íÔÌtŒ¯xÀ¾8Œª^œïΡïWJ’SW²èt¾?SNvf—ïbý›bŠS˜.®s¥)¥0EébSܦŸp Ó…Ò³¶Òó+…)JÚÜáNaÚf|˜¢TRŸñ‚é2)…)J(Å)LeOK±v™¢”!£L—h‡OR¦*ª”:…©¥0eŸ/|‡Ï^Ÿ2Õ”:…© ¥0E©|¤8…©äC'˜r¥§JqJ™ª@ S˜jP S”º4ê3x0•nÔgðT2íRŸÑ£L»d”:…©¤0eŸ¯){}ÊÔªP7F©SÊÔ¦QŸ„©p¢.‘¦VˆºEÊ^Ÿ©i}¤ ¡ì˜Î•©ßp‹²×· ´[L[# SÚtA¡~ÃkÀ^ß5Sí#ì·¦õ™ûþü³¹4Ð>Àíúd¯o‡©™úlŒ™mYõÜ:Q˜ÖfzÕ§ËÀ´ý•`¯ï–)ã S˜Â”Ü}n]š›2¼LNÛU:>¶¿ùHÎáõÛL»·>ÿ_3ÜՆ]`týßÖ‰¿^' Ó°N|ÿáW5>`ª‰éoj|$L­/üÊ4¨ñáû¿~Xã¦mMhSÚt)gþ5Û´F—®?RѦ8•ð8 m SL™›Â”6¥MIý¥™›âT~™Ò¦0ÕÁ”¹)LiSÚ”´Þ¦ÌM mJ›Â”¹)L[ô9Ú”6Uà”¹)m*Ÿ)sÓúmŠS L™›Â´e¦éÓ¦ œò¸)mº$LiS˜¶Ë”ÇM-µ©ç«e¦´)L[uÚÀ³P™›Â´u¦´é­#êy8Uݦݘ›ÂÔ¡Óˆ6µÓ¦LÛgê|núåš1ý¾Yd’¬¯g§éåý_³š´bzAqš||¾jÌg¢Ú¦™FBÚ´oúëÖR ÉÙÉéúšùeô«U“´â=39 Wͽð‹ìbYmŠÓv™:ž›~iÖ’Ï2šòÍÎiúÉNÿ s/ëÓ°8½o>/O…´©S‡N…´éšy~Ê´rºf²¹iV¡yf§ã5FN›ÂÔ!Ó¨‘6½}njÌ£™ÍÏ›"ÓmZ^,®MqÚ*SÇmšèå65fr¤_iÓ¹j´Ñ6õ`êŽiÔL›Þ>7MMN÷hÁôAö¸é½Ù6½Ÿï‹iS˜:Šw'¦ÎÛôº¹éZÊô‹ÕÙ¹izA~±°6Åi›LÏMûÉ‘þì1¾É.7¿˜:Ò¿Ÿ~nÌê}IGúLÝ1õÄ´iB³¿þ |¬4?ŸÒ]ËŽ”VËÇJïå_­N.Ѧ0•ÁÔõsúéCûýñÜt=?¿Ö÷iÖ¥ÉÇgé9óÙ½ûyŸÎեͷ)Ní2½Ãˆ6õœþø€_ÝsúLe0mæõ¦ãçñÕ½Þ¦"œÒ¦ó+…i‹Ly½éƒìq)}¯7õpÚ¡6ÍŸÿTߦ0UÚ¦Kþ»PL»57Õùê}§š›ªþ](|Ò¦J~ TÌMiS˜Ò¦´)sS榄6¥MaÊܦ:œÒ¦0UÁ”¹)LiSÚ”´Þ¦œ›xѦâÛÔÀ”¹)m SÚÔÆÜ¦ÌMÕ´i±ïÏ?æ‹:¥M¶©™úlŒ¡eÖ©ßfÚ½u±±4WSũӽ>)LaJlLNÉLg‰27¥N…)Ûs¤Sm#‰Q˜Â”É)±À԰ˇ)É^Ÿ0Ž /ãHØYÁ¦„ad|FÂÞŠQ¤`J`Ê 2Âõ“¿ö^ȽÌ_‰SöW3Dóßes7ËßmbŸOVjTT™FQõ÷›` Ój—® º›ö)JUNNå•i1;uÑ¥0Õ:9-úTÒýt77eŸ¯õXßj™†¡ÅÙ)L©ÓR©ÕãüÀ ÓbnŠR˜NÍM­•©:ýÊQŸÂTå^?ïQ{Çùé;AY:Öw*PÔiQ£6ËÔÒì´œ£R¦]gjýø>_=‹ ´Ü§0UèÔúƒ¥ÅëÙtj³OQª©£.µ4;uѧ0m”©gG©í'ž&ïSjÕ©½>E©º:µÿ¼Så]Ÿ­.×ZŸR¦Ú˜ºx¿ú¶ÏvZêS˜*sêî9üÀÅB-õ)Ju1uøz¨ÐÍbm<#E™ê:ˆrùª½ÀÑr-<ÃRUuêôµ¥¡«×îSÊTS·¯€œ-¹nŸ¢TÓ^ßñëôCw‹®Ù§0UT§®›$p¸ìZ}Ê>_Oºÿ§ÐåÂëô)JÕ0mà÷G·‹_¸O)S5N›øõÑÐñòíS”jaÚÈïâ®o`±g¤(S-N›ùUüÐù-,ô ?J•0mè}M÷7±@ŸR¦Jœ6õ¶&3m:\ÿUƒ}ŠRL›{¨ ¦wîSÊT…Óß"êš¹©e%wìS”j`Úä{—0Íž‘¢L—Êi£ï¶wu›ì3¹CŸ¢´m§Âºôº6uádî>¥LÔi­.M[Ðäç¼Ayaq³ÓÆmš}Óø²k:¸êû&W¾{Ÿ>œsœÀ"¼Nëti¾üôð|PA69[½p0þ± ÄÞ Úóª¼'ßW½òB}úÐÎ(‘vë´æ¼´Xü„W4q7%°ÀßT=þtÕE‹Aš§OQ*¾Nk¿oéxñƒ ©ñÙ¤b‹=x^¤Å¿·2­~_M¦óô)L¥×iý‡KK^ãTA•MëU±ÝÞ¦Õï«Ëôö>E©ô:µð»øÓʦÏV¹MvúA³Lo}*L…;µñpé¼LÇLQãmÝò T” gjå}Mʹéøá¥ÉYofŽY<ÆÔìÜôÖ>…©l§vžzš4ß <ÒÏÎ*ö&GïÑ|Gú^4{À_ÏÒõ}ŠRÙL-½GTåq|Ï+k³8[µë/¾¾M“¯Ø6˜^ÿŠ)˜Jvºn«K' ÷ª“ÒâìäÙ¤ÒiX>"Pyx ïàÉWå÷U¯\³O¿B©²¥Zü›y^ÐÎí^Ù§L;máïNš6lk®èS” Þí·¡trûAkÃp©OQ*¸NÛø[ίz¤/¤OÙåËvÚÆ* ¼Éã¦-ö)J•Fµ•PÒ˜ Côô´ÅŒ‘_§!Bäo–€á ò7L(f40SÙmŠR˜ÊoSvù8•ߦ(Å©‚6E)Nå·)Ja*¿MÙåãT~›¢§ Ú¥8•ߦ(ÕÃ´Í vû§”èp ”Èw¢”Èw ”Èw¢”Èw ”Èw¢”ÈßhA×~.‰F§!J‰|§J‰|§!J‰|§J‰|§!J‰|§J‰|§¡x¥~h8Ë"ÃÛ¼Ó@ºÒ| ¡êŠèB#Ûø>1¯´L¤:1ºØ°6í4h©Wg@j©_cc.a›.¬”:W¦C šUZoDÁåÂi¤ÀiØ$R¯ÞˆBKÆT NJ#”ŠdÚ Ô°9¥­(¹n§ip(P:~ ¨–‘Úxæ¤!§aCH½ºƒZž[JíŒh#Pƒf”ÖÖbtfIéÔ¸ŠwªPZ_ŒYT*r7ߦžõ{€SqJ›€ºWj{Œq&M©{§2¥8•¨ÔÅ~³¡6u¶âð‹=§PƒHßJã´ÎÐ9;Ïá6Õ­1Ne*uºÙ}Hq*wØ\mùP!R¤ÿp»ÙúJ¤8•» r" t²Š^#£Ž<™%¥H™ J-ëB­Hq*z¬,cÔ"Åéªé‘²ë!T¬§r•Z6Ø\¯ €B±ƒdFhoU¼Nm”6 5P4ß H”ûƒìÙ X u¹GÇ‚’@¹Qœ*›úTÂö~BpÚ¡‘i£ÔN»¥Ô1ÓîÔé²8õE­c¥bº,ë¬c#ëô•W¼éX—âpk;~½5NQj“)uJä—)L‰ ¦8%u)é=ô…)e SS »Ò‘}¾ã˜R¦0%0…)éSœ¢¦¦0%]aêþ”,¿R˜˜ZZ¾1&?ÉÎ§ÑøÒÉE¦íÝ@޲øFMyiù™,§RLMa22—¾4ìùa*¦MóÏU“U¦û|˜*`J¡Â´í[¨LH/OUMd˜›.»RÌÇñæŠôaªæn˜â”´¼u1Døa ¦„B!„B!„B!„B!„B!„B!„BËÿÿÿârõä äÿÿ”’½oÓ@Æ!>2°€*Ñw©ØISú!¡Fú‘©"1 Æ9Cb»¶CZ@­:UL])*Š`eèÀТQ`…‰¢"¢ŠÊYqîål÷ öàûÝ=÷¾Ï=ç¾t$íÝ=b;¤3ÇÏXP° r® N¤oF¤ˆÇ }Ž÷ß&šÌuoÍš7r$Ï,°³,bªrN½#Ûª®~²²–É9—³àú8È›eå­£R »ÊŠÖwë2Ä&Ê_ý‰gÊjó›çõL!G¸{be…;ñä18÷O¦_¿É+X¾’Ù]¿(ÛJ–˜Ön+Û)tˆÞ /—è;½‚íbœ;å7÷‚¢k 1ì?ƒãÚ;<ù?,êæ- d–ïtSå*n¯(‹âv󲪬غÉu&ÏXÿ¿@1«*Y c†Wß *+ÑTmÄ»!…˜6ïðGRAªÜUÆïh˜Äàß Ø:¨šj«²M€×0uà ƚUäý¬úÓ‘QèNˆÝüàü·ê{ &Æ ÞÙ%v’ô¥¤³/K)éÂ`ÄO÷Äù<½W¤ØfH—¸ùi§¤¾óg!©sd‚Њ›E*„£;ôëßvhËõßhIß¡êÒÓdË6­ võ†¼Q%„KôÕôèÜsVa-­>N®²#a\Cúš–æqµ9µ(D\§s“ó\ÄwþDüD—ݧì }Zi¼rWÂŒþô”VÆkÂ^Wñ×Üåf£*;NÕ[sóoÙÝC çÑšO¡’Ó8J÷ä¾x4å”j‹ïBö{vKå'úBõÁaÄeÚÊJ§ËÉŠ³˜Ä÷t‡Ö'ê“kQ½§ˆ€_ñs+B Åæ4cøâ-?ÔŠlØe œùÀéWJŒÕp¶¤„3l¬Žñ-zƒcu&oÑŠ»IkL¹ï¾ôdíÇÈ'g6(gœJ˜VŸÔÀ&FÝZ" ]Œ6?[ÝCÆ®:˵€ŽM²‰áÚÜ÷€~ÿÿârõä äÿÿ•”Aoâ0…ïüЧž¨TÒHã®D«žªÝæ¸É¸MâÈvAì¯ß±ãRˆ(j/Dμgó2øw6Š‘ÌgÑY1Î*2„°yEÚ@h–ô¦£\ŠZþ£"ÂZäÔ¶¢Ò@“éTkäKM° YÊ-hK­5N'“¶B¶°ûŽ"<«†P+õ†Ò×Ùëèö^ ‰‘mc’LÈãS_X†Â8ìwe=[qê[Ùpeà;ÖÀcdÙŠzh‚h‹ŸchÛ -÷;4Fà94NÅñrë¥VïKá#Tç8´i5ÇB…‹MS®Ê–ÆUËG˶¼ÂÄe¼GI¢ºa¥ô¹£ÓªÔÂÇ/‹šCýÅÄɽÔû›ãc׃(]|'‡›Jjg†½ù¾Opì×/a=Ãdšº½ú¯ãŠI’ò,ÅîeØÃ½]ó˜EqŒÏŸ¿î‰Å«{O²â5‡÷|FÚ+¼x>–GZàO¾îÂ$?Þ† Z…Ò—T‘Òżø2W=’ŸÏ/¡Õ/¹fËpyñe®iÚsüÎõõ‹h|Æ÷Ѽø<Úª¿ü±S7ÔP|ÿl%íÂ…ƒµ44ªx¯É!¥É²—/àŸÑ€ÛTendstream endobj 249 0 obj 6157 endobj 250 0 obj<>/Dur 10/Trans<>>>>>endobj 251 0 obj<>stream xÚìÝßS"ÇÀqߨòé®U>6»kÕ¦jƒ€Ž?R©T¡“} ¿*7÷à°câ\+oñeŠ?;Ý=(®YäÇLã´ó=¸0##;~<ž>Ó øçf!ä yu ¯Åà£(È‹{âŠãƒ’x¢³YÔŸ*ŠýCõÑþ´yÚ_VŸ¼¿’_¶w~,ŠÑèˆ}q´"ﺽ‘Ùý(¼«¡'üV¿ïu½‹o¿oîŸL¶-Ýü‘|t¹õåÅ•§î¬üëÑk?ª[ù¨ûò:üŠâ‰\”{WÿʶááÖùãË=ÿb?KúþÜ\¶~»òD«Ýö†Ã™{(·{z‹Ëì ÞzΊê?–ŽÞ@Ü´Fmy;”»9’¬3wóã wÝrGOÜ%v4Üú©•x¤wôïêê½ym¿{Ùn]]ý%†ýÞ^÷½+B~2”vïz8ývzÑî]ä]-ùнß~÷Ú#ýÙ¡÷Ù´®Dûª5zCqá .?{¢3è}úò»/ˆo‹%µ•Ï^wÞw·sïįï¾Ü:Üê»ï.{¶|/¾¾áèò“7xü¨Þ¨ÿõ›¼høÞ_òèvån‹¶7µ.»“ÇiÝmì©Ç>~„V÷bÖt®»ò‡Üë>þšüäçú§pKn~_ÿf–öò‡úçzP,åôo臽³úÿö>ìÕ~<Çßîãü¼PpÕõ‘^>>R×§òZݪûÕí¹Žþ¿÷AŒ×ÞÞ/âðxï'±_p÷N>âÃ7ÇDüñ7¨¢Š**ª¨¨¢Š**ª¨¨¢Š**ª¨¨¢Š*ª ª>R¨¢Š**ª¨¨¢Š**ª¨¨¢Š**ª¨¨¢Š**ª/HÕ¨P|ñ©vd j"W©&F+r5vÕ€ ð £U€¡ºŠêJ€\5 :¯³B•\µeÕ•rÕP¿𩨢šê#Vê*=ªÌ ç«ª\ ­ŒÔU:+r•ºJ€*ýjÒX™ 4Q˜]y&Õ€̨’²ËÕÕù3:Šʸ{ÕPg0–Å®:³ ©«k¬«¨F¨>¹j W©«äª=uÕ@g5kT#ÔÕ€ €*ª©>b¥®Ò Ê<ª±±¢j"W­ŒÔU:+r•ºJ€*ýjâX_ÐLàß‹‡Ù ð•Ù•ðÜ+UoŽþs¨¨Æ¬:9÷ Õ(uõßýj`m]MŒêÌ»P­óÔ™”3ݨsbUF«TýT©«óJÀÒªáù,¨>©ºôhPWç—€1¹¿jŠfWÖ§¬ Úa ~Õð(ÖnÕ¾¾Õ`rV³jyMª @ U§ï†oìÜ•4žÁ~Çjð<«4¾.@Ÿhï9‰}µ…Õç¯&÷5,‹ª¨¢Š*ª¨¢šNU^s*ªQUö\¹š–ájUTí(6½£=ɺƒ*ªv”›ÞÕ6¶d5ÍjÕ;0[S¬z·ðø‚w¶7ÃÊ_a0äÊ_ y¡*ª¨¢Š*ª¨¢j÷3,ä*ª¨¢Š*ª¨¢ŠêKVí£j"W3¨Pí£Š*ª¨¢og•A•\EUTQE•#VT™]Ip¿Š*ª¨¢Š*ª¨¢Š*ª¨¢Š*ª¨¾xÕÅÕµþd @UT TQE•@UT TQE•@UT TQE•@UT TQE•@UT TQE•@UT TQE•@UT TQEUPEUUTÓ©úÿÿârõä äÿÿ”SMoUµU!‹ð‘P$z—©dì8%±ªZ¸¤­WE`© Š`2óìL™yÏ™8”¨«ŠU¶Y°eÑ? AYT¨n銠Tµ*°q+ÏÈã¹½oÆÎ‡UUbFϹï¾ûÎ9÷N±<63ss™w¡¬M¾oƒ-Åꊣ.1 4æ0Õ¡¡ª®Å¸Ê@T@§˜£XUæ[aÜ¡è\wtÅa´²Ä@U c˜¹¤pÍ`V®0ÃHS"Ô,«zÍ`™3åkÄâéˆC™6Ê@ö‚¹)(W`ÒbЇæ†!Ú-TfÛ Û` ‹Î&•ZÍËÊÂÒˆ·#€q›øF\¦˜ua}!ùHZuvzpØü°ò‚Ô2zšk“$;Ì2™&‚í°©î¹iÉ½Æ¬Š°Ìâɶ؞CJÇ‚Dßbª¨rýK¦¥¹^eœY‘“ʨœÕA,^£¦ŒÒ”Ç]cª>4lj°vHñ¹òlwQ5róêäÉmqz>ÿÜ]‚dçó%1²#MZ%;G_aÆÚÕ3dƒFFRûìxx"ãFÔ.»Ìe#…2D´,@Yºv¢ªà×ÖOC ê:u€:ÿG7Ö b ¸ —¹œ"®˜r†"“2D¼¼D‹{@šj$€jÅŸH4{$l”—£è\ÎÅ!Š”¾(\'ÒcL‹§"Åó"D³$Í:ÊÕyu8+(®&dÄÑÞg'ýøÊ\R  ÎÒQa²_rÔ¹+{a¦œ¼ Ó£@¼ã Ä»JZ¢¯v¡<¶ Ós™)÷¼ü§ßì¬|ªæX±”=ÿñ'ÙRö£‹EÈ]¸£;¾Î}š-c¹,{…ÌŸÏ^‚™÷²ÅÏCJŒa˜HœÆÁå¡—H¡¿°ûïÚÇf÷ÚG¨½óSaâí]œ=—”o­$îxwo,oý"Ñ^"ñ²×Øÿ¡°¾™ÂGèýæ5nßÂýþõíÄkˆ½­[”D;Ÿ">ðvƒ ¿)_#´×»ì¥\*3[a?O¼¨ÑZð¤Ùïµßo˵À¼~õzÏÿþQ„’ ¿÷–wÊø[¢ë~£ó]ý䫯H” ÍÅíö·o îz§ÃÆÁÙf¡åoð¾·—¯w7Zöv"yßC\ÿŽc+1áaÿFà{$ꔇáå ìáæŸ„îPf6 ;x³»„›ájsCô;®vCeˆ°¦äa'T¿ ~zᅅΓêÿf!ÎÜô[)¯ýsŒzØÇñ 3#ï?´cô5†ágþn'Foo„ë—;[ÿÅèÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I 1c C=0ßHOÁ1O!¿,µ¨,3µ\!? «!®!\\/þtäendstream endobj 252 0 obj 3422 endobj 253 0 obj<>/Dur 10/Trans<>>>>>endobj 254 0 obj<>stream xÚìÝ¿ÇðaC± ¡"À‚µ Ë´u’Cq”H•áà @€ÀIÀ6¬Šíåâ• ° »a¥"iT=âŠ=ûGef—äï–ûó½7³3oÈãñŽwäîg¿ûfvI.˜|òñÓ³¹¾x¬/ž|>ÿñŸóOôéìÙÙüóÇŸÎünþÉ¢øÕbþÙsþû¿&Ï¿™üþ›Éó³ÇÏ>~VÜøÙÙsíc}íÙÙÇ‹â^>úÝŸþòè壯ÿð|¾øôü“C{ñâ©>=.._¼x¦Og/žëÓ“âò©¾ýú¯L3×õß•—/ÊöÛ¿>z9ÿ÷ÿùîÑŸçOgþ8üäñ£ç_ýnþxþòËI.¾ˆ²(KeQei¢,ÊÒDY”EYš(‹²4QeQ–&Ê¢,ÊÒDY”¥‰²(‹²4Qei¢,Ê¢,M”EYš(‹²(KeQei¢ÜÔ¢ãùŠD™bNŽXˆ²dY”E¹NYéÙQ9˜Z¡ŒòþQFlJÃ꓊@ÏÕáÉ2vňLEµ0_Ê€‹2¾2D7”#gfÏ3e}ezå²bèºíÈEwN”S¨HcÝå)0 ó³(mÛ4Me?mK‹&ÊÄ1eŽ‹2j›·©(c·Íônezãcæt)ÊhƧ+ó c0žÕw€î;ƒóƳÚqÆr:gg•« Å!³.Ê›ÎhpÙxÖ¼eRÊN3¸‹0‹2%òžy)ʇžêŽa‘÷Ì¢\Ö Â%øÀ‰0ƒQžQ.Â.„¼F.‡ÍËà•)ë…;5üŽòn0lezär§þ2heêzq¨!+sDÙ‰¼G.kF¸ÊõõbQñ»Ë™9çŸu]š¶Ã ®F¹j \Ng—ÓîÊöà ÎÖ‹ªœofæÜc­ V¹i|©¼y`·d€«QFUÎ-— °å.TåÜnÿö¢Ü´òé¹éðî›¡Åæ~Ñùí”ælnÍ÷[>ÞÖj˜ÁÕ(›,kÂY¾87ãŠÍyq½P^LÍÙܺ9ß´ÝzLÓYpÊ-p¦æ\†ww>ßWŒéþ¼(¬[†ùmpÊ-¶ú ÇËóÊùåiuù®óÛY`ÊmÖó½àb¯<¨œNSn³£¼¼¿©QîP1tɘ΂RnÕeMw`òæürÖ^ùí4(åVûâîô~‹»ÊíGrEa¶fp5Ê­Æ›n&Ói@ÊÓöÊ—÷¯{?s}:;îýt;ïP˜m…¬DyÖªª˜Ì/fºÿÓßÍÿ,î[!³òMæ·æuIº¿·¶Â ®F¹ýBëR˜-…r»6림œZ 3Œ9Ê÷ϥ˥0Ø£|Ùmy¥in)Ì0â(ïö‹vQ¶f ÊÖ¶sÍ.æ0”7S{ûlŒ²Ç‡p¢¬̶&‰r©le ÂR^†¡l³`쎋fc œ(ï”mL„åý1þ,L„({§l·`ì•-L„år$ge2 œ(”ù§ƒWyæ„r傑§©­ p Ƶ2û”@8Q¾VfŸVåܲòÒVáŒ#å©§ÊÖ Æ eî‰p Æ*à.ÀW0fÖ•­-ó€”Ó”­Œüè½h¼ =åmÊŽ•eæ¥lQvª,3O„R0ò[oÞx¨¼q¬,3O›²cƒwí®‚1³åÔâ$±)[òÒâêLcêZ”Y§ B-¬ˆrÕ¡^|Sv±`°NUÊ•G-òMyjý…©ÝÉ B9 AÙvÁ8õq|Ó€òöÔÁÄýR¶\0N2 Û„ù¯¼=}XDÏ”ìúXwe0(Û-ËuŸ$Å6e,Ê3'ëãZæ»rý‡•x¤l³ókøä9®IcQv™m5óZyÛôáFþ(Û+ËÛæObJ€ÏÊ->¦Ëek_›Ï\eЇ²»È¢L_”=R¶T–Û~à8OüTÞ¶þTwo”-!/š© ÊñØ•be%ÊôÊ€§W9&VVÊ™(‹rs«œv势–m¨ËˆÇ¬ÝOåƒGY¹ekÊ2âÇÕ…¬Ü8^åCÅ#Ë2…ò­¡G9é¯\_—#ô‰¼s ô ”k2!Š»ÊluyôÊùÐ,—c:Úº|WYEá(›ÈþO½ÿæ¸Bÿ·~?oíŠr<,Ëkµþõ8Ë_¡g9Y¹Œ®ZßlÌÑëòø•³ÁYþe²^©‡óÉ×ê¡úP½úY)É2¦ònÅäý¯êÛ¿}«¾T«WnìºLþ|Ô8²¼þâá—ZW­&…2z–=Pî; ×uùÛ÷«&f'Ü»É;ý».gãWî”Ãcýjýó¯Ìš,®¼/ÿòÐ\®¿xõ¼Tþ¹.3 —]ϲÙö{¸^°^ÿ¢Çj¥Ö_|„že”ûÎÛ~ŒØåÞIaÛ¿¸r¯×c89“,{¢Üs&¸êræƒrï¨peÙ帯2O]æèü\V>4suE•e?”ûv×uy5¡¬ËƒC9ÁÈòí"Ë“çò!¸Gà n]öD¹oáÛXéøšýq땾T“Õî)íÈîÔy£\F÷ÝzR<÷g¾&«÷«}°Eùö|$²<Ñ)6_«µÒAƯË,ƒA9뫼«É«â«ñ;ôºœ¯|+Ë“rÐŒ›eo”{–¾uÙœÞêò³.g,eÙaåë1ÆêÆùy¿Ø#夗òÑÆÞŠf?OÁàPÎz*5šýYðÊÇ/½ŸìÇ`*Ë<Êñð,¯‰²ìrÞS™aÿrì•râh–™Ê²ÃÊ Ïûe>)÷*ÌYæ*Ë.+Ó×åØ'å^%ƒ#Ë\ƒC¹û›ü™êræ²Rqm;åÌe¶²L®Ü`\8۪˱/Ê-O03d™­`+CܪEVêræ‰2Ük§ü}d#Ë|e™V¹%²f¶Q—c?”!nÝ¢Žã?Œwýó W”¿?Õ{Rn‘ú¡|o¨²¢œsÆ‚AzØÅ8R2r:÷\¹"ÌØ‡h²W0(•ïÅC ŠvÆE™¾(ó BåN㎲¢žqQÎ~‡Ü¸•º?ôC‰òePôóÍZ0•ïõÏ2½r¼2C’™ †å¤NY±Ì6o”­(ç§•Ï“ê™ßÊYC–i·ªoD9 W™É˜½`ð(ç™9éo‰9ÇIbÖØ,Îò#eP\3ÍÜ÷1)'‡SfNIVü䷲̦{¬lº=£\þ˜çqÖæÙú>®ºœé¦g-¹¡¼/ÒV”•÷ú2{”™”s3FNLÅÈL]>i+Ê™¯ÊEv“<ÉÌÓóñaÀaG™½ïsto‘o#@eþ¾/DåX”½ìû‚TN|R7•mD98å,låÈß¾/8e;Qvø\E90eKQvù•µþDÙíW‰ûeWÞñÐ]ù§£om‘ÿ”²`ôPŽmEÙÝw¢µiI×z‘x¨<è]•øÊö¢ìî;„[´«d$Qv÷ÝîmÜ’‘DÙÙ#7\%ÙE~_è«oŒÎ›×æ—åϹùöFÿ¤Ãùæp[’½v5ÊôG!it®<ØK'WWbf*Cq‘¿6›ýuA¯³\|3·]iÃì¢O”·éräÊfÞ¶®NWƒ¬8›W!•W%d¼?gÅoËÛv¯Áëå4%wRã4í[&˜ rb2ü“¹È.v·”ËÛš”k.Më¦Óuåú©o¨“… y%GAW$;©V.okPŽkmKÏ ´È˾}þŽs7(%«+Få¬îÁ¶)yÍÒzQ;ñµÌUʦÓË{)×>ÔvôcÙwlUÔeÜ‹+=>Ëvµ·Éu¯Ëq}u¢ïþ•·M©KX‘Ð×fŒ¡e/ Óýõí1Fy[rÖÐÓ’GÙªr³Ó›¯ÍF‰vÖaM ­×GÊWÅ7s[rÓVߨ³Ü\îN׌ò–òXdÅßÛwfÐqaÆåËusóC\Þ–opKzmõéQýh{¿4mÞªê±o¡ófrÖø ÛÔœG©lˆ›Ò‰9ë¥Üâ!ôdn—£T6ÂÛ6AkÏÖkŸZÛGHǨÜvìæ7I/äv@f Œ2>s|AP/ v£L½ß·Ã½S†,G¹qÃl(rL1Ín(wÑ1wB¦Í ò²£EB…œÐ¬€.(wÜ/@ÄÜùné ¶ëE÷5›nÙ‘u€ÊÝ×<æ^+H:å>+^ŒÍœõºGª0ƒ QÆgÎzÞQND›¹/2UnD—9ë_4aFWîýìâx.îW4aôz±´À»÷“p¯Š¬ÊC&rÏÍ ¸’0v”í¥™f4îDyOÛ½ŠšEyx³am ¨àR”‡:e1JŠfp+ʃÖù™ Ì€ŠŒ‚¸gœãkÄfLe¬—›e½Bãm<¢‡«7™ã®ùGÛ‚fDeÄI;›2éò× b`–Ž*ã®f×ÇmcÜ'µ_k ¹«kY;ç˜{nÀÍ(·LiFCŒ>;àj”ƒzŒ™Ýþh‚†:?XÊdoÈß`Ló’Ô0Ö4ѽü©Ö™ìQQà îÖ‹šÊAcüà€{«Öpb;49©cÊCû–$ŒKg ND9¥Yå 38eåáïâC 3¸š%‰rš;²ôyé©2Z˜cn/&*å¥õa)_­R2åÔz‚°”C§ìH˜Á‰(“);fp"ÊÊ[”Ã^à„¬G˃è^QîlG™Ny‰³I‰1‡àÀ’Æò îbÔ °>„»Mq^¾‰$pÀ‡l·)Ž2B”`Øãç(#„XÕé”ÓÜ0ƒ 3A¥Œµü‡ìG™ððiîF˜Á~;*/ùs0x×,Ø[Àý(:-´Õd`Í[Üwµî´¡)ŒØ®]•;-\ĉL­(§x1!,‘hÊà֣Üm­ÞZRÎídyiM9µ¢lq?¿rÇç?¶KQîÕùu*¢ÜGy+Ê\Êã+ÌÖ•»V:¦S”{­Ó¢ì¢òR”{0tTÞŠrŸUZ”E9Pe7º?Ûʳ&Ê¢ªrçˆóæ{w¸‡¯¡ï;¨iß`TºÿPŽÊ÷FAéQøtÇÀ#9 3K伯ay ºzäÁ‰!P zׇL’Ú°1(RÉëoÒ¬ünÒ>*ÿÑ¦Ñ¤Òæ‡Hë?ʆ<âTôà&Ý^š]ý$(/Iinÿ]dŸ]÷âÒ/4·¾†ûµÅ é â1]]Xã"~ó ñ€î8­vA딯n;yoýgBYd|"]pÔzÌ9-Ôª¥¸m—DÌIï²W«öÛ£:yrvõmÑ~ Z´så7Ï¿y._äur…÷Æzéõ5ÄÚÆr'ý…HÑÞˆà]À±ãùÊBÑÚ<{pþú±(µR¬-1v‚[»üQ-ٸê¸üÓWÊŒ•q%çv —Ù\•súŠs?§œQQ,3õ•ó¹þ”EʧÉ{%â*—í¢—–>ºTÅúr—K6:è¯Z.½DÆÛ;e—n.°ùñòê—þÿÿârõä äÿÿs á2P0PIÑ0ÒSpÌSÈ/K-*ËL-WÈOS(ÉHUp-KÍ+QÈÍO)ÍIÕ Éâ25´€(·ñ\C¸¹ô¦îåendstream endobj 255 0 obj 5430 endobj 256 0 obj<>/Dur 10/Trans<>>>>>endobj 257 0 obj<>stream xÚìÝÍoãÆð ¬Ì=E‹ €nro¾ÄÜÊë$@Q¤Ú-oEë¢0ŠQêC%háý3†×Àü·’"Åáp(‘3oä7²µ’h{©ŸÞ{¿~yõõ»¿»âw×߬~ýyóÛ»oß­¾¹úÝêןV›×oåKoWëkñõã^¿¿{}s÷ú—ÕÕõ»¯ÖrâúŠÿ þâÕÕÛ·ü5ñCéå÷ûçezù×?½_}ûû¸j··_óÛíí{y»½­¿&ž‰ûoÕý­jø×eºúï¯ÿûéò«ëøÝåŸWWWëË÷ù~uµJ“× Û€F‘¹ ¹ ¹°!r!r!raC.äB.äB.ä†\È…\È…\Ø ¹ ¹ ¹°!r!r!r¹mÏ›ÍrÙc!—mÛ¨†\°«»e‹²mvM>G®V«¬¿Ùìs-KäÒcíEW@`Ô=Ör¯t…FcéJ½l?F]bu-ÃsÀ•u*NEo•÷(ô¬/‰+3 <\å£óŸ>Wf~÷Ï»^jìerõ£úvk€+õZ…ÑÃ^1ƒ`Ôgh)¯M1`”ŒÓ"_\‡åT`ƒy¬7â‰ëà„*:C?l®ìðrÝHÈ—Á•³p;È+d®ìÈ%[á5äÏÐö›¥§QõoT=Ú3ðÀ•Ýî%ßm¼YRZ¾Q‰ÛîåhÈ×½¦š×r”èŠXgt5ÜsÒÇ,ñ­½‚å©G>Ыà"¢ÃʨÈ1"¸Ê'T¾ÎˆÂ*~L>ÿFþ¸F[æ¥Þ)4"Ê_¨ž¨É‚FF\TN‘O)óÉ•·¶Wó²OÆHVsÉ"¾ ‰(+¹vž2Ú”Tä“+s0¡ð2Äkme¯â¢Q«ì'\„V\òÇd>úãÊÆz);½¨.ºª¤ks•ÉXL“Ñå1³±ªz¼ô\*y튢¥ª]e2V?æ“küa½b´µãïwC)áË9ñ‚ÅsŒP±X$*ÝŠ…$ŸNÔ«âÇø·œî©#1Å ¨Ñ+²#‘%‚;®l’!ãbÛ‡.é€7B-)ÝqM3`\Œæë>‹!\?«ØS ¯o:½¢€p²É¶Þt¦cÈ\Óm»yV^­Ïƒ²p¹¦ÜÒÕ‘Žse“nHÝõ&:ßYXΦ݌ªOLj9o4-}:úØ ™:IÅ'ÝÔsùõtqèÒ1\®žàÊt˜ç ñeË¥é¬F¡rõ¦b¦‹®…üØùªy…ÊÕ¿T«Ü³©úh¼@A]×\­ð •+ë_*ŽÁõ¬¸ªÿ. ”Ë¢ƒš-³7²º_ˆ¥¡¸gçKÅÅšOjêÓâ¢'¼êÿ_ \Á%¢+»`{z#—†‡?–\O‹%ÿSù«=ððòsìu\’kYdŸúzS>P“2cÍ˜ŽµðŠÂä² ®ä·5®e‹K}1Ûð ”ËjÕº¤x*¹²ƒ¸jáåé8Lê"¸JŠó W2ÖÃ+P.»q›Â䂸x9;ïïL”áÉe\íRÿ¤áêëHÈðz(þÛς䲴Y22›¿ô¬²‘}áé¨zlp à:¿¨J½|¼h–z¾.õÆ6¿ðtP=2¸¶)»ýQQìKñ”gžè–.ŠÝç»xÐNG5¨üJî|©†‡Å£W»nÂှýçèF×$߇À¸FrÎp}ØÈ5npuÈŸ׸Û3Ηö\¯|Ý„B ®bxgסq¹˜ÁÎ\ ŒËÍÀ&®e@\n‚«>ò[\®Îô`â 'º\—‰ëß"¸Ë–ëC8Ñåì¬+&®`j—³à:èrwJ#W(µËáØ¯B•¤ÎÅÃmõb\™Ë¡r*ƒ¨ó—ÓÓkÑGcƒÏå4¸5×ãgp¹:é‰.ø\ Ç\Æðúl œËm.öF×<×Ò)WOí‚Îåxƒ{ot-‘k@íÎå8‹èªzñ­~—Ó.s\*ŒÎ·Úð‚Îåz_¡¢vÍ›Aµ­¢ËåÇG.ç\2ŒæÍ ªB-r9C|.î¢kþHæDÜ=ÎÉcUÉ"šËùÙ«‹ÚEˆ¨^ò¶%gÛªv¹œ£C¸˜·è’X<®øã]írïtx.ºçÚÕ®³ùÇ­|<ßÕ.—³t×ÒWt‰ šËEb3º`.÷'Þ¯÷»æª~ñÚµ­j—Ãy¢às±Ñ«1Eæ[Âoó]t¹›© ¸úÆêáry¸†ÅX½³¹ Ë<Þ™ËC.ÚD—³Ù ‚«w;#T.×ï±ÙÎèj¾Bàê¯]@¹|ä¢Ut¹š± ¸Ê@:«s5ö‘€Êµô]Ûy÷> ¹¼\©mW»ªgõÚåjΆr1ÑÕ®Ÿ7¢+C®fí"< ÈG9>øQ®fŸÕ÷ï‚È•yŒ®­ª/¾ç[ù´] €\K\EÝÚÊïíGBäPj³v1äjD×\TVÛVí‚Èåçä ´L-‡R‹ñúƾ©n>Ê ¸ÊÚ5/bLÕ®y#ºàqež¸ŠíŒ<¨Ä·¼ç‹EÒ¬]n>Ëa\KÑÕÚ7bÏgäÚ_güعΑË×izê±Dæ]Ñåäà Ëb¼ $×ÒtŽÚÆ•yã²;&ÈEðÁe]и˜.»Úådþp-|qYF—‹èµôÅey<#r ‰.äT»\T {® ~ty䊠,û®/¹œÃ.. ‡k¿çÉöÒÓ ºZ\þÊ…=××3T.q’`qÁ{âuÁh‹.fÑÀU\‰›i`¸`rU`ꇀp=›¸`¸2 \†\D.MpAå*±TíÒ0境yì즒½%£nV޼Šë!¿Tžã_{¾Ôé3Àb±{÷¼#=zΤû•W!sÍÖÆ™§Ç}\šß¹ÞüXýu˜\”âÚlÖÀ¹ ]@ç\×f®é¶\®Í.‘«—«\ÈÕËU.è\Ì;W#¸´\“×z[®®Fp!WW3¸«‡«\ÈeæÚ .ä2sír¹öƒ .—º†¢æŠf.¹öƒ pt¹bBÈÌÀÕ9ÝŽKŒÕH­Í:0®¥>ºâõÚÄÕ9Ý2ºfâ\·‚KË5y·~®F›µ¹´Ó­¹ÁÃżqÕR1®¬‡‹ßHLÖâ+žÅU¥ŠÌÓ­¹f<?ÌÖü÷fdMHè\âÌÔÌâvtuL·äâ \Òœ{Ï‚‰®¥!º$®ŽéÖÑ%R1–ê³^®$.q§–z.ýt[.±TœÉåc \LŸ‹;®¸‡+>†K×iqÍ •l3M¿K3Ý’K.%W,ÿBlâú2Is½v:|¹Å‹9ÑöêÛÓí¸^ñ¥¢Jh^ùøò5žÁçÊ´¥ËÅ:ãu{íÇÄ•¼l®n-è\^p6íuÅ®äs´´\9 .æ‡Ë¤œkéžË¨ÕÉ•¾P®WF--W†‹¹æzî^(‚çú£™+nŒsµ¹´ÓÍ\u­™fÔ¬“+ÏEz¢‹ ®úˆàÌ2ºr0\_öGW{¼Ó<ÝÄ%®´KÚã³õ'ÈUOÄ ;”+õÏ¥ÿÌfe®Ä±\‰æ«Òq}xØ<½“Kj=T£©k1æ,ÇÕjö¬“+ KŒÊ”ßÍ)óô..yÍëjDBü )¾ƒ±¹ríLÌÊá¬b0Kï'cçt=WZ×L '9vmJÆ<0®õÚÌÕœ®åÚTZ-®âW{¹’—ÃU&âér©Š¯×³Öð°yz‹k³©kÕj׬@kŒ]G¥ :—Xê‘Ú’/žµ–ŒÚé{\ÖÃþX=‘£ÖÕ’qݽY¶äJAsi{GšuFãJЦ¥µ·ÃRl9<aKÐÔ\ÖisÅÄ<"Ñž^q=k¬ö¹Ú»ˆ…]à<ë°ôGœ!—ÊÅý¦ äÒq=tm B®£ÿ „K?È…\È…\f®¹pQäÂèB.8\ÍSÛ¹æÊãÚ;µ{.M·žøl‘a.[§¶Á®!W˜\,0®æ©íOLí;`®j„=5cI°È[.Bã²Ðòçål»5—÷:íÒeÍE»FNºtÙrÑĶE§\ºl¹>·æúî”K×ø\>Â+ÆeŸ‹>¸+ѱƒËC6Íå>¼®ÇÒ±sÑCx!Ð\´ãú¹N‡ËåÜ\®k=rAÍE+®a•Þ5W‚\PsñX®Ü;—Û ëÇq¥þ¹’0¸RÑåxK^ø\)`®”‰ÿ‡¦ Ÿ×\&C’6²2rš‹ rtåå-MÄ©',÷]y\¼Æ§2Å>Ó©¯dt½ÏÆP®”7¡UãÊËBæ…‹ÀU$£w.ç{3æÊEUçw‚-Ý2?\ t.M,g\׬r1é§Ô»ß}*èuF÷{Íå~ß¼¹rä]èCçb¹€>û8„$`®ä4¸¾s\öY—ËËÁnô÷s@D°\~· u‡%OGÛ„º;œ§c¹ÆßÙò®O÷õì´üÊbWÞÁ\¹¯Áì(žKEOÇ ‚9 a—·à‚sË]Áçª$„àrs€Þ»áw7¢š‹7ú)5]=OóqÏîxÀ|ÚMcÉ=Äàrø'éë:\–¿»¿s¡‘Ф“wù=¡—ßKÃDQÊiwœãbp :›p=Î*Ñ$E.¶xË;¡r#¨/–¨'¬|’@ ®1NÞÿi'2ßø?w¢s%ŠúM!²Ï¥¦¹|×(çOïý¸¦6D*ƒD~ë¹Ô4Wî3¸Fáêý¼E¹øS$údìçJ¼žùc”³ó÷yé¸x…OàÊýž'eœ‹ô$ˆ¨]¢¿Àîx÷ -ê“ìH ­]~Sq,®žÏ\ÆÌ½X2Þp³¼\Hj¸Ô´n®ÄóIxFºT†ÙK¼uÞ½ç]«äF„O.ß8¡Îu/þ‘Ó:¹rß§,ëÊ"¦$QÓ䕙˞»H«1&ZìóšßH 9Mí¬Ë5*×AŸ{>ü3IOƒk°W:œ+÷ö°ñ.ó3,Qòtêÿ8×°ÏþSrˆVz:\ƒ½n‚KÅq¯¹5m²$Îã7&פ]îÄY"G½¢Û„^0´F¾^2•W’À8¥& âmAÑýòŠ“$ ­ñ¯F9­ñ¹òѽ’Ω“Ç¿ÖéØ^´¦¸4ì¸^ ´&¹’î˜^°´¦¹ððxµ9Tæ'ã-&`ZS]Öz”÷™ƒÓšì*à#¼S€Z“qåɱ yü_ˆëèàHÆÖ”\ǽaˆ¡5-×é”Õš”«<]ÂIy\eB¦hÁ¼ÑÄ\, –' \­É¹Xµ£ï Ÿfì…rÕÀR»À¬å‚ˬvö²¹lâ&+g\¬}JÇ}%ÐÞ5—ŽFÓC.K°”ÐÜr±<ÜÀòÁÐBW¸ ¹ ¹ ¹ r!r!r!6äB.äB.äB.lÈ…\È…\È… ¹ ¹ ¹ r!r!r!6äB.äB.äB.lÈ…\È…\È… ¹ ¹ ¹ r!r!r!6äB.äB.äB.l¸þÿÿârõä äÿÿ”UÍoUwT¡ˆð‘P$:J‘p¤Ä (-1MIšœ‚ÀŒÊóî³½íî>gßsJÔSÅ)WŠ‚,¸rè? A9T¨^鉠Tµ*pp«¬egóv×IlRmi½?ͼ™ßüfæy&Ý—ˆ%pòpòŸ›€dÒ9HÀØÄxl ÒzôbNPDst|38hÄq ª+ ИU4© fÙ÷1+‚N¹pX™òSÇXö*ÕDl(}µ/#£où¡í#¶`©DKTå±Ƴó*©3KÔÖ0i¶ †à0X$µÅ ¬¡¨ƒÌF³1lš£Ž:‚ᩤ D¼ÉCÉQEb¥P"Ð9o,S$`X]²²ŠX”s|. E'15åÿ¦¶fѰ )C–ÌAÂU­ ­Hˆi¢£NUAÊΉE;‰µ Ã\N¹]'¶l ÂHÒ¢¢Àôn†Ejë†ÏD3C݃ì¼T,šFP:ra Ÿœtƒ+ÆLƒ _Kº*¦Ú)&ÔL¨ñM(ŽpòTüý@aò0R»žÀ÷ÝиèÛÞy#¬(ˆlÇŽŽL‡~]I£ç;Ãy¶‚Úå0wÉ.[7±Aø5º¡ûÌN)§—4šê St [@›ÌÈ4J« Ãà ׈IœL´“yfíAŽLÆ<ß©òñt/(iw ØÝ–Påágèäq çj™˜jgrhÀ‡} d¡«ØÉÎÅK3ô³PŒÎ¡TT €€C‘¡ÃøîPŒf™#ªƒ»†£‚Ë ä ¨Lv,D7=‹éÔÄЈÚ&Ó¡D/òÁ¬I§ºE ¥çÝAëØ‡j,oŸQ *%ښY¢]ûW LôdÃIö­Î ©K$˜0¥ƒøzJcê üïÅS}v˜ÙyÿPµÝ~' ÄÕ“cpãs6Üž_,Ø¿]UÚãRý«D‘Ȏ˜ÔRÒœÜ[ÿß&܈¼C, Óú2›î[‚щþ%àw2æÿ5Àø¸zjVßÌBüÒ‡Çâ\žä…Ù¹$~ƒÏô'ñãaôÉø<Œ½Ÿyÿ$aá½>éE"geøq¥éí?A¿ËÿNО¬žBÛìlŸ8F»—ǧ{Ô[­Gn»wo,mþ¨Ðn$ò¼[Ùû6µç½Ú+I÷g·rû–Ü;º¾yIÊÇîæú-t“O¥|àî´Uõê£ÝæÝÖnoIö?Už5¯*?<×Ò|[ëIõ¨y@ekY÷¼Ï_n6¾y䣞J£ùš{ÆüC¡ëJýë•_{^|A¡ÞV¥ú»}ðÕ+Rî¸g½Êþ…jªÖØJÉû¼v¸^ã[‘žû®” ×þ”ûe-2àÊ£ž·/ïÜâθÒ[lyM¹ñ¢;è÷¼º¼Y T’Þê¡L¶Ñ/rõÐ#m´/‹Z+D®¬{Ú—­Ÿü^¸^ªþ$ÿ q3xn4j½îÁjÊ#Ùߪ¨![²ÿè!ÐÒó®4vêz}Ý[[¬oþ ÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I† Ac C=°€‘ž‚cžB~YjQYfj¹B~VS\C¸¹ŠÞíendstream endobj 258 0 obj 5778 endobj 259 0 obj<>/Dur 10/Trans<>>>>>endobj 260 0 obj<>stream xÚìÝOoã¸ðfO¹‘Ð0 ž'™3€¢°^ØiçV´ ôPôTl{êaí÷¯HJ¶S%Qâ#ýd'ŽíD±~¤(‰üíáéÃç—CóíØ|ûôåðã߇§æòòõåðåøóáǯ‡=|´}<<2×þç~yøÃ/¿^>~úàžüù«ýéÃÓáøòòá«ý¥ï¯ýûã÷Ç¿üÇß=Ùå3˜ hsùöÍ<òÍ.¿ÿÇã÷Ãüï×Ç¿>}þøø§Ãó——Gøóëáxø®4-1—'y’'-äIžäI y’'yÒBžäIžäI y’'yÒBžäIž´'y’'yÒBžäIž;.RJòŒ©Iž±’<£k’çÚüö-Š!Ê"-h=—¥mûWóÿ˜Ë(‹Àê¹4g¡ýù_¸çŠ:¥ŸóŠ<×r.-Úseý ½Í&5ÇS\Ùðþ]q¾ý_3?rìž«›; @- » 5Þ¿Û¡1{9/ìͧ€ÑÖ·û QâSÈáøì(BOˆÑ‡V2´XOˆ³m3ÔyŠæ†qi2]pãÙÞ‘îqÁœ§èÝ5·ˆ=!Ö¦âLPçÉküøåŽõ4wÌ£æ÷ÝÝåµg¼-ï¨ Îwaë eísÙÜa'iãÕR ‰Ú3f×P :ñõe»ûâÉDϳ+§-ZOæB“¡öŒÛÓÖJƒVžø<'²Ç³Ë÷ö9›ê˜ó=vÇå¨ßÓæ{#Æ:ÜKùÙåûù×P{Bô~àv+®oÚóœFÆLÍÍ›;ÒÜoÛEöcîÑ&Ñ…yÊ>´½t«‚ÖáÛïbìI¤ž›ì¥—êàËøjF³Fä Ûì£h?%߇5ÇS„Qãñ܈óœê· uÑýu›í“Ìø¢=a»=’mkéæ« öÜs0ãKöÜô„K£I ¥{aû‹aÛã¼_k Ë)'Tž…½‚ZšñU¹žÙ^3Ï{Ì\Ã<½u|¹ž“Ù^ûÞ;³×Å­zé¾…çtá¹Þ.ljï9]·¯÷ìþÉ峫Jõ ¨Û#xÞh±žM¥ºª¹­‚”©ÓÍw-*çÙTýàž¦BþM{‹$Ýã{B@K¾‰ÏZ5ÀmÎ XO`Us5Ï62VMÿŸö¶XÏ–¼ñ¬ÚwWÞýàžªM”ZÕ1Ð~€V…z†„g+&{žÕ§»Žr—ÿˆ%<£{mhvVÐyÖK<ûZªgPxvVBxNæûU€V…z†õƒ´hJx6Eª˜üðÎZ¨gXxÞÖGàñœh/]¨ÐezvÓ…Ôï!) í§'…*Ò30<[1¡Îõ‘ý™]×Gæ ¤ÉÏÏ9—EzöÊ׆Î4ÜMÄ*s·InÓ~gîˆ.Û’7?¨À„çhNŸ;Å ÏÈoë6çÝ^·oç| °?V¥yFÝiTû=ùðÁ ¥yÆ Ï¾&>|DGižq÷iŠêÎ=c—žÂ[ñác‘ «öyG#žª4O•È“—è û$܈§,Ês§ø;”Sä¹SxŽy.;àˆgO;À,oÇ”ïN¢ÉÚ3EjgÞ`¼ûØŒÑÛ‹Ï” Ÿ¯'o•vcÊ—á™"³®ÊOÞøü²3aÂgíÉ óL’XWíO~™ˆC\<&|¶žnûÈÎÏaǘ<Ï$yr|Hº„'OTž§'dé ˆ=e–ž ©§&OòLTêzª=5VO Ïžüv¢˜Œ=½fÞ›AwøxïThΞ×]ôã–ãIJ¤¥ž€ÅSæçif{13”ôçˉ=ÝÓ¼ÄÏÊ}±ªÆè©só¼ˆöæÓÀâ)%®-⥞H¦#3#Ï%ᙟg§Y÷ËO$ÕûèÇŠÒ“UÞúÝóZk¶û»A+½ãΧȡÛïõD.Õ“o~t™‰¿ÞÎ,Æsbä핞óÿ¹'«È3¦çT[gŠ ~¡§$Oò$ÏûñTx¦¨–yy’'y’'y’'y–å94Ý%y.ó„už#’çÀ;]b|`Ä@Ï¡µ³àb)7O;ŒÏ¸§z×°øX{þžjäûæoçé[{Æžzµ§o`Dò~Çæœ Á̉Bt'V^<ý#†{zמ¿çð;6çNâæT@_|ÞŒìé_{Éž®ÎàîÄJá/?oò›Ÿžµçì þÉë¯J8áêáO¾ÆÓ»ö²=Ÿ§o`Äž"ÜS–áÉÛwÜ;±òÍöÑÍÀˆ³ÚŸ·kÏÙS{‹Ï7[0Üž^iÚE,æöûÐÚËõDÔ’‘§ÊÄS‘gÌþ¥<<0â€ç™dbíl(ݳ÷ö=Û·jwÉAÏ«ü†[<2díÞªO)×yök¿_ÏoDÞ61Û ñtHBJþfæ¬ñ߈ÜÔ3±öaO™»§c½XpïFÑØö¦Çbbí9ïßœð”Ç){ž5eøÚïÞóæ¨Cö¦‘³Ö^¼§`KûëÆ†XûÄçROX²÷”Éóž<}Cð!ò\4 ›?]4Oß»¨<}[ØëÆJ\ùç#¯r`Sìžøò¼WOÈËÓ;Ä..O…Ÿ³{‘Cì’çê¹}K”«šB³n{ÈR×ïxêÄ)ž¾‹<Ñxú^nâ|òæÒrOô=vÙy"ß‚OóúÈ‹'ö¦4åÑOÔ(ç}{"/@½:òDä‰9ὸž¨ P Ï{÷D]€¦j—ê)³ôÄ›ð©^ÚiUN)¼éNž%Ÿ+=%yFôD\!ÉL=±&|²V¦'ä鉶M××]¦§ÌÓm§{Yk<ß.wY|®ð|÷îytI(špWábÏ M+zÅçbÏÎt  Kõ…ž§ç å§{+>zžÞ‡y>ý”ÆSgæÈÙ€ÞYñ¹Ìóô¼¤Дâ­=ŸR¤{nžïQ{&Ý>mž)¾lϧ»J÷EžïŸ1(y”îK_Ícϯ:‘gú#R×yÏ—Ws9¾Ú;G*>ež¦"2žî®Ö.ùx"8žjeùùÚ, ç±çÙ¦IÎ<Ç2¾¶³ðº‰æì|¼vÈTøÊÔùæcªìyÎÌÞë¹G¸ç²È©fhø†ËÜÈs.h½À#çfž3s‘mþ2÷œ=¢ZÀ‰qpÜÍ<ç‚2U@¶oé¹m>Ò¡†·óÜtãi¶oê¹!(ZÎM=a+PhgØÒs«÷˜s[Ïmò3çÆž[€¢æÜÚÓÔI2:'âyë¶öŒ Šœs{ϸ Ø9wðŒ Šžsψˆ”¸'MÞÅ3ZT~Î]<#AÈ 8÷ñŒšçNžC¦]CIžkà òˆÎ=W‰@Á¹§çšŒ•ÙpîéÙ²¨‹Šr=Û´•K8µ&ÏAP97¦³áÜÙó –¾ eN¹žÀ³'*C3+Îý=CEe–œ)µ `95-üÅ.kò\Ä–”Ø&X82Ã,Îò10›ŸsÀÂP®Ï‰mS?À/eÐiy·Ñø\\÷¸¿/N, {%S1iy¼UàÁbà?i˜ÈÉ}(3«cl„îÖ‰1=Ù7Ù¯ ÄUÀeÅ I©D]¿}»b{`Ôb“}óàèää»êœ$º´ÞnÄìß¿MO×€ ñ{Á–„`ê.A^±XóLy>f‚lX˜R¹D5ȹŠS sÄ)ÙT r©“Äg‰z`Ù\ƒÓõJ³‚ ÑV$,9CúA A§-åбú–cÙ¤ `ɾz9Zµ70Ê-‡z’Å&akÿ²•7J¡ Mö×5³•G=è´Hf,x2Ò*#„È=VŽú¬Hê1 瞥¨ÞŽÃ48„Ò‘j+‰ç’®ñ} %5ì>•¾ªrS²Ëm„6ŽŸrŽ…S° ÖTà©*›Â/y¬D=nQ_ƒcÝ'±3Pý{NÇý*Âüë6…&z™l ±Ñ¹’mÇ=–ÛŽ£ÙàГ …G‚ÚGL-qURx.ÒgÒ ¤|”Òh]h@t6Cã1i«èÚøE%§˜+00Q< ‹ã‡¹Rhm¾N!`ú kÒÚ†r”±›PG$Õ€åí¦‰º lT7GîT>nàèTɪÎ]Ê,À\ÕKØŽ>&í–å§\p)5ÛcÂѩˆQºqƒ5º´ÖZŠvPò¿f”¬³g lD İl‹—·Eµæk_k{ sGÕÙï ¥ÓÉgxºôD)¹Yâ¹°ë}Ʀå~Õ(Ñ›»öõŒÛ½Z»ù(·"›uêjˆV§’ÁúeÕrÉ)p9²Šô)ak—#Ñ¡"/0é%•Ì©ÁÛÄI%YØvãW—Ô”<)UÔ•Aå¯Ó#Ö[§:ã,‱\p<©í‹§Û–_l\cZã²nÜúCYmO|ëi0!¯¹úœ;¶¡/§&y¬â¶KµýrO6/P¥aߣ(Ú˜)|™r¶»âÓÆ‰²Ó˜ÙÙV2È͹½z•÷í“û"‘.™ìm7 g‡4U 妇°]9§pþ:’lÊSÔ³qÐÕ ‰]fqŽæ{ÎÀà^ ÿQás?³#»ñ}xÿaáôŒçR‡'>IåR‡Ì£Ç2øŒ£Ÿ¦r€â¡©Ó˜ËHê íNŸ: ÈéQ"±SÔ¡ݽMëO±þOÓZËë-Ö Ö´Voü8¶£a-í’ßVºÄðÖÅ3W~–Öb"ñB¸°ôýØRôZ·x Â_Ã…kWÅÒæ…뉗…x^™¿ŠN¸ó‰÷ÂÛÕ•eùUY‹·ª‹Ýè}"=W¢eñyâùª¡Öª—77VI¥²*תÎèÜ+•ï(«k¡²ñzøœý—´.TÖ¾ý½ë¥¥Õ]]Xþ][ýæU!n‡;£…G–ÇV*×ÇÄÝp^œxx~}~Å¿žèº âüßâ~¯XIìÅæÅ(z$nÞÁ¤ž Et²mˆK u=SQ´&./Ä,‰KÑܺÈÔ­ßÄÜzDêÖ#Q2ª5+k‘ñuõU‹0[{>/Dur 10/Trans<>>>>>endobj 263 0 obj<>stream xÚìOoãÆÆU÷0oÉ…`÷Ò ÐÊÞÄû'@Q ÿÜ.ÐCÑ.ZMî®7qáØÛÛÅ{ãI@Žºø{¤ýò ô@ê$_æ3t†”dË¢(ŠœwÞg¤÷‰­xõäŸyI‡ßÝÛë?y”˜‡}óðøirþu²gþ{ôñ£äéþ‡ÉùQòêÞÃ⩇ÉGíÏ‹oï}úÜ|lÏ<9{0Û=xš<ÜKž¿2ï}²oþxùà“Ó—Éå7‡—¿¸HON~ž|yöæ<¹xq~üú29¾HÎßœžŸ~ýóèô2yy~lþŸœž½í'¿?>=:zÙ·_øÅó{ß%ž~Ü/A~ôèißÒ¶=é—@Ÿí~ö§¿î>Ûýão?Mîÿzo¦ƒƒ'ÅŸ|±·¿÷ùÁÁÁÞÞ{öoóødß¿§E"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D¢mÒH-y¾/lÚ¨W¨1ýÞüýLP¶ão~“Šç«yfÕøï?¢vø³®øûËÞ/j‰?Yñy%,[âoþ|5þbUíËvø3Û+Ý3û«{}˜öØ–3÷ÍKöÇÔ<ÙN‰Ô+ÊûÖò½¥ñ%}Úã–#Ks¤’^áäžžà·õŠš'ëøUáöÌ¡½â5Áß­ò,רà¨Jܷ§ü‡?ùÑ“•0y!é—;™”þ­Ýo Ý/vªz«ð'EÎÛ·àÅ eƒIÛÛ¿Ai¢¥ØVà/· »ü‡àwPùRü …çÎHðsá7­f2šÖ?ëf¿4½öz óš"~uå3+{²é#xá©Àñ'Óð7;[ýþþ¤î7¯š=²ö;Ó¶ZMÖ—àïTö÷v&dþiw¥”©€´ÙÇàõ,ñbç·g÷Žoïõö²þAµÑÑÈmÓñÛiÁÏ…ûtËÆã× Øü›‹všúT»ì ~Á¿‡‚Ÿ¾àg…/øYá ~/ŠæõþPðspüÌäïâ^ ~¯ìâá0Ø ä¾¼é .‚T(äcW‘¯ä%ø;)¿‹^×ÁŸñ¿ ®U/Ÿk?v=u}X[€NœøÖó+?z=C~Ð P¨¶Ÿ[)qƒÏ_ßg Pðð›XÂÿj>‹à¯àØ/¼7ýšë«ÅbHð¯øU/Æm×i€‚1~\ýjÜa½âóWÀðíËݾž?'þzöÅë]Wïûà €âwþòµwŸ 8Åí|MJ¿b…kjúÓXð/ÄN¬=ÐÇæ¯ØàGõoŠnk¸ü óÓŸð¿üÍ໦Ì_qÐמé›oå¯àà¯ÆÓÆä¯ààSПòßZüáÓПð¿ÚNü9;}PþÊŸõqÍc:¼?Êü¨¡E)gÏþäøó5àFÏŒÿváÏ×O=Óø¹Ú&üÍCŸj`,û“á_7x|DÏ$~®6ÿZ?ó—ñ³ñø×¶¾/ú`ö'ÁŸGëwÑñ=VHöWDôãµ?ãm‘¯7„MßÚÿjcñ· ŸÑƒ•> ‚¾Wóß¾fÃð· ßæG²¿rnýXƒ›©ñUô}›ßsã{¿f4K‡ø£¶ô}›þ*¼ ÁEm/‡ðn~œôQüôý›ß¦O¼QøÛÓg0¿Åÿý&áï@_3˜ß¤Ï÷ñæàïB?Yð£Áß…¾æÁ`ðÇ‚¿mÁÉgþ"ü£ÍÀ߉>“ùmå`ÅLŸÉümþnô¹Ì_ì÷Ø_9 ßáã\æ/ö{ì¯Xék>ö°¿ý+ýЉ>ûÏ ?§ZàÏÝŒñƒŸ|Nc¹›àgÏž[Ý ó€ð;¢ÏnþÛl!züø ~þCsøã-£¯#$üy(öÏ] ­Ìn¸¹ ,¢`èG޾H³ã¿=;ñVÑGˆþððGîÆÔÙñÏ]]m}ÁÏØìÂEé¹+ñðG[D.{¸Óg¤–¯p=øéæ¨èÏP{Vk´ìÕѬ#ŠKóÃemøÛ£Ê•þV·ßQE¿o\ÓG«ú©Ó§€Û ÿô=N£ìˆþÑ*üöÙ̹ù5 ù)ÓgÙ)­lþbõd}×ô¡6{˜) WÙØüš4·¿*Û1˜÷~‘ðþdGOmÞTß|ÒmôðïãTާA_'†¨%¯[éd%ôüYáöâÑöèÝàwk~€]C¯s••u§eÜ·L3ûgù3¿‚zÓÇ^±²’âµÇôÙ£¿z,%ºmrרzdsÅü»aý~ùXX_é²ÐÏÜFÒIv?³5Á¯w,þb¬‘?ª|œÃïÚüyŒh~Ârй“Þ îFøs×§eÙ;=Ï×sÖï¯?r~ûJîè¹ò¼U˜G6üû“ú§Iö—M¯só³wlúž±Ù^¯µ³)ø«+Ÿ²Ò¼ý˜¹>ÚÀýucèQâ/ö`­ÍÎÖÎ ÿèvÝß׳Ç^ùwÑîªMŠþº<‰ð—œûeÙ;ÀvWÀPw“•ù9våÓPð—WûÚ¢ó¾ë¯æ[Äë•£öcõ6‰(zG¸ô±:[åôùZÞw¬€ÂQÄ4Û6¹U&R_7ó³áov£ÒhÃÍÏ7fm£û%Dn~¶ñ²›Ý­Â{UÍÏ5X|Ã{…ä(ø‰ÌŸÇ<Öox§ü4æçÀ?®q“´?‘ù5â֡‚ŸÈüÞoMúþíQ‰ŸÊü¹÷[3×»?÷p¬ÄmþëõécàÏ©²ÇçÒ [ÐgÀŸú3¿Ç¥¶¢¯5~2óûkÙ&ðñkƒ üÝÍ¿ìB>/ wÝÖùø]˜_±-\'øø]$?þa7øÆ{Þ÷»(v¹xð_w¦ÏßÉ.WÒ[:›u%¥.|®Û6¸|•ç~'eO\eÅoOe¾–­+|~ü¹3üÙlL³ˆ÷;°3ãw³ËńߨñÇnð«0ñG¾ñœ7¼ÅEÜ3øÙ,ûƒ1Íwá?poþòž$ •OTW+¶RÇTžsø)÷duκ~[«w?ÕêÇëÿÔê‡?×êK4üÇ:ëñ_ÖêÝOÿ«ûïÇë×ꇵ:FÀŸ:Ïž;IT·×…çþ˜N:²u%þî¯5ÿOÿuï~͈?"íæ„û ÿœ?ZöûÇ?ð“=âþøiÍ_¹Gƒ—ý9#~ï;”xîgßsà‡Ë~ïøS?Ù#<©og#Ù_‡?gÁ/îOýddÿü/Ù#î¯+}rü[Ÿý“Ò'§ÎžÊc‰€îçéeKnþjüxÙÏ‚ŸúxOT(÷W·½ÔÙ³ ?^ö³\\J^ô’ì×ýï ü‡?yÝS=€î׉?_‚.ûu:ðŸ>ôeg0îß\ü!Ôý•×zãÿùH6Ëðùì¿ö€_·s¿ÿìçÀÑwì­¾Ù2¤û½‡?~¸ìOýãÏ= bV}P Ïý,øßã–ýcüQ”Šûoð§þñx.ûð›ìñ°ÁEAœíJ9ðÇ&ÙÊýÞ³¿À?ðœ=>ö´+k[L÷{Ç?¦Ÿd5~°ìûÇoEøÓÜÏ„ßCú¤:€ìOSïmoq×úIŽAìõjÿU¿ÖÒ§?àñþmÂ/î/ ròôiå~Žs½,‡;™ðo½û'÷ë!OÉþåÑφëÝ?=L>’ýµ‡Â¨wöqÿxà9úcí%}É~.üÔé#î¯)|¸ðãõóñ~´YûIŸTÜ¿¼å¥ïß•Jö×á×øÅýÚSú¤!eÿ²p>äé–û½ÐŸï~À6û}á¿=iÒô÷ãᇭû ü ÃP“â§MŸÝ¿pº½.òÃnU%Üæ3“Xü‹·  ÅOZûx®¨;n£ð/^ëLiÿàð+øç.y þþªpã§KŸqþ%7àp\ö,Äeú„€¿r%ª{*ðSÚ_ðWâמß`ñ~«ÂOhÿ`ñkJ÷Çwñ6`ÑBů·¿×-´j„/ºôü ðÓÙ_ðWàµ/û þ†ø°l8¤zŒ#²kËüdöü ø«.õüÞ ÿ*üT¯÷‘rðñWs¢…_úøÝ>—á'²¿à¿‹É n4öü ñÓØÿ|—oüKçƒÄþèø}ožÑr£R B/}|ã_>~'Mú ã×(øIºœ ã G û£·½@³GblüP'…ý±Û^(üÅvø¡æ† öÇÆöO?§ý¡ñƒmšöGÆ—ŒîÏú"‡?ܼ¹?ë oŽœÛ8}g͹ýñn˜Îã?d.ºn}qßjÎîOìŒ_âwnØôÁœ±±cþ°øA7KÇwÓ@MØTtkXü°m’[þ éƒ[»Ðå„­ÈÇfú@ŒrÉsA±Ï¹ŒŸTðsÆâ’‚ws?ˆ‹ ßýÑ]ü öuÃïúîÎþ) ¹Ðñ;Œ¼¾n\pï.~ð6„¡†œUŸx›z£ü¹Š´¥ cŒKgñþiøÅšÛ‚ÈwüÇh}‰Áï*~Àðt8öw+lÓ`ð;ЍÍ=˜ì™ÄþPøÃ1¿«øGZä4$ünâhƒ§ž•n½Ü*íŸnå¨çÄ1~7ñ“>5¼7ñ3Ø”¥‡ß û‡Õð:k~A\ ùÝðÁ?ÐÛÉcÁÓ0ñ;8ú€`æìQŒüŒÇ<ŠÑÿéü*Ýàé3WÿóÛŸ;ÿ”æäŸn¹ù»âïxø‡ÿ lüùs/~:þއŸyíÏÀAiVþ¼öçßñPš—ºÕæwrò.ü9í°×­43ÿt›Íïþ|öG8䤴;þƒ ìqžEinþ\ö‡8Я´Kþi@ö‡8Ù¦Ü-N[þ<6Ä8צ.PKþ þÛ4Ç­mÁÇ>þ;ë`ÿUpà†ÿN •+OÔ¯À›26°Bœ©¹ 2œ+V@ýñŠPècâ_Xƒ…°t_aœDEÍ·ÊKv–ƒbŽq3˜A_ÒFÒâƒé*¸Ë? ~øW­€4 “}0øW´ih‘.þ…µ0Ð+xüZ ~6ü-øÙð‡?lüZ ~6ü-øùðk-øE‚_ð‹¿à þ`”õŒd°Éâ ‚kÓG²GðooúÁ¿µé#Ù#øE"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"xýÿÿârõä äÿÿ”SÏoE¶U!‹ðÃ. HôI•¨‹\;Ž]ò£­­¦M[_¢–8`ãõØ^ðî8û£NJÔSÅ)WŠ‚,¸rè? A9T¨^鉠Tµ*°ëVÞ•×;Ììxí:"Ý•½óí{o¾7ïûv!71Éd2ö䊑s:T‰Z¤ƒQÁlMj ™ªõ`M#e ) ë ÕÐHµŠ‹PXõ‚²ªÈ{QG†TÁš(’5Øë’¾Ð©Å(«65GYé‰ÜçŒÿdbš³I25™Ñã«X5ôØ 8òZã¨<êu%! tƒÔj£&¤*ÒuP°Q!Eàåñ‹S˜‚\ "¦Ê ó‘ü ˜õó~âl,É_pÊ)N ‹¼ùùQåéñÒas¹Š<¤å-‰ñ5,*‘OZ—Y²ihp©„% rÈLc0 B*ç@¬“ϳZ ³lÍ*76Û*2°Då“B âº' ãÀ˜×dê‚ÊT¹G ¸D4<®ÓRáªLL½ºýßx­èPá®#\UY©U±ÂfÏN.«ÃÜ;ÌA"K ”H¦„‡§c©œc3á›ð â«C•ÃPbF&uÏx"ŠX!lös-›Sél'Ñ”>šÚœÏ)5ø^¾³AÊÌX‹j¶c cƒÕ ²‚|éDÄÔ¹Ñ5Y2NƳŽ1ÑQR4ÅiG!Á™ð9#|C¯cX®ç=Åa Žïða‘ç2 Êž²!£ª¯ÔóÙ=æ“i™ä#¥âÙt>ÿî•Ü…ìûQ¨1ΦkÇ£ xà–ó‚‰OàYûÿw<ãvæ`17± Ó³±)à÷²ßÌ ÿ—”‰…lüü•ãÙø‡— qfñb‚ÝâJÏ‚¡™8þ3Ç\ü2$OÅ>8 È^˜ n p”.‹ZPx„þ¤ÝFh6»Ï m2Bíí3“C´{i&ä«Vn[w®/oþÌÑn ð²ÕØû>³ç¾¢©õ«Õ¸u“îõ¯m^£ô‘µ¹~“%±Ê§”Þ·vœI»É—ÚíÝqvC& ?å™-·I? ¼äH^ÌyÒì÷ÚȶÛ<æ(wÝ/_ïÙß=ôP°a÷Þ²ŽTÿâèšÝè|[ÿ=øê+…œFór«ýÍ”îXGÝÆþ™f¦eoeè=k^~´Ö]oé[à=‹R kÓaÚ LZ´Ýu÷éí»ìPG,ê.9nnüÁÐm–wݽÑS¢îJ—&|ô]éºÈGû´&9dÑŽ+}íüâia¹™Î“ò}ûFFdnØ­ÕþI íÓ°ÓI dS‡†ût¾¢®û©½Óèíuwm©³ùX ÿÿârõä äÿÿ-ŒK‚0Eç]Åê€*MJ‚cMÞˆ}bM?¤ãòµâè~rrZ›óGеÞËšf 2«îÅ!Ã$ûMŒ)©÷Þ†6àÂÉažÊÊÆ‚úhfÇkzŠjUS­Ê©•Æo*©%N¸E?:Î ~÷¥¦#qZIùôendstream endobj 264 0 obj 6013 endobj 265 0 obj<>/Dur 10/Trans<>>>>>endobj 266 0 obj<>stream xÚ¤VËoGw„ª¨é#‡^Z!•¯Ráø‘w$â‘€«*¡ª²)ÝìŽí…}8³»—’ˆê‰k©¨¢öÚ‡þPq@´\Ë©©‚ˆP¡MPÖŠ³Óovã¤^‚‰é8žø›ùæ{ü¾ÇÌtS"ÖÛ 8uáÔÓ4 üt÷wC_WP™¦¤·”„Îþ'iM‡Óx,‹›‹$ /Ö é 2÷âÙ´99z$‡–Wmé3M hO&¸Ð*5(äD]V ­Þ1í)Ü«^ƒ ÏS"Ê *: niEØ+iòÁã飩ÑÁྔ3´¼Ç2PÃ@®Â´Œ<ä©!ÓTôl” è„S"-Ù9IVÀŒØºjyuâHí¶lªsQ¶$D¸Bihýød*Ýú2“²ÄQ©²h‰Áý‚Hu!ž¦Ô “pŠz2ÕD !ìéÂ1AÐÃBÛ¦5h,zåã6ÿLˆ‚¼OhsŸ‰á¯øÀ60£ùyBCŽÂ^ÍÌ mq%‰D‡Ðö2GÝ´DU-€¡0sFÅ7KÑ‚iñ<ÀÃçˆnµz¼B$tðtÕŠÊ£¸|p:¢AAPc´ÀAx ¤ÆêRˆñ_!7_Æ—êÆœ¬$@} ¥©ŠB¬¯:\l £4%Jgkë«¡úB]¡ žÒž8Ä]žôÓ Sw`Ë>Eç ¾c™AëöžžHL¶Ú%Q—ˆ:PC%"VKþU±¸ý_yJIž`ê`uæi¥ÀjF1¨n£Š_hîóU-+f^‹XÕï’Y²]‡‚Ö‰m>5lê×:„[ý…Ö0(&P[×±åÆp9ì< è¢oXð~uµwtñt›Uò#bƒÓ]&t? “Yì¨Û'Á}]Å‚‚‚Èçäl±€×\º¯÷”AÏ¢Y'X9’M)ŠãwÄ"YQÀà${÷#3J©¶¯+Uù‚à1äá¦x:sâ9\20‰Ñ&jç½6hë…œ¢’(˜†wlÚV¤³jtÃ"ûkD#Ëμï?M #cQ•ÊbñƒÚÙ¸M˜ž“P­ö‚ öyDØæ¸«ˆ>zá5@-M#“!ŒÑD)‡w´ÑLì `Šb=EV1OÞº@C̶¬ª (ÿØNÑ5 ò¼Ôx‚ñ,ÆÜc0¢`ŠTáV}t³Ô@¤yÍz¬ôÕ8Y-(ê•Î3f,÷’}<ñy ·«ýÙQ_‚+Œ×¯éÇÚ€,¾/ Ä^Ð(Æ-¯ñIgê­èƒ5Äù†½2$;{pîîèĹ¿Þs_Ï\L?—’ìê‰uCo¯§Ø{‡€Ì±×y'ÈRQÓ¼êp‚Plþxô€ñY5C¶U²¡o:úb ï©Þÿ»ú»qFÉ8ó'{*~d|"žŠrì0$ $ñãÁÉx ,j“ø)ô­?~:»ã‡OÁêhsC¡=lc8Ì 56oQ°Õ¿·¨¶¸úê–±E-ßúah÷&5¬w°ÿZj`·œ;—§¯ýÄ©ùPèugnỡ÷ÝFöˆ9¿8s7®³…õK7Co1öع6{™ðä3Æ8wË»K‹ü§GͯÝ)Ï7Ú¬ùç\rÙç¡×Ê’·W~º¸¾¶,–JË|¯¬Ýs/¼½Vúö‘G5Ì•ÖÞsv©rêRinå›Âo o¾Á©ÆòÜâ÷Æå¯ßa쮳Ç{r`qh©tsˆÝwfÙñÇ3«³KæÍPÃ}‡1`3±‡Íl)´Ûaë—]÷ »}Úå0w¬ì®±+¿#u9㮻®Îù(±+îùU–¬P¿²ó«®X¡ž°¼TÞ ¶âJ_•öbá¸C+O³JW‡|Î+¥¥FgùGŸZc묹¼ÒéS%VfÍëMŸú’¹îéÒÝŸzÖ[¹öOý ÿÿârõä äÿÿs á2P0PIÑ0Ò3ÑSpTHÎÏ-ÈI-IUH­H±4C²¸L !j A\×®@.N¦aendstream endobj 267 0 obj 1561 endobj 268 0 obj<>/Dur 10/Trans<>>>>>endobj 269 0 obj<>stream xÚLÑÏOÓ`ð6„4Ö=xÑ,‘÷/ +clKM†;a”ă1Jä"Á ‰$š-œˆ§]ÅŒ4põÀÁ?€™ˆaÊUNΌЙ¶Ò÷Mß¾ïÛ‚ó}Û§ï§Ï·iÚ·¤&3iÄË0/#YTžGI>Ó¹4Ê¡òz®Ñ-¥FÄQ\Pó3êÄŒZBCÙÁdÔˉ+?3QE¢ ?|¬ô“ydŒNÜ3øŒÇؽ€^•—çôGÈHæô)”Jëùûãü…»*0I€‹KŠÖÓOðÿôÔÛÿOÍÅžÜæG3ñOíÉ̘,VŽ M¼·VªjKÒlu6Í»¥À1à¯ØÚÙ†N¸Ú®œàzu›‡ø“g‡¸EÄËHí`¶•eÐÎDÒa6<“úi1êÑS; ÜYB\Ñ£ ûìÍ€lG’-ÜÆ}/~ ­Ëûðú»|íªB-{kqÇ} …˜ÕµM‡4L8ÀU˜:©øUg©!ÉAå7iàH ác]ØÝçÕ‡MS@í×.OêŒy°nÅ jlÅãRß`Åg³—êÂË"½ßÑ/Ñ^`fz§ó‡dÝŒ“5â(Øý+€4ê¥b  …GK±ÞcOIË‹u§Ê*Ó^ýo¬sÿÿârõä äÿÿEŒÍ Â0Ãï}Šõ°Úêô¨0Ï }aÿÖJ?FíÄÇßê/I~!䤘àBà/É`sÞãuG-w|‹¶PzÕ½)dèdgÇ¢I½÷6Ø€ %‡ñU(?ËÔG=:Z«'«–£ê÷TËRÊFâ‹ —GÜ¢e}ú’ʦSìÊ&8“Ó^endstream endobj 270 0 obj 634 endobj 271 0 obj<>/Dur 10/Trans<>>>>>endobj 272 0 obj<>stream xÚ¥XÛnÛ8}ÏWð1ÕºùÒ·hû¸»ö%@AS#›­n%)»þû!EÝb;6 ÜD’g†3çÌø×Ã"X¥ ?üX®™Ú±þK7)['SÀò‡Ð> Y¼¤Q>|yÁe |Øà²ß6,\1{ÉÑz‡ôköìë*ÃdÅ20\^~<|ü¶fá™>G ¾ì¥fbÏ -µPr º[£Y3·pÓ-|´ÛN7{dǽ{fö€çUg­0²®˜¨Û"cUmX£êƒÌ è7K‚¤Ã'ÁÒAö/7bH¸1¤5 /âÚ´e$XœœýbŒ:ª”dl{bÒèÎî1×Û ÌŃö¹ewÔ`ün )¤)NØþD»¡…Au¥ÂÔŠáOÁ)´ ÄÑŸÆJ0û:Óû£1xR?á–F‹¼Wð«• ªûó Œ‘ÕŽmAðV…þ4±çÀ•\×ßœ·…a^´ ƒÎÖÅò3«ÚrK s¶å¸[wxçx}ì¢è½²¢&/ŠyN˜S3?Èn~¼pÅÛneŒ.Øöôzµ6xùøÔåhCùE/¾¾)Š¿ÿ ÿY𮂳ë þŽüsÆÔ8Û$‚pdŒõ³4IðžÛV…,¥lf.hý©‡èž²ëÈ¢¥G†åú2kë Æˆlˆ4b c‡Ql§±x-[.~²¼­\EšSs÷PÿÄ;•˜gKH Tú:òÅ1]\Œi²ébšÁ¶ÝM!Ű1>ɯBJÖë›!9ÛóV©‡¤Å‘Ï×Qâ=1¬¹¼-(œX¼•‘9Öv•!b®:"ì–]¿ÜÜÞÚžŸ.ø’ÿþ.¶ßMy! Œ,¡n ÑLÿ é9”jQ2ë…cNn\†H¢=9Žb¶ ®»•.nwËÚžw+^9·%ë©GôDIsº æfÖö<Œpí`(À›V¼šgyÁw¬¡ 9R®@Sì|ˆ¯×TF·£´¶gQÆ›GÙŸADEBUF9Çëå&Ó¦nãs(zžK¥MǨ\$ܯMDÛøÉ 7vUC~Š›ÕžÅ½"<÷‰ çÒP·T$x%°Î1Þq3»/ÆÍo*ßh6&%ÒØÁf& ®EAØI ¸rÔ<>ç fãb2ðùæ'¯•o{^?\½²x(Û$~çÊâQÙÆ–ÀÁ‹}£`gÏuUœþ·ÈÄñúf‘q¶ïˆL¥^dˆFf¬O¨+(8æA 40 ªàV~^1Ou‹'í-ûØRPðqÕ÷ÞÖ8‰¨9š™õ¹yÑóðŽâ /ï0‡Ë._Pø™¥Ù3tGÉ.‚åâ馱g™$^Fš:ù]ÛÇ@Ôý™Ó7ü͸ü§ñ½d•›ú‰ãar¹k÷[_C”Fd1+al­Õh×À¸/M­‚â;˜N—ßÞî•ÑA_̧û§Q´Viÿ­dgÒàp†NhŽje14+ºÝ T?=y‡ñô<¬8ïÇqÁïA3MÛXf5}áЀ¹Óú©hvNo|÷xm}[†Azß|½¤†Ù.»–ÕÖÀš&3[×[w­µ¬?MQ\—š$ºùlkzæì Mv­sžMA òœ9å€ëߌʚ^@µqU¾¸ü5Îûîu˜v€þzø¶wcendstream endobj 273 0 obj 1555 endobj 274 0 obj<>/Dur 10/Trans<>>>>>endobj 275 0 obj<>stream xÚ¬XÝoÕ_ !«.à‡¾E*W)TkÉñÎîì—]°•Ð$X*M»¢‹àîÌ]ïùØÌÌz½P%â õ)¯¥Jeµ¯<ðÐ?€Ty@ˆ¯ä©©‚°l ò¬¼žË¹÷ÎìΌמµ`½ï½sîs~çüÎ=g®MIs•‚K.å*²×¥ùª È&¨1•çSy$—ÙW1¦Î­Â2 &X–»PEy ­6Œ*ò^Mƒ¡(—CîB}(Ê…J^öBt¼&C†¦†w9ÂÐXxGSVYp'hÊi©[,dK;M #›ã‹$- v¬eÏ®¬üùÅ˫˗þ$0øZëÄf‰Ë…uÒ‰å oë‰8Mó ¨]>šÚ%Aí¨‘€$ŠeªÙífsÇ‚jÂt›“]ØÏM‡¨=VÝRU[]!;ZÝŠ4w0÷NhÓQ rÝ6MÍ\cTœJ²H¤5ɦs†Ìϯ, `MËJ¥ÂØ,²),+‰ãØÑÖ Éžˆf%ù¾“åtš• ÒP•ÃT™]Eâ>`郇lðUjùâøªrÙ‘ªFP“òœpàž³â|ilE„l fÅ*6o &5£m lXm8`­FPMX¥æè¡îñºWÊãëÎeGrµX–™‚!wœÙml²$ÖEÚËùn3‡'Ú³ªª‰Wzwv؃غֆL¸±|jX*o™‘ÚfÕ©§¦'…®5/X'1±4ð¹XÄ‹°Lzcžp•±ä8·põºÃç;HœüUKÜGOsï¼$äÎ,&Ñdë’xÖ²§¯†˜ -” ÖÒé×ÁÆñ§°HiYÐi Ò*ô`aí1k˜.:ýG ™òËÃ<Ì:5?ÌÆ—‰ÏåK+ËYX€øo°AËg”ZÍ< ˆY°‹˜{ºsØF¥j³r&0 ¸~ ’ïœÄß„²œÌ_±UØ•½]Î=¿òrn9wåâ9”öü…<ü‰Ïâ+¹et$¹—À}ó¹à¸Ï»ü<Ê£å?LQ?“yŠz™ÉéáèÿtïÛáèÝÚ‹ŒîXÃÑÎw—N F÷/V'دí zÇûèík·þËF÷3™_x›þµôÀÿõ$ý’z{›ï¿G¼u;ó8¥_{·n¼B°òJ?÷îöOõ¶ØO>º¿ÿQÿþd›NÿÀ$·ý-úZæÑ¾Âïõ¿ß:ØßÁ½Þ»×7>õß|b¿÷Ï/ùhb³·ÿ¤÷ˆþ½ÕÛÜýG糉Ç~ÉF“ýÍ­[ïïüýW”Þõžò7>»µ´Ý»½Dïy7è __ß»±íÜÎLÜó(Eôú7ô‹iº9åу·}ÿ!ýàS0êú—úþ>½ù?}’9ßߥïl ”èMcæÃÑ'tcÏÇáè!m)ý`äÑ]_ù[ÿCî Ï_Úý~íóÞ;KBòfo{ÒÛùíÓ:ÝߕŨGûtúà GŒþJ}ÿÕÞÝ]1úÍ ÿú¥Ý[߉Ñÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I†f ASXÀXªhTJjIbfHkW ÓžW›endstream endobj 276 0 obj 2205 endobj 277 0 obj<>/Dur 10/Trans<>>>>>endobj 278 0 obj<>stream xÚ¤WÍoǧBÕzia ™CÑʽER”ÚÄBËŽ.u«‚²p‡»Cr¢ÝzfW›ÖFNAO¾6… ¡½öCÿ€¸ð!(â6׿T"[©J ¢8}ofw)RR* ¢@éí¼™y¿÷{ooÏÌ;Õ ¯2|-.Ù$óð©,WÈRyHF3Eó¨HJ‹øë3WÖaÛ<<̾`[áÚ2)–2Yo€vµTvªdÝ›+9 ¹Q¹ hH›,`atqýõ™Âµ%Rœ·ê—ʨüšˆA©KZt“‘Ž=&™Gh]ĉZŒ¸"T‘ŒÝHHâRßW„‡fmÑ í3…º›Ì!?V1,wó„G„ÃSÒÂ#/3é“HRG\ÀFA"ºÁа ¸€ÐÐ# ŽgæXaí¦c«¸Ýö9S?°NÌ“%§”z1g KìZ1]›ûN‡Fn‹Éç'6Í­nB8.]æ¢6×ðž¿\«}ÿæúÕµå‰[Gé»èfºµ‹?<#h/€É¢&ÆR±<Ø Ão[(Åë>Ä‘G­Äžåd¯½uü¼¹Ä[ˆ–"æû¹a0¢±t!;îûD1F‡€ó‡üœçlWxŒø|ÃÄu,â áû¢ÃÃæÙñüÿcôj‹FßS€¸‡ˆp…¬Cvi¨:Lb¬Œ3]0FçòÆYŒ$‰Í¢ÇÈÉÑàSÌo8d­acGC€±Ç›ë2e ˆOagÞ¨º4$ ‰5 õ.‰Zîú”µ„—⯞XU_+x¤]ÆÅjÙY"&„S®äm„=.¬ž(àW®ã_R©T l;â2Èû›§¨«[.WÅcÊÀ £H•H¥¼`yr+ •ªÍÕ.ŽÛ—Ö58§ÉUdJ?ÝñÅF—Ïo´Ñ=Åh0u¡42UÆa?ii[ŠMî¡¥gaå¡Í©¡¶ÚÜXJ€ @ 9‡¤ýž«ç÷ÄèžîÉ|yä ÷|vÒ Ñh µ#',˜h qÜ5‰úÌGɨ×Eú¬0¹ ‰ªUŒ¼ö˜O»ø¨œ7±:Ú’ ÉÏÔ‡¡¼¼tî0XÝSÂÇT“0`±§e™'4ŽD@#îëG&Y)·™lXÎÃ’©Ø²n¤ „A„ÝÈr >” "ÎBwœý€µÑ0s8Á%ÈLæÃ8 ÑŒl"|¸fRµí»]gÌ4C8ƒ¤úNFSÙ~ FðE;‚—òÂ(í0¶;]w’á3#®ÆÒbÒêæÅ˜!©,i³Vè-x;™ð0sn4ᙃiÌŠžBƒ± dA¨êmÐa Ní£H è:yÍNPyˆ¤L_ ò @!š›˜RÀÐ.÷ „CS¿poŠÃAú$Ðl€ ›Ö­o[Pð^%@Ç›ŒÛ‚yÆå‘EDâH‚—‰øä¡p±~º¦˜F½g²#Ù‰†< ü70‡’·ûj3y…ñjÜþêÖñîDZÁ·…Œì ´áªÐ€Q™h'®8éEËxO±¼èTHe±}î0ý„x’#ÝÃÜÔ”4 °Bû*f‡Z¤ŽÕ´Úc J n“…%gÞ¼z.›™ ßÕ*Îø ºVxñæO k…W®_!ÅçV¯ác.ÿ´°oy1+¼ þ/^"¥JáÊË/ÂìÚÕ=ÌåžÕÉOO÷rÓ³#éúàß#é‰Þ98&=#iïáV.dÒãëÕËSøßî”~Ø{ÿ­Û÷ÿ„Òã\î˽í'¿[y2üæ´þD÷þÒÛ~÷ýäè͹¯iýiïþÝw@ v~®õG½Gƒ ýü×Hß<žŽõì稹;ÜÑ?Ë}iàšµÁg;G‡{´ßßõAðÁð¯öû‰‘¦¶û‡ßê=ãÿ¥7ûÛû¿éümê«_Aiz°½ó{ñîÞ¯¿¡õ£Þ³Ãí§Ïí¬ìö¬è{wõKŸÞ9¸»«ä¦>ìiMôégõnîBO½5>Õï}N=ÓÓÃ᡾÷wÞÍÂp¸¯ßÞ¶QÒ÷†[º˜JÕ[CšJOuÛ$ROïÝ_ þlrÑ®ìÖü¨ÿöŠÕ¼×ßîíýÑJ‡úHÏöKVêëž=úXYéz8¼Õ´o¥oßÞ¹±ÿ?Vú/ÿÿârõä äÿÿs á2P0PIÑ0Ö3ÒSðOÊJM.QÈMÌKLOÍMÍ+Ñ Éâ254†(14q]C¸¹pãendstream endobj 279 0 obj 2072 endobj 280 0 obj<>/Dur 10/Trans<>>>>>endobj 281 0 obj<>stream xÚìÝÏkãhšpSn˜:«“oBt—¯SéªrW7 KHMj·oÁ¶X/ËBÃ2½§-ȰKÝÌ^ ‚€˜ËÀj˜èOØs !ÂÞs(]ÊÒdüþ û¼¯dE¶%ë}õÛ¯ž7Ž#).GõñãïûJ–å«ç§¿y7Òáê-\}÷½þ‡×OákôÃHÿþíký¿×~þ-[ô­þæ;zù·ÿx~>}~1}~¥FðÙ/ß¼{ý›7ptêXFoôã«÷“yõã«ñ?œëß¾ýíiÔ>|8=}ÿ®ßþ×ß¿;‡ëów>¼‹¾h nûÝw¯aú»woN?„¿ù¾>|8?ýá”ÝìÃßÿë«õÿüÃýþÕ?éï¾ýîÕ?êo¿ûêüò½þVÿñwÏ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÃ&e[̓Ÿ.ßÍ]UU5Tã€ÚšÒ\Â.B *Ã%›gk鳨öšŸúDÈ€Mk‡µ„eH™Ö®æU%W 뺟`JÛÔö¡ZN©[dNëëÈJS‰«Á«$R^*äìg¶LÛ(S":Ëæ‡†î¡ÆlN6x*»TY;Pˇ;9™“Õ”÷ÊÝUžçËdNq›Ç#RÎÛ¿¹(š–Ëî~.ÏóönØ&(ÏÉ\]EÊ«§‘\î:Eæ}¸Õ€J 3 _ƒ©PÙ-¹Í™í»êØ0š¹‚ºh‰b1g¹…㕳·¹ç…c##oÕ's ÈXÌ9Ú rJ•nv|ŸŠ¢a1g+»;¬9̰˜9ˆÜ¢d¨ÌQÒî¼àÓ#c«±×Uá{¥ÎÉJc;šÝZÔò=°ÅÂÀª­TM…Mh¸¦;@w”ó•%*ÇÓAcÎrE¢ùWdsL*—áüU¤L÷ ©E½Py ™Uò :,cO9g?†ÝßNb°ž/–ÛÊ*—ÓûÆšœËyµPyG™!WÞch¨\B¬VU5w~Eª®ªÅ•sc¡rƶý¢ýF*—Ôöryڑߊ¦¶xhì{è |·ÉþhNì,ùTxÛ•ëØ‚Ã÷™ÔÑ…¡r-ìüª |ÇT=Êx€m-[¨\°””ÒÚ TNU6Jk¨œ¨ŒÊ²Œ0P•eÇ¡2*˲á‡Ê¨ŒÊ¨Ì¿•Q•Q¹íÊ·ðýx‡Ê[íë’•=®,•+U&  ÆVWrÙÊÓ~‰Ê¿rÊ›6)ª|{MÍ;òhy›!·U¶X9£rÐÆ•½;ïÎV“ÚÒøBåÝvZP†Ö-¦ÊÁ e¤ÊwW~­ôàú\9+ÊÉ{ݸTøNôž¨2N@dÊtÆ4M‹Í²ïN 1R”''†>dף˾¡+Æfo`ö¼ŸCùÑŠ+³oT6  =ƒËò& Å ³ÓáôÄ€‹¸r”¨¼Õå )´~¡òøÄ_Œƒi±\¶ˆeF¹ 3·wDÊ\W†ÌÐûh¨<ícšÎЍ²g²F Lg‚ò1r(Ÿ÷ζ•¡°ß°iññò-d†éÁ`f  éTW”Ù¡œÉÊÓÞˆ*1å³áKãòyIûä~aùrìèï”ÞïËå!l_o”ÇφÆÆqç%)K·#]YÕRÇp9…,m”§ÊȘ(/…Ç©ÍêÆ¦}ã¥úwÉcŒÞTï`‹¤e}>`fú­(ÃTeû`ƒÃä^+Ùö/k EÌÞIœZËSýdÜ»0Nwª ƒЉrr ÷óm›mÚÑ­;Ò¹¦í”°›*ùµê¼¿u¬¹[eóÖ*xEʶp£Ïì¨òÎ[Ê4RÉë~¾½Ù¸îTp¸ã<{>ó¼ºêƒE¦€²lÇßs~´ƒhbÌ¢ZŽ””ÄHŠ ÙŠÙ%•ÔòNb°ŽÏP&¦´¥\Ö9 (Ì`¤M£tÓz¿äÈ*3TRrZKÉ¥({’æ©ú\/É[%)‘!Q1k•)CN˜ C<eOÖRnê\‰‘!M¨µZY’Ìp9Ü7Ê<ç–üUÞ3P&G†$™¡ñ+ç}ÔøZвÅì– µ?,i޼Ŭq/äUÖP¹re·te "Ã-7[wÇ-GÙ“³”RNëþ޾˜]!|®XÎÿQ¨Ü¨²'e`ùà95ÿÇu¥*y1»¥oZ7ÿ?•UYËñ›&”=)K¹HdT¡|ÔÅìæ*óÊ”SÌÇ]Ì)¿˜Ýã)•ÝÜAíÊGnßxpPY¤Zµ6){²*»¨\y`4¡|`(w´‘á¬õ´;Ee!D·MÊž¬Êy¼4T­T7×V£|T‘ñIˆPËóü褲ŸŠm™i¤‚b®PÙ;eí N#å³K:ª{ó“FVsâÎEÊÔÕÄÑŠ”Û«{¥j+dµLÅ:'—TÀ\PÙ9Nå9¹&•~i®«Å‡)ŸÙ%U*·62À”®@™Ó)B‚‰+À¬‰å¶FFËjB.‹uQªÈD•ýhöH•dåjóHyþ4ƨ7áPö㞟 ¹9îZ¾šƒ´;¿bg‰<䄳Så¿AÖ}¯oü{Û!÷@ë¯mfës)Ë#Øö[Íó2Ž~SùÇ$Krïÿ/ñ—¾ãÛ´ª¥SŽöcäm:–SØùál}šPÉ7kª¼ÌÞÀ>"e7_,oÆ…|y’qçö’V°MÏ"G¯hF9©|4{ò?‘üÊ©±¡eß^Ê®L )'ÆÆ}Öû7ÝP.ö¾m‹X}ƒ\¾§t„!ËGöB¶[ì_«áÛR»ÏP¾!kßÐ^{¹Ž1P9‘:_9÷KºBÇ˶CäUÖZòÚá¶ßgNe•ó*Gû1T®N9Ú''™²Û’»÷ƒÞÙì_ÎV>ª`vÛy÷ŔͶ}ôW;•}’[Ù{ú;/À–_9gìçUö’ ¸5-“rZF4ÿ¹'ÚÑ*ï 2ÌCAʹ:¿=åÃÍÆFÕÊn]ÊYÕÚhlÈ¢ÌaØ`9K¢ÌU¨Í•s+•}"¨ÌËg¢r~e~¼f˜ÝV>Œ\ÊOf:•ó)‹í3QY ó{R:˜¨œCYxG³)¡²Û:åú™%Pα­a¢2oçòæzeªff툕½¼¥Lê~9KkãŸp”s¾ÈꡲˆrÞ¢´º®ì“”=É”Ý*•óc™Wv” <ñ-TæT.ò¼÷¤Rý>©G¹Æbî²²×eeG@©X9Z2)»mUöº«ì“Ú”kÍu[¹®ÌÐZ÷GåÂOy•kP®§˜ÝÖ=”¾QqeOe· e¯œ£í­N*ó*ç 1er‘Ñ:eXöÊyˈ%²[A)'¿‡•KV&å({Ò(sG†È8®¬7‹XSv„ª•óý&”½®)ûTa‘»QxÚ¯¸nU[d8bkÿßå¬}å¾QV»¬«˜ýfÖÞ“F™«˜R.RÌ-S<{-*WUÌ~Skï¡rkoI£ìŠ*WUÌ~skï«òÇ¢Åì r¸¥ð!t¤ÿæ^<åïý‚~n“ ‡MïwX9©ô‹õ*—ý­ÿÑe‚2=­3ûdúù3puOÂORrjWÖFr_¶•i Ó9Å IÏå¤Ìðê•éáéòveož@µ×òDÚ*QÊP™ŠþÌ.ÑvIÒ#13R¹2±o•פ剮 aÆÊKHˆHâ×0ÿ^ŸÀµ®(#-ì_”lû&t槯Â[TÞÍ ŸÔ Lìe’²_òéh܃uz …;ÂÕødªƒïÛI/-Gòí-úò1,ìÌÌð¾µ?WNhMôš0¦:- Z$e: 7;KÍå5\°­ÚäòºðfI?9+¦ ['}4¾€þîlD/Ê…¡”«œ¸#)3R÷Ö~r«L¯†aM@½œE*³é \%)/ÉÒ^CùÞÓˆ¾cT£üµzž /_ÂØMgÏ0Å(]ù!-0¶3# yoí¡Nû°ªP©¬&¦'´#aE*³é³¡‘XËë*½fF¯Be§eú¼bëtÙŸÐl¦[‰rÂþåæTä½µ×/Œñp<ŒjbüŒ– +’P™MŸ^¤äòöã Û~ÑÇèV <Õ_n”S6e3æÈR~xAJl!s:òÞÚ+›Þ;T,Y‘„ÊlZ1¸”£ýÕ(Ÿ½4"edÐgŸ1âP~PJU˜ §(Ÿ÷ζ•cc %\À¥¼»O®äÞïâ)—/àI¦a¬‘­î *“ù0ò¾ò}&ö.6‰qùl³t“Ël:[Ù¶·ö/Ê¥Œ1‹~q92.ÓÞÅYv-?(¥+õ ò~.C9ô6ÊåÝñŠd“ËtZÏÌå’_“JTÖ‡çÊÄÐ_N`}OŒ·ÆXèD¹˜ÒŒþÝ0EY© ýZ=øëݵ?ícZµe:fþ&(’P™MŸÛ |®Œô—Їôà1?§ÃzÖB¢À°¨Wc-C%«"kÏÊa܃Ñð› &`Su,=¥ƒºÑæð‹~ÓÊ9÷ƒ—žË,.T‘µ§å0ÕOƽ°&&t[.½¤C E naè½Ëo.ŽT¹ì1F˜Éj£G“<ÒqÅ/Õl•ä\ÏRÇËQǧ6©Lßaå8%kG4ˆ´§Ñ…ÚàÚ{ÅõdUŽ¿¥6ªüxG¼;9•·_åSkYûGóŽÜ^rKO¢CgMªütÞ?Ù”w÷Ú«u¬ý5¹ö,øb¶×ìË’Yy“O­~ía8á=RVªÌPv(múTôº_“Ê ÛÕjåkï±R½ ”é =CÏÃ%™râ«|j-Ê·^L9ø–UÙá{]»å(1äWöù^×.=—A׋r®¯É£¼¹ìNæ’×Þ4­H™Wƒ-xcX5*/à{f΢ùY°è²êR&û‡ñ¬ý,mñ,šXlÆËP±×¦ešl ¦šP¦ëd,bën³Y©ÊvÜ«¥Õ² _áýÏZ{Øö{¼k¢–[U±0%*<1ƒV–òS-³çâÁµ· }èIžõœ-†93áñ_˜¬°Mºš³•ŒWÅÃdEë¼Sø¦uÌ”á`ÒçæìðÚ{7ýÄ•aU˜IÓb³\åŒsŒh¢ko²'{ÊÁš³ò˜ÑoæÌ–d*oö/ר kf‚r&—\ËÇÑbµÌzºŠ³ „i5Êì‡r±WJr*Óë@™þ¬Wy+38c¶‡B³r˳ÍcÐ>e:ˆ‹j™%†Y¦röI‰4áZŽ%F¢‰Q»rØû-½.¿÷Ë>¿–+˜ËP›€6ô‹®´A'x{¿‚¯ú•´õTâHŽçüZZ¹kŸ=’k‡r‰[%<§ŠsKÞÂ^ÌŽã\/¥maó*N]û™iš‡·f;uÞ">e·‘µ—GÙi¯r‘óÉñX×¹yÏ੉¬½Òü¹K|×ø‡DN<ê•Ä#2÷ÉhN¡4ç¬mŸ²@1ÍY®ëRø;š€²…ÊU+—ô‘FYàᮈ²u ¥ÜFeîb6Q¹ÀŸq”ÍcŒV*s3û´®âÅlÉ£ìT Lß²àE`´S™»ÿ;–Ï÷ó[µ*[-¬²šK·åsW6þnåcù áV*»u)×õyØN £6åÚ>Û½•ʼ#æ¢Ê–LÊNuÊÞQ”rK•ÝZ”-™”sŒÉ¹•‹HÕWÊ-Uæ‹ ¯•…ÊÕ+›¤óÊ.÷SÞj^Ô¢ìTªìµ?/Z«ÌEÞxSk)wUÙ³P™32¼ÜUY3r ;˜óýe+oÂÖ,ƒ²×zäÖ*ó³•o¸P?r•@®AÙ©\Ùk;r •Wó ˜]ne‘åF[¡ìnMi.o÷g‰ï“h¹†³ ²†…;Ù|3ÛÜe5>õ‰SÖD”ù˜C®\9+’®æU%WšÄŸ`JÛÔ¶˜2³ÙrÓÊ+²ÒT(\øa•DÊ+AåLfÏ$¤«Ê4†U …€PibP\É®¨òaf¯ÁBnò Èå«P™â2à•+ª|ˆ¹Yãê‡rY÷¯(ï•»«<ÏTÞ‡K;œ¹Ñ°h…2QçñĈ”µÊ)ïèiºkPÎ:YËew?—癃Œ4»'èàpýÆ ¹Ês2WW‘òêi$—[™„o91[PÃmQ^ ¨ô2CÕèT¨ìRn_sÚu÷ŸØ…£–=‚ʹïþ©ˆQ¹Â»R)—̾mÛNY÷¾š?Uµ4±\P™3a?ºÀ½£rDì¤Ï¢rÁì'¯o×¥|\±œ[9%‰mT.Oy¯hS˜…”£Žï*§„E2s.e—âäRöË ‹$æ\‰¡m6²åéüÄ!lä‰#(iº[®ÛʶÈM2•Ùëªð½Rçd¥±Í.!±]s’( Ö›-t£Ì³´SVm¥j*/M¥;@C僛ØÇ˂ʾØ}fÝ7-^p+íÌ¿"Á1ÝUö±#ûæWáüU¤L_mU¥SöËGæW¾b•<ˆËàT¶dVvDoÉ“¬ç‹%†\ÊŸ…•mᇎ«÷#ŒU$—½£©ZŸ»‹Ê5æs¸•]UUãÊcŒãQvº(±PP¦¯«PÖÜùý©ºªÆ¡ÜêÀˆ?ã×Kâ/EjT 9¼SÞ£moû±=G©|¿¼±m²¶Ö¹ ÙQÝXvxïy~ïìÇ8 ÜÞÀX“µógBn  m®|m‡\»;¸•éöõvXÀǨ ÿaÇfi¼ôéÕ=¡äüÊNŽ?ȧ¼R;K>‘ÃÊí ÿ†æ2vØ•Ëi¿‚RfK¡—nQ™Ø7E”\Ïžj”[=޳—iÊÙ†y¸º¨äòš.¨2‰çr¶r®Š”[08^Úk(ß{Ñ÷[cŒL|Z]T^ßPi:^†¸XŠ);mR>’½žl+¶ýÖKNÆœX¨¼càTPÊ´¨BÙ:&e?ŽçWPÊ)ËË$v0‚ûÌ[®*—7Ð+»”+R¶ŽXù@Á:­R>æR>`é“f”] K9$¿”mÛ¨ÌYÌù"¯Bù¸#½f¥\DY“±”Ó8 IJm;¨ÌçÙ.åcŒ4O§ˆrgMÊRN-PŽ…”]9K9¹˜‹Œx uÒ*'Õme¿te‹ÈYÌiÏø%»ýÚ¶ÿÈq³ܱ,E)'™¦*ͶÿÄq+~eKeŸ;08•2•MBä,æbÊÿœ_Ù•6/ÈþN1å?•©ly˜ËT6ò+k—ò®kú8ŽOÙ(QÙ’IÙo…²+o×·_ÌNSÊšÔy±S¿íQ¶$Sæ;%@µÊ®ì¥g>°£ZåÝRö,"/sSÊn#æ–(KмaT“¿UÖº27¤ìv9`.!1¦}ñÄp;ƒÌ˜âÊ“ÊZw)s ÊcqeµKȇÏÇ«|*¬Ü1äƒÌ ÊÓ×}ã½>Q |­ô`^WFcE9y¯ŠÒ7`ÑDïe*ÇCÙì2q|‘ýËc Ô•·Ð<1ô¡q:Ÿ—t™qºã‘¡ÎûÊñO62»`ÌÞ|*òê*ˆÊ…¡Ð‰³þôĘ(Á2cªƹKàrP¹{ÈÁYlAezóeüŒŽ”ÃeúÈxÉzBå°ò²×äp¸l‹+ÃNï_öcËΆÈÓ£/*«Ýê÷âØ{»Ù™Êç½³måñ³ÉȸìgŒ1"dÓì òÓ¦ßΡXtæ ò´wqÙ¿|[6í/ ºd’®¬ªb“t¨mm`Ç éäAeà„\†qÅÙf™¡ŸCA÷h˜¬¬†Æ#&ûØvÐzuX¹:pþ&R>ƒÁÅDy™<Æâðó˺FLRwc°£¿ÿ˜´GÇnSØéMõþHWÀùòÙùD…[ÚlÉ^SU³K9, ì$Ô2 !úpSýdÜ»˜(P¸SeÈSÊË–p'—ÒéÃñK7”ÊzIk´è=©^ÑNUvHcÊtmIõ’vÊN|¶ÕÝ òãñî¤WÚóYDùѼ#·×„ÜÒ]tæÑ¤Ê´-T.Kùš\{|1Ûköe¡rÉÊ0œð)+Uf(;”6}P¹å`‡Ñm Lgè– C—k¯¨Ó¼ò­S¾Q¹lå(1P¹ª\]/Êe¸z¼&òårÃÊt/s¤Ìv9³²1šV†Ú%צešl ¦P¹òm?ŠG/Ê )Ïvæ› 3²dû1*:~y›ZäQö$~WZÊ 6-¬,×þå2Ã\„ a.ÌÅbfÎLÜáñ‚t»•¥l†Ù×ô2[ÀL™¨œ1ȬåYÐá™`ËÄg°ÈDå’•fVË‘²‰Qv-ï$ëø°–³‚Y,—¡» &LšÑ4*@{¿r•ÓZÞ‘\g"£åœ[%¨œ.jšf•IѳCU³·•Q¹ÔÈ@åZ”žSPòÜHAåbŸ…á£*ÅF6*·CÙA¾ê•QY–È@eT–%2P¹eÈÕQ‘¨\*×Q̨\‡*×Q̨\äêðBåJŠy½DåJŠyëŽÊ•³³}#;¿ Šyë܉Ÿ ¹A岋ùoùë½íû¿À¯ÿœ®ÙÇÀ(»˜ÿÜC-ûKßñmòWgGK¹œbaªLs*ùfM•—XÊ%³½¤¹lÓSRÒ+šÑ±œFå\Å¼ÇæÛËte ŒÒ˜oÒ•±”KŠæ —ïéalç2*çm;§b¾!kßÐ^{¹Þc``”ÅìÜ/éfÈý ‹›íñ2–rû3ìpÛï3–r%=`L9¶•KßÒŽ¢ÄÁÀ¨¦ÜŒœk´ÙF§*˜…o‚­¨!"—Âl#r-Î"×1Ô°¹ÁØ@äêcÃFä bc ÚFãê j$®ƒ°aÆ 6lذaÆ 6lœíÿÿÿârõä äÿÿŒVMoGv„ª¨éG½´B*#NAJýAŠB*D”„,!@ÄjU•ŠŽw_Ûë]³3›à¶"â„zâZ**«½öÀ¡?*¨‚–k95UP#Th“”µâìô™õg’¶¶äì³;û~<Ï3ïd:7”N¦Ó¤óãIjî0ɤI®@ÒdìСä8ÉÙ#¹.¨â%‹TX%ð‰,ÁIÞ%Âðâ@îÂPjŽÆF¨%ØUs»x„P×Þi¹EÆ…OóܾW’ýk§v m·|–NXs`­*QÁóuR„.À<Ù3MÞÉTížÝ½RêêØ9q<¯B.ºÞ"×°Å ÷RÑsÏ¢.¡¶MJX†ÃÜ"ñ|||ÏÓË.€®gv›*g«¿d,sÕ(“±pÈüª˜š›èh–™0šÍ+½¸Šˆ}|WÝššžŸ=•ëëè=¢Ôíc—¹L0êô7ßöP«D΀ïê3šw ©Ã´ºeœ¸ž ej©‚Ån{ØðòP„œPÇjWãB(¢ð½*ØI2`&Ú˜0îS*6æBy•! …†9 x@§:Šéñ]^ ûŠQšä!6†ÉWcÒ­Žm(0ìs#çôÒàñ­”3¹ìû³;rÜÕCWíÊ–¦öQ²XbØml1ÑçV½².øJØmFb®b¸‡ÆŽ©:-µ eü¼I»CsX_Åa˜„á€";ø«3(y»õŸ=õ?p=Ü:n¯½ˆi,ê[éF•VP%ê+¢´ÊYdÃãªÛ(ÈÉí¡€ æ8]t' nnêÛp®‡>UMêy„Ùfµ<·ÀŠør™2$p-LXÄ=ûÐ ´‘°1ë¢4’Ð}ª<åü2ˆ’g÷ûë_EÀͱŽ£›çA¥¥Èþu8ìEÑÉ,ÊwdfêÔÌìÉ“³ÇþË“QÔ~VƒÉË+ºìSØÉ1銸î]iÚQ;²G‡n¦Á¢ׂ›!Êéý*"2ª¤öA>Þp±Í(R‚Y@Ov/plµ»cg±Êùúªè“R[&Î…‘ÊžÍ ìQì´jPU H-KùeQ{‰2¬‡ËTTŠ$™R1,Ô #ÆŒöäídÀY§ÂNúl”3m)wµJ;ÉNn1³#iH¯­ì3%žŒ‚Yíù—|ÒêÚÒtqµízj¯€«ÊÛëm›œ©á#ÀµMNL¿~•(W<ŸúUm`\„S÷³yæ¸ÄÑŠ¥´Íî’ôXÚ ÊtñoM8<#/‘ƒ‡ñT߉¤>(Éø¸úµÊCÓÙÔÌüG©lêìñi’92;—Á¯ùý8•Õ3-õ27‘:ÿ䤦ÏÌ É’Q"±OÆŸP†‰ÁáúMnüÕA+ru£ Ýõ:hýîw“{ÛhùøøÑuµ6 ï†÷¯]ºùƒBˉÄËamå›É•èÍAùD†?…µÛ·äÊÖÕ;‰×¤|Þ\º…‹ðÍR>4÷6VÕ¥FË›÷›Ëƒ~¡V®E«ò“ÄKMK?k>_ÝÚ\§ÆºzÖ,?Œ>{}³ñõjÍ·Â=Î ]mÔê_-þ2ðê+ 6k«ßz·×¿|CÊᾨöìÈêäZãΤ|.ÉO¯l,­ñ;‰G¡”D^ùSþ>,×{C¹u-ŠžÉ{±©=¡ŒN7£MyýWD÷pe*ŠêòFͰ$¯G—7d¦…~–—7"ÚBÏdÅjÆ(”õÈú¢ù£Ö"Œ&ëÏ‹7&ÍÊëµÁpý{ƒ6å–nÖÇ jȦÞúô¹Œ¢óuƒÞ^Š®œ®ßüÛ ÿÿârõä äÿÿ-ŒA‚0D÷=Å,uA¬‚[ܪɿ@µßRB‹©àùmÅÕd^fÞ‰ÄæÜàz¢T¹G]oAfÕ~8L0Ñ¥Ä+Ž6jï]°pWŽæwnSÇX¦~4óÀkêE±ˆŠ¿©l2T•Jìv²’¸Ü{~¤—Ú²O‚>/Dur 10/Trans<>>>>>endobj 284 0 obj<>stream xÚ”XÍoÇ—BÕ¦:ôÒÂ@3‘ X$~Ú‘TÛõ/N«Í!*œáîÜx?èýE¤°‘SГ¯MáBh¯=äÐ? .|Š¸Íµ9Å…ƒAâFªˆ„¨¾7³Ë%W+F¦jg÷Í›ßüÞï½y«;³™T¹Hà«_¥ ±›$?Åj‘T 9b3Ҙ͊[Y’/á¯bÌ^Zƒi¸9ü‚ié«’͵Ø– p¡.t¨«´˜M¬úÛLqI›:sˆÛ²-¯Ù‚¿šC—ºŒh†ÁT ®ô.ÑLGS9žëhæ±P •ü‰¡JÛïá»P5Á8ä¥É8J…“ã¶É”³’žX¬GÊ}Œ£¶ϳ¨3jÜ,ð8jÕ¢Pˆ ZÖ™”¸'Xê±RÙŒªKBD0QÃJç]»ÍânÏd'³R(žœaû}ÑÉË.¸vœ!¢3ê@&›lô(Á<4?h®tr Â6(¸É$Á¹ G…µØÅSޤYAÕ‡ …3ÒsˆŸ7â Aã#çÉЛ<É¢Sü4Y_ˆÖÇÃûòú¹q3£KÎt–E?¹´"³o=ÈÂ啳µkg×Ï]ŸÒ¶¡¤ù7ÂË¥6”¡Ôúº9½Ê™ÎÒŠæÜ’0cSå&³á&Ð6\ôìÕ_ß!baââ5Ïá: ZšÍÎBd Й ±ÉrŽtzlƒÙ]H 3¨ÅúaÃ%zhU0¿Øf#l®¦ë †u9v̰u‰7„´áŠf28MÙ&S< n¼‹·X¶e»8«3ñn"›í&tRÌTƒ’òlZ.܈­2Öiæ†u[èI–ãZ·ñ D%ˆîÊþU¼—À¡°ÁDõ’cè`Ï@" ЮÝy 9QD Ù daN&aCV‹ˆ¾œìDnX. Ã5\û"l¬é #¤vMjÈN_]q–&†ú½!tyøfƒÀÅ…D¨oŒ0ذÃ"¸õD9ˆ,Þ‹ñÙd. LW×¾Z¡¶  ö†E{×¶{~BµÑ-Š›R=x1RÛ¦MƒŽ§! I GïÃZš{¯M*St¤ÞO5Q*ËÃ|8Zœ´åÌdWAÔdëM±þcãœi(~ÒölhŒ†¯uÁÌ æ ëõ˜×±OØ@‘å8²‹L•zp¦ŽW'ïL°=ò9âµYSs`MÐB¨›çñ¬ý2œ·üú޻ð<Î:Ô6ɼ¨”B»ó  &ʆ‹¬Ÿ[$ó‘ÄM«#jñ…çÛ|GJLÖ‰¥à°>©»£ÁÅBPE­g ¥T‘” âvDµ¡ ™ t«iSC”ÐÑkÌÖAÐbýV ÷ 1‚L¼Cr•TFü« »‚Bû™rÿeUK_¾ùfº–~ýÚ%’}åÊÕ,üÈÏÊoÓ5x‰õXú ¨NÕôu’/¦/½v™dIíW³ÜŸšz‰ŸïMÍÌE£ÿðýo¢ÑS¾½?2zdE£ÝG]=5=¹V^™Æ«iþ¨÷ñ{wüGO¦¦~ØÛzúçÕ§þÏfø—¼÷ÏÞÖ‡ð§‡ï>œz‘ó¯{î}F0ó;Î?ï=œêoã¥=9øxðdÆãsߡ县ÍßšúÁ@ÏßnìÒ~Ÿ ŒOüw~rÐÿÓ—b4½Õ?øyïý+½ÛßÚûcçßÓ?þŽf[Û±>ÜýÃO9Ü{ÉßzöÊöêNÿá*ÿ´w_ÿúîþ½çáÔô§=Î ¿û_þÅß™:Õã‡ïùþ3þÑ'°©zÜuàðûŸÁè#°LûþK²Äïû›û<ŽþÅ7÷}Žžñ¶2F=¾ç+¿üCÄ¢ç¯î}Ûü¼ÿþª´¼ßß™éíþMŽø!Ÿìåå¨Ï|îð GŽ~Ç}ÿVÿñžýâž÷Õ½ÿ“£ÿÿÿârõä äÿÿs á2P0PIÑ0Ö3ÒSðOÊJM.QÈMÌKLOÍMÍ+Ñ Éâ254†(1´q]C¸¹íèºendstream endobj 285 0 obj 2208 endobj 286 0 obj<>/Dur 10/Trans<>>>>>endobj 287 0 obj<>stream xÚ¬XÍoÇ—BÝzia ™(B!!?ô-+¦ É’# µ Ki„A:Ü’/wé]QjZ9=ùÚ.„öÚCý⇠ˆÛ\›S]8ˆ$n¥*Hˆâô½™]rù¡¯Ô¤@qvÞ¼ï÷{oxëB2>5Aàc>&§‰›'IxOÌLéñQâ2’»RRdlÿŒâ……u8–„‡8–XN’éøYÏñœ]7‡È9^Ô#—ÓÄãE^ûB’Œ¤’çåad‘‡ð³äAþ⋳¤L]› ò8qlFDÁñˆA-+K›Ïg2öÀ쯿­¬Ìðì9Žž ¦Q+å „Ùs‰å8¥Ö¥ عt 7ƒÄò4Á-tÿÈè8Ò¬±Ù¦G<šµÀ|¿X¤.ÿ%¤\`ZÏ›°Qb§„ÀžÜ±q‡ÛÔðøõ˜ nô 8!âZP64‚&PP°»ããñi¢4äÅ’Å /P;Ï€!p]¹6¿¸¾òó%BshV <¹Ô‘U7®â2™š‚OÅ85ß@óµ.¤Š@ÓŽŽŽÆSbHØÄòLCëɤrwZvY‰Q¯Õ—CD0Ý‘YÓñÔÙ5U´§i::ÚlP÷éy$žYGE{šŽÉT)ï:~é)»39vvU퉪«)¥ê¢c Ïõ ÏÑà%Úy‰ è–¨K‹ No'ÃmظÉÌvçg†x.Œ%Àž‘ jù,3  ©Å â_#"hóÌf.´Ú³Y9l£LDxHÔVü!·+þFø'`BÁ1ÛmžSÊ iÿ·Zj„±Ò2¹hÛ]¨jrQ ‹H£®×E\f8N˜à&-f{É6ƒÖNõÀ’ØYdz*z‹†[a7³¶:ÎØà0Áˆ“Ãhù¹ì¦.Ïúà…@ .Œݘf ˜® ’&ó(·XÚÞ˜£FFÃ1ÂK¨mÕ”‰tÜæHPr¡ÇêÁ`$ …ŸÁ꿜Îdá ¦#üþS#›Isñ–f#j:q¼È-äö4¼kae6†„o§J™ThsP"—Ó©6g _ëîád$¤g4 Ú&+åDäa÷49#o,¼zõM²åVZSÂó'dÑ*>'R”©À9ÊuL߀ `¶Ê¦P(N—æÔÆÄ€e}n™XÊá‡Ác†§Î¶ÔM–_Àc‹¢2Ž#[މmCÆÌÒ8À̆Ÿª91Ë Ç””NÑäD¶@—vE/=˜ÿpvçxÞÚ ©âdÕVHæxh 2cATÀ‰"øYàü^FÍ pW@B—ÁÐZb.Q‘Úð57¨íýXŒÂ7 ¤ä8Ùy]º ±&4BÛ`k‡]ñV¸hDïJ˜î@Óü¯þjÖ€y—ªrOœR.8˜Âl°Ó`º„|U`Äàa‡ÒÚÎã°N•@úDÎt€¯ ·#nç ñ /×Ä|G*H j](Ñÿ›[*å *\ï–Ï|à:ß Zúº*«bظf´9©{û¡yÊíîý3¶H·0‘ÏÚFÀ ðžM±Æ­-l*«9HTß1Çûô*ÃÀ¬ › ÏE£&¢`„®·,Ò„”“æJ3ü¬X‚‚w9ˆ‹Çã­86XI#uÛEµƒîÕXšçw2RnŸ=¦.±ú,«{]¬;$—I«¥]DJÃSwQH1zLÄ Å½KðâˆÃ0´wwà÷À(Èh–çÂÃDâÑ’ŸÂÑä€nN‘!ânpÁfñÆ çðÒ­œ¦â«yu²ç¯-.½òÊÒ•Íç!àÜV¹gïs ™­ŠÛ9V3'û6@·J@D˜Q UŸ”¶Ðšû¶Å„üŠÔ9ßU0ˆHc›Zk+F®3 2OÝ,h‹`ñ,8ˆ€_ÆDåÅ"39˜ !ÕšhÜÖì;g¸+Kkë7V_ïÁ(tuÊêZ‹(‹ A=Zt= Av DÀDçñkJ (Ëì¦V´åˆUsd™»Â‹Š#êd˜Y¤“à†(Pk³Ê”{ Þì\À‰‚bXŠÙgX¾‰ÓÐ$È®æ‡È'k²Ø7UGsÊ0š:fhQn°­Û¥‡jî÷ê7¢“¨qý D—¨Õü©¨@Š[dÐ(_n Vmˆ{#iÍb6¸ÕÝ"£ø+ ¾ñF†Wº©)üÄŸW‹ko$V7®.ÔKKË)xëWúÍÄŠº@%^ƒÏ$^&c‰…ë‹$EV®\õžžçdðªÈJO_sõ/yðŸæê±Ü9ˆ¬8ÍÕÞƒ?Í]l¬]J÷â·Ý^ù òñ{·îýWzz¾[Ù~ü‡¹Çõ÷É/dåo•í?Þ½ßó)¿ªÜ»óÁÉo¤ü¬ò°v±ºƒ_ÕêÑáǵG}¾ìÿ)wë;ò=ß©j¯öõÎÑá­V÷p¯Vü¤þΫ¿ÿB­z·«‡?©:øˆ §Ó»´ñɘ§a°SÏKêD5‹ª¿IÕj¥3ûTç[Ç÷ü2Ñ8YPF-‰«ø’è–›endstream endobj 288 0 obj 2344 endobj 289 0 obj<>/Dur 10/Trans<>>>>>endobj 290 0 obj<>stream xÚÌXÍoÇ—BÕzia 0bä’K.¿œX‚øƒ@Z Ž€ªÂíÉm–;ôì®h¶…œ‚ž|m B{í!‡þqáCPÄm®Í©D·R•@$DíôÍÌòc)S]Ë9T2h=î{3¿÷{oÞ¼·7sZ¹ˆàÀR±ÊÁo±ZD#AõE]~¥£BIü3[‹ÖÀ,_Ž>À,{)‡*Z­ÕA¹ ¶kÖiÔf¶ë£ÍNfÙö®›Ø5‰ã+Rëënêå3k?_Ì^ª =§Ì2yC˜Õ\äRdb ¿IçcŸ ³‰ÝA¶[wëxˆ2‹0a‡luA2b‚4º€hjƒ*Ò Íˆ¶(ZIlRÐ ­2›2Û·‰7 J‘Mâújâv›¸È³[ãc—ÐÀsºi¹—‰g›oÁÞ›ÔľM]yM8Ú È">a-Û%Vj‚­L>'Ù¿[Ôó¥ç²}d{(ðH=pO€k9aa6º²ñ솋d·ZIJ'I FvaäÛ-Ââ?nØ­¾¡Â@.e-Ô¥AÜoÐ`Ñz 9ÅÓLÍ¢¬‡vÄò&u}FÔiÚfSñ:ÁGØ&‚(€„àZ/e,IÑÐë´´¶å^¿íQp6!WèµL¾£Õ`±.¬àŽ÷ÑÐ%Êà{ ¸°6õH²E¿(Öžv¦Íè¦mAxˆÝhúȤb=ÂäwQ@›N`Ùn¥&â’BØ‹„³ß¡”a‘òRZ£"ÅÚŽ]ïÊ8Áù!¬ŽM€G0ÑÁ¾ Ì ¿Û&à¶Hؾã¢xXN[¤Ž!QÂW(µ‰Š]{*v‘~A+Ø‚P‘ŽŠ§ùŠVF2-€“Ùm‘îâ‘3´üðÉhó‹GjŵËâTÔ+p&óU°Ñ« C”Þx‚ªTPº…r¶>NÙÈ•G+Wõ˜2Ô¬1­ŠŠ¹¢&Ïèqêò8—Ò ìu]³É¨ g}šHy!Äg§*€'‹À[šÛoŠccá„s CNŒª“$M/C9R§ìXºŒj51]J7)]Jû(]º®UQ))–r2ö9$Ø&d?R•b¤8˜¥F™õt^Urɽ’º‰½’Ú³¼*••WzÜ+ôtàKzrðR71x©= ¼QQàóqðQe²DI B™7ྀ¢ (TÚáµeðêµÚÕëWj—¯Ä3[(ªÕÕr<F>9R71R{ùª¢ ðLñƒ“ž¼ÔM ^jϯçxãÙã÷ã«×~tþõx •ü0‚64 PyhZ5i´‰Ùñ”äŒä”HÝÄ”H픪º¢¤ø,ñ,TЉÁ+ݤà•ö,ðå¼_Šƒ‡¦GTÈÕÅB©”Ü©›Ø©}ÔxbD~\€K “ :p¸÷Y—ºD¶O^›˜¢36£¦§i†™ÙìjètE'‚<Œ¯>$G¦Ç¹e}гӳ|3 ÒOìÚDvÜ&z;aåË×ä‘HÙsË™|R—¢peò'öJ!òŽNf³Ì×äœ<"O¯ó ùÿòïÉÃ|KMƒâTCIôa9 |{¸÷‰ §“T£Ž õBÑìÀÊdÚâIEA´¯šcÛŒ˜Äï8b%Q¬™  Å'»ó®•sõºbúì ãµìº-±À-ƒ¨€bL¿Sc¹d‰ºNwzèN§é€É¶I%™•eþìŒr)P­Cä§X?€BÉ`‚b;ÞĶ#[+Ûº À¥õ3ÇUÜÿã³Qsa€ÇΉ=¥m/ä+‚],“Ý‹ ²*0èF :̲QPoÒ¤cÈb¶Hèb ·Z"¯€ßUœ¨6ŠÔSªhC¢èÊW´œ|ÅX•Óh>ËeщWµì«oü$[Ë^»|é¯\¼¤Ã¯úYþi¶† v$û&ķ𽂠Åì…ÕW‘Žj¯-òpnîyýôxonai,}Â÷ÿ=–ñíý é>K»÷ÿ¸rj$=¼\^žíÌóû½ß¹q÷ÏBz87÷ÍÞ֣߯< ¿¿À?罿ö¶Þ?:|ûÞÜw8ÿ¢w÷ö{ –_qþiïÁàT[ü)¥‡.|é+¡¹nóŸÍ}c`Êgƒ/·vq¿¿+ž Z…¿üîAÿwŸKi~«ðƒÞsÎ?…ôvkï·¿Ïû[BZlmÿ¾¿û›ïqþ ÷|¸õø•í•þ½þqï6¿òÅ­ýÛ;Þ½¹ù{œ#~ë_ü³%¾3wªÇß ÃÇüƒÀ©çz<¼:ø€ôhfÃp¿»¥Xâw›û\Jã7÷C<”ó¶9ˆ¤ß Í_þ"cÑ Wö¾l|ÚwEiÞéï,ôvÿ¤¤~È—{%õù€/~æ)éW< ¯÷ì)釷Ã[W÷îþGIÿÿÿârõä äÿÿs á2P0PIÑ0Ö3ÑS(ÊÌ/Ê,ÉL-Ö Éâ254†È‚¸®!\\ð4 endstream endobj 291 0 obj 2121 endobj 292 0 obj<>/Dur 10/Trans<>>>>>endobj 293 0 obj<>stream xÚìÝkoÛØ™`4ˆÂ|ªE}c‚©­ŒÏ¥‹b:¥ÝчÝ]ƒ`³hd™ŒÙÈ’F—8ùdÀ1À»çBÒ¤x;”És‘_Ê–-Q—Çï{xxxûåÉàð›Wº;Fw'ßËwÆÝ^}÷Êøöøkciö“—ä©—ÆðÿL®ŸüxŽÞ6@OÆwèmGgãÛáqn£ƒÞ{~ùÜX,ÙÚxö_óKÇv¬Küx¾tÖŸ¾7ž½0þcå¼ûy¼ž\œÿûÉÑÙËèíÏÿð'ü:úlü¡Ïß<ÿû?Fû×O£¿þôæà…ñì͛ٳ?Ò}k¼Ð/þÃ×Çø‹G¶ñi¾1ƨügzéÌÞãøÛ+ÇZŽ—“«O†=_ÆèùÍʸÁe±–«ÆbjW–ñÞ²†33®Ù¥±¾¯ ëƒ5#wë•1·Ñs–1ßX«uüÙ¸@¨/Éô¯®æ›é¥a;³ñtúɸ°Œ•µü`]çèÓ~¾aâ]ùÆ+c6_óz×zŽfƒ=µ&kƒNí8œÚçÎõb¾\g+Íð}æåö‹7ËwÖlòiû•h*ôÕWèS¤”*þÅfMŠ2ž®æ¸ëñ{˘`Ôð]ož/–ó‹ñÅÔzs°ý}öÒúe“ó‡Û/DóêY4%ëg±îd²Y¢/£ïZ#tDýɸ#Äé|òijÌÑsËT£9x¸=•çhFÍkçz<5.-w34'¬•ñÁZ~2â/¾ûj¼XX33ÖÇõÒº¶Ð\XYÓËùuøÁß/Èžà/¾:4~¦%0ÖÖøzUœkÃY¡^L‰³FŸ&Ñ%&¾°pDlfSçÚY£'g›ë ôH<š:´8ôVãk‹–ù ‘wãååÔZÅ¿|ýia#;š›ÉJ‰ AÒW^Ò §eÁÖ|B¥Üf ç.Æ“÷+’iÎìÃü½• ¼ÕæbEBMj&Þ<ÿoô­KT^\ôQ 8ýÈÕÚAåC)hÙ6J€éI˜ãéÄ_Œ³Åx·/ÑL´,šªˆ† ‰×ùòcà©uË»¶–ËÍ+_ ¹O~ù8ò3æ›õʹğj¥¾Ïbà +š‰)TËÙ¨@³ur:Ö¤˜$"Œk ÏÌÕᛃÒ@:A„ß"0&.¦¿ÑÉrH†hr7‘[Z‹¥µBE¡7¿ø7ò‹cc2E%6¢6œ§xöÿ=ù“™Q礪›/Œ…µDñw½"ŸCPñç“y¿]oŠLíÍl²væ(ñÖó%*)1šs´d$±NÏŸübŸ¼B>^â Ñr /_Œ—'LJ_“%Ïèè/ÿó¿G££üõGã»ÿÄÃÙÙ7èvvö#¹%ŸÃðýwôþŒú¿£‘±^n¬£Ÿ“Á«£ŸŒããáÑÿ‹qlŒÌ' 5€ ¸€ ¸€ à.à.à.€ ¸€ ¸€ ¸`.à.à.€ ¸€ ¸€ ¸`.à.à.àâ;ÜÚ¶\ìXÀÅ:Øt®XÀUõ·w­Ô4ØÃ䪬Œ’kØQ¬I\ƒ¹C+4r¶*3™ÌZÔËÉ©Ìꘫ53袸vË©0Àj¿¹© ĵsB…‹ºïW›ËÛ½ºN%äÃàòî³pÛÉKe.ïžK¶Ð«ÎǸىuSõø¯ž|^ß2ÀåÝ»Pß‹Lˆ›šX-ù0šPWÇ·»§õ-"\ ´š^ýF¢K £+…ÀŸ«‘6f؉Ïì¥,WC-òš^!—†¬‹sLÃ\Ñ—<h+|yˆÿêâ¸[©çE'D 5t=? £1 ‰8=CºH.¯¹µ½„{2ê¤6',øWÓt7ˆ¸î^bŽýryáê‡ÙG¾Šþ¡£<c­4ᥫÉÅ\!ȳW?ÃEÖðR”‹iÕ:¢øqy;q%ÂKÐq˜.àŠ(ž”pU'c2¼åbë· M‚.T=­nLDá¥+ÉÅ\ÙªþsWUC‚„—~íJr1v ²,–Oº¥ÙüFÐQî}ƒ«×Óƒ¸ª'ÿ÷ÒU=Z—úŠ5#è ÷žÁÕcMÙnâʾ×ÇQæáfi/Ü}³ã²éH;•‘/i÷0þïÑÝN7êp5ßAŸý8×Îß[Ÿíröjp½µäj6¸ ä÷‡«ÙíOûì\DÝÄ•%¸Âî:\cÕ¸x°0ãâspW_!.>Á3!'íqO!.NG——p½eØ©¸¢\´ßÝàA .N¹˜]×ÇtSƒ‹×™ʸԉ.^ÁUÆu…ƒ ¸X¹Þª]ÜκRÆ¥LÝÅ-¸ö#ºøÒ§”K•º‹cß/íB%Dÿíâñ“ py<»Ê]D…7¸¸ž^˽)äçâ\[\7_(Àųë¤"ºäçêqæ* ¯/ú’sñÍÅÊèêIÏÕçÊUQwÉÎÅyƒ{etõ«FÝ%9ç\ £+nÅgÚ]\›Ì pÑ0z|³È /Ù¹xï+Ö]ÝtP-âèâ9ûÜ‚‹; £n:¨âPÓyÈ•>{£u5|wÓÕnâšL¤æâ~öê°îÒ4\{‘ÛB»y¼ˆë.ž%Ú…+] Åúÿ®îâïný\äÏuWw=î~\ÿ»wuÏ"íÀÕ]8¨ºd‘˜Ž®@b.þ'ÞO¶»º´þzŒê®E\wq,“+}.¦Zõ8¦´îBC·î]tñ+”\U}õòr ¸C_=·R©ÀUÞß%3—€\d‰.nÅR‚«r;£¬\"®ßò‘W¹Tમ»$å‘‹LÑÅ«`JpEô8ÙÏ•ÚGBV®¾ÀèZt‹÷‘’KÈ•Úîê®T‡êãdÝÅ«du¹Ñ•î®ï¦¢Ë®tÝ¥¡€Ò>’þÁd5ûqrÿ.¹<ѵÀ]õáowA¦£«'!W_WXo-Èï⣦‘®ÔtÝW*ºº$ Â°Zdê.¹Äœ¼Á;S£®Ô°¿>µo*ŸY©WTwuãuW7]òqy‚¸ÂíŒ(¨ð/¹G‹E-]wñ™—õ¸úâ¢+³oÄöžÏÀµ½Îø±pQF.Q§éIÆ’Ö-Š..3S.†þ.)¹úâ£«ä¨ É¸WþxV.¼Tìå£"\A~.Þq *¸÷áÂÁµ_\ƒ&['§Ý•3ž‘‹, ×€| Œë·æHr®°ÕŽC-·Pe®å¶ê³ãÙ¸¡¥"MhTó¡åë #?——[uñXg<É®ý”q™›«XKv.!8vv]±‚Ë|À\%Z¹\¾\®2-ɹúü¹Jµ ¹F”ëQ©V.—) WÀ›ë¶x¡(=ן˹©~®,Wîør®¤V'§×¬Ë”ŸK«ˆ.­~t%{;ŒÑåKÃõÛêèÊöw–/ãÂWÚÕ²ý³ÉÀ•LD;Ø•k$ž+žu¢\ ÈJ4Z•$»‡ËÇr-'îMâ>gÒ?HW³;…\¦ \¸W&úM÷H•/â"×¼Ž{$ð[´ð7Õ+3—Ÿ[ˆNÔvf‘îáíd,ŸÏ†VÌÕ!B؉ô]—%£¯×pXΕŸËeÇZ®ð­•\æÃáŠq¹h2;™îáòñ.ÛNj%ê®Nˆ–ê»Ö ª.Ù¹ðROK,ùÌ’1wüWˆål÷Õk¤×:^2‹7ËF\#©¹r[G9댥+AvFkk‡¥c÷  [‚Úæ²s´ö›k •÷HdÇÇ\·9VÛ\Ù]ÄT®;pnó°ò8.š‹Nþ¦ àÊãrж×½ÿT„+¿À\À\å\:pÕàr ¢ ¸äáJŸÚŽ7—¯×Ö©íøså4ë5‘ƒ^RÊÌ©í¤à’n.5¹Ÿҧ¶Àe*À2sj;àb,dÃ-0àj‡ËW’ËÕ€Kàò¨—ü‹F¸å €kÿ¸ɹ4×Õ]/ð-Ðtà*ix¹d-ƒÜÜ€Þ¤jv‰ãÊutÅ ­ši”KÓ€‹KÄÇê¸Zãåqia/JFšûÜŽ¨3yy…q5$¤ë´Ëļd”Ÿ+œWk«5®ÜÒˆm˜rnGÔá’¾ G6.¹×y”¸Úâ ¤ç äâ’»ò2Ke.¹+/.¥®¹L©¹¹¸ä®¼LàR›KêÊ‹KÙö†Ë—‘Ë”˜+KæÊË.骮Ú\#àÚ‡ºÞ—“Ë”–+.éjU·n©$ÍFNåÚ._N.Y³‘×VªZ\î}®9¿UW.WûÒ,~Æ«Ž`çr˱˜.,eãbÐçÅm;3‹òÚ懲™K3Ùm¯«.V.×dô}®ºX¹¾dæúaŸ«®æ¹D„—){.ŠàâØ­ä6\²Qi.þáÅq=Öm:„pIš‹l\_×þpñì‚k‹w]\²æ"W½šž7— \²æâ}¹|á\|7¬ßk$žËTƒk$GtqÞ’§>×Hb®Q€oèš§&*«O’Á¥²Rçš‹ÌÑåG·‘‰o}ø‚¢ËW‚ Õñ#’Žø*ôHT2òÞg£.× X+ÁåG™®@®0…sqß›±6—kut‡ÙFw™.Sv.M 5TgE‹I1U=ÿݧ”^gä¿g±Ò\ü÷ÍS™Ë.©+zÕ¹¹$í|q‰Â\æ~pýÀ+¸ì³®.—#"”Ýè/æ€e¹Än£êK‚޶Quw8AÇr5¿³å\¿¾NþaÓs(—»òÖæòE((ÍŽâ~½Ttœ 4‡!Ôá\òär®BpÉs•©Bpñ9@ï<8Ew§¸6Çú«‰ëtúxäŸâûà̯wãóµŒÁUçðO­ ¬èpY4uÿDXc„“ŽÜù¯Q`=ÿ514)%wŽ8Ne ®ZÇb»;\3N4Báã-Þ䫜’èO`ÒAôÀ”1¸š8!xõÜ6I¾¡?ç¸q…+õÓPd›‹Ž+å\œ?½rv›ÝI Lò›ÏEÇ•qù"ƒ«®ÊùM)¢Å%ÉOÆj.Sè™?9;•WªáG;pùbÏ“ÒÌÅ *×]¸½œ£æÁ(¬ŸHC¢nÝ%6›âª˜ç$f^ã%ã)2ó£…dWÌe > OC—Ê(÷“ŽÚ¡¯QÓÊ<Åáã“ GO$¹^ã?d\!—/ú”EM]Y¤,Iè82¡ä sÒrÇiuŠûDÃ}^ýSbAÆÑ=Ð%kr5ʵÓ|÷ëÏ“Ñ~pÕöÕçòÅŸ=¬¹ËüÔKÔö7HÎUoÞÿjî¢5Ú®Ú^§Ê¥b³×Üj7YLÎã×$W«MnSгD6zE·½äÐjøxf[^¦)Ç)5]%&K­Æ/¯ØJÒH£ÕüÕ([ð’G«y.¿q/Ó”çÔÉÍ_ë´i/™´Ú¸4l³^Riµr%Ý&½äÒjçÂÃÍÕ;DÕ|k\Å„)™V[—µnd:}é´Z» xS*¡Vk\¾yß„¼ÿ'(Äuïà0%Œ­6¹î7Á2†V»\÷H'_R­V¹¢Ó%ìE%Ï+JÈÑZr^¨e®À¬ 曦¼Z­sñ޾µ^”+6b ,‰µxp1‚%N£õõÒä©ñ9Q*M¨s]ÏP¥^oÊ®q«ŽZ”­(Õ0(‹Ô¹-VtÖ°…ŠV]1-‡QÒ4}t…ê’.Ü™1VÝ0£°žóÅäU˜š•² Þb§ÿÌŒX•j²° Ÿ½ø…¼ v¾¹ÓóçrôFÏÜ—òõ®ÆåÏ)øò˜þH.|zr°ðIƒXìî?.º±Dj„þÂÞ?#´‹­Þ+hË¡ÎÖOù‰ÿÑÎù™¹¸øjÇqË}pûêÆ/íÄboºÍÝò»Á{ |ŠîonóÞ]ÜÜÚŒF|în¬Ý%y¾D|ìnû^K|†h§ÿÀßIÔ0õR0ÛA ¿Š½á+¡ÍÑô;Ìó:ÂæW7Þé{ß? Q¼éõßwéϺå5»ßÕÿˆ¿ý–@ ¿ÙúѼ×ùö]Äm÷HÐÜ;ÝÊ·½Í<>r×ðÂóÕÞZÛތŹˆ€«ã“¶c.nÁÞHIr1Xôƒ>®ÿIè>1å èâfT%\®÷07D¿ãõ^À†hW¹Ø ”oü_Ã^¸A¾ûbù±w'1×½vÂíü¡>0åw§#ä¡©Á;B71.yÛÝ}°¬.v7þÐÿÿârõä äÿÿ-Œ±‚0„÷>Å:P[ÑÕgMþű¿PB )Åç׊Óå»»|»ë gÐ ¥:JºÞƒì¦ysH°Ñ}SÛh¼w¡… ¸q°Ì™RÇX¯~´ËÀ[êE±ŠŠ¿©ªr©”ÆRK>/Dur 10/Trans<>>>>>endobj 296 0 obj<>stream xÚìMs#Gr†‹ØÉ! ø8®#¼šÑ·´±áƒä•­›ÃV„Feic¥‰™Ý ý{£¿««3³Šd£ ržG"TW7AÎÛ‰¬¬¬¬¿^¾xÿ³Oö‡‡Ÿ~¾ýû‡ÿ>ùâ“ýç¸}³ÿñòƒªéƒýGŸ–ÿÿËå—ßN{qhì§=ÿúÐçÅþÛ}?ûøðä‡ßýéï7¿¾ýêoÿôíŸ/ŸýyÓåwûWßýùæû·oö/?âï7¯Û¿ùù—Ÿÿòòõþí«}Ý÷eÛ÷/ß~ÿÓÍkå Ø¿ýéæ·ý«üºùöí럿ûÛÛ›7ûüôó÷?í¿ùëþ»›ýËï¿¿y󿿇ýw¿í¹yûÓ«Þ”{±ÿý–ïóÕå5öo^þr³ÿõððþþË¿½Ýÿðó?Þ¼>¼õò-5ïáMóÞÚ_Õüƒ·sx#¿¾z[¾—_^®ûóÍÿ\¿íò×}óò‡ß¿úõ/¿½_^áOß^þuÿÉgŸ½ÿiõgÿð‹Þÿ¼ü#ï?þðÃ÷?¬þüß<ÿê¿þçù7Ïÿóß¾ÜðÙ_t|ýõ‹}T>~úiùøÅåãW_}ýõ§_|Q•%}[ýªþ^žW^¯<³|,[Jþ埳ûúo7Ïÿ{ÿÙ'<ÿ÷ýGŸøüËÿøjÿùþ›½Üä²áOȹ wäDf¹ wä€ÜÀ‚ÈÌ“§pw=±P]^ w8AÜ;žº¾R­.‘;œ†ÀG‚ŸíG!w@îÈfsÕ'÷Âñ熇vÖg“»Cî0ƒý.‡ŸëzÚŒDËW×í±®¥¥sm(eåܪzrY6w–UЩ4ÚnÝïî”á¡úGu?Ð!~8¦YmÛ‡ÂÉu•âƒnEç~ÔÒ.›‹«özýëç«Ë• ®´r}·âºpƒ7ÐÜ%¨Ž)÷Zƒ«XþýM°kÌî¨y쉴Ÿ—Á‘Ñ•F‡ÿ.pĈs­ÂVÏ" ®^‹ÍÁ]¹áƒ#®ÿ„h?D¹3b…#˽_/µ‹@ƒ¡–Í ùr.½zš'ùh½™UõxÑ'¯w9r×Â*÷’{õ ð ¹Ã‘X5®vë0»g)]Sîå“Çá¹#÷ÇêÍ\U×ãHMí¤47Á›ê#A–{kú¢}±²åî;Ñ›Y+êk¯[c4tºu×Ã/;Cîf ¹?NÖA(ò ëÒ*½‹fhKs]O Ir/Mï‚#‚Ü‹G%wx¬z¯}ø0*S¸g½rwÝTP;ùڽž|t¤ïñ̹«x¨þŒ)!è,ÔsP;¼CrÇ—wGîüáÝ{™Jöh–ò™ñÀuN?¹ wä€Üàap§ÿ 0“Ü·r‡\£<Üý-¾Â©ã9_¹C¾Üg¶îþÇ}æ5T°ôé z>83«÷ÝýSãÝH}^P³ÜÕ¶«÷ŽlߪB–܇ßïiݽLì|d²ý “ä¿=½p§ w¸d'ðÝs#‹©ÏÑ Ÿ_"w¸‹¡¿³uL{ø¿¢òÈð{%P£E'ç!w˜ÉÀ;ud™áŽû­Ñ¦©ÞÌ?r‡™ ¼9ç‘Óî3=Ùê³¢úÈf2ðn›ŽJGR®Œ™C3ìãªÂxgûå‘ ¯ßSƒVc¦ ¹Ã\‚wzl]֯߶<3ÜÝÈfòhœ–ò"Ì‘ú ».»ìÂdjð¹ÃLÞeÆ×Bõ‘>žnUç\¥k#w˜ÉÀ»È?S½FλæŸhÃ˶ãÌÀlÞ‰:Õ2¤ì^ŸðÍ…|äÞ#w˜ÉÀ;3›Ýs¥^Ò½¯æ5Ï?8¹ÃLÞöØ+³NRZŒ²¢#ë<ä3 Þ©²”½ø„ÒC«íÅP>|†Üa&Ɖ¹ë‰¦œtàeûîqä³x·M¬=JÍi­¢ø½xG!÷§Îj–b—'w)÷ÅXÊa–“‰n¯?a­ê»Âz®Bqéãìlßñà·‰å¨Q¸Ñí½g­êw‘ï:9òÛsZ΋ßÞ"žnÆé}êŽBîÈ}&ï²ÞÕf¼¿";~lî±îŠ‹S—{â†tŠöJ¯âëꌒ’Z‘ûÓ <¬ÜÍæÄ•>½¨ZËb÷鵞‘'7qÅ®)ÔU_¾ÎÕ{Ye=£ªi=,åUhOmÛö«ªý¢Uàár×í‰WõYuÇõœ‚wº³.x4Jü%¯°\«†i¦S^ºJ}µ ‹¶õÊÕ{ZWBy ©h¬ûåãUÝ^4íEÝ^ô'õáæîXeÃlgZw/×ùòzɘ8•̧sßUŸNÇî11§¯ë1¯¥Öðq`Dó ýÀ#þŠÊ¥]"~¢.aõúÈÖgÌÍ>@Fd© óåyýû½}µ¾Œ[ÄFóÔü¶etñ®ß,’o5è*ge`Ü›ÖÉä^›úàõ×sVdF¨0s›•>±”IÈ”éÛç™rs±Èb% rømÔíîmçb—öáè‚|–Tz\E­ÊÝ /}Ü_Nºº“³¹ò´‚ãq©6Põs UÝPÜ–Y§‚}VNªí øã]œ1l\î³lœiÝŵ¥òê 5“ÝgL0Åp3švÛ¶KŠ×±s·6É·4ÎiãËÕÓ‘ûø8adšU?@ŸòyÙ3ÆÝ*^Kçâ½ ž}¿å£$x}Ì?ÐE;©U^úì—µG_tAš 循Â=ëöÒnCg[wqG¯iã3ÒIÒæÁInµüqœjZÛæÉè³Á4þym²Q/}Ô!]½˜ u2¹wãßÕ]"3w V9Ñw÷êª Ë¾û´sŸ¨A9CdÆÉ#O噄Qüì{Ž\%ÑÇ–ÿ˜¡zîèb¨©¢ê® š Iî«æ¹+ää³^xÕ¥×·‘û½b³ÇL•¢7*,)%O…[Æ'g¡Ž.w'+Nq+–²YÏ Òé6á§Œ>Žì¾—/¢V×ϘºnÂH8°ª^\ Úû‰Ö~޶¿t¶€ï=áDß]]{äÓ«ñTÇ=£“;²mŒº©ø@ÍšôÔ¦}õÊmb†åßí™ç‰÷UõÊîK^›5=©™—mû •\–wž ¸Œ}#ˆ(\5l°ƒ4²¯ôŽ'Z´j¿¯ä]*nn¯âóF.]Èc®åN1œz$]T²"`ÝWGúg‹îJ¿ózFª÷rk’“¢¶gŸ‘úèGåƒ#_þÈr_Zã@ÃßN„^–ªJåOAéú w|K¼óyt.Š ÝIóNÙRÒ²íÖþÙVn¶Ôéèr·"èZ P:M4êÙzm0v𥗤Ž'Io/y'ZlŸ 2fdµÂñj-awtãn»Ü–þB¶_‚·¢¹%;Âr ÷ ÂñNÏWŒoï¯íó²„27‡qreLõ‰Á™8Ÿ+zŸÆÌçå»›u36”´×Àºã÷Ì brܺ´²¼äl2I¼jòŽ>ËXu Í;eA]oW¼¶v[×ÀE™‘^JŸœ#2ã” ˆ¤{#3F™I2|‘úÂrs²B6áSä~ׯY~»«²m»s·úŒðó83cïÁ°»V®»õÔ˜ê‹Q¥1­GîÌN÷^ ìû8±1tñÝÈl»ñ~¬MmhNu®:3ÎÒº*ÀT®¤=´¬23ÎÎgwé?<àÅT›9¬»fTÒ‚íuMK{å];,^&;¬‘?5ûr—gŽ:W¼´Ë¥_9ñÕ³²½üVûõ­ŸßñúIÛµrp\õàôD‚"3#­”,&É⇖É9#saj†/ƒuŸJîZ<¥©ºÁW­àЖ·/Ú®ë|Ssqf‹ÌôÙ‰u©µútÑb±8³æÄªu›!÷Iä®eô ߺÞb¥ÜûøõñNûa×mໂø™#3R¸OOеâࢪÏ${î¼ôSðÝ'µîJ‰¯þ ë$¨ß |üöÞðÓß g×ñ3Y÷±¢´2zQ%k~yIÿìLP³Y¯LÕú!÷éœqþÔµáÈÝGÖÝo·.ú(Ü U½¸=Óùîú,šUlp(¯Çø¾YœEÉ-­u·çKW¦äÊo¹OäÌø­mlucÝ}hÖ]gò{ïÜwNÏ6ø6ì*Äß§»VÓ\š ýY+ŽZcܸêý sv–^²$¹+vÍ>†ªÇª2·ÚYU¸1Mœ¥ùêãêsmƒÈLØu\`i¹‹‚wB¬%1"Lå¼ ›1ï[{ßÝXh-ÎÖ‚úÈ}ò¡ª‘ø’ª3³9ýÛTíx?3£ÞuŽJ"Ý(—º¨†ŸÕ㲊.ÊøKùýpð½²µlY¾W}¯}÷EótYu<ô[.OZ(Õ7¬M U1Tµv–¦ÿÅR3Á¬’¾™ê(“Þ Â¨&ºSÃICß?«-ø¢TûAÍ‹óZ·‹Jïﲨn‚JÎ¥¾ëƒËª¥ŒLžW7ÅrñžâYÉð,g:ÆPU[WjgwWwøm7¥$íã$]`2ëžw73!•{ úÁ>—fº ¾Ô^Kó|ÑÝÍ]qÖ¨½:XõV}umÓð¶Cî“93êêk#u×k)c£Ã^ß“ÛO’3cUõ5DÖlgø­’í²rK•®ßëǤÕã{g•Ãth47ÃØÃó.>©ûOF†%¾û¤Ö=YO» ü6£À¤TQo⸻ˆL-¤°k»×±õE톟wQöæe#ãRÐíyƒæ†®yiTgMU*@îSÈÝKfÛ'We$í¿º³S´ï“Ÿ)gf™N0W!KeQ?V ¥o¾Ìx)èö ƒæ^¸gg©T{[ì83GDZˆn¸OnýVÞ¡f¾Å{ ¤l|©îEéÓ¼W7^6º>ïýõA 2l>Ü)ççƒÜ‚D&ÙAîÓÈ=œYÉWÞë7¼]nrìùÏ’3c¬º°½š&ðRyï‹E?t:é‹.¡`Ø\ß-Ëeà»ÛáF}q!rŸ0)%C†K÷4U·9ëawmæÊ)‹ ŽnÝÅuEæ†Qdz&º²ˆ x‚©Ž/ÃUsy—œ‡¾{bEŸº|¹O8ÍäOÂÉÝ’Ê‚•~^,*ìûÔ?WÁëAdF-™.LºhC‘Ë6Ê^ùî‹ÚÒ¿WOBU&~Q L›;£k^.ZÇ&9­¤¸÷ÈýÎA;-îJ×o]¢ö©ÊÚi}°žI¬â4OF¤z[öq!ßE=k´h“ÚK5—LoØ›ÉÕ&sÖ$šÏ´ [í*L U§‹O»ñ ’ÖdK›­ºaw'óáá:Çl´G÷‘µ0Œ`̳×}èÕgFªtÁ™ÑMˆÜo;ñ˜˜UíñpqG¿t¯}ܶ/ºŒGßw{ûm¸.*,Ì–ïn˜ÎÄ õÜ®&VËN•+KU©$gfR¥q÷Èc©mpbé^¬Ü¶»ÙÛÇÓZ~;—7`¯$2SxÍÌáx·³v<ÌCîwq_tëÞy4.^º×¥ô†Ým…Ñí`=w(uåJngÙhÒY b¡¥‰ºÁ@b“yci¶Ys;Q®¹ßÙ¨âîƒr2®_ˆÔ(ÙÞy/`?Þn£…~ÝjhѪŸ¹Fä¹:@T÷3–Z+»Íàhíí*íIEî…;9£.Yw•‹qÁB=7\wØNrýÚÕñÍ!…ffªD .OMÚW)3=oi”à!Yå%¥°ÐòñM3ι“3êCß=žü0uK÷|\K#\×®¾öÃu­~àú8)43KÎŒ½qjrܸLû!j ¼ÑÎYæ\Ÿ¦Ü…%5.Ýgšu¿ÍjzºÁ4©—îm‡Ó`VÕyïÃÞ£eNóÇÝÓ›kœ;]'÷ ŽK7µKXí] Œñò©W"˜OîSmE6Îçx5…ƫپZ)¸ìä\³ªZ%.¥qžÌ/È«Æ_+s¬æ½Ÿ¤Ü‹ ¹_ºiÔ>ÍF“~¼KðÖ)‹÷¼¾3™·¶0óÑÌ”Ÿv­jںſL߯NÝRë³'£™vñÑ5:I¹» ¹OáÌO¶°¼‡“öÊ–ö­“ âM÷ÄŠ©s¥ˆÙûcçM eÅ ÍíSi,«¨Þƒ,ïX9· Ìèáñ¢„®:‹îÜU3.诨$Ù^Ä]7ß«¦²sq/µO³I¼bÃÇ)>g/=çWK‹Ÿ52³´ %©Û‹-“RÍ^úªÚxas¨ïþ̵ȪÒëA¨­×R>´¡—ZºC–/ÖÍáªûªïS7\?¨Ú¥åò×J¶º—-¿XqÃ+-³î«*m6¶TÓµÒžwƶ5‰™ÛÓ·A³w×?¶†Zj Û3û;`ÔGè~kµOaÝýxûë­µvuk¨k˜b?ÞÏ™‰—3eìyg§¹Èû)kqxcwÓÚ ísɽp½Ã½r­q_­ºÜû>ÅuÔçòâÞnüån$§WS+õg¼º‹¼^ÙÃOV‰ 3𞱡©½ ±7‘Loö”^#>¯Ü–´²×EÔªÉݹhdz÷¹v³·#ok+ï.©í:æ·ù©ª×õ³ÅÝG[異0¶væ€ÕǘÊJNÑŽ¸‡ÐÇÊ ­yr/ÿAŸâ0º]îNôÝý6±øTi—öÉNjG'õOàR»Kkûn³áïRwî­Ïôi*9väÈ»õäîžÅ=/&ŠIÞ'LêÄjG^Ù"XÜ6ÞëõgâRò¶óG—û2'=Ñ »Û{ɘy1‚ŸdÖ ™ø¹3f.šháºyµ»¬^5­†ÜMÿþ>CÕ ç’[»ûTèQöv¼q¡èn8îŸÀÉ6\.m¤n©ƒ±·â3¦_•”í Üœ*¹¼€V3Aëì‘™©ÒÆqwoøé^¼z¥¶¤\¤F¼¯Ž/÷¤w‘•?f/1–yd83ñ’Á,î^Ï Q–Àºj]Ir/zó~Ýœ~”®ª§]ŸëòŠkçд‹qw/D½¶mž\1Õ§>fÚFXtgTÙ&ó•zÒ•–Ú'ÈÜ.oð󊨵‰Ïôašuß÷ª¼!ꩤ‹Jä­½/ê ×¶áaLû î>òÁ½YL‘z­þ˜¶G«?ö¿¥KÍáÛå¬ô™p=÷ÒäÎ0)· ™¦0íRÜÝ«éÂÚʈTŠìx%®ãnÝãLu †µ¥À¹´ ˆÎÉXÑd%3ÈŸ<È} Ó¾.ÞˉFúÔ~öˆŲ<ú?¦Ó§û}âMŸ~)n;¬o)&ŒëC퓘öXVi”阓NàµjÖÊÝÎ6¹þòÄh²¢˜T&u»,³“¬Âaߎڧ1í»8g&Uæ4kç¯MDÉçøíÿœêx5aðÍ UÅŒŸ§´oG#—”†<Ži#3£Baéȼ8 ¥{=RLÒÍówÈ4µ9ÛðÉi•ɉŸ!…x0íŠ}w7g˜üx1ŸLзóóó”DÂkN¯…¤¶.Íu~úâ(kr)‘LÜ®Åvˆ}:?&´îÖ®>cjÕ6-™qy†j6ëÞKþÑ€~§5í»h³q}©fßýírôµOžW˜Ã´ï‚­ÈÁ)×1s·21ïõÏ ?«u‡wØ´ïäå>½-vnâXÖnfÈæ0í»6Ø+qs/î&)×|÷V‚däÔï&äs˜vѺ{=}&k—IqFÉ\ˆÜaÓ¾‹·öúŒÑh©¾Í°‹WÒ(‘;ÌaÚwýj&o$XëLo¹DL£Dî0‹ØÇÛd"­ºN®ÑF«ÈŽïÇ †ªª‚½¥j³fÒØ)òr4¹Ã¦}§Õ™É±íñ6{JN¥´L*Šó#w˜Ã´ï„|w/Øb/×ów[ĽÝâ»Ã˜ö¶°\RÙ1{0eê•Ü›Ñ]œ‰ÜaÓ¾ÓòÝsÖ(ù\Ç'²ˆÉ™YLûNج&ÞÕÚ‹kU·bz¼ß&ʪŽî|w˜Í´ïôµªfTŸŸe‡y)ƒÜaÓ¾U³ê÷æäCæŒ`}\B¹Ã,bkDJ¶Ù›U–Ì ¨tÝœ¸Êï'·ÍÌþòöœª–í(ºóQŠ r‡L¹ßw‰—KÔ ¸mÍVd·HüõzG»òµQOgrå>ÁutßÝËe!½Z÷Ûíí‚983p ã>ÍF“þ{¤ú­¾ºOÌk÷v½1‘­öÉöU•KøŽKàYû£ªî’ ì±îp;¹O1Tõ{`{¹]›oõÖÞ{£„Üa®GY~1J•IŠôæÞ¬RœÇSgBî¹5Û¥EI¹uƬ¡-r‡Y­»p÷†üãÉÄšT¿5jP"w˜OîÖ¼©·7,HÚ÷Œm„‘;<Ä —R·)6ü ž$+¥½ÙguåÂW:}‡¹Ã©r¥©·ú,~³ÄtpÈN’âÊð~…o»T÷ŠuÜá¹ØCî;ipŠñ‹ÝqäŽÞáôXOî]8YãÞ5Ëg¢Ü/[÷}®ë§—.ì×›1ïp²r¯£/ý³kAîE÷¢î³ŽN¬ ¼8QºPy/ì`]´ä̬ûuŸÝ°ûÕÓñfˆÌ<9ãî.|q°éë+S‹ë¶¡¹_ª“ª×š+ÜádäKó» û„'ž»r‡Ç%÷â0PMɽtîÇr/;<2¹÷£T]î]ŸÈº_:ä'?T]5ãÊôPuçVaŸ¢?1–?CU89óÞ™âr°ùl—”û*ŽÌT†¾ˆÏÙˆ„Ó•ûEµ¡Ì^—kAîkwÙžPÙô‹.S²™qjn‚¹Ã‰²êqk—Ÿ•O.]Ñ,Ç Vå\¸VË×#ãZ[ßwo€Ó4ïçÂ''Ë5Y8AŠË£¨ýêñÿeˆÌ`ß3ï¡§ðwAîOÔÀO}ÁËr@îÈBˆÌr@îȹ€‘@îȹ w° 2ȹ wäDf¹ wä€Ü;T™ä€Ü;rxgÙÜ»Ó&øÒNÛd^xs¯· HuŠ Xý6›þk|$qÝ R‡G%÷,ëžsaäÝ4_•Ú¦æø¦ûÖö©¾jögt}úóºƒÃ$ JÞ—Þí‚þœîrÃ7Ý~u=ºßf\»;·=¼Í ·ÀS6âý?xý¯Þ7õzÛtÇ;qtG‚36ƒ3ƒ;dÓÿ¬¤Ü7Ãÿ»ÛjÙ ï×ÁïÑ÷èOoî­lvñÛÜ`òŸ²qßôZlÝXî@v­ÜH-¸7Ò±'$¼tw¥@§ÉáÙ„?v£_'þm»kƒyê.z`–o%w¥E‘ûmÞRdÝw×Àºëruœ)wDñÔáŸ|3nü‚{2î³ ÜíÁÏØd¿%Sî’¿5x¿ã®Mîéw‡'µEâ!òD+ÝŒ˜³T…0²ÕÙ³†Š…!Þšœôò5-‹Õ™íãUvÅ´²%Ó‰L‹é²IÓ"š26‹-2$ÜLjUÑ4[K6Ø×H[Zº±h‰Ln‹&±«²Kd¶d?á[eG(~O™ä߯¡Ú¦¹ fakG(éÄn xÞ›@R-(¬LT ¢¨zê6òyb‚¬°ªm M°QQ T¿ÍÀ|JFŽæ«å©T =O ¶Ù£)ñB!ˆ#~OŽ&~PpÂã1;Û¥R¡m9ƒ.‡ltˆ…:»xØ£$´tГÎôà^8ÚåöŽF£P±®ÍCGujY>ÊC¢«– Æ(tØðB Pñ¶‚­ ÊC ˆÍð‰9H‰Er,ö‘iÒY’;ºs¨_uëL0š3ŸR†ÈQ‰ê­"VG¢ ÉU¡ýÏèaQ/“TôbUÄ@»§CÎUP.Èö6 š ÛЃf¼´GÃ?_¤šX¾:¯ãðšV%íÏ›„|AØþ $))M ]²‰ ú&Ñ`"ׯX1̈_w… ñ q[íî^6‚‰KÄꆫÎÖ-*„ ¨PØ K€@=§yÝ¸Í h8„*Eª7ôqulègÊwÉhA‡¤€h,±‘F¢hª3´P´¼xd ¥¸D4òÔÁ:“y—HÄÅߪïŠw{™˜2‘•®SÉœJ¼Wq¶ÞçbU Û¿óàp@‰ƒŠ—Ùȸ@‰ç)Âmf¢[–þh %üB„Œ’×€²šçØ X$þÙX`L"ûÐ{Ý…ÐQhâ>™ )ÓƒªÓÖ5AH‡+eÚT†Kõ¨Ÿ¶Œ0•Ô‘èa”N&£ÃíwK”e«û‚* HÀÂbj€EXBnÒx²5ÿ â‚;:9|EËNeÃo:-º¿ZꟌ?÷il2vöä8RŽMœPà+?£ŸÅ&ámÅ&±ó ¦LìJŽŸ9Ž4ùqw#‘}¼õq¸éí¬?ùê?µÈ—V;¬»F`­ÜýqloÛZ8™íOË=ü®sÿÚ¥›? k!yÕ©-~?¶è¾ÝËŸrçW§vû_\¿z'òçÏœ›ó·À V¾äü±ó ¹·±$=kaí~s¡×æý/…ç²»Ä?¼ÒT½¹æ‹¥õµÜh¬ˆ¹fé¡{ù͵ÆwO=«§ÖX{ÇÙ£ý%¬«ZýÛÊï=¯¿&¬ÞfméãöÊ7oqþÀÙçÖž[[nÜãœy~êÙ•Õùev'ÒóÈáñ+ó'ý|9²×áë×\÷9¿÷@íq¸{ºé®ñë€u>/Dur 10/Trans<>>>>>endobj 299 0 obj<>stream xÚ¬XKo×–BՇݴ0Ð\ *̈/=¬,Çvqáè¢*œËá%y£á 5wF¶°‘UЕ·MáBh·]dÑ^EÜfÛ¬êÂA„ q+U DB§ß¹óâŒ([j4ïÌ}œï;ç|ç\nLùY†*>æ˜ÛdEü½4˪eæ Ö˜,éG%V™£f{ryËŠx˜|`ÙÌõV*²ÕæÎWñ¥>}Óf^K0.kq»^`NÃ6Ûq|—™Ü²jÜ\WlKZ³ÙBÔõi7·Í=éØŠu\gSÖñ¦¶£_v¸R]\}kræz1:túÚ¦°½ÅEý_ø*¶gš9µ·„©ŸÙK¥2ÙkÈ Xa3Ù´ •žM)WiʲP8VEgº¼-<à6>ÜôœV)æØÖNdÏtl‘·ÂkI»É¶ZÒl1Õr| ˆ° _#ØÕaÜ4 ¢½jñJžp­Ë q…ç»6Ûð¥¹níä5Ø-Ñí ÷ZÜËÙ #‰]S(Å@8Dœn:M[ùŒh"ÏY0½ÙR`Îk nkv2æÄ³áj†i¬ÖLþÒ›+ eGp娼f¿l ƒ]QÌr°ˆ+6„vv@6BA v¶¸gÂ|UÀT§£MÓ¡•9>* uÑ@"`mÍrÌuQ7Ø*xø‚®µƒ£ô¡®oÛdqŽeò¾¹ˆØpQG»*@q¹¼–SW™óáÆºC®†™D/ àQ.8TÇ’âùÐó/ObG«u•›u:8!ƒ)¿¦Ä†F !Q÷ksQB¯áK(c¡´7uZÌÔ0µÇ„¶VoRca›·;¹Æ8DK€rhêÂÍpC@ 'GQ%ÎÓ–Í–G¼~–>äšB¦%a©:”jkx˜©#n]žl¿v‘žè˜‚Ñ™¬q¬MSìÂQ.<µvQ;œâÖ“È_æn’s²PÒ(B€ÁÅ„)`1Q AÛ¸jÜ"ÉÏN"r¹…¾†[_Ê(Ø)ÂL r‘Ÿ•¼ÄZµ%Dgmzíâ©ä_E¦‰’ÙKQ‚êDjs›7¡°:Ìeº²† “¡~ÛbÛ•&aÉ*äjª&À½mŠN´Îõ)½Iu†R>W4Õò<`í,2Ù OÁsˆîºxJÉ)±vhYùê,¬Ñ Ppäê„B´šÞ¨¹”ºÂâ;HLLjòqLꔨ7|Û Ë”®b$è‰K VÎ`Wc4b[˜¾¦J/Â+³:æØž´}lžVoq ÉÿtÚä.ò_é€Ð~m.µ ‚u‰”ÇsMŒ‘ßv¥‘?š’à ËCX̬ö¤èHS>iZL¸=äë•ýL¸”Œàݧ¦ ªPJ·:-]¿¹"tƒ2زOñ,FŠ¥•)b¢ãŠMéøJ—ÿ¦Ë;-í­¸8p|xä³åHjPÂ7YÁihÈ>Ê ‘äzÕ¨F¡[©stlŘ7ØkÙLÌb<Õ’Ä¥PçvZòÈæP~tb‡q¬KP"w à(õ! "ÚKEÖi*7¹«yÑ‚’á0ƒ­Ø¬í(ÖA¦Où”öåK“›êÛgN¦Zì7Ò”°=+MW"UÊ“º¯è b¿ž:É UM|˜Ó2IÅ‘gãQ-¾q“„-âÂAþ:/ ×i3ží÷òÝÊÚtõÔéÕëZº)‡Ã•q‚¶ØÂßõ QzDjPÐÝÔA*¢1Ûs¦ñG.ðHĸ©Kªn0³®Ð'ž¹Ž•íl+د’FVÀ¹ª±Àôõ!,D¸_;uë¸uƒþg•yÊ)½®t c˜ôƈ©zB8·:»`”‡&ãB“’^Á-§d$–Ç^IíÒªˆÄaú^ÓAA” Õî{ÝdL-ŠfRZ/é%#ÚbBg#=?R=wRà«–C|ÙÔJ&æ«¡tIb_§µž|´¦dä£'U¬°º€-ää9ˆ+sçG¬çŽF\® #¾ 㞉:‡Óφª€5ª(: ¶$"#ÑhàD­´ÑY[Öáágã.ÍŸ·ž;w±âδˆÃ¡Lw°Ì [Â;—DF=î/DÚáŠL/LWLÓôÝäö‡Û„îfê)˜r _±£eáe·Èvr„þWu±–Ž+½ùè® ,t‡£[@ÒŒEטHº-Ù–Q{À¿ª-ÉoÆsœYNªZyŽ3ËC•N¦_\Xy¶hD]€ÉÑíÄú‡\NJØP<Ç@ÊZA“Ñp,ËÙ"_ȺD¥¡V^ÿB£›)ÐgZ¨_~'#þ5\&XXóyb×OÝ÷"kcvŒJÜÒèd?@æÐuÉnzåõWP}cíÐ/â]b;•?¼ýÒeøÑ–¾üÑ7ê±æv¼æÇ©oX¹HΖ‰ØrHncrƒ•Œ¢þ‘‹²‡æÍÏÓ'ýÔµ2sõŸÍ¬Ìܺ±ÌJ/_»^ÂßðÏåŸÏ¬0ÏõÅÌOöÒ̫ܙåŸ\e%¶òÊd0{1ˆþtƒîØÄT:úgpôŸtô$Ø;=tÒÑÁÃ?.]HFoÌ_§oûãÁÃî‡ïlÜÿ3}½»ûä÷KOß> ºíî¾ÿ^ðääícß ‚Ï»÷ヌIXùe|Ò}Ô¿ÐÛ£¯zôøøÃþã ?˜ú’fîö‚7ǾÖ7õ»þ{'Ǽ×; wýöGƒ_~û¸÷»Ïôh|·wü½î Ö¿hôvo÷ð·[ÿæ7h4ÑßÝûƒóþÁo¾º/vŸ¾¼·´ß{°|ܽ¼úù£»ûêÁØøÇÝ `ÁŸNûcºÁÉ;ƒÁÓàƒê…n0¸Ù÷þј93ïî†,÷ÛGA)ý-Ø>ðxô4è˜ýhÔ æ¯ûѾè–¿h~Ò{w)œy¯·?Ñ=øS8:N‚©þa%õ‚~0uò© G¿ ƒÛ½G‡áèûwwnÞÿo8úÿÿârõä äÿÿ-ŒA D÷œb–º(¶E·&uåB“1ýÐÐÖó[¬«ÉLÞ¼ ‰Ýõ„3è‰FåZ× »é>.N°9,‰!'Ÿ sˆ!âîry,mz9¬(';÷nKoQ­¢êoÚ«2ª¶– ¿¡•Zâ–Ò6ÑxÇ˽ ‰‡øù{‰.endstream endobj 300 0 obj 2409 endobj 301 0 obj<>/Dur 10/Trans<>>>>>endobj 302 0 obj<>stream xÚ­WïoÛ6ýž¿âàbh8jì8¿¬ÃZ´[ЮíZÅ¡%Úæ"‘*IÙ5†ýï{GJv¤$N?, Y"wïÞÝ=};8I.Î#|œ_’]Ð ~Ï®Îèr4$+i~0·tzÎiqðj‚m'¸¹ýÀ¶o¯hp‘œÒdŽÕ§¾ÌG }>]Jëh¶!ù]e.&¼x{Iƒ“¸üx8âÅ“¥rädê•Ñ„K¥½Ô™ÌȾ¶&«RI~)±h%­Èim“ß”2)—VÎ)½h΢Ôd2¡`Úx¸Ç|pdž|¼•+%×dæ$òœæRøÊ²ÕÊSa… W…°^"¿—Ò*©S¬˜ m6Ú‘ðÁÍB¨œ]É•óÓ£¤>-û«Ã’è“ ^.…Õ¼”c0¸è5@ôÉh‰{2ú¾+ÉxÌà¾ãEFÔ«ÔÃ7+©}èC*­YXQ ™¡ àZçÙyå“uÀxFw‰},AüVæ›3V–@‰8÷P0¦ëu.¡¿LE)ÆiûÔb‰P$@et­6·(9¦r”.Eé™>…Ø`K^¶a¼Ñ![u²]p“!uÈ3g ÿz†“†ÊAÞª´‹O/²ŽD¤ ó#¨bSnˆÚ'gns“çfÍ€°/šzJ¯”S³¼Í¸€FUR‰½†xÌW ÷­ŠärK³Öã&‚˦އ'lža©G^Å¢íødåuëA{Õ³à:žU€ï¾…ðõ#{uùP"ˆÖÂsee$ÌZ! Pµ€ *7 &_ÉßQ2ªmŸŽ’óØ; }Q ½+t÷hç!‹º4BPᚃÛ4‹™L‡æá²Ñ µ f1JµP~rîÁÁLλ-†:¡?h¿ÃU33Ø…@Ÿ¤ÍïVN˜‹@Xâ—Ô¡ãO_n~ëRj½T锿€£nº`!ðAk¡áê ]f&œJÁ M˹B .À¶¿«Ëµ±J¥ÍT­Ê3F½¶R^­äã´ŒÁ¥A`$صrÔæÐp\‡;hŒÄ:~wM;gtøy:¦öO×Z}øÏ/éù͇Éóþ~s£§Ì¥³pæ\5£ÖhËÔûºä¦G4±µ‰[fv!™Nuïúß'N=ï?tzt½ßÀù¸ýý‚á½47¦l?¼ǪùÙcµûUæy?vâz:ºÔªÒ7Yå±ÔTÌÜØ@–qÁ[@Þ¥nLHÂ>`*¨•XË¢¡‰°Ôâ©)“E*KtZî5¶ÅÛ8Ò_O>¿?~==ŠdevÏDzKóJÇ}—´+s+³„nt¬©p²³-:æt™‹ ÇWHçÄB¶'ÊÄp®ÙDŸÖ< TÛACwA2¡Áfzˆâƒ§CfŦ|¥ݧGŒV$°n«ÔêXüaʆH š õü{è] bh~mØÂ\-*˵Œ" ÉcsÜu'úq/i¥LÕ\…e“©ØKc èç»q¸5–Ω ’† ¶¼o²ÑA}K/±ßSPbºãˆ7mžp4ꉽ;aܧjStõûÌíSïÓͧ7=*!À¼ãž´Âº2NÐFïTg˜ H*¬¼ÚDGäÓgÔӣដüÁ‘Ò(#LEã‚áSNîa¾»yÿ~ïÁä«IìkòR'-H+çà04ÃÄlv'ìë9ÅeZ3I2ÅÒhdE-¹·²¢-®ªYTQ¾Ñ¡íÞé8÷~`sãgù)Ü-©ygÞmÛ‹‹p¨xÊê …ñk;Ó°bÛ³¸xu—<ô9˜Áyˇß0jIÏÞ„FÊäQñÌÔ|ÔQvØJóK7¥W•ß¾oeÓq‡<{5î¸ë­³F×od÷O „õë¢iåBX,v®‘¼A]±v×i^e[5cE³û€~[ ghm)TZ 7…·™’ßµÏÃ+šh<Ù NCCP£”iÎ!l ʌ9hW5SkзûÃKô¹Ò:FìÍKg mhÐÐZ·ðáQ)Õ•ãÿ£œß§æ[û9;WWÃäbÿ›ûÙà”ÂÖá}39øóà?zæçÈendstream endobj 303 0 obj 1601 endobj 304 0 obj<>/Dur 10/Trans<>>>>>endobj 305 0 obj<>stream xÚÌWÍoEw„PDøÈ ¨ iQÉõG?H궉h›´–P[Q—pãõØÞvwÇÝ™•¶â„8õ ¨(‚+üõ€®ôDQ+¢ e­8;¼™Y¯ãuÚJHØÑfßîÌ{¿÷Þï½y>7”MïFpÙ—W&[CYøîÞ³MìÚ\‚ªC9õ(‡v¾"ÿ {è@¶eáatm™™,šHïDÅ*,‡½ÅJ™ãز3k¶Ps£Nܱ♡,ڞ˪5Ó³ÄáÛ'õ’R²÷eï'T³ŽGS›­5Êê¬e^]ØliìÓÄ®ƒFN N*h$…äæÌL®ã_rÛ[ofOoŸ¬›œéW‘ëÉA' ‡"Ò1–.•œ‘½S à„EHÃtjȡ͗”’‡P±Uˆ…çbGÜG•–|žI¥d.[Û÷õQ\jpÍâZŠ^ö®ÜŠ,J÷¡P>/_„ '|%©¸}Ç.¹æ˜cÄëÀÇ26Î"“!×sˆpJR„‘sh±æv]sV¾ã¯V•ÔiíÕŸ 9ÉPÓž;”ƒdrÄ)bœ6ÒèY­”ËG¼n²”D" ­ wÑæTáÔ²ûâÖLG9¡¨…°GçpÓROržwý«RW>µá‰ƒÊ°`4¦C·öttªàÅí(o`·géY‚z&©Cz-Á}''Ê…­~X1eac‹S¨“y¦‹Ï.WF –—nF{Ó!ûã„6,èdØ6-»à¯Ç•¼ Ðâhm<Ð&Ê.oB:Ä0¡Ô‘A3©Ãò±¢F5)·Æ GN¿¸äÐôÌ«'_+ŽlDNìT6WA5…ÃG½>½¡–2·êx– !µ – ÏkÂUh<ô@Ø~Šéž M'Ÿ=)%Kcñ}@‚ûnѨï·³Èu€E\†JÉfÝ4ê=LjRϪHëê…Ú’|ƒî!5Œ»’&’-5Ç…¥1Tö8´@ƒ˜«ÝZeõŽNmš<`ñ˜‡­‘Ûú8ZçR”ʘ/`@uõÔÊqílRLôë óÙ§*ŽÒf ièÐ870ˆ[%˜{.aàiqȧRÍS=ÕP„@`‡5e-±(6`$‡B¬2ÂÌ3ê±1ÞÓD7¸9ê©ÎÏqÄNx´©noëššÃLÆe›PY€½L]-ó,iš²iV•Z¸¯÷VðŒÌøy,cšŠV yãvl+…€ÔÊs¨A\ uòŠ€XézŠ;P¡Âk•ºmòTÇ·^ô@•š&aä$ '÷MCáè«‹…7¦ã}  ) ´F8@€TzÇNz9ݰ Äç—­ˆ»A]ìš–lRÄÁep¯BªXjT´†šˆí²¨!G¬¨¥”Æö†„ÝìÌ•ãt?j8½âZ/nÐŽÖuÙÍÏš“š®ÉÉmš+§taêäáÈðž÷­t 6¸9+9ax Ù~P¸rµ°Žý¸—ú±Þ6ž¾cõ `‹º<ÄÂÈç¢Ó|ãmëÿcœªj¼¿ˆúñM´ýÛ„©F¥G›3OËJ©Ó‡V¹Ÿø(Óg¶‰žO »an²êœr˜£ªé2Ùñju%°Wªž.C;&ÒYõ{sOZý¶Dããò*u2O¼™)d^?|åöMÏäà«?“§3Ä]dN¸=™#hçîÌãáGkáЉEøñ…ŸîJ?‹•?ºÒm±°²NºN»ÒÒõϦ¶DÒ­Ãã“ònq@\÷¿}ïÜÕ¯¤t+‘xŸ¿ýÉÔíà¹AqWøßùó_~.n¯½{-ñ´¿ùW/‹`çßBÜño´·´ä­’n­~Û¾5è‰á¿åÊÅ`A¼x¼m¨wí¿ÖV—p«µ$ßµí‚ Ϭ¶>¾«¤ùÖêóþcÖ¯Rz·5¿üQóǧž”Ò`{~áSúåÒÏ qÃ1˜¿·oaj±umJÜô/‹#¿]Z¹¼È®%núB qéwñ˰XLlñÅÚ{ApO|ý8õ˜/‚cí`U\ù ¤¯ae&–Ňó:JâJp~Eä:Ò÷âüJ€;Ò=Ñ0Ú¡ä‹åÀx¿ýÊ…L-ÿU»ÓúpJ¯¼ÒZô—¾ÐÒªXÃíåZj‰¶^û…iéoµn,ké…ËÁ¥cËWÿÔÒ?ÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨IFf A#XÀDO!<±$9#µ¨X!©R!µ"1·¢Ó5„+ *Û3endstream endobj 306 0 obj 1895 endobj 307 0 obj<>/Dur 10/Trans<>>>>>endobj 308 0 obj<>stream xÚ´XËoÇ—FÕ‡½´0ÐLm·’P™%êåÄbDzx± K­a—Cr«Ýz¢×6r zòµ)\íµ‡úÄ…A·¹6§ºp!hœHU‘Åíï›Ù]zW² ´(),wv¿ùž¿ï1º58ž›™b¸p™ženã;57Åf ̬:˜Wòlršþ {ðâ2¶ãarÁ¶±…Y–gËUÐÎpS6Ïç–%*̬9ÒåŽ!˜é±†pmîÇϱeÉšÒ]aÜ•Sa~ÝôFYKÌàó…ÝÀ.×´ZL¬uîÔHó|é‚©Þen¬xçF–98¶0Îfs“Z³Jv›Þ`™×Kv:ÅTi±Ä=·2Ôv‹1ÊçÏè—7¹oÔ…{ö‚Q~%C¸Ÿ¢4ìevûNi$M»OŸŠdž´,wj‡Sº‚¾¹Ê}Á¤kÖLdðIÅÊî|ÇLˆ"·¯¾vi¹øóË9¶ÈWé tgA#%\CÔôû˼&¼KºÁ<Èò„ÚžªÁæ=‡¶Q²Ñ±f*–‚X#Ò–/ åù”|ÀÊ·d«˜žxž)i–o"@i×Â*j¹ˆ‰ŽïÇj’Û¼À†*õ`“Ý@jxšcœUQØ~¼T¼’$TŽÈæâg—áölÄ•ÃÀ˜qb §B.“Ì6×X`¶¬Ë˱¢?ì®@‚6$Ì+[i`’FéKâmÞÒ5a´%àipO Då"‰—éÒñLχ^à‰ Y‚{(>AAI)z¹£˜ ±ð'¼k‰5Òm”x¤C„ÂÄÕY­R ½8©ªà~@8è».I7pt ,á“ùeá!½¼ˆ¬|˜‡sìf½gÂ_BkÈ&Ò“¤hMMËô[Ð(®D郘²¦é×%yIˆÊ| AK:S¬E¹¿*Ü«›µ:k¸&ª$–[¬"ª茒Ôî*µ€ br2 jø!RGŒÔϸ†x¢ödL¤Pª•Óe"–Zæ†!4HâNˆð9r(ðë7Š×ÞZ,^YÌ* Wâl¾"¨4:Hï²0x€_…:ÒàÝ@t)=•/Lê6$)¥E%pkDåµL›ÙPUø¿*°:h7UÕ›¤+ëcÊ„`Uzn¦±BI÷O]½U`R Ä~˱…~‘e°ÆM,¡Ä‚ÞÄ åd½†,)^]Î"ò…Mù4‹ƒØžEéÞ¤yö‚&)eÛaê±9 ýléF~hô0b£¬~@¬:t“»;µhþ¨TrN½rçЭڢ|l‘ò¢f•àæ§ùŒÙÇqŒò˜¬Wé—ΦÑTt¸ëR»«¢š WG‘n©à#rº¡T1RÕÛ(UÓYêËýF#“£g ËÒÀ)=›¨4 ã!,†‹é¬ÊUE5“Ä’@êJØ­z˜! 0g˜ïãP éôQvW·TêòeMÄO±³:lÁ$òßóE©êj±­\R ¹BäøÉBnš¸r9vyÍ\Oœc—bûMz8 ZWeS nÒ8P‘¦ëõ{ÿ(’ˆyÞ°$åYI•›&PTáå#Ì’r…Z”‘›KÔ@ß}à©j™—Îö2ÅÆ@/E%Bó!¿x<>Ó|~B,•~‹M€É³¦.µì²´L#¸DšÖÐ T1(H?QýÄߊ#›ŽžñŽÐn›PO$%­ °Š›ƒý·Q‰îœÏfêPF¡¾ž;[8”ÍÓeâëfUYæë¡éïF”¤q'ø…Ô…ÖÔð÷[ô?A¸à¨5pŸ£^èŸØì‰äÉim$5 À²ŽR÷æª{ty¹ª!žJ:ˆ(¼+ÒÜ“´¦Äå( JÀyäõr|ÖÝý@¼Cth” U'é ½¹? §£‹stŒé˜)<ò_u›åz\²´¿0|Ø„x‡2=ŽE²â#‹:Ä`G‹iMMë¢öÆC•c] £&ÓOú¤~%ög£ïùntJ#þѬÂxY¢˜FC—Å BƒÓеÅ9Å–c~!e¨· Ž¸td4шô³iZV,qŽæ Ó¹)6ƒëtHVqÕi@¬¹Ü¶#}® ×B-Ž'nMŠsL O,——o±‰ÙܸúÿÉ~ sS¸ÎÌŒãJÿG)Ž]Zzc¬8vãÊE–õòB_ý¹ðæX‘ùn ÆnÂsc‹lrjìâõK,ÏŠ¯†½—ÃèÓÛÇOôWÿ w¾ì¯ž†;Ï­ÉþjëÑçO&«'Wf.£»Ícá£ö‡ïÜzðgZ=øf{ýéïçŸö¾<ü,lÿµ½þþ{áÓ½·|' ?o?¸÷ˆ°óë0ü¤ý¸{²³A·jõd÷Ãî“ãAxâk¢Üìm„¿øF×Pïº_mìínñNg‹Þuíz·¿»ÛùÝgjul½³ûƒöKÖ¿hõvg}û·Í¿ûö·hu¼»¾ñùþÖo¾†Û/÷ÖŸ½º1¿Ùy8~ܾ.~~wçÞ¦÷pàØÇí0dáÝ/ÂOO„›'ÛáÞ;½Þ³ðƒ`ÔKí°w­ÛÛ ïÿ«@9Öëm‡ï®k/…÷{k;a>^ý-\Ûéñxõ,lÝhÕ·{Ư»Q±h÷æ·¿ª}Òyw^SÞïlooýI¯výðDw{R¯:a7<±÷©§W¿ {½·:·õê‡÷zw¯m?ø·^ýÿÿârõä äÿÿs á2P0PIÑ0Ñ3ÒSp­H.-*NµRpNÌÉIJLÎV(N-)-Ð Éâ254†(42q]C¸¹Q»ÛUendstream endobj 309 0 obj 2277 endobj 310 0 obj<>/Dur 10/Trans<>>>>>endobj 311 0 obj<>stream xÚ¬ËnUÔBá‘P%8*•â¨©í±—i’ª¥/  bQWe<¾¶§ϸóHjZu…XuKQQ[]ð-ê¡ØÂŠ¢V*($”±âÌåÜ{gçÚ. 1¶Æ>sÎ=ïלJ%&ÇoY¼ML]~ƧÇa*››@yHáÈL°¯V:¼€ÇRø°}ÃcÉcS ¤`¡Œ´“YüSŠ[Å%Ýò£|ÏpA7ñ»d-êfFÎ %¥Â3ñºª-ª’Ë•=SsuË,Ä £‚&âË–1TÇyò!Õ·J@S £ˆB Ÿ‚é,SñMË&c_ÖmÇb1¹¦ì¡jZf£†6€jÛj™˜ ŽE† •Q#QVñÑ\I~.Òx*‘Þ9æÞ£K(éÀ¬£WLÕ(ÄC½Ü} ˜™…‘ü[ #cO¢ÕŠüiO ÑJ$:¾¯SöFñ1©·j•FÎŒÁk"DÄúÀ¬@F¾í#·0úúnËÛ>^®êZjD5Y$TWvs´bÒf·àŽ#`•y|ê}R‚žŽÝáAG¼êì„ðÜ’j³Ì„eµá0^6²/ÍôvˆëÕ¡Øco“2±‰©– J¤f™Žk«. Ó¥l†µÌ²›\Pkuƒô>(9tu‰hcV%FØ ±l–|œÎAX0?ÿº„Ìä¤YÆ•³á6ªEƒHã9¨5`Ÿfy¦Kì™”ÌrBf9ÉYr[=͵l =•Ç+‚I–%ÄtàâîgJ Ÿ!· qÑ([Åø[2XQ ªXˆïã†Fg•´TÒ’–JFpÖMÝ Ó¡”ìÿAæû÷GÎ…ŒËB&„šºÈÊ¿„†×ëØÝÐöŽì Ÿdô¨/PÜD6ɲÐðôlZ’ŸN‰œ‰^X8ɨJœ’îÔ µ!!ÓÝJgþ9@iÙ]ÑIËŽK‡Ž³Iݲ]Ñ`:Õ—¨¹Û–UÛd5J9Ø{¤]Ía»ÀÊ c½‰P¡Cg £‰BÁÜ+qdÞ•®\'¿È}! ÆA¶iº;@™”dg†5Z‰I¡Ö ë4Þ] ʆZÁ`hØ?œ²gÔÙ,Þ±ô?(.’‡‚ƒ°ô/]”€7ô2ß\ÖܪîŒõKµîÕe×&ÒaTc"ùm-ÛkD»þµ#ð¶gvæšà ˳b”‚~j"F(“ML0}³‰ îYz-l$=RW ù"µ¬—öK-r(£„#ÓËEËsÑcbÚBݶXëĬÑ]U̶ž£‚öèlÙâ‹»ŠûTÍáÓÙ&5Ý,q1fi÷fge&à°çâì^"62aCÓxÄä‰\øfÈs›¨›u|Þ[èET 9‚¡»®A ˆû†këÚbgª¿£ 2­¡qèuCX5wÇ  ©ÃÏá ˆ«:‹¼¬Ã+8‰¹áÂjÐPe>®±"Wu¶\´«Àsy_Wóo Ñ {•†—OýØàðô3Ýü}ºOW7; ÛÖ´~û‹¹=mèÞñÉÙöom€Þöï|xþúW º‹=ã¯Üÿlî~ðÒ }Dýoý•›7èýí+·bÏSú«ýò $“QúÀ¿ÛÚÓ\e9toëNëÞ G‡ÿb”kÁ*}/ötKã¸ÖŸ«Û[ëj³¹Îp­Ú÷ÁŶšŸ>âÐÀJsëeÿ)ã]i®l|²üÃÀsÏ2h°µ²ú¹usýã)½ë¿¬<>¸:·Ö¼5Gô/Ó¿^Ú¼¼æÜŠ üèS ôÒoôá0]‹íñéö‡Að˜~ý=õ”OƒùV°E¯þ„Ð×H™ ‚ zmEx‰^ .lR%‚¾£65‚ÓºÖ !ŸnÚG­ox,ü`nãÏʃæµ9Ayµ¹6è¯) -ºM‡[5i‹o?tô> ‚³Í»zårpi~ãúúÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨IF As 0×DÏXO!$37µ¨$îÂÈÌ…Ëžendstream endobj 312 0 obj 1945 endobj 313 0 obj<>/Dur 10/Trans<>>>>>endobj 314 0 obj<>stream xÚ¤WÍoǧBÕ¦:ôÒÂ@ó ³(…R$eI–dÉ”cÇÜ&°…ô`îpwHn´»CíìŠbUÙÈ)èÉצp!´×rè>EÜæÚœâÂA„ q*U DBÔNß›åJüP¡Äå¾7ïó÷Þ›]Êe¦§/“x9;^rø75;3“gÀãPׯaâ,ýÎÐÅ%ܖLJÜ–½’ƒ™Ì,•y÷.™©Ñ¥7†r06ž#$·¹áRkòRº&r…Ñ9âÏ^a@HÌØ™IÚyƒ;ry2ZŸi¯§À`.ˆâª%iסÈÑ^f[¿á&ë`T¸±l¹e0™ÏÁ¶¤/¡Ê=K˜–Áläg® w}K¸Ä†ÏÀ<Ÿà¢¨rWï”™Hk‡wcg"‡jËæPHý”ø®£‚Âh·Ç°ÞCÃéȬ#›zJ}0*àÔ!©™ ©²Ç«…”o9<>y' Rx>¬'Ùüù|²¸˼.¡Ã„>#Ž1ƒ A©$H+¡PxÜ«,JžpÀ¯o @y.ŒÜI“±ó_A …”¶¶0š†‘Û‘ådͺ¾Û(Ü‘¹~A&•÷r÷snt=éi¡Õ™L¦wEÚœBw6ÆVÇÚF7–±v)F C˜A»p×à@ñ–ß³‡{Xªp,|„@´L ƘÀì’KˆqÓF+_ev!e§ľ(s ¶5˯ônb6óœãwÅéJ³œªÍ Ìhwl)f‡¼àžÏ,7ò¦h cùÜ×ú4:„Îð5FâÈ/¬:këIC«ÇÆGÂH£ÂÉœ™Ó´ éÖîŶÂõ=awo }S¡̆äÍÅ«ë/_¿ñ‹ó2(ºiq‰b…PÛ˜CÝ¿¼x@X¯–ÇÍ^Aš’mƒú0w š¢¹>$ÍR`ªXè^±JXÚÉ ÏÓ2ªž¨²2Õiàòµ*6Q”È=OD±“™¸6—’€¯tDe®_ð¡mÇGG^lÉ¿ÙJWÄÙ}ÎR»ædàºQµùÔp$±'Ó°ˆO,w¯¸Èl¿"‚r…¸Únà±lD ë[ /ÀaËQ¡zjÂ[Ö˜#¸ñUlWÁT°åÙ¨9Mq PWø°Ê½:”l¾f±¤p8‰“ºÒ#.šD4”J–aQÅQI]€8$™^ üCm)€u)÷9 q:ÙŒ·—gÔ5¥¿†½Ë€Î­qŠ2pS¤é$EÆ i8ª½Xxæyg‰‰§ Wú”T©’•9!îrgmvvMŒó`žìiŧ{¹/ÑÙM‡Ìð¬*ÕjF‹Ïõ2¶×ç%–‹kêž¡ûcæ#8èBs¸®†Bйè<_ÃCUþäAg ,NG˜ÝÓ(›‘ƒ' C£} ·»£ÇŽp8–ל…TOøSý‡¬ÃO¯ ìªçóZãÏeÅ*ùéo!Ë(’,=Šÿ)'ŒÎ˜Kh\wJ #^¾qõuüÍδo¯-yçVîöX¾6–Ç7 ƒÛ}bõÁÝæxÊ‹ê†zÀ,­ŒOžÍLáëÎ éÓ©“NL. í²Ç‡%6ë×ðì„hÐm³ÒÆDb./ ­À™™LN¿kÍâïäì^§§ñýJ¿s-f/ݼ•]ÌÞ¸zÆç/_ǿ蓿ÅYé<û+lL³Ùk01•½øÚ%|e[|eH…‰ÄKªýi¨Fbpøˆú·ÚûÏõTmíuPĵóè/ §©'W§ót·= 5ÞkåÁ߈z’H|·±ùôO Oà ªOUãÍwßQOÞ|˜xQ©ÏL¸ó+¥>n›ßZØn>\P6î©kŸßÝ»·-&>l(êîê“aµ8ÕPo…á3õÞèÔ ¾Ú ÷Õýz9³a¸«ÞÞŒ¢¤î‡k{j<¦þ©ÖöBSÏTÕhµ©†Ú ßµþ®sÑv¿,Ü|{!â¼ßÜlìü5¢öÕníNDTSµÔðÁ'2¢~«ÂðNóñnDýä^x÷ÕÝÿ¨ÿÿÿârõä äÿÿs á2P0PIÑ0Ñ3ÖSÉÌM-*Ö Éâ254†ˆY‚¸®!\\tœkendstream endobj 315 0 obj 1950 endobj 316 0 obj<>/Dur 10/Trans<>>>>>endobj 317 0 obj<>stream xÚ¬XÍoÇ—BÕ¤:ôÒÂ@3a HB$~ØVôáXªœúC—¤°Õ¦E¤ÃÝ¡8Ñ~P;³¢Y76r zòµ)\íµ‡úÄ…A·¹6§ºp!hÜJU‘ÅÉ{3»wIÉš•Lkvß{óÞ›÷~ï·\Îg§§|œƒgH°Bòð35;EfÎ!#åႾU g_Ä_˾¸ jy¸ÙùµÜå<™Éž%ËežÝe{Œr/¿5œ»\ˆåÇÞŽît,Œá:O& ù3iÝâøù#•“–~H˜'Y@߯&Ÿ\Z‡'ssø 28Cð†3yæÊ,:N´ýlôhLk%ÅÇHJ«ÂA(ä{BRÇa6)Õ;a¥í2YñmAjnUˆU¡µÀeþ+Fd…ÅÆ‰¬WÙ¾¾iù°KZÒ‡]=ê¶"OŸDFr—æ‚XT°,Y½”?´Ç*eÀK¡dÄfà„Ë=&"- Õ*ÌKë¡SzKÂ0F"*R¡Õ*ó&ŒUŸÃ¿¬åÞ B@š¸G~úÊÒÏîk‘²¸T’â˜`/dHpÏb¤0;/ŽgÉU†Ù–DèX¡C%X£ º. êz+ÌUè’¶I=[ß ¸*˜$UÈ´o“ГÜIºR[ ™Ðf¸ÙHÀTÇkÌq¢Ð„ðªDR± g:6„¾ÎH‰1wÀHLAP­:='!ƪE(îtb-Ì#UƒÝž'×À9õ 'D¨mׇØ8ìí÷¸ïp!uĺ†0n— 9é¯@ÍA²Ùl'#Çu¨ø+uÉZÈ­U§1Z¾ ûÃ'ÄuãyòŠ/±Lk\VŽÓ=s©nÆüƽõR×9èKC‚8MÒâÐhpű-^»ò³8ÀC¡(­}óIÐåÖÁöiSWä´ÍLupß+Ž_€b®ð²„FÆÿ",ëÖÖ)šœ×q€E¸ 7.Ì댼ow¤¼UBy–ÈÍ#庮 <’YÆÎ‘>ƒËÜÔMwPÙbÑËœ?®ÁÓo¾žcr¾69oQhfçL`!ÇP¨£Ó•pãÂHÕ xlX‚Ò1V3ÏW*Ø%=9ô”ŸÀràÛ¡6MØ ª…!q™Å aŒF·3„–üu–œ €”8ã¡A©äƒc‘´èKææ PnýPªÌóÍ91ÛÌz…¹FCéÃ(åø¸NÌ\‡ÜZÆÚÖ£‚ ™Èš BXñèC˜§:ŒÖ’c†~LRlŽ¢­â^%j­BLÌ 5R32ÑQYLpð§”{bûx»Z”ð'8Qe/×u<š…dŸ¬ÒÃq r€hß°†@¤Ô0Á¦µm^.3M/º «³Ÿ.½uêôÔ–¦zˆ ^ª[@NFcAÌÄæ"4] «}håaÛ$=aÀª¬'ÙC‡ñ±çRncçpöL¥‘÷¨ãÊ\ñÐ2ÃhIF´ª¢8FW(‡¶6CèˆÁÐõÖéÃ’Ù˜îN5‰:ß>Ç¡…4ZជðklFX(¨b3B-Õ¼¸Y°%‘^[Ðø2ÉÛË<€Iaö›ŠDÕ*Å^šˆy›‡X[QɽPOꚬj‰hmPDÍÛ±›D£%ö…)´s­Äô‹v?~‰ãüréªfè´Owõ¤›-‚‘ò &&áK; — ö­ßƒ®Idõ­’ZvèŠ0|½Ä€žs°ý Ô{¢¾'NÐ&Sßùÿ«1ŽK¾4‘ÎIÜI'#qý‰Ü‰yܸ\§eûó*S’Aè â{½ðæƒS©â˜ÀñjIuø*’­ÞñpAø S鲂‚Mîš™Ü5¤sn‰{½Cª…ž ‰&4íƒlÿ€<öÓï;ãîí‹ûWi• •™hÔ,ÀK\6ÑA×@KjŠ|àAhêÉÍ¿Ž‹ †@™1Í‘¦,’Ž7]ããË­wÐXÝd%@6Œ<ËbæÅ#q ×ÁΪæ¸%Ô•F€† ó>NI™#Gj´Š¯O:©†ã8s™“ŽÛˆ`øµ@:löñ€bŽÿ¼uUùÖÒ]Z^#gf²yý%ÜlVáF¦§ñ¿Š[ʽ|ýõÜRîÚ•‹¤ðÒ¥Ëø1×ü¹%"ƒå^—fsWÉÙ©ÜÅŸ¼L déÇê=0𜊮†j ¬þ¥vÿ{°z¤6w»V÷ýƒÕöý?-œê¬^™žÄ¿¶ÕýÆGï®Ýý ® |«±ñè ÚßRŸ«Æß¼¯í¿soàY¥¾hܽý>æWJ}ÚxÐ:ÕÜÄ?õêáÞG­‡C¡ù %·Ú›ê—O·,ý¬õåæþÞ6m6·ñYËý¸}ó;{Íß®Wƒͽï7žrþ«wš;¿«ýcð™oãj¨µ±ùGÿƒíß~W©çÚ_Ú\ØjÞ[PŸ4n««_ÜÚ½½%î ~ÒPЍ[ÿQŸ¨­S µÿn»ýX}ø1õTCµ_mµ÷ÔÂêC̵Û;ê½ “%u§}cWâÕßÕÝ6WUÕjE«†Úi[¿iýUŸE£½°óåʧÍ÷ŒäæÖPcûÏfµ§öÕHkç¬Y5UKì&ÌêתÝ~³ù`Ǭ~p»}ëÕ»ÿ3«¯ÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨IÆ As 0×DÏXO!$37µ¨$îÂÈTŽXûendstream endobj 318 0 obj 2319 endobj 319 0 obj<>/Dur 10/Trans<>>>>>endobj 320 0 obj<>stream xÚ´WÍoÇ—BÕzia 8E!?dÉ’ìÄBäÚ /•Ñ ð¡,Úár(n½ôή¨EZ9=ùÚ.„öÚCý⇠ˆÛ\›S]8ˆ4n¥*Hˆâô÷fvIîJ6šC$âÛùxïýÞûýfööt¹¸¼Ä𱈋+,Øbeü.­.±•ÅÖœ®èGvá"ýYîôú&–•ñpøe¥ëe¶R¼À6›˜¼Œµ›Yö“¡Mdȃ0j³ÐvÅÜæ/¦Ël¾RÖ3ܘ}/}…F/g†³seTgwœ:·neGØ9žÑöƒp¸€ÙÞ¶‹‡¶ïåçvxà±ó×¶…2Þ EÀÎt¨óIdvžIaù^Ck5ïüåÓÞZ|[0§2ÌJGˆvm¶R®Íåþê9Ù®_ÒÍ_¡H‚Úl~ÛÌí!ìmî°W®°…rá¹s­zòskµï§=wQ>ôìÜ—˜ ÿÌñývvD§pé è J×W Q“Ì/,Òœ›-²Ží8,lÙ’I+°ÛaR½5vÃ\ æù¡À¸`f“r²Él‚mm.»ù¬.;PÑk†-P›­²†O›aËw]á5Œ×¦àðKçÊ!º“ý&³ü(@$—çksEvÓ[~„vñbìÕÂö$ÅíHx–`˜ï )ù–&7ÝI¬3é».½-æØ·DšÎ9ó cÀ%݈Gi÷=Ãu„ÿÞ{U¯Ð9 Yšø"׸é¬Cá wgãµèb'-“<^c›´mC´›d#i„hA‡‡VKRÓ€ò¥Ö-²u`$šî &É"Û0‡¿–,MHI3¹šRTÙµ&*©ïÉXŸ»éó[Kž%§üÚÕ—x_ }A©–6R‰Éaôªqqlצi^äÖá m!#m’.ð•§kfô†Ê@/\¡É»"É€ûìbÒd®5ÞFÃG ©–:Ê#¹K$ä=íȨqʱ<%•Ñ¡1qÊmªÕI»Õš‡žÖ 3tÍ_¥þ¯,^,.±‹x;ÇRó^РˬGÜÝ ¸ëÒ½5¼!û‘EÁ™©®ßˆÌ-ìÚæôm¶°R,ë÷ùUü_\]Âçò2Þáõ{}µtõÇ?)UK?zmU^¾v½‚_óså§¥*ƒòˆÒMÐtµô:»°TZ¿q•UXõÓj01ñ¢J~ºª;153²þ©Žþ3²ž¨½£1ë¡?²þqíÜÐzüÚò•Iú¶?©vßëöý?“õxbâ«ÝÝ'¿_{2øö”úDuÿÚÝ}÷õääÍßPêÓîý»ï`V~®ÔGÝGýs½=úª­ÇÇï÷OEjæsš¹?ØS?ŸøJßÒcýÏöNŽx¯w@c}÷ƒÁß<îýîmMîöŽ¿Ó}ÁùYoövÛùûä׿FÖTwïþ»¿ù–Rº/vŸ¾¼·¶ß{°¦>ìÞU¯zçèî¾|01ùaW)¦îü[}<£ö'ÎuÕÉ[ƒÁSõÞHê…®lôÇêÞ?`½‡™¥ÁàP½½kPR÷;Gª’ZS;GžZOUÛê'VW¬_÷ÿ¢kѬ~¶õQïí53ó^oª{ð'c«5Ó?¼`¬žê«™“¥±~©ƒŸõë»ww6ïÿ×Xÿÿÿârõä äÿÿs á2P0PIÑ0Ñ3ÖSÉÌM-*Ö Éâ254†ˆ‚¸®!\\Ëõ…Èendstream endobj 321 0 obj 2120 endobj 322 0 obj<>/Dur 10/Trans<>>>>>endobj 323 0 obj<>stream xÚ”XÍo×—FÕzia ÐE%ôRÔ‡%1¶Û±cÔ|ƒæq÷‘|Ör½oW4‘ÆFNAO¾6… ¡½öCÿ€¸ð!(â6׿T"S©J`¢¹yow)®(»¦ šo9oÞÌof~37Ƨ­…yÀ·9|;µ~ ¦ño~içfÀçP/êGE˜=EÿìÆø¹5Ü6Ó7ÜV¸¸Å9kÖª(½0;g-Àš3‰O,X-\ ì:÷ÕÔÚõñÂÅE(NÉ“3s$G"|ƒ{^ „æÑC¿í°6\— .ËÀ<¦/k>k@)D5çQÜ%jsq+ÚÎì@lp· ¡âH?UÚÀÀ•-2/ÎÐáMîÛx4«qU`® opßeû¢((O®‚ ›M©xyÊ‚sa€2 ©0ΰؙImÙ°ƒ“©¡¢ÑtyQ„€Ë* $ÊpE¾ã¡(DÌ2°ŠžäA«C]%¡ÆÑ¯  ùF0¢¾–ôס%‚ºWeDZ‘Úà1¢x”ã#4^¢.O*ô ,sgètí»€ð ¨ -„½Å]ׂ³:¢fËÐWD@qC­ÂAÌÑ$ƒÇR‚Ç:=ƒ‘gRáªE{ê®CÐnrEêɱ:Æ×¥Ì Ø¢ .‹þÈÊun‰Ðp­ÀÕØ)Lœ Î³‹g^6p¨0ެáq=Ä8P$qúÈ*rƒ[°FИœ5yMæk³Øe‡ÜoÏ@C%éQŤ4œŠgµÙmaÈ6Rª¹P =›,TàŠõÄñéã ʓ婬Æ}ÙHI•–œ§ë"c‘ðl‰ÞÔ²Jt:š(¹,@gQ« )¦·N° ©C¦cDŠ®FÌ–^UÔB_GªÂåqF Páà ô?ʼnÇ-d ÌÑlгfÓ¶QDø’êo4äp‘™r·àZ *L [瘮;„‹#.Yˆ<Æ)Ôtþº0ù¯]p+úMçª,VLµ=»îKO†Ê=ÀdXfCèa a¬rPþ$qš?d¿¶é˜ç“ %dð†`°úÆy>èq‚ádg?¼èUËA€¸UbÙ ³”6WÈKkR§°­‹I ÇеšDz?í#Y f'z掯sÂXT"DT± qÙZ)iÌ$]bÑZLúIc”4 Ú¦’Ü^´fñi†éb N ¯ÈJ$HɇŽÉ&SªŠ€Äi—¸oœ)A£ ?#©3n€±·‚Fs╌älI+Ä&q9o6”§hGpȽyãà¾çeè:š„ôáZÌ*—½\VÛ\)ó`Þx€HaùåÈ8YÍe„N•âä)&ž=¹,dy2ÏdfóB ¯¬šªsf¹\þúö-‹ÏÒbWÎ,«°ïƒ ¢6˜/°÷á¤Ã6hX¤‘éÀ\B|up(¡H' UÚ¿|M d·iîRÊÌÁÁªÎÖ¾¨„·†=›ŒƸV †u*^ëЄPaHN”ÁÞ†\Çg-l2tØ—:q’ÑЯ£h,µ w5Éå‡NÇæëð*Ãéç~Îd:〭¯ªƒog–aÐùFIÙ#¥;›eYï*™åYvNøÏé«é+¥æìI9AÓvCâ[zeÂûª¬3QüYýUt×ÊéòËñœuhlO˜òJÒÈÔmR-3)Æ,9h;¤ã«Hî*Ñx±´¹töò«¯_xnê”Ë?ò’މ¨p’-Ù,šà~k"ëGþ…ó笊Ã-ÑÓ›O¹:Áb†PIÖ$W‡@Ö8‘’ޝ@Êkr[T“ë–]gt#¡ùŸBHç¡jÅ«HE_†EÜz‘?躢éâ`ë‘ &¯¡˜³ÁÒŸpÌÏMì•ÌÜiR‚IùZÿn$rìÒ~Æ:=Ä¿3'RäUª²¸~pšÇ+*7gᄇŸÝvÌ­&ù4 3”Ž Tb†•ÃÉ5ž™FvTós‡ÊbS“Á³Û…µñ€×¨iýsÞ’¥ºƒ…z§õV 篾YX-üòµsP<}ábÿÌkù­Â* óÂ5Ô½T¸³ó…sx,Âê«ãQlìå(~u¢ÎØÑcƒÕ¿¢'ÿ¬E[Oö­îËÁjçþŸVާ«‡¯-,¡OÛG¢ûOÞ¿q÷/´z86öÝÎæ£?¬<êÿøhôeÔù[gó££GOß»7öƒ(úªs÷ö‡(„;¿¢Ï;zÇ»[ôQ¯î}Ò{x4ŒŽ}K’Ûý­èí±ïôlý]ï›­§{;¬ÛÝ¡ïzOûïüp¯ûû/õêÈfwï'—ÜÓê½îæîïZÿ8òýïÑêhosëò£ßþ(Št^îo>>½µ²Ý½·}Ö¹]úêÖ“ÛÛêÞØ‘Ï:QÑ­¯£/ŽEÛcÇ;ÑÓ÷ûýÇÑÇŸ¢S/u¢þ•^/ºóO\}Œ’…~7ú`Ó Ýéß|“Õߣ›Oú,Y=Žšv/^u¢Ý¾ý›Þ_u,:ý•ÝojŸw?X1’wºÛG;;6«½èit¬·;kVݨ{ú…2«_Gýþ¯ºvÍê§·û·®ìÞý¯Yýÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨IÆF ASS0×DÏDOÁSß_¡<±$9#µ¨$ëÂÈ_ˆ9endstream endobj 324 0 obj 2588 endobj 325 0 obj<>/Dur 10/Trans<>>>>>endobj 326 0 obj<>stream xÚÔWÏoU !k ‹{ai©5Ë2F“™qlÇöbÖàÄ–V!G90(û¦ûÍÌÃÝý&¯{<~$â„ö”ë²ÊÊ‚+üd•Zà §Í*ZÂÚäyܪ×ÓcOƒAìagÆí©×õª¾ªúª^ÏÅ¡b~jð2—ãÓ ªPÄ÷äÌ$LOÅ¡24f–Æ`ü8},whn ·q±wÁm…SE˜ÎÃR•§pï’¿Q!˜g;\.½8T„£cEs ^NÉð0Tyó+Ü @–_äVÖp[PÊþŽ“Fiô‰'/œèSØoYmZu6¯sÏÆOZSñ ¡Ÿß·øjz…;þ¡€ªŸ T!9¡¢¤ AwaÿÁ62Ø&Ñù³`å‡ñi #ÏÏ;ýœóø¥:2”Û{öÛRÉ9ñƒþj«3²™ƒJó!=±Ì)6ŸÃÌÀeöÈ Ï+Ân0êŠW¸âžÅý<,V %ÐdH[‘Â&.ÔP'gnZÌÃæõ%jV-fæ4gVÌSBW˜²áÒöô¡ÜB >¯3Å0ùÆW8°ÿçãb YÊVlxâ$”J-üñÌÓšÏUŽ~ß·9¨KÇ¡µ4g¾³õRy>¤'¿98Ø“úÙ<™iü=15òôÌXê± V`]…lPSœ÷oÊ&Uñ¡)ղ𪠽ô>éíÛ… d O>sWÅD!1µ+K5ŽX+G4Q­.Yz¿»!c™÷‘0îd»Ë4ì1Áñ.XÌqÊÌZîµHÎSã¯`f<è½Fã‹øÛDîÛ¶ %l‘^>gÎü„™àH¹ ˜`„ÈQ÷àYù0 ¢·TÄ<<ÞL=*$zà²RÊ.ž9xd,¢›Ð—Â!–˜”c³Y¬A³$=*ÂÙ7’笅ƒ¬óa„:¢e¬ÆÝ1Ò.[æqi|K‰zÂŃÉ÷¥·#C]ÙWNjÆ×ðcÒzqÄŽ¨p8 MN,CŠb+—2'̱¤ ÒEc~ÀfL*çºÝa jZ¦;î‘þÃŽºÄ7ÍbT" Êx®7 1€¦Žø¢XošÐ@'¶ çA=¤£Læ!Ý}…:Ì ïJÿÖ[ÿÝ•nëµ­=Ò ¹+mÜx{öHOºuzêä}[Ð7Â^¿xí$ÝÊd~®Þ~sövôà þ\‡†«ï½£oï¼v=óK­¿¯]y•pç7Zß ovŽ´×è«‘nmй5ØÐÃßæz´¦ÿœ¹·c™{¯×v¶7X»½A÷:îÇÑËl·ÿþ¹‘VÛÛ¿ïqþCÒkíÕÍ¿5?¸ÿ>’;«koÉ÷6þú+­o†E«w_›]o_ŸÕŸ†Wô—·®¬û×3Ÿ†Zƒ¾ü¥þlX¯gŽ„zçõ(º«ßÿƒº'ÔÑ3h[_ýJï£f!Š6õ«q–ôÕèÒ–K¤ô¥­ˆ%Ò]]·:])Ô›‘õ—Î?M-Âhvóëêö³±æÕöú`¸ñn,më=ÜÙ¥¶îèáÏüXzEGÑ…öÍÍXúÍ•èò3›×¾Š¥oÿÿârõä äÿÿs á2P0PIÑ0Ñ3ÑSðÔ÷W(O,IÎH-*Ö Éâ254†Èƒ¸®!\\áêåžendstream endobj 327 0 obj 1842 endobj 328 0 obj<>/Dur 10/Trans<>>>>>endobj 329 0 obj<>stream xÚŒWÍoǧBÕzia y…Vj(’ú²$Æ¢êÏX;¨äîpwVœhw‡Þ™-¤µ‘SГ¯MáBh¯=äÐ? .|Š¸Íµ9Õ…ƒAãVªh Q;}3CJ"%JZ ßî{3¿÷{¿y3{w ›™üšÂ¯ ³-C?ÓsÓ0;5o`ÜÜ‡É úÏ ./aXoîaXþzfs“°ä¡ó Æ.¹#p|N\¸ûTŒ.½3P€±ñ‚y ×Vi(_=zÿ:óé º>í|Øéy\êøA¢+°IX%#•#skPv²0ìáÈåÑùòH! C’0_R!s2¨ •GOžËŒ¯Ã³ «4Dnx ÿé;àñmâ²p¹3L»”Goâd%3÷‘i¹´ÀCHâûP˜¤QçSCçXI²€Få®ÈŽ‹…»JüùÒtö7§2_qÞ=Ágÿ: Ôx$8’ñð,!µÀЛ˜ 2!­ƒÏB CYxå]®¡\¹DH/,µ©Û²@\ˆ™$ ŽÏQjXKãw–am©n½±¤ËÙ«žÇ_4V"±äž‹ê«ggahØ9ÊC(“•y6d¿îísV)šucÞбjd¼·=w¾T.ÿ ÅßËãì<ËÔ.Ъé¦)8Uꬴ—§¯&N›Å°b~øÎ[…·ÇJõ±’çžNfDe…À< ÜÃ~c9™Å ›æþjÐy´–“§F·ÖÔÍv´K%u$u‹zU ‡`¿,\la+•GQÊgÒV/œ&”÷9¯£ŽbQ?0ä¯Ï‚~¤·±‰)ís›gÁâàð04y€ä¶–ºÒt÷¹4˸‚­ `.Á¶®=+’eŒ«¬ãP'5‰n—ÀtJ¨óØwµ+iC4»W…Jì’ ¸ë†fT$«L€¨Q‡yÌA®9î5A–pH øˆø‚cƒ âÿ€Tx,M!±sDÄ49±&$ `…F!Å$(AÍèüâ(BBüµ.]¥>ƺP¯2§ ¢ª× ?vmÛÒ{«ÆB DªIÅÜ.ÇÒBÕh%ÂyÄ($îë)såQKûè¹,í³¹Y=íTn*7‘ƒ7¦o¶Šƒ–~L™®2Ï£¼&Ü`:(V«|Y°±¤;²øú•ÎÑFö+í³Š`* å5VÓà¯cµ@ñ,$~V‹¡ƒ>zÏ¡¾¯‘Q…ÕÁQU,z°Æc{æq´aÞçq¶ßP×kVhWõìÒƒ8ÄNOºyÐJ¶5?L…ÃÊB[HŸÊŸ L~•ê­‹ó Vï×zçA€•Çj£¸XhËŽD,E$d¶¥&:¡ñ¸"‘Ká¯éWG™a•‘C´BÅi³0 m˜·—®.Þ삞ƒKv^XE:õ`ˆænÌœœÈ¥‚-‡ØŠÚíŸÇ&º÷$÷ .zò:ÑÇ/ä¿·ËžÛMk[1³f )—¢ãZÍê_"´¢ªHîÕy¡=¶ŒkÉ5åˆEŒlÕÉZ›ó€’PØ;Tb³R\ÓÒ+>jËÉ”¬ªÎuvbØ/ܱX¬¾ˆ¥¦J4² †²¡íÃŽ^ö†2¸´Ç×B¯n¬¸yñ–ØIë½ \À•eÀ4fJ/Æ¢úh§×Ô«b ÿRiòiÊ ?4Úè½Æ}d™[‰¥}$CvR7õUà‰õendstream endobj 330 0 obj 1920 endobj 331 0 obj<>/Dur 10/Trans<>>>>>endobj 332 0 obj<>stream xÚtXÏoÇ–FÕ>ôÒÂ@3pXh’úeI®k!v,[‡ÆF¬"‡(h‡Ë!9Öîµ³+Šýa#§ '_›Â…Ð^{È¡@\øq›ksª ‚Æ%0 ÉÜ~of–ä®cË 4»3oÞ|ïûÞ{ÃÍÉjyažácgYÔdUüÌ/ͳŹ Ö˜œ6¦Ùìúï“Ö°¬Š‡Ã,«¬TÙby–­50yk×êSlºz–1öìð:‹[‚%ZDšÉ°Ä§ÖnLVÙééª9M3ƒ.{Ù ê?=÷r‹‡u_œÿIaÖÌÙƒY»f3»„É¢å9šâµTÐ^Ÿ"ëë§ŠVç‹VÏX«uÅ´ DÜ’a³0cf´#Æì䛫aC½Å®‰¨¡¢sYW%óT_'N–Ì©JìÄúú V.—××ÃEÉ ö…€—óϺ¸TpqÆ![—ºíó.ã,8„SÎ?3=rõ„Aþ<+î>3ƒ9¿¥g••EF)Чgæèík*M¦céû@\³X±š°^Ÿòe(ÊõS%3·Ãc¯%"¦B¿Ëê"^,êf<Šä÷ËÎ »ÑeÇ„-mH„ÒE´S™‡bKàªv†²Ý×OÁ'“ªa!ö,Uw–©ëk¯®¾–?ß°‹`®|Cà$-©Ý– T$2Œ —¾Ø–5xC!M4§?n¶Å#©’l¡.ç7ž \ýùZÑÝR‰_'µˆ Ê$¬%†ˆS ê‚eÅ Q—<pÞá0Ôóp¾!|ßÄ*ÆÉBexÌt‡æ^âóÀ/K¬†à†À9Â:[Å'5ë(Œ]¨Ä@ªPÔËì•qŠ4è ›­¸„¹ìF¢ãn‘AÛ´ ar ÷™î†^+R!G)ŽÄP÷«uñdÁ¥ «Kû"~–ôZ·'b%pÎÇ>™øp8A¶ä‡qε,ì6-4 M\3€Ü‚8Uf«±¡ Þµ¥[ÙÌ ©Î[:`pžÓ+0*¶91 t )ßrb#¹í”Ôd]¶]<õ}›uL¡lÞ1‚ÈBà ³ä!—ÇcXÐB|Ò„@S­)ʃ ø¿‡ü]f+ÄF h ÀKÐêáÀ/ 7¥?Az4“€/UÄ-µ/Á~›d¹Fí°Ø^BÁsùIº.H‘‡q¤|KAÉ]ã²å9¦X-£=oŠŒ5Ù•ç@§Kc0bt ,†D[å(CaαlS4Ôæ€±ÎcÎLggÚþ¼¨e· ¬‹ ù¡hÌQ1sn}J¼IÿêëÍ}K!å5ǘkžÉUÌŸ±Èܵ”ñÂñ3ž !ÏÃ×õu£n‰½bê4õ€Ã8Rö§òQ@ ¨ÉÐÒÊä“o,g™l HõQ':DÇ ¢[`4ÜOKÛ›:bD¨üáéî†ÃºZ™){üxùdRfVÞ$ZD¸KksY*´âðmËt%ܦ*EB'<†—Âá$§gìÅ»ŠËùKæò׎x3àùky×rR¾Ž#éÅ…;{u¶ð•@uŽlùŠ›»c=ÞÏ[kæ&Å6;ÈOJµQé×3ß8TÏØÙ«WÏž½®¼ ñÌþ Åýiÿ¦¯jÜ×Y»´Dçž;Sžg ø4]–u ™´0Þ !ü×Dä» ÑÂNµÇ!“—Ö&7ºµªùNj ¿ç–æñ¹°PÅ'}7µZ¹xýÍÊjåõËØô¹K+Óø±ÿοUYeq”ˆÊèâ–*WØì|嵋lš­¾:™&&^LÝ¿^Ú›8zl4úOúä‹ÑèaºûdltOFïýeùøpôàòÂù#ô×Þ‘ô^ïÃw6ïüF&&¾ÝÛyø§å‡ƒM?K{ÿèí¼ÿ^úðéÛw'¾—¦Ÿ÷îÜz“°òë4ý¤wÿðx—þ4£>8š¤Ç¾¦™{ƒÝô—ß:ô̻ïvŸ<æýþczw|4øõ÷úüÌŒŽìô~Ô{Áÿ/Þîïìÿ¡ó¯#ßýŽîìþY½ÿø÷?HÓû½;Îí.ïõï.§÷n¥W>¿ùäÖž¾;qäã^š²ôæÿÒO¥{Ç{éÓwƒGéáP/ôÒÁÕÃÁAzûß}€™•Á`?}wÇ¢”Þl?I§³Ñ?Óí'ž¥mïÐzéþÀûÝáßM,zƒåý¯šŸôß]¶3o÷÷ŽöÿÕŽÒ§é±ÃýY;꧇鱧Ÿj;úM:ü¢ߎ~|kpóêþ/íèÿÿÿârõä äÿÿs á2P0PIÑ0Ñ3Ñ3ÖSpTÈ-Í)ÉLÎÉLÍ+Q(N-*K-Ò Éâ254†¨36q]C¸¹¥=رendstream endobj 333 0 obj 2618 endobj 334 0 obj<>/Dur 10/Trans<>>>>>endobj 335 0 obj<>stream xÚ”XÍoÇ—BÕ6:ôÒÂ@3P „B(~S¤“B­Ê 42b9˜n2ÜJ[-w©ý0M¤±‘SГ¯MáBh¯=äÐ? .|Š¸Íµ9Å…ƒAãFªˆ„¨¾™Ù!—£°2Iâ›™÷ý{oÞrw>•(ä|äàc¥ˆœ-”‚w~5й rjΧùReWØŸÖš¿\¶,?€-y%…Љ,ª5ápxkz ¥VK¨ÕEµmlYÄt_Zªýz>…–Ó)¾N•”…t =Zx‡ ×Övˆ§lg„8±W®n–J×ø×R©úÚFm¹b‘N=öªázÄ*Wòqôª­aóªíxåJ1•JÇÑëÄwI¹’®/©¦dKH7Z¼~{ؼÖÁbÛC ß0udX†g`34*Q¯[‹È·LâºÒU\Nõ,Ï<3,„›[C‘ìiÛÄQN¯”ÐÆMbyËîǔÍB ^M•+ÒŠ¸r²=©5ØI×o ·•c«Ñc‘W˜ŠÅ0}‹Èò[ ÕÖLjw$ñå_œ„LZ‰T&3Ѭi¤í!Í4 4 WöÿYÁÊa–+BŽjHn‚„v,ÀņãØÎš Îhòl  MÀÀ–…ãùÀ%1"¶U…ù Ãã`§ïÙMÓw·UÎ5f…‰1BLnµ|Ëаg«),N`ŸˆÁÌ$Èœ¦ðEf6u.ûD´fÓçòŽÀ!mhŠŒÌ42B\#ÎM¨asǰ¶m¡ÓCœs(ÉÊf•desÓ:€u2Ó°Hˆ.æ2T¯òÓf…Vë&)_|ózêÆr¥³\iêªõ+ÓÊdV–/…¢+ª¸‚ŒâtÁ,ï(V§‘Úµ\i;†åÕc‹×וÞ.,ž¹"rêm•›‰»¾Ik¢ŽánÕcÐø5¥zÝAMÛA1-"œ[_RôM…ZPT‰lÜNþŠé-k“ƱÙiÄ"µs¹éØÑm¶4bªaÎO)O)ÏuÓv!ºOSš¹•éT½£°¦`Gi¹s€« ó©‰m¿CLè÷D9Ÿ>ïÆ‘Uñ†`#oÛpü­W8ÏX˜Ï¨fKÓôåü9w°Ìñf›XD4ŧÉs~¤Ôœä£x8ëœÚ»òE6ÓÁõ ½Ø´í¶² }‰­r)É+EÄÖÙp¼œÉ±5YWs ˜hàF-ßôŒ°ö‘Ë=…ñSŒ pÄ‚ ‡ ¶ck0R$ ¶¯š»$ÔïmÉÃnˆÈx¯ 6ý¢F7l0ÒP>¤ÃÏéŠD“[¸Õ6I¢¾„ªžìµ3 ïúlþå\& &CÖ¹"“¬Éçn¶(æ,ÞÑBC ¸,²ëÖcü&KgêK‰1SjÛÄyrfq™ôjrSÎÈ̈èÂMQ<€\Äã5Û#°„=±.Yt›¸ˆò&œäa CM/¸T³;fçd^0óux@ØqŒ›ÜÙ0Îâ)ýÒv½QH¸|©¾mC¡Ñ0pܱçEÖËXg–épˆn82 ãö³þ=B¤Ó¹qývÛä©”ëqÞØ@ —-Hhóaaó1Ð#="Žð˜ò¦ï°ˆŒ5v׉Þ©à%ë܈‘CÃyŠš"ç²k[º+cqD°è] · Ö5u2¡žGFpð ßGÏlì„D‹E4v9øŽlßqäð¿šÃŽ9tÛ>+šñö?²ž_ÐK ¹¶ ó~J¢ ²­ˆ³î'cåíÃÃ+)Z= Ïsì°E‰ÀFTÈdWe0±eP r‹·ˆ¬zi4» ”âådPì—3˜O×—âÜk€]ÇöM* ½]7k—)ráYùLB€‹m™vZOÛÄOìFm~ ‘HñÍVü2T(°OöÓY5¹~íz²š|ýåË(}iãJÞâU¹‘¬BÃóIò ¨©Õä+ð<—¼|u¥Qõó4˜™yކ¯íÍÌ-Œ¨Ñã¯GÔcº¡Ø#êðÁŸ×. ©G/*³ìÛÁ,}Ðûø½Ý{eÔ£™™ï÷öÿqíqð“9ú%íý½·÷áôñé»÷g~DéW½{w>€CÀù-¥Ÿ÷.ô÷ÙWN=:ùxðhΧ ß²“Á>}kæ{ï ¾Ù?=9Äýþ!Û´> Þ~ö¤ÿ‡/95»×?ùiïóߌz·¿wôûÎ?gøFÍ ööÿdxø»Sú°÷\°÷äÒþÚAÿþý´w‡¾òÕíã;îý™ÙO{”"zû?ô‹z0s¡GOß ‚'ô£OÀ©gz4Ø'ôîg@}'“ApDßßQ¢wƒ[Ç4-©Ð[Ç–ÔÚÖ!Õ£GöÛÁßx.zÁÚÑ7[Ÿ÷ß_'ïöæz‡Ô =¥ ƒ£¬ út@N¿põoö êgw‚Û›G÷þ+¨ÿÿÿârõä äÿÿ-ŒA‚0D÷=Å,uAU¨ KIp­I/`ìKÚB>-ç׊«É›¼™V‹Ýõ„3ô UË#šfm6ÝB!°ý&&{~xoCp#vHs¦ø&¬ªMr´Õƒ(Ö£âÿTÕ¹Te‰*©d%qO.Ú§³y</ÄÙë´¸‹äóendstream endobj 336 0 obj 2225 endobj 337 0 obj<>/Dur 10/Trans<>>>>>endobj 338 0 obj<>stream xÚŒXÍÇ_dE(äƒC.‰âÊ%‹4Ìì²»,K+À¬Y)dVò!%5Ý53eúcèêÞaâä“•×8"Z%×|È`"Vd_㓉°¼²bÈÚbV,Óù½WÝ=Ó XÐìÔLÕûü½ß{ÕWöÍÖ—Þðvô˜ˆ:bÿ—ű…#"R¢½oŽ¿šóGé¿ãï;½Žc³ø²xñÆê117+ÖÛØ»´€îL _^VBÇB:Ž2F·<%Zw•èwC,zQ؉¤_þ6Ä[$º2pkXk#úaâ¹Â ýž§+Þå„A œX‡oõtÐ9´þƾYqxî)n)G&:Tv¾+7”®«éŒôàW[E*€MF’H:—ULJCVC$Ùmb9 ÒÓ 6TÃñ¦cSÒý$ ɨ¾Œòö;Z©ÖÒ o3ú:îNˆ‹”t‚b/~Yާ"ScÕì'Qˆèj§k }‰´³]vÛS€S¯NH”yðj6@‰ß‚,85Ž©!§<íëX¹È¸Í@ys-NØóËÚeV € ªMÄÚWÀγÖT‰ÜV¶HG“Ùu­–t.!)ÖaØ6Â˰Í$-£®$ä jå’KbÑŽBºÅȈ^¨HX¾¡U¿Æµ¤”oÆ%€]Y­{¨CBìdDŒö/–ã êâu ±FØç4åV–lˆTœD¸’hç2y•ÈÇ$#s ܰŒÙS¨(¦ª“¦µœ“L°Èdi&ˆlA§«³ÍÍPdíW9óÍFqÄG¹™ãÙ~™ÿ(7B튖‡LÚK>LȨ EæÉÀŒ³q2?(¹ºJ¡f‚¬Ä™¢£®JÔraÍ,"E' ]`àÊèñiÀ“íÒ†’8l{‰éV™Uû¾r5x¶5g@JYlª Ê¿Žd8Þø1cÑSQ›âšëðÇŒC°Ö¸`Ã+] ž§-Ê”Ìmª—,9ÊY™ XÏ+:q²[â×HÆ!…LD| !ѱ¤ÖdêIG1$ûa„Zh“ ¡°=-iPè^q脾ÒV×/–,ì3])V‘Uã)’„H%.‰.I^Ø–¹÷,QlRÒÆlÄlŠ Î¬+Y¨¤KvhD0òڢ锻Ò<”«'jsÓ`¸¸fšrÃ|ÁqÉ@)œ®ŒÀ èì}p1RhP­×"¹²lJ–FKµ:¶Ç(–ïèT©´Q¶õ˜cžhˆÈ¸:±” uÚt•[¢ŒÐËѨ4ˆ¬‘‰UŸ]M(­áE˜})ú°4(<˹XÚŸ[‰öˆ99\«To„”eÉY¥C¥_àèl¢Œ*~6 0Y ÈÛŒ¼Š|$ÂDf-A‹|F.,´dŒì¨êèØe}âÌÅSçÑÝÄËëi97híâ™ãÇúòzµªhtP>÷Tå¸aS I|Ì-C+±A4Ei&ªÀ¥À†Q…Ï¥7èWÆ’ÃÝWÜ&l+ck²båÙ¬7O†²Ø³P_°Cêáù…úQR³P_¬‹³W$2길(1§B%u1Ö[–Ttóȸ®iÚŽvXŒ 2F€^•÷PÔš«*&¦Ù õ {mµµµÃ&ÔÅé„ÑWÔ×ÿ„ù ±e©cÌ'ǯÔAµ;ž–ÂÖÄÜÒpÄë9¯«ÏçAà _œÊ› Í9î ~–iüËÒ ÔÙ£Å|—qиzëâÌx ÉS0>È•˲sÝÐÄŒ^Å‚K¹h"<Š”OƒêÂ$ ÆÒ!þ×pœ˜*d['˜‘R—˜„œ)  ²rbæcT‡c¤e‚‘8oåÓ<‰8<ò·¸R`OæÎÿe±¯•Ïó„g×Ê($L7—Ú–YDtEy?ßA‰Æ É• D†À/¥ ÂØ ã‹O•=ÌwDõR81O†Ö!žnJY*ˆRà¡™‘N¤‘E»ŒPÐ2 iE9Fl{%åtOUåfÖRe¶«ÂÔ7ÄYÊëÏa˜¢-õ@3p¼öÿ5‹ „ÜStìé‚‘¦*&T椧in†É;Ÿ&i䠵ЫMkh¼<ù ÍHâÐ0ÖCó©[.ѼėG‹‹¤½Ã©É;[¥N^² $KRžg@WOGòðI6gÊ?Œ_©#~rRLç#S,õ4–§kÏ;×vñ†sí¹Kö9Ãóv;-»»Ùü¡%Ö3Ïrnü²ñšËãÅ™dmh–:&¢ù\ßš‡~ü Ò@0M²¦)s1? ,*ó[1Û“âC œ}i8´£&º)\/ ºa’¤ñNúWH%›0`À)Oú¤ëh™lùéa7½H«ìÁ±ˆ[âBÂnbò§"Ï(£æLóPµ$ínhë>D—Q'áaé«ÐÎsw6U;—8ØMh®“8¨,”û‡OŽ«zŒkÜÞ¬b‚¿Æz›“ÂÚn-wk™$Í-­/Š¥ÅY;Cq 7ÒÔž²‡z~†Nü8hv«0IäÙõ}WÄ‘cõY~̸Œ¿ Ë‹x_ZšÅ;=n\kœ¹ô³ÆZãµWN‹¹gWçðϾNþ¼±† U¢¯#ÚËsb~±qúâ1'Ö^Þ—Ž¦¦^L³×0NíÝ?^ý3}ôŸñê^ºõhbu;¯ÞþÓÊbu÷•¥“{èÓƒ=éíáo_¹ùZÝšúúpóÞVî¾»7ý,þm¸ùÞ»é½'oÝšúVš~>¼yý]lÂÉ/Óô“áÝ;[ô‘Ww°{wo’îÿ’v>m¥¿œúڮÿí~±õäñC¹³ó~Ûõ?½ùíÇ;¿ÿŒW{6woø‚÷/Z½µ³¹ý»þ?ö|ó´Ú»»¹õÇ𽇿ýNšÞ¾8Ú¼bkåÁέ•ô£áõôÜç×]`nMíùh˜¦"½öïôÓý郩ÃôÉÛ£ÑýôýáÔ Ãttawô8½ñ1Vïcgc4ÚNßÙ´QJoŒ®>JçòÕßÓ«F2_ÝO{În¶¦Û#ç7»å\ G+Û_t>ÙygÅî¼±ó`ïðáŸíêqú$Ý¿»=oW;énºÿɧƮ~ŽF¿Ø¹³mWß¿>ºvaûæíêÿÿârõä äÿÿs á2P0PIÑ0Ñ3ÕSp­H.-*NµRH,.ÎÌKW(-N-RHI,IÔ Éâ254†¨56q]C¸¹Y(NÜendstream endobj 339 0 obj 2722 endobj 340 0 obj<>/Dur 10/Trans<>>>>>endobj 341 0 obj<>stream xÚ¤WÍoGw„ª¨éG½´B*OUŽ”¬í|„D„ˆ„AZuÕŽ×ãxÈz×ÙÙã¦!â„zâZ*ª¨½öÀ¡TP-×rjª "Th“”µâìôͬíÄb@ØÖzßÎ{oÞüޛߛl‰k}½€—¼ìï{âøíè…þž.°)dZêQº÷ËŸžkC³8>¬]Ð,v,ýZ7ŒeP¹mÇÒQ¨ûpj3b°¯h2ÚfSîN²½£}ìBK:ñmúÉöƒ¡ÁÙz™œ†4fÂî85Ógƒ¹¢mtŠšNç`¡s0“n01äÈ=E¹CÓG¸ÎØIÆ× 9v¬ä‰LgWvœ¦˜¢@@7Æiª³4å`™àdw£ˆÿĆ?Rñ5­B½ç(”AÁ± KÌ4ÞÕÐNÃj&Ñà<5Œ(PЉ 9+Í2E5w,›¦«Á«äIÀù‰‰*,G!U„<᜙ãÊĤ˜"†‹Kà¨T‰0^Gš'£ÉömaÚãn×{ ª_+šÎ®´}UD Œg\“Muʦê¥Â«À° xà4Quº5çA@‰jDµ‰£wÈÑЩífB8z–Ú`¥.PÝA„qÁF9Ði¢;˜©Pz,“>ŽmP8ŽÍR®C5õàd1Ïø3-0XÓÞ ®BÛ¦jSSG,Š–«R§òU—®Ö .ÖV*Ò`YáXy2…Õµ!ʈ.b,s$ Ú‘If%£;í,_ÂÞJ±zÚ²wbmyËvöî¸s2i¼ ][`wÎÒ'¨³£¶ž ´“ÉTÄöQeµ£~¸&Tå ýL¸PÂó=å寒qË›Ž×v'¡RîäÍ뻓˜ÑáÍ+» {›}ia¬×Ó4­Áè>ÅØp­¬ÉçU"Ë@Pƒ vzçàŒLJ8æÙ`ûomÐ춈FT‹ƒî^yíIôk=Ð…wªbû‹KÕØ¢»[í¿S–C@h‹á^z"ÛŸ™B€ —±ì0¯¸XðûjûC·ä®›ÆÒ‘į˜cKV`ºúµ¸z/ÐÔ;ôõÉ«|;=÷Yl4vöø0$Kà7ø ~¤F;T3;>s_nF?n~$²GT>žð"Í­›Ò_bíßMiQ,­m‘nY›ÒÊ­Ÿ†vפ…ã}ƒMòn¹IÜòî\ž¼ö‹”"‘7½ùņý÷›Å#áýæÍ߸.7.ÝŒ¼#ÄcïÚÜuTBËgB<ðî–w—–ä­’Ö]ÑúLj.ûKâËÈe]•Ÿ.m¬¯RiEŽ•s÷ü™w×Kß?RRÓ|iýo—ñ·”.•æW¿+üÑôö[Rj.Ï/ýhÝXùö=!îz{üù'‡–†–K7‡Ä}oNœx|qmn™ßŒ4Ý÷„qññ°U,Gv{bã²ï?·ïá¢vyÂ?]ö×Å•?Qºš1ß_Wç”ÄzM$ªÒïbzÍ'Ué‰ÈëåŠä‰U_ÿ¦ü«Ê…ç­>Pº:h^)-7{+?ҺحåÕî@*‰²hÝxÈékáû_”î®Ò‡sþÅÓ«×þ ¤ÿÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨IÆ AS# XÀDÏLOÁ3%'U¡<±$9#µ¨¤À5„+ [30üendstream endobj 342 0 obj 1774 endobj 343 0 obj<>/Dur 10/Trans<>>>>>endobj 344 0 obj<>stream xÚ´VÍoGw„ª¨éG½´B*¯Iª&$^Û‰‘Ø"$H´ 0pÀ&ë±³í~±»Ž“‰8¡ž¸–ŠÊj¯=pè@*¨ʵœš*ˆÚ¤e­8;}³ë|j/RY[kÿvÞ›÷ö½ßüfÎ7……¾à-Š·Þ~0²ÆOl ýÑn0(dš"î£ôôò¯¨4 'Ñ-Œ7oè C¿ÐÉ ÷¡o2Ýþ®¶³§Ãg‚ñ|0ž&IµïÄ'÷>1šêØ×‘ü¢) ÁHØÿÔ—º|8T§ÄÂ?Cqˆøp¨Ne§G+HªiY¦¤è2Åz΂<±ÄIjì´Vf MÒ†F§¨jã’–j¯?“æi¦R{'GÆ?«—­8Á­ÍÜ\ð_½V0'µ1ASœäµ°¨¡Ð´D,Š•7s²’ -]X‡´L½–wA‹J©-û^%iƒ’´ûA·~qÿêQ©+†²¦é;Gø×346‘¨õVP°'*ôrƒ¨Ð'ÀIbHd©T!‘é9l[qÁî@Ç=Ò¹”:M\”3%5 SÄØœA¨J°:ßq ÒTÑ˶ÊD6óEjš³tU{Èvv§=AÔ” I¥i$­þ¨L‰IAÕp2ÎÆ´”ÉH"g˶4ªÜpüE%S€ý²¢™΀Ñ@$*èÒN´ªøìZÆ¢*®q¨[·¼„ x’è:U8aÒj§—Ô„)jÌ`$ƒfr²<#ü7^àµ0;’UÈΑVëI׿–¬a6Š–ÎÉôÅ \"øS¬© Í^Ô(©7…„­Á>k d©J‘4Z•Ö™|Rí–¤PøÚÚð–Su"~ -Þ‹pNGžMçóp²_Iú9¿Jër®*ZERy0£¦ªºŠ4Eä¡xw­%.N Å} i+ #ð½¸øqy³4Hk~¥ ˆ×)Õ §:c© åWß[qAä9W¤Ì J<Ýì9ÆUpyI\-¾Ô.›9GÊλú;¢Ûhrœ"»VðªÄ®:Ó«,²~eÓ«Ù@O™.–+ÈfEGüºü‹Û ÛIŸe–®%<Ë«¥åF{å'­±uÖ\.öx¨Äʬyý‘é¡‹ÌqΖî=ôáœ3{¤xýý ÿÿârõä äÿÿs á2P0PIÑ0Ñ3×SK,ÊLLÊIU(O,IÎH-*Ö Éâ254†(1¶q]C¸¹ì;m˜endstream endobj 345 0 obj 1418 endobj 346 0 obj<>/Dur 10/Trans<>>>>>endobj 347 0 obj<>stream xÚ¼WÍOG7Š*TúÁ¡—VHÍ+AZãÌw–Høº4Ub)ŒÒe=˜mì]³;Æ (§¨'®MEeµ×rè*Q•´¹6§RE -Ô‰XËf§ofmƒílTulÍî›yßï7o´s Wo7àÔ…SOèað௻¿úº:A'0ÓàK^ðõð¿m ˜ йG=ÐçòA`™{Q6jƒc#¦E"piZõD«³=ðEƒ:¼žR.y'ä2âÓ°Ó•Bó¤‚m:Û§à‘BƒjóÅåJ:‚í‹vŠÙ.€¢TBWºB ÌK:$$*Ͻ˜qdž¨´c÷ƒm½åÒÜÛ`°_+GUˆ½æÐ;1tHðÐo ¿”¨ ’ŽÄ (4;¡e©åæ¤gªc(!Ü]vB³ë¿I‘¬E§•„þï,UŠ\EãâX $ËÄ0üÕÉä àãØKa$5„i\WA™\öÃ2‡Î·ž”ÜÊ.Úx´}°>ª´m1¦ézÖjGPU–Î 3ÆÑ´Øk@50À7„÷h?x»\]vkéðu¹z8_—«Ïcºå±iØÜÇúPGgÞX`c% R4!"Q 1®K”@g Ä )L@›±m—:.2â‚q‚}‘‹å–rOËTv”´¯¡T‰Ý)ÄŽª©Â,*‹–ŠJ25ð(¢ŒLt*á[ŒèŠü¨Å)\¾•ŠæM*ê¼v ýRP“Œ'zZ’o¹J˜Ke(‘HÜΚP ÛpÜ®™ …΢cÆ,"²¼{P¢#¼ìU¡lx0džè‹}Á*‘ã)‹(óJázàÊħ`h¹rá¦\ží˜ŽúÑj!1M|Âô"ÐŘ¢†]'“PT%…£RñšÅèŠLOvDÃÃÕBñ1Ê5ˆÁ\"ØÆq•?JÏ žö¹¸¢“üaÑT×µ±,Š@¹¢Æâôõ};º-Šv)×¾-xZ›š ÙücQç)ÜØ£këÐ|$$ì§Í ·¤†þs¬ÅWÏ?(âªÞÂò)1W{§æ:@y9Är¾"‚VwwΦÜë¬JDÜ¡Pó=Zžôüñ.8q6EG×O^O°­|íoÙ)©vØØ ˆÆáåÄ;pŠ>Ä»¿ËÌá-ˆ@ÖÔQ+kÀMmè)jjåÛy ¢J I¡PتǨ† eº…ÄH a:û\ñ½ÐïßÐÛËgþÕ0á¾|}Ò=á¾66 ÞÁ‘Q/þì14垪ljûx=ýîqðu»‡?»ŒW˜åpœg¹a2ÓQßxDýÁþ>¢¶ÙÎÁ1jS;¢ö7ð7¨­±Þ¡:þ¶WÇ6͇wæÖâÔ–Ãñ¦™Üþοm½_Ïž3ó3yÿÛ>¼½áx‡±æúê=dBÉWŒ=5e›Ò;üUP[™‡Ù­ú8k|Å9÷¬ö¹ã¬,ö²/w3ûR:½Ï÷²ÑÇÖÒ»™ô·ÏU—Lg>0ÏEþäÔít2õMâ·º·ßâT}6¹ó½vÿë÷{dž·’»ƒ;þ½ô†Ÿ=1WÙø‹•ƒÕ=cÃQ÷Äd ØÊ_ìY#Ûs4™ìðŽeí²1¨s&³®f­ [û©È鶬»›´³ÄÖ¬…æÍS¿²…KÊS»,&gs”ÉR–üUögQ Óò§^†Ÿ¦ïúmεô^½¹ÿ£MeØ!k̦|6•fYÖxøÌ°©/™eÝL?JÙÔ‡«ÖÊÕÔú?6õ/ÿÿârõä äÿÿ-ŒA D÷œb–º(Vƒ¶nMª[MþÁ–¦@ó z}%¸š¼™É»Ø][œA/ìÕIÑ45Hoº·ñší/±p¸wÎúÖãnxFZ3ÅÑ \]Ði6[šDUDÕߤê\*u@AÙJÜ8¤Ÿ>>GÃkÞ;ñÌëÐiendstream endobj 348 0 obj 1473 endobj 349 0 obj<>/Dur 10/Trans<>>>>>endobj 350 0 obj<>stream xÚœ’ËOQƧ!¦±>ºp£!‘#°€D˜–¾#¶äÑD›¸£¥jM_L§B‚Ò°"®ØŠÁ4ºuÁÂ? b@ÙÊJ „†ÚZHï¤Ó{¼3ÃCI0†sg¾;¿{Ïw&3ç›,­.0±3qºAŒ€… ‡Çn{ˆ ™¬Ú’lNõ ÅMf³°ÅCa6¾ÛîV†X²‹yá&8!Bƒú|Ó éÌ Œ5ž˜,ÐbµüËt<Nå Š ¨¿’¢É„IIBøÚÀ@¢þÆiê=¿þ_®æcÕ#b2“jñÃá¦F)Äã9'4@Z ŠÄ’ÉÔß;êŠV¦Kë8ív¦Ž6Ó6vk eýã»ÝàQ{eµ;[àriö®§BB‚°e3¤ÄdD ÆãÑD¢ èÄdÒ*IÐSãÉp&&ì¿oÚÜ­í°xØl÷8˜²ÊLÕCãç;ïÞçýüž°¶wu[ÙÐÃû€÷ƒ$fþX-¾l¾£¿“9ÿmRŽ«Ãý H8£ùˆ¾aùç­c¾ü-$¨¸ðÎW{Hk=.¯A}*p,MÏ|PiãÎ’Üúß:½lÄ-$ŸHnn׫óÜÄm2“eI̹‡¸A–•Z9¯>j´VYRÖŒ4ï©™šÇGÜ%¤í)»ùj¥”墺§ÄWèØÅŠüzK#CN®\!5±ï*Mȹҫ‘/†óçT2*¹üÛä\ñå%ÄeRGs;íy_Až÷á*Ébïöx9[HÏs†U‚8þ7ÍXàj V')ÝÁÅöQ5iŸB+8õ•Ñ"Ëä)-átNÿK8EGËh= Ï8Z¦ÁÚÁTHÙ'‚%z¡|ÔzA¨¯´Ù§}zæ”\0’â{*XE³R²é$£‚æêfZ§gHéCy¹¤ÓÕ,ï+ÍüÒé7ÿÿârõä äÿÿs á2P0PIÑ0ѳÐSp/Ê/-P(O,IÎH-*Ö Éâ254†Ê‚¸®!\\tq'¬endstream endobj 351 0 obj 766 endobj 352 0 obj<>/Dur 10/Trans<>>>>>endobj 353 0 obj<>stream xÚLÑÏOÓ`ð6„4Ö=xÑ,‘÷/ +clKM†;a”ă1Jä"Á ‰$š-œˆ§]ÅŒ4põÀÁ?€™ˆaÊUNΌЙ¶Ò÷Mß¾ïÛ‚ó}Û§ï§Ï·iÚ·¤&3iÄË0/#YTžGI>Ó¹4Ê¡òz®Ñ-¥FÄQ\Pó3êÄŒZBCÙÁdÔˉ+?3QE¢ ?|¬ô“ydŒNÜ3øŒÇؽ€^•—çôGÈHæô)”Jëùûãü…»*0I€‹KŠÖÓOðÿôÔÛÿOÍÅžÜæG3ñOíÉ̘,VŽ M¼·VªjKÒlu6Í»¥À1à¯ØÚÙ†N¸Ú®œàzu›‡ø“g‡¸EÄËHí`¶•eÐÎDÒa6<“úi1êÑS; ÜYB\Ñ£ ûìÍ€lG’-ÜÆ}/~ ­Ëûðú»|íªB-{kqÇ} …˜ÕµM‡4L8ÀU˜:©øUg©!ÉAå7iàH ác]ØÝçÕ‡MS@í×.OêŒy°nÅ jlÅãRß`Åg³—êÂË"½ßÑ/Ñ^`fz§ó‡dÝŒ“5â(Øý+€4ê¥b  …GK±ÞcOIË‹u§Ê*Ó^ýo¬sÿÿârõä äÿÿEŒÁ ƒï>/Dur 10/Trans<>>>>>endobj 356 0 obj<>stream xÚXoã6ý?Ÿb.½²€£ZþÛÅÍnÜžÛÔ·qz·hŠ-Ñ6YtIÊ>÷áï %Ù+)κ^)2EμÎ ßø÷‹vpÓ'Üz¸ †dVÔÆ§?êÓ°×!#iyú¡ºþm.Þͱ¬Áã ˾ýaDáMÐ¥ù³oº!?ÆWý€nãH#ÓR —ißλðÓ{A/Ÿ~݃a>= è_ÂEk•®òiN ÚÅôN'Ov2uù»añFïT,- J³ÍBÒKÚê½4Ë,9B ¥6ËE¶ZAQ‹¤1pFDϬX¤1¹,Å#à'FŠøy±\Š,q¤RëD’§tÊê(ì0 ½\-fF‰°–vÂ(±H$åÛ%Æ¿zàãñëÿ‡Üɤnëõenc¦sF-2'ФˆÖ´ÏFN“ˆœÚ ¼cÃ`4<Á˜tf+°†`š.)Ò›­J°W{åÖu×wù@§˜ü<¹Ÿþ0ùðÓÇOŸï&ï¬ÁkQuë^Þ²Òm)‰8VìU‘.ÜH·ÖqÇ÷çÜhsøé,uðtõô¶.{¿Vð‰J±ß¨XèÌ‘[KŠ2c%9”»É6á”ú†e8_wÚ¬¾¡XÙm"^ZUº4Ÿ¹&¥Ë_æìø_<¦Ëý¦Uútuy}Yz',]Q7¬†f¶èòé)½ü®¢´Šàš¯•-[²šÉѨgYŸ{^wFýöèº]|ú¸º¸†Ç‘ãÀ÷°¦!ÇŸM42Ä'4NpT²Q„ô*#³0+¨îU%­ öËïJ*cƒ4¿ˆ³cJUãj<~pÂÙ—CàXöì $‡b F¯8? ©,âÄ'¶Ï@7‡J®”F¶ôƒB´&õuŒ÷Ò=H‰ãñLCJ#ë#X¹”YD•èC ž´þëd’JGÖËð "mÇè‹™&¶ÛDEÞ¾Â-‰²î…x#Wx†¿O!]X Êõ‰ÚɺH`@uÉÓ–]Ænx¼Ÿþ›2§åõ"âô¶&…ÇGÌRØÎt¢0?Ñú¹âzøè`¿RÉZo[9\¿ ¯ök ×c·Qð,G`‡r±_ª¶­ŒÎ¶ ´4ò/ô®¨ kµZ'¸¿†KjÚc‰åÀÉS·ÚZµÈ VhÀ0Þ›ƒ!Ä€ZÊ“DƒÿX°­‡-æÇøŠ v‘DK£7@mPœ¬`°ÊɳũšeÅ>Úkóìݸ7 á è¼Á€Êe¤Jžn&ÏE«£gé⨫{qmŒŽ‚Q!îÅm¬JaP7GØa¿í¥àH±¨‡*NdsáW¿Êå_« yM~+²­) [ÅßKí Wà÷ex‰SÇBšÊÜ9È;ÃΠK;%m¦éœpà…GÛ¬°ë ásÎß'Š£B|r§ 9잤¶ß?%ê‡MUÀ¨Ô®ð°øpC`ûU丨}PЦðá×…'\÷þŒpv Ì?'Ü›Ž=rÖÐZ[çOʶ±ç˜xošB;_ZdÄÿ+±ëáœD«V©¿C®Qa+“ý¿?Κ¢zJÔô~ÞÕU”ß™“óÎåûÀ_¯: Ùêä†PÜ£çÜCãÂöÅÌ¿¿(Y5Pœùš9V™ÁÒ¾RIßœiþÊkDb‘ÏÙ–ÓØçto¤Æ7H8Ú·yê/4‡Ý^0È›ÃNPl‡%`:=O#ÍáÄ9Á­$gÓ)èRØÓ»Á‰Ýàl³ÉýÝä®ÁY<¹öKr# g¿Ú¨DäW~®óá»Tm=­À±Ï¢A*ÁÐqY›Š%fâIÑ^ 2o¶‰Ü0ô¸8ïaÑ»é-Oh-«çÇÞöà:ÛP1ä^t&(åN|8zÞƒ¾Èè‚ZlnfÍi·ïçÓŸ'.ÏÔçMï_ž æ>%ùÀHîX|^v´L³eÝ`´‰ç‡àR5þ¦÷)¿R@ÔŠI{Á½jÚǹ€XSŠFÆÈH¯Rõ‡,(IÎç¸+Yr _ÉÜH5ÄÆÜ;ÒÓUNgsŠÈ€t¬ 2Õ^‚ù²‡$ì÷#-)Ìð¹]Ý©\N¾SÁÓ[ú¤3Úpº°„MF ‹ÜFÔ)ÿh˜ ï– ¬,°õœBÖe1ô:FšhŽ5Kün/Ò`´œ.3 ¶Ž_¤0ìÉxµ õzØc·ðæ_2cÑöAbô—.ktM(Í«¼-8×·Ù,Jyäæ!£ü†›$ãàô3¨,)Ã`ôÚÏY}œJ¾Jö<¥˜Ì/þyñ?^š[endstream endobj 357 0 obj 1886 endobj 358 0 obj<>/Dur 10/Trans<>>>>>endobj 359 0 obj<>stream xÚ¤XÍoǧBÕ$:ôÒÂ@2p„ˆ*è%)Û‘Gþ]£R’C8³»CrâÝzw–4ëÆFNAO¾6… ¡½öCÿ€¸ð!(âÖ×ä"‰©J %DíäÍ,—ä.%JqHbÅ7ïã÷ÞüÞPWÇ ÚÌIðxq¹T€÷ÉS'Ñì‰iäT+ª¡":þ¢üöØÙUØV€Áî¶å/œBÅZ-ÃÚ™ðÅÌ®¼¾riéâù¥óS«ïŒå/Ìv注”õ¨M-ì"ÎÇ1'^i Õ\V§&ñF^[`ß`‡rÊd^e¦†V«ÔCð‰”b¥Ô»ìù°Ï1‰YÊ–¦R65)бéÒ³Õ*AGË.! Nå(beÔÀܨWi&× Ë÷hXMd0‡»Ì"&Ò›ˆÃ6̹KuŸ“´ëéX±cª}‘ûûlÚÃá\Çáâ´tØ%®|ÒÐR8<Ž´Â\“¸¨BââhÒgRëÒ}ì!‹9ù7†‡êØò‰Œ›»>éàËñ˜qX R.ƒ2gÊ$Êr 6›Bæ‚ ê(ÕW}ú˜J®”aãeéÄÀ¾Cˆ“hx໇DzOªà¥â3fK*¥Õ•ÏÊÑ2³,Ö‚–‚íL`Il–¥¡eHd•5$5¤ QÇ$ ±ub¦i0æ.ð‹Aô)>p›]׉S§.sì=TC ãÀ„$õC2Z§QG¶Ob^#.°±X­Ó€$ÁR£ŠÌ·Ì„Û¬“…!ùÖ$Úë!PÈ!¢U4H<çÖy7(°6u<¿\¦Uôßëp ¨ó†Ø5tÉ"˜˜¨%wuÃØ3O.Qœ(‹:+5S­¯Q%Ρ» žÔᬡàe'ªÄníJš ú1’lj£NrUâPœ¬ôf=:‰²lTú9ÅQ°·Æ¼ø, ð°¢´†Î€m&/,^o´{.½?ºþPh‹&Åòøæê ÒÃ\™Ð†ð j¤¼ÁON(ÃYÔ† ’ä;æNGY)[6ekûíÊêùå‹9TÃî#Åt£àiÙ˜’ƒ*ªPò@“ô ÕFUNåÐd‡ü&s¨8|!®`êL  ® .–°S‡¡ž¯£ëïþLg²²¿¢¤ê±GÎ÷«ÐÔ2ð=Ò—G×S2œƒ °R·¥¤§á°EM°Z-Âá*MÍ-^f;Öiø®+ydkŸÒ»(Ém®”M\Íäå97páJŒFÐXÑèp¤+]3½„£¡ëRù„¼¼G1ž~÷tzI šXT÷ÁŃŒF—^ygWÑç$‘×äÏE¸Äx¸¢àXZ»Š¦gµ‚úùJS?õÑÌŒ|Ê,çÏ­ü>¿œÿÝ+gQñå¥ ExG¯ù·òËêÇdþMèd§ò¯¢ã'óg/CE´|~L„™Ìs¢ó DïIÿÛßõ¤‡b}»OºËzÒæÝ,éJ^™™‘ß6FÄÝà“÷¯Þþ—”d2¿ÖþmáaøëQñ•þ¬}ô¡x¸ûÞÌÓB|ܾù!,‚?ñEp¯}¤µ.¿*éÁÎ'í£¾ÿA®Ü×ÅÛ™'Û†šk¿¾»³‰[­M9×¶ï‡×ŸÙiýõ+%¬µv~߇ žDøZ;Ü·>écX™Ã-ñÁZ„’¸^ÛÅXú¯¸¶âXz$jF»#b+4þÔþ·ÊE.l}_ù¢õÁB´òVkc4Øüg$íˆ]1ÞÞ:I-Ñã»_z‘ôG†—[÷¶"éÙ›á×¶nÿ?’~ÿÿârõä äÿÿ-ŒA‚0D÷=Å,uj,‚KMp­É¿@c?XB‹ù´œ_+®&oòò®¤v·gP‡ƒ>•êz²›váaÅ}o™z1Þ»ÐÃÜYF¤9S|1VÕO6¼¥Ak¨ø—´Î§>6øaUâbžlѱ‰IxÎBKê¡>ÌwJendstream endobj 360 0 obj 2011 endobj 361 0 obj<>/Dur 10/Trans<>>>>>endobj 362 0 obj<>stream xÚ´WÍoÇ—BÕ´:ôÒÂ@ó  0…JKR¢¬DRlYvx¨ãF zw¸;$'ÚzgW›ÖFNAO¾6… ¡½öCÿ€¸ð!(â6×äT"[©J ¢8yo–\‘kÉ–|óñæýÞû½ß,ogŒÙÀGæÀ/Cÿfæg`.7>‡ÒpVeaúý›Îð¥uÜ–ÁÁøÛÒW20gLÃz ÏâÞu+N ©1G–'`Ì¥Ra|±óª…ÔKUæÆ`t2…ñÆ×ßÎÀd6ÓÙI›ßô„[H??=>–Ñ<¿€ƒÉ-ÇŸQfbSõ«ú|óõ̰¸¸DgÕ&—„¼¡ðS=ÆOð®O_Ì‚({uy¿Ç~ÿ[P&sMnÛ,žÛ6•ÖYÄ­oˆmª[ìôÿ O†²Ê]Ù.›-±¾1¸l/¸ØéÓÁýÛ¡êù˜æ–¹LÎW}á0J BÁM2úWOñ.Ã"È€IB¾õde€Wå¾fAr:j·vÙK7Έæ¤c»XÖÖ/®¯.@ÄìÅ¥d÷œRL\ó¥wS×!»÷¹ÕÙºS‚†]fÛõä+Ä<–1¶]dæð-n†T7bbPáñŒ„QTCô? 5˜îCèJ¬´dä4G?™Õâês\î37HÊ‚ÀÅ0à¬W0ê«#Ùe€‡µ€"jBeA±žÌÄ*Í$×DPñÂ/4+„P„ã5= ÇëÑef™ÑS§éÙÌ)uÂr8¨±NOͺV3Æ´+¡ ‹KsÓˆ‘ƒpq$`Â6:9ˆBZGWýELamvÚîÄÒÛй(»è£©p»Š›Ü¦Ö—P …muÒ/|ðjnÌ”ÓfRrÙÅ«LHÚÁ·L^¥b>|b`X®À\ ,!«6«ã‰L‚Ã¥d¨ršR„ lÏ«b%…mƒôDŠrL¬‰ôéP …Ѳéü¾Éýz¤p„Íünr‹¼Â6…úT‰Dzø&³ ©Âx2?˜š.sQ½lfFÄeQuª¾·‰õµ º&!ìO@Þ!½Ã†lµ@Ò±G·{ÏDÿ \Êín |+кžß•ÃÇ.ØvÔéž«;8x3b1Y‹×óÉc;Ȱb¦‰u馰ºÔåÜ jA+¤0‹Œnª*.!¨‚×(lÛ«1Ö¸Ó&§sÆ…¨ÓrhðÚ«©¨òTW½Û\žÒ{×¹o§×7žPN§jsÊ8 ­:1]ˆ=,8RU©ã’ž3=§(¨HwÎT¡À³]‚Háó©âZ–‘´Bs“0OЩ$Íø†æB8Óqñ»Å£*ùžetfÆ ¸ØMz_r5'Ž»*»î~d ¶@Иÿ¨MôµxæN1(dÔ©;N“\òB׊IýD¾¢Ø´;™,VÅó6ärŸ¾­Ð;%L 1ò¦üôÉ— ÍÎXô¨ºŽG/>sxÍó70Lÿ¤nÔeÞk£{S/N(,]LPÃÑ“Þmž†8™À®=Of6wÁ˜Ù™¬‘7€…×ýêÕK}qõJÿ¢ÏÒé¼”ôÏ0ÌùôË0=“¾t}¾ç/«öÀÀóªói¨ÆÀÐȱõuðïcë‘Ú9è±î{ÇÖÞý?.Ÿ‹­‡Wg—éÛî ºßøð›wÿLÖÃo5¶ý~ùQûûCêsÕøkcûý÷Ô££·ï |G©/wo¿‡‹pçWJ}ÚxÐ:×Ü¡¯ÚzxøaëáP¨F¾¢•»íõóg[¦žk}¹st¸ÇšÍ=šk9µßúîaówŸkkp»yøƒÆ3ö?Éz»¹½ÿÛÚǃÏ}›¬¡Ööμ÷÷~ó=¥4žoo?~qgy·yoY}Ò¸­^þâÖÁí]yo`ð“†R nýK}6¢vÎ5ÔÑ;íöcõÁGꙆj¿Òjª;Gë\™n·÷Õ»ÛQ–ÔöÖÊv­¿©­ƒ6ëZUÕlu¬†Úo›¿nýE×¢Ñ^Þÿ²üióÝåhåæîPcïO‘u¨ŽÔHk:²šª¥FŽ>“‘õKÕnßh>جÞnßzeÿî"ëkÿÿârõä äÿÿs á2P0PIÑ0Õ3ÖSp.-.ÉÏͬJ,ÉÌÏÓ Éâ254†H›˜‚¸®!\\q/:$endstream endobj 363 0 obj 2075 endobj 364 0 obj<>/Dur 10/Trans<>>>>>endobj 365 0 obj<>stream xÚ”VËOG7ª*TúàÐK«Hͧ$ ¿€&€ UÞ±D¥ºjÇë1Þ²»cvf14MPNQO¹6U*Ô^{È¡@RåUI›ks*QPÔ¤…’ˆµ0;ýf×f<ï8ó¶.ô1Ý‚‚Í&ô,Í‚Èëè$1 mI}ÙƒÖxÌ—b9”˜EfE`X@–šÌâÂ&‚rȳ"œ˜ –¨–!V.Ј 33ºE³‘*¦j ‡S%‘ˆÄz¶nøzv‘.mŒŒR83u†èÖˆneY±gk‚KÓ‘LnÈ4õl‡*™äšÆ]¤›Ó-M»éæN#\öa'“Že0VH7ÇÒ-=Wöᄉpv3 ›f )vãô´öé,]³±ñd)×ÔooŸŠESx'¾\6øE>ex2—UØ‘]è&eŽPì‘DÇŽlZf]« ÛåøjŸ#èxk¯F9÷½äéæ¶XL…à°MIöõTå ‡ç?Q.õTí.âI¡ûÔue>TºK’Ì)8RìÝ\¹­}-î%’Ó Ú«RqžœÂj9ÛˆlX§¶ÔL7º€Åy(ŒFÛ*º£oÃÌôA4&* v­j3S£xm)ÅÊæÞ>ÑÇŒmcÖ jø¾Vÿ|¿P=Jø°·@U9ƒX61Fôì(E§5»ã¨U­öÎgÝÔž Æ^Ôôë•sk+zÖ³?ÞÀ)ßÝT^±%¯Yž{V¨Š¯M¹þM7'b±0$üƒ¶Mò»_»ÁYCìA­Wò´5¡t¯ÏÊíÜ–èP(ÕÕZíŠyaËÒ5ìFY rºÍp}4/;šÈÓõî¥:Y ¤»¢¤y½um(šCAL–u ìrºêŠx „ng&Åo`ÔG•È£ˆ¡ö_sÄï¸Eja0ô1Zk8Em3™¼ˆ÷ÔiìŒÉäIË©”jÉ„0è9l£VNul¿[£«E2Æ+´[ë²`U¸×ý⦩S¡3Ky¬·EL4©â„{&þrÈ1{m|ˆÀˆï7ÙGWì•h*0Ê%KfÑê U<Úîœa8a4,?$a•o|AÔË"œp‚VEÄÁbÅ `W*ê"ï—FžµŸÁ|WB­\Î3›cÈE® ÕÐmÐ Jì þÌ„M(ƒÁZ›u83&pÒÁäÑ}[VÇéÇ/fXàÉbsÓ¸¥ LÍ[œW‡l­Nkæ-®´MAT •F F t‹?ð‡Iˆ·«µ#ц+ŽdÁä9‰®HÌ?»#þ¨ jUCèptðÒ§ÑáèÅ“?vb(ŽŸàéû,: ÂvhtuGOA[Gtàü ΰÃǤ ”•Ç•n¨¾qƒúK.ÿ»AÍÉùåMÔ=¶A-Þû©ÿÀ:5{²³¯Ný[¨“÷Ü×Çoý¢¨ÙPè-wfî‡þ9ïƒzùLº¿¹3wn˹ÕkwCïJùܽ5}™Pò•”O܇å¥yõ×§fW”gëÙøJq.xóò‹Ð›eÍß+¿œ_]Y$¥Ò¢Ú+›¼Ëï­”¾æSu3¥•Ý7Œ¿u­4³ô]ñºwÞVT}yfþGvgñÛ÷¥|èôf^›ï_(Ýí—ÝiyêùÕåé~7T÷Ø•äÕäÓF¹:àÊÕëž÷BÞ„N½áJï\Ù[‘7þDê>rF=oIÞœ ¢$ox“Ë2¾Fý.'—=²F½­\¡\¹äiß”õsázýK/GŸ”nöœ7J õîâϵ"Wecy©- J²,WŸò€úZzÞ祇KõÑ´wõÜÒ­ÿêÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I&f A  XÀTÏXOÁ¹´¸$?7³*±$3?¤À5„+ f¯£™endstream endobj 366 0 obj 1637 endobj 367 0 obj<>/Dur 10/Trans<>>>>>endobj 368 0 obj<>stream xÚ­XksÓFýž_qi?Äéaù‘8áÑJfú C:ôƒg:kim/‘´bwåvúß{î®äX²“À´@‘vïëœ{î5ŸúÑé˜ðm„o'2Kêã÷ølL“Ñ€Œ¤ÅAìÅ4<á?I~ðê×úx¸ù†kOÞœQ| érӧØÿ™öN"úݪbIn%iJ/ß]]~<ð‡ûáèãÁˆ¾^ËÂ…w“ú]KK×Ê­H-e¢DÆ6èz¥<Ë2}mÉiº6Ê!Va%x:É•%UP0Øo N;"º\)KÉJ”N*^«-”-½–f­ä5‰¹®|tˆ7p¼Ž/.¤pŠ$Š”ðãü† M¹…åÐËL:Ñ…ãwÂÚ*—)ê ì)Rxd"W™&¤Éez'MF•KIzAízí­SÄ?¿ö¨ÐÉé•Å“hDüì!bOÞÌ7%?Ÿt~ÑNžSÇÚ»L +}„>œ}œŸÿ,®$™.f©Nhá„SºF.ª,»¡YOùB”Â8Îë.Ó]{%°D)fGQ}¼É£wÙPŠrqÓg.ÉVó2qLÀ[,eÔ5Ü‚žÑCÖ)éboTàù¤_ÙûËŽ7ýºØSæ×Òˆ<ç~9]|¬ŠÄ×ɃïG$•­— œÑ ¼CX59pÓR¦®vJ÷ÇûnzÚtϼÿpñãNü  i8CTŠI}L‡kÙ*gŠÆK™»¡I\¦è˜¿(2UÈn¹N« Å@8|O~ܾ9ݾMDåtÞ$>ûRÜÊ-ýñ§q¦Y}¯wûÒèªHñ®²A¼èhJ• `Næs¤0eS:TzÖ3j¹rá ô%1ªt\·óìè¸Ö™<·>üD§ ÖJˆ¿‰ ¯ø¬ô°X)§Öèþ—iªaNé˜Ð²s_€rÀàÒ\.UQÔ¤`/ %³”{$WŸ3û¤Í N¶üs}EAU!?£nJ .¢pÍ%P|ÖóÄÉ!WλÉ5÷)7ÖË, h”FBÿœ*—åh=n€Å°ò–•)µ•6ª]å~%­Í’•psäæÇÆË€ý2®Ìz/žw» »m7;òzû%Ú±×àdÁ KlU–@—¤–U2Ûh•¼jÏ5 YÅô6¶¤aÜ>¨È£ÉøE¾Ü•Ê{› @C`ŠÆÍ ÀM±Dsp.ø®îow$ádbXjk¦ÜÚeözÀèvn¨ÑVÁ¼«‚‚˜ªà±+ýÌö¤¿[zC–´‡€Ö‘ZÖÏYD]¡¥œÊvg…‘Ÿ*`œvÍ„€v$¥É ͱ…ähß!ò£Á0à÷AfÙ#z+Öœ™*”)è*ÖC_Að«Cžˆ>ð^ šžûžåЮø®gfA’Ãz!ý@ÂPKQe³Ãˆ¢;S]°ÿ宑¨º¸±ç¼©¨b­¯8ˆéÖÊ´0:âx-\‚b"lœÅ23W^¡ü»Ûó̃iËïí=~‡»ó›sìön½e7QËóV~\Ìc·3å1ÝDµu¼[«4(¦•Ù"¢ŸBåe³€`#`öÏá(: «jÑ;#± Ñjse£w 0ÿ§Eôô1x{‡éÿ¦–÷ç<ˆZxD7¸ÜY‚0.  2 ÑÜg ‡,$Æ1Hã0 Ô_ho?"F#¾B·{Ç0Ëü¤Íä¶%» ¯Ïš-êÅ©f¿_šxÑô‹Kx½ÒXR‚äìût^W¾Ââs%e¹PÛ­:vã›f û¯& ‘ÈöT|‰êˆâf‹á)ÒA%ÐUašº ÙlÆœ t<~e¶¶>¸±ªÆõš‘· „†[@Â;Tšý¯ÄZ6 |…Ñ7a¼ñÇ–,;o7i>ê=ôÙõãsú „X梉¤~3h&ZÜ\ë±wëŒJÜÓŽÅ^çòð¼ó`Ä~2O'a,ÙÎûñ~oõ,áEúù‹CŸêáC¾O:¾»vû§][=ukuçÏ;X™ìZÙŠxJÏ_гgÝ[‡ÝK¯>xæé‘œíDrÿ…¸¿z÷ÌZc &6LœõJùg`ùwí³£ûaØqï:Ý9ô÷WÚì±¹sª4èöŬ÷Í[iü: nR{4›ßÌŽž~¥ëá¤ó}¥ÑÑ×"9Þ¢fÔí¥¸Ûñ)¾|ŽSùfcæªt+Ô¹=fÀãþ⬓T|Æ lýÂÇŒÄÿqèÕ·vÈŸŽo½D‡ÇŠ5"5ˆâ»ÿ?jÉ»ÖëÞoÿTwµendstream endobj 369 0 obj 1725 endobj 370 0 obj<>/Dur 10/Trans<>>>/Annots 164 0 R>>endobj 371 0 obj<>stream xÚœXÍoÜÆ—FÝzia £@µ.d®v%YI,ÄŠíè¶ÐèÎ,9»¢Erè™á®imäôäkS¸Úk9ôˆ ‚"nsmNqá Bи‘«^Aò²ïÍÜ%¹„®‚CgÞÇïýÞ{sëÄ´5?Gà2 —s D´É4üÍ-Α…Ù:Œ´NÔô£™9‡ÿ¶âÂ|6 ³ |V½4M¬²Ö‚ÉóðíšS!õé%’û¹b¢C=òÊyRŸ:³vóÄ49[›6“k…Év3¹É8µz©–nQi4~jß°©ç5©½a^fûWŠ ×ó 7μT˜0³Tx0»D~B¤¢BµÎˆÇyX˜1·D.vX ––ðåKF„‚¯Ñgë³8ï ®mJîEŠy=0›IIE  »’°Mê‡#ÍH‘6 ˜•z¤Í¹C¨ÓqmF`’â$UѬ_‰$ñ„k«üÆÒ¨xnÀH½q†t×Y@FáA›t]µnæ.…¬i7­øIq!Ø´ÉH—Š€9Äm‘ Ø4@%Á@¥#”´¢ÀV.H@}f•60VІ*®O‡äç"èšÎ¦é ÅÛ œ#Šó›=í³²ÅŠÁ¿Šù zC[mÎ"kð© ™íHe/Pt³¸Z ™âA›pÒçNä±Éâ6÷}PTMS09÷©rmɨ°×I‹ m.mÔ í³'úÆU¤åâ6£L1ÈÈ ø/ x…ž”×Ë©Çü&s³5%ÒÕ”h„=]”ö€D0*9lÃ[xëЦ빪—n¨¿+1,"ˆ]0âp;°·Èj‹ôx°ZN¢.ZÄTAfò­ „W‘ ÐÂ;tamåúì40®ªŒÚm&•‰0ÍÔ ̺q|hä“yT¾êy$Mg©JÍ} $*þQ\õB–åÂÄ"î: NÈn0ŒAò³Æ™C’Bmºq¶sƒHé¶1ú‡Q×¢à,Éy0…ᘳIÀ»S¤ËÈÍH*­¨Ûd6ܧ–¦M¹AD(ÿP©îº –ìr±!Áim*à†Ú¹ mkŸÈb°¢g ‰Ùž X6\°„m¤Í¢æé®‘|I7´ÌQIÚA]´/¥ë°ü¾k£5¹ÓËLˆ‰Õ§=Œ -¬ePôÀ†;Ä‚§°D€AHÏ£š×Ì‚’Ô&u\×Må…Y2ŸÃ— ?p58¹ŸJð@9*§ƒÎ^+d´.ʼ—eê‚݆eT£RFF4>¢êzÚhGe_àí.1;µ ì[ßs7°n02GM >Î[ë Þ5Dj 7Tz&ËÈ7Ñ|J› Àï5ff¡tà °<„«¶t‡o0ÄßЧKn¹ŒÁ«ÝÆ6™)6²õÔÑTÕáDÐ[;Á¨æãg”#«-Ì“ìäï “OQ˜ kŠn %RrmJ]à!”æ­ru."lÅ– í:Í4aŦp(̰$£üVü`˜3KŸéç@»o[–õ›’ò5‡‰ŽµNZŠ€ ¾dÈ-‚v(ñüÛ¨°M,‚5‰¸‰[ežë[2ða7ÈÅñP Ó7”àòqz`±pë6^‹ÿOä!miçË–ïur'Áp8XR‡l ½ö¸6½º£ÑQ~QŸWÚâ9¸ÎÖ¬YR‡;}¸qa VifŽ­Í/$m;ra‹«ŒcuÓ¢>T›T˜Žé×1Ü€M}ßtÙÀÆòظ§}Ôz:yû\˜ÌàÆÀ}ÜÔĘÓÓœˆqyˆ÷4YcFƒtáv¨§CºÈK> Ã15~£‚½nfÒ {Ê´ôÏÊŠ´œÃf?):F((}Î 5uêÐú¨)€¥—5ÑŠd%rÇõi轓$Õðrí2©ÏÎ[@€s3à'ŸÌÎ-Zµdä‘ëÆi©nõÙš÷s:"‰‰ñ‚¢M*ëJ…KÕj·Ûµpsè,ðEïç¬sÕ;ÕD(k]ù^~•ô BB‡žÃ”Cç5"$¦iT°CIja wD:³$¹@*.tâÕž,ÀÛ-‡Q‡ ×Ô]‘>§(áõŸJ ¨tÛAšyŸé²cÜäÛL ¡ÈlE>47 ê—ºÞà L!­‰F‚w\']–Ë88‚Öº2³ÀÚ¯#Y84&ŠÍ1”˜]º0ôz)´“D¨óžnR {JâÃtÙgµU»µˆêHeúØN0ÏÚ)':Á}Së(*7ÒàÉÉùtl )KMø°9Ε‹ãÎeÆñ­E.ô’ Õ;ôTC/øÊùI½ÆäÑÎQtÁò§H£¶tABhìa›¸`ܡ¡§‚¹s‚aµª“ª?,YžÕ•œPTFyÿ\},í󬀸ˆ‹kéèñæ³MGOâÐ>HFýxw`ÿöàoÚýÁòî×íÏöÞ[63ïîíï?ý‹íÇÏã“»3f´Ä'Ÿ.Íè×ñ`pcïá®ýøÎàö•Ý{ÿ5£ÿÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I& AK0×LO!®ÕYÁ1À$íÂÈ,æä endstream endobj 372 0 obj 2849 endobj 373 0 obj<>/Dur 10/Trans<>>>>>endobj 374 0 obj<>stream xÚìØÍOÛ0ðQ)—œ8ûÒ¤PAÒ–ïmBã#=L‚-ˆÃ:MnâÒ°’”Ä¥›¦ÝFOUÿÊ='tÝ"@LàŽjÏ­‚’Øþù=;©Ì¹^²ÖW+xXÛ€øJøYÝ\…• Äšz9½T†å5ùõÎô›•ðâ¯6³«%ذ–Ámbåulëú&\DÞgµÛ æ}©›þ™_ðP@Ò¿õ…÷T/ÁR¹”6€ï¹s°‹àGDg\´‚ðŠv¾F'BѬ›ùë×e~ŸcA¢ÅaFc±êõ°>Ü܇¾•(‘7\¬šÉÞ£8ß ÇY ïâw~ñM^¶«åQ*Ì´—¥­V ’ìÖ¯,™Ù…H¾‹›{¨/¼ÊÝø‘5ÜyANÐReEÞÙN€A3ˆü+;ë´ùbš¦ëØG\ÖÊ1êÈúùj㎫ùL0`81ïD1&Ü‚c^ÔmûrzA! .ûxÌIèq8á˜çñ‡è·$±Q¥'×Ԓ玫ŸÃriÍÚÌ^k\…øøÃJyÕZO_ 5{÷ÃG»f¿»•×¥´T±dÇjuë“]L7·aysÓÞ‡J¹lïìBj{úP}AdAdAdA1Ïî(ÅG2Žî(dAOÔpð£ÚÐ&G.)5ö çÙ¡ÖØv4ÇQl8²©7&`©ÏÕžêù˜™™Ù~CïD2È ƒŒé7h_Kdq›áP®žŽ1{4ë¸j÷8®6§i‡ŽÚ8 ÇpœC2îõÃpTÏǬ«Í(^Wlÿ§Øp5z_‘A´¯¥ù ƒ 2È ãA†;gÌ*Ã˜Ó ånÖȸŸ1§©Ÿí ¬«ü¶sjÜÖ–ÞWdAÆÚs>J!ƒŒl§Ù€¡>ê…‚~iꊌnö‡ƒþÕe¿p¥,Ž¢Y }³p¥ÒuúæP¡‘åj€éºšW;çƒtÚ•åjÏàŒŽ?…úäÞ%dAdAdAdñ?ÿÿârõä äÿÿìØMoÚHpˆ‚qj%|6'×ê‚y $ÑjÒ….7»«ZmW+“â°×ªÜ¢œ">…×'‹O¹c›JXp]¦ Òã(â‡ùù?/N†K’•¡"—ó5 ]±1¡Cçü<|Ýql£=v(tÌñС¶¥ÛÎŒ!Xôo–Œ{ÜqÆ6½ ³…fŠ2+(ÃÏÅrÐà¢à|¥rðK‹Bôö´©œ:+æËÑÉ®îèà\[á;ìêò² o^ÏP>­°+®ÔØÅ3ö`Sx»¦4,ˆjCaSm±|Ê*¢â²,çO–ªY/š§‹påZ1ꯞ጖“Ý¿~ˆÓ*Vá½h°îû@í÷/6‡ªžÄÖÆ ¯ ÅN”¢(–m˜_ ÒüuÂ(•jü(amÜ(añú(åù,þ¼œclÍS”æ¹Ì Ž úÃü…Ï=£Ó çt©E‡Ý˜CpzìŒîtzÔŘ”¥ZüÐamÜÐañšÐ¬û¥û‡9†~ =}Ba`ŒF´^~´0åùÜ?˜Nô›ûÙ,B¸â¢üÆô‰nôõvŸ‚qµœ,Ûœ]Ê*VÛ´Ì~µÑÅ }ãkÌ|èÈ®™Êev“(—þŽöû/ƒŠð®ÀÏÒÃCÓöõ#p~ÿYE™T³qµhÇÐûKãû¸Ã\ÛÆÇñÈ+“M^ÐÝ®áæµ5Ñûcz>Ÿÿ@鬚?cSŠ5Y ?ø.²Á©Ag½l^½ý³Ð*¼y} ¥_äðh²#zl6ý«Ðvq´ðŽÝrª…ß¡$Ÿ.•WP‚ÖoÙçÃE@@@~à§6Òâ-›ª¶Ú†cü»¡ˆ €ìPãûJÔcDàŸàË;nwdHFÒix¦åÒ‰EUÕFެ–LNrÉ­Þ ©5@ê§å. Ž„y®°äñŸÝô PO¨ª–Óâ$ ÉU­ÇÖþódcÀæÐ³ mÛ,"‡‡™Lz·÷¢[¼›"€lp—‰ ð?€ð”¨{ Œ–¹¶mÄë¤.(ÉU 6Q[%§ä„† PÙ6mëG l'§ ƒÌö¡IÇ@Ikek‚º’Ë$œE çó¢oXÜ%Pü{€ìß.3Þñ x"€ÿÝxûÀ,˺èÀuAoovøYÑ›¹¾?}ïFä‘@f¾ïßHÇî‘ϘÀtvìù\€ ‹@šzw¾'ñdW:pgSxtï•ÌðÙ*He¿PRçz³#DÉqˆ& °Pr|Ç@;ä<‹V÷û(þ_„¬9¸o¿òr@àþ~þ­/Í|ñèHW⸢7ySéø.+òIà»l£•½s³/À >¸óf¼€¨‹<ÖKâ”ß K^8Î\Þ ;À&¿›’¾Ï­@@@àIÿÿÿârõä äÿÿd‘ÏOAÇ·!¦±þèÁ‹†DÞìvùUšA~ôѪcpm‡RÒvËv  „ñÄU ¦Ñ«þ`8ÊUNb 4DÐÖB:›nç9³ bt&™™Ï›÷Þ÷½™îˆÇÁ6_"±ÆÈ(‘1ÜçÅ‘hŒk†cé8µÀ„šÌH¤ÿuÍá„F&Hú¿ˆDÔ4ÜSÚy”AâD÷ ?Üln²÷‰þ²‰T"©ê`h`ð2†ˆžä¶i‚I#‰tÌ6OªFt”è@ROH,Fb"¡¶(ÄTCõÁ­¬PuZzìÖ&›x8/CTr¢­4 íŒ&J²eÇrYƒ×©B@$ƒ¬¡ç¢FN'¾ÓŽ‚¢!¥µÝ×Åïk)zu=ÁwÈèZ\WS©D:.žÈn#—$Êw\SZ,—$"eoÄ3Í>?ˆä{+ÿ ?~¾FSžî°Üs÷¡–ïôwƒÒÙÛ§ð錮GrxD~À:(@K›Ü=Ô „o{IRž ŠTr{ÏèV~žÑ*ѪvF¥Õw¡ú?´Ýèr‰SÑ…«t}n|ñƒ mI:Oó;oB;ìª÷‘~¢ùå%ܩͮH—èâÌwâ‘Lj»tê7 âhÓvuÝÚvçÐ{,<‹¬€¥sVÔ¾³Ž µjI5Í’¸³R›ìÙåªùzß&WÞ¬^£uÉï‚fÍ|ùÕä×Å ‚ÜV¾ðV[.½¼‚¸AXþ°³*š+!Ü¢38p0]™)fW$×Eœþ{^,JõksŒâÚ&oªŽ"´Xç¿rZãž2ce\È;¯„ólª‚Ê)}Æ© SOé3Që„(–Yô…õÑþ ÊB壸®¹r<çÍ¢›–Þ;TÅz­r‹C&Zè­íezŽŒ ›e‡®Ï°éÁòâ/‡~ÿÿârõä äÿÿs á2P0PIÑ0ÓS-ÎÌKW(ÉHUpVp ðÔ Éâ254†H›X‚¸®!\\û?x8endstream endobj 375 0 obj 2824 endobj 376 0 obj<>/Dur 10/Trans<>>>>>endobj 377 0 obj<>stream xÚìÙMoÓ0ðÔ"òiHñÝÊ)ê¡éºµtBÍVzËÀÄ N6Á}Ê)ò§>Yù”8-ë²PÅêØþOZ'¿ø5zÔ3:¼s[ìÛb2åç_ùÐãƒ1Ÿîøù)ÿBw—?íò½IýùüJ*$=㣃Éà`ur<Ôw¨¯œ V•ñÑûñ"~÷æ^ —qlcU¿þ/ø÷ó§ñ¾7Äoùh8ŠÓ#>â‹9­G ž(`¼†èwd [„=œ¾ûüÕ„ÿ˜3á¥Ì!_—€¨#s ¤®ÌqÍŽA¯×KfØìàAÈ2ð†.Ú* ™0—)T¤s™áÈ,È€@fnÇ Ißå,’Î×k eØ‹ð ³Ì²©V-øÙPIÀ–æä& :oG;dÀvÖÞ%0›Í¤ï¥¶ÚL&´€¾}¶ôöK«÷»ÂIBŸ±¶ p3E»Ý{û,©ÿ.d^u\œ ùb 0Ù%P]ê.Ú|Ÿ­è `'É\ lÔEÉúYtm¡1–îØdô™?KÙF뀹ދ\ÒÇûÛH]Ä#îKì[@]^¨êB·¸}§W”ZDôÀléÊhUh¢înAN(%e”›~X]"ÏK/Ï ÓoÓ‚~D*CtDT U¤•Š"]Ð*RDkjM´jÔ£§£ª(*ûÆ”´_Q¥, í·¤m€UÛK*¼x^Ÿ·•ìD(¯ýƒl–ã|÷ÕF*²J¿Š ¥/T^¨–]ÔffÛG÷ò²ä‘i$'&,K’–ƒìx%j7TŠÍ-ð ÿÿârõä äÿÿŒ•ÏoÛdÇSM¨¢zàªÄžc'•ØùéFšѱv=mj#q`h¼µßÆ/uìÌv’U V;Mœze¨(‚+‡øVÔÄVØ•(ê´hbe ÙT[qýò¾¶Û¤ƒ¤‰Ç_?ß×ïç}çyg cb\¡{2‹ ÌNCB„Â2ˆ‘’ñ,”Éy\ƺb¡ƒ­b°WËŒåຆlYÅ&ÔT"«°Bt…G,Û¬ÈvÅd^•X@¬)ÀUl®ÛUÄîÚì‰5=×' ¦€;Keô‘nƒmœ/|1&‡‰$§XÑZ4Iô ,i½j¬`@ c6’è ³»KH^™‚¥ŠÔØtH31RV¡a¾’kØÔÀ" Ê XÓâ×ÏGS&Ó|Ê#VÙ¨»"‹{„Ù¥(Q)˜êuóäpK6O°4²ÈÉñqv¼ ·Á/µÛyèíŽVèø+îlú úyì ObÞËÆa§…\·Åc^é‘ÿå;÷»g©»÷3Ú_\Ývëíok¿¼u–«Q¯ÞøÁ¸ßúæ]Jwœs~}ÿB#ßt·òô±³N¯<_;XoZ[±‘Ç¥@×þ¦OÇi36áÐÃ;¾¿OµBõõýîN;T¬ûkWÛ›ÿ„ê_ÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I¦ AK0×LO!®ÕYÁ1À$íÂÈ2—endstream endobj 378 0 obj 1908 endobj 379 0 obj<>/Dur 10/Trans<>>>>>endobj 380 0 obj<>stream xÚìÝÏj#ÉðN÷aLá¡òÔøÔÔa¬Ëó:©Ý™d7ÉB!§°É)‡6·5}2õMí¥¨§èE †ÁÐöË‚_¡w[°—6•*Ù–­±V–ÇÛR9|¿,µº-}øUU·¦h·¾ ý‡Owcûc`²ïº×XQmöxeE¦G[iŸkù}î–ø~¼wСˆÖ¶̘›{íDDÍDD÷l?ª]v+'¢ÍÀ.µíÙµŠNúµyÍMùÕe5åð\ôú\dïÝ/ѡۨ£žíDg­ÖþfVÔöÎDÓV;í™ÎDÔ›½ú¬gŸõ£—§ýèÓŸ\?n Ó~Ô;¶¾Þñ7vmG¢‘­Ò¨î×õ÷öM{ß?µ¢¨¤÷íS¦¤½cÛ³{&ºïD4°K&àïìZ+vÑ‘~e{ï£öËvø€›Á°ÚêJ>惡ÛµöÐfWe3:rKGvo=N£à|$@AAAAAĦ „¯E¤"ˆ ‚"ˆî°HØ›_"âaÞ+DWDûLóI” "„W"á¢}Þ‰´o­¶ïW? Ã0Ïp\ƒ"ˆ ‚"ˆV+Â\-DAD­NÄP#ˆn)R¹Ê™W³~ER$Ì«96¥͘€èn‰¥=ëGy‘¯Æšòoä¨`8Š@DAt×EKÍÕÖ‹¶š¾V¹`£è®Ñ 6RÓ×z»`«¯!‚"ˆ ‚ÈG‘\J¤”:?é³sQ¾”¨(ŠÙSuYQä]ºŒ(ê@¤Ï—ED‘‚…WE};ÒȬ(wÛ‰ðv5b aö¯~¼(¤”"QsDÁÛéy•,Q*±Û]œ¦û¡¢ÙiÈù5R:*˜ç&Ó³ª•i– ½¯»Íô#¥¶ ¥ÖHçN”l u$škJJèEýHh×jzK }ÛVKasDtF$e>¿™‹~”X‘²ÛݺåóÇÚÌÒŽ 8ÓsÆ5c- b±}Ývļ;®y'RŸF ‚"ˆ ºÈ»™Ñå²ÊAD«qˆæ§ï¾‘ƒF=L©¢–¦i›ê°‰*OjÄÓÈ´Q“F•?"÷í/Mj–±«ÿÙœ+ïOÆÝ@tÚj­m¸jç&5R EäÖ=»tî¥Dl¹‰oµ›î!=±X…™ÊÃ0[$RdŸr?a§}Ýdô»ïsYV¤Â‹™öîçEnÒKäa~ér×,„‰B-i!…›©ÍÈJDLiÉò¥DB¯NÄ<m±ÄŠ’ÅýHˆ}9sÙ‰®Djcƒ¬°U 7È¢±V°< ÃðCÆ>CBDADWãß\írYe ‚èÿYÔø&j D‹fPF-7eÓlšQýÕiS™fTŽxZzR£¶¦¦išŠ/" ™ˆø’"ÙµhÒj;V”.)ÊWѳë²ÑQéIn¼ÏöN¤¶Ü©¬¤ÃÑoÛìúkX]¹ÉÚDJŽ´Bf„Ií•HèÜ;‘òJ$3ßú‘ka—c Ÿj!‚"ˆ ‚¢«Á\-DAD­H” ßDŒx']#R¡(X¦3¯j$#‰_­F.N+õCTÆrÏZ-»|PD„éħ±fypù >×ÔÌ©þÍ=ö ŸF ‚"ˆ ºÃ"ÌÕBDAÑêDræDMD¹—5ÍŅΊ˜iJ¢u %!“SþÖ&R„0æ®ù©Ta‹$òÌ]Mv­5rþ϶Üì‘TîÔQ›"\·(wþ—DR¯[ÄÞ«ÑúEÉi?r’}yNZ_ÏÞØ îÒ°v¬¹!–g6ëk8Ò.-*&׉Ô"ˆ ‚¢»+Â\-DAD­N¤P#ˆn+’DnÌ̱¯ÿŒq™3ßµþ)é¾Ë ¢;%*¤Tžõ#wU[¯Æšôoäß_°à(DAÑÍ‚™Qˆ ‚"ˆ Z¡H¡FÝF$ƒBåöfÿ?D™REboE" Oj¤Î#%D׉|éGÒv£³y2Ö2½Qħ }Û Ñu¢"ÄQ"ˆ ‚¢»*òo®A•§ñÌS™‘w"OjÔÐÚ˜ÍÍ”G¥}ØVë•MÅM•6U•ÖMÕçÔ¨)­h§¥·SZ­± u¸ckdEUë¨v­ÖTMu˜ZQêK϶ʼnF£²¬kúvÔ×~÷1GPAAA¤Ãüÿÿârõä äÿÿŒUÍoEwT¡ˆð‘P$úTùPâõÚN›6Vã$m.´K=tѲ^oœ…ýpw×I¤¢D=Uœr¥(È‚+‡ø”C…蕞JU«¢·Ê®¼Ùá×®Ý)¨[»ó›÷ù{ófv6?‹ÆbÐ}X%à¦A~ bH%¢IÈGò&¨šV±Krp–U{–KÕÉeMÒËHH²¬Ø¶bÊd©fņUÉ‘QŠ’#EGóŸp 1˜Ž&Âñ1>ïAÙ’JºD•P·%ñ Tl0º*;2ÂD†YHR?š)A7‹MÁTË–Is‚ÈfQaô'C¦ ¬ªÎ2œ™áùÅp†ÙhSð#=Æ9ÀAçÎæÏ†¶=\G_)6óiš¹jØŽ¤i £êXµÕeU^—°Ô”Î ’üc›Î@+㉙–™Àãcxf[†NºKë„£ü»Q¢ÃãŒ#žq¤Žb­Hug•㌲\hOPY>ÅNÖ0ñ¬¡0ÊlŸdŠÇOÒâaé,ÛPÁ0ËŒÆT»D™ ²ÙÝàq7Dqþ£9QdiF3{¾)D1ÚýÿþÇã¬$ÍAO=W”EÊH( c£ÊÒ#ýS-B·¤ÂHYJÆ õF#¬\eÖR´ò˜FI Ù9½Ï¥0MYÞ2죱Žá¡gQUÂ&­”_p:âl•±vbx@ÊŠì@A²»ÙI^…Šƒ×›h¢Õ±e u‰=‰Þ=u©íL‘M]7¯ÂhF ]Zå‚èèx¿8Ž èÕìÌå%‰h‰"Õ­Ša¨F‰Ê£¸‚ÿSL›'zÛœ-e›ÚÄ %}š-ë2ùÒ.iò/ò6ùÒÞBúÿé~RÒòÉ©è$¤ð9EÝ·N#-ßôŽ.Y’®cÅp‹¡u%UlŠh†ªá…N]Îç®` Fñ»…¿4¾“éI|¦RøY˜]ärŸ\æ¹ÏÍz~Ç_8f>åÁ±* w ïÅ4wir³sÀÃâÜ "‘“¤=\âFú»èrôwí“ÚQÚ1»èpç‡ìÐS´w.5ÓGgõ>²ãÞ¹~eë'Šö"‘WÝêþwÙýàí~ò¸¿¸Õ[7ÉþñµíÈ„!ä¾»ëy5:m¡½æ¯¿BŸPÍzP#ŸE^ñå–Ì\;nJžwHe¾~7¸úfÓûöa õU½æ;î íOŠ®yÕÆ7«¿õ½þEý~µö½yëðë·ÙuOÕƒÓµlÝÛÎ’{î9ÿhýh£noGúYÿ‹<$õÈKޝÁ¹}IpIpÁšdówD·Q“ ‚¹Q «D6ƒµ#ÂwЯdí(:耔e¿\Òä¯üŸ[{áÙÆãÒ}ïF6ÔÜôêýîá!j’c2è7!òˆOØ!ú’èí6BôîF°~¡±õOˆþÿÿârõä äÿÿs á2P0PIÑ0ÓS-ÎÌKW(ÉHUpVp ðÔ Éâ254†H›‚¸®!\\çñ rendstream endobj 381 0 obj 3189 endobj 382 0 obj<>/Dur 10/Trans<>>>>>endobj 383 0 obj<>stream xÚ¬YÍoÇ—BÝzia ø)H.W¤šZõe…,HŠ] ,ØáîÜj¹Kï‡(¢­œ‚ž|m B{í!‡þqáCPÄm®Í).D·R•@$DqûÞÌ.É]‰’V°$PœÝ7oÞï}üföíýk©Äô$ ø˜Ê«DRð;™$™‰4±)^“ø%‰ÈSø§T®ÝÚ„i)¸Øù€iÉ¥É$d²Yái˜»©Ž€ü éüŒnþòZrI ¤FjÔQÊÌ¿Y 6KX®ahFIuTà8EÆ¥”Ð7ÝÕ—ýQäff†üFÌϼ†–Œ§'ðæŠAœ²f¶C+UJ V#Sʆvßen¹6S‰cÛ1¶Sfdž(¦ÊfH`“Ð9‚dÅÐ5$~|ó…¹Í¹7ÂËŽÜ¿?•%:sl_E6¸/¦G'ÙŒZJ™M+ƽˆ¦Ø¦k)Œlk”¬1K·IÕf®j’25T€±MŠ(OMÄOuݬÙSÑa5½‹V©EÆõP°mMe¤VÖÀ…¤B·Ðc¶biU'dZ]e1ªÒ‚Îä^™l›Y—ƒ æhƶ¹…nGÛj´N4‡Ô4]ÇŽf¸B9¤)°²f¨<,°ùüâêB>Õ^¡ÖÖ˜ïRTõ*=­ç's«ËoÏ-/ž­ >¡Š¤Ê­¨í:5J.-|žd¬›cs› lš}z¹ùÓëøi“NAÞ˜B!ÕBFûiW£]×êçägPrþùˆdŸìÅ\ `;¡EÂÉ!pÀŒq!<:Gk ¿gZ>„É,’¢¦‡mÇÔÒ PWµ˜†V)0U…ï~zc¹áÜ>öՉпé\ÔÙŽ©‡ù¢°ªÓ“ßè…3²åŒÒ 7ÐÖ˜!Q‹ÐÍd›ZšéÚ;lD in@vA²S=³hÑR…ŸÊÐ ëÌEË ŒT-”#á¨Z±È,×ëa|wŒ  ³Fj@Äše;¤Ä¤‚“Qê÷i´“;™Ü芘/_J¥T°c¹ŠãBͪ «¹€aÀ,W¨.oÍgM®¸Ìô*_”n›š ¯TÁm¬o!qÛ¨ÉuÈ ÍÀ[Ôáq©š<äÄ©W™}#ŠBÀÊt›…Ô§¦®Dë}ƒ?ÕsÀ64Ë&²ŒFÁ΄ f3V±}'Zª•ÊŒTÉx8mÛ­€PÙ–Á³&ð·6A6€_!6¸$\CŠ üæ³€íËsT™CÁ!*|o1»j<5Í)£thu‹é«@°®ã€RHX¬Ø(QÊ´Š®ãʆ}‡[fÇ_é™AÖ„X†eeœÇ—ãYÕ™„’’4‘ȾVYÞײ—é ³¯MeiâûЬŠwO Ö—ñ?™˜’áS¬"Kðüµq†¬Ò|™s…3 !„e9“ÈôHÃ%¹Tè Ÿ˜äØ\`ÅŠÆÉ‡>ÁN:ðºÃþ˜&&:˜¤ì…˜¸´p]öBL\X`êJsL™.&YB#•B¯Î7CÁS€ TÙŠDï|R¬˜Iqb&õ‰ Jq*+¸¥°¢NKv˜Î»±ºGo½½œ N•¹Ñ(Ë)ÀIϪE·jÞ4Ι äžÖqngz±xþêȾ~®ÏåL:†Ï…ô%}.„Ïô¹<•>·•ˆË7î’7Ipý,·ol¯ÝýiŽO=ÙbU]c§N>@l–HÐþ~èá‹‹kKîòÅŵ%÷ðEßÚ’_TèN^)äJÄ-+Ò^}A­Â¢ ióCOIÐiÀr¬ÀËq/÷¼Ä_…óÍi„$¸ÜöeÁH±¢'ʼnžÔ'zF0‡Å`›²¨Øª.Ïë‹‹«›ës«›WcÎô˜,2ÞC#=:^•¤cQI:•¤ûSIZP T>£±#°¶8we÷ãÜ«3x0ÿUø}RŠãw.}Y¿sá Ž:i9Ós2 Î;Ž>0 «Fp‚ì=õ .{J§Sq séËBN§úAî²u:5F¶¢ÆK¹Ûsë WK8œyõt³_A²I™l Ï éKz^_lÒô”(wªŽ›†^çji:c÷Ò—Ü=„ð{¿49-ÎÕÁnÞD5ÝB¤­Ñ• ïú]ÑþHåXÑ“ãDOÎö£h)Íc¦Ùùž–kïÖ—ô܈½ùKéXáKÇ _ºOøR$Ë1­šø]¦NЙ!ÓÔÅŽîÂI”ZLôw‘KÌÁ§gþ°ÝíŒøºÑ’ïa’n‘Š©]6]]ÅŽƒÈ~ÞS€Z(ÔOµq+T±L›àši05è9¢šÙäM_Œò®BQóF¤¯º¸í?’÷5·¶BÊP ûZ¾‘ØÃp³B Ÿë‘>¢»jo3ñüÖm"7ÊFÜ)ÜLŬ¸¦A šCtð¿x0 Øcvì„”©hç˜5.•}'N²èÜÈÙgÆ.ØË£â$‘@«k¦µE¸MUféš]žám?Š&r8càæºÃÛ¼Ö’qĨÔÍlñ¸£ŽñFÔEò&æ^M³EW3ôòd<-Xr ÛŒ¢—<Æ÷цGº±ˆ8a™c¤§IÌ'†ßŠœùê%tbâ ý·)ÑW/Pæ÷á¼—Hñw@XsX‚ÓœGñMÐJr~ãgÉ•äúò-"½µ¸$Á¯ø¹ùóä ªbÉ{:›¼ UÉ[kóD"+ ×¼öÀÀëžÿÓðCÃÝÑ¿¼£ÿvG/¼½£žÑS³;:xúçÙëÑóå雃ømÐ{ÚøèÝûÿŠ£çßlì¾øãì‹ö÷‡¼/¼Æß»¼ï½8yçÉÀw<ïËÆã‡ïƒÌüÚó>kz~üQëùë ’ûí=ïßh)ü^뫽“ãÚlà½Våãö¯¾{ÜüÃ|4¸Û<þAã5ýß8z§¹{øûÚ?¿ý- µv÷þd~pð»ïyÞ³ÆëíÝ—oíÍî7ŸÌzŸ4z·¿|pôpß~20øIÃóˆ÷à?ÞçÃÞþÀõ†wòn»ýÒûðcõZÃkßiµ½GŸÂèCL¶Û‡Þ{»ÂKÞ£öΑ'£x;GmŒ^zU¥åÞa[ùmëo<öìáW¥ÏšïÍ ÉGÍý¡ÆÁ_ÄèØ;ñ†[‡²5½–7|ò¹-F¿öÚí|óÙ¡ýðaûÁÃÇÿ£ÿÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I¦F AK0×LO!®ÕYÁ1À$íÂÈ|TŠendstream endobj 384 0 obj 2531 endobj 385 0 obj<>/Dur 10/Trans<>>>>>endobj 386 0 obj<>stream xÚÌYÏoǦBÕ¦:ôÒÂ@3ð!  ™ärùÓ,ÄŽl Ec#RU¡Œv‡âÆË]zw)Zha#§ '_›Â…Ð^{È¡@\øq›ksª‚ÆT% Q;}o†ËåÒ¤¹+_"ÙK¾™ofÞ÷æ½yoG7çr™r‘À£R…8›$¿Åj‘T yâ0R›SD“BÔþÓsVaX–½”#•ŒJVk.ÃØU=}fõí¹9«äP Ôu[ ¦¯N=‚]ÙKù`HÚ3Ì‘ƒyÒÄpÍH›zZ9D§%®ç´4¯å°Œ„WΫžÍp¡«#v º ¾I7]œ'˜[‚ÓuêèÑñiÒ®Z±7,»mÏ&ŒÐ-j˜tÄ©l‡hÌñ¨a¹Ä¶Ìm²–v°i·×ÎdÈëvÚÉEâ:[ mØA¡ÂÛ‚ÙêÌd.Ò„uQY\ßõl eo2y· ¯N¨i cØØäfúsJÊ«Ð.ŒÓ Î I]rÚaTê&ÔÑì–&±l :‰Šn´<ür9æ‚<ÔƒÂÊ0@gšáÀG‚U<»v5bʸ|›™8Óh fp™çÖ&NèØð¹EÍe·áÿ Öß›j°K[ÌòF7Gs¨[²~UZæß ð žç qyrnTæH÷dS„áTP§™" §gaû¦ §-΄ðì.ô‹­‹¢éäG[!AX’„UaRX mª 0:[ºÝÂbËkdh$´ ¦]Ϥ¤&15Iˆ©“CL­g2sÀ%£tV®“Ÿ’á®°þ˜]õΫזϞw·Öóx-}úôÂ`èy¹ÉÃÖ×ÎŒ– kš–ÑéÃRc`¶áQ #圷0вX{庵µ–†-~Z,ç°nêuÛÔeÝ72ËxDŽgÊkÔU¸ë›–¨‰G§6îd¿³øÔˆUÃ,>=bÕ¡,>±C®.³ø·íSsåøFظFà)ÇX¾Zèc¸µÔ<ù9–¯Tb½ÄÆ z žrŽåáwDˆrX¾NÂæ¡ƒ ]vSVדI…ótRaŃÔPÅöóƒ£î¿ÒÌN÷èÇÌÿ ôNwçàíÍ|ÿ{(Íövvÿl°ÿûrþ°ó’¿óä•ÝŽîýEþIç¿òåíÃ;{îýÔÌ'Î ¿ý_þù<ßKêðãw}ÿ ÿðc õB‡ûW{þ¿ûo>dÖ÷ø{;ÒJü®ë+ôO~ëЧô„7µ^_êð_û]ïïb/:þâÁ×›Ÿuß[”ȻݽÙÎþ_¥tÄù|ï@•R—÷øüñç®”~Ë}½ûð@J?¹ãß¾zpïRú?ÿÿârõä äÿÿs á2P0PIÑ0ÓS-ÎÌKW(ÉHUpVp ðÔ Éâ254†H›ƒ¸®!\\ÂÑŠendstream endobj 387 0 obj 2174 endobj 388 0 obj<>/Dur 10/Trans<>>>/Annots 167 0 R>>endobj 389 0 obj<>stream xÚŒWËoǧBÕ4:ôÒÂ@3pÑš$¾_bb ¶,ÛB‘ƈ…¸EX°ÃÝ¡¸ñ>èÝYRD9=ùÚ.„öÚCý⇠ˆÛ\“S]8ˆ$n¥*HˆâôûfwùZFVÄj¿ïùû3{k.•(æ Ürp+”ˆ»MRð—_É“R.C\Fêsiù*M²üiÖÜÅ-KÁËá Ä’—'E¶êÀ[ÌÁƒoQÓg ²Õ0<?Þ`¤I]N:ŽO¼†ã›:ñ¸¯w…iŽ­Àý–ïqRw\xáy†½â [oÍ¥Èr:ƒÚ)ç®Qó9#Òá¹Æ\“Ô˜F}‘¿Øøõ«IÝ·5n8¶G(ÄcØœÙ:Ó‘¿ÆˆFMˆºëXR|„gè,o’—KÃà–39\»AÍ›[®ão7Ð=0ÊiÍdžŒÐ¢Ò -Fl‡lPŽ“dè”SéõˆgXMS>Ö"(ãM×p&ˆ/©‹Òx{ý ¤*ÂÝ"™t:‘ )“\Ÿ^épx!{ ÝopÞ,'“ív;–uGKhŽ•Äç|¢l:z2ô(ÑàV0-¦Faœu9 Ó°ê~ld—€(êI´‡¹}êK8¹oSÎÌÎ@kæmƒ7äÁbµh³‰sh4å ¢°Uäðü‰Ëf‚¼ ͳ„î˦‘†¾K/MÖ€b–£û8 5ÇÀ@¢ #QNA.ËJúܱ(ÌG§w}ûîÔx¸"]¿pmsª°1^§ÃÛ·jÌ…ºŸð©éàà‡F{4 ÷¨‘q  £±¼ÞÉ¡³^°iÕÓtÚˆ¿ç[u;ÑÔœ0®3 ¬pDÁ# ènP†[”ÁËQ˜¥D6*¹w’TºL~ qÑm‹FÊ•L9D'‰ÅQ04þ²¢1®gËÊ‹Ú1ªG)[B45æyrRêLáÏ—¥ïA%r~•œ“ù9÷²Â\˜`^'p!ó¥ [¦x‹ªg%ôÌà°Ö¡Da—sÃ|ËÀ»õá°VdWÊDz´¼*Å* éT™L\8ƒH䞘¡9Œod%qnIQ”VÉ2ƒ *ʨÌ…Y«…À\©ü\«FvTÁì¤`eA/SÀKç<€ÎåÁŽm¨pBˆÊe\TªÙHC6ªÕ_^ªV•……3“BÎu•/“VùäâÄñp]ÿd1©°ªU›ªm9†NFU`¯¨2 ˆ,ù¿² &ämå]‘É Ý‹0£¸ÓI#SD6Ýñáx7L±ÊSB€ÆòEz>¥²©xee-Û,ÈUè YYkáêyoèueÅî«yÌfTkÙÐ4œŸxPr(“¾äÓD`³y]m¤ln¬2ÏõT©Ø 8n”ÉÏô%xÆ­Ÿð ¿³JmgócÂ0P\e+L³E§ã1®bùô&É–T,VžEz£T ?6¼)tr©ÓÑÉO‡³7Be•8ìã°#Œi­, j8„)Q³èNU«U¹¥ÂˆÏÁ‘¨:R†W ÏôÏ€yÂuû¸ÞºöƯ*ñ0ÚåUŒ=Þ-4¾¨jÇGÚ¤ü0U${ªƨrçNåPPùó§ò}øŒñžQ19u æJc½:õS%!ëJyx„Y^õZÕL$ÔÌé;v^ݪ&®³&­13H6œ…oÁJ¤äûJBžHI±ˆwülßL®_3¹™|ýÊE’~eãrþ‚kõ7ÉMøzñYòl+ɫЕɋ×Öá«óÒœÄb/‰ðêŠnlv~Dý[ýwD={GcÔgD<øËÚ™!õèJquŸögăîÇïݺ÷7¤Åbßëî>þÓÚãÁfÅ—¢ûîÇ'ïÞý@ˆ¯»÷î|L ù­ŸwöÏôöðQRŽ?î?šõÅü·È¹?Ø¿=ß×äZÿ›½“ãÚëàZßúdðö‹Ç½?~)©™ÝÞñ»Ï™_!õno÷ðíOg^ø>R³ýݽ?;üþ‡B<ì¾4Ø}òÊÞÚ~ïþšø¬{G\ýúöÑ}ï~læ³®DÜþøb^ìÇÎtÅÉ{ƒÁñÑ'Ôs]1x­?8wÿÔGÀ™ Åû»Jâî`çH¤#êŸbçh@#ê‰hjýêŠÃö»þße.ºƒµÃo¶?ソpÞííÏvþPÇâDÌ÷³Õ}1ò…PïˆÁ Ú{xP?¹3¸ýÚá½ÿÔÿÿÿârõä äÿÿs áÒw³P°TIS041Ó3U077PIÑp-KÍ+QH)ÊÒ EùéE‰¹¹™yé ™y ©E9 ¥Å ^IFªDin~JiNªfH—.Ä ]¨I¦& AK0×LO!®ÕYÁ1À$íÂÈ_¾-endstream endobj 390 0 obj 2144 endobj 391 0 obj<>/Dur 10/Trans<>>>>>endobj 392 0 obj<>stream xÚ”WÍoǧBÕ´:ôÒÂ@3PÑZr¤%W")‘M%Ȳœ!% CU¨ÃÝ!¹ñî½;-¤±‘SГ¯MáBh¯=äÐ? .|Š¸Íµ9Å…ƒAãVªˆ„¨¼7³Ëµ'¤Dòí¼yóÞï÷>v¯OäŒÅ<|—HP'9xJ²”Ÿ'#µ S]2ÉBÿ,oâr¶åàbÿ¶e¯æÈ’±@*5P^„½{šÌ29ÿ5Syc"{ÕL¶M·©°,˜[v|Á‚]êÎj¾ái”sdÎÌiëó߯úÏ«O1ºPþæ6·g~þkùrêBÍg/Ç›Ìd}—ù‚ØTÐ2Á+NͱHŒ¡BNµ%XH.eS†Šh¨@Tµíô©‹C1LmÅÆ¶§…ãÝž)ooû .eòÓš2üMͦ . ÆqH¥4P‰a,s)Šf C(xҬɨpü:¡5°MB¶Ëꋺîã‘íN zᥲlæ¶gRJšÆ7SWóå'ò¸E__ß\_­ìðZ-†é©Ô ÚVBÁTE¡‹…ƒˆЩÇñPä‘·RW‘¶·ô©K/b-ÍÍçqõLJ,È—ˆà£$lð6Áê“ÕÍ Rkù–p¸OœPÁÆlTôhS¥–A6]FC~ÕÀGX F­º`“Vù.Ô9ˆÍuq0ƒ6ÀýÄAUÎ\` Ÿ±ÂÀGÀ˜´B4«ó¨på ·Ú¡DgaÍ¥õÑݯrAàTtº‰¹Ð !î«2bs_;¨±)ÅØL«ÚÅkZÅK戋¾äMˆÉ?E@±ˆàð€ú!˜ò¨B«Ši 4±°É7m´ɨ˾‘{L4ÐåÐñ—ÊWVRÉb¯ÉÂY;„pÈð²%hY¢(¼ìH˜Ë<.€ ÀjB-‹6üF>Xy#§ÒBÞ(âÆ¢±`µÄ¹Yø‰|W©uíœìÛðÁ>¤ÖTœ›‚ˆÝ–Âeªƒ5ÀÌL@Ŭ® 6ìz<Äâ^Óe‚¹{”îÒJ|àÜ£>­3eÊå¼9šr­ d,‡ Ì$%à$KŸ Çuír…+*8T& [àáq@ôšÏÛPpR¨!¼·^Ä]YQ}ͧn8; 2¬ïñiƒù>£¶òø›ddQXH F,@‘ù¤ ^ ƒT0!ì]ê ÄœRaª¡VÁ¤Ð Çky°:âL fä&.†@¥{ ö¼Uo`é±ÑN¥+6L¸YÓxD ñî‘ДgI›‘7Z@óªÐNÖf °§¶Ä¼ÂHGRÒ:ƒi ú\©Šžè^—ƒð`ˆÖ=:ÚsÐÞ!Ó±K¤gn!5Hry´ãr L ²?µ^ÐÖ6|ÕÚPÿ‹erQu1m½8¢¼†=•¯¬VVÓ]L{²„ž$˜(DR 0!ÓƒGÁµ£ÎÓï&Ìô5ÅQÈS ¦ µ\ÆÅT fMÐÜÙYõÊÎÎ9SˆûîñY›è¦§rÔRAsøµ6˜EI4q! ›.(y +"a8D]Š…£Z›ž®L´š¤Ýp 6 =mdž­#U¡ò»Ê 3ƒl1]¶Ž-D8ul¹ªÀú.ö»”AV}UÒÐ*À2…¯¹¡µa«Nb 'M}—B‡Ž Œø`3 ¦gÒ7kjgÒ6ãf–tʺ˫ïâ‡%æ,#˜L®ÝFß%G*Î/+³ˆ®iú†xM'« É w_±£”¾ç2Ÿ»M¦¹$—49OLÞsR(9(TƒoK\¸†6Ö€&™xÓPçñ„³ÜbvµU¡áTu6Ù…Z!Ú¡§K2ãúìŸã¼©ðéïÐx`0%T4óE£€O9zœÆ÷ðÐ=àõ€zž*x@µBø Uu«B“땉ëd~ÉÈ©‡¬|çKø\\„+õ°µ‘]û寲Ù×_ºLÌׯšðÖ¯å_g7à†¦Å²[€q)û2Y(d/o®Á³ÚÆ• e2ÏËøÕ‘Ìøä@ú·<ùß@z(N†¤{| ÝûËÊ…¾ôà¥Åå1üu8&ïu>|çú¿¡ô “ùNgÿáŸVF?—ŸËÎ?:ûï¿'ž½}7ó=)¿èܹõ(Áί¤ü´s¿w¡{€?•ôàôÃÞƒñ–œü 5£ù›Ì³=K­õ¾<8;=¢Ýî®õ¼¢7¿ÚýãçJÛïžþ¨óŒû”Þîîÿ¡ý¯±ç¾‹ÒxoÿàÏüý£ßÿ@Êûç£ýG/¬vï®È;·äË_Ü<¹uÞÍŒ}Ü‘’È›ÿ•ŸMÊÃÌ…Ž<{'ŠÉ>‚ žéÈèµ^t*oÒ ™¢cùî¾FIÞŽnœH3‘þ)oœD4‘ɦՋ¥Ž<ެßõþ®¸èD+Ç_Ö?í¾»¢5owÇ;GÕÒ©<““½ã-ueONž}jé·2Švº÷µôã[ÑÍ׎ïü_K_ÿÿârõä äÿÿs á2P0PIÑ0Ó3ÖSpV(O,IÎH-Ò2“sr’“³5C²¸L !ÊLMA\×®@.LuÔendstream endobj 393 0 obj 1978 endobj 394 0 obj<>/Dur 10/Trans<>>>>>endobj 395 0 obj<>stream xÚŒWÍoWw„ª¨éG½´B*C¤Vrü¹þHJAš@.A•êÊ}^?' ö®Ù];A'Ô×RQEíµý â€*h¹–SS¡B›4 ¬g_çí‡í¼ÔN´Þy;ó{3¿™y;¾Ð §“€ /© èsÅ¿äp2Rt ž˜³ƒDŠÿËå¾£³hÅÅæÍ"SQÈ„0[Då4Ú΂Ààì¹¾ÈTÜ4Lb*²»Ú4 BMS çdR*å‰|>¬Ð­QÕ„Cà|g¹M†bQ;1pÉÅÉ_ä;Å%þtvž‚Š*—ˆN àîy*“ªAaBAU3aàV¦|U1ASa†ê%0” à ô@7çi‰FŠºVÒÂ'Us^Ó ß='ôšB-AÜÞõ’x^Um§ÛA((Å"êª2å>´a«ªl*è .çK­iç1 Ç…¦ƒ!04qM¥@Ô÷ R¦0Ñ•‰Š`;üŰ <è¼fÎ;˜†àb¦‹pQ«6‰ªèZ õ8Yˆ 2Ä¿ÏU d¯Œ«~Š=€ö¼·P¹<éÔ¤R^¥X&,AïœâÃZ‹Lå›éMI)îí ͤ~e5±Õ Và<§kUµ ¨‡>Œ6*9]Nð"–N§Œ™!ÈWý`‡ýÇÓjIQwq¦NT£B¸à¦Å¤:˜+´L*Eƒ¢¦ïÈK3Çž·:5ª%Ó/Ø"‘1óÄ䕬S™*5ê¶ ˆI€bZm%:§xÙ—‰A‰‰uJL[Ë'‡3n[JØ–9ä·Ôˆ®‚¨Gkû+ '„²KI-¿8 §r·CÉny IÍ/W|5rnñ­è<ÝË£Ôk@ûo½tk,ß _|½¦26ĶF*µìŽ­ù9‚¯C¨‰ìàT21°7Õb‡§£6>KNMÎL™Íiª·÷žàé˜ïN£YsG¥½€ÝqüÖÅÊ;}FE²sow½*»,,'Å(RÞ!èôe×Á,íœÝ¢—í§4‡À¦æsšâ—äëtJ:ãH8r^À¡,u~t‡˜¸?¿òŸžÓ‘‰ÓŸG¦#§Ž…ØáÉ©þ¹Ÿ±/"Ó8`Wiä,iÑã8±DŽÎLà/×éOû˜`ÞÇbV ·¿%ýÉ6ÿiI+lu³Mº§µ¤õ{?ŽïoJËÇÒc=ün­‡Ý³\¿pëg.-oZK+߯Øï÷²gÌúÕZºs›­l_»x‡±çÖ­«·Q -_1öÄzØØ__å·Ž´¼õ ±Ü[eý¯¸æš½Ê¾ ¼Ñg—«Û[ë¤^_çÏåGö¥w·êß=s¤ž¥úÖÖ¾Ò_\ºV_Úøvá÷ž·ßâRociõíÎú7ï1öÐ:`/½8¼:¾V¿;Î[WÙñçW6¯®w=-Æ€]ù›=ígkýÛ¾nÛ/ØýGÔ>‹Ù'ö»ñJ÷Q3bÛìæ’Ë»a/n²˜/ýÆ7mâK/XEnx’Å6lùëÆ/N.,{|ãåÜ“úÍqWóF}­×ZÿÉ•¶Ø6ëol$\©Î¬û©áJ_1ÛÎÕn¸Ò‡Wí+'7nýëJÿÿÿârõä äÿÿ-ŒA ï¼bšX´±¥õª©gMø¶T ©~_°žvw2Ù#'Ûs‹øeÅh¦Ù«U÷Ö>B“Ï0õA8g|ãqÑÁb~åEu“š­^ó‘ËQñªY†UÙ&öŒî)Nøˆ(6©JaíMÈG;N®ä \ú¹‹endstream endobj 396 0 obj 1863 endobj 397 0 obj<>/Dur 10/Trans<>>>>>endobj 398 0 obj<>stream xÚ”XÍoÇ—BÕzia ™ª ,4ER”(©‰TY‘l]j#ìCY(ÃÝ!9Írw½³KŠHa#§ '_›Â…Ð^{È¡@\øq›ksª ‚ÆT% Qœ¾7³»Ô.¥F¥ J³óõ{¿÷{ë»ã¹liŽÀW¾æˆW#9ø™[œ# Åñ©ŽçÕ£<™ÇFcüêlËÁÃø ¶Íl,|ŽlUam©˜SÜ~†øuFZÔ7êÌ#&õ)¾~‡×© ¾C*Œ4¨É²ä*3h ™ÞúåøÌÆbxàÔz“Ù¾~]2ExõX&¬Éµ}N}¦v —¼Êx‘%[p#\dž_6‡=V|©:aÔ¨G`ü¶ önÚêŸ7+1¨`˜ááµ,f†œä"ûmÖÚVûÊSåé7$š€ˆXͲáÝ…"Þ±Üb„~¸eàƒØN+=] „W,†¤¸Ì{¤áŸ8UÛf‚zm …¹ï‹ü,˜¸ ƒÀÌj"m]hö¨Ît£Ú…BllÙª;ºW>†:JPÝ;x»Pև͡.'P_ 1ˆº‡a0 ^d|væ+ƒê\-K7>hæ5ŸÙÃÝìj»Qßb—›XoRŽ_ø~¡Ìê š,쪰…WŠî1¹á]Á–ÍãMt•ç4”f&ñàµI"+@,:oÅå9‰Þ±¾ ð·(dY¶c0××m „¼q@«hû` " DP‚ÔTe#ý-dg#©L’Ë/‘×£µF\3ْr6™†ÿ“ÔäìRêAϱ ¤:f`±Ôôœ>lÓV¢nAËA^]&J é£çK×|`éå×V·V/§×–Ò0FègÔ!¦ÏÔ’Å%¡ƒ—¿Ô©ù¢Ö(wYŽã¦Vk ûÒN¦÷R¨ò³xàPZ쉠Ï–§^Ò áÔ`¼•zT8‹kžªyát §mH%/©éòô«?ÝNƒ]Hƒ]Ä]ðŽ…a¨~UËSÉ%….I~&¯‡ï¢q7ÇiyêemyÙÔ0ËS0†Èò06|U¦t„ ÜêxÜoƒŽlÊ$_oâYŽ“Ùr̤ٞðå‡ñi®,·®,ãûQzGáüuh.ÒËgÏ_Žð2Qz[ÄhËç³s¤T\ÐÉU ‡˜˜l0Æ©y´ÑÀ"ÁÃ]×1´Y/ÔúÖø]RXÈæÔ(-Âïââ|—J9øÆÿXÚœY»õó™Í™×¯]%ùWÖ7òð£?Ë¿˜Ù$¾°™; ðÅ™ëdvnæêÍ5’'›¯ËþÈÈ‹2ütdgdlb0ú§<úb0z&÷ŽN;ƒÑÁã?®\ŠGO¯•–Gñ¯ýQù¸óá;wþGOGF¾ÙÙ}öû•gýïÉÏdç¯Ý÷ß“ÏNÞ~4ò)?ï<¼ÿ,‚_IùIçIïRwÿT£§ÇöžŽrâ+\¹ßß“oŒ|£g¨¹Þ—{'Ç´Û=À¹^ã£þ[ß=îþî35Ýíÿ ó‚õ/½ÝÝ=ümëï£ßþŽÆz»{pÞ?øÍ÷¤|Òy±¿ûü•½•ýî£ùqç¾¼þù½£ûûâÑÈèÇ)‰¼÷oùé„ܹԑ'ïôûÏåQ/tdÿF¯,üFÀÊ™~ÿP¾»«Y’ú;G2þ&wŽú4=—®Ñ GyØ7~Ýû‹òE§¿røeí“î»+zåƒîþXçàOzt,OäDïpVº²''N>zô+ÙïowŸêÑï÷ïÝ8|ø=ú/ÿÿârõä äÿÿs á2P0PIÑ0Ó3ÑSpV(O,IÎH-RHÌKQH-ÊQHNÌÉIJLÎÖ Éâ254†(65q]C¸¹ 0=endstream endobj 399 0 obj 2353 endobj 400 0 obj<>/Dur 10/Trans<>>>>>endobj 401 0 obj<>stream xÚœWÍo×§BÕzia ™J ?EJ¢c ²"ÙBÐD°ÔºAY°Ë'q-rw½¤„´6r zòµ)\íµ‡úÄ…A7¹6§ºp!hÜJU‘µ¯3ïíŠäŠŽ‹RÂ’³;ófæ7Ÿ{{,œÍ^fðR˜{Òø—ŸÏÃÜLl[cy+¹ýk±«›(–Æ›çK­¦a.™ƒÍ-džEÙÍj²3Eˆ~~À›Üp§ZÓ –­›‰ÉÍ[ci˜Î¤•Dþ‚Diòr„§€<¿ŠÜ›-FnÌ¡\^yí•r™¤V瀞uÓÙbyÍt9¸5æâ…Ûü‡¦[Ómp,®é¬ºt4V¯W˜¶“„54Ó«W¡Æš*œвu×Åï-ÓfÀòÂ:·ëà˜uÏÕM#XªmiÀ28z•' Å¡Åê;dþFÙÃl`1·•=¨r­Îl2Š!Ÿ«¡¥h–ã2CãL&•o}ÐOg•ÿ¹4ù¿¬¼ïÁ’ËDpÊe‹š ôph¢2V©s¦RÆ\,^võš0òûò3 ½ÙsÄ3\½N^jfá6¥£=@o"þ ôMÄ‚ƒâ˃ÇÏ%€BµkŽŠ FLXc–‹v±Šé¹ˆm•ƒ©MÉä¤=K‹“s Z5]«‘é¬nsVÝÃPSʘðGiþ»¶‡‘¬ fd68¯R"°jU§èc9.·Èu‹9Èô‡*sÞ !>·( «¦ízsy}/º‹iyÛÓQ­SÃÅgÇóÓÂÕ5hšz´rèL)ŽaSZ§”öÒd$´óXPoÞ›IS!*u™P]¼º±~9bB<"—&·þãë?Zºñj)¾±ÔóW‘vÄOé §¿¶B.,­¯M/HgÊY§YŠ~=ÿìÜpó6¯.-¿ú<Ù™a²sÙB&L7ŠÅö‰¤ŸoN>leCªè ÓƒÛƒ[žCmÇÚS ·å%eeµ£–iïÈ©#´%šãaq÷,.ëã¡Ìì Ü»·\Õ=÷3[Ìpò3žU™å”< ûvÖºnp„´49Ø—ðÕ"¡’;jY ›¨#„°À–m6”ÅÔaiwœA%›ýéÖ)/Û ³¹Æõ&¯F+)j†ƒ-@s=l ¨fMn»ˆ@ˆ",“i\,Ê/0+·¸váÔÊž4s}W²É\d—ÊÏôô"¼TþžuQa¸â:Í2rÑèZ¦*ÌáIìgZ&Ôž%ƒDè/O\T_è7<+ìJ)N˜O•&{‹@T~vˆ<ßuË´›ôä{‹^ŸèÜ ¨Ž™m7Yý B¶ñ=Ê&‡à5?(å6’̽‚œ¾BU¸Én¬¬¯,m–M#Àè™… Ô‘×B6š‚œûJBµm?#! 2Š}y E0c©ûB!.ÃÒ¢ðU3¶ÿp`bÛã ܵÉìXŽfë8,C·,ŽÃÛ®ÃåC໬a!£íI¸<­Ê`E¾†aÒÑ%›Ã+B©^ÙnãëO2-ßÛæ“ò fgéJook©åŸ¥ÖR7®]…ÌË+«üSŸ…Ÿ§Öä2›º‰vϧ®C.Ÿºº¾Œ/k¯Œ ?{QŸ¶hÇFÇ{Ô?ÄÉ¿{ÔqpÒG=4{ÔÑÃ?.^:§_›]¡_‡#âaûƒ·oßÿ3Qc±¯·÷Ÿü~ñ‰ÿÝQñ™hÿµ½ÿÞ»âÉÙ[bßâóöý»ï"J~)Ä'íGÝKú)©Ç§tzbüKâ<ôÄ/b_ëjòY÷‹ƒ³Ó#Öéѳnã#ÿÍoŸv~÷™¤Fö;§ßk¿Pÿ'QouöÛúÛÈ7¿AÔhwÿàæ{G¿ùŽÚ/úûO_>X<ì»'> ©§ÂÒºÕǾöëî_d,ÚþâñÛŸtÞYTœ÷:‡£í£?)êTœ‰ñîqNQÑãgŸ:Šú¥ðýrçѱ¢¾׿óúñýÿ(ê¿ÿÿârõä äÿÿ-ŒK ÷œâ-uQÔôËÖ¦®5áØ¢@¤z}E\½¼ÉdŽœìNø ‡ª¡5Úv®6ÃKûÌw±„y Â9ãG³ë3½8idÕÍjµzËï¤È¡â_ª»KVR†hhEÑã-¢œt€ð*¥°ö*ä#é'òû¯µ€endstream endobj 402 0 obj 2055 endobj 403 0 obj<>/Dur 10/Trans<>>>>>endobj 404 0 obj<>stream xÚUM“ÚF½ó+º|pÖU „øðmãZ§rI6 ©\|I-3š!3#Xþ½_K,^X/ë‚ÒÇLwÏë~ýZÿ÷†É,#\&¸LçäW4Ä/[d4ŸŒÉ3U½Q»4¢t*ÿ¢îýº„Û‹§ Ün?/h4KRZV°ž¥#y,of Ým·F*jg‰U½5>,¿ön?Ïi4ììã‰X/×8ÐãöÚ®hëÝW.b 8æ*0¹Š:ÇÅÑñæ~Ç6ž»¡=·ç­ó‘KÒ–"ÂþŒc­´ÁÁF‡HÊ–¤"ÎVg ;óühžt& Ÿå'÷/ªó÷or§élŠšdãÏ£.@ùó;„”¦Ó´+ÜR¶öáyôª”ê„Cˆ\_¤\GÍ~ŒçN&ݹBAˆ*2ªQ¬µe2:÷Ê.q<üyY¿/7ÑQ.6¨Xûôp÷Ç—Ô?E€®[žïØ+C,fGšÃù¥óWógOu½ÒÕ‘ö*Jº+j"š .¡k.6²oܪÒhá>Iƒáf9îßô¥_Ñ&’«4Oí<'ô{…—c:PÉÍe_V•Q¾%ý? 8X†/ÊÈ]ëIµM™»Grò3¨Æ†i©wÎè„–kqêrÀÓ©íL~Ô¹á>Y„ÙÚžÖ«Æ+lÔ3µ+ࢼÑ&>WHôÀ_¡% Œ r:"4q p{ï"¤w²Ô’Km(싞Õ,˜d§‹vñ伨Šà‹Sç¼§¨kÁ\+kq~’$ôßSŠ*Þ“*¢Þ±ÐB-/âÃ!Š£ƒQ‘ÂyA¬´…®ÇÃA*±âÇ_BÿìðÅ2/ŽdR; Þ É¢ aR¨µm"Šê¶l;$…kP^©“z6îÚ÷V…ÐjÖ¡ ÚVŽ*ïΩ—<Ñ äއˆyÛ†F÷XˆØª•, íHsQa5à•»&J«´°ħ‡ñ^ªCGQÎĉ¥]ÛCòlqÒì\HÙdú$$Ë 53BšP„k¨ßs:ûÝ÷!¦N¢Óuc¢²Ú5Á¼Ðúdű¥¡VºÆÈER{]ÆõõM†¯ ÙÅiÈfãY—C©¢jûtØå…ëÁÇ£×æK6œw!÷œl±y;ØpüZ°É|Ñ+Œ†Dn»"¾–2qÒx¾~Ôdžþà¨vg–vÆÝFõôIZtŸæáŸñl”v6Ùââ¯Þ7íâe€endstream endobj 405 0 obj 924 endobj 406 0 obj<>/Dur 10/Trans<>>>>>endobj 407 0 obj<>stream xÚLÑÏOÓ`ð6„4Ö=xÑ,‘÷/ +clKM†;a”ă1Jä"Á ‰$š-œˆ§]ÅŒ4põÀÁ?€™ˆaÊUNΌЙ¶Ò÷Mß¾ïÛ‚ó}Û§ï§Ï·iÚ·¤&3iÄË0/#YTžGI>Ó¹4Ê¡òz®Ñ-¥FÄQ\Pó3êÄŒZBCÙÁdÔˉ+?3QE¢ ?|¬ô“ydŒNÜ3øŒÇؽ€^•—çôGÈHæô)”Jëùûãü…»*0I€‹KŠÖÓOðÿôÔÛÿOÍÅžÜæG3ñOíÉ̘,VŽ M¼·VªjKÒlu6Í»¥À1à¯ØÚÙ†N¸Ú®œàzu›‡ø“g‡¸EÄËHí`¶•eÐÎDÒa6<“úi1êÑS; ÜYB\Ñ£ ûìÍ€lG’-ÜÆ}/~ ­Ëûðú»|íªB-{kqÇ} …˜ÕµM‡4L8ÀU˜:©øUg©!ÉAå7iàH ác]ØÝçÕ‡MS@í×.OêŒy°nÅ jlÅãRß`Åg³—êÂË"½ßÑ/Ñ^`fz§ó‡dÝŒ“5â(Øý+€4ê¥b  …GK±ÞcOIË‹u§Ê*Ó^ýo¬sÿÿârõä äÿÿEŒK D÷œb–º(¢©¥.5©kM¸D~¡Ôx|Åš¸™ÉL^ÞIFÃ?²ÁæÜãqǶíèœ3µž:¨l?”£ÉÒ{ lÀEg‡yª«<4ÔG5;½#iQó3u¬ží®ÇwrŠcJÎÞd±1@¿¤ONO•¹’7NÔ3endstream endobj 408 0 obj 635 endobj 409 0 obj<>/Dur 10/Trans<>>>>>endobj 410 0 obj<>stream xÚSMoÛ0 ½çWðØ›'ÍG¯: ;l`gÅ¢m.²äé#iþýžä¤E»ÇŠ,’âïÙ¼Ú¬Ë-–õ–|Gs<«»moä™ÚY]ŽjZ®ó¯f÷;„Íqø¼ ìã§;ª7Õ’v-¼7Ë:oõͶ¢o)çïv¿fÅi>¹|XÜf‡‡#Û8Ù¶Û I ÆÙ•æL2ŒÞYWôÅ…>)úZÑ£—(±”M¢9?5l ÀhPb#[e&e5 ø td¦Fyn“lt”ûPåìàS/2ŸÏL®…;iÀÈ£ŠMþÏX­b"ìCÃ#«!CgÍG6n,T”ñ¬ô™Ð 謟–Ф0[Æ(K|íési¨Y±]¦ÆšHሒFb`ÓV”I^0ÅY ÌCÈyö\вò¦0ˆSk%fî!Š1Á ì$-øH¾¹ëÀyÅä”]÷* Í–^ßÉÞÅŠîS‘:ŒóݘÀ_X¾ÿˆgr—ZÃOh!O‘örär‡;¯†! tUþ¢ö„£^¦fª":­Îo™æï‡2›´®W˜¿Õb‰ýodÌmv¿›æçª^NÇëú‚õ}öÑ#Kòendstream endobj 411 0 obj 567 endobj 412 0 obj<>/Dur 10/Trans<>>>>>endobj 413 0 obj<>stream xÚLÑÏOÓ`ð6„4Ö=xÑ,‘÷/ +clKM†;a”ă1Jä"Á ‰$š-œˆ§]ÅŒ4põÀÁ?€™ˆaÊUNΌЙ¶Ò÷Mß¾ïÛ‚ó}Û§ï§Ï·iÚ·¤&3iÄË0/#YTžGI>Ó¹4Ê¡òz®Ñ-¥FÄQ\Pó3êÄŒZBCÙÁdÔˉ+?3QE¢ ?|¬ô“ydŒNÜ3øŒÇؽ€^•—çôGÈHæô)”Jëùûãü…»*0I€‹KŠÖÓOðÿôÔÛÿOÍÅžÜæG3ñOíÉ̘,VŽ M¼·VªjKÒlu6Í»¥À1à¯ØÚÙ†N¸Ú®œàzu›‡ø“g‡¸EÄËHí`¶•eÐÎDÒa6<“úi1êÑS; ÜYB\Ñ£ ûìÍ€lG’-ÜÆ}/~ ­Ëûðú»|íªB-{kqÇ} …˜ÕµM‡4L8ÀU˜:©øUg©!ÉAå7iàH ác]ØÝçÕ‡MS@í×.OêŒy°nÅ jlÅãRß`Åg³—êÂË"½ßÑ/Ñ^`fz§ó‡dÝŒ“5â(Øý+€4ê¥b  …GK±ÞcOIË‹u§Ê*Ó^ýo¬sÿÿârõä äÿÿs á2Ð30P@Eé ún – !i †&fz¦ ææ !)®e©y% )E™@Z¡ (?½(1773/]!3O! µ(G¡´Ä+ÉHU€(ÍÍO)ÍIÕ ÉâÒ…¤ 5ÉÌ$hba¤æZè)ø—–ääçgƒ„]C¸¹”Ï0endstream endobj 414 0 obj 627 endobj 415 0 obj<>/Dur 10/Trans<>>>/Annots 174 0 R>>endobj 416 0 obj<>stream xÚ•WKoÛ8¾çW zr€D¶,?w/MÓ\t‹lëE÷à -Ñ‘TI*nö×ï )Ùµ­8)È’8œç7ßP?.Ñt xáe2“ÃÿÆó1ÌFC06±C2¡ÿT^¼Yâ¶¾Ü]p[ÿýâi”ÀrƒÒÓ$¦Û¬wÁ[æØåòûEÿýâ­'p=ÓêBm´‘Ì ­Hb6ˆÐZxË¥¥—ïN¬}ù@¿0 ІßÏñýÚ!ê‚ìh4Œ&¿c ý÷³S“Ù48­˜äÁãy³¸÷ìÝW.ªdXo7÷`ýµ-jŸ#¸3‰{¡`Õûx÷e±\]FgC™Ìâ‡d;BÁ&³À7ö$§ËBXpµÓF°ð~Í,Ï@+hÄÑJŸwt2|¹£^¶ÛÑÑ<8*uV—Ü×y×ñпcªb9?ñ#n•'¤|D¡JHҞʠþhb³ÙÑØ,œ«þè÷]Áµyü9Žê­PJT>/Dur 10/Trans<>>>>>endobj 419 0 obj<>stream xÚLÑÏOÓ`ð6„4Ö=xÑ,‘÷/ +clKM†;a”ă1Jä"Á ‰$š-œˆ§]ÅŒ4põÀÁ?€™ˆaÊUNΌЙ¶Ò÷Mß¾ïÛ‚ó}Û§ï§Ï·iÚ·¤&3iÄË0/#YTžGI>Ó¹4Ê¡òz®Ñ-¥FÄQ\Pó3êÄŒZBCÙÁdÔˉ+?3QE¢ ?|¬ô“ydŒNÜ3øŒÇؽ€^•—çôGÈHæô)”Jëùûãü…»*0I€‹KŠÖÓOðÿôÔÛÿOÍÅžÜæG3ñOíÉ̘,VŽ M¼·VªjKÒlu6Í»¥À1à¯ØÚÙ†N¸Ú®œàzu›‡ø“g‡¸EÄËHí`¶•eÐÎDÒa6<“úi1êÑS; ÜYB\Ñ£ ûìÍ€lG’-ÜÆ}/~ ­Ëûðú»|íªB-{kqÇ} …˜ÕµM‡4L8ÀU˜:©øUg©!ÉAå7iàH ác]ØÝçÕ‡MS@í×.OêŒy°nÅ jlÅãRß`Åg³—êÂË"½ßÑ/Ñ^`fz§ó‡dÝŒ“5â(Øý+€4ê¥b  …GK±ÞcOIË‹u§Ê*Ó^ýo¬sÿÿârõä äÿÿs á2Ð30P@Eé ún – !i †&fz¦ ææ !)®e©y% )E™@Z¡ (?½(1773/]!3O! µ(G¡´Ä+ÉHU€(ÍÍO)ÍIÕ ÉâÒ…¤ 5ÉÌ$hbi¬æ:ê)¸$–$‚Ä\C¸¹!ÍÊendstream endobj 420 0 obj 624 endobj 421 0 obj<>1<>2<>]>>>>endobj xref 0 422 0000000000 65535 f 0000000015 00000 n 0000000217 00000 n 0000001774 00000 n 0000001848 00000 n 0000001927 00000 n 0000002009 00000 n 0000002085 00000 n 0000002166 00000 n 0000002250 00000 n 0000002338 00000 n 0000002398 00000 n 0000002483 00000 n 0000002586 00000 n 0000002690 00000 n 0000002793 00000 n 0000002897 00000 n 0000003002 00000 n 0000003105 00000 n 0000003209 00000 n 0000003314 00000 n 0000003419 00000 n 0000003524 00000 n 0000003627 00000 n 0000003731 00000 n 0000003836 00000 n 0000003941 00000 n 0000004046 00000 n 0000004149 00000 n 0000004252 00000 n 0000004356 00000 n 0000004461 00000 n 0000004566 00000 n 0000004671 00000 n 0000004776 00000 n 0000004879 00000 n 0000004983 00000 n 0000005088 00000 n 0000005193 00000 n 0000005296 00000 n 0000005400 00000 n 0000005505 00000 n 0000005608 00000 n 0000005712 00000 n 0000005817 00000 n 0000005922 00000 n 0000006025 00000 n 0000006129 00000 n 0000006234 00000 n 0000006339 00000 n 0000006442 00000 n 0000006546 00000 n 0000006651 00000 n 0000006756 00000 n 0000006859 00000 n 0000006963 00000 n 0000007068 00000 n 0000007171 00000 n 0000007275 00000 n 0000007380 00000 n 0000007483 00000 n 0000007587 00000 n 0000007692 00000 n 0000007797 00000 n 0000007902 00000 n 0000008005 00000 n 0000008109 00000 n 0000008212 00000 n 0000008316 00000 n 0000008421 00000 n 0000008524 00000 n 0000008628 00000 n 0000008733 00000 n 0000008836 00000 n 0000008940 00000 n 0000009045 00000 n 0000009148 00000 n 0000009252 00000 n 0000009357 00000 n 0000009462 00000 n 0000009565 00000 n 0000009669 00000 n 0000009774 00000 n 0000009877 00000 n 0000009981 00000 n 0000010086 00000 n 0000010191 00000 n 0000010294 00000 n 0000010398 00000 n 0000010439 00000 n 0000010522 00000 n 0000010563 00000 n 0000010647 00000 n 0000010688 00000 n 0000010773 00000 n 0000010876 00000 n 0000010980 00000 n 0000011085 00000 n 0000011190 00000 n 0000011295 00000 n 0000011398 00000 n 0000011503 00000 n 0000011609 00000 n 0000011713 00000 n 0000011818 00000 n 0000011924 00000 n 0000012028 00000 n 0000012133 00000 n 0000012239 00000 n 0000012343 00000 n 0000012448 00000 n 0000012554 00000 n 0000012658 00000 n 0000012763 00000 n 0000012869 00000 n 0000012973 00000 n 0000013078 00000 n 0000013184 00000 n 0000013288 00000 n 0000013393 00000 n 0000013497 00000 n 0000013602 00000 n 0000013708 00000 n 0000013814 00000 n 0000013920 00000 n 0000014026 00000 n 0000014130 00000 n 0000014235 00000 n 0000014341 00000 n 0000014447 00000 n 0000014553 00000 n 0000014657 00000 n 0000014762 00000 n 0000014866 00000 n 0000014971 00000 n 0000015077 00000 n 0000015183 00000 n 0000015289 00000 n 0000015395 00000 n 0000015499 00000 n 0000015604 00000 n 0000015710 00000 n 0000015816 00000 n 0000015922 00000 n 0000016026 00000 n 0000016131 00000 n 0000016237 00000 n 0000016343 00000 n 0000016449 00000 n 0000016555 00000 n 0000016658 00000 n 0000016762 00000 n 0000016867 00000 n 0000016969 00000 n 0000017072 00000 n 0000017174 00000 n 0000017277 00000 n 0000018345 00000 n 0000018449 00000 n 0000018553 00000 n 0000018658 00000 n 0000018764 00000 n 0000018814 00000 n 0000018893 00000 n 0000018980 00000 n 0000019006 00000 n 0000019085 00000 n 0000019171 00000 n 0000019197 00000 n 0000019284 00000 n 0000019371 00000 n 0000019428 00000 n 0000019515 00000 n 0000019576 00000 n 0000019662 00000 n 0000019704 00000 n 0000019738 00000 n 0000019772 00000 n 0000021012 00000 n 0000021061 00000 n 0000021110 00000 n 0000021159 00000 n 0000021208 00000 n 0000021257 00000 n 0000021306 00000 n 0000021355 00000 n 0000021404 00000 n 0000021453 00000 n 0000021502 00000 n 0000021551 00000 n 0000021600 00000 n 0000021649 00000 n 0000021698 00000 n 0000021747 00000 n 0000021796 00000 n 0000021845 00000 n 0000021894 00000 n 0000021943 00000 n 0000021992 00000 n 0000022041 00000 n 0000022090 00000 n 0000022139 00000 n 0000022188 00000 n 0000022237 00000 n 0000022286 00000 n 0000022335 00000 n 0000022384 00000 n 0000022433 00000 n 0000022482 00000 n 0000022531 00000 n 0000022580 00000 n 0000022629 00000 n 0000022678 00000 n 0000022727 00000 n 0000022776 00000 n 0000022825 00000 n 0000022874 00000 n 0000022923 00000 n 0000022972 00000 n 0000023021 00000 n 0000023070 00000 n 0000023119 00000 n 0000023168 00000 n 0000023765 00000 n 0000023927 00000 n 0000024135 00000 n 0000024156 00000 n 0000024291 00000 n 0000024422 00000 n 0000024442 00000 n 0000024619 00000 n 0000026624 00000 n 0000026646 00000 n 0000026835 00000 n 0000027633 00000 n 0000027654 00000 n 0000027837 00000 n 0000037433 00000 n 0000037455 00000 n 0000037656 00000 n 0000042588 00000 n 0000042610 00000 n 0000042829 00000 n 0000045514 00000 n 0000045536 00000 n 0000045710 00000 n 0000046429 00000 n 0000046450 00000 n 0000046651 00000 n 0000052879 00000 n 0000052901 00000 n 0000053102 00000 n 0000056595 00000 n 0000056617 00000 n 0000056800 00000 n 0000062301 00000 n 0000062323 00000 n 0000062533 00000 n 0000068382 00000 n 0000068404 00000 n 0000068605 00000 n 0000074135 00000 n 0000074157 00000 n 0000074367 00000 n 0000080451 00000 n 0000080473 00000 n 0000080665 00000 n 0000082297 00000 n 0000082319 00000 n 0000082493 00000 n 0000083198 00000 n 0000083219 00000 n 0000083408 00000 n 0000085034 00000 n 0000085056 00000 n 0000085266 00000 n 0000087542 00000 n 0000087564 00000 n 0000087783 00000 n 0000089926 00000 n 0000089948 00000 n 0000090149 00000 n 0000099027 00000 n 0000099049 00000 n 0000099268 00000 n 0000101547 00000 n 0000101569 00000 n 0000101788 00000 n 0000104203 00000 n 0000104225 00000 n 0000104444 00000 n 0000106636 00000 n 0000106658 00000 n 0000106868 00000 n 0000113349 00000 n 0000113371 00000 n 0000113581 00000 n 0000122886 00000 n 0000122908 00000 n 0000123118 00000 n 0000125598 00000 n 0000125620 00000 n 0000125809 00000 n 0000127481 00000 n 0000127503 00000 n 0000127713 00000 n 0000129679 00000 n 0000129701 00000 n 0000129929 00000 n 0000132277 00000 n 0000132299 00000 n 0000132518 00000 n 0000134534 00000 n 0000134556 00000 n 0000134766 00000 n 0000136787 00000 n 0000136809 00000 n 0000137019 00000 n 0000139409 00000 n 0000139431 00000 n 0000139641 00000 n 0000141832 00000 n 0000141854 00000 n 0000142073 00000 n 0000144732 00000 n 0000144754 00000 n 0000144955 00000 n 0000146868 00000 n 0000146890 00000 n 0000147091 00000 n 0000149082 00000 n 0000149104 00000 n 0000149305 00000 n 0000151994 00000 n 0000152016 00000 n 0000152217 00000 n 0000154513 00000 n 0000154535 00000 n 0000154745 00000 n 0000157538 00000 n 0000157560 00000 n 0000157779 00000 n 0000159624 00000 n 0000159646 00000 n 0000159838 00000 n 0000161327 00000 n 0000161349 00000 n 0000161541 00000 n 0000163085 00000 n 0000163107 00000 n 0000163290 00000 n 0000164127 00000 n 0000164148 00000 n 0000164322 00000 n 0000165025 00000 n 0000165046 00000 n 0000165244 00000 n 0000167201 00000 n 0000167223 00000 n 0000167433 00000 n 0000169515 00000 n 0000169537 00000 n 0000169747 00000 n 0000171893 00000 n 0000171915 00000 n 0000172107 00000 n 0000173815 00000 n 0000173837 00000 n 0000174035 00000 n 0000175831 00000 n 0000175853 00000 n 0000176087 00000 n 0000179007 00000 n 0000179029 00000 n 0000179239 00000 n 0000182134 00000 n 0000182156 00000 n 0000182357 00000 n 0000184336 00000 n 0000184358 00000 n 0000184550 00000 n 0000187810 00000 n 0000187832 00000 n 0000188042 00000 n 0000190644 00000 n 0000190666 00000 n 0000190885 00000 n 0000193130 00000 n 0000193152 00000 n 0000193377 00000 n 0000195592 00000 n 0000195614 00000 n 0000195824 00000 n 0000197873 00000 n 0000197895 00000 n 0000198123 00000 n 0000200057 00000 n 0000200079 00000 n 0000200280 00000 n 0000202704 00000 n 0000202726 00000 n 0000202927 00000 n 0000205053 00000 n 0000205075 00000 n 0000205255 00000 n 0000206250 00000 n 0000206271 00000 n 0000206445 00000 n 0000207151 00000 n 0000207172 00000 n 0000207343 00000 n 0000207981 00000 n 0000208002 00000 n 0000208176 00000 n 0000208874 00000 n 0000208895 00000 n 0000209090 00000 n 0000210626 00000 n 0000210648 00000 n 0000210822 00000 n 0000211517 00000 n 0000211538 00000 n trailer <> startxref 211736 %%EOF Event-1.21/TODO0000644000175000017500000000455310624507753012572 0ustar joshuajoshuafinish up lexical warnings omitting parked=>1 should be a warning, not an error? demo/tail-f see File::Tail or GNU textutils for implementation examples add timeout for var watchers? find owner for Win32 port perhaps some help with distributing SIGCHLD? documentation how to design new event types (in perl) how to design new event types (in C)?? mjtg@cus.cam.ac.uk signal discussion: The API rsignal overrides the current signal handler. If the signal watcher is cancelled (or otherwise disabled) then rsignal is reset to SIG_DFL. Maybe the original handler should be restored. On the other hand, assignment to %SIG will mess up Event watchers so maybe Event should refuse to watch a signal if a handler is already installed. optimization update io event-mask without invalidating cache determine IntervalEpsilon dynamically & make available from perl use fancy profiler tricks to figure out how to boost performance queue events from both sides? try to hoist system calls from the inner loop there seems to be some sort of bug in the shutdown phase Attempt to free unreferenced scalar during global destruction. Use of uninitialized value during global destruction. Explicit blessing to '' (assuming package main) during global destruction. rethink pe_check_recovery & ENTER/LEAVE points increase the number of priority levels? ASYNC 0 1 2 3 4 5 6 7 8 9 IDLE HIGH NORM loop StarvePrio? ----------------------------------------------------------------------- ----------------------------------------------------------------------- Move process.pm to external module? accept "%f minutes" & "%f hours" for all time specifications? On Wed, Aug 30, 2000 at 02:50:20PM -0400, Joshua N Pritikin wrote: > Wow! I am reading about the Linux linked list implementation. In > comparison to Linux, Event wastes an unnecessary pointer on every link. > I'd better fix this! :-) False alarm? Linux is able to make the assumption that the next & prev pointers are always the same offset from the top of the structure. This assumption is true for pe_watcher.all, pe_event.peer, pe_event.que, and pe_qcallback.ring. However, pe_timeable.ring is stored at lots of different offsets. Hm hm. I guess some bytes are wasted but otherwise Event will need two different kinds of linked lists... Event-1.21/INSTALL0000644000175000017500000000034610624507753013127 0ustar joshuajoshuaTo get high-precision time you'll need to install and use Time::HiRes 01.20. --- The design and implementation of this extension is discussed on the perl-loop mailing list. Please send email to majordomo@perl.org to subscribe! Event-1.21/META.yml0000664000175000017500000000073312062657023013343 0ustar joshuajoshua--- #YAML:1.0 name: Event version: 1.21 abstract: ~ author: [] license: unknown distribution_type: module configure_requires: ExtUtils::MakeMaker: 0 build_requires: ExtUtils::MakeMaker: 0 requires: Test: 1 no_index: directory: - t - inc generated_by: ExtUtils::MakeMaker version 6.57_05 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 Event-1.21/ANNOUNCE0000644000175000017500000000250110624507753013222 0ustar joshuajoshuaPerl might have started out as a text processing language, but why shouldn't it expand into all domains of data processing? One of the challenges of developing event driven applications is tweaking all your libraries to use the same event loop. This is especially difficult when no standand perl event loop exists. I hereby present the Event extension. Event has been in development since April 1998. It is known to build correctly on the following architectures. Most unix architectures should work with minor tweaking. linux 2.2.1 ppc-linux linux 2.2.5-15 i686-linux sunos 4.1.4 sun4-sunos solaris 2.5.1 sun4-solaris solaris 2.6 sun4-solaris solaris 7 i86pc-solaris * Perl 5.005_03 (or better) is required. * Win32 support should not be too difficult but no volunteer has stepped forward to take ownership. * No real additional support is needed or planned for multiple threads. Event has been tested with Insure++. Since there is only really need for a single event loop API, there is tentitive demand for including this extension as part of the main perl distribution. Therefore, I would like to encourage everyone to try it out and send any feedback to the mailing list at perl-loop@perl.org. Thank you very much! Joshua N Pritikin 15 Jul 1999 Event-1.21/demo/0002755000175000017500000000000012062657023013013 5ustar joshuajoshuaEvent-1.21/demo/echo.t0000644000175000017500000000136010624507753014122 0ustar joshuajoshua#!./perl -w $| = 1; use Event qw(time); require Event::io; print "This demo echoes whatever you type. If you don't type anything for as long as 2.5 seconds then it will complain. Enter an empty line to exit. "; my $recent = time; Event->io(fd => \*STDIN, timeout => 2.5, poll => "r", repeat => 1, cb => sub { my $e = shift; my $got = $e->got; #print scalar(localtime), " "; if ($got eq "r") { sysread(STDIN, $buf, 80); chop $buf; my $len = length($buf); Event::unloop if !$len; print "read[$len]:$buf:\n"; $recent = time; } else { print "nothing for ".(time - $recent)." seconds\n"; } }); Event::loop(); Event-1.21/demo/msg.pm0000644000175000017500000000177010624507753014150 0ustar joshuajoshuadie "SysV messages are not implemented yet. Send email to perl-loop@perl.org if you think this is a problem. Thanks!\n"; package Event::msg; use Event; use IPC::Msg; register Event; my %MSG; my $LABEL = "msg000000"; sub new { use attrs qw(locked method); my $class = shift; my %arg = @_; my $msg = $arg{'-msg'}; my $cb = $arg{'-callback'}; croak 'Event->msg( -msg => $msg, -callback => $coderef)' unless(UNIVERSAL::isa($msg,'IPC::Msg') && UNIVERSAL::isa($cb,'CODE')); my $obj = { callback => $cb, msg => $msg, label => $label++ }, $class; $msg{$obj->{'label'}} = $obj; $obj; } sub cancel { my $self = shift; delete $msg{$self->{'label'}}; } sub prepare { 3600 } sub check { my $obj; my @del = (); foreach $obj (values %msg) { my $ds = $obj->{'msg'}->stat; if($ds->qnum && $ds->lspid != $$) my($o,$cb,$msg) = ($obj,$obj->{'callback'},$obj->{'msg'}); Event->queueEvent( sub { $cb->($o,$msg) } ); } } 1; } 1; Event-1.21/demo/semaphore.pm0000644000175000017500000000243410624507753015343 0ustar joshuajoshuadie "SysV semaphores are not implemented yet. Send email to perl-loop@perl.org if you think this is a problem. Thanks!\n"; package Event::semaphore; use Event; use IPC::Semaphore; register Event; my $LABEL = "sem000000"; my %SEM = (); sub new { use attrs qw(locked method); my $class = shift; my %arg = @_; my $sem = $arg{'-semaphore'}; my $op = $arg{'-op'}; my $cb = $arg{'-callback'}; croak 'Event->semaphore( -semaphore => $sem, -op => $arrayref, -callback => $coderef)' unless(UNIVERSAL::isa($msg,'IPC::Semaphore') && UNIVERSAL::isa($op,'ARRAY') && UNIVERSAL::isa($cb,'CODE')); my $obj = bless { callback => $cb, semaphore => $sem, semop => $op, label => $LABEL++, }, $class; $SEM{$obj->{'label'}} = $obj; $obj; } sub prepare { 3600 } sub check { my $obj; my @del = (); foreach $obj (values %SEM) { if($obj->{'semaphore'}->op(@{$obj->{'semop'}}) >= 0) { my($o,$cb,$s,$op) = ($obj,$obj->{'callback'}, $obj->{'semaphore'},$obj->{'semop'}); Event->queueEvent( sub { $cb->($o,$s) } ); push @del, $obj->{'label'}; } } delete @sem{@del}; 1; } sub cancel { my $self = shift; delete $SEM{$self->{'label'}}; } sub again { my $self = shift; $SEM{$self->{'label'}} = $self; } 1; Event-1.21/demo/group.t0000644000175000017500000000106410624507753014341 0ustar joshuajoshua#!./perl -w use strict; use Test; plan test => 6; use Event qw(time); require Event::group; my $g = Event->group(parked=>1, timeout => 1.95, cb => sub { my $e = shift; warn "timeout at ".$e->w->cbtime; }, add => Event->timer(desc => '1', interval => 2, cb => sub { my $e = shift; warn "boink #1 at ".$e->w->cbtime }), add => Event->timer(desc => '2', interval => 2.5, cb => sub { my $e = shift; warn "boink #2 at ".$e->w->cbtime }), ); $g->start; Event::loop(); Event-1.21/demo/queue_pending.t0000644000175000017500000000143010624507753016032 0ustar joshuajoshua#!/usr/bin/perl use warnings; use strict; use Event qw(queue_pending); # Zefram # # If you already have a signal watcher, and then start a second one for # the same signal, the counting continues unaffected by the start of # the second watcher. Both watchers will generate events for a signal # received shortly before the second one was started. Event->signal(signal => "USR1", cb => sub { print "handler 0 got hits=", $_[0]->hits, "\n"; }); kill "USR1" => 0; # If "queue_pending();" is added to the program, immediately before # the creation of the second watcher, then it produces different output. # # queue_pending(); Event->signal(signal => "USR1", cb => sub { print "handler 1 got hits=", $_[0]->hits, "\n"; }); kill "USR1" => 0; Event::loop; Event-1.21/demo/idle2.t0000644000175000017500000000232111013441642014164 0ustar joshuajoshua# idle daydreams -*-perl-*- # This test is too sensitive to slight variations in timing # to serve as part of the test suite. BEGIN { eval { require Time::HiRes; Time::HiRes->VERSION(1.20); }; if ($@) { print "1..0\n"; print "ok 1 # skipped; requires Time::HiRes 1.20\n"; exit; } } use Test; plan tests => 5; use Event qw(loop unloop time all_events one_event); # $Event::Eval = 1; # $Event::DebugLevel = 4; $Event::DIED = \&Event::verbose_exception_handler; #----------- complex idle events; fuzzy timers my ($cnt,$min,$max,$sum) = (0)x4; my $prev; $min = 100; my $Min = .01; my $Max = .2; Event->idle(min => $Min, max => $Max, desc => "*IDLE*TEST*", cb => sub { my $now = time; if (!$prev) { $prev = time; return } my $d = $now - $prev; $prev = $now; $sum += $d; $min = $d if $d < $min; $max = $d if $d > $max; unloop('done') if ++$cnt > 10; }); my $sleeps=0; Event->idle(repeat => 1, cb => sub { Event::sleep $Min; ++$sleeps }); Event::sleep .1; # try to let CPU settle loop(); my $epsilon = .05; ok $sleeps > 1; #did we test anything? ok $min >= $Min-$epsilon; ok $max < $Max+$epsilon; # fails without high resolution clock XXX ok $sum/$cnt >= $min; ok $sum/$cnt <= $max; Event-1.21/demo/process.pm0000644000175000017500000000313210624507753015032 0ustar joshuajoshuause strict; package Event::process; use Carp; use Event qw(time); use base 'Event::Watcher'; use vars qw($DefaultPriority); $DefaultPriority = Event::PRIO_HIGH(); 'Event::Watcher'->register(); sub new { #lock %Event::; shift if @_ & 1; my %arg = @_; my $o = 'Event::process'->allocate(); $o->init([qw(pid timeout)], \%arg); $o->{any} = 1 if !exists $o->{pid}; $o->start(); $o; } my %cb; # pid => [events] Event->signal(signal => 'CHLD', #CLD? XXX callback => sub { my ($o) = @_; for (my $x=0; $x < $o->{count}; $x++) { my $pid = wait; last if $pid == -1; my $status = $?; my $cbq = delete $cb{$pid} if exists $cb{$pid}; $cbq ||= $cb{any} if exists $cb{any}; next if !$cbq; for my $e (@$cbq) { $e->{pid} = $pid; $e->{status} = $status; Event::queue($e); } } }, desc => "Event::process SIGCHLD handler"); sub _start { my ($o, $repeat) = @_; my $key = exists $o->{any}? 'any' : $o->{pid}; push @{$cb{ $key } ||= []}, $o; if (exists $o->{timeout}) { croak "Timeout for all child processes?" if $o->{any}; $o->{at} = time + $o->{timeout}; } } sub _stop { my $o = shift; my $key = exists $o->{any}? 'any' : $o->{pid}; $cb{ $key } = [grep { $_->{id} != $o->{id} } @{$cb{ $key }} ]; delete $cb{ $key } if @{ $cb{ $key }} == 0; } sub _alarm { my $o = shift; delete $o->{status}; Event::queue($o); } sub _postCB { my $o = shift; if (exists $o->{timeout}) { delete $o->{timeout}; $o->again; } } 1; Event-1.21/demo/rand_interval.t0000644000175000017500000000047410624507753016041 0ustar joshuajoshua#!./perl -w # contributed by jsalmon@gw.thesalmons.org use Event qw(loop); require Event::timer; $w = Event->timer(interval => 1, parked=>1); $w->cb(sub { my $next = rand(10); print(scalar localtime(Event::time()), ": waiting ", $next, " sec\n"); $w->interval($next); }); $w->start; loop(); Event-1.21/demo/readline.t0000644000175000017500000000444710624507753015000 0ustar joshuajoshua#!/usr/bin/env perl -w # # Test script to combine Term::Readline::Gnu and Event. # Derived from the ptksh+ script by A. Bohnet which comes # with Term::Readline::Gnu. # # The script does nothing more than just demonstrating how # Term::Readline::Gnu can be combined with event loops built # by using the Event module. # # The running event loop can be visualized by using the # option -idle. # # J. Stenzel (perl@jochen-stenzel.de) # # check perl version require 5.005; # pragmata use strict; # load modules use Event; use Getopt::Long; use File::Basename; use Term::ReadLine; # inits and declarations my ($script, %options)=basename($0); # get options GetOptions(\%options, "idle"); # init readline my $term=new Term::ReadLine($script); my $attribs=$term->Attribs; $term->callback_handler_install("$script> ", \&processLine); # store output buffer in a scalar (for print) my $outstream=$attribs->{'outstream'}; # install STDIN handler Event->io( desc => 'STDIN handler', # description; fd => \*STDIN, # handle; poll => 'r', # wait for income; cb => sub {&{$attribs->{'callback_read_char'}}()}, # callback; repeat => 1, # keep alive after events; ); # install an additional idle task just to demonstrate that the loop works fine, if necessary Event->idle( desc => 'idle task', # description; prio => 5, # low priority; min => 1, # minimal pending time in seconds; max => 5, # invoked after at least this number of seconds; cb => sub {print $outstream "\n\n[Trace] Idle task is running.\n\n"}, # callback; repeat => 1, # keep alive after events; ) if exists $options{'idle'}; # enter event loop Event::loop(); # handle a line completely read sub processLine { # get line my ($line)=@_; # anyhing to process? if (defined $line) { # do something print $outstream "[Trace] $line\n"; $term->add_history($line) if $line ne ''; } else { # well done print $outstream "\n"; $term->callback_handler_remove(); $_->cancel for Event::all_watchers; } } Event-1.21/demo/repeat.t0000644000175000017500000000174610624507753014474 0ustar joshuajoshua#!./perl -w use strict; use Event; # $Event::DebugLevel = 4; my $w=Event->io(fd=>\*STDIN, repeat=>0, cb=>\&callback); Event->timer(interval=>4, cb=>sub { $w->repeat(!$w->repeat); warn "repeat=".$w->repeat."\n"; state($w); }); sub callback { my $w = $_[0]->w; my $h = $w->fd; my $in=<$h>; print "You entered: $in"; if ($in =~ /start|again/) { $w->again; } state($w); } sub state { my ($w)=@_; warn 'Is: '.join(' ', $w->is_active?'ACTIVE':'INACTIVE', $w->is_suspended?'SUSP':'', $w->is_cancelled?'CANCELLED':'')."\n"; } print " This demo shows the function of the repeat flag. If you press return while repeat=1 then the watcher will remain active. If you press return while repeat=0 then the watcher will become inactive. If you type 'again' while the watcher is inactive then again() will be called in the callback and the watcher should continue to be active. Granted, this is not very exciting. :-) "; Event::loop; Event-1.21/demo/perlqt.t0000644000175000017500000000471210624507753014517 0ustar joshuajoshua#!./perl -w use Qt 2.0; use Event; package Qt::Application; BEGIN { Qt::app->import; } # must happen prior to this override: { # Won't work unless these are *virtual* functions. Troll Tech # hasn't yet seen fit to make this change. Apply the attached # patch for qt, and recompile. # Don't forget to make similar adjustments to the PerlQt templates. no warnings; sub enter_loop { Event::loop() } sub exit_loop { Event::unloop() } } package MyMainWindow; use base 'Qt::MainWindow'; use Qt::slots 'open_file()'; sub open_file { # call something that does exec(), and therefore enter_loop() Qt::FileDialog::getExistingDirectory(); } use Qt::slots 'quit()'; sub quit { Event::unloop(0) } package main; Qt::app->import; # Some versions of PerlQt don't provide xfd(). Fortunately, it is # easy to add. # # Qt.pig: # # #include # #include # static int xfd() : ConnectionNumber(qt_xdisplay()); Event->io(desc => 'Qt', fd => Qt::xfd(), timeout => .2, # for balloon help, etc. cb => sub { $app->processEvents(3000); #read $app->flushX(); #write }); my $w = MyMainWindow->new; my $mb = $w->menuBar; my $file = Qt::PopupMenu->new; $file->insertItem("Open...", $w, 'open_file()'); $file->insertItem("Quit", $w, 'quit()'); $mb->insertItem("File", $file); my $at = int rand 1000; my $label = Qt::Label->new("$at", $w); $w->setCentralWidget($label); Event->timer(hard => 1, interval => .2, cb => sub { --$at; $at = int rand 1000 if $at < 1; # prove that Event is in control $label->setText($at); }); $w->resize(200, 200); $w->show; $app->setMainWidget($w); exit Event::loop(); __END__ diff -c 'qt-2.1.0/src/kernel/qapplication.h' 'qt-2.1.0.new/src/kernel/qapplication.h' *** ././src/kernel/qapplication.h Wed Apr 12 09:21:53 2000 --- ././src/kernel/qapplication.h Wed Apr 12 13:53:51 2000 *************** *** 112,119 **** void processEvents(); void processEvents( int maxtime ); void processOneEvent(); ! int enter_loop(); ! void exit_loop(); int loopLevel() const; static void exit( int retcode=0 ); --- 112,119 ---- void processEvents(); void processEvents( int maxtime ); void processOneEvent(); ! virtual int enter_loop(); ! virtual void exit_loop(); int loopLevel() const; static void exit( int retcode=0 ); Event-1.21/c/0002755000175000017500000000000012062657023012311 5ustar joshuajoshuaEvent-1.21/c/timer.c0000644000175000017500000000424611013441643013573 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_timer_vtbl; static pe_watcher *pe_timer_allocate(HV *stash, SV *temple) { pe_timer *ev; EvNew(7, ev, 1, pe_timer); assert(ev); ev->base.vtbl = &pe_timer_vtbl; PE_RING_INIT(&ev->tm.ring, ev); ev->tm.at = 0; ev->interval = &PL_sv_undef; pe_watcher_init(&ev->base, stash, temple); return (pe_watcher*) ev; } static void pe_timer_dtor(pe_watcher *ev) { pe_timer *tm = (pe_timer*) ev; SvREFCNT_dec(tm->interval); pe_watcher_dtor(ev); EvFree(7, ev); } static char *pe_timer_start(pe_watcher *ev, int repeat) { STRLEN n_a; pe_timer *tm = (pe_timer*) ev; if (!ev->callback) return "without callback"; if (repeat) { /* We just finished the callback and need to re-insert at the appropriate time increment. */ NV interval; if (!sv_2interval("timer", tm->interval, &interval)) return "repeating timer has no interval"; tm->tm.at = interval + (WaHARD(ev)? tm->tm.at : NVtime()); } if (!tm->tm.at) return "timer unset"; pe_timeable_start(&tm->tm); return 0; } static void pe_timer_stop(pe_watcher *ev) { pe_timeable_stop(&((pe_timer*)ev)->tm); } static void pe_timer_alarm(pe_watcher *wa, pe_timeable *tm) { pe_event *ev = (*wa->vtbl->new_event)(wa); ++ev->hits; queueEvent(ev); } WKEYMETH(_timer_at) { pe_timer *tp = (pe_timer*)ev; if (nval) { int active = WaPOLLING(ev); if (active) pe_watcher_off(ev); tp->tm.at = SvNV(nval); if (active) pe_watcher_on(ev, 0); } { dSP; XPUSHs(sv_2mortal(newSVnv(tp->tm.at))); PUTBACK; } } WKEYMETH(_timer_interval) { pe_timer *tp = (pe_timer*)ev; if (nval) { SV *old = tp->interval; tp->interval = SvREFCNT_inc(nval); SvREFCNT_dec(old); VERIFYINTERVAL("timer", tp->interval); /* recalc expiration XXX */ } { dSP; XPUSHs(tp->interval); PUTBACK; } } static void boot_timer() { pe_watcher_vtbl *vt = &pe_timer_vtbl; memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_timer_dtor; vt->start = pe_timer_start; vt->stop = pe_timer_stop; vt->alarm = pe_timer_alarm; pe_register_vtbl(vt, gv_stashpv("Event::timer",1), &event_vtbl); } Event-1.21/c/ev.c0000644000175000017500000002101411013441643013055 0ustar joshuajoshua/* 100 levels will trigger a manditory warning from perl */ #define MAX_CB_NEST 95 static NV QueueTime[PE_QUEUES]; static pe_cbframe CBFrame[MAX_CB_NEST]; static int CurCBFrame = -1; pe_event_vtbl event_vtbl, ioevent_vtbl, datafulevent_vtbl; static void pe_anyevent_init(pe_event *ev, pe_watcher *wa) { assert(wa); ev->up = wa; ++wa->refcnt; ev->mysv = 0; PE_RING_INIT(&ev->peer, ev); PE_RING_UNSHIFT(&ev->peer, &wa->events); ev->hits = 0; ev->prio = wa->prio; ev->callback = 0; } static void pe_anyevent_dtor(pe_event *ev) { STRLEN n_a; pe_watcher *wa = ev->up; if (WaDEBUGx(wa) >= 3) warn("Event=0x%x '%s' destroyed (SV=0x%x)", ev, SvPV(wa->desc, n_a), ev->mysv? SvRV(ev->mysv) : 0); ev->up = 0; ev->mysv = 0; ev->hits = 0; if (EvPERLCB(ev)) SvREFCNT_dec(ev->callback); ev->callback = 0; PE_RING_DETACH(&ev->peer); PE_RING_DETACH(&ev->que); --wa->refcnt; if (WaCANDESTROY(wa)) /* running */ (*wa->vtbl->dtor)(wa); } static void pe_anyevent_set_cb(pe_event *ev, void *fptr, void *ext) { if (EvPERLCB(ev)) SvREFCNT_dec(ev->callback); EvPERLCB_off(ev); ev->callback = fptr; ev->ext_data = ext; } static void pe_anyevent_set_perl_cb(pe_event *ev, SV *sv) { SV *old = 0; if (EvPERLCB(ev)) old = ev->callback; ev->callback = SvREFCNT_inc(sv); SvREFCNT_dec(old); EvPERLCB_on(ev); } /*****************************************************************/ static pe_event *pe_event_allocate(pe_watcher *wa) { pe_event *ev; assert(wa); if (PE_RING_EMPTY(&event_vtbl.freelist)) { EvNew(0, ev, 1, pe_event); ev->vtbl = &event_vtbl; PE_RING_INIT(&ev->que, ev); } else { pe_ring *lk = event_vtbl.freelist.prev; PE_RING_DETACH(lk); ev = (pe_event*) lk->self; } pe_anyevent_init(ev, wa); return ev; } static void pe_event_dtor(pe_event *ev) { pe_anyevent_dtor(ev); PE_RING_UNSHIFT(&ev->que, &event_vtbl.freelist); } static void pe_event_release(pe_event *ev) { if (!ev->mysv) (*ev->vtbl->dtor)(ev); else { SvREFCNT_dec(ev->mysv); ev->mysv=0; } } EKEYMETH(_event_hits) { if (!nval) { dSP; XPUSHs(sv_2mortal(newSViv(ev->hits))); PUTBACK; } else croak("'e_hits' is read-only"); } EKEYMETH(_event_prio) { if (!nval) { dSP; XPUSHs(sv_2mortal(newSViv(ev->prio))); PUTBACK; } else croak("'e_prio' is read-only"); } /*------------------------------------------------------*/ static pe_event *pe_ioevent_allocate(pe_watcher *wa) { pe_ioevent *ev; assert(wa); if (PE_RING_EMPTY(&ioevent_vtbl.freelist)) { EvNew(1, ev, 1, pe_ioevent); ev->base.vtbl = &ioevent_vtbl; PE_RING_INIT(&ev->base.que, ev); } else { pe_ring *lk = ioevent_vtbl.freelist.prev; PE_RING_DETACH(lk); ev = (pe_ioevent*) lk->self; } pe_anyevent_init(&ev->base, wa); ev->got = 0; return &ev->base; } static void pe_ioevent_dtor(pe_event *ev) { pe_anyevent_dtor(ev); PE_RING_UNSHIFT(&ev->que, &ioevent_vtbl.freelist); } EKEYMETH(_event_got) { pe_ioevent *io = (pe_ioevent *)ev; if (!nval) { dSP; XPUSHs(sv_2mortal(events_mask_2sv(io->got))); PUTBACK; } else croak("'e_got' is read-only"); } /*------------------------------------------------------*/ static pe_event *pe_datafulevent_allocate(pe_watcher *wa) { pe_datafulevent *ev; assert(wa); if (PE_RING_EMPTY(&datafulevent_vtbl.freelist)) { EvNew(15, ev, 1, pe_datafulevent); ev->base.vtbl = &datafulevent_vtbl; PE_RING_INIT(&ev->base.que, ev); } else { pe_ring *lk = datafulevent_vtbl.freelist.prev; PE_RING_DETACH(lk); ev = (pe_datafulevent*) lk->self; } pe_anyevent_init(&ev->base, wa); ev->data = &PL_sv_undef; return &ev->base; } static void pe_datafulevent_dtor(pe_event *ev) { pe_datafulevent *de = (pe_datafulevent *)ev; SvREFCNT_dec(de->data); pe_anyevent_dtor(ev); PE_RING_UNSHIFT(&ev->que, &datafulevent_vtbl.freelist); } EKEYMETH(_event_data) { pe_datafulevent *de = (pe_datafulevent *)ev; if (!nval) { dSP; XPUSHs(de->data); PUTBACK; } else croak("'e_data' is read-only"); } /*------------------------------------------------------*/ static void pe_event_postCB(pe_cbframe *fp) { pe_event *ev = fp->ev; pe_watcher *wa = ev->up; --CurCBFrame; if (WaACTIVE(wa) && WaINVOKE1(wa) && WaREPEAT(wa)) pe_watcher_on(wa, 1); if (Estat.on) { if (fp->stats) { Estat.scrub(fp->stats, wa); fp->stats = 0; } if (CurCBFrame >= 0) { pe_cbframe *pfp = CBFrame + CurCBFrame; if (!pfp->stats) pfp->stats = Estat.enter(CurCBFrame, pfp->ev->up->max_cb_tm); else Estat.resume(pfp->stats); } } /* this must be last because it can destroy the watcher */ pe_event_release(ev); } static void pe_callback_died(pe_cbframe *fp) { dSP; STRLEN n_a; pe_watcher *wa = fp->ev->up; SV *eval = perl_get_sv("Event::DIED", 1); SV *err = (sv_true(ERRSV)? sv_mortalcopy(ERRSV): sv_2mortal(newSVpv("?",0))); if (WaDEBUGx(wa) >= 4) warn("Event: '%s' died with: %s\n", SvPV(wa->desc,n_a), SvPV(ERRSV,n_a)); PUSHMARK(SP); XPUSHs(event_2sv(fp->ev)); XPUSHs(err); PUTBACK; perl_call_sv(eval, G_EVAL|G_DISCARD); if (sv_true(ERRSV)) { warn("Event: '%s' died and then $Event::DIED died with: %s\n", SvPV(wa->desc,n_a), SvPV(ERRSV,n_a)); sv_setpv(ERRSV, ""); } } static void _resume_watcher(void *vp) { pe_watcher *wa = (pe_watcher *)vp; pe_watcher_resume(wa); } static void pe_check_recovery() { /* NO ASSERTIONS HERE! EVAL CONTEXT IS VERY MESSY */ int alert; struct pe_cbframe *fp; if (CurCBFrame < 0) return; alert=0; while (CurCBFrame >= 0) { fp = CBFrame + CurCBFrame; if (fp->ev->up->running == fp->run_id) break; if (!alert) { alert=1; /* exception detected; alert the militia! */ pe_callback_died(fp); } pe_event_postCB(fp); } } static void pe_event_invoke(pe_event *ev) { STRLEN n_a; int Dbg; pe_watcher *wa = ev->up; struct pe_cbframe *frp; pe_check_recovery(); /* SETUP */ ENTER; SAVEINT(wa->running); PE_RING_DETACH(&ev->peer); frp = &CBFrame[++CurCBFrame]; frp->ev = ev; frp->run_id = ++wa->running; if (Estat.on) frp->stats = Estat.enter(CurCBFrame, wa->max_cb_tm); assert(ev->prio >= 0 && ev->prio < PE_QUEUES); QueueTime[ev->prio] = wa->cbtime = NVtime(); /* SETUP */ if (CurCBFrame+1 >= MAX_CB_NEST) { ExitLevel = 0; croak("Deep recursion detected; invoking unloop_all()\n"); } Dbg = WaDEBUGx(wa); if (Dbg) { /* SV *cvb = perl_get_sv("Carp::Verbose", 1); if (!SvIV(cvb)) { SAVEIV(SvIVX(cvb)); SvIVX(cvb) = 1; } */ if (Dbg >= 2) warn("Event: [%d]invoking '%s' (prio %d)\n", CurCBFrame, SvPV(wa->desc,n_a),ev->prio); } if (!PE_RING_EMPTY(&Callback)) pe_map_check(&Callback); if (EvPERLCB(ev)) { SV *cb = SvRV((SV*)ev->callback); int pcflags = G_VOID | (SvIVX(Eval)? G_EVAL : 0); int retcnt; SV *evsv = event_2sv(ev); dSP; PUSHMARK(SP); if (SvTYPE(cb) == SVt_PVCV) { XPUSHs(evsv); PUTBACK; retcnt = perl_call_sv((SV*) ev->callback, pcflags); } else { AV *av = (AV*)cb; assert(SvTYPE(cb) == SVt_PVAV); XPUSHs(*av_fetch(av, 0, 0)); XPUSHs(evsv); PUTBACK; retcnt = perl_call_method(SvPV(*av_fetch(av, 1, 0),n_a), pcflags); } SPAGAIN; SP -= retcnt; PUTBACK; if (SvTRUE(ERRSV)) { if (pcflags & G_EVAL) pe_callback_died(frp); else sv_setsv(ERRSV, &PL_sv_no); } } else { assert(ev->callback); (* (void(*)(pe_event*)) ev->callback)(ev); } LEAVE; if (Estat.on) { if (frp->stats) /* maybe in transition */ Estat.commit(frp->stats, wa); frp->stats=0; } if (Dbg >= 3) warn("Event: completed '%s'\n", SvPV(wa->desc, n_a)); pe_event_postCB(frp); } static void boot_pe_event() { pe_event_vtbl *vt; vt = &event_vtbl; vt->new_event = pe_event_allocate; vt->dtor = pe_event_dtor; vt->stash = gv_stashpv("Event::Event", 1); PE_RING_INIT(&vt->freelist, 0); vt = &ioevent_vtbl; memcpy(vt, &event_vtbl, sizeof(pe_event_vtbl)); vt->stash = gv_stashpv("Event::Event::Io", 1); vt->new_event = pe_ioevent_allocate; vt->dtor = pe_ioevent_dtor; PE_RING_INIT(&vt->freelist, 0); vt = &datafulevent_vtbl; memcpy(vt, &event_vtbl, sizeof(pe_event_vtbl)); vt->stash = gv_stashpv("Event::Event::Dataful", 1); vt->new_event = pe_datafulevent_allocate; vt->dtor = pe_datafulevent_dtor; PE_RING_INIT(&vt->freelist, 0); memset(QueueTime, 0, sizeof(QueueTime)); } Event-1.21/c/var.c0000644000175000017500000001023012062655363013244 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_var_vtbl; static pe_watcher *pe_var_allocate(HV *stash, SV *temple) { pe_var *ev; EvNew(10, ev, 1, pe_var); ev->base.vtbl = &pe_var_vtbl; pe_watcher_init(&ev->base, stash, temple); ev->variable = &PL_sv_undef; ev->events = PE_W; WaREPEAT_on(ev); WaINVOKE1_off(ev); return (pe_watcher*) ev; } static void pe_var_dtor(pe_watcher *ev) { pe_var *wv = (pe_var *)ev; SvREFCNT_dec(wv->variable); pe_watcher_dtor(ev); EvFree(10, ev); } static void pe_tracevar(pe_watcher *wa, SV *sv, int got) { /* Adapted from tkGlue.c We are a "magic" set processor. So we are (I think) supposed to look at "private" flags and set the public ones if appropriate. e.g. "chop" sets SvPOKp as a hint but not SvPOK presumably other operators set other private bits. Question are successive "magics" called in correct order? i.e. if we are tracing a tied variable should we call some magic list or be careful how we insert ourselves in the list? */ pe_ioevent *ev; if (SvPOKp(sv)) SvPOK_on(sv); if (SvNOKp(sv)) SvNOK_on(sv); if (SvIOKp(sv)) SvIOK_on(sv); ev = (pe_ioevent*) (*wa->vtbl->new_event)(wa); ++ev->base.hits; ev->got |= got; queueEvent((pe_event*) ev); } static I32 tracevar_r(pTHX_ IV ix, SV *sv) { pe_tracevar(INT2PTR(pe_watcher *, ix), sv, PE_R); return 0; /*ignored*/ } static I32 tracevar_w(pTHX_ IV ix, SV *sv) { pe_tracevar(INT2PTR(pe_watcher *, ix), sv, PE_W); return 0; /*ignored*/ } static char *pe_var_start(pe_watcher *_ev, int repeat) { STRLEN n_a; struct ufuncs *ufp; MAGIC **mgp; MAGIC *mg; pe_var *ev = (pe_var*) _ev; SV *sv = ev->variable; if (!_ev->callback) return "without callback"; if (!sv || !SvOK(sv)) return "watching what?"; if (!ev->events) return "without poll events specified"; sv = SvRV(sv); if (SvREADONLY(sv)) return "cannot trace read-only variable"; (void)SvUPGRADE(sv, SVt_PVMG); mgp = &SvMAGIC(sv); while ((mg = *mgp)) { mgp = &mg->mg_moremagic; } EvNew(11, mg, 1, MAGIC); Zero(mg, 1, MAGIC); mg->mg_type = 'U'; mg->mg_virtual = &PL_vtbl_uvar; *mgp = mg; EvNew(8, ufp, 1, struct ufuncs); ufp->uf_val = ev->events & PE_R? tracevar_r : 0; ufp->uf_set = ev->events & PE_W? tracevar_w : 0; ufp->uf_index = PTR2IV(ev); mg->mg_ptr = (char *) ufp; mg->mg_obj = (SV*) ev; mg_magical(sv); if (!SvMAGICAL(sv)) return "mg_magical didn't"; return 0; } static void pe_var_stop(pe_watcher *_ev) { MAGIC **mgp; MAGIC *mg; pe_var *ev = (pe_var*) _ev; SV *sv = SvRV(ev->variable); if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv)) { warn("Var unmagic'd already?"); return; } mgp = &SvMAGIC(sv); while ((mg = *mgp)) { if (mg->mg_type == 'U' && mg->mg_obj == (SV*)ev) break; mgp = &mg->mg_moremagic; } if(!mg) { warn("Couldn't find var magic"); return; } *mgp = mg->mg_moremagic; EvFree(8, mg->mg_ptr); EvFree(11, mg); } static void _var_restart(pe_watcher *ev) { if (!WaPOLLING(ev)) return; pe_watcher_off(ev); pe_watcher_on(ev, 0); } WKEYMETH(_var_events) { pe_var *vp = (pe_var*)ev; if (nval) { vp->events = sv_2events_mask(nval, PE_R|PE_W); _var_restart(ev); } { dSP; XPUSHs(sv_2mortal(events_mask_2sv(vp->events))); PUTBACK; } } WKEYMETH(_var_variable) { pe_var *vp = (pe_var*)ev; if (nval) { SV *old = vp->variable; int active = WaPOLLING(ev); if (SvOK(nval)) { if (!SvROK(nval)) croak("Expecting a reference"); if (SvTYPE(SvRV(nval)) > SVt_PVMG) croak("Var watchers can only watch plain vanilla scalars"); } if (active) pe_watcher_off(ev); vp->variable = SvREFCNT_inc(nval); if (active) pe_watcher_on(ev, 0); SvREFCNT_dec(old); } { dSP; XPUSHs(vp->variable); PUTBACK; } } static void boot_var() { pe_watcher_vtbl *vt = &pe_var_vtbl; memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_var_dtor; vt->start = pe_var_start; vt->stop = pe_var_stop; pe_register_vtbl(vt, gv_stashpv("Event::var",1), &ioevent_vtbl); } Event-1.21/c/unix.c0000644000175000017500000002701611013441643013436 0ustar joshuajoshua#if defined(HAS_DEVPOLL) #include static int dpfd=0; static struct pollfd *Pollfd=0; static int pollMax=200; static int Nfds; #define MAXFD 65000 typedef struct _fdToEvent { pe_io *ev; } FdToEvent; static FdToEvent fdToEvent[MAXFD]; #endif /*HAS_DEVPOLL*/ static void boot_devpoll() { #if defined(HAS_DEVPOLL) memset(fdToEvent, 0, MAXFD*sizeof(FdToEvent)); EvNew(9, Pollfd, pollMax, struct pollfd); /* Open /dev/poll driver */ if (!dpfd) { fprintf(stderr, "INIT Open /dev/poll!!!\n"); if ((dpfd = open("/dev/poll", O_RDWR)) < 0) { croak("Event: Can't open /dev/poll!\n"); } } #endif /*HAS_DEVPOLL*/ } static int pe_sys_fileno(SV *sv, char *context) { IO *io; PerlIO *fp; if (!sv) croak("Event %s: no filehandle available", context); if (SvGMAGICAL(sv)) mg_get(sv); if (SvIOK(sv)) /* maybe non-portable but nice for unixen */ return SvIV(sv); if (SvROK(sv)) sv = SvRV(sv); if (SvTYPE(sv) == SVt_PVGV) { if (!(io=GvIO((GV*)sv)) || !(fp = IoIFP(io))) { croak("Event '%s': GLOB(0x%x) isn't a valid IO", context, sv); } return PerlIO_fileno(fp); } sv_dump(sv); croak("Event '%s': can't find fileno", context); return -1; } static void _queue_io(pe_io *wa, int got) { pe_ioevent *ev; got &= wa->poll; if (!got) { if (WaDEBUGx(wa) >= 3) { STRLEN n_a; warn("Event: io '%s' queued nothing", SvPV(wa->base.desc, n_a)); } return; } ev = (pe_ioevent*) (*wa->base.vtbl->new_event)((pe_watcher*) wa); ++ev->base.hits; ev->got |= got; queueEvent((pe_event*) ev); } /************************************************* DEVPOLL */ #if defined(HAS_DEVPOLL) && !PE_SYS_IO #define PE_SYS_IO 1 static void pe_sys_sleep(NV left) { int ret; NV t0 = NVtime(); NV t1 = t0 + left; while (1) { ret = poll(0, 0, (int) (left * 1000)); /* hope zeroes okay */ if (ret < 0 && errno != EAGAIN && errno != EINTR) croak("poll(%.2f) got errno %d", left, errno); left = t1 - NVtime(); if (left > IntervalEpsilon) { if (ret==0) ++TimeoutTooEarly; continue; } break; } } static void pe_sys_io_add (pe_io *ev) { struct pollfd tmp_pfd; int bits=0; if (ev->fd <= 0 || ev->fd > MAXFD) { croak("pe_sys_io_add: non-valid fd (%d)", ev->fd); return; } if (ev->poll & PE_R) bits |= (POLLIN | POLLPRI); if (ev->poll & PE_W) bits |= POLLOUT; if (ev->poll & PE_E) bits |= (POLLRDBAND | POLLPRI); tmp_pfd.fd = ev->fd; tmp_pfd.events = bits; if (write(dpfd, &tmp_pfd, sizeof(struct pollfd)) != sizeof(struct pollfd)) { fprintf(stderr, "pe_sys_io_add(fd %d): could not write fd to /dev/poll", dpfd); return; } if (fdToEvent[ev->fd].ev != NULL) { fprintf(stderr, "pe_sys_io_add(fd %d): mapping between fd and event already exists!", ev->fd); } else { fdToEvent[ev->fd].ev = ev; } } static void pe_sys_io_del (pe_io *ev) { struct pollfd tmp_pfd; int bits=0; if (ev-> fd <= 0) { return; } if (ev->poll & PE_R) bits |= (POLLIN | POLLPRI); if (ev->poll & PE_W) bits |= POLLOUT; if (ev->poll & PE_E) bits |= (POLLRDBAND | POLLPRI); tmp_pfd.fd = ev->fd; tmp_pfd.events = POLLREMOVE; if (write(dpfd, &tmp_pfd, sizeof(struct pollfd)) != sizeof(struct pollfd)) { fprintf(stderr, "pe_sys_io_del(fd %d): could not write fd to /dev/poll", dpfd); } fdToEvent[ev->fd].ev = NULL; } static void pe_sys_multiplex(NV timeout) { pe_io *ev; int xx, got, mask, fd; int ret; int err, m_rfds; struct dvpoll dopoll; if (pollMax < IOWatchCount) { if (Pollfd) EvFree(9, Pollfd); pollMax = IOWatchCount*2; EvNew(9, Pollfd, pollMax, struct pollfd); IOWatch_OK = 0; } if (!IOWatch_OK) { Nfds = 0; Zero(Pollfd, pollMax, struct pollfd); ev = (pe_io*) IOWatch.next->self; while (ev) { int fd = ev->fd; ev->xref = -1; assert(fd >= 0); { int bits=0; if (ev->poll & PE_R) bits |= (POLLIN | POLLPRI); if (ev->poll & PE_W) bits |= POLLOUT; if (ev->poll & PE_E) bits |= (POLLRDBAND | POLLPRI); assert(bits); { Pollfd[Nfds].fd = fd; Pollfd[Nfds].events |= bits; Nfds++; } } ev = (pe_io*) ev->ioring.next->self; } IOWatch_OK = 1; } for (xx=0; xx < Nfds; xx++) Pollfd[xx].revents = 0; /* needed? XXX */ if (timeout < 0) timeout = 0; dopoll.dp_timeout = (int) (timeout * 1000); dopoll.dp_nfds = pollMax; dopoll.dp_fds = Pollfd; /* Wait for I/O events the clients are interested in */ m_rfds = ioctl(dpfd, DP_POLL, &dopoll); if (m_rfds == -1) { err = errno; fprintf(stderr, "pe_sys_multiplex: poll() returned -1, errno %d\n", err); return; } while (m_rfds >= 1) { m_rfds--; fd = Pollfd[m_rfds].fd; ev = fdToEvent[fd].ev; got = 0; mask = Pollfd[m_rfds].revents; if (mask & (POLLIN | POLLPRI | POLLHUP | POLLERR)) got |= PE_R; if (mask & (POLLOUT | POLLERR)) got |= PE_W; if (mask & (POLLRDBAND | POLLPRI | POLLHUP | POLLERR)) got |= PE_E; if (mask & POLLNVAL) { STRLEN n_a; warn("Event: '%s' was unexpectedly closed", SvPV(ev->base.desc, n_a)); pe_io_reset_handle((pe_watcher*) ev); } else { if ((mask & POLLHUP) && (ev->poll & PE_W) && (!(got & PE_W)) && (!(ev->poll & PE_R)) && (!(ev->poll & PE_E))) { /* Must notify about POLLHUP _some_ way - Allen */ got |= PE_W; } } if (got) _queue_io(ev, got); } } #endif /*HAS_DEVPOLL*/ /************************************************* POLL */ #if defined(HAS_POLL) && !PE_SYS_IO #define PE_SYS_IO 1 static struct pollfd *Pollfd=0; static int pollMax=0; static int Nfds; static void pe_sys_sleep(NV left) { int ret; NV t0 = NVtime(); NV t1 = t0 + left; while (1) { ret = poll(0, 0, (int) (left * 1000)); /* hope zeroes okay */ if (ret < 0 && errno != EAGAIN && errno != EINTR) croak("poll(%.2f) got errno %d", left, errno); left = t1 - NVtime(); if (left > IntervalEpsilon) { if (ret==0) ++TimeoutTooEarly; continue; } break; } } static void pe_sys_io_add (pe_io *ev) {} static void pe_sys_io_del (pe_io *ev) {} static void pe_sys_multiplex(NV timeout) { pe_io *ev; int xx; int ret; if (pollMax < IOWatchCount) { if (Pollfd) EvFree(9, Pollfd); pollMax = IOWatchCount+5; EvNew(9, Pollfd, pollMax, struct pollfd); IOWatch_OK = 0; } if (!IOWatch_OK) { Nfds = 0; Zero(Pollfd, pollMax, struct pollfd); ev = (pe_io*) IOWatch.next->self; while (ev) { int fd = ev->fd; ev->xref = -1; assert(fd >= 0); { int bits=0; if (ev->poll & PE_R) bits |= (POLLIN | POLLPRI); if (ev->poll & PE_W) bits |= POLLOUT; if (ev->poll & PE_E) bits |= (POLLRDBAND | POLLPRI); assert(bits); { int ok=0;; for (xx = 0; xx < Nfds; xx++) { if (Pollfd[xx].fd == fd) { ok=1; break; } } if (!ok) xx = Nfds++; Pollfd[xx].fd = fd; Pollfd[xx].events |= bits; ev->xref = xx; } } ev = (pe_io*) ev->ioring.next->self; } IOWatch_OK = 1; } for (xx=0; xx < Nfds; xx++) Pollfd[xx].revents = 0; /* needed? XXX */ if (timeout < 0) timeout = 0; ret = poll(Pollfd, Nfds, (int) (timeout * 1000)); if (ret < 0) { if (errno == EINTR || errno == EAGAIN) return; if (errno == EINVAL) { warn("poll: bad args %d %.2f", Nfds, timeout); return; } warn("poll got errno %d", errno); return; } ev = (pe_io*) IOWatch.next->self; while (ev) { pe_io *next_ev = (pe_io*) ev->ioring.next->self; STRLEN n_a; int xref = ev->xref; if (xref >= 0) { int got = 0; int mask = Pollfd[xref].revents; if (mask & (POLLIN | POLLPRI | POLLHUP | POLLERR)) got |= PE_R; if (mask & (POLLOUT | POLLERR)) got |= PE_W; if (mask & (POLLRDBAND | POLLPRI | POLLHUP | POLLERR)) got |= PE_E; if (mask & POLLNVAL) { warn("Event: '%s' was unexpectedly closed", SvPV(ev->base.desc, n_a)); pe_io_reset_handle((pe_watcher*) ev); } else { if ((mask & POLLHUP) && (ev->poll & PE_W) && (!(got & PE_W)) && (!(ev->poll & PE_R)) && (!(ev->poll & PE_E))) { /* Must notify about POLLHUP _some_ way - Allen */ got |= PE_W; } if (got) _queue_io(ev, got); /* Can only do this if fd-to-watcher is 1-to-1 if (--ret == 0) { ev=0; continue; } */ } } ev = next_ev; } } #endif /*HAS_POLL*/ /************************************************* SELECT */ #if defined(HAS_SELECT) && !PE_SYS_IO #define PE_SYS_IO 1 static int Nfds; static fd_set Rfds, Wfds, Efds; static void pe_sys_sleep(NV left) { struct timeval tm; NV t0 = NVtime(); NV t1 = t0 + left; int ret; while (1) { tm.tv_sec = left; tm.tv_usec = (left - tm.tv_sec) * 1000000; ret = select(0, 0, 0, 0, &tm); if (ret < 0 && errno != EINTR && errno != EAGAIN) croak("select(%.2f) got errno %d", left, errno); left = t1 - NVtime(); if (left > IntervalEpsilon) { if (ret==0) ++TimeoutTooEarly; continue; } break; } } static void pe_sys_io_add (pe_io *ev) {} static void pe_sys_io_del (pe_io *ev) {} static void pe_sys_multiplex(NV timeout) { struct timeval tm; int ret; fd_set rfds, wfds, efds; pe_io *ev; if (!IOWatch_OK) { Nfds = -1; FD_ZERO(&Rfds); FD_ZERO(&Wfds); FD_ZERO(&Efds); ev = IOWatch.next->self; while (ev) { int fd = ev->fd; if (fd >= 0) { int bits=0; if (ev->poll & PE_R) { FD_SET(fd, &Rfds); ++bits; } if (ev->poll & PE_W) { FD_SET(fd, &Wfds); ++bits; } if (ev->poll & PE_E) { FD_SET(fd, &Efds); ++bits; } if (bits && fd > Nfds) Nfds = fd; } ev = ev->ioring.next->self; } IOWatch_OK = 1; } if (timeout < 0) timeout = 0; tm.tv_sec = timeout; tm.tv_usec = (timeout - tm.tv_sec) * 1000000; if (Nfds > -1) { memcpy(&rfds, &Rfds, sizeof(fd_set)); memcpy(&wfds, &Wfds, sizeof(fd_set)); memcpy(&efds, &Efds, sizeof(fd_set)); ret = select(Nfds+1, &rfds, &wfds, &efds, &tm); } else ret = select(0, 0, 0, 0, &tm); if (ret < 0) { if (errno == EINTR) return; if (errno == EBADF) { STRLEN n_a; ev = IOWatch.next->self; while (ev) { int fd = ev->fd; struct stat buf; if (fd >= 0 && PerlLIO_fstat(fd, &buf) < 0 && errno == EBADF) { warn("Event: '%s' was unexpectedly closed", SvPV(ev->base.desc, n_a)); pe_io_reset_handle((pe_watcher*) ev); return; } ev = ev->ioring.next->self; } warn("select: couldn't find cause of EBADF"); return; } if (errno == EINVAL) { warn("select: bad args %d %.2f", Nfds, timeout); return; } warn("select got errno %d", errno); return; } ev = IOWatch.next->self; while (ev) { pe_io *next_ev = (pe_io*) ev->ioring.next->self; int fd = ev->fd; if (fd >= 0) { int got = 0; if (FD_ISSET(fd, &rfds)) got |= PE_R; if (FD_ISSET(fd, &wfds)) got |= PE_W; if (FD_ISSET(fd, &efds)) got |= PE_E; if (got) _queue_io(ev, got); /* Can only do this if fd-to-watcher is 1-to-1 if (--ret == 0) { ev=0; continue; } */ } ev = next_ev; } } #endif /*HAS_SELECT*/ Event-1.21/c/watcher.c0000644000175000017500000002276712062657015014127 0ustar joshuajoshuastatic int NextID = 0; static pe_ring AllWatchers; static struct pe_watcher_vtbl pe_watcher_base_vtbl; static void pe_watcher_init(pe_watcher *ev, HV *stash, SV *temple) { STRLEN n_a; assert(ev); assert(ev->vtbl); if (!ev->vtbl->stash) croak("sub-class VTBL must have a stash (doesn't!)"); if (!ev->vtbl->did_require) { SV *tmp; char *name = HvNAME(ev->vtbl->stash); dTHX; if (memEQ(name, "Event::", 7)) name += 7; tmp = sv_2mortal(newSVpvf("Event/%s.pm", name)); perl_require_pv(SvPV(tmp, n_a)); if (sv_true(ERRSV)) croak("Event: could not load perl support code for Event::%s: %s", name, SvPV(ERRSV,n_a)); ++ev->vtbl->did_require; } /* if we have a non-default stash then we need to save it! */ ev->mysv = stash || temple ? wrap_watcher(ev, stash, temple) : 0; PE_RING_INIT(&ev->all, ev); PE_RING_INIT(&ev->events, 0); /* no exceptions after this point */ PE_RING_UNSHIFT(&ev->all, &AllWatchers); WaFLAGS(ev) = 0; WaINVOKE1_on(ev); WaREENTRANT_on(ev); ev->FALLBACK = 0; NextID = (NextID+1) & 0x7fff; /* make it look like the kernel :-, */ ev->refcnt = 0; ev->desc = newSVpvn("??",2); ev->running = 0; ev->max_cb_tm = 1; /* make default configurable? */ ev->cbtime = 0; ev->prio = PE_QUEUES; ev->callback = 0; ev->ext_data = 0; ev->stats = 0; } static void pe_watcher_cancel_events(pe_watcher *wa) { pe_event *ev; while (!PE_RING_EMPTY(&wa->events)) { pe_ring *lk = wa->events.prev; ev = (pe_event*) lk->self; dequeEvent(ev); pe_event_release(ev); } } static void pe_watcher_dtor(pe_watcher *wa) { STRLEN n_a; assert(WaCANDESTROY(wa)); if (WaDESTROYED(wa)) { warn("Attempt to destroy watcher 0x%x again (ignored)", wa); return; } WaDESTROYED_on(wa); if (WaDEBUGx(wa) >= 3) warn("Watcher '%s' destroyed", SvPV(wa->desc, n_a)); assert(PE_RING_EMPTY(&wa->events)); if (WaPERLCB(wa)) SvREFCNT_dec(wa->callback); if (wa->FALLBACK) SvREFCNT_dec(wa->FALLBACK); if (wa->desc) SvREFCNT_dec(wa->desc); if (wa->stats) Estat.dtor(wa->stats); /* safefree(wa); do it yourself */ } /********************************** *******************************/ WKEYMETH(_watcher_callback) { if (nval) { AV *av; SV *sv; SV *old=0; if (WaPERLCB(ev)) old = (SV*) ev->callback; if (!SvOK(nval)) { WaPERLCB_off(ev); ev->callback = 0; ev->ext_data = 0; pe_watcher_stop(ev, 0); } else if (SvROK(nval) && (SvTYPE(sv=SvRV(nval)) == SVt_PVCV)) { WaPERLCB_on(ev); ev->callback = SvREFCNT_inc(nval); } else if (SvROK(nval) && (SvTYPE(av=(AV*)SvRV(nval)) == SVt_PVAV) && av_len(av) == 1) { /* method lookup code adapted from universal.c */ STRLEN n_a; SV *pkgsv = *av_fetch(av, 0, 0); HV *pkg = NULL; SV *namesv = *av_fetch(av, 1, 0); char *name = SvPV(namesv, n_a); int ok=0; if(SvROK(pkgsv)) { pkgsv = (SV*)SvRV(pkgsv); if(SvOBJECT(pkgsv)) pkg = SvSTASH(pkgsv); } else { pkg = gv_stashsv(pkgsv, FALSE); } if (pkg) { GV *gv = gv_fetchmethod_autoload(pkg, name, FALSE); if (gv && isGV(gv)) ok=1; } else { warn("Event: package '%s' doesn't exist (creating)", SvPV(pkgsv, n_a)); pkg = gv_stashsv(pkgsv, 1); } if (!ok) { warn("Event: callback method %s->%s doesn't exist", HvNAME(pkg), name); } WaPERLCB_on(ev); ev->callback = SvREFCNT_inc(nval); } else { if (SvIV(DebugLevel) >= 2) sv_dump(sv); croak("Callback must be a code ref or [$object, $method_name]"); } if (old) SvREFCNT_dec(old); } { SV *ret = (WaPERLCB(ev)? (SV*) ev->callback : (ev->callback? sv_2mortal(newSVpvf("", ev->callback, ev->ext_data)) : &PL_sv_undef)); dSP; XPUSHs(ret); PUTBACK; } } WKEYMETH(_watcher_cbtime) { if (!nval) { dSP; XPUSHs(sv_2mortal(newSVnv(ev->cbtime))); PUTBACK; } else croak("'e_cbtime' is read-only"); } WKEYMETH(_watcher_desc) { if (nval) { sv_setsv(ev->desc, nval); } { dSP; XPUSHs(ev->desc); PUTBACK; } } WKEYMETH(_watcher_debug) { if (nval) { if (sv_true(nval)) WaDEBUG_on(ev); else WaDEBUG_off(ev); } { dSP; XPUSHs(boolSV(WaDEBUG(ev))); PUTBACK; } } WKEYMETH(_watcher_priority) { if (nval) { ev->prio = SvIV(nval); } { dSP; XPUSHs(sv_2mortal(newSViv(ev->prio))); PUTBACK; } } WKEYMETH(_watcher_reentrant) { if (nval) { if (sv_true(nval)) WaREENTRANT_on(ev); else { if (ev->running > 1) croak("'reentrant' cannot be turned off while nested %d times", ev->running); WaREENTRANT_off(ev); } } { dSP; XPUSHs(boolSV(WaREENTRANT(ev))); PUTBACK; } } WKEYMETH(_watcher_repeat) { if (nval) { if (sv_true(nval)) WaREPEAT_on(ev); else WaREPEAT_off(ev); } { dSP; XPUSHs(boolSV(WaREPEAT(ev))); PUTBACK; } } WKEYMETH(_watcher_suspend) { if (nval) { if (sv_true(nval)) pe_watcher_suspend(ev); else pe_watcher_resume(ev); } { dSP; XPUSHs(boolSV(WaSUSPEND(ev))); PUTBACK; } } WKEYMETH(_watcher_max_cb_tm) { if (nval) { int tm = SvIOK(nval)? SvIV(nval) : 0; if (tm < 0) { warn("e_max_cb_tm must be non-negative"); tm=0; } ev->max_cb_tm = tm; } { dSP; XPUSHs(sv_2mortal(newSViv(ev->max_cb_tm))); PUTBACK; } } /********************************** *******************************/ static void pe_watcher_nomethod(pe_watcher *ev, char *meth) { HV *stash = ev->vtbl->stash; assert(stash); croak("%s::%s is missing", HvNAME(stash), meth); } static char *pe_watcher_nostart(pe_watcher *ev, int repeat) { pe_watcher_nomethod(ev,"start"); return 0; } static void pe_watcher_nostop(pe_watcher *ev) { pe_watcher_nomethod(ev,"stop"); } static void pe_watcher_alarm(pe_watcher *ev, pe_timeable *tm) { pe_watcher_nomethod(ev,"alarm"); } static void boot_pe_watcher() { HV *stash = gv_stashpv("Event::Watcher", 1); struct pe_watcher_vtbl *vt; PE_RING_INIT(&AllWatchers, 0); vt = &pe_watcher_base_vtbl; vt->stash = 0; vt->did_require = 0; vt->dtor = 0; vt->start = pe_watcher_nostart; vt->stop = pe_watcher_nostop; vt->alarm = pe_watcher_alarm; newCONSTSUB(stash, "ACTIVE", newSViv(PE_ACTIVE)); newCONSTSUB(stash, "SUSPEND", newSViv(PE_SUSPEND)); newCONSTSUB(stash, "R", newSViv(PE_R)); newCONSTSUB(stash, "W", newSViv(PE_W)); newCONSTSUB(stash, "E", newSViv(PE_E)); newCONSTSUB(stash, "T", newSViv(PE_T)); } static void pe_register_vtbl(pe_watcher_vtbl *vt, HV *stash, pe_event_vtbl *evt) { vt->stash = stash; vt->event_vtbl = evt; vt->new_event = evt->new_event; } static void pe_watcher_now(pe_watcher *wa) { pe_event *ev; if (WaSUSPEND(wa)) return; if (!wa->callback) { STRLEN n_a; croak("Event: attempt to invoke now() method with callback unset on watcher '%s'", SvPV(wa->desc,n_a)); } WaRUNNOW_on(wa); /* race condition XXX */ ev = (*wa->vtbl->new_event)(wa); ++ev->hits; queueEvent(ev); } /******************************************************************* The following methods change the status flags. This is the only code that should be changing these flags! */ static void pe_watcher_cancel(pe_watcher *wa) { if (WaCANCELLED(wa)) return; WaSUSPEND_off(wa); pe_watcher_stop(wa, 1); /* peer */ WaCANCELLED_on(wa); PE_RING_DETACH(&wa->all); if (wa->mysv) SvREFCNT_dec(wa->mysv); /* might destroy */ else if (WaCANDESTROY(wa)) (*wa->vtbl->dtor)(wa); } static void pe_watcher_suspend(pe_watcher *ev) { STRLEN n_a; assert(ev); if (WaSUSPEND(ev)) return; if (WaDEBUGx(ev) >= 4) warn("Event: suspend '%s'\n", SvPV(ev->desc,n_a)); pe_watcher_off(ev); pe_watcher_cancel_events(ev); WaSUSPEND_on(ev); /* must happen nowhere else!! */ } static void pe_watcher_resume(pe_watcher *ev) { STRLEN n_a; assert(ev); if (!WaSUSPEND(ev)) return; WaSUSPEND_off(ev); if (WaDEBUGx(ev) >= 4) warn("Event: resume '%s'%s\n", SvPV(ev->desc,n_a), WaACTIVE(ev)?" ACTIVE":""); if (WaACTIVE(ev)) pe_watcher_on(ev, 0); } static char *pe_watcher_on(pe_watcher *wa, int repeat) { STRLEN n_a; char *excuse; if (WaPOLLING(wa) || WaSUSPEND(wa)) return 0; if (WaCANCELLED(wa)) croak("Event: attempt to start cancelled watcher '%s'", SvPV(wa->desc,n_a)); excuse = (*wa->vtbl->start)(wa, repeat); if (excuse) { if (SvIV(DebugLevel)) warn("Event: can't restart '%s' %s", SvPV(wa->desc, n_a), excuse); pe_watcher_stop(wa, 1); /* update flags! */ } else WaPOLLING_on(wa); /* must happen nowhere else!! */ return excuse; } static void pe_watcher_off(pe_watcher *wa) { if (!WaPOLLING(wa) || WaSUSPEND(wa)) return; (*wa->vtbl->stop)(wa); WaPOLLING_off(wa); } static void pe_watcher_start(pe_watcher *ev, int repeat) { char *excuse; STRLEN n_a; if (WaACTIVE(ev)) return; if (WaDEBUGx(ev) >= 4) warn("Event: active ON '%s'\n", SvPV(ev->desc,n_a)); excuse = pe_watcher_on(ev, repeat); if (excuse) croak("Event: can't start '%s' %s", SvPV(ev->desc,n_a), excuse); WaACTIVE_on(ev); /* must happen nowhere else!! */ ++ActiveWatchers; } static void pe_watcher_stop(pe_watcher *ev, int cancel_events) { STRLEN n_a; if (!WaACTIVE(ev)) return; if (WaDEBUGx(ev) >= 4) warn("Event: active OFF '%s'\n", SvPV(ev->desc,n_a)); pe_watcher_off(ev); WaACTIVE_off(ev); /* must happen nowhere else!! */ if (cancel_events) pe_watcher_cancel_events(ev); --ActiveWatchers; } Event-1.21/c/idle.c0000644000175000017500000000675111013441643013373 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_idle_vtbl; static pe_ring Idle; /*#define D_IDLE(x) x /**/ #define D_IDLE(x) /**/ static pe_watcher *pe_idle_allocate(HV *stash, SV *temple) { pe_idle *ev; EvNew(3, ev, 1, pe_idle); ev->base.vtbl = &pe_idle_vtbl; pe_watcher_init(&ev->base, stash, temple); PE_RING_INIT(&ev->tm.ring, ev); PE_RING_INIT(&ev->iring, ev); ev->max_interval = &PL_sv_undef; ev->min_interval = newSVnv(.01); return (pe_watcher*) ev; } static void pe_idle_dtor(pe_watcher *ev) { pe_idle *ip = (pe_idle*) ev; SvREFCNT_dec(ip->max_interval); SvREFCNT_dec(ip->min_interval); pe_watcher_dtor(ev); EvFree(3, ev); } static char *pe_idle_start(pe_watcher *ev, int repeating) { NV now; NV min,max; pe_idle *ip = (pe_idle*) ev; if (!ev->callback) return "without callback"; if (!repeating) ev->cbtime = NVtime(); now = WaHARD(ev)? ev->cbtime : NVtime(); if (sv_2interval("min", ip->min_interval, &min)) { ip->tm.at = min + now; pe_timeable_start(&ip->tm); D_IDLE(warn("min %.2f setup '%s'\n", min, SvPV(ev->desc,na))); } else { PE_RING_UNSHIFT(&ip->iring, &Idle); D_IDLE(warn("idle '%s'\n", SvPV(ev->desc,na))); if (sv_2interval("max", ip->max_interval, &max)) { D_IDLE(warn("max %.2f setup '%s'\n", max, SvPV(ev->desc,na))); ip->tm.at = max + now; pe_timeable_start(&ip->tm); } } return 0; } static void pe_idle_alarm(pe_watcher *wa, pe_timeable *_ignore) { NV now = NVtime(); NV min,max,left; pe_idle *ip = (pe_idle*) wa; pe_timeable_stop(&ip->tm); if (sv_2interval("min", ip->min_interval, &min)) { left = wa->cbtime + min - now; if (left > IntervalEpsilon) { ++TimeoutTooEarly; ip->tm.at = now + left; pe_timeable_start(&ip->tm); D_IDLE(warn("min %.2f '%s'\n", left, SvPV(wa->desc,na))); return; } } if (PE_RING_EMPTY(&ip->iring)) { PE_RING_UNSHIFT(&ip->iring, &Idle); D_IDLE(warn("idle '%s'\n", SvPV(wa->desc,na))); } if (sv_2interval("max", ip->max_interval, &max)) { left = wa->cbtime + max - now; if (left < IntervalEpsilon) { pe_event *ev; D_IDLE(warn("max '%s'\n", SvPV(wa->desc,na))); PE_RING_DETACH(&ip->iring); ev = (*wa->vtbl->new_event)(wa); ++ev->hits; queueEvent(ev); return; } else { ++TimeoutTooEarly; ip->tm.at = now + left; D_IDLE(warn("max %.2f '%s'\n", left, SvPV(wa->desc,na))); pe_timeable_start(&ip->tm); } } } static void pe_idle_stop(pe_watcher *ev) { pe_idle *ip = (pe_idle*) ev; PE_RING_DETACH(&ip->iring); pe_timeable_stop(&ip->tm); } WKEYMETH(_idle_max_interval) { pe_idle *ip = (pe_idle*) ev; if (nval) { SV *old = ip->max_interval; ip->max_interval = SvREFCNT_inc(nval); if (old) SvREFCNT_dec(old); VERIFYINTERVAL("max", ip->max_interval); } { dSP; XPUSHs(ip->max_interval); PUTBACK; } } WKEYMETH(_idle_min_interval) { pe_idle *ip = (pe_idle*) ev; if (nval) { SV *old = ip->min_interval; ip->min_interval = SvREFCNT_inc(nval); if (old) SvREFCNT_dec(old); VERIFYINTERVAL("min", ip->min_interval); } { dSP; XPUSHs(ip->min_interval); PUTBACK; } } static void boot_idle() { pe_watcher_vtbl *vt = &pe_idle_vtbl; PE_RING_INIT(&Idle, 0); memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_idle_dtor; vt->start = pe_idle_start; vt->stop = pe_idle_stop; vt->alarm = pe_idle_alarm; pe_register_vtbl(vt, gv_stashpv("Event::idle",1), &event_vtbl); } Event-1.21/c/group.c0000644000175000017500000000724411013441643013610 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_group_vtbl; static pe_watcher *pe_group_allocate(HV *stash, SV *temple) { pe_group *ev; EvNew(12, ev, 1, pe_group); ev->base.vtbl = &pe_group_vtbl; PE_RING_INIT(&ev->tm.ring, ev); ev->tm.at = 0; ev->timeout = &PL_sv_undef; ev->members = 3; EvNew(13, ev->member, ev->members, pe_watcher*); Zero(ev->member, ev->members, pe_watcher*); pe_watcher_init(&ev->base, stash, temple); WaREPEAT_on(ev); return (pe_watcher*) ev; } static void pe_group_dtor(pe_watcher *ev) { int xx; pe_group *gp = (pe_group*) ev; SvREFCNT_dec(gp->timeout); for (xx=0; xx < gp->members; xx++) { pe_watcher *mb = gp->member[xx]; if (mb) --mb->refcnt; } EvFree(13, gp->member); pe_watcher_dtor(ev); EvFree(12, ev); } static char *pe_group_start(pe_watcher *ev, int repeat) { pe_group *gp = (pe_group*) ev; NV timeout; if (!ev->callback) return "without callback"; if (!sv_2interval("group", gp->timeout, &timeout)) return "repeating group has no timeout"; gp->since = WaHARD(ev)? gp->tm.at : NVtime(); gp->tm.at = timeout + gp->since; pe_timeable_start(&gp->tm); return 0; } static void pe_group_stop(pe_watcher *ev) { pe_timeable_stop(&((pe_group*)ev)->tm); } static void pe_group_alarm(pe_watcher *wa, pe_timeable *tm) { STRLEN n_a; pe_group *gp = (pe_group*) wa; NV timeout; NV remaining; NV now = NVtime(); int xx; for (xx=0; xx < gp->members; xx++) { pe_watcher *mb = gp->member[xx]; if (!mb) continue; if (gp->since < mb->cbtime) { gp->since = mb->cbtime; } } if (!sv_2interval("group", gp->timeout, &timeout)) croak("Event: can't extract timeout"); /* impossible */ remaining = gp->since + timeout - now; if (remaining > IntervalEpsilon) { gp->tm.at = now + remaining; pe_timeable_start(&gp->tm); } else { pe_event *ev = (*wa->vtbl->new_event)(wa); ++ev->hits; queueEvent(ev); } } /* publish C API XXX */ static void pe_group_add(pe_group *gp, pe_watcher *wa) { int ok=0; int xx; if (gp == (pe_group*) wa) { STRLEN n_a; croak("Event: can't add group '%s' to itself", SvPV(gp->base.desc, n_a)); } ++wa->refcnt; for (xx=0; xx < gp->members; xx++) { if (!gp->member[xx]) { gp->member[xx] = wa; ok=1; break; } } if (!ok) { /* expand array */ pe_watcher **ary; EvNew(13, ary, gp->members*2, pe_watcher*); Zero(ary, gp->members*2, pe_watcher*); Copy(gp->member, ary, gp->members, sizeof(pe_watcher*)); EvFree(13, gp->member); gp->member = ary; gp->member[gp->members] = wa; gp->members *= 2; } } static void pe_group_del(pe_group *gp, pe_watcher *target) { int xx; for (xx=0; xx < gp->members; xx++) { if (gp->member[xx] != target) continue; --target->refcnt; gp->member[xx] = 0; break; } } WKEYMETH(_group_timeout) { pe_group *gp = (pe_group*)ev; if (nval) { SV *old = gp->timeout; gp->timeout = SvREFCNT_inc(nval); SvREFCNT_dec(old); VERIFYINTERVAL("group", gp->timeout); /* recalc expiration XXX */ } { dSP; XPUSHs(gp->timeout); PUTBACK; } } WKEYMETH(_group_add) { pe_group *gp = (pe_group*)ev; if (!nval) return; pe_group_add(gp, sv_2watcher(nval)); } WKEYMETH(_group_del) { pe_group *gp = (pe_group*)ev; if (!nval) return; pe_group_del(gp, sv_2watcher(nval)); } static void boot_group() { pe_watcher_vtbl *vt = &pe_group_vtbl; memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_group_dtor; vt->start = pe_group_start; vt->stop = pe_group_stop; vt->alarm = pe_group_alarm; pe_register_vtbl(vt, gv_stashpv("Event::group",1), &event_vtbl); } Event-1.21/c/io.c0000644000175000017500000001253312062657015013067 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_io_vtbl; static pe_ring IOWatch; static int IOWatchCount; static int IOWatch_OK; static void pe_sys_io_add (pe_io *ev); static void pe_sys_io_del (pe_io *ev); static pe_watcher *pe_io_allocate(HV *stash, SV *temple) { pe_io *ev; EvNew(4, ev, 1, pe_io); ev->base.vtbl = &pe_io_vtbl; pe_watcher_init(&ev->base, stash, temple); PE_RING_INIT(&ev->tm.ring, ev); PE_RING_INIT(&ev->ioring, ev); ev->fd = -1; ev->timeout = 0; ev->handle = &PL_sv_undef; ev->poll = PE_R; ev->tm_callback = 0; ev->tm_ext_data = 0; WaINVOKE1_off(ev); WaREPEAT_on(ev); return (pe_watcher*) ev; } static void pe_io_dtor(pe_watcher *_ev) { pe_io *ev = (pe_io*) _ev; if (WaTMPERLCB(ev)) SvREFCNT_dec(ev->tm_callback); PE_RING_DETACH(&ev->ioring); SvREFCNT_dec(ev->handle); pe_watcher_dtor(_ev); EvFree(4, _ev); } static char *pe_io_start(pe_watcher *_ev, int repeat) { STRLEN n_a; int ok=0; pe_io *ev = (pe_io*) _ev; if (SvOK(ev->handle)) ev->fd = pe_sys_fileno(ev->handle, SvPV(ev->base.desc, n_a)); /* On Unix, it is possible to set the 'fd' in C code without assigning anything to the 'handle'. This should be more officially supported but maybe it is too unix specific. */ if (ev->fd >= 0 && (ev->poll & ~PE_T)) { if (!ev->base.callback) return "without io callback"; PE_RING_UNSHIFT(&ev->ioring, &IOWatch); pe_sys_io_add(ev); ++IOWatchCount; IOWatch_OK = 0; ++ok; } if (ev->timeout) { if (!ev->base.callback && !ev->tm_callback) { assert(!ok); return "without timeout callback"; } ev->poll |= PE_T; ev->tm.at = NVtime() + ev->timeout; /* too early okay */ pe_timeable_start(&ev->tm); ++ok; } else { ev->poll &= ~PE_T; } return ok? 0 : "because there is nothing to watch"; } static void pe_io_stop(pe_watcher *_ev) { pe_io *ev = (pe_io*) _ev; pe_timeable_stop(&ev->tm); if (!PE_RING_EMPTY(&ev->ioring)) { pe_sys_io_del(ev); PE_RING_DETACH(&ev->ioring); --IOWatchCount; IOWatch_OK = 0; } } static void pe_io_alarm(pe_watcher *_wa, pe_timeable *hit) { pe_io *wa = (pe_io*) _wa; NV now = NVtime(); NV left = (_wa->cbtime + wa->timeout) - now; if (left < IntervalEpsilon) { pe_ioevent *ev; if (WaREPEAT(wa)) { wa->tm.at = now + wa->timeout; pe_timeable_start(&wa->tm); } else { wa->timeout = 0; /*RESET*/ } ev = (pe_ioevent*) (*_wa->vtbl->new_event)(_wa); ++ev->base.hits; ev->got |= PE_T; if (wa->tm_callback) { if (WaTMPERLCB(wa)) { pe_anyevent_set_perl_cb(&ev->base, wa->tm_callback); } else { pe_anyevent_set_cb(&ev->base, wa->tm_callback, wa->tm_ext_data); } } queueEvent((pe_event*) ev); } else { /* ++TimeoutTooEarly; This branch is normal behavior and does not indicate poor clock accuracy. */ wa->tm.at = now + left; pe_timeable_start(&wa->tm); } } static void _io_restart(pe_watcher *ev) { if (!WaPOLLING(ev)) return; pe_watcher_off(ev); pe_watcher_on(ev, 0); } static void pe_io_reset_handle(pe_watcher *ev) { /* used by unix_io */ pe_io *io = (pe_io*)ev; SvREFCNT_dec(io->handle); io->handle = &PL_sv_undef; io->fd = -1; _io_restart(ev); } WKEYMETH(_io_poll) { pe_io *io = (pe_io*)ev; if (nval) { int nev = sv_2events_mask(nval, PE_R|PE_W|PE_E|PE_T); if (io->timeout) nev |= PE_T; else nev &= ~PE_T; if (io->poll != nev) { io->poll = nev; _io_restart(ev); } } { dSP; XPUSHs(sv_2mortal(events_mask_2sv(io->poll))); PUTBACK; } } WKEYMETH(_io_handle) { pe_io *io = (pe_io*)ev; if (nval) { SV *old = io->handle; io->handle = SvREFCNT_inc(nval); SvREFCNT_dec(old); io->fd = -1; _io_restart(ev); } { dSP; XPUSHs(io->handle); PUTBACK; } } WKEYMETH(_io_timeout) { pe_io *io = (pe_io*)ev; if (nval) { io->timeout = SvOK(nval)? SvNV(nval) : 0; /*undef is ok*/ _io_restart(ev); } { dSP; XPUSHs(sv_2mortal(newSVnv(io->timeout))); PUTBACK; } } WKEYMETH(_io_timeout_cb) { pe_io *io = (pe_io*)ev; if (nval) { AV *av; SV *sv; SV *old=0; if (WaTMPERLCB(ev)) old = (SV*) io->tm_callback; if (!SvOK(nval)) { WaTMPERLCB_off(ev); io->tm_callback = 0; io->tm_ext_data = 0; } else if (SvROK(nval) && (SvTYPE(sv=SvRV(nval)) == SVt_PVCV)) { WaTMPERLCB_on(ev); io->tm_callback = SvREFCNT_inc(nval); } else if (SvROK(nval) && (SvTYPE(av=(AV*)SvRV(nval)) == SVt_PVAV) && av_len(av) == 1 && !SvROK(sv=*av_fetch(av, 1, 0))) { WaTMPERLCB_on(ev); io->tm_callback = SvREFCNT_inc(nval); } else { if (SvIV(DebugLevel) >= 2) sv_dump(sv); croak("Callback must be a code ref or [$object, $method_name]"); } if (old) SvREFCNT_dec(old); } { SV *ret = (WaTMPERLCB(ev)? (SV*) io->tm_callback : (io->tm_callback? sv_2mortal(newSVpvf("", io->tm_callback, io->tm_ext_data)) : &PL_sv_undef)); dSP; XPUSHs(ret); PUTBACK; } } static void boot_io() { pe_watcher_vtbl *vt = &pe_io_vtbl; memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_io_dtor; vt->start = pe_io_start; vt->stop = pe_io_stop; vt->alarm = pe_io_alarm; PE_RING_INIT(&IOWatch, 0); IOWatch_OK = 0; IOWatchCount = 0; pe_register_vtbl(vt, gv_stashpv("Event::io",1), &ioevent_vtbl); } Event-1.21/c/tied.c0000644000175000017500000000500310624507753013404 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_tied_vtbl; static pe_watcher *pe_tied_allocate(HV *stash, SV *temple) { pe_tied *ev; EvNew(6, ev, 1, pe_tied); ev->base.vtbl = &pe_tied_vtbl; if (!stash) croak("tied_allocate(0)"); pe_watcher_init(&ev->base, stash, temple); PE_RING_INIT(&ev->tm.ring, ev); return (pe_watcher*) ev; } static void pe_tied_dtor(pe_watcher *ev) { pe_watcher_dtor(ev); EvFree(6, ev); } static char *pe_tied_start(pe_watcher *ev, int repeat) { HV *stash = SvSTASH(SvRV(ev->mysv)); GV *gv; dSP; assert(stash); PUSHMARK(SP); XPUSHs(watcher_2sv(ev)); XPUSHs(boolSV(repeat)); PUTBACK; gv = gv_fetchmethod(stash, "_start"); if (!gv) croak("Cannot find %s->_start()", HvNAME(stash)); perl_call_sv((SV*)GvCV(gv), G_DISCARD); /* allow return of error! XXX */ return 0; } static void pe_tied_stop(pe_watcher *ev) { HV *stash = SvSTASH(SvRV(ev->mysv)); GV *gv = gv_fetchmethod(stash, "_stop"); pe_timeable_stop(&((pe_tied*)ev)->tm); if (gv) { dSP; PUSHMARK(SP); XPUSHs(watcher_2sv(ev)); PUTBACK; perl_call_sv((SV*)GvCV(gv), G_DISCARD); } } static void pe_tied_alarm(pe_watcher *ev, pe_timeable *_ign) { HV *stash = SvSTASH(SvRV(ev->mysv)); GV *gv; dSP; PUSHMARK(SP); XPUSHs(watcher_2sv(ev)); PUTBACK; gv = gv_fetchmethod(stash, "_alarm"); if (!gv) croak("Cannot find %s->_alarm()", HvNAME(stash)); perl_call_sv((SV*)GvCV(gv), G_DISCARD); } WKEYMETH(_tied_at) { pe_tied *tp = (pe_tied*) ev; if (nval) { pe_timeable_stop(&tp->tm); if (SvOK(nval)) { tp->tm.at = SvNV(nval); pe_timeable_start(&tp->tm); } } { dSP; XPUSHs(sv_2mortal(newSVnv(tp->tm.at))); PUTBACK; } } WKEYMETH(_tied_flags) { if (nval) { IV nflags = SvIV(nval); IV flip = nflags ^ ev->flags; IV other = flip & ~(PE_INVOKE1); if (flip & PE_INVOKE1) { if (nflags & PE_INVOKE1) WaINVOKE1_on(ev); else WaINVOKE1_off(ev); } if (other) warn("Other flags (0x%x) cannot be changed", other); } { dSP; XPUSHs(sv_2mortal(newSViv(ev->flags & PE_VISIBLE_FLAGS))); PUTBACK; } } static void boot_tied() { pe_watcher_vtbl *vt = &pe_tied_vtbl; memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->did_require = 1; /* otherwise tries to autoload Event::Event! */ vt->dtor = pe_tied_dtor; vt->start = pe_tied_start; vt->stop = pe_tied_stop; vt->alarm = pe_tied_alarm; pe_register_vtbl(vt, gv_stashpv("Event::Watcher::Tied",1), &event_vtbl); } Event-1.21/c/queue.c0000644000175000017500000001360711013441643013600 0ustar joshuajoshuastatic pe_ring NQueue; static int StarvePrio = PE_QUEUES - 2; static void boot_queue() { HV *stash = gv_stashpv("Event", 1); PE_RING_INIT(&NQueue, 0); newCONSTSUB(stash, "QUEUES", newSViv(PE_QUEUES)); newCONSTSUB(stash, "PRIO_NORMAL", newSViv(PE_PRIO_NORMAL)); newCONSTSUB(stash, "PRIO_HIGH", newSViv(PE_PRIO_HIGH)); } /*inline*/ static void dequeEvent(pe_event *ev) { assert(ev); PE_RING_DETACH(&ev->que); --ActiveWatchers; } static void db_show_queue() { pe_event *ev; ev = (pe_event*) NQueue.next->self; while (ev) { warn("0x%x : %d\n", ev, ev->prio); ev = (pe_event*) ev->que.next->self; } } static int prepare_event(pe_event *ev, char *forwhat) { /* AVOID DIEING IN HERE!! */ STRLEN n_a; pe_watcher *wa = ev->up; if (!ev->callback) { if (WaPERLCB(wa)) { ev->callback = SvREFCNT_inc(wa->callback); EvPERLCB_on(ev); } else { ev->callback = wa->callback; ev->ext_data = wa->ext_data; EvPERLCB_off(ev); } assert(ev->callback); } assert(!WaSUSPEND(wa)); assert(WaREENTRANT(wa) || !wa->running); if (!WaACTIVE(wa)) { if (!WaRUNNOW(wa)) warn("Event: event for !ACTIVE watcher '%s'", SvPV(wa->desc,n_a)); } else { if (!WaREPEAT(wa)) pe_watcher_stop(wa, 0); else if (WaINVOKE1(wa)) pe_watcher_off(wa); } WaRUNNOW_off(wa); /* race condition? XXX */ if (WaDEBUGx(wa) >= 3) warn("Event: %s '%s' prio=%d\n", forwhat, SvPV(wa->desc,n_a), ev->prio); return 1; } static void queueEvent(pe_event *ev) { /**INVOKE**/ assert(ev->hits); if (!PE_RING_EMPTY(&ev->que)) return; /* clump'd event already queued */ if (!prepare_event(ev, "queue")) return; if (ev->prio < 0) { /* invoke the event immediately! */ ev->prio = 0; pe_event_invoke(ev); return; } if (ev->prio >= PE_QUEUES) ev->prio = PE_QUEUES-1; { /* queue in reverse direction? XXX */ /* warn("-- adding 0x%x/%d\n", ev, prio); db_show_queue();/**/ pe_ring *rg; rg = NQueue.next; while (rg->self && ((pe_event*)rg->self)->prio <= ev->prio) rg = rg->next; PE_RING_ADD_BEFORE(&ev->que, rg); /* warn("=\n"); db_show_queue();/**/ ++ActiveWatchers; } } static int pe_empty_queue(int maxprio) { /**INVOKE**/ pe_event *ev; ev = (pe_event*) NQueue.next->self; if (ev && ev->prio < maxprio) { dequeEvent(ev); pe_event_invoke(ev); return 1; } return 0; } /*inline*/ static void pe_multiplex(NV tm) { if (SvIVX(DebugLevel) >= 2) { warn("Event: multiplex %.4fs %s%s\n", tm, PE_RING_EMPTY(&NQueue)?"":"QUEUE", PE_RING_EMPTY(&Idle)?"":"IDLE"); } if (!Estat.on) pe_sys_multiplex(tm); else { void *st = Estat.enter(-1, 0); pe_sys_multiplex(tm); Estat.commit(st, 0); } } static NV pe_map_prepare(NV tm) { pe_qcallback *qcb = (pe_qcallback*) Prepare.prev->self; while (qcb) { if (qcb->is_perl) { SV *got; NV when; dSP; PUSHMARK(SP); PUTBACK; perl_call_sv((SV*)qcb->callback, G_SCALAR); SPAGAIN; got = POPs; PUTBACK; when = SvNOK(got) ? SvNVX(got) : SvNV(got); if (when < tm) tm = when; } else { /* !is_perl */ NV got = (* (NV(*)(void*)) qcb->callback)(qcb->ext_data); if (got < tm) tm = got; } qcb = (pe_qcallback*) qcb->ring.prev->self; } return tm; } static void pe_queue_pending() { NV tm = 0; if (!PE_RING_EMPTY(&Prepare)) tm = pe_map_prepare(tm); pe_multiplex(0); pe_timeables_check(); if (!PE_RING_EMPTY(&Check)) pe_map_check(&Check); pe_signal_asynccheck(); if (!PE_RING_EMPTY(&AsyncCheck)) pe_map_check(&AsyncCheck); } static int one_event(NV tm) { /**INVOKE**/ /*if (SvIVX(DebugLevel) >= 4) warn("Event: ActiveWatchers=%d\n", ActiveWatchers); /**/ pe_signal_asynccheck(); if (!PE_RING_EMPTY(&AsyncCheck)) pe_map_check(&AsyncCheck); if (pe_empty_queue(StarvePrio)) return 1; if (!PE_RING_EMPTY(&NQueue) || !PE_RING_EMPTY(&Idle)) { tm = 0; } else { NV t1 = timeTillTimer(); if (t1 < tm) tm = t1; } if (!PE_RING_EMPTY(&Prepare)) tm = pe_map_prepare(tm); pe_multiplex(tm); pe_timeables_check(); if (!PE_RING_EMPTY(&Check)) pe_map_check(&Check); if (tm) { pe_signal_asynccheck(); if (!PE_RING_EMPTY(&AsyncCheck)) pe_map_check(&AsyncCheck); } if (pe_empty_queue(PE_QUEUES)) return 1; while (1) { pe_watcher *wa; pe_event *ev; pe_ring *lk; if (PE_RING_EMPTY(&Idle)) return 0; lk = Idle.prev; PE_RING_DETACH(lk); wa = (pe_watcher*) lk->self; /* idle is not an event so CLUMP is never an option but we still need to create an event to pass info to the callback */ ev = pe_event_allocate(wa); if (!prepare_event(ev, "idle")) continue; /* can't queueEvent because we are already missed that */ pe_event_invoke(ev); return 1; } } static void pe_reentry() { pe_watcher *wa; struct pe_cbframe *frp; ENTER; /* for SAVE*() macro (see below) */ if (CurCBFrame < 0) return; frp = CBFrame + CurCBFrame; wa = frp->ev->up; assert(wa->running == frp->run_id); if (Estat.on) Estat.suspend(frp->stats); /* reversed by pe_event_postCB? */ if (WaREPEAT(wa)) { if (WaREENTRANT(wa)) { if (WaACTIVE(wa) && WaINVOKE1(wa)) pe_watcher_on(wa, 1); } else { if (!WaSUSPEND(wa)) { /* temporarily suspend non-reentrant watcher until callback is finished! */ pe_watcher_suspend(wa); SAVEDESTRUCTOR(_resume_watcher, wa); } } } } static int safe_one_event(NV maxtm) { int got; pe_check_recovery(); pe_reentry(); got = one_event(maxtm); LEAVE; /* reentry */ return got; } static void pe_unloop(SV *why) { SV *rsv = perl_get_sv("Event::Result", 0); assert(rsv); sv_setsv(rsv, why); if (--ExitLevel < 0) { warn("Event::unloop() to %d", ExitLevel); } } static void pe_unloop_all(SV *why) { SV *rsv = perl_get_sv("Event::TopResult", 0); assert(rsv); sv_setsv(rsv, why); ExitLevel = 0; } Event-1.21/c/signal.c0000644000175000017500000001013010624507753013731 0ustar joshuajoshua#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) // Fix signal macro compatibility with signal.h of MS VC++: #ifdef WIN32 #define signal win32_signal #endif #include // Get back Perl marcro value defined ad XSUB.h: #ifdef WIN32 #define signal PerlProc_signal #endif #endif static struct pe_watcher_vtbl pe_signal_vtbl; /* GLOBALS: Sigvalid Sigring Sigstat Sigslot */ static U32 Sigvalid[1+NSIG/32]; /*assume 32bit; doesn't matter*/ #define PE_SIGVALID(sig) (Sigvalid[sig>>5] & (1 << ((sig) & 0x1f))) #define PE_SIGVALID_off(sig) Sigvalid[sig>>5] &= ~(1 << ((sig) & 0x1f)) struct pe_sig_stat { U32 Hits; U16 hits[NSIG]; }; typedef struct pe_sig_stat pe_sig_stat; static int Sigslot; static pe_sig_stat Sigstat[2]; static pe_ring Sigring[NSIG]; /* /GLOBALS */ static Signal_t process_sighandler(int sig) { pe_sig_stat *st = &Sigstat[Sigslot]; ++st->Hits; ++st->hits[sig]; } static pe_watcher *pe_signal_allocate(HV *stash, SV *temple) { pe_signal *ev; EvNew(5, ev, 1, pe_signal); ev->base.vtbl = &pe_signal_vtbl; PE_RING_INIT(&ev->sring, ev); ev->signal = 0; pe_watcher_init(&ev->base, stash, temple); WaREPEAT_on(ev); WaINVOKE1_off(ev); return (pe_watcher*) ev; } static void pe_signal_dtor(pe_watcher *ev) { pe_watcher_dtor(ev); EvFree(5, ev); } static char *pe_signal_start(pe_watcher *_ev, int repeat) { pe_signal *ev = (pe_signal*) _ev; int sig = ev->signal; if (!_ev->callback) return "without callback"; if (sig == 0) return "without signal"; if (PE_RING_EMPTY(&Sigring[sig])) rsignal(sig, (Sighandler_t)process_sighandler); PE_RING_UNSHIFT(&ev->sring, &Sigring[sig]); return 0; } static void pe_signal_stop(pe_watcher *_ev) { pe_signal *ev = (pe_signal*) _ev; int sig = ev->signal; PE_RING_DETACH(&ev->sring); if (PE_RING_EMPTY(&Sigring[sig])) { rsignal(sig, (Sighandler_t)SIG_DFL); Sigstat[0].hits[sig] = 0; Sigstat[1].hits[sig] = 0; } } WKEYMETH(_signal_signal) { pe_signal *sg = (pe_signal*) ev; if (nval) { STRLEN n_a; int active = WaPOLLING(ev); int sig = whichsig(SvPV(nval, n_a)); /*warn("whichsig(%s) = %d", SvPV(nval,na), sig); /**/ if (sig == 0) croak("Unrecognized signal '%s'", SvPV(nval, n_a)); if (!PE_SIGVALID(sig)) croak("Signal '%s' cannot be caught", SvPV(nval, n_a)); if (active) pe_watcher_off(ev); sg->signal = sig; if (active) pe_watcher_on(ev, 0); } { dSP; XPUSHs(sg->signal > 0? sv_2mortal(newSVpv(PL_sig_name[sg->signal],0)) : &PL_sv_undef); PUTBACK; } } static void _signal_asynccheck(pe_sig_stat *st) { int xx, got; pe_watcher *wa; for (xx = 1; xx < NSIG; xx++) { if (!st->hits[xx]) continue; got = st->hits[xx]; wa = (pe_watcher*) Sigring[xx].next->self; while (wa) { pe_event *ev = (*wa->vtbl->new_event)(wa); ev->hits += got; queueEvent(ev); wa = (pe_watcher*) ((pe_signal*)wa)->sring.next->self; } st->hits[xx] = 0; } Zero(st, 1, struct pe_sig_stat); } /* This implementation gives no race conditions, assuming no kernel-level threads. */ static void pe_signal_asynccheck() { pe_sig_stat *st; Sigslot = 1; st = &Sigstat[0]; if (st->Hits) _signal_asynccheck(st); Sigslot = 0; st = &Sigstat[1]; if (st->Hits) _signal_asynccheck(st); } static void boot_signal() { int xx; int sig; char **sigp; /* it is crufty to hardcode this list */ static char *nohandle[] = { "KILL", "STOP", "ZERO", 0 }; pe_watcher_vtbl *vt = &pe_signal_vtbl; Zero(&Sigstat[0], 1, pe_sig_stat); Zero(&Sigstat[1], 1, pe_sig_stat); Sigslot = 0; for (xx=0; xx < NSIG; xx++) { PE_RING_INIT(&Sigring[xx], 0); } memset(Sigvalid, ~0, sizeof(Sigvalid)); PE_SIGVALID_off(0); sigp = nohandle; while (*sigp) { sig = whichsig(*sigp); if (sig) PE_SIGVALID_off(sig); ++sigp; } memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_signal_dtor; vt->start = pe_signal_start; vt->stop = pe_signal_stop; pe_register_vtbl(vt, gv_stashpv("Event::signal",1), &event_vtbl); } Event-1.21/c/typemap.c0000644000175000017500000001171612062655377014152 0ustar joshuajoshuastatic SV *wrap_thing(U16 mgcode, void *ptr, HV *stash, SV *temple) { SV *ref; MAGIC **mgp; MAGIC *mg; assert(ptr); assert(stash); if (!temple) temple = (SV*)newHV(); else SvREFCNT_inc(temple); if (SvOBJECT(temple)) croak("Can't attach to blessed reference"); assert(!SvROK(temple)); assert(mg_find(temple, '~') == 0); /* multiplicity disallowed! */ ref = newRV_noinc(temple); sv_bless(ref, stash); mgp = &SvMAGIC(temple); while ((mg = *mgp)) mgp = &mg->mg_moremagic; New(0, mg, 1, MAGIC); Zero(mg, 1, MAGIC); mg->mg_type = '~'; mg->mg_ptr = (char*) ptr; /* NOT refcnt'd */ mg->mg_private = mgcode; *mgp = mg; return ref; } static void* sv_2thing(U16 mgcode, SV *sv) { MAGIC *mg; SV *origsv = sv; if (!sv || !SvROK(sv)) croak("sv_2thing: not a reference?"); sv = SvRV(sv); if (SvTYPE(sv) < SVt_PVMG) croak("sv_2thing: not a thing"); if (!SvOBJECT(sv)) croak("sv_2thing: not an object"); mg = mg_find(sv, '~'); if (mg) { if (mg->mg_private != mgcode) { croak("Can't find event magic (SV=0x%x)", sv); } return (void*) mg->mg_ptr; } croak("sv_2thing: can't decode SV=0x%x", origsv); return 0; } #define MG_WATCHER_CODE ((((unsigned)'e')<<8) + (unsigned)'v') static SV *wrap_watcher(void *ptr, HV *stash, SV *temple) { return wrap_thing(MG_WATCHER_CODE, ptr, stash, temple); } SV *watcher_2sv(pe_watcher *wa) { /**SLOW IS OKAY**/ assert(!WaDESTROYED(wa)); if (!wa->mysv) { wa->mysv = wrap_watcher(wa, wa->vtbl->stash, 0); if (WaDEBUGx(wa) >= 4) { STRLEN n_a; warn("Watcher=0x%x '%s' wrapped with SV=0x%x", wa, SvPV(wa->desc, n_a), SvRV(wa->mysv)); } } return SvREFCNT_inc(sv_2mortal(wa->mysv)); } void* sv_2watcher(SV *sv) { return sv_2thing(MG_WATCHER_CODE, sv); } #define MG_GENERICSRC_CODE 2422 /* randomly chosen */ static SV *wrap_genericsrc(void *ptr, HV *stash, SV *temple) { return wrap_thing(MG_GENERICSRC_CODE, ptr, stash, temple); } static HV *pe_genericsrc_stash; static SV *genericsrc_2sv(pe_genericsrc *src) { /**SLOW IS OKAY**/ if (!src->mysv) { src->mysv = wrap_genericsrc(src, pe_genericsrc_stash, 0); } return SvREFCNT_inc(sv_2mortal(src->mysv)); } static void* sv_2genericsrc(SV *sv) { return sv_2thing(MG_GENERICSRC_CODE, sv); } /* Events have a short lifetime. mysv is kept alive until the event has been serviced. Once perl finally releases mysv then the event is deallocated (or, more likely, recycled). */ SV *event_2sv(pe_event *ev) { /**MAKE FAST**/ if (!ev->mysv) { SV *rv = newSV(0); SV *sv = newSVrv(rv,0); sv_bless(rv, ev->vtbl->stash); sv_setiv(sv, PTR2IV(ev)); ev->mysv = rv; if (WaDEBUGx(ev->up) >= 4) { STRLEN n_a; warn("Event=0x%x '%s' wrapped with SV=0x%x", ev, SvPV(ev->up->desc, n_a), SvRV(ev->mysv)); } } return SvREFCNT_inc(sv_2mortal(ev->mysv)); } void *sv_2event(SV *sv) { void *ptr; assert(sv); assert(SvROK(sv)); sv = SvRV(sv); ptr = INT2PTR(void *, SvIV(sv)); assert(ptr); return ptr; } /***************************************************************/ #define VERIFYINTERVAL(name, f) \ STMT_START { NV ign; sv_2interval(name, f, &ign); } STMT_END int sv_2interval(char *label, SV *in, NV *out) { SV *sv = in; if (!sv) return 0; if (SvGMAGICAL(sv)) mg_get(sv); if (!SvOK(sv)) return 0; if (SvROK(sv)) sv = SvRV(sv); if (!SvOK(sv)) { warn("Event: %s interval undef", label); *out = 0; } else if (SvNOK(sv)) { *out = SvNVX(sv); } else if (SvIOK(sv)) { *out = SvIVX(sv); } else if (looks_like_number(sv)) { *out = SvNV(sv); } else { sv_dump(in); croak("Event: %s interval must be a number or reference to a number", label); return 0; } if (*out < 0) { warn("Event: %s has negative timeout %.2f (clipped to zero)", label, *out); *out = 0; } return 1; } SV* events_mask_2sv(int mask) { SV *ret = newSV(0); (void)SvUPGRADE(ret, SVt_PVIV); sv_setpvn(ret, "", 0); if (mask & PE_R) sv_catpv(ret, "r"); if (mask & PE_W) sv_catpv(ret, "w"); if (mask & PE_E) sv_catpv(ret, "e"); if (mask & PE_T) sv_catpv(ret, "t"); SvIVX(ret) = mask; SvIOK_on(ret); return ret; } int sv_2events_mask(SV *sv, int bits) { if (SvPOK(sv)) { UV got=0; int xx; STRLEN el; char *ep = SvPV(sv,el); for (xx=0; xx < el; xx++) { switch (ep[xx]) { case 'r': if (bits & PE_R) { got |= PE_R; continue; } case 'w': if (bits & PE_W) { got |= PE_W; continue; } case 'e': if (bits & PE_E) { got |= PE_E; continue; } case 't': if (bits & PE_T) { got |= PE_T; continue; } } warn("Ignored '%c' in poll mask", ep[xx]); } return got; } else if (SvIOK(sv)) { UV extra = SvIVX(sv) & ~bits; if (extra) warn("Ignored extra bits (0x%x) in poll mask", extra); return SvIVX(sv) & bits; } else { sv_dump(sv); croak("Must be a string /[rwet]/ or bit mask"); return 0; /* NOTREACHED */ } } Event-1.21/c/timeable.c0000644000175000017500000000527411013441643014237 0ustar joshuajoshuastatic pe_timeable Timeables; /*#define D_TIMEABLE(x) x /**/ #define D_TIMEABLE(x) /**/ static void db_show_timeables() { pe_timeable *tm = (pe_timeable*) Timeables.ring.next; warn("timeables at %.2f\n", NVtime() + IntervalEpsilon); while (tm->ring.self) { STRLEN n_a; pe_watcher *wa = (pe_watcher*) tm->ring.self; pe_timeable *next = (pe_timeable*) tm->ring.next; warn(" %.2f '%s'\n", tm->at, SvPV(wa->desc, n_a)); tm = next; } } static void pe_timeables_check() { pe_timeable *tm = (pe_timeable*) Timeables.ring.next; NV now = NVtime() + IntervalEpsilon; /*db_show_timeables();/**/ while (tm->ring.self && now >= tm->at) { pe_watcher *ev = (pe_watcher*) tm->ring.self; pe_timeable *next = (pe_timeable*) tm->ring.next; D_TIMEABLE({ if (WaDEBUGx(ev) >= 4) { STRLEN n_a; warn("Event: timeable expire '%s'\n", SvPV(ev->desc, n_a)); } }) assert(!WaSUSPEND(ev)); assert(WaACTIVE(ev)); PE_RING_DETACH(&tm->ring); (*ev->vtbl->alarm)(ev, tm); tm = next; } } static NV timeTillTimer() { pe_timeable *tm = (pe_timeable*) Timeables.ring.next; if (!tm->ring.self) return 3600; return tm->at - NVtime(); } static void pe_timeable_start(pe_timeable *tm) { /* OPTIMIZE! */ pe_watcher *ev = (pe_watcher*) tm->ring.self; pe_timeable *rg = (pe_timeable*) Timeables.ring.next; assert(!WaSUSPEND(ev)); assert(PE_RING_EMPTY(&tm->ring)); if (WaDEBUGx(ev)) { NV left = tm->at - NVtime(); if (left < 0) { STRLEN n_a; warn("Event: timer for '%s' set to expire immediately (%.2f)", SvPV(ev->desc, n_a), left); } } while (rg->ring.self && rg->at < tm->at) { rg = (pe_timeable*) rg->ring.next; } /*warn("-- adding 0x%x:\n", ev); db_show_timeables();/**/ PE_RING_ADD_BEFORE(&tm->ring, &rg->ring); /*warn("T:\n"); db_show_timeables();/**/ D_TIMEABLE({ if (WaDEBUGx(ev) >= 4) { STRLEN n_a; warn("Event: timeable start '%s'\n", SvPV(ev->desc, n_a)); } }) } static void pe_timeable_stop(pe_timeable *tm) { D_TIMEABLE({ pe_watcher *ev = (pe_watcher*) tm->ring.self; if (WaDEBUGx(ev) >= 4) { STRLEN n_a; warn("Event: timeable stop '%s'\n", SvPV(ev->desc, n_a)); } }) PE_RING_DETACH(&tm->ring); } static void pe_timeable_adjust(NV delta) { pe_timeable *rg = (pe_timeable*) Timeables.ring.next; while (rg != &Timeables) { rg->at += delta; rg = (pe_timeable*) rg->ring.next; } } WKEYMETH(_timeable_hard) { /* applies to all timers in a watcher; is ok? */ if (nval) { if (sv_true(nval)) WaHARD_on(ev); else WaHARD_off(ev); } { dSP; XPUSHs(boolSV(WaHARD(ev))); PUTBACK; } } static void boot_timeable() { PE_RING_INIT(&Timeables.ring, 0); } Event-1.21/c/hook.c0000644000175000017500000000311710624507753013423 0ustar joshuajoshuastatic pe_ring Prepare, Check, AsyncCheck, Callback; static void boot_hook() { PE_RING_INIT(&Prepare, 0); PE_RING_INIT(&Check, 0); PE_RING_INIT(&AsyncCheck, 0); PE_RING_INIT(&Callback, 0); } static pe_qcallback * pe_add_hook(char *which, int is_perl, void *cb, void *ext_data) { pe_qcallback *qcb; EvNew(2, qcb, 1, pe_qcallback); PE_RING_INIT(&qcb->ring, qcb); qcb->is_perl = is_perl; if (is_perl) { qcb->callback = SvREFCNT_inc((SV*)cb); qcb->ext_data = 0; } else { qcb->callback = cb; qcb->ext_data = ext_data; } if (strEQ(which, "prepare")) PE_RING_UNSHIFT(&qcb->ring, &Prepare); else if (strEQ(which, "check")) PE_RING_UNSHIFT(&qcb->ring, &Check); else if (strEQ(which, "asynccheck")) PE_RING_UNSHIFT(&qcb->ring, &AsyncCheck); else if (strEQ(which, "callback")) PE_RING_UNSHIFT(&qcb->ring, &Callback); else croak("Unknown hook '%s' in pe_add_hook", which); return qcb; } static pe_qcallback *capi_add_hook(char *which, void *cb, void *ext_data) { return pe_add_hook(which, 0, cb, ext_data); } static void pe_cancel_hook(pe_qcallback *qcb) { if (qcb->is_perl) SvREFCNT_dec((SV*)qcb->callback); PE_RING_DETACH(&qcb->ring); EvFree(2, qcb); } static void pe_map_check(pe_ring *List) { pe_qcallback *qcb = (pe_qcallback*) List->prev->self; while (qcb) { if (qcb->is_perl) { dSP; PUSHMARK(SP); PUTBACK; perl_call_sv((SV*)qcb->callback, G_DISCARD); } else { /* !is_perl */ (* (void(*)(void*)) qcb->callback)(qcb->ext_data); } qcb = (pe_qcallback*) qcb->ring.prev->self; } } Event-1.21/c/generic.c0000644000175000017500000000500110624507753014071 0ustar joshuajoshuastatic struct pe_watcher_vtbl pe_generic_vtbl; static pe_watcher *pe_generic_allocate(HV *stash, SV *temple) { pe_generic *ev; EvNew(14, ev, 1, pe_generic); ev->base.vtbl = &pe_generic_vtbl; pe_watcher_init(&ev->base, stash, temple); ev->source = &PL_sv_undef; PE_RING_INIT(&ev->active, ev); WaREPEAT_on(ev); WaINVOKE1_off(ev); return (pe_watcher*) ev; } static void pe_generic_dtor(pe_watcher *ev) { pe_generic *gw = (pe_generic *)ev; SvREFCNT_dec(gw->source); pe_watcher_dtor(ev); EvFree(14, ev); } static char *pe_generic_start(pe_watcher *_ev, int repeat) { pe_generic *ev = (pe_generic*) _ev; SV *source = ev->source; pe_genericsrc *src; if (!_ev->callback) return "without callback"; if (!source || !SvOK(source)) return "without source"; src = sv_2genericsrc(source); PE_RING_UNSHIFT(&ev->active, &src->watchers); return 0; } static void pe_generic_stop(pe_watcher *_ev) { pe_generic *ev = (pe_generic*) _ev; PE_RING_DETACH(&ev->active); } WKEYMETH(_generic_source) { pe_generic *gw = (pe_generic*)ev; if (nval) { SV *old = gw->source; int active = WaPOLLING(ev); if(SvOK(nval)) { (void) sv_2genericsrc(nval); /* for type check */ } if (active) pe_watcher_off(ev); gw->source = SvREFCNT_inc(nval); if (active) pe_watcher_on(ev, 0); SvREFCNT_dec(old); } { dSP; XPUSHs(gw->source); PUTBACK; } } static pe_genericsrc *pe_genericsrc_allocate(HV *stash, SV *temple) { pe_genericsrc *src; EvNew(16, src, 1, pe_genericsrc); src->mysv = stash || temple ? wrap_genericsrc(src, stash, temple) : 0; PE_RING_INIT(&src->watchers, 0); return src; } static void pe_genericsrc_dtor(pe_genericsrc *src) { PE_RING_DETACH(&src->watchers); EvFree(16, src); } static HV *pe_genericsrc_stash; static void pe_genericsrc_event(pe_genericsrc *src, SV *data) { pe_generic *wa = src->watchers.next->self; while(wa) { pe_datafulevent *ev = (pe_datafulevent*) (*wa->base.vtbl->new_event)(&wa->base); ++ev->base.hits; ev->data = SvREFCNT_inc(data); queueEvent(&ev->base); wa = wa->active.next->self; } } static void boot_generic() { pe_watcher_vtbl *vt = &pe_generic_vtbl; memcpy(vt, &pe_watcher_base_vtbl, sizeof(pe_watcher_base_vtbl)); vt->dtor = pe_generic_dtor; vt->start = pe_generic_start; vt->stop = pe_generic_stop; pe_register_vtbl(vt, gv_stashpv("Event::generic",1), &datafulevent_vtbl); pe_genericsrc_stash = gv_stashpv("Event::generic::Source", 1); } Event-1.21/util/0002755000175000017500000000000012062657023013044 5ustar joshuajoshuaEvent-1.21/util/filehandle.txt0000644000175000017500000002713110624507753015710 0ustar joshuajoshua---------------------------------------------------------------------------- [Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original] ---------------------------------------------------------------------------- Re: your mail ---------------------------------------------------------------------------- * From: Tom Christiansen * To: Chip Salzenberg * Cc: Byron Brummer , perlbug@perl.com, tchrist@jhereg.perl.com * Date: Tue, 19 May 1998 10:50:27 -0600 * Message-Id: <199805191650.KAA09658@jhereg.perl.com> ---------------------------------------------------------------------------- >You can call the readline() or glob() operators directly, if you like, >or else assign your handle to a scalar and say <$scalar>. Um, not quite. Here's a FMTEYEWTK on Indirect FileHandles that didn't make the cut on the Perl Cookbook. Check out talk about readln, er, readline. --tom You want to use a filehandle like a normal variable so you can pass it to or return it from a function, store it in a data structure, and so on. The solution is to use indirect filehandles by storing strings, typeglobs, typeglob references, or IO objects into scalar variables: $fh = SOME_FH; # bareword is strict-subs hostile $fh = "SOME_FH"; # strict-refs hostile; same package only $fh = *SOME_FH; # typeglob $fh = \*SOME_FH; # ref to typeglob (bless-able) $fh = *SOME_FH{IO}; # blessed IO::Handle from *SOME_FH typeglob Or to use the `new' method from the FileHandle or IO modules to create an anonymous filehandle, store that in a scalar variable, and use it as though it were a normal filehandle. use FileHandle; $fh = FileHandle->new(); use IO::Handle; # 5.004 or higher $fh = IO::Handle->new(); Then use any of these as you would a normal filehandle. Here's how this works: Anywhere that Perl is expecting a filehandle, an indirect filehandle may be used instead. An indirect filehandle is just a scalar variable that contains a filehandle. Functions like `print', `open', `seek', or the functions or the `' diamond operator will accept either a read filehandle or a scalar variable containing one: ($ifh, $ofh, $efh) = (*STDIN, *STDOUT, *STDERR); print $ofh "Type it: "; $got = <$ifh> print $efh "What was that: $got"; In the spirit of there being more than one way to do it, here are seven ways to produce an indirect filehandle. Don't be intimidated: numbers 3, 6 and 7 are the most common (and 6 and 7 are really the same thing): 1. Barewords The first, SOME_FH is rather dubious, because it's not merely a string, but a bareword string. It won't be allowed if `use strict 'subs'' is in effect. Other than that, everything in the next entry also applies. 2. Strings `"SOME_FH"' is still a string, but at least it's quoted. The big problem with this is that it doesn't have package information, so if you used it to call a function compiled in a different package, that function could get confused unless it were one of the ubiquitous handles, like ARGV, STDIN, STDOUT, and STDERR. You could add the package manually, saying perhaps `"main::SOME_FH"'. It won't be allowed if `use strict 'refs'' is in effect. The function in question can fix it up using the `Symbol::qualify' function, which adds in the package. Its cousin, `Symbol::qualify_to_ref', does this and produces a reference, silencing the complaints from `strict refs'. use Symbol; sub function_taking_filehandle_argument { my $fh = shift; # produce typeglob $fh = qualify($fh, scalar caller); # or else this one: # produce typeglob ref $fh = qualify_to_ref($fh, scalar caller); ... } The `Symbol::qualify' function produces something useful for passing to the `readline' function as described below. 3. Typeglobs The `*SOME_FH' notation is a typeglob, an entry in a package symbol table. Typeglobs are often nominated as Perl's deepest and blackest magic. If you see a star in front of an identifier, there are typeglobs involved, and you know you have entered a wizardly realm where even gurus fear to tread. Unlike the string versions of filehandles shown previously, you can do nearly anything with a typeglob you'd like--if not a good bit more. They're extremely convenient and useful, once you get the hang of them. You don't have to fight with packages or any stricture. And although it's not `bless'able because it's not a reference, it can be effectively returned from functions. A reference to a typeglob can't. Here's how typeglobs are typically used for I/O: #!/usr/bin/perl # demoglob - show how to return local filehandles sub ropen { my $path = shift; local *FH; open(FH, $path) || die $!; return *FH; } $f = ropen("/etc/motd"); $g = ropen("/etc/termcap"); print scalar(<$f>), scalar(<$g>); >>> Welcome to www.perl.com, the Perl Homepage >>> ######## TERMINAL TYPE DESCRIPTIONS SOURCE FILE If a typeglob is passed in, it can be assigned to a local filehandle using a typeglob. After that, normal operations like `<>' or any I/O function can be applied to it. sub read_N_lines using local *FH = shift; my $count = shift; my @lines = (); while (--$count > 0) { push @lines, scalar ; last if eof(FH); } return @lines; } open(TCAP, "/etc/termcap") || die $!; @some = read_N_lines(*TCAP, 3); print @some; >>> ######## TERMINAL TYPE DESCRIPTIONS SOURCE FILE >>> # >>> # Version 9.12.0 It turns out that it also works if the caller forgets to star the filehandle or passes it as a string, effectively using techniques 1 and 2 from this list. It works only so long as they're in the same package as the function in question and `strict refs' isn't enabled, though. @some = read_N_lines('TCAP', 5); That's because assigning a string to a typeglob promotes the string to a typeglob of that name, like this: *newname = *oldname; *newname = 'oldname'; # magically same; promote string to typeglob! A careful function would have done either this to qualify its filehandle argument: use Symbol; local *FH = qualify(shift, caller); Or prototyped the function to take a typeglob, which implicitly does the same thing: sub read_N_lines(*$) { # same definition } Once such a prototype is visible, a call like this: @some = read_N_lines(TCAP, 5); is really treated as though it were @some = &read_N_lines(*TCAP, 5); 4. Typeglob references The ` \*SOME_FH' notation produces a reference to a typeglob. It can be used to create an object by blessing the reference; this is what the FileHandle and IO modules use. Don't try passing one of these back from a function, though, because it doesn't work. Instead, if you would like an anonymous one of these, use the Symbol module. use Symbol; sub ropen { my $path = shift; my $fh = gensym(); open($fh, $path) || die $!; return $fh; } 5. IO handles The curious `*SOME_FH{IO}' construct is explained in greater detail in perlref(1). It accesses the internal IO object associated with the handle called SOME_FH. This is a real object; it's already blessed even though it's built-in to Perl. printf "I have %s\n", *STDIN{IO}; >>> I have IO::Handle=IO(0x80784b8) The only issue here is that it can't be used to generate a new filehandle the way `Symbol::gensym' can. But if you've already accessed the symbol as a filehandle, that's ok. This works fine: sub ropen { my $path = shift; local *FH; open(FH, $path) || die $!; return *FH{IO}; } 6. FileHandle The standard FileHandle module can be used to create a new filehandle to use indirectly. It's just a bit expensive to load; as of the 5.004 release, merely saying `use FileHandle' loads fifteen text files plus several shared libraries, plodding through nearly four thousand lines of source code. use FileHandle; sub ropen { my $path = shift; my $fh = FileHandle->new(); open($fh, $path) || die $!; return $fh; } 7. IO::Handle This is works the same as the FileHandle module, except that its name is different. The FileHandle module is really just a front-end to this one. It's still just as crazily expensive. There's a catch with these indirect filehandles. Only a simple scalar variable, not part of an array or hash or larger expression, can be used for things like `print', `printf', or the diamond operator. This is illegal and won't even compile: @fd = (*STDIN, *STDOUT, *STDERR); print $fd[1] "Type it: "; # WRONG $got = <$fd[0]> # WRONG print $fd[2] "What was that: $got"; # WRONG With `print', you can get around this problem by using a block and an expression: print { $fd[1] } "funny stuff\n"; printf { $fd[1] } "Pity the poor %x.\n", 3_735_928_559; >>> Pity the poor deadbeef. or even this, which sends the message out to one of two places: $ok = -x "/bin/cat"; print { $ok ? $fd[1] : $fd[2] } "cat stat $ok\n"; print { $fd[ 1+ ($ok || 0) ] } "cat stat $ok\n"; This kind of thing doesn't work for the diamond operator. In some cases, though, you may be in luck. The angle bracket notation is mostly just an interface to the built-in function named `readline'. You may call it directly--providing that you pass it a typeglob. Not a string. Not a reference to a typeglob. Just a typeglob. Given the initialization of @fd above, this would work: $got = readline($fd[0]); But if those had been typeglob references or strings instead of globs, `readline' wouldn't have worked. All this monkeying around will probably get to you eventually. If so, it may well be time to load the FileHandle module (or its newer alias, IO::Handle), which simplifies much of this. It has a `new' method to provide an anonymous filehandle, as we saw above. And it has `print' and `getline' methods (Yes, that's `getline' as a method, but `readline' when a function. I don't know what I was thinking when I wrote it.): use FileHandle; @fd = ( *STDIN{IO}, *STDOUT{IO}, *STDERR{IO} ); $fd[1]->print("Type it: "); print { $fd[1] } ("Type it: "); # same, but *much* faster $got = $fd[0]->getline(); $fd[2]->print("What was that: $got"); See also the `open' entry in perlfunc(1) (or Camel:3), FileHandle(3) (or Camel:7), the perlref(1) manpage's treatment of the so-called `*foo{THING}' syntax, and the IO modules. ---------------------------------------------------------------------------- Follow-Ups from: Chip Salzenberg Steffen Beyer sb@engelschall.com (Steffen Beyer) References to: Chip Salzenberg ---------------------------------------------------------------------------- [Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original] ---------------------------------------------------------------------------- Event-1.21/util/bench.pl0000644000175000017500000001706710624507753014477 0ustar joshuajoshua#!./perl -w use strict; use Config; use Event qw(time loop unloop); use vars qw($VERSION $TestTime); $VERSION = '0.08'; $TestTime = 11; #eval q[ use NetServer::ProcessTop; warn '[Top @ '.(7000+$$%1000)."]\n"; ]; #warn if $@; # $Event::DebugLevel = 2; Event->timer(cb => \&unloop, after => $TestTime, nice => -1, desc => "End of benchmark"); #------------------------------ Timer use vars qw($TimerCount $TimerExpect); $TimerCount = 0; $TimerExpect = 0; for (1..20) { my $interval = .2 + .1 * int rand 3; Event->timer(cb => sub { ++$TimerCount }, interval => $interval); $TimerExpect += $TestTime/$interval; } #------------------------------ Signals use vars qw($SignalCount); $SignalCount = 0; Event->signal(signal => 'USR1', cb => sub { ++$SignalCount; }); Event->timer(cb => sub { kill 'USR1', $$; }, interval => .5); #------------------------------ IO use vars qw($IOCount @W); $IOCount = 0; use Symbol; for (1..15) { my ($r,$w) = (gensym,gensym); pipe($r,$w); select $w; $|=1; Event->io(fd => $r, cb => sub { my $buf; ++$IOCount; sysread $r, $buf, 1; }, poll => 'r', desc => "fd ".fileno($r)); push @W, $w; } select STDOUT; #------------------------------ Idle use vars qw($IdleCount); $IdleCount = 0; my $idle; $idle = Event->idle(min => undef, cb => sub { ++$IdleCount; for (0..@W) { my $w = $W[int rand @W]; syswrite $w, '.', 1; } $idle->again; }, desc => "idle"); #------------------------------ Loop sub run { my $start = time; loop(); time - $start; } warn "Running benchmark...\n"; my $elapse = &run; sub pct { my ($got, $expect) = @_; sprintf "%.2f%%", 100*$got/$expect; } warn "Timing a null loop...\n"; my $null = Event::null_loops_per_second(7); my $e_per_sec = ($IdleCount+$TimerCount+$IOCount+$SignalCount)/$elapse; chomp(my $uname = `uname -a`); print " benchmark: $VERSION Event: $Event::VERSION perl $] uname=$uname cc='$Config{cc}', optimize='$Config{optimize}' ccflags='$Config{ccflags}' Elapse Time: ".pct($elapse,$TestTime)." of $TestTime seconds Timer/sec: ".pct($TimerCount,$TimerExpect)." ($TimerCount total) Io/sec: ".sprintf("%.3f", $IOCount/$elapse)." ($IOCount total) Signals/sec ".sprintf("%.2f", $SignalCount/$elapse)." Events/sec ".sprintf("%.3f", $e_per_sec)." Null/sec $null Event/Null ".sprintf("%.2f", 100* $e_per_sec / $null)."\% "; __END__ ------------------------------------- benchmark: 0.08 Event: 0.40 perl 5.00556 uname=SunOS eq1070.wks.na.deuba.com 5.5.1 Generic_103640-24 sun4u sparc SUNW,Ultra-1 cc='cc', optimize='-xO3 -g' ccflags='-DDEBUGGING' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.37% of 11 seconds Timer/sec: 98.18% (801 total) Io/sec: 4550.053 (49735 total) Signals/sec 1.92 Events/sec 4909.684 Null/sec 93511 Event/Null 5.25% ------------------------------------- benchmark: 0.08 Event: 0.26 perl 5.00554 uname=SunOS eq1062.wks.na.deuba.com 5.5.1 Generic_103640-19 sun4u sparc SUNW,Ultra-1 cc='cc', optimize='-xO3 -g' ccflags='-DDEBUGGING' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.14% of 11 seconds Timer/sec: 98.18% (810 total) Io/sec: 4957.076 (54057 total) Signals/sec 1.93 Events/sec 5343.137 Null/sec 111410 Event/Null 4.80% ------------------------------------- benchmark: 0.07 Event: 0.24 perl 5.00553 uname=SunOS eq1062.wks.na.deuba.com 5.5.1 Generic_103640-19 sun4u sparc SUNW,Ultra-1 cc='cc', optimize='-xO3 -g' ccflags='-DDEBUGGING -I/usr/local/include' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.14% of 11 seconds Timer/sec: 98.18% (783 total) Io/sec: 4911.331 (53562 total) Signals/sec 1.93 Events/sec 5292.045 Null/sec 114013 Event/Null 4.64% ------------------------------------- benchmark: 0.06 Event: 0.20 perl 5.00552 uname=Linux furu.g.aas.no 2.0.31 #1 Mon Oct 13 12:20:11 MET DST 1997 i586 cc='cc', optimize='-g' ccflags='-Dbool=char -DHAS_BOOL -DDEBUGGING -I/usr/local/include' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 97.61% of 11 seconds Timer/sec: 96.80% (772 total) Io/sec: 1518.486 (16304 total) Signals/sec 1.96 Events/sec 1687.248 Null/sec 50928 ------------------------------------- benchmark: 0.06 Event: 0.18 perl 5.00551 uname=IRIX64 clobber 6.2 03131016 IP25 mips cc='cc -n32', optimize='-O3' ccflags='-D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1184 -OPT:Olimit=0 -I/usr/local/ include -DLANGUAGE_C' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.63% of 11 seconds Timer/sec: 98.18% (720 total) Io/sec: 6541.408 (71690 total) Signals/sec 1.92 Events/sec 7017.893 Null/sec 74469 ------------------------------------- benchmark: 0.05 Event: 0.13 perl 5.00502 uname=SunOS eq1062.wks.na.deuba.com 5.5.1 Generic_103640-19 sun4u sparc SUNW,Ultra-1 cc='cc', optimize='-xO3 -g' ccflags='-DDEBUGGING -I/usr/local/include' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.48% of 11 seconds Timer/sec: 98.18% (765 total) Io/sec: 3742.786 (40955 total) Signals/sec 1.92 Events/sec 4048.570 Null/sec 176565 ------------------------------------- benchmark: 0.04 Time::HiRes: 01.18, Event: 0.10 perl 5.005 uname=IRIX Pandora 6.3 12161207 IP32 cc='cc -n32', optimize='-O3' ccflags='-D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1184 -OPT:Olimit=0 -I/usr/local/include -DLANGUAGE_C' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.42% of 11 seconds Timer/sec: 98.18% (846 total) Io/sec: 4729.905 (51725 total) Signals/sec 1.92 Events/sec 5104.823 Null/sec 92255 ------------------------------------- benchmark: 0.04 Time::HiRes: 01.18, Event: 0.10 perl 5.00501 uname=SunOS pluto 5.5.1 Generic_103640-08 sun4m sparc SUNW,SPARCstation-10 cc='gcc', optimize='-O2 -g' ccflags='-DDEBUGGING -I/usr/local/include' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 98.83% of 11 seconds Timer/sec: 98.18% (765 total) Io/sec: 2629.475 (28586 total) Signals/sec 1.93 Events/sec 2866.151 Null/sec 150603 ------------------------------------- benchmark: 0.03 IO: 1.20, Time::HiRes: 01.18, Event: 0.07 perl 5.00404 uname=IRIX64 clobber 6.2 03131016 IP25 cc='cc -n32 -mips4 -r10000', optimize='-O3 -TARG:platform=ip25 -OPT:Olimit=0:roundoff=3:div_split=ON:alias=typed' ccflags ='-D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1184 -OPT:Olimit=0 -I/usr/local/include -I/usr/people7/walker/pub/include -DLANGUAGE_C -DPACK_MALLOC -DTWO_POT_OPTIMIZE -DEMERGENCY_SBRK' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.66% of 11 seconds Timer/sec: 98.18% (819 total) Io/sec: 817.160 (8958 total) Signals/sec 1.92 Events/sec 944.869 ------------------------------------- benchmark: 0.03 IO: 1.20, Time::HiRes: 01.18, Event: 0.07 perl 5.005 uname=SunOS punch 5.5.1 Generic_103640-08 sun4u sparc SUNW,Ultra-2 cc='gcc', optimize='-O2 -g' ccflags ='-DDEBUGGING -I/usr/local/include' Please mail benchmark results to perl-loop@perl.org. Thanks! Elapse Time: 99.76% of 11 seconds Timer/sec: 98.18% (711 total) Io/sec: 1020.097 (11194 total) Signals/sec 1.91 Events/sec 1150.593 Event-1.21/lib/0002755000175000017500000000000012062657023012635 5ustar joshuajoshuaEvent-1.21/lib/Event.pod0000644000175000017500000007312211244711362014423 0ustar joshuajoshua=head1 NAME Event - Event loop processing =head1 SYNOPSIS use Event qw(loop unloop); # initialize application Event->flavor(attribute => value, ...); my $ret = loop(); # and some callback will call unloop('ok'); =head1 DESCRIPTION ALERT: Marc Lehmann may have taken over the future of event loops in Perl. Check out his libev library and EV Perl module. 25 Aug 2009 The Event module provide a central facility to watch for various types of events and invoke a callback when these events occur. The idea is to delay the handling of events so that they may be dispatched in priority order when it is safe for callbacks to execute. Events (in the ordinary sense of the word) are detected by B, which reify them as B (in the special Event module sense). For clarity, the former type of events may be called "source events", and the latter "target events". Source events, such as signals arriving, happen whether or not they are being watched. If a source event occurs which a watcher is actively watching then the watcher generates a corresponding target event. Target events are only created by watchers. If several watchers are interested in the same source event then each will generate their own target event. Hence, any particular source event may result in zero, one, two, or any number of target events: the same as the number of watchers which were actively watching for it. Target events are queued to be processed in priority order (priority being determined by the creating watcher) and in FIFO order among events of the same priority. Queued ("pending") events can, in some cases, be cancelled before being processed. A queued event is processed by being passed to the callback function (or method on a particular object or class) which was specified to the watcher. A watcher, once created, operates autonomously without the Event user having to retain any reference to it. However, keeping a reference makes it possible to modify most of the watcher's characteristics. A watcher can be switched between active and inactive states. When inactive, it does not generate target events. Some types of source event are not reified as target events immediately. Signals received, for example, are counted initially. The counted signals are reified at certain execution points. Hence, signal events may be processed out of order, and if handled carelessly, on the wrong side of a state change in event handling. A useful way to view this is that occurrence of the source event is not actually the arrival of the signal but is triggered by the counting of the signal. Reification can be forced when necessary. The schedule on which some other events are created is non-obvious. This is especially the case with watchers that watch for a condition rather than an event. In some cases, target events are generated on a schedule that depends on the operation of the event loop. =head1 PERL API Events (the occurrence of such) are noticed and queued by 'event watchers'. The creation and configuration of event watchers is the primary topic of the rest of this document. The following functions control or interrogate the event loop as a whole: =over 4 =item $result = loop([$timeout]) Will enter a loop that calls one_event() until unloop() is called. The argument passed to unloop() is the return value of loop(). Loops can be nested. =item unloop($result) Make the inner-most loop() return with $result. =item unloop_all($result) Cause all pending loop()s to return immediately. This is B implemented with C. It is works as if C were called for all nested loops. =item sweep([$max_prio]) Queue all pending events and dispatch any with priority strictly less than $max_prio (the highest priority is 0). The default is to process all events except idle events. (While idle B are ignored by sweep, idle watchers are B ignored. If you want to avoid triggering an idle watcher then set C to C or C it.) =item one_event([$timeout]) If any events are outstanding then invoke the corresponding callback of the highest priority event. If there are no events available, block forever or until $timeout. Use of this API is not recommended because it is not efficient and does not trap exceptions. However, you might wish to understand how it works: =over 4 =item 1 Queue asyncronous events (signals, etc). That is, previously recorded events are reified. =item 2 If there are any events with priority 5 or less (see StarvePrio) then service the next one and return. =item 3 Calculate the maximum wait time (minimum time till the next timer expiration) and pass control to the poll/select system call. Upon return, queue all pending events. =item 4 Queue asyncronous events again. =item 5 If there are any events then service the next one and return. =item 6 Service the next idle watcher. =back StarvePrio is the priority level for which events are dispatched during step 2. It cannot be changed without a recompile. In the rare case that an event is always pending at step 2 then I/O watchers will starve. However, this is highly unlikely since async watchers should never queue events so rapidly. =item all_watchers() Returns a list of all watchers (including stopped watchers). =item all_running() Returns a list of all watchers with actively running callbacks. Watchers are returned in order of most recent to least recent. =item all_idle() Returns a list of all the idle watchers. If the event queue is very busy, all the idle watchers will sit on the idle queue waiting to run. However, be aware that if an idle watcher has the C attribute set then it will queue a normal event when its C wait time is exceeded. =item queue_pending() Examines asynchronous source events (timers & signals) and reifies them as target events. C is only called implicitly by C and C. Otherwise, C is not called implicitly. NOTE: Signal watchers generate target events according to which watchers are active at the time that C is called rather than according to the time the signal is received. This is best explained by example. See the file C. =back =head2 Event Watcher Constructors All watchers are constructed in one of the following ways: $w = Event->flavor( [attr1 => $value,]... ); $w = Event::flavor($Class, [attr1 => $value,]...); $w = Event::flavor->new([attr1 => $value,]...); Where I is substituted with the kind of watcher. Built-in types include idle, io, signal, timer, and var. New watchers (hopefully) have reasonable defaults and can also be customized by passing extra attributes to the constructor. When created, watcher objects are "started" and are waiting for events (see C<$event-Estart> below). NetServer::Portal can display watchers in real-time, formatted similarly to the popular C program. You may find this a useful aide for debugging. =head2 Shared Watcher Attributes Watchers are configured with attributes (also known as properties). For example: $watcher->cb(\&some_code); # set callback warn $event->w->desc.": ".$event->hits." events happened; Wow!"; All watchers support the following attributes: cb, cbtime, debug, desc, prio, max_cb_tm, reentrant, and repeat. Watcher constructors accept the preceding and additionally: async and nice. Moreover, watchers also offer extra attributes according to their specialty. =head2 Shared Watcher Methods The following methods are available for all watchers: =over 4 =item $watcher->start Activate the watcher. Watchers refuse to C without sufficient configuration information to generate events. Constructors always invoke C unless the C<< parked=>1 >> option is requested. You will need to set the parked option if you preallocate unconfigured watchers. Note: If there are any unreified asynchronous events that are of interest to the watcher, it will see these events even though they happened before it was started. This affects signal watchers, but there will only be existing unreified signal events if Event was already handling the signal, which it would only do if there were another active watcher for the same signal. If this situation might occur, and it would be a problem for the new watcher to see older events, call C immediately before starting the new watcher in order to reify any outstanding events. This explaination may be more clear if read along with C. =item $watcher->again This is the same as the C except if a watcher has special repeat behavior. For example, repeating timers recalculate their alarm time using the C parameter. =item $watcher->now Cause the watcher to generate an event, even if it is stopped. The callback may or may not run immediately depending upon the event's priority. If you must unconditionally invoke the callback, consider something like $w->cb->($w); =item $watcher->stop Don't look for events any more. Running events are allowed to complete but pending events are cancelled. Note that a stopped watcher can be reactivated by calling the C or C methods. Watchers are stopped implicitly if their new configuration deprives them of the ability to generate events. For instance: my $io_watcher = Event->io(timeout => 1); # started $io_watcher->timeout(undef); # stopped implicitly $io_watcher->timeout(1); # still stopped $io_watcher->start; # restarted =item $watcher->cancel Stop and destroy C<$watcher>. Running events are allowed to complete but pending events are cancelled. Cancelled watchers are no longer valid except for read-only operations. For example, prio() can return the watcher's priority, but start() will fail. =item $watcher->is_cancelled Reports whether the C<$watcher> has been cancelled. =item $watcher->is_active Reports whether the C<$watcher> has been started. The return value is not affected by suspend. =item $watcher->is_running Zero if the callback is not running. Otherwise, the number of levels that the callback has been entered. This can be greater than one if a C callback invokes C (or C, with lesser probability). =item $watcher->is_suspended Reports whether the C<$watcher> is suspended. Suspension is a debugging feature; see the discussion of the "suspend" attribute below. =item $watcher->pending In scalar context, returns a boolean indicating whether this watcher has any events pending in the event queue. In array context, returns a list of all the watcher's pending events. Note that this does not check for unreified asynchronous events. Call C first if you want to see signals received since the last operation of the event loop. =back =head2 Watcher Types =over 4 =item idle Extra attributes: min => $seconds, max => $seconds Watches for the Event system to be idle, i.e., to have no events pending. If the system is never idle, an event will be generated at least every C seconds. While Event is idle, events will be generated not more often than C seconds. If neither C nor C is specified, the watcher defaults to one-shot behaviour (C false), otherwise it defaults to repeating. In either case, the default can be overidden by specifying a C attribute. C defaults to 0.01, and C defaults to infinity. =item var Extra attributes: var => \$var, poll => 'rw' Var watchers generate events when the given variable is read from or written to, as specified by C. C defaults to "w". As perl is a concise language, it is often difficult to predict when a variable will be read. For this reason, variable watchers should poll only for writes unless you know what you are doing. =item timer Extra attributes: at => $time, after => $sec, interval => $sec, hard => $bool Generate events at particular times. The C<$time> and C<$sec> are in seconds. Fractional seconds may be used if Time::HiRes is available. C and C are mutually exclusive. C or C specify the initial time that the event will trigger. Subsequent timer events occur at intervals specified by C or C (in that order of preference) if either was supplied. The timer defaults to one-shot behaviour if C was not specified, or repeating behaviour if C was specified; in either case this can be overridden by providing C explicitly. You need to know the time at the start of today if you are trying to set timers to trigger at day relative times. You can find it with: use Time::Local; my $TodaySeconds = int timelocal(0,0,0,(localtime)[3,4,5]); This calculation may seem a little heavy weight. If you want to use UTC rather than local time then you can use this instead: my $TodaySeconds = time - time % 86400; Beware that, due to lags in the event loop, the C timeout may already be in the past. If the C flag is set, the event will be queued for execution relative to the last time the callback was invoked. However, if C is false the new timeout will be calculated relative to the current time. C defaults to false. =item io Extra attributes: fd => $fd, poll => 'rwe' [timeout => $seconds, hard => $bool, timeout_cb => \&code] The callback is invoked when the file descriptor, C, has data to be read, written, or pending exceptions. C can be a GLOB, an IO::Handle object, or a file number (file descriptor). C defaults to "r". Note that it is your option whether to have multiple watchers per file handle or to use a single watcher for all event conditions. If C is set, events are also generated regularly if no actual I/O event occurs. If C is set then timeouts use this alternate callback instead of the main callback. =item signal Extra attribute: signal => $str Generates events based on signal arrival. The events are not actually generated immediately when the signal arrives: signals received are counted and reified by C or implicitly by C. Several signals of the same type may be merged into a single event. In such cases, the number of signals represented by a single event is stored in the "hits" attribute. =back =head2 PRIORITY Priority is used to sort the event queue. Meaningful priorities range from -1 to 6 inclusive. Lower numbers mean higher priority (-1 is the highest priority and 6 is the lowest). If multiple events get queued, the ones with the highest priority are serviced first. Events with equal priority are serviced in first-in-first-out order. use Event qw(PRIO_HIGH PRIO_NORMAL); # some constants LEVELS: -1 0 1 2 3 4 5 6 ----------------------+-------------+--------------- PRIO_HIGH PRIO_NORMAL A negative priority causes the callback to be invoked immediately upon event occurrence. Use this with caution. While it may seem advantageous to use negative priorities, they bypass the whole point of having an event queue. Each watcher has a I, assigned by its constructor: io PRIO_NORMAL signal PRIO_HIGH timer PRIO_NORMAL var PRIO_NORMAL Default priorities are stored in ${"Event::${type}::DefaultPriority"}. If the default priority is not satisfactory for your purposes, the constructor options C, C, or C can be used to adjust it. C specifies an offset from the default priority; C forces the priority to -1; and C assigns a given priority of your choice. If more than one of these options are given then C overrides C overrides C. =head2 WATCHER CONSTRUCTOR ATTRIBUTES These options are only supported as constructor arguments. =over 4 =item after => $seconds See the discussion of the timer watcher. =item async => $bool If $bool then the watcher priority is set to -1. =item nice => $offset Offset from the default priority. =item parked => $yes By default, watcher constructors automatically invoke the C method. If you don't want the watcher started then request C<< parked=>1 >>. =back =head2 WATCHER ATTRIBUTES =over 4 =item at => $time The expiration time in the same units as the system clock. For a timer, C will usually be in the future. =item cb => \&code =item cb => [$class_or_object, $method_name] The function or method to call when an event is dispatched. The callback is invoked with C<$event> as its only argument. Perhaps you are wondering what happens if something goes wrong and an untrapped C occurs within your callback? C<$Event::DIED> is just for this purpose. See the full description of C below. =item cbtime => $time When the callback was invoked most recently. =item data => $anything The C method associates arbitrary data with a watcher. This method is not intended for implementers of watchers. If you are subclassing or implementing a watcher, consider the C method. =item debug => $bool Debugging can be activated globally or per watcher. When debugging is enabled for a particular watcher, $Event::DebugLevel is treated as two levels higher. Levels of 1, 2, 3, or 4 give progressively more diagnostics on STDERR. =item desc => $string An identifying name. If this is not passed explicitly to the constructor, it will be initialized with a string that attempts to identify the location in the source code where the watcher was constructed. =item fd => $filehandle This attribute can accept either a perl-esque filehandle or a system call derived file descriptor number. =item hard => $bool Determines how repeating timers (or timeouts) are recalculated. The timer is restarted either before or after the callback depending on whether it is true or false, respectively. In long-running callbacks this can make a significant difference. =item interval => $seconds How long between repeating timeouts. The C attribute is recalculated using C upon callback return. =item max => $seconds The maximum number of seconds to wait before triggering the callback. Similar to a C. =item max_cb_tm => $seconds The maximum number of seconds to spend in a callback. If a callback uses more time then it is aborted. Defaults to 1 sec. This feature is normally disabled. See Event::Stats. =item min => $seconds Enforce a minimum number of seconds between triggering events. =item poll => $bits Determines which kinds of events are of interest. This attribute can be set with either strings or bit constants. The bit constants are available via 'use Event::Watcher qw(R W E T);'. string constant description ------ -------- --------------- 'r' R read 'w' W write 'e' E exception 't' T timeout Thus, both of these statements enable interest in read: $w->poll($w->poll . 'r'); $w->poll($w->poll | R); A given type of watcher may support all or a subset of the available events. =item prio => $level Changes the watcher's priority to the given level. Events generated by a watcher usually inherit the priority of the watcher. =item private => $anything Use the C method to associate arbitrary data with a watcher. This method is intended for implementers of watchers or watcher subclasses. Each caller's package accesses its own private attribute. =item reentrant => $bool By default, callbacks are allowed to invoke C or C which in turn may invoke the same callback again recursively. This can be useful but can also be confusing. Moreover, if you keep reentering callbacks you will quickly run out of stack space. Disable this feature per watcher by setting reentrant to false. This will cause the watcher to be suspended during recursive calls to C or C. =item repeat => $bool The repeat flag controls whether the callback should either be one-shot or continue waiting for new events. The default setting depends on the type of watcher. I, I, and I default to true. =item signal => $str The callback is invoked after the specified signal is received. The $str string should be something like 'INT' or 'QUIT'. Also see the documentation for C<%SIG>. A given signal can be handled by C<%SIG> or Event, but not both at the same time. Event handles the signal as long as there is at least one active watcher. If all watchers for the signal are cancelled or stopped then Event sets the signal handler to SIG_DFL. =item suspend => $bool Stop looking for events. Running events are allowed to complete, but queued events are cancelled. Suspend is for debugging. If you suspend all watchers in an application then you can examine the complete state unchanged for as long as you like without worrying about timer expirations. If you actually wish to stop a watcher then use the C method. =item timeout => $seconds The number of seconds before a watcher times out. =item timeout_cb => \&code =item timeout_cb => [$class_or_object, $method_name] This is an optional attribute for use when it is desired that timeouts be serviced in a separate code path than normal events. When this attribute is unset, timeouts are serviced by C. =item var => $ref A reference to the variable being watched. =back =head2 EVENT ATTRIBUTES =over 4 =item got => $bits C is available in the callback of watchers with C. C is in the same format as C except that it gives what kind of event actually happened. In contrast, C is just an indication of interest. =item hits => $int Signals in quick succession can be clumped into a single event. The number of signals clumped together is indicated by this attribute. This is always one for event types which don't clump. =item prio => $level Be aware that this priority can differ from the watcher's priority. For instance, the watcher's priority may have changed since the event was generated. Moreover, the C extension API offers the freedom to queue events of arbitrary priority. =item w => $watcher This method return the event's watcher. It is read-only. =back =head2 Customization and Exceptions =over 4 =item * $Event::DebugLevel Enables progressively more debugging output. Meaningful levels range from 1 (least output) to 5 (most output). Also see C. =item * $Event::DIED When C or C is called, an exception context is established for the duration of event processing. If an exception is detected then C<$Event::DIED> is invoked. The default hook uses C to output the exception. After the DIED handler completes, event processing continues as if nothing happened. If you'd like more detailed output you can install the verbose handler: $Event::DIED = \&Event::verbose_exception_handler; Or you can write your own. The handler is invoked like this: $Event::DIED->($event, $@); If you do not want to continue looping after an error, you can do something like this: $Event::DIED = sub { Event::verbose_exception_handler(@_); Event::unloop_all(); }; =item * Event->add_hooks(key => sub { ... }, ...); The bulk of Event's implementation is in C for B performance. The C method allows insertion of perl code at key points in the optimized event processing core. While flexible, this can hurt performance *significantly*. If you want customization *and* performance, please see the C API. Currently support hooks are detailed as follows: hook purpose ------------- ---------------------------------------------- prepare returns minimum time to block (timeable) check assess state after normal return from select/poll asynccheck check for signals, etc callback invoked before each event callback =back =head1 C API Event also has a direct API for callbacks written exclusively in C. See Event::MakeMaker. =head1 WHAT ABOUT THREADS? Event loops and threads are two different solutions to the same problem: asynchronous processing. Event loops have been around since the beginning of computing. They are well understood and proven to be a good solution for many applications. While event loops make use of basic operating system services, the bulk of their implementation is usually outside the kernel. While an event loop may appear to do many things in parallel, it does not, even on multiprocessor hardware. Actions are always dispatched sequentially. This implies that long running callbacks must be avoided because otherwise event processing is halted. Event loops work well when actions are short and to the point. Long-running tasks must be broken into short steps and scheduled for execution. Some sort of a state machine is usually required. While a big, complex application server is usually simpler to implement in a multithreaded fashion, a web browser can easily get by without threads. Consider a JPEG file download and render. When some new bytes are available they are sorted to the right place on the screen. Only a little state must be kept to keep track of how much has been rendered and to process subsequent incoming bytes. Threads can either substitute for an event loop or complement it. Threads are similar to processes in that the operating system manages task switching for you. However, the difference is that all threads share the same address space. This is good and bad. Higher performance can be achieved but since data is shared between threads, extreme care must be taken to access or modify global data. The operating system can switch threads at any moment or can execute multiple threads simultaneously. I hope this sounds dangerous! It is! Threads can introduce maddeningly complicated and hard to debug synchronization problems. Threads are like rocket fuel. They are essential when you really need them but most applications would be better off with a simple event loop. Even if threads are genuinely needed, consider confining them to the parts of an application where truly scalable performance is really worth the difficulty of a multithreaded implementation. For example, most GUIs applications do not need threads and most scientific compute intensive problems can be isolated from event dispatching. On the other hand, high performance transaction servers generally do mandate a truly multithreaded approach. Another consideration is that threads are not quite as widely available as event loops. While a few forward-thinking operating systems have offered threads since the beginning, their addition to many popular operating systems is much more recent and some still offer no threads support. If portability is a requirement, one must check that threads support is available and also carefully test a particular threads implementation to see whether it supports the features you need. It is likely that all platforms will have a solid implementation soon but at this point in history it is best to double check. Many suggestions by Mark Mielke =head1 WHAT ABOUT NON-PREEMPTIVE THREADS? The Java language is oriented to use non-preemptive threads, yet even Java uses an event-loop for Swing (AFAIK). That is one of the reasons I don't use Java for network-centric applications. My belief is that the benefit of multi-threading is the gain in performance on SMP hardware. In my view, non-preemptive threads (java green-threads) are usually poor design. I find them harder to work with, harder to debug, and slower for a rather marginal gain in readability. I really like working with a state machine. I find it leads to more stable and better code. It also has the benefit of abstracting away how concurrency is achieved. Contributed by artur@vogon-solutions.com, 12 Jul 1999. =head1 BUGS No support for epoll, or better, libevent. The scope of events is pretty strange compared to most other perl objects. I'm not sure if this is a bug or a feature (OK, probably it was a mistake). We'll probably want to re-work things for Perl6. The meaning of $io->timeout(0) might change. Use C to unset the timeout. There seems to be some sort of bug in the global destruction phase: Attempt to free unreferenced scalar during global destruction. Use of uninitialized value during global destruction. Explicit blessing to '' (assuming package main) during global destruction. =head1 THE FUTURE Even if this module does not end up being the One and True Event Loop, the author will insure that it is source compatible with its successor, or arrange for gradual migration. Back in the early days, the Event programming API was changing at every release. Care was taken to allow the old API to continue to work, and the transition was eased by printing out lots of warnings about the new usage. So you shouldn't sit on your hands in anticipation of the One and True Event Loop. Just start coding! =head1 ALSO SEE =over 4 =item * Useful and Fun Time::HiRes, NetServer::Portal, Time::Warp =item * Message Passing COPE, IPC::LDT, Event-tcp =item * GUI While Tk does not yet support Event, PerlQt does. =item * C API Inline =back =head1 SUPPORT If you have insights or complaints then please subscribe to the mailing list! Send email to: perl-loop-subscribe@perl.org =head1 AUTHOR Joshua N. Pritikin EFE =head1 ACKNOWLEDGMENT Initial 0.01 implementation by Graham Barr EFE. Other contributors include at least those lists below and folks mentioned in the ChangeLog. Gisle Aas Uri Guttman Nick Ing-Simmons (Tk) Sarathy Jochen Stenzel =head1 COPYRIGHT Copyright © 1997 Joshua Nathaniel Pritikin & Graham Barr Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004 Joshua Nathaniel Pritikin All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut Event-1.21/lib/Event.pm0000644000175000017500000001173112062657015014256 0ustar joshuajoshuause strict; BEGIN { # do the right thing for threads? eval { require attrs; } or do { $INC{'attrs.pm'} = ""; *attrs::import = sub {}; } } package Event; require 5.006; #maybe use base 'Exporter'; use Carp; eval { require Carp::Heavy; }; # work around perl_call_pv bug XXX use vars qw($VERSION @EXPORT_OK $API $DebugLevel $Eval $DIED $Now); $VERSION = '1.21'; # If we inherit DynaLoader then we inherit AutoLoader; Bletch! require DynaLoader; # DynaLoader calls dl_load_flags as a static method. *dl_load_flags = DynaLoader->can('dl_load_flags'); (defined(&bootstrap)? \&bootstrap : \&DynaLoader::bootstrap)-> (__PACKAGE__, $VERSION); $DebugLevel = 0; $Eval = 0; # avoid because c_callback is exempt $DIED = \&default_exception_handler; @EXPORT_OK = qw(time all_events all_watchers all_running all_queued all_idle one_event sweep loop unloop unloop_all sleep queue queue_pending QUEUES PRIO_NORMAL PRIO_HIGH NO_TIME_HIRES); sub import { my $pkg = shift; our $NO_TIME_HIRES; my @sym; for my $sym (@_) { if ($sym eq 'NO_TIME_HIRES') { $NO_TIME_HIRES = 1; } else { push @sym, $sym; } } if (!$NO_TIME_HIRES) { eval { require Time::HiRes; }; if ($@ =~ /^Can\'t locate Time/) { # OK, just continue } elsif ($@) { die if $@; } else { cache_time_api(); # hook in high precision time } } $pkg->export_to_level(1, undef, @sym); } # broadcast_adjust for Time::Warp? XXX sub _load_watcher { my $sub = shift; eval { require "Event/$sub.pm" }; die if $@; croak "Event/$sub.pm did not define Event::$sub\::new" unless defined &$sub; 1; } sub AUTOLOAD { my $sub = ($Event::AUTOLOAD =~ /(\w+)$/)[0]; _load_watcher($sub) or croak $@ . ', Undefined subroutine &' . $sub; carp "Autoloading with Event->$sub(...) is deprecated; \tplease 'use Event::type qw($sub);' explicitly"; goto &$sub; } sub default_exception_handler { my ($run,$err) = @_; my $desc = '?'; my $w; if ($run and ($w = $run->w)) { $desc = "`".$w->desc."'"; } my $m = "Event: trapped error in $desc: $err"; $m .= "\n" if $m !~ m/\n$/; warn $m; #Carp::cluck "Event: fatal error trapped in '$desc'"; } sub verbose_exception_handler { #AUTOLOAD XXX my ($e,$err) = @_; my $m = "Event: trapped error: $err"; $m .= "\n" if $m !~ m/\n$/; return warn $m if !$e; my $w = $e->w; $m .= " in $w --\n"; for my $k ($w->attributes) { $m .= sprintf "%18s: ", $k; eval { my $v = $w->$k(); if (!defined $v) { $m .= ''; } elsif ($v =~ /^-?\d+(\.\d+)?$/) { $m .= $v; } else { $m .= "'$v'"; } }; if ($@) { $m .= "[$@]"; $@=''; } $m .= "\n"; } warn $m; } sub sweep { my $prio = @_ ? shift : QUEUES(); queue_pending(); my $errsv = ''; while (1) { eval { $@ = $errsv; _empty_queue($prio) }; $errsv = $@; if ($@) { # if ($Event::DebugLevel >= 2) { # my $e = all_running(); # warn "Event: '$e->{desc}' died with: $@"; # } next } last; } } use vars qw($Result $TopResult); my $loop_timer; sub loop { use integer; if (@_) { my $how_long = shift; if (!$loop_timer) { $loop_timer = Event->timer(desc => "Event::loop timeout", after => $how_long, cb => sub { unloop($how_long) }, parked=>1); $loop_timer->prio(PRIO_HIGH()); } else { $loop_timer->at(Event::time() + $how_long), } $loop_timer->start; } $TopResult = undef; # allow re-entry of loop after unloop_all local $Result = undef; _incr_looplevel(); my $errsv = ''; while (1) { # like G_EVAL | G_KEEPERR eval { $@ = $errsv; _loop() }; $errsv = $@; if ($@) { warn "Event::loop caught: $@" if $Event::DebugLevel >= 4; next } last; } _decr_looplevel(); $loop_timer->stop if $loop_timer; my $r = $Result; $r = $TopResult if !defined $r; warn "Event: unloop(".(defined $r?$r:'').")\n" if $Event::DebugLevel >= 3; $r } sub add_hooks { shift if @_ & 1; #? while (@_) { my $k = shift; my $v = shift; croak "$v must be CODE" if ref $v ne 'CODE'; _add_hook($k, $v); } } END { $_->cancel for all_watchers() } # buggy? XXX package Event::Event::Io; use vars qw(@ISA); @ISA = 'Event::Event'; package Event::Event::Dataful; use vars qw(@ISA); @ISA = 'Event::Event'; package Event; require Event::Watcher; _load_watcher($_) for qw(idle io signal timer var); # Provide hints to Inline.pm for usage: # use Inline with => 'Event'; sub Inline { my $language = shift; if ($language ne 'C') { warn "Warning: Event.pm does not provide Inline hints for the $language language\n"; return } require Event::MakeMaker; my $path = $Event::MakeMaker::installsitearch; require Config; my $so = $Config::Config{so}; return { INC => "-I $path/Event", TYPEMAPS => "$path/Event/typemap", MYEXTLIB => "$path/auto/Event/Event.$so", AUTO_INCLUDE => '#include "EventAPI.h"', BOOT => 'I_EVENT_API("Inline");', }; } 1; Event-1.21/lib/Event/0002755000175000017500000000000012062657023013716 5ustar joshuajoshuaEvent-1.21/lib/Event/group.pm0000644000175000017500000000101310624507753015407 0ustar joshuajoshuause strict; package Event::group; use Carp; use base 'Event::Watcher'; use vars qw(@ATTRIBUTE); @ATTRIBUTE = qw(timeout); 'Event::Watcher'->register; sub new { my $class = shift; my %arg; my @add; while (my ($k,$v) = splice(@_, 0, 2)) { if ($k eq 'add') { push @add, $v; } elsif ($k eq 'del') { carp "del in constructor (ignored)"; } else { $arg{$k} = $v; } } my $o = allocate($class, delete $arg{attach_to} || {}); $o->init(\%arg); $o->add($_) for @add; $o; } 1; Event-1.21/lib/Event/var.pm0000644000175000017500000000046510624507753015055 0ustar joshuajoshuause strict; package Event::var; use base 'Event::Watcher'; use vars qw(@ATTRIBUTE); @ATTRIBUTE = qw(var poll); 'Event::Watcher'->register; sub new { # lock %Event::; my $class = shift; my %arg = @_; my $o = allocate($class, delete $arg{attach_to} || {}); $o->init(\%arg); $o; } 1; Event-1.21/lib/Event/generic.pm0000644000175000017500000000070310624507753015674 0ustar joshuajoshuause strict; package Event::generic; use base 'Event::Watcher'; use vars qw(@ATTRIBUTE); @ATTRIBUTE = qw(source); 'Event::Watcher'->register; sub new { # lock %Event::; my $class = shift; my %arg = @_; my $o = allocate($class, delete $arg{attach_to} || {}); $o->init(\%arg); $o; } package Event::generic::Source; sub new($) { return allocate($_[0], {}); } sub watch(@) { return Event->generic("source", @_); } 1; Event-1.21/lib/Event/MakeMaker.pm0000644000175000017500000000646610624507753016131 0ustar joshuajoshuause strict; package Event::MakeMaker; use Config; use base 'Exporter'; use vars qw(@EXPORT_OK $installsitearch); @EXPORT_OK = qw(&event_args $installsitearch); my %opt; for my $opt (split /:+/, $ENV{PERL_MM_OPT}) { my ($k,$v) = split /=/, $opt; $opt{$k} = $v; } my $extra = $Config{sitearch}; $extra =~ s,$Config{prefix},$opt{PREFIX}, if exists $opt{PREFIX}; for my $d ($extra, @INC) { if (-e "$d/Event/EventAPI.h") { $installsitearch = $d; last } } sub event_args { my %arg = @_; $arg{INC} .= " -I$installsitearch/Event"; %arg; } 1; __END__ =head1 NAME Event::MakeMaker - MakeMaker glue for the C-level Event API =head1 SYNOPSIS This is an advanced feature of Event. =head1 DESCRIPTION For optimal performance, hook into Event at the C-level. You'll need to make changes to your C and add code to your C / C file(s). =head1 WARNING When you hook in at the C-level you get a I performance gain, but you also reduce the chances that your code will work unmodified with newer versions of C or C. This may or may not be a problem. Just be aware, and set your expectations accordingly. =head1 HOW TO =head2 Makefile.PL use Event::MakeMaker qw(event_args); # ... set up %args ... WriteMakefile(event_args(%args)); =head2 XS #include "EventAPI.h" BOOT: I_EVENT_API("YourModule"); =head2 API (v21) struct EventAPI { I32 Ver; /* EVENTS */ void (*queue )(pe_event *ev); void (*start )(pe_watcher *ev, int repeat); void (*now )(pe_watcher *ev); void (*stop )(pe_watcher *ev, int cancel_events); void (*cancel )(pe_watcher *ev); void (*suspend )(pe_watcher *ev); void (*resume )(pe_watcher *ev); /* All constructors optionally take a stash and template. Either or both can be NULL. The template should not be a reference. */ pe_idle *(*new_idle )(HV*, SV*); pe_timer *(*new_timer )(HV*, SV*); pe_io *(*new_io )(HV*, SV*); pe_var *(*new_var )(HV*, SV*); pe_signal *(*new_signal)(HV*, SV*); /* TIMEABLE */ void (*tstart)(pe_timeable *); void (*tstop)(pe_timeable *); /* HOOKS */ pe_qcallback *(*add_hook)(char *which, void *cb, void *ext_data); void (*cancel_hook)(pe_qcallback *qcb); /* STATS */ void (*install_stats)(pe_event_stats_vtbl *esvtbl); void (*collect_stats)(int yes); pe_ring *AllWatchers; /* TYPEMAP */ SV *(*watcher_2sv)(pe_watcher *wa); void *(*sv_2watcher)(SV *sv); SV *(*event_2sv)(pe_event *ev); void *(*sv_2event)(SV *sv); }; =head2 EXAMPLE static pe_io *X11_ev=0; static void x_server_dispatch(void *ext_data) { ... } if (!X11_ev) { X11_ev = GEventAPI->new_io(0,0); X11_ev->poll = PE_R; sv_setpv(X11_ev->base.desc, "X::Server"); X11_ev->base.callback = (void*) x_server_dispatch; X11_ev->base.ext_data = ; X11_ev->base.prio = PE_PRIO_NORMAL; } X11_ev->fd = x_fd; GEventAPI->resume((pe_event*) X11_ev); GEventAPI->start((pe_event*) X11_ev, 0); =head2 BUT I NEED A NEW TYPE OF WATCHER FOR MY INTERGALACTIC INFEROMETER I'd prefer not to export the entire Event.h apparatus in favor of minimizing interdependencies. If you really, really need to create a new type of watcher send your problem analysis to the mailing list! =cut Event-1.21/lib/Event/generic.pod0000644000175000017500000000456410624507753016053 0ustar joshuajoshua=head1 NAME Event::generic - generic event handling =head1 SYNOPSIS use Event::generic; $source = Event::generic::Source->new; $w = Event->generic(source => $source, ...); $w = $source->watch(...); $source = $w->source; $w->source($source); $source->event; $source->event($data); $data = $event->data; =head1 DESCRIPTION This module provides a watcher type within the C framework. You must understand the architecture of the C system in order to understand this document. This module provides a system of reified event sources and watchers watching those sources. Events are generated solely by a method on the event source object. The events may carry arbitrary data to the event handler callbacks. This module is intended for situations where the events of interest are best determined by Perl code. =head1 CLASSES =over =item Event::generic::Source A reified event source. =item Event::generic A watcher that can watch C event sources. =item Event::Event::Dataful A (target) event that can carry arbitrary data. =back =head1 EVENT SOURCE CLASS =head2 Constructor =over =item Event::generic::Source->new Creates and returns a new event source. =back =head2 Methods =over =item $source->event =item $source->event(DATA) The invocation of this method is a source event for watchers of the event source. When this method is called, each active watcher of the event source generates a target event. The I, if supplied, is copied into the target event objects, from which it can be retrieved using the C method. =item $source->watch(ATTR => VALUE, ...) Generates and returns a new watcher, configured to watch this event source. The standard watcher attributes may be specified as arguments. The watcher returned is an ordinary C, and may be reconfigured to watch a different event source. =back =head1 WATCHER CLASS =head2 Type-specific attributes =over =item source => $source The event source to watch. This must be either an C object or C. When set to C, no source is being watched, and the watcher cannot be started. =back =head1 EVENT CLASS =head2 Type-specific methods =over =item $event->data Returns the data associated with the event, which may be any scalar. This is read-only, and is set by the event source. =back =head1 SEE ALSO L Event-1.21/lib/Event/io.pm0000644000175000017500000000061110624507753014665 0ustar joshuajoshuause strict; package Event::io; use vars qw(@ISA @EXPORT_OK @ATTRIBUTE); @ISA = qw(Event::Watcher Exporter); @EXPORT_OK = qw(R W E T); # bit constants @ATTRIBUTE = qw(poll fd timeout timeout_cb); 'Event::Watcher'->register; sub new { # lock %Event::; my $class = shift; my %arg = @_; my $o = allocate($class, delete $arg{attach_to} || {}); $o->init(\%arg); $o; } 1; Event-1.21/lib/Event/type.pm0000644000175000017500000000046010624507753015241 0ustar joshuajoshuause strict; package Event::type; sub import { shift; # ignore our package for my $t (@_) { if ($t =~ m/^\:/) { if ($t eq ':all') { Event::_load_watcher($_) for qw(idle io signal timer var); } else { # silently ignore } } else { Event::_load_watcher($t) } } } 1; Event-1.21/lib/Event/EventAPI.h0000644000175000017500000001446211013441643015501 0ustar joshuajoshua#ifndef _event_api_H_ #define _event_api_H_ /* The API for the operating system dictates which events are truly asyncronous. Event needs C-level support only for these types of events. */ typedef struct pe_watcher_vtbl pe_watcher_vtbl; typedef struct pe_watcher pe_watcher; typedef struct pe_event_vtbl pe_event_vtbl; typedef struct pe_event pe_event; typedef struct pe_ring pe_ring; struct pe_ring { void *self; pe_ring *next, *prev; }; struct pe_watcher { pe_watcher_vtbl *vtbl; SV *mysv; NV cbtime; /* float? XXX */ void *callback; void *ext_data; void *stats; int running; /* SAVEINT */ U32 flags; SV *desc; pe_ring all; /* all watchers */ pe_ring events; /* this watcher's queued events */ HV *FALLBACK; I16 refcnt; /* internal to Event; not perl related */ I16 prio; I16 max_cb_tm; }; struct pe_event { pe_event_vtbl *vtbl; SV *mysv; pe_watcher *up; U32 flags; void *callback; void *ext_data; pe_ring peer; /* homogeneous */ pe_ring que; /* heterogeneous */ I16 hits; I16 prio; }; /* This must be placed directly after pe_watcher so the memory layouts are always compatible. XXX? */ typedef struct pe_timeable pe_timeable; struct pe_timeable { pe_ring ring; NV at; }; typedef struct pe_qcallback pe_qcallback; struct pe_qcallback { pe_ring ring; int is_perl; void *callback; void *ext_data; }; /* PUBLIC FLAGS */ #define PE_REENTRANT 0x0008 #define PE_HARD 0x0010 #define PE_DEBUG 0x1000 #define PE_REPEAT 0x2000 #define PE_INVOKE1 0x4000 #define WaFLAGS(ev) ((pe_watcher*)ev)->flags #define WaDEBUG(ev) ((WaFLAGS(ev) & PE_DEBUG)? 2:0) /*arthimetical*/ #define WaDEBUG_on(ev) (WaFLAGS(ev) |= PE_DEBUG) #define WaDEBUG_off(ev) (WaFLAGS(ev) &= ~PE_DEBUG) #define WaREPEAT(ev) (WaFLAGS(ev) & PE_REPEAT) #define WaREPEAT_on(ev) (WaFLAGS(ev) |= PE_REPEAT) #define WaREPEAT_off(ev) (WaFLAGS(ev) &= ~PE_REPEAT) #define WaREENTRANT(ev) (WaFLAGS(ev) & PE_REENTRANT) #define WaREENTRANT_on(ev) (WaFLAGS(ev) |= PE_REENTRANT) #define WaREENTRANT_off(ev) (WaFLAGS(ev) &= ~PE_REENTRANT) #define WaHARD(ev) (WaFLAGS(ev) & PE_HARD) #define WaHARD_on(ev) (WaFLAGS(ev) |= PE_HARD) /* :-) */ #define WaHARD_off(ev) (WaFLAGS(ev) &= ~PE_HARD) #define WaINVOKE1(ev) (WaFLAGS(ev) & PE_INVOKE1) #define WaINVOKE1_on(ev) (WaFLAGS(ev) |= PE_INVOKE1) #define WaINVOKE1_off(ev) (WaFLAGS(ev) &= ~PE_INVOKE1) /* QUEUE INFO */ #define PE_QUEUES 7 /* Hard to imagine a need for more than 7 queues... */ #define PE_PRIO_HIGH 2 #define PE_PRIO_NORMAL 4 /* io-ish flags */ #define PE_R 0x1 #define PE_W 0x2 #define PE_E 0x4 #define PE_T 0x8 typedef struct pe_ioevent pe_ioevent; struct pe_ioevent { pe_event base; U16 got; }; typedef struct pe_datafulevent pe_datafulevent; struct pe_datafulevent { pe_event base; SV *data; }; typedef struct pe_idle pe_idle; struct pe_idle { pe_watcher base; pe_timeable tm; pe_ring iring; SV *max_interval, *min_interval; }; typedef struct pe_io pe_io; struct pe_io { pe_watcher base; pe_timeable tm; /*timeout*/ pe_ring ioring; SV *handle; void *tm_callback; void *tm_ext_data; float timeout; U16 poll; /* ifdef UNIX */ int fd; int xref; /*private: for poll*/ /* endif */ }; typedef struct pe_signal pe_signal; struct pe_signal { pe_watcher base; pe_ring sring; IV signal; }; typedef struct pe_timer pe_timer; struct pe_timer { pe_watcher base; pe_timeable tm; SV *interval; }; typedef struct pe_var pe_var; struct pe_var { pe_watcher base; SV *variable; U16 events; }; typedef struct pe_group pe_group; struct pe_group { pe_watcher base; NV since; pe_timeable tm; SV *timeout; int members; pe_watcher **member; }; typedef struct pe_generic pe_generic; struct pe_generic { pe_watcher base; SV *source; pe_ring active; }; typedef struct pe_genericsrc pe_genericsrc; struct pe_genericsrc { SV *mysv; pe_ring watchers; }; typedef struct pe_event_stats_vtbl pe_event_stats_vtbl; struct pe_event_stats_vtbl { int on; /* if frame == -1 then we are timing pe_multiplex */ void*(*enter)(int frame, int max_tm); void (*suspend)(void *); void (*resume)(void *); void (*commit)(void *, pe_watcher *); /* callback finished OK */ void (*scrub)(void *, pe_watcher *); /* callback died */ void (*dtor)(void *); }; struct EventAPI { #define EventAPI_VERSION 22 I32 Ver; /* EVENTS */ void (*queue )(pe_event *ev); void (*start )(pe_watcher *ev, int repeat); void (*now )(pe_watcher *ev); void (*stop )(pe_watcher *ev, int cancel_events); void (*cancel )(pe_watcher *ev); void (*suspend )(pe_watcher *ev); void (*resume )(pe_watcher *ev); /* All constructors optionally take a stash and template. Either or both can be NULL. The template should not be a reference. */ pe_idle *(*new_idle )(HV*, SV*); pe_timer *(*new_timer )(HV*, SV*); pe_io *(*new_io )(HV*, SV*); pe_var *(*new_var )(HV*, SV*); pe_signal *(*new_signal)(HV*, SV*); /* TIMEABLE */ NV (*NVtime)(); void (*tstart)(pe_timeable *); void (*tstop)(pe_timeable *); /* HOOKS */ pe_qcallback *(*add_hook)(char *which, void *cb, void *ext_data); void (*cancel_hook)(pe_qcallback *qcb); /* STATS */ void (*install_stats)(pe_event_stats_vtbl *esvtbl); void (*collect_stats)(int yes); pe_ring *AllWatchers; /* TYPEMAP */ SV *(*watcher_2sv)(pe_watcher *wa); void *(*sv_2watcher)(SV *sv); SV *(*event_2sv)(pe_event *ev); void *(*sv_2event)(SV *sv); int (*sv_2interval)(char *label, SV *in, NV *out); SV *(*events_mask_2sv)(int mask); int (*sv_2events_mask)(SV *sv, int bits); /* EVERYTHING ELSE */ void (*unloop)(SV *); void (*unloop_all)(SV *); }; static struct EventAPI *GEventAPI=0; #define I_EVENT_API(YourName) \ STMT_START { \ SV *sv = perl_get_sv("Event::API",0); \ if (!sv) croak("Event::API not found"); \ GEventAPI = (struct EventAPI*) SvIV(sv); \ if (GEventAPI->Ver != EventAPI_VERSION) { \ croak("Event::API version mismatch (%d != %d) -- please recompile %s", \ GEventAPI->Ver, EventAPI_VERSION, YourName); \ } \ } STMT_END #endif Event-1.21/lib/Event/idle.pm0000644000175000017500000000107110624507753015174 0ustar joshuajoshuause strict; package Event::idle; use Carp; use base 'Event::Watcher'; use vars qw($DefaultPriority @ATTRIBUTE); @ATTRIBUTE = qw(hard max min); 'Event::Watcher'->register; sub new { # lock %Event::; my $class = shift; my %arg = @_; my $o = allocate($class, delete $arg{attach_to} || {}); # deprecated for (qw(min max repeat)) { if (exists $arg{"e_$_"}) { carp "'e_$_' is renamed to '$_'"; $arg{$_} = delete $arg{"e_$_"}; } } $o->repeat(1) if defined $arg{min} || defined $arg{max}; $o->init(\%arg); $o; } 1; Event-1.21/lib/Event/timer.pm0000644000175000017500000000203710624507753015402 0ustar joshuajoshuause strict; package Event::timer; use Carp; use base 'Event::Watcher'; use vars qw(@ATTRIBUTE); @ATTRIBUTE = qw(at hard interval); 'Event::Watcher'->register; sub new { # lock %Event::; my $class = shift; my %arg = @_; my $o = allocate($class, delete $arg{attach_to} || {}); # deprecated for (qw(at after interval repeat)) { if (exists $arg{"e_$_"}) { carp "'e_$_' is renamed to '$_'"; $arg{$_} = delete $arg{"e_$_"}; } } my $has_at = exists $arg{at}; my $has_after = exists $arg{after}; croak "'after' and 'at' are mutually exclusive" if $has_at && $has_after; if ($has_after) { my $after = delete $arg{after}; $o->at(Event::time() + $after); $has_at=1; $o->interval($after) if !exists $arg{interval}; } elsif ($has_at) { $o->at(delete $arg{at}); } if (exists $arg{interval}) { my $i = delete $arg{interval}; $o->at(Event::time() + (ref $i? $$i : $i)) unless $has_at; $o->interval($i); $o->repeat(1) unless exists $arg{repeat}; } $o->init(\%arg); $o; } 1; Event-1.21/lib/Event/typemap0000644000175000017500000000055310624507753015327 0ustar joshuajoshuaTYPEMAP pe_watcher * O_WATCHER pe_event * O_EVENT pe_genericsrc * O_GENERICSRC INPUT O_WATCHER $var = ($type) sv_2watcher($arg) O_EVENT $var = ($type) sv_2event($arg) O_GENERICSRC $var = ($type) sv_2genericsrc($arg) OUTPUT O_WATCHER croak("use watcher_2sv($var)") O_EVENT croak("use event_2sv($var)") O_GENERICSRC croak("use genericsrc_2sv($var)") Event-1.21/lib/Event/Watcher.pm0000644000175000017500000000477310624507753015670 0ustar joshuajoshuause strict; package Event::Watcher; use base 'Exporter'; use Carp; use vars qw(@EXPORT_OK @ATTRIBUTE); @EXPORT_OK = qw(ACTIVE SUSPEND R W E T); @ATTRIBUTE = qw(cb cbtime desc debug prio reentrant repeat max_cb_tm); sub register { no strict 'refs'; my $package = caller; my $name = $package; $name =~ s/^.*:://; my $sub = \&{"$package\::new"}; die "can't find $package\::new" if !$sub; *{"Event::".$name} = sub { shift; $sub->("Event::".$name, @_); }; &Event::add_hooks if @_; } my $warn_noise = 10; sub init { croak "Event::Watcher::init wants 2 args" if @_ != 2; my ($o, $arg) = @_; for my $k (keys %$arg) { if ($k =~ s/^e_//) { Carp::cluck "'e_$k' is renamed to '$k'" if --$warn_noise >= 0; $arg->{$k} = delete $arg->{"e_$k"}; } } if (!exists $arg->{desc}) { # try to find caller but cope with optimized-away frames & etc for my $up (1..4) { my @fr = caller $up; next if !@fr || $fr[0] =~ m/^Event\b/; my ($file,$line) = @fr[1,2]; $file =~ s,^.*/,,; $o->desc("?? $file:$line"); last; } } # set up prio { no strict 'refs'; $o->prio($ { ref($o)."::DefaultPriority" } || Event::PRIO_NORMAL); if (exists $arg->{nice}) { $o->prio($o->prio + delete $arg->{nice}); } } $o->prio(-1) if delete $arg->{async}; $o->prio(delete $arg->{prio}) if exists $arg->{prio}; # is parked? my $parked = delete $arg->{parked}; for my $k (keys %$arg) { my $m = $k; if ($o->can($m)) { $o->$m($arg->{$k}); next; } } Carp::cluck "creating ".ref($o)." desc='".$o->desc."'\n" if $Event::DebugLevel >= 3; $o->start unless $parked; $o; } sub attributes { no strict 'refs'; my ($o) = @_; my $pk = ref $o? ref $o : $o; @{"$ {pk}::ATTRIBUTE"}, map { attributes($_) } @{"$ {pk}::ISA"}; } sub configure { my $o = shift; if (! @_) { map { $_, $o->$_() } $o->attributes; } else { while (my ($k,$v)= splice @_, -2) { $o->$k($v)} 1 # whatever } } sub private { # assumes $self is a HASH ref my $self = shift; my $pkg = caller; if (@_) { $self->{$pkg} = shift } else { $self->{$pkg}; } } sub data { # assumes $self is a HASH ref my $self = shift; if (@_) { $self->{_user_data_} = shift } else { $self->{_user_data_}; } } sub clump { require Carp; Carp::cluck "clump is deprecated"; } package Event::Watcher::Tied; use vars qw(@ISA @ATTRIBUTE); @ISA = 'Event::Watcher'; @ATTRIBUTE = qw(hard at flags); 1; Event-1.21/lib/Event/signal.pm0000644000175000017500000000056710624507753015545 0ustar joshuajoshuause strict; package Event::signal; use Carp; use base 'Event::Watcher'; use vars qw($DefaultPriority @ATTRIBUTE); $DefaultPriority = Event::PRIO_HIGH(); @ATTRIBUTE = qw(signal); 'Event::Watcher'->register; sub new { # lock %Event:: my $class = shift; my %arg = @_; my $o = allocate($class, delete $arg{attach_to} || {}); $o->init(\%arg); $o; } 1; Event-1.21/Event.xs0000644000175000017500000004655511013441643013533 0ustar joshuajoshua/* -*- C -*- sometimes */ #define MIN_PERL_DEFINE 1 #ifdef __cplusplus extern "C" { #endif #include #include #include #ifdef __cplusplus } #endif #include "ppport.h" /* This is unfortunately necessary for the 5.005_0x series. */ #if PERL_REVISION == 5 && PERL_VERSION <= 5 && PERL_SUBVERSION < 53 # define PL_vtbl_uvar vtbl_uvar # define PL_sig_name sig_name # define whichsig Perl_whichsig /* ? */ #endif /* lexical warnings -- waiting for appropriate magic from paul.marquess@bt.com */ #if 0 static void Event_warn(const char* pat, ...) { dTHX; va_list args; va_start(args, pat); if (!ckWARN_d(WARN_ALL)) return; Perl_vwarner(aTHX_ WARN_ALL, pat, &args); va_end(args); } # undef warn # define warn Event_warn #endif #if 1 #ifdef warn # undef warn #endif #define warn Event_warn static void Event_warn(const char* pat, ...) { STRLEN n_a; dSP; SV *msg; va_list args; /* perl_require_pv("Carp.pm"); Couldn't possibly be unloaded.*/ va_start(args, pat); msg = sv_newmortal(); sv_vsetpvfn(msg, pat, strlen(pat), &args, Null(SV**), 0, 0); va_end(args); SvREADONLY_on(msg); PUSHMARK(SP); XPUSHs(msg); PUTBACK; perl_call_pv("Carp::carp", G_DISCARD); } #endif #ifdef croak # undef croak #endif #define croak Event_croak static void Event_croak(const char* pat, ...) { STRLEN n_a; dSP; SV *msg; va_list args; /* perl_require_pv("Carp.pm"); Couldn't possibly be unloaded.*/ va_start(args, pat); msg = sv_newmortal(); sv_vsetpvfn(msg, pat, strlen(pat), &args, Null(SV**), 0, 0); va_end(args); SvREADONLY_on(msg); PUSHMARK(SP); XPUSHs(msg); PUTBACK; perl_call_pv("Carp::croak", G_DISCARD); PerlIO_puts(PerlIO_stderr(), "panic: Carp::croak failed\n"); (void)PerlIO_flush(PerlIO_stderr()); my_failure_exit(); } #ifdef WIN32 # include #endif #if defined(HAS_POLL) # include /* Many operating systems claim to support poll yet they actually emulate it with select. c/unix.c supports either poll or select but it doesn't know which one to use. Here we try to detect if we have a native poll implementation. If we do, we use it. Otherwise, select is assumed. */ # ifndef POLLOUT # undef HAS_POLL # endif # ifndef POLLWRNORM # undef HAS_POLL # endif # ifndef POLLWRBAND # undef HAS_POLL # endif #endif /* Is time() portable everywhere? Hope so! XXX */ static NV fallback_NVtime() { return time(0); } #include "Event.h" /* The following is for very simplistic memory leak detection. */ #define MAX_MEMORYCOUNT 20 static int MemoryCount[MAX_MEMORYCOUNT]; static void dbg_count_memory(int id, int cnt) { assert(id >= 0 && id < MAX_MEMORYCOUNT); MemoryCount[id] += cnt; } #if EVENT_MEMORY_DEBUG # define EvNew(id, ptr, size, type) dbg_count_memory(id,1); New(0,ptr,size,type) # define EvFree(id, ptr) STMT_START { dbg_count_memory(id,-1); safefree(ptr); } STMT_END #else # define EvNew(x, ptr, size, type) New(0,ptr,size,type) # define EvFree(id, ptr) safefree(ptr) #endif static int LoopLevel, ExitLevel; static int ActiveWatchers=0; /* includes WaACTIVE + queued events */ static int WarnCounter=16; /*XXX nuke */ static SV *DebugLevel; static SV *Eval; static pe_event_stats_vtbl Estat; /* IntervalEpsilon should be equal to the clock's sleep resolution (poll or select) times two. It probably needs to be bigger if you turn on lots of debugging? Can determine this dynamically? XXX */ static NV IntervalEpsilon = 0.0002; static int TimeoutTooEarly=0; static struct EventAPI api; #define NVtime() (*api.NVtime)() static int pe_sys_fileno(SV *sv, char *context); static void queueEvent(pe_event *ev); static void dequeEvent(pe_event *ev); static void pe_watcher_cancel(pe_watcher *ev); static void pe_watcher_suspend(pe_watcher *ev); static void pe_watcher_resume(pe_watcher *ev); static void pe_watcher_now(pe_watcher *ev); static void pe_watcher_start(pe_watcher *ev, int repeat); static void pe_watcher_stop(pe_watcher *ev, int cancel_events); static char*pe_watcher_on(pe_watcher *wa, int repeat); static void pe_watcher_off(pe_watcher *wa); /* The newHVhv in perl seems to mysteriously break in some cases. Here is a simple and safe (but maybe slow) implementation. */ #ifdef newHVhv # undef newHVhv #endif #define newHVhv event_newHVhv static HV *event_newHVhv(HV *ohv) { register HV *hv = newHV(); register HE *entry; hv_iterinit(ohv); /* NOTE: this resets the iterator */ while (entry = hv_iternext(ohv)) { hv_store(hv, HeKEY(entry), HeKLEN(entry), SvREFCNT_inc(HeVAL(entry)), HeHASH(entry)); } return hv; } static void pe_watcher_STORE_FALLBACK(pe_watcher *wa, SV *svkey, SV *nval) { if (!wa->FALLBACK) wa->FALLBACK = newHV(); hv_store_ent(wa->FALLBACK, svkey, SvREFCNT_inc(nval), 0); } /***************** STATS */ static int StatsInstalled=0; static void pe_install_stats(pe_event_stats_vtbl *esvtbl) { ++StatsInstalled; Copy(esvtbl, &Estat, 1, pe_event_stats_vtbl); Estat.on=0; } static void pe_collect_stats(int yes) { if (!StatsInstalled) croak("collect_stats: no event statistics are available"); Estat.on = yes; } #ifdef HAS_GETTIMEOFDAY NV null_loops_per_second(int sec) { /* This should be more realistic. It is used to normalize the benchmark against some theoretical perfect event loop. */ struct timeval start_tm, done_tm; NV elapse; unsigned count=0; int fds[2]; if (pipe(fds) != 0) croak("pipe"); gettimeofday(&start_tm, 0); do { #ifdef HAS_POLL struct pollfd map[2]; Zero(map, 2, struct pollfd); map[0].fd = fds[0]; map[0].events = POLLIN | POLLOUT; map[0].revents = 0; map[1].fd = fds[1]; map[1].events = POLLIN | POLLOUT; map[1].revents = 0; poll(map, 2, 0); #elif defined(HAS_SELECT) struct timeval null; fd_set rfds, wfds, efds; FD_ZERO(&rfds); FD_ZERO(&wfds); FD_ZERO(&efds); FD_SET(fds[0], &rfds); FD_SET(fds[0], &wfds); FD_SET(fds[1], &rfds); FD_SET(fds[1], &wfds); null.tv_sec = 0; null.tv_usec = 0; select(3,&rfds,&wfds,&efds,&null); #else # error #endif ++count; gettimeofday(&done_tm, 0); elapse = (done_tm.tv_sec - start_tm.tv_sec + (done_tm.tv_usec - start_tm.tv_usec) / 1000000); } while(elapse < sec); close(fds[0]); close(fds[1]); return count/sec; } #else /* !HAS_GETTIMEOFDAY */ NV null_loops_per_second(int sec) { croak("sorry, gettimeofday is not available"); } #endif #include "typemap.c" #include "timeable.c" #include "hook.c" #include "ev.c" #include "watcher.c" #include "idle.c" #include "timer.c" #include "io.c" #include "unix.c" #include "var.c" #include "signal.c" #include "tied.c" #include "group.c" #include "generic.c" #include "queue.c" MODULE = Event PACKAGE = Event PROTOTYPES: DISABLE BOOT: LoopLevel = ExitLevel = 0; DebugLevel = SvREFCNT_inc(perl_get_sv("Event::DebugLevel", 1)); Eval = SvREFCNT_inc(perl_get_sv("Event::Eval", 1)); Estat.on=0; boot_timeable(); boot_hook(); boot_pe_event(); boot_pe_watcher(); boot_idle(); boot_timer(); boot_io(); boot_devpoll(); boot_var(); boot_tied(); boot_signal(); boot_group(); boot_generic(); boot_queue(); { SV *apisv; api.Ver = EventAPI_VERSION; api.start = pe_watcher_start; api.queue = queueEvent; api.now = pe_watcher_now; api.suspend = pe_watcher_suspend; api.resume = pe_watcher_resume; api.stop = pe_watcher_stop; api.cancel = pe_watcher_cancel; api.tstart = pe_timeable_start; api.tstop = pe_timeable_stop; api.NVtime = fallback_NVtime; api.new_idle = (pe_idle* (*)(HV*,SV*)) pe_idle_allocate; api.new_timer = (pe_timer* (*)(HV*,SV*)) pe_timer_allocate; api.new_io = (pe_io* (*)(HV*,SV*)) pe_io_allocate; api.new_var = (pe_var* (*)(HV*,SV*)) pe_var_allocate; api.new_signal = (pe_signal*(*)(HV*,SV*)) pe_signal_allocate; api.add_hook = capi_add_hook; api.cancel_hook = pe_cancel_hook; api.install_stats = pe_install_stats; api.collect_stats = pe_collect_stats; api.AllWatchers = &AllWatchers; api.watcher_2sv = watcher_2sv; api.sv_2watcher = sv_2watcher; api.event_2sv = event_2sv; api.sv_2event = sv_2event; api.unloop = pe_unloop; api.unloop_all = pe_unloop_all; api.sv_2interval = sv_2interval; api.events_mask_2sv = events_mask_2sv; api.sv_2events_mask = sv_2events_mask; apisv = perl_get_sv("Event::API", 1); sv_setiv(apisv, (IV)&api); SvREADONLY_on(apisv); } void _add_hook(type, code) char *type SV *code CODE: pe_add_hook(type, 1, code, 0); /* would be nice to return new pe_qcallback* XXX */ int _timeout_too_early() CODE: RETVAL = TimeoutTooEarly; TimeoutTooEarly=0; OUTPUT: RETVAL void _memory_counters() PPCODE: { #ifdef EVENT_MEMORY_DEBUG int xx; for (xx=0; xx < MAX_MEMORYCOUNT; xx++) XPUSHs(sv_2mortal(newSViv(MemoryCount[xx]))); #endif } void _incr_looplevel() PPCODE: ++LoopLevel; ++ExitLevel; void _decr_looplevel() PPCODE: --LoopLevel; void unloop(...) CODE: pe_unloop(items? ST(0) : &PL_sv_undef); void unloop_all(...) CODE: pe_unloop_all(items? ST(0) : &PL_sv_undef); bool cache_time_api() CODE: SV **svp = hv_fetch(PL_modglobal, "Time::NVtime", 12, 0); if (!svp || !*svp || !SvIOK(*svp)) XSRETURN_NO; api.NVtime = INT2PTR(NV(*)(), SvIV(*svp)); XSRETURN_YES; NV time() PROTOTYPE: CODE: RETVAL = NVtime(); OUTPUT: RETVAL void sleep(tm) NV tm; PROTOTYPE: $ CODE: pe_sys_sleep(tm); NV null_loops_per_second(sec) int sec void all_watchers() PROTOTYPE: PPCODE: pe_watcher *ev; if (!AllWatchers.next) return; ev = (pe_watcher*) AllWatchers.next->self; while (ev) { XPUSHs(watcher_2sv(ev)); ev = (pe_watcher*) ev->all.next->self; } void all_idle() PROTOTYPE: PPCODE: pe_watcher *ev; if (!Idle.prev) return; ev = (pe_watcher*) Idle.prev->self; while (ev) { XPUSHs(watcher_2sv(ev)); ev = (pe_watcher*) ((pe_idle*)ev)->iring.prev->self; } void all_running() PROTOTYPE: PPCODE: int fx; for (fx = CurCBFrame; fx >= 0; fx--) { pe_watcher *ev = (CBFrame + fx)->ev->up; /* XXX */ XPUSHs(watcher_2sv(ev)); if (GIMME_V != G_ARRAY) break; } void queue(...) PROTOTYPE: $;$ PREINIT: pe_watcher *wa; pe_event *ev; PPCODE: wa = (pe_watcher*) sv_2watcher(ST(0)); if (items == 1) { ev = (*wa->vtbl->new_event)(wa); ++ev->hits; } else if (items == 2) { if (SvNIOK(ST(1))) { ev = (*wa->vtbl->new_event)(wa); ev->hits += SvIV(ST(1)); } else { ev = (pe_event*) sv_2event(ST(1)); if (ev->up != wa) croak("queue: event doesn't match watcher"); } } queueEvent(ev); int one_event(...) PROTOTYPE: ;$ CODE: NV maxtm = 60; if (items == 1) maxtm = SvNV(ST(0)); RETVAL = safe_one_event(maxtm); OUTPUT: RETVAL void _loop() CODE: pe_check_recovery(); pe_reentry(); if (!ActiveWatchers) warn("Event: loop without active watchers"); while (ExitLevel >= LoopLevel && ActiveWatchers) { ENTER; SAVETMPS; one_event(60); FREETMPS; LEAVE; } LEAVE; /* reentry */ void queue_pending() CODE: pe_queue_pending(); int _empty_queue(prio) int prio CODE: pe_check_recovery(); pe_reentry(); while (pe_empty_queue(prio)); LEAVE; /* reentry */ void queue_time(prio) int prio PPCODE: NV max=0; int xx; if (prio < 0 || prio >= PE_QUEUES) croak("queue_time(%d) out of domain [0..%d]", prio, PE_QUEUES-1); for (xx=0; xx <= prio; xx++) if (max < QueueTime[xx]) max = QueueTime[xx]; XPUSHs(max? sv_2mortal(newSVnv(max)) : &PL_sv_undef); MODULE = Event PACKAGE = Event::Event::Io void pe_event::got() PPCODE: XPUSHs(sv_2mortal(events_mask_2sv(((pe_ioevent*)THIS)->got))); MODULE = Event PACKAGE = Event::Event::Dataful void pe_event::data() PPCODE: XPUSHs(((pe_datafulevent*)THIS)->data); MODULE = Event PACKAGE = Event::Event void DESTROY(ref) SV *ref; CODE: { pe_event *THIS = (pe_event*) sv_2event(ref); if (WaDEBUGx(THIS) >= 3) { STRLEN n_a; warn("Event=0x%x '%s' DESTROY SV=0x%x", THIS, SvPV(THIS->up->desc, n_a), THIS->mysv? SvRV(THIS->mysv) : 0); } (*THIS->vtbl->dtor)(THIS); } void pe_event::mom() PPCODE: if (--WarnCounter >= 0) warn("'mom' renamed to 'w'"); XPUSHs(watcher_2sv(THIS->up)); void pe_event::w() PPCODE: XPUSHs(watcher_2sv(THIS->up)); void pe_event::hits() PPCODE: XPUSHs(sv_2mortal(newSViv(THIS->hits))); void pe_event::prio() PPCODE: XPUSHs(sv_2mortal(newSViv(THIS->prio))); MODULE = Event PACKAGE = Event::Watcher void DESTROY(ref) SV *ref; CODE: { pe_watcher *THIS = (pe_watcher*) sv_2watcher(ref); assert(THIS); if (THIS->mysv) { THIS->mysv=0; if (WaCANDESTROY(THIS)) /*mysv*/ (*THIS->vtbl->dtor)(THIS); } } void pe_watcher::pending() PPCODE: { if (GIMME_V == G_ARRAY) { pe_event *ev = (pe_event *) THIS->events.prev->self; while (ev) { XPUSHs(event_2sv(ev)); ev = (pe_event*) ev->peer.prev->self; } } else { XPUSHs(THIS->events.next->self? &PL_sv_yes : &PL_sv_no); } } void pe_watcher::again() CODE: pe_watcher_start(THIS, 1); void pe_watcher::start() CODE: pe_watcher_start(THIS, 0); void pe_watcher::suspend(...) CODE: if (items == 2) { if (sv_true(ST(1))) pe_watcher_suspend(THIS); else pe_watcher_resume(THIS); } else { warn("Ambiguous use of suspend"); /*XXX*/ pe_watcher_suspend(THIS); XSRETURN_YES; } void pe_watcher::resume() CODE: warn("Please use $w->suspend(0) instead of resume"); /* DEPRECATED */ pe_watcher_resume(THIS); void pe_watcher::stop() CODE: pe_watcher_stop(THIS, 1); void pe_watcher::cancel() CODE: pe_watcher_cancel(THIS); void pe_watcher::now() CODE: pe_watcher_now(THIS); void pe_watcher::use_keys(...) PREINIT: PPCODE: warn("use_keys is deprecated"); void pe_watcher::is_running(...) PPCODE: XPUSHs(sv_2mortal(newSViv(THIS->running))); void pe_watcher::is_active(...) PPCODE: PUTBACK; XPUSHs(boolSV(WaACTIVE(THIS))); void pe_watcher::is_suspended(...) PPCODE: PUTBACK; XPUSHs(boolSV(WaSUSPEND(THIS))); void pe_watcher::is_cancelled(...) PPCODE: PUTBACK; XPUSHs(boolSV(WaCANCELLED(THIS))); void pe_watcher::cb(...) PPCODE: PUTBACK; _watcher_callback(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::cbtime(...) PPCODE: PUTBACK; _watcher_cbtime(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::desc(...) PPCODE: PUTBACK; _watcher_desc(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::debug(...) PPCODE: PUTBACK; _watcher_debug(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::prio(...) PPCODE: PUTBACK; _watcher_priority(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::reentrant(...) PPCODE: PUTBACK; _watcher_reentrant(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::repeat(...) PPCODE: PUTBACK; _watcher_repeat(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::max_cb_tm(...) PPCODE: PUTBACK; _watcher_max_cb_tm(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::Watcher::Tied void allocate(clname, temple) SV *clname SV *temple PPCODE: if (!SvROK(temple)) croak("Bad template"); XPUSHs(watcher_2sv(pe_tied_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::hard(...) PPCODE: PUTBACK; _timeable_hard(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::at(...) PPCODE: PUTBACK; _tied_at(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::flags(...) PPCODE: PUTBACK; _tied_flags(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::idle void allocate(clname, temple) SV *clname; SV *temple; PPCODE: if (!SvROK(temple)) croak("Bad template"); XPUSHs(watcher_2sv(pe_idle_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::hard(...) PPCODE: PUTBACK; _timeable_hard(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::max(...) PPCODE: PUTBACK; _idle_max_interval(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::min(...) PPCODE: PUTBACK; _idle_min_interval(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::timer void allocate(clname, temple) SV *clname; SV *temple; PPCODE: XPUSHs(watcher_2sv(pe_timer_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::at(...) PPCODE: PUTBACK; _timer_at(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::hard(...) PPCODE: PUTBACK; _timeable_hard(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::interval(...) PPCODE: PUTBACK; _timer_interval(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::io void allocate(clname, temple) SV *clname; SV *temple; PPCODE: if (!SvROK(temple)) croak("Bad template"); XPUSHs(watcher_2sv(pe_io_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::poll(...) PPCODE: PUTBACK; _io_poll(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::fd(...) PPCODE: PUTBACK; _io_handle(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::timeout(...) PPCODE: PUTBACK; _io_timeout(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::timeout_cb(...) PPCODE: PUTBACK; _io_timeout_cb(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::var void allocate(clname, temple) SV *clname; SV *temple; PPCODE: XPUSHs(watcher_2sv(pe_var_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::var(...) PPCODE: PUTBACK; _var_variable(THIS, items == 2? ST(1) : 0); /* don't mortalcopy!! */ SPAGAIN; void pe_watcher::poll(...) PPCODE: PUTBACK; _var_events(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::signal void allocate(clname, temple) SV *clname; SV *temple; PPCODE: XPUSHs(watcher_2sv(pe_signal_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::signal(...) PPCODE: PUTBACK; _signal_signal(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::group void allocate(clname, temple) SV *clname; SV *temple; PPCODE: XPUSHs(watcher_2sv(pe_group_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::timeout(...) PPCODE: PUTBACK; _group_timeout(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::add(...) PPCODE: PUTBACK; _group_add(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; void pe_watcher::del(...) PPCODE: PUTBACK; _group_del(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::generic void allocate(clname, temple) SV *clname; SV *temple; PPCODE: XPUSHs(watcher_2sv(pe_generic_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void pe_watcher::source(...) PPCODE: PUTBACK; _generic_source(THIS, items == 2? sv_mortalcopy(ST(1)) : 0); SPAGAIN; MODULE = Event PACKAGE = Event::generic::Source void allocate(clname, temple) SV *clname; SV *temple; PPCODE: if (!SvROK(temple)) croak("Bad template"); XPUSHs(genericsrc_2sv(pe_genericsrc_allocate(gv_stashsv(clname, 1), SvRV(temple)))); void DESTROY(ref) SV *ref; CODE: { pe_genericsrc_dtor(sv_2genericsrc(ref)); } void pe_genericsrc::event(...) PPCODE: pe_genericsrc_event(THIS, items >= 2 ? sv_mortalcopy(ST(1)) : &PL_sv_undef); Event-1.21/MANIFEST0000644000175000017500000000200311260761177013216 0ustar joshuajoshuaANNOUNCE c/ev.c c/generic.c c/group.c c/hook.c c/idle.c c/io.c c/queue.c c/signal.c c/tied.c c/timeable.c c/timer.c c/typemap.c c/unix.c c/var.c c/watcher.c ChangeLog demo/echo.t demo/group.t demo/idle2.t demo/msg.pm demo/perlqt.t demo/process.pm demo/queue_pending.t demo/rand_interval.t demo/readline.t demo/repeat.t demo/semaphore.pm Event.h Event.xs INSTALL lib/Event.pm lib/Event.pod lib/Event/EventAPI.h lib/Event/generic.pm lib/Event/generic.pod lib/Event/group.pm lib/Event/idle.pm lib/Event/io.pm lib/Event/MakeMaker.pm lib/Event/signal.pm lib/Event/timer.pm lib/Event/type.pm lib/Event/typemap lib/Event/var.pm lib/Event/Watcher.pm Makefile.PL MANIFEST MANIFEST.SKIP META.yml ppport.h README README.EV t/attach_to.t t/bored.t t/callback.t t/data.t t/delete.t t/eval.t t/fifo.t t/generic.t t/group.t t/hook.t t/hup.t t/idle.t t/io.t t/leak.t t/leak2.t t/loop.t t/now.t t/reenter.t t/signal.t t/timeout_cb.t t/timer.t t/unconfigured.t t/var.t TODO Tutorial.pdf Tutorial.pdf-errata.txt util/bench.pl util/filehandle.txt Event-1.21/ppport.h0000644000175000017500000001727410624507753013603 0ustar joshuajoshua #ifndef _P_P_PORTABILITY_H_ #define _P_P_PORTABILITY_H_ /* Perl/Pollution/Portability Version 1.0007 */ /* Copyright (C) 1999, Kenneth Albanowski. This code may be used and distributed under the same license as any version of Perl. */ /* For the latest version of this code, please retreive the Devel::PPPort module from CPAN, contact the author at , or check with the Perl maintainers. */ /* If you needed to customize this file for your project, please mention your changes, and visible alter the version number. */ /* In order for a Perl extension module to be as portable as possible across differing versions of Perl itself, certain steps need to be taken. Including this header is the first major one, then using dTHR is all the appropriate places and using a PL_ prefix to refer to global Perl variables is the second. */ /* If you use one of a few functions that were not present in earlier versions of Perl, please add a define before the inclusion of ppport.h for a static include, or use the GLOBAL request in a single module to produce a global definition that can be referenced from the other modules. Function: Static define: Extern define: newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL */ /* To verify whether ppport.h is needed for your module, and whether any special defines should be used, ppport.h can be run through Perl to check your source code. Simply say: perl -x ppport.h *.c *.h *.xs foo/*.c [etc] The result will be a list of patches suggesting changes that should at least be acceptable, if not necessarily the most efficient solution, or a fix for all possible problems. It won't catch where dTHR is needed, and doesn't attempt to account for global macro or function definitions, nested includes, typemaps, etc. In order to test for the need of dTHR, please try your module under a recent version of Perl that has threading compiled-in. */ /* #!/usr/bin/perl @ARGV = ("*.xs") if !@ARGV; %badmacros = %funcs = %macros = (); $replace = 0; foreach () { $funcs{$1} = 1 if /Provide:\s+(\S+)/; $macros{$1} = 1 if /^#\s*define\s+([a-zA-Z0-9_]+)/; $replace = $1 if /Replace:\s+(\d+)/; $badmacros{$2}=$1 if $replace and /^#\s*define\s+([a-zA-Z0-9_]+).*?\s+([a-zA-Z0-9_]+)/; $badmacros{$1}=$2 if /Replace (\S+) with (\S+)/; } foreach $filename (map(glob($_),@ARGV)) { unless (open(IN, "<$filename")) { warn "Unable to read from $file: $!\n"; next; } print "Scanning $filename...\n"; $c = ""; while () { $c .= $_; } close(IN); $need_include = 0; %add_func = (); $changes = 0; $has_include = ($c =~ /#.*include.*ppport/m); foreach $func (keys %funcs) { if ($c =~ /#.*define.*\bNEED_$func(_GLOBAL)?\b/m) { if ($c !~ /\b$func\b/m) { print "If $func isn't needed, you don't need to request it.\n" if $changes += ($c =~ s/^.*#.*define.*\bNEED_$func\b.*\n//m); } else { print "Uses $func\n"; $need_include = 1; } } else { if ($c =~ /\b$func\b/m) { $add_func{$func} =1 ; print "Uses $func\n"; $need_include = 1; } } } if (not $need_include) { foreach $macro (keys %macros) { if ($c =~ /\b$macro\b/m) { print "Uses $macro\n"; $need_include = 1; } } } foreach $badmacro (keys %badmacros) { if ($c =~ /\b$badmacro\b/m) { $changes += ($c =~ s/\b$badmacro\b/$badmacros{$badmacro}/gm); print "Uses $badmacros{$badmacro} (instead of $badmacro)\n"; $need_include = 1; } } if (scalar(keys %add_func) or $need_include != $has_include) { if (!$has_include) { $inc = join('',map("#define NEED_$_\n", sort keys %add_func)). "#include \"ppport.h\"\n"; $c = "$inc$c" unless $c =~ s/#.*include.*XSUB.*\n/$&$inc/m; } elsif (keys %add_func) { $inc = join('',map("#define NEED_$_\n", sort keys %add_func)); $c = "$inc$c" unless $c =~ s/^.*#.*include.*ppport.*$/$inc$&/m; } if (!$need_include) { print "Doesn't seem to need ppport.h.\n"; $c =~ s/^.*#.*include.*ppport.*\n//m; } $changes++; } if ($changes) { open(OUT,">/tmp/ppport.h.$$"); print OUT $c; close(OUT); open(DIFF, "diff -u $filename /tmp/ppport.h.$$|"); while () { s!/tmp/ppport\.h\.$$!$filename.patched!; print STDOUT; } close(DIFF); unlink("/tmp/ppport.h.$$"); } else { print "Looks OK\n"; } } __DATA__ */ #ifndef PERL_REVISION # ifndef __PATCHLEVEL_H_INCLUDED__ # include "patchlevel.h" # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) #ifndef ERRSV # define ERRSV perl_get_sv("@",FALSE) #endif #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) /* Replace: 1 */ # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes # define PL_sv_no sv_no # define PL_na na # define PL_stdingv stdingv # define PL_hints hints # define PL_curcop curcop # define PL_curstash curstash # define PL_copline copline # define PL_Sv Sv /* Replace: 0 */ #endif #ifndef dTHR # ifdef WIN32 # define dTHR extern int Perl___notused # else # define dTHR extern int errno # endif #endif #ifndef dTHX # define dTHX dTHR # define pTHX_ # define aTHX_ #endif #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif #ifndef gv_stashpvn # define gv_stashpvn(str,len,flags) gv_stashpv(str,flags) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0)) #endif #ifndef newRV_inc /* Replace: 1 */ # define newRV_inc(sv) newRV(sv) /* Replace: 0 */ #endif #ifndef newRV_noinc # ifdef __GNUC__ # define newRV_noinc(sv) \ ({ \ SV *nsv = (SV*)newRV(sv); \ SvREFCNT_dec(sv); \ nsv; \ }) # else # if defined(CRIPPLED_CC) || defined(USE_THREADS) static SV * newRV_noinc (SV * sv) { SV *nsv = (SV*)newRV(sv); SvREFCNT_dec(sv); return nsv; } # else # define newRV_noinc(sv) \ ((PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv) # endif # endif #endif /* Provide: newCONSTSUB */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63)) #if defined(NEED_newCONSTSUB) static #else extern void newCONSTSUB _((HV * stash, char * name, SV *sv)); #endif #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) void newCONSTSUB(stash,name,sv) HV *stash; char *name; SV *sv; { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)) /* before 5.003_22 */ start_subparse(), #else # if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22) /* 5.003_22 */ start_subparse(0), # else /* 5.003_23 onwards */ start_subparse(FALSE, 0), # endif #endif newSVOP(OP_CONST, 0, newSVpv(name,0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* newCONSTSUB */ #endif /* _P_P_PORTABILITY_H_ */ Event-1.21/t/0002755000175000017500000000000012062657023012332 5ustar joshuajoshuaEvent-1.21/t/hook.t0000644000175000017500000000053010624507753013461 0ustar joshuajoshua# hook -*-perl-*- use strict; use Test; plan test => 4; use Event qw(sweep sleep); my ($p,$c,$ac,$cb) = (0)x4; Event::add_hooks(prepare => sub { ++$p }, check => sub { ++$c }, asynccheck => sub { ++$ac }, callback => sub { ++$cb }); Event->timer(after => 0, cb => sub {}); sleep .5; sweep(); ok $p,1; ok $c,1; ok $ac,1; ok $cb,1; Event-1.21/t/var.t0000644000175000017500000000144010624507753013312 0ustar joshuajoshua# watch -*-perl-*- use strict; use Test; plan test => 6; use Event qw(loop unloop); # $Event::DebugLevel = 2; my $var1 = 1; my $var2 = 3; my $var3 = 0; Event->var(var => \$var1, cb => sub { my $var = shift->w->var; ok $$var, 2; $var2++; }, desc => "var1" ); Event->var(var => \$var1, cb => sub { ok $var1, 2 }); Event->var(var => \$var2, cb => sub { $var3 = 3; ok $var2, 4; unloop; }, desc => "var2"); Event->var(var => \$var3, async => 1, cb => sub { ok $var3, 3; }); Event->idle(cb => sub { ok $var1, 1; $var1++; }); my $var4 = 0; my $e = Event->var(poll => 'r', var => \$var4, cb => sub { my $e = shift; ok $e->hits, 1; }); my $str = "$var4"; #read $var4 = 5; #write loop; Event-1.21/t/delete.t0000644000175000017500000000043310624507753013765 0ustar joshuajoshua#!./perl -w use strict; use Test; plan tests => 1; use Event 0.40 qw(loop unloop); package Foo; my $foo=0; sub DESTROY { ++$foo } package main; my $e = Event->timer(after => 0, cb => sub { delete shift->w->{foo}; unloop }); $e->{foo} = bless [], 'Foo'; loop(); ok $foo; Event-1.21/t/attach_to.t0000644000175000017500000000046210624507753014473 0ustar joshuajoshua#!./perl -w use strict; use Test; plan tests => 3; use Event 0.53; # $Event::DebugLevel = 3; my $array = Event->timer(attach_to => [0,1,2], after => 1, cb => \&die); ok $array->[2], 2; ok $array->interval, 1; eval { Event->timer(attach_to => bless([]), after => 1, cb => \&die); }; ok $@, '/blessed/'; Event-1.21/t/leak.t0000644000175000017500000000122210624507753013434 0ustar joshuajoshua# leak -*-perl-*- use Test; plan test => 6; use Event qw(all_watchers); my @e = Event::all_watchers(); ok @e, 0; @e = Event::all_idle(); ok @e, 0; sub thrash { Event->idle(parked=>1)->cancel; Event->io(parked => 1)->cancel; Event->signal(parked=>1)->cancel; Event->timer(parked=>1)->cancel; my $var = 1; Event->var(parked=>1)->cancel; } for (1..2) { thrash(); } my $got = join(', ', map { ref } all_watchers()) || 'None'; ok($got, 'None'); { my $io = Event->io(parked => 1); ok !$io->is_cancelled; $io->cancel for 1..3; #shouldn't crash! ok $io->is_cancelled; eval { $io->start }; ok $@, '/cancelled/'; } Event-1.21/t/group.t0000644000175000017500000000057410624507753013665 0ustar joshuajoshua#!./perl -w use Test; plan test => 3; use Event; require Event::group; my $gp = Event->group(timeout => 5, cb => \&die); my $undef; eval { $gp->add(\$undef) }; ok $@, '/not a thing/'; eval { $gp->add(\$gp) }; ok $@, '/not a thing/'; eval { $gp->add($gp) }; ok $@, '/itself/'; for (1..10) { $gp->add(Event->timer(after => 5, cb => \&die)); } # need more tests here! XXX Event-1.21/t/callback.t0000644000175000017500000000154010624507753014257 0ustar joshuajoshua#!./perl -w use strict; use Test; plan tests => 6; use Event 0.65; my $invoked_method=0; sub method { ++$invoked_method; } my $main = bless []; Event->timer(after => 0, cb => \&method); Event->timer(after => 0, cb => ['main', 'method']); Event->timer(after => 0, cb => [$main, 'method']); { local $SIG{__WARN__} = sub { ok $_[0], '/nomethod/'; }; Event->timer(desc => 'nomethod', after => 0, cb => [$main, 'nomethod']); } eval { Event->timer(after => 0, cb => ['main']); }; ok $@, '/Callback/'; { local $Event::DIED = sub { my ($run,$err) = @_; ok $run->w->desc, 'nomethod'; ok $err, '/object method/'; }; local $SIG{__WARN__} = sub {}; Event::loop(); } { my $warn=''; local $SIG{__WARN__} = sub { $warn .= $_[0]; }; Event::loop(); ok $warn, '/loop without active watchers/'; } ok $invoked_method, 3; Event-1.21/t/timeout_cb.t0000644000175000017500000000075210624507753014661 0ustar joshuajoshua# -*-perl-*- use Test; plan tests => 6; use Event qw(loop); sub step1 { my ($e) = @_; ok $e->got, 't'; $e->w->timeout_cb(undef); } sub step2 { my ($e) = @_; ok $e->got, 't'; $e->w->cancel; } Event->io(timeout => .1, timeout_cb => \&step1, cb => \&step2); sub method { step1($_[1]); } Event->io(timeout => .1, timeout_cb => ['main','method'], cb => \&step2); Event->io(timeout => .1, timeout_cb => [bless([],'main'),'method'], cb => \&step2); loop; Event-1.21/t/hup.t0000644000175000017500000000125611564765146013331 0ustar joshuajoshua#!./perl -w BEGIN { if ($^O eq 'MSWin32') { print "1..0 # skipped; Win32 is too strange\n"; exit; } } # contributed by Gisle Aas use Test; plan test => 1; use Event qw(loop unloop); $| = 1; my $pid = open(PIPE, "-|"); die unless defined $pid; unless ($pid) { # child for (1..100) { print "."; } print "\n"; exit; } my $bytes = 0; Event->io(poll => "r", fd => \*PIPE, cb => sub { my $e = shift; my $buf; my $n = sysread(PIPE, $buf, 10); $bytes += $n; #print "Got $n bytes\n"; unloop() unless $n; }); loop(); ok $bytes, 101; Event-1.21/t/loop.t0000644000175000017500000000122310624507753013472 0ustar joshuajoshua# -*-perl-*- use strict; use Test; plan tests => 3; use Event qw(loop unloop); # kill 2, $$; # $Event::DebugLevel = 4; my %got; my $sleep = 1; use vars qw($sleeping); $sleeping=0; my $early = Event->idle(desc => 'early', repeat => 1, cb => sub { return if !$sleeping; unloop 'early'; }); Event->idle(desc => "main", repeat => 1, reentrant => 0, cb => sub { my $e = shift; local $sleeping = 1; my $ret = loop($sleep); if (!exists $got{$ret}) { $got{$ret} = 1; if ($ret eq 'early') { $early->cancel; ok 1; } elsif ($ret == $sleep) { ok 1; } } unloop(0) if keys %got == 2; }); ok loop, 0; Event-1.21/t/generic.t0000644000175000017500000000125710624507753014144 0ustar joshuajoshua#!./perl -w use Test; plan test => 10; use Event; require Event::generic; my $src = Event::generic::Source->new; ok $src; my $w0 = Event->generic(parked => 1); ok $w0; eval { $w0->source(undef); }; ok $@, ""; eval { $w0->source($src); }; ok $@, ""; eval { $w0->source(123); }; ok $@, qr/not a reference/; eval { $w0->source(\123); }; ok $@, qr/not a thing/; eval { $w0->source($w0); }; ok $@, qr/Can't find event magic/; sub second_cb($) { my($e) = @_; ok $e->data, 456; $e->w->stop; } $w0->cb(sub($) { my($e) = @_; ok $e->data, 123; Event->generic(source => $src, cb => \&second_cb); $e->w->cb(\&second_cb); $src->event(456); }); $w0->start; $src->event(123); Event::loop; Event-1.21/t/timer.t0000644000175000017500000000212610624507753013644 0ustar joshuajoshua# the time for -*-perl-*- use Test; plan tests => 7; use Event qw(loop unloop); # $Event::DebugLevel = 3; #if (0) { my $count = 0; Event->timer(after => 0.5, interval => .1, nice => -1, cb => sub { ++$count }, desc => "counter"); my $when = time + 2; Event->timer(at => $when, cb => sub { ok $when, $_[0]->w->at; }, desc => "at"); my $again; Event->timer(after => .5, cb => sub { my $o=shift; ok 1; if (!$again) { $again=1; $o->w->again; $o->w->again; #should be harmless } }, desc => "after"); my $ok = Event->timer(interval => .5, cb => sub { unloop('ok') if $count > 30 }, desc => "exit"); ok abs($ok->at - time) < 3, 1, "diff was ".($ok->at - time); my $long; for (1..10) { $long = Event->timer(after => 60+rand(60), cb => sub { ok 0; }); } $long->cb(sub { ok 1 }); $long->at(time); ok loop(), 'ok'; $_->cancel for Event::all_watchers(); #} my $depth=0; Event->timer(interval => .01, cb => sub { if (++$depth < 2) { loop(); } else { Event::unloop_all('reentrant'); } }); ok loop(), 'reentrant'; Event-1.21/t/eval.t0000644000175000017500000000150210624507753013450 0ustar joshuajoshua# stop -*-perl-*- ? use Carp;# 'verbose'; use Test; plan tests => 7; use Event qw(all_running loop unloop sweep); # $Event::DebugLevel = 3; my $die = Event->idle(cb => sub { die "died\n" }, desc => 'killer'); my $status = 'ok'; $Event::DIED = sub { my ($e,$why) = @_; ok $e->w->desc, 'killer'; chop $why; ok $why, 'died'; if ($Event::Eval == 0) { $Event::Eval = 1; $die->again } elsif ($Event::Eval == 1) { unloop $status; $Event::Eval = 0; } }; ok loop(), $status; #----------------------------- { local $Event::DIED = sub { die }; local $SIG{__WARN__} = sub { ok $_[0], '/Event::DIED died/'; }; $die->now; sweep(); } { local $Event::DIED = \&Event::verbose_exception_handler; local $SIG{__WARN__} = sub { ok $_[0], '/died/'; }; $die->now; sweep(); } Event-1.21/t/idle.t0000644000175000017500000000135210624507753013441 0ustar joshuajoshua# idle daydreams of -*-perl-*- use Test; plan tests => 4; use Event qw(loop unloop); # $Event::Eval = 1; #$Event::DebugLevel = 0; package myobj; use Test; my $myobj; sub idle { my ($o,$e) = @_; if (!$myobj) { # see if method callbacks work ok $o, 'myobj'; ok $e->w->desc, __PACKAGE__; } ++$myobj; } Event->idle(cb => [__PACKAGE__,'idle'], desc => __PACKAGE__); package main; my $count=0; my $idle = Event->idle(desc => "exit", cb => sub { my $e = shift; ++$count; unloop() if $count > 2 && $myobj; }); ok ref($idle), 'Event::idle'; Event->idle(cb => sub { ok 0; Event->exit })->cancel; Event->idle(cb => sub { $idle->again }, repeat => 1, desc => "again"); ok !defined loop(); Event-1.21/t/now.t0000644000175000017500000000124410624507753013327 0ustar joshuajoshua# -*-perl-*- ASAP use Test; plan tests => 13; use Event qw(loop unloop); # $Event::DebugLevel = 3; my $c=0; Event->idle(repeat => 1, cb => sub { ++$c; unloop if $c >= 2; }) ->now; my $tm = Event->timer(after => 10, cb => sub { ok 1 }); ok !$tm->pending; $tm->stop; $tm->now; ok $tm->pending; my @e = $tm->pending; ok @e, 1; ok ref $e[0], 'Event::Event'; ok $e[0]->hits; ok $e[0]->w, $tm; $tm->prio($tm->prio + 1); $tm->now; $tm->prio($tm->prio - 1); $tm->now; $tm->now; @e = $tm->pending; # in order of occurance (FIFO) ok join('', map { $_->prio } @e), join('', $tm->prio, $tm->prio+1, $tm->prio, $tm->prio); loop; ok $c, 2; ok $tm->cbtime; Event-1.21/t/unconfigured.t0000644000175000017500000000067611601341772015215 0ustar joshuajoshua#!./perl -w use strict; use Test; plan test => 6; use Event; my @p = (cb=>\&die); eval { Event->io(@p) }; ok $@, '/unconfigured/'; eval { Event->signal(@p) }; ok $@, '/without signal/'; eval { Event->timer(@p) }; ok $@, '/unset/'; eval { Event->var(@p) }; ok $@, '/watching what/'; my $var = 1; eval { Event->var(@p, poll => 0, var => \$var) }; ok $@, '/without poll events/'; eval { Event->var(@p, var => \$]) }; ok $@, '/read\-only/'; Event-1.21/t/fifo.t0000644000175000017500000000114410624507753013446 0ustar joshuajoshua#!./perl -w # check FIFO dispatch of equal priority events use Test; plan test => 1; use Event; my @hit; sub cb { my ($e) = @_; push @hit, $e->w->desc; } my $t1 = Event->timer(desc => 1, after => 10, cb => \&cb); my $t2 = Event->timer(desc => 2, after => 10, cb => \&cb); my $t3 = Event->timer(desc => 3, after => 10, cb => \&cb); my $h4 = Event->timer(desc => 4, nice => -1, after => 10, cb => \&cb); my $h5 = Event->timer(desc => 5, nice => -1, after => 10, cb => \&cb); $t2->now; $h4->now; $t1->now; $t1->now; $t3->now; $h5->now; $t2->now; $t1->now; Event::loop(); ok join('', @hit), '45211321'; Event-1.21/t/io.t0000644000175000017500000000427211613676521013136 0ustar joshuajoshua# -*-perl-*- i/o use Config; BEGIN { if ($^O eq 'MSWin32') { print "1..0 # skipped; Win32 supports select() only on sockets\n"; exit; } } use Test; plan tests => 8; use Event qw(loop unloop); use Event::Watcher qw(R W); use Symbol; #$Event::DebugLevel = 3; eval { Event->io }; ok $@, "/nothing to watch/"; eval { Event->io(fd => \*STDIN, cb => \&die, poll => 0) }; ok $@, "/nothing to watch/"; my $cannot_detect_bogus_fd; if ($Config{osname} eq 'darwin' or $Config{osname} eq 'gnu' or $Config{archname} =~ m/^armv5tejl/) { # GNU/Hurd's poll returns with -EBADF which is accurate # but we cannot determine which fd is bad. $cannot_detect_bogus_fd = 'Cannot detect bogus file descriptors'; } my $noticed_bogus_fd=0; my $bogus_timeout=0; my $bogus; if (!$cannot_detect_bogus_fd) { $bogus = Event->io(desc => 'oops', poll => 'r', fd => 123, timeout => .1, cb => sub { ++$bogus_timeout; }); } $SIG{__WARN__} = sub { my $is_it = $_[0] =~ m/\'oops\' was unexpectedly/; if ($is_it) { ++$noticed_bogus_fd; } else { warn $_[0] } }; sub new_pipe { my ($cnt) = @_; my ($r,$w) = (gensym, gensym); pipe($r,$w); Event->io(desc => "r", poll => 'r', fd => $r, cb => sub { my $e = shift; my $w=$e->w; if ($e->got & R) { my $buf; my $got = sysread $w->fd, $buf, 1; die "sysread: $!" if !defined $got; die "sysread: pipe closed?" if $got == 0; ++$$cnt; } }); Event->io(desc => 'w', poll => 'w', fd => $w, cb => sub { my $e = shift; my $w=$e->w; if ($e->got & W) { my $got = syswrite $w->fd, '.', 1; die "syswrite: $!" if !defined $got; die "syswrite: pipe closed?" if $got == 0; } }); } my $count = 0; new_pipe(\$count); my $hit=0; my $once = Event->io(timeout => .01, repeat => 0, cb => sub { ++$hit }); Event->io(timeout => 2, repeat => 0, cb => sub { ok $count > 0; ok $hit, 1; ok $once->timeout, 0; unloop; }); loop(); skip $cannot_detect_bogus_fd, $noticed_bogus_fd, 1; skip $cannot_detect_bogus_fd, $bogus && !defined $bogus->fd; skip $cannot_detect_bogus_fd, $bogus_timeout > 0; Event-1.21/t/signal.t0000644000175000017500000000102411564765146014003 0ustar joshuajoshua# signal -*-perl-*- BEGIN { if ($^O eq 'MSWin32') { print "1..0 # skipped; kill() doesn't send signals on Win32\n"; exit; } } use Test; plan tests => 4; use Event qw(loop unloop); #$Event::DebugLevel = 3; my $count = 3; Event->signal( signal => 'USR1', cb => sub { my $e = shift; ok $e->w->signal, 'USR1'; ok $e->hits > 0; # threads can cause signal clumping unloop; } ); my $idle; $idle = Event->idle( cb => sub { kill 'USR1',$$; kill 'USR1',$$; ok 1; } ); loop; ok 1; Event-1.21/t/bored.t0000644000175000017500000000063211013424627013606 0ustar joshuajoshua# -*- perl -*- use Test; plan test => 5; use Event; # $Event::DebugLevel = 3; my $really_bored; my $w; $w = Event->timer(after => .5, parked => 1); ok !defined $w->cb; eval { $w->now() }; ok $@ =~ /callback unset/; $w->cb(sub { if (!$really_bored) { $w->again; $really_bored='yes'; } else { ok 1; } }); ok ref $w->cb, 'CODE'; $w->start; ok !defined Event::loop(); Event-1.21/t/data.t0000644000175000017500000000045310624507753013436 0ustar joshuajoshua#!./perl -w use Test; plan tests => 8; use Event; my $w = Event->idle(parked => 1, data => 'data'); ok $w->data, 'data'; ok !$w->private; ok $w->private(1); ok $w->private; package Grapes; use Test; ok $w->data, 'data'; ok !$w->private; ok $w->private(2), 2; package main; ok $w->private, 1; Event-1.21/t/reenter.t0000644000175000017500000000155511564765146014203 0ustar joshuajoshua# deep -*- perl -*- BEGIN { if ($^O eq 'MSWin32') { print "1..0 # skipped; Win32 supports select() only on sockets\n"; exit; } } use Test; plan test => 7; use Event qw(loop unloop one_event all_running); #$Event::DebugLevel = 4; # deep recursion my $rep; $rep = Event->io(fd => \*STDOUT, poll => 'w', cb => sub { loop() }); do { local $SIG{__WARN__} = sub {}; # COMMENT OUT WHEN DEBUGGING! ok !defined loop(); }; ok $rep->is_running, 0; # simple nested case my $nest=0; $rep->cb(sub { return if ++$nest > 10; one_event(); }); ok one_event(); # a bit more complex nested exception $nest=0; $rep->cb(sub { die 10 if ++$nest > 10; one_event() or die "not recursing"; }); $Event::DIED = sub { my $e = shift; ok $e->w, $rep; ok $e->w, all_running(); my @all = all_running; ok @all, $nest; unloop(); }; loop(); ok 1; Event-1.21/t/leak2.t0000644000175000017500000000204610624507753013523 0ustar joshuajoshua#!./perl -w # # Test script to check the memory consumption # of an Event loop which installs, handles and # cancels a number of IO watchers (recursively). # # For extra diagnostics, Event.pm can be built with # -DEVENT_MEMORY_DEBUG. # # If the script succeeds, the final memory check # replies something like this: # "1-29509-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0" # (all slots except of the first two ones should # be 0 - the second number may differ). # # J. Stenzel (perl@jochen-stenzel.de) # use Test; plan test => 2; use Event; # $Event::DebugLevel = 3; sub check {warn "[DBG] ", join('-', Event::_memory_counters), "\n";} sub iosub { for (my $l=0; $l<=5; $l++) { Event->io( fh => \*STDIO, timeout => "0.5$l", repeat => 1, cb => \&iosub, prio => 5); } $_[0]->w->cancel; } Event->io(fh => \*STDIO, timeout => 0.5, repeat => 1, cb => \&iosub, prio => 5); Event->timer(prio => 1, after => 3, cb => sub { $_->cancel foreach Event::all_watchers; ok !defined Event::all_watchers; } ); Event::loop(); ok 1;