Introduction

Ce wiki explique une variante automatisée des étapes 1, 2 et 3 du wiki suivant : certificats

Pourquoi ce script de génération des clef .cer et .pfx ?

Le 5 Décembre 2007, Free a mis à disposition sur son site les certificats destinés à nos compte SIP permettant de configurer notre pocket PC / GSM compatible SIP :

Le but ? Permettre à chacun d’entre nous d’utiliser le réseau wifi freephonie des freebox des autres pour pouvoir téléphoner de n’importe où.

Or le problème, c’est qu’une fois les 3 fichiers de clefs récupérés sur le site de free, il faut générer les certificats afin d’accéder au réseau wifi freephonie.\ Pour celà, il faut :

  • Correctement formatter les 3 fichiers des certificats et clef privée/publique issus du site de free
  • Générer le fichier pfx qu’il faudra importer sur votre pda (ou autre)
  • Générer le fichier cer qu’il faudra importer sur votre pda (ou autre)

Ceci en utilisant Openssl.

Les certificats sont à régénérer tous les 2 mois, ce travail, un petit script est capable de le faire automatiquement.

Problème : le script bat sous windows est très limité !

Il existe un programme, CScript (de base sous windows) qui permet d’exécuter du vbscript et de faire des choses assez complexes.
Ici, grâce à des expressions régulières le script récupère et reformatte les clefs privée/publique/root(racine) directement à partir d’un copier/coller de la page web ou de sa sauvegarde, plus la peine de l’éditer et de remettre en forme manuellement.

Ensuite le script génère via Openssl les fichiers .pfx et .cer (ou directement le .pfx contenant le .cer)...

Sur la ligne de commande on peut spécifier des options permettant de donner les noms des fichiers générés ou des fichiers d’entrés.

Utilisation

A utiliser sous windows... c’est du vbscript

Télécharger le fichier “GenerateFreeCertificates.vbs” dont le lien de téléchargement est situé en bas de la page.

Depuis la version 1.4 la double clic sur le fichier “GenerateFreeCertificates.vbs” le lance automatiquement en mode wizard(assistant).

Génération des certificats à partir des clefs SIP données par FREE

Pour utiliser ce script de génération du certificat Free :

Attention : à partir de la version 2.0, les points (1) (2) (3) (4) (5) (8) sont exécuté par le script qui récupère lui même le fichier freephonie.txt, permet de crypter les certificats, etc.
Attention : à partir de la version 2.1, le point (6) peut être exécuté à partir de l’interface graphique qui se charge de télécharger la version Win32 Light de OpenSSL et lance l’installation qui est alors à faire par l’utilisateur.

1) Aller sur le site de Free (http://subscribe.free.fr/login).

2) Se logguer sur le site de free.

3) Dans l’interface de gestion, cliquez sur “Gestion de mon compte SIP

4) Cliquez sur Afficher les certificats pour votre pocket PC / Smartphone

5) Faire (a) ou (b) ou tout autre façon pour récupérer les clefs SIP dans un fichier texte (pas la peine de le reformatter correctement sinon le script perd une grande partie de son intérêt)
a) Faire copier / coller de la page web en prenant bien soin de copier indiquant les 3 clefs SIP nécessaires pour se connecter sur le réseau freephonie. Le copier dans un fichier texte (sans remise en forme) de votre choix.
b) Dans l’explorateur, faire ficher / enregistrer sous... et enregistrer la page.

Par défaut on appelera ce fichier Freephonie.txt (on peut en choisir un autre avec l’option -i)

6) Installer le programme openssl.
http://gnuwin32.sourceforge.net/downlinks/openssl-bin.php (v 0.9.7c)
ou
http://www.grandville.net/download/OpenSSL.0.9.8g.exe (v 0.9.8g)
ou
http://www.slproweb.com/download/Win32OpenSSL-0_9_8g.exe (v Win32 0.9.8g)
ou
http://www.slproweb.com/download/Win32OpenSSL_Light-0_9_8g.exe (v Win32 Light 0.9.8g)

Le script va rechercher en base de registre où il a été installé

7) Lancer le script en double-cliquant dessus.

8) Le script demande :
Enter Export Password: Tappez ENTER
Verifying - Enter Export Password: Tappez ENTER

Les clefs sont alors correctement générées

