pax_global_header00006660000000000000000000000064131420354100014503gustar00rootroot0000000000000052 comment=d71443fe4f2c35299f342e118f90caa4fe19ca74 rpyc-3.4.4/000077500000000000000000000000001314203541000124705ustar00rootroot00000000000000rpyc-3.4.4/.gitignore000066400000000000000000000001441314203541000144570ustar00rootroot00000000000000*.pyc .project .pydevproject .settings dist MANIFEST __pycache__ rpyc.egg-info *.egg *.class build/ rpyc-3.4.4/.travis.yml000066400000000000000000000013601314203541000146010ustar00rootroot00000000000000language: python dist: trusty # See: https://docs.travis-ci.com/user/languages/python/ python: - "2.6" - "2.7" - "3.3" - "3.4" - "3.5" - "3.6" - "3.7-dev" - "nightly" install: - pip install -e git+git://github.com/tomerfiliba/plumbum.git#egg=plumbum before_script: - "pip install paramiko || true" - "echo NoHostAuthenticationForLocalhost yes >> ~/.ssh/config" - "echo StrictHostKeyChecking no >> ~/.ssh/config" - "ssh-keygen -q -f ~/.ssh/id_rsa -N ''" - "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys" - "uname -a" - "hostname" - "python setup.py install" - "cd tests" script: nosetests -vv notifications: email: on_success: change on_failure: change rpyc-3.4.4/CHANGELOG.rst000066400000000000000000000270221314203541000145140ustar00rootroot000000000000003.4.4 ----- Date: 07.08.2017 * Fix refcount leakage when unboxing from cache (#196) * Fix TypeError when dispatching exceptions on py2 (unicode) * Respect ``rpyc_protocol_config`` for default Service getattr (#202) * Support unix domain sockets (#100,#208) * Use first accessible server in ``connect_by_service`` (#220) * Fix deadlock problem with logging (#207,#212) 3.4.3 ----- Date: 26.07.2017 * Add missing endpoints config in ThreadPoolServer (#222) * Fix jython support (#156,#171) * Improve documentation (#158,#185,#189,#198 and more) 3.4.2 ----- Date: 14.06.2017 * Fix ``export_function`` on python 3.6 3.4.1 ----- Date: 09.06.2017 * Fix issue high-cpu polling (#191,#218) * Fix filename argument in logging (#197) * Improved log messages (#191,#204) * Drop support for python 3.2 and py 2.5 3.4.0 ----- Date: 29.05.2017 Please excuse the briefity for this versions changelist. * Add keepalive interface [#151] * Various fixes: #136, #140, #143, #147, #149, #151, #159, #160, #166, #173, #176, #179, #174, #182, #183 and others. 3.3.0 ----- * RPyC integrates with `plumbum `_; plumbum is required for some features, like ``rpyc_classic.py`` and *zero deploy*, but the core of the library doesn't require it. It is, of course, advised to have it installed. * ``SshContext``, ``SshTunnel`` classes killed in favor of plumbum's SSH tunneling. The interface doesn't change much, except that ``ssh_connect`` now accept a ``plumbum.SshMachine`` instance instead of ``SshContext``. * Zero deploy: deploy RPyC to a remote machine over an SSH connection and form an SSH tunnel connected to it, in just one line of code. All you need is SSH access and a Python interpreter installed on the remote machine. * Dropping Python 2.4 support. RPyC now requires Python 2.5 - 3.3. * rpycd - a well-behaved daemon for ``rpyc_classic.py``, based on `python-daemon `_ * The ``OneShotServer`` is now exposed by ``rpyc_classic -m oneshot`` * ``scripts`` directory renamed ``bin`` * Introducing ``Splitbrain Python`` - running code on remote machines transparently. Although tested, it is still considered experimental. * Removing the ``BgServerThread`` and all polling/timeout hacks in favor of a "global background reactor thread" that handles all incoming transport from all connections. This should solve all threading issues once and for all. * Added ``MockClassicConnection`` - a mock RPyC "connection" that allows you to write code that runs either locally or remotely without modification * Added ``teleport_function`` 3.2.3 ----- * Fix (`issue #76 `_) for real this time * Fix issue with ``BgServingThread`` (`#89 `_) * Fix issue with ``ThreadPoolServer`` (`#91 `_) * Remove RPyC's ``excepthook`` in favor of chaining the exception's remote tracebacks in the exception class' ``__str__`` method. This solves numerous issues with logging and debugging. * Add ``OneShotServer`` * Add `UNIX domain sockets `_ 3.2.2 ----- * Windows: make SSH tunnels windowless (`#68 `_) * Fixes a compatibility issue with IronPython on Mono (`#72 `_) * Fixes an issue with introspection when an ``AttributeError`` is expected (`#71 `_) * The server now logs all exceptions (`#73 `_) * Forking server: call ``siginterrupt(False)`` in forked child (`#76 `_) * Shutting down the old wikidot site * Adding `Travis CI `_ integration 3.2.1 ----- * Adding missing import (`#52 `_) * Fixing site documentation issue (`#54 `_) * Fixing Python 3 incompatibilities (`#58 `_, `#59 `_, `#60 `_, `#61 `_, `#66 `_) * Fixing ``slice`` issue (`#62 `_) * Added the ``endpoints`` parameter to the config dict of connection (only on the server side) 3.2.0 ----- * Added support for IPv6 (`#28 `_) * Added SSH tunneling support (``ssh_connect``) * Added ``restricted`` object wrapping * Several fixes to ``AsyncResult`` and weak references * Added the ``ThreadPoolServer`` * Fixed some minor (harmless) races that caused tracebacks occasionally when server-threads terminated * Fixes issues `#8 `_, `#41 `_, `#42 `_, `#43 `_, `#46 `_, and `#49 `_. * Converted all ``CRLF`` to ``LF`` (`#40 `_) * Dropped TLSlite integration (`#45 `_). We've been dragging this corpse for too long. * **New documentation** (both the website and docstrings) written in **Sphinx** * The site has moved to `sourceforge `_. Wikidot had served us well over the past three years, but they began displaying way too many ads and didn't support uploading files over ``rsync``, which made my life hard. * New docs are part of the git repository. Updating the site is as easy as ``make upload`` * **Python 3.0-3.2** support 3.1.0 ------ What's New ^^^^^^^^^^ * Supports CPython 2.4-2.7, IronPython, and Jython * `tlslite `_ has been ported to python 2.5-2.7 (the original library targeted 2.3 and 2.4) * Initial python 3 support -- not finished! * Moves to a more conventional directory structure * Moves to more standard facilities (``logging``, ``nosetests``) * Solves a major performance issue with the ``BgServingThread`` (`#32 `_), by removing the contention between the two threads that share the connection * Fixes lots of issues concerning the ForkingServer (`#3 `_, `#7 `_, and `#15 `_) * Many small bug fixes (`#16 `_, `#13 `_, `#4 `_, etc.) * Integrates with the built-in ``ssl`` module for SSL support * ``rpyc_classic.py`` now takes several ``--ssl-xxx`` switches (see ``--help`` for more info) * Fixes typos, running pylint, etc. Breakage from 3.0.7 ^^^^^^^^^^^^^^^^^^^ * Removing egg builds (we're pure python, and eggs just messed up the build) * Package layout changed drastically, and some files were renamed * The ``servers/`` directory was renamed ``scripts/`` * ``classic_server.py`` was renamed ``rpyc_classic.py`` * They scripts now install to your python scripts directory (no longer part of the package), e.g. ``C:\python27\Scripts`` * ``rpyc_classic.py`` now takes ``--register`` in order to register, instead of ``--dont-register``, which was a silly choice. * ``classic.tls_connect``, ``factory.tls_connect`` were renamed ``tlslite_connect``, to distinguish it from the new ``ssl_connect``. 3.0.7 ----- * Moving to **git** as source control * Build script: more egg formats; register in `pypi `_ ; remove svn; auto-generate ``license.py`` as well * Cosmetic touches to ``Connection``: separate ``serve`` into ``_recv`` and ``dispatch`` * Shutdown socket before closing (``SHUT_RDWR``) to prevent ``TIME_WAIT`` and other problems with various Unixes * ``PipeStream``: use low-level file APIs (``os.read``, ``os.write``) to prevent stdio-level buffering that messed up ``select`` * ``classic_server.py``: open logfile for writing (was opened for reading) * ``registry_server.py``: type of ``timeout`` is now ``int`` (was ``str``) * ``utils/server.py``: better handling of sockets; fix python 2.4 syntax issue * ``ForkingServer``: re-register ``SIGCHLD`` handler after handling that signal, to support non-BSD-compliant platforms where after the invocation of the signal handler, the handler is reset 3.0.6 ----- * Handle metaclasses better in ``inspect_methods`` * ``vinegar.py``: handle old-style-class exceptions better; python 2.4 issues * ``VdbAuthenticator``: when loading files, open for read only; API changes (``from_dict`` instead of ``from_users``), ``from_file`` accepts open-mode * ``ForkingServer``: better handling of SIGCHLD 3.0.5 ----- * ``setup.py`` now also creates egg files * Slightly improved ``servers/vdbconf.py`` * Fixes to ``utis/server.py``: * The authenticator is now invoked by ``_accept_client``, which means it is invoked on the client's context (thread or child process). This solves a problem with the forking server having a TLS authenticator. * Changed the forking server to handle ``SIGCHLD`` instead of using double-fork. 3.0.4 ----- * Fix: ``inspect_methods`` used ``dir`` and ``getattr`` to inspect the given object; this caused a problem with premature activation of properties (as they are activated by ``getattr``). Now it inspects the object's type instead, following the MRO by itself, to avoid possible side effects. 3.0.3 ----- * Changed versioning scheme: now 3.0.3 instead of 3.03, and the version tuple is (3, 0, 3) * Added ``servers/vdbconf.py`` - a utility to manage verifier databases (used by ``tlslite``) * Added the ``--vdb`` switch to ``classic_server.py``, which invokes a secure server (TLS) with the given VDB file. 3.02 ---- * Authenticators: authenticated servers now store the credentials of the connection in conn._config.credentials * ``Registry``: added UDP and TCP registry servers and clients (``from rpyc.utils.registry import ...``) * Minor bug fixes * More tests * The test-suite now runs under python 2.4 too 3.01 ---- * Fixes some minor issues/bugs * The registry server can now be instantiated (no longer a singleton) and customized, and RPyC server can be customized to use the different registry. 3.00 ---- Known Issues ^^^^^^^^^^^^ * **comparison** - comparing remote and local objects will usually not work, but there's nothing to do about it. * **64bit platforms**: since channels use 32bit length field, you can't pass data/strings over 4gb. this is not a real limitation (unless you have a super-fast local network and tons of RAM), but as 64bit python becomes the defacto standard, I will upgrade channels to 64bit length field. * **threads** - in face of no better solution, and after consulting many people, I resorted to setting a timeout on the underlying recv(). This is not an elegant way, but all other solution required rewriting all sorts of threading primitives and were not necessarily deadlock/race-free. as the zen says, "practicality beats purity". * Windows - pipes supported, but Win32 pipes work like shit 3.00 RC2 -------- Known Issues ^^^^^^^^^^^^ * Windows - pipe server doesn't work rpyc-3.4.4/CONTRIBUTORS.rst000066400000000000000000000026021314203541000151570ustar00rootroot00000000000000v3.2.3 ^^^^^^ * Guy Rozendorn - backported lots of fixes from 3.3 branch * Alon Horev - UNIX domain socket patch v3.2.2 ^^^^^^ * Rotem Yaari - Add logging of exceptions to the protocol layer, investigate ``EINTR`` issue * Anselm Kruis - Make RPyC more introspection-friendly * RĂ¼diger Kessel - SSH on windows patch v3.2.1 ^^^^^^ * Robert Hayward - adding missing import * `pyscripter `_ - investigating python 3 incompatibilities * `xanep `_ - handling ``__cmp__`` correctly v3.2.0 ^^^^^^ * Alex - IPv6 support * Sponce - added the ``ThreadPoolServer``, several fixes to weak-references and ``AsyncResult`` * Sagiv Malihi - Bug fix in classic server * Miguel Alarcos - issue `#8 `_ * Pola Abram - Discovered several races when server threads trerminate * Chris - Several bug fixes (#46, #49, #50) v3.1.0 ^^^^^^ * Alex - better conventions, Jython support * Fruch - testing, benchmarking * Eyecue - porting to python3 * Jerome Delattre - IronPython support * Akruis - bug fixes v3.0.0-v3.0.7 ^^^^^^^^^^^^^ * Noam Rapahel - provided the original Twisted-integration with RPyC. * Gil Fidel - provided the original NamedPipeStream on Windows. * Eyal Lotem - Consulting and spiritual support :) * Serg Dobryak - backporting to python 2.3 * Jamie Kirkpatrick - patches for the registry server and client rpyc-3.4.4/LICENSE000066400000000000000000000022001314203541000134670ustar00rootroot00000000000000Copyright (c) 2005-2013 Tomer Filiba (tomerfiliba@gmail.com) Copyrights of patches are held by their respective submitters Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rpyc-3.4.4/MANIFEST.in000066400000000000000000000000441314203541000142240ustar00rootroot00000000000000include LICENSE include README.rst rpyc-3.4.4/README.rst000066400000000000000000000034401314203541000141600ustar00rootroot00000000000000|Version| |Python| |Tests| |License| RPyC_ (pronounced like *are-pie-see*), or *Remote Python Call*, is a **transparent** library for **symmetrical** `remote procedure calls`_, clustering_, and distributed-computing_. RPyC makes use of object-proxying_, a technique that employs python's dynamic nature, to overcome the physical boundaries between processes and computers, so that remote objects can be manipulated as if they were local. .. figure:: http://rpyc.readthedocs.org/en/latest/_images/screenshot.png :align: center A screenshot of a Windows client connecting to a Linux server. Note that text written to the server's ``stdout`` is actually printed on the server's console. .. References: .. _RPyC: https://github.com/tomerfiliba/rpyc .. _remote procedure calls: http://en.wikipedia.org/wiki/Remote_procedure_calls .. _clustering: http://en.wikipedia.org/wiki/Clustering .. _distributed-computing: http://en.wikipedia.org/wiki/Distributed_computing .. _object-proxying: http://en.wikipedia.org/wiki/Proxy_pattern .. Badges: .. |Version| image:: https://img.shields.io/pypi/v/rpyc.svg?style=flat :target: https://pypi.python.org/pypi/rpyc :alt: Version .. |Python| image:: https://img.shields.io/pypi/pyversions/rpyc.svg?style=flat :target: https://pypi.python.org/pypi/rpyc#downloads :alt: Python Versions .. |Tests| image:: https://img.shields.io/travis/tomerfiliba/rpyc/master.svg?style=flat :target: https://travis-ci.org/tomerfiliba/rpyc :alt: Build Status .. |License| image:: https://img.shields.io/pypi/l/rpyc.svg?style=flat :target: https://github.com/tomerfiliba/rpyc/blob/master/LICENSE :alt: License: MIT rpyc-3.4.4/bin/000077500000000000000000000000001314203541000132405ustar00rootroot00000000000000rpyc-3.4.4/bin/rpyc_classic.py000077500000000000000000000130361314203541000162760ustar00rootroot00000000000000#!/usr/bin/env python """ classic rpyc server (threaded, forking or std) running a SlaveService usage: rpyc_classic.py # default settings rpyc_classic.py -m forking -p 12345 # custom settings # ssl-authenticated server (keyfile and certfile are required) rpyc_classic.py --ssl-keyfile keyfile.pem --ssl-certfile certfile.pem --ssl-cafile cafile.pem """ import sys import os import rpyc from plumbum import cli from rpyc.utils.server import ThreadedServer, ForkingServer, OneShotServer from rpyc.utils.classic import DEFAULT_SERVER_PORT, DEFAULT_SERVER_SSL_PORT from rpyc.utils.registry import REGISTRY_PORT from rpyc.utils.registry import UDPRegistryClient, TCPRegistryClient from rpyc.utils.authenticators import SSLAuthenticator from rpyc.lib import setup_logger from rpyc.core import SlaveService class ClassicServer(cli.Application): mode = cli.SwitchAttr(["-m", "--mode"], cli.Set("threaded", "forking", "stdio", "oneshot"), default = "threaded", help = "The serving mode (threaded, forking, or 'stdio' for " "inetd, etc.)") port = cli.SwitchAttr(["-p", "--port"], cli.Range(0, 65535), default = None, help="The TCP listener port (default = %s, default for SSL = %s)" % (DEFAULT_SERVER_PORT, DEFAULT_SERVER_SSL_PORT), group = "Socket Options") host = cli.SwitchAttr(["--host"], str, default = "", help = "The host to bind to. " "The default is INADDR_ANY", group = "Socket Options") ipv6 = cli.Flag(["--ipv6"], help = "Enable IPv6", group = "Socket Options") logfile = cli.SwitchAttr("--logfile", str, default = None, help="Specify the log file to use; " "the default is stderr", group = "Logging") quiet = cli.Flag(["-q", "--quiet"], help = "Quiet mode (only errors will be logged)", group = "Logging") ssl_keyfile = cli.SwitchAttr("--ssl-keyfile", cli.ExistingFile, help = "The keyfile to use for SSL. Required for SSL", group = "SSL", requires = ["--ssl-certfile"]) ssl_certfile = cli.SwitchAttr("--ssl-certfile", cli.ExistingFile, help = "The certificate file to use for SSL. Required for SSL", group = "SSL", requires = ["--ssl-keyfile"]) ssl_cafile = cli.SwitchAttr("--ssl-cafile", cli.ExistingFile, help = "The certificate authority chain file to use for SSL. Optional; enables client-side " "authentication", group = "SSL", requires = ["--ssl-keyfile"]) auto_register = cli.Flag("--register", help = "Asks the server to attempt registering with " "a registry server. By default, the server will not attempt to register", group = "Registry") registry_type = cli.SwitchAttr("--registry-type", cli.Set("UDP", "TCP"), default = "UDP", help="Specify a UDP or TCP registry", group = "Registry") registry_port = cli.SwitchAttr("--registry-port", cli.Range(0, 65535), default=REGISTRY_PORT, help = "The registry's UDP/TCP port", group = "Registry") registry_host = cli.SwitchAttr("--registry-host", str, default = None, help = "The registry host machine. For UDP, the default is 255.255.255.255; " "for TCP, a value is required", group = "Registry") def main(self): if self.registry_type == "UDP": if self.registry_host is None: self.registry_host = "255.255.255.255" self.registrar = UDPRegistryClient(ip = self.registry_host, port = self.registry_port) else: if self.registry_host is None: raise ValueError("With TCP registry, you must specify --registry-host") self.registrar = TCPRegistryClient(ip = self.registry_host, port = self.registry_port) if self.ssl_keyfile: self.authenticator = SSLAuthenticator(self.ssl_keyfile, self.ssl_certfile, self.ssl_cafile) default_port = DEFAULT_SERVER_SSL_PORT else: self.authenticator = None default_port = DEFAULT_SERVER_PORT if self.port is None: self.port = default_port setup_logger(self.quiet, self.logfile) if self.mode == "threaded": self._serve_mode(ThreadedServer) elif self.mode == "forking": self._serve_mode(ForkingServer) elif self.mode == "oneshot": self._serve_oneshot() elif self.mode == "stdio": self._serve_stdio() def _serve_mode(self, factory): t = factory(SlaveService, hostname = self.host, port = self.port, reuse_addr = True, ipv6 = self.ipv6, authenticator = self.authenticator, registrar = self.registrar, auto_register = self.auto_register) t.start() def _serve_oneshot(self): t = OneShotServer(SlaveService, hostname = self.host, port = self.port, reuse_addr = True, ipv6 = self.ipv6, authenticator = self.authenticator, registrar = self.registrar, auto_register = self.auto_register) sys.stdout.write("rpyc-oneshot\n") sys.stdout.write("%s\t%s\n" % (t.host, t.port)) sys.stdout.flush() t.start() def _serve_stdio(self): origstdin = sys.stdin origstdout = sys.stdout sys.stdin = open(os.devnull, "r") sys.stdout = open(os.devnull, "w") sys.stderr = open(os.devnull, "w") conn = rpyc.classic.connect_pipes(origstdin, origstdout) try: try: conn.serve_all() except KeyboardInterrupt: print( "User interrupt!" ) finally: conn.close() if __name__ == "__main__": ClassicServer.run() rpyc-3.4.4/bin/rpyc_registry.py000077500000000000000000000032371314203541000165270ustar00rootroot00000000000000#!/usr/bin/env python """ The registry server listens to broadcasts on UDP port 18812, answering to discovery queries by clients and registering keepalives from all running servers. In order for clients to use discovery, a registry service must be running somewhere on their local network. """ from plumbum import cli from rpyc.utils.registry import REGISTRY_PORT, DEFAULT_PRUNING_TIMEOUT from rpyc.utils.registry import UDPRegistryServer, TCPRegistryServer from rpyc.lib import setup_logger class RegistryServer(cli.Application): mode = cli.SwitchAttr(["-m", "--mode"], cli.Set("UDP", "TCP"), default = "UDP", help = "Serving mode") ipv6 = cli.Flag(["-6", "--ipv6"], help="use ipv6 instead of ipv4") port = cli.SwitchAttr(["-p", "--port"], cli.Range(0, 65535), default = REGISTRY_PORT, help = "The UDP/TCP listener port") logfile = cli.SwitchAttr(["--logfile"], str, default = None, help = "The log file to use; the default is stderr") quiet = cli.SwitchAttr(["-q", "--quiet"], help = "Quiet mode (only errors are logged)") pruning_timeout = cli.SwitchAttr(["-t", "--timeout"], int, default = DEFAULT_PRUNING_TIMEOUT, help = "Set a custom pruning timeout (in seconds)") def main(self): if self.mode == "UDP": server = UDPRegistryServer(host = '::' if self.ipv6 else '0.0.0.0', port = self.port, pruning_timeout = self.pruning_timeout) elif self.mode == "TCP": server = TCPRegistryServer(port = self.port, pruning_timeout = self.pruning_timeout) setup_logger(self.quiet, self.logfile) server.start() if __name__ == "__main__": RegistryServer.run() rpyc-3.4.4/bin/rpycd.conf000066400000000000000000000001641314203541000152310ustar00rootroot00000000000000[rpycd] # threaded or forking mode = threaded host = 0.0.0.0 port = 18812 quiet = True logfile = /var/log/rpycd.log rpyc-3.4.4/bin/rpycd.py000077500000000000000000000023411314203541000147360ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import with_statement import daemon import lockfile import sys import signal from rpyc.utils.server import ThreadedServer, ForkingServer from rpyc.core.service import SlaveService from rpyc.lib import setup_logger try: from configparser import ConfigParser except ImportError: from ConfigParser import ConfigParser server = None def start(): global server conf = ConfigParser() conf.read('rpycd.conf') mode = conf.get("rpycd", "mode").lower() if mode == "threaded": factory = ThreadedServer elif mode == "forking": factory = ForkingServer else: raise ValueError("Invalid mode %r" % (mode,)) setup_logger(conf.getboolean("rpycd", "quiet"), conf.get("rpycd", "logfile")) server = factory(SlaveService, hostname = conf.get("rpycd", "host"), port = conf.getint("rpycd", "port"), reuse_addr = True) server.start() def reload(*args): server.close() start() def stop(*args): server.close() sys.exit() if __name__ == "__main__": with daemon.DaemonContext( pidfile = lockfile.FileLock('/var/run/rpydc.pid'), signal_map = {signal.SIGTERM: stop, signal.SIGHUP: reload}): start() rpyc-3.4.4/demos/000077500000000000000000000000001314203541000135775ustar00rootroot00000000000000rpyc-3.4.4/demos/chat/000077500000000000000000000000001314203541000145165ustar00rootroot00000000000000rpyc-3.4.4/demos/chat/client.pyw000066400000000000000000000133141314203541000165370ustar00rootroot00000000000000import pygtk pygtk.require('2.0') import gtk import gobject import rpyc class ChatClient(object): def __init__(self): self.conn = None self.user = None #-------- GUI CODE --------- window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_resizable(True) window.connect("destroy", self.on_close) window.set_title("RPyChat") top = gtk.VBox() top.show() window.add(top) hbox1 = gtk.HBox() hbox1.show() top.pack_start(hbox1, expand=False) hbox2 = gtk.HBox() hbox2.show() top.pack_start(hbox2, expand=False) self.box_main = gtk.VBox() top.pack_start(self.box_main, padding=10) lbl_host = gtk.Label("Host:") lbl_host.show() hbox1.pack_start(lbl_host) self.txt_host = gtk.Entry() self.txt_host.set_text("127.0.0.1") self.txt_host.show() self.txt_host.connect("activate", self.on_connect, "via-text") hbox1.pack_start(self.txt_host) lbl_port = gtk.Label("Port:") lbl_port.show() hbox1.pack_start(lbl_port, padding = 10) self.txt_port = gtk.Entry() self.txt_port.set_text("19912") self.txt_port.show() self.txt_port.connect("activate", self.on_connect, "via-text") hbox1.pack_start(self.txt_port) lbl_user = gtk.Label("Username:") lbl_user.show() hbox2.pack_start(lbl_user, padding = 10) self.txt_user = gtk.Entry() self.txt_user.show() self.txt_user.connect("activate", self.on_connect, "via-text") hbox2.pack_start(self.txt_user) lbl_password = gtk.Label("Password:") lbl_password.show() hbox2.pack_start(lbl_password, padding = 10) self.txt_password = gtk.Entry() self.txt_password.set_visibility(False) self.txt_password.show() self.txt_password.connect("activate", self.on_connect, "via-text") hbox2.pack_start(self.txt_password) self.btn_connect = gtk.Button("Connect") self.btn_connect.show() self.btn_connect.connect("clicked", self.on_connect) hbox2.pack_start(self.btn_connect, padding = 10) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS) sw.show() self.box_main.pack_start(sw) self.txt_main = gtk.TextView() self.txt_main.set_editable(False) self.txt_main.show() sw.add(self.txt_main) hbox3 = gtk.HBox() hbox3.show() self.box_main.pack_start(hbox3, fill = False, expand=False) self.txt_input = gtk.Entry() self.txt_input.show() self.txt_input.connect("activate", self.on_send) hbox3.pack_start(self.txt_input) self.btn_send = gtk.Button("Send") self.btn_send.show() self.btn_send.connect("clicked", self.on_send) hbox3.pack_start(self.btn_send, fill=False, expand=False, padding = 10) window.show() #-------- END OF GUI CODE --------- def disconnect(self): if self.conn: try: self.user.logout() except: pass self.conn.close() self.user = None self.conn = None def on_close(self, widget): self.disconnect() gtk.main_quit() # # connect/disconnect logic # def on_connect(self, widget, data = None): if self.btn_connect.get_label() == "Connect": try: self.conn = rpyc.connect(self.txt_host.get_text(), int(self.txt_port.get_text())) except Exception: self.conn = None m=gtk.MessageDialog(buttons = gtk.BUTTONS_OK, type = gtk.MESSAGE_ERROR, flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, message_format="Connection refused") m.run() m.destroy() return try: self.user = self.conn.root.login(self.txt_user.get_text(), self.txt_password.get_text(), self.on_message) except ValueError: self.conn.close() self.conn = None m=gtk.MessageDialog(buttons = gtk.BUTTONS_OK, type = gtk.MESSAGE_ERROR, flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, message_format="Invalid Login") m.run() m.destroy() return # register in the GTK reactor gobject.io_add_watch(self.conn, gobject.IO_IN, self.bg_server) self.btn_connect.set_label("Disconnect") self.box_main.show() else: if data == "via-text": return self.disconnect() self.box_main.hide() self.btn_connect.set_label("Connect") # # called by the reactor whenever the connection has something to say # def bg_server(self, source = None, cond = None): if self.conn: self.conn.poll_all() return True else: return False # # sends the current message # def on_send(self, widget, data = None): text = self.txt_input.get_text() self.txt_input.set_text("") if text.strip(): self.user.say(text) # # called by the server, with the text to append to the GUI # def on_message(self, text): buf = self.txt_main.get_buffer() buf.place_cursor(buf.get_end_iter()) buf.insert_at_cursor(text + "\n") self.txt_main.scroll_to_iter(buf.get_end_iter(), 0) if __name__ == "__main__": cc = ChatClient() gtk.main() rpyc-3.4.4/demos/chat/readme.txt000066400000000000000000000036361314203541000165240ustar00rootroot00000000000000== Disclaimer == I hate writing GUI code, it makes me feel like a brainless monkey. On the other hand, I wanted to show that RPyC can be easily incorporated into GUI apps, like the GTK reactor. Yes, the code is horrible, but please, don't judge a man by his GUI! == Server Design == The ChatService exposes a single method, login, which clients call with their credentials and a callback function. If the credentials are correct, a "user-token" object is created and returned to the client. The client then uses this user-token for performing actions on behalf of the user (currently limited to say() and logout()). The callback function is used by the server to notify clients of messages sent by other users. This is not a sophisticated design (compare to IRC, for instance), but it's a good show-case after all: instead of defining custom protocols, sending a message to a chat server is analogous to calling a function on the server, while receiving messages from the chat server is analogous to the server calling an (async) function on the client. RPC at its best. Also, do keep in mind the inherent securiy of this model: the server exposes a well defined set of methods (so there's no risk of the client abusing the server), while the server can't abuse the client because it can invoke only a designated callback it is passed. This allows both parties not to trust each other while still providing RPyC-grade servive. == Threading issues == The server is multi-threaded and naturally has to be synchronized. The client, at least the one I provide, is single-threaded. == Client Design == With all the visual noise caused by the GUI code, it's easy to get lost on the RPyC part. In short, this is the RPyC releated code: def on_message(text): # server-side callback textbox.append_line(text) conn = rpyc.connect("localhost", 19912) user_token = conn.root.login("foo", "bar", on_message) user_token.say("hello world") rpyc-3.4.4/demos/chat/server.py000066400000000000000000000034341314203541000164020ustar00rootroot00000000000000from __future__ import with_statement from rpyc import Service, async from rpyc.utils.server import ThreadedServer from threading import RLock USERS_DB = { "foo" : "bar", "spam" : "bacon", "eggs" : "viking", } broadcast_lock = RLock() tokens = set() class UserToken(object): def __init__(self, name, callback): self.name = name self.stale = False self.callback = callback self.broadcast("* Hello %s *" % (self.name,)) tokens.add(self) def exposed_say(self, message): if self.stale: raise ValueError("User token is stale") self.broadcast("[%s] %s" % (self.name, message)) def exposed_logout(self): if self.stale: return self.stale = True self.callback = None tokens.discard(self) self.broadcast("* Goodbye %s *" % (self.name,)) def broadcast(self, text): global tokens stale = set() with broadcast_lock: for tok in tokens: try: tok.callback(text) except: stale.add(tok) tokens -= stale class ChatService(Service): def on_connect(self): self.token = None def on_disconnect(self): if self.token: self.token.exposed_logout() def exposed_login(self, username, password, callback): if self.token and not self.token.stale: raise ValueError("already logged in") if username in USERS_DB and password == USERS_DB[username]: self.token = UserToken(username, async(callback)) return self.token else: raise ValueError("wrong username or password") if __name__ == "__main__": t = ThreadedServer(ChatService, port = 19912) t.start() rpyc-3.4.4/demos/filemon/000077500000000000000000000000001314203541000152305ustar00rootroot00000000000000rpyc-3.4.4/demos/filemon/client.py000066400000000000000000000014341314203541000170620ustar00rootroot00000000000000import rpyc import time import os filename = "/tmp/floop.bloop" if os.path.exists(filename): os.remove(filename) f = open(filename, "w") conn = rpyc.connect("localhost", 18871) bgsrv = rpyc.BgServingThread(conn) # create a bg thread to process incoming events def on_file_changed(oldstat, newstat): print( "file changed") print( " old stat: %s" % (oldstat,)) print( " new stat: %s" % (newstat,)) mon = conn.root.FileMonitor(filename, on_file_changed) # create a filemon print( "wait a little for the filemon to have a look at the original file") time.sleep(2) print( "change file size") f.write("shmoop") # change size f.flush() time.sleep(2) print( "change size again") f.write("groop") # change size f.flush() time.sleep(2) mon.stop() bgsrv.stop() conn.close() rpyc-3.4.4/demos/filemon/readme.txt000066400000000000000000000002321314203541000172230ustar00rootroot00000000000000a demonstation of events: the file monitor will send events to the client (invoke an async callback) whenever a file is changed (as reported by os.stat) rpyc-3.4.4/demos/filemon/server.py000066400000000000000000000020341314203541000171070ustar00rootroot00000000000000import rpyc import os import time from threading import Thread class FileMonitorService(rpyc.Service): class exposed_FileMonitor(object): def __init__(self, filename, callback, interval = 1): self.filename = filename self.interval = interval self.last_stat = None self.callback = rpyc.async(callback) # make the callback async self.active = True self.thread = Thread(target = self.work) self.thread.start() def exposed_stop(self): self.active = False self.thread.join() def work(self): while self.active: stat = os.stat(self.filename) if self.last_stat is not None and self.last_stat != stat: self.callback(self.last_stat, stat) self.last_stat = stat time.sleep(self.interval) if __name__ == "__main__": from rpyc.utils.server import ThreadedServer ThreadedServer(FileMonitorService, port = 18871).start() rpyc-3.4.4/demos/rpycfs/000077500000000000000000000000001314203541000151055ustar00rootroot00000000000000rpyc-3.4.4/demos/rpycfs/mount.rpycfs.py000066400000000000000000000002741314203541000201310ustar00rootroot00000000000000# requires fuse bindings for python import fuse class RPyCFS(fuse.Fuse): def __init__(self, conn, mountpoint): self.conn = conn fuse.Fuse.__init__(self, mountpoint) rpyc-3.4.4/demos/rpycfs/readme.txt000066400000000000000000000011041314203541000170770ustar00rootroot00000000000000rpycfs -- a remote file system (like sambda of nfs) it should be quite easy, subclassing Fuse and exposing a file-system like interface above it, and then use rpyc to perform the IOs, but i find python-fuse to be quite confusing and i lost interest in the project. sorry. if someone wants to contribute the code, i'll happily include it in the demos. it should look something like this: # server rpycfsd /path/to/expose --port=12345 --user=foo --password=bar # client /sbin/mount.rpycfs host:/relativepath /localpoint -o port=12345 -o user=foo -o password=bar rpyc-3.4.4/demos/rpycfs/rpycfsd.py000066400000000000000000000000021314203541000171210ustar00rootroot00000000000000 rpyc-3.4.4/demos/rpycfs/service.py000066400000000000000000000004141314203541000171160ustar00rootroot00000000000000import rpyc class RemoteFSService(rpyc.Service): def open(self, filename, mode = "r"): pass def listdir(self, path): pass def mkdir(self, path): pass def stat(self, path): pass def rmdir(self, path): pass rpyc-3.4.4/demos/splits/000077500000000000000000000000001314203541000151155ustar00rootroot00000000000000rpyc-3.4.4/demos/splits/splits.py000066400000000000000000000007511314203541000170100ustar00rootroot00000000000000import sys import rpyc from plumbum import SshMachine from rpyc.utils.zerodeploy import DeployedServer from rpyc.utils.splitbrain import splitbrain mach = SshMachine("192.168.1.117") print sys.platform with DeployedServer(mach) as dep: conn = dep.classic_connect() print conn.modules.sys.platform try: import posix except ImportError as ex: print ex with splitbrain(conn): import posix print posix.stat("/boot") print posix rpyc-3.4.4/demos/time/000077500000000000000000000000001314203541000145355ustar00rootroot00000000000000rpyc-3.4.4/demos/time/client.py000066400000000000000000000001411314203541000163610ustar00rootroot00000000000000import rpyc c = rpyc.connect_by_service("TIME") print( "server's time is", c.root.get_time()) rpyc-3.4.4/demos/time/readme.txt000066400000000000000000000003071314203541000165330ustar00rootroot00000000000000A canonical example of a basic service: * time_service.py defines the service * server.py exposes the service * client.py utilizes the service - NOTE requires registry_server.py to be running rpyc-3.4.4/demos/time/server.py000066400000000000000000000002661314203541000164210ustar00rootroot00000000000000from rpyc.utils.server import ThreadedServer from time_service import TimeService if __name__ == "__main__": s = ThreadedServer(TimeService, auto_register=True) s.start() rpyc-3.4.4/demos/time/time_service.py000066400000000000000000000002731314203541000175670ustar00rootroot00000000000000import time from rpyc import Service class TimeService(Service): def exposed_get_utc(self): return time.time() def exposed_get_time(self): return time.ctime() rpyc-3.4.4/demos/web8/000077500000000000000000000000001314203541000144445ustar00rootroot00000000000000rpyc-3.4.4/demos/web8/client.pyw000066400000000000000000000053421314203541000164670ustar00rootroot00000000000000import pygtk pygtk.require('2.0') import gtk import gobject import rpyc from safegtk import SafeGTK def BrowserServiceFactory(browser): class BrowserService(rpyc.Service): def on_connect(self): self._conn._config["allow_public_attrs"] = True def exposed_navigate(self, url): old_url = browser.txt_url.get_text() if url.startswith("/"): base = old_url.split("/")[0] url = base + url browser.txt_url.set_text(url) browser.on_navigate(None) return BrowserService class Browser(object): def __init__(self): self.conn = None window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_resizable(True) window.connect("destroy", self.on_close) window.set_title("Web8 Browser") self.box_main = gtk.VBox() self.box_main.show() window.add(self.box_main) hbox1 = gtk.HBox() hbox1.show() self.box_main.pack_start(hbox1, fill = False, expand = False) self.txt_url = gtk.Entry() self.txt_url.set_text("localhost/main") self.txt_url.show() self.txt_url.connect("activate", self.on_navigate) hbox1.pack_start(self.txt_url) btn_send = gtk.Button("Go") btn_send.show() btn_send.connect("clicked", self.on_navigate) hbox1.pack_start(btn_send, fill=False, expand=False, padding = 10) self.box_content = None window.show() def on_close(self, widget): if self.conn: self.conn.close() self.conn = None gtk.main_quit() def on_navigate(self, widget, data = None): url = self.txt_url.get_text() if "/" not in url: url += "/" host, page = url.split("/", 1) if ":" in host: addr, port = host.split(":", 1) port = int(port) else: addr = host port = 18833 if self.conn: self.conn.close() self.conn = None if self.box_content: self.box_main.remove(self.box_content) self.box_content.destroy() self.box_content = None self.box_content = gtk.VBox() self.box_content.show() self.box_main.pack_start(self.box_content) self.conn = rpyc.connect(host, port, service = BrowserServiceFactory(self)) gobject.io_add_watch(self.conn, gobject.IO_IN, self.bg_server) self.conn.root.get_page(SafeGTK, self.box_content, page) def bg_server(self, source = None, cond = None): if self.conn: self.conn.poll_all() return True else: return False if __name__ == "__main__": b = Browser() gtk.main() rpyc-3.4.4/demos/web8/readme.txt000066400000000000000000000000771314203541000164460ustar00rootroot00000000000000"web8" -- a vision of how web development should have been... rpyc-3.4.4/demos/web8/safegtk.py000066400000000000000000000010421314203541000164370ustar00rootroot00000000000000""" this class exposes only the gtk constants and some of the "safe" classes. we don't want the server to open pop-ups on the client, so we won't expose Window() et al. """ import pygtk pygtk.require('2.0') import gtk safe_gtk_classes = set([ "Box", "VBox", "HBox", "Frame", "Entry", "Button", "ScrolledWindow", "TextView", "Label", ]) class SafeGTK(object): for _name in dir(gtk): if _name in safe_gtk_classes or _name.isupper(): exec "exposed_%s = gtk.%s" % (_name, _name) del _name SafeGTK = SafeGTK() rpyc-3.4.4/demos/web8/server.py000066400000000000000000000047161314203541000163340ustar00rootroot00000000000000import rpyc from rpyc.utils.server import ThreadedServer import time import threading class Web8Service(rpyc.Service): def exposed_get_page(self, gtk, content, page): self.gtk = gtk self.content = content page = page.replace(" ", "_").lower() pagefunc = getattr(self, "page_%s" % (page,), None) if pagefunc: pagefunc() else: lbl1 = self.gtk.Label("Page %r does not exist" % (page,)) lbl1.show() self.content.pack_start(lbl1) def page_main(self): counter = [0] lbl1 = self.gtk.Label("Hello mate, this is the main page") lbl1.show() self.content.pack_start(lbl1) def on_btn1_clicked(src): counter[0] += 1 lbl2.set_text("You have clicked the button %d times" % (counter[0],)) btn1 = self.gtk.Button("Add 1") btn1.connect("clicked", on_btn1_clicked) btn1.show() self.content.pack_start(btn1) lbl2 = self.gtk.Label("You have clicked the button 0 times") lbl2.show() self.content.pack_start(lbl2) def on_btn2_clicked(src): self._conn.root.navigate("/hello_world") btn2 = self.gtk.Button("Go to the 'hello world' page") btn2.connect("clicked", on_btn2_clicked) btn2.show() self.content.pack_start(btn2) active = [False] def bg_timer_thread(): while active[0]: rpyc.async(lbl3.set_text)("Server time is: %s" % (time.ctime(),)) time.sleep(1) bg_thread = [None] def on_btn3_clicked(src): if btn3.get_label() == "Start timer": bg_thread[0] = threading.Thread(target = bg_timer_thread) active[0] = True bg_thread[0].start() btn3.set_label("Stop timer") else: active[0] = False bg_thread[0].join() btn3.set_label("Start timer") btn3 = self.gtk.Button("Start timer") btn3.connect("clicked", on_btn3_clicked) btn3.show() self.content.pack_start(btn3) lbl3 = self.gtk.Label("Server time is: ?") lbl3.show() self.content.pack_start(lbl3) def page_hello_world(self): lbl = self.gtk.Label("Hello world!") lbl.show() self.content.pack_start(lbl) if __name__ == "__main__": t = ThreadedServer(Web8Service, port = 18833) t.start() rpyc-3.4.4/docs/000077500000000000000000000000001314203541000134205ustar00rootroot00000000000000rpyc-3.4.4/docs/.gitignore000066400000000000000000000000101314203541000153770ustar00rootroot00000000000000/_build rpyc-3.4.4/docs/Makefile000066400000000000000000000111051314203541000150560ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/RPyC.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/RPyC.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/RPyC" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RPyC" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." make -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." upload: html rsync -r -v $(BUILDDIR)/html/ gangesmaster,rpyc@web.sourceforge.net:htdocs/ rpyc-3.4.4/docs/TODO.txt000066400000000000000000000001751314203541000147310ustar00rootroot00000000000000Docs ==== * guidelines * capabilities Demos ===== * demo 1 * demo 2 * demo 3 Screen casts ============ * part 2 * part 3 rpyc-3.4.4/docs/_static/000077500000000000000000000000001314203541000150465ustar00rootroot00000000000000rpyc-3.4.4/docs/_static/banner.png000066400000000000000000000434231314203541000170270ustar00rootroot00000000000000‰PNG  IHDRômWÈ“µsRGB®ÎégAMA± üa pHYsĂĂÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡F‚IDATx^íxTE×€I!¤‘„THï½÷„$$@!̃;RCïM>AAzS>ÛgCQ `—&`GņôdÏκ›ÿf³åÎƯƯdCfŸgÀ̃¹sçΜwΙ3gZ@+xpà2Àe€Ë—æ-æ|BĂe€Ë—.\îàxt¢®Yu+ÅGW>~½yÏÎyÿñ₫ă2Đ²e€Ë@ >Đ·́÷Ëèù`n*Ÿ²‚öa%]:tËNqíîäĐº;Ö«»åRg'«wñÿÇ­ÛX¬43kƠ½•ywü[ˆ×Ó1Ù¢₫©óF¤Ï?X2cG÷ ă»»Dfv·ï$¯ƒ…•ÍÂÖvNïa:̃ÚÎñ}‹66kÍ̀-ºÛºùvw J,l’’iˆ:èS†¦¬°L₫£n?j̃ϼŸ¹ ´L0 [{··¹/*Ôa]Z|»“ĂzùVÏ.ˆuKâ`óÊDس.v®IM+`í¢XX8) Fơơ¯ søÙÎỌ̈Yk+óƠ®rLV¬PLŸû\EÆ‚CkcǬù,¨xâÏôR™Wf9øæ¿.C! Û(ê1ÂzÏÂ4B{Í̀₫]G‚wÇ̃à‘PPëÿ›µ“ûºö©=Ö%L|rEÚüư)¬ơĐ7?zËüó›÷;—.Jh* [ À<Û´1ßècwaH¹ïÿn΀‹ïtƒ+'{Àơ/K æ›r€K ’́bT-ƒë_•ÀÏÁ—¯æĂêy1µYî{zX¿gkcÑƠÑÁ̉V ÓrJ½û™Ø‘üM`îZ !åÓ!î¾µ<ơiHµ ̉æî„½Æ”6{7¤LßI•OAô°•̣ €kdÇïœ~¿ÆZưụ̀³:.<蔿j¿®êè}ÿ¨ùÀÎe€Ë@Ë–¦º%̉«¯…¹Ù©¹ăÂj¿y««Œ ­̃,ßƠ\(‡W·u„Áe>Ơ©qíÖi#$Ö+ŸÚÔs’̀'§?Äz̉çĐ om`^K›³".Ÿœ~R6M–9ÏƯuô™Ånú?>hñ>â2Àe ¹Ê@c=·}}úüó†‚ù3eĐ»(ª««±ưÿưœ:uNï h·û§F€½åb%H&ṃ̀̀¬ø3føƒ8a=tí;nß¾]wï|å£ ¶®4ÁÓ}'ăX?cAkè|j®ƒ¯7—].†‘Æúc£úùŸB˜ÿn( “¹½_Idéµµµ0~ÜøîX!|…đ¾¶g¢Ö̉™ ¼³ûÈ=ÓĂË*aÇ®Ươî=qât$ £)^¬œ˜|ÉÓçđŒêVfæiè†\>đvä2Àe€Ë@}h4 [·1¿øÄưqw s*§·¶•ÖÓЉЛ6n€ç6¦y¾ç¦¹^Cˆ&úŒ¼Üs®“âÑđλÇêưư÷CzùhƒkèäAëè`fñŸB|â2Àe€Ë€1d Ñ€A`₫ú₫½ÂZCÊ3!>ÿ́39˜kjjàâÅ °ü₫éè—+ß ·ï‰Ô»Ñ¡=‡Û¹ÇwĉOBúÜ}]1V?¾._¾,×êé³oÿˆ©¨4èºRƒ́1,ÚØ~ÂÎÈÆø!ó2¹\qà2ĐX@ÏNq¹Q‹³¡~üP>¬?<ºz%̀˜^ ‹f•Ă [óêsîHWBôT‡än÷»FçÈaNM±bú̀€¾#&Àô™³`Ù¡¤ßPˆ¹Ê æv%Đ#ú/«¶Î?s óx¹ pà2` h, ß?°Ô§ÚĐ0§̣Ȭ~öÍnđÆÎ\üÛ₫ü´§ü;å³0pM-BôOר¬ß<3ÊëÁÖÊSp};£ĂÅ }’&¡ö>o¿Q€0a`́÷¿8ĐùÙ?d^&—+.\ èO­m° 2, 'K&÷+qwụ̈‡Öbă(€M[¯Đ¿9Đù¼\¸ p0† 4 ĐÛÚÝØ…‡«°€ØPy/íVưĂÖÍïo¿.Ă è}ßÈëX—c@]“pŸe âẹ‰Ë—.¦!toÛƯoîÈ̉ èäÑ₫ăñîpü`'Ù;{sj1Úœ́ü[]áOµ–ûöîlZCÿÓL<êRÙR›1ÿ :¿)̉‚C5Ü»xXËÍøñëoF ^v#¼ßü»á}æß Ă„±ÙÿÆíÿ`™m\S§Àø;XÁè¦!ü|âưÀe€ËÀ½$t/›=Ÿ¿̉E2Đ₫ ;̀]:ºƠzw°¹éæluĂËĂú&·Z]RĐAvßÀ˜84V̀ŒÂcWcë̉œq¡‘ĐÖ­ ¢æVÖ[b«<ºÊ„É=¾ =àï8‡¥ưcëîwÍÜ̉êÒU~qOÿø^FXß‘ u—Èd-XÖÔ@ÇçÓ9í1Åaê†i*¦•˜¶a:­’h̉Ẽƒøw!¦L®Æ₫¨©?mK¤úSúH¥₫´ÔŸ̃‹úYùÎtÿ@E»´5ö{´ạ̈IN²'́3urö“¢Ö+ú&Œú¿%·w> Ñh‘¥ Æ₫xº[ï!mZª½rxĐv­ăѨưĆ»%E;uKqêÖ£sû±º#Đ»—xÄïß,ÊơørêÈ +3Ç„ü1uDĐêÙcCºâÖµø]kS¢¦ IíUèUˆá`wz¸¶9†qåßÀwÓ.LE˜²© ₫-P¤®ø·Ó[ÖΟ&Myúo©@ÇI9è=jŒöf1¹ăóßÓ9Mû=N¼‹3ÆàÓơW¾'Ád*¦`c¼GK+“ÚœäC¬,iÊ÷đ|â…cxK“%₫¾êû¼Q4tO½€₫÷g=aưưq0md0ŒăP#§¿mX49¢.ÍŸ3ÆFÀ”1±0iT LăÈÓ>aĐ«4*J" ¬8\–—tÛƯËăB—/­́¾´´u¨KmœÜÿ´qñºMÉ®}`•kT¶̀3½́NÔĐ¿"̀«¥Ư#¡ ¥]8Óà]nH­ª.|̉ô ú-aP¢~WLˆ¿2Ä5Áư(–ƠÚ“¿#Ÿ¼h“£.V˜øØîƠGCWjö·Ï”ÂÏÁ¥wºÉ…v}ikGHOơ÷öNàêåíc³ÁĂ»ƒĐ™9è~y¶bF>¤>XÑß]™bG­†¸±kä)aü:sÇ¿kîèØ¦OjŸ\Ø®„ ˆÉ†èÊ÷¸J€2Ä{ÜëePc̉µä¡¯¦.¼ŸÀp¯·+?ơ&3¹ĂŲh<ớSC]h²û¹Đ@ xÄækNñ̉ơmcÜÛ>¹{Kºrà] ¯¶̃Ä@W¾-Ơ8óÁµáàíBg'Đ2–!a-¶¬gyŸpàµT0¾†~©"kX/ßoI›–º†.¼¯öb/xnw_ˆ-è‘Cê¬&rådMî58È=ˆÉà[C×5øîÓê&tzÇ0…¶ÔÁCƯ{c{D*ÚE— ëzÕè-UŒôoÊ‹ç ưëƒCÿÆV×'Éđ₫v•@XçRH¼¹Ù€\ t =KAnfœæ¤ ipŒ>K™ÇD€(ê&R¡ Cư_çÚ LÚvE âÂr=Zê`Îß›Odè=˜ù§¾ûĐi"Pu®̣J̣!jÈÍæuÜGƒƯô:Ś8)ƒ‰]©©·è­TØ'yMdbÂü)̣Äïá ¼WdÀø@¿Ø«óöƠÉ?m]•¤—vN@?°©CÚ̉æîmv@§¸ñ¾Qÿà ×½̃Új,ëÉNPỲú÷J~Zv0Íœú`ô½̉¦ü=ø$C è—*¢ßÙ“óÙ‚Iázưîù2è^ qxJc8°úIS¶@[ïđ¿s*³Ü•Ơ{¬‚k¢@§÷ d}—æßÙ¹‰×̀…zdsoO^r}dÀø@ÿy¬åÙ#] ïí§Đ?>œññ>ÿ`³źèG÷´ÿÑLNÛ¬…‚†ÿo‹ÉEV;ª§¹5ƒEˆ%ê¯6‚~¯ŒGQî(â>kÀËỸă^È‹íuDϾÿ„4kLÎIEÆÈ["RßP$B ô£i₫́½Đü8Đơ‘£Vs¾́™1ưưe‹]ªSÜÆ‰R0 Yœ´ưà̉JhmçHÑ­Œ̣1²†¤KÈđ¥:`’ºUi‹®̣UzÖHw:ë¯,_1QY!R4p`y—æœßµŸÄv"(?C2Ăú₫ 9£­WU=“µ,ŸĂó^“F:œïU²fáí·dJ:o¾lzDô›×,Nk₫^¸öoim_jÓÈf\/w ’8È‹!–o4  ÀÏ‘¢­çƯkƒ„º÷Á¶!S»”ö!ë`Ë í4{eđ8G(̃-[è?mử–Œ™´Ϊ¥ÿơi1 ª†˜á+›%Đ“*7ƒKDæ-ëv)÷:Đi@Q ´¬[”Dƒ°1€®x&'-Â9Ûe±„¶¡}ûn†„•‡‰,C-z—!Û”—Ơ|'táŸy4=Qùñë× ˜~ùĂ"(,†¸Q7K ÷œ,kăè¾tzO:²–ê¢M¦tÔ_a|f'¿æ6€b{xIĐÎ óæÖn¼¾Í”Í¥ï èÛ×%·ñơ´]6²¯_Ơ¯K˜ ₫í»… ‰÷­iv@ơ´ I¹ØÖ;,ÖX0§rMÅä.0Y³̃E‡́ld 3kéZú‚œ»X&9dNÖ[óÄ2~e|®Vo},«’±’&®7ĐÓfï†ä©[!aˆ½ºA»jY/P— êI'´…dv‚Â8˜;> æáQ¬Ê”× ̣üîºùø|ï{Í%*»Ö=>_FïHÉ+³̃ô‘ÿíRîqk¬Ûµß똰ÔÚÅs–Å–I.×' ”ÍŸ˦E–U‰²÷túơŸÏKÖà‰tábG}¨nj@W˜«Y€~Ǵ§1®xVç/¡`±î‡¡®W°|Văó´ú`Y¬á¨í¼Äö-ÏÇÊe@º è t3ü±:™™[T¢6₫‚¬*bÀ"¹›>oø̉wt4©kTÖOíBS‹p…÷gbỂ(6t¦ §à$iІø’6gD]¾iƯ 2+Î΂wäĂ©WºĂ÷ḯbư˜ó Â/mÉünùôÈÖöN©6mÜư³¬;dS²uơɶï”măêíè›pí<ÜÍ̀Z lçØúÛç7fÈÎé ß¿WñØ×O^́ 6¤Á’Ê?8́̀¾ú×gÅÇ«ÎUÂ…2+)`¿€¯ N›è¬^ơü°îä™Í2ѽ¡®ưđYtvËó´:'bYkËkq{óÅÊ1Ï'î÷ÎÛI|;éṭ0¯¿:¤CâÄ'EĂ6ǹp‰́x£­O8̀$æ‡Z?ưiÑÏP₫'@x^1ŒGâÁL"ŒY49́Ê₫µhO1•Uä™âo÷ó§/u¾¦í¿|T«æDĂ´QÁ°çñ”ÚÓ¯åï½uº4‰á9̣¬èZ¡%zÛ(èäKÁX½ÖÑñY‡Ÿ§qû –CÎ¬Ö ½MäD•ƒK<¸x[©o+©@/²hcûVû䢻1ĂT«kÓ¤)®yhÅL°÷ Ư&\zxŸ¹Đ­,m-€êoÊEÁœ`L@ykæQ‘u¥lỨm-¿ûè¹ÜŸđ~™®IY~ ;;×$Ăœq¡°~iÜÙ?OơĂđ<tí4 +Lø¬kĐ’öXKđam%–Ç:ù‚¼R\OX ß́èưÒđU6Gú!)¤-wHëyÇ®}Àt(Èt¯íç”P›4e«L’ÉĂÅF ^ #‡&Â/70©ë.}ï©bî/̣ÊÚ%1ÿĂrku•-¼Nt®œ́`OÊaA·÷®K=üÊÖŒx1`75 ë̀ê':t'–ͪ1ë ôµ\C›­EoéSqˆc°ÖơzlƒŒí ©̃̃Ö÷V[³½ÜºÇ9ßÎCd)Ó·ëeúVB™ÖÓq;×14Ûû꺃od5:ÅI:-¸…Ĩa¬2/9Ém[ø¦°bEè÷#‚ùº”gÑ=¤±Ó~} Ä3yhà¥}üºèz¶ uÛÚ[b—&:‹‰\£—»̣ư°₫¬[áDïP:khV­ơXï Œ@ç[Ơ¸¹]£ơṔïç?ét7sËÖâö³ß耑ô¹ Ư$iÍßÄ t2íûäô{»Öpáh7f ½êlô+ö†%>aư(0ˆ¶}ă[Ê :|‹p®–ª«»ï¯O{ªÙÑéø¶“ƒeÖ¡Á…‰}H”Úo?]Â*U£™Üñ=X½̉Em¿ĂrY#Đ¡'Û€†Ï8ËĐ:÷3”E}ªs‚Àú>è>wéÔˆç½:ØUÑV3ÖçRđ¤n2GÇ6µ¤í²‚ƒƯ†¬ï̀RY'÷‘¥{°dÊTưĐzåç çGÖgˆÉ_u® Pó‡„(ÇSææ­â´•éÎÂjæU]ôYâ4EIkè K…,e1¹‹Z:0QĐ \s;«@넬Œí i™€C¨åAˆ÷¹áú\Đ-̀,,Sœ‚ÿù°Œ€Ë QÖü‰₫6ÎoYØØ{Â¥ÎwÏ•&~{´ë=ëR₫@s÷]ZK8$ †3×…€ÎwàèhWûú³YL@—ázö‹[2`ʸdÈœ» RflÜg_ƒ̃ù×ñä4:Ç9“& L³{y₫‚=“#œ˜+óÔ g₫—¯æCNªë¨¢Z ZCǺès|*Óà߈@—biå†ï@[6Y& L/–ÍPF«yË b¬/Ó„ê†Ôy[¶Ü¶ltU&G¹À²¯œà ´tŒØæ™QZ3ă¾è׿ê¹Of»»|F$lZ™?đïêÊ…˜”``P48ßÜ`go-ûđ¹\& ß>S φ²Êɹà`ƯdĂÄÊ‚K*kư£¯á ·Sn[{Ë_^~:³ĐRó}³@–ßÑ"éWjê t|n{Ld) “ôQÆÁ^dƒX¡Æ:>ƒƠ©OùN¢·˜á3XLâT¾è0°˜—å44*,5B:ă Ëo€çm¹ĐÖêŸC•÷¸.¾N _Dô_Ȭ ë ơÈAK OŸ„9ăÂà‰ûăàÜ›]ăט₫Ư³4Y¾ưŒíY! p,´¶²‚+'z0ưg<åmX¿0è¿tµÚgb̀v™_₫đÚ6n—̣Ú×üùIqTH³ÜG^đŸ¾”÷c¯!—úÏÈ@gÑ$Yó̉l&‡/cËÀD¬ï!_7Æ$ú0̀ËÅ­Ŕ@ÎØF:­ €.ÚÉQ́;ñ|b\´Ë@= Á·Å;§/s 6ÀR G:…â ïz»Âѽ¸ưVDHY}ó Ơ¢*ÀÇö¶÷)Á­MS×ĂK\Èi»÷‹Fk‚ơ¾…DufTZ=Kûê<èËd9¦UThYtLVÙæù_fä@O]²£5z²?‰ñƠq{ÚNQ S–|´>̃¹v¯Ï‚Z•R~5zÁfÊ·¡%Un]OÚçŸ/²ÿ|ÑfƯS§àÚ¹z‹‚Ú÷Âú'_ q²à…­9ơ– ô…·¦û÷?‘J[₫¾ÂDNiZMï&Ḍg bʺm˜Ró2[ï²ÖMuÓ¹½Ñ”/êđ @ÇôÆĐy›·́6— mÁ>¯äéϼ§„‰†$ ¨ỴÆß÷8–dà©gê×»¿₫h L˜ ₫ùĂ1ÈÍ>Qơ¥C]X4ô $BLnHŸơ¬¨̣Uß/'‘{Âs›:DH₫±ưªÚ9´&ç¼Àfô XW7©ƒ“»TH‹½O’¥AôF3¿Öxë23”©s‚ (“;Åq'7ơÍÄe@̃Aç?ïœTùÔ!רlIc¶®¼´ç=¬|Œ•wÎ5<@åî…̃đ¿×¦BÆ ‰RZ)*|̉”-r ×^¨,ª¢µ{Á?§ûÀ–uƯ 0>h]\W]µ]§£^ăó»Á«» $G¨ùoÖf§¸Ô4# “Ă™µT˜› †.Ù̉ °˜°z»k;uư\§ Ÿ½ek}úüVù½+;ukè)Ó·­u‰̀4„CEs«Ơ†dz-™ófdÁß_”©Ơr¿ư¸ôY !äg¬§ÍUï¸F„ĐĐ.8^ƯƯµAYƠ8A¸pj$<³¹7¤a¾$  €>ơW̃›0~=„gÀg¯—MS§Ă\Jºt5 Ó²@²!~à&¤¡“ÿ‚¤ea;0ÈÉj 1 ^cÑøE9Ù)€ÎêÀ'Ê”oyàe4.4x{›n{×=m₫¡eQ­:ƒ¼è³đ₫ ¾î̉ă&Ấ¶>å¤ÍÙÑ=ÁCẸ̈QSW¯Yÿr¢ ǹ†ˆø0p‹Îßœ>†ø! !¸x¼|ÿ¹[l®<‘‰> ÈÆ„5 caë#i°`F: ê âÁ¡ƒ´G/ûøqOèơ₫ỡ÷ÂzÏ£ƠïÿíDÙ¯Jt¯ªMSÿáưîßѽº]t$8]†‰ư?úZ:k°dœèÜ®&¨#k`Ñ“]ưͯ›.@xߘVßÔ=gÙ7ÜS})¤|º^@sιÚỀ́/ߨÑM/M=uÖNé>–.́WN•jÔrɉíà†tH‰sYk{âXë3(ZÁ0aøå'O_đlo Îí¬ĂÛùÄzXô<ËD…œÏíê]WÚG₫̉Ö̀@»; '…éµwưÄó SëeŒóîcâkè:×~ÅM tZÿ7ˆ¥AEKg=̀F­Ù±mtnWƠ”/*¦½Ø>çùL ¼?L³?êíCGÓô1<ưŒiK˜*ÜÚ'ÀAåmLCƯbó₫Ôç̀t*[n2ï1 É‚3G₫§~x¿˜ ¾ößXÛ;Ü@KC-9Âióđå•ê.0Ô»ÖÆÑñœ[Lî ڲljN ܃zŒ‡UKÿßË₫ưƒè°— V­Í.œ¦—†₫̣ÖLÈMwÛùèüض&t­¦b–‚ZbÛtå£%ƒN,ơdÉ‹e³F¦kà̀†e°@—)”¬ẤN[Ütµ“đºÖSçXÚ‡ç5M€đ~1­~©tÿ®#r=ÓKºÄ€J]Ä)[âq«¤m¤ZXYïB­_oH’ù=jàbHî” -Í„ßN…e¥èq?PƯrĂ‹–¯¨Ö ïgñDgÍå¿ÅXG~º‰{E[®yù üú@ï6ÖÛ#©û ©@ÇûdèXö₫đ7c̣±ơđ?ƒÇêS^Ư½©!ο`ø'¦ĂÈAÑđø’xˆtWïj×èlˆºBôsB˦AIa€|R@&ûÿ,‹‡̉‚2¯¶²°>³ơ²R¨¶]́¨G`Ú˜¸₫e <4'[½µ½[›’¤§›x¤«d ½ú|ôéáuă?ËăkúáÖ®üè–X6ëidz‡5°†~Ë;é#L+1•a ä—'¾” Ÿ¹…˜ơ<Ôñ^–=íy¬uẠ̈f¬ß‹Îηº5¢ ÔzÔUV\fy@·QFñ‘ØTߺŸ,í?Ƕ™¹ù$„üj±{ÆuM$È$[́ rÀ"Åơ₫°^³pưûܾ¶G4̀éñcׂ‹oĐ f¤ơ’¶‹Nj@G¬'&âz»~ÎÂ÷ˆ|?Ü?-h½{ÖØË§_ïœßÖỊ̂ơÇ—ÄƯV>_̀5Ơ<Ÿ¼Øºçz¼wîíÎOÊ2&ĐfXÖS½˜Q @—t|*+đôÍïƠ˜ơ«â½b·¿‘éœ)~¾¢¯YÆ5˜ß„¾mËïo\M‘·wÓ´wƒÓÖü:)n”ø9’é‚«¦ëéóÖöMîk<ÊÂÊfÄÀ%´Mr™†¾—̀îí‚ê€.„åÚû“!°û}«kHÉD˜=1€ ¬=ùB̃6VæOŒ́ăWu÷\™díüîùr˜}_¨¬rXàr‚vShèÿ0#ˆộ€¾‡N:àÉÁ‚> ÀBbïÛ"eÀẠ̊Y·®Q}´Ë*¥ü¦owÓowuç¡·r J|önë Ñ*Ä®_ăz7¦RÇ€¸ÉÓÑ·LƒƯŸ‚uq OW ô·÷æ:êëЧl¿°ô,̉+v<–|mdŸ=̣Úÿú÷g¸•Xxï§^è ƒJ}n+5đ&: L”Đ¡¬%iè -¸’̀Ô–xưiÅ¢=kÜÇ®mĐÆgĐ„ƒƠ1éh\ Ó‡ï#Óí#µ@w/rïR­o€t®ûƯỄ‰‚oŒkmë°Lù´Kω‚Aîùˆüä¶5Ñẵ=Ô|3{Bê i¡_…ïGmè́ '…ĂË[;nK‹w₫öĂçsơwûL<8+Z–—î6΀® Ëú­̉AÙ́«x«S\³0¹+̃uOúrÅ}Ï2L$µ»„çP?×Y8L¼oî¾Q t‚‡9Đm´è½ÙiWÂ¥bĹzÀEGµ¿­́Ûư‰{Ó‡á̃đ/q}Ư @ÖoRp‚K*!¼t"Ó«¦|Lôb “é>)%=™öKaû¥ưëÓê=Ö³ư«±ù¿|HOp>™çjB@§-S,æb́E68÷ªÉ]`>…Ị̂S̃4g½"¸ász2ÔMi‘dà¹7 Ăû±ñúQ#ĐƒÆ%ăùä?ÄyL+€É,=pøgC§²!R¶¿3Œ́‰́BáÏdC•ÊuUÈ“ƯøAÿØÛZSœ₫6¥É]"³/ ö#Q±Ä[ĐYăX´s½àưE7V³;í„là@h< đ¶ñm­èñ÷­5´t)îK¿«6H †5MôèÜg4¬ZưüđăpóæMص÷Œ—WÖƒvúÜưU6n¾?wÍv¾SnØzn‹Ó{B@±ß};ơƒƒ/LW«¿¹;?H´uB½µà „÷qÁđî¾NUcúûW}ƒ{Đ…€¦°­FvëׯÁ÷ßO<₫0̀˜P<ßM­ÆN°_¿4èØmW¬gÖ1ƯD€Nk¬¬Ï³"-@Cguë 'É»]µ°ưY·×Qư˜÷½³ÊÏß¼aÄûOÿ₫Ót"Eúœư÷/®ªuC̉„ơP1²¾ø‚–È₫ÿsơêUÍèÖ†á}‹E|öÑ”½s1xæHnú™Óµ{̉£>xúưç̓>¦è.ê襯×ĶÑy§Àºe)°z^̀M+ =Ó…@ß¿!¶>µ®®ñd2|s₫¬z`¼°KƒºáÄ:&»¼ë́ØÚE¨›†®Xce n¢“–~¯]ѬÎqb .É»] Đ¥x»K^bÑ6Đ£,Xc¢ưñ;+€ƒE°đ6l6Ô tEꌧKƒzNºK‡ŒÚbqoơ’AMMM= Ó²ú48~4eÚ¶;è=ÿפ¡!k—ÎN‘…–L2xD6„9Y’+àøÑ ×­s;Êóé,OË6¼Ø‘CQa8|÷Náç=»t¨¢qªæóGæÅ‘7ßhĐ~Gß~ V̀N¨û"âåe¸Ç-o´ï».ú›́¦ ¡ Lï‡×Y™´·tÖÈqb€±“ 3Đ`°ö±²~9ÔFa¡¢p¹W²&yׄ¡Ú„—cÙâí(½u=ẽAûä;Aµ&¢ßü:Í;qâ“PĐg$\»v­ª««¡c÷̃8yS zgơ‘¹8Y½̣ÉË]?ËÊ‹…øñ<ÙLÄw<,â»Á«ÏÔè€vư«è“Î}Û%´sßä<ع>ëø¶"?-®Ư¯ó[ €>?^ưEđüÿié+—/†cû;Ơ¼ùêƠ|(ëêù½¯—M¾ªfn¢@—¢Á‰Ö°ZĐZºÓ¶&°“¹ỬPƒ%–%¥•u#—K©B#§p¼J+ËäAl 4Y3”Œđr¤ƒYjÛé:#}̃A? 4óA`Ñ8)Ÿ&‡:ië1ưæÂÂ%Ëàĉp̣äIxjËV˜0y D–ŒÇëûê‘̀Üă:Ëđ@’¡p±ü¾M«̉ªü³zl¯·m:$#6®Îƒªó=ÊŸYƒÇ°f÷– sª.S@~A¤¬æ|Ù.¸ØÇ¶cë [L8@ÿGơS/æĂ¬Ê^°yóàă?†Ï?ÿ̃ºOïJç¹oß-„̃Ư½~̣³#‡3S̉Đ%ÂH´–̃‚€ÁhéЦ¥Ë··2aƯXCÁªÖ ¼ S7Lí1µUc̃§ïă0Ä_ÓÑÜñÎÀ}lHyáeö÷§®=E(’ûÀ´Ù{ñđ’ià—?L~iúܽ7bDu‘!²÷,H¤ïñ„4ùIi0­ÑC–Cûäî·¬Ûu؈EuIˆrÎ₫ưdñ eÁ¥Sệ‹2{ƒh₫ßn1n(ơ…¯_+ÇoW·EŒ¢¯ơ. —‡…eοk÷äÙ–oïéôuˆ¿}R+3ó, k»1­[[\ ơ·?ỡ₫œ›è WEÛÔ(ưñIOxnc,s'&Ă¾ơÙ@Ag®~̃½̃;Bb”ÓçVVæQ;7of@—lFÔZzKºbbĺç^Ôåh ™°Èă5–¿˜¥©y ¶¤`ÈvâeVîx{jnOÑ@'˜t\ø\Bëƒè¡Ëe>9ưÀ¯Ë0ˆ¸Ư‡Ä‰ÿ‘§¸ÑÊ¿#Ṃxf”ƒ{B×6®>ßaŸD‡:ü“íôKåĐÀÿ½²½SU@B2èÚ'®t_́èGeÊö™…Å2Ü:¶uÅ̀¨Úw÷á!Pj¢´½̃åñ9zM0ÂûÎñĂ¢n.˜¾ƒé|ă^ă•ơ­»ïGö^A¯á kg3œ¯Ï*Û°,́̀†ïÂÍÓ¥pcÉ“yư¹'ÓaÂàÀ„(§­-ÍÓµ\yÍÔ4t‰Zº(-²…u ›:5Ö ˆ}A±X·±I¶®ûD[yŒƠ¼\璉& ç¯Úo–¹àwÚ¼ư;ÑKư—ÈÁK¯#ÔkÚ§Éđ r™Gb·ÜævÏTÿÅ'oĐÏ}æ¾ă›=Đ̃Åưµ̀D—?Èưư‡÷ «Ï¼YSF_ÿ歷ËS&¦‚WræĂUtALü¸DPƒÛå.àø^8èØ|÷^÷¶>×i5ƒ~%G3e@—;gË`áôdG+ƒ®²5]OµbRcï,Ÿ½«­£ƯÉĐ^3~C]Fưa}æ€GbÁ¯¾¹ƒmăèafÖêQ{;Ë“>l.a˜Ë‰Î—»f{\îÛĂûrï"¯s®ÎV9¸=†ˆú˜(ĐY£Ñ€­SKoa@7ĶJc2ØRv6肳”ë̀g¼³]xÙî-L@’%{Áó©s÷÷I›hn[/Oó>ŒßMK™»¯µ"o¸¯§íá™cB₫®:[V+Ôim÷f×<¿)ưvÇœHè:¹H?F YZ»' shêuù‹Xr̃©÷¹öEñˆƯ§œ[49#¸¥Ă•“=àåg»€/“‘| đh×€WZVØ¡s¯¨‚? }rúÖâ2ĂÆèa+h»Á>¦t…–Îô„qû̉[ĐmH̃ÜR'i[ ”Aë7\Ï:êó~Â{S¤ÔŸßĂá{/È€d ‹ ‘­ƒ½åÁÍ+ªn~]ZæJ°£–\ûØ‚˜¿0.yUF^‡wơw)Z2“"³Y9¸ü‚ơ+Âä®®è¨f +’.íú₫Ó'ÁäaA—©×Ú9â{Ïร¬ÈÊÁơ{\†¸©îĐ³½ưk£‡¯X!¢ Eg1a ³:vé ~̉.%:›rz…zeä°_(,lS›ß%…fyO—ĂßTeÀ(@·jmæĐ̃­ÍS›VÄ×hr@#¨_z§d¹ÿùâÖŒ³ăÉƠo6“ç;m‹¾Br ­}•™™ùTÅ.–µùéƒ[‡N¬ ë=S²©ÂßvHëy×¼u›qf–£Óà­Œù5Kg­{f”]‹²´2uÉ¥5CL•5æ1U +4LÖèqZOèji@W´¡Ô@3ê(†}CË,P[×ëh^S¨y½ø$BŒ è̃6 Pë­!OíËö€'—'Ăó›²ä‡ÍîäU¾jN4tËñx~çcÉ7Ö/K„‰ă³ OeKVÿUm—Î3́7|2K oy8l_ S†]Çd?&7±t´jë<O]«¢̣¤Xè¸Ñ¥Ă1|æHWï¿q₫uaYäíŸ0v „ă¹è´ €®…÷[̃9}ÏFX!¶®Ụ́™8ĐYMÆä9­qÏt :Ë,JíœË1Ø̃s1ḅAËId2”]l9ïă3“ÅÖ“çă¼×dÀà@Ÿs_H»â¼¿Qd´ßNô„•‹zÁŸß›7®†‡vËƠ?ü³—»@TˆĂ•ŸÊ˜;uDđƯõ.„ƠË»@XZ®«»Tù””~Ú–ÍégÎ|…m@Đ>₫è8<²¤D¾ÏZ¨©ëåw76ÜqưÆå ¯¯Y‹' •Ă×ÇÀüù=`̀°X(*†}`́ P˜91 ¶=–·Ï”ª?XegÖ_.m₫Âx¼6Z·só°s÷{+¢ÿ"É0§IíËomïô?|V™¹ùÅ”;î₫¿ƒ̃~ˆÆà;¬YwîÜ‘·Ă·ß}ưÆNƒäÊÍ^vøtê'sáÁB1Đn®ºFËvqÇ[0ĐY-:w 4ƇưƠÓ@LŸ0Ê€&Íü*–³ S*&ëÆx₫ >h2`P ?¾8&!3Éùë_?îϬNƒ}{–CLù!¨ïØ₫́~<³Œ?z>—~¸¯í\›ÖkÜ Àk§_/¨»Nç•_ùjÚcNƠ~±âöäaÁ‡±¼=˜l4@ĐÂÚÉ}î‘¿!ŒOϪ¥'MÙNA wÑ›ö /óH*üO–«U–“8n- ?½^x\jƒ7¼q=GɼqÊFÏú»èÍA0yë (¬'Ù‰ÚÓߨíLƤŒü¶ÿ}ÓO@Eqư ₫]ˆ‰"ʹ6vùó8̀›‹ èxØĐ}üj.X$_úÍ7çë´Ôưû…§I¯ô?ƒÍÜÀ +ƒẀ̃†ûÄáΙú熫…·à0”O5»Ñ̃Íú<₫øçcjàtfëáŸä‘y‹œÓX!.̀\2Effn±Ÿ‘hiÓöwÜ—Cx=vØ0ï₫pëÖ­zí@ÚDeäËN粇÷_øc꼃ơ:‹É½¹'¯çÿ¤(¬gÍG̣öă â2Đ²dÀ @ñ·>eDŒưĐ¼Txï½wê@öÏ?Wáé-ëaăª¸…QÑ„€¦à.;K®±·µx59Æ)£O‘×UƠ³ĂY€yeûHùÁ“˜¼UAéà¹'¤l* 'º^@·u÷# ¢Ó×Ȭ¿PÛ¿-zÚ́]Øo&lØ´nܸQ×§OŸ†¨.}äÏ*@fû;¸ŸL’’?è÷î…‚âÈÁM¬s?¨ÄÀan9ïƯß×½Ô·:F>6ºŸMƠ¹2À¨lđÀü øô“SđÖ‘×aʸøïÖ|¸ñU}˜+AMñcø×ÚX[<å̉Îj÷Û{²5ˆ&î·N—üĐ%Ó•¶KÑqu{Ÿ°¡®Ñ9×h»›>Úyô°•U¸M& ƒ[Û9O÷ÄoêÊ£ç$CÆN‚w½çΟ‡qÓæA2'OùĐ£?¼ïüjúÉ4§‘^Ă&,ó^Ü–ô.؇`NĐçÁU8Đ ·¿%ữó»è8ôÅ3»o*Ö¾;ÖæOŒ†‡ç% z€®₫¦îPëØÖ²êĐê›åÅ@\%lÿúÔÏq‚@kt6‡à8W ₫rMăzÁœ@́P@Ad₫D˜Ÿ ë7ÉAƹꂇØä÷‡øÑ«ñùÿZp?:Å›¿Úzot®¨&(´{B¬fNùLB;Çzxb"«­¿ÚœI)u§áFñ₫Ûđï)e°Ü£ho’•Ù̃,mè¼Ø₫dM£í“´û"ϘÏRW¶¡çỠæK2¹K°ü¾(Á­hY2 Ç*µŒÿ¿¯ü¿·íذs–ö>áỰỏ‰hº¬ëzp ÛlƯ|.F Y~ Míwtå—_G»0¼-myCS=~·ódÇy‡Â8Đï} cÅ¥ë‡yÈ n&#̀MF;§ÁLP÷́ß=HØwºú[ßë-½½ơm?1÷c“Cg9&Úº¥Ö‚×hË´rn´C‘4>Ÿ.đcææ̉fÿñƒ¹€±æ3ËY@?ª¯9Ç­¥w´vtĐm4ëªßÚ¹̃Ơ¸Çœ¢ÁiŒ§ ̣¨™ƒWf9†»=´ că›éÓÜänú“́_:™Lùcÿ ÿM,÷]üÿíªø^J´µF óªklé€á@7ưߣ.^Ç₫ôÇTÖ¸¥½•­ÅúgG«ƯÎbCå=ùBÆ[=N°Ä-fßS„6] m¬ëÁ%•RRy'sÁR}`N÷r ›₫‚ƯD±ÎỲç,yi° d¤Œ™—kèÆ”¯Æ.[́ óƯS&wbKHa'ºutCYj9oîÈ¢AQôvai5è̀f@O›»÷ßHqƒ—ÇHqè¦d}́cÖHo,@7©CI8Đ9Đơư½˜̉ưb̃ØuVL (‰³ÜÚn`“»œK¡ö_¼ñl–I˜ƯWÎŒªÆ*-¥z9Äữo¾IöÀ{úU1tñP}aÎ5ôæ1À~zËH:íæĐ³¯ ëÖª<,ø^nÀ´“0 E+ÔQ̃ỲCáY¯*̃Ÿ₫’óV€ËùPd<á̉=—ÊqS󼵂¶­æºÚ÷´   UKÛQ•“©×đßZăĂăơN˜(Ÿ̉$Kơ¤c”ë&dj˜°Ư0ÏG‚|ôÜm"Ú…Öq…÷Qm”Ắ³ xêeQƯ©Ü©˜Úª˜ŸYûFÙö$§Á˜è9ʶ¢¿ÔvÔä¼Lï¯lº¦VN„m‹ÿ§¨«²½©̃$§ ¢âwï îmà´†×Ö ®Ëå?ºSåå¨Ô‰¾¨÷;\§˜êú^meG©´ÛUÅÿ•ư~ ÿïl ·µ³<B†g•FªF.¼âÉ÷+ö¦ªÜËỆ̀ÇøđúÑj(s<…ŒơLïùB̉ä'ÔñJơeùp“»iCû’¼Y4n±yiĐ Ơ¥¨ JR€NơÑv4ªêà%tÓö.êàKfK 4Ư×ÀƒXƯ@¬!]@×ơ~êêI`£m±:ûJ¥.ô~¯ê¸OS»èºê"èrè®KƯ¹ ü¬}£ ˆºÚ¯Œ‹is̀CĐ«÷Û ¶ÜÛT@×ö;"^ɵmeÂÿñ¾$‡–F:́oâËWó›LKÿñxwÀµ|8¼9s»Œnqy‘±ŸÅŒ|¨IµôÔ™;É»ưjHÉ”!hngá¶Æ¼è&ô?J]›ºë¢¶Æèºê—!„ÄÊÄĂê `GD´U=Ÿ]×ûƠ‹Ï½„"hˆy?uírXD»ˆººëRïÄ>ù•£:ÙÓƠÆ®×Û)²¨¬zÖ+º®6¨ ÛŒơ;nÈcO è­,-̀<4'ºÆ6k´ơmơü8¶?çû«_V„)ØÖ72÷_Iœ´±É Üs2ÅpƯ $WÂṇ@ngÑơƒ{½Ÿ.Í\}MîÊ:=Œ"'7Áâ‡̀§¤Q(¯Ơiéøèùih ˆĐM¡–W üÎE¾?™—å¦SüĐ}Âç ¾µ‚û¤˜Ü•ϤvR>/ÿ-Ô¦êÊÅïéÜwa=IC̣QÔ“¶7ÑRZƯuA?Cø̉»Ä ®ùàÿ÷ îûBpMµ]æb>'Åóèđ›÷‰̉Đ1¿j8áJAß̉;Yx¼–:ˆíMÖª÷a•v¤­ôlJ´ƯXØÆÂƯ Âï)†‡üµ &záơºI/~Ϭ¡+ʵ Ëʽ&“;Ơä_ù› v.™̀)ßG8i¤‰`E}hyH81\lT ăĂ\đµÏ¾ÙµÑ´ôÚ å@!c—N‹„¯_Ëÿ³êlɸXF³Đz{¯Đí“‹₫ĐçØT©¦÷ÄI›À-6ïºKXZ´j½ôù?ºÉ5Ú›6¨Ó¾V« ́˜ß@o ª‡`𬻮2°©»O5œí¿Fư5̀~x=Cđ¼_°Y+ø^*ĐƠ-Ec',Âïlĺ¨~XPÏXƠ~£Mp”ưï¯h—gß©kæ}ÿ*u'B†„m̀̉7eë+x¯T,5ªËTA‚₫₫>ê¾\_.(W;E; ĐëƠëªö]U~xjY=KVƒÉƒÑ4túeÚÚXôÙǯöwƒ‰Ñ¾/¢̀½¶½#<8+đŒơËp¡b€6@Z;ytjz)zè Ü—~ Q´uZ»÷í<´ÖÆƯï AÛàĐtÓ†²®OÛú[r «ykËGQ¨ä K2"Đ…{ëE]1¸ '9rk~„nà)̣ÛÇCÍDÀ@/ô›èB0×hµitd@>đ«@¾Ï^—ôí¨C†¥ö6  '>ê&~jÁ­̉ê€.́·º —|‰ZC7’†®®ÎBGGe¿ 'B ´z¡†₫°±5ôV>6V©qíƯöHÔ ö̀j:›ŸÎW§sÔ×/‡‹ï~Ts¡W‘8Z9¸¥à+ßÓA-µMªÖ-ö¾X ùêàuỖ;ÂKLưX̣p p,04D^́ḲØ&ïg©P?÷v’Z#]í€,0*Ú‡̉£Xƒ +¾µ‚¶5$ĐƠPUÀ °4tÖ₫WNXÔ§^@#W*ï̀̉7Mtµíaâ@o ûX_ÚY¢Í‰N)ÿzÚ+~ ,́`Ê[RàéQZàù̉+Ït”‘I\,¤Åä»öe Ư“3Ç„Ỗœq\}¾íeûˆ¯£™™—…•Í·ØÜë¹Í8đ!~Üă€G¶₫äœ!¾râsr ›6Đ¯ö*ë½ÍÈƠE„»ßÓÛ0Q49ùZ©>ÉD.ÔĐåZ®Ê€«É$Ư˜º «ÓôÄ]ëVCóª.³^@ÇvwĐ%_zôMS]¨¡×9Ô57 +~´̀$j‡‰ÑN¿Đí«“³*‡ưóÁ¡\ £RÅÀZWçÁ̉©đÀ´ÈGvå̀ƒ‹½àç±æâX/g3só1v탾̣ë2 ô=‰MUcOº·¨•V»DåN•X?·q ë<]ƒYs¿®tuk¾äऄ†hÓ9̃#ICÇûh ]8Hɽ¢ñ#„|¥j»ăơzÎv‚‰̉ZAưƠ­ï ¬„¦sßá}ÂçmPSOM@.½ˆöƒPQƒơn•vëÇT=ú¦)€.́Mkè Úßq¯@„N†vSgrWkÂú$`º*¨—̣wJÊjÉ‚uuckèJÍ\M¿mÛÖĽe@eRAu ¨z=Ñx¡_µÁ+6´m\xPÛ7Đ/»uºT¦ êx=™½º{BTHÛs₫^¶£SăÛ…̣Ûáß­í8øEË0²›ŒÅq.eúvđÍ¡½f¿‘R¹•S£~8Đ9Đu-   „̉X@W»ưëIû±…ûÍU]º¯NëẠ̀°OƯ€­7Đyø_óL¨h2¡ ëZg}¼ib . èw ưôº̃A¨2÷ –ßT@—‡CUi{–‰˜*Їkèkc¶³‰éṣx7Z¤8]đr23ku¿¹¹Ù™Đ»Ï7.‹;ùÊÓ×(½¼5ăÆÖU ·sÓƯnYZÅ|t®h¶…^NjꪖëôÜÈVffÏ[µu¾€ñ×ki«[RåShW9†eMœø$„–O‡)=jcF<üJú́=¡isÓăñânå@ç@×tÅ®]÷Zh"6$Điÿ4™Í…[rÈÛŸ´ ¹¹S]ÂkÊ¥ƠXîäLØ –»âƯh°V5OÎ…”É‚ÁØ @W<ÓMÍ3©Îơ&OjLèdªIƠ)’ê»PSÛà÷ÆÚNoÚv­àưD]°́¢©.ô}½öfíEû+'+Æ0¹¿¨¦=È'D­Ó!~O– a0© 顇ºƯ$ËÂ>£~X¦2é̉ô®º5­¡“Sœ˜2)⇕ÑôIĂ “0Æô¦Ÿ1Àô(¦ ˜’´ÜÛØ—h×”̀¦µ¶w:G±V{f”Á­˜ AEăè°2¯CpéHœ°ñ¥ô9{Ë ÑÌ@Ïóđ —.ÍEhX$µ[èË»H­'¾?M …“€¼¦ºÊd̃öÅ䇩=&£9`@ô¸ÆlnaYÑÆÁeŸcPÜg̣s™8yóñ”Ù»G¥Ï{ÎÅÏ]„6 ]ªÀđûøÏe€Ë€)Ê@K:¾+-íÅ”JlX£È¹T¸4•õ7=÷÷¢°ó:ñA˜Ë—{YZ Đñ=iy@›?‰̉RAy₫]C牷—.\¸ 4hA@ÏÁw½ª̣¾ªsy´Bs>¡á2Àe€Ë—f%-è§ErØ#Ç=¡Ç;ưŸœ\åfxt₫#nV?âæ¢=đzrM—Ë—¦> s¨sà2Àe€Ë—{@₫ïQ‚ù ^ÇIEND®B`‚rpyc-3.4.4/docs/_static/facebook-logo.png000066400000000000000000000244211314203541000202660ustar00rootroot00000000000000‰PNG  IHDRddpâ•T pHYs  œ OiCCPPhotoshop ICC profilexÚSgTSé=÷̃ôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆ€ŒQ, Øä!¢ƒ£ˆÊûá{£kÖ¼÷æÍ₫µ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sư#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zB¦@F€˜&S `ËcbăP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™F̣W<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aa@.Ây™24àó̀ ‘àƒóưxήÎÎ6¶_-ê¿ÿ"bbă₫åÏ«p@át~Ñ₫,/³€;€m₫¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷̣»oÁÔ(€hƒáÏwÿï?ưG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púaÁ(¼ AÈa!ÚˆbX#™…ø!ÁH‹$ ɈQ"K‘5H1RT UḤ=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Đdt1 ›Đr´=Œ6¡çĐ«hÚ>CÇ0Àè3Äl0.ÆĂB±8, “c˱"¬ «Æ°V¬»‰ơcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤T̉̉F̉nR#é,©›4H#“ÉÚdk²9”, +È…ääĂä3ää!̣[ b@q¤øSâ(RÊjJåå4åe˜2AU£RƯ¨¡T5ZB­¡¶R¯Q‡¨4u9̓IK¥­¢•Óhh÷i¯ètºƯ•N—ĐW̉ËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ª̃ª UóUËT©^S}®FU3Să© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yư‰YĂLĂOC¤Q ±_ă¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ư»‹=ª©¡9C3J3W³Ró”f?ă˜qøœtN ç(§—ó~̃ï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSƯ§ §M=:ơ®.ªk¥¡»Dw¿n§î˜¾^€Lo§̃y½çú}/ưTưmú§ơG X³ $Û Î<Å5qo</ÇÛñQC]Ă@C¥a•a—á„‘¹Ñ<£ƠFFŒiÆ\ă$ămÆmÆ£&&!&KMêMîRM¹¦)¦;L;LÇÍ̀Í¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«Ögðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ă“}º}ư= ‡Ù«Z~s´r:V:̃Μî?}Åô–é/gXÏÏØ3ă¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆƯȽäJtơq]áz̉ơ›³›Âí¨Û¯î6îiî‡ÜŸ̀4Ÿ)Y3sĐĂÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸă>ă<7̃2̃Y_̀7À·È·ËOĂo_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈ́­!÷ç˜Î‘Îi…P~èÖĐaæa‹Ă~ '…‡…W†?pˆXÑ1—5wÑÜCsßDúD–D̃›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fỲƠXXIlK9.*®6nl¾ßüíó‡ââ ă{˜/È]py¡ÎÂô…§©.,:–@LˆN8”đA*¨Œ%̣w% yÂÂg"/Ñ6шØC\*ṆH*Mz’́‘¼5y$Å3¥,幄'©¼L LƯ›:v m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²₫Ån‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«+Íí̀³ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏf̉féæ̃-[–ª—æ—n ÙÚ´ ßV´íơöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6î̉Ưµa×ønÑî{¼ö4́ƠÛ[¼÷ư>ɾÛUUMƠfƠeûIû³÷?®‰ªéø–ûm]­NmqíÇ̉ư#¶×¹ÔỞ=TRÖ+ëGǾ₫ïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jḄF›Sû[b[ºÒ>ÑÖễzüGÛœ499â?rưéü§CÏdÏ&₫¢₫Ë®/~øƠë×Îјѡ—̣—“¿m|¥ưêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±ơSЧû“““ÿ˜óüc3-ÛgAMA±|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF,IDATxÚ́}YŒ%×ỹ÷ŸS˽·oï===ûÎÑ,¤f(’r¢P )Lj-EŒ!À°•†~2̣¼Ä@'‚¼ø!ÉCè-€8yQl‚”c‰’y`™åሳ9{÷tOï}—ZÎùóPuëÖrªúöBfHªfî,÷Ö­®:ß¿~ÿÎ!fÆ/Gç°€ˆ*O:zô(Úí6êơ:<ÏĂÜܦöB£9=Ï:^găhàw÷={vèé§Ÿ†ïûŸÁso¼ñ®^½Ú²Ú¬[õœ½yÅi µr·î̀néz̀²•/tÛë¨×k8~æó{O_üå/LzabúÈZ‡û…M_Jđ©P; óÏ]ä³_ÔBX÷—æo½µ¼pëµ…[?ù̃W–lçÄ̀iÈêÊ"†‡Gpîép̣äç^üƒ™£Ÿư †˜Ñ*€R!Í ¥5èSb^€‚ †”„´Á¬æVf¯ÿÏK¯~ă?ưøÿ₫éσ Xàdÿ¾iœ>÷9ë±_úú?;|îùÁdtÁ hÍ‚ pm+ñiñKD„®§àA"@Z.lÛY¼{ưÿ₫̉ŸưçÿøÖO¤vđ«/₫æô3_ưĂoÀùjè· ê5‰ñauW áZ’`ËO‹~DG J1:ÂÊF€ơv/Đ10Ûm h/₫éß~çïƠok^ñq,¯₫£|à‰_ù߆z•P5G`fÜÅĈÛĐ̀è)ÅĐ'Üp1ño€ˆæ–=t} KÂr!tçÇư¿ÿí‹₫gÿë>oÇ–øê×^xüW₫ù+¾v?ÏʇbÆäˆ‹S5Ô] ¥ß AiF×Wèú AÈPºÔ'ÇLRl‹Ps$j„î eüyÇS¸÷°‹Å5’Âr@ªơ£×ÿä_}ùơï½¼È[DJ/ù ¿ö‡ß åø×YûP1=îâè¾!pl/ €ÏWXZó±² ă+è¨O´ÿ $¡îHŒ5mLŒ8p ­³Bzs¶…ùeR¤åBwç¿ơÆ·ÿÍK?øÁkáæ€¸®‹û{xü¹ß}Éz꿱̣¡tÆ‘™˜æè*æ—»˜_öàßħ)Êêi†c L»˜¯A"¥èuk®ù•HSÈr.¼ñ̉O¿ûÿ₫ßûÁæyȉăGñعg¦ÄÈ™­UjL¹8²·M„®¯ps¶µVDYñUñiÊư)6cA qg®ƠơG÷5P‹µÙÛ@§«°̃ àCư£ăŸỵƠ³÷g¯^»‘¹HÿgrrŸ{̣"¬‰s_‡Ơ8¡”‚ë́ŸªơÍ” ltBܸ½Ơ–!bÇŸîÀXmù¸q{$#É?´·!Z)°¬Ÿh́½ø[gÏ|ơz½ÇabúÀ05₫¥(­±wÂEÍ‘PAº¾Â{÷ÖÑñC!¿ñ꽈€â½{ëèú @iF£&1>l#ÔJ£Ç_˜>0ṭä 3 ơz‡Ü© äŒ^`­Pw&G„Zˆÿǽ:]AŸ,OÁE…a¨á^-v½’—¯àù A  D‘ B§«psv:3Y3öN¸°$µÙ#ë£?{âØ!äâ091Np÷| [)á1RFᬄ‹],¯ûI˜÷q TÑ‹b–aȵ0T—hÔ,Ô] E°¤€mQâ0´‚P#TAÈhwCÜØÖ½$,EËë>–»Ø;Yƒ̉Œº+19â`n© KX6Ơg>?³oߥññq,..ö€™™aÙ¶#ܱÇ{ª7ÖtÀqx볋>̃¹3àù #phº8´·}u45 K¯ç ÿá›×°¼îĂʱǼbă#Nôëȼ gôñZ­fŸ:u*\^^æÛ¶Q¯×IJQgûXG€4\­#`iÍC»~lµƒđ ) _xb₫ÎăS8¼·±cÓ˱ÓfÍ`Ă¥ÚƯKkö× ´ÆpƯ‚%)ÎWÄ~ATwgƒăAµ`||ăăăR)U'ĐÖŒ†…²Œ(ºZZóz„ÁÇ̣ètöNÔđ[ÿ(;<²«…úecĂXZó°g̀À #³èü¡0jlÏ̀̀è¥Ù¶MB`2£áJHñT^ Đê„‘~ éø 'ö5ñ{/ÄØ°³ëyH/Y6 ¡Ơ áù ®-A X’Đ Ä,„”RJô(z ~úi4 ̉JK³w¥£l“%~¨>v€PlăL6đû¿~ #Cö‡“­ƒúƯXÈ 5º¾‚mG₫i¨nacUAD©‹&Û¶ [đä“Obqq‘ˆX0sŒDô£ˆ£‡̉!ÄÇK3”f¸¶ÀoÿÚñŒœ#)­“jY™ü ë₫k¥„”’;Ö×Ïó†!,GEIÿ‡(;­™©êz _{á0Ï }¸‘›.wê½Ï•êÛ´^¥!¥…/}éKÙ°7acL;)®tZ•ñÙbá(d́ßÓÀóOÎ|$µ‘ªñáµ”;¿—*­‘ñ!F´-‰£ˆTC(÷O6~^Sj<ûÙi¸‘ÖèIæf‚„óÊq₫°̀N*; @oKNwÉk–¼É%¨hͲđäg&?:å­6Ú0½mHÄÜj0Ë”Éêó₫fæFƠ(ôëĂ›~¨q₫ø&Fœ ׉ô—Oï³́xjăsZæ/§heN¿·{æ¨ 3ƒ7lFA®Èpy­€Çí^̣çù óË_¥™¡uô 4Ă÷üPÇ‚\HÊd¥Æ³ZC¨¯ éPnç€PÆô’)ÓgUÎܤAœÿ”Û"Ù×Ü1Z3¾ó£{xư§°²î§’Àh©ï0-Ḱ(Dßh‡¸5·W÷¥?¾Ô§±9öMD L¥ĐX]YƒnLcĂ !’±Ú©Ś'¢Ï&HlpÜ”3G·o¤”(¥ö\êj ¶"i*ØÉ±¼î¡Ơ AĐḍ ÷Àå÷Ôoë$PÜÓiuàuÖ0™óCV^;1ßA₫́·àº˜‚(&Æ’Á"JƲ‘rÁk'Ι«øë´ơ#ƒ/ÀħyÆ MäeG»" c25.™Ăï~è2_q¯€đ½ïăÖÍ»¸ö̃¦«˜ŒܪLkV«•åî/´qç̃:FG¨7j°mBHuÚözHơ,+©‚i, §8wq%0‰ĂÜI¸7“÷Ÿ³yẠÎT"JºßµbøA€N»‹Ơµ 8zzªÍŒv«÷·‰AẪøÂBD_àˆ ^x°€åÅeX¶…z½†¡¡ê:êu–eCJ¬X°áŒtQüº`β(Pî3B°Ë˜5­yç%fF”cpÊ]¢½–Q¢è‡èv=tÚ]´Ûmt:‚ @*œtJÆ"Sƒ4ƒˆâÉ(Zil¬·°¾Ö Û¶à8jơêơj5ă@J !(ñ.½f²$R$³É5rßóü₫¯?†=ăµÔ S! s¹msG÷á₫é r‰V'À¿û¯—0·°¥B„AÖ:1WRÊ(#'‘̣•Tª 8¥úál¬’½» C0è¢Ơê$eYldžëºp]®ëÀ¶mXVª9é`6úÄ>0”t–Ư×ÄôDíCå§ê®…‡ó7«+ëhot`Û2²*±eAb§ G¥¼ÜÀs ©å.™AÊHk*B«ƠLTl₫¤%a[¶mö-X¶Û¶`[B HưƯ“®đ‘ß~vjƒÓA90(¥’ƒAE5'2@Ec@%v÷ÿï‘*•+¾ek>9óß ƒvêT­Tj~ªC¼r ”¹Ä`TÉ£¦)9zˆ’Ä e eQÖ¥#£‰Ú EỄ¤%}₫èÑ4Y”öD©r@̀§eÆS½ ¡̀@äưE^ŒsÎ̃„Á4erçQQCÙ餱Éê— (iEP_v)!eđ!lHZ(å/ Éa~Öm%›a!«}5W>RXÔ]«/ŒÔÏA8Ă ç¨̃R‚œÏÇÓÈeEÍØTÔ΂n₫ËŸ¼‘!'™*–¦0Ô˜Ù3„ß}ñô¶ù¬[³ëøÖËïTô2sr믢y3Rd™̉ơ¸ôxRz|ñ!DEoĐŒíƒQ®TuQ<̣ƠKw µ!&èƠB|…³'Æñ;/̃¶›_́à|ç=H ]†rOÆ£ÛmÔ,)„3L|(Öæñu¨œf¤Ă=CÄU"ÿMd.IMkÉPÍ®ŒÀlK¡QÛYƒƒ”„fĂé’© rÍ™đ—¹XR |1‹óÜÖ¦€PIrhĐ ”Dd•ZảTSÙû´; $¥@Ú(ƯÔ×ă9ăF²UÅ̀8TW?+Ẵ‚„RUbHê¥ “F¤́¯I*ÛH©B˜v̀¦Í*ä…SÅëiÄ Η¬)gÎæ²̣‚ÎfÚƯ4…h¢Œr*“$*ezzœ̉®°·Hµo¤ÂØ̀='Ú/“T{#YÀÓ @ aQ14³˜9“&ªb“FP g•ï®̉”]ê§t"œâ8 æ¨_vÏä®Ü/Ne3̣»“ET‚j™™Ê½O(gˆóŒr!º+«¹TB¦èm·jœ­sg7b‡hKïQ4 V¡wîÀô{6®`6 >#?esÓwÉh#«€  F›¶ )FÙ:§₫ß7a© AIf²4°SOK9SN}«4#g̉ˆ*´¢ ˆÁzB%u†íhG¯Œll/攋͆œ´7q/ Ó”KƯK‚…j.«dLÉܶÀ¨đ=%@Ét̃»T7¡sa¨s$mBT¢-=–3}Øủ ÷¨ wy28»P7©pöƠ9Ôv¤ ê©"kÂR?ƠFÚ¾̣yÖ–\^3̣₫mª+oF9T.Í´;‰!å:ư ç;1ăR­ ”äZ"@ØuB”ị̈NE„E‰f‹Xe!0*ÊÁæ,¾lRíIOÔ÷FÅ–¸Î‘ô“Q–ÂÊơÿK[0YÆ̀2Ó-A%` ŒÍ‹XeyMö{›„Àd Ÿwà?z}aù™œª²&,ÉÔóùH’Ơ—ÿd«"æ3„}¨0#dÑ|>Räº*ë&¥@P9ŸE»UwÏƯ'sÉÚ,ßå¬̉“Xû³8“ç ̀öR¡Ñ9SvLÑ!DTÁƒQ%åT½©¡J©”¬§Ú%@HI€dîJ¡~̃%¯)&Z©¼jh –W‘‘ %CVKjÆÀuĐæå\2DH»¡”¶Q”b{S&,E·gZ€R₫¥÷3 )›™Ícz‘B™7ơÿæÀ0±k’ȶªl\́¢¹"CKgMX)(È©úoTµ4‰Íˆ5£ù2øMÁ@YEqs0(•Đí„̣¹&Û̀Cª‚ ¢Ÿk(S§µ„«Mª5P´ÁÈ8"2p%¶²2jCxÜJÇJIîN»ør—cN@aC”•5_¹*QiP4Đüœb©©*IæJ¥ F0ȳ£ˆ£@•?ÉÈSơ‡} "«F)Ph û«pê9óA¦a“9Ë©w‰¯l’ØR3U˜ÛP½"& }V±Ÿè%Ïé†÷\ô•ñ'½bUûÀÁLV¦^VÑË“„&1p9ù†B5)¹)•²k¹zB®j˜ÎÈ9 q¦t¯6o“-or0Ú>“O Ăçù+*yMe|4¥À̃U¶7dĂÅRnßX¥ÿEÙ®"ƒéÛJ_VúA9†À8 …ÈЬ` ƒM5C“PQ7))„í|âfÅ@4ö–Ìù“‚3§íí&'J(DQTV£ 2s–÷&UR•jäî:uHMS«måRYÉÙ´èT=AQ›$U=lYư„J#3s¥L3JbcÓ·N J;†’X&[1äØWPJ#R³Ù)Eŧ̃“–ˆÚ®·ÜJ"SQse¼0J¤¤¢‚sîB›…¬UÓèJ{¸vë U(€Ẫ́)YEˆơʺJ—wÆS> B4=™5£áZpliX|ÆÔI…9u&¿Q$)砩߬†\äF¹™^iµ‚IƯrèK&J?O.̀`Ûu×ètĂhç6)2ÂÔ[fCC~-~Qs- 7¢s*¥¾iSâ,û€%Á‚Ñ̀å{e³Ưä(tëïfØK(v˜2˜p­á†퀪ă@¸Ï‹é^d¸¾¾̃Äu]X–±€Z$°ÑªhÑ2)Ó“Üú††Å,©Êw”đO†LŸLm«”©TĐ„lmÇ‹dÊUäcécz²)̣K¡µ&D´%ÈË/¿ÜäÍ7ßÇ‹b¹¢3G(­±Ñv`S±o²FÍv(¢Éù 2;{Ó¢&@©¤E©)ÉD»¨!éå0L÷[m¦´Hs4Uafª¥!–VºđühO‡:³BnµZÜn·“®!\ºt +++ €‡¬ƠE[=X́$íªơº…#û† [û˜£,} LÎ 6º E»n²r÷CæÜËÈ0÷ÖÔŒ#ûh¸V²ä.zÓ§›réç¡uJÊÔëu¶,K3¤jÈ÷ÑYBâárAmÇ­ăØ₫&&Çj—’F‡j̀9J¢5ªbR h̃\í̃T”tÑÀLv"ÈP1&Çj8²¯ï¨-ĐêX^ó „€C­¥ºX}ŸY¨ÅÅE½±±ÑdyyóóóÚ²Ϧîܘóđ Hb½`îa–%À­5r₫Ôê®…n4àC•:Ëüƒ”dúd¢ơóÄgÿZ‚¨¸ÄÛjⳂƠÛ́܉1XVäÄ…$Ük¡ëi€,ŒÊù¿µĐ½¯Á·Z­~ây:k­» ±6iß»ô08đwKûƯ;k˜oÀ‰÷2mÚ¸ø™I¼ym~ ă¹u›%3Eµ.È*Rr³º Đ ×o·s;@ñ#•3ïßkçf‰Áp!s³›RÑz]Nc´i#TB6Úî>hE«‘LÚw~HB®+­=Çqt/́M¶Í[XXĐ̀́i« ±~uʾûÓ|♵uï̃^ÁMAÅ[ÍM¹xæü\ywËë,K@lÂc̉¶¬w%BI÷ư‡>₫àßË^4è/dÜ›¦ÖÛÀ†Đè/œ̀9ú0™iË™öÖ‘™o:xüä(F‡#0ˆI„«?_…çk´1i½ÿă:­\UÚZo·Û̃Í›7YÇ{EF§2ăöíÛX\\ ˆh…!ægœ›ßmÈƠeiÛøà̃:®½¿ )¢…0CÅm:xæü4N†¡̉ĐzëRLªÊˆË|%Mæg¹x¹§ø•˜±øÿT|Éø}BåĐ̉¢\êĐ:RKNlâéómÚPñ₫ˆR\»¹…å„´Ñ •åiëƯ¿`Èy"Z½}ûv8??_¤N:®]»¦}öÙu¥xÖ&ïƯĂîƠ?¯óÔ× lû[« Μ‡̉Ñ®˜–%pîø8îmẫƒ6–=´=¥£âŒ¡âLw qi=¬Èº§CÍTƒA~¼8›CpzùÚ”Ù‰!k8½25g–ªMkR{ßƠ-L¹88]ĂhÓJƦ' ×>XÁ;·W!¤‰ 8è\~Å&5§•Ú¸{÷®Ö)IÎpYo¿ư6ŸV{küïÂ/ƒ,ùÎíU„qâĐê® ­Pi Ù8wb ^ ±̃±̃ á¡B?»7Íâ-iĐ.$”¦ Dă@ÑU~Ÿ¨Ôb™©5ƠÓïe×gçx¹\À’Ñ6͆ÄpĂ‚kG»Ù…*Ê/,+̣o¿¿‚K]HiC"T‡Ÿ|·)₫bëeÉ……¥%ïÎ;çTØOưôéÓôÜsÏƠ,ËÚODO¯ª™goyO<èºË:€ëZ8sl ÓăuÔjV¬ºHÔ>©@Sù̀ °±f^J“G* µÓ‹ˆR„4©ÎF¤́‚ÏÜ_¤3₫WAí­Đ=ÛÂ-t¼$m8h{‡́Ÿü娸ÿ— ö[̀ü3Ïóf_yåï₫ưû©Û1́§~ăÆ >v́˜ẉäÉf~G“]‘söÉZ§}Ï?ûKëzï´0̃zg®³†C3MŒ4LŒ¸ XMk¶• âú3ev(!N+s÷iư”³MQâ½óÙ¸8r®ÍƯ4]1=Y‡~í‰Ë̀X^ó±Ọ̈qçAn!%„t0,fç÷[—ÿªN«—́w´Öï¹®ûđ̣åËAŒR ¢­X¿øÅ/ʳgÏ8¤µ>'HŸfˆ£Ká¡óóáñÓ4µ7£ˆæx-’‰7.îç×^̀5l'¨ !T˜“B™ù„ymËÓñé­¸’ˆJ›MTVƒ̉~„sWcD tü ă©è4­c]£•Iñ̃ ùÁ[ơ¾fëºt•™ï]¿~}ă‡?ü¡êv»Ù{e6̉“¤/|á Ö… ZëBˆSŸ’¤ÚÙ¿¦§¬©}‡Ú<>pƯƠ,‰I‚™úkD¥¼‘,œt °pẒYo±È.üR Sr¾ =è=3Å:5è)Çm$̃3ˆöó¢·ö†¤-n{u±´4B÷î‹Ù›wïi²î2Ó;̀ú]!ÄÜơë×7^{í5¥ !i% =₫…^gΜi„a¸‡ˆ !|P@íaĐhwÔ×ÍÑnƒaYɂԌGK† •åm=ååܲó‹I[aÓΦơLªÎO #Aºm—ÖW%º«`½Â$q‡™?pǶí‡?ûÙÏ:ßÿ₫÷•Ræ…<7¤g¾₫yqøđa×uƯa"ÚẰûˆh?€=€#èÀÑê ”Ư£uç3Ç?Êià³RÛ¹(y ÑÄ2€y³f¥” ëW®\ ._¾¬=Ï+ÊAéçÏŸ§3gÎÈññq×qœ&3 !&´Ö£DÔdæ‹¢Ơ„wiE…GóÈí¥„̀ܰFD+̀¼BD«J©Öêêj÷ơ×_Wwï̃躴•mêơ:N:EÇ—333–ă8®eYn.9D$µÖ¤µ¦~ôÉ$6é,„`fø̀́Aàyçß¾};¸wï¾yó&ç÷®’vø“““xê©§¨ƯnÓáÇ…çy¶mj6›$¥̀Üø'í ¤<«ÑjµXkÍ‹‹‹zqqQOMMñåË—yvvv[@[Û•‡bnn¯\¹ÂJ)}ăÆ H)©Ñhà+_ù FFFPæ¼>kkkxùå—ÑétÀ̀¼±±V«…‹/b;`ḍ_Îñÿs₫&‰ëYIEND®B`‚rpyc-3.4.4/docs/_static/fish-text-black.png000066400000000000000000000044071314203541000205460ustar00rootroot00000000000000‰PNG  IHDRa9µ sRGB®ÎégAMA± üaPLTE9999ffijkkk prty|pt ~ y (~(9ffff9ff99f¶&ƒ -ˆ 3 9‘0ƒ06‡68ˆ8@–F›IM O¡S¥Z©`®f²iµl·qºs½r¼@@AAH‘HP–PX›X` `h¥hp©px®x²yÀ|ÂÅ 9Ûf¶¶f¶ÿ99f¶ff†Ê!ŒÏ#’Ô%™Ù&ŸƯ(¦â)¬ç+²́-¹ñ.¿ơ0Û9Ûfÿ¶fÀơ/Æú1̀ÿ3‡·‡¼—À—ŸÅŸÛ¶§Ê§¯Ï¯·Ô·¿Ù¿ÛÛÛÿ¶ÿÿÿÛÿÿ¶ÇƯÇÏâÏ×ç×ß́ßÛÿÿÿÿÛçñçïơï÷ú÷ÿÿÿs̉‘ÎtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYsĂĂÇo¨dtEXtSoftwarePaint.NET v3.5.87;€]_IDATXGíVëWA'̣-­• ¦E(YJ<²2“ S1 ¥B„äñÿî]–™e—]<ù¥ºçÀΙÇưƯû»»nñ\7ûà†â«³T­VO3$•jg̉U.*™Ơˆ2ûºn "!´3'¿ëéY]µ:²˜HĦ#43yb㉄ÆöưæÉZ€«Æ–v¥¾s1@ÈÚ< ¡JÇ3Ön´'iƠ7ŸÍ ºaqY˜½°8+Ç!EJVÛƒû*«ÜöÄg+íÚÜQÂÊ×Á£2Bg|>™M)S\£GöêùỄ ÀÚ€y¦\ª$TP$FI¿/¾ë /g}0Û4¹aÎÖDö¢)c[sÇ¿°çFÿnv)7Af„–ù£¸ŒÆêOˆycµD¡z€ 1Pqs°Í½l0Ö¦ÈÇƯØÿæ°´Œ©¾đ!đh_,| Æ?«(cöϸá# ·w»Ç-F Ô‚„ç¡€Áˆ|rĂ?¤»Ư3˜(íĂ=Â)€–̣ùi<¢º HÜ™êÖ€`£µOJ¥]u!³Ô Àé/b¬•× ¨C*L÷,N·»·iä/àü(ưhK9ˆRY-û±tZ¬ơ—u¤©¨tÛAx6e©…- Iƒ' !ÉMØ™ÀS¥íu€˜sª̃X ơºä@1j[D(äJ´$x̉³à+2µăäFá.ñóRܦ7‘D@èa¡ä…̃RǺèÔJofJvŒ["`聆%åÆ̉IbNåœÜ0­#KFI>4ï ₫µÁ†oÆ̣R°Ă-Œ MŒĂéjÆÜ9“cLöy!åưbU»{ ´*ˆ¹ÄX’[¸;ÆØd]aä±ƯH·¤[Æ.ă‰C‘ç1×eérÀX•.ëȆ}¶©&ÅÆ*׃ÓS ×IŒ¹°́è»q́5æ\±VûL,˜Ø*f±Ơ@(m‘‹£°¤9Ù)ăM†Ä7t”í8½ú”ä™% £#PG¬¬k¿¾̀X¼²̀}ÉE„-géW:̣*uj§₫ q̀hă _ºơ­Œ¼K#yû/#\nzÆ~r¶j̃÷kçá·2[~‘Î)FĂöuƒÜÆđĐè<̀͘b—HM/́z=pÍ߃?ø ÷§Í≷Ÿ+Ƥ„@ëxœ›ÎSDDĐñ°„ÀDA‚̉Ä́àGF@èqă Dg,}Æ’a·“HQ~¹ịá€'M?̉BØ9±O cÉ/ -̉|0…©ô}yØ«°^çCê´—­b¤µlûn‡€ó~q„)\h)x{¹©çÅ¿Ü[¼uü ,ư¸ưhcñ”IEND®B`‚rpyc-3.4.4/docs/_static/fish-text-white.png000066400000000000000000000052441314203541000206120ustar00rootroot00000000000000‰PNG  IHDRd<?ÎsRGB®ÎégAMA± üa pHYsĂĂÇo¨dtEXtSoftwarePaint.NET v3.5.87;€] IDATx^í[[lצI ¨4ÁÂL€ÊÍ)—9˜”¤Ä‚” ÁPÑ ¨‰c{½—ÙÙ‹—5v đ%iÚ‡HQD|‰Ú(R•‡T•/mƠ¨R)ªdEú—¾Ø•¢< Hyù{¾sæœ93]ïzw½k:#ä™ưÏ?ÿÿ}ÿåœ3ăeËüĂGÀGÀGÀGÀGÀGÀGÀGÀGÀG`©#ĐÔu‰p^fç/:N ÉĂÚù,ÿûlú —ùƠ«´Ôư­ûƯ-töÊjH¦íÆ6ªj¯¢e­Ẹ̈>kB5ôd¼^ëzµ̣ÉI_ïàĂñr3ÀIl>Èíy¨í!úYÇO‹ækA„ÈÁ2b¥2µ«ÚW³èy­ C_JbÍxµƒpí[ÀäƯ¥ÿjúÍ#Ê6”ÎTOñ‚° b^íü¥2 Ñ#ÓÑs&u:oR^́xÁAHnüƯ÷è3»ËJ‚±(‘2QÂ"Ư¡¼ư-üLƒëMQº0;Aô ’e‰9hÈÉÈ‹é ´9%Ç¡,¼̣Á:®¯Q^ˆNÈÀ„ÿÑÎåÜîïVQKgsN₫–„©Ộ́z £ĐTQRƠÜm‘ïS²;îihûƠVÚétLËwVTÀùŒ î~öü5jªŒY_E²1, íưt«h=¥«Ù́àK]1ªGöh 6XiÑư÷Çéă{?ä>a¦%í­í©¥†7Ôulb“ƒƯ×’fƒ—r³ËPâ®ơ˜ɾ‚è9•§™¯fTÙ:öÎXÈv9ûz.qtñH vXéYÁÇŒÈHa½¹£ñï7÷«̣sa—­y»>}ưÍ×*οsû¹bï´ñïNüø[ëốM…K[îkQ¢…eỗdͬ̃l˜±Ù»i\x…Ú“´+±Ë“„ÎŸîæ§ï _₫çưíá÷è_ÔUö€üÏ₫}”ëØ‘zLƯÙ6²t¹a¾–́“«ë€8Ë2¦l æßÈ̉ùùṣƯYÀ~ÑJ+>C¿ûïóeƒ^.A 'ÿ—C„ “÷¥‚t{ơVƯü­!~&×½œc™£55ÑÈuºz2eæ×Ÿµ×œ€bDưó«ÓüOs{˜}‚~¸đƒú[úE2b¥2µ[çZXô¼¾)C_]Œ±fÜâ $¼ñĂ`ÊîzÈưé‹SÔóÖSÊ6”ÎMY+¯­L)Ă=2­=W‡+64¾0ä $üö;ôûá-%Á‹X”H„(a™µTÅ₫Ö‡nS”.̀N=ˆdYbΘ/–eäẠ̈™Ṣ:”…Ñ÷öq}ơˆ̣ÍèDp€ LĐøŸ^ÙÁí₫vb7ƯZ™)Ëߺ!•kY^Oa*J ¢Z‚{4ó\Q#çîܦ“Æ È´JgE›¸’kA‚»Ÿ½̣«=jªŒY_Sr - ưÉÇGTDë)ƯÆfG_’XXÍQ7²GkÖ ±Ù2bíïÏ̉‡¿Ë}ÂLKÚÛ~·̃Pǹ?t¢ûZ×lđRn®*Cܵ³ ÙW=±ùA:—p¬Đ ›­G|_kÚ áñ¹o(đ»ïu“üÜ»ŸG™FVËEe ›dW3[S¾Ne;UñJÿ₫×éè+2Ê`üÏ?9̃t=ÂM†»D-¿¿¬¹ÿÉ}îûá»»¸ÈpÙSM?ÓxB®.²­«́[ ¯`KBw YÓLåIf1·sV́{™ï™ø>ûˆv¥́Đ|ˆ>}đ)=øâ*[̃̃£ Ù.g_/Î7”äJ‚•Üx̀ˆÜÙÖ›;ÿió´*o¡‘ »RÍÛ0đé˯¾T™pưíëÜÏI»té3BT]?ÖKrñ8³Ü m¥©§Uưt/ÖĐå–O‰3Çɸ#æé³Ë3Ô6'¶@Ih₫•̀tê% Pa‹úƯßå„|₫đsBVàü«¿ÙË·i¤ zG±₫'§ÿ§ŒHư³äT–Ư„ĐơèÀFê©48˜ÜGc‹,º\ŸüJ–:Œç•6ñeª{hMd=fR’ŒÇX)ûƒ+JÖ(2Krw²ơ#e0϶¡-ƒqSRôÈÙ=»›.æ.lhÄùÜ9G ¡ơÊ€rơôÖ¼XWÉ2 =X±m²7-¬ÊL‡çWr°e߈ni8úÄKÙ3d.’! \c%l̉g[½_̣°ÁŒkîÔZ¤\R¥œœqÖ‹®Øw#́dµ2±l/₫*‰ë¥nD–̀¾JAhy½deV’eh%¸K·X‰ÛÏrO£› l“±Ÿkó#Ô’°wy±h¬Ç3z“†Ê!³ă£«&Ø…÷ra˜¤Po¶‡‹µHSX2©ß́S½…7W6³qO-ë jµú@r†‰àJ-ÏƠ—$BY*’K dÂlD¿jfb°ù(…ûØ s¶[xơ‚S(‹z™l6búc‡#©Ă”]L=2£¹Óót<å$[[¹ÚútḉNºd^üzá&èzáëabkBlTb»¢Úº_éux̀ ?Æ…¼¼nçÏLa"é°£ùcºŒ\ơØÎ‡ŃÍé[BœfĂvæÁÓ÷ă%µ`•Yƒ-lzn¦¤a;û[úvô·$¢3Fy§·5Y³èP̣ £œ@d¢e­AغA9‚¬û F́B„Y6ŒäđE¹GơAóµ§N­̃o*ư{r?½l4đ¹Æ£îfmÉ SwæE=;fÅ["^Y™®ôi›1¿7løJ®¿–¡kæU>¦ó₫O*ÁΗơđđØNô‡X`Dh8ïư¾”y3J!&¹\üá™Q„ɄβŸcøŸêîdD„¢4¥! tư^„ØrbƵå„Lơ³·-aç¶è-¼ê8PWes"¢#—ö›Öù@§=µÍNË ±eåơRN‡ú·(C&ûÙé0!9H}Óo… Ùơäé1aä†DÉêo|ÉdÈÚ+₫ Û¿ˆGœß"CÊHcÊbJ8 ô0c˜oÆ©¡ë„óëîê¥ISÜWè…^í{¼ơö³L7ÓdL±ˆZ÷וç#Ă‚<§Ü˜8gZ„DÂJ÷Eó˹|t_uâ« ±‘pĐÊ2T̃ØvÆ–QiÆ»ơ¸q?ưœ­—EưÔÆ?±AvÊ*`ûĐ:z€¸åäqÀ$Á–_†9F}¡ơØ„´{UMÈDŸ(Y±¬ưÖDưHÜåd‘¤(ÊKF k×IÀp®¨̃́…Q&úF•L¨Ï²”såè”×Ûöi¾ª{‹ûe\ÇêÚx‡̣Ư˘‘8‘Ư8ˆJ’%ép"o>é|µ%=ÙKA\8TÀáoƯaù½<‡kP> 'îå*ƒÚ±$Ä­c#B¼äÓÆ "¹4!B.È‚Aâ>>>>%ø?:/µWÛơ{IEND®B`‚rpyc-3.4.4/docs/_static/fish2.png000066400000000000000000000056431314203541000165770ustar00rootroot00000000000000‰PNG  IHDR¸JiƠsRGB@À}Å pHYsgŸ̉RtEXtSoftwareMicrosoft Officeí5q #IDATxÚí]]¨eR)‹ÅL4³cf†ư„E^‰‘Đ…Ö•ˆÇŸ”Z¬ á HЉ(B/¤đ„v‘D jhPxê€Äz‘!²ˆœ’ăÅ KˆIÊio¾]wf¿ß™ÙÙ™ƯwáA=îî™ưö™w÷yß÷gï̃½Đ« E Á "8!/l³SđPdtN{ơ₫^öPă¸íÁ5Dă5ö>₫{ ;›œuDpBg¿˜MÎNâQg‹ó''â¤yă¿«ÊI_$‚âyG¤‘–H́f[œë̃Ÿ%¯Á 2‰ñJ.Ȭ'û¿üsz‚àür9Æ¿œÅDXƒu{ËyÆ[·ưLçÚéc%^ǿ^†• îæă vœZè~yq‰1v>̀^·áûùÍ÷»ÿ½»l¥ÎrŒ̣ÁüKj×øw‰HÜX¢†=èü‡Ä H÷æ·óÜ?-b¤üñŸgÜßƯ:ă×–»}„ữåßc®Ù}¢g*¢›~iẲ†/q£³‰BvU«F%óƒ»f¸«ÎiFáßn=ßq"›Dzÿüîëß<à̃[œ¦₫,₫I=”/‚# ̉}ĨÙÛg‘z(j”I^̃w“ ó™Ïe†̀&@tÇ•Eó9«8ñó¤Á' ¾¼*äL“W²q[»„†V†̀8̣×S¹"³ ø,¯¾_øÆº©Ïí’%Ó¤#C—¨D,<߇®÷;¡UD×Dôz·¼t»'û¶YätFs© ́³ú¾¯±††F…VíuBËđé¹ÇØ:h¢y!³ç_¾M"UÍ“È=ê1Óh½äĂ»YRØQÚ&!Å̀Ø>U¨Í£ùº,̃=KF„ÛYïm`Äö}j-©a›Á?NĂ®Ë3°>iµ,e’à-BÛ3WqyÚŸQ{OKlœ¼ĐÓđ‡‰¼vØóëby4OÁ”ˆơÊánx¸ ¯´œ™ÄÑÀ‚/ƯÏ:)|wơi&çWø5Y$x!́ăLŇÁåIQ«uK—ó6Ó $ḤÚ•QEçb1Sg/̃è{¡ƒ…îj| ¸ YĐåü8k&ÄÎ[Ñ%oÀQz…tF2Ep™TiuI5X‡u9O'tưĐ×Y*÷C*•, ÛËÉxÆ!W¥Å8ti©¼KmĐKœØ¾ÓS&bw'¼ÄüƯŸb8Ñ’¤cƯ.K%)¿<©HÙF¦đ¥^£Ë'’Đåi©U¨¤ƒ4›Fc×å<<­J Ѳ)̉₫„è€1)1e‹¿Æøsö;ÓÜ7Íc̣bưÑyîüf´I’›·nJ ÿ[¼kqóùx°W.!ùHêç6áíp—íBbđU¡ËKª]ôPI=Y|rîÑ&©m±öÀZW÷ØpxCóùK|A‹äư‡̉%¸ß^8$ Q‰©¢1GX}4‘B;l9¹ úÄÿ Ă$ˆî±çøæk Í´1#&mܶ$–€YĂ8‹‹^Eëm $g$yœ¬.o[k$†Ă§†Ư3Ï0b.Ư½4,%Ừ <_÷Xp} Uv<0+$–r¡£W5[ÅY`t$ê&·£^!A ư2àîûăñÀÏæ¾¬8úơPC‡҆f4xíFM©Áç¿wG’BªS’£•;Mđ¶>jƯêlC“ÈƯ&*Ÿ`†™;|98Ơ‹ÀHĂ6ŸÊ Ácåg+Ê©-[öÀûÊ\PœrĂ`»’¨º{D”èE©§^ZXæ”ɪLF´ơ®,Ó’V[ô8zöhàù(Á‡¥ÍØ¥±æóñ÷°₫’¡¤…2hËÏ|—­́È?ă&!M äH…ù̃ø₫‡Q1ÇẴöŸ´”îÉ Ư'@ëkđ¾&eúÖJ¦-_l‹‚±u7K'Q9‚iöĐå‡Û‘ă2É‚÷$âÚ^ö¶²@1}[°9Jåe7"r˜àè/YÔ¢ÇeÀsND(Æ öêª([w£y*Q9²É9bĐT%|½®=€ Gëz–Ε”‡³̉ꤴ¾NÑ?ĂÿE=>m¢¸î̃/’&vȧñ¸Ë¦-³|BGXøMIöat´wPm”Eqô•̀Ú>ËHnÀ­A?xRÇØæªxª"Áùd̀dX˜ô{À¬WnÉ 9a|ïâZ•µÆRe3P‚o]˯hK6O?°ù€¯*O¦vŒhÇ0uT̀È$ØáIçEC+©ûJ$PI=­*‘Ëbô´¹d^4‡-(j{}ñóûR?ƶ´$ÍX&Geçh6|I|CF>-_—ơ©P–=¦ ¦qD”Ù; Á$Đ„5ÁE¥x™ß Ư«h˜º³eD‡öÀàSEUJ@“"³l=¡Ơѳ̉­cƒ‚+{‚‡¤ ’DQ4Ôêl?!Ne‹…dAR·• ÎB¬¤ËÊ/ ©êm•¿Vơx‡£ üoån¢]º­/ ]—°¡`@ÄÍ7Đª¢vU¡!M E±5Äöm¿.o†/ÊZ¥‡̣ ÁÆû5c‚s ®-zƯ£Åß"3÷Qd¹b( E¥₫|AØ—")öoÉf€ZVoFÅËüeœè Hö׈Á•ÄÎÉ­Ù‰+iÚj$¡d)æN(wG³Ú­J0ơ b >[I5¼ ŸîÚrkZfuƒcm£BHÜzàNjÜ7¯ĐöÙ‡rçM]Å|ö2÷<́P4/êîu‰ÈADï4{çh'́{°1eKvÊÊPgQ¸vFÛG¹ĂɵfwZØSDôÎKÅÜ@Ư¦û”ˆ-'ú˜*Ó¦‹Ú̉¶–ΈàÉ%¢eºơI:ZĂ*ÊùÜ-Ddó =y@êiîw?çV7D`{¢kï̉†¶ảèzb#—ÑŒ1ƾ&7Z·¢ö>›d”́Åö@ĆzR7(#ÂÆơĐ5›đ7|ô~ïCGı ơŒ‡Ï‰àiö¸Ü9û—÷Û–s₫Öl̉Ñöj"h²̉e.ĐK¡‹^MH3†{MV:ÙúAÄ́\2ªkVc:̣¥W/ Ă03`¸Ç{%¹"d§}t¿2Z7‰êHJóÖÅRĂ5ŒÖ“ü₫J© ÄÓZh́È+™Ó4YML-IíW ư‰ ©¯;‘¯+ iÅ1(‰pÙÇ6 Ử́˜Å…Œ‚ bLê† ẹ́”‘®»̣å´®UW4u¢uṛ–N(H&Åí×åw¬öwRÈÄ:Ù2ă¾”Uw’SiwØ hT²IXq’àùp<đz$¼–:8“Á™"X%ŒŸˆƠ­‰¦‘:8€„̃ó6ë¸̀ø ‘*ëd÷/÷Ơ$É5©×åf ‰H¹̣׋Üv¬¥Dè*?Á¹]3"Nîµû'ư¸© )Ùú£Æß§”§Mï_â•Èè&MDpN øøl¯%ă₫%~ÉIEND®B`‚rpyc-3.4.4/docs/_static/github-logo.png000066400000000000000000000054041314203541000177770ustar00rootroot00000000000000‰PNG  IHDRd-XµÎđsRGB®ÎégAMA± üa pHYstt̃fxtEXtSoftwarePaint.NET v3.5.87;€] tIDATx^í› °UUÇAîE‚„|0>p uT¨é5“â«|t)²4GQ EÓL̉y1”¾0‹H m”ñM‰ 2™ÊG™"™Oưÿ¶ßÚ¬³îZû́sîá̃ằ¹3ÿ¹{ïơúÖ÷_ëû¾ơ8}ú4ø¯[[»0Uø£đ p¦Đ¿ͨw#èlDƯƯ­£ie“`s"ÂÍén‡)ß´nVÙ¤°q ¥1²Çu—”!5jP ›V@Èô«ë’½EH”Â., 䢫k̉…}©€ñ ¨¿åÔkQ¢ÈØ@¸;BÊ=úÖ¯–ºby[&« Jiƒ…«„ç a³HPơaÊ›·r}ưú‹Ê¼V ÛëJ;® )Ŕ†ÂÂ*D‘DZoRD¦Kƒ´‘¯÷ ¤Œlä9¾‚)ón’Ñ́„Đé#¾™yC̣í”É'"ƘŸgÀ}_$\/,NäñË4ó ·…<ó×L„ ßMË"³ă)}{Ÿ1ûÓûç"~BN†–ô!j\“°­.Ưưo/áa— G 8wœ1sñ“^ äMÉr¹ÉÖ©ÿÿIÈö¾d†,r`̀û+ß!‘¼¿ LA¡S÷rrL°dÔ¡„DG₫¡ï;2́p¦D`YÔƠC>ä)µ36m }ûg¢/ß7%eµ%iSQ–oªVô2!1YƠá‹ÎÈë!BR²œm„¼(xuÑ(U^Ö&>!5)!ŸJtúĐ& „MؘéZ!OG̀Đv‰²m$ïü&%¤‚Óz›_û*„̀‰(y¾åΔ ôÊZåÖH̃¬ƒoèi5 Öé˜sỊ̈÷¦É²öơ¡Rđ%»èiª̉& çOḌoƠ"¤ö "ẳ!}¥Tö­ª­Äcé3CÓ¦FZ3d]È]4{¯‹²&Ó§ÈÀ7<_#)Ë”Đ˜ ơŸÊ[Ï^V!́±…k¥gr}J¹; -IÊ=Ê×eĂ®ÀY囋¯iÔ:¤^²W‚ƯcM# Q] l,†„,¬h[J>Jx»€”G”6IH×`²O(dHL!FvM—T‘Sß6Ñ₫Ô dr¢í₫ Ù\‰ø%B‡0"¥¨::g1ïÓC„°x9"«ëA¡wfÓK‘¼ƠV™OúÙMßV'ú¾‡OÈ‘™ñ("¦†²gB¨eú¾ƒ0L@øY™kØ ±÷»„ ëû ÈŸ ́3ÅÚ®Fẽf ÜƯRP[@ëÓ¤x6ĂHjq™YQç èd—¯GB/+C7){&rRè?ÆGa[å µRv†ØåD­ªÀë‘V󩾪r©l™R¦¬BÅBœĐw°ÀÙy8K8S_ Lö²mö;_jb„œØ›„˜ _” kËÈÉÓBØ₫XTŸRö Çî“Ĭ¹S88ÔBH›„áđ¿p­¯âƠû-³ơ)9₫¤ôŸƠAÈt•y¥ SZŹ“ïÔưKK®CA7(Åq̀y-b:{Èo„$*fă ›"¾B₫¯÷Û…#<Å…ợ>±`¶̃È‘̀¯|W›*UƯIûŸ́W$¼Û [ ©/Ï …„©™ÁµLS=Û'×Ôâcª˜»¡r«3}U晴°o„½÷ œ­?.„g'‘Œ|îø¦îDmª´J'æU@°Ị6¬–§Jydèrgmw¹‹\–T•RÔ· "¨¼…ÑƠmBîÓ·1¡úö!¶]ÿϬpDÉ…5̀Sô»æ<ûêùTá_–†Yø_¼Óó‡bv·­đéÂïAĐ|fÍ¿Hw±̃‰ç˜±ă”΂ ù¸Ïu¬ÉG;ȃ\¤=#°Éfª₫ßkuc÷ÿ Lđú|£̃±|”ÈÊY?r}Æ̣ŒƠ3¿ ˜üóưA-¿²ˆ+Ơ!¥q¡îå L®,Úœv“‹Ùuôßưº ’niøF+#ûStÛÍÅ”2F ,\æ)`K½»ÅïcÜà˜ü*Ă€pÊF6́<Ûà´ÂHC.äCѧ™ü¤¿(p#’Ȉ´NK£U!¤MöäuûvŸ×÷Ñ;ÿf ".Óñm ưÆ£Ơ¦§Ê„g#~ø‡̣h ¹úÏW=yÄüĂ=AgZÇøƠî)öœÿ̉JïLfMH×:¹ÖC'xơ% Q>V₫È…bóQ=¾omçÇ zÇqơ¹y¦\6(è›À¨FwŒfù.–ß'ä—ÖÖ̃ÜéÛYÂ@ 79tÚµ`†Ä|ί½ÊƯơ:s’0@øº ‘™///#sÀ|î°çØoIBB–+/Û×´…R¶°̣5“á”°oúù`‹£Âoéư{V†²9!ÖÖW->†„0ĂW Ü_$ø„03–'½”¿"2K0[3…Ă„½„q{]\{+’ÿTOÉ›¨A'ÀÖ#4ÓøËe0ư3… Ï&LMNˆ̣¸Ë „Ê\˜¦̃)%qJéˆÈm[ơ~Åêg²»¥uF™§oŸ˜]×z„́cenñôå|ơßÈ ™Qp-áïk*¿e¤“›©?›Îvg6×S†S»M€8üB—]eG˜)ƯE_§ïç[ù‡Jâ”{VDVœ4rT´­w” áBX—Æ¢2œ!óL7ð¼øÿ +=`.gYúl*<Ù RN”̀ƠûM FB3ZX±"̀hKcAè́)‹¤oZ̃_é’W úq3óG˜—Uw»|'½™,ÂpÊP₫£ ŸƠû·­í_è[ÛäÅÄPÖ÷!Ûéh‹( ÿ’"„È’q&ưp”s,}böMdŒª‘”UÊL@ÆFª˜ûFü¾Å2e±£8öc­Q”ɪ•<Éèœ~+s¾áđ”Ï£,=»c×üIßöµ2è¿#äQ=Câ|œÁ0 1§ø Â_¢,ˆv£ùùưr2k&Aùø/ü¾ÏƯñbåJ\¨!Dˆ¬Ö©ƒˆíVky×ízH¹D]mäpÆî¯̃qöÜù½Y8QøP8ơMF*NÑX¾q¦g¢ „‡ :Fh́¯#P S˜]`„+°MÿC~ûœ›H=C$ë€ ø*̉>1O{+PüA&7‘¤"iÈ™¥Yú•^½˜>zæ¬c¶å£íÓƒêÖ![ë3Å€ ̣¤îa”y *²ư.IEND®B`‚rpyc-3.4.4/docs/_static/rpyc-banner.png000066400000000000000000000102301314203541000177700ustar00rootroot00000000000000‰PNG  IHDRw2§"›•sRGB®ÎégAMA± üa pHYsĂĂÇo¨dtEXtSoftwarePaint.NET v3.5.87;€]IDATx^í[k[ÇÎï<ç$ê^¸,ˆ€ḅƒÜđẓáä1\D$Æ| r3ùG!ù Îr₫DŸî™¾oWOḮ̀² µŸ̀Đ]UưÖ[oƠôn¾ú ?ˆ"€ ˆ"€ ˆ"€ ˆ"€ ˆ"€ ˆ"€ ˆ"€ ˆ"€ ˆÀ¥GàÇ?ÏH¾Ï)ùíÎm’Àç̣™ß_ËÜóÛßéˆÿïϧ¹°-3n´ }„@>¡µÅ锼¹3,FÏr‰»éó¬Ïį#œÿ~ŒmQCE2xöG̃ÉƯ1}₫&BEú<ûăIO ß·?’"îơs–ÉQ´ 9xZ¤¸3½ø"Å=n1>s@Óñ–°=;$Ͼ»ƠÓM¬c°Đ"€‹@a¤ ̣lÊœúî&(Fåø|ÜSâWäOßÀXË´† §Kƒ¿~Ạ̊ơ_i__¿ơˆ;àó́£[ §\mœ‘Ăg½!‚SoN̉"ä́€<02râYwaHˆAâxú±å¢Ó­ÔIøơ)¬a§¿N“;àó́ă#¯Ï©Û[Äă’^ϤÇ\<‚¦Å©§)ˆ‰ơmƯËM&eŸí#ˆ@Ÿ"đ¤q¿å[Os€|}|˜ÚP¼>Ïöɓ۩6ÊL•¯á‘€†Yflh@.óOî ¦_ QÚ#dϳĂtqg>o¾†®=NÈ/Sç'îp\ô ‡6ÇçÛ%¢4@°¸¿ €Áư±˜;mÀâ¾äṣÖ+â–÷9x2NñZ&ÀW '¯Ư1ùذ40Û´$.d"€ ]Càá0¹Ÿ„‰û#ḥ§â₫èÖ § A{Z‡¡â¾é÷ÄçäëÏî/ÎöÀ¸\ O>Ù£̉́ú|&[ÚùàuTÚÏƠµ¤£#D¸øÀâ¾4i‚Óê ¼ÿ!ĐZ‡KA>'oùÄ},¶1°&$»P¬äÔ<¸.Ú“˜đƒ ˆ@×X'÷tq¿¹I€ù˜´`¡†|úö而?†§éW7•v́çæÙw^ï´È₫cS°_A_Đ7…e-¦®%!ˆÀåF qßÎ}L6'áiƯÅ  w|ëØ}å̉¢B:y]Ú5|‚7 ư¶ŸÉE²ÜnµÂÎt¹Yˆ§GÂX†Téä%(´à”Ê%·µï4ÈgÚ>vøñ‰—àÛqÄ 5 Ï[ª @ †Æé‹)ÄOáIEƒˆ"€,Aâ₫ÿX‚Óó̉Ĩw_̃œ{[û¼ûÆ&É0!3ƒŸ·Úưù¦|Oœc_têŸ0ÇĐB‹́=ôc DD –¡Í§íTøÆGR¯V Ÿ­ưûνcă÷½¢ÇÚÚ%KßcăÀ¤‘½e8Ö±WÀƠÏç¶Ç–w_Ôø}”’P4 ˆC`qÏ=Egw*®‹7©ÂÎ|.åSÉDö ùkí¹› ‹ñ%đMññf{C@qÇZBC sq÷ «ëÀ ÷ăMS]‚&ë&yéhH£c/ˆsn³ïn‘›¥°†×sÄÀ€D ¿è\h›dcl8hbHuîSŒ́L<Ă|o€“xû₫ÑͦóÅ%Ú[pŽ¿k£G.$ Đ¯B6²ø˜NÙ7™æÚ4 î0¹G{ó™ $Ø®Ø7œc{DvƯdäúº{̉§Đ¿ k>i˜áßQ^ƒĐ‘¡Ñ¥¤®‹´™'ÜS ĐZâÎ\ûDùxc(Xlr{VA×á…˜ö;[çœÛxûëódøO'1—î¾292Êqơ`r „·¬9‡s4Än·×ˆú+Rˆ•ÍlĂR·Ï̃₫FFÈ.£^‡üÍ}vPh5X±ß¿6É‹ÑÁ ‡|F{sAûó6Ä/´¦¹á?Û àÇ5$Ú! £ư-*yñöík<Øá#,* Ñh£Ă0n¹|&¹aM<¿20ÈbS¯½f†AÊ›ƒÑ9YÏiüÎëE_ÛØ`ă_:Ÿ’úĂ´ñ4`Rk Û ßỎù ́P!"[AàØ“Æ4<2K>8×$ë#~aP‰´‘‰È‡û¥6­2°*Û¦äƯñˆÍđ‹b 2(̃°$§áĂGÙgÏcxd¿Q2.Ă'Ù<û›çđ ^ ̀f#½nû§nĘèÚz3XÜá‰j¨!¦×üN'‹†²€|F»³¥O¸C‚ĐvèÍ5â‹%1lR‚G<7¾³a“s~w'ÏnºHC ñ†äçȕΠñŒá©́$ÉtñG_zÓn:Ÿ™]Ùˆ(l?YcvÅ©aq5R„MS `¬B0ơçË­ÄY\xä¬+¼¹ ä®Ë~<åp¼ñ}AƠw¶oÉXÉü{çŸÑ‡™̉Å}pØ×˜Í*Ú&szP\ƒ Ûđ•ưËÎB˜‘ÀA^}ƯÀ%i:\,qJáIr|7ù́ƒëŒË°‰q²>ynđÈ«³A³µÜîȱ»¬Ç™d̀»@̀~ ÏÇas½C&ïØ0âæÙP›!)nç»Û7ˆ©un/NQ“4]W¦Znb]Îhä¿eY›ñA¹̉l´5j¡Ô₫¥%zº8–^¥ÔŒ/$´ií»âˆËÉABáø<ÅÅÙ¡í¾sø&,×;M.º=³ ²7†â<¯5.Ѷc‘Å¡¯KLXĂTBh»läÍí ¡lÇ\–Â_rÇ*2èyÖ˜ j#Q{órrÙ¼¬6Cx¡†$?7C0ă³‡.~†vü Ôz“ôÚVë³ä²½QØÉ1q¶…àǃ Z0 Nî«©ÓêÀĐªûgƒñ¹ÈÚPÍịÙ­ u`̃7aëIƒÏ€a›&h>6¤™¢<ï5Z¼³?XŒk|Èm®+œ ̃hû†Ä”kæk`ưȨ@Á/ñ\ç›´mÅ%‹8\q)ÿl¨1óÚQ̀<ç’¯Vlê|ɹ!l Rl†̣Ă…ƒ½7S¶Ï¨Ië®ØăơB{€|‰Äëù°cÎ’K§fx8œØVu™ºFÅ~Ü÷ækÆơî˜abR· Ȩ¦æSÜ!ŸÑNù×2 ‘XhŸb`\Ÿ{ï¹ñzô‡³^Mm¸¡Åy^ë_|¹–øQRÏ &g®ÎmñZnå¥>Ç›µÅ7•c*~ƒJtÿÏ:}®̣ÅÖ™+`kWø0c®SÏ#²=§ö›1›µ }j1ƒvxé˜ƠÅ`•Ä¢₫›JVGê9‹Ma’ˆ#̃úúPLÅ© V¡ç ?S§dε+l1|²æ2á ǯSaÔÜ(Y”\@gyÓ†ˆÙÔCP̀Ú¡8́çơÑd\÷ˆfƯʽVBÏCxÅ©ï1yáø›Ûn‚ íMWjÉ™/wí:$—V½¹²“Ăb¸£; )$‘¶‹‹¥¶ö)TÆ­uTg®u“N1ơí¯LKq?Û~.™è™©›_áw˜6[›cñÅOóS›}ǯË>ÑBĹW~N<óÉŸÏékŸi3‰‹,b½}VẀU›Í;e_ÅQ«ó˜‰:‡À½6ĂΘĘü›½Ú›\V¼ÏÎ/aÓ®é[~₫€©|nç…ׇ§`“ «¶œ‰:³¸PƠêïh-±åÊ¥¡ºâ‘gâ>kơị>¾>L°­RNåáĂWíUñƠé=y‘iéJóy&Q©Ôà‡rë˜Ô à³HA 9<¡E³R¿éü!₫ØC É?Z+ÇwhŒe­Ó9mÿ ñ­pápUµ₫\ °•§Múä9ËcR̀çT$g¾a›‰8^ƠâÑă´}©ÿæ­Å.í̉g÷À˜µ8„ñơU)à²s¨øŒ˜•đ)n%ç–¢Çu•¨³¶Û ͹ĆŸµªƠ½ÀJÅÎ0MâÓs¬cªjẦ‹ï¹È¥mG<ơS•B›œ7,—\Ç8f:.Êỏ,Ơ™”^Ø\Í̀™[}høDxĂx†æë̉®«®ơQ¶·–K `ƒƒ˜3.…,"+/ªYĐâª)‘«ÖÄdkwÏv©Ôà¡Ä6*70&Ơ&î<³u&åŬ‰»̃àôº̃~·&s=<$¨3M²™qˆioB8ƠÛÄĂ1¼Ø‚ âQă 5h'ùÜÑ À{VƠdeƯ¹œ¦ P‰»Ư”!<ơaLÚå\Íʃø­QÓ¥£Ơkª)³†£ñ]ù ÍÙ¥[WYqLîÑ[r¯z¥”+™K0è×f̃&ß§xx—B)ÔM¥z—¼‹ö…^q¡.{µúœ¾đµ¢÷wQ؃ÄEˆ@ï p•j­~§ßá÷^oÉtåÔ&å®VD't}›ù…¼»‡öNÉb$ˆ@?pü´rqêWœ‰Mí¨K\¹ö“sBwI{ôî{́Œaµ„«AàʵïåƠÅÛé¯û¾†Ÿ[W Ÿ~îÿ3•B&îÿu)¹ứÓO}ORD£ˆ@#đà¢ßÉƯkÿêë:6ôꜧTê|s5]Ü¿¼»Óׄ(@4 ˆ@/"đơ•ÿÀ“;ëŒW₫‰Ẫ‹‰Ă˜Dđ!Đ.î_Èïwÿ‚´A Àÿ*ÿáR}•˜IEND®B`‚rpyc-3.4.4/docs/_static/rpyc3-logo-big.png000066400000000000000000000521731314203541000203210ustar00rootroot00000000000000‰PNG  IHDRByun¾sRGB@À}Å pHYsgŸ̉RtEXtSoftwareMicrosoft Officeí5qSûIDATxÚíxTç™ïQï½÷.Ôê#袣Æ`0ÍX2Øà„Á¸AÛD¾I\‚qbăR'&…7å®â›ơuÈnbn­ï ÎÆ»¶…€eĩ;ÿoÎM¯ç̀|ó<ÿ‡&fæ”ïw̃ï­Ó;6‹‹‹Ë—ÅO!? ºXÓ¦©4tY£3”ül7?úRz­¯¡çơ†̃₫ËM½çGtêéWªrÇWÔ%ëT¸r¥Ö.×)yæJ(m̉)±bÎXJí²«PáÚ=¿Ytâơl~¾9¹l]YשÑÀ¿ÿpáß_é«SßykµÎK¡â¼H̉ÀŒb£ƒ¨¥1‰ikgƯ[ª'ü¼¨Yå±T”ÉÀ₫¿ µFcXöyó9m:tî`§êí¿ÁÀÖ{Œ©ü–©pƠÊœ³ËfStN9ù±s–Á₫ ÅO¯g?cJ)³–ê~6$&™ưÿ ÈXÊ(fà̀jÙ¨.Zs×¾@̀AÉAÈÁ§_ÿ©†‘ÇUĐ₫Û‹à»Ô¤Pö{Àíl_=½÷ư…D¶;¬Ï~³.~k=Ñ[IÛ×åĐŒéÑD~“€áØ©ÔsÚđÀ+°]ƠhÂô*¶§üe»´"Ṛ¬®¤Êù fEmw306x•L½‡-ªƯû{?¼7>PÄgâ³ƯŒæfmÖÜớ |wr̃Ñ7U|pz­î¿£đö}[ ?¿ie&åf†SIA³îï/§·_™Ă`å èÙ¢ëﯡ¾ØL·òcp ô­Ç«Q5đh:Ü?n DÚôÎ B¡ D€ `X¹óq§ÀÎá³] ¿[†ª³©GósZ+v”má5Ö-_C„J÷ï]*È ˜¨ Ú°*“N=TMW~̃êvèY«w¿·€ë¸è #rô5¦¶¼ØêÂâ`°¥ÅŸëî}Écà³F°V³çߢÛ̃¥O₫ àØ«~ϹaX¿|mq*~G4ºèG+¤Ñ…ÓͲŸ9ưöÂBZ>/e" À@×èŒίêđùOŒmCaQÁ/ˆÀârÖ×ƯÂ÷¼c ªÙñà¸fí9eđsưăªƒçùză ”#» ?¿iô¥Û‹ƠØîºJOöVª“BDŸ¢Ç ª÷ü˜¡%ëÀ€E *~æüŒ8.`ø©@hw(×P³¯~€ ©r81ñ81#Wï;Biå”=»ĂX̃×G”‘^ƒßóuËAèlX¶°%đVd%EÉÔuû6 Ï>ûŒ¤¯+W®Đ¾½ƯỔ\d†đîƯV`÷B(è:»˜‚`fI5Ư´ñzÿư÷Éđ588HǧŒÜ*Z¼Å§`7¼F™ƒĐÙ Ÿ x¯_đưŸ,¦’â,£`1Æ,“[䙥1Ổ”ø¼]Öàá₫qK[✪Ùôƹó¿çơë×iëÛ¨°eÏ€däÖßû­¿̣ơËAè,¢jDgƯĐpû5ïMƒ)§£Gï'k_° ±M6ö^_odvl=ßȃĂb†ăßÔ–xú»¨sĂ&«¿çÇLQq >eb{œ¥±¦ùæ tQ:ÇÏ̃/Ÿ ¶Ă¶&7;‘Y€Æ̃¯0—5–í³Ơ7ˆÖYècjKŸ’Î>Û–WlB’×Ơ![c–m½¿‹¯cB§Xƒ“¾AïWU¤Ó{ï½g`̀Y…çO5R@€ŸƠd)¶` "[][_5ÍÚ^>fÆTÎ×2¡£ Ô¥ËĐÛ.y{ú "†Ø̣‚?ÁSï‰NØÖZ…Hù0g BÉ9E6ĂÚWAˆ2Ä ˆX¾=æ t„$vj¦!ïÏ´„xµ.™c²çâC÷–MHÓ̀ƒ°ß¬5ˆ<¹Ù- É—/‚ ‰N$¥tç ”'»Å râ|!!Ú^‹ƒĐza.XÏÅAh1·ă¯Xƒ€[UøM½oP ÿçs9l6ZÜÛư͵ֲw[́Ë „uíÈ·Ç„vƒ£//û5!/ùö¼bc"L&Xßyk*j ₫Aå4U ‚ÚˆÈh²÷UQUĂøb».?ÿ@]À‹ƒĐÿ :ËøL=ñ†ƠÅtö́Y»@Ó2·Mă3ú̃CíWÅói‚‡Îµ†vR¦4₫V½/@Tîœ\¥Đ¸œû¾®9ị́̉pÇ_j€Ñ¢îw>¯´ MlúªĐ}ZWæ¢L0,"Êg›1$Ù%i³.BkAÈ,x{ccƠ kW/± 6¹Ù©¦Ç”µ³i…EØÓ¯ÆèMs¶̀)é™v}··ß~›2¦Wû, WßIÖFî9¹¤ ü9„¾ÖFëăw–SjJœÍ 9₫è1Ú·£̉́{ ]½§øªæ}S‡>̉f,.è9kéûl·X~äÊÛé³ œ¹ë«dê!ÄAÈO‚9¯Xúß¾ØSĐ–€ ,-ävm®°ü̃ĂG„Î̃z¾ªúóg¤­£,°e |à³y Äz{qqZ ”|ïyƠç¾ÂS×R×®[ÍúÛN:E%Å9Ԣʱ~xưíƒÆü„¨&A% *J¬]Ô€¶ºđ>}zJ«0é PGoB_† jsƯ7!!KöEB­óóië– ,yùÂ… tôèQÚ°~ UU³F­]·”°–]6½ïPÇeXƒ†i4È´ä4@É©[̀!Yy…¬êß‘ọKûPjv¾ÏO¼ƒẨa_â뛃ĐZvúûMóY:ưX «1¥îl_=½÷ư…ö¿çPÛˆaK3¨rÇăf«Il©«E ¹fÏja€Dr¶/uœ1§„̉&^aÂAhÏ$Ňø<¯QÑÚ–úª¦¯ï‘ÎÙàr‘rnQóÈ1¡- ¼¤ªIààr¾Æ$ Ô5@[- )ç°r­Jo>¢¶TƯĂAÈ%áÈ=;8¸\BƯ8TÈR}1—s4ë®gy ¡ơ¼q̣p%—ë@Èj¸Åóm©¢„ËIê9ÏAÈAh½̣³"&(ààâ ổ\ÂN¾Î9-*/3ÂtÍ,—ÓA˜¬!ü„T®Úqñ&­„V)73ܱ4.K ÔFe œ¹Àä́b.ç*04RÍ»ĐpZ¥Œ”0Ó͸Ê#@¨·crf|€ •ë›̀“ª9-‹®îb8¸\ ?´]4œ (€ñæjpP¹^ijKÂ9¹¦ưÓËM¯ÇFqh¹B­TIÇHåçç¯.XµgÜ=ÑÓ~5Sïù¨¹çK˜—"Êđ»5<đJ'₫=U½́ÿñêBïÖ÷ŸkúđzxÔ¨ä8zWéƠ†ê„w„_₫ưG‹Ô'íuÓ¬fX"*Á́›r3j¶kÈ/DK.ƠÁsƒE{M€•mpÓµËä®pĂ¼d³‹Ak©Ñ”ïÚtà»Ứû)„MkqnđµÎAhVO›ùyKc’B}píÔªa$5)äo‚„_‰$b—Ÿ₫Ū…©êĂ{JÔ?|±™Ï·8å{¡Çacuü?„Ï0£aág.[xgơM®í4 ];ßÁĂs@ÎÓ„`Í‘ZJ³y™¡UzíéµA¨>Ø=ư?$ wÔÚÈ Đ,U´~®  ¸÷ ĐA¢¬0p^ }Û YKÚ°*“ªÊb®l‡­É_ºXI4.˜%™ư„äç.™²ö̀œ£‹Â1a°GƠ{~L) ,Z»—ÙqZÖ^P‘¢@8Ü~MXظÁϸ́fÑ@#9!ôG˜F·µ#{bûºL¦3 ÂçEO™ù±#Ÿ)›µ ”ni³]x.Îç›åBbÛ­–¬;H„„ơÓ—ç( „ÂÂôxn]Y7 Óp‡×'́Î_QσƒĐÅÜÑ̉º­9JÊÍ®(N8,ÙF:Ûb“ü¤ ¥ùl6ÜÊ9Ö{ïVªd ÀAá<ëF“j-Â~eX„7ơrrZXđ¶ŸQE]éPƯW:1³4†ư¨(7’Ö,J£=›ó'¾₫pơ?>Ó|} |>lcc©dzl,º(·›¬Maû+úM¯IüăÂv=lT‡^ë³)ºía•oyƒƒĐ?hT, „Zì(îڔǶú%QºàAhH€.đá ™̣èNKç¦0miϦƯ›ó™ª’¯™KóM AQÑ‘A@~~~j3‘q[e,‚|M€¡Îơ€aSÈ)TEUßñ5̃†ƒĐ5Û3o¡9] ¥³Ô}×rZ¹a Ơ¯XMÙƠ*JŸÑH1¹™V@!1I:¸øj–S>EhÊZcKÂ|c*Ût”ù¾¬QqÇ}ê‚å]_ªhÍ]cb‚µ$ù‰^Ñ“p÷)BBK[ăQ_¡½zîø,j_[I%5U™’EaZ+óF4L¢¡…‰t€$3îá ä ´́#ă ÔŸª¹ˆbR̉Xû¦ˆ´|Bï@Ñ:ăC‘89½3j¬>ơP5ó«ù*ü¾÷̉2*®™EAÑ |è ƒÉp ^å á ä ô‹|Ơ"¼ơÎ QÈ|z°ø°`88899}B]́£¸‚jÊ(f–‡!!! |½‘Ö.I÷z>óê1*Z½›:Øàđ Á·Ëó9-‚é í>c¥v?}̉êWRbÙlîûă ä ä'Á·@8zy=­|ôÛ,̣›»xƒ Ö?oĂÅAh„ïÿd1«ÂđF®́Ef rú®06mÎøzç 4‘:³®°ÀĐ&/éP­§GÎ|™²çßB|H!!¡vt{+?xw;Uîxœ"Ṛ8 |\Hâ3K8-‚̣¶)v·>ùƒ`åÎÇ9 899-û½ „°sme¾A®ÔVÜßWùzç ´Bl½eÀ{[Ï –+XwïK\“7 äëƒĐ"‘>ƒ4oH—ÁÛ¢¶»9¸˜B¢I:‰‹ƒĐ$ÑtÍŸ8}ppéÉÏŸM&̀æëƒĐ"ÑÙù`×tŃ0¥¬̣—íâàbBÛ´€à0^g̀AhÏöƠ³™¼J†àg¿YEA1Ü7È¥ÊëĐ]ˆ¯uBó nDÏ·Pcu¼¢AؾiëÍÀ% ÉÔa ¼Î˜ƒĐµ“Ưèăw–SjR¨¢A—‘Ë»Êpé UEiù7øZç 4ÂÚE`̉†)‚—̃ZHÁ±¼³ —Đm("5ÿỵ̈µÎAh„B½1„Æ hÀ D̃¼:‹’g.à‹ŸKOÈ ˜6mZ_ë„VLĐ¥Ưª•ÂÔ”H¾-æ̉v!a¡ư„Ơå±T8w_ü\z₫ÁÀĐªXwo;_߄փđm• §›©u^¢@@ơ;àà̉ M7b ª¹ƒĐ¾è1̣‘X­”í1¾§Ÿß4j>ô2—NÈ̀hnă›8íáPûUÀ5Ǩ=VđMùÓ́ûßàà̉ÛϼíÉ'ùºæ ´„Wwe+-züĐ=e”̀À¥&&W-âÛbBG¶Çkú”Ô¨%%Eñ\:k0$&™*·Ÿø _Ï„n‘;.|½‘Ö.I—=Ñ1gvs‡—ÎL­]F‹N¼Î«I8C€@”3³3ÂiÓ†Y\¬²³jfí>5Â×0¡ÓtñÅÙ—r#eAŒ¤»î[ÍAÀÅ̉eÛïå¾ABç+1.ô—³Êcé¿—g{.?úÊ×xk~_fgÎ^GM‡Îñ!M„.:iÓ¦] đSöÏÿ“>j9ó˜_}ó‡G0¿ĺ=w‘¯WB»Ôtà»Ư =¯XĂ@G£OX *QĐƯúJ‡ÚÓ <Ư”CÁ…êDˆsnáä ´Úªˆ̀(₫<2½Â“²I€üƒ˜Ÿ%£i­ºbÓC—¼‡J£QˆuêXzseƯ’³JQWÚo0hZ«áökzÿŸIóâûkôÑ/Z/à»ÜüØ ÿÅÁ`]0­© DWÙvRf{ˆÿÍÚsJ¶Ç€ï ªGª»Ÿkxà•N›W:ºqÿpúøºCbÿ—Ê SÎæ7à)Z±ơ¸Ém›¦̀ZÊ´©uË©rç¿6ö̃ ª5ÁöÙ 0…Ï4,|4.|6寸ƒƒÎ@¸Ækm#®=*-0á/*­€)³¢†̣k›uJ.(£ÈÔ<Ư¿GÆé=$ñ”"<ÑæJ§©{ÊQa"aé†ẮóđùA‘±”V·‚fÜúè¸êĐk}¡÷ÑJ2 4âq³» ôäÄĂöƒöABåĂOåúÿĂ"Ù  á&²×÷‚@̀_̃¥wôM•‰Ï<#€iÂÀÂT “ÀËœnH₫™x¯’ŸÔè₫½¡·ÿ²¯ûÉđ¡‡sË?¹\Eesж;V̉đ/Zmv;Ư[ʄߟ<\I5 æư%©jÁ_ÂSóÇJ›(®¸ÂâÓ)RNé.; cà´$´ÍÿÀ÷¯x´†UT´vŸ×Ú\ x?"ˆfx¡Z …(!=ơP5« 2yüØÁhv8„Êà‘ÀĐÈñ€pVZTƠơ”SŸÈ¸A3gwZ‘Ă–YbÅ]¶„Ă’ÿÓmåçôù*±uÅxp̣æµÓí·ĐÅ‹ûœâüöm/”À¡ĂÚë’“Wu)¥vÙUœñÓÔ€§TI3Z(µv9₫œ=ăxẠ́®/̣Zw~^±ưøÏà»¶Æ-ña³fIA䟽:wÊñ|¨–B}צ<FôßÑzÎd˜Ö̃ÍA(Oøe2xb†D'2+'¸a[X1—¬Ù¸Óï‰ßW@ˆ‡à‡D̀uQÓJµ7uÓ3¯£ÑËëˆ2ºA†0üÖ¢›ä ư±í’­Ư‹F' ˆt8nÓǼˆ̃@X[£~_\ï2ߌ1¶€!"Í„îµ₫°í… đ›ûA–2äꈼÜA(ø@æ×gt;"ôăÄ1£¬FSD¥đP¥7®aÖ§WÓ›Ö’)Ÿ!¡óT¹óqJªœ¯ơÓÎk£g^>èÖÔ$9ƒPt‹À-ä,Zđ#bÄ-ü&Ú̉)ˆ ,À U»,˜c› sºn 0<9‡Ê[×Óo₫¥Ë#9SA¸®SF„%¨ ø‰+Ïüđ#ÂJ<Ø5®üÜ0đÔ1ÜZB×ù>®ùùû#]@-J…ÈÛ„ÎOFÜô¹KéÏ¿ỨѪCÊl;̀,1qÄ„;ôñ;Ëéø₫rÊÍ gçÖûÍwá t.G¦ùùa[4Q¿ÿ¬l[á´/êü̉?s:ç|"œWFßMå‹r¡°6HA$F{đ܈ˆªq ¹‹„]è«ÚäƠñº{ÎÈ~ñ"G1&·Âc½ß¼„È O£Í;ɪ¡…¯tx|>°ÖF„nê"ËH1‘o©—~3Ôq™ƒĐö Œ$PuH|Úµw¿¨¨EŒ2§̀9ă„ö‰åæ”Ñ¿₫H~} ,Â1 ×Ä?kåqD€P¢.ơƠ*2µeê  ¢ö{Æ•º¥ OÉ¥‚e·¿ê)6÷¼qI‰çUTTÈw†´‡ÚF<¸N[âl-× Èu¢¢DX’ “́êåAV“WùyS²ư[È/Œ+¬!œCmeIÏëJÜÇeæËºû·^e‰·zb²4ƒ j‡e>>>Cœ7T® oñøƒD– ¢^₫Áă³îxú o‰v"p’>{Ưï=p.©¾çü¥%H‡Æ$ØUÿëNIk=eƠ]Fu[b#0]Q,éĂL$f ₫CµlR< A\TJ¯[5¢t+Đ˜…“7“<BTº(ê¡‘”EÏŸ%û…¬B÷' 9´²ß[³±]ƯrÙ*{̉Ç¡ ‹º^ß+jo-CáJơ’Qwƒưè”rÊn>BÑ1aXÀRzhƯ\CD.QbGư‡° a!²®7CíW} „B÷uî’íơVJKÂÂ3Èç'Øç)å¡mƒ/®hÅxÈÿ«ÖYƒN.¡ó”à3„ï>Ä?ÿ¯ăªHq·Y?áüEƯ¾ç½ÆhIè˜P\wĂç['•""́w¿Èúâe¥…+bÑêÆ¹·{„“9ƒWÖuz QâO_ă·ƒ›."º5SbùÜ}€̉tà¨*nY×äFö)áܤ5¬Àâ ö7R¯*?a¡j›—vŒzÀ$IÎืÂ=€ƯÁ}·ÑĐÏ—œó yèÈ<1sד^¿6¹àëW¢]ׄ› :c_TD$5ßơj@€ß³´d¾PÑd€•¹¹}½°%ĐF‰×ôy#¥BưrẰxzå«u+„b@$$>åOM=ư^±Ö*D³XẀ01r̃ѾX ç< $Œkç“{vÊzq¢:"4$@Œrvº‚Á0.I—‘ƠøXW¦ÚÀ¿yUæ„bA(\åkPéé2F–s2Â)'3üßdBqVBHlʈª×··Â° i¸ăR*₫üÎ ‰]zßWd}.P†› B1ïpñ́d̉<0oÈ„bsH$sà™JÉ‚"bÉÙđo8™áWñó›FÅs[eÂĐø4£"§6ö”‘°-ÆöøÜiA[ 5½`ë³I ö9iMé"Å̃˜.c¯¼»ŒÙh̉NYP¼`Ó;÷ÎagY¨6‰+˜ew½v@wÛ°ÆBĐ¥ ÑWl›'3¶é¹²!f ‹Ç$ÛÖ+ ´)‚S¬Ááök‚“B®¡Ă>Y€_Ä/ P]{÷7'8䬪MBăRm¶ …´‰1iT ¾bͦtÜâîÍù {ÆäVêÎ"²&çèzXT„Cf @D·d¦đ¸=‹•[ƒÖ¯„¡ơƒ!.v@p˜ºöe5N•‹U•Vü¡Uê¸,M™À b l.÷ÛăYw<#Ûs€ñÑY¥º`‰.5E†Ă/m¶êØ$@”l™»mX[,JH–MĂU¹iôßV ›O<B<±0H½Víóåj"¯Đ$ü`Ԓ‡=|UÖ$c{ŒàŒ\ÏæO‹[cäœ&'„È6…Ûbüúµ×ÙtŒ [æQq̉œ…RT–]à ÉÓK³N„ó:âV‚!1I›#́-B똢êL ?ÛEø₫°FỔÚä¯5PPx´¬Ó‰0 ó ‘GXV%ëm1}Øa÷±ˆe[ïïÛΡ ±¹ô3]‡™aï,¥sº₫ØvIX¹„xZEÄp:AèW‘Oº1#ƯD°a",ơZ«ĐØd–¯'×s€]Å̀Oü¶ó›’d¹ÈZç¥Đ…ÓÍô·Ë7;ă˜G¢sKn¶sS*’©tÜ´UĂGË{̀å D×eøv8Èœd&eÓ¡=3ÿd,Åç°DI))¬®fƯoäzü¸Ÿ¦¯ïùVĐΛr&䶸pîa‰Û³-6©ó„™2â€2Á¨@¨ÈÄ­A[·Èi ẴNaǽơê¤Êù`Nœ¦ëmƒÅf•ºÙè‹)$&™mCåxü˜ø—׺ Đø£÷–Éná£GÚCYÛ§~6[Ö°`₫BøµS©§=o¶_(£¶P¬ú¡™»¾ú÷°„ ¾%v²Po‹ É¥·êdëÚ—;IÙó7É6h’=ÿJoZ˪3~|¦ùºÜr‘› kpđg»]w÷ IÙ¤á‡ỬK.Ç¡jcÑă^»Ïă-èÅüÍñ¡N·Hl±;︕‚ƒüùVÙ6«pÜZ_¡qß dÛ‚ÅĂAå>«0«|¦KnyG_gŸ‘9g=“\¹”ÈOƯ÷ô‚ï ̀§[§+háÁoPB|8́*æ³ÁW(­ß¶„H—‘:²åd=ø‚Uˆj“óÏÎuú ñíïôê>[d4=Ă1c«ï³îÑç=º`9 Ñ¯É·cÓ³”D7¯Îâ³.‚ü‰aG«@È:fôNÅs@¹W¬=UzKnùh­Btʆµ/‡yÛơÅÇ^ñØbyû•9TY#³í°y¥•Ṭ my…fKïL‚P|Rs8¹_Ø*.^Ơä_¡Jø 1™ÙÓÇ (#3aöásY$Ÿ¾·’U·ß«¸û$³a9åçÆrĐỶ탆cQ-‚P ”ˆ¾&÷ –ºX»"p̣øËN.$ø E6{„¨!‰¡¤-½W –Ü;ó+M8&Xä‘©®)µzđÅÇơ¬O\kOƒPƠó†[*FC#)2­Pñ÷J΢­”_VÈgFBư±M ¼Æ·Ær"W¹äÆ€e¨̉Xa`‹́©Zrñ>k8ø«äpùVøư, ŸÎ’ؽÆ«vùb=Ó:#D»­áUBùưkµ¸äæøïßm Ơ|›mÅq­=CqçQw÷ú́ß\·₫₫‡›¨÷…'Ùg†'gS@p˜WƯ'b6À¦=›8ôŒGGl!z¤qÊë‡Å¶nÛ —Ư$ßyk?5ø6«"r÷6ÇVܹŸâË›èg¯Îsú±¡BD „1Ạaàˆé™^D½_¾ƒoJ>a‡Zlsfx='•w‘Wđ$:»ŒvtíÓ¾Ă¸ü™”R½Ø-©5¸Ç0»%cÎ:ªÙûMRƯzSC=¤ơJ£Ë7#¿€@Bo¾WpN1ë;ßƯÍá7ƠOH6—ØÁABµ¢oŒ~µæ×1¤d!¨ºăi?kfÛ:æ.Üâ²ă)YßẶTs—ng[U?ÿ«·~x¯ß»ƒùÿÎưàĐ”ÏÂy›6ÍOÑÑa[}Ë©µËè7ÿ̉Åè{Î ă„¢WzÆ)ô†˜Sc﹋J¿Áq-°ơyâù»]~ÓüöÂB ̉ÊŸ’róHµ³—%d«ÛûP‚ÎQ^ëNVSí̀À'₫;.`… Fω4̣ï–¿#j‚1kØØ<‘üå]̀úĂͨϼíIŸr§ I½nÇC€‚ĐôMomaĂ¯t₫$̃*ñf@SYÉd0$Sf«½Ö§ô›œ¥Ơ¸ †Æ‚çE²ñP\LƠUÆÑÊ[V±È3„-uû‰—ô´ññç?¨»ï%JÑ.*³”Eh%lOJ`%₫œPED†Ó¦5Ùô`ï\zæx½đôJ:ûz·ÑZà́›™åÿß4??U€P‰‰̉κOàă?̣ÂăNËÅṢ@)4ÔÀ́l›û¢;ƒ(̣©¨¹d<â¸đëo€!ü@Xôî‚¡¨oÉ_~g³ ÿéå9́sỵ̈ë•Caq©Ÿ®Ù§Î]²]PÚ̀/ØÁ(اí±Vz;¾B£—×Ûtm¯ü¼•̣³"p]/Iº·\BAØ:/…ï.½fßđ¦̃ócJíIˆ­±¤;m¶ )<%ë°7Üèb'™;îtÛMơ₫O³KØ_ƒµ]¹ó‰_ÇƠºÄ•Ÿẳ¹) ưêÆêøÀi•M훺œZ³T-8̣!åÖ‰ÛSw=ræË6khÙ¼´HÖ kc¥Ô­1F\¾¸ä?́!’«åÖÈÓjKâĐk}¦ú!»0,Ụ̂È[̃p³ĂrG”0WµÜæ'¿­ç–†D$Íù»,Ï‚]Cà¸2°†-rhHµ/M×ûN¯ôƠ©ƒ‚üơZ±g4­ư[DjvQ¬å^{â[Vo‡Ñ öô‰O Ö ›¬D¾÷ư…TUĂºĐØ=׸́æ£J­0¹*\ÀanL9điÓ0Zí [dQØßzѹ‰×X÷ƯVDÙéaÎEéyL­i½»zKÛ'T0+Ôđû ưóRÊL Óƒ3STưƒĐ¸J,Ÿ#‹̃‹ÜWïxÔê-䡋ÁZa»(î8¢DêfT_éè¶„u÷~ûïđ¿(îF:Ü?.µ₫Œü´i#!a£,ÇÍKnz4:E₫çÂơkœrÁW„9»©I!3\Ñ9̀è®{Ă”U(ºsY†Öá°\T̉ïê:„´œ™»¾ê“ D½z₫²]w è̉Q¦âĐ#ɵ¾„ư±í’A¸vI:ûZÙ=à¥Ñ:wD<‘º4pCÀGâ'ÍíuÉæ¬BQ˜@§!-ŸŸrƠĐ‚Æ̉›ûá·ÅnÁ\¥É…ÓÍ̀D® ‘5‚~~—Y.¡Bưƒÿùëj‡@ȶǛ2”‚·Ç&§XÁ·„-rư~å´i·Vđ…'çP\F.ưâuÛôŸj¤¸˜`µ´Hç* 8L{¾'O¬BD‘Óhê»c61¬$‚7T'¼c˜5^·jÄ—@(¦Ñ˜²))ˆbYâ`tCcçN‰Ä†–Æ$”`: B”ÜÁáê©›ßQ«PlÊh²óÄ´i£iù7¼y! ¬-)+‡́›añæyúØLuH°ÿ„nö ñócUe›yôX`æd„3YÜA₫aR|,Û1ᡇ{a<µ¦Ơ«v–ˆđó›:O[;sèôc5°¯Y¬Å½æç(ÑÛ•uƒ#>3g¯SdôX£á‚^†‰o„ ”•»¾ªøæ æ„Äă˜ÜFeeì‰üêSơz7΃ûÊÔ~~~°ÿ&&̉j¬ÊñÛNÈæ8z{1«Đ?'¾Îˆ°@̉n4çăµ/€}&có«,XLíæ¬Á>º̉~Ci„ßóh₫û¯"KŒ³ „PÅÖpÂ+ñF¤̉LF=%üb@H¸O, T| ¿ [ÜĐØDư6­Ô" ¾SÙ=nź´Åí±9(~åĐ Z2'™ü}" _nbi“QP ­y¡&¬A–qA­Tä¶₫â «2YSV§0Á‘Ë<\ÛÔ/n‘ÅAÏ*0Ïw³W[…̃ T›ˆew¦UD&gzưùB 3¥´fÊñƯ[Êd̀³-ß "ƒ$₫ „´§ÊY°……âzCŒHSL€°m§¼1pâu‹»¼˜uqt±Ä'D{l^‹»„Ê’¹-S,cH`°µ Ôh»¨D"`–›N×~·Zm Ûl!ʘ4qV©·Èăb ¥‘à“Øü*ŸØ"+Úïµrù;¼`vSl₫L¯>W(9¼yû̉)¹u_o4e b¾Ç•Üm¦kSÙj»AÅÖ(¶G!$l‘U¦¹°À‰ŸÍÜu’Gƪ¾ăi›&æ?©ëé­U@Hư₫§«tÇ „́ÏÖ ¬@XƒGïmhRj§e‚?}yYË5›A˜»xûu%uB# é—6d¦ „Ä$q«PÆB*ÜÎX4yeÅ,xä­ç)82Îx€wu×”†$0h¸cB©ĶÛbk­A»@‹ w”ü•t¯6—h=^¸f/‡Œ8fê8cá¬^Q¬dß·Y!bœ\P¢;V”Đ¡”ưy¨Ư°úFÛjK¡ÁQ¨+~đî2²…k6ƒY…‹¶N S]Ñ7ÉïvKœÂF@ØvñJơ‡z»Đä!0,Ê) ç¹ă³”Z9eQX§›6ÏÖ °ÉTkåÙ¢CÉD• rÿspÅ».!zưa„â*M¤êéWK›·«:Ă8eÖ ~ꨌ"§,á_´R@H¸—úĂÙñá8‘S‡Ü:CkṔä>̣›UU2Å”¨ësÉV¦ÙB(­a•Ú ¶#̉–\Æ'˜¶6k·‚ï¥BJHÖ¼›¶€`]:c´€œÄ}¥dëÊ @Đ³` UUê³_­û»̉!KïùgêÿÙm „U¨t_!Tßs₫ŒpC Ọ́Uc“È´™ »̉›ïwÚ"B@AÑ;#b†Êâfv| A©Öl–Üß×0ËCé­Á¶¥édḮ!ëL¼jϸ’#È¢PK->M6G3¥GWzû/›kíïçđỹ’íD2PRå|–ÂAhZˆ£K9-£¡5˜¬>ªÑ+ ȧ%‡’±œ`·VaFs‡R[téËLJ  ¡áƒè7¨-¥ë˜À= ZAvÛ2;R¹÷ƠU§xPø™iaä(ĂœBT›̀ØöKJu§Å„'Z %fäREU =z”Î=K§N¢Ù- ©tÉ&;`xnXl¾€ÎỞă¼|qÑ á11^]—*wI[Áu=ơŒSÓ/¼ƒU©x‹Å ¨÷Í₫¾¤(™E¨±6mÑöu9ÙđgđËi „ĐÇÏ•[dl]̣VPJz&;ù–^ï½÷%ç9²Eî3:̀´̀$•ăpr@̀Pp¦pÍ›•:»{à?mƯºEËÙ.n‹|ÿốwôÊë́°¾JRéÊ•+&× ’®Û·QnvƯWéR ªE?Jg±Ë© lèy}5 xj;{‹ Ÿ_jVư¯}lyaËlWWíÉ-²^ïB4ª¼ôÖB æ·&{aúÆI§-ªªUØ|fođŸ¢·"’§uÀn¿†~ƒwÜ’?=¶C¬u×ê%V­9XŒGôhÀ™®íí‚zâ¬tçl‰]BÖ̉¿÷ü˜Ô¡í ÎYË|~ü1Ùú:ỵ$e«VÛÂó†íưYà¥I¸KæSZƯ )7  ­pgZƒPzíR6ûWéçÈŒ…+ôá£àÛgçŒéÁѵÎϧ .Ø´ö°^[—̀¡};*úlCÍoJÂzt&·œBTi"ˆ\9£Ç[aóJ:öĐĂdï ¦|\rº½ŸM÷‰à‰Î*Ô‰ó^ơ¬…‘‡OXHáIÙ<·Đ }ËM{ŸrieÂ’Ûv+zV ¬ÁĐø4ư­¯dF±øàw.ö %tÖ0˜{mƯ²N?VcÓçv.Ë ÔäĐÿp5£ÜB1ÑZ¶ÅÛl‚!|‹H¤¶'‡P|Ù]jg°=6ÖÅ=Ä —Q^í]x<́„¥²ưv——h¥×.Qt₫ ¬ÁÅËê$’ÉÎÓ̉Ë}u`<§£Á¤°¡*Å_åîÍù8ê>¹ „‚¿pDA‚¬µÖSiǽ´bM‡ÍyOÈA,ht|¶ Åá‡-]éPăâưù,—‹çÚ/´—Ï©ër₫ù·›Y •PJµÑjK%&#c&ÎHgñĐ•öö+Z‹ØöÖRol©0%4â.6¹„ †=ưº¡é¬ƒ®æ‰f- 3k«?\04cHJˠ–uÎY Ơ‹Ơ†Ưh #ÈĐ̉µÍ^;̉ƠBăÛ˜Ô ·́ßuÿBÅZƒÅut릙SºË!v2Ă“®œ¶a{a:Î ‚Œ:~k^§ù*um®°:02»6ÁmÛaù {û'-=¡åºµ©'€¢È€ü~Raû ‡PVe3kÏ匔€:CƠFáIYf95OÛqñbÆi ŸÏáf½JÖ  ĐfU»„YƠs»-ƺ‰L̉¯ 1»Èµợ“•QÚ‚»†¸£!̉iª*̉)5%Y{âD ‚*øF«®­ëË­O‘Éd)2Ư A·ƒp†“¾;<™­-qB„[~‰Âû8;j«-[Ê£ôÆ5»\ˆƠ&Đ—îj`Nl[hfmºOàGµ•ñ,qÖ DÓ ¥^ÍC™ÎœTéUXa¶P&ª–ºvXÖƒàÖ±G¨bÁ–÷è̃R&Ô##ÂŒ_ñgkû₫̣yHƧy-¥ÉÖ̉€,CX^²X˜Ø¢VZÛŔI6åÎăb>«0»a ;&:óJªZđ,ĐÁ7æ~đáÏ–²Ọ̈º±“.̉]ó{mV—:%gĐªÅ®ơ’ÅnÉC|À :¢{vQXH¾S§§ è12:wÄđ"c«âÉ–ÿ°(ÄAn¢Û ĐàfB…ÉU!•æ’´¿Ø™Fl[”XÖ̀·È¦£đêđÔ¼ß Û¶l±ÅÙŸ—³ó–…™SRÑ E&QĂM‘œM¯>UotK kOro¢ĂzŸ ëđˆăR+ŒÑè²­%s¨ öÿ›'èq²–]‡^ë3µE Å@ÄgÀØ£P[×O½ç.Ü@ƒÂÍCBZˆp#éù5Pă)^́ʦY’«ØÈ¤ 5*L 7œ §ÿ§ï­bmæ·væ8µ}ô«ïµRHt¢"ó=sm¥éeº¡Kjé–X8Ÿ́̃ KÎù3¡ñéL¹‹¶N …Í/ Ûe’‚“¹y†Ú>qq]ăb‚\^-¢>CXƶ"ñ{gu”;ä2¢›/>[r«ĂưăHœ6¸Y.J}ú‹¶ư :ÿ¦$†P]eÜé¬B!É[¼¢ °<ÑZ«²-¼%œË¦Æ/j¶iƯ8HÀ…Ơà̀­rnU"ƒ$¸ÿƒ£âXm»6qº£[rˆç³I(k•>豆pŸw|iÊ^bIJô7„§vÛÜîpu ®!ˆ#‹“ÿ*Ê„:ëđđùOLùDp!Ñ* ¾;VÄàˆ¡µÿøonz@0ÂE†å‡í/¶F:gyϹaŒ%5²…€å7! ©ùÑûÊÔÂöXWz‡₫pu­<ÑZc†Dž!,4‹M5飕*éúK'k'~øb³~»/#V%èˆû?6:ˆ*Kbè¾E¸®rƒ ¬@(QLQ¼˜đƯá‚lÀ&¹`̀¿'₫„ èéE”µơÏWá§4q3t ÿª‡̀ç@Á·ơ“oͦc’6]¸a +§³¾…¾Z‹ÅÁ÷xM¸†,Ê/]wRa6 Ö†ËëÉ:º̣³¥#r ,A(U}Ïù3V8|#!‰[|’V\xq+|F—,meD OÂ’‚(úô¯üTNƒ⦮ơơfTªùKÑeï½@Cm#b¬os‰1ơ}y!E¦*̉E›7Có (ÖM£“Xn¬?Ÿ±À£9Á¢lÓ1ƯlgH»V°c̉©SÎđSVđ,ÆSÂÏXó¤3ÁAaK ̉nq;Fmn%¾·”„M³øaÑà)9wÓN¯™–f)"\Ôù¥Îå„3†́ĐÛ.‰ç¾CB—ŸˆiÓ.‹QL-Ä́Û~±±‡Eúï?Z4!D‘ÙßcÑÂ2̀i^)›|I§«Gëo•¤g8uÀ».’JœOœkKu¬M‹›Y ³Ïihl"½ÜWg!Æ®e–-±©tÖÆK Ă ĂT1Bß„à˜aú‹C£1D‡-ÜÉ:dø¸¿³Œâ‹k½±½ÿµ°øÔ_Kv]â‚Qc̉’¯Öy)́|«Jùiÿj QâLÔ^åE“Åù9G.±Å³`ÈA軄xŒ-°+ơm“ óñZ«Pˆ2‹€üåwPTætûç¨ÈÊ ́Wç/ÙöOÂx•íÔMm•Ås ëAé`ñèôSÖ JăÜñ=à[-jkÛĐq*‚E¹‘n﹆í±^½̣‡íjø {ïơ=µ‘U?x:ñ·ñ¶£”•›Â8¯!q²Đ_2)M(»RËí£bB©Ñø̀¹ëQ¾vĂÈ}ëôH±%‰“™UcrzUË̀Rd$çb|!†ZÛ:~Đ”ÎŸjDßµ =–4ßP̣³ưol£˜Ü Ö¤ÁƯå`3Vm¦˜˜  ësởPôA¨-ơ26ƠϓɫœPjs \k?cé2b̃`§£Ö >Ćî_-YͰuQw'–âqzPu•qfÁ mëºR6ƒ3\Ï=Ëf±–%;¥ T¤¶ùdW`¡|OL§‘₫́»?»…2W³'²+sà°0Ö́¥„ÜbÍ"ô£́ŒpëËÖ>h”&÷zúúÆƠÿ ~V¥¶;Ó@\ḿ¡"t‚¹á¨5ˆû(93W7ï¿bL®¥Ư‡t‹lªc ¡BtǦüOQ}`v\¡*ŸNóù)S¸̃ÿ}j¬/§S48»w²VF: Ư¬YN ~ộzZ°çV”8°±Èaà½b ª˜’•Aw̃Z@Ă¿°cVÈG+Ub’'ShđÙh@ªÔ¸5w=KÓüüÈØ94}öV‘àÉ«_B³[²ùẨf…7Î]@åí{Ín‘ÑÑI{ïyïÙë!ˆ27ôB3eƠ‰3[ÍíÚµ™YŒööÄûÇï×a€uè0H§1Ôé₫£T¹å˜®‘,Đh%eM÷n<í=l…“H₫A!”™›®ífâè¶ÿJû C–G¶Ä9‰›ŒÉ%#ÔµÙj2h¸jíC/£¨‚{á³÷vûMÍÂ=@Åöeè ÅA¨@¡¡NªÖùtá­7­Ñ ‹qm«ư0,-Œ7Ü₫&H£Ay˜)Ÿ¬Ă#/hÀwß7Ù67&¶Íbÿ7q̀€(<Áñ÷ø}b™²ë̉†ÛÚé¯Ïs~0HsaѪ=Ñz=±|îDZùU…`ÙæY«|–îd‡™Û!˜–Wlơüák:¨´ă^k¬Bâ T58Ô6l®ƠûÑ}ƠtôȲåhvuH₫ñâëb„î; åw†é4¦ô/?ÛC»Ÿ>EËz…>đ»Q±%¬ØØC37î§ê÷Ѻƒ÷3ḲÏ¿Ứȸf›/4³%w&Y§”Ôµ‡Æ¥*ºÇ£_€ñ1–‚ËAă#l…`^yƠÄë³Ï>£Ü¢R“%ŸR«Ö)¡‚ôúÓơ&­At:Æj{^€' j30†ÚIú”×ÁđƒöA±g¡­ Ge¡¡¶añêºø¸CÑÙåîâ“9ï¦/Ä­¯á|j·Å¶ờ©Moœ;oó}á́Ó«­° Ï{Uè½Öà‡kúĐÉØX¤[Đ’¢tæ,¶÷UUYlW4yăềŸÛ !%ÅZ«P–†  ¿äêë›N¼^ƒ\C;¬'q́bŸ>×u" ¢X«pX—[Øéꪓ´ÙkWjAQ¹kpTm`K9¬¶¤´ ±÷…ÿ‹÷0ænĐ+½ó²$k¯áw¾Ñ8Ê cù‚±1Ư,xÁÿRU‘n4Ổh ¡OSÑV¡0]Mûæ E¦)²Ç Î‡·ÿ• S iµ­³Hª›6̃B¾ß„ræm˜̣₫đb{¬KÍñ¢¼B¯ámrYO:£Ư£W/qøf µ­…vo#Y…е߭V+Ö*'’(²ÓS-Rª₫Cé[∔ܿKsJ @xUü7[¨B<ä“sŒ~2$ù#„2WÍŒ8££á3Dň#/DØëJX›x{ƒ đ£µ ?\Ó÷Dï åZ…CmŸF=¥u÷¶‡D'*:J\ß·®[c ÚSN‡@ªG §m}áÿÇ%§ư l\퟽'•ÆkAˆn)Æ@èH´X„`ËÜZ‡æë²Ô{L-ˆ¿₫vơßáßtt ¹ç'Ú1ήEŸ̃ È¹ÄR…&¤]1ăÔYƒææ{›íK+g9äú1gb–4yƯ[>y-Ñ`Á˜ÅƦ̀¥ÚơÔÄÿi™Så0…T«¦̉M°½ÜÚ‘C§ªV(u“lgN2[n₫#’È• AluM%KÏ•£C™fl:Â`ˆ‡¶=¯®Ư{¨`éă)?sÖ“´±…·Tx-â‚Mv±ÇO8Đª*²̉€Á Vר/íîí…#æê£å¯5}¿dʲVCDjâ‡]¡W¢™*©ođª£ŸË ̉æJG½RŸ’n²®Ư„̃’Făµ Œ 4Ûr«±&˪›V  ¹¶µØt[*»SN:ØÔ7ĂjÑB̀₫™nN§Åh`ÈZ¥Ö.›Pê\b‰FMƠdKƯ:cD§4Ê›]:‹=ô°Ơ[å-ÛvRÑ.ÓIà ô–v₫^ Âđ°³Á ±Ù‚©2$Ü8́cÛhĂ6YÎUǨt`·^„41dâl_½7X…ƒöZ…ÈD¤RÉ9ƒbª‰)ë_¯¦Ø Ö a¥°eåO/£ .˜…àן} Í?p¦€°çơB+4$@mÉ—6Öä²äjñ‰‰­ÁñG¦Ǘd:~ Ú= my¿ÄîÍùÊ¡¬ÂẠ̈9h4!& .yE{\ọ́’Y^ÏÚq{ø£$/»¢ÁâûèG5:đƯnB9˜*ÏŸeq±"_•&ÊæR“£é`w…̣ø˜exY°T¢%å‰Ñ.J²¶Ù*,^½÷û̉úVŪçܰ±ă&êrñ0OØƠß…5hÍ)¢ª:ỵ$ˇ]Ôº‚Ơ'[sÑÑHÚ̀•GåÂÑ6ôÜøœ±3Úü{ÁzBa8>&h\Ñ j'«°ÓǬAf5úKPAøÚÜùxÊV­¦¬Êf̃yÀêÿ§—PƯă=ͼ„W;–e(êGî+ÿ¾`²í¤¢A¨o^5UQ1%´ë©C#¼ÀÔÂB¡›·Ằ´±Í–'å$¹&<¡Z ́C.¡r̉1RB(",Àó=}Xk—¤Óé¯Ô˜!z÷E¦ñÊH×–ß‹}ƒ> BM¶ụ ‰'Ä&j@ˆ±–®S|{,Ÿ ‰·[ƒ¾ÂlMÜ߆߷…ó]U£=ïWÖY¬Qơª6\ ƠdI÷[ƒ>B(<,à?ï¸%ŸÊjiL̉¶C“´í·¤¢5w!‰Wñª*t™±ăq¯¬"á ¬Â˜¨ nºI[;sèôc5Ú? -û­•÷¶ăR5x~Ôg¸àk äV¡ût°k:ß_®ư³ Ö t‹•U¢75ËMÖà¶^3¡ƒĐŒÙ­Bêè̃R&IiƯ{®UÙÆ̃×Ă“sؼ )÷Yƒ̃œ<ÍA(Qfjاwm-àĐröm/Ô‡àPûUG®Uîî_!x"v?ár­5X¶ùA¯Næ 4PVzÏ+t¢PŸàÉĂ•̉¿sƵÊ^tëGÈ/ä0t±5X\Çæ0súª+b»xv2‡˜ôÙoVQë¼”ÉÀt¥C9%κ^©ơ+‡¢³J9 ] Dç1¼}ÆÖGÿá“î2_!T^Å’}9̀+C ^'p@đ£•*g_¯Ä²¹?HÍç>C'+{₫-”Z»̀§$„çG?Y1=w¦±S°«ăéÊÏ[%Ôît•ḅ*G…'\;GÚâ$ªîzê_å€ÏƒÚ³¹à‹­¼ôÎ. ¤÷q00b­¢sKnK¡¢¶»9̀TbÙlÊœÓé$„´rAë•Ç!gưVXÏư¡í¢[õiÓ²CăRƠék8Đ́àÆ—6ù́–˜ƒĐ@¿|c̃[XÜz[<®)B‚4¶Âïÿd±ôïƠöæ :CÁ1É£‘i…Ú.ÊnV ~V¤%!WÓ××?‡ DÏŸ¨ù‘Oî/œ*€Dµˆ₫V¸M£Ño282J6ôrÈY©¨ŒbBM7_û„zBªÇ 'fцU™~_ ’£a- Ạ̀¨h†¡‘êÔºå¼Yƒ¡†µÜ|Ưs‡á‡ígôjd}XÊÑ 4%ÿÀ Oƒ£¨âÖG9ôL$NÇƠúLgB»aØ1 «ĐWƒ'HîÚ”7Ơ8Ü>.7+ĐŒuxÄ?0˜’«̣l‰r„-qíϽË×:¡E₫nµ}ô|ṃ…ÓÍ„Ù.§ªÖà‡kúyƒO›öI@p˜Æ ÚÏó÷¾À X¹í±Ïùç ´Î*üh¥ê£ÿÙ:5YØ‹Sb~‹t]yP¢PúưüüƠiùT³÷yŸ-¡C£[´4óơTB[ax¥£ûƯï-`€ÀvÑÈĂ  W"ZÑR_@¼äç@Y-Ơ¾˜4]¸f¯O6Tà t × `»KÉÛü€ a,ñ…yƒh†*Æ].Ût̀gêˆ3TmÔØ{î"_Ó„öĂđmŸ;>‹¼¡ Ñ_´ÉÊÍ g‘ñüÑàQ đ}*‚ˆ¼CÔ!1Iêªî§½:B̀­>/ëH?¡R`¨±”¾ñHµ¢aˆ’8X€hœú_ï®D̀°3Ûd)ˆƒQDj₫DƯ=/zK7f¬ÛÿÊ_Ă„Nơ>utæÔF2·@X€·¬Í¦}s¡b#À.„a6f^ˆ±…µă Îz ë÷ŸåÁBÀđ£•ªƯÓ'æÖ'Êzæ |€âxÍâtúÑ‹ÍöuëÏJÿá(€˜V·âó¦eC°aÿ«<8ÂAèZ­Yœú«‚́ÙåΨÉH £ÅÍÉê¯*–_/›Ø©Ñø4??4+ưBI¢‚^¥úógøơä tË‚IŒ ¦Gï+SË! ¦kc%h¾O~vøuX7ü9|}»a·̀µwËÛ‡˜¿lÅT36÷¼q‰_CBwû—Æ‚ƒüƠÿ:Đ̣·G€ï¯¤́ô0 ö'ÁÏÅ·¿®±Ù–9<9g|ÖîS²ËCL«_I)³–ö™Á́„̣[,±PP̉…  u\FËz§đJ‡ú•§êÇ*£Ơ₫~́ó`±đ-û|ˆ,¨71ó¶'Æ= @ÔQĂ ̀]¼Mûw‡û}ºÓ4¡|¬ĂQˆº­ rô˜Ml»DCm# ¬zĂŒđsZ}‚ÿ{Û†¼gÅEˆü7.óí¯G¯5Î?¡±CFs‡ÑYOt—‰If~AüYƠÛ¯æbB9-’>æl×Bë:¡Øù>g4̃ºfï{q¹́ZŸưˆá)¹ê²MG]Àª®§Xó„¤Êù’Î:ư4ïè›üÁÈA(Û­Ô°dăØ.¡²A²}"üû„Ạ̈ĂŸûøùTÄnV¢Ú/ Rª«Ưà„ó‡+¶—ü‡ ¡²¬ÄKØÆȉ°5*üûEôPôµî]$áÑ„áR€˜#[`X€ "Ăzÿ~¸œCƒ‹K ÀQX‰₫A›_Å  –(é°züàC+}´Í Œe[`} P§~9¹¸”è* ‰I₫<4>Yy€¢ûøB@Ñèd>¨:ôw—prqy‡°­E{,XwM=ư¦óµÿ6ÊÈAÈÅÅÅÅAÈÅÅÅÅAÈÅÅÅÅAÈÅÅÅÅAÈÅÅÅåtư«s_q*“ÎIEND®B`‚rpyc-3.4.4/docs/_static/rpyc3-logo-medium.png000066400000000000000000000234361314203541000210400ustar00rootroot00000000000000‰PNG  IHDR¢yÀósRGB@À}Å pHYsgŸ̉RtEXtSoftwareMicrosoft Officeí5q&IDATxÚí} XT÷™¾ÀÀĂ00À 0Àpg`¸ƒ\½àDñÊÅx‹5&jƠ€‘5Í¥M­®iÛ¤‰1»]›ÄKw“6Í®­Ùl»4ÿmøï&q›M›îÚ5¤Ä æÛó₫+Kæ$¿¿¸1ùZó4-•c(,4˜¸Cc¢×EREQ,•¨('=Âå!́û2YEF„˜¸¯‡9¹̀É!O\kU׉£µƯ'.Ơî99TyÏSî’{)©j>Eë¤Ôå¯[®̉°ï™%­€"̉ØÏ‚Bd¡N¦˜¬2Í®PçV¿¢w´ENñA}EEGɨ¡&6®̀ ƒ{é̀?L¥÷}ÔêP>{g{î«GêÙï°pT¤ À¼ÈI»»®·v×?vÖuŸ¼ÆŒ« ]ƯRh3H® u^¥7®cß/\ûá9£Iơ®²çă÷´åsPƒe¡(Ë)µa…©|ó÷¾¨é>~:Déxˆ“!YHµ6'Ó‘G+ FXÁk;TE­s’¡-¡}®pú́›ÍZ.mÆ**¾}¿(Љ€3‡Ó® Å3Àñwr[wP]÷‰Áê®O€èÖqr-88ˆ¾¹«hHŒÆ«ào<̣5#iăå£ ís „œù…–‹ˆÓ1€”o>́Vđ9hLh[˜{€€œưÓ@[°aRDÊ>¡ó­’Đ––ÜqG•cLNj«ЂBéÆÇ<@kÁ€kÀµÔvŸ Ñ5å÷½t±uÈÓ ´¸đEÅ\w}×KgqđĐ‚̃ µÙƵ¤L]Ju»÷€èÛy¶ÓGmưÔ€bz¶æÓᯗѧoÎ3ÿ ßkª× ;ºn˜¿‚å=̀G³ü7ơ–†Œ/˜B™-¢s@Djå(_rÑS  9ÉÔ0m2ơôôĐÆ ë(=MC¯>7Í́7T”›}À̃uWî8z±¶ÉÛŸ'UB-X̉Î^ó–«(5#›²:¼¢a¦µe>©}„½ˆéBG»'ͯ!GCo¿ư6Y>>û́3îû:³f<ơƯÊJSØÔ*Ó{^®ÓÏ^Ẹ̈‚Âáẹ̈Êè̀™3dư¨®›Byí»<FüM…6Ư'µ¢/¹¼Óœ_xƠ“&9F¥ [ƒöÓ=·ÍÏƠiĂ™ßj}ƯœöûR4•[Ÿ1ú́曯 íSí ®N"O%đưˆ|ª†<­ /¼Ñ̀™áD›  DMŒ9g‰´rŒÖ×½h+K™”e¤̃̃^Ÿ¢®¾ ×ߢ³́á(ÙñX¼°‰™eA{"§‰ e龡¨†o¨ˆ¶ûz̃"®eÂñjANô_¼‘¢ —‡2íg8ˆ…ç–cà>\®;¯}çuQ8́üe{hJĂ,»@Ü´ùnV¢óVJ'(˜U|âk@¤“‡«¯{ˆ¥…É7+Âcă†ÛY-[xîsV ²®[m¨æ“ÆM$gŒv ¬̃bD|*€èSѳÏñê» M̃"&–D¼0ËW|>ç:đyÎ:ä¤X—đ̣vRf^>|˜Eß–>§JÏ̀··€›3™,5zˆVå<0`¼U=A&=UM5UE,—SƯP§7û†Ö_Z%³iƯÏD[|¢¾zE(”,XQSO1q d˜³Ö«Ơ–ÔéËpư×@´¨²”^¢ ½'DÑÉxvÎ¥Ôi·ôYWŔd!½ăMÉ_~?Yº âåÛnI÷:Å @0jJf]÷•º²X×"DÛ@́ë̃”çO@<ÇÉ ?¢Q«B‡Àrñ# ¢Å ?*)ûÏ₫D>…Ó¢•¤§D́>'ÚL|°rå²đØÄ±ƒ£ë¤é¯"=CÂ"l–*'<A&@ x>éKï+1-˜•hª(Œ„L­Œºưưđª¥_Ÿ.úµ̃^ ¤ỏ¶P´¾pˆµŒ”…tŸèăåRöâÍïh+ç^ W%ü.‰ 9]±ơé_€Y-Ă¢ăpư>ÓFà3@LPËY©ÍƯụ̈½ETYk $¤\¬ư*O;3 ]tHU•¨ÖZđó aK³@ÂL ¿oñz&ë×¶zÎ óÏéG#”@T$fâïŸ ÑJ’5á’±º,ösdë$ù‚ơ£]uË­Y— w,KÿXÄï²Ñ“|ÊY3È¿®û(¯QƯ Deª@´!)I’²¾COJ…Œ4qr\KsufYÓFÇ«&˜gKù—ç§0Wa4yú‘rV₫;Đ]Lßî*6íï*2íƯb¸~k»₫’@ZÊ9Úr¶ºûä9)4bˆv½ÅRQ÷ÿ¥‘µŒ‚À`)ÍÓµ7™`°±S#H­K%¥FGê$&|´i4¾G%e*hĐR†¸üÚ’1çö¯*6Ï$…´Χ ÑNÔ,9ÉÅk¦¹³ÓI©c` Ѱ>¡×U(÷₫–ª±%1™% Z ]hëôÿíÅé”›M²%£ù'°€è,?ZtÈ@lho%ä3ç̃9!À⨱ă%½ưÊ,°ÿÜR24¯`Ô₫‰@s°rcè“Ïp}ˆ.9‹AÊ„¶¥dOkñ™xo ?],ĐÄómç<ÄC­`óh&ª&4ñK;Ä@üƯ’ÓkÛơä ̉CtJWiú¾"²đ(±3D+ñ‘FÚ½QZØî»Ë9'½tƒÖ ((8@»9jn=Dó²)’1!UÏæĐLt ‚-öMˆÖ@¼tg(ú5ejIÖb9Ñ}CÖ*À¹&œi´ Ø’ßÿr.%&„KÄå SIS4mƒ‚j¢M?±uHÊ\b–>zDïñD ‚ô5Ûâ­½V´HÄ0y˜W§·úR ¹(IüDP¯O”Â?  hĂîóµå1À́G̉÷΂ÏQs¶œÔê_0*.!DN@́ˆˆOùKˆ£hÅ®MytÏúl·ñëÛ (:1eƒÍư¡˜“̀@´#ÿÉ­:m„[µâmKÓI“U0áˆúztªá¯¹O‘]Ô¤IgÑ:đ‡Ÿë Ι¦%}iơ„!¾QIÙaî6À†ÍgC£â¿ŒL̀D®Œy‰ÿ9[oÑ2#±ÿüëÍ—9@ ººk¥ªTMµM6yÙd[2hÄ‹üï™2æÜṇ4đ0QØ‘"WPdB %çPss!ë₫³;4´@E/>^MÓªÔ¸O…E«¯˜­†6ƯdÙ€:—Đ …ÿ«ô…Lûŧö[%è‘Fo÷´ªøc¨ï£¢…IlX‰E™7®£­³̀ưˆüƯw)(8˜uŒ̃ú°Ó‰WhLµ¡æ 7\‹)gñ="¢Sl!•«Hi¤ó§°\¦è›y¡­ÓMç0„‚—=ßa‡#–¡£ Ä×W̃O¼–l÷; ZPW=æy€clVù%"n˜Å0e,ÔTÓ¯_s±—Æ Ä±€0« {‹™^'Ún¡¡)‘J»ô+ÎtŸ_rÙo€Èü³  VËt×@J¼ND¼¢Ó |ˆ˜Öú}nEù˜×÷ @tĂy Y¿—z.\†•¢€"ʯÿó-œ†lÛë³@¶ˆÂ©¼ûû’D~@î«@ÄrŸ(mưà°{âOŸ«§1 üăkîX#ÇÖï42@>´£€®üf₫Ÿ¢0|(XF†Ử&c‹\NƈY-›¾’ªv•́”(ˆ{2†séDäưÿ^nèvg… >ä ß©v«v Y/¾ ~ØdÓ±”§çmüJk ƠĐÙŸ¸—º >°rxŒ&ù4”a)˜Lè?GPÓ4UK¯<]û‰×€È´`¨œoÛïñ‚½B›₫… ×;”T³`ÀƯד:µƒâÔîßùR ¢—¯ú̉ų¹±½ë|Û9©Ñêv\¿4ƯäQ ¾`Lvå7ÂÈË…EÇ;=r¾R|áT·½Dâ=\î₫•ˆV_ÿÁôs.‘ô©g=5-₫#̀µ1'æ7jöKDÜiHJçß̉ṃ-iîr•æ+'§É`wßè„‹”¹}TÊŘÎç…M\¶.z ³̉” ˆ8HÎ?3M̃vÔëe2@vƒa,ÚW4æª~/W(Ư¤pî‰)YîÖÙßh•(̀‹&¤Áø)´{цw,ËxÊ[Ờ,[Jñê°¯œơåÅeå³Ê†}Ü9¯̣ñs¾x|_ U«ÙÁºóPó ‹v÷6äíĐèU¶éI”Mó/̣ /xv³«-ytw!…†›œiGp ààጹw| „æ:2Ú¦VÄÿ₫üøZ˜ äpHp®yÈm×€rD| ¹ˆˆF¿Ơ]9Rû®~`0D)?zíiĂm·e¾ă+›~₫ƒ©Â:áC.̀™áܶ¯ù.å}r ÀÀ÷ûùu(A}ù̃BsâÿZ®1+ÊS‘¦t¶[M3f踈l wíÛí³]½Y÷èuœ Oî8z“6¼è}mh)ï₫ól§LbÀhó›¡‘ª!Љ|™g‡5^ J€xÓđÓà,CÚ*±ưéÍ w[ƒ=´2₫~„<„9êî88Ü<Wf®Ư=ÈûƒB=ỹ í%_¡ ø÷¹ïS@ŒË«₫½*£Ä/HŸ DܾÚÈ̀Ùâ¦äQ£Wuf‘[vƒÚä¶¶hĂ—m÷÷»N¦¼Q0×äkÚĐR~öƒÚùë́ÄÂ[íÆ"_Ø )–hcÁ¡s,«î\H–›æÇ*v©LrO£4úÂÙI´ù‰'º†²Îï<*²Ó£ÆL¶Lη’&.ü5GQGü'{ÑV6EƠŸ¨đ±Ù´ưÎÑJlN%#)¸ăoƒi ­́®²̃Á}®÷Ơ5·QDD¨C­wÁ¸ä²°ZØ!k»_ƯuHÔáª8ÑHưÖC,ÈpÇù´«(Î0ö"‚ö¹:jyđØ˜®§́΃¤ˆ–t˜ƠX9N{[QÍ_ÔuŸ4¡då/fÙRậëéÖE¢>Œ¿ÿQ7˺ct1^G[5æH9[Ew=´ÓmŸGVíLfª}T+2B†M VÿÍ?´  ¡ÁÊ•jÑT¬){3̣îX'Ç"…ƒ¥=c9œy3ÉXÝöÏ$§yiµJŸó…ơÂ6X»ë;‘‘«4~ DA;%gèÅEq§ïåÀû \ÆbĐä3ïê¡l»#Ÿu3Jơ™äµn§Ø¸ŸbÛ\Ưÿ ƯdˆÓ{^®ów B §QëâbÑ&ºhƯ£¬]ÓUí¡è>ßæÔa\ÿ°ƒV®ŸÅ6\Ul}V̉ÏD?{-edû Á³´=›¿¨¸û)Fḳg "YË™ÜÍu¢>”ÿ}w¶v20âFt)Xɯ£?₫ªEÔßû˹åÔừJ¬œË@XrÇ|.Ú²F̉äKÙ_=RGˆ%Ơ’+{NqAÑ5©Ù9Ê”<úÖCsD8wÍ&™<’¥v…‹ù;¹­;Ø̣m9'Éed²3…ÂÄi˽åa€¡pƒ¢Ñ₫ÁZ¼DŒtD¬c•:}÷,¢¦ÔiK/I]₫Ÿ8àœ£9(Ô‡FD‘*5›´…u”=£[7P̣äfÖ¸®H̀¤àP6EÁ¸r¾FZÂMíÍ:Ú¼&‹Ö®,¥4C.ëm›}̉¤ öÑ.găÅ4ø XIóaœ$~úÊR¦”úö«Rƒc=œÑŒ‚Ü×™Çö:'&Èk CŸ6v“D§pÚp» ¹”º<ö\ ½Q b „™9o£×]gw~mµ].aAc4Ñw,ûJ* b²D^†̣‚ĂÊ¡c÷0ÊVR}ƒ˜ç9̣WưͰÔfócÔ:Ư‹ê»"BF!̣ˆ~Œ̣@ªFT…cù.’É‚ØÖS•2””©ùC‘=3ẵá:{béL›tÿ–‰₫ (®My’iDÔÓïë̀9æˆ[Ÿ₫…”+ ø¦…ÈH>hk0"y­ÍÊ5ψYÚ¢£$M8®ơ¨\ó±B›ît £ˆ‰ef¯7»^#0–÷p€LHuKUÇƠ¼'nLë÷ ÂÈÆå™ư¯ñ̀±©’Z7&:”0utö çPKµ§ªëÄQKxthœ÷T1LC³fæÚḶâ{å…1¤Œ =ë U¨†ăơ.Ư”ù;˜V^û‰J(%1‚ô)‘¿À9-Kew=ᕬåû‡Ï¶®]O#J$ T@́hœ¢!Q4°´™k†$#>pQ3?6nĐ²Ơd O4|`°»F-;hIp£•2Ü đíà æ,ÛÍFß{῭|˜'³`VŪBI2„D6Ú< Fî3÷aăĐºú»×g?#4_ågGIéöÜ“?, ˆ ‚!#•ù¨ïzé,O”<%˜h8ôÜ…3%Ds€A ‚“Ǹæ·ü¤&JÖ̃¼ÀœIhÈœô(Q{z–¥Æăçø“Ơ&‹Á©ô_?o”„pS`–Đ‹bh« Ơ$C»ëÅ—Ï~7Ñiü‡pYS2¾ö'–vQX˜̀áá$¹•¨+&“€û¯»,ÊoRiCaäT«@FÓúOƯI ÍDó=2T²aü,äÁ¡c&£Ăùñ³uă¹²*J’‘±ñL;!zưèæaazo¤LdƒEïú́>§»ø-âÂ%ü`Ê Ị̈Æi¤9ÆŒv@«§¢h̀n¬˜œÁúz0Ơ Ú™ YH]}w¡d D¯6ú‰\j'Ơ–5ơKÍÖÎïØơ}Ë(u¶ï@Dª7Öh‡˜æ±Eæá±‰,€B€̣ùoÀ„Rí?´•r©Á̃Z‘°E€^̉XÚ„‹hÇĂ*[hŸ¤É£7Ui3s<’èe œM˜ÈŸp.¦Ñ†Ê‚̃_,)̣¬4íÛ7†I’ûœ€laI– ‘ èg®ö{ ¢BU¸¢{ÔƒJ̣̀̀qcd L;a.6ÆO¯—œä€†°ểØÆ<û&ÎP;¦₫̀(Sö|¡îă§…¦qf.8ßÊ[,ß3̃Ắ}?]#fåzˆ(Sjăålöî» û3SÛ`¡É,¸ª ăĂE ơ e{ZÑÙ³ S¥•7JO5ơôµ»H—ShÛ́v UF¡à/¦­Zœ:J–¿)$Î7>ö䨇¥M]ÇvUÀ¼Q&e°uІ t }c—!³·’J‹s)\J† =²³Øé–€&Ý)Qr V?`‚©ă»á9ơ‹(Û`¤cÇÑÀÀ ›6S֜ۙhL¿ºŒ‘¸µä$U Lwhôóo­ơÀ¾‘z4C )I„‘,ëÚơ}̀<Û¹T[ ¹zó™½ÿ₫û´{×vJOK ƒ÷—‰âÚ6=%Ä…êÖ±tµ÷ß+†"“”–_Nû¿ưm²ơxûí·I£Ï±ûû%›çµb;îX 9̣·ÀEІb̀2´LˆÅÚFâÎmÓX›‚”ׄ¹:6maqc̣5́OqtM0ÅĐ‚ö́§µùv%Lø…ÎŒ¤s ˆ ÎVn{EƒöLI±^}ơU‡@œ̉0Ëã¬på×Qq¡íƠµp¦1èÈ_dÉ5‹èG?Ù)Ê|a' ¢Y©µ!Ó€¿[rcúF¿Đ̉²~œ9s†êôv5|±A%zË3´Aă*ßtØn³QƬƠ´mÇN‡@œƯÜ2J;+ÿ±Î/é›ßR@ªô"Ÿ!̣­hO8zl‹h? »Y¤ôƒđUƠf²M×PDß±Ăóë鹟 zŒ6AXfŒaó»=²U¥9hDhFk0Bs¥fèÓO?µù&àgh“SF%x¡£XbºdIwˆ°ëÀÁå¢A*RjC ¨x¡y•Ù‡KÎf{{{m4ez榴ÏXAẹ̀z XOˆ6ă¦ÊKÑʽ”_\NGaj¦º§§‡iÂøDå·mwøp– Øđÿö₫bvĐ¾j¢ÑPuë§̉sJØ'©® Û]W.ɱC÷¿¯qÿ¨£Ü_Me&-^ØD‡fgÁyÖTѱÇjo!J†c¡Ë@„¿XÛủÄZ79ÍßÈúnÔOn$]^óáÁ;*îdl6vb我Ġ•ă k²̣Ü2¯ÆƯÁ £À³sv³@T|¢df™iĂH6ûÆdkG,Nñ\{¾¢́« ̀„¬íȻɿÄÿÁ¹{m›OhZ… %L©–$‰×D€̣ÚÑ)ׄF΅ś߱•fB7ReV[Åzù̃s"L|7#éu‘TQK f%̉’æ”Ï]Ù‡è Zëê®Oajà–R·ûx/~fĂgÁf;=ñ¼½ đWê+âX‹¬u…•’æßl z¾y-xƠQ²À/Lc<®ƠºFŸ–%™{ÖRA^œĐ‘7$ |7ƯtBküÂƯ ̣:]\çj:̣+b¨æ«¥}úIï\ÆöÑ<2Ư¶bËw9-£6Y¯”p¼lˆ¥LẨmü‹²†‰Â,J•B’ÉYà 6†8œ¦Ö¥híĂ_NX Ó°…S,¥(59‚ù>8Ø k (&Ư(»¹bë÷a¾L¼ÿtÖ•÷ˆ¨} 8H•‚̉”40Ÿù…e½b~OÈ —ƯơO'$CB‚LÏ|³Ü©‰‹Bgÿ» M0}?>:“¢’2EOđ#囤،B¶đ‘Ï»Éâsv¦ø”TÉLrÑmûùAÓæfËëûû$1A·lóáŸN( ÊĂ‚ÿr×êL—ˆ–hP‡éĂt&¤B cçô•nxŒrH& ¡eóS„…Œ—Ưñ~‰™Ê$ ua5´arơüw\©“'U/ Œ±@D"å K*QÏ=Å”¨‰¦ÅÍÙ£6̣ "ŇΙ½‹đ10齟/`Sä3‰F‘`ÏY¸…bS2)LJ·-M7ÿ+¿™ÈÆ$.H»œ3ÉRuê,ïöäoø†´!.P=ÑñrZFN(ƒ‰Î_¾×4!€º%ØÖ.5RÏ̃.VŸ>uêƠTéÈ~û_?Qm.₫âÅé,:~VT[ÉŨÀ ±%>%"nE‘ÇLƠ)h÷Æ\›kẶŒW,¸"ÎLsE0E¸Yđ¹D$¤₫—#b¸(ƯºfƯí”ß´rDEy`¤ƠÆ5¹¿fÉ̃¸º?ù·7Ö×®iwÆè(6ó˜ÜK[RFĐ̃O¾´ç´²¡”ÂMA@)Cû&z{¿¾MÄ’ ‹mĂ?̉•÷«LÎùcƒ¥¡~Ö²RÀ’×ö"eÜ %å7R6ß³ sÖ₫•¿˜WÅf="¿;nˆ…Ø‚6Dñ|Ù̉vYÍu,›o w¯Ë†É¼†×üÏŸÎú)[¬á₫sKé‡/ßÇ₫u¹ èƒÖ^ËY=b%B­= %Ă¯‹±~0ư£å ‘¦IÏÉǵ'[ŸuiU­™¼ÂF×Ư(\—@|¬§øgŒĐX“o—.†̀4|F[àÀT¡¥¤ˆ;–eˆ*­¹*ơ“µœ1Ñx^„:ỶpMé,“Đ‚+ PâüĐ?Ù DÊ2çAûJÊ2Z˜{ŨûK N«J@>Í<hé"‡LGL`ˆ^y]ˆj_92åM{ZÑ=̉ÖVhÓ¿n4§ w₫PH/ Úí¸³÷üx]ºCú¿u H(H5=î€X’¯ú ûˆú¸mîĐÊl‡Ôª÷N7^·ÔR¨ƒ¢(/•VüÏ×fEG§6HUK6«pÚ°pSÚ°rËÓoÙÍ3®ÜK5ÓfÚ4Í‚yŒR¯Á+¡v¿8–1l¹é½´0™EnÖG̃ÇiÂLQ;9Ÿs@0OƠeqoN«’prÁÅÖ!>åP&eJKUă|@~ixçHmx̉q̉ú–û¨¨¢Æ¦fD×%Z€…çÈ>ăˆHÙ5K?Ú®aJ#îHø0è§Ư}W±hûå{‹H%3ñù³´ˆđ Ís«0=ËæRC%ëóÏ`Ÿ‰”µïÜÅ÷~a1‡œƯU[ŸyW,afzë¶fÿÖ'ĂX1"Ï ·‚§©? ŸÛrkÖM•hFt-[˜ë°ßÖ\}× Æ~̀­–t²Ơ ­Økk—lm©‰̣m¯ơóÖwÙcØØmÇh\CÊØ8*,­`Au²]Ø·S·çÄåñij¨„HhÆYu ˜Ü?ˆ¯¥,Ä´âMôxUNÙ#µé’³,Èǽ…Û÷f’Gë<´Y2Ôf0í ễxb;[m ñô)ÉåÓĐJ}#´¡.×#m ¹ µÈ5ÇÎåºdđKÇeB['—|(¤'$/Sù†uĐ‚-̃ÚŸâNIfZ»Nz´ǽY ÆË¥L<{JÎnúXXÊF—ư‚Ôs$=%¨Ó³1yLƯxˆpô±‘ÉïÍ󴈱¹•ƒR&°=)h®*¿ëÉñ]kF%\,qEzùÿ¯Î¢Q_8äé)DXïÉhÙk4°¨HÙ°£!‘₫ ÿôT-€h̃ ¤Ê(ùÜ×ÿ]6Dªv±Wȱ'@Nt“DưˆHCY&µ)9oz­ÅƠlhĂ’;|îiLxˆ¬¡‰àkm̃4ơæÅ†XáÎ̃O †hJfzÜ7ô*´`K¥¿eI´*ôœñGë÷„®9O$´%ë{á¢~”½¯‘iyˆ(bƒ/#E>83Çæ¾áA‹qØz •¿ä1ƒ̉[Xđ*¹ÇÅơz¿áGÿ:ÿwÈÑă´¢ÉÛ›êhrt₫MH ²ü›*Ôç+-Œ;É™cÆ<ß*>ïO`„6Ć1oâÀë@Dm̀‰öÙ¼"ˆ¶Đ„X’ƒ N¹1Z6lÊ×#å0è;¡ÉL‹¸‹Á§ˆ1!¿† üŒÍs¡ă”+ïM®̉\‡ïå«5hLgS¦ô{>DHn¦̉nǧ ụ̂Ä’îÛ†…ùÓcÉ Á̃×R;èïÆöT_8Ÿâ’f}keQ¬KÄXwjÁµíz–¬ÆÄ1gMñ(`Ü‹Å>ºú6ŸX`„R^Dœ´†É­ ZÉß}{̣;%ù*§w¾¹ËD v# ±—k,rŒh.\ó×@7!*9›J›_ñ•³÷) B¾u_ÑUh$O/ 3Œ4̉ù×›/K@[Ú?Ѳé ßS¿’'/èó¥s÷9 B¶®ËÂX)5#üQDĂs§'̉KWÿÙKƒËÁ!2J®[ḅ”¹UMSÖḍµ3÷I BölÊ¿:ur¼Û+/Đ€ 7=po¾×µ?¶ùj°,Œ̉›Ö›¤&¼j+}&8ñ BjJb_Àñ_Ÿ3f¢Ÿ&ؘ£$ô?ûÜ!Üá< ™Ú°Â­¯êFóíA7@(88ˆ:æé†±̃ÂđưîçM„U ‘!¤V…¹c)‡9³mÆêCâ÷oL÷ÚAXâÓïƯ§Ÿ̃ÊF ë>ăSشɶ&YÉ?­ÀŒĐĐ`aöơea>Œ? ?F¤¢Øđ̀û!JŒHÑä-í¢ºû^đư›Đ§“o,& ómÂ6SáûW!çĂï),î1aFvBqƒĂ¡Ÿ0Ăáb;–?€Đ¯€hu@‡ø1#}üä…S¶đŒ'áoÄËÁ²PSPp0ÛV8Æ5#„±ĂL ̃ا}̉çͱßq¢ ¯)O)â“ßPê S¦¶å,º{°–_®dk±Rˆ Hˆ 1 qB₫˜~mUSÍIEND®B`‚rpyc-3.4.4/docs/_static/rpyc3-logo-tiny.ico000066400000000000000000000102761314203541000205270ustar00rootroot00000000000000 ¨( @ U™f3LÛú9Pßÿ œ{)«x6Ÿ¬z7ˬz8²SÙüPOÛưçR̃ÿÿR̃ÿÿQ̃ÿüQƯư°PÙûCLåÿ ¨u32«z5”­{9û­{9ÿ­{9ÿ­{9ÿ¬y7Ä™w3NÚÿ>QƯÿùR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿQƯ₫ùQÜưÂUÆÿ ¬y5x¬z8î­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­z8₫ªx6uQÛư—Q̃ÿ₫R̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿPƯÿ­¨{;~­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ¬z8đ¤v7QÜưñR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿQ̃₫Ç©{:Å­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ«y7ÆIÔù*oăÿÿ‡èÿÿS̃ÿÿQÜ₫úPÛưÙR̃ÿÿR̃ÿÿR̃ÿÿQ̃ÿÿOÛüq©x5n­{9ÿ­{9ÿ­{9ÿ­{9ÿ«x7º«y7Ă­{9ÿºYÿÄ¢tÿ«y6ë’m$OƯûD ́ÿÿüưÿÿpăÿÿNÛưÁPƯÿáR̃ÿÿR̃ÿÿR̃ÿÿQƯ₫Ưªz7Ô­{9ÿ­{9ÿ­{9ÿ­z9öªw3¬z8úóëâÿễÎÿ¬x9à^ßư£oăÿ₫Q̃ÿü^Ë̃Æ—dÿ¬{9ÿŸˆUÿ¨•ư{­Ÿ]r³®e¥ƒIü­{9ÿ­{9ÿ­{9ÿ§|>ɪ{<¦³…Hÿ¸Tíªs73¥w8M¬z9ß­{;ï«y7¨VÙđeU×óƯ¡†Oÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ¨y5NÙúrQ̃ÿÿz±¤ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ•q«­z7î§~?QQÙưPÚư¼JÎ÷¦y9?¬y7óĐ³ÿæØÅÿ³„Gÿ¨y6¯œ|Ç­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ«{;₫†¥₫RÜüÿTÙ÷ÿ§€Cÿ­{9ÿ­{9ÿ­{9ÿ–’hóMÚügPÛưê«îÿÿ»ñÿÿQƯ₫đMÚûL¬z8à­{9ÿÀ›hÿèÙÈÿ®~>ö—H ¦‚Gÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿsº¶ÿR̃ÿÿ–“iÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿgÄÍøQƯÿû“éÿÿyåÿÿR̃ÿÿPÜ₫÷UÔÿªy6r­{9ÿ­{9ÿ­{9ÿ­{9ÿª{6¥~EÚ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿx³©ÿR̃ÿÿ›_ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ’˜r₫QÜ₫ÇR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿPƯÿ¾IÛÿv; «y7Ñ­{9ÿ­{9ÿ­{9ÿ«y8ù¨{7j­z8₫­{9ÿ­{9ÿ­{9ÿ¤„Kÿt·²ÿgÅÍí¥ƒHđ­{9ÿ©}>ÿjÁÅü€¨—ß­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ¦FÿQÜưÆPƯưăR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿïQÙÿ/«y7a¬z8ô­{9ÿ­{9ÿ­{9ÿ«y7ö¬y7ă­{9ÿ­{9ÿ­{9ÿ›_ÿaÍƯÿTÚùÿx³©₫_ơ¨~@ư„¦ưm¾¿ú—’h₫­{9ÿ­{9ÿ­{9ÿ­{9ÿª}>ÿqº¹ÿR̃ÿưQ̃₫îR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿöRÚú8­{7j¬z9̣­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ«|<ÿhÄ̀ÿRÜüÿ‡¢ˆÿ­{9ÿ­{9ÿ«|<₫dÈÔ₫R̃ÿÿR̃ÿÿz±¥ÿ«|<ÿ­z8₫¦Fùp»»ÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿRƯ₫ÙÑô®y6¬{6r«y8ư­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ©}=èSØøĐWØóÿ‹Zÿ­{9ÿ­{9ÿ«|<öbËÙöR̃ÿÿR̃ÿÿUØơÿ¢†Oÿ«x7§¥GQƯ₫ûR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿRƯ₫ưQØûB¬w5V¬y8â­{9ÿ­{9ÿ­{9ÿ­{9ÿ­z9ø¦s7<n´°A©}@ü­{9ÿ­{9ÿ©~?ó`̀ÜóR̃ÿÿR̃ÿÿR̃ÿÿYÓê’QÛưªR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿQÜ₫öOÜümªw3«x7•¬z8ư­{9ÿ­{9ÿªy7¢ª{/¬z7ư­{9ÿ­{9ÿ­{9₫‘™t₫VØóÿR̃ÿÿR̃ÿÿQÜửLÛú2QƯ₫₫R̃ÿÿR̃ÿÿQ̃₫âPÙú6@ÿÿ§v64¬y7”†R³eÁËlQ̃ÿUQ̃ÿUhĂËg«}<ư­{9ÿ­{9ÿ­{9ÿ­{9ÿ¨Aÿ›zÿ¬›ÿ„¤̣ªy8Ϋ{8Ơ©z7³~¦QÜưQÛưˆD̀ÿPƯưÑQ̃₫ưR̃ÿÿR̃ÿÿYÖïÿ¤„Kÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ¬{8ơ¢t. NÜø$R̃ÿüR̃ÿÿR̃ÿÿR̃ÿÿVØôÿœŒ\ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ¬{8ư«x8@RÛÿ2RßÿüR̃ÿÿR̃ÿÿR̃ÿÿRƯ₫ÿvµ®ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{8ư­y4NLƯÿR̃ÿüR̃ÿÿR̃ÿÿR̃ÿÿPƯÿïQƯÿ]ĐåÆlÀÄơ{¯¤âŒœ{¥‰W¸©~@ˆ­z:€«x8¤­{9ÿ­{9ÿ­{9ÿ­{8ư«{7OQÜ₫úR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿưR̃ÿưRßÿưQ̃ÿ₫TØóÍ«z7̀­{8ư¬{8ư¬{8ư¬{8ư­{9ÿ­{9ÿ­{9ÿ¬{8ư§u6=RƯư¥R̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿ|åÿÿ™ëÿÿU×ồ¬z9ÎÊ©ÿ̉¸•ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ¬z9ü­v7Q̃ÿöR̃ÿÿR̃ÿÿR̃ÿÿR̃ÿÿ˜êÿÿµđÿ₫QÜư¡¬y6–Đ´₫çÛÈÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ­{9ÿ«z7ôQÜühQÜ₫ûR̃ÿÿR̃ÿÿR̃ÿÿRÜÿöSÜưFÜÿ¤m$«{:¸®|;₫­{9ÿ­{9ÿ­{9ÿ­{9ÿ«y9å©{6YDƯÿQÜÿBQ̃ưkSƯÿrÑÿENÛú1D̀îªU¬|7%©y8_ªy6rªy6rªx7f«x87¬}5+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿà₫Àü€?üü€ü‚üÀ?ñ€Oà‡ÁÀ‚€€Ààpđpüđ₫₫₫₫₫₫ÿÿ€ÿÿÿÿÿÿÿÿÿrpyc-3.4.4/docs/_static/rpyc3-logo-tiny.png000066400000000000000000000032251314203541000205350ustar00rootroot00000000000000‰PNG  IHDR1-ˆƒüsRGB@À}Å pHYsgŸ̉RtEXtSoftwareMicrosoft Officeí5qIDATh̃ÍZmOWö'đ Ê/¨_µơCñƒÆ4́l)”¨©ˆÆDK¤MTvA Đ‚€iƒ([)FصÑ4RèË¢1[kƯ¤ k…}ƒÔ®¶K¥Á ]nï¹óẦrçÎƯaÖHr»3;s9ç<ç9gY×ØØ¸Îª¡˜c3J”VŒç3›j|Û Üǵï­ÅkÎ'œ•(&,¡¸€VYLx1Àơ:çƯĂ¥…nq 2²nÿ\¡Û7RÔp6/§ €¸Q(6S!™v’'\P?°~ƒK\̃Ṇ̃5ÚRÿbÛàƒ¹w.29K' Íưí¶‚ÈIaË́”2Q}æ3[Aä®O`;ö Mv”µ÷Ù¶µcKÍÊ–ELẻ¤bL¦‘mß鳄¹î̃:@lôÛê00‘bp}™ S*MăT¶¢à¨3¾è …5̉ĐÀ²;.§twg˜mJS%Êx7ĂÙ†¿·H;÷Ư¶/–"ïĐ !*\ÉJÚ€ü—•±!xú8eæỵV›Vî’ưÏiçí:Ù0r*ª8¢q¶p4ÔeH7*\*ÜÅW+&ñMk‰ä`4ºÍ—&hÎ@t¶÷Â9!HOHS™¯¼b%ù:, Ă²©;{Ơ USÏÙÖ4đ„æÈà5×JcĂÓ§ư'~ÏN\ )jsôí“¥Ñ́¶æK«4xó>0”ử\o ˜ÑqØ ^t₫~I+LQĂ Ú̃|ñéÍñÈñ@ªîf7Eœ~h:ô>'‰ƯĐ)¬Ü'ơ¸18qƒ´«÷ääÊîFÇÎu>̃XË^hû‰ÊF@­Æ@"*! Ÿ6.v2bB3bÜR!xă‡*æ̃<îû-ó8p=ƒO`0LjÄI`+åÊ­áy1Ä̉ödS­/mUJÀ|¡Ü4ëÜƯ§<ˆ0°cjT±5#a2ÛÓÑëµ âhïiƠd 8!„˜«!œfÔf§ÆÖ¦«È;¦’ÿ¿añÑ(ï8o „–̀dûÄû`1—&ç§p}̀ I»,Ư8¼"At äơ )¾fñg¤üôÜoà¸>úád¶ }´̉ƒ¥xœĂ‹¨?“V=h1¤itzAHU­Pä°©ƒ]QƯĐmÍM|#$û:¸”µơ-ơ*NA`tôî;’”<$>’"k C¨—ß°ơ‡¡&¤¦sæï{å ¡µŸ„w€8-îṚ›U8Í–ä{/*36a¨¨#@¢£‘gl-_;!o·6^¦:³³ă‹T¦\Ñöđ× ´N öVưĐ̣…k­¯éÔ0çÆƒw, ?!ôç) GwM₫´)@Đô`eC̉€¢ư¥¨lÄ]̃.0’‚£ÈóƯ=B(kA†”é]¥ŸJö—¬—Hˆc BCSÀx¥/Îkg’äăr«Á[ơØÚ@À¨{Ơç$†@²´§°´Y32ëA¤j|-jm`fœ†.Œß—ze’̀Ñù ]Ïœœ3R‰–À$Ú̀`¼…ăöÔ„4°£́ ¢±?¥‚y†/{@HœmDI¾Ù×\¼cđA”Jg B.n`˜\îŸøûDÔ1gXK³̣LÂ8·€¶­1uâ KhÚçÉÜâƒ|ß™÷k ­ 7¬úú—HÈëÈ”²c­où{lµ r:ÍkLmeñåÊAØmÿfMí•ñ̉ÿ-âU³ÿçxù _ª‡IEND®B`‚rpyc-3.4.4/docs/_static/rpyc3-logo.ppt000066400000000000000000003570001314203541000175760ustar00rootroot00000000000000ĐÏࡱá>₫ÿ ́₫ÿÿÿ₫ÿÿÿêëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnđá#5¨ĂÊDèM´Î;dÿ‰PNG  IHDRưưøWæ«sRGB®Îé pHYsÄÄ•+uIDATx^í] xUƠµ^÷&¹Inæ9„ @B ˆ̀(CA‹¡J[Ççg­Ă³Ơ¾Çû̃«m«ƠÚÚZµ¶ÖúÔ>‡:«P("VƒAÆ„!dÎÍ<ç¾u2̃áœ{ö9÷Ü{ÏÙg/_¸Y{ïµ₫ơŸ}÷°öÚ§Ó ô&CÀj2{É\B@@€xO<0#Ä{3zl&̃̀ˆñ̃Œ^'›‰÷Ä3"@¼7£×Éfâ=qÀŒXhß* nïêíoïêmí́mïêiíêííè́îéÇF»ûú{û„Ö]víQááV¡3 ³Zb¢l±Ñ¶˜¨ˆ¡á{dD@µ5OåÄ{}ƯÖƠ[ƯĐVßÚUëèhjíªiîhhí¬oélnïFÆ÷ơ6 º/>ô¡Û_ÄÄF÷Ô­KR\TRltz¢=9.:-ÁoOOŒÉNOŒ̣×Ó”'̃+suucûéGE]ë¹ú–ú¶³5ä·W.ÜÿŨ»4äU›â¢#²Ó²ÓâsRăñß¼ŒÄü¬äh[¸2 Í!M¼—ñsCk׿ÊkU6¨n>QƠˆ½»[ñè¦Đđ̃ă‹ơ´Z-“2fä¥/.Ê^4=;̃iVË[I¼Á¨³§oÿñóŸ¬AÆŸ«kơÙËJ÷âĂÅ‚Øß{ó̃U#•LÉüâ‚‚Us¦Đ @¼guGwßÎC»W”ªííïwv{²x¤˜¾û{·7oô ´…‡­™7åúU³ &¦ÈwŒœJïÇ~^ÑøÆ₫S;ëZi¡‹HWî=ª6Lï={^T”ưÍơ‹¦e§rÊm_f™÷Ÿ–×ưaûá̉²‘¹)ï¼G“-X3¯à ‹ÓcLÅ~ọ́¾ª±}ËëŸ́?~Ácn₫~Œè¸9€ÿƠËfàk`’ÇŒ¼Ç1ù ï}fÛᾡm#÷é§ y?ŒÀ¢¢œo^…›f ¾éx“×₫¼Ï‘*wïziœ¼Îk%ßs€´„˜G¿qÙ¬ÉÜSß\¼onïùæS;Ëk^œ&̃́Û"Â~xËê%“ù¦¾‰ẩpËéîßưC ==̉`Ñw¿ư¯ûó ’Yxcúû_Üwê<‘^σƒÎ½´û½ONÉ‹VÂ,¼~×ÑÑ¥Ăú*ˆ#ơ~a×₫£Al3¨M™‚÷:~¿ưHPq5~cIzÿ³;ª\Ă4ŒoƠ¨¦àư;8éÎă‚aI[WϽÏlĂ0 nüó;û‡*U£G=0¤±87eBr,F¶¨®Ç OV5<û̃ƒ*ïCm₫×1½ơà ïsÀû¨₫Ñs31ÆvÍ’Âå3s¦e'•Å/eµ;₫uöƯ§‡ë1p|;-$a ³>ïÆü,®‚Øøçưú‡ßªqt²ó÷꯻´èëkfÆEÛ¤:Œ³µ-[^ÿø“S5fà=‚°¸(ç±o}‰§^ŸóqNù‡;ée|‡#™̃°́ÛWÍơAz¬G>Ư±ză²iÈÄÉĂ9ïÿỷ;Đ̉Ûs#ćé7_{ñ9y,¾Åsßÿ}ơÂ+ä³s óÇ÷>åÀ18çư±ª&vo}uÙtF̉ƠùƯ¯]œ?!‰½ ăJ₫óXeMS›qơ÷Đœs̃Ÿ¨jftU¼ƯvÛå³…ÇÄ"¬ß^?Oi)#Ê:ï|tˆ‹ề3ïÑUƠM팮ڸ´Đ÷˜^ªEÓ²r¸Zë²t×ÁÓŒ`ê_Œg̃c*„₫±ô52¾X13Gµ·V̀ÎU]Ö@ËÎ76¶º®ŒHwOUyæ}Ụ̂¥/'aO_8q|^©?çOÍTZĈ̣¸Wqàdµ5÷Ö™g̃÷ç*“qVZB´?Ǵ2Ls8µ́¼‚u=¿!<ósS2B¯nd?V¹ỷÑœ­a]'`D>Tb<ó¾s<)ˆ ¼-îYĐzĂÑá*Pa¿ĐÈÉR&ϼgÁÄ4®¸ø£{˜ VuYćèö«ƒĐ±<ó¾›yœƒ‡Í1¦j¯||BƯ¾ú7Mµª~$̃û  îc†@u:á÷Äû‡U–U×bK±¯ ‡PI–¦yîïÝ“yc™XFoù:ôeç9™íÉ[Ë‹ñ~Ä“˜ù×[ÿ¥Ô­8@zb+W[J0¨<ñ~Üqï|rúµ½'Ù‰#œ¼øae=Ÿ'PÙq0¢$ñ̃Ík?³ôå=LÑW8i¾ïù>8¢₫ăHĂÆ›Ü‘ç:ïƯÁü¿x³tó‹{}/M<]wÛ¯·í8x ˜̉Ï₫eß©Ÿ¾^êåV¦«Ô"#¬kçN^>+gN~ÆØQxË̃ƒ‚çkñ_¡Z¡&Î×2ôjH,¡‡a²Ê¸Ơ!Q¡çÇÿÇûwn¹•ƒ7…x/ÍƯQ§cú» ³jô¹>ÈRÍ­n•T#̃â5£q<ª˜XóBS»K̉pù"ú– )ïơMQ̉.0ïƒ+Ơªoˆ÷úöiˆ÷Á•jƠ7Ä{}û‡´ ÄûÀàJµêâ½¾ưCÚâ}`p¥Zơñ^ß₫aÔv¢#̃+ŒÄ¹@€xÏ…É…ïFâ\ Às<æ™Ú–CgêƠºÉ)b́YÜÈÚ×ßÇÿöÊcå#‡tÅ ÈÆ!̣=₫Gi1CVK*§M¿Û±÷óá£[Ä{5*-Că¥ˆ‘<ïyđ"Ù â½RÄHˆ÷ц÷¸₫Àÿ•8¯r’PÏSåü#ĐÛUO)2S̃?¿ûäûŸ]ù$̣˜¡ËQ„9 º7¡«œ½^ xêBË3;±7I’„€ö8 â öjưå}oÿà/—b0{“$IÇ>Àư,¶Ç_̃¿²¯¼¼¶•­-’"Œ@ơsŒ øÅ{¼äïÙgl)xb4¡Ö:k©ytW±èäïqXßÑ£f·ŒE3’!”#0ua)¥÷Rÿ×Rº¨d’ "ơ[%Núºé ÷/í)£élưIM±!€XeEỤ¾³§ÿÏÈÖN„@hø›l£*yÿ#ç‘ú²µ“!&wl\%ïßù´"ö(k’–u”áÅ´³ZK}›£†÷5΃gù‰,ñ§Î6.{µçữăµB‚'z̀‡@”-B̀h' ê,G†À{_UÓßï?Yk>“Å1Qb¼͆RÄ0B³ă¤ órJËư:ÊR<¨q¿ˆ)? ËC>W3ó₫XU3%ñ‹;F.œ› ¢~_“mj= eÿY….Ô#đê”—‘(bU·.·íÛ? N–x÷÷GLÂ{·‹1¦ +EŒ÷º\Ố†ÎSñ₫pE3‡ư™Ä€€Ơj¹hê1̃Ÿf( ‘¶CÚđ¾ª±Ă=sw(ŒÑ{›Ü~Sf§ÆyÏkqå¾ư°N}"­˜²qÎa“ rtêÆ«µ¢d²ˆÇdƒB¦·Vưư‘Jä„̀‰¡mØbËLÑÁç²Ihu†̃:áǴQÖß›eRbwé±ù9YY)ñ"9vëQƯ1$º|¼t–ƠĐQZ]{9pÊƯ¸ú"±AÎ)EÙ;§dÍGưíï+Ú)¿q<§ƒ&§NLYRœ'¢Hă»:ĐΧ e₫̣:{½û8`úƯµ~1ï= ËiÖæÖ€)Đ)LJÁ8§œ9ô~«^^2yIq®ˆ~ơoB¿îǽ}Đ'²£€÷e5”Ư[¿́ fxá¦KE*ÇÀăºWÔ¨ÆƠåTÀ{êï5ö‡ª»÷ºå™Éq"Ö¾ ưéņ:¬¼ïê¨qè́lxDµß'₫Ệ™k战Đsj_ ¢i₫5%6µeåưù¦:cåü+}É́I›6.Wº̣1–5z1¸K$ñ+ïké²enÔ¾ V¡„"³§d>|Ëj D)Ü´Z?VSi¨Êˆ…I³̣/®bPÛ°~f°Í<"‹‹r¿ûKQ¶p“‘C¿4¸è„1Éî+ï©¿7˜³Ơª»îâé[î\-Jz¼%ü4̃îÉ!µM±œW”3ïiRëó|~}¨¦°ƒ¿ÿ¦•÷Ư¸""\Œo|æ!ĐçÑ*YHz=3!°̣mœ#Û> è¹S³₫tïÆ/-&¡Ÿ* -ûtª½¬Z=jyOăYl *0!%î›V₫ö«&‰¶ªúihxÇ  j«îï;{)¦ư.ª:ÿ₫ Ë_Ư|í‹ EÂo†Ëàđ¦̣Pk­Y)yï-N¶̀g_xđöî>÷jƯWo„ÿ‰®ç¸|8₫«„¤ÈÇ^‰+́ƯOeÜ₫(&)̉·&¢&+±W¤UÊ(?5Á~é¬<äú¬É2¯2&<û08öŒ:Ö[·ÑO$=ë!ÀRƒ7(Nwf‰UâÛ¡I—@áWcYyñ÷ßôhxõc€ML”-'->7-±`ḅ¼©Y“2™¾¹z/ÙÎC½₫HçïUĐ ¼Ÿ EO*æ=̃ï°́¾·%mÇ„«₫>#Ñ^”“’—093!OTÛÂí‘áH£q²]¡Y¥‹ÅM[&² µ́…s?±DhFç}l1?«˜÷8ÂÁqyïưÍ#7è’øZ´…[—M\X8aáỒœ4±x,É1¢0îâ,¶y§Û¨Ơè¼·çì—ós®úñ6¾y?-;yƯ‚)—ÏowéÑH\Ơ:cv±†¿Â…?vó,S&ƒŒsl™0ç-żÇH̀ơ?á–÷sóÓnY=kaa¦j¾ ³v@í ĐsÁÅx‘sßS̀{¼ºđʹªB?óZ•ắă7­Ÿ{Ñ”tĂWµ8ªi₫;à€½5^Ëqñ>,濯˜÷üïc"#îøấ¯,-9TM#£́k€¶àøÚ>VèŇïñư²èŸy¯ûơeưư¼‚Œ‡®_’m–j 'ê> Ư•Đ}Ú …ÙÈ̉ZVÀå;_çë÷ÖhX ¼¿̃–ï¾ÉÁ¼ăÉoY]ü5³X»ùÁNa»§z«‡x¨Ô3QvÙqHÀ׮Ǧ̀0̀¢ọ˜¼ơÜen´PÿáG̃~᾿ƒyn©X÷­V₫`«×Åßăü#7-]Z”%ß}â`·u7´ ]˜}elàEÇ1‚ú¦µ¼—¦́Èk"+à­¼lw.+`œ₫̃k=‡53Lôè<ƒô"‘`|âÎUr¤wBë>8w”ê_†.¼ Ig×ôéN£éaơ¼ˆ•÷I1bÄüôûï¾µº8Ẃ΂1ñ§ÿª·@'f–“½ÄrRs«çÙ1Ṽg$uñ«o,Ÿ”.–Ót D©xª.Œăéá°X³XyŸnL̃GE„=~ûÊü ‰’̃tüNo‚ϸt75‚®ç¸?¬¼O2"ˆ›¯],9¼ÁӢ烧ÀÙkDÓHgDznƳ̣̃ˆưưW—~¡D,±#†K{•Aë °#Qă"€ë9êúû4£ơ÷3r’ïY7GÜS­P±º†"Ëé1ªûûÍkU®«„‡YïûÚâˆ0±o3Ü{ªzztyåª(Uó>'ƠsFư½aùôǜa µ­ú)tI^kÊX?‰ ›çơ£¬ăû˜Èđ̀Dc,eNH¹uM±¸c^†N½^:i0*G]KØ̉Tï±Ø” é%p=pëêâȈ0:Aăz̉”t Q¹€ÔW7¯Ơ€÷*ÇêÊ ÉJ¹b¾Ø5«OVƒ'‹ƒ¢„2•I:ÀàáZ¯‡uœƒóĐßß¼r†x(Qăk€Açô˜˜é~ñ~J†̃ÏYÇDE\>7Oij}uĐ´Ơ„'“bføÅûÉéqÖñ´Zz0¬)ÉOäÛøàJ=&DÀv‘kÖŒsp²˜«ïƠLLˆ âÙ₫fhÙeB“ɘAÄ*’ Cï±’ÙyɺE3%.J<§å}À|wô˜Ø™¢v+ăư,ó~ÁÔ ñä¦-»Íéq²Z@ a±¼Ÿ™£ß₫3œ‰XØsF8K9ÀNü| x?)=qèĂ’I{r‚´;«OwE«¸9€™sÄeă\Ï™‘“••5b Ă+‘2G”UD̉¾'œ "@¼×¡SH¥€#@¼8ÄÔ€ ̃ëĐ)¤RÀ ̃bj@‡Đzẹ̈]èÖï'Ü.,WK>,K>Ù%»EÀÈMŒŒ.`”Ơ³ñ^¼÷äˆ^÷­Âb d« ͨs"1® ̃såN2†â=#P$ÆÄ{®ÜIÆ0"@¼gĸB€xÏ•;ÉFˆ÷Œ@‘Wï¹r'Ăˆñ(ă â=Wî$c ̃3Eb\!@¼çÊd #Ä{F HŒ+(“×xL Ä^ Ct!D¤‚%ú›¡»Z?~:Ư²'°çá%“xÏ#ïăæAÖm%qÅj+Ôưêßçh₫"óñÆ9\}}c~:˜p+Lù‘$éÑÜđxȺ ~á œÏnñ+#Hæl‚ô¯2)3 ¦>îO*m¦Vô*D¼×«gTè•v $_¦ \äD˜t¿đa¾‡xÏ‹Ïq̣y³bcp&´Rq)ă ̃߇ä_«2¡ä„¯›°Ë'̃sÁ{Lsx©JKl™3¹,'„áÄ q·Y£˜ƯipAû4¿gâ³Úë÷\<Ä{.Üh›à—‘̀Å1U7×¼7Íu¢>rç³Đ”½x'÷rsÍ{¼>À$‹tƒƯ,ô–”a/•ëWCº)̀5ï-6đs ?É(̉ßä—¦}¬Åñ.®y²ÏäÂMrFtó¾L®ŒËß;² Ç–°Jê[w̃ÇÎÓ7₫i×ï€ă*ër,r"³Xơ/Ă;ïí³„«ẦđÔÿE¥•Í;#4YÄe,R†á÷xĂuâCxÂ_%[>„Nå]₫`\x­i ¤®c“4€ï¼G$^È~₫'œ{ú[”ꄟB_=S‘„%€;»¼<&à}D $­åÅ_>íè­ƒ3÷ơYç T? Ư,²CaưÿÆ&i )đ‘r5„ÅĂ!~jÙyNƯ²ë3}MÂRÿ:kk)—ƒ}*«°ä¸>gèê€öR¨ú±—G†ر̃1ï&:Z•G ̃2 ²—đÈ̃Wî}{â%º́3CÖ\ŸóĐ´]`ü ±u3Ḅ¾rÜÍ-ú„'Ϭ:†÷HÍÓàø»;0¼̣~ôMB²Ú ‰k‰‚¾:詆îsdwyóE¯÷²@₫£¿•P‘3ïñuåĂĐyÄÅ5¼ó̃­G—¸µnü+JL ăȺƠ dV ¦9Æ÷Ă€`.‰›ÀÆÉ΋'«MZ Yx*…ĂÇL¼G÷á́6÷A°a¼=ràA–¼ÿá5°Ïd¼G_ă`7ïAˆ"çvsÿ=y LÚ,|Crú˜i|ïêBaỴ̈7жÏeV7>ÎơœùI.øŒq‹’} h¿ăU£đăø—êo†̀yíéGƼNï%0N_q/³œĐô6Ô¿ƒ£iä˜ãcJ©Üï@ó±CĂRŬưư˜ĂºË¡ú1è­ú@¢G4 ïăAî&Àím<¦ç½Àö~h|^g»ÇGùÎ=ïĂ“aâ´Ê„1‘x?êë̃¨ZqÄ?Fsđ̃ i_\¤·F›‡ôh)ñ̃ƯƯ8́©Ú ±Ÿk̃[m²̉¯‡ˆdS1æµ̉îîÅ –­Đ² †\s6αe‘ôÉk…ÄÈf}¨¿—öü@8¶Có»Đ;¡î½âÈvæ9aö=i n.¤®œ¿z«™ưÄ{YŸ;ƒ{[÷Bë~èoY •¥µ¬@`yo˜bHX&üØ̉e­5‰ñƯÑø‡ÖC{kG‹éµ¿Ç +̉=~ $,5É̉$»#i^«+á¾Zè8 ‡ ă3á|“Nök1_fxÅTøcŸnÓ•*=Hư½JàÆûû h? Ư§ «\Øÿ´nĂ‚?ăœ›b¬‘½Xà:’©OÄ{ØEpư§û,t— ï₫‚_ mî+Bƒ}aµˆ÷(™ ÑyÂơUHwü×”«́‘’$̃û¡ÏpQ:á‰o|pV€ ư»„åQüÿ$ü̃ ƒ#ÛF¸yd ¢ qtnµ ÷o"­ĂS„:₫‚ÿÅU~c$́ ·ê‰÷ÁD›Ú̉ æ‹¿× ̣¤G( ̃‡}j;TïC…<µJˆ÷¡DŸÚÄûP!Oí†â}(ѧ¶C…ñ>TÈS»¡Dàÿ±]nT‡d×IEND®B`‚èéé(€àà€  ¦  ̀’ÍĂºBitmap Image ºPaint.Picture0ºBitmap Imagẹ/È 0̉ƠL·DArial|¹|¹´?Øü·ä·ç0ü·z[ 0ô·¤€@ÿÿ¥ .©  @£nÿư?" dÿd@ÿÿïÿÿÿÿ  @@``€€ Ôđ̀đ0¨ă\0¨đ,bđ$#5¨ĂÊDèM´Î;dÿéƒ đ0ƒ†A¿ÀÅAÿ ñ9{­ÿ̃R@ñ÷đó€Đ3º“°öÊ;­”ÇÊ;úg₫ư4jdjd¸z[ 06ưÿÿ¬ÿÿÿpûppû@ <ư4dddd@¸ß 0|¹Œ?Øÿ ˆ80º___PPT10‹ pµpµ?Ù Ú %đóŸª Ÿª óóêø¤ ï `đ ÿÿÿ€€€»àă33™™™™̀`đ ÿÿÿ–––ûßSÿ™f̀3™f`đ ÿÿÿ€€€™̀ÿ̀̀ÿ33̀¯gÿ`đ ̃öñ–––ÿÿÿÆÿf̀¨`đ ÿÿÙwwwÿÿ÷3̀̀ÿPPÿ™`đ €€ÿÿÿZXÿÿ™dbmoÇÿÿÿ`đ €ÿÿÿ\ß̉“̀3¾y`ÿÿ™Ó¢`đ ™ÿÿÿ3f̀ÿÿ3f̀°f̀ÿÿç`đ ÿÿÿ3f™ăëñ3™FKf̀ÿđå`đ hk]ÿÿÿwwwÑÑË‚€¨ÿ̀féܹ`đ ff™ÿÿÿ>>\ÿÿÿ`Y{ffÿ™̀ÿÿÿ™`đ R>&ÿÿÿ- ßÀŒ{p_/̀´Œ £>ÿư?" dÿd@ÿÿïÿÿÿÿ,£|ÿư?" dÿdØ@ÿÿïÿÿÿÿ € Ô €" Đ@€ đ`€»€ £nÿư?" dÿd@ÿÿïÿÿÿÿ   @@``€€P£R    @ ` €`£ p£>€£> ÖđÎđđfđ( đ đđ̉ đ “ đ6€d‚؇ƒ¿Àÿ đ­ `}đĂ Ø đTŸ¨ Click to edit Master title style¢!ª !đ đ ƒ đ0€ü„؃¿Àÿ đđ `đĂ Ø đŸ¨RClick to edit Master text styles Second level Third level Fourth level Fifth level¢!    ª Sđ¶ đ ƒ đ0€¨‹Øƒ¿Àÿ đ^ `đĂ Ø đ>Ÿ *¡øđ¸ đ ƒ đ0€l؃¿Àÿ đ^°ĐđĂ  Ø đ@Ÿ *¡úđ¸ đ ƒ đ0€4•؃¿Àÿ đ^ `đĂ Ø đ@Ÿ *¡ØđH đ ƒ đ0ƒ“Ÿ‹”̃½h¿ÿ ?đ ÿÿÿ€€€»àă33™™™™̀ˆ80º___PPT10‹ë.”;ÉP” ºDefault Designî¥Bï€ ¼Ađ´A đ5[pñđ(Ađ( đ đđx² đ £ đ<A ?ƒ¿Àÿ?đ®œîđ Á đÈđ8 đ6ªó  đ[đª6ó đ¸ đ 3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đ‚ đB ó đRB4CWDEÁ¬FÁF¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€đOµc đ˜ đ 3 đZB1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đ‚ đ ó đRB4CWDEÁ¬FÁF¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€đºµî đ đB # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đfđ8 đ íË Ü đDđí Ë Üđ̃đT đÂÅ ) đ# đ ˆđíĐQđ¸ đ 3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÂÉ )đ’ đ # đTB1CZDEÁ FÁB€9{­‚„¿ÀÅAĐÑÿ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đNÅ đ đ # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đơ9y Ñđ‚ đ  ó đRB4CWDEÁ¬FÁF¿ÀÅAĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€đFĐz 'đ đB # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đÍ9MÑđ‚ đB ó đRB4CWDEÁ¬FÁF¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€đÛĐï 'đ đT đÂÅ ) đ# đ xˆđgË Üđ¸ đ 3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÂÉ )đ˜ đ  3 đZB1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đNÅ đ đ! # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đơ9y Ñđœ đ"  đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đFĐz 'đ đ#B # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đÍ9MÑđœ đ$B  đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÛĐï 'đ đT đÂÅ ) đ%# đ đˆđ mÜđ¸ đ& 3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÂÉ )đ˜ đ' 3 đZB1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đNÅ đ đ( # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đơ9y Ñđœ đ)  đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đFĐz 'đ đ*B # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đÍ9MÑđœ đ+B  đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÛĐï 'đ2đL đ íË Ü đE# đ €€ˆđ) tTđB đZ đÂÅ ) đF3 đ€€ˆđíĐQđ¾ đG C đ€€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÂÉ )đ đH C đ`€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đNÅ đ đI 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đơ9y Ñđ¢ đJ # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đFĐz 'đ đKB 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đÍ9MÑđ¢ đLB # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÛĐï 'đB đZ đÂÅ ) đM3 đx€€ˆđgË Üđ¾ đN C đ€€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÂÉ )đ đO C đ`€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đNÅ đ đP 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đơ9y Ñđ¢ đQ # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đFĐz 'đ đRB 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đÍ9MÑđ¢ đSB # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÛĐï 'đB đZ đÂÅ ) đT3 đđ€€ˆđ mÜđ¾ đU C đ€€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÂÉ )đ đV C đ`€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đNÅ đ đW 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đơ9y Ñđ¢ đX # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đFĐz 'đ đYB 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đÍ9MÑđ¢ đZB # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÛĐï 'đH đ ƒ đ0ƒ“Ÿ‹”̃½h¿ÿ ?đ ÿÿÿ€€€»àă33™™™™̀ˆ‘‰º___PPT10‹ië.”;É@À +Dñ='ñ ¹ÿÿÿÿ=ñ @Bñ +î+9ï€ B8đ:80đ-/ đ̉7đ( đ đ đfđ8 đ ü *  đ đÿ' đ̃đN đ6ªó  đ  đˆđÚ ƒđ¸ đ  3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đ‚ đ B ó đRB4CWDEÁ¬FÁF¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€đOµc đ˜ đ  3 đZB1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ  # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đ‚ đ  ó đRB4CWDEÁ¬FÁF¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€đºµî đ đ B # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đ đT đ6ªó  đ # đ xˆđ˜mü * đ¸ đ  3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đœ đ B  đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đOµc đ˜ đ  3 đZB1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ  # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đœ đ   đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đºµî đ đ B # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đ đT đ6ªó  đ # đ đˆđ mp * đ¸ đ  3 đzBBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đœ đ B  đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đOµc đ˜ đ  3 đZB1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ  # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đœ đ   đ^B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đºµî đ đ B # đÄB„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đ,đL đ ü *  đ # đ €€ˆđc Ơ Û wđ< đT đ6ªó  đ # đ €€ˆđÚ ƒđ¾ đ  C đ€€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đ¢ đ B # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đOµc đ đ  C đ`€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ  3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đ¢ đ  # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đºµî đ đ! B 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đB đZ đ6ªó  đ" 3 đx€€ˆđ˜mü * đ¾ đ#  C đ€€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đ¢ đ$ B # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đOµc đ đ%  C đ`€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ&  3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đ¢ đ'  # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đºµî đ đ( B 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đB đZ đ6ªó  đ) 3 đđ€€ˆđ mp * đ¾ đ*  C đ€€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ6®x đ¢ đ+ B # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đOµc đ đ,  C đ`€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đªó đ đ-  3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đií¶đ¢ đ.  # đd€€B4CWDEÁ¬FÁF‚„¿ÀÅÁĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đºµî đ đ/ B 3 đÊ€€B„C˜DEÁ4FÁ€‚„¿ÀĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đAÁ¶đH đ ƒ đ0ƒ“Ÿ‹”̃½h¿ÿ ?đ ÿÿÿ€€€»àă33™™™™̀ˆ‘‰º___PPT10‹ië.˜;É Ùa…+Dñ='ñ ¹ÿÿÿÿ=ñ @Bñ +îî”ï€ ^”đV”@đ{§ñ@     đ¦“đ( đ đđ¨đF đƒ/é 6 đ# đ€€đ<˜₫ Cđ đN đP fé 6 đ! đ€€đP fé 6đèđN đ° fé  đ đ€€đ° fé đÄ đ  S đ†x€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ± fé đ¨ đB 3 đjˆÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ° ră ƒđ đB C đĐˆÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ> Ê‹ đÈđN đP ‡ 6 đ đ€€đP ‡ 6đ¤ đ S đfx€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đR ‡ 6đ đ C đĐx€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ̣ L? đ¨ đ 3 đjx€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đP ƒ 1đ đN đƒh 5 đ" đ€€đƒh 5đèđN đæ  5 đ đ€€đæ  5đÄ đ S đ†đ€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đæ  5đ¨ đB 3 đjÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đê 'đ đB C đĐÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ.L{đÈđN đƒh½ ‰ đ đ€€đƒh½ ‰đ¤ đ S đfđ€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đƒi¸ ‰đ đ C đĐđ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đăÈ0 đ¨ đ 3 đjđ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đh½ ‰đ đN đ?/( i đ  đ€€đ?/( iđèđN đ?1h i đ đ€€đ?1h iđÄ đ S đ†€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ?1h iđ¨ đB 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đL5] hđ đ B C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đH j‰ ·đÈđN đ /( h đ đ€€đ /( hđ¤ đ S đf€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ /( dđ đ  C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ̃ j! ·đ¨ đ  3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ 5% hđZđF đÅ+ ¤  đ@ đ€€đG­¤ đÄ đ' S đ†x€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đó Ô + ư đ¨ đ(B 3 đjˆÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ̣ à % ñ đ đ)B C đĐˆÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ€ 8 Í y đ¤ đ+ S đfx€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ” „ É ¤ đ đ, C đĐx€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ4 º ư đ¨ đ- 3 đjx€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ’ ~ Å Ÿ đÄ đ0 S đ†đ€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ( z ` £ đ¨ đ1B 3 đjÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ, „ _ • đ đ2B C đĐÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đp º ½ û đ¤ đ4 S đfđ€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÅ× ú ÷ đ đ5 C đĐđ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ% 6 r y đ¨ đ6 3 đjđ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ̀Ö ÿ ÷ đÄ đ9 S đ†€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ Ÿª × đ¨ đ:B 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ £Ÿ Ö đ đ;B C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ ØË % đ¤ đ= S đf€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đJ j ̉ đ đ> C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ Øc % đ¨ đ? 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đF £g Ö đ„đL đÅ+ ¤  đA# đ €€ˆđ˨ P e đÄ đB S đ†x€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÄËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đó Ô + ư đ¨ đCB 3 đjˆÿ€€B4CWDEÁ¬FÁF‚„¿ÀÄËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ̣ à % ñ đ đDB S đÖˆÿ€€B„C˜DEÁ4FÁ€‚„¿ÀÄËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ€ 8 Í y đ¤ đE S đfx€€B1CZDEÁ FÁB€9{­‚„¿ÀÄËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ” „ É ¤ đ đF S đÖx€€B„C˜DEÁ4FÁ€‚„¿ÀÄËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ4 º ư đ¨ đG 3 đjx€€B4CWDEÁ¬FÁF‚„¿ÀÄËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ’ ~ Å Ÿ đÄ đH S đ†đ€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÄËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ( z ` £ đ¨ đIB 3 đjÿ€€B4CWDEÁ¬FÁF‚„¿ÀÄËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ, „ _ • đ đJB S đÖÿ€€B„C˜DEÁ4FÁ€‚„¿ÀÄËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đp º ½ û đ¤ đK S đfđ€€B1CZDEÁ FÁB€9{­‚„¿ÀÄËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đÅ× ú ÷ đ đL S đÖđ€€B„C˜DEÁ4FÁ€‚„¿ÀÄËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ% 6 r y đ¨ đM 3 đjđ€€B4CWDEÁ¬FÁF‚„¿ÀÄËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ̀Ö ÿ ÷ đÄ đN S đ†€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÄËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ Ÿª × đ¨ đOB 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÄËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ £Ÿ Ö đ đPB S đÖ€€B„C˜DEÁ4FÁ€‚„¿ÀÄËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ ØË % đ¤ đQ S đf€€B1CZDEÁ FÁB€9{­‚„¿ÀÄËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đJ j ̉ đ đR S đÖ€€B„C˜DEÁ4FÁ€‚„¿ÀÄËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ Øc % đ¨ đS 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÄËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đF £g Ö đäđL đƒ/é 6 đp# đ €€ˆđ% # U( đ( đT đP fé 6 đq# đ €€ˆđP fé 6đîđT đ° fé  đr# đ €€ˆđ° fé đÄ đs S đ†x€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ± fé đ¨ đtB 3 đjˆÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ° ră ƒđ đuB C đĐˆÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ> Ê‹ đÎđT đP ‡ 6 đv# đ €€ˆđP ‡ 6đ¤ đw S đfx€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đR ‡ 6đ đx C đĐx€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ̣ L? đ¨ đy 3 đjx€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đP ƒ 1đ( đT đƒh 5 đz# đ €€ˆđƒh 5đîđT đæ  5 đ{# đ €€ˆđæ  5đÄ đ| S đ†đ€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đæ  5đ¨ đ}B 3 đjÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đê 'đ đ~B C đĐÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ.L{đÎđT đƒh½ ‰ đ# đ €€ˆđƒh½ ‰đ¤ đ€ S đfđ€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đƒi¸ ‰đ đ C đĐđ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đăÈ0 đ¨ đ‚ 3 đjđ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đh½ ‰đ( đT đ?/( i đƒ# đ €€ˆđ?/( iđîđT đ?1h i đ„# đ €€ˆđ?1h iđÄ đ… S đ†€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ?1h iđ¨ đ†B 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đL5] hđ đ‡B C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đH j‰ ·đÎđT đ /( h đˆ# đ €€ˆđ /( hđ¤ đ‰ S đf€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ /( dđ đ C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ̃ j! ·đ¨ đ‹ 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ 5% hđäđL đƒ/é 6 đŒ# đ €€ˆđS ÛôT đ( đT đP fé 6 đ# đ €€ˆđP fé 6đîđT đ° fé  đ# đ €€ˆđ° fé đÄ đ S đ†x€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ± fé đ¨ đB 3 đjˆÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ° ră ƒđ đ‘B C đĐˆÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ> Ê‹ đÎđT đP ‡ 6 đ’# đ €€ˆđP ‡ 6đ¤ đ“ S đfx€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đR ‡ 6đ đ” C đĐx€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ̣ L? đ¨ đ• 3 đjx€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đP ƒ 1đ( đT đƒh 5 đ–# đ €€ˆđƒh 5đîđT đæ  5 đ—# đ €€ˆđæ  5đÄ đ˜ S đ†đ€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đæ  5đ¨ đ™B 3 đjÿ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đê 'đ đB C đĐÿ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ.L{đÎđT đƒh½ ‰ đ›# đ €€ˆđƒh½ ‰đ¤ đœ S đfđ€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đƒi¸ ‰đ đ C đĐđ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đăÈ0 đ¨ đ 3 đjđ€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đh½ ‰đ( đT đ?/( i đŸ# đ €€ˆđ?/( iđîđT đ?1h i đ # đ €€ˆđ?1h iđÄ đ¡ S đ†€€BBC`DEÁ¸FÁJ€ÿ̃R‚„¿ÀÅÁËĐÑÿˆ..đÿ$-Ú-Û'‰NL°6 €RV—¬ÜÏ :¹¥̉»ëÜ,ưmÓ?-`¸$́ñ ¾0M8 @ËB­mø-ųW‹éc΋€Hv—SÇO÷K‰‰­eÑA´­y†E==$-"$@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ?1h iđ¨ đ¢B 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đL5] hđ đ£B C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đH j‰ ·đÎđT đ /( h đ¤# đ €€ˆđ /( hđ¤ đ¥ S đf€€B1CZDEÁ FÁB€9{­‚„¿ÀÅÁËĐÑÿˆ((đÿË1êF ¢1Û-ơ™1Jå§™¯.È¿áqÿM<)y‚S8$YiZ5¨$4¾b´Ï›<‚[§óƒ̀Z–N`B…xcHA]Ë1 @­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ /( dđ đ¦ C đĐ€€B„C˜DEÁ4FÁ€‚„¿ÀËĐÑÿˆ đÿn‰€z„*yj=+Z n‚\˜n‰ @­ ­ ­ ­ ­`€"ñ¿`đ̃ j! ·đ¨ đ§ 3 đj€€B4CWDEÁ¬FÁF‚„¿ÀÅÁËĐÑÿˆ++đÿ& 4<ê– đ¨§C·̃Dz܉ø`V-MaD•sR11S¾W‡,P ˜ /ÆưlµØm6~ênºZ‹R\J”ysMR!‚€ÅK¤bÚ1 $@­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­`€"ñ¿`đ 5% hđH đ ƒ đ0ƒ“Ÿ‹”̃½h¿ÿ ?đ ÿÿÿ€€€»àă33™™™™̀ˆ80º___PPT10‹ë.¢;ÉpOÏxœíƯ|eđEÏ+^¿óî¼̃{óZˆ€T)¢ D0$4ƒ€ ¢RH - `z“’„ô¾i^H/›d÷»g²é;›̀öÙù̃Ç÷ùA0»;ÿỪîÎÎÄÆ|7gđOrU=2Xu¿JǾ¦úr—?ûR׿đ•êü̉Ơ1ÆTm¿ÿ úUôk(£È>Uóñß"Ơ¯TO¨Üñë[ª¥=)ôBAû¿u¾~n„\Öÿï'»‘ù{ͦm#ú ¦̃é§ÿ³~ªX¾›jj¼êUƠ“–-ä{ªûú .hó&å{„¿?VƠ¾üñªyªYª©QSÍÀ-đ¦Ê_KÍO°|áªÜoẬD_«¸Ï`ù£°ôY¸-„Ëá&ñ2üËïº>¥|pYhû½p[h»|¿®Kµ]úuü½o ßD¿…~[Ơú ú®JX*Ơ÷чШ*ƠЇÑ«„ÛH¥ú)ú3ôç­—Y¥ú%ú+ô×èoĐߢ¿C₫ư#ú'ôÏè_Đ¿¢Cÿ₫ư'úú/ôßèĐÿ¢ÿC]Đ₫¨+ú(:ˆBS m*Ơt(: @GŸPéÑDŸBG¡£Ñ1èÓ*½›qèxtú :}}„NFŸG§ SÑĐiètôEô%ôeôtú*:} ÖúëèèlôMT¸ẀEç¡n¨;:]€.DßB=ĐEèbÔ]‚¾ ÷f/tº]®DW¡ï´^vûƯÿ_ùó\é₫/¯ûû÷µ?ĐưŸ¯û»?só ê>•©₫ùuü^¿ü ¸³p-iưOz6cùB¦›°Œ¾bỊ̂­K–ß¾ữ̃Ú¾¦đáçÁ—Ú,_ß'âdܰq£ÚÿÿW»Ø¾~¿oÛ(¡Âψöï—²́~]Ô³„ïW=dêîöư:vÿƒúeöÜvËN₫ÖbÙ*ñßÖ>²ĐÜ n˘pAVăb¯A×¢ï¢̃è:ô=t=ºƯˆ¾nB7£ ¢¡[ĐÑOĐOÑ­è6t;ºơAw¢»ĐƯègèt/ºƯú¢Đƒè!ô0zơCưÑô(z =~¢Ah0‚†¢'Đ“è)4 =AÏ¢çĐóèô"z©m=_A¯¢_ ×Đëè ô&F ·ĐH4 Fo£1h,'ØGĐD4 MFSĐT4 MG3P5‰f¡Ùh*¼đr½‹æ¡ùhZˆ¡Åh Z–¡åè=´­D«Đj´­EëĐz´mD5hÚŒ¶ ZT‡¶¿`#l¼̃‡̃~ }ư2úô«è×Đѯ£ß@¿‰~ ư6úô»è÷Đ?@ˆ₫}ư1úô§èÏĐŸ£¿@‰₫ ư5úô·èïĐߣ@ÿˆ₫ ư3úô¯èßĐ¿£ÿ@ÿ‰>‚₫ ư7úô¿èÿP´?ê>@¢ƒĐÇĐÁèt(: @GŸ@ŸDG¢O¡Âƒ̃ht ú4:‡G' Ï ÑgÑçĐIèdôyt :}†NG_D_B_F_Ag ¯¢3Ñ×ĐYèëèèlôMt:‡º¡îè|tº} ơ@¡‹QOt ú6ºơB—¡ËÑèJtU?ưs°Ơưèç=ÏyÏC‡×ölTxæô§¶G mëÄĂ­₫p…á6£/9…â€{ !÷Cî)<†ÜSx ¹§đrOá1äÂcȽmSÛ²Xx .c; Øú;lU[’ÅÜƠlf{!…MHbcØä$a^Na¯¦²×Ó˜[[’É̃¿Ă>+dA¥́‹J–TÇ›X3½Gg¥{k¦AËRêXh9û(-P³©)́éÄÖIèœ1Ưg4&¾çŒê>OŵÍÓñlNÛp‡”°¨jṼäè+́´!÷¿9,´Œ}Çæf´>x'vëº×ÏÈ.3)IøÉà[Èâj˜†~H¹7'EḾ\Û”Ç^Jcă’Ø¸Äα³{ư<+̀Óql‘(bñµ¬‰î½†ÜK %×±…́ơ 6>©mÆ%ÉÈ}Ç<+láç@p)+£m!±û>îØdß](< íà.÷ƒ/f°ă%¬Xăè›RN!÷FSÛÂ>/c³Z·ÚơăŒîÛ&F˜%jv£’iiˆÜ‹&_Ă| Ù”T6!¹uá₫ñö™–ÄüYU³£oe‡†Üw‹ºyßa“Ù3Éíèç^?£ăØ'yü¾JîÛR¨^ŸÑ‹†÷#Zúw°zmß·ÂBî…7AJÙ””Nñü¸×Ϥvá£Wƒ}Ă»{lظ©…‡ù‰Éüºq[/5G/ẓë^ÇXP9›œÚ†Ü¿Í&ij›•^1v §îµ­[ó)­CîÛƯoưo!SüK<º¯la‹³Ù³)ä^Ľ~̃ËQøËüܹ¿×̀æg èÉ}/î1«²”¼Û3_î«Z˜[;zrß»ûa·™w¶b7x8rG¯U¹èÉ}Ÿî1»ó½ÚlÜï(́†÷“Ù²,¶éûô.[™Åf¦˜́¿‰¨rô³AxqYÓ½‚ƯcÖæ°„Z‘ç¦ùlo'Ơ=fb<«PÜÎ<\¸¯ma¯¦óâ₫Åd–TÛÇ R̃ļ2¥ºÇlȱËz²c¸pï[̀3@¯H÷néR›ñ£`kT÷Ă£YzW’}£|÷eMlj*î§'³JS6H°´&[’ûaÑl¹ÚfkÈQ¾ûĂ%zÅ»+|.̀Ô4jÙ”DIîñ_¨ Ol)Ü}“ÍHçÂưÚl3o¢Óå’Ücv*è5M…»®mC¯x÷É}=—5–{&^’û—’¬ºn…»ßYÄ…ûɉ½±º!G’û¡ÑÂˠʈÂƯ»gqá~U¶E·Rh©T÷§Ê¬³^%»×èØ¤T.Üo¹kÑ u£Rªû­–-H>Q²û̀öî},{Æy»Zªû%VZ7’ƯGÔđâ~}®E7Ô…{RƯ¿l¥uăè(Ùư•*^ÜÏ·́aø`¡T÷S¬´n%»?SÁ‹{ü¡IïÔöȼ4©îÇÆZoơ84ä^ e!¥f̃J…ö¸´÷­à~ ¹—¸rÿB’°ÓñΑú~-¹wpåcÆ«:QƠ­ŸA!÷J oî1gÊM¸}̣Ùøx©ûc’{§ ‡îGÆ2ÿbI7N|-›˜ uÿ{rïLáĐ½~–f 'Q4–ªf¶#_¸‡Hÿ¼¹w¦pë^O5 ,>sX¬>X¨®gï±u9l\¼ Ÿ+'÷ÎƯ[ë8"ä̃ùBîɽ±{rOî•rOî…Ü“{r¯¬{ro,äÜ“{e…Ü“{c!÷äÜ++äÜ ¹'÷ä^Y!÷ä̃XÈ=¹'÷Ê ¹'÷ÆBîeá>¨”eÔt˧®ç¤™5¸0ʹ—…û[Ơ¾±8 ¹'÷<†Ü“{CîÉ=!÷äÇ{rÏcæ^§ƠVgç']M»r0₫Ô§QÇß‹đ[uăÀ̉̃纯È\ó]z7á²á"œÈưâL¶.×èxçt›wûµ†“-œ²Óèd ³ºû¼#aVuLfÛ¬46jaṾ̀ÖÁ7nÈfŸÜaụ̂Ù¹r–Rkæ1¥Ç̃îë* ư‹= W =êé̉1úYÜmü Æo‘ÈYä’|qŸá²œÈ½³¼oƠc†tLTÛ î>uL¤0ƒ f`ÇÜꜷØĐ(67…ù°"Ûœ<ÔNîñè~'æôåío[̉ÿXîäÜ‹ºï˜A·˜{*‹¨´2HÛ»×ér¢Nœ~ÿYpïrOî%ºÇ<‰₫3­÷n±mƯWª/m›ul‰‹0äÜ[à3ø;PÀ´–œ²´=6t¯¾æè5  =¹'÷»×g:«·øY¯MÜ·45F̣:¾ÄåxzrOî­ä̃5‚ÍHdƠœ×ˆÙÂ}SCÍ•oèÑ“{ro ÷˜™I¬¦Å|¥Vvô¶¼ØÜ“{¹Ç¸§¿­oM÷Ú–¦«;çtEOîɽíÜc¶Ư1Óª5ƯGú¿Ó=¹'÷6u/ĂÍzißjî³Â¢'÷ä̃¦î1ăb̀ÙĐ·ûÊÂŒ eƒÈ=¹·¿{̀†l“ÅZÁ½N«½ôéËŸ‹¡'÷ä̃îñ̉ë́î>ưêÁÏßv±ĐưQrOîÍuß?‚ÍM¶¯ûÆÚ{!«†‘{rïX÷ưĂYd•ƯÇ…lĐ“{rïh÷¯'ÙË}]EaĐ²äÜËÁ=&ẒC¾Eî;́É=¹—{¯ Û»×ÔU…¬Bîɽ|܈NRm[÷m/ă{r/÷˜wḿ₫Ü“É=¹—›û§¢Y“„Ờt_× =¹'÷̣p9Uj3÷q!›È=¹—§ûy)¶q¯ÓiĂÖ!÷ä^î]ĂYi_ÏnÍq_ß=¹'÷²qïÎØÀ}̣Y¹¹O<·Ûđr^ª$÷œºŸo÷W¶Í”›û˜^ΛƠäS÷˜¬^¶c²û¦† /WG¹¥÷‘Ç̃3¼¨Éơä_÷½Ñd÷E©× Ñ;Úư5ߥ†µª…Üóë~rœUƯ§œó‘¡û°Í/ˆ^ÚW2È=§î1w¬ç₫úgódè>àíA:­ÈA´¼ï’{~ƯûZɽN§=ñÎpºÇÔ”́™\Nîùuïfü ,ÓÜWe½<ƯgE0¼ÀYä_÷ƒn±z#‡Z0Í}Nd°lƯß8¼Rô2ÏÏ$÷œºÇ\½g ÷·½+[÷«Ga;̀đ2^Fîùu¿1ÛîÏo,[÷˜²œĂË|¯™MM%÷œºID„‰î[ƒ–ºÊÙư­£ëD/ùÎBrÏ©ûL#v°|ÜWä¥èыӗûcˇ5kD̃.nbϧ’{Ưck,s'ú¤̀ƯcÔ7E/ürÏ©û€"ËÜ'úX₫îCÖMĐiE^»jĐ²7ÔäG÷k2-scï‹Ü/±‡{LfDˆèå­í¹•Oîypÿ¼Ø:&¸?½~œS¸ñ§à¢WáP ¹çÎ=¾¥Åàơm©î›k»¢—³û#.q'·^ \ÿwrÉ=_î1…ƒRƯ÷x1Gæîư=TªE¯H½–½Cîùr»Ú\÷I—íï^âG® ƯcNô¶¥IôºTµ°·²È=Gî ,"Ơ}ÖÍ£Îå₫°‡KTà&cW§¶…yå{^ÜïÉ3×}̉é­Nç“{̃Ø5jÔ²̣É=î×e™ë>:`µ3º÷{pYnb/×ël›’Bîî̃Ư`G|©î¯íëŒî1G— ¯(«OFx‘‡Ü+Øư,ƒSBHunÓsNê´æéªấ̃¯àơ*æIî•é~ªÁát¤º?±z„óºÇ_ñDï<ˆ®Uÿ²œ¶Ç~r¯÷“bÍuºj¨S»Ç,’Ÿ|MÊ•-Ô0¿Ræ™-ÜȽÜ»m®ûèѽ0‹\ăNûˆyA4uZv»†—±mlm.óÊfoev›…}Íư¨;g~÷qÇdô·“̃mæ̀Ü´n3§u^OeÓñƒ+¡ơÀ·ûQf¹×¶4)Ăư¡Ö9¿ưÍú* ÇHWP*›Yl -eße3S¸s?äVÏD’û¦†%¹Çx K½ê'ư_a)mb§Ë™W¦° ă{LHrßP]ª0÷‡̃&́ƒ‹3c¬ÏÊyRÖiji‰ w?$²ç—ä¾¾¢P‘îơsvë́´ë›r4ëXX›–¤X÷#£{^eiî+‹́₫`ëœúàÅÔ/4u¦œ́]YiѱÀ6.NîÍ|=GyÛ÷†îơsØsĐ•½é×U—ôziå[>̃ÙJsoæûV2=§'} Üẁ….ÇW½¼Ç3æÄÖ¬¨S¥9 ệM}uçÔY­7z± H˵J66N9îg¼c)ơơû /W̃Ü÷_ĂYà²ß`öuùm³WlöèǽÛ|&6»Ưzή3Ïe§Øø̀sÙ»xø¡cC?óÅ‘ơIWUfK\ă6;U!îg'›ë^drïtî;gnÛđ}ơÈú¢¬¾NÅ„ ¯̀R‚{4sƯ‡­Mî•á~Gûø­™”r#ØØ§̉ôÑêØæ;Nï̃üưïå¼?&¹7Ͻ~­Ÿ~RôºÙçÜîw›ưy+9ïOî-q¯ŸàfWe[û¸OlÊub÷¡%溗óç­È½åî·ÏuÙµ`pêÍPc°Áă¥vV÷· ̃•‘ê>ù́ÎƯ‹ĐW–ûís„¹t`­¶Y|‹¿QË^NrJ÷¹'x“ê>;"ÜóàsâwÑĂJ#9 ́©çsß`°ÿ¡T÷úÓÖöî^”>¹w:÷˜ÀM¯5kÄÏ‚y¦ÜÉÜ?n°ó½ î« Ơä̃d÷ œƠ=&l‡‡±ư´=3œÉưL±—Juߢ©ï8Ù ¹çÁ=æªÿû¢̣Ù“1Nă₫] ~fĂr/[÷¢ô-t¿mKFÔYQ û œÆ½èÙ›Mps¿¹çÍưnáƠå"pêµl|œs¸ÛµÜ÷Ég¶“{̃ÜcÂ|‹z8Tèî*k‚û¼¸³äC÷˜ÜÄë†êZ„}•eî~”Á'­Lv_]œEîùtïï=Mt-wäî~Á‘1Mv¯Ó¶/@î9tÉI9äVzÜƯ”k±{ä̉'/‘{>Ư}8[”īɲv¶̀îă‚7’{>Ưo›Û¿ª,ßÄ₫Y»/ÖXĂưÛ§È=§îç¸D…í1$‘X+_÷OFÁL÷µewÉ=·î®É„VÇFÇÊÔư² +¹G¼G‘û^Ü‹î¦ ÷Ûç¹6Öœ±%j™º}§ÖL÷á<É=Ÿî1ÙqW IøäÉÔ}J­ơܧ_ñå½”\ñç^t?¬Lîß9M¹ùî˲cÉ=·îÏï[eH"¹Vîß48fEîµÍĐ•CÈ=ŸîoœaH¢H#G÷†ÇP°È=kß1“Üsè₫đêI†j[äè>ƠøÆ½™î³n#÷|ºß¿t´¡lEËÍưèÛ¬·ă™ç¾®¢0h©+¹çĐưná¢$º-/÷̃H³‚{䋳É=¹ïÈèy¹¿|Ï6îs£Beî^”>¹çÁưÀá)‡MÜ77Ö…¬Jîɽ ƯưØjî‘„“[È=¹—¡û å¶tßP]´l ¹'÷²rÿxÓH8;«ùÀơäÜËʽ±XYÓ}cMyȪaäÜËÄư£á́®øÑ ­ê »©{ă/e’{e»÷”đŒÖ:îµÍóN%÷ä^î“{Ư7Áî‘Ê‚tá .¹'÷u¿0Ơ´Vp¤]ÚGîɽƯˆ`jñCöÛ̉=ÓéÂ}=û>ơ¹'÷¶q¿1Û4°VrÏXKSĂÅ-/’{ro÷cbXu³i\­æ©¯*9ó₫³ä^>îwràr£̉d«ÖtÔWŸÙ8‘Ü“{»¹ßœcT+»GªJÏo™NîɽÜÏIaͽÀÄH¬ïiÖÔߨ¿ˆÜ“{›ºŸÏ*LܬïˆMÜ3ámêŽ^È=¹·…ûIq¬Tü4»’b+÷úÜ»›tvÓdrOî­ë~F¢Eè™­Ư#Ú–¦ÔËûƒV !÷ä̃*îWª…3§[›»×§¡º4&øưÀeƒûpo@ŸÜ“û÷£¢Ù9#dz75vr¯Ocí½¤3>'½Ç{ro’û¡‘Âơf?‹5Œ]Ư냧¼Åé‘kB×"÷2ro@_e;óX‰‘Ó7˜¸ïŒNW‘Ÿvå`øáå§7>wt‰«RƯ‹̉'÷ÆÜb¯' ‡Y¾]Í,̃’CƯw×–ç•dFß;Ÿœ˜zÉ7å̉₫“|Qê$ơ2ú˜D)s~‚ä‰76ç„9î=Ù©Ư-Ngk8¥M@1 .aËÙ­*VĐh+ë]##÷<çœÏB§vït!÷²¹·sȽ,Bîír/‹{;‡ÜË"ä̃Î!÷²¹·s”́¾²(+ăf y“¹Ñ÷¤ơ9×Nj— \?•ÜÛ3JvŸ~ư˜Ñ·®è}+r¯Ô{ro,äÜ“{e…Ü“{c!÷pïFîM ¹'÷ä^Y!÷ä̃XÈ=¹'÷Ê ¹'÷ÆBîÉ=¹WVÈ=¹7rOîɽ²Bîɽ±û¾Ưû{\;₫°çcÊp/JŸÜ+'–¸?¼ä±›₫ẹ̈’¯7k:O›T_]¦¾z̃g>¹wö{ô×®¨½WØË¿\œsbÓtrï¼!÷ƯÄZäzƠOÊ?̃¬i¸²Ï‹Ü;iÈ}7÷i×°îâîE–ºŸOîr߉₫Æ‘Ơ¦.¢©¡6ĐûYrït!÷mèư—m¨¹gÆRră.’{§ ¹os²Å̀Åèt!_ ÷Îrßæ¾47Ñ́ņíäÄưÏ'­¸‚%»ÏdÂ₫˜ưsnŸ5éß¿vhµÙûc:—ûŸÎ·Ñ:rHî¾¢@Ư§û®ôx’H_§m‰8¾Ñ’ưïË}:ÖÖ+ËQ¸{$hí8éîơúÑÁơ¾­_Y”}vÛ\ß…}̃ʉ܇~ân·ơeŸ(ß}LèǦ¹×?Í]ñdl˜O7[5ù)7®^sÀăQưGlyp¿Ăm@Y¾ÚQ«ÏFQ¾ûỤ́‚#‹\Mußq<¿·‡†¬Ÿ|êĂkÇZ<¨Ç!xp²ƯÑëĐúQ¾{äÚef»ïíø9¸X7½¥Iăèhưpáù₫K‘{SƯæ1¢ª4ÏÑkÏ&áÂ=’ta¹7ɽûÀܤ^o¶ /î™Nwi×|r/Ñưy®é·Â½ÎlnÜ3¦©¯>µy¹ïÓ=ЧÜqôê²m8r4ÖÜ;ù₫Trß‹ûóeÅ^rô²yørÏZxse¹uïë5¦(+̃Ñ«Èáν.颯ߒÇÈ}W÷'>u«7ëBÎ.Ư·¦¦́îÅóÉ=fǰ¤«Ç,ùęӅ_÷ú«£Ïo›Ă¯ûyưÏï]^[Qâèơ`ïđî^Ÿ²ÜÄ›~kư–áÊ=6lJ-øt¥S‡ÜwOyƠáÁw-8â9HÁîwÏtÑwuY^†£ooG†Ü‹¤©±.'ö|xÀºà÷&)ÆưN7×ßH¾ØXWåèØñ!÷}¤¾ª4ûöÙ¨à-ç¶Íñóá\îw¹»xO¹|p:ú,qïroZjỆî&^Mºxđ†¿÷™Oßđ_>R>î÷-¸ñå {—E†îH ?QœĐơä\”®!÷–FS_]v'w†ÔkGcNù\;´ú́v· ơSü–ôơh]÷Ÿ¹»Z6êó÷^8½}Á•ƒk"C·'^ñϹâ 5¾%œ)ä̃¶Á#n]eIEº(3öNâỚ˜ó™Qai×1I—ÄŸß/̀¹ÎI₫âhêơ@LÚÍ́˜ ù©%9‰EÙøGđ¬ĂÑ×F9!÷Cî)<†ÜSx ¹§đrOá1äÂcÈ=…Ç{ !÷£r®ü%Zr`sñJQ}ơ? }<¶ ₫ÿà…Ỵ̈ùOh«‘+'³Ù0 T `hxˆ ˜¤ Ä Đ ÜèđçSlide 1sebulbasebulba6buMicrosoft PowerPointP@đé£| @AÁ~•;É@àT ¤;ÉG¨Sÿÿÿÿ‰g  ̀)¡'  ÑÁ ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êđ """)))UUUMMMBBB999ÿ|€ÿPPÖ“̀́ÿïÖÆççÖ­©3f™̀333f3™3̀3ÿ3f3fff™f̀fÿf™3™f™™™̀™ÿ™̀3̀f̀™̀̀̀ÿ̀fÿ™ÿ̀ÿ333f3™3̀3ÿ333333f33™33̀33ÿ33f33f3ff3™f3̀f3ÿf3™33™3f™3™™3̀™3ÿ™3̀33̀3f̀3™̀3̀̀3ÿ̀33ÿ3fÿ3™ÿ3̀ÿ3ÿÿ3f3fff™f̀fÿf3f33ff3f™3f̀3fÿ3fff3fffff™ff̀ff™f3™ff™f™™f̀™fÿ™f̀f3̀f™̀f̀̀fÿ̀fÿf3ÿf™ÿf̀ÿfÿ̀̀ÿ™™™3™™™̀™™33™f™̀3™ÿ™f™3f™f3™™f™̀f™ÿ3™3™™f™™™™™̀™™ÿ™™̀™3̀™f̀f™̀™̀̀™ÿ̀™ÿ™3ÿ™f̀™™ÿ™̀ÿ™ÿÿ™̀3™f̀™̀̀̀3™33̀f3̀™3̀̀3̀ÿ3̀f̀3f̀ff™™f̀̀f̀ÿf™™̀3™̀f™̀™™̀̀™̀ÿ™̀̀̀3̀̀f̀̀™̀̀̀̀̀ÿ̀̀ÿ̀3ÿ̀fÿ™™ÿ̀̀ÿ̀ÿÿ̀3̀fÿ™ÿ3̀33ÿf3ÿ™3ÿ̀3ÿÿ3ÿfÿ3fÿff̀™fÿ̀fÿÿf̀™ÿ3™ÿf™ÿ™™ÿ̀™ÿÿ™ÿ̀ÿ3̀ÿf̀ÿ™̀ÿ̀̀ÿÿ̀ÿ3ÿÿfÿ̀™ÿÿ̀ÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËË˲²²×××ƯƯƯăăăêêêñññøøøÿûđ  ¤€€€ÿÿÿÿÿÿÿÿÿÿ°4¡'A ̀x ĐÀ( xK€€€€€€€€€ÀÀÀÀÜÀđʦ """)))UUUMMMBBB999€|ÿPPÿ“Öÿ́̀ÆÖïÖçç©­3f™̀3333f3™3̀3ÿff3fff™f̀fÿ™™3™f™™™̀™ÿ̀̀3̀f̀™̀̀̀ÿÿfÿ™ÿ̀3333f3™3̀3ÿ3333333f33™33̀33ÿ3f3f33ff3f™3f̀3fÿ3™3™33™f3™™3™̀3™ÿ3̀3̀33̀f3̀™3̀̀3̀ÿ3ÿ33ÿf3ÿ™3ÿ̀3ÿÿff3fff™f̀fÿf3f33f3ff3™f3̀f3ÿffff3fffff™ff̀f™f™3f™ff™™f™̀f™ÿf̀f̀3f̀™f̀̀f̀ÿfÿfÿ3fÿ™fÿ̀̀ÿÿ̀™™™3™™™™̀™™33™f™3̀™ÿ™f™f3™3f™f™™f̀™3ÿ™™3™™f™™™™™̀™™ÿ™̀™̀3f̀f™̀™™̀̀™̀ÿ™ÿ™ÿ3™̀f™ÿ™™ÿ̀™ÿÿ̀™3̀f̀™̀̀™3̀33̀3f̀3™̀3̀̀3ÿ̀f̀f3™ff̀f™̀f̀™fÿ̀™̀™3̀™f̀™™̀™̀̀™ÿ̀̀̀̀3̀̀f̀̀™̀̀̀̀̀ÿ̀ÿ̀ÿ3™ÿf̀ÿ™̀ÿ̀̀ÿÿ̀3ÿfÿ™̀3ÿ33ÿ3fÿ3™ÿ3̀ÿ3ÿÿfÿf3̀ffÿf™ÿf̀̀fÿÿ™ÿ™3ÿ™fÿ™™ÿ™̀ÿ™ÿÿ̀ÿ̀3ÿ̀fÿ̀™ÿ̀̀ÿ̀ÿÿÿ3̀ÿfÿÿ™ÿÿ̀ffÿfÿffÿÿÿffÿfÿÿÿf!¥___www†††–––ËË˲²²×××ƯƯƯăăăêêêñññøøøđûÿ¤  €€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYÿÿÿÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå^zåzÿ‹³­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYzYåYz^­®‹­®‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzz^Y³­‹³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^zz­‹Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹­‹z­‘­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘­‹­­Ï‹³‹³åzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­‘­­­YYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹‹Y­­zåzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­‘^zz^­­Y^^z^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­‘­‹åz‹­Yzzz^zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­‹³ÿÿÿ^åzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYY­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYåz­®­‹‹³‹­®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYåYz®­‹³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzz^‹­‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^Yzåz‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzz^ÿ‹­ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYz^ÿ­³‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­YzYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹­­‹®z^zåYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‘‹³‹­zåYåzåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹³‹³‹³zzYzYzzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹®­­åY^åz^^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹³­­­‹ÏzåzzYzzåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‹‹‘­‹YYYå^z^Yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹­³‹‹­³åzåzzzYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‹®‹³‹Ï‹zåYY^åzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­³Ï‹­YzåzYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹­‹­³­‘‹z^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYzåz^­­³‹­­‹­‹‹‹‘­®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYå^zåYz^ϋϋ‹³‹®³‹­‹­‹³­­³‹³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzY^zYz^‹³‹³‹­­­‹­‘­­‹­®‹­‹³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘‹­³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zYåzå^z­³‹­‹‘‹‘‹‹­­­‘‹­³‹®­‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zåzYzÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹³­³‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zåzYzzYå‹‹‘­³‹³­­Ï³‹‹‹³­³‹‹­³­‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYzYzYY^zåzÿÿÿÿÿÿÿÿÿÿ‹­Ï³‹‹®­‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYzYY^zåzY³­‹‹­‹­‹­Ï³‹‹®­‘­‹‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY^z^zåzzåYYåzÿÿÿÿÿÿÿ­³­‹­­³‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zåzzåYYåz­­‘‹‹­³­‹­­³‹­Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzåzå^zz^YåYåzYzzÿÿÿÿ®³‹®‹­­­‹‹­Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå^zz^YåYåzYz‹­­®³‹®‹­­­‹‹­Ï‹³‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzåYYzzz^zz^zzz^zzYÿÿ­­‹­³‹­‹®‹³‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzz^zz^zz‹³‹­‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåYzåY^z^zYzz^zY^zzÿ‘­‹®‹‘­­­Ï‹Ï­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY^z^zYzz^ÿ­Ï‹Ï­‹³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYYå^zzåzYzå^Y^zåzYåz‹‹³Ï³­³‹³‹­­‹‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzåzYzå^Y^zåzYåzzåYϳ­³‹³‹­­‹‹­®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåzzY^zYz^z^zzzzY^zY峋‹‹‹­‹³‹­­³­³‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYz^z^zzzzY^zYåYzå‹‹‹­‹³‹­­³­³‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^z^zzz^zzåzYåz^zzz^z­Ï‹‹³­®‹Ï‹®‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zzåzYåz^zzz^z‹‹­®‹Ï‹®‹­‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzz^z^zzåY^zå^z^z­­³‹Ï­­‹­­‹‘³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zY^zåY^zå^zÿÿÿ­ÿÿ­­‹­­‹³­‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zÿzzzzYzYzzÿÿ‹­‹­ÿ³‹ÿÿ‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzåzYzzzzYzYÿÿ^ÿÿÿ­­³‹­‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYz^åY^åz^zå^ÿÿ³Ï­­‹­Ï‹‹ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYz^åY^åz^zåÿzÿÿÿÿÏ‹­®‹Ï‹­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^åÿz^zYzÿÿÿÿ‹‹®³‹ÿ‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåzzYzzz^zYzzzÿÿÿ³‹‹­³‹­ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYYYz­®³ÿÿÿÿÿÿ­‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYå^zYåz^z^zÿÿÿÿÿ³Ï‹³­‹‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzåzåY‹­‹³‹‹ÿÿÿÿÿ‹‹­‹­ÿ®‹³®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÿÿÿÿÿÿÿÿÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY勳‹³‹‹­‘­­‹ÿÿzzÏ­­‘­­³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹­Ï­³‹zzY‹­‹­­‹®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹³ÿ‘­­‹­‹®³­‹Yåz^³‹³®³­ÿÿzzYåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿÿ³‹‹‹³®‹­‹­³‹‹‹Y^zÏ‹‹­‹‘‹­zYåÿÿåYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹³‹ÿÿ­‹­­­‹³­‘‹³­Ï­­³Yz^³­­‹­‹z^zÿÿzYåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‹®­‹³‹­­®‹­‹®­‹‹zåz‹­­³‹Ïz^åzz^Yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­³‹­‹­­ÿ®­­³­‹‹³Ï­YYÏ‹®‹‹Ï³ÿzåzYz^åzzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ̃ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹­­‹‹‹­®­­‹­­‹³®‹­‹zz³‹³³‹‹‹­z^zåzYz^z^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂĂĂ  Ă½ĂÿÿÿÿÿĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‘‹­Ï­­­­‹³‹‹®³‹­‹³­­‹³z­‹‹Ï‹­­®zzY^z^zåYåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿĂÿÿÿ̃½ zzåzz z Ăÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­‹‹­‹ÿ­‹Ï­­³‹³‹‹‹³‹³‹³‹‘­YÿzzYåzYzzYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂ åYåYYYY~Yzzz ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­‘­Ï‹­‘ϳ‹­‘‹‹zYz³Ï­‹‹‘‹­­­åYz^zåYz^åzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂzYzzzYåzzYYYåzåYÿÿÿÿ̃ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹­­³‹‹­‹‹­‹­‹³åzååYåYz‹­Ï‹­³‹­‹‘‹³‹­z^ååzYz^åYYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂzåYåYzY^YzYz½Ă½åzĂÿÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­³‹­®­³Ï‹³‹­®­zzY^zz^z^z‹­‹³‹‹³‘‹­­‹åzz^zYz^zzzzzåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½z^zzYzYzYzYzåĂÿĂzz ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹®­‹³‹‹‹³®³Ï­åYåzYz^YåzåY‹‹Ï‹³‹­‹‹­z^YYzYååYYå^YåYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ̃ÿÿÿÿÿÿÿÿĂzYz^YåYåYzY^z½ĂĂzYÿÿÿÿÿÿÿÿÿĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹³‹­³®³‹­­‹‹‹z^zz^zåzYzYY®³­­‹­­‹‘YzzåååYzzåzzYzåzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂz^zzzYzYYzYzzåz^zåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‹‹³‹‹­‹­‘­³­‹zzYåz^zzå^z­‹³Ï‹³‹®­zåYåYzzz^zYåYå^YÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂÿÿÿÿÿÿÿâ  zYzz~YYzz^zYYYzYYÿĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ­®³®­‹­‹­Ïÿz^zY^YYå‹‹­‹‹Ï³^YzYåY^YåYzYzzzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿÿÿÿÿÿÿ½zzY^YYzzYzåå½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹­­³‹³­®­‹ÿÿÿÿ­­³ÏÿÿÿååYzzåzzz^ååYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ¼ƯƯâĂz^zzzzY^zĂ  ½ Ă½Â Ă½ĂĂ½Ăÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹®‹³‹³‹ÿÿÿÿ‹­®­³­zzz^ÿÿÿÿYzåYYåY^zzzYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâµ´´‘³»½åYzYzåYzz^zzzzzåzzåzzzzzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­­‹­®ÿÿÿÿÿ­‹®­‹­^zåYYzzÿÿÿÿÿYzåYzYåYåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ´³­‹‹»ĂåzåYYYzYYzY^YzYYYzYzYYzYYYâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®­­­ÿÿÿÿÿ®­‹­­‘³‹zåz^zÿÿÿÿÿåz^åzåzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ‹‹Ï‹³µÂzzYzzzYåYzYzYz^zYYYzYYYYYYz ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®‹­­‹­‹‹­­YzYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­‹µĂåYåz^zYzz^YzzYYzYzYYYzYYzYYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYzzzzå‹­®­‹­®³‹³‹‹³­‹³®­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ⻋‹­‹‹­º zzzYzYz^zYzYYzYYYzYzYYzYYYYzĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåz^åY^zz­®­³®­‹³®­³‹®Ï‹³‹³‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâµ­³‹³‹´Â^zzYzzYYzYåYYzåYYYYYYYYYzYz½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYYYzYzzY^‹­‹­‹­‹­­®‹‹­­­‹­®‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ‘‹‹‹­‹­‹‘¼ zz^z^zzz^YzzYYYYzzYYzYYYYYY ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåzåz^åz^z­®­‹‹­‘‹­­‹‹‹Ï­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá´³‹³­­‘´½zzzYYYYzYYYYzYzYYYYYSYzYYYĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYz^zzzYzz­­­Ï­­³‹­­Ï³³‹­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼³‹‹‹‹­‹‹­´ÂÂå  å åzYX^YzYYYYYYY™ĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzåYz^åYå^Y‹‹‹­®‹‹‹­­‹­‹‹‹­‘‹Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»‘­³‹­‹³‹‘‹‘µ¼¼Â¼¼¼¼¼¼¼¼¼ĂzYzYYYzYYYYz̃ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzYz^zYzzzzz­­‹‹³­­‘­Ï‘­‹­­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ‹‹­‘‹‹­­‹­‹Ï³‘´´‘‘´´‘´‘Ï´¼ åYYYYYYzYzåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzåzzå^z^zå^³­³‹‘­‹­­­‹³­®‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ´­­‹­‹­‹‹‹‹‹‹®‹‹‹‹‹‘¶¼zYYzYYYYYåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^^zY^zYzå­®­‹­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼º­‹­‹­‹‹‹‹‹‹®‹‹‹‹‹‹‹‹‘¼ YYYYYYYz ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzYåzYåYÿÿ­Ï³‹­®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿⵋ­‹­‹‹‹­­­­‹­‹‹‹‹‹‹‹‹»½YzYYzYuY½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^zzåzzz^zYzYzYåY­‹­®‹­®‹­‹‹³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿĂ»­‘­­‹­‹Ï‹‹‹‹‹‹‹‹‘‹‹‹®‹‹®’ĂYYYYYYYzĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^z^Y^z^Yz^YåzzYz‹³­‹³­‘­­­­‹­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ̃Ư´‹‹­‹‹­‹³‹­‹‹‹‹‹‹­‹‹‹‹µ½zYYYzYzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzYzzåYåzåzzå^³­Ï­‹­‹Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ³‹­­‹³‹‹­®‹‹­‹‹‹‹‹‹‹‹˜½zYYYYYz ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz^z^zzYzYz^åÿÿzÿÿÿÿ‹‹­³‹‹­­‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ»³­‹‹‹‹Ï‹‹‹‹­‹‹‹‹‘‹‹‹‹‹µÂzYzYz^ ̃ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzY^^zå^zYzÿÿÿÿ­ÿÿ³³‘‹³­‘­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿẴܵµºµ´´´´µ´’º‘µ’Ï‹‹‹‹‹‹‹‹´Ăz ™å ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåzåzz^zYzåYzÿÿÿ‘­‹‹‹­‹‹­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâƯƯÂƯ¼¶Ü¼¶»¼Ư»µ‘‹‹‹‹®‹‹µÿ̃ĂĂ½ĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYåYzYzå^zz^Yzÿÿÿÿ‹‹³‹³®³­³­‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâµ´´‘’´‘ϑϋ‹‹‹‹‹‹’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå^åzzYzz^zÿÿÿÿÿÿ­­­‹®‹‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ­‹‹­‹­‹‹‹‹‹‹‹‹µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼‹‘µµ‘‹‹‹‹‹‹®‹‹‹‹ºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ‘­»âÿº­‹‹‹‹‹‹‹‹‹’ÿÿÿÿÿÿÿÿÿâĂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ³‘¶ÿÿµ‹‹‹­‹‹‹‹‹‹‹‹µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ´´¼Ü‘Ï‹®‹‹‹‹‹‘¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ̃ĂÿÿÿÿĂ»­Ï‹‹­‹‹‹‹®‹‹­µ̃ÿÿÿÿÿ̃ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶´‘­‹‹‹‹‹‹‹‹‘¼âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƯ»»Üµº´’µ´µ»¼Ữÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ̃âẴÂâẪâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ₫ÿƠÍƠœ.“—+,ù®0́ˆ¨´¼Ä̀ Ô Üä ́ôü  fçOn-screen Shown-s®\A ArialDefault Design Bitmap ImageSlide 1Slide 2Slide 3  Fonts UsedDesign TemplateEmbedded OLE Servers Slide Titlesö_À‘ă¡<ôØsebulbasebulba ₫ÿÿÿ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰‹Œ‘’“”•–—˜™›œŸ ¡¢£¤¥¦§¨©ª«¬­®₫ÿÿÿ°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙ₫ÿÿÿÛÜỮßàá₫ÿÿÿăäåæçèé₫ÿÿÿưÿÿÿưÿÿÿí₫ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿd›Oφꪹ)è₫ÿÿÿPicturesÿÿÿÿÿÿÿÿÿÿÿÿéCurrent UserÿÿÿÿÿÿÿÿâSummaryInformation(ÿÿÿÿ¯ĐTPowerPoint Document(ÿÿÿÿÿÿÿÿÿÿÿÿÅ<DocumentSummaryInformation8ÿÿÿÿÿÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrpyc-3.4.4/docs/_static/screenshot.png000066400000000000000000004305311314203541000177370ustar00rootroot00000000000000‰PNG  IHDR£ßd—ÑOgAMA± üa pHYsÊ&ó?tEXtSoftwarePaint.NET v3.5.87;€]ÿIDATx^́}XUWº¶»¢ˆé½÷̃{ï]@A¤J—*"Hï½wT́½Ä$¦ÇML¯“É$“™ÉÔ;wæŸ;sïûû8 G™Íó¬gö^{Ơo­ư®¯.YÂ₫±#À;́°#À;́°#đ,G`—º,z#S'¾˜ÿùcÄÜ|Æüfú#Ø?¦ÍWRéưø@œßOë#=“Ôös”.́À•8_¼˜ˆ—R‚qí@.gă…¬ ¼˜I× æ^0®Rº–„ë™!¸Á¤ ¼p€I¸Áܧ|×)?“‡Ÿn0ïg…à•7èy.­É¼\>€‹ù8_€s…Üt‘~3÷¯2‰̣\ÈÂ…ƒ¡¸‘[DׯPƯ/eä†à̉AêW^§W©o¦ûáÍ ¼™éŒ×3<ñZ¦^Ẹ́ÄË™L_Âp3›É»׳¢hh çưSs¦</t5gµa^ v¼Hcs++¯dús̉­̀¼ÄŒÓ×́0Ú"p1o¥(\ÊƯ…Ë }_ÍeÖI8§œ9¡TVí)!Ô¾0ê[çú2ÍíKDS/fEpSf$åÙÅI/Pºùø{ËBûÑ\ûÖ\ï̀·¿ư”½ïIÔơ8}œkooÏ]l;‚ûùĂ¾ ơk®2zçiÖµØö=‰qŸơ}¼BßëóY»q¾×—̣öàJ~,çz)/ö=¸<#Åà|î^\Î߇«Eûp© giƯ¢uö€‹ùQ¸R‡+…ôŒ̣\¦2®åÑO{ çÇ\¹¿¯Sº‘;® §÷i_ȧºóchßÙKm‰§½.°D,íGÔ¶ƒ„+(ße&oA.́åä½|0†îÇârÁ>´ÇÂ[EÛE–àYâ±ÿغ+‚́p¯8ßíÅɾx'Ñï¦zànª'̃Kóæ\oïwåü~;Á÷̉¼8ÿßIrÇƯưîø Ơ÷)Ï»ûñ^²+î§¹àn’î%Ûă^-î¥ÚĐ»6”Ïw÷ẫ> ªÇïÓó÷˜¾—âDuĐ;©nT¯;îPƯïRyÜÿŸ}º—뫂 w¨ow’]¦Út'…ÆI qŸÏJôœ¹Çô…ߟ©ß)T&ïù́÷8år̃q§ñöÀ{Ôæ÷ÔxĐ»ï2‰̣0Ï™gL¹Ü¼̀Øqó2ÿ3e¿CÀÿ½4Gœ~Pøï3ơSâä§+“ïv’3çz7©ÛïP~æóó›¹2ẽ¦ùæ$&?ï'½ûƯ{{¿·NÙÜñc®Ü>qûÅŒ-S?ÿ·§Æ™¹ÏïÓv¦Læư÷3¼xưâ¶eºML¿¸ă6;qƇêäÏ·Ụ̈˜60Ï8mäçư©1â•Ç'¦Ïo%8rúÍä{ÖÁ{ûˆn“<đÑí«é^̃¼i¹á~œ >Opç‰Î¸Ÿâˆw“i=$Xâưk¼·ŸÖg8áƯ$ê÷~º̉ÿIvx/‘ÖK¢5>H²Å´>̃Ovä¼ÿ~²]¹ÿ¿Gy™+ssŸÊø˜Úöñ~zÏ÷©ïQº—́̀I$¹âăDj­ïăđÊ>K|4¯é”ŸÚđ ơ‡¹̃MsÄÛé¸s€Ú’bOíñƯ“Úôz‚áMzÿv‚ ­]¼ŸäCmt ̣=đÁ~Ú 8ăB}¡÷ï¤Ûă4{¼›NưKs¢Ä\‰^R™ßTw*µúĂôí>Ơơ!í Ó̃đ1ơû‡)}Hÿ@÷?`Æ/Ơ¯føâ…dOܤ~¼~Ào ưˆ¡£4¢*ïưTnỲó%ÍÓ7{¹égñ.ø:Î_Å»ṚÀ—ñø|Ÿ%o|FéĂưÜơÁ&v XX 0ûc†îĐ¡ơ ­¯Ó‘¸°Û—öØq̉åh^â_íqn§®Äºà|”…™â 1®^Ëö£ä _\ˆqÀùƯö¸í„‹18kG÷l(Ùr®÷Xă"Ắ¢t•̉5æeÌ-¼”î‹7 ¾’ˆ3‘68i‹k{œpm·å±Áåj[Œ•K팱ĂŽ.ÔnW\̃ăHÏœp₫Àơi:˜Æ[iBi… HŸ6*¾]•ˆ#̣†.̃3Ä;;ôđv˜.̃̉ä¤×Ơ)ià­Pm¼F¿ß Ñæ₫¬wÂôñºŸ̃ÔÄƯÜ ×Ă!ô˜&^ SÇ«aª¸¦Œ[¡x#T·whâíP5*Kï„ÓoÊó6ư~‹®œÊÔĂ\îM=¸?;ÏŒ2Ë›UÖ́|ó½ÇiÓ_uê“̃VÅëÁ*œë›ôÿÛaÜD}búÅ$nï&ÿ›Á”˜+ơŸ¹Nơ‘—Ÿ_ÇÔ3ºÏüæ̃祹₫ç<ă·[.óÿkÊÜûAÜ63meÚÇ)“₫ç÷ƒ¹ÇyÆyÿlº̀ûü~s̃ᵟßæ=₫X0¿ßä·[ ~¹ü¾MƠÏÔÂmăkT]9e0ă$0Æ̀½×‚”9íà´“×~>n³ècö\0ÏùyxóÊôC“ü¹ä]LJ)›ÿœ©?ÜyÖÀmZwµđ²Ÿ^¤µs™ÖÉÅjO„1̃Ûa„;¾êxÆơ­ ¼¡‚{;”ñN<ư¯È Z+¯‡iqå{=P whÍÜÅmzç–4­Ijg˜îF…¨àU9j7å P ºR¦r(ˆ&̃ 0Ä›~xƯ_¯øèàeZ³ôûÍ #¼á«»₫&xßÛŸ“4ă³â>Äèà&­Ñ·i\̃ôUÄflC‰^v©ă¥P9ÜÙ©»¡J¸êOôQƒ;µq8·‹€nE:̃/À­x5ÈœèF†ÚKư ÔÆ”ÿ^$Ñ_Ư£¾̃‹Ô vRio3ë›úx'\›~kQ?uđ.Ư»¢„»;Tè·2̃¦>¿Măó]o+pîƯ¡2oÊăUjßƠƯæ¸[†ªcqs· ^ˆĐĂÍPMÜ¢qyƒ̣2ăüV 4̃ß¡ˆw©œ{D3ïQƯïи̃£÷oQƒhƯÓ¼Sz+H›ÆµçµË§!Á=èqö#₫>#¸o͵‡Í•Ogÿ₫)í{ÔºÚsç+o®1›«íZÆBă9_½‹­ë§̀÷?kî‡çûÖ=ÆX¼MëöµÚuÜcî ˜ô”Çy?U\ ÖÂU¼UpÉ[•›|˜«Î{̉=_M\¤}☻2N̉9́"ËápÂ)Ê{Ê] ç(ßé@} èc,Ècz ĐÅdˆ!Î…™àL€Núhâ¤'•鯃qœđUõHSŒÑïs>êT¿.ûjà"µă íѧ}•pÊ_“₫T~¨.ưÖ¦6«âF¨=×ÁiMt8*`œ€pgŒ'¤ÄY0ú´ÁèKy;é£bw¼Ôpߟ>¼~´ñÓ¤ƯP¡Ä¿̉o₫½©g*”—>0̀;ô!zËŸD•@: ¸ À«ô‘|…>4¯Rz>oàxs*чƒ>Lz;@‘ꢥwèĂu›“¸ÿ?‰iŸ`h—?ư槇¶÷!ïÎÈ?WÙơ.æ¦msåă·y¾<ĐÇÅ”3×Í×NÁöÍƠV₫½Ùạ̊Ë|Ø;I+̀Ü=0o›¯Ù÷q—Y#̃ ¾ˆæ£Œđ̉^ \ßi‚Câ5/iazUđJ0*ßí²éC›yØP¼B¹tđ{‘̉»» 8€óM¼·S‹̣¨â­ÊGsó‚¯^§ĂÀ+´¶̃¤ĂÜ[”˜ç/úÉÑ¡O7ˆp>Ô–́Å_/uẵ=‡ÿyi¿nËÇơHGœó2Æu/S|ßuø̣&ÂƠpÆGÖ&CjÇkH_'€ü2Ă‚åđZ¨I\¦rợuüøÁMÔøzà¿ï̃Á7WkĐm¥N›½%̃̃IăBÔw¼øn§ơ,M“€%+gmÓ7X÷#ÓGăn0véƒñ}L^ơ’§}C·¼·p–Ç-_YÎAơ6ÏÛÀ_TÀŒCp“Xg#ÍđûgñË:Đh´çéĂ÷r¤.í3̀¡‹æ2P÷ H¿Gù­E\£ëơ`Y\ö—¤|Jx)R™>@¸Æ$\§ßLz™™“çf¿yLZfÛÿœ|/₫æÙĂÔÑg¾·ămđY¦+>;à‚IÚù%]¿ ÉÇW$ñü¤?KqÁÏHªñ5]¿$ Ó7¹₫ø”Ô}>ÎöA§ÅVÎî6—ÀÇ$¡úŒ̣}K̉¯Û©¾8±×gâ‰cçEª^ÄQu•=.¸•H̉Œâh¼“â‡Oó"Hâäƒn‹ÄĐİơ6|Må~Aœ/ÓƯñe†̃±Ä$ º›C”T>“˜znùĐG•“äyí˜]'ûÿôœ°cñ¬Çâ%ÈÑ:y“b7ƒƠ1_êÂW“Ơh1“Æ }â–@ôƠÁ oeœ àũOW(ï¥P=Løé ßCC>úđÖÅ0q2dp̉ƒI8ç¯+‘&v•Ăq.†à$q)™{^Ê÷PÄ(=»¬ƒAâ´ÄzàÛ[Ç€¿|‰/ß¿‚[WûqïµIüåûwñ×_Æ9̉‹ª °Ă§gzđ—¯ob¯ºrԖ᤯®ø'Aç´q‚ú3è"‰«‘:¸FĂî@'|û̃çøâîë3´Áoîƒ;竱só:4ÚZXL pÉKçƯ7ă´Ë6\#`}΋¸´'™~»©S¸LÜÙ‹ú¸è® ÄM!°z‰±7”Ÿ¡₫¹Èà]'Jˆ®çó¼·,†ƯdÑ`Œ?~₫>:Q‡líuhuRÄå=O`øâđ^ó’"-GÜcúj4†b ̀_§ß× °^!p|-€(qPoçô⸾(G€^ö1vM=ë5ÅÖÿ¯Bƒ´^h½uZoÄK1æxy1†I2D8â’½HÔ—(½LR‡WHúđJIQtñB€=×' ’̃LqG·£N… Ç^¢nR7 6Ù*¢3Ö èMÀđ'ú©Ä@ÔÚªâ\”+&Ăho¥CöKû<Ñn-‰³Azq’%•A­$­ºF{Lj«#0F‡Ø‘]fè 7A´=:CH€Q ń뻌đÖ3¼º× v2ÜăR? ¬_&̀rGŸ&í°Å˜—}L•q•8/ưT™Tq‘¸Sɸ$$’¼È\)] ñ=71¿gßẵ̀ϼs‰W̃%N9Äbg;Ï1 pèÛG³ñM’èg,Ú ¿¿{ÿư‹wđÑÙÜnÅp„'Ú|̀ñjE¾¿Ö‰¯{b|· ư‘âü§cmøể>kÅ;í‡ñ³Cø¤¯ă;­ĐL›g¤^«ÏÆçWúđÉ`N$¢9Ȳ"ñơh5¾¸Đï(uî#½«s=øÛ?~@cĂA˜ËBWsl̀PZ?üösÜ{aÉÁ.xùÔ₫ï/ßâöÅ.¼º ·JR1ä„!ŒD8âĂÖ\|q±wÓ0LvM˜¾ºû9>»÷\uíđË÷…×®4¡e_"̃:–=œNßï'ñå¹j|Ôm~ºxµt~6RNc`‡³d0ô󭘌 À@é7–áçÆñvezHÔ6B:gMf¯îÁÏ Dy¼Ç|Đæo„̃`c\MöÀÏ&ëñÅ‹§đ÷ÿúoŸ@ˆ²8®̃oÆ«pb·-N’ZÄ$‰₫N{·“>„“nF½ đ’êÂq'e\#±ß%âÆ^'̃M:@3‡á[̃tøUÀ ô›»±û;, ,D̀̃wÀ^Í&\³ÆÙƯÆ8E‡É“$a9O`ó\°’pJ]JWií]!Ñû9·Ÿ!qûXJ‹#»¼Ñ€ßƯ>‹¿ưáK|ñ釸ëÿû+^¾r†êøƯoĐ8üˆ®8?uÓ 鱅s>Lçâ|ˆ“†ñP úÑGÓ§BÍqÜG §|4p–8¯çé ~Ô,NÓ¡bœ8ÄÏ;½±íc÷ÄçÆèû̉{¥¶^$ńÙ0#×rÙă¬fÁèS£µ!h¤Íx H$âê ăv“ 'Mt’̃?uy“̃‡—&z¼´Đë©>JưŒ’›z=uè7uq’.'uzëñ’>:H\ɤvN2@»7%æÊÿÍÿŸ¹Î~&˜o®wæ+o±u-Tï|í{Ôö>N]s½3_½?e<ç«ëQŸ-4wO¢_3sÑ¿­¼gD«ÍZ¨¦ ¶”¸?~s¯^= }YiX(©ÁNUŸ½ñ¾ứøÛ™ çHđ§ï‘ÁÖfÂdB ?¹;:ßÿ́gssÄ'ニO_»Œ`[c|rûMüöWߣ¿©÷^™8ÿ…=>jkÀÿ₫ơu±ƒ¡ÜvDùzâÿ₫úg4ƠTâö+/ă›/¾Àơóg‰›díEC~>À¿"ÖÑÇê›đÛ?üN¶ñơÁÿüá¿qª®™^¾À¯…[§Æáª­„ׯNâ·¾…h[+|̣Ú+øêăđ̉7Ă/ï‡×Z°+ ÿøÓÿ¡¶>çÎÇ[oßEØü₫÷Ÿ£¾&/Ưœ¤Úÿ¥9øèư·qb|îøñW¿ÆøÈ\­íđî+×ñ³7.#ÄJŸ¾ù"¾ûê#9‘¸́p!ơơ(Ü…ÚœD*çO¨8˜Uum¼ÿágxí•W`®£…¶CùhÏKÆN¤Y¨¢ÆÛÍ4×'özàï_½ÉyïgoÇÇ/Oྺ…D& ZKzj ¤çÛ́¯ˆV2k÷U¥½‡·¯<ëµú4×ÏbëzRëçÍGsí[‹mß“ø–{÷-èËlEvÜê÷ßp`×”$Ŧư+B¡­ Fcó >|ơ ¸hi"̃ɱ&:Øo #¶ôa!@é¨Cn^bñơ³¨>˜‰×ΟÀÿûƯ·8VyÆj ̉́5PægŒ̣2PE\̉Û7Đ•»ÿ<¿´Æ¶›ç‰üŒa,î]®8âa„GmdZ«a¯¡, ™Œ€’èºßÁ‰vzH'€y”@b©:¸ …@_†…JƯ ‘m®ŒÎpgTÀ¬vƠE´¡.ëEˆ¥Â͵gg€Ơ͸>̉‚t-”¹‘$Ä8¢Z‰̣D’$u‘g«‰¶H7¹£ÀĂivF(ÜŒ¾ưüá;:Ëÿ¾û:â¼,‘æa‚\'-qVGƒ»zM©· U₫¶H´Đƺe¢¬ÎèÓ¤5trèrׯ£<ÜTÑJÍE'˜­³ó>ïBùé|¼«%Pó›ÿ¿ào¦́Åä›ëùÊ[l]ü¾=NûømŸ«®Çéă\c1Wûæ«÷§Œç|u=ê³'=‹›Çw₫;ZtĐ")Y¨9[®’ ê\ÍđĂ+çđ‡_¼‡Ar4\{¹{ñ.qÿøí§8Ưш/̃¿ƒ_û5Îø5ư₫„Àê‰Áü÷ï~…'‡ '-óĂÔ®_ă©|xûeüÆ,ØÁ û‚=HÏë;¼yó2ª H¼ÿ[ܹvZ*¸ñ₫₫óĐ½7‡‰c̉N‡ëN/’°x!ÓÖötˆ23À>+cx’»–ê’(tÔ%jF\QS4xĐÁ˜ŒÈÚˆ>₫̣̃8û£®‘g½V§ObÏ}̉{ó́ïÇBưzœ=böû¤çîí—ó}§¸{_·tY4ˆ,$`XäMÜKYœé©¦ƠOûÎ?Hßóÿ₫H¿ÿ›¶ˆß#ËÇ ÔQLœÑ"w]´E¹ ËV•ȰVBË.'W´ĐM»HÊñöµSl©@Evªsö¡“tÛ¿|ư"²D¦X*£˜¸£¥”zÈS&5•“Ø>ÇIí{}‘ébˆOḰ6UÇß~û ¾ÿæc„Ûô*6’$HÄû·N#Dw;J̀IU€8·^zè6G–± "=‘`© ±¥",}`´–¬Æzh3a,XƯ”1àN:NŸLbÊ,o®ÿùu=,ßBïđß̀7_½ú́Iµ)çam|œ>̣Ë[¨}óƠ;W‹OÁzgÏƯ£>[hîæ+o®ö.vlgÜùïh‘4A‹ÖÚ|MĐdA›1YsÚƒß}Câtü _~x!Œ̉÷SüÉÊ6å?₫êSd́ ƒ®̣&t·”áoÿưå±ÂÙ‰üøó÷áI„wß¼‚ï¾[]¤D„á•Kg €}KïÿßGyˆsĐßQ‚ÿùăgØm«†ưÄiÈ ´Çđ@ ₫̣÷?ăơ;¯bậ̀Jr±w4Z;jGÑEôÔ$àb*‹“ĂUøúô^b˜mÖâäh-ơ·áHF>»{™êú/|úö9„»À\S G’đ‡>GsÙA”çeâ»ï~†èÄ=ص71nÿ†ÉZß>,̃†’¨Î‹Åÿüå{Œ÷×!ÀÙôO?ÂỦƠUÜ€2>h$e₫J²=DƯ9!zØEzSî†Ûán°ûÈ¢;;Ä1ˆH„娴¡¦̣È wBN˜=\ƠÄ‘HÖ$̉wôƠƯ†´K$Љ?Pklt¨L7Ä»è“^¥ B¬ࢽû ø&“~U°ÊzdÙ(â*SˆË9Ù]ƒ_|v¿øöC|Mú«ß|ÿ!énNÀÛ^~ærH÷7Få^wäWĐ]q̉©Œ:²ZÑ—F‰º²|Œp¸1´©‡nƒ‹́ŕ¶‘G ơí EGñÑ“†¿‰b]́Îrˆ@OëAX«­A}¤Æ:£Œ¢°x©K X#Ê( K]1¤xª£`qHH?+,ÜCô7ĂEnö9¨ Ÿ>.éC•K"ôƯ¦RđTZ…[¨MÄu µD.aq`¼,ÔáOônI´3âmdá«(‚\r ]CVôuär¦\Eu¾:9ư¤ÔKú́Ư*!ËË’k¬aw9 ºJaÔCÇÉÅ»÷±{?K‹£d4F€°Ü\cdƠ^eG̉:4–Yk Ø\ ¤§™¡«ˆt]%¤̉¡:]8 öz¨!1úQK1S¢0â₫(·P#I†Jé`yŒÄ뵜çª(%ÍLcM$jÈ!Au;è* KOÙº²8BơÔ:kăˆ¥"ªhŸ:åFÖô èpƠG…©ïtCµ£’e¥£ R5eqØÎ%¤³_âhưfˆÖ—C ‚s¨ŒB Y: ’{¼{d™J£&Ô™ÎÆÄe];=U0Z`„2ZóTÂ$9è>áNÖïlbÇ€¥i`’ÆhŒÀ×€;ù 4$Q/Y†’7ˆ:§y¶²(pR!îœ&*đuèKëÉ( ̉VuÎÊ8b%E.Väé7 „˜Đ8Qÿéy¹µ ·Pd M4Æư!–ÔN#ÔиäXk"×N…døPä ‰Z_cu!1¹qªu"½wr¼ßG~RûÉEƯ YÊ{*’‡5œ$né¹s:N¿ÇÉçë8='PăäÚi‚®ÇˆK:I$vïcÇ€¥…iàq$»\5h/’BW”=FÈMS?Y±wítD/ơÆøP̣Eï?J₫”Đé‚Nr›4¼×}Ñnè̃éŒçÿ“$2?Em?ëo†SÄ =Me9ªSư¦œß“̃F8E@ó$} NxÑ8Sô·À°ơ1À‘@¦¹†³Æ°µ‰\ĂŒ§æÉ Á&wU¡€´ŸQT¹“²x€‚z H=A¶Ç(á ù2ô#=y 0Bá™°ƒCäVƯûØ=ƯóK†è¤øá`}¤8Ê"“Tü2]H O¶ ¹nÈ£Cd>#åÓzgR¥<¿çyê‘72X¢ư+Ö{!ígµ» ”̉ưl’F¥Ó»„¤#étÈ. ư1‡Œ¢ = PDé íÅäR*“¸ùdWL\Ör:øWÑ~U@\̉JÚS룽±ŸŒ ײœÑ§E—Ô“̉pÅ´î *C‘Vh 2A+é_±‰– âöK§aNĂ´á x¤ÔGÿ÷‘é ¯) tđ%ƯÅ ²àdî1Ïúp1©ŸR¯Àÿüû̀uˆÄû>äÇ”ü_Qê§ ·œE÷Đzí¢Cc/mÚ½œ2̀¤ u·$ iEíp@¶† Ô‡8’?̉á"9èi†Ó仔鉨ˆ+:@Fư” ü2¿é^?bæ̃ƯăÜgúBư¥~ó4ǘ‡5åu@ƒ§5̣H É”t¸́ôÑ@ÓÑ7ŒúĐ•ÀâơWđ:LuÓG`œ\µŒQQÎsẩ’îÙ ú̉ùb®ựûÈes€ú9uŸ>bưÔÏa¡TÆç!ñ S{éC3JÀuŒ̣0º»”úèPƯdLcÁåÖvJR{°Z \·YQđk¢@­t0giƯ÷XX Đ̃×F‡â6Z7M´₫=IÔmL®™ï<´Üè™vº2É’~Ózó°¢|Vd4hɹ6{Ûpö©NđÖN*?̀ÿ̀}Î3̣L̉în6*‡Êhuç&¦́&wS4Ña¹Ñ‹tơÉ?q3í©½Ö¤ĂjMª‹ö¹VjÓ–F¦=¤“ßDÆLơîäʉʮđ¶Âa:Èơ£DûI51êˆiPD₫NĆјŒ’H­duFŸ.Mw'%d2~¾ö›*–̉ȺŒḾ°4°0 ¤“®c&9Zæ&%dpư¶WF'© ‡ổ˵aÊSF2́§“̉¬ÿ§Ÿ¥“Ø9ĂQÖ¤4̉œeâ,‹d24L¢´ßU‰.JØO܈ư.¤“Eåæ“@¾5µ‡ô·̉µ°ŸDÙ‰.ä^…®iÄaȦûù6J($±8Ó¾̣8"*Ê“Jꨟ9¤&Obû+ dÛjÑ3]ÄÇcq,ö’=Ơ•,XÉX(Ă^́‰óA)ĂN—“˜ÿ™ÄüfîàÜ×á́3)*t1)DûÄ1aú—ɹª"‹ÚÄgeêŸ%EdS4—æcØEí̀´Ó¢÷¸u¦hN#]²Tr“bo„ḍLL®gRÈÂ¥÷…é#vŒø4ʬ]2L#ÉM©¥7ñ€ƒ6'e2‰ö,^Ê$}Ñt’¥9N§TZs©d`”B^0˜+ó?󜹠¼Y´^§ß§½ƒ̣ñËO§ưÙăR©n&¥‘ÊN:q8Đu:6§]iœr¹)•)Ÿö­T'ÚŸ¨¼LJỲ•Ù‹hH%×pi$% %WS,}ºXtÉѸ©Ib§¹BÍ4àm$c6±cÀ̉À"hÀËX¦”̀d§Y¬{’U&?y‘=oÊÇäu!ëS'R˜_Lr±‚‹Yl‡3'Iq’“¥-¥)ÉÀÁR–“˜r}È-‰ézzR}ît°t5U‹“”9ÿ{’ơ¨· å¡äNíu&ƒ¦Å&7̉ ơ¦÷ưhđ7T ₫(™ʴ³ D ØŒ«œÉ(Á•î»™¨RƯ 'Êăb®@}’YTbúèA}›‘h¬=f73î̀˜û)ĂÏ@“|)Z“¯¡| h£«·¡&%-JÚäăT^FjÔ'vßc÷~–K&p"½r~r¦ß.É•ÙxÉ ‹œÉr̃i‘‰É˼#XÆTÙdiÏÔ5»næ̃́ÄÍ3³^%ÚÇáG®́ ¸)Đ€ŒCM5A¾ï\<̃Ê|,f­éŸ*}÷Ư;Đ××……)¬¬̀`A¯--ÍØÄK?,èƯ¹̉?smñë›®ƒYËÓI°=Ó™ư™kŸ˜YŸ`ƯÿưÓö‡óô}S̃¶˜¶ư´¶<Θ²ï°c₫ïC‹YcO*Ï|t³ø:¼ĂOæäăÙÊÊ?ûú+Œ AHˆ£OŒ¾ưÖ04Đ¥… ¬hb¸ZSZt₫G){¾¼Ïª̃'Ơ₫ç μ=‹¹{J}gú÷´hóiÖơÔ×ÚS/¶_°ï²ṣô¿9́˜ÿGŒ¹Qf?ÿüÓO0Øß˂ѧD©²ùÀ¨¥…1˜ â'†»Áÿp˜™@—bC›ˆµ~‹uv]æ&®à‡!3c}èêj'÷Áó́6̉û– 7xÆ}æ·ÜŸư“?TïÔ8?Đ®'Y·1ôu5addđØ€ÍR€&FO`0sôˆ´eme #m·ÿ‘÷Cèi¾CS—1äôô¨®Gl'›ÿỈ4[KO, °4đÓh€£O}Ϊo.0Ê|dÍL`dlÄa[[s±Å)¬‰±}́uaíä½ñ;( .Gù¸ [—1 aIơØLƠGàŒ¯ °03†Gbcƒ`­¯ÅT–fFÔ&}(~”60,y#†#L —i¿zÄ)Öå”iơˆe>JưSy©nsê§‘ơß‚ÓK3‹BƯÖ–&06±Bx\4‚œÍ9à÷qÚlÉápsơ@Ziú̉IL†¾Cđ´đ@}-â(&·‹‹lË…ê¤ç$–w̃•¡¶L8èt A-‰¯ăÈ1®o|ÚkS`¦gM±XIE`o>z*bᜀ¶\‘£\==ÊŸÑ…÷.÷#™iÓ¹%” ưĐ^8X¨}!c$âÀ™YÚ#.³ÍGQ”A¾Ơ´ pÂ;.Ơù1p±$]LÏ]hl*Ç₫@â¶³† qớ“Đ×U@\U·5£t0Ü\œh~¬a扺Özïó‡—§;|í©\”u6ăÅëus²' —‚®&5çèí.v£d8£¾»S ŒfÂIŸ¸™¤oi‚̉TqS?”ƠT#{‡ÜĂSÑ×}ÁVđđr†‹W$:Gïm 'ŸH´LœÂpU¼¬\†‰îúÖ8̉U8oW¨¨Fm₫¸‘€WH4zºQ‘èBSâÛXÁ̃–tEBĐØQ…X›ẈHœQ]=k´´c ­ ÙéÉÈÉJCvF JâĉZøÑ¡Ăæ¢æ Í…3»ÑÔT†( Á‘^@`t7ôɉ{u=êFĂÍÎ!qĐ=ĐŒ@:PqÏç̀¶‹–X`i€a±ÖôÏÎeÀÄèŒÚ¢kr͇sqøp>$„8ÔEÀ̃ 4T&ĂË=œÀhœµT`Oz¤Ç®œÆ©¦†*â á́Désêrơ1çû3`Ô­ÇĐ^~ÅEy8R–‹¸pwhè» 5y»I ʈ”ơàNºµéđt FSG<,=Q×s¡Ö$Ú%úb€(W'8¨ö~¨êiC²+‰Çw` )V&÷e¡₫È>Ø“Î`拾m©DqÎÚ;{qél-|,́‘×PƒŒ h9"‹@È•s4ͪ¦È¬ªD~Œ;‰|Iu1 „¸ÆÄ™´ṭÁÁút퀑¶) úFqv¤ Í4¦ ơM¸pu E{Ư¡­©O\Éư¨¡6t´uáÚ¥vZÙƒáî¥R83cF ®­‡Đ̀Ô“~¯-˜±± #}C'”µUc€ §N-S$èª̀ ƒ9‰»;~‚`ÔY_8ç&H¬mÇ…“}hm¨Dc}N]œ@UF(|ĂöÑœ¥ÁN[ ¨ô`Nâïæ#´Đ††–‰ºKQ• 3M%èù¢¡÷(‚íœPÜt1®H?rùñ̃0!Q¸®>ÖB´VÆĂD]6¾‘8\UEcÔŒ+×Ç䆽9…(1=Œ6·a„¸ %ùÙ8Tœ‡CE9(-¯Á‰ăƠđ44C3Ă­œ¹h¤¹¸xuD£;“sQÍ€Q%=â¬ÓabŸ/§ºzFO/E+Ê,Hª°X®ó¢èe14ÅæYÜÚclj'–X`T,}¦XtN×N P³p"NSçaxSdM̉‡44Ô'Ec̣À¨·G8Zó`¯® ·Ø, T"ÆÛÁØê[XÈZđăÊÑơ#1}9‚(‚Ơ¥Gsc̉ă4$±oTaªs"`FâkF,ë½3Ms€Ñ0k}?µ¢¶™Z ®¨ơy»R̃€½ÎĐÖÑGŒº÷·k¬I?×?(áa~ÂíˆKª‡€ô ´dÂ1ü wø©C-¹đ̣Ưú†ŔveÚ³ºWçÔ‚Œ˜ƯTs=8́DW?†™Û ¤·UÉAđơóAø@̉%%q:éHºF¥¡«³ »}´czÇêbăÀ£é;œÈư•q °+ï0j̣ ÑØ1̃0ªÇ£5H ¶']WFß̉ñ…‡Q‘³sQ:–üùœFơÔ |Y £±m…{àăỖà7X“qÀt4×¥ĂQO“T(ÈSé#7÷”#„:º&½ËêÂhÎĂĐ 5ƯG2 Œ&øÁœŒ£Œˆ+–H‡…²}°%}á:¦X¾~Ä!oAZ¨âó q8ƒÀ5é/®ù:£\ o-RIaèOW[Ú&^¨ë: ? ̉)íëAew."˜¹đu)©KÄ䣒€´¶ÑÊ£ÈßK̉Ơ%Đ@4Ñz4Ọ̈”°Ä…÷ vŒØ1bi€¥ °`ôÙbчƒQâ^µ’S˜»Éè !(> -5©pw %Qk"¬ˆØ ®»å 0ÖÑ cÆàÍ¢À(éŒ6Ô!Ü– Ȱ…1|1 ccÓÛ†$£¯Ÿ¬¿Ắ G\KŸè t4fg4„tKàaáˆ̣₫v¤ûZ¸¤úÈ zÁ:yÄlJAaqè=ư^ÊG Úè‘'éc¶V'Á̉ÈE­=hʆ‰¢ơôID˨;+K—`íÅ97gï´…—ÆñÓ¸z¢ơĂ`IFO‹ Œk) {{89˜“̃§:BÓ1ĐKá –Sƒ±æ,xĐÖÑÖ!q>ùµ$µ€̉1ím9W]Y(ë8£¡¯;́œQ̉RKÜ:gµ0ÖƒMđ~tuƠ!9Ɔá̉Z‘±=*ºÈJFÎh9ª/ÆàGŒ2L<&ÆÈk_ÆzÊAñÉuµµaB@Ô”Œzb ælŒ†‘q\%‡›­MƠ؃¥¨+‰!0ªF`Ô ưƠ¥₫”¶Vc¯—‡ăX²ß ŒîHÊEcy\‰;ß9Ü„]Öj–7@n}52#<±;»U)ä ôUà̀O0µÔ#/ÚfÚˆ r…56܉b‹nƒ̣̀b$3ï2€œ€ éḯIC 5÷‘QS–ƒIÿ—åÉ4ŒÏÖ‡ÏF ȵSæ‘CHpáÚÉÜ̃Ÿ³‚¬Èû‚¥£À\ôaŒæb§;y‘p̣GE{J €Üs#WWĂd˜5ÜÛ€CIÁS.ºä¦É–µ˜µÅæaé„¥–O,}Á(Ÿ€çt‘Äs»ÄDL2·0ƒ£“́­×N ×Đ’ŒˆÈ€ÆvÄ ±!Cλ®̀û̀Ơv6Œcu2†!§ \陋#ù% Åø×äºà!wPæ¦p cî³ÅGwt*â’@D&^™zÀfniggn¿œ́-9u0ï1 ‡ÿ› đæX,浕q ïàhÇ黓9¹Đâê¾rtw‰»hÏ{æâd[kF¬O‡¦Mœ±fÆŸêä»Ä́?ólím9cçLD|¨‚ă4—ßÏÅmb³Ân’1ẳ‹SµÍƠÉvÔ6¦¬Ù´4ăÿYá;ùϯ3ü’̣ó“îƯ©\cÔH=„èÉ‘èaqư๛ƒv8cóĐ¹ =# kksR³ đ\Y‰RơÖ–4ÖÚYè0öˆôºØ₫°ùm`Ç‹/–₫³i€£Ï13 „ñCfrC…̣ợø!=™èF®“ñ©iN ‚y—Ÿ¦ơưx¡2yϹơO·ƒ¤Ü°” ëhεápÂ[ F<è#°rûÉ´O°î}:yù̉S|° Ó¡@ƒÊë·î9ÆZ M€ü¸á–-ØöÙù¸Àú1ÆnÎ÷¦ûẦ#—+ù`ù‚ơÍ®ÆAøO›`½ŸG¤₫áböǛ—‡ÔeE‡s¤••!?·tFÉêTßÿ³7xöÏÎ?K, ü+Đ FŸc0ú¯@@lÙîy tÛ;ØÀÁ–&ơyhÛvm°4À̉K‹£Œ>c0zûí7)â Å'q¤ ‰™d;Gâ?›ûJ±É™øäœÄ-cf}®|3ßç·av›8ÿ“øI3̣đîÍnÇCËáçg®3úÍkÛTyÉTßfå™jÛ¬qœ³¼1́Ï\ă?]¦Å̀₫ ÔÁ};~³û;ÿ¼Í5Wÿ÷læơiŒSW‚è̉æaëàßclŸÆx²u°´ẨKOææ¼ $,}Æ`ôÍ·^†”Ühêªr,Ù5Ô5`JW5y˜©ÉÁ\S†ZĐÖÖ…YkÛ-N^e²đÖ ÷t¡¢k %r¯L¡Ơ)¼¥6YRë’e8se₫W!÷=”OG›ÂQj‘HS˘’ưÏÜÓá₫æÜ£g̀»:ä„,é)“”´•a¯¦ G5Æe&$ Ô JQ“Œ(¯©†&¹ƒR…‚¡&äT+éA…Œ4(‚“–†2ŒÔaB®8áDµt©_º0W#•-IÎ@2”ä¨/Tœ́TŒ¡­¢JÖñêĐ2U#·V”—¬ø 5é¹:Yù“Q“6µOÂ=ª*CÍ@Ú4z:T†¾ ” U¡ªOí#«w;%xËhqÚ£DÖơ¦êäÚH•;ÚŒå8…ăT#£!j‹ 9̃gÆBO›\BQ!{²§«6=W¦¾©’¡¹½²̉“…†,E ¢v¨ªÂTSÆZ d̀£@ÆHFÊtOƉ懒¶® g¾´¨>-rÄ$¦nÎ2‘µèỀ å¿Rb¬ơơ8tÆm·ụ̀Ô¤¤¢¡ ]kÅÜ×cèKCƒ®”W“îñÓtµ)7éR94æ̀;‹-ʧIëEGWêêjäzÊ€æ‰B…jƯđÚǬ¦}L̉¦´Ø²9kƒ³FøïPÛÉ[7ñûÁÏ#˜ïQê`ó.~>رbÇ¥Đf¾k´ß2i˜Ä|çlHŸßTëLÉÖŒ¼é0̃^tµÈÿ5}g/4V¤ööơçŸbˆ¢4cû÷´FàêơóüAŸó*Ä’=ç§¹̣2ÏïÏ₫Ÿy6×½éw˜v,®- µu₫r„hÇÂc1³Í ƯÜí}°¿Üñyø̀7₫ É£ô‹ÍË'K, °4À̉À¿ ¬\±¶–æäöükƒÍˆüA3I‹Bëc§–d,ư³/X0ú´đçŒz®^¿´°É.º¥EǶ•¥W–X`i€¥–¦i`ƠÊ•°!Ư~€/s[̣ÈĂ$æBÉ#H¿₫ürÏ×Ăgü<\öYéơ7₫¥À¨Đ­XK.–o^ûhíYƒUäs½“#Ä̀u ²T»+ ̀°ÎÙ bÖFXºJôÑÊ~Lîç¢7 á5Xmi‰Ơ*ÛŸ¯vư³ûư¨å ­……‡?""vÀÏÓ Wˆ<µñÛ, 5ˆÄù:çI!ÿ#qá3éôƠk/NƯ5 ß¾bÂÏÉR ̉&a°¥˜ñ¶>AØ(ÆKơ"ađ¿¿€”¿̃£-–U:PyïkXàÿ`üÙ¬•œ̉¿~æLư6¨ˆ?ZÙÿ́ké̃~ó3¨5Æ=1U…Ë³ĐøÅ¥¢¨¨¯̃»ÍOm5Üö¡¥. k₫Ù´À–ÿÔæôßr°ôẲÏ( ˆ@WS ¶VƯP†jG§̀•¥̀o†3úé‡ïí…°«3úTAéƠ+/ÓâÅZấ˜Äö#çÔMè©«Cb»4–/ä,-ÇÚ- Ø()¢|°*‚U$±~«ÖˆoÁÊ+±z#ư^½bÆ‚_¹A¥ ¶nµÀ}zwăvˆIl€ˆè¬ÛªˆṂ̉TÆ2-Ưă¸!¤ơ½ƒư-·p`ôDH‡Ơ+¤ Ư?|IOˆn–ÂJE,[6sƒY!ʪX!» S:›Â+°LQ’u0øê<Ön£K±LV³Zaø£Ê3Á¨èv9¬T–ƒèr¦ßÂƯª@ÿKCtìP•ƒÈ™œT‘MÛ¨~9>1Cd³4Vª*c™„`ÿ¹c(Lă·RUË·¬{`“Ù,ƒ•J²YK†9ï¿•ê=F…„hnD!ú˜Ṇ̃Ơë !.Fó,cKkèÈs̃Ú X/¾ †äáÀ2¦ú±rĂfHnŸN₫­Øºi«½BB&–6bU Wί7<,— ØñV°¡°³²+gƯ*ä´· PỌ1Z¹êŒ7ªIÎOÑuÛ gJeÚXẰ@›WOÓ¿Đ* hÑ ̃³ H]Û×/ç•-i5=8º¸ĂBOaF_ùí]¹I&Vô‘&$V,ÜG‘e«°qó&ˆo¦÷¬ilŒ4 &Â[sB˱UFzúf>‰ë¿]z+V<‡Èçá ˶̉, °40“DED8¢xg{4fw$ªÊcWx(Œ2•áœ~̣Á{,}ª(”WÙÍn̉Gu3üễD₫‰Ïp ÿ=äÿ9̣]‡¦³´\ú;›4ø9ßĂ®Yܰ̃[Ó„>¤ÜÆ̃Ú«ˆ̀jGlḈĨƒµKBX 9Ç DµÜAÎøÇH®"V¸­ƒUú(ÚÎÁïÀ(R‡¿Æ¡ ÷(¢$­‘úmxº[`)}l7Z” cà,´7CHÑÚßƠñăĐ|û3˜ưéG诂˜,ˆÊZ@öØ‹0₫ƯÁôÛ÷¡˜¿K9 ’›ÄÓ[`đÍ¥Y`”ûlu@> ~÷æ`tí₫^˜üúHûËa‰$d®₫†—ʰ̃g/µåCHÚ*€UØR{ ú·[°LhVù¤Bẵ×ÔÎ?ÀđØl¯Ê@"Xi·ª¯BÏ₫£÷®B2È„f–b¥}<4̃ư¦¿ưê Uç«ûP*ß= –nEhrô'&00¦†ÄẠà»âkm³V0Çø‹—Q[ZæÎ^ô4åAIL ̃i5xơÛ89Ô‹Nô÷·!̃C—3Ç›,bÑßV5¼º–nAâÑ>äpÇKÁ4ƠTVWg…[íEqr6đA×< YLÆ9µèé́Dgo?+R *ÎĐ#¿OR(¡ªºÛf€Ñ¥kå°·° ]=Ưh¬k@[[ 2Cͱ̃[¯j¬̉*4PHÛ¶n ¡£.Zâ¤Â±]B’Ecc#ZÛ;©­Cèk/…µ̉f*œv¥cǘ è-ẬYíV²Am×t |±~иJ̉Çß½ƒ+§&ɪ³ =}h>¼ÊëéĐ#"}u£È÷"ZäƠµÙ6£ÍiØÊYslbÇ€¥–X˜M|0ÊpFCư0F!¶ß»ó6çÊRŒ2¢úÏ>ºÏêŒ>0ú*烺E¸E ưH¸3Kg(êcÍJ.ÇQ̉­8}‚C¡îœ˜¾Ï½×‡€“(ŒÜq;‹Î"µÿD<ôî^Ȉ-Á ¥0Du¼‹è8hXÀ9ë 2›Z!C:¨Z¤ĂÁɘM#;(X`ưf5Ø–ÜFbF 6KéĂ:®^{ë°đ% ±h QWhưđ# oak°;6¦µÁèWßB)ÆÊ$ Øư6L¿¸‰í‘¾ØrhF?|¹HM̃GZ90øÙÅ9ÁèÚ%0øí€Q!ih|ó#4kc°B̃?üªiN‘4‚̉í_B1È«́#¡8PUÛ4 Ưs: >Us‡úG¿̃É Hø„AáÆ0~»b[ˆ;¶ÉJo~Ă›íØäă™cw`̣éelP%Û È¿üKÊ;Í₫Ø̃~&ư-”K#¦Áèj¼̣—ÿÂơÎ$,ăâ~*I"ö¤:b[d``³ ›Ô×@'pÖGW̉q#BÇ4Pü.2ϨÀ?s3däD§8¸ómàRfûđÑ7o"ÉF Ü%å ±j5‚ ÇđíÛ½0Ú´”s_B/ƯmpU¦ÿE¥p°³ñö²ÜwÑ<Ô³ƠÄá̃fˆÊQ¤¹ñ€¼È:(“»ª)àĂ@ỞˆªBKª#ơ‰Ë©–ÑĐÂÖµ|N%son0º„êĐ77ƒ¶² qy7@…Ạ̀™ó­Đ]'ª´¥{ €¹P36…•ë’Ơ‚¡£{±rªM4ÎäjKiÛ4]É1MµûgˆéE¥-P30‚$gp\ºú¨†µ\ñÏCÓrIW¼ơóÑ­Ï=œˆH ¼tÍɶœwÔ¼2ĐטŒœ2–#¤¬¥‘æÏ5g, âY`iàßœ–.…!¹ácŒ–ü½=´o/b£vr®Á₫>°01äpH?ÿøŒ> 0zưú­©E(ï^äÁql›ÁaƒƠÁ‹ˆ/9‚ơb…î®a¤·ƠbĐ˜́ïCÔ¡zX…ALC?̀=óˆûvrb« åV„Ôc_#£ûu$µ½ô¡/QræôƠ7q>¢V™'XƯ„ÍSb*…6B»ß€oH4¬“'ÖưÂóÆ‘>₫\œ¬°TÁÚ¿ÿr;L¸í̉$ö‡$Ẫ ‘åä—ô‹_@ơ` ¯OêPzù=h íçqù`ôÖ?h¤Ä£¯cƒ̉úYÓJljz&w‡±-¿FŸ̃ÂV+F- é₫· N qsá)˜ÿù#lóóƒÜ¥ ï¥Ơ!yĐÿå}lVçrí–ZeÂđÇ;Øb¹ËŒwC÷ǯ±ƯVóLH9zÄe•#ă*Y7hưøäĂ ¹íp„Æ_A¥R€3*DªââX»z„ ­]đ Ⱥ¡/é ́K#4₫ÎiưRØh„7¬„íQUTữï(c;Ă…8 vq8>tR36,!„µ¢6ÉIàưUˆ=T‡ômÎ=ƠĐĂè?ÆUAeè-ñăÜ—%đÖ̉…͸.ßb‚ê¡V˜ó¹­s¾?7]%i€ä̉ôbxxư=ăxû̃YØn^ƒˆb\¹v5EiØ'sÍ).§ºwÎ̃¸–剛­Öͪ×À' MƠ X-p_É=Í5¤^̣ˆ}SpĂÈd+ô—MÏË:ơPôôdsÇKBÄ¡ T!^i‚ºöF¸«>¨²Đœ²Ï¦{vŒØ1bià߃–óŒü‰º8Ør –̀Oä̉‰Ù3‰1dbé'¤3:ÜßË0=m@zăúƠ) ¡êw”Àè1H­$¾ơ°-¼„½Å‹´ÖóđODÖéáájƒ¥̣Fÿđ1éŒrÁΠwïA¥Àè ¨₫́çP>ÀçpÉCñÆ;ĐKŸes8£ß\ÁZâÜÎ̃d8`ôwoCBAPäËÍ·Ü& :߃Ÿÿz§ê±†–bca7´^́†\×4_>¥æ*¨¾u…í:¬+†₫w !Ïåî£̣ïb‹µ,–›EC÷wŸc›Én;¤ü¨ü!aQ9hÿöçñăơqµÔ?ưœú5/÷Kh¹($Ơ—sú*L:j¾›`½rÄưä̃•K!ï¾  ØE y7Ơá—¼k!̃U±‹BksÄg+Q„6¢<̃aG1º¸™;Œ¸un0BU#¬6nÄîÚn$Xpơ8•]÷¢¹öÑÚmæ¨j‚Ñù6Hi”öµĂW‹£óó­FDå0:²‚!¹–QBƯÄüƠ}]!¨Û =·Ơơ-=}§:r ÎăøÊ¸!)'5èÅÑ¡æpÙ•}ÑĐZÚ&d©Ùùdià§ÑÀ²eK9–ó|7Ǹoœ2‰1\b8¥Œ5ư'}H`´£O ‚ÑU^ª½‡ÂÓߣàø)&‘µª°IÇñ¯È°‰€èáZ(mg>°ËHÔ~{+Û`YƒøqXú#ụÔ·1ÜÏuP÷/C\×û8xükä¾ø#uÛÊp¢VĂ>ÿ<kªg‰ù=û3L¾¹¹$w%Ö„”Đ{?ẤßAûôIü₫çP©‰™k̀p‡\Q½:˜>­3:Ÿ8Xx)´‚$(üẹ̀Å×Ye©9îE_ÏÁY"gaøg7ă₫gb²³¥¥åhëéÅÁ]ö3ÄƠbΘ$Û₫8;k~aè{&¢k ‹cÑXÛĐˆ¢´Ø$¨²ñ₫lÑrC5ơ4VAYe=ê*2 µQPL-“=GqùüI”¥C_ë©@Ù%}kÊJPƯчÉÓ7đñÇça/¹&₫ è¢g-ơƠ()ÊGQy-¤‡`+ù*Uw؉¶¡A´5Ö¢´¨…‡«P•­­K!¥ă€Ü¢"t»†»·¯R}Eˆ ±Å NÛE`ä›Äécåê#@¤„@B€‹)²ÑŸĐ<^m̃;®WnµÅ™?Á+O ¹êÊkZĐƠT“í‚ûˆh»‚»¯€å\~öĂơÓ>\́ø±ăÇ̉À¿ 0œQMU%˜¨^Âz3à“Ï3 Ôœ3ÿsÄô}€Á~Œ>m,ºDŒ2Ï5d€#§k C¬ä6-•ÀVu (haư”±ˆ(ÖËhc»’*¹w"ƯCù¾~“¤)¾újs³(qu §c 9u=¬ă»á…¸œ.¤”‰9 t¯Øăx¿ƒïboùvV\Cjă8ô• 8®åô€êj ¬V“Y›±ÖœÛ›é@tôRy-ˆ9:c½ –®ä¨Ø•T†˜ƒ9Ç·ÄrÇ ‹B„,ªeß…á«Íä~J`‘’uójs+ªŸ?¯Âj+¬’ç‰̃9ưZåÆXçh‡ƠÊ3­»¹.=zæ€5Zr³@"ó)ÖÙR;$°ÊÔ«̃“1©‹3ű—™ÓĐ“̃HWoØ u¹)Înwä•#71 f̃äl> †s¸7·@ïÅ‹ˆ6^ÿo£’üĂ"æGFs‚ÜÇù€5sèP„‹?qéwÀPa¢"ëaâDm €̉¦i ºMĂ!ơ„:PY%r鵡ƠeƠ¶€_0•INó=lu±fƒ)m*Fđ ¥gđs6ÅF‡†̣z¥{¡Áđơ äGízæ@Jʆæ®̃Ü2é{G";5Êâ‹· Ø‘YB>@ÛĐÖÚÖ©Dÿ·5ÀßBéß₫0°\L6æä­bî1[³Mûs³l!÷o?́‡~±ë†ÍÇ̉ KóÑ€ e¸¡‚`”/²gÁè3¡ü*Y0Ê.àçk_ER±´´œ#™Cn ß0·çk̃Øù`烥–_`Áè3‹©£Ïïâa76vnX`i€¥–Xøé4À‚ÑÅ Âg˜‡ïgtƒ¢ êG'pöÂyLN c»O¸YèÚ5m!-"…½9û¡ºn3*p̣øFGF0Bitt#ƒ0–äH¨9£¸±ă#¨É‰¢’‹ÑûÂ-'ä×ủ{'0ÚU‰@ ®àv=7¤$ÏđMúÀB]¦Œ̣ă'Q}ÀoÊDh•,öädÁrótư«É QvF0Ö oDbmNÏIÁ~t7ç@iơlĂ‘ơđ‰JAÏ_ær™¤jåĂm£8®f/¼…CqÄơ=ö ¾gÆeŒBHEˆµ ÏHÊ–Áä¼¼c4fC= ˆơ4ÀrhVLJQÙµ¸p"[N[ü“+ ‹dtNâ{_Kv»é?†̣?yóZ±z ß ¸åzê ¢Ë!&¶fq¡Wç©OÍ6‰1Ïp¾„`™…Ó'£ü@đŒˆQëm‘_ßĂ]«¹ÑP\»8×_¢bʈ>X‹Ñ‰ tׄµü"¹×¢ë(”j.zGÇ1̉SVÊ‹ôô 5̣¯ÚØ7ñ‘d†Ûa€‡‚-Îh§½́äH94ÅׯxSJ×™•=¸pã:\¸Ü$ó@”·ñÖjo#â|Œ±’ă†L[5QPßÉYÇ£ƒí8é€ơ<¯+6È#0ñ&ÏŸCY@´4̣ná²ơưÇpf̣†;ë‘j3ợ̃úeû₫Ó;†! FŸ!Đ\LƠ|ΨȲUØ*m…K'±ÇNë׬àmÄ2h{ëçøÛoîa·₫Zî=Q54è‚%YçĐÊ´„””ÔtÚ¾+E…!,aºáä́°‡¢>öîBgIÔ‚ñÇW+: ª«ĨfPR3DÜ‘>,ăDŸQtç¸íïRpñ‰iÇàÆ‡wpi´úüèB¢Øßx%^Üp–LR ¯ÁÄ‘ ,–GÓÙ D«Ïè‡ä¶ôl&Q‹©z ¥·–[y Vd+"’ÓáKăˆ‡.ï–„±±ŃpÔƒ´”,ŒÜ÷bp¼A:ë±NĂ=ôÑOđ2…,¶m0Zi¬R<ä9mÓwEFÚ>nêFC7‚s½¢®¾ÿz'ĂN_J:6§½ ÙAÚOŪ₫_a“sIÈCz„ùƠ§\)ë€êÆŒ™>qäêe ³~?V=Æ»Of́—!¶²ƒjÁØ,!6E3Bb¨>²XW¨¨Ó«@ïá(ˆ/äLŸB•ÆéÇ…K5TWÛ̃2ª€̃¼²Z^ óÈĂ85RW%¸Æ`èôd­_p̃6́Äøé́r̉…²‘ªÆO¢(„‚EđÆTtùl“s@ÿ…a8Ẹ̈ö¬Ç{-<£´'í'Æ‘̀÷cLï‰ëSÀccØïcÆY«ZÖä?v©n2XµÁ5c“(w€¢´Tœq˜`TĘp.̣†îÈÊMAVQ-ÚL¢…×bôƠ[8Ù^O3-È«`ï¡6Ưç8u }2óÍvY`h€£‹A„Ï0ÏL1½4Ê(®¸‹ gCHÛ»Đ:tÚ¸x„”P9ØH\@e¤76ÀOs:F·àÂרyyÁÓÜ€µF8Ú̉MAî¡„……ÉÁ́ô‚1ÏF[Å^.‰6ÉÊsbƒ+Ûï™#Đ̀Åf™\…̣̀t”ƠÔ#̉‚ëc’á`ØP{Zđ>Z+°«¦¹^jôL•ƠÇxA"pKoB}hÜà$PĐƯ†@0ê‘]‡Æto¼Âˆ)ï@f t½SÑq4n†[÷”Z4æ ÆG_Ûèƒ82Å‘[±v4•·Î¨«Qú»ÓfDú¢1ÅƠ]¶ .»RQÓÚ…®înÔÊ€›‘eê0#¼\j23ú*´Ơ }#ePä¹ cA ¢Xxr4À‚Ñg4Sơ 0*¤€¡x¨¸‹VBYG%\lĂ0Bñ¹ăŒœ,5Ưª€ôÖ~Tˆ‚»›ÜÜÜáîî5i.8ơ+¬E^¸µÀGi+TƠaë´E´ºëüü_!^À2x›éŒœ=rB¿u&§DÍa!0º Ùdb¤€¬JEÛN}t¶X†£µí0T ±ÜuƯMđĐ`€ƒêHl™·;×7ê‡;$̣©ºtĐ m±Ccẁ7ÏôMÊƯ0¶£¤·}]¯íÚî'…SyØy”¸#‡`¾}9–m5FQ+}T³¢áéÄBôu×ÁSwÚ¡>S®K\á 0:׿䰝M™®ÀV=w>­Éâi€*¼!º3y¬̀Í`eç‚È}(.L„}üV«ú ‹8µÙѾ0³rGFĂ0R}±–Ç“·Ø‹{?~MQ€bàæè„ˆ}1ĐƯ¼V)8Ơ_ E'LTÆă#T%ÎúrI$Vö¡»"Îä58á»ÂbJUB½õÇ«gÛé韈hø»˜qÛ„EVË"¡²ù»=afj'OĦDn*9̀'µEmC¤qí®Lƒ™™)·Oçrq5ÄHA¨»5Ô•UaœîÚ²ôçr•lñ₫_¡#'®ä‡6’é#½/.©Èœ:ß33Ø¡„üĂÓJY¤Ôö£ëH2œ¬­’tƒG`"Nt#º1%íè¢p.¶VØ[»¿ü'îß7¨đr8Å×á́đQ„ºXÁ9(}§Na¿-‰E4p₫‹_à̃¹&„{ÚÑ\¹!»ñ8†KC°v¡èUœqå‚Ѭ+1‚W^5 vÚcÅêMPU£ƒŸĐV¤TÔ!Îs₫èNª̃û(è@2¶­„‚*6®Z‡ƯE¨Êơœ÷P±JÎƠ}ơ0ZEbnEUÈnY‹mú»ĐÓ‘6+°ÂlZØ‚̀î„in‚Ø69¨O_¡µæh́¯„©¤€×¥jÄém›ŒÚÇÖà—¸_E₫AU°5Ø_Ó4Œ.—6A~ KÈÙĂY«¡û H:Ó/m1ˆ®¤Đº•½h-I‚í»ÓĐÑG‡ û™~ƒµÜâ) Â4‹¾Ơ|óÑ[±›yOî̀‚v,Yà̉ FƒŸaÅ€ÑÁXmZû¬aÜè'=3I”ơ7Àd³Ũ?Kă=¨­©AMM-jk̉[£gµ«¬éÁ‚\D1$T5 Á{ÚWç6̉·:ÚXEA‰Ëá—‚^[÷tv¢­©»]u97¥8£Â2h"N’.…ă\ë˜Nj{ ÁçđI˜¡²µ >̣BXªK¾ÆB¨­b8½$¦¿t'º›yư¨¡~P¢8È®äƒQX'V¢&Ùm–ăw₫f÷ ]Bºt…£·pûÚêëp̣•»¸Ü’I¦=$̃o¼€»¯œBS]=F®ÜÆ+‡Hwææ¹U÷̀ÄÄp5Œ7 êHJ`W₫!dí£°¦|`'*̣s/ .Öbˆ^—! ´‡Bl ̀Ơ:[HTk9®º†Œu"^{©æ‚íc™¨ ’ ×ñ¼_úöqÄ‘›œö¡«¹̣SÖØ]Ô‚C1¼đ¬BÊèº|e₫ósÑ7Ó¥Ñ}óäzh=4̣”Oz)qvç̣}* %3$ÈÁÁƒ‘_̉×nŸ„³—û§à‚×ovĂx­Àđ@ç:RÏè*ÀÆY@Yƃ",5äBfjL‰3x¨9¢SŒT1Ú:* C´ÈçΗŸÆ±Ø‡Đ7ŸèF]TŒ TyZ¿YÙ«# ;±f…&ú.ŸAôT¸Uzg³3zÆk¡³(îè\`t)"Uc¿§>ä́SñîưS0Ú EUHöçE:{ÈÁ(0•…;!¾ÁgưÖ20đNFUñüÎøÅ•]ÑDEÑ(¹tĂ¹NØ íŒÖ̃È̀'R§óáVØQøT¯CÇñæ©\:0*àH_#Ẹó€QU«`R¹(„̃&~ùÁè’¥›±§öqÛÏ ¹®Ôq̃Âk'@ƒ³VĂ3§Ÿ¢o]G[C-z&_Âë]°̃>Sgy!0*i‰¡cƯđ&? XÉ̉À“§Œ>C ¹˜ªF‡Úá,M›ëF+{é â­M‘×V 3̉åégr/¹ I¤'•»C³éÄq›fó¡ o©Å_7‚kÈ~ôSs[YȘD ¥9ƒ«.0G’óNÇq¹»hiAÓ)çNÖAo#?¨8öU4aŸ«6̀²Q—Îå‘lƠàübz¡-¦8ÚÚƠ¹>`ssF £c¼5r<0"´NƠCăH°“…´e ;NëzØ]!¬æq”ÏRx8‚Qh>ÎéC€ÖÜj3LJ€˜=é忆ËgOâøè Z«ÂA™»5ȹ€—ÎM’a0†Ă“¸ơÊ(́ybue»=èjËyŒ1uØ$·£'ÓËu«Ai WïƠ(<¯¾s £C\Ă6¦́K/ÜDq,“—ä*ä¿  ‹4xᨈ¬€q4O^»s§& ˆ÷‘ºA2Œ¤øâd ’P¢}®³èCÚ¹86̃́ư{(bR00yư<•¹ô«îG"ñ̀9ik«?q¼J 5‹æ̀wăƠÛ/Ïèăåo #ÈZddSSÎæü¹0¡¶7WÄÎËư]+Áj¨ Ö)zR¨Ơ<ȯ×BƠP#ŒyÜ\¦\áuhm†É†Åë̀Íơ9Xü[¬\·†¤°Éåuˆ÷T©ù$ îH6 ¯¦¡>$)ÂưÎâŒzÍË]-gƒ̃:¬†¬–>T¥×c›nº;Ó礱iZ̃¬n„hl„„¬:ô4¤!¼Æ Ä5ÛÎ×s§ñŒÎÿ¡3*ç¸h·Æœ·,“DZĂ(ÊvëC\Ö½'à.ĂßÖ`Ga?z}fp¿ç£̣{q́ $8ȱ@t¾ƒûŒ¥Ÿ@,] "|†yfêŒÊà錺*ˆ¯HL_A`Ô•'̉rÉîÅ•ÑNôö†₫f%¤75“^&|̀NÚQ«<+pzS^¥̣¦Føéè Îñø¦m”˜ÉY°«@u¦'T ‚ĐØ˜₫kúeđØß‚Û¯F__úzñ̉;7°[{¬éF— 2; ™ÅuÈ â© đ>\v3b öG&; ĐT6ÿu·ÂOkÓ̀7¯U‰.3Æ%¢¸ ™!Æ0đOCKéîl‡¸r4äû͸ç“̣́ÀYc»Öqu¸y¹êóåƒó²”B¶n‡¶‰=âû €V@néR”µ!Ó—ÔÄ%°qăFl_‹¥"Ó* *vQƠƠƯ †̃bhK™‘Gâ¢o侧䓈Ụ́t(K¬‡•)!!UËTDUPI¢T'¹¹Ä¥ œŒEVBb›, ¬=Û8‰K Ááb !$¯ô=gû’%‘ƯOF(–ÓlKVYbè…«På֯ዖ†´9”¶ê’K)¶Ï¢WƠ€Ô1™Â}”´BKc>d̃qÉèÅHúC¹ºq©pÔŒöÂyÓôlµLÂPÛ>l\£áF˜HL£ˆ¸1Fé0%P¸æ£K ²ăzíÖs\CMŒÚÉüôµV/¤Æ£ÇH8ư\‰è̉^”„ÎàZ§†Â!DiOh½Èjôy/̃t¡"TcjM,7ˆĂ0”¦Œ®àHoâ=¦uR"rÑ^3£]ÖÑ¥¨Ị̂œ~º:gT*¹¤£·9qÆCh«©6éĂ5Uï\¹q1Ö̉,Đø @ƒå$>yNâ¿Û˜²`ôÍÅTÍ£ŒëñFh?GVåfÊX½‚…UPw‚@ W|´t‹†^ÿÿÍyè‰É › (¢­ç³n±EËØ̉üL±MZaù-è.Û‹MQŒd 0rjt7§ă¹ëy¥áƠ·N"9Ä ’[ bæ‡ÆAÄXmƒŒy††Ë $!Aàf:­]½BkH,̃1†xăéµeRú2́§̃R¥0œ 1ï• CđÜÎăt,Ơ@3ỴëËÏ(sƒ8é„1g•2é!v#\KÀ0E`ăY†ơ:h89X{-¬á¹Úl‹c“ä&ËY›7n…±w ï—âj¬’sCïä$2üͰmă&hÙE¢ÿø8âløÆIÂX-¶a9µè¨ŒÇÆơ<·Bä ´ô ₫đƯ¤»(cƠuØ@ă°~í*kzâ@·t£¦0rÚu ïM@T€T¤7c­Øèûdc¬;2ËÈ—Q8üb¸+aÆMP3vBtBÔ%¸5ǽ/s}0VÉá@Ư Æ&ÆÑ™6ơÙ ộzd¥±Ô¦ Ø&¯€˜xx×ñq¤&ûá®8g}îÍUd¢S’âjFúÄßç˜ ÔÆb=O¤n¹¯ “ĐØ"15 H )í£öí‚yIÓs@ÑÈøó_ïĂ[–;¯Zî èí̀™aÆßWS¼ø “¤ q₫\Đ;¢ZÈ<Ú€ôP;l߸’ º£qT„ERʬ@e’'ä·m†6é;¿üƯărÓ̃ù—èZ„ c²1úr›!«ë‚ê‰K8Lă¶\í§ºa±QŒn0Cש.˜=6gt „Ö› ~́8 "l EÇ]¥Ư #BA#¶íº¾>5A·G¢›±¯r=‡vB]V¶; ql´– ¦2¢ëtP{r $%™6Zëè£89Pk5I2, Gßé1D̀Đ™̃€D26k.ß;cN¶́Áqƒ`KHiÚ£lø$JĂMgé<`T×-ă§Úa.è†Ău%z’AAỊ̈w‘:Ë•œö®QuG÷‰“¤zaI:TiǾ@ϱcˆ·’€èZ9‡£±ÎÙ,EC7ÔŸFq¨æÔ¡tÅ1Ø„çb„t«å6đö”%¤[ßïøµ» ¶ZŒT$ˆ¶Ör÷˜±cÀ̉À¥Œ.>Ă<|?£Jvh:vW_ ñçÉ ÏKΆ($…Äâl˜IM[¥ÚÄWáÆ+}P_)° ²Èá“oæFºMßG;‡q‚|é5—́ƒÆ†™Oû}¸ûÅḿ2æ ,['‡]ä·p̣̀yœ:qC]$Ú÷2äpm6¨y`øúeœ Áù5œ˜8†cô;;Êk׫"¹0k†[™ía("î́ê©…-¢á3oIÅ&₫=¡mÈ"Ë̃³dÄtŒSæ§̀₫öƒPX&µÀr]³û¡\Q1isÔO‡ă:Ο:ưæ¼îrèz·mpœÊ##“j„X)̣>¢P´ AmïS]㤗»×SOÀbW» kpöâ\½|,ÍIJí¡Cß­wqçÖ%  Oơ¿&'R@¼)úë¯àl_&ÖMơq9‰ƒq¨¡‡æâ‰«QKFÆ2|9ăKÑ%ơ]8~œ¶!=’ôø–q9W2ÈÎŒxˆk#!̉̀Ä7/`—‘ç‘̃[µYQ9d¸E@g̣ø(ê‹â¡'Ăă„È`I6L$ÏƯ]3ß²èÄÉI¯‘^”e']t‹r›ăôñc4fSHT\qEM8vâNÅáÔd*Ï‚©4w äM|u`Ç ß›S €ü»:ÅÅ¥³'ĐY“„mF&«)^«‚Î!\"KçN£h¿7S,9ó T÷Œpöñ¡6Äûp÷#†¿‰ỗKÈóÑÛ±Q̣{i7eø·dÉrxÁÓ©sqưÚ%ŒtCáàÈâÈÉ—đ̃7HƠd|»r÷±Îê4ÈÓá£́°4đdi€£Ïh.¦êi1½€{%ÁßO† ]7=Ê"cܰ̀•Ÿëºh:=,ߣÔÅ|X,“qíăO.‡øâ÷¹Æƒ/~;Oç¯}í£@ßç̀#ô˜ư§r§=6–³Æ‰©óIŸô9ư˜‡>i|æ|₫“Ụ́đ±cÆôa}|lúüImklD±³¬·."y§óœ₫Nw­.yÈZ]˜næ^ă ¿GƯ9hJBÁ ù•ƯxûÎi2tĐ#]ư ÎÓ\s6ÿº™û0°P™‚ûÎcÓÉ"ú¶˜ñdó<™ï;Ïß8²`t1ˆđæaĂ>‹†ƯÈØ9ùg̉€„´Ü<¼à`¦± ‡öŸÙVÙ«7‘+.8Zé p(Yúg7[.K[ÿ 4À‚Ñg4S5 FÙä_a#ù)mTQQ›₫9cđSæ…}—Ư{X`iàiÑ FƒŸaŒ²›ÁÓÚ e=̣̣̣, } œÓg9§lỨ̃Å̉K‹¥Œ>C ¹˜ªù`t¥¸,\H´åâä Oè)ñ­º—CEßÚ*¼đ£¦•SQÀÑeTу‡—/üưư§“¯#$×̣­}—CÍ̀~~0POïrö¢Z u3'z϶d5ÎÓ \¹~ ·/à₫e4̀, ­4m¡¿„,”Ô”°N Ä¥đrq(«ÊR,èePÔ7‡—¯ßŒ~x¹[bƒ@&.Ñ c³”d· „ƒ–™=œM°aù,½±•›aâàÁ)×ƠFëê_""]kWÎ3OGSl™rĂ3ŒPĐƒ«‹3T$gù]¾Ú¦vđ¦öz:cÛŒ÷₫ó6'‘롨"GQƒ̃÷Ç£­­MOp ˜1]èC°~›œƯ=§Ö•§‹)Ö øO•Ö²€7³wx;Cc;oM ‰ÁÄ™»føÉÇĂ&êdàG†xVN3ùy¹ÁÖZʈIh­¬Ư|àïăM©GđaËê].8Ÿ Í7ûü?oÿưW™sŒ.>Ă<|kúuR†ÈªèÀ;Ÿ~€I²^÷³bb¶3 Kư÷ÀŸ>†&ß¹ä©'×([ä‘Ơw—FÚQQ^rJ(?œMNt“ơđN©ÆØP7jZ1B–ϱNürçY´Ë¶" ù9ÀnD]c7®¾ú:úïæX9+‘‹¡îÎ\l˜çĂ!¼Ñ7ø%^ÊÇ^>¡U (˜@Œ€Ó-–i˜èH ˆD²hºöµƠÍèGqn4d¦"0ñÚK·ùMäÎÊœ¬E6!<«œ¢§\ÄûŸƯ€Ÿ€%ñ²í†È­ïĂ`OVT¢¹wí‡÷A…‰ă½F ñ¥íäî¥U4f]ưè­Ï#çí\¯å‰¦xëδdûOj,—ĐFƯÅ[¸ÿî«ël ñ¦¨PG‹đùcˆ?ŸÆj8ø¹Cj*BÑămä+¥ÈƠNÔ₫,ú`Áè“â ƒQaøg7ăƠ'h]Upö†ǜHlc,ßÉI¾ … íC}ùnlÅ ù80“¡g[~à '?g_9R†–É7qïÚQ̣(±î±iÓÏÊË(ÄM|üÎthƯb‚̉Î1Œô4£²¦íÎ@–Y,Đfià?œX0ú æbª)¦GQO#…₫´n•AÉñë¸{ÿCÔGóÜ=Qäœ*rdN˜0ŃçŒÀ´âÆ1é+ƒ/’¤ÅØn/ƒÄüÖ³̣{Đ̃Z Ço ùYÜ—Çqï¢@‘€ÚZæ’Ă\²yä‹´]íup“å×µ₫¨ƯÇë•e›ÙÆX âôÊQà€Ä¬’+Å®Ú; †é£ª®«© äă´³º?œW†]Rú+ââĂK!¿}©jPqNÄ`gd§ÔÄ”‘oĐnË-²*ĐPÚ½¹(Ï ™ry#.g‡ÊºlX+ó¹¾Ka]†ö̉ày£úđÛ$´BJºeÇÊÛg;›Á6EMèCaÛú,•7ʨ̉3̣SºñÎô:IEèÓ3UnXP&­\³«×®Å&)ẽ{Ó.–¯ÙD÷ƒ0ùỆCkC ˆ¯œvWļ/´r#­ôµ”¸nçfŨ1Ï´U §æŒæ£PeÁèSåü. FE–[$¾ÏÍé9\%mƒ“#đ‘ö—ªá‡ư™sF`rÍjÄ‘Ưæ³\?qËÓ'úoÈđ¦«Bp̀éÂ`Ñ´{.Ië r™µo±¿ĐÀ>_xßdLj£gM,] "|†y *¤ˆ¢–j́K¯Ăơ‹íĐç6T6ÂŒDpé̉á »ŒTÄ: €yÔ5"̉zZ|..­‹]±;¡¹uŹ­’¡ö́9«’ăđÖyÂ.Y²¡G‘BâưỔZ$ùªLƠ¯ENçÛë’xá·!·½ Ñ–Ûè¹<Ñr$¾€ŸF! ‘ØĐx ñÿT7£¸—‰XĂ”ÇƯxŒv¢»2̉ÿ—&ÑƯqF₫F%”lP̉2€¡Á> £¹8r«¹€BLÊ9u] ®3ùö¼xé ®¯<+¦f`t…¸"Âb£`¦Â§®JK@v.Nv"--{‚œ°·Vl5B5ù×ܡަj°a¦ƒ{f¾—)z¡Ö§­ÔL¿§̀3á&h@Gâ±é´¦£̀£I#§<vêåë?œ“ô¬Á[? `Ÿ$ °`ôÍÅT½ eÂø°×BîØ èˆÓ£M;5Ù,‹´Î“x™â*÷ơö¢—V:jË@!́8T‹Œ30*¤Êzw=Í)Ññ)ÄßđßH·›â´l£6 {ΓÓö$í„¥®"VñồT‰k:/]©ª.M/¿†±e¨O˜ q¸Œæ7¶7Àj--̣-è́¬$î.pHLåe\!ÚÜ~ôr‰¶Ö€"1‹b£u"z)¤ßÖ99pÛQ2 Œ.Y-ƒ̀ëx÷å3è' véÍ{8UÍL_„7bgÅ$î½u™€ZN½ø.nôQ{Á†TçĂcÓó6ª5jÄmB³ 1‰"&¿ù >ºY3Caéª-°´·‚́¬¥ˆ/.(¾{ÉɶZđ!§€êF.wr«ªTd¸ [Ê9Äy4—á:r—Ó€†² pn0 h4}ơ°—ăús–r䌱 E5̉ «Á¯¾¼†@M.GtÅ\@¸_vJûé0“k%$&‹TèT¦Ă£+èBEC{bØ]1„æ${n ÑMˆj}¾1EŒ>30ºI{'~…ÿEsœÀz†}D&µ#— ä—7¡·¥Æ›†vP1^»{džèÀ1yw_‡·€.6 .…srÚ §C• €D½Đ" Ôíă0—"¤¼G£¬¦Û°Ơ #×Î!Twcÿ$?plY,`bià_ƒX0ºDø ó, ŒRlzû-"ØbŸ[×Û¡»A–Äùơ0ÛªHa'»é---^̉Ķ Œ₫¢("Këp`]ư ởúXˆ®Xƒ­’[±釿°E×l‡cÀndU¢oâ Fê3 ,¾²Ö‘μ»Öd'fa+óÁ’ ¡h9iđx`g©2Ún´[Ñq4 Û˜|Âʨ% ëb&Đ-h¨ÉMà%"›_ÑTOƠ™ââ©ăƒ`TÜ ư•&·;tu àŸxg5ĂAz9–IZ£aü *÷À@G®;ó0I¡ĂŒgF¯™Œ)#«uÙ¾³¢‰@|ól’Ja eŒ‘z¸#㤫7¡Sxë-̉µ[-= ]Äñ=‰;Kv¤ ¹Óê ‚›¯]j-ÎôE€·ƒáë₫ ‘B±½-C̣ĐS¾k†Hß;¹eÉ<ÀBê•Ăíp–ŸÉµZK uøÚỵ‚_@ɰnÉÎ$Cb:Ê[a¶zz\­‘ăM¬˜₫ '-ÆØKPL/,º[$·Al• ÷RË–¯À̉©CÂj„äu¢)Ư¢¢ë°§zăµi°5Ô†‰cÆÎ¢rÙ z̃ ‹Êá¹Cñ.ỨÎq¤ÙMKfÖk s¸E){¹‡:.à믮ĂGm– Ëơ|È>ö¯,XÈÎÓ£̉ FŸ!Đ\LƠ‹£ §qÉ _C{zJÊa²MéMM5Ö“$§́ZvØôäp°¶;íæÎÿPâZ½å=(‹³¢ØÏ!hGLoqwn¿„öZÔ´œÄ{ï‚ăv₫R>yƠÈđAHâ!&î'‚ 'u+¬·>(ä·i£ñ´4CáªÎù!› F…à•S‡ú4Oü¢Øs¤YÁFĐó%ƯỌ́ØNÇƯ“kÑç3CWóa`T˜ÄœeĂ—0PMÖÉCaq́k¡¬)^\ÇëçstMvĂXB‰ÍíØi8­b0]ÎrDUµ ͋ϥœÙ—Ơ8r%Å%`ÀÉá̉äå$AOźv磩(|†ŸÇ¾R9àÎUTQH‡Y!׫¹côÖ ¨+(¡R*“Ê-ÊÏE¨»!ÖI¢j zËô¼Ñ7VÇ‚ÑgFûaP´GkM ¶n5GûD3t¸ÙâzQ-¤ÀúR÷/¦ƒh́œ¡x7[%a¬'R³$kdM—]ŒĂ%™đGGk,•V±à‹à, üÓ FƒŸa ˜ºIŒ-hÀĈé‰3ꪴ³eœ̉păÖÛxój´7ÈmF¤ÅÜ₫7Û$c´=Ê<.–˜a:;*‰£ÊwΤe«ÖC^QëVđ (¼¹7RăÜ >£y%Âóp(Ö JF¡¨«̃7÷¦",èÂô ƒ«»;Ü]]È‚₫4 Ư¦̣oq&ØB ±µ±æ<·/KƠ9Y7`ZƒĐƒ­(‰x0÷ôGx²Ûêá";~Đ|ï Ö$c3ÿƒ»TÅHtR„¼m†ºCe Tm@ÂÑ^TÄ[̀£fá(Ná7̃˜­’µCóÉ›èËt}Èæº[dd!µmĂ4gt©˜'vă£Ï_€ñ a˜$6¢Ÿ€-ă±€#n'n©¸W,¯E´.’üùX¾Ä×qÚ)í¼ed ".¸É-]‰UË—Â*ºŸ¼Úƒu|•uµ "Ù•§Ó'¢€jW¬¼|F?D·h"¥¬ 23ïª5k ´J)Í£È󘶶JÆÛ/÷C‰Ó?31½È²5U”‡ÄÚiú_ºr=¤$8ư"âˆ,îAí~3,_§‡ÆcQ™Î¯tÇ:öOÓ’ĐväöŒ!Évût¾1µƒ( ÖñLHd%Äù’¢Iyïh,Åv6̃; Ä₫ƒØb‹ÿÎùX0ú æbªæƒÑµÛ´›Y‰×?~ƒƠ…p6ä8a4œ„— ÏĐ@x3rO|à6ŒH”ÓÓ‹=6Óú3ˆYd+v“û¢ÎZ,,C,đ7!:Öñ-&M³¿!Ă^ij³”5Ưë÷ßĂ“ư8L±âÊfô6Ă˜T¶›Çâæ»×P”™‰ŒŒ J™È¤ß₫ÚX)¡‡‘QøINƒÀ «œ6äYkS÷?ÇưWú¡¿‚—8t]7_DoE29efpÊLÂ⺬Tđ@KOôgéṣûºj£*¢”áÖ÷0̃xæ\Q¾đ#µ‘1V%²3óPƯ5‚¾Ê$¨0F+‘T5€ ̉ÇÍË̀FysFÚHŸn ¨¯}HúϽ„7^˜@Ân¬cÊ\§ƒáÿüơcÔç¥ %ÛÖ¨[ˆMm¶J8ưƯïñéËu:£¢0‰$W:ƒ(Î΢úºqáÚøü£Ó0#Ă-qmäqVkÍ!ääB]Ăx̣+å_Ö‚®Æ âz¢¶±áNº30ºI{7~K»B[<דÖm7Å¡Ö4V!ºÉCY]ºj³ #Î<_Û=GpêD/̀D~YFÇ{±ËlxJ»făDw>äçpư%n´ £Ău0̃8}°eê]%‹¸ü2=\Œ¢Ăµèí¬€³ÖLƠ—ç.Û7V|Í̉ÀÜ4À‚ÑÅ Âg˜‡FWoVÅøX́Œˆ@tl,¬uÈß磲ZÆúزfZ„½A‘Ưû;bƒè (ëéAFb—$b7÷ C\\4Ü9¨ë$ƠêåM\.?­—Ñwèń‹ÇÎ'ȬăZº¯X/ïÈ]ˆ‹G¼@r³TĂ rb¯k¬‹ơ d¥¸ŒTÄáËaè́ w[-Ư´•0pôƽq3ÊŒôÀ&QX'T¢t§ !ÖLb_±A!q{¹c³ö†Óà\h­4œwrÊƯám…âå%Ë6Ẩk§/»‚œ!-&hȳ^!س{'vîBD°l ¯‘‚gX(‚ĂÂi¦Û́n& 7ºæ>pµƠ™{\ªØKơíƯíOÁ·‘ë$MH¬ä}Đ—o­oµ5>ÖZX-èN‰qDî̀ýbŒ 38MK¡fáè½L¹!0Wăûí£sPq( ÖÎÔÇ89Î̉m]‘ụđˆ¥rC  >Í%c̃“ƠCÀ΢=đ±Ó§€Óă¾NÎ!{¨¾¨`˜i¨BO_«Y0ú̀Àẹ̀u²´^ƒ ¯ ØB IsHóêa‰ŒÑ©u.eS7DÓ‹‘a³ÂÂă&«c[SµjÏjÜX0Ê‚ÑgE{l½ ḯ±côϦŒ>C ¹˜ªY0Ênÿ́Mày(Ÿ£,}èm»ß²4đlh€£‹A„Ï0 FŸÍÂ`7¤§;î,eÁ(»æîcÇ›ïç‰X0ú æbª¾qư*G§oƒ‚5j‡1qüY©öc·+ßeÊF$×u ¥8x:ˆ$v¥ÆBYl#¼“162L¡(<ă1Đ[£m\£&1*7§ªbÅ÷£,% ̉+§{¹AÙ ÍEoc< ¶s $µ·w¶“÷Y‹Üö¡4ÑcÊÀAh• "Ó’a"`}»JÊ)I~#—P1eÔo [)І̀˜¸ K ®;âàgÆóÉ)´̣Fîȯëűc50Ú2mÎ8₫×°ß¶—!t6‚±,Ol- C/7tRÈËAô¶U"ÂAsʨjơVU„&—áĉ ́ó6œÖ»^ }Ï=¨ë¦¹Fg})BíÔçŒÙưd6QØG¦qæul¢aVÊÏ…èü}Cxn5Ñǻô¹Fs,ư'‚Q2n‹-mÄØø"íƠM æAèăĐ“zÚ  ±ëâMXLáä¡‚ñÀ18ÜC)!]Í1®Gd̃Qî;¼µÚ70á|È,] —ØœYφq|¼f’̀º‚¢U(ª:(̀́P÷AzơLkü'³fXÂ#KÏ °`t1ˆđæásFEWˆA^ƠC×Ï!ÑƯ[Äụ̀2èxç{üăÇ;ÓQPDƠĐDÎ̉-%•‘G±Êó#œ ¢¢2”e±†"* ­7¢è)£(ñ„¶¾E_êC[~8Ö ZiÏa »RÖåí½Èu€® ̉ëÇ19T†M”WÑyú{óg„¹œMôk4¢pó³ûä2¨º|·0{=…œàºO;ÜW ­ÂñÊP,–Góùˆu4œÑ%)¬˜åP~’ úaÇw¤Ï¸¯:C~QÓq́úqéLÇæ–qŒÇ¹«‰ñ¶€ª:lƒRèÿNøi¬ÅZ/t̉Çû@¨=4TTaæ±.œ¹^ \#p0ïj:‡ĐX6¥w¹^Á×>|cuyđ´2€©+ ê;‘î£>§ƠñOß„°nóv d·áH‚Ë¢ÁÆO¯ûq7tiT8AnĬ±n ×BŸ£ÿD0ºD[e•p aUĩ‹¦‡½‡0ÜujPRR‚’¢4V‰̉aUT{ªFĐ[s]5¨éY`ßá> ‰ÄzQl––Øk`ŸÔ†Ç@–¼Bˆo•XĂJ0+Áơ‹]Đß Œ5º‘ŸAR -ÔµM™S…̣”`̣ ̣¸tƾ÷́Ö8;ö́Ø? °`ôÍÅT=SL/…²₫V8Ë ¸Y¢¨I=èxgc¹¾,…”QI±é͘L đÓ;ÔêCè*Ø1ÍQ7#ß‘đRŸ?~XÚ*â\/-Åvl«¨neûbÓS³ÄJTæ’/ÍÚz„›̣c] SD #h-öåq—!¢ªù>ôñ”C%ăôïœ}€̀]øÂpJj@Í>‹9>¸(èjE ît#Ïœz4¦{ äBL9E` 2„®9ß?*ØÇ%pO©Ec̃̀¹mtæ†Lq>W­“†¡Î´Ăw¦]’¦1èëJåø!{ƒ‚®[\ô»EƠ¡æœ÷VË#!ÿ(ê‘î€ơ³ Yå(ˆuz°ỞđƯ›zÆU=©iúZ¯„đÔb*³ eY{ µ™ËùÚ¬d¤C8Rt±;#q°üBL#@‰BÇe'Jk›ÈOe<ơ%j—JzÚà­ÎóË‚ÑË'Áp ̀œz§–¢d¿Ç¢Á¨=ÑvMÉ.’^̀”–­Ó¥Ăîœ7Đ󌜨ƒ†@X¾¤"¾ªyAÚsÆDá—Ơ„ÊkN›¼‹Q±W "œ¨R³3à¢Åß#íăÆ‚v¼Xø×¡Œ.>Ă<‹ ZFQ“܉«pă2¢ơ !‹£FM·* ½µe‰¡°µ±-lm)dç6n¬qßBrvn#đqÚ†Œª:́qEjNÉøô—"Æl`m·Ü‰Ñ3cØm¯ I‰™₫GƠ£[Ù̉0 çT¢ Êzê#µÍ:­­¥PfüQ.ÓGmw3¼´°ê&Ç‘âÎë‡ ơĂ–fÚäl²B}OíC†>›^ÂÀơƯ=ä¬ƯʵCpb úÚË`-³+¶›£´­‡ö‡ÀÆÎ'*]] đ7ôÓ¸óƦçO›˜J´äN«$0óÓöê\=8P“›ĐŸÊ9¬•Ơ‚‘.7 ’Ut3ú ±BÊ Íc£(JÜG× ´ &Á«§8Ă¢Í£ñœF…V«!»¡… đtóÀäˆ&ü+©l¡•ªÈm™@_E*¼\Ư_Øă½G Iªî9xưµI:<ˆ{·NăÈáfŒ·ï‡ç°³ vQ¥86T‹Ư~.đƯ™îá^„é-Öy9Ñ̃ XÎè?“3Ê=¨d™Œ.Ưhëßl¿™ÑÅ ñÁ—÷pöÄ1³7#9È‚ë+Vx .5Åc+ÓdS÷ߺ@±³Ûpüæ=¼:^ŵ37˜…À¨‚Åç­‡Å6A‡ñ›O‘Ja5ïĂ¼R+ư û°NT û»Ïâ—›!#" ¯â.¤ZÈÀ1»»>Ôb¶è识åTxÓ¹Á¨ÆôT$b£€Ăy!aRÑ zå<’ÑOz€̣S€~#öW‘ú…/©tØÆ¢±<ÊÊè́+¤ ¨< ¢’¦8ÚÛ O©é±Đö/¢zBætr₫à†Ä‚Ѷ§§~&gôá`TTL‡úÚ±ÏßtƯ®j‚kH‰¯…”¶ôŸ@Q7ä®”c ^~ï}œèmCûÀ)Ü¿w 6³¹ăKáŸÛ…¦Áï4͘ÇÔ¢ÿpàTô5yï,£Ă‰s%‡ûöûñÆWâ€óC"È=T̉À‚€Gl^–^`Áèbá3̀³(0J±é¥—Bh‹N¾LÜQ3#äµ1F\1½¿Ö´8tè„X\‹œV`t ̉‰3ă¦²8Q̃J hZÁowF&n±2¦3fÆBøhÈx¦b¬·Ö ̣³LÆ©‰*èHp£7-Y"ưG›çLÑ[B²P_°“ ÖH–‰Mo²~Mc£Ê[›à­ñ°hS‚Q½‡0ÑQÀ\ºÑ #ăˆ³‘Æv³h2°i€Ù&®ØzÉElŸ@Y”ÁŒ±™Œjùfàô¹á0˜ÉMsá¯ÔÂáÖX[ø#ç` ê°ÇZ‰u0Û¸)çđ̉Ùăd06̀MC“xưÍăp”ç‹0EögT₫t/?ÊaÎù´‰!ƒœ°̉uo!̣÷¹Cß&•‡c ¢äˆúö(J ~¸ªjW*{âÜ{ïb²opª=“ç^À±ö¬]@`ÁèóFû!ÚlƒÁ®ˆ¯Ø¼ÁÓ(đæ@®¦NP)Î äAR ̣—èk´wĂy;} ¬ß•j('ƒÄƯơÓ´)²n±…Ÿ Đ£Ăho‹ׇNëq±mdó±À¥M`Áè3‹©z¦Î¨,ÊÛá¦(° +¡‚À¨«¢gĂö*Â¥ftv†Á%¤75#̉âÁ0ŸL^Ư˜ ´đ›vz¾\eÔă–ơ°$&¾×ÎüÀ8ÄEu¦'T ‚ĐØ”.‡]°Q¸&4áƯ·.˜&‹Ùq¼v÷"5¸jL2ˆ=„Œ$¤Ö '”C~ÉR5üöÎ>2ăv±œå¯çéyÖ³—;ÏØ± RDé½÷̃{f„t @ %½÷„zï*Øÿçygfwv³)(¨/|Ï̀NŸÙw7ßưƠ±̃3äe1ñt]WÊóµ{ËÔÁH (̣ºï–ˆS¬ñ́]? ƠûLÑ­l1jØ÷Ë₫S¤{—å…ѨËù̃n6\&ơ«éb=z¯Y_Ùăs·ëºZ^l0B6®_*µŸ/­ëº‚|Ús†,4@jW{[̃üøk=e¶̀ü•ÜqíRgÔ,éY«’Üó¯ûäûîư‡üíÆëmç½Zêö#½½år-[IƯ>÷XØ₫™:Œưme{¯`]í5Yú|ơ’<ơæ×2fX3yü‘÷d`ô‘;_P0ú$,£×?ô–Œ?]>xøn¹ï₫p=÷ËƯw̃.×]ă:<¾Fÿ¨0ºhv;¹ó¦§d¢ÿyíFÛgñÖ·d¾ÿDyÖ3úRó ²`Àç=}ÖW–Ll+wzHNºé{ä₫ûî‘[ÿù 5L>x¼øv LøĐï›~ß́c@ĂhiˆđncÁè•W]#7Üü¬LY¶Djÿï>¹îZ³äÉUÉø€Rơ1Ăúyư½oÉ̉˜Crîà2yî–û¥Ḉ9̉è Ïn®kï}ă‹¥å‡ÏÊmw̃/Ÿu›$óGµ‘{lÖ Onúÿ}̉Q"6{K“_•{₫ïV¹ï¿Êø^̣̉ɯ~-  Ưt“ÜdÓơ×]#W̃ëâtiûóËÛ|ƠÑ7zƯăơÅƯZY²X>½ß¼ÇkŸ’)ÁxưÔ=.Ǽñ† dUxHzN'_?ç9ÑA=»“±~^̉đµGäúk¯QÏêŸï´Fi¦̣e¥Çäo7Ư*ÏTn.KJơÇÿ&7ÿûYä/mQBë¶›n–¿RKæøáuå{0{]…¤FçQ2uhc¹ù†ë H½ú6©ÖĂ[ïN€{ña¹êëpî›ä†ë¯³Ala7=¯çéºóåH’¯TyèZ¹æ̃7Å+ñ;‰êưÚï×É”ñ½å­§ÿ)®¿Iî{ª¢Ôiô¥<öÎRU¯µ.^S{É#ÿwîÑxv7<ø¾̀đñ’5^–;n½]¬XỸ{ëE›zƯ?ß–™₫ˤoXw›ö¡̀„›₫±¿¿$3§ÉØ₫úÛ¥VçÑÈt®&₫ßrĂ-ÿWªÔ’Z¿á;(₫†ÑË F=¹é¯¿íQ©×¤¾¼ơÜ#̣·Ü"<÷rÓ÷¯Å̉P7Iăqâ5°¾SV††Ê²@¸çO‘¶frĂOW¿Èp ôó___ÈOü0ß®â¿Ư₫„t̉W^´Å]̃÷̣W2¬OmÄ<(ĂÂdÙÜîr·eU»̣^é3ßOVˆŸ:¦¯:悽åáë®”G?ë'‹Æ6-̣Ö-÷U”qKƒdăæ(Y³"PÚÖªh€á•7Ê+5ÛËñ÷ ÄÙ6¬ü”iɹNzïk™ ëm ÔÏ{¶´¯ơÜ舽¼]Âz»zƯFÙ´àÓNîÂ1¯¾ó%Y—#9ñáâZ‹ÖưíÙ@îtX '0ñ½¼VåqcºÈưj»{¤ăé_ă?&ü^+O¼SW†O™+₫à=Gz6ûX₫^Ákê;ÿ#½Qk%jŸ¶®₫’cù?ư@úOœ#₫â;oŒTå!3ûÿJùçóƠè\o ¥‹¦Hư7VÏæ±·êJ·ö5åÁû_•ưÈư·¡tÔˆṇhă\×₫íŸR½u™…̉`AA²hÚ©₫Úc¥Œ½ÙôÓäưœ–]Àô['0]!ï·ê'ƒÚ}\È»à)éêëï[ô‘ù>A覹“¥M­W&¼ÿîút1Cü‚ñÙ ô•)ƒ[ÊSw8ßÏ»_¯/C{6–{ÜJ¯qß[ŸúH êZ8ó₫ʤ"Ê«-À÷\›µ­)÷Ü\Zk»†’? ”èûøke £¥!ÂK¸Ó2zµ\_áz¹êÊ+åÚ믗kKí-ÅÀ¾êZ©PÁn¹+Å> X¯¯PîY·BùHạ́ 6Ñ’«°7{Ñëœû\{½ë1+ÀÚx²„Ÿû¤®¼ÿÔ? +¸̣JăÙ]ÍgwŸ[!í«¯S×z­§úªêÙx¸GÄÉYǺ µ¯¿1» p¯4ïó*¹Îvÿ×_g®/̣”̣™_m]OQ¤¯Tç-tHá{ríƠ\­îñêËzz﮽ï ÆăƠt_ÿ”QËĂ%hÖ8y₫q#éEĂèo £7Ég-ºHЦÓæĂ ¿¤eßóø7ÆëuüLb́»+¯*ºyÆ•øŒ×à3JO†’R~'\ĐgOS«Ës h½„ YSëv —çG¡•å}¹V}áM©]÷Kyä_¥©-Ëù₫êûVUkJíŸÉcfY7=~ÿêcBß¿₫ \^c@Ăhiˆđn£aộúÀè/0ư~è1 Ç€z è1P¾c@Ăè%Í̉œZĂhùxư¢Ÿ§z è1 Ç€—×Đ0Z"¼„Û„¯_‹8Ä ̣¯î•=Æû7 ®‘Ÿ}Q̃ÿ}Ô¯|A₫~³½Đ•rÏ#ÿQë̃zưU¹ؗ‚<ùr%\ke©ôʳrëơn1Ÿ…b¦®•»ï¿On»¡p,Ûå{—׃~NúưĐc@=ôø½Æ€†ÑK¥9ơº°•(ú₫$GO•çƯºÿ”,³Ö­¯9sdÎü²hI ÚhΖz¯˜ơC¯ÿ/oÝă'Kf‘·²·­ M‡O”._¼êáw¥|Öi¨ éđ‰Œ̃(¯¢%§—€x/Y:œ ¤Ă§ÿsƒG·_Rn3`‘|́f·óÜ-­•&ï? ·=đ†Œ˜‹ă¡Ø₫RÔ/œÚ¯±Üw£œ×J#eæ¼Y2fôd´ô‘aí«Ë­Z…wIŸÙ3¥̃«ºÿڿ˧mËtuZ¼Ô_|ñ|bâÑÔê¶tiñ•ñ—øK@_Ÿz è1 Ç€—r h- ^ÂmŒ^ñzg_¿Ïä.vÀñ¿Ÿ• »Éí°B>×`¸,™ĐF₫¥Ö]!O}>Pj!w;Úơ]8Œ̃₫ÂWâ´Pjư׺{_ùJ¼½¥æSÅYHoÏû-’a5@ß#§M—¦ïƯ/W\÷Œ ;I>}éß̉rB LiưºÜˆc^yë¿¥Ë̀2¥…ÉWIĂ‘A²#q‘¼~ÎsÍṂïgѪ}ºÎ`ôEï.ßÁÚ„×Ëó ÇK̃Ñl©ûämú×®]=ôĐc@=.ó1 aô‚fiNmŌΘ#¯ßfûåvËË2Ơ{¬ĂûËëO½"£æOÿÚº²ÜóJ3Y4§³Ü®>(×J£óeZ;×~ñÎóx²Œ̃,-§̀“6o€¶Ge,ºơ¿[]æ_@—̣—¸>·¶é1 Ç€—ÇĐ0Z"¼„ÛX1£“—L”ÿƯ⌟¼îWŒ>yă=̉Ăw,ƒè˜±2nÜ8;z„ôïùµÜïpWæ#&J§Ï_ö覯Ñy(ÚVuYW¥Ó0Ú¾mÙ5̣E÷Q̉¯ÅÛÅ̃ß_¨&ƒGơ“¯›¶—úŸ6~ƒúI‡6­¥o·rϽo ơèHyÄHwư§̀×[₫¡–]/‡Ln_zm½âH¿93¥ÎK°¶:q›t1K¾zÙ¬tŸ ]¸ LFwŸ̉ª]ûọ̈₫GƠ¤fƯ†R¿Q3W}×eRS©÷uñªơ'çµƠĂ5–^öëi‚ư(Û²†˜÷(l×°}…åvµ]±û7ÆñËY_áx¬F؇rîû¥zm,ûR-7^óÖë‹8ẂcWQת‹ù́]̃+s™}¿¸¶åv^ó¾ÄÔ)Üă®ÂÇ₫Û˜ª©RC›¾Â¼¥nó|m¨nQªW_êzT=,¯'_–¤/KØæË/åË"TËËUhøPW©n)em!Sç±ë˜ç±¦®ç­#uë`[¨%lÏm ɱMl{¡úûÖ8S_`₫7Ô8¶Mµ1ïTm©]»}QÂúâöUë>wÑçx]*}í”jI-Oª…å.ª‰×TËkëkZÂk—yûkscûJµ̀©z]¯!NK§êتa ûƠ ́ËœóŸă¼•^«(U?úH>W÷cƯ›y¼V%Oç·ÖÓZæ}[Ï…Ï“ÏơĂ?T2qѪ…uƠ¼ƠÄ2ÊZ÷̃[oâÚ«J­:_BuMƠ‘ó5đºxa›/ÓRă·zíâTëkK ¥/LY¯kKMŒÁW_~Qª|đ¾z«~ü±üç±¥â#*̀ÓơŸ£S¼'Ë ·9“®»óUÀèyú†ëå­£¤ÓGºÅQ²½¥ƠvïZùjø4đU%`öaÇ2¾G —uUë*¾s‡Èă–«ÿÖÿɘEK¥uå¢úÜ›Đwç3̉c\˜lñn%w]{³|Øk²¬ “5°ßËïióêíæ¹®”:ͯ!ƠåŒv­çù:¯¸âvé6w¡´xĂ£WÉ;]¦ÉŒ®Ờc\!7₫§¡„g&Jưgíq³ÅCi½_I‹v]$4"FŸ9₫“ÈÑL}éêÈywÆ2á<<uè;LƯÄe…ô-–£ƒXç¢ođârLœ…̀×Öq¬k°®÷(®ÓE¼w.³m½Ú×ïû}༇M9®ç?d]—mÊëR×GÙÚ©}˜§öÚsJdÏIWí>ñ«́>ñ‹C˜/8îÔ.̀»êgÙuŒúIvB;ºé^CÛü(Ûÿ(ù‡¼ƒßKîï%çÀyÉ̃N²ö~'{¿•Œ=ßJúîo$­àŒ¤œ–Ô]§%e×)IÙ aŒi2§v™ëÛí0·çr(Û*ñx<îî³’ºçIÅ9Óö“´ưç% ×¢¦|åj=·UÇ8));NHÊvKx½Â:JÆ2w9¶Ë?-ÉùXoËS:)©ù'”ṚCG¡#’œw:€öKrî^C9»%Ii—RbÎNh‡C 9Û%)¯!Î;•y(;O²̣$)+ÇP¦¡ä̀lIΠ²<*ËS̉-eb>C’ÓÓ%9ÍRæ©TC©©’TH)’”B%Jö$¬Oö¬DlŸ@%JLJÂJ„V|B¢J2e½¶Mă1o*Ó¸øS‰‹ùˆSʹΘ·€s¨k1¯+̃º>L9uJëá¾ ¸vCñññ6Å㩸øXœË©x5WjÅb[»JÚ×}ûX\›SqÈ+Àñâb%&6F¢cb%:6V¶ÅD+m̃&[¢·bºUM·Do‘-Û6CÖ”ó¦¶b m¦°̀!µ,J)ÊE‘x m)B›#%rs„RD”M‘›dSäFÙ±Q62æ7ÈÆMĐÆp¥M×cJ­sjçmËùZ-sjæ)µlĂZc½’}̃Zæaªö3öWÇq?^sy„©H\k®)’Ú)¤¦$ ÷´ ÛoÏÍ–éÓ¦J>§gNŸ–ăÇÉ ˆSk¯í:yü¸(8åÆôäIꤡS'åÔ©SJçÎSă6 ŸûóçÏ«e§qÓgÎÈÈ9sVΜ5tVé9û¥oå›o]uö›oåÇ_~‘øUË¥`k„ü°#WÎe§ËùÜ ùúú)7M~~…$7µxå`}±JÁzSÙ˜B¿RØçègèGèè÷ÅzâƠö¦°<Ácñ^x\@Œ]1y¸^(Ú¦m¹§p]§d+•sJ¶dŸ”-Y'd³CÇ%2ót\"¨Œc²)ă¸SéÇd£̉Ù˜vD6¤Z:,ᩦRËzKɇe]̣!CI•Ö&”07­I8 Jñ$4n¿¬Ư'+£÷Jȶ=²|Ûn ̃R Q;% r‡øGä‹ß¦|Yº1G|6d‹wx¶,Y—)^ÔZSÖkkº>Smă¢µ²Ä”7Ö{‡C²Ä{#¹1W|6å‰ÎçµK–n.¥[vÚŒ×QXmxnïơæqẨeÉKX¶Æ]8ÿ(ÔU^xM©å«-aßƠNy‡fˆwhºx¯ÆñW¥‰×Ê(I¼B 8Ymƒ¶È¢(Y´"EË7ÊÂå u²pÙZY°lCóƒCe~đj™¿,TæAó—q̃̉*̀CÁ!2?0D,7ä¿L@₫Á²Đ/Xù:´Ø/Hăơb¿C¾â¥ädG?ÈIŸK !t‘·7´Ä¡…K–ˆS^˜÷B¢$µØĐbj‘)ë5Öă Ư£-–ùÔÂE2Á"™·`¡!$¦ºkî¼ùđ-Pc Û1‰u6^ÏkN9o½æ²9 d–̉|SódÖÜù2sÎ\™9ẁœ×s,ÍÅü\k¾̀xN^Ç\^®kîcJÍ¡̀ósÛ9êúæ;WiÎ\$ÙΙ ÍÂuØ5Sf!ùÔ®Ù| O—¡Y%j&¶™9MÍ4…ưđÚ]Æ6nÂuͤfÏ–J³dÆ,hæ ™6ĂĐ”éÓ ©2yÚ™4m²L:I&*M”‰S&¸i¼Lœlh‚]Sœ¯ÇO'M+ă¡q–&b~âSœ74v5ZiôøQJ£ÆAcGÉȱ#e$<Ÿ#G£†c~˜ 5TFŒ&#F 14|0¦ĐđA 6HÂrçëÆ6Ă06ó|éĐ؆(Ç”a.¯±œ¯•°nˆ9Ïm¹¿Úoöé/Çô7åØç©¶(£p̃Qæt ®y4®3b¨Œåơă¸A~Keà€₫¶&T’ñc? bc¶¹(N½–8‡bŒyüȈ§â¨XIÀ‘@á311A’’%''[V¯^-6lܼ<ơă0?6Sđ#4€ N3•¯é’‘™ e)efÊÊÎ6ç9ÍVëvîÛ/ë–,”x¯ù’¿d®ä̀›&ùó§ËöÓe×Âi²gÁTÙ¿p„CG £Đ1sÊyơz5Ë'ËÑ“åÄ)_«eæ̣£ &ÉÑù“ät:hj?¦{ ‚ye”7o’äÎ,Yđ¦,‘ɽ»Ëª²p₫(ë«ëöËÚ„}¿WÖÄí•Ơ±»eULu—¬ØºSVlÙ)˶äKđæ| ̀S ŒÈ-QA‘¹ØȱÉ\…ăà˜A[vH0ÎŒsGï–e1{dÝ^Cœ. ï ›ûDdKĐÆ,¥@SA€ZC8ÀƠEđړ±<Û;”-^¥ơ8öº, X—!~aiPø­IßƠ ²44ŸƠÛ -¦¢ÄgU„x¯Ú$̃+7(-Y¹^–„¬Ṣ Y«´X) p‹×áuÈ(T–¬€–¯2´l¥’÷²CÁ+ÄÇ¡å˜_.K-a>h™¡À`(H–*ùˆ*|øøû‰·%?̀;ä‹y_YâK-5´”̣1e½¶¦Ø°ë"¼ø²̣‰×T?Yâ-‹½(TqÓ"­SäÅcKØg!e_fÎ/ÀtÁ" @ Í_Hø(/ô’yœ /°C1_cùBLQÎQŒ°í‚4ëçăîZ°ËK¡E qïB¸¨yØga{> ˆçªgÏœ¨øB3fÏéÔ¬éĐ4™6kª̉ô™˜Ÿ‰y»fàµ%,Ÿ:sS30?c²̉”é–&ã¦i“Á®¦&N15y‚L˜4^ÆO¤ºØ ZX·Æ›ph7v„̉X5å둘75ÆZ†ơ˜;f84 Û —q˜äÚ5fôP3j˜—qû×Ö©}9í¡±å±æ>œ‡m óă±íxœ®Q óq“̃c¥ËưeđÀ²0¤`àiR:MåT 0j(¬ƯˆÆI"@4Qh¢QN £«V®”ơáá’››«<„Q‚(-₫±Êzïđ$Ä›^„́Ká5̀¬LÉT@jƒÑ½ø[±xÄ.œ-¹‹fI֜ɀÀ)’íœ7p8Yö ÷CGäÑù"T`˜9ZöN%ûgŒ’X :±`¢œ9FöN©ttîx92o‚Áô°©ƒs'È₫9d/Tí3^v`;{‚dÏ ÓÇÊ.¿E2±{g ]">KËb|&̀› Åx|®Ÿ~X…:ÿ6à!•6æQoW’ƠÖóú/×vèü¯Ê"j¨1µÁ¨ ˜ºÁ(@”0LLnœ¦́¼YÚò§aê_Û·¸¦º Đ—j 5ƠM)»á¦•Tr!™.b,O€&àµ%µïÀ%Ës«kúV]W:¦éûᆆ8uÎ×íî7 ×H©k¥KÙ 5pJ%L•l°j« Øi¸«©x€)ëo• ÆJ©›¢©–¶å—mUĐjè˜lÍ:ª´%ÓĐæ¢”q0 Z)«Wê¦ÔƒJ’Hx̉~YO%î“uq{$,n·„ÆNwɪè²rë¥-ÛKÔÊ­Û±-„mW<²UÛvà˜;a™Åqăp|œk`x5 xuâh?æ¡ø}؆pŒm£±ÏV'WVnΕ›VnÎĂ2¬SÂù U¦VFᵋ̣eU$ÖC+#±=‘§´bS,ß#Ë` †7h}º¬Mÿ°di‚øF}×X0º0ºr‡Ñp@¨£ˆ S0ê ¤ÅÁ¨ ¢&Œ:Ô€QKµĂhà…Á¨w‘0ê J‹Q–â+F §î@ê Ÿ€Q@§; j‡QH ¦„Ñy´ÊBÖ”`º¯ £ H˜êÜ– J&Z0 ±F¡D £€ôâa»J¹Áè<¼¦J£VŒB £&Î5TÁ(₫Ï„…È‚Q¤vhºÀ¨BÍù"AÔŒz€P J=Â(¬°vo¨¡F çF ¡cˆZ0j)R0iB%!tôH©¥œ7^P‡Ê(.˦‚VsƯHX9±l §65— Ês€J0%Œ*8…FĂZº,ĐO !+–Ë„,lÚ°̃Mtơ[Ú€yhÓF¥HK›$*2B6GEBQ²e Â*¶À{‹i`28(HB׬‘TXC·nƯª,¨KáMXx>A¼úö•Bƒdÿ„A²Ú;a°́†vBÛ' ‘<({â`ÉÀëÔñƒ%ỳɃ•v\çv F—F½đƒo1?OÿÑ[·ÈÇUqÂèÆ FkÈnи¹œü™îy@í2¬£°F÷Ñ:j€¨¥$¸è ¡vM¥4ggà3ăÀ·’‰ÀÍLL³¼iˆónBàd–]Ø7ËT&¦_gî;ëPæ•öq(óNƼ%.·¿¶-ßwÇ?‹ăăÔ5pJ}'Ù¸N‡Ô=ØÄím×™HÍ´HÍàZJǼ€•2Ö‚kÆF::€l* J%R q 6Å#v1! vÅ!–Q)×P¬'bc•I €¥¢•Ê6€́¶¬#²5Ê8,[̉I•vP"RȦä}² OÚ#ቻe}|¬£kăv«uñ»°-„í\„eë  ƯÆq“÷Jx Îó…ĂÓ9Å×ócî·SÖÅîPZkj]́NY°ơ(€ôzSë0¥ÖG;µ8d¯4‡Â» Ư•›²eùÆ ^Ÿ&AëR$ ,@ …eti(A”–QÀèªH7Ëh 0ºÂf¥¥–Ñ%Ê2ºÚÍ2ZF u…QË*ê£>6˨Ă*J먛U”–Ñ"aÔ0ªTŒ…ÔnUÖÑ¢-£K©²xZà矄Q7 -F é<„X0j),…pÁH ¦vÀ¨i5aT…-x²* %ˆZÖÑ….ÖQeù,Â:JÈtµŒjWQ êFañœoɲº½¶`”¡sÖÑÙë¨ £!0¬£6˨²z–Q7ª, ¦EÔ/Î*Z ˆH‹‚Ñ 6˨;Œ8 +(­¢®@j€§¹Î„Q§UÓ€Q€G„ûœ@Ià¤:‚Ơ’­¶5÷ºZÆé¸á15\đỤ̈Ưó|=Fmc€êX“"”EȧtáúÊ XFưñ¹ [½RV®†–AË•V…XZ 'wój€•C«VJèêU² •°°PY»v­¬ƒÖ®En €t)¼+V¬èèhY¿~½lƲACÆJJJ–üôÀ ˜¿ .”ÛŒ3]BV†ÊÖmÑØ+â·HRz¦¬@hGÔ¤Q’8j Ä é)‰C{Kʰ̃’6¬§d ï!¹P>´ *€vï.{ NŒ́!3[·¯eëÔ?û-,å_Ơ—₫í»KÖöƯjytz jÓI w’=ĂºÊn¨`hWÙ9´›äC¹P”¥é*ICºIÂàî3 ‹dL+£Ú6—ƠxnÅçtÆ{RBœÔ¨^Ư £AøỠ¼ysẸ›áÇ·‹ËÚ´i£-§1ï l™9üGFS؉!xw%ăȯ†ÿâ¢ôC?Kú!lsø'É„²ü,9G‘̀CçaE”ܲ‘¹“L¤d(QyG¾“|Sy|mS>æ©<́c)ó”ưu`ĐR.Îa)iè¬Gec9ÅơÙûÏ@Îׯ>ßH.@Y‹ç°Îk^W>²‘̣2¯Ưvmj\ÅkÊ1•Íç`½¼æ@Ùx>T@r6`5ÓX­°°¦ĂrK¥Q°ª:­d$ø˜ CL²d&¥ ,!ÙMIx]¤đ“ MâTé¸zM%hăóI|ÎQ‰ƒb³X(HƯ–y zÖÔ²9m¿D¥îSLÙ«‘²§ë k–íÁ1öx÷â¸ûa±Å±3B‡–Ë- y‹%Ạ̀æ œÛDa[µ_Ên‰L6‘„©©(€­SØ.ÉT"¦ÛD&2¿[6°7ja]»-_Â`y]™%!̉å᩼.IׯHcÄ/t€0ºVQÂ(]ôM7½Fá¦_«(ÔEt͇B ¢î0j¸è—À"º±¤̃ËVˆZ®¤ .zCË `ñ‹̃]ôN7}a5ÜóÁ2êíÉMï€Q JM0%œ:dsÓ[0ê H ‹mR.zX6-(U®x%oCk¨euZFéŸ¯äæ§uJ]@@5Ô²̣\–«^YpU<­auÄÑ̉:ª,¤°ª0êjơ¤dÚÀÔ€ÑbäÁ=oYEƠ09oÁ<ܬ:EÊTË"ê°ŒûHç( 5¬£³”u0 9]ơÓáwQ€Zđ90jɤ®îyWwüD›{ó¦L½»›~"Üô.0:̃pÓ[–Q NZ=•åÓ¤c0o,'xë 5ǗỆé°n0£JœĐÈá˜âµ!¼vÈX6:°IY1¡#ÊXQÄ‘r:ñ«F¬¨!*ÁÔ°PJưHĘù/•Aˆ¯7à3VL?ª¿, €•;™Óe°n.‡–!̃‘1ÔeÁĐ2 YnÀëªYµ   0 Eœ(§°.ÁxVlµ̉MX6hÈÄnW°wúôYÙ»ï ́ÛÈ!¾>xèˆüúë¯j›qfI0¾w"£6#É,Lj¸”4Y†˜áÈ Ă%nh‰îßEât•Ä]%y`IÜE² Ü!]d´Ú˜ÓƯ˜f÷ï ƒPÑ&¡Lü÷Ưùïñ~N—Üü]êubz®ôh̃A¶tk%{‡t–]Rjç N²Ê…²¡Œ$m`GIÂñâûw”Ø~dk¯ö’: 1È­0êíeXFŒÎD$Vÿ́S'Œ.ÅË5ơoÊ”)F#%ˆFç…k2YVoN…R EYÂr̀‡mI•5X¾Ó°­x½9 ²_r|¯@4ׄÍ|¤œo‡v-^»¸°º£¾Å2›…;lÚyCßR>̉×óµ Àyđ,`Ó¾ŒóØRǵ‹×£tÔ”m̃q¸ÏaÜûvSù˜ºË€i~s Á6å(P%0CU%j–Cg0ïT&æ•öœv(á†N9…Đ„ô’´ë¤¤CiÀ¼©Èg†º©äüă’%R+ñP\Îa¼ÿ‡$&‹:(1™”¢3öË6Sœ÷$k[cºßØ/ËP ‰cÇå•çÇá¼ñ ™á¸Üc°úyń“…cd́SN7ă˜b ƠUØ0Íe± :Æ&¾`o…6 ÖÚX_7Æí”æás Í”•S¤É°&H€‚Ñ­EĂhˆ FˆºĂ(@t…¡¢a ª`t…’F u…Q‚h10àïŒuXF=èR{̀¨Gơ¤ŒµâF½ ë¨R[ܨQ¸ËUܨ/Je¨JrƒQ@jÄŒ:a”@êtÏ[‰INË(­£„GX6érW€éŒuÄŒÚTYH Ă(ăE W}É0jX<‘ç ÄgCœÚ”€y%@¤Ú>צ<̀C‰ù8̃ö£°èCÈ `œ„ó&+1Áj®#°˜SÇ>€c»*° %°§pÀ9׿",ărµSXeăÈƠhX^·Â╸–̉í+k·d!0̉Y¶>AĂbÅ `.ú¥¦‹̃g¥e o£H^ZA­…CQ,Qm3bÔUñ"ÿ€ ñĂwIèÆâ3¨¬ëßU6´₫JÖ5®-›~!ÍjËæfŸKtóZ’%·¨%éP”e›ó|Må·ú\2*=?₫É•+I‚›”.í¾øJ"¾üHv´ª)YÍ]•Ù¬†d@)P×´†D7­.››ÔMPxăZÖ ºlíÙNƠÿ\VÁrLà'ˆ*Åx×0ZF°¼˜øRå¦wƒQ)ateD²lŒÜ*»÷‘í»¸hçC’‘W ³–¬’ [“%|K’„n“±Ó¼dơ¦XÙuêåßNKç±ïå(B̉2’餙2j̉, Ü({Ïü(ûO¢lTê´|=$ûOư {Qb*+s‹£ä΀+¨`?₫À#SYÁ¶ß½;WVEÄ¡†]¢̀ —øCßË~€j@”ÚE 4Á’ JÀ,8~^r2$(&M²‡G¹œJ0=k¨¥Æ:ëx)฀pŒcíÙ·áM²ÏêàqÏXW@ˆu“¹; ”Ă¢ øÜàd=ÏC§•1ÔEÑ|Hó¤y&|@íÊ;ü½́ÈËÅø#1t́\Y¾ù ́Ƴ¢µ6n] 3E†MZ ›v"ü"uJ"å"t! ˆ¡uÂè)¨”µ+³à¤P¦2Q5zC”,[‡Ú“Ä”í¨µ L&å st–ˆ‰Å( 0ª˜Lʧp J̃quKALj¦P€c*`¬`Mæöêüq,@”³_R`IÍƯwuA#Ó4Ö‡u —* 8 0Z’±î•h„lIÚ%‘ñÛeCL¬Û Ï@Æf¬O€»>ñ£[‘]eƒQºè© Q(¬£ˆ£Ê:jZDƠÔ¢¦‹Yô>J¦›¾(ơ/jÆŒB-9¬£v…ơp‰]öxR•MoZFMW}éaÔHDrÈn!uƒQĂ5ï.³¬” F™¼cÅWBœ‚QXiÍ$¦ Qº́]²ê-uqѻ¨²’* ¢aÔ¡î0ê„R'Q JM Uj‰–QÓUodÖF]tú¬¢,¤­£Î́yĂU_Œº¨å¢€:`” ZF‘QRP:aÔ ¤v%„‚K̃F醧,—¼aư$Œ̣̉i¨£,e”‡2JAFùÚ*ñÄ)ÀÓ”¢ừi?0U€ª¶5À”PJ ĐGüM‚$¦nÚKçm¥K‡v̉¥£!.ë©C0ß¹½tƒzté(=»u’ÈïƯ£‹ôëÓSúơí ơ•ưúÉ€₫ư”1oĐ A2 €;aâD5?VÙ–­;˶èùî»od¬¡½{÷•á#FȰá#ÔDẹ̈iƠ¦ êËÆb›oa)í†à½˜—ưDXJ'ÈlT˘”Ë›})~ï¾ >Ÿ’€JOKp¥§$ä§dÍOȆ7Ÿˆ·mP,ç&.K|óQ‰yă1é₫̃û²Đ;H~øá{‰·©QWÂpœ”7₫-±o>.q=&qØûl…"¡ơ¯?*k*=*++=&AßOˆ× ÿ–Uµ>Ũ–•iXÊĐø|RóQI"\ÜôÚ2zq̣¥„Ñ€ÑXË̉3jXFÏ ̣T$<.G6l(ƠÈûégŸ¹êÓOƠkvwàzóơÑ fíæDA£rËï€Is?¬œ[–A‰ª̉v,™?=KÖøYpjYăƠ]̃i6Gv³°<,Ñ+zÉ /u–8Ä©”ăfµ“‡¯»_¥~#0¸J¦ïPy郆âµ9Sæo”¸ƒ?ÈÑoA1ù_ä,¨`EXQ ¤°†„Y<FAIóí /u(1‡QD C€•åö+8r…äa혀ăc@á3¿È₫8>̀³È?Åâöûöl–áøc}ÅùƠùq@˜²¼î;y 0>öƒ́9ñ£²p‚™ÖVđ¡ Ú×ǿÅơ/]µHê÷)#ú5“OªÔŸ-§dç®xi5¬‹t4QÚ7ûB>î2±DåơÏK ,à;p9¨¨Ÿ‹æN@ñ><à}8ÏvÀîvTúß íÅ‹Ư8_’¹öa~/î!w/à d­]°\÷de‡†̉ Ơ¼ßK€1UÁă1$áđ&äî@NR½–N ­¬Y°x>3#›säS¡ÉÛj©# @1ùGQĐÇƯ˜t¦âü©Ø?ă6?Hrư";0`r0vö$B <¶ÇÁ±RûºưêçÆ®“ÖH ₫'Í‘¯^ùD|·ăGºäâ˜)€ädXhÓàöß¾?¦đFä́ByŒ X_Ó1¸³\–„0€­€Ñ¨„²16OÖoËÆØÏ”Ơ©°&Â:jÀ¨Ÿ‚Ñ×xQ½Ó2Jë¨!¸ç—[ Å<…Ä%‚h 0ºJD0 ÷¼DͲN̉B0jºê‹H^bS±0ê¢×°’>=I¹ê-˨»U”îrĂe®2ߥ™́–R[¬(ÔƠ5ïŒUơM•«̃¨Ê8QeR J=)ÏoXH!^§éª7²́7ê3j(Ë.¹ĂèBºăƯ™–Q÷I[FÍu€Ú-¢L>²@”Ó"ÔƯBjQ́§Üôö2OÊ]ï̀®72́ +©á²7ÜöSYâ V8«´“rƯĂ:gÅNUÏ‚̉ɨ_ª€Ô´Œz„P£¢N)µÁèDe…0jXG0jZGí JU‚%TÉJHB̉‘˜Ä8PZB ¨Ă*J7¼ªEj‚( QYB„ZµHY´¿Q“”S¨’B‡£##5̀„R§xM—¼ÚÎkŒéß[ü}¼d  qĐ€~̉©}éж%ÔJ:´k%Û¡>xóV̉¤I[iÚ¬]!5kÖ^!²9\ÙœoÙ²ƒôè̃Múôî%}{÷–>}zËH€å€₫`i@"²B,Í[uB"RŒœFüƒÆJĂFmŸƯ¤%Äië¶Ư¤~Ă¶È¾UÛĐ…ßwb_Ç…Æ!¡i¬̀ÄÆé-ɲ&_ˆÏ[ÏÉ’—¿WŸ W—¯=.¡¯=*á•‘M¯?"[¡(Ö&¾N¬ô°l©ø°ô|ï=YeÁ₫½û÷£8ÿI ß+>¯/+_}TR^{Pb+J•–Ø×–hh ­«ø„¾ú„¼úo xùñyéQYôÜR½²tÿàMF—h½pü-¶uÂèO&ŒIL´ŒF¥́”ûï·w|*o½åVÙ*ȵQ0ZpöWÙ‘¼J>xçS™´:[PÎTÀ’ X̀A-²- ™èö#=;4¯”ÆQÙ“+>üH&Æ”« ¨vÓơWKíỵ ̀ô³µ—ZN•'aƠË,”¡à~̣NXª²d>êÎơƹt€Ë#§OɆU₫2ÛnĐÉmäư¡#¹Êï¾—mˆŸ›6\B"¤à̀Ï(̣›¬ë£²ç¬¹™°tÅdK.Èv{Aº¬t́?sNB¡8s¡Ÿ„¦6Ï„_¥c$7µ J¨Ã̀>â³>îa¸n·$aÍ…•2'6É7GdoA¾ø"ÎmÆâˆ‹<&k'7•Gߪ$¦¯—-—8zô„¬Fǯ)óeͶ“rǿ9w‡DÅçÈ"Ônœí“(yûNIXĐ™¾8TÂwŸ“}‡X¸ÿ˜dnÂÿ15ªIÿññP@å£Àarr_²ÔoRYú‡gÈ„.ơeô°(Ăưÿă? K”LµX¦ù¡+¬’q1©‰‹™³½QÇs»äíÊAA/™ă›€eÀº`¿Í_"ÓP¤}B‹¦̉¡ËIŒfí:&é¨å+ä2/_;è7îÜ‚ƒ¸V‚“öIàtcÔ6”CÊFǘIY½f™Œ™-(5 àˆP:DØ4sATA( sP_áëaœ* Å>Xnlc¸óöë‰Ä¥Å6m-íÛ´”„Q¨}ë 6sóvËáĂÇ‘Pt´°btO&â{µeËV̉R‚héÈ‘#dÂ&Nœ¤rsŒ$Í[v’xD:ˆB÷™ªëYBJ6™Ç411 }vàø”ơ´_?T €¥u4@tÔè1Œ¶j ­#Kß|^¼_yRü^{R‚^{BV {èëI8¬–o‚ Å@±o< +§¡ø7‘(X4{đ¡̀ơ ”“§ñ·ç4pŒlÂߌo¾9#k#£¥Sí°x>) ¯D±æ£³[ ïº×‘Đÿ–H àƠͼ₫÷¬ªñ¾tÿđ-Œ:ƯôÚ2zIâ_Ùs̃°ŒÚ`ÔtÓG&ï'ŸxR]Wưúơa®ï-×\s\uƠUríµ×ª>ÇW^é,èÏíîưç½ø£œbÂè÷㧬êßF̃n(a³¤ù§-$ơüÏ2¨mCy艖̉Úo¿-æÅ£¥é·²ldk©V¹±ô2Bª×|Iê6Era­ 7D>₫¸‰ô ¤fơdˆWª¬ơ/ujŒ’½¸ÿMäæ—ÛËf@ơ6ïRy\ßó¦KƒF¤ov̉ ¹gßfôÇm)^ѧåÄ÷¿JÖ–0iƒ̃ô=û’&#ÆËŒ%Ó¥ê;eĂ!XR<%ưë6—¾“½đ…ÚR¾î:LÚÔî/ó'‰wß/äQôÈ­Ưg¶„¸|áN©Û_J}Ú¡?ï@ /øN¦ î >ô•´î=Pª<ñ‘|R­ôÜWêV{Y^¨b° Yyˬäpiß¾¿xE”=ᆠè¤piúùDzd;˘^̉ é <‹_db(â#æKµoK‹®åóƒeRX´ô{öaù¸Fsé̃¡…¼ûÚ¤Z·Q̉¦kwyé¡j̉9(G8*S5—«¶—ĂºËûoß/_ô'i _ZMóöŸßñĂ¥₫—í¤Oÿ^̣ÁGídrT¶ŒhYS*¶ñÂi|]ơé¹ AÖ…̀“ZơÚJ¿¡Ă¥êçƠdßVe­MŒ¦Â:ûb¥₫ÀÉ̃ -@Œ*â=ó`áöêÿ<ú̃ë̉ià@iW»–¼ó₫D Ư*Ÿ¼̣ºô : NŸ—À)­å…z]¤sûOå‡>F#ưe%2Éë=₫˜ÔmĐE:´o*/UûHm>„ç·I7üTª7ë#Ơ“÷?î&ÛÏÉæñưå–æM{KăzÊ›_ G€°Fs1î³È”D¦d$2Ñ2ƒ¸Ñ­âʲN(v¯@Ô€Ñ%Œ:âE˜Ñ%&ˆF 9A”–Q/Ú̃*íT8ft \óî–Qï@ZEí–Q»7d·Œ £. êj%Œ* -̉M‹ƒ ¨^˜²,¤ækwË(-@wUŸ¡€J%³£“ ¦÷½*ro‡Đ êèüDë âè,˨Ũ*™´€®vfÊ+ EalXBi ¥•ÔpƯs̃ºV£¼“jÀ(­ ®ÖQ¾†\€ÔtÉ›0J𤔛̃œwÑBj@éSœ·âG YI « X]ăMUá{%t¤‚‹̃QŸ–Q&3)Eç&Ó:jdØ›@j&6MW–R3ÉÉ”̉Rê´î͸Qºă-M†E”rXFMÄxQ¨̉qÂ2J9`ÖQDѽ LVœ¨åwZE k¨£F¦¼ÑÉ”­ƒ“¥ƒ K(c<Ímh5dviRóưe(,›C-(l8©¡vELèĐªå˜e P¡}z ÜĐBX.ûÂ2Ú_:ÁEßÚ±mk%‚i³f¥`÷^Ơ¢ÓÑîÓjûi›₫øă2eê|XR[FaíÓÖÑ>†eÙú'MŒ—₫ư`‘2DF×…Ă@³»@ç®]» …”ŸŸ¯Öơí? ḄƠ˜q ŒÂ2º ºé›×¿Ê/‹Ïψÿ[ÿ‘à·Ÿ•w•5ï<#̃}F"*?#[ ˜÷‘ØÊOzî÷·•±U*Ëd¯`ÙsFˆÜí̉¯'~(TzQº7h*¶ÅËÁcÇ%xc´ô¬S_b̃zTâ*?‰ư E¿û”l~ç)‰xû)Y÷ÖS …@Ao>%~o<-K¤«ëT‘î9ƯôŒ*7=ŒJ7}£WÈ¡±WHDWC#k\!ƒª]!­̃¼B̃~̀P«ƒÔ%ˆµ¬¬î0j¹êi]7ư+/¿¢ÚˆơCœÉ—_~)ï¾û®Ü}÷Ự\ô¬YV¹re¹å«¥©ŒûQNûA†tª%uûÍxÓ# +̃Éó,—d±iy’ k^îêÑR¥ưpÙ†ó~óÓ/â;®­Ôhzg›×J+@ßúi]»%jL&HÇߑŻ–ËgJëZm£¿Ê€6ƠåĂ–‹mIZ=\^­6Z¢“Ö¢̃ŸD#oơÀ†̣TK ´ ©R©LIø–V‘[çÉG¨i¶5ܺÖưBÂvíÁëỵ¡¦²EƠ'ăåXÄj̣µ|ƠËKö`ŸưpÛøöœ̀l̃H:.ŒÜ‚¬œ5ϧl†ûtÙ— -j"=CÑÇ7/Xê÷놂éạÉWJ¯U§P£ Ç$îÛá%Ÿví(뭻ȋƠ’ÁèµJ>yó}i?1F¦j-¯Ö!đäK¬oyü¹¯% Ù][—JĂ7>‘`ô][¤wǯä“ϪJ§™(äÿ£́bƠ<øƒ§ˤŸK^ªÛÖöM‹ä“ÆíÅI“GV•® "Ơ“]­ÈL‹—fO?/-‚³pÆï¥mơWäíξê¾ü&*o ^)Û6ÍJ•ZHÈNnñ“Lkú>îcº¤¡—}.Â>r|å£÷^”VWJj·¬ú¶¼ÖṕØ! )5ÛƠ“¯úyÁ Ÿ%í_yAêô^$k <¨éẹ̈`Ó¾°è“LÀyú”p ’y^A2gI0¬Ô’+£ˆă]Ôï#y©ùxIe8ƉỬ¨j#¼x« ëø©Ôà?$=¿́ ÀF̀è/y烙’|ÖùPoyï±×dDôqùî›̉å½—¥ư‚ ²×U±éHAc+9Ëú$Ú· á(Öü⫟Kà®_eWú©ơü›2tEºÄ§(]OƯœ7}2Üô ơS0º –Q€(!TÁ(‹ƯCvU jXE-%Œ@j€¨Z‚RF¦â`t™,€zĂúO5€Ôˆµ@´XµgÓ£&ˆ* Œ̣oë(a¸©d%Úæ-U®zÓA«í¨¢%©ƯêpÏ›.z: +¨eUîzƠÔèvD#Œ:™öOŒ*8- FmµE )!Ơ¤Fœ(]ô†Q‚¦µ@Ô>uºôiù5!ÔĂT¹ùMu¨¥7½e-F eù'›•TYH¬{ÏR·D&FPê£Ê2jZGM5âFÇÀƯlÂ(€ÔS¬¨g5,£ :‡ñ¡FL¨», µÜơœ2iÉ¥QZF- ª Ô £vàd’_AqwcÊ×}Ô´Ÿî Fû÷£ơtˆtïÚMº sct́Ú¹‹tëÚEZ¶ê(;÷“®Èvï‚Và†8?Đ\fL»ơ$mÚö=ú>Ê€ƒ0E9©1':D&O &ƒG̀èh$0 ]úK·C¤kÁJƯz ¬)æ±N Ë;wí×2¥ÁWưe‰«ù ö5]ăÙE|öª„CaŸ¾*««U”åŸT” +ï/J’©z~ú¡¬Ḍ–3ºP%0ư)cFcz]!2»dhkX‡+äî[Jv…—§»̃£(åd€(W1atmL–Tz­’9Æ:ßzë-£¢hÛ¶mƠºÏ?ÿÜaƠư×½ÿrZFçxüûŸdRç:̣R›É²  sÈ´Œ̀1á‰rä́Ïrâ›}̉å“N2}ư.'Èuó¤iƯ¯¥ó¸~R§Ïz9}<]Ú÷©!-'ÂÚX­§¤!.3'p†´₫¼`ô{Àhoé>-NÁRâ¦`yïÓ ²rÍly§êÉ€ ₫ ,±éÁư¤ JU„—wûôUà ï«+•ºæÙQiø ö”n£VÈOîßB†/'u”yѰ覯–Ö°˜½ôEtùÉ“Cˆ7MÚ¼Dj5¢àæĐ₫|™1 …<ơn]³(T₫ú£øÀzÙº/ÜÜóJ—v‹ä ®ÏßgT}ăyùzÀB‰Ü‡°„”™R¥]KY†̉n k°ÿ;U¤Yûn̉±;­èkĐMhLÿạuß5rô¼mu;y¯Ç4uμˆå̉áư/Äo''`sË™'ƒë½/Mfníˆç\¶0QêœoÑM7k#MZ÷–13Sdßw?ʬ¾ 0f¯X”ÿJ”Ú=-5›t”FMZIc|ɶY¸­[K2è3“5Ó§KÓ¦­å«f­ẽÚ4ÔeEG,Â(bzç «%UçnD̀+®û́÷2­Y-é5fµÄo)o4‹z å«>ƒeMîO²yơyưñ±û;I\¶P¿ÿ¥øç )íèa™Q«ºô™³\†ÖüD†Î@ø¼`y]Ó»4ïU"«Ï¼ ¤ŒªîF *ͲO ’M`VàlXL +®›e´¬0 @´Ă©rÓ{€QO ª–a{KZ ˆZj©a]%„2›̃ £¶®Lff½Ư2ªâGÑ.” êFm% ¦Ø€t[ü¨3³̃°Œz‚ÑI7½£¶¸Q)aTeÓ{pÓv‰µâDnz;ÚûÙ[ÙóV ÑáC ¡RÀ©7,£-¢CájWSh¾ÿ £† ø$p*è́ 0`t0₫̃ Fœ¨5߯WWYêµPµ€„ !ƒ†J/ÀdŸ^}¥OO¨W?¸ÚûR{JW¨ÄùîƯzK¨gwÛ÷êÑWzcûA†’G ”`$*V–àºJêö¯SSV3‰?˜ÍlúùÆlúçî»BÎO+F-`¥ơ´•‰Ÿ‚¬w& ±‹×.˜mYÖ‹ W©ˆMñFöûX*¶Ÿ.™XGdÉ—Àư2;Y m—®xÆơª" _O[+[WJÏ>”‘›¿‘3 •¬ÄP©÷‚§Mßçׯ*·^ñ°,ÛñƒœFÎ́!·]q¥ô…ơ”Đ—ê3QTm&ÉçÏKÏÆ¥Ơ¨Í̃@)#yùô EP÷¤ú ä­ZÖ:BjUÿ—ü³ơÉBÆüÂ>]äƠÏZÊ”©hP»±ô%{jYkGÈc÷ü]n<$Gö$J•›ï‘ZÂǻùă2tâPi>xôï̉DêN tÄi;÷­̀Gu€îƯ–¡Ud€|Öíèu—ê¨Ơ¸ăWùöÜ1iùîṣ—¿”Xd¾ïˆÛ,Ă·‘¡hØĐ°^+™¼Kˆz/T’ÚçHX̃\÷+©T­‹jWo—¬Á丮½¥f‡å²Ï)2¨‰¼̉n”Ä(³ÖûJó7jH€ÍgÆ×̉¤×xüî*5ju¿8tNBæü¿ÿ₫„Ôn3R#ư§,–¨](]…¸Îœ¬m̉à‹&˜ưDùăưAüf¯¡£¥i¿±²0,JúẶ7!ú¨| mY§­´%ñkbé̀Oä>~²£`·4¯U.r”#Ơ[j=w¯|‚åI‰ÓäÍÿÖ’€èĂˆ{m.w|đµô8\Zt&̃°¶÷dHEûÅ*ï¾ùŒŒñËßi5¤"b‹: ™ -±9ky"ê—2û̃Ȇg“ʨW™ôf6=j‹æ\½$¼ô‚t́9VÚơ…<ßrœ¬ÉGXy}¾#·₫ëy™¸îˆ́@©ƒè_©̣đ«̉d8º”,+M^ÿT¼̉ÏFÈøß–v“×Ir|*CT”º†KÄËViØM|̉‘7¬³Ô­ƠQÖFS·HÇ^‘~îOƯ©`ta VmJDßúX$>!9kM`”™ômq¢n.úåˆU2­£ D=ĂèºèiUj¶5 ̃±¢ˆb 5d@¨g¥EÔ°ú yɇjÉê¼ä)q‰å<ºé®zwµÀÔ°Ú¬¤5²ê0je©— F 8e¬è…ÂèÜyF“;ªÜö̀<·º±.£YTÅ7!Ùk]lZFÙ ´P9'·d%H;MËæ|€$D¨t€+ÁÔÔÄhnY½FÆL_"«wâÚö́•ùh40Ûx­È@i©ó±9YVl̃¥gj&©GeH:̀”Ù9蓾j³$8̃À±2rÜ46v,ƒÿ\Ö 6ăWóB3 .™±øÂY,[w¢„J7=-ó†4–:]Ce/’ÀÂĂÈĐ1SeÜâ‰A&û†Èª?‰¸Óº.NBcöªNR± ‘È<ÏC6ư’œ–*cÆO•ás–ʪµ1²>*GRrÓyvpùï9€â˳e \<ăfÆ£l̉N™¹8@V¢¿|îîĂºÂG,Ë@R̉!„/L—₫èî1`₫JY—N¨ˆ’O,Ÿd¼OFi%‡P^) y₫È/¤̣ É2oÜt4ƠGVåÀb¬ø(É0µ«¼üÉ0‰g2j¦åí“ĐÙsdĐ” $¥Ê T@{Ñ´íd}ĐY¶™(½m£ úyĂgw²éQ`âV–o–m(ưŸ’#A‹ÑeK¶lÏC‰Ld̉§!“ÉKñÊ*¸VÑ5(zÏxQd̉#^Ô®yoXC½Qä̃ªæ9U 35êaˆS6%ºXE¤«hÑ%₫LZ@„%ºç Y ê £ uQ[½­Î¨H1£†›^ `I9¬£pk/¡ÜƯöVá{›»̃H ¸euNÍ́z³ß¼ê/_HF!{KVY'Ă2j¹è µ€Ô‚RZç»Ơ!åñ 5¦Ö<»69û̉Û²è™QoZAƠÔ‚Q—$&Ï1£†e…Ê!GS±nzB•”›ƯĐ@¥¢.S›ut.Á•Ûªíg+¥¢ª5¨'5Ás* ÔÔB'#fÔU.ơGMë¨G )›&[Œy uBé„ Ú³ê-W½ÑöÓf!5­£ÊBª²ê‡™‰L€Q‡utÀ2ÔŒ#5’˜,‹(ăCÍLz&-Ñ=?ؘ̉2:Ø´ˆ®wĂj‰ĐiTAh߆úơ’₫½»aû>â‡*! đNÅưOˆOÁT͛ө¨ÊלªÂø(? …đ§³ ¾̉XT§Åó§ăïÁ CH@›oñ¹s1ÖÔ¼9æƠ¸Ç0|N”¬c W±>f·2}Îg¼7åe–@ èùÁrî-3C|1†|ÑDẠ́GRœ?Æ?ƪ?Æa…’’en‹í¹ŸŸ9å¼SsÄǦ|¡¥8ŸÎïƒ1¼á$Asgȶµ¡h*‹q̃%¸‡bcFKj:uêÔßƯ­]×·û6ƠŸ+F3úêC—Œ₫à€Q&o¬Ù`gü̉B¬IiƠ™ä«PhêU²ï¼jJ …ë÷¬j§Ø :̣- ŒeX{@vq‡–.Ft€ä#-Üá‹È7Úq.Đ8Höc»MÖ·DƯM̃.‹ßÇí¢\Î"û‘1¿Ùå;P²%(U=Qƨª˜<Ô½´jy€ï:o?¬lûNª₫ô¬7×Ù(´ [p ­8Q ~×ñŸQË”u>qN;-̣ŒzàØ>8p¹é°  §ª!zuJ3rw Í\wùđ“f{\uiÊÅöh$h°¤jv²p}êˆî„%§–,D ̃‹y¾̃ƒNOlư¹qœpñs>ç»U¡Tëuâ¡îÄsÉEBO>‡Øe‰bmS©Ï0²ó<óJ{q?¹¸¯LÆ["<"bå2ÔgºÄüÇÇz\ÇÖêD+§<ÔCå¶ŒÍd©¬í¬Û‰,ùÄyÔ¤Er;̃“Ÿq~>ÇoP‡P¸ÔL”JÙq…÷úXÇgŒîH9ˆƯH‡û=-CÓ`¥M߉¢˜Oß ÷<̃ôDđï9Ï‹íĐÎnÉ́‘HT«%­&I6JC%d¨g·Ạ̊Ñ%Ư£’Ñz4=íSv’4¯SPg41£yx™€âx¹gÇ&ËK-m)‹kÜ…µ—.ú5¦U4$<ïiƯŒv °®F7£Qt\rÑå £Q0jÖUÖQ7%ˆ0j¨0ˆz€QUgÔlj‡O÷yË:ZŒZ jƒQ—8R"‰©uÔ,ïdsÑ+ë§™5Ị̈̃y€Q«³’Hnz'Œ 7½;ªàSÂ(ÿ[Pj¹ë­¶¡U ¤FĐEl ªÀÓŒ:­£Î£…˜ Á¨mILN7}a¥»Ư€Ñ̉©Œâ÷LSF}Q+ƒÖP›ET¨½=Z€ÚÔ€ÏI6™ưêM˨DU R»uÔF ¤È¼W™ơEÁ¨-vÔj j¶ưTR0jéÓ:j€h 0 đFÁ":D(dƇZ0:X%$Ñ*J·¼ –[~-¢—±”5J ÔC)·kˆv¦ÇAhij̀ÂBX‚¥ÉU˜ ×₫h*},ÈÓ'—™ÔYxÖs¦O“y„ĐÙ³0¾gFß [đ\Đäö‚¥ßúÁÈ„D|Æ—Rø>đÅ÷‚ĆÊ„$₫¨W!(hÙrthZ!ËCBdùªU‚£+ĂÂdơÚuº~½¬ ‡6ÈÚ ƯÄe†Ö¹I-ç>Øw-\êkq*lư: [·ÖÔ:Y³Z­Q 3´À©c’¡U²ÖĐ ´S%€ú9-Fƒp£ŒGÜ€‹ Ç…ØÅe-Z´øCÀ(átyën”ß́ÿôIDAT’­£Œư½3́–QD@D£cضt;º>p¡u1™.Z×J±™­Ư–†̃àû%đ’Ë]. Ï¥Voz@ÁÊѧÅñiE…vá³·^s™³ï¼ÑBÓè5ïÚo^ơ‡XèÜ®¼Î|æ Z|6RËR‚U µ:³˜đÊØ{­!]•̣Aöeé¨kiơzwôgOxjîÀñ²Iå"Ó')=Uz -‹6dJ>`̉ê-Ÿ ÀÉ(Rg°±¦)íbü¤»¬>ô…Öä̉ TÀWÆ>̣9IĂ|*—±µ§G¡È<{ÓC)vÙzƠ³g}2 Ă'oGËÎ|à™€^ñJÙè)àŒ·úƠ₫b̀ơÛĐ^szÆoµdơ°gozi4z̉Ç ï},1~Ç)‡â0Ÿˆk [!ÓQ;5°‹ăÇbûø¤™‚>Ñ]glÂ₫GPµaZxB)6¡¥'Ûz/ç~1踴-yÂKv¢ëR¾Ê ß‹h:Üó©è<†XÑpÄ®ƒU±¢₫ˆ]J]eZD jĐe´†–lơF<–Ó*jÂhâDMơrÀ¨3VÔnơöG»OÈPº”S‡U®yºè•›̃Ï©̉XEí®z·lz»eÔj—²¢ư§'·½*~ï1vÔRL¢J€QK ˜.*ÎBª`ÔˆµâE HÍ2O–Ut¬§ äÏç<öaÛDƠ¿^A'{ÙÄ­ébéb.³A©S›…”m?‹5²é]`Ô-ÆÓ=£̃RĂ²é°NZ:-y†̉Ù¸wç6³aEM«¨¡€—™ˆµÚÚ{Ô³à½B‘-oïC¯Ô B›O»]™Œ- ¤“, h¶xÑ::±£fV½*€OªG½µ¬¢†eÔ‚QÈ £RÄ…Â"êăDÍXQĂê”+j”ib¬¨JL²%(Yq¢€:,¢&ŒPÚC•v¨`´»úớ"}{!é´'ç»b¾›)®‡Ôvا@¶7ƒ÷ƒP&p0¥†¢p₫0Ô31mG‡¡Ó:-F+Ô1£á®GmV>³ ¨5:aÚă™N†…ụd¼w°ªNE›ÑiH >?D`Q>?J Ñ›9›tvëb̉KƒI†Á°–²‚K¿ù ÜG,!ßA₫ø ¤]¥–¢µ!µ?¢¸ßS[™̣5ä·íJ!|'ùúúÈR_oÔi]"¾HLZêí%>§̃Oj >£jŸ[%âÚ=u`Úˆr0c‰¼÷yđ̉%3å ₫}­¤EÁh*âFÓ¤¨É̀ú_%-v25~ø'‚Û¢ƒOöÑŸ% –½ X¸2ÑM' &@vàÉ”æÀd˜𤵔5# ©†¾UÊ…µÍRæs°¯CH`¡Ơ’ÊF́Ÿ¥,ZM̀Ä”ÊP̀)Ú`ƯK³«[*,†©ËTÀg ܹ)l!©ZLRưÏ TˆQd?tZåñRÖ9˜r³%»ưàxèÊ“ @L…‹W©ná}çQLï3HK9/R N‚9/™ël²,…¦Æ$K1(ÉT",N!V×XHÛ±̀À.¡Ô:m¡€QỄmÉă¼»eÔrÑă€å¦w‡Q¾.́®7âH0ª¬£¶øQ«æ¨¢.0J˨Œ̣µr-Ú]÷¦»̃́¾ä£¦%Ô‚P¥>̃„PëøŒ̉U©,  L %|zqJu©a!uXJ- µÅÖQ»«¾0Œ*w=@³¨Ä#• o¹Ù- µA¨g5 T¨FñÇØ £€PÀ¨%‚¨*po&,©nK¦EÔÈ”·Ô>µYD§Á½́YkÔ‚P[g¦’¬£%¨Ơ§0 à2`®zƠ‹2ƯóN7}Ñ0: RÏ0j$/ E­j H‡ø¢n(Ưô F-™îz'öVîxe¥›ó´†̣ơ”v²¤€àÙŸ@ K©'x Ú¿7¡BAû₫€P¢¨':ÜÏÈÚ'Œ²¸₫\¯£cG±x&cÇŒFL(ëµ²v+cri}Æ{†¼‚èTô¯'ŒÎ ŒB3Đë~ ÔQ$¹FgÏ5@Ôˆ·6`”1Ơü<FYöVÂ({×[ ëd ¬ª–ha „¥•„yÊWÛXc*8ơ“Àmëï+Ê”ú-ơQ̣…u—¥›|—€J(]„%ȤKđÙeܨGƯ“́å–{M½ª¸ZGYú‰±¢P÷˜̉ßËJj‡Q+·+.åTÄ"²=ḥ₫s’  C{¿•$S‰p»&Qđ-'C©đ§b]ËïĐm 0e6t&D8uê,s*Û*Á=®„.<–`IL‡ÅJ£à–¦ <-)¦’…É́S%ÁL·.­g–‘T< 2ĐĐŒ¥à²…‹–e-:B»JÆnƒEo[€J-;‚ơÜûÂbf±µ8@^<€0~»M¦/nû)¬w*ó±ù–Nb̃̉ ¯dÅ䀥đ„D›É=k²t ó´B:{rƠ6d©ÖQ,s×,;"[Ư…nR[-e–­¦¶d’-éÈ4€`ꉄ"R÷:÷ɦĽ²!a·„Çï–uq»”ÖÆî„vIÅ×q(&¿[ÖbÛơÉûe}êA OGünÆ1Ù˜uÂE2J8β1Ă{d}â.X̣wÊ:tGZ³]ÖFçĂZmÍ+B\WXë°ưºḿ7o)ó9€Ï,Yƒ–Ÿ¡‘€Pô _¹1I–#n9´v›®A‘{´ÿô]XÑU ZEa E¶ª‚QƉÚâCUŒ¨'jŸ·bF¢K xQ¡ˆF¡^pË–Q3yÉLZb¬¨5AÔÛƯ• J%+ÙåjU0/t»\`Ô‘¼„Q|á;ꌣ>Pª°…”1¤°˜IMvu±²œ’Y{t‘‹eZa(ŒfŒ›.@jªr×+ ¥ûƯtÁ3Fny%€¡z ×¹S·Û©ă[ÖQ́ë°̉EoQ©%'˜ÚÜö–•ÔR‡«̃­Î¨µÅZñ£´nÚ¡ÔJR²Ă¨ån·[E]Ô¡ D ¦ŒXQºçM‹(a±&ˆƯ–˜œä̀’/܃̃™”¤Üók¨F]€Ó=“¯ñ¢f™'3fÔYo%2¤ ˨Yo”0ª¬¢N ø*F ë({´[ÖQF{°Œ:3é‡ô L]€P̣MƒlP:ˆYôækå–·ËtÏÓ2J¥›̃°vU0JuXEiíI8í®,¤Ê:ÚÓ°–QJiíÇ ~×7¬£#Ñös4îsôH§utü¸±€R¶Y¥µ¡RXF•¤”ÖQ¶‡E#„Y†ut6¬£l–àR3Ùñßl|Á¦uÔÖM“NË(aS¹ûéö7T¨   L@jÂ(ARÂh€£8‡‚QS„PÂèR\ƒQ Fà°”1£ª7=>…̃ÿÙ`”.x Y•tPV'–Ơ©Ç$4í¸¬I;aÊ×\s¬Ü®Ô®x®Ú’'+ÑÚ3ÉT!‘PD¬Ø”mhca…lÂ6.ÊÆkÛ®Ätå¦,(ÊÀ₫i(Û”*Ë×'!I)‡d¹ć=è}WEBĐF£>+× U@z0ºD¨ FƒàwQD £¨)êEUµE]—́0ª@´XuZEƯa”– W¹¨­¤“·Í2êØ´`Ô¤†»̃3ẴƠ:ºÖQ÷Bø„Q¤„ª)¬•6X4 Ô²Ú-¤æ2 F­xP§ ¤ £6 ]@U0êR¼&Œ2ÆÎau¨\~N ¥µ´°Û̃á²7ÁT)û̉»i!÷¼-¡É=™Éf5`Ô’ÓO uXBÑYn0:ÓŒ̉2fXE-µÊ5Ù{Ï»´ü4-aÔ|²%¨TweV½ỸɺgƠ»&0!f0ª@ÔŒÀ¶ŒÚaÔ¤pmvÓFmÖQwUIL– u‡R¨%B©¡jjºç-UjƯô|ƯĂ€̉¾=øÚ ¤ư ¥pÙ++©r×3ªHi!e)BÆá™HÇY@ )tÜơ“- ……tÆEWư4å®·€!"°”ÎaÈ‹™øÇdC₫ˆäç›@ªâO ¤H H +©é–·©a!µYC¹›uTYEM ơWÖQ׌VQ'Œ̉*êC5ƯôVÓ_F ́¼DèôTS”pê^(ŸÉMu_ú퀴₫×Mv ,éänÅkö©7,£â ÷¢X¸̉·’à´”€ù$®(í6”袳x}V’Lq^ }À pWÇCq²y¨Xj‡¡¥S€KÔ°„¶Á¸ nfæV&´.ă-°Vn¶ë` ‹ AÁº· nă€Î €Í €Îđ4–µupSk“ X娄=² ³0µ†ó—¯M܇íZ€®ơ)‡d=€.`·Đ·1ư(t ó†6̉¢Ù_ÓÊÇ×áØ¶(ñ˜–Ö¥b̃M\¶ơ<•R,¼©äƒ¸Ÿ¢µW:ÀvP"µVKCa€LĂ 5PhÜ^ Ư+«cö A@q[Í[wɲÍÛ%8*_‚"Ñ?>"O"r!Nó%Ë¢¶KÀ–¸µöJṔ~ ?$Á GdỶ1T*€’ʲD¼Æº ?`•'€Ï€ Ù%₫á™â¿Bßúµ¦a6­IḌ5×ÙdÛ&û È~@X ”Œí đŒ…¢[eéJtX A-Ѷ_QÔơaæÔ‘hät¡Ï-ÂƯîâZg|(ÚuZđj$§˜ˆu–OZ? P‡%t6ÀÓÅ J7-,¡ÊeK×--e†åÓê)?ÀX´‡èhïÉyÔ —°MP̀̃)Xç&ÑB×±»̀KlJ×2;/Ư—œơEÙt•FÂ? ÖĐ‘Œ eëOX;UëO@ØH¬·i,…ÔP¥A(‡4­1)¸áU‚̉@”L`Đ9X&¦J´~P¶ï„Â5>đ7IKưaơ´Ä¥₫N+&Ôp»ÓºifŸˆ…zwï$½»u’>jÚQz¡SŸ¡N̉Ë{Qæë^];c̃©̃Ư¸?ÑbJ *ƯùƒpMŒ#‚kWơQÙuÏΣGóYâ™JÇ!†tü„ x&â=™„÷l2̃¿)€Ó©†`12m:’Ơf(0% ÎœI>Ë‚–R–I3ªNđ;ñ£6·½ĂRÈ~€JÊtă»L­uÖzë5áÓP†(ÁKѪt‰åb{̀¨ơ=D uQ|năƯÚ₫Ù,£–{¿$<Û†º[I6úm’›‚ÑT€(øOÀ“^Dgñ̀úærT>x›\¨6TƯ~̣mâk%T¢·”Œt*àyœRÈÄÎ…roj±§è¦ăÔO’…×T&²²3qm°ÚRé°Ü¦)¡ä,·v¥́=ë́9„ ¼À )0A97¥àw§¿tr£QʈÚm…œNÏ-°xª¸Å¬Ï5“Ï}Ϙ¿eöXj¿Åq¿\C»ÏI<Ä©R^%´¾Œwè;@ùw€qÏsYRK;,}£®CiûÙƒmÊÇ|‘B©#Ä_FçQ§`h[î©ÂBY¥mĐV*û”lÉ:)[2OÀj‹ïÈ´c°¨Øae O¦ËLaÖUÓoÂzæI Ï>#r¿‘ yßÊÆüï s²1ï;,ûV6d̀¨c‡?"ÖâĂZZb©XĂÁ¶ÚipL­(¯¶ Û¬U‚»?‚ËÛv(Ûç¢ÿ|6dÄ‹²ư'³è× ¤Ó¨D J€ ?óP$ÊaEÆB1J«#£1¥0íÔ¦mH~‚6R[Íù­Êù[d5Ês9)«”" MĐFCë7˜ wLW¯ —ƠëÖ«LV•ͪ´ÖEk̀lTN•T6ª)d¢®±„¬Ø5JF9‡BC%Ô!#S5Ô2VC‘Qºje‘Z…uÔjsº ÛS+=(dåJQB¦.µbÅ -_±\–/7´lÙ2dơ.s¼^mb¶¯’¹=¶]n ÁËM­à2̀/Sâü2YÁ}̀m9‚s® Y¡´je„ûÁ”÷cÜ—Q\í,aû́ojEvÄËWàüÔrœsy‹‚ñÚ)®Gi1j–CAÁNb^IÅä¹* .Î`,sˆ¯âú€ @A ,MậühÉB¢ˆ/’D¨¥~LHÁ_ÄCK–ÂÂ]”|`Â:CœÇ€M^(_ä,Ë̃Úa*¡‘'!€ȈÉu‹½µBÖ+đ<¸_•às-ĐçØ4ó³–@Í+¡5Vᙜ"…îÏÏO cNéÔ½EÈ܆ï•zînϯĐ5₫×}±º ûºS‡₫y»î4_sZ´nÇ:»Ü·½ưÿ°₫ÿî(…₫Û”Ÿ₫ÇrƠíx ƯîÔ혿ԺíöÛDé¶?’nÅơzÖ­·̃*å­[pLC·Ö-XF·ÎÚÆ6ưÛ-‡Đïo¬›±OuóÍrs)tÓÍ7a;7Ư„×6Ư„ù’u#¶)N<ÖßXJ¹˶ßqíY7b¹GƯ€åvYÛq™9ïr½ềû(æ™Üˆu% ÷Àûp× XVHh Ă&:Å;%‹íÉé)¡‹ŸĂăaó˜¯Ơ:›Wƒ™>ˆ©] «íRÆ®+ )ʽư•Üô¥Dû6î-E ¤å•ØTÏ3JU0z îvM¯ˆ̃äz­zụ̂û¡ Ÿ¥~–z è1 Ç€z ={î9ùơ×_ǻÙ³̣ă?ÊO?ư¤ôóÏ?»È¾́—_ĐÿF.₫ôj0 Á‚Qºéă3úé§äăß_ÙMï>øÜËBÑ…oeă—e ÚaÔJ`R0ºŸo~Pí’Àè•W¢ÿ|ß¾̣₫ûï_’óÛŸçµ×^+W]uƠ%¿²¼Çz_ưÇL=ôĐcàÏ8₫÷¿ÿ)=tèœ0X˜àf6ÆrÍFAÜ#Füæ\ZR X¼îºëdË–-̉ Aƒßäø¿Å5ëcê z è1 Ç€•1PŒ̉úÍ7ßÈwß}WÈZZÈ2jÂ(]ơÊ2Ơnú’?D́Úd̉ˆ®%ïSÔÀ,F-7=aoàÀ H”l?Ö5×\ƒoăT&›;V¨PY‡3–ÖBú / ,Ă:„\­3L€pËÂÖ7–é(¼Û¶m[騱£ úÿûßÿ,¼ÅR»vmd¤Ù­÷ß¿ă:=~üxu\¶æö¼‡ÿ₫÷¿j¿êƠ««}Ím8¸¹¾sçÎ’˜˜(aaa² e&¾ụ̈ËRAé“O>©Jΰ̀ÄđáĂåꫯVû5ỉDÁ»ơü†À..Ö3}ûí·UùîÇ{û«|™èû¼øÏ¯~vúÙé1 ÇÀ_y x‚Qºë ¡„Î#GÈùóç• ßrƯ†Q”C©0•M¯aôÂ>P*»º́Y›ôb¤G7=²é=ÅŒH ‚Cû¹cÆŒQr·Hér4hĐ­_̉5>ôĐC̉³gOINN–-Z8¶¿óÎ;%::Z¦¢Đndd¤ê“kY-™Jhܺu«‚8Ö)díĂ|Pe]̣ăÜ©S' Wưmï¹ç’™™© ë{ôè!<đ€:oƠªUƠ9¹ï̃½¥bÅ%^ÿóÏ?¯²úx­[·FŸßIª0”÷Åk³A:uÔuè ¢Ü¯]»v̉¦MU„»[·n¥†ø’«^qŸưÜôsÓc@=.ß1ࣄÎo¿ưV˜¤Ô«W/eÀ¢•ôܹs`t¸3¢ø̃tÓ«˜Q³è½¶Œ–₫M_̃ÚHY›ôB?4Œ&£´Ë;Q™G1`ôư L´$̉mï~ZOƒQ0ç¾@JëbË–-K}}„6ûö„QÂç| ÎCkæ7jÔH•(!ÔƠ¬YSÿ¾û¤$µÍ¿₫ơ/ÉÊÊ’÷̃{O­{â‰'€¾ơÖ[̣ØcIjjªª§F «§gG+¥uÜ̉<ÛúơëËöíÛ¥iÓ¦r×]w) &Ạ̈ùtíÚU°uÆÄ¬ùë²³³å³Ï>̃+¯“Vâß*¡4÷¢·¹đÏ“~fú™é1 Ç€¿ßp‡Qºæ¿ÿ₫{•ưïÿ[>†Qi2ê¬2ɉJë¨Ó2ê„Q£#“¶Œ–̉́ƒÜ̃ë1¤‡Æ^x—&Œ(Fi©¤‘ÖK÷[—.]P8x–üóŸÿ,´nÀ€*®”UÚ)-›:k{î»yófk¬V·n]åZÿú믌&$$Èă?îØ]¸í½÷̃«¬¬ÖuÑ»mÛ6•xEw:÷#¼zº.ZryZ0K{ƯÜîóÏ?—>}úŸITT” )ày ê´~ZÇúä“OÔ=Ynzºñ¹M¿~ưxñÅF/£@ù zÛßï‘~ÖúYë1đ×v%h̉=Oo$—7õ\ÆÂcKï,;8B ¥`Tµ(V–Ñ:fôb>P¬7jeM̉ 9aô8zÓ')ư^É“e”VÊ tyùÇ?₫QèøƯ»wG7oUÛư܃V–GOÙø®“.k†0v²}ûöưƒQ^‰‰QΆ *+cåÊ•åî»ïV.|Æ­̉eO0¤¥ôÅ_”§zJâăă•ơ´(%̉̀Ïă–&̀€K×á“ Pœç9OK+.C>üđCe5eOƯµhYÆ{f|,Ưú¼Â5ìụ~êm/lüë祟—z è1đÇv¥;₫ĉÊăHïh^^́Ư»WÅîÙ³G­#ˆºĂ(û׫lz«´“®3zqÂ?J0eç¦̉~¸,M>`€¨F_¯l”v¢… J°³—‰Aưû÷W êGJ@=z´}¤›¾´×C—6QJJ¤¥¥©cs_v…ák&)1î“Qº̣i­%d̉ÉmiÉ̀ÉÉQ KÈ#~ôÑGêx±±± D …Œá¬T©’¬t¥{º>䨱cƠ¾tíÛ-µEƯï›–`‹¢×5%œ2Ä!77WV¯^­¬¤´óùđ₫˜Fp%X³Ư-·¥}nz»̉yư¬ô³̉c@=₫cÀƯMOëè?ü êˆ‡»–Rºçé¾'„vÓû‹‚Q¶Œª̉NF/npĐ]O½UîéB¬£̃ô€Ñ4À(•u1£‡¾•J&Œ2¶‘ ?î^º—éJ&H¹¯£uëJkµö§å•1Lb}Ïwß}W› Çè’ç2† 0îó‘GQL€{ùå—•Ơ±J•£^yå²ÖñxLZ'i‘,î ºŒ=後ă,Íă<é‚ç>́á¾ăWùbü+c] °Ü†×Á{ç~Œu)͹ô6÷™ÑÏM?7=ôĐcà?ÊVg”1£„Qoå¢÷Z8_gÓ—ơCa·^H́h!”Z0úæûŸü!€ˆ–MZS_zé¥Ë₫z×úè£*1CŸÖ\Z˜Ëú₫ëưÿø_ªú=Ôï¡z è1pac ü`”1£óµe´¬…ïí±£u_*Ưª`ôG‘”ư°̉:ú„QZKJËhYŸăo½?]óŒ¥ÛŸ®ø Iêú­¯M¿tŸưœôs̉c@=.1P0ê ££Ó,]ô¾̀ åÛ̀éª_بtÅŒfnú?e”±?üđÂÂÈd)ºàiµÜóúK­tcU?'ưœôĐc@=́c Ü`Ô,z?OĂhÙXơçœ0ʾơ¥ùĐÚa4•ILP`41£oüAÜô¥¹O½MéÆƒ~Nú9é1 Ç€z üQÆ@q0Ếz«ë’}êMï¢÷ˆEÑ%tÓFt;Đ²}誷’˜8}î¾’G=7}2ÜôQºë5ŒÏåœXŸ” R̀̀/퇓™úLø*ª׳₫)·aUi[¥–öüz»’ǽ~Fúé1 Ç€ü1P>0ỂNŒê:£¥†â>@)ưœ@ʤ¦’>lª´“ £Q;ŒVª\U•vbV<áÉưX̀¦gñù;Đ:‚{¹ÿ‘]ÑlaÊz¥,%UTa|OÏ—€ÉÂúbXYe€åX.IWëÖ­S¥©JzŸôú’Dz~Fúé1 Ç€­1PV `6=º9FUÓ, £å$,ëdYGÙ.´¤&aô`4qŸ¢`”=ÛÙ‚Ó½»ëc²å;!¹¼'`9RæÏŸÁ±œ´̣xö\Æ×Œµî‰`g¯aỆOܯ´pGk'aYA­NHÖñYʉ…èYûÓêWo­ă¶¬­Jñ¼öç̀rSL¨bé&®·_3cF™¼ÄrÝcÿ́³Ïª§Ö₫¼G̃ƒ½ (ïǪ™j=ë ûÜŸçp¿’̃{½¾äχ~Fúé1 Ç€—ï(+Œª̉N€Q‚¨×FQ#ü3Ư›¾loú…Æz„ÑĂF̀¨=©Y³fª€»§z£,O ơTotàÀ HKk!%\N˜0AY Yƒ“-=ùE@ë+ûÄ[uB §ª;×̉˜ÎưØb“uEKúa¦°°0騱£DGGË+TSû~O?ư´jê£l7Fàd}S–g²[‡gÎD̀ öáu°P?kỴ̈˜„TÜg1|Öe)*Ö!µÜô¬1Êăñh•µ –Ư£ØNuÈ! Œỹ ¨cNœ8Q&M¤:6MŸ>]ubÓ’î]¯/ÛçL??ưüôĐc@K?,=|ø°£ ½Ơö“q¢lÿéI,?bøp Œú±è½™À4_½×0Zfˆ¸Đ¸QËMŸËh*ăF¡LFƯ˜¤‹/öX@ǶŸZk̉zJX¢ûº¸/c,g̀˜!ăÇW@ơ₫ûï«ó@i‰$àYí ptqóX§“%“Ø۲༼đ Åntvd¢Ơ—Åï—/_®:"13ߺNnăÉ2JØ­W¯²p²—üü²²€”çç>;wVë­gÂgD·?[•ÑO¨´Z~²KTzzºễÄđºñ9Ïë̀;0ׯ__jÔ¨¡ ₫sAŸ`ÊçD-D B¹₫’¼ô_’ú=Đïz è1đÛÂ(»+íÛ·O<(‡R"œRlJÙç?®:4FiơµÁ¨å¦×–QFYoÎ`§«¾¤z£`4ƒ0zĐs6=A‡1î×H·2¡}êƯ×idûâîVQŸ°F¨|æ™gäƠW_UVUZ] cTƒç#8̉2ÊÎE<>a’đÈư8uw»»Ÿ›Ç&²½e¹$²¿|q0Jè p??•^÷¾ócÆŒq¸̃¹OÆ %""BíÏç@k±§{Y´h‘úÀ÷†â<—é/Àßö P?_ư|ơĐc@K?hxJNN–ÜÜ\ùé§Ÿäܹsªưñă'`!¥u”VÑ#ràÀ!Ù»w¿äæmG8\œlƯºUÆŒ-A–›~xFçÏ™%‰ñ€ÑÏ>åßQă߆đơúêEÀi¯*¥Ob²J;%™ÉK*ÉÍMO—8A‡nx÷Ö•ŒkdŒ'ɽü·={¶²¤ÚrúVé’&à ‚QQQ̉¤IWɘƠ&@äà#€̣<Œ©|óÍ7Ơ~œ\é.·ÎÅë|́±Ç\úĐ3f“1Ó¦MSñœ¼B¤±„TºÙiå|çw1±<'-•t¿ó|d»+ŸËy\̃­®öxY^¯í?ÿùËØnÑ¢…ềT§NÇ}óÙñúyo¼6OÏàƯ£GơŒ)ÎkËè¥ÿ‚Ô¤ô{ Ç€z üöcÀ ¥Û¾};\ï? ăEO<đ<€đ¶Ù¹s·ܱ́¼°¡pÙ‘‹ƒ×q³l‚±g¬Œ̉2º€1£FËç³'1±O}qŒÚ³éM­ôîGrÜáÆ ó¢t3†rQf‘^=¹ô‹»B!]ß3Zí®}Ær®ZµJA(“u6nܨ@•Ç£©ÖPfª3 ¨zơê.÷M«%Y©R%ăM?GươĐc@=~ï1`‡Ñ~øQƠMMIUVÑ]» À9°æ <ă5oƠ@‡Ă1cĐ)À L&ŒHΛ-)Ú2Z~ù‰»0z~Z)`ÔCQ{6}«V­T½Qû@cé#Z*­e,}dƠÚd{–º÷̃{U\¦}?–*bé'•gÍNk÷¡ƠÏÏO‹gÁy)¡“ñ́RÄ‚î=ô|ươת—;³ê­ưÙëYRê÷₫@èó•ߨƠÏR?K=ôĐc@̉ŒWưANŸ>ă€O§ââ$!>¬,0C–5ƯôK`Œ.7GRµ›¾Ü ªÂµ¥«5ʘÑ?8K;îÀTÔ€`avZ·Ö³H¼Upn}ƒç``!vk& ±>([„²£‹ÊwèĐÁe½µ-ĂØõjjO4b]OZGÛ¶m[nϬ4_o£¿ ơĐc@=ô¸<Æ€»›~ß̃}̉¶Mk妟1cºrƠ“7X ’@c¹é Ëh‹̃/ơ1ÜôĐb £åÿƲû’7úÜ}ïL`úÉK†ÜÛơ¡ctvXbvÆi8P|||²<ƯêAAAª•¨Fđæ³ØüÛo¿­z°[ÖOûyØ‹-7í–Ok=ăIÙ1i₫üù.Eú‹¡üÇ~¦ú™ê1 Ç€z \ÎcÀ5é{9{öe=wî¼gOúƒ«iffz̉Ç1£ŒúK€¯·,…et)-£óçÂ2 cFËóM/á„Ñ·+F¡©£PÆ‘_Pô₫Û‹̃F»ví*}ûöU ÊøNoooKåܹsU¿y;Œ®Y³FØ‹ƯZÆăŒ7Îe¿öíÛKpp°ú5cï¨Ä®F´¸̉oï¦TÏMKùê1 Ç€z è1pù;Œ₫øărüØqY‰¼“ˆM›dÓÆMhƯ½ZBC×À=̃L`w…ÑÀF½nzÂhR¢†Ṇ̃ü¥…Ñ?ÁMoÁèXF§1C o:“X<î÷Y³f‚Q‚ª;ŒÚ“́Àz×]w9 “mAăââ–U&B±—ü”)S.ªÍhy>[}¬ËÿKJ¿Gú=̉c@=₫ÜcÀƯMàÀAé߯¯,Z¸P… z/Y"Ká±Ư°a,£ÙÜô¨3ª,£‹.Z0W’ £ºhù œ”~h½@7=Ás×®]ẬMŒÉàü¼yóx2A©råÊʺIwú[o½¥ê²ÿ:áƠn]ˆAcYOéögw¥>úHzôè!)))̣ÁH… Ô`"œ~öÙgªûR•*UT2“₫²)¿1£Ÿ¥~–z è1 Ç€”1àî¦gQºéO:-G“Ư{öɨ `J`rwӳΨ£¾K¼dñ‚y†eTĂhù}́-AYêÉÓಘRMŸz0úÉ'Ÿ @x†ÜpĂ *F”–R‚"ÏĂ&Æ|FDDàÍߪ@̉ʪ§5µqăÆë!ÈZq¥Œ=eÀqZZÄÇÇK5ÔvwÜq‡Đ½¿ ¦wÂ*cN™üÔ´iS £x>”/}ú½̉c@=ô(¯1PT&ÂgñvÉC¦¼¼ªSbbZ¡lú ¸éưư|”UÔ×0º0¢Ưôå ¥éOï€Q[̀hf)cF9˜Xh̃TöyZAér·Ä ´r[ºßíí<  ,Ëd‡%X2ûÚƯû<†ư˜,%UmAËëC¡£¿`ơĐc@=ôøưÆÀÅ÷¦”Ñ£‘Mˆ&À¨/ạ̉0Z₫o^©aÔ3Ê$&•M°ä&ư+ÿ÷L?SưLơĐc@=ô(Ư( Œª̉NŒúĐ2 ]<Eóµeô’ZFÓ¢tƠgFK‘M¯?,¥û°è礟“z è1 Ç€å?ÊFưa%Œ.ơR0–’¤³éËs°–Æ2ZÏ,zÏú¢´RYGĐ›₫Đ7%–v*ÏkƠÇ*ÿ©~¦ú™ê1 Ç€z ü™Ç@™`”nú  ô_ª@”Z²x`4YĂhyRĂ(Üô„QZFÓœ—LÂèA £åù^ècé?z è1 Ç€z ”ï Œ2Ù9??_Οÿ^Nœ8)G‘E¿s'ú̉gçJvNÚƒæIjj¶K’¨ÍѹY%W+7½ £~K—åíµP̉S5Œ₫înz»eÔ€QZF‘|í¦/×÷B•ï~úyê1 Ç€z FÙ‘‘Ơu£'O”ăÇO¨RN¹¹yȤϗ¼Ü|Ơ})%5]’¤[%**JÆÀ2¬`ÔW¨ÿRo¾×0Zîđc¯3Zư9σVÁ(,£©~t%F™ÀTéƯä*dÀ³́̉‡~XèúØiÔ¨QR©R¥Bë˜1Ï®JÏ=÷\¹ß—₫̉_@z è1 Ç€z è1À®ŒûöíSwÂֆɰ5J«V¯VW®‚0 Q ‘!+ ”zÊ0`¥‚|U­Ñ_”xB¦Œ´]g´₫âÓc@=ôĐcà¯7Ê£ĂŒ0 U‰L€Ñ¬Œt3Z^&ZBí0ZáÚâ-£„ÑŒCaôÁTVÏ-Z‚Í'xBh½zơ ­cœ)Aô“Oœ±§åuú8½/ưë÷\=ôĐcÀ>ÊFưUy'¨aƠ0Znń·sÂ(™ú3›₫bFÓ₫ ,£-£ÛQgô5³´Óĉ¥uëÖK;Í5K4hPh-© .Dy„ÏÊíô—₫̉c@=ôĐc@k ”Œ.Cy§@€h,¤~¨5• ưLgÓ— ¼5ªè„Qvb*FŒŒÂ2Jå˜0jÅŒ̃tÓM÷¿êª«äÆo¼àuú‹D‘è1 Ç€z è1 Ç@YÇ@ùÁ¨<À₫âØÑ́̀ í¦/ëcí?²†F6*Ù2ÊXѬ"`´¼®IGñè1 Ç€z è1 Ç@y2Á¨*턘Ñ`ZFư;ꯙ²³4Œ–‹U”o²o3'ŒöªR ˆ*”æ"›~»‡lụ́<ú8ú‹H=ôĐc@=Ê:Ê£¬3º ù0Ë‚Ư`4–QbhüÓEï/~ ÆôrÂhƯ—‡ÑÓpÓÓ=O¥̣1f”¥ŒLZúè1 Ç€z è1 ÇÀå6Ê£²l ß#n”e˜UŸMƠ1£å‡Æ:aôƠ‡J£L\2a4—0zø̉Áè•W^©zÚ³véå6đơơè/c=ôĐc@=.1PNË(¬¢T\ốS¨ÜôÚ2Z.đÅ2Nö²NwßR ˆFi!Í=7ưá³Ëèµ×^ëñºÅ­cú‹ùÀ21jÓ¦M̉¶mÛ‹ÚÿbÎéi^?«èV¦—Ç—Ny½¯ú8úưÔc@=₫c ¬0º<8HV@ŒUPØÑm-ŸÁñÜ}N=5±øcÖkØTÎü7ưaÀ¨©¼ă?ËÀèkïV‘«œ&LÆ{,í4}útùüóÏ=–v7oT©R墀̣oû›ÜpĂ µoy~ÉÄÇÇË—_~yɯ£<ïI«|>gú9êç¨Ç€z \Ú1Pf]]ŒØÑ!˜̉B›¥Ưôå1°;U.]Y'KÁ(bF+£`ô¼ä›0jÅŒ>öØc²|ùrùúë¯] Œ–Qö« •ZµjZ÷Ê+¯ÈÚµk=ö«/ê>ï»ï>eüꫯ„ơ­íXBËx-„_ºñ-‹å­·̃ªÚ²kzª{úÑGI»víä‹/¾pó_ÿú—Ú–Sîß¼ysun¾æy+W®,Û¶mÖYå¾/¼đB‰PÊëbmƠ‡~Xu«b£‚üƠW_-/½ô’‚ó§Ÿ~Zºté"/¾ø¢ăxo¿ư¶Ks€ÿ₫÷¿R·n]¡•˜×̣üCÖb>ƒ̣'ú—öKT?ưüơĐc@²̣€Ñå€QXE—Li!ÍËÉÖ0Zsyk'ŒªV:Ë(­¢¹GÎHÏËvÂè§›×ÄøÍ+Vx´²÷üêƠ«=ZH gaaaB,ͽØ¢¢¢¤  @Z¶l騇EôeÑ¢E+>>>²aĂyï½÷ä;î´´4u !!!>Ζ(Ë*!Ư¡233%<<\²²²¤sçÎrươ×Ë«¯¾*999ªƒ- ¼NÛ‚ÎîƯ»KRR’ÚPJ.éŸ<;OEGGËúơëƠsc8C§NÔùÔyx¯¿₫º:&­Ïă·iÓFbbb„ÀOơ÷÷W׸eËÙºu«ôKº½¾l_rúùéç§Ç€z \̃c L0v +¢«B–ĂU, Ja!ÍËƠ0Z.€A×¼3ÊNLÅ}˜h= 7=­¢„QjljŸe§Œ̣wß}·øúú* ¢û1zè!Ơ»̃“K›–@BbµjƠJ¼?+•ÖV{ûÑ;ï¼S\:uVZ¶(mÖ¬™Ü|óÍ ÜFŒ¡àóSdÁHi…¼ç{$55Uzö́©¬Œơë×W@H}üñÇ%%%EAa¥J•ÔzîÏkàưU¨PA/÷±//îyrÛíÛ·+0¦u”Ç´¬›:tPpûæ›oÊu×]'sæ̀Q Ëă 8P,Xàx>M4QVe®9r¤PZD åC‡-d¥Ö_˜—÷¦~ôû£Ç€z ”ÿ(+Œ†¬X.«W†ÈÊåËd%¡@Ÿ—«-£e¬öxQém7– £ßü*’ ͈R;O₫,»£ï¹–v¢ÛÜÏÏÏÅƠm]/-{\¸­Çw̃y§Dµç F7õ¬€vÙ²eêheèÀ-·Ü" ̣ïÿÛq|B¡”]ZTi]´Më"¯‰÷“œœ,o½ơ–Çë¢5“0JwyißB$Ïp÷}ÄK–,q,÷Ưwdr»AƒÉ́Ù³ëµëÖ­S¯§M›&Ç/ơ5”öZơvåÿŨŸ©~¦z è1 ÇÀï7Ê £+CVÈƠ«dƠʲz pº=?OĂhY±½ hJ¿’-£ßFó|/ùG/ Ư¥`¥l0úä“O*76ÏưéZ§på¾Êu´D^ȽѲhQ¥e”0ÊxLÂ(qé̉¥‹‹slOȤ5”Û2₫“®ùêƠ««ó3N“¯iävÜï®»ị̂xmtåGDDHÍ5K}í´¯ZµÊăöŒåñh­åµôêƠKYt9? îÂçm·Ư¦^ÓÊk‡0Ê{¶Z¯̉âûÆo”ú.ä¹ëmK₫̀èg¤Ÿ‘z è1pyŒ²Â(­¢k׆Jèê• JùzÇö| £eàlưi¹è'~Q̣`©×°‰|%„îŒn‡ Nư,Ga­\UA’ ênơ¤û™‰7„(wë"ƯÚÜë.¤4]猟¤ëœ±–Œïä50.”VL&/ñ˜ŒßäzÂƯôUºñ u‘‘‘Ê‚KècÜ(­„Sº»Ç9₫|!Ü¢éÎđÁ‹„QÆ“̉â;ỵdŸZ̉ûĂXO^‡å·oÏä#†x{{˸qă$##C…p›gŸ}VíÇP‡Ñ£G+K/ïëx„Vî7sæLÉÍÍƠ₫ºC‰c±¤±ª×—üư¨Ÿ‘~Fz \̃c ¬0 ăQøº0 ]-k×JW­”;¶k-ëÀ/á„ÑêÏ•<ˆ£ß"f4ÿÈ9¢Û1-8ù“ÀMÿÚÛª̉N´̉ÑÊè~mt?̃£E”°7eÊ” N´av>-“&M–†²ÜÓN.clçàÁƒ•Ë¿oß¾̣á‡Êÿưßÿ)w73ú§NªDxµ®—`اOwcÇUđÊuŒe1cF‘–QƤËI µ¬«Å½GU«VUĐkÅÚ·íÖ­›ÊÚµk«¸×F¹<ÓgyF¼¼¼Ôµj™eƠjeẨâÅ‹UhÂ'Ÿ|¢ADèz è1 ÇÀ_~ ”Fa Ư°~Q Fwi-‹¡'îv-vÿà%ϲŒî„½&ŒZ–Ѳ̣o½?K:1Óœƒ̣·>WYḮ|f̉—æM›6UñªÛ8 4çĐÛ”üùĐÏH?#=ôĐcạ̀eƒÑ¡0ú„JÄÆ Ê:¾n­̉‚];µe´,ƒ~d 'Œ²7}iE=7=!t×1C{Oư$»™ÀdºéKsœK¹ 3ù™Á₫Úk¯•ê/Ơµ2c̃JJr¿f×3|€ÖP&o1á‹V`OÖKuưú¼¥ûLé礟“z è1đûŒ²Â(á3*b£l _¯´~m˜́.Ø¥a´,Ø̃¾Ơ›¥„Ñ£ÑL÷F÷ü`”I?öbơey†¿å¾L:*ª›clYŸµHiAƠuDK7~Ë÷«¬Ç¶‡”ơXzÿ?₫xĐï¡~ơ(ÿ1Pf [#›£"d¬£´̉e¿gw†Ñ‹¬Œµ—ÎO+¹¤“uz_FEd7@t´ûØy9púgÙkK`ºØk̉û•ÿO?Ó?Î3%Œ²`hégp¡cà©§º¬==ú»èó]ôg~¯Ê £ëáß¶ Шt!Âeÿ̃=F/vĐØ».ù6+ư‡Ä‚Q‚è̃ă†ùIÁèë7ưÅ>3½_Ñă„áLZÓ ?£5j”ê¹FÙ¨€IrZú\è(m9<–zcÅ ư}Vú¿{úYưyUYa4–ĐØèm²%*R)jÓ&Ù¿o¯†Ñ‹ùÜ}ËBk¨e­̣téƯô?Â2º÷øyÙwÂĐ¡³?˾cg¥̉»F O«.¦ûµÑµ\Ô:ŒgǦ‹¹½ëûÇú¢,Å¢øº_ưÏ‹ï-ăWYÄÿ·8₫åzL¶¶8q¢Ç Ó;vT•Ø]˺Vs`92Æ.>Ya‚•&4Œj½Pµoo‡Qv£³:̉±Û|à„QOåơ.×Ϙ¾®̉ÿ}ÖϪägu±0úĂ?ÊđaCeâDăăbdÛÖ- mA‰Åƒök½˜Áש²D7z!Ç e”0JƯÂô`t?`Ô*íÄ’J,£ä~\₫Á% ±Í¥û:–vb™"ÆA^Èơèm ¿„QÖOƯ¶m›KËPư¬.l¬—æy=÷Üsª+Û®ºoÏ9–ăØ¶¯£+~ÿ₫ự̣Ë/«Î^ûöíS¿4Œj-/eI8ă.==]…}ØÇ ›x°́›Ơ£4c]oS₫ßú™₫₫Ï´¬0ºic¸$%Ä+ëhl̀6¥‡Ô0z1ƒ™–,«(3ê/ä„ÑŸ£¡£ÔÑo£Ç¿q¸éùGuÑ¢Eª₫¥û±iưô÷÷÷¤,¹ÄÂôîơ4Kº>˧uV”åƠư+VTuHY0­5­Z¢Å‹íCyO¨ú ´p±•'×ơèÑCulâ2Ë*Áă1¹¨wï̃ª¿<_ÓJÆsZĂ„*fÎózض´¤ûµÖ³ø>¯÷^¹råBûñù>Øwûí·«^ơ£FRûˆ́ëÙ”€×Á{`Sû:>g®cíU{+UvÛ¢uơ\=%Rñ¸ïÑêU{ä3ä5víÚµPS₫ áºvíÚ9®‘5g™̀E$×ÙßZø™ï;ëÊ6hĐ Đsá{Âëd£ûơqLqlñ˜öF´|rü°Á€ơ\î¿ÿ~µ/ÿÈÏ™3Gh…r¿W6Vøè£„ï?+œg÷. £FË Fù°\ñünxä‘G C~0‘³4ŸE½Í…ưÔÏẹ̈}^e…Q&-¥$%J\lŒÄC„̉#‡Iu£Û¤ñæS=öÄ%)k^È3#Œ₫ =x̣{9tÊĐ1TÁ?`ƒQ鍊n’… zR₫Ñơơơ•öíÛ:7­FleYw/]ĂŒÇKKKSVv$Z¿~½r}–tOlEJ«Ë#Nhµ-iZºØ‰½ä7nܨö¥uîVf¾ïÚµKØ–”÷™™©ÀˆÁŒø¤¤$ơLxQ^^‚X¶eqzvâ~\NĐâ~Å]–çâuđ>تN:.¥øÇ†Ç´‡0H€"X±K×óz¸ ]y„×¹sçªå,e­c<(¯“ë¸ PXuZ ç¼^»Ơ!Ç#¬±E+ŸÇ{dñ₫¢:XY×ÉçÄggíÇ÷—`G÷6AĐKkÉ®Tưû÷Wđ÷₫ûï«÷€mQ­÷€-Uù#€@¼{÷nơc‡×Ïc·lÙR8†øĐ*ÏFlXÀcVûÏ₫Su¹âØâ£”?–¸ËW„Ñ%K–¨cXNĐLLL65(i\Yë5Œj-/-͘ă(~‡•f[½Í…ưÔÏẹ̈}^eƒÑ!±ỈRS$ÖÑÄ„8¤ÇÖ–Ñ ô®½Br;­¢Lbºư¹ma=/Ç¿ư0Z8©B… ê8-†îç!üñ¼§_ætY²v¦»ơÊưBáëh́Dô[çó¸lÊV§îÀKâ: >Ø~”=í œ´|±Ç¼åăqXtŸÏ€÷ÈưØ̃“÷À®P\V’ûŒ–:̃;áûñ|Ü×̃VÔŒôX Ÿ?Øn”phưAâoF5Œ₫0JïÇ´iÓ.øoÀ…₫ÍĐÛ_øßYừ~»gVVe}Fz¬£ ’ %ÆÇÊñcG5Œ^È µÇ2©4—ÜOE™Qe=|ú¼aô ›e”ûdØRÓ½=×ñ4­iînb®£…àS´ØØc̃“‹º¤çÂóÓªH+­´¥qÓMkaÉưø ‡ƯÊE£ÛÖ:—µmE 0·̃z«.`I×ë¾îù’₫x‚Q.#\ѲÉ÷†Ï–aŸ^¶Te;WZMfÍ¥ ‹B‚-£C† Q™̃´ª̉úg]·!¤Ûc~†@¨#°]Èưñ}ç³³À×¾/c,yư–嘖Rƒ0JĐä{ÀA܇X‡[­Z5 w\ßC®#ŒÖ«WOY7i¥U?„ø₫F"Àû.êú­üÑ¡aTĂdY`²¬û–6›̃§F;à¹ï;½íïû>”FYc4+#]R““”?zBĂhéßDfĐÛ‹ÜOü¢ôûÚ?,ŒŒ9M ư^N|÷‹<áŒåö́¿víZVJº|iE#”¹i qÉ>.êĂJ¥Å‘_ªÜæ‰'PđP/e+¾ÙÎt×–d‰äñy\B§¬ÿ÷̃{OYå,‹­´ÊY–QZú,(gÏy”B´Đ½đ êêׯ¯BJºB!Á‹IhbÖ|Ưºu],£tg°́Ï™ƯŒ%µ–ÑÅmÅ•̉Êh]³Äé¶2eږǶ,‡„EZiµ›0Ú°aCÇ2 F­ó=ÿüóỂXœ̣ø|v|†<>C*ïI '¯! Vl--•´Œ̣½'Œ2iË‚X^¯F7¡áƠ₫^₫íoS0J>ŸŸ#­° / E˜ă‰ï9ÏưÛ£–e”?Pø,Üc• ê„fmƠ€ZVÈ,í₫¥ù̃³^ªĂ„R C÷·P?·?æs+Œ‚‚÷‘’™!i)ÉJ)‰ râø1XF«ñ³düÓ1£E°N÷ü©‰Wáôb>Lơ¾j »¨È‘3ßËQS§£‡`ei§+ñ›qœQ l¬óđ8a‹ jưq·ÖÑ̉E(\¹r¥¸̉\aî×””ß­¬Z´̉́¡ÛĐ*—ŸŸï1æ‘ÀD(áơÓâHø¤+œq…´€˜ ´²±¬ ]́´ØœI‹+÷cÜ%Ÿƒ•́Äk$xÑ•Nè´®™ÏˆnuZ69%¼ñ¹ÓBIW<ÿÈđy¤h¶)-ª´̣̉̀8G®·âJù,i¥åup¯ËĐÚµk«{£™ë+i¹®ù>óËë±Â&®¹æ±Œëä1y´ÈZ¡¼̃?Ùị̂'0̣Ùñr?̃­·´^ÓêI·?—YÏ™a \Îëç>V'#B-Û¾̣|m^ŸùÖ{ÉuÜ÷JK9­Áü#m=/₫đà=ó™qŒ| ¯Ö{ÁĐ0ŸïƒÏûâ Æô^ˆƠ^»é5¸–<=mw¡0:|øp¡.ô{Poq;ơs»<[Yatë–(ÉËÉ–̀ôTÉÄßôté©“'5Œ–f€³Ơ§•=Ïi£?(<Âè9À(,£ß₫P® 1ùÄ“ûV(‚„'‹(ÿ÷ëׯTQ÷{f¼&!‹û{*±SgTm¹¼~Oîc&ÿĐ̣FK¿àiY³“à̀8EZbi!¥eÔ‚f>—={ª{ ƠØưZheæz{<(·!H1Cnu&PYû̀øđZ j܆ñ›\O0æ:.£U”²gđ y¼‡ÇÜåZhưå:ZeYùÀ:ăgi%¥‘VPZí÷À{â~¼̃«}¡ÇsÏÜç6|†Ü±­îÏ„™̣\g¯£ÊqÅûµÅh­ä3 Ä̉̃¹sg‡EÓz/-påuXïÚ²|̣¼S[<Çûµđ‡ß̃‡´?Ev¥æ¥_F5Œ₫^0ÊϽ&¥­>Rñ«·¹ø¿«úÙư~Ï®\`47G2ᪧ̉ÓRåÔ) £%₫ªe¶¼½ÀưÅ$-Ù?(Œ;‹,z ÖÑÓ&Œ₫•;0Fi=+*+Ÿ€H˜¤å’Ö2n[Z °₫¢úư¾¨ÊóYÓUOK+!¶4Ơ4Œjư=`”?™<Êî?pËsüëcư1¿·₫́ï[Ya”…î·çåJvV¦ồéSÚ2ZÜÀ¹íÆ+¤`„kû‹uÏ[çñ£g0jt`ú+±te™3fŒrÓ3™é´ê?₫±ÂđZ=Ơ_uÿœF)%-ư .t Ø­̣Å}3Û^‚í¯ø}­ïùÏÿƯ[Ô{|Ñ0ú:0!f4¹;¶çK@”ÊBÚÙÓ§u6}Qœeœ"ºººç/¤ígQÇửŒ=₫ÍrÂÔÙï•ĂL`2Û₫?èŒÿdó¢êƒ2ëÉM”{,í_ñyé{₫ë₫1Đï½~ïơĐcàR²Àè0Àh ǗÜ!ypƠS9ÙỴÍÙ³F‹zC}›¹‚h¯*å3ø-Ëè‰o~”“„ѳ?ÈÙó¿Ê‘¿8Œ^ª–>oùŒkươsÔc@=₫üc ,0JË(at÷®ÊUŸF¿Ơ0êyà ªæ ¢Ọ́úFÁŸ’³ï¬äî?+yû¿‘GÎË®ƒ§åÊ]7}y=_}œ̣«úYêg©Ç€z è1` £?₫ø£Œ>LV, –•˃eY ¿, đo/•Yo&ăTø§K;]!´€Ú3çcz]!tٗײ^ĂÆ²óøÏ²&ù¬O=,ëSËÆ̀’´ư(ÜôUT‚ßl{i"ëÜ\ÆZ“b%YÎÇj/Y^×ú[‡áYªˆí0K:³̀+Êv¥)°_̉ñôụ́ÓúYêg©Ç€z ü5Æ@Y`täˆá2qÜ騦¥´oƠ\©ù×ơÅÏ{±T7*áhå‰%›́ Ê䥲&,¹@ £Ûư,«IX̣a¥ơiÇŒVzû€æ•2jÔ(ỦHo¾ùfµœë ­öc3ó˜µ4YBç̣¥@esÖ¬,éÙˆ™²̀¢¿óÎ;Kܾ¤ăéơ/Nư>ë÷Y=ô(¿1P6!ăG”6ÍK«&_KK¨aƯÏeÉÂyRCèñ&¹ƒ(»-]L»Ï’=at`44ñ¬…U” OŒæu¸éY£‘ÙăO{½F›%¦OŸ®€ÔƯBÊ”,ÀÎ̃à%]‡}=kM²è:‹±{ªaê~,B$‹¶³: œ³%'3L­ú”,ÖΑ<&;±6§u &(ñ̃he2‹¼³†%ëd²pºeơdNÖñ{øá‡û²(µ'å¶qNg-Lûợ¸<×±FiiŸ k_²| ï]¬ưXWÔIËy.³Ös[îĂ}yŒ̉OoW~_–úYêg©Ç€z ü6c l0:\Æ-íZ6“Ö̉ÖÍI£z_ˆ÷¢ùF=(;,=wßoóF0ú`ô ¬K1€ÔF­“°gAµœSBû¤»[O ¤́ÎbåöC>˜„ÆÖ­[«’J<;à°˜|IÙê„?v",³{á˜Hë%;ôŒ7Nuë!¤±S!—Eă „X–g¢—í/Ùư‰Ư¤heé&«´;±m¥½=‹Æ³+’Ư2ẾEdÑu…Û êüаSŸ×nûôéă1Â₫|˜ƠÏkîƠ«—;0Y­5Ùµˆï‹ư=â2¾f+O₫à¹x€€ùä“O4₫EË•é?†¿Íw¨~®ú¹ê1péÆ@¹ÂhS £@p·ˆ₫– Ê;ŒH7dnzO L^^^Âéî>‚&­óÓî¾đJĐ³w×ñôáåv„;Â×ÓƠOso5ê¾ïư÷߯úº³³[6r a”µú‘VOqöQ'́¾ùæ›ÊêÊvV·#.#´<+V¬è¼öE·ẉ£,èơ¿ÿª~æú™ë1 Ç€>ÊF ¤Ê2ºđ/3º°Qá¬yö ÿ=fq0ZéíU–¦¼^?¯•Ïư Ô\Çưx<·ƯBü{Œ/}ßçs¬Ÿ³~Îz è1đWeƒÑá2 LtÓ LQe½PO ú[dÍ5H=ĂèQeµ`”ÀFàs?“niO€ĂŒơF]T ÎgŸ}V7n¬²Æ wöó¹ÜGJ+*”×H %¼ÑEO˧µ/­«<&ăHƯïăĂ?TPzÏ=÷HÍ5ƠÔÚ†ÛÓÚÉe` Œé&§µ˜Êû´_­¤¼Za+Uªär>̃øÎSVZliQu¿F&\ñYóyä—ơ àơӢ˘]+‰Çà¶Ü‡ûºÿ`ø+~qé{Ö°ơĐc@?Ï(/¥‹̃pÓ×₫kYF ¢a\-¢)ư®Ûnü}‰+Œ̉UnzFßø ÷¦ÿ£|YÎ á„UZI›;räÈßŪ₫GyFú:ßïư¼ơóÖc@ßk ”Œ6Œ"›₫¯ä¦'pFt½ô ÊÁâ„Ñ DŒ¦Fó4Œ₫^¦²œ‡[&H1T€UXæÉƯ\–ăë}ơ=ôĐc@Ëu ”F:£̀¦·%0ưbFé‚§ỖY‰̣̉lñy!ƒFĂèûK†IYLªbh?”Œă½÷_oûÇ~ÿơû§ß?=ôø+rQ–v2ƯôëƠùó»éY¸-=í º¼ơ¥Ñ’-£U4Øèéz è1 Ç€z è1pY²Ă¨YgÔe¦?³eôíÇ®–k²ƒè̀ú—₫]aËè O;7ưÿ·÷`’G¢¿A¶e˶$“˜ÑÂơ®`Å̀¶h¥]iÅÚƠ23333333hµ’V̀`I¶ïÎ>x÷|ỗûß=Èü²'z²kj¦»§{z(æûâë®̀¬„¨ª_EFF₫½øŒFY€ƯƠ)îM+ ±3‘hø£\̃ YpDè©tÁçs9G˜—iô06i¦å’øá¢¨Ÿ₫ô§ơ]içÀ¿4Ü^”tø¡̉ôsœ¥•èŒY¦ơÖt,t#@\œÚ̉Êbñ;Ve{.K_ù÷ÓÓÖ\a”ƠômüjúÛÖdŸÑ§®ư–û_SRA´Ă]UCISaôïÜwJ‡Q`ƯƒÂ½Ưó¡h„""Rº²î½÷^÷ÁøØº£Rº<™g%<¡¤XIú\Ó°ºPYé¶G ÏĂ*~Â\.+w♆Aï³­Û„FWï³ÓÛ˜â‹Ú°aĂ}BX+¶XÍö\À-á¥Â(éÊ`a›)ç5ºƠ,qh-ˆƠ¸¤G;năd:`:P:M„v `´&îMt†ÖP 8­ˆA)O™Å0ú·nÇÛ£"q–QÀ‰€éˆÂ¨Z'‰“I<ϸócÍ+ÍQw7={¶O₫h@{D-–§Ÿ~º™Ä~ơqD=8_Z̉ơ 0J\Đ8åÜ”¶¾-³£a¼PêPÚB"é³mi¦0J¹#m đ5~×₫Ô4Ô1´öbñÔ¾Ñ:Çơ Hˆ,TaềËẰ™3}›3íkê—–zèï”×'Xb9~±a]ßµsçN¿Aº1¶ăUçccaca:`:/È Få™Êv %0Ơ4ß°ä®JơÏ«ZJ˜€Ñÿr[ß,F…‰'zkXe$«·ù7nœßåH·©DÑZ¶lé†`ó!<WËÇú†Uo₫üùI "¸<¡å¯uëÖ)°A÷(Œ,“'OöVS¶½̀f*PúÅ/~Qb`ơ”E™́óNêÉQê©°Y§N¿s¡•8Nà~¶úIJ¸E!‘ÿ±fz12%¾}ûv‡e8k騱cƯÈ‘#ư6¤ÄƠ4kÖ¬ỴÿAƒ¹!C†øÿ±(²AAô‰—W¶VœĂcÄde'*Ưæ½ĐắÀEÚ_¿~}wÑE%‹ơÍ7ßôBe½zơܺuë\Ó¦MưFK—.Mösx̃N:yËp´ô @J9™ö§¥«Z÷ ÓỌ́ê@®0ê§é›7M]M_S`”•ñË›Ṽ®JÙ ª‡ÑHÀèN±"j½ñ¶{¼ơ Đ:£V+¦O±̀!ÀÛ~"œb×£víÚyĐä;å9F`v¦ÛIĂ^ë_|ñ…‡S¯ø j•p„BÅÿhR±èai%î–”MhZV¨³¿=»0Q&íÀß‘sÑê©yươ×ûmD±(a,íÉ ?>ă]¨âê_(@Œ‹Dô80È.QôB?Ÿt́¥ưÊÿÓ¦MóưÄwà¡́ÎÄ®OÑrk8jeC@œÀú€ï=÷Ü“̀‹ïé—_~é¡“Ưªh·–ËX°Ư*;E«ú;đJZÜÈX²k”‚½¦Ă€¦âú‡ ĐÆ!´N—gÜ-=MLLªä£ĂÄ2:.´ŒJx'¿¾&ÀhU!É£{ü¦¿¸zơouO5jèvíÚUºGÙlQ‰ÅªOŸ>nÀ€®mÛ¶IÈœ„À•©Ṿ IXZ—/_ô"Ă­>Ù2“ưíµ-q0JĐw`+‹dXàƒƠ ̀¤ẩPÀ „_rÉ%^Ø^“©nv]¢jåwŒE?ø²~öÙg¼đÄ ˆe:%_Œb]ƒQ9„>à”Êê:tè́ü5±‡ç`ëQê)Œ’—ÊæƠsÎ9Çw̃yÎĂ4ôư…Q,ºêû‰Ơ”x©lÉæFÑ“̉Ƴ}ûönưúơ)[Ç–ẃ-_ơyÙXÙX™Ôn0 ó@ ÑOV­ĐMé.ÔX}/±ËèqÇ}×1½ äD}₫˜^ïÑ£‡_Tƒ?#OöbçœXÛ´i“„¦̣Ùˆc{ö́IZïøŸß9ß™:Ô` axĂ4L§“i^>]`T÷‹O×¥ˆ°ŒbdÏ÷©S§úUä”{đàÁ$`2Mda”ÅTvóæÍ½PgE§ê³©WŒ̉ß¡å˜ïXª)Ÿ,ºz. 5 £X9¹¸ú`}₫ùçK£|‡³iiyQ Ÿ®¾úêË(₫ºLñ“† ₫¤‰ú–£>ø ·ŒR®YFk÷ƒ)[´ô¦/¦Ơ[̣£me¾ơ+/û©újo%†è_FW½ĐMé.4`ôËp₫­¿s{̃M í„Uk₫!ÆÁ¨NÓ,Ljw̃y§ß!p¥>XIR¬€SËz øÄ¯k'ÓÈLA+,tXN@O-o °¤âouÉÆ/3ÚOXêđƒ=ó̀3ư;PàqÆ̣̃ơ«#ÓÉXˆ™Fǧ”ig\XäÅ”> HêöéÆ#î8e;v̀ûªF3&,èÂW¾«_(àɹ±̀lL‘ëV¡Œ#uç¥X¦äpÍ ÿ™2g _AQÏÍt?cO₫L÷»¨µ~áØĐ_À'ưLù¼XĐÖ(ŒÙLåGÛµh¶UơƠûRëẬؘ›˜ä ££Gº(Œ.]0Ï=öˆw‹KüíÙ½+këKe(çư——Œ!Úă₫ê¡$ £[đEöYF£qFƠº©12G@†©l7a½ẨÆ‚ ĐP²ÈF§µYÏôđçŸî§ơH|LïbÑcª›üøfªeô₫ûï÷¿+”˵wƯºu½;PˆƠ2Ü²Ñ 55jÔÈĂGÙáÔqăÆƯḈa?LÎ œyX#Ẉa±Ăÿ4›sGÓ‡@g\›a|CqgÀ_Pü(8ÆrO. ƒhƒZ4±"âÚÀ9Ÿ”¡/·̃z«ï_ú™…èô8Viáë‰n&măåz1ÄN>ÂHq. ”ÿ`úH ËÅễ­[·”ßđƯDsñ ΤzÜËlœlœLjŸäFÛµËh³bËhµ„Ño¨Ú¡›̉]œI}#£;Dv—£XHïºë®dÀsüûđdƠ4K@2 °!d4¼ t÷Ưw{ë&e`%Ơºb¥ăÖD~¿à‚ ü1¬p”ÅB¬“ÑP?¤ĂBú$¦kºă(:eÆ…}¢Í*íĐ̣°’>IwLÓ&đ̣az ’ßaÆ+nxœ1 /Iƒ‚1î€ } d³]#%đ"ö3ÖíhéÆ6S‹$ơ#=OÊÖ•öÔđTưà……ÿĂX¶ä¡íQ+,¿_xá…yéßLÆÀ̉Ô¾¹¹é@ƠÖÜat”k×â£ÈËÏ>å–.¬f–Ñ¿+º‰–ª“̣†0º= ŒV§vUt]@  èÄËd¦SÖå©/„?bZ=÷̣”Ụ°¸ „«ö«Sư­®Ơë~hăeăe:P½t /0Ú²FÅo]¶h~ơ˜¦'tÓüK†nÂo´º)²Âèf±Œ&aôƯ¿woÉjúBmZƯúŒúâ–À617±ÚEWWT›XE₫*¿ª•‹ëmU«—Ơ§úƯël̀l̀Ljä£Ă$´Ó±Œ ŒkyùÙ§Å2 Œ>Rµ}FÑííRAôƯ>²Rø§Ơs=Œ₫ư¹Í¯ Œ“À÷"»ÑÏ F˺qá—‰%Íe¥¼Ư«çucăfăf:`:`:Pù:;ŒmV½`”¢G{¤‚(`ÊïƠU)0úŸnËëă¶Ë"&d×Û1 ƯU]ÇØê]}¯O;;ÓÓÓ̉u wåÚ·nîÚßhµ°ŒœX@Ă}晪ÇRZ¥ñs/º/ỵ̈ÿ¹-Gÿ$ ₫MŒ₫¹ÖMÓ³œmD£‹€âÆ—PD,b!N¸ÿ{uÖ…LêÎÂ"ÚÍ‚.ªI>̉°À‹X£¥¥§ïÊ>ᄪơu•iŸXºê}ÿ´ñ³ñ3¨\ÈF‡MÓ‡0Úä¹§½Ïè£Uq`öß + ¢5A “0úÚƯö7HEv½%–ÑOÿ́n’ ÷ßùηƯ+¯¼»h` (¼†å ûƒƯvZµjU0_Ê|Œ1D‰‡Ÿbº̣؈PJ́AŸK Ñtç©jljăJH.Â/±Ưi6ơcG¨hx&̣ß”­a ‡E¨)Ê6?ÑʽÁg3®–ÖÆÊtÀt ²t W/>£í[[FÑå‹T=ŸÑ8ß°æ(^ăg‹,£)0úg£7ßv¯ö'ߺuk2*Ư~đ¿Ë+¼¹Pñ£$=«̀Ól•đ>„!̉@èẹ́b™$-u%,[vR·(SfÜB#ÂLz«»±BPC”©Ûxb5åÅ €³º8¨äÖQC)ÅYY)‡ºhÜƠtíÓăœ“|¡%–ö„Áưù¶‘´ä‰{aˆ;/áKÚ dG÷ˆÇ (̉nâ|†eĐVΣ}ĂÇ– ớ´Eè†lZ¨̉7äCÑÚê¡©ø1'=ùêϹÚNÀ~>5lU¦}méjÎ=ÎÆ̉Æ̉t æê@>a”©ú&Ï5®z0¢„sªIƯøÙ—Üù_nók߈UëèÅ2úwFo¹ó¾d[Ù/‘4>dØ/½ô’ß< .¤!́AÓ3]ḿ°‡½®TöÙgÓö7çeW&©ïرĂœŸ­;5Æ'ÓĂÔ½æ RÏ^̣ZV¦BXäúơëç·ïd 廂&逯Ơ$NçÑ£GKÀè<àw¢ lͶ~ä\#¨¦ử¶m[DŸ|£GNNcSÆ€’íá;¿Ñ>À™Ư˜h7̉©S§´PPnÛ¶ÍoïJ |â§>ùä“%Æ€ ¢Û­6lØĐ°găvß"ô•ö3Aï©¿‡Aïy`Æ€ÍØ)]•´ß+ÆŒ¼Œ¡)u"Oß¾}}"Œ Jyè»M‘‡₫âÅ(ú‚R“®ckKͺ/ÛxÚxd¦9ĂèØÑ®C›~E=ñF«ŒÖEÙ±Œ~ñ—ÿ)0ú•€(@úÀèߌ₫] Œ’KزeËüŸÑ …­;Ùí'.́Óơsæ̀ñ»ë”u @$V·Ûo¿ƯuíÚƠƒMº“XÚȃemFXÂ\1E `NŸ>Ư$ơÄ’T-^¼ØZg7( ¿EÁ7 EüÆ~hŸ`̣º ¨¶‹ÀóL7³cP ĐQ>–Fú;“c¸8ÎÑ ¢}D»ØÉ‰úă¯ÉNW:ƯMœ́W¾3”+;$±; ”½øâ‹e0Ê®F@ăwÜáw¿0ĂƯŸpÏ₫£0UƯ™JÀXØ© / X× ‰½'p=àÎVŒå̉ï´“>g¬3ÚÎRcÊ–¢@-»{5ỉÄcˆ”ÿi/Œ=ư…Å;΂m7ǜnøÖOÖO¦¦UQr…Ñ cF»­FDÛIh§¦Ï‹etq™¦'LSÔG´¦YDU©đưâ/ÿĂm>ú{Y¼ôµÀè×£ưÛ0JÀ kTT)±ÂĹ×=†µ (`º¿,er€§z*™ß̉…NF°„±m(uÁ¿à0uç!¦z±¢„ü†åO§°&Àˆß@S§“Ùi‰­,CËhŒb$Ç(0&)m ^X7Æ;ï¼ÓC6çÔ=áKëà6°O<€HÙ VlÊ–¬—ïjíÓ§?7J>$Ưâ,„XpµL¦×:ư?Fù +8>´€ ‚7, 9mÛ ¤«5¶uëÖ¾Ÿú¨e¬tzq¡S¬Ï|Ç í7 HôÑGưö´Äfåå¤6ùöV҆ƠÉ`ÆtÀt ß:3Œe´£¬¦÷–Ñæ¯¸Wª Œ²:>ºj¾¦‚¨·ŒzưÑ/F±~%0úGÑ¿IQ aâĉ~*Uư&U©đ}œ5k–~¢¾y€…8…h9¬jzki:Ë¡Â(€‚包5ø±b=SÅÊF™¬*CUßT|%Q¬–Xô9…>@0 a”…NÔ7¬. Xë€ö‚Âc@_V¬‚À$VṚ̉§éÚœ¯äĂO -K{°T6,Ù_L¯+Œ̉÷̃{¯Ï‡¥đ¦~eƯ FCPú2„Q̣¬ô¯–…+åó¡mŒú•²9@izÀ¸Ñ¶°n”ÏXéÖ Œ¡Â(–Z¬̀qmá…`é̉¥®Q£F̃>`y5µa¾„Vé”é@åê@>`´“LÓ·—X£íÅ:úÊóÏT ŸÑơ-SWÍ÷¸¿r;º¢½ñ³/ĂèbÙơÖ0zǽ₫alMLóFa“…$LÁ‡~‹Zg₫@¾™´đdJ+'0¸đ=œ¦™Ú C£€–4,rXÄ6mÚä?2~„Øß}Ê”)~ʰQ_S¬‹”É'+¹™gËM¬´¸ °`‡…XL¿«…K)‹·Hk}˜¦gZ{Ú´i₫w¦²ÉC¿ñ?å»ü†O#冖_|"¹¸Â₫²ÉKuÆE‚₫fÛ2Ú‡W_}u26gEơ/«¤ñq$@:é‰J˜ pơ4+¸ÿöoÿ6T+ª^Vní¼¦lÜmÜMLL £9Áè°¡n̉¸±®K»6~KP¤ù‹ÏF뜕ºz¾6NÏë…̣´‡Ñ=& ú—o~à̃ú8FY£û¡k^| D¬ÑÉ“'§€*á‘°¤@hƠ<ø"²W:;3øœàö |^sÍ5)á‚°¸&ˆ|Äœ Ă.é1ê@TbcR.1H‰­îD˜"êXZ(*»qæÆaưlưl:`:`:`:/ÈŒÊ"&`´ÅKÏ»•b}´¡ÂEKlưY[Â8Å ₫ÓÏ>'0únÓá7Ư¶×̃ö²ó÷Ư±?ËèY‹ÇëwÉ Ë'.$–J¬¦ưúơ+àœÛ¬':ÇM¦ư –g'% ˜–lƒI°yÎĂv”Ín;Ñv1ÿé§Ÿú-7ó¥đVƯ¹Ö?e1Qƒ ÜêƠ«ƯºuëüôºÆeú¼Q£FnóæÍ~G`hdº}Ï=~Z^ë†4h÷ }öÙgư¢¤?₫ñ®mÛ¶̃̉Ù§O¿0©cÇ~ÿơ½{÷ºK.¹Ä/bú₫Đ¡C₫œÔ‰W^xa­ß\ơẶÛ=ÂtÀtÀtÀt ªê@̃`TüE;µjá0ZÁ ˜đƠ)úOr%§éÿ–LEÓôGd₫ơ÷d5}úL¬PgJ¦Ư·nƯêvï̃íN;í4€ç{®÷ FIçúp.[¶̀=ó̀3IP7nœëƠ«—ÿÿûßÿ¾Hß{ï=?=?kÖ,?¥Ï& –}ØIwê©§úr)̃°aƒ_E}ûöy8Å´ª^@V/»₫LLLLLrÓ¼À¨øŒvŸQ¦éñF+tiy…ÑåMs뀢@̃2ú7ÿà6|Ưm;"áDv¾₫NF0•ëh(ºdô+åơß±’j₫à?đö©‚+ªÇ\¦áwµ¶FëAẒÖ”q²vØơj:`:`:`:`:ª¹Âèdï3€Q¤ƠË/øL £û;Ăhm-*sFÿ¾Œûø³ŒC;ÙÅa7HÓÓÓÓÓÓBë@Î0*>£ƯeSÙ…©‹,b*Œ²Ó’ZFo¿Ø”&9M¯0Jà{,££¦…¾©ØùLçLLLL²ÑüÁhë$Œ®^Z ˜.=5uñ{ÓgÓà6i=pÔm•À÷ÈΣo»c‰eôö̀‚̃×Ô¾±vÙ5b:`:`:`:`:Puu 0Jh§®mC]RqÓôO]k‹—â.(£ú‹Ûh0j/'ÊtÀtÀtÀtÀt é@î0:N|FÛÉ4½À¨Hë&/ºƠK+FÇ7,†Ñù/V]Ê/ô0úÙŸ₫́6î?궈UÙ.[‚ûĐ,£… ;Ÿ]—¦¦¦¦¦™ë@Î0:~œë̃¡F[5y©baUѿ˼¡5]){ư‹[¿ÿ5·YÂ;mÙ.»0ûđSwă-·¹ïJ|Ï‘#GúøÑ¾ –(Áîzè¡Ç~ñ‹_¸iÓ¦¹Ûn»Í̃2«Ñ[fM×wkŸƯûLLLjŒÖÀ(†Ñ#£¯§À¨úŒ^}ơƠnË–-){Æs1ª©~ưú>̃çư÷ߟ©¿óÎ;ƯÎ;ƯM7Ưd@ZCôÅnâ5ç&ncici:`:PƯu ß0Úúe±Œ.“zynIüíÙ½+oc–Ñø‹.±€é/n–ÑC¯{Ù₫Ú1o 0₫ùH6lXbL®ºê*·}ûv÷àƒ–8vă7zX½ưöÛó6–Ơưâ±úÛÀtÀtÀtÀtÀt wÈŒ¶—LÄŸQƒÑÜ¥<í-£óg·á€XFơ£”}̃yç¹+Vø­:£çúơ¯íÖ¬Yă·ưŒ»ækÜúơëƯ½÷̃k@jRÓÓÓÓÓÓ¼è@®0:ÅûŒŒæe0Ê¡§±€ågú;·~ß«E0úÀè›bưD,£w¤ÔïœsÎñ0úüóÏ—¨÷¥—^êaôñÇ/q¬^½zFï»ï¾Joo.}ey+ç…ÉúƯúƯtÀtÀtÀt Ṇ£=`ëh›&/Ë&›¦/8¬5~F`ôÀèa·E¬¢È¶#oŒ~œ£́5Ï4ưSO=U¢W\q…Ÿ¦ÿío[âØơ×_ï§éï¸#líÆb7ÓÓÓÓÓÓ\t W,–ÑFÛ Œ®}Ô|F «˜XF?ưĂߺu{‹atû‘7Ư›Œâºyóæ₫¢,`ºîºëbưEYÀ„Ÿ( ˜n¾ùæ‚Cv.Êmy «ƒÖßÖߦ¦¦¦åѼÀhÇö®{»¶®›XFѵ²€É`´À~$ ËèßzËèæƒ²ˆIÅ2ză-·úĐN£FrO?ưtlh§‰'ÆZD í4}út[¸Tàñ,ÏÅlý!`:`:`:`:Pu ÚÁ(±E5Ψ½/¾èF×í=ä6¿ÑƒGb§é«£’Zíæj:`:`:`:`:Psu _0Ú­P–Ño(†ÑưkîÀd{Ñ=-ÓôŸüáoܺ=Ư¦ư¯z Ư&ñF}ê3m¹–̃t̀tÀtÀtÀtÀtÀt "u W2A|FẽèH»¦M*v₫ö‹‹aô›a¦ª̃gô›?¹ơ»º-̃ Ùn0j>®æ^`:`:`:`:`:PÅu ÚÁè¹?/†Q¦ë+’Ô«SÙ̃2*0ºn÷$Œb}ó}³ŒV§q´ºÚ5m:`:`:`:PÛt wïzvêີÇ2ÚF,£/»uË—UÜL úŒ̣ œÖ¶A‹k¯‡Ñ¯ÿäÖî:à6Ë4=²MÂ;Œ~Øơa:`:`:`:`:P•u 0ÚK`´{ûvEÓô€Q¦çH™¶¯Ê\¨º±ÓÇ_ưÑ­Ù±ßm”ơ›$øư6Ù½ù¶Û}|̣ɱ}Eø¦“N:)öØw¿û]wâ‰'Zxă‰'p-Z´HÛïÄ?~¼”p×]w¥M_(}´óØ}ÉtÀtÀtÀt S¨–0ÊÂ%…Q4eÚØœNatơ½n#+êH·zËèGÉĐN@K§NbC;͘1Ă½̣Ê+%ÚiÁ‚±ẠkrVvÛ€KvÂJW /¼ĐÍŸ?ß}̣É'±c›.¿·û‡é€é€é€é@eë@>`”iúbEXÀTáÓôăĂèôgL‰P"0}üƠÜ*Ñơâ7 n•X£À¨nzúé§»åË—»:”€,lëÖ­sM4‰Ư"”]›|̣É´pD]¾ÿưï»6mÚ8”‹¸¦}ûöuƒ rwß}w2ÿ£>êëÑ£G̣̉ú³Ÿừué̉ű])å|ï{ßsmÛ¶uuëÖMæ{ñÅƯÀ]ûöíƯL. ßưîw>Oÿ₫ưù3ÉCÿøÇđ¨gÜ®Tqå<ôĐC¾Ÿî¼óN÷¬ŒÉ-·ÜâÎ?ÿüä9Ï;ï<×§O7`À€”vQÖe—]æ† æ(£W¯^2ù1 w¾jĐ ĂrơêƠ®sçÎ%Ú†µ”úwëÖÍÑ¿a¶|Ơ1øéOq¿¼ụ̈˾?6L LÚÅùƠ±D¯8ÎX1fäËf 2+Kg÷AÓÓÓ꫹ÂèÔ â3ÚQa´­kÿJS·^|F+,è=Êöh[Q½è€ÑF%¼Ó‘-%°v́ر|œvÚiníÚµ®iÓ¦%]pÁ~÷¦¸mD£u9á„ÜÁƒƯÜÑ£GƯÊ•+ƯÖ­[Ư /¼à;î8רQ#·lÙ2ÿ;Ö¿Ù³g»3Ï<ÓqÆî‹/¾p7̃x£?ÿ~ô#÷öÛo»gyÆn«V­|ƯW­Zå6lØàFí~ùË_¦…(̣mÚ´É­_¿̃ 2$mzÎưóŸÿÜa-~çw ÷ÙgŸyË1ơ(ë†7|øpwøđa_GÚÏ'–ẹfÛ¶msû÷ï÷ŸGq×^{­?ÆV¬ûöís{÷îuK–,ñưÆFÛ½{·‡S=ïܹs“ ª¿1n¡Ơ÷  –úÓǯ¿₫º[´h‘Ẳ @̣’ c@̃™3gº³Î:«̀¶1Ñ1À‚‹N1fŸ₫¹;û́³“me,ÙFö'?ù‰ëƯ»·?ưñ́ÛĂ£ú>@+ùt R˜*«ÏËc–ÂlÇ:6óùçŸ÷VPÊ™2eJe–én=ÇâÅ‹S¦Ù™̣V‹*]@ÊÁ"LYaƯâ`tûöír‘yóæ¹?₫ØuíÚƠç»ï¾û’c€eßÓY}9•ZÇ€ú½ổK~lê×¯ï­¯ê €8EW~đƒx˜Fw;êƒ.‘/Û₫µôv¯300¨y:/íéa´]á`4ô]ß²æ L¶ÛÓ²₫Ă/¿v+¶îJÀ¨‹˜¢0 4ܹ́36D¦^½z% ÿBüFñkLW7,£LQ?̣È#%̉bídë åà[Ét.SøXlßÿ}?̀±n¸ÁOÓS–D`T}ù₫Í7ßÄu´~åñeJëáå—_îë‚+SÛ´­¬ö£ăÆómFi—Â(M¾ă|ă DR`‡;íÄrÈ n₫€IÀë1ăđ†ơ`*Nư©q,²XCÀvrqœø°̉Æb̉ăË‹Å3Î=#<ơ¦ß)›ßñ‰Åâ‰Nññé§Ÿº‡~Øç•₫Ăâûç>q LékߦÓ';n÷7ÓÓÓ­ù‚Ñ^Ú9€´`–Ñû//¶Œ₫uü·Üñٕ߫îBÄgôƒ/¿ƯéÖîÜ+@ºÏ‡xzưƯ÷}h§oYĂQ¦MẶ€¦PẃØá…Ç€& ˆºè¢‹̉‚(y*ơơŒÖ[­dê§8uêToåĂ* ¬qXđ9êÇÄ2­ ¤aME˜ê¯¨©^ ßÍ×^{Í×`fáơ×6¨“&MJYHˆ‘øob ÄÂ)öë_ÿÚ»“´+đí·ßîËĂZ͹h3>¡¬ç“c·Ưv›O ¬.\¸Đ×e„ ₫˜®¦gJœ²GŒáA—¾Ä¿ë$}Lzu™8₫øă½VÇwÚ¡₫”Ë$`YƯø ßPÆ€vÑÿ³fỊ́ ®H˘â¸6đ;/5€00Êq,¢ä¬YPe>£µû•îfÇM?Ljä £ăǹ>â3Ú³C{/ ŸÑ廀 >ÿ׋7ªk1Œn—X£{=²¢₫u™¦¿ñ–[=0±ˆ°‰^àXºXå7ư5 Ȥ2½1l¬gñJiy˜¾ÆïqäÈ‘%€øXÔ„‹¦Ḅ±2>ĂLë–M:¦œYmÎù°Fó2Ơ=xđàmذ¡‡w¬̀XWqw¼tå?Ö@¬XI±R†ẻÿÓ§O÷çÂܼyóäq̉rX¨é,®äƠ8£ôp4t]P`æœøo†çĂŸUÇ€iơđÖYÀ:Δ)ẉáf¡~¿ ,ơà…‡ZXM9ÆXQG̣ÅEsÈf\,míy@ÙXÛX›ÔÈ;Œ6]QEAĂx£Ă«VÚ…™„Ñ-ÛD÷xeEưQ±Œ̃Rd}«u® ËÙ«¯¾ê¬:Ô½¶×1ôÅb‹u<qmï3kí¾oÛøÛø›$t W&¡XÀÔSf#›¿âÖ¯,Œ²pIƒßÿetíªW]^£kv́Ưï¾ó^µ‚QÜ€Â1½Í¦•í‚­ú7m,Œ«øüD£–SǪ?6F6F¦¦…Ö\a”8£}Q¦éÑf„ÑS:UÿÔµµW<Œ~ñ{·ló6™¦ßíeưî}îèÛƠ FñKe ÿF‚»ú‚°ó•ÿÂ ÊØá¦©Áú¶ü}k}g}g:`:P“u WÅ2 Œk´—F je`–7-¶2m_“«¬¶5~F`ôsÑM[Ưêm;Ưí»dE=0ú®»¥hoúÚÚ7ÖîÚ{]ØØÛØ›˜˜T}È Œv­½ưâÔøuΪú^0ú₫ç_º¥·$atƒXF_«e0ÊFľÔm*+¢¯Ë*¿IB$±¼Đç¶óƠÎk߯ƯÆƯtÀt ºë@¾`´·À(â§é µ€I;ÿÓÅ@JüÑê>(å©F¿Ư,0ºĂéú]{Ü‘·̃q7Ưz›‡3VSÇíç__t¥µÖUĐ¥KWO‚º³=]º|'.)¡«đ;­,¥ñ•$LV\¼Ö|µƠʩ׹»»é€é@MÔ\atºLÓ÷˨Âhg‰F³aå íäă'₫ö́̃U¡@.dª­1G=Œ~ö¹[ºa³[%‹˜VoƯîÖ‰ßèko½ín¼ù¡cÆŒñ»÷D”ĐNÄ$ôNTÉ oD¼IâRf{ú‡`́Ùæ+ozâ[À½¼ù󙨍ºg>˵²́Ad:`:`:`:PÓt g8A`´“ë#VQƯ(ñ¼ £́UÆmqkíST`ô½O?wK6lr+·ló²vÇ.£ê3Jàxâw²_yHÙÙˆ ëdTɉAÉ^öá₫èé.„+¯¼̉Ä1%áØ»]­†X0‰ƠI\Nv˜Ù•‰4ˆn/I^̉²u(ÁÓ‰eîÏ‚'Ư±(¬{¦xŸX©ÏùçŸïëCU‚îSf=’mà||Uµ°Ö©SÇׇÀïäc¡ưE`|â‰Æơç±°TµïZLwmØqÓ ÓÓÓTÈFGÈf,ÓFûw•LÀh—"}¬–Qu₫‹µ;̀“Âèâơ‹atûN™¦/†Qú ŸF€˜‹îE ²O9Áñ£° ^™,¿ổKưNCL›q]ºtIÂ߇~è|đAÿ?ç! @¿óÎ;>¶(ơ#´|ê©§ú˜€VsŒ4Ôơ”SNñå`Ơ]µjUl`úÏ>û̀ï„•'˜;» 0 ó̃§LàQû…€ó‡Jöî©7ÁàÙ€´́>Dzêˆå8ÆhÓ¦MɽàíÆcÓÓÓÓÓxÈŒöí[£› mepÏưyªu´ÇưµKé?óŒ{ÿÓÏÜ’uÜM²Ưäæ­nø9ö–XFSw]ÂÚ‡%°oß¾%à QöBƒN@ŒmAñÍä‚bç!ΦÅÊʶ—÷̃{oF·nƯÜ›í+µ|v+b¯zv#b/{¶ Ơ--ÙI-3j±j.—­¿¢ơÂÊúÑG¹E‹•Øé‰ĐQ́­N™´›m+ÙǨdmU(¿ë®»|½ÙƯ¨uëÖÀÅ% j±¤†;Qơë×û=á3é+KS»®WooÓÓÓbÈ F‡ u3dWĂ];Kx'Q̉®-Z¸JQ•ÅKŸi{âÖ–Á.†Ñơnå¦Í£[F·ÇÂ( |·¸­‰ ¸ÅmÿÙB—©éóÎ;/£~eKP¬©Q}ươ×ưv‘ú;D¶¦Ä2Ế\pẠØ®]»ÜĂ?́N?ưtƒX7™úÇêÊí@ 唣@/€K₫¨.ålK¥¸gÏ~Ñq2uE<çĐ<,:zô¨ŸÖ'°Î› đ[–Rp"ƒÑÚsíƠ–{ŒµÓtÚtÀt ¢t W9i¢ص‹5 vmѼ̣`ßQvbR ₫LíQœŒ~*–ÑŒ®`UưÖmîƠ7¥XFñaÄyñÅ—€3€kSØQ…kÛ¶­[±bErZ<…d%=Đ ¼©ï%0Ç;S唯è{ï½ç­“,¤øt¿waư$€úi§æ§è™ögµ:û³?÷Üsî̀3ÏôåàëºRḶÑz£́‘®¾áqÂ/aåÔßđ‰Åú˜=汨̃qÇ̃:J}q'ÀçֽᱨâçJ½©X>­î ™ô—¥©=׫µµé€é€é@₫,£3'Otƒ»wơ~£¬ªïÖR,£«Vº‚ûŒê †+ë̉Úw´F× ŒnƯ$«ê· Œ¾én–Å;À °¢L5e6lHÂö'¾,Â3\L”ÉE„•€Ü·o_rqÖCü/ù}Ï=nơêỠŸ¸æ¾7z( Yø„/+SàÀ'VU aê\ëÁÔ>‹“¢ơR ưƠ¯~Uâ`ŒÏ'–V¬›k×®uO>ù¤‡O ÈH±Æb%%  ³X «-Sù@:îQ?Û… º§Ÿ~:#+r&ưiíáe:`:`:`:Pu ËèHY¿1íÑƠ íߥ£ëÚª’a”Az·O±ut{»Ú¡¸I]›€Qd 0úÆ›ÚéfJÍ5s,,*2àƠ²eKwÎ9ç”8ṿÉ'{PƠ…BÙ^Xb™̉ÆæeëH¬­¬j›4iâa”©ø[n¹Å[ç(à—”Çôz¸‹tsæ̀qơë×O9S₫€*@Wẉqœ2zè¡ijÜđQ}SÀ^û—úŒ|¡ËăöÛow3gÎ4•ë1[±ôÖg¦¦¦µKr†Ñ)Ư]Ư î]£€jyêÈ‚"ü>uqTyÊó°Ø K(‚UtÖa,Đ3ơ œT®u°ü5ÿÚµ1¶160¨í:;ŒNrC{vó0:°[g×£MK·yơ*÷Ø£ z7ˆë[¦.fºôÔ­́)0ºa£[!²J1½úúîÙ©*):‹}>ÿüsï¾û®ß>“úa™ejÅBå­/ÉV­Zåe&ká³Ê~¦éă¬ÊÑzↀÅ÷Æo,wÊÛvËW³¯q__ÓÓªù€Ña½ºÉT}¤=Û¶r›×Te%}¸˜‰-Cÿ^ÍUäÆÅ2úñ'nɵDSa´jYè°82µ t^wƯuIhĂ?•iv,‘Uá‚#´ÔM7ƯäƯâ\ªB­5÷¶±µ±50¨-:Ë(0ônßÚm]»º̣-£ àí§N׿¦¬ÂèâƠk0º~ƒ[%«ê–Ѫ£5u ¬]5÷ú²±µ±500¨8ÈFçL™ä† ŒE€Ñm£Wö4½*Í€ßƠÿQB#½/SÜKV­ö Z £¯W(Œ ₫øăÏ;ä2 K©®¤Ïå&ÀB'Ê¡< 1•Ky¹æ¥>´/×rÈO›¢Áö3-—q=zt‰X”G!ÑØ©”M¾ènSzN,È“'OvguV^Ú—i[*"]¦ăÄ"8ƠỞú¥´ú¡¹ŒaE´Ûʬ¸®ơ­ơ­é@¼äF‡0Ú·}·}]‚Q~çTÿÑî©F׸•i`”‡'¡ˆ¢q1Ës‘°SÑ‚ ̣ (%1:8à̃~ûm¿Syê¦yzơêåW³³ ¦r)+y °°åZĐH×h¤‚L˶¦M›æc©†yxâ n‹…eq¾¯„ĐÂ/7î<À([¥Ö·6R˜0aBÚq"^-qf KÆB·LûŸt,âC×u'1ÍK”‰hdˆlʵ´=¦¦ƠI*F׈eôQîɉ¿=»weuƒÎwFưGÿ:¾æÅÍFÙ‹8™„m¢¯ĂđIÑPJ:ügU$´±KĂÀöÑ2ơX4iç"$qDY•Nh(¶Û̀T'âʼ₫úëưÖ§V’´n¥Ơ%Ú–°ä-+_iufOûè6©™¶/LŒĂU(Z—hGǨ´s²!°ÉfD(ˆ¶™°~´¼̉¬Îáïåé¯lû&ëwYc§Ö`6_ĐÄâÚªç!†-×›9´oß¾ÔbqởpfèyØÎ+®¸Â_Wl¾mû-½Aˆé€é@uÓ|À豌•X£H¿mÜuU F”¨ÿ(Û…ªº Xiơơ0úÑÇnéÊUn•́„¬‘đN¯Jxơå!;bÄ7uêÔ”iâ!C†øí4ÙỤ́đáĂ>}xâ} ĐF́Ư®ÇØ2kLÀ³(ç`ªr̃¼y~wv."å甼ïß¿¿Û¿¿·Ṿàåw¦®Y4`‘ÂÉtï 'œvœXô4{ölgÄ% }؆Ë.»̀¯̃Â(;7Qêµ’)SÍwƠUWy à8ÓÙa\S¬V„oâư– dQ·̣ÆmÂèæÍ›]×®]}Ư#¢ †)vú‘®4ÛS•ÿÙ0€qcƒ¨e”ă´•˜¯QƠ °2ö;wN–ÀR&ÖÚpËX«±y÷îƯëëɘ–÷Úä‰ñêÖ­›×#vÖb£-F'é/ƯIK¡û@%úI¼´qŒk†Ø¶—›̃½{§è›#p®°̃\€;zI_׫W/å8zĂ.bXH£í½đ }Û8¡æÜ§Ë«Ó–Ït ¦ë@¾`t˜ø‹"UFHâêV¡|Ö$ - Fo”áÇ÷]¿›@ơWdªöË/¿ôPE?ü09ơËĂđK:urlïÉÎIX,éÏSO=ƠïUσÁBÇĂŸBv4úT¶'e‡¢æÍ›ûàđ¬L’€_¦Í\̣0)&€^ùN½Ø©¬ h]ºt©CÎÅ'`ú-²jŸsFaw‚×iX,%ú§nƯº>?åÑX“ยüW^yÅxè›V qăÀ2ÊîOŒ0áÖÀÔ:ÇØ­)w­ ÓÁ¼tđÿ%—\â·*ÅúÙ AƒưKX¦£0zíµ×z°âe+ ư§åu€>¤L^Tôwâ¾~ơƠW₫Ń₫r±~U¡"ú‰:đns¼¤íœ‹°b„êb̃"ϦÓ§O÷ºMfÚn¬Ôôc”‰Å7Ór-Áé€é@Ủ|Ăh±Œî\¿Æ5¨JÓôa‡?Z'¡ ¥|¯ AñF—ˆet%ûÓ«eôèë®n½k¼µë_ÜNDXyPj?M™2ÅCÿó€å¡‹%ÂÂm7‰J°9€ôÊ+¯L9äL<´Ùňăo¼ñ†‡Y@ˆa °â;ÇƠ ´ 8$>)IÓO?Ư?đĂưèă`kT›6mCè ÛÈ /aLV`”ß`̉b½e¼¢º‘¯¾ÂúÏ6¯€/º‹e‘—"ÊGw±àë¹FåûŒÿq áeM¡jÛµk—<ÆKKÔŸ4 £Xëy!à]Ä:äÈ‘äxeÚ^ô€/ïf™Ç̉œ˜˜T–ä£ƯÙI-£UFéh¦çC L[ÜZ½•°4="C,£L?óàå!RfVQUB¦ơÍb :e”©wM ̀ÅÁ(gÑÄÆT-Ö5¬Ÿ|²ÿ;VF-Àº•éE%ˆ á3EÇ2ʾ̣z ?=¬À–_¬eX®Î>ûlŸ†…SX±RW̉è4>¾|üÏq̣>Ù®¤Î´}¥¥F±J‡ư láëHênq l…0J}Ö¸b€–Qöë°jƠªP«Ç±älĂª¿1EN]t*c¤Îr탸üè8M6À‚‰»R̉¢[Ó_ ›ñÔcX5yQă^®x1Ñc€èĉSê°rNMƒ?(/d\ ªëX^C¨M×~àzñâS̃¨ éÎaÇ«÷½ßÆÏƯ&è@¾`t¸LÑ#ƠF8|HYÈNÛ³=‹ªăÀ&`ô#·D€c¥<‘5bñFƠg”iC,?L7‡@ p2u®íÆ_?₫çËt%°Å'§.7ác…׬ûú„àL)A_è•₫ ÿY1Oâ#ÉxcuçEOw(Ë$¥©÷o7·Ú®¹ÁèP7Gö¦OXF;{éß¡µLÓ¯–iúJ̃4“%ÄSHùŸØ¤'ư¨z]™À(}t1ÅdêNGXºxkŸ1ÍÉC”ÿ±$2} ´:tÈûÀ…¾k,~á0¤P> ƒ¥̣™g)ñĐ%/ÓéXô(Ë(uÇ ÿÏpº4ƯXÖø±â Èy±>qnơá@ØÖ«.`­VX¦=àXH¤9€Ç @Ÿøˆr.á̉€Ïk¡}úÔ2JƯè{\°~kÜWƒ±Đ@U;ÑŸ€p Tñ©ÓÑĂw’~¢/˜NW¿IüSoÑ·ú;VŰŸu*Ÿ±aLtQ°G]ó1MߢE ï~¾\&mei°́3>ŒÓï´}áÔZ\3#đÙgŸ9® àÚâ¢B¿`©DwƠ2Ê }…P&/Œ çC/pÀ2®a¥M§Ïçe¸Ơg™ä±4Ơëmăeăe:P¬µFQ “™B )ß«”f £jcjV­aøS†`Ä„1±¬aÁDâü7K€ă¶Ûnó`ÀH-+đ9Ó¹äÁ~ÄGØÙ^¨´ƒ2±z…yiđ…E‹6`ỬăXçø ¿F¬§¤ WzS?V_G­x@7?…åe[gM¯A₫qPÑ…fÑc€2 M_Óç,$ăB¦ÑÅiXL±@kơåÄMzÚ{ÿư÷§lËo°ĂNÙa»8/«ñéëPođñ ûYÏŹI¯/è}ͧØÛ­›”uLësÑEù6„/DA9Æ +ûo•]È4 @J=©?Vđ°mXY±^’—¾ u ¿i 5FÛÔG™k‚~¢è ¹Âú`¡ç\Ët‘0]Ơ·“¾-oß±øéÜsÏơ«Ù£đË98ÆÍ´_ •ÅXÔ‰†È ë@ÛùDÆŒEdÑÅh™Ô9©…₫µÄ*%dZ®:œI=,M₫îíÖ—Ö—µAr‡Ñ‰E0*ÓôƯjÈ4}&5¨Äj h–f)Íô÷Đ* °ª­*eY*˂ћĿ«~ˆáv˜Ô?]ưđ“̃ö¾2Êg̉_U5 Âîà—YVY N«èêëlÛÅJkvå)ä"b‹²1@´®„lÊ&„–æG;î²Ä16N °>ß ƒ¤{·kœÑ²6%(­‰K¸(B醖ª„—"|SUµúí€ụ́ Ÿ×̉ÚIưẃØáĂj”lÆ@T‹lơ‹mL =E>B~LË ză fºª?Ûó[z'ÓỌ́è@®0:[}FDkŒÆu6VDVƯ,¨Ñ]̉_6Ç)[–ÏOFâ₫~[K÷ÁÂ'ÜÇ‹z9¼²Ÿûp×צÁ•îK¾íº´kê!‚K,ÀÊô|™rª¿˜iPw¬<S«ñ‘ĐúÈð ¡ ‹ ùÔÚF9¬Pù4Fj¦Jσ˜|Q (}ÁJu,‡Ô1º8†ó“—C¬pǨ礮”†¦nĂºPÚFÚC((â™räÏÄJEè °̃ÔGĂrQ6åbqƠ~Öq¢µ?£VE¬nÄâ$˜;ù ÷´zÓ¶(@̉>v5Ẩí{v¤̣̉¤ÑƯˆE×̉Æ€r8ç‹ö?@Æ`ÄüŒÂ(!œØp€Ư‘â`”vQf¦ JB%}Hy”«mW]cÇ ‘°LFûŒqÀ:)€ ĐÚÆ~Ơ|S}RƯ Ëd ¶̉å7v̉ 4 :Áv¿37ÓëÇ̉`˜˜T¤äF» ˜Z‰Ïèêê½€)ŸôaÙÄ ‰µS-©G{dƒ™BcE¦›7°¡ŸîÍĺmU «đ…uHƒ SJ¬?X ú0$8¹îÁ |đ€Ö½Ó™ªÅBF>BEă_–6n 0C>À%)v£"´ÖQêˆeJËÑ€₫Ô¶´\-£Äáb)“àç 1́LDPu-¡/øŸ~¡,ÀŒ¼H¸mfiơÇ̉¥;'‘†:ëUX" a)¤®¤‚ND‡íâq69Fcµ ÁàfăÚFX¥pOtvâ"¨{\]¥06ª¾TS”ñbg,B5a5 wÜ"–'}Ëùxé‰ZŸ~øa< £Ô₫¥O£ÀÉLzG™„ÁÊĈN²5¬¶±Ô~á…ƒ~¦₫ô³£çwÚĂ1¶ƠƠ1-’”‡ƠĐ û ˜œ;w®ÀÏf́d¦ÀJ̀\tVc™j>‚èó;  GlZ¨Kƒđ¼́¦;¬åó^ge¬˜˜”Ẉ£Ú©o;ƒÑ¬§Öꟗ֧®-WëªZ?£;EU$xÆ•MÄv´´̉ùè]́ôƠW_¹eË–ùçư桉uŒß˜Ndê˜`äß±8ñ°×@ăÀ%bQbácÛK¬mlƠ Lºé¦2y˜óđfj™@₫O?ư´7À–‹‹'PHÛ¨£º1r@*;S1Í L©u){6P`oüøñ¾<ö…ôlåH>,_€K«V­üùØO×€L¬Íô%/@Ø`-^g§ ú@¤Ÿdí 6±Åetç`à¤iđCưÉĂ®D@;ưÅT>ơU ¥ÿ9–Í ‡₫ô™r§Œ#/¼”œvâ|́!O½Ô²Îy°ZÅq0ÊnZ”Â(ÛĐxŒ)/2)c•nÁz €®>±Ô™:©:Ỡ¾}{_¾>0Êđ̣2f@c£XÏQ^nOœÙ/¿ü̉ë§ö-×zZϱS^pĐÆPÏfkƠ¾}ûú1Îf -­A†é€é@Eê@Î0JœQÙ“~h÷Î^ú Œgôñê°hEvlE–ïhèKúho¹µ½®LLÓ/hà>]ô¨û‡y—»œ…û—¥uƯ;ƒǸÙe«.SXot;Í̉ÚŒ<Üú4-a„lSIlM az–X³|€/ Ë Jà‹ôÀé̉Y¼H,2}L>„]ƒtjóbƠ˜ZO ‘‡¼‚‡Ï(ù€ IÓºÿ3@†c¡V1= MZú(SܰÄQ6}N÷Lç ÊnA¥•ÇXÄm+‰uU·´Ô¼”ƒÅ´Y³fj+₫WHbÚ8δî¤æi³¾Äđ‚Àö Œ÷£>ê·UE8å³}ih½ÎF8€Vë@£Gé¦ë;,ĐXN¶=ÅZJ9X_±́j™üÎt7ÿ†ø¯Æ¹.”£ô¬¾Êè1/-!°²³–Öp€Éè/ ”²éCÆ'Ïs8^ÀhØ?ÙŒ¥¥5 10¨0•zEtl¡Ëô ˜ä!¾dù2·rÍj/kÖ¯sG °̣…ơ=b°ûÇégd́3¥´ư=?ṕÄp:?G@ K"×X±^"ø·1ƯÈ Xåx°̣|< B] ơ‹"–R¦®<¶ ,«¯±†Qç#P$ë41>}œë]XNË–-½5K»ưöÛ“0 ¬„SƠ´ë!iñơ -£M4IQ 0‹úh–Ơ ‰)`êƒơs>ÜŸßû²̣óA üh -Fi ÖTú}ßpẸ̈Â(åi›Ù ÈȰÜbeÄÎùhn%Kÿ“qmöẲ°sUøBÀ́Ư»7-Œâ? ¤aùÅ·Ă M™j•×:¢zŒ—¤²'é8…VO¢0 pÓM7%Û…>Ó=UÆ™1RFé;¶8%SưŒ0Ÿé=Ç`´fÜó3oKgă]t ?0ÚU|F |_d]k–ÑŒ ùR’$Œ h­+ ²F¬fG^;’„Q¬s#FŒđØù̃ïf£Ëçw<Ä2©/0Êô#àMÏ¢`0Äj¥8˜†,. “)ïÏ>û̀O#øïÖäĂR‰5ṃcơ ­üdđI>ö<¼"}˜ópÇ∵I§‡ÙkH<É ŒKXR©;¾™+pè(€âóÇ1v4€0Ú£–Q,L³â€%0º`GĂ…ư<ÿ₫÷¿÷S²¬₫Ă₫à§µrB€ óÑ×Lƒ”¼D`i £”IûnDm+}@?Sg]Cô™è¦Á'ÀƠ…7¼Tàp2₫ô3/:œç‘Gñ‹k´¿°Ôb¡ä冗pqíÁ×xeÔå×Ƨ|ÆpLgÅÚùơ×_ûˆX:¿ùæ›äb ¬ÈXØq+A¯±́¶hÑÂ÷͸ÅIc ¸É’_Mơ¦/x©ÀÊŒ®Ó¦é£/ô–{|E)v̉ẃ\Åÿø÷R¯èËTYăĂuŒe3†–Ö€ÆtÀt "u ?0ʦŒzŸQƒÑÂ+-±÷>xß-Y¶T@Tß‹¬Y·Ö½*0?&b¬,Óß́2EÑL|O¿uŸÎTA ,ºhFó‚Lm!€`˜‡,–<| ñ×Bt0‚…  |¬•a€;̣Wú;–Q¦0±F’ëSxD€/„êE`+"Ö;]Iµc´XÄ̉¥çd¡ÖçŸî­k¬*Ç̉¦pE¼M|@EI„íz]€ bX•Oê7Ï1À‰₫öiŸ†]̉²?@ºêt4ÇØ†“:3L?3Í®yđç Óf¢@-/ £ŒpơmÅ:J=8.êÂg“~¦ Ô“²ôœ@>å—v†á«X̣¥€./3éêÊ9–Q̉2蓨>•\;”ÇØé%Æ•—”̉^íôé§Ÿ&Ç@Ă.Q^<€Q^¸T¿¢‹œH‡°F)àå‚6ëË+ñé7üNÓµOSwéLóXºÂßÓ­Ï­Ïk“ä £sÄgt˜øŒéFà{ƒÑŒùV²Œ¾ç/[R£+F×$`T¬p@¾za müNÓ-Œz¿ßwÜ ×ư&«v¾MYÀĂ($]´/˜×…DÀVhuÆÈç#‰e«[ÜB̉“»èùp;Œ°>EăR?¬†Ô‰Xaw₫§̀¸”…+ 8„‹gẹ̀a‹6V‘°ä ¦‡ç̃ĂÅ>a>,…ômà\jư ÓĐ/Ô5Œ?Ëq ‡:Fa™cXe±̣eªĂLÏÓW¡Ÿ.ơ ljóp¾êØ´ ŒQè̃@Ư)‡ö‘&ºŒß(3Ư†a;Ậ£áĂxÉ¢¯¨‡ZYùd|KÆô¥®)X;ÑÆ ¥ơ"/–e^ ¨C¨7ô)}[V@ư°}”Ơ7ÛĐh™µ¥3€20(ä £ÄMÀ¨Æ5ËhÆẹ́ Xiyat±ÀèJ/ £7G|FĂ2=ÅQqRvŒ*ô– <Øñ­ĂG‘àXÊ2 á”Ï₫´²J¿¡LXw±°¥ó¶~̀σ‰UÑ0OÙö-.̀ „¡º²-Ẳçg<­­MRu ï0Ú¶¥LÓ¯²Ơô…V4£ï‹etiF_u7ßrsZ@JÙTw~b‡©B·óáÉ´#Óó, Q_¹Ê¨‹³tÀ:‹@:?LëĂʹâú›}ÜL„QƠ# ‹Úª¹Â蜨eÔ`´r.¦’0ºB,£«Ư«G2ƒÑªr`icú_Îta›ªJ­•£óÖïÖ簾¦5C £GˆLa*Va0ú®XFÉư /ƠFMO*VO¬­MLLLªä £‰½éŸÑ8Ëè–-›}ˆ]´Ă½.a‘ß¾ëÿLÏêb=¦yôw̉ầh̃hyqÇơ7>ơÜZFX°>NÇ•Ö!Z­«ÖOk[Âó‡çöKøX‡ÆŸ–8£LÓ/r+V-7­!ñc«Ú Ăêc1ÓÓÓÓ|ë@A`T*ư-B¦å?₫ă?Ü¿ưÛ¿¹ÿöß₫›û§ú'ÿùßÿûOÊ?ÿó?;ä¯ư«û×ưW/ỵ̈/ÿâóyÿưßÿƯÿ®i5ÇIGz̉h¾đ¾“s#äá7ưỘ5WÏ¡ơáxø›æă3¬3ùµ.œcôç£íÓ₫ûtümy9FZÚ¡ơ+ Fo¸ñïÛשS§ØÅ ¬ÄeutÜ–‚¬.'Fei»Ëä[!­<»É™˜˜˜˜Ô.¨]YÀŒ̣G`sb""瓸z+§~#†£¦×´GHË–…”CZkÄücE6¢é8ζäå|ä%~#¿$»yóæ₫²É¯u¤|̉k>~縦ÑÿI£¿Q̣q~'4ÇøŸø~üO>ơåP₫§ÎÚ~̣…ÿëù´çQÅ:Ê4ư‘×Ägôæ›|h!âu²6º*—pE´`æÑ„œ¡ÎÄ̀Œ ‹d7ŒÚuðñ¶ñ6000È·ä £± ˜JƒQ…Rû̀(Œ.Y¶ØOÓ#«%¬0zK°ZRvv‰*/ ́¾g!V T«2ßJiåÙÎtÀtÀtÀtÀt öè@̃`´«Äé‹Ï¨Áh₫a3]‰™Â(7ûX³OtÏz±³; ÅÅ"Ä̉¼xñb ·d₫¨¶ ÑtÀtÀtÀtÀt o:wmc0+äx£¬¤Ç2ºjÍJÙépeàdê åƯºu+¡H́@³Nö´oƠªU‰ćʃå{c­=o¬6Ö6Ö¦¦¦¦©£‚†…/4£ïỄô½O„vb₫Ơ#‡S‚̃³à¼yó\ï̃½K%‹•°¶k×®Ä1Ư_ÖTH+Ûnx¦¦¦¦¦µK*F·Ù4}áaôiÑ÷F/“ĐNXFEV Œ`Øœ?¾ëÓ§O¬ƠsÅm£7öJg[NOÙ ¢vƯ l¼m¼MLLL*Z*FÍg´đ,ú­T•L«eÓ:™¦ƠĐN&LˆQ¦ægΜé:tèP6Ù‡|Ñ¢E~uE+£•o7<ÓÓÓÓÓÚ§yƒÑn²€IÄ0UˆrÊM®¦OÀèME¡N?ưôX d Î̉öé´ÓN35GuÓÓÓÓÓÓ ÑƒÑJ‚Ç|Ÿ}÷ưwÓô½9ídoœµïÓÆÜÆÜtÀtÀtÀt *ë@®0Z¼hg íÔY,£­Üöµ«Ưă><Û_¡zÀĂèï¸EKºå£Èʵ+S|F«²"ZỨFi:`:`:`:`:P;u ?0ÚU¦èFE F EŸ‘ó¨etá̉nÙÊe£ËF ˜nºå¦ 1«ÛM£ṽ4lÜmÜMLLḶ©9Ă蔉nxƒÑJBĐâÓ£ïÈ4ưB±Œ.[¹T`t©¬¦OXFo²iú ñ“N:Éi Ÿä©§ê|–Yè²~øĂºK/½´Z·¡Đ}=1}Ï=÷\ëCóÏ30¨:íÙƠ í̃ÙKßv­m¾2È´F¸¥£K½e´̣§éï»ï>¿ïưK/½»ie>ô/ºè"× AwÜqÇ•ëboÙ²¥;pà€c˜¶ƒïl«J›ï¾ûîåyæ™®Q£Fx¯qmŸ1c†C*³_r97‘æÎëzö́™̉†›o¾ÙƯqÇ₫·‡~Ø]y啱m$zĂ3Ï<ă(']=N>ùd÷ÔSO¹ŸÿüçiÓ–VV:uÜ#xŸ¢œ„éC=”¶ ̉–ó₫ùî‰'đ߯»î:wï½÷&ó_{íµnÛ¶m±»¤åZWËŸÛX[ÿYÿ™ä_ F+ƒ+àœ!Œ.«(ÖÑk–»CGIh§ú˜† æ·ûŒ^H<øÇŒ“„…đ8p0qâDÿ°̀ö|̣É'ƯÛo¿íöïßï̃zë-׺uë¬ËÈöœÙ¤g'©wß}×}ÿûß/W½~ü㻋/¾Ø}ûÛßNæ§,âµ~úé§nơêƠ%ʽơÖ[ƯgŸ}æÈWW¬¢ù¶¶fÓ'¹¦=z´0`@JŸPæÂ… ƯÚµk}›éóîƯ»—h?ưøàƒúăguVÚ1æ~ÿûß» .¸ mÚ¸v)bøđá±ă”m?tíÚƠíÚµ+m=öîƯëzơêåÓ5nÜØưáđßÇïvï̃’¿~ưúnË–-feÎñE!Û±´ôù ëSëÓt:`0Z`XE¦À¨€h£:MĂ 7¸íÛ·û~¨ßùÎwü~ơ;wîtÀRx ˆưíoëv́Ø‘´è¤S*=̃·o_·|ụ̀´è°¼sÎ9Ç[ª¨#–¢l@‘‡7VIÚ™IeÚEX«ÇÜ]}ơƠÉ|^x¡‡sM +/[©Rö-·ÜâÿDzÂ(Ǩ3[­®Y³&¥ÀO›6mÜÑ£G½E6₫ä'?ñi˜Ú¦¼»îºËnXÿÛn»ÍÑ/W]u•{́±ÇJÙ¸6Óúä₫ûïOZp?₫xß·¼h0̃œ7—¾ ŸZ39[Â=÷Üă°HR^TW®¹æ7mڴؾúé§Ư‹/¾èuîÜÙë[\}:6Wû”ºR—èÔ?æ7ß|Ó5mÚÔ¿dự—¿L–I±B’ktܹ(ïw̃q—\r‰?~ÓM79¬åXm¯¸â ß猙æ%ĺÉơ¾L°™ÄäÉ“ưV¹»ưöÛ×”æ£LtüK—.u:ụÇêÖ­ë¸FøN=[´hQ¢X‰×°™è¶¥±‡¿é€é@ủƒÑÊ Ç 8§Âè‚%EÓôøJàûC¯rL‘ªR^vÙeHă,¤X?³@4đÀ±ë¯¿>-èlt›6ṃyFé¦L™â§gÓ]L[~øá‡îơ×_÷–"À']€HøàƒܱcÇÜG}ä^xá…´ ؆Xí°à’À„°â>|8 ÀåpÔgñâÅîóÏ?÷–«p^ëÚ±cǤ%P<–#G¸×^{Í‹Zơ¦ü¿úê+7nܸ”6³ûcÆ'VƠéÓ§§Æ¦ @–8¬̉Ÿ|̣‰·Xâ’@€¸•+WúÚÑ¥KŒ|ôÇ‘?₫Ø5õÜ·‘̣èÚNßp X̉ö2Ä[…ÓWiDZnܸѱơ,i¨POƯÎY¯^½$¨²u-ẓꫯzk*/#äĂ‚>¤®À&€ ÈGÏË&#FŒp€+Ç(óõ¼Ùë.–\ƯKíºuëüy(wêÔ©É n¢ÔïàÁƒ₫“—íKúŒ™÷ßß-Y²Ä:tȵjƠ*ă>¨?^ÊÛ¯–Ï ÄtÀt ªë@¾`tˆø‹"æ3Z ™I‘ }Û-X2_|F—xY¾z™;øêAô>TÄ_ÿú×°ÖDkͪU«JXOI‡5-–Ÿ²›‡;Ï €µŒ]œâÎ- %“ %~ï½÷üîR'x¢·¸”Z[/¿ür·oß¾$ÀR^JèW@–6âÖBßslö́Ù₫Üè–wQ­€'>²¼,PơwÅzÊË í¢}è?ư• Œ̣„3.åéWËcb:`:Pt /0®¦ogqF3aǼ§IÑ£" =TFY©Ëôy³fÍJ<àXÁ DQƪå( 'y{ôèá­hÙ\Àpÿ₫ưưĂëbi }Â2o¼ñFÙ>°­={ö$ë [@!?@BÏp…0Êï,ÊÂb™)Œ’«#0 Æơ ¾ƒøè†Ç€¦÷ơ7` h-«_!,°á"*Æœ>Ú°³HFË ­Ï?ÿ¼o;ơĂ²UßN`K:ÓƯÀÓ×äxI« orQ`™²(Së„~b@?uÁºÎ8«uê£Ó́ÿç̉ÜH”̉‡³fÍJéCtµ}ûönđàÁ®_¿~̃Z „’ki¸%.çÀ:ªç$_Ô-(¥ŸĂ™¬Ñ:MŸÉua0j ‘‰XӓꮣyÇÂÊ)°x^,£¢KD– ŒXFñnđË‹*/w $΂‰aœ¿iYp‚\6 `£=Veg˜€"S¹ø,r. I­ee—`A ñàÇráß|*4bQÄjú%ªơ4îÀcÜ&Ü€.|Dặ;Ö!á1¦‡Hư XÅ[VÛ°îrµÂ§LÙc±Å’G[heĐFÚJ›±́|üĐq,‹ô-/*!ü…¤SàÅRXË(ơÁ×Đ×eÖgÀỏ¤Ĩâ®–G|>©ktÁ ¹aƤ›Sô¡o/ºLßđrö!0 (:Ô[Hq…QÜ+øô¼|öá àÊŒBXº‹«nüN½±p®™^è$c•Éui™–ÎÀÅtÀt ªé@®0:G⌳8£• áY“0ºx¾€èb/ËV/M™¦g! E/ªˆø¶¢jFcER_̉0ôL&Œu-j-Ê$_¶il@‚©g|=ùĂÙ Sµ¡*‹–¾ùæï;I>ÀÁç•)q¦q9Đ½ñÆ Ô*Ç‚¦¹ù €Ñ˜€ P¬PÀPmÓƯø:«†%YÀ‚á».’ư j@Đ̀™3SÆdZZÓ0Ï98íf K)PF¹@ IÛh#m¥Í¸X`åu _t±P¬“óæL‡ë(,ÚøEf;~X¨±¸G¡’óáoI™¯¼̣¯«Ze9‡.@BÏ€u=F?0–,}@dÆ]v™‚ø£‹‚€Ỉ€)z^¦Ô²Oÿâ2Ào¸Q`A¯ÊçņO Ÿó0Xø~lÿô§?¥X¹ÓơƠ<àÇÂ`Ôà!®ØqÓ‘ê¬9Ăèd`´‹íÀTÙ8ª0:?„Q ñtđđAWÿ†Dh'@+Î"Å+XœEà˜3gă¡˜­¢3<سÍWôÀ<¦Ưµè‚¦ÿ°P ¦j±p=,fÑỢ ;X%9ÜøÔr™2Æ‚‹O!çÔ)od̃¼y~± Å¡ĐâÓH]€N¨_ưêW>>® ªX\íVWEa?Æø¾†¿_X́¨/!ôB$‹mX…N›8o¸R>ÀgIê¡‹x™̣Ï;ï<_`tkô€œ¾ÏĵBë‰îQfè+¶¾é/ 2toœ™:§´RÍ ̉¿äSË$ǘ̉îB̓Ơè¤.¼(Đ?,Ểă¼Äq.^¢/f¼¤0N@=Đ©±k——€kP-̉™è9ơĐd™¤·4$¦¦ƠQr…Qö¦OÀh'Ù›¾“mZYP²^¬¢‹E–Á¨.`*-L̀̉aá© ae¢á™ªăÅœiyÁÈX–iLÓa đ3]ư ˜aQ,Ím!Óóf…Đ×3Ó|¹¦+~a1ÆƯ ´çZËo b:`:PuÀ`´²è1ÏçeÚ˜í@YMˆz•iú1«é«¢"Z wƒd‹’W•ï~º ”vµ¿—ø­XlËkå©;.XxË“·yđƒÆbœ."D!ëdç*Ü5j}m}]Ût /0Ú],£bMZF׬v?êwس¿Bơ€Âè|Ñ%Ö ]"–Q`ôÆHh§Ú¦äÖ̃Ô;. ¬'¼QEơù8æö0ÅR\(kqE逕››XÿYÿƠ&0--Vđy€Ñ·Å2ª0ºH€Ô`Ônfµéffm5}700¨:`0ZÁX¨âỴ̈0ú¶Áh)ûX³Ø†Ÿ…²6±³RÜ"»QVÏ¥››é€é€é@Åé€Áh¡h±‚Ï£0:ŸQ¦éÙ…iMb&¦/m•3₫z¥A ˜Ê päeE21 •“mh¨l.| ±̣™Ơăø!Fów”Đ<‚)›²Ë“–€ÿĦ,Õ¸<ŒûÙăI;YÜ’¯²­œ»ÁZßZߘ˜¤×\at®¦ï*Ûôm+;0™Ïh“gLñO=ư”·ŒÆÁèơE¡ˆI¸¥è…AxbW²ëPô+¯Yœé®Ka~@”=ß |OÉlBÚd{ñ²{á}ˆ)ÌÔ¸ü„U ƒªg{lÓ‡» e›7ˆmI(¥hü\˶üéo”ÖGÖG¦¦¦§£…çÆ 9c£‹V.v«éCË(ñ!‰I¼ĂèEÅ*câ2b}‹cµ3»/±¯z6#AĐKÛ‰àïX1© ñ")—p@,+ˆ‰ëÉ6́tÅWdt^¦ÆÙ!(º0‡‚ˆI™º{ç£\|mÙ” ̣ÑXªÄÛ¤~Ô3Ü̉±¬>Đ ÷h–Ç–—´û¦›ṇÁĐ£;•U.ñ/‰q™Mÿ[Ú»qZßZߘ˜äOr…Qg´;VÑâƠôÛ̀2Z!¼Yf¡ •LKˆ.q‹4Îhd5=ÁỞ0¸^PLaÈ=n_z`ß™XH™Ö'P>ÀÙ‚’~€Y¬—œëÁô;÷đ»Ó°£ +¼ Hÿ̃{ïùó°ăpL0z̉grѸ=FÙ!‰m?øàƒdÀvÊkÔ¨‘ûꫯ¼¥‘º°»ÓßXO©Ê©ơ¡¾ÀxÜ>ôaƯ4è=.ôsxŒ­5)₫`ÏuÚ¦åËjû Ó¤'/;e8?̀è¥íwŸIßYüƯT­/­/MLL²Ó|Áè``Tß÷iÛ̉m[³ÊB;GÑ·˜¦_:ß[E=ŒF,£zq°[ {ˆGẃá8PĂ á…‘éöÇ{¬L8ÈØFpÂopÂJÊ"¦®Ù–Rwf""à†‹xèĐ¡$øe{1cƯƒQÊaKS€4 N;€ĂGñqÈü®F¸`=ÅB ¼ê"$|5 îM_Vư°èFa”„tú‘UgÚ=];±²Ă@Ên>́€?ƠteÙñ́nÖ_Ö_¦¦¦¯ù€Ñ¡b$0:Ø`´ĐZ|>`ôXŒ..‚Ñ%EAï£qFñ©ă ̣úë¯÷Û/Æ-6brq™\œL}ë̃̃˜ĂênƯÈV•lµŕ‰'ȨühÊ‚Ñk®¹¦Œ²ư)€§å`ưeOsbd£À'É—@# e9“¶cÂ([ˆRæg*Ÿv2)‹í;JM{ơƠWÛN=¥DRȤ-MÅ?l¬­MLJÓÜat‚KÀhG7¨KG×ËèZ³ŒœJFç­¦gª~±Àè~Ù›₫FñQTZ€¸ƯwđeäXl²Z©́"ÓƯX°4F}FQ€¯cǾNø‡̣ÿË/¿́-£X/3™º;÷ÙgŸíË[1(VSƯïüÀ(Sße+(çñ%ưæ›o<˜cqDL꘮ƯÇß s˜–iz\ô·8`-­lö¦gŸûÚ°5k&ưkí¡f:`:`:Pst b`Ôv`ª}ïm7{ñ¼„ÏhF¸n¼Á{‘”Q«'~À& ză7¦ÔqÇç-¨+m•zi7BE-Láă€&«û±LbAÄ_ôôÓO÷«á£uÈä†óè£z×|Nù|üñÇ“íÀK0Ç-Z”q\€W]ơ~Ă 7øóŸqÆ̃]Å?“ĐT¸PÇtu¡¿˜F§¿Øs}̉¤II?Ơ¹sçú}ÛµŒ^½z•ií ÏÅB*ÜJƒQê× Aƒ´ơKW;^snî6–6–¦¦ƠẸ£øŒëhï6XF F+F&at™XF¸ëë_ï̃ <8Ö"%päÈ‘±QüKÇëP”l•©îèB-ƒiù… z Ơ¸ Ló?>•Ù‹íùóç»áÇûO'iø\‚Ă÷’0IẰo¬çÎËùÙ»ÿùdyXŸI¨&`‘˜ªXA™’g!«ü)°ZÍ5KÖ ÈïƯ»wFm½ë®»üø»q}C;°æfÛo–̃V¦¦¦¦•­¹ĂèD?MŸ€ÑN µLgÑoé¦9Kæ¹²x Y¼e>ƠÚYÙJgç·Ÿé€é€é€é€é€é€ê@Î0:IB;uëÀh+Q³ŒœF½ÏhÑ4ư‚å£"‹WŒÚÍÎnv¦¦¦¦¦U[̣£́¾„ô‘˜0ú(3†öW¨(†Ñùn₫̣%"̃i•.`2˨ƯˆªöÈÆÇÆÇtÀtÀt öê@n0:̀ÍËèđn]=ˆêv £…"Đà<Àè›b% ˜tßÑ}â3jÓôµ÷·›»½é€é€é€é@U×|ÁèPQ¤oÛÖn»_Àd–Ñ‚"©‡Ñw‹at¾øŒ*Œ̃`>£e.́!A₫5ÄSe^´÷ÜsC*³vn{p™˜˜˜Ṛ£Ư» ˆvñb0ZP->Ỷ2ºhŸ¢G®\ê-££eßTæđàÁ”¤é.BB?M›6ÍÇIM—V³âĉ~µÜîW¤#r’i™–Φ¦¦¦Ơ]̣£Ă€QYÄŒö3ËhåĐhñ4ư\ÑE£¼ÖÔÏ>û̀]rÉ%ƒăøCƒđ7o^ÆùªûMÆêoJÓÓÓÓ²t /0ê}FFÛ¸6M_x Ơiú™‹çºy£ÈÂU ŸÑn½è¢‹|`úúơëû8¡Ä6ưö·¿ía§@vW"–*qC D¯{Ô7ỉÄÇeë̉ÿøÇI@ÄZJlÑ;î¸ĂÇ }öÙgSà‘ ó́ÖÄV¡lóyÙe—e —ԇإá…ù³Ÿừ×ò˜1%¶Ce§¦‡zÈø~úôéƯ¤Â¼>ø ·̉bQƠ˜¦vă·¿é€é€é€é@uÑ‚Ñæ3ZX ơ0úÎ17“izñFÔeç¤/¿ü̉o— ¬½ÿ₫û>đ£:M/0êWÓï¯ñ–Ñ믿̃[‚r“Âȶâ5×\ăA’­=Ùæ3î&ÆNLÀ*»Méqvˆ6Ơ Ù¥K¿u(»D‘Ë*{Ư—üâ`TÏ‹uËmXÏ+Vx€fw§“O>ÙC§ëîƯ»½5˜ô´P”íf]ónÖ6¦6¦¦¦5Ụ£ÚI`T⌌FeëÍ7̃yËÍX¨0ºPB<Ơez₫ơ×_O®†?₫øăưÿ€$Ç€J–»™’íµ×Såzœ)q¬úÿ7̃èU­§@(02ÏäF1hĐ –QÍ7a„–Ñơë×§,x=z´#yÖ¬Yă6lØàeƯºũ‚:dÈƒÑ öÎdœ-ƒé€é€é@f:wm#¡ F L¢r:öó·ƯLÑyËXÀTä3z¨æ[F¯»î:÷̃{ï9¬™\øøw~̣É'ị̂Ë/wLá9rÄx≥~¡ÀèI'”LÓ´iS·mÛ6÷ï|ÇÿÆ̃đ¤Q½ổKư9³ñƠ›0ZÚ& SASÓ™;vLÖ «¨ZCq#À-¿̉^xÁ5õÜ·Ùn€™Ư­Ÿ¬ŸLLL*_rƒÑ¡>è=Û&ƒ̃ŒD9c Œ. ơqF#0 ÔDaG/Då0…wa²°†…AUñ¢eq>Ÿ›6mrøW~üñÇ®sçÎ é<àÁT§×£ơïÑ£‡;|ø°º={öø)~̉´iÓÆC¬Âèư÷ßïË9å”Süñ³Ï>Û§ÇGsË–-®nƯºiûV|E±ÚbUŪI9”ä._¾Ü[q‘eË–%CMq^½z%ËÇ?TaöÖ[oơ«óW®\é.\èZ´h‘Rï~÷»̃Ÿô‘GI[¿ª8¶V§ÊHØØ˜˜T´ä F»È4½Hß"µ ÷fR`ô ±Œ2M?W`‰ƒQ¼°'N±5jä7n{́Å_LúdV´Rf[>Sñ¯¾úªĂB \RW- fûöí1>ăÊmĐ ëÙ³§kƯºµëׯŸ÷1%e6kÖ,¹*Ÿû”®¸@ûôéă%“ÚÀqÛ¶m½•³]»v~¿ZZ±ÜĐœÁ̉ù“ŸüÄ׋ïm·Ư–¬ÿc=æüñäÿXBY¡°FëL3­\gÛ¯–̃@¦¦¦¦…ĐƒÑCcE®ÑS’>£LÓ£́Q¿÷PÍí8bi<í´Ó ¸"¾’Ä6¸O?ưtëó#5000¨’:P0j{ÓWq–QîSMø£5ßg”Ơđ¬'}!̃àªÓ9ˆ·E¶:ƠÙêj–ÓÓÓÚ¥ù†Ñ>2Mo0Z©0:G¬¢ Ư\`TVÓ×e<+â«Ậ̃v­]7PooÓÓÓÜuÀ`´À±"NÉ4ưëÚiúü9nÎQ¦éeÓ±ŒÖ—°Dv±ä~±XZ˜˜˜˜ä_ F+‚ +¡̀$Œ.HXFç,‘–/.‚Q ơc7üß<¬O­OMLLḶ¡¹Áè°¢ĐN²7}Ñjz›¦¯唂̃OW g0jasÖ70000¨â:`0ZIđ˜ïÓ†0Ê4=2oÙb·û ÓôfÍÇ››•aÓÓÓÓÓüë@¾`t°XF³Œæ›23,/£g´Èg4 £ FíÆ‘ÿ‡ơ©ơ©é€é€é€é@¾t 0:´[W7¸«À¨ˆÁh†đ˜ïdI] AïÍ2jS2U|J&_70+dž¦¦¦Ơ_ FóM…•T^£óv`b~MÓ˜˜˜˜˜˜TaÈF'NtXF‰UéƯV⌮]íl;ĐC)0ú¦LÓÏ˨Â(Aï F«ÿ£½ơÛ˜˜˜ÔdÈŒéÚÅ QƒÑhx:…ÑLÓYF=ŒF|Fđƒ8¶ˆŒSjvê)m·̣·&_ Ö6»Ù›˜˜˜˜^ F+ óyêä4ưÂFe¦¨e´ÿ₫nÑ¢E±P9~üx7eÊ”ØcóæÍsC† 1­ÂÓv-ü ÔúÜúÜtÀtÀt wÈFG “8£2MŸ°Œv2Ëh>á2Û²JøŒÊ"¦¸ ÷×_½»÷̃{c¡̣Ö[ou·ß~{́±»ï¾ÛƯpƒ…ˆ²›Nî7ëCëCÓÓÓÓP̣ £¤½Û¶2ŸÑlA2é£>£ø.0ŸQ³ä%×tÀtÀtÀtÀt ë€Áh>H° ”‘ôOh§E‰½é FíTÅo@f1ëˆé€é€é€é@.0:R¦ég…ÓôXFÛˆet­¦/8ÆÂhŒÏ¨]ôvÑ›˜˜˜˜˜T%ÈF'‰Ïh·"ŸQƒÑ‚3ḥ„ÅÓôóÜÜÅ }àûù£{-ΨYGÍ:j:`:`:`:`:P…uÀ`´̣ø1¯gNÂ(ÓôÀ¨È| zŒ^C}÷ÓŸ₫Ôt̉IÉ‹ñÇ?₫±ûùÏöâüîw¿ë~ùË_º_ưêWî'?ùIÚô•ù¦E{N8ᄼԑrÂ₫!¬ưđíoÛÑw?ûÙỊ̈r°¿Ÿ¥çÈg?R×̉ú…6–ê«´:Đ₫SO=5EŸH‹~ä̉/Ưºus¯¼̣J‰~ưÅ/~áφă\è´Ö‘6ÿùưä“ON‹eØ®p,É“NLJêZ´h‘÷±Ïv¼©gܤ+‡6’/Ûë$n ô\è,e~ï{ß˪_N9凤«sU=~ÖYg¹eË–¹K.¹$om`é‚ ü=&ÚîLÆà¸ă+‘{7ăóï|'y ư3fL©‹Y«jŸ[½j®57g•iz¶Èjz‰5jÓôyÈ̀ kÔ¨‘½Ë͇Ïh£W\y¥4h7n\̣fÔªU+·råÊ´7ÑóÎ;Ï=zÔ½ưöÛ®sçÎiÓWæÍbÍ5®I“&y©ăK/½ä6lؼßqÇnÿ₫ư₫KßñÊw[zè!·{÷îRc½f{>ô?₫¸/óÙgŸM©/̉§d£„¸‡~8ă¶oưúơî½÷̃óå^qÅɼ=zôđRêÉC5ùdÆư•í˜e’₫ /t7nô}²k×.wÙe—eTnöûöíóùÖ®]븶39z©c0sæ̀”— ¸7ß|Ó—9a„Œ!—~ç̣î»ïº^½z¥€R&uª ix‘&¾jç{nFư˜I¯¾új¯₫Ñ~”Ræƒ>èïĂôó́Ù³“/^”‰>êŒ;6%/ºO?“ºj¹€)×èöíÛƯ]wƯ•·úg̉FKSs2—±Í?ŒÊLæ39Dæ+%0úÆ;ÇüLó—,ö@º`Yb5jTʺcÇnÓ¦M)7!̃–£–!,(ܬ6ṍo’qʆ%*îM+bô˜Z)§4‹o÷ä‹̃ËRt¬fÀ B¢ú æO™ßÿ₫÷3ºñ6kÖ̀ĂZmÅ ¥ïV­ZåË9ñĽµTëÆyÂzs>µBñ;àEẓ…íá7àđÈ‘#IË•–K₫°=ô[&Ö̀›o¾Ù½óÎ;î£>rÏ=÷\Êùxà÷₫ûï»?ü0cDÑ@èÎ;ïtóçÏw‡r—_~¹/»_¿~nụ̀å₫;ú2`À€Œú¸âíÂŒQÿ#Fx¤ˆ…˘3₫óŸ]ûöíưÿ 6t‡öçĂzIƯ´›7o2–úûi§æuå7^0Ù8=ăèx8ÖNuŸ±¯ƠơĐbÈXªF¯5Æ4~yæ™nÅ&à—$ƒ̉® Ư¢ŸÉÇ8.^¼8­e" C>^@.\èûáÑGơ:Ô¥K‡>¡ S§NMÛ†víÚy8”··̃zËơíÛ7#]¡}\Ç¥Y°Ëºßp ÅƯ§¸&£÷oÎÇuK>Ω–GÆ©¬ûS¶÷½Æm,½‡~&Î3/g¼@=Ú÷/|đ7¬\+û ×>ưMº7̃x£„AáÆotÅ¢”­U;è°¼£q: Œgt–øŒ–8£̃2Êv m FóÅ—Y•S:Œđ0:|øpoÅ’„ŪM›6̃Â¥JÑ´iS÷úë¯{ááU–Y³fù‡|ø;7ñ̃½{{H{ơƠWư OsSåv́Ø1wđàAåÖ,]»vơU₫”{öÙg'ás‘P¸êª«2zHé5: TëB›(Êä̀´bº"ư±mÛ¶$ŒCX‡¸iBXa±èđ  oơ!Âo“&MJ–ÿ̀3Ï$ÁuàÀ~ €+̣µZ¦Ñö́Ùă&ô%ßµ<ü[¶l™LK¿RFº6đàdÚ¨Æ̉¦§X!›pÜÊ* áá¦àĂ´!–-@„|L³Ó/|Jù?]9ÎĂ0îE§mÛ¶¾ô… œg >ưôS?&@b Œ̣́æ̀™“<7SÿáXj^|ñE¯‹ (èFiP0eÖQ-(b»wïî-»\?X9N½€̣ûï¿?™±d,ĐtU_}`ûùçŸ/³ÏȇÅ[wJ#öï×_íÛ_V_@_qX™ÓÁ/¦ÖhÊG¿W¯^íÇØa|Ô¤}”ɽ˜ÆXßn¹åÿ©ç¦ `ZÁkúÈ‘#}ưi¬y€%­#éÑ)î7Œ «mFŸ¹¾¸Æ¹†´?xÁẠ́͵†nrŒºh>ê@“+s½zơü1î[¶lq¼”¢#€v¨ë¸jđ?×VôE€{ç¤LîqQkiăÄ‹y–.]2N€¦ZưÉKß똼đ ₫AƯR0:è‹×UøR†î¨+‹Öqâ>‹~dr­ZÉ̉\`Ô¯¦` 5Í !ó—¸Q£§Ä2ú–c;ĐyKÅ2º´ØgTa”‡4¬#'‹7Vn¼X+ô{¨tјx00¥É;ùyO¼¼Å3=ôôÓO{«,.0Xx pÜD9ÆC`àAÄT)…ûî»Ï?$xÔ©S'íPF€=Ωyđç¢<,™XÀø{BºDY0J]¿ụ̈Koà%€‡<í¡¿ëp‡+̉îƯ»7ý«¯¾̣ưF_c•¢ÉG¿`Y¤½,µ~4XŸt<è—p:ƯÍc\£éxÈÓ÷™Â(/1@@ưúơ½ñà Wú“>~â‰'<ˆĐÇL½ÇY£ơуèïè(m×pxœ4|ÀŸ>>¨K¦0®¡‡aÛË‚Q †¶¡³ŒS£¼è û€$zÏË//¼ 0µ>èi`D¾ècËï@ÁÅ_œV×ơÜ×^{­‡_®M¬¼e麀0fè* ™NoÂăä›1c†‡›Đ‚͵Œ3=Œ•Vu–Oôë‹÷‚ĐƯàZŸ6miƠsaùå(ăºâeIa—1ç%Wœ>}úø¾{ä‘G|^¬đœç±ÇóÇ8–\ `¦Ÿ¸Vq% \t˜c´ ½á~Ă1ô›{ úL/¾øÂ§AO¸¯œsÎ9₫|WÊ >VyƇ¨ÖŸ—¦¾ÑMî7ô×íJ×ß@2cĂ= ́c ôñu×]çû9ºi /7,Ǹ/è‹1ÿs²Ê÷k®¹¦D¸ïĐÇÙêCº¶ØqƒÖlu 0ÚQ¬£æ3?º̀²$…Ñéóçø•ôô^§é¹Éñ ä†Î<„Q¬Ô¥—^êñ±TDưI£0ÊÛ97ñĐºÇ« " @¤Ưºu«·ñ¸¡Ă<¨jÜ€[@ëĂÍ8ËD±‚(tñ°yĐó₫ÿô§?y 4ç£\ú«nƯºië Ĩe,l{£¼́Đ7ÀmB = ­G¼t…ư}±àô'–²p!OY0ªơ¢Ư¡û@Ïø ¤A_/êÀÿ€Åï~÷»dp¬S§NÉÿ±²~₫ùçnÉ’%i2́À¨âº›zê××V>¬Ö\X—3q÷ ,̣ÓNÆ@k>ừËÀÅư€®wú{P(ó©SÁÜgè{tŸú`T=à5=yÂ…7¼H±Ú6ÚεÀÿèÖuü`¹¶Ă—t¶qăÆ>Â)×0 FŸ0Üo°2Ó§@'3 \ÓLy—Ö¿̀\`¥ _–ÑG€Yưq¹§aeÍÔåˆû 3#!Œ¢¿ÜðH#Ü#Ơµ„¾âeëcŒ…ú€¢§´På~E{¸§†ºA½x‰­̀™Ük-Áf¾u ?0* ˜:wéèzµii>£Yrd^’'¦éßr £©îÀt¹¼Å3…Ƈ07p¬ ºpƒ.–œ X,Beă†G~ư7À¸iEđXÂ…1À-Só€çáÆùy#ç­eJ|<đHĂ•›©̃xÓ)?µèjl¦¹ ëĂ`æÆnúŸi¸pj đ¢.<̀°Ä…°₫Ûß₫ÖƒơøĂ©1@Ua”i3,ÚÊÑ1à7Àœ₫úoÑ®ª£ô}§Z¦8y³¸ ëmz@ƒ—œ3Î8£Ü0 ,aY¢o˜º¥ïègtˆ— ơOÅôñÇ'û]_ĐơpºđÀg2º L·€‰6ayÓ1F$…~çeNÓ„ÓöÓ)cÍƠ x¡Î™X‘Ɉrñ:]ŸîÚ@G±$r>̉̉'Ÿ}öYÚÅOúÂ¥åó²…Ơ‘ë0äÚRÆđK¸Œ ăÊơNùŒ£Î̉”Ơ®#f4 /djQjÑ î@1÷3,—¤îBW Æ€êIzî7´{ÓÙ”ñë_ÿºTưE·Ñÿ0 0I¾0̉Cº± ưôaè>8S¦Z–Ơ}AÏ}ÙfªŸöP&:”ôüO¿ó¢h0j ™N*mî0:Á¯¦ ôjỬm]-3¢ û+T(Œ2Mˆz- z™L¯r“Â"ÊÍ››?µÊá÷É´37=,@‘®RŒ€̃®X`#|;' E§¤P‘^§YÉưÉ'Ÿøi2n²Ül¹áă³ ŒR,ˆ@,yxSgÚá!]ØRÚÅÁ—éă .¸ 9µÇtÖ¬&Ôk'¦ÓʺÈh€ƒƠ„|<,,7<Èxc± ¬ Fü†Ơ‰₫àâ¢-êG Œ"z^,d!ŒêªX|ĐX¡«‹%tú«.ư¦~ª™Ü$Ô'¬4Ëhi>£œ-‡´•¾₫¬À)¾Ñºà+ZÍ˪+ɸiz¦\ú :h(Œê V5êU–4ÀÂƯDGÑUôá‡rÔ_ĐdZ“¾Gh¿>ÈIËu@»HCû9×z¾”…V,†¼L “´+(/:äe,ÑMÚÔ`9O1]t‘^”p›`ú—²ĂqP©{Ø>`sá@ƯÑC %\ 6†zÛm·ùúó’G>ô\£Lp]Óïè:îô?@·'Ü(ʬÑÁđ%­4]ᥙ{–H¦Íku™´°̣RÀ Öh,—´ pƵ\ê‰6ưDÛ(“ă¼¸"Üoè^>K{iÅrÊ *í`öE}1¹FuÑ÷ Â'¡W:½_Öu€®qR¬»êc‹Ơ’k"ƠA½ođÏpÏf taçáe—6Đ´=º÷ĐôOtc&÷KcP›OÈFgNà.)Œö4-~¦'„Ñy¢s˜ª_¾Øí9¸Ï]Uçj™Ü¬¹él<¬uQ VC°Ü¸x(â÷¨j¼•#<̀€WÊ4Ê€µđ¦Àé1µR`A£,&@4n¬:͉/ ÀM›².ÉDéiǹ€u¸x ÅâÁ /ÓÊ™” ṢQ'@€|Xxy3E \Pµ;X×đ5ăÁÀT¢Z÷x„ÜÂiz,,<9§®ªç|,Nà\´ Đ!Oµeµ°Æâ¥ñ ¦ŸÑh,@_B‹iè;êFŸđĐø™®àK[y…JX6±rnÚÄøœ*~´@Z yÁB'éKúL| ëXĐâÂYÑÇäá@8¯Î0ö´W¯ ÁT¢§!́ êC ́QOô„ú“–ëë‹₫Ơ…h€ ₫ÄÑ…fÑqá†M½pƒ¡/¨'/FXä4-°ÆËÓáa~k˜±£ºXGÓpœ6†±by)Ả?kÍĂ ‡ö3ÓÄ™øF2F¸eáHáœ{³¿ÿưï½›×.ªÄJɽˆñÁ­±`¹Wqí‡~»¼đj˜:®9Ậ5`G›Cа/é®G®®ơĐZÎ49÷Rú™ăüÆø,ízE×7-“—)MK{è+Æ€ú†a¹h ù¨oèÏØq]qŒ¼X́£ ˜ ®tnK™Ü/-Ái.:íd0Z9Z|Ö¤Ï(–QÙ—~®,`·|Q"è½XQ[a‘Å¡âđ;.,‰¡¿c½ÀúÄĂ‹]XPÂ×̣¢7\€cáCk eqS<Z¦ŸÂEXÈW$ç¢ ‡ÚFÎA™X‘²¹`è3̣…ÓÍÔr° àƒ®6¦lú:̣< Ơ§  Q %ÀÅÉĂœóÑG¡e‹‡µ‹ºdhX¢ă¸u´/.ºçfLă‚Øc!¥eŷĺƒ̉ú@ÄU£4°eL9Ö?ú…6Ñwá*f¬HS«c@ư©gŸif¬›qí@ÈĂù®]Pw¨¾3¾jA¥N ćCú1Öú…c̀ơna×&uÓëQë¶‘4¼4Äù)¢oô‰Î|„cÂ5ɵæG¯ƒ8="ef¥BÏŒÇƯỏ]›ªÏÔ•Y^B4¿é½Hơ€{}n`A?‡Đ¬×\:̃¥ù‹’‡ú“‡Ïh¬Qt€º„×{º¶¡kŒ›–íOÚA™eA6i?e’/n† Ër̉éêhÇ 8+JrƒÑ¡.a5­lưVF¹é f{ơ0ºl‘XF÷»úr#ª(²ríæ”™zÎ&yÎ˾-Ö¨: LñÂÂô>³ Xû*{‚̣è`UÈl3“…¥9Ü™¯*ÔÍêP=¯Ï\Ç-ß0Úæé+‡Kư4ư»Úia±Ï(0ºûÀ>Ñ„eÔÄú *ë–N|«r­n•w 1 î |†‹Æl\²¦çqÊÔßú7»₫µ₫ʾ¿̣£dª¾ƒëѺ…,`Z) ˜|ø7û+T¤úŒ.ŸÑ~~Á¨Á½ˆ˜Ô`êxB̀—ưẴÉú¬*ë€Áh¡h±‚ÏŒ¾ z/0ºÔ`´*_xV7{0˜˜˜˜˜$t w_ä3Zdme–Ñ ÆÎøâjœÑä&ƒQ»ÈíFo:`:`:`:`:Pơu Wå0%bŒ"=Z5·iúʠцO‰ÏèÛ²€‰˜t“¬ª·iúªÚ̉ÆÈtÀtÀtÀt 6ë@n0Ễô½Ó¾„ôËèó-<ªet†Â¨Ä¿LâŒĐN¶€É|k€Ï`m¾Q[Û TLLj²TŒÚ¦Â³è·R`t±„v™OĐ{ƒQQQÓÓÓÓÓ*¬ùQö¦W˨nj«é ¤‰iz í4O¦é/í@Œ&¦éÍ2joÔ5ùÚÚfúm:`:`:P½u "`t‹ß›̃`´`ô˜cí@̉ùâ3º×`Ỗ†«đÛ°=@ª÷ÄÆÏÆÏtÀt :7í"–Q‘­ZϨÁhAA”“a}S,£3Å2:O¦è‘ùKÁèơdd¦¦¦¦¦¦UṚ£Ưd^aT‚̃ŒE0Êjúód;P¦é±ŒÊL ˨Áh>̃ܬ ³˜˜˜˜˜ä_rÑQĂVÓ{•ơXFe;PƒÑÊ€Q⌾ư¦›>oV Œ&|F Fíæ‘ÿ›‡ơ©ơ©é€é€é€é@>t )0:“8£Iíä·µĐN£Ur Œ•a7^ÓÓÓÓÓüê@^`ÔÇÅ2j0Z 8%¡^7˨A°ùC™˜˜˜˜T3ÈF'eT t@'ÙÉOÓ›e´R€´l­of5»0í­;¿oƯÖŸÖŸ¦¦¦UẈ£l*0Ê4}"èư£đưª|ĐûR-££vªº7!ÓÓÓÚ­y…Qö¦—L[}h'ƒÑBqhr¾x5ư|7gñ|¿L×Ơ·L…¾Ñưä'?q¿øÅ/̀"miÓÓÓÓÓ4:í́`•©ú~ozƒÑ‚‚¨úŒbáWÓW<Œ~ûÛßv·Ür‹ûƯï~çåá‡v?üá«Ư÷ưïß=đÀî̀3Ï̀ªî?ưéOƯoû[ẉÉ'Çæë̃½»Û¼ysVe ˜?₫x÷àƒºÓN;­ÔúƯxă®nƯº±Ço»í6wÅW¼m§œrïsêí«³Î:Ë·‰ß¹©QÿlûóG?ú‘{衇Ü#<âêÔ©“u₫lÎǵB}iS6ù̉¥åº¼ûî»ƯE]”×rÓ7—ă—]v™»óÎ;«M}si«å­ƯÖ?ÿ̉Ç?ÿ0j–Ñ‚ƒ¨Â¨_À4_âŒÊV XFç-[èvØ[!–Ñï|ç;¶̃ÿ}wøđa÷ñÇ»‰'ºN8¡Z=T>øÀƯwß}YƠûÜsÏu_|ñ…»ä’Kbóz 4å½±@ŒWYm^²d‰3fLlÛ¶lÙâzơê•U•·®ÈjĐ {ë­·ÜÏ₫ó”s£‹/¿ü²;räˆÿ}́رnåÊ•Y×1;pà€ûꫯÜèÑ£³ÎŸMO?ưt÷É'Ÿ¸»îº+ïçáz|å•Ẉ^n6íË4íw¿û]7tèP·víÚjQßLÛeé :M²ÓüÁ¨,b’ơXFÍg´p4¹€©Fç.(Ư½-Ûgôæ›oN±¤\pÁ̃êYÖÅlƯºƠµiÓÆa%ä¡úî»ïºnƯº%óamÄJsë­·:`",ï¼óÎóÇnºé¦äïX‹H«ÖFTX¸€'¬a¤å\ơ¥=LŸzê©)e^}ơƠ¾̀ơ«_¹ë¯¿̃1mN£==zÔuèĐÁ?ăŒ3’eRÎwÜá¿đ SÎ…5øÍ7ßtÏ=÷œOó³Ÿừ§_(ó†n(‘‡ă´QËÔ<üë{ÿư÷ûúVÔÍ́—¿ü¥7Æøk®qŒx.ú8˜9s¦·X…}Fư¶mÛæÆç]zé¥>/m¡Í?₫ñƯí·ß â×]wŸ+¯¼2ë¶aÁŸzꩺtâ‰'º×^{Í÷u1b„›4i’·übơFÂöñ¢cZ¶;ô‹v´aê¾]|ñÅî{ÎFÇë¸ăó:êéµ×^ëǘ₫¢Îè7¿…cÀ ×í¢L-‡q£î”I?3~ơêƠK©'/Gû÷ïwƒ ̣z{₫ùçûă\Cœă{ßûÿư┓‰qNƺ‡éé3ÊáXxí\~ù徯ĐiôG¯á蹨ïÛo¿íHŸI=,Mvxë/ë¯ê¢ù‡Q³ŒVÚ©aQh§™ÉiúyKÅ2êa´lŸQÀjơêƠåa³jƠ*÷Øc¥…Q ä¥—^J¦ă!>jÔ(ÿ?e«X±ơèÑ# Û§j(ƒ/ÀG]xĐ‘~̣äÉîơ×_w³fÍrkÖ¬ñ0èï¼óOcơăw>©éụ̀xˆ+< ³Ï?ÿÜ=ưôÓÉöè¹^}ơU·nƯºˆZºt©{ă7D9m₫đĂƯâÅ‹€A[,Xàû‹¾'ïŒ3’0¢7àœ‡®7@₫Ÿ3gÛ»w¯û́³Ï\Ë–-“}BĐgXØÀSÏÙ¬Y³ä±O?ưÔ 0ÀVhÓ́Ù³Ư±cÇ|_(ô3̣¨8‘:tÈå2.´GË%Mø´è€çZĐ¾}{Çx¨Å´ÿ₫nûöíë.cn+(¡SăÇ÷íbÜ.\˜=' ¶™ßׯ_ïu€OÆËiœ»@Xo`Ä¢«¿ïܹӿø 'ô=ưµoß>?Í›7÷}ŵCư€TG,ÂLëóÇØë€ï¸È¨>sÑÇè,mç\”Aÿ3& ß¼¸1~¿₫ơ¯ËÔ'Êm×®¯³ €®Ö‹cXÈ9F=Đ{êÇù¸́ÚµË mF×ûöí[âE‚~äH×—¹ê¼å7(3¨Ú:;ŒN”ĐNøŒªeÔ`´̉a”)z?MŸ!ŒbÁ&;́̃½ÛËÈ‘#“¯̉.` mÚ´ịaÜ`‘!PµiÓ&wÎ9ç¸'xÂØ3Ï<ăèZ±b…·½đ °&IÀ"V(ỄxPă'È´&Ø_|Ñ×8j°pñđ(yóPĂ_ÀI¹œ@á|&LđqÚ̀9xx¢Àº`­Ô§̃½{»;v$- ÔèâüäûÁ~àËă%óÑ®°ÿxpS/,‡X3€—4 ¾€2eSÇáǧäöûôé“*êN_̉G?₫¸/›>2‡\,jʱ“N:É硟t`¤îŒ /7Tï½÷^ÿ‚áÀ˜jÿ®ÀYx.=ḍâÑ¢E‹mÇↆ/@uÁ÷ßIôẽ¼y>/ăHß^uƠU^7̣)S¦¤”ËÿQ¥?°̀rĂÄ" Ø¡oe=à°²2ÆÀ¢¦h[µjåơ…̣–-[æû‘ë¨Ăº«×ú́b½$-ưÇ çÆ%†~¦­@"³œƒ₫PÊ¥ü/,׋ÖJô·47­o#‰̉A½˜`¼ĐA¦ƠÑs®E€½aœqßаÁƒû*®^´è+ 4œ!á}–ä!C†Äê₫˜;wN9†5›¾RØÁǘT@ĐE¾¸vD§êyqÀÏXö%Só@ú=Æxó’₫.Sưs¤üÄaam̉¤‰×€|Æ ia”4X…µL`uÚ´iÁ(®¨V¥¿p“Đc´ăÙgŸơÖK®u\yyF>ôk…|X_Iê/p(†}µHêË ˜ ŒbUö=: ¤ëï@7× ÿ¬ŒCëÖ­ƯÔ©SƯóÏ?ï-§!Œ̣B lE=ܬ\'Óê£9Ăè$±Œv5­ ÎZFç‰e´ÈgT,Se]”L›>Xex¨ñ]a­´|À(ĂĂ“4ø¢ñ Å_ÿñĂäaÏw¦$yĐb±(€AƒcÀçđ1Å‚¦o¬^ µXexĐñ@FIC™øÜ£Xö8>¾X…åÜá/¬^:…‹%ˆ‡°>èyđskeØV¢ơÂR…«uQåaÎÔ©úäEû àZF™Z¥^ØĂÄÿÔ[§¼ùŸïaÚ|̃TFl„¨•KbXŸđüŒ3°₫Œ̉ ™ècÂËcŒu:\¢~¸qmäeëeÆ KLñ̉,kê+ªù r°:̉>‘L‰—ô9¾빺›h™,đ¥ÿaX₫ÊEueÁ̉Îư&z§Öh,˜èHt•ë@_±p’–kSaTû>àZÓ±dæëC¯K­ŸNÓcYå7""0^é,£;vô}¬‘2ȯSûè/lê‡ dë"2`”>f§OŸî˜µ £¸ ¶<₫Ăù¼¬¬ê+6V5{¬r…ÑY£ƒFÊT=̉«u+YÀ´ÚâŒNKÂè\Ñù ŸÑ40Ú¸q㔩D¬(чYôF  ˜x óÅ_5}€̣€ç,PLA€€ ùxHñ $ßܹsưĂEä…ÿ9¶hÑ"÷ơ×_{ØàŒˆï@"ÖR,•,̉à øñÆ€sª_Đ…N!’)Ö_…m`”‡"eN´|Çrơä“Oz7ÚĂÿZqÚ`ó ƠĐPÀ>‚€$V]@DĐœë1Ó¨‡;/<ÀµŸù51́w\€ˆ\oÊÔ‡>Qkcđi](˜S bÔ‹ẹtá ®LoܸÑSÅŒ ư…™¶¾́Ù³§÷ç ư?z¬yÑđ`Œ'àç+Ÿ+–Íhx-,nø‚j?‘öñ?S÷Ô“₫EÇ©«Ne¾üÆùh;×…Öhé€+^"(#œ~§ltE]Lø}Æm× ô€éÿ?₫ñ¾8†E^”ụ́2ÅKçIJ«ÇĐ ®t]}FƠÍ„6Ê×ëưă%D‡ỢJz@ë4m¦?x) awÜfBÿMÚĂơˆ>`ƯDopÅ*yÑă:ÆÇ–sÑ'¸AĐvÆ€{B§N|^s~̣¡oô!÷…8kw®úmùk6´ØøÖ̀ñ5-45VĐùatºLÑÏus Œ.™çvïÛ-0đÁ̀§đ@á!t0ÊĂ-´PñÁŸ*iÂƠù<ˆ±^q ËJ¸"˜iD¦R?àè†xèL-2øjrL-X“@¦"±Ü©åˆôÀ…ú"̣;ÖH}SO °vƠR°ÆX…¨? Ëyµ€ë)Çi–?ú+0àŃ—úRŸp5:V`đ§Å±Ø…Sß|ú-bYZñÊ3¦ô}¢ ÉX₫¡ß%–+|C±`F§ëy© é/`œ:đm´èKÊ C0QLÓ`€—®×úÆøE†>£À!yÂéqM@r,¦Ñ>À?1t‡*©Zåc^ƒ.]º$Ÿb@ ÆGµ>ø@ónb¥j£ç%MÛ¶mS~ÇjH>  k2/o/zBz^œ€vÎÎFàV‚₫q.@ å⥇zéB!¬öÔWƯ^4Î(úÊø„:†UåÓa¡eßhúT]-´}\ŸX–Ñs >|aàåˆëŸcøDë"4¾¦¼¨áï©úíRôJ¯™̣è°åÉïưÜúÓú³²u o0*ÏÎ"f­ ØLWlF_wÓæLă¥"aÅåAËCU%N™O—vL§ø¢ÇuA7„‡,åNä ?5/¿‘/\qÎẉ)ˆh9ÑPSÚ†0/i´₫ç¼Ñ|z<̀í—¸siû´îä ­D|öM4Myoa_†ç®f§´;Îz¥mÔcê3 Äë8EëGù´;Ú¤‹¿©«Dœ:@YÜ ühß‘&ZuŒơ Ç.oà]Á.¯¬>Ôcjm¤Úgz]ÄƠOóé¹ÈC̃¨₫Æ¥¾Q~ܘj_„×E8qzẺÚ×—Ôáüú©çÅÊŒ¿m>"C”÷°|_¦UK FÓQ^59„ѹ…ƒQ»˜«ÖÅ\™ăƠEcÄ•̀W=˜6.m'%…Sâù:giå`ư cèVôùjrù¸X\Q»wÔd·¶e¯ß¹Àè(™}™%³ṼgT-£âĂn>£•°)0º(a»¸â¦éíbË₫b«É}â'Ư©¦´?Wü”kJ{¬vư˜T%È ŒÛ0:H¤·Àè6[ÀTxMÀèQ í4ƠÍ^4ÛÍ^(Û‚.+>£»*Äg´*)±ƠÅnª¦¦¦¦¦ƠW‚ 1=IDAT F ÏrƆL…QR`t—Á¨Y³̣¼xÍnøƠ÷†ocgcg:`:PuÀ`´Bаđ…&`ô57uỊ̂2wñƒQ1ƒqÓÓÓÓÓ*­£…çÆ 9#0zTat¡À¨ÈÜų FíT¥o@Uñ Ưêd–#ÓÓÓÂê@>aÔ‡v²LÂi }RatXFÎô2w‰Á¨ƯP {C±₫¶₫6000ÈVrÑ‘²~¦́œ7¨h“ÁhZd¬¸FÉ4ưœÉn–€è¬…²Gư’YbƯ) ˜®5ë˜YHMLLLLLª¤äF[[h§CÎ̉KN…Ñ ¿QƒQ{CÍö Ở›Î˜˜˜˜Rr…Ñ%,££•Á¢ßzRB;a2g’ÑY F y!Ù¹́Æm:`:`:`:`:P>ÈŒ2=? S§Äv ­ F+ F_;v$£¢£å» ́Fbưf:`:`:`:`:PX0­t̀ÿIS,£F§Ë4ưL›¦7ÿ *éd7úẪè­¿­¿MLª²äFÅ*Ú¿c'oíÙ²¥ùŒæ5Ó—˜„ÑÙXF§Œ„„˜˜˜˜T ÈŒvt:vt=F·Øv éá1ß) ˜¸©£³‹`t¶·Œî°Ơôv3ª7£ªüÖnu3«’é€é€é@Åé@®0êC;‰E팶há¶®ZåôQöW¨đ0ú¦Àè,`t†›)b0ZqƯ”¬oMLLLḶ£ù„Q€´{‹ænóÊ•£…‚P=Ï“ 0:E`4¹€Iâb½ÖâŒeЬæ¦¦¦¦UTÊ‚Ñù—q*ưë_“ßÿơ_ÿƠư×ư—K½÷–Ñ^º7oa0Zhå|ÀèkÇ^èfÍŸQvaÚ¹w»Áh½ǿ:?oÔÖÖ¦¦¦Ơ[r†ÑñăƯ ±ˆè 0*b–ÑÊ Q…Ñ7KÂ讽få&ơ«_ưÊ=₫øăî'?ùI|3¾÷̃{ƯUW]U#ÛVè‡̀Í7ß́n¼ñFëK{‰300(äF›Û4}¥à¨·Œ£3'º™b9XFg¸|Àèí·ßî¦OŸî¦L™âêÔ©“—‹óùçŸwÍEY ×]w{ë­·Ü9眓ñ9¿ó︛nºÉM:ƠM<Ù=Úxâ‰çÏgÛî¸ăׯ_?÷Ưï~7öüëׯw%Đo>ÏYÊb n¹å–äŒ5*í Eƒ ÜxyK íÈ´iÓ\Ÿ>}Ü·¿ưíŒú‡ñ&yÛß®];÷ÔSO•;yÏK>ô£Gnæ̀™®‹́ÓœiYèơĐ¡C}¾¦M›¦ä;å”Sư>kÖ,׸qăŒËüơ¯í&Mä˼ÿ₫û“ù~üă»a²—4êË "ăœI]yé¢<ʽụ̈ËṢ<̣È#₫cw₫ùçgT̃ 7ÜàÛ5hĐ ·iÓÆç£ÍC† qăÆó¿0Àp ₫Ø\àucä3fŒ?ï•W^™öœ”1pà@Ÿ¾uëÖ)éO>ùdß/{ùå—SưèG?r´{ÀqÇ—rŒ2•EŒ{&}hiª·±¦_¾`´¿XE‘î͹Í+V˜Ïh¡‰4F§%`T1y½®ü{Ósøà7gηsçN·}ûvwá…¦- øâÅ‹ư}º̣"A©uä/áÇózD£|ç₫E_SΛnf‚6®‡#eÑÏÔ·[·nîûßÿ¾‡_ÎÅ5α?₫ØĂê~đ_î¿´¶‘^uˆç₫ôÙgŸ¹uëÖ¥mo¶:eé \ ¥QÅGôÿ₫ßÿëôïÿư¿ÿçÿÿÏÿüO÷oÿöõo4é3:t˜›!/¡YIo0ZhüL=ŸÂèä™<ˆæ F—,Yâ~ÿûß»óÎ;Ïüñ̃2Â4&V¦öíÛ§€é‹/¾è§ÂUy~øaoMÄÂpúé§'禽cÇ·iÓ&7bÄ÷Ê+¯¤ÜDŸ~úiÿ0ïÚµ«?'呟7rÄIùÖ[oơ³L¬]<¨8OQR¬Z¿k®¹Æ[Bø;vlƠ‡›üÙgŸí­©œ3zAªơ|à’Ç{́1oØ9'–r¿Q£FîÉ'ŸtôËsÏ=çî¾û`Àê1xđ`_f½zơ’ẹ âÇĂ—̣è‡₫đ‡₫8uä·¾}ûúq‰Ö“ºQeSgÿô§?ơÁºuëúº‘—ß2¹éÜyç̃ĘRFÔ¢Es>t#“̣HĂ3ÖèJhQ¤l,\€LØéʥߧ¸tÏ>û¬·"ƯsÏ=~|–´XS¬` NéÎw°£¿9Ö½{÷”Ù+7Ö-,ÚXnsu!á¡}è3çF¿ụ̈Ëäÿ¥µ…<€–L̉0cdaÁäÚ¤ÿÏ:ë,Œ:™?ÿùÏËßúơëûºüâ¿đéº}ûöùïÖ믿î˜q¹ổK=4g2cuơ‰'đeP7yäÈ‘₫® Æ’ïœóĐ¡C~3? ûđáẶ̃¨éY ñâ‹/ö¿Ñ‘>Ơ4@¶nƯ£ÜÿĐe–—†LÚki 0«¢„0 d₫Ó?ư“ŸEàYÂ3 #ĂøñÜ̉¥KƯßÿưß»ÿøÿ(F%YFe”+ă¯ŒÎËe”‡7@¬@‘*1 đꫯ&§µø·~̃ä¡Á›>…̣µz£ÅÁÍŸ·ü•zAÜ<¤˜"Ä"Á=1’¼üå@ÄRÀùă,z¡ñp¥₫Ǘy èq,-ß|ó·²PG6ÍÄ´OÛ8öÆoø̃®]»|~à` °F`Åàó½÷̃sLR.0Ƀ+– ,zÀǰ̉í̃½ÛÿN™XĐpà0 “† ֤믿̃Ă¢Â¹© ơ´tʇ%uøüóÏS¦éyÀ]Ô-¬+u§? سgÏöưḶPLw“nIË4)Ö à ¥>={öôăÍØ­Y³ÆC2V°²Êjc€Á*‡0¼”DÇ€± _(âÊ”ÑE\J³SO=5Yú+ØÑ£GƯ*‰A‡₫1ƠJ9ÔkăÇlº¾(í8í.9Î)@ñ?zÄËyIäƠ«W/yVLơ×–Q€µØ2:´Ø2Ú^¦é F+CçLÂè,±Œ ˆÎ!ÄSb5}ÂRR^ᦠhđàV˜x€…₫e¬aüe‹đ¥¿ă„¯i±ÚD§R±”pÆ*ˆƠ Ë*àÀĂ<F9ÿ}÷Ư—Ñ k=Ρu`j,|ˆbù`´}Xûâ,L“S7-˜¥̃üχúz…7¯(ŒI:µb °DQé5?Ó{ôh;/IXèuú½´2¹†±Đ¡ï¼lb¹DƠ2nñ²Ä‹ºN™aŸb‰ gô<è/\ÿá‹zJ™èzÇ5¦VSÍ °…®=aƯ¹àzƒè" µŒ’v`eÎÔ2q­üîw¿KÑĂPïĐï|XFyÑ₫Đ̣ËơÍøSwt½@? F+~r½Æ,~Ǧ´Lÿûÿoo°À0ơŸÿߺØ8£rÏÇg”N£•Ă É³6”ƠôG̃8́&͘àATatG–Q@H®°l₫å/IN;¦œ‘ˆk/ŒúbfÆ@-£Œ‡ºØ ß@R:÷ @”qĂÊ\ÖJy}ÌdVY,µ´ótú̉ŒrOá:ƒ^fje,¸·„¾ß:M¯ {Â'Ÿ|’Ó4=÷0œqúÈríà†Ä‹m /z!›e4¿đ“îÚ¶ă…íï²VÓÿÿñ?¼(ÖĐ8!÷Øé10ºÉVÓL±Œ&`t¼€èT/3eú\aË##|ơ˜Zâí]Cª3Ü0Ơ7’V1.b,£!ŒNWƯ“»Ï(–¬I  «!Äô%]ƯJ 8cê1a>ÆÀÇ£₫bXj€6Hº¨   ă—É‚ ¦û°6¥»à™̉£^øjR®Z±„jhÊB±¦èJađ?¦è9¨~‡XĐB¿Uà##PóbÙ`QN,‚ô™N3r.ÚÇâÔ ¤Ñ¼@ÖÎG:ơ›ä!%ߨ¥€ẉpLû@Är‡_,åŒE8¥×§¤ăá.P?\0ëP'Χ̉ Çi àJ¾hK`1(m1K\ùXK›î¦K‹ hĐO,>âœè_:˜Öó£SÔŸlQ¢°Ô膮¦g Ô⨾ș,ÈK×§øR—lÀ–Ù@Œ|Ñ₫¡_è… x´¼°êK¨₫F›Ñ ̣¡+è(¾¥Q^sŸ{‚Z›Ăö̉?\ĂX›£:;uä|ÑûMi}H’ư£L½vpúçw®«(r=ѾĐơ§¬±áEŸàÓL¹Ö­ÑE€Ôà–Å,Côúơ/œI§#vñ̀ÔOË.đÂ\àÖÏÖϦ¦¦¦U]F±ê´́¢ưªâ`t†XHwíƯé^zùE÷›ºsñÚz9H]É›*÷̃w6|¨2t°„^æn¿ă6Wç7WgtzR—̉$ZÏk¯«'»H]# 1®u××G®sơo¸^ä:ùí:wü~¿–ö]#u,’zơêJÈœ¥îodQJùF~#ÇË+¾lÎU×Ơ•P?ơê]#}t½H}WïºÜ5×ß讹î&ù,¾'…c’F̉_síủ׺z2IÈ üJ¢?ë&¥¯k¢¾áï©ß}ê&¤nœ•¡eÅ~ú|R®H½lÈ&}Ó^“ëù̉êøodlåѱ¤Èï×ɵúyÍoܵRféRœGọ́y­”'Åç“{÷¡î;ERO>“RG¾§‘º̣²Ô+\-ùDê^}¥«{Ơ•î7"u¯º¢¤\y¹«ëE•"¿‘ßË–ËåxªÔ‘ÿr…ÿôù}¨ÓỞ.¹§Ô‘±ÿ ×€^ƒr_¨+÷‡‘c¿Aäú’ô>/í’r’uºBÊ=oÚú§¶Ï×YܬêH™Q¹Zܱ2‘«$)£4¹Z•Ê/ú=qn­KäS\+êÉoäó7WJ\uµˆ~Êwé+~Kô™ôwDüqŸ7ø?<÷]ÓG?KÍWGΕ˜ó—(—öD¥¨®ÉöÇ¥ê¤Hq?ƠưKï;M¤Ñ~ úư.q+.`#Å­oT)¢Çøô":Z>ûˆ›ÍY‡Ñ·m;/XF»5U˨Áh¡8ÔŸçɆO¤ZFçLqÓfMr+×. Ưî¶ïÚêv́̃&Âgªp,½l‘4[ܶ@6oÛè–¯Z"²Ô-“ÏM[7¸í;%Í"ñß7»m;EøÙ*²Eeû&·¥„lt”‹lÙ*Ç·îØäË ̃»Ä̉K{ö́ÛéöîßévËv§»h—œk;emÙà6oZ'áSÖɪ5nă†bÙ°~µÿƒ₫¾q­ÛH:‘ ‹dĂZYаF¡ºhµÈ*·nÍJ·VdÍêYîV¯*’ƠÁwưÍ.ËHV­\. `H/ç‘E@kÖ­wk×orë6mwë·́v¶îs·twr›vv›wIÊ–]¯º-»»­;J_í“>Ư#}·ĂmÙºMd‹_x¶e‹ô{Rô·¢Ỏ”",øJ±Å§/í÷dÙ¾%e³üÊ& ÷³‘8ÈYGđc°8È‹ôÏzY¤+ëå÷"Ù ŸiEÊÙ€D̉n”ß6Éo±Â±PJK—î÷uk¥•5̣]ôu­è¨Èz‰«·aíjù\UB6ÈoÈúµéd¥¤Iz¼nÍ É—ơEâÿ_«²̉m\'"éưg(ü&’L»f¹”ˆ\D‡7ˆÎ«¬—ïë’²T¾²R¾'e‰[·BD₫_/²ae¢ŒRæ&¹î6IƯ7ɹ7Ëơ¸e}B¶nXíe›\¯Èv¹·ËµèoÛä:̃&×ưÖ2DËÛBÙéDú{‹Ôc‹ô—iÿf©ăfi÷&©÷FDÚ±qùâˆ,’ÿ‹d™|"úÑçùÜ ¿§“ơK¹ơK&e|_'¿­Y·t±[·Lúu…ô»,[·Rî_«ä^¶zÈzdƒÜÏ6&d•|_%÷•Rn¹Üw–®t«—.s«dƠJY@¹rÁ<·bî‘ÙnÅœY"3Ự@üos9>o¶[9oNRV̀—ï"|.GäXH¹Ëç̀vË’2Ë-•²— ³‹dÖ ·¸„̀t‹åxH=§Èlù?!KâD'.•ß‘e;”åÔ‹Ewˆ,(]>o¾[±Y ²Đ­\$}#²jñ‘¥nƠd‰[-Ÿ«—Èư>"‰ăE’’'ø=L“’^̉p¨”–^νª„„ç/¥<_¯„¬TY$ß“’hó •…‹|_Ë·\ú'*‰>+’ùrœ₫ Eûỹ\·hö,7eô7U|¦§ ß§!c‘±^¦G„ă€è4Ỷ§u›Œèß̀Â₫ ƠOøLøŒÊ`Í™œ”i³&º¦3YĐä…ïÅ2]¾ë´¾~Θ;Ù!Ó™6w’C¦"seÚlù.çđ2{¢óÿÏ”ïE2EBMM‘-J§H0~„Ơ₫*§ó>®î§ă&LMÈD/²+‘´iỀñnÚœ‰n¦¸ ̀–v̀[8Ă-X,ûC/œîfă+à=²&vÆ wăÆ“… CÜèQƒ“2jä YÈ„ v#GɱṆ̃V5f˜—Q̣9rˆ,¶,2È 6À ̉ß ÜÏ Ô× ØÇË ½½ ĐË ́ŸẠ=UzÊñbĐ¿‡‹ÊÀ~ƯƯÀ~²H¢Ÿ,>ê×K„2 >ᆌç†æFLœëFNZäFM]æFO_åÆ̀XíÆÍXăÆÏZçÆÏ\ë&̀Zë&ÎZí&Í\&}¹ØM6ßM2Súb›8i¢„×™ 2^¾‹đß™4e’¤/E&Or“§ÈïI‘ṭ[±L”ï*ÑcEÿ˶è9Ăÿ'H]&h¾HÆÉJ́q²(n¬ø‘Ïh¹ÙŒ’E+£F–ñåĂŒd+OYP—a±2R~){dTT䨍´2Ô‘|c$]:+iÆJ`æ8'¿«Œ•̣Æ%e¨'3 âǼeôĐA^FàeÄà₫e‹è(i†‹ú´Cä3áE߇êăTFÈwdø ̃^F –ÿEFéëeÔĐ~n”|Z,ü?jˆ¤Ü;!ƒzËÀ^n2 ‡Ñ¿gR†‹̃ëß=Fº¹aư2´oW‘.nhŸ.nXŸ®"ƯÜđ¾Ưܹ>FÉ54ZÊ#u7¸¯›0¼¿›8à&(2ÈM‘k|êè!n"×ütùä/r#S"2Yî*“¤ d¢\ó¡LJù  p‡ơs¥o&JŸL~?Pê'í+×ó©{Bºº1̉TéâÆô—Ṇ̃ûè̃½ŒBzu „ÿ‹edÏN.)=:¹=»ˆtu#zuw#úô”₫“q́?À  ‹Ç“1î† ’í‰tC”ûÙ(/ƒŒpƒûsƒúÊÂÉ^ÜÀî}\ÿ.Ư\¶ nׯơiÓ̉ơnƠÜơnñëƯ¼I‘¼\ü½…üÖ¢©ëƯR·B%¥OkɔӋ²$M/¤e3×SÊEº7GJ ̣&² º‰ẹ̈ÊË iú’ë\$ä3!/»Nr éüJ“„4k‘W\çæÍ\—@ºÊ÷¤È¹ị̂‰´â¥Es©G ×S"]ôB$D̉[6Pè- {KH¼>bmë+»ûôëØÉơëÔÙơïÜƠ è̉Ư è*̉Mîå]å^J¹çG¤¿¤Oˆôq̣»₫Vô)åùcăḌu!¦K–ÓC̣!=Ñß>;˧—¢²;ɧ—®"R®H?•]¤­HW‘Î^úJÛ½tèèúˆ&}̉;)í仈€`ª´ơư×» "})̉KúƠKQ?÷jƯÊơDZư.ß9Nÿ÷i#̉V Ṣơ“rú#r+ Ov[ê'Ÿ}ä¸ZFûʹº7kî¶HtÇöñƒí¯P=đØă¸ƒGö•€Ñé³*E€Ä¨L½$@R¡r€%’„Lÿÿ7YEàr²Àádÿ)"€‰™₫sz(@¦Âæ87A€s‚&2~ʘbđ7y”ÈH7n’|ªÈoăE&LíÛ6UÎ7CÀs–èY ˜Î-@-Đ;UÊœ8Ạ¢£.å!5R *#äûpy &ŸÀ¦ÈI3BT#äá4\ t˜&:ÔC¨¨ïÆO(Ơñª&M(Ö $à1ơ· ’I–Ăÿ>OêoáñäwÎ/B=’"đ €a#oĂ@èH™º!o½@(† ø :LÆh¨È@ËwCD\GáC‡$dXBFÈ÷ô":!yGH9ÈHḌ!£J=6zÓF©2F₫W-uăe°#ç#ЉŒ:Đ2PÊàF:|`?7l`_/CåEeX(E¿ûặ²4Dôt¨¼,%Etw(¢¿É ÓP‘!EŸĂä"9l`O‘^-p*§ˆÂç9p—´^$ŸÊ0…NÑÿa¢ï* Đ8»»!̣Y,]Ư5d°@Øà̃Ü`-•!̣}ˆü>Ḷ —2LÇJ}Æ 4/Ạ̀‚ÑO^JúË=nàP×á¢Ă>ùø4`¤Èyæ ˆè%‘1ºK ™¾}Ú·s½ÚdcS׳ÙËẸ’ëùJ ú»€jOIŸVÀÔ ß=lR†ˆÀg´eSÀWÚ]@²Û+ˆ€¨PL´‰€g““̉QÜÍ:Êÿ^^~Éu”4%mB¸’¿S ¥̀ÎH3S‘.*²°¥³HWùŸ]z¼˜§ƯH‘-‘–"@Rk×€ ê% Ơ§€˜YŸNj¤ưº r÷€Y,êCé+ÿ÷•< éâúJ₫ÓKÑï†}ụ̂Éñ N₫–̀G~ÊN#R§¾^(·è<œK S¥O‡.ˆè—N®·ÀgïöH/½@{ ö0́)à×Cú')b́᥵ß*›=¥Oé×¾Ÿéc¾·héºÓï¨üÖS>‘^­/}Sù(ơ"çNư§ÔI¨ŒSÑ båäÁ F ¢œç¦z•p¾[²r¾·D*„&>K‚¨·`æ F‹ 4´z†@êatj”Êw…Q̉q@©Àèø)LEđ9nRJÇOÖßF{KédƯéÇ3ÅÚ;kî47GübgË÷b‰&eO&XFÇbơĐôÖP€T:À¨y()Œ  X D£0:X̣̃£€i<ŒƒhHca4¨‰2F ŒW&Œ±R`t¥Àè 7vÚ²"/}ŒNMÀ¨ÀƯ¸qúFG *ŒÊË@$Ë„Q,ªÂh¤Ü²`´Q€tÔ˜FC MiÅè‡̉ `t¤Àe:ơP*–Đˆ–„Q tÔbk(ÖÎb°ЧHCVCå{F‡‰#)¢0:T¬±0Z¤IKèạ̀À¨ÀQœ& 4!CRSa´D=œÁèĐ̃ K齑}£¥̃c¥]XI0Úσ¨‡Q¹¶'!r­—FJă?Sat|£r#×oFÅY&ŒY7K…ш¦…ÑPíä†÷R•—„₫b—Ť#Ê}M¬¡Ă‹ET>Q‘#e†'a$0Ut€XEQ,kÅ0…Tå³ ơđÀ¨B©ĐFÖĐ’¶G)0ê-¢í$0Z §ÅVR`´“Àh¢‰ï¥Ăh£E êa´¹@¨ˆÀPwàHÈC@”„Ѷ (SíSŒ¦€¨$J€¢BiäÓChi0ÓbÓ(Ç“0ZT¾Q•f £BOù́^ô½{Y0êa3œ!Œb•öÿÓ÷!ŒY«=Œ„0ê­¡XLÛ%€´o¼#{ör“Çsu.8Ó`´0z×µg¸—¼âöØí–¬Xà§¼±&ê”wê§@‰?UÀÍKÑÿÀ`DD‰"c§ŒJˆX/ădŒä˜I#2QdBBF/’ ĂƯh‘Q"#ÇËô©ÈˆqCƯđ±Cưçˆqró+Ö,dŒă>2B¦ßFI1†‰o„›$`:EÚ8E¦æ§LÁ**çK:±Œ +Æy` ëÅ ±^0…î§Íåû@±ê ï°x2í.·ˆü?@xưÄÓW,}䡨G½åÁÑ[¦Âzvïèz Ư¥§|ï̃­ƒë̃¥½ë̃5t?–P:ËÿẺ½‹”ѵ“Ä;́êºËEÔ«ï@×[}‡ŒwưFLsFÍvGÏsÇ-tƒÆ/vƒ',vC&.qCù>lÂB7bÂ\éĂ™̉_SƯ°Q㸋¬‰2M<\¦‘2EŒ°àlÄ(™êY,#G+d‘Œ–ÏP$mêÿr<È–ƒ3üx\:̉Ép,"Ăd¨X?½ˆcúqPĹU‰ß9PÜÈCv€L?xư%¨J?â‚öí“”₫̣½¿bĐ¯¯X´KÊ@ù-UD$o±ˆôkÓ@‰?:HÎ3X̣‹ü&çQÜ¿"ÿ‘4Ié/߆zhL éz‰X(ûörƒ½ôô2°Lư!½åÅF¬^H?±€ơ“)Ù₫ˆ|÷ŸˆLéö é×S¦Óäÿ~̣¿ÿôßå7‘₫*¢ÏưEŸS¤WG9̃É  å©HŸ„ ’ßTr\̉zé!Ód"ưÅB׿{û„t D®‡₫é×U,^Ä¢Ñ%!}:Ët0̉I6"}‹¾óÙ·“UZ¹Ạ́»—-̉AyiáÊ'2 Li!ÇỦvlåÈ}d`×2Í̃Å ’˜Ăƒ{‹»OŸ₫2~³¸ßoứßgˆ¼øô"÷µÁ®O¹Çt“¸§]ú¸{¸îí:»n­Û».b¡Â¢Øéå\ÇŸuÚux®‘ëˆ<ÛÈuå¹§äØÓ®ăọ́Â3 ‘|Ạ̊œ|OH•uí%]ûçE{Ƶ{¶±—¶Ï<íÚxyʵnŒ4r­§‘ß[©HÚV"­Ÿí¥U ­%®³Jù̃F69Qi+ßÛJ̀a/Ï?çÚ½đ¼Ôç×^6hÿ̉‹®ƒlÚâE,°HÇ—n›HŸÈ¢˜Îbqë̉¢•ë̉ªë"ĐƠU,ƒƯÚȽ\¤{‘èÿƯZËït•ïI‘´]‘äomå»H+)»E -å»—Ö’‘ïI)ÊK₫đ­¤üRẺ¶ EÚ#åwiÑÚKçæ­Dô¡Y ×IÚíå•f"¯ˆ%Z¤iS±T7uí¥ÚK åyI₫é"Eư*ưÜ‘>WéXô›~/úŸß‘Î2H9OWÙ‰­«œ» "çï*ăB('K7 ºFü]_|áE÷ë_ømÈí¯=pÓoÎq/Ëà̀[8ÏOÙwôđуîƠˆ>z@~—C¯péäàkûƯAI—øŒÈù_å°|äÀá}ÎË«ûÜ₫Ă{rh¯Û‡L|î?´G>wËÿ¡́qûå”<‡$ÿ«r₫#̉®×içÑ£‡Ü«r̃C÷¸û%­Dس{»„ÚV$²øI9íÚ)Ÿ²`k§|î”c»"²S̉́ؾÙmß&‹¦dƠ6Y”µMEmÛ²̃mÙ/›7­w›e”Y Uº¬•4¥‰”±I_m–EX²đhëöƯ²Xl¿Û¾ç°Û±ÿ¨ÛqàM·óÀ1·ëà;n×áwẼs»¿ïöÈ'²÷đ;nßá·D̃t{¾&‹»»½ûöû-÷íÛ+[µJîÛ#¿Iÿî—¾–ßöí—c"l‰êå@ Óh2?凢çÚ'ùBÙ+éöJ]½È¶²*{äûnÙ‡wvI±;wÉîô;j±{URdoơÛe![TvÈo";wlÏL$ÿΈ́’mo“"çÙ%²Û‹èV‘́’ÏPöÈùRd§ü/²7E¶I•­̣}«”§"ººmsRvlÙäRe£üư¾U¾#₫·¢ïú[Êç9^$›ƒï[×K₫ nç¶„́Ư/ù_ị́¿¯w;%­¹&r]́Ø,Û\FE®…%d­ü†$ùÅFIa1R‘l”O‘í,L¡œ"»ä\»¥₫{¤.ûdÁ"²_Dî—ä̃/ÂçA¹® Eÿ—ơI/̉ÿÈÙ/‹2½È½a?ç•₫Ù'uØ+íß#í̃#uÛ-í@vIe•|WIü¾[Eaí‘̣[©" Êv"ë‘¢tR̃N¹÷́Ú¼Ñí̃*:#÷Ư²€q÷ö¢“rỨØ#²W¾ï•ëCdÛ¹¿ÉưeË.·mó·u£,t\/‹×Êưgµ, ?»²cÖzY µ~‰,”Z´À­—Y·ợ\))̣û"‘Å’!}Èb«%QI¤Y‡,Y´Đ­]¸ÀËY0´Ú˼Ñc ÜjI/ å÷„¬)Md¬5‹eá—,ÖZ»D~É"¤uK²^vó"‹Á"ư!}²AâVn\!‹éVÊbXúJd“,8Ư¼Fîëq²Z~dÓYøèE-ªÈñM^¤¬¨Èâ³M)²Z₫‘Í“'Y–[Ögjù9—´Í·o…,–”6'D:Đ¡¬“ă~áœôYT’}©}*‹¯ÖK_GeŒƒÆ!æøùm£”±IεIΟ*²ÈQÆf³èîIƒEô…ç_p—ñ ÑBBhx®[êœâê]u±{äñÇ\ĂFOº'Ÿ|¢j‹D @²á÷hƯ“Ç”ưÀE¤}¼4L ¿S^CŸ¶ABH;ó<á?‹Óăú{˜æ Ù¹‰Ư›Hz䉗̣›—'DÿÏö“sÏ×áɆ^løT‘<-ŸẺH>£â¥}²‘|—¼ä—-Ÿ~L´«̣¥Ô¡Ü¢ă!ŸŒMÆR4æÅcœĐ’M™9¦}ṚÇI©m ë[×ßbÆøIù­XƯ¯ƒÈ÷†’GE¯>ÆHx¼̀ïÑ6Ç_ÓÈơô$"×Q¶â¯SÙ ÍK̀5[¾ß“²Dä¾Z,º‹È¶» ă3‘Ød-H"yL>-ĂŸSÎ/ơJmÖkC®÷ˆÜTïOȽÅKÑïèLQK̃Ǥ ߦ¢vùsuˆưAÛăú'̉KÙ±"»ù=ÄT~ÏQ¤nK{‘D»ÓK¢Ÿä¾/}“PFZ)«>™äÏ4Múv‡}£}æû¿¨ÿ2₫|Tú;×q‹ä§nÿîawÙçˆEô‡¢•¢v^ëëëëëëëëëëëëëëëëëë*Ôÿ?ÉÎâ^@’IEND®B`‚rpyc-3.4.4/docs/api.rst000066400000000000000000000050061314203541000147240ustar00rootroot00000000000000.. _api-ref: API Reference ============= Serialization ------------- .. toctree:: :maxdepth: 1 :hidden: api/core_brine * :ref:`api-brine` - A simple and fast serialization format for immutable data (numbers, string, tuples, etc.). Brine is the "over-the-wire" encoding format of RPyC. * :ref:`api-vinegar` - A configurable serializer for exceptions. Vinegar extracts the exception's details and stores them in a brine-friendly format. IO Layer -------- .. toctree:: :maxdepth: 1 :hidden: api/core_stream * :ref:`api-stream` - The stream layer (byte-oriented, platform-agnostic streams) * :ref:`api-channel` - The channel layer (framing and compression) Protocol -------- .. toctree:: :maxdepth: 1 :hidden: api/core_netref api/core_protocol api/core_service * :ref:`api-protocol` - The RPyC protocol (:class:`Connection ` class) * :ref:`api-service` - The RPyC service model * :ref:`api-netref` - Implementation of transparent object proxies (netrefs) * :ref:`api-async` - Asynchronous object proxies (netrefs) Server-Side ----------- .. toctree:: :maxdepth: 1 :hidden: api/utils_server api/utils_authenticators api/utils_registry * :ref:`api-server` - The core implementation of RPyC servers; includes the implementation of the forking and threaded servers. * :ref:`api-registry` - Implementation of the Service Registry; the registry is a bonjour-like discovery agent, with which RPyC servers register themselves, and allows clients to locate different servers by name. * :ref:`api-authenticators` - Implementation of two common authenticators, for SSL and TLSlite. Client-Side ----------- .. toctree:: :maxdepth: 1 :hidden: api/utils_factory api/utils_classic * :ref:`api-factory` - general-purpose connection factories (over pipes, sockets, SSL, SSH, TLSlite, etc.) * :ref:`api-classic` - *Classic-mode* factories and utilities * :ref:`api-helpers` - Various helpers (``timed``, ``async``, ``buffiter``, ``BgServingThread``, etc.) Misc ---- .. toctree:: :maxdepth: 1 :hidden: api/utils_splitbrain api/utils_zerodeploy * :ref:`api-zerodeploy` - Deploy short-living RPyC servers on remote machines with ease - all you'll need is SSH access and a Python interpreter installed on the host * :ref:`api-splitbrain` - Run code on the local machine, but have it operating on a remote one! The splitbrain context redirects all OS-level operations to the server, while "pure computation" remains on your local machine rpyc-3.4.4/docs/api/000077500000000000000000000000001314203541000141715ustar00rootroot00000000000000rpyc-3.4.4/docs/api/core_brine.rst000066400000000000000000000002351314203541000170320ustar00rootroot00000000000000.. _api-brine: Brine ===== .. automodule:: rpyc.core.brine :members: .. _api-vinegar: Vinegar ======= .. automodule:: rpyc.core.vinegar :members: rpyc-3.4.4/docs/api/core_netref.rst000066400000000000000000000002321314203541000172130ustar00rootroot00000000000000.. _api-netref: Netref ====== .. automodule:: rpyc.core.netref :members: .. _api-async: Async ===== .. automodule:: rpyc.core.async :members: rpyc-3.4.4/docs/api/core_protocol.rst000066400000000000000000000001301314203541000175660ustar00rootroot00000000000000.. _api-protocol: Protocol ======== .. automodule:: rpyc.core.protocol :members: rpyc-3.4.4/docs/api/core_service.rst000066400000000000000000000001231314203541000173670ustar00rootroot00000000000000.. _api-service: Service ======= .. automodule:: rpyc.core.service :members: rpyc-3.4.4/docs/api/core_stream.rst000066400000000000000000000002451314203541000172270ustar00rootroot00000000000000.. _api-stream: Streams ======= .. automodule:: rpyc.core.stream :members: .. _api-channel: Channel ======= .. automodule:: rpyc.core.channel :members: rpyc-3.4.4/docs/api/utils_authenticators.rst000066400000000000000000000001611314203541000211760ustar00rootroot00000000000000.. _api-authenticators: Authenticators ============== .. automodule:: rpyc.utils.authenticators :members: rpyc-3.4.4/docs/api/utils_classic.rst000066400000000000000000000002501314203541000175610ustar00rootroot00000000000000.. _api-classic: Classic ======= .. automodule:: rpyc.utils.classic :members: .. _api-helpers: Helpers ======= .. automodule:: rpyc.utils.helpers :members: rpyc-3.4.4/docs/api/utils_factory.rst000066400000000000000000000001271314203541000176120ustar00rootroot00000000000000.. _api-factory: Factories ========= .. automodule:: rpyc.utils.factory :members: rpyc-3.4.4/docs/api/utils_registry.rst000066400000000000000000000001271314203541000200130ustar00rootroot00000000000000.. _api-registry: Registry ======== .. automodule:: rpyc.utils.registry :members: rpyc-3.4.4/docs/api/utils_server.rst000066400000000000000000000001171314203541000174500ustar00rootroot00000000000000.. _api-server: Server ====== .. automodule:: rpyc.utils.server :members: rpyc-3.4.4/docs/api/utils_splitbrain.rst000066400000000000000000000001641314203541000203130ustar00rootroot00000000000000.. _api-splitbrain: Splitbrain Python ================= .. automodule:: rpyc.experimental.splitbrain :members: rpyc-3.4.4/docs/api/utils_zerodeploy.rst000066400000000000000000000001531314203541000203360ustar00rootroot00000000000000.. _api-zerodeploy: Zero-Deploy RPyC ================ .. automodule:: rpyc.utils.zerodeploy :members: rpyc-3.4.4/docs/changelog.rst000066400000000000000000000001261314203541000161000ustar00rootroot00000000000000.. _changelog: Release Change Log ================== .. include:: ../CHANGELOG.rst rpyc-3.4.4/docs/conf.py000066400000000000000000000164301314203541000147230ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # RPyC documentation build configuration file, created by # sphinx-quickstart on Sat May 28 10:06:21 2011. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os, time sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'RPyC' copyright = u'%d, Tomer Filiba, licensed under Attribution-ShareAlike 3.0' % (time.gmtime().tm_year,) # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. from rpyc.version import version_string, release_date version = version_string # The full version, including alpha/beta/rc tags. release = version_string + "/" + release_date # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] autodoc_member_order = "bysource" # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. #html_theme = 'agogo' html_theme = 'haiku' #html_theme_path = ["_themes"] # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = {"full_logo" : True} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = "%s v%s Docs" % (project, version) #html_title = project html_title = "RPyC" # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. html_logo = "_static/banner.png" # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. html_favicon = "rpyc3-logo-tiny.ico" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. html_domain_indices = False # If false, no index is generated. html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. html_show_sourcelink = False # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'RPyCdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'RPyC.tex', u'RPyC Documentation', u'Tomer Filiba', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'rpyc', u'RPyC Documentation', [u'Tomer Filiba'], 1) ] rpyc-3.4.4/docs/docs.rst000066400000000000000000000035261314203541000151100ustar00rootroot00000000000000.. _documentation: Documentation ============= Introduction ------------ .. toctree:: :maxdepth: 1 :hidden: docs/about docs/theory docs/howto docs/usecases docs/guidelines docs/capabilities * :ref:`A little about RPyC ` - related projects, contributors, and logo issues * :ref:`Theory of Operation ` - background on the inner workings of RPyC and the terminology * :ref:`Use cases ` - some common use-cases, demonstrating the power and ease of RPyC * :ref:`How to's ` - solutions to specific problems * :ref:`Guidelines ` - guidelines for improving your work with RPyC Reference --------- .. toctree:: :maxdepth: 1 :hidden: docs/servers docs/classic docs/services docs/async docs/security docs/secure-connection docs/zerodeploy docs/splitbrain * :ref:`Servers ` - using the built-in servers and writing custom ones * :ref:`Classic RPyC ` - using RPyC in *slave mode* (AKA *classic mode*), where the client has unrestricted control over the server. * :ref:`RPyC Services ` - writing well-defined services which restrict the operations a client (or server) can carry out. * :ref:`Asynchronous Operation ` - invoking operations in the background, without having to wait for them to finish. * :ref:`Security Concerns ` - keeping security in mind when using RPyC * :ref:`Secure Connections ` - create an encrypted and authenticated connection over SSL or SSH * :ref:`Zero-Deploy ` - spawn temporary, short-lived RPyC server on remote machine with nothing more than SSH and a Python interpreter * :ref:`Splitbrain Python ` - run code locally, but have all OS-level operations take place on the server machine. A killer feature for debugging and automated testing! rpyc-3.4.4/docs/docs/000077500000000000000000000000001314203541000143505ustar00rootroot00000000000000rpyc-3.4.4/docs/docs/_static/000077500000000000000000000000001314203541000157765ustar00rootroot00000000000000rpyc-3.4.4/docs/docs/_static/howto-redirected.png000066400000000000000000001570601314203541000217650ustar00rootroot00000000000000‰PNG  IHDR¤Y,â3sRGB®ÎébKGDÿÿÿ ½§“ pHYs  œtIMEØ ?"̣¹tEXtCommentCreated with GIMPW IDATxÚ́wxTÅ׀߻=›^!ÔĐ{( E´ˆ4A©* Ä¢bA°cûû¤ˆ‚€̉AĐ{/Ih!„ÔM²}¾?’, ÙÀ&$€2oóÀÎ;÷̀™sËœ™¹WÉÉÊB$‰D"¹3°ŸŒ…Ăœ3' GNº4D"‘H$7Óé”VH$ÉmG¶Ơ‰ÓéÀnJ–Q‰D"‘HnV‡ôÊÑÑS§N±uÛvE…%7]'N§!p8ØíV́v'‡‡ƯN•*UèƠ«jµZZU"‘Hʼ÷´…—¼Ă^0ñ—÷¹ĂøƠïÊr(ŸzßÓơæ½ÿ6Ó%¬™—¤I$‰Dr³:¤\Ñ!Ư¹s]:w #=EQåöH…È"ÛíØ¬V, YYYdeea2™@₫₫{#:vÄÏÏOZU"‘H®§c7đƯÜØ‚÷.wÀ ^«…€[m¥EYéwe9”_½…Ó5ơ N‡½PzB’‰ƒæp•¶DÙPu*]‡¢V)̉%’Û]áCŸÇÀ!.̀y‡lk•C•ûo·‹¬ă·C*Dá)»N§EQÿÚ$T-!f‹™œœ²²²°Z­Øl6rrrHOMçÿ&O";;³ÙŒ¯¯´ªD"‘\wÇN€pøYLú­®÷ơ–CùÔ;=ËÓéÀf6Ù¶ûäEúÿ ÄÙM+Đª¦_/­ôc‰¤È{4•‡¿ˆ9?óM²₫5́ o$₫ÍzăW½:/-82°&î óàR̉ăÎáz’v8̣®X™|9ư(Mûפ™®‡¼²œÑ«,ʽY”•]<Â&˜Íf*µ ÈÊÎÂáp ²C*‘HnO\³IỌë¾Î¼ưs¨A<|₫ß₫0óâ3>¾¯6_ÈG»v±èï‹´ë†éÀJ¶dºÑS̀xƠ—†¼Ï>3ãÛ´1æ.²/—¿êô½¼ûơ(t;¾äÙ6ñó”´™:º:+'ÈÄùgïó³†T'~ΫLøù^u~ÂçĂj¢”ă¦~–ĂüđÉ<¶dr×øox,Ê›”Ăÿ°bù"6|‚fxR®¸Ÿßൟèø<ÓhJÚ≼øă$Î‹Ïøô₫êè ̀ÊÍí^ñ»,;¤NG‘éº;•·4Y›Ư†ÓaÇéïRH ¡kMơQ/“»¡o¯Ứbï7“Đ:U0>-GÙ½^ËL{g¸};6G̃₫½‘S$ÇÆáÙ ƒ—‚3c7©›`©0€FÍÑéÀ™¶Kë¦|63¯£ˆw‹G kÚƒ—, dî₫Ä»±; —}iÛ9|¶C¯ƯÏ™i¯ạ¾‡Jê’üưư¼<ëÚ^T®¨§º*ç¡o˜óÜf:¼ùµTcH7g¨Î:̣¥N¿7¹sH"5ˆ̀=\Z÷ ̣^v­ú:En0ù—>m­1¼6í Ấ»8;ëM2²ó¶èRiø[øëó÷I!e₫ă\H²¡©ûµ»5"û‘$MC {”Úƒz£ÉúS³¿Ăl÷@'<̀£øal>-Ú¢7(ÓẢ÷î-è4¶£ÙÓïÈ~ÎL}̀2-W‡tĨ½Ä_+t<±àoî ¾DâÏ£I½XFv(Î_f-½²‹…¾öÓỐÑ -&²6Mầ¦b»øû¡`Åv~©;æ‘—ˆÓUöI’7ĂÙ£̀qd́œJâ®8Äå`‰®ùÿQ«]DîOû%rN.ᆥä˜ó2)>x5NXóöưŒ`#}Ë$î;Sxpn\iÓÅÇPw¥ÎSá¦₫AĂ¯®»3èj>p?:Ç.ÎÎ,́»ªÜ|A“)!§Ïœ&-= µFM`` ¡¡¡€¯^^^¨Uj²LYØ–%E)·äR™₫ßM=:ÿ:Üưp_ªàäø̉•œ´Đæ₫‚€c¿­æ´U œ™́[±ƒ|¸sPkU§¨º+?‚÷ßA/=a‘m¨ OM ̀'Y¶ê P̃½d$²w/ªg₫XÉ ³‡å¸«ŸĂ‚ɨB΅ëĦ©yŒMS¯è·"῭=ƒÚîåK½î½¨ Ä-_ÉÉBú]®qö¸̃¶r:¹ë?¯§ÓQ(0›p:¤‹IäXrr³¾>½èơúÂY»ƯmyR¤Üö’³‰“_¼ÆQ¶2¡Kº´zçfœf·Y…6ú-ª¶l…mă3<Ù­#//ø´œ€_Ơ ¤Ú́8œùÓ!k .®döËxöơe˜üÜư]|íËøư™¶Œyy)- mß“-Ø*´-̃¤Z›v({'̣Rv<3;ßÖoâS9”t{Ᲊ¿ñĂó­̉~ MO'1ºÊÖ‰Lœ}°;æå¯6̣Îÿđ̉»ßđÚßóPƒ¤,ø‹Ư;²pG®i› èUs ß¾“çßZÉ·)!íz°ơBN×·@Ä3Û©¬ÜcMsL©N¶gÙp8Pán|ơàÜưï®H‚H?ŸÍ/ ê7DA> ˜é'í(áMĐ™ëæóÔO8eơ@'Oôv(hM¢zÛv¨ÿû6§ç€7™«êÁm}²ùß¼Ó́6—̉¯œÎ+̉ôèê7E•¹–%ûpp_:LNbÚ¡8™•Œkˆ¢§B—I´́Ñ ­8Áïá¾±+øüH5»Ưo°­o÷ OÇN<̣Î_l îÎ₫¤̀.ÿ©‰—ØĂ¯oÆ0æ¾Á|±#¿¶ï` "3ÿ>#üÑiÖ±ïíÎôhßQ“÷à¬;’‘ ˆ7Û\mѱºóßóÑà–ôè3ÿiȺYdÙ=87®´é1+ã ê«Ö¿xƯ3’–q₫„ÔE}Wå´Û)(Âé ËdÂf³³ÅŒÍfĂî:iN§»ƯƯ–;M7;';wß+Ê’"E”ÛG̣ĂĂ₫TöÁ•®ö©ˆ?@úiR̀v´5z1 ¶çW³ä {Ê.~ße…đ»éW_p•#)ßH°!oªÜƒpä₫¶¤q>ÀÛ•G1à™HºÅĂr܉¦4ÆÏyŒ^{’ `Đ“o33ö"6ơKålÀYf?9ˆ̃}ûÑgÄW¹©égH)¤Ÿ¸¢̃¢LÛ+W-÷ơNgé³yúÊsA7"Tø=jRן.ơuœ8\Că*ÀQf~µuÆ­¿pkÒ홤Ụ̀ÔóÓ´e,:d&4c+éyi3ßÇôÓv*gn&U!59¼å3ªYˆăÇO–²ÏaÆ÷Náí»²xG&Ë₫îwqP¿?1Mê’ÂîŸ÷p©BCú?=€mO1á¼đ« §ÊÊïëÓĐê÷á l‚_Rë.Ø]eͺœí—,%ưM @P m½À_Ơ ̣¸¾nº¤Î‹́ûu)@½Á=Ø›JB¯&ѨHgư÷‹Ùö×N¬@ơöơ8v"ue ä4ÍûăgåDå*@{ÖÁ®s°íXE¼¯¥è-ªÔ¬Ḉ·f²Å¤Oê¢Ù\(X™́l{»-¶Î&“-»Ó9gqç7 ®6”êĂÑøÙߨ?x¡µk£VÔ(­ ëù ̃*üüªøWóƲe)Gí6,Ûwa+k;ç/u4ä{ÿ­ưà—d́V¦$36WY¦Eg°ă  äêtü¬6o1¨'ơuơB uP­§ærødZƠD·đ9́̀jH»êz87¹»Lx×]ËGjÖíB­„©O³ü4}ww7‹DUQ ö=¬=d"À׃/ÆkétNG“kå9¯§‰ ™Ó)ª† đUÑ<à …¯ö¬6…˜È.XX³Mä\yKĐ·#ẫđÍ»§h*v¦B¯ÎTpở·1oSÖº̃ÔƠ‚&´#¾†tvüz§¯åôŸ¤8:Q¡,íPÀ û‹@1|TîÍ,öĂI,o¹HNª9ïà§ST 5¢×+´:—k¿ ¨Ï§³*@Đ»åCÔèz^ )l[czSëâ ´5\$₫’ƒª¡F}…ª±…i1Ù½®}nœvĐ+ª°MĐ^µ₫W×}å1œº—¦5 û®ÛwW¤¥¦`6›ṇ̣̃"..-±[Đj´T ¯B¶)›³gÏ’t!‰ŒŒ lVfs§C^l%‰„s,ơGÓmØ2³jÖR΢P³ÇƯÔĐå>„ùD̃GŸÊ`Ù6›oæÄéÓÁm‚r/È_€‰s)ö>đEĐ­CẠ̀eûI1§±wÙJâJ]c¨¡¿jeïçÛÿû‰ q6‚k5¦EdDîh‡J‡ÇïlĐ× W¯($°`ÎâLvlÙ—8±mß¼÷-»³olK) (âV föHㆱÙr§]-0[\yR¤HQÜœƒ ÈÄ’ àK˜ŸƒZ!¢bÅÜ>[úỉ­N2ÓùWC!TèT 5BT®k •BÍ`U¡ë‘°¦‘™p„/ïmL—V .Kë‡Ùœæ$=MˆÓ©Đ«UÔ Vá£dc³ù`ôÖâc;OfVơ;7¦~h ^ZB#î$æ‘A(»rÜ¢`tâză® z·:eU‚úºÅ‘HʆƠäL×AÑdWº?µƒ#Ó燪ö½œ=øvdØĂmÑœ₫…_₫^̀¦-{œFàÈ2d¨¨`PôÊÄz-.e`ºfT2LÁT ̉aÔ(ÔS‘<(Đöj#Ôt­«¡[]5aw>c!g÷WLÜî:óä„/Y{è°ß̀O/gÆ)q‰‚§̃MÚ¢É₫›_æäêÈ~2Ζ± µMQçû÷>y}§1̉úí¹¼> U*VWÓÀÛŒyó³|?¸+zŒ÷¦nÀvưÅaThï+…íP=×~)§H3;IÍiLxÿG w²ơÍîÜ{GCº̃ưóolNƠ”BF@Ơƒux«j„© 6¨¨¬¢vP:k©”+mê£đgwơ¿†î)ç¹äÆwƯ>G¤§§“™‘ÉÔiSÑh4¨ƠjNv››Í†5ïµ÷ÙÙÙX,„!•H$ }æ»qq8Å>Ơh;äaF÷­‚ëc *tÔŒ_>ƯÍ¡d¨4° ysCmúßטƒ?ïgƳ2ƒ†¼6{­=ëñQwè^`sּˈe€1œ¨₫/1fPM®§?Wú´?̀Óßà‹ă)ØPă_½CG̃O]=lj¨vïëLÖÏaæoÓyfø7€‘JZqWß₫4đ‚¼9?7¨CªÊư¬KÑ-E³;wï$$$„ aØ`?gÏ%3#³P`Öétä=D©äi ‘Á‚Ă è©¢Ë{xV¡ØO¼/‘Đ6ơ¸opk¦¬:O•;úcÎ/Ï «&Î+>A¬€—JA¹2M}Eơñ[R-¦CÆÜGê‚ơhTA„6èLóN59̣Í{œär'2ƒZ…b'í|íºVeÓº8Î,Må₫3™đŒ–œøØTQ<=e,ûWOâËï¶“èƒÚ‘°7‘ªw” ¾E8Î₫ÈÉóƯhÔñ%†4¨Œ’ơß­½€°̃Út4GOBơÔ¬'>]Ái‘JÂÚC(#à Ä­ÙJªNG]­B¸Æƒ60%~o"•¯¦·ù§bQ5¦ƒŸÈù™«ñ ¨G…˜ó̃œ‡ñNÚLü€`vq́ăgI³SMë.oáHºÆ²ñ;5›•¯|Ï´ ̀•VCƠJ^`tu®€mçbö[´4Đ«óI'çÈI¨V†vpÓ6µ*÷ÚŸ- mó‡|ù¶–g' ¦ă 3 ˜ư4æ„x}Ơ{Dá»~1ú]IN8™;ñµ›Ù¾#‹‹w*4̀{ǘ g®Â׿.a1à…àäü¹·«h*„`ắ…,‚kÖå₫Oæí›ºăÔ?‡©zW}Ê…éËđ ¨AH›X7G¦ơ8I±G íz•sĂY‹°+mê«B¹jư¯¡»Ó‰ùLQßu?e7#ƒ}»£Ö¨NƯ‘ûƯ5«Ơ%ïU÷v›‡Ó‰Z­!ñB ¿»&‘H$àE­nóà½_%À½håµ›MÖ† ¼«@gUñ¢Î€7˜5àÊ}ẒîÂù…“ŒEÓ]8G¾AÇ‘ÅÚèY9Eûhz*µÀ‹­\_¹*_ôz‚ɽđ°t+}EåfÔF¥”.0+Ê}™Émư‰›¶£êÍăów;ÙñÑX„ƯBÖ†çY™ô,MûNåƒûËiÎ-~ç§@àƒF¹bJŸ»WwivL[Ʋ$îj÷z• Ữ²0ÇoàäªiI´P¿Ư•å¨U—đàÛ´:ô,i‰ H}“›9oQ¬!û’‹ZEƠ0oZ«Qûª®x°v§“™ôơϳ̣bIê[4h¦ˆ̀·`Ô†Fap~ÆẃÍÑШ’à.₫oLÔÄǴañÚsŒ˜üÊÑ€ Êi₫MÄà«GkP¨ñ  ´²7\Co­ë¶ø-ñ÷}•צ¾3óɱóIªư0aEêacỌ̈tjw  QqƯN 4¤Û*‡¨Đ[4ħ¸hØDîHkD¸†°JwèÍ¡_÷`ơÑâ£U¨dt`+k;¸óÅ"×}ùÈOVqßø46c Ÿå̉у$h„³Û×<údjXάcö{ŸqÈ †$g̃èë!î¬Ă½ï¿HĂ` äœäø¬·yiö ¼‚|ñq́çäÂÙdÆÜÏ€¯72 ë'7o …a°mV́ ,>5’Ú÷<ÁËß¼æ$¯}eû²1Öñ¦ÆÖ±,9Uü¹Ñ¨Ow*]iS/7ç]¡ú_Cw­ E}WI¹p¶PGÑâ%́Ư»Sfîë²…pbw8°ÛlØmv́;v‡#÷³/*YY9h4jŒ>|4y2!ÁẠ́¢+‘Hn?²·ñÚ°Ø—?¢i¼J^§• ÿ|˸ÿûå®I|ûxCŒ²sC‰éÜùo&ưø?E¶­Ú“„­NOÔ*J˜Í:’—»W&ÈG' ,‘¸Ăá`ăÖTV&Ú±#î ¢±Vdæ÷CYNµ“ăÔ*Bƒ Ô ̉ª§ƒ¿™O—eˆ†&u}é̃@O{6{æ“afƠál&[I³å>Dꩬ£v€–¡6~XqE9j@hȬđ ×ç̀éèNmg÷±R|P£ưƒD…­eÑ7ËIs*„k‰ Uc°z¢“Ă¥Ö·¦ƒÙ+¯(×+à'>¢ºnö}˜ N/Z…éhSGGˆLgÓø0ÖL6jê×̣¦~U/Z8L|öw)BED "«yÑ!XAÁƒ6S0]3 sJ+f³/Ù†É jƒ–ajN'˜I¿Z}JưÅ,=Æ®³©ßôoơx’Ă¾D†ëéR97@Pævpç‹jÀR¸c"T?ÉŸqV²Q©ÀSM4>jâŸÓÎd9qzƒ–*aª…uᩯ'ÈV&tÉ9£”4+éÖ\*©¤&8LOÛ`ؽ'•§-¤Ø­†ú•Ôœ‹·Q@/ßt Éb_²t›­††Ơ¼iSQCÅP-úôâÎ _îxäúµ?XÔ¦7>nlG±ïàë‰î!*TºÂ¾[d„ô®®]رs§Ï%///ôzN§»́vƠêÀl±áÈû~›Í®bȃ÷bộ’[‰D"¹–ă|;æU–§WÍ^Œ°¾́Œ̃$”«Œ&'_$+w¡—ÇYµZ…J­’#¤I±'†æ üQ‚́d:r§>&³ÖÀ@… îR©©–â Ë7VQÑÑ4LFè©â¼5wͧ¢RPô¥ùˆi¤¡J’T›p}ËQoP¤%È .Z ÀÏÙ÷™?¡5¡½†3úM°%c:±]¿l`g kăE@₫iï‘N*JZß+ËPĐ×îN%/H_ü.*T¯¥Â7DG°6wú¤w˜½#ơ¤XÁ©¨¨î¯Â[1̉³‰6ïeB**úªPå¾ÀàÚ:)x”Ç'Ä‹˜F*]´“î ÷›—j…ˆF̀Ó]}\6/êÖ Å±;³UÔ ‡ĐÚ¼kq™ÛA£ûủzëhÛÀƒo®ß9q²/M¡I„7z£ÄœÜQ^µNCíªÚóM|¼ˆ¬èE¶\ŸU© É |¨hRÏÅ׋$kO+*j66`ÍÓYQ)x‡èéªUQù‚W9 ‚¦¸sĂ·Z„áØÿNQ›ºm»‚SÓ¯¡»Jî ßUR’Î!B͹sçIKOÇ™·6T¸ùy₫¢ă*U ÇÛÛÛí¢u‰D"‘Hn%b:µgÁÛqbK‘mYf;ß®>E¢6E¥*˜Í³nît]³Å|90›rA­ÂhW//ZX"ùaÎ0{Ề₫D3ç³d;µ0-•B DêhYU‹×zÖ6 Ê£_â Ós™ôÈ»l^´ ×Ó¢UoÇUtN‹–%ñÖHÛª^´­o¸×›„¾-µŸy ¶2¡Ë(2*ùѳ±×Í«GIlê©îÅøn‘©K‡¼·×-Ø)U©T¨Ṭ%‰D"ù÷tH¾ó 'b‹lr¬.¤›Éȱ»îîn…ù1X?£– ₫zŒ: 2.+‘ü×8,6N&ÙˆÏpăȱ‚Ñ[C­zª{«¸¡OÂ+¿,»ÀßfĐxéiRÙ@Å0oºVÎ¥¼ưÈɉSYËؽt‹Đ û7ÚÁbḅ’Ô¼é°~ôjâMEơ¿Ä¦êîÆw‹}[¿́dJ$‰ä?MqSvo/ oW'ô*qÙ¼ÏÇ€JöD%’ÿêÅ—ºƠơÔ½et̉Ù(ï, P{éhQIV}»^‡ÔÔ®íGí{5ôî àœUàp½0è_bSu/ê»y‘‘H$ÉíÙU]ơ-jÙ¿”H$·lÿKEưºÔ—–øµ«¨Fz¢₫˺»ñ]Ù!•H$Ém‰9'›,S†4„D"‘H$7M₫Kˆ®¶NT"‘H$’ÿ –oFH$‰äfwH¥ $‰Dr»áÆë³₫!-9Ñ•&³‰D"‘Ǜ©¼K$‰D"‘H$‰äftHewT"‘H$·520+‘H$ÉÍëÊ.©D"‘Hnë₫¨4D"‘H$7±C*ïĉD"‘]R‰D"‘H$7ƠåÛpüe®åÁV³:SpKưƯªzÉ¿g»₫›ưI ̣O₫!ëx )R¤H‘"EÊƠu߈3Ö1¤åHÖdüK*}3ơư·ÙJÚ@)ÿUqÛ•Yù'ƒŒ20+ÿäŸü»Ñ‚7â«’¹¡­%¶PbK¾Ùú=s¶vÊ-!S¸©—nơ¸¬KŒoñÓÖOG IDAT°áÛ©€¾ëÚu#₫,n?ÏéÙñ%^^úư•"ÛÉđüăĐíÛ.û&‹méÆ~ײaQĐ₫e4½îzü­t¶¸~îÎï‹óƠùñMĐ]"ù· J~é:›‡ÿœN ×îø̃´º æëë{ƒơȼ‰Ç¾U(Kˆ›äoâơóÿºîÉÏ× À·%߬qóĐ+Üü[^'ùƠô(®ÅéU†ú>Yo_₫v–vCª\ñqW§æÿƠÇ̣V°ú–¸øÍ9¸÷rG&f#®´å¿å]íW*[Ü?/É1K¢ÏÍĐ]"ù×\Rd`özY‘Ù̉û½ ̀J$ÿIT…OĐRHæZ†¶ÉL7Û¬gYơÁ(:5‹¤NĂÖt{z:»2”÷\,‘}„¹/̃G³†‘ÔiÖƒ‘_Å’ê¼BßókÚúYb3·ñDëHê4,¦J×'{2k6ûs®Đ%sÓ~q2đñ–ø›®°Uqö±́ăî}øø°%7Ÿư₫êeúvhA†‘4îöŸÿsưóß``Ç(ê4Œ¤Iϱ̀<”•{é/è/™¹ụ̂ƠKônI†‘Dö|ï÷™̣n²ăÖđѨî4iI†-h7́#Ö$ÙÊÙ‡<8®3•¾z"ÏVwĐëÅŸ9’í̀Ûnăüyè®ÖÔiI¶ƒyqî~27h.¢§ç]æZ†¶́ÇÛ“‹«‡)·ƯœƯk‹oK¾‰Ư˱ƒụ̀=1>n.oơ‹èQŒ.èUFúæfíE¶åfï¥}~`ö&Ëœ|›ÅN¡u![^Æ·ª+ß [p‹Ơ•g3)R¤”­\~©‘¸†¼g—^(…}_>ÁÄC­yoÙ?́ß̣#cŒ?óô»ÿæôàx%ƠĂ%Ù́üø>M¾‡iëcÙóÇÛ´>´ˆ£YWèèÓ™Ù±ŸÑÚ7ob÷pôÀ÷tơ)½^úCö'_®»„Ă•î ñilªơ÷×ÔynmMb™ùgg26Ö³đùçÓØ˜́D;I;¶biÖ¥ô6tkËk´@ö1jËË·qx_®½È:ʼ½ơyyîöï\Ëư3ùߨ~ŒÙP‹~ü‹ư;×2£ïE¾xe'­nü%ë(?dâ¢Ø¿c Óz'óƠks9a‘ù7/Œư€‡¿á¯];9»ˆIơ71aâ:’øB)máÉq³³àHK>ú#–½ë¿¤ọ—<öñ²ˆ¬]|8iácç±m×vvüüM¯ä@v9ù}IÛ±ư¯R)R₫ĂRú© ̀ÊÀ¬ ̀ÊÀ¬)RÊRJ0B dnç‰ÖM©Û(_Fñg¦Ûî(˜3…†¡¯çJ^è|k̉ûÙQTÜú;‡s®3HëÊ—Ój'm%̃âÆ₫ÆŒ}u0Ñá^è !´<„ºw`àÓ¯ư´«N N…Ƨ]IơĂk8f.ăö+X–'Ç5Tç‘<3„6gø«àµ~q®­5µŒÄxÎ\²àU%a§µwyø}Sê¶~Ø̀´cAû_­̣)å6!•Y˜•Y˜•Y)Rn¼hÜßF‹‰ûFóÍi¹à|Lëù¡P§ ïÿöTâÏg^Ÿ–L)XŒ̉“ózfí£G₫6S:g³¸3TẳGV›PƯbæjxRw—…D=̀ƒê'™ºc0“Ûx“;%̃0«‰W í¾î¢zÂ¥Wåïe0lR6Î\IB÷&¬;]¼Ë@ï’´—µ?UÔ…÷SùPÁOåJS´:´Â| §i6œî́¯̣&´`^3?¯ƒ”­?0郟X{øÖ:e9˺ư –åÁqµAÔ)èc¡µỄEC€O^ú́>ùb N9Á%¿¦ yơ}ÆwGW~oZϰ˜=oÇ‚ö¿Z=$’Ûü>/0t™h¾Y3ôêÙo†sG%- 3äwç´¥µñ:T-¢G.±ßÑU˜ưߢCµ@n`vÁà×̀^'yÙÿ}¸ˆS1PKËåÀ́›W ̀ºµÏ¹ÙŸbº?„K+—çHbÎÚ thÈ ̀>X§̀îßµW¡À¬¦@`5/0[I s³SgĐ÷Ơi~9­ö̀ÅÄ[¦f±Y5à•˜½˜Ë#ỘéÀ׋:\VS— ư~Đ™c.Ëö+˜½Æq]M-Đ\ôøbkJ‹¼ÀlZbv‚c8~*BÓûyë»ûyËiæ̀ºööÜƯá=ZËÁïKÑƠC^ %²C*³20+³20+‘HÊ—¾Ổó₫o¨Çư=¬Ló{6œJĂjÏæâ¡?ùúƠØb*ÇUí^u¸ïÎ,fđ».™±\ÚÍ̀÷goq££ÊH°.…cçṣÖj\¯(µEïK³ønÉ̀̀èÉè6~(ît¿–}4Á´iï`₫Ç+đîCUcezôÖ±đƒE8:Dª)ă7xÔ^xØxæ#×Ê+¬ä8Tè̃øx)XÎïàÇ÷¾`oùBimáÉqÍ |ị̈±=̀₫`Ùwö¡¾—ÓṼym»„ÅéÎ2đ1ʾ¯V9­Sœ²ëvjà5Óóÿ¯Î ½´|Göïº,û¦̉Åûú§W»­@`6?ÍZ00{e€«@`öº%/0ûíjÎ[γ|ê^îå ̀–Ä>sºfíº…¬̉öä¾;ûĐĂñ;?oØÀÁ .´È ̀–ÅTUÛ˯àaûàÁÿ¯LËưœƠÿÄr`ß.­›D¤·đ̀Jk O›Đ¼́c°iÇ?¬y£6kßÿ‚]Yåè÷%lGÏê!E”!ª̣ê"ô4ẓ&GáĂ¡]h̉¬]Ÿû™ÔÖưib¼Îçˆ̀íŒiÓ‚z Êc¹ëY…‘¨ç?ăi¿Å<Üñ"ïz-u yè>ofôkKư&ùû_§èê0dd( ̃\J…‡P[[œ­®e-UÚ·Æ;«*ư»„£*uíKµL#mÛUF[æo¬ó ½np¯f¼0¾=Ç̃íGT³V´èÿ±ƠzR×X¾ưQë]‹µbyá®;ˆ́ø¿øæ›ç›â-c#µ¼Ä£»Ù¬=''Đă±¹SÊưí‚%lÇ«ƠC”Û́%»20+³20+³20+EÊ—ËSv¯5Ưç#³6w,³Púy4!´âcÚ?Qô¦_ê‰>™µoG±À».C>ú…!Øônt4̉́™ˆ}¦ ô*0è\¡ï·́éë¦LŸ’ÙGÛđyÖ<¢®4€;”™¦%̉Ç]û—*í*₫R$¯†JƯ_áçî¯Vç9ß¿LláÁq·tàƠ—Ü´œâE¾/1«ïKeë÷ÅƠµ´íhT´ó…ûzH$rÆnñ3‹û¦5nDÓ&óÁĐ.Kè+·dđ˜— ˆJ£g^`¶0Ñ|ưÏTºúäf'½ÊĂ?%GW‰ƒï¥Î¾cEù ̀>̃¯-Ÿ)Ñ|½yª›iÀ%$/0Ûíơ¥´xwÉåÀ,ÅеO^`öÛƯyYun`öÓéDåfËr–êµôÉ*¦Ỷ4ó7yó¤cßíGÔóNđ­É]ƒzR×x¨øưËÂ×Đü”³V/juöÀ́Z̃Ư1́è+µdèo_̀^w[•Q;^«‰ä† ¤^™¹©£<ÿ%Ù#•HdT"‘Üü©üƃD"‘H䣩D"¹mY‰äÖêÊQ"‘H$·wT̃ %‰D"¹iRy#–H$ÉmƯ•&H$‰äæuHÏÆŸÖH$ÉmÜ#•]R‰D"‘HnZ‡´eÇ̉‰D"¹-èжM‘4˜•H$‰ä&vH%‰D"¹‘Y‰D"‘Hn<*i‰D"‘H$‰D"‘È©D"‘H$‰D"‘Hnßé¸qăB¸$;;›­[·̣À\×úơëÇc=V́öñăÇc6›oYCÅÄÄđ믿ráÂl6'OdâĉètºR•7bĈBvΗɓ'ßú]É̀™3ùñÇËƯ~Ú¥<êëíí͇~H||<6›Ó§OóÆoÉW¿~}V¯^MVV‰‰‰|üñÇèơú"ù†ΡC‡°X,œ9s†÷ß¿ˆ~ƒ>ø€7’““ƒ‚ˆˆˆ"ey¯< )̉ăÇ/UYëׯ/TÎơ2`ÀÖ¯_Orr26›øøx̃ÿ}¼¼¼ÊƠ~%ñ?OưÅÓ|Æ cÏ=X­V̉̉̉Xºt)uëÖ-WđÔ~‰‰‰nÏ_!cÆŒ)W;ß »H$‰D"¹~]C:jÔ(’’’ d̀˜1̀;!óæÍ+u‡´~ưúL:ơ_i¨qăÆȧŸ~ÊÙ³gi×®“&M¢FŒ1¢Ôå>œ́́l×ïÇßRú4kÖŒ!C†Đ¨Q£f¿kÙ¥¬ë«( K—.¥uëÖ|ơƠẂß¿Ÿ *V(ŸŸŸkÖ¬!--áÇS½zũ{ï=ŒFc¡îÁƒóĂ?0cÆ {î9"##yçwđơơå©§råóññáñÇçŸ₫aóæÍté̉Å­~æ+2228p AAAüïÿ+uY÷ß?ƒ‘#G2a„ëÖ­Q£Fœ:u ™™I‹-xá…¨]»¶Kç̣°Ÿ§₫ç©¿x¯oß¾̀5‹… 2~üx‚ƒƒyûí·Y·nơêƠĂd2•‹xj¿GyƒÁP(­OŸ> :”•+W–›ËË.=zàסÙû÷sqîÜÿ́ƒ@Å1c¨¾m ¿4j{µj¥Î÷oÄ¿kWề˜À¾;ïÄ'Ÿ8ÿCôèуåË—Í;J´ïúơë騱c¡ç[•ơëד––ƽ÷̃+]R¾¤^kR§'Näô¤I§“JÏ>“ÉDrr2}ôQ™­ù,+ưîºë.t:ëׯ¿f̃÷̃{µZÍƯwßMtt4K–,¹ª­¯¦_írµ̣ªT©ÂŒ3˜4i’Û}›6mÊÎ;™Ë5k8sæ̀ ƠÁÿyê/æûúë¯1¼öÚk„„„P¯^=Æ϶mÛ<:GoÆĂŒÙl.6 u­ó̉S;—Ô.UªT¹ê1¢':!àûîC€±I¢\¢öósåơk߯ëÖGtB-§æ·ß¢ @áÚ/êäI¢O¢ñºu´8p€è¸8í̃wÓ¦®̣¼êƠ£₫‚DŸ:•»Ï©SÔûùgôU«̉Ñ«^=W¹u~ø¨£G‰':>†«V¡h4ÔüüsTz=©+Vp°{w’fÍ"iæL‚b0Pqôh”‚×VE¡ñúơ®rlÚ„w‹…{­ú–ùCÑHóC‡hqü8U^y¥Đ¶:?ü@‹ƒi´j‘±±4?xÊ/¿́¶œ+·{ZOó… L³Ư»]¶«v•% j??Âzˆª'â_ àTä¸k׺Odl,Áưúñƒ²đMp0Q'OG…G-´oĂ+h¾?µ§M+?ơ¤¾~;Rwî\ềOË–7ơºöÊ+¯ë6€­( O>ù${÷îÅl6“ÊÂ… ©V©èµjƠb̃¼yœ>}›ÍFRR3gΤbÅẸÆÄİeËrrr0›Í́Û·¡C‡–:_ÁÁ£Å‹_µPVơ-‰~7æ·ß~#==¬¬,~ÿưwjÔ¨á6ßƠL±Z­<ÿüóEöƯµk¿₫úk¹·$¼óÎ;¤¥¥ñôÓOsæ̀rrrX»v-ơêƠså)É@ayЧO<ˆÙlfË–- >!:uº₫©ÑhÄÇLJ*Uª0eʪW¯Î/¿üâÚ>uêTÂĂĂéÑặwÛ† †ÍfcΜ9…:qqqdeeaµZ‰‹‹sÉ•wFøqă˜7o‹-âÍ7ߤV­Z…{́ر\ºt‰²fÍ~úé'FMTT111…+§Rñ /ṕØ1âăăùôÓO‹”WZÚ´iĂÀyÿư÷±X,%̃ÿÂ… L4‰û￟{%K–0nÜ8¦OŸ^&Îq½ú ˜ÍfNœ¸öă?ÎSO=Å®]»Ø·o'NtuÂ<Ơ¯´v¹̃úsï½÷̉®]; D¿~ư aÍ5…FSIOO'<<œÄÄD~ùåW`%00Đ•ïĉEÖܶÈ{°ó÷÷—=È2æäÉ“$''³lÙ2bccéÓ§Ï =~q₫ç©¿xoË–-ôéÓ‡^x‹/røđa´Z-wß}w‘ÈÍF­V3lØ0–,YBzzz¹Ú¹¬í²¯cG÷ëGƆ 8231Ÿ8Á‘~ư8̉¯ûÚ·Ç‘·&Ơؤ ufÏÆP£¦Ư»9ÿå—ˆœﺋº³fÁARÓ–- (jƠ‘•…9.T**ä½đÏP«ơ/Æ;:s\ç>ưËÉ“xGEQ÷çŸQnơơ‰"uơjNŒC̉?’¶z5¾mÛblÜE¯'áµ×4ˆf»wGƒü`¡̣_N¥R¡h4(*¾ÿû¥KèÂĂ©9e äKZß²À™MÊâÅàpÜ¿?J^\_Ç(F#çÍĂ´cN³ïfÍ”¡ EÚÇÓöí×ĂÓ|wƯEÄG¡ "íÏ?I^°í³‚èÂĂ©öÎ;T5Ên„µ¡¡Ô1}ÍdnßNÂĉ$͘AÎ₫ưh ̀+Kqdd±aN“‰ 3 5kblÔµŸ)K—–ùqQêk;wmP₫;RáBíÜIøÓO£)p}¼DFF̉«W¯bGG?ùä¦L™ẬåËéÑ£Æ #''§HpỤ̂‚ÆKçÎyôÑG]/¿+8S±bE~ûí7Î;GÏ=‰‰‰á»ï¾#<<¼Pyæ\G±±±WƠ±,ëë©~ơë×góæÍ„„„0dÈ @@@₫ùg±3ë0IMMå?₫`Đ AE5kVè½9eyÜ’âççÇàÁƒi×®˜L&V­Z…1ï\+É@aYÍÂ… Ù¿?=zô`ö́Ù|úé§%/¨¸5¤±Z­âÛo¿-´>Û·o‹-rữ¿¿˜3gN©×:¡V«/¯ñéĐA!DË–-]iG ,(´¯Á`N§S¼₫úë…ʳÛíBQ”«–W  bÅ®uUe!S§NBQ³fÍ[F¿9s戄k¬ëiܸ±Bˆ#F”‹~ײKYÔ755U˜ÍæBë;[´h!„âÑG-”oö́Ù"44Tœ={V|÷ƯwBQ!„Ÿ₫¹+ß+¯¼"œN§9r¤0¢uëÖâÔ©SÂl6‹wß}÷ªë*¯µ6ïV\Cên xûöí…B´iÓ¦Ü×¶jƠJtêÔI¼ổK"##C̀˜1ă†Ùïj₫ç©¿x¯cÇÂd2‰iÓ¦‰Î;‹₫ưû‹ƒíÛ· £ÑxC|ÀSûơîƯ[!DÏ=ËƯÎ¥±KY¬!­1ehq́˜hºk—Pt:ˆ€˜×ÚA¿;ïúˆ×oïæÍE“EóDµ·̃•ÆMẃ W®€¨ơí·"êøqÑl÷n¡öñ€Đ‰¨'DôÉ“"ä\ÇöªWÏUníéÓ‹èVuÂÑøÏ?EÏ>~íÛç®=uJTzáQáÂË:EFcƸ~ûäƯƒû÷¿¼²Z5ë[P‡ £Fy´6ôZùŒ»¶ûwí»oôhuê”hq́˜Pûû‹ #G¨£GEó"»wF^ơë‹€nƯDt|¼ˆÀ@ëái¾z ˆæ‡‹F«W»t®ùå—Å®!-Øvî|ËïÎ; µOqv+KDđ}÷¹̣è*WÎ=ïyFD8!Z>,T^^år\Oë C­Z"âƒD‹C‡DT|¼ˆ‹uç;íÚ <ï•—üôÓOâÀ…-ó%""B81ỉ¤"Û4M™Üï¸ă!„M›6u¥uëÖM!DttôU÷ơ4_AY¿~½X¼x±Ûm%­ïµÄSư,X .\¸ üüü\i!!!Âl6‹G ¬/ø|ºté̉bË2dˆBˆjy×9@¼₫úëÂd2º”ơq=•w̃y§ˆ]ªV­*„⡇*̣̀Ú»woWÚ‹/¾(rrrD```¹³gÏgÏ-ÔGœœ… é7•d¦S@@€K|}}‹äiƠª›6m*ÔG\»vmÉư½¸ Û·oçï¿ÿfÇ®—C\Éܹs±X, 6Œ#FṕØ1₫úë¯r½ ¤§§Âàåå…^¯'--­\m0Xºt)>>>ôèÑ£X»”–ü)¥íT•‡~/^,bï̉vRJ«_qv)Ëú8q¢È4 EQP¥P½9Rh̃~₫ÔÀµæ/?¸̣È#Jdd$áááÄÆÆb0Ø»wï¿¶#úÿ́wTT×öÇ¿Ă 0ôªHˆ…(5£&`”X¢Ø#"Ó,‰%/Ïä©ñ÷b‹Bb%vEc0j+)v A¥8303û÷‡rĂ8”;ĂŒ¢ÏZ{-¸wÏ©û̃{ö9çî[÷.ïĂÛ¢²Ù¦̃û5¤C› -úL‘¾®7¾öÂW¯k×®ÈÊÊRÓ»xñ"”J%ºté̉j́¤M›64h6õ̀{B«%íü¸ÚEhm PE½gJ.‡ª¦¤RATï]ÓúNT*îo‘B!BáưôŒá8v¬Ú;«æ>>ÙÙAØÈvÿÚzi\Ù,-!‰ ”H`̣à3é[R”–¢¶´z+R*A Å}Ç ®¬ÿŒJt«¯¹»e Œ,,`ëW^YçÎZ[£86ö¾Ó••Lª©ư°açä€T*X÷è ??PM ªÜøÖƒ@$‚‘X Pe==…@¨),ĵđpÜË̀„™»;:,\ˆnIIè–œ «ưë₫óIÏöªêjT> Uu5́ ‚ØĂf÷·ëîÚe°|ùÔWc\`l ‘½=DVVܳ[©ç1ÙĂ|ú駸uëbØÜĂØÛÛîܹ£—üæÏŸ `óæÍèÓ§|}}¹Ï™Ơ_X¹yó&BCCQSSƒuëÖáÆ¸zơ*^yåµôøêñEßơåS¾:©.>A}ñóókt¼ÚÔ‚IUUö́ÙĂ9¤]ºtZ?"_mJ¥Ï̉ªª*|ơ½P„²²2Nê;ÅuØØØhø_º¼¦#jII$lƯº'N„““–,Ỷ¨®\.×øX½.¤¤¤ _¿~‹Å\TÏ~ưúA à̀™3»‰D"üöÛođđđ@¯^½52;;; >wï̃Å®7̣úk¬8=*• )))Z§§mùø’™™ ´iÓ¦E+{|ËÇ·]ôƯGÁܹsáääÄ¥‘H¤ùôÀøæ›oàííÍ €‡¥R‰„„tKKK¹HzŸ}öpüøqƒ;–––X¾|9JKK|YŸïĂÆÖÖ999Ü1///@̃CßÔ+))©©)¬­­¹ÙĂîơµ4ôî¿»[,MWùá÷”ûöí  jÄ×₫øÚ _½Û·ok¼›Ó¥K…BÄt!<<ÆÆÆF×Ơ÷}MÛv±ÓÓ{gÊÊJ™™ATow‘X £“1‡÷59¡§TB)‘ÀH,Fé̃½(}(˜†ễ=Èóó›áÑt.îƯ)•ZX æömˆạà],#33ˆll¸wC V_¾O<ôJwíBû9s ‰đÜ´iPTVBQRIR̉ư$ T§¥ÁÔƠÖ={¢öî]LM¡ºw–¾¾€Pˆªß‹ä[>z¤P@%•B`l £zca £çW<‰‹B Âê_ÿ‚ë×_ä];t\¾‚‚ôn/\;ï̃ »aѽ;Ú’Ë¡’ÉPñ`±ÁPù6W_î€v“&Á¦OŒAµµ(Û¿/_{»§=÷Üs˜0afΜÙèê_Ư³̀Éɉ׀¼¹‰Ùđđp¬Y³K—.U+GC$$$ !!B¡½zơÂÏ?ÿŒØØX¸¸¸è¤ÇmëˇæÊ§T*QQQM›6aụ̀å ú%º´ơÖ­[WWWŒ5 eeej»{ •/_,,,`jjª¶`oo¯Ñî[¶lÁ²eË0~üx¸»»·x¡0++ ½{÷VsŒ5®ƯÊJªºD²µ´‘V®\‰‰'B©T69ø¸pá"##””®^½ªơj`LL ÆŒƒ¸¸8|ÿư÷hÛ¶-¾úê+œ?¾A‡@_üøăÿüs,Z´]»vÅ”)SMûøñăP©TX²d Ö¬Y¥R‰ÔÔT­·ùddd 11gÏ…T*E`` >øàddd`ÿ₫ư:µ³>홯½đƠûù矱lÙ2lذ[¶l­­-æ̀™‰D̉àưWv KûEEE!==½ÙÈ~úº¯iÛ.|_TSsS,nđ|ơ… °{óMXĂÈÔ*¹Ö½{s^uZvNÈ_Á*8¦íÛ£"1‘¿C×ĐŒzv6Œ]\`îíâmÛà¾bÚŒƒ²={`?t(ZFzÔ¥¾ÊzÛƯDvv®̣ÑSVU¡t×.Ø K¨är× 8UgÏ´cG˜v́£¢"T<«—_†Ñç°n…”o=xë?sooµhÉMm_ÚØÀaøpˆ;vDåñă(?x°É‰ÊS§pgưz<ÿùç0vr‚@$)zµneăÈ‘û[ÉML`7t(”r9Ê÷íƠ›(6D¾ÍƠ×̀Ó«VÁäA„lù(Z±%qqPƠ³]hnb f̀˜&,Ö=ĂĂĂ1wî\ɵ‡ŸoÍM̀Åb G§±OdƠwœ;†µk×bÉ’% Ṇk£×ÚÖW«É¯&Ê—\¹rEo_||<*++1jÔ(Œ5 ;v́Đ˜́6D¾|íÏÈȯ½öö=Øöîçç{{{,m ù ‘Hđ×_5»PØ·o_µ>z½‘èáM̉XP#m~Đ̃f>nffF7n¤²²2.X’­­­NAQú÷ïOgΜ!™LFeee´yófrrrjQ•æ$--cÀ€úi,Ówß}GÙÙÙ$—Ë©¦¦†²²²èă?nđEy>éi[>m$))‰~ươ×fƒ5•ß̣ñm}÷zñÅéàÁƒTUUEUUU´wï^êÔ©“†——>|˜îƯ»GwîÜ¡¯¿₫LMMƠtÚ¶mKÇ£êêj’J¥”””DC† i0ß[·n5Xe˖餀‚‚‚ˆˆhÆ :÷»……}ơƠWtñâE’ËåT]]MÇoôúyÿư÷©¨¨ˆ¤R)íß¿Ÿ"""¼̃¢££©  €«Gư€R|eÁ‚t₫üy’H$¤P(èæÍ›ôă?’ƒƒƒÎí¬ïû{ÑFọäÉ”••E555TYYIûöí#??¿Ë©;жưˆˆhæ̀™Í¦©Ïû6íâăăĂ+¨QÛ¨( ̀Ë£Àü|j7iÙôíKâN‚*YtïNyyŸO]vï¦ç?ÿœü23) '‡ºîßO¡P-¨‘ØƯºîƯKƯSSÉåßÿ&§w̃!¿Œ êvúôưçd§Npå ææR×øxznÚ4z₫³Ï¨ë=Ôe×.²8°Á`16 °îƯ›ü/_&¿‹IhiImÂĂÉ73“̣ó啕z•ü23ÉüÅ©Ư¤I÷ƒ]¿Îữ2(èŸ@3₫₫¼ë[¿ b77®ư:­]Ko¿M–AA$x(à _=‹îƯ¹2äæ’qÛ¶jçm^rs)0?Ÿ|½_̃ÿû¦§sAoøÖƒ¯Íë¯sA“Ú¼ư6ÙôéCW¯êÔȶ_?̣úưẉúăznÆ zîÓOÉ7=ü¯]#Ï­[ÿIGöR_ܾư–üë•ߺW/ợë9_>ơµzùer_¹’:~ÿ=™yyé5(Ks÷!;;;’H$ôÙgŸ5›Ö7ß|CJ¥’–-[F!!!4xđ`Z»v- ¬×&ủ©S'R*•ô믿RÏ=)88X-ĐÆéÖ­[äăăCÆÆÆ4nÜ8*..Ö¸ÿ 2„bccíرԻwo0aƯ¼y“9¢–_=ruu%WWWJJJ¢ƒrÿ?G›ú6'|Ë×µkW’H$OaaaÔ§OŒŒ¤íÛ·ÓÈ‘#µŸÖÉúơë©°°ˆˆBBB4Î*ßǽo₫üùT[[Kׯ_§Ñ£GÓ[o½E™™™tăÆ ²°°hô¹¯P(ÈÙÙÙà¾^zé%R(´}ûv ¡?₫˜JJJ´j„ÆÄ|¥.ªÓ°aĂyÄO&FFE‰„lllX{ébââBƯNŸ&ÿ«W©Ë=dƠ£ LLÈäùç¹Ïẓ‹œÇ`0ŒV‰¢¬ ùŸ}†üÏ?‡q›60qq²²̣7ÔƠ´fœ̃}NÑÑäùùÈ₫đĂ>OĂ`0Œ'~¡Pđ`›́Ú8³̃d0 Æ3Aï—ƒqüäi”ÿŘ= C¬[·®YS§NaåÊ•¬±qD¬  ƒÁ`0 †>‰ŒŒdÀà…kƒÁ`0 ƒÁ`´*‡422D"Byyyƒ:VVVXºt)rss!—Ë‘ŸŸ¥K—ÂÊÊJMO àƯwßÅùóç!•JQ^^øøxøøøè¤§-B¡çÎaèĐ¡:¥‚?₫ø·oßFmm-rrrđÅ_ÀÄÄD§ôFŒÄÄD£¶¶ùùùX´h̀̀̀ổ±ë×¯ÇæÍ›5_¾|‡V;Ö®];fÏÍ›={6÷ÑæÇAXX̃{ï½Ç’÷³`/ú.ßÓb/EEEÜ}ïa™4i’®½½=ÊÊỂdƒ RKG$ẓ6¦$&&ªƠïovîÜÙªêQßî ƒÁ`´uï̃½A‡T,ăèÑ£èÔ©–-[†¬¬,t́Ø“'OÆ®]»đ×_qºË–-ĂôéÓ±fÍ,\¸ÖÖÖ5j‚ƒƒ‘™™©µ¶L4 :thQC}̣É'°³³Ă·ß~‹‚‚ốÙóæÍƒ›››N[¼½½‘››‹íÛ·C"‘Àßß3g΄‡‡FÙ¢²úúúbܸqđöö~b 3,, ^^^彂gÁ^ô]¾§Å^&Nœ±X¬vlÈ!Ç₫ưûƠ—––â‡~À×_ __ßFµ„„¸¹¹!""ÿ÷ÿ÷D^cÆŒX,Ftt4æ̀™Ăë7¹¹¹¨¬¬lUơ¨o÷M1kÖ,̀›7OĂsÀËËËuÄzصg]ÊÇ`0 F«¥±ï¯EFF‘­­mƒß‹™3g½úê«jÇ­¬¬ÈÉɉû?((ˆT*ÍŸ?_# +++­ơ´'''*))¡?₫˜ˆˆ†ªS:Ç6lØ@*•ªÁöê"K–,!•JE-üôÖ­[éàÁƒ »|ù2>|Xư£èíÚÑ́Ù³¹c³gϦªªªÇö £M›65ú‘`Cʳb/ú.ßÓl/§N¢'N4xÎÅÅ…”J% 8°Ùt¦L™BDD"‘è‰ưÚ´iÓˆî{̃O¤Ô·û¦¾C:kÖ,’ÉdZ¥½víZ‰‰y$ö¬Kù˜0a„ “Ö*:¿C¤¤$;vLí¸D"QÛ5a¨T*|óÍ7iH$­ơ´eÙ²eرc.\¸Đ"ÇưúơëÇ̉̉̉ ЦM½LC ´hÛ®† †ß~ûM/e9r$²³³!“ÉpüøqíÓ³fÍ‚L&S;Ö«W/‚ƒƒ5ôBCC‘‘‘¹\¬¬,5Éd "Œ7jÛmmmµÎ—ÙKËʧm;?möâåå…=z`Æ /((ÀéÓ§ñÎ;ï<²IÄ$''C*•¢¤¤›6mBÛ¶mlçæÚÏÔïƒÆ¶̣́-Ÿ~8xđ ̉ÓÓajjÊé½̣Ê+P*•˜0aB“v¯/¢¢¢đñdzYnƒÁ`0´D'‡´mÛ¶puuERRR³º/½ô®]»†̉̉R½èiĂ«¯¾!C†¨½©O‚‚‚PQQÑ¢A¹¹9đæ›oâă?ÆáÇqëÖ-ÓëׯLLL˜˜Øâú‰Åb,X°ÿùÏ+++:tÖÖÖ:¥gllŒéÓ§#,, ;wFyy96mÚ@ÀéxzzÂÍÍ ;wîDFFÜÜÜ81ôö¿gÑ^ôY¾§Ñ^¢¢¢ “Éœà9zô(̃xăG̣nh@@öíÛ‡Û·ocđàÁ˜2e úöí‹øøxiƯ~† ®ư“““[Ü¿|àˆˆ899aÉ’%[[[lܸ[·nÅúơëu®Kpp0Î=Û¤CÏÇç ß mÊçăăƒ?ÿü¨®®Æ={àææÖ ^Ư{ó111¸sçär9̉̉̉`ll¬uz ƒÁ`Ô!urrܹs‡;fbbKKKXZZªÍR;99©é5•&=¾ˆD"üøăX°`AXcäÈ‘X´här¹Îéäää ¸¸{÷îErr2† ̉â«L&Cvvv‹ë( 1uêTü₫ûïˆÇرcÑ®];¼ưöÛº›‘fΜ‰k×®!??ß~û-ÜƯƯƠ3ùùùÈËËCuu5jjj——ljJ¥2Ø…đ¬Ú‹>Ë÷´Ù‹P(Äøñă±k×.TTT4ª—‘‘ xyyü†=}út”””`äÈ‘8|ø0bccñÁ @#¸Ÿö3uíÿđʦ.ưË—¢¢"DFFbÊ”)èß¿?~₫ùg( |øá‡-êÿï¾ûK—.ÅØ±c!‹t˜ù:à|Đf‚…Où¼¼¼pêÔ)8::bܸq1blmm‘ ‹˰páB…Bôïßصk—¦.é1 ƒÑ́8¼%?®Äă›o¾ÁäÉ“Üđú¸£LŸ>ffføî»ïô¶³³3~ûí7:tK—.mQZC† ¹¹9^zé%̀=?ưô¢¢¢tNÏÅÅwï̃å ³¹₫­¿%ụ̂åËøûï¿„_~ùEëô”J¥Zpª:ÇÏÁÁ999̀^ôd/B¡P-̉µR©lrÛ»¾Ê÷´ÙKhh(œƯ®ûp¹\\\Z|AAA8qâ„Ú¤Á¡C‡@Dx饗pđàÁ'âz3DùöíÛ‡ï¿ÿqqq055E¯^½Z´J.‰đÉ'Ÿpú,--±~ưz¸¹¹©•///uÀùŸŸj,-)ß—_~ ©T₫ưûsm‘’’‚[·náرX½zµFº×¯_Ç”)SÔ&\êĐ%=ƒÁ`0C§̉º•LGGG5‡´wï̃(**̉Đ}øư¦Æ̉ä£Ç‡¶mÛbîܹ˜7o·r[÷X,†¹¹¹Îi[[[#>>ÅÅÅ5jT‹WaΜ9ƒÄÄD,Y²|đ"##ñꫯ¶h¥T*yM"<̀Ău‘Édƒ¬ ØØØèT6…B¡–ƯßB¡đ±^O›½¡¬¬Œ“óçÏ?’̣=möÛ·oăÀÍ:Vuס±±±AYY™F»Ëår-­ơz3dùÖ®] ddd %%¥I»o•J…Ó§Osÿçæærsk€OùBBB°{÷n5Ǽ¸¸YYYèÑ£GƒéîØ±£Ñ×r÷î]ØÙÙ5z^*•j¼kV÷¿T*Ơ¨ïĂŸxx@Ü£ë·,µŒé+ß§Í^²²²Đ»woNF­sù´iç§É^Ú´iƒAƒaóæÍMNđà®·ââbƒ×£¢¢Băú633ƒ©©i£ß‹Ö'úØya¨~355Åúơë‘””OOÒ5«I»oÚÚZµ¾om}så …°µµå̃ƒ®/~~~>'{eA×ô ƒÁh§ô×­[‡9sæ 007Ć đá‡bÆŒÁb¬¬¬¸A0_=>\¾|½{÷V;æçç‡ï¿ÿŸ₫9:Ôà røđá¸{÷.víÚ¥ÙP"~ûí7xxx W¯^;gØ\z&&&¨©©Q;Ö·o_hQ̀̀LØØØ M›6¸{÷®Æù¼¼>¿ÿ₫;bccakk‹Ï>û yyy[•J%bbb`mm{÷îáÿû ±uëVN'11*• Ÿ₫9-Z„®]»ª½¤+.\@dd$"""’’"ÂƠ«W9'ZŸù>‹ö·|Ú´óÓd/QQQHOOçơùŸ={"%%å‘ Ècbb0f̀ÄÅÅáûï¿GÛ¶mñƠW_áüùóܵoH?•J…%K–`Í5P*•HMM…B¡àƠº÷—ë¶»»ºº¸¿ºûđvăæàÛoo½ơ¦L™‚áÇ£°°+V¬@hh(¶lÙ___nơ¸¾Ư·f›`Ñ  Ê‰ IDATæyàïï+W®èeu[ßé1 ƒxøƒàuIDD¶¶¶~ÄÔÖÖ–¾ûî;ºyó&ƠÔÔP~~>-[¶Œ¬¬¬Ôô}øá‡táÂ’ÉdTYYIû÷ï'oooôt‘>}úÑĐ¡C<ïăăCDÔèÇÈÓ̉̉¨1  uz , óçÏ“D"!…BA7õ¤ü‘Z\פ¤$úơ×_=F©©©$—Ë©¬¬Œ¶mÛF®®®j:³gϦªª* £́́l’Édt́رûâư÷ß§¢¢"’J¥´ÿ~ˆˆ "¢ààà&?ä̃«W/ ½:133£7RYY×ÎÛ"Ÿ|™½ ÅåăÓÎO“½Ñ̀™3›mGsssªªª¢©S§6«;eÊ""‰D-²Í₫ưûÓ™3gH&“QYYm̃¼™œœœÔt´m?m$:: ¸vvttäέ^½ºQ»Z¼x±Nåk®ß₫y*))¡5kÖ¨ưÎÑÑ‘ )..®A»ïưr0Ơ=ë?ù–ÏÁÁ\]]ÉƠƠ•’’’èàÁƒÜÿvvv:·ñG}DJ¥’"""¨K—.äååEFFFZ—¯k×®$‘H(>>¨OŸ>IÛ·o§‘#G6xjè₫¤KzL˜0a„ oi‰CʤuʨQ£H"‘ k&L (ÑÑÑTRR¢1 gH‡”‰~D)_\[in‚E‡̃ÛÛ›v́ØA%%%T[[K¹¹¹´fÍrww×Ú!Ơ&=&L˜0aÂDoiUUƯºu‹5Ô$€RSSiΜ9¬=˜01…Bºté͘1£I½PUUÉåræ>!)&L˜0aÂäÑI£ïÆÅÅqïƠ5e’Ѻ " >œ{w‹Á`èKKK|̣É'Í~æøñăđơơå₫¯{ß’Á`0 ƒ̀ Ă®3k ƒÁ`<ô~9ÇOFyñ?ßÎfÏAƒÁ`0=F¬  ƒÁ`0 ƒÁRƒÁ`0 ƒÁ`0‡”Á`0 ƒÁ`0ŒGæ®[·DÔ¤„„„<1• ç>̃]ÿïú̀5 2™Loy&&&ªµ×£ªÇăj¿§‘ÄÄDܹ́³EihkWaaaxï½÷˜èAƒˆàáá¡sỵ̈égí:âS]îú¸̃ ƒÁ`<¹¨EÙ]¾|9ö́ÙĂư¿eËœ̉<ĂÂÂàåå…•+W²hưËúăÑƯÿÇơÆ`0 £•:¤©©©HMMå₫ß´ịóóñû￳–âIQÑưˆ¥¥¥¬1P¢¢¢X#°₫e<¢ûëƒÁ`0mtz‡Ô•••X¼x±Æ¹={öàÂ… ÜÿóçÏGyy9¦N[·nA*•âÈ‘#đôôÔø­₫üóOTTT ºº{ö́››Û#iˆàà`œ={r¹YYY6hù´i—Ö@ ÀäÉ“‘™L†²²2ÄÅÅá…^PÓ Arr2¤R)JJJ°iÓ&´mÛVëvÑÆ₫êúˆ0tèPÄÄÄàÎ;ËåHKKƒ±±1§W«aS['L˜€œœH¥R$$$`̉¤Inmήd2ˆăÆC@@€ZlmmŸJ;àÛ|¯·èèhdggC&“áÈ‘#~—OÿjÓ!!!HJJ‚T*…L&CFFÂĂĂ ̃Î|®#mÚùqÁ÷zÓÆ®³—º­ô¡¡¡́éÏ`0 Æ“́VWWcË–-ˆˆˆ€P(ä·k× ÀêƠ«Ơô­­­1zôhốÙ®®®¨ªªÂ`nnÎéxyyáÔ©Spttĸqă0bÄØÚÚ"!!:Uîĉ;v¬Æß# ñƯwßaé̉¥;v,Äb16mÚ@`Đ̣ñimê¡oøæûơ×_#&&ñññ Åøñă!•Jñâ‹/r:Ø·onß¾ÁƒcÊ”)èÛ·/âăăadd¤U»hku,\¸B¡ưû÷G`` víÚ¥ÖÇnnnpssCrrr£muëÖ!11¡¡¡8xđ -Z¤³]yzzÂÍÍ ;wîDFFW777mŒOƒđí¾×Û!Cđ믿"!!ưû÷ÇÑ£Gœ¨àÛ¿|û£]»vøóÏ?QXXˆ7ß|!!!X½z5œun?>hsñµ{}Û_øô_»̉æ₫lllŒéÓ§³§?ƒÁ`0­…²»SÙƯ¿ €†Èd2Z·n]ƒçüưư‰ˆhĐ Aܱÿûß$•JÉÎÎ;6₫|"" äµo߈ˆ"""¸cÛ·o§Û·o“µµ5ẁÑÑ‘d2Mœ8±Á2èCfÍEDD½zơâEDDQÇu.ß´iÓˆîGơhPø¶KkWWWR*•4õí¢-–––X¾|9JKK1cÆ ƒ·Kbb"T*ÂĂĂ1wî\u㉸mu)))èׯÄb1d2 _¿~8sæŒNíÂ×₫ôIrr2^ưuµc¯½öZ‹Ó•Ëå033Ó[9[«èûzKNNÖØẫØÖUCơ‡R©Ä±cǰvíZ,Y²ÆÆÆ¨­­5H;ks=NøÜÿôiW­ưùÁ`0 £ t jT'AAADD¤P(ÈÙÙ¹Áà=µµµtưúu=z4½ơÖ[”™™I7nÜ N¯k×®$‘H(>>¨OŸ>IÛ·o§‘#G4¨‘L&S;Ö«W/"" Ö¹|:u"¥RI¿₫ú+ớÙ“‚ƒƒƠ‚pđmmÅÑÑ‘ˆˆnƯºơÈ^D₫æ›oH©T̉²eË($$„Lk×®¥ªÙ‰B¡ ½{÷Rÿ₫ưiüøñTXXHçÎ#¡P¨s»4g¨ÜeÀ€ÖÁÁÁ\]]ÉƠƠ•’’’èàÁƒÜÿơƒ$…††ÑÊ•+©gÏ4}út*..n0¨»ª“>úˆ”J%EDDP—.]ÈËË‹ŒŒŒ:;àÛ|¯·Aƒ‘J¥¢¨¨(255¥’H$ưÁ·ùöÇ!C(66–ÆK½{÷¦ &ĐÍ›7éÈ‘#mc¾×ßv6”4wÿÓ¦?øØ_{©]² FL˜0a„I+‘–:¤¨  €öîƯÛh4Ụ̣̀r=z4åææ’L&££G’———†®··7íØ±ƒJJJ¨¶¶–rssiÍ5äîî₫ØR]ÊMT‡£££Ní¢í€•ˆhÆ ̀ˆM<™̉ÓÓI.—Syy9ÅÅÅQûöíƠôú÷ïOgΜ!™LFeee´yófrrr̉Ù^øØßùêƠ«©1/^¬¦É•íđáĂôá‡ÑóÏ?¯³CjffF7n¤²²2._[[Û§̉ø:J|¯·¨¨(ÊÉÉ!¹\NgΜ¡9sæh8¤Úô/Ÿ₫èÚµ+íܹ“ I¡PĐƯ»wiưúơÔ¶m[ƒ·3Ÿëèq;¤ÍƯÿ´é¾vÅÇ^˜CÊ„ &L˜Ñ†÷̃{Y"ƒÁ`0 ƒÁ`é“Dnn.̣óó™CÊ`0 ½c ¢ÍÛo?Ơơl7irrpưº^̉óüí7̃¸¡&-Ñ{±yưu®N¦®®́bzÊ ! @ëß&&&‚ˆ8iÍ< ?Œ'Ñ“\ø¨¨(Öƒ ƒÁ0¶À¦o_Xtï»[¶<‘uZYÁù£à8b„¶¶eY₫₫é'Ü^½Ú yæL gg86M<§ùê1­Ï>û ‡ÂÙ³gµ₫í˜1c ‹9sæ´êzæææ¢²²’u8ĂਭöïßëׯG¯^½ü‘¾ơ´¥₫̀RC37 "¬X±UUU8qâF;wî   AAAœîüùóQ^^©S§âÖ­[J¥8rä<==5̉ Arr2¤R)JJJ°iÓ&´mÛVCÏÇÇD„¡C‡"&&wîÜ\.GZZŒ2™ D„qăÆ! @­N¶ ÚÂ'_>ơµ°°@ee%/^¬‘Ç={páµc“'OFzz:d2ÊÊʇ^x]a ƒñ˜0qq÷¡Ch;ajîÜÁÍ/¾ÀÍyó@*ûè#<7mẠ­½{Ơéé5³âÉWÁhMốÙ½{÷Æ¢E‹tú}QQ̣̣̣PZZÚêë…?₫˜u:ăÑ:¤7õDçÎqâÄ \¼xÓ§O‡ƒƒƒÆô­§-nnnpssCrrrÓ•32BTT^~ùèŸ?o¿ư6 1sæL5=kkkŒ=={ö„««+ªªªpàÀ˜››s:Ø·onß¾ÁƒcÊ”)èÛ·/âăăadÔđÎç… B(¢ÿ₫ Ä®]» pssĂÎ;‘‘‘ÁƠÉÍͭųQMå˧¾ƠƠƠزe """  ¹ßµk× Àê‡fƠ¿₫úkÄÄÄ >>¡¡¡?~<¤R)^|ñEv…1Œ'€ë×xㆠƒÈÖæ/¾¨¶­ThmưÏư´W/ø=À¼<̃¸ÿë×Ññ—_ zđ¬3uuå~“ƒÀÜ\ø= ÿ¬,æåÁ7- Ư»sé™yzÂkûvææ̃ÿMn.<·mƒiûöje4óôä̉í´n®^E`~>óóÑơÀD"tü₫{™¢lß>\0w6lÀơëquÜ8Äb´ûàLL₫IT €Ob"—΋'OÂÂß_ưyÙL}ơ>H17‡ß¥Kđ¿~Ïö™Ú¹NëÖÁÿâEx8€nÉÉđ»x.ÿùOƒé<|o=øê9 ß´4®í^hbåKhm¶hÿŰyươu¬{ơ‚Ï‘#\¾ùùè–œ ‡°0 ;Ї½ˆîoÛÎ˃ӻïªư¶ë¾}đË̀„ǪU±S>ơµ~ơUt̃²6n„e½E…ÇÁgŸ}†ääd=zTăœ>'èƯƯƯ±uëVܼyµµµ¸sçÖ¯_víÚi膄„ )) R©2™ ×Y¯¹…CÔW›̣ùøøàÏ?ÿDEEª««±gϸ¹¹5¨×ÔBjjj0cÆ ß?üñ‡ẠƠC,$é›!C†àâÅ‹ÉdHJJ„ @DèÓ§néŋѣGxyya×®]˜9s& ‹×^{sjô­§-yyyÈË˃L&kRoơêƠؾ};rss±ÿ~>|{ö́———Æ5mÚ4äççăöíÛ˜ €Ü\̣¿v„66äMW¯’_VA »ÈéwÈ̀Ë‹lßxƒóó)0?ŸDvv¼ëÁWÏsûṿ»|™¼âÊÜqụ̀ÚÏƠU­>ơû®!Û²~åµ₫i¬Ưôi/ÈaØ0NÇÄÅ…óGQ@v6ù_¾LFffÉ—o}ØƯ\¿úü/]¢€ü| ̀Ë£Î[·’UÏÀà÷ØØXÊÊÊ"Ay¹ºº’R©¤yóæiœ‰DǦM›Ft?ªoéÑ£uï̃;öÆoQ```“¿å«Çgœ­K}›¾åÛ¾};Ư¾}›¬­­¹c$“Éhâĉ ‹wï̃ƯhzăÆ#"¢ÜçĐ́Ù³©ªª̀ÍÍ –/_™?¾F»´o߈ˆ"""¸c₫₫₫DD4hĐ îØ¿ÿưo’J¥dggg°kbăÆTPP@ÆÆÆÜ±Å‹QŸ>}x§Óät¦‰‰ lmmaccccăF·’ê[O_ÔE/S©Tjן=©T ¥R©>“]U»z3o666(++SÓ‘ÉdËå¾óyûöíÇ2»ß\¾|ê «V­Â AƒĐ¦MÁÛÛ«êmÙ{{{À;wز ƒÁx¦°è̃¤P *9ô`Jå‰@¤±Z§”H ¬ª‚J.‡²ª ʪ*D"--ïÏ‚÷ê(?p€[…U”–Bzå  ,Ú>[Gù¾}ÇÄ€@€{YYp;5ÿ’¸8~ư5®¿û. RƯ—˜€J…êsç̣›7¹Su«PÚÖW_ÜË̀ĽŒ (++á8z4ÀaĨª«QeEªÎ…@,†ĐÊ >>èøóÏh?gœ?ú¾¾P”—C–“EYïzh£gdjÊ“'¹2W8Ñø3øÊ¤¾đR_xÔ8/»~¤TDpưæ´ ‡ÉsÏi®èÑ^ ́àA¨ärBÁ­’Ú •ṬC‡ ’J ’/ßú€,;yÿùÎy{ăzd$$©©° †ç–-đ>tÈ ×»»»;F‰Å‹7·oß¾022ÂæÍ›5Î) ­ó322Â'Ÿ|‚´´4TVVB&“!11Ôâ—\ºt µµµX¶l†ö¬ÎóƠă‹¾ëË·|!!!ؽ{·Q\\Œ¬¬,ôèÑ£Áß́ر£Ñ|wíÚ©Tª¶J:zôh́̃½÷îƯ3X¾Ú P(p₫üyîÿ›7o¢¨¨H-&ιsçpö́YDGGsÇ&L˜€¸¸8 ÿ…/B¡¶¶¶œXYYiè¼ổK8ỵ$jkk¹cGÑ̃̃:Ø£G¬X±EEEX¹r%̣̣̣đ̉K/áå—_6¨̃cTXXÀÔÔTĂѪ¨¨à₫¯¨¨ĐpØ̀̀̀`jj̣̣̣&âGMsụ̀©/lÙ²r¹ăÇGdd$®]»†cǩ锔”œœœØè”Á`}àëë‹‘#GrB}ç$44555X·nnܸ«W¯â•W^QK¯_ô]_>å«s¢¢¢ “ÉÔÄÏÏOcœ^GS 5UUUسgçvé̉>>>jưlˆ|µAŸ IÚ„²²2Nê;ÅuØØØhøAû|Pû́KƯ~iOOO$''cÆŒضmª««aH½Ç‘‘^{í5́{0{ççç{{{¤¤¤p:)))èׯÄb1÷îj¿~ư pæ̀ó–Ëå033kuơ‰D‚­[·bâĉprrÂ’%K4̉JLL„J¥Bxx8æÎ«n\"‘N³d ƒñ$ ¬¬„‘™DơvɉÅ0z(H¡Å. R*¡”H`$£tï^”>LCuïä}w»IHƠ½{ ¥B Ôܾ ‘£#L¼‹edf‘ ÷n¨ÁêËwR–‡^é®]h?g"›6 ÊJ(JJ IJºŸ„Bê´4˜ººÂºgOỖ½ ©)T÷îÁ̉× Qơà|ëEç IDATÁG ¨¤RŒaTïY.lä2¾T<‰‹B Âê_ÿ‚ë×_ä];t\¾‚‚ôn/\;ï̃ »aѽ;Ú’Ë¡’ÉPñ`2ÚPù6Wß:,Đn̉$Øôé±1¨¶eû÷ăïåËq/#Ă`×úsÏ=‡ &`æ̀™kêOĐó7·x5kÖ`é̉¥jåhˆ„„$$$@(¢W¯^øùçŸ ôø m}ùĐ\ù”J%***°iÓ&,_¾\ă÷’F&%kë­[·"..®®®5jÊÊÊÔâ *_¾Ô-$Éårµ †’–-[†ñăÇĂƯƯ½Á…$mÈÊÊBï̃½Ơck·²Rc§¨._ =<ÛqđàAŒ9M\ØúÖÓnÉX,ĂÜÜ®‚2TTTè´,­P(đĂ?à¿ÿư/d2,X€›7obûöíœNLL ÆŒƒ¸¸8|ÿư÷hÛ¶-¾úê+œ? :×çÂ… ˆŒŒDDDRRR@D¸zơj‹µ´¾u¬\¹'N„R©Ä† 4Îçåå!&&ÿưïannưû÷Ằ̀ aaaøư÷ß±wï^6je0O$TSsS,nđ|ơ… °{óMXĂÈÔ*¹Ö½{s^uZvNÈ_Á*8¦íÛ£"1‘¿C×̉́l»¸ÀÜÛÅÛ¶Á}Å ´3e{öÀ~èP´Œô¨K}•ơ¶»‰́́]5䣧¬ªBé®]°8–₫₫PÉå(®pªÎ…iÇ0íØFEE¨8xV/¿ £ÎaƯ )ßzđÖ;æ̃̃jÑ’›Ú¾,´±ĂđáẃˆÊăÇQ~đ`“•§NáÎúơx₫óÏáäHR(ôj/uT9r+¹‰ ́†…R.Gù¾} zÛñ ‘osơ5óô„ǪU0y₫y€üÆ ­X’¸8¨êÙ.ØÙÙaøđá¸{÷.v=X ~˜3f ¢¢kÖ¬i4m'è«lwvppàœ»úˆÅb GgP½€S ^KJ%;†µk×bÉ’%066VÛJ©­^SrA¢©̣%$$ÀßßW®\Ñ›ĂÊÊJŒ5 £FÂ;Ô‚*_¾ö§Ï…$mH$øë¯¿ÔIIIAß¾}ƠúèơF¢‡óvH9Âk߯¾ơ´á«¯¾Â;ï¼£v,77—;7kÖ,í²ƠƠøïÿ‹Å‹ĂÙÙ§OŸÆˆ#ÔVrSRR0pà@|ùå—Ü~óøøx̀˜1Cc]V­Z…   ÄÄÄp3 vvvnÖ|ê[¿̃………HKKĂßÿƯ`z3gÎDvv6̃ÿ}L:R© HOOg#ZƒñÄrïâE8 3++´›4 ̉K— ¿u ²́l@¥Â5k`ÿÖ[ÚÙÁsûvH’’Đæí·A ¤W¯Bṛ$L´xO«pÙ2tƯ³–¾¾èºw/Ê„‘™¬{ö)•(Z¹e<'ù*Đf̀˜´k‡sçâÖüùp™5 ;v ·½U›Ÿúª ¸““ïoOàöÍ7(;t²k×P}₫<¨̃`•¯̃Ư-[à8v,@`b‚’¸8ơüRSïÊÆÈ¤P d×.´‰ˆ ¨¨¸ßoZÔƒ¯^ѪUè´f ¬zô@›·ßFMa!Ú<(gC˜´k‡æÍXúùi8¤¶ưú¡ƯûïBáưwQE"´ ‡J.GơÙ³\›èÓ^êPÉå(?pvÂøÁ§mê¢ëÂNùÖWhcƒềLT¥¦âïŸ~‚ộe½]ç...XµjÎ=Û C`gg‡÷ß .lp…¨m'è?•J…%K–`Í5P*•HMMå¹àí·ßƆ påÊŒ5 ù2cÇÅîƯ»qëÖ-t́Ø}ô=ªæḍƠă»đ£ï ¾å›3g’““±wï^¬^½¥¥¥puuÅÀñÛo¿5¸¸̉2™ ;wîÄ´iÓà́́Üà·W ‘/ûô»¤obbb0zôhlÙ²+V¬€···†ŸÆ‹¦¢́> 2₫|*//gơmDê¢v 6ŒEæd„É3e×H,¦?ü@ׯsQ@oÜ a½(‹Ö¯¾J>‰‰÷£¸̃¸AÙÙä±b;:µ(»bwwêºw/uOM%—ÿ›œ̃y‡ü22¨ÛéÓÿD%íÜ™:oÙB₫ÙÙ÷—ŸO~—/“û/¿i‡ F/µi$’¡×oZu\¾œ`dÔh[´›4é~̃ë×¹c–AAÿD>ơ÷ç]߇ÅqôḥË̀Tk?‘½½ÎzƯSR(àÚ5ê´nfdO[[®\íçÍ#ä{₫<\¿®¡Ï·|ơG"ß´4®Ïº9£s”]³NÈ36–®]ẳ ¸v:₫ô‰Ôuơh/ubÓ§§ÛưÜ9<•_ßùjS_CH]DÔÆ¾x0wî\ª¨¨ ›fÓ4ỵdJOO'¹\NåååGíÛ·oP?:: ¨ÇzvekkK±±±TUUE‰„öîƯKo½ơ 0€ÓëÚµ+íܹ“ I¡PĐƯ»wiưúơÔ¶m[µ¼øê­^½cñâÅ-ªoS·|ÈÛÛ›v́ØA%%%T[[K¹¹¹´fÍrwwo°oë·Wc2`À""***̉ø…!ómÎ₫êÆí£G¦ÜÜ\’ÉdtôèQ̣̣̣j4Í‚‚ÚÛHtxCÈĐ¡Cé̉¥K$—Ë)))‰Æ¯u”]æ2‡´AéĐ¡½₫úëtæ̀ÊÎÎnôâd„ “§Ơ!}̉ÅÄÅ…º>M₫W¯R—={ȪG˜˜ÉóÏsŸơx’¤₫ç_́x ô˜0i©XXXPqq±†#Æ„ [Hj\µvHElS£!¦OŸ©S§"++ #FŒhѶdƒÁ`Û¶qç”ƠƠH â>ÛÑ1qqe` ›6 ªÔ¡ÜÀŸø`0€û¯89::²†`´z:tè,Z´999ØưĐVûVϳ¾BÊ„ &LØ éSÿȸm[²đó#±»; ê}ļµKûyó¸­œ/?Næ̃̃̀†™0aÂVHëÉwß}GJ¥’̉ÓÓÉÏÏï±–Y—RÁƒ‡0́Ú8³éƒÁ`<ô~9ÇOFyqwŒ= C¬[·®YS§NaåÊ•¬±qØ–]ƒÁ`0 ƒ¡W"##Y#0xaÄ€Á`0 ƒÁ`0̀!eœÄÄD'­½¬;wîdf@ÂÂÂđ̃{ïñÖ_¿~=6õÜà¹đđpΦêÿư$Ùß̣Í5 2™¬U÷Ÿ₫{{{”••!$$„] ƒÁ`0˜CÊ0,cÆŒ››¾ụ̈ËV_ÖÜÜ\äçç³Nk%©¯¯/ƇÿưïO­ư=)ׇ¶ MQZZ~ø_ư5»(tœpĐçZsưû¸'D ƒÁĐ'́̉gŒ¢¢"nÚÚ‰böÿ́Ư{\”ẽ?đÏ0 )ĂÁS¦BaÀE¥uQÄ4Q2ŬƯg=l´öZv­§Ăâ¡ÔMŸ×®yG“Åđ€¦>(å†à!MÔ¢µ°@SÁf&¾¿?Zæḉp¸ïa•Ïûơú¾^pÏ5×\×÷ºæpƯ÷=÷Üc̉=¼¼¼v₫ƯOÏ{Ú°a–,Y‚ñăÇ#==“Ưùùù¸}û¶Ư¤₫₫₫¼Đµ GHĂ˜˜ˆïdïrji4̀Ÿ?çÏŸ‡Á`@ii)RSSѳgO›ê €ˆ`̣äÉX»v-`4qîÜ9899PVV†… ¢°°z½G…ŸŸŸ¹777ܾ}+V¬°zŒưû÷ăË/¿lÖ~س¾̃½{cçÎ(((@UU˜˜ˆ®]»Z• Evv6ôz= rss1sæL›ËƯ}ÊdCGZ+¡¡¡ÈÉÉ^¯GII ’’’Đ¹sg«Å›Á`@xx8rssa4qñâEÛT®vîÛ·ååå¸sçöïß___›úa0 "ˆÆ!C,r®Óé¬êôđđÀ”)S°k×®{qR’g¥ưU3ŸƠÆ™3g7¥ưP̣üP;nJ]½z'NœÀ /¼ÀwEÅÆÆâ÷¿ÿ=ADDÔ”iAAúöí‹ăÇẳ¥Kˆ‹‹ƒ———Ớ]N­Ơ«WcíÚµ8pàÂĂĂ1kÖ,èơzôïßĐ®];x{{×ơµaÙ²eĐjµ C`` ö́Ùcq [Ç…#FÀÇÇ•••8tèÚ·oà—P̃±cbbb ƠjÍ÷ëÚµ+ƇM›6©ê‡½ó¢F¯^½PRR‚¸¸8Œ5 /¾ø"üưưqäÈ888Xômß¾}¸víÆĐĐPlÚ´ ƯºY₫|‚̉ràëë ___äää´X•Ö7dÈ₫øc9₫¼¹nqppPƯ>¹}û¶œ8qB&L˜ ááạ́üC¾ûî;qss«ó}đ̉¥K²~ưz4hôïß_̃zë-i×®êú ƒÁPu-HkĂÁÁAÆ'}ô‘ ¹páB‹”k(bccEDä±Ç«·L§N$44´̃9rdoÄsæ̀ipAZUU%Z­Öbû?₫(ëÖ­³ØvúôiÙ½{·ùÿ .HRR’ê~Ø;/j>p;88ÈâÅ‹åܹsrûöm1 b4EDd̀˜1‹̣Ÿ₫Y233eêÔ©̉£G:ëSZNé‚´µ̣———')))Û\\\¤¦¦F^{í5‹ŒƠƠƠŸzê) R]®´´T6nÜhƠ3gÎÈæÍ›m΋̉…MRR’üđĂv{áil₫)ͳ̉₫*Ïj¤&“Éâơ ®qSÚµÏæX₫Çü‡ˆˆ„……qAªp‡ƒ̉×+µÑØø*mŸ̉YJẁª©Á`0 ¥Ñà¹jíÚµƒN§ƒ»»;œœœê½`ƒ½Ë5ÄÓÓPTTTo™̣̣rœ;w®̃ÈÍÍ­ó~7nÜhđ±ơz=L&“ŶÊÊJxxxXlÛ¸q#&L˜€N:!((O<ñ6nܨºö΋ Xºt)¶oß‘#GbàÀ˜6mùTÅZÇÏ?ÿŒ?ü?üđ¾ùæ<ưôÓơ)-×ZưUZŸ»»;JKK­N³3V§ÔUWW[üÔFíßwçOI9­V N‡ØØX ‹4hÅü³w^j9::ZÍưæ¤4ÏJû«t>«QUUe‘“ºÆWi?́ưü°Em_xÊî/jjjpâÄ óÿùùù`—¯´TûBCC±wï^‹÷Ú›7oââÅ‹6lXơî̃½»̃Ç´¥>""¢ÆÔ¹ 6l6lØ€ëׯăƒ>À•+W0tèP >¼YË)QRRè̉¥K½eÆâââz£¾ŸíwƯÜÜà́́lµ)//·Ø¶cÇF̀5 sæ̀Á?ÿùO|ú駪ûaHéë̀™3±eˬ\¹_|ñ¾₫úkTVVÖY6##cÇ…N§ĂÈ‘#Q]]ääd›Ë5GíU_yy¹ƠWWW8;;£¬¬¬Ù åååøÛß₫†ZD¿~ư°páÂfËK­ââb«~7EcóOi•öWÍ|V̉>¥Ồ{>?lQÛΛ7ọQá‡{¹}jvdƯ­¾³¶ÖGDD¤jA:pà@|ươ×ÈÊÊ€đÊ+¯ [·nøío‹3gÎ4[95233QSSSçƠYk÷́₫ùç3fL½1aÂÛ’åà€Ñ£G›ÿ4h<==qêÔ)‹rعs'æÍ›‡ç{›7o¶©ÿ₫aq̃¼y˜4i’Íy¹[í‡ñúöö»¸¸ ¢¢Âb[cy3™LøôÓO±uëV<üđð¥\SçAsäïÔ©Sxúé§áââb̃6f̀h4œ|ØüÿƯ…j­üIuuµ¤§§KXX˜̀5K®]»&_|ñ…Å÷ ăăăÅ`0XÔ"""ÁÁÁªËơë×O***äÀ!#G”9sæHJJL›6Íæ¼,Z´HL&“ÄÄÄÈă?.₫₫₫O©>}úˆˆÈ³Ï>k—çpcóOi•öWé|VÚ>¥ă¦´JŸjÇMM|üñÇ’Ưf¾¯̉ØwH•Œ/é;¤›7o–‹/6øR%íKMM•¬¬,E#Ṣ>¨¦>ƒÁ`0GC5ºWC£ÑÈüùóåüùób4¥¬¬LRSS](§) ̉²²2‰’üü|1 ŕØ1ñ÷÷¯÷>W¯^•ôôt»ôCÉ‚Jm^æÎ+W¯^5_}ØÛÛÛ|›N§“ääd©¬¬” IOO—I“&Yå©_¿~’––&×®]“êêj)..–ÄÄDéܹ³Åc)-·iÓ¦z¯¼bÅ{"aaaṛäI1 RZZ*Û·o—.]ºØôQÍß'xBvï̃-%%%RUU%ùùù²eËéƯ»·Íyquu•mÛ¶Iii©9Ï:®Îüdgg[\@©©ÑĐüSg¥ưU:Ÿ•¶O͸)é‡̉ç‡-ă¦$Ú·o/•••²páB.HUŒ¯hj¢±ͱ#KÉû ú ƒÁx ¤­µ R¥åk₫eÊ”)̀ăˆéÓ§KEE…¸»»3X̀;WJJJ¤C‡\ªXđ©Ù¦&ÛáĐ;²”,HƠÔÇ`0 ¤­´ íƠ«—üú׿–“'OÊ·ß~kuz!ƒq¿†F£‘Ó§OË믿Î|<@¡Ơj嫯¾’W^y¥Mơ»¡)ƒÁ`0Œ{äg_H½¸¸8>|...ˆŒŒlÑŸÊ jN"‚©S§â³Ï>c2 =ô/^Œ÷ßŸÉ ""¢§ù×^axtêÆlQ›đÔđ`|öù ”Ư¼ñÆ÷A""¢–Ç#¤DDDDDDÄ)qAJDDDDDDÄi}¦M›†Ë—/Ăd2AD0ỵd¨ó—^z‰I­Cff&̉̉̉îë>´æø*É_c틇Á`x`̣÷ <ßøºADDDü‚ÔÅÅ~ø!¾øâ „„„ ((™™™m~@í~°¬_~~>¾ÿ₫{.1÷úüă‚ôÁ́‡-;:́¹ƒê^ßó yv,Ưïï׆?üđĂhß¾=’’’pâÄ $ó̉âbcc™æÀ/;Xnß¾m·©¿¿?>øà&ö>7""²ÑƯ?&‰‰‰̉à—Ú»œˆ—úL<Ù¢l@@€yûÚµk¥¨¨HŒF£œ;wNœœœ̀åBCC%''Gôz½”””HRR’tîÜÙ|{Ÿ>}DDdÆ RYY)Ç—¨¨()**’«W¯JPPP«ÿ ¬̉¼ÄÇÇ‹Á`°¸oHHˆˆˆ›· †zëÓétªëS3²oß>)//—;wîÈ₫ưûÅ××÷ùñ̃»¥¥¥YƯ®f¾$$$HYY™,\¸P E¯×ËÑ£GÅÏÏϪ̃Ææ©<+_%QPP Ë–-S|{cù³e₫Ë™3gÄh4ÊÅ‹­æ •́́lÑëơb0$77WfΜiSûz÷î-;w‚©ªª’¢¢"ILL”®]»ÚTŸ’ç‡Ú×+%Ï·Ú<‡‡‡Knnn½y¶ç¼jîxjx°ˆˆÔ¾Ö¾Ö÷ºÖ’‘””$§OŸnđơ¾5ÛÇ`0 †=Ăâ”Ư‚‚ôíÛÇÇ¥K—///«E¬½Ë©ñ׿₫¾¾¾9r$à…^€¯¯/|}}qøđá:ï³lÙ2hµZ„……!00{ö́F£ 2Ä70qâD,X°£FÂàà`yF³ƒƒbcc1|øp$$$àùçŸÇµk×đ‡?ü¡Ơw,Ø’—†øùùÁ××iiiÈÍÍ5×åëëÛä½É ‡¿¿?²²²àííèèhDFFB§Ó!##nnn÷ÄNœÚ<äää4XNé|騱#¢¢¢0bÄøøø ²²‡BûöíÍeỒS%y¶çøfeeaèĐ¡ũÖµkW<̣È#ÈÊÊR•?5íÓjµX³f V®\‰3fÀÅÅIII澪ѵkẂÛ·×®]ĂøñăM›6¡[·n6µ¯W¯^())A\\F…_|₫₫₫8räˆÅ¸)­OÍóCÉüSSŸ““âââ¾}û¢¬¬̀*ÏÍùºÑ‚ƒƒqæ̀F\¼xÁÁÁVeDÄM=ơÓ`0@D!C†XÔ­Óélj_@@öíÛ‡̣̣rܹsû÷¯oåj¯9°víZÁh4âܹsprrR]Ÿ½{÷ÆÎ;QPP€ªª*!11]»vµ*;{öl|÷ƯwĐëơÈÈÈÀï~÷;ˆúôécS}JÆ­öÔèđđpäææ6˜g""²Ó̉Úđóó“åË—Kaa¡ INN–Ñ£G‹F£iÖrj¢ö(À„ ê-S{¤hï̃½ ~ưº8;;›·Mœ8QDDÆkñX¿úƠ¯€\¾|YÖ­['ä7̃sçÎƯ3{Ë‹#¶î©óiCă‘’’"7nÜ;·y{{‹Á`yóæƯS{s233ªº/cǵ{çoذa""2`ÀƠơ)y~¨™JŸoµy®WYoí1¯ZûiUU•dggËsÏ='̣í·ßÊåË—­̃·|||ÄÇÇG²³³ÏE¯^½ÄÇÇG>₫øc9₫¼¹nqppPƯ>¹}û¶œ8qB&L˜ ááạ́üC¾ûî;qss«óuẳ¥K²~ưz4hôïß_̃zë-i×®êú”ÄèÑ£å₫ç$22RBBBd̉¤I’““#¹¹¹ư ‘-[¶ÈÈ‘#åü£”——‹ˆHŸ>}T×§tÜâăăÅd2ÉáÇå±Ç“^½zÉçŸ^ç<`0 †ÖÊËËĂŸ₫ô'ốÙ“'O†ƒƒ8€ÜÜÜf-×\vï̃]ïmAAA8~ü8ŒF£yÛ‘#G "VG}j÷đß¾}ÛüwEE:tèÀ=vĐĐṔƯ»×âhÊÍ›7qñâE 6́¾ê§̉ùR]]³gÏZœYpưúuÙ4O•äÙ²²²àîî???tèĐ»víÂk¯½:t(¾ùæ”””4Ûă×ÔÔX|_:??l:ă«¯¾BUUV­Z…©S§¢GMj›ƒƒ/^ŒsçÎáöíÛ0 拌uîÜYu}jJæŸúL&.\¸`₫ÿÆ6çù~àèèˆÅ‹cçÎØ½{7̃zë-ôîƯÛêhà•+WpåÊ»\dèûï¿Ç•+WpçÎüüóÏæº¯\¹‚ƠíûË_₫½^°°0́ß¿ÄäÉ“ñđĂcÆŒu¶ạ́åËX°`Î=‹ÜÜ\¼ñÆa¹› IDATøùçŸm®¯!GÅüùóñ÷¿ÿÿøÇ?°gϼụ̈Ë@ÿ₫ưÍå/^ŒÜÜ\¼đ È̀̀Ä;#={öØ\ŸqsppÀ₫đüóŸÿÄ÷ßÿ₫ïÿ®sQ>/5tc»ví Óéàîî''§zO¹²w9{«ưàTwww”––Zl3 0V§H‰ˆùđƯkµZÎ$;Œ‡V«…N§Cll, ƒE 4÷U?•ν^“Éd±­²²̉¢¿jæ©’yoOgÏÅO?ư„¡C‡bäÈ‘ÈÎÎÆÈ‘#áàà€¡C‡âóÏ?oÖǯªª²È_m®my^ <<?ÿü3>üđCüđĂøæ›ođôÓOÛÔ¶„„,]ºÛ·oÇÈ‘#1pà@L›6ͦö©}~46ÿÔÖW]]m®§©y¾ØsGGkµÏ–|-¹ĂPé›_ưêWÈÈȰ˜;¨-îˆ!"j u^ewذa˜3g¢¢¢ààà€;v`èĐ¡8sæL³–kî…A]ÊËË­>x¹ººÂÙÙeee䇬ºv´d}ơ‡ÉdByy9’’’°~ưz«Û+**È'¡››œ-~zzz¢¼¼¼Ió´¡yoOƠƠƠ8uê†lß¾³gÏÆ!Cˆ;w̃Wă‘‘‘ŒŒ hµZ„„„à¯ư+’““ѽ{wƠuÍœ9[¶lÁÊ•+ÍÛ~øa›?ÛóùÑVŸo­±££5Úw÷‡Y³fY½F×÷“KJvª©¯±6øĂđÚk¯!##?ưôúöí‹={ö˜ûáèè777«ru½î)©Ï–×·¶´#†ˆ¨Ơ¤ÄÎ;áç燜œ¼̣Ê+øè£pçÎ4g¹ÖtêÔ)Œ3...æSwÆŒFƒ“'O>p^RRgggt́ØÑ¼—{À€ơ–7puuµ[}JƒF^^^‹-¨Z›ƒƒFƒ OOOœ:uªÙçică«TVVBCCÑ¡C¼÷̃{èܹ3,XNgqA£ÖjŸ­ ÀO?ư[·nÅ»ï¾ '''TUU©jŸ‹‹‹ƠÂn„ 6÷×̃Ïæz¾µæ¸QÓv8´äC%;lª««qçΫ3Aê:3Ä;€ˆˆ¨•¤8|ø0¦M›Öà÷;í]®5­]»Ï=÷RSSñ₫ûï£sçÎxçwpö́Ù:O ºßeff¢¦¦₫óŸ±|ùrôë× ,¨·ü—_~‰9sæ &&§N‚ˆà›o¾1U[_c^ưuäää ==›6m­[·àăăƒgy»víBJJJ«æÏËËËü<´oß>>>~9ùï{ñ•¨®®Æºuë°dÉ ,]º}m®yÚØøªY¾ú꫸|ù2®\¹‚ƒ"++ ·nƯÂ×_ms₫́Ơ>¥}öỲ˜1{÷îEaa!}ôQ,Z´Ç³ZŒ*iß¡C‡đüóÏăÿ÷‘——‡éÓ§#&&Ææñ°÷ó£¹o-=n{-èïơJwØäääà׿₫µÅ¶Ñ£G7yƯ#êºÊîưj®²;nܸF/ơäÉ“b0¤´´T¶oß.]ºt±z, §OŸ–„„ /¿ü²\¹rå¾ÊËo~ó¹~ưºèơzùä“ÒW%­ë*»®®®²mÛ6)--­÷÷•Ö§tJÆ£±ç‡Ú×+%Ï7µy¶×¼B+^eWI½¼¼,®Özøđaóÿ6·mÑ¢Eb2™$&&Füqñ÷÷·ºÊ®’öơë×O***äÀ!#G”9sæHJJL›6Mơë†ú”ĶmÛ¤°°PÄÉÉI¢££åæÍ›Ví¨½Êî| #FŒ¸¸8s¹»¯²«´>¥ăfï׃Á`Ô÷ë‚”Áx¢vAÊ\0÷ß‚Tí¥aÏ1JwđµÆC5;læ̀™c̃i÷ÿ÷̣ŸÿùŸ""̣È#¨®Oé¸qAÊ`0-½ Ă£S7.&ja æïZQËyjx0>ûüÊn^7oăûàư#..o¾ù&<<¥ưˆƒÁ`q{HHˆˆˆ[Ư7))INŸ>m—₫w̃yGôz½Mcuw$$$ˆˆH`` y[=DD$&&Æ¢l@@€ˆˆ́Ư»WQƯ™™™’––Vçmñññ""̉¿ó¶ÈÈHyôÑGUçÏ̃QÛ¾󶘘˜zÛ×XƠFcưUÚ>5óJÉøª§ÍÓ§O‘€€€›Œ–‹§†‹ˆHí{`iñ"¿\éJQ¨)Ë`0 £₫¨ó¢FyyyøÓŸ₫„={ḅäÉpppÀ››Û¬å”5jê¼âkuuµêúBCC±wï^‹£B7õÄÅ‹1lØ0‹²Äûï¿ÔÔTDFFâù矷:¤´>{÷£9ú Ư»wGqq±]®œ[]]³gÏÿ/((Àơë×Tgù†v©a2™páÂóÿ7nÜ»­·‡œ8qÂü~~₫}×>µóª±ñµ¥>{«'Ư»wçK"""¢f̉àUvÛµkNwww899Ơ{ꢽË5ÄÓÓPTTÔäÎkµZèt:ÄÆÆÂ`0XÄ AƒàááauŸ­[·ÂÍÍ ¹¹¹8uê”ÍơÙ³ÍÙ_GGG˜L&»<¾^¯·ª«²²²Îǽ{A`…đƯ êÚ¿µZí=ñ$¬ªª²ÈËưÖ>[æUCăkk}öVÛg²KDDDÔ|êü¤5lØ0̀™3QQQpppÀ;0tèPœ9s¦YË)QRRè̉¥ ÊËË›ü³¼¼IIIX¿~½Ơíÿ;;;#11ÙÙÙx̣É'eË–ÙTŸ̉~ÔÔÔÔ¹°o‰₫@qq±Ưnnnpvv†Ñh´X˜××ÿ–₫=SB‹Í«†Æ×Öú́­ṽß¼y“ƒLDDDÔ ̉bçÎđóóCNN^yå|ôÑG¸s糜™™™¨©©Á̀™3ñ_ÿơ_–qt´:ƯƠĂĂS§NEqq1ö́ÙcU_FFŒ¼¼¼F@«V­B=đä“ObâĉX¿~=233‘••¥º>¥ư())³³3:v́h>¢<`À€zë5puu­÷v5ư€ .ÀƯƯ:uBqqq“&›ƒƒFƒ OOO«#Í­©±ü=h́Ơ_µóª¥ë³…ŸŸjjjpé̉%¾SµÄ‚ÔÓӇƴiÓü~§½Ë©qåʬ]»K–,AûöíñÉ'ŸÀƠƠøûßÿnơ›Ư»wÇÆqæ̀™:¤¯¿₫:rrrM›6áÖ­[đññÁ3Ï<ƒ]»v!%%0ỉ$,X°S§Nŵk×°aĂ„‡‡cÇ8p ÊÊÊTƠ§´µ ×?ÿùÏX¾|9úơë‡ Ô›Ÿ/¿üsæ̀ALL N:Á7ß|c>̉ª´}w/ €_rïƯ»·IcW]]uëÖaÉ’%0 Xºt) ¬S ///tèĐàââ‚öíÛĂÇÇP^^̉̉R›ÚØX₫Z˽̃_µóª¥ë³Åˆ#pêÔ©;"KDDDÔ&Ơu•Ư{=4̀Ÿ?_Ο?/F£QÊÊÊ$55UzôèaU¶ö ]Iô‰'Ư»wKII‰TUUI~~¾lÙ²Ez÷î-ä‘G‘’’Ù²e‹Åư¼½½åÚµk’ªª>µưøÍo~#ׯ_½^/Ÿ|̣‰ù*§u]e×ƠƠU¶mÛ&¥¥¥RK§ÓÙÔ¾ÚÈÎΖ͛77ù*»eee%ùùùb0䨱câïï_ï˜7®̃ú6mÚ$ơY±b…ÍW)V’?Øù*»JÚ§´¿j£±₫ªÉŸ̉y¥d|m™§öŒöíÛKee¥,\¸W¿ăUvy•]ƒÁ`03îÇ)£ecúôéRQQ!îîîM^2ŸŒû!æÎ+%%%̉¡Cæƒ R.H ƒÁhéŸ}!º[JJ ̣̣̣°hÑ"&ƒxZ­¯¾ú*–.]ÊÓu‰ˆˆˆÏ€%"˜:uªù;‹D²‡z‹/Æ¡C‡˜ """¢f¦ù×éºđèÔÙ "¢6á©áÁǿó(»yƯ¼MçƯFÑưEDqY"""ªOÙ%"""""¢VÁSv‰ˆˆ₫¥µ~÷–ˆˆˆ R""¢6Œ§àµ<²KDDDDDD\¤DDDDDDD-· Cbb"BBB¼“½ËQ_ oß¾8~ü8.]º„¸¸8xyyYƯÉ̃刈ˆˆˆˆ¨ *-₫QJ‹æđóó“åË—Kaa¡ INN–Ñ£G‹F£iÖr ƒÁ`´D<5À•+W0tèP >¼YËQr÷©J”¯¿₫ZDD²³³eîÜ¹âææfuXỠå ƒÁOÙe0 £Í…ăƯ‹SOOO>|Ó¦MCnnn½‹X{—#"""""¢¶Gó¯½ÂđèÔÙ "¢6á©áÁǿó(»yƯ¼ïƒDDD-Ï) """""".H‰ˆˆˆˆˆˆ R""""""".H‰ˆˆˆˆˆˆ R""""""".H‰ˆˆˆˆˆˆ R""""""".HÿMff&̉̉̉,—^z©̃Ûăăăa08c0"bû}¾ÜO&L˜AŸ>}î»₫6ö¼lμ´v?Zcܱ}ûö&Ơáéé‰̉̉R„††̣…ˆˆˆ¸ €üü||ÿư÷­öÁ—€ç{¾¾¾øË_₫̣@̀—¶öüx¤÷{?́=nDtt4̃~ûí&ƠsëÖ-¬[·«W¯†F£á‹5ȱ-t266–#ƯÊ®_¿n₫°ÊùÂ₫̉½7nñññ8zô(̣̣̣\׆ °dÉŒ?ééé,"""ª—Å̉°°0$&&"$$¤Á;Ù»œRX¶l™âÛï>E´¾SÛ DÑÑÑ2dˆÅ}t:Uùàà`œ9sF£/^Dpp°Íư €ˆ`̣äÉX»v-`4qîÜ9899PVV†… ¢°°z½G…ŸŸŸ¹777ܾ}+V¬°zŒưû÷ăË/¿´Ø¦Ñh0₫|œ?ƒ¥¥¥HMMEÏ=mê‡=ëëƯ»7vî܉‚‚TUU¡¨¨‰‰‰èÚµ«UÙĐĐPdggC¯×Ă`0 773gδ¹œ’ù̉ùS2jËíÛ·ååå¸sçöïß___«úæÎ‹o¿ưƒG…O«´¿önŸ’ü©y^Ú;/J)™Wjúaïq ENNôz=JJJ””„Î;×YÖĂĂS¦LÁ®]»́2ï¯^½'Nà…^h0‡:sæ̀Á„ ønLDDÄé/ º¾}ûâøñă¸téâââàååUçÂÏå”ÊÊÊÂĐ¡Cë¼­k×®xä‘G••ẽæëë ___äääÔ[§ŸŸ|}}‘––†ÜÜ\ó}|}}qûöm‹²Z­kÖ¬ÁÊ•+1cÆ ¸¸¸ ))©É§¥-[¶ Z­aaa Ä={,ếر#¢¢¢0bÄøøø ²²‡BûöíwîÜÁ;­Vk‘“qăÆaÓ¦M·zơj¬]»@xx8fͽ^₫ưûÛÔ~{Ö׫W/””” ..£F‹/¾9r}Û·o®]»†ñăÇ#44›6mB·nƯ¬æ…’rJçKsäOÉ<đ÷÷GVV¼½½ÈÈHèt:dddÀÍÍÍ\dzÏ>‹Í›7###aaa8v́X;*Ôô×íS?¥ÏËæÈ‹Jç•̉~Ø{܆ ‚ƒâƘ8q",X€Q£FáÀÏ£ZcÆŒA»ví™™i·ýØ1Œ;ơŸˆóÈ#`ëÖ­xóÍ7ùnLDDÔV•ÿ(¥Å? søùùẸ́åË¥°°P ƒ$''ËèÑ£E£Ñ4k¹Æâ÷¿ÿ½”••™ï7eÊéß¿¿I“&IMMxyyYƯ/33S̉̉̉¬;))INŸ>]ïíñññ""b̃#"">ú¨ª~ÔF@@€ˆˆ́Ư»·̃2 ""h̃Ö£G‰‰‰1o>>b2™äÍ7ß´z,GGGƠ}P[ßË/¿,̣ËUǰaĂDDdÀ€æmcǵÊK]¡´œ̉ùbïü))))răÆ éØ±£y›··· ™7oyÛ§Ÿ~*¹¹¹÷MNN‘>}ú¨î¯½Û§6=/›3/öœWơẴă–””$ׯ_gggó¶‰'ˆÈرc­Ê¿óÎ;¢×ëë}M¶ẽOŸ>]DD[ 妹â©áÁ""Rûøïïƒ ƒÁ`0Z&꼨Q^^₫ô§?¡gϘÿüófMVUUL&“ùÿÚowŸ&k‹ÚnơÑëơ •••đđđ°Ø¶qăFL˜0:uBPPxâ lܸѢŒ§§' ¨¨È.9±w} Xºt)¶oß‘#GbàÀ˜6mU Ÿ₫~ø!~øá|óÍ7xúé§-êSZ®µú«dhµZèt:ÄÆÆÂ`0XÄ Aƒ̀óÀÑÑ®®®V²×N¦¶Ï̃ùkͼØs^5GûÜƯƯ-vD¿|ŸƠh4ÖùƯxGGG«×˜¦ÎûÚú:e—ˆˆˆ¨ÎO Æ Ăœ9śرC‡Å™3gµ\cª««qêÔ) :555ؾ};fÏ!C† 00;wî¼/¡±ßåtssƒ³³³ÅÑOOO”——[”Û±cV­Z…Y³f¡wï̃øç?ÿ‰O?ư´Î¹]ºt±º¿-ÔÖ×X_gΜ‰-[¶`åÊ•æm?üpe322‘‘­V‹üơ¯Err²Ơ¥å£¿ö˜&“ åååHJJÂúơë­n¯¨¨0??~úé'«ïl>ôĐC÷Dû́¿Ö΋½æUs´¯¼¼Üj‡•««+œQVVfU¾¸¸Øª|Sç}m}7õä;-ƠËâéÀñơ×_#++  À+¯¼‚nƯºá·¿ư­ÅâÑ̃åÔ¨½°Ñ˜1cđÉ'ŸààÁƒX°`t:ÅÔ2puu½7ÉÁ£G6ÿ?hĐ xzzâÔ©SVÀwî܉yóæá¹çĂæÍ›­êỀ̀DMMMW™­ëH†‡‡æÍ›‡I“&ƠÙ6µơUVV¨ÿ4g‹ €F¯Ài2™đé§ŸbëÖ­xøá‡-®üjK¹†Ø;j?ƒF^^¾₫úk‹¸zơª¹\NNÅ©Ü꽘=)mŸÚü5ö¼¼̣¢d^5Ö{·ïÔ©Sxúé§áââb̃6f̀h4œl₫ÿî‹üÔÆ¢E‹Äd2ILLŒ<₫øăâïï/52 ÷ ‘ààà&]̀fܸq ^Ô¨ªªJ._¾,QQQ2ỉ$¹pá‚üđĂâææfU>((HDDª««¥[·nuÖù̃{ï‰Éd’U«VIhh¨Lœ8Q¶nƯ*Ï<óŒMQSßc=&&“I6õ,#FŒàà`‹‹¢lÛ¶M % @œœœ$::Zñ¼i•§gŸ}V’““eÆŒ̣ÔSOÉ́Ù³¥  @=jñxJË©™/öΟ’yĐ¯_?©¨¨HDD„Œ9Ræ̀™#)))2mÚ4‹çGMMÄÆÆ³³³„††JEE…ƠÅqÔô×íS›¿Æ—ö΋̉P:¯”öẴă$ƠƠƠ’.aaa2kÖ,¹ví|ñÅ¢Ơj­Ú×§OyöÙgị́< ü±dgg+z äE ƒÁhĂq¿½{zzJMM¬Y³FˆF£‘¢¢"IOO·(·iÓ&©Ï+¬êuuu•mÛ¶Iii©¹œN§»'¤eee%ùùùb0䨱câïï_ï}®^½j•»C£ÑÈüùóåüùób4¥¬¬LRSS¥G6}`TS™;w®\½zƠœgoooóm:N’““¥²²R***$==]&Md•§~ưúIZZ\»vMª««¥¸¸X¥sçÎV %%åỒ{çOÉ< O<ñ„́̃½[JJJ¤ªªJ̣óóeË–-̉»wo‹r±±±̣Ưw߉Ñh”“'OÊ믿nµ°QÓ_{·OM₫{^Ú;/JCé¼RÓ{[XX˜œ DFF6øDDÿND0uêT|öÙgMªç¡‡ÂâÅ‹ñ₫ûï3©DDDÔ(Í¿NS‚G§ǹµY~øa£e²²²đÁ0Y€§†ă³ÏO ́æuó6¾µ<₫b9€9sæ0 DDDD-Œ§́¤DDDDDDÄ)Q³ˆˆˆÀK/½d÷z±}ûö:o›9s&DÄêï–’™™‰´´´{6W®\Ák¯½Vçmñññ0 -̃_[·µ4”?5óÏÓÓ¥¥¥ å qAJt¿,Hˆèèh¼ưöÛ÷dŸóóóñư÷ßßÓ ú{µ¿mÉ­[·°nƯ:¬^½† !""¢65¢û^||<=¼¼¼{²}±±±mj<ÚZíiÆ X²d Æôôt&„ˆˆˆx~ü8f̀˜aơ÷¿ëر#¢¢¢0bÄøøø ²²‡Bûöíë,¿lÙ2hµZ„……!00{ö́±8Ơ²¶999 æÆÉÉ qqqˆˆˆ@ß¾}QVV†¤¤$‹º”æÏ .ÄîƯ»ë½]«ƠbÍ5X¹r%f̀˜«ö©é¯RJWí|ilÜl©¯±ü)µ;†±cÇÂÑ‘'°QPZü£”ÿ(v1™Ḷæ›oZƯæè診¾””¹qă†t́ØÑ¼ÍÛÛ[ ƒ̀›7Ï¢lxx¸˜L& “äädùöÛo->¥ưˆƒÁ`q{HHˆˆˆ[Ư7))INŸ>m—₫w̃yGôz½h4&[BB‚ˆˆ·ơèÑCDDbbb,ʈˆÈ̃½{Ơ™™)iiiũ/""ưû÷7o‹ŒŒ‘G}Tu₫́µí 1o‹‰‰©·}ơ×̃«f¾(7µó¯9búôé""À×ÔfŒ§†‹ˆHí{ ß ƒÁhàR;5jê¼âkuuµêúBCC±wï^‹£`7õÄÅ‹1lØ0‹²Äûï¿ÔÔTDFFâù矷:z¦´>{÷£9ú Ư»wGqq±]®œ[]]³gÏÿ/((Àơë×Tgù†©a2™páÂóÿ7nÜxyyƯsº¦¦'Nœ0ÿŸŸŸß"íṢ¸jçKcăfK}öV;₫Ư»wç *=𸠵3OOO@QQQ“ë̉jµĐétˆ…Á`°ˆAƒÁĂĂĂê>[·n…››rssqêÔ)›ë³g?³¿0™Lvy|½^oUWeee{÷ÂÁ á»ÔµkµÚ{bNWUUY䥥ÚרăÚ2_7[ë³·Ú>ó”]"""j ø‰ÇÎJJJ]ºtAyyy“?˜–——#)) ëׯ·º½¢¢Ââggg$&&";;O>ù$âăă±lÙ2›êSÚ«míÚµk‘₫@qq±Ư nnnpvv†Ñh´X˜××ÿ–₫=Sjú|ihÜl­Ï̃jçóÍ›79ÈDDDÔv¤˜:u*‹‹±gÏ´T¹û]ff&jjj0sæLü×ư—e²­Nwm,/‰‰'bưúơÈ̀̀DVV–êú”ö£¤¤ÎÎÎèØ±£ù4ÇÔ[¯Ñh„««k½·«é/\¸pîîîèÔ©‹‹›4v=z4<4h<==­4·¦Æ̣×Ö¨/-]Ÿ-üüüPSSƒK—.q€‰ˆˆèÁWßÅj/̉ØT́]îAˆ÷̃{OL&“¬ZµJBCCeâĉ²uëVyæ™gTç¥_¿~RQQ!ˆˆ9r¤̀™3GRRRdÚ´iær“&M‘ˆˆó¶´´4¹råèt:Ơơ)íGï̃½Åd2É+ÄƯƯ]† &ß~ûm½5Z´h‘˜L&‰‰‰‘Ç\üưưÅÁÁÁ¦ö>}úˆˆÈ³Ï>Ûä‹UUUÉåË—%**J&M$.\~øAÜÜÜê³qăÆƠ[Ÿ———øøøˆdggËáÇÍÿ{xxØ|Q¨Æ̣‡f¸¨‘’ö)í¯½WÍ|Q2njç_sÄÇ,ÙÙÙ¼È/jÄ`0 FÛ.HíFæÏŸ/çÏŸ£Ñ(eee’*=zô°)/O<ñ„́̃½[JJJ¤ªªJ̣óóeË–-̉»wo <̣ˆ”””È–-[,îçíí-×®]“ÔÔTUơ©íÇo~ó¹~ưºèơzùä“ÒWC­kAåêê*Û¶m“̉̉R©u÷‚YMûj#;;[6õÜäiYY™DEEI~~¾ 9v́˜øûû×;f -l6mÚ$ơY±b…Í R%ùk©̉₫ÚûqỜ%ăfËü³g´oß^*++eáÂ…|sâ‚”Á`0Œ¶½ e0î—˜>}ºTTTˆ»»{“¤̀'£5cîܹRRR":t`>¸ e0 ƒ?ûBt?HIIA^^-ZÄdĐ}K«ƠâƠW_Å̉¥K[́JDDDD­WÙ¥ûˆ`êÔ©đñña2è¾ơĐCañâÅ8tè“ADDDm†æ_§)Á£S7fƒˆˆÚ„§†ă³ÏO ́æuó6¾µ<²KDDDDDD\¤DDDDDDD\¤DDDDDDD\¤DDDDDDD\¤DDDDDDD\¤DDDDDDÄ)Ñ=´ ơđđÀ¼yó0ỉ¤+°w9""""""jă ̉îƯ»căÆxươ׬À̃刈ˆˆˆˆ¨/H‰ˆˆˆˆˆˆ“c}7\¸p¦Ñ ́]ˆˆˆˆˆˆÚ!%"""""".H‰ˆˆˆˆˆˆ R""""""".H‰ˆˆˆˆˆˆ R""""""".H‰ˆˆˆˆˆèZÆÇÇĂ`0¨ª$33iiiMjˆ-KDDDDDD÷/G{T’ŸŸÛ·o3›DDDDDDÔ² ̉ØØXf’ˆˆˆˆˆˆT©÷;¤ÁÁÁ8sæ ŒF#.^¼ˆàà`«2"b¦²«æq°oß>”——ăÎ;Ø¿?|}}ë,'"˜ƒÁ`<ñÔđ`©}¼û}Á`0 FËEGHkjjpâÄ óÿùùù//¯f]+yÜĐĐṔƯ»×â"J7õÄÅ‹1lذ:ëƯ½{w½iK}DDDDDDÔtu.H«ªª`2™̀ÿ‹€_N©mN=®V«…N§Cll, ƒE 4uÖ{ăÆ:·ÛZ5ăưÔX“É„̣̣r$%%aưúơV·WTTÔy¿Ú…­½ê#"""""¢6¶ €ŒŒ <yyyơ.4[³>""""""jæ©——:tèpqqAûöíáăă(//Giii³4øơ×_GNN̉ÓÓ±iÓ&ܺu >>>xæ™g°k×.¤¤¤´j}DDDDDD¤Œƒ­w|çwŸŸüü|üêW¿Â˜1c̀ÿÿñl¶_ºt ÁÁÁ0 ظq#9‚7̃xøâ‹/Z½>""""""RFó¯KƯĂ£S7fƒˆˆÚ„§†ă³ÏO ́æuó6¾µ<¦€ˆˆˆˆˆˆ¸ %"""""".H‰ˆˆˆˆˆˆ¸ %"""""".H‰ˆˆˆˆˆˆ¸ %"""""".Hé̃—^zÉîơ&&&bûöíũ6sæLˆˆƠß-%33iii÷l₫®\¹‚×^{­ÎÛâăăa0îÙ₫Ú̉>j₫qkl^©y^zzz¢´´¡¡¡$"""â‚”î½ƠÀ·ß~û́s~~>¾ÿ₫û{zAÏ₫’=ÇÍnƯº…uëÖaơêƠĐh4("""jQL5&>>GE^^̃=Ù¾ØØØ65m­¿·æ·aĂ,Y²ăÇGzz:‹ˆˆˆZŒÅ̉°°0$&&"$$¤Á;Ù»œZóçÏÇùóça0PZZÔÔTốÙÓ¦ú°oß>”——ăÎ;Ø¿?|}}-ïđáĂ8₫<œÍÛŸ~úi˜L&̀=[U}júQ×)“!!!›· ˆ¢££1dȈˆ9t:MíL™2»víj̉˜%$$ ¬¬ .Daa!ôz== ??¿:ÇCD0ỵd¬]»EEE08wœ̀åîîc}§BÖæ/<<¹¹¹0¸xñ¢EîÔæ¯9ằ™3ơ¶Oi•RÛ_%íS:¯”¯yÚ˜̃½{cçÎ(((@UU˜˜ˆ®]»Z•={6¾ûî;èơzdddàw¿ûD}úô±©>{ÎÓærơêUœ8q/¼đ߉ˆˆ¨ơ¤èÛ·/?K—.!..^^^Vw²w9µV¯^µk×âÀǬY³ ×ëÑ¿Ơuùûû#++ ̃̃̃ˆFdd$t:222àææf₫@ƒ.]ºàƯwßèt:lÛ¶ ;wîDbb¢ªú£~~~đơơEZZrssáëëkÛ·oÛÔ>3f Úµk‡̀̀̀zûøñă˜1c†Ơßÿ®cLjˆ#àăăƒÊÊJ:tíÛ·¯³ü²eË Ơj†ÀÀ@́Ù³Çâ”ÂÚ₫åää4˜'''ÄÅÅ!""}ûöEYY’’’,êR?[,\¸»wï®÷v­V‹5kÖ`åÊ•˜1c\\\¬Ú§¦¿öœ/JÛ§v^56¾¶Ô×^½z¡¤¤qqq5j^|ñEøûûăÈ‘#ppøÿ/ƒáááøđĂ‘™™‰đđp>|Ë—/·¹>{ÏS5óJéó²Ö±cÇ0v́X8:̣Ä"""jA¥Å?JiñÀ~~~²|ùr),,ƒÁ ÉÉÉ2zôhÑh4ÍZNIøøøü¿öî>¤®:ăøÇ;¶yƠ­(gŒm9ejÊ +9Œ!&AD+0X£(˜ÙÓ?Ơ₫H[†kÍ̀Œö$Ỉ¨9Ö¨¦É b‚Ă\j>]™úị́¢]îu×»©ï|`û»?Ï¿³ßµ‘‘{íµ×<^ ö¹¿ªª*»pá‚-_¾Ü½mÅær¹́©§ĐvÓ¦M622bVQQaüñÇ„÷ù̉Ÿ·ă(,,4—Ë5áơ´´433KNNöxḯ§Ÿ~̣Ëx%Ù[o½e—.]Ơ¹Ÿ={ö˜™Ù=÷Üẵgff¹¹¹Ú®[·Î̀̀jjj¼ê»¾¾̃¾₫úëI_+,,43³»îºË½mëÖ­ffvë­·ú|üü±ưKKKsoËÍÍrÿf¯¯™i¼̃îŸ/óÊ›óëëwîܼÛ?_çƠLçw6ưMÇáph×®]úå—_Ôßß/—Ëå¾ëĂ 7¸ÛƯwß}ª««›0ßëêêfƯß|§cß/66–¿Ô€€™v•ƯĐĐP9NEFF*$$dÊGưƯn:ÑÑÑ’¤¿₫úë¿dÉ9N=ùä“r¹\²aĂEEEy¼ç“O>QDD„uêÔ©Y÷çÏq̀åxƒƒƒ522â—ïé̉%¾'ư¾ăAöG!<¾Àû÷’%K®‰ÂË—/O8.ómÿf3¯¦;¿³ío:{ö́QQQ‘>û́3=đÀJLLTvvö„q+""B===̃ÛÛÛ;«₫æÛ<;Ç<² ỉß8p@{÷îơx}```Â×aaa*//WCCƒTXX¨7̃xcVưy;ÑÑÑI û@ŒW’:;;gUL&""BaaaP˜O5₫@)°y5ƯùmÓÙ±c‡ÊÊÊôÎ;︷Ư|óÍáÅ‹=ul‘'oú›oÆ~λºº˜Ôà꤉‰‰úüóϯ“'Oê…^Pee¥.^¼¨¹lç‹úúzjÇzơƠW'&8Øăqר¨(eee©³³Sß|óGuuuºûî»Ở̉2côî»ï*..N ź±Ç´wï^Ơ××ëÇô¹?oÇÑƯƯ­°°0-_¾Ü}GyưúơSö;44¤¥K—Nùº/㕤¦¦&EFFjåÊ•ế́¼¢Éæp8”®#GH’6lØ èèh;ÍWÓLÇo¡ñ×x}Wîïºë®ó(d}ôQv'OÔC=4a[zzú¬û›Oâăă5::ªææf®Œàê¤ÑÑѪ­­Uvvö´ÿ¿Óßí|ÑÚÚª÷̃{O»wïVxx¸=ª¥K—ê‰'Đ—_~éñz±±±úè£túôéI ̉W^yE'OÔ¡C‡´oß>ưư÷ßZ½zµ6õ¬/¾øBUUU’¤-[¶hçÎÊÊÊR{{»JJJ´iÓ&¬̉̉R•——+))I›7ousũæÂư÷߯S§NÍê4À¬ÍÇƠƒ‚‚́ÙgŸµ3gÎØĐĐơööZuuµÅÅÅy´[Ñsº•D×®]k_}ơ•uwwÛåË—íܹsVVVf·Ưv›I²U«VYww·•••Mxß+¬½½Ưª««}êÏ×q<ưôÓÖÑÑa—.]²£GºW9l•Ư¥K—Ú§Ÿ~j===6ÆétÎjÿÆ̉ĐĐ`üñ¯²ÛÛÛkÛ¶m³sçΙËå²ï¾ûÎî¸ă)ÏYffæ”ưí۷Ϧ̣æ›oÎz•boŸü¼Ê®7ûçíx}ÍLăơåøy;¯¼9¿³™§ÓÅétZEE… ÚÀÀ€:tȶlÙ2é~äåå¹çè·ß~kÏ<󌙙­ZµÊç₫æjú;ááá688hÏ=÷Ü¢YÑUv !„k$\ˆÉLÉÉɱ‹ŒŒ¼â‚”ăIæ[ ¬¯¯ÏÇ‚c~~¾uwwÛ²eË(H !„rơ?ö¯ªªJ---z₫ùç9XĐ"""ôöÛoë‘GÑÚµk•­ÂÂB}øá‡Wư±í¹²dɽøâ‹***âq]p¬ï™™²²²Üÿ÷ X¨FGG• üü|9Nµ··«´´T¯¿₫ú‚óơ×_¯]»v騱cLpAÿ=¦¤¨•7q4‹ÂÆÔd}ÿĂ ơvu¸·q đxd@A   €‚@A )`¤*//WZZÚ´ọw;À"/HÛÚÚ´fÍ?~\ÍÍÍ*((PLLŒÇ›üƯ°ơt₫i=$wâăă­¸¸ØÎŸ?o.—Ë***,==Ư‚‚‚æ´!„ˆlLM63³±kàÿ¯ƒ„B P¦»;Ë̀̀´ÊÊJs¹\ÖÔÔv„B)!„²đ3í¢F¡¡¡r:ŒŒTHHˆúûû̉°đMZ¦¤¤¨¤¤D*--Ukk«’’’”:§í‹ÈøG•í́Ù³ffÖĐĐ`ùùùáq[Ơßí!„ñÈ.!„²è<¾8Vmm­²³³ƠØØ8eëïv€Å'è¿¿ +jåM À¢°15YßÿpB½]îm\<‡@A   `.Ï—53ŸÚqv€‚Ô?¼-2}-^Ç#» R)¤ Rü_fdd¨¼¼\iiiÓ¾Éß틼 mkkÓ5ktüøq577«  @111ọw;À"ÔÓù§ơt₫i’܉·ââb;₫¼¹\.«¨¨°ôôt ÓvÓÅ₫ưpQ¿·%„²ø²15Ù̀̀Æ®ÿ¿B!$@™îB́p8,33Ó*++ÍårYSSS@ÚQB¡ %„B~¦]Ô(44TN§S‘‘‘ Q@Ú¾I ̉””•””¨££C¥¥¥jmmURR’RSSç´`ÿ¨Rbb¢={Ö̀̀,??ß"""llüÏGÙ“É]\—nUW·I$ÿÔü•rC ˆø|~ZzúÑââôÉ₫–ÖÖÈñÇ÷ï7̣x]¾ôŸáĂ7$'Ïœ9S³÷ÏÉÉÙ‘–ö÷ơëccg7ØĂ9~—Ëm‰₫©ù{ÆŒóCC¡ ZÇZ±råy&sÎ⨾ă8:*<­U‘¿3£—¥…Z²* 333wge}äë7wqtWõ*1O;ôèóÑÜ\(«'„BẤ¤£ÅÅA¡a£ưưÜÜVÇ©Éß™ñø₫=µdu>¤Ó§GDºQ‡)<­M"a8₫Ç©“·85¿æäèQV¡ bIiié÷+VL ôŸ3W•óYơpwûeÏnCL&sAxø¸©ÓgD.t “Uyÿ†º[i+–N¸>)É@B"Äd`±Xß,]J2%́3k¡ÛóYµ|ù¢đĐ!‰¤üd6›=w̃¼a£èJœ‚ôqnN»22º}(¨ͦ͛Oû=vëvƠå\Qáÿ1Ïçưú«’°;3sÿoyk³öÚØÙ©{a‡³v_>}ê·Ü\Á„ưÙÙ™ûö}½~cW^iWüU^~́—=G¦P(]S\\œ´yóô]*J©4g íÍúeÏƯg“@AņµëÖưÛ$ _¾B³?GzØéăÇjê’˜˜{ÍO¾̃°QăËk¨»•¹.aï» ¦B LÔôè™3_¯ß¤cªĐUƯ“˜pôđagggùWHK;^vvEÆ.Í̃qU3VÆ­‹ ‚‚;b±¸´´”Íf‹%’K—/ÆŒMêÛ—N§“H$uUgíºu> ]«Í%Ơqjv®\qêø1é&‹§Î˜áá3zfä"-o¹U$Ú½j*̉3)--e±X€ß/\x{yÙ“H~~~D"QƯ4 DMc·l׿zy¼MÑ_üơW‹ôYxx»5á˵봼ß6‰d{́̉åK¾Ơ¥¦ö8AÍÉÉÉËÏÿ_ùEúøñƒ=<¬ „¡^̃€ÚªÊg--7Ù́VÑ“mmkâăCBBT™w,..ÎØûóÚ¬½Ú_[§æç¤u”—£Ÿ» <üƯá´ÉªÍÈBM…@ 20Œ}ÙÙgËʼ}F»{z<é>ˆµi‰8W¯¶I$B`YlLdd¤*ó,kI\\̣₫\ƯGi?ruXÈŸW® Ÿ›˜Èky‹É½ë^S{ æää¬KLúNÿxÊÔ¾~JÎl¨»U¸'ëZ93$$dơªUJư\.7xî§;µï[yé¶}6$'²³³‹JÏÄnƯa#4̣x›£_ºX®—{¢K)MHL|çƯAăgÍáë§ÄF5̣xÇrö3 XŸœ¬0 ‹Àçó'úû'îÏU7S¤+ι} 7Àd2ăÖ¬M=X€a#´D«ĂBN?®ä¦  ª—Ë]̃ßÙe₫̉XƠ§¸[E¢³…G˜ÅE?íÜ©pr[,ÿwÔ¨ïÓ2Ô“W>¤ Éưùg"‘ˆ­T+́ÁÄôàóù ÂĂÛÍ-B—ÆtµÔD¡ña8~27;!>>44Tá9c}}g~ư-âăbźÈđu+–Óh4l¥¥UÁØưăÿÊË¡ b@vvvÆîƯ‹Ö$ ¡] ‚[c–LûñÖÔT™—̉̉̉*8µ_ië—÷w,‹`+Ở¤¯ˆ› Mbb ‹÷>‹[¡<§Ä‘ذf@_»ŸåỌ̈1Œô={1™̃’±±É Ă{÷ệ]¶R"ùƒ‚ª9k×­c߸ùÅÚu¬6‘æpÖîªó¿Ÿ=sF:RÚŸBùñd æă)@TPÀ¸O>™¿$§fi“H¾<áÏ+W”D³!ˆÑ±?;û—¿i°xO†³…GNưṣØ[9’#Fú<~f‰r¿\Ô«wïU»đk™o§8€wúˆ)ÇG’oc·n×RMŸF}ưyüO¦O …è`êå‡Öqj€™~j °&fD,Ü,çsC £VÓ£gÎ¬ÏÆ j:yÎÜïÓ2B,¨¯¯G°Ù́–gÏđPÓ& ®–ó¦É"̣„.MHLÄû˜¬ .‰‰Ñ~)‹4C½¼g³dΧóºÏ ‰‰¡KqѼéi b—áƯ>SÂ>;Z\̀çó¡‚@L€̉̉´_Ê"“›ûâä ³?ưñ"14§̉ÊÜ=ká"̀“EdăđÏíÛhU}(¨êơ­‡Ïc₫ø=é>>Óg,g0ï¼;HơÙ~µÜS>7Æ?ï&‚N*b2/;‹¡¢:ÿûås>Çb±₫¹}»Ô$\*+¶@­¤'Ơ•Åbå…/_‰Ç›ûN›îàê>gîÜÙ‹£đxÿ£û÷ÍZ¸H7 TĨ¯¯_“˜‹OÈñ"Æ;cáx¼ÿɼ₫sæâíềI55Aåóù_/]»e;~OhÜÔi}lmñpOÛ$’Ëegü¦M×M[Y¾S§gggC“)b±xμy1[¶iŸ)̉>₫VVÿ;7/+<0çS5W`èǜ¬,(¨ª²$&fÊçÔSVjV}â$<›yâøhÿƯ Öè“'•Úÿë’’¼'LÄc|R[UéáI³Ç!³UAqtÂƠ\Ë0Ú?°O‹gi8=ƒÉd²X¬Kh&-€:tè@ ÅÙÙ900°Û5L&óï̃bœ=¼jVN‹¥.—™ưµ.Û|¨—÷>¿¾¾^7eD  ‹ÅB,ô´‹‹³³«‹ …B ́ö[ÉårOœ:½£¨o‹7Ÿ=•/—•M ûL—mî@&vsg2™8mD£ÿu¨ #/?¿đđáFB£}@ó’]4ÔƯjß¿•yD"}¡p-‘X,₫Ø×÷ˤơ¸ÖŸ}́³£à£ª6‰D—î)Âô4ç¾¶ÉIIĐÀA ºñögg>|xȰÿ|@óB£I¯riäñø¼ÑăÇ–3ÍYPP`hHHWÖr@À„°pP¨O—oßÓ$—î-^Yá₫uö¯ø”Ó›‡*‹333S¶l¡zy™2ớÖ O“öên]+g†,X@vpØœ,ÓÉ233]‡{â­¦<§…îû`´¿ÿ«V@A…@đ)'̃ßÑq¬ÙG׬ëöû̃Èă]+¿·f­¤µeCṛ̀™3e\‘vs ¼Ơ´U$jä5àdWơdñÂ7àU2I?jqqñ̉ØXÿ€9‹£5Xƒ\ͪÈß™!imùyÏtă¡Áï9§,À;_Vx¤U±|û&ó%o“HBG~ÔÈ竲µÑ‹ơé¼étµÊ‰£Ôqj̣wfÜæpöîÉ DâQVWKegÎIÚû‹)=ˆqc₫(/ÇcKתX,^¾råÿƯügGCărtOºO§fI\\đ”)«ăă †+•ªƒÉmä£M©oYœ¸\.ÜÓ ÁƒÍ))EGµî»Q‡­ÍÚÛÈă­OXsÉ\Ÿ”ÄårMM:°EîÔaî놙Øq§c³ÙxªN³|ù|₫Dÿ€N{‡µY{µ/åF–¼?—sï₫X_ß„ÄDœ†Ê0ÀÑQ—9iºÁ: ï"HD(N1ƒsï₫EÅÚÛë³s…fæûú.½8Z<ÍxÏch>Ow‚ZZZ:fœoÈwßόĬp5±|åÔ/7>à· ËäyÏĂ£ *‚),k̀8ßQS§G`ZdæÓ¨¯¿LZϽyó₫`#k†+•ZYUeÄ‚úCZÚú­ÛvăQ[ù£±ẳ n‹û¾Sû&ƒĐA{²²rrr`S@ ˜ŸŸ¿$.nuæÊơ¹Q‡í=sî×´×Ê™°©5q!Üß/-)IKKC ³™ æçç—–_\Ÿ‹Ÿ9ÀÑqsî̀ơÉPS5`°»û;Ê‘’̉Áï9CY…@´„Éd₫øË/Éûsñ –ÚØÙmÎ=p*ï7¨©ĐĐ 33³ Níû|€­¬ë¦oÅâ¼5̉Ă’ö₫5U¬ Ä/^,Ûº=å`Á‘’̉©3fH×Ö€@ ªĂårc—/_¾ ï5!ÖÂê]?AMƠ¬éÚÛÚ¾Z»nG£‚S;Ñ?«’ææ¦Ñ·PM]¾ư‡Œ5«›ØiỘïÑơµË¶n5uúD.— [Q >Ÿ?ÿóÏ—§ï̉MJ‡5·ư‡éi u·`ăk`ôÈä¯Ö® ùîû‰₫₫,Ë UÇ} m¦èu‰›—|Ó&‘ÀN£Ö7m1ÿ€oS·†,XPRR[Q±XÙÙ)l =¢`Đ1” ¸ÎªÔüơ'`ñÀ• ¿£Ç‘sÎc|§N{­%ÓĐƒ(£'û#?ô±µ•Ç!?ØwƯ&O[ZölÚ@Ÿ4ÙÑƠĐĐ ©aŸ~Ô—>ỵQ˜ë éÙ°Ù́–gφzyCs§¢¹ëƒ»T1D¬/Fû«lñ°Ô£ÅÅ#'MÖÍí!‘üƯ?Ê—Å+‰Î‡-Yz2ï7á£GH:ܸO¦̣ví>zt2ï74 ¼Úud̃¶«ÙÔ°ÏA_W×€ŒYç΢C6$€#Ÿ.oP ợ~Àçè/¤'S̀`ŒäÍêæNÚoFÿmØ—Í:w–‘›mÈÏÚĹæ®bÔA­b³Ư¨TƯaÄ÷q'ó~c)‘É<°®̃Áƒæ8W|émư Bzry@Ÿ4q%QŸ=¨œƠ»~úbƠjùñ4ÈQơă†Ă}ưÔÊ|ƒ@LŒÊª*W]Y<Ó0w ¡Oœ„H»?n¯±ăJT³xªP(¼ûÜĐm(uñ„„E‘̉—¥l\8qÀ»}[:uMA,ÅÅ€Œ× >̣?ry¼N*?yùù9¨œñÓ¦÷±µ]¼&uî¬BÉ O,ó• Oœ·k§fëÏtÆØ)Sóà4*¤s±¼\gƠ‘LÀÜué‰]¾„z·†Œß´éùù*M£b ¨l6I«Ñ%A!¡2C§ÿól^̣Ídg§È ¾€Ù‹¾”y!‰à¯z˜«+ú‡ƒßư_æU/ŸÑÈj$$‹,qé7^Å‹DB+eEGä_Bâ½̣uJè|đvî€âFv½ºZUHϤ¾¾̃¶o_;;hîT4w(2Å’¼$ÿÙs ü‰pt|̣D( u!¨,k¦ă;́ck;ÿëo¥ô4(û|92Ø¡O¼óè1´£D|‡t²g­­èùÈ̀|Ø’¥ÈTA[[$ ‚G ơë÷}êVd0ˆŒ ¿OƯ*=¯œ₫ƒ-^“p2ï7ùÅdH\W~ âáIơµ±³³&ø|>´­‹ÅÂ;ÉÄ̀]W„-Yºóè1dAªóûû\.·ÛÓ0Ømî~ÚÙơÚâ¯fΜ ›̉Óˆ‰mïKµđ Ø=‡=Öù566wơÊ•+:¯Aôλ®®ªŒ× ÓărE´x=A®.µ*X°{Áñ̉ƒµ/l‡gñÈ‚Æî-¥–Ăçóûª¶·ÁÖ6^ó‹{Í/n?z!h}‰ôr²²¶£\­É6ændKØJZZ<{˜2ÁIP…OôVy¡ÄdàèØp÷_؆¯ùEQåó‹ÿ´U5´+VÙÛmp₫)€`iæ;„0ö}+ß÷ ö°ơ4đPaL®g2hđàúúzgggơ₫ưû”á4ØÖˆ‘tt¸.οú¼+íê¯Ê8â2€ê@«ˆÑ½æx÷‚©–‡j÷Î;° ¸j³PèÇk=FÏiđ{°ôEaåóçỴ̈_hó&œí+Ú·•µ.Û'lT/‚¥lXU,M_l‡Ƚ»w•»§fùB4£Uô¤/ ¦fẹ̀›’qÛ­(i©¦(‚–—O·ŒÛ₫(ïê3ؼƯ js3LJê‘Od×·ûçn[ ¢Y÷"‘à8]§ˆÄ+D‘¹B¬¤TFVµ̀ÎjªtÀ¦†@dx*ơU!2S₫ Đ$P(S½»˜COdRdQ\É–dÛ7ĂPåÍV5´Çz‚‡”Ê|ÊÔ›ÖN± ÙvrDÊâ=@‚ íI/"ÑTïNĐụ́Uf,"«K3¯ÁV̉G0Ñă¼«Ï6j•ttêà̃% ÇZ®̃iß:ÛΪB m Q‹§­ º8;7̣x°¹{|^ƒ«‹‹©̃QĂ©IG§Œk©Ç£œ­†µ¼Œ×pOø’'|ă¤JÚ;ƠJñU×Åu‚Ùá$iù‡\]\nó`;ô4y<—î2’ ‡ Ñ»\î¬Å_™® ¾̣̀è®Ö£œß(\‹p´k¬—êê1Á̉lñØ̃KïÀyĐ!¿|ăj·¼¼ưöœè•ú·®¿NĐ!hyÙÅ[µÏ̃Ótp‘=\® Ü©­ăå…£  …Ẩ̉̉K—.íë†ô8nqjh4“]<ˆd:ˆ1mTÿC=C)Ñăª»í]ríˆæYŸơ¥»X«uåÔ~£]×((«Æk~1_3ÔT±X\ZZzêô龃akô(ÅÑ‘—¢öNæ?}Æ´4¾G]†|ë¬ÛmÈ?^ó Đ 4WS³·ÿiä”+Ảѹâ¨Èä{xqqñ¯‡Ä¥ḯªJùG§F¸µÇÀtkôŸ*‹MƠâÄu±L|ÛàóùóógF.‚ßtB“@Pͪđ{-‚Ó""»ÍéRP—ÄÄ|¹vlSJYa¡ÿœ9诓ç̀-((‹Å&y³ª$úÊÄf{OµØ-_¹2li,\₫Aa86Æ?ícüX,ŸÏW[P †Eï>¨/ÔVUÖVUÎZøzÄÆÎÎ:ŒÉdäư¢å|[äB¾°°-€ó ½Œ#1™Ûa³Ù×*+'Ï™ Ÿ,¡‘Ç;™—·hå*éƒc †Ú‚º)%eöâ(ئ„6‰$cÍêåÛwÈ9iR±̉îe¼h\Î×Á©dàN¥u‹M))³GĂo:e[Üw1›6ËD,FM\T\¬ r¹ÜÇÍÍpf‚r =ÍoÚ4ù•́£ưMUP@“m› IDATơUΔdäj“l2NªP(,g–ñ€ßtÂɼNnị̂1ZOºO5»Z(ª!¨Ù99gÍm A¨­ª¬fU„D#ÿ’™<ØÍƯ$£¾Êk; >Ÿ‘æ+IÓƠf¨*’í¹ <ë‚‚‚Ñpö‚ĐÈăƯ¿?z]¢üKÖÂ??%Q_‚Ÿ_à“{!€®ƒ½(O™’_P`‚ª̉,_“\…©å7%&0ªÈËÏ;e*|…Á^)‹75/?_UAe2™ưáÚSB«H4/úk%eK‡zy_®¨0EAí>ËbNj}}ưúz˜€ A]¿iÓ”ô‡¡^̃W¯\QUP/0™ĂF‚Í Ap “Ç+ W¸Q‡ưsă¦é-ÑïnFĉëÆưè™L&TS505l’ĺ́̃éߟËåª$¨•UU®T*lVˆê8¿ï̃U÷2r'µË¨¯É̀¡Ê߬ºđ_u‘‡*6û=ø-†¨Î`7wUơÊ•+0¿¢Nn&*¨]'ú̃ª̀¾­jqêºçú^®¨€¢ﺺª$¨ơơơÖ‚™ › ¢:ï{zV°X¦w_0ê«"Æơ‹Å7oÜ€Åî!jñÍëR‰#o *›Ív‡} ¢¾‡Ê©­5AƠÈËùê ‘ø¥‘F}¹\î@''¸`¢ƒƯÜṬP…Ba¥ûA ̣¸Q‡UWW›¢ v™è‹Ö‚Z‹på¶Q ªP(´±ë D]¢áß» 31-eºWo[(¨ơp “¦w_JÊù’m´Cmkk»|ùryyù¥K—îß¿ÿøñc¡PØ»wo‰ôÁxyy=ÚÂÂ8꟭m‹™h¤‚ -Dmú èÏçóå7¯”Ô^¶6°± €[9ßÖÖÖ½{÷îØ±ă₫ưû2/‰Å⦦¦Û·o—””l̃¼yÀ€QQQß~ûm¿~ư ¼­8ÚEâNÔ§7"A…19†¼5Đn†ă5ˆfÎÜàÁơơơ&vSx”󭨨:tè÷ß/¯¦̣466&''çääàwÚỘ•e„Q_“ƒhÅÑI¡Å{[P››áŒ‚ $Ë÷ͪ:[¢₫üóϾ¾¾<O÷÷̉Ơ:A+fÎ÷ƠúvcT“ƒà塾ûî»M‚‡°Q êâ@î¯|ß]£ôP_‡|å+È÷³Q;¶yâĉ¨¨¨övŪcgg7dÈaÆQ(sś¹â´ƒ›±{¨ Eôø1ü₫BÔÅLVhñ̃úêR x̣v/ˆÚX¦W}đM–¯ÖëPÿùçŸùóç¿|)û>_|ñŵkׄBá7₫₫ûï<~üøäÉ“¡¡¡ÖÖÖFÔ\È4ªÑ ªP €ß_VÏR¶{1ËacA @*ä«åg€„„„ÖÖVÙA®½=ƒÁ7nœ̀q‰4eÊ”)S¦|ø°̀Assóââby5•fàÀ0"ןó ƯNrA0ă­¯³³3Ÿ×¢.­¢'$ɵ—⨯Z•o:ÔÙ) ựË/}}}Uùs"‘¨›¡ƒöorç‘‘Ơhtvv¾w÷.ü₫BÔå©H¤Đâ™ËŒ×5ÂñDA™¤ ¾‰új‘ [VV&pÙ²eæ‹cX®tƯ#&£¾¬,¥̀XØÔ·I €ơñ!jñ¨ñ!…B1đ‹ä<è¨tÜtỘ_ §ÂÄT/'+‚•€:ĐîbíH²à _h<*‘H₫üóOyÇèƒ>0½nÀy`|+g̃{ï½F^´xµh(¶x–2¿üYÎôŸ36DÙë&2©.¬;m§®K8Ú«Tµơ虬Ûm[gÛ-Đp¬%æĐê@+$ØÛôô•¾̃ë®–¯@ Oîưè£L²Z^J::u°DC> ú³¼îàQ‹6‰D¡Å3—ï^Uÿ»Û ¢Î`M@0ÀĐ®jÿ¥g£RóiλúLu5•ƠKdá)çA;ëvëvÛÍFUc›EáDĂ/%¨1F·[@P` ´xué*&'+¨Ơm l2ˆ´K$D‚¹§‚–—³³6nÑ~¹KËëïA?Mw₫ü¹üAĂôæ{¦ ̉ét>¯N£BÔ¢«˜œ¬™ ‘Hx|P[U › ¢"wën}àa(3‚¼æ³÷4í’Ê z₫J’5N‚}çwä …Bi.ùé´Í´ßf́È<ü"CT¤¡î–û! _R`&f³Î…­fŒ\*;³oKª?´Só‘·ALAI::£̣`è$¡¥z»ª…ÛíF4 £»wîÜ1Ac¬÷ŒpƒØYÁÁWÏA‹g”Ôqj¶Å}§ăê-‡F£©*¨]„ă5£dŒ@;Û¤¯¾h‰t×½ª«é£FÂíç]ym¢)êÀi¼ªƒƒƒ¼¦^»v­­­Í${`›n¸îççÇ©¬„ó\ƈu˜'Ưguø]ío²Ùc||TTaC‡^*;Ÿ–1ưÍä9sW‡/hÔƠ®&·85]×t́î<ÿ'Nă¯™™Ùĉ²[o?₫¼°°P—ƒ.¨Åíç­u‰D 9•÷´ƈÿœ¹‹V®Z¾ S£›O¼S«‡ Øœœ¿3>*ăơS—oß±-î;hj«HỘä‰üÎơº§Œ#Á<€‰Fɶ ”?¸iÓ&ÓÛNç*`ơªUÇröC'ƠHêå½9÷@ÆƠ u·tđqÿÔü­ ̉h´̃̃g ÀGe¤8¹¹G¯KÜ÷̃±ßڪʑ†ï=W‹‹5D·àV¨©ª́‡̣î»ïÊäp8_ưµüUÙ¯î?ÿ”—Ó~îX®K(JdDÄ‘¬Lh:Œ2yÍ®Ÿ2Ö¬ÆÛ‹h¨»ƠÀ€® Ău9î̃¶eK̃Ît8d3^ܨĂ­\•ôƠ¸>DĂÉH*¿‰Ë¬$Ă$Ûh5%‰«W¯–?=kÖ¬®ö¿sçÎwß}÷á‡^»v͘µ½ÓH¿/kâăÏëgŒ—:đ"”d$)T …2+8Î+{$dJØgÛă¾Ăï#8W¯ú©VäWDâǸă½¯ơu S­‚ø2DEEùûûË?v́Ø!CæÎ»{÷nƒqêÔ©_ưuơêƠcÇuwwOKK“èjDk×ËÛæ2:ˆDâw±±…{ “jÜ^ļè¯7/ù¿¨¹zeâøñj *`ơªU%§t–ÛÁƒñÓ¦.œ8Ç›7  u·üüüô/¨Ï_âưÎ$Íóz,,,>¼=v) ƒ5Që’eîÆă!^.+ư$(Èê₫à7u'å¡*CUyÙeß¾}/^¼¨ĐO…“zî̀™½‰ ºÉmàD̀¦”‚̀Ưx¸‚Ơ¬¡J6é&Îắ́œưó̃í±Ku¹®‚-ḍ¢•«đü₫qêThHˆ!Ü#~‘FtU{®_¿~%%%©©©*₫IŸ>}ÜƯƯaÖ$©èđá=‰ 02g¼X1›6oĂÅâ UrB÷'4mëÆ Ûb—@M5^FøúYØ®-näṇ̃x†ïà·ĂI«ä•ï;‹¥œæææ+W®¼{÷î?üàăăcee¥đ4 ‹±cǦ¥¥ñx<%ñ%8;;çüüó¶Ø%02g¼x̉}ĺ́°µxmÉgJC”º–ª¼‘ŸŸß˜’’¯§¥eÀ”±Ë¶Å}?Æ?«7d8b w§q%#Ơ=Tk;(ô;—-[¶lÙ²gÏ]»ví₫ưû?~̣äI¯^½́íí‡ 2|øp[[[´æµ|Mo¾ú*ú“À퇜Ü`„Z<¸TvÆ? @ù —J‚*‹ó "–¯ˆ ùtÑÊU^"Dg¸Q‡Q/•ÁêñưïÔ‰‚ äîđ«¤<ËW˺Á½{÷öƠkt‹ø%üj(dç?~¿zÓ’o§†…M [Ä-•ZVx«í½/:»ø+åç¨$¨?¤¥ùN›>aúŒ‘~ă·Ç}w =mÖÂEp̣ù³}B¢¿öŸó©5&C‹VÆ/ î7mºö®Sóø₫½nç_ºÿóùüƯYY{ÏØØÙ%íư¥Sstÿ¾Œ5ñ#|ư\©Ô¡^̃ÈåR8:§hÈC6;»jV…'ƯG[‹³3W÷”Ëå–––̉h4"‘H§ÓUº;²%‚Úe–ïëXi†F„é®Ö2G¨­ḍäµ™lcîF6nmf±Xl6»ººÍf³X,ôxZZ\¡X,^±jƠ"x̃̉Èădî>̀“îăáå…|d2 2d²;uصr¦ö^D₫ÎŒ ÉÉƯÖư—ssjꌈ…̉ ïF¶|û1›R®•3ë85Åû÷!µx†ÓéŸÇ~Ÿ¢!ă?gnYá-Uî)…B‰—®v‹¸/t:@ Đh4‰äñv₫:ÍѲü&öe¤æP±̀{bƯnëöˆ*,ͼËf6y9YY¿íNëlßoùØ;›ÍF”Éd*ü+äÈw$33ÓÇ?@:Yd€£c̀¦Í1›6_+gÖVU-<‚dh:¹¹ÇlÚ ­!3yÎܳ…G´TƯÓîU,#ƒ5¬ „1₫p>Ơ¸í°oKJ›D¢M o÷@"‘fΜYPP€Al±¼Evvv9sfZZÍÉ +‘ttJ::‘,bœ¢ÊZ^VÚŒ9999‘‘‘ªœi8Á^À₫œœoS·*|i„¯ß_?hFŒˆ1₫;×Ä7 Ú¤Óªèv/¨L&ÓÉÍƯĐ2{y<>¯ö… x…ØØÙỷ}.•A*(¦{0õ¦̀C•iˆˆ¸qăFjj÷;̃ʸœËå>}₫Ü:̀ Z)I{—BĐ|WøÏù´¬đpH´†ơUwO»Ô}ÙÙăgÍ6´üaŲöVa_’-́L2ܼq'|ùjåùb¾Ó¦Ÿ-<¢± êÀ=E $‘HB¡PÉ9ÎÎÎ.\@¢…vD3ê@+l7%¨­¯µ—́cj‘’’̣̃{ïEGG‹‡“3qÖCkÆœ­)·®ÿ9`@?Ø£d¸ûï=ßàyʧư¦MÛ÷½Æ‚ªº{Ú Åâ²3g"7Ü$èÜ™±̀Ïï#ØŸdø<|}·çx̉}4®”—‘>wÖ,Ư$÷‰Ä¬¬,åj*½ëä¡Öxj·å|é®Ö‹Çö&X™º.É»ú̀{-F«l‘dß'**B¡„††*Ùÿ5555))ÉÚ!?¿ å`¡=33°zƠçÓ ‰“!)iïí'Ư»°¼†V‘H¹#«³…Gœú“U/®¢́[Äd2‡y3ÅM ;»NT¯fUÜúëêƒ5m‹Å¥¥¥óæÍëê‰T\\,³±ù¸!¸ôUåå|©­²ĂI¾Ctë 3lçx÷2Æ^•óm­¨dỜ™3Ñ@‚‘STṬ3ƒÁĐc#p¹\K‚5\ª`zx̉}ªYê₫UCƯ­S¿æü¼gê¢LPÙl¶³¢ư1 =°{5 û7m8rè.Íf»¸¸{xxÈH&ª¦.\w”½œ¬đ¨đ€–RXÎ×wˆµtáĂ‘.V=¹k)܆@§Ó+**>ÍÄÄD$[›Á`ûøøÔ××ëåâÙl¶¡ÍB0a8~]j–*´I$[c–:¤ÖæÊơREÅ4/ø0`÷lỴÓÎJ¶YÀÈÈH>Ÿ/‹·lÙ"_9“H$–””tv6û­oĐrB Ëù¢ëjdÔ·‡ j×5 =<<***d‰DZµj̣srr2€ÅbíQÇ'À ë}OOh  ذfÅwË<<<Ôú+e‚zåÊ•¡^̃đa˜îÔa·Ô ùæe¤M¨³̀$–K£ÑbbbÂĂĂeÔ´¸¸XI©‡)b/¨÷„ÊÊù¸.æ<è@Å5§Â çPí-è®Ö₫Tb̀„>1ú̀Æ:@­|£r …ráÂ…ÀÀ@ôˆt§JKK£P(HÚ¶î¹\Q-IâF¦Ö$×ÙÂ#öD‚‹¾¤é2)‰ÏçwvvÂRø&ÉGÇf@ÅƠ¨§æµ?løa;̃WÅf³4 ÍƯEfƯh4̣¢¦̉æXê@K/'«ª,S“DâÎ×j¡`‚P̉Ñ9ơÇÇHå#Îư‘TÇu#[’mÍÉ6æ®ư,¬_W~đr²ÂoOU”lk6ª÷₫K˜9©¼æª”óETÙˆ Ù|MËÍP%¯²ên{[Gç=áKđ…èy'¡´çƯ¾¸„ÄăăăSSS‰D¢üª ‹ÅpƠ¤-¹I 9Ø*ư²q}cưÓÇ«»BF=A%‰]é9Äôh¨»u®¨èâÉă?ïÙƒ« æ ÊÏÏWÔ€Y^D Mô%ÛÓ{Yƒ×[¤¹’-ɶæZª¦HüJ Ơ¼ưè… ơ¥ åe Ă¸z‘Ù·år¹àuñ,ü•H$¶A‹×chäñ˜'—æç­OJ̉`yŒÚ‚J"‘DFƯd^^óÙ́›¦ñøi´!UU1|C{2¹Y h¨»Ạ̊Ñ<ê@K*±Œ#ÆHP_E}³ĂI¾Ă+Ơ¼r» PËdÚ~pÚµ9.U¢̣óó}||/^ŒV(ĉÔ*zb́ÀdŒæñPy¼Ke¥ç=µ„††ü_u5¶ñZ*í^Æ-¨löÍÎÎ?MĂT™™ưÛ7”<ÎùëÏÍы燆ÆcîP …RUUÅ`0Đ%§Ø²tB¬•×ü¸t å%2‘Énh°yHf†)Ç‹Ѽ«ºƒÚûUUUx_¿ XƯ7§âÙ9®Ä@ !i²2G₫8RMIáŸĐºøÎư§[ _pß ((ˆÅb °qG,D";ö₫$P7¯±ñuä˜o7¤@Ó„­"Q¿~¸o(Û¥ :;;· ÓăYK ÉIoû>–——#?¬\¹ïÏZ:¡Ï‰ëÏ5ˆÇÔ醮ª7 Uœp%000---$$'Ë8Úǧ¶ª–ó5I8ØÛëSPGûøp«ª  $O=¢Œø¯¾>=---%%¥´´¿ T;¢Ù̉ })®b1Ç»×ÖÙ&>q…&˃,Ô‘?W’æà"{Á̉̀h.úÖAȋߛûĐéGJJAØhL̉CuƠ¯‡êC§ŸƯº > “¤Y'%‰D¨)BØÈ̃ùWÅX É VKêĐê»̣à=Å+hy‰äñ:Ú[p¼ơAndKœê2Ê#  FnnnJJº%´”C§Ó×õ ƒi+?¦|0DŸ‚J§Ók*ÿ‚OÂ$i“Ht¹äTôôtdá)&Kè̀̀Ư¤mm7ơÇÇj½3RW₫ø•.*â"eŒ¾¤û½hđ€'|*ÙÖđy˜ÿÔü_Ñ%ˆÅâøøx±XL"‘››µĂÎÎN333333åJh6²w̃UÙƯ¿ÑH¬;mói†C™ 6¿@„S~»‘.ºTd÷!đz]l™1cÆå²3₫sæÂÇmbÔqjhñ«ô)¨€E‘‘G)T̀Kr`^¢¤o ~ï=ÜS@```qqqTTÔ¼yó0|[DJ‘đoW,Í2æÁíDà÷>üƠư'¯U¦"u •º·iITTNÆÑÏÏïÉ# ¡Å3jb¸§§>¨•H$ϜəƒqqéO´Åơ·D>ÔK5|€——×Đ¡Cƒ‚‚0D¿BuME¿K3“́œóúüÂ^æ_´ol=Té¯Ñ\/*̣ …èEXA¡P"#"deˆjde}ñÅFC¾ÂÊ¿tăB¨4Tß¶eËG̣đö†]P[{§«ă†úT³*ÆùúêëÓù|>ŸÏG̣’´WS éEƠ´ÛØ/u eÔ¸̃çß üÊg®#^N ¦3±*(¿”tt,Í–fd[s$‚íO%èetB£Ñh4Zß¾}ñX ±&>₫ư>Íễêùó×&La€×¦ËL••B¡|[¸' öÀ©S ?çço ]ƒ7 A½p´(vñWúútÄü9;;c¥¦¨‚J¿Ú­¦ÆL´¹RßκƯ&½Œa‚Nͪ‚Bm#Û¨áD*¯Z̀k~̀Iˆ NùP?¡́´´4\{鮌Œô„5Đܽ₫B)ØîæÍ8†ë9g˜‚úûÑ¢…ºù,U'“¢££ọ́ ^¾|ÑĂ;ÖÇMh6m\HHÀÁƒgNœ¸ظq_\Ü‚¾}m ùú›‚:N æ»y«Î;w°û’wÊ‹+*¢Ư–zÈø´ïÔŸ«»l†`i¦oÅ+ IDATữ5j1Û‹3Q«Nå;„à;DUÙËø½UÆwW(¨d[ Úí-Tgăbæ̀™¿dgC)UÂ!ïÅÅ-@íaVVQff¼¡]d›Dr¹́̀Î ëuóqªnL$ÓØÑÑ̃̃ĂûĐ•+o¶Ó›??ưáâÅ*¿₫̣ǃƒƒơU# dÔTơ?$Ûk0™¨)N;i>h)(Äi–N¿Rë‘I£Ù•0™̀¤¤¤ĐĐĐRÜöôư-7ª¦r Ü\+gzÑh:+³ªFº£££#¡Çïø}úô›x¯··`ôhOéW§MkÈ×ÿûÑ‚ôơél6›Ïç‰Dí»8j‹»uF»‚îb½Ü_‹ Ë0÷„/YwT­\èåd%?DPR1XáÇ)yơ₫ëWßéc˜?²·öÑ…n+r(„Ëå&''pjy½T>1.î̃}“¶}{¬^¡g¸Ô[?`nñ“{ÏÇMYYEÈÏQQ³‡ y0x0%*j6r<+«(9yqÿ₫†yưµU•¶½{ÓôT̉pèĐ¡ÔÔT@~~¾–D£ó¦2¶XÓ̀yĐ!hyÁnhïgkîåôjrÑ`ó~ +ŸV>Wñä‹qưä'\Ëÿ‘¬(ar1èHÂÑ̃ŸJÔÀSWw¶»[µĂ<Ë¢"ƠƠ7̃$ÖL4̉Đ®°I àTUêlµµ‡s₫ü5ôçO>ùXúgTh¯\©1X'µ4ÿà7ÑÑz¼ƒ ‰Lâv墶X•àá‰ëâme­2I7[gÛÍñîeQܪ†vùưwa–ú ̣¥Q¼·« 2µ£ tzII‰‡‡‡ö n¾}Ưyؾ=Ö+Ûœ>ø[ÔâźüDĂÔ²Â#d²ÿœO­ &Î|đàôçQ£†)üù矋 SPë85w¹µ‡ ôx ÅÅÅ¥¥¥ÿ₫û¯ºÁ4™2̉iG̉ópʽœ§[ÖHB¼·9̃½LÀđÅz‚ëûKU€²$8™©ơ¥Ÿfa^iœMLJ+ÿøßÑư¿øÏùÔèöºÙ¾=öûï?3@÷ô÷¢ÂnÜĐå‡î¨Ü“îSÇ©]<£¶ª̉®çæÍ‘l^@TÔlé¸nÿ₫k×.zå¸xóæ¿Øi+âè;ÉÂĂĂ#66VƯ2+ddœÑN)”¼ çA‡´:Ú[Đ]­é®ÖѾ}b&ô©nèà<è°#öè µU­¹¼KªäUµ‹Åơơơ&жC†oäƯ[<ưZ9Ó¸®<..}Çß ­²Íî„5»22tœ€i¸d€£c̀¦Íkvư¸oKjAæOú?VrÑŸçÎ$óê”)+<Ó@8•÷ÛØÑ£ơ8{Êårsrr4øCù‰R z9—_mÜæådu6ö‹qư€Ëưmb&Úl˜aKh™1ÏÎT+(á¡©Z¢}NƒÁ8p`hh¨f]Ëа±ë½.q{Á‘âưûömI5®Ú‡qqé«Ví2œë¹VδzùB—³§†.¨Nnî›s<µl‹ûN¿W"ï81Ú̀́¿̉ÿ||"i ¡²‚ƒ’“ơx ñññ‘‘‘...\®&£ ….Z&Ê.Đe-_ß!„­³DÛªÄó÷5Ïß×¼çâ›íT‘#ó÷5ËŸVTơ¦ÔÆS­ÈẠ́L¤6lW›¨«…©ḍĐét¡PÈ5¡ơ-ḍæÜ}́l7/ùÆp4µ³óOùeÙÓ¦CÎÉÊ*’Î2Ñ#mɯ۶îÊÈĐưGAŒË@X´rfeú«'\]}÷vˉ««oNæïLÿ6:Zg+±ä©¯¯G Åbu罺2µêjªôö/JN›6œ¸a†­üß²n·±n·¡[Í#èV3̉§IûpœíÈAcßjEƒéê!j́P(”™3gFDDd›\†èo\©TCˆ̀)¡:ưĂ\9räœ!\#{ß´)Ÿè¥\¹ÑLE¯K,ÈÜƯ$èåÓ¯^­Áơ|ü8}0¯_/b´^“{/\¸àáᑘ˜¨â”†ôªÿ®´³ÛyS…t[ç(ldï˜ }¤ 4̃úTKùTHqqqvv6æ;¸ˆ¦₫Y^^Ç©1đë<øÍH]́ G₫*/¿]ù×ÖÔT½|ºá jƠHÿjcg½.q»¿_}µ ×óñë[×™ç̃³G_ ‹‘ N¯ªªRỰJë¨fó¦̉  G"q÷Œ̀ªBíT8Úđr̉d³6é”lù¡’ö…“ &;.è‘׫¥c¼ÖB̀¦ÍkVødªtm½SÇ©9̣ÓΓÇéë WP­„Ơáoíj>Â×Ïă5ÔỬñ•HÇo÷î]£p:ù‡æúÊüUḮ[€ÈÈH$ Suß(ÊéƠRS©ï¾7­jP©êPØÈ̃[gÛ!™ÀtWk˜ Û¯¢y©9™ˆ‚̀E_U÷s¹Ü   àààd½f hO_‡¸O¥åÓ:̀ÆÎ®Ua°×\]}óÛo·¢¿ê·XR#·'1áä±cz,­j¸ëPÿ3bD³àÑɼSẴÈêÿ€KeºNù‘̃N|äÈaJΜ2åc´Ttaáïz\éÜÈăeõXxèûVjjjAAÀÇÇçÎ;ª\‰Âœ^tí©ÆUucƯ­‘ùΣ•â0Ơ æÍñî¥pqª¤£³ªáMQë:AÇ#©iÅ+ơo^´¼”v5v6LÇ Z₫Ùuơ¸UO&“ HOO_¼x±ñ.N¥8: tq;¶hå*ôàhÿËeez¿¶n ; è±XR«H”±rù₫½{ơ˜, ¼RRôºÄy#¼¥k;¸R©ºT™íÄ•k¤ôömzÜ|¦¢́LÁ®§Ó¯q 9tè›ÍNKKSK×驌¦jv1s¼{m+kT5´stPj̃ó –ft—7»¡Iÿ¬΃tsI{'[J•ï _JgÏVƯm×ñ6ª¸́₫TŒK¬(tFƠ-œ„,n.((È̀̀4öR!Ñß|ö±ÏÔ°Ï8:¢NjYa¡Ëûn†ñk×.̉— Q[U™¾byÑáCz\h‚jM ptj¨»åF}å:ÉM¥ĂỏÛ‰ïƯÛư₫ˆ{÷®A'Pơ²åxùñcdRßKËơXÚ›ÍfÓh4$‰Édª¾¬+cªo@¶5÷§Ë8bÀÆÓ-Ùë¾YdT\ÅÏdJÛsîw´¼Vå¶@ÚWV¾•©6¸‘-µ öªå°jƠOLLT=ßÍÀq§»Å©AƠÜ¿IđĐđuíÚE6è'ó±æÏkµ—/]ºX®_ßÔ0ØÍưn]*¨ºGz;qåñ^ùst¿åx›D́:èƯüƒơƠ\B¡0::Á`TTTĐh4‰¤J+eWÚ©e¥:À̉ }AeƯn+¬|®V­Áª†öÈ!Á H¯auëgÙÏæơ%µ‰·Ñ\'Xf(@¶ƠÄ!®jxăæwÖ>x#½·½´¾ SK/₫‘ÇhN2ä’¨”̣ùüäädu#"…“›{CƯ-Œâj×®]4x0eäÈazœ̃"vv^ºrÅ@ÄĐơ§fAl¬”`H¬ „—íÏuv6D«5̣̣ô¢pw{ùôÖ„ üơø¼̉ÓÓ‘yÓ   çMU×TíÄ9̃½[6j¥´B°ªH”—“ƠÉo¢̣Hk¬u½/·£½…ôjê@+Û×̃©µ¥™×à7y³dó®êN¨‹L:®[^ó ™à3ƯƠZă¥2j=wđvÑfuÇRÑÑÑB¡°¾¾¾¤¤ÄHµS¼p‘ôÙ ŸÁí˜ZL4Ép.Æ µI x*zâäæi¨»åäæ₫/÷ÿDzNF]µjƠ™3g¸\n~~¾êj*¯ ˜kª å%ëNÛMürêå5:Đj¤³•ïky‡̀Ñ̃¢(Ê~E‘èÄuµ—gÈc•{„̉¸‘-¥·Áñr²²~-m¶Ds4uàH²ÀDöd´_u‡X#“Ư©p©Œü¢Uº:V__Ïçó !¨~„IRÇ©êå¹[W7ØÍ Z6cÁ u{ÜwqÛ>r©́̀ç±ßAA5(¸\î²eËh4ZJJ ‘H̀ÏÏhP 'M-¬|~®¶ öv«y¬Ûmû/€ïB„O/™iN‚¥YƼ¾#]¬µèÈ_tÔIƠ2Q]‰©­́z™¡—Ms|óMïgk.¸ÖăÖu]­Œ̉ xxx”””$''çççé̃à™ë“Ä.“̃mæ̣™̉Ñ₫5W+ ‚ª¿O áë‡iäñ̃»'=|ƒè>Ÿïăă# ™Læ¼yó\$U₫Pá,©¼¦jsm¬;m+Dåé”ß””ß”8Ú[l˜n+#«a#{SZ­(̣’ÔŒ)r;*₫¡—“ÁÊ °xloÓ¦°’U hƯ”êư¼̃$çq¹\Ư—Gט׫Ư₫ă)½J°U$ª¾ÂZ´j5TcÁp—«ợú<ö­ºH›—~ẹ̈ÁPĂÙJ)€B¡ ơH$’̣R5̣Á=…ƠF5ê¶•µÎÿ¥YˬW^ó‹È\a±™E,È”ªil¡*CUC;ëvÛ(g+©iW⪼/)?Édúøø„††"{Ú}–¿û11ÁÖ®¯™ ­ Tmy÷mGçd̃>v¶Ä^Dø̀ôƒÁđ̣̣ B~MLLŒ­­­¥Ó骘Bi7´+˨¥¦®(e–?Åê~ó®>‹Ê“Ư¸›`i¶u¶]v8 «" kÇL´1œK’Y¬›››+ Åb±’h˜LfzzºáÜ&ÅÑIú×kå̀F^ƒô  bNmUåÑưûf/úR_Åñ!2ÖÍf³ÙlĉĴ´´ng­äËÎa[ơeÿ¥gH*/†”ß”dü®`ÿdß!„³±ï,÷·1Tí-¢¦ ×ç°UùXJŘpvvö̀™3ét:2£ß• .[¶lÙ²eø êne®ONHl<„ *–́Û’¹>9%÷7GW>¯>3-áóùÁÁÁl6[]¯4>>uI4Mă ’d6—FƠ>Ø+éèÜy₫)í–uñYW…ơ£}û\Œë§bECƒÅŸJ<ùí;X-ŸƠØr5ôƠUS„âââ’’$Ơ<++ËÇÇ™¤@9sæ ===88Ø  ëƯÿ˦%ß®Ùơăá<4YPP±¡U±4xF;ÛÅÇ8:6 :ûĂg¦ 999C‡e02ÆE9¡¡¡ÁÁÁ©©©ˆ Óh´ªªªÀÀ@uÍ¥Lú‰Œ Ú'"ƯnCËûa‹¤£SIjÙÖ|Ă Û‹qưü©Æ7+A°4[û‰mVX_;¢₫ưl´“h镉 (‹Ạ̊ññA_ …, ,?ÙI¿ÔqjV‡/häƯÛY|̀:¬I €¨Æ…áNÿÊÜ}Å^—ˆ¦ơÂî¥ \.7225"Ê•ÏçˆÅâU«V<==‘r ¹¹¹Èj?U¦K•XLÄ8¢3©p.J€9Ư¦89Ú[d…ơå<è³çâS –«ê/'«­³í m&X¦KtĂP¥ç‰D"‘(‹ÑŒ_$ø­q‹åăăSRR¢ÇjÀ¬ßÏƯø›³hå*tiC³à¡=t!  bBđÂE_¬Œ—>»—fˆÅâôôôääd鸲¥ZW绸¸ˆÅb …‚jDDıcÇV®\‰Ơ"MŰ€ƒ¤Ç–DWv*‡:Đ2c^ßå₫69Ï ÿz“Ǭ=öËưmô;cª 2«TeÜÖn{²oddäÊ•+‘î=~üxù%—ËE4U_Ö½?»2ă'é#Đ…0: 7ä+¿<¦¶ªj¨—|fê {Y,//¯øøx™Y¢ÆÆFiS’””äăă“““ƒŒèáäóùÈÆX ¥¢¢BE5Uq³hùØ/&øÁ±²Zeƒí-Ö~bs%¾ß†¶ÔVƠ+́ˆæËưmÎÆ¾c\jÚ­#ÛÈ> Hí¤¬¬¬®Â3È¢ể̉Rƒ±x•ĐâAAʼnËegFûÀg¦"B¡pÙ²e>>>2Ñ-d̃UÙääd‹uèĐ!ä×đđđÄÄÄÚÚZ??? ̀_W¿Ê[C¬îÚl‰ÓJ/'+ â¢K³°‘½O~ëp6ö°‘½ñ+«"d[óµŸØ^\̃/Ú·±d&w5öRqè&FS̉«ÅbqPP2²4‹W6Z<£Âh–ĐU³*ưëá3S…̉̉̉ÈÈH%¥|>ŸÏçs¹\$Y™dâóùb±˜H$ª›p4JÁƒ Ómgïi´`hµ#g…iUÍÎl¹a†-¶U íG+Åeµbl¯°[ü©ÄIC­®…Âî¤0£MÅçççW__„^º"22²¾¾>))I7̃Èăµèq£-ˆ) ꡬƯäwV³*ÏŸ=ƒO®+bñ„CË3ê85÷oß@§3vÿx̣–wè’?₫øCÅ5¦ÏŸ?GT›¬]§AÉ :“[ê@˓߼³â¨H{­̣BØ:Ë5¢´¤´ŒöÖ6Îư.¿£NĐ!½g¸f"ê5ØÊË Ù6Çë́Hoñ&(®zàW¹{ ‰t:]ûƠ4 —JNG}ơbñîß­`,4nPP±!wÛÖ_ö́AƒăǃO®+¦L™räÈ‘̉̉̉ÜÜ\ƒ¡dÅ:ŸÏ×Ù"l3TlkN*¿)É©x®™¬*Üp'è.Ö̉Ou‚AëË+·Û÷„/»] 4ÊÙ @s²"ÛZè·2ƒ.ưTiMU¾œLTFa;N§Óét:­X’ª—̀ß™¾!99:úƠǸ‘‘áĐ²AAÅFö¾>üSz=dT(äææ¢ËOơ%¨j9â;„à;„P'è(¿Ùö¿[mƯ*+#ëní;ÄZK3ƯÈ–nd|÷"5^•ïW2Ú©¼§¡³!4F£! ª}„C*Êδ?¢j ‚Ơ¬ê çÿ§ÂœD‰Åårssssrr¤Ó”Ô*–d°’©²>Y.Óv Ó@~ß\àááqáÂ:®}Æ4ÔƯ:ôăÎ?¯\OÙ1è<…̣ÇóØ~âØ1øœ´ÄĂĂ#%%åÁƒ%%%!!!ˆ)QRÛAK[¢?UzÁŒÂ’–]èççg˜jZͪØṣØ1Ă¼<ˆ{¨ÿÇb=¿ị̈rØ·0D:Üí₫0êz J’-¡ĐBđĐToUz9Ñu¹{ơwJöưréb9†_LÔWج¼®3 $’­™ÙMă9‘H¶˜¾ ÙK'3§%³dÁVVåm˜ˆÖmm'k뛌ÑĂÖâAAăƠ¬Ñ#Osóhtt†üiª)ïîǵ=Í ‹…àĐèAA…˜‚¯åbh>+¢c̀a@´qº=@5…@A…@dơRZ2e~…æ b€ƒ< *Äp¥Tf¡‚¼ÊÂæ‚èÅ=…C:Tˆq ü¥÷Y“NÑ`»‚ é¹j*í ¹ ^™uÿß̃ưƶQ̃q¿Hiî “©&Åh£5b¨îÚ‰°­-h4ºÚÀÖ\JX]oÉuƒÄ+Ă64½:ŸƯ9)-gSÔsA`G€œ”I¹iqGKAá’Iăú‚p"]È$®‘¦́…‡9̣ÇqđߨßÏ»\/­ûÜù¾÷Üó{C»@ B•/¬ M³È}©ôP¡æ̉4Ï”@ B­Ë̉ă\6MÑI*@¶LÍå-âè¿@mÂ*,Ù¿̀¬wO¬di7¤) PW.»z²(JªúEu§ë¯ÿ̃-·ühÙƯ$飦&G₫QùQŸ©HS€réí=&—ƯíÓO?ÿàƒUÁÿ÷†®ß´éÆew“å[[F æ…ă^Èå]Ñh´¡¡̃çÛW½Æm^oo.{666擦úD\ø2,L6(=†é•$iÙƯ†††å̉¥K/UÇ/8f2™–ƯÓjµ"Pób6›Ífó²» ‚@ŸTÍ—Ê–÷ëwV”¦úN*2 ŒL&S.Ñ"˲¢\ªÿuccc.×ù‚¢$ÈVI´pIE¼TX*M—Úđr„*ßZ·è³Ü…ƠIKu[ ‹gê¢O€s/ô@ 2uÉñTä(@vCD&“©¨ă@ 2  Vͪ(ªª®èW._¾ÜĐP_5‡J„,jµZFc¡2k8”—$I¢¬èWÆÇÇ«©R©T–ñ,K.‹] P ¢Ñ“Ë.̃» ƒ%UưÂï?QçÖƠW_å÷wfß…ă^,ÔÂ"úơ{ Äb1¾·÷°ÑøƯ•₫âää¿ëê¶UA ¬Ysu?›eMûo8|²¢Ö\ªiM?b0hcc§ñ5Ëz÷0AQ{Ăáç-K¡2­ Pz>ßăăGGO ơh¥Ẹ̀$E¹†ưÖ«—CE¡ªªêtîÚ¼ùû,Û(;«u#Çy(j¯(h €ƠHÓ4’ü A|ÆóO"M³3›7ÄăŒÇÓ18˜¬œOU¹:>>n·oḯüơ₫ưNœ=9aÉdÀí~°¢Î0È…¢(vûöƯ»âó=ŒÖȅѸ6™dC!&y¾B>R…>̣₫(¾L²fó†ôI’i: iWp-̀ÑpØ“¾Ÿ5×?K’^Eù¤­íA4Àª ª3¢8–L†¬Ö_åë”Ûͨê garœ7]Rc0Ô'“,Eu+Ê']]‡Ê₫ÙVPÆ)˲Ư¾ư£Eư@6KÓ¬,̀óƯ™*¤ÁÁ¿ûưÏy½¿5Öà|Zp\&ûû_åùî͇̀¦ÍºƯÏl̃ü‹ƒh€o}¬«››»ṔÅç{n`@H&™LëÓ[Dq‚¢|^ユVbÖÈ͇ß‚ă|™›‚ <°¦}‡e!P¿&I2I>n³meY:³1<34”̉ç+̀#n7Ă²oÍl¤éÁ`b˜§Ñ>•¨2E’›Lë9î‰̀ i,v.âăñ£™|……½̣··“‡M—±wßUÂáç C¹>X¡¦́vw{;™ISM›u»™Ë—•ḍ̉4 «uc<~Ôă9‹ËldÙök¯¥¨Đ>•y¼eËưwƯơ3?œISŸïÄÀ€0<Ü4ÍÂl̃F_Ïd6vt´45ƯD’÷iVë=Ô¾¾¸ß":ÓÇRƠ§ó&Óz—ë^œ@¹Đ´+4سçNŸo_fc$̣ÆÙ³oÅă¯•ñ® =Ôy‰·»'îr82ự)Ê”×»-Ÿ#ç¸Åbæ8¯¾cæ÷G’É7 µĐÍTDQMáÂèè©̀( A‚p1ưH¤:Vf( “iưùóï«êL¦CßÖöK“i½Ư¾ç_.Ô²`0 ñú$‚ Dq\Q¦‚À/wC½,OỆd&;vîl4™¾g·oç¸Ó¥_ö¡̀=TM›%ÉÇ ¢çŸÂ¼«âÅ ·û(Ë>[Q“ j°‡êv÷âD2Ä0VñẸ̀$Eiòá(é¬Ër¡ªêŒƯ¾óæ›âñ^¤iQY­Ó“ +gÂ@­Ñ´Y§ó1‚ †‡ĂHÓ¢J/û>ÛÓÓ]=TI’ÎG½̃}--wd6bêU¡stËÔŸƯîgŒÆ”½¸ Öz¨2ƠÜüHkë®}§‚¦²<‰¦.Tf&å§yNÊ'"{3z%­o§)CQR$̣z4úº~3ñƠÔ«ḍ¯(/ ›m«Ơº©¹ùóZ,æôÆ‹ÅÜܼƒă^,ÔJú°”ÁÁ”ßßÏóƯ™ïàW¿đüưFÈÛV«uỈOÊoi¹ĂbihñŸ,vI©{¨4P”Ï9Χï•û|'ÆÇåy¡P$I¦(?ĂĐßK’LQƯ °Ùlh"€"ơPƒÁ3 Ÿơơ½200‚ÅjDQ¦ḤO.×½--w~să.W{K Y ªª3ơäm·ư¸««5³S¯JCUgÜn†a´µí̉ot:;wï̃ƒ  ¨6KÓ‚ Âá®y A¸À0°jñ,:)_Óf)ê°ÉôĂâ‘”(Peỷé|´³³UË@D*ơÇs‡¿4ŒÆµñøÑÏ Bf`ÙcXù Pªª3ÍÍí{ö́èèØ;ïJHQ~4li k>c##ă÷B1HJ¨‚p‘¢ü<ß­_i*G__ǘÙ¹ƒöU¨¢8A’‡æ@f$¨(‰ÄHoï™b‘}j_ß«4îCV¬ưû óÓy7^NÿÅ$ñ|7̉´b9M硨½‚ öo.n•¯ÛƯ£ª3££œ¾ÚHUg(ÊɦåƠØx+ĂĐÿÈó^’|°½ưÑ¢ÚT±èĐĐèèèóIéAÜIDATúÇŒé—|`²iyY,f–ưC&‰,s2p:;E±E$+xä«(ÊÍ7o²Z-9ïÿ©Ëuϼ!L6­©Ô{çÏ¿ŸyOoæ›OQ‡ †ë¼^?₫X·ÎhµnÊqgU¶Ù¶ê—R!0Ù´bH’|ö́9?2of&M‡dYơzŸ,È¿+T‚ $IReÙƯ`_, which pioneered in the field of "dynamic RPC" (where there's no predefined contract between the two sides). The two projects, however, are completely unrelated in any other way. RPyC is developed and maintained by `Tomer Filiba `_ (tomerfiliba@gmail.com). .. note:: Please do not send questions directly to my email -- use our `mailing list `_ instead. Contributors ------------ .. include:: ../../CONTRIBUTORS.rst Logo ---- The logo is derived from the `Python logo `_, with explicit permission. I created it using *Power Point* (sorry, I'm no graphic designer :), and all the files are made available here: * .. image:: /_static/rpyc3-logo-tiny.png * .. image:: /_static/rpyc3-logo-medium.png * .. image:: /_static/rpyc3-logo-big.png * Also in :download:`the original ` Power Point master. rpyc-3.4.4/docs/docs/async.rst000066400000000000000000000101511314203541000162150ustar00rootroot00000000000000.. _async: Asynchronous Operation ====================== Many times, especially when working in a client-server model, you may want to perform operations "in the background", i.e., send a batch of work to the server and continue with your local operation. At some later point, you may want to poll for the completion of the work, or perhaps be notified of its completion using a callback function. RPyC is very well-suited for asynchronous work. In fact, the protocol itself is asynchronous, and synchronicity is layered on top of that -- by issuing an asynchronous request and waiting for its completion. However, since the synchronous modus-operandi is the most common one, the library exposes a synchronous interface, and you'll need to explicitly enable asynchronous behavior. async() ------- The wrapper :func:`async ` takes any *callable* :ref:`netref ` and returns an asynchronous-wrapper around that netref. When invoked, this wrapper object dispatches the request and immediately returns an :class:`AsyncResult `, instead of waiting for the response. Usage ^^^^^ Create an async wrapper around the server's ``time.sleep`` function :: async_sleep = rpyc.async(conn.modules.time.sleep) And invoke it like any other function, but instead of blocking, it will immediately return an ``AsyncResult`` :: res = async_sleep(5) Which means your client can continue working normally, while the server performs the request. There are several pitfalls using :func:`async `, be sure to read the Notes_ section! You can test for completion using ``res.ready``, wait for completion using ``res.wait()``, and get the result using ``res.value``. You may set a timeout for the result using ``res.set_expiry()``, or even register a callback function to be invoked when the result arrives, using ``res.add_callback()``. Notes ^^^^^ The returns async proxies are cached by a `weak-reference `_. Therefore, you must hold a strong reference to the returned proxy. Particularly, this means that instead of doing :: res = async(conn.root.myfunc)(1,2,3) Use :: myfunc_async = async(conn.root.myfunc) res = myfunc_async(1,2,3) Furthermore, async requests provide **no guarantee on execution order**. In particular, multiple subsequent async requests may be executed in reverse order. timed() ------- :class:`timed ` allows you to set a timeout for a synchronous invocation. When a ``timed`` function is invoked, you'll synchronously wait for the result, but no longer than the specified timeout. Should the invocation take longer, a :class:`AsyncResultTimeout ` will be raised. Under the hood, ``timed`` is actually implemented with ``async``: it begins dispatches the operation, sets a timeout on the ``AsyncResult``, and waits for the response. Example ^^^^^^^ :: # allow this function to take up to 6 seconds timed_sleep = rpyc.timed(conn.modules.time.sleep, 6) # wait for 3 seconds -- works async_res = timed_sleep(3) # returns immediately async_res.value # returns after 3 seconds # wait for 10 seconds -- fails async_res = timed_sleep(10) # returns immediately async_res.value # raises AsyncResultTimeout Background Serving Thread ------------------------- :class:`BgServingThread ` is a helper class that simply starts a background thread to serve incoming requests. Using it is quite simple:: bgsrv = rpyc.BgServingThread(conn) # ... # now you can do blocking stuff, while incoming requests are handled in the background # ... bgsrv.stop() Using the ``BgServingThread`` allows your code (normally the client-side) to perform blocking calls, while still being able to process incoming request (normally from the server). This allows the server to send "events" (i.e., invoke callbacks on the client side) while the client is busy doing other things. For a detailed example show-casing the ``BgServingThread``, see :ref:`tut5-events` in the tutorial. rpyc-3.4.4/docs/docs/capabilities.rst000066400000000000000000000002361314203541000175340ustar00rootroot00000000000000.. _capabilities: Capabilities ============ Netrefs as Capabilities ----------------------- TBD Callbacks as Capabilities ------------------------- TBD rpyc-3.4.4/docs/docs/classic.rst000066400000000000000000000026671314203541000165360ustar00rootroot00000000000000.. _classic: Classic ======= Prior to version 3, RPyC employed a modus-operandi that's now referred to as "classic mode". In this mode, the server was completely under the control of its client -- there was no way to restrict what the client could do, and there was no notion of :ref:`services `. A client simply connected to a server and began to manipulate it. Starting with version 3, RPyC became *service-oriented*, and now servers expose well-defined *services*, which define what a client can access. However, since the classic mode proved very useful and powerful, especially in testing environments, and in order to retain backwards compatibility, the classic mode is still exists in current versions -- this time implemented as a :class:`service `. See also the :ref:`API reference ` Usage ----- RPyC installs ``rpyc_classic.py`` to your Python scripts directory (e.g., ``C:\PythonXX\Scripts``, ``/usr/local/bin``, etc.), which is a ready-to-run classic-mode server. It can be configured with :ref:`command-line parameters `. Once you have it running, you can connect to it like so :: conn = rpyc.classic.connect("hostname") # use default TCP port (18812) proc = conn.modules.subprocess.Popen("ls", stdout = -1, stderr = -1) stdout, stderr = proc.communicate() print stdout.split() remote_list = conn.builtin.range(7) conn.execute("print 'foo'") rpyc-3.4.4/docs/docs/guidelines.rst000066400000000000000000000001221314203541000172250ustar00rootroot00000000000000.. _guidelines: Guidelines ========== TBD: * BgThreadedServer * Multithreading rpyc-3.4.4/docs/docs/howto.rst000066400000000000000000000130071314203541000162430ustar00rootroot00000000000000.. _howto: How To's ======== This page contains a collection of useful concepts and examples for developing with RPyC Redirecting Standard Input/Output --------------------------------- You can "rewire" ``stdin``, ``stdout`` and ``stderr`` between RPyC hosts. For example, if you want to "forward" the ``stdout`` of a remote process to your local ``tty``, you can use the following receipt:: >>> import rpyc >>> c = rpyc.classic.connect("localhost") >>> c.execute("print 'hi there'") # this will print on the host >>> import sys >>> c.modules.sys.stdout = sys.stdout >>> c.execute("print 'hi here'") # now this will be redirected here hi here Also note that if you are using classic mode RPyC, you can use the `context manager `_ ``rpyc.classic.redirected_stdio``:: >>> c.execute("print 'hi there'") # printed on the server >>> >>> with rpyc.classic.redirected_stdio(c): ... c.execute("print 'hi here'") # printed on the client ... hi here >>> c.execute("print 'hi there again'") # printed on the server >>> .. figure:: _static/howto-redirected.png :align: center A screenshot of an RPyC client redirecting standard output from the server to its own console. Debugging --------- If you are using the classic mode, you will be glad to know that you can debug remote exceptions with ``pdb``: >>> c = rpyc.classic.connect("localhost") >>> c.modules["xml.dom.minidom"].parseString("</>") ======= Remote traceback ======= Traceback (most recent call last): ... File "/usr/lib/python2.5/xml/dom/minidom.py", line 1925, in parseString return expatbuilder.parseString(string) File "/usr/lib/python2.5/xml/dom/expatbuilder.py", line 940, in parseString return builder.parseString(string) File "/usr/lib/python2.5/xml/dom/expatbuilder.py", line 223, in parseString parser.Parse(string, True) ExpatError: not well-formed (invalid token): line 1, column 1 ... File "/home/tomer/workspace/rpyc/core/protocol.py", line 298, in sync_request raise obj xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 1 >>> >>> rpyc.classic.pm(c) # start post-portem pdb > /usr/lib/python2.5/xml/dom/expatbuilder.py(226)parseString() -> pass (Pdb) l 221 parser = self.getParser() 222 try: 223 parser.Parse(string, True) 224 self._setup_subset(string) 225 except ParseEscape: 226 -> pass 227 doc = self.document 228 self.reset() 229 self._parser = None 230 return doc 231 (Pdb) w ... /home/tomer/workspace/rpyc/core/protocol.py(381)_handle_call() -> return self._local_objects[oid](*args, **dict(kwargs)) /usr/lib/python2.5/xml/dom/minidom.py(1925)parseString() -> return expatbuilder.parseString(string) /usr/lib/python2.5/xml/dom/expatbuilder.py(940)parseString() -> return builder.parseString(string) > /usr/lib/python2.5/xml/dom/expatbuilder.py(226)parseString() -> pass (Pdb) Tunneling --------- Many times, especially in testing environments, you have subnets, VLANs, VPNs, firewalls etc., which may prevent you from establishing a direct TCP connection between two machines, crossing network in two different networks. This may be done for security reasons or to simulate the environment where your product will be running, but it also hinders your ability to conduct tests. However, with RPyC you can overcome this limitation very easily: simply use the remote machine's ``socket`` module! Consider the following diagram: .. figure:: _static/howto-tunneling.png :align: center Machine ``A`` belongs to network ``A``, and it wants to connect to machine ``B``, which belongs to network ``B``. Assuming there's a third machine, ``C`` that has access to both networks (for instance, it has multiple network cards or it belongs to multiple VLANs), you can use it as a transparent bridge between machines ``A`` and ``B`` very easily: simply run an RPyC server on machine ``C``, to which machine ``A`` would connect, and use its ``socket`` module to connect to machine ``B``. It's really simple:: # this runs on machine `A` import rpyc machine_c = rpyc.classic.connect("machine-c") sock = machine_c.modules.socket.socket() sock.connect(("machine-b", 12345)) sock.send(...) sock.recv(...) Monkey-Patching --------------- If you have python modules that make use of the ``socket`` module (say, ``telnetlib`` or ``asyncore``), and you want them to be able to cross networks over such a bridge, you can use the recipe above to "inject" ``C``'s socket module into your third-party module, like so:: import rpyc import telnetlib machine_c = rpyc.classic.connect("machine-c") telnetlib.socket = rpyc.modules.socket This is called `monkey-patching `_, it's a very handy technique which you can use in other places as well, to override functions, classes and entire modules. For instance :: import mymodule import rpyc # ... mymodule.os = conn.modules.os mymodule.open = conn.builtins.open mymodule.Telnet = conn.modules.telnetlib.Telnet That way, when ``mymodule`` makes use of supposedly local modules, these modules actually perform operations on the remote machine, transparently. rpyc-3.4.4/docs/docs/secure-connection.rst000066400000000000000000000074071314203541000205350ustar00rootroot00000000000000.. _ssl: SSL === Python 2.6 introduced the ``ssl`` module, and RPyC can now integrate with it. If you wish to use ``ssl`` on versions earlier than Python 2.6, see the :ref:`ssl-wrapper `. Using external tools, you can generate client and server certificates, and a certificate authority. After going through this setup stage, you can easily establish an SSL-enabled connection. Server side:: from rpyc.utils.authenticators import SSLAuthenticator from rpyc.utils.server import ThreadedServer # ... authenticator = SSLAuthenticator("myserver.key", "myserver.cert") server = ThreadedServer(SlaveService, port = 12345, authenticator = authenticator) server.start() Client side:: import rpyc conn = rpyc.ssl_connect("hostname", port = 12345, keyfile="client.key", certfile="client.cert") For more info, see the documentation of `ssl module `_. .. _ssh-tunneling: SSH Tunneling ============= SSL is a bit too complicated: you must generate certificates for each client and server, sign them, manage the CA chains, etc. It's usually an overkill for the normal use-case of RPyC. Instead, SSH offers a much easier approach. Conceptually, SSH is similar to SSL, but requires considerably less setup: once two machines are acquainted, you can easily set the trust-relations between them using the ``authorized_keys`` and ``known_hosts`` configuration files. You can also use interactive password authentication, in case it's desired. SSH is first-and-foremost a shell-protocol, but it includes **tunneling** support. This means you can route "unaware" connections over a tunnel, and get encryption and authentication for free. Setting up tunnels is not at all complicated, but in order to make life even easier, RPyC comes bundled with SSH-tunneling support (of course you'll need an SSH client installed and configured, in order to use it). Usage ----- In order to use the built-in SSH tunneling support, you'll first have to start a server on you host, binding the server to the ``localhost`` on some port, say 12345. Binding the server to the ``localhost`` means that the server cannot accept external connections -- which is crucial for our security scheme. Next, from your client machine, you'll create an :class:`SshContext `. The context object holds all the information required to establish an SSH connection from your client machine to the host machine -- host name, port, user name, keyfile, SSH program, etc. If the two machines are "acquainted" and your ``ssh/config`` is set up accordingly, the context can be pretty much empty, as all the required information already exists. If not, you'll need to include this information programmatically, like so:: from rpyc.utils.ssh import SshContext sshctx = SshContext("myserver", user = "foo", keyfile = r"/path/to/my/keyfile") And then, establishing a connection over SSH is a one-liner: conn = rpyc.ssh_connect(sshctx, 12345) When establishing the connection, RPyC will first set up an SSH tunnel from your client machine to the host machine, using the credentials given by the ``SshContext``, and then use this tunnel to create the actual RPyC connection. The tunneled-connection consists of three parts: * A socket from port X on the client machine (the RPyC client) to port Y on the client machine (first side of the tunnel) * A socket from port Y on the client machine (the first side of the tunnel) to port Z on the server machine (second side of the tunnel) -- this is the encrypted connection. * A socket from port Z on the server machine (the second side of the tunnel) to port W on the server machine (the RPyC server itself) And RPyC makes the necessary arrangements to hide these details from you. rpyc-3.4.4/docs/docs/security.rst000066400000000000000000000115631314203541000167570ustar00rootroot00000000000000.. _security: Security ======== Operating over a network always involve a certain security risk, and requires some awareness. RPyC is believed to be a secure protocol -- no incidents have been reported since version 3 was released in 2008. Version 3 was a rewrite of the library, specifically targeting security and service-orientation. Unlike v2.6, RPyC no longer makes use of unsecure protocols like ``pickle``, supports :data:`security-related configuration parameters `, comes with strict defaults, and encourages the use of a capability-based security model. I daresay RPyC itself is secure. However, if not used properly, RPyC is also the perfect back-door... The general recommendation is not to use RPyC openly exposed over the Internet. It's wiser to use it only over secure local networks, where you trust your peers. This does not imply that there's anything wrong with the mechanism -- but the implementation details are sometimes too subtle to be sure of. Of course you can use RPyC over a :ref:`secure connection `, to mitigate these risks RPyC works by exposing a root object, which in turn may expose other objects (and so on). For instance, if you expose a module or an object that has a reference to the ``sys`` module, a user may be able to reach it. After reaching ``sys``, the user can traverse ``sys.modules`` and gain access to all of the modules that the server imports. This of course depends on RPyC being configured to allow attribute access (by default, this parameter is set to false). But if you enable ``allow_public_attrs``, such things are likely to slip under the radar (though it's possible to prevent this -- see below). Wrapping -------- The recommended way to avoid over-exposing of objects is *wrapping*. For example, if your object has the attributes ``foo``, ``bar``, and ``spam``, and you wish to restrict access to ``foo`` and ``bar`` alone -- you can do :: class MyWrapper(object): def __init__(self, obj): self.foo = obj.foo self.bar = obj.bar Since this is a common idiom, RPyC provides :func:`restricted `. This function returns a "restricted view" of the given object, limiting access only to the explicitly given set of attributes. :: class MyService(rpyc.Service): def exposed_open(self, filename): f = open(filename, "r") return restricted(f, ["read", "close"], []) # allow access only to 'read' and 'close' Assuming RPyC is configured to allow access only to safe attributes (the default), this would be secure. When exposing modules, you can use the ``__all__`` list as your set of accessible attributes -- but do keep in mind that this list may be unsafe. Classic Mode ------------ The classic mode (``SlaveService``) is **intentionally insecure** -- in this mode, the server "gives up" on security and exposes everything to the client. This is especially useful for testing environments where you basically want your client to have full control over the server. Only ever use a classic mode server over secure local networks. .. _config-params-security: Configuration Parameters ------------------------ By default, RPyC is configured to allow very little attribute access. This is useful when your clients are untrusted, but this may be a little too restrictive. If you get "strange" ``AttributeError`` exceptions, stating that access to certain attributes is denied -- you may need to tweak the configuration parameters. Normally, users tend to enable ``allow_public_attrs``, but, as stated above, this may have undesired implications. Attribute Access ---------------- RPyC has a rather elaborate attribute access scheme, which is controlled by configuration parameters. However, in case you need more fine-grained control, or wish to completely override the configuration for some type of objects -- you can implement the **RPyC attribute protocol**. This protocol consists of ``_rpyc_getattr``, ``_rpyc_setattr``, and ``_rpyc_delattr``, which are parallel to ``__getattr__`` / ``__setattr__`` / ``__delattr__``. Their signatures are :: _rpyc_getattr(self, name) _rpyc_delattr(self, name) _rpyc_setattr(self, name, value) Any object that implements this protocol (or part of it) will override the default attribute access policy. For example, if you generally wish to disallow access to protected attributes, but have to expose a certain protected attribute of some object, just define ``_rpyc_getattr`` for that object which allows it:: class MyObjectThatExposesProtectedAttrs(object): def __init__(self): self._secret = 18 def _rpyc_getattr(self, name): if name.startswith("__"): # disallow special and private attributes raise AttributeError("cannot accept private/special names") # allow all other attributes return getattr(self, name) rpyc-3.4.4/docs/docs/servers.rst000066400000000000000000000131111314203541000165700ustar00rootroot00000000000000.. _servers: RPyC Servers ============ Since RPyC is a symmetric protocol (where both client and server can process requests), an :ref:`RPyC server ` is a largely just a main-loop that accepts incoming connections and calls :func:`serve_all `. RPyC comes with three built-in servers: * Forking - forks a child-process to handle each incoming connection (POSIX only) * Threaded - spawns a thread to handle each incoming connection (POSIX and Windows) * Thread Pool - assigns a worker-thread for each incoming connection from the thread pool; if the thread pool is exhausted, the connection is dropped. If you wish to implement new servers (say, reactor-based, etc.), you can derive from :class:`rpyc.utils.server.Server` and implement ``_accept_method()`` to your own liking. .. note:: RPyC uses the notion of *authenticators* to authenticate incoming connections. An authenticator object can be passed to the server instance upon construction, and it is used to validate incoming connections. See :ref:`api-authenticators` for more info. .. _classic-server: Classic Server -------------- RPyC comes "bundled" with a :ref:`classic`-mode server -- :file:`rpyc_classic.py`. This executable script takes several command-line switches and starts an RPyC server exposing the ``ClassicService``. It is installed to your python's ``scripts/`` directory, and should be executable from the command line. Example usage:: $ ./rpyc_classic.py -m threaded -p 12333 INFO:SLAVE/12333:server started on [0.0.0.0]:12333 INFO:SLAVE/12333:accepted 127.0.0.1:34044 INFO:SLAVE/12333:welcome [127.0.0.1]:34044 INFO:SLAVE/12333:goodbye [127.0.0.1]:34044 ^C WARNING:SLAVE/12333:keyboard interrupt! INFO:SLAVE/12333:server has terminated INFO:SLAVE/12333:listener closed The classic server takes the following command-line switches (try running it with ``-h`` for more info): General switches ^^^^^^^^^^^^^^^^ * ``-m``, ``--mode=MODE`` - the serving mode (``threaded``, ``forking``, or ``stdio``). The default is ``threaded``; ``stdio`` is useful for integration with inetd. * ``-p``, ``--port=PORT`` - the TCP port (only useful for ``threaded`` or ``forking`` modes). The default is ``18812``; for SSL the default is ``18821``. * ``--host=HOSTNAME`` - the host to bind to. The default is ``0.0.0.0``. * ``--ipv6`` - if given, binds an IPv6 socket. Otherwise, binds an IPv4 socket (the default). * ``--logfile=FILENAME`` - the log file to use. The default is ``stderr`` * ``-q``, ``--quiet`` - if given, sets quiet mode (no logging). Registry switches ^^^^^^^^^^^^^^^^^ * ``--register`` - if given, the server will attempt to register with a registry server. By default, the server will **not** attempt to register. The following switches are only relevant in conjunction with ``--register``: * ``--registry-type=REGTYPE`` - The registry type (``UDP`` or ``TCP``). The default is ``UDP``, where the server sends timely UDP broadcasts, aimed at the registry server. * ``--registry-port=REGPORT`` - The TCP/UDP port of the registry server. The default is ``18811``. * ``--registry-host=REGHOST`` - The host running the registry server. For UDP the default is broadcast (``255.255.255.255``); for TCP, this parameter is **required**. SSL switches ^^^^^^^^^^^^ If any of the following switches is given, the server uses the SSL authenticator. These cannot be used with conjunction with ``--vdb``. * ``--ssl-keyfile=FILENAME`` - the server's SSL key-file. Required for SSL * ``--ssl-certfile=FILENAME`` - the server's SSL certificate file. Required for SSL * ``--ssl-cafile=FILENAME`` - the certificate authority chain file. This switch is optional; if it's given, it enables client-side authentication. .. _custom-servers: Custom RPyC Servers ------------------- Starting an RPyC server that exposes your service is quite easy -- when you construct the :class:`rpyc.utils.server.Server` instance, pass it your :class:`rpyc.core.service.Service` factory. You can use the following snippet:: import rpyc from rpyc.utils.server import ThreadedServer # or ForkingServer class MyService(rpyc.Service): # # ... you service's implementation # pass if __name__ == "__main__": server = ThreadedServer(MyService, port = 12345) server.start() Refer to :class:`rpyc.utils.server.Server` for the list all possible arguments. .. _registry-server: Registry Server --------------- RPyC comes with a simple command-line registry server, which can be configured quite extensively by command-line switches. The registry server is a bonjour-like agent, with which services may register and clients may perform queries. For instance, if you start an RPyC server that provides service ``Foo`` on ``myhost:17777``, you can register that server with the registry server, which would allow clients to later query for the servers that expose that service (and get back a list of TCP endpoints). For more info, see :ref:`api-registry`. Switches ^^^^^^^^ * ``-m``, ``--mode=MODE` - The registry mode; either ``UDP`` or ``TCP``. The default is ``UDP``. * ``-p``, ``--port=PORT`` - The UDP/TCP port to bind to. The default is ``18811``. * ``-f``, ``--file=FILE`` - The log file to use. The default is ``stderr``. * ``-q``, ``--quiet`` - If given, sets quiet mode (only errors are logged) * ``-t``, ``--timeout=PRUNING_TIMEOUT`` - Sets a custom pruning timeout, in seconds. The pruning time is the amount of time the registry server will keep a previously-registered service, when it no longer sends timely keepalives. The default is 4 minutes (240 seconds). rpyc-3.4.4/docs/docs/services.rst000066400000000000000000000116101314203541000167240ustar00rootroot00000000000000.. _services: Services ======== RPyC is oriented around the notion of :ref:`services `. Services are classes that derive from :class:`rpyc.core.service.Service` and define "exposed methods" -- normally, methods whose name explicitly begins with ``exposed_``. Services also have a name, or a list of aliases. Normally, the name of the service is the name of its class (excluding a possible ``Service`` suffix), but you can override this behavior by specifying the ``ALIASES`` attribute in the class. Let's have a look at a rather basic service -- a calculator (see :ref:`custom-servers` for more info) :: import rpyc class CalculatorService(rpyc.Service): def exposed_add(self, a, b): return a + b def exposed_sub(self, a, b): return a - b def exposed_mul(self, a, b): return a * b def exposed_div(self, a, b): return a / b def foo(self): print "foo" When a client connects, it can access any of the exposed members of the service :: import rpyc conn = rpyc.connect("hostname", 12345) x = conn.root.add(4,7) assert x == 11 try: conn.root.div(4,0) except ZeroDivisionError: pass As you can see, the ``root`` attribute of the connection gives you access to the service that's exposed by the other party. For security concerns, access is only granted to ``exposed_`` members. For instance, the ``foo`` method above is inaccessible (attempting to call it will result in an ``AttributeError``). Implementing Services --------------------- As previously explained, all ``exposed_`` members of your service class will be available to the other party. This applies to methods, but in fact, it applies to any attribute. For instance, you may expose a class:: class MyService(rpyc.Service): class exposed_MyClass(object): def __init__(self, a, b): self.a = a self.b = b def exposed_foo(self): return self.a + self.b If you wish to change the name of your service, or specify a list of aliases, set the ``ALIASES`` (class-level) attribute to a list of names. For instance:: class MyService(rpyc.Service): ALIASES = ["foo", "bar", "spam"] The first name in this list is considered the "proper name" of the service, while the rest are considered aliases. This distinction is meaningless to the protocol and the registry server. Your service class may also define two special methods: ``on_connect(self)`` and ``on_disconnect(self)``. These methods are invoked, not surprisingly, when a connection has been established, and when it's been disconnected. Note that during ``on_disconnect``, the connection is already dead, so you can no longer access any remote objects. Other than that, your service instance has the ``_conn`` attribute, which represents the :class:`connection ` that it serves. This attribute already exists when ``on_connected`` is called. .. note:: Try to avoid overriding the ``__init__`` method of the service. Place all initialization-related code in ``on_connect``. Built-in Services ----------------- RPyC comes bundled with two built-in services: * :class:`VoidService `, which is an empty "do-nothing" service. It's useful when you want only one side of the connection to provide a service, while the other side a "consumer". * :class:`SlaveService `, which implements :ref:`Classic Mode` RPyC. Decoupled Services ------------------ RPyC is a symmetric protocol, which means both ends of the connection can act as clients or servers -- in other words -- both ends may expose (possibly different) services. Normally, only the server exposes a service, while the client exposes the ``VoidService``, but this is not constrained in any way. For instance, in the classic mode, both ends expose the ``SlaveService``; this allows each party to execute arbitrary code on its peer. Although it's not the most common use case, two-sides services are quite useful. Consider this client:: class ClientService(rpyc.Service): def exposed_foo(self): return "foo" conn = rpyc.connect("hostname", 12345, service = ClientService) And this server:: class ServerService(rpyc.Service): def exposed_bar(self): return self._conn.root.foo() + "bar" The client can invoke ``conn.root.bar()`` on the server, which will, in turn, invoke ``foo`` back on the client. The final result would be ``"foobar"``. Another approach is to pass **callback functions**. Consider this server:: class ServerService(rpyc.Service): def exposed_bar(self, func): return func() + "bar" And this client:: def foofunc(): return "foo" conn = rpyc.connect("hostname", 12345) conn.root.bar(foofunc) See also :ref:`config-params-security` rpyc-3.4.4/docs/docs/splitbrain.rst000066400000000000000000000000711314203541000172470ustar00rootroot00000000000000.. _splitbrain: Splitbrain Python ================= TBD rpyc-3.4.4/docs/docs/theory.rst000066400000000000000000000165701314203541000164250ustar00rootroot00000000000000.. _theory: Theory of Operation =================== This is a short outline of the "Theory of Operation" of RPyC. It will introduce the main concepts and terminology that's required in order to understand the library's internals. Theory ------ The most fundamental concept of computer programming, which almost all operating systems share, is the `process `_. A process is a unit of code and data, contained within an `address space `_ -- a region of (virtual) memory, owned solely by that process. This ensures that all processes are isolated from one another, so that they could run on the same hardware without interfering to each other. While this isolation is essential to operating systems and the programming model we normally use, it also has many downsides (most of which are out of the scope of this document). Most importantly, from RPyC's perspective, processes impose artificial boundaries between programs which forces programs to resort to monolithic structuring. Several mechanism exist to overcome these boundaries, most notably `remote procedure calls `_. Largely speaking, RPCs enable one process to execute code ("call procedures") that reside outside of its address space (in another process) and be aware of their results. Many such RPC frameworks exist, which all share some basic traits: they provide a way to describe what functions are exposed, define a `serialization `_ format, transport abstraction, and a client-side library/code-generator that allows clients utilize these remote functions. RPyC is *yet another RPC*. However, unlike most RPCs, RPyC is **transparent**. This may sound like a rather weird virtue at first -- but this is the key to RPyC's power: you can "plug" RPyC into existing code at (virtually) no cost. No need to write complicated definition files, configure name servers, set up transport (HTTP) servers, or even use special invocation syntax -- RPyC fits the python programming model like a glove. For instance, a function that works on a local file object will work seamlessly on a remote file object -- it's `duck-typing `_ to the extreme. An interesting consequence of being transparent is **symmetry** -- there's no longer a strict notion of what's a *server* as opposed to what's a *client* -- both the parties may serve requests and dispatch replies; the server is simply the party that accepts incoming connections -- but other than that, servers and clients are identical. Being symmetrical opens the doors to lots of previously unheard-of features, like `callback functions `_. The result of these two properties is that local and remote objects are "equal in front of the code": your program shouldn't even be aware of the "proximity" of object it is dealing with. In other words, two processes connected by RPyC can be thought of as a **single process**. I like to say that RPyC *unifies the address space* of both parties, although physically, this address space may be split between several computers. .. note:: The notion of address-space unification is mostly true for "classic RPyC"; with new-style RPyC, where services dominate, the analogy is of "unifying selected parts of the address space". In many situations, RPyC is employed in a master-slave relation, where the "client" takes full control over the "server". This mainly allows the client to access remote resources and perform operations on behalf of the server. However, RPyC can also be used as the basis for `clustering `_ and `distributed computing `_: an array of RPyC servers on multiple machines can form a "huge computer" in terms of computation power. .. note:: This would require some sort of framework to distribute workload and guarantee task completion. RPyC itself is just the mechanism. Implementation -------------- Boxing ^^^^^^ A major concept in the implementation of RPyC is *boxing*, which is a form of *serialization* (encoding) that transfers objects between the two ends of the connection. Boxing relies on two methods of serialization: * `By Value `_ - simple, immutable python objects (like strings, integers, tuples, etc.) are passed **by value**, meaning the value itself is passed to the other side. Since their value cannot change, there is no restriction on duplicating them on both sides. * `By Reference `_ - all other objects are passed **by reference**, meaning a "reference" to the object is passed to the other side. This allows changes applied on the referencing (proxy) object to be reflected on the actual object. Passing objects by reference also allows passing of "location-aware" objects, like files or other operating system resources. On the other side of the connection, the process of *unboxing* takes place: by-value data is converted ("deserialized") to local objects, while by-reference data is converted to *object proxies*. Object Proxying ^^^^^^^^^^^^^^^ `Object proxying `_ is a technique of referencing a remote object transparently: since the remote object cannot be transferred by-value, a reference to it is passed. This reference is then wrapped by a special object, called a *proxy* that "looks and behaves" just like the actual object (the *target*). Any operation performed on the proxy is delivered transparently to the target, so that code need not be aware of whether the object is local or not. .. note:: RPyC uses the term ``netref`` (network reference) for a proxy object Most of the operations performed on object proxies are *synchronous*, meaning the party that issued the operation on the proxy waits for the operation to complete. However, sometimes you want *asynchronous* mode of operation, especially when invoking remote functions which might take a while to return their value. In this mode, you issue the operation and you will later be notified of its completion, without having to block until it arrives. RPyC supports both methods: proxy operations, are synchronous by default, but invocation of remote functions can be made asynchronous by wrapping the proxy with an asynchronous wrapper. Services ^^^^^^^^ In older versions of RPyC, up to version 2.60 (now referred to as *classic RPyC*), both parties had to "fully trust" each other and be "fully cooperative" -- there was no way to limit the power of one party over the other. Either party could perform arbitrary operations on the other, and there was no way to restrict it. RPyC 3.0 introduced the concept of *services*. RPyC itself is only a "sophisticated transport layer" -- it is a `mechanism `_, it does not set policies. RPyC allows each end of the connection to expose a (potentially different) *service* that is responsible for the "policy", i.e., the set of supported operations. For instance, *classic RPyC* is implemented by the ``SlaveService``, which grants arbitrary access to all objects. Users of the library may define their own services, to meet their requirements. rpyc-3.4.4/docs/docs/usecases.rst000066400000000000000000000130401314203541000167130ustar00rootroot00000000000000.. _use-cases: Use Cases ========= This page lists some examples for tasks that RPyC excels in solving. Remote ("Web") Services ----------------------- Starting with RPyC 3.00, the library is *service-oriented*. This makes implementing **secure** remote services trivial: a service is basically a class that exposes a well-defined set of remote functions and objects. These exposed functions can be invoked by the clients of the service to obtain results. For example, a UPS-like company may expose a ``TrackYourPackage`` service with :: get_current_location(pkgid) get_location_history(pkgid) get_delivery_status(pkgid) report_package_as_lost(pkgid, info) RPyC is configured (by default) to prevent the use of ``getattr`` on remote objects to all but "allowed attributes", and the rest of the security model is based on passing :ref:`capabilities`. Passing capabilities is explicit and fine grained -- for instance, instead of allowing the other party call ``open()`` and attempting to block disallowed calls at the file-name level (which is `weak `_), you can pass an open file object to the other party. The other party could manipulate the file (calling read/write/seek on it), but it would have no access to the rest of the file system. Administration and Central Control ---------------------------------- Efficient system administration is quite difficult: you have a variety of platforms that you need to control, of different endianities (big/little) or bit-widths (32/64), different administration tools, and different shell languages (``sh``, ``tcsh``, batch files, WMI, etc.). Moreover, you have to work across numerous transport protocols (``telnet``, ``ftp``, ``ssh``, etc.), and most system tools are domain-specific (``awk``, ``grep``) and quite limited (operating on lines of text), and are difficult to extend or compose together. System administration today is a mishmash of technologies. Why not use python for that? It's a cross-platform, powerful and succinct programming language with loads of libraries and great support. All you have to do is ``pip install rpyc`` on all of your machines, set them up to start an RPyC server on boot (over SSH or SSL), and there you go! You can control every machine from a single place, using a unified set of tools and libraries. Hardware Resources ------------------ Many times you find yourself in need of utilizing hardware ("physical") resources of one machine from another. For instance, some testgear or device can only connect to Solaris SPARC machines, but you're comfortable with developing on your Windows workstation. Assuming your device comes with C bindings, some command-line tool, or accepts commands via ``ioctl`` to some `device node `_ -- you can just run an RPyC server on that machine, connect to it from your workstation, and access the device programmatically with ease (using ``ctypes`` or ``popen`` remotely). Parallel Execution ------------------ In CPython, the `GIL `_ prevents mutliple threads from executing python bytecode at once. This simplifies the design of the python interpreter, but the consequence of which is that CPython cannot utilize multiple/multicore CPUs. The only way to achieve scalable, CPU-bound python programs is to use multiple processes, instead of threads. The bright side of using processes over threads is reducing synchronization problems that are inherent to multithreading -- but without a easy way to communicate between your processes, threads are more appealing. Using RPyC, multiprocessing becomes very easy, since we can think of RPyC-connected processes as "one big process". Another modus operandi is having the "master" process spawn multiple worker processes and distribute workload between them. Distributed Computation Platform -------------------------------- RPyC forms a powerful foundation for distributed computations and clustering: it is architecture and platform agnostic, supports synchronous and asynchronous invocation, and clients and servers are symmetric. On top of these features, it is easy to develop distributed-computing frameworks; for instance, such a framework will need to: * Take care of nodes joining or leaving the cluster * Handle workload balancing and node failures * Collect results from workers * Migrate objects and code based on runtime profiling .. note:: RPyC itself is only a mechanism for distributed computing; it is not a distributed computing framework Distributed algorithms could then be built on top of this framework to make computations faster. Testing ------- The first and foremost use case of RPyC is in **testing environments**, where the concept of the library was conceived (initially as :ref:`pyinvoke `). :ref:`Classic-mode ` RPyC is the ideal tool for centralized testing across multiple machines and platforms: control your heterogeneous testing environment (simulators, devices and other test equipment) and test procedure from the comfort of your workstation. Since RPyC integrates so well with python, it is very easy to have your test logic run on machine A, while the side-effects happen on machine B. There is no need to copy and keep your files synchronized across several machines, or work on remote file systems mounts. Also, since RPyC requires a lot of network "ping-pongs", and because of the inherent :ref:`security risks ` of the *classic mode*, this mode works best on secure, fast local networks (which is usually the case in testing environments). rpyc-3.4.4/docs/docs/zerodeploy.rst000066400000000000000000000112421314203541000172760ustar00rootroot00000000000000.. _zerodeploy: Zero-Deploy RPyC ================ Setting up and managing servers is a headache. You need to start the server process, monitor it throughout its life span, make sure it doesn't hog up memory over time (or restart it if it does), make sure it comes up automatically after reboots, manage user permissions and make sure everything remains secure. Enter zero-deploy. Zero-deploy RPyC does all of the above, but doesn't stop there: it allows you to dispatch an RPyC server on a machine that doesn't have RPyC installed, and even allows multiple instances of the server (each of a different port), while keeping it all 100% secure. In fact, because of the numerous benefits of zero-deploy, it is now considered the preferred way to deploy RPyC. How It Works ------------ Zero-deploy only requires that you have `Plumbum `_ (1.2 and later) installed on your client machine and that you can connect to the remote machine over SSH. It takes care of the rest: 1. Create a temporary directory on the remote machine 2. Copy the RPyC distribution (from the local machine) to that temp directory 3. Create a server file in the temp directory and run it (over SSH) 4. The server binds to an arbitrary port (call it *port A*) on the ``localhost`` interfaces of the remote machine, so it will only accept in-bound connections 5. The client machine sets up an SSH tunnel from a local port, *port B*, on the ``localhost`` to *port A* on the remote machine. 6. The client machine can now establish secure RPyC connections to the deployed server by connecting to ``localhost``:*port B* (forwarded by SSH) 7. When the deployment is finalized (or when the SSH connection drops for any reason), the deployed server will remove the temporary directory and shut down, leaving no trace on the remote machine Usage ----- There's a lot of detail here, of course, but the good thing is you don't have to bend your head around it -- it requires only two lines of code:: from rpyc.utils.zerodeploy import DeployedServer from plumbum import SshMachine # create the deployment mach = SshMachine("somehost", user="someuser", keyfile="/path/to/keyfile") server = DeployedServer(mach) # and now you can connect to it the usual way conn1 = server.classic_connect() print conn1.modules.sys.platform # you're not limited to a single connection, of course conn2 = server.classic_connect() print conn2.modules.os.getpid() # when you're done - close the server and everything will disappear server.close() The ``DeployedServer`` class can be used as a context-manager, so you can also write:: with DeployedServer(mach) as server: conn = server.classic_connect() # ... Here's a capture of the interactive prompt: >>> sys.platform 'win32' >>> >>> mach = SshMachine("192.168.1.100") >>> server = DeployedServer(mach) >>> conn = server.classic_connect() >>> conn.modules.sys.platform 'linux2' >>> conn2 = server.classic_connect() >>> conn2.modules.os.getpid() 8148 >>> server.close() >>> conn2.modules.os.getpid() Traceback (most recent call last): ... EOFError You can deploy multiple instances of the server (each will live in a separate temporary directory), and create multiple RPyC connections to each. They are completely isolated from each other (up to the fact you can use them to run commands like ``ps`` to learn about their neighbors). MultiServerDeployment --------------------- If you need to deploy on a group of machines a cluster of machines, you can also use ``MultiServerDeployment``:: from rpyc.utils.zerodeploy import MultiServerDeployment m1 = SshMachine("host1") m2 = SshMachine("host2") m3 = SshMachine("host3") dep = MultiServerDeployment([m1, m2, m3]) conn1, conn2, conn3 = dep.classic_connect_all() # ... dep.close() On-Demand Servers ----------------- Zero-deploy is ideal for use-once, on-demand servers. For instance, suppose you need to connect to one of your machines periodically or only when a certain event takes place. Keeping an RPyC server up and running at all times is a waste of memory and a potential security hole. Using zero-deploy on demand is the best approach for such scenarios. Security -------- Zero-deploy relies on SSH for security, in two ways. First, SSH authenticates the user and runs the RPyC server under the user's permissions. You can connect as an unprivileged user to make sure strayed RPyC processes can't ``rm -rf /``. Second, it creates an SSH tunnel for the transport, so everything is kept encrypted on the wire. And you get these features for free -- just configuring SSH accounts will do. rpyc-3.4.4/docs/index.rst000066400000000000000000000147471314203541000152760ustar00rootroot00000000000000.. raw:: html RPyC - Transparent, Symmetric Distributed Computing ==================================================== .. raw:: html
Sticky

2017.07.26: Version 3.4.4 has been released!. More info on the changelog

Please use the github issues to ask questions report problems. Please do not email me directly.

**RPyC** (pronounced as *are-pie-see*), or *Remote Python Call*, is a **transparent** `python `_ library for **symmetrical** `remote procedure calls `_, `clustering `_ and `distributed-computing `_. RPyC makes use of `object-proxying `_, a technique that employs python's dynamic nature, to overcome the physical boundaries between processes and computers, so that remote objects can be manipulated as if they were local. .. figure:: _static/screenshot.png A screenshot of a Windows client connecting to a Linux server. Note that text written to the server's ``stdout`` is actually printed on the server's console. Getting Started --------------- :ref:`Installing ` RPyC is as easy as ``pip install rpyc``. If you're new to RPyC, be sure to check out the :ref:`tutorial` and :ref:`screencasts`. Next, refer to the :ref:`documentation` and :ref:`api-ref`, as well as the :ref:`mailing-list`. For an introductory reading, `David Mertz `_ wrote a very thorough `Charming Python `_ installment about RPyC, explaining how it's different from existing alternatives (Pyro, XMLRPC, etc.), what roles it can play, and even show-cases some key features of RPyC (like the security model, remote monkey-patching, or remote resource utilization). Features -------- * **Transparent** - access to remote objects as if they were local; existing code works seamlessly with both local or remote objects. * **Symmetric** - the protocol itself is completely symmetric, meaning both client and server can serve requests. This allows, among other things, for the server to invoke `callbacks `_ on the client side. * **Synchronous** and :ref:`asynchronous ` operation * **Platform Agnostic** - 32/64 bit, little/big endian, Windows/Linux/Solaris/Mac... access objects across different architectures. * **Low Overhead** - RpyC takes an *all-in-one* approach, using a compact binary protocol, and requiring no complex setup (name servers, HTTP, URL-mapping, etc.) * **Secure** - employs a `Capability based `_ security model; intergrates easily with SSH * **Zero-Deploy Enabled** -- Read more about :ref:`Zero-Deploy RPyC ` * **Integrates** with `TLS/SSL `_, `SSH `_ and `inetd `_. Use Cases --------- * Excels in testing environments -- run your tests from a central machine offering a convenient development environment, while the actual operations take place on remote ones. * Control/administer multiple hardware or software platforms from a central point: any machine that runs Python is at your hand! No need to master multiple shell-script languages (BASH, Windows batch files, etc.) and use awkward tools (``awk``, ``sed``, ``grep``, ...) * Access remote hardware resources transparently. For instance, suppose you have some proprietary electronic testing equipment that comes with drivers only for HPUX, but no one wants to actually use HPUX... just connect to the machine and use the remote ``ctypes`` module (or open the ``/dev`` file directly). * `Monkey-patch `_ local code or remote code. For instance, using monkey-patching you can cross network boundaries by replacing the ``socket`` module of one program with a remote one. Another example could be replacing the ``os`` module of your program with a remote module, causing ``os.system`` (for instance) to run remotely. * Distributing workload among multiple machines with ease * Implement remote services (like `WSDL `_ or `RMI `_) quickly and concisely (without the overhead and limitations of these technologies) Contents -------- .. toctree:: :maxdepth: 1 install license changelog .. toctree:: tutorial screencasts docs api whatsnew33 rpyc-3.4.4/docs/install.rst000066400000000000000000000116661314203541000156320ustar00rootroot00000000000000.. _install: Download and Install ==================== You can always download the latest releases of RPyC from the project's `sourceforge page `_ or its `PyPI page `_. RPyC is distributed as a ``zip``, a ``tar.gz``, and a win32 installer. Of course you can also use ``easy_install rpyc`` and ``pip install rpyc`` just as well. You may also wish to read the :ref:`change log ` before installing new versions. Platforms and Interpreters -------------------------- RPyC is a pure-python library, and as such can run on any architecture and platform that runs python (or one of its other implementations), both 32- and 64-bit. This is also true for a client and its server, which may run on different architectures. The latest release supports: * **Python** (CPython) 2.4-2.7 as well as 3.0-3.2 * **Jython** 2.5 and later * **IronPython** 2.7 and later Cross-Interpreter Compatibility ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Note that you **cannot** connect from a **Python 2.x** interpreter to a **3.x** one, or vice versa. This is because Python 3 introduces major changes to the object model used by Python 2.x: some types were removed, added or unified into others. Byte- and Unicode- strings gave me a nightmare (and they still account for many bugs in the core interpreter). On top of that, many built-in modules and functions were renamed or removed, and many new language features were added. These changes render the two major versions of Python incompatible with one another, and sadly, this cannot be bridged automatically by RPyC at the serialization layer. It's not that I didn't try -- it's just too hard a feat. It's bascially like writing a 100% working `2to3 `_ tool, alongside with a matching ``3to2`` one; and that, I reckon, is comparable to the *halting problem* (of course I might be wrong here, but it still doesn't make it feasible). Big words aside -- you can connect a Python 2.x interpreter to a Python 2.y one, as long as you only use types/modules/features supported by both; and you can connect a Python 3.x interpreter to a Python 3.y one, under the same assumption, but you cannot connect a Python 2.x interpreter to a 3.y one. Trying to do so will results in all kinds of `strange exceptions `_, so beware. .. note:: As a side note, do not try to mix different versions of RPyC (e.g., connecting a client machine running RPyC 3.1.0 to a server running RPyC 3.2.0). The wire-protocol has seen little changes since the release of RPyC 3.0, but the library itself has changed drastically. This might work, but don't count on it. Development =========== .. _mailing-list: Mailing List ------------ Feel free to use our `mailing list `_ to ask questions and join the discussion, but please **do not send bug reports to the mailing list**. Please be sure to search the forum first, before asking questions. For *bug reports*, see below. Repository ---------- RPyC is developed on `github `_, where you can always find the latest code or fork the project. .. _bugs: Bugs and Patches ---------------- We're using github's `issue tracker `_ for bug reports, feature requests, and overall status. When stumbling upon what seems to be a bug, you may consult with the mailing list, but be sure to open an issue as well. Patches are accepted **only** through github's `pull requests `_ mechanism, which provides a much more organized way to share patches: simply fork the project, commit your changes, and send a pull request. That way we can track, discuss, and integrate patches much more easily and concisely. .. _dependencies: Dependencies ------------ The core of RPyC has no external dependencies, so you can use it out of the box for "simple" use. However, RPyC integrates with some other projects to provide more features, and if you wish to use any of those, you must install them: * `PyWin32 `_ - Required for ``PipeStream`` on Windows * SSH client - Required for :ref:`RPyC-over-SSH ` (``ssh_connect``) * Compatibiliy dependencies: * `ssl-wrapper `_ - Required for SSL support on python prior to v2.6 (``ssl_connect``) * `TLSlite `_ - Required for TLSlite support (``VdbAuthenticator`` and ``tls_connect``). The project is no longer maintained, but you can download v0.3.8 `ported to newer versions of python `_. .. note:: **TLSLite has been deprecated** as of v3.2.0, and can only be used with v3.1.0 and below. * `zlib for IronPython `_ - Required for IronPython prior to v2.7 rpyc-3.4.4/docs/license.rst000066400000000000000000000001531314203541000155730ustar00rootroot00000000000000.. _license: License ======= RPyC is released under the *MIT license*: .. literalinclude:: ../LICENSE rpyc-3.4.4/docs/make.bat000066400000000000000000000117501314203541000150310ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\foobar.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\foobar.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end rpyc-3.4.4/docs/screencasts.rst000066400000000000000000000031231314203541000164660ustar00rootroot00000000000000.. _screencasts: Screen Casts ============ Part 1: Introduction to RPyC and the Classic Mode ------------------------------------------------- .. raw:: html * `Link `_ Part 2: Services ---------------- N/A Part 3: Callbacks ----------------- N/A rpyc-3.4.4/docs/tutorial.rst000066400000000000000000000011311314203541000160110ustar00rootroot00000000000000.. _tutorial: Tutorial ======== .. toctree:: :maxdepth: 1 :hidden: tutorial/tut1 tutorial/tut2 tutorial/tut3 tutorial/tut4 tutorial/tut5 Here's a little tutorial to get you started with RPyC in no time: * :ref:`Part 1 ` of the tutorial covers basic usage and RPyC's *classic mode* * :ref:`Part 2 ` provides more thorough code samples * :ref:`Part 3 ` is an introduction to services * :ref:`Part 4 ` demonstrates callbacks and the symmetric nature of the protocol * :ref:`Part 5 ` explains more about asynchronous operation and events rpyc-3.4.4/docs/tutorial/000077500000000000000000000000001314203541000152635ustar00rootroot00000000000000rpyc-3.4.4/docs/tutorial/_static/000077500000000000000000000000001314203541000167115ustar00rootroot00000000000000rpyc-3.4.4/docs/tutorial/_static/registry_server.png000066400000000000000000001107601314203541000226620ustar00rootroot00000000000000‰PNG  IHDR;¥årơsBIT|dˆtEXtCREATORgnome-panel-screenshot—7w IDATxœ́w|TÅÚ€Ÿs¶¥÷„P$ERD½‚ 6¬+Ö{U®¨Ø¾«WQ¯xEQ:‚  ˆ4¤é-”PBzv³ớ|$YR6É&ç÷{u3gf̃2s3;sf¼pÏĐ®Â[ºD"‘H$‰D"‘üùryR1M_öGÿ–,̀v7K ¿ Egøư¬“H$‰D"‘H$’Z"4'«˜&‚L:>Z¼Í3éñ|¸ghWṇ̃c£ Àm+@³æă¶å_ƒ%‰D"‘H$‰Ä½ Eï‡Î?”¼ôT^›»Í³Ê£‡â‰Î»ÿ¸Í–=û,UNr$‰D"‘H$’KͧËv]”z¼®óŸNÓ’MPDC¸¡#€øry¢(r¸q»5\æ,9Ñ‘H$‰D"‘H₫L]¾‡Á7ÜJ×qơZoʾT₫·t MøÓéqä&ФRäp ¿º{¼øđŸwă4gă(̀®WʼnD"‘H$‰¤n¸57Û4Ç|ø§z­·s›+X¡¹Ñ\®?¥Íåâå[;r®À.ô­áÈ=…[s•+˜–ifŸ­j@JÉ>B¸q»¦i¸\\.7æBs¹ˆÖå2 !Zé@‰ḌWÀ˜D£1OáÇ~ÎÎD‘£ê¡ê½TÔW\₫Èü|”H$’ß !Üh.'N»­^ë5ºœÅăù’±ÿŸMIE%}¾ÅÛ­á´™+Üyô7₫ăm ̣sQµx¶#Dñ–7— §ĂƯnÇb±`±X0›Í V, G+Á₫̣47‰¤ÆdÜư,₫́#}ú+X.›Á ‚Ü™ĐÄá„´hÑßZŒíî[J₫ñ3¸K³jÅç×̣Ñ´CtÑDcTV¬çöD®«z/ơŸ&đÚi±‚“ógc×.– ü®>₫̃\¢˜VËÑ&‰DR_¸Ưn\.z˜\.Üîâ…ồ]wȧ:oïßö‚ố9ÍîăÙ^ë*µ¡Sl$ ±‘5êĐ4ùGñî2Ë>eÑ4 EQøÇ‹Qơôz=BlvV«‹Å‚ĂáÀétbµZÉÏÍç?oMÄjsbµ90È•‰¤ª»d0hæăé©tº±]₫đƒAú–ci: ;Îßf²âµçY²9³†&´½jw?ü-Âß#cÛvAlüük‘=£h¬¯ZƒW*Ö³5€ÿ…Ö{©¨¯¸ø‚)àFF¬+fñÀ¬3<}së.‚ü>₫̃\ª˜^n6I$’zĂíÖWBơ;ÙÑ\Î’ºK'!UëÑ\N&̀ÜRm}¯Ư٣ʲ¾êÙy$Ă£çµ;{0ªoñ{=_ư”Z.½]ăÀơ§•¬́”*®¸… ··9üüLŒ¸u§ƒü‚|²²²È<—Iaa!‡ƒ¢¢"rsrq9]X­Vœ.'nÍ…[“O\‰¤Æ´¸ïyèÁkk¶)́2ƒ¨‘u˜˜ÎƯ1™°ŸÂ¼ë 2¶mĂ©•”đ8FÖæău‚»`'¹`op Q»b4‚;o+Ùk'“uº°X·N`·ˆé̉ ?ØÓ(Üù9Ûwâr—¯;{낺ôÆdØĂ©©/b¼ÆưÛ’ơùm¯ü›8uù¶"Âu¥_/ÓææWè;úbĂơˆÂßÈ^û.ç̉JB©É_­â×ÔÂ36ÄăÅ©'Æ•Âé¯PPTrÅØ…Æw¿J¨©´L9óâl¦}ÛWi=¸#E?Œ%íPJ̀´9½å[Íü ›Ë›|±@ ! ëĂ4́v%&?ãG₫®]¨eƯ èMâcoÎN}ú"…ơ¸Ê§‹êG€!›ơËü}Á/ ̀&㫇É=WOq¨ª¿̀XZÁ=¦ÖÑjh ˜±l˜È©©¨ÍFѰ÷0‚"CPpàLß@îöyäÏÀí©û(YĐù‚ `;NÁOÉHÙ‹æ™Qé0vưq½c‹ÿtec=º„³?-Åj+ɤáŸp71]¯" $ÇÉßô!»àÔ|oTŒéâè‘hóè;Äzñ?âîêmwGÜN«Ûoè¥pzº·¾›NÖÜÇ8—cª̃î6ùÙ庑äÛÿF˜·¸âƒ¯̃ÚƠóèQÎÎx†œ‚âN®„\Ó]÷ăç̃Ă™éÈ·†Öñ3kĂjúCưÜÉe‰p_œm_ˉp—Ù^VÍåô©¾ªÊÖEÏ„™[˜x{W&ÎM©µÀóY…’Y–æª$n·†ÍfCAúÙt̉N¦‘y.«ƯÑd$(8ˆ€ÀL&ªN,E4W庤H‘âB³nàè‡/R¼»… ×´çwđä'ÙiS1$¿J³î=p₫ü8 îÇó‹AƯ'̉¬¹N»t‹PKĹ̀|¾O¼´ sH"‘C^'صŒï¿’qÏ/¥ ¬;ÑW cû9;.MÅĐí÷ê²ëeÚ›ÇgÜó‚D“ï*_·;ă[¾|ª'£¯º•»¦å“‘|Ê–—yyæYbú̃Ëóÿư™I³å¹×§đâ—ŸsWûTr¬§á~,Ü^@g+S{®kµ‰ÏîËS¯.ÇÜ…¨̃CÙr¶Ä&Ÿư-åü_Îc Xñ›ô]1çºÙfq¢i4¸–`¸w¾ÁëËó€̣Ó‹øúœ~ñPĐa ‹dÚQJ£NèµóytîY9|°É»5}âDZ\ÙơÈxùÆ® »åæ¨ĂñóêOÿ›w’¶:ö«’¥ûóbÂßµp Ködßî| kF=Æ¡ª₫2# ϦhÅDƒk&̉}h "•åÏ^ÏMă—óÁÁ愾àH'[^Ê ưúsÿ¤ơl‰ÂL+6Oÿi…¿øo^ȸ›FñáöHB®œD@£ Kÿ¡ơkÙưÚƠ ½ª'÷½ơî¶ciع='lNO[ÄöŒ1ưs₫=ª;Cox†ÿêÀÚT —÷FŘv¨ «Öÿªm/È\FzªtUơƯỵ̈ÈäcllWƯ^ĺµ̃ExUqơÅW¯íÚƒçW­°YܬËw¡i k}-~@ѪÉ<ü¿3è\Çg̀œptƒªérL!å/,¥ï¸8́¶z­ä_ô”NB&ÜàUJ'ªçÆä†úJ'9e':nMàÆä†>é)íüdGhn—«’·³¹!'O$/?^Gxx8ÑÑÑDFFFPp₫₫₫èT³—Ë…Ûå½N)R₫̣"TB<·®NmC¹&̃Hêø%41ư¿kIÓYØ̣5é@Lï,ÙVH³t°p€¹S—±h¿è‚-ä—¤M}ÓNºhR¸‘\DµâÀ¦³ü\ĐœđÎ-€ằ~w)»5¡;phtƠo/¤ lƯŸ}ÇâƒñmBØ©aQ9́üê7²t`Äc÷¶ơQ&\ß§¿qâV|·.ƒi7îđN„dæ±ö¬ËSלO¿g[¶ˆ̀_ȈhÉá-gY_Đ‚Ÿươ2ƯqŸc÷7K)Úʶ͹¤YưđJ>ë>_̀Öơ;p-®jÇáÔXtMô`è» ä¸ƒÔ&M+¿ưx—Qcëá†Öd>Ø-Z‘gæ«ÓÙdVèy‚ÜE39[Ö™¢ŸÙúÚ•ÜÑăn6˜lڙϻ·~ºæchq÷"ø–øQÏƯº5:E‡Ö“˜a¨:ÑJó«- mˆ}ÓR¹œØ·¥à¬ï8TƠ_Úè±Hë;>⩱}0®ă“1#yç§L6 ¤¡MP¨ܧÙuFФF«üål|÷5¾ûơë²JûÏ1¾<‹éÛ ‰ KĂ¼x&gQiÚw ‹R 1;]¸gÈưi›÷Đ©… ÅÉ8 øúË_rIÓ‘ØHcÖ¿¦²*K£SäIlË>a÷l~<×”°ï15ĐÀ¨b¬Öÿjlßq‚ŒŸ—UÓw ;¬#ºWc÷;6™ü 5T×¼f>øê¥][«DnXB.Đ↡́ÛÅ![#B;6ΰtÖVl‘h֩Ϙ¶A8«ëç8€g·)—@„v~%¤>Es9Û'=¥“Íåäú®Ñå¤́µ Ơă´Û¸¾k4/ÜÔ¼pS;®ïí³?¥R<̉́vÖ¢Ê8́6,f3N§Ǿ6L~&t:náF +OÛH(©ç\¡ E~A*IMCi`æ›M›6¡iØq6~±‰£zÚü–tÛX5»2rƒ–…Ë¡aδáôÔ±1Œ~.‚”b›œ6”¼|ă‹¿¥¸ËM~Çæpàèz´ÉàF³Øaé@ï&839)fÛ®á”v ­Ú^C\û0bt'ù~̉rº¼~×&vFm¨×o¬Ùo&,8¿ `j²éŒ‘N5åI7Ñ) ‹“9Í¢ Véṿ›{5N…Ă8ëhh8̀X+î6ơ&öo·\̣¤¾áƠ4¸îj”^[™·!GÛ@Ú@Ư`¿|¶³w°åäjr´₫4¨Ï8”é‹åû‹J8¹û>€"6ÿßDủ66ˆÆ&•æ‘û(\·ó î<0eEq[f₫Ê™åọ˦sXsmÿë‘ÍÉæÑ˜L Ư"ÎÇ/¢ºô|V† †w¿‹–n¢ă³QåcÉlaí ?® 8ljlfÑ„)$FëpÆ0»ük¾7Nj\—T>¦z0Tëơ¶¯øm6~Ç₫F—–̃ûnLË¢Cª±ÛVDvp?:—µÉ½›Óë¶^U\ LuèsæØÂ[̃HÿÈí×_ĂđPàÀ4¾=â¤I»H¢BêXwô>œë«é9f2Œ*åö€J$ œN;»‹³½^ë ´»p:íñuz,v—çÿ¯Ww­¶z*ÖY1­º2ơØÅ+;z(>dMQ*& ( …8]N5lD=8“~†ư÷ƒR|¢‚ÛíF (ª‚ƠjEs»QÅkÉ_*î5Eb/ƒ‰ Ñ‘§Sˆmذx>’|‡}¾ ô „QUh¥¢÷¤)ø© ­"ϧG…ˆ:ÈGÁ¢3ß…ÑÓ9Op>UŤSi©¤áth È™N¡%–ø«ˆß“Oüµ7Ñ̀_Gtl_â̣Ǵ mƯxöÙ ¡`̣jS–"ˆđÑ_¯häü´ k«Á ™̀†}7¢Ó88m>Ç1’́ÚÅéSĐªE?î¼7ưÉÉ|ưË*̀irëƒQ́]Æ̃•‘ á₫…8jjƒ́̀EZm\ ̀I³#Ùz…–1*‘±T|­RÑ©$ÄBƠ Ø±îü/_¼5ƒågˆë3‚wÜÎƠí#q¥oäëÿLàËc½CQMhÙéJôE¿đÍ>+1ÑÁø±‡‚ÓĐ y=Æ¡\Û”é/º̉₫½w_ÚÏÈIcèùÚ^ û;öd̉®©f&¶Ođùg₫́ £EÏ1<ö`_bo~€ơ»̃¤SẲ¾R>~a-ă—sŒ<›ƒ5F# Â?“__ÂÛ+̉( ·+ÿnĂœC‚¢hi$[§Đ2FG¤ đ ùh º{#×¥bLƒ”2ưÙ›ÿ5Ø“NöO«°¶¬¢ïr±™à*́Æà.l ´#ª‹kLA;VơP3±múGË«pC"ÇBaÄÊæiËÉ0è¥ÏĂa‚ëP·ÎFQuv‡«Èy䯋Ṛßûàû™>Ơ0,1¦ÊºÏƠ«ÖS¾DƠ׫¾æ»ïwf2ùûÔJé“¿Oå‰aqƠøRQÏù¹MÉdG->ZÚK¡¼Ül6₫₫₫?~œ;wEƒ˜́Ù»‡Ó§OSXPHAAN‡›ÍÛ­•LväăI"©ŒÍĂied¯v¸RÉÚAt¯vÜ4ª'“W¦ÓôéKç“êPéä¦üăAUA©˜¦«æ8ȉM‡h>°£ÇƯDî‚uèƠ¢Û_M×₫­88å B¥ưt*ëyéQôĐŒ ksjÑLŒ˜Î„Ç XOlÇ©&ñØäñ́Y5‘>Û†5<ˆ ú½Út˜´]4»¢₫VB ÍÑôÁt́÷£Û7A±|ËgkÎD !ư¡£Đ¢­Cê{Ë9)rI[³åöÇÜB®ÑH[ƒB#½m`;ĉ]4©ÎnÛAm>L³mơÄ­¤O_EHX; ¼£ä$¹ú̉ëå·‰$…ĂïN₫>•'‡Å1¬kå OE=ʼnÅÿJéK4£xùPEUÈÏϧ° O§~^¯G§Ó¡  ¹5\NN§GÉïía·ÛB ¨̃ë”H₫̣¸ö“±aj¿d¿ØÁöG¸́X~z™OĐåÆOyû6À~’3‹ă©O÷¢ "H¯Tø†ÓÛ ª·4æMăYrü~Z_÷¿X°ø‰£+§r0ĂN|o=Æơ¨ Z@ÁÏK»ă5ꂼŒä¿ôo±‘nW ÔS”mÇ®SiHHºạ̀«8̃m²‘¿î)Vœ«¿QPD¶Ÿ7áÙ‹1₫Åǵ²êéØX%2J`<ñ fZ$~cñ3„`Ûû gE{('ùes~Á& ~:Âơ>´ÁNÑO5ØmĐpl}o3'áÆxñÓpî%kó|2[ßKåÇ´“ßçÓº«úy2£‘₫íơä;D©˜́zNäøqÎ&pâ¢ØFzb"<°ˆưßü†#È@A¡q€†³¾ăà­/Vzî l'³ø-•›₫q+]îœÊá…O}h™{;âü1<ƒ û©µ̀|ă}ö;À/Ó]²j´Ÿ…;Úđ·7Ÿ¥C¤¬G92ă5›™D0AÚ.œIáÀÛ¸åăŸ¹Å’ÊÑ?‘ĂD”‰­eóÓ,>6–Ö×ÿç§< ¶T²Ö¼Á²ƯE´ ¤å–ñ,9Vơ½Ññ†!4®S/÷]9ÿk°Ư b¤º¾ëF·ơiơnwp¿A$V´IWC\ÏÚHß4Ôj|­ú9h‡1o> ×¶"81w&FºꈉˆâXeƯÎ́ÖÈ ƠËml’¿&Jñ@̃û’„OÅ«.[²+ËW=ƠM¬êSÀøaq /™ÔŒÇ{%º}ÖĂùÏzUQP½¬Â((pËCĐéu·À¥ÿ˜¨ĂáÀ^̣;.§ÍíF§Ó“q¶xƧ*ª×:%‰ ëÆ§ø̣ư\Vd¸° #÷\A‚rÓº'xg…¹.¬n@§@×A~¿r䕼·¬€ ôtÇF¿̉“wjJSˆ<ǜ{x"û²ä9"ÂM´Œ4Rp|=¿¾Ü“/——-£¢*À¹Ý߀A“¾äÔÓ0†mĂ`%'¸=-¯ºƒ¤˜5,̣=yn…ˆ0C‹í¬Ñ&w-ư-ú™-ÿêÉ̀emåÔBÎX{Ѹ•™ S1„û¦×Ñ:D‡’ơ;{ÿÛl£ñq !Ê~füb!G¨Ä¶ô#$DW¼JV“MázBÅ̀5åQ 1íz‰Ïæ=Åî,'f7èü ´ÿäN¦ÙÈ÷âOÁ!'1íM4đvj¿N¥uƒ2ûé­˜ÉD@‡>[X¼ÓBTx0¦ á:µ₫ăà­/**ª—vnf̀¼‘“X}ÜA Q-ĂxT›Áï>潓vNYÜh€ÉÏ@ËÆ~„¨¥ÿèrø›‰¬_ù9ỵÅ64ˆ ¢m„JX„‚Úgụ̈Ä»¼t̉N0è‰ÿô]Μ°SP¦ïGy—¿Ê¿²œä;ôthH¯¼èêî`ô-¯ªS—·{LEơLêk²]O˜®ú¾«ViwĂZ{±IçÀqxÛª‰«N½€çîí÷̣¿O²øêtñM`t0!FqA*º:?c|±»Ô‰ä¯EñjE«& éÖΈW”ḷ1¥£wTơyVóZ£¥’>¥ÿ]–‰% € ½¦:Ï·`ơï}̀kÛ™¸"¾r¿ël¢KÅDSÅuÄ·ö÷¾â˜‚L$µ­ªOŸ'4LGϰ*.*UƯ'±₫¯¯x‹©7?+}åX…í>ö]ïvŸÆưi6)¬ó×}=osUÏ€À®‰¨âb]ëöÅn‰ä/IÉ;.ơ^kIƯ±úŸM(eWvªÚÆägä‘k[s6ßFƠ…„—7†K÷ă‡ÄÑ ÔD€Qïu™I"‘\¾„úÓ·½¦‘&NhXµ̉—Ôơ´ˆ2à¯₫''¹ræ£₫|°́,¿Ø@ïo¢S=á~41üE·½¨º&„T$p‰Ô]†qplâèëẈÖ’\/[©.µ‰©¯¶_hßư3´³D"©UQØ{ô4 ƯÿV¯ơîI=]nüÿgÓ –Pºuh%¾>£›«¬À-„g‚ăm¢SJétmùïü³é)²kŒ›u¬x²³è;«́H$‰D"‘H$ÉåB‘]ăï3S‹·±Ù¬EX̀—Ú&‰D"‘H$‰D"©7ô ¾ÿéRÛ!‘H$‰D"‘H$ơ>0,†—füJ^V†'QT÷bD"‘H$‰D"‘üÁ(ûægOç‡GÆÿ~‡&I$‰D"‘H$Éï‰̃kª\Ù‘H$‰D"‘H$—^N„ö:Ù‘S‰D"‘H$‰Dr9áíà~ï+;rº#‘H$‰D"‘H.sªØÆö;[!‘H$‰D"‘H$ơLÛØêa¶S¸–Ñfrïêi ¾đêê?ª]’ ăRµëåÜŸ.gÛ%‰D"‘H|Àûil¢R°–ÑƯÇ̣cÁÔñ{Ê¥´÷r‹•Œ)R¤H‘"E”?²x¡n+;…kÓă 6—ḰΔ-Ÿ3kKÿâ …§®j«;^í8o‹÷o«ËØÜ¿Œ½k3`÷¬®ªœï ë÷Ï/}›~¡•_“̉²~ੇ~`đ'oŸ×}aê.ˆ1í;{‰TĂz¢lü/¸² ïou‹ÅïĐÏ+R]_­U?¾¶K$‰D"‘üÔí¼ ₫Ư IDATwgÊ^TÂËÿ/ÖHª:;ÊÚà-­¢]ơhï#í¶̣Ñ·§é=ºi…;96ÿlo1W#u/.µ`Ö¾]Å ×2fà,î©Ë?€>QíW§Xüư¼6:kcÏ¥°]"‘H$‰äw¤­ăÚQáÆôË…^®9N³̣íûèŸØ™6z2ø±i¤hu×壈¢ƒ̀yö&;t¦MâPÆ₫w3¹î ö¦¯aLÏ'Ø\¸•¿÷́L›Uøà£ xd(93f²ÇZÁ–ÂíLưÚÍ­u'Ô\!VUÅǾ›ICnàöâ|®t~œ»|Q\Îqà}y»₫cW]{®aL÷¼ùîă\Û½3mJbØẵùïóÜØ§m:t&ađßùàד́™ÿ/ní—D›é4l<Ó÷[×Êö—Âậï₫÷9†÷êL›é<́I>ßm.YwĐ(:₫#ÿ¾o:t¦M‡nô¾óßü˜é¼È}Ƚî\~ưïßKbu×=û‹Ü%פÿøw êI›iså(³‡B÷Å´¹÷]áÆt¿™×̃ªÊ)R¤H‘"E”?ºTÆëdGˆ¤ª¼eÓËå±³û£¿ọ́₫¼±́Wöl͸€¯x́ơ_Ésû ¯¶vx¤ˆï<Î{Y×3uƯf~ûá5zî_Ä!Kƒ®fææ÷éœ̀”Í¿qhïç ª»]¦öc¸/f5­ÍFó¤kdü0• q÷s[+£ïñ1´b`¢_wdáà8ư|0•Ÿ³Üá"sû́‰×Ô=†^cYC{fѱ+yûû­Ø]/,‡˜·+ççüÄkørD!ÿ»ïfÆưÇӳ׳gǾ¸ñ₫sG^ú‹å_íï̀Ë‹~eÏö™:<‹ÿ¾8‡TˆÂ_xzüw„Ư;…ơ);Ø·yă70áåµdi¾ô…:ÆÂ½–#,8Øÿ°™]ë>âÆ¬xđß°–₫oâJŸÇÖ”mlÿêi:YÁ̃¢‹ÔïkÛåâ_R¤H‘"E)pñFWv€Âmü½gÚv,•ûX]Xnèt₫³íó—ëó̉Ư\ÑØcp+†?q ·|ÇkMºjkG‰-fÖ|½ÎŸ;_Mr´ ÿènÜóâƯ´0y±Ñgß}}†ëÅá©‹8æ,Isaî—é\óp?btµ‰ñCâÉZ¿³p¶b ǵ½̀ZsM²w}퇴©»kÓ^€₫₫ÜÍt‰2 ––ˆgü¿ÆpEÓŒ¦ºƯ:ÿ–<üÂôlr>­uæNؽÄ? =ă_Er#Œ~Qt5¶ç¶“fÔ‡ư‡û{· ܨ¢j΀Ç̉âÀ¶Ơsû•­Ë½~-¸¿¤ùEwåînÇƯââX):üt. 2Np*ÛÓdîœđ=/F¿ïBÛO²¹°íX6₫ƠùQ/q•"E)R¤H¹˜R™:₫¨¨€àd¦ü8µøưR̀ëø̉S^œÏëÊåDúæƯĐÉe«Qºcvפ«v”^3çsº(Œ¾Ñz=ƘÖD·W¶±Üç '8é^îĐ=§ÛGñV¯@ 6OcIàí̀èä_Y_µñàƒh‘ö‡ó›ñË2¸sâ~¾‚´!X{²Ă:ÖƒƯµi/ºP…éÊ—Sƒh¢z̉ƒƒ>ˆ˜ạ̀iz͉Û[üƠ@¢Ëæ5Ñ»Kójälù’‰oÏeÍlel²¸ë»ưÊÖåƒ^CmÊö±è8"RÈÓuâ¹÷ïçƯ'óÀäT²Cº0ú…7ùÇF/ľªú½ywœÏíèñ³?$‰D"‘H.C¼ŸÆæĂ\G”ä+—·l:e>ëCiÖ(>Sgr_óÊ*kÔW[;JQCiÇásN® 1à÷ô±ß˜ùö<ú̃@¼¿ó&½8•Ơ‡³±»Ư Â]}¬:_ëØƠùQoq•"E)R¤H¹XR™º=]úQEzÙ4a¢ă#Sxkê[¼=æç LMº3jÜst đA_uvnc\¯n.$óñ¯Ÿ2 (€¤§̃籉/po¿÷°ÓgÔßh³ûpeư:p×MÅÇ@Ó«zøÉNF\ÓƒĐÑxÀ4oI½›`¨küÊR{,eóz+ïcZEƯƠåơOäé\Åø×o&é)7·bĐÈa´ Ø_uùºR[½qÜ·™§½Çi‡?qC`ÊS]@@GFv_ĂkaÜY¦ÆƯó¯×èæOƯí¬ê₫«t­íX“‰D"‘H$—!JŸ+{‰Ÿ6üJ^V†'Ñn+º„&I$’ßózî<›»¨‡I¾D"‘H$É%Àäw₫³§óÀ#ă븲#‘H₫\T·Z$‘H$‰Dr™RÇÓØ$ÉŸ oû %‰D"‘H.o¼ŸÆö{[!‘H.-Aư˜¾¡ ï‰D"‘H$ªØÆ&‡;‰D"‘H$‰ạ̈F®́H$‰D"‘H$’?%reG"‘H$‰D"‘ü)ñ:Ù9}"ơ÷¶C"‘H$‰D"‘HêL뉕̉¼Nvº÷zÑ‘H$‰D"‘H$’²äK';3´£‡°˜óq»«̃q¦ª Á¡4oٖȘF^óTqô´D"‘H$‰D"‘ü¾äçf“zhqí ‰ˆBU•*óºƯ‚‚œ,R÷ïDo0Y)z1•H$‰D"‘H$_Ù¸îÚ$t#,*ºÚ‰¯́„EEÓ&¡×ưà=ÏÅ0R"‘H$‰D"‘HjK@€A¡µ*A@€Ÿ×k>Mv‡¥Åo}ǵR|¹ÑpÜ8’%éÈ‘z©¯Ưüù$§¥•“ Éw9:`€Ç'Sĺ¥6ç¢3|øp„´nƯúR›â3ñññ!¸å–[.µ)—Œ¡C‡"„ ))éR›rAüYü¸TÈøI$É¥GQÔWt*¢ª â}ZăÓd'lȇ'zôèZ)₫#¡ ¦é‹/’˜’B̉±c$;Fâ4¸ÿ₫‹¦óè#°øpÎ}ñE½ä“H$‡₫óŸ¬ZµíÛ·_jS.ˆ?‹— ?‰D"ùăâr:Ø·ưW\NG­Êư%(06iBüÂ…è#"°;FÖ{ï¢Đè±Çhüøăè‚‚8ó₫ûơ®×yîÎsçễ½^̣I$’ú§wï̃ôéÓ‡k®¹æR›rAüYü¸TÈøI$É·¦±oû& ós9¸s+“¯Å·ƠŸjWv’!9-È›nBF@§Nå¶ZéBB~œä´4º9B«O>AY|*‚)6ÖS.éèQ’#aíZºíƯḲñă$îÜI`—.úüÛµ#~Á’+.śí¾ú S³fålôo×ÎSo›/¿$éĐ!’Oœ ùÄ :¬\‰¢×ÓêƒPM&r—/gß!dΘAæôé=Åφ?Œb4¯TQHX·ÎSO§ ́Ö­œ̃ü­oÔ€ºîßO·#GhúÏ–»ÖæË/é¶oW®¤óæÍtƯ·&Ï?ïµ×}ơĂ×|Q£F‘¸s§'vÍ'L¨̉']H1wƯE³—_&tÀ€º„…~ưh;gmfά×É¢¢(<̣È#́Úµ ›ÍFnn. .¤yóæạ̊;–ÔÔTl6kÖ¬!¶[ơN<Éo¼áóơ²yóf¬V+ÙÙÙ̀5‹˜˜˜JåBđ·¿ưÉ“'“™™‰ƯngçÎ †*ơ=ôĐC8NÆŒS.}àÀlÚ´ «ƠÍfc÷îƯ•̣L4‰¼¼<{́1N:…ƠjeÍ5´k×®\¾¸¸8æÍ›ÇÉ“'q:dff2}út6lXÉ_Û#!!o¿ư–üü|, ß}÷-[¶¬̉O(₫6óæÍ¬]»¶NñóÅßÀÀ@ xë­·*éøî»ïøí·ßê䯯~ø̉n¥₫ú¿âĂáà©§ªT6%%…o¾ùæ¢è­­¿¾ÆO"‘H$—!wm§0?€¼œ,́Ưésùj';»ûơăÀÍ7SđÓOh……ØRS9xóͼùfv_uÙ @@§N´™9¿–-1ïÜIúG!¬V ¢íŒ –Wc̃´ ¿¸84‹Ûñă ª4xđAüââˆ_¼˜ÀädlÇsæ½÷°=J`Rm¿ú 5 À«½AIIä®ZEê¸qdÎM̃ªU_y% (&i/¾HÔÈ‘$îÜỈñă´_²EQ@üJ©ª¢×£¨*g?ÿWv6ÆFh5y²gY[ëwQ9‹ƒ¦9bN€!:~ưP87oæíÛqÛl&V₫Q%Ct4ÆFĐã¶Íg?|Í6h±ÿ₫7úˆ̣V¯&kÁ &§e16jDóI“hpß}4ñ2(̣ç™3""í×ø… IܱƒF=†><¼Nơ•̣î»ï2ỵd¾ÿ₫{†Êw̃‰Ơj¥S§N<7ÜpŸ₫9«W¯æÚk¯eíÚµ^³¾°qăFzôèáơZÆ iÚ´)7n ))‰åË—sö́Y®¿₫z}ôQ®¾új¾ÿ₫{Ô*ú̃o¼N§ăÚk¯%99™%¥}ß ăÆăĂ?äÎ;ïdÖ¬YǻøöÛo9sæ Æ càÀ|öÙg4jTù\ûFEï̃½‰Ål6³råJÊÜ»-Z´ ;;›ñăÇsơƠWóÀϪU«*ùáK{ÄÇdzqăF¢¢¢=z4·Ür aaa¬^½ÀÀ@¯¾vîܙ뮻7ß|Óëu_ăW“¿‹…9sæp×]w¡+¹wKc:dÈ>û́³Zû뫾¶[]âWU\rssùá‡9rd¹ümÛ¶%11‘yóæ]½µñ××øI$‰ä̉rtÿ.r2ÓË¥=ÆÉ#|« Ï•½„BäK÷PNZN,wí–-«t­ôz·Ă‡E—”¡aä´4‘œ–&Búö¦ØXÏß]»N?ÿ,ºîƯ+¿úªh<~¼è²}»è°b…DÜ'Ÿˆ¤#GDâÎB$¡ˆI©©"ùèQuûíƯ₫íÚyêm=mZ%ÛM˜ V¯-ß_„\u•H:zT$;&?ư´ˆ_¸đ¼M;‹†ăÆy₫ễ]"rÄO©ysŸư-kCƒûîó\ó?_ó$$x®‡ Ñđá‡Ẻ±c¢ÛáĂB*Œ+’]÷î(2D4¸ï>á/ÂÉ'Nˆä'„><Üg?|Í×nÁÑơÀÑqƠ*Í­>úè|übcËùS¶íªê[¨ªPŒF¡èơƠÆÎ/.Nľư¶è¶¿H:qB$?.ÚΛ'‚{÷(Jµe+Jll¬Đ4MLœ8±̉5};Ö¯_/vï̃]îúܹs…B´nƯºV:Ÿxâ ‘——'”[oºé&Ñ©S'ˆo¼Q¸Ưn)1kÖ,‘‘‘!L&“§üơ×_/„bđàÁåêMHHB±té̉*uÇÇÇ !„¸å–[Äc=&‡¸å–[*å|¸'íÙgŸV«U„‡‡×Ú__ưđµƯj?_â2zôh!„ÍK›€x饗„ÙlM¯¯₫Ö¦H‘"E”ßO–̀₫Dde¥—«Ơ"¼aµZ/½ô=zôàĐ¡Cdgg{ô₫üóÏØíörz…U®-Z´¨F|đA>øàfΜÉ×_]éú₫ưûq:¼óÎ;Œ1‚fƠ¬Ú¹\.RRR<Ÿ+ª¢Ó¡ètÅơ DƯ~{¹w„Ї‡£ ơj‡3+«²mAA(z=Za!Æ’w¬‡Å(gN®2ÿÈ MC¸\M;o«§2]Ưü­GÎÍ™ƒHØÀ„ôí‹Û¶èBBÈ;€¢½{qÛl‡ƒˆ›nÂ~ô(Âí&ä+́Úáp`̃¶­V~ø’OÑëQưüPt:´2ù\eqµ!¨{w 11˜SR83y2ëÖalт毾JÛ™3 íÓ­ rW ô胃=ÛZ´ÂÂZéˆ(>Û=33³Êúè£J× +Lx7ǹƯwßÍÓO?íuµ¤"5ÅÏæ̀™Ă;ï¼Ăw̃I\\‡fưúơạ̊øâomư¨©Ưj¿Rj˼yóX¸p!±±±Œ9’ÜÜ\V®\é¹~±ôúÚOkÛ$‰DrùáÓÊp8W^ü¼ÿ2©å·ßPôz‚{ơB5™éÓ§x¡(Xvú~b@Á/¿ ™Í˜5#Ư:̣×®ơHáæÍ822|®Ë‚€Éúê+ }Ûm%%Ñô…P }íæ|µơW+³e£ºç}ɧ™Íä,Y‚Ûf#¨[7Tƒ¬2a x2£ª˜ZµÂؤ ù?ün7j` ªŸŸgeÇW?|Η’‚Ûb)wª^u[út¡¡ÄŒKóI“<¸Ü5·Ư^n¢à¶Z1oÛFÁúơ‰N@Çt̃¸‘øo¾!lĐ ééœxñER:u"ơ¡‡j=ÑX·nn·ÛëéMú2}eóæÍ•V@ªÚFæ ¥‡ 4ˆ+V°|ùr}ôQÂÂÂ<‡lƯº•¾}ûâWæ~4h¢°eË–:ëÏÊÊÂår1f̀7ǹ|Pe^MÓX¿~=_|ñ7®t²›ªªåđíÚµ+lƯºƠ“æççWi0;|øđJº|mƠ«WÓ­[7<ÈÊÉéÓ§Ë•{ê©§ÈÏÏgÚ´iUúX|ñïóæÍă₫ûïç¶ÛnăóÏ?¯T—¯₫ÖÅêÚ­6ñó•ï¿ÿ‚‚FÉÈ‘#Y´hGùßG¸z}ñê¿H$‰ä‡O£ü¢}ûˆºơVüƒƒi8nÖưû±Ÿ:…-5Ün2§M#âÆÑ…‡ÓnÁ 7m"ú;.ÖC‡(ܰc û¦ËræwèđƯw%&̉aÙ2̣~øƠߟ̃½FƧŸ’»l™Ouå¯^Môm·alØ´ư‹S“&Ñäÿ Ư¢Eàry¶|Ơf¯¶/₫–żysñ–=E¡å₫CîªUØÆ’’‚(óm¢¯ùÎÍ™CÔí· d/\X^ß¶mÅÇi«*Âå"{ɢdÀ•Ÿ_ÜnµđĂ×|S§̉fÚ4‚¯¸‚è;îÀqæ Ñ%vzĂØ°!Í'N ¨kẈ~øÁç6(EeÏ̀Û¶‘₫ñÇXøx2G5?~œÉ“'óâ‹/À+đ÷÷çæ›oæë¯¿fYIßûÏ₫Ẳ¥K¹÷̃{™3g}úô)÷>FmÙ¸q#Ï>û,Gáøñă,_¾œ7’““Ă2~M<™Ûn»… ̣ÁĂÛo¿MJJJ¥wˆêÂáÇyæ™g˜2e Ë–-ó¼qĂ 7pûí·³téRN:E«V­xüñÇY»v-N§³\.—‹?ü_|›ÍÆë¯¿ÎÉ“'Y°`'ÏÊ•+¹ă;˜1cdäÈ‘Üu×]•́ñµ=&L˜ÀæÍ›Y¶lŸ}ö999ÄÆÆrƯu×1₫|îđđpzè!̃xă ¬VëÇËWKùôÓO¹ÿ₫ûÑ43fÔÙ__ưđµƯ|_m°Ùl,^¼˜'Ÿ|’FñÄOTÊSßz}ơ÷bô‰D"‘ÔV.©¿Ê|9Mơó­>üP$9â9=+9-MèÊœ̉¯ŸHX·®ø´¯´4‘”*ZÿïÂ%€r§±ùÅʼnË–‰.Û¶‰&Ï>+ÜwŸèº{·èüë¯úüÛ¶mç̀ƯRS‹Ë8!º8 â>ùD˜Z´8Ÿ¯̀‰^¡ưû{=Ơ!₫›oDâ΢ƠG TµÊÓW|ZÛ‘#´ îƯÏŸØÖ­›Ï₫V”¨Q£D×={ÊÅOQç|]¶nI‡‹6_~Yé>,̀cW³‰"SRD̉‘#•̣ûꇯù¢F‰;wzÚ¬ó–-vÛ%EQÄ#<"víÚ%́v»ÈËË .Í5+—ï̃{ïGv»]lÙ²EL˜0¡N§±"""B¸Ưnñ₫ûï{lÈ̀̀Ë¼ÄæÚk¯[¶l6›MäææÙ³g‹ TÊWzzƠ!CªÔ[ö4¶²éË–-ÙÙÙ¢I“&:t‹/gΜ.—Kœ;wNLŸ>]ÄÄÄ”+7ỉ$‘——'F%;&l6›X»v­ˆ/—/,,L̀;W˜ÍfQXX(–-[&n¼ñF¯öúÚ;v‹-ÙÙÙÂétcljiÓ¦‰¸¸8Oưë_"??_„††ÖØ&¾ÄÏWËÊéÓ§½¶kmüơƠ_ÛÍ×øù—R2dˆBˆŒŒ ¡Ó鼿©O½¾ú[›~ E)R~?yåÙqÂé° ‡Í*́Ö"a+2 «¥P™ „¥0O˜ósEa^(ÈÍù9çD^öY‘›•!^yvœ×ÓØ|́\îbl̉Dt₫ơWÑíĐ!Ñ₫»ïDđWÅhƦM…±±Gå@ IDATd w9IÙ#¨Ă}lH‘̣{JéàÿRÛáMEVV–xë­·.™¿¥GPßtÓM(?₫J"ă'E)\©ïÉN½PđGÇqú4û† £ÉsÏ9bí¾úÊsM³XØƠ½»çˆë?2Æ&MJN¦ñ“Oâv8pfdWÇ£%’¿"‹…¨¨¨K¢»E‹´nƯ7ß|“£G²té̉:×u)ưø3 ă'‘H$₫“(>ùÄ?ÿɉ^À±I´‚́iiˆ ïüQiđÀ4;–ÿgïÎă¢*÷?€f†MvÄ·\PÁܰ¬$Sé*jₘ¹¡f·̀̉~z3of¦”r3Ëåæ’×5\ADµEC\PY„H„a™ù₫₫À91ÎgpHÅïûơz^Ê9Ï<ÛYæùb5H£HûïưÿkèåUÿ₫ç«Ïñ₫ÿ-̉ÉÉJǬwƒ;;Œ1ÆcŒ±ÇßkÉ ̉4USQUư_£ư?  ¿ùÑÇÆcŒ1ÆØc£ƒ['hÔjh4÷ƒZSíÿjF#ü¿j¹€Ä`Z¢&eŒ1ÆcŒ±'¨Î“¯/Ú/_æo¼ÑĐåy¤\fÏFßÔTô½yÓ$é¹ïÙ¯Û·uÂĂÄ{9 "ÔɲC‡G]ö7;v,̃zë­×/X° …âo,Ñ“'..0IZumÆc¬1ƠÙq6 N#G¢ù¤I ]#³³CÛ… ÑëâEôMKCß´4ôúí7´|óÍË3ơƯwquäHÜƯ¼Ù$ñ{’đÅơĂKKKCFF†ỈâíÁćiôT<³cѦ º††Â¬iS(̉̉·z5 ‘ Ơ{ï¡ơûïCfk‹́5kLoåƯ»¨¼{¶ưú™$ćé2}úôG]Æć‰Vë¾7oÂëöm83GGX÷è¡3ÔJfo/ĵ0±±đJO‡×íÛèsó&Ü~øfÎÎË„ÏơMM…WZ7o¢í¿₫¥³®ó–-èså <¢¢đ́Ù³è}å Ú̀Ÿo0׋­‡ØxÍ&L@¯ÄD¡íY´5‘ÙÛ£ÅÔ©h÷Ùgp2Ä`ûàyü¸¯WF={ÎcÇêÄ3Ơ₫bǽ\5”1=-gÍ̉ùl÷ÈHô¾|6n4y¾33Qơµ8]v́@çŸ~2YçxÙ²e(,,Ä{g¬¬,”——ăøñăpwwâØØØ ¨¨+V¬Đû|xx8.]º$ü­P(@D˜4iúöí[íu‘GGG½Ï÷ïß.\€R©Drr2ú÷ï¯ÇÇÇgÏEyy9̣óó±}ûv´hÑB'vXœ¯¯/’’’jMO,OOOFäææB©T"11æææ:ñ:¹\̉̉R„‡‡ĂƠƠU/½iÓ¦!55åå刉‰Á́Ù³ADèÔ©“N¼êmVÛ06ÄÇÇ£¼¼ …III˜O"•Bbf‰Tœÿ₫ªü|X´j·@"©W}MASV†{j5œÇƒD&˜7oû!±¶ÆƯ]»Prá4 lzởKĂ¼ysX´j™­-JΟ]±ñ_}V­‚YÓ¦(Œ‰Ã̃½0ࢿ:‹V­đ̀²eh9s&Ú¸è0õ6o†¥›ÏŸÇíÏ>CîæÍ(¿|æƠ.tM¹¿¨‹Pṭ$4%%h:rä_y¸¹ÁÚĂ2{{Ü»?ó½)ó…D"ª¾•ÙÙ0oÚ¢kh(zưöZ½÷̀œœjlg1́íí1a¼ổKèĐ¡JJJëûu(--Å;0uêTÈîï{àââ‚aÆaÓ¦MÂ2www¸ººâÀHJJ‚«««ṭ•ÉdX³f V­Z…‰'ÂÊÊ Û·o¯:.ïëÛ·/"##‘““ƒ×^{ sæ̀Á Aƒéǹ¹9‚‚‚0v́Xté̉………zéƠÇ̣åË!“É0tèPxyyá öÜ k×®8}ú45k†I“&Áß߈‰‰†¯¯/¶lÙ‚¸¸8øúúâèÑ£ø̣Ë/ æ§m¯³gÏÖX&:tÙÙÙ>|8|||°iÓ&´j¥;O1Û£®ú³ˆ%¶bÛYL= pôèQèÄï̉¥ zơê…]»v5H¾Æ2åqÉcO-ïûQÁƯ?…€¿^VMÈ5$„zư₫;u?|Xov}Ÿ7¨çÅ‹$±° äèăC^·o“×íÛdỵ̈ËdÙ¡ƒđ·Mï̃ÔăÔ)êœLÏ|₫9µ ¢.P÷#Guüáê{ó&ơJL$™­- ³¦M©ï­[ä•JÍ&Ṇnâî.¤ÛéÇơÊÖnÑ"̣Œ‰!×5kÈ~Àê›J}Ó̉¨ơܹÔ54ô¯2=û,¹̀-ümÛ¯ çqă„e–Ï<#º¾ƠËĐræLa¡öÏÚÓSXï0d —·ß¦¾iiÔçÆ ’98PË3¨oJ ơNN&H$ä4lµœ9“tíJÿøyedWF™99‰®‡Øxî{÷Rïk×È#:Z(³ÛÚµµ_‡:ơ©¾í í[ö/¿¬³}jj7Sî/Èỳ!E›6€Z½ÿ>ơ½u‹ú\»F̉&M$_±ơ@V;R‡¯¾¢>W¯Rߌ ̣JO§.»v‘ƯK/$’Z?û`X¶lyyyưuÜ´kGDDS§N–ơéÓ‡ˆˆF),ûøă©¼¼œœœœổƯ¾};?¾Æ|,X@DD –M:•ˆˆÜÜÜt̉¹sçYZZ Ë^{í5""úÇ?₫¡—^=„e₫₫₫zé<==‰ˆ(,,¬Æ8{÷œ²··–5kÖŒ ½ùæ›Â²˜˜úư÷ßIRmûlÛ¶ˆˆ:uêd0í¸¸8:pà€ÁuÿøÇ?ô¶[m¡®í!¶¾Æîu±ơÛÎbë1ỉ$""zæ₫y}úé§TRRBÖÖÖ –¯ØĐPÇ%8<îaÉdz©¬¤ˆJäTTG…ù9t/÷OÊ»“E¹Ùt'3•₫̀¸I¤]§̀›W(#%‰̉®]¢%ÏÖéÏ\»x†¼_́O&¹aÓ³'H¥BÉÙ³  @Ñ©S@¤w—A]\ uI 4J%Ô%%P—”@bf™­-€ª¡´¦Éd28::búôéP(:¡wï̃Bû™™™ÁÆÆF¯…ƠceffÂ××زe nß¾””¼ụ̈ËơNS«¦új™r?S±ílL=JJJ.tvºuëOOÓ¼.m¨|ñ¨KÆkLḶ66uQ¤MÀ¬Ú…‡ÔÊ ̉ûư«jn©ƠPCje…{‡ẵjÊÊ ¬éU¬Ơ;&Ơâ“Z ™ *rr`Ö¬,î—6i3áY±Œ®¯r‰-ÿƒî<ˆv‹Abf†Ö~UQTùù(¯JB¥Bib",;t€ưK/¡̣î]H,-¡)+ƒm¯^€L†’ Œª‡˜x¤RAS^‰¹9¤Mñd5Œi«è×_qeÄHd2Ø=ÿ<:|ư5,\\à¶v-.ơëg̣ưEë^XœFŒ€MÏh1iH©„F¡€üĉª6P¾uƠW˶o_¸̀ ‡W^ÄÜTY‰‚#GđçÚµ(KJª1ưØØØÀ̉̉RçîIÓ¦M!—ËuâíØ±ÁÁÁ˜2e :v́ˆ7nàÄư6i(r¹\ïâ®I“&°´´|¨Î‚1¨†m¦V«!—˱}ûv¬]»Vo}ñư§J¥Bii©^ç̀Đ Œƒ˜˜Èd2 0ßÿ=vî܉6mÚ} Q*‘WíaZ(¹p–nn°tsƒôÎÈ…Ư‹/Bz¿ă¡½³#¶¢ă]¼k·êƠ6¤Oæàçqă`忆¢“'QxôhqI­FÑéÓÈƯºm?ùæ-[BbfR©Lº¿hɯ^ia§Ñ£¡V*Q ª¬â4D¾Z5Ơ·‰»;:mÜ‹¶mÊÛ·qgưz䇆BSmÿ1–T*ÅàÁƒyˆ]ï̃½Ñ´iS$$$èÄ+..Æ®]»đæ›o¢eË–X¹rei*•J4©Öñ­¯„„¼úê«°²²&!}ơƠW!‘Hpîܹ‡NÿaÅÄÄ OŸ>¸~ưz­¹gÏÅ̃:8xđ`“”A­Văĉؼy3V®\ sssTVÛWÓmÀ¸ưÀµƠCl;#""EEE@@@öíÛ‡ûCuµ"_prr¸qăp÷î]¼ÇøA q\2ÆØÓFTg§́Ê4?Ḿ́à2{6ʯ^…2+ [·¹?₫ˆ¦~~99Á}ï^ÇÇ£ùo€T*”§¤ ø×_aaÄx̣́à`t‡m¯^è~ø0 …´IØ¿ôH­Æ Ppø°¨´ä11h₫úë°pqÁíÿYË–¡Í‚pß·P©„!_Æ|‰‰©ou%gÏV Ù“HàúÍ7(ˆ†âÆ ”^¼R©ŒwwÇ4›8 ±°@~h¨n~çÏW½N[*©TÈ?xͧOˆ ’Ë«¶›ơïÎÆèüă°{á4ă Tdg£ùưrbáâ‚g/Øöî­×Ùq|ơU¸üóŸ€LVớ™ZL R‰̉ „61å₫¢¥Q*Q§#`~ÿyí[Ø´L¯˜úÊPzù2JΟǟëÖ¡üÚ5£êU•J…o¿ư .„B¡À_|̀̀ĹƯ»W/î† đæ›oB­VcÛ¶m5¦yé̉%bêÔ©HHH!%%êÏȉ‚×_¡¡¡øÏ₫ƒ-Z૯¾ÂÅ‹ê™SY´hÎ=‹Ă‡cÓ¦M¸wï:tè€#F`Ï=B#""6lÀÖ­[ñÜsÏa„gƠœagg°²²‚µµ5:Ü[¤\.†Â5 'NDXX²²²àææ†÷ß±±±zÀtÛCḰ~P±ơÛÎÆP(8pà>üđC´jƠ |đ^œ†ÈÚ´iƒ7âÂ… 5vvâ¸dŒ±§¨ÎÑΰíÓN¾¾h»`°ü¢§'ÔEE(½t 7¦MĂ3K–À¦gOØôꪬ„<: ₫ơü‹Hå7nàÊk¯¡ƯâŰ}₫y´öôˆ ./GQ\ʪ=€\—¢S§Pvơ*¬\]Ñ~Å ¤¾ÿ>înßn0®½··¨4­¯"- éóç£Ư¢Ep2D˜S&±W/¨îƯ3:^é¥K῭É™£#~ư•¹¹ºå»p©H ?q¥¿ÿua!dvvU/^¸ß±[±ñä11Hÿøc´ưä´_± BEN𬔱”éé ÊJØö́ Û¾}"PE ¢£q»Úü=¦Ü_ª»wđ œÇPơœMqµé"_1ơ->}ŧO׫>µ)--ÅÂ… ±bÅ ´jƠ gΜ¿¿?JKKơâ&$$ ;;‰‰‰øóÏ?kLsăÆèׯBBB„áZNNNF=KHHÀˆ#°téRá¡̣ˆˆ|ôÑGzÏ3< W®\Aÿ₫ư±téRlܸöööÈÊÊBll,~»ÿ¢ˆŒŒÄôéÓñÙgŸaêÔ©øå—_°hÑ"¬[·N¸c_}ơfΜ©“‡öÅ _}ơÜ?ß¼yM4Á×_-Z   øøă –ÓTÛCḰ~P±ơÛÎÆÚ¹s'¦NœœÄÆÆê­o¨|Åhˆă’1Æ:b^=ư¤‹6mèÙ3g¨OJ u '»^ ‰…Y´m+¼ZøI Ơ_Aí4lØ#/‡';,[¶Œ EÇ×¾êv̀˜1¼́Oz "¹\NR©ô‘—ÅØÀûAĂ>.9pàđ´S¿zÚ$/(xÜUüñ® 6ÿ÷p7î»w ëÔ¥¥ø½_?áƠÁ3‹6m`ëå…Ö~ME*ïÜ©’±¿AûöíÑ©S'|ùå—HMMEØĂúXílllđÙgŸ!::ÙÙÙè̃½;,X€~ø¡̃CÉ̃/¼=c¬vOEg¨zrÆ¿₫…ŒO>yóæ°hÓê¢"(oßÖyèüqÖrÖ,´œ1 ‚2#·̃yÇè!‚ŒƠWPP̃{ï=$''Ăßßÿ±Bö$Ñh4xöÙg1cÆ 8::";;6lÀ’%KuÑŒÂûÁă…·cŒƠNâưb:ùëæƯ:5oơ‹ÄćI¶eË–:ăœ>}6lhøÂ0Æ{¢,ùx6>₫l4j54ûA­©ö5H£₫_µ\ƒmÿ]÷ÿï¯gºs²̉1ëƯ §çÎcŒ±¿G``à£.cŒ1>ê0ÆcŒ1ÆXCàÎcŒ1Æc¬QƠÙ ˆ ÎÉ.¬W©T¸}û6BBB`oo¯õ¼yB¼Ă‚jó÷€V­Z…´´4(•Jddd`ƠªUÂd{Z~~~ˆGyy9JKKq₫üy,ª6‹Ø̣½ưöÛ "xyyéƠ/$$•••pppÓ\OŒ¼¼<¡MrrrpàÀ 0@/Øí®³N.—#** ưúơÓIïÚµk8v́˜Î2>ưôSåb÷ƒ§‰••¾úê+œ:u ååå "ảÉÙØØ`åÊ•ÈÈÈ@ee%233ñïÿ»^ùúûû#..yyy¨¬¬DFF¾ụ̈K4ỉ¤̃å£úù§zX±bE½âÀÈ‘#u☙ñˆ̃Gḿرxë­·U¾Úư¬S§N ’~CéÚµ+¢££QZZ;wî 88–––œÆœÿ¦L™‚K—.¡¢¢……… C—.]êOl¾>>>Ø¿?rrrPYY‰ÔÔT|öÙg°°°¨W}{ơ ß³gÏ' KHHÀ矙L† ((=zôÀàÁƒơâÎ=wï̃ƠY–””$üßÊÊ ±±±èܹ3‚ƒƒ‘œœ 777¼ûî»8xđ ~ùåU_R¡¡¡ Å5k@Dèß¿?&Nœˆ¥K—U¾ÈÈHÀàÁƒq₫üyÏ2gΜ\.7¦¹§NÂ×_6mÚà7̃À‰'0eẾرC/n]Û ̣óó…ñúÍ5fBï̃½;nß¾mTÙÄîO[[[üóŸÿÄ™3gpúôiƒÇH$„……áùçŸÇwß}‡Ë—/£eË–hÑ¢E½̣ơđđ@ZZöîƯ‹ââbôéÓsçÎE§N0~üx£Ëg¬iÓ¦¡¬¬LøûÚµkơWWWL:ơ‰{Zc5v́XtíÚơoiÁ£Ê÷qeoocÇ¡°°Ó¦MCûöí±|ùrX[[cö́Ùœ^Äÿüüü°mÛ6„††bÁ‚pvvÆ̉¥K www”ÜŸCl<±ùΛ7NNNX½z5₫øă¼ổKX¼x1\]]ùY;Öx‰™T400ˆˆ N₫“Nááá:ËÖ¬YCDD½zơ–Í›7ˆˆ:tèPëdB‹-""¢ê,·³³£–-[ Ÿ9s†âââô>occS¯̣]¹r…9¢¯E‹DDôÉ'Ÿ<̣I–Ḷ̣̣h×®]ÂßR©”9B………dkkkôv §¬¬,e½{÷&"¢9sæË®]»FÇÓ‰çââBDDŸ~ú©ÑûÁÓ$‰0 å‡~Xă¶?~< 4¨ÁʲråJ̉h4ä́́ltùĆºÎ?ÆÆ«æ̀™CDDfff|»>íaûöít₫üùF•ïÈ‘#‰ˆ¨S§N¼}ņ   ""̣ôô–­X±‚*++ÉÅÅ…Ó«#ˆ=ÿíØ±ƒÈÜÜ\X¦=gûúúOl¾†öÅmÛ¶‘F£¡-Z<̣ưÀô“6Ø3;gϸ¹¹ưÙ3f >>'NœĐY^\\Œœœáï¶mÛ";;[ïó¥¥¥ơ*ß‘#G0`À˜›› ˼óÓ˜i4|ûí·pppÀˆ#L’¦R©€z »úHï³/^Ä₫ưû$߆h…B"¤I“Đ·o_á…B¼;b×®]È̀̀Dee%rss±uëV¸¸¸Ô«bó5¦ưf̀˜[·nA¡Pàøñă5|SÛ~gÏEyy9̣óó±}ûv½;³ ,€B¡€¯¯/’’’ T*‘œœŒ₫ưû×+Ï¡C‡"%%—/_–…††Ầ̀ C† yêÓ«ë|%öü§R©PQQÊjóü ëŒ'6ß›7oê-KLL„D"AóæÍëü|đ;†¬¬¬z—Sl¾())A^^V­ZUăs±ñLÅÅŇBvv6†lÚ´I8ÇhuíÚ§OŸF³fÍ0iƠ5ç IDAT̉$øûûĂÑÑ1115vΖ/_™L†¡C‡ÂËË „D"AAA=€€ø]ºtA¯^½°k׮ɷ!ÚÅƯƯ®®®8pà’’’àêê*„¢¢"!^ûö푟Ÿ   4³f͵J •ƠV±ùm¿Q£Fá¿ÿư/bbb0tèPÄÆÆ|^L¬¾}û"22999xíµ×0gÎ 4zơ577GPPÆ‹.]º °°Û·o7z›UûĐơë×T=ó'•J‘’’"¬{ÚÓ{¾ªËºuë`mm… ¢Y³fpwwÇ‚ €¸¸8£ă=Œ~ưúA.—́1Ö˜́©\™L[[[H¥Ra,ÿ… púôi½¸Ú êê¼½½ñË/¿ eË–t;!ÂKee¥p·àĂ?Ä¡C‡°sçN( œ;wû÷ïÇúơëQ^^ntùN<‰²²2 <¿₫ú+€ªÎNTTˆè![èÉpï̃=0ø OmÛM«uëÖ¯NÚôF-|yˆè~À svvÆèÑ£‘€€XXXàË/¿Ä±cÇàîî^ăówuIMM¶Ï₫ưû1ỉ$S[ONN/^Œ„„H¥RŒ3óæÍC«V­tîˆgjÏ>û,¬¬¬°|ùráy?CÏ“-]ºååå:t¨p1€¬¬,Lœ8›6m̉û̀Í›71gÎáïêÏÈíܹÛ·oÇ3Ï<#<€̉̉R:t¨Ạ́Kl»ddd¨º#_QQôôtƒé?~Ç×Y–››‹Ó§O£GÏOµƠCl¾bÛoîܹ¸|ù²đ²ƒ'N {÷îxươ× ¦[—   äççcüøñ¹®¤¤aaađññÁÑ£G…¸R©sçÎÅ7«W¯Æ̃½{áêêÔÔT£̣urr‚\.G«V­’’‚èèhŒ7NXg¬§-=±âăă1jÔ(́ٳ˖-P5ÑîĐ¡CuîâˆW_ưû÷Çøñă±páB₫Ne–Éî́ 6 ÅÅÅËåˆETT||| ̃V8q" ¤ü2­̃¹øæ›oP\\Œââb¬_¿^X~óæMxzzbøđáX·ńíí±zơjœ9sFïK1åS*•ˆ†®=ó̀3èØ±ăS1„M«¶N˜ív÷î]x{{ĂÛÛ~~~8sæ vï̃={>tyjÚ˜aR©ÎÎÎ3f ¢££qøđa¢E‹:/Đº|ù2$‰Á7V7jÔ( 4óçχÖ­[÷På¬+ßÈÈH,Y²Ç̀™3±qăFL4IgªØx¦vơêUTVV"88ăÆC»ví ÆóññAXX˜Î]ƒ¼¼<$''ă…^0ø™}ûöƠ˜ïÁƒQ^^®swg„  ÓyAƒ©óKl»ˆ%•J1õ<$&&¢¨¨ …Bøe»¦—n˜¢bÛ¯_¿~ˆ‰‰Ñùlttt½óíׯN:¥s "̉}jµZg–v˜¯³³s½óW©T(**~{X%=±çɺ 8@hh( 899!::ÖÖÖFÇ«V­ZaÏ=ˆÆªU«*-Æg&ë́œ>}̃̃̃:t(~₫ùg sçÎăÆÇÇ#..N'hßt¦ư%¿Y³fBüo¾ù̃̃̃¸sç^Zjµ‘‘‘˜;w.z÷îéÓ§£gϘ:uj½Ê‰^xVVV2dÔjµÎ/h]Ó¦MT}™?¨¶í¦UQQ_~ù¿ụ̈ ÂÂÂàç燢¢"|₫ùçBœÚ:TÚΧ±ûÓ'—Ë‘œœ¬³-/^¼ˆÊÊJtï̃½̃é;wqqqX¹r%̃~ûmbàÀ¦(²hÚ‹XCĂ-ëïadffÂ××زe nß¾””¼ụ̈ËB™LGGGLŸ> …B'ôîƯ»Æ_k{6­¤¤áááBg§[·nđôôÄÎ;4_±Ä´‹1–-[†/¾øÿûßÿđÊ+¯ W¯^B§ưÁá´Z[±ígff†&Mè](ççç×;oè,S(P*•zÏ©T*óªöÿ5µKm áàà€»wï¢M›6xóÍ7…i,§W+W®ÄƠ«W1kÖ,ÄÆÆ"44₫₫₫èÛ·/fΜit}úuåääàöíÛ:s³¤¦¦"55UÔ-Ö-[¶`Ưºuz±å‹ŒŒÄÚµkñ̉K/ađàÁ8wî\ƒđ7Ú‹BCCBêC­VăÊ•+:ω”——ë9×₫­~ø°ûnƯº¥w1+‘H ‘HL6,S;<ÉĂĂCïE I»¿ÔunïaÅÄÄ &&Fxµư÷ß;w¢M›6ª¹\íÛ·cíÚµzŸ¯>ô³ºº¶Ó®]»: ˆÖ7T¾bƠƠ.ƘTTTèÄiˆ|U[»h)•J½ j«³²²̉»(3æÍ5©+_±íwö́Y½ ”nfŒ„„¼ụ̈Ë:/ßyơƠW!‘Hpîܹz§[—¨¨(té̉²qăÆA­Vë Óê>~Ÿ¶ôÄÊÉÉÑ{YL·nƯ “ÉtF/ˆ'–™™ö́ÙƒN:áƠW_}ªßlÊ" 5Ï:₫<¥¤¤L&#à¯ùZ̃yç̣÷÷× }ûö>gccC—.]¢¼¼=æÏŸOååå´~ưz!̃©S§èøñăỗ{ïÑèÑ£iö́Ù”’’Br¹œÚµkgtù´!$$„²²²ˆˆÈËËë‘¿o¼¡B^^|8ùûûÓæÍ›u¶M=„8Í›7§»wï̉¹sçhôèÑ@ׯ_§¬¬,²³³ÓKÓÓÓ“ˆ¨Æ9G®_¿Nëׯ§·̃z‹¦L™B!!!¤T*é÷ß' £Ë'6ßsçÎQHHMŸ>f̀˜Aûöí#"¢5kÖÔ+^ơ`yvFE;w'’··7M›6233éøñă:ñºwïNÅÅÅAcÇ¥W^y…iï̃½4~üxƒm2lذ:óߺu+egg‘̃ú†Ê×Tí¢ ï¿ÿ>©Ơj:u*uëÖºví*̀€~úé'ÊÊÊ"OOO277§I“&Q^^Ạ́Sº̣Û~#G$FCÓ§O'KKḲññ¡âââzϳӯ_?R©Ttøđa:t(M™2…²³³é·ß~ÓùÎZ°`) Ï0€ˆˆú÷ïot¾”••E—/_&;w.)•JZ·nÁøu¿O[z€¸óßܹs‰ˆhÛ¶m4lØ0zươ×)99™tæÇOl¾ëׯ'"¢E‹é}Ÿ?Íó×qx¼‚©çÙiĐΟŸ͘1ƒ€¿. Ù´i“ÎgiÍ5”™™I”‘‘AÁÁÁ:iăÆ£ÈÈHÊÍÍ%•JEùùùtđàAêÙ³g½Ê§ Æ #"¢ÜÜ\’H$|£7TĐ^(¨ƠjÊÍÍ¥°°0½ <Ùnááá:ëJJJè́Ù³4mÚ4½4ÇKçÏŸ'¥RI´{÷nƒ ‰ÙÆ íŒ?(88X'^=èèÑ£TRRB%%%tøđaêܹ³Á4ëúÿâ‹/èâÅ‹T\\L*•233é»ï¾Ó™PÔØ̣‰ÉwÍ5tëÖ-R*•TQQAÉÉÉôÁè›băU¦è́tï̃8@ÙÙÙ¤R©èîƯ»´uëVƒôyxxĐ¾}û(??Ÿ*++)--~üñGêØ±£Á6s±®=_Ư¹sG†̀×”í€4iB?ưôûKơïGGGÚ¹s'•””Pqq1>|X8‡?Lg§®|i¿éÓ§Sjj*)•J:wîœ01r}':t(;w Đÿ₫÷?½ RSwvP×®]騱cTVVF¹¹¹ôơ×_“¥¥¥Á¸b.₫Ÿ¶ôÄÿ̃}÷]JNN¦ ***¢ÈÈHêƯ»·^zbă‰É711Ñ`S÷8˜"˜º³#ñ~±?üơ ó₫ºêÔ\w„ÀÀ@l̃¼NNN :V˜1Æ₫Nsæ̀Á·ß~ sss úcŒ1öh,ùx6>₫l4j54ûA­©ö5H£₫_µ\ƒmÿ]÷ÿo‘NNV:f½dÜ ²²²PXXˆ¶mÛ¼bŒ1öw6l~₫ùgƒÏ0Æc¬ñƠÙ ̃d¦V«´@Œ1ÖĐN<©ó:j¾«ĂcŒ5N¢:;Ú‰c¬1(++ĂÍ›7u1cŒ1ÖÀäƠÓŒ1ÆcŒ1ö¨qg‡1ÆcŒ1Ö(qg‡1ÆcŒ1Ö(‰ế‚ˆ@D_=.¬W©T¸}û6BBB`oo¯õ¼yB¼Ă‚ tâÚÙÙaƠªUHKKƒR©DFFV­Z;;;x~~~ˆGyy9JKKq₫üy,Z´H'˜̣½ưöÛ "xyyéƠ/$$•••pppÓ\OŒ¼¼<¡MrrrpàÀ 0@/Øí®³N.—#**JoVñk×®áØ±c:Ë\\\@DøôÓOu–‹Ư&VVVøê«¯pêÔ)”——ƒˆĐ¡Cƒqmll°råJddd ²²™™™ø÷¿ÿ]¯|ưưư‡¼¼>>Ø¿?rrrPYY‰ÔÔT|öÙg°°°¨W¾ƠÏ?ƠĂ+êïÈ‘#ủ233êÅ”¸¸88pÀ$i;o½ơ–Ỉ2–)ëa*Æo]»vEtt4JKKqçÎẲ̉²̃y?Îé‰m±Ç¥Øó‹©ËS¦LÁ¥K—PQQÂÂB„……¡K—.ơ'æ¼kLùW₫₫₫ "äççëœC'L˜"BII €ªWü‘Áë‹ÿ₫÷¿())AëÖ­ÿ¶r³§Qßđ={ö¬q„„|₫ùçÉd0`‚‚‚Đ£G ˜;w.:uê„ñăÇ ñæÍ›'''¬^½üñ^zé%,^¼®®®Â¾QÓ¦MCYY™đ÷µk×tÖ“oLL \]]1uêT,Y²¤̃ez\¤¥¥¡¨¨È$i;]»vņ L’1LYS{¼ÙÛÛăØ±c(,,Ä´iÓĐ¾}{,_¾ÖÖÖ˜={¶Ñù>îé‰m±Ç¥Øó‹©Ëççç‡mÛ¶!44 ,€³³3–.]ØØX¸»» ́bă‰=ï-ß“@&“ađàÁ8zô(`üøñËåBè‡~À»ï¾‹+Vètxºuë†iÓ¦áóÏ?Gvvö#);{Jx¿ØŸˆHgÆQ<0“i`` ÁY¥µ!==ÂĂĂu–­Y³†ˆˆzơê%,›7ouèĐ¡Ö™Sµ³N8Pg¹Î́ÑgΜ¡¸¸8½ÏÛØØÔ«|W®\¡#GèÄkÑ¢}̣É'|FYS‡¼¼<Úµk—đ·T*¥#GPaa!ÙÚÚ½ƯÂĂĂ)++KgYï̃½‰ˆhΜ9²k׮ѱcÇt⹸¸ѧŸ~jô~đ´‰DBR©”Ї~Xă¶?~< 4¨ÁʲråJ̉h4ä́́,,34[ü¶mÛH£ÑP‹-ŒÎ£®óÏĂä;gÎ""233{äÛơq Û·o¯uvø§-ˆ=̃‚‚‚ˆˆÈÓÓSX¶bÅ ª¬¬$£ó}ÜÓÛ.s>0t~1uùv́ØAEEEdnn.,Ó;}}}'ö¼+¶|sđ÷÷'"¢m۶ц ¨º₫*--¥mÛ¶QII‰wäÈ‘DDäçç',;pàeff’µµơ#¯ ‡Ç+,ùx6••Q‰¼€ ̣¨0?‡îå₫Iyw²(7;ƒîd¦̉Ÿ7é´ë”yó e¤$QÚµK´äăÙ:ư™kÏ÷‹ư©ÁÙ9{ö,ÀÍÍÍèÏΘ1ñññ8qâ„Ị̂ââbäää·mÛÖ௥¥¥ơ*ß‘#G0`À‰¼óÓ˜i4|ûí·pppÀˆ#L’¦R©€z »tèPxyyáàÁƒH$ª—8}ú45k†I“&Áß߈‰‰ÑéÄùúúbË–-ˆ‹‹ƒ¯¯/=/¿ü̉`~®®®puu~¼1ÄÅŇBvv6†lÚ´I8j¹»»ĂƠƠ@RR’¶«««ÎĐ2±ơÛ.bëæææ ÂØ±cÑ¥Kbûöí:iÓ~¦Ô¥K\¿~@Ơ3R©)))ºƖ̃èí¸{~{̃¨Ëºuë`mm… ¢Y³fpwwÇ‚ €¸¸8£ă{̃5•öíÛ#??AAA4hfÍ%<£%•₫u©'ö|`Œ¤¤$Ü»w¯¼̣ ÆŸ₫Ù`¼>ú]»vÅ´iÓđƠW_áüùóؾ}{½óeL,“=•+“É`kk ©T*Œµ½páNŸ>­W{A]··7~ùå´lÙ€n'ÄÂÂB¸°©¬¬î|øá‡8tèvîÜ …BsçÎaÿ₫ưX¿~=ÊËË.ßÉ“'QVV†Áƒă×_PƠÙ‰=d =îƯ»q«m»iµnƯZgÚ{÷îaôèÑ—ªXǼ̀0gggŒ=©©©€……¾ụ̈K;v îîî5>W—ÔÔTaû́ß¿“&Mª5~ÿ₫ư1~üx,\¸°^Û,''‹/FBB¤R)ÆŒƒyóæ¡U«Vµ₫ù°ùÖÇÍ›71gÎáïêÏ´-]ºååå:t¨ĐyHHH@VV&NœˆM›6¨zÆ!)) 3gÎ!..˜2e^~éééªîÊÔäÙgŸ…••–/_.}C‡Ơ¹‹#6^Cwërüøq?~\gYnn.NŸ>=zßßbÏÆÚ»w/¦M›†áÇc₫üù˜1c†^œßÿ›7oFHHlmmáííưÔ\[±GËdwv† †ââbÈårÄÆÆ"** >>>oÓNœ8ƒ ̉ ~ùU?¾ù棸¸ëׯ–ß¼y>|8Ö­[{{{¬^½gΜÑû…QLù”J%bcc…¡kÏ<ó :v́øT aÓªíÄ#f»Ư½{̃̃̃đöö†ŸŸΜ9ƒƯ»w£gÏ]öf˜T*…³³3ÆŒƒèèh>|hÑ¢…Á~/_¾ ‰Dbđ„Ơ5 ƒ ÂüùóáăăƒuëÖƠ·U«Vسg¢££±jƠ*ƒqêÊ722K–,ADDÂĂĂ1sæLlܸ“&Mªq˜¬˜|¾}ûj\çăăƒ°°0»$yyyHNNÆ /¼ ,{₫ù磳ïÇÄÄÔ»LW¯^Eee%‚ƒƒ1nÜ8´k×®̃iâëQ]míb µZ­3 K;œƠÙÙYXfêö3–J¥BQQ‘đĂQcOÏbK±ç±ç«º 8@hh( 899!::ÖÖÖFÇ3ö¼k*R©óæÍCbb" P(„;NƠ_`êóÖ̃½{1ỵd\¿~]øáÁO?ư666ˆŒŒ|j_2Ä₫~&»³súôìŸ?ÖÖÖ˜5kđư÷ß#!!A/n|||¿jÉoÖ¬™°́›o¾Á®]»°wï^½øjµ‘‘‘B‡$00›7oÆÔ©Sñư÷ß]¾ÈÈH|ươ×°²²Â!C V«…7Œ< 6m  êâåAµm7­ ØáÇ‘––†Ï?ÿ~~~jïPi;ŸÆîLŸ\.GjjªÎ¶¼xñ"*++ѽ{÷z§{îÜ9U¯ ÎÊÊÂÿ₫÷?lÙ²EïÙ*{{{DDD //&Ÿ¾oß>̀5 ½zởûbmÈ|ëRÓ³d2™ ˜>}º̃ á®™™lllPPP ça~ Î̀̀„¯¯/æÏŸ-[¶ÀÖÖ7nÜÀ›o¾‰“'O•–Øz<ÈTÏØ©T*ó‡öÿÚá´ Ñ~bÂÁÁwï̃E›6m@˜®àẠ́4†ôŒ%ö¸{~1••+WâêƠ«˜5k–°́êƠ«HNNÆ̀™3ñí·ß¯¡Î»uY¶læÎ‹O?ư111(++C—.]pđàAáæ¦<Twé̉%ܹ́ÑÑѵƻsç4 ¿}ư­LÖÙ)((.rcbb€7¢OŸ>F]läääàöíÛ:s³¤¦¦"55UÔP”-[¶`Ưºuèܹs½Ê‰µk×⥗^ÂàÁƒqîܹ¿å‹àq¡}VÇеúP«Ơ¸råÎxạ̣̊r1Ä„¿µĂv?`À­[·ô†§H$H$“ ĐƒđđđĐ¹±²²BXXlmm1`À¡¦ Ư_<·4t¾u©©]Ơj5är9¶oßµk×ê­¯₫ sii©̃ üÛX111ˆ‰‰^½ÿư÷ßcçÎÂE¯Xbëñ ¿k¨JCµŸׯ_‡»»»Î2í³0Æă}̉3F}ËÎ/¦Ô½{w„††ê,»rå Ôj5ºuëft¼¿ă¼kÈäÉ“ñă?êÜ1«iîSÔĐC«¯yAZ­ÆÂ… ѳgO¼₫úëF~Ë–-đöö®óötÇơ–µk×–––µ₫’X[ùRSSqăÆ a˜ÖÓ4„M*•â½÷̃CQQÂĂĂM–fçÎu~åJOOGûöíu:<ÚáHƠ¥»0Ă?aü;Pơ`°™™™ÎP -'''¼ùæ›Â¸z!À Aƒ@çb333́Ù³:u«¯¾Zç¯úuå[ư­]Z&L€F£Ñ¹3kl¾·˜˜ôéÓׯ_ǵk×tÂü!Ä;{ö¬̃Û±L5Y:j¾MIDAT‡Z­Æ‰'°yóf´nƯÚ`Û*•ÊZ'r[G¥!Û¯6QQQè̉¥ <<<„eăÆƒZ­68Œ®®ư₫qOO,±Ç¥Øó‹©Ë—““£÷̣€nƯºA&“áÎ;FÇ3ö¼k*VVVzȺ̃p)æ|ÀXcĐ`Ó†GFFâÂ… X¼x1vï̃ µZ-¬óơơƠ›œ2-- .\Pu»xôèÑ8räV­Z%ü"Ơ²eK_ơ·lÙ‚ÊÊJ́ß¿™™™hƯº5>üđC”””œSlù"##ˆ6mÚ4úÎNëÖ­1jÔ(aRÑ_|y«k»U'\í ÖÁÁ&L€›››Îl÷7nDDD~₫ùǵܹø×¿₫…ôôtDEE ñÄîO£áÇĂÚÚZxJ»m®_¿.)) qqq¸páÊËËáåå…·ß~III8räˆï»ï¾Ăk¯½†ÿûßđ̣̣̉é¬:uJïb§®|ươWœ9sFx]íÈ‘#1f̀„„„è\\›ïßmÑ¢E8{ö,>ŒM›6á̃½{èĐ¡FŒ={öÛ$88ذa¶nƯç{Îà«àagg ê¸³¶¶f`—ËåÂéQ£Faâĉ CVVÜÜÜ„É~«?X­ué̉%bêÔ©HHH!%%E¸‹&¶b‰­‡XbÛÏb·üsçÎÅîƯ»±xñb´oßAAAذaƒÎŰV]ûưăØv{\=¿˜º|ßÿ=‚ƒƒ±mÛ6́رX´h‹‹±mÛ6!-±ñŒ9ï)ŸXQQQxă7°mÛ6\¿~˜:uª^UVVRZZưøăÔ±cGx”––F …‚;Fï¼óµmÛVˆ³iÓ¦ë»bÅ !^÷îƯéÀ”M*•î̃½K[·n­qBÇ&MĐO?ưDBzûÅÖCL»ˆ­Ç‚ H¡Pè|vÀ€DDÔ¿£Û¯!·®]»̉±cǨ¬¬Œrssé믿&KKËzoOBzbÚÉq)öübệ wß}—’““©¢¢‚(22’z÷î­—ØxbÏ»bË'&8::̉Î;©¤¤„‹‹éđáĂÂ5Nơv6ö|P[ĐN*jè»{Ù²e:“V*•Jï‡êÁÔ“¤³ĂOb0Ug§¡CPPÉåraÆuÜ~8pàĐXƒ©;;F cËÊÊBaa!Ú¶mk̀Çć±2lØ0üüóÏåu|öÙgˆFvv6ºwï à‡~ø[ß,÷¤âöcŒ1V¨ÎNhh¨đ&³ê϶0ÆØ“èäɓ›ª·x=.4 }öỲ˜1ÈÎÎÆ† °dÉ’G]´'·cŒ±ê vvÈÈ×#J$“†1Æ₫eee¸yóæ£.†Aååå6lØ£.Æ‹Û1ÆXu5̃ÙÛ1¶cÄcŒ1Æc‡™g‡1ÆcŒ1Æ5î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%³VÑßYÆcŒ1Æ3)ƒ‰Ḍw—ƒ1ÆcŒ1ÆL‡±1ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆcŒ1Æ%î́0ÆûÿöîïơîºàøëûƯ–¥ÎƠ¢`̉´é\X±JÄpÑUÑÿĐEuÑUwưư]ư /ŒÂ+!\%eÚ~¹Íµ\OºîÛ~¤²Ă“Ç|xŸó>¼oŸ|^çs ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰`-ươđ‹sËÎ]33ó—^™Ûwß133GŸƯw~êªûŰ–8đ?®º¦ưÛ?đ|Î>1«·V33ṣØÑY½ơÖ̀̀üó•—.]_‰;;ÀZ2Æ$c’Œ±IÆØ€$cl@’16 ÉdŒ H2Æ$c’Œ±IÆØ€$cl@’16 ÉÀÄ$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIbH;@’Ø’Ä$v€$±$‰ ÍIÛoô.zñï‡gYV3Ë̀2«Y–™Y–·¯W¯—Y–·_3_—;ÀÚø̀½÷ϲZ½3«KQ³,«YVË{ÖWïÏÆ–ßeŒ H;@’Ø’ÄäÀZØ·ï₫ùí/qƯûöï`Ëu±¬…mÛ¶ÍW¾ñ­ë̃÷ÇßÿjËucl@’Ø’Ä$v€$(Ö̉ß₫̣ç9zäÅËÖ÷Üu÷́½ïÁ«îwgXKŸ₫ܳû»̃µ¶çλçᯛo¾åªûŰ–666fï}Îm·bffvîÚ=_8øơ¹páÍyăÓWƯ/v€µµ¹mÛܳÿ‹óÉ=wΗưæ,³̀Ù³§®mï‡|6€÷eûsïCÏÆæÆœ9sr–e¹¶}̣¹®É²¬fµZfssă²÷V«Ơœ>}r‹ơe–eµå÷¹³¬…sçÎÏÙ×O\׳¯Ÿ˜sçÎoùØÖÂÁGÍ Ï=;'½6«Ơ•GƠV«eN{m^xîÙ9øè¡-?³}fæÍóç>ø“\‡[wưü9üü<æ™+ÏææÆ|́ă·Í̃{öÍ­;wmù™™™Ç{dùơo~7çÎ^ưñmëêø«/Ï÷~đÄ<ùÔÓ—ÆØ₫sáÂ<Àûráßï₫íÎæ̀̀“O=½ñƯï|{Μ:>ÿzằ 9Àÿëø«/ÏéSÇç‡Oüx|êé™wÆØ.zü±G–™™Ÿÿ́§³}ÇG榛>z#Î p]¾ÿ£Ÿ̀̀\ ™÷ÄÎE_;øåkû—€5đ‡?=sYÛüolăôŒfbdIEND®B`‚rpyc-3.4.4/docs/tutorial/_static/running-classic-client.png000066400000000000000000000264361314203541000240050ustar00rootroot00000000000000‰PNG  IHDRR?áó•sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<,œIDATx^íûÏuGUÇë?`øwL„–KÁ†ÔP4""kM4T ‘DbDÁ&mQi€BÔ$†r­‘Ä*Ơ@jlC µo‘ÄK¸4Ç]v™Næ²æ;³÷́˜ϓ“æ}Ι½f­ÏZ{¾³ö̃çé|ó_¹‰@€ÎOàïxçM“®_ø @àäî¹ç¾;ï¸ưy]äá‡xA€ p^¡®?₫ؼ @8#i;’ĐơOöçïÇưùÔ ?Ÿúç3ƒ₫|vÜŸÏ úóù¡âçû¦º~À ²₫©¡eưÓƒÊúgÆ•ơÏ*ëŸZÖ?¬;èúiD}r]?ă]?Ư]?ă`c]¯z¨nz~­vüNÛQè:º¾ÿnáŒj­ûŒ®£ëÙ(œQ­uŸ·×ơédÊk¾Ï=)´2x3wº̃pT£®?ó̀3Ï>û́äèw¿ûƯ§zêŸøÄqnÇŸI¨+}Ư_ûx käG¢ëè:º®ËsóÈ]t]y¤Î×u}¼¯ëµGµèú7̃÷É/Ưv×·ụ̈Ÿüè¯₫Ñû™Çü£ưèA¤½R+Ï4¼ªîoơŒj­ûŒ®£ëèz³Zë¢ë®ËoÑơ©S¿å7₫̣‹}ư¥oyÏ+̃øÎÛ̃øÛßúÖ·̃ÿ₫÷£ë½÷û+pt<ăHt]G×uyn‰®/̉ơẹ́ûÍ¿̣̃—¾ơ_₫¦wƯúú»n}ưÛ§wî»ï>E×đE/r¯äøùS÷‘?̃ߘË×ùđårë»á¬¾Í3cj= ¬ơQƠư­Q­uŸÑut]oVkưÀSèºư§içëíñươ×áƯ=u÷„̃_}ü&QŸu]¹×îkv ß¾NǺ>j́é­UÓ`¼/®¹›‰¤Ê&#¹-pÖöWà>èyÆ‘è:º®ẹ̈Üú|Àjư±y§Ù®Q̃ßLד|î½àÚ@ĐèûGÙ÷́cɵÜWå¸_w₫Lÿˆ¯íû;†äHt½jc®£ëèz³Zë^ƒ®ÇÓ»–½¥_ŸÖ¦'Ÿ|̣Ûß₫öó—ßçNưÿ>îÿơÚéÎú$ê÷̃{ïÇ>ö±uu=·ˆơ¾S¿fQ×sÏëÅf‹₫¯¢ëIavÎÄWṾÀ`•Ln0º®£ëº<7ÜQ× ¹uw¾ç¿#<Đ<ÜnÏmưçæ&eÔúÁœ₫₫̀÷úơI×_wùÚO_₫ă5—{ÅôÆƯwßưÀ|ä#Iºư {̣½ß)€W¾çôĐ³Öæ®úª<ç?7™2Ă·'Z¥_W®Ơ»1ñ?‚D?TW9Œ®£ëèz³ZëEׯ°+º¾æ÷Ü|e}î/ĂßxĂå믽<₫ă—ÿư×ËĂ7O÷Ôï¿ÿ~ư{ ä+꺻,¯Èv±9öøûŒäŸ¦I~ëƯ¾zÿ›âV#¾H?Çnôôɧ܃‹ö´ç.é¯(đU2yºÁè:º®ẹ̈Üüt¯ự?syâg/_₫‘Ëo»|ỡẹ́û?øAE×W3©N`sù—Ô·´`wó'+Jé¡LNª«F×Ñut½Y­ơÑơêçæ|íôïµÛ÷ÔWWqß`|s}₫tKU^2Wñ}lüPb¼¢3U2yºÁè:º®ẹ̈Ü<]_¤ë₫½öévû‡?üaăz?iO^½?®Wí V”̉C™:TW9Œ®£ëèz³Zë¢ëKu½ŸZ/·\¥”ç|(1^Ñ™*™<Ư`t]G×uyn‰®£ëçôç½]QJeêtR]å0º®£ëÍj­¸½®Oĉ¯Iq§o‰ƒƒ¿ßp”úwd—·Ñ›Y8¥bkNJŒWt¦J&O7]G×Ñu]›Gn¬ë“Tw}ÍáÔN1…®kzŒQ+Jé¡LNª«F×Ñut½Y­ơ7Öơ#O‡®C±5/%Æ+:S%“§Œ®£ëèº.ÏÍ#,´û–Ơuû‹ö| @€À1 <̣đCó}ú›¦¿^;ƯÛŸ~Ÿÿ¤-/@€ND`ñl¿>K=/@€NA`nÎ ºnü…z>‚ @ I¤«^ÓÎC̉ơøËim8;m‡+Gù®Ç7Ç5X4 ˜ç*•ô¿è§byºhÇq~<“Ù¬âoÓ‰‘bnµ₫çÆ¨“<ỨÉ/¶Å¥̀[´\¬±̃â’+ÖUC̉ăFü_•zÖ£+’Œ䲋ڮOÅO¥>‹Q$Ïtÿ¨†¬å&MænEû"cÆÚ%¢ˆ·8`iñg¾Ä.éz°Ü‹”“e'[ 59 >{(GCâ!9ÿíĂEă±fÇp‚Øà™œ´–¿­¸ÅƠ¤­HiÉ-O U1_nXNo ªQ±_W®HÇÚüQ<´Eůœøßó±óZɳÏ>_b7jëD©O1؆%h:D$cœ’ʪUÜ<Ư(®fK΂ấÅN¤•Góúêz®Ä2*†º‹®»5¢ªdơ•ó0^ÑlÔ¾«ÊÉ©ø D¤ŒÉeÙ^ïÚjCáV;¯ÎjÎB<>~¿a!K.‹¢¹é”:±ëߟ1ÖNƯŸZ9ưó½Íñ/jụ̈bó ëF²6‚ñ¹úQœTjƠ°S{:×7’^eªj°½Ÿ°ë°m"%Sñ˜t=Y.Á•\2.É%#>3u. wèÂZrÜkOrƯ‰÷§ÉơÂ^gsFíQ¸)cjuƯÙ BSx*yl³“Ó°xAư7§—z¼<g“WU×_ădO¦/W'zưÄ#ăơgöjù\F®‹ù²#ÊE‘\’«¥íÀÂØsKq̉“˜ÿ8Åüơ_tIY –H~œ² „̀¥îºn/¾÷v§Yî@Å`’…¸(ỘUT¶Jtư¥?'ê<ÄJ kØ18O’œ?ñûÅs;y.%O EJ‹Ó%¹5¬˜±`8˹:̃7R_Œ"·î^UÅeŸµơ6{RëOĂ,qưó.ã¶.)K¢íU®®EOmă£”w'Åż¸^‹°qÖ‹³ë*°–®u×u{§£”{r̀ZñëÄí@KP7ë–NCÄ:ÓOÎܪ¬ă₫̣ᯌni¨Mt•8ÅûI²KÅĐK%5AàÉ¥P·c`̀ùÙ–Ê@Ïróú`ơŒ,Y²ưº̣ë\ᬣ(zØ0@_–ø)ªx1¿J6‹–„¼Đx¼êd‚© ÙªQÜØạ̊«ä}-]ËéúB|ǽư₫º-¶¸&C]+~»>ôÂ]k¤¢¹\ôSÈƠ±¸?ˆ½]’¥îsœ}ƒâ’²̀%KŘWq5^¤AF”%IŒÅŸÈmGb7¢vG3.©·\¼EÎUÅSô°È¡6Eÿ«Î¸Ü*‘‹+ίR$µ1eP̃¶ëK¢¸>ç£AIŸZ·@X²p%uƯyHû:ºî¼ÏƠQOUç›rªÛç[¬sµăí-KUƯ$ĂQr¯œTÉŨ¨3ßóZ”ñ9±Têg­u¤v½cOÖý³½¸¸Ơ\/³âùƠV'ºŸÊ ×³R-É3TáĐ–ză,óeGªp0Î…âNB¬Ur•«Êºm‹e·b®‹ ¯¨ÜJ\ sÅN¬ëA|i¯ĐơynÛƒ}¿¾#qØFá*ñû~*₫ä6%öz§ĐˆOb°3IÆ› ;̃ä§¹`kß÷ʯËvÈA¦üb+ê_2„ªäơ|,ɳ)—Áâ©oËâCªâ²7ëU¦¹me±NrÙ/.#IÔUq[I₫Âó:ÇÓÖă…ë†;¼-41Ƭ˜Đä);/ŒóÅ- ÆrZU'Æ"“Œ7É*Đơä'íº^LŒ(*E; •ÀZ²–³p¾¶xÏ’ü„Àf:>7—Œ¡jç²&•ơ6jf‰ ÈØZ×É @ứ¦ëúƠÂ\ËE+Ö¯,° @'%pt]÷å_ù÷IÓ€Û€ Ú¦ë ̃£ë Đ8€®À¤ëÓSîúKưÿ¹¿f`"™ƒÜ¥{ư’₫U¥–`!@à L:]û’₫?­†®Ï”‹Âï'#₫¤ûQ¿Âª%d@ȘDºêUƯ¯Ï_ÛƠ·Jד[¤Y2 @¸fsó-₫Tü]ÿï ủu:ơk.\b‡ $ÏÍù̉î₫Ø^îú¹̣Lœ2†4C€®™Àºîï<©ưÆ#uÁ¶€¯°_sí; Ä:ê:¸!@ؘº¾1p¦ƒ t$€®w„‹i@€ÀÆzéẓ&ú6±%¯3¾Ÿóªöæ}ڨײS;¯=^üöA3çyvq–¤«Ûp˸Äó8öåÖốÛ£æ<Ù̉C½2E¯ªTç¹ïH‘€_rñCÍ;†Påÿ~|êºî/Ó[–κÍëu¶–®¬egƯÊkăø,ƒµâ]ËN‘[EîÍ¢57`3ÿ㤸¼ÄQŒ§ë."½¤ơ$î>RjG†è₫ïúÈổơåíW35t½Ư*Ö*ÁZz¶–"qé‡T׋”6P›÷Ú¼lÈÆíÅa¯y7Æ»ït;èẓ< 6₫†n₫¨ªü₫#^7S¶ưä`w)"Øx&çmH°á̀!é‘g°ṇ̃ ‹|r‡SWü’©ÜÛ’x>~R”ñRđ£xŒ¼Ï<ơSÆà/Ö›FÄ'Eœô€fî|4ÎÓªúÉaY…gm̃ê0W¶ÿ¹<ÆÖª84Çk—D±ŒúiXoÇ;ä(º,C†64ç y ùå<áíóA_:›Ư¯|ä|NêGĂáñ)‹„Á-·TmÆ*^b~DĂ ë$̃\VénnñƠăj.?[‹q)µºdLm\9=(Ösn+8à/\qéù*Ö›­îb^râÚàçd*W̉ƺdvNŒ÷këaÔñçĐơä²6%ÉSÅØo&‹{¯’R–×Ut=w~ÆÅS±6wÍăÍ„±Ï‹ë­¸ÎÚû¿ÜVc•¸’©1ÖÙªI•Â3ö(¹óKÑÑÚêë@Qÿ9/îM›u=ÈWq]Z¨ë+u•‹×熮Wq« >‡®¯ª¡ë†}{½.ç«x^\7íưµ¨µv,£êz EÆ’ct]Ïí«J¥V«Œ+»q±^‹ç'Z1}bhI¤Íº.Öa1m穾¿Éù™Ü—×¥8Ñ£₫‹ˆ®aÀºlǻ’Z1E]/đq™ËÛ}7—Tƒ¸¾ç¶̃óÙ¨(MN·âĐ®Đü:Y[n«Tt^90à©Ø¬ P̀{­Ùâ:›«%Æc,æGÓuư|‰‹³¶NÇ7èz1A8Jưø§¿¸5ÔÉ©é¨ënÅÏñ5Ä&Ö›ªâÎ-OÎl\"EƯ ­’êªÁ¹zÊñT̃O¦@l§bi.Åâ9Ó›QœEÉå&yT̉ÿâyQ gơ“%X“9£(r‹ưLn(«́ˆ¬‚íˆQÆÆ¢¤̀•<<æÙ́áƒÏ͹Ÿă†3 ~*ñævÁ¢”ô?X’ÛJcéVR6䘺nóÊ%ăø”“‹Bñ|Û>.ÛÏÚ(ÿsëÅa.ôpEO0@àD¶Öơ®›ñ ¸¯ƠlơvuÎgAÑ5ö!ÀÖº~¨àq€ 0º»Zû₫`Ä € ĐÀ¤ë÷ÜsŸ₫ºóÛƯVà‘‡œ̃¹i~kúưñÇx₫­ï¹\+áÜRí—i,C€À5˜T¹öU¡ëHû5Ô1B€ÀqLmöÔcWư·Nבöă$O @`xµ¢>¯Öu¤}ø2"@@8ªN}̃Të:wÙ’lÜ€ á tï×ơákˆ!@à8úöëˆúq2'€ p :öëˆú51B€À¡ôí×*Î@€†'б_B€F€~ưhÁ@€@;ưú6÷×ùÓ³íÉçH@@ß~}ißE×§I‡«‚ t́×g<HûÆyØe'±qŒL@'%Đ·_ï*í³¾*ë¿éä₫mâ²è‹í$§ÎU@np•‘“–nC€Àƺ÷ë]¥=¾àëwđ©!óI's[ª~=9©áØÆég:@ŒÀ‰ûơ¢¯¢ëó­ôœ<«Á8°jPœˆ€ ‰@÷~½÷ươäuøY‰WÑơ¸Jªô¸¸!¨²FÉB€l}ûỡ¢(·ÿ뺮H2×á9!@`Kûỡ¢|D.×¾;ɯ}nñ?±#g<7·eA3 +'Đ·_?\¥½>”Ă8@¨%б_¯u¥ëx¾TÖ/Æ!@à ®¨_?qÜ€ ô#б_ï}½”--·êg¶ô¹ @àDúöë£J{̣aºæ¬')éo6ÏË€ 0ưú kæ,ª»—2FqĂˆ%‡Nyߨ7Ä}0¸)̉®°Jé§ë¹âWÂI#É“ÎØ\*ă{¯S؇t[÷ëAÿQ¥ëbïâl6¯Ñ†“¾qXí\µÇ.Ñ]Å·µ́çâ2̃¯̉ug'è;‹z/n V[꺲/Tt·Ö2^_e lI`ë~Ư_^Å–4î$’€ü†)XôíIƯàÙBĐâ}˜±†&íØzSå§-½†ŸÆæIIA‘OÀÍ—̃8wñŒ¾ưâ,NPœ¯ØŸà¨bư[¶zPâJrö1E¹dI1JÂæiØßrÙb.@À °C¿N> ĐL@́Ë›ís  ³ا_?;5üß‘-ăđ™8>úơăç!@*ưzî̃míûj(Œƒ \=¾ưz­„+q]}Ê@ÈèØ¯Ïs"íT @`3}ûu¤}³D2 @`"Đ½_GÚ©3@€Àfè×7CÍD€ îº÷ëÜ_ïC&€ |Ÿ@ß~Q§̉ @[èØ¯#ê[&’¹ @¾ư:ˆ!@Ø’@Ç~}Ë0˜ € úuj€ 0ưú6÷×ùÓ³CƠ#Á@€À2}ï¯o í»èú4é2́ @èB c¿>û»´w“7ºËNb㙀NJ o¿̃UÚg} TÖÓÿÈưÛ>ÄeÑÛIN¬ÛÛ÷ø’nû#¹Zp̉“ ·!l@ {¿̃UÚăë¾~Ÿ2Ÿt2·¨í×;¶–lP"L@'"pâ~½(Æ«èúÜçtWÉt±e¯ơS™”1€ pº÷ë½ï¯'¯ĂÏJY«—9SAe4÷놪~ư:+•¨!@@!Đ·_ï-êrû¿n ë¢À+’[¢Ø+ f  \ưº¢g>kQ&Ư!₫ĂkÁ=́`̀ük0>iÇ~3₫´X+₫¤É~Ư¿Jo_0LƯ` \ ¾ưú¡ Öîz;oûs4o{ÓÀ> ¬B c¿¾k9Z³›óçh~®Å;€ ° +ê×·Ê,€  t́×{ß_ߑک§̃æ’À̃G0¾O?ÙO2¿Æck3y®E;XH o¿´/LO¿ĂûéẾsoûưÈ–§ rŸÆñætn>¶? é%9ñY r8úèØ¯ÛëW­ä÷Cp–YjkónK~4ª®+gn×]Emâk#Đ·_ï*íUùƒưn#÷¾Ư´éGù×?“ }|Ô¾©ëqO.)U<]G[Áơ÷íX´Óߪxûq %£pĂâWŒ«³ßøRÊZfËnöˆ^º×¶ /Ö%Đ½_ï$í¶øÅ“Ö_‘²›:đ*—rƒmQ4à‹l•c±N$']Ëÿ%¾-96¦ñ¾]BÿZß|ăÉTûßç†y›å¹ùÀOFLAàœµ_Ï­µëT­̃ư“²Tùr̃́2Qq­·ø}›ß_*¨‹ÍÙZ₫7 8ÖÅ+nwªP'ב]́ạ̈•Û̀%Ñơß–wcѬ­kX‰=tï×kWñäẀ.Ñ€Y¯âªˆÅ¹]/êJÑ ]CS«˜]’_Å~RG‘VG䝸™¿Y«ëÊ₫@‰4gG?–‘€@¾ưº²*µµ>k­éF¿Rű¡M)¶JJŒ₫¢éÎdoj«”2—2&·°9»Ö3y¸2oï1>RQGíúiĐu%FcV¥ëÅâ¬Ú«w™kkØ&ûơ~¢ˆ™¯gn¹Y¸n®UN±'?ăOăuS1o’r}[lÍ×xY·íäæÚø(jưõäêÄx?ç§!¥É*̣É+|ryẈǻ;§%ó9Ø;ȵÎ,́@9}ûu¸́&†‡â ûơo®çb–́ே‘B€@úơ6n@8"ưzïûëGÄ™÷)¸ÁY¼>Ïux;¿OăÑsƠ ̃Bh Đ·_GÚư”TIuƠà†ÄïrȺ7’ˆô7w!À¤€zèØ¯Ï®#í.…UR]5¸w•¬bơˆrè'½]}öU˜`€Àêúöë]¥½êѳàËEÖ¶]$O^ï͉Mñ‹FAjm;ñe]·ª¸çGäÏ´đ÷wc|rKd§²èđê§!@÷~½“´ÇBO´dL.IÎæ¬L₫¯N«V™7¹iĐc,ú\JÉù¼¢äÎCa¥p¡e?Ô*ƒ3€À–ÎÚ¯çÚSE'”1E=ÛEוÖÖ®C¿ơ¿¸'Đư,æQ䌮o¹j0 pdƯûơâÂĐƠE1«èwsŸ*êM­†Ñ¯/iF‹ñ6đ/Ú4®Ùó(r¶/ )ªä³ß èúöëÅU»MÔ‹ưb¼Ê·é«ë;c¹ơ¦m̃X‡Ú́₫‹ }’sÈ` åz€‹ï8¾a÷ Ÿ'Œ„ pûơ~¢ˆ¡7ÉöW× [“̉G퉧öΦ;ÊE¿csđMåôXy?g'É6đ?¹oṢ•ÓơÀ™dƠ^ê8˹Ÿ€}ûuÅÆœ‘€xíưŒ¡á3 SèØ¯Ÿ Î ä®d ô#@¿̃-–!@[èÛ¯7›swß· ̀w"W…ḥ2K5@ăèÛ¯Û5)«jđŒ•K@îưRü´çƠ½=B¼~,GógƯü.Ḯº₫` €Àr[÷ë“ÇÆ#WÅçÏ}]×År9¦%ªÄ#7¸ÊÈoƒcæÏ¡¥¸®e¬AØ‹@Ç~]‘„äW’’߃)â/‰Å«¹ñüẈ£Üøâà\°Ëă-$7LöV)>$¦ªä1hñăI{FÆs>…›?£2QßkÅa^@ 7¾ưz̉{£_ÏE[%-EyÈi€2KÑxnß`ôÁ ¥Ô¨i•«vR2s€U“‡(y1üLrh(¶̃§ö!t%б_WD:'bẃºli™>ơRÖư\S«kô…v́µRÄU+±ÅDÔú“ÜÇ8å½ơu]̀‹o!pIÙt=—0@àƠ¯§Ñăú%×w»} D%œ³¯Ë[r }¿¢o—mtQ×u’0 ûÉW‘4œ?ÂIˆ€V$°g¿/è¶®‹̉R% JÏ­4́¸; [™Z]w{ø£Ø4öañvJÜ´åjCÉ罹 ́N`ë~=¸Ú¿ 7¿S ¶É+Àñx¥Ï™R¦(êV² MR9(“*Âo›Jr· Ïœ}Ă[ª“zo´₫ʉ†jä@G#°C¿̃Á*+ø}ÍaJ½S‰}@¨%°u¿^ë_íx»ÿ«²¶¢©ªyWÜpQa•y1@û°_ß(³C€v$б_oëºà¹2¼c05 ŒA o¿´Q%D@g!б_Ÿ íg)ü„ ôíבöJ„ @àDº÷ëHû‰ªW!@à́è×ÏAü‡ ¼@ {¿ÎưuÊ € °¾ư:¢¾Y"™€ 0èØ¯#êT @`c}ûơƒa:@€À•èØ¯_9Y‡ lO€~}{æ̀@èE c¿Îươ^IĂ. @ C o¿´Sx€ - t́×ç0ö-ÓÉ\€ påúöëHû•—áC€Àƺ÷ëHûÆe:@¸fôëל}b‡ Ñtï×¹¿>ZÉ ˜@ß~Q?pêq €$б_ï*ê³ñøgÀ @@&Đ·_—Ư¨ˆ®W#ă@¸ûơ®ôĐơ®x1@'%pÖ~ư¤¸q€ Đ•ÀYûơ®P0@8)úơ“&·!@ ôë” @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ôëăä’H @ôëÔ @`ßüÆWª^w̃qû4~ị̂yø¡{î¹ozç¦ù­é÷éƯçß‘@€NC`Vdñg–ltư4ÙÅQ@¸6N¤§N»øBׯ­<ˆ€NF]?YÂp€ `@×)@€À8ĐơqrI$€ t€ ŒC Đơd`îy:›'ñD@Cˆûơ Lÿ!yt}È (@‡@̣:¼ /øæº>N≀†$»¿>]² €Æ!Àssăä’H @è:5@‡º>N.‰€ €®S€ qLº>= §¿øÿ¹“{" ñL:]û*ÿZ«₫î † @`_Óÿ¯}úÜ#?4óí¦Yê§ß§wÅÿ—;Ă @8¬®ÿ/î € @à€ưúô/@€NJà…ëđú£wŒ„ @à°»¿^ûèă!@8,ÿ9–zErÇIEND®B`‚rpyc-3.4.4/docs/tutorial/_static/running-classic-server.png000066400000000000000000000747271314203541000240430ustar00rootroot00000000000000‰PNG  IHDR¡:˜a‰sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<yUIDATx^í½ œEƯÿŸ0øpˆÏ£Êá#"ú<‚đx>ʥܒ?€> ₫DQD„Ă@PĂ G ! ‹$@Èr;KîûǗfw“ƯƯdw“ÍEúÿí®î™Ù̃9zßóªlzº««»ßUSŸ₫VƠ·ª¬©q×¶ƒ~tØá‡uá@€@d¬_¿mƠÊÍkÖT @ˆ.Qz€ M ËºuƠ@€¢G Ë†M5@€¢G ËÆMÛu(ï÷E/ưׂÎ×÷¬yó—»± @€@iè²¹¢FxĂơ™ờWÇMxOe€ ̉"`k¼#đư CcÚă_̣÷ŸØë”ñœ4ö¯Ÿ{çÁă,ZZZÇƯB€:-.›·ÔI&z£í9£ơéÖºg'͘<úĂúå5“ælZ·n»¶íßêñ™_ÿú– WªS€ 3.U5Û%H¼QÿXóÊÛû>ñÈ„í'ÄŒ÷wm†±lcư¸g~<µ÷i“;u\ÏÏ‹5?àÖĂ.œ«Î"@€ P´ºl«IAvFÅư«F^2dÎæ¥†±`Ÿ1«Ơ˜µĂXÖf|°Ä1åk₫ºcó½/Ü|ø|­:‹@€@ÑèR³=&aÎ?¿vpÙÄ^wyUaˆª¯3ŒI1cz̀xo¹lô{çür₫¨K₫ù¿^réåê,^è0Œ÷[‰;Œ¿cvƠ·=×4ơ§ĂîÿôuWsë­·«³TPZë»á̃é‰ĐÎs“/ê¾%¶!@è̉h}̃ꌹ}ÎlỴ·óÊ«[ë,;₫ƒƯF¿ñ×ÏyÖ¨yHzë—ôÿöÈ¿~®[·no¾ù¦:K}”ܦÚă>&¦>”*¾çÜä¤Ü7À6 @]b;[$H+½˜̣ÆÁuFĂÛkç¿0³|á„ys&Mưî>Kûü˜v­±₫/£îû·Ç~q̀Oÿﺥ+V©³tĐÍæj»±]m»÷'Ÿ¨OÉá\¸ç–ø @è亴¶́– Nđ›̃¼ØØ»ÊXsŸ±̣vb ₫¾kŸ¼̉xïê¡w₫˯ÿç«Ưïé^¹µJå JÎe§̃HÁ½_¿¨Y›&¾ï²€ ĐytÙc}ÊÇÿMOt#~đ#ïư×áwrÈŸ~ưÎyỡï êùôƧ®ØÜÿ›ƯºưHêc±˜:K}”*ûn¸wz¶=§«̉Ä×WIuQ÷-± @€@—½{÷IˆÅôë_ÿæ§~Ÿ›n¾kàĂO äF9¸fÍÚ¶¶½ê,´-¼GyvzΕ¯î8êkªÓ_49eö@€:-.û÷P¡©igee•oؼyó„ o¿ưö;ï¼S"èSØ€ @ h t9pà`°{÷êêmÛªƒD& @'ĐåàÁ€ D@—C"@€ =]ÜkƳ @€@dtùÈ8H€ @ zºÔÅv @ˆ.å‹Ö @ˆ.­­îĐ̉Ú(Á³SơmilM *N<´4¶¨°3Ö̉bu¹ÄD\1%BLµ÷ë])˜‡âû]ÛÍ-*¸6·4ªà=¥9Öb†„S›cvPg5§₫Gs­DvYÁ•‚:j'hƯƠØlơu—lXÁ̃é|ơƯƠ,ñ%ÄWAenïl¶Câ¡ÆrÈ ²:µÓ“ 'rüëÎØN34&Oúv3Ödµm}m”àúª"˜;ÍĐ3ƒç«Úiî·‚{{g¬±É'Øqô‰z£1ÖÔèJ<‰ ‚;eÏNçk¬Qæ”J$¤Œ ³H&}cvˆÅœOÁ¯÷« ưñ́·¿6ĬPS¡AçhƒóQq¬CúÙ“ê$èÖ×ú˜0c6Ô5ÄTPqêâ¡¡®^‚{l'́ÜQß ¡®Î ÖÑuN¨íÓ£*̣º˜́¯:¾³ß ö«Nœ ;\aû3ÔÅœ Û®°#¶]‚³G% ÎUq̀ ¾&„Ú ôNơµv»<_ơ₫Ô5Û²µ 5ô)¾_ƠΡº¶!‹PÓP-Á{J}u­ÔÑx=ñÛjê%xn«iPAí×_·U7˜Aí©®·ƒ;‚¹m&èJMCUu½ÏѪjÙöÙ=fäxØV_e†3xÅ¿ZéØ1ë+·5¸ƒ}–JÁ •Û$Ôư5ñ\3ï~!@ăí·4̃û–€Æ£ñZ}Ñx4>QàE¡Ñx́x́x·áŸÂĐÇÇw^&°ă±ăÅ.Çw̃h«§­̃é ­¶zi±§­>‹†zi¢§­^7à»›÷i«OƯ›n©/ưñN>ưñwúă}zå±ă±ă±ăéwuÉcÇcÇ[îs§Çß1æ1wÖ°;́x́xkœcî\é«0`°9ؾƒÇƠËUW_üăê%›̣6®^®åϸzÆƠ3®>ÅĐz4Ï0®^ªTw7¥îai¼'}ở }ç”Æ›×j1¯˜³ïœy®Óe Ûâ§₫vœïœç¹”÷];Ûê%MÑ{ơ·ƒ|ç<·Đw.w±=ëL-÷óCăñĂw.îM—É}Găm÷8µk‡x¥åú¨Ú¯”^÷µÇé•B;ÁëyïÖT'͸rû¹Ô»¯bé´̣ªOá Ÿz¿Gă=đ:AÛĩăßk¶‚–̉?^uº;÷ê‘v»-ƯóU5°§t—W>îΛƯßli¼y¢ưÆ öªÅ̃l´w…øNí=ïơ¡7Ưèm‡xóDû5Âí¿³q—ø¯Û.ïʱ>,yÖNöÎ₫D‡x§ë]ûĐÇÇØ+ÿx·Æïl2¿65‰g¼”Û½2ß]ouûÇ7J+½̉Ùú~®óî1zêÜFưñÄOö’w"¤w‹ÏêhÜ!^{Æ« åï̃vå“üà‡våó¦è•[¼Ü~đzÈỄö¤Ot‘w{̀;Ñ”+¼å¿,ÛIÁëo:Đ[ÁöŒOÜP¾ïNŸ½xĂ[Ái–÷xÀûî×;=®đº1ÀíÔn¹ÉiwyǻîújƯaå×®ưé7÷tñÛ·7¨`¡OïŸ|Í éß́7€ÚúwHï?jµƯ ¶7“TMC;XGă®đnÏxí¯Üâu0Ưß]đêôDwù”ñÊÙ=îÏfúÄ[©¹}Ü-GùÄAvU2¼Î ½ƯÎ_US/Á“ ÇÙ=î;g9¬oÛV¯‚-Á̃v¬÷¸¼W×Wª`û¾Û^̣x_‡ø$ßzˆă\ă•îjơƠ–Ÿnºo¿Æ»­IûZ–å­B(o¦cMŒăNVÙ÷ê @_ÈRëp4^_K)±Rk¥ñæU¬·„xK§­8æNß•ˆ)ó ñdƠN[éÛ­ñúZ×={´Æ'́Iăunw—4^©<WúxÓ½Ÿö£ñơÆ£ñq Tµªj¥×¯„PÙëæÑœ́ø¸ÊêW»º[ăs¶ă•–ë¿¶„»„\ WăƯ:ä˜́ªÅ̃V÷d·”>®úJă•̀{ÎRæ»sÈœØÎư¢o½+ÄĈ—`jù.ó¢n±·÷ØG]¶~öï&&ÛbÁ«¿Ê·¶m;^íWÁÜv ẃx—̉cÇ' ¼Găµ¥¯tƯƯVïÑxw½œ›Æ{”«¿–-̉9¶Ơ§Ñx÷ưk7¯ë¼XÚ²¯ôXɶcÄ› û¾ï4Ë'ª¸£ñ7 û ¼¶ú¬4̃-ÿÚ/.q#»¶ú$ƠGăi«§­>C ¼jŸ§­¶zƠæŸu¼GăµV[}5̃3}\ƯĂÖxK¿́øP4̃·?>AéÛ×V\ăU¾º´iègoÇÇOq,x·ïi«Ç¾£­₫ø¤Áwh<²Æ›Nmơù±ăă ởB ôÛ¯­̃Ư\ï4à‡3æÎWăµ̀[Mô¹ØñZăuÛ€sgi³µ—́=ŸÅ˜»l5>̃˜¶Æ[z/ƒïĐy¡à³bM{íx÷˜µœíxw{¬̉{ÏmÙ«ư9Œ¹‹·ü«^Gă“ÇÜuœÆ+9×Á=ÑéƒO9æÎƯ¯ÓÑ]̣q«Ưu‰x—|û4^:ăơ=§sç†Æ«îvsǸzs¤=ăê3ùËÑVo/"Ǹú mơÚYÎ=7gƯØöøÎy¢U}ÿéo=‹Éfï;—äï³à¬é§œ ĂwÎv¢sç=cîâ¶uö¾sιè;ç²ç¸Û¥ơ³—”µ×¨ÍÑwν¶¬øÎIđơs)=¾söXzÆƠă;—́#G[=mơ mơ©Œ÷ z²äư–œ7—w¼ç^â‚m.¯ÆÆ»ưï=—HÔc+²3›^ ̃ỸOû•Ö&?…“”y®vj·íéD±û¯û®ïDv–™÷u O0Đ=¦|ó®˜ođh¹ăjx÷óµs»Â;¾̣ö‚ô¾^̣öxødP»vÊ z½à¬ö‰W̃đZÎ]+ÇÇwz=àăsÚxV7纉·¸ïÁ½*¼{®{mÖ§Z^ù»§\0̃z°×ƒ÷Y9¾±Q¦t£·ê¥f­X“̉.ŸaÁxç\åû´6¼^½Ư§­̃…øD‡x}¾³B¬ÿ¨{{9yåoúÎ+ßzóí_*̃Ù£–wN±]áăNđj‘xÇ-^EsV—wÜܵ¼Z9̃ăï»Ó‰S'«Åǃă¹n/ ¯̉/oùÔéô½KÅëeæM—wÛÍƯµT¼µf¼̣€w|ó́£‰kÀ'ùÇû¬/‰$8Ä;_mwy=_½2ÙSD>©§Ä©­m0ƒç,kơøÇ§]0^Ÿë»l¼÷hÜ̃o™yå¯Ưè½ëÇ+çxíæ®–{×ÁµZ|̣bđ®˜ñWñ¬ïỸñ·×·—“w­'+ï̃Sv<_Tv<o½`ÇcÇcÇÇí{4;̃v Ï¡­GăÍyjµuO[=mơ´Ơ'L[ëÂÖ’–¶zÚêƠộ‰¶z×23n:Ư¹N[=v|¼s₫xúăƒñ sѻ楧?̃ê¹O íé·;æéwV«Ë˘;Úêi«7»äsG<ưñnm¶×¤)Í1wk—O#@€ =] >€ D‘¾sỵÇwNûÇ/Zµºÿèɼ0´äBß¡cg.^†¼å¼¬%wwV‹O^?ÿxÇÿøñîùüúÇ{⿺çºq/Oç?ïüt‰íÚ?‡“‚=iNPÍ^ç̀ekOfç;m59–ä–æ˜ rœIñœ£¾3äXñ»Ź4ONü*f⻃:× êê®sÊ…]Oh“8%½?!²FŸâøÁ'Îoăø¦{†æÙç:ị̂öÄvz*5ïM†ÉkƠ<91ÑÈQ“go©̃Qòu±rọ́jïL8)æÀQÑŸ¼íov½›ÁœíF}Ôt7²ß îÙot2ö,7é'½±’•P×Đ Á9Å̃©¿Ö™Ô$9fpf§Q“̃¤ö\¶öT6j†;y‡̀x#'ª82SZ«F/'¯æÀqæ̀ñ́Oœ?Ç>K©¸3[3N¼·^d̃-á2IN|Ê¥úz3fBdëÄíNHœHÇ97V»#¦g°Q‘k·ËÔ$6 _ă³Ü¨ùmƒgÚÏQïW{ö›úZw°}ꪷ7HЇ”|̉W'²k ÓÊÆ=`^Ï#ÓàXÁ/N|¹wkMX5M½Ï 6ê«kÂk†œj«7]/&ëÙ°'´ñô¸ë¯jÜœ   üÙ©·Éh;+(±W#ï̀`®w}TMWçùZY-ñ­ 'AO˜cmT5˜Á:”ÉGă‹@ăg̀˜SX”²^Ư³Ü¼<‚]É·̀§É×¢.ÄÜzÆ£ñZ§YtĐx[éÑx×´ö©g±;Ë•²%—öù̉xuç̣h|†ÉkSØñh¼n̉·7°ă½ øh<¬=?Jmơh|Q½ ñ ưñJÎ=Ô£ñN³̃ó´ƠÓVŸó²úD4̃Y>.¡Ç½àưñØñ¾üNƠO<ưñáÊ?Æwơ¯—KFǘ;{t31wzücÀøøbđÅ:®₫oÜz₫ă箪\_Œ.ơ¸ú mơ-ă§¯~jàÂGú-|ä•̣ç̃X2ö½5æÈ|k8}‘Œ«Ç¤?fúZ KVUÚƒäi«§­̃µ(­wU:Úê‹°­~ulY5÷?÷¼óß?ïüçưqÁ­“¶-iß¹úº+–̀5cÆŒ©.œ·uë&óå ă}ç&,{d÷ĂO|é˜ăïû·̃₫fË|;5¾¹iÀÈ¥¯¼½zÆÚXù®ư³bûßZ{|èê>ƒ*™GăĂ2ëÚñ‹/^˜ø5jTMmMA4¾í¹îû}î®E3=̃qYùÎưé™9?ypÖkcWj;~ÓÖí÷<7û¸ß/»uIÙmËÊ®›~î­ß_¸Ùå—à;—¦­₫ưµŸ₫Ẹ̈ á…Ơñ5àñĂwß¹vùε6Ö4WܶâÖ-ºü¹ơ½†n|̣¹øë¢ÿùơŒ³¾3æ„K̃½p^Ơ¬–sVy ̃µç•ß́ëkps<û˜öÍ4·Èä6²í¹–y´±©~ñ’̣9s>X½zåºuk–.]¼`Á¼éÓ§;fÊ”‰Ûª*ïykuyG̣m/yÏ:7zIxÛ?̃‰ŸÚ]~[Ư–à ' úä7Ç~₫â‰_<ă™O½çYsÖÎr\áí ê•ñ­®.5£v”·7<àÅ>6~úÚßY#2ָϘ¿Ë¶̃Wc̀Ưm<>|ơˆ1Kœv{½öŒH¾Z'̃ñ˜ßÙ¸Kü×ơă{!yåûn¯%¯ưà÷ç,—¼å£6FÍ·ª·ƒă1_W_7qâẠ̣̣̈¶¶¶½ÖG6ZZZDăå#‡äău´ÓñÊ“>ñ#Âüáâ­°X…‘£FÙËĂ'ùĐ{ö«¯/<î£o–¸à¸ m™wüƯÍ£^ßwíoù̀;Cècçơ(ÿƠdăG÷Ï'zÙù₫¢Í§̃0¾́¡ª²GjËzT”ưe]Ù——Ư´à¸+†oªØ‘`Đ;đR’My¶œæăÁZh®́÷‹Í…ḻ–º¼çmGy¥ú‰>vµ·<ă•½lÇw¯½ß¼x½[A5Ϋḿ{Óp7Ûê]Ạ́€Wnñuâ(o:»{ûăƯâ=qôx=ÿ Û?^yÉ;ø‰;=ị̂¾₫ñz§¹¾f» –{½Ë7·‡ûôñ³¼M÷j,½ÇĩëC¯ßíè/¾ïÊ3̃v‚Ọz·V¥³]̃ă‰X^̣Nđ_¹ÎYÎ.Ñ]^•j…xç¨v÷ÄT­ôjO°cÚnñqwÓ¯=îLooÛ‰x\áUÊ^ÿx{Oÿxøsç}¯ç{GW¼ổî[üó¿̀ù₫m³¾®Â/§}ơôWO˜[13ï̉¥KöüºAă›ễŸ9}Åe›6mX¹ryyùÂ>˜ù₫ûÓU˜:uÊÈ7‡WUn±&̀éÿĂ¿ÿô“G‰À_1íôŸÍ₫Ú-åßNf¯_ûNyŸO«Đ²}iXvvG§“`Çûi¼H¸(úüùówï̃­¾¹¹yơêƠ¢ñUUUÙjü„‰•/jÛÛ¶{ÏÖƯ»›[ZDă=2¯_|5¾yøóû¿Q&aßÇ5ïëÇÖøÖá}ǘLÛ₫N¡ñ§ÿ¹üÛ#‹/ßw؇ÇưrFY¯eW•ưô½+ï™ú»Ç¦÷?o‹ÆK¸î©Ykü-åe=¶ ·”£ñ¦ê£ñh¼37NîỤ̂[]}Ï ơ<½ü–ûç_̣Æú¿î9ĐNCư‡¢ëM;wJ˜;oloÜ´)¸Æ›2¿pæ®+NƯuN™„FKæ›ÎlưéYm·kÜëæ,¶j¬\ ;¾́·‹ÊƯsÜOÇ›ÿàViW¿̣O“́fygƯ¹w¼',JŸ°?H[ư-å*Çûơ+— ¶z¸R‚ĺ;h”ơ+“°u'ïß,o·çÓV¯»çi«Ï8—må÷₫vî%Ưç](®¾ªuíƯsÏUË̀3>ăËÿ7ưKß{₫œ ¯ëeƯ&ï̃£íø ½§w5̣§k«_¶¬|ö́Y´¢/\8_?µ̀Ϙ1mÚ´÷T‹}z_°`–;(W½øx½Ä₫xÑuăĐ<©¾¬0]”×0æ~ö£Eà®êvîcgµ_ăŸ}cù›+bc«¹ûŒ†Ñ` caLÛ{|àBO[½¯Æk¤–ü›Ưçñ=V ¼|•.yó\ç« ñƯÙáL\Ÿ¹­̃´ăÛz¬üåÅ=7?k‹kÿĂcĐK{¾¯Ø±È ¨ñ•••̉"T__ï¶×[[[‡:hĐ  6ˆ}/Ÿx£} —N}³µoÛ¶=-­v½hü /¾(¿aăFûù ̀xÿ}”o[½–íX忨ÿÙ(/á̃ë›Ï)k>ï8Ñ~gjú´ăœ²ÇêM ï¾Q₫^÷à4³«^éwGj¼üν¶Æ¯®CăÑxúăăđíê¿`̉yw|đM·À+#~üÖ%Œ©x~Ô–^3í‹—N9ùÓ=2«¶z¥â-÷Ư™¦‡>ùÁœNă§NØc¬3 Ỵe¯¥ƒ&¬{uXº¶z5́Î̉o{̀6Êơ›̉u\d^m»ÆÓ™Y©ûă—€`¿êFSéQæ»aŒ:°Gî§h{Ù0®ư¥Ơc~¥T?H«».*²Öx÷+ˆ>¤vºc&Ç÷}½̉V¿qăÆ)S¦¬[·N z‘v±æwíÚ%fư!CÆ÷üóÏ‹̀×Ơ™Có́6ö/ú¢ñJàw5ïZ¹jƠ¢̣̣'ŸzJÚêEæ+¶n• ôÁ5̃î‰ï~}ưÙe*Ä\£đ2Øñ?Ÿaö—ËØºß.:Ɉz3<;{ɪ*u⦭;Ê~ôv;Ûê‡+A‘WÛ"đơ»ííå;âïÎVÙf̀]r>cî̀qîågsçÁøóDà^xEVÓK¦œôưI'œôÔQYÙñ©4̃£ú‡àùÅO§ñï½7IT|ñâr%êÉAd~̉¤ &Œ{íµA5^t]d>a=:íw—lÇ×=pÛÍ«nª™uñ–)ç6¬øƒ'ϬîÚë¦ÿ÷3SÿnÍ[fÿ!gß·̣Ơ¥å³{>3ùé‘k̃^+oƯ¿r÷~±àOX÷̉°̣]ÍMiÆÜ™²í2ÙU½é±ăµÆ«¡ơ!jüiW˜ú½÷ŸÆ‡u¨[yƠæiƯ6O»fó´[*çt­ĂWă=Ê­Z«»Ú“j¿GƯ=zŸ¦̀Ñø•+W~øá‡̉ /-óư?³fÍ’&2?vœ½¶M₫xéÔ7Çä[o½ 4À/[¾\»cÇʶØñ5µµ̉ô$ƒùƠëBz;̃Ôø…3k/;µúëe*lï~}Àqơe?™\v窲ß}ḥ:Ü´àÜßW/’_ö«¹9¹Kf¾ç€Q¹Ó¨Ûm₫]×`̀©4æW%Øñº 0®¶z—–3®^ú™ÆƠ_đ¶©ñn;~÷]b»Kx}ÓÓ¯mzjÀÆ'¾5ñ3gOø×OƯûñŒoêq«íJ—Jă“ûŒ2ïëgú¼ùùÎM4>½ÆoƯºE~üø±/½ôBÏ`“ÑßĐ»r̉EM[FF­aZÚs¿Øóø§[oø̣ŸÛRóvsÍ5k̃ÈMă÷/|üĐÄŸ,}âg£G ñî̉¿XÔ³ßÂG_Yố¥Cß^êxQz·ñ­|ç´Æ{|ç¬ư¶ï\‡k|EkY3í{›Ç|mƯ˜ïI‹½al–¦{có?ŒÍ/VÏùă²_ÍhÇg¥ñéßÜI% O—Nô5kÖÈ »eË–‰ÄËĐ÷̃{O¬öI“&ɆhüèÑ£_z饑£F¦·ă¥S_”ÀË”đµÛ·‹ÿ’ôWøá+ưûKSù¦Í›/Y²`áÂŒcîTsưö§»W}½LBơµgnù±Êï·ơ¬²{l™Ï`Ç_>º́ú̃đ³©æ(ú†˜9àÎ2â¥3̃´́ƯmøÙôÇkà"đJă•À+ŸµƠÛV¯,x4Gă“F̃ẻø?N»ơ—ï}UÉü`gÀƯŒQ—¿ẉÅS>ÿß“>{΄ûÏñÇ̣îQgÜÿïqWx̣V«̃Z^ö˶ưW­o5ƠÅiZ7]à̀hIçfïLoÛñöë¯æǼ9³¤¯]5ÑKƒ¼ù*~tÊ ¯¨Ø,/^̣cƼ=`ÀË~ÛNêÊi>.êÖv¼k éÓ^!^Úá®|´rî]̉­zå·4üíë}O½qÎ…¿ês–Ñ!xœƯƠÑ đ¾‹ÊëÊ/N­%_«×}·ưוg¼WÔ½kĂ':»Ûñ M÷U5ơ*Ø~ó‰)h‡xu!—w»é×®]íh‰₫ññ¥âƯ³ØjGy¿5æă>ññƠâµï{|±yËÉ̃Y6^¯Ÿb!ùmơéÖŸ¼áwß8A­{~uwơ#Yṇ̃Møô×'üëÇ}̣»ỵ̈o/~üÿơ₫y²ÆkSÉ>dI»₫´´Æ$Ä¿º4̃y °₫,Mùt¿ióú·̃%¯ÆÖ‰Æ»^̀÷wß}G~È×G®Æ×½ÿ³Ưu3æ'Uè9ê²3üü9=?ßTÑc÷–ûª—=ŸƒÆ[í¼ƯDàG ™#]º5̃Î48ñÜѶ¾;Gă•̀«óB`º\ăëV>'Jß:ói“7 rƠ+ï„Í·T?ÙÀ3’é°4^¥ă+çíÔxÉM›6-X°@åû÷ïÿÊ+¯¼l}Dà‡ Ö§OŸ‰“’fÂQs® ú-cïEw§¼÷̃«¾ø̉KÏ<û¬ØñC‡ “ÄåbÉ’%̣ ×J¯ñu f®ÿîqk¿V&aËƯ×ÇGÎÇbu«—n¾ú¬ g–UÊ₫œ4^ºáϼn”éKù)ÿûÖÆ­;Ú¯ñ"đUû”Æ‹À/¬¶5~́z4>Ư¤7©^”œ£ñÙr:»Æ‹U}ék₫dâ—®›~º[÷wJ…8}ûø3Æ}R̀÷Çý[‡}ú÷Ç­̃¼̀£ñr®Û!̃v́;Ê|Wcë¤^YđÊ|¯9y èóÏg«·m Wăk¦^m´Î7¶?ªÂ§îü—«Ÿ₫jͲß4̀½jóøoïj¬ÈVă÷-{áиǾÑxmî³ăµÆ'¶äÛÓ̉Ù¦¼e¬Ç׬“Ñy>sØÙoO{ÀŸó́§7 ßúæ·Ûêß3ÿâ ûÿtÉ‹ÇW—?Dă•T«»¯Ư½ß}È7fr"¾mơíxé^k}V¬X!v¼4×O›>MÚçeØƯ /¼°`á‚4æ»>$¿cÇ1ß«¶m“>xñ”6|¸˜̣K—-›7o´ ÈT̀ëׯϨñën8wÅ–IØôx1Äm9Ơy_¿u˦ß]¹úkeo8·nëælíø3¯]ö‹Yj¨ƯŒE›ë´o®9›‚Øño+¡¶ÅXYÑ ÆÜ‰ÀK+ư 7ÇJ±Gă“§·S&{âđ:=“²¹±ă½3ÑZ’¼ºzÙiOé„“ƠØ:iœ¿öƒóÎøù“̃ưÄ¿¾}Ä¿Œ.ûøïÊ^~çy÷œµ:âÔøÚÊ×_4qâx5¶N|çÄ”WæûÛoK'éÈgŸ}z₫¼dæÚ5~Á}FÍ cc÷æ̣Ÿ×L=rÿOIĂă²7NƯđ̃Ïk×¼aùÎe×V?oä£óîÿ‘mÁ‹À»ç³i«/¬Æ/q¹hüª7Î6ꇛnÑ¡qÎ¥›GuÙK',{ùßÓ +È¡ mơƠƠƠ|đô¾K{Ñ‚óׯ_·­z›(·¼´Ïoظ!ˆÀK5ư­ƠNy]X²t©8Ü»g¼MoÇ×L»ö†s+‡Î+đ½^´v¼˜̣²ö̀Đ¡¯ú†4Î+ó]Ô]̀÷Áƒ>ûœ-đ¡k¼ ¤_=äxÑơ•#ÏÚô₫­¢ëMÛeÑ9ư&‘µÆK;DŸ^ÿ0›è•À— Æ+…—†úæ9ÿ[óÎÙ«œ¸đ™£dœ…ưί¹Ơo^¶»^&ë+®O—.ùM›6êzÙP¢.æ{úøäý%)5ŸƯºơ몪·58#ç“ç´O˜‚>¹?^™́©5^d¾̣¾ëwe¶/mơç̃<æµ±+¤©¿=Ÿ0\ß=t?i›₫øTÔÓVŸÔI¯ûÚ}l}Úêív́—§=ÿ¾₫/·vä͇ñ˲Ó~sꟾUèơPùRi«Wü~¸`à Ï=÷̀3Ï<ơä“÷éó́˜wß̃V- ̉Ä́åǵatጹ“aw;6ƯƠ¨»â#̣TƒA¶v¼s—tă|‰ØñZă•ụ̈Wo™ùצ sWÔŸŒïYYN)}@ĂƯw­S×ƯAM^›´nMû5>·₫x÷ṛ9k¼´ê«j­Ayfˆ ymÆÜ¥‘ǘ;Úê­•ỉ¹ói½W‹ÈYö½¥₫hqôÇkw­1¯]êÍ©l:Bă›ươà|{Ô}'×ø¢Ös¿›Că“ÇƠ;kÓånÇ£ñ2„qơñ¡øŒ«O\o¦CÆƠ£ñ.ÿ71îs÷Că}}çJNƯƠ £ñhüå/§V§Åw.ÉMß¹øÊ°j=ÙÄơa“–©µ\ẹ́ï;—Jă±ñbÊËññeăíưNcx«¬(og yeÇ«£z€}â¸z›œ½`g øø¹í]‡^Ioü¢JÅơ ñ–w»>êñŒWÑRûÇ›çîji” O´[ăOzÇ̃àY?^yÆ«q2Ùmë›éXỊ́ÍN°W¤ơH¯ÇĂ›§xtO\ßƯåRoùÁ;A­Jç]?̃³Œ¬ưƠrok˜½'́Ecưxñg“åo~<óöö¤¶ú†X£„´­÷vx§¡^íö®ï·Ó;ÛÓ¯FÔ«AvV°>:Mk§ö|sE‹ïtÆ×•7÷Ä]̃Ơ₫ÿxƠ€/ÁZ?̃Ơ¯V‘wâU"®5åRnë5às˜Ç÷„uâeÍø3¸<æ·ă~đq§vË»]GSûăg©Eå×€÷_ẼÇ1Ù•¼¶oo0ƒ6èªhñ£Ö– ̉=ï¬/3,%øâ×ÔÖ[!Ñ^»Ô'zÀ;¢n»³«sµw{MMƒœ¤́Ơß3¬oyÀ×6¨à=ÅoưxgQù„%ç­EèGùä±÷Ở[o†*qw­.¯\áƠ!ó¨Ïâñqw'í1ïq—wR°œÚ`Çq,uÇó̃IÓoÁxmÇûNt“ä.ŸĐ>—¶z4^OPÆ[*îu4̃+̃h<Ÿô€Æg!GÍrƒÆ[}êĐø\lźxYŸ;₫éAoílÙ]¢­ôrÛrọ́Øñº̃;ŸgRƠÔ¶´Ơ«1í₫V8¯§–‹L¼´,ZµºÿèÉ̉1_r¡ïб3/³¦¦OøĐ°?̃ëG<ưñ©zåi«O1®>ë₫øµË§ @ˆ{fï̉k6å!@HK ÇƠ?<`2€ v(RçÍ € vp4̃™©Æ^,Ι­ÖÇ&q̣Úø 6Öt4É3Ơ;“ç$Îc ¬Ë´z¬9O^[ÚùTœ@€O€ D“@ hüâ×¾¨Ă¦M›vï.áT¢Yˆx*@(JÅ®ñ¢înns_>qΜ9È|Q–%n €‹@.ÿđvwÉK¼́q¯9V¼(ºE«¿+²Ó0î‹«Lq7€ PRj¼È¶¥ÜÖÚq‰cị̂ªñ-ư–'B"8Ñû=>—ƒqߥKçñBLª8%w@!(z¯ïU9óÇɶ»gϘ̃f¾›‡È₫ørj§.<=M´€)Éä“ r9â@€@Iđ×xÓ‚·lwÛ”w¶•q¯íxưUµƠ«³ÜçÚÎÊñ©NwÍWŸà;g¶Ơ¯é%×ϸͦy Í‹µ¶—́üЉ½{÷öh¼₫ê+ùÑE4¾$~Ü$ HHÇr”w«x\́{·¢»:Íûv v ¿Ó[o§©–Ÿ±^̀N}ç«ƯÁo®O÷uÿhỢ·m§è·»W̃µ=ïçö½đJïºë®T/ûµÖºE×½Ócô«CÉÔ%Td÷¶'Y!9YϹ:}¹äˆô÷́NÁ÷–̉M[½¯Æ«ø¥ïPmơ £ô“4~îËŸÛ¹í~Să«đ [ØüîE2®^4~̣ä„pÓhm¸ï) ¯›¦­>•mí6Á“ăøîqw¹Ă onnÇŒ̀ï %A5^‰½ÚXïqºØµá*²î·mz-ÿ¦ä{íøyưO2~Ím©ÂŒ~_U ơË–-sgLFË8Ù(w‹eÆÓ}mÜä_-LÔŒ—󤜜lª=Yµóû^%ư#DéÇÀ³@ˆÿ₫x·¯Í÷ø†³€ç½çhâj7Iƒ́́!x¾ưñ2¹èwÆ ê%²GăƯ Ôɶ»GÑ=‘“Íñä6pBªæqw%Ÿ˜Éº;Zú&äÔôkGÆûÉhÙû66¤z„ˆư$x@‘!Tă}:éEä<3äx—¡k‡ÆËœµâơ.ú-fzDÈaœTV{À¬ «±:ˆEÜ<à{“aƯR@Dƒ "'TăLö|ÙñÂNd^ ti‡OóiÏ\¶ÉMîA2,D5Eăƒ' ä@ IăơÊñA6,±oi©`[đñµç­1öz\×úñfÿø8j́=ëÇ瓜@H$AăƯkϘcæEÈÍ`+·*ïîe÷v̉+‡xg`:êéïwÍsg´Gă)¦€ vÈÎWb́…—Øtï1Êăo ®s“âè–s 4¾ƯÙJ€ #;÷¶Æûµçkư¶MvmÇ»7´)ïwT4@€@; ØoµĂÇ[àÍíäñđqa³Û`™éfO¼3ù¼y(n¦7ÛÛÍZË›c-ÖÎææ˜́lnv…ø×˜Ư%̀£æ_s{—ùw×®FsĂÙ̃%‡v™;åïN󨹽S¶Í¿ÖNgĂÚ;Í "˜_cMö_ó«l7ílljr₫1ëk¬±ÉæWăûÍú«ÚhŒÅ\¡±±!₫5fc 13˜‡¬ưƠÙ0¿6Äêcäù'k[₫Ú¡ÁÚh¨¯Ù¡¡¡NöÔÇềĐ`ưUæöù[gnï¨kØ!ûÍ¿²mî7÷ȆÔFĂfØ.¡.¶½N₫ʶ¹!‡¬më«`…ZçoívsÛü›j¶7xC­µGÿ• 'T×6ø„½³¾Z¶Í`nl³₫Êö6k§üƯV­₫{¬`mX;«ªë%¨¯UV°6̀UÛ$8ÛæÙS¹­A‚uT¾Ê¶¹!Ơ~kĂÜ̃joÔWV™Á₫ª¶ƠWµa‡×¶́´¿VÈÑJ+üuBE|£AvJÙ£‚ù5q}hKU…ÚYYp: PrĐx4ïDOÛ% Đ© ñh<ß¹4~ß₫€@'!€Æ£ñh<êCÑ$€Æ£ñh<ÍÚ­“j<&̉@ăÑx4¾Ä4^­&às§ös'=‘Tˆ€@Á ŒŸ0ÿĐ¡Cy¸ 4GăKLăEƯmQ·ÆƠÇ%?À¸z4>µ*—€@FÅ®ñR­(ç:í;'{,—9|çđĂwN9Ñu¬ïœ^xPYđ}çĐøŒ•/ …ÔxwƯa*·r‹O\åÇ?ÿø‚ûÇÇ›èĂÖx•²®éÜÛy¨₫¸"O ÀŸq4Gă «ñjÇJăG ïùÊ„€(:×eÓÇ´Æ»+ƠV)_›U¾Ó’on¨óÜé)í̀Yí˜çyî§½K?Ï]G÷Ç+Ă]›ïî ·ü럳́1ư={2Ö́"đ*dŒI”:k|‚r·: m5Ú[jmk¼¹í̀e×rg.[s¥ñ¦¢[sÙZ{˜Ë–¹l“&²uÏb«¶™Ë6ơ\¶ê7Ơ¡ăêSi¼§ỡ÷%ÀưràÙNS/kGæK]½¸ÿ  ¬ñ¶z¥ßªc>£Æ'¼8v¼Öx%ǜWoOYÏ|ơzâźøĺøÊç«8æÎ#̃Év|C_Ûôn+?}­çxd>ˆH§¤ ”°Æ{Ö¤Qïî5ilË5iœågh«OX;̃ûZ“¦=ïiOƠ˜ÜvWu´¯À#ó%-`Ü|FQĐxƯVïÑxƠ€O<ưñ KÏaÇ¥ïîhÏMăƯge¬øˆNB ¸4^5Ñ«OncîÜmơ¶eï^a/z÷4§±ăƯ1;I•ÍcB +…Ôx{-yÖgưxÖWkÉGhưø€mơYƠVD†²%€ÆÇv‰¡ßÜh6é77Û»̀¿»v5Îö.9´ËÜ)wGÍí²m₫µv:Ö~'́ŒíÜ)SØ:1ͯ±&û¯9µ­l7íl4=àƠ_sĂ₫ÛØSÿxüă ëïWÏ›>xnăÆÈ|êw. ?ävÆéŒ_̃^úÆ‚Ι×÷ë[¶lÙ³gO;!r:̣C@i|đkeÔxGàç8 Ăơ3Ÿ^7ă©5ÓŸX=íñUS{¯|ïbÜ·´´P#Cá₫[Î9f§Óxx7¬YÏüÇüùó‘ùœ 'æ“€Öøf rc5^è´Í>°çƒ„à¶ëX1åï3f̀¨­­ ·v#5@ µG4^*²äàËÎø~†¡ƒ1íñÓ§üư‹{:₫‘“Çöüü; ƽ¾|Đï₫yÅ%­ñ­­mC—>ø»¦hºyÎ?=aă¬g׿ÿôÚéO®jZóħR†B$‡­ä5&UÓ¥ï~i¢7Ú3ZŸN‰˜ßzà³O>ùäæÍ›“éëÅ÷d#Ũx¥‰))¤?‡́ç¥E@k|CĂ.w¸à¼ó<{äk—Av&‹º'î‰ß¦Ê÷Çơk̃·vÓ¿ 9*Û:ÚvÿjB¬I  ‡ú' ÿ‘ó‘ÚDm¶íƯï«ñ̉oÔ?fÔôœóÏ3=áư§¾2µ÷—&=ö…q=Ok^‚Xó pKr*yÎJ¶³œ‡̉À%œ€ÖøªªzDàUpï”í oª{ÍX«W̃Ư%Ÿ°½wó(9Z>ö¯ï¼óNr­êơTïQưTÍ<B!‡ ' ¿oÿ~ ¢ëfu³wsËÚú&_—AvFEQ÷tdkzÊÑ×ï:J¬ùŒŸ¬ú¾v¼6e”í®ăø6 ¸#ç¡p‰" 5~Ưúm*hWz¿lÑxE ̣m³W^4^:æưBËúartÑ»§̉x_™×;“-ûP*G@ä¡̣‰‚ÆïiÛçKÙ®¨©÷ƠxSƯW̃aơÊ»»ä¶÷ιQºưÈÛo¿=DWI¹ƠƯÓV¯i*ÈC±àÅI@kü²å´À{¶ƠÑ /î¢ñV[ư|³c̃/4­z].󝯫zVươ¶Û Gă# EPăÓ7°§zHƠ2O[} }é^£ñ÷| ¢ñâ§'º?øe“[:±×âñÈ(zd'}đ̉D/¼üàÁƒ§L™zG‚ẹ̀̀P•¼Æ«, ¼øÁ‹ÆËàySăW̃áV ú¾íwKYú₫xw̃x„ÙƯŸQă}ÿƠιÂ!P]ÓØĐØ̉ĐÔÚØÔÚ´s÷Î]{dÅ×ÖƯûÚÚöíƯ{`ß>3́ßÿчTøé5~úôéÊR9— Y\®±±qëÖ­‡’9¡å¦e£¡¡A×€h<_(9ŒäuĂ©̉¦‚Æç2—€@8B×xiœ_²dIMMî2êN^™̣¯ÍÚ|ù#ïÏëƯî0lÊBs ëƒÆ£ñ‘ÔÚB=T8ơï! sÙÊTw²>L_O¿{ —‹@è/]ị̈]{]ª9m¾_đđ˜u₫©ßo{ụ́[“ûO£ñǽÑ[ª:g(”6pƯh«fH“N§³ă%äm&2»­ô;JgdXs ´“@è/ë–-[&Môb©oÚ´I₫̀ë›|gæ̉‹÷Ø¥7=¤öÈQ_!ÏMăs;«Ø̃$¢¡4ø8À»¡1ḍ;™gb¯Sµë¼X6’åAđù$ºÆËÈyUÚ¥}^̃tÏ®8¿ç„óîqÁ_^ưáíÿ¼ø÷¿ôæ‡.ÿ­¥ñ[~b4 Qă‹M­s»ŸBi×<Ô%¯ñ¾sÖ 8ßưæj4²MëÓ !³̀#«ÊÊø£<ĐçÈ@è/rËW,{Ñàk~ÉKŸ9«×ç~úÜ#?zhHóî¶‹ní}éÍ_vóC½û2Ôk/7–_¡…PÏÏ({´Eî̃©bzö<Ë#·iÑWW÷ànHuWÉ1=·ê>Ñư¼¾/ÑP¢P²úùç9 /Mˆ¬"ï«ñ̉o®CSÓS–¥ñY®fjï/É4·ăz4¶çç%ˆ}“S΂@_ăgpÿ¸knxû“× ;æG÷¹#¿̃»ë₫ƒûëZâ _ÙƯXv1ÿ›ZƯ‚—Üêî«£h©´6YàS]K§F•“U_½1$ ¶oL4¾Pâ×I®ÛA…;Ù(hü¾ưû%ˆ®« ë̀ÖÖ7ùj¼ ²;TùÈÀÁ—\;èËbµ\Ú÷´qËG2ưƒâ}̣ €dv[±æ= ¦´Óµy¡¢¹'¼ÓÛ8yÈQ.a¡kü+“º~ô1ÿ7êØ9æ̣W₫î3GîÙ×:âĂ₫c=hÄn2êeTừØĐÍX₫cá·9ÿ^ăuiOV_mÓ{T3c¯¼G’Ư—Hó&‘lÄëtR]1U€§y€qơD}óó˜y¨¬¢ ñ{Úöyù5ơ¾?ÿ¥ï>:æ׿yøµĂ?qÅÀ#/|¡ë·2­s‰'́s£lËôơ¾k̉¸Å[g[ûƯzïVư<ä%—ˆ<Đ5₫Ç/éê¡G_=ôØ+}å€Ïî;ж­©ầ^Ç~ûÑÏ ¿6ª¯36]e¬¼È(ÿ®ñÁ9FE¿4ï«‘¾̉îÖæŒïnH÷•[O áONÏzq• ̣PeEAă[e]–=MÍ­M»dzYN~Så_0ø¢_ŒîúÓa‡_=ô—¿Úơü¾]-«å•1å÷™ưôVhú3ÑxYŸ&ưÚ²©¬v·AÆç¡wªK„®ñ—½pẫ{&®tðÿ”êçüưØÓèzÊƯ]ÚŸÍƯxơ¸úô²¬ÄiâÔxO¿»ûU#½'¿yø̃Lª¾üôF¼ R©ä¡ú‚Æ‹¨o©®[_Q+aƯ–YN~źJ_¿ºÏ'¯̣ñ«Ömđ‘Wöÿ”cµơíGO4ûé­P3ö*ÑxY€ÏCùăY]ăùê%ûîu—¿"đß́}́—îzʽ]Ï~đÓFÅ5ÆËŒÖ导oÉMzüăuË™ï˜;w[}r³¹§1À”o7yªæzßFß7 w i4̃÷N̉¿… ^h¬~₫¹E‚Æ‹¨/Z±qÎ’u*̀^¼vîâơ¾yŸc•Ợ‹á_±­–¿uZĂO¹ûH£¢‡ G\,/+̀æ ñ©zåsË΂€‡@èÿäÈGï}ÍÁ6í‰}ư±£Oèă§Üûñ₫tÄ›³{~b,=ßXt¡QùJg˜çÎWË363´§~ç\ä¡+yFÁưăó÷ưeboÛjùVï£ÎxøˆSºqvÏ+ïPaÅ ï‹ÆẸ̈¾ưñî>xưÖïÎ'Oû¼oœ<ä+—ˆ$Đ5~ü„ñ7¼|ù¯_»¢Û ß&ú“ï=âø»¸¸×÷kjkÔ|ơæu]́ë?âNư{Io܇xÅô#çÑxd¸C ä¡‚ÆÇôƯÜ1̣*Ûjéơ‰ÓüØ)Ư;₫Îưµ÷wdôÁK½Xđ"đƯºu“%äÓ¤́Û×N|đ¼ fB×ø¦¦¦¶½mo.|ăk₫ÔîÇ~ù¾Ï ûÚÖÊ­S¦L:tèˆ#d"¼Y÷Æùt„¸–t*$y9TÙ̉¹4~OÛë^¼äÆA—]Ñḉ/ÜwøI÷₫Ù;ÿN÷³î¾çni™wDàe[4>Ụ̂Dü%ºÆg[‡–´wÄÍg øpèĐêB%̃¹4^Xd~àŒ~_}à„“ï>ú´{qbŸµëÖ®Nú°VM —È–@è?qâÄÉ“'Ë*̣Ó¦M›1c†,C'3ßÉB5̣‚+¼̀t«Våtlk€âw:ϧ@ H„®ñ¢î‹/̃¶m›LV/«Ï©…eå#KÍ̀Ë¢̣ååå7ńˆÚ4!}º²ÔEÎeC “%ä·nƯª™•††êb@ #„S/¤MÏd.p„®ñ̉8¿dÉ’1Ü«ªªDà•)ÿڬ͗?̣îù÷¼̃í¾æ,Ô¾sQÍ‘&:-pê4>,²4­¬\' Ûȼ÷t؇E•t‚]ă¥ë]J²èºØëRÏjóư‚‡Ç¬¨¨»đOư~xÛÓ—ßú˜Üa§­…yptà¿ưœcbÇEç¬=oÇŸờH‡¥ôb=Ÿxh7Đ5^Ö-[¶LèÅRß´i“üu¯ÏôÎ̀¥ÿî±Ko²Ö7Œœ­yñ)M®%}wv\eJÊ(Bí®2'Đ©5>øä9ÀÇ—®´Ó?}Êß¿8±×©ă9YÖ¢}ç¡Ä$’b”™:1 Đ5^FΫB+íọ́Â:xvÅù='œw߈ ₫̣êoÿçÅ¿ÿû¥7?tùo-ß̣£axˆµ$"L’*Q9UÙÔy5̃w²[ç»_èÍkZŸN‰¨ßzà³²­ \Ê.ˆ ÀB×xñ”[¾bùÛ‹_3đtYmù¬^Ÿûésüè¡!Í»Û.ºµ÷¥7?|ÙÍơî?Ê%ä×^n,¿BƠ¤JµHë9ét=ë®.UL÷YîƯÚŸæ=ÀsÑä¯É÷™æ=O”êAÜ)x¶KTc¸íÂüÓÏ=b§Öxi{Tù…« Y~̃Wă¥̃\±¦¦çœé ï?ơ•©½¿4é±/Œëy’XóÄ0Ê=C8© „¯ñ³?¸Ü57¼ưÉk†sÅÀ£¿ûÜ‘_ïm®¶\×Ô¿ øÊîÆ² ŒùßÔïx·"úª ¯‚z´wơ$Û5ơ¾oªûÊ;¬^yw—|Âö̃97ÊQ™÷>y1wFºE=•ÆëøÈy(\¢˜ „®ñ?~ùKW=úê¡Ç^9èè+|ÖYmùØo?ú£á×FơuƦ«Œ•åß5>8Ǩè—Ê2vWˆ¾Vu²<ûÊg*kÛ·ÂM£ĐÍö¨r²¢£ñù‘4®â!‡Ú¦Sk|k[›ØîMÍ­̣ ohj‘uè7UîđƠxEo”ßböÊ‹ÆKǼ_hú39* Û$/JëÑx_™×;“-û<”.QB×øË^8Q­¶|ðÿ´W[₫û±²Ư)ww5jn4OtcÑăêSÉsªÖ́ôëÛ±Jt=UdÀ+¦i6Hc÷g< Å‚@; ä¡ÚéÔ/¢¾¥ºn}E­üÎ×m©‘uèW¬«ôƠxét·Úêû™ó~¡f́UrTV®K¯ñ*S• ¢·Ư=Ÿ‡r_¢—]ăùê%ûîÓ«-³÷±_~¸ë)÷v=ûÁO×k.3Z—ó¾%¸RYêJµI­ q÷N­£¾ÑrĐø4WLniđƯăIÁ÷-Äưh©"´³çôNN Q§ÖxơE+6ÎY²N…Ù‹×Î]¼̃WăÅMN4~Æ“g˜_ÑĂ7lq±•¥i}5̃c»û¶̉»%?y;¥K9Đ5₫É‘̃9ú{µåÇ>ư¡ŸrïÇOøÓoÎîilø‰±ô|cÑ…Få+ázÆg¬ÖñÓiß;)Ûkÿ’Ba ä¡Âé¼/pƒûÇ‹¼h¼ 75~å¾aÅ ïËQY{̃·?̃mµ»øôºüf‡2Á%–@è?~Âø^¾üׯ]Ñí…oHưÉ÷qü]G\Üëû5µ5¢ëÂáÀÍÍÍÙÖƒÉvvV)$Í:AOK@VÉæÏ§'‡ª¦Sk|p¾â§'º?ø‘÷ưÛđ{̣çcd½ ²“>xi¢ ^¾[·n²ö|𔉠àB×ø¦¦¦¶½mo.|ăk₫ÔîÇ~ù¾Ï ûÚÖÊ­S¦L:tèˆ#d"¼–––àu1!à‚ÿös‰ÆB'S€É̀µ"̃̉Ÿ₫#q$f D‰, „®ñÁ+#bB¡ȲÈ%:”ȼXó«3}X«&(PâeO½’%A@öu@Ög ñY#ă_Àê˜KC ty¨IĐø<@æ‡z%K‚( pê…´© ñy€̀% 4¾€Ơ1—†@è©Đø°8Ê\¶2Ơ¬O#Ó×ÓïỦ N½’%A@đß~Î1±ăƒ¢s–·ăË́¶2~^â=Ÿxh74¾€Ơ1—†@èÚ]%dNÏ̀Hb8ï^„ÆÉïdnœ‰½NƠ®óbÜK!”"‘ =4>ôJ–!P@Ù×YŸÆBf®F#ëĐ´>O•¹qdUÙÍ›7J‘HÈ_Àê˜KC tÙ×YŸÆB&}đæ:45=eYOåj¦ö₫’Ls;®çIc{~^‚Xó%²$€Æ‡^É’  H Ë —èh| j2ÈîPå#_rí /_̣̉g.í{Ú¸å#‡ä?¿¦§lË́¶bÍ''ª'ÜV‡’¿ª¾GƯ"‘:4¾€Ơ1—†@ẹ̀Pi¡ñ Ïé»ùÆơo~íđO\1đÈ _èú­§ºî?¸ß\¢Æ {çÜ(Û2}}̣4¥e’Wu¯RĂÚ²²¤SFBăC¯dI$‡j yÀà‹~1ºëO‡~ơĐO\₫j×óûvƯ³¯uć¯Œ)¿Ḯ§·BÓÔŸ‰ÆËú4ÉkËÑx}%¶Ư‘:4¾€Ơ1—†@ẹ̀Po¡ñ _Ưç“×ùøUƒë6øÈ+ûjß¶mMgö:êÛhöÓ[¡f́U¢ñ²]û5>Đ=©ó@ăC¯dI$‡: ụ̀>Çî=°gâÚA¿₫Ù¨̃YqÎß:­Çá§Ü}¤QÑC…#.—fCÔxÖ”=&_Àê˜KC ty¨ºĐø@ó÷ư÷ºï?¸O₫[½:ăá#Né~ÄÙ=>c¬¼C…ƒ¾//KÈ'÷Çû²KƠŸ9Đ-©@ăC¯dI$‡J ù^¹cäU?:Ø´'öơ^Ÿ8ưÁ̉ư°ăïüØ_{GÙI¼4Ñ‹/ß­[7YB>P¢D‚@–ĐøVÇ\¡ȲÈ%:ˆÚ¶=×½xɃ.»¢ÏÙ_¸ïđ“î9ü³w₫îgƯ}ÏỬ2ï₫ˆÀË·%²$€Æ‡^É’  H Ë —èh|Pj"ógôûê'œ|÷ѧƯsü‹û¬]·vủ‡µj‚%^öĐøVÇ\¡ȾÈú 4>kdœB@ăC¯dI$‡Ïd.p ñ¬¹4B'N½64>¹Â!€Æ‡^É’  H œz‹£¬0+ ĐÉú42}=ưîaQ%àĐøVÇ\¡₫ÛÏ9&v|PtỊ̂vüYÏü‡ŒŸß³gOĐó‰v@ăC¯dI$Đî*!sZăû>ÿZrđeæ||‰6íñÓ§üư‹{:₫‘“eIÙw:AŒ{).é©3u]æRIŒĐøVÇ\¡ÈCU×y5^ÔƯ—¯ï~i¢7i}:!$ÿÖŸ•Ue7õŒÆç¡àvÎK ñ¡W²$ÈC=Ö©5₫#ç#¶µÚlÛ»ßWă¥̃\x¦¦çœé ï?ơ•©½¿4é±/Œëy’XóÄO“sØñy(ÖQ½_Àê˜KC ty¨©:µÆïÛ¿_‚èºè®ümnÙS[ßä«ñ2ÈîPå#_rí /_̣̉g.í{Ú¸å#‡äϤ²ưú]G‰5ŸœsîcƠQ½'ù«{*û䘾{̣PV¸DÁ  ñ¡W²$ÈC•̉©5~OÛ>Ïbí5ơ¾?ÿ¥ï>:æ׿yøµĂ?qÅÀ#/|¡ë·êºÿà~Y„F‡½sn”m™¾>yM·í®¶Ó́ч2Æ̀CùàEE/`ù¥!:~Ơ Ăº >̣Ê₫ŸÚw m[SÅ™½úö£'ưôV¨{•h¼,@Pă=¹\ăƯmûy("\¢x ñ¬¹4B'‡º¥Sk¼ˆú¢ç,Y§ẤÅkç.^ï«ñ—÷9VŸ¸vĐ/†E6d ùs₫vÔi=?åî#*lq±h¼¬0›­Æ{Úä3¶Ơëb5Ÿ‡_HQ]½’%A@ª—Ϋñ7¸üư¾±ÿà^Q÷ư÷‰À«÷Qg<|Ä)Ư8»ÇgŒ•w¨°bĐ÷Eăe ùä₫x÷(9·„»ÇÖ¥²ăÓÎËCáÅC/`ù¥!:<Ô-Zăƒó}ăƒWîyƠÁ6í‰}½×'Nđc§t?́ø;?ö×̃ß‘Av̉/MôbÁ‹ÀwëÖM–21!œz%K‚( à¿ưœc¢ñĐÉâñ×½xɃ.»¢ÏÙ_¸ïđ“î9ü³w₫îgƯ}ÏỬ2ï₫ˆÀË·%²$€Æ°:æ̉@–@.ÑÑø ÔDæÎè÷ƠN8ùî£O»çø'öY»níê¤kƠJ¼́  ñ¡W²$ȾÈú 4>kdœB@ă Xsi„N 5 ß±+¶T6t́ă‘z~  ñ¡W²$ÈCưÆgyñk_ÔaÓ¦M»wïÎxra^®ñ‰PBĐøVÇ\¡ÈCåƒÆ…,êî:÷åç̀™“QæÑø |‰€z%K‚( ?úöFAăE·âơwCvzB²qÆâK¤`ĐøVÇ\¡ö»oW,4>>Să[ú-O&„ÄS%΀Ÿó÷h| ¾D F½’%A@°ß}»b¡ñđ™_ß«ræ“mwÏ1½Í6|(ˆ/‘‚@ă Xsi„N Øï¾]±Đø@øL_ÓK₫®Ÿq›}Â6½dÏà‡ŃƯ»7+‘²$€Æ‡^É’  H Ë —èh| j¢î×v8äû×¼ú™K^:æ̉¾Ÿ·¼Ç!cđ¡C{ă=ôó~~`ß ¯ô8ñ®»îJÖx½’¬²́“¿ªú¯–1~rjîÆƒ@G¤!€Æ°:æ̉@*4>äùƒNï1üŒëß<́Ú៸b`× _èú­§ºî?¸ßhë«CíôkO½aÈŸIÖx%̃:¸¿j]×;}zÎU¯÷ß~@G¤!€Æ‡^É’  H ̣À¡ß¿~äa?qÄƠC?qù€®ç÷éºg_ëˆ_3ïÏ̉Oo†Ú^MS.sÿæ›oNn«wK²Û́Öû}_Ü*®í~_[ßs:v| L-ÁHh|«c. Đ ä¡BăA¾æùc~üúÇ~<¤k·ÁG^ÙÿSû´mkª8óÑ£¾ưÈ FƠfØ̣Àæw/’qơ¢ñ“'OöíO¥èöùäFûd ÷Ưă«ôH%B½’%A@*4>ä+ú#‹ÇO\;èĂÎ YB₫œ¿uZĂOùKWcÍm*È‚5ª¡~Ù²e©ÆÜ¥êqO¯âé[ï}»ôÎ@G¤!€Æ°:æ̉@*4>ä›ß¸rÿ½¢îûîÿÆß”%äO¾ç°¯üéhÑuTC½̀„ăÑxÏ»TcîRơÙ§Ÿœ8mơ2µ#¡ñ¡W²$ÈC%„Æ‚üÖ‡Cî}ÍÁ6í‰Ơë¨/=xÄÉƯǿ‡ư¾÷Íb¸ëôJ–!P@¹ÖYœ‡Æ…%2ÿÖâág₫ơ¤S»{ÆưŸsáPÙ“ñdæ¹ËˆˆÁ  ñ¬¹4B'ü·ŸsL4>gtNDăa"R0h|è•, B €‚ưîÛËÖø]M•@€"@à®;nR¯qo׫'C€ P ́¯ñ+—Î'@€ Pº̉i|Áû¹@€r# ¯&4₫ư’ừŒîgVD?Dú3;¢™"ªŸ¹ừ‹ôg>‡€¼ ñ%ù"Q‰Ÿi‰ÿ ¢?;ª/ÏQ‰Ÿi‰Ÿ‡Äkh|I ¼Ü4_oh|ɽ  ñ¥ø6gÏjPûđ,‰¯'`|MŸ…Æ£ñÅơ¶PÊüÑx4¾H^JQ¹ƒßs₫5> sîÏ*¾ÖøÎ Aă?úè#yq8xđ`]]ƯŒ3§û¾T<À}—2‡w7Áơ²c¢ñh<\ªsY2 έñÁă»5>Û³Ú«ñ±X́ơ÷×^ñàđ ï|ñÿûsŸágWTTL4©Hd>€V–j”đTµ¸R*Eå~Ïh<Æç¬ÜÁODăCk« ₫Âû†®Ø²ưxúâß>rÅõ·oß°aĂĐø~w(.eïn‚ëe)ÆDăÑx4>¸TçMă¥‰₫‚?½̣ƒÛ½è–Ç.ù̓—üæÙ3xđà ́qÇéà_Ơ‡ÜñƯûÓ\Ë-´êôöK¯û6tj{S ëê*ÔÂSƠâJ©•;ø=£ñh<Ÿ³r?±$4¾KÚj“Wmûh«×}đz¤ß˜é Dà•Æé›wë·GËƯ¬ñêhS<ïn§Æ»…6Ơ¶çÅ"ç+zD.¥EGăÑøàRs̀Èk¼z=p÷Í»÷¸ß ré—>ø×fm¼àÑçÿeĐ…·÷ưáï{_rÓCJà/»ùASá~eÔÜ`4JƠ7D¡“µÜ׬Ocħ×Èœ¥×÷¥!•É̃S/Z©ÎùÆĐx4ÏY¹ƒŸX*ŸjÖïTv¼nP)x¾¶Wă¥₫²G̃=ïî×.¼ă…̃úÄÅ7ÿU ü¥7=Ø»ÿ(ă£˜QûscËÿë~œªo>½áĐv׉¤ỏ×íóætßfv÷NƯ<ª…?Ù×—HƠxà{¾ZÜ#à9W·°»÷»wʶ>”ª9>ù\µÇ“¸;)÷ÑhåÏY>KâD4GăƒKuÎ1#¯ñn]÷¼§…?;^ ơóîyă‚»úưđOưåé×ëwÆ}óEàc×k/3–œ›ªo>\w7Ư»SNcëC©ÚÛSíO~3ĐåÁûŒ—KsƯäCZz•Öºå9Ơ¶[•3Æ×‚¤–̃—„Tç|“h<Æç¬ÜÁÓ ï‘yw“@vü•÷₫ÁmÏ\tK¯ºÆ]Fë+F́7F́×f¨ûFåOŒuWËÎ7Ê/ôêrÑJ™•Ö30̃3H>½ï\ǹ•å=z´̀ucÙñ¢ñ¿2j¯76ÿ±úbÙÑ·oßáÇ¿ưöÛ¾Ÿ~À¼o3¾Û‚̀8>ˆï\ƶñTÚŸÊë=M|÷)£ù:Ä'Ÿ›ƒÆ§²ï}÷gl-@ă³Ơ~4GăsVîà'–Ƨñ¢ñå;çVYs¦úØÍÆöŒ«=«Œ¥Hük¯½¼̃#ê!j¼nºOƠÖí̃ŸÑhŃ{o3¾ç•"UK@̣¹é›’̉3öµ{,̣äæwߌ«ÏVËSÅGăÑx4>¸Tç³€Ÿ~>ù̉›¯^úæƯcª_ë.7V\aÔ ’&ú‘#GÑøĐăˆ>ỷl¿|¸)ø¾xö^±#lèbH3,5-ÎtĐx4ÏY¹ƒŸˆÆ·k̀[GƯ}óéûàCWtÏtx¾ ơ2oÑRi|Æ>₫ä;,=îˆ{(Nmë®Đx4.Ơ9ÇDăCÓxwß¼tÏ¿ơÖ[iúà;Næ}^.—7ñx¡ô0­#ôµ̉ KM‹34GăsVîà'¢ñaj|Ç)wûSÎJ5K+r1èqGÜCqjsXw…Æ£ñh|p©Î9&Æ—– ûÜmGèk1¤–g:h<Æç¬ÜÁÒ¿ÆË`º€AÔW¼ÏFö̀WŸĂY¹̀eÛ~ó:o)”¼’§~€bĐ㸇âÔæ°î GăÑøàRs̀1‡O.çéëÂÆ×ơ€çw^­ƒü–Ó×0©̃$rçSEă“är<ŸRUÓy†›Ơå2ÖÎiß·üå³ÈêIÓGö½m½3 ¥ 6‡oÁpÓKU»¥™‘³»îđDN_­¤¯Î̉ƒ̣‰T7é{?i^\2>¬¦‡§ïóº3Èo<Ơ‹Hªt̉”·ô÷PN̉߯K¸oÏST2₫¬2&ª<'_4ăë]̣o'UéMU™‡?9SR©oÆ|ñ-çéKxẠ̀Ÿ1ặ¡ï.Uªñ©E>Ag¼VơJ₫møÖ©ê댗.ª©8¤ú%g¬Á“#dûCM?`RYU©t.È»‘»NϘN“ꆃß_ƒ¤™‘ƒ*<ÁŸ½Hâ§©’kÎôï é?#™¢ªHơÍXăÓ¿‚¹ß=¯™Ë´'ZqæAF©4^Ÿè›B‰–ÈTï†àV²Œ5W×Ç^‚Ͼƒk­BrÉ¿‹TÜră°P¥Ñ6ßj×WÚÓÿƃ§“Cæ¦z̀ô0“5/+©7H X¦yWĐ)d̀bù‚Ç^zbºK]ÆŸjÆÇ,ZqI¥ñrĂÉ=ô…é÷-|Ët eLª:×óâ™ñ¥5ca-Ú²˜æÑ̉ZOFWp̣Ô…Y½Đd,Û¡Ç÷ưú̃F̣“CÖgü [_×7é‘ù"Ơxw1̉%Ï·üyUfd,mAª€à/ăEớÁ«éT”Ü9ÛßvtVm¾¤̉’Ñ©ˆÑæ éI'UÊúËÊJăÓpđư‰ŸêƯ%[&A$Û4ƒäW²X&kjú÷›üÇOơ{̀Oúz8H¾[Ơ¬ñ;tË|ï[>̉́t—˜ôuSÚ_'â®Á‹*'|ï0Ơo)ưă$ÿÆêIÓÜŒû¹|Kó1U:Ó÷­ S]4Û_»o¾d¼Ơ vRw\wơçÑ­40ӔƀOZJ@çEđ’°x$¿¥¿„o|w¾äđ{̀ȧ=ù¾ôưzÊaªGödJú"³§̣»H_ƒ¥ù]gä́¾™Œ?Æ­Z=ï SË|»4¾T”†û„ Dƒ@₫ÆÜEƒO@(h|©ä÷ @ÈŸ/bC€J…_*9Å}B€²#€ÆgNj؀ R! /£åƒ‡Ü×+"Ü' @ D³³ 9®- ^< @ Tˆ`g°ăK%g¹O@è́”QđĂ8½¸đü€ PBsWB™Å­B€² €Æg‹¨€ "€Æ—Pfq«€ , ñYÀ"* @ „ ñ%”YÜ* @ h|°ˆ @(!h| e· @È‚Ÿ,¢B€Jˆ_B™Å­B€² €Æg‹¨€ "€Æ—Pfq«€ , ñYÀ"* @ „ ñ%”YÜ* @ h|°ˆ @(!h| e· @È‚Ÿ,¢B€Jˆ_B™Å­B€² €Æg‹¨€ " ?`Àààá®;n̉¯+—Ηea}º¨ÿÔa9V±¥J.!Ü* @ 2D‚³ h|drŸ (“[́í¬₫¢ñQ.< D†@¶/ñÑøÈä>@Q&•¯^Đø( €"C;>2YɃ@€`ÇS @Ñ$€Í|å© @Øñ”@€@4 `ÇG3_y*@€v•Æ76µJ@ă)N€ ""àÛV¯ïÏăM—Jă›vî–€ÆQ¾r+€ TưñB&Ù]>•ÆïܵGOq‚ PÆÜµ´´I@ă‹(_¹@€@(ߺ{Ÿ4â@("¡h|[Û> h|å+·@Eă÷î= §8A€ˆ€h¼Œ¤ |×Û·ï€4¾ˆ̣•[ ˆfg’×–M§ñY­NOd@€ K@Ö›Ϻ•Kç+oºưû?’àcÇ\—h€ ·Æ8pH‚Æg\‘€ !mÇûk¼&@€ P¢T[½Wăƒá#& @EK@4>aưøl‡đ€ ¢% F ØưñÅ3d€;RhŒU7ÄZŸx²ß€WGf ?ѯª&æî/|xÀd Đ©ty¥ÿ >}_zæÙ¾*<ơô?Ÿx̣ÙÇŸx†@€@Iøÿ¡9r4੼ÁIEND®B`‚rpyc-3.4.4/docs/tutorial/_static/symmetry.png000066400000000000000000000614551314203541000213230ustar00rootroot00000000000000‰PNG  IHDRYæÏî -sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<b«IDATx^í½́^Gß{ú´º) w Ư%¥ »́$¦·.—ëímSJë¶©i»̉º%Msk̉B.·¹á&̃¶6e›8MBp¾–«¯Ä*,‹GAù° ±@¥H–A1l),E⾿Ïç›Ï3™™sΜó̀™3gÎ;9Ï÷óz>óëü¹êÏÿåÿQ*@¨˜µÿÓ[+*@¨ sV ºä¯0P*@¨˜µƠ%¿É@¨ T`Ö T—¼ P*@¨À¬¨.y»7üđ™ŸüÿQ*0°04ÓiwëÍä©À¯,£Û4À:B° T€ ¬ Í´AÚ»*0´–Ñ) «ºÄh“C×Ó§P`a–K¤Ư±UP¡°ŒnÓ«K~Ûh“C×Ó§¯²piƒ´;¶ *0´ :à«.y‡7Đ&‡®¦O^eá̉iwlT`h,tÀG­;Ó§ XfI²µP¡¨cáïT—xmrèú`úTàU¿pi€´;¶ *0´ :Ô«.ù]o M]LŸ ¼ÊÂ¥ ̉îØ*¨ÀĐ ,X耯ºä o M]LŸ ¼ÊÂ¥ ̉îØ*¨ÀĐ ,X耯ºä̃@›º>˜>x•…K¤Ư±UP¡X°Đ_ơßå ´É¡ëƒéSM6H»c« C+°ÁB|Ơ~Ïh“C×Gxú_?ơÜîCߨ^w™̃"̃sô‘đD3O6̀̉°AÚ]ƠÄR•¤€et›X]úno MfR÷`-’{%“̉²]Ø0KĂiw]d|*ĐUËè6 °ºô=̃@›́ªïpñ]̣í{ôq\Ä¿ĂeÊ”Ó(°0Ë¥ ̉î̉ÈÎ\欀et›X]ú^o MæÓV’yß9÷‹^û©||%Y˜å̉iws¨t>㸠XF·i€dḵ’{=ó3€Đœ• )㬨Y¸¢€¼ tU …WV—zŸvƠwÅø@Ñí¾&4Bø̀{à¥I. ÙZMƒh¸"·ă^,·1˃øXhƒ¯;^£!;ƒ[̀‰IqÅÚ ¿}a–K¤Ư…K×;&&LC[úfR v³ºyï°Aј¦…êçí;oƠd;¥Ùû¹xc –Ñm`uéû¼6(k”h*X …A)ùÓËBïj¬A"(Íø²ôTă˜8Lă}F‘«¤Df¹´AÚƯĐ•+¶&†&c!°ëGa«éoG@Ñ;øơNsh˜¾et›X]ú~o M&k1€–˜ÓÁg~,™Â{ĂJ5ÑÖu¤â#ª3§¥¤ƒoMÁë}&S`Î-̀riƒ´»¡ƒÚŒ»ˆơI¦Ívdb6 àფ©9¸®¶Ü/Í¡E˜yú–Ñm Y8z³Đߘu%i%™Z£x“ƒ9`k dáXÍ€,L¬¼ˆŒ£˜¹÷°#Ǘ‰}©/h.@ë—fbMæ–] ¯ª.ơ₫>MÖ>Z'[I¶z da²ê¶2Z˜å̉iwCW„¢K­F}¸v$¥U¾bDf§©‡ÖL‡d†é[F·i€Ơ¥W{m2YQC̉1+ëV¦è-vk da²êö±piƒ´»¡KÏÄ.ÔëaGRZ™ƒDÀs€ÔÂd m&P`æY,X耯ºt‹7Đ&“5Q0çÛ‘;~cJZI¦)è/Ü®4% “U·…K¤Ư ]°&Y8ƒ gV¸ó…áv$éÀT«ÖƯ¶9´LÁB|Ơ?à ´É”-F'ô(X£Nøµ²¦(?iu%*&BL²¶¦€‡ƠiKçIùøsÎkĂ, ¤Ư Ư`V0iᲬL-¥‡ii~ÑvµÍ¡`ú–Ñm`ơ?ÿUo M¦l1²íO‰,)cúÖ½‚¢b|Uvb óx63¾üh5¯è.(¤ °nO©Ă óÚ0KĂiwC·Ư#(¿­Á˜;2Ư¸Ç3éjmu:ơAz§9´³Mß2ºM¬~íñÚäl <¥fiØ í.¥ø̀k XF·i€Ơ¯ư5o Mγ•đ©+°0Ë¥ ̉îëḮf¨€et›XưÚ_÷Úä ›9½ ³\Ú í.}0ǹ)`Ư¦V¿öAo Mέ}đyGQ`a–K¤ƯR ̀tV XF·i€dá¬67ÈÂÜj„å)^¾éC•/đ÷iñ ‚˜ƒfi í.‡JaÊVÀ2ºM¬.û°7Đ&Ën |ºLØ0KĂiw™Ô ‹Q°–Ñm`ơæÿƠ\›| —ø +(#²º˜ ³4lĐ²;Ư bóV*°©€ew–Ñm`ơæxƒËB₫b-ø‡-^³2 Đ@£KS/̀¥l\³̣P¯zóÿæ daÙƒO75,\Ú Y8J½0Ó²đ±Đ_ơæzYXvăàÓ¢@ —6HR/̀´l|,tÀW½ù÷²°́ÆÁ§E.m,¥^˜iÙ øX耯zóVo Ën|ºQ¨aá̉ÉÂQê…™–­€…øª7ÿ¾7…e7>Ư( Ô°piƒdá(ơÂLËVÀÇB|Ơ_ú̃@–Ư8øt£(àg¡aƒdá(ơÂLËVÀĂB|Ơ_ú?¼¡7 ơ•°áâZï÷ºçè#ÑïÅ :Ô«~ăc̃ÎB©K5 Ë\Ñ­ûUZCë½ ‡^’…™4âÂág¡aƒá,Ëî¬|Ư ©xfꟹqzø…á= ~ƯÖ5›Xhfç’²y¥BkV˜ Œ̣8ºà«~ăïxCW6··×ÅïªTkKjf!̀ÁM”2´¦Üµ¨ŒOjX¸´Á®,LowÍvÙ²fc1.oá,lhf£°°¹Ù³ŸIĐ-øX耯zËǽ!œ…2¤®8QgË;Fê}́UZCë½̃Cʉñzï°mÈ8~‚*d…)àg¡aƒá,Ëî4_uw`,ºîĹQ¦çň¢ø…!;z÷ ¿}%MYñ‡'²ú77GóJ³V*×ß mæºà«̣̃w½!œ…Úâ­n2ù́á×ÙwưKà"R¤x¯w:°uí ×w Ư:ç™~ —6άΛ¯­,§ôv^›EL½·y5\”¤¹7Đb›½µïĐŒ£vA®4k¥¿È›·2s̃ê}……øª·ü=og¡T¹nKÖf6qs%4(ˆßw: È3¯á÷º;¬=ÖŸû~ØFWo£sK¡†…K gáXv‡|±BD Û1§̀mJ‚@Úµ® ̉“¸½AkO¢ëñAWÇà®V6kÅ~&™ùûX耯zË6oèÄÂdÔ/#;ÓO7̃].m° £o ví †Ó$dÔw¸Üg•²…øª·ü}o(‰…¨u4»N£¯ÁŸ•©${Ø.m,LPzƒáʃ‰ừp̣)ûX耯ºüxCa,L£8s¡Í øYhØ YÈ&D¢+àa¡ ¾ệk½,Œ^L Ô°piƒd! ˆ®€…øªËÿ‘7…Ñëƒ R.m,d#¡Ñđ±Đ_ơ—·{Y½>˜ đ³Đ°A²„ DWÀĂB|Ơ[?á daôú`‚TÀÏBĂÉB6*] ]đ‘…Ñug‚T N²mƒ ¤W …ÿ¸z«'Đ/L_à±xjX¸4@ú…Å·>`z|,t¨W½ơŸxĂX('G¤¯˜Aś÷Pr¤$N ’·1ZÂ9'^ĂÂ¥ ’…ÍÍĂí ÓbaƯïD „ø3„Rá~a×ß§!ơ*¿Iº²0$ñº8úfz„«ÈØzo —68!vm¥£û…u¶ȪæhbÃé·6Fè­€…øª·ưso˜: CV3›mC:Ç&×… îWG-GjṬB¦­ơ½›…{£‚Đus#æÂ¤ @ —68 ök¥ XXg³Í¿n¥`:¯!Vïθ7ÏÖ­‘á|a†ïc¡¾êmÿẬg¡kZæ$¼»vFÍÑ•&b*Úú­=Lê\Jú ùêWZ÷JCËè½*aÅÖæzω·m­X₫ Ư^ĂÂ¥ æÏ±Zi³½7Øl«UºûkeúĐjWÍSø̉™¸Ă*\GƒyúX耯zÛo˜: Qæ tîđ-¿ÄNÜ,t5>èú—¡Yh­V·₫®I¹,´“‡Ëzn)×°piƒù³p¬VÚ̀B4¤:›me!î…+Mñ€uÓî₫BmÀ̃zî/̀ÄÀ},tÀ7]f¢2‹AÂ(€…á[^L÷Ü™æg ™©)O¥ Ÿ(…ÿ²z›'äïf¨8‹D¨aá̉ó÷ g^ÅÀ[à†H™O»9sÅrx| êUoÿW̃@æP…,Ca øYhØ YXXóqrPÀĂB|daUÅ2̀D²p&ÍÇ̀J0₫Ög*_ _˜U]²0e(àg¡a€ô ˨h>EV xXèR¯ú­ë½,̀ª.Y˜2¨aá̉ÉÂ2*O‘•>:à«~û_{Y˜U]²0e(àg¡aƒdaͧÈJ ]đU¿}ƒ7…YƠ% S†5,\Ú YXFEó)²RÀÇB|Ơ;₫7…YƠ% S†~6H–QÑ|¬đ°Đ_ơ½,̀ª.Y˜2¨aá̉ÉÂ2*O‘•>:à«̃ñzY˜U]²0e(PĂÂ¥ ’…Ím¬è˜ ‘`ï¼µ×~ߣë¹tøl–1½o®HPNfa*àc¡¾êÿÖÈB6&*].m,lÖÜ:ƒ;ñ!̣îl÷}Ä:ÎWôx[t ê— …øªẃô²°Ÿè¼‹ 4(PĂÂ¥ ’…ÍígÜwºgsKyp´7­‡øë#đlîLz đUïø¬7…™Ô"‹Q’5,\Ú`æ, yçĂ@ơå}ư¡ơêÍÚ|±”~Ækjd0H3½7Ühék.àzâ-N®Çé}¥¨$h²Đzñ!ßÙ4P{蔬…øªß¹ÉÈÂNZ32QÀÏBĂ fáị̈]…Ö`¦¾˜ ‡Ï V…zßåk½'éX¯0ä»|Ćbè8ºà# ‡®¦OT©³‚å!`œ$y(yĂ­åfyk|EJuc¤Ío®—oơÍơÖ`¦x„( (¹ ¦ëz³neaC™iÉdá¿«~Çè&«'f4jX¸4À̀ưB©) Bùœ¬Wa¡YH3ù¬ ¬{oÖâ,ỆQù•ྤiÜ9ÎdU“sF>:Ô«~çỵ̈²0çªeÙ&ª@ —68 _…N_zk#A]ƠŒî6³°µEy‘f] ‰Ó#DWÀÇB|Ơï̃́ daôú`‚TÀÏBĂ'ÁBÔ£®4 w °Pæê0E'+V¤É5 JÁtUR°–Àà¢w¾P&1P,wɳs¾0«÷°ĐY˜CU± 3Q êz“@§pơúuQjîy·öê*Äi]û*¸²‚ụ̂z™Ơ7̣D ]½Ư„ëHW¯úƠSc៫|~áêÀ¨€¥€Ÿ…†NÅ/ÄsÁ w Wo Í,4]Uø¬º:&„…¸ñ•¦đ-àiáƯư…æf Ühû W¯÷()xXèR¯ºâo £Ô¡¦5,\ÚàTX(3…268Ÿà;Óǘ:à# 3¬9©T¦ÎÂRë…ÏU¶,ü¿«wzư²ŸnjX¸4À̀ưÂQDc¦T`E|,t¨W½ó ̃@®¨>o§®5,\Ú YÈfC¢+àc¡¾ê]ÿ7…Ñëƒ R? $ ÙH¨@t<,tÁW½ëß{Y½>˜ ¨aá̉ÉB6*] đ‘…Ñug‚T N²mƒ ¤W …·Uị̈„Ä~aï£Üå\‰Ä⻬ܬ›¿UT́[rç1êA‘8Cߤƒ˜¸+k¦Ó[. p~á(6Û»Êxc øXèP¯ú½ÿצÂẪ]¥‚GgaƯùÖ©ŒzDÏ¿X¥º#̃ëg¡aƒs`á(6±½IđC+¼JúºàË„…½ŸsD»jÎzĐ‚¹ç"€u™̣\Ä̃ ,îdaC++uâÔµ÷ÄÏR^v,¼½ú=Oô ƠC̉Ăm14‡sßUMÓ…B,‹ù́:K¯ằC¤)/C©»Q¢û•†J5ƠE©Pfó a·¨€S%B?Ă˜VÊ­ZIÄ)´ö¾ÇDåyù9Xx —˜¿_ØÚJ[¸e³¬ÛuÈ•†|[û檗îE{I­Sg̉đ­oÏÈ¡¹S êUï¾Ưº²Đză‰ÂĂlÁâÍX¯øje¡•²2ÀíưĂ›¯¾qÆJÜ‹pÄñ*؃…EEP)ô…Ú­ZIñ¼ïQke!ߣ–ƒaûYhØà´XèZtx _……V¾̃Æï₫^¬k†¥`]W!tơ É”öèa¡ ¾êƯ_ô†@ê"¥…ôÔÖJ E|¯̃–$ơ›ú3…®MPî•ù34Gårñ¾€FF¢ø…Ö¼×Ăë§•¯S¶HæUĂÂ¥ æÏB³¥¡½ỸÂC ÊmÏuÖ̉W44?5Á”÷%…­µ~R¢T̃ơ¡JÖæĐí%–>:à«̃ưÿyCW*T¼đ¶̉đ†—6“¯ å.-³«8©üöÔ_ !¦Û i×fꬽ«Vda,³4.mpZ,t[ix 1¨p먋^›úṼº—ºIƠù£,D‚ÊB#‘|/0c†+àc¡¾X,\‘X£°°NJü4sM:Ät#²°¡đO¿0Ü:Ô«̃}§7te¡ơK¿w¤Đî0‚‰É†s˲LC •pæ½Z0+M‰£ß6¯Ri₫Ö]Y€”Ơµ̉Fà̉h½—ëHûYQÜ»jX¸´ÁüYØÜ̉[¸ˆYg³ÖîXµM1½†|ûºªeíŒF×ñÑ)Œkkfj>:à«̃s§7teaÈ *̃ö­Ô lß°=]ƯiÚY ŒaœæÀ̉³”ư!YˆG6Wœƒ‚øU¨“.­<ÓÚu÷6ßËư…Ă™Y§”ư,4lpê,lná¢UƒÍª“„ºVnhZ{*¬?ë…́ºôÔ4g:…:÷‹æa¡ ¾ê=»¼¡+ û‘wơS îÜ™æq˜ºE¼ưÊÀ»z(PĂÂ¥ æÏÂOÍ[™Â†µrTou|,tÀ·" Mw¤÷Ï¢Ơu†)à‡s¸àˆéƯ"9CƯÆ}d²p\ưóÉ=|(Ÿ2O·$,üĂê=è’…Óm,yzjX¸4@ú…é+e”É”²ûXèP¯zïđ†@¦|æE¦®€Ÿ…† ’…S¯b–?C<,tÁGfXs,R© …¥Ö,Ÿ+gYø«÷zưœ«–e›¨5,\ ư‰Ö,‹³>:Ô«®ü̃@æ\µ,ÛDđ³Đ°A²p¢5Ëb笀‡….øª+ÿ“7…9W-Ë6QjX¸´A²p¢5Ëb笀…øª+w{Y˜sƠ²lU †…K$ 'Z³,vÎ øXè€,̀¹ Y¶Â «P>Î$dáêJOpö\âT€ ¬ ŒÈê;˜i€–ƯÑèV›·RM,»³ŒnÓ«+¿ä . 'Á’ LK…Y.mv7­êci§¨€et›HN±.Yæb ‹©J>ÈT¨cá®®ô₫>J½²œ“V`a–K¤ƯMº6YøI(`Ư¦zAˆ‹´ÉIT* 9uÈÂ©× Ë?9êXøåêJO 'WÁ,đX˜å̉iwS¬D–yZ XF·i€^â"mrZµË̉NT²p¢ÇbOW²Đ^Î>ƯºdÉ‹Q€,,¦*ù SQ …T]é ô §R¯,ç¤X˜å̉iw“®M~ XF·i€Ơû₫‹7Đ&'Q©,äÔØ0KĂiwS¯P–?,£Û4@²°Gͽ´yÿ—B¨Ư£¦r Y8•b9‹Q€,ŒÖ¥.°ÆJh—¡1“…V ‹T¶u,¼«zŸ'p¬¦¡5…©((?8gá̉Ë~ز{X>ƯTX°Đ¡„¸H›$ Ó¯ÁÏ& KV`*(ËYŒu,¼»zŸ'…d!Y˜Àøf¹4@Ú]Í™Å̀°ŒnÓ«÷ßí ´I²,LĐel˜¥aƒ´»3‹™+`Ư¦Vïßë ´I²,LĐe,̀riƒ´»3‹™+`Ư¦’…=×ΤÅdɳedaä-T`êXxOơ~OàïSú…i7ăµ3†̉îVéăx/Q`ÁB‡z^â"m’,$ ĆjÅ8–ỶîVÔ“·SVÈÂhCm#M‹Éh×j$é#…é5g3W€,ŒÖ¥ÂÂ/̃ñ‰êu—IpQÔüm,tƯµ÷ÓÈÈJíܹ»÷¸^ văÎ9ú9‰€˜¸#ëh—a@fX),RÙ Ô°đªÿZùÇjr#…O=};hçâ €THăök?"ü@⮕qX: ¤Ư•Ư óérP`ƒ….ơ¼ ÄEÚdn,¢Ôù…!ß®È$@¹ỵ̈ü½V:uEBL+äN–¬@#Ë0+ÈÂhJï1RàA‡áN:µ[½( âÏư‚:ˆ†±G—ưXhcZ)›î&'NsjÄ)|øĐN³Hæ½êƒ¨ˆĂ5ŒVq¼e–ü a±H…)PÇÂ{««<6Ư/iĵ²‚̉ÅB °……¡•/₫T÷Î̀T£™„–2#ïN,D|Üå}.nbñ,\ í®°n—“¡ :Ôó‚i“ÑY(!Ø£‚ÛäRÑEï™~¡5oçơđÏuÓ{ ùö(RÎà=†Ỷî2́:Y¤Â £¹ưÆH…î|›‚c¤â™©Å/t=Q—^råGḮª£Y8Pw`™%Y8ÎL– ¨5,¼ú¾Êh“ÑưÂfÿ St ç¨NX8 Ü5²p ®dĂ, ¤Ư ¤3“¥¯a¡K=/q‘6…23‡qQu 1† yæP™“i¶ÆH½ÀkFlƯ|aëâUζv@da«DŒ@â*`Ư&ÉÂ*÷#U™®º]N¿m^±Ùü­»vF†a…dî½înzDĂđ©€¼yíŒu/ב¶¶.²°U"F q¨cáưƠƠ@¿0º_œ9óeƯ™ø™h±ä+\WjFa!̣5÷T€‚XM£Sƒ,D"î₫Âæ{¹¿0Ä€f¹4@Ú]ˆhŒCVQÀ2ºMô‚i“C°°ăúɆW7ŒđUƯ¹3uÅsgB̀•, Q‰q¨@DÈ‘בN„RxàÍ;‚ê}4Ä\yg¡ ?ZÅE4§XI‘…±”d:T P:~¥ºÚÊî€%«‹Öo¾°ôųpi€´»m“·SV,t¨ç!.̉&9F:ùÜá_²°dZ{.F q £u(ơ OŸ]{ñÂ+35ZÅŵ¨(©YfÉß QTe"T Ù™¡_§W ÿÇéµ­7¬UØ W]·¶~äÁ•ù”’©qj-Ï̃,̀³^Xª‚¨ñ ·|¥̣₫>-cŒôácK *ñaÇ®ư/_LɳỤ*…†̉î î‚ùh™(°ÁB—z^â"m²Â#ü ̣³8¼ç¡Uø”̣^²°d2éYŒù(@FëP¦2Fú?_ B°˜üù )‘Ö;¯h—¡µ[fÉß Ö‹T˜u,| Úâ ´ÉüÂ7nmb!pø§OôæSÊ‹gá̉iw…u»|œ X°Đ¡„¸H›l¨ÂWaæÿưü…—̀ Bïçơ#Ïf₫(ÔÎĐœbÉ2KÚ],a™¨S€,,¹KơÖz+ ï:~3®dá¸ú3÷*PǯV[<¿O h"Wîøf3_¸XÀcNúf¹4@ÚƯ¤k“…Ÿ„–Ñm „¸H›œD¥6ríÄÙnÛơXÏ8ơG §^ƒ,ÿä g7F6úÉ»Ÿ¬Ăá¶®–“kÇ…˜,,¬Bù8ù+@Α…h—{=÷¦k₫X‰øúؾç{¡\¹âºĂˆđäÅẈoÁE–,,²ZùP9+@Δ…̉(Ÿ~^ ‘³đçÁS/˜³‰@#¹~̣ùœ[p‘e# ‹¬V>TÎ …³f¡·i×Üö]sợm1¬ RæÜ”K*YXRṃY&¡YHú8öÂKŸ]ÿ!(hBĂªX\ƒáS®5Ô¼ÉÂAåeâTÀU …ûª-Àu¤3lCpáZP 1ºă₫ïc3"¨9CY}ä…Y. v7¨ÚLœ @Ëè6 Đ B\¤MιÑđ½Ûß¾ưüÅÛÿ„ă¨QZȬXøR₫§•RBH¥}™YÈÆÑY b˜Ëj€@wo–¤~ø¦oß°vâ¾'~J—±_¯1+.@“̣$Û9çƠÙØû5à)̃E²q¬¤h'\Ä6 ïE ®nưü1A£¬VehU€,$‡Q€ÖW«YÈÆḾGÄT`~¡nU´ ¯ñ7| PEdnaôr‘,†söåÙ£{ëï¹ÉE Ù8†R^ VÖ€_AJ¬ME,Ă¹óȳ #W¨ºÓøewa#M₫¡Œ}rä«YGꬭ¶<è eÛdƠ™ó#`4¨Ăꬲi>\|GD“‘Ơ ·ø‰º´Á²í,$ sè¸,£Û4@²0‡º)¾ 8ơ¨đ0¡X7Ưh@ÊÔ£Œ¯<ûH&ÄìNé6Ï:N YX<‡rxÀ¯Ÿzn÷¡oT¯»L sߣÿưú/ư7\Á„"Èçnjt—ç`-« ±ªYÀâU²,F²,ä¤qf x„…î¹=‹2¸*S­ï_^Ê4¤́î@cW§2IC‚Y¹€̃‡% ÉẦHƒ[6z,8l-›̀>b¹ 8‡ÓS›—çX̃$ÜM“Ø"¤lÍ4Y²,F²,$ óS`Öa “ˆ ¬_?‹q^_́%%î’dn2ñö²pĐ/$ ÉÂüH̀ÉÈ6£!XØđ°̣‚*x æ“!S’,1H+÷bRSx ô /cMUĂB́½å¡“Ͳ ´ôܹ»÷¸^ÚØ;?~äèçóơ®½Ÿ₫âŸĐLÍ)ư¬ß"&J;| ÉB²,F£g~vû¯}ôÚO‰yæ=ß9÷ ̉¾GÇùjûÎ[ÙdUb6ÿ&˜ )å¸Đ®uuk»)+ztgˆ¤©ƒ±­3—ŰP¦{±»¿êˆ8 "?Û®ưÈđ¤YúO=};r7ñÖ̀BÁ6î¸d!Y8 ²u¹̉́£À€B (Jî  –‰â¾UfËÂfÅô¥Ç²„Göí°H'|ÖSM˜½síÄF̀W·ŸÔÂWILëâq@Dèæ._ˆ…̉äFKí +Đ‹Üy₫^ÓóS7×Å[ƠoåÊđÀ& ÉB²0¶Ø!ƯÍÁg~,ƯßcçÏĂùñùæ½à+u]Đ»RÆ- ×WÏEy)+zp\€đ²Ó̉@²ÂgƠÄñGÂJ¦L7T¼̃7e¢x̣\.£³Èq0á~e"J©©ß₫è™]•ÀÉ\´tè®ç©S»]€‰Søđ¡u$FúnÄ̃5$ »²pÑjƯPöù«÷†³JA?½O (b€T¿ Ăkưäó 'E—NalWƠtˆÉ®ÑdÿIH³:99ÿ4>cQN£Í…J•j¡8|V°˜'Ă³Àd { ¢ñq÷éË’…,t©WgKdaxW|̀@^£øˆ&:F¸67æ ³|yqè¹9¬Ç Ƽï̉ê Èñ…ˆxº!zÿº1R÷ºyE>ƒU2¼yæ̀—ÍoÅ#„û¨ƒŸˆéú…uYëcÓi ÊW­7®,YHÆ!LÜ9f˜®—1˘å„_ˆ82dJvªA‹…Q~ƒb¢Îª|v±êú|̃ qÍ8Å-(Ct¿°™+!,4‘ă’̉e˜…¨f¤5L ’…̀$ndËè6Û0ư¸*™Ÿ† d4`ÖPç Ơ4Y¨ó‹. }Í"ơ4j+&SÍw•¥H“ca«sÖŒ4™,ôî  Gl¥d! ú+€IA±^”QÓ±Êfưé(ç$‚×Y$ æïÑ(~ሽ \RƯljGL—Zào¥KÍc¤Ø}ˆ41E'Swũ¤ù­,®ÑTIÁ\*‰4ÏÖ­‘á|áˆMT~“yœ@ú…ăÖÊTrçà*1ªPÄéD°ÑBQe"ËŸ=ùà½2¢—³0¿›5Ñ¥€‚ØkèjƯ/tב{̃­}‡ÚGoÔøÖÁ•̀Ä……̃e¢Öd¡ÀØ \GƯ:%Hö÷: ÍÈT \’Xˆ]öØ[â¥à@c¤Í,~tS>èê˜Êj¥)<ºî₫Bs‡‹Oî/ ·b’…d!ÈNbXˆ³fZ_3Ư/́1 ư÷Ü™æ,xî̀@„ O–,̀® ¯<Æ,UbXRAE²P¼O×ÿ«#"b¼³PÆcÙƯqO˜datG ’…Í¿̀ẹ̀‡ÈN²èF́zÈÈA8d!ÈN²pđư…Ù5ơ4œ É…,dă Ù)@æÉÂ/¬­yđƒ;öË®³Ư´öđ±iñ5»¦B©4qÈB6*da†,¯ºÎóÆñå‹S!bvM= çBr! Ù8¨@v …²PƯA÷(à0Ăû”]S¡T8d!ÈN²07´î²ó,ŒƠ2 N‡,$ éFk±zé²ô’qNÀ H«[áb.u‘Ù>¼"ùÜZ cµ̀‚Ó! £ơƒô éÆê)̣g!̃ít`ÀnϬ¾[̃¾ WF;±Ï¯ëV÷£g~vû¯}ôÚO Ø>sÇïœû… ¾ïÑÇqE¾Ú¾óVD6ë‚,ŒƠ2 N‡,$ éFk±zLX({dV{ؼ†%-Ö ×ˆ‰%0‚½Ơ¾{>„9@Q₫ÁAA,Å|«8$ cµÆ™¤CFëé̉/ŒƠk¤d!@¥À“•,!c›J>,{A|÷"ø‹±DĐt°ÿAwđ™ËÅÇΟ‡óâóÍ{ÀWêº. w¥Œ7Zô’3Á )@–ÆÂsçî̃àz1ơw~üÈÑÏyu×̃OñOèWæ*sư¬ß"&̉L‹ºVoµ¥â†è”“vDb(Rçđ€+œC&î]Ȧy€ n‘áM¼çHđ™L üôæ(b€T¿" “ƠKa‘…¥±3Á¶íÚ¸ {êéÛÇÄ[3 ®¸+'ÖVÎÜ‚³²ó,[ca¡œ@fr úđMßÔƠíL÷NăÉEYÀ©N†F‘x2úpđÅG”À1̉l›w# Kc¡tÍĐ ç—çï5=?uq]|JưV®x±:=‡î[vªM÷Et2EwüÄYZw¾:tÙiổ»WA§ñN¡]J¯_'¨ëèÅ2fRđ G†LÉÂ~"ó.²°f®{g„ ·Ä)|øĐÎ:Œưè™]nÄÏ̀5|MÅa¿î×F/Ÿ‰aËø¤¬"AÙ$èXeë~»ON¿Â«hÅ¥S¯nB¨k­,9> AÈhÀ¬¡Îª#h²Pç]@ú­ec„b gÇBD=ujw { ¢ñq÷çZ3ˆ›̉˜‹ñ¹Ơ81îg"ªî³‰.e˜~ĐÑH…€­q¶. ‡{’;¥̀“m­&3&…^:5(#¢¦#4b•ÍúÓ?PÎI¯³Hv̉‘ÉÂrX(”j#m€ÑQk50å´˜üH¸Ä¿~ºÅtà@S%«.HáàM†̀Ρ{2]@8…JD ‡*ñA46ZÈ ªlÀ@dùÓ,ñ^™•˜|X¯d!Yø«aj°¢)YøÔÉç{,éM8u₫̀²®̉ &̉Äu뺣\¬”,dM+@’…¯a¡LzwPdÅB4\˜ F ­S¾0k¨zµ„f;ÆH&î™ gÇÂæùº52ÙÎ uá !ó_ÙÚï…­1ˆ«YX Ưu¤î"R cz—‰êđ¦LbĂ¾5à™ù:RX…n¨À>¹vÅ­b¨dá*êñ^*ĐC²pv,äÜư…̃†“Û_e¥x+¶¢÷°‡Ln! 3©c> …å°0|é{îLó½Ó:wÖ‹+x…Ât͘,œnƯ±äU€,œ# A>àÍ;‚ê…"bæ´³PûD«¸ M—,̀°RX¤² £u©|OE¸c#f´ËĐÂÉ +…E*[²0Z—JÆ \ëë)4B´ËĐÂÉ +…E*[²0Z—J’…±: ²0–’L‡ *@Η…/_\[?̣àkk_Z_;}6Ü!Ë$f´ 4•”ÑÈ”j3/*ÈÂh]ê´üÂÿÚ·n¼µNĂÇnZ{ñB&œ )F´Ë°# 3¬©lÈÂh]ê„X¸c×~ïÉœW]7!F«¸ -œ,̀°RX¤² £u©Saá¾Ă¯q-(₫Ám!>Yq¢U\†NfX),RÙ …Ѻԩ°Î_Ăë₫‡Ö~₫B¨k-C´ËĐÂÉ +…E*[²0Z—:¶¾·èác­Ê!B´ËĐÂÉ +…E*[²0Z—úʆùÿ×ÊÂơ#ÏæÿP»`Ë$ ®\>Z …%w©̃6‡×84ăđ¾'~gcO©ÈÂùÔ5Ÿ4ÈÂÙ±đ“w?ÙÀB¼,₫É‹¯d̉:g[ ²p¶UÏK²pv,<|úE¼đ¶‡·°XƯƒƠ–}ƠƠ÷WW!Ü[½oU·à±©à¬Àém‡̣öí‡̀&?1vƠ7³’"åĂ’…)Ơf^T`Ó/ü¬@²qX ȺS¸†fÛ¸|ÛAx>̃ZÈÂè’2A*Đ>_H²•„+̣aúĐ:È bûô9‚®dCL²0ŒL„ „+°atK̃S½è†+8Û˜€"œBkøTöc€‹Yå jï¶Aö–7R~ ¼ÊÂW)HöÓqÎwa• ơôíÈÔÄ`l–ŸM< ¶q×À…$ ÉB²ĐPàë§“±DñóÄÙ’€Ï<8Xˆ¦×MKgătfNiZ»̃[—àzÏÑGpËcçÏk¾·øZ+®¼,D û}¼ÁklMv•21é²ukëDØzĂ·LjÊi&±i²ÈcbWŒ{HÂ@,”F20ZjB ¹ỵ̈ü½Z)Ï™3_Æük1“›,$ ÉÂW0q¥„ ÈŸiÔ…&½r/ZWê²3¯ƒˆÈ]3mÅ¡›)hº}ç­̣u^ă*¨[ư^ñ,0d* ,ç‘à¾Ö#„‘VËÔde‰¬dK‰̉œàƒ2HiQH́„13ÎBŒ7Z₫”áJưJe^ÑÏ?zf— fiÖà* ¥C¯p=OÚízœâ>|h§IbIĐd!®˜x×,$ ÉÂW0Gá™!âê“( £b  ë²CÖ­­#{#đ‰e59³0¦8X`cûă‰³&çn^l£”¾̀§MƯ[4ßæàº]÷O“÷øŒ²Ë3CZ(Uª„âđYẠ́>ex˜4¯c₫̉¼ŸqÅŒ€ø¸ ÷éË’…d!Yh(ॠ¨×uđC©+²°ÁQ‹ÈB·{ÊÓ; $bà|¡œWg¹›!9…À ‰!Bb £¨/_|eˆ̃ß„´Æ*Ị́͘đ“áMk0S± S̀Kid»|+ëk̀¯pQp¨‘&öHMê²3;)†yE7HÔù¦fäÿ5®Ù ZI,„#hm¢°ÔK̀BđI7Eàƒ® a¡¬¦QÂ#´€§đs÷›1Üsg¸¿ph›jMŸ,œ [Û#Œ®@1,Ä>ÂÖ×cEga÷Y´øgv»çÎ4—çÎäft\;C4Rñ(†…!\‘,ïÓ>­#"b¼³Px?~Ûi£Ä¡_ÈÆA²S€,̀Á·+± Ù5ơQ°çÍ”,dă Ù)@–È¡ø#±ƯUÊ®©“…¬*@BÀ({h«Ô1̉î JK]¨Ñq¾m… Œ¯ưÂ,A²ọ̈ŵ/­¯]uƯÆ!ăܱæYÔRß¶óqƯờƒëÎ,û÷i¶•Ä‚ÍM²0CÀœ>»ö®í›4{Hñç/L…ˆd!ưB. ¢ÓQ€,̀…[ođ€P ø±›ÈÂÉS–kg&_…só™æđ¼dan,|øX-‡úÄ$pÈî~át|‚9ôơ|ÆfÈÂÜX¸c×₫æ·PƯ|7Y8mĐ̉/œvư*E*03^\,%Íú¿«®;ǛÂƯôí¬`³p/Ofà₫B6*0 fÅÂIt;éÛÍ,ı«“x²Nú…ÓèÙ‚g¥Y˜[uï¸ÿûÍ,¼å¡“¹•™åé¤YHŔ ;ơb "ăñ7l]¯Ă!̃ÎØzy‚B2‹U ³ëW©Ñ[†da†ơxÛáŸÔ±đ¾'~aY¤N …d!ÈN²°S/–,2^ÄháđíÛ­8›¬̀h8ÈẤúÁá*›)OE²0Ăºëøé×èXˆe2Ÿ]ÿ!(øäÅW2,*‹ÔC²,¤Ù)@öè˽åÎ#ÏGxù¶ƒ˜;4/&>davưà(퀙f¥Y˜Ou`Q Aá×>röB>ecI"*@’…T ;Ȉ}Ü*I­Ÿ| €đ7|‹‹EW3ó{ÉẤúÁ̀[ ‹—@²0ÈÍY{Û÷|OWÊܰvbô"±ƒ*@’…T ;ÈÂA{½ÖıL[u‚+E[+ Y˜]?X@«â#¬¨Y¸¢€½o1)(ĪQ7Ă•¢½ÅœÖd!YH²S€,Lßb¥¨R Üúùc‡O¿˜¾̀q,ÈẤúÁ±óÍG²0Y]`^;uDTÖÈpP4™₫ùdD’…T ;ÈÂ]$Öˆb³„lŸ—€—Q‚ ”Ï3 ²0»~0φÂR¥T€,Nm8‚8Yg§)C@‘#¢Ăi>‰”ÉB² d§Y8Dï¹çØs×Üö]ó@Q́Ä)Ï‘BíÉ¥If×N® ±ÀÑ #JaO¸}Ö—E¾\"¢È$E’…T ;ÈÂƠûV ›åÍE1rˆHé®.oy)…Ùơƒå52>QWÈ®i|x{.1ƒc8#Ø[Ơ9ÜH’…T ;ÈÂN/Έ·‡æ¢Py§̃8xđÔ Rcäy*@f×γ!̣©MÈÂÖö€å 8#¨3W„ʺ\![dK²,¤Ù)@z{j‡†!Pœ‹våoZï—‡G¿̃¡÷J_?ơÜîCߨ^w™&ë^!f®Y˜]?8óÉLJd¡6ƒ₫ÉZ ±yE(¨A’u¯°ƠQ²,¤Ù)0sÂ·Ăø§×ÿ“Y@¬ÁfÁđ· Z,4qHPQ€,ŒÖ¾´P“ÿ¥QjlĂsc!œ?lÀROŒsZ» ôÅIØ#ˆă³û½V,,ØXb=Y­K]0`!•Ñ*.–-ELg,Ạ̈NLïpæÛ!̀Y@@;âgơ½daÄÆYjRda´.•,LEAùÁ­â2´í"Yøa`#Ÿx„µ̣E߈¯àb€ÔƯồÏn?đµ^û)ÛgîØós¿ĐºÛ÷èă¸"_mßy+"›ƠJfØÈs+Y­K% ÉÂXæ] eØó–‡Nbn¯~@ V„"?›¿{>„9@Q₫ÁAA,Å|«8$ cµÆ™¤C’…×VqúY˜ÁŸƒW‡7ay‹×ó“Íù#Ăß„ưB¸ƒÏüX*ë±óçáüø|ó̃đ•:‚® è])ă–aK`‘’)@FëRé̉/Œe·ù³kX3¼ä»ÚáöY¾˜ Ä·đü~p{H¤ƒŸ̃{E êWda…y  ÉBú…ÑÚ@¬>%7c˜ê“uî>wkÁ üB™ó[}Í‹èèĂÁkQÇHcµÆ™¤CFëé̉/ŒƠkŒÈBËáóîp°Ü>¬…ƒ^†oøë$”®—1˘)À/D2% ;iËȪYH̉/ŒÖbơ, X(k[pb |8ç¬ÛÛ äĂ, ¢a!¨ x&{󑟆 d4`ÖPç Ơ4Y¨ó‹\G«eœY­¤_H¿0VO—…à–́dG̀9Íí pød´sưäó±­_:˜éÔ Œˆ ĐˆU6ëOÿ@É'¼Îbà¸k¿̣̉®)*@’…ô £µX]@W“‡€é —́ákØÉ`Íđ!&ÖvâFÜ>ÜPç*â€sp •ˆU(⃀ -dU6` ²ü©ØÓyD÷Ê*eă½e(@Fë3ñ Ï»{ÿëÅÚoÜùñ#G?çu×îÚûé/̃ñ ó«?{ô ˆ/wá³ùb"Í´n_+¡›*® ÂtMÔËB8gº†E<<„†Ư Ö®†7l]G|,~Á½2ÈkmËtufÉ©ç £!Đ”2ZræÏ̃m×~Ä-ƠSOß8&̃€LëDz Q+îÊá_-ƒ¿@̀{a)ă´ŒsoâØÉrÍ;×NÔíÏk½ÇWæÉ’–ÑG8§U,í< _ ™ø…‚´fhˆóËó÷j4¹ë̀™/ă ₫µAL\ñbu<:Ú‡N_fÂà* ´ ±GßK ‡€ÓUd̉óp]½:Ø®ÛeëđIàơ¨̃BLÈÂrXˆ‘LË·ĂŸÖ@(Đ%NáÇv“ÑQ“…¸bF@ǜ\ĂeÅ:7†Mß¹A&ƠtfNh$ë054lyE‰G÷ Y(ƒ¨§Ní6Q‡YFq%à3®˜×qïx 5ƒ¸ÁB`ÏZ!×PøL†Å‚YđÄ¥“£X¤„p…sæÛˆº®Y±ẹ́v*@è–ă ¥ZÇH½ZY’rJL₫đÔ Xâf ûĐM”ô•qK x?C׆,́ªăS É ‚³(ËGñ¯×l¥lJ¾|ñ,† _E Ñëo–+‰}èÊ3ưf&’,\±_ăíT «d!Yèñ&½ØË…:\1F“ˆ`[¿ »ZΠñÉÂAåeâTÀU€,œ ½ó…2Yø£gvÁ·“©AkƠhó…Ú ADLÅÉp(¦â¦nêdáÔk埜da9,t×θ‹H:Ï]G*ËDÍ`m·Ïy©Zl.1|:9S4 LNºúXø)*@Î…À¡»¿;ÍÓj,Nb¡ID́½›ô²p)Ë–LæS,ÉL çÈBxó z¡ˆ˜9í,”†Ñ*.CS' 3¬©lÈÂh]êè{íĂưÂ"bF«¸ -œ,̀°RX¤² £u©daZÄF«¸ -œ,̀°RX¤² £u©d!Y«³ c)Ét¨@ dáLYøâ…µ›ï^ûàógß¾mmÇ®ưÇO´¾20«Ñ*.ĐTRF# SªÍ¼¨ £u©̣ ÿäøÚ·nlK·ÂkYÑ®¹0Ñ*.Ă€,̀°RX¤² £u©Saáé³~ ×<˜v¨³7}£U\†NfX),RÙ …Ѻԩ°Ă¡ ¯nøkÖ^¾Ø›O)oŒVqZ8Y˜a¥°He+@FëR§ÂB̀6¿Æh"‡Ñ*.C ' 3¬©lÈÂh]ê+ f₫ßÏ_x©ơ}~x‹zæOâAí‚-“,,¸rùhy*@–Ü¥zÛ\+ ñÚ<ë|JEΧ®ù¤™(@Î…ún£:(9{!“Ö9Ûb…³­z>øX …³c!^lÔàâ]¸cµEæ« …l T ±dá́Xˆ†WƠá_¿p1q+dv–d!›H¬Y8G¢‘}̣î'-êØé¶®ï¸ÿûÇ^x)q[dvô Ù¨ÀX …3e!æï<̣́ k'>»₫CyÛ>¼₫C”‘[?ŒëhF±Lú…£ÈÎLç¬Y8_zÛ=ÜAĐ®¡Ÿ·íz ³Œs¶“ÄÏN&œÙQ²,ô(đäÅWà2^¹ă›æ8ª@"'‡î8È¡fúTÀ7IïœÉU·°&Jg¥ÀáÓ/ÂMt·a`¹)®¯8;+5’=,Y˜LjfDD £Ụ̂ Í>²íĂRPÄl¢å)J;.̃÷ÄOé/Æj6da,%™T`Á¯’…ôwCđ0LÁ̉7]óÇîo&xÛ÷|ă«²‡¡Ÿ³đ¥üÏ÷+¨„P»_ œá]d!ÛJà,̃vø'Xnj®µQ@bI*\FlÏÀºÄœ¡uơ~ä‚Y¸MÊ÷™̀<¯₫ÖƯ»ơNôF²m% ÜA8…ug¼ ±¯øäDcsA’—‘ˆcƯÅ[§b“…l+ñÀ2TĐó‹p/ßv°nú_É\#]×O>ߩᖙ,ŒD‚™;…xüøÖ]ªé-X¸ó…l1*€)FA#f½«o´ư 1¬zËC'qËlϾ! ÉÂH h×…A‘û ÙVFP+k0‰ÇŸ¶¾7ăë‹û(€œĂÔ#Y‰ô G°î‰2’,d[ÉB@NèxÍmßùZ_²‚Ế£ls,l’,$ #)…uO‚d!ÛJ¦ `€„ĂBĐó!€AʼnÄÜ…µzí§º„Æ·H) \¼±¶.|ƠØa)éè,àa‚ùN…P:á_—ˆda3c#|zÖƯÛ`W¼‘,d[™˜àœô^>v₫üÍ{ÀW»}1W4æÛ±ÓQx)‹]uCÈ꼴ȺuÁN— È'¨÷©Faü`u¯±Ø\ÊÈB¸GZË¿<ï]{??ưœ‚äܹ»÷¸^âà₫Ô¯̀{%Â;?.ßêWnd+î²̣Ơ{ồ.$ˆÛ®ưˆY¤fÈÉ-VIôO½×e¡æ«C¾î•ú¬'fƯƒl§ƒ7mïl±J˜uƒŸù1 WÇB| Gáë§ËGF@)%ÈDÀÎHÅ[¿QÙpOTbÊn+àˆ-RÈ—»uWi³„ ⑳P)=XäHăƒtú Ÿ^Ô¯€.—g«°ĐÊ×E¬$₫đ¡!#±†å^wF“,Ërẹ́wSài­2ê¸z+‘ˆ—…àŸ\Ï „]YvU?qÖɯû&M˜uZ+Û•CÄÇßÓg/„CâhE?ơôíæ]âêE|p™T7Øè^¯»bfa–đî9óåº\¼Ïˆn%‚Yà:Ê*,ÿ́Ñ/˜…‘ÛĂ\̉ÖƯµ­Ÿ,d[ Uà號„0ÂÑmÀËB)HG/̃êè=_ßËuÔt×ôütúÓu­+¡ßôOŸîÊBtưÖ-Ú¬f´ƠYX—oH.uÏ(8´ÈƯÊB¤†ÑTø©Â`ù&c¨u¯̃h§Y8ǶÏI&ƠÄÏgK> T°đÄt°đ§Ơï ²Ä” ·›q4ͺ́W¬pÁ-˜äÓ|o?đµV£rY¨«i0LÚz{₫z³0‡G[c¤  ́µ#5ư0·ÓOĂº|Wd!0†P7²Z‡pñA1o*>"₫% ă¶v²pv,4û%œ´*ù\Q´˜8ôzcîÅ:ٙő»fÚC7SA;øÛñœ̃÷èăq­%Yj“f!T‚{ª«máe;£°Đ#ơRÁ„ Qu•\—µ6§NíVG-„p.¨êĐƠ0FL½ƒºÍøÇ·ºV(Ø)ä;›:tïK£Ụ̂Ơêª{ª÷î®̃}Gŵ3Éz½ô™ë0Aí;o¿Pפ˜è¥%́Ǻ́u+GëÄi½”8u'ÍBœo/pÅ=î°¡¹̀Ä];ƒº¶!ë65( eIª$ư†|W[Ïi/a•„¬Q¬b€T–ó;…daG^¹§z÷¯ dazD¥̀ÑK5@Q¯ëà§9ưÖ…æÀ©ơŒ­HëÍB ºJâx¨”ÂÆÊk̉,Ä’Ql\q¯}3 e)©é'á³5½‡’(h-317cèú—¡Yhí©°₫Tà5ïµ—ñƠ°ÑQ9® bµ̃‰¦³atñ'Y8Ñê ,v ƠZÑåå\8áÂc¶–DáỨÅê3z´é²H_ ̉iŒ´K§_₫Ñ£2Sè®èiT‰, U€, Ujô₫1b¼,TœÀ©̣æHĐpÂ…Çle¡̀"…ÛÉI‘…]ßê"“…Q*YH.W6ϱ…°°Ó,`Dj¾øĂĐ1̉Öe8Q¬(z"Óơ [¥ ÉÂÖF2J²,ÜTü×ÿ Q°°ÓÜn¡«@S×—êNY¥¢kAM/Í ÑÀñUË*52̉Íe®²öÇ\„ú¶Œ–,́ ƯQ`ư[?«$ g×V̀MÖ!2 ‡6bƠ‰µ'ßÊúó+\êE¤‰=BS„º́̀…|R óJƯ3‹XXJ(›&ë{û™JÊ»ÈB²-’³ëßzÛ)YȶB²S€,ŒD‚ j₫äøÚ]û·̃°ö±›ÖîyhíôÙi&|º́ÚvoV }ă‚…»́Àu¤CëÎô©@ƒdaBZÔ²íç/¬}pÇ~«3|ăÖ5Đ1‡â…•, U€, U}7H¦YÖÑȤ—/z@¨\üÓ'̀:ê³³ U€, U*Y?ÈŒ¨Y•}¸ơ¥ơ]Ơ…wm_,G/d@Ø¿…*@†*Å $S€, èå‡E‘;:jqq"®!û·P6Œî=hÎ&ëơ˜p(˜…¯,6æÿ_뛪Ö<›ÿS@mÚW d!Û ÈN‚YØ1íơ:ĐŒC¼”jôB²X²đ½ÿ©zßUWí­®¾Ÿç‘f×9F¬r&•¿dáèuôöí‡YØ|́êèågº*°atWƯ[mÙ÷zçiWŸ DT€,Œ(f¿¤nyèd /ßv°_²¼+[,£Û¬}²0Û cÁæ Y˜C-_¹ă›̃çë'ŸÏ¡„,CDÈB‡Ŕ #öq½“Â+ƯYĂ7]óÇw?Ư;M̃˜­davư`¶m…K¦Y˜L꺌î{â§oغ¿8ܾç{¸á[ø§O^|eô²±C(@’…T ;ÈÂ!:»À4A»÷_FGC@1đFF›´davưà¤Û E²0Œ=ÁD ® Å.í¡áDo! ÉB*daú₫ôÈÙ [?LËlÛơØñ Óƒ9¥Y˜]?8VS`¾ù(@¦¬ PäS Âä¸hJư3É‹,$ ©@v …iúG ^sÛw•‚˜Äi2\“FüÜr! ³ësk",OzÈÂA5íî<̣¬¹};%nX;ÁAÑAeÏË^ö{´Ă*Ó â+Îv•tnñÉẤúÁ¹5A>¯«YØ*àça"Đ}¡Bq|(§ed4(@’…T ;Ȇ̃Yø‡Ă²Ư*˜ Ä4!;w*ĐU²0»~°k2~y …fbx¦½/ļ \@Œ‚rw`y†̣‰ÈÂh,|iáeó¿4 @í”v’8/²¾¶ĂrÖ*Pñ1Y@DÀf‰ÄUẮJU€,ŒÖ¥.°ÆJh—¡mÏ…đêdđóĂ7}[^h,Á@́‹çh†-¶€"‘…ѺT²0åG´ËĐŒçÀB¸txA¼ÀÏZü©Äø'ü?̣/Ă&Z^‘ÈÂh]*YHÆê d!ü9̀êaÚË^¼Ÿ¼;ߘ äü_¬æÄtB ɉëF«¸;I§â`ŒybU'æü¼k>ÅùƒG¿đƒÈÉ¿Ä͌ٙ …ѺTú…ô cu.“c!0&³}̉l à‡aO¼21Ÿ_¬ĂtVW€,$ éFk«¤¤`˜åƒƠ–}¹Mâ³@̣á@#\Ă[:‰[xøK¬Ât¢+@Fëé̉/ŒeŸf¹å«Ơ–ª-_©®₫ʈ,À0u7N†:­W=XK=e¶114'}₫ơÑ3?û̀{ª×]†€ß9÷ ³r¿~ê¹í;oÅWøŸcƠ;ÓQ²,¤_­ IJä ¿²’°è…µ-:ÎY·¼Å| <È÷É»ŸŸ¯¤OàM(῭ÓÊ=ø̀qưö_Ăü‹Ï¸«ê™ÎX …ÑúAú…ô c™ñp,\?ù<¸…] êêysq÷ö{˜ ”E.Åv„_ˆÚ́!|ôÚOiåâ3®Hük}« 0Ä …d!ưÂhm –ơ®ÈB™Ïñ,@ü6`,xÂ?¬moO–·€±*< H́ ¿qˆ˜ÂBơüÖŸ₫\ѼäO\"w¦™L²0Z?˜­_(¶ÚĂiûâŸ@èqc’[*0Àp_2+Q3 åˆuïä jïqeî.r‘ƠƠ“AÎLÎs§%WtU{$ÂƯ¼÷s²PE]"ZôyK> …da­_Ø¢#²Ä’}tôÓ]²&?qv±pæ«ƠöaéÅF,ˬc›÷º8y8º ¼à¥|™-fƯ@´"ñóvú†v|ø,ÀĂh¤¹öD—«èDn‘˜&̀™„³ĐJùáC;Ư”sf¡EA஡ *÷³́–sƒ́ŸsCƯ±ÑưÜ8½K¦ëtSʃ²IOŸ½xOEHgÑ5×Ă“myt¼Ñœlëç6nEbdƠL¡.µ|ût­&ÆÈÂ|Y,‰áÁáD‰ç·ÿÀơ¦§¥ÆùÔÓ·{=0‰`}%?8”ø ®§Í{ă0N^絬 …é ®H¦o/Mˆªg.|MæëH3éƯ©f•6đ®p…ǬÓMÉ2`9²\;“I«ë] ²p,\!àC±0ÚYG©ºLm¾’ QŒ/\iZ÷ƒ×ANÎsƒ,3qV¥.f8ƠúYfÁ,T_₫–WœlY(󋺠F ¯c°ÜSѯ©çsY8®H¬"Y(Ç’aw¸ecbŒ4ëê]’‚Y¨ó…ugµ„°°Ó,`W¿„æü¥.¢‘µ3:d*,—j8@Ú»©çs#Y8ê4>Àđ¬=­#™QXˆØ̀–Ï,+k&±2S‰:æc`ưJR0 q ñ¯Đ•¹ƯBת ¦®/Ơ‘I!¨®5‡+½ơÎ#ÖŔʒ≨›ájUk(eælưZx†w‘…`¡®|ÀÜ^Ư “æÊMA"èWß½‚h²ÄTC ÍíùuŸ# ´Úgç„ehláE*€…æ¦@ËmÂOƯ±¥4&f ¾Ơc¯ơ+\j|¤‰=BS˜9±'×Í,Å0¯˜§Œjí˜ÅĂ-(ªæbâgs‡·çIÄ$ 'ÀÂ=báqYˆ«ÂHPĐÜqѳY(ö&DÄóüw4t°pƯ IT²p,ŒäHu^«™w¾M"½ËpĐN„,T^&N\ÈÂ|Yhrf|.èXˆVqö  qÛƒ²Pˆ Pá £u1ÑÏæ& Óh7œuơNya–ûtCYØ[ĨH £u©ÑY˜÷åXî æ­âM%e4Ë,É”â3¯y*@FëRÉ´đVqZ>Y˜a¥°He+@FëRÉB²0VgAÆR’éP@ÈB²pôÑÎ~ˆVq¦’2Y˜RmæE Y­K¥_H¿0VŸBÆR’éP@ÈB²°Ÿ[6ú]Ñ*.ĐTRF# SªÍ¼¨ư˜ư)ưBú…±ú²0–’L‡ *@¿0_YÀÿ¥Qj6ñ)F# §Xk,ó¤ KîR'Ư4ç\x²pεÏgE²,¤Ù)@̉2Ó9+@f×ι9̣ÙE²- $V€,$ ©@v …‰ûAfGÈẤúA6J*@² PÄ …d!ÈN²0q?È́¨Y˜]?ÈFIÈB¶*X²,¤Ù)@&î™ ³ëÙ(©YÈ6@+@’…T ;ÈÂÄư ³£davư % Ù¨@bÈB² d§Y˜¸dvT€,̀®d£¤d!ÛH¬YHŔ ÷ƒ̀ …Ùơƒl”T€,d ‰ ÉB*daâ~ÙQ²0»~’ …lT ±d!YH²S€,LÜ2;*@fײQR²m€ $V€,$ ©@v …‰ûAfGº±đÅ qÿ£T`P`hƠÖ4¼2hfLœ P_ưÊ2ºMë3ퟩ@¶¬UËđ`µeè°$GŸ̉àÉ₫öă”pđ1k|>µĂ'-K8Æ6¥₫¥¬úK§<úåư₫Ö’…ó©»)RpAÄt r>OD¶]*°ª)X˜Ä²èÇ#ᄾ`µ9Ÿv;ư']µdƒ£Ă²pú6ÚB¦HÁHe•h>O\² ¬ªÀP,Ln £ơÈ‘ˆ²QCOÖé R±G“}> ŒOÚ®Àÿ‰íÉ`ûDà*IEND®B`‚rpyc-3.4.4/docs/tutorial/tut1.rst000066400000000000000000000056051314203541000167200ustar00rootroot00000000000000.. _tut1: Part1: Introduction to *Classic RPyC* ===================================== We'll kick-start the tutorial with what is known as *classic-style* RPyC, i.e., the methodology of RPyC 2.60. Since RPyC 3 is a complete redesign of the library, there are some minor changes, but if you were familiar with RPyC 2.60, you'll feel right at home. And even if you were not -- we'll make sure you feel at home in a moment ;) Running a Server ---------------- Let's start with the basics: running a server. In this tutorial we'll run both the server and the client on the same machine (the ``localhost``). The classic server can be started using:: $ python bin/rpyc_classic.py INFO:SLAVE/18812:server started on [0.0.0.0]:18812 On windows, the server can be started by double-clicking the script file. The first (and only) line shows the parameters this server is running with: ``SLAVE`` indicates the ``SlaveService`` (you'll learn more about :ref:`services ` later on), ``tid`` is the thread ID (``tid`` if server is threaded, ``pid`` if it is forking), and ``0.0.0.0:18812`` is the address on which the server binds. Running a Client ---------------- The next step is running a client which connects to the server. The code needed to create a connection to the server is quite simple, you'd agree :: import rpyc conn = rpyc.classic.connect("localhost") .. note:: Of course you will need to change ``localhost`` to reflect the name of your RPyC host. If your server is not running on the default port (``TCP 18812``), you'll have to pass the ``port =`` parameter to :func:`~rpyc.utils.classic.connect`. The ``modules`` Namespace ------------------------- That's about it, you are now connected to the server and ready to control it: say hello to ``modules``! The ``modules`` property of connection objects exposes the server's module-space, i.e., it lets you access remote modules with ease. Here's how:: # dot notation mod1 = conn.modules.sys # access the sys module on the server # bracket notation mod2 = conn.modules["xml.dom.minidom"] # access the xml.dom.minidom module on the server .. note:: There are two ways to access remote modules, the more intuitive but limited *dotted notation* and the more powerful and explicit *bracket notation*. The dotted notation is works only with top-level modules or packages, but should you require access to deeper level modules (e.g., ``xml.dom.minidom``), use the bracket notation. Throughout this tutorial, we'll normally only require the dotted notation. And now for a short demo: .. figure:: _static/running-classic-client.png :align: center A sample client The first section in the above screenshot prints the current working directory of my interpreter. Nothing fancy here. But as you can see, two lines below, I'm invoking ``os.getcwd()`` on the server... It's that simple! Continue to :ref:`part 2 `... rpyc-3.4.4/docs/tutorial/tut2.rst000066400000000000000000000146541314203541000167250ustar00rootroot00000000000000.. _tut2: Part 2: Code Samples ==================== In this part, we'll dive deeper into the classic mode by analyzing some more code samples. Setup ----- Creating a connection and accessing modules :: >>> import rpyc >>> conn = rpyc.classic.connect("localhost") >>> conn >>> conn.modules >>> conn.modules.sys >>> conn.modules.os >>> conn.modules.telnetlib >>> conn.modules["xml.dom.minidom"] Basic usage ----------- Working with remote objects :: >>> conn.modules.sys.path ['D:\\projects\\rpyc\\servers', 'd:\\projects', .....] >>> conn.modules.sys.path.append("regina victoria") >>> conn.modules.sys.path ['D:\\projects\\rpyc\\servers', 'd:\\projects', ....., 'regina victoria'] >>> conn.modules.sys.stdout ', mode 'w' at 0x0098F068> >>> conn.modules.sys.stdout.write("hello world\n") # 'hello world' is printed on the server >>> conn.modules.os.path.abspath("lalala") 'D:\\eclipse\\lalala' [[/code]] Experimenting with remote objects: [[code type="python"]] >>> conn.modules.sys.path[0] 'D:\\projects\\rpyc\\servers' >>> conn.modules.sys.path[1] 'd:\\projects' >>> conn.modules.sys.path[3:6] ['C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win'] >>> len(conn.modules.sys.path) 12 >>> for i in conn.modules.sys.path: ... print i ... D:\projects\rpyc\servers d:\projects C:\WINDOWS\system32\python25.zip C:\Python25\DLLs C:\Python25\lib C:\Python25\lib\plat-win C:\Python25\lib\lib-tk C:\Python25 C:\Python25\lib\site-packages C:\Python25\lib\site-packages\gtk-2.0 C:\Python25\lib\site-packages\wx-2.8-msw-unicode regina victoria Introspection ------------- So far everything seemed normal. Now it's time to get our hands dirty and figure out what exactly are these magical objects... :: >>> type(conn.modules.sys.path) >>> type(conn.modules.sys.stdout) >>> type(conn.modules.os.listdir) >>> type(conn.modules.os.path.abspath) Voila, **netrefs** (*network references*, also known as *transparent object proxies*) are special objects that delegate everything done on them locally to the corresponding remote objects. Netrefs may not be real lists of functions or modules, but they "do their best" to look and feel like the objects they point to... in fact, they even fool python's introspection mechanisms! :: >>> isinstance(conn.modules.sys.path, list) True >>> import inspect >>> inspect.isbuiltin(conn.modules.os.listdir) True >>> inspect.isfunction(conn.modules.os.path.abspath) True >>> inspect.ismethod(conn.modules.os.path.abspath) False >>> inspect.ismethod(conn.modules.sys.stdout.write) True >>> dir(conn.modules.sys.path) ['____conn__', '____oid__', '__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] Exceptions ---------- But things are not always bright, and exceptions must be dealt with. When a client makes a request that fails (an exception is raised on the server side), the exception propagates transparently to the client. Have a look at this snippet:: >>> conn.modules.sys.path[300] # there are only 12 elements in the list... ======= Remote traceback ======= Traceback (most recent call last): File "D:\projects\rpyc\core\protocol.py", line 164, in _dispatch_request res = self._handlers[handler](self, *args) File "D:\projects\rpyc\core\protocol.py", line 321, in _handle_callattr return attr(*args, **dict(kwargs)) IndexError: list index out of range ======= Local exception ======== Traceback (most recent call last): File "", line 1, in File "D:\projects\rpyc\core\netref.py", line 86, in method return self.____sync_req__(consts.HANDLE_CALLATTR, name, args, kwargs) File "D:\projects\rpyc\core\netref.py", line 53, in ____sync_req__ return self.____conn__.sync_request(handler, self.____oid__, *args) File "D:\projects\rpyc\core\protocol.py", line 224, in sync_request self.serve() File "D:\projects\rpyc\core\protocol.py", line 196, in serve self._serve(msg, seq, args) File "D:\projects\rpyc\core\protocol.py", line 189, in _serve self._dispatch_exception(seq, args) File "D:\projects\rpyc\core\protocol.py", line 182, in _dispatch_exception raise obj IndexError: list index out of range >>> As you can see, we get two tracebacks: the remote one, showing what went wrong on the server, and a local one, showing what we did to cause it. Misc ---- Aside from the very useful ``.modules`` attribute of ``conn``, classic RPyC provides some more useful entry points: * ``builtins`` - the ``__builtin__`` module (short for ``conn.modules.__builin__``) * ``eval(expr : str)`` - evaluates the expression on the server (a remote ``eval`` function) * ``execute(code : str)`` - executes the code on the server (a remote ``exec`` statement) * ``namespace`` - a per-connection ``dict`` in which code is executed and evaluated ( (by the ``execute`` and ``eval`` methods) Here are some examples :: >>> remlist = conn.builtin.range(50) >>> conn.execute("print 'world'") # 'world' is printed on the server >>> conn.execute("x = 7") # a variable named 'x' is defined on the server >>> conn.namespace["x"] 7 >>> conn.eval("x + 6") # this code is evaluated on the server 13 Continue to :ref:`part 3 `... rpyc-3.4.4/docs/tutorial/tut3.rst000066400000000000000000000151251314203541000167200ustar00rootroot00000000000000.. _tut3: Part 3: Services and *New Style* RPyC ===================================== So far we have covered the features of classic RPyC. However, the new model of RPyC programming (starting with RPyC 3.00), is based on *services*. As you might have noticed in the classic mode, the client basically gets full control over the server, which is why we (used to) call RPyC servers *slaves*. Luckily, this is no longer the case. The new model is *service oriented*: services provide a way to expose a well-defined set of capabilities to the other party, which makes RPyC a generic RPC platform. In fact, the *classic RPyC* that you've seen so far, is simply "yet another" service. Services are quite simple really. To prove that, the ``SlaveService`` (the service that implements classic RPyC) is only 30 lines long, including comments ;). Basically, a service has the following boilerplate:: import rpyc class MyService(rpyc.Service): def on_connect(self): # code that runs when a connection is created # (to init the serivce, if needed) pass def on_disconnect(self): # code that runs when the connection has already closed # (to finalize the service, if needed) pass def exposed_get_answer(self): # this is an exposed method return 42 def get_question(self): # while this method is not exposed return "what is the airspeed velocity of an unladen swallow?" As you can see, apart from the special initialization/finalization methods, you are free to define the class like any other class. Unlike regular classes, however, you can choose which attributes will be exposed to the other party: if the name starts with ``exposed_``, the attribute will be remotely accessible, otherwise it is only locally accessible. In this example, clients will be able to call ``get_answer``, but not ``get_question``, as we'll see in a moment. .. note:: The server creates a ``Service`` object for every instance. This means that instance variables are not shared between different clients. If you do need shared state, you have to use globals or subclass the ``Server`` class to pass additional variables to new ``Service`` objects. To expose your service to the world, however, you will need to start a server. There are many ways to do that, but the simplest is :: # ... continuing the code snippet from above ... if __name__ == "__main__": from rpyc.utils.server import ThreadedServer t = ThreadedServer(MyService, port = 18861) t.start() To the remote party, the service is exposed as the root object of the connection, e.g., ``conn.root``. Now you know all you need to understand this short demo: >>> import rpyc >>> c = rpyc.connect("localhost", 18861) >>> c.root # this is the "root object", i.e., the service that is exposed to this client <__main__.MyService object at 0x834e1ac> >>> >>> c.root.get_answer > >>> c.root.get_answer() 42 >>> c.root.exposed_get_answer() # it can be accessed with the 'exposed_' prefix as well 42 >>> c.root.get_question() # but "get_question" is not exposed! ======= Remote traceback ======= ... File "/home/tomer/workspace/rpyc/core/protocol.py", line 298, in sync_request raise obj AttributeError: cannot access 'get_question' But Wait, There's More! ----------------------- All services have a //name//, which is normally the name of the class, minus the ``"Service"`` suffix. In our case, the service name is ``"MY"`` (service names are case-insensitive). If you wish to define a custom name, or multiple names (aliases), you can do so by setting the ``ALIASES`` list. The first alias is considered to be the "formal name", while the rest are aliases:: class SomeOtherService(rpyc.Service): ALIASES = ["floop", "bloop"] ... In the original code snippet, this is what the client gets:: >>> c.root.get_service_name() 'MY' >>> c.root.get_service_aliases() ('MY',) The reason services have names is for the **service registry**: normally, a server will broadcast its details to a nearby :ref:`registry server ` for discovery. To use service discovery, a make sure you start the ``registry_server.py`` that comes in the ``rpyc/scripts`` directory. This server listens on a broadcast UDP socket, and will answer to queries about which services are running where. .. figure:: _static/registry_server.png :align: center Once a registry server is running somewhere "broadcastable" on your network, and the servers are configured to auto-register with it (the default), clients can discover services *automagically*:: >>> rpyc.discover("MY") # to find servers running a given service name (('192.168.1.101', 18861),) # and if you don't care to which you server you connect, you use connect_by_service: >>> c2 = rpyc.connect_by_service("MY") >>> c2.root.get_answer() 42 Decoupled Services ------------------ So far we've discussed only about the service that the **server** exposes, but what about the client? Does the client expose a service too? After all, RPyC is a symmetric protocol -- there's no difference between the client and the server. Well, as you might have guessed, the answer is yes: both client and server expose services. However, the services exposed by the two parties need not be the same -- they are **decoupled**. By default, clients (using one of the ``connect()`` functions to connect to a server) expose the ``VoidService``. As the name suggests, this service exposes no functionality to the other party, meaning the server can't make requests to the client (except for explicitly passed capabilities, like function callbacks). You can set the service exposed by the client by passing the ``service =`` parameter to one of the :func:`~rpyc.utils.factory.connect` functions. The fact that the services on both ends of the connection are decoupled, does not mean they can be arbitrary. For instance, "service A" might expect to be connected to "service B" -- and runtime errors (mostly ``AttributeError``) will ensue if this not the case. Many times the services on both ends can be different, but do keep it in mind that if you need interaction between the parties, both services must be "compatible". .. note:: **Classic mode:** when using any of the :func:`~rpyc.utils.classic.connect` functions, the client-side service is set to ``SlaveService`` as well (being identical to the server). Continue to :ref:`part 4 `... rpyc-3.4.4/docs/tutorial/tut4.rst000066400000000000000000000050161314203541000167170ustar00rootroot00000000000000.. _tut4: Part 4: Callbacks and Symmetry ============================== Before we dive into asynchronous invocation, we have to cover once last topic: `callbacks `_. Passing a "callback function" means treating functions (or any callable objects in our case) as `first-class objects `_, i.e., like any other value in the language. In ``C`` and ``C++`` this is done with `function pointers `_, but in python, there's no special machinery for it. Surely you've seen callbacks before:: >>> def f(x): ... return x**2 ... >>> map(f, range(10)) # f is passed as an argument to map [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] Since in python functions (as well as any other value) are objects, and since RPyC is symmetrical, local functions can be passed as arguments to remote objects, and vice versa. Here's an example :: >>> import rpyc >>> c = rpyc.classic.connect("localhost") >>> rlist = c.modules.__builtin__.range(10) # this is a remote list >>> rlist [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> >>> def f(x): ... return x**3 ... >>> c.modules.__builtin__.map(f, rlist) # calling the remote map with the local function f as an argument [0, 1, 8, 27, 64, 125, 216, 343, 512, 729] >>> # and to better understand the previous example >>> def g(x): ... print "hi, this is g, executing locally", x ... return x**3 ... >>> c.modules.__builtin__.map(g, rlist) hi, this is g, executing locally 0 hi, this is g, executing locally 1 hi, this is g, executing locally 2 hi, this is g, executing locally 3 hi, this is g, executing locally 4 hi, this is g, executing locally 5 hi, this is g, executing locally 6 hi, this is g, executing locally 7 hi, this is g, executing locally 8 hi, this is g, executing locally 9 [0, 1, 8, 27, 64, 125, 216, 343, 512, 729] >>> To explain what the symmetry of RPyC means, consider the following diagram: .. figure:: _static/symmetry.png :align: center As you can see, while the client is waiting for the result (a synchronous request), it will serve all incoming requests, meaning the server can invoke the callback it had received on the client. In other words, the symmetry of RPyC means that both the client and the server are ultimately "servers", and the "role" is more semantic than programmatic. Continue to :ref:`part 5 `... rpyc-3.4.4/docs/tutorial/tut5.rst000066400000000000000000000207051314203541000167220ustar00rootroot00000000000000.. _tut5: Part 5: Asynchrounous Operation and Events ========================================== Asynchronism ------------ The last part of the tutorial deals with a more "advanced" issue of RPC programming, *asynchronous operation*, which is a key feature of RPyC. The code you've seen so far was *synchronous* -- which is probably very similar to the code you normally write: when you invoke a function, you block until the result arrives. Asynchronous invocation, on the other hand, allows you to start the request and continue, rather than waiting. Instead of getting the result of the call, you get a special object known as an ``AsyncResult`` (also known as a `"future" or "promise" `_]), that will **eventually** hold the result. Note that there is no guarantee on execution order for async requests! In order to turn the invocation of a remote function (or any callable object) asynchronous, all you have to do is wrap it with :func:`async `, which creates a wrapper function that will return an ``AsyncResult`` instead of blocking. ``AsyncResult`` objects have several properties and methods that * ``ready`` - indicates whether or not the result arrived * ``error`` - indicates whether the result is a value or an exception * ``expired`` - indicates whether the AsyncResult object is expired (its time-to-wait has elapsed before the result has arrived). Unless set by ``set_expiry``, the object will never expire * ``value`` - the value contained in the AsyncResult. If the value has not yet arrived, accessing this property will block. If the result is an exception, accessing this property will raise it. If the object has expired, an exception will be raised. Otherwise, the value is returned * ``wait()`` - wait for the result to arrive, or until the object is expired * ``add_callback(func)`` - adds a callback to be invoked when the value arrives * ``set_expiry(seconds)`` - sets the expiry time of the AsyncResult. By default, no expiry time is set This may sound a bit complicated, so let's have a look at some real-life code, to convince you it's really not that scary:: >>> import rpyc >>> c=rpyc.classic.connect("localhost") >>> c.modules.time.sleep >>> c.modules.time.sleep(2) # i block for two seconds, until the call returns # wrap the remote function with async(), which turns the invocation asynchronous >>> asleep = rpyc.async(c.modules.time.sleep) >>> asleep async() # invoking async functions yields an AsyncResult rather than a value >>> res = asleep(15) >>> res >>> res.ready False >>> res.ready False # ... after 15 seconds... >>> res.ready True >>> print res.value None >>> res And here's a more interesting snippet:: >>> aint = rpyc.async(c.modules.__builtin__.int) # async wrapper for the remote type int # a valid call >>> x = aint("8") >>> x >>> x.ready True >>> x.error False >>> x.value 8 # and now with an exception >>> x = aint("this is not a valid number") >>> x >>> x.ready True >>> x.error True >>> x.value # Traceback (most recent call last): ... File "/home/tomer/workspace/rpyc/core/async.py", line 102, in value raise self._obj ValueError: invalid literal for int() with base 10: 'this is not a valid number' >>> .. _tut5-events: Events ------ Combining ``async`` and callbacks yields a rather interesting result: *async callbacks*, also known as **events**. Generally speaking, events are sent by an "event producer" to notify an "event consumer" of relevant changes, and this flow is normally one-way (from producer to consumer). In other words, in RPC terms, events can be implemented as async callbacks, where the return value is ignored. To better illustrate the situation, consider the following ``FileMonitor`` example -- it monitors monitors a file (using :func:`os.stat`) for changes, and notifies the client when a change occurs (with the old and new ``stat`` results). :: import rpyc import os import time from threading import Thread class FileMonitorService(rpyc.SlaveService): class exposed_FileMonitor(object): # exposing names is not limited to methods :) def __init__(self, filename, callback, interval = 1): self.filename = filename self.interval = interval self.last_stat = None self.callback = rpyc.async(callback) # create an async callback self.active = True self.thread = Thread(target = self.work) self.thread.start() def exposed_stop(self): # this method has to be exposed too self.active = False self.thread.join() def work(self): while self.active: stat = os.stat(self.filename) if self.last_stat is not None and self.last_stat != stat: self.callback(self.last_stat, stat) # notify the client of the change self.last_stat = stat time.sleep(self.interval) if __name__ == "__main__": from rpyc.utils.server import ThreadedServer ThreadedServer(FileMonitorService, port = 18871).start() And here's a live demonstration of events:: >>> import rpyc >>> >>> f = open("/tmp/floop.bloop", "w") >>> conn = rpyc.connect("localhost", 18871) >>> bgsrv = rpyc.BgServingThread(conn) # creates a bg thread to process incoming events >>> >>> def on_file_changed(oldstat, newstat): ... print "file changed" ... print " old stat: %s" % (oldstat,) ... print " new stat: %s" % (newstat,) ... >>> mon = conn.root.FileMonitor("/tmp/floop.bloop", on_file_changed) # create a filemon # wait a little for the filemon to have a look at the original file >>> f.write("shmoop") # change size >>> f.flush() # the other thread then prints file changed old stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 0L, 1225204483, 1225204483, 1225204483) new stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 6L, 1225204483, 1225204556, 1225204556) >>> >>> f.write("groop") # change size >>> f.flush() file changed old stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 6L, 1225204483, 1225204556, 1225204556) new stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 11L, 1225204483, 1225204566, 1225204566) >>> f.close() >>> f = open(filename, "w") file changed old stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 11L, 1225204483, 1225204566, 1225204566) new stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 0L, 1225204483, 1225204583, 1225204583) >>> mon.stop() >>> bgsrv.stop() >>> conn.close() Note that in this demo I used :class:`BgServingThread `, which basically starts a background thread to serve all incoming requests, while the main thread is free to do as it wills. You don't have to open a second thread for that, if your application has a reactor (like ``gtk``'s ``gobject.io_add_watch``): simply register the connection with the reactor for ``read``, invoking ``conn.serve``. If you don't have a reactor and don't wish to open threads, you should be aware that these notifications will not be processed until you make some interaction with the connection (which pulls all incoming requests). Here's an example of that:: >>> f = open("/tmp/floop.bloop", "w") >>> conn = rpyc.connect("localhost", 18871) >>> mon = conn.root.FileMonitor("/tmp/floop.bloop", on_file_changed) >>> # change the size... >>> f.write("shmoop") >>> f.flush() # ... seconds pass but nothing is printed ... # until we make some interaction with the connection: printing a remote object invokes # the remote __str__ of the object, so that all pending requests are suddenly processed >>> print mon file changed old stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 0L, 1225205197, 1225205197, 1225205197) new stat: (33188, 1564681L, 2051L, 1, 1011, 1011, 6L, 1225205197, 1225205218, 1225205218) <__main__.exposed_FileMonitor object at 0xb7a7a52c> >>> rpyc-3.4.4/docs/whatsnew33.rst000066400000000000000000000000571314203541000161620ustar00rootroot00000000000000What's New in RPyC 3.3 ====================== rpyc-3.4.4/issues/000077500000000000000000000000001314203541000140035ustar00rootroot00000000000000rpyc-3.4.4/issues/issue14.py000066400000000000000000000012331314203541000156510ustar00rootroot00000000000000import rpyc import os from contextlib import contextmanager class Number(object): def __init__(self,number): self.number=number def f(number): print( number.number) @contextmanager def ASYNC(func): wrapper = rpyc.async(func) yield wrapper if __name__ == "__main__": conn = rpyc.classic.connect("localhost") conn.modules.sys.path.append(os.path.dirname(__file__)) mod = conn.modules["issue14"] n = Number(999) #f = rpyc.async(mod.f)(n) #print( f ) #print( f.value ) f2 = rpyc.async(mod.f) res = f2(n) print res.value with ASYNC(mod.f) as f2: res = f2(n) print res.value rpyc-3.4.4/issues/issue26.py000066400000000000000000000004431314203541000156560ustar00rootroot00000000000000import rpyc class AService(rpyc.Service): class exposed_A(object): @classmethod def exposed_foo(cls, a, b): return 17 * a + b if __name__ == "__main__": with rpyc.connect_thread(remote_service = AService) as conn: print( conn.root.A.foo(1, 2)) rpyc-3.4.4/issues/issue32.py000066400000000000000000000004231314203541000156510ustar00rootroot00000000000000import rpyc import time c = rpyc.classic.connect("localhost") t = rpyc.BgServingThread(c) start = time.time() for i in range(100): c.execute("newObj = %d" % (i)) stop = time.time() print "added %d simple objects one by one, %f seconds" % (100, stop - start) t.stop() rpyc-3.4.4/issues/issue44/000077500000000000000000000000001314203541000153035ustar00rootroot00000000000000rpyc-3.4.4/issues/issue44/cert.crt000066400000000000000000000017001314203541000167500ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICmDCCAgGgAwIBAgIJANIOKVLrk84AMA0GCSqGSIb3DQEBBQUAMGUxCzAJBgNV BAYTAnBsMRAwDgYDVQQIDAdXcm9jbGF3MRAwDgYDVQQHDAdXcm9jbGF3MSEwHwYD VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBlJvYmVydDAe Fw0xMTA2MjAxMjExNDNaFw0xMjA2MTkxMjExNDNaMGUxCzAJBgNVBAYTAnBsMRAw DgYDVQQIDAdXcm9jbGF3MRAwDgYDVQQHDAdXcm9jbGF3MSEwHwYDVQQKDBhJbnRl cm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBlJvYmVydDCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAr9kZTYlWJ4rKt1MCEGRm3XfTMyDJJAn2V80AfFNS hO0e/HASSTnrXwdXPOVc9xGpI55Wof/9ntg4eUaA1BcojZTvtR+JOerpWfZ2sgKD CWAyI7C1tC10lzJ921Efooqqt6Jei8T0l0liG5kWuCDKoqHnHggiCVl08f7sVmCS B1UCAwEAAaNQME4wHQYDVR0OBBYEFCC2s3kO/ZvN1FRNHliAAx40CD/2MB8GA1Ud IwQYMBaAFCC2s3kO/ZvN1FRNHliAAx40CD/2MAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEABfuXCqRclj2995PcL4h89KzhEFCaOXxfhYte6nJKiXdmELd6 xY9N2a334UNhr5UOuKz9HLgn7z6DI2IYNKRkyrlokcjldCTKqv7LAieXIVF/kQTs Iy6N213BvAVOKUuNgmG/SuFNqIROm8786+Bw72LlGlcS9iAL/TN2+W2Iy7E= -----END CERTIFICATE----- rpyc-3.4.4/issues/issue44/cert.key000066400000000000000000000016241314203541000167550ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK/ZGU2JVieKyrdT AhBkZt130zMgySQJ9lfNAHxTUoTtHvxwEkk5618HVzzlXPcRqSOeVqH//Z7YOHlG gNQXKI2U77UfiTnq6Vn2drICgwlgMiOwtbQtdJcyfdtRH6KKqreiXovE9JdJYhuZ FrggyqKh5x4IIglZdPH+7FZgkgdVAgMBAAECgYA6RVGqLOlcvxQ/vYUAk5S2rN9S oPmmNJrqK2eOyzmcDMto0WZt14CUg+U3q7WrtbF7uRtyIVcUzQehwGguX+Iyw7tu DxGBqoCPcsqJlbBPeVbH4HtuDdEcyYD0p5s27sxVr6c+zlxKRRS8XDzpERyiZU3v ZN8qWFw+FzRWXDXvvQJBAN03HZ5SoEe6Z/+MtOnJm7L3QznexoDLDtugkuPh0Kdd V7r4rWiRRWHbD4WyMgNioFyBJw2+v5715K1PYTq8C7MCQQDLf8CmmSCcJK2sJ5mg c92SkAHYQIHYwlnaGmznafKigyJMyY3mkNZ3xvfiGpYBPIpgRWLjQNE8th7IiYY6 YPzXAkAJ9EHz7tnhgGTPngBCCN1ltzSiNQEPqJN5lIcnk/C0p0GcWzZKX0cU+SuA o50Wg+idYP5l4vBycbQhjFHet7l7AkAmsIdEJWDZzu9mB7FhnCXIM7DmGH2XZHwI x3VlGfOTijL/PmLIL0lXRHDkgAF9ArGcVBTU+AHP9SAtKFhoyP/JAkEAzbeAvAQP 4xabJUx9Wf3JFXqqkMQo21cxbWxGP1WyUg+ULUZ9ZOJOM4WyS9KMiXcnl0KYDfGN lIGsvvTM9Bwt+w== -----END PRIVATE KEY----- rpyc-3.4.4/issues/issue44/nonrpyc_client.py000066400000000000000000000010041314203541000206760ustar00rootroot00000000000000import socket import ssl for i in range(5000): if i % 100 == 0: print i sock = socket.socket() sock.connect(("localhost", 13388)) sock2 = ssl.wrap_socket(sock, server_side = False, keyfile = 'cert.key', certfile = 'cert.crt', cert_reqs = ssl.CERT_NONE, ca_certs = None, ssl_version = ssl.PROTOCOL_TLSv1) for text in ["hello world", "foobar", "spam and eggs"]: sock2.send(text) data = sock2.recv(1000) assert data == text #sock.close() rpyc-3.4.4/issues/issue44/nonrpyc_server.py000066400000000000000000000014331314203541000207340ustar00rootroot00000000000000import socket import select import ssl import threading import time files = [open("/tmp/rpyc-test-%d" % (i,), "w") for i in range(1000)] sockets = [socket.socket() for i in range(100)] listener = socket.socket() assert listener.fileno() > 1024 listener.bind(("localhost", 13388)) listener.listen(10) def handle_sock(s): s2 = ssl.wrap_socket(s, server_side = True, keyfile = 'cert.key', certfile = 'cert.crt', cert_reqs = ssl.CERT_NONE, ca_certs = None, ssl_version = ssl.PROTOCOL_TLSv1) select.select([s2], [], [], 1) for i in range(3): data = s2.recv(1000) s2.send(data) time.sleep(1) #s2.close() while True: s, _ = listener.accept() assert s.fileno() > 1024 t = threading.Thread(target = handle_sock, args = (s,)) t.start() rpyc-3.4.4/issues/issue44/rpyc_client.py000066400000000000000000000011671314203541000201750ustar00rootroot00000000000000import rpyc # # with explicit closing # for i in range(5000): #if i % 100 == 0: # print i c = rpyc.ssl_connect("localhost", 13388, keyfile = "cert.key", certfile = "cert.crt") print i, c.fileno() #c = rpyc.connect("localhost", 13388) assert c.root.foo() == 18 c.close() print print "finished (1/2)" # # without explicit closing # for i in range(5000): if i % 100 == 0: print i c = rpyc.ssl_connect("localhost", 13388, keyfile = "cert.key", certfile = "cert.crt") #c = rpyc.connect("localhost", 13388) assert c.root.foo() == 18 #c.close() print print "finished (2/2)" rpyc-3.4.4/issues/issue44/rpyc_server.py000066400000000000000000000005651314203541000202260ustar00rootroot00000000000000import rpyc class MyService(rpyc.Service): def exposed_foo(self): return 18 if __name__ == "__main__": from rpyc.utils.server import ThreadedServer from rpyc.utils.authenticators import SSLAuthenticator server = ThreadedServer(MyService, port = 13388, authenticator = SSLAuthenticator("cert.key", "cert.crt"), ) server.start() rpyc-3.4.4/issues/issue63_client.py000066400000000000000000000010351314203541000172130ustar00rootroot00000000000000import rpyc import time count = 0 def callbackFunc(x): global count count += 1 print x, time.time() if __name__ == "__main__": conn = rpyc.connect("localhost", 12000) #rpyc.BgServingThread.SERVE_INTERVAL = 0.01 rpyc.BgServingThread.SLEEP_INTERVAL = 0.0001 bgsrv = rpyc.BgServingThread(conn) test = conn.root.RemoteCallbackTest(callbackFunc) print test test.start() print "doing other things while the callback is being called" while count < 100: time.sleep(0.1) print "done" rpyc-3.4.4/issues/issue63_server.py000066400000000000000000000013761314203541000172530ustar00rootroot00000000000000import threading import rpyc def run_something(callback): for i in range(100): callback(i) class MyService(rpyc.Service): def on_connect(self): print "hi", self._conn._config["endpoints"][1] def on_disconnect(self): print "bye", self._conn._config["endpoints"][1] class exposed_RemoteCallbackTest(object): def __init__(self, callback): self.callback = callback def start(self): thd = threading.Thread(target = run_something, args = (self.callback,)) thd.start() if __name__ == "__main__": from rpyc.utils.server import ThreadedServer myServerObj = ThreadedServer(MyService, port=12000, protocol_config={"allow_public_attrs":True}) myServerObj.start() rpyc-3.4.4/issues/issue8_client.py000066400000000000000000000014151314203541000171340ustar00rootroot00000000000000import rpyc conn = rpyc.connect ("localhost", 18861) store = conn.root.store Order = conn.root.Order estrella_levante = conn.root.estrella_levante #beer supplier client = conn.root.client Product = conn.root.Product def show_reserved_products (product): #callback print 'You have reserved %s' % product #Product.reserveds is the py-notify signal that is thrown when you # output a product from thee store conn.root.connect (Product.reserveds, show_reserved_products) p = store.output ('quinto', estrella_levante) #store.output gives me a Product object print "@@", type(p), p order = Order (client) order.add_product (p) # <---------- this is the interesting moment # we pass as argument a Product object conn.close () rpyc-3.4.4/issues/issue8_server.py000066400000000000000000000100061314203541000171600ustar00rootroot00000000000000#server: please, pay attention at line 'print type(product)' inside #Order in method add_product #we will see Order and not Product class #------------------------------------- from itertools import count from datetime import datetime from notify.all import * import rpyc class Supplier(object): def __init__(self, name): self.name = name def __repr__(self): return 'Supplier: %s' % self.name class Product(object): reserveds = Signal() #when a product is set reserved, we throw this signal exposed_reserveds = reserveds def __init__(self, name, supplier, id): self.name = name self.supplier = supplier self.id = id self.reserved = 'N' def set_reserved (self): self.reserved = 'Y' Product.reserveds(self) #notify the observers def __repr__(self): return '' % (self.name, self.supplier, self.id) class Store(object): def __init__(self, name): self.name = name self._products = [] def input (self, product): self._products.append(product) def output (self, product_name, supplier): for i, p in enumerate(self._products): if p.name == product_name and p.supplier == supplier: ret = self._products.pop(i) ret.set_reserved() return ret raise Exception('There is no: %s, %s' % (product_name, supplier)) exposed_output = output def __repr__(self): ret = 'Store: %s\n' % self.name for p in self._products: ret += '%s\n' % p return ret class Client(object): def __init__(self, name): self.name = name def __repr__(self): return 'Client: %s' % self.name class Order(object): new_id = count() def __init__(self, client): self.id = Order.new_id.next() self.client = client self.products = [] self.datetime = datetime.now() def add_product(self, product): print type(product) # <--------- look at the output: it is not Product but Order class print "!!", product self.products.append(product) exposed_add_product = add_product def __repr__(self): ret = ['' % (self.id, self.client, self.datetime.strftime('%d-%m-%Y %H:%M'))] for p in self.products: ret.append('\t%s' % p) return '\n'.join(ret) #creating some objects estrella_levante = Supplier('Estrella Levante') store = Store('Trastienda') client = Client('Miguel Angel') for i in range(5): store.input(Product('quinto', estrella_levante, '#%d' % i)) store.input(Product('tercio', estrella_levante, '#%d' % i)) class MyService(rpyc.Service): exposed_store = store exposed_Order = Order exposed_estrella_levante = estrella_levante exposed_client = client exposed_Product = Product def __init__(self, *args): rpyc.Service.__init__(self, *args) self.signal_handler = [] #when registering signal of py-notify with the handler def on_disconnect(self): for s, h in self.signal_handler: s.disconnect(h) # we register py-notify signal with the handler this way, so when # closing we disconnect every connection def exposed_connect(self, signal, handler): handler = rpyc.async(handler) self.signal_handler.append((signal, handler)) signal.connect(handler) def exposed_disconnect(self, signal, handler): handler = rpyc.async(handler) # py-notify disconnects passing # as argument the handler object, as we connected try: self.signal_handler.remove((signal, handler)) signal.disconnect(handler) except: pass if __name__ == "__main__": from rpyc.utils.server import ThreadedServer t = ThreadedServer(MyService, port = 18861) t.start() rpyc-3.4.4/issues/issue8_test.py000066400000000000000000000005511314203541000166350ustar00rootroot00000000000000import rpyc import gc c = rpyc.classic.connect("localhost") c.execute("""class Foo(object): def __init__(self, name): self.name = name def __del__(self): print "%s deleted" % (self.name,) """) f1 = c.namespace["Foo"]("f1") f2 = c.namespace["Foo"]("f2") f3 = c.namespace["Foo"]("f3") del f1 del f2 gc.collect() raw_input() c.close() rpyc-3.4.4/issues/nested_exceptions.py000066400000000000000000000002111314203541000200720ustar00rootroot00000000000000import rpyc c=rpyc.classic.connect_thread() c.execute("import rpyc; c2=rpyc.classic.connect_thread()") c.namespace["c2"].execute("1/0") rpyc-3.4.4/issues/split33.py000066400000000000000000000016541314203541000156640ustar00rootroot00000000000000import rpyc from rpyc.utils.splitbrain import splitbrain, localbrain import traceback import sys c = rpyc.classic.connect("localhost") import os pid1 = os.getpid() with open("tmp.txt", "w") as f: f.write("foobar") with splitbrain(c): pid2 = os.getpid() assert pid1 != pid2 import email print (email) import os as os2 pid3 = os2.getpid() assert pid2 == pid3 assert not os.path.exists("tmp.txt") with localbrain(): with open("tmp.txt", "r") as f: assert f.read() == "foobar" pid4 = os.getpid() assert pid4 == pid1 try: open("tmp.txt", "r") except IOError as ex: #print(type(ex), repr(ex)) with localbrain(): x = ("".join(traceback.format_exception(*sys.exc_info()))) print(len(x)) else: assert False, "expected an IOError" pid5 = os.getpid() assert pid5 == pid1 print ("done") rpyc-3.4.4/requirements.txt000066400000000000000000000000151314203541000157500ustar00rootroot00000000000000plumbum>=1.2 rpyc-3.4.4/rpyc/000077500000000000000000000000001314203541000134455ustar00rootroot00000000000000rpyc-3.4.4/rpyc/__init__.py000066400000000000000000000036351314203541000155650ustar00rootroot00000000000000""" :: ##### ##### #### ## ## ## ## ## #### ## ## ## ## ## # ##### ##### ## ## ## ## ## ## ## ## ## ## # ## ## ## ### ## ### ## ## ## ## ##### -------------------- ## ------------------------------------------ ## Remote Python Call (RPyC) Licensed under the MIT license (see `LICENSE` file) A transparent, symmetric and light-weight RPC and distributed computing library for python. Usage:: >>> import rpyc >>> c = rpyc.connect_by_service("SERVICENAME") >>> print c.root.some_function(1, 2, 3) Classic-style usage:: >>> import rpyc >>> # `hostname` is assumed to be running a slave-service server >>> c = rpyc.classic.connect("hostname") >>> print c.execute("x = 5") None >>> print c.eval("x + 2") 7 >>> print c.modules.os.listdir(".") #doctest: +ELLIPSIS [...] >>> print c.modules["xml.dom.minidom"].parseString("") #doctest: +ELLIPSIS >>> f = c.builtin.open("foobar.txt", "rb") #doctest: +SKIP >>> print f.read(100) #doctest: +SKIP ... """ from rpyc.core import (SocketStream, TunneledSocketStream, PipeStream, Channel, Connection, Service, BaseNetref, AsyncResult, GenericException, AsyncResultTimeout, VoidService, SlaveService) from rpyc.utils.factory import (connect_stream, connect_channel, connect_pipes, connect_stdpipes, connect, ssl_connect, discover, connect_by_service, connect_subproc, connect_thread, ssh_connect) from rpyc.utils.helpers import async, timed, buffiter, BgServingThread, restricted from rpyc.utils import classic from rpyc.version import version as __version__ __author__ = "Tomer Filiba (tomerfiliba@gmail.com)" rpyc-3.4.4/rpyc/core/000077500000000000000000000000001314203541000143755ustar00rootroot00000000000000rpyc-3.4.4/rpyc/core/__init__.py000066400000000000000000000005601314203541000165070ustar00rootroot00000000000000from rpyc.core.stream import SocketStream, TunneledSocketStream, PipeStream from rpyc.core.channel import Channel from rpyc.core.protocol import Connection from rpyc.core.netref import BaseNetref from rpyc.core.async import AsyncResult, AsyncResultTimeout from rpyc.core.service import Service, VoidService, SlaveService from rpyc.core.vinegar import GenericException rpyc-3.4.4/rpyc/core/async.py000066400000000000000000000074501314203541000160720ustar00rootroot00000000000000import time class AsyncResultTimeout(Exception): """an exception that represents an :class:`AsyncResult` that has timed out""" pass class AsyncResult(object): """*AsyncResult* represents a computation that occurs in the background and will eventually have a result. Use the :attr:`value` property to access the result (which will block if the result has not yet arrived). """ __slots__ = ["_conn", "_is_ready", "_is_exc", "_callbacks", "_obj", "_ttl"] def __init__(self, conn): self._conn = conn self._is_ready = False self._is_exc = None self._obj = None self._callbacks = [] self._ttl = None def __repr__(self): if self._is_ready: state = "ready" elif self._is_exc: state = "error" elif self.expired: state = "expired" else: state = "pending" return "" % (state, id(self)) def __call__(self, is_exc, obj): if self.expired: return self._is_exc = is_exc self._obj = obj self._is_ready = True for cb in self._callbacks: cb(self) del self._callbacks[:] def wait(self): """Waits for the result to arrive. If the AsyncResult object has an expiry set, and the result did not arrive within that timeout, an :class:`AsyncResultTimeout` exception is raised""" if self._is_ready: return if self._ttl is None: while not self._is_ready: self._conn.serve() else: while True: timeout = self._ttl - time.time() self._conn.poll(timeout = max(timeout, 0)) if self._is_ready: break if timeout <= 0: raise AsyncResultTimeout("result expired") def add_callback(self, func): """Adds a callback to be invoked when the result arrives. The callback function takes a single argument, which is the current AsyncResult (``self``). If the result has already arrived, the function is invoked immediately. :param func: the callback function to add """ if self._is_ready: func(self) else: self._callbacks.append(func) def set_expiry(self, timeout): """Sets the expiry time (in seconds, relative to now) or ``None`` for unlimited time :param timeout: the expiry time in seconds or ``None`` """ if timeout is None: self._ttl = None else: self._ttl = time.time() + timeout @property def ready(self): """Indicates whether the result has arrived""" if self.expired: return False if not self._is_ready: self._conn.poll_all() return self._is_ready @property def error(self): """Indicates whether the returned result is an exception""" if self.ready: return self._is_exc return False @property def expired(self): """Indicates whether the AsyncResult has expired""" if self._is_ready or self._ttl is None: return False else: return time.time() > self._ttl @property def value(self): """Returns the result of the operation. If the result has not yet arrived, accessing this property will wait for it. If the result does not arrive before the expiry time elapses, :class:`AsyncResultTimeout` is raised. If the returned result is an exception, it will be raised here. Otherwise, the result is returned directly. """ self.wait() if self._is_exc: raise self._obj else: return self._obj rpyc-3.4.4/rpyc/core/brine.py000066400000000000000000000257141314203541000160570ustar00rootroot00000000000000""" **Brine** is a simple, fast and secure object serializer for **immutable** objects. The following types are supported: ``int``, ``long``, ``bool``, ``str``, ``float``, ``unicode``, ``bytes``, ``slice``, ``complex``, ``tuple`` (of simple types), ``frozenset`` (of simple types) as well as the following singletons: ``None``, ``NotImplemented``, and ``Ellipsis``. Example:: >>> x = ("he", 7, u"llo", 8, (), 900, None, True, Ellipsis, 18.2, 18.2j + 13, ... slice(1,2,3), frozenset([5,6,7]), NotImplemented) >>> dumpable(x) True >>> y = dump(x) >>> y.encode("hex") '140e0b686557080c6c6c6f580216033930300003061840323333333333331b402a000000000000403233333333333319125152531a1255565705' >>> z = load(y) >>> x == z True """ from rpyc.lib.compat import Struct, BytesIO, is_py3k, BYTES_LITERAL # singletons TAG_NONE = BYTES_LITERAL("\x00") TAG_EMPTY_STR = BYTES_LITERAL("\x01") TAG_EMPTY_TUPLE = BYTES_LITERAL("\x02") TAG_TRUE = BYTES_LITERAL("\x03") TAG_FALSE = BYTES_LITERAL("\x04") TAG_NOT_IMPLEMENTED = BYTES_LITERAL("\x05") TAG_ELLIPSIS = BYTES_LITERAL("\x06") # types TAG_UNICODE = BYTES_LITERAL("\x08") TAG_LONG = BYTES_LITERAL("\x09") TAG_STR1 = BYTES_LITERAL("\x0a") TAG_STR2 = BYTES_LITERAL("\x0b") TAG_STR3 = BYTES_LITERAL("\x0c") TAG_STR4 = BYTES_LITERAL("\x0d") TAG_STR_L1 = BYTES_LITERAL("\x0e") TAG_STR_L4 = BYTES_LITERAL("\x0f") TAG_TUP1 = BYTES_LITERAL("\x10") TAG_TUP2 = BYTES_LITERAL("\x11") TAG_TUP3 = BYTES_LITERAL("\x12") TAG_TUP4 = BYTES_LITERAL("\x13") TAG_TUP_L1 = BYTES_LITERAL("\x14") TAG_TUP_L4 = BYTES_LITERAL("\x15") TAG_INT_L1 = BYTES_LITERAL("\x16") TAG_INT_L4 = BYTES_LITERAL("\x17") TAG_FLOAT = BYTES_LITERAL("\x18") TAG_SLICE = BYTES_LITERAL("\x19") TAG_FSET = BYTES_LITERAL("\x1a") TAG_COMPLEX = BYTES_LITERAL("\x1b") if is_py3k: IMM_INTS = dict((i, bytes([i + 0x50])) for i in range(-0x30, 0xa0)) else: IMM_INTS = dict((i, chr(i + 0x50)) for i in range(-0x30, 0xa0)) I1 = Struct("!B") I4 = Struct("!L") F8 = Struct("!d") C16 = Struct("!dd") _dump_registry = {} _load_registry = {} IMM_INTS_LOADER = dict((v, k) for k, v in IMM_INTS.items()) def register(coll, key): def deco(func): coll[key] = func return func return deco #=============================================================================== # dumping #=============================================================================== @register(_dump_registry, type(None)) def _dump_none(obj, stream): stream.append(TAG_NONE) @register(_dump_registry, type(NotImplemented)) def _dump_notimplemeted(obj, stream): stream.append(TAG_NOT_IMPLEMENTED) @register(_dump_registry, type(Ellipsis)) def _dump_ellipsis(obj, stream): stream.append(TAG_ELLIPSIS) @register(_dump_registry, bool) def _dump_bool(obj, stream): if obj: stream.append(TAG_TRUE) else: stream.append(TAG_FALSE) @register(_dump_registry, slice) def _dump_slice(obj, stream): stream.append(TAG_SLICE) _dump((obj.start, obj.stop, obj.step), stream) @register(_dump_registry, frozenset) def _dump_frozenset(obj, stream): stream.append(TAG_FSET) _dump(tuple(obj), stream) @register(_dump_registry, int) def _dump_int(obj, stream): if obj in IMM_INTS: stream.append(IMM_INTS[obj]) else: obj = BYTES_LITERAL(str(obj)) l = len(obj) if l < 256: stream.append(TAG_INT_L1 + I1.pack(l) + obj) else: stream.append(TAG_INT_L4 + I4.pack(l) + obj) @register(_dump_registry, float) def _dump_float(obj, stream): stream.append(TAG_FLOAT + F8.pack(obj)) @register(_dump_registry, complex) def _dump_complex(obj, stream): stream.append(TAG_COMPLEX + C16.pack(obj.real, obj.imag)) if is_py3k: @register(_dump_registry, bytes) def _dump_bytes(obj, stream): l = len(obj) if l == 0: stream.append(TAG_EMPTY_STR) elif l == 1: stream.append(TAG_STR1 + obj) elif l == 2: stream.append(TAG_STR2 + obj) elif l == 3: stream.append(TAG_STR3 + obj) elif l == 4: stream.append(TAG_STR4 + obj) elif l < 256: stream.append(TAG_STR_L1 + I1.pack(l) + obj) else: stream.append(TAG_STR_L4 + I4.pack(l) + obj) @register(_dump_registry, str) def _dump_str(obj, stream): stream.append(TAG_UNICODE) _dump_bytes(obj.encode("utf8"), stream) else: @register(_dump_registry, str) def _dump_str(obj, stream): l = len(obj) if l == 0: stream.append(TAG_EMPTY_STR) elif l == 1: stream.append(TAG_STR1 + obj) elif l == 2: stream.append(TAG_STR2 + obj) elif l == 3: stream.append(TAG_STR3 + obj) elif l == 4: stream.append(TAG_STR4 + obj) elif l < 256: stream.append(TAG_STR_L1 + I1.pack(l) + obj) else: stream.append(TAG_STR_L4 + I4.pack(l) + obj) @register(_dump_registry, unicode) def _dump_unicode(obj, stream): stream.append(TAG_UNICODE) _dump_str(obj.encode("utf8"), stream) @register(_dump_registry, long) def _dump_long(obj, stream): stream.append(TAG_LONG) _dump_int(obj, stream) @register(_dump_registry, tuple) def _dump_tuple(obj, stream): l = len(obj) if l == 0: stream.append(TAG_EMPTY_TUPLE) elif l == 1: stream.append(TAG_TUP1) elif l == 2: stream.append(TAG_TUP2) elif l == 3: stream.append(TAG_TUP3) elif l == 4: stream.append(TAG_TUP4) elif l < 256: stream.append(TAG_TUP_L1 + I1.pack(l)) else: stream.append(TAG_TUP_L4 + I4.pack(l)) for item in obj: _dump(item, stream) def _undumpable(obj, stream): raise TypeError("cannot dump %r" % (obj,)) def _dump(obj, stream): _dump_registry.get(type(obj), _undumpable)(obj, stream) #=============================================================================== # loading #=============================================================================== @register(_load_registry, TAG_NONE) def _load_none(stream): return None @register(_load_registry, TAG_NOT_IMPLEMENTED) def _load_nonimp(stream): return NotImplemented @register(_load_registry, TAG_ELLIPSIS) def _load_elipsis(stream): return Ellipsis @register(_load_registry, TAG_TRUE) def _load_true(stream): return True @register(_load_registry, TAG_FALSE) def _load_false(stream): return False @register(_load_registry, TAG_EMPTY_TUPLE) def _load_empty_tuple(stream): return () if is_py3k: @register(_load_registry, TAG_EMPTY_STR) def _load_empty_str(stream): return BYTES_LITERAL("") else: @register(_load_registry, TAG_EMPTY_STR) def _load_empty_str(stream): return "" if is_py3k: @register(_load_registry, TAG_LONG) def _load_long(stream): obj = _load(stream) return int(obj) else: @register(_load_registry, TAG_LONG) def _load_long(stream): obj = _load(stream) return long(obj) @register(_load_registry, TAG_FLOAT) def _load_float(stream): return F8.unpack(stream.read(8))[0] @register(_load_registry, TAG_COMPLEX) def _load_complex(stream): real, imag = C16.unpack(stream.read(16)) return complex(real, imag) @register(_load_registry, TAG_STR1) def _load_str1(stream): return stream.read(1) @register(_load_registry, TAG_STR2) def _load_str2(stream): return stream.read(2) @register(_load_registry, TAG_STR3) def _load_str3(stream): return stream.read(3) @register(_load_registry, TAG_STR4) def _load_str4(stream): return stream.read(4) @register(_load_registry, TAG_STR_L1) def _load_str_l1(stream): l, = I1.unpack(stream.read(1)) return stream.read(l) @register(_load_registry, TAG_STR_L4) def _load_str_l4(stream): l, = I4.unpack(stream.read(4)) return stream.read(l) @register(_load_registry, TAG_UNICODE) def _load_unicode(stream): obj = _load(stream) return obj.decode("utf-8") @register(_load_registry, TAG_TUP1) def _load_tup1(stream): return (_load(stream),) @register(_load_registry, TAG_TUP2) def _load_tup2(stream): return (_load(stream), _load(stream)) @register(_load_registry, TAG_TUP3) def _load_tup3(stream): return (_load(stream), _load(stream), _load(stream)) @register(_load_registry, TAG_TUP4) def _load_tup4(stream): return (_load(stream), _load(stream), _load(stream), _load(stream)) @register(_load_registry, TAG_TUP_L1) def _load_tup_l1(stream): l, = I1.unpack(stream.read(1)) return tuple(_load(stream) for i in range(l)) if is_py3k: @register(_load_registry, TAG_TUP_L4) def _load_tup_l4(stream): l, = I4.unpack(stream.read(4)) return tuple(_load(stream) for i in range(l)) else: @register(_load_registry, TAG_TUP_L4) def _load_tup_l4(stream): l, = I4.unpack(stream.read(4)) return tuple(_load(stream) for i in xrange(l)) @register(_load_registry, TAG_SLICE) def _load_slice(stream): start, stop, step = _load(stream) return slice(start, stop, step) @register(_load_registry, TAG_FSET) def _load_frozenset(stream): return frozenset(_load(stream)) @register(_load_registry, TAG_INT_L1) def _load_int_l1(stream): l, = I1.unpack(stream.read(1)) return int(stream.read(l)) @register(_load_registry, TAG_INT_L4) def _load_int_l4(stream): l, = I4.unpack(stream.read(4)) return int(stream.read(l)) def _load(stream): tag = stream.read(1) if tag in IMM_INTS_LOADER: return IMM_INTS_LOADER[tag] return _load_registry.get(tag)(stream) #=============================================================================== # API #=============================================================================== def dump(obj): """Converts (dumps) the given object to a byte-string representation :param obj: any :func:`dumpable` object :returns: a byte-string representation of the object """ stream = [] _dump(obj, stream) return BYTES_LITERAL("").join(stream) def load(data): """Recreates (loads) an object from its byte-string representation :param data: the byte-string representation of an object :returns: the dumped object """ stream = BytesIO(data) return _load(stream) if is_py3k: simple_types = frozenset([type(None), int, bool, float, bytes, str, complex, type(NotImplemented), type(Ellipsis)]) else: simple_types = frozenset([type(None), int, long, bool, float, str, unicode, complex, type(NotImplemented), type(Ellipsis)]) def dumpable(obj): """Indicates whether the given object is *dumpable* by brine :returns: ``True`` if the object is dumpable (e.g., :func:`dump` would succeed), ``False`` otherwise """ if type(obj) in simple_types: return True if type(obj) in (tuple, frozenset): return all(dumpable(item) for item in obj) if type(obj) is slice: return dumpable(obj.start) and dumpable(obj.stop) and dumpable(obj.step) return False if __name__ == "__main__": import doctest doctest.testmod() rpyc-3.4.4/rpyc/core/channel.py000066400000000000000000000047721314203541000163710ustar00rootroot00000000000000""" *Channel* is an abstraction layer over streams that works with *packets of data*, rather than an endless stream of bytes, and adds support for compression. """ from rpyc.lib import safe_import from rpyc.lib.compat import Struct, BYTES_LITERAL zlib = safe_import("zlib") # * 64 bit length field? # * separate \n into a FlushingChannel subclass? # * add thread safety as a subclass? class Channel(object): """Channel implementation. Note: In order to avoid problems with all sorts of line-buffered transports, we deliberately add ``\\n`` at the end of each frame. """ COMPRESSION_THRESHOLD = 3000 COMPRESSION_LEVEL = 1 FRAME_HEADER = Struct("!LB") FLUSHER = BYTES_LITERAL("\n") # cause any line-buffered layers below us to flush __slots__ = ["stream", "compress"] def __init__(self, stream, compress = True): self.stream = stream if not zlib: compress = False self.compress = compress def close(self): """closes the channel and underlying stream""" self.stream.close() @property def closed(self): """indicates whether the underlying stream has been closed""" return self.stream.closed def fileno(self): """returns the file descriptor of the underlying stream""" return self.stream.fileno() def poll(self, timeout): """polls the underlying steam for data, waiting up to *timeout* seconds""" return self.stream.poll(timeout) def recv(self): """Receives the next packet (or *frame*) from the underlying stream. This method will block until the packet has been read completely :returns: string of data """ header = self.stream.read(self.FRAME_HEADER.size) length, compressed = self.FRAME_HEADER.unpack(header) data = self.stream.read(length + len(self.FLUSHER))[:-len(self.FLUSHER)] if compressed: data = zlib.decompress(data) return data def send(self, data): """Sends the given string of data as a packet over the underlying stream. Blocks until the packet has been sent. :param data: the byte string to send as a packet """ if self.compress and len(data) > self.COMPRESSION_THRESHOLD: compressed = 1 data = zlib.compress(data, self.COMPRESSION_LEVEL) else: compressed = 0 header = self.FRAME_HEADER.pack(len(data), compressed) buf = header + data + self.FLUSHER self.stream.write(buf) rpyc-3.4.4/rpyc/core/consts.py000066400000000000000000000013651314203541000162650ustar00rootroot00000000000000""" Constants used by the protocol """ # messages MSG_REQUEST = 1 MSG_REPLY = 2 MSG_EXCEPTION = 3 # boxing LABEL_VALUE = 1 LABEL_TUPLE = 2 LABEL_LOCAL_REF = 3 LABEL_REMOTE_REF = 4 # action handlers HANDLE_PING = 1 HANDLE_CLOSE = 2 HANDLE_GETROOT = 3 HANDLE_GETATTR = 4 HANDLE_DELATTR = 5 HANDLE_SETATTR = 6 HANDLE_CALL = 7 HANDLE_CALLATTR = 8 HANDLE_REPR = 9 HANDLE_STR = 10 HANDLE_CMP = 11 HANDLE_HASH = 12 HANDLE_DIR = 13 HANDLE_PICKLE = 14 HANDLE_DEL = 15 HANDLE_INSPECT = 16 HANDLE_BUFFITER = 17 HANDLE_OLDSLICING = 18 # optimized exceptions EXC_STOP_ITERATION = 1 # DEBUG #for k in globals().keys(): # globals()[k] = k rpyc-3.4.4/rpyc/core/netref.py000066400000000000000000000245431314203541000162420ustar00rootroot00000000000000""" **NetRef**: a transparent *network reference*. This module contains quite a lot of *magic*, so beware. """ import sys import inspect import types from rpyc.lib.compat import pickle, is_py3k, maxint from rpyc.core import consts _local_netref_attrs = frozenset([ '____conn__', '____oid__', '____refcount__', '__class__', '__cmp__', '__del__', '__delattr__', '__dir__', '__doc__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__metaclass__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__slots__', '__str__', '__weakref__', '__dict__', '__members__', '__methods__', ]) """the set of attributes that are local to the netref object""" _builtin_types = [ type, object, bool, complex, dict, float, int, list, slice, str, tuple, set, frozenset, Exception, type(None), types.BuiltinFunctionType, types.GeneratorType, types.MethodType, types.CodeType, types.FrameType, types.TracebackType, types.ModuleType, types.FunctionType, type(int.__add__), # wrapper_descriptor type((1).__add__), # method-wrapper type(iter([])), # listiterator type(iter(())), # tupleiterator type(iter(set())), # setiterator ] """a list of types considered built-in (shared between connections)""" try: BaseException except NameError: pass else: _builtin_types.append(BaseException) if is_py3k: _builtin_types.extend([ bytes, bytearray, type(iter(range(10))), memoryview, ]) xrange = range else: _builtin_types.extend([ basestring, unicode, long, xrange, type(iter(xrange(10))), file, types.InstanceType, types.ClassType, types.DictProxyType, ]) _normalized_builtin_types = dict(((t.__name__, t.__module__), t) for t in _builtin_types) def syncreq(proxy, handler, *args): """Performs a synchronous request on the given proxy object. Not intended to be invoked directly. :param proxy: the proxy on which to issue the request :param handler: the request handler (one of the ``HANDLE_XXX`` members of ``rpyc.protocol.consts``) :param args: arguments to the handler :raises: any exception raised by the operation will be raised :returns: the result of the operation """ conn = object.__getattribute__(proxy, "____conn__")() if not conn: raise ReferenceError('weakly-referenced object no longer exists') oid = object.__getattribute__(proxy, "____oid__") return conn.sync_request(handler, oid, *args) def asyncreq(proxy, handler, *args): """Performs an asynchronous request on the given proxy object. Not intended to be invoked directly. :param proxy: the proxy on which to issue the request :param handler: the request handler (one of the ``HANDLE_XXX`` members of ``rpyc.protocol.consts``) :param args: arguments to the handler :returns: an :class:`AsyncResult ` representing the operation """ conn = object.__getattribute__(proxy, "____conn__")() if not conn: raise ReferenceError('weakly-referenced object no longer exists') oid = object.__getattribute__(proxy, "____oid__") return conn.async_request(handler, oid, *args) class NetrefMetaclass(type): """A *metaclass* used to customize the ``__repr__`` of ``netref`` classes. It is quite useless, but it makes debugging and interactive programming easier""" __slots__ = () def __repr__(self): if self.__module__: return "" % (self.__module__, self.__name__) else: return "" % (self.__name__,) class BaseNetref(object): """The base netref class, from which all netref classes derive. Some netref classes are "pre-generated" and cached upon importing this module (those defined in the :data:`_builtin_types`), and they are shared between all connections. The rest of the netref classes are created by :meth:`rpyc.core.protocl.Connection._unbox`, and are private to the connection. Do not use this class directly; use :func:`class_factory` instead. :param conn: the :class:`rpyc.core.protocol.Connection` instance :param oid: the unique object ID of the remote object """ # this is okay with py3k -- see below __metaclass__ = NetrefMetaclass __slots__ = ["____conn__", "____oid__", "__weakref__", "____refcount__"] def __init__(self, conn, oid): self.____conn__ = conn self.____oid__ = oid self.____refcount__ = 1 def __del__(self): try: asyncreq(self, consts.HANDLE_DEL, self.____refcount__) except Exception: # raised in a destructor, most likely on program termination, # when the connection might have already been closed. # it's safe to ignore all exceptions here pass def __getattribute__(self, name): if name in _local_netref_attrs: if name == "__class__": cls = object.__getattribute__(self, "__class__") if cls is None: cls = self.__getattr__("__class__") return cls elif name == "__doc__": return self.__getattr__("__doc__") elif name == "__members__": # for Python < 2.6 return self.__dir__() else: return object.__getattribute__(self, name) elif name == "__call__": # IronPython issue #10 return object.__getattribute__(self, "__call__") else: return syncreq(self, consts.HANDLE_GETATTR, name) def __getattr__(self, name): return syncreq(self, consts.HANDLE_GETATTR, name) def __delattr__(self, name): if name in _local_netref_attrs: object.__delattr__(self, name) else: syncreq(self, consts.HANDLE_DELATTR, name) def __setattr__(self, name, value): if name in _local_netref_attrs: object.__setattr__(self, name, value) else: syncreq(self, consts.HANDLE_SETATTR, name, value) def __dir__(self): return list(syncreq(self, consts.HANDLE_DIR)) # support for metaclasses def __hash__(self): return syncreq(self, consts.HANDLE_HASH) def __cmp__(self, other): return syncreq(self, consts.HANDLE_CMP, other) def __repr__(self): return syncreq(self, consts.HANDLE_REPR) def __str__(self): return syncreq(self, consts.HANDLE_STR) # support for pickling netrefs def __reduce_ex__(self, proto): return pickle.loads, (syncreq(self, consts.HANDLE_PICKLE, proto),) if not isinstance(BaseNetref, NetrefMetaclass): # python 2 and 3 compatible metaclass... ns = dict(BaseNetref.__dict__) for slot in BaseNetref.__slots__: ns.pop(slot) BaseNetref = NetrefMetaclass(BaseNetref.__name__, BaseNetref.__bases__, ns) def _make_method(name, doc): """creates a method with the given name and docstring that invokes :func:`syncreq` on its `self` argument""" slicers = {"__getslice__" : "__getitem__", "__delslice__" : "__delitem__", "__setslice__" : "__setitem__"} name = str(name) # IronPython issue #10 if name == "__call__": def __call__(_self, *args, **kwargs): kwargs = tuple(kwargs.items()) return syncreq(_self, consts.HANDLE_CALL, args, kwargs) __call__.__doc__ = doc return __call__ elif name in slicers: # 32/64 bit issue #41 def method(self, start, stop, *args): if stop == maxint: stop = None return syncreq(self, consts.HANDLE_OLDSLICING, slicers[name], name, start, stop, args) method.__name__ = name method.__doc__ = doc return method else: def method(_self, *args, **kwargs): kwargs = tuple(kwargs.items()) return syncreq(_self, consts.HANDLE_CALLATTR, name, args, kwargs) method.__name__ = name method.__doc__ = doc return method def inspect_methods(obj): """introspects the given (local) object, returning a list of all of its methods (going up the MRO). :param obj: any local (not proxy) python object :returns: a list of ``(method name, docstring)`` tuples of all the methods of the given object """ methods = {} attrs = {} if isinstance(obj, type): # don't forget the darn metaclass mros = list(reversed(type(obj).__mro__)) + list(reversed(obj.__mro__)) else: mros = reversed(type(obj).__mro__) for basecls in mros: attrs.update(basecls.__dict__) for name, attr in attrs.items(): if name not in _local_netref_attrs and hasattr(attr, "__call__"): methods[name] = inspect.getdoc(attr) return methods.items() def class_factory(clsname, modname, methods): """Creates a netref class proxying the given class :param clsname: the class's name :param modname: the class's module name :param methods: a list of ``(method name, docstring)`` tuples, of the methods that the class defines :returns: a netref class """ clsname = str(clsname) # IronPython issue #10 modname = str(modname) # IronPython issue #10 ns = {"__slots__" : ()} for name, doc in methods: name = str(name) # IronPython issue #10 if name not in _local_netref_attrs: ns[name] = _make_method(name, doc) ns["__module__"] = modname if modname in sys.modules and hasattr(sys.modules[modname], clsname): ns["__class__"] = getattr(sys.modules[modname], clsname) elif (clsname, modname) in _normalized_builtin_types: ns["__class__"] = _normalized_builtin_types[clsname, modname] else: # to be resolved by the instance ns["__class__"] = None return type(clsname, (BaseNetref,), ns) builtin_classes_cache = {} """The cache of built-in netref classes (each of the types listed in :data:`_builtin_types`). These are shared between all RPyC connections""" # init the builtin_classes_cache for cls in _builtin_types: builtin_classes_cache[cls.__name__, cls.__module__] = class_factory( cls.__name__, cls.__module__, inspect_methods(cls)) rpyc-3.4.4/rpyc/core/protocol.py000066400000000000000000000666671314203541000166350ustar00rootroot00000000000000""" The RPyC protocol """ import sys import weakref import itertools import socket import time import gc from threading import Lock, RLock, Event, Thread from rpyc.lib.compat import pickle, next, is_py3k, maxint, select_error from rpyc.lib.colls import WeakValueDict, RefCountingColl from rpyc.core import consts, brine, vinegar, netref from rpyc.core.async import AsyncResult class PingError(Exception): """The exception raised should :func:`Connection.ping` fail""" pass DEFAULT_CONFIG = dict( # ATTRIBUTES allow_safe_attrs = True, allow_exposed_attrs = True, allow_public_attrs = False, allow_all_attrs = False, safe_attrs = set(['__abs__', '__add__', '__and__', '__bool__', '__cmp__', '__contains__', '__delitem__', '__delslice__', '__div__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__ge__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__hex__', '__iadd__', '__iand__', '__idiv__', '__ifloordiv__', '__ilshift__', '__imod__', '__imul__', '__index__', '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__', '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__', '__len__', '__long__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setitem__', '__setslice__', '__str__', '__sub__', '__truediv__', '__xor__', 'next', '__length_hint__', '__enter__', '__exit__', '__next__',]), exposed_prefix = "exposed_", allow_getattr = True, allow_setattr = False, allow_delattr = False, # EXCEPTIONS include_local_traceback = True, instantiate_custom_exceptions = False, import_custom_exceptions = False, instantiate_oldstyle_exceptions = False, # which don't derive from Exception propagate_SystemExit_locally = False, # whether to propagate SystemExit locally or to the other party propagate_KeyboardInterrupt_locally = True, # whether to propagate KeyboardInterrupt locally or to the other party log_exceptions = True, # MISC allow_pickle = False, connid = None, credentials = None, endpoints = None, logger = None, sync_request_timeout = 30, ) """ The default configuration dictionary of the protocol. You can override these parameters by passing a different configuration dict to the :class:`Connection` class. .. note:: You only need to override the parameters you want to change. There's no need to repeat parameters whose values remain unchanged. ======================================= ================ ===================================================== Parameter Default value Description ======================================= ================ ===================================================== ``allow_safe_attrs`` ``True`` Whether to allow the use of *safe* attributes (only those listed as ``safe_attrs``) ``allow_exposed_attrs`` ``True`` Whether to allow exposed attributes (attributes that start with the ``exposed_prefix``) ``allow_public_attrs`` ``False`` Whether to allow public attributes (attributes that don't start with ``_``) ``allow_all_attrs`` ``False`` Whether to allow all attributes (including private) ``safe_attrs`` ``set([...])`` The set of attributes considered safe ``exposed_prefix`` ``"exposed_"`` The prefix of exposed attributes ``allow_getattr`` ``True`` Whether to allow getting of attributes (``getattr``) ``allow_setattr`` ``False`` Whether to allow setting of attributes (``setattr``) ``allow_delattr`` ``False`` Whether to allow deletion of attributes (``delattr``) ``allow_pickle`` ``False`` Whether to allow the use of ``pickle`` ``include_local_traceback`` ``True`` Whether to include the local traceback in the remote exception ``instantiate_custom_exceptions`` ``False`` Whether to allow instantiation of custom exceptions (not the built in ones) ``import_custom_exceptions`` ``False`` Whether to allow importing of exceptions from not-yet-imported modules ``instantiate_oldstyle_exceptions`` ``False`` Whether to allow instantiation of exceptions which don't derive from ``Exception``. This is not applicable for Python 3 and later. ``propagate_SystemExit_locally`` ``False`` Whether to propagate ``SystemExit`` locally (kill the server) or to the other party (kill the client) ``propagate_KeyboardInterrupt_locally`` ``False`` Whether to propagate ``KeyboardInterrupt`` locally (kill the server) or to the other party (kill the client) ``logger`` ``None`` The logger instance to use to log exceptions (before they are sent to the other party) and other events. If ``None``, no logging takes place. ``connid`` ``None`` **Runtime**: the RPyC connection ID (used mainly for debugging purposes) ``credentials`` ``None`` **Runtime**: the credentails object that was returned by the server's :ref:`authenticator ` or ``None`` ``endpoints`` ``None`` **Runtime**: The connection's endpoints. This is a tuple made of the local socket endpoint (``getsockname``) and the remote one (``getpeername``). This is set by the server upon accepting a connection; client side connections do no have this configuration option set. ``sync_request_timeout`` ``30`` Default timeout for waiting results ======================================= ================ ===================================================== """ _connection_id_generator = itertools.count(1) class Connection(object): """The RPyC *connection* (AKA *protocol*). :param service: the :class:`Service ` to expose :param channel: the :class:`Channel ` over which messages are passed :param config: the connection's configuration dict (overriding parameters from the :data:`default configuration `) :param _lazy: whether or not to initialize the service with the creation of the connection. Default is True. If set to False, you will need to call :func:`_init_service` manually later """ def __init__(self, service, channel, config = {}, _lazy = False): self._closed = True self._config = DEFAULT_CONFIG.copy() self._config.update(config) if self._config["connid"] is None: self._config["connid"] = "conn%d" % (next(_connection_id_generator),) self._channel = channel self._seqcounter = itertools.count() self._recvlock = Lock() self._sendlock = Lock() self._sync_replies = {} self._sync_lock = RLock() self._sync_event = Event() self._async_callbacks = {} self._local_objects = RefCountingColl() self._last_traceback = None self._proxy_cache = WeakValueDict() self._netref_classes_cache = {} self._remote_root = None self._send_queue = [] self._local_root = service(weakref.proxy(self)) if not _lazy: self._init_service() self._closed = False def _init_service(self): self._local_root.on_connect() def __del__(self): self.close() def __enter__(self): return self def __exit__(self, t, v, tb): self.close() def __repr__(self): a, b = object.__repr__(self).split(" object ") return "%s %r object %s" % (a, self._config["connid"], b) # # IO # def _cleanup(self, _anyway = True): if self._closed and not _anyway: return self._closed = True self._channel.close() self._local_root.on_disconnect() self._sync_replies.clear() self._async_callbacks.clear() self._local_objects.clear() self._proxy_cache.clear() self._netref_classes_cache.clear() self._last_traceback = None self._remote_root = None self._local_root = None #self._seqcounter = None #self._config.clear() def close(self, _catchall = True): """closes the connection, releasing all held resources""" if self._closed: return self._closed = True try: self._async_request(consts.HANDLE_CLOSE) except EOFError: pass except Exception: if not _catchall: raise finally: self._cleanup(_anyway = True) @property def closed(self): """Indicates whether the connection has been closed or not""" return self._closed def fileno(self): """Returns the connectin's underlying file descriptor""" return self._channel.fileno() def ping(self, data = None, timeout = 3): """ Asserts that the other party is functioning properly, by making sure the *data* is echoed back before the *timeout* expires :param data: the data to send (leave ``None`` for the default buffer) :param timeout: the maximal time to wait for echo :raises: :class:`PingError` if the echoed data does not match """ if data is None: data = "abcdefghijklmnopqrstuvwxyz" * 20 res = self.async_request(consts.HANDLE_PING, data, timeout = timeout) if res.value != data: raise PingError("echo mismatches sent data") def _get_seq_id(self): return next(self._seqcounter) def _send(self, msg, seq, args): data = brine.dump((msg, seq, args)) # GC might run while sending data # if so, a BaseNetref.__del__ might be called # BaseNetref.__del__ must call asyncreq, # which will cause a deadlock # Solution: # Add the current request to a queue and let the thread that currently # holds the sendlock send it when it's done with its current job. # NOTE: Atomic list operations should be thread safe, # please call me out if they are not on all implementations! self._send_queue.append(data) # It is crucial to check the queue each time AFTER releasing the lock: while self._send_queue: if not self._sendlock.acquire(False): # Another thread holds the lock. It will send the data after # it's done with its current job. We can safely return. return try: # Can happen if another consumer was scheduled in between # `while` and `acquire`: if not self._send_queue: # Must `continue` to ensure that `send_queue` is checked # after releasing the lock! (in case another producer is # scheduled before `release`) continue data = self._send_queue.pop(0) self._channel.send(data) finally: self._sendlock.release() def _send_request(self, seq, handler, args): self._send(consts.MSG_REQUEST, seq, (handler, self._box(args))) def _send_reply(self, seq, obj): self._send(consts.MSG_REPLY, seq, self._box(obj)) def _send_exception(self, seq, exctype, excval, exctb): exc = vinegar.dump(exctype, excval, exctb, include_local_traceback = self._config["include_local_traceback"]) self._send(consts.MSG_EXCEPTION, seq, exc) # # boxing # def _box(self, obj): """store a local object in such a way that it could be recreated on the remote party either by-value or by-reference""" if brine.dumpable(obj): return consts.LABEL_VALUE, obj if type(obj) is tuple: return consts.LABEL_TUPLE, tuple(self._box(item) for item in obj) elif isinstance(obj, netref.BaseNetref) and obj.____conn__() is self: return consts.LABEL_LOCAL_REF, obj.____oid__ else: self._local_objects.add(obj) try: cls = obj.__class__ except Exception: # see issue #16 cls = type(obj) if not isinstance(cls, type): cls = type(obj) return consts.LABEL_REMOTE_REF, (id(obj), cls.__name__, cls.__module__) def _unbox(self, package): """recreate a local object representation of the remote object: if the object is passed by value, just return it; if the object is passed by reference, create a netref to it""" label, value = package if label == consts.LABEL_VALUE: return value if label == consts.LABEL_TUPLE: return tuple(self._unbox(item) for item in value) if label == consts.LABEL_LOCAL_REF: return self._local_objects[value] if label == consts.LABEL_REMOTE_REF: oid, clsname, modname = value if oid in self._proxy_cache: proxy = self._proxy_cache[oid] proxy.____refcount__ += 1 # other side increased refcount on boxing, # if I'm returning from cache instead of new object, # must increase refcount to match return proxy proxy = self._netref_factory(oid, clsname, modname) self._proxy_cache[oid] = proxy return proxy raise ValueError("invalid label %r" % (label,)) def _netref_factory(self, oid, clsname, modname): typeinfo = (clsname, modname) if typeinfo in self._netref_classes_cache: cls = self._netref_classes_cache[typeinfo] elif typeinfo in netref.builtin_classes_cache: cls = netref.builtin_classes_cache[typeinfo] else: info = self.sync_request(consts.HANDLE_INSPECT, oid) cls = netref.class_factory(clsname, modname, info) self._netref_classes_cache[typeinfo] = cls return cls(weakref.ref(self), oid) # # dispatching # def _dispatch_request(self, seq, raw_args): try: handler, args = raw_args args = self._unbox(args) res = self._HANDLERS[handler](self, *args) except: # need to catch old style exceptions too t, v, tb = sys.exc_info() self._last_traceback = tb logger = self._config["logger"] if logger and t is not StopIteration: logger.debug("Exception caught", exc_info=True) if t is SystemExit and self._config["propagate_SystemExit_locally"]: raise if t is KeyboardInterrupt and self._config["propagate_KeyboardInterrupt_locally"]: raise self._send_exception(seq, t, v, tb) else: self._send_reply(seq, res) def _dispatch_reply(self, seq, raw): obj = self._unbox(raw) if seq in self._async_callbacks: self._async_callbacks.pop(seq)(False, obj) else: self._sync_replies[seq] = (False, obj) def _dispatch_exception(self, seq, raw): obj = vinegar.load(raw, import_custom_exceptions = self._config["import_custom_exceptions"], instantiate_custom_exceptions = self._config["instantiate_custom_exceptions"], instantiate_oldstyle_exceptions = self._config["instantiate_oldstyle_exceptions"]) if seq in self._async_callbacks: self._async_callbacks.pop(seq)(True, obj) else: self._sync_replies[seq] = (True, obj) # # serving # def _recv(self, timeout, wait_for_lock): if not self._recvlock.acquire(wait_for_lock): return None try: if self._channel.poll(timeout): data = self._channel.recv() else: data = None except EOFError: self.close() raise finally: self._recvlock.release() return data def _dispatch(self, data): msg, seq, args = brine.load(data) if msg == consts.MSG_REQUEST: self._dispatch_request(seq, args) elif msg == consts.MSG_REPLY: self._dispatch_reply(seq, args) elif msg == consts.MSG_EXCEPTION: self._dispatch_exception(seq, args) else: raise ValueError("invalid message type: %r" % (msg,)) def sync_recv_and_dispatch(self, timeout, wait_for_lock): # lock or wait for signal if self._sync_lock.acquire(False): try: self._sync_event.clear() data = self._recv(timeout, wait_for_lock = False) if not data: return False self._dispatch(data) return True finally: self._sync_lock.release() self._sync_event.set() else: self._sync_event.wait() def poll(self, timeout = 0): """Serves a single transaction, should one arrives in the given interval. Note that handling a request/reply may trigger nested requests, which are all part of a single transaction. :returns: ``True`` if a transaction was served, ``False`` otherwise""" return self.sync_recv_and_dispatch(timeout, wait_for_lock=False) def serve(self, timeout = 1): """Serves a single request or reply that arrives within the given time frame (default is 1 sec). Note that the dispatching of a request might trigger multiple (nested) requests, thus this function may be reentrant. :returns: ``True`` if a request or reply were received, ``False`` otherwise. """ return self.sync_recv_and_dispatch(timeout, wait_for_lock=True) def serve_all(self): """Serves all requests and replies for as long as the connection is alive.""" try: while True: self.serve(None) except (socket.error, select_error, IOError): if not self.closed: raise except EOFError: pass finally: self.close() def serve_threaded(self, thread_count=10): def _thread_target(): try: while True: self.serve(None) except (socket.error, select_error, IOError): if not self.closed: raise except EOFError: pass threads = [] """Serves all requests and replies for as long as the connection is alive.""" try: for _ in range(thread_count): thread = Thread(target=_thread_target) thread.daemon = True thread.start() threads.append(thread) for thread in threads: thread.join() finally: self.close() def poll_all(self, timeout=0): """Serves all requests and replies that arrive within the given interval. :returns: ``True`` if at least a single transaction was served, ``False`` otherwise """ at_least_once = False t0 = time.time() duration = timeout try: while True: if self.poll(duration): at_least_once = True if timeout is not None: duration = t0 + timeout - time.time() if duration < 0: break except EOFError: pass return at_least_once # # requests # def sync_request(self, handler, *args): """Sends a synchronous request (waits for the reply to arrive) :raises: any exception that the requets may be generated :returns: the result of the request """ seq = self._get_seq_id() self._send_request(seq, handler, args) timeout = self._config["sync_request_timeout"] while seq not in self._sync_replies: self.sync_recv_and_dispatch(timeout, True) isexc, obj = self._sync_replies.pop(seq) if isexc: raise obj else: return obj def _async_request(self, handler, args = (), callback = (lambda a, b: None)): seq = self._get_seq_id() self._async_callbacks[seq] = callback try: self._send_request(seq, handler, args) except: if seq in self._async_callbacks: del self._async_callbacks[seq] raise def async_request(self, handler, *args, **kwargs): """Send an asynchronous request (does not wait for it to finish) :returns: an :class:`rpyc.core.async.AsyncResult` object, which will eventually hold the result (or exception) """ timeout = kwargs.pop("timeout", None) if kwargs: raise TypeError("got unexpected keyword argument(s) %s" % (list(kwargs.keys()),)) res = AsyncResult(weakref.proxy(self)) self._async_request(handler, args, res) if timeout is not None: res.set_expiry(timeout) return res @property def root(self): """Fetches the root object (service) of the other party""" if self._remote_root is None: self._remote_root = self.sync_request(consts.HANDLE_GETROOT) return self._remote_root # # attribute access # def _check_attr(self, obj, name): if self._config["allow_exposed_attrs"]: if name.startswith(self._config["exposed_prefix"]): name2 = name else: name2 = self._config["exposed_prefix"] + name if hasattr(obj, name2): return name2 if self._config["allow_all_attrs"]: return name if self._config["allow_safe_attrs"] and name in self._config["safe_attrs"]: return name if self._config["allow_public_attrs"] and not name.startswith("_"): return name return False def _access_attr(self, oid, name, args, overrider, param, default): if is_py3k: if type(name) is bytes: name = str(name, "utf8") elif type(name) is not str: raise TypeError("name must be a string") else: if type(name) not in (str, unicode): raise TypeError("name must be a string") name = str(name) # IronPython issue #10 + py3k issue obj = self._local_objects[oid] accessor = getattr(type(obj), overrider, None) if accessor is None: name2 = self._check_attr(obj, name) if not self._config[param] or not name2: raise AttributeError("cannot access %r" % (name,)) accessor = default name = name2 return accessor(obj, name, *args) # # request handlers # def _handle_ping(self, data): return data def _handle_close(self): self._cleanup() def _handle_getroot(self): return self._local_root def _handle_del(self, oid, count=1): self._local_objects.decref(oid) def _handle_repr(self, oid): return repr(self._local_objects[oid]) def _handle_str(self, oid): return str(self._local_objects[oid]) def _handle_cmp(self, oid, other): # cmp() might enter recursive resonance... yet another workaround #return cmp(self._local_objects[oid], other) obj = self._local_objects[oid] try: return type(obj).__cmp__(obj, other) except (AttributeError, TypeError): return NotImplemented def _handle_hash(self, oid): return hash(self._local_objects[oid]) def _handle_call(self, oid, args, kwargs=()): return self._local_objects[oid](*args, **dict(kwargs)) def _handle_dir(self, oid): return tuple(dir(self._local_objects[oid])) def _handle_inspect(self, oid): return tuple(netref.inspect_methods(self._local_objects[oid])) def _handle_getattr(self, oid, name): return self._access_attr(oid, name, (), "_rpyc_getattr", "allow_getattr", getattr) def _handle_delattr(self, oid, name): return self._access_attr(oid, name, (), "_rpyc_delattr", "allow_delattr", delattr) def _handle_setattr(self, oid, name, value): return self._access_attr(oid, name, (value,), "_rpyc_setattr", "allow_setattr", setattr) def _handle_callattr(self, oid, name, args, kwargs): return self._handle_getattr(oid, name)(*args, **dict(kwargs)) def _handle_pickle(self, oid, proto): if not self._config["allow_pickle"]: raise ValueError("pickling is disabled") return pickle.dumps(self._local_objects[oid], proto) def _handle_buffiter(self, oid, count): items = [] obj = self._local_objects[oid] i = 0 try: while i < count: items.append(next(obj)) i += 1 except StopIteration: pass return tuple(items) def _handle_oldslicing(self, oid, attempt, fallback, start, stop, args): try: # first try __xxxitem__ getitem = self._handle_getattr(oid, attempt) return getitem(slice(start, stop), *args) except Exception: # fallback to __xxxslice__. see issue #41 if stop is None: stop = maxint getslice = self._handle_getattr(oid, fallback) return getslice(start, stop, *args) # collect handlers _HANDLERS = {} for name, obj in dict(locals()).items(): if name.startswith("_handle_"): name2 = "HANDLE_" + name[8:].upper() if hasattr(consts, name2): _HANDLERS[getattr(consts, name2)] = obj else: raise NameError("no constant defined for %r", name) del name, name2, obj rpyc-3.4.4/rpyc/core/reactor.py000066400000000000000000000016321314203541000164100ustar00rootroot00000000000000import os import select import threading class SelectReactor(object): TIMEOUT = 0.5 if os.name == "nt" else None def __init__(self): self._active = False self._readfds = set() def register_read(self, fileobj): self._readfds.append(fileobj) def run(self): self._active = True while self._active: rlist, _, _ = select.select(self._readfds, (), (), self.TIMEOUT) for fileobj in rlist: data = fileobj.recv(16000) if not data: fileobj.close() self._readfds.discard(fileobj) _reactor = SelectReactor() def _reactor_thread(): pass _thd = None def start_reactor(): global _thd if _thd is None: raise ValueError("already started") _thd = threading.Thread("rpyc reactor thread", target = _reactor_thread) _thd.setDaemon(True) _thd.start() rpyc-3.4.4/rpyc/core/service.py000066400000000000000000000130421314203541000164070ustar00rootroot00000000000000""" Services are the heart of RPyC: each side of the connection exposes a *service*, which define the capabilities available to the other side. Note that the services by both parties need not be symmetric, e.g., one side may exposed *service A*, while the other may expose *service B*. As long as the two can interoperate, you're good to go. """ from rpyc.lib.compat import execute, is_py3k class Service(object): """The service base-class. Derive from this class to implement custom RPyC services: * The name of the class implementing the ``Foo`` service should match the pattern ``FooService`` (suffixed by the word 'Service') :: class FooService(Service): pass FooService.get_service_name() # 'FOO' FooService.get_service_aliases() # ['FOO'] * To supply a different name or aliases, use the ``ALIASES`` class attribute :: class Foobar(Service): ALIASES = ["foo", "bar", "lalaland"] Foobar.get_service_name() # 'FOO' Foobar.get_service_aliases() # ['FOO', 'BAR', 'LALALAND'] * Override :func:`on_connect` to perform custom initialization * Override :func:`on_disconnect` to perform custom finalization * To add exposed methods or attributes, simply define them normally, but prefix their name by ``exposed_``, e.g. :: class FooService(Service): def exposed_add(self, x, y): return x + y * All other names (not prefixed by ``exposed_``) are local (not accessible to the other party) .. note:: You can override ``_rpyc_getattr``, ``_rpyc_setattr`` and ``_rpyc_delattr`` to change attribute lookup -- but beware of possible **security implications!** """ __slots__ = ["_conn"] ALIASES = () def __init__(self, conn): self._conn = conn def on_connect(self): """called when the connection is established""" pass def on_disconnect(self): """called when the connection had already terminated for cleanup (must not perform any IO on the connection)""" pass # Using default defined in 'protocol.Connection._access_attr' for: # def _rpyc_getattr(self, name): def _rpyc_delattr(self, name): raise AttributeError("access denied") def _rpyc_setattr(self, name, value): raise AttributeError("access denied") @classmethod def get_service_aliases(cls): """returns a list of the aliases of this service""" if cls.ALIASES: return tuple(str(n).upper() for n in cls.ALIASES) name = cls.__name__.upper() if name.endswith("SERVICE"): name = name[:-7] return (name,) @classmethod def get_service_name(cls): """returns the canonical name of the service (which is its first alias)""" return cls.get_service_aliases()[0] exposed_get_service_aliases = get_service_aliases exposed_get_service_name = get_service_name class VoidService(Service): """void service - an do-nothing service""" __slots__ = () class ModuleNamespace(object): """used by the :class:`SlaveService` to implement the magical 'module namespace'""" __slots__ = ["__getmodule", "__cache", "__weakref__"] def __init__(self, getmodule): self.__getmodule = getmodule self.__cache = {} def __contains__(self, name): try: self[name] except ImportError: return False else: return True def __getitem__(self, name): if type(name) is tuple: name = ".".join(name) if name not in self.__cache: self.__cache[name] = self.__getmodule(name) return self.__cache[name] def __getattr__(self, name): return self[name] class SlaveService(Service): """The SlaveService allows the other side to perform arbitrary imports and execution arbitrary code on the server. This is provided for compatibility with the classic RPyC (2.6) modus operandi. This service is very useful in local, secure networks, but it exposes a **major security risk** otherwise.""" __slots__ = ["exposed_namespace"] def on_connect(self): self.exposed_namespace = {} self._conn._config.update(dict( allow_all_attrs = True, allow_pickle = True, allow_getattr = True, allow_setattr = True, allow_delattr = True, import_custom_exceptions = True, instantiate_custom_exceptions = True, instantiate_oldstyle_exceptions = True, )) # shortcuts self._conn.modules = ModuleNamespace(self._conn.root.getmodule) self._conn.eval = self._conn.root.eval self._conn.execute = self._conn.root.execute self._conn.namespace = self._conn.root.namespace if is_py3k: self._conn.builtin = self._conn.modules.builtins else: self._conn.builtin = self._conn.modules.__builtin__ self._conn.builtins = self._conn.builtin def exposed_execute(self, text): """execute arbitrary code (using ``exec``)""" execute(text, self.exposed_namespace) def exposed_eval(self, text): """evaluate arbitrary code (using ``eval``)""" return eval(text, self.exposed_namespace) def exposed_getmodule(self, name): """imports an arbitrary module""" return __import__(name, None, None, "*") def exposed_getconn(self): """returns the local connection instance to the other side""" return self._conn rpyc-3.4.4/rpyc/core/stream.py000066400000000000000000000416531314203541000162530ustar00rootroot00000000000000""" An abstraction layer over OS-dependent file-like objects, that provides a consistent view of a *duplex byte stream*. """ import sys import os import socket import time import errno from rpyc.lib import safe_import from rpyc.lib.compat import poll, select_error, BYTES_LITERAL, get_exc_errno, maxint win32file = safe_import("win32file") win32pipe = safe_import("win32pipe") msvcrt = safe_import("msvcrt") ssl = safe_import("ssl") retry_errnos = (errno.EAGAIN, errno.EWOULDBLOCK) class Stream(object): """Base Stream""" __slots__ = () def close(self): """closes the stream, releasing any system resources associated with it""" raise NotImplementedError() @property def closed(self): """tests whether the stream is closed or not""" raise NotImplementedError() def fileno(self): """returns the stream's file descriptor""" raise NotImplementedError() def poll(self, timeout): """indicates whether the stream has data to read (within *timeout* seconds)""" try: p = poll() # from lib.compat, it may be a select object on non-Unix platforms p.register(self.fileno(), "r") while True: try: rl = p.poll(timeout) except select_error: ex = sys.exc_info()[1] if ex.args[0] == errno.EINTR: continue else: raise else: break except ValueError: # if the underlying call is a select(), then the following errors may happen: # - "ValueError: filedescriptor cannot be a negative integer (-1)" # - "ValueError: filedescriptor out of range in select()" # let's translate them to select.error ex = sys.exc_info()[1] raise select_error(str(ex)) return bool(rl) def read(self, count): """reads **exactly** *count* bytes, or raise EOFError :param count: the number of bytes to read :returns: read data """ raise NotImplementedError() def write(self, data): """writes the entire *data*, or raise EOFError :param data: a string of binary data """ raise NotImplementedError() class ClosedFile(object): """Represents a closed file object (singleton)""" __slots__ = () def __getattr__(self, name): if name.startswith("__"): # issue 71 raise AttributeError("stream has been closed") raise EOFError("stream has been closed") def close(self): pass @property def closed(self): return True def fileno(self): raise EOFError("stream has been closed") ClosedFile = ClosedFile() class SocketStream(Stream): """A stream over a socket""" __slots__ = ("sock",) MAX_IO_CHUNK = 8000 def __init__(self, sock): self.sock = sock @classmethod def _connect(cls, host, port, family = socket.AF_INET, socktype = socket.SOCK_STREAM, proto = 0, timeout = 3, nodelay = False, keepalive = False): family, socktype, proto, _, sockaddr = socket.getaddrinfo(host, port, family, socktype, proto)[0] s = socket.socket(family, socktype, proto) s.settimeout(timeout) s.connect(sockaddr) if nodelay: s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) if keepalive: s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) if hasattr(socket, "TCP_KEEPIDLE") and hasattr(socket, "TCP_KEEPINTVL") and hasattr(socket, "TCP_KEEPCNT"): # Linux specific: after idle seconds, start sending keepalives every seconds. # Drop connection after 5 failed keepalives # `keepalive` may be a bool or an integer if keepalive is True: keepalive = 60 if keepalive < 1: raise ValueError("Keepalive minimal value is 1 second") s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5) s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, keepalive) s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, keepalive) return s @classmethod def connect(cls, host, port, **kwargs): """factory method that creates a ``SocketStream`` over a socket connected to *host* and *port* :param host: the host name :param port: the TCP port :param family: specify a custom socket family :param socktype: specify a custom socket type :param proto: specify a custom socket protocol :param timeout: connection timeout (default is 3 seconds) :param nodelay: set the TCP_NODELAY socket option :param keepalive: enable TCP keepalives. The value should be a boolean, but on Linux, it can also be an integer specifying the keepalive interval (in seconds) :param ipv6: if True, creates an IPv6 socket (``AF_INET6``); otherwise an IPv4 (``AF_INET``) socket is created :returns: a :class:`SocketStream` """ if kwargs.pop("ipv6", False): kwargs["family"] = socket.AF_INET6 return cls(cls._connect(host, port, **kwargs)) @classmethod def unix_connect(cls, path, timeout = 3): """factory method that creates a ``SocketStream `` over a unix domain socket located in *path* :param path: the path to the unix domain socket :param timeout: socket timeout """ s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.settimeout(timeout) s.connect(path) return cls(s) @classmethod def ssl_connect(cls, host, port, ssl_kwargs, **kwargs): """factory method that creates a ``SocketStream`` over an SSL-wrapped socket, connected to *host* and *port* with the given credentials. :param host: the host name :param port: the TCP port :param ssl_kwargs: a dictionary of keyword arguments to be passed directly to ``ssl.wrap_socket`` :param kwargs: additional keyword arguments: ``family``, ``socktype``, ``proto``, ``timeout``, ``nodelay``, passed directly to the ``socket`` constructor, or ``ipv6``. :param ipv6: if True, creates an IPv6 socket (``AF_INET6``); otherwise an IPv4 (``AF_INET``) socket is created :returns: a :class:`SocketStream` """ if kwargs.pop("ipv6", False): kwargs["family"] = socket.AF_INET6 s = cls._connect(host, port, **kwargs) s2 = ssl.wrap_socket(s, **ssl_kwargs) return cls(s2) @property def closed(self): return self.sock is ClosedFile def close(self): if not self.closed: try: self.sock.shutdown(socket.SHUT_RDWR) except Exception: pass self.sock.close() self.sock = ClosedFile def fileno(self): try: return self.sock.fileno() except socket.error: self.close() ex = sys.exc_info()[1] if get_exc_errno(ex) == errno.EBADF: raise EOFError() else: raise def read(self, count): data = [] while count > 0: try: buf = self.sock.recv(min(self.MAX_IO_CHUNK, count)) except socket.timeout: continue except socket.error: ex = sys.exc_info()[1] if get_exc_errno(ex) in retry_errnos: # windows just has to be a bitch continue self.close() raise EOFError(ex) if not buf: self.close() raise EOFError("connection closed by peer") data.append(buf) count -= len(buf) return BYTES_LITERAL("").join(data) def write(self, data): try: while data: count = self.sock.send(data[:self.MAX_IO_CHUNK]) data = data[count:] except socket.error: ex = sys.exc_info()[1] self.close() raise EOFError(ex) class TunneledSocketStream(SocketStream): """A socket stream over an SSH tunnel (terminates the tunnel when the connection closes)""" __slots__ = ("tun",) def __init__(self, sock): self.sock = sock self.tun = None def close(self): SocketStream.close(self) if self.tun: self.tun.close() class PipeStream(Stream): """A stream over two simplex pipes (one used to input, another for output)""" __slots__ = ("incoming", "outgoing") MAX_IO_CHUNK = 32000 def __init__(self, incoming, outgoing): outgoing.flush() self.incoming = incoming self.outgoing = outgoing @classmethod def from_std(cls): """factory method that creates a PipeStream over the standard pipes (``stdin`` and ``stdout``) :returns: a :class:`PipeStream` instance """ return cls(sys.stdin, sys.stdout) @classmethod def create_pair(cls): """factory method that creates two pairs of anonymous pipes, and creates two PipeStreams over them. Useful for ``fork()``. :returns: a tuple of two :class:`PipeStream` instances """ r1, w1 = os.pipe() r2, w2 = os.pipe() side1 = cls(os.fdopen(r1, "rb"), os.fdopen(w2, "wb")) side2 = cls(os.fdopen(r2, "rb"), os.fdopen(w1, "wb")) return side1, side2 @property def closed(self): return self.incoming is ClosedFile def close(self): self.incoming.close() self.outgoing.close() self.incoming = ClosedFile self.outgoing = ClosedFile def fileno(self): return self.incoming.fileno() def read(self, count): data = [] try: while count > 0: buf = os.read(self.incoming.fileno(), min(self.MAX_IO_CHUNK, count)) if not buf: raise EOFError("connection closed by peer") data.append(buf) count -= len(buf) except EOFError: self.close() raise except EnvironmentError: ex = sys.exc_info()[1] self.close() raise EOFError(ex) return BYTES_LITERAL("").join(data) def write(self, data): try: while data: chunk = data[:self.MAX_IO_CHUNK] written = os.write(self.outgoing.fileno(), chunk) data = data[written:] except EnvironmentError: ex = sys.exc_info()[1] self.close() raise EOFError(ex) class Win32PipeStream(Stream): """A stream over two simplex pipes (one used to input, another for output). This is an implementation for Windows pipes (which suck)""" __slots__ = ("incoming", "outgoing", "_fileno", "_keepalive") PIPE_BUFFER_SIZE = 130000 MAX_IO_CHUNK = 32000 def __init__(self, incoming, outgoing): self._keepalive = (incoming, outgoing) if hasattr(incoming, "fileno"): self._fileno = incoming.fileno() incoming = msvcrt.get_osfhandle(incoming.fileno()) if hasattr(outgoing, "fileno"): outgoing = msvcrt.get_osfhandle(outgoing.fileno()) self.incoming = incoming self.outgoing = outgoing @classmethod def from_std(cls): return cls(sys.stdin, sys.stdout) @classmethod def create_pair(cls): r1, w1 = win32pipe.CreatePipe(None, cls.PIPE_BUFFER_SIZE) r2, w2 = win32pipe.CreatePipe(None, cls.PIPE_BUFFER_SIZE) return cls(r1, w2), cls(r2, w1) def fileno(self): return self._fileno @property def closed(self): return self.incoming is ClosedFile def close(self): if self.closed: return try: win32file.CloseHandle(self.incoming) except Exception: pass self.incoming = ClosedFile try: win32file.CloseHandle(self.outgoing) except Exception: pass self.outgoing = ClosedFile def read(self, count): try: data = [] while count > 0: dummy, buf = win32file.ReadFile(self.incoming, int(min(self.MAX_IO_CHUNK, count))) count -= len(buf) data.append(buf) except TypeError: ex = sys.exc_info()[1] if not self.closed: raise raise EOFError(ex) except win32file.error: ex = sys.exc_info()[1] self.close() raise EOFError(ex) return BYTES_LITERAL("").join(data) def write(self, data): try: while data: dummy, count = win32file.WriteFile(self.outgoing, data[:self.MAX_IO_CHUNK]) data = data[count:] except TypeError: ex = sys.exc_info()[1] if not self.closed: raise raise EOFError(ex) except win32file.error: ex = sys.exc_info()[1] self.close() raise EOFError(ex) def poll(self, timeout, interval = 0.1): """a poor man's version of select()""" if timeout is None: timeout = maxint length = 0 tmax = time.time() + timeout try: while length == 0: length = win32pipe.PeekNamedPipe(self.incoming, 0)[1] if time.time() >= tmax: break time.sleep(interval) except TypeError: ex = sys.exc_info()[1] if not self.closed: raise raise EOFError(ex) return length != 0 class NamedPipeStream(Win32PipeStream): """A stream over two named pipes (one used to input, another for output). Windows implementation.""" NAMED_PIPE_PREFIX = r'\\.\pipe\rpyc_' PIPE_IO_TIMEOUT = 3 CONNECT_TIMEOUT = 3 __slots__ = ("is_server_side",) def __init__(self, handle, is_server_side): Win32PipeStream.__init__(self, handle, handle) self.is_server_side = is_server_side @classmethod def from_std(cls): raise NotImplementedError() @classmethod def create_pair(cls): raise NotImplementedError() @classmethod def create_server(cls, pipename, connect = True): """factory method that creates a server-side ``NamedPipeStream``, over a newly-created *named pipe* of the given name. :param pipename: the name of the pipe. It will be considered absolute if it starts with ``\\\\.``; otherwise ``\\\\.\\pipe\\rpyc`` will be prepended. :param connect: whether to connect on creation or not :returns: a :class:`NamedPipeStream` instance """ if not pipename.startswith("\\\\."): pipename = cls.NAMED_PIPE_PREFIX + pipename handle = win32pipe.CreateNamedPipe( pipename, win32pipe.PIPE_ACCESS_DUPLEX, win32pipe.PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT, 1, cls.PIPE_BUFFER_SIZE, cls.PIPE_BUFFER_SIZE, cls.PIPE_IO_TIMEOUT * 1000, None ) inst = cls(handle, True) if connect: inst.connect_server() return inst def connect_server(self): """connects the server side of an unconnected named pipe (blocks until a connection arrives)""" if not self.is_server_side: raise ValueError("this must be the server side") win32pipe.ConnectNamedPipe(self.incoming, None) @classmethod def create_client(cls, pipename): """factory method that creates a client-side ``NamedPipeStream``, over a newly-created *named pipe* of the given name. :param pipename: the name of the pipe. It will be considered absolute if it starts with ``\\\\.``; otherwise ``\\\\.\\pipe\\rpyc`` will be prepended. :returns: a :class:`NamedPipeStream` instance """ if not pipename.startswith("\\\\."): pipename = cls.NAMED_PIPE_PREFIX + pipename handle = win32file.CreateFile( pipename, win32file.GENERIC_READ | win32file.GENERIC_WRITE, 0, None, win32file.OPEN_EXISTING, 0, None ) return cls(handle, False) def close(self): if self.closed: return if self.is_server_side: win32file.FlushFileBuffers(self.outgoing) win32pipe.DisconnectNamedPipe(self.outgoing) Win32PipeStream.close(self) if sys.platform == "win32": PipeStream = Win32PipeStream rpyc-3.4.4/rpyc/core/vinegar.py000066400000000000000000000163031314203541000164050ustar00rootroot00000000000000""" **Vinegar** ("when things go sour") is a safe serializer for exceptions. The :data`configuration parameters ` control its mode of operation, for instance, whether to allow *old-style* exceptions (that do not derive from ``Exception``), whether to allow the :func:`load` to import custom modules (imposes a security risk), etc. Note that by changing the configuration parameters, this module can be made non-secure. Keep this in mind. """ import sys import traceback try: import exceptions as exceptions_module except ImportError: import builtins as exceptions_module try: from types import InstanceType, ClassType except ImportError: ClassType = type from rpyc.core import brine from rpyc.core import consts from rpyc.lib.compat import is_py3k try: BaseException except NameError: # python 2.4 compatible BaseException = Exception def dump(typ, val, tb, include_local_traceback): """Dumps the given exceptions info, as returned by ``sys.exc_info()`` :param typ: the exception's type (class) :param val: the exceptions' value (instance) :param tb: the exception's traceback (a ``traceback`` object) :param include_local_traceback: whether or not to include the local traceback in the dumped info. This may expose the other side to implementation details (code) and package structure, and may theoretically impose a security risk. :returns: A tuple of ``((module name, exception name), arguments, attributes, traceback text)``. This tuple can be safely passed to :func:`brine.dump ` """ if typ is StopIteration: return consts.EXC_STOP_ITERATION # optimization if type(typ) is str: return typ if include_local_traceback: tbtext = "".join(traceback.format_exception(typ, val, tb)) else: tbtext = "" attrs = [] args = [] ignored_attrs = frozenset(["_remote_tb", "with_traceback"]) for name in dir(val): if name == "args": for a in val.args: if brine.dumpable(a): args.append(a) else: args.append(repr(a)) elif name.startswith("_") or name in ignored_attrs: continue else: try: attrval = getattr(val, name) except AttributeError: # skip this attr. see issue #108 continue if not brine.dumpable(attrval): attrval = repr(attrval) attrs.append((name, attrval)) return (typ.__module__, typ.__name__), tuple(args), tuple(attrs), tbtext def load(val, import_custom_exceptions, instantiate_custom_exceptions, instantiate_oldstyle_exceptions): """ Loads a dumped exception (the tuple returned by :func:`dump`) info a throwable exception object. If the exception cannot be instantiated for any reason (i.e., the security parameters do not allow it, or the exception class simply doesn't exist on the local machine), a :class:`GenericException` instance will be returned instead, containing all of the original exception's details. :param val: the dumped exception :param import_custom_exceptions: whether to allow this function to import custom modules (imposes a security risk) :param instantiate_custom_exceptions: whether to allow this function to instantiate "custom exceptions" (i.e., not one of the built-in exceptions, such as ``ValueError``, ``OSError``, etc.) :param instantiate_oldstyle_exceptions: whether to allow this function to instantiate exception classes that do not derive from ``BaseException``. This is required to support old-style exceptions. Not applicable for Python 3 and above. :returns: A throwable exception object """ if val == consts.EXC_STOP_ITERATION: return StopIteration # optimization if type(val) is str: return val # deprecated string exceptions (modname, clsname), args, attrs, tbtext = val if import_custom_exceptions and modname not in sys.modules: try: __import__(modname, None, None, "*") except Exception: pass if instantiate_custom_exceptions: if modname in sys.modules: cls = getattr(sys.modules[modname], clsname, None) else: cls = None elif modname == exceptions_module.__name__: cls = getattr(exceptions_module, clsname, None) else: cls = None if is_py3k: if not isinstance(cls, type) or not issubclass(cls, BaseException): cls = None else: if not isinstance(cls, (type, ClassType)): cls = None elif issubclass(cls, ClassType) and not instantiate_oldstyle_exceptions: cls = None elif not issubclass(cls, BaseException): cls = None if cls is None: fullname = "%s.%s" % (modname, clsname) # py2: `type()` expects `str` not `unicode`! fullname = str(fullname) if fullname not in _generic_exceptions_cache: fakemodule = {"__module__" : "%s/%s" % (__name__, modname)} if isinstance(GenericException, ClassType): _generic_exceptions_cache[fullname] = ClassType(fullname, (GenericException,), fakemodule) else: _generic_exceptions_cache[fullname] = type(fullname, (GenericException,), fakemodule) cls = _generic_exceptions_cache[fullname] cls = _get_exception_class(cls) # support old-style exception classes if ClassType is not type and isinstance(cls, ClassType): exc = InstanceType(cls) else: exc = cls.__new__(cls) exc.args = args for name, attrval in attrs: setattr(exc, name, attrval) exc._remote_tb = tbtext return exc class GenericException(Exception): """A 'generic exception' that is raised when the exception the gotten from the other party cannot be instantiated locally""" pass _generic_exceptions_cache = {} _exception_classes_cache = {} def _get_exception_class(cls): if cls in _exception_classes_cache: return _exception_classes_cache[cls] # subclass the exception class' to provide a version of __str__ that supports _remote_tb class Derived(cls): def __str__(self): try: text = cls.__str__(self) except Exception: text = "" if hasattr(self, "_remote_tb"): text += "\n\n========= Remote Traceback (%d) =========\n%s" % ( self._remote_tb.count("\n\n========= Remote Traceback") + 1, self._remote_tb) return text def __repr__(self): return str(self) Derived.__name__ = cls.__name__ Derived.__module__ = cls.__module__ _exception_classes_cache[cls] = Derived return Derived rpyc-3.4.4/rpyc/experimental/000077500000000000000000000000001314203541000161425ustar00rootroot00000000000000rpyc-3.4.4/rpyc/experimental/__init__.py000066400000000000000000000000001314203541000202410ustar00rootroot00000000000000rpyc-3.4.4/rpyc/experimental/retunnel.py000066400000000000000000000137731314203541000203630ustar00rootroot00000000000000import socket import random import time from Queue import Queue, Empty as QueueEmpty from rpyc.core.stream import Stream, TunneledSocketStream, ClosedFile COOKIE_LENGTH = 8 class ReconnectingTunnelStream(Stream): RETRIES = 5 def __init__(self, remote_machine, destination_port, retries = RETRIES): self.remote_machine = remote_machine self.destination_port = destination_port self.retries = retries self.cookie = "".join(chr(random.randint(0, 255)) for _ in range(COOKIE_LENGTH)) self.stream = None def close(self): if self.stream is not None and not self.closed: self.stream.close() self.stream = ClosedFile @property def closed(self): return self.stream is ClosedFile def fileno(self): return self._safeio(lambda stream: stream.fileno()) def _reconnect(self): # choose random local_port s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("localhost", 0)) local_port = s.getsockname()[1] s.close() # create a tunnel from local_port:destination_port and connect it tun = self.remote_machine.tunnel(local_port, self.destination_port) stream = TunneledSocketStream.connect("localhost", local_port) stream.write(self.cookie) stream.tun = tun # print "ReconnectingTunnelStream._reconnect: established a tunnel from localhost:%r to %s:%r" % ( # local_port, self.remote_machine, self.destination_port) return stream def _safeio(self, callback): if self.closed: raise ValueError("I/O operation on closed file") for i in range(self.retries): try: if not self.stream: self.stream = self._reconnect() return callback(self.stream) except (EOFError, IOError, OSError, socket.error): if i >= self.retries - 1: raise if self.stream: self.stream.close() self.stream = None time.sleep(0.5) def write(self, data): # print "ReconnectingTunnelStream.write(%r)" % (len(data),) return self._safeio(lambda stream: stream.write(data)) def read(self, count): # print "ReconnectingTunnelStream.read(%r)" % (count,) return self._safeio(lambda stream: stream.read(count)) class MultiplexingListener(object): REACCEPT_TIMEOUT = 10 RETRIES = 5 def __init__(self, reaccept_timeout = REACCEPT_TIMEOUT, retries = RETRIES): self.listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.reaccept_timeout = reaccept_timeout self.retries = retries self.client_map = {} def close(self): self.listener.close() self.listener = ClosedFile def fileno(self): return self.listener.getfileno() def getsockname(self): return self.listener.getsockname() def listen(self, backlog): self.listener.listen(backlog) def bind(self, addrinfo): self.listener.bind(addrinfo) def settimeout(self, timeout): self.listener.settimeout(timeout) def setsockopt(self, level, option, value): return self.listener.setsockopt(level, option, value) def shutdown(self, mode): self.listener.shutdown(mode) def accept(self): while True: # print "MultiplexingListener.accept" sock, addrinfo = self.listener.accept() cookie = sock.recv(COOKIE_LENGTH) # print "MultiplexingListener.accept: got cookie %r" % (cookie,) if cookie not in self.client_map: self.client_map[cookie] = Queue(1) self.client_map[cookie].put(sock) # print "MultiplexingListener.accept: new, map=%r" % (self.client_map,) resock = ReconnectingSocket(self, cookie, self.retries) return resock, addrinfo else: self.client_map[cookie].put(sock) # print "MultiplexingListener.accept: old, map=%r" % (self.client_map,) def reaccept(self, cookie): # print "MultiplexingListener.reaccept: %r" % (cookie,) try: return self.client_map[cookie].get(self.reaccept_timeout) except QueueEmpty: raise EOFError("Client did not reconnect within the timeout") class ReconnectingSocket(object): def __init__(self, listener, cookie, retries): self.listener = listener self.cookie = cookie self.sock = None self.retries = retries self.blocking_mode = None def close(self): if self.sock: self.sock.close() self.sock = ClosedFile def fileno(self): return self._safeio(lambda sock: sock.fileno()) def getsockname(self): return self._safeio(lambda sock: sock.getsockname()) def getpeername(self): return self._safeio(lambda sock: sock.getpeername()) def shutdown(self, mode): if self.sock: self.sock.shutdown(mode) def setblocking(self, mode): self.blocking_mode = mode if self.sock: self.sock.setblocking(mode) def _safeio(self, callback): for i in range(self.retries): if self.sock is None: self.sock = self.listener.reaccept(self.cookie) if self.blocking_mode is not None: self.sock.setblocking(self.blocking_mode) try: return callback(self.sock) except (EOFError, IOError, OSError, socket.error): if i >= self.retries - 1: raise if self.sock: self.sock.close() self.sock = None def recv(self, count): # print "ReconnectingSocket.recv(%r)" % (count,) return self._safeio(lambda sock: sock.recv(count)) def send(self, data): # print "ReconnectingSocket.send(%r)" % (len(data),) return self._safeio(lambda sock: sock.send(data)) rpyc-3.4.4/rpyc/experimental/splitbrain.py000066400000000000000000000215721314203541000206720ustar00rootroot00000000000000""" The Magnificent Splitbrain .. versionadded:: 3.3 """ import sys import atexit import threading from contextlib import contextmanager import functools import gc try: import __builtin__ as builtins except ImportError: import builtins # python 3+ from types import ModuleType router = threading.local() routed_modules = set(["os", "os.path", "platform", "ntpath", "posixpath", "zipimport", "genericpath", "posix", "nt", "signal", "time", "sysconfig", "_locale", "locale", "socket", "_socket", "ssl", "_ssl", "struct", "_struct", "_symtable", "errno", "fcntl", "grp", "pwd", "select", "spwd", "syslog", "thread", "_io", "io", "subprocess", "_subprocess", "datetime", "mmap", "msvcrt", "pdb", "bdb", "glob", "fnmatch", #"_frozen_importlib", "imp", "exceptions" ]) class RoutedModule(ModuleType): def __init__(self, realmod): ModuleType.__init__(self, realmod.__name__, getattr(realmod, "__doc__", None)) object.__setattr__(self, "__realmod__", realmod) object.__setattr__(self, "__file__", getattr(realmod, "__file__", None)) def __repr__(self): if self.__file__: return "" % (self.__name__, self.__file__) else: return "" % (self.__name__,) def __dir__(self): return dir(self.__currmod__) def __getattribute__(self, name): if name == "__realmod__": return object.__getattribute__(self, "__realmod__") elif name == "__name__": return object.__getattribute__(self, "__name__") elif name == "__currmod__": modname = object.__getattribute__(self, "__name__") if hasattr(router, "conn"): return router.conn.modules[modname] else: return object.__getattribute__(self, "__realmod__") else: return getattr(self.__currmod__, name) def __delattr__(self, name, val): return setattr(self.__currmod__, name, val) def __setattr__(self, name, val): return setattr(self.__currmod__, name, val) routed_sys_attrs = set(["byteorder", "platform", "getfilesystemencoding", "getdefaultencoding", "settrace", "setprofile", "setrecursionlimit", "getprofile", "getrecursionlimit", "getsizeof", "gettrace", "exc_clear", "exc_info", "exc_type", "last_type", "last_value", "last_traceback", ]) class RoutedSysModule(ModuleType): def __init__(self): ModuleType.__init__(self, "sys", sys.__doc__) def __dir__(self): return dir(sys) def __getattribute__(self, name): if name in routed_sys_attrs and hasattr(router, "conn"): return getattr(router.conn.modules["sys"], name) else: return getattr(sys, name) def __setattr__(self, name, value): if name in routed_sys_attrs and hasattr(router, "conn"): setattr(router.conn.modules["sys"], name, value) else: setattr(sys, name, value) rsys = RoutedSysModule() class RemoteModule(ModuleType): def __init__(self, realmod): ModuleType.__init__(self, realmod.__name__, getattr(realmod, "__doc__", None)) object.__setattr__(self, "__file__", getattr(realmod, "__file__", None)) def __repr__(self): try: self.__currmod__ except (AttributeError, ImportError): return "" % (self.__name__,) if self.__file__: return "" % (self.__name__, self.__file__) else: return "" % (self.__name__,) def __dir__(self): return dir(self.__currmod__) def __getattribute__(self, name): if name == "__name__": return object.__getattribute__(self, "__name__") elif name == "__currmod__": modname = object.__getattribute__(self, "__name__") if not hasattr(router, "conn"): raise AttributeError("Module %r is not available in this context" % (modname,)) mod = router.conn.modules._ModuleNamespace__cache.get(modname) if not mod: raise AttributeError("Module %r is not available in this context" % (modname,)) return mod else: return getattr(self.__currmod__, name) def __delattr__(self, name, val): return setattr(self.__currmod__, name, val) def __setattr__(self, name, val): return setattr(self.__currmod__, name, val) _orig_import = builtins.__import__ def _importer(modname, *args, **kwargs): if not hasattr(router, "conn"): return _orig_import(modname, *args, **kwargs) existing = sys.modules.get(modname, None) if type(existing) is RoutedModule: return existing mod = router.conn.modules[modname] if existing and type(existing) is RemoteModule: return existing rmod = RemoteModule(mod) sys.modules[modname] = rmod return rmod _enabled = False _prev_builtins = {} def enable_splitbrain(): """Enables (activates) the Splitbrain machinery; must be called before entering ``splitbrain`` or ``localbrain`` contexts""" global _enabled if _enabled: return sys.modules["sys"] = rsys for modname in routed_modules: try: realmod = _orig_import(modname, [], [], "*") except ImportError: continue rmod = RoutedModule(realmod) sys.modules[modname] = rmod for ref in gc.get_referrers(realmod): if not isinstance(ref, dict) or "__name__" not in ref or ref.get("__file__") is None: continue n = ref["__name__"] if n in routed_modules or n.startswith("rpyc") or n.startswith("importlib") or n.startswith("imp"): continue for k, v in ref.items(): if v is realmod: #print ("## %s.%s = %s" % (ref["__name__"], ref[k], modname)) ref[k] = rmod builtins.__import__ = _importer for funcname in ["open", "execfile", "file"]: if not hasattr(builtins, funcname): continue def mkfunc(funcname, origfunc): @functools.wraps(getattr(builtins, funcname)) def tlbuiltin(*args, **kwargs): if hasattr(router, "conn"): func = getattr(router.conn.builtins, funcname) else: func = origfunc return func(*args, **kwargs) return tlbuiltin origfunc = getattr(builtins, funcname) _prev_builtins[funcname] = origfunc setattr(builtins, funcname, mkfunc(funcname, origfunc)) _enabled = True def disable_splitbrain(): """Disables (deactivates) the Splitbrain machinery""" global _enabled if not _enabled: return _enabled = False for funcname, origfunc in _prev_builtins.items(): setattr(builtins, funcname, origfunc) for modname, mod in sys.modules.items(): if isinstance(mod, RoutedModule): sys.modules[modname] = mod.__realmod__ for ref in gc.get_referrers(mod): if isinstance(ref, dict) and "__name__" in ref and ref.get("__file__") is not None: for k, v in ref.items(): if v is mod: ref[k] = mod.__realmod__ sys.modules["sys"] = sys builtins.__import__ = _orig_import atexit.register(disable_splitbrain) @contextmanager def splitbrain(conn): """Enter a splitbrain context in which imports take place over the given RPyC connection (expected to be a SlaveService). You can enter this context only after calling ``enable()``""" if not _enabled: enable_splitbrain() #raise ValueError("Splitbrain not enabled") prev_conn = getattr(router, "conn", None) prev_modules = sys.modules.copy() router.conn = conn prev_stdin = conn.modules.sys.stdin prev_stdout = conn.modules.sys.stdout prev_stderr = conn.modules.sys.stderr conn.modules["sys"].stdin = sys.stdin conn.modules["sys"].stdout = sys.stdout conn.modules["sys"].stderr = sys.stderr try: yield finally: conn.modules["sys"].stdin = prev_stdin conn.modules["sys"].stdout = prev_stdout conn.modules["sys"].stderr = prev_stderr sys.modules.clear() sys.modules.update(prev_modules) router.conn = prev_conn if not router.conn: del router.conn @contextmanager def localbrain(): """Return to operate on the local machine. You can enter this context only after calling ``enable()``""" if not _enabled: raise ValueError("Splitbrain not enabled") prev_conn = getattr(router, "conn", None) prev_modules = sys.modules.copy() if hasattr(router, "conn"): del router.conn try: yield finally: sys.modules.clear() sys.modules.update(prev_modules) router.conn = prev_conn if not router.conn: del router.conn rpyc-3.4.4/rpyc/lib/000077500000000000000000000000001314203541000142135ustar00rootroot00000000000000rpyc-3.4.4/rpyc/lib/__init__.py000066400000000000000000000021121314203541000163200ustar00rootroot00000000000000""" A library of various helpers functions and classes """ import sys import logging class MissingModule(object): __slots__ = ["__name"] def __init__(self, name): self.__name = name def __getattr__(self, name): if name.startswith("__"): # issue 71 raise AttributeError("module %r not found" % (self.__name,)) raise ImportError("module %r not found" % (self.__name,)) def __bool__(self): return False __nonzero__ = __bool__ def safe_import(name): try: mod = __import__(name, None, None, "*") except ImportError: mod = MissingModule(name) except Exception: # issue 72: IronPython on Mono if sys.platform == "cli" and name == "signal": #os.name == "posix": mod = MissingModule(name) else: raise return mod def setup_logger(quiet = False, logfile = None): opts = {} if quiet: opts['level'] = logging.ERROR else: opts['level'] = logging.DEBUG if logfile: opts['filename'] = logfile logging.basicConfig(**opts) rpyc-3.4.4/rpyc/lib/colls.py000066400000000000000000000046651314203541000157140ustar00rootroot00000000000000from __future__ import with_statement import weakref from threading import Lock class WeakValueDict(object): """a light-weight version of weakref.WeakValueDictionary""" __slots__ = ("_dict",) def __init__(self): self._dict = {} def __repr__(self): return repr(self._dict) def __iter__(self): return self.iterkeys() def __len__(self): return len(self._dict) def __contains__(self, key): try: self[key] except KeyError: return False else: return True def get(self, key, default = None): try: return self[key] except KeyError: return default def __getitem__(self, key): obj = self._dict[key]() if obj is None: raise KeyError(key) return obj def __setitem__(self, key, value): def remover(wr, _dict = self._dict, key = key): _dict.pop(key, None) self._dict[key] = weakref.ref(value, remover) def __delitem__(self, key): del self._dict[key] def iterkeys(self): return self._dict.keys() def keys(self): return self._dict.keys() def itervalues(self): for k in self: yield self[k] def values(self): return list(self.itervalues()) def iteritems(self): for k in self: yield k, self[k] def items(self): return list(self.iteritems()) def clear(self): self._dict.clear() class RefCountingColl(object): """a set-like object that implements refcounting on its contained objects""" __slots__ = ("_lock", "_dict") def __init__(self): self._lock = Lock() self._dict = {} def __repr__(self): return repr(self._dict) def add(self, obj): with self._lock: key = id(obj) slot = self._dict.get(key, None) if slot is None: slot = [obj, 0] else: slot[1] += 1 self._dict[key] = slot def clear(self): with self._lock: self._dict.clear() def decref(self, key, count=1): with self._lock: slot = self._dict[key] if slot[1] < count: del self._dict[key] else: slot[1] -= count self._dict[key] = slot def __getitem__(self, key): with self._lock: return self._dict[key][0] rpyc-3.4.4/rpyc/lib/compat.py000066400000000000000000000105271314203541000160550ustar00rootroot00000000000000""" compatibility module for various versions of python (2.4/3+/jython) and various platforms (posix/windows) """ import sys import time is_py3k = (sys.version_info[0] >= 3) if is_py3k: exec("execute = exec") def BYTES_LITERAL(text): return bytes(text, "utf8") maxint = sys.maxsize else: exec("""def execute(code, globals = None, locals = None): exec code in globals, locals""") def BYTES_LITERAL(text): return text maxint = sys.maxint try: from struct import Struct #@UnusedImport except ImportError: import struct class Struct(object): __slots__ = ["format", "size"] def __init__(self, format): self.format = format self.size = struct.calcsize(format) def pack(self, *args): return struct.pack(self.format, *args) def unpack(self, data): return struct.unpack(self.format, data) try: from cStringIO import StringIO as BytesIO except ImportError: from io import BytesIO #@UnusedImport try: next = next except NameError: def next(iterator): return iterator.next() try: import cPickle as pickle except ImportError: import pickle #@UnusedImport try: callable = callable except NameError: def callable(obj): return hasattr(obj, "__call__") try: import select as select_module except ImportError: select_module = None def select(*args): raise ImportError("select not supported on this platform") else: # jython if hasattr(select_module, 'cpython_compatible_select'): from select import cpython_compatible_select as select else: from select import select def get_exc_errno(exc): if hasattr(exc, "errno"): return exc.errno else: return exc[0] if select_module: select_error = select_module.error else: select_error = IOError if hasattr(select_module, "poll"): class PollingPoll(object): def __init__(self): self._poll = select_module.poll() def register(self, fd, mode): flags = 0 if "r" in mode: flags |= select_module.POLLIN | select_module.POLLPRI if "w" in mode: flags |= select_module.POLLOUT if "e" in mode: flags |= select_module.POLLERR if "h" in mode: # POLLRDHUP is a linux only extension, not known to python, but nevertheless # used and thus needed in the flags POLLRDHUP = 0x2000 flags |= select_module.POLLHUP | select_module.POLLNVAL | POLLRDHUP self._poll.register(fd, flags) modify = register def unregister(self, fd): self._poll.unregister(fd) def poll(self, timeout = None): if timeout: # the real poll takes milliseconds while we have seconds here timeout = 1000*timeout events = self._poll.poll(timeout) processed = [] for fd, evt in events: mask = "" if evt & (select_module.POLLIN | select_module.POLLPRI): mask += "r" if evt & select_module.POLLOUT: mask += "w" if evt & select_module.POLLERR: mask += "e" if evt & select_module.POLLHUP: mask += "h" if evt & select_module.POLLNVAL: mask += "n" processed.append((fd, mask)) return processed poll = PollingPoll else: class SelectingPoll(object): def __init__(self): self.rlist = set() self.wlist = set() def register(self, fd, mode): if "r" in mode: self.rlist.add(fd) if "w" in mode: self.wlist.add(fd) modify = register def unregister(self, fd): self.rlist.discard(fd) self.wlist.discard(fd) def poll(self, timeout = None): if not self.rlist and not self.wlist: time.sleep(timeout) return [] # need to return an empty array in this case else: rl, wl, _ = select(self.rlist, self.wlist, (), timeout) return [(fd, "r") for fd in rl] + [(fd, "w") for fd in wl] poll = SelectingPoll rpyc-3.4.4/rpyc/utils/000077500000000000000000000000001314203541000146055ustar00rootroot00000000000000rpyc-3.4.4/rpyc/utils/__init__.py000066400000000000000000000000631314203541000167150ustar00rootroot00000000000000""" Utilities (not part of the core protocol) """ rpyc-3.4.4/rpyc/utils/authenticators.py000066400000000000000000000071141314203541000202170ustar00rootroot00000000000000""" An *authenticator* is basically a callable object that takes a socket and "authenticates" it in some way. Upon success, it must return a tuple containing a **socket-like** object and its **credentials** (any object), or raise an :class:`AuthenticationError` upon failure. The credentials are any object you wish to associate with the authentication, and it's stored in the connection's :data:`configuration dict ` under the key "credentials". There are no constraints on what the authenticators, for instance:: def magic_word_authenticator(sock): if sock.recv(5) != "Ma6ik": raise AuthenticationError("wrong magic word") return sock, None RPyC comes bundled with an authenticator for ``SSL`` (using certificates). This authenticator, for instance, both verifies the peer's identity and wraps the socket with an encrypted transport (which replaces the original socket). Authenticators are used by :class:`servers ` to validate an incoming connection. Using them is pretty trivial :: s = ThreadedServer(...., authenticator = magic_word_authenticator) s.start() """ import sys from rpyc.lib import safe_import ssl = safe_import("ssl") class AuthenticationError(Exception): """raised to signal a failed authentication attempt""" pass class SSLAuthenticator(object): """An implementation of the authenticator protocol for ``SSL``. The given socket is wrapped by ``ssl.wrap_socket`` and is validated based on certificates :param keyfile: the server's key file :param certfile: the server's certificate file :param ca_certs: the server's certificate authority file :param cert_reqs: the certificate requirements. By default, if ``ca_cert`` is specified, the requirement is set to ``CERT_REQUIRED``; otherwise it is set to ``CERT_NONE`` :param ciphers: the list of ciphers to use, or ``None``, if you do not wish to restrict the available ciphers. New in Python 2.7/3.2 :param ssl_version: the SSL version to use Refer to `ssl.wrap_socket `_ for more info. Clients can connect to this authenticator using :func:`rpyc.utils.factory.ssl_connect`. Classic clients can use directly :func:`rpyc.utils.classic.ssl_connect` which sets the correct service parameters. """ def __init__(self, keyfile, certfile, ca_certs = None, cert_reqs = None, ssl_version = None, ciphers = None): self.keyfile = str(keyfile) self.certfile = str(certfile) self.ca_certs = str(ca_certs) if ca_certs else None self.ciphers = ciphers if cert_reqs is None: if ca_certs: self.cert_reqs = ssl.CERT_REQUIRED else: self.cert_reqs = ssl.CERT_NONE else: self.cert_reqs = cert_reqs if ssl_version is None: self.ssl_version = ssl.PROTOCOL_TLSv1 else: self.ssl_version = ssl_version def __call__(self, sock): kwargs = dict(keyfile = self.keyfile, certfile = self.certfile, server_side = True, ca_certs = self.ca_certs, cert_reqs = self.cert_reqs, ssl_version = self.ssl_version) if self.ciphers is not None: kwargs["ciphers"] = self.ciphers try: sock2 = ssl.wrap_socket(sock, **kwargs) except ssl.SSLError: ex = sys.exc_info()[1] raise AuthenticationError(str(ex)) return sock2, sock2.getpeercert() rpyc-3.4.4/rpyc/utils/classic.py000066400000000000000000000330071314203541000166030ustar00rootroot00000000000000from __future__ import with_statement import sys import os import inspect from rpyc.lib.compat import pickle, execute, is_py3k from rpyc import SlaveService from rpyc.utils import factory from rpyc.core.service import ModuleNamespace from contextlib import contextmanager DEFAULT_SERVER_PORT = 18812 DEFAULT_SERVER_SSL_PORT = 18821 #=============================================================================== # connecting #=============================================================================== def connect_channel(channel): """ Creates an RPyC connection over the given ``channel`` :param channel: the :class:`rpyc.core.channel.Channel` instance :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect_channel(channel, SlaveService) def connect_stream(stream): """ Creates an RPyC connection over the given stream :param channel: the :class:`rpyc.core.stream.Stream` instance :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect_stream(stream, SlaveService) def connect_stdpipes(): """ Creates an RPyC connection over the standard pipes (``stdin`` and ``stdout``) :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect_stdpipes(SlaveService) def connect_pipes(input, output): """ Creates an RPyC connection over two pipes :param input: the input pipe :param output: the output pipe :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect_pipes(input, output, SlaveService) def connect(host, port = DEFAULT_SERVER_PORT, ipv6 = False, keepalive = False): """ Creates a socket connection to the given host and port. :param host: the host to connect to :param port: the TCP port :param ipv6: whether to create an IPv6 socket or IPv4 :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect(host, port, SlaveService, ipv6 = ipv6, keepalive = keepalive) def unix_connect(path): """ Creates a socket connection to the given host and port. :param path: the path to the unix domain socket :returns: an RPyC connection exposing ``SlaveService`` """ return factory.unix_connect(path, SlaveService) def ssl_connect(host, port = DEFAULT_SERVER_SSL_PORT, keyfile = None, certfile = None, ca_certs = None, cert_reqs = None, ssl_version = None, ciphers = None, ipv6 = False): """Creates a secure (``SSL``) socket connection to the given host and port, authenticating with the given certfile and CA file. :param host: the host to connect to :param port: the TCP port to use :param ipv6: whether to create an IPv6 socket or an IPv4 one The following arguments are passed directly to `ssl.wrap_socket `_: :param keyfile: see ``ssl.wrap_socket``. May be ``None`` :param certfile: see ``ssl.wrap_socket``. May be ``None`` :param ca_certs: see ``ssl.wrap_socket``. May be ``None`` :param cert_reqs: see ``ssl.wrap_socket``. By default, if ``ca_cert`` is specified, the requirement is set to ``CERT_REQUIRED``; otherwise it is set to ``CERT_NONE`` :param ssl_version: see ``ssl.wrap_socket``. The default is ``PROTOCOL_TLSv1`` :param ciphers: see ``ssl.wrap_socket``. May be ``None``. New in Python 2.7/3.2 :returns: an RPyC connection exposing ``SlaveService`` .. _wrap_socket: """ return factory.ssl_connect(host, port, keyfile = keyfile, certfile = certfile, ssl_version = ssl_version, ca_certs = ca_certs, service = SlaveService, ipv6 = ipv6) def ssh_connect(remote_machine, remote_port): """Connects to the remote server over an SSH tunnel. See :func:`rpyc.utils.factory.ssh_connect` for more info. :param remote_machine: the :class:`plumbum.remote.RemoteMachine` instance :param remote_port: the remote TCP port :returns: an RPyC connection exposing ``SlaveService`` """ return factory.ssh_connect(remote_machine, remote_port, SlaveService) def connect_subproc(server_file = None): """Runs an RPyC classic server as a subprocess and returns an RPyC connection to it over stdio :param server_file: The full path to the server script (``rpyc_classic.py``). If not given, ``which rpyc_classic.py`` will be attempted. :returns: an RPyC connection exposing ``SlaveService`` """ if server_file is None: server_file = os.popen("which rpyc_classic.py").read().strip() if not server_file: raise ValueError("server_file not given and could not be inferred") return factory.connect_subproc([sys.executable, "-u", server_file, "-q", "-m", "stdio"], SlaveService) def connect_thread(): """ Starts a SlaveService on a thread and connects to it. Useful for testing purposes. See :func:`rpyc.utils.factory.connect_thread` :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect_thread(SlaveService, remote_service = SlaveService) def connect_multiprocess(args = {}): """ Starts a SlaveService on a multiprocess process and connects to it. Useful for testing purposes and running multicore code thats uses shared memory. See :func:`rpyc.utils.factory.connect_multiprocess` :returns: an RPyC connection exposing ``SlaveService`` """ return factory.connect_multiprocess(SlaveService, remote_service = SlaveService, args=args) #=============================================================================== # remoting utilities #=============================================================================== def upload(conn, localpath, remotepath, filter = None, ignore_invalid = False, chunk_size = 16000): """uploads a file or a directory to the given remote path :param localpath: the local file or directory :param remotepath: the remote path :param filter: a predicate that accepts the filename and determines whether it should be uploaded; None means any file :param chunk_size: the IO chunk size """ if os.path.isdir(localpath): upload_dir(conn, localpath, remotepath, filter, chunk_size) elif os.path.isfile(localpath): upload_file(conn, localpath, remotepath, chunk_size) else: if not ignore_invalid: raise ValueError("cannot upload %r" % (localpath,)) def upload_file(conn, localpath, remotepath, chunk_size = 16000): lf = open(localpath, "rb") rf = conn.builtin.open(remotepath, "wb") while True: buf = lf.read(chunk_size) if not buf: break rf.write(buf) lf.close() rf.close() def upload_dir(conn, localpath, remotepath, filter = None, chunk_size = 16000): if not conn.modules.os.path.isdir(remotepath): conn.modules.os.makedirs(remotepath) for fn in os.listdir(localpath): if not filter or filter(fn): lfn = os.path.join(localpath, fn) rfn = conn.modules.os.path.join(remotepath, fn) upload(conn, lfn, rfn, filter = filter, ignore_invalid = True, chunk_size = chunk_size) def download(conn, remotepath, localpath, filter = None, ignore_invalid = False, chunk_size = 16000): """ download a file or a directory to the given remote path :param localpath: the local file or directory :param remotepath: the remote path :param filter: a predicate that accepts the filename and determines whether it should be downloaded; None means any file :param chunk_size: the IO chunk size """ if conn.modules.os.path.isdir(remotepath): download_dir(conn, remotepath, localpath, filter) elif conn.modules.os.path.isfile(remotepath): download_file(conn, remotepath, localpath, chunk_size) else: if not ignore_invalid: raise ValueError("cannot download %r" % (remotepath,)) def download_file(conn, remotepath, localpath, chunk_size = 16000): rf = conn.builtin.open(remotepath, "rb") lf = open(localpath, "wb") while True: buf = rf.read(chunk_size) if not buf: break lf.write(buf) lf.close() rf.close() def download_dir(conn, remotepath, localpath, filter = None, chunk_size = 16000): if not os.path.isdir(localpath): os.makedirs(localpath) for fn in conn.modules.os.listdir(remotepath): if not filter or filter(fn): rfn = conn.modules.os.path.join(remotepath, fn) lfn = os.path.join(localpath, fn) download(conn, rfn, lfn, filter = filter, ignore_invalid = True) def upload_package(conn, module, remotepath = None, chunk_size = 16000): """ uploads a module or a package to the remote party :param conn: the RPyC connection to use :param module: the local module/package object to upload :param remotepath: the remote path (if ``None``, will default to the remote system's python library (as reported by ``distutils``) :param chunk_size: the IO chunk size .. note:: ``upload_module`` is just an alias to ``upload_package`` example:: import foo.bar ... rpyc.classic.upload_package(conn, foo.bar) """ if remotepath is None: site = conn.modules["distutils.sysconfig"].get_python_lib() remotepath = conn.modules.os.path.join(site, module.__name__) localpath = os.path.dirname(os.path.abspath(inspect.getsourcefile(module))) upload(conn, localpath, remotepath, chunk_size = chunk_size) upload_module = upload_package def obtain(proxy): """obtains (copies) a remote object from a proxy object. the object is ``pickled`` on the remote side and ``unpickled`` locally, thus moved **by value**. changes made to the local object will not reflect remotely. :param proxy: an RPyC proxy object .. note:: the remote object to must be ``pickle``-able :returns: a copy of the remote object """ return pickle.loads(pickle.dumps(proxy)) def deliver(conn, localobj): """delivers (recreates) a local object on the other party. the object is ``pickled`` locally and ``unpickled`` on the remote side, thus moved **by value**. changes made to the remote object will not reflect locally. :param conn: the RPyC connection :param localobj: the local object to deliver .. note:: the object must be ``picklable`` :returns: a proxy to the remote object """ return conn.modules["rpyc.lib.compat"].pickle.loads(pickle.dumps(localobj)) @contextmanager def redirected_stdio(conn): r""" Redirects the other party's ``stdin``, ``stdout`` and ``stderr`` to those of the local party, so remote IO will occur locally. Example usage:: with redirected_stdio(conn): conn.modules.sys.stdout.write("hello\n") # will be printed locally """ orig_stdin = conn.modules.sys.stdin orig_stdout = conn.modules.sys.stdout orig_stderr = conn.modules.sys.stderr try: conn.modules.sys.stdin = sys.stdin conn.modules.sys.stdout = sys.stdout conn.modules.sys.stderr = sys.stderr yield finally: conn.modules.sys.stdin = orig_stdin conn.modules.sys.stdout = orig_stdout conn.modules.sys.stderr = orig_stderr def pm(conn): """same as ``pdb.pm()`` but on a remote exception :param conn: the RPyC connection """ #pdb.post_mortem(conn.root.getconn()._last_traceback) with redirected_stdio(conn): conn.modules.pdb.post_mortem(conn.root.getconn()._last_traceback) def interact(conn, namespace = None): """remote interactive interpreter :param conn: the RPyC connection :param namespace: the namespace to use (a ``dict``) """ if namespace is None: namespace = {} namespace["conn"] = conn with redirected_stdio(conn): conn.execute("""def _rinteract(ns): import code code.interact(local = dict(ns))""") conn.namespace["_rinteract"](namespace) class MockClassicConnection(object): """Mock classic RPyC connection object. Useful when you want the same code to run remotely or locally. """ def __init__(self): self._conn = None self.namespace = {} self.modules = ModuleNamespace(self.getmodule) if is_py3k: self.builtin = self.modules.builtins else: self.builtin = self.modules.__builtin__ self.builtins = self.builtin def execute(self, text): execute(text, self.namespace) def eval(self, text): return eval(text, self.namespace) def getmodule(self, name): return __import__(name, None, None, "*") def getconn(self): return None def teleport_function(conn, func): """ "Teleports" a function (including nested functions/closures) over the RPyC connection. The function is passed in bytecode form and reconstructed on the other side. The function cannot have non-brinable defaults (e.g., ``def f(x, y=[8]):``, since a ``list`` isn't brinable), or make use of non-builtin globals (like modules). You can overcome the second restriction by moving the necessary imports into the function body, e.g. :: def f(x, y): import os return (os.getpid() + y) * x :param conn: the RPyC connection :param func: the function object to be delivered to the other party """ from rpyc.utils.teleportation import export_function exported = export_function(func) return conn.modules["rpyc.utils.teleportation"].import_function(exported) rpyc-3.4.4/rpyc/utils/factory.py000066400000000000000000000276241314203541000166410ustar00rootroot00000000000000""" RPyC connection factories: ease the creation of a connection for the common cases) """ from __future__ import with_statement import socket import threading try: from thread import interrupt_main except ImportError: try: from _thread import interrupt_main except ImportError: # assume jython (#83) from java.lang import System interrupt_main = System.exit from rpyc import Connection, Channel, SocketStream, TunneledSocketStream, PipeStream, VoidService from rpyc.utils.registry import UDPRegistryClient from rpyc.lib import safe_import ssl = safe_import("ssl") class DiscoveryError(Exception): pass #------------------------------------------------------------------------------ # API #------------------------------------------------------------------------------ def connect_channel(channel, service = VoidService, config = {}): """creates a connection over a given channel :param channel: the channel to use :param service: the local service to expose (defaults to Void) :param config: configuration dict :returns: an RPyC connection """ return Connection(service, channel, config = config) def connect_stream(stream, service = VoidService, config = {}): """creates a connection over a given stream :param stream: the stream to use :param service: the local service to expose (defaults to Void) :param config: configuration dict :returns: an RPyC connection """ return connect_channel(Channel(stream), service = service, config = config) def connect_pipes(input, output, service = VoidService, config = {}): """ creates a connection over the given input/output pipes :param input: the input pipe :param output: the output pipe :param service: the local service to expose (defaults to Void) :param config: configuration dict :returns: an RPyC connection """ return connect_stream(PipeStream(input, output), service = service, config = config) def connect_stdpipes(service = VoidService, config = {}): """ creates a connection over the standard input/output pipes :param service: the local service to expose (defaults to Void) :param config: configuration dict :returns: an RPyC connection """ return connect_stream(PipeStream.from_std(), service = service, config = config) def connect(host, port, service = VoidService, config = {}, ipv6 = False, keepalive = False): """ creates a socket-connection to the given host and port :param host: the hostname to connect to :param port: the TCP port to use :param service: the local service to expose (defaults to Void) :param config: configuration dict :param ipv6: whether to use IPv6 or not :returns: an RPyC connection """ s = SocketStream.connect(host, port, ipv6 = ipv6, keepalive = keepalive) return connect_stream(s, service, config) def unix_connect(path, service = VoidService, config = {}): """ creates a socket-connection to the given host and port :param path: the path to the unix domain socket :param service: the local service to expose (defaults to Void) :param config: configuration dict :returns: an RPyC connection """ s = SocketStream.unix_connect(path) return connect_stream(s, service, config) def ssl_connect(host, port, keyfile = None, certfile = None, ca_certs = None, cert_reqs = None, ssl_version = None, ciphers = None, service = VoidService, config = {}, ipv6 = False, keepalive = False): """ creates an SSL-wrapped connection to the given host (encrypted and authenticated). :param host: the hostname to connect to :param port: the TCP port to use :param service: the local service to expose (defaults to Void) :param config: configuration dict :param ipv6: whether to create an IPv6 socket or an IPv4 one The following arguments are passed directly to `ssl.wrap_socket `_: :param keyfile: see ``ssl.wrap_socket``. May be ``None`` :param certfile: see ``ssl.wrap_socket``. May be ``None`` :param ca_certs: see ``ssl.wrap_socket``. May be ``None`` :param cert_reqs: see ``ssl.wrap_socket``. By default, if ``ca_cert`` is specified, the requirement is set to ``CERT_REQUIRED``; otherwise it is set to ``CERT_NONE`` :param ssl_version: see ``ssl.wrap_socket``. The default is ``PROTOCOL_TLSv1`` :param ciphers: see ``ssl.wrap_socket``. May be ``None``. New in Python 2.7/3.2 :returns: an RPyC connection """ ssl_kwargs = {"server_side" : False} if keyfile is not None: ssl_kwargs["keyfile"] = keyfile if certfile is not None: ssl_kwargs["certfile"] = certfile if ca_certs is not None: ssl_kwargs["ca_certs"] = ca_certs ssl_kwargs["cert_reqs"] = ssl.CERT_REQUIRED if cert_reqs is not None: ssl_kwargs["cert_reqs"] = cert_reqs if ssl_version is None: ssl_kwargs["ssl_version"] = ssl.PROTOCOL_TLSv1 else: ssl_kwargs["ssl_version"] = ssl_version if ciphers is not None: ssl_kwargs["ciphers"] = ciphers s = SocketStream.ssl_connect(host, port, ssl_kwargs, ipv6 = ipv6, keepalive = keepalive) return connect_stream(s, service, config) def _get_free_port(): """attempts to find a free port""" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("localhost", 0)) _, port = s.getsockname() s.close() return port _ssh_connect_lock = threading.Lock() def ssh_connect(remote_machine, remote_port, service = VoidService, config = {}): """ Connects to an RPyC server over an SSH tunnel (created by plumbum). See `Plumbum tunneling `_ for further details. .. note:: This function attempts to allocate a free TCP port for the underlying tunnel, but doing so is inherently prone to a race condition with other processes who might bind the same port before sshd does. Albeit unlikely, there is no sure way around it. :param remote_machine: an :class:`plumbum.remote.RemoteMachine` instance :param remote_port: the port of the remote server :param service: the local service to expose (defaults to Void) :param config: configuration dict :returns: an RPyC connection """ with _ssh_connect_lock: loc_port = _get_free_port() tun = remote_machine.tunnel(loc_port, remote_port) stream = TunneledSocketStream.connect("localhost", loc_port) stream.tun = tun return Connection(service, Channel(stream), config = config) def discover(service_name, host = None, registrar = None, timeout = 2): """ discovers hosts running the given service :param service_name: the service to look for :param host: limit the discovery to the given host only (None means any host) :param registrar: use this registry client to discover services. if None, use the default UDPRegistryClient with the default settings. :param timeout: the number of seconds to wait for a reply from the registry if no hosts are found, raises DiscoveryError :raises: ``DiscoveryError`` if no server is found :returns: a list of (ip, port) pairs """ if registrar is None: registrar = UDPRegistryClient(timeout = timeout) addrs = registrar.discover(service_name) if not addrs: raise DiscoveryError("no servers exposing %r were found" % (service_name,)) if host: ips = socket.gethostbyname_ex(host)[2] addrs = [(h, p) for h, p in addrs if h in ips] if not addrs: raise DiscoveryError("no servers exposing %r were found on %r" % (service_name, host)) return addrs def connect_by_service(service_name, host = None, service = VoidService, config = {}): """create a connection to an arbitrary server that exposes the requested service :param service_name: the service to discover :param host: limit discovery to the given host only (None means any host) :param service: the local service to expose (defaults to Void) :param config: configuration dict :raises: ``DiscoveryError`` if no server is found :returns: an RPyC connection """ # The registry server may have multiple services registered for the same service name, # some of which could be dead. We iterate over the list returned and return the first # one we could connect to. If none of the registered servers is responsive we re-throw # the exception addrs = discover(service_name, host = host) for host, port in addrs: try: return connect(host, port, service, config = config) except socket.error: pass raise DiscoveryError("All services are down: %s" % (addrs,)) def connect_subproc(args, service = VoidService, config = {}): """runs an rpyc server on a child process that and connects to it over the stdio pipes. uses the subprocess module. :param args: the args to Popen, e.g., ["python", "-u", "myfile.py"] :param service: the local service to expose (defaults to Void) :param config: configuration dict """ from subprocess import Popen, PIPE proc = Popen(args, stdin = PIPE, stdout = PIPE) conn = connect_pipes(proc.stdout, proc.stdin, service = service, config = config) conn.proc = proc # just so you can have control over the processs return conn def connect_thread(service = VoidService, config = {}, remote_service = VoidService, remote_config = {}): """starts an rpyc server on a new thread, bound to an arbitrary port, and connects to it over a socket. :param service: the local service to expose (defaults to Void) :param config: configuration dict :param server_service: the remote service to expose (of the server; defaults to Void) :param server_config: remote configuration dict (of the server) """ listener = socket.socket() listener.bind(("localhost", 0)) listener.listen(1) def server(listener = listener): client = listener.accept()[0] listener.close() conn = connect_stream(SocketStream(client), service = remote_service, config = remote_config) try: conn.serve_all() except KeyboardInterrupt: interrupt_main() t = threading.Thread(target = server) t.setDaemon(True) t.start() host, port = listener.getsockname() return connect(host, port, service = service, config = config) def connect_multiprocess(service = VoidService, config = {}, remote_service = VoidService, remote_config = {}, args={}): """starts an rpyc server on a new process, bound to an arbitrary port, and connects to it over a socket. Basically a copy of connect_thread(). However if args is used and if these are shared memory then changes will be bi-directional. That is we now have access to shared memmory. :param service: the local service to expose (defaults to Void) :param config: configuration dict :param server_service: the remote service to expose (of the server; defaults to Void) :param server_config: remote configuration dict (of the server) :param args: dict of local vars to pass to new connection, form {'name':var} Contributed by *@tvanzyl* """ from multiprocessing import Process listener = socket.socket() listener.bind(("localhost", 0)) listener.listen(1) def server(listener=listener, args=args): client = listener.accept()[0] listener.close() conn = connect_stream(SocketStream(client), service = remote_service, config = remote_config) try: for k in args: conn._local_root.exposed_namespace[k] = args[k] conn.serve_all() except KeyboardInterrupt: interrupt_main() t = Process(target = server) t.start() host, port = listener.getsockname() return connect(host, port, service = service, config = config) rpyc-3.4.4/rpyc/utils/helpers.py000066400000000000000000000173731314203541000166340ustar00rootroot00000000000000""" Helpers and wrappers for common RPyC tasks """ import time import threading from rpyc.lib.colls import WeakValueDict from rpyc.lib.compat import callable from rpyc.core.consts import HANDLE_BUFFITER, HANDLE_CALL from rpyc.core.netref import syncreq, asyncreq def buffiter(obj, chunk = 10, max_chunk = 1000, factor = 2): """Buffered iterator - reads the remote iterator in chunks starting with *chunk*, multiplying the chunk size by *factor* every time, as an exponential-backoff, up to a chunk of *max_chunk* size. ``buffiter`` is very useful for tight loops, where you fetch an element from the other side with every iterator. Instead of being limited by the network's latency after every iteration, ``buffiter`` fetches a "chunk" of elements every time, reducing the amount of network I/Os. :param obj: An iterable object (supports ``iter()``) :param chunk: the initial chunk size :param max_chunk: the maximal chunk size :param factor: the factor by which to multiply the chunk size after every iterator (up to *max_chunk*). Must be >= 1. :returns: an iterator Example:: cursor = db.get_cursor() for id, name, dob in buffiter(cursor.select("Id", "Name", "DoB")): print id, name, dob """ if factor < 1: raise ValueError("factor must be >= 1, got %r" % (factor,)) it = iter(obj) count = chunk while True: items = syncreq(it, HANDLE_BUFFITER, count) count = min(count * factor, max_chunk) if not items: break for elem in items: yield elem def restricted(obj, attrs, wattrs = None): """Returns a 'restricted' version of an object, i.e., allowing access only to a subset of its attributes. This is useful when returning a "broad" or "dangerous" object, where you don't want the other party to have access to all of its attributes. .. versionadded:: 3.2 :param obj: any object :param attrs: the set of attributes exposed for reading (``getattr``) or writing (``setattr``). The same set will serve both for reading and writing, unless wattrs is explicitly given. :param wattrs: the set of attributes exposed for writing (``setattr``). If ``None``, ``wattrs`` will default to ``attrs``. To disable setting attributes completely, set to an empty tuple ``()``. :returns: a restricted view of the object Example:: class MyService(rpyc.Service): def exposed_open(self, filename): f = open(filename, "r") return rpyc.restricted(f, {"read", "close"}) # disallow access to `seek` or `write` """ if wattrs is None: wattrs = attrs class Restricted(object): def _rpyc_getattr(self, name): if name not in attrs: raise AttributeError(name) return getattr(obj, name) __getattr__ = _rpyc_getattr def _rpyc_setattr(self, name, value): if name not in wattrs: raise AttributeError(name) setattr(obj, name, value) __setattr__ = _rpyc_setattr return Restricted() class _Async(object): """Creates an async proxy wrapper over an existing proxy. Async proxies are cached. Invoking an async proxy will return an AsyncResult instead of blocking""" __slots__ = ("proxy", "__weakref__") def __init__(self, proxy): self.proxy = proxy def __call__(self, *args, **kwargs): return asyncreq(self.proxy, HANDLE_CALL, args, tuple(kwargs.items())) def __repr__(self): return "async(%r)" % (self.proxy,) _async_proxies_cache = WeakValueDict() def async(proxy): """ Returns an asynchronous "version" of the given proxy. Invoking the returned proxy will not block; instead it will return an :class:`rpyc.core.async.AsyncResult` object that you can test for completion :param proxy: any **callable** RPyC proxy :returns: the proxy, wrapped by an asynchronous wrapper Example:: async_sleep = rpyc.async(conn.modules.time.sleep) res = async_sleep(5) .. _async_note: .. note:: In order to avoid overloading the GC, the returned asynchronous wrapper is cached as a weak reference. Therefore, do not use:: rpyc.async(foo)(5) Always store the returned asynchronous wrapper in a variable, e.g. :: a_foo = rpyc.async(foo) a_foo(5) .. note:: Furthermore, async requests provide **no guarantee on execution order**. In particular, multiple subsequent async requests may be executed in reverse order. """ pid = id(proxy) if pid in _async_proxies_cache: return _async_proxies_cache[pid] if not hasattr(proxy, "____conn__") or not hasattr(proxy, "____oid__"): raise TypeError("'proxy' must be a Netref: %r", (proxy,)) if not callable(proxy): raise TypeError("'proxy' must be callable: %r" % (proxy,)) caller = _Async(proxy) _async_proxies_cache[id(caller)] = _async_proxies_cache[pid] = caller return caller async.__doc__ = _Async.__doc__ class timed(object): """Creates a timed asynchronous proxy. Invoking the timed proxy will run in the background and will raise an :class:`rpyc.core.async.AsyncResultTimeout` exception if the computation does not terminate within the given time frame :param proxy: any **callable** RPyC proxy :param timeout: the maximal number of seconds to allow the operation to run :returns: a ``timed`` wrapped proxy Example:: t_sleep = rpyc.timed(conn.modules.time.sleep, 6) # allow up to 6 seconds t_sleep(4) # okay t_sleep(8) # will time out and raise AsyncResultTimeout """ __slots__ = ("__weakref__", "proxy", "timeout") def __init__(self, proxy, timeout): self.proxy = async(proxy) self.timeout = timeout def __call__(self, *args, **kwargs): res = self.proxy(*args, **kwargs) res.set_expiry(self.timeout) return res def __repr__(self): return "timed(%r, %r)" % (self.proxy.proxy, self.timeout) class BgServingThread(object): """Runs an RPyC server in the background to serve all requests and replies that arrive on the given RPyC connection. The thread is started upon the the instantiation of the ``BgServingThread`` object; you can use the :meth:`stop` method to stop the server thread Example:: conn = rpyc.connect(...) bg_server = BgServingThread(conn) ... bg_server.stop() .. note:: For a more detailed explanation of asynchronous operation and the role of the ``BgServingThread``, see :ref:`tut5` """ # these numbers are magical... SERVE_INTERVAL = 0.0 SLEEP_INTERVAL = 0.1 def __init__(self, conn, callback=None): self._conn = conn self._thread = threading.Thread(target = self._bg_server) self._thread.setDaemon(True) self._active = True self._callback = callback self._thread.start() def __del__(self): if self._active: self.stop() def _bg_server(self): try: while self._active: self._conn.serve(self.SERVE_INTERVAL) time.sleep(self.SLEEP_INTERVAL) # to reduce contention except Exception: if self._active: self._active = False if self._callback is None: raise self._callback() def stop(self): """stop the server thread. once stopped, it cannot be resumed. you will have to create a new BgServingThread object later.""" assert self._active self._active = False self._thread.join() self._conn = None rpyc-3.4.4/rpyc/utils/registry.py000066400000000000000000000376741314203541000170500ustar00rootroot00000000000000""" RPyC **registry server** implementation. The registry is much like `Avahi `_ or `Bonjour `_, but tailored to the needs of RPyC. Also, neither of them supports (or supported) Windows, and Bonjour has a restrictive license. Moreover, they are too "powerful" for what RPyC needed and required too complex a setup. If anyone wants to implement the RPyC registry using Avahi, Bonjour, or any other zeroconf implementation -- I'll be happy to include them. Refer to :file:`rpyc/scripts/rpyc_registry.py` for more info. """ import sys import socket import time import logging from rpyc.core import brine DEFAULT_PRUNING_TIMEOUT = 4 * 60 MAX_DGRAM_SIZE = 1500 REGISTRY_PORT = 18811 #------------------------------------------------------------------------------ # servers #------------------------------------------------------------------------------ class RegistryServer(object): """Base registry server""" def __init__(self, listenersock, pruning_timeout = None, logger = None): self.sock = listenersock self.port = self.sock.getsockname()[1] self.active = False self.services = {} if pruning_timeout is None: pruning_timeout = DEFAULT_PRUNING_TIMEOUT self.pruning_timeout = pruning_timeout if logger is None: logger = self._get_logger() self.logger = logger def _get_logger(self): raise NotImplementedError() def on_service_added(self, name, addrinfo): """called when a new service joins the registry (but not on keepalives). override this to add custom logic""" def on_service_removed(self, name, addrinfo): """called when a service unregisters or is pruned. override this to add custom logic""" def _add_service(self, name, addrinfo): """updates the service's keep-alive time stamp""" if name not in self.services: self.services[name] = {} is_new = addrinfo not in self.services[name] self.services[name][addrinfo] = time.time() if is_new: try: self.on_service_added(name, addrinfo) except Exception: self.logger.exception('error executing service add callback') def _remove_service(self, name, addrinfo): """removes a single server of the given service""" self.services[name].pop(addrinfo, None) if not self.services[name]: del self.services[name] try: self.on_service_removed(name, addrinfo) except Exception: self.logger.exception('error executing service remove callback') def cmd_query(self, host, name): """implementation of the ``query`` command""" name = name.upper() self.logger.debug("querying for %r", name) if name not in self.services: self.logger.debug("no such service") return () oldest = time.time() - self.pruning_timeout all_servers = sorted(self.services[name].items(), key = lambda x: x[1]) servers = [] for addrinfo, t in all_servers: if t < oldest: self.logger.debug("discarding stale %s:%s", *addrinfo) self._remove_service(name, addrinfo) else: servers.append(addrinfo) self.logger.debug("replying with %r", servers) return tuple(servers) def cmd_register(self, host, names, port): """implementation of the ``register`` command""" self.logger.debug("registering %s:%s as %s", host, port, ", ".join(names)) for name in names: self._add_service(name.upper(), (host, port)) return "OK" def cmd_unregister(self, host, port): """implementation of the ``unregister`` command""" self.logger.debug("unregistering %s:%s", host, port) for name in list(self.services.keys()): self._remove_service(name, (host, port)) return "OK" def _recv(self): raise NotImplementedError() def _send(self, data, addrinfo): raise NotImplementedError() def _work(self): while self.active: try: data, addrinfo = self._recv() except (socket.error, socket.timeout): continue try: magic, cmd, args = brine.load(data) except Exception: continue if magic != "RPYC": self.logger.warn("invalid magic: %r", magic) continue cmdfunc = getattr(self, "cmd_%s" % (cmd.lower(),), None) if not cmdfunc: self.logger.warn("unknown command: %r", cmd) continue try: reply = cmdfunc(addrinfo[0], *args) except Exception: self.logger.exception('error executing function') else: self._send(brine.dump(reply), addrinfo) def start(self): """Starts the registry server (blocks)""" if self.active: raise ValueError("server is already running") if self.sock is None: raise ValueError("object disposed") self.logger.debug("server started on %s:%s", *self.sock.getsockname()[:2]) try: self.active = True self._work() except KeyboardInterrupt: self.logger.warn("User interrupt!") finally: self.active = False self.logger.debug("server closed") self.sock.close() self.sock = None def close(self): """Closes (terminates) the registry server""" if not self.active: raise ValueError("server is not running") self.logger.debug("stopping server...") self.active = False class UDPRegistryServer(RegistryServer): """UDP-based registry server. The server listens to UDP broadcasts and answers them. Useful in local networks, were broadcasts are allowed""" TIMEOUT = 1.0 def __init__(self, host = "0.0.0.0", port = REGISTRY_PORT, pruning_timeout = None, logger = None): family, socktype, proto, _, sockaddr = socket.getaddrinfo(host, port, 0, socket.SOCK_DGRAM)[0] sock = socket.socket(family, socktype, proto) sock.bind(sockaddr) sock.settimeout(self.TIMEOUT) RegistryServer.__init__(self, sock, pruning_timeout = pruning_timeout, logger = logger) def _get_logger(self): return logging.getLogger("REGSRV/UDP/%d" % (self.port,)) def _recv(self): return self.sock.recvfrom(MAX_DGRAM_SIZE) def _send(self, data, addrinfo): try: self.sock.sendto(data, addrinfo) except (socket.error, socket.timeout): pass class TCPRegistryServer(RegistryServer): """TCP-based registry server. The server listens to a certain TCP port and answers requests. Useful when you need to cross routers in the network, since they block UDP broadcasts""" TIMEOUT = 3.0 def __init__(self, host = "0.0.0.0", port = REGISTRY_PORT, pruning_timeout = None, logger = None, reuse_addr = True): family, socktype, proto, _, sockaddr = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)[0] sock = socket.socket(family, socktype, proto) if reuse_addr and sys.platform != "win32": # warning: reuseaddr is not what you expect on windows! sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(sockaddr) sock.listen(10) sock.settimeout(self.TIMEOUT) RegistryServer.__init__(self, sock, pruning_timeout = pruning_timeout, logger = logger) self._connected_sockets = {} def _get_logger(self): return logging.getLogger("REGSRV/TCP/%d" % (self.port,)) def _recv(self): sock2, _ = self.sock.accept() addrinfo = sock2.getpeername() data = sock2.recv(MAX_DGRAM_SIZE) self._connected_sockets[addrinfo] = sock2 return data, addrinfo def _send(self, data, addrinfo): sock2 = self._connected_sockets.pop(addrinfo) try: sock2.send(data) except (socket.error, socket.timeout): pass finally: sock2.close() #------------------------------------------------------------------------------ # clients (registrars) #------------------------------------------------------------------------------ class RegistryClient(object): """Base registry client. Also known as **registrar**""" REREGISTER_INTERVAL = 60 def __init__(self, ip, port, timeout, logger = None): self.ip = ip self.port = port self.timeout = timeout if logger is None: logger = self._get_logger() self.logger = logger def _get_logger(self): raise NotImplementedError() def discover(self, name): """Sends a query for the specified service name. :param name: the service name (or one of its aliases) :returns: a list of ``(host, port)`` tuples """ raise NotImplementedError() def register(self, aliases, port): """Registers the given service aliases with the given TCP port. This API is intended to be called only by an RPyC server. :param aliases: the :class:`service's ` aliases :param port: the listening TCP port of the server """ raise NotImplementedError() def unregister(self, port): """Unregisters the given RPyC server. This API is intended to be called only by an RPyC server. :param port: the listening TCP port of the RPyC server to unregister """ raise NotImplementedError() class UDPRegistryClient(RegistryClient): """UDP-based registry clients. By default, it sends UDP broadcasts (requires special user privileges on certain OS's) and collects the replies. You can also specify the IP address to send to. Example:: registrar = UDPRegistryClient() list_of_servers = registrar.discover("foo") .. note:: Consider using :func:`rpyc.utils.factory.discover` instead """ def __init__(self, ip = "255.255.255.255", port = REGISTRY_PORT, timeout = 2, bcast = None, logger = None, ipv6 = False): RegistryClient.__init__(self, ip = ip, port = port, timeout = timeout, logger = logger) if ipv6: self.sock_family = socket.AF_INET6 self.bcast = False else: self.sock_family = socket.AF_INET if bcast is None: bcast = "255" in ip.split(".") self.bcast = bcast def _get_logger(self): return logging.getLogger('REGCLNT/UDP') def discover(self, name): sock = socket.socket(self.sock_family, socket.SOCK_DGRAM) try: if self.bcast: sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True) data = brine.dump(("RPYC", "QUERY", (name,))) sock.sendto(data, (self.ip, self.port)) sock.settimeout(self.timeout) try: data, _ = sock.recvfrom(MAX_DGRAM_SIZE) except (socket.error, socket.timeout): servers = () else: servers = brine.load(data) finally: sock.close() return servers def register(self, aliases, port, interface = ""): self.logger.info("registering on %s:%s", self.ip, self.port) sock = socket.socket(self.sock_family, socket.SOCK_DGRAM) sock.bind((interface, 0)) try: if self.bcast: sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True) data = brine.dump(("RPYC", "REGISTER", (aliases, port))) sock.sendto(data, (self.ip, self.port)) tmax = time.time() + self.timeout while time.time() < tmax: sock.settimeout(tmax - time.time()) try: data, address = sock.recvfrom(MAX_DGRAM_SIZE) rip, rport = address[:2] except socket.timeout: self.logger.warn("no registry acknowledged") return False if rport != self.port: continue try: reply = brine.load(data) except Exception: continue if reply == "OK": self.logger.info("registry %s:%s acknowledged", rip, rport) return True else: self.logger.warn("no registry acknowledged") return False finally: sock.close() def unregister(self, port): self.logger.info("unregistering from %s:%s", self.ip, self.port) sock = socket.socket(self.sock_family, socket.SOCK_DGRAM) try: if self.bcast: sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True) data = brine.dump(("RPYC", "UNREGISTER", (port,))) sock.sendto(data, (self.ip, self.port)) finally: sock.close() class TCPRegistryClient(RegistryClient): """TCP-based registry client. You must specify the host (registry server) to connect to. Example:: registrar = TCPRegistryClient("localhost") list_of_servers = registrar.discover("foo") .. note:: Consider using :func:`rpyc.utils.factory.discover` instead """ def __init__(self, ip, port = REGISTRY_PORT, timeout = 2, logger = None): RegistryClient.__init__(self, ip = ip, port = port, timeout = timeout, logger = logger) def _get_logger(self): return logging.getLogger('REGCLNT/TCP') def discover(self, name): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(self.timeout) try: data = brine.dump(("RPYC", "QUERY", (name,))) sock.connect((self.ip, self.port)) sock.send(data) try: data = sock.recv(MAX_DGRAM_SIZE) except (socket.error, socket.timeout): servers = () else: servers = brine.load(data) finally: sock.close() return servers def register(self, aliases, port, interface = ""): self.logger.info("registering on %s:%s", self.ip, self.port) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((interface, 0)) sock.settimeout(self.timeout) data = brine.dump(("RPYC", "REGISTER", (aliases, port))) try: try: sock.connect((self.ip, self.port)) sock.send(data) except (socket.error, socket.timeout): self.logger.warn("could not connect to registry") return False try: data = sock.recv(MAX_DGRAM_SIZE) except socket.timeout: self.logger.warn("registry did not acknowledge") return False try: reply = brine.load(data) except Exception: self.logger.warn("received corrupted data from registry") return False if reply == "OK": self.logger.info("registry %s:%s acknowledged", self.ip, self.port) return True finally: sock.close() def unregister(self, port): self.logger.info("unregistering from %s:%s", self.ip, self.port) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(self.timeout) try: data = brine.dump(("RPYC", "UNREGISTER", (port,))) try: sock.connect((self.ip, self.port)) sock.send(data) except (socket.error, socket.timeout): self.logger.warn("could not connect to registry") finally: sock.close() rpyc-3.4.4/rpyc/utils/server.py000066400000000000000000000547611314203541000165020ustar00rootroot00000000000000""" rpyc plug-in server (threaded or forking) """ import sys import os import socket import time import threading import errno import logging try: import Queue except ImportError: import queue as Queue from rpyc.core import SocketStream, Channel, Connection from rpyc.utils.registry import UDPRegistryClient from rpyc.utils.authenticators import AuthenticationError from rpyc.lib import safe_import from rpyc.lib.compat import poll, get_exc_errno signal = safe_import("signal") class Server(object): """Base server implementation :param service: the :class:`service ` to expose :param hostname: the host to bind to. Default is IPADDR_ANY, but you may want to restrict it only to ``localhost`` in some setups :param ipv6: whether to create an IPv6 or IPv4 socket. The default is IPv4 :param port: the TCP port to bind to :param backlog: the socket's backlog (passed to ``listen()``) :param reuse_addr: whether or not to create the socket with the ``SO_REUSEADDR`` option set. :param authenticator: the :ref:`api-authenticators` to use. If ``None``, no authentication is performed. :param registrar: the :class:`registrar ` to use. If ``None``, a default :class:`rpyc.utils.registry.UDPRegistryClient` will be used :param auto_register: whether or not to register using the *registrar*. By default, the server will attempt to register only if a registrar was explicitly given. :param protocol_config: the :data:`configuration dictionary ` that is passed to the RPyC connection :param logger: the ``logger`` to use (of the built-in ``logging`` module). If ``None``, a default logger will be created. :param listener_timeout: the timeout of the listener socket; set to ``None`` to disable (e.g. on embedded platforms with limited battery) """ def __init__(self, service, hostname = "", ipv6 = False, port = 0, backlog = 10, reuse_addr = True, authenticator = None, registrar = None, auto_register = None, protocol_config = {}, logger = None, listener_timeout = 0.5, socket_path = None): self.active = False self._closed = False self.service = service self.authenticator = authenticator self.backlog = backlog if auto_register is None: self.auto_register = bool(registrar) else: self.auto_register = auto_register self.protocol_config = protocol_config self.clients = set() if socket_path is not None: if hostname != "" or port != 0 or ipv6 != False: raise ValueError("socket_path is mutually exclusive with: hostname, port, ipv6") self.listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.listener.bind(socket_path) # set the self.port to the path as it's used for the registry and logging self.host, self.port = "", socket_path else: if ipv6: if hostname == "localhost" and sys.platform != "win32": # on windows, you should bind to localhost even for ipv6 hostname = "localhost6" self.listener = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) else: self.listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if reuse_addr and sys.platform != "win32": # warning: reuseaddr is not what you'd expect on windows! # it allows you to bind an already bound port, resulting in "unexpected behavior" # (quoting MSDN) self.listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.listener.bind((hostname, port)) self.listener.settimeout(listener_timeout) # hack for IPv6 (the tuple can be longer than 2) sockname = self.listener.getsockname() self.host, self.port = sockname[0], sockname[1] if logger is None: logger = logging.getLogger("%s/%s" % (self.service.get_service_name(), self.port)) self.logger = logger if "logger" not in self.protocol_config: self.protocol_config["logger"] = self.logger if registrar is None: registrar = UDPRegistryClient(logger = self.logger) self.registrar = registrar def close(self): """Closes (terminates) the server and all of its clients. If applicable, also unregisters from the registry server""" if self._closed: return self._closed = True self.active = False if self.auto_register: try: self.registrar.unregister(self.port) except Exception: self.logger.exception("error unregistering services") try: self.listener.shutdown(socket.SHUT_RDWR) except (EnvironmentError, socket.error): pass self.listener.close() self.logger.info("listener closed") for c in set(self.clients): try: c.shutdown(socket.SHUT_RDWR) except Exception: pass c.close() self.clients.clear() def fileno(self): """returns the listener socket's file descriptor""" return self.listener.fileno() def accept(self): """accepts an incoming socket connection (blocking)""" while self.active: try: sock, addrinfo = self.listener.accept() except socket.timeout: pass except socket.error: ex = sys.exc_info()[1] if get_exc_errno(ex) in (errno.EINTR, errno.EAGAIN): pass else: raise EOFError() else: break if not self.active: return sock.setblocking(True) self.logger.info("accepted %s with fd %d", addrinfo, sock.fileno()) self.clients.add(sock) self._accept_method(sock) def _accept_method(self, sock): """this method should start a thread, fork a child process, or anything else in order to serve the client. once the mechanism has been created, it should invoke _authenticate_and_serve_client with `sock` as the argument""" raise NotImplementedError def _authenticate_and_serve_client(self, sock): try: if self.authenticator: addrinfo = sock.getpeername() try: sock2, credentials = self.authenticator(sock) except AuthenticationError: self.logger.info("%s failed to authenticate, rejecting connection", addrinfo) return else: self.logger.info("%s authenticated successfully", addrinfo) else: credentials = None sock2 = sock try: self._serve_client(sock2, credentials) except Exception: self.logger.exception("client connection terminated abruptly") raise finally: try: sock.shutdown(socket.SHUT_RDWR) except Exception: pass sock.close() self.clients.discard(sock) def _serve_client(self, sock, credentials): addrinfo = sock.getpeername() if credentials: self.logger.info("welcome %s (%r)", addrinfo, credentials) else: self.logger.info("welcome %s", addrinfo) try: config = dict(self.protocol_config, credentials = credentials, endpoints = (sock.getsockname(), addrinfo), logger = self.logger) conn = Connection(self.service, Channel(SocketStream(sock)), config = config, _lazy = True) conn._init_service() self._handle_connection(conn) finally: self.logger.info("goodbye %s", addrinfo) def _handle_connection(self, conn): """This methoed should implement the server's logic.""" conn.serve_all() def _bg_register(self): interval = self.registrar.REREGISTER_INTERVAL self.logger.info("started background auto-register thread " "(interval = %s)", interval) tnext = 0 try: while self.active: t = time.time() if t >= tnext: did_register = False aliases = self.service.get_service_aliases() try: did_register = self.registrar.register(aliases, self.port, interface = self.host) except Exception: self.logger.exception("error registering services") # If registration worked out, retry to register again after # interval time. Otherwise, try to register soon again. if did_register: tnext = t + interval else: self.logger.info("registering services did not work - retry") time.sleep(1) finally: if not self._closed: self.logger.info("background auto-register thread finished") def start(self): """Starts the server (blocking). Use :meth:`close` to stop""" self.listener.listen(self.backlog) # On Jython, if binding to port 0, we can get the correct port only # once `listen()` was called, see #156: if not self.port: # Note that for AF_UNIX the following won't work (but we are safe # since we already saved the socket_path into self.port): self.port = self.listener.getsockname()[1] self.logger.info("server started on [%s]:%s", self.host, self.port) self.active = True if self.auto_register: t = threading.Thread(target = self._bg_register) t.setDaemon(True) t.start() try: while self.active: self.accept() except EOFError: pass # server closed by another thread except KeyboardInterrupt: print("") self.logger.warn("keyboard interrupt!") finally: self.logger.info("server has terminated") self.close() class OneShotServer(Server): """ A server that handles a single connection (blockingly), and terminates after that Parameters: see :class:`Server` """ def _accept_method(self, sock): try: self._authenticate_and_serve_client(sock) finally: self.close() class ThreadedServer(Server): """ A server that spawns a thread for each connection. Works on any platform that supports threads. Parameters: see :class:`Server` """ def _accept_method(self, sock): t = threading.Thread(target = self._authenticate_and_serve_client, args = (sock,)) t.setDaemon(True) t.start() class ThreadPoolServer(Server): """This server is threaded like the ThreadedServer but reuses threads so that recreation is not necessary for each request. The pool of threads has a fixed size that can be set with the 'nbThreads' argument. The default size is 20. The server dispatches request to threads by batch, that is a given thread may process up to request_batch_size requests from the same connection in one go, before it goes to the next connection with pending requests. By default, self.request_batch_size is set to 10 and it can be overwritten in the constructor arguments. Contributed by *@sponce* Parameters: see :class:`Server` """ def __init__(self, *args, **kwargs): '''Initializes a ThreadPoolServer. In particular, instantiate the thread pool.''' # get the number of threads in the pool nbthreads = 20 if 'nbThreads' in kwargs: nbthreads = kwargs['nbThreads'] del kwargs['nbThreads'] # get the request batch size self.request_batch_size = 10 if 'requestBatchSize' in kwargs: self.request_batch_size = kwargs['requestBatchSize'] del kwargs['requestBatchSize'] # init the parent Server.__init__(self, *args, **kwargs) # a queue of connections having something to process self._active_connection_queue = Queue.Queue() # declare the pool as already active self.active = True # setup the thread pool for handling requests self.workers = [] for i in range(nbthreads): t = threading.Thread(target = self._serve_clients) t.setName('Worker%i' % i) t.daemon = True t.start() self.workers.append(t) # a polling object to be used be the polling thread self.poll_object = poll() # a dictionary fd -> connection self.fd_to_conn = {} # setup a thread for polling inactive connections self.polling_thread = threading.Thread(target = self._poll_inactive_clients) self.polling_thread.setName('PollingThread') self.polling_thread.setDaemon(True) self.polling_thread.start() def close(self): '''closes a ThreadPoolServer. In particular, joins the thread pool.''' # close parent server Server.close(self) # stop producer thread self.polling_thread.join() # cleanup thread pool : first fill the pool with None fds so that all threads exit # the blocking get on the queue of active connections. Then join the threads for _ in range(len(self.workers)): self._active_connection_queue.put(None) for w in self.workers: w.join() def _remove_from_inactive_connection(self, fd): '''removes a connection from the set of inactive ones''' # unregister the connection in the polling object try: self.poll_object.unregister(fd) except KeyError: # the connection has already been unregistered pass def _drop_connection(self, fd): '''removes a connection by closing it and removing it from internal structs''' conn = None # cleanup fd_to_conn dictionnary try: conn = self.fd_to_conn[fd] del self.fd_to_conn[fd] except KeyError: # the active connection has already been removed pass # close connection self.logger.info("Closing connection for fd %d", fd) if conn: conn.close() def _add_inactive_connection(self, fd): '''adds a connection to the set of inactive ones''' self.poll_object.register(fd, "reh") def _handle_poll_result(self, connlist): '''adds a connection to the set of inactive ones''' for fd, evt in connlist: try: # remove connection from the inactive ones self._remove_from_inactive_connection(fd) # Is it an error ? if "e" in evt or "n" in evt or "h" in evt: # it was an error, connection was closed. Do the same on our side self._drop_connection(fd) else: # connection has data, let's add it to the active queue self._active_connection_queue.put(fd) except KeyError: # the connection has already been dropped. Give up pass def _poll_inactive_clients(self): '''Main method run by the polling thread of the thread pool. Check whether inactive clients have become active''' while self.active: try: # the actual poll, with a timeout of 0.1s so that we can exit in case # we re not active anymore active_clients = self.poll_object.poll(0.1) # for each client that became active, put them in the active queue self._handle_poll_result(active_clients) except Exception: ex = sys.exc_info()[1] # "Caught exception in Worker thread" message self.logger.warning("Failed to poll clients, caught exception : %s", str(ex)) # wait a bit so that we do not loop too fast in case of error time.sleep(0.2) def _serve_requests(self, fd): '''Serves requests from the given connection and puts it back to the appropriate queue''' # serve a maximum of RequestBatchSize requests for this connection for _ in range(self.request_batch_size): try: if not self.fd_to_conn[fd].poll(): # note that poll serves the request # we could not find a request, so we put this connection back to the inactive set self._add_inactive_connection(fd) return except EOFError: # the connection has been closed by the remote end. Close it on our side and return self._drop_connection(fd) return except Exception: # put back the connection to active queue in doubt and raise the exception to the upper level self._active_connection_queue.put(fd) raise # we've processed the maximum number of requests. Put back the connection in the active queue self._active_connection_queue.put(fd) def _serve_clients(self): '''Main method run by the processing threads of the thread pool. Loops forever, handling requests read from the connections present in the active_queue''' while self.active: try: # note that we do not use a timeout here. This is because the implementation of # the timeout version performs badly. So we block forever, and exit by filling # the queue with None fds fd = self._active_connection_queue.get(True) # fd may be None (case where we want to exit the blocking get to close the service) if fd: # serve the requests of this connection self._serve_requests(fd) except Queue.Empty: # we've timed out, let's just retry. We only use the timeout so that this # thread can stop even if there is nothing in the queue pass except Exception: # "Caught exception in Worker thread" message self.logger.exception("failed to serve client, caught exception") # wait a bit so that we do not loop too fast in case of error time.sleep(0.2) def _authenticate_and_build_connection(self, sock): '''Authenticate a client and if it succees, wraps the socket in a connection object. Note that this code is cut and paste from the rpyc internals and may have to be changed if rpyc evolves''' # authenticate if self.authenticator: h, p = sock.getpeername() try: sock, credentials = self.authenticator(sock) except AuthenticationError: self.logger.warning("%s:%s failed to authenticate, rejecting connection", h, p) return None else: credentials = None # build a connection h, p = sock.getpeername() config = dict(self.protocol_config, credentials=credentials, connid="%s:%d"%(h, p), endpoints=(sock.getsockname(), (h, p))) return Connection(self.service, Channel(SocketStream(sock)), config=config) def _accept_method(self, sock): '''Implementation of the accept method : only pushes the work to the internal queue. In case the queue is full, raises an AsynResultTimeout error''' try: # authenticate and build connection object conn = self._authenticate_and_build_connection(sock) # put the connection in the active queue if conn: h, p = sock.getpeername() fd = conn.fileno() self.logger.debug("Created connection to %s:%d with fd %d", h, p, fd) self.fd_to_conn[fd] = conn self._add_inactive_connection(fd) self.clients.clear() else: self.logger.warning("Failed to authenticate and build connection, closing %s:%d", h, p) sock.close() except Exception: h, p = sock.getpeername() self.logger.exception("Failed to serve client for %s:%d, caught exception", h, p) sock.close() class ForkingServer(Server): """ A server that forks a child process for each connection. Available on POSIX compatible systems only. Parameters: see :class:`Server` """ def __init__(self, *args, **kwargs): if not signal: raise OSError("ForkingServer not supported on this platform") Server.__init__(self, *args, **kwargs) # setup sigchld handler self._prevhandler = signal.signal(signal.SIGCHLD, self._handle_sigchld) def close(self): Server.close(self) signal.signal(signal.SIGCHLD, self._prevhandler) @classmethod def _handle_sigchld(cls, signum, unused): try: while True: pid, dummy = os.waitpid(-1, os.WNOHANG) if pid <= 0: break except OSError: pass # re-register signal handler (see man signal(2), under Portability) signal.signal(signal.SIGCHLD, cls._handle_sigchld) def _accept_method(self, sock): pid = os.fork() if pid == 0: # child try: self.logger.debug("child process created") signal.signal(signal.SIGCHLD, self._prevhandler) #76: call signal.siginterrupt(False) in forked child signal.siginterrupt(signal.SIGCHLD, False) self.listener.close() self.clients.clear() self._authenticate_and_serve_client(sock) except: self.logger.exception("child process terminated abnormally") else: self.logger.debug("child process terminated") finally: self.logger.debug("child terminated") os._exit(0) else: # parent sock.close() rpyc-3.4.4/rpyc/utils/teleportation.py000066400000000000000000000121211314203541000200450ustar00rootroot00000000000000import opcode import sys try: import __builtin__ except ImportError: import builtins as __builtin__ from rpyc.lib.compat import is_py3k from types import CodeType, FunctionType from rpyc.core import brine CODEOBJ_MAGIC = "MAg1c J0hNNzo0hn ZqhuBP17LQk8" # NOTE: dislike this kind of hacking on the level of implementation details, # should search for a more reliable/future-proof way: CODE_HAVEARG_SIZE = 2 if sys.version_info >= (3,6) else 3 try: from dis import _unpack_opargs except ImportError: # COPIED from 3.5's `dis.py`, this should hopefully be correct for <=3.5: def _unpack_opargs(code): extended_arg = 0 n = len(code) i = 0 while i < n: op = code[i] offset = i i = i+1 arg = None if op >= opcode.HAVE_ARGUMENT: arg = code[i] + code[i+1]*256 + extended_arg extended_arg = 0 i = i+2 if op == opcode.EXTENDED_ARG: extended_arg = arg*65536 yield (offset, op, arg) def decode_codeobj(codeobj): # adapted from dis.dis if is_py3k: codestr = codeobj.co_code else: codestr = [ord(ch) for ch in codeobj.co_code] free = None for i, op, oparg in _unpack_opargs(codestr): opname = opcode.opname[op] if oparg is not None: if op in opcode.hasconst: argval = codeobj.co_consts[oparg] elif op in opcode.hasname: argval = codeobj.co_names[oparg] elif op in opcode.hasjrel: argval = i + oparg + CODE_HAVEARG_SIZE elif op in opcode.haslocal: argval = codeobj.co_varnames[oparg] elif op in opcode.hascompare: argval = opcode.cmp_op[oparg] elif op in opcode.hasfree: if free is None: free = codeobj.co_cellvars + codeobj.co_freevars argval = free[oparg] yield (opname, argval) def _export_codeobj(cobj): consts2 = [] for const in cobj.co_consts: if brine.dumpable(const): consts2.append(const) elif isinstance(const, CodeType): consts2.append(_export_codeobj(const)) else: raise TypeError("Cannot export a function with non-brinable constants: %r" % (const,)) for op, arg in decode_codeobj(cobj): if op in ("LOAD_GLOBAL", "STORE_GLOBAL", "DELETE_GLOBAL"): if arg not in __builtin__.__dict__: raise TypeError("Cannot export a function with non-builtin globals: %r" % (arg,)) if is_py3k: exported = (cobj.co_argcount, cobj.co_kwonlyargcount, cobj.co_nlocals, cobj.co_stacksize, cobj.co_flags, cobj.co_code, tuple(consts2), cobj.co_names, cobj.co_varnames, cobj.co_filename, cobj.co_name, cobj.co_firstlineno, cobj.co_lnotab, cobj.co_freevars, cobj.co_cellvars) else: exported = (cobj.co_argcount, cobj.co_nlocals, cobj.co_stacksize, cobj.co_flags, cobj.co_code, tuple(consts2), cobj.co_names, cobj.co_varnames, cobj.co_filename, cobj.co_name, cobj.co_firstlineno, cobj.co_lnotab, cobj.co_freevars, cobj.co_cellvars) assert brine.dumpable(exported) return (CODEOBJ_MAGIC, exported) def export_function(func): if is_py3k: func_closure = func.__closure__ func_code = func.__code__ func_defaults = func.__defaults__ else: func_closure = func.func_closure func_code = func.func_code func_defaults = func.func_defaults if func_closure: raise TypeError("Cannot export a function closure") if not brine.dumpable(func_defaults): raise TypeError("Cannot export a function with non-brinable defaults (func_defaults)") return func.__name__, func.__module__, func_defaults, _export_codeobj(func_code)[1] def _import_codetup(codetup): if is_py3k: (argcnt, kwargcnt, nloc, stk, flg, codestr, consts, names, varnames, filename, name, firstlineno, lnotab, freevars, cellvars) = codetup else: (argcnt, nloc, stk, flg, codestr, consts, names, varnames, filename, name, firstlineno, lnotab, freevars, cellvars) = codetup consts2 = [] for const in consts: if isinstance(const, tuple) and len(const) == 2 and const[0] == CODEOBJ_MAGIC: consts2.append(_import_codetup(const[1])) else: consts2.append(const) if is_py3k: return CodeType(argcnt, kwargcnt, nloc, stk, flg, codestr, tuple(consts2), names, varnames, filename, name, firstlineno, lnotab, freevars, cellvars) else: return CodeType(argcnt, nloc, stk, flg, codestr, tuple(consts2), names, varnames, filename, name, firstlineno, lnotab, freevars, cellvars) def import_function(functup): name, modname, defaults, codetup = functup try: mod = __import__(modname, None, None, "*") except ImportError: mod = __import__("__main__", None, None, "*") codeobj = _import_codetup(codetup) return FunctionType(codeobj, mod.__dict__, name, defaults) rpyc-3.4.4/rpyc/utils/zerodeploy.py000066400000000000000000000175131314203541000173620ustar00rootroot00000000000000""" .. versionadded:: 3.3 Requires [plumbum](http://plumbum.readthedocs.org/) """ from __future__ import with_statement import sys import rpyc import socket from rpyc.lib.compat import BYTES_LITERAL from rpyc.core.service import VoidService from rpyc.core.stream import SocketStream try: from plumbum import local, ProcessExecutionError, CommandNotFound from plumbum.path import copy except ImportError: import inspect if any("sphinx" in line[1] or "docutils" in line[1] or "autodoc" in line[1] for line in inspect.stack()): # let the sphinx docs be built without requiring plumbum installed pass else: raise SERVER_SCRIPT = r"""\ import sys import os import atexit import shutil from threading import Thread here = os.path.dirname(__file__) os.chdir(here) def rmdir(): shutil.rmtree(here, ignore_errors = True) atexit.register(rmdir) try: for dirpath, _, filenames in os.walk(here): for fn in filenames: if fn == "__pycache__" or (fn.endswith(".pyc") and os.path.exists(fn[:-1])): os.remove(os.path.join(dirpath, fn)) except Exception: pass sys.path.insert(0, here) from $MODULE$ import $SERVER$ as ServerCls from rpyc import SlaveService logger = None $EXTRA_SETUP$ t = ServerCls(SlaveService, hostname = "localhost", port = 0, reuse_addr = True, logger = logger) thd = Thread(target = t.start) thd.setDaemon(True) thd.start() sys.stdout.write("%s\n" % (t.port,)) sys.stdout.flush() try: sys.stdin.read() finally: t.close() thd.join(2) """ class DeployedServer(object): """ Sets up a temporary, short-lived RPyC deployment on the given remote machine. It will: 1. Create a temporary directory on the remote machine and copy RPyC's code from the local machine to the remote temporary directory. 2. Start an RPyC server on the remote machine, binding to an arbitrary TCP port, allowing only in-bound connections (``localhost`` connections). The server reports the chosen port over ``stdout``. 3. An SSH tunnel is created from an arbitrary local port (on the local host), to the remote machine's chosen port. This tunnel is authenticated and encrypted. 4. You get a ``DeployedServer`` object that can be used to connect to the newly-spawned server. 5. When the deployment is closed, the SSH tunnel is torn down, the remote server terminates and the temporary directory is deleted. :param remote_machine: a plumbum ``SshMachine`` or ``ParamikoMachine`` instance, representing an SSH connection to the desired remote machine :param server_class: the server to create (e.g., ``"ThreadedServer"``, ``"ForkingServer"``) :param extra_setup: any extra code to add to the script """ def __init__(self, remote_machine, server_class = "rpyc.utils.server.ThreadedServer", extra_setup = "", python_executable=None): self.proc = None self.tun = None self.remote_machine = remote_machine self._tmpdir_ctx = None rpyc_root = local.path(rpyc.__file__).up() self._tmpdir_ctx = remote_machine.tempdir() tmp = self._tmpdir_ctx.__enter__() copy(rpyc_root, tmp / "rpyc") script = (tmp / "deployed-rpyc.py") modname, clsname = server_class.rsplit(".", 1) script.write(SERVER_SCRIPT.replace("$MODULE$", modname).replace("$SERVER$", clsname).replace("$EXTRA_SETUP$", extra_setup)) if python_executable: cmd = remote_machine[python_executable] else: major = sys.version_info[0] minor = sys.version_info[1] cmd = None for opt in ["python%s.%s" % (major, minor), "python%s" % (major,)]: try: cmd = remote_machine[opt] except CommandNotFound: pass else: break if not cmd: cmd = remote_machine.python self.proc = cmd.popen(script, new_session = True) line = "" try: line = self.proc.stdout.readline() self.remote_port = int(line.strip()) except Exception: try: self.proc.terminate() except Exception: pass stdout, stderr = self.proc.communicate() raise ProcessExecutionError(self.proc.argv, self.proc.returncode, BYTES_LITERAL(line) + stdout, stderr) if hasattr(remote_machine, "connect_sock"): # Paramiko: use connect_sock() instead of tunnels self.local_port = None else: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("localhost", 0)) self.local_port = s.getsockname()[1] s.close() self.tun = remote_machine.tunnel(self.local_port, self.remote_port) def __del__(self): self.close() def __enter__(self): return self def __exit__(self, t, v, tb): self.close() def close(self): if self.proc is not None: try: self.proc.terminate() except Exception: pass self.proc = None if self.tun is not None: try: self.tun.close() except Exception: pass self.tun = None if self._tmpdir_ctx is not None: try: self._tmpdir_ctx.__exit__(None, None, None) except Exception: pass self._tmpdir_ctx = None def connect(self, service = VoidService, config = {}): """Same as :func:`connect `, but with the ``host`` and ``port`` parameters fixed""" if self.local_port is None: # ParamikoMachine stream = SocketStream(self.remote_machine.connect_sock(self.remote_port)) return rpyc.connect_stream(stream, service = service, config = config) else: return rpyc.connect("localhost", self.local_port, service = service, config = config) def classic_connect(self): """Same as :func:`classic.connect `, but with the ``host`` and ``port`` parameters fixed""" if self.local_port is None: # ParamikoMachine stream = SocketStream(self.remote_machine.connect_sock(self.remote_port)) return rpyc.classic.connect_stream(stream) else: return rpyc.classic.connect("localhost", self.local_port) class MultiServerDeployment(object): """ An 'aggregate' server deployment to multiple SSH machine. It deploys RPyC to each machine separately, but lets you manage them as a single deployment. """ def __init__(self, remote_machines, server_class = "rpyc.utils.server.ThreadedServer"): self.remote_machines = remote_machines # build the list incrementally, so we can clean it up if we have an exception self.servers = [DeployedServer(mach, server_class) for mach in remote_machines] def __del__(self): self.close() def __enter__(self): return self def __exit__(self, t, v, tb): self.close() def __iter__(self): return iter(self.servers) def __len__(self): return len(self.servers) def __getitem__(self, index): return self.servers[index] def close(self): while self.servers: s = self.servers.pop(0) s.close() def connect_all(self, service = VoidService, config = {}): """connects to all deployed servers; returns a list of connections (order guaranteed)""" return [s.connect(service, config) for s in self.servers] def classic_connect_all(self): """connects to all deployed servers using classic_connect; returns a list of connections (order guaranteed)""" return [s.classic_connect() for s in self.servers] rpyc-3.4.4/rpyc/version.py000066400000000000000000000001111314203541000154750ustar00rootroot00000000000000version = (3, 4, 4) version_string = "3.4.4" release_date = "2017.08.07" rpyc-3.4.4/setup.py000066400000000000000000000046031314203541000142050ustar00rootroot00000000000000#!/usr/bin/env python import sys import os try: from setuptools import setup except ImportError: from distutils.core import setup if sys.version_info < (2, 5): sys.exit("requires python 2.5 and up") here = os.path.dirname(__file__) exec(open(os.path.join(here, 'rpyc', 'version.py')).read()) setup(name = "rpyc", version = version_string, #@UndefinedVariable description = "Remote Python Call (RPyC), a transparent and symmetric RPC library", author = "Tomer Filiba", author_email = "tomerfiliba@gmail.com", maintainer_email = "rpyc@googlegroups.com", license = "MIT", url = "http://rpyc.readthedocs.org", packages = [ 'rpyc', 'rpyc.core', 'rpyc.lib', 'rpyc.experimental', 'rpyc.utils', ], scripts = [ os.path.join(here, "bin", "rpyc_classic.py"), os.path.join(here, "bin", "rpyc_registry.py"), ], tests_require = ['nose'], test_suite = 'nose.collector', install_requires = ["plumbum"], # entry_points = dict( # console_scripts = [ # "rpyc_classic = rpyc.scripts.rpyc_classic:main", # "rpyc_registry = rpyc.scretips.rpyc_registry:main", # ], # ), platforms = ["POSIX", "Windows"], use_2to3 = False, zip_safe = False, long_description = open(os.path.join(here, "README.rst"), "r").read(), classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Object Brokering", "Topic :: Software Development :: Testing", "Topic :: System :: Clustering", "Topic :: System :: Distributed Computing", "Topic :: System :: Monitoring", "Topic :: System :: Networking", "Topic :: System :: Systems Administration", ], ) rpyc-3.4.4/tests/000077500000000000000000000000001314203541000136325ustar00rootroot00000000000000rpyc-3.4.4/tests/server.crt000066400000000000000000000013661314203541000156600ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICATCCAWoCCQCnObEt1IRZszANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJB VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0 cyBQdHkgTHRkMB4XDTExMDMwNjIzMzczM1oXDTEyMDMwNTIzMzczM1owRTELMAkG A1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0 IFdpZGdpdHMgUHR5IEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwF0D KKdzWYOpO1rUE2dLk59OUjJv2oy4v2Xv+eVqYJopCXHvm/D8kBm5pGKceLID6cmi lN/YODwEA3NBwm93dl11i/P98HxGR4P22bsq9AMTZT6pk3lG2qnHCExgChyAi0Hi 0XFW0KZoB1QKvyHJTCVdiGeqGTcS2djGshWNbsECAwEAATANBgkqhkiG9w0BAQUF AAOBgQB5E0vIhXR05wh7dEEb2MJ+A5Fuc7JQp83IKqjd/TinrTJjQ+uEIcbXbjA9 62LA14+C/+bG/l9tBoGOJlD6ws4szPSe+7tYt6qaW2axSNX+q5oKO5PShDulOW/f FRxIQbsIMLKBqxCcfIolCwYgcyWrnqcukgejpodzlgvdEuSutQ== -----END CERTIFICATE----- rpyc-3.4.4/tests/server.key000066400000000000000000000015701314203541000156550ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDAXQMop3NZg6k7WtQTZ0uTn05SMm/ajLi/Ze/55WpgmikJce+b 8PyQGbmkYpx4sgPpyaKU39g4PAQDc0HCb3d2XXWL8/3wfEZHg/bZuyr0AxNlPqmT eUbaqccITGAKHICLQeLRcVbQpmgHVAq/IclMJV2IZ6oZNxLZ2MayFY1uwQIDAQAB AoGAVS6bAHyuQrxfy03cTb9XI0bPKuz0xSW9hdwBGXry0VZSx8DxZu+fF7ycjWOx gGzr+LH2UdCR8cz5xgFa5Fvx3O7ZWtJ0gKN6CrztH4C5WfgLNik0t8E0yP7kGIIj DTQScdXTKH+AYAOu29BciYPaoHBzhxRSo3B6njFmNp//qXECQQDfbZc4fuyq43lj XxEQVvE3bGJPJ2ZKELrJQA4QN8nzz/+nFNfU8ak7senpLW8KuNmEK9dEToZUGczV mfxRW1LNAkEA3GgTHUI1pif1Au2uT5eADZSXS66pgtTlPtM3L/qiGYCsasy4NquR rS4j/L8TKt3Yx0jKPFnEfLeOa1KtHqeTxQJAZbvP3HCmsNUtA5tY+Lit0w+t397P y6+8bUCWZroQYcz22ow6DoMPDNhg6sS+SAKNQIp51Wdv8MFirGwWILFVjQJAWNX9 9koMc6chQwfnvR7UNyUQAiopGpmSuMrLMKR1l4/cbsOK8EYg1kuFp8agBCQczt4Q 3VhVMOuPFMTjEDr8/QJBAJvLJ5KoTbP76nv4zDgrRJNuc1jmE1emw5LJqoZwUi8i CA+a8ekxA63RQ9aPFjOrmy5q8s+UGLyWwHqN4+NkNRE= -----END RSA PRIVATE KEY----- rpyc-3.4.4/tests/test_async.py000066400000000000000000000034171314203541000163650ustar00rootroot00000000000000import time import unittest import rpyc class TestAsync(unittest.TestCase): def setUp(self): self.conn = rpyc.classic.connect_thread() self.a_sleep = rpyc.async(self.conn.modules.time.sleep) self.a_int = rpyc.async(self.conn.builtin.int) def tearDown(self): self.conn.close() def test_asyncresult_api(self): res = self.a_sleep(2) self.assertFalse(res.ready) res.wait() self.assertTrue(res.ready) self.assertFalse(res.expired) self.assertFalse(res.error) self.assertEqual(res.value, None) def test_asyncresult_expiry(self): res = self.a_sleep(5) res.set_expiry(4) t0 = time.time() self.assertRaises(rpyc.AsyncResultTimeout, res.wait) dt = time.time() - t0 #print( "timed out after %s" % (dt,) ) self.assertTrue(dt >= 3.5, str(dt)) self.assertTrue(dt <= 4.5, str(dt)) def test_asyncresult_callbacks(self): res = self.a_sleep(2) visited = [] def f(res): assert res.ready assert not res.error visited.append("f") def g(res): visited.append("g") res.add_callback(f) res.add_callback(g) res.wait() self.assertEqual(set(visited), set(["f", "g"])) def test_timed(self): timed_sleep = rpyc.timed(self.conn.modules.time.sleep, 5) res = timed_sleep(3) res.value res = timed_sleep(7) self.assertRaises(rpyc.AsyncResultTimeout, lambda: res.value) def test_exceptions(self): res = self.a_int("foo") res.wait() self.assertTrue(res.error) self.assertRaises(ValueError, lambda: res.value) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_attr_access.py000066400000000000000000000055321314203541000175430ustar00rootroot00000000000000import rpyc import unittest import time from rpyc.utils.server import ThreadedServer from threading import Thread class MyClass(object): def foo(self): return "foo" def bar(self): return "bar" def spam(self): return "spam" class YourClass(object): def lala(self): return MyClass() def baba(self): return "baba" def gaga(self): return "gaga" try: long except NameError: long = int unicode = str try: bytes except NameError: bytes = str class Protector(object): def __init__(self, safetypes = (int, list, bool, tuple, str, float, long, unicode, bytes)): self._safetypes = set(safetypes) self._typereg = {} def register(self, typ, attrs): self._typereg[typ] = frozenset(attrs) def wrap(self, obj): class Restrictor(object): def __call__(_, *args, **kwargs): return self.wrap(obj(*args, **kwargs)) def _rpyc_getattr(_, name): if type(obj) not in self._safetypes: attrs = self._typereg.get(type(obj), ()) if name not in attrs: raise AttributeError(name) obj2 = getattr(obj, name) return self.wrap(obj2) __getattr__ = _rpyc_getattr return Restrictor() class MyService(rpyc.Service): def exposed_get_one(self): return rpyc.restricted(MyClass(), ["foo", "bar"]) def exposed_get_two(self): protector = Protector() protector.register(MyClass, ["foo", "spam"]) protector.register(YourClass, ["lala", "baba"]) return protector.wrap(YourClass()) class TestRestricted(unittest.TestCase): def setUp(self): self.server = ThreadedServer(MyService, port = 0) self.thd = Thread(target = self.server.start) self.thd.start() time.sleep(1) self.conn = rpyc.connect("localhost", self.server.port) def tearDown(self): self.conn.close() self.server.close() self.thd.join() def test_restricted(self): obj = self.conn.root.get_one() self.assertEqual(obj.foo(), "foo") self.assertEqual(obj.bar(), "bar") self.assertRaises(AttributeError, lambda: obj.spam) # def test_type_protector(self): # obj = self.conn.root.get_two() # assert obj.baba() == "baba" # try: # obj.gaga() # except AttributeError: # pass # else: # assert False, "expected an attribute error!" # obj2 = obj.lala() # assert obj2.foo() == "foo" # assert obj2.spam() == "spam" # try: # obj.bar() # except AttributeError: # pass # else: # assert False, "expected an attribute error!" # if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_attributes.py000066400000000000000000000015231314203541000174320ustar00rootroot00000000000000import rpyc import unittest class Properties(object): def __init__(self): self._x = 0 @property def counter(self): self._x += 1 return self._x @property def dont_touch_me(self): # reconstruct bug reported by Andrew Stromnov # http://groups.google.com/group/rpyc/msg/aa6110259481f194 1/0 class TestAttributes(unittest.TestCase): def setUp(self): self.conn = rpyc.classic.connect_thread() def tearDown(self): self.conn.close() def test_properties(self): p = self.conn.modules["test_attributes"].Properties() print( p.counter ) # 1 print( p.counter ) # 2 print( p.counter ) # 3 self.assertEqual(p.counter, 4) # 4 if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_brine.py000066400000000000000000000013171314203541000163440ustar00rootroot00000000000000from rpyc.core import brine from rpyc.lib.compat import is_py3k import unittest class BrineTest(unittest.TestCase): def test_brine_2(self): if is_py3k: exec('''x = (b"he", 7, "llo", 8, (), 900, None, True, Ellipsis, 18.2, 18.2j + 13, slice(1, 2, 3), frozenset([5, 6, 7]), NotImplemented, (1,2))''', globals()) else: exec('''x = ("he", 7, u"llo", 8, (), 900, None, True, Ellipsis, 18.2, 18.2j + 13, slice(1, 2, 3), frozenset([5, 6, 7]), NotImplemented, (1,2))''') self.assertTrue(brine.dumpable(x)) y = brine.dump(x) z = brine.load(y) self.assertEqual(x, z) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_classic.py000066400000000000000000000046461314203541000166760ustar00rootroot00000000000000import os import rpyc import unittest class ClassicMode(unittest.TestCase): def setUp(self): self.conn = rpyc.classic.connect_thread() def tearDown(self): self.conn.close() self.conn = None def test_piped_server(self): # this causes the following lines to be printed to stderr on Windows: # # close failed in file object destructor: # IOError: [Errno 9] Bad file descriptor # close failed in file object destructor: # IOError: [Errno 9] Bad file descriptor # # this is because the pipe objects that hold the child process' stdin # and stdout were disowned by Win32PipeStream (it forcefully takes # ownership of the file handles). so when the low-level pipe objects # are gc'ed, they cry that their fd is already closed. this is all # considered harmless, but there's no way to disable that message # to stderr server_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "bin", "rpyc_classic.py") conn = rpyc.classic.connect_subproc(server_file) conn.modules.sys.path.append("xxx") self.assertEqual(conn.modules.sys.path.pop(-1), "xxx") conn.close() self.assertEqual(conn.proc.wait(), 0) def test_buffiter(self): bi = rpyc.buffiter(self.conn.builtin.range(10000)) self.assertEqual(list(bi), list(range(10000))) def test_classic(self): print( self.conn.modules.sys ) print( self.conn.modules["xml.dom.minidom"].parseString("") ) self.conn.execute("x = 5") self.assertEqual(self.conn.namespace["x"], 5) self.assertEqual(self.conn.eval("1+x"), 6) def test_isinstance(self): x = self.conn.builtin.list((1,2,3,4)) print( x ) print( type(x) ) print( x.__class__ ) self.assertTrue(isinstance(x, list)) self.assertTrue(isinstance(x, rpyc.BaseNetref)) def test_mock_connection(self): from rpyc.utils.classic import MockClassicConnection import sys import xml.dom.minidom conn = MockClassicConnection() self.assertTrue(conn.modules.sys is sys) self.assertTrue(conn.modules["xml.dom.minidom"].Element is xml.dom.minidom.Element) self.assertTrue(conn.builtin.open is open) self.assertEqual(conn.eval("2+3"), 5) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_context_managers.py000066400000000000000000000020431314203541000206030ustar00rootroot00000000000000from __future__ import with_statement import rpyc import unittest from contextlib import contextmanager on_context_enter = False on_context_exit = False class MyService(rpyc.Service): @contextmanager def exposed_context(self, y): global on_context_enter, on_context_exit on_context_enter = True try: yield 17 + y finally: on_context_exit = True class TestContextManagers(unittest.TestCase): def setUp(self): self.conn = rpyc.connect_thread(remote_service=MyService) def tearDown(self): self.conn.close() def test_context(self): with self.conn.root.context(3) as x: print( "entering test" ) self.assertTrue(on_context_enter) self.assertFalse(on_context_exit) print( "got past context enter" ) self.assertEqual(x, 20) print( "got past x=20" ) self.assertTrue(on_context_exit) print( "got past on_context_exit" ) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_custom_service.py000066400000000000000000000046271314203541000203060ustar00rootroot00000000000000import math import time import rpyc import unittest on_connect_called = False on_disconnect_called = False class MyMeta(type): def spam(self): return self.__name__ * 5 class MyClass(object): __metaclass__ = MyMeta if not isinstance(MyMeta, MyMeta): # python 3 compatibility MyClass = MyMeta(MyClass.__name__, MyClass.__bases__, dict(MyClass.__dict__)) class MyService(rpyc.Service): def on_connect(self): global on_connect_called on_connect_called = True def on_disconnect(self): global on_disconnect_called on_disconnect_called = True def exposed_distance(self, p1, p2): x1, y1 = p1 x2, y2 = p2 return math.sqrt((x2-x1)**2 + (y2-y1)**2) def exposed_getlist(self): return [1, 2, 3] def foobar(self): assert False def exposed_getmeta(self): return MyClass() class TestCustomService(unittest.TestCase): config = {} def setUp(self): global on_connect_called self.conn = rpyc.connect_thread(remote_service=MyService) self.conn.root # this will block until the service is initialized, # so we can be sure on_connect_called is True by that time self.assertTrue(on_connect_called) on_connect_called = False def tearDown(self): global on_disconnect_called self.conn.close() time.sleep(0.5) # this will wait a little, making sure # on_disconnect_called is already True self.assertTrue(on_disconnect_called) on_disconnect_called = False def test_aliases(self): print( "service name: %s" % (self.conn.root.get_service_name(),) ) def test_distance(self): assert self.conn.root.distance((2,7), (5,11)) == 5 def test_attributes(self): self.conn.root.distance self.conn.root.exposed_distance self.conn.root.getlist self.conn.root.exposed_getlist # this is not an exposed attribute: self.assertRaises(AttributeError, lambda: self.conn.root.foobar()) def test_safeattrs(self): x = self.conn.root.getlist() #self.require(x == [1, 2, 3]) -- can't compare remote objects, sorry #self.require(x * 2 == [1, 2, 3, 1, 2, 3]) self.assertEqual([y*2 for y in x], [2, 4, 6]) def test_metaclasses(self): x = self.conn.root.getmeta() print( x ) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_deploy.py000066400000000000000000000025121314203541000165370ustar00rootroot00000000000000from __future__ import with_statement import unittest import sys from plumbum import SshMachine from rpyc.utils.zerodeploy import DeployedServer class TestDeploy(unittest.TestCase): def test_deploy(self): rem = SshMachine("localhost") SshMachine.python = rem[sys.executable] with DeployedServer(rem) as dep: conn = dep.classic_connect() print (conn.modules.sys) func = conn.modules.os.getcwd print (func()) try: func() except EOFError: pass else: self.fail("expected an EOFError") def test_deploy_paramiko(self): try: import paramiko # @UnusedImport except Exception: self.skipTest("Paramiko is not available") from plumbum.machines.paramiko_machine import ParamikoMachine rem = ParamikoMachine("localhost", missing_host_policy = paramiko.AutoAddPolicy()) with DeployedServer(rem) as dep: conn = dep.classic_connect() print (conn.modules.sys) func = conn.modules.os.getcwd print (func()) try: func() except EOFError: pass else: self.fail("expected an EOFError") if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_ipv6.py000066400000000000000000000021501314203541000161250ustar00rootroot00000000000000import rpyc import threading import socket import unittest import time from rpyc.utils.server import ThreadedServer from rpyc import SlaveService from nose import SkipTest #if not getattr(socket, "has_ipv6", False): # travis: "Network is unreachable", https://travis-ci.org/tomerfiliba/rpyc/jobs/108231239#L450 raise SkipTest("requires IPv6") class Test_IPv6(unittest.TestCase): def setUp(self): self.server = ThreadedServer(SlaveService, port = 0, ipv6 = True) self.server.logger.quiet = True self.thd = threading.Thread(target = self.server.start) self.thd.start() time.sleep(1) def tearDown(self): self.server.close() self.thd.join() def test_ipv6_conenction(self): c = rpyc.classic.connect("::1", port = self.server.port, ipv6 = True) print( repr(c) ) print( c.modules.sys ) print( c.modules["xml.dom.minidom"].parseString("") ) c.execute("x = 5") self.assertEqual(c.namespace["x"], 5) self.assertEqual(c.eval("1+x"), 6) c.close() if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_refcount.py000066400000000000000000000021271314203541000170720ustar00rootroot00000000000000import rpyc import gc import unittest class TestRefcount(unittest.TestCase): def setUp(self): self.conn = rpyc.classic.connect_thread() def tearDown(self): self.conn.close() def test_refcount(self): self.conn.execute(""" deleted_objects = [] class DummyObject(object): def __init__(self, name): self.name = name def __del__(self): deleted_objects.append(self.name)""") rDummyObject = self.conn.namespace["DummyObject"] d1 = rDummyObject("d1") d2 = rDummyObject("d2") d3 = rDummyObject("d3") d4 = rDummyObject("d4") #@UnusedVariable d2_copy = d2 del d1 del d3 gc.collect() self.assertEqual(set(self.conn.namespace["deleted_objects"]), set(["d1", "d3"])) del d2 gc.collect() self.assertEqual(set(self.conn.namespace["deleted_objects"]), set(["d1", "d3"])) del d2_copy gc.collect() self.assertEqual(set(self.conn.namespace["deleted_objects"]), set(["d1", "d2", "d3"])) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_registry.py000066400000000000000000000037361314203541000171240ustar00rootroot00000000000000import time import unittest from threading import Thread from rpyc.utils.registry import TCPRegistryServer, TCPRegistryClient from rpyc.utils.registry import UDPRegistryServer, UDPRegistryClient PRUNING_TIMEOUT = 5 class BaseRegistryTest(object): def _get_server(self): raise NotImplementedError def _get_client(self): raise NotImplementedError def setUp(self): self.server = self._get_server() self.server.logger.quiet = True self.server_thread = Thread(target=self.server.start) self.server_thread.setDaemon(True) self.server_thread.start() time.sleep(0.1) def tearDown(self): self.server.close() self.server_thread.join() def test_api(self): c = self._get_client() c.logger.quiet = True c.register(("FOO",), 12345) c.register(("FOO",), 45678) res = c.discover("FOO") expected = (12345, 45678) self.assertEqual(set(p for _, p in res), set(expected)) c.unregister(12345) res = c.discover("FOO") expected = (45678,) self.assertEqual(set(p for _, p in res), set(expected)) def test_pruning(self): c = self._get_client() c.logger.quiet = True c.register(("BAR",), 17171) time.sleep(1) res = c.discover("BAR") self.assertEqual(set(p for _, p in res), set((17171,))) time.sleep(PRUNING_TIMEOUT) res = c.discover("BAR") self.assertEqual(res, ()) class TestTcpRegistry(BaseRegistryTest, unittest.TestCase): def _get_server(self): return TCPRegistryServer(pruning_timeout=PRUNING_TIMEOUT) def _get_client(self): return TCPRegistryClient("localhost") class TestUdpRegistry(BaseRegistryTest, unittest.TestCase): def _get_server(self): return UDPRegistryServer(pruning_timeout=PRUNING_TIMEOUT) def _get_client(self): return UDPRegistryClient() if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_remoting.py000066400000000000000000000034261314203541000170740ustar00rootroot00000000000000import os import tempfile import shutil import unittest from nose import SkipTest import rpyc class Test_Remoting(unittest.TestCase): def setUp(self): self.conn = rpyc.classic.connect_thread() def tearDown(self): self.conn.close() def test_files(self): base = tempfile.mkdtemp() base1 = os.path.join(base, "1") base2 = os.path.join(base, "2") base3 = os.path.join(base, "3") os.mkdir(base1) for i in range(10): f = open(os.path.join(base1, "foofoo%d" % (i,)), "w") f.close() os.mkdir(os.path.join(base1, "somedir1")) rpyc.classic.upload(self.conn, base1, base2) self.assertEqual(sorted(os.listdir(base1)), sorted(os.listdir(base2))) rpyc.classic.download(self.conn, base2, base3) self.assertEqual(sorted(os.listdir(base2)), sorted(os.listdir(base3))) shutil.rmtree(base) def test_distribution(self): raise SkipTest("TODO: upload a package and a module") def test_interactive(self): raise SkipTest("Need to be manually") print( "type Ctrl+D to exit (Ctrl+Z on Windows)" ) rpyc.classic.interact(self.conn) def test_post_mortem(self): raise SkipTest("Need to be manually") try: self.conn.modules.sys.path[100000] except IndexError: print( "type 'q' to exit" ) rpyc.classic.pm(self.conn) raise else: self.fail("expected an exception") def test_migration(self): l = rpyc.classic.obtain(self.conn.modules.sys.path) self.assertTrue(type(l) is list) rl = rpyc.classic.deliver(self.conn, l) self.assertTrue(isinstance(rl, rpyc.BaseNetref)) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_splitbrain.py000066400000000000000000000067411314203541000174220ustar00rootroot00000000000000from __future__ import with_statement import subprocess import sys import os import rpyc import unittest import tempfile import shutil import traceback from rpyc.experimental.splitbrain import splitbrain, localbrain, enable_splitbrain, disable_splitbrain if not hasattr(unittest.TestCase, "assertIn"): unittest.TestCase.assertIn = lambda self, member, container, msg = None: self.assertTrue(member in container, msg) if not hasattr(unittest.TestCase, "assertNotIn"): unittest.TestCase.assertNotIn = lambda self, member, container, msg = None: self.assertFalse(member in container, msg) def b(st): if sys.version_info[0] >= 3: return bytes(st, "latin-1") else: return st class SplitbrainTest(unittest.TestCase): def setUp(self): enable_splitbrain() server_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "bin", "rpyc_classic.py") self.proc = subprocess.Popen([sys.executable, server_file, "--mode=oneshot", "--host=localhost", "-p0"], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE) line = self.proc.stdout.readline().strip() if not line: print (self.proc.stderr.read()) self.fail("server failed to start") self.assertEqual(line, b("rpyc-oneshot"), "server failed to start") host, port = self.proc.stdout.readline().strip().split(b("\t")) self.conn = rpyc.classic.connect(host, int(port)) def tearDown(self): self.conn.close() disable_splitbrain() def test(self): here = os.getcwd() mypid = os.getpid() with open("split-test.txt", "w") as f: f.write("foobar") with splitbrain(self.conn): try: path = tempfile.mkdtemp() import email self.assertNotIn("stale", repr(email)) os.chdir(path) hispid = os.getpid() self.assertNotEqual(mypid, hispid) here2 = os.getcwd() self.assertNotEqual(here, here2) self.assertFalse(os.path.exists("split-test.txt")) with open("split-test.txt", "w") as f: f.write("spam") with localbrain(): self.assertEqual(os.getpid(), mypid) with open("split-test.txt", "r") as f: self.assertEqual(f.read(), "foobar") try: def f(): g() def g(): h() def h(): open("crap.txt", "r") f() except IOError: with localbrain(): tbtext = "".join(traceback.format_exception(*sys.exc_info())) # pdb.post_mortem(sys.exc_info()[2]) self.assertIn("f()", tbtext) self.assertIn("g()", tbtext) self.assertIn("h()", tbtext) else: self.fail("This should have raised a IOError") finally: # we must move away from the tempdir to delete it (at least on windows) os.chdir("/") shutil.rmtree(path) self.assertIn("stale", repr(email)) self.assertEqual(os.getpid(), mypid) self.assertEqual(os.getcwd(), here) os.remove("split-test.txt") if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_ssh.py000066400000000000000000000027111314203541000160410ustar00rootroot00000000000000import rpyc import time import threading import sys import os import unittest from rpyc.utils.server import ThreadedServer from rpyc import SlaveService from plumbum import SshMachine class Test_Ssh(unittest.TestCase): def setUp(self): if sys.platform == "win32": self.server = None os.environ["HOME"] = os.path.expanduser("~") self.remote_machine = SshMachine("localhost") else: # assume "ssh localhost" is configured to run without asking for password self.server = ThreadedServer(SlaveService, hostname = "localhost", ipv6 = False, port = 18888, auto_register=False) t = threading.Thread(target=self.server.start) t.setDaemon(True) t.start() time.sleep(0.5) self.remote_machine = SshMachine("localhost") def tearDown(self): if self.server: self.server.close() def test_simple(self): conn = rpyc.classic.ssh_connect(self.remote_machine, 18888) print( "server's pid =", conn.modules.os.getpid()) conn.modules.sys.stdout.write("hello over ssh\n") conn.modules.sys.stdout.flush() def test_connect(self): conn2 = rpyc.ssh_connect(self.remote_machine, 18888, service=SlaveService) conn2.modules.sys.stdout.write("hello through rpyc.ssh_connect()\n") conn2.modules.sys.stdout.flush() if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_ssl.py000066400000000000000000000030511314203541000160430ustar00rootroot00000000000000import rpyc import os import threading import unittest import time from rpyc.utils.authenticators import SSLAuthenticator from rpyc.utils.server import ThreadedServer from rpyc import SlaveService from nose import SkipTest try: import ssl #@UnusedImport except ImportError: raise SkipTest("requires ssl") class Test_SSL(unittest.TestCase): ''' created key like that http://www.akadia.com/services/ssh_test_certificate.html openssl req -newkey rsa:1024 -nodes -keyout mycert.pem -out mycert.pem ''' def setUp(self): self.key = os.path.join( os.path.dirname(__file__) , "server.key") self.cert = os.path.join( os.path.dirname(__file__) , "server.crt") print( self.cert, self.key ) authenticator = SSLAuthenticator(self.key, self.cert) self.server = ThreadedServer(SlaveService, port = 18812, auto_register=False, authenticator = authenticator) self.server.logger.quiet = False t = threading.Thread(target=self.server.start) t.start() time.sleep(1) def tearDown(self): self.server.close() def test_ssl_conenction(self): c = rpyc.classic.ssl_connect("localhost", port = 18812, keyfile=self.key, certfile=self.cert) print( repr(c) ) print( c.modules.sys ) print( c.modules["xml.dom.minidom"].parseString("") ) c.execute("x = 5") self.assertEqual(c.namespace["x"], 5) self.assertEqual(c.eval("1+x"), 6) c.close() if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_teleportation.py000066400000000000000000000033321314203541000201350ustar00rootroot00000000000000from __future__ import with_statement import subprocess import sys import os import rpyc import unittest from rpyc.utils.teleportation import export_function, import_function from rpyc.utils.classic import teleport_function def b(st): if sys.version_info[0] >= 3: return bytes(st, "latin-1") else: return st def f(a): def g(b): return a + int(b) return g def h(a): import os return a * os.getpid() class TeleportationTest(unittest.TestCase): def setUp(self): server_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "bin", "rpyc_classic.py") self.proc = subprocess.Popen([sys.executable, server_file, "--mode=oneshot", "--host=localhost", "-p0"], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE) line = self.proc.stdout.readline().strip() if not line: print (self.proc.stderr.read()) self.fail("server failed to start") self.assertEqual(line, b("rpyc-oneshot"), "server failed to start") host, port = self.proc.stdout.readline().strip().split(b("\t")) self.conn = rpyc.classic.connect(host, int(port)) def tearDown(self): self.conn.close() def test(self): exp = export_function(f) f2 = import_function(exp) self.assertEqual(f(6)(7), f2(6)(7)) # HACK: needed so the other side could import us (for globals) mod = self.conn.modules.types.ModuleType(__name__) self.conn.modules.sys.modules[__name__] = mod mod.__builtins__ = self.conn.builtins h2 = teleport_function(self.conn, h) self.assertNotEqual(h(7), h2(7)) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_threaded_server.py000066400000000000000000000032441314203541000204140ustar00rootroot00000000000000import os import rpyc import time import tempfile from rpyc.utils.server import ThreadedServer from rpyc import SlaveService import threading import unittest class Test_ThreadedServer(unittest.TestCase): def setUp(self): self.server = ThreadedServer(SlaveService, port=18878, auto_register=False) self.server.logger.quiet = False t = threading.Thread(target=self.server.start) t.setDaemon(True) t.start() time.sleep(0.5) def tearDown(self): self.server.close() def test_connection(self): c = rpyc.classic.connect("localhost", port=18878) print( c.modules.sys ) print( c.modules["xml.dom.minidom"].parseString("") ) c.execute("x = 5") self.assertEqual(c.namespace["x"], 5) self.assertEqual(c.eval("1+x"), 6) c.close() class Test_ThreadedServerOverUnixSocket(unittest.TestCase): def setUp(self): self.socket_path = tempfile.mktemp() self.server = ThreadedServer(SlaveService, socket_path=self.socket_path, auto_register=False) self.server.logger.quiet = False t = threading.Thread(target=self.server.start) t.setDaemon(True) t.start() time.sleep(0.5) def tearDown(self): self.server.close() os.remove(self.socket_path) def test_connection(self): c = rpyc.classic.unix_connect(self.socket_path) print( c.modules.sys ) print( c.modules["xml.dom.minidom"].parseString("") ) c.execute("x = 5") self.assertEqual(c.namespace["x"], 5) self.assertEqual(c.eval("1+x"), 6) c.close() if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_threads.py000066400000000000000000000030051314203541000166730ustar00rootroot00000000000000#!/usr/bin/env python import threading import time import unittest import rpyc class MyService(rpyc.Service): class exposed_Invoker(object): def __init__(self, callback, interval): self.callback = rpyc.async(callback) self.interval = interval self.active = True self.thread = threading.Thread(target=self.work) self.thread.setDaemon(True) self.thread.start() def exposed_stop(self): self.active = False self.thread.join() def work(self): while self.active: self.callback(time.time()) time.sleep(self.interval) def exposed_foo(self, x): time.sleep(2) return x * 17 class Test_Multithreaded(unittest.TestCase): def setUp(self): self.conn = rpyc.connect_thread(remote_service=MyService) self.bgserver = rpyc.BgServingThread(self.conn) def tearDown(self): self.bgserver.stop() self.conn.close() def test_invoker(self): counter = [0] def callback(x): counter[0] += 1 print( "callback %s" % (x,) ) invoker = self.conn.root.Invoker(callback, 1) # 3 * 2sec = 6 sec = ~6 calls to callback for i in range(3): print( "foo%s = %s" % (i, self.conn.root.foo(i)) ) invoker.stop() print( "callback called %s times" % (counter[0],) ) self.assertTrue(counter[0] >= 5) if __name__ == "__main__": unittest.main() rpyc-3.4.4/tests/test_win32pipes.py000066400000000000000000000040721314203541000172510ustar00rootroot00000000000000import sys import time import unittest from threading import Thread from nose import SkipTest if sys.platform != "win32": raise SkipTest("Requires windows") import rpyc from rpyc.core.stream import PipeStream, NamedPipeStream from rpyc.lib.compat import BYTES_LITERAL class Test_Pipes(unittest.TestCase): def test_basic_io(self): p1, p2 = PipeStream.create_pair() p1.write(BYTES_LITERAL("hello")) assert p2.poll(0) assert p2.read(5) == BYTES_LITERAL("hello") assert not p2.poll(0) p2.write(BYTES_LITERAL("world")) assert p1.poll(0) assert p1.read(5) == BYTES_LITERAL("world") assert not p1.poll(0) p1.close() p2.close() def test_rpyc(self): p1, p2 = PipeStream.create_pair() client = rpyc.connect_stream(p1) server = rpyc.connect_stream(p2) server_thread = Thread(target=server.serve_all) server_thread.start() assert client.root.get_service_name() == "VOID" t = rpyc.BgServingThread(client) assert server.root.get_service_name() == "VOID" t.stop() client.close() server.close() server_thread.join() class Test_NamedPipe(object): def setUp(self): self.pipe_server_thread = Thread(target=self.pipe_server) self.pipe_server_thread.start() time.sleep(1) # make sure server is accepting already self.np_client = NamedPipeStream.create_client("floop") self.client = rpyc.connect_stream(self.np_client) def tearDown(self): self.client.close() self.server.close() self.pipe_server_thread.join() def pipe_server(self): self.np_server = NamedPipeStream.create_server("floop") self.server = rpyc.connect_stream(self.np_server) self.server.serve_all() def test_rpyc(self): assert self.client.root.get_service_name() == "VOID" t = rpyc.BgServingThread(self.client) assert self.server.root.get_service_name() == "VOID" t.stop() if __name__ == "__main__": unittest.main()