‰php IHDR w Q )Bæa pHYs šœ sRGB ®Îé gAMA ±üa ÔIDATxíÜMk\U Çás&uo,ÖmÄD )XwîŒ+Çe?‰ºtw.“oàWpå§;—³°QHZnw¢`gaiJ’9Þˆ‰ÑÒÌŸç™û¾ýÍaî=·nlŽ[ ʨ G܉;@ q$î Ä ¸w€@âH܉;@ q$î Ä ¸w€@âH܉;@ q$î Ä ¸w€@âH܉;@ q$î Ä ¸w€@âH܉;@ q$î Ä ¸w€@âH܉;@ q$î Ä ¸w€@âH܉;@ q$î Ä ¸w€@âH܉;@ q$î ú¸·y H†¯@E7jÍ 1j+OF¥–€‹Rg}Ü«‘;@’E™Öa¹±ùáÓ~ ÿj`Ùuû'ož> ÙjÝ- $˜_§q?¾q¸S XzG'åóay
files >> /opt/lampp/manual/mod/ |
files >> //opt/lampp/manual/mod/mod_proxy_balancer.html.fr |
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX This file is generated from xml source: DO NOT EDIT XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --> <title>mod_proxy_balancer - Serveur Apache HTTP Version 2.4</title> <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> <script src="../style/scripts/prettify.min.js" type="text/javascript"> </script> <link href="../images/favicon.ico" rel="shortcut icon" /></head> <body> <div id="page-header"> <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> <p class="apache">Serveur Apache HTTP Version 2.4</p> <img alt="" src="../images/feather.gif" /></div> <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> <div id="path"> <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Modules</a></div> <div id="page-content"> <div id="preamble"><h1>Module Apache mod_proxy_balancer</h1> <div class="toplang"> <p><span>Langues Disponibles: </span><a href="../en/mod/mod_proxy_balancer.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../fr/mod/mod_proxy_balancer.html" title="Français"> fr </a> | <a href="../ja/mod/mod_proxy_balancer.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> </div> <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Extension de <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> pour le support de la répartition de charge</td></tr> <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr> <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>proxy_balancer_module</td></tr> <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_proxy_balancer.c</td></tr> <tr><th><a href="module-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.1 d'Apache</td></tr></table> <h3>Sommaire</h3> <p>Pour pouvoir fonctionner, ce module <em>requiert</em> le chargement de <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. Il fournit le support de la répartition de charge pour les protocoles <code>HTTP</code>, <code>FTP</code> et <code>AJP13</code>. </p> <p>L'algorithme de planification de la répartition de charge est fourni par des modules tels que <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code>, <code class="module"><a href="../mod/mod_lbmethod_bytraffic.html">mod_lbmethod_bytraffic</a></code>, <code class="module"><a href="../mod/mod_lbmethod_bybusyness.html">mod_lbmethod_bybusyness</a></code> and <code class="module"><a href="../mod/mod_lbmethod_heartbeat.html">mod_lbmethod_heartbeat</a></code>. </p> <p>Ainsi, pour mettre en oeuvre la répartition de charge, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> et au moins un des modules fournissant l'algorithme de planification de la répartition de charge doivent être chargés dans le serveur.</p> <div class="warning"><h3>Avertissement</h3> <p>N'activez pas la fonctionnalité de mandataire avant d'avoir <a href="mod_proxy.html#access">sécurisé votre serveur</a>. Les serveurs mandataires ouverts sont dangereux non seulement pour votre réseau, mais aussi pour l'Internet au sens large.</p> </div> </div> <div id="quickview"><h3>Sujets</h3> <ul id="topics"> <li><img alt="" src="../images/down.gif" /> <a href="#scheduler">L'algorithme de planification de la répartition de charge</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#stickyness">Répartition de charge avec abonnement utilisateur (stickyness)</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#example">Exemples de configuration d'un répartiteur</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#environment">Variables d'environnement exportées</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#balancer_manager">Activation du support du gestionnaire de répartiteur</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#stickyness_implementation">Détails à propos de la répartition de charge par abonnement (stickyness)</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#stickyness_troubleshooting">Résolution des problèmes liés à la répartition de charge par abonnement</a></li> </ul><h3 class="directives">Directives</h3> <p>Ce module ne fournit aucune directive.</p> <h3>Voir aussi</h3> <ul class="seealso"> <li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li> </ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="scheduler" id="scheduler">L'algorithme de planification de la répartition de charge</a></h2> <p>A l'heure actuelle, 3 algorithmes de planification de la répartition de charge sont disponibles : ils se basent respectivement sur le comptage des requêtes, la mesure du trafic et le comptage des requêtes en attente. Ils sont contrôlés par la valeur de <code>lbmethod</code> dans la définition du répartiteur. Voir la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> pour plus de détails, et en particulier la configuration du répartiteur et de ses membres.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="stickyness" id="stickyness">Répartition de charge avec abonnement utilisateur (stickyness)</a></h2> <p>Le répartiteur supporte l'abonnement utilisateur. Lorsqu'une requête est mandatée vers un serveur d'arrière-plan particulier, toutes les requêtes suivantes du même utilisateur seront alors mandatées vers le même serveur d'arrière-plan. De nombreux répartiteurs de charge implémentent cette fonctionnalité via une table qui associe les adresses IP des clients aux serveurs d'arrière-plan. Cette approche est transparente aux clients et aux serveurs d'arrière-plan, mais induit certains problèmes : distribution de charge inégale si les clients se trouvent eux-mêmes derrière un mandataire, erreurs d'abonnement lorsqu'un client possède une adresse IP dynamique qui peut changer au cours d'une session et perte d'abonnement en cas de dépassement de la table de correspondances.</p> <p>Le module <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> implémente l'abonnement selon deux alternatives : les cookies et le codage d'URL. Le cookie peut être fourni par le serveur d'arrière-plan ou par le serveur web Apache lui-même, alors que le codage d'URL est en général effectué par le serveur d'arrière-plan.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="example" id="example">Exemples de configuration d'un répartiteur</a></h2> <p>Avant de nous plonger dans les détails techniques, voici un exemple d'utilisation de <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> mettant en oeuvre la répartition de charge entre deux serveurs d'arrière-plan : </p> <pre class="prettyprint lang-config"><Proxy "balancer://mycluster"> BalancerMember "http://192.168.1.50:80" BalancerMember "http://192.168.1.51:80" </Proxy> ProxyPass "/test" "balancer://mycluster" ProxyPassReverse "/test" "balancer://mycluster"</pre> <p>Voici un autre exemple de répartiteur de charge avec abonnement utilisant <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>, fonctionnant même si le serveur d'arrière-plan ne définit pas de cookie de session approprié : </p> <pre class="prettyprint lang-config">Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy "balancer://mycluster"> BalancerMember "http://192.168.1.50:80" route=1 BalancerMember "http://192.168.1.51:80" route=2 ProxySet stickysession=ROUTEID </Proxy> ProxyPass "/test" "balancer://mycluster" ProxyPassReverse "/test" "balancer://mycluster"</pre> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="environment" id="environment">Variables d'environnement exportées</a></h2> <p>A l'heure actuelle, 6 variables d'environnement sont exportées :</p> <dl> <dt><var><a name="balancer_session_sticky" id="balancer_session_sticky">BALANCER_SESSION_STICKY</a></var></dt> <dd> <p>Cette variable se voir assignée la valeur de <var>stickysession</var> pour la requête courante. Il s'agit du nom du cookie ou du paramètre de requête utilisé pour les sessions avec abonnement.</p> </dd> <dt><var><a name="balancer_session_route" id="balancer_session_route">BALANCER_SESSION_ROUTE</a></var></dt> <dd> <p>Cette variable se voit assignée la <var>route</var> interprétée pour la requête courante.</p> </dd> <dt><var><a name="balancer_name" id="balancer_name">BALANCER_NAME</a></var></dt> <dd> <p>Cette variable se voit assigné le nom du répartiteur pour la requête courante. Il s'agit d'une valeur du style <code>balancer://foo</code>.</p> </dd> <dt><var><a name="balancer_worker_name" id="balancer_worker_name">BALANCER_WORKER_NAME</a></var></dt> <dd> <p>Cette variable se voit assigné le nom du membre du groupe de répartition de charge utilisé pour la requête courante. Il s'agit d'une valeur du style <code>http://hostA:1234</code>.</p> </dd> <dt><var><a name="balancer_worker_route" id="balancer_worker_route">BALANCER_WORKER_ROUTE</a></var></dt> <dd> <p>Cette variable se voit assignée la <var>route</var> du membre du groupe de répartition de charge qui sera utilisé pour la requête courante.</p> </dd> <dt><var><a name="balancer_route_changed" id="balancer_route_changed">BALANCER_ROUTE_CHANGED</a></var></dt> <dd> <p>Cette variable est définie à 1 si la route de la session ne correspond pas à celle du membre du groupe de répartition de charge (BALANCER_SESSION_ROUTE != BALANCER_WORKER_ROUTE), ou si la session ne possède pas encore de route établie. Elle peut servir à déterminer quand il est éventuellement nécessaire d'envoyer au client une route mise à jour lorsque les sessions persistantes sont utilisées.</p> </dd> </dl> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="balancer_manager" id="balancer_manager">Activation du support du gestionnaire de répartiteur</a></h2> <p>Cette fonctionnalité <em>nécessite</em> le chargement du module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>. Le gestionnaire de répartiteur permet la mise à jour dynamique des membres du groupe de répartition de charge. Vous pouvez utiliser le gestionnaire de répartiteur pour modifier le facteur de charge d'un membre particulier, ou passer ce dernier en mode hors ligne. </p> <p>Ainsi, pour mettre en oeuvre la gestion du répartiteur de charge, <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> et <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> doivent être chargés dans le serveur.</p> <p>Pour permettre la gestion du répartiteur de charge aux navigateurs appartenant au domaine example.com, ajoutez ces lignes à votre fichier de configuration <code>httpd.conf</code> :</p> <pre class="prettyprint lang-config"><Location "/balancer-manager"> SetHandler balancer-manager Require host example.com </Location></pre> <p>Vous pourrez alors accéder au gestionnaire du répartiteur de charge en utilisant un navigateur web pour afficher la page <code>http://nom.de.votre.serveur/balancer-manager</code>. Notez que pour pouvoir contrôler dynamiquement un membre de groupe de répartition, ce dernier ne doit pas être défini au sein d'une section <code><Location ...></code>.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="stickyness_implementation" id="stickyness_implementation">Détails à propos de la répartition de charge par abonnement (stickyness)</a></h2> <p>Si l'abonnement s'appuie sur un cookie, vous devez définir le nom de ce cookie dont le contenu précise le serveur d'arrière-plan à utiliser. Pour ce faire, on utilise l'attribut <var>stickysession</var> avec la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code>. Le nom du cookie est sensible à la casse. Le répartiteur extrait le contenu du cookie et recherche un serveur membre dont la <var>route</var> correspond à cette valeur. La route doit aussi être définie dans la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code>. Le cookie peut être défini soit par le serveur d'arrière-plan, soit, comme indiqué dans l'<a href="#example">exemple</a> ci-dessus par le serveur web Apache lui-même.</p> <p>Certains serveurs d'arrière-plan, tels qu'Apache Tomcat, utilisent une forme sensiblement différente de cookie d'abonnement. Tomcat ajoute le nom de l'instance Tomcat à la fin de son identifiant de session, précédé par un point. Ainsi, si le serveur web Apache trouve un point dans la valeur du cookie d'abonnement, il n'utilisera que la partie située après ce point pour rechercher sa route. Pour que Tomcat puisse connaître son nom d'instance, vous devez définir l'attribut <code>jvmRoute</code> dans son fichier de configuration <code>conf/server.xml</code> à la valeur de la <var>route</var> du serveur qui se connecte au Tomcat considéré. Le nom du cookie de session utilisé par Tomcat (et plus généralement par les applications web Java à base de servlets) est <code>JSESSIONID</code> (en majuscules), mais peut être modifié.</p> <p>La seconde méthode pour implémenter l'abonnement est le codage d'URL. Ici, le serveur web recherche un paramètre dans l'URL de la requête. Le nom du paramètre est spécifié par l'attribut <var>stickysession</var>. Pour trouver un serveur membre, on recherche un serveur dont la <var>route</var> est égale à la valeur du paramètre. Comme il n'est pas aisé d'extraire et de manipuler tous les liens URL contenus dans les réponses, le travail consistant à ajouter les paramètres à chaque lien est généralement effectué par le serveur d'arrière-plan qui génère le contenu. Bien qu'il soit possible dans certains cas d'effectuer ces ajouts au niveau du serveur web via les modules <code class="module"><a href="../mod/mod_substitute.html">mod_substitute</a></code> ou <code class="module"><a href="../mod/mod_sed.html">mod_sed</a></code>, cette méthode peut dégrader les performances.</p> <p>Les standards Java implémentent le codage d'URL de manière sensiblement différente. Ils ajoutent une information de chemin à l'URL en utilisant un point-virgule (<code>;</code>) comme séparateur, puis ajoutent enfin l'identifiant de session. Comme dans le cas des cookies, Apache Tomcat peut insérer la valeur de l'attribut <code>jvmRoute</code> dans cette information de chemin. Pour qu'Apache puisse trouver ce genre d'information de chemin, vous devez définir <code>scolonpathdelim</code> à <code>On</code> dans la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code>.</p> <p>Enfin, vous pouvez utiliser simultanément les cookies et le codage d'URL en définissant le nom du cookie et le nom du paramètre d'URL séparés par une barre verticale (<code>|</code>) comme dans l'exemple suivant :</p> <pre class="prettyprint lang-config">ProxyPass "/test" "balancer://mycluster" stickysession=JSESSIONID|jsessionid scolonpathdelim=On <Proxy "balancer://mycluster"> BalancerMember "http://192.168.1.50:80" route=node1 BalancerMember "http://192.168.1.51:80" route=node2 </Proxy></pre> <p>Si le cookie et le paramètre de requête fournissent tous deux une information de route correcte pour la même requête, c'est l'information en provenance du paramètre de requête qui sera retenue.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="stickyness_troubleshooting" id="stickyness_troubleshooting">Résolution des problèmes liés à la répartition de charge par abonnement</a></h2> <p>Si vous êtes confronté à des erreurs d'abonnement, comme la nécessité pour les utilisateurs de se reconnecter suite à une perte de session d'application, vous devez tout d'abord vérifier si ceci n'est pas du à une indisponibilité sporadique des serveurs d'arrière-plan ou à une erreur de configuration. La présence de messages d'erreur de type proxy dans le journal des erreurs d'Apache pourra révéler des problèmes de stabilité au niveau des serveurs d'arrière-plan.</p> <p>Pour contrôler votre configuration, regardez tout d'abord si l'abonnement est à base de cookie ou de codage d'URL. L'étape suivante consiste à enregistrer certaines données dans le journal des accès en utilisant un <code class="directive"><a href="../mod/mod_log_config.html#format de journalisation">format de journalisation</a></code> personnalisé. Les champs intéressants sont les suivants :</p> <dl> <dt><code>%{MONCOOKIE}C</code></dt> <dd>La valeur que contient le cookie de nom <code>MONCOOKIE</code>. Le nom doit correspondre au nom défini par l'attribut <var>stickysession</var>.</dd> <dt><code>%{Set-Cookie}o</code></dt> <dd>Ce champ contient tout cookie défini par le serveur d'arrière-plan. Vous pouvez ainsi vérifier si le serveur d'arrière-plan définit bien le cookie de session auquel vous vous attendez, et à quelle valeur il est défini.</dd> <dt><code>%{BALANCER_SESSION_STICKY}e</code></dt> <dd>Le nom du cookie ou du paramètre de requête utilisé pour la recherche de l'information de routage.</dd> <dt><code>%{BALANCER_SESSION_ROUTE}e</code></dt> <dd>L'information de routage extraite de la requête.</dd> <dt><code>%{BALANCER_WORKER_ROUTE}e</code></dt> <dd>La route du serveur choisi.</dd> <dt><code>%{BALANCER_ROUTE_CHANGED}e</code></dt> <dd>Contient la valeur <code>1</code> si la route extraite de la requête est différente de la route du serveur ; autrement dit, le traitement de la requête n'a pas pu être effectué dans le cadre d'une répartition de charge par abonnement.</dd> </dl> <p>Les pertes de session sont souvent dues à des expirations de session dont la valeur peut en général être configurée au niveau du serveur d'arrière-plan.</p> <p>Si le niveau de journalisation est défini à <code>debug</code> ou plus, le répartiteur journalise aussi des informations détaillées à propos de l'abonnement dans le journal des erreurs, ce qui facilite la résolution des problèmes d'abonnement. Notez cependant que le volume de journalisation pourra alors s'avérer trop important pour un serveur en production sous forte charge.</p> </div> </div> <div class="bottomlang"> <p><span>Langues Disponibles: </span><a href="../en/mod/mod_proxy_balancer.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../fr/mod/mod_proxy_balancer.html" title="Français"> fr </a> | <a href="../ja/mod/mod_proxy_balancer.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div> <script type="text/javascript"><!--//--><![CDATA[//><!-- var comments_shortname = 'httpd'; var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html'; (function(w, d) { if (w.location.hostname.toLowerCase() == "httpd.apache.org") { d.write('<div id="comments_thread"><\/div>'); var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); } else { d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); } })(window, document); //--><!]]></script></div><div id="footer"> <p class="apache">Copyright 2015 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- if (typeof(prettyPrint) !== 'undefined') { prettyPrint(); } //--><!]]></script> </body></html>ß yôÊá½~ŒorÀ5ÖJ™={þÁEÇêe¾uç£Qk ®•ᯘG{÷?ù»ã+—]üôçƒÉÍ×ןô?wûM3X^¶ÚæŒ>{´7Ù¾ì´Kã>èo²ÎnÝ\ÿªÊj¿y· ðR£õãg/î=ÞÿfúOçÖr·o×NVÊv¿ú~ÿY+ ü¿NGêu÷ø·Ã®›þë¹HWŠûyëwÆ[eQ¶Ê¨¾SÚbÖ>öÍËÇ þ³>ä}Gçmx[o[<ÞÚ{ðýŸÏ®_ÅïqF–ÚÛvM IEND®B`‚