NB) Pour importer le fichier cer sous wm5 il faut télécharger l’utilitaire pfximprt disponible à l’adresse : http://www.jacco2.dds.nl/networking/pfximprt.zip

Attention, pour le login / password : le certificat free doit être utilisé mais le login wifi n’est pas votre n° de téléphone, c’est le n° “Octroyé à” dans les détails du certificat free.

Si après connexion au réseau freephonie il est impossible de se connecter via sjphone : Partout où il faut entrer freephonie.net il faut le remplacer par l’adressr IP 172.17.20.241 et là on arriver à se connecter au SIP, c’est comme si il cherche le serveur freephonie.net et que le DNS ne fonctionne pas : en remplaçant par l’adresse IP directement, ça devrait fonctionner !

Explications sur les fichiers cer et pfx :

Fichier .cer = le certificat de l’autorité de certification: le supérieur hiérarchique qui génère tous les certificats (aussi appelé racine ou root).
Fichier .pfx = combinaison du certificat personnel (donc signé par la racine précédemment citée) + la clé privée qui permet de prouver que le certificat nous appartient bien.

Puis, lancer une commande cmd (ou avec un fichier bat) : CSCript //Nologo GenerateFreeCertificates.vbs -help

Le fichier d’entrée (Freephonie.txt) doit être au même endroit que le fichier vbscript !

Sécurité

Plusieurs questions de sécurité ont été posées par les utilisateurs du script :

  • Une fois le certificat généré, le script pourrait transférer les certificats, les identifiants et mot de passe du compte Free sur un site ou une adresse quelconque pour être utilisé à des fins frauduleuses.
  • Ce certificat permet de téléphoner par SIP via le compte Freebox, et d’appeler des mobiles en 06, ou des communications vers l’étranger.


Pourquoi ce script de génération est-il fiable ?

Lors du développement, Feneck91 a fait très attention aux problèmes de sécurité car le script demande les login / mot de passe Free pour récupérer les certificats, automatiquement sur le site de Free.

  • Feneck91 a développé 100% de ce script et certifie qu’il n’y a aucun détournement des identifiants / mot de passe ou certificats ni par mail, ni par n’importe quel autre moyen.
  • Comme vous n’êtes pas obligé de croire Feneck91. Le script n’a pas été développé en langage compilé mais en script et à ce titre, le fichier est un fichier texte lisible par tous. S’il y avait des espions d’autres l’auraient remarqué et signalés à Freephonie.
  • En regardant l’historique, la version 2.1 indique “Récupération des certificats sur le site de Free par un POST et non plus en passant en clair les login/mot de passe dans l’URL (problème de sécurité).”. Le script ne passe plus les identifiants / mot de passe directement par l’URL mais par post, de la même façon que lorsque c’est l’utilisateur qui va sur le site de free et qui se loggue.
  • Le fichier GenerateFreeCertificates-<n° Version>.ini contient les informations des logins et des mots de passe Free (entre autre) (exemples : FreeLogin=C55123E4E89C094ABE0B / FreePassword=06942128E865AF ) : les logins / mot de passe sont cryptés / mélangé, ils ne sont valable que sur le PC qui les a générés, si ce fichier est copié sur un autre PC, il ne sera pas lisible.
  • Les deux fonctions qui sont utilisées pour dialoguer avec le net sont WGet et DownloadHTTPFile. Aucune n’envoie des informations sur le net sauf pour se logguer sur la page de Free. C’est la fonction RetrieveCertificats qui récupère les certificats en envoyant des requêtes sur le site de Free.
  • Si vous ne faites pas confiance à ce script, vous pouvez toujours (pour ne pas donner vos identifiants au script) sauver la page web contenant les certificats sous n’importe quel nom et aller chercher ce fichier sauvegardé dans le champ Chemin du fichier des certificats en cliquant sur le bouton Parcourir....
  • Avec vos identifiants et mot de passe :
    • On ne peut pas modifier ce mot de passe freephonie à partir des identifiants donnés au script, car n’étant pas derrière la Freebox correspondant aux identifiants, toute modification du mot de passe Freephonie se solde par le message : Erreur : Adresse IP origine invalide. Pour des raisons de sécurité les modifications concernant votre compte téléphonie SIP ne sont possible que depuis votre Freebox.
    • On pourrait modifier beaucoup de paramètres de la Freebox de l’abonné, et l’empécher d’utiliser correctement sa freebox, je n’en dirais pas plus à ce sujet pour ne pas donner des idées à des personnes malveillantes.
  • Avec votre certificat :
    • Donner les certificats permet juste de se connecter sur une autre freebox sur le réseau freephonie, pas d’utiliser freephonie sans le mot de passe ! C’est ce mot de passe qui protège le compte SIP !
    • On peut se connecter sur le réseau freephonie mais pas utiliser votre freephonie puisqu’il y a un mot de passe spécifique pour l’utiliser et ça le script ne te le demande pas.
    • On ne peut pas appeler l’étranger, Free l’interdit depuis des années.
  • Autre gage de sérieux du script : il contient le nom / prénom de Feneck91 ainsi qu’une adresse mail où il est joignable. Si le script détournait les identifiants, il n’aurait pas mis son nom.


