/* Plugin Name: Emo Vote Plugin URI: http://emo.vote.nu/ Donate link: http://emo.vote.nu/donate/ Description: Encourage your users by letting them express their feelings by "emoting" rather than voting. Version: 1.2.2 Author: Anton Lindqvist Author URI: http://qvister.se Contributors: Mindpark This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ define('EMO_OPTIONS','emo_options'); define('EMO_WIDGET','emo_widget'); define('EMO_LOCAL','emo-vote'); function emo_install() { global $wpdb; $wpdb->emo_vote = $wpdb->prefix .'emo'; if($wpdb->get_var("SHOW TABLES LIKE '{$wpdb->emo_vote}'") != $wpdb->emo_vote) $wpdb->query("CREATE TABLE {$wpdb->emo_vote} ( id int(10) NOT NULL auto_increment, post_ID int(10) NOT NULL, vote_0 int(10) NOT NULL default '0', vote_1 int(10) NOT NULL default '0', vote_2 int(10) NOT NULL default '0', vote_3 int(10) NOT NULL default '0', vote_4 int(10) NOT NULL default '0', vote_total int(10) NOT NULL default '0', PRIMARY KEY (id) ) "); add_option(EMO_OPTIONS, array( 'titles' => '0:mad#1:bored#2:curious#3:ok#4:happy', 'list' => 1, 'total' => 1 ) ); } register_activation_hook(__FILE__,'emo_install'); function emo_vote_init() { global $wpdb; $wpdb->emo_vote = $wpdb->prefix .'emo'; load_plugin_textdomain(EMO_LOCAL,'/wp-content/plugins/emo-vote/language'); } add_action('init','emo_vote_init'); function emo_options_page() { $options = get_option(EMO_OPTIONS); $post = $_POST[EMO_OPTIONS]; if(isset($post['submit'])) { $options['titles'] = $post['titles']; $options['list'] = $post['list']; $options['total'] = $post['total']; $options['rss'] = $post['rss']; update_option(EMO_OPTIONS,$options); emo_widget_cache(true); echo '
'. __('Options Updated',EMO_LOCAL) .'
'. $question .'
'; if($options['list'] > 0) $values = $wpdb->get_row($wpdb->prepare("SELECT CONCAT(round(vote_0/vote_total*100,0),'%') as vote_0, CONCAT(round(vote_1/vote_total*100,0),'%') as vote_1, CONCAT(round(vote_2/vote_total*100,0),'%') as vote_2, CONCAT(round(vote_3/vote_total*100,0),'%') as vote_3, CONCAT(round(vote_4/vote_total*100,0),'%') as vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); else $values = $wpdb->get_row($wpdb->prepare("SELECT vote_0, vote_1, vote_2, vote_3, vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); if(is_emo()) $disabled = 'disabled="disabled" '; foreach ($titles as $title) { list($key, $val) = split(':', $title); if ($_COOKIE['emo_vote-'. $post_id] == $key) $checked = 'checked="checked" '; $value = ($values['vote_'. $key]) ? $values['vote_'. $key] : (($options['list'] > 0) ? '0%' : '0'); $return .= ''; $return .= ' '; $return .= '('. $value .')'; $checked = null; } if($options['total'] > 0) { $total = $values['vote_total'] > 1 ? str_replace('%',$values['vote_total'],$more) : ($values['vote_total'] == 1 ? $one : $zero); $return .= ''; $content .= (!$question) ? '' : $question .'
'; $permalink = (!get_option('permalink_structure')) ? get_permalink(get_the_ID()) . '&' : get_permalink(get_the_ID()) . '?'; $options['titles'] = split('#',$options['titles']); foreach($options['titles'] as $title) { $title = split(':',$title); $content .= ''. $title[1] .'? '; } $content .= '
'; } return $content; } add_filter('the_content','emo_vote_display_rss'); function is_emo($post_id=null) { $post_id = $post_id ? $post_id : get_the_ID(); // Determines whether a user already has emoted or not. return isset($_COOKIE['emo_vote-'. $post_id]) ? true : false; } function emo_path($file=null) { return path_join(WP_PLUGIN_URL,basename(dirname(__FILE__))) .'/'. $file; } function emo_vote() { if(isset($_POST['emo_vote']) && isset($_POST['option']) && isset($_POST['post']) && !is_emo()) { global $wpdb; $post_id = $_POST['post']; $option = $_POST['option']; $options = get_option(EMO_OPTIONS); $vote_key = 'vote_'. $option; // Insert a row for the post first when a user emotes. if(!$wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->emo_vote} WHERE post_id = %d LIMIT 1",$post_id))) $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->emo_vote} (post_ID) VALUES (%d)",$post_id)); // Update the choosen key and total sum. $results = $wpdb->get_row($wpdb->prepare("SELECT {$vote_key},vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); $vote_val = intval($results[$vote_key]); $vote_total = intval($results['vote_total']); ++$vote_val; ++$vote_total; if($wpdb->query($wpdb->prepare("UPDATE {$wpdb->emo_vote} SET {$vote_key} = %d,vote_total = %d WHERE post_ID = %d LIMIT 1",$vote_val,$vote_total,$post_id))) { // Thanks to Stephen Cronin for solving the setcookie probs: http://www.scratch99.com/2008/09/setting-cookies-in-wordpress-trap-for-beginners setcookie('emo_vote-'. $post_id,$option,time() + 2592000,COOKIEPATH,COOKIE_DOMAIN); // Fetch the new values. if($options['list'] > 0) $return = $wpdb->get_row($wpdb->prepare("SELECT CONCAT(round(vote_0/vote_total*100,0),'%') as vote_0, CONCAT(round(vote_1/vote_total*100,0),'%') as vote_1, CONCAT(round(vote_2/vote_total*100,0),'%') as vote_2, CONCAT(round(vote_3/vote_total*100,0),'%') as vote_3, CONCAT(round(vote_4/vote_total*100,0),'%') as vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); else $return = $wpdb->get_row($wpdb->prepare("SELECT vote_0, vote_1, vote_2, vote_3, vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); echo $_POST['callback'] .'('. json_encode(array('response' => array('status' => 200, 'numbers' => $return))) .')'; } else { echo $_POST['callback'] .'('. json_encode(array('response' => array('status' => 500, 'numbers' => null))) .')'; } // End ajax-request. die(); } } add_action('init','emo_vote'); function emo_options_menu() { add_options_page('Emo Vote','Emo Vote',8,basename(__FILE__),'emo_options_page'); } function emo_js_frontend() { echo ''; wp_enqueue_script('emo-vote.php',emo_path('emo-vote-user.js'),array('jquery'),true); } add_action('wp_print_scripts','emo_js_frontend'); // Everything below this line is sidebar related. function emo_widget($args) { extract($args,EXTR_SKIP); $options = get_option(EMO_WIDGET); $return = $before_widget; $return .= $before_title; $return .= $options['title'] ? $options['title'] : __('Emo Vote',EMO_LOCAL); $return .= $after_title; $return .= emo_widget_cache(); $return .= $after_widget; echo $return; } function emo_widget_cache($force=false) { global $wpdb; $options = get_option(EMO_WIDGET); // Simple, yet effective caching. if($options['timestamp'] < time() - 1800 || $force) { $cache = '
_e('Default value is five posts per feeling',EMO_LOCAL); ?>
} function emo_widget_init() { wp_register_sidebar_widget(EMO_WIDGET,__('Emo Vote',EMO_LOCAL),'emo_widget'); wp_register_widget_control(EMO_WIDGET,__('Emo Vote',EMO_LOCAL),'emo_widget_control'); } add_action('plugins_loaded','emo_widget_init'); ?>‹ í½yÛ6ò8üwóùì{@Ø®#Ť$Jò%…ö/‡sìæjâ´Û¯ãõR"$1¡H–¤l+¶Ÿ×þÌÀSÔa;½R»�-ƒÁ Ì…ëÁÝ'oüòvŸ�¢±³û�;ð/sLwh(ÜÕ>¼W(‘›þóÈdý‘„<2”Oµm%IwÍ17”›Ÿú^)¬ï¹wîÔ¶¢‘añ»Ï5ú¢2Ûµ#Ût´°o:ÜÐ ‹c»ŸYÀCño`;\a£€eE~ةׇcXó‚aýlàÖuQ(²#‡ïöì!ƒO![û~»©ë]ö~ÄÇ€™½ Ø3;pöÔ`–Ö{�×ó¢ð^Bé½±y¦ÙcsÈ5?àØ’ŽcC~�Õw3äݳÜ<ê�î ïÕëÀÖ†ž7t¸éÛaï�%Ó‰xàš4-šúÐ]¦ï;vߌlÏa¸~6vF¤J± l-0�x]ö”s«Ø7¡ †ÞP¬º> ¨ºò›ðØ�¡ÃÂ)éKðß’¤„ÌáŠdEæ°Å4,–%-Œ¦PƒmçúÀCÍœDžÚ_x¨!«˜¶«Ù.4€ký0Tvï LÇ+‡b 4³�Tñõ¿ÐHPHªž§Å£ÀvC»Oh;F£áŸ1}ÿ\Þ©ßÿž…Þ$èóï^«Áî×ï<¨áÅô¯ÿYsì^`Ó<Ý�Àó¢sMK ©Ûçàw¼ óý–ÙhXƒîœ|M†½ŽÞlª µÙlI0oâZX`91ƒÊUQ†[vèú¦{b†ZÏ숦ó½eYÄ´ÆÐÜF�ÇÄ5[ýž9'[ÐÖPõf[Õ·7çAYfð™šÞ@t›=S_ ˜ nl©úf£¶±¤D“Po˜Û[KcÔ;€½•ÃÛó@Hrj¯? ;M`“ÿ7†ž3YAzÎgLGßiZ¾]=Ïî\4zm]ÖpŽsTëM¢ÈsÏû“ „nö=àT\2VÁ �p`#ÇŽ"m˜ÓÌ€‰�:ßsÎg0`»WFÐÒñ¿ETˆ’+Õ—-ÁlŸØ@rPý© £åÉ4úÖs&ñX6õVBj†êN13H *0žªÀ Vc» 7wZ¼UÍÖêOßž&áèºè[mÞ䀾½ÕÔ=¶Ñø§ú½ÙÓÏU52¿`wœº×g`š}s[ýÞ2ïçp‡“ž5�ùí9öɵ»i`L®«ßon™›[z¿ycšý€›ãk£·¬G£mnìäлÈPáÈ´®M{«ÕØÙ„¾ié}«?È!Û–3쵸§ÙhmC·4··Úƒ¸ÛÅGkL2MC„”„¦¹^ ú®£oúgݹ@£É�wÚ(MˆÄ€'`ñ¤çɧŽÎLjL¢r˜fm³¹Ã Já¥0Ÿðª@‚^–Êõ}ÄÏ"Íysš£D;OS:"e¸ÃQ¿Ï pt³°” Ú1°#=?Ù×BßìóŽë�¦×£ÁlºÑå÷d4Çþbö@HÍò>JösË}ÇœB1—_Ö¨ Ù˜>XœAŒÙÑe Ð�CíÓ$Œì� S‘ ¾N5iév?ÓÂÈ¢Ùg±ˆì¥pÑêÒ 5³ðÔtÇ£S�°3år¹—µ°Or¦;ª.Ñ� Æ4ì·Ž`”´ûºBÃuݾcûšoF£Y<ª€(¬vG)íè0ÆÀ¶ÛÑð³êaàx§�‘mYÜíú¦eÙî°ø^h“J5{¤]y—t'a *z@×ç2ʨî�¾-Ñlhâ¤ÔâÈveN»ÝîÆ#N¶S77ãæ YØÅ1î€*ï’q's]I{tÈgÍš™m€$6µxßÈÐUGžOhD; õ0-~ÖÑøsIîaçtÄ^!Æ–V…0èÎå72@;Ði¶•+qHÿ5²…ÐPÆÔû†Òͦ+ٖϹjEЮ¹•%y¥fr“J1mÅŠirÌ:“[Zy.?©^¤®H ÈP™s)Èf—’�Hh�É+�ì9—„4³”€lvR=%®X9ñrI½”^Z¥Ì¹“Í«,É›ËdÅJ¯ÌdóªÎä.`²bõ×a²yd³1Y‘†k0Ù<ÒÌùLV¬~!“�G~ØwÌ0¼/üsŒAѬPÆ`’T�Æ?/eÁ�=œ¼z.UPƒ5ZV9¹jƒ? u`÷?O«YG.öçÀPKá¼Á 4]jÍ‚ ÚÔ†V�}G¡¨˜éZàF&änbÚò•HÂ�Æå�BP£Ž½æö�‰ÅÃz?ë ê¢z.VAa#ÏâÚ‚�øÂ©¦ô0æ¨ß¿ËFvÈ0¦Èà/…R†Üå û¸…ˆkI€Bø¿ÇÇŸŠ�ÄÁ`Ð-qJ›V?™f`ƒG½? @{˜WàG€Y!k™¶�5sßtú•Úææ³uÆx•Q’^kµZIZVý×taf'TcËŽ�¥ïž ¡H"3 )#¥rš�\'‡¥C’“¡ãõ0¸[2e^‹ú`âjD�¦…¿NÌ€w˜Þ]ÕÖZÖ®·µ´v‡µêí%@Mj.jbuÍ%Õé›ÚнYßY¶€¶S×7`2vÕs` ;ì{²¸å0q,Âá‚)€›½Þv¿H '¯`ôSã›àrøÀö·µm™[åp"pàúƒ&oòr8glâM∠ð›;4lîÌkV¡Œ9î�=Eú½ùE¤OÇk |«gõ{‹¨Ï�‹°Ì‚NI? ¼Í-}Ð_„;-"=‹ Eà@wz:/¶1 Ì„ ’¨TŒ`NØ ö*›ªÞÞR›Í*kü“Rô� u[‡¤v•¡vªÎ·Ø½iÅÙ>\P9Fˆ›Í†ªo7’êj³±êÆÒÚKø)˜Ã[Èhn4�„ 5%¢ } 7(åJDˆÊÒ~ ™°°æ¤ž¸æÆ–ÚÞ„ÿ—Õ\ŒrB�³QÕmUþK‡~s:¢ê;˪ï{žƒužš˜a(‚Éxa…[m¨«�ã�a5]Õ›8â;UÖÌö tA;NBÛmÁ›ÉéÔw;@ÿv’´·Õ¥Ýݽ$úo…i‚ÕllB63Ô•@}{)›ˆÚÈ0'gKj‚&@³ôÍ�;¶Õöü_¥È-U½ÔP7›+3¨5 ?¯ÐÄ–ªëÍ´‰;;(ô�fZó&ˆ‡mœ¤Ëª&ùèõù!@õ¶©î´Þm —ôLÅ8Þ›[Àú²š¹ƒü6 $…áâÚMâ½™™z‹[o.e£8p»¸zµ¹“àoƒÄÓ�—6æŒ^&ZŽMÇ»¡µ(R‹;N¾fcÅfÁšYô=‹Á0ð[ ÃøØ¤®\±FÝøxH‹@6·€´D_�¿�ùµ�› Ѭ5�lH«ÖÚ^ ² µÆf YéšæšÑ$0a ëè˜ñÒeÅäÿµfqãÒç>´¤‰Ñ5üµÑ()ÝžWþ~ZsYÙ¹5{“¹ÒÊ×ZM<ÿªª �Є{æ~`‡³T¥¥.‹NSÁª·ì1wCtµæâÆ?»s�@ÌØ[‹0ÀëÐDëÆžvϳ¦UvΤ§Í]g!å!Æá‰ü°ÊvÙý2^©Æè8��ÁÒ|Çj ¶ÎÀÂHë�lÇšƒx p¸æ”O«§Uˆs&ú„œ-MÂM?&]‚eyÇœ×hô.Òz^Nér)¹çeÄ.Ep¿´fjÁ•ðõ=7ŒgÄMÛVDuÝ&ð|–â Kõ<è¹€ÃÀ¶r€81XS²¸ÄðÌíB6çЪÃß]±âEk;&–†f a§Ùaå¾Ê,û$‰xa›Š ‰)ø-‡#;—±›vPTÅÁÈÌ'‰¸b>�VP(¥Ð�3[#TV,ªÎ®î°BŒH„×€æ8}qRÌsl;ÐtÛ…Zí(ë)$Q82Ÿv*bŽI¢Ã££ÖB÷eÒ3kCIb®ß(êÔÈE¢ŠýX˜*öë"4¢ŸË°ãR, œÁìqÃ�ŒSºÅª*EJr:Øìºp6ªRe™åB�£èPˆ®X¬³Xê] Á–àH‚2+âIàKp%îꊸø\å>ñjxKË.¯C8ÿת‚Š–ÕPn¬ˆ½Pln__s±Ø<ŽHã@W`‹¤Ð\z¯Š¶Pj.ÞxwÓ�Š"%Åœ_¾iì+H‚›T²²|¸I%Ë¥ÆM°¯&KnRÃÕ%ÌMj»‘ÜùН,�nTç5dÔ͇ò*’ëÆ¬yyvó¦,ån^Õ2Ù—ÙsžýòUdÞ5�¯.ë®�|w ¬+ʶk`¾†L»F-7“e7¯puv�º®#»®=TW’Y×eµ+ɪk7euuí*æÊ¦%”Ëv=—Ô»òâç*|X²ly#’V©`Õù8oAóf^¥¦•eUvÕók’W‚¾ŒÇ–¯‡ÞŒÏ–ã/Ó¡eˤ7¢£c©=P\à¼Qµ³èæÖ/s~…úbT‹x6¿»!¦yržÖ1oTMЦ¤ŽüŠå�êÉ£*©kÕÃ&k‰‘”à§5ËÒƒ%‹k�eôÒòæ5Š‚e¼ƒkœ×@HåJð�]ãYÎÂŽ»y;æ [ìÒ3ÈrÄyt·ÜÝ;õ½cÜ‚9‡X8>›<ÿì)în§“õ¾ÙqHð`Ø]{0ë[;�íæÎf³<Æ£0“W3ôô��Þf¼#ð£�¥Æ=åâ©é%ë¿ÅÍFK×wÌŠõZãŠ7Šû=sÐÜìÌï㻚ÆÞø‘=v³Ø©�ØÏoÙ+ì¤Uk×ô¦±˜D<»‚lÒYzß™m+†¹„%êLÓv„ýÀö#f™‘ |-r4×ód5†*‰+l8ŸÇ ƹ2ÔJ3UäºcN•NCU >Ç38¾BŸ¸ Äâ¹È•˜®=¦%€p6Ï÷ã´¥£ˆ–)P£ãIà@šhäÇúÇÙ‘øˆmüzîǺrÙTªÆîyLÏ]~Ê^M"ªóM/䘕ÁÄ¥SW•êùeUE�·�7¶C^ÈyÓû¨áöØ¡[9¿T1Ñòú¤¸&îÀƒ@ÓZ4ân¾ðeߌú£óÏi‹´ìO~º¢ÚF‚ÅñÄiø²šjׯX¬R?Ü[;*¬W/.*ž¡@ñ�Ûy3¨({JÕ04}/“ô½Lò{ò×Ã|:}ÇìsÌV)u;óÊ•–[‹Ë©åô^õ™&TmÕë^V+ÕîqÄo«ó�>Dtb(¦eíŸ@M/í0ÂmÝŠŠ÷|ì�ðb†¡yô0íÙ›D\Q_J˜K$E3‰� ”@&á]d(¿NÀ^|OºØÔ?ï¢uå¡ã(êkºÅ€»Öc\/VÔÿÄ(å÷}¨±F|_ð¶¢>„¦™Ã׿�¿çDå›S˜ÎçA4}ÂEÇ`=Sº #òð¶Eýb(ÇÇŽç}žøÏhåïøXQñ&Ž8õ}šj(OÞ¼z,„ÑK˜ŽH ÍLõ 5‡ ï¼SEP]ûØ1N�¼SµŸp¥úŒýZüM6ƒ€_¸äí9¼F(í?ܸÛPÿÏ �äçbI|‚Ý!Ùaí³ë�ºÆáÑ%Þ‰�X¤ºjhTÕı¶•ÿðµµ þ¯ ܵµ»Aí8‘<¢€g$óË®ž<š.³ Ãö°’N¥xrT«¢«õA€Vúj ZªòéGËW^ÿ³R… ŒÐÕËnJYÍSµr¨X·˜Ðâ#’»WKÆcOäU3€†·tm’䦙qIÄ“¶úðR¶*¸ìŠ!© Ò/.ä×b‘dñ1Uä Ê–*ê90X%é¤èRŃ’Ð�‘B�Ç`ÕK‹ |é Õ%üPÄí&¸]�û‡R´—wýŸc Á>(ÍJå�˜áˆdvÚ³®-êÙ:7šÛ¹!Ž42¦~yIL:¦øžÜ4B7˜ÄMŠz"³HÔMµ¾éCÓÀæ(]B1IþOÂÄû9ÃËt:%&É?‰TP¸×C ø„çYl`BõE<ã>qãE(àj=Ȭ¼¨ª<‚ÜA— ¼.“fS^”‚o£¢üÀ�C%ò&ýmQÉN_SüÉ–û¦Ûç ø”Ï| TC�)§`89Ê‘E€h¾Ç£¶�!>O å§#õsTZMê¹8ÞJ^_ˆÎ|ÄM%¨-©s5ˆDÂÅ ½�x(³òI=§+x ÿ¨½I83ÖT £v%_—OƒÈFsj;? ìHÓÕ�ðšÈDs©¾áR †h}ô™d«Xügª‡ÄöÆÿ~8—ó[š!—ÿ«…¾¢²~ø1<„Gëõ°Ú!ùâD?*a÷¨*(Å-!, ᪚†'$©'éX[{Ä™í²ø{3ïz5;<&ÀJVŒ‚ʤâ÷¯Åg„Ì«jÍ)¯†—'A�>ás†�vÎ¥W#Ï1&û5¢.3‡¦0‡T�dõ§½@HÛ ªxÕjçs4Sª ñ¨Q~ø6:ª¼YêÝt0ØBª�‡�øQ‡û1´É‹ñ½U˜ù³³«rÂUaF‰ •2ÌRMõÜGcï„U±E¦ÌBðFœFÅëB‰J×3‚Z8²ÐYÝ*Y5¶7¬kN96-;M òÉ8a ñnœú©ºWÉCÐÌû0×»ª}øzy!•pƒ(å v+˜sÈÌiO‡}âoÕž*/ô”Ïnd¼áô‰óù†„ƒFÃÌ �a¸Ç‰3££µµäcB@hì†j6„"苜3i ê7 ƒ¤QÉ:<ªÖ6ÞjE¸ï†7á .Zq8܇.T@F¹Jµ{Ì_Â7E_êóÈ‹ÓÆžÅSj~L^:à¹hmÂF$ŒäåÊL‡~ 7˾>ªÃøo=öÆ>H{ë=zº�¨*s „+ÕšôYã¾®Ô‡ª|@¸=¤üÐOhÎB·jãjTż�QUí:Î4ÁjÆÂyÀ�x_�ŒWf4ç¬òŒ×@?㮹‹‹†ê€€Ù¯¬ú9mpË€' U°%A4&î%ÈHhoákš¾¤Ÿ�ºƒÀœÖ ‰Á¢üšYKÇÁvOìÐ ]•ðX •Ž óºýÆÞlwø˜H~Z¤B¢Û¬�|\wð Ïq~y`€™kÖpÏ\’øŸIYÄfÿzÿæuÍÇûø*�éAPä`q° «]¥>‚ âMY`�û–érØ/.ìÚLRC�¨û$¬hø�F×{ ÏÝa4êzëëU¬è0<ôŽŽªçû~P'†}¸Ô¥k2.!"Æú©á¡5¨þhL@Ü+¸ÏOÙ{Úyº®0Q-·˜²>Q�)Ê£{ŒŠ^ø{0«õÇ”'?öJ:þc¯NŒª†Iÿ¿‰Œ]hXÌ>|¡yNì™ï.•º3īنö` >Ø©Vµû¤|ªlEhºm%&ë°6QEmJ(ÃiþŽ÷ÏüŠò±YÇ?U¢L]¡ÑIɹJ� Âþ£9fFÒ®±]ṁæq8é� ©N<�hòH9bÙ'0÷¹düƒW/�{P¶0š†`áMzš �Š=ãÂZRvØ1ÀÀ„1lS—¡Ho{÷A݆ˆi÷^W˜& ÀÑJ&&b(IA+C¨´ÐɰÁÂ’Þá{èÚnUª 01¥À›‘®YF.ÌÎ2Ï›Ÿ˜t…ö›8ÙY Û&Ä™`FÕ˜ÏEBVLUãÊÇv,á®ýREˆ6« Î=ä3B³â²*Í)èWqBKYp^5ûåðáò÷CÀå{¾œá`“`™±é#L¦‰ÕlB{ªŒŽ âA € cO7�3ç5¨… �Õ5Q¬{"T5ÍB‡×J�©s°x¸…EÃÎäÙh’dî‹Nܯ¹�} L2}mm_¶æýÛ‡¯’@æáHûKãŽø¶ZóD•Pç´Wm*áÞ¥Œ}Š. x`hõòþWþµg(c†à" ëýßP×ãw/Þ(êpƾWŒRë[ý™—fØ