Que faire pour limiter les risque ?

  • Chaque nouvelle version du script est postée sur le site de ti1ca par Feneck91 puis le wiki est modifié pour donner cette URL.
    • Ce wiki, pour des problèmes de sécurité (modification des URLs données par Feneck91 pour pointer vers des scripts frauduleux), a été bloqué : seuls Feneck91 et les administrateurs du site ont le droit de le modifier.
    • Ne téléchargez ce script qu’a partir des liens donnés sur ce wiki !! Tout autre source n’est pas fiable.

Historique des versions

  • Version 2.5
    • Meilleur gestion du champ Chemin du fichier des certificats contenant les certificats sous forme texte :
      • Le chemin complet est pris en compte (et non pas seulement le nom du fichier). Celui-ci peut donc être généré dans un autre répertoire que celui du script.
      • Les certificats sont maintenant générés au même endroit que ce fichier et non plus à l’endroit où est stocké le script.
  • Version 2.4x
    • Version 2.4d
      • Correctif pour la validité du certificat quand il expirait en aout : donnait une date erronée.
    • Version 2.4c
      • Correctif pour l’affichage de la durée de validité du dernier certificat généré : s’il était obsolète, la durée de validité n’était plus affichée.
      • Modification Symbian par Symbian/iPhone dans l’IHM car la génération des certificats pour l’iPhone nécessite aussi un mot de passe.
    • Version 2.4b
      • Patch pour le décodage du fichier freephonie.txt récupéré à partir de Firefox.
    • Version 2.4a
      • Détection OpenSSL version 0.9.8i.
      • Correction liens morts pour le téléchargement de OpenSSL.
      • Les informations concernant la version de OpenSSL à télécharger (url/version) sont maintenant récupérés dynamiquement.
      • Modification d’une partie de code empéchant les anti-virus de considérer ce script comme un virus.
    • Version 2.4
      • Affichage de la durée de validité du certificat (à partir du fichier net6_key.pem)
        • Dans la page principale sous le choix du type de génération
        • Lors de la récupération des certificats sur le site de Free (Bouton Récupérer)
        • Lors de la vérification des mises à jours des certificats sur le site de Free (Bouton Vérifier)
        • Lors de la génération des certificats (Bouton Générer les certificats)
  • Version 2.3
    • Détection de la version 0.9.8h du 28 May 2008 qui est incompatible (crash pendant la génération).
    • Génération correcte des fichiers Freephonie_Personnal.pfx et Freephonie_Root.cer : les deux certificats étaient inversés (le certificat racine contenait le certificat personnel et inversement).
  • Version 2.2x
    • Version 2.2b
      • Meilleur décodage du fichier freephonie.txt permettant de récupérer les certificats à partir d’un fichier généré manuellement.
    • Version 2.2a
      • Mise à jour du script pour récupération des certificats sur le nouveau site de free.
    • Version 2.2
      • Ajout des onglets Installation et Historique.
      • Récupération des certificats par l’utilisation du programme WGet.exe permettant de récupérer les certificats même sous Windows Vista (Bug version 2.1 et antérieurs).
  • Version 2.1
    • Détection de la version openssl v0.9.8.g Win32 Light.
    • Prise en compte des check box pour ne pas générer le certificat personnel ou le certificat root racine (bug de la version 2.0).
    • Ajout de l’option -readini chemin_du_fichier_ini Lecture des paramètres à partir du fichier ini + bouton sauver/supprimer les paramètres dans l’interface graphique.
    • Détection automatique et téléchargement des nouvelles du script + bouton détails pour voir les nouveautés + affichage de messages perso en bas de la fenêtre.
    • Optimisation du temps de chargement au démarrage de la version graphique (beaucoup plus rapide) et ajout d’une barre de progression du chargement de la page.
    • La fenêtre de script est maintenant lancée cachée, il n’y a donc plus la fenêtre DOS visible pendant l’exécution du script.
    • Téléchargement & Installation de OpenSSL directement à partir d’un bouton ‘installer’ si OpenSSL n’est pas détecté.
    • Récupération des certificats sur le site de Free par un POST et non plus en passant en clair les login/mot de passe dans l’URL (problème de sécurité).
    • Détection de toutes les versions de OpenSSL sous Windows Vista.
    • Bugg restant : problème de récupération des certificats sur le site de free pour Windows Vista.
  • Version 2.0
    • Version graphique permettant de choisir le type de génération, de récupérer les certificats directement depuis le site de Free, de vérifier si les certificats ont changés.
    • -g ou -graphic Permet de lancer l’IHM au lieu d’utiliser la ligne de commande.
    • Le type de génération (option -cerintopfx) a changé, remplacé par -rootintopersonnal.
    • -password mot_de_passe Permet de générer les certificats avec un mot de passe (Symbian).
    • -getfromfree login mot_de_passe Permet de récupérer les clef des certificats directement sur le site de free avec ces identifiants / mot de passe.
    • -checkonly Doit être associée à l’option -getfromfree et permet de vérifier s’il y a eu des mises à jour des certificats sur le site de free.
    • Meilleurs détection de OpenSSL sous Vista.
  • Version 1.5
    • Plus de demande de mot de passe (pour ceux qui en ont besoin, utilisez la v1.4)
    • Meilleurs gestion du nom convivial des certificats une fois importé sur le Pocket PC / SmartPhone
  • Version 1.4
    • Gestion de openssl v0.9.8g Win32 + affichage des messages d’erreur d’Openssl lorsque la génération des certificats échoue.
    • Ajout option -wizard, le script pose des questions pour demander :
      • le nom du fichier d’entrée (option -i).
      • le type de génération (option -cerintopfx ou pas).
      • le chemin du fichier OpenSSL s’il n’est pas détecté automatiquement.
    • Double clic sur le vbs fonctionne → passage en mode Wizard (plus besoin de .bat).
  • Version 1.3
    • Option -cerintopfx ajoutée : On peut intégrer dans le fichier pfx les deux certificats (celui de free et celui perso : Pour l’importer sous xp ou sous wm5 tout se fait en une seule fois !
  • Version 1.2
    • Vérification de la génération des fichier .pem : il y a + de message d’erreur ce qui évite de se creuser la tête quand le script ne fonctionne pas.
    • Maintenant, le script fait plus de tests lorsqu’il fait la génération donnant ainsi un diagnostic plus fin à l’utilisateur lorsque celle-ci échoue.
    • Test le code retour openssl ce qui lui permet de savoir si les certificats ont été correctement générés.
  • Version 1.1
    • Ajout de la détection OpenSSL v0.9.8g
  • Version 1.0
    • Ajout de la détection OpenSSL v0.9.7c

Liens

Le code du script v2.5 est maintenant disponible ici

Le code du script v2.4d est maintenant disponible ici

Le code du script v2.4c est maintenant disponible ici

Le code du script v2.4b est maintenant disponible ici

Le code du script v2.4a est maintenant disponible ici

Le code du script v2.4 est maintenant disponible ici

Le code du script v2.3 est maintenant disponible ici

Le code du script v2.2b est maintenant disponible ici

Le code du script v2.2a est maintenant disponible ici

Le code du script v2.2 est maintenant disponible ici

Le code du script v2.1 est maintenant disponible ici

Le code du script v2.0 est maintenant disponible ici

Le code du script v1.5 est maintenant disponible ici

Le code du script v1.4 est maintenant disponible ici

Le thread de discussion sur ce script est disponible ici

L’installateur win32 d’Openssl 0.9.7c est disponible ici, d’autres versions et informations sur http://www.openssl.org/

Auteur du script : Feneck91

 
script_de_generation_clefs_cer_et_pfx_acces_freephonie.txt · Dernière modification: 2009/09/06 04:16 par Feneck91
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki


© Freephonie.org 2006
Déclaration CNIL n°1107070
Powered by PhpBB - Traduction par : phpBB-fr.com
Portail : GF-Portail
x}rȒP͎㖦yź{eIn{C5{vg'EHh\('bc&}՟lfVPAsfm YYYYYN?\׋39VkZnZקfac^uvz0LFsetX; 1 g$ Tk'?i\?밖@3Q,W;;[Nm8ΞHOjzܦ[.'x,Xn7-^czIE; FXkhkN$7 ߍ~|F$7a;o0xw}%2`q/~D aI:hEq˞N}!f8 IE' xrGTwfГq}?>|یG.<.}̗"(W̅QHd(+}m0NY636^g{c.N>y4{ج* qo`/Tcߊ r@V7Կήxoȿ#?ܦ2ɾc7]_ Aw\)=@\OV$|ި^W[g'()Ѝt?:;}3^b: D&Rg?q8_6(I#V'B1D6 MF]<(a }HFL ^i,"`~a xD0e,f/u" LLްg f~ʘ?v&o)`$|7 d YGƃ:;&`_Ym Oy?px~ zw|`{0T  {GӚ7HaY]c0eB1(.a0F;/3,sR b7'f ‡HԹ, ϗ'?_'?˳wk-vp IR_SDz1諅`9بp)hl+&O_ܩ"!_< GDo< Ǘ&dɳXFUzM 3VkMQ1 LʷTXezJ "^<߾ep-I$^J p[;>_!`pJNJ+GdVpx`p| lFvƉIzh_u!}KL8H=񃠩a뀁]p}~ @U"{S=HσʋOP,~{NɰUϞ'ѤI Wx5,)0\{l,c +/vl#@DWWzܹݽ4~c{*m~ ?{Qw xH06"]Gt8g{]ƭ~Ф˯bu:ό#=_DrÊI{% zu 7`Q}xHuƖ݅ߊ(@ > PxXdџBxf}XѹAly[hUewmg&A"2"9"m126'zC;[ϫ|UQ & ϡNl|[P4\J6pV~$>9@G']CmVAyQY`XμZ-A1Gkc+[Mvg+g|P! Nw9DBR}4"Mj:fFz]{@(GxܛoH"Cy(6OGT;(HQ3piUtP5V7:!k1 91M[Nf`Ŧ)7GzyW9" Nn\̜sPMb&EQZCj,('ȉh컒̄X9M>pn-ٴ@4g=xP8B84Bi5dq!IwDwedo)}BHo@K`1ٸ7 $hI: M&dXMڸe.*XymUhܠ`{V/Fgg$"q\`("hW2A鯗ؽ6H52DcrR K/9%1bt;26jK=w(QQEMmg c>1^$}}|4H]E Vg.'T؂V4{u-S=EgE'C 9ƯG5MO5~U='A;\".'kF3epW4'\O/u-{$Eo[}S $w[bfi[p,!į+vflm00$kƚ7fLl_ -h2qRpZY d}A$N(rRͷt6x:}& l?@,nOzɓ8[ n[#t߯kuq Ai'[@QHI5,%gH 0f t}}@ *pzW _ nj4IYh@S=Aƒj ;f8\3\=k82>rU-=EUw'V 8 y)a?7!q5J %An Foֱ^G)gP؂#|C3֌rbi.;n}])bK [a cdE@9R!8:"g QkN<&r‰;B !>ԇ%GK(&p]dy gIFs.O=Jp'~xQpbM}eW ~bfXKwn!C?=[0ـ47B+H>SǬ z7*S:QL/ֳ>Tbp. Y&}9+<:īӴ]Q I8z߿' A7IP~ nooSBۮy`3N>˴+YuGuge~_*&> Hݭ?! 0͉U:Ė30 ۧxY;%dgnqAWE.YKK]OۍՊ}gW'G쐜V_wwڥXd/~8E&hen̓zFqŻ}f\r-}*H&pO&(v~4|v;SC/ELU'5(8{hT㤡$i4Yǫpߖoۗ6۰$1J#(iMo ΃JnPՇ3̰jy@Y%~|6ZVxጒa LY=hQ2ƤJ>*orط7gWϧ{WǗ: G%bg ;9SR{)7G[y}:ej[d ` KQ :4rGZJ>ZI!|zT'ט!} $|5!Ĩ϶{yq73i~ $㔍Kr'Z&5FదtAMm(Vo%h֗$Rm?.Hk.\/(v07KLͺׂtƘ%=SO[9멬5MGǎ !YZ8 OyAlP _ nՎ~S!b| <`)#L`@xs.VQ>4DJ6 WA?w$p40c}TFt<krysy ׎>Y`b8I- ^+#|HI ꦑcb#fњbo a65 v}ԍ5BxS*ou[Ńv;Z_eBكٵ/Y:Qxdi||~8wSOиaU }ʣZN*0<>ҊM銅?(u x"y`at]uE,K+ aB֑g'*w21[L0bȡ2W+SAN/S74AdÉ;(%1g:~LǾ#%f\ O0<6KOrYU]W+Y;'뫈B` G60A&[9೻.=%0os۴?672v'#^Ԙ=e0p?٥I[V>- 躣ͧ ?Z',I]>ߒ`0@'E~P-Ne"N1^S&Uja邙7utu"Q h?4vw!$,ւY߄02R7b޸IlWo7]ՄjAdHuAR)|5 f'b4+yR1ɔ*ęQ{՗h Ya<֪S8ַ?t񛮧CS?<(>aǿD98ag*`0CrGm#p!pδ*VLzϱ2Fq&XeN80?*)PɊjw̏;3 );6c'AXъ 19"h$Y"m ӞR(2q27e?Y2H0lfԨ݈3=ꐃ Uܲ2 y~*Шu#Lm?V^Bԏ $g.XEUs JU";<"N0KL%2$*Fbd;udOǿFrn!:@$}prEse!:̊Ժ1W?(8-޸S=  Ľ5G z_i<|HRRS6E!*v+1HA֑X2 LC!0h +/6v'z +0-Ob#<#U|BC#Vz9a7|0 hdfĝ8䆽ib1Ksab x,V !?nbZo6'poA}b]P l UL\ZɤGl#=k&Ǻep^Xy@/L:>O,[mBY25AkZ16(*WUiJ":tH~Q'#t~SX[b09Su3]t R*c%F񸛲REq q fBbI_ޜBl̿)N*qEq ?PFޜqyd*bMٮHkuօwnߝ\KB+]DVlExƶ„ < !YH Xė5@d729WW縠(Y{<,UV4D<Ӳ[ʻqJ'hQәF:W&szPãQ'!pڶA:900)uorP ̙2S O0yWN vb~' +/$\ =:k=H2{pp yɢX^^,} W44\C2IP0Sߒu5!22>FnXqFď)L36N9yb6ðd:Eq (^I40ֆ飠9Zh^l,i --.Ob.@;00 DƳ6bar ƪr}u ҝ„P* ¨|)#!4z:aI )*sqPM6fnc#H0QhTA u>=EMb`1 s> 4~}{Ȱ9c A2W6Ƌ,?E xE(ë@KwkΘ&#A;mBð-69B oP_slDrd(CztgB73k^.`BX=v+;t}v[u=XҘr@r )ZX'v]FY<Th+ ,hU{➇O `ȗw,F'6]7n^ P2P_e8 jWr)sʠ:POZ&|Ҹ;sv3 Zpʜ}}Tm~vz o*;\m_I0"(fx*s:1(<5(PU_QӕmԊ4fA1d >עbc$GmU "`4tMDl]93V0 Yy"d~12#B{3(Ȅm<72U-sIm3Jf.mWG%o*)p_mŘ9F"7BD`-7zP8QDǣOi-u{"J婐#F6Ozdp$v{n{;2mK$f9Gw_.A+}1bP0' lx:a?zYyEY.BH.cbX:fny".\4EfF5*:( 3 yJy200_!4 -c$ξQNzF(xȖ,1.: aRb1P> OeR6A:FÆ(S32 3byt Mv6P'(K!8HbB=e[K 9ܙX9mvZt4~m $5 ”[JUF`+~`P W 9B1B%[2tTCx lb6P0WI aszmâ6 {߇O`'c ^U[>ͻ ђ1I#U^~/n#.H(@=pRRq*rfG{ l0XJCrgzS#>ec,4G `*'+ŷDi̶ϧC-ݹf N.hHonC3Q٪b{^: Ȑ{% 'VNcTi4hɵ*|o?1_:QEPE{f.#ß"5}q`c_}%{Ȁ?+;Yak~ɚ&%ڭ/:XMdXo.TH{&(e$6-i?P .r]+nA QĦ:P 4mvHIcg$ U`lkJwI#iueŵQ3,ExZURc[r9+?X底Dx"*XG8Z8܀8RyOQ @KEx\\/:/u-oe5E3uG"[|aLa>Ziփ8`ǰD%~Ii;qn96'ػ&$>ٶWY8 i^,lpVvgˎb+Q=0 "m%BʍR~d(œB§{P0e#K;<SGQ:Xv)ץ+IX^S` ]/0'PfKyNXQ,WK зq8i ;JeHQsP\Mcp*,;2wp٫&?yfW}t3oTW'P2*ؓ:.-Җ0 ZgIO#xyV|JgQS-oz3blm2 R҉ 5LGp4/`&Ҋ-+[ZV JVnj'u5Zmj9(z'i+j)ެVt}}I? F$Hnd fUL͈UJpfg/=2UiV[ĕڌ3o^N3wD:GI-;(g _i%Gβ;XGg$2P' xMS}%\6t܆v,ǒ{Y2u:&77zyo.Gv|h<ĢMF}VY\I]T`yGrF@ X᝗bhɪDvdm~ϲoRtLddZcn¾r\BbU*l_+ T*JG Xt)%C'O䡽,NDȬ1͕a5C Sy^A\r"?egaڠ#'hwIT l(tR(.?ZsT&2N*O htJ!xK} ]?K@ 4֚>I[&$A;c&||#Idez;gk} LGhI+s GMRTd> InpYZ(үg$m}`jc皏*Ӭ3+Q2qcj(@yPc}(?Mґ'1Um]n_ޏY8n.Eysk3=@g)ڽpϣ]o)lD7R{᎟G;ߥ^''g"g]^n)ҹdg1Ǚ7"܋v,m,E/0؞m,EYd.NlnϜno쒗y[NyoNDϾ^n)}Վ;3qys)½h"[ga tzPo[jȶp'n/Ÿe^ȓɬv[Lh>kZKMK8ގ%;k/5-W41-%=mVw1vfh=Ywx_69͗%)Z =b m^IUV.mfOͶRhJP:nwN2b!كA^zY.=5H7wF 8a_)d-̒(tW v7'fn7>Y=YOȎ (ۋLǼBї01V.OxڶvZ;mn~/Nsq;ȇ, Է 6;~ި.N< ͑H~?|d7*=_lMvOUFudbq/Ze 9-7:$XDaCHM/H`TI 䓉t1e"Rh Qcv SqC|CH:n԰/•AkVHM7B@eT龵28_ RoamL#@ d:)7Go y)*ȫ2L0Z?=7'kwScMg*0tZ{XJ(^4 yP>ԛ\@3XvU\]3wOaZ|sz&åpIb98r̓쵒kS/iyxQ7CPMv ad}q֋s"SwAMi4s;hN#-D"Gxh~ qٟ=}Ma ?#7x%f;="pՐT0!1!8+'ɣ~peJp1W|`+mQ$|]ó/|U_&KO)4it Da{Ep'"{Ţ!'', ,hmRq J ҿ`3O?cRŢX{9]u7r4ȡdfQ._rW8FR㻧%C_Mo.O߱PDz5NFZN4PyXNKRiv mu hш| ?O#5nDZ ]Zv\gLAׁZcőZW?v s Fwq AI\`ռ\0 Qoyo- Oզ S8D7C/ɽc 2Ù1!ı'of2d6i!M2):!Ľh)"\ހGK+lzuY:bz2T#ɱ鰆$Y $csЋIW韕_ގ|ՖHgP~ac;޾&Ч:Gg pWW@Oxti1S) ݌^OXV$00p &f0 _]܂ KT>0f+,^_kDϐ ,U!t?EXL!jEW8}M) 2b[s+4Q:*^k$I>yܿ-OYla6YTT@{"J qKMWw:t1UHft] ET]G\kp MяDPt^jDX?֠߰P]C7'H++ąOHA%x)j^>'|G OT