diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3b8b956fd04e4b36e6c3e1d065304df14ac1d414 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +UPDATE=update.txt + +clean: + rm -f *~ DEADJOE core + +backup: + @echo "- Generating $(UPDATE) ..." + @echo "This tarball has been created on:" > $(UPDATE) + @date >> $(UPDATE) + @echo "- Removing older archives ..." + @rm -f drop.tar.gz + @echo "- Archiving PHP files ..." + @tar -cf drop.tar * + @gzip drop.tar + @cp -f drop.tar.gz /home/dries/backup + @echo "- A fresh archive is now available at http://www.drop.org/drop.tar.gz." + @echo " (MySQL backup NOT included.)" \ No newline at end of file diff --git a/account.php b/account.php new file mode 100644 index 0000000000000000000000000000000000000000..d2f9591f05c917111704bb6d449a317dd06c0dfb --- /dev/null +++ b/account.php @@ -0,0 +1,489 @@ +<? + +function navigation() { + ?> + <P ALIGN="center">[ <A HREF="account.php">User info</A> | <A HREF="account.php?op=edituser">Edit user info</A> | <A HREF="account.php?op=edithome">Customize homepage</A> | <A HREF="account.php?op=editcomm">Customize comments</A> | <A HREF="account.php?op=logout">Logout</A> ]</P> + <? +} + +function validateAccount($uname, $email) { + + ### Verify username and e-mail address: + if ((!$email) || ($email=="") || (strrpos($uname,' ') > 0) || (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $email))) $rval = "the specified e-mail address is not valid.<BR>"; + if ((!$uname) || ($uname=="") || (ereg("[^a-zA-Z0-9_-]",$uname))) $rval = "the specified username '$uname' is not valid.<BR>"; + if ((strlen($uname) > 15) || (strrpos($uname,' ') > 0)) $rval = "the specified username is too long: it must be less than 15 characters."; + if (eregi("^((root)|(httpd)|(operator)|(admin)|(administrator)|(news)|(deamon)|(nobody)|(ftp))$", $uname)) $rval = "the specified username is reserved."; + + ### Verify whether username and e-mail address are uniqua: + dbconnect(); + if (mysql_num_rows(mysql_query("select uname from users where uname='$uname'")) > 0) $rval = "the specified username is already taken."; + if (mysql_num_rows(mysql_query("select email from users where email='$email'")) > 0) $rval = "the specified e-mail address is already registered."; + return($rval); +} + +function generatePassword($dictionary = "password.dict", $min_length = 6, $max_length = 9) { + mt_srand((double)microtime()*1000000); + $fp=fopen($dictionary, "r"); + $size=filesize($dictionary); + + while(strlen($password) < $min_length) { + ### Move to a random spot in the file: + fseek($fp,mt_rand(0,$size-8)); + ### Finish off the current word: + fgets($fp,4096); + $word=trim(fgets($fp,4096)); + if((strlen($word) + strlen($password)) <= $max_length) $password.=$word; + } + fclose($fp); + return $password; +} + +function confirmNewUser($uname, $email) { + include "functions.inc"; + include "theme.inc"; + $theme->header(); + + if ($error = validateAccount($uname, $email)) { + print "<B>Error:</B> $error"; + } + else { + ### Display account information: + print "<U>Account information:</U><BR><UL><LI>username: $uname</LI><LI>e-mail address: $email</LI></UL>"; + ?> + <FORM ACTION="account.php" METHOD="post"> + <INPUT TYPE="hidden" NAME="uname" VALUE="<?PHP echo"$uname"; ?>"> + <INPUT TYPE="hidden" NAME="email" VALUE="<?PHP echo"$email"; ?>"> + <BR><BR><INPUT TYPE="submit" NAME="op" VALUE="Create account"> + </FORM> + <? + } + $theme->footer(); +} + +function finishNewUser($uname, $email) { + include "functions.inc"; + include "theme.inc"; + $theme->header(); + + dbconnect(); + + $pass = generatePassword(); + $result = mysql_query("insert into users values (NULL,'','$uname','$email','','','$pass',10,'',0,0,0,'',0,'','','$commentlimit')"); + + if (!$result) { + echo mysql_errno(). ": ".mysql_error(). "<BR>"; + } + else { + if ($system == 1) { + echo "Your password is: <B>$pass</B><BR>"; + echo "<A HREF=\"account.php?op=login&uname=$uname&pass=$makepass\">Login</A> to change your personal settings."; + } else { + $message = "Your $sitename member account has been created succesfully. To be able to use it you must login using the information below. Please save this mail for further reference.\n\n username: $uname\n e-mail: $email\n password: $pass\n\nThis password is generated by a randomizer. It is recommended that you change this password immediately.\n\n$contact_signature"; + $subject="Account details for $sitename"; + mail($email, $subject, $message, "From: $contact_email\nX-Mailer: PHP/" . phpversion()); + echo "Your member account has been created and the details necessary to login have been sent to your e-mail account <B>$email</B>. Once you received the account confirmation, hit <A HREF=\"account.php\">this link</A> to login."; + } + } + $theme->footer(); +} + + +function userinfo($uname) { + global $user, $cookie; + + $result = mysql_query("SELECT femail, url, bio, signature FROM users WHERE uname = '$uname'"); + $userinfo = mysql_fetch_array($result); + + + cookiedecode($user); + + include "theme.inc"; + $theme->header(); + + if ($uname == $cookie[1]) { + print "<P>Welcome $uname! This is <B>your</B> user info page. There are many more, but this one is yours. You are probably most interested in editing something, but if you need to kill some time, this place is as good as any other place.</P>"; + } + if ((mysql_num_rows($result) == 1) && ($userinfo[url] || $userinfo[femail] || $userinfo[bio])) { + print "<TABLE WIDTH=\"100%\">"; + ### Name: + print "<TR><TD ALIGN=\"right\"><B>Name:</B></TD><TD><B>$uname</B></TD></TR>\n"; + ### URL: + if ($userinfo[url]) print "<TR><TD ALIGN=\"right\"><B>URL:</B></TD><TD><A HREF=\"$userinfo[url]\">$userinfo[url]</A></TD></TR>\n"; + else print "<TR><TD ALIGN=\"right\"><B>URL:</B></TD><TD>not available</TD></TR>\n"; + ### E-mail: + if ($userinfo[femail]) print "<TR><TD ALIGN=\"right\" VALIGN=\"top\"><B>E-mail:</B></TD><TD><A HREF=\"mailto:$userinfo[femail]\">$userinfo[femail]</A><BR><I>(Might be spam-proofed or even completly fake.)</I></TD></TR>\n"; + else print "<TR><TD ALIGN=\"right\"><B>E-mail:</B></TD><TD>not available</TD></TR>\n"; + ### Bio: + if ($userinfo[bio]) print "<TR><TD ALIGN=\"right\" VALIGN=\"top\"><B>Bio:</B></TD><TD>". nl2br($userinfo[bio]) ."</TD></TR>\n"; + else print "<TR><TD ALIGN=\"right\"><B>Bio:</B></TD><TD>not available</TD></TR>\n"; + ### Signature: + if ($userinfo[bio]) print "<TR><TD ALIGN=\"right\" VALIGN=\"top\"><B>Signature:</B></TD><TD>". nl2br($userinfo[signature]) ."</TD></TR>\n"; + else print "<TR><TD ALIGN=\"right\"><B>Signature:</B></TD><TD>not available</TD></TR>\n"; + print "</TABLE><BR><BR>"; + } else { + echo "<P>No information available for <B>$uname</B>.</P>"; + } + $theme->footer(); +} + +function main($user) { + global $fail; + if(!isset($user)) { + include "config.inc"; + include "functions.inc"; + include "theme.inc"; + $theme->header(); + ?> + <? + if ($fail) print "<CENTER><BLINK><H3>Authentication failed!</H3></BLINK></CENTER>"; + ?> + <TABLE BORDER="0" CELLPADDING="2" CELLSPACING="0" WIDTH="100%"> + <TR> + <TD ALIGN="center" VALIGN="bottom" WIDTH="33%"> + <FORM ACTION="account.php" METHOD="post"> + <? + $theme->box("Login", "<TABLE BORDER=\"0\"><TR><TD ALIGN=\"right\" WIDTH=\"80\">Username:</TD><TD><INPUT TYPE=\"text\" NAME=\"uname\" SIZE=\"12\" MAXLENGHT=\"15\"></TD></TR><TR><TD ALIGN=\"right\">Password:</TD><TD><INPUT TYPE=\"password\" NAME=\"pass\" SIZE=\"12\" MAXLENGTH=\"12\"></TD></TR><TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Login\"></TD></TR></TABLE>"); + ?> + </FORM> + </TD> + <TD ALIGN="center" VALIGN="bottom" WIDTH="33%"> + <FORM ACTION="account.php" METHOD="post"> + <? + $theme->box("Forgot your password?", "<TABLE BORDER=\"0\"><TR><TD ALIGN=\"right\" WIDTH=\"80\">Username:</TD><TD><INPUT TYPE=\"text\" NAME=\"uname\" SIZE=\"12\" MAXLENGHT=\"15\"></TD></TR><TR><TD COLSPAN=\"3\"><FONT SIZE=\"2\"><I>Fill out your username and your password will be mailed to the e-mail account associated with your username.</I></FONT></TD></TR><TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Mail password\"></TD></TR></TABLE>"); + ?> + </FORM> + </TD> + <TD ALIGN="center" VALIGN="bottom" WIDTH="33%"> + <FORM ACTION="account.php" METHOD="post"> + <? + $theme->box("Register as new user", "<TABLE BORDER=\"0\"><TR><TD ALIGN=\"right\" WIDTH=\"80\">Username:</TD><TD><INPUT TYPE=\"text\" NAME=\"uname\" SIZE=\"12\" MAXLENGTH=\"20\"></TD></TR><TR><TD ALIGN=\"right\">E-mail:</TD><TD><INPUT TYPE=\"text\" NAME=\"email\" SIZE=\"12\" MAXLENGTH=\"55\"></TD></TR><TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Sign up\"></TD></TR></TABLE>"); + ?> + </FORM> + </TD> + </TR> + <TR> + <TD COLSPAN="3"> + <P>Logging in will allow you to post comments as yourself. If you don't login, you will only be able to post as <B><?php echo"$anonymous"; ?></B>.</P> + </TD> + </TR> + </TABLE> + <?PHP + $theme->footer(); + } + elseif(isset($user)) { + global $cookie; + include "functions.inc"; + cookiedecode($user); + dbconnect(); + userinfo($cookie[1]); + } +} + +function logout() { + setcookie("user"); + include "functions.inc"; + include "theme.inc"; + $theme->header(); + ?> + <BR><BR><BR><BR> + <P ALIGN="center"><FONT SIZE="+2"><B>You are now logged out!</B></FONT></P> + <P>You have been logged out of the system. Since authentication details are stored by using cookies, logging out is only necessary to prevent those who have access to your computer from abusing your account.</P> + <? + $theme->footer(); +} + +function mailPassword($uname) { + include "functions.inc"; + dbconnect(); + $result = mysql_query("select pass, email from users where uname = '$uname'"); + if(!$account = mysql_fetch_object($result)) { + echo "Sorry, no corresponding account information was found."; + } else { + $message = "$uname,\n\n\na visitor from ".getenv("REMOTE_ADDR")." (most probably you) has just requested the password associated with the e-mail address '$account->email', to be sent. The password is '$account->pass' (without the quotes).\n\nIf you didn't ask for this, don't get your panties all in a knot. You are seeing this message, not 'them'. So if you can't be trusted with your own password, we might have an issue, otherwise, you can just disregard this message.\n\n\n$contact_signature"; + $subject="[$sitename] password for $account->uname"; + mail($account->email, $subject, $message, "From: $contact_email\nX-Mailer: PHP/" . phpversion()); + $titlebar = "You password has been sent."; + include "theme.inc"; + $theme->header(); + print "The requested password has been sent to the e-mail account associated with the username '<B>$uname</B>'."; + $theme->footer(); + } +} + +function docookie($setuid, $setuname, $setpass, $setstorynum, $setumode, $setuorder, $setthold, $setnoscore, $setublockon, $settheme) { + $info = base64_encode("$setuid:$setuname:$setpass:$setstorynum:$setumode:$setuorder:$setthold:$setnoscore:$setublockon:$settheme"); + setcookie("user","$info", time() + 15552000); // 6 month = 15552000 +} + +function login($uname, $pass) { + global $setinfo; + include "functions.inc"; + dbconnect(); + $result = mysql_query("select uid, storynum, umode, uorder, thold, noscore, ublockon, theme, signature FROM users WHERE uname = '$uname' AND pass = '$pass'"); + if (mysql_num_rows($result) == 1) { + $setinfo = mysql_fetch_array($result); + docookie($setinfo[uid], $uname, $pass, $setinfo[storynum], $setinfo[umode], $setinfo[uorder], $setinfo[thold], $setinfo[noscore], $setinfo[ublockon], $setinfo[theme]); + Header("Location: account.php?op=userinfo&uname=$uname"); + } else { + Header("Location: account.php?fail=1"); + } +} + +function user_edit_info() { + include "functions.inc"; + global $user, $userinfo; + getusrinfo($user); + + include "theme.inc"; + $theme->header(); + ?> + + <FORM ACTION="account.php" METHOD="post"> + + <B>Real name:</B><BR> + <INPUT TYPE="text" name="name" value="<?PHP echo"$userinfo[name]"; ?>" SIZE="30" MAXLENGHT="55"><BR> + <I>Optional.</I><BR><BR> + + <B>Real e-mail address:</B><BR> + <INPUT TYPE="text" NAME="email" VALUE="<?PHP echo"$userinfo[email]"; ?>" SIZE="30" MAXLENGHT="55"><BR> + <I>Required, but never displayed publicly: needed in case you lose your password.</I><BR><BR> + + <B>Fake e-mail address:</B><BR> + <INPUT TYPE="text" NAME="femail" VALUE="<?PHP echo"$userinfo[femail]"; ?>" SIZE="30" MAXLENGHT="55"><BR> + <I>Optional, and displayed publicly by your comments. You may spam proof it if you want.</I><BR><BR> + + <B>URL of homepage:</B><BR> + <INPUT TYPE="text" name="url" value="<?PHP echo"$userinfo[url]"; ?>" SIZE="30" MAXLENGTH="100"><BR> + <I>Optional, but make sure you enter fully qualified URLs only. That is, remember to include "http://".</I><BR><BR> + + <B>Bio:</B> (255 char limit)<BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="5" NAME="bio"><?PHP echo"$userinfo[bio]"; ?></TEXTAREA><BR> + <I>Optional. This biographical information is publicly displayed on your user page.</I><BR><BR> + + <B>Password:</B> <BR> + <INPUT TYPE="password" NAME="pass" SIZE="10" MAXLENGTH="20"> <INPUT TYPE="password" NAME="vpass" SIZE="10" MAXLENGTH="20"><BR> + <I>Enter your new password twice if you want to change your current password or leave it blank if you are happy with your current password.</I><BR><BR> + + <INPUT TYPE="hidden" NAME="uname" VALUE="<?PHP echo"$userinfo[uname]"; ?>"> + <INPUT TYPE="hidden" NAME="uid" VALUE="<?PHP echo"$userinfo[uid]"; ?>"> + <INPUT TYPE="submit" NAME="op" VALUE="Save user information"> + + </FORM> + + <?PHP + $theme->footer(); +} + +function user_save_info($uid, $name, $uname, $email, $femail, $url, $pass, $vpass, $bio) { + global $user, $cookie, $userinfo; + include "functions.inc"; + if ((isset($pass)) && ("$pass" != "$vpass")) { + echo "The verification password is not the same as the first password."; + } + elseif (($pass != "") && (strlen($pass) < $minpass)) { + echo "Sorry, your password must be at least $minpass charachters long."; + } + else { + if ($bio) { + $bio = FixQuotes($bio); + } + if ($pass != "") { + dbconnect(); + cookiedecode($user); + mysql_query("UPDATE users SET name = '$name', email = '$email', femail = '$femail', url = '$url', pass = '$pass', bio = '$bio' WHERE uid = $uid"); + $result = mysql_query("SELECT uid, uname, pass, storynum, umode, uorder, thold, noscore, ublockon, theme from users where uname='$uname' and pass='$pass'"); + $userinfo = mysql_fetch_array($result); + docookie($userinfo[uid],$userinfo[uname],$userinfo[pass],$userinfo[storynum],$userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],$userinfo[theme]); + } + else { + dbconnect(); + mysql_query("UPDATE users SET name = '$name', email = '$email', femail = '$femail', url = '$url', bio = '$bio' WHERE uid=$uid"); + } + } +} + +function user_edit_home() { + include "functions.inc"; + global $user, $userinfo; + getusrinfo($user); + include "theme.inc"; + $theme->header(); + + ?> + <FORM ACTION="account.php" method="post"> + + <P> + <B>Maximum number of stories:</B><BR> + <INPUT TYPE="text" NAME="storynum" SIZE="3" MAXLENGHT="3" VALUE="<?PHP echo"$userinfo[storynum]"; ?>"> + </P> + + <P> + <B>Theme:</B><BR> + <SELECT NAME="theme"> + <?php + include "themes/list.php"; + $themelist = explode(" ", $themelist); + for ($i=0; $i < sizeof($themelist); $i++) { + if ($themelist[$i]!="") { + echo "<OPTION VALUE=\"$themelist[$i]\" "; + if ((($userinfo[theme]=="") && ($themelist[$i]=="default")) || ($userinfo[theme]==$themelist[$i])) echo "SELECTED"; + echo ">$themelist[$i]\n"; + } + } + if ($userinfo[theme]=="") $userinfo[theme] = "default"; + ?> + </SELECT><BR> + <I>Changes the look and feel of the site.</I> + </P> + + <P> + <B>User block:</B><BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="5" NAME="ublock"><? echo"$userinfo[ublock]"; ?></TEXTAREA><BR> + <INPUT TYPE="checkbox" NAME="ublockon" <? if ($userinfo[ublockon]==1) { echo "checked"; } ?>> Enable user box.<BR> + <I>Enable the checkbox and whatever you enter below will appear on your costum main page.</I> + </P> + + <INPUT TYPE="hidden" name="uname" value="<?PHP echo"$userinfo[uname]"; ?>"> + <INPUT TYPE="hidden" name="uid" value="<?PHP echo"$userinfo[uid]"; ?>"> + <INPUT TYPE="submit" name="op" value="Save homepage settings"> + </FORM> + <?PHP + $theme->footer(); +} + +function user_save_home($uid, $uname, $storynum, $theme, $ublockon, $ublock) { + global $user, $userinfo; + include "functions.inc"; + dbconnect(); + if(isset($ublockon)) $ublockon=1; else $ublockon=0; + $ublock = FixQuotes($ublock); + mysql_query("LOCK TABLES users WRITE"); + mysql_query("update users set storynum='$storynum', ublockon='$ublockon', ublock='$ublock', theme='$theme' where uid=$uid"); + getusrinfo($user); + mysql_query("UNLOCK TABLES"); + docookie($userinfo[uid],$userinfo[uname],$userinfo[pass],$userinfo[storynum],$userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],$userinfo[theme]); + Header("Location: account.php?theme=$theme"); +} + +function user_edit_comm() { + include "functions.inc"; + global $user, $userinfo; + getusrinfo($user); + + include "theme.inc"; + $theme->header(); + ?> + + <FORM ACTION="account.php" METHOD="post"> + <B>Display Mode:</B><BR> + <SELECT NAME="umode"> + <OPTION VALUE="nocomments" <?PHP if ($userinfo[umode] == 'nocomments') { echo "SELECTED"; } ?>>No comments + <OPTION VALUE="nested" <?PHP if ($userinfo[umode] == 'nested') { echo "SELECTED"; } ?>>Nested + <OPTION VALUE="flat" <?PHP if ($userinfo[umode] == 'flat') { echo "SELECTED"; } ?>>Flat + <OPTION VALUE="threaded" <?PHP if (!isset($userinfo[umode]) || ($userinfo[umode]=="") || $userinfo[umode]=='threaded') { echo "SELECTED"; } ?>>Threaded + </SELECT> + <BR><BR> + + <B>Sort order:</B><BR> + <SELECT NAME="uorder"> + <OPTION VALUE="0" <?PHP if (!$userinfo[uorder]) { echo "SELECTED"; } ?>>Oldest first + <OPTION VALUE="1" <?PHP if ($userinfo[uorder]==1) { echo "SELECTED"; } ?>>Newest first + <OPTION VALUE="2" <?PHP if ($userinfo[uorder]==2) { echo "SELECTED"; } ?>>Highest scoring first + </SELECT> + <BR><BR> + + <B>Threshold:</B><BR> + <SELECT NAME="thold"> + <OPTION VALUE="-1" <?PHP if ($userinfo[thold]==-1) { echo "SELECTED"; } ?>>-1: Display uncut and raw comments. + <OPTION VALUE="0" <?PHP if ($userinfo[thold]==0) { echo "SELECTED"; } ?>>0: Display almost all comments. + <OPTION VALUE="1" <?PHP if ($userinfo[thold]==1) { echo "SELECTED"; } ?>>1: Display almost no anonymous comments. + <OPTION VALUE="2" <?PHP if ($userinfo[thold]==2) { echo "SELECTED"; } ?>>2: Display comments with score +2 only. + <OPTION VALUE="3" <?PHP if ($userinfo[thold]==3) { echo "SELECTED"; } ?>>3: Display comments with score +3 only. + <OPTION VALUE="4" <?PHP if ($userinfo[thold]==4) { echo "SELECTED"; } ?>>4: Display comments with score +4 only. + <OPTION VALUE="5" <?PHP if ($userinfo[thold]==5) { echo "SELECTED"; } ?>>5: Display comments with score +5 only. + </SELECT><BR> + <I>Comments that scored less than this setting will be ignored.<BR>Anonymous comments start at 0, comments of people logged on start at 1 and moderators can add and subtract points.</I> + <BR><BR> + + <B>Signature:</B> (255 char limit)<BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="4" NAME="signature"><?PHP echo "$userinfo[signature]"; ?></TEXTAREA><BR> + <I>Optional. This information will be publicly displayed at the end of your comments.</I> + <BR><BR> + + <INPUT TYPE="hidden" NAME="uname" VALUE="<?PHP echo"$userinfo[uname]"; ?>"> + <INPUT TYPE="hidden" NAME="uid" VALUE="<?PHP echo"$userinfo[uid]"; ?>"> + <INPUT TYPE="submit" NAME="op" VALUE="Save comments settings"> + </FORM> + <?PHP + $theme->footer(); +} + +function user_save_comm($uid, $uname, $umode, $uorder, $thold, $noscore, $signature) { + global $user, $userinfo; + include "functions.inc"; + dbconnect(); + if(isset($noscore)) $noscore = 1; else $noscore = 0; + mysql_query("LOCK TABLES users WRITE"); +// print "UPDATE users SET umode = '$umode', uorder = '$uorder', thold = '$thold', noscore = '$noscore', signature = '$signature' WHERE uid = $uid<BR>"; + mysql_query("UPDATE users SET umode = '$umode', uorder = '$uorder', thold = '$thold', noscore = '$noscore', signature = '$signature' WHERE uid = $uid"); + getusrinfo($user); + mysql_query("UNLOCK TABLES"); + docookie($userinfo[uid],$userinfo[uname],$userinfo[pass],$userinfo[storynum],$userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],$userinfo[theme]); + Header("Location: account.php"); +} + +switch($op) { + case "logout": + logout(); + break; + case "lost_pass": + lost_pass(); + break; + case "Sign up": + confirmNewUser($uname, $email); + break; + case "Create account": + finishNewUser($uname, $email); + break; + case "Mail password": + mailPassword($uname); + break; + case "userinfo": + include "functions.inc"; + dbconnect(); + userinfo($uname); + break; + case "Login": + login($uname, $pass); + break; + case "dummy": + // this is needed to give the cookie a chance to digest + include "config.inc"; + header("Location: account.php"); + break; + case "edituser": + user_edit_info(); + break; + case "Save user information": + user_save_info($uid, $name, $uname, $email, $femail, $url, $pass, $vpass, $bio); + userinfo($uname); + break; + case "edithome": + user_edit_home(); + break; + case "Save homepage settings": + user_save_home($uid, $uname, $storynum, $theme, $ublockon, $ublock); + userinfo($uname); + break; + case "editcomm": + user_edit_comm(); + break; + case "Save comments settings": + user_save_comm($uid, $uname, $umode, $uorder, $thold, $noscore, $signature); + userinfo($uname); + break; + default: + main($user); + break; +} +?> \ No newline at end of file diff --git a/admin.php b/admin.php new file mode 100644 index 0000000000000000000000000000000000000000..1993c14aa4c93a9e69254b7b83c286361888623e --- /dev/null +++ b/admin.php @@ -0,0 +1,798 @@ +<?PHP + +include "functions.inc"; +include "authentication.inc"; + +function login() { + include "theme.inc"; + $theme->header(); + $theme->box("Login", "<FORM ACTION=\"admin.php\" METHOD=\"post\"><P>Name: <INPUT TYPE=\"text\" NAME=\"aid\" SIZE=\"20\" MAXLENGTH=\"20\"><P>Password: <INPUT TYPE=\"password\" NAME=\"pwd\" SIZE=\"20\" MAXLENGTH=\"18\"><P><INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"login\"></FORM>"); + $theme->footer(); +} + +function logout() { + setcookie("admin"); + + include "theme.inc"; + $theme->header(); + ?> + <BR><BR><BR><BR> + <P ALIGN="center"><FONT SIZE="+2"><B>You are now logged out!</B></FONT></P> + <P>You have been logged out of the system. Since authentication details are stored by using cookies, logging out is only necessary to prevent those who have access to your computer from abusing your account.</P> + <? + $theme->footer(); +} + +function backup() { + include "config.inc"; + if ($system == 0) { + exec("mysqldump -h $dbhost -u $dbuname -p$dbpass $dbname | mail -s \"[$sitename] MySQL backup\" $notify_email"); + exec("mysqldump -h $dbhost -u $dbuname -p$dbpass $dbname > ../$sitename-backup-". date("Ymd", time()).".mysql"); + } + else print "<P><B>Warning:</B> the backup feature is only supported on UNIX systems. Check your configuration file if you are using a UNIX system.</P>"; +} + +function main() { + include "config.inc"; + include "theme.inc"; + $theme->header(); + dbconnect(); + + $result = mysql_query("SELECT qid, subject, timestamp FROM queue order by timestamp"); + + echo "<FORM ACTION=\"admin.php\" METHOD=\"post\">"; + echo "<TABLE WIDTH=\"100%\">"; + + if (mysql_num_rows($result) != 0) { + while (list($qid, $subject, $timestamp) = mysql_fetch_row($result)) { + + ### format date: + $datetime = date("F d - h:i:s A", $timestamp); + + ### generate overview: + echo " <TR>"; + echo " <TD BGCOLOR=\"#c0c0c0\" WIDTH=\"11\" ALIGN=\"middle\"><INPUT TYPE=\"radio\" NAME=\"qid\" VALUE=\"$qid\"></TD>"; + echo " <TD BGCOLOR=\"#c0c0c0\"><A HREF=\"admin.php?op=submission&qid=$qid\">$subject</A></TD>"; + echo " <TD BGCOLOR=\"#c0c0c0\">$datetime</TD>"; + echo " </TR>"; + $dummy++; + } + } + + if ($dummy < 1) { + echo " <TR><TD ALIGN=\"center\" BGCOLOR=\"#c0c0c0\" COLSPAN=\"3\">There are currently <B>no</B> new submissions available.</TD></TR>"; + } + else { + echo " <TR><TD COLSPAN=\"3\"><INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Delete article\"> <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"View article\"></TD></TR>"; + } + + echo " <TR><TD COLSPAN=\"3\">Article ID: <INPUT TYPE=\"text\" NAME=\"sid\" SIZE=\"5\"> <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Edit article\"></TD></TR>"; + echo " <TR><TD COLSPAN=\"3\"><A HREF=\"admin.php?op=news_admin_write\">Write and post an article as administrator.</A></TD></TR>"; + echo "</TABLE></FORM>"; + + mysql_free_result($result); + ?> + <HR> + <LI><A HREF="admin.php?op=blocks">Edit global blocks on main page.</A></LI><BR> + <I>Allows you to update the content blocks on the main page.</I> + <HR> + <LI><A HREF="admin.php?op=user_overview">Edit user accounts.</A></LI><BR> + <I>Add, delete, block, view and update user accounts.</I> + <HR> + <LI><A HREF="admin.php?op=mod_authors">Edit adminstrators accounts.</A></LI><BR> + <HR> + <LI><A HREF="admin.php?op=backup">Backup MySQL tables.</A></LI><BR> + <I>Will mail a backup of the MySQL database to '<? echo $notify_email; ?>'.</I> + <HR> + <LI><A HREF="webboard.php?section=webboard">Webboard manager.</A></LI><BR> + <I>Allows you to delete flamebait post or threads from the webboard.</I> + <HR> + <LI><A HREF="poll.php?section=poll">Poll manager.</A></LI><BR> + <I>Install, delete or update polls.</I> + <HR> + <LI><A HREF="refer.php?section=refer">Referring site manager.</A></LI><BR> + <I>Edit, block or delete sites that participate with the referring site program.</I> + <HR> + <LI><A HREF="">Resource manager.</A> (not implemented yet)</LI><BR> + <I>Allows admins to maintain a list of resources, news sites and other interesting start points to start their search for news.</I> + <HR> + <LI><A HREF="admin.php?op=logout">Logout</A></LI> + <?PHP + $theme->footer(); +} + +/*********************************************************/ +/* block functions */ +/*********************************************************/ + +function block_overview() { + include "theme.inc"; + $theme->header(); + + dbconnect(); + $result = mysql_query("SELECT id, title, content FROM blocks"); + + if (mysql_num_rows($result) > 0) { + while(list($id, $title, $content) = mysql_fetch_array($result)) { + echo "<FORM ACTION=\"admin.php\" METHOD=\"post\">"; + echo " <B>Title:</B><BR>"; + echo " <INPUT TYPE=\"text\" NAME=\"title\" SIZE=\"60\" MAXLENGTH=\"60\" VALUE=\"$title\">"; + echo " <BR><BR>"; + + echo " <B>Content:</B><BR>"; + echo " <TEXTAREA WRAP=\"virtual\" COLS=\"60\" ROWS=\"8\" NAME=\"content\">$content</TEXTAREA>"; + echo " <BR><BR>"; + + echo " <INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"$id\">"; + echo " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update block\"> <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Delete block\">"; + echo "</FORM>"; + } + } + ?> + <HR> + <FORM ACTION="admin.php" METHOD="post"> + <B>Title:</B><BR> + <INPUT TYPE="text" NAME="title" SIZE="60" MAXLENGTH="60"> + <BR><BR> + + <B>Content:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="8" NAME="content"></TEXTAREA> + <BR><BR> + <INPUT TYPE="submit" NAME="op" VALUE="Add new block"> + </FORM> + + <?php + $theme->footer(); +} + +function block_add($title, $content) { + dbconnect(); + mysql_query("INSERT INTO blocks VALUES (NULL,'$aid','$title','$content')"); + header("Location: admin.php?op=main"); +} + +function block_update($id, $title, $content) { + dbconnect(); + mysql_query("update blocks set title='$title', content='$content' where id=$id"); + header("Location: admin.php?op=main"); +} + +function block_delete($id) { + dbconnect(); + mysql_query("DELETE FROM blocks WHERE id = '$id'"); + header("Location: admin.php?op=main"); +} + + +/*********************************************************/ +/* user account functions */ +/*********************************************************/ + +function user_overview() { + include "theme.inc"; + $theme->header(); + dbconnect(); + $result = mysql_query("SELECT * FROM users"); + while ($account = mysql_fetch_object($result)) { + $count++; + print "$count. $account->uname [ <A HREF=\"account.php?op=userinfo&uname=$account->uname\">view</A> | edit | block | delete ]<BR>"; + } + $theme->footer(); +} + +/*********************************************************/ +/* article functions */ +/*********************************************************/ +function news_queue_delete($qid) { + dbconnect(); + $result = mysql_query("DELETE FROM queue WHERE qid = $qid"); + header("Location: admin.php?op=main"); +} + + +function news_display($qid) { + global $user, $subject, $article; + + include "config.inc"; + include "header.inc"; + + dbconnect(); + + if (isset($qid)) $result = mysql_query("SELECT qid, uid, uname, timestamp, subject, abstract, article, category FROM queue WHERE qid = $qid"); + else $result = mysql_query("SELECT qid, uid, uname, timestamp, subject, abstract, article, category FROM queue LIMIT 1"); + + list($qid, $uid, $uname, $timestamp, $subject, $abstract, $article, $category) = mysql_fetch_row($result); + mysql_free_result($result); + + $subject = stripslashes($subject); + $abstract = stripslashes($abstract); + $article = stripslashes($article); + + $theme->preview("", $uname, $timestamp, $subject, "", $abstract, "", $article); + ?> + + <FORM ACTION="admin.php" METHOD="post"> + + <P> + <B>Author or poster:</B><br> + <INPUT TYPE="text" NAME="author" SIZE="50" VALUE="<?PHP echo "$uname"; ?>"> + </P> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50" VALUE="<?PHP echo"$subject"; ?>"> + </P> + + <P> + <B>Department:</B><BR> + <INPUT TYPE="text" NAME="department" SIZE="50" VALUE=""> dept.<BR> + <I> + <FONT SIZE="2"> + Example departments: + <UL> + <LI>we-saw-it-coming dept.</LI> + <LI>don't-get-your-panties-in-a-knot dept.</LI> + <LI>brain-melt dept.</LI> + <LI>beats-the-heck-out-of-me dept.</LI> + </UL> + </FONT> + </I> + </P> + + <P> + <B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + echo "<OPTION VALUE=\"$categories[$i]\" "; + if ($category == $categories[$i]) echo "SELECTED"; + echo ">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Author's abstract:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="8" NAME="abstract"><?PHP echo "$abstract"; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page!</I></FONT> + </P> + + <P> + <B>Editor's comments:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="5" NAME="comments"></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page after the abstract.</I></FONT> + </P> + + <P> + <B>Extended article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="12" NAME="article"><?PHP echo "$article"; ?></TEXTAREA><BR> + <FONT SIZE="2">Will be displayed on the article's page when following the 'read more'-link.</FONT></I> + </P> + + <INPUT TYPE="hidden" NAME="qid" VALUE="<?PHP echo "$qid"; ?>"> + <INPUT TYPE="hidden" NAME="uid" VALUE="<?PHP echo "$uid"; ?>"> + <INPUT TYPE="submit" NAME="op" VALUE="Delete article"> + <INPUT TYPE="submit" NAME="op" VALUE="Preview article"> + <INPUT TYPE="submit" NAME="op" VALUE="Post article"> + </FORM> + + <?PHP + $theme->footer(); +} + +function news_preview($qid, $uid, $author, $subject, $department, $category, $abstract, $comments, $article) { + global $user, $boxstuff, $aid; + include "config.inc"; + include "theme.inc"; + + $theme->header(); + + $subject = stripslashes($subject); + $agstract = stripslashes($abstract); + $comments = stripslashes($comments); + $article = stripslashes($article); + + $theme->preview($aid, $author, time(), $subject, $department, $abstract, $comments, $article); + $theme->footer(); + ?> + + + <FORM ACTION="admin.php" METHOD="post"> + + <P> + <B>Author or poster:</B><br> + <INPUT TYPE="text" NAME="author" SIZE="50" VALUE="<?PHP echo "$author"; ?>"> + </P> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50" VALUE="<?PHP echo"$subject"; ?>"> + </P> + + <P> + <B>Department:</B><BR> + <INPUT TYPE="text" NAME="department" SIZE="50" VALUE="<?PHP echo"$department"; ?>"> dept.<BR> + <I><FONT SIZE="2"> + Example departments: + <UL> + <LI>we-saw-it-coming dept.</LI> + <LI>don't-get-your-panties-in-a-knot dept.</LI> + <LI>brain-melt dept.</LI> + <LI>beats-the-heck-out-of-me dept.</LI> + </UL> + </FONT></I> + </P> + + <P> + <B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + echo "<OPTION VALUE=\"$categories[$i]\" "; + if ($category == $categories[$i]) echo "SELECTED"; + echo ">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Author's abstract:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="8" NAME="abstract"><?PHP echo "$abstract"; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page!</I></FONT> + </P> + + <P> + <B>Editor's comments:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="5" NAME="comments"><? echo "$comments"; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page after the abstract.</I></FONT> + </P> + + <P> + <B>Extended article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="12" NAME="article"><? echo "$article"; ?></TEXTAREA><BR> + <I><FONT SIZE="2">Will be displayed on the article's page when following the 'read more'-link.</FONT></I> + </P> + + <INPUT TYPE="hidden" NAME="qid" VALUE="<?PHP echo "$qid"; ?>"> + <INPUT TYPE="hidden" NAME="uid" VALUE="<?PHP echo "$uid"; ?>"> + <INPUT TYPE="submit" NAME="op" VALUE="Delete article"> + <INPUT TYPE="submit" NAME="op" VALUE="Preview article"> + <INPUT TYPE="submit" NAME="op" VALUE="Post article"> + </FORM> + + <?PHP + $theme->footer(); +} + +function news_post($qid, $uid, $author, $subject, $department, $category, $abstract, $comments, $article) { + global $aid; + dbconnect(); + + if ($uid == -1) $author = ""; + + $subject = stripslashes(FixQuotes($subject)); + $abstract = stripslashes(FixQuotes($abstract)); + $comments = stripslashes(FixQuotes($comments)); + $article = stripslashes(FixQuotes($article)); + + $result = mysql_query("INSERT INTO stories (sid, aid, subject, time, abstract, comments, article, category, informant, department) VALUES (NULL, '$aid', '$subject', '". time() ."', '$abstract', '$comments', '$article', '$category', '$author', '$department')"); + + ### remove article from queue: + news_queue_delete($qid); +} + +function news_edit($sid) { + global $user, $subject, $abstract, $comments, $article; + + include "theme.inc"; + include "config.inc"; + + $theme->header(); + + dbconnect(); + + $result = mysql_query("SELECT * FROM stories where sid = $sid"); + $article = mysql_fetch_object($result); + mysql_free_result($result); + + $theme->preview($article->author, $article->informant, $article->time, $article->subject, $article->department, $article->abstract, $article->comments, $article->article); + + ?> + + <FORM ACTION="admin.php" METHOD="post"> + + <P> + <B>Author or poster:</B><BR> + <INPUT TYPE="text" NAME="author" SIZE="50" VALUE="<?PHP echo "$article->aid"; ?>"> + </P> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50" VALUE="<?PHP echo"$article->subject"; ?>"> + </P> + + <P> + <B>Department:</B><BR> + <INPUT TYPE="text" NAME="department" SIZE="50" VALUE="<?PHP echo"$article->department"; ?>"> dept.<BR> + <I><FONT SIZE="2"> + Example departments: + <UL> + <LI>we-saw-it-coming dept.</LI> + <LI>don't-get-your-panties-in-a-knot dept.</LI> + <LI>brain-melt dept.</LI> + <LI>beats-the-heck-out-of-me dept.</LI> + </UL> + </FONT></I> + </P> + + <P> + <B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + echo "<OPTION VALUE=\"$categories[$i]\" "; + if ($article->category == $categories[$i]) echo "SELECTED"; + echo ">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Author's abstract:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="8" NAME="abstract"><?PHP echo "$article->abstract"; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page!</I></FONT> + </P> + + <P> + <B>Editor's comments:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="5" NAME="comments"><? echo "$article->comments"; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page after the abstract.</I></FONT> + </P> + + <P> + <B>Extended article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="12" NAME="article"><? echo "$article->article"; ?></TEXTAREA><BR> + <I><FONT SIZE="2">Will be displayed on the article's page when following the 'read more'-link.</FONT></I> + </P> + + + <INPUT TYPE="hidden" NAME="sid" SIZE=60 VALUE="<?PHP echo"$sid"; ?>"> + <INPUT TYPE="submit" NAME="op" VALUE="Update article"></FORM> + + <?PHP + $theme->footer(); +} + +function news_update($sid, $subject, $category, $department, $abstract, $comments, $article) { + global $aid; + dbconnect(); + $subject = stripslashes(FixQuotes($subject)); + $department = stripslashes(FixQuotes($department)); + $abstract = stripslashes(FixQuotes($abstract)); + $comments = stripslashes(FixQuotes($comments)); + $article = stripslashes(FixQuotes($article)); + mysql_query("UPDATE stories SET subject = '$subject', category = '$category', department = '$department', abstract = '$abstract', comments = '$comments', article = '$article' WHERE sid = $sid"); + header("Location: admin.php?op=main"); +} + +function news_admin_write() { + include "theme.inc"; + include "config.inc"; + dbconnect(); + + $theme->header(); + ?> + + <FORM ACTION="admin.php" METHOD="post"> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50" VALUE=""> + </P> + + <P> + <B>Department:</B><BR> + <INPUT TYPE="text" NAME="department" SIZE="50" VALUE=""> dept.<BR> + <I> + <FONT SIZE="2"> + Example departments: + <UL> + <LI>we-saw-it-coming dept.</LI> + <LI>don't-get-your-panties-in-a-knot dept.</LI> + <LI>brain-melt dept.</LI> + <LI>beats-the-heck-out-of-me dept.</LI> + </UL> + </FONT> + </I> + </P> + + <P> + <B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + echo "<OPTION VALUE=\"$categories[$i]\">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Introduction of article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="7" NAME="abstract"></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page.</I></FONT> + </P> + + <P> + <B>Rest of article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="8" NAME="article"></TEXTAREA><BR> + <I><FONT SIZE="2">Will be displayed on the article's page when following the 'read more'-link.</FONT></I> + </P> + + <INPUT TYPE="submit" NAME="op" VALUE="Preview admin article"> + <INPUT TYPE="submit" NAME="op" VALUE="Post admin article"> + </FORM> + <? + $theme->footer(); +} + +function news_admin_preview($subject, $category, $department, $abstract, $article) { + global $aid; + include "theme.inc"; + include "config.inc"; + $subject = stripslashes($subject); + $intro = stripslashes($intro); + $rest = stripslashes($rest); + + $theme->header(); + $theme->preview("", $aid, $time, $subject, "", $abstract, "", $article); + ?> + + <FORM ACTION="admin.php" METHOD="post"> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50" VALUE="<? echo "$subject"; ?>"> + </P> + + <P> + <B>Department:</B><BR> + <INPUT TYPE="text" NAME="department" SIZE="50" VALUE="<? echo "$department"; ?>"> dept.<BR> + <I> + <FONT SIZE="2"> + Example departments: + <UL> + <LI>we-saw-it-coming dept.</LI> + <LI>don't-get-your-panties-in-a-knot dept.</LI> + <LI>brain-melt dept.</LI> + <LI>beats-the-heck-out-of-me dept.</LI> + </UL> + </FONT> + </I> + </P> + + <P> + <B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + echo "<OPTION VALUE=\"$categories[$i]\" "; + if ($category == $categories[$i]) echo "SELECTED"; + echo ">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Introduction of article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="7" NAME="abstract"><? echo "$abstract"; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>Will be displayed on the main page.</I></FONT> + </P> + + <P> + <B>Rest of article:</B><BR> + <TEXTAREA WRAP="virtual" COLS="60" ROWS="8" NAME="article"><? echo "$article"; ?></TEXTAREA><BR> + <I><FONT SIZE="2">Will be displayed on the article's page when following the 'read more'-link.</FONT></I> + </P> + + <INPUT TYPE="submit" NAME="op" VALUE="Preview admin article"> + <INPUT TYPE="submit" NAME="op" VALUE="Post admin article"> + </FORM> + + <? + $theme->footer(); +} + +function news_admin_post($subject, $category, $department, $abstract, $article, $category) { + global $aid; + dbconnect(); + + $subject = stripslashes(FixQuotes($subject)); + $intro = stripslashes(FixQuotes($intro)); + $rest = stripslashes(FixQuotes($rest)); + + $result = mysql_query("INSERT INTO stories VALUES (NULL, '$aid', '$subject', '". time() ."', '$abstract', '', '$article', '$category', '$aid', '$department')"); + if (!$result) { + echo mysql_errno(). ": ".mysql_error(). "<BR>"; + exit(); + } + header("Location: admin.php?op=main"); +} + +/*********************************************************/ +/* admin admining */ +/*********************************************************/ + +function displayadmins() { + $titlebar = "<b>current authors</b>"; + include "header.inc"; + dbconnect(); + $result = mysql_query("select aid from authors"); + echo "<table border=1>"; + while(list($a_aid) = mysql_fetch_row($result)) { + echo "<tr><td>$a_aid</td>"; + echo "<td><a href=\"$that_url/admin.php?op=modifyadmin&chng_aid=$a_aid\">Modify Info</a></td>"; + echo "<td><a href=\"$that_url/admin.php?op=deladmin&del_aid=$a_aid\">Delete Author</a></td></tr>"; + } + echo "</table>"; + echo "<form action=\"$that_url/admin.php\" method=\"post\">"; + echo "Handle: <INPUT TYPE=\"text\" NAME=\"add_aid\" size=30 maxlength=30><br>"; + echo "Name: <INPUT TYPE=\"text\" NAME=\"add_name\" size=30 maxlength=60><br>"; + echo "Email: <INPUT TYPE=\"text\" NAME=\"add_email\" size=30 maxlength=60><br>"; + echo "URL: <INPUT TYPE=\"text\" NAME=\"add_url\" size=30 maxlength=60><br>"; + echo "Password: <INPUT TYPE=\"text\" NAME=\"add_pwd\" size=12 maxlength=12><br>"; + echo " <INPUT TYPE=submit NAME=op VALUE=\"Add author\"></form>"; + include "footer.inc"; +} + +function modifyadmin($chng_aid) { + $titlebar = "<b>update $chng_aid</b>"; + include "header.inc"; + dbconnect(); + $result = mysql_query("select aid, name, url, email, pwd from authors where aid='$chng_aid'"); + list($chng_aid, $chng_name, $chng_url, $chng_email, $chng_pwd) = mysql_fetch_row($result); + echo "<form action=\"admin.php\" method=\"post\">"; + echo "Name: $chng_name<INPUT TYPE=\"hidden\" NAME=\"chng_name\" VALUE=\"$chng_name\"><br>"; + echo "Handle: <INPUT TYPE=\"text\" NAME=\"chng_aid\" VALUE=\"$chng_aid\"><br>"; + echo "Email: <INPUT TYPE=\"text\" NAME=\"chng_email\" VALUE=\"$chng_email\" size=30 maxlength=60><br>"; + echo "URL: <INPUT TYPE=\"text\" NAME=\"chng_url\" VALUE=\"$chng_url\" size=30 maxlength=60><br>"; + echo "Password: <INPUT TYPE=\"password\" NAME=\"chng_pwd\" VALUE=\"$chng_pwd\" size=12 maxlength=12><br>"; + echo "Retype Password: <INPUT TYPE=\"password\" NAME=\"chng_pwd2\" size=12 maxlength=12> (for changes only)<br>"; + echo " <INPUT TYPE=submit NAME=op VALUE=\"Update Author\"></form>"; + include "footer.inc"; +} + +function updateadmin($chng_aid, $chng_name, $chng_email, $chng_url, $chng_pwd, $chng_pwd2) { + if ($chng_pwd2 != "") { + if($chng_pwd != $chng_pwd2) { + $titlebar = "<b>bad pass</b>"; + include "header.inc"; + echo "Sorry, the new passwords do not match. Click back and try again"; + include "footer.inc"; + exit; + } + dbconnect(); + $result = mysql_query("update authors set aid='$chng_aid', email='$chng_email', url='$chng_url', pwd='$chng_pwd' where NAME='$chng_name'"); + header("Location: admin.php?op=main"); + } else { + dbconnect(); + $result = mysql_query("update authors set aid='$chng_aid', email='$chng_email', url='$chng_url' where NAME='$chng_name'"); + header("Location: admin.php?op=main"); + } +} + + +if ($admin) { + switch($op) { + case "main": + main(); + break; + case "blocks": + block_overview(); + break; + case "Add new block": + block_add($title, $content); + break; + case "Delete block": + block_delete($id); + break; + case "Update block": + block_update($id, $title, $content); + break; + case "submission": + // fall through + case "View article": + news_display($qid); + break; + case "Preview article": + news_preview($qid, $uid, $author, $subject, $department, $category, $abstract, $comments, $article); + break; + case "Post article": + news_post($qid, $uid, $author, $subject, $department, $category, $abstract, $comments, $article); + break; + case "Edit article": + news_edit($sid); + break; + case "Update article": + news_update($sid, $subject, $category, $department, $abstract, $comments, $article); + break; + case "Delete article": + news_queue_delete($qid); + break; + case "news_admin_write": + news_admin_write($sid); + break; + case "Preview admin article": + news_admin_preview($subject, $category, $department, $abstract, $article); + break; + case "Post admin article": + news_admin_post($subject, $category, $department, $abstract, $article); + break; + case "mod_authors": + displayadmins(); + break; + case "modifyadmin": + modifyadmin($chng_aid); + break; + case "Update author": + updateadmin($chng_aid, $chng_name, $chng_email, $chng_url, $chng_pwd, $chng_pwd2); + break; + case "Add author": + dbconnect(); + $result = mysql_query("INSERT INTO authors VALUES ('$add_aid','$add_name','$add_url','$add_email','$add_pwd')"); + if (!$result) { + echo mysql_errno(). ": ".mysql_error(). "<br>"; return; + } + header("Location: $that_url/admin.php?op=main"); + break; + case "deladmin": + include "header.inc"; + echo "Are you sure you want to delete $del_aid?<br>"; + echo "<a href=\"$that_url/admin.php?op=deladminconf&del_aid=$del_aid\">Yes</a> <a href=\"$that_url/admin.php?op=main\">No</a>"; + include "footer.inc"; + break; + case "deladminconf": + dbconnect(); + mysql_query("delete from authors where aid='$del_aid'"); + header("Location: $that_url/admin.php?op=main"); + break; + case "create": + poll_createPoll(); + break; + case "createPosted": + poll_createPosted(); + break; + case "remove": + poll_removePoll(); + break; + case "removePosted": + poll_removePosted(); + break; + case "user_overview": + user_overview(); + break; + case "backup": + backup(); + main(); + break; + case "view": + poll_viewPoll(); + break; + case "viewPosted": + poll_viewPosted(); + break; + case "logout": + logout(); + break; + default: + main(); + break; + } +} else { + login(); +} +?> \ No newline at end of file diff --git a/article.php b/article.php new file mode 100644 index 0000000000000000000000000000000000000000..aff2d36180ad2e29d328f2b03ad9d6e7dba710bc --- /dev/null +++ b/article.php @@ -0,0 +1,33 @@ +<?PHP + if(!isset($sid) && !isset($tid)) { exit(); } + + include "config.inc"; + include "functions.inc"; + include "theme.inc"; + + dbconnect(); + + if ($save) { + cookiedecode($user); + mysql_query("UPDATE users SET umode='$mode', uorder='$order', thold='$thold' where uid='$cookie[0]'"); + getusrinfo($user); + $info = base64_encode("$userinfo[uid]:$userinfo[uname]:$userinfo[pass]:$userinfo[storynum]:$userinfo[umode]:$userinfo[uorder]:$userinfo[thold]:$userinfo[noscore]"); + setcookie("user","$info",time() + 15552000); + } + + if($op == "reply") Header("Location: comments.php?op=reply&pid=0&sid=$sid&mode=$mode&order=$order&thold=$thold"); + + $result = mysql_query("SELECT * FROM stories WHERE sid = $sid"); + list($sid, $aid, $subject, $time, $abstract, $comments, $article, $category, $informant, $department) = mysql_fetch_row($result); + + $theme->header(); + + $reply = "[ <A HREF=\"\"><FONT COLOR=\"$theme->hlcolor2\">home</FONT></A> | <A HREF=\"comments.php?op=reply&pid=0&sid=$sid\"><FONT COLOR=\"$theme->hlcolor2\">add a comment</FONT></A> ]"; + + $theme->article($aid, $informant, $time, stripslashes($subject), $department, stripslashes($abstract), stripslashes($comments), stripslashes($article), $reply); + + cookiedecode($user); + if ($mode != "nocomments") include "comments.php"; + + $theme->footer(); +?> \ No newline at end of file diff --git a/authentication.inc b/authentication.inc new file mode 100644 index 0000000000000000000000000000000000000000..16a91c4a0349b0e9cc0cc10b37d7800cfd4f1d7d --- /dev/null +++ b/authentication.inc @@ -0,0 +1,20 @@ +<? + +if ((isset($aid)) && (isset($pwd)) && ($op == "login")) { + $admin = base64_encode("$aid:$pwd"); + setcookie("admin","$admin",time()+2592000); // 1 mo is 2592000 +} + +if (isset($admin)) { + $admin = base64_decode($admin); + $admin = explode(":", $admin); + $aid = "$admin[0]"; + $pwd = "$admin[1]"; + dbconnect(); + if (mysql_num_rows(mysql_query("SELECT * FROM authors WHERE aid = '$aid' AND pwd = '$pwd'")) == 1) $admin = 1; + else $admin = 0; +} else { + $admin = 0; +} + +?> \ No newline at end of file diff --git a/comments.php b/comments.php new file mode 100644 index 0000000000000000000000000000000000000000..6cbb2889bbb2ac21e6541c96e84ec10391afa836 --- /dev/null +++ b/comments.php @@ -0,0 +1,525 @@ +<? + +function moderate_1() { + include "config.inc"; + global $admin; + echo "<FORM ACTION=\"comments.php\" METHOD=\"post\">"; +} + +function moderate_2($tid, $reason) { + include "config.inc"; + + echo "<SELECT NAME=\"meta:$tid\">"; + for($i = 0; $i < sizeof($comments_meta_reasons); $i++) { + echo "<OPTION VALUE=\"$i\">$comments_meta_reasons[$i]</OPTION>\n"; + } + echo "</SELECT>"; +} + +function moderate_3($sid, $mode, $order, $thold = 0) { + echo "<INPUT TYPE=\"hidden\" NAME=\"sid\" VALUE=\"$sid\"><INPUT TYPE=\"hidden\" NAME=\"mode\" VALUE=\"$mode\"><INPUT TYPE=\"hidden\" NAME=\"order\" VALUE=\"$order\"><INPUT TYPE=\"hidden\" NAME=\"thold\" VALUE=\"$thold\"><INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Moderate\"></FORM>"; +} + +function displayControlBlock($sid, $title, $thold, $mode, $order) { + global $user, $theme; + dbconnect(); + $query = mysql_query("SELECT sid FROM comments WHERE sid = $sid"); + + if (!$query) $count = 0; else $count = mysql_num_rows($query); + if (!isset($thold)) $thold = 0; + + ?> + <TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="2"> + <TR> + <TD ALIGN="center" BGCOLOR="<? echo "$theme->bgcolor2"; ?>"><FONT COLOR="<? echo "$theme->bgcolor1" ?>" SIZE="+1"><B>Comment control</B></FONT></TD> + </TR> + <TR> + <TD ALIGN="center" BGCOLOR="<? echo "$theme->bgcolor1"; ?>"> + <FORM METHOD="get" ACTION="article.php"> + <FONT SIZE="2"> + <SELECT NAME="thold"> + <OPTION VALUE="-1" <? if ($thold == -1) { echo "SELECTED"; } ?>>Threshold: -1 + <OPTION VALUE="0" <? if ($thold == 0) { echo "SELECTED"; } ?>>Threshold: 0 + <OPTION VALUE="1" <? if ($thold == 1) { echo "SELECTED"; } ?>>Threshold: 1 + <OPTION VALUE="2" <? if ($thold == 2) { echo "SELECTED"; } ?>>Threshold: 2 + <OPTION VALUE="3" <? if ($thold == 3) { echo "SELECTED"; } ?>>Threshold: 3 + <OPTION VALUE="4" <? if ($thold == 4) { echo "SELECTED"; } ?>>Threshold: 4 + <OPTION VALUE="5" <? if ($thold == 5) { echo "SELECTED"; } ?>>Threshold: 5 + </SELECT> + <SELECT NAME="mode"> + <OPTION VALUE="nocomments" <? if ($mode == 'nocomments') { echo "SELECTED"; } ?>>No comments + <OPTION VALUE="nested" <? if ($mode == 'nested') { echo "SELECTED"; } ?>>Nested + <OPTION VALUE="flat" <? if ($mode == 'flat') { echo "SELECTED"; } ?>>Flat + <OPTION VALUE="threaded" <? if (!isset($mode) || $mode=='threaded' || $mode=="") { echo "SELECTED"; } ?>>Threaded + </SELECT> + <SELECT NAME="order"> + <OPTION VALUE="0" <? if (!$order) { echo "SELECTED"; } ?>>Oldest first + <OPTION VALUE="1" <? if ($order==1) { echo "SELECTED"; } ?>>Newest first + <OPTION VALUE="2" <? if ($order==2) { echo "SELECTED"; } ?>>Highest scoring first + </SELECT> + <INPUT TYPE="hidden" NAME="sid" VALUE="<? echo "$sid"; ?>"> <INPUT TYPE="submit" VALUE="Refresh"> + <? + if (isset($user)) echo "<BR><CENTER><INPUT TYPE=\"checkbox\" NAME=\"save\"> Save preferences</CENTER>"; + ?> + </FONT> + </FORM> + </TD> + </TR> + <? + $result = mysql_query("SELECT COUNT(tid) FROM comments WHERE sid = $sid AND score < $thold"); + if ($result && $number = mysql_result($result, 0)) { + ?> + <TR> + <TD ALIGN="center" BGCOLOR="<? echo "$theme->bgcolor2"; ?>"><SMALL><FONT COLOR="<? echo "$theme->fgcolor2"; ?>">There are at least <? echo $number; ?> comments below your threshold.</FONT></SMALL></TD> + </TR> + <? + } + ?> + </TABLE> +<? +} + +function displayKids ($tid, $mode, $order = 0, $thold = 0, $level = 0, $dummy = 0) { + global $user, $cookie, $theme; + include "config.inc"; + $comments = 0; + cookiedecode($user); + + $result = mysql_query("SELECT tid, pid, sid, date, name, email, url, host_name, subject, comment, score, reason FROM comments WHERE pid = $tid ORDER BY date, tid"); + + if ($mode == 'nested') { + while (list($r_tid, $r_pid, $r_sid, $r_date, $r_name, $r_email, $r_url, $r_host_name, $r_subject, $r_comment, $r_score, $r_reason) = mysql_fetch_row($result)) { + if ($r_score >= $thold) { + if ($level && !$comments) { + echo "<UL>"; + $tblwidth -= 5; + } + $comments++; + + $link = "<A HREF=\"comments.php?op=reply&pid=$r_tid&sid=$r_sid&mode=$mode&order=$order&thold=$thold\">reply to this comment</A>"; + + $theme->comment($r_name, $r_subject, $r_tid, $r_date, $r_url, $r_email, $r_score, $r_reason, $r_comment, $link); + + displayKids($r_tid, $mode, $order, $thold, $level + 1, $dummy + 1); + } + } + } elseif ($mode == 'flat') { + while (list($r_tid, $r_pid, $r_sid, $r_date, $r_name, $r_email, $r_url, $r_host_name, $r_subject, $r_comment, $r_score, $r_reason) = mysql_fetch_row($result)) { + if ($r_score >= $thold) { + if (!eregi("[a-z0-9]",$r_name)) $r_name = $anonymous; + if (!eregi("[a-z0-9]",$r_subject)) $r_subject = "[no subject]"; + + $link = "<A HREF=\"comments.php?op=reply&pid=$r_tid&sid=$r_sid&mode=$mode&order=$order&thold=$thold\">reply to this comment</A>"; + + $theme->comment($r_name, $r_subject, $r_tid, $r_date, $r_url, $r_email, $r_score, $r_reason, $r_comment, $link); + } + displayKids($r_tid, $mode, $order, $thold); + } + } else { + echo "ERROR: we should not get here!"; + } + + if ($level && $comments) { + echo "</UL>"; + } +} + +function displayBabies ($tid, $level = 0, $dummy = 0, $thread) { + global $datetime, $theme, $user, $cookie; + + include "config.inc"; + + $comments = 0; + $result = mysql_query("SELECT tid, pid, sid, date, name, email, url, host_name, subject, comment, score, reason FROM comments WHERE pid = $tid ORDER BY date, tid"); + + if ($level == 0) $thread = ""; + + while (list($r_tid, $r_pid, $r_sid, $r_date, $r_name, $r_email, $r_url, $r_host_name, $r_subject, $r_comment, $r_score, $r_reason) = mysql_fetch_row($result)) { + if ($level && !$comments) { + $thread .= "<UL>"; + } + + $comments++; + if (!eregi("[a-z0-9]",$r_name)) { $r_name = $anonymous; } + if (!eregi("[a-z0-9]",$r_subject)) { $r_subject = "[no subject]"; } + + if ($user) { + ### Make sure to respect the user preferences: + $thread .= "<LI><A HREF=\"comments.php?op=showreply&tid=$r_tid&pid=$r_pid&sid=$r_sid"; + if (isset($cookie[4])) { $thread .= "&mode=$cookie[4]"; } else { $thread .= "&mode=threaded"; } + if (isset($cookie[5])) { $thread .= "&order=$cookie[5]"; } else { $thread .= "&order=0"; } + if (isset($cookie[6])) { $thread .= "&thold=$cookie[6]"; } else { $thread .= "&thold=0"; } + $thread .= "\">$r_subject</A> by $r_name <FONT SIZE=\"2\">(". formatTimestamp($r_date) .")</FONT></LI>"; + } + else { + $thread .= "<LI><A HREF=\"comments.php?op=showreply&tid=$r_tid&pid=$r_pid&sid=$r_sid&mode=threaded&order=1&thold=0\">$r_subject</A> by $r_name <FONT SIZE=\"2\">(". formatTimestamp($r_date) .")</FONT></LI>"; + } + displayBabies($r_tid, $level + 1, $dummy + 1, &$thread); + } + + if ($level && $comments) { + $thread .= "</UL>"; + } + + return $thread; +} + +function displayTopic ($sid, $pid = 0, $tid = 0, $mode = "threaded", $order = 0, $thold = 0, $level = 0, $nokids = 0) { + global $user, $cookie, $theme, $functions; + + ### include required files: + if ($functions) { + include "config.inc"; + } + else { + include "functions.inc"; + include "theme.inc"; + $theme->header(); + } + + ### ensure default value: + if (!isset($pid)) $pid = 0; + + ### connect to database: + dbconnect(); + + $count_times = 0; + cookiedecode($user); + + $q = "SELECT tid, pid, sid, date, name, email, url, host_name, subject, comment, score, reason FROM comments WHERE sid = $sid AND pid = $pid"; + + if ($mode == 'threaded' || mode == 'nested') { + if ($thold != "") { + $q .= " AND score >= $thold"; + } else { + $q .= " AND score >= 0"; + } + } + + if ($order == 1) $q .= " ORDER BY date DESC"; + if ($order == 2) $q .= " ORDER BY score DESC"; + + $res = mysql_query("$q"); + + $num_tid = mysql_num_rows($res); + + displayControlBlock($sid, $title, $thold, $mode, $order); + + moderate_1(); + + while ($count_times < $num_tid) { + list($tid, $pid, $sid, $date, $name, $email, $url, $host_name, $subject, $comment, $score, $reason) = mysql_fetch_row($res); + if ($name == "") { $name = $anonymous; } + if ($subject == "") { $subject = "[no subject]"; } + + ### Dynamically generate the link: + if ($pid != 0) { + list($erin) = mysql_fetch_row(mysql_query("SELECT pid FROM comments WHERE tid=$pid")); + $link = "<A HREF=\"comments.php?sid=$sid&pid=$erin&mode=$mode&order=$order&thold=$thold\">return to parent</A> | <A HREF=\"comments.php?op=reply&pid=$tid&sid=$sid&mode=$mode&order=$order&thold=$thold\">reply to this comment</A>"; + } + else { + $link = "<A HREF=\"comments.php?op=reply&pid=$tid&sid=$sid&mode=$mode&order=$order&thold=$thold\">reply to this comment</A> "; + } + + if ($mode == "threaded") { + $thread = displayBabies($tid, $mode, $order, $thold, $level); + $theme->comment($name, $subject, $tid, $date, $url, $email, $score, $reason, $comment, $link, $thread); + } + else { + $theme->comment($name, $subject, $tid, $date, $url, $email, $score, $reason, $comment, $link); + displayKids($tid, $mode, $order, $thold, $level); + } + + echo "</UL>"; + echo "</P>"; + $count_times += 1; + } + + moderate_3($sid, $mode, $order, $thold); + + if ($pid == 0) return array($sid, $pid, $subject); + else $theme->footer(); +} + + +function reply($pid, $sid, $mode, $order, $thold) { + include "functions.inc"; + include "theme.inc"; + + global $user, $cookie; + dbconnect(); + + $theme->header(); + + if ($pid != 0) { + list($date, $name, $email, $url, $subject, $comment, $score) = mysql_fetch_row(mysql_query("SELECT date, name, email, url, subject, comment, score FROM comments WHERE tid = $pid")); + } else { + list($date, $subject, $comment, $name) = mysql_fetch_row(mysql_query("SELECT time, subject, abstract, informant FROM stories WHERE sid = $sid")); + } + + ### Pre-process the variables: + if ($comment == "") $comment = $comment; + if ($subject == "") $subject = "[no subject]"; + if ($name == "") $name = $anonymous; + + ### Display parent comment: + echo "<TABLE WIDTH=\"100%\" BORDER=\"0\">"; + if ($email) { + echo " <TR BGCOLOR=\"$theme->bgcolor1\"><TD><FONT COLOR=\"$theme->hlcolor1\"><B>$subject</B><BR>by <A HREF=\"mailto:$email\">$name</A> <B>($email)</B> on ". formatTimestamp($date) ."</FONT></TD></TR>"; + } + else { + echo " <TR BGCOLOR=\"$theme->bgcolor1\"><TD><FONT COLOR=\"$theme->hlcolor1\"><B>$subject</B><BR>by $name on ". formatTimestamp($date) ."</FONT></TD></TR>"; + } + echo " <TR BGCOLOR=\"$theme->bgcolor2\"><TD>$comment</TD></TR>"; + echo "</TABLE>"; + + if (!isset($pid) || !isset($sid)) { exit(); } + if ($pid == 0) { + list($subject) = mysql_fetch_row(mysql_query("SELECT subject FROM stories WHERE sid = $sid")); + } + else { + list($subject) = mysql_fetch_row(mysql_query("SELECT subject FROM comments WHERE tid = $pid")); + } + + ### Build reply form: + echo "<FORM ACTION=\"comments.php\" METHOD=\"post\">"; + + echo "<B>Your name:</B><BR> "; + if ($user) { + cookiedecode($user); + echo "<A HREF=\"account.php\">$cookie[1]</A> <FONT SIZE=\"2\">[ <A HREF=\"account.php?op=logout\">logout</A> ]</FONT>"; + } + else { + echo "$anonymous"; + $postanon = 2; + } + echo "<BR><BR>"; + + echo "<B>Subject:</B><BR>"; + if (!eregi("Re:",$subject)) $subject = "Re: $subject"; + // Only one 'Re:' will just do fine. ;) + echo "<INPUT TYPE=\"text\" NAME=\"subject\" SIZE=\"60\" MAXLENGTH=\"60\" VALUE=\"$subject\">"; + echo "<BR><BR>"; + + if ($user) { + $userinfo = getusrinfo($user); + echo "<TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"comment\">$userinfo[signature]</TEXTAREA><BR>"; + echo "<INPUT TYPE=\"checkbox\" NAME=\"postanon\"> Post this comment anonymously."; + echo "<BR><BR>"; + } + else { + echo "<TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"comment\"></TEXTAREA>"; + echo "<BR><BR>"; + } + + echo "<INPUT TYPE=\"hidden\" NAME=\"pid\" VALUE=\"$pid\">"; + echo "<INPUT TYPE=\"hidden\" NAME=\"sid\" VALUE=\"$sid\"><INPUT TYPE=\"hidden\" NAME=\"mode\" VALUE=\"$mode\">"; + echo "<INPUT TYPE=\"hidden\" NAME=\"order\" VALUE=\"$order\"><INPUT TYPE=\"hidden\" NAME=\"thold\" VALUE=\"$thold\">"; + echo "<INPUT TYPE=submit NAME=op VALUE=\"Preview comment\"> <INPUT TYPE=submit NAME=op VALUE=\"Post comment\"> <SELECT NAME=\"posttype\"><OPTION VALUE=\"exttrans\">HTML to text<OPTION VALUE=\"html\">HTML-formatted<OPTION VALUE=\"plaintext\" SELECTED>Plain text</SELECT></FORM>"; + + echo "<FONT SIZE=\"2\">Allowed HTML-tags:<BR>"; + for ($i=0; $i < sizeof($AllowableHTML); $i++) { + if (!eregi("/",$AllowableHTML[$i])) echo " <$AllowableHTML[$i]>"; + } + + $theme->footer(); +} + +function replyPreview ($pid, $sid, $subject, $comment, $postanon, $mode, $order, $thold, $posttype) { + include "functions.inc"; + include "theme.inc" ; + + global $user, $cookie, $bgcolor1, $bgcolor2; + + cookiedecode($user); + $subject = stripslashes($subject); + $comment = stripslashes($comment); + + $theme->header(); + + ### Display preview: + echo "<TABLE WIDTH=\"100%\" BORDER=\"0\">"; + if ($user) { + echo " <TR BGCOLOR=\"$bgcolor1\"><TD><B>$subject</B><BR>by $cookie[1].</TD></TR>"; + } + else { + echo " <TR BGCOLOR=\"$bgcolor1\"><TD><B>$subject</B><BR>by $anonymous.</TD></TR>"; + } + + if ($posttype == "exttrans") { + echo " <TR BGCOLOR=\"$bgcolor2\"><TD>". nl2br(htmlspecialchars($comment)) ."</TD></TR>"; + } + elseif ($posttype == "plaintext") { + echo " <TR BGCOLOR=\"$bgcolor2\"><TD>". nl2br($comment) ."</TD></TR>"; + } + else { + echo " <TR BGCOLOR=\"$bgcolor2\"><TD>$comment</TD></TR>"; + } + echo "</TABLE>"; + + ### Build reply form: + echo "<FORM ACTION=\"comments.php\" METHOD=\"post\">"; + + echo "<B>Your name:</B><BR> "; + if ($user) { + cookiedecode($user); + echo "<A HREF=\"account.php\">$cookie[1]</A> <FONT SIZE=\"2\">[ <A HREF=\"account.php?op=logout\">logout</A> ]</FONT>"; + } else { + echo "$anonymous"; + $postanon = 2; + } + echo "<BR><BR>"; + + echo "<B>Subject:</B><BR>"; + if (!eregi("Re:",$subject)) $subject = "Re: $subject"; // one Re: will do ;) + echo "<INPUT TYPE=\"text\" NAME=\"subject\" SIZE=\"60\" MAXLENGTH=\"60\" VALUE=\"$subject\">"; + echo "<BR><BR>"; + + $userinfo = getusrinfo($user); + echo "<TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"comment\">$comment</TEXTAREA>"; + if ($user) { + if ($postanon) echo "<BR><INPUT TYPE=\"checkbox\" NAME=\"postanon\" CHECKED> Post this comment anonymously."; + else echo "<BR><INPUT TYPE=\"checkbox\" NAME=\"postanon\"> Post this comment anonymously."; + } + echo "<BR><BR>"; + + echo "<INPUT TYPE=\"hidden\" NAME=\"pid\" VALUE=\"$pid\">"; + echo "<INPUT TYPE=\"hidden\" NAME=\"sid\" VALUE=\"$sid\"><INPUT TYPE=\"hidden\" NAME=\"mode\" VALUE=\"$mode\">"; + echo "<INPUT TYPE=\"hidden\" NAME=\"order\" VALUE=\"$order\"><INPUT TYPE=\"hidden\" NAME=\"thold\" VALUE=\"$thold\">"; + echo "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Preview comment\"> "; + echo "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Post comment\"> "; + echo "<SELECT NAME=\"posttype\">"; + if ($posttype == "exttrans") echo " <OPTION VALUE=\"exttrans\" SELECTED>HTML to text"; + else echo " <OPTION VALUE=\"exttrans\">HTML to text"; + if ($posttype == "html") echo " <OPTION VALUE=\"html\" SELECTED>HTML-formatted"; + else echo " <OPTION VALUE=\"html\">HTML-formatted"; + if ($posttype == "plaintext") echo " <OPTION VALUE=\"plaintext\" SELECTED>Plain text"; + else echo " <OPTION VALUE=\"plaintext\">Plain text"; + echo "</SELECT>"; + echo "</FORM>"; + + echo "<FONT SIZE=\"2\">Allowed HTML-tags:<BR>"; + for ($i=0; $i < sizeof($AllowableHTML); $i++) { + if (!eregi("/",$AllowableHTML[$i])) echo " <$AllowableHTML[$i]>"; + } + + $theme->footer(); +} + +function postComment($postanon, $subject, $comment, $pid, $sid, $host_name, $mode, $order, $thold, $posttype) { + global $user, $userinfo, $cookie; + include "functions.inc"; + include "config.inc"; + dbconnect(); + + $subject = FixQuotes($subject); + $comment = FixQuotes($comment); + $author = FixQuotes($author); + + if ($posttype == "exttrans") $comment = nl2br(htmlspecialchars($comment)); + elseif($posttype == "plaintext") $comment = nl2br($comment); + else $comment = $comment; + + if (($user) && (!$postanon)) { + getusrinfo($user); + $name = $userinfo[uname]; + $email = $userinfo[femail]; + $url = $userinfo[url]; + $score = 1; + } else { + $name = ""; + $email = ""; + $url = ""; + $score = 0; + } + $ip = getenv("REMOTE_ADDR"); + + ### Check for fake threads: + $fake = mysql_result(mysql_query("SELECT COUNT(*) FROM stories WHERE sid = $sid"), 0); + + ### Check for duplicate comments: + $duplicate = mysql_result(mysql_query("SELECT COUNT(*) FROM comments WHERE pid = '$pid' AND sid = '$sid' AND subject = '$subject' AND comment = '$comment'"), 0); + + if ($fake != 1) { + include "theme.inc"; + $theme->header(); + $theme->box("fake comment", "fake comment: $fake"); + $theme->footer(); + } + elseif ($duplicate != 0) { + include "theme.inc"; + $theme->header(); + $theme->box("duplicate comment", "duplicate comment: $duplicate"); + $theme->footer(); + } + else { + ### Add comment to table: + $reason = (int) sizeof($comments_meta_reasons) / 2; + mysql_query("INSERT INTO comments (tid, pid, sid, date, name, email, url, host_name, subject, comment, score, reason) VALUES (NULL, '$pid', '$sid', now(), '$name', '$email', '$url', '$ip', '$subject', '$comment', '$score', '$reason')"); + + ### Compose header: + if ($user) { + $header = "article.php?sid=$sid"; + if (isset($cookie[4])) { $header .= "&mode=$cookie[4]"; } else { $header .= "&mode=threaded"; } + if (isset($cookie[5])) { $header .= "&order=$cookie[5]"; } else { $header .= "&order=0"; } + if (isset($cookie[6])) { $header .= "&thold=$cookie[6]"; } else { $header .= "&thold=1"; } + } + else { + $header .= "article.php?sid=$sid&mode=threaded&order=1&thold=0"; + } + header("Location: $header"); + } +} + +function moderate($tid, $meta_value = 0) { + include "config.inc"; + if ($meta_value != -1) { + ### Compose query: + $query = "UPDATE comments SET"; + if ($meta_value > (sizeof($comments_meta_reasons) / 2)) { + $query .= " score = score + 1, reason = $meta_value WHERE tid = $tid"; + } + elseif ($meta_value < ((sizeof($comments_meta_reasons) / 2) - 1)) { + $query .= " score = score - 1, reason = $meta_value WHERE tid = $tid"; + } + else { + $query .= " reason = $meta_value WHERE tid = $tid"; + } + + ### Perform query: + mysql_query("$query"); + } +} + +switch($op) { + case "reply": + reply($pid, $sid, $mode, $order, $thold); + break; + case "Preview comment": + replyPreview($pid, $sid, $subject, $comment, $postanon, $mode, $order, $thold, $posttype); + break; + case "Post comment": + postComment($postanon, $subject, $comment, $pid, $sid, $host_name, $mode, $order, $thold, $posttype); + break; + case "Moderate": + include "functions.inc"; + dbconnect(); + + while (list($name, $value) = each($HTTP_POST_VARS)) { + if (eregi("meta", $name)) { + ### extract comment id (tid): + $info = explode(":", $name); + moderate($info[1], $value); + } + } + + Header("Location: article.php?sid=$sid&mode=$mode&order=$order&thold=$thold"); + break; + case "showreply": + displayTopic($sid, $pid, $tid, $mode, $order, $thold); + break; + default: + displayTopic($sid, $pid, $tid, $mode, $order, $thold); +} + +?> \ No newline at end of file diff --git a/config.inc b/config.inc new file mode 100644 index 0000000000000000000000000000000000000000..f9cbaae5220c732b3b80ad390f0c5cd1d435c23f --- /dev/null +++ b/config.inc @@ -0,0 +1,71 @@ +<?PHP + +# +# MySQL settings: +# +$dbhost = "zind.net"; +$dbuname = "dries"; +$dbpass = "Abc123"; +$dbname = "dries"; + +# +# Name of the site +# +$sitename = "drop.org"; + +# +# Contact information: +# The contact information will be used to send out automated mails +# to users, account holders or visitors. +$contact_email = "droppies@zind.net"; +$contact_signature = "Kind regards,\n\n-- the drop.org crew\nhttp://www.drop.org/"; + +# +# Notify information: +# The notify information will be used to send out automated mails +# for internal purpose. +# +$notify_email = $contact_email; +$notify_subject = "submission: "; +$notify_message = "New submission: '$subject'\n\n$story"; +$notify_from = "droppies@zind.net"; + +# +# Comment meta reasons: +# The comment meta reasons are the various meta reasons used to +# moderate comments. The array should always be 'balanced': that +# the number of good reasons should equal the number of bad reason +# and those should be ordered from bad to good. +# +$comments_meta_reasons = array('Off topic', 'Redundant', 'Insightfull', 'As is', 'Interesting', 'Informative', 'Funny'); + +# +# Categories: +# +$categories = array('Announcements', 'Coding', 'Geeking', 'Drop.org', 'Gaming', 'Girls', 'Graphics', 'Hardware', 'Humor', 'Internet', 'Music', 'Movies', 'Politics', 'Science', 'Software', 'Space', 'Webdesign', 'Quickies'); + +# +# Notify: +# Set to '1' to receive an e-mail when news has been submitted +# through submit.php +# +$notify = 1; + +# +# Allowed HTML tags: +# +$allowableHTML = array('B','/B','I','/I','P .*','P','/P','A .*','/A','LI','OL','/OL','UL','/UL','EM','/EM','BR','STRONG','/STRONG','BLOCKQUOTE','/BLOCKQUOTE','HR','DIV .*','DIV','/DIV','TT','/TT'); + +# +# Name of the 'anonymous' user account: +# +$anonymous = "Anonymous Chicken"; + +# +# Debug flag: +# Set to '1' if you are using Windows so the engine won't try +# to send out mails and such. When using Unix or Linux, set +# to '0' +$system = 0; + +?> \ No newline at end of file diff --git a/drop.tar.gz b/drop.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e05966d0ed4f15c4276db3da4d164eadfeaae27f --- /dev/null +++ b/drop.tar.gz @@ -0,0 +1,592 @@ +‹Ð6$9�drop.tar�ì<{ÚF¶ý×þ•-Ð`À¯dK€,‰qã]¿ÖÁ›îÚ^ÿ@k¡¡’0q·¹Ÿýžsæ! „°“v»½¿KH£™9gÎœ9oqbßñ¡ëñ¯~ÅÏv½þâÅûŠ1öòeú›>/·wð¿úÞ˽—ûÛ»Œm×_¼ÜÿŠÕM¤ôgFvÀØWN ¦yýÖ=ÿ~.Ï:½nk6uìˆW£ÑææÀã¶ßØÜ&lkȾývÐíüù¬Ë"à››}{p7›Âó?ñÁX0k‹}Ï}Ø‘ëX¡$',³jµj™>½±2 sßö<6¶CÖçÜgƒ€P‡ ¿a±v<†!6¬nÓà.øDÜ#0á9<`v0»÷<Ô%Ú¸]U€Xý”Ú¡¾8öüÝ9C¾7öñ@ö-4Ž~r§¦îÓ…¹Ym,&¼æ.k’2Iplðp¬Qd@_Ì™}o»žÝ÷8³#6Ž¢i£V›ÏçUšW£Z@‚ˆŒ•NÞÿõ˜I8ìô¬Ç\àÍîTËÖçí¿=ˆ™U§ã_»óÏÿþöþÞ.ÿ—»û{Û/^ÂùßÞÛßûÿóÿŸø4_ongþ r…Ï|ûÞÙxY*³³Möº½ÉXóœuŽ¾?mYîG<°ÚW¬Ùaï.º‡-+Á?Vû2„óèúCѬuÚìçÌ^¯Å´Å7š…8S®Øì Ãð¸Yí·°kbâþÄÞOíÄИL’Cñ®ê‰‘˜EVû˜¾©óM³v”Ú}JPïÞö\”[9¾T˜ùö„WXOà¼A7˜_ý5ûÜá-{0ÛwßÂNÌvazºCV*=Óƒþ™•äu«eYò>Œ‚`*B ¨ÈŠe£uùðøÈ-Yÿ¼º½®Ö·¾³·~Úºyþ§Ò•¼¾¹2m×Õòó+lú÷Ne÷SÁ2—ˬÀªX‹Yј³pÊîÐå‹ØJ¹IT›o.ÚÖ«x„œZ�]Ç@KÖÕ?xgë€ÐíÖUQ#VC7„+Ê®Å<€H÷K6ÛÞϧÞz°¨Ë„`žðG ü;–Æ<¤E4¶}€Ác;°p\ªAFoI©•.¡ðwà[LQŠ�.mgâúúÛ$U»Ïç!|9Üž|pàbMËeÚ5E·ÇàÛƃ{Ѐ[š+çcÂ<î}ÆÙÌwœÙȨN |Ÿ¢RY/tòþèÝú³Ém 桺ýqƃ‡’rú2Bô£˜¨Ó´È!zc²âèG,ÉöÀœpÀ̸ã~LóG BܾŒŠ<mEyÖ¢²|$4B¸é!0‚¤6ƒûh�Gâ<@±¤IKŠŸÛa8S*8.=±ƒ9UíUlÆ-¹öEcxüìqÃw(t›D·a�ÛX*9bfGyâ¹^*Ê?´u…á´5^ô“p+Ì +,ù8±Ù"« .’}ÊÄEó1<2NãZfÍ$ž%Ér'Œ¢H0›!z@þp +§Øõ’á4¨ë0äü®ÈU`%´z…pÙúc™“³ây31ÒøÁ,@¼3ÄAÍ3âQHóìÕ¿{Q~µÁ¨¹€=ZQàNJ=Ôäî0#rEÏÙÒ*a™$ùQÌnµhNö þ ž9BÉñ€W)®€ã5tƒÉ)Ÿ£‚ÍÐ+LÛÌÒƒÂ*4ÉC Q&Ü4èv«=…Iåâ)ð pÏ}¦7r¸@e«ù¦ÝÅfí Øí4‰¥—̽'öýÀ §žýÀ”¦%ÝLÈðh¤æ¼lw2º4k—mòÍËãvóø¨¥@C‰Àf ñÁ‚RU˜ËÇ5lÉý%+>Íó‹ÖyÛ;:;M[6ì¤Û{wvв@a€) »³æÑéùeõþ~ÞmYc×q¸o±ÓÎ Üû[çøÑÝ@+Þ’Z¯�ècæ!„3ç‘OÒó Mð_r¾pÖŸ¸‘žOLÍdoÉûÒ{ 'iÖòì¹}šW† µ$¯$ÙsHçî?À)Eƒð¼�£.IM)`Ïg^ÏS2ßõKä';RÚŸÏÀ,^WŠÅŠV>-ú©o^±²]Ç»:ý¡ýX”ž/–øH=S¸è#CþœÄ +Ή/Jå*³Ìªš6P›1e>±ô)¢ƒ>€Z™°V‹më™ÕÜÖßÅ,`Zœ€2j�s´ <žfÚx€¶~¯3Ì_×ÿFªeI˜opšˆº;ŽW×d»>YÆ@T0|üg„ЄÇBa|@ÙB¸žÄb`¯&p>ÁŠGG¨ƒx8iö ŸôÑËWr`)xÎgž÷Pe¬'Ð#ßZî/Úg€Š´Ñh-Њ�T ¡Ã<1‡Î=nðÐFÕ„ai€DβŒ>eîxõÚ¿öûEùCLYZêP£Þ‘†ä]O¡‘ÄNnvXÿÁhFPv wIãMrøýhnÊ*²Géé ›ãÂd@,êG`•Þ†îÈ·AépÃÿ‚³Õ²´Èuxx‡´v³¦?®Iy$3¸bv¬†C0¨`¡¤¢Â['ð̓†`j«2`´{àò:˯–Ùx Š»©ñ 8€Å µåcÜM¢I�íÄžZ?¨™ñˆ( ñ¦ Ô>ƒ=&ÚÁ¹{Ï%Ý[ieâž +Ÿež!8´'žëßé#BH™£'dc)‹L†üj<<;#OôátðaI-î\.ec¶ô{ß=î¾í±¡Ú·Y�ÿõ]Qa†!ØáÅÙ‰’ŒÞu/ºÊRo±Ø('ñª2 †<Œoí °JZà.ðWbæ�ã:`ùàPšäsÌ…NK/÷jûfÑ9oàœ®ä3¸ðö·žŒw`A@éAv?z7Û`�÷g‘<UÂ'?‡‡U¬I=§lAßÃÞ!©˜"D¶¶Ã¨ÊšP)ü‘œ –\åsä(Áî\Ï£.MòŠ:ž=n H!üFœ‰ zZÅ(„1±ÈÙ]pvŒÚ‘*â›oXÉlÛìý :Âq‹äŠ…FàŽ›%[¯×ysÜeŽzï€ÛÁ…ø°¹›â§( Ó#À,é¨@Òµ¸£qc`;¨/i¥Zï�;a£6ätk Æ_û —ÇX¦U~Pž†iÎnz2èžnÀ3œ©³Ï€‹aNÏ‹Óšõv¥2ÉX²Úµu«F³O6Db*‘Qs® >‹Dc PŠ"ªˆB–g»t‚ðP‡S{²ÇC1ÆÒö…¶˜L=Áy‚ýP-7kG_@ά<–¢o\‘ENâ÷§ÓgK¡aU™ïíôƒ¥©«Öç¯w ʚŦü^‹ø_pÙñœëoÌ’`ÄÇB¨‘kk—IÙ £T™ÅçíS‘²ãä ÚE)Q•ÈùNð¯aJ“avº*=sC0›U'-º$ócdôe®“µRËféYå“ó§¸dHžœ&ÝÛîi¯‹d;>:ýK»ùn·Ý™Á,~ä$‰°;wž5kðè"»ÕÔ0ØBª‘7gÝ‹–U·ØÛîññyçààèôû–µ#ïߟwÞÒ=<—‡ŽtX‘Q¤¯j¸Eg)4·Z}EbbïîþÁú\‡ÿµº0dë‹%‹Ü«bô¢ZеUG–]q–´òü#vºÔD,‡><œ7þÇ-ƒpûþèx»½×'Ž»§ß¿ëaÃ>Â5g`ÕaÒîò* Ú‹ˆKw/®´vráÊ}1oÏpS±‰¤€ÊpEŠX\KB§a¨slÇáuV ûÿælr(‚‘ˆ”c¬hûú¿ŸmâÝÚÅç‡g§==…ܾö!°b¦––J¤ËæرÏÉw”¶/:T^t—<»¹Ó“V¥½€Hüªœ†>*‹Àï”ã.TæŸÏ‰ŠÿGSîÔ%§Œ‘÷2È°ä~¾hürÆAó„ͦ_Â24fI¹iŒ¬]Ã$çx¡ƒ ¾&-ÛóÄœœK8[È!&É,@ž+÷†Uv$=PGøE«PM"|°ÎQ4šÇ&×¹ùxP m_ø1)mìŸìµh`ÒüüÝy¦y”ˆr‚õ“eüh#IÇ9Öš=+ÂK9K–¯ÄQiÉ%6YP’ø�~²oÉ¢ƒUNų¿ Ô¬#ÍWÿ6³*1âØz¾C²L`¥à;Bçk=“Ö²œçr6êÇÆâÞLÈšŒ0Wø³Óvž¸!´0YÊðª¤LX¡I©XkF±Kb®T„n cˆ1Æ÷¬nÂÈÆ°nhBuè7ÎP”QšÖîK(ôH‹GS”ñÛÛ‹3¬‰pZÎæ-0ÌŠðšJ(£â¨¬J+g‡ÓÐÞ/h˜Ž¨ +š`N*‰`½¦h}ÕyÐc*|)“‘Zcsƒ¹3_å¡SîN2¯R80¾ömvï†n$åêˆGÜ¿åÒ=9ëuoÁZ¿°ÊU‹•(�fÂa°5eŠÕþ#ï +QXÙÊ‹º>i¨DzQSe«²1È^�¦‘1»Tø<ÑŸÒ5¬„3 +âqöã",S0\A×A)h‡wäÑaô¢$#,U[0ÀõSúÊZ›Ý¿ ÀõY9—9Ìè�8º¤EdÄ" ¡Ã~§†DÁ,L[9bTØ%Š¥ÈóàÃêÂÌK!À¹òŠžOÒØqÀìÀIáQ•Û¸2òÇý¯Lÿ&¦(ÿ Eg‰€L�¤7ç—Ï"7òxßTj(ÆÌäˆ>ÇÏ5Ñ�䡘C³!<ÒZÅ.q}R*<P¬.à’R}) å¥Y + df®ƒt…•Y…K)að +ïƒ?›¨.Ðtê–@Y̽…§&ñE8 ¸6õé{bp‡ùÙ‹kIXP‘ý¾ò{·Ü' j)t›†F¦‘Ä¥aPiĘ4"$ ƒ…Š‹¶b^`ÂÊâöœmïïïïPý +«ÕØ6ÃÒݾ¨¾]?ÎP#Þéè�D�kù“tí^¼Ijƒôæ¨1›o‘áIyÖ9=`*%®rÕZ·,•A-d”PË_“Ñ!û)É 26î:7ºMѶbf¼Ò¸I´)R D”d‘'Ù •¥H–Ä»Q¸¾“GÞ:Òni°…·¶ýRYn«¼¤#ó'¨WkÛÊ8Í8ÿ-æ‚nÉÂ\kk,dõ4zôK¨ó€Òœ}’e)MËͧ{˜2| +òì‚j¾ÉÙ¼Q®J²ä]2‹ú´,YC%u0:0L +G²(Cv·žL€Ïf%à´Ï¦TtæÉP€6Ž“Ø-”ý¬Ás]¡AT¦:ž€é¨¬b™õóÁÌ PIcéª`\wà=4((†,=@¥ŽbéàIærí»EƒéqË>b½Ã'/XoM…b?ËKE÷@[óä•*jb?P¶ˆQ¶K6”4·É®_^øåÅ1ú(ºúûq¼8¼|VÄüު媸óŠõâcAQT#êä 1ªK«Óöd•(à-} ²\mt‰*`z¨‡HÄGY½be._çXig_–3ª:*äzÝz‹n‡}¸èœ·¬{7ˆ� Ø€}ƒu]œ}À+Í}WÀÚ²¨‚©!åãëY3Ï£J²C÷Q`OÇà%z)÷³ÚšbÞ€&Â'óðYNĪaÕ™;Š^Þë}ÜNïãlcþàû5£ëïÒFÓ0Æf¬Çhîb?fäÅâ(] jF€©íq´õá�ô=Û¿Ó£ÑÅÛÓéCÂWX&ÛÆy]ŸhCB0/S{a:×Y3X«¦ZY¡øiaŠ4á›ÉÈåªdLißOz»n•%ÃZ,©²EøÖ%2ª‘Ñö̽ú&Ï©ÀYPÚy1!¬ÚP¡.2Ge•†Uü÷½qÉ‹~?º,÷X±¯ƒ1I=O +ßP>TåÔA˜à–tU!¡!Ë)¤%±HÖ8ë*n…dF"ê×ïD€ˆÃ‚ºÈV/FŒñÍz…b•d£¤2S&Þ‚izè~ü+yñòù+ùøS<*¹]`¸ïˉ ²´/_@T–÷ûn³[V‰ª86è�Å0nê6`#i«x—6Ó©‹nỨÍ{×&dÒ8nœ_ÕEü¬øXòéçúëÞË ýNe )GƒP|d]˜ÚãG¤DEeQ%^ò>v-ƒ¤k‘hP®EÜ¢\‹„ª]‹Ä(ãZ$ÇI×B±üJ³fðÚ¯ÏPÙÔJ²Ï§Ç ©_Ú1y‚_²¡=“·Kè„cÜÀÞPöÁ‰ýÑÌ&ø� )0 ‘-\þHsXó±ûRVîn¾n3+8 +EK‚=\ruj%2ê!`’E2Nš€aÍsCI ÅX’’Ø +›Ï?N=ŠÒ0|3È<ÑLˆ‘¼RÁmÕ_±‚Ò_ ÃR²#<xþ<šRœšçW÷æY+)U +hžãŽ™,XzÐ5`ô*Bʦ´x¢ä[T¢˜íÚ 4PÊ·G¦G@7¥˜ˆÀÝ�¾¡šÚ˜ù1bRƒè¯tuTÅÅVLji²×*ó%Á'MÅ·dýI}ìÜ#1:äÜ3ù7’öo&Ñëµ$’ÒŒôd[_Ê54÷—ì4z’cî'Ð`Ìw}ñ1=+XhÀÁ‹e™Z¶ZmR›Ap€}pmÖõ)åHÌ[MÙ2‰ïu)°D¼9øPäWÇ.ò«tètÊÁ5Ò.Æ�$È,½Š=$¥³\å:®c,ÚËy³¡¹œ;WÊ\δ–åLh-«‰ÈZÖ±yáB‰#m,¯Î¾fʤ”¡lÂÏqÄY)‰8²¼D±±R]l¬Ô1)幑È+øz«¾nm¿’š7n©¿ÚØÜP·i[Qᓦ”ññÙÛ¿0ÊM¿×ÁÕ‹£^×Zê(!Cõ”Œm&¾,ƆšJêÒ´š¶¢2³ ¾‹ÚÈJhìšÆèò4< ùýZS›ùÁUI®‚É d[1VúÍëO®‚d×/Dž`Êdµ‘@¡B²i•kùBÇÔ,yÈ%0í!†û‹q×b,‹c])…ñ©0AºLp”*[Šºå¡Y†ž;åÌ~³æŽÆøfvÿdµmÌ¢É![ÍO,?(êÉsðê©.);A²B:ì®uÄdö,‡+¨C6[ÔSK\:Á«Q<óØ5Èšx{ÅÞÈySj~yÏç¹S﬙zgõÔïÜÑçFÙƒ y#—ʸ!%&óìsxžMã´2±ÕÚÊ¡ÅÖvü ‚j‘UØó8D¾v[—!ÖW¬Çðl*6°¦!Øšåå¬n{ ˜/˜©Ë‡º‚4Ô&؉¡šê7Š›’FbÏwd�>èn>ÐÝÕ@w×�Ý] t/èÞj {k€îºŸt5Ðý5@÷c ™>Co®Ò'ñË)Tº¢ŒWS/ìŽ|ìFAg‰}þ‚S„‘Æz%njÊÅÔ㦬Í;nÓ1C‰M?¯RíÈwIÁÂŽð§[ØT¸ÈÊKXΩ7Q¾<³g¢¦D'‘aɈƒy—æ y™T%˜"lF>Æ–¡c„Ã…l]6%þ/db^úeü&²Dü&]›c +stUN¢$Golfrá‘9…¥ßãÑ>”‚ƒ.”ºÄBíCÅMuöX/©V3eTKMZ±RâUQÇŸe]U,ššèªhÂÒ2&*¯‹ÉRl7wËñróBW~Øõ7ÂN†c3ã¥ùîÝï9Z¾¹¦zFùt!(’Á¸TSy�¨ÂR¿À&_[Ô%Ø2n×CúîU¢gÝRºLwV÷+ú«j}Õ;ÿwv2'Xøõ;Cy?ˆ’9Mêu5KV•ræ`Ml5.· >§î=‚|ÁÍЩ†.s3›LÔ ‘z_»D‚Ü{Ñ#¦f6eÇôÎó¿ì} `\U¹p]žÂ4I +Êêí:I™™ÌLf²µII“´‰¤MHR +ÒZnfn’¡3s§sg’¨ >P|®Epß*›»–UPÁ²(‹ D·"î"þßrÎ]fO7ôý±™¹÷ìç;ßv¾%>© é ´ÇãT%ˆ*2*3ô`‡9}»iVq()zmk`ÿÝ)ÏaSÌhˆù3ỜÒ3)ÔæOe¯µ~s>EdÌ>+qJ¿T矉oUÓ:ó°¦lˆÜ,¶Õµ¼ë¥ñYöCahô×Jñ_[B¡p+Åmim ƒAŒÿŠÿzP>ÌغJ ó…Ó÷G¼Í7ÎÓ½VÖ—–𣶫O×»M]oªOדþ½ì†9€ˆRÎ+PÇ,Ÿ@ô:,â†8lÙ˜)ý gʵlãöæà5˜0›Iàp;Ö¦¸¬QÊ˽7Šk›`gó9ÛÏNgÿG½ÎðÊS©¸g¸;ÿ”äñ5y¡Ý¦±Õ-Úà&X«´â›RêcãS¨Uóåð+ûøÒð•Ì‹à/=¹€C˜ùe½ÃÇÇL`(a6>1ËÞ9’{ÚëN»¿¿ÉìÌǽøÜ~oÑÜg%c¦G£_¾“¶óy±@†ÀÖ©™¬=«ZHDô ….¹ÉF.Ö3U^Y»fàLMhj܃7ÇrcqÍs°"žÐ춖¼Íª½¾ŒíQãÂfV¢–µõÚLn%Ò× +èly‰@ÑœÆ÷x6Ì·-›ê‘,YÔ*úÉUÞÏd‘ ’)N¬Ò€F õ›Ù»Éô3Û˜g@íø@*Ò6ãÛ0kN�Ö!×ãlÚbÀ[©ÄŸ2Õï0”n·£?šƒlLFáSôi-3×fd“"?úfç…Pd?í«z†‡Ð«þ¤h�ÿgó¡á‡ô5OÆc±„Và]žQcqÝ"›‰t™v5ô“]Ë«íÝÒÉÜcôz!‚d ³ÝâÍxïÌMË0Ã\UݹÖE«‘#¸l„ÃSN±¦IÔG¯”e–[’mÅ‹úê[qgÐ ++®›°šD8%¥6A«mk1+Âßrá/j£š7°¼@ÕSÿ^-¡¡!4Ž B™Cå3�6mUó‡ì¢#Rv¤Ý\Yè-ÏEv.*2ÇaR ÿ’Ã,¿’Åá¢o¤'g2@g ä:ü˶©t³•’=Rô<{@u¿3Œ›ÁÉÈP‚[Jææe4m#£ ‡%+›.ö³>6S ØL"²!rÕ.?S1‘VI8´ÁÓë «ã:2°ƒ0EaÕ ‚TÖÖ>-´pª46ž%ª³§elŽQtT1@Ý1^/À«L8ÂØìeìT7Ö7"Û§gäzÑk±yF™QUÜbÜ]+˜}`(‹§½è×áE »WIŽC0©\樢,n‹G˜Ó99)¼Žð”›øŒ6>®«™ÐЈµè”¦Å7I ;š©¼#ÊD¯q5žåÃ@®íhv`03‹s0».3¼´žH8††Ü]Ã:-LÉ! Àf©‰„„ì^@Ö/ _×Ñ%=qwàº×G¾²\ï2$±g1¬%îÓ„âié·q¶ŸÎ #S²ÜPqLð“Qçh”ôÀˆc¤CTU3:«e‹o6îžÚ¬JáÈ¢�-#Z‰Ñ˜/Ž*ÃÒ˜ér“ï,±9þ Åâ1™�c;UŸÃÂÜ'4 W…±¦%{ûi‚ºbßLM„R݇êî}¿6) »7‘á\uùœ|%FÙ_Šqà5‘9ñð‚Z4V䬻òkÁW[-®-ç³ÔNŸŒüâsì,ÑŠ®1ìÚ4¨)(P†Ï A[œFK¾~…X–æ\ºÈÌÈŽcëáå(=:ç•ýzyg/K9º¶_ïn³†.Ö¹añÕv7_ý‹ÃwàVN€˜öò«[–/[ËH™ mŽ,`[eÕü€òÿ$Y|+ð£À;N+I _%l$�EK¹sLH_Ž§÷&ütÚ0HÇö| Çåm7ZLÛ6ÙµØv·Ý(ÃÙ]µv À]‘h"lõ]–9‚Ëò© o"L¦Æb …˜àüBDå@OkFûFÆ”5cC’»¤ÊD õj<†Y¨eN@Ms惢·sOe5eáx™O(…Á*;gh6Ô¦&:ÍJ4ÛiX˜_£,ïç÷zôÌkàè+µHÀXŸßk8[ÀÏu4ûJ{íüzõ$x¿Ñ^‡2÷ë„9QÞ%¶*¼ÌB15·8\õTVê2„Ò’úóC')gOP, +‰³& X\‘«/Já3JHþvƒÉø�qfRœž#o¶àaå'D‘Ÿ”›æ1Û\✕Øzû‰c-)¸Ílž³yîÇ?otÂÎ6°<#.KÓ)s©Ë™¡”™‡d>/œ²à…±ößXÙî5l*CmºeuÜ sH¯Ü}À €a'õÌlåudÓ²ƒ6ˆÁÕcŠÂÿÙUÌN{�['ö-1»©7û©—•SH[¨½¸ŽÈeZƒV “xÚH¨Æz&‰ç¶r¥äQLÄ‚Rü\ô(0�Þu!:u»+-�•°šM÷6¾Íew^ì&uJãøV:4ŒgÊsr¬’¬ÚÊØ*9µ +='Gy‚U:sᲺ嚕ëµWC5C²€©,ÕqÌ,_¤oàÍá}ÖîIÇ~‚BÌ„÷mQQû XMâfMœ: +þ3šÏPg|ñ¬/ª'QÀ½1_–¢xˆ¾I-ëÃë3Ÿˆ‡è‹§|ªc!¯5ž<éKj‰Rï55kø�J}x3çÓsYŸ>åJS¶6ž.ß&Ó +4 t)ÿ£`é{Ä™-ãÑ!µtº!D„›4™Á:¥E˜w¾§t 'h«Bž4Ýs˜ø‹RÙ8Šq`¶õÓ•ß°pbÞê*ð=.º6|=†‰T÷Qä‘ÍäY«›K™¨;W*[Ç5gp ‡>{‘-üw‰GÕÍNÚ‰íÝì"–@'Üêö×u- +(•”X"{Tóâ“Ú’åt_ïÝœ‚!s˸™üO«Û°’3Íxž.ÈV)8U¨í”y×<¨‡¦ôJæÅò›6"•ý±y›‹º(tAZÁ»œ/Ò’’ ””Ô÷ws¨8Ì„Ùª©T_•.¸ì=Ú•Õ8+»*YÄD×ÁYtÄÆ9&yPl,C1þw\ßbdsX,sp¸ÕØNüªç®&«â®LÓübòÅ>0a8kÛ³ Léµ.¿ÀÅÍÄd”ÇGVM”ú¿Í«Ùû¶äîظ¢\iÎâߪbßöŠ{«À¼Í…w3Y7Ž?ĵâÚ׶\NÍ|¶§öoÆÌUËÉ CÌÜ¿%37‡à–ÌÎéùú®ÃË Î¸²ž|;Œ{ úÇYî²|š-RäØÊ+ÄlLæ<÷f«aòqe9{bÊšæÚ¯ÌDø9¥ÁÀmP¬uí*Mkµ”›^ér†›em\£ó.N—qèxÊàw·_†É÷»éì‘~˜1`è8åôBtÍ/˜êàW«w3·9Êf´¤>Y7h[DÊX4˜-¡°/¹x£[_Yi^HË9=”’2J s3ÇwIr×ù>Ñ`e¸!•á68+s¯´´’½aQ¡‚[öu™çÝ|b ë!ƒ õ»àVÂ×åCÌö4侮€rvh¿«+qçUÊ"æ`dâ`H$ùÿ’ˆ&E¶úŒò@F±æÿua%+ý”Z +°ìÿ?â‹IEþ}ä˜òrRzKK ¨jî∰ϳi¯Ô¼Ò¤ÊÈs¶²qÿsÐ:V! +̙ͷº/SÅÆ�ÿ› +ÅcÎH¶£ÎXcgÖ-LíäÀËâàÁ-‚ÞØx{Ûl¾5‹áfùœê^X¿å»ã”7Þ*ÅpÝÅ]•÷–›ÜOœÜ¡ûþC÷ýUpeûÊE ¤²=–ãó¥OìÁm-ÂKí&Â_™QÑØŸeŸfÐVÈ1ü;°sÖ"ªÚ{-¡³¶Ë¦+¬&õ K›ºƒ9±åx€9âúê®lãx +ŠÐSÓг° |Xš‚5ŒS…½9G;:qûM Ù惯K=WV ¢]ÿY´ëßäÖó€“Àåòâó%¤Œÿ1W/½œ;Á¤Ëµ½¡–#òªîÑæ,?%“¶ÒL0KSL[Q¢æ@ª¿êÚ×+© +7Q¢µük(E„¶—î°¶Ð<b-“Ié ~ÅÝ¡ˆ@CøLÏÐ3›û§¶%ž•É¸ç"ï«O C(E§€sTåg¿y\‰cÎnè$´îȹ¾l¼K¦š–5ã’^Ü3%/ƒKùäØ°©"´–ö€U…¢ Ê8E1êRvÿfu£Š—…åcn6–éZ–uqeMðÛ3ßƺ–©ÊTF›àÜUjvc.“hÊIŸàeZJMbCÜHz«é2šÐ—5©]{ÕCLKpóðÅÙº°I`ºÙ>ü“¡N¶škÖD‹FżûST£P´çõff5»7·¨Þ¯¦b‰JÁõb1&1Í [Zj2;?ÈnÐjcõ^©=öx+Ò`K~ƒ}c£ò�)Gu-®¬Ü,au• +*XØ$¤&ƒ![“ÁP^“ŽÕcêÇíèi“ŸCça>Sl¡Àyf™Ú‰3ëjfÁ9ð}Ћ¢áikÚ¿xÁ«°£…Êqsa‰èBܳãYñ˜Ã —ÙÃIÈg^1JáûDß9/}•ayétRÞÓ«øѪî@1ü[ƒ)ïêo³{üÛæF5§U®HA‹Œiæ|¸¬õ+hqž9¹cìóA,Œî)¡ ¯ªO舖MkÊÜ»•j_i@Y/*òb¤Ãƹ#q—Ô½WxO{^(v®‡ÉvÈ`z¶¯!B),\ÊGVÒÞÃ1ó›ùŸçU<¼�«œ‘Vb¡ÃKá!I“EÚb”[ìy» %¦Så¤ +G߯ô$âÑMû‰âîdAV'‘ùsöáX7ì˜Iü´9ó•B}JÔ†‘ò›Àƒò‘-¬|$’ϘÕà«Œn@Ðà±ö‹ñäáUò¹‡o•‘ïö|öÓðÉW›Í#°€ˆ››—o@§j2â#‡ù”ÑMÌøß²¬Ô#KçG*YÏßÃY½hÈŽ’-Ù±ä5d‹FQ²º=L^õ²¡8J6hS4›kjR&0ÑTv*£ç&§l…íñÍâ…®ô%;Ë7»u4q`Ý›JÉnÏëÐ3Ð-9{èEçh,£ËJÀQ´úþµ*¨ÞE‡P̶´D3ùÔΆì7×åW¤¸^ªHcûvÁR¸*v¾×ʪÒ=Û£2Ê.óÔåêJ±ÂB¬EEŠ ȶ²‘ýΗ”EØyIõ^…ÂL’D©0óÔ£(IñW~'’Î_äHÙÝf·Å”`ø©^F줒Ѳ¹LJ¶*’aQ†•Ò’z[b ¥ŠÃ\ÀRÑMÌ¡»»öc`K#'¾Ì¨¶ÝsY/´%Ë?l¯[µÊo&-µ‹øòYšê–Å©q#½´Ô¿•UG*÷_Cª!sˆÅYÇ +‡-}˜“@KIÌbžkÃö×>G)-’9Pù¹‘ŸaÜÐ2hB¢ì²E«ã›2 °;‚³*?«Ð³,TسýM™œ!tMôähUš‹ä¸´&û%2˜ûZ„Åo¶¸[Å>r|TaÚ\¤pÒÖó2•‰¹òSs9Ê;’å”d©I·âk‹Œ"ÿ9tþ“?‚èÐ@åóÿ(¡psXæÿ 6‡(ÿO8Ðz(ÿÏÁø[‚ø„™�›|°/Väï,;_^Q¤þ&=¥SÏ•ˆågîÉ©OÔia^$ҹĴ¨ÓìÙµªÈëäÍ‘Ô~;2:vÊ|Ž‚"æX5AžØ ibÑ4xÛ:—ù»%¼QKÑ�ó‘vägeìÈËÊØQ$+cG~VÆŽ‚¬ŒùY; +³2ŠÑÛÒQÎ;¯›FîöŠKØS”`$ ,O;Ê4ó�‚˜N̺‹äm4óÁ +f€J.Nà +È@Á?‹ihóðú/æÕçÅg7Â9yÖµWfe?‹¡j‘|"•dO§|dw˜³»\–»pu"¬§•A¥=îãz™AI¦0«&¢zBÏ„ �fà3'(ä£U¿šå¯¦Êw,7ÓÞÙ·}BbdàûêðÚ7ÞË4K„[ÉaÚÞÔ©W,*oqü@X„r»¢>9¥›Ž3v¼e¡c¶–ÈÿLGaZ·ýßGú¯´ +úŒ„áÿHÿCÍ‘Côÿ`|–-g¸ªµò/àu(?„s·ˆËÚô"´êÀÊLŠ +Ô)_˜Š´3!B]qPIê˜ÒK<Dݽ-´)+ð‹÷/‘—Yj/¡mI'hldÄk+@ÔDˆ?['ãÅ“õ4¸¡Ð?¥h\þ24LÊàLÃTä%p¥{M¯Âz°c./¬5EPÃb‡OU> +,µLŽÇ®*ñ—(+þÃ-¡P8ôáÖp�ùÿ–ð¡üŸåƒçßnûAIÏ6+¤µ3íâ.‹eŒ°ÃVñ¤[‹u"™ƒ½jè©r#±z¶›K¯w'µ¬ÚP7¨¦¥„¥´äF¬³‘»Ì7š.a3ç<E꣩ó²&.ß%lž·Zƒ•&Ï¥V Y2³"i±#g±bfÒ•5!1œ¦‚5,[;µ×áß*ÑíµÄƒ +ÕhFŽtü`.éÓV‹e³åOu®«¸£À=±o6åË;M™ Ú¾àE#‘›X„ÔÆ/!à ¸BÀtÍ,&Ƹ¤Ÿ*7ŠÀò²Œ÷QéT0\Á´…•‚;Î c€›`³cr{GÊâèVVôötºn¥§o3°õ¬Yoù÷pwo/ý /„±áæ`&å“bÍ”|6™èw’åá'bRJ†@Y™p6H g{x%)™lª#ÑìX¯ð,Ù÷‘-wE:úH¯žI-붼~,MšÛt)êð’çÜÁ¢°¬¢8ь۳‡±‘P#6’C+_àx¡l…‘vMTŠ; X‰FEÚTÕd D‹ÅFYÝ K1T¤ÅPU-†J´Ø\¤ÅæªZl.Ñb¸H‹áªZ—h1R¤ÅHU-F$pIêRÚÕ6›°lƒ$i…Çzé)= 5º‰äJõ¡ÑmC‘öéE¹¶©@‰f'j¶H£ø¸L“+áu‰9[žm¤¯bÛÊ0µèìôÈ’ÛC²c+³iX¾º #ZTrǬ“¼È¤Z%ºJÄÐñc"ž1JÍÙvŠYi×Yæ¯Ñf*µ*h¯Ì îONaƒ¨ÂDO{Ã…kT! +G¡s¤{£¸û¨0¢Mà‰²0ør95›�Jš&éøF™zúÖŒõäq-Qô׷ظ1ušò»Žb®ñ4å/™E̬âg¹9Ë‹ÐîìKô-ŸÐñ`Ë+T{†Ö®k@~ž„„RÒ'»l)låZÈ^/Vê×2f‡Îe^ -‚“–“2)ò>r£«»+0Î:V.`5«$€]Ï*VÞNš–³Ve\Kè3œ4<+‘å×& w¢p/¶ò´Ùù3˺àUöô´xÌP¤ècçC‘s³3ÿð=¡Mk ñó%›BA¿ÊZ;ãZÒÛ7$€ŠjW]•À‹ÆŸ¦x‡øçHS~aC¶7˜B^˜ç˜ºz1�/Waaª(”¦J¡3…¸VeÅY¢«¬ƒ™.F]h_9È3…À¹1-þâ/· _„%QÆ4#Ê¢ÌFÛT°¦yóÙhNŸóœà›k«IoÎ++] +ì>T‚á/í, ºŒbÊŠk-úÔgÇ3ñXvJñ£a½Új~3[ÄWÖSôï$Óë*î%xùr‚Ö¶ªÛ!@”|’ÕáèŠ몢ۖ3Ñrà¯ì»eßlþžÊ ´¶4“òvçÜh‘ùÅv‚-`*&»›G÷%h]øn6ºÕD¬Ø+ÎÌü߃àE€”'ã î³Ußy_û·WŒ˜rXÑ7<ïjJOÍ&õœ±´rmÓ?Ö6'ºŠKéålp‚hDo•]5<‹ª¼:f}##C#ÊŒ¦�ÕÌñB· +™$Á‹L¥˜+‰à0©6“Økk1ú¹B§€»‚‚%‘4nd¾´×OÜÓÊ{óȧ3®l¾²€pþGÈüug €X+^ó–©Lå¼ü"(À/ÈUƒ”Î/Ž–¯)_-‘1†œ±^æT0èòju“Ʊ€I`1ÒØz2QúN›`ÑQlþ¶tß…8Žê㹬…çÊK;PžeÉjIF€&¼ghëU H³�I}Œ2Š”3…ï¥&'RØK¤H/÷š%JvÃe;h)ÒÀçf‰’pA{ö×xu`î?Y]ŒÏš eS®w£©FƒÛ¯ÙEvL¦ík§C)4šòl ´;N>0@àÜ.±ªA9ù?KɆ9ˆ€…©Šr[^e±$DMWeäX;!‚Ød^–(zõ0¦§ãQE^:0n&bd~cO±´NUJ)�ØQ¥øMË<3€»¤kms.žÑbÊ`|B´$fÙ–é~Ë·Ò¶€ö—ÎHaÅ£um•#ÕR„ò„-±2&8ʼ]9—æ´§b‰ÍIŠ»òP³*`Í‚p“tò‘rcVƒ7ã~T¢ž§›4>M¨¸@àuh%K‰Á6E³é|+Åf‚u›ÈdÞͳçÄ.Å*lØh«9FØlß ª9¸¥·o´Ç½´ |¨HyîKTÜW>ëU¿ÙdyPɳ‘Ï]þ5Z£eQìÿ½¼0¤ÊöKt;å€eæ8äŠ3‡••Â«ˆg%ø&ÉU1Oeç¨l®^&7eòRe9)»N9 J}YÇŠQd–/ÃÏÎ ÆÞYh7U Mj)Z-â^Pé°ÚGø^db6k‘ÐصØdŠqÛéW¯D×ðä4Zž[@Ó´•!¢z¡( Ÿ´šò^•&õ¦˜¹Ÿ„ÌR¼Áœ¤ßý:(Å•µõ_Yô°—ïÌ'ú•õ.Ö^çKا(k?}|Üäás+ljÃU´„ÌrœØëÞœ£CŠ¯zmÄ.ä‹ÜÖ“aùÀÐNj[(°¬!‹MK›ŽË+hqTÔL=¿ ;:´EesˆbÛ,Ö‹àÁK‹ŽÂi^TÈ”àUJñZ¶!®â\«’cWë—ÄôÕâÄRÜI –¤þ”¼G£à¢mî˜D±ñ’]åp…•ya*xÓ½’‹€“Îh¾tFéØ ª3fâ6ËâyÅ8%a³~›_MÖ$–¦€®"¶}•ƒìåÃ+†\}¡8‡vžõdÁ³Þ4áYï°}è“6Ù©LÃ+8ó¢m}ÑÚRõ–÷! B+ºêMñŽ#W‚„gÑì8«wÔ‹X@]4cBúPSkbÉbâŸþìÆ=tÇ梛R¨w< sã=ۻѺªaHŒ°Þ$’Žf$"æÛD‹õ·‹@ÈóÛºœ\X×~j%žòtJ€¯êæm×¾wX+Éó´"‡yÜ6ÛIš«ÑªUsE×Yx/ŒanU¬cg×Û•re“M™'FYåž)¸ ;œË? +»—‘dÞØ7Êðöó`Zæ(Y˜IZ&ÔãBàSXèPž]+ZBp<Mûåǹ6HjHG´·×Šgê@¢#.Í +lMChjR†R°zJS<PÀ£Ì`ÌÚssFƒ7MÄSš_YÚè*n!ë,&š^ï–ëØÀ]ï>s°oÍ*BôÀ2 •ågÑ1qûÞ‹5“z0£â…&VwDü]/Cþ®1×»#8Šú‹HßAŒÁAÆò*ŒO¦T`§´ y]›¹ßh·B±Gìü»bÂGbÖïlÖZ“ÝÐþ›¬mbåz/ +ùÖÈi§±tZØWY{ÿ™ZWÝåþ¶º.Ñq‰xr2ŽµJ5µ†ìUœ¦ûn='‘gp8¿”¯úÇV’, Ïò‹Me“ QÄÇ:«ÅòsO T Ѻ†ñ!·)íÍ,‹rÅN1œx·ƒ`k1…ºÌª“F‡ {"D{g¾ÛUA®ëä¹Øqc`FGYŠ¹.mϔʼnìÒÂ÷‹'³Kí׫åC\Q”{阊±î”'åîh¥ +-¥Å–,œõ5DåKP×ê2LXÜ}Q_ÔR"\>£Î¸—ºU(Î"æs¯Å™S“]ðï§\]'&Î/èÄè¤#Ï»ªJîøëT"4žiÀóŒ7œq5R3¶aV»Ç–†3ŽQ˜'~/‡aöZºÓ¹´[‚¹·{ ÙüC<lU<ì¿=¼+²ø”˜VàW_:Nµ"_º¹RÜ[³l\Ü"‡uÕ|ªÒÓß×sÐóªøU™½é¦ªæ+�×!vt/ØÑ +þ€EØÒ½l(Sµ·R’iµ º ”ä¡$wk1¤v6×m*¾+6PX¯p@HUK†yhç@,fºâPŠ²à%b§Ë%š«À¬WŽ~Aµ\ëÙ6ç_‘ïÇ]è‘P6®¾(Óo +ì·ÎUI�yܼ$:Ž+“j¤„J¹B-ª[$MN«_˜ïUÄ‚à|óŽüÌ~]UâdÛگȺJ˜ÅˆK%ÏCAƒŽÁJ§àÂË 1PIY1zÇ"‹¨Jh+¡Š2o%òâW‰·¤³w¼ž Gò}.ã|¿å+¾N’7…vfMöé6¹4Ùõ„v»óH2[O3£¥¦'ë[=4Ö·±»·wÄmIk=HÏéhN %ßÓÒÅO==Èó`*í?µ¤±’ÆÝžŠôË¥mG³’†cïÖã9¡¨å¯,Ç1ÄÃ|P$1½°@ÉL쑱n,i¡±{/c¹XsYOjpSc¢/·WqüîàMqçÕ³°Yž¸g¡ýBu_FW°Y8Ä‚‡¶í«f°b`SX®:ÒkÄål#®÷a/â(t–W¡4±,£”Ž:l‚IÃ~7Vk,Èý•–¹¿èoJŸihğؾÈXÿžzNYàÛŸ,ÌAzŽýÑ7îRÆ>6W( 8M„°µY9§ëù="›Ã¾iÛS…M³h ¢MsA¹9Ù4Ûk—µi.,H&ÇØzÉNZŠtRÖ®¹°`ÐœE1ó[ùb«\ÞhØa¤T$"1?r‹#U,€Šiî‚G„ÌD-ÙRÜ›Y‰(�FGKœQôC¡4ÏØhߘ4uÍk·Ki¨|”ív˜ÔÙ<J’ÇÉ’ÙÄö>—¡Ù¸e°inUþ¨–³PÅ°`ýjÆæ›óØŠ@‘õ¹5eîÙ°–¡,M¶=˳ſ6PÊO"cCc(L®_YÅmìÌ ©‰Éa™-`?êß‹Á&ÕŠI èXdè1ŽRBÀáô6ŸßÏsNã Ð@[MÅìÞ8<4:¶ñŒî‘Ñ<¿D!i!H¹¥Q’Ý3‘ŒÎ·µ‘I¥ÚÈy¾Ã,%£Á:ãËQcKÍBj"¦8¸Áª,³Õ¼…AWKãÑ*‚¬YzÓÅC¬½ÝSÁixWÑýÏlÙå{/¬:rÝ¡ÏþøXTðÀõQ!þgsKˆãFZ1�xãÿ…B‡â”Çÿvä:IY=;zú FêÌÆS“ •žäª#ŠGç¼x*æOi¨4ƒ§9)®ÇPøågÓuGƒ¡f~–_ŒúYCtd{iijv„ÂzÚ¯g&eytÃ@,Ì= ÂcelJ£ð_yïø^eœ|!c(TZ*¦è9Ê_«CxŠÒ‡mÀk +îUÄ]“‚h#‰ƒ¨>‡aéÃïªýl4µ8È4LêTûÂÈR¦á –< +�‰ŸT31û>µ>åóÑÔå4•hF›YŸšÊfÓMM333~ù¦É\1=‹Ùe‹-@ªàÕœæ Ô6eRjBIç2ÈáúqC¸]1_…•K¶%Xj–°]uYy¿:PW.K$5ÃÀ„áPb ð>öR–¼‡SOaÐm5)s õ^t½t0]F".ØDƒVGÀGá[ +þ" õœá|)VZDÛŠxÎ’uºtjW3ê,ƉQ<ãjBMEµ˜§CÁ´)Ôåäð8�ó“º3» h›sj"¯f3äbÔeœBéCÔÞˆpj"!*–‡ÆæiûŠòð°ŽlW㇄%ê-–KÅT´R�¼SÙ‰\‚ÄònC‰ü€D35ðOoÓ$”¯Ì¥R³žF¹%K=®1‰š?t§RpÚ¢‡ƒzô˜hz•¦m_{ÅA ÇjRˆgTgUFMOÅ£ô½Ž×ŒÊ*‚þ\RϘƒXÁï«sOwµ|6ÕÖñ¬¨?£Ã4}Õ'²²©Ñ´Ê×iã1 Ï5þ8=nÂF”ÁnT#UŽ'èaç쨋;¨h>:L3S§•W¦TøÅ·PÛŒ!†r䉧ÈðY’”§ +tªÀöË….° j¿ Ã#Ö|…ÇëiÂðþ3¬ø—àüÿtóï¦nøg âOúw-}¥ûVãWúwÅü3:62´f>3¿ê9íôµCc}Ô©ýW?Vé8ƒû‚/X‚ÿŒáwø·±©ð˜w«vs›'-ß2ô�xlÒR„+pÅzµñܤ2‘P'ö +äÌ.…¸ %5©¬D£Ã.:u¯¥&ã)M™ÑSž,få²aW©tR&UÖáFs[kSñ-HQã©Ü/ÒXYÝð�õ›5²ZR8¬\îW$sôƒP|Àú(Ïÿ[›[8þs8ii ¶ ÿ âÿÊG²}±\2´úƒtìúéëP {&ˆÿƒO¯ôšVˆ—säÛË4?ªe¦áüÂÿ‘8¼Ù +ù›C|âÇs¡!^.J2(¤‡óÏáÓ=P®g¤Õmla'ê7€Ø‰AÕ¬ãe[Cs Qéí[Ù½vpLñx”5Cc +©§¡±š²\$ЈÏðzI>jáGÌýä=Ä0íòQ0D†GVwœ¥œÖw–Ò€ô]õ²"@§ósq•M Ø›!båY¥cv@“8ž›ÍªZ&‹¼P¼¢m9Õþ¦ÕHd&‰™µÌòrÛ‚ÕåÇ´¸°¶@ÿg_lÛ–6`-±˜A˜Ìeǵª¶MÁ§äF¿²Ñå|Á²V³ªÖ*ÎÖeš?_ëš„†Cö¸!¬z¾éâUð•Qú9½›aˆò!´¥4$Ñ" lªêò_Hþ½Š¾Ì‹*ØÇÖùV€ ,(Ô¸U”tì}¶šÍ·ï¨«èÅ—<TAoÀÛîõ`f _ â4+¡@G¸µ#†#cþµúð¿ |Gs½ä¬b^Nyà)Ï<ÐT¨ŠÃ…9õ +@ ʃ5G(ÛœC^–ÒÄD‹©)cFËçûóP‰çÍ%ž‡K<”xÞRð|M(‚¶7†Š=l.ö0\ìa¤ØÖ¼‡@Û³À‡·½B1r#F)¡«ÍëYŸŠ§)™<²•’i9@Îj5©*«ãêz¢õ^‹²:~ëÁâ ¤€2ɹ„ +dXOã«a-z™ZïQFÕD–àq +dƒ~Ò™ ˆÿñ˜FÉ6à f• uûÖ@ê‡Ö³ æáèNÓ2 sà0ADW†ã““³D|Rçé8ÚŒ_Ó´ìÊ©=¥õÒYÁ~ƒÜs¤Š„AQ4X"8E3êÄD$C¿ßMÅS¸Ö›è²;¨„'\�´˜5@Jæ È#š/¦r“š23¡ßŠ +̹Ç5�æ'z@ê™›‚9½ÍpúÅp+ÅJ –:†"ȱ«©ITXÓëé]¢#÷OšÏy^ N¿mZOäðØÂ#712“ˆMâ“8fœšˆêSzBQÇAÆ¡Å¥!á!ø_åñÿ&Ã:hV!)“wŠ¤§„#7’4’ ÜâAŽ4*9TT¤�JªÄ˜9¨ŸÔbñ\h/Myr*.Mó)'¢¼ReÅíÉÚd¥Ï°DüD_E:‹3“ïfm¾þ´Õ$ägàÀk›«AlæúWÚ(ÂdEOi£ìÌG(©ŽÇ‚6„M3±Õz˜{˜@Í,¾l-Àäœxc,k_5Š^þyk£¼6æ”ÇŽ§lrêexs'WG#daŸ¼³\ºQ5›PSÙ¸á‡?MtЂÞVo{$ÿCíüµ¹½ŠÃ&¬Ö +vQZ³5”æVËòúÕI_ùGn> +ÇîåýÉÉÉùǪàCmÔ”*Âì´ôø¬¼…í8`Ǩæ\Ù–Ú±Ñr©mtFÊzvN·´¥=Ü¡ÇrEï©‹ê:ŽX†sµs5«¢ê–ZGʧgE¾vF󩱘ó©>k¢ž<0Ì]‹5º,Åè·/ÔÞl®G5{4߀ÃÁë "¼O¨+d…*FŸ¨Ôo«ÕoJŸQTè{BŸœ¼¯§H (‡ +�_ÃÕ³çj¢ysDÖ�¤Ùlw\˪>œT¥±´YuèºÀl÷(l Ã`M=ôå Q¨hK”Cÿþö/l¾"é½ÂIFÙB+Š™˜"H b5Ñ,£ßH8èõ$TÉþóÿ1õEHH>Ûÿ«ÑÒíyÁɸÛ=G.¢ZÕ—“Q–æ4td¥ +NT]ÒÎä–ãûÉ(¢ +–C&�/ªªæK(Ïê¾ô(9p¦l³ÄëE!@«((2ŒWSt<®S±uaŽô´6=`™F¸¬%7¡U}Uâ…eƒQMi§LP _g¾Ó0à[ŠFO¯_Y!¸Ï1™IŽ'ò•õôp£šÝ˜÷¼Œ`aê÷½Àœ˜_½!¯uœÖ-=¬õT|rŠÈ<$‰nª2IBSF‰'ÓHC¡˜¡GšÅ…N) ã“qƒWÑÀíeôT<ª¤õ¼|E‹xšžÒSÚ¢õ™õ)t|ÿ¡€šGtÚÊBÑ´N*€á¤Ë¡¦¡g•8kSqºÿ®ô Y«£XãqF§¶-�gˆéY2Yïî²ÿFpŠ M£)Õ¥wJ´i ¡ ǃêÚHà5®¤¬oþ¨®.A°!ÇoýrÖî)ÝJ:£#ï½ÅŸÜâmÂV†ùÉ™Õ ÏDåä“#=ÕÏ*úŒh&žÎröyÌvˆS3 4&ï>ŸB°Íãÿ}>üw@™!kÒ@ahæ¸æϧÝÎ":E‘¼åßSÑGKaÿò!£¼çv€74x|®:N©ÑM�wûbmªg`½' …Ü’Èê€õ1Fl# §)XQØ቉¬_Q¨ª?žË¢5ÁLwy5´uF×U8ÝùäU¾à;*´ãÙ¸UY°DER·èz¹×¥¤xiîeÊäùŠ™ü†òne;xcUTGä¼³¯Œ°í«ùRߺÿû|bzÔh:À}(á@kk¤¤ý/|œÿdø`í?ð¿yJä�‹>ÿŸÛÐþgõ˜~�ÀW°ÿin †ÌýB”ÿ½åýÏAù,ëv Ä4x¼ êdBŸdÞ@Âc,k‚×.Žz°²»§¯ÓÕs@Ç1©kÙðHüêò*½}Ý£äD¼ríØÚ‘>eÝÐÈi®²–@®AmRKÅ:ȳ8«% 4bDÕÞL<;D׳ÈCöxQ=eÄÙØн/‰ãÍå,ß›™+€…€¦&uuz@z‡@¼¥ï^LB•Ò¸Šö›”˜>“bk½,Íû,;?taáÐô XS-R•8Þ=(B¦Ò™‡ÎN¡±¼’ÐõM +pǺӦb<6(Íèd5Äø¶ ŸÕ„ŸÜ||Êjõ\ Pm†®bVcÉx +Ïb‡kÑ"<K”¾ÔY}•ˆ£‚‚øzŸ©Ýˆª)2ûN£IÌ‹2]nrÊô@Âä[1àØá¿°m¶¨t6 mòEAÞPãoS. ÎÞl\UÒxsL³SÐNFKF‹\‹°•ñ-00óê–¯¾S`óJâY 0ÎK£1ÍÒ³ÜË)øžÈ³PCæ2lpÉ!ÈÑ4ƒVÄXVÝcЋóà+MØ',ÂÑÁ•vGCw§†FÀ‡p£ŒgôM úøºl¦Ö¸Âî§KL–φ0ËhØ/€[Ã؈%tá–$H²Ùãs# è½Æùy„ë˜JØ& –Ât‡ã¥rø³µ0Z Â|¸màëà<s…tSó)Êm‚qô‘¡VÆ2!°Ô0t…¿�p¬}&Ç˜Ê £MãIx´í']jăF¡µ½¨P4xO—'2Ð�Š˜Ù¨¿ÑoÖͯíÔêãÓd·ïÁì ÔæãôL騙©§í‰çÄ‚¡7ºBi2ĉþ�¸‹*h…X…;†VÍFâháç» +V;,uXb]Gé¸2Ê4ë^‚ËŸac@TÆã #Àl;Ä*PÈ(| Ç7ƒFÉ„GqÎ%Ê2 ªX,Ž0àEÛq³ +_!O¾MÆgYjò›‹ÎîÉŠ:Ó6ô$> +åxZ`Ê“9p"UÄ´šÐHb.ƒøÌÈS1Þ¹S(†À4ãÉt‚Döš‰Ö¨¿üf’„ù¢èT"× +.¯¡!³ÏøË-QºcÓÿÑK¥¨ŒWi4KŒòËtOU‘%QŸ&söÊE¢p,q-ÖhëÀlÛt%'Ënz4©ë“ ½°ÉYu¤J?-(³i! m +/T(;½ؑÞì»¡Ó ÄÃj@!t[’&˜ÝóÌ]˜™ŠÃ[l@×·h†Dãrc +]èz¯ILÄ÷Ô?ÎóÌÕƒM#½+}±LN/ j´!¶#J{,Ýqäs÷ÖÀUÜàDB6ÂZ½p;PTf°!ËèP%理>qeÓîˆ\ ²:·L¯<¢p³až�Î4½/MìgÎŽ[ПgPáà›"™Îtزú$c;ÂQÔ¨ÀÅpX*ózBïæ„æOA'· 4åÂ%f*„¸P´�8AÀ†`1´Ey¶ˆHßÞ4Ý5ŒÂnmÊeôpä†rk¿‚¶EÅÃåoäÅîЄÀ‰ž%r½Q½o9%+ÅüÉäõxÓ,€vSROe§šbêl“¨…kÂ÷*R%§{\½¤§f ÎÞƒ)€È«1yºqÖŽ`˜-ÉQ±˜à‰`æ@:²QaáþaÙ€T%‰Ÿ¼§"+Gh[%6`³6Á£¿ž¼Ã‘NU¢þ8²@Ó:ºq!&µßö°?GLçý¤5…©ÙU9œød +··\æ 0¿µà mK|<Ntà”uÕ�•|«àp†[Éܲ«Èaqãl¬CêÉePƒËI jVG?0¶¾F2Œd…þ›°%kW<C ±p*Ñ‘s³‘m~)9IK¨’Æè*Ì' á˜à•Ú +6€0¯ÚªûÆg}¢} ©† \€TYÏöþ^+Q¥}¯`«HOChƒ¶¦h—6TæÁ;x²InK1riØä¬y�–´#féÍG±Ÿ6[å<Ü@R…åB~Þ¥MKêçêâU7,Ê»†K°<¢m)À¾B8:!J¢D´U°h¸Ôk“*ž"ôJJjãj<Ë,-²6Âß0£™±wD¶-FU“ì<RÒªTj%÷CW?BP‚—e_HúùH¹¾Â–èäfsiŠ=iJ¢ðJÆgSqîé6Í"q[à$ÍÂ>.bùX4P dDGªÓPIB‚ÓÔC¸bÍeD“7EREFëäB‰mX‚á'°®¿€w“‚à 5‰»ÜTÓZU·_Ð!?.äaÈ•œòêÇËœ¡¢¦q|¼Ta²È–g8ÞtÅê‘(+X4¥V%ïM‘\OUêÊäë3ˆtý°æÈÙó‰3×Åé!B!=Ñdä[˜Öô4:`è¬x§ªHy‘¢Áì&u>åØš •¹ñг$òÚHU€ñ j[M†ËÞž’ÄÍ-dˆÅaiKìÜaKAðà‰•QhÏ“rnô,kË_Öî(qDž‚¥å•XÙ}:yÛ1Ê`i‡ä›(²PEÆÛ žŽ÷B¢<Lp p’°“KL6ý4Z”9TApcÉI\Âõ£6Ì„ƒÉµ¥Ï'ðü>"‘@üV•iØVU=ŪÜ'š‰±V6iZZÈS°tÌñÑj`ú0c“åóýDž 1ëQÂØ¥‘\2—ç2‰NûÅŠ®«¾Zð¶%«¥í7J…<b¶)sÀ2÷¾"rcŠÈ“ Vš�H-“: ›0˜¬#ˆ[ô nÐuiɬɲöPOƒú¤¸¿êÀÍó + kR¬‚R°óÛð1Eع +âsf`‰tMÌ@k[Ðô¬FI Æ‹qT˜cÓcz¥á`SÄÄ社M¬5ˆ +{� ²® 4§‡c×n ¸‰t.#">RÚšÃÛ_DâL^„ 8ŒhZÇL Ê‘ 8ÁFѵj0r–s#%"¥LFÏ`Æ-SÓÉúPäí<¥B¶z|êå ~5%M +OoÑxK&´çú¤¥€Îfu,>®¦RÏ�¿‘qSé!êù6ÈÄdÒýßæŸnʶÑ)M;OÂJ¯Íáúñr ~F*‹P¾…™Zl7“¦îŽ¹íyo܈&ÔxRËØÒè|ýCëƆìEý ™dŽ%&õVFúº{W÷y•5£cÝq•';G’HˆcP²ÏA Åò[ +TRÖˆ–OÄQ,bÞˆý1˜Ò‚GPŸÁ¨Œée*O³ ÌÚ8£àü¦âYHõ»—’‰0ˆ¨AóR pOr«ã0çq]°–0›¯rËê’²¨…½ dÉ9 m‚µ´j–iblÉWÚ,¸m/@9Ì�¤G‡!Y•( =?OlŽ(ŸÇÆãBF;)4?€£—5‘]°‰î$éþG(nÔP…ûŸpPÄÿ¡û¿`3< +…͇îÆïV½=:_°y€GšBÇCÞ +•» +7AÝ~@Hc݃ÊêÑQŒÀ èi¬oußš±òWA>—‹8s)~?ˆñÔH£‹‡¹OÆéN�j#ë4àþ).RiÀ¸'uÄý£¨wd¦8vÃPq¤¥3«•)}Æ+ɱ̕ш¹S¸Tç0*PZCÃúY/ “lŽ8×ÉÃ&ª¥³¤uáÉÔÆ1‹t,GLNˆ©Ù•Äý8¡Æ¤àYqÊ +XÍ2+a_X…ñ§Ð�ª†;\®•$çÏ ‡“Ç›(fAò®Jzdº€W(=æRȦR†ýtÎÓ'È¥EÔmÉžM°*Šg òÇPVÍæ0rÖdºá÷¸8r+NRf %ØF¾ñ@ã½$ª y MÑøÝ&Ǽ-‚5M½¶T‚² +)›K‘*‡n÷¤Æcn¸„ÊÃä¿&QýNŠR4»Ñ¨=^±qL¥ÂkFhŸ;.bé„l$ÒW™‚‰Bñ””ðX¹A±ô�FÅÂ{—ü +`Á~¬ŸÇï^´0 +4³u¤ƒäk=“æÖ]ƒqº]dX·´Q¦˜K/€5kÓL–cð=¦1Á:»Æ5²N"‹fg$yzfT@^{-G§ÒY-ƒ@m,ŽàaM–´K.ÒOy͹ J¸vx ‹¤^hŒàž<ú3À¿ùÌ`_Rç“Ñ(Ÿ‚'€L®2ve´Ï¢?5ÂŒöNÓ¬%B&Cjä¨PK³_£)!#B±T³¦W4ç¢Å4ÕÉ–²``ÂZk–bItÅ~Ìë&VPMk.òÉóZb7ÃK.Íí�üÖMi“AIuO€QjZS3æ%²ÜBÆ.¸Ë� OÖ÷�x$Iëìr†’*¢rUg̓ô±Æf +шVo„˜iÅ"'{Ù2TøúX³äãΩº„Z`B‰;N¤p^å}‘€˜*YŒ&fqo]ˆcitÇÔA«B“-q×zÁîrŒÄ°{iU„™aˆ¯ûô ëÆI':4è#cà]¾ˆ:†1FÉ�°Ñ…K/B~ "?,ºq(4tÖà`}8Í{GÝ;º\g¯Ñ7ç{¤¦J0«ÜÕÓ#$3trhg0žêŠ^c,ËðÙU“ˆ‘8̼´Ý´›nÚošÜ]¥ÞPN%$XY\gUC(&ÄAˈ½ A£[$:³X ±ô8Þ$ÚÆú¨f×ø*Á%.`ÉÀ�U,À‹xÞ$•ˆdí/Ò#ñç€üºHYÚ¸ÁåZ£Ó"¥L0D¿y»kÛ\ÄL‚äM SD¦…¶_º€&JŽN©Ç<k!2�ifäéæJèäbv(œ0@Šb^|vn.6ɘZ\Œš0·N3¯Ú…ŽÊ¬'…v±RdB¡E§RñhdŠâ©˜ÝtKº„qŠ†Æ«Y’®uICäi5é-¥v^§¹H6CÊ5«± +-]H»!ô$=A>¤È¶8Ž ãuáòË@ŠÂã2™Qq¹$Œe9yR,óäj/rͦ奓P²™ábPëJ["66‰DiW<šKdñöIØÝκpâ=o!Y1ÀåÀ›M:ë•+>#C¿‘^Á%´RI‰0‘û4²Cík¡!caq¿ˆƒ€Sòd]’a)Ò›ê(ˆÜ€o’©˜.Y`BBô¤Ãq1Rr˜|Ö’ê¤ò'âYÃq–]Ȳ‰ÉçŒY¾Õ¤ÍÁ°fuÜ ¡À¼H4ÑÞä¡vw) {A;&ô¤Ï¤˜ +ÞŠÃa°f›gTÆß#ú‚tùFä“0V”�O"ç³Ò¢Ï³¸Ô™&©ýxzPO…Æ!Ôb”‰Kº”Æ ùuI“\‚Q²”–ˆŒÄ]%ã_E×�爎zµžÑQ\±5j -‘šYn–hÖ,;ž%ó\~²°Hm¢¡‘i…ë(ì‹Õ§Éº +.‰²Š«‰%„zý.b–h„IÀ•^úWÞç‰$tîÓ@οHæXÚ1¸Qj5É Â¸8(ÔHÇå-Û€,¢,Ƀoæ 8+4¦&ÅMF,Ž¬¡àÒ}lD¤O#ËŠ +Òþä߃S@qëÀ 4 ¢Fìà'Ñ5¨[õÙHÒŠA¢1–¼Î¦ì‚o9ë¾Ät³¤Gò‰–Ðœ£p +è`ìàÁÖ�“û²º´Y¤ýÆÛ{¡+ö%ÊjlZP'…¹ƒ(;Þ Q¦u#;œ<£^Bçe¬IPZ!Axâø$À-ˆª´y"ô0Ž@“NI<‚ô”´st#½+y…ÄKZ9‚š`;± gH•)O™A"&;\Õ•#}}d9ƒ4‚Ä`p(XŽÕ’ÁY2àÍpçå$zËHZréȳ%ÐI‰5QÒÊè(‹ÈŸ0«q8?ü!y‰y~~ʲebàG{>#¶Òèã†)±==‘ì=Æ«!¦P2O<á¼ñ7–‡ä¬áà9愆üB;†x†zË©ÚæeeÂNªÔuŸgšu d "œ6p¡e(À¨K LMÑÐX±àä¢%ömì»–’ xY Í‘‡Ínf¦tÜ.¼|%kUôNÈ…ŠðÕô×v‰Þ &x± +bYqÅlV‰ÅÁá“fµè7(Å»¨‘:ÀÖÛd°M–8îºÅþyth4v6É%Äf/V·›E!ÛÀD)æ–® pW:—7)}šÇgeS®)`¥…ZÄyq/TùNÖKcQd/‰‡SpÄò5ŠCÄ‚–AÐÓAXÜ7È1 +w2,ÊÁžÅü¬’¢¨)ù0O¯m&3ÂüO)“»´Ùvº˜§S¥þH�Ó 7Ò¸W}’Uû©ÇœÈœ•oƒyzqb¿¢prso¸·›MUa†Q•/ XÙ2#Œ(4W\D&„Áš¹r Cl·ŠTÒÔ¬�‡3D%ï`¬7.B'°«0dˆ ÞÄF‚ÖrPoBö_Ú”©hS‚¼sƒ´Cóšv¤†—¬FB\.:ì‚%s ƒ¸Ž|úgšˆOO Sw^};åf¨„¦H™á!šc•²MŽ¥êÄS—&ÿË:ä™âK[‹;¯§cSÀn„š)!ýĉ2ÇÍRЀ†,8Ê¿.RùNå’( 9k™â9º·ª°rR¨4ù ¿§SDÅpŽ0±¤•×Ò`å'&ÄR„bAN*QY3È2†é±”~…Y1¦àlxÛÁFʳ$8â†Ó…|˜…HŸ`ÊSfàCzñxI·E–ç�/#Z2.5;¤ržá»ZE0”òd-¢á[öþ$¨È鸀DGlÝQ0ÿ¿ÇMÖ¡ÏÞ|èþ CÛràÀ*äÿ¶š-ÿ¯H+Þÿ‚-‡îÿÆïÿÌL1»á_ø¹–õ7wEIŒXxØÝæ î¶]»¯M‡pg%)¦r-a@h”(,ÝÝä©æ)åª&ëÒ{š't4ìÎ8g §‚“Š7ŽUð +?$ uYñîUº‡l=™–=VÝ–i]Ò±À#dfê +’êì¸fÝT“˜F¾‡Ú‚‰ùØi™ä1ó[sXfìÀk¡U+Ò˜ÕII›#›¾ÉÌ©4,k9н)ÁE˜Cß Öɲ[ZBÎ#Kè?£%Ðn¹m9Öè’]w¬£°^2l�´¶kµ:«›½ +Fâæ( èXÖ´¶¸/`™‰|3kd•JE‰ut�Ä°—è,kôÓ.OÞÙmb ɳiÒ¬]ˆŠX ”¹ÃdC=¦ ¼‡YQ\ìY(Æ¢Òr[ª$=‚_ö˜¬±}ˆ¬#”]ùŪ½¤çŸð¿ý4€>*àÿpK "ñ¨…üC‘CùŸÎñ¿…~ã+%Œ<“°O²‚G¹nB<a-zD¯ó€PÁ N…A´¿nsÌæ®`k´Ïnà×·x¤!²°*“\4٠Ƙ&oÖu£—!+t1A‘(çøà$ûP¤#-ì#ä‘(àŠ ©ÙÜZH“ŠXK x›-(^Ú±'„éP#;ÍyÔL‚Ä—Ù4o…»·Þ±ãˆ ÑY8¢B"oƒ™—AzÇ +ÅaH+×’×öÝœ=bʈ#l>h[€>ÎTC)g¤(ÿ§òò7å_†É-ᚨ+´ÇëÑåÀäÌ#‚þ +ÙAÚ•7‚24Ø«¬ìë&góÁÑ1¥b|DçÇ2é³4?¬œ_îrõø•ž¡ÕÃ}c}½ÊÀXßêÑ¢M.rbD³asi³ÜN!~ù¢×Š2šÿª ½„OYŽ0fð‹¤n”ö@R4µhþüì(Uú=sš3™Q;Þ/�‡çNšïøbÞÆÐ=‡‡×cê¥ÂاŒòø…zÀÔ}°âˆ$WVØs¢+l!Ëyäï•0Fù}†÷5eÚgWý2ÃNáš±a‹x6Ë”ÿ¬?>9EaO£:_^ʷΞ%qÆJdl=vûS°P³šØG™ VOóVºEG_o +GB<ø¸\©$l(j4£†ÝÙÀ—ॖ´Ü¦[-ös×…w¥¸”l‹H†”dã’\šÊÈãÝÈ”B+XRžFãiUج³c‰rbV@ˆðÌ'$‘?msÜÃdˆœ«¹è¾Á¿Y2Ø©C—%}Jª$ü—|Š ?²%˜Ò‹© ¢4R¼ZŽpÒ…]êcÕ„áp”“+e÷^#u{Í™9¢l} »–¬ÝuÏÌÆŽÔ€-Y3r€šÅWË/Ÿ>ÄN‡˜æ©:½šÍÉÏš¡’m8“írìMtˆ\¹ #®nñ®ÖÚ¢3¤ªÞ24}¬�ËÇS´÷22…bÈè¦# ¹`@šf¡vÓcw¦#õ«[|ñGp4ëžÒgúØÝG'»1 +~ŸŠ%=YÖ]±ÃÇ.3ðmÀ“”W±¤Ä@˜›Ô³|ÑJ±è…¡"óx³/îuèî`ÓºW¡›;Ôzšì¶Tœ½„üß„ºù�FþáOþ?·"ÿDB-¨ÿ D‡øÿƒñù_͸"…s/SæΆ]*/·ýa.óq=ýôuMqkJ½œîü˜¿Ã}/aKŒð*ö aaÀµD)Ð*·&1uÖäû¢‹gV%ßBʼ2³‡nž›sq[8»›ÝÑFøá»p€+ñöFh´Ó–ùyŒŠvïÐVЯ¬·H¤ž'Žšnè0â„j˜½$!™¿žå&À8IJú]ÔrH´,ïˆìÞ±‚·jw§fùêéÚD\z볈_\«Æ,–¯˜nŠÒ`VZÛ±‡eÍY…™˜›l;òÚü-…I*^ânÆ´®¤¶ÎÊÊ׎’¯aµ fÈ”–)ÙfÒuÛPS¦ŸÖŒiä8E-Á0Òkžâd@a;ÈJˆ5‡c⢠+™ƒg˜Ö2SjÚŠLƒN–dAýˆ-…¼_-K Õà»ëY»k¢Èk2yFFïªaß.¯Zbú[¼³lÊ~ÛPÐ ¬Ä °J¤L^@™ÞÙy²–åHGmãÿ›ýJ¿>Cרìjf9Xpç#°Ï\šÃq ¬°€cd¶ˆÌJmgɶ˜Áà{d +×)í¢µ×úL#./y7è3ÜMÄ:ˆ…¬¼yNV¬`zf“íð°Ý Ä5äÔ/#í¤1YS<‹¦‹hŽ\?«w%–0£9ƒF㊛{"µ¬ô!-f•ºÜmí#š«ˆP¤lS0Ä03ºoDA[¨¶,â;o¶qc@Ë+å†ÎŽmX9ï”ÀÞÌE]ÉrÿŸ‰Ç„iB)cSû™$O`2éñ¿¸t6H•M6°˜…Aø§Ú–ª8¯py[¬ýe¬Rõî®E{t +DGaš8¾lõ+,r±o&½’Ž~DêXóì,·í˜‰ ¬Ì +¥bf&Æ„0Þj£)2K1Þ{,U,‡Ø¢vfi´¯µ»éV³å*VØB +ìîË+–œ56'„Íé¤È¢—³Xi+t²»‹²ábi›ç‡i¾,1Óàdžûp±yòriå‚3å4#Héa¶°jxÐOdÛòÉÍ#Ó‚“`T"éDÌáÁÂÕLÕ¤Ã&¯#g1“²lFÉ®TxÚ6¼¨: +Õ€¦Òò§@KB÷Zù³õì—P—ÑWÁQ-[Ž©¢-ÞkB±’x¯.—3:ÕP¯§™¥|c|¦o)=<°‰*ܔć>ñãàèPåå¿P iåûŸHK¤µ9Ä÷ÿÁCòßÁø,[îr™2;Z +!®ÞŠ:‰Içí2â8LiÑl¾x訯(D6¦eáúØøÝ6ÀÊÝAßP-GçT.nPª±ñ7¼ÅbîFò˜ŒkJƒ{mJj¹œyÿáf4gŽ‘ØBÄ~Œí¬[î+3MRlD475”Ѿ1vÆë¤O Š»gF§‡‚ÎLų†§°7T¬ÉêßP*-î— (õüžcÒwu’ÃiKx££ +½ç¢P¹a|çîp{«€¾j6ið[9#ƒÑŠ Ÿà;s¡2ãÈ[1zÑ\tT!.�Dm:‹;Ú7Ø×3†Y`¼ +o¹ØyÊ´âW¼˜OÅKZ¯™ +ÅËyN¼"‹ …IPøNr*ôb~¯™KD~ó² +ÕkËÿ±rdhµð\×ß7Ò'Çt*žÕÙÁ Š\LÉZ¬Ç¡ ´Ï�ß <)ÕF:× fÛØÙä5V¬å5—€¬ê7ª™TY›Ûªh àйp±ºâ^6ÞÕmZêÑ(ú:/kïZ6žé¢£´Õ¶óÖ>Ú÷~e|Ëé9²½h¨'†¡Sq»ypò7@òäFL[¬Fa=n¯ÛÿÐ[;C4`±xƒ{=|<¸ÉôÞœfѶDY·£9û˜ñaÞ‘Am#šH7Ô‹”ÜÇI')RÚVY¼vÖgÛɨí7€ÁOwÊ™ŸTИ½[ÊP ªäh¾]“¡Š¡,|µÚ5/>8´eEItîÇ¿2"Î"ÛÙ“©½q]pé�•5œðµo8?¼µÑ'¾½¡¼ŠýGGɸK”8Üꈥü†_ÜpÊV*pˆÎþuª#®tCÕä&,Ò`>;¼ÁkýˆØ´Ø„ì?ší?‚m¸ªÁ>(û"«±©ïídE5΀ð²À$Kø8³¾FçL‚Om&áq—ÆEÜ7Ÿ€SBl¸ó°ê”ÒÂ<èÍâ¾.NP*_@_ü˜S“žrÊRùØ· /<`¤/"‹)ŽØ^×ãµe+…—n?E¯æw{JÍ”º*?[,²UœFÞ±X˜}´°1ãiœ×Êâaf£•§”†äU<øÿ þã~þïF1øŠCßê€q]<Â÷ÔƒxMÝP/Ð}=¦+íT%À¨,u0%µ¼ÖÜ6ë¶Ã© ªÄ¾[x�&†bÚfÉ‹pî·ìë2óʦXi–àH§b Ζí .ƒÿKÜæ6EðFÈR¨µNÔ[ÚŠò¢îȪۤv=E 7š°VªâÝf)\©Efì Š Ïê8zéU⇉£½ •!;·Xs …lê´N´ ‘å +Eeeç+ƒ‘óu¹¼õì4—W<XïîÊDš û¨ +»ëF…´M_ã苯SÍžÔxÌÖ ür´/ %÷q}Kƒ{Ä>aÄð¢÷Òc(ë—Öâ`r€^;7*ÁšŸ�o¬pTdäDæ/'ìuœ¡‘Þ¾eÅYüª·o´GX=0¦X]x•`€a…ÐÑê/ýXŒM•§Wªb\æ?´FÔÃ"IHW*玺½æ¡$êf;bîZ¶¢ V¼¸¬iEײ¦á.µ;hw±ZŽãBôøþÂ8òz <B +ËlÂ)b<ûIŽ†–5A$¼–ÈÑîbäÓ;î¥&[¬ ̱…ÅJö)Ö V‘ÒqÉ�»X¬›–bÝ Ñi)Ý —Øfâxo;ï†M+u·E™tyo·Ì¹´bþA9Àê²ÕU�¹J÷àÀª5Ð5ÅU‡fÎ.Šëàßæö À+óþ7A¶2!L5§£²šÔ–¤!Þ @Ý•‡÷†œfjNÌWëÑfò±TÁ\šJ0PãäüQ|ª,ØÚñSµ˜†æ¶ä¼^Cî2†G›[jÌÃQ sçI÷á°:åûõ”˜ã]Õ¹þw;Ðyçy0Ï.µâîÆǤÌq01åb6žÅ”£r²t9x¾Û®ÛàÃ& +›Ã(«²15¶IÉR‰Ðx¦Ál§4k†¦s…S*Tæ©ÝìÌYÛs$œg „ª_*½HžñÈÖR¹Åa*J¡j²±\žÄí<´žîD#ñ)=©U\XÖ\”nC�ç²Õ4Ê%‹ÃlÔÊu +nðh¶Y.¢æÏ÷8\1%q G»Ç› åÔÔ¬¸«Ë(S×f—îmTlYOßš±¾\‘ÕÊê¾±þ¡^X¼”\ïVº{ƆÖ8Vj}J¶;A5@æö]6°fxí˜2vÖpGÁª¯é^¿H£ +?WwŸ9Ø·fÕX?<‹�vRFބú¸ÔëSÐì°°Ä¥fg»ÒJ×jŸä5ŠoÚÑ›åXíè0/VXÀA4f§y"4Œ¬æ1(5"‚ÒðÍ6ÿç¬]´.%*$cQª"ÜÑxfËq°ËšÄ®ƒ=\Q€+q£Z~JK}UœŒÜiˆÖ:Šx'ÁrLx-ÇOžÐóIQu-HÃÖú0.Vnÿ4)N¢ ñ¾5‹ªG³RW³÷Íš¸lP *«!k»è®F¤‰àÛ"¶;#½WÙ«¸J*r=ULãàÀy* Ð-Gï.§’C+l5ádÀÇé¦Kòàõ\|—XœÒq“Ì•ÕýšüµÐ§æqØÐNõJÆšÑj»KG+Rzñbâ�på–uÊ™SLã¾£öfŽ<‚WòÛȦ(˜Ë$ˆm4kq‡2º›˜–ÐÒÌ]øQ¡Yn‡5æ[„À<³~CBŽÃLq}ó!3`SœÝÈoùÞ½ç‹ó¼Ãz"Qy«)c†þ4¿…ÌoÍæ·°ù-b~ko$[b\-„L•ß0Œ—�žÌycšš$Ðd¹„¹¼Ðl‰X‡´Š™³/Zç°JØŠáÂÎññ¶™Ènœö!;¢»gá<°À«Îÿn E‚Aôÿ‡åÿ>(±ÿñ*fOìß>*øÿ(!òÿ„›[Zš[‚˜ÿ½9ÜzÈþë |V ¬lkW_6ïµón˜7/ +«jôCúȯýÛé·ÜÜ|êU?üá½e*/zqq•s¶WŽÇ”5h9‘bï,:R ±ï¼E{åËæÍ{Å</VÃÞæ½ò°mW lú¯î1oéAšë¡OáGœâ¥¨ÿ ϼ8ÿ‘�ÿÖÀ!ÿ¿ƒòáóÿ_p"ÿBçÿåßûœ8ö€^>ûç?_�Œpë·Ÿ{îÔË_|áåï¿êo½ä‹_üüŠ½?þØK=øCŸCŸýù™+={Ó3<=óëž÷êeÊ9;O}Å+_QXxá¶/{Uí«¦·zaï¼£šNÜÑ?oçÊËŽï|û¿÷º»Þ}Œç“¼þ½;o}û«_㪟ºpÞêW¼ìe/!ø?¡M0ô_™ÿkn6ñ¸%Àüß¡øOåÃøÿ•Ìÿ1ó?à|fo¾å_ŸúÂ}€ó�ηs„s=/.>/¯$þïÄ=ÛG>|zü#úÏNô¼½~ê-ƒîyó8¬çC Ákwõ¼òWxP>âüÐ •Î¿Bùÿ‘@¤µ•ø¿Pó¡üçcˆbØv•Á/õ˜}Þç�‡þ¥O…óßjáø-áHcƒÁ@èÐù?ÿ¥d„Þ8bø×i5ñ—–1:\xõ$7ðŽÊÈfÐÚ{RËj©éwÿØØðFÀ+}#}#îFôƒ‚âÚÊéöA×!®¢ad +ƒÈ¸œæz…–^ÍhéeÝ=Z—Š{,Ûµ$40'¿�óê]Š\7âˆæfiŒ×^¸¾=z’‚6à‘í½ñ· S}÷ÙŠÛ¼%uú˜·¥fqºdžƒ™oió?G“eíÿŠ”,0�,mþç¬]Öþ¯XQË2¯~|=àÈA!¡¥ +Öji‘¥ªæ*oÙŠ.Ê,ÅWzh¥m¿*½ò¿qÌ1›…Ç0*ónSÞ)—°!e@3]=œ(Ö~™7å‹Ä2›*òµzÀi¿ÈóýÅe´Õ^‚ÌÁ˜.¥íDµÊŠ+*;˜;œ‰}³ìHl·ÇNSié'Ô`s(±|DBôTÖé.@.>ñ4żBci§Ixc‰×²«RïåhΤõ$fF;õZëÂÈ_àÈŒ¦mdÔhó–u³8t‹¼??½…ªÿrüE^/dþ˜¾æææ�åFþý_¼ì +Tzÿú9IÆ‘Î%ÓJ«?è:Éu’Ò¯Ùå< 0�îR¯fšÖÁuR¥`Ë%Þ¤ŒjL-$çÞì…üÍ!õ<FáÌ°û¤FâXYv§3<P®g¤}jǺWö‰¨¥†Ò€¬%Ìi´aW3 ÍFàÒVv¯S<eÍИ²fíà ù#ÿY.hÄgè[+µð#ŠMÿ0=cuÑ£á‘ÕÝ#g)§õ¥4À]ˆ¦p:½°ª”R–¯Ä\\vÿ[9Ó¯–ò!x¼æ_[$¥ñÜlVÕ2YŠÑ¯hcN•¹<àA\MNê1Œ¥lkTÀî› ¼ùþKÑw{k±ñÎjZ{£–ѵ”7¿Ø†lkî\zmï`]0¥)“¹¤±¨b'kS=zJë…JÖ7øDø+>êJàÅÎÐÅ ¸0ár<5OeÂ6Ð +X°E1ô6‚ð’¡ÀŒ<v;PâSrȇ,3Ÿ-úÔæƒU5PeMÁ±|b +rõ‚´V"? +Åôz– cÐ{àhÈÙTIëqNÎÅñx¡a3&c:rªbŒX‘Æ4ÝöˆéÝZdõÃb>…¢r[R8m<7IÙé9`ŸL¸3ëSNóXŠØ+ì‹‚˜ùÂ8«U³Å*2¥% +öX<—›ŒV½ÃdÅ)·2‰”Ä:vS®\&6QU¹¬ŒN!GŒ×®8}mªÿµ?Å s¿ýöÖ�ÿb²j@ζ¤˜“KjºQiÕ‰É˼2ÀP=ÞöH[K$jæaŠünC^Ïi"|«³mGÒó2¯ÆU±söªÐk³×³Z?/žH¨Î–“ü°HŸö7êÝÑ_s…þÂ^Ï*MÛ„ÍNŠ§’D”zeþ°uÛÜ\iš¯g%†ˆÓ¢SVãF.…`çWsQlS“Y¢©Š"æ7Ç@•æßB1¦0X«s–òq‘p¾Ý4‘œ[ß°Ñ´¾øâcŠvXîõËÑu¸B×m^EPTÆ0©Õ…XäT§Îžó^È)'g}°FTMç Ra�í^Ï +-«¾)žÊ›ú8<î±Ø̯¶$Mæƒì–lõ]Èù•^}|\AˆY£e{T#oû)F¨–‹"CÉ›ME7ZÙ1+ÑR ubp!y‘jBÚs&0éâU˜ö”|…1x§€ém)Íåz‹pÇËmc~£4(á]E_2Ä+…±¿ _•Ø-"–šj`¸àÊ%´-[q³í¨åŽZä-à…Ó€‰|ˆ/Ь„áÖŽH˜9Sþ/jõàAø>¢TrV®<€NÎqÀ[€yóûåõV‚áŽ@¸#±É +“™äxb£šÝh—ÊË¡`ÈÒº?ØÚâ†#ÅƉ‘w1q,ºf0>Ùú”ü;W’zr‘Çòà®ü4ã43ˆtaÅÚ÷÷Æp¸¢ø9¨‰$¨ãœÏz)§áóÉoýq€‰Xu +Äšht„šÄ–ŒF㘂£S©Pe„ß³ÐÍïr”ÂCdÓ£•øŸ•˜´F Pá¹EŽ‰œÁyŽD¦¬‡Äç,Sø`½§ xý¦õ™w“haníM"¯-6‡±™™‘÷*dKº<8|>E¬BÈ[€Ýó3â ;3¢CÍ�mvɲP†,.kîÇ%Äàã©õž,%æ yaE)}TOcÊ«¸Ñ-ù]¯¬¢›”¤fÆd—C±Ù½";°ÐúóWçì¯jñZ�#¶ÅkQÁŽp¸#Ú7H¶Güð_¨ÅO‡×p{Š¨Lë‰if†û‡¡„3c¹=±¢uH¼™Âú)þ7æQ$¿(3Ù +†ŽOàÒ¨@NW¡ó%´ÙB¡²si°ÜŠP"k¦èå’:èSš£¦kÑM>hܧ&úŒóaâ +É¥XO9V³FP^°kÀ½¥<è-àó÷¨ö¨Í¶Gàã-åöh#€ÓÆ9ìS(Ð"6jHOã +¯kJ®]ƒðN<´Ž´µð\Hf|^=܌ٞg1,1n—‚Is(B7zÙ°r5Äâ1‚zŒ£ÞaÇ3È5åR¤)0“ƒç0ÁÄÀzO"Ae‘«Ñ¹!Êb0ÛŠ’>þ¿;5;£ÎzÍ1ƛÞÇÃt<(Þ0Ç‹§øÞóT5Ó”T3Ù¦(üãNÆ—«´ñ˜kqv6ubR…ÅøO<ÖÙŠ Çßi—¢€ÉyÍ †ÚŠÂP{G(x``dÌóŸ¢&â“)âÚÄ)öøyk}l¯ePv�K¢›øتœÃÞ¯¬Ò³ÈuÅ·ˆü于`TÔ XÔ&@P)S¡‚Q›µÂüKë=zZKmš,ÄšsZÎvXLûr¶)¶ŽfXÎÀ¾/gq +TfA‡b1ÌU ¥”fÀTÖ$¾FÎÅaÖãÅMk™ àѳJ +/ÿ´v3L{l)Úp©Ñµ>•Å))ä¼g�QËA)Ä ¨.Cêñc}‚2ér®bë|Ƴ˕_ã>-;Hro«cÝ‘3¸ÿhýšîÑnÅH©›4߸žÅ\7…ùí‰>© À%×WüM˜‰%‹Wý0ÿ&¿ÉÅPN™?kͨ¬"Íh@ú`†2öײ§ƒªxö ÌÑ×2¼,¼_ñ˹V³hAo°Èª…Ú:¹jÝSS˜ýq¸™$„V–spú ÉLÂÙ§¤|ršÀPªA™(O7'vžÔS)U!‚Œ‹E9Y²ÈXM©1jØ\ÏŒžC8&Æ—•áø‘ICëÄic¼"µ“ïš5i¶jÍDÆÎÓ51wf™‘V£Z—ø#úå^iYä)à)¦Ñc;Ž4´¤P™SŽC„"•”<Ñ3M&P¸)²ƒ±ÞíºwNˆlL<ëIÍ&`éÐxbV62 ø‚ßG!Háh/1è¼ÓÂ%µåK”¡Ó0–öŒ52»H§*"¤2NCø¨ù‚Œža„ƒ +”(#pU�Ükò»á–¬.Ž”Š‡Ìm fÐ"û˜Ò@÷(·eg0)"b'@¾wÙ>Hëäiöõ1ÐÜ#+‰ÓõÃ&¬}<kŽnbû8C^p¯ÎP“x!ê÷+MxqjÜH/åÅ¿øË ¢4àZ-KkQJª‹‡‘ó™r,ÈCYƒÆ%lTVÝÄükš“†6V‡'B 0´;ÑD* +H*5ÿ«Bì_Û¿CFë3‚˜CÁ¼r#1}÷åHx`à"™ ¦F&bt‰óëÐÞ¡‚ŠR»ZÊ(ä²-*¨b¢¨O@¥ œi0 Aøw„ƒæu¦u¯‰WÛ>�ŸƒróK;Í…Cþ¬IK@¬ÉZÎbÂßÌ£/r×£$<–ÓŒ²§kôiÌ ›1i{{;,!ðh€Ò½:ºÒb0ÕSFg…”¶œR€"µê©å&½EvK¤ +¥ ƒÐõy”µÍÀ>¸æ=}cUQU-3â�ç÷Ž€/²kKõÀq6–Ìl[Æ |NX¤9#¡c8=,[è¡|Ùð’…i"KŒd<¡-)ŸüÕÁnØ»š¿§!b ÊJ²ûÂ’Ùö79åÙðÊly£d„(ëØ"€wrñœrÚ¼,ß{Yè5º©ô”©wm¿±]Xô´mÑÝ—>Õ¬cFйŒÍ(l†ÃN$€–a[³_rü˜IqPͨJO8@Ê–•�ÆqZƒm!— +0€!üˆ—èê_»bHaÖ¿h+¹(ôCS@£‘†! FGÃ?È4×MéÀŸj1CWFfóhêJI×ÄSZ£EVPË@Bþ`.:«ô$ÔÌ&ý—ÃBé¬$V“°&€?0¼ÊdÖIh]`ÍÆUÌÎäÄ..nKÅÅmñÂúæ¯nKü(«‹Ý ´-oÄÈGpF‡‰±/ÉE2“K{·`-°�ñ¤LXB&OÄǨìßk><†I»êíåGáŠY&"¤É[ï–¹ê:aÌ:âYg1§0ÑY47Œ¡qÒ¬P¥MeÞ=U2_œª™G,îåJ©xTóW³H•î“Ì«¨‚%óM5…æ&ål +ÈZµš‚ÂŽ{n.ݱ°1àþèÝö€zk KЊ—1Žåp@˜µ¶kÿuëÖµ£fWäªÆÄéIáS“e®û1›d$Q•µÍŸN›"MÁ–¦`¨5ÒÜjmo÷¨a‹Žb?º:•›˜HÀñ5EjÄ}hB££ïûbF^Õþ…-M¡æœ[«Ýh*>1Áúíáž½_•@0 4…Z‚mž„Y´_ä[ÖŽ*«ôiÏ�ˬMÅ·ìí�Z›ðš¾¹)n†mÉ¿§)@3LØo‚ª3€Ñ[•QÓ€óÖÞn”Û„L‘ÑdL£íFþ]a/a¯g8~Þyê"Eüñ)|Y?šMhëmæ(KvÇ20?ÍIí‘0,m¸½…hQ>^-:±3‡R€Ðec¾óI–ÓM°'h½24Cë²2¢ÃYÿ¹yMA…ý¡–ß{ªO5‰òM‰Y`:EOù&;E{æ3Ê:=”k Ôêk"›vnMnÜì)¤š€ÀO6%ƒaاöª:² `¼L0¢Œh ¸åX5 ©I=µI›mÊp%R£©J ”sìEhttÐê1¦G -ðASRMåÔ„Ñ”6’øŸœ3ƒŒXÝÊ€ÙÌFÊ04_àÑ,C6˜ÓtØÎhÃjMÃË!gj"=IkUirÈÏÁjŠÎ}Qgû‚þ�,fÛœAÓ«4ûe6Ë4úp@fU'¬_K¤•uÀB–‘)(䛡B¢ñÊç&€îQÆ�œ¦ãdè8ªe}cÀÀ®Ð·@YbAV¬VªÇÍæáªPÖikáµOQ1Õw‡鯻$}…ÌÊLXlýÛZ©ÿÊçúïW£›dâžžÕ¾P ¤ôÏŽcáBØ«×MVÝ{(ÜcéÊä:ï^ÝKhSY¬&ÓK•ÌåFªÁUÃ�a¿êi‡#mA,]AÇ}Ãú™Jß°¯õ´3»aåQ½S}O‘`s3–®|L §Õ£œtÜIqqz½ú)âo‚Žæ°³-!ÞÙÊèzîÑõì!,âòª»"ííXº2W=ŒàÍ+ïV«ÑêH¤5$[ùŒF¼ž`8�¢ã¤ÊÎ~=½#C«~ÊØ>Vÿ¯gsd2R!h6‚‡¦PyÖŠV þ檎´½BR“¹¬ô‡ý;‘¾Á¾îÑ>Uu´‹Å2�V[ÚÁc +TO ˱M½kF•€?4—nš¡ŸvÑMåÓÓ‚¨?¶Ðaf¡ð{j“ª|z §-FNaë9ôn‘}TFBÐÇh/;q2Ísép]KXôS™û€~†ÕÌ¥ÍN'«šM[‹è¥ò™„^º3$ËüsÚ˜p =ÝT&[^*DL+\¶}GÌ6l[Ó4¬iZ®±S‡õéíš gWI ’M¤%„wé•aÃ>„˜žNÆz7…Úš�“·„"ÍU¯Vä[ º^ï^ɪ ˜¯tv½{/fÚBá©2„¶„î±úȳ*v ¦Ê@‚öÓ¹4=mÙÈ("Œöàœ§ÐÚÜ +Eª~è‘ÏX¬C›Êàý!0<+ãm§¹wjZ«œêj}šîàGA¢‰jh£ÍH‘Ú$TFŽA`-š;L¹¯ÿÖ©q2ØH‘±Æ:óŸ7éqQtÆ mÛÚ«ïd|-ÃF +«âÓðÎT~(CȈÀ(rÉq˜™ÔœÆÑÖÁ¡¶òÊÃ@úý#~¥9„õM«I`¨s©ì¬ÒOY¢Ž¾ª•!„&‰•Ï Œ 7®bÆêøy˜t +(ñœçÜJ*žP¨µ*]¥µÔŠÑ^/0•±]"Ç èWÃ+Æ9Ï ±ae) ;Ná#Xd}“ÒMÖ�kÔ”ÞÔ=0×^Ps°Ö:]ÆSØc0ÏøxŽmù¹�vŒgÄ[8€ D¡öm´©¹=0G¸†‚m¡æp5¤)äõ¬õú•~ÍB¢ê4LJ@ƒ92²ŸÒÕ}P{[B-ÁH9iUÆrX–³g!¿’+9\E3š–2¦tÍUÔr£»HÕœô6´Þ3¢Åñš{zžB96ÄÎØJQ߀.©,¡>Lð¢y‚¸€b°©ìgUÒô”v‡Sú[§ª–‚°ž,uT%1%b +êSPp¬^²‰´¶µÌQ™\áLf3*]4Ä9è~?Ъõ YÀs¬B3Wôþª^8 i'ÉòQrߣ¦Ô˜*m¢ ²ù•6¡]§{b:V‹Ojn[zRsëR¼?JÈ›é’|o#5ñ +ËY#Õi^ µùð'ð úú«jshE<k0îé�œ7®ÁC{~"§uÉ£Ç8$@ñ¨&¼ÑÖhټѤ+ŽLdÌ¿£o•£_ç=£… tǦõI5«w(ˆ¹—@ +òh‡¡C\I‹»èXFvÊ)mù>Œ¶G;4ì[ñ&_ÏYÕàÛv¯g>³ˆ–Ó!ÙÐNb`H?½7På9²óѳ“ˆ•Çµ,ÙõN©hÙ4«Læ9K:ÅÆÏóá|ÐG‚§O.†Ú‚Õ`£väϳ¦”>$÷Y ‰d õg¨Þ€%Ž'bxÂVÆãPHY™Ðb“èÐ0¶ºq¯®æ€Ãàz€%22º#ò€¸<{· ‘jK; +šH@�™sLH1"Gu2™›…7àJÄ¢ã}¹†—hù‘ªY QªåÉ"t¤�Gµ˜e£ãÑ~JY§[ò^o.5©¡Ò4®M–óH,=ÄP5Üd;ß`ñÝDÈ0²~l}dQ·Ï{Ø\Í ñ—¢;¥'gb'5gþ2èÎQ°DÂU«ª¡çñqïÛœÔ!á`kksÕDmVyC(}r�öê)Þ”ÓR¹ì”sy‹yt¦3údFMR§ËÅ°Ì‘@U|;áÌÕƒˆ#R15”-„ö¾ßÖ@Uì,ô;e2Q�×ùD5ÔëÔÌ>&ÜVÍ™ÄÁ£†‚ýÂAT3™Y™ìâòœ×¿ª³†]#wa(c:æ‚ èÎ2¿Açoö!T¥²`-0ð0†–qeP²éËdôÌ^è +ZI¿Syÿ[ÑÒg&ÃÂ:é•„SY4£fîöÕªG" ÁUCZñ +¸n¼mY‘›$YŠˆÅŸNνçp{(T•´Ä[‚Þ‘\¯ÔÑ‚=Æ·x•îIMóþS³s–][HES¤†”òxD”•~6T�,Ï%1ab6£ÏU_H–v¿2ÔÁ0@tVÖèÊj=“¯!ª(Ÿ›aÁÕÊ„jvŠñ[6W¹½ûNBµd¢)GåBß;q‚šÁH-©Æ4ô‘˜UÎ&Õß…mؾ¶Epá+F|#ýÕ�!q(›Ug`ˆDKSèšAbB1E-•Y> Û1â Eîƒu†šÀYi[ÒÀBû0ò°9päƒU¢ªþ8í",.jLWºAðѹè„MÁœ˜æÖj@¨Í 1S]·àÒ�SOÅ31e5�†§eÑ^±@-Õl +!€§:”7iÀ2 ùÈ¿4ÕÒ´/dm ™Vàôã“)òÅ}Ø»qUµ(D0IkC×æ!¢Ö£Z¾ˆ3'rÕR•ê-€8Tx/÷dâÉ}aTªR+…�…#Stj + h%F£c'œ!òïÃc±/ª.¼ÌoŠ4Waâ6³†Ò‡½OÀtÙ~ ©wtPÑiyævÑ…Ãímtß]Õ.ô‚Ô2«ôÃ!ˆ“OÀ*”1 +BÍÚÈ;£oííµV©ƒ\M±4ÈS*Kƒ™ˆ'²g×#Ú‡ ‡ÛššÃï*h²ÓÃxÇœÛÕc8ÐÒÒ\5¡iFŸ=&•e˜]fL¢tÎÖ~æV3©HâMÂÏF˜vÙ.=+Ùíb•“]|¸—ñÅdvN+ê ˆX(2‚ZÏöç¡Ï›K<—x)ñ¼¥àù4Z¿m¡Ẋ¡b›‹={)ö°%ï¡ÁLñ@0{ÛLn¤Öh#mÌ:ç(Ñ©xÚ:¹4ÅHGeÜj5©TuDÃvØy¿õ`ñê¿ùôçªÒ¯ëi|5¬¥Ñt=šGÕD–þ'¡@øI†Õñ?þ‘wDoX—iì[SÒ9hÛpt§i™d{À{de8>9‰|õ*=užîáàJcšF¶=È"öäž#U Œ!3à\£3ÙŒŠöÏzÅ@SqʳIA¹"¦¤ãZ”ê¡ŒÍ9r&b]O–©¾˜ÊMj·„cø3,Çz“‰ðx禖“¡½·]·ò`X©ÁRÉ93«¤O¢''ý±žbWLÛ¨Só9Ï°)üK^Á9qÝa²„M!“ñI3Î@MDõ)=¡¨ã9bÑÄîáè¶Wy¼Hg^ÚãH1RK5 €.tZÄ9a×háiL±k9Ì&åEÿ_t5*âx +Á=$ñ€PdÔ¿Š'ÓJê•g¢n¶/5 „µº\bÄ'§–XKZòŸò‰“[ù|LdâZ*†G=Å8'‚*³8ÆáŒ>a8zçÇq}ק”ê>£€L±.†ØMmò²Â5¡Õ6x÷è1ï4ÃHeѺ҄öo–nö‡Îè;kh-–é60ÚBÒtûçKШ`±Ä: 3@Ç'l®Ör’^ŽÃ°9‡˜Ã`Oi N1mì!;MäìAÃÆ„IŸ<šùK¤“ÂzÐNzJÄs3PO#©b¨žlC¤QAs»IÔÌTIJsq\%Ø@{i¿•œ#®Y¸t�³üXgHK•Ò–ßµhüN9ÝŠžÆäMa7kO«‰œf¯ITÑþÀAð6WCñÌõw +^K7´œ´z;ʲ˼b…gE„œšD¦3©- zxSÝÒŽõÌÅ«z•4S™U)"P‡V =8â™)ä L•Ò³ñ‰YŸžBiÍgµbø²lØÃϲ@Ö£LhìWÍbXhÐO-8'²Ox%z*¦õL +¥ÇŒŸ¹è&Ž£;ê§ ·š["—3žIP=4õÉŠÈñ,¢^ž:ügƒË%ÙíZÌd‘ÒÑ(‡XéôßQpzè)žjãÏ:`ÚØ+/[Í ‡ƒð‘M1¾l-໢”!nc,k‡MÑ #ï¡`1LmE€5§ìØ?ž²-ºŒ· 3øUÐYÄ!(J7ªfÑ¥4nøáO“À~�ø/jçoÍímUì¡È5S°‹2MCé e£PW=›ÉÍ'ïrûîå##ÓÉS>ÈÇuh-j£¦ÌLV§¥Çg%‘(hÇ;F5ÈζԎ–Km7ݧyiŠ¡‡ªŒzÀ.nnooE΄5"(òå + ;“Rt'(cëÈ�,Š–šDÍ“2@ZfÔ}¤,@ÒáÈIù¸Æq4¤Ã3)@é4a†ó1˜S¨oÒ¡ê>r~öaÓ>l'?ìzþB„¬úSQÌ_L?Òh+]QãéÕSëד£<cD˜q/vOxCN9£¡í–!ÍM°`œ½¬_)11èчa\|Ð 7 °>ÒÆ|ãÚjÔ+Ì´ÙBgoÂâ‚´„#mm²q!FžŒ8*+‰ÃÂ(Ä_aôœ*yËÕð@áéÀeÂ@a×(¹9 +/ÇG«IQÉ—VS³Ä¢ù)”’“"£xÜ´Œ$µ¦~-–kJg¤‹›Ñ5šÆÕYØöĸì:c4' +ü%#`mæl–ÙiŒf‘¢xF*Œ�‡¸Á˜4j›6GW.jäjV§òñAã’Qƒ°‡»³+«ˆ¦">!^ŸqL2=£‚ÌžÒDœ?`·™¹P³fl'>j¡…ä¼ÐÇ/ÎN°‚êÅ(€ñ7tÖô4c{ö·'`‰²Šˆ +ƒ¼¦&f¸Ql*9QÀ÷ß”ƒŠI%féð£¥àVò°ujÕY-5¥B#ó8ÒÒÖ!³oZKüÈP—tQ£âXqn0~{Uy\AT#SLºÄ眣+¡¬@&BB¾Ãh}JØPNUÚ--�ôÔ+ÂEbÖËÁdÚÏè"5]‹�‚˜ßŠÌâfôºI*Ö1ÞÍÐ:zÊÊš8» Š$DQ‡¨7¡÷”‘ŽÌ¢ LԚŠÔOüZiÄ;£ùp4>Gããe¨´]«‘²Q7qÛZÁ0pÛŽHeˆn‹TñQt¬oF'{Œa†Á9n&TÆ=•Æò$¦Sò†)Ԃ花¿PœÁ�NŠð‰àñ°tô¾ÇaÈà112?VÒqf~62x·è/M. +ËD'oÎ)¦¾x¨KRqÁÌ ‰=(‰ÀÌÒì>EÀJ”΂œÞtXÖÜÄY;ñi僄ì-,žMA§0 E· +PâèUF…°¡R‹1ŽÁaâ¨ÞØÀ¥ÇÀh<‚Ê¡TâU, Å‹‹?®«™þ23[”ÉD8õqÍêöÓ¨pÉQ Ö…R•2V,J�ÊèŽñ«àðDEhW3ªÞD|‹àV’8c9â(–‡ª„f@IDî»fˆÎ‘õ‹S¾*1ZÙ‚ +à2ª)ÖžŠON%0h«-ákTrÑ)¿Ò ›âµÍȵà ¨™‘`’£�´Ñ„jp‹P/Y¥À3Â6w½g2¡« €?8'hnSŽ ÞæAu(Ëz†zûº¸¨R?>Iσ^ókÈ‹"¢õ»yé²&ª¢(ÝÅÞ XfÛ¹ÑzîC–§è.3 +og/äëÍ{ù Ë{ ²Ó‰æ¼Š–r¨^Æ»þ‡Tº4 …Sj.!\Þ/>r�K�|—pN™(MÇâh͇i8 T¡ø½3*!pmK:ÁwXBÿå�ËÕˆÞUŽÇÒ ]!2ñ‹µJò{´RÅ3ñaVâ¿&ªü¯ùÇ`‹ï2ü8ÉT€wDà6+ßs(#A¼(泟ETöIƒv«þ¿× +ÒIQO‰h‘«-5Csu"£˜ +a’»€óAAÁ&ÄiC;V9ëlƤ}M›4-ÍJ +XN2Äål¡—½NÉâe¢&~M€ ’Ö†|,i|fR „FV›8T‘šÍÁÐãRs5iMJñœÆšA§5@r²O Ø™_YÚHY~Pc9“,’ r G ¤>^?_V÷ªDT[¬6NGß[úJúªH{;HèÄk[”KžŽgBdKÞl°6‹.©Ø,²½Ë•â5�¥Ž£1/Q ÀÂö„R= +=•¡„h…Ä`ˆØ×°$Ú•Ã.RdI‰ô8E´¤‰ˆœ×;Ï\2e4åÆÛÖ@$!cU7I7¨¡ó*£Z õZŒJ9¨ƒ¤ªŒ’i?µaF3åR„¿8Ù®iî“¢Y²3@#®j‡…œfœü@áP›r•ØÊ™«;Dp\@°fðns\IDù&û3Á&ºYa°žÍ ’» [ä@Èþ û¥ò1ÍÁ@Xž1´ +Æné¬Wžaڈ͑v|Ȇ²BƒELiDtc9I5ƒî`y0 Ò<ówY2'†#8À[l…X¥À³"*å,ž+x’ÂéÒÐéØfð"Š¦ÔˆN Ýfãš?©ùsñ\”ļ·ÄôLJkJh“zS2nD麗ô�Ú aŽ˜…ý…¯V”¡)!©å…RÕ¦Õ¤Œs™DäL¡i=!d(%‡ùƒº1kë¬Úë`LßfùªÂÉoµª„¹EÐin ©èSª¡ú'õi!V&9—"“â dÅ2rHŒ”AlÍ¢¡'ŠO˜ÉšFaM4ÇF:‘aSÊ6È8°/“EêŒ4�Ü’‚7`0„ –)¼|5 +nQTM«ãñDœ":“šé#IFâÎU0ç@¦iYhBÒ?)’gâ“9è|‘Ò@¦©þ¦F@zHŽ“IÚ0Ÿ�[䶳º¾|YÓ@—%°â`mÈGÍ'P9{b(#ŠFÑó¥Ò†¶Ù•ô0œ¼0ŠDÓ2„½ÁZú–öæHÑ<IqÂÁ +W¶ŠXòD×›Ì(b—h›óº¦ý"5G”8p<±ˆ¢jFi@Z»‰ÃðªL:s³xc‡Ï‘XÚqqô³ßãÜ£{4E[nfb:rn1ãÔ“†3 „Š¤(-Ëòõ²A< ˆñ +ð˜”3ìokQVh$%¬ý8Eé�Qq†‹g³ZVEÓÑA~v�~)=½”ªo ¶sÖá–‚¶•ÀÇLK›&By“F~Ip†ôf4î…¯³¥{òþñd:— &Èø`Í}ñ, å cMÀYš![ÿ$ð $½Èh×Dé`C¬dr€x}|;“@•¢EMôås~È—©I:Pùg¯3KÐ ¤/!Tam“%M×J +¦LF³‚µÁeŠb\šl–Žö,Jxml…*™¡ÜðçÐ-q‡D9fµ'uÚäáQAŒHÝ“Q“ã¤Wä¬1æÊbC–@ÒX=—Š‚Oã‘#-®(Ël½túÒY5l*ÀIè3�}P¯”™k&ÙŠf‚ñ¤6ÁZŒPŽEY2¹Äžà ¸Ã±šb[iömÿšP[k ðÆ€•Õñ£è×4-^à³A\²`0&4æKôÈ7q(pŠÌ+Ulñ^ÀÄ™«Øˆ5ICì#àGöú°ýS e¶Û´…ë€`è3†t/AÒ®SlB@øG1žI¢ƒ<`ÍÖö@/sÑŒéL8ÝÄê©X¿~½{†Š³i +HŽvy&û™\eqžªåßÅÁ?£[†àNõ§šŸÂˆø©é44l9#*dž¾†6ý:¡Õ£kVô ]„P¬À‹N%. +Ž©ašm8„Â^‚…BùîRj9Iè’'UÕÙ>Cc–ÖLQJ(íÒ8Š’1 ºŠi$iûPìKMá^Ý …o8[6ËÃ’$DŒ.ª’É¥päÊáÜpw3PˆÁå„Âqx)b4ƪ'¶4ðN…®Qû™%Â/\5óF€XÈe§¬x9K”í6 亶°¡övºÄ!Ñ2ÓØÆg%â×ZðÝí~[Þh©¼¥Å¹ÐW[°lú1ÚxŠõ{ÇUpžÁ¸=â7¶ÖÖæH&]Iñtsš¯Â •ÈHv +•Œ€Ê¢SZLˆÍ^û¥ëŠHq=CùQ`{`IËŠßñ<agiqU-ªiñif¬3ˆg2zÆÙ®}$¨ƒ`Ÿ¡Å.ƈ•a—ÔñY²±˜ˆo!££ àHDþ)iÂTrDö„ÊÓfI”¤àõ:Ç3€f(ø4¥‡IxͨÌf3,Ô£C¢b”÷š×*ÆfI’ÐGºÎEÊh+Ëÿ,[1Ò…¢Ê�¥ù`×MÖ‘åé§â $M:›GÓåƒE®ÆZ&,k®Õ€CO‹ãÇ^T‰JÆ¢¤œÿÿ¢âž4Hú‡'¥‘Ò0)%]:hh®(«g‘ý‚ç)6ãƒyl’ØCØu\Õô¦/ Û"ƒ“œEâáÉŽ:2³“™&yËËÞ_Àæù@ ŸŽG5_/‘ñžPìòŠ'Év^!€5ÚÏD"ᜯ`‹2‹Ž:`hG`ooq¸ÁXi>F˜R¤‚ +ªü‹ ƒ²T<43^y]Ÿ*2*¼ˆÂ\õqŒÉEîn·jlZ®4‡0òù²ƒkNëêí]ÖÄß0ò9ðx¡üÓÜâçÁ“2‘Ô‘dë£!ªdj†—g¶þa»9L&rN}Í”]Á«êÅ{¡DÞØh›¼˜¸G }Áf‚>6룓Ær%·¨0¦4BU2 …Wïàøè˜, õ‡‚§BŒ7ÜÛ=ÖW"µVþR“ôãxD'{c7±˜°?”WLœŠi7%-±æEO²ºÙv\nö"ÁH‘âÔ×q-7ãKOLøfô_LMM‚¨ ‡¡"TÛ"Ha,h|NxÒµGÚ0'^Ç ™JeQƤRoŽDÃT—ÐWˆ1Co°ï'æSAæØPãPœøs+¥Š¼ØYÄÈiË]FN©¤,ÔM‹9¼b‚Qú0†GeòØlµ†QJ€.ífÅÔƒ$“â&Y™ üéÀÖL¶EK@X°)bƒd˜y[D €üA$À2Ì k°Ÿ®ÌW±ve + Ý=4ìÕµLJKç2“M¨‘‚œ˜ Ë„^k€o' {Ò™16¡kaPÔbYy3W¡™›"Á)û +•HÑ3›É±æ–îÊ3œÅ¦xÒs0+¤¼$±T¼¨*ÍJn ðF9ǾÉY–šB*_`dmataÌbƒDo®|pTtôS¨´á6«ºw!¨C#¤$¦í¦Mo6·…0PQœÜ¬Ð ¨EöŠüK¡¢š6$)ñ†p ÂϸÓÁÈÄìç=k¡åe] À“5zÖ¿Þª'/¯) B¿ÂïÇ„¡váï�9ˆ5iæÍSjT©|Ù$ôqÝÍfŒ<*±$›>à‘Lèðöb–Õ±\e[ʾ +l»4Bñ⓬EŒô<¡J$HWÓh“'‹2@‡È8yMû†Àu<#Melê]ÈšXɘ¬ç½¡åÔ3)%•ÃŒÄ!à4¨Rʆçâ1Š¶xŠsi¾NRªÒ@°1ŠM³ì +ÅVdL¡uSœ _²¢ÀŒäimYBÕn’?å(r½ghS$¢y(€á04Û#-m :¤…sƒëJ a°mb¦ÜP…9@dП4&¢–þwMߺё¡¡Õ¬¹5M¤Øu-àF’W…%d'4ÔGÍ'àò‰,µ@zÄæà@)óW&&¤bFHÈ©)Òbê`6-ÌfâiÜTb.X—Ë…µ‰bF¶.aef‹´)˜˜‡2‚ÜpzpxòÆ3(³¤‹£&–*~ùÞw-ÆÂbF› åÕ4)áÆõÐÌ‘ÄžqÌG¸žÍ#eS9€tÔT#ƒÃ“¡HQŽ™‡Àx Ç1ó¯!O/@R@eæñF}*E<!´§¢ëŒg€L>0} ÔA8A…@ëˆ0N“ªîÕ°DSˆž{4¬aÑ>.+ÌQª«LêjB‘¹Á0ð;\&‘ôª¹˜J"¥¼ÑH B¦a9t“À}Iá ±˜˜½€°ô”žÕ|ñwÊ�È$EŒžõ< ˜Î×$Ny¯ðÖ‘X1ex$•ÔÔÛ0ùÔ”4ïŽù°eŸî£;rO–ÎH™íœé)[«ÏÝʹÚ÷NïŽ`iKxv¬©¢Å‰ªKÚðË9‹¤ÑÒ¤ +“hrÉMå’Eƒùn-ÈIÛº/=Ja´'Ú,—Zf +E³* +¦0ªÚpT.:ש;‡5žÐ£›äTn„ËZÎ6ÄxWãþ`åß«¦´Óg¡»sð¤ŽßnsîWVïÛÙ£¬H§æåìŽáKL•„šJ“Të3ßñá\uZE›7%X›H¨äþ€Îžþ8ª¡× ž~Ëù^ÄÔØ¢|"í9ÈC§«¾KfM¥hÐŲÏ!^ïñzâ˜S$2x„+¬§? ÊCå膎ٿ0© +AùsYã/? Ó\YÌܱ’ªŽÓ£SÕØ´š€eô#v¬6Õê°JìSÐX„iW0†^äãLÄú£}JÙé„MûnƒywI·r©8ƘŽ£!ë„ÒÊÎh2¼[¡%&1HMC_zÕMu5ô·µ$Qe”ð +™"ƒ,ô0,³$rZÓ$ÆòS´YÍ`Ã.6W4Xüå…kÉÙký•³üº‚ø0š%‹Ÿudh8ZÖ¾ÅNaf¶ø“[ü±M–·y*Ô29N¶¸5w¿pPá@{K5dHZ0P"Ó´‰QVÚºqÌÉsJ×˽.å#nšî5ù>Vù ÁЦØtÒÑH¤Ù¢î^´&g_·ÙWÓæjZýÈ=+‰ë3=I<}¹)ÒSMI$D¾%¡Ö€óÏOñ–p]… +@Kœ—R\Jàõ^Pk¬ í2›®HTOâºÉxÉEÃôÄX.ÍÛòÙ¦ Œ‰+ì7ks.f2m>¨ÃmoÛ‡á¢ûw3ç%¬8dNˆ«œ½flhî?Ù—åÂì–�Sj:=+;geœUÖ2ŠæTò†0Y0„õy¬Q!»Skm~}–Q´"ê|ÀÖ˜†0E×# Ë…šË‰«v6ÑEškÕÌĈÚ;âzÕ„jt¦h4ɸJ™ö”V.AZÂÖ€ýžj®+ØëáÌ_EÔ#‹5"ÕƒX¸q¡ó&Öˆäð +!ChDjXJB19I5·…&te–í%„c…t[“cº’ Š›Ä ‘tEKÅJKmÀñH¸›-Xš6Tº!7Â"3+ì> ´,ñ¬yœÉ×Ñ}"ÔÜÚØlõ¶È-¶¨ä)FCé0Ḣ˴e6ËÒ€œV]�}â2IX÷"¬á +Û¿¢à µ·4Û]ƒí°%äBþöÖŠ“iƒóøaIøxLO.)<Äm‘Öö– ¦ûÈÝâ‹çšwèóïòA9“RøÆâÑì궿¥%¬ÌS¥µÕù—>Á`žZÃ-p(ŒZáyJà�ÇñÉ¡¤(óE/W®ÒûÿÐÏ„®»ÆÕŒk27ëJiºïÜ]¨÷vMÄ)^S¸p…\I§\S€]€õU×d<“à"(JºÆuÃ8t¬ÿ?hË€–ê²òç?láI0Ђ^ÓÍ8ÿ À‡ÎÿÁø,[îr)'t’"Á,:áD1ë#%Dv–BáÖÔ?‚J§¢¥%n-�?€÷¢_.ôÂX¥S .µLÆšš¬×Çõ”@g¯¨D])¶éHTÚ–t<ƒ=BMÑj=‚VZá¶@`)µÊéºB%«W‘⥊bß+�(ֱͩ0g`Ïõ€"èM§âö7q@ä&Z²Éø„{)¶Éï)ƒ*fsSñyÜB?ýÀ&‚÷R±\Ë)P¯i ˆßÅcîMôÀ2ñKG,C°tÁÒqKG,K°D4ÁñKD,S°DTÁq«ˆ,X$¶ ¢�Ÿ«,ir¹\¦knŒ" Ãn6ÔCå|Œh2å× X^©‡ÍÎ ¤·o° `åÈÐj€uý}#}� +ÔvSi�at›ìD3‚͉T¹Û€æ¶ÚúæSZeßlöÃÝŽöÉè„#Σ0«Gum÷q†õì¯)îí00rë�G õMF1 +›Ü3¦,)Øæ¹-°‚RrC=Õ—E&ðÒr#;7ˆú<hdž ˆ§_Ô½'jÎ×ÅEOÎïK® lÓ#šð8’ËYÅ„¶:UÅx_%.ó*õw™ßBæ·fžÛüvþŒ8¶ÐÏ +ûT"°Áˆ9sbòKX~‰È/-V)sJ/,hÌö=dûÞlû¶}ؾ·xç +²lª&ŽWy©V9¢LÂ…@e[&Iµ:&)V§c鬱ÚѲ}9‘ÛÖš€µÄûˆ#&µl•hª$‚˜K×s@-›Ë¤ø¸Œ¹›l;häÿvxÍ>pÄ3E¼;“Qg‹½Âà«+–¡ áHEðZ’ksÃ˘âälneƒD›cÒÃSNaä¨PÐ=ž2Ö) …¨\]©g’b¶2ÐÄpÿðF˜ßJš²}q%Hæm³sd¸:ˆ•îÁUk:×»£d0³ÞݵlE—XxyJÑúyYÓp×ú”‰ð±¾X94²ZYÝ7Ö?Ô Z{½[éîÂFÍ!.7Ø®[^Œ~Ïz¬ith6kNÁ×%0A£+eÙÀšáµcÊØYÃ}ÐtFÅuèkM÷jüÉà7ábxD;-gktuZ²³Ð>t*è,T¾³æ}謹 ³æò…÷¡³pAgáòEö¡³HAg‘òµìCg-µ8:³7Ï—õô냿ŽN8ØŽÕƒ´ÙÇáËšDåb'¨ P—[ ºZË?¦cä„—¹:*)]8¹L«ñ²Ê~³…Š¨d„ð”E°òñ‰×’K¢¬,ÑÉI '£GE*—gs=âD;xüÎä…$xŠãw(ïwsÞïpÞïHÞï–¥ûŽ×,£ËÉáôÒZ›õèÏŠ¡*YÆ‘fŽ†½48'Þ$Wd‰‚âñR«ÒL<†•¨v£²\4Ó!¹õ<¸î*ÄnËV¯RFGzõÊ-pìïXÕ?ÛàǺޱ~,€ýÙ΀w¯œÜˆ+ã–=o-5ïPþ¼CEç*?ïœwHÎ;Tí¼C{3ïPþ¼C¢ûªçÝœ?ïæ¢ón.?ïf9ïf9ïæjçݼ7ónΟw³è¾êy‡óç.:ïpùy‡å¼ÃrÞájçÞ›y‡óçÝW=ïHþ¼#Eç)?wDÎ;Rí¼#{3ïHþ¼#¢ûªçÝ’?ï–¢ón)?ï9ï9ï–jçݲ7ónÉŸw‹è¾ø¼·*ùDûî£ 11Ó3khZÆ’ñ’Z£×Os4,º,„"q$1dų\Ø“-®Í½0Äk–÷Óh\ªHZ/f`½ÀxÄò—)K˜R ~€ ]÷šý†H„WSz†‡Fàš'Âμ ™¥S+/A~hÍÐå±Þ.{õ0U7ìËKB}¸8ë4…H¨.£E=µï ¬4ÆY |æ2J¥êa²7”üÔd!;:6âè4‚ªr7PYìÎ^/$‹´ù#ÄÐæøöºm-/hŸí{ˬ›/Ø}zjµÞ4f2ä[]N–œNŒ\ùbÇñä¢úq}ƒx*šÈÅ4Åm†-Ë7ªo¾"›uóq=ýôua¶+-ÓÐh¶Z/&¤tÂHH_‘ש"¬~°.ÏŸªª±˜[žQzGÅÂæsÔÂZªAK+h)Mt/§+ÓàÆö¥ÛK¨«×vq~ÊŽeMkÙ³ÚrÙÅ(#òäfé¡iôP×fÌò‚g÷;q¤ßj¿;£öòj쓲†FX“±)|‘Ç°ët±€hódD4ëµ$D¹ÜFiŽˆh¤Ùr7®¬®e±{sh84—†Csh¸y. 7Ï¡áð\Ï¡áÈ\ŽÌ¡á–¹4ÜREÃ’-’ªÑáî5BUBA!Uòlغ&ÈfCÀ< +ò¶º#üÛ1,‰,ñk22`ÖŠX$VX©b\Ägé9ŒWáþÐiLaFUÉ®VÄåáh6ì†këÉâ†r¶ÍñŽÜ`¢™x:Û¡@5ÊÇŠÊ1¾|!Í ÄÂ5:x¸|ä‰d¨,ö,¦™ìƒ.ö;’âËŸ|Âw – yœÇDgù]š…ž+Þcè�"Àâ=6@ÌX¼ÇðD™Å{<¸´x-Érp©Cx¶"ž%Q§,¦Í³uÙ7F“°¶°q;Äfb3±™‡ØÌ—ý±F¢,úË33Üè[<„þ¡¿Cèïú{IÑ«ãËã¿<Càý�…‡Â!x€‡0àÆ€JÈúº²p/í¹+Ý×È‹÷}G§"ì!lz›Â¦‡°éKÈO²±‚›¢«c"gèœ7oÖ½E,bÅ:®@¹Š†öeÇIZŽQb£¶Ë¥½íÖĦk ‡BÑn…ö ;ÅÄ[Ó m’ßZVÇÞË¡XpêÅùï9/ ÷•gBUôž*ºtˆÖ¢5‡hÍ!Zs hÍV—‰¢ +PõKƒ¨ó-O+B¸ŽùÝV§SÀûHÓ3#|qIô‘,\R»ýœl`B‡‰£%œâZÞõRÒøý�éÈi8�L…øO‘@ÈŒÿÒ¶bü§`0r(þËÁø`ü—|o¯Õj<Õ°·fªhc^à\[Ôw6ÏÓ– Ñ-*@}JS-ìû»S³˜DtfJ§hzZÊPÆg½fÎIŠx‰Ò1%"ýàpŒYÎ«à‰‰t´ºbL©˜#C�ZXŒé@EüƒP%é‘ â1JæFº'(./ô‡ƒ£PeÄÆfª^¯HTapÚqƒ-V‰ñ”±!àR3Ú$%NÑb"d.§Î²–ŒˆÉâ(À1'GðÊ ô^3]=°†˜ƒâˆŠ1ŠÌj2÷¢‹´+¹ñD<Š¹fRYÊnB‰.0gIѱQ¼‡™)wcú +J6Âéåh²VØM +qI Ì¡kJÕñ…S23éé1ç’ÂC^[c˜!g`ö4Ê&By1§�®(þ8%¹§ç“˜“Ì9!1•!~ȉƧ †—CQfuÌ’žšµ„öO|±‘ÈôÙŒŠã!:0ºB58;¼H¨—ÔÔ”Ø Ô^03™Ì¥âY‘΃sÁà4ÄPš”� ¹L�eÒxÎ÷@éÝ´hœ1K ¡öª”¹ÆÃÕÏÍÅ&eœM\:Œ%¹9§&Däh1A¨±€¡K¦—÷º°í°µ¶ü~^‚&[AJÁ‚¤9Á쉹í¶fh§ri+OÞ²P=¡LN a9:’'¥{ÌÌ:fŠjΦŠÉÑ)]rD°Ä3�ÍZs ¨Æ¼¶FfdN¡|¸EPK`¢êqÊ®ì7=xœh‰dVôö![ƒ~=}ƒÈ6÷¬YÅœ3=îîí5ŸHG[ȇ++V™Òø$±Fd¥lñ(‡6™þ5«MÂHͽ*º)ˆÝëÙü9Ša÷íܵ›P¬ŒN@Ø9äêbäÛát!\…,ÜjòËõ4'PÝŒ¶¦V¯¾®ÍdrêxdÈ [~ÎѼPÖé†mòcLjÁ}–/éâБì00‰½.æô¢ŸLƒ›×€£$%Š00”·ˆÈ˜�…)¹ð*:mäk(œØÇ*Ús”5YÝbÞÙ£æê7Kí9Sî}¢Û"¾ÇfŽK˜s¯º*.–HëÚàÎßMÚ£";œ÷H@”W)h@Ç$¦Å_q§ð¦j‘°¢¨Ã2£MÎqßhwš3†6ÔëiÞÔ¨ +HÏÇÈÍ~å% €¥eÌè· ¿Æ´ VÙQ…™<GAèðõÿÙ'›8Ðá?ò_Èñ>Á–Hs3ÊÁ@$ÔÒ¡ø¿ tùÐo™r•Þÿ‡~Pþ+I*Š +W4)L�p%55azð,`N‘—QgèæD„3 «[y"Åç—N«äÔ +*dãÙ„†WÎPAæED/ßcîuC¼O¨”"©F"žÒìÇ +n–I„€ê�ŸU¼ØpÓ!t*˜ýH#9é$Ò=bûa¬ãª!wä“D.¾ +„'ŒüŸÒ@M't¸¤r)«‰€Xq4¿xܲÒÊ’U±e<®^ʪ¬”aGê1áT'¯óFøn6ëë‚E·.g0’n(r6~ß`¾Iëó ~߀þøÖ¥-`•Uã—eá»lE¼‡ÍJGE™~¤¯‹Ææ}ûDO>nxîö§µMoDËf(;!çÁ¤¨8ÌéN¤¡ÿ ÓD Ü@m{¹i¯²¸^ËdRºødß¹ðbé'Òö rÇ^m°–Îe ¬|Â*Œ„H«Ð?66Üô€´…6°—]¢´¯{X½x•ÉŒ:òWéZý”`ø\^6¿»tÑîhTC&eIÓ’õ).f–#ö¿aÑ„¦OÐtù";1©É&‚¡6[Ûæ—ü}Äš¼aËúGºÜ¶np5aá¿*£ +ÊÐin‚\³œÜߤŽió¶Ä9‡, bÝ[±gÌ.ÕDŽXy&Ø3oš×ó(fQ$ÁÓsn.µÉãè’¦S‰wrcFæ) +|è²å[’ ÿŽÜåÜ#µXÉÊMHw—T¬ÒÓ Ž×yãÈ’:ŠÄ{ÊßK‰©v:££òˆÖQNÑbÎ6!âtLŽ0)pK:¸Ç†ºŠKl¢w¶çö˜Ô Æ„À/ö˜òÇ„à_öc&çÔ·…øqšE‡ãm}õüÅô/Y†ÏÍ=À–£.UqYÕ³öæ×$JT¬OzQ¶ÓâU—5qM«[úÁRô$45etGñö ^#Ú(£a"¾esã4ˆv£*ìBÏ¥8‡ŠŒK£y݉÷§`8�aNqØôx*Ššm?½öøªÖém@ã5šƒWÁñŠÊè© û¡¦¨Tš¾aúÂu<nÇ:lu埤Õjf“$ΆB™¹ñè[µ*P_*©6F055 HâeãoºVó”CM¶1ŠÝÝIŒv¤w%SôL‡„À2zf9… ¡04Eq²½ÑRy‘¯Jè—«_„aj˜,“Œ,C|¡/úf£lŒ†HÒª+†fé¸gDdñÎÞšˆk-x¥¶öpob»}¶¶ ¢Ëd=pㆯËÁªZ$Š +¸{Oȃ䟰ª–"mTH©¬8K6 ¥ÂÐdUªäKó5dƒö¨,²5_žXÔZOè4³*DžÂ…AËsM-ž—·G†*»J“ÒbEŸÊ»y*{û-dgÔlí#/zÛZVyóeíú $Ê1§‘Œ§üŠ:©‹+qaˆërü!柰2®o1W®j´††�–¯itW˜Ü]×:5“<Øa]h! Dñ†oâ�7Êt”œ›•¸~\iélDÁÒ¨;‘‹õp&úCÿ¢¨²÷Ò‰X‡¹ffÀß’”HÎ¥‡B#xìXq¼ ó ÁrôŠzðrd¦¡±QÚ1Ø'K;oNWªm÷j‚½ä —Ï'ì5«LdˆÊìÁN)o^jZMÄéšLÄÁ¼¤2’xÙÞ+PÉp¨ÄH +CÂñè¶à…Woyöþ’mž°Å“§Õ-õÈVÏ͇é²lEרÔ4 ’S~c³a"++aé䦣ÄöUîH@4ÐíÊk%ÆêZø©¦AäHeR]«0û¢æ×áËbYKOKC-²ñÂ>Åι»nƒì³àë²å…û#0R·1¼lçCv)þ`NÜIÌL¡Ob¶ÂË;FH’ÊÍIùÂQ¸²ˆ¬OVšÑb8%Ñ]‘I‘ØzVÄäîù$«§×[Ñ ››O–ƒS˜Ð2¾Iý=>õu²p„/ÊšC‘âJL Ôh/iÍ@”b!�ã *¶Eµ¢ •…ØEûY]Öì2¼¬ ~ñnî0Aí<kvœQ„A#—&]ÞsNä]Lí™à”>˜Ãóavûu¶¯x31䙳³RedPsØĸE›‘e]’ÿ_Ö4Ð…-!ƒ'ÚÅËld„$q[瞌¦&<JþåÑ.¾U$Üñd.‰•†22£g6 s2˜HiÂÒ@Ç;g4~@‹c +q)ÌS¤ŸÑ‘󤤕BË%BíÉ8×pŽ:9í;Rlí ©Æ,®S>4=AŠÈÄßï@b‘ÇȤ$E“Ñdz†–˜(¸ø§üœhf€t~J…0V[ Ü!Ú. DOÆ<$ÚǬœÌ4И-¶?X”eä…±0®&§–oI"‚±]ýE.kË¥ U©³¯¼ÅÂu‚%šÖ&CìeϨ�OÖbI0]©Q®x£�N‡ sí’¨¨‹'ikДHTw‚–®°L#¬5ƒç”%¦K€<šäÀöMë@ÇõI2ìˆao;ï¾!·8žÂ|œIY�VG§º‘6u_¶åÏàÒ›‡‹™Ñ&ÐÔoàT2Ê ÔYˆ-ÉL“?ã8Qз‘Í%ãçA‚´¸%¤ßÀƒ‘ÃíŸe¦†¯'‹BâYÂ8„¸%œŸPÓêIaæÃ’ÉTKˆ·näÁ”¦&ÿ)‘½‹²mʬi;¼ Ø6Î[,é�¯"vÅC)¸m‰Þ·$°ÈšJ“»«Ääói²ÀV +10%¹Õ7ŽÍJ¹¾‘ ÂÌ–$ùÆ¢0d?» Ä}±”´ Y´^BÛ-«Òš 2P[˜Æpz'ÙÀ ‘iR + Lãñ®x"Ü•b[#Â@h_eB4t>7X\þ�|œÍ–27Žéã–à€Iƒu”1€ÏY\-YmÍ’²‘ŒýŒÍ9•ÒÓù•¥Å€Ç\0‚甞òá43q˜:°þ8y6C«-[¬]œ't’Í¥ÔlbÖk67Ì㪧” 9S3 �IÜö]ô*‡·ZÐF’tdt”Å&jkFšÅ¥âº’žI¤ç˜1³Ì]H”° Ó"Ll¬L>Û`]åË"^aYHRF²r$«B!¸Â+·³p¾xl³“wçÙ%ð`ó9Ëê‡]V^äÂMM@zˆÞ’zœ8M»5D!s²´à9ñ¯¶Çv±c©}_,+p7/õÕnUÀìZæ%µÿF€°ÿn‚dÿ8dÿ}P>xÿÏê{æ„f×ÊûiÚ��31Ÿ”F�•mŠF.nQP¯9ÅÁ¦%Ždp#´ xÖé•JÞDÀ- +|Îê™j:¹¤TĪ媥@(n47ù1Çà$Nô8?÷•"\ÔÔi˺˜ŒlÂ7Ʋ¥. +fÊ"b…ôUE,‹§ÀãQ6ªeë;œW‰fÏj06Û0íJ2¡ÃÿS’;Çðó7š2oÉ1Õ¦ "ã =º©4,¶“©î¸Ø^8<ÔùX›A‘p*ŽQ¯øeŒ„#w•^ ».p_‹½O´»Ø«µîOŠµç´Ö}µÌ>H‡TÞ#æy1ìaªÄ‰ìííQVŒÉÑêÁ´ÄÙª¶Û¹tä*•®z|V«Š!8³ÑF»¯GuçUê’³à þªÉx"4—x|Òv±6`½Û‡2:ðù32ШÇ!3[–õ6iZÚ@AD/!XÛÒGÅ t ÀŽ2¦Á-]†U,øœ*P?ƒfj©M<¬hTÏÄ„J‡:âVIªRœU•I]ùo‚Tr DË*YX8úÊ‚ô}€è•P*ħ5RE@çÈã3%Éø¸ +ä« ÀÐçF„¢›V)™”éä!t^›ƒˆM„‹GJ3Q`ÓdFØ·˜\“ò`±g,sÜZéÔ°áeVÏPo_×âDv©Éã —.0Éñ„äÛ]ËáìvÚÄ_\ŸX!¯èZï^<™]ŠíYÉZÌ–|ã¹lø†Éø„Y®©¿,k¢q˜—frÐœe +_ÒßEG{"ÒtÀÊÑ"c ÊÀ˜+Ä3!ý¥ÉÖ;žF‚P¥97%dŒ“°?è‚«Lé3;"¡ˆ—å6IöC-â‚®t:î^4@\N» + çdU�“œËªYÓ.šˆŸÀÅÁ`W š{"MÅ'…³N†Î‚ôsÁ6ò5Èöø +½ÙH['Ÿœ+'X:ºà#-–Tk©èöL:IÌ–¾ÈÌ›æ²]ÁxáÌ;5„§T4·%Þ*Šß…C Z²tÊ$AÙs[ÎD–6ÿJ.;a›*Þ™§X†ôÐ5ã�ÒGž,©¨Yv¾X;2HþQähb½’î(PbPÅ}ÀúV»#ÓúŠ5ýJ=Y{Ù¯Ä6¾¢6›‡ú„JæŸì;kJ6Í*>¥¿#ÎÞ3ÔˆÛKçw+ìܯ,]Ý=8ØðÙ�Ü[Á…{aÕ&¥%Œ¦$ÐFL5ðj»AwY7åvÚbŠ˜*²â¼ï–›(ÏtÓZjËä@€Ó„æ¶æîF¸$â—- £Œ>p Æ¿J £É9îO +[ó¡ÛîˆTÀ{ìÄTÞ˜_©vÉ–x“—ZîjëX¾íÂ%,Ÿa‹ÚèFPβXNLáÆg} ±£Ó‘Ù~DZö¦Š¹†„ËáI&&rFqà+'®Z‰öOS9_Ùq˜�l¤°L[У'“À¨E�ßµÏÐk‡ÝA%&Å +µl + •ÄÒ– As”ñ/¨Æb¤ÚN¥ç6}¨=%š»8ïU4—˜»Àn§È4ªHU8\+Ö¾,Š…EÇÇÕ-0òÕ¬ƒ"€} +Q5SgAî +$÷+:ò‘nyâfk¡q³u/èí^¬:²+GVp:ò1{y/å<8wŠ[œbò6¥ËV¶:ó·8[ò§„ÝÂ1•‡VÊ4WÎdsÂ.¢•Ú¯UÀü¯“âO¡'}nZBzê„>)nCyúH¨š/¶eÃ[Dñý&Є•^7 ¹ZjºÁþ9aŽ}#}#îF¾9’ùî*æ¥B½ˆÝ³ÁÚ‘ŽÂÔ{²3SÍäˆL—Ò6ÀmQž|¥Ä‡|fã< +5ó›Fœjk9O!· çeP +õ‹WJ·îH¡eÝ'Î5Àž>Ez+‚PÍõ©>´PQT<«—pÿ¥Àœ;¶HLµÁ¾5«¬„"Ìâ0ŽàW6Ç;¢ Û×´es/»øy‘•Òjæ9ìðùUuD4sX8UW2ÂâZÄbê'Q›>TÂtñ†ïÄ9²!⇵]Bë@CSźœb-¡Vƒ9Ä4±8¨2t´…äÐÔ+ 6!ØXê–ö?å’ö�~MÍD§ìp…ø_-¡æŒÿh ’ÿw¨¹ùÐýïÁøì…ÿw¥ÛÚz8]äRèðKã§Â4ÂåÈ0M"ª[ãºÉ<9(a+,dÉhÙ.*º›ÝE̼—-È ‹S„W è=[’Š .ï²Á‡‡FÇܦ µ@妴4€6vóTÜÜJó»ÝµÕž¸Þá‚2púr‹7oˆqqÛÌo‡†qfV6:YYD+—Ê7ÆÉ«UÐøTÔŠ£Ù¢³‰Öõqº4Ràï2Àìç‘°U‡|;O9¥€R—)Ô9»>¾Á6^ñÄNô„é~¯V‘•S)¬‘cÝÊÛ‚«À$Ò×4¬;5Õr´cF +T\x.†Ócɳ¨.¾Ø¢wQ˜ý®¤óoó®ã2úL7*Ù‹Rj\†50ù°‡^ai鶩"ù +y¡DoHÂ(¢å È^娼´|Õ5ÚŒ½ªýgimÇ^·µ3( ³Åœ)%ZËx#›Ö²È;ì,‘Lc>‚ìŽâ÷ƽ£ckà‹á7ÐeÖð«üÇŒydøQ3À‡A 4¼æ¹P¥%ÖÇSPÌjj¢ë®ñã*±\29«D‚,mn@x¹DÍù²ê¤ß&& +∉9 Ü×½¦d39Vepà´>Ås2?ÙgVAj”ÍèˆUó_7Ê9Æy}ЪYó8ªæ#ß‚ÊflAþp¶Qò¸Ø³pØ“nóZŸUeŠZ&�&xkd¨àQ'rÄõÌÚÒay@EáípËwX0ê"@«'8«7ÁZµê°êºQ`¿NÀÐ’·Qá´oÓ1Š€\äuiP9ÀäKÍØLÜ ½pT×7ŵ³Ã°SÑ®êâ¤Ó:×@Å· +lRP +ãK‹Ã2eúˆôAÐi½/Ñ Th¾¥ ù,Ƽì´Þ—hž‹9›·^‹{2Ì^wÃV½Î…3Ê¡”î3ƒ8�Òˆ~nÔ±ôq—ã³øÆ6’(ß + g\$”&Sl¸NS¢ñˉ+º¼fDÒ”b†ùy¥�}«b•n· Ò~·_ÞNš×ضK£"§çÌâ,2±àãô£NéYŠÞ Rp}f±Ž¦é§,[ý te¤QĆñßg`] ?yE;_Ó•?›â'”MÚlÉ‚±øˆÈèçœWªi-OÑŽ”¬ùà~À<i]ðD´›ˆ¹²±¼|—“£‚ƒæIuˆ@튉æ/µdôÿÇÇŠ}|àú¨`ÿÝ…¥ünn&ùž’ÿÆgÙrŠ£ä!Xƒ½Ž^DG`Ý#~¦èH¿–ºD˜€F¼Ï„ÄÅ#‡ó®]àw†ïÎW‹k-ƒa΋Œ—^Þn9ÂCŒQT5s „£S:Š|ÅHɹL›ƒÈA˜ÊH‹û-^(/¦D)Kè“zçÁ_dfë.q«Pó¨êÕ”žšM¢ÛßÞuÌÝÅS"E©2|í©p˜r¾Ñ*…ý…;Ó +ÍØá¸^Ú¿žÛ}×Í:ÖtÜ!º +]¡ÆQ]¾<"Ë™afyÐvÁÓ’4׃a¯5ë&`cÃ'0&:š‰qÔ1/²]’º,·;¦†2³s2e5>xÞp³öJÕÂ;<gE‹a)*¶Ú&¥ˆ]êaqyf¸rvc}gŽuôu+hÚÑ鞎g²95Á)cXc62´¾µÉ=”v)É‹¨\fûÇV’¯]<Êæº1tû“Àsã …DŶêt7hP1ªB'šÙ-9±¾-Y-…öŠ¹w琉˜0š¥í}i&§ØÎVU†3ybŠQ+ èb›Ì¡#§x£f8è-Šb ]X¥¢-´À¶ÎÅ-6Ù]ÒŸ¹CpŒ\Õ6_vEÛ‚ÎádY4Álä²µ]üjx©ƒ|1y +š&¬œ=ƒµspô’þÛ +[ZƒÛBP'1ˆZ°f4ÄZ¬èbÚBZˆ³Z> +·XÐQNC½GÆb…Þ![‘¦ëERS“à4!+$û‡�K2¸¢KŒÙIþdkÛ¤dÞ2bž4zóTþbêðÜ=£ù¦ º/;›Öé¦ÐYR.M#‡ÄËk‹ãØýå�” þ?†(¸“‘ Fw2ÿ_s%4Ú,‚¥âu*@;;•¼²¦BƒÝ×›¯=ÿ·å6LèÏ<þoó ÖÀ/Ý|÷š-Q'Õx +0buµ(ñAVò2ÿ'y’½aIx½æÄ‘˜¹.ö™'q9oÈo\ý(I:I¿ªe\WžÕÑØ”šÚD_òÓHe^s@”É”ž´´¨iM¢"”¼›&2L‡<ºPGŒ¾wY3¤Ïôê‘ÈE7¡Ñ®6¥8iU<»¨D.¹$é¶õ�1”<¥ üÙ\øúœˆáÉüF@„\¯¾ÄRÄ DÔõóê˜Üƒ¬ãRL¨É·ëXßr:Ç&±q*›L4X æNéøÄ-ÒøšW]3&[(k3VY™S]WU±‡9•tW_³vp:ŠàÂä”_Ääè»dŠ8³[ׄTPL~à?R�ƨ–¢h™³Œ +ú¿¡']FÛœ‹g´Xc‡*7k:´‰#…w3kP¬3᫃¾‹±úýþsקø +ÔÏOɈ1%KL“”6<^Ÿ2'-Ëëñ† £—ݨá/€ù[’JbPjeFOâ ¸,Fº]Ÿ:Ó·¼f:À~Mnů�÷9e(áL]2]ŽSàåëÍý"³ñ\ó¢Ù8éØîÍAÿ¸³Ñ¹ãþJ}9óåiˆe¥úû˜Ä÷�öQÁþSinn¡ûŸÖæH8l¦ü?ÍÁC÷?ãC¶Fv¯ø}Œ`#ìy":�o#óÔÞè`KóZH;š18y>£ÉzÙÄ€H¹…ˆˆ° |^y{ + +3Ç%B…á÷CwÈÕ}ÄÂÐ>”p µ5Rúü+ŠˆÿÕµ`.è` Œöß‘:*ñùÿüü‹ý§x.Ê + þWèþ?Ðni ‘CÍ¡À!ü0>fSWª³GæK=¦CŸƒ÷É#¬¤jñ?ðHsÏ? ŒCøÿ`|òöŸ²™íov`.û£ýWsssèÐþŒOñýÇ«FŒ¼µú(Oÿ[B-áHÞþG‚ÁCþå³j`e[»zÜË.÷Kúý²—½ìå/ù+^ñŠW¾ò•ÿõ_ÿõªW½êÕ¯~õa‡vøᇻ\®ùóç×ÔÔÔÖÖÖÕÕ-X°`áÂ…GqÄ‘Gùš×¼æµ¯}íQGuôÑG¿îu¯{ýë_Ì1Ç{ì±ÇwÜñÇ 'œxâ‰oxÃ`·-Zäv»O:é¤úúú“O>yñâŧ¡¡¡±±qÉ’%§œrŠ×ëõù|~¿¿©©)ƒÁP(ø��#‰´´´´¶¶¶µµµ··wtt,]ºtÙ²e]]]Ë—/?õÔS»»»W¬XÑÓÓÓÛÛÛ××·råÊU«Võ÷÷¼ño<í´ÓW¯^½fÍš¡¡¡áááÓO?}dddtttlllíÚµgœqƺuëÎ<ó̳Î:ëMozÓÙgŸ½~ýú 6¼ùÍoÞ¸qã9眣ªêøøx4Åbš¦MLLLNNNMMÅãñsÏ=wÓ¦M‰D"™L¦R)]×ÓéôæÍ›3™ŒaÙl6—ËMOOÏÌÌlÙ²evvö¼óÎ;ÿüó/¸à‚[·¾å-oùïÿþï/¼ð¢‹.zë[ßzñÅ_rÉ%o{ÛÛÞþö·¿ãï¸ôÒKßùÎw¾ë]ïz÷»ßýž÷¼ç²Ë.»üò˯¸âŠmÛ¶½÷½ïýŸÿùŸ+¯¼òª«®zßûÞ÷þ÷¿ÿꫯþÀ>ð¿ÿû¿üà?ô¡}øÃþÈG>òÑ~ôcûØöíÛ¯¹æšüã×^{íu×]÷‰O|â“Ÿüä§>õ©OúÓŸùÌg>ûÙÏ~îsŸûüç?ÿ…/|á‹_üâ—¾ô¥;v|ùË_¾þúëo¸á†o¼ñ¦›nºù替ò•¯|õ«_ýÚ×¾öõ¯ýßøÆ7¿ùÍo}ë[ßþö·¿óïìܹó–[n¹õÖ[o»í¶Ûo¿ýŽ;î¸óÎ;¿ûÝïÞu×]wß}÷÷¾÷½ïÿû?øÁî¹çž{ï½÷‡?üá®]»î»ï¾ûï¿ÿxðÁô£ýøÇ?~衇~øáGyäÑGýÉO~òØc=þøã?ýéOö³ŸíÞ½û‰'žxòÉ'Ÿzê©ŸÿüçO?ýô/~ñ‹_þò—Ï<ó̯~õ«gŸ}ö׿þõo~ó›ßþö·¿ûÝï~ÿûßïÙ³ç¹çžûÃþðüóÏÿñüÓŸþôç?ÿù/ùË_ÿú׿ýíoÿûßÿñ¼ðÂÿüç?_|ñÅýë_‹^¬[b DŒL¹j`õð</ž <ó{qÞ¿?¾Çö[.>ì5KÖßµP]þ–{ì‡}ùcËÿûÈæs»ëôs–oýû_sÇ\ÝÝW6ó‡®nÚØÿÎ7<÷ø 36~{ëO>vÖžñåïZØü‹Ö}é£ßºÀ=»dÃ÷nŒ¯øïÞ~ô·Þ‘U¿sþ~Ëù¯^ðæož÷×?öe?xÿÆïlý[ìÑkgG'W\ð§'¿vþë®8ñÛ×ÅžöñŸì‰v~aÏÏô¹óv¼áÛ³žºûìãÿøÒoŒÿíýáo,x÷î¼ü÷.}öæíÚwŸ{2ù‘«uïïþÈÉŸ{óîûY×ù¾r绊v÷æ_óÖçÆ7þ1xýýûè²™‹~Ùøê"ù½ç¿ú½kWéoŽž÷÷‘½_ØúÕ¿üþÅ=/Þ}í÷Þ`|ø…?ú_Ûo¾ý—¿ï~ù‰Çó3wýå˜OvÅâ®›®žý¯3Nõ½î‡õ¨G;ÛŸøËkzÿü¸gÑY/<üü½Ù¾³V=táßÎyú¨Î¿\rÉ£CÏýíUCco»ê§ïúýM—þtèÓÏÝñøª¿ôzμô–ÎKÞÿÖ¯>³~ê_ÝpE׉÷^¹arâõO^2ø‹§¯èzÓEýXçÕ›û†:ÏznfݹWÝý—Ë—¾þ‹kÇr¸äïþÂgŽ¼äˆ#[ŸJßù¿'žöë ‡±µãô–׎_~ÏÚu—uߧºø±_5[½ø{÷õÕ=ñš3·y?ð¿Ùs" ¯=qퟯžÚ˜É}2óàéCÿ{öËÞyU_ÒÿóÞxÂÈ1ϾïÅ•_è{zËEk—ßþqó³ã ïŠ<•ÜsÎ;>{ÖÉo~ç¿ð®Åç/œyÛãÏß»ì¯?ýQg\÷ãw½våpí1Wzîñ‹µŽ>òÊ‘w{ï¾nSô¹]Güíék}Æ;ß6ñÉÄÿÞ}Ã#7]=rãï–ñ‰ž«NW{þgÞrMßüÉ®>á®í××,½ôÜ¡4>þ¥#?ó¹oݨn +¾ë’>¿ð4ßáwO½ýŒÆ+:ÝŸü춡ޕ¯;ó¿#ÿüËôñ£µ¡3ßÿçoœqi´û¨¾%ÙºM}Ó55/»|óMéÛj=Û3ýõC÷výã?~ÿ¿xÍ K»ìü‡¦7gŽyjú”ŽvnY³øÓ³ÿ|üöO½¶¶1¶õæßÔ-=çãùý‹ïJuÞø»+¿ú™¯yÖ}xÍ=7^ßõ©{¾´éǧ|9~ÓÉÛºžß1zyÛ“WÝvù²3_wóÿ¼©ñw›~üÑïóž_õßqÌ–_>ð©Ë~ûå-¿ùÀkêÚžÚþüåO¼;úì›î:âk‹Ÿ[×{ß÷þí]'Öýt›¿ö´Ï·ãÓ¿=óˆÏ½¦®åGc×®n{6ýí+ÎÞpçîíxöÓüé‘Ÿlüì‰ã·¼ê‚óVm8ö°ãÿòÂ]—]¹søg¯êؽþ5µá=—/ýêIw]¹ããúÍ¿áÏ¿#óóÌö¿ö[î<ûž+co½áˆ§{‚÷>wé3»/ùÂù_=éø·¼ý°œ^›þôSË~ÑiË~|úåúÔSÇ>t×ÊÖÛß{ù;ŸþÕ—¾ûô×~åˆ÷ÿèÒä‹÷}oT{yïWÏ¿ç÷Þ¿o{¸ýëGÔN^{ìýé;#w>wù'žûÜ~÷ÖUKðÔWºìS£§~ððñß]sýawDÆž=êÃk÷{”ûF^8ö®®_¨u›N}êØÇv¿=òá¿^f¬ïû}ÿwÿxÝs5ñáè±÷MÝþªzù̃×^°î=Þ÷ùÑÏÞ³û=¹S¾Æ;ÖÿøÄþñ÷žø»þW·ï¼ï²Ô%ÿÌÔw/º½þŠé«zŽ»gû«Zo]T—Ž½â؇«–ýnü½Ÿ¾ðÈž¼zé3‹Ž¼mûï{"Ô/M<üÛAÅu÷YÇŸ|EÍnÛ8õÔýÞW;ë9þw´Ý|ÄeSÙkÿÕ9ïè¸÷ˆË7-‹û“6ý®#.Oön>îé¿zBý—^ÿÿ81öñϬý¯oŒ?“~cðø^{ô/¿\·9ví;xáÍ¿ï;éôœðlì—‘\tYúº?¤¾tÁ«Z|Ùúï¾ø„Ÿ?sgË7¯ùþÖ-?Ø }ý¾ÕOFOxEËh訷®¿ã’+Z^Œ¾á¿Ûùø_ïXpÞ‡o;öG¯ÿnÇÍG.MõqÜã]ÙúÅ—]Öw®¿=Óýê¶Ï>Q“¼ê¶¾èÚyW^²L?ýC߸뗿¹fÑ—ÞÔºéÙ³‡x¢vÅŠ£Ž¿á©;#×½¬ö×›¯=nÁÖ·¯ûÉ—Yòµ‹ÿñÞÞvØi'lùüIÇ/xÛÛ#·¿lÁÖo>¸öœ÷.Îþü‰û?ô»§—ü±ãìÓ~<ºú=?¿ö}¿=ìè;vvEúÔk{ä×/Þ³t×sµç¶ÝvÌ‘—ÝÙúÐ5ßj秮ùñÔÊ–;o¹|ù×~~é¿ÿº7½pǧ®|Û'zpßêPßÛ·>uücS+#g~ïò‡o<鄧v¯Œl¿ï=Ûv÷Ì…¯~ô-øàô'ûh`ÕCn¾\»ö˜]w}©õ1õ‘—½ùžu~ÕìüuýªÜÁÃÞzõùËëž +¦xGçÃê7ï<éMÏÝð1å†îËÎ]Ûqo©¿jÞEÏ^¾ùœ§¾ùéŸ?º~ÜP¢ÍCÿڵq[ó ¿þAß'—¿é…ºê2;<îöΟ<öö#¯xxkô¸G÷¼ªýÇjýïîyîÓ÷ïY¸û–Ëþ¹¡ç¸o¹³å¯ßÿÒ÷æ%Ï<lL?æð|{ëÔƒÓ·®~qÙ×?pÅÌU¯øÒŽú–]jí¦íמX{ìG–ùúËGÿpsøo®{Ûc§×ßrÒ±'Þ¹²åúkžIL]{ÜKWÍülæ3¯ÿIÏ)g¿päO¿ýñ®õw|i}ógê–=|úÏÎúÚñ{>pìÿüѸ?»=zÂå—Ä>ºç–{&ϼö*ÏûïôÞqKoò«·}â‹Ç\ý»ßôHðʳNê[}ùw5èÒgn;áÉ-jë]÷]þ«]·ÝóÀ®W-Ýsßk¶®?ÿ„Ÿ\õªW`øŠ©-Ç_ø¶'"Ç~¡v库Ž}ͯj»÷‰ºû>ØùÔÝ7.=Ç÷ûþΕ_}d¦ã^õòÙ·?u׃—ž|ÞiÇ=óÛþ×]ø燷}ï+Wl¹ôâÏÝß_ùöæÓ»ß=î÷n~ñö¿_wú;ÿôðâçÞqÃ+¯<jËÞvÊ–®ÝKO=³?Ùð¾S~“N¶þô¾G>Vóù•ÿî^{Æ_ÏÝúæ%ï|Ó+Ö±çý7ÎÜýÈS~{óŽEu?}×ÃÑ]ßúò½lñUÿ¼'ðЫôÖÁË^xמßÜÿÕ;oüI÷xÚÕ÷Ñ÷lü蟮=þüyß8ñ—;&¿yÇ5u_ÿã–c¿ôw©^ùÑG¯ÝrçÊ¿úÇÓ?·[]yÓ‰W®jûà–Ÿ\þñèGßrgë+ÿuÿ‡þø»ËR7®ZzçEO'.8é„?¶ÿðþ'?zÔ'^íûõY¯þÕǺ/KùÙ{ÿ¸ë <û‡+Ÿøé×o|<Þó×Ú7]þÔ_Xµäé/ßèúVô#¿~ÇyÏ}üÊ·]ÿŠ~•~õ1ÿzqóÞôŠãS¾û‹K_~E¦ÿÇ?ÿÌ1Yöòã&R“[ßõ•ïiñ3î;þ®ö··mû¢ËÎíüØݧÖÝ÷ªÚÝÊ‚#^6öÀs‘¯=ßñ›Ýµ÷¥knQj¾Ÿ®ýùpß½_Ú¼á±SÏrgÝÊû›OWÝÿì~mæ>ݘ\pÉ«N{0|öœ·¹dåEM/¦»O{eߧæ~³§¿5¶èéµì¬ýe`û½z[û[¯nÑ‚ŸÏƒ6\qC“Q¿ þêõÏÍ{ùøë~1~«ï_ö×tÝkï¨ýIzã?¨}꨺W}:sу3Óßíì=¬îÞó¿¸Óõ¹=®o/¬}bÛÅŸËýâíGw?ßñÜ…~¸mì¶Knÿ¸rNhñ‹g?q¾çÌñõ‘3wýÏIoËtuÝn¥öŽóo¾pþ»kvÜѾ"óú_墳{Í]{j~ºÓX¾¶ýW;ê~u}çä¢O.¬}æÂýG.v_²áoùãèÛ^}Ë‚³;òÅÿ9êC‹ŽüÇŽº½¢îÉ=µí®yíÚ5SGüéÂå?Ý>vëŠcž?ç-_ßãúÚžùß¹pþçÏ™ÿýíµo¹î¸ßÿaÃóW]°uÝ‚ÏÎt?³ã¢]Øù¨ÑsÂ[ÛðTö3ŸX¹jÝ‚ß*u.¬ý鶺o¼rÕÛÆ»:su\XsóN×—‡ç_¿ËõÕ5?9gé»»§Ù^ó eþÍJÍ·×ý-}꯯9Õõ̱Ïí®}pgÝï^—xï}v¨£ïîÙòͯz¾þŸÞ¢G?·½öA¥î™t]ÝŸj~°½ÿÉ…Ž.xêœÚûæm™wŒûw××=º°fǼšúð›o?uþŽSkØû¯×Õ=ùtÍÝéšïþÁþ{ž¯ÿéëF&Ï?“ë=Æ£Õ=•®»äŽæýåì÷µÕîÞQ—|‡ïÙÓOؽâµ?¾¦î}ÏÌÿ|zþí;kîÝ^³sáü›·×ܶ6ýÓ@í-»]_\8ÿ‹ÃówÞ}Ö G{ÿ6úûÝSwL÷½¯û¨W·0{ó’oüõ–åíÿòÁ×ñçÀì Í^÷Žþ-¼êèER 5G^Zû`Ë{ŸÚSsÃöù»vŽürwôžó?¿}þ]ž}OºæÛÃó¿´Ëuß#®›”šû÷Ô¶7dN}ñé7>¨½hËšÓ"¯_˜Yý—žô}«ŽU¶¼¾ñášêæ]õÚc>]§ÿ¹ö§¾ççÊ…ŸZ{g`þ—5__\÷ԞܶpþW¶Õ<˜®}`[ÍWw¸¾®Ôܶmþ¶×<½3ùÅ‹^3ë^xG[ízîˆÄ'.áIïwo=á‚‹?øòlü›×½ã›ÏEþ±î¾yuwDÎm|[mË«¸ƒ~zNÍMóæß4\ó`@ÿÕpÝ#š/]XóÓÝ%nºâ¥æú®ëówìrÝ°sþí;`“jnß>ÿ‹ùwo¯ýÕ®é«3Ç]ôÚ7OÇ6=póXüÖï?w\óûúž=õ¼ªýeZMý¼á»ÇÎtÕìTjîØVó½m5·ž3¿æÑšÛsÎ÷n¹ôÖ=®›^ôŸ¸íÔóï®ùRºæé[¿~副¿hÁÓk¹§ÁþkžëõuÇÿäâcO¹ï‹?øÁ~ÖÓ²(óÜ…µ?Ù}Ñן¬ûżºŸ _ôþµ~º°æþG\_Ø3ÿM¿€W5_9gþÖö¸ÿ¸îÑ5_:ÿ[çÔüðÂÚ¯týìœÚ»·Íÿ¼Ró£a€ç·úž¯óÆNûé#˺°îƒ=]û{rý u7{æwŽünûůî]ðì®Ú{·}àsóæß Ì¿êWŸûün×WÓ5íþBã³ ÿøîüÍw¹>¿sþ¶Õ>±ðÍ?X8ÿª¯oíyÍVXðÓáÚß\:ì©ìW®üÌ_YòTæ¢ïþbÁ?¡Ÿçnÿkàźö|â_§/¸èµƒ¿ßõÞ¿.¬»eë».ûÜ…óïRN¿}Þüïì¨Ý³ë¬«ßº`×ÛkYWûø9uZùšÄûŒ•š/*þÙ¶ÎOö´9=2öªÚÛÓ5¾£îgoûøC?tΪ5×vÜtFWóa~¸éKÊüï¿ëéWÖ~?]sÇ95ß^ñÛmïV¿·úû»æuûü;·_sZîÌûο+]÷µÃŽzÿË|¯{¢î'kû>ôÚ7ÞÿÐ{ÿ¹í¨yw.ùë[?øm綿÷ +Ž<â…]u÷+u+_~þå?šyìæ¿®Y{wÍÝ{æïX8ÿÛk¾ºÇu缺?]xį^ÖùÇ…KŸÞöæMý-ÚQ÷ضš÷¸nK¿ïÖëN»è³Cã‹~ñâ¶ÚœZsW଄çè7\Ø^{§Ró¦›c÷Ÿvéé×Ö=¶½fé±5»vÔ>™®ûU }íkvêúW¼=×ýÔ‚?Ÿ³íž5{ru?ø¥ÿWJí—wÔ<³»ív÷ ŸùÑ{ÿ~Nݮặ>÷ºÛ?T·â¯.ŸYpëy=kßöÂq~Ð{FíÈ‚Ÿ®ûÄ棿Ê?qKÝ÷çÍÿÉ»kßû¦ùÆ]®vÔ¼æÙ÷þóÇK|ÕÌÃO¶v\³àhOmûqó¿³æÒ–ÓžÞõÖ+.õÙ/Ý¿í+½ó&å–‹ÙQóý³>ôø)]eÜ¿gþçvÌÿpÃÍÛn]ÿúÑ®ö%>|Ì›Ôývû¹gÞX·kÞü]Ûë¦.>º&W÷«§Gþ¸}Ý#Ñžzãú;cìG7º¿pûÚ×}Méÿ0ú¬ònWÍQ‘ë9"¸àG»oÝ´¬óèÆù×ïœÿásÏê?-=8qÖüKW^zúë.¼ó;y¶æ–sæßw÷µc_¯9#2øÐÈ¢ßìXûƒsjîKßô£KŽþ“rÓòw×¾ñÏu®¶ÕÏï®»1RÛ}Úüïn«ýÅðê+¢G¿'sÔ%+?–|÷’cÞxâ]ÿó÷íu¾|ùœ—÷¦“µW=¼à×é|æO<Ó’üðÕ·´u{V~ù^w¢òžú®«ÿû';k_Õ¶ðÙ/þ6¯®óÙÚ×ßÔ»+Póášm¯ó¯]ðÐiµ'üé+®;.SûiŸ~è½ÿšwòŸXþƒtÍ;çß´ËõÅ�_µ'<ó™ûpÅÝ{¾ùÄ®ëž}æu¿ÙS»k{ÍàÙK?óã{}M]c_í÷vÏÿÒÂù·jÇnì]ó·L÷ÓéÚ{>SÓõ‘·,_ûÚè×üÿH×Ý~áü/w,ùâ%Wþ ±à±uï|ò/žØ³âmç-¸öëßÏ®8áŒë¶üóÔv~Ùÿ÷ÝVùÞc#G½°½îöóŸwÆû^Sw~ý™¿Þ=òüžÚïs[ÍÃéºoôz~¨ûѶš[æÕÜ¡Œl\’9ò“}ÝßÛô»±š…ïš¿aÉΟžvÉæM5wžS{Ô]§þÀ…÷î¨y{n=Îó_ŸºcÛeu5Ý]÷þ%ŸüÍŽ¸zÍ.¬{tûöÏosíXXóÈ®º7ûN?ý¨¿-¬ûЯ?e·lxó#;zqw݃/.ÜøëWÖ½ñ×®øLæ5=žk?~ù;¿xϪw×ßÖôÇ=SÜuÌk-|>PûåáÚß-<úÞû/~ôÂøO^ðÈîùŸ ¸.þûÆ5uxþçvþ¡=‡×þ¤f÷®º'ï:ùåÞzÉýûüuÏ{ÿ'7VsǼGo}ì´?nÿæ÷ç= ÜÜ~æË\8PûÝí_¸~×üïî^ýîÜ–³Œå?;µ³¦ó²?üäâ{¶Í¿vÞáïÚqØÕÊü]ÛêûEúê[®ù×ð‚‡v~Õ»¶®îÌšÖ<®,x½·îƒ¿üÀ_Nî{f×{'îl?qÜ&¯?â’ëWœ¸êê·^sÙ7z÷•MŸ<¹î¦5ǸŸWÞxÙØÏžÿþí‡]:|øO¾Þ¿êÏo¿nça/¾wøð+·¶íB×wµG5\}Òâóž:µ¶ûüù÷,¬û}í7Ÿ¿°îákn_øÄ1÷¶}ý²šïÍ»ð‘Ž>zsÇ£.å[ý§ÝÙþ-£û¡ï×|ý´ù7ïœÇ. §·cØuÁ‹‡_·óð÷œêº{¸Î[wÔÇgêÞrÕ ¿ßuë‡ÿZûð?€ÈÏÿÁ9u·^>¶åGùÅ'fÿ>bÇËŽ^òóןóÙ-×lúòúë¿ûØžoœxí[N| î®óŸÚ¶ûÞuÉÃ/«Ý±ó°«÷~õöÃ>˜Û¶š;·ÏÿøÎÃ>¼ÇõÕmóo8ÕużÃ??ü«~ùÖÏÝö߆§v¤kÛQç}ËQ¿Þ6»ñ‘Ú-õ÷>yý»knûÄ›O8rÁCªùÊW݇j\übjvúM}Éš›‡]ïß}Ø{ööaײcç_»û°+·»¾¾ãá/§ÿà©5Oîøþ=R{î¯ëv×};=¤÷É…_w}m¸vÏ¿ó¿µ?Ý^»geÿƒ»~ü¯t·ç)ß¾|Îs~öêcÿ±³î¾muþ?qÓE×?:oþS¯õç<¾pþÛ\_Yø‡+·vÍîû®Ù}ØG†ç/½½í[ó?µë°«w¹vÎûþŽŽËîÇÒN]õ£Ÿ[ø»/x>¼àä–µîìM¯ý“s>ðÜ»ê®{îØ7¼²vÞGç¿ççžôƱ¿¿å¡sjvì8üÃ?:ìúä<×ûvvùîÃÞuê៛÷ùpÇMלzø-;6^{}Ýî�íšÇ.XòŽÚ_ܽãž×ýãë®[”ºGž¨ûûmS[Ûùª5þôlÿÿcïKàbÞúÿgkJÚ×i–š©´Ð2íÓ>Ó´R™V!4훚V•0ÓL3iS„J!)*!®KÓ´!©„Ú(„"dëþ§E\÷>÷y~ÏïÿóMú.ç|Î9ŸóÙÎò~Å\µ•˜HÅ7»;±ÂÄäÞWÝ`ã·'¼{‡: ˜WI¸ê•]˜—Öý¡zC;ìѽ“ÆOosÎP¤y/¸,¥I¾r,#*`Ëý›ÞÞŽ_é¿ä†ÖÚÞ»—mžïý-öq9ÊÿÊÊêðÎ}NOô[ºŒÞ¾¸h¼³,wÑŠóœçû/lxÓ}l“‘»hIºÙï½nö·´¼N‘’á×/-Ó¥<éªol–Xàu§å bà®cžõgo½ot\~tu]ÜɤíGo ¿+Îë�?éßVî·Ç¿l•ù&Ç×yŸï}ÿ·qŠZ1Ø~Ðaÿø9á{¦?¾~¾òünUä»ñG'Â÷·oúØ¿j[½à}óïô5Ü.i®ÂÚVm�¯S_^FÊÕ-ƒ*»ûû†¯où\٥ẩµ¢£©½xyÝ¡ä�áXó„RÑ4«'V1C7.rläû 6{|„‡¹>Å2,T\o|«lBçÛC2žž2ÌÝ”®3¼ú›6.ؼõÖ‚í¶hÒ¾1V¥2âP.9=^ÃlÃîÊ»]Ž„‡UE’v·&×çF¾¾Å‹\³âLò·°yÖ¹Ëãdôb˃šwU=RÚpIÆQ.¾{W€ì•n‚ŽÜ=’Ï ‡—¼ûãB}ÆëÝëÕµÇ}xÔ(?ØƪÜ8lØ(íÓÕóRvýèòû×åé—é 5î(–y¸cÅÆÍ È·xDŠr�ã/½S¿Õ´ 7¨Ž°øȆ^ŒMÉòÕÀC»‚OdÍ•óH»=Ñ€ú§j1µÙ Òî 4èùõ™â'¡[Û¬$¤*|·¯Ù×ó÷˜= ›p[¦qOŽ‘¡pë�æÁÖU;‚ æŽèÍŠÛýï½U– +&”t5ô—!{fûïÛ4(zJ& ¸G ~薿즱#¨ø†Då}q÷ÞŽ:dÛ„]“KܵT®/îIÀ¾µçÎVà¸xXîfw…ÒŽ0ØIeYÀñµ†gû‚†½€ç{‚rãíY§ÿXy?À´™W6êÜņÝA»³_ˆ‡-ŸÇ„Gö:½”»^jÕ°ÃÕž<"ý”Ìþuu›v.[-óý˜æ°ÿÌél¥\·Hr"ÖÌ/u_t¥t‡½Ä.†ÄŠÔ#þyëÏ=Qü$›åPcßs§¥Ø‚ƒ;WÚùf¿ôº¥$·±ÉPiGÊÆ ÿÝ# †z1¡ ‡àá 26ˆ ΞÃÚ|æIûâŒÎÄXõñÊ®÷½à·ÉÌW£rô0*`Ù.•¤Ú°7sEäá}7ßIðJ/Î8ödùë=чÞ4Ê®ë(p-<¸û�kW'!3ä®·DF>cá8ƒÙÄÑ÷ßÓhX.ú©$s{Ðú¸Gˆ‚/”þ“§ªAKyÓ …~›¼(˜ Õ{åÑh«•VbkUáË÷hÞ([%w€eÒmK,¾—¬ª‘Íç˜Ïâk0’Šôê�I×¥Xë÷¿à-W’uÊnÐ;ï$•žŠ|;˜b¢Bf?/ã*]á"5¹A¸ (.±Ò¦¬?bϺ""J¹ÍÆìMpy i͵N*ö‘ÙÚÉc”ùòB| @ÆûîüuÅB CuÛY½§ +<sAkøK™†È¦ì M +È>²ÕBêHIlGŸìËü,¢éd�]æn·¯ÙÐx[æZ ºäQ4TÿµõÉøR0òŠÂâ¶ù”]¹Æ[ž‹.ÞkDmæ¾Èž¿ØÄ[l³—ºwöf’G¡ÿÃÖƒš[{~'¥ºoš&Y†RûÔT7èòÒÏpPâ!½Õ$ƒKe=¼fC=gŸŒeo5P† +2#ó‰ cÅWµ*2/åú îbŒ²2\s¼§FZ^“ó2ó‰ðÚj¤¶ôyEÆõQ;UèU©v8yIv±5ø‘«p¤%Qwp¯A‡–pÔÉB‹0¨£G ,Ÿè3‚·Ñg8ñ{èú …Wñ›uG…ተ2ª¥R˜hFD)´Ø©e|‰6~2”êSò¦Æ¦¡÷Ez ¥%×UW)H±I9 唚¬ÀÎÜTm/Sh_WqÓ§ÃiRµP¿JT(º\u7zàÅ-ýAžO½UlŽ¬¼}ãÆ©m‡Ëc±ˆy,ÖXS›áÙ—™TòY®ÍêÓZóí¯¢jcâ:G´"� +b$•õIw¨>°CÝe<0{µ®¢oc|¯âî=ª2òzÍÕp2¿—5:¦¾x4bK´.X&Lzã[œ¶æƒ7m£Þ QƒSÆš<ôU¼soæù>Í^–3Bñq‡Tƒx O¤Û·õ¦¶wCqå¯Ó½ºk¥ØÕ ²€ã‰½âecÉ:Ed—8„6¯^®hÆÚa‡•ž·þ–H +‘jr—éÒÝ÷héèð.VŸ2jC³ùc[›ÜzóÔP ¯É`„CWƒuèq¡as¶Pt^ß®µv¼†ÇÚÒý|+wË4m‚±ÅDÄ%<T÷¬ÓŠ(K¢ÄQ¯Kw¶PlôÖ|ýíÉʉdÁ0Wémå…þmó!v`ä3••|º—VP¼E‹X;_Â^Û…(§Xa‹z#SâLJ¼ê™?_õTæ¬W½æ¡PÄ… }2ç)ÉÊè¾¥ÝÞðÇùâ)B†wÿÉÃ^ɪj„yÎéï¤Ïò¨8[Î_5J×´mPó¤¥ùzq7Ǭ™¢[6ÆøÀÏy—œ +xÏ—#½mÀuŒd®ËçÀ»ù\üõ_*·°û2(]ž&7ÈBq}6·š|ðf‘Y!DÄnkƒšŠ[Ñ5`¹òéf 1ÂñUäýN¦~¹Sú•7|EÇ +f¼‰’¸ÝDÑ´å`D¿ +K?®'ÅÏ^X¶§šhÆÌò“³ž àÚ+¶›š¢YÌάu_ËT“ç“G m:î$`ï ZÖR½º©-Õ1ZÞêe× š‚¤KUä# ·Övôƒ$+,Ïd°ã=…MPkµÅìT_ÆxÚ¦Þ|¦nô-þ%èRDímÃ}FÀïãx ‹hü.) +ÁMñ¸qñ-Qº…RyÍ»B”,”°7¯Á±l:OVÂà¥wµÞ‹¿êÕàžî$ðbÛ}ØÀ²¬¤NÆ¡0â©Á3cY••‡»údïW3ïÌN÷‘ ÃêT.¼$^Q`’U þTX‰ÇQ„gy5:ÌJ²å‰f%PNåvCcÎ@5ÈЕÌ%ÅŹ»\†Xd¾ÓŸÌûR"Ì9#Í$µžxîG˜¿xÏãp‹§TÞÜ›ºº›Ç‹½CfeAEήòJ^i]K:¸¼ ºfbÕÍpSßëSÌŒ‚e&zð{ˆ9 !o5D$vXŽ]>Ľ©tÿKfpné&X‘SiTg:…iCeñIáMèD[h+n¤F¨°•(ú–^‚‰ïá$Àvê+ìJ¬Y`‡æq,gØR V$†ek•Ä`E +…ØP6)»V†gàžÐšßõ¤l,fÅS,ÃU’IÅTˆu§¥ƒ+d©@ýd½s:ÃÏãÑÍpLö+6±ÁA3°¼f:L/<4@…JJ^¢RbeË bhˆ… +ƒˆ‡XQ¶¹|®^kqHk=±ùZ!ÃçNÆâK‡þºÕêÖÔ;éÖCRÅÖŒW'{xð,çƒ3£›Rbs™î$†SM²Oõ¼µ"¼qÃéñÅLªoþš&ˆg‡Uب5E—A$A¬©gf@5ÔÇš4À[Ì»>Ž<ÌðÄÊÇóFتæäóFtóøÃTÖ{ðj¿Û‡®ŠîäKÌåÝrF`}1ëíÌÃ#»£<XNù+4?6ë›ÓÍùåKè%„"ag£bÔ ÌgÝȪçÓŠl…ØÚ2cô²!úq¤btI…â,Ã’Â Qy©PgžðaV|~nlÓ“¥Øò,ÉÕ'Š@ð×̺›[>\£!ÜÄá!<«HLÁGYã›ÊY!ž0Ë1R +a” -6¼|aôr ÒÞF$YöÄ � HÑàÝÌÈ$UCV‘tö+êæÈGÅð1—¤@¬qŒÒ`óAû«%8nó8ÚUnSåmÌßPÊ(ç!ññÞ¤°N§°�†Õ¾ÃÉ±Ý +ѶÇ/çóÆx‰øs´÷o¶3ßÌ«µ¯AWÛ…±è¦çÓ óéFÕ`ÓN.Sš¯Ùó\LÀ1lÐ<þ)i=¬mM¼±|¬èbˆÄ´œ=H7n›æ·þ>ºøi‘ƒ)ÕÉ\Òf™4]Ù”lÚvb=ú%úØb16k¥›xµ+Å´Kß#ƶc +ÏêrftŠÌ�ïJVTÚD‚ÆŒkÀóêIóï^2-o;&Á°TXµB–a™¡*NÚ¼Ñ^Pt²Ur} ëqÀº,¨/Ž—”±ÆBÊ<Û•c\Méx,ÃÊ‹Ç»‰'œ*ÓÕ{‹µŽµƒf�Ñ«yA¼ATž¾"¦1ol.«+îXXÊ.iç}‡ªX‹-6§^`®ÏJhâ [˜‘ˆfEññXƒSÀtƒ,ºîšîA§«œMâÚÌâ®Y’ !"¼Í„ÔMTÞp<Ë 1ͧ‚ ¨tCŠ“íÞ¶+97Œ«éFåt“a°€!{êÈ¿`üÄîXè +„86—ƒã68!N¶™P—Ñ3ZV1œaÌÕ5ÉÁVÚü½¥Ÿ20ŽäîãÛî´î¤S\2)A‚𬰅ö¬ç]^µ[~mrHÖ=-™ˆ\hhñK>ˆY =ÉÊ#yUçþ˜N“n:±Ç'ûuf™¿½ž÷[@.cŸ4¥†’ëaúðñøt–†U¯Ùy¸îí±øƒl«¨å, +–7Z…ÕûŽ>$ËæݽùÒÕ&Þ½t=X/¢Ç‡ +„ÀÇê3ËÀ|×éæ8ˆ‰¢Âj.ÏX× ¢0ðÕt@—^þM®@[Ún±¡BêÖ2ðÃ`³&ºQ.—E7¤[Œý;¡ÁìÞ|ÞÀâTƒôž½ËLñ`ùa :7iÈÕº`µ)ƒ(ÂãO.|$”xÞÍ0[©ç6FwÖe„+B*Œs¡]FYà[Wã’V_3w’ˆ‡ñ´2<šTn½8²â ÄaúMÔê¦ `ÅN :dÜ´$©Œl_Tg¬ˆ“Äo‰O)ðÉâño‚îCTW3CÊ¡A�(yÌ0È‹ÙÕD½fÊd|±+¾éÚ`+33éìê%Eç ¡8Õ½ykêË~Wç] +c\uë’ÀÂ`£üexìelBI€ÁIÁ†Næ8†s+••Aaɇ@Ìóéú¶`]°0lDëÀÀºYà„§ô«×“¤:“LòÁ¸8:®œî³=9ï.o‹q%¥Kh¿ÚŽ¹žÄKಸî#Ù-Ž¡“|ZG_ÔÐkâÕëÇôIöÁxç#Y¶"c +]Þ €ÊÁzÝI‹Æ@Z"`@°�$£›äÒ :ûŒÇÀ‹Ê“}¡ å¼ï·ñFR˜Ž)É{Ê<,yWgësû:÷ÒÝoP!IֶɞÔäÅ`©,°9®ßжßx˜nQ>Þ¶?…å5œì™Ïã¹2ÙÄã–;°~¼!À£<yM.sÓe£h[V@ ë PUïÝ¡û–?%Ùͳ$.áY—Ü +ínѻȢ¨°E Ƹº^taXò2’•-Ôd©�õjM&”ƒÍÊé¯ö®*÷M®•ß·)%ãÏ0Ës™¨G¡Kây\Ù»V×Üx`³j¸˜mlënB7ÈQ ¡ù\K¼9¶›Yp—BïL¦ŠáÉ*¹ÃD¨÷0ëpí ¸|Ý„¢ƒ†ò1ã»YQå,F_LßâÀ’]±<ƒ 6XÎRRò²\žå<ŽÕà-1tœC›WÌj>´=@„g™ ++-›5cq’›l‹ƒ˜Wƒw¢‹gZ“½°P?/æÇEÌc�°y'=×MDÏK‹ÔX[ÖJ*Iå±½=£ÿY]"ÄچʰIæ¹Ý”U$|1wϽ¶¶Æs)›k1a‹±Éwxcòx;/ f¼~â !%¯Â‰Æ°XÄÚÇô僮Ä1LãBpY`nÃP¹‡#¨‚Mj,«n°¡+z¸@à2´-'y ê7ÆC*OPÙèA1ð »½iÆC#p¼¾Yâ Ý(ìï@ «ÐÌCq+C(LŸád;�$2™}LðHòNŽÊ\ß4¾ùüø“š0�˳‚ZÒ qÁñ¸U'Ë1]5ÍxÑ Šéæ0‚¿šwùyœ¿¢ÄÚ|¦žI)‡X‹ïõzT©[ýš˜9©¬Øâ†ÀÖpIšEÇ ?À É"‹#›6ÛÇA,E纖”@N(B”7zßõUsŒƒj¼…^ŒUaÅb¡¹k<Ãé:7ziϪa,åKÊi¯|õŒñz5]/….B=—;/ãÉÈž°n +Ñð3ꤛâx›˜w«·BÖPôI`ý,°t«p�ꙿ¹šÅT†ˆ0D ú«éúYtÓjªw>4ÀæÅZâÁ—¿DKº“¯E×/eEWCýù˜+ø &Yt3 +}M +OXVV 4‚Êxýz5�p¯IlâYZî¼¢<ÙH7&‹¹šÕ†Žèç‚Í`Ô5̇DÞqLû8keLøPžKƒÐDOÚÄõ@Tšdï&&$x¨ÕSè4±•¾ê^ükˆÙN«vGÞŶ‰ŒeMO/™¥Ð‡<¯™-< ºq̵MÄëÈüØ8ªdýA§ãuïÊÏ9´š0¬RM4ŠkåÍAÏ?žDí‹–'ûUW·u²"©L2Ži>èý;ŸôKa&tÞ=ìB1Ìݶ¸Ï̺À3~»‚ƒ–Üey_‚® + ãZéü0hP 3g4âU¤An(o }U “¦$¸í4 7Ò¼˜ëu7\º3×aw*§ˆ0¾ùɤ8ÝåÅ<äftoÅ%¦9ö͵û\±ÊysyEx Ô ÀCcÝãdF’¶›©,;²ˆ¬æñAó‚ÉLn”~Õá†A>ÝÀ'Y[´«Ï@c·¡-c´•öRIh¯q‡ó|E[÷›%¼èªˆbmA[”-HÛ©¹·îˆŠ–ü(k‹¬i⇚· ¨à.ã$5(ÿ®¦l:¹»ëíû�Ý5Õ‘{A×ãO4î=»ïNð«Çma-%’íãâWö&ú‹ø¼nÙoÒ/5’ͱDj¤._W÷iÙýÊ[Ï©ã}p=âÄ¡¤©0ƒ€ˆ-C±Úô¸&Ü8Ÿµ²±C²>õä=}ÿf©1:[²\Z/=(<-Ø¥p(¬£”örS¸¼Ú¯7‡GYÀj=ð¡§Â(NÊ[¾±C2:7ÏlHÝvzÓóªG>ë°b“ƒ}ÜCó«o6Ó•†\ö†uÕ±û¬%O„½Ó[4À׊Š¨jƒxàq^ åÀlTd“S£,#%_@ûAÞË+FU¤Ê&4üAA#BRC„ïﶸ„\œžÅÄ0‘ødåI⎦Ë0]Ñã±çØLDLzMšî»b–›ñ •¾ÍrÛX2¥ŠtGóGÅmW†UX#Õkz/©äúj/V;Ó¹X¹Æ’.€+ÍîrñÖ"Ia¯é\Ä$4iAJdšõ? +Äo7╾Ȯ…·µÖv«œÙ¯>‡Ðèª&<ŸªQÝvYi+®ÝNå¬â5{nŠØ~2é)†)4c›]}´K=+3ÌŸ1¶ =Ì©M‘s8 d û½H7Ý´ÚjiL_$/rí9KÎæ"hzOñ„{¹ñ©l¼òÁsÎK4~>ŠÙßT˯ +¬e¡6vb´:B¯ ênW“ç“[וÍ+�Á&]×ä éÚâéš+Îõ¤(Àê"37®ˆés6ªanùÝ^¡¨ò®kWtûǘU±¶Z}£tG½~’L#< ¨ÇZê7Ñ^«Añ„€Î%>ý¾DñTt|¢Þ*¬œb¯Ã±R¼ÊÏ' :øÒ±Iz}Ÿ€>¿Hý¤-’žaúÂãš "µ• …–“‰5ñÝó‘—T)r®à®%Š¥´ƒåßYJ7ŠˆhăµËHIæOó|–>ñLj’]×Ϋզ\[Þô1GÁA/fÇE¿!½°i÷%þE¿KÐíušÅ.ªœnŽ\2Î8È+~þÃfÝÁÀÞq>ÌÇ6PŽÞËZíÑ.BF}Ñ.:—TÂ.Ë‹ÚrL<ȉ•Ufï,›.½& +=f¤ºÉø®_5ìh>oƒìð‚êc„D òHÑÍvöIbÛR ŠÈ‚@&0õºHÂÒ᳘zã +¥Å<²ikš>´]/>&x¨‡MqÊH8çÏŠ\y¥™Ê4舰¼ ŠŠ¢›mðIé8KôëVÀ +T‡*šæ1ÔkÆZ/RŒÈ¸TA—íóâ]Àç„»&Ð-uÉvÍÍtЖP<G¬8˜¸Á¤;Í¿\Ñ Â»½ÿe$ÝBê&w‰˜å-y¶¸^û5–5ÿÒ8Fxq'f +&Ãß+²±Œz\‚w€`í¶,ÓÛÙ™Ñå +ro¼õ´¥ûäS%nÂÍ:v椤û(ÄÉñ³ú…Uã“Ý¢ãϳÍÿP]„ÃÐen´ÚšC’D’±–¾ +qóaŒplÑ/s€g¾„¼'©›_ÁGLXÃgm`{SoW!bó`¢»˜‚øÀ_QXºçGøúK|Tˆ@óv{iÔ|&Úý!Ÿeì%.ŸÐINŒÈ; YZžŒÍqXfâ ß¾„×´¶BÈÎdÑ +’*Mã€ÓvÝTûExGÑdÐj5Ô-¨ìÛ|ƒá6É3|LœlUöÞ㿵òèI³¾„—6zÒ ,AÀµ’¡¹<Øc›j8È0®#{ËD"|[S¿£bËF!¹'לއͻpì-Õ‰æ•?×ka8Ć°EÒ26 +úˆp`-^ðÍèv6ƒ"¬KÍÊjñ|``t[zxÞAi¿ÇÇ«Eò†õ{qê¯/·2£4&Ë…cû£öGy€eDB ú5K„7äó¡±½¬F*!דtÙ’|€'¬yw0ma hº¯DŸdf +Óü^Df<Õ•í%׸»u~HÝÖƒï�:¾ìTD)ÏYÓa3&Ór°J0Ä‹(G6´/„_Ï‚jïsBYõ„©`Ô(žºª«÷x6ÖRnËk”ë%ò›ÔtÜÉ0¦œÕ=5¨"gåÆÀoX†·1[¶Ÿ?¹ãÙžþ§ü™çøù´â‡b¯`:½k{|øè°f@ã£z†ÂV«[p•W¼»ð j@œ`HÊËŒ°rÿÑ–¬zD/_YH_/àƒ<üDÓì,¯^°É¯ØÁÒ·×£ñP q‘Àù>è¨n4H¨Huµ•–¹þ{XìéùB1‰ÒÇtͧ{ºÁÈØúw^É~y™‘½áÛÛIªÆ£d‘ˆœÍg…¬] °«™/ \S'»=Na aò¼Ftô`Ö¤STH+ÎÑ9¦©›W±3 wñÒhâ}«·ºwë±G5LýÀs7󻸣ELó¨o0RÒb¹´bkt¢Ù|Â$�|Å¿«®ÜH1T¿XÚ/¸½»6Ö—ƒŒO?œËƒ¾›ëTµ$1«‚ѵëC°Ä‘±ú7YLi~~=Œ©ÒQ îš#y’i½ª'%h”ƒìÖ0’Q“¾™/ÝVÍ|âAÆA]?ŸX�{½ùGÇÝ{{‚©àÈ]ñ¢æCìÝQ¹jçƲ�KDè’µ5Peh:5\µÿƒè–˜D°dUM²º?f¾GM¯äqêx½ZhEÚ²"°¬Û®SêGQ•rúàØ:Ø™Õ`2µï=ì8�#óG2,¨ÝþLí<ÈÌŒhØ“üd¯Çe((‰_3ì–¾V‘§p|ÝÖ�0CK0¡¿ÛàöÑŽYo|o$-à\Ÿ�„)–w¿Âǣѫ©êœ½®‘ZIÜA8‚ê#öZG%Ÿ?ß¿Š~pûkCY‚£¥õÐP+ÔQ¼Gè,«;ÖjUeá<‡11åtP ¶j™ÈZQ@dª¯aB7f¬2)"dY(ûZ,°µ€hÕÊ«€Dœ@bH*®ÜÒs7íÁÖ„N0.¼Ðsÿü6šÌx[ÝlèÊùÒ +8BãO)Û&É«Y(ØZ(¨émËiYWl0X’"Ç´“¨ÍÁá-Ð]´´ì ]ºQ¹«)ƒcÐê^ue÷^˃nZÃÑí’ÚK”s“•×*aÑ‘Z…ÜZ±Zõ¦$5¬ô¦½¶Z`3*]k¨Vƒ¨cIÔ®)’ÀË6ÐMÓ‰úÑ’g[‘cxu${0›;Z|‚ê +‘¡jâÀ&°v:§õA†$nŸ`»QΆçõ&vâƒ,–£un™>¶öz¸}ýrÀC +Q%Ðb%HAÑ⨠Z VxõéAÎÝ+íoó嵎×D›ËvVuÑÒ“´Š8—ëš›;š¯”ãY(Û')z%)_^À&l-c# lžzš¢I+¶™nfKÄ‚•Sœ‚ši°š$@Îâ‹[ŒB‰ºF+Pc54Ñ@7UÂQ¨v@Ô]¨ÊÕ褞µ +hR"H Öųtrs \‰ê9:]ÓDÀÅzží&EWºyQ¿ŸnèÅÑjÝ™ØÚˆ‚Y`mÁpÕËh&g!,iõ.kx –D7ã¦�ÌËR—’íf£ÔÚáùl™|¶€�Ì ©À:¾D}ŽŽ/]AHÙvè¤x[Ÿa¡DªU(‡[8»Èq=tuv(ÑDÂ*mÄÖ0×»Þ4…ó{k‹cê.ðp’v^rN“ýöVëu ,š>Ü_»¨´V%·V.]^,éuQùHaÈèL¼¯Gw쵓•`/pO'5€qº–"¨DÍk±©ŸcH7ãI*jm@�¨ªyÕ Õ¸$eÏ K“VŽIǤ†cˆ«çÔêuM!-}^`ƒPºNsb¨¨©'Ø4ŸCÑ‘]¡F©ÅŠ¾M]`C_"®è Êr~cUÝo–¸Í÷Áý�ˆcK¸²%½hË}îï<ä=A‘‰¸*º>š£K+ +XÈRV¡(x…Xbçøºa(%RCàŇ nÏèªPbBõvmýzËz×…ctÓ\¢~>Çt¡ ôG„®ê¶¢Ôje®7¢•=¿¿VÛ•ˆªÅJ#SAòc4T¢’‚ë7ȵPËå˜'‚+,æ{tÐd«@ZötÃîA·a°I +¸W‹Ná…fÓæÕwÑCH¡yÞH@Mu'JNR¬OÍ1¤«ÖÓqDõò$ƒn°i½B×@ u!ÞBo”n*`ƒÃÑÕ=k-âZ£4€®“6 Ýå4F4Í¥ëçÓ•‘Iò=ódxMÝh”ƒ+µ–½%P¬¯U+¾;Ð.`iFS*²Ðd€ÍÎõ-9~I•¶cÛ e°I Ì8‡£…訵>Xh4'iÒ.ôÓäÊZ¾ÄôcKÉH&2¯®6¯|K7å˜U5¥€õóˆšŠå® ;Î0Š`ýab~—[È›ˆN ÀX’®XkÐQËÑ@*cF ¨:²ƒ §B[ˆ£ã²8ªb~gV÷}"†àý¨î+ÐC41ä˜äƒS¶ kwWõ¡T¨ªÍI“V°A +XìÆ"W@Í«s¾*ÅÈ^IÀ¤‹n6Ä1AjæÝÅu‚M«ÀF)ÄŠŠlÍ”$5°i÷8ÑÖ©ÃèòŠjKÇ *&úT±ºwOÌ:ÁÆ)tý"ú"•ÚÊÖ¨:¼ŒQ¯Ûóînbà9ì¤FjÒ´PKT2ªMFº²~�%HÙé‡>ÖÀ>sk'ÈêÒ4t½*Ž]:m¡gI×AÒÚœKåJk®_y’·^Ë�¨åÜÒW¬7Ô 7Lá·lîÁ’z€¦†`ñͫ¶ƒs·Ë¨£bÕµ«S7«rÔð u‘ZY]Û$žZ$š®WJ¿òlêÞbM¼ÑC{Õ”³·Ðà蔯6,¦å ‰ú) $¯ö„v ™ƒ×ª5îw R8ëÆ_ynàW»5R’uZhtƒ´=Á†ÕDÓ~ºY+ÝP.Á6l&švÑMr8EôLC0V¥Å°ŽhÌ�àèZÃIJjuH\²Ÿ†>—„mâïÎç ©`¼ÏB5‹Wð«bóšXúåàfgmçiHEüÂ1‹kzÑjÐë´÷nµü3uSˆ¦fµºˆWl…1íèƒ8¢/§”Åv%=÷nG ±ù!=ªÀï-Ö©ø…º¹Ú–Ä%Þ{ô-×áÁT,ŽÙI!›i²x´ +G¯š˜ âiˆµxÚj#[ÐRï@ƒõ¨0l4HÙÓCvä$¸:xÜ —ƒí ›5‡-ŸÇÙ~vI‡d’´3çÁž ˆš¸ZÌö 60é +0X«¦Æ1ë¦ãtàtW¨ß†jï‹ÐUÏ4ÉüiDã槦ÕD}.GÖàÎqºÎ «9ÚéµÊÑÕ@ºµ`“s`£jE,e„yþòûcµlªË’ÕœƒD¦nÍm•Èn HVË•nRdcäÉ1L¿Ö´#Te¡ý†ndKÔLÕ:7u4ÐD¶5Ѩ”n`ËY¤Xà¿U`±èC£¿}GÈÑ!³†È•ãM+À^-[ÑìPO;åjõÁ$Møw°VGÒB/¢ZæC$?n);\Ã'Ö+"šÔ‰%ŸÜŠÝ*ÛЊãæÍÓñ�sUQ·¤;ù´¿_‘æÅC4ú@GÐõ±`U|§^=û’&¼·V‹o‡¡%G+Åb•X’\7Í—�‘Åä!œE¢y7]¿ƒ+8QbÁPY˵£éÚUj£ ì‡$-OºéUŽT&ç® +}Q‡¶Ñ9¢I>](-I‰d¡hi± ¨[Ä(ÜÇ@]©¯ñCš49!’”ð1¹`=5°š%hå2ÒÞ—Ãkƒ[‰fnúy`…ÄCHÈ ÐðÓQ°y +ëk¡.‘$–zŽAÃJôhW1ÞÜ(ÃSþd´<PÉÑ7!>×o"Óq8°ªb +.ÞtÏð77t|ÒÇ,¸ëb¨ž¸¼JÀ%œ|Õ +t ÕÊF‰ª\÷pLkèYçÀcÉ«©ø:"®œ¾D±¦BÓ#I FÄØnÁ"je°t}ØJó&0)“®‡+ØW¸Bhç±À -ä›âäaµèl‹6½(kY#Õ]» 6ãpýœ •h”&ª¯§€p´)`º$u:I¬çéEÜ~ÈázD KºA.݈J4<R¶¯Õ\˜¤ a¡J|#SoV“®W å=ÇÉRô1\K¹„•ÏI½ôöØ :UªÄ¸†>εØwWœ=»{!^ Í9ÿšh‚+5Õª¦¿È|IhÒàè!‰ÆU]öDK›-n½À4±Zú¡Z“µª t-Z%…–F+Z(¸Òq¾¦)tCj’Ó%Ú”uø+‚Õ°%Ú#Í°ò»â±ÅCfCô»¯ÀÆȨëXKËlŽ¥‰.ž®ŸŽ^B?#*÷ßFÕat“T\Á¸ “!ºAi¥¬ZÇÞ³RÜMô–½gåÍÍÙͲ‰´e+çÖbsÀ-·èz"ú†¤$Ì0!óP€¿™JתišÛ•ïįۢW'`è +ÖT{ó– +~²¤„Éã\ä±ã )KŽáèQó~N‘®ªV¯©óz´Ÿ-ûAªááZÎm» ¤¦FF7(çvê™ÙªŒÔ³G+ÀÆCt³&°®o†1Ôc›%_-æ\’® ýh/q—G]1)èþ-Y¬8¦šO¾cŒ° ãþ�áˆÐ%i:È1NçQ@Oà¹~&|²M·òLwìÝ…KdDhXÇ7ϼ|;ÌÈ°u³Å[)LV½¾"EÏžóú(Ô’t?îúöw9‘Zy|–D¥ù Y=WŽzqÒBR_’õXÚ…nà‡»2ãïÓd;Íðó^-¾e˜ðaübTCp×Ù%© §O(g¼/åßòŽ·GFÝËw¸vh-\7òYçhÚl@ûn•ÉÛ0‘í»,Bï˜$¼}ûÛβG=Wó½m‹b©^3IÈ|ñZΑ}‹€yíö ëî,SX·öN‘önLtÔëFEØèpEÈ!þ]'‚R�OÛ®Ùd°¼RãòFh.ôÊŠz-†ûó}U›@V™MKåÌv¾êâ«áYq:zìÙï{XÛ +-6¾è<â2Ðâbô±n‡úLa Š/*Mßñþ…M^Ü&}U¶$ßJ©(¥£<¬¿ÎïÄ+HãØ>Æ.†³¼ ‚ +vÝì®ÑÕÛ3ÿfs§æê±WV€”²äÌH/ûoþ!<.·�ì;‘Zs,~@–1æ4ëÑm½ÍFHrŽ¨±+yDzÅVð¨nš jm¦“õ.ïSA,Ùø¶5l™×£ƒ0ït²õ6[ Ã~+þ,Æ¿ó2¼{ã^¿Øëç®ê'¥—ëßò~øÎsÓ±y hä-+ɵ½µÖðÐ:Õd´ï™"Ñ=|vEÙ9ö&4É(íiß³„n.±V&ï¡tØ)ËÆVÑ 2^¹)}¿™û¾ïÆ+†Tñó‰äÓa•ª,ÙMÛ•÷*ç`-RäºÉ,§øî–ËÛë¼÷V*ØÙ'í“GÓ±½ÿáˆò¾øÛZ‡6+¦ˆ€øÐI°ÞÔùq;^TxåÈCdm{¼uŽ/Œ”‚f +&ñ)l%õ²2ßeÞTÌf·öðlWµ¦&É[¼¤gÈ)ñøí·%ոÿþ÷ ;=Žõt¸„ÒE’Rä! ruïþÄ^à�lU4ŠŒ{ÆØqHTIÊ=zÄæc½"fÃG0,/Ží +¹td`ÿ†VC¦¤ƒb›¥HV¾‚H\@!q³0k!EN×òÛøø–’ŒO~ÏCD˜š¡üfyh%9\ë°lbuLdÉòÞLù‚ò1{£<<ý™7Ë4UÛe]øc<3MFDÅ+}ÇÖÍþ{¢Ÿ½]&·úò-ky<ñÖ‚—µîùI¯Ž{TÿruâÛ0ïÌåJðІ]kî³%öÅ÷:ñ"ƒw¨úÃÈÌy‡¤|ê"Q‘çæ±Ââ»nÚ¾ªª‚¹Ë›zfÔJªêCi'š¿ÜÆÛ26yìÖGÌÝÞ+"’–Mc5T�€J姶‚²,±N<°Ðîž5›F7äxÛYî¤T‰fˆŠÂ.˜jîmóÜuéÈ—ÝfE3·×ÈËÜÇŠ˜ b~ JÃÞÒÚW1_’\Û –Ejñ/ëê…ݢؘ3¶f&IæeÕ)ÚWðáòÀAp @1‹®IÖ଱ŽÀp6XÆÍÈúL±–�©ÕBºAe¼A}Åÿj|!’“ U+¯ÈŒ´åHWRÔã0éÞŠD™N¬1ô¥á0âj¹·VàKÎ�Œõ@¨å¬¥�:¬É‹©[‘™PúÌàM¯ñ¥Á(+ŽŒÙZ»Ù. ´]æ*ÕZ÷Yp-•ˆzEÅ<ñ8,×Á‘½p ªçe§óõW³L;0B‘¥ +²¯rY†L`ZH +^“R¿(LK5زP:³ÕÊx<[8®Š(ûnÐÆó|›À +’¼xÕ°•¦gAŠ™Z¯Ø^X½êŠì4ÿœÂˆ²;6¦7z2ºkÅSÐÉš%m‚\9ðN¨:idÞjW0êõ ¯y¿h¦_Ýɺ&ëq£‡ä- çú]qÖš®ÙZþ¾>ˆë8k ׶͋ñò¢Y�+õ›·Üï.\ä”ãªí4Ï>$¶!¿U…DK%yÊ‹=åÑíŽ3ñ‘*¦ðhæ2ü»½EómQë1i+ +ðn[^\*{~´ï0¼qG“/>½”¿ñ-`ÒîÝ\_{°_;+"ÝÖk²mÐÎöõA>mâUX~sˆ~Žìh +ïŠ 7…ê5N¡ÎG©‘û9ó·VþÑmcòLËcuňç5>—-Í÷õ°¸Å$ì‘PHU-ü%•e²“–烬±VÓ%g$~ ʽ®iôÝtB8>ÑvQ‡ðÙF{KžêªÈˆªSP¹´�µÍi¾£Š…Ĺ,&®³`]‘Ym[o½xt%ƒI—©ÂëÖ®t—Ó‘*ÐE±;m£³ˆ‘ |PMo-þÅŠI5P“¤~áÝ>²±Q š¾N©ŽÑ½•ÃVZáé«ZHÏj0z—-|€R+¶?¥>ŠUÀo‹$¢F¡Ú‰@ÿh_µÓ^L“wNZAý’ˆ»ƒ zYÙq"±²Ï±GWÞY®µÚq«¦a›á;ÁÈb¢ì¦²¡íy~êkdp£¹CI#d‡MÝÏQ×UXµS„Öµ*ȽËoÄ%dÄ Ë>ìÌ4ÊÞ²¾¼O&·ºÞÐk¼s‹Ë3…æñ¦ýTZÚò.yØÕn¦á=§-™8w´1:Ì$'‰~†£yÅ1èð¦êdÕ°Ê9¹Mûqû"æ//Ç"RX&žiA~ÕI’uÃP“QÎÎdüÒ Õ"àf]"Ò –‚¹™<x½äø¢†ç³‹TÖ/ËN±Í•:—U¯èEÈIð!q¨ úµm~5ÞˆMɼ¸R²`Xq9ÚÉ&ËcaãºbÉX¡èÃf"û(Œý‘—×q’AE÷äÞS +z2Öv*ì޿ʯüe›P`‡ÅÝ÷q¼FíN6qdû»ësÂÖ/ +eŸ²T£üÆ3×fUx†ñ +×ßåK”9‹OVDÓø×Øû ‡k/¼îÉSô‘.³åÁ„‹¿CõR4B³ÓÖÔ¬Ce—½MX -.Üû‘/cY>0Ý’X9 +ݾéÉ‘¥Ñ¨sÞæÞ¿••ÇAý–l£m4’âàÚXRܳ Wk˦r0ü÷êdÍ䌵$NTáõFVF,"·ðü¬xóÇ4÷ª7Ùlè3Yný¾«¨ÇÇêµb„‚ÎÙ£°¸B‹…)p¤ðãÁÍtºÄ‘&&X2T8–á³ôŸXý»:¡€Ó-×óG6RCÓœ°òbGkÎÞ(ë^_¤€¨§Ö«gŒ¯Í÷‘]+ä€Ëï™ïÙ:r¿Ú°þyS$F2¬@æÃóGäàCˆ|Œ´YÔ(I†Ÿ(¹Ü +½¼{ôÙFLÙÇÛÇ4¸}¨+PŠDƒÅÕh¢ÁäFîÁw5F:�/ÁÈx÷È<,•m Á_,DÔÒ5øy¶ÿkö›^ŒlPvë0J„ô:ËRq¨gç•5ý‡ØÈcá²rCÊud™h J ¬¼&+¦\YF#}x‚žû,ÞB8øŽ gt¨}¬`{YÛƒ�¥À|Ä%ØbžX ÉZCZŠ:Ç–‰›˜“.)A½K~RGKW+’Î/x”Â]¢ÁshÒî4q6Áû™ÜcêAÆ#.†çk…•`7 óÁ—¯È?qxºæ ±š-ê…%±¥ð4Qš( W\ªáM–t%K푉+:Qé" òh2û€ˆó@dULKÁ‚l7Ç×W^¼„ÿVj¹ò2G6ìXÌc ÈZ¦\˜ªœã¼WçÈR%´¾Õåg7#)1* ÑÑctŒ J…eªA˜™"¨ÚXäaéP‚$#E&Ê•¦Ë=dËï¢1}1-]Å—ÔäΆÁ7Ò$W�E¯°»G…Ï°ebi’&jÈ<¬d²"³@Ê–,6.U æL“Î%#.e_ô<¦?׃h!ÈRÚä†z”Qo²ÌbØj¶8¶@‚Ùƒ\MADH÷Hf¦Â¨lÉ,êF®¡x[áþ¹Føj¾EWG,ûùÊ„jQ<:üb²±OŠnêe ”–ÈÕ½zMCm-nÓŠx3DF¸bÄE²¥™0²ÄÂ1KŒô!ê1MN(Õ»™ ”0Ã’§‰"þ0‹öóC;Ïò§Åa^ž"o`ôVòÊÝ"ó5þ4Xi²½ð´Qñ,[&Œ-ÉÀ¼Óp²ŒLééP*µ¤I¥“áû|šˆúÅ2¥QN)ò7ò¸4(•ÏFÔTÈÄöH®îA%<zLuk¥ô›¥ôŸÉõ’[ƒá»ÉÇó!ŸeËv³Áiöçžõ¼‚ž°@=«¼}DÚIÕ³ƒÂvžÈžÇH‘[H›[GÛäú p<Y<ºà˜¼¨Œ Ç<J%óõ•Ò`«1â1íqkŒ¤7Mzk¼xU´èÖs˜?F*…g(Wô÷ÈòÍ—m6eÒdr2ØË;ÙëúÉÞ1¨* Œ7Y*½ÞÔ£¼²ñÊíäY<• ¥KÕï‰| 3|Hʹ@‘&•Z�¯#£ ˆXŒ˜'~ £ÖÀ†CÂø!‹Žb¤zdbÇÉ’«i[ (!~”…&¢¤@¦ˆ /"À[iÈë—d‡Ø'ûS¨ëº#„dD6“æ¹X8=ÜXØÞ1ŒÊJ›Œ¢$±•e¨dqI_Œ¤YÔ(åÝ#¡X`‘Y�ÏSƒ'=ó:$uÀFf7^Ê^~-«è¼»†f´Šô÷,[ÐÁFž§Á÷±MšÈÈ?ÿ³$éeBÑd æ”ÞW¢ZÖܚ߀ºD@ä°a2@13‚¤'[Ò–v N#ˆ{Ñ`‡zà9RèÉC”übÙÌêBb¼L®‰-í¼žGðu%H&ƒ´íµˆ³@Dî2õj’u´céš™ââž¡Yå-SîÍiÝe÷ˆk^‘¡d™•WQíd”F²\{̤@T¦Û£¿‹¬½´G+ˆ‘vLj{YKïÀ jØKÚNtÚË¿§É¶öÀSØ’±=¿)B1]*1ðE‡"YYUä ÌÙŠ…e›ôn–‰¦IÆ’ÃûFŸE´ÓjÒ’îQÛubx¶¤7ARŸÀíOÉ ,ºGÙ#YBCi§µv÷ kh9®ü²¹@©D5»0’ É–é è]'À©"ÈBà¶C´½IB'ÎiÊBÃ,¶è¯_ô¤Ò~seþkÙÚx/ÍBpmå²ì!‚Ô k¼ýÒHÉy6RÃO®¹FÂp¥TÜSAž¥í²e‹&@ÅÏŠóg!>ø†Š´ôº»X(¯$êÈk6ôE05dxâVÏç劒§`ØÎ12»›–ɬ”L Ë0ÔS½cЃQû °àIW‚: ¨ÜÂW!f‘ØZ&5*ò±gï=2Š$*WEàʳa‘„%dR‡å³ÝG‘ 4„ÈèÝÒçrÃ=„—9ì`ù }òtzEånÀâ[6 +æv"§r¥²yžòÌä97X_®™&F¬*–1ñ™w“±#©[ ¦K–h~Xð–®yíJ'-÷ñx•Tz3ñyªŽL{v´²HØpbð¸é�ù]1–*/Jö¿·ÎaGÇ•LbMfÈ;Ç~Qb6YÊ„-*ŵdKŸÂp¥úy>TC"Ô/à5òÞöÔç‹· ñ…äSí˜%x öë>"Br0ƒÊÌ3é—=¶—¿Ai>“"lŒ¬ðQš/w#µ•€¼ÝƒZÏéå‘Áîríäí›É2îÚÍ —QFg`±éà\©¶½£Í;»É«K¯ ‰Õ³ç)/ùØûˆ¹Ÿ#_h 㛂‘)-8þ¸' e[tQرr „ ¶KÆ¡ì磊)Ÿ¿ +‡m•wgKå`çš+Õ2ßã;ändüÙðŽbä<Ä! ¢¥G¶(.î(m€8Æþ#AaS¬g«áAÕœ¼§/‡=Ð~S:@[ól€ça×G l>P*ƒ´ GìÂ(d酃Σ=¸ +2â]ªg£=ûlç¢}éˆKƒ²ù²í¾3×BŒLMÊà"˜¡>ßÙ™”žBuJáo°é™’ÐQÝNXúùت®¼TbOáuv~õÒ«C=²*O{‡EŽ,ÙÕo-ˆÀÖÏ'Þrÿˆ‘-Jí£óÏ'ÿF¾ßO`÷*žï&„¹º\#YSç oI;%»ô²Çî}Yï-:¥7_?î(‡|„tK•k¥qE4˜ùFa.UW;Ên¥¡çHm.¸ÍVhõ©ë‡]#KyHú÷Hçc:Ö�ž·ÃòhˆEÕªJäí™bò}K=žËÙaj~Ì;WléHžre¥D©ìm`ÜùÕõà‚Д¬aùC2"¸¦V?Ž¼£p¯ÀàaÁŸ‹Èëdä³ÐÓŒ'ÙÄÜ^½öž<Ñ…oùW²¥žtâ%¯õ,í$£FzÑ@iï£2I©l©@š$µ@Yà”lCCâHëéQ©Ìzµ+¯Á¿—&K'Àìk3®h8ÊõQÃF0ÿÐ(Îx9²Æí+s3ÊŒãî²ìFS6MÊ›LºãZ ){?hb|^Y‰î>Ô¼ªà¸ey?Ç–®Ã¼uw‘½MKq[,ׄ7ìÄ}D6ÓBȃ²yŽz«®÷üvÔd}rí#gù*ÇÎ>ú¶Ó®¼`¿ie#?@0{àÁl)& VrLŠ ”±ô—(t»Æÿx4hÉ ƒÜ‰‹‹ÇvÇÿNm/@õ5RoWš4 ËÙTýdÃõÞgX:SÄڨφš´Œþ$ó½½·×C…Ênô ›hH>MbOu±[Õ6ó2bª²Š—Pç00J¢Ÿ½Q ì4ÓÇ¢ï]U£¤Üáæøµ‚úpÒ»•îQÞ ïnmÙ±^Ò£¼¦úúFÙ¦ZË'QÍd-m\ ##ˆñ£I&ÐdÆ‚Ž„’áÇ^»?œ�îKEu†>èXÏ8^ÀŽ¤öï”íX||à‚tº¯ÝS£ ¸…æx[Öß3@3 ~¶�yƒ KAT'Áö#q'KgaJÎ`*Ëzâ/l?îñtã3^¹•šhP–Š‚™†W²÷Fø±‡=÷ ö½àFÁ|›³>žnH¿MȼhØ[Cj…>‘-ÒjÂCÛŽ"ªÈ§¤T +λ¸,6©§í¥¥^ó\6蔿îÅdËE_èQ‰D‹Ž·ìzöÇCÑQ÷PåWà;€ +ÇhKO]ÌB¡j؈êø™CDð¹#Oz@@ù5ç"od¶y»¥I—{¾žÄ“¶CÓïvë•k7¯®1O®Ñ»|rá£ngsW½¼‘/_~ãÞÈ{^qÿÞ~¶„·ùûî÷/®§I¿w~Ó‡‡mw4ƒÌ7¾{ý*mž^IÇ×£+~O•Tº7úb¤ï´ðþßÞŒ.8øf-Ü0öYGÆ5ëŒÛúÑoÆ,QV÷8¶úâ±l—›w ü*˜kW*¿gÛóâ’÷‚ö륛ÛJ–﹡æQêÑP¹\wþµ5 /nï�^{['èVMö¢€cwÏUz´¿ùlÕ¹ñuOši—¥®Èè…=¸Ý¶Þ®êžåZæH‰äüj+Ïmüx[òòuÍÀû „!O®9)ª }Yî߶ãÑ«+wIãoÖß~~÷dØVãzÀU“Wý/·˜¿©Ù¶Ôz1~é†å¦|d†˜T\¾©Ã£mW=F;u$ÌŸyô-3dD ê6›ls0ëÜޢ׬4¬q¹ºô¡}Ôeõ–8—Ã>ߥC‘:—Dè{UuoMS?^Õ~9ó ßq³åQŽ¸;®`AÝë¡:ŽFÏùpR&Ãu +[LFjú—yäƒ0 [vÐíÊ›½z¥eÔè’¡Ûnïã ßêÒ‹-ov×»ŸEl1蟯qYb… ÎoåI—5¯IJÓ{ñ‘sx™Ó[º»ÞÓþm9Öïº|–&ý1¤p5¢,xôº‹ø³K!Ç?4雽«9âQ6f²ýªa›¯BîžgŸn‹ï !ÚXiŸ þ-Ɖ“·¾KïŠô¥j^quÉÐÙ}%É^ï.CÜÑউO³æ™îK°J}-¦šo¯š<ù�»¢s#Ñ¥ÅèykÔ»‘m[Lç‚Wžžg4(l~êŒO‹~‹«‚£ñëÁ’“çå…™FOÊy®^ˆ{) y´ß»YG ª°D]"›žÞ! ¶°´d¯ÿ¬³¨“*$¸Ô°-_§rƒéuËÓaªÿøý KÞ\Š¹éþ–#j:Ö¯°c·gÅ㥦½xºƒeïQAý«^œL³Øß]ZpÕœ‚¤÷>™ºgθ¬y¾S»_çn~Ÿi¤œž‰»ëå 7ËgÄÅ‹Õ¢ßf{Í!â…Ggþ†ãf[«¶å.[BTÃFµSO´8 +µ0ÈfœgœõÌá\z†Ö‰ÒJ_õãIéúéªW¯ `«‡ØŸ+Zô¬‰¾ôÑÇ.ú2ÜèàBñçMó$bì¯}óþÙeÝ¥&¯»¢¶x‡@ý̇£òôØä—‚+¡ˆó<Œ=nš)È=ƒêPzRÝ˽¥8¹ÖMÐ:ãÝ]tÙß"lúêÜÇÏ^Ù®€h©nÀuŠ–¶_dx¤Ù”í~“Y× V-¸ecZë’ÐÄ'+è³ßÕßY8–J„sª“ÕÛÒüBû#"RÌÁŠ¼è½iÈ—qüf÷h™‘)Gda=,ÓdÁ°:°áãkp§AŒ0¼ä¸Ûó¾÷£@aíl¦ÃÙ +–ÃíŠ<G¦µµ×ª%äUˆz˱1õ>x´¨©?+ÎZ+‰îïÅA¾¨Î=ßFØèk©ô¦1¯ÂIhE+ûcœ$o£ï–Š[þ…Q«h¡ƒB‘žÄ½6$†ŸÙ==«mÚyªµø# »Ë¿ÈJ¤#zH,Ó/ê)qt›Ê3,ÌÍÁq§[ex˜KíE™þÙˆ¼U/Y¦ ®ÂºíNoÊ™¼Ia©¡môý Ú:êöîwŒ B¼ˆÈÇÕMOÏ·£å‚åFy Íì„œ¼uá'X&-9—È¿—Ä—Ý) +|<’™iª�¿ÍÇ2ì`ïX×J?+“õÐksfDº‚¾Å¼€šÛÞK@¯è²ƒÝÖzÅlµ˜:'Ù' ºtØ;ìúWè>øÅynÇžúÈjä5ZÅpœªn) îŠ4W˜–ì[^çl%쎧ð)é'Úµd®+=‰7Û,W®¯{*±¿pãA/.?9#p€')×ꊫ°2(Ð P¡4𙨰ù80 t¥A¿Švkm™^(v$q«’ˆs´F`¾)ìõÖM>HçDk½óB±U…Q¸FÓÇÛ*,’åÌÙ+\7=9ÉSé0¨{ËÊÖmK´rÐ#×T”ꪀztt«Éí +¡äxwŸG–Š+Ëô+"…ËM-X)•*Ba>EwT2µ"V^|f]VRÄÚåO{‘ÂÚઠgö7XÁÙñ zç³3ãÊKð:uó'»=úu«£ßQ ûf ÓýX^ö%§-¦m–ÉyeÊÒ¡“ó®Ù?§62‡"öæU<yLeJZ†Ù"_æ“JwEPÁÈ^¬�Cv]Çé²C°FýâŠÆ€á +Ƕë¡R Ûëú¾ìÅ™§7¿×Ý‹9’º'¶ÜõØ–µ)#õ@ä9Îg Ìöfvfu¤èiØo,£ª6J <ê‰õ²Ì‘ì…ë„N„¹8 IE©+Í¿ö2p#5�õ4kÿ&Ý×B<™’ºw#ïà³òüÀÖ`]¢Æ}Øq\h&fËi›'÷¨®)‹Z+¸ë%õú¯Ü¥fµVÛ}û¾U,•Ž +;+ì2$º< ‚ƒX&ÿÖRA8’Tï¡ /e§‘ +/¹Ö]]S’ïÜ°4#ûØ:Àÿ¾°QvÁpÊn雺֙…ã]mÖIÂñ"»M[㘅þåï›!•†™Û K±º2ªF‹E?Fï$½"„Ò×øÃ>Ú^ëëê[É ÕzñæµÑ‰ð{«Ë n1YœÃ-^ Ø+˜›Ï8²CÔ[½Ñ/…Ì/^¸Ñ,¸\l‡,ã{Qðûñq½ÖKYU"'Âíx^É„eœVßms§'½†ˆ»3Ö`PE-=èîsæ˜aµhFU¥+¶CIRÑ‘Ç_ÀxÛ}x ñÙ¡_™•.¶w"S½‚â™ú)yg# +ˆkÔ†’ÓÙ‚A¶/…ô㦈])a)ºBOƒamÈòÂ6•E7ýLãlÍJŸŒ/OLŠðÞ¹ÓE´p€YWà©d…ð{¶7õê"2‡¬m°¹;CkÖÖ‰#ïm®¶X#$%ÀæÏ(Mß^³Ýb›Žæê>ÔÒ—ÃO÷+mw”7øY§ +ÊïyƒÜôúHÕ¹‹Dz‹øÀ+t2'èˆy`-6a;†½þ7eškÛú‡ÒáµëÔ’¯vIˆ»ø Ý�&G +P^wÊWâJ¡"H°dx›ÔLìj49zÅÝwXÉßyÑÉ¡‡é-þæêRÂÁõ~c…¨pwÁ[Ý‚›*Lqq)g^˜õF´CŽ/–Wø‰×ê¨×«!Ä€¤e©7}Ä™îN‹b6Ž`Ö4Ò–_x +êè¸Z#Ð^.èµ@î‡sK¾îå·-ØG…Ýå˜:™ø(i0–ýVd+üûèøY6Öщø†°}”µ‹“‘×êÎRm‘^-/”HôÞãQåõÇ!Dš²M`op€mZáu õ›èëc$N7¹¿Ìn¼p÷Ìñ~IÍrê_ ¤mü¾f™Q®Çó7)âI™Eˆ1«ÅŒe +/£Òwhm»éK©HºY£n#êØe%¥ëKpVPrq›_íuÒv‹_΢ë¹Z§lVêˆûêè›ÝPîÇ +éY+0$%u0RîõT¿‚•ûý´|i×;±cÇ×k4d%ñƹ‘Ù +ñk=é‘<•¾¾W_§hoyÕ´Uó&=ÙOo½’žw[Æ!‹…ü)ˆÌ}©8x.![.|Ë#íÙÃç,uf©ûa‰%dë㌵Á7„xâIBþîþUxWÉEœqêRÄE·ªßÚö:™Ý¡dY¼è÷u¶ÞÊz¿mó]CÏ:Û¬Ùz.iQ„6ã_ü kññáMËd Ï‘"ë ±-1gDƒ-^ÀTu)5ѱí¯â¹Œ˜Fô¯û¨k“VìîA7v]îA-zéã Œ+{!·šéÑäs£s‹y„’õˆ'y‡#.W)Z9Æ™cÜ/¾Æ‡¤8þ0‡h»37ó²|W–Ì®FCÉÚÄ„ä݃¹¦¾îKÄ3±‡²ð@5–¯ƒÐØN²›%+|¹ã¢ê§Rrü•2¯i§7eµ«FrŽ(E½‹Y_è»[a ãèæ¼·GÌÎVcÊ·îBítðî=ì푧äOôHR +I<z´Ùò¢Þüö-Öæ£àÜÛ›#‰¶ˆ!zV”ePfÍÚlb™#Ì ;²_u±„»—»[(΃¸Yk‰VÞK=s![ýÑBòfDá¼D1™‚Óòçm¤D"¼¬3tK¨¥Ñ+Žª×H·Ñ³«iƒšû.ð8©¤»Ëž&ìúªÈ“…I>õ&Þ&ñé‘ã½_=¿WxÆżT7ãyƒÇG™ä‹ +è–í>p€¶V.!Î_Ë\‹aÀÏv>=²¿).§Î]áqô’…âRÛ3”½+·æ…>>¼÷ö©d¥y¶np›¼enyî‹G°þ.JÎS”¼ð«[ <ž´?ïñ‘}áÏèî@tà í«»Ö,>°9n٢׊³EoôòÏ<.½Ñ™v>NE?¼Ýéüæ<Í›;Sò*ocÜ:|uá1øÅœž³+uGâ:òN'um[êªsl$5æéÂã¯vK�ããù/ß?XóŸ+ãÇçÿhhiéuþ—®Žî¯óþ#—‰9??z²¿§ÎM:U|âLrŸðÐðHt”_4ZAkòäçX.Ÿ½&ßkM7®`hˆå^òÆÜššho²OH@dxL˜ïTÞÏyüg汜¼>å‰&{‡ú¡½Ã}ã¿Ê:#aòú”'0( P=”û_ôtž9j¬ýMµ')YM^S§”ϬÛÔW}îeh8ãët-¾ú:Gy:ß”§óÃò&¿Æû…††¯û¶¸Ù§Kã^“wh—ø°hrœÆÔe„ô#ûúEª(FE‡úMÆ€¶ô‹ò‰¢Lœ$?‘†Œö ó™<W>:íI^‡æ*:š2qlüT~‰|ŸÍ¦9}м¹Ùä´‰«ƒýç{+‚åô=ÚÄÕÎÕÞÊÌÄü˱½>áaþAÇKs;ÏÏ'0í7q*¹1— ‰æT–O¬\ hG‚ƒ•©¼ï—È£‰K]]¹o¹J¨ ?W–¿øuᑾQ_¥WC¯óó PCSÂ#£É¡jÜ~[»6&,(:^mâ¼à(5ôôáõÜ›°0®üúpõ ,šû~â\ô ¿é›øÉŒ”˜h¿HîŸ ?n:î …<ñ'0žÂý߇kBÕÐ~~!”#}ÕÐþáá§$G~ª°‰æŽ™¸¸.··BGsóšÊGûÅEkúDEÉ›¡?µ £®>}‹¶Xj¹\ÍÕR¤æf¯fo§fiç®f½ÔÙAÍÊAÍÂ~)q‰“ÛRW+ôznaÑêQA ~Fh%ÚxêÙŸ¼6(4ÞË9Œ¬èëÇm2YD5Fo˜.G]ýs='ëöéi¢x´«•—¥ +ØÉKmaC\j¿Ô™ûÆzò’Gìí—pŸ‰“—<zúQwò’G»O?ëO^_ºÐ•`Áå‚ÅRgK+.5.e¢•½=‰`iiçhc*¯=õìB"§Ÿ?eäætþ|Ï}°äöûD:GSyy3;´‹3ÑT^óÇgÜMÔ{†h¡'ÞËOˆ¦å—‚4g”4QêDaÜÖÚp‹Šœ0Dò³‹¶æÊÚÅn…Õdu?±úå„Ut"úËÁ«þ䈉“wå͸7ß|Œò#GúN}Ÿºÿ6IŒ÷Ú èé$“÷“býM:²W¸§NÕž~óMJ®Âx‡“#}§’~zšHf¢9Ñ63[ç)}ÙYýá>Í£èpŠ<z™¥«©¼–6öKr“™¹Gûzs F˜ŸOôÄéÝ3ÞO[Ë (J(9Mö]†æ*´OH”Ñ̼Sß Ÿ'¿rÍW`PÔ,B3éDúùûEF… ',ÒLRÓ”œ'C£>ú”À|¦`Ì’ï´XW÷S‹§»áÏL:Ù;*:’Ìå÷éç-:9ìsÆ){Åu«qj\COŽFEMü)J_]ÜD~QŸÚìç‹ž Èõ kÉ\.O8ˆÙžásÕý|ƒ¸…¨¡ƒÂüÃ#גø–ë0¸ŠM^Ë5ºŠ\Qæv%÷îS&µ‰cä×NÛVEr´_À¤YUôõ£pMðÄîChPXÈ'Ÿ3ƒ"×'úrs¨Ès ¸5škZ—£ÕÑFAFQh‚üÌ¢?÷øœ^ˆÿ›.ü±ùÑý"¸Xìù™òíüÅr}Þ”w›u³OAÒ„“7›e™´?™‡æÔžÎiaöùû4;§Ü¦ÅgEüF ¦bÓäghá1þJ'ƒüÑ*_úøsÇL_®E£ågX<Oyu-Oy3RxT4Wš¼ã?›OùÈ<œb:a‚&+ÅLĦ_ +áfÿò0iœ¸’÷¥ƒå'y`>U³/¢£:ÕRyg3ÿÈðµ“b<ã;š{ñ)ó§ŠÏdãg£î)ïÃÍàéù©ó=åqXÏ©þøÜš/–Ùü“(›~jÏÙÝì)¯€Ó144 L4íSšÏe&{TÞxg7̸÷òûëlW$‡…‡Å¯ ‰ú¯áÞO³n‹ßå‹ù‘ÿ‘³þ3eÐùJ¾V×/f¨Å$÷>³¯”bš‘$³Ï†ÏD“dÆ}ž-_Ù +n³&Mªr:,<Úï/©Î”1žàÜÔÝߌ¦{ç‹Ñ¨ÆLnÎ`æ·26Å©O-˜™ëÓÍþðû=ñóVé±Õ„ñü”uÂML !f@îí„=7›ãiŸ;ïçœîÔàç}.×cN„#“ƒ‚P?n‡MS@«LžŒ±ætºŸ%G¶‹æöøº /Ã<DsüÂ&üÃ'Æ€\}öŸC'(Œ«ÓÜqWŹ¿þÜ †ì«¾6<Ò=Áž¨?sæÓMþ+¾|–«žÛ±M)FúQBãÿ_þCgþE�ÿ¦3ÿK¾üßì¿ÿ†ûþ¿î½ÿ÷zÎÿß6KRÐ_‹Ê'VË‹Íö_ûÀÏþÛÜÜt˦¬Ò¬†M½ú:ý¿Ù}6 òSöQÞøçÜú§ÜØ4~àÆ&*ùÅpï¹\öðh“Ó$SNë+gû‹O´)º9Ë/DùNx®Uçþ‰‰ävE?®Û™øåÃuH“Þ€öÅWLõ&2N8®‰YOùÏ&jnƒÏÿ¹C1~‘~A*ò+Éê XuÃUòjÓÕRUEOßq ~ÑeãfnÈDÞéÛ‰Ú¬GO?®ú$!Óâ3=é8!ßA¾\‰ü\·‰9"·9\ÑžnçôtªÑ¬ü³•§<7>žåª<åu=gO|yÊkϨ'ü×T©3ˆÎ’ʯ5OûÛä“æàëwè?¯v®ª}[³/üp™â¡ÑW%MN}SþTþi(1©33®·à›¡Õ·†ëw?ù¯åÒþ2*™ƒ‡S5°øÓ2>ÉÉgâ_SR +óŽ¢£g¹š‰^@¯t™Ð£iÍŸ!™AQQ~\ýšÒÕO¶jFxµf_4yÍÔ÷¨•Ó ¿’ÍU_9—™œÕœêñ/]ãÎMò„zÓ;söƒóÒe“±¸§¼÷ÉýÓçµA¾¾¡~3Tﻼu±²·"º~ÒŸ‰}Q¢o’OäXJrµ[ê8QšÛg=]q®õžújæö);7ö˜ˆz¸Œ5æÆ´hôÄ„x¸¿ÊÜlTH´hÑŒàhVù_—®49B»C‚VÍQŸ s0AsŠ?꤯•EsJ[¾ô!†;ΈüW´êsÿE‡S¸š&øIQ&ôhÚ”Nˆ7z¦¤~2±˜™6vgNµúÅqãôtL8éI¸vßïóŒëd´ˆÖ0´ª?Lî9==ñeöLÁd 'ýêò3渹rÇýn4•j2¤˜¸ù–Ì´¯ŒŽ¦ijr]×¹©~—êÄW._] Î6V®Üç5a~ë&ˆs_Ï&ý%füÆ>¬œ&þµ+F?-)–\E™KLæ ³‰´_D@^=Õm®ŸÂ`•I/¯ŠÖÿ´|.ì‹™`¾q9sTùÛú’&£äÉeaî¨vZ׌fHßô+Õžo²1ßó~:3tvŽj)s:Qá–B‹WYæÔ§Ÿ.r¢+§óü°Dïðèhî¨a"R‰RÍß飖¹rzndÕ¬R¿â÷Œ¾ùÓ’éä·îï„”ÓYÑäé r˜ïçÏäè9§4|ƒüý¹:ÇeÌÄ�*j¢ÿ'T+g3FS³#dtlPÔÄ Š õŠŽš“ØÔòîTŽ0ôÔ ½Ž;.š¬×ŠÌLBñ§„νJâèç2YnÍ&Ö„¹Fgòq²ô¨¨‰vGÄøÅpã\¿hŸÙaó'þý{¦Yþ$`žüôk~ä×üȧë×üȯù‘i~dîÕïjrdjÐôÓ!S®ý'¾Ë;<nz×bNÄa=}"³æäV‚Ùö|’æSÍ5·Ñ“b¾ý§†ø“tÿé[ç›!¶Î÷GÿÓT¿‰>/Ã}/\Ðú–æœÂé?khýeä;‡™þ^~%M³ð»TfvÿO-þá\å‰Tùâ¦rÎîòOÔ¾Ú +÷“@´ô¾»å% 4Ü›ŠV$Ù’ÖpG„ÖÆhôŒý*ŠÉµ-Ü*ŸS¨¡åƒÂ|ýâ&÷æ¨~å±>‘›0³vÐÌ…†MŠñÌý3Ÿ7ÐL™˜/›^¾G%6<zb÷%<4t.:$îû9¶à̦ê;9;61Œš‹ÊÒP_ÛOß¿Ù‡óõæwØ5sßÓ×›µ³h*ÝĆΉ–ÍYŸiî¸L'ùÛUš²¬?ìè _côw9éJžðÇ“ë|sÕÔy*ýÄ÷©jªMÒüAopCá÷†£ßºŸïï3ú+ç§\Ñ,õœÖÎ)Ë8{×Þ— `öö½•èÿŸ6ð¡W¡§möŸ°î“Ír·š;@§w¦šh~ÙüÙs 2·7þ§w³ÿºþêõ}üÇƬŒ?Åhë|ÆèèkOà?ôtô~á?þ×ü‡9*Èçääädªž¿@ ¿@ ¿@ ¿@ ¿@ ¿@ ÿß/“üüÌÐ…_ _ _ _ _›þWxïÿ½žó×&‡ÿ¾M¿@ ¿@ ¿@ ¿@ ¿@ ¿@ s•þòòòòòòòk~ä×üȯù‘ÿKó#¿@ ¿@ ¿@ sZŸ_ ô/ÈOUéäää×õ?yMo‹u#†‡ùYjþ[Ê@ëb ô¾‡ÿ˜¸°Óø}m¬®¥e £ @ëý[jóÕõÿñUÿÿœÿ¢££§o0ÕÿúÜ_ƒ‰þ×ÕÖÖý…ÿùO\&æ‚ü‚_�#8VÏFÿL¾·D΀åL#>ÁÂ#}'—Ž¹ßgd˜‰ý!b'~¾‡ú’i`hv)_†¾dš…šékÄЗLŸ6N5w"§6vâGÞx’7sàŠ¾iÚl`Ñ7ОUŸoªûõç¹ +Õù¶Ð)t‘¥ÁÄÏ…êü¸ÐY�£/er/Á9S_aŒÿò˜jd$8kPõ5ÊHpzl%8€LFŸ&`3‚Ÿ£º¿‹4úLá/@æÊóß5úÄ4Í™\ûÚèsó0êêŸîÑÿF¨Ñç2&AEëÑkÉ‘Üá¨ZK‰3žIÔðïuq ØÛÏQ¹ÅÚÙÌþÎ-xfuõ/ü›A}zü1 +jÚ¸}FA}Jñ …øù‚‚úôì@p¶±s´µ²³±u˜wÿôæóDü—îüñä=ö+ ÔTU¸£"W<œ¿P™=!ó¹¢3S_EÓ€©°˜ÐÐ)ÀÔŒº}ÞTñ #þ:=½irŸk:“*;ñ3Cÿ7å@k’)Ÿ¾Ùþ-”ì«–ü”ìKQš3ËúaÁŸF«S8£ºsµ~æÂÍ7‚ð5k¾;;9{1gÒíS5þJÙZ߬0}‡êÏ®/qµ÷ÿ3@Ýd‹>Ï|~žêüæÍ1ùy2Ÿ!3³àu_Þ›ÏÌ<÷¦žþge™¦¸á'¢†Ù0¶ŸþÇ6Mê«ëOl³£ÿ’mš½kûû4›¿³¨ð©ãÌÿ®UüYS0{YøKa“š<S~þlyùkã0'ݸÎÿ+Sòó‹Ï©fÓ‹Š³¬µå¬ÇYZùÍôÌ_–@&›ÿ=ÏSÕý.2ì_ÒMs{ÖÐ퇸º™Ý0óajšúçøýŸYõþS¶ýûyö}~™ÿ¼úÉõßïÇ\ßña_ãîfõÝ_ÞùÙöŸYqŸQ×™\C¿ÂÞÍÌøéfNÿý£^ùyÃõwxŸGMß‹`&táS1ïçÈ™À¼ŸŠ"~™7wñ7 ysúËؼ¯â“ÿ8ï O~Ÿü üsâþ˜äï„$ÿDDò¿~WÜߊþ[6Æý9éÙRƒþFlþtƒÜ79þkwÈ}Û¶?Ù"÷×{á_pÊ#üKÎýÓÎx¼pngü—ð…³}Þ`øã!õ§¯cøã¼?2œ¦ð]”áçúýw¸Ôé5D4úGÀÇÙmúÈÇ9ö)~Å©BuæH?}üêåß?jÍ~œÅ•OXį›Fj}óú' Z?‡ü´ú×ñßV軀È;CçDÎîz®Éùû8Ccþ6øqV!«¾ößâ¥fuÎ�äÏuÄ_E@ÎÅÍA çHþ+ÈéüùÙSýc(ÈiŠæâÄäºëkµÑœÖ›Ý8 ]üUìÏÑ3d÷{pÈÏÌü <äç´ÿ ò3Í9‹Î?‰üJà~ù}¡ú+b3vœSfþ9däçòæÀF~í“æªù\Õž9Sÿ*@Rû;�É9Šý"9³Ø¿ˆ‘Ô™#9g[g¡$¿qþ &©ó=˜ä7œŸÝOæsÅÑ?¿ 6Hùƒç#)çžú»Pʹ©ý,åw¦Øþ˜röáߎ¦üñè`Zþbï_³YèÏyþ®¯ý+k[ÿ3K[ÿ'®üÿM\™ÏâúSóOÍZ}ïüKóTŸ<-úO]í¸Ï¹îŸ�?gûžï#?ÿ×86ÿõG2ÿ +õ€Ÿ~§ú~(ž3ÖŸŽ?ãSZ,¿¨ÎÍ/Õ©š|O‘Rýž¦úeéý“@ÕY¾hRuïaUg%™¬úÉ2ÌEh&\u.R3ñª?¨ÏlÄê\„悬ÎH÷õÒÿO‚V¿[¡oP«?àÓ×°Õ¿Q¯€«söé$rõ<œ]«¾ß¯þ€ìlXé\dç•þ€?àú?ZÖw7˜‘æ»ÇÌbÈ8ø–Ø7'üõ8`¶]ùΞ_{•ÿÏîUþ®ðÌNùï@üã ‡/µÿºòSàèOO3pK3BÖÉ `Bþ§aŸ¯¹ðÏ–ñð¿ºzºç¿éhcõ~áÿ×±,ÿL?Æÿjéèê}êîÓþ×@_ÿþ÷?qÙØYãÉG€¾€7“Ï|||"""0ƒÁ¨ªªjiiZXX,^¼ØÙÙyÅŠ>>>!!!QQQëׯg0ééé999yyy,++;yòäï¿ÿÞÐÐÐÒÒrãÆ{÷î <þüÍ›7üº~]ÿÝæ-�ˆ�Ô&4aB'�|ã�Ò¶<ŸMç_èÙT^Àa‰(,γ8PŸÓ îjª(lÜ‚&¦"í*‹.nSq)ñ¼Xyð2SXˆßvˆÎ«õ¸ëâËn0tžLÅ«› +Ê3Ýv(±Ï‚À @îâ˜`�" èAqyTŸ+Ãzä£ o;ÜøŠzçthß1SªWȲãqd 6¿ä>€7ë!*ÝÉ? äüqáj“˜OÒ<qß³è@ $¦s¯yW�œµ@|c?PF¦¬þØ +L:¿Ü´u@o²óÓÀ“ð5î×η¥îyu +Õ]&H°“*ø 4îiùƒ¡~m§~·Ï7î:#9®w}hä¢�?V‰šdÌ“TóÌ5¿Jæ’€e=[‡{µãíSé¼P°¾cù<Eô½8o½Îî8ëÜ|`¹:«fÓÀ®~*0u• +oU>À3Ÿ´j£m˜¼œR³ÊÍˉ_»µfÕu¯Ýk j�Z¢üëA… â8 +5�8´{‰PNÃr@æÊJÈðÈX_Ž«ãr6˜x Ï\˜}(ÀoIZ°ažý�SÔ4_n“Ú©3·Ü–cЫã3ëj2\ç•x\¼³Øû© £ƒ<”@ò^¹E÷¼A&¯ñ)>Öƒ¶Kªå{zyî9à":LÍyIÎgC‘Ñ^¡/ðÛ×K}ÌAŒƒ%ð;㼯֔ÝÌؾ—”+zKi[ÄÂ@zíàN ÈX.ð*±{èD«Ñ/"JØ"á±bû¾”àQñ}ñ«›r7úcCw?>;têIØoƒ«—¬ááwµªÉÞÅìÇ'ƒp…PdœÈÓðæu… É ¿uñÀâmãqK� ¼E»†iQóê6¬9(–¢\>\É‹lZ)¾$I ·¤-øcPùÄ•’¡—Wñ›ðe—Å\sWœG›R€’,à%óÂZ²£ëË5Òú¨‘nŽ&ìúßœŸøƒ$²jšÅ ½¢€Þí;„Æ»´“/o,q)íÅ7¿Ž‹¼Á«W%k»ÆÃ×qa;bíâí Ç(‘8Þ—„� ±øå’•"Wß(ŸET->ñ<é<0_ÃÆ~¤~aå˜×]Ù:À¦©¹ÀnzãªêË0£ëÉ*Çîêo�lÙ÷~¤q]pÂݛõû¤n ú_y%¶:ËaÝ®Kžo ÓIKì¾V™þlÿ‘-A„¬õn¶Û‹Ù ®…õ™mlMN¤údì:E¿ó +Ãqô¨Á)¨Q‰€GT³ˆ¼©äògüÔ0q4°Ñ@](Oüè½:0îul½ß~°üi6;>ßëå.À¾Ì¢ê+~«yº¢‰SA5È_”¨®¡a}©ùðuúõ.ªx¡uœ…fGé×Auj6ÔgAWí9'öI‚oV¾K|\˜þ\¬¦Vë¬Ö +ó¼-£ŽuÍv¬8þÞµòVe£IÂmï[ 0ÀTèí¿Š£FÌÛš…Yó¢?÷ð€UQ<ÀËçÕ1Þ‹Z ÁJ},“pÛ#"´)7wSݼoRë$¨6ÞCŠÂË äðÀ=÷,Ôx @Aðëm~—Dìë®x±¹€$Û5áÜñFó$Xª½©™ß/ÿ2ï³/Nøtw³å>ÌÒ€íÕÇwÞ}×·ÈtÝ%Jm¶™-:ÏÛ@±Åfó³q¤‚�ÆK>ȬßzÑ9<öþþ‡˜£˜úDü«ª¸L¬›èæ]j£ˆý»Èmo)§Ö5³·É4#LÑš—y¼öÍOÄ{ßÖ?Û˜9¹«žV«cvfÔV³<†Î•wSÚlp4e)È9së…m¶&‡AGv§v¿<‚÷öz¼”¡& p˜¯úÂKeï9õþ’‹bƒ.Ç yÞ‹ÔjQA™›³xk”�YíÁÂÊx×wymG…*öh—º,.‹W.+±òP¼š/™Ï¿rÞÖZ ìõ‘íEÔDh<£9Z`RH¼R¤uòãÖ#}ë©’}À΢ŒæïkmÛçÛƬOr·}‰\OL7û`ésZ¥øv"¼r‡üÙ Åw;â¡!ª‡”‚ŒVðê0¹v�µ^#gX…ß}zÙ¥p³¢!y¢«Ñöò¤Øôì+ªA)ið+Á7ÑaO%¶”×Âj2¶)ª†Ïf!Þ> œ|6b"Â!5œBÇ=´.JÚæ²Óõ׋%XÖC…yj5þ›ÈWך½hÌS¯N…¡klœ,Ô¯»ðRt8J“RÈ+‡c¿|[Þ][ÎlŽ-`èú¾;&º*î¹¾ÌÿΚŸzœ^¸|'ëQïÅ…f«‘gÖ{ÑkªO%˜xzKÎ’€£èy+·,¤"åÀo}ë=¨‚>xo�h?ëQÜÒY¦é|üŠ“’¦)BssßµÏ òrÄÙn{˜aõiw×{)ùÅ0"ºIùL0¾¯‹wézêúOÀ{ýg’×ëï?nÿ(ß/jàÛJ#&8+ð¼(ànMoC`ëLx©4tçáÞ͘"j¢ÆÇGïà¡?˜b×™Þ% [·aJ6F +¿´ÙÏ—§µ”·³|IÓ|ª¸óÿcïcu‰Ú®Qð^¶í½ìµöÞ˶mÛ¶mÛ¶mÛ¶mÛºw?ïy»ûü9ù:éœ|I§ßñ¯R•Tªæãºf‘Y<…>FV,5SµÎ¼ ¬¯§B-|HÆê¦ö'¥Ž�s;¹MúkÀ‚·ÆÖ´'éK·KçØH™¼bSVÆàºÊÎ^ÿÉå-ôyÊ„1[ªMƒí}ƾ‰0|)éÝõHµÛ?’aTn$¶! ñ�BÈ‚îÆVGɲN†GL`Ö"zÂzr¾G¸`7«Ëm#|PˆXÿ#3Ò$XçÑl+{™¿K…´IÖf}—äõí›—¼h®Ag8tï âg:kZÖc–_!k]`¿“Qã>ƒ{QÆ”Bîß«kÁz7ˆÇb%A=¨Lû÷¤óš¯U"¯+[h¾`dKo!©z¡Ú¸Utz®«ÁGq�¼N*‰9‰ë>ƒ¶ïà»@vg?Úc~N0ÎX¥âØòØ°¨]Ãx¿üube'Ƴßrsœ†®¯u7Ói¼]îHß‚jÜûœÃy3ÏñÇv„šÒ0Išahs~Ô,Hu&Þ€_•Œbϯ>©÷²zœ™à¥¬¾æʾ}LžcC*ym¸õzÉk–×#�6¢'XŽfÙ¯´¿5& €s[VeÉs +ß{J€/¸ëCª‰7³{ဠ9©—²ß›xnš‚ƒ +ã»ÿ¤P0 Š©ð"ËÎþ¤H ÐK è§ÄQc±9SÆX:½Xs¡µþl˜;”ŽHp£×)`@óq¾ƒˆ‰ûz`˜K§s±¨Ûº;Ù©‹4·aÿ·xP?A¶UÃ{—=â~@ƒõ�…ÀêÃ!Ñ~Á“``BòzSÎZàæˆ vXÌb&lÊl؅خôÅ FJPñ¡`éZ`�eL_]*úPRÇrTì!,ÛE +H�õ_°«7¢€dóKD9…8ê¥?_1ˆzt�‹î"ŠjÓ;ˆI°2`^%»5ªLàEB2Í^ræmB1ŸÆ¸f“h@•^îÍÓXöpvæ•êæ)3òXîÂÉÊ¡$…¸&¦cCAÓ_�à$…ƒý o5©¢Ä]7ܼè)ºó±œJP-‡èîµã úë…©#pH©ÇÒ¼jñýr +¨H‚ˆYPŠ@ÞØ¥Ÿˆ 0Õ]”ÀÕ||Ò±dWãðŽéø“rÖ±KÅù—K„üJ8qï)ùÙÉâ‘Ìû˜¸9©©§“¾ÙˆÐŸ…×)£úÝA¤ ̨©4I í8ý‘ÁÎ0Q"‚É¢²fÔ¨ù€³awêF•�MQ!CY3asJ©/3BiÈQ +vƒÿïg…`‡4•c]SÏ>˜„´D:h4» +·ÃäÔ_ (È m H¤Ôo�žS,ˆ}OÊÀ· ·\ÜAC o5ÝXÜ%Y× “'Y])dø¶Ÿx}ž�ƒ¶˜ÀD”Æ9HΚCˆIǼֈÈhÀèw™ ZRÀklqæË;ˆÀº÷u!E˜¹nÁA¥2û0÷›ÓÐ¥6µ~)`Ý'¹VH‹¤DØgÍúP'·„%NÍôçëð÷00#öä“¥àÇkÑ&ƒ9Ç~Täý+ñ|&N‚ðÀ@æÀ£Äˆ3( ~ß ++w+BƒaÅf_!Ôˆ!Øçì�à]Ò½OD ä(ª‘„‰š6œ‘a9ÐÖ0a5?–p¸<%E¬Q1/] K}Fýx€¼œQ98zr¬‚¸aãcÌzµ*/ã(?Ê’ß…ˆzÁ°/äôŽe¤9£vÞ2áÂF±Ù`̓ÜQ¬¯ÚU0Þ‹÷Û#ñœ•!!PÔ9Ù{^y]3‰·S¼WJç+ÚÌ‘yÞÕ=@<S°¤3|èUp~Ùjx‚0ŠT†xúz•fBþJõ�ñÝ<«\g'Ú`Ñm Êêh2sʨ¤PˆAâä'àA܃¬RÀHaí; oÚˆr:·FFcˆ±(]„¬^ðQfŽ…zI6P=„§ùƒT ‚ mRgÁý£.ú¶¨$åäùw–8^�bû `ˆ ůÄJàž +Êÿ¢RÉQòÉä•Z(,Ü0Ž ᥯Fn€ôu.K„3pßžôî@ûi|+ÒÃíOFói¹4A)¨á•òÆÚw®Sw(fvªÙlœs¤/IQ†[°ðˆ¬Çª§ú•¶}ªá!A /ÖiõæT‘…!Û᤬Ð=‹¾jÄB¶v)¬Òª’¨ªÆ3 2cojInqÒ,3ÂÉB¡ŒÔms²¡¥_+´àcÃQFɤw¦¯ÔhâQ—«T’Æ›/³mO +Y…BQ€N›IuÏå°´ÅnÔ¥bYF®/h)O•¯B¯ú,J~E©oaã•ÍÂ6ÊŠ5®¥«iø2³öj_Ôò}-x£(cm»¾ÄÐkV[Æe[›ñúÏäÙÏ¡A“b‰‘ho0ÛrS»’“èª ïÃhGvì�ëx´lÊH«å/¹;ñ¹¢ØóT£ ±,çry×4¡¥íÃsïBfóI¥-Táê–@ihÖ¬éeÁ³ïÉA±˜,Lœ²Áu`?sÙÆ̽*Åú] OF€¸.èpœ!‰ÁQÔCä·Ã‘Ö7Ø» h8—J!Å ˜îSq%}€Òu·Ø7Ozq4ky8Y´íÖ0SÊZƒ|ŽPFp+%Àd‘´÷ÿ£í~:rAæ—9½ªWÑTPH?öóHï¿bÂÊÇA¸yË}[ØTtÔ +N:áõÖÿ,©’V‡:[bäq`Ø0•äT·k>±ðÒmÚèzá‚ôð1I´è¸vrOé_»K\W¾ã�¾Â‡=¥xµ†¥«QXx + +ƒ‘'À;ì¡uJàP(‡ç•YS׉ŽÈFP‚QþN#“ƒéÉ£ÿÄ@ ³î¶†è€åöÃÊÏ\·Dí^fõ”æƒÇgRKk¢r¥D§é³¢®Æ{SáaÌ:„—.P1¡É5)̽fc +â]ÿ‰¨¢âƒ¨æqGfÁýéšÆk…éjç2pŒÕœäQiÇšŸé$e\<š‡Ñi]±yÛì‚þóüÒª?[Œù„ð~ñ7Ác 7ò}¼ö)9Ä/Qý&%²'·œÅÉ0ZÄld=a¥.áüà +½•æù +ïWÎø¤ÐDáa=ižðÑ@0¡‹)~è_“ù' ÈÈ€~%*ßöñ� +U*Ðß g/‚C+ôŸ/zØ<Qcžz!SR5Ń¥‡É ê…8C‹Ûœ¨ñØpX|ôÔG½ŸéÈ/eçnô"ä*ÆÔ£C ù› Ë ð` êïB˜ü"³‚}ø:ÈAå,¾IdN‹'¡ÉÒòXñ‰æïâ¢*ôSúIÌ ‹(€ôi(è•N§Éoä/4y !È÷(óüâúíÁÆì"D�î cLí±Î%B‚Õ +¿®Ç¢"xSý›DÅšnƒm†>¼ xGMíF#qE¡’‰•H¬’}~PøŠ¶©42Žœ¿#˜$8ÏñH§x¢ +œ|¢ÄNÂßaCyû—¢ô©üÛd‡Y.:zvLÝ¿ð ]i òAâ3•ƒd$gëR0"¿FÑù„Λl‘|°ñ`;gÄìð»IßäfO@˜ø =ÐÞ%á>RÉåS„‡Œ—ߤ±ŸèÁ\†<ÖõÑpûç#ækaOcp. +ùw‘°ˆ3øoNB6ñ]) Ýf*Õάá¶ùCˆ¼€4Šq1…jÐÜÑãÉV×Ë—O¶%÷¨ƒÐp'¶‘-IÀp]X˜8J>N.JAÖ2 ˜:òž…á,h}¢ÿ¾02Ã" &¢ÿÆl!ÀelÖñ�T@’¯0È{=(+\]Æ{‡·ÿ÷/z*:qŠÏÿR64ý)†"€£ÄŒ—ƒá¨…å„«-U“èX›Rê–øI´i2wˆŽLÈæíLéxF‡¢?,À~ ˜°AösV€åÞºu']l›°Dù&Rÿì¿¡4Åä3À¸|x°ÕÑï)JìÕR8(;<ÝÒ%ºIo27!Ñïb9tžé^x‘”u|Vïô'¥Àö£6 MYHxd0ÐMPüŒÜƒ›85&ã£äÆ�E’çjv,ygÃ=ŠÎ qL{ÑôÂÞjÂy"aIcmzzLRd]ñ&¥sv<LÞƺ¿ ö÷ƒR¼çÌlŒŠ§E"<ŽRzŽQdÂÌo ÆU•^I”¹' |7áÎ3k®Œ(·‹±1Œ îƒ1Ðð�Éa¼môâ¢3=¢ä¼öZšßnØÅGÄ}ˆ�ÜxZ-ú_¼(Å¡d4¹„¥Ž®ÿH1)LéS£Yû¤_¼`Ž*ÑK€}A€)Ì·òˆ©c&°ÁÝ•«¦s'Ì8÷QèC?’ k…ß·. §Nîñž 8'ït�K²@y5·¸.†"Œ´A3øéɨ57@£Jïø÷MDŠŒŽH&>? Ð_ÿÝ…L&[¬¾p8Ïžß/8�OÌ<í°�åî__<‘Jÿ£ÅËìo ñÇzÿ`H._ xÝO,$�kÍJ6ϺMM�½ÝaZÁ(-^ŸLšŠE€àoHƒqrõý!Б¡”CBÿ¢ƒÞ‚À“ñºÃ5ƒ€ÁÐAÃЂB¢RýFÈ! ‡H6€l„A±•ç57Ÿ-–ÁõýýÄbÁXÝn¥“Œü!Ðáªûû¯@7B–\å¯�ÈNÓúÉ‚!§s‚jCz„€5,;’›?ऌü7`¹C +‚Ù{ü7ÿØ‚�x<(Éãœz½0$ Pg†€;.bd'S¿¢„�ØGvAuÖ� I~Ù´íÐÕçƒÂRÄ¡pÕ€A‹Ã°®?fÆw•a«'óÐÿ‚²<Áöz^ yTgî¸g_ž„FOW ¯÷u®˜Ç_oƒÆeן¸3Í¢Àúê�`öüTH‘pT0�€m]o8l4I+à2�@T>ýËao[Žˆ?/…xÙ +�ÿý</õK_AT…›Ù_@#ù¹3||¢Ì<2™XÂ_YduØyù€P¿ŸÓĉ?0εȿeR_J‘QÀ +¹žL}£_Ø4•GP"éÅÜ×/Ïç„ŽCUé¦õoú{y^[;ëÉ?E(üZ†ð8eË…í4ì¨è8Å¢F‚¬äboQê@ÙRãv#¡íA�§àú?Ÿ² Š™¿¶;g2>Äø·ß߈Å~ŽI¯«ï÷ý+ôw0?X<‹}tÀý—qõ»á9”; ˆ‰ï�ƒØ¯ ¥–>g ñ:mžÙ$áÒÿ‰?¾±ë¦u„ÃÚÿÛ¢ÜÊh_2o"D5@ª¨·<@=CôÚâð¼V3R’þ\'ц‹œ\C7 ›Ÿ¼ +³àZä›?‰}ÿuׇ…ìm?�7Rô¶ŠkÐ{dÙ>Bv E…×næƒ2®õ˜ñ©ë0çû6<ÃøWdy-¤›dÅÀ!Q/@{‡?ç|…cÍÇm׫®Å™pqæ�‰þæãqšåô8/Jóõ¼¬jz^7ùzÝv½½î‡°ü¼§Øþy?/©ùù¼æ A¸þþßÿ:�ñÇø¿öÿ–¿ÿ§ÿÿÿôÿÿû¿ÿíÿ‚�@�þÿÇñÿÛü·ö_g� ÂÿËIô?øÿYü_óßÐÚÀÈêÿ6øÿÀÿ?ÌLÿ½ÿ;ëøÏÌô_ù–ßÌlÿÃÿÿø?ùÿßùPPP000pppHHH(((hhhXXX888xxxDDD$$$dddTTT444tttLLL,,,lll\\\<<<|||BBB""¢ÿ6111 )))999%%%555 ---===##ãïß¿ÿüùó÷ï_&&&fæÿÔVVV666vvvNNN...nnn^^^>>>~~~AAA!!!aaaQQQ111qqq III)))iiiYYY999yyyEEE%%%eeeUUU555uuu MMM---mmm]]]===}}}CCC###cccSSS333sssKKK+++kkk[[[;;;{{{GGG'''gggWWW777wwwOOO///ooo___???ÿ€€€ÀÀÀ àààÐÐа°°ðððˆˆˆÈÈȨ¨¨èè蘘˜ØØظ¸¸øøø„„„ÄÄĤ¤¤äää”””ÔÔÔ´´´ôôôŒŒŒÌÌ̬¬¬ìì윜œÜÜܼ¼¼üüü‚‚‚¢¢¢âââ’’’ÒÒÒ²²²òòòŠŠŠÊÊʪªªêêêšššÚÚÚºººúúú†††ÆÆƦ¦¦æææ–––ÖÖÖ¶¶¶öööŽŽŽÎÎή®®îîîžžžÞÞÞ¾¾¾þþþÁÁÁ¡¡¡ááá‘‘‘ÑÑѱ±±ñññ‰‰‰ÉÉÉ©©©ééé™™™ÙÙÙ¹¹¹ùùù………ÅÅÅ¥¥¥ååå•••ÕÕÕµµµõõõÍÍÍíííÝÝݽ½½ýÿ¬ +ŽŽŽONNNOOÏÎÎÎÏÏ/...//¯®®®¯¯onnnooïîîîïžžŸŸ_^^^__ßÞÞÞßß?>>>??¿¾¾¾¿¿~~€@à*ßÿYñþ³nÿÿƒ¢÷ÿÿýÿ-úÿ‚³þþûÿÒÖÿîÿXþSþGÿÿwà¿õLôôÿôÿô�ø/.üWîïßÿ¹¿´ßF“ÙM¥3Yìÿ•ûk*›Ëã‚%l._(O¢Ñ™l®X*“/’Ì‘l©\©Ro²Ü™l©Z«ÓŠ$jÞh2_ªÔ™jÙj³?šÌ‘j«ÝérºÜ™j«Ûëóƒ#”n¯? +G£Õno8‹'•Ê•îh<™Jg²Úîh:›ËŠ"”él–æt–®ÒIÅû«W>NäÙ|Å(çÛýÎ`·‡Nïþp“ÁVÑP(úSʳ®W(–&ÓÓù|µ·f:“ÃhùWX(ÿßýÅhî” {<=šJ“ó„£OcðCË +·Eíîx?a˜ë€sß éY¯íÙw¼Ã!ácð‘¹áèÍË„üšmË÷ÜGèFÁ>Œ¤›} R‘j:ËFÒ-æHNýYÛŽã'Y#UqŽ +ƒ†Ç˜cÁÙB"ú¥ñB®{�ÍRï{_7ŠñüÄ_{òM ˆ)•“@X^J� +ûgY^(š‚oø \b*A`$ðJñ+à ƒA/6„$å[°ã(Œáq”,G:Åv÷mtQ’šãZ.K€^Œ×“i…*€IäB{_(€&æ—ƒF1tr]1-{]ÕîÉ;]Õµ¢ÁÑÅÇ€å“ ›Ÿ6ªP™x qL°=GRSÝóÔ“Šá·–™¦ïC~ +*Q.9Þ¼±ieZVGiy†ç@».l¦,Å”Û+àXîúiï )¿‘8ò‘H@„ϧ®‡e{켑¼A¤J`ÿ…{(Û¢eãÞN<ÇTY:DÂR7HÄξ’;[7•<s?vbE^¢†Å5Jb$*z=-ˆIÎ`Ñøê“ȳ‰Œ¶(ð3-{‹‰²@ÆTúH-BB“Õ¶nÓ‚Š;µç¤“Lž’Sá#ÄEž5`ñ +D$ܾ©˜Ç±n¦H*´öÓ+±wÞ}ø„ÀGõ„é9•‘Åø”:”�"}á14e=væ_õÈÓí-Y¾BðtùT£¹]<S%Îm— MX¾3W²h·(8dÓb s÷3_¬Vd ÊÐ|ϬâûpÃÙ@‘•EZãöt½rÁØÇiZé¹RGÔ/ÎÈ;=8×=d‚€éñ¥"É>â"æžëhμß8òºËåzùßb=·Çâ$‚§˜oæ?s¿žÑ¶± ÝùÁz…\*í 0†ázö-024½ÅQˆ§r(Šž”‚PÀ(Ï.§D¤×XÊazc "<I…;$€Ù¸~_Ø“PhÊMòžR’HLåÉ\½ýk¤ÈçÈ¡_È@,Ýœd».Ê|'Ñ}hæ!æ÷ƒ‡¹½p±B%ñÐS/`„ù3ðx>„„ßøç±ø§?÷;“' éWØ.”yalôõ>8»'ª)‘'?bZ[Ǭˆp\¿–1…šE…[ù¡_øxÙáSoã_ƒÎ_†£¦íÈœÈ`fÝä¸cÞþiyÒ¦"ÇÐ�‘ý8?Æphò¡ ;è§Ôç} f¢¿ROÝ IkÝËlè‿²dõ&ìnï±{â÷àŒU¥²£=GB ÀãÓ�g-Sä±>)à‘£o€¼ÿ}Æ·2Êßñ@²U•É‚±)â(Sð0m.J£žË¶‡û+HüH¼l¤ª2†\}6ÙÙš<¨ù`ñ)5ˆªf‚deÈïº}!cËç2Ó×É2اùdbçwdÐL¥ï!¬¼D°„IiPÿ +˜"1ad‰(ëxõ˜CU&ðåFÉcCtñó^Ìr8ÖdDƒ}¾ •™lxƒL_(jÁAèçÇÄŒ¢þ¯/þÇû8 àV«£†÷Z¿óñ½<Çí|ôÃdÖ¹r`høÏh…~™ò‹+ÔDY•yÄŠ ½s71€!X|.ÕM(ZŠ —O…Z/¥×gjí�+—BAç3ó¥€wPK¬2ZÿÍ߆¨•4Þ^üžÈ© -.×xûCk EÑA=|HRŒâëåÁŸü7˜(n†A-—‡LÉ‘ +aþ õË<ú +SBóןoH 9¶ú¹ŸÇ€ðj»3\dpaóø ŠB5€|=8„lQ9Ì“<&ÉËW¿ãÓÖÏ{9?wª*Ü"îKÄ 7¶ÚWÄp(ü=£õ"çü-U… +(Œ"Gêfî XñïþqJÚ«5N("Bé’é‹`•î\óA¤ÕF1ÌÉ°¾ÅAéëx„)ÄßEÀ„w„÷XÇj-ÂUÖb_$ì?¸}0‚¾6*‚¨0ôÜ»ˆ4“q_äQݦ`¶·Cö¬UÙnr@^ðLØ’´iW#ÿ†6{Øä?¸QCã¡8ÄÄ«NEH©Æ€lŽEÜœçÇ\ƒ\®™;ºÓÙ]}¡Ïòµvb0oÝ|ËQ„°„9ÿ¹?7p5‚uŸæÃå,Õä6¹”yu¢ÐqS`«Z¾`È_èøß¼9‰>°ì1ÏØjm°Â¡ÑÉs¦Úgì7j]ÞÖ=ÛÄ|àk*ƒ$%J†È6cÐyDèY`Ž¯ [Úfͺº?âòvù¶»e´Å^v¢Àšµ~RÐ Ö¢Àš=¦“*®¥ë}Eë‰í°;뺟–·#Íîpûúý7ˆ#Ü?~²ä&˜ˆGð¸eìÖïK1ÿ·ÁoSëä¿3§&I»_r}EåQöP—…5â"9£†IúÞ�W˜Æ•">gùÃå +ß»“0^áñŽÕ¢÷ØšÝ{(Ò< „¬œ‰*§Ûý¨$ë ï¡ÃÙåô™ni‚j†ƒ„^÷.Hý"oѶæ—t«Vn)/íY—IWÚÀ£þ÷ AÔç15cÑͶé‚êã)—¿Žø„¯EÔ~ަĘ(›p~$¯¬‰ì׉j"ˆì\fë»Ýa~TˆA`mÒ€Vú''ó,Q3¨aÅ7iÿIV\}”þgnsEBÆÚA¬ín”7ŠÄ¯ÏKŸðc߇?Þæψ{$B *ïc¾™!r÷gÅg–'IÆŸ©.¨îüHffüÄò¶i¢-îUÉ®FJH�_xsêˆU[¤s~sCBðqöW-×�Ùz¼74„ódëëF_…eËJäéc#J*Æå�Úsþ +Ã4Å0å½E›÷$Ç1tóÉi2"½x‰5á0e{*F%{‰ò`奀²£`¦a&@;÷@@'>E‚;üo¹›™Å“:'vè¿{{õP… ®Ø0>Kh w‘þ{‘{-+º3€¨›RAåWÇ©Ø|³Ö©@°ï;ÒÓO {¸?xÞˆOz¨ã2÷”°Õ:hI„™?Ôc W±Ã¿ ý”ó°ç|þ€÷ˆ„|ÏGpàØp8Õi!UÔ"é%*§“rdéº*r‚éǽ$ºJ˜®Ú/È31ü—à]§?ÒåQ %½ëØÓà×AºÏ ¿‚ñô mF «>™ñë;ñ‹½§ˆŠ´‘· dx#HW@y=#{hc„Acã‚ÍB³£ªÏŸ‡2¾"¯ +ðS¡[ˆÅí²$@ +‚´qƒ¦Û@´K°-G!Y`P±cûˆÝ +0 ½Š”D!PâD}WC¢ßÐø2DA[Hà°EtÜ-¡ôµÜaŒ)›ÞQ©Ë|P0õüð{üˆw÷)úˆ•Epù�˜H{¼|£"ØN~jßæd^¡_|Pì)T æÂð×âD0üÕéÚÛÃL–£¾w¿ÍáŒÓ”70óžèn¹Fí¿“áâÈ-ÄÊÎÑÜ©E¶°IœÉôˆKTÀ’¿ ,9n§¥#WðCcy?ßÓÿ°dœ:„½fð%dp «î/jq+ª¼##¨døˆ y¿‚±ú•Ã$AÃf(}?ù"[½3…~££·_îùËõ×HÈpDü.ab¢ÁÅç~ÑUþ¢mI¤u‚ï̇ѻõ$ÏȶTÈ´aI³R•Þ/Guq|' äwÈ!p>éH{xHæ|ÎA^ÈÓFZÀhü%$.üuòŽiYÐi E’÷¬ýZ!n€oÿŽŒú¬¦Ï¯ÌYwÿ SÙA"Õ"d/QxjPxòoœ_€ÞARÀ’G‰¹`œÏü½²¿‘|oàm}jÊKƒš¥x¦ +Æs!H ƒ§N(ù©Ô^„ù¨úVªàH~É.Ö†Âù\,ƒ‹ +/Ž&-Œ¿Gä#©ç{1‹×kwƒFŠP51(ûGçþ¾ƒ1óƒA¢'ËCÿP”†¡ ͧÍ@å? 1u˜óÛ'³ç3Y¬Xî;j08‡#?KtpÓá86/”&Fb¿*e¹Sׄ&BÈÌdPÿ¶æCÑg(ÎJÒØÿ?m…RP YœEáÜ ‰;øêØbIÝË!ô`þžÁœîI.±)ðé&ä-špdÎK‰2©Éëé!¤ôR]ýÀÕŒJùÊ—\!í^\hE0^÷Rxàhëtê?©u²$Ÿ8Q[ ¯ÂYCTcNX‡•øþŽöýB°,¿tX’ÅiµZrÖÉá9…û§´þœè4ÉìÝ)¸þˆ2p! ù‚@˶dÆOYµ¹ZC¿šD<…ûQ'^’f€7…¶x’V%"hÞ`ûœ‚ŸÈúsÁÓ…{Ø^õ!òMÆ1.»çØÈ.Ð=É-~xVôà…jd¶tV-ÓR«Âe-‰$ó¢îrHoá +öFü`Bëª"ù„0»,aÝd¤F·tpµ•ü ²)¯7ÛBnmÒÎrû9¯'-´“·µ +Ç¡Vt¡T»jo]hp«¢.ÜäÑji}Ê4GC¡ +™bjm+ +ËâC‹’ž&ˆVªyµìÌ +ЯòlëŒhE Ðòä÷ÝBcUi2µ"„«£,jô’ú§oéΓdöÓvè7guf˜Õô0‡¥jurH=9uØ}à%R=™ÅÞÛÀÚ¦˜ŠvñpãÿsIìNªfu(T—@³kwÏe ›|d?E”4kIxwPßÇÎ.[ú·uBYL@¼B°7ý=ìs½OÝJÉc÷P|®§>joºYÆ7NEê@ê`=¼¾×ˆËßj4Д†l¶aù0*£j #…Ñc%$³a‰¥&x\„—æ¬ô~ÈÅÈ0A¬A¼Ÿ?–nÊBÖLZ•‘¿á5ê.OŽ†å®ql̆*£\vƒÌz³˜›óØTP½9™¾dÄp(:¼˜€-¨ +ÓE£VÝ„ÿÎFÿÉ#üQ\Õâ ºBkÒ$¼êbÖ—÷>q£_Œ‘_Bé·¸žËÆùëÁéæ�÷Ö¿Gé R±ï³l4òþ½ÌÏž]<I‚5Ê}1ÉÑŒ1@D>Yäsy5ʾ†\‚?%–ÔZ±íÓ‡Õ”Cõ ËæûJª¤«Ÿ~J[ÕFÞ€À¬¤b,Š>¤›UÿäÄú„Àš7ègÍnÝ:¶Í RMÓè—d™/‚û«‘ðêÍщ7w4„Œi’Îz•Ù Éù–Äñ€[C0éØaþA¨ï2›á‹lDä¼£ábÐ ]„ Ô¤2¤;ã×#(® ‰–S™P›7;Lõ €æGd¯áŒÔÏf®!Æx†0C[ÔI5$œAf)¤ø»œÊNŸÚ €Õ R¯ÁÒAUi%ûJ3ÝN†Eï++Êç[ðLØȾˇöüE–=NªŒÖ OìcEÏ8¸‰ÌåÄ1û +ÏûlºUâË&„¸%¢ +š Àw_›&ˆà¯Ï «¾":0¢;ã¯Ö#´œÑ“(Í25ÕúÏTMû¼¾¾*[‹‹"ÝdGH‚¨~.ÜßPžCMÔ¤˜å*Á–D¡\³N0’±gið×Ý‹ÍÆk¥&àq<Z±@È0°À9YójG⟉Õg¸N6¥ÈøAäD#íñãóƒÖQÿøÇK¿ä'íÖƒÚ’©vôÂÙ`b-¨=;VÚ V¿žÇ®ßB“wÆE[„J„·ñTjá´ÖT°†ßÁ2lÝŽëæÙ_þ‚߃·>‹ËïÖæl^+š{QûçÓKµ÷3¿<° S@9Ás÷~lwp׈oÇ7«S#´â¯ö‘Έ•f$£äOråhö¢ÂÃj£þ*J–aì?.Ù8Äuk6¨¬W´ü½ÈCœÁ¿ƒù3º÷›aã0ë]mŸ…bxZh3¶œ]}¤Z=…ÑËéÉy«É�Ñb "�ó%.²xZ¸ù‰ê&,®/Mj)vXzAÈÈ{J =»í]#¹s5?u–Ø-.?¡.‚„„•Gì3Cí¤‹Ì§?7¬¾åd+QFD"xmõ½B„–lR¯ˆC +×.àƒ¤ü£¿2ØôïÍV2¥rcìÀ>yÇ^LÊú`‰å ¤›ºHSz²2ïω÷ø¸1žúP×ËG_Îþº…ø÷·VïÞ@CSV¦2xsq”í/Äåo1Dú“U8)îý([ãú&YÅŽ‘ÌÍàü¢~oõ +d²üAF�iS¬²ö7ÒïõIñ†}ö¿Ð©ÿ®J)Ÿ +FFH|ÈÚ*&Á—«RŒ#W¢’Êe–eÏqÇ'ˆž.FÙ(° IþÜá!õöÌ—i¸¿üôöî;<Ÿ±ß‘¶>_—ìß©ƒÒMý Vã¦AzZ{D×l’8È´„BŒDY‡c77ÿ¿¬Múõ:ëÀ¶Ë–çLÐT½jø$Åñ +rÈ% â¨$ÅŠÜ|[gÿû£Œ[ÃÀn¯jÏ.tå_ärÈÛœ+V²L<sÓ°ëv2 G·ŒM:W«Fÿ\’£ÿ–|r9˜x�G¸þIý⿼œQ„ÇT÷ŽC¼ +6òA‘Â4þâÆ»(Š±–Ö8eÔB¯}Ðؽ ÉÑ¡•ÓëbŸÓ—_;·õöBv:?\yÁoÚ5}'Tr¾I¦Ke©öá`;$/-Ãëߣ‚ižÙêì·òEfŸÿPšß†ÁÀ-ï0çþ©/ŠD‹ó7ΉŋÄ~/Å„èè=CÿGîoo<;ø}N ‘®×]<€P:m¯wÞû¬L“O¼;_0„3µ ¨‰I‡ZÀ0Ä` ‡�äG>‡s»+Å#BÐ` + ¸?œ^‘xqW¼…Èö@ Qh¯ßG`0šÒ¥#btË?a–M¦-**@Ÿ@$ÃÎ̼âg0 +åÇÕŠGŸ¢ŠŠMÂÈšPÈ!ø+ÕîJß©$A™ “|AQTOÝêeÁì.BzÔCþ}ìkmÖ!™s?@Ä1 @òϬÔ#jù‰8`ëáP-ß@@P¥ô¨~S‘`E³løAá˜ïùÁÑ”×ñn Äl£Ï‰ÃpÕAÂ’€Ý€‘\ÓÄÇ2òV]ĘрEâsJKWÔ@ xGƒÎæƒbbP[GàËT‚ÅÀz•"ÕEà«ôæ?ŒýÂ*<‚@-Cpz^A¥Ò,†D"ºÆ#hÃÁgÑ¢èÚ§‰T Ý©YèI {€ßýå¿—àDy¿žŸäøÁȧ‹q#ä…±Ï'Eö<ÎÍœDÐDvß»¸Á +¹²„ï¶ITÊ=ÊþŠL‹&Pj{+Ìoà:¾ Ï›,ÀL€„Dj(YÊŠV{Fꕃœ ¼²Bìeñ{J&4S½Ð±a•Œ-ˆì€€Ì,3µìÆGúÛÂü2œ‰ÄçiozÑq?JqÓŽ_y&%Ì××óýš¹Óóÿê¹Ó5ƒôÀšç +óšÑ½sùôѺ+{â0ÙHÌC¿ƒ «÷¬”¸å‚„Àß%“l€ïÆ~s2§3$ç4#ÏVéÇÍóGÿêˆï¯Òç·Á �Eˆ$þ9Ô‹©þH›¸‘ÁGtYLJ¸úÕï–ÕM«›rœ»÷ÓúõC˜_'P¼ùáŒØˆËÌPc½735h^ÕÆ&(¾è +à¨âÏ Ðyz¥J{æ^Öß¹ò\dœK2I48Š‰þŒáoyVuªA»¿âð]&4hYQyÝEwÜŒ#» +$žI<{AJTB£¾\·Ö~£r8¹Õ?•ìaÍ–’Øl¼\†Iù»=#dBñZwfJòžÔõ2}fϧE^–ÒÆT%·FÞòùWq¿9¿ñè}öDã›A]þPþ¾#»ÓÊ~†wç?¥¦Âî#™ßóC‹ÞC ÿ‚ }ƒ?=ûŹVL©<¯¥ÑÓ'‚dj@¢¸ÿS4§íÊãíÈKŒbþ[àÁØ‹ì—?P¸˜Æø\öÂ÷”y–ÞÀíÀù•¥!BÕ '—?èÛÛßO~Qå]äw¨B´ÙQ8vøƒXŒ%þ®ï=ëÐßQ…X§b#‚÷±?òq¿†ˆ~ÞÅø!ãƒÈŒ‰<Ä…)¢ŒI >ÄÅE“ŠÉé=$¤M“²Ž)y>$äC“‹ÈL¨e<$•KSªŒMhu>$ÕGS›ŠMèm<¤´OÓºŽM}>¤ô!•Ò‡€Ídð1ÒÆJSƦL9Òæ¢J™KŦ,52Ö¦JY[ÇlXà�‚¥ì#23ŽYçR¥œ+c3®Y÷Q¥Ü§b3ž˜$>À~Ö¿wQ¾Ÿ9Hå|0rsOù` +å8s!‚OùpQåB´szO…hSå"¼s1žO…øÐç¼mJ–Þ‚»tô™ NÅ´FåÒ?%ÔÒ6ŸŠÙ³Ï¥œ32^JyÊåä4ò1ŸJň/å’2– +YÊeU*Jh”k>•«e_*5g,Uº:UêUª ÈiÕg>Ušc_ª-e¬4¶:WÓ•öÑ-tn<ÕºOUê¼N€Vz?ŸjýªõA?¡Úhà²í¯5Q&VF;—ê#‚© q%ÖÆ´\S¦˜MY)ÖfŒW3©Myä6æR\š6ؘÎäÖV:_šë£ªM%66ÿé¯B+_ù÷Ñmìä®´–2_ úeh�©–‚ã þíŠ?* ÷HÙ-â#ÕŽ~^:—–+™?r]Y;vÎnë"6c]*;¸á-í&vÂ]Zkg¨Ï=h1ŒºgVóŸ‚ÍâŸ?V¾[[ó_°Ë}¨ö|pÖ`ÿÔPdìts±7lnƒý:wr#ßšF[êäVÎ_ÁbéƒK& ÐÄÞ00i"%ªÒÛ»÷nê‘^G¸eªyN'g>Ñó·™÷yÙvñ{QÄpù`¯” ÕÇ”BùÒ¶“s´MÈðØ»ÅZSѶåhÞ”¢4ÑŸøÞ´Šÿ|¡Í˜íÞ±KŸú×vÌØÊ:eÜ\›²¬iô?üMÚ>¡{žTè½ËïÑ>æ [›òÕý›×ò}.Äæ± ™ÚX�ec,è÷1–Åk3¬…w¦¾LÝJ“¨ð¹ƒ”÷Y\jÚ"a}™Ýù^Êœjb1s˜iؾÚK]«fi…y¤Ù-îÊ¢˜·Œ:ÆÜIOÿ'CfÓÚ¼Ìyci„©QÌ{ÑŠRoÃÔµ¢Áºä²sílEÆÏ•R–V‘¯KPeò6mðk§VÖ¥gˆ~Y¿èkûD¶÷ÏùÃúú§«[¹eßê˜&cƒE8îb¸*óðÛõ¹?!Ç–y�y®ƒ¸šö<^Þ_3o3î²íYÓ9[Óô*íóQ§)$ÜÓ8/î…Ì]1‡\ì3Uçx‘ܧ|¾Ï#R,% }ù›ÓA“Çý@M®=þ]gÉËãÌп¯A!–¸Zõ)åUvŒ¿=3½—mm]¥õ¥,2Bø˪ž7©rnw«zÜúù¶¶xK^Û>xMék™;Iu¹¥–¶ ‹wJlººƒ$µ¼Ôž�gÜë=½Ë-MËç¢n\Ž@ž»¥ºÏë—X¯n‘8—`3‚WËœNk\ÂR‚s4$Y‡’$ü|á=ž¥ ;‡D¿ŒwÚ¸ì¹jÓó¹íã"ªÂ3Q$ç‹,ßG¯>eaÚG‚cvb~ÏyDz?k=ïÿ|Vs™Uò|~Lüüæòt×sÿ}ÖÄÐÜÖJñ4Ó²Ãv—5vƒ óƒ'wƒ+³äwv]rõ$ñ§öÛ,q Lñ*±öõ,µ¦=rµDu»Uu'sáxõÌ~uû üÛbkðÀdæ÷&e‡ÐæÁï HæjfXÿ¨âKIìmçyWª/éb~$eÞcê#kúK¦ÄûQÉL£ÜP +ãñ&-1qvñ7q\$q°ƒQM5ýqæ`:LÌ,Šbããûjâw¢þû*ÅKí<¸ÛÅÌ[=(ØÕH=HŠ?<¸Ù0ôö\ðKiø¶ã«Oø¸ÒÈHXr™P=,Ò<,>-,‹>(kLGbOJ6¼5ÈÄ-¢,=Pبl=ÂñM©ê,¢‘=¢¤=rù%¨=-¢³-¢{-¢÷-¢uÍ®‰/jH'jÄ<¢?Ýn¤-jšüWÑ»]^þóIØrxØr[õ[غYÔv[ÔnYÔ¾{Ô~ºÁ\9ZÁ[ÔYZÌE[ÌÕZÌ ¾ÜQ^MÌózÔá{ÔsXÌkzÌëZÌ÷{Ì/n.6ü[ØS<XzœãïøÎ%E˜·xx´xD¶xdµxT·xô´xÌöxƒ‚xÜ·x<¼D¾D"D·D²´DŠ¶DªµDš·Dz´DF¶DfµD<yì´Ä|=OεDÞ·D>¼dÁ¶D0¶dQw®O'e 3e Œ½¦dy´dE¶deµdUvÙ³çdÕö¤›¥äû˜Û5s(ó!œT·TsuU5ÝTs7m]´º¸ßpE<L'¨¸ÏôTDzT÷¶TßvEKòT/ú`'>|½µ”?Ít»ô°µô˜÷t�¬ô8<õ|´ºtGõtH>mïðôì÷tßóô<w]?¾ôB÷Ÿ™eà¨óô²tøJ¶ôzôL}²ôÆqùª³¤0þLG÷LPûÔÒ·Ì<óÌ>¸ìŽvU?¾ìñ7Ý.zÄÚwyX}Í ]ø©7{øyù™vãÉTùUwÇuõÌDñL}÷ì xÅ9xÄ>Í<ÍYñØËuåã±tZ¦pR`›åÜ® L£'tJãÜ’gxÑ£œ˜<À¤„^ö}ÖžnpRÚSâ#‹$=Òù¨-Ýz,ûûJ6w®ëP¾¡¹Ž@aD6fs…eE… +)d½¤£óe¶\.U®Ðk7†¥ö%¼L=K>Y¦§‹X†š8š„GÑ€`#¿˜j¨Hù}î®|;¦L¯”MÎN^Ÿ;[œƒÑYT_R¤a©}žËX”ëRª%áQ +ÒXº¬–eDPšOW"Å`c™Qb¦_úØ®åYQâò©àd™?–ïæž [NT¢tQ +ׯ ÁXfˆ™ÓY6:š«¾Z˜é–ÿ®dÄ›‘—§_’ÿQV WQäQ!YQPY éT¤GŸSX9{–ÇoY¸4^ Æ«VñÓTÐeQQýQÑDP5ŒQÑgYÕKQ0IélÈ–ÅêY1¢_1—YÕ¥_µˆQ_Ta—+T\¢ìY¦qQ’™³kQv¢WsÆXsFP³çQ{×ò8¦gYCÞB'ûQdJ‘skQº>®z…(Šëtª(Û,ÿÝQ„”QÖY¢_"µ™Å‰YöYØA Yä‘%Ÿ1YT U‹4Y§¨QKêQKVéJ¢ßH¦_\_R];VÞ{RV%à5'P5nQµœÑuTQ¯^ͬQUÑÐŽQ5¢×,îQ-˜QÉUÑ´ÐÙ,”Qý†_)GØ,ÒQÅ)YÀY(ÂPrÙÌy¡J§ŸÜv®0ÙøˆVôÇXLÕÑHÙj3Ñj×Ѩs\¡KQv;YlŠ©øM°z£Ô¯³ô¿Í³Õ‹ x£6"¢ÍG®Ýb¢=ø³4z¢4I¯>N®<Ͳ,)¬ü·>R²í£æ2²5O¯Ò©m¸‘É‘5Ÿ‘GôÙÉ*Ñ@Ù©-ѱ°Ñ zÜÐ]\›aTlÙ¨™+sQ×kÑÉ/ÑÀ|a¬°Ñ9 ×-—ѵѩíÑ9ÍѬžÙŒk¡½xÙÑhQ=\Q¹rÙú)_f¶%˜^:VÛQÙŽuÙ{-…ˆÙûS³·O§w¡3°©Ð½¸sõ£8e®©¹÷Ù]Üó¦Ùz«ëÒч*ÕƒÕƒ‰¥›õÙ‡‘¥wUm~ÞÜê#õÖ€�õC&÷ýæµçµ÷àbõÑd 0uö3÷0uõQuU1 ðz ` ðÊá{ÉÜédzà ,V5? B¹$£Ž%Èt )l )}†A2T¾‡ÅÇ’´¥á´=†ô»†·‡µË’Œºe-ðFwP}!˜eXtXmØ|Øc8r8chkŒ¸gxvxoø€FüˆÆ„ƂƬ²úB²Æ"ªG-ÚÆb¾Æâ®F¨!jò!jùÆR£ÇRµÇ2³Æ²«Æò@c…WcÅ[c%ÄEÑ%ÂYÕÕc.W [MU-_íÜÕíÚÝ]½SDSCHS# ‰1á©‘ê©1éžì¾‰«©i®©E©¢ù±ùì©éª©å©©Õî©ï‘8¡™£oƒ™³¬™‹®™«™˜¨±[¬™PÝ£ÖÌâÀyæ½{f7{Æõjê¿zæKxîzHaÀk"kÊzn,«k{.šzÒzš{î‹iæukÎÅzX÷ Gh‘È`‘Ä{Áj–z,ªk‘y,1{µzžyª^j‘1k½k‘}z‘¹z‘‹x™7klyY€yi_zV¤kYdktzÎ J½TË¿dm½µL‡´hG¿HZÖ#Z5Ô¥^ ØZˆø†ó©Z5yï›TX@tS-K)L�ó§~®–fV +¯Vy@¼S+åÙ«RHëbBëÙkýPóÑÞ«ÜÚs_U+•|ë©TKƒRk%ßð‘Ðk“ÐKæQK` âñ‚éÑ¢îñRè‘¢MòúѲëÑ¢¯ û(w¦ KêÍV®¥ ©Õ*¦qí ¤-3æmehø« ÃUëîeú‹Q«¯måé {êí®®-g¬E÷ªqò¼m˨qø¸q8•µdëÕj«ñtªÕÓíÃâ$«u²ø]Xøiá,«µ©¨µ>¯Ý¬ùÀî1‘»µÏ¨Ý³IéUþ©]†êݳ«ù¤Üê…ýtéýÛíÝä¨}&Ãå,…uÑèið- +åÝ{èÕÃ-›ÃÑë-ãíÃèÝ*âɇëÛíNßC·©½äÍÁì aÚÑ¿›yÖ›_DŽ¿Ú.—E‰ø€äq¶<º7äPŽèX6ǘ¶‡1U¢¤q̈ö,¯€±|µûÇ?lŒlOU¢¶ªO,ªŽäD¶¬c,i·´jNyôiå©Ž¢Ž\oëÎ<HΤm6<nÜ{–u¶§[-·Nâu¶—¶ìrO’vOç³ÏRyÎç»Î2eÏÔc6+§—FIJ¢ö_².óæökŠü÷°o¶_§vj}öZoV¬v²±.ö»V:a÷ ~/z{ÿiRíÁ®TràÓ¬4ˆNˆ�'ÿFó¥c_åJ_5J]T±^•Âì±å^´úî°ì\ûCïlÄ\qø\íÒNðÏ\L]µÜNÖîf]œ€b.¦mn0{fc¯ÖHeæžÿ™ù¸{/«Ö·³¯*Œ¶ª{Éʦv³ªîá~ïaŒæ„|Ï‚a6”ÏÑsϧÏQŒŽ¼g¡ŽQŒë˜ÏÑDÏT~OKNÌOŒ~éDO¯B”,vŽY{qPÉsŽyaF”rô”žÙzܾOùr붪¶¢gFͧG4g7²P/UcÎr}ÎÜgžÑmŸr}Ÿ{F×o:|_&r_F|vz®žk®ºl®ò¢.êb^Žj.–µwòlon|Î{ÉnH®Íborÿy#ÇfeÃeÆJÂÞr®Mqnª·NÆf_Ác¯úa/Á~.&möÀÕëöº“N¿¯FoÍÑog,Ÿ‰.soßP”¾w÷eª—¡½×/¯£>³r®ï·?öu/·Þ*¹î¸c{j®µïYoN§|·IfŽygïÌeNUku~žŠlÓ"X‰PÏYÿ>Š<RÒ>2Ü<Òólòõ>ùÝž„Å<“ê>Þ=où<S߀sOw{O¬g/|Vö áj P¨tæ÷¿ƒa±þZ›ß#ùó¡R‚¾ŸÉ� L¨Çï“GcÑ¿D0ŸÙ‹G~±% +·ÿ=–L¦ÖÓ¥ƒv ™Íæt{¼†yÈ«T+Ö… ÐL.—/M"´™|¾X,—,ãL©„õW)WnQÝá|.ÎÕÐò®œ/WËÌ +ÉKX+DÛD8$c¤Ði·ÚTýè~–íˆ@à0¾“ï[í0ÜzpUîÄJÝoLñ-׌‹ÜãFW¤°Mb³;ll4 Çu„(M¯T\6FKs^ZÕ +ùðœnb²Þìö: ¢’èŽS ìx·ÙvÎf3”X^9_óXÚœîj¹ÞÕV›Œ(·L¤Ò©UjÅ6Ž>ß.4(¾ öxúÀ^ú:çöüomœs¥ÈS˜‰$˜PÊ ½þ¬åA¢ï¹Ñ‹\À°ïÿ ÒóÆ‹w%Ít/Œ8J '‰¢gNŠB¨'ŒûaÚqä8l9ó(b-G³<gÇòb~Ùˆ>†'Šqn;Õ·”Û¦ñp¤¤È+N+òYL§«ý-#ÑЋô(Í°°0ŠL4Óv˜„ÑͲÝd/Ëƾ=#Êóùü ôs‡õ$ ñŒ5§rGÄÝŒâÜ$ÈÀäá¤.¡\µ(SÇ©8-µªô .5ñä¤IÏ*¸¬È©ô4I-×4¡)«˜äܱmêô¤MOèUÅ©M”‘À¯«²LM¨/Œ´³wT§n"%¼*mœ‘ä¢oYÑôºá1Ôª¨…'r߃,/w;tÄCiT}Vo¸Ùì¼lºÔ<¶~yµdìy»Ìbì»û<=éÂ¥Ôº�=íœ'Q®îÁî°í:Ý|¡•ÂCËF0üÌn‘—°oZ‰£¸ÿN'A7N8¹ÂŠÞ·lŽbV—…aÒ1…²Ø?ìÿ…¾m#Ó®2ÙSQKt‚IÕ(5iÅXrû¡±4£´ìC„ªvYÕòÚaY¿Cýq‰%Šÿɪ5ó]T‘é¢gÙ¶£ÏTíÞäÁÙM=!HšY4ÊÉ]Ý·m©Œ\¹ÝÒ ÛþƉ7én¼JáK0™"×=?‚ÏhEì‰ý–ý÷¢$(ºåSß¹Q–W6IÙcÖ$Á´øì}}Ðë%Þ|Ït‡¶Çõ PÄõ¼ÂFs’±hÒŠcš\YeKmu±K3㬫Ë/`Å߉Ã}¯™˜Ù00ênÜTÝQ÷dê,CÝÁiýN-¡V}ñÍ_nmA¶÷‡„‡±Ã}å|´÷óÒWi6+aa0Ã(ćÄ{ë0¨ÕD}–8<f·³$ÇG>ù-˜Ÿj3íÂà]0Þ<’³Jìf³aM¿zÿ‹'ziÒô¬éÐàÞU?ÙjŒ‹Ü6Þ]ÌÙ0,Ñ\øˆøN†ŸDk„µ<Þþ +Q¢’µhCŽ–H:UD×ïÔçÎ^ÖŠpi›Tt£|„y͉herœ—çÅ&SPé'؈U<1þnò›W]¤×0>8m´YÏž6?üG½ðÃ{牪!ÚëªSfD¢Ó毂ÒÜÁ¬zѲƒ-×±gê èÂcpÞÁ™y« :+Jhï÷I‘qy'^mlúˆ÷1¢]º´1IR(³³rÀÝœYªªõâ2«‡ïà•»J2tÂ:ùä$™”%ÜÄ:Tn©…×4)÷õo'¯¡á11Q„xá~SžŽ11Ÿ,¼ßv4å†lµ…\æ¢aù°x{>ÖÊ_~Üåa–7É0Çæ¢m”Óß)Ò„‘ÍSÌ2ö’“E}ÁT§µìsA¾–%*Ûo©¯™+d71³KOÃÔʬ³èÌ%À3…Öß/ö ¬ÌÅò r*ïIyr;jdQ•*ÅP¥[V¢:ë&幪ÊÃ) +#-ëk|hµM†%xšDŠ1Yþ ®Æ'`OÂ)±Jœ,±¤&T_ª&Y.P¤6˜5QÆÙSmL(¶6¦¦ÐõÀ_®Æ'Òä`ì¿/¶in<g YZ´&b(NÖ—ÇÐZÑj…ø;·–íX=TRÅfL…¯]Òâ®@öÿŒðÍHÕS¥fNŽ/Dy*•;’6ýN¼o)²¡sE©Ò1mû#Õsëš‘¸rµ”RDñQº{œÚÖÕÏSÃAµ/zˆ™R<~²µÂ9ÜÙúÃô7ÐÚD•:• ˤ¿SˆškÝ¥œèá°WÿáE(OØ5®>ý{yÇTuAâP€‡å˜ÖMÁð'r Šw<÷½3S†Ž‚QC¹.&Fé…ÞUî|êk}¸Þgf}Om„Lõ1ù}?HïU3v÷Þž bd}M¬Ó£XñŒ)«B’nÖSw±L\ŒB®,ÓôÁ¥!‡!» „”ΰ"{4;ïL?hæì¡øœÛèŠ[W×ÆâsÀÍKñB"í!&ÞÉ@ûL¼7‰L^– +²³‚ôÁ¬¯ª¸_óLäÔ.‹BƒªTð:,K…º¥ò›£±,äïä—Äô i·Ö^–V ~Í 4\çš±ƒ,Ä)ufºwäKS*â[±ÍjŒŠáR'vÌ:–”—Û«‹‚3ÓäÒ¸¦v`8{"¥g9ãÕöñ ΕöáÛ8UöKÇÊæmS«–{ÜVúÈ°Ëm˪šmÉÎékmRÏg_ù.Ïù ]Çæf¬KìiQÚL®~Ú˜7RבÀŽéûè¶IyÌFÎœW‘¹XŒ™éº<SÓ(#þãy¨waôVˆS¬Í+÷ˆÙóÛ,‹YÛösê”ç‚ΪWa)«‹hÝf#ò>¹öÍö˜`µ’Nh çR�~G]X£RÚψ«vbí~+ÏûBPÄ9Ö§ ê5S„ÁÎléd!IBuV[6ò‰àfRÕCÎOI{ùÅBkícD*V7+«n#ÂöèYÓ÷=ÖúÁÝÕ]Yýúi—=&ŸÏÇ«öLN|UM–s¼hSØrmÁö¸è¡ñ²Ù¤w×s°³óU–F 0üïÏCŒ×~“æmµŸ×ÅÑþJVë§!뚢ì\øØözÞ{è‹íAÂTé‰s¶q&†žÇÃ项)ßëZêÇlvÞ‰WmÌ»4¢r›ˆ_pÚǧ +R+âs!(®þâ‡J¨ól?Âö”ú朸>¸«üS ôË„Ô2‹~I‹æû,½Ë>¸"üò…š&0FóÊ&>|žðŒ;|%%n¯¯fçºdëÖDó6:«ŠgÏz ç¹Er½n`X±ðV°}¶@DQ!ÀÀØÅÈW5 B¯…iü“‰Nñ‹:\wþ¥Åà�ýïĶ\ÂÁnü"JÆ´Î/ÈÁÜ…}ot\Ù$æ$Ñ<<šmPHµOÝSŸíwb�ì¯zBw‡<,ǤWÃk…=R×”’^@™ïAB01DN£>LjÁf�rãA, 5$Òd*R*I®þ!²ova…¨§ÆDö’‘oƒUd_ø7åB’ÇCÌ×ÃUóÆR ,`áNxÚF誑‚{ÉÄ + ³()dkAbI!s¥2anj½ö\„ I21a9â{ªQp!G),y))«È_]#AlUÖYRžÕ"ž]RÞS£òsR¾Àù¢¢¢zC®]†^N2AŠbA2!Öb!^2aÑbaY2Õb]2QÓbQ[21Ãã"2qÏ. žîÍ/< ˜di±d-™Tk±T/™ôh±ô,™Ìj±Ì.™ìi±ì-™Ük±L²Dñ„O”_SR 3CZŠMvŒÍw7Žû¤¼}•I¹DE—\Õ´DÕ–\͵DÍ—\=´D=–\#µD#—\³´D³–\«µD«—\›wˆ”TÇqDü/8“)P™ÖELwQU1uŒyˆ‰jˆ šÂ�×ô¿>,–’”±Rÿ-5f 0á=5Ö4555Õ-55,5s¥0w,5·¥°ð=5Ï4µ5µÌ-µ,,µj¥°n,µ®¥°é=µÞ4µ-ÕÞ<P€äͳYÈP´WÇ< !ÍÁòzU%w-s–¥tQ-sÑ¥t5-su4ùj¬cz ç»e¥±ß€#j ¹ôH9aµSj{HáÝ[æÝIésjê3zæ3[æsKéûXæûJé,ó?¥0-Ux5m;1šÓÈFÅEÏÑÞ×^Þ@ÈhAs”(_ã>sµ¥ +s-ó¥ +-æžhG¹}Žë,æGÂfD:j=¤y¾ªë¹ÛÊùcžÇ|RÆ"–ǾšÇ©â@/b+â +P-ü©=ÇìLµQ Qgó^Þ f_t>XÌC&"CcÍUAùÓ\ËÓMÒ+Ô€þα鉮¦àÎ…Ôªa®”\F‘‰”·ùY°‘ˆ#Êå:áP-bbGø´)�Ò¦¢¿*¼=+Œ0iL<©Q)$±)�Ý¥…„ ³¥¼•>²—úŽ•¥…¥Eº—†…¶ª–%¨å¼§ªE°§•°†š¤²t®õ…]Ê•â&½ÖLáÃYžTÙVڅ郪¸U™º%@+Î+ T+õXêæÌ’&ÁªfY³ˆÀ$qñ`·LóÈP1èщèE‰üÏO˺ÐÒ²Ö«ŠÒ:A˺ʪªÆŠnÁJñrË"ÓòOš?Í–UVf Ö¢â—}ž}´Y«V}§U–»b†‚×»aŸb¦ŸPF’×Lé>Ð¥£†¦Cµ–ʼn—œÕƉ•Å½W}»´=µW…˜Öe„Ö™×å×ÝË +•ŠNig>f®»)ªÍ+Ưº1©¶„EŠEåIkzyE·"ÑëTÉ>+UI¬›loêfVmoT:©[4é×k¯Ò|mÖ+6 +k¶Zé7SéÕªT7›6*‡ôª—ô{—7£®&ë„Uë·[ƒô‘6›6k±7 “6Û4·û¹6[“5' µÒص+ª´ê®grÕÇl麽éJŽç— åÉËK–ûK˜Øx¨4F™–¦–ô½£VóŽ—U£Õ·44ý¸4Æ“·“·V·§µÛ¯!énf¯+Z«ªpkÌ6Ç#Æ4éþ|÷Ëš–kþŠßí©VûySÜ¡2>Ý2L²šÞíÖÉZTÖÝåV÷AZ?|ZO8ž>âVOíÚ]sÖMåÖÍO +?yR<ÒÔ‰o[%nŸ5Ÿ‡Êv�©%'ñ +Ãk`ÇZæÀ™&Z$Vzé9o!l€²¶Çƒ5Ǻ·u¸´„µÐF7ë…õ[ŽÏÀ›]Ó’½Uz„¡úÆ]ûLÖªzÏߊPuWˆAö¾÷0\¶'’µPaõ¨”µÐe7(l¶šµG A·Šº]Ü&J40t²‡—µ¨–JL“ a~.‚Kh aé«Nïþ=ÞõÏÞubÖý46ô7^ã·Ñá·ý)³Ã½bÀëz *ÍP½{±¬{òðžþr«{Á4%5c$ær$\k�žþù5æ0s[½»»"Pr¬Tt¼/½$süå׈¿Çx7Ø€;ç€Çøp[ÂHÚf�¹‚èé¹S=“_£Ï(„ØCn¾ü¸ù§ è¤l{oyj{ÛÒK}´k‹V÷û8‘†Ù¨†ª…áH‘–ÕΩA´ V ¾Ï~7ói4ó þÌ¡ì‰Sˆ5ì ƪæ@” Úê‰G‰iK“i£òžÅíž½ÎþHµ‰=ΉmŒ‰èYó½Êørw"Gã×¢v:ah‹^ùü› óq@Ž–,o~ßKbßAãýwc{J–Dß–`óYÉaCù À¯²h'³÷<1É,;ö,{Å,óϹúñT€ù™¬ôŒð&æ�ˆ·‘ÀŒ[K6•¨Úì˜MDqH‰€I¤Êêà¸ÕÃ0ýáhÛ(Û”9H_Ü¢YÇ¢%Ĩ‘Æ¢=dqž=!ò:/-Ö¹+ü¹¢Z´“¤èüVr«GŸ~“³DÕD$ã"ît¨±‘¿\óˈ¯e¥a‡ñEì.Sî‰YÞŒÕìÙÌîÕ̪ÕÜÕ|©°Xç¬e©‘ +Q¡´L'~„u¡ EÓùùP~ÃLà\׊èýÅàU»5f¼ÅˆÍ‘²Í‘ÑMeÒB¾ÜØþ¶Z[I-†^ÍVIíH5vvÚ…9ù-ö‚ܦ/¡Å*—-úÔQ½ƒù}±”úÍÜ›ÑÒË‚.éÕ<ŒÕwËšfÏÍzðY:êÒûÈÎw©9±Õ–%âíuZ!Þ%„!í„c×mh㇣œó TXU³ïi‚äÕîUÅsu¿’iÏZd§ÛÌçwÇŽ®E‰¦u¥ÞvÂÔÄž‘zÞöhØy•Dý.·NáÆŽTêWæèsvîßgI-VÚ³yµÀËQÂÉø½zúYgùQö÷Òï4Y#~ô1UÍ1`ªQž”ü«]Ï!ò—–)žö™EŠ‰7©’´ºn•#ìv°#"Í5‹EP¨ Ñî6¿Œ=?Ê$ÚíÇô-Š=ëÓ‰Í)ï«c#ÖµŠ#ï=Œ³-—3ùú]¡³èèvz¢«1%ëŽzé*ë£"ÎÎ/ŠÃ§ìxúÜOÃQIsÛyåËXÝG×h´d¤“êH0{¤ék”Ñz$óûKyõYaäø9êöo“ñ^÷Ñwè4 ‹CHØ>Ö./Nm8-±ži¬ýŠ éZ—{ÜÔ)Τš˜±®5ÔÏž3¯\§÷¨#§0·û¨¬¯ÕÌßÈa¿;?ÙÒØKƒþó´ÜwMH”žÙ„¿Êç.âÂ9qîJüc¼ô][Ò<›âhˆ‚ºi¢¸'S›îšã©’¸{Wk)±¾š²¾§„8æ')üÝ<¬,=¦Ž:›¶:ñÝ>>k«+šºçˆ¼ð†è@>ª×:{/¦ã¼—®Úl]»Ú¾N”Ñ03j{• Íh9üì‡ãzP²¸ºh=áþulryöÐVC +º¸6«zrù6¡¸7¢|P›xØ“xàÐö¸¸‘ xÓ<=ÛˆG™Ž°NŠã?Éž8‡»¿Hìꪬ‹ÿY_W~¨òVÍÝÎ2Ô}#~u}Z7'Q\¤ÙM +Ÿ†ñ–'V³•~£zÛϳª¯á8¨ÖÜzSЬ“ö&{ïª:?6o/ ú.iïÒÇʪe‡WŒ~~é…)P‡"‚nàìË»9Ô½jµ;×|([³;ÍõôÄõ}ôhåõ}¦´Ò؈ºWÑf%Xw•Sìöýœõå&oœ”X€7˜Mæ™×ï÷Ca8¯#“EÀQóf›ÿ!öÑÆ:‰Ä‰¤Â{$’M&ÐÊ”:O4’J¥Ð›ô{8™ÊfqZ½2@õ|{¹ [(æ‹ücg¶P®PªPmñÄ°RÑj�%øÄ°Vo0š�ý»L©T+”›T½Zl7×æu¤ØlwÚ\J!üUWôºÌ_g·Rõl@1µÓŽ»Aú51™NçØÝ^¿qœÍŠ$ÒX}p],Wª4Ú\p]7š,ÖZ}¾6NêäißX·ÐßÙŠzÎPï¤:Ü£‰å\m¹N:dz„Új¿=v2:ÜØðZnî¶0]¸ŸÏfÚôò’¿½Þ/7œr:w¼Þ +ÿs«·‰¤>à¿o¸x~�þ=?ò�$–tü�A4rß]ù'Bû~t! ãçuWd7’дå0R[åï>t·/ÊÆÂ.¸ÆÔ¬[‘ÁUAëºSëè±ÁçÁv|”¥‡Î“[A…‘Ö¡˜ Ší› +J½%hš¼fÅI:‘¡F†¼‡GÖß&UÈ4Ç¿§ï‰Ê³ªE¯#§oÙÙOšd.¶»—ÆI¤ÿò•÷'Iu—MÉÍFªä߸…Þ%¹›…ÑÞŽF`ˆ»—Ã�áóÅÝÖ‘8ò*‹ÐEeì#ÎK +O“T’™â)öÅÊÞ4JÉ+«Jn‹âjñãÛ÷¼¥óÒhëÿ¤“ž`yÐâäÎÝÓWóòhrð‘Š’Q•hsÉ [Ü]kZ3«tô+&2ÓÔ<VoL´>nÍTk7Ö»ŒIkÍÞ)3»ëß;X{^xî-z'ÜLBÕh˳ì¤Ó#P]é+ˆáÒ¶ãϸ±t¿›1OÄt=L[~Ì +ÛÕYZòU"áˆ3 ÃMsú¢£ˆ3`5HòÍbÅ—s´VÒVó<JÎ-d„NV·ìCÅÏUJVÝ̳ën?UrÙ VÌ {uËC +E7+ç^3–•×>‰¬l3m}RJ=ì´(²ìÊ 5z æ¸n³0½Ï¢‡ˆTbS`V )‘æ‘‘ª0{Ì0lì4‘®3Nʵ8ª…)Ò^tô~^ã†1_–ÿU¼í¾Ìø¼íº ¥ïîV§émûÄ¹ï» ùùJíÂ`ú~ø1~mñ\ëüîºíüð~W¥íz>,ü×þ“ylÿ|^NÄÞ™CÒ¾ŽðÑn_Xzq·¢èFñ±Aîý½&P† ×8U²k]…©U/¨Ôà4!ih$w*KYc±É(¶¯¶æ!טB%•<:ÂgR[[²unTô¥2Eñk”ÃK@¬±Ž†²À‘@G¼2%דtü5Dz ¥E}Œ•¨6€6soúÅcùxu˜½Z‰É:!x¼‰U³žÐ`ó`K \XB¢–RzÌè'ÓyÊîÆ1¿±ûT!Wôúžû2ÿ˜Z ÞÑDÏSïß•N‚·.¾ŽCD¹ø± Å{<aç“Òmü¼^Æ}“˜4½UL±!&qç0çó€fòI…ÃÈc'Ulr›-uj0‘¤:ULDYªÙè^eBGɾEu-ƒS©ÆÊšÖ=?‘ž”=Aþ¥j}Ä{x|E¤Ñ•RHNEKÜI9{wi³Ùœ!ó&’(ÙÞá\öÏ`S®€Ñ!ò‰…ÈQúhëB^¿s9¬I2@Ì–„Ñß›`Å` îÖ'µÝ+S^a¦Ö"¨æBXá|îý÷ŒÇ»BmZEΖãä¼Ç.S$ÐâˆÃBS©6yIó‚.ãr¼öÏb–€K¾ü]ñ’àîlÊ«æÊ€q(ã>ý‹—Œ‹®RÌw‰gcÔP’¥¢ÄJ¹ cš.9UîomN]e“Kê‘ÉUÕJŒjÕKÍžµ©Ë–—ZçrêÏ©ÛƒÅê瘟pØåÂÕ„Ýç +ƒ£eë&ùÔ¤êÜ”ŽqËY§åÏísö(:SX ,\2â™ÄÄSXÕÅ›#Õ¨ÍÕÒÔn Rk(å‘õNÖVÚ i›M=àjãUL|fÆ!y|{ä‡:Ô/²?öã¤clÃÔ©°«~Õ1qd }KçÎWMçyHFoàŠì!2#B„ÎhCKýµÝ;Ž°"DlaÇ)êÐÈ÷MJÏ<D•ægÚVJ¬s�Bö·-Ž·>_û�œk½tÜÆž.ö&z=¤Æpé â½#E\ôW~LºÿX Z|g?f›„6¦”ë”–ÞöÇêClœ†AQ³[ÏÊ]|À7'ΛEà«I\¢PÛ1çåÛ„ì-còôI>^ö}*ù¶ ´ÓÇ”n¬}ú·)Wz[ψŠC·©“¡Ÿ™D,‹Ý3ú˜<Z'|qÓ˜øvÁaÓlà_mà! ç|T5|6ù¹dÙàiJÉMµŽ…”îR›„]‚P«úd†Ö +q# N\ÞÒŒªl¡•¦e:B”¤wÄÎtk;º%s¡&Sº‹Ž©î?ϵ׫%ë%§òœÞG‰ªbÄ \.÷Y¥‚”£‹«ðÌ¥&+×¢–éX×®|“v&[§<¼Šëœã3n·T¹ õðs,…¤Œ`j7˜L±7Þ¦X¸/ELŒZÚÉò¤ª;„NÍÉßÃ&ÛØ%i„ÑtíõžUöú°‡³ì£žÓ›ðtíGÄÉãïɾ±Kª*nE("ûÖ™'§ªqz"`ÙΉŠÊ¶€ÜÛ|„®sќ鎻YÞÌÒxúõlG!ésÙ£®K°h7'9íí!l±ÓYÝ÷u°Œ§“?ÅÈ<…Â<Šø·„HÛG@‡Ž5Š‘ØÔd^ŒÔ2î¸EJß,xNÁžì‰ÂÖŠk§1¸‡(SWvÝI `·OúÜ·rܮǜásîFsXÌ˱êÛP脧s[†D¡zÍhºSú-_¥W’^7øÄ®ìiwè[3ŽtP)Ë/ +…‹iœ»]ï.¾¼ù1®]±[IGÑÅëWú.ã¹Ïž¯Û‰ê—'u_�£×´ßëÌÑÇ«å(ÜÏ÷…Ðïkˆââ–ño«—¦Ó¸Óµ©u w cðZÿä&›ñÓþ½¤d„Ծͻ0qñ YzC +°ûÇyÿÃ-Ox—š‡Š¸ÿ§agÖd `’‡2y[…µ‹!ÿ åpâ6E^½n*mq ¡&üOõ,I|Gä\ü¨[T¾;÷ž¹¸Æ,¶yì;v%tcj3ñZë>!2þ-t>EðÍõ’q2ŸŠ„ïÁif 2ʦꆌñƒúÝÞêpu¶XnúÓž4´ByYJŽºåp}¶tBž +ž~�fË +FÈÂ+Ü–)A¢Õ X¢8÷€öçúX”Nýe§Ý³:T™<åCþ‚ ö|€]!té;ddaññ©Mañêx¹uo©ý«¼ÿƒ½:l«³é{`ƒM8…ùM‰ð¤RìÛbkë¿„Ü}SVIÓJkHì2 +,›Õn ++PJSø\‡(ê`Ð8§ßVæ (& eº D: å‹È:æð…ùæi⾂0Éß“µ¿jÙa +Ù$1Ècýe^#AC%…CMb`\ÜKã|ô`¿K„U»8cM¬ÍRg|y¯#"Uø÷üò¡€$Ÿ*:‹0w½Èð¡ +‹ÐP´)ïŠ-R)�ŒG)æ—¦“}_ý£*_N9djêêP˜ŠZ’¾øî›XþPPþ{C§!ÑËXÜ"µÎ +Û˜ +éO«¨ì×¥x“¹"¤É#¹ACAªÅqTD +ã/Å”Ö+ÒÇ:ň_¡¤R +)�©tBÇß#5ŒÛŠfd2 ÿ´@Á!4ž‹Æ‰KÎ,2à‰Sœ(BÛ$ d„Gi^ÒŒ9FãZ"“ÇoN`ÃT¡"³RÞæT?6—þ‰ôÿ[¨Y™kz•“ˆk§Äž�ͺàH÷4Áb�KÖXœŒvÔ¸ˆèwï°¨w/Ç2&K!óÄ ¥´…)÷‹º©’á±æ‘¦¦X³vÞkÃ;1ƒz²„ÚPY} +Ë´'YM’Hö[”¬š$AJâï€}Ú—¬Ì¥Á{Pª=güw¸k|œñ8í?»Ä=ð›eŒ ̦±ÿ1žž~„¶# J +]DˆK ]�E؈¹ ȃwÇÌ….QI;+ƒL.‡,ŽÚÍm‡±$d·ÌÀ§,êÇ¢ÆL¨ò,¡³,Q,‰/šæ,1…&×LôôW¼]z(Y¼Ë^*fYÚ@Q¢!™ÛâÙ¤˜Y²lY¦ +]öìYÅp].!a®YÚiYj]LEžºFÜ)Yê£Yv‘YŽ©ú`qNC‘TE‘2E‘vE‘qÅØš’¶h¨`• “eC„¢¢¼SwP=ª,‡¡¢¤¢¢–¢¢µ¢¢‡¡j¤¢j–¢jµ¢j‡¡æ¤¢æ–¢f¢¢DlA+H…¸"?§¬À…ÑÎË"l¢ž¹¢‘‡¡Y¤¢Y–¢Yµ¢Y‡¡Õ¤¢Õ–¢Õµ¢Õ‡¡=¤¢=–¢iàLý÷˜ÚUËV.jEçã™h‹ÜYŠú…Šî†ÞŠu‘üš¡ã;¥ÞÞ +»~ôr2Fײ‹Îµ.ZªÞªQªÂ³hNŠû°?¸–‚-‹2„«^.ت.Oª±Øª±¦ «ö£+•ëkò°1%³”k¹i«v,†á„>9ŒÓª™¦y«‘š°#0½ÅÀTÑ„ßJ#·Dˆ÷ +4…Õ‚n÷2á¾vD‘øÁXÅuù0Å´¥ÕªÕj€ÕddB ™‹â,ÆúyÎi¤´63}jXS¡&ópõe3³×ÂŒZÎÜÅUìÓLÍžkE;&Õ‘XaPŽ÷ÕJó°‘pèÉaˆÉáß¹P³³õPj‚àªÕŸ7G.7'¶\DgŒ¨=@‰[ìëÙØdˆ¾§~ù]ñH¢ÔÂg5yÎT‚ýj o?¯;wÛ¦«}Xš»E¢³/ÀcÙ}e…f:öìãöîÛvòúA¶ö€äÅæb§�eÅï&æVÞžêćå3¡ê3·öS„ù,±ùrÍ°M¯Š'[hcö5‘.1m¿ØÄ‹cmY–Ÿµã24Ý´ÛSÙBÚ܉°™ìg°ß©â±Ü鱩éÒÝþ´þIâzäPÀÞÈÄ‚$M—èSC rn�’8€Ú& Õ:XJ¢MMR£×u5Àö°ÁûQpZKó^JóIz6¥ r#?Š°Ptr§÷]ôrg(|8cóuq÷®s—e>uNp€“R`£Á~¤eÚX)ÁŽ]a§ñv‹9XÅP ‰ƒ yKèͦzÙKÝZ¹b[…ê:w&kûSó%c[¥¦UÄNÀmXO,§,Šº;Œ2y‡ži‹–ˈVÚIùÇÍÁA£Éñ‘¸D’üÇ#Ò=Êi#ÑË(\išþ#ECnvÝ¡‚ÄM#>©#>é0‹#f#þáÝŽ(#³Š#^2F#òj='£/#«„$KìX²fÃŽãÕ'DK´#’ƒ#ÕÌ#L=M¤#Çè#ç "J=BÅ#/¤#ï_†v¦zƒFhPzjBZò•GÒFT“{xzòÞZ ÅßÑõ¼ YtlZ^÷°8œ„¾.Î ,Žà®Rüõl%ÍŒ³‰„£öÄ?Ÿâ2yŸ¥NŸ…IÈóŽîù~¸åÀ Íò°Ìò(Oß—›´›7ã +™eÏÌ2yéºÝB£D ù¢¥õò&ͪ¶Ï¢=º8»’!Íj…öìéì¶{ì¶omÄľO×N«œ²Ü|—ÎÚ\gÚfç··¡ç¶2·ÙuÖÊŒÙ!sµ×ÂOòºÌLÏj¼†€U®š7® +¬/õ˜ã]ÅoÞ¨šÒR)³Ò›N]Ü:¬f±æ»Oc%£ïiöát8Ó +Úzµk[Ì‘êÖ•¢…?+m~xíAZíaYíA_%v5m^Zˆ^J²^qM+5'´9g›ºR-jMZ]mY]][]}xÝCZÝc^*~/öY•lÏÀg}»‹ÊÛ’‰%Á¦‘ߥ/ŸÏê(YšY¸& íÿðúÁ´û¡²û]zǑ⩾9͸Û﮾ÎúÖ?‹Ë¼4V0£ñ8sp +±6‡¤¶:aµ‡Å²‡¥¶‡å¸=†zíeª·*鳇N±3pú,²û°Vú´ÇܲǼ¶ÇŒ´…m/AI×-pòN2rrÔÓâ6G’HÇüð'‹´'˲û§À[²¸ÑY²Ó2¦„>ca°F+´§Ç²§§ºÛÑnN›XÚó=Ô‹CÖ£vð§ÂV§¯¶gïðç´Fä¶F0سˆß'ž´ç¡ræ‹ðg–´ñ'°ƒªð†ëHçát)9‹PÛ“Ä>TïÚ)n]q¤=‹|ËB9ŠH;1´uæ=f¯—DvVôVWì1Ø_&‰r–L4ŒrÖ¼vÖ$®æÿµ˜e¸ŒÊÊsnÜxf™{Ôµ~Öò6õ~s¶í—R#(;"LÜP5ð[o´6à¨7Íè¶Çr¶§¼W0lÖq>J¨VâyêR»Ïrº¬âwïöžtöÞrö¾vödT”7#B ++6wN·*þyfÆôJ±e"úcù:[¿åìläh3é±åqíñé‹ñj¢ýÙ¡Um³óPòÊѪÑÊåÝçYaôŒ:Ä+?Àk>8uò=ºžùäžùõž…éžGñžÇž'åž'ø^¤ìžçä^äõ^”é^Vñ^Ö^6å^6ø^µì^öä^õõ^é^Oñ^Ï^/å^/øÞ¬ì^·†üh]b +]p mù«ÝíQ6ˆ0™ZÍZä>î‡ßÃíÝ#= é=`å=àí==’ê=Ræ=Òî=2=1é=±å=qåÝÏ°¸¨éÔœÞ7Êq«ôž`b5ÉéõûžBMÚìÞl�o¶v_ˆÞ,ôÞÌòÞìüÞ|úÞœøÞýôÞöÞ£ˆ>"ø.>0òÙ\2Ò¯”£]¼L?Öüªý!¼Ä´{@‰^ÁþÊpë}å}Oí¿çˆ~–ôþ3X?h}ÕLÁëxn5¤Vƒj|k;ÏujÜ£_}ÿL�‡x-v›à¨ÌêöúƒA°(œÖÐ Ã!èD²ÍêG£pÿx^C'ÇñÅ2kü5žL¢Qè´†I*™NaÖ›mÖ`*må�ß¿aö÷hUêÄè=—©JÄÓ(|.™-—*¤«K<W*•kÔÛL.YèæòŒ§2y¢Xk6[¬·:}àØj·;,‚|»¢Øêv{¼¿>àØë÷‚áðx£ÙG¢ñ¸|á9팦 }B8šNg²¹¼€ðœÍçÅRY:µ—+ÕZ]¾[Õ;Ù¤ €ö +´²Ûín‡¯R ÷›ÝÁ€‘mvûãñ´C$Mr•s½N•’UÎçËõz›—Ü'wëûÃñTVÝ—\M÷DÛÝ—oã÷ÇóÕV__ðÇgè ÝSÓQ\?�ÒötÏ–a\?Èrc%Þ¦ +-_Ã];tŠx¬ tÆcý ôW,•aQ&v¡(Pg5Ç•¡šÔí¯/ibJ~çí8©µëÉ‹®W+Ìq|ÛŽ Y¢„oSqâÔI²¢¬„IŠ*E+‰?”í„IšnbªQœa¬Äiнq–à•E“iV[Ã… -!q�]ù,³tœ2Âësƒ2ґƼÀÏ7ÙÄÐÞ^ÛënŒçÝÔI7Ñ´ˆãkt+Αô½´(wE¥®LLô4©¬¬´¬ªEM-72d½Jk]ô´ªÍÓ°ÌèÂZ×"JY7ŒFY7ŠN¦ê»Á +4·)Ò7/©rÉg¢‘{˜·xJQµ‡úJÙ¶ŸÄrʲ|Âv%öâY¸ÞŽJQ÷0>jêÊÿ»ž²ëáìûA‘¤í ‰¢ífºeeŸöå(i›÷U˜zÑ£¸R˜´5B_¦ÄmQU6Ù1ÑcÔYÑVÄEðµZ‡Rºò‡»Þ³Ì¤*,q/èÜ)8ž[ã`ýgÏjœ—8øll—¥…bÌåREÜ–…-d4�ª–‰âtkŒ®(Ç—uÝ ›ä zôm¹Öµ—]ê™#›N‡½zMÌ=?ž·ƒP¢X÷×í¿ôYŸíf-¬¼V5©J±G¿úèœÒ<£°’—e£dYXàÕØm.*“f?—kân=¯ëçx:Å;v^·KfRv£èßÖìr^ä-Ãb¼ä&¹»5}³ö#IgïŸWõâ|^#™j?NvÄv7Nv½îÞßIÌt¦In¶¸Ï¼@¡¯«ª¨ñ¦ë§1»¾ïϳ9> °,½¼2ÞFƒï~ðoqûF¨Í¨Q~ÂjJ‹¥8<~nOv[ÿ…¸çæ’ú'ô r¤}ð'ð€ð´¹2žéÖKæü‘ø燑¼¬+ÁÄ}xbÊ9\€„bÈÕmð[´ï"N¼³34(ô†>ôÚ°,©á‡†Bimø¥C”öõaPzËàïÈ)Ië˜Aå2ná¾kh<6“ ‡Xçê"‚»ð1îK‡8ïë"¢Ðâ| +áâÖºÄ1ââwÉ ,ÒtÓéÇÂÅ“JWÇ $dT‚¬ Ö‰dxIä!ŽÉÅt%Ôr“Ê•Ž)ÕÖä4ÿŽ&Õ' (ð‹èíp2EjOCfR“LˬAÐdÁ–âËMÈiœd'“•²ƒaf{#2(`ó‰Ñ<f¬I³Â®¬m0²vŽO +ÿpÊ8†>fjÁ²…)¹–>¸8Ë‚ŠëøC˜iF) ¿“ )(5*e#ÿ´— EÎÓ<«žh—iPÍ…ž>R"Õ˜8Wd2YŠZ5*‰<[q$¯ÓX\ΣÅU¢g`JPüLºN¢çÞUWpÙq*e¢—SËúH2ZyŽPN}ɹÀ.&3<ãKómÍý:PRFí*V)Ól¨M–Ð §’n1^¨t©6¾Éžòœ4¥üÜL³éTmfpaè>ŽoM•(6Ç´I'0¹˜+†YïáUÊÄì´’]Ob+ç²±VL€Ý(’\mH 7rP~©Ošä(˜ôõ'Û?ÞÒš*euªOº²Â[VæÓ´Œº´6×ØhÌYný®\i‚ÖÏ®µ'A¼1QogÛË(mc̪0àÞ´kO +¥Ø«¶,ÏX»ÐZí\¦åðìÔšþ™R/½múw®ó~–38Þ,-acYÆÄxÃ`Òáà@SG¶…†ÉÖ¡ý)`+6´÷[ §Þ±¯³ªõ³¶‘dcÃx¤ñÅ͉zûn<š¶ÎlÝ…5”s¿¥ÑUÀÅæQ.yTQ÷Žœ^õð«h\}ô1g¡Îöˆ8>0˜YÑ‹z¼ºUf=4߆ÙkãÊ×l‰eÒø¡ {g5Põ×sãý¥×}ªí—癪ÀND†¿¢7KJî—a´WœÃ»lÓÈ““oyŒó٢𺤥“ýεٌ¶÷P†-ÓïFšïï0Êó# +¶Ùä çb#Èm¸¹¡rœ†ÀL<ô7ûœ[Îݱ~WK$;„ñ*àúmô—É ”ÂG€Â7‘ʺ'Ók¢çÒÙí2ƒmÝ#z»…×:¢ST˜·FÜÌŠ¾n.DWw7>ÛHsý“G‡ÎÆ-CÇè=<£ûí£Æž$”²®XéSç×Êóf³_ÚÁ—‡¦jqÙÜ“#lv‡¾õo{0 Ìí·ñéT³éetÇTú,ŠŸûˆ@ýcÏÆ~0aó5y´Ò1>£Ç‰$â~)þI(Ãï´=Ÿ½Â÷!–]‡T?»3v6÷!ÛûÙy,†�ºÎ…8ÛJ\·é1ȧşþ-‡ÛÙ‡Ú4Á+µw¬+á O…Æ[¦ŸMµŠ®ïÛwS¯ËH¸Ç뚨õ'WO·j:—ò6‚Ñø!ĉ›WÖê’Ã%·Ê³ÍIݨêkÔŒMãÒ,Ô{ïǧì»ï¾õi¾Íãx´ŸQ¦4íp«ŸC¬»—aRàç‘+wÿÕ”û¹AêÅ¢—÷ b-ó-åÐa'ÌtŽ–¯}¶Çù< }ÀUh +LÍøn`‘T”éº5çÐì׶5Ÿ¼îVÿû\•Ùh©ësºØàÝl„±íŒÕR¸eÙFê½µì9kô¹ÝÄîÅ_ìú쬩–C¤‹ŸŠúìªùÀµcÌŸa2œy·Œ˜–¹Y°ž9áˆØŒê!«™á{VµáT–9Ž±iã·Úc›•†Œ‰ñR¾9|c8½i5ž90¨›ë%z£œsL—uœøÛ Ã˜ûÃc+C¿ú‚ +{TS´1y€=ªòxJ£¸BYë°]‰z|¨¹n»—šò# #±Ÿ²˜²¹m‡YJºG†ÓÌÜ°BeÖCMÆÝ™_Ü„Ù}°˜ÝÛÃüÚ52Ô˜àWƒŒSô0RÌBÚÉ1^É#ÔÓ‚"ݸ©"^‚¬‰}<Ë#|¡1}؃émj)#‹Ä#¡ÃùLlÔ[e6O©ÜÚ#Ä„ýËÞ#˜ý›¨¢üÜ#¬@R¨TÃÎåcÇ£@A£±£AP#FÖy“ÓÉؽÝ]i‡Ê;Ì)°“}[Íe«ËCÚÞ#·Ç#öÌcÄRÂöÏc.ƒõ/ÓdçD1øCcÂ#÷¨bÎr‰‹âJâŠâ¢Û ¦Í£'ãA¨ã{Ú£À2¢!°œ¡@£yÎÈçÓÍÛÙNJ¸á„ ب̀â˜ÔÔ+æ¦ïî7ØԹ걤1ä±Ô¤ ቤÔÊ„®¬7«î£F¡òâ6†m¡Œv¦ì0¾öí¡z£\ÆEÁÀPÓ§uœþQOT1q#$,¯öSOâõdçWOqg$Ñ Djg€E¼ÎEJ›s´^G +´†Å¨˜9«yÐL9o¥—¹G*Œ†ÔZ Ô©@{,½£o¯iˆ¶›‹ššï1T:Tº\BšÞ˜KÕ™Ï;ÆõK¬H¹ó¸)[%¦5“Eè•zRxX° d˜K{bŽGb^†Ò)fñE†´k,Q‡/úª]¤…Ýå¸ïC¨Ûݚݛá»Ñ9¶‹+t¢$Jœ¹B|p‡ =YJÂAY#EÚÂaÈ#[&Ð*‚7¤4Y$•;ˆÂ-p'§=z‡:uÏBÊà‡(ç'=pó"•vÜk�*Í”Ú�¾‚÷Ê#§ä!Ë,!"ªƒ@·ÍŇÃ×Ë"¤2Á·"!<"Ý—#½ó‚ÖTÕoÓÙžÓ´Üïã-¶õÂðîs•IÖQP¦ÁH³Ar<~\KÄ[êQX\^B](¯)õ�B.YHgéOóê\«‘µÉ†‘â¬ìfK“µ‹Yð*æç2V´é·¢8½á9ö0¼Q¬ðY<ò‘-)dm‘˜Ëf�Óá„Gé½¾áE–k‚›;@{š<µÈL/(µî,Í~(µå,³åÕÂul_ãaò†ÇJÛ‚1ŒMMi2ûi7°ø0ÐMÈBŠº0BØ´’E©Wˆé(uÑ·J•„Å®°úáH÷àpPKˆcM„ÉÂyN_15YÍ_o1sÕ ™(80¯j‘”ýcBJ‰N‚[Ô[M [¤8PÅÄY(6PõHž¿’ê\IP +áÉrý$‘³DSº9Qƒ[n¶áQ~Tn*Y‹$nщc[æú 뢙{UYzÓYÛ9’òIδîYj.J]2^÷sY÷¶â³úÁUi3·²¼K÷º,AK Ò½Š¦a>˜˜ö@E¯YHëY-lP-dPHh…NY%KÜÈbŒ†×°ßR¾àT{b©:©î½€Ó´¨íéùxÑÈÁÅdŽ‹K‡[÷°YkƒÛ,H[ç|Y+ +×LyŹåh.ÚЩ|@ž±”j-ïêô^¾ÁÖ¢4R_YO ×*ÿÕÌ@’)ñRœ\½Ëâ>ã©lF�6U°ˆËN?Õ,SUãÕæ‘…sH]Æ{Õæ×@ÛÎK+êî)ÿÍô¼m^U%ªÑpŠ`Š³5 ¯5ΪC¼0E*–×JøݯZ²c±¡]B½ªÍ™£¬ªSzªÍd’ÁÃÀs2.ˆ3ÍK³<À²<µ½ñŽÔ$ XÕÑìÞXpÕ/Õ=$ÕÚiÙ c^ßΔu鶙ÌÛ£'eÊ÷ÙÕÛÑÅà\û^Ù)ÕÕ¹]—úÅÞF™[jQUÎ7Ö³Þ#E–ð™Ñ½¶Q¡Ñ=Õ÷œÕÇšØñ¦¥“UŒè6{ÕýŽY±æ;}ÕÒÎÙ¶Ú»3•‚kJ‹t×.<0;…åýëð+ç8«W7’÷ú+õ¦ü¢¹Šºï‹«[‘VuRÖ^ªêÉ‹�®#Å")´mZ©õ/¾FöIðæYûæh‘xBÉHF¼¿5^,BwTgÙÀ±¥ |öa¸"ªªwÝ/í IQî«Æ]ZÇý¬®Ä¼O«Q „qŸˆ¨ Zsˆ|C\dÒ–éÐb–ë¨K’Ñzº†TÒ/£b^É^kçt›ÌŽþÇ´áÕ/kf‰ñ8µq(%Õ0m<ÙŸ©!¾–FÁ¡ëFêÑq¨xŠrÇ`Ï Â7§³¨×&KêÒrëT&¸ øŒTq/ Ž 5ï{ Þ–.ogZýí‰×^Óår³ê‰B¼n¨ézNܬÙUç„ݶa?YÕ=s×¾îgºsÕ–tÅWlãë™çã~¥‹/¬~ªQƒÐÓ³b—²\Õƒ{ä£øs2ýøÓåp6“ê™)¼X¥gA½”çÃ,k%oe%øµ¿±½³M ¨ß€%-ÒÚÃf½ £óŽó·´øt©ýß5Å]Et9:¨‹Žs*gÏ øRÁZ¤Ô7Ø^¤ØWC³ÝIRm~.{'š–¤H1+— é–£ N¤g—£ë±-Ç}à#Á«úYS—Ý*2ùE&^ª•'¾e2¸—u[‹ÂÎd%½ý‡¦ÅíSšÅ¤pùºÍwšJš‹Pêè‚î©óþ`OÝX¬ÿ,0må¸Õn[äPA›{ô”!Û¬…o¥úæ”m[þÂÿI!DXL°™"—q“\íRžÆýB'朗�YJÙ`l\,Úà.’¥«®÷šž69Ël»h§¦+P ÍúU¢bU©+^À¤žp”žµ\Ås3ëkâê!È°½ +EZµÔO€5^ö ëV¯iµ «’ˆ¥ØZ8¥ÉÎàîHêùIêžÝ¤_}™š°ÒÌ—*b欻ž¬½„Ý»£ßó™*½ø)œÚ½ŠÙ5ëÙûBhæ‡Ûø¨Ž§ ©äH™3Ìm”^»Ôêr׶HåuJ"Å¥å(<h¡›}UDVÍ.áV?ÒT?f6íü’:ÔH8$ÞE'šÚÀ¿=T%^"¿=`Š%µ Ûá’eü-ËÛ«¤#ÌŸ+«&3kRtžU°ã:8êY=›Â¦©PãW;n§Çµzv³{©Ù¬\Õ¹=y”ÌÚsžŠhšÈîiûîÙh–Ù�O¬jOoè %iö¯•ö5Ï4´Ûu¿§~ÓÎ Âé¾áyI¦s‘“Ü3}6ɾÇ<OñrþÀÚ&Ôþa8dë],’É®<Œ!¬ÎóÙÔô™®˜=VéÜ{g¨,9/uEÉÌósö¬l%œÛðºÌ]ÀÖ=]ÖŠ}íÝÈ\öžLžNÅ®ÚÔ^ÏòŽ~iŸ-ÍFÅÞ¤8þ˜U[w¥åàÌØó¿• ,âšwjFH—×ÞRYfÒu6äßFç^LБÎþÖ<Å×Ê$¶º£Ø< ê¼èù,|ê=¬‚ª½¬Ë½_5W¶”ÇÞ»½5÷1üÒ»ÝÕ¦èî/Ï>´œÉk×…P ÀºÌ‘qµSÆ=R×=ÒÎ=Òï=îƒ(Q>1É=±ù°êQpÖÞ£È=ü‹kp`|’{±{‹{–°£s¾}¬®ƒËë.8öP’{Q±{Q‹{Ѩ{Ñ’“LÃ0Û~"s?Ë Ÿ¼‡¾‡7{µÌ{5Û{µº{µf|s{³·{³‹{sò{óÌ{sÙ{óº{óf|{÷·{÷‹{ò{Ì{Ù{º{füHûˆ·ûˆ‹ûHòûÈÌûHù·÷Lþoeêf–˯Jã¾¢î³jî³æî³é«ñ«Iî«h÷Õ÷ÕQ÷Õ5÷Õs÷Õ‡ô=Àø=$÷W÷„8÷t&«ŸjoD¯Ñø‘;÷±Äø³Bô³¶÷±.÷³i÷³q÷³õïg xÄ<™û9Û{ËgãG¿ù¥þDžL×ó‹*×û~±û÷÷ï£îß×Ü¿Ÿ»€é}þ@Báôú}"€>/øýÝÅ@uAÊÝÿŠ*¨\¿Ùÿ‰'’ÊhÒE<‹§ÐkôJÃ8™Hg2Ùt*ÜÈæòø�Á'åiq£0GÜ™/JerxCpU.•+Uj8W&˜Hþ+ÍêðûjµÖ`0)â¥Z£Ñj²Sj÷v³Ùáp19â¥V§Óëòs +¼{¿Û€õVo0 ! ´…ÿx84Óp5îTfR�äpéAh>›/ªÐC‰älš §Ê’Á�Îd2šlÖFužZo·›=άË_òGbˆÄrµ?OgrøÂu>/Wjôä|7‰MSêYƒé»Þl÷N&òˆò€m©›*}b1K%âR{cyz~ +o( ñtü“€|iPRÚz~�r´õÀv5\?8ñð”@¢÷=#܉ü_øƒÄùjDJok!X$§û~d¦ãʾ‚ë#øÑÃí:Q<;ëIžw×kêÂuM© –çU¼D’¦¿ŠÚÒáü׉N‹TyÖÔÀÎÆüYÈÉD©ãÎâǪ&p´Î¿SÂáÒŒCèæÒ¬kÁ³#iì‹ã$œ<FâdQÇNr|qàÎddÊTŸ§Sðb"X5#°rÁε(rÙÉÿvžê÷ý¾ íMŠÔ§³Ë<{gf“½u8çNwg…ú¦ˆÒF%”Yv)ʬˆHYI„Ì"iéúnḤñ]¿¿·ï×}>Ÿw?ï³Þç}ÞGyÝ=³ê¢b¨a²æV^A½?B—ž~¢¾+´6}5ƒTÂz^xŠÁ"éP%‰MÅ"Æ–—§éZßúü€]ҖɨLîøÊ›•vX[=Ê&ú'eÍõ—–¶@›K‡‘23GÍ÷Þ}ìr×ØLü +/£ßL#MÇÄÐQSdŸÖÊa(¿¡Û˜ùÞÌ7×ÎÃÊyÑkÿʺ¬ç>ÍñšÙ+=_ªÉ|ºçЃH@"TYÔî~—lØË“t_ÞÉ|\ç›T`ið‘‹±ñŒH“Nî×ûFEêÕ†QÍ…®†zÙIuÉ—÷˜v§û1 â.ȆÛÇ<Ðߘ°2¤Áér$‡¡£×‘Šý[1øœ®¤tíÓ<HýüªžUODÍ®=ÇtÎEÓ1#sÎÈEkw(ä¾ÎÍN3U*(’J®Ë±°uõÊÎý·»_žá·Å–!Ý-};ë>¼=(Wy®ÙímìcÔGCã‘@e~ß¡·÷4h»5Z/éËìÞn_»V˼?–/Rð®&È:Ò³m«½•›p¤ƒŒU¯‹±•›8c/$HXÌ;TÄy�RÆ¹Ú ^Úàp‰¿«Ò ŸSV"Õ±ìŠäÔÕœM_¬˜ðëΉ¬gXµóà óyC%Y‹uöº1·5Ko[\qü€«âæqñµh—íM{šÇÂÂ’Ê^û±â.â]»2?±k)®¹,YÊ%¾©ë1ïqgëUXOÙ‘/‡EÎ3o]S¾Xö‘ß¾¨åQ£GÏ)ñrŸöH;d5Ð Ä =ÓŽaÐñ¸Ï©²VK¡å†{·s9VÁF"6Fz”ôyÕÛ¶_õ¸/3äڳ嚟ª’ì`õÉî°ÕÞ#– P{!æ‹tŽ7yߥ`ãZ$?”^WË€^©«/e€¬áí´‰«Xµ¤LKûšsdþe»ã«$Áš�#çøy÷”5d—ë‡ô?Ǿ6† fÙ³H¹¬ÜˆŠ^¥dγwSÖªÞ3¡„Úx™—ŠÁô¹ß‹Þ–ù1cç²aè×Wk¾r)azKÂ+FZoj÷_=ùú0«t§×hÅY‰=gôÅË%´}Gõu½Fì}–dkùmïõ=móâOqî$ ‘è¼L)l’;Ž$½‰^ŸÊµ'mÓ¶£VµŠËó·í¬3Ö=Ó~õâGÅ s*CGßFŒFhÂ%õÃëkÄ”K˜äèÈÂùp®|¥ª!YûȈÝøÎQ%4Ü R—¸Ë¿WïÒöº«¢¡1lNFÐFW¬;¹ñr±ÚÐ "Å‹kÎV0±x„…íÉã4{ÂÔ°½Œ!²¸ìŠÉ½¦'×V%ûÑ'-rf:ï8{°‡ÝA#ú¾™Ûõ±fEt›,T¾™¤ïòuCiGI†Ý½Þ=Ê¡wFßñQNµúü0¥°@ÄÍ=¾ÂÖl´¯•áŸjú"°¹¥©Ô°2dnG/»ù•cè±ÐBu”yo6—n§VÀð?gXQ¿Þ#”åÕœÞq¢ËÊy?>‹Lað¸Óü,3˜ñPkd[~J_©Ã™¼'ã¸ï1šA:-ù4?g +sºPo]l„³ú8xKAWÚã%Ô~†FÛ/ÀàEx„:¶xœº¿hÈõz={S}ªê„þº¸±ˆäòâY¶ÁwJ‹7=ØX|=ö:såM–·âfüFÇ®<mëÝø�Í’±9¨_Éÿ¥áíî»Bâ¥áÛ'`®G=2[Ï—Í\ÿF~õˆ•¶¨Ysþàù³ïÃ>Àn…Ôáºê÷¨–ÛÊê>Fb0ÜÔ6¬>z^€¥{Wâ Îw6¤häÂÁ;¹¥u.Y^OŽó{>·Ø³.Iༀµ¿sUÙ|ñŠ¥>oí;ÏÀJ¿t0^QqK2Ìw2ºÅT·¢ÚQía¶-q_‘m/£Nú3•×‡òëmNz¦¼ñÊÓãÊVP–ƒÇó¶Y¥¹ž5£ßïÜP¯¯%?z}sê+#û;õ%º›1×/h1ë.©MSñÈ1_Ùg~rWýÙå<çCké® ?’ʶ¬ïQæçlÝZ— 7íEïé臷q´Ä³Á½D¥/¦>õ"rÑ’þükªrnÚÝë,y³Ó6¢cãìÝMùw×ÌoiÅŸð,\©Øû Òü¿±XÊʃ!^n™%uÌIùì>ú&ÇêÖ¥ÈkÑOqUÆ·#}q~|ž;Ñ&AÖÆ%Ά‘7Š$¯ÅVØ^µ²5½Ò0šWp-ý¹—Þy_ n ý,R» ÛËb6çS}ÖèÊÇÐ^ÇŒ[$ ãki|pôԛζç«îà?ÜeµÒ?‘ÎUÎ"ö>Ç_åkõUvÎóäðF óy÷ñ¸ÔËúö¦™{i~Ë=Æ?ïno£¹U]?ß- ©øëw–#>o6Y{¶/¿3T$¶èô±<UYûëéùI±wz{b™ßJÖúD#£Þ6tïO‘2öýP,·øÜwþ_Æ¢lø½{bs?¥x:pÖWaÈòˆ§ÍÃÅ1Ã|Ñ)†gÊYmbÓ•(˜O/½_qÅQ Yioñû˜¼§üøLvçåUñ/@Š¯Þ¹[qçCWÙó¦wz $D*¹ä×[dö5G?ëÈ9#g[1ôa¤ú¬yò½ªdÞ·å÷<›ä³>áÏeCVÕZ×!¾*/)´{Õ6ŸÎæW2×)4xËG˜Èî7¸XÐTThà-×ÒWvYnËõ;›?ÝI|%—´QqîRW;Wç“ó[BÔ…î®ËàY–]œ´ó°ÔN‰ò[A1E£NŠ×ïÝíW\¢~jµÏîÍò;j·Ç)¨hŠ0 /ñ·œx+;üæDØù{ÆmrøZîkE,–êÔ*ᙃ´Æ7 +î,ÖQxÓ ôe'.g‹ŽL’ †Iq,ÈMÅænÅž»¶¾¤z9«…TàÒ’§‚ù&¥RmAÅ‚ÜÁBsaÑ›7ŠMGŠ›‚T2õ!û%$ͤWÝî ;¯0ŠÏ-TŽ+¬k,Üȳ«ÍQþò’¢Q‰"üEož£Þ¸£‚µ»bîî:0ò`íý0µ¢?”nG]Ò=›Ä±ÓŽCãWлrúâŸîÊ? +Ù8¬ØÌ|j}ö!!¡“·£OØ0/Ï(õU¼±)$·C|áQ&ÒÃṀúJé’Š +î[J<hÔØ¥lñ�wHiô´Ò‡¶<.ÍÕcj?Zò…Õ_Óç¡ÁŠ3!>LŠ[ò%÷a‰úé7J)ÒȦ‹Å²¶Pç-©ÃÙ,™È¬ÀDÆKË/±–ß+ùlhݳÄëW„rª{D¥c3›5Ö/Ì»/ŠX�…%G¹Ä†Õ~¹'¹ÕŠéS8/þ@wÿòÍGîJêÏŽízÉ”´oai})T)d¬üÁ“ͪÕÒËjØTW1Çùo–8aw㣄ªÌ}&I¬øéñÆ‘ÛK¶%0.¼ìøæ›+c.•*d_»°(vyzô¥3Z¥Ë²û¡Ö‡´ì>Ô¿|Ëþºå¸w¼Œ³ìˆPÜC¹uÕGòò…GÄlrMRbËV +û ”V«òTÝèþÒÝÒÊc#•í^E>üãY¥ñf6¶XÑMëoݱ`Õ]è¦É¬]¯{ÃBwƒÝq]pÑ;±¬7t.Æfò”/:žåļ[*C¹Ts &¸òäUÍæ²>»ß÷²ÛZ¥‰\˦¥Û²ëÊÆÇ>ÂÅUôzõ<Z1¤˜6¿«I¿}M)g§¤šDËU&ueØt“OlÅ¿ËYÎïrû3†ãvŽS‡Dwèëng,ú|‹ëËm?~ÇþRu}…—–\ŒÓeà‹T;SÑ_[³ªVm˜'nchµ›måƒë»ù/j¶^Þ=œxÏlAùe…]–ûµ"¬š, +Ú™«¸|v)ÊÔÒGTz¤*3\®ëhäV·M¦æOŸ:ÓxÃú;Ù~â)âÒ©[d'Ûî“$¿¢¾-WqÏ—¢PV–uu»}ï+¹m6ÐÚúY˘i´€a•N]½Kg=JF†q ÐÞ¾ï]û8ÄÈkúœ9…M¹Þš·ÞCËÈÓÁ3¾Á+4)²–a/KC´Å%¬ršÓ¢§Ç8ÕWž]ÏZ¸¥¿¶ª©Sgàîd‚.æÖõ>ðêQù“æ7 uªÆnuÛÛ°Á÷)Ú¬4M¬_ñ‡©¼LÞ™ÔwxãYdchä +ŸE;ÝãÃ3/ú×+ÚÈ·67}×xé™´ß—3lJ&}^&«-;Ä›ù›°X4%,j8j¦¯<°6¢¸)¥®)µ³)í]Sz±é¡GO¤d�ïëÂóÎn{q3á|G“tÂækÒ¬üžÈ +ÝÔ¨Q OÜüä²ÆßO@{ñ6»ðürñ‘ùéQ§÷8©âÇüj-hy“o5Ÿ]öØ’›éœ;9,ÍOÇ/¿Ðiâ—av™ýYÍñW“\tòËoÛ=‹/ªZóL7ÕV¡.µªþ8'b=Ôêev¶¦ß騢ÖøæÚ§n¼m.¢‡ŠŸ5ÆWÙš¯ +Zi’t¼°ZäYo¦Õ“OGƆo„äÅ…•uÕÆ…§ˆG´È&³§çvZõ¾¼l}ô†w³x?“<:Ïå®cŒÅ-ö›Jr)bÚ«ò´˜ãmYØ>º»¸H˜NsEÕÊg&}}¡mKE-kYÊ!Bl + þQ%)–M©©±Øª•¢[î±dÓW?終Îo}ƹº>ænÊŽü£íì~Î ÚhÖóîEK¬Õ² íÛ6˜/Äkû9«‰¦>^¡ðü~…Œ]ó*dûáZ¦†e£"úE7Ê[´3¿Ül]¸6$×fç±ö7µE§ûo¼ùîËóÏé‚0m‹+ò–p´K•t˜2ŸˆsVqdDëï)î|±qS}9ý äÆ¢¶Üõ£*ÉÍìvX‰\+¶,.÷„¼Šê~Æu,ç·jV9í°s²SqQ\õ*²É9ÿ)PÑa”fõõTƒehÃ9.S:[o—àOñp½¦Î•Ò-VÚÇ$:p6¢]áͶ^ûšXÌà»Ã›®_4³¿½Ýªºfˆ‡™ÛvÚvÙG‰ðXà£:]÷Ò9`èº0ûy`[ìcnv ÜŒ³ö؇u{%tïë‚•iv¾Ê¯wÙß½¿Þ¶´Ou,åà‰Î²k7>ÄÚÛzêØV àý\립F<nVÝ£H‡õ¯–žè¶GÙ×/@ä`,³Ö!^º:FH"üUñ/Ôãퟩ?͵÷M@Dµw/AÄŽu=„š†Ô]ݽÛæ¦xrú¬¥#vÿ±Ã[V)Hé`s: 1Š=¡·aű‚WŽ_EÔ÷^pÔ4¸‘[rsýƒtæ,Ñ&;ç͹¶ÈóKéUs$>¼Ý“½aI¶»cö–%¹KòÒúÝu&øåöåU8ò!ñ…]ÎôuŪ9°<Æô€´Ã÷Tb‡;‘Ý•¹=©£ý Šñ¦Ï÷uX·Kï ]Ÿý¾é1§¬Ä“U¦#¼íÂѹìtñi.鮎-ƒËZ]®µ¹$ðõ7ã—ÅŸè»}m UÕVàüÒˆ®…Jt~¥vóÉÉÃ.O´£^U½Ê¾Ö›p¡ß?´á¨OòMz;dǽ#°òNÈj{Iz|‚·Pˆ¢Á¾Â +tN+z,«ï¬UO¾¿êM§,²`Ë›yïu×V´eº¿4÷‰-¥»e?ò¤ùâöŽ×+§DŠÚà÷Ù¨ëwô‡¿ÊÒbè¶=¹PG^¿4×Ü/Ýûr~yBÖ�SÃ�³ÇযÇîl@½¨Øôµïšø 3ÿ1ày‘K£È†úOð-lw«’¨7C]®©ƒN"aOóY›Ù·½Xû8fyXÃò>)ˆë×ôí·x£ž1{lÝ‘KØ»i]ôùU‚—t‹yúêó•tí<�ÝqÐYªg²Ý"[+ûH\3¿U:" ¥Ê©“Œ´È÷åã<.üÉfOþLÞ~TÞ%[tùn~dÇ Tª[ôÁ·¼€Aÿ`N<ªg¬Tc!4Ps'’ÿ~±Øà‰á{ç1Û+øqÇ{=Âí/8^Ôsõ Ìt•Þï¡4j÷º;·óòà`ô÷Wø×{9ßcÄÞcw½Ç¿Ç~uÇ¡Þ˳°Ùvf®e=~ÔÜ×Ùàîa5ŠxÿþÀbOíE#áVa˜ºÍ)tž·U²W¿ñõð<¸ï½«‡GÐIϤ(Ïc:I6•IìÇùù|8ÕÐád¯pÞ +vvõ‡ã.õ83^ÒK]b¨ä‰_¾T·¶òófUþû†cêgª<NqXnS«}·“m½à¾ÊÔÇ>Å{ì;ê±ý8gÒ¾5,ì5èKëéw^îþôI£Ë>qpèÕ‹bÞW‹VXsǺC:½îÊžc‡½Ï›|¸ôú“”ìÈ•ê‹‚¯¶ïÑÙzãM~þ.zßÕž÷åÆî;ø”˜½©ß y,wòÁ§²†}??ºS^©Ë'÷zù–·«d>Wsú>Js÷{Ïzþ¤÷<ø—”¼=Ô¯Þ¬LÜlòø–ïËuÁ\øÛ]ÂÎcW¾ú/ÆË&~}teÖVÞâ-諾kå:åèò¾ô|å8»µu ^¥•÷Ë@7~ˆÙóç¦C•ù¹hÏ^þ‘|kµ–Ç#ŒÖ¾ëñïWã?pâ_xðtðsû¤×50‰ô8wÏûϬ®À=?ºÕÍ«®ÛŠVmU^ÒöüÆÑ üF÷ìî:±Y +58û ˜YÑF3Ã^Æg]Ìåx.Šn”ˆå¬Œ’Åãÿ�†ˆ®¦2áô‰»Ô/ò_æÖû$I;]=3œa‡ašY.jårwdU }eŒV²;osÖbÎuÞ ý¦-Ùn=‹Å^?+ðù:¸2Åãšõ=ÿ¥TâC/J‚·òŸHñÌ°-åV,AJ¼í¬ˆC¯JõºéP¯vh¿QVÛ}ã4뢼ޢMY莊To1tsò³ù«ù|ć2×€è¤ùH¼íª¸¤x’/ÿã냩ù6ŒŸÝ¼G¯·dz|”‘þ_w,V'}~SP‚þ¥«à?º:Pþ@ç«ì×±/ï?3.è5lº) —CŸ^>´Za#³_ÿn“hÿ>±È�fÌS|ô‘~cpK–¹Eq&BŽîÈx +QtõM8ý't*ã<,âæ¦ãtËClºBYçá;Ÿžø:TÚpRm´ôå]?ºy¡ZËìíBð§ãÏYûmJ8o{Æ4á‚CÌ…„pç„ž˜‹èœ/T¬Øô4¬ºìºU9òã®rŒ;{iÇJ&GuÿážmQ<Ûš`±GŒ×Y_hšÎ&œÛ|PË4îJŒe™õU7–¥5ðØúÛññ|¬£óÕ7žöÎüdœjÒÊèËIhêK=}ÔÙZ±=Þ'Ä)<%£ÊÌ©ì6ØXã‘ô²úfÓ\7¬¶îVó~s‡ÛÛü¥Rãö9á5ø.ï÷vÉ©¢s¸uÆæoÎÀ™…iª¯ö \þÊ×›žÓ6ßéjvÍ:M¾ÜŽ¦‹®yAÛ[^ç°@šSŠm#®ïý:"²#Ùó‹dÊѦwq©¬ëm3 éûy0¶Å‰I|É)Œå|ÍÞ¦‰¯7Ç„ u÷â=ÐÄ}bgºæ*Á ɧŠOŸì∫»È$\V³ŒEä”õkh¥y¹æŽRsoË¬ëŸ S®7£‹²"ÖÈiŠÅyts½·²a¥}Ìr¡ˆ[ϸ³ã½‘(s—»ë›-=_ÐyäòæU×?ëÐØï™yqWšØ3¯õiù£4϶˜‹/?<å”M<º·hKnÿC<FÝéÁ¡H“«ðN샚ÆÏnTg[Ž5ª{$}°; Žky;x®·ÚY&åíãth½p«ºÃPZªJjßë‘·Ï5ÐØOâ—äÆBwµ.ùZi€>éžþ:S&ÿùmzkËç +Ôù¾Í]ê üøþ<+¼4:r·ÄòÄÁå+Ú^m»G'«ûçB;ÆnžÒ:MWFM`÷bÉuaº‡kã?u2Vñ,>÷H4ë„)ÂW?™11øð•›AÚ2ô1©N¯ +€3:>Âc/’|äñxõŒž1ûüçFé×W › +×®õïÎyRZÖ¨ºƒõ“k°‰d0e±ô)ØÚà½JxHzi·wÔЉw1—’úŸnœ=姩…·+Ígž4`cuæZûeï©3qýN»¶¾IÕ2y/´¡V´ñ¦}Mà¥ÍñœˆK{ꞎcÛaîuý«4,#‚×QžRšÓÒo^]¯w¶p‡ š„¦í†õçK-8š”;(èë_KYšñ$§L¢wï±\5A¡ˆväiöw±Å0¼®wßxiJØ#ÛíBQo"º¥úÊ4ÇžÕúÔÂ)÷¹§ò@""'‚C+éÂf&z‰“Ñb̽UG>VúzžKy‡Sõ1áX¦g\»¤z«Oú Çm~¿ó]·†”÷ˆ÷Ísøuʉ¼Ð‡‚HÑæô§eï…÷ ¶tÙåýpýÕ‘¼+ºÇÔkËUG˜Õ-·ë_ì½¢ ’¤¹Ý0Ù©.ÙÆ0‰Á~IùÞúvúÖÍ&õ+ÃüæYp)5÷Öp„2=¯*{©nœ[ï–æ•Ÿl5ÔÛP0?,ÝïÙØWI“¢ ¢×‚dRlÖö=-uO¶ð·”èk¨a–E3Ém/ï2~p1gÄÛÚŒó½]]fÊJ‘«»yõûÌbñ쉦‘¼.ÎÎÍÍíY‰g"yZðW +¯[éüܾç溇;] ËR8îw™_ìk9Âz½Æ’Çm«”eŸcFCÊýVß³üÁ°[˜ŽóRøÔ@ÑWÇ_{JAjj9EÏ‹èí1GW·z6^8¾6+Ýr`¿yòó¯îK_Ky.G¶-°Ék|½šCЗee½Èb·*y° 1—ç_ê{±ZšÖRÌ´Ùþ:lc1ç ß±Äè¶Ew†· +¿äÿó‹Fs³øƒ/Ïö¿Èf¾ð@‘º6Ô%(¼©ÔÔW0øb§ùE‰‡zQÃZ1Íí%~=i +£}aÆHãmÉ&9{¶ÍËCÚ¿†f—•K&žðî·ßüvcu#1ÖÑÄ´©Žr:s½É¡¹×´ì¦Öð³ÊºÛY%«žÈ,Š0Þá›ý¨iöÔ¸~åœü:k üG~·¦šÚ§ÐD^c}ã&õ£;¢—G&b*wùÐ3GnZðüMÝ>Äð·Ž—œfÎö‘Áد-^Ê›%Ô½ñ®Ÿ]öµWã0÷›É©Hg1ææl—ÌdïýAŽ{·Ø½:².¼tÙvœ›8¬÷4%Ï.ºßýV¨¾¦‰aCfíG¾·W?²$øò‡=Â~³¼'쪶ܧf‰õ‡{¼©oøÒ÷¥µºÇ?Myb‘+æ9êÌZÒY^`’{+R>|+g¯3wô°0÷.^xÀñŒÚÞY^%¢™G‚‘ŽÖRÝâ•YÎØ‹_½ÊÚâ<+÷Áãµ +™,ØrtLÒ¼\Ä݆n,XÓ‹O»Úà¼çBD wʻŊâýÃLƒ=wÞ¥¤WõÌ×l¼³?ýÊ-Kæ0ï¶ùtï—߉«6^å–À°ÿÍÏùmò§|þâø'³ì¿uÞ,/½�í‘âÕ‘Ÿ9\Ž81›?D?î{Ã諼ÂqÚA9Æ«ºó¢Ç•Gêé7|Çj±_^Ÿ*éÝ/8¢x¶çÝŸG>?ôz4±Û³ÇÍØúi3¾cÇsGp"òʾ.¡#½±•‡¬?7Ê¥ãߦž4hñ\¥ÏL'&çÚ‘ +vºTŽÆlqú&µÁͲ€«–oFÔ×/óã¤bï¹÷µhëíèUK"}NÕøÌpùÙR�«úÏWu·±9ûyA•R~dc+ìr>¢mêò˃ÖRKÕü˼,|dІûl¡g_›j¸»ú¥ÕÀãð’Œïž®qê+]=d¡³¢p-ât[Ãͨ}‘XnNc¸ÄzŽ©¸µ/4˜%´a(hãÚKo`•Ë£v÷ÃUÞ.5cÜ÷‚±·¾ê`[³´éBÁs˜MÚcnUç·}\Ô6&|)~1ïôš½k?”/ïÛ:ÊÒ=V¶ÔeV×ýC°m«ÑÆÎ%çü·eÿáÿ'X¬óR&†Í}Ì·mc¸*ü™ÿÊ.í¡žMt6ñ–õ²Ã6×ÕrÖ?äª7Xg_ÍÏXxæìáÝ<—YQøÁíL›G1Yµ�ËPÔ–ÓÕÌ©[é5ßµ¯‘ÙV¾$öÌýv?›¬W™1ýð ÚòA›`tŒ~0±}±-!f¥ÑÅæÛ/ãn›çòš]JyaÞ¸-Ð`Wig«±eoêò×,>PytùüórY›˜ZD¦ÖJ^°€Õ3Ø ,S°SÚ`"ÛËü\ÒÆNʼnMì´ª2Ó‘]£aÁ"v +Lljî-jávê¢vçæhä¼Ô(Œ“=ȶÉ*Ne'¯¼8ç^3æÕKl둱—<j!ªká»™:wCàzVôÊl{ß°ž_6l£�eSØNwí—×ÕÛÈ0Ä*<Ä׈kž¸3é%BÕàðÕN³¸ù0¾h¼ë)V‘wJ±;-³S™¥ÂXcyXXéÚåß±ëä±Zfuh/Œç‰‡{/ö貑LðÜ™`£bo»e‘E »ë]¦õÕ›}Õ¶”Ù¼®*sl4ëªÊ£kåG!Qk^"ö·CíY…“Ú»Ú´M7”qhŠìvŒ‚¬Îox«ö¢?{¹Õeåš±{åGú'&'÷uÈÂÓ¯¥YMôÌr:ÝlÜáVöæ!Ûæ5½�ö²Ð.8|Pic©€é$uKdUx%Õ틪ûô"zÏ õRHŽÃ>û5,|çöÅèbâ:mÕíê%\÷ê ~»£_Ò|÷îžJþöð~ekÖj,WQ)×ÔzóŒq`ÑŽšêþDã÷{Z>Å”r®ïs³>|‚9ñìMdýi+L–£P�{—`ìDë†FMÑ^&ÿ£2¦WÜ™zNC‘â¯%”~ØQü²¿w¥×þ5>ÃÑ!6‰>1÷|ºb³ô怰jŸ<Çw™õú‹~U!gB!ƒ/b73»-yjåŠlâökíñëBópŸòç(°y—⸦éÜå(ý’µ•GZíM£{z¬ÖÛD¯)9wÙ¨:U—Þ~slø–ÁD®u뢖½ö2k¯ª¼âh{]u4#f5TÿtS@èÎ>eþ<óÑÄK*y,Ÿ]Üò0m´¼Ö%1;þEøºË5ñˆkLÉwæ9§K>Š´ÓFlnZëü™åÔ͘é(ÄaÓM^Ú7Ú¯d¨¬¸-š|ˆ¡VqÿÏ-ÅçóüBÛw"1ÊyÛ•SúôæíÔ¿»]ïvr¦8µ½WQš]ýh§*RmÏ=Ha—rA@JÝý¬øû²ç¤‘©*Kî;ñ”$±ß¥C*>‚‹E÷iA–¨Ú¨(ßaZtžÍ?4Yå\PÒw®vÇãáäs¯’óûŒªRŠRV SÝýϵ¤g¤ä…Ù¸¿ÿâ]¦¢¨øB…'ê.…Ú©¶âÈûä#›z'¼Ë#&—zwÞâ�Þ’£¼ÈÚÞ†‡)I¼OU 9M¨+5|©Ç§”5 <kwѹš¬ù¸µÿy Ožgž€rUÏãU|yÃ}9MÉ ƒýçV”w¥<§K»³ÁÿA…‹ÂŠ”kç;Kv”ß[vàÙ–2‰î°ÁžúÒºœ§Þ–ðÔâT¿ä ËŸ©}(dcÀÒ†‡¨C{P]ÊZõñö=É[doµ½Mݹu;zQ·ÑUä#u¾uôs«â³ô +›×úU;¸ûS +´ý_$Žº§ÍKÒæTàüúŸs`œàÞNþ«w¬OXçÛ³äšRjOzlKiD‚K}NZÇÞyE|õø åVý} .È–´ûa©óûW¹¶¤¥Ç¿Ú^ì\˜RÁ™NÃ6›¯baKvÅÒÚ ä,º˜ì’KN’Osk_º†>殩¹©‡ÞLï”}_/ ½hùá%t=ƒ‹zßXö^ñãú²&6É)É¥dÉ:¹$D»ñgú^z'ÇS¯NCxÌÅÕÁ”^ºâ—CÒ‹JV/ò8Á2¿ÌÚwøø–UÉÌøÞ/.;¬u·mÝ\x½S©Ròfëç·f¨Õ«‡£˜ «wq0\ã``µf=²}Mƹ#áÆé_ö¬Qxt’“éVXó†S°ÕÚÐÀ¼‘ce#ãÅ¡í7†Q\Ãï?%í½ãÐ{™å^Ô>dý×þâl–“<@Ñ›Ö P3VUhåŒ×¦ÇJ®h;켺Ž)öª,Vd‡5cêZ®Á£ö91k{!Ü!(½hø…Þµè!îä·ÝI˜¹o¥4[æùo6Xœ>ÔÄ)¹ì,zýÃuÃr[1ПÕüØ.ûQ&;nÕnGwCI^Ä() +sg +I›ãv0Ž´ÔóÊaq»8™Œ¹¹ó؈±ÝH *M)vX)§‘.¤á}ý«Õˆ¦ùˆÚ~oœvßöãÛŸqjDÔÐþZ‹‘OrnªßÙ]$¬Ç‰T~2¢ÏŒ§[8ožÔ¼4áá.p,?Åñ¹:ºþ%} +ˆŠ +ó��£þ%&(Tü" &,*&��A(T@t ð—ŒfJrÃâ`�˜g‡AÏ8ûïåÿG“´¸êË�6GÊ —A»ÂQv' /8¹¥–Ž$àb³'üÈ�8ÌŽP„\…›ð^."žkwà‚˜óYBxˆ¥Á<6bCôød�©Øªï2À‰ÆÂ'7%µLNöŸÈÿ³D¦msæÿkú�„ÄÄD¾Mÿ� �~€TX@¤AQQ¡y€È_3êôÿœþ©×ŸøöÛåÀÌü_P*%®¿¨0XŽ°þB¢P9þÿw$ÿg³q°E#ÑA¿CÐÊòhÊW(á«GMú(DøˆÛŸ–Ù»¡lq4 + âe÷äb9;áØ({4ƆÂÏv0‡pƒX7'¸-á#ÌbñÑíâGá°„G°¨ãE¨w…ap„ð‰@9“dŽmCãƒç„N< +ã&:GMxä‚ y�ÀŽ0xGI„$‡L 7±e‹t³–-epàß ²�äd ¥ ä4•=%e=ˆ�PTÖÔÔ•WRRÓÞ%†�ÆjJª2Ø!Ä*`=@a—¢Ž¦XCZ€Û:¢'¦ ¶‘•6PÀúºòÚ2(ø®¢£m�|£”\GAv<‡ZB†4?øŸPü1P"üÑ›Å@È‚%•ÈO€´ù”÷ J0¾´d%€”\1€F¯f¦,cá´€Èꢱ8¸`ãH˪zÊ*`ÌÖí†"*ŸrhW7,Ch•Ã sËLô�VŸx‘æ——@|_.q®r¤QM 7iVi=Y{Ú…€ “Ñ �q|”Ê”qO¸òšj»´Á‘Ú‚àÊ¢Z@ÄÀAṀal‰¡à®Ì8†Oy&Œž„F„äKy€#±ð#…Fy¹ Ý°ÿkУà?ùf‰¹BS0—Šhc1…éP!1Tº²ãìIš_W|ŸLŒqʧ¤LäxœX�…ÆÁËI¼’�Ò&’dÈO0EÂ�f7$pPF=Qž’ÿ«†N0)2@0G„šeQ*Ø5‘Mf>àsÊ0qa=–.ó*F@¤DØ"á?"H¨äm©Bn|ÂÀ]‘^ÿ´ ùËåÈœìø'dÇ»ÿ…üwbõªå§'7-N;™ÏMaÑã¥ÿ-|˜4[¡šéUáßÎsÇéBâg¤å™×Ngµ®¸;îñ×°Úc±s¬rŽUαÊ9Vù°J” ÖUꇙ£ Ú“k㹎ˆBÞÀoakì¢âkp3EÅÙ, Bä/ Š8ñ…²û"°;p1&7I�í-vÔ¸@K D¦G�MFG³×é@‰Û>ühWž¼àwße üÓ²ÿíDËþk‹„a±¿±™í¿P1AA¡IöA�œ³ÿþ äx„ƒ8pÁÂâ“ä.+++@$Y�Ǭ‚’„î œ¨Å^p$íŠI�àçl`¶ÎPdØ‘ªŽW±ŸT…lE&ÕÀÁl ÐAÛyM©áˆœ¨Á*OL”:Ž /çE:¹áB§ —hÁfU&&’„™<2R®(˜$$&å’G1%—FBÓúš±?¡ÉÀ›Úu&¹70Ÿ�}/æÉGJ’€#fÇp±á8âñ)±Œk‹A¸$¡˜ghÀó ª;®08¹>¡Þx!ê6Ézظ4V5ÐÒV–ŸÐYÔŒ[Ž¶ £hÌ÷ƒêy—B¬Bi@KÙ@Ж×R–ØMÌ€`UÒ6PÖ6�¿‚ȇÆ8@hUq†{y 1vØ)åy�¸ íÀ¸¢18’ h&n(΋@Á=À}ʸE†BØk'ï_° Rƒ€“¼ˆ]Ý@ù ~°EÀÁràƒ+Œðãèå +þµuC‚úîLhcÇØ£Ñ< Y`ÆU<þI“Ö70>¬+ÁÁ=qü¶X,D–¢ùIoã奨M +:J¦<J<º<†š<šj<JjF<*:zZ<ÊZ< +š:Š» u”A…Ä”¼XÄ>¸$ î +îKˆïö0ÒKpÇCÁxáHwP9¶…ñÀ0Rj\åå'ql”7B÷€² RVbšÐ ¬*Ä!(Úà»"1A�ò«01A�#ò»(1M,áÌÛ9(µÊ3É„KT3Æ·Tv^!PaQÓÚèë)Ê@øÉÎnˆáâ=–D 4ŸÂž0îI¨¾Cd'tN*µ“Üë†O!ŠEÜ¥í d}‘uD»À‰;*Ÿq-ÂoÛKа!²àÃ´Ì :D–ô<½ˆ›G.B|&¢õ´r“´yˆ,A—È_¦• Æ ÃØ‘ŠRÞÅ(zŸªÞÔM.õ0"ÇvØ”C&Vpò6Lv6 Ã@*&ÉdJIf«„Àº"a^�ÌÎ@‚¶uÆJN®KÊ—'dsAöåˆÀR54¹ÜŽUN€À‘&7EnIX�†ÄŽ7D) 71&aÉ7f,,L™1i²¾ßcé”ø6{ŽCW$ñ+P¬zò€Œ†XÃ'µ4%…àXÊœÁ4iϸÀ@(µdm;aà *S.®¿åpL-~ÏØ>^p|Å¿yrK½„?aM"#; (Sxeæ(—ªæÏZšf90*›u¿E“3XŸ€¿Õ�5¾ÀÿàѦœnRï¥YÅ…$$Ää©O=É}ËWtÂFL2„Óma³ûsØ¿z¿z0L ¹I(?“°þ1M!†oS“Å·glLÍ+þvK0§ãØ7Ž§"Ïn%fÏ•~åPyš5t°ÌFè’Ïšg-sA‰IPGˆ›$\0r�—çˆvÃD‹¦ÐÇ>�PÃ+îAÒ^h7pó€_à(â‹=š°éÙž´3žÖÒ4¸Iüßžè˜Ëë‚ÆÀx°ßæ3¯Ó–å?{¾üš,ŸQ˜O àO +ó’å±üþ ñýÿ]zÿw%ç? Û¨0˜Š*³>gf}Ôô‹¹:sš%ðAœÍ⼞¦f%ÆÈ@˜AŒ9!ÀgÊv‰F4“„”Ôò‚Ò6›+V0Tr‡°#û €?n±³ÁA±CøÅÚ‚‰( `X4jBV÷z„ÊŽÁE°zBÆYm†¿l|A‰7M\sï>^ Â}Ò°7NHO`ƒ´,5cUòDuɄј£Ð�ùÕ’‚!dô! ø°#º‘ò 6Ep: j“çI6§JRÕÿîYŸð´³>è7ÎúÆ¥ÂÊ©”^œÈ¦~¾?4ZC›>² xè“`(9¥'¢ÁhZÿ$ œ²• Ò̤‰‹°O?¦œÆa@¹Kérš¬ÛžØ•Ð€!i +ßícâ4”ܸÂÔ–H‡Í�•¨!¬`®O I2e@&a&‹…ƒôE¢n +¯š¤^Y»Àq0kR>Öœ\p +nZN.“!ËOZñ‰¥ÑBƒ¨ #÷´Õ¡¹z:ÆD]œtôlDÉvAØÙ!á“Tä›°ÕWÖTV4 ÐaB’D48¡†Ž®šŽ6¡7ÃqyM8ȽI¹²(JuP÷ h= H:- âh{.Ú`ä&Ú±c’rDÕÿÔÞÙ¤3lš‚°¤1_@à'Aa¦EšJ,ä“ò‰µ“w÷˜_¡ªñõá]ÁY‘¤ +ñПÄJ è LÆT +‹Ý6™ÇNádS+ÜÔ�²NH”$ ߇[\‰Ú"ñjà¬Rçd36!‡ÚR@!QþpOj~’Ä;0‡–$•"ª„‡éÍe…#ç*ÉÏŠ +P¸q³UB.Wy½]Êà»5 +îAhüLÝô„Î8?˜“ŸJÇÓÑhÖ˜¢ +-4¡²„²(�áHËf@Qƒ¹ˆRžàƒP9pL•"dfšÈ¡1äéãÕ%jÉÄcapWK¦5ÉIØGþÄ=IòMõ8¡V„'Ñ,aOôIVE¸À^`(/îÉ}’²fÝ%ÑÕ…TgÆmÐ8¸k ¨B\XnjjþÆÍا9Ù6b9Å¿† +Þ“Öæ»*%Å5ô'TJrU�F>‘€¡ìƳa8š& ;„½=Hs `(,aý *ÂÉÁ‚!I²ŽÀ�w–°À‚ +š‹ ‡¥Ùéx—T6 €¸/ÅGr‘ÉE\áhW$íS[G¸3q àÈg Ó!¾{Çb óÞëwõ\8ΖZmžÙµöWÍ,ßQ˜‰Ysö‘9û%ÍÙGæì#¿d¡}úý»Œ#´<tišCH¢øŽì"zîݘ¾¸ >ñçé„ÊüDWj~>£700##þ<}söŠmSÛ¤‰œöT[ëïûÓÓŒZm‡`à[>ÁÀ,”{4H<®Ÿpˆ#Õ¤^rJkS\áfé�"(òM—Šó¸®ª®5¸#T‘€Iþ*Âyø×x �B¼]OôÍáž"±(Í• Õ~‰v@Ñx²ÿ̸ ‰ÅL8½|«w4Žà=ãŠF"iµ£~§á‚CÝiG´ŽöƒXZè íT)ùÓüp¦`~\“ýž¦ŒÊ³ˆTŽàÐI˜Íñ¡£O.òÓC"qÖ׋°“¾ 9 #Ècâ9‘ê‘ +hòIÃä!¶9Ãj€ªðÌ«¡ ÷˜ýj|пŸY‰"*ò$S'‰3R{íM(Ôî{æÀÿ’` yöw@Gá¹$qËOð�%{¦JóOx�Ëa!Ï]Ôøo&êûdðß�è;ñß PQAJü1aAQBü1¨ðÜý¿#QúÇùÉ‘ÿøÿKüãÎû39î{íÿ.ûDý _ý™ýô]AU`²“¾ŠÊ$'}j'} â¬Æ?Ÿ"w¿í•ÿC^ø¹4ç{Oô½'ÍOÐÖÑW•WR¦¶’MýÌøãZ~÷ßó¹ŸîoO»î7üì§9Ù“5<¹ÇNr¥ÿ§æÿX¢–ÿäíïß,ÿÀ’ü„ +‰ãÿ‰‰ÍÅÿû[Òä=À÷M¦1Ír1É7gÖ6ÚöŠ™mSìÜ´ëѲNL¶L|£mƒ-ceGJ9•ýqûìlß°;ü@ïß05L63ÐmMëµYáû[}ZÛ|3¢ ªŸmRŽíašFAAüïþ¦€iÜ@6,£Ø�þiÞ5—~=‘å¿a§ô…ž}ügQ1BüwA¨è\üç¿#Qÿ_þã;úŸ°têúƒ›×9ýïïH¿ÿƒUYžð° +þýXJð à—C€Lò1äoB:Ï‹ò·Å�˜fQÔt³EØÁxŒÈ†EÕqâü¿>ˆø[£À±@(Žê öNÙÄ + Pù—P§ºc:-tI6þ†À!T}ÎpËõߊ9{0ѲGˆÌÅÔø—ÅÔ ýµ‡ÍKD³õp¢Ð +Éa~œ^-h,‘BA‚µ Q¬„p ‡r;gª?ÓŽL×%H>Û郙äèDæŽ4|¬¾3^W„'IðxUðYUYm—ªvã3™Ù÷jê7ª;_ßô~¥òŸ˜"áØ÷?í +KÞïˆUAû*ÌÏF®ø‘ SïuPY¼~j~Ø3÷¨>ù®É8QÌä¥HÍW¦ú¢Î–¾¦4CEmÄpN‰BUzÂ{x¢ôLîÃпÙ}øoõôZD¹ö]¯Ñ©Ÿ w®fïH:äßd¦[âÿˆ*2§NÌ©ÿ +)8§NÌ©ÿ5u‚ú"ÒäM¿‰ô·«SsŠ*B”i±.2Üå/îBY–ŸŽîò:‡Àì¤=-E‚Fµ™%õøÇYD{™~Ƶ±é Ófg�‰£Íp!fYú“Ãœa¤À8Ð&Ÿ:”Í´ó6“CÖLHÄš£ÅfJÁoF²¡®ÍɆÒÚoeCnjÖ±lÈå§Á˜ +ˆï´™ÅJü\P›i þ~`›©U€ ¸Í´1ü¶�7Ó�25ÈÍ7)Íìæ—èn.èÍ?ôf²ÖóƒQo~uØ3�g:êüö 8Ô’‹¶æ7ã,~% Î L-mÉdz¿1µdŸù®·à¯DÄ¡1¯ÙFÅœ9*Î$eè[k5ë=Æzþ,uü¹h;ÿáh;s†Ç9ÃãœáqÎð8gxœ3<þ–eùýgž¤ï¿;"Ù±s¶!áh§Š GqýÉ p3´O©ò?î8ßľøGÂÂýCÿ©¸p´åÃÑâ‡3G†›Oü„†›™1?n&N0î¯?;ø}ç"¿pNðo‹Z|×x2sÀ:àßaK˜‚7o.Þ\¼¹ xsAð¾¾uÿwÿoìƒêþ/”ê Þÿ¿ÿ+,J¼ÿ+" ô·ßÿ!0C¹ïåÿGÓÜýß¹û¿s÷çîÿÎÝÿ»ÿ;wÿwîþïÜýß¹só¹só¹sóÿ* çÎÍçîÿÎî,|VŠÃÜýß¹û¿snxsêÄL +ΩsêÄMøW»áý{çÔT×&ð{Ó)„H�¥ˆzÑ„RjPº¨tj¤£¨4i¢‚"Qšø +¨`AEEPTAEÜøºßîÌηï~;ûλ-ÏwæfÎ{îó;ç<“ß9|ÿ—ïÿòý_¾ÿË÷ùþïßÕ|ÿ÷ß¼¾ÿË÷ùþ/ßÿåû¿|ÿ—ïÿòüÂãÿƒz¿ðÈ/<òR·ðý_¾ÿË÷ùþ/ßÿåû¿|ÿ—ïÿþçj |ÿ—ïÿþþïß^Ø®}ûvùýûÊwƒùnðï÷ñÝ`âÿ!7øï•îþì6þáóŸµuy¡G$jjéëéòÏþ+âK·R|þóÏ+Ý¿õ?YŸLþéëiêñÏþ+ÂÂÊœbà À€¿iUÄÖ‡·Jùùu¢…•- -Ã@AÞ-ê?ñó^�±ÃÿægçÇ=þH™û³Úøò_SW[ÿ_øOÖÔüµÿƒ.?ÿÿŠø•ÿ�XúýA…Ba0G H$…B + + + £ÑhQQQƒÅbÅÄÄÄÅÅ%$$$%%q8œ””—–––‘‘Y³f @•••“““——çu6‰DRPPàÍw•””Ö®]»nÝ:eeeUUU55µõë׫««oØ°·‚ÕÐÐ “yŸƒ¦–––¶¶¶ŽŽÎÏÉžž¾¾>…B100Ø´i“¡¡áæÍ›ŒŒ¶lÙ²uëV*•J£ÑŒMLLLMMÍÌÌxKvKKK+++kkëmÛ¶ÙØØØÚÚÚÙÙÙÛÛÓétGGG'''ƒáìììâââêêº}ûv777wwwOOO///ooï;v0™LŸ;wîÚµË×××ÏÏÏßß? 000(((88x÷îÝ!!!{öìÙ»wï¾}ûBCCÃÂÂÂÃÃ#"""##£¢¢¢££cbbbcc÷ïßwàÀƒÆÇÇ'$$:tˆÅb±ÙìÄÄĤ¤¤äää”””ÔÔÔ´´4‡søðáôôôŒŒŒ#GŽdff=z4+++;;ûرc999¹¹¹yyyùùù………EEEÅÅÅÇ?qâDIIÉÉ“'O:uúôéÒÒÒ²²²òòòŠŠŠÊÊÊ3gÎœ={¶ªªªººúܹs555µµµuuuçÏŸ¯¯¯ohhhllljjjnn¾páBKKËÅ‹/]ºtùòåÖÖÖ¶¶¶+W®\½zµ½½ýÚµkׯ_çr¹7nÜèêêºyóæ[·º»»{zzz{{ûúúúûûoß¾=00pçÎß~ûíîÝ»ƒƒƒCCCÃÃÃ÷îÝ»ÿþƒFFFFGG>|øèÑ£Ç?yòdllìéӧϞ={þüùøøø‹/^¾|ùêÕ«‰‰‰×¯_ONNNMM½yóæíÛ·ÓÓÓïÞ½{ÿþý‡fff>~ü8;;;77÷éÓ§ùùù………ÏŸ?/...--}ùòeyyùëׯ߾}[YYùþýûêê*oäû}|û™�Êø!@°%Ö'"°‚uå³ò@Jð…†*ÝIÛ" Î’Š†Ê¹’²`Ý—�5_3§�EÜÂÀTc‡> +«¤JKû¡„QÿFÈ?ÚãàÏjãù¯©«¯«û¯ó_ûÿèðçIüâÿ9Ð÷ŸùÏC=ê<€ó@Íc2¿<ÒòˆÊƒ'“<$òÐÇ£h<vñÅÃ<<Èð`Âã<𲞗à¼\æ¥-/=y™ÈKºüàÇÿàà}ü?×9� ÿkó3'�Ô*°E°l,íLB‰«yö6–u¥aK,›ÊoeൃÇz›*z²ˆ&é«æʾ\§Ï¾æ3ÛÒd)Eç| HQˆé±¾y&RX\Ž¼;NK1ÊYÈöIL‚Áa@‘uT0�AâMYÕn‘5ZžÕTš1%JÐar£ß$^}Òï÷nœ "´OÇ?ì4†BÁÉñÒwϺ¤õ-éDçÆW=NhJ+K¼‰v§@¡‡²¨»zKMLÖ Ž'úÝ–U"¢Ôã‚ÙíU»'€Nê; 5,Çå.øˆàˆ**Ü+ç^e ™’Õ=ªˆÓµë vÍÀ½õé‚È®¶ÚR;V<h•Cí¼‘"¼¦H_ŠC£ÍÕÀ0:,rYâ7!À› ÆžÆÈ:÷÷-9"%Ét ¼M¥‚"Ø/xSWÊ#4ên?Bxü!€ ÑnMP/P2Ev/}ÉÀl¡ÁEˆTn|/;: ³`[ +áHŠ9‚YA¾Ê¥CÞÜ7‹!<¶lgA ˜ (vaÊ7Ï·@Ú.Jwsñ%9°!R*ÌQÄeÀBn¡ +‹o¦öÂa}Ïá2*1 +µŽ‘È>LCd›Ë¨ã63Ÿ01E±b¡YJ>€TŸåfD×KFº?€¿"íˆ\_âI1éâHÙ‰é§1Œ=,lRP +"‰Ù$·¥ïÝMT³váxq•‘ FŠa°:mø,&‚ +¬=ت5n—aÎ*Ákͨp¯ìêrÔæÁÀ“Yþô{ˆ•—Çß]çµÊ]©YÄ79æ³ÊêÃoÒrNÛ!*cr• fßg&EUÉ~?§–‡ci±BJ¡TJ¿êQýÈû>$K\rÙì`ƒ€‚Ð%U¢¶å%›ü}‹åjÛ¶r˜Ë]±Ø¡·r)'O§±ž\r¬/´¦CÄX»~Q¬Úãß'NçF‘®¬<m¸³&<šµNö/w}+W·à8°©ã¶[ŠçŸªDI•Âç!Tê—E@0Ô(ÒX hÀÄmCw´*\GÊ_OPÈ×WÌÏ÷®»z§8 NÇ›á} aÏxÜ÷º+á¹I²Vnèò³H»}{Y|ü5,Ä{¿™=߀%›9XÉ@C¢~Ôa0çÉÕmáƒqˆ†Ñ ¶“¨ëŒlÀÀoy.ã äJ¡·Üð›0àæÒ}·çûë7b:zg÷Šͱf1Ä·ª¾®¢�Þc�ULXgPøõÆGg�"ðÅ&“¨À®Y@PŸÝª¬4ÜD±9ê„0ëÒÒæPåUjðòÙf�åqi“o®Ý²ÜMByˆjÏšpB¡2*¤¾É€³y<°OQerL"õyå]èÅ€ÙÀ6U õX0“rLØÛ*ŽÍ€Ç}Îü¸U³$éÛ|ëœÒ8iGI?0#i¹~ÓGˆù‰1³ÅÀ^À¯Á'´{²Ødƒ2ÚFñØò[!D B‚ƒØîÄúá©¥§)@È[ÇÅ×Äf‘0¡RÉô[Ù³ÝmÍ”8U‚v¢G%m¾o~k6ÊÌR�¬}A9G=°ô|nš´ïöÞä³°¬Ìs:¯Ÿæ²Ç•rEJwh wö*Cí׌uÜ´w)ïVW¨SÉ +z°¼®g½w>ê�ÆUu Âsxc«>¯{%Ê}2¢XÎÅ9£ÈVç¤.ë ]ƒ}_Š@ÒëIQ:’x11Ъe¹WÙ™&cC¹h`4²èÄWgÐ,Ê å[;@K»«>3PtÝԡÚöŒipbèhcž Ò–jœTŸÓ:¡äŒØd|7ÓwxWJ’åg%eºýL°9?½ Å”2u³v•õ»Âwöƒ£hO”Ü`8¢Ó ¾”°Ü¥ ý*׶q”eWÀ¿ÞwàTŠ(`ÐÛ¾r¨©ñl•Y/\B€xkŒú‰À2‹¾vg¿n¶š¹TS ãÔÖ,8à…ekðXßÔrES±Ô»•35!HÔc5ú€PÑ%Ò7‚‚™ô°r˜Cw;ÅA?h[>@ÐkZ3Ç=ƒš•Û{ó–¸÷8»ÙêÈeÎ+ïKµgRä™»~(ÂÜ-5„¥æqu½Õ)ÄZubRÄ6àä@F6ÎnmÐò5Ë™zÿFa·džP}5gÄ•¸´áƒiô™«h-ß`v}™¹Vïb™€a…æ- &¢3Y™AÝÁÄPÒç„ŠÂr{¤m—ºˆÑg#æ‚Á¦é¬‹CfïÀ}ÖÐD4Xm\´Ì}!n82kVâz©_k¢yô[óªãÄPé”X‡²à\ÎZGëÚÊá;Å×X»‡ÛñnÓš • +;uÐn¤> epÔà†…üýè@^nE æJG¸yK Ñ6MéSy0Îò4Ôô6Í=ƒ¬àãrÂÜG•2¯ç%¬Y®QFôúnÔ 6¹ð|DªedÕË'©ž¸û/¼˜'Œ&7"'Ü×Ê”™}*]u|xa^ÇuWÎÒô5Ö‡Îk8ÔZrPûþ½±"zκŸr+j¬Ë[´ýãGÓ{#6’-{ëÅR½SóÎ_,{ª|¨ë;ûbŽáCÑe=€zµƒÕS\GPPdÓn–¿^D¥Ã™û’ÝJö¸÷º¯Â.´÷ìn‹éqŠä¢^{Žhå:æä@œôŒÞƒÍ±’ JÚL(~!'?<ªËôEÊ_¡ÃävŸŠÇ¤ÐÏ;ðÕ{bÿì¶ÓØìEA£Ö=u�u†Ñ0–d:kß`¨*}÷ùä|4�š]‰‹7Œ¦°[ ·r®$|ˆH$€¾vdŠ¤øÒ•“TÎö‘ôþÈ.ÂemÏ +°ýYî™í.ŠmêÎ {/µ÷¨âÑ{®6çìSxË]î%]u,`Ðúmå{ªökX”ûä¨R@|¦(#D ÈéóTqš¶Ò3¤�é£B¯ÃŒ°@›½È±©™õ«žf,ñ«\óÔ÷Xým÷p£óNÅïdrœÞîl0,½š‘³ƒ8sǤåGt¤Zóh3ïÝpÃK˜(¦}S¦1 sî˽{n¸A|œTè1Eë£þ_§0vÈ(QlÀJ0 EÄ‘^0b"e'Cî15˜ +ž…Ñ°xKPwÁ¸$f'¾U?^)…Œ´¢ªævleÈw‚Ï’·”£•õ%EÆ1óÍÀq8÷¦Œ=ÞÝ¢RÝÀË=I"eá±�™íM³R+H#Åe7±d:ýÑyûÂâ ùâHU`˜J� :[‰á°-åŒ! Ø Ü*Ž¦÷ê% v%’RœP¶†œx´æÞ(”W˜’gÖ¯0[«$s{[-)-ÂŽ°É®z±u¶p#xˆ¤èAU‹+HbZCf1@~*N3='BfÅ5C¾L¿Ô'UÚ! v óÀìÀ¾ûÚæ’·9€@FÓ<œ«B?×Ü=‰‰L‰QÁÊqÒ ‡¨ÙøxôZÿìιÝù£ˆ£‰sd®nž&ÆõrõQ7þ¬¾É +9:�#Ðl,D0 ‘¯ëÓI610 ÆKÒRå&%GÅ5§”‡¥¼W!ÆåÇo©Î\¯iéÒt:XªÆH6:«¿\–ÊõTdæ Hq†Ï1 Í=_é5‡# CÝX`/Å_A5F„z’bäoðsÍnÖ¨sÊßSuøxTì%Œ\£ùœ”¹NÚ¬O˜/ž%ø¬R™Œ½LÉIÃæá +Áûoð±9R\™z³äËþÉÒ ÎÁ À¿?/t[Š‰:I +sÉ‘ëÛ†Õ~h»ômj·5EÜH¡!¼Fxž¨¦Iüp¢5©ðˆ‹¢Ñ¥;¬Hâ»þLAæTa—iV€(ÆÄaé'$åÎBäÐãë¢$Å&P—´|‘h‘Ú¢š&pŒ6… Í#÷?¯lÃ&‚É£2Pfjµóx?%ÑáŸØ;óx¨öÿŸ3&Ë„Î0ŒÝ„¨¤0ˆa쩈´ñE¸WHC×’B‰˜h1DȾ¯i²¯5¶ÂíÞ‹«ÚouõCöFºÝnÝß÷ÛÇ?s>gÎg›÷çs>缞¯e[2Åw¹æ +ri"óÉ´ÁøA*°×@—Õ]½Ó6zÙða!–Û’÷—?=¬P„ÆKœxpQ•ç«îFl9n6ŒOª ±}¥ÌÙs²c»*v§ =¶ @]²ÌëxhåiûÔ7ԃϡæ$:Û1oXêüŠãeO~h'ÆþƼò¸Újy»^^†i)“ñš”(nÉWZÅì’cà½îZ+¶D×éÉö«B*=why!ÅJwµÒ?:¤Ì#‚@†+º®(�<¢ébZh<o¾ÊET–¢R—gƒQdîf6q_ö¸î×àµy\Wr]q'8&Cx¸s§¸à~¤³û—nh¤é|Ñà—àáEŠýÆ“ÊêzIÃNe÷Žbv¡ã¶¶›‚ãoÚ7C&ÉžxHŠ±¼%qÍ~§ ˜×Û®y&øÇ t^Ƭx ÅS@I¾àËÝøs‡DÇD‰nÈ90f1&Ö°÷øs]½_ÖòÔB€u– +ò²‡á®’¶³¤n©¶*g_-*/#ã‘«¼Ð¼.º7N‘¬L[Îc©<Wmœ“ÐçÓbµy8z<;ôÌšPîx�G’õJ‰O±h<hy>!3£zŸÅkb—Œv ´BÛ톩ÏtÎQúf†Ù«×!ëø€_¼Î£G¬Ÿ+¸‡—@®÷2 3E“Ѩû9¼HÜ©ŽWñÛ»MG39‘ùvx¼³$äwÜ+€8%í5|Ñ´³^½ ‘à®"DuE->|H.‡<m)ÿ*]BÔöüZ¢w^TP“ êáÍrÔå´=.Á{ók¹*Q)If:)š]1©ÊÄ^ÉÀ¦öÇ™ßcPékÏÊh€³±”ëT»½„>Ò)ôÞíä‚6V*°Rõ,º±2sÔ.¤Ñ¨”ë0ûIM‹3HMt¾Ó >ÞKçÔ×b0g"ŠÄ1±<HA©Læ8bQ°‡cYÚ@ðó”$Ù›éoÚqm hÊÈB°Ô×SòmÃeƒ=ðö†B?Þe’“,~«Ë.£.$ ¸Gæš<hûûꦜŽàmh€êtГ˯,Ú€ “Zbæàõf€l´µ˜Ãµ4¨}qOªŠ„wøëbþƒ’'p z¦—‹Ð¤¥Û-Iµ¸à˜˜;ÿâ‡ÂöôróÀHÉÓçúú¥–ó•m+-àNw.Z®G°g:*=È£ÿ&B^Ðëü°=œ”[~›f(Ûüì,AÏâ wAÔ9iç´ Ñ¬l¢“¶é%浪ˆ(Â¥—ÐrÞDï7 '[–èPaº ðÜϧoó;/CÛ²’ÄÁ€ë·¡ÒÕRbEE(½a/¿_ô6¼²X$\–a-- [C8d(jõ7–-Ò¬°~>,¬">;|ä,„Í)äG&¤âÒ\ÕeOã#½…åQˆ(¹Ü ÕOv§…£QtàÂgk°Æ»©Î») g›EtŶ“,èÝÚ·8»x¾¡y…%NQ;c‰ÈÖ×jº©ßÇò?óAr¼1›o1¹T½øÅ.1y` ‹‹|{ëzZžúà¥ÅRº–Ÿ.È×ã¶å¹C‚šúŠ•†n©R§R +"OmébÉJû,ʦ½jйüc€uK·¹[ ’(©“˜èÀ’fœ=üÇYÌÖï”|\)µˆºIà Z¶}…vú[¬8º‘¿zׄÃ4(Ž ÃML±+múñ±¹jtå.£“ÕÇÍÌýj’«ÛìžÈ¬·W;ãµRÿITàÊUÚ¹%}±æI®§-]pLrq2_Ýä2Ö*„Oò É¡?ÕùÃ$«—lÛ«Ó\)(Âyè;pÙTýÆÙü?Z!°ï°ëÞ +R…»m¹ü~ý€ŸµE‚6ò’øVæì$ÓªM3*í¤|ʃ¢²uÃ:õãéÔîI¾†C—‚‚%7éw`˜›¥’y&W2bP|@ _úüCl˜kÈ¥!jmÖ_¹§U†$�zà†QZèɵ÷*Òª6n„ÈjøLšSøTx:eâ:yèRg¼U<õFpŒ÷M‹‡7HM.&ƒ½LG/zºd¹©AÇÊUsaî‚‹€ØD'U +\ˆ£Çòw1‡ ™ËtS$¯tO�ÿ¼îödyç• °"â·Zu3Ü‚ï;p³{ÝÁ´8ú¢¥‡öžÛ ö«žÈ/Ò{(EîÕÝST+5:7ïD¨ ŸVt¡.0—~Ù°kõQAiÁ +ÎM¶«–ž©Ú»áϧ;Ú„æJª`à†êfÀKh uwEéÝ‘nKaaùÐ?„Ûò]eóW%a[xDdAeÅÝ>bÀKr_ó°êzqµmö¨Hy£OëöòÛ»è“ú«D^nPm¾#O)éR…°‹oY{]³0{i…MBrÜ6AÿE÷V)Ž>Ã=4ˆ2Ö‘1µ±¤c¹ñÍÝüýɧ¯5¶Ú©0°Åàµõ\ݳéÈÁŸkYãúî«éú‹¤°_ˆ²!œ²ƒ‰9mA}ä!ªeÇãç®"—nzÃçø˜KŠomyÀ3Üþ;*VZ¯§~ñ†EÄ®òfá+f È~'A¿Ý‘Ë(5èvy穇®`Ø£ÁŸn$ö¡A`dkÏߥyTn¼A +«yAK»ä`©áÈ>; _»h³`"ŠG¬J¸Awÿ#·©¨ö{wÁ+D]S×»C©w7–ŸÄÀ³xÄ–í=ÙŸØØ*YšEÃÄ +¸)ì¬j!þTÉmcbœGí/@ÆoÔ«^ ûÕð¨mܱÏú¹•YEsf£?þMä!³¦þ#s<[˜!±Ï„2¹ZŸÀ¶VY4„¡ü©£Y~µ“†æ™‰¬_9Œrd¥ãZÃïö½Øg%É\°u™èA+&Üúôuõ«—=øµÉý¹òþ‹å• ÌaÙj›ÓzAéeFÖ(:hðá@˜®À#Þ«‹Z´úm»«W=1}^üÏJ½¡¼6€¯¡J�pœÈQLòf$²Ó2ù…ÄIùè¾ïÂåW8¨ƒ—ùW™Ã Q8§Ävz&™X§Ò*AX£[²rLAhIÖíÊT&°¥:Ç%ØZ™�vE +†r©êôÃ3SP¨» ÓF*Œm@Þ ä ”´Ÿ&Ý`Á.q׬q•ÑH¸ZÀ+Í{0FÅ—¬ßÎ +µÀ�v˜:J¹ÇäïÇÙÙ�_Ä.fì KÃUÜd[¸¨8€™çô¦‹]9?³A|ÌÙ2 kDÍ:¤@ƒ!(K͇Ú+:³÷¸mòüÛWËÙáâ*÷õ‡<ÇÞKûÆcaÆŠÃ=jàâcߺ£G«Ž¾e_À9„"À!À/ d±ZÆÞC¼hì ˆö)¨çù‘ÅÀÎVÑw$¦ŒÕÊ’nK`NÄÁàFŠ«²¨0„d@fØŽñcbUÂFr’H´Û†TÒu®kÍ&!M¡EÖy%dz_ãŸ]™ÕI/fM S9rÑ@Ôšd™™³³e%›·öòô >Y†}Si¶~@ÖfLÁ-¯}˜SÔ]8ü B²2ƒ+td2Qâ +‰`#PÏ&µa!°þM;t} +ŠHÏêïÑ‹Q£Ò×-b=…‡eà‰òG+A.¦$}‡eº'lÚÚ1lë¹I$PÛþ€87 ý‘svÑTÙºlñYÇaNs¢4 îýŒV¢µ‡QAß;µQcô¨–SŒêbìœÛñ"@ÐV™n–IÙÉUhtƒP½•’À)ŠÂƒÆŽ*’áì‘ÆGì,·Q_(>ÆS/F„ÁA}&˜1¦$f¤ÏÒ�·–Ó‹Ö˜ª€b¨8ÑðBÁ‚Ô"áB#EJ½¬fÇè÷¬Üï´z3 ¼gHY˜ýïßöíÛsÌó]kŒêo^‚Y²šÐcyfëFk2ž¢¤ÏÄ%ø±¬Ò/”à(7}¥··¨˜×«R È«yólµB#{”UÛþ³üjÑ)ÞMLì¯_üüx±êmÜE:‰é·ð‚îêË'†«ÅEüÙøŒsî�¬úÔeué/¬ýikêz[bÎcö¬£QÉl’úéŽþÅòù‡Â?1œæ”,»5åG?ZD—¾"€±„{ô€¬’YÖÏz/P~òH-ñz{ó§CJ_ŽªDûz?i\ûÎûYÛ6_Ÿ?{¼óyõ;Å7›0|=ñü×ÐÞmŸ½Ëóó}úä÷?ÖÊ+È+b0rrJJk¿¿ÿù5Òìþo�Dpø²5]àù¿œ¼âûþWR”•Í:úVIVþûóÿ¯‘Ô4F{1ÛÖ¯3ö'¦Š˜í£ ¬¤¨"7ãcìì܈iEÑØ0×èÌCâãçŒiD¿ˆ«Á¤$d²«¦=¦ÿÅŽ;¦.¼lx2ß{=ȼº½÷‹Ï‘QÏ•BÚÛ:웮´òCcyΙ¥ ~ä“Ô-È,Ùôì´€ë#jé¯(•žì®yåÆãµú2ˆˆ)‰âgB!fÀfⱦt;sÕA]}ý_ÔÓzíI±Í'\윑;ë‡ÄxOk²g´þDSÍá[|¨Öþf:íyÇÍûæ˜,õtþÉã·…çjÏY“'ó·4æŸ9âm5 6„ÏÜiäã<z†Éçâè¿ÝDòÏ#ßçŽo1wü‹îÿ`üî}̬îŸFg0ˆ´3ãÜœ=•û߇gÃ2fT†+ã‹ÇÜ©ßØûx&¦ºp¬ý0Ô~œž÷7Cí_±ßCå÷Pù=T~•ÿ@¨dÄú„àøQ¶ÏßkŸÌÿùȇ´3Ÿ‡#ÆÎŒ±Àx”0ÄŒ2é̽ꇑŸ¢3~3A»ñAh¬ÿÖûdÿiöþï„ôÞ�^@ÿ+U”ŸØÿ•“ÃŽfÄÈa×Êßÿý*iÒÍ{ÊÉ{!ï‰5cï… ¼Ç¼±eÜ÷8;¦ÝìímFgyÏ}Æ ö.önãæÙbs¿‹³÷L“mþÞ“6Ý.Ý6߳ݽgzvïq³mÖ=eÔý1“î)‡îϱçVþÀÛ}–ÛaÊ–Ûf†-÷¸'÷´÷B^Ü:cÓ^ÜÚŠš:ÊØ)/î‰]û)/î‰ìcßûñ¥µüî÷Ûi“$¡Y;mØ™nÚÉ?{rbž=u}°Á„ý|³ìñ‚ͨãxgÃ4„±Ó¦ëfïz`t9{b4÷;®<MØïçûÅÖÿÛ G““¶þ–Ùw(3;!ÁM~¶çöh²Û=\F˧©Y³ˆav{Ç kc˜Ä)ŽÕ$(lìÐø‘yÎu³ÿÁÞÍmŒ®6iæž¾eü¨óþ ºÝÔM!ã²+(Œ•ý[GÚgš=ä'È_yþ———›šÿåäÆŸÿ®Uü®ÿþ*iæÕÂôÆÉßþÐÆömŸŒkdŒjü8¦q¢qãógBç91‹‘‡q¸7ƒzÿÑ‹Ÿ„Vœ«ø®>Iq&E‘aS0(2„'Φ&.L2dD1dP#ÆMõ¹_©1y›ÿÁòbrà/Ä>ü|îáÿêRc6LqNÛO'à‰ˆInâ·ˆÿc‰á8üÂ×øÔ÷ÿ”e׎ñ_°£+€ïïÿ}´Pú×Xpý§0¹ÿ#¯ 0ÎÿQÄ*~ç¿}•ôžÿ3ÚÀ]�((«.*¯-½Z_^ÙH«n®¬»^ÓÐR×ÜÖxýƵÖNz{wjNYF^yV!-·¸2¿´º”V¹²±z4OÓhžŽæ–›É™%©Ùeé£y +FóTä—V•×”Œf«h¬¨½Þp½ƒÞÖ© 1èRvYNQEáåÑ£u—+®T7W×·Ô6µ5\ë¸ÞÖ›”)?10)³¸¢öZU=½‰~ó\bv|J~BZáÕškµõ×Ú›è7bâ3Ï&dÇ¥ä_©jªý°¹›Ÿq6!+öbNÙX]š*ëèÅåµWkše5wåW8ºÍ, Û`«fdy>5)£øRvit\9䌎™“«Ïñý?…I'œI^‡#C¢ŽEÄïõÞü¢±ÑÄꀞùÞ€ãçñ[vºú‰LÐ2Ùãü\`XìÑð8e}eƒÝ–Ž?mÝ}pž5áÿÚ{¶Ø8®ë’¸ilÆFŒ&q“æu¹Ú˜\›åCr¼–(Sm±±$š\×V$Eî¹-wV;³|ØVâ‡ì8'ŽãºâÖùh‹¢.j M£i‘i>ŠèOZèGQíOQIÏ9÷1÷Îk‡\Rg.lqgæ¾ï9÷¼ï}âk/~½ûäK›Ï¼üس¯4ü/»Ã›»O~cã™oÚŸ]õ¿Ü¹ôâÆÓß\vŸ®_¼¼ê=×ÜüêYç‹VëigýùææﺽpñÒ‹§WŸø|óÉzûòŠ÷œÓ}þôÊãgKŸ¿ð¥ZûòçÒÕ>;ç’q³RHÝ7û 8÷ô—ü< Ä<Ï…“ç½zë½ïz÷ 7~¨Ü~×ì{Þ{ó-cþø¯¿ûÌ»n-¹üÔ‘÷¾ðÑ÷}î'Ÿyî–W6ÙÏŸ*>?0¸ø‹NüÍ{¾òʧ¼ú™§ +o½ïÃw>Rm|ã'o½ÿ#ÇÙËûJ_{yÿÙzãõ[ÿö…WÖëoÿÃ÷žýÀ³‡ß|ÏM/=øý[sú»Ÿ¾á¦[¿}ó7ï.>úÓ—þ곩\þ÷ßl?úì-ÓO\þ£Ÿ»¿ýÊG_m¿ù§÷Õ×ûå㔿;ôÜëÇž´¾õ£×~ùúí¼õ÷9ýç#ÿügßúì¾wÃ'>öÿú³÷¿Z^~å…‹¯ÿo»õoo}à¥Ó£ÿùôÞ÷Êéï¼õƒßû‡·¾Ô¾é¦¿ðíG?uøµ¿¸÷ÀÚ¿¼ùÔ3ùÆÖÿðÁýÞ‹wýlýòÅ·ðúÒŸ\|üòúôOßúÄæÛ¯ßÿ¥»üãO>qãæýŸ:ý?þáìçþïÝÇÙ‰ÿëÑÛ>xÛôó·]>ûÈóƒ_f?œýÊÍß¹qð«åŸ<?8tÛÛßß÷õ[ã¦}Ÿ,ÞTœøõ_»ŽÐ»®SœÿiyÞ.¶‘Nÿ'1ò#ÿ1=1=Óÿ+‘ÑœUqñ¹Ø"7ÙjQ'ÁöM¤½ód +,7»6ݵ;>ΖڅÕHˆu^PXÑ +tìºÌï[ËM›ßikæ—w“SlÁ,%Y¦á¬6F›hebº:é*^˜£ÄÝ +ô~ñ¯ Ý}·öUô"ô5¦½©H{S©íÑ×-»Ùt7¢Í™EkI÷»p[¸Ãh·¼[/–S™Ì:Cw½.6Ì…ôÐÉ*èi6”d¹W$Æ:ˆùcí‚kÝ–ão)ƒ tYñ +]Ç?¶ƒbMX½¶…t¢n’ÔM‰ÔßqmÆÒLŠL³*²+cXd¶Èû)í‹ôÔÃÆH)°1¥¤lŒÓ”ãJÁîÄÐ(J÷–¤˜å½´u{Å‚ +o›n‚³a^·GÆÈëàf”$»aüz¤[y6ýÎÅ8S"c½Í‰T6bRŒÞ¹”Á´Èb¬‹áËu¶yë·;ƒíye—ôæK¹ÿ;î:º–*(îþ^v7G`£·|¼€×JÉöä˜í:ãŽnlÍ‚YFaRÕµí\½Óˆ>HA½",TFµâ)×ìéK¸³ËO¼.?Í¿—|ê6Ü‹3v,| ê;äÔ½g;²G·>ãŠ^í«X¯ýh@Öÿ=¯1ÈsÍk\” ‰É‘‚Ùc¯úÍ®©wÑ%Ä F#³Dö]©ŸHÂØ‹`oÊFtE€afšÙ +š6,˜¨ ãIn×gÄcÅ]9cŒÍû°âH¥·Ü.><Ø-zXqQ|^á’q¤§8 r 8ü¿LU]s;6·Ø÷"æ©1•ñ´|§A•¬?ZžJÌwý&óTZ¾Çô{äûWz_¿”ó*Ð6RR®0ï\Ä2Ç]u2·@£Œ“ß9ˤKÆX&2&&!…Œa'�¿a–ëHÑHM‰–œJ“^Ⱥ‹mÄ•ŽA|§.‚CáO·{Ѳƒ½$¢–ç¶Z!d=,Ü@Â…ZÏ‚Ú¢â7üµ ƒvÇ^u†g¬ÑÇÊ£wŸ+Œˆn•JLü‚ +\¾'µ¨–?±7gZ.ç$„ðJG„o§ÎCøwÔ1…á�h‹q +ujÅ(ß3Àk:à5™|•:¯Ô€Ê0æMF³×¼ËwnyÞ=•G{ÌÇŸÃJ¨%ãîùà-ÓE Âmàû¯z×c׎ÌÈ&#´ê¤’˜9ä=8Ò³ NT~$\0d©ÁU`g–#*3 +d:žg~qL)ɽJc¯Î¯Ù¾už÷ΈŒ!Ø<".úÌŠ{烥9áhZˆÞ‘Õ‰]‡ÅS/Îã G~^sêõ¦èþĹ]š{`îhU⨠Q$;–8µP?u[{HÑkÑqؽù×™³-Yxäz�ƒË÷�OË2Tˆ»+ÃñÓXÂLwÞ©1GFûáÖ‹\Œ]ç\L.ÅLÂ8Ÿ…´E +#‹Ön¶rF§¬Rëç»m•¨P" +EzòÁ›é*·ØA}Mpl¶7`‚'$J‚¾¹JãJÜ";D»j6F€7~V¨±ñ‹©) ý)iÕk:n€;ø軞‹X +üFЊ†ï·+ãã@*€¸•ků0¯ÕÙÅûçªð|¾eo`åðÚ¬:à#ûÃQy£`”RŽ¢ÄILÌ`Þ� +cŒ/[U²ÁÃDåKl¬`D톩ˆ``"$'¦ËÑþ.—Lfaj®U4è¯J凛Œ°†³1ÝÚ¬È0´bµ¶Jz›üSæ&)¾™—ImqÙõ}öJ&6'¬Qj›g„nä\(¨Ú˜ommz²”ò<°”¢(³„EÂjÕÕgËUiÔ•À9˜ <\¨ÐrÖ¦`QÒŽXlÝñPð€A[[v|/¶2nÞå%ZŒ läRz»ˆž¥m»íf¼•¤Ö°k¨#Ð3´ æCÔºçá¸/ví.ð¹¶_3ÙæôóTúU³ô`˜éS®Éõ#2åú‘\?Ò—~$Þú½[Ê‘¸cYbÕ!œt±´‹Žk!7&<€ø‰mØÓ±ð8¹˜ûyê0,u#Þƒã]ØöNx C[¸ÎXà\1DëÞ‡¿Äô)•KŠ?†%Ã20-<„yxq"øÙXrY[È.£H8ËØå)A˘毲8Z½:3––±^ñ´˜B1µÊé%©–¸èZŠ°ºàd µÕj1ÂmÃ~8aæ6coÃIŒ¿ÎŽŠÁÝi—rõ5Ä \–8sñ‘¹ZOÍè\ìæé†ëŒªÕê4"k{ =y¢wL¤È@Ï^á½”oÇ!¾×Ÿ›2u*2—?Pt.°¢Ã°!Σv¯Û”ÿñÅÝkÈÿ˜4þ2Šÿ˜˜PñSSÿq`jâŠÇ€pŸ’¯×÷ë4õÿ±oÛ ûò<$�É#@$Øä × ™G€°<$�ayOïI’G€h¸G€ä yH’{8\Ôûú¥œ¹‡ÃµçáG€ä yH’G€ä qç yH’G€ä yH’ëGrýH®ùUÒä yH»ûä ,�ÉÔ¥<$�É#@òtm¤nU:cþ¦¿wmô¸ÿ‹ÁwŒÿ˜˜(OMMMÂÉÉüþ¯+’ª¨¿�ºÓd Ëc˶Ýb5²b¡Ghe Úè²°uO|†M–+SåÊtøÓ¥*<•Ë9Ú_çI'{ÕF:þ< ⿦LNMþï¿+¿ÿçŠ$Tt(±UJ=ž\Õ(ñEz±B$) “׶:Öš Üpv¤BO¸Cì.¹g ¸áÔýÚÖIÃõp."¿a8ÌdÃ_k·ºkËvêHqGÝÖ:´ã3Ë«9á:äOÆö Bžªˆ?9Çݱýn§ÅZÍÉå2éNÛkZ^XNø½&r– aàmTM‚C’^¸H^µn‡Ö‡X™×–ê„šf~kG.0{ÈÔÂÅ‹]»³…“"L£w°ûO`-ÙÃÇçç@Rm;µóúI@»$;¶×mbËk[ÞÅæyªh˜×Ç}@ø7˜ÇówÃ…”Ü«¶âØͺÇH?wbkéÁxdg΋١•`y¼&Yã+£lC™%Á²kþYJ‹ÜAqN…Î׃AÆS¹ +²r4ÊÏðØ;Áêl”G'C2¨ËRÂYÀÈBX(–M|¸¦&ÿZð’©-Õ3šºãU"ó?ô�7«–A¤wÐé™d#³Q„œáô]›ŠP¥@ÓòÀ¼æb`ï°€ØCE2±ÊP·xdF,/™x…qïà8T¦Ø$ÍíE3¦‹DÊüÁ¬(M“ìÙÎW-NÉL +¥"›_ªÎŸ„ +÷â¶<¨Wa&#µ;rš6»t4ÂÒv€cêØÐ[ÏY·Y y22¥¹5ÛóXá4ëh ÃnÀƒ #¼VU®Ø~qÞ¥é×p=´qA‰Ñ9ª`ãØ æGÂ)ÌNÒFmÔk×OÁŽLÖ.§^ŠîØBà1Ô ehWKÙù†:®ëówÌkÛ5v&´:DLrH²qÒÇ-3^¬„Ëä ¡Ðß‚AÂn싲¸ª¶š¶A0’FE°”²Í[P|ÝŽÙï‰îéû>©v4Ò±jûGùZZÄÕõEßõ¡úZÅŸê[*´âö¬Çæ²Aë@O…¶é¼up“Êg>=€èbÏѴǦæ˜6ÝÓ«z,\&ƒÛtTﮄ4G‘—†MÓ^ñã4æÔÇ@e.hw +õ¹„)æ + +ëÑÓ[•n¤–>TÜ{'Ø•÷!2$vM†ÖCÌg„!z$}{—Øs¨œ¥ÞZ£ã¶\Ô3æi (Ÿ–ø’ú)²œB e,Ô`›áã:5Ž·Qè6�‹ÝH Þ#¡‹‚ȼ“`ûŒ+_°Ö-¾ÙW€$“¿Çž1\Ê1˜S +dzTÀ5³¡ +~HtD`L¯J![=Ò!˜ÅÙßzN# ³ •€$<Áhó¯H"°†å‘¡Ý=ÄõÉD¦¹¯È±7â[–ù9ªOä®:÷c,ñBÑj$s„¾Nku´é 8Ýt.ØÉLQìh{rF´¶cD4¿'p¨Êà¾\°µŠ‡u<1¢1.&¿ÓgÓkv °EʶE®ÑvŽÄ’‘]à�Ke“XbÓY·À«ÅFíÍî·ùíÿo"ÌîÃEM‚<b†%Šjê; ¾å +ƹ'Qû$ÞÅêzêãkã[2ž4QÕÓ¿Â%טª)‘“Ò—¨8•Ôš•:%CfvòÔ˳34Qw˜ú™šž+:¾½àvÔJV±]ÝqsÖýɺ_%Î=gܳ1î |;ðl‹6®1—â½(¯®ó½áÜÃEn“’³èË +Mô¿EþÕp¼1yá€ñ:Àì–]gWNâkÙó'æ«Lô-³¶¹ØY'6Ö0JHVÀ•Ô9ƒ6¥·I7`ñJt +—YMšË9Ȭ!B·!©<ê嶙޾ó˜-¸‚Š%xŽk—X¾Hm²¿HàëIuS¬0gh0çbŒ>W¤Ý¾¬@Òr£:-/}½'y?ˆ ŒÔKËe“v{É´c×ì)ÜÆ¡GÄŸŠöÇ?íI†Úk��áàï$ Ø ~w¤ylo,�bÖtú—%´I)ª9I—0‚ùH6¶a6Ô¸ùó'ª²êédJ(lÙÝDÆ“³)u�âµ<JXC‡Xrºs¼ k¢C©m=œ³æ¥ë³NðéµáÅ †ÌžU”¢øÙ-ÏöNp}Pž±¸È—‘±¼ÌT`à?ªÉ8§)“;†¬L[Ãär2“òâ–Ì´B"OA§µs‰jqÚBÇ ÒŠEůç×¼UN¿à •w!ÔahºÝôƒ|'á)’/¥EÎË6©.uЉ¨.0"éö#Þ?=/v1šWµ½j·è,ÌB»ëë�œ9â(Mï¸c9˜T1M‡ƒŽ¸ª¡·½"¬«jY©ÖO¨ ŸIاMDm×v2é%L¨þõ²T3ô²4CÐÓĹˆrCREU?™Vx2v…åY+,ÖW+½õ7Q‰©\”ÇÅf7>¿P vÊÝ–¢Z’´Zã0f‡ÝØ{ü“ø&5¸¨Æ›Ú¶…z—Ù²7¤íîWÝ46;ÆA2˽½úê„Y›êNpéU_Ói¿ZÓ™k]mÚ—–4VC×[GªÅl÷*s{&h̪àLRq&+9³ ¬©èÔ?à‰BGÕ�µhL™kí¬söt“º«5$Þ@Fe˳…‡ü‚çÒ¢ŸAÓu/`ü/¶µFÞ· kÝföfÛéàé.À×]1€¬U»Ÿ<@’f P#(ÕtjŽßÄÀÖ5w4J¤sÿ<iðlLIp)Eš¥ÁÞçvÖz +²AN!ÃŽh’_¡@‘³«-Ëïvlí”ÂX½×ô9¾c5QC¸Ž7l�7Nb@ÑPär1V 8å@jÅÍ[,ØÎ%ä,Ê›LBr1¹oYר °H‡ã‰,*CHo¥ÞoSFÄ2—Lg¼ƒx— +;1W=~ê˜2:±Ù£x›±GsTFoŠÀÏc¢œà?±ƒSÙÃh¬Ñ$[½Á‰Ò^j(¹p—X xqbö‘æNÞO4÷®ý÷Æþ²®þRù£ÌÏvû)ÔKZ?ñ&šÙŹÙàAÊq–t#_°_U(¦ž¡u~¯;¿kÑqo +¡¡ZQ]r/S½\Ô1±üŒNùm8õºÝ +f˜¯ª>‡òͶ«R˜¢×¦½Üv…}ôêÔ«ž•ñvw»dM¨Rajcí‚ý8º I^<¡Ÿãw$Q‹góÁ®ëcø~¥Ò•öj:º= +òÏ <üZ5{¸0T)Á?ô•ûQä>‰¹8nð,¤!¤;”ŸÝ~{ÿ ›@kBC¢`!h‹6;iÁW8wŒ'SMX©ÑUw©fWŠwMC¯dÜóÏûÖª×ƒØ 0åìsÈ<l× ¿³ê¼©£ §vÁn€ATG’ŠvÙ)¬©L‹$©lÐ_Il@CØ)ÐÊjyÄˈ˒–%Öe‰þ¤¦^cÔb»BAŠÔã WiÝÒó˦tQÏ.z›Ò]Áëœ9Y=7ºbÓVZ3;¨Zƶ9aèÃ"Å, E–w(ZŸèN:Thü—gw|ÃÎðQó'—æ«lþdõTÀEž +á c“fk¢ m‰ É1°!9CIV!1$Ì\[µ}»µ>\Xœ;qª:wÝÅBi¬0$ÎÖ.ñ1fû”Œ\ÞÅ‚‡×hwð\:F "mÚXãZ-xv×·iy0 šx×p‰³Z¦e¯²ZŽµ¥øMÕqq +rP +¶¿à‘Í°²âM Â+ãS˜1,šnŒ!<´pl¶:@ÃÒœŠ¡ +ìs1œ¶ú={ò˜*P6™ÌLâWÖ%Ûx0œTÝ/9êâ²H•ÑÍ`Üa‰ ·wEø“ÓÝa$¥µ-ŽôlØQr˜6ry ¹ÌèsÊe€“Ùk²¹¯ðÕ@.æ&AàaÜf5¿ )píÀ!'«ER¹ŒLhä>8ú>ÝÆ ¢€5Üñ:á•^'Ì ûX®¬(ëVHQÆ´ðzæ19™¸/ÚžÛ�’¸°ß+qSµ¸pÁP¸•Õ)±ÝL Ö¶ù÷mïŠ÷¸Èï‰ÂzOø;‘ÈWîÊ*ºSx̪9<$ÂÃÁ~=p®,Ph6ki†Î�|{ŠÛ/Â6íø=8 ä·™`‚ÕlJ¥Ï=ÂÑñšHÍ Ÿm"CÆ8dÛ½É<˜<™×(`šñYÛãu„Ûö8Ýç¬Ox~Íúãgö詇NV¯0C“äÇEîh âOb žÀ9~Êjô1:‘‚¥‹¨Wmlíü‹(´ýr<•ÆGQÈd&?es�X.Â8™B¿Ýu§Þ ‰J“Ç`d :ìJ^PnV)½‚cDB¿DL2Ò#–ì1 hºx)²%FçŇÆ.u‚±øF7Šüi„îðÓåô]g„x~Mf6çíþÅS-;÷v` Š¦3ªk¨@õÐÏm¸¥&õ¿Òn>C¥ÌéÞ^—3aÐ׌QBkØ›ÔùëxƒžåK¾±m¼Þž{É"P,Ӊׄüœ¢«ÝŽÄmñ|fâ\É4„©¬øIíÈá,Áí/\Äà½.Š@3†I+ê3JU‡†MuQsTسù䀄_h»M§¶%¦„ì²x wáa Dâû‰Ùò-ná¡ûûê~ +ºÂ”°a2ݬ�åÑùg„4hcLô×cNݦ*¼†Û…-rÙfÇ÷í7 ’ÈìB·:«Y-º‘“#V†·{zîš›][Ü!±6&î‡[®[[€Ì³eP7YÜøÕ�é.lÍ®ë!cÞ†muFPÛ…põ¶c_ðtXuý§ +J!KnÇÆýšÀCë/Ðn?¿À¬z ß³)]´†íA¨`æ-@jºOfXÈØÙ[df–J± 2õòמoñû>FI5Ä–»4Ó¬iãÓ(ÖIšç ÆÅtÙèêæ´YÝ¥b]‚<wÅj9þ|¥¹Â[O¯äÀÞå%vPõ¶Órð®9lÜÁPùDò1‰IóäÔϯ(öìGüŒ]X XLweÅny’I@C6X¶±Âu§†›�®q‰éFVsþGX› Ï;ÇkÚsÖ Œk 3¹Ÿ÷¿Ž¤lslms¬~ála&æ-: ÈÑ<LÓæ[Ð#´Œ‡£Ã[¤§*,ÆÛÂKê<ÇG-/L¢X컃6‡€-´DsLøÁZ¦ÙÜV}ÝA€D ¡ª.Ýô„÷Û¶pQÂ_lÍ€£SõùõRøX‘'#2z—HÊÖ Ÿ¯3Ì÷üÒB…Yðh¾©þñ› `PZöÐu[à²ÝrA ?FF‚r,_w7Z‘ Í!ØGm»5$†Ö7óxû@Þ`ìœGã£\C˜¨YˆCŠŒì 4PÑwÙzï©ÑÁ(Vx{Ï2b)÷¶ ᚌ?(‹;÷6â>*3°;î/—C›,¶#È7íàº!H‹½P1]±=QÒÃóÕ½z¬ÿi„Ni¸PçÎÒå^õŠò¥Q*ЩKÞ:R—,Ï`"•±A˜âO·ˆ4T¢øÂ`ò8…˜a~aPÛî¬ñÛ<iË(’#‹€á›Ã<ª¨Ût�"…ž}˜†…SKÕ˜#ŒÌÀ‘r¨x®´Ú/1žI½UÓ‹& ©¾´ÝH¡��çhû!-³š.ÚWjtà].%€±B +c D-M$‘GûëÎCêD‰ÊÀnLgÊdî`*‰O²^+KBÒñt1`*„ +.×`ÓÜY¬fw|‹XbRÿ„ÔPÐxÚO³É²4`Ï`ª<9 cããì@yú3eÈËîbÀÅx—Ä‘°G›.'z-±ZxAºp"‚]:?.Í*œ)¯a:LE¹Þ©=Ï\ísó”§<å)OyÊSžò”§<å)OyÊSžò”§<å)OyÊSžò”§<å)OyÊSžò”§<åéIÿëûÅ�0� \ No newline at end of file diff --git a/faq.php b/faq.php new file mode 100644 index 0000000000000000000000000000000000000000..7880582e9dcc9ced661f01a00d701057e0474518 --- /dev/null +++ b/faq.php @@ -0,0 +1,84 @@ +<?PHP + +function defaultDisplay() { + include "functions.inc"; + include "theme.inc"; + $theme->header(); + ?> + <PRE> + <FONT FACE="courier"> +<H3>General</H3> + +* Mission statement: +-------------------- + + - New generation of weblog systems: mixture of slashdot.org, + squishdot.org, kuro5hin.org, etc. + - History + + +* Frequently asked questions: +----------------------------- + + 1. What is this site about, alas what is our 'mission statement'? + See above. + + + 2. What kind of news should I submit? + Anything you find interesting. Read the site for a bit. + If the stories that appear on this site interest you, and + you come across a story that also interests you, chances + are, it will interest us too. + In general we prefer stories that some meat to them. We + encourage submitters to extend their posts, and perhaps + to offer some insight or explanation as to why they + thought their item was interesting, and what it means to + us. + todo: automatically generate a list of the available + news categories. + + 3. How to create an account? + - todo: explanation to write. + + 4. What can I do with an account? + - todo: check completed features (see below) as for now. + + 5. What is comment moderation and how does it work? + After a weblog gains some popularity, an inevitable question + shows up: "how do we sort the wheat from the chaff?". + The purpose of comment moderation is two-fold: + * To bring the really good comments to everyone's attention. + * To hide or get get rid of spam, flamebait and trolls. + In the latter, comment moderation provides a technical solution + to a social problem. + + 6. What is story moderation and how does it work? + Under construction. + + 7. Is the source code of this weblog engine available? + This site is powered by <A HREF="http://www.fsf.org/">Free Software</A>; including <A HREF="http://www.apache.org/">Apache</A>, + <A HREF="http://www.php.net/">PHP</A>, <A HREF="http://www.mysql.com/">MySQL</A> and <A HREF="http://www.linux.com/">Linux</A>. Therefor we have decided to make + the software engine of this site available under terms of + GPL. + + +* Disclaimer: +------------- + + - todo: general disclaimer + - Short version: comments are owned by the poster and this site is + not responsible for what tey say. + + </FONT> + </PRE> + <?php + $theme->footer(); +} + +switch($op) { + default: + defaultDisplay(); + break; +} + +?> \ No newline at end of file diff --git a/functions.inc b/functions.inc new file mode 100644 index 0000000000000000000000000000000000000000..7b65c2469ede8b3a8d6299ea681a8883749391d0 --- /dev/null +++ b/functions.inc @@ -0,0 +1,235 @@ +<? + +include "config.inc"; +$functions = 1; + +function dbconnect() { + include "config.inc"; + mysql_pconnect($dbhost, $dbuname, $dbpass); + @mysql_select_db("$dbname") or die ("Unable to select database"); +} + +function counter() { + dbconnect(); + mysql_query("UPDATE vars SET value=value+1 where name='totalhits'"); +} + +function cookiedecode($user) { + global $cookie; + $user = base64_decode($user); + $cookie = explode(":", $user); + return $cookie; +} + +function getusrinfo($user) { + global $userinfo; + $user2 = base64_decode($user); + dbconnect(); + $user3 = explode(":", $user2); + $result = mysql_query("SELECT uid, name, uname, email, femail, url, pass, storynum, umode, uorder, thold, noscore, bio, ublockon, ublock, theme, signature FROM users WHERE uname = '$user3[1]' AND pass = '$user3[2]'"); + if(mysql_num_rows($result)==1) { + $userinfo = mysql_fetch_array($result); + } else { + echo "<b>A problem occured</b><br>"; + } + return $userinfo; +} + +function FixQuotes ($what = "") { + $what = ereg_replace("'","''",$what); + while (eregi("\\\\'", $what)) { + $what = ereg_replace("\\\\'","'",$what); + } + return $what; +} + +function check_html($message) { + ## TODO + return $message; +} + +function filter_text($message, $strip="") { + ### TODO + return check_html($text, $strip); +} + +function formatTimestamp($time) { + ### Should be removed as soon as possible! + global $datetime; + ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})", $time, $datetime); + $datetime = date("l, F d, Y - h:i A", mktime($datetime[4],$datetime[5],$datetime[6],$datetime[2],$datetime[3],$datetime[1])); + return($datetime); +} + +function addRefer($url) { + dbconnect(); + + $query = "SELECT * FROM refer WHERE url = '$url'"; + $result = mysql_query($query); + + if ($site = mysql_fetch_object($result)) { + if ($site->status) { + $site->refers++; + $query = "UPDATE refer SET refers = '$site->refers', access_dt = '". time() ."' WHERE url = '$url'"; + $result = mysql_query($query); + } + } + else { + $query = "INSERT INTO refer (url, name, refers, create_dt, access_dt) VALUES ('$url', '', '1', '". time() ."', '". time() ."')"; + $result = mysql_query($query); + } +} + +function displayRelatedLinks($theme, $sid = 0) { + dbconnect(); + + $result = mysql_query("SELECT * FROM stories WHERE sid = $sid"); + + if ($story = mysql_fetch_object($result)) { + ### parse story for A HREF-tags: + $text = "$story->abstract $story->comments $story->article"; + while ($text = stristr($text, "<A HREF=")) { + $link = substr($text, 0, strpos($text, "</a>") + 4); + $text = stristr($text, "</A>"); + if (!stristr($link, "mailto:")) $content .= "<LI>$link</LI>"; + } + + ### default related links: + $content .= " <LI>More about <A HREF=\"search.php?category=$story->category\">$story->category</A>.</LI>"; + $content .= " <LI>Also by <A HREF=\"search.php?author=$story->aid\">$story->aid</A>.</LI>"; + + $theme->box("Related links", $content); + } +} + +function displayOldHeadlines($theme) { + global $user, $cookie; + + if ($cookie[3]) $result = mysql_query("SELECT sid, subject, time FROM stories ORDER BY time DESC LIMIT $cookie[3], 10"); + else $result = mysql_query("SELECT sid, subject, time FROM stories ORDER BY time DESC LIMIT 10, 10"); + + while ($story = mysql_fetch_object($result)) { + + if ($time != date("F jS", $story->time)) { + $content .= "<P><B>". date("l, F jS", $story->time) ."</B></P>"; + $time = date("F jS", $story->time); + } + + if ($user) { + $content .= "<LI><A HREF=\"article.php?sid=$story->sid"; + if (isset($cookie[4])) { $content .= "&mode=$cookie[4]"; } else { $content .= "&mode=threaded"; } + if (isset($cookie[5])) { $content .= "&order=$cookie[5]"; } else { $content .= "&order=0"; } + if (isset($cookie[6])) { $content .= "&thold=$cookie[6]"; } else { $content .= "&thold=0"; } + $content .= "\">$story->subject</A></LI>"; + } + else { + $content .= "<LI><A HREF=\"article.php?sid=$story->sid&mode=threaded&order=1&thold=0\">$story->subject</A></LI>"; + } + } + $content .= "<P ALIGN=\"right\">[ <A HREF=\"search.php\"><FONT COLOR=\"$theme->hlcolor2\">more</FONT></A> ]</P>"; + + $theme->box("Older headlines", $content); +} + +function displayNewHeadlines($theme, $num = 10) { + global $user, $cookie; + + dbconnect(); + + $content = ""; + $result = mysql_query("SELECT sid, subject FROM stories ORDER BY time DESC LIMIT $num"); + while(list($sid, $subject) = mysql_fetch_row($result)) { + if ($user) { + $content .= "<LI><A HREF=\"article.php?sid=$sid"; + if (isset($cookie[4])) { $content .= "&mode=$cookie[4]"; } else { $content .= "&mode=threaded"; } + if (isset($cookie[5])) { $content .= "&order=$cookie[5]"; } else { $content .= "&order=0"; } + if (isset($cookie[6])) { $content .= "&thold=$cookie[6]"; } else { $content .= "&thold=0"; } + $content .= "\">$subject</A></LI>"; + } + else { + $content .= "<LI><A HREF=\"article.php?sid=$sid&mode=threaded&order=1&thold=0\">$subject</A></LI>"; + } + } + $content .= "<P ALIGN=\"right\">[ <A HREF=\"search.php\"><FONT COLOR=\"$theme->hlcolor2\">more</FONT></A> ]</P>"; + $theme->box("Latest headlines", $content); +} + +function displayAdminblock($theme) { + $result = mysql_query("SELECT title, content FROM blocks"); + while (list($title, $content) = mysql_fetch_array($result)) { + $theme->box($title, nl2br($content)); + } +} + +function displayUserblock($theme) { + global $cookie; + dbconnect(); + if ($cookie[8]) { + $block = mysql_query("SELECT ublock FROM users WHERE uid = '$cookie[0]'"); + list($content) = mysql_fetch_row($block); + $content .= "<P ALIGN=\"right\">[ <A HREF=\"account.php?op=edithome\"><FONT COLOR=\"$theme->hlcolor2\">edit</FONT></A> | <A HREF=\"account.php?op=logout\"><FONT COLOR=\"$theme->hlcolor2\">logout</FONT></A> ]</P>"; + $theme->box("$cookie[1]'s box", $content); + } +} + +function displayAccount($theme) { + global $user, $cookie; + + if ($user) { + ### Display userblock if any: + displayUserblock(); + } + else { + $content = "<CENTER><FORM METHOD=\"post\" ACTION=\"account.php\">\n <P>Username:<BR><INPUT TYPE=\"text\" NAME=\"uname\" MAXLENGTH=\"50\" SIZE=\"12\"></P>\n<P>Password:<BR> <INPUT TYPE=\"password\" NAME=\"pass\" MAXLENGTH=\"25\" SIZE=\"12\"></P>\n<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Login\">\n</FORM>\n<P><A HREF=\"account.php\">Register</A> as new user.<BR><A HREF=\"account.php\">Forgot</A> your password?</P></CENTER>"; + $theme->box("Login", $content); + } +} + + +function displayAccountSettings($theme) { + global $user; + + if ($user) { + ### Display account settings: + $content .= "<LI><A HREF=\"account.php\">User info</A></LI>"; + $content .= "<LI><A HREF=\"account.php?op=edituser\">Edit user info</A></LI>"; + $content .= "<LI><A HREF=\"account.php?op=edithome\">Customize homepage</A></LI>"; + $content .= "<LI><A HREF=\"account.php?op=editcomm\">Customize comments</A></LI>"; + $content .= "<LI><A HREF=\"account.php?op=logout\">Logout</A></LI>"; + + ### Decode user cookie to extract name: + $cookie = cookiedecode($user); + + $theme->box("$cookie[1]'s acount", "$content"); + } +} + +function displayReferrals($theme, $number = 10) { + $count = 1; + + dbconnect(); + if ($number) { + $query = "SELECT * FROM refer ORDER BY refers DESC LIMIT $number"; + $result = mysql_query($query); + } + else { + $query = "SELECT * FROM refer ORDER BY refers DESC"; + $result = mysql_query($query); + } + + while (($site = mysql_fetch_object($result)) && ($count <= $number)) { + if ($site->name) $rval .= "$count. <A HREF=\"$site->url\">$site->name</A> ($site->refers)<BR>"; + else $rval .= "$count. <A HREF=\"$site->url\">$site->url</A> ($site->refers)<BR>"; + $count++; + } + + $theme->box("Referring sites", "$rval <P ALIGN=\"right\">[ <A HREF=\"refer.php#refer-info\"><FONT COLOR=\"$theme->hlcolor2\">info</FONT></A> | <A HREF=\"refer.php#refer-more\"><FONT COLOR=\"$theme->hlcolor2\">more</FONT></A> ]</P>"); +} + +function displayPoll($theme) { + global $answer, $answer1, $answer2, $answer3, $answer4, $answer5, $answer6, $id, $method, $section, $poll, $question; + // Pass the URI and FORM parameters along to poll.php. + $box = 1; + include "poll.php"; +} +?> \ No newline at end of file diff --git a/mysql.tables b/mysql.tables new file mode 100644 index 0000000000000000000000000000000000000000..a00124737c9ebf45bd1a949b1cd73f4ff62c6783 --- /dev/null +++ b/mysql.tables @@ -0,0 +1,396 @@ +# MySQL dump 7.1 +# +# Host: zind.net Database: dries +#-------------------------------------------------------- +# Server version 3.22.32 + +# +# Table structure for table 'authors' +# +CREATE TABLE authors ( + aid varchar(30) DEFAULT '' NOT NULL, + name varchar(50), + url varchar(60), + email varchar(60), + pwd varchar(12), + PRIMARY KEY (aid) +); + +# +# Dumping data for table 'authors' +# + +INSERT INTO authors VALUES ('Dries','Dries','http://www.buytaert.net/','dries@drop.org','iamgod'); +INSERT INTO authors VALUES ('Natrak','Natrak','','natrak@drop.org','db=god'); +INSERT INTO authors VALUES ('Jeroen','Jeroen','http://www.drop.org','jeroen@drop.org','W1ne gums!'); +INSERT INTO authors VALUES ('UnConeD','UnConeD','','unconed@drop.org','db=god'); + +# +# Table structure for table 'blocks' +# +CREATE TABLE blocks ( + id tinyint(4) DEFAULT '0' NOT NULL auto_increment, + author varchar(30), + title varchar(60), + content text, + PRIMARY KEY (id) +); + +# +# Dumping data for table 'blocks' +# + +INSERT INTO blocks VALUES (1,'','Development','<P>These links point to pages or sections that are not properly integrated yet. They are here for development or debuging purpose.</P>\r\n<LI><A HREF=\"queue.php\">submission queue</A></LI>\r\n'); + +# +# Table structure for table 'channel' +# +CREATE TABLE channel ( + id int(11) DEFAULT '0' NOT NULL auto_increment, + site varchar(255) DEFAULT '' NOT NULL, + url varchar(255) DEFAULT '' NOT NULL, + rdf varchar(255) DEFAULT '' NOT NULL, + timestamp int(11), + UNIQUE site (site), + UNIQUE url (url), + UNIQUE rdf (rdf), + PRIMARY KEY (id) +); + +# +# Dumping data for table 'channel' +# + +INSERT INTO channel VALUES (1,'Slashdot','http://www.slashdot.org/','http://www.slashdot.org/slashdot.rdf',958655281); +INSERT INTO channel VALUES (2,'Kuro5hin','http://www.kuro5hin.org/','http://www.kuro5hin.org/backend.rdf',958655282); +INSERT INTO channel VALUES (3,'Mozilla','http://www.mozilla.org/','http://www.mozilla.org/news.rdf',958655283); +INSERT INTO channel VALUES (4,'Geeknews','http://www.geeknews.net/','http://www.geeknews.net/geeknews.rdf',958655332); +INSERT INTO channel VALUES (5,'FreakTech','http://sunsite.auc.dk/FreakTech/','http://sunsite.auc.dk/FreakTech/FreakTech.rdf',958655343); +INSERT INTO channel VALUES (6,'Freshmeat','http://www.freshmeat.net/','http://www.freshmeat.net/backend/fm.rdf',958655343); +INSERT INTO channel VALUES (7,'Slashcode','http://www.slashcode.com/','http://www.slashcode.com/slashcode.rdf',958655344); +INSERT INTO channel VALUES (8,'Linux Today','http://linuxtoday.com/','http://linuxtoday.com/backend/my-netscape.rdf',958655345); +INSERT INTO channel VALUES (9,'BetaZine','http://www.betazine.com/','http://www.betazine.com/xml/betazine.txt',958655345); +INSERT INTO channel VALUES (10,'Dr. Dobb TechNetCast','http://www.technetcast.com/','http://www.technetcast.com/tnc_headlines.rdf',958655346); + +# +# Table structure for table 'comments' +# +CREATE TABLE comments ( + tid int(11) DEFAULT '0' NOT NULL auto_increment, + pid int(11) DEFAULT '0', + sid int(11) DEFAULT '0', + date datetime, + name varchar(60) DEFAULT '' NOT NULL, + email varchar(60), + url varchar(60), + host_name varchar(60), + subject varchar(60) DEFAULT '' NOT NULL, + comment text NOT NULL, + score tinyint(4) DEFAULT '0' NOT NULL, + reason tinyint(4) DEFAULT '0' NOT NULL, + PRIMARY KEY (tid) +); + +# +# Dumping data for table 'comments' +# + +INSERT INTO comments VALUES (1,0,9,'2000-05-03 20:47:54','','','','127.0.0.1','Re: my subject','my reply',0,2); +INSERT INTO comments VALUES (2,0,9,'2000-05-04 14:04:55','Dries','grmbl_at_buytaert.net','http://www.buytaert.net/','212.100.176.145','Re: my subject','a test post\r<br>\n\r<br>\nhi mom!',2,4); +INSERT INTO comments VALUES (3,0,2,'2000-05-04 15:17:59','Dries','grmbl_at_buytaert.net','http://www.buytaert.net/','212.100.176.145','Test comment','Let this be a test comment\r<br>\n--\r<br>\nHi dad!',2,4); +INSERT INTO comments VALUES (4,0,3,'2000-05-04 20:30:23','Dries','grmbl_at_buytaert.net','http://www.buytaert.net/','212.100.176.145','Re: Science: Controlling Your Computer with Your Brain','First I was a bit confused about the 2 slashed in the \'/not/\' but it looks like that was on purpose, right?\r<br>\n\r<br>\n-- Dries',2,5); +INSERT INTO comments VALUES (5,4,3,'2000-05-05 12:37:58','Jeroen','jeroen@drop.org','http://www.drop.org','212.100.176.145','Re: Science: Controlling Your Computer with Your Brain','I don\'t know Dries, I just copied it from Slashdot, don\'t ask me what it \r<br>\nmeans, those slashes.\r<br>\n\r<br>\nJeroen.',2,5); +INSERT INTO comments VALUES (6,0,5,'2000-05-06 01:44:22','Dries','grmbl_at_buytaert.net','http://www.buytaert.net/','195.95.26.59','Re: Getting involved in the PHP','As you can see there is a problem with quotes. In addition I forgot to close a TAG which fuxered up the rest of the page: a good reason to have the check-for-allowed-HTML-tags functions and the like.\r<br>\n\r<br>\nNight,\r<br>\n\r<br>\n-- Dries',1,3); +INSERT INTO comments VALUES (7,0,8,'2000-05-07 12:12:36','Dries','grmbl_at_buytaert_dot_net','http://www.buytaert.net/','195.95.26.206','Re: Oops. Forgot the URL','Oops. Looks like I forgot the URL to the MP3 player page. I tried to edit my story that didn\'t work: looks like we found yet another bug. I\'ll look into that later today.\r\n\r\nAnyway, the URL is: <A HREF=\"http://www.thinkgeek.com/brain/bazaar/mart/cart.cgi?action=view&type=item&itemid=325e\">http://www.thinkgeek.com/brain/bazaar/mart/cart.cgi?action=view&type=item&itemid=325e</A>.\r\n\r\n-- Dries',1,3); +INSERT INTO comments VALUES (8,0,8,'2000-05-07 12:19:21','Dries','grmbl_at_buytaert_dot_net','http://www.buytaert.net/','195.95.26.206','Re: Geez - alignment problem','Geez. The alignment of this page looks f*cked up as well. Gotta fix that too I\'m afraid. I sorta lost track about all \'open\' bugs.\r<br>\n\r<br>\n-- Dries',1,3); +INSERT INTO comments VALUES (9,8,8,'2000-05-08 08:39:20','Dries','grmbl_at_buytaert_dot_net','http://www.buytaert.net/','212.100.176.145','Re: Geez - alignment problem','Odd. When using Netscape(Linux) the alignment looks perfectly normal. I won\'t be able to fix it untill next weekend. Maybe one of the Microsofties could look into it? :-)\r<br>\n\r<br>\n-- Dries',1,3); +INSERT INTO comments VALUES (10,0,7,'2000-05-08 15:14:17','Jeroen','jeroen@drop.org','http://www.drop.org','212.100.176.145','Re: NASA snake-bots','Why do you always say ./ instead of /.?\r<br>\nIs it because you want to revolt? Or because you\r<br>\nthink it types easier?\r<br>\n\r<br>\n. . .Jeroen',1,3); +INSERT INTO comments VALUES (11,10,7,'2000-05-08 15:28:00','Jeroen','jeroen@drop.org','http://www.drop.org','212.100.176.145','Re: NASA snake-bots','Ahh man we really got to do something about this HTML \r<br>\nin our signatures. Are we gonna allow it or not, I had some\r<br>\ntrouble with it though. You see, i want, and don\'t ask me why,\r<br>\na signature that looks like this:\r<br>\n.<space><space>.<space>..<space>Jeroen\r<br>\nbut however, it seems that when you edit you signature in the\r<br>\n\"user account\"-section and save it, your signature allready\r<br>\ngets HTML-parsed. *still with me?* OK, now when you post\r<br>\na message it displays your signature correctly without the\r<br>\nHTML tags. Now when you post your message its parses it\r<br>\nand doesn\'t see no \'s between the dots so it displays\r<br>\nthe signature as if there were no HTML in it.\r<br>\nAnd that is not what I had in mind... :/\r<br>\n\r<br>\n. . .. Jeroen (now I specifically typed the HTML in my signature and didn\'t take the preview)',1,3); +INSERT INTO comments VALUES (12,2,9,'2000-05-08 18:04:23','','','','212.100.176.145','Re: my subject','UHM - how could the previous message show up? I did not reply to it nor does the date make sense.\r<br>\n\r<br>\n-- Dries',0,3); +INSERT INTO comments VALUES (13,0,10,'2000-05-10 10:24:41','natrak','natrak@zind-dot-net','http://natrak.net/','212.242.56.160','Re: Updates','Updates\r<br>\nby Dries on Tuesday, November 30, 1999 - 12:00 AM\r<br>\n\r<br>\nIsnt that the wrong date? Whats going on?:)\r<br>\nThe system time on zind is set to CET in case you wonder...\r<br>\n\r<br>\nAnd on the subject of bumber stickers get the 3rd one :PpP\r<br>\nCare are just that *smile*\r<br>\n\r<br>\nN.',1,3); +INSERT INTO comments VALUES (14,13,10,'2000-05-10 12:14:12','Dries','grmbl_at_buytaert_dot_net','http://www.buytaert.net/','212.100.176.145','Re: Updates','Umh, where (url?) do you see the wrong date? I can\'t find it here ...\r<br>\n\r<br>\nNo comment on your comment on the bumper stickers. :P\r<br>\n\r<br>\n-- Dries',1,3); +INSERT INTO comments VALUES (15,0,11,'2000-05-10 13:12:44','','','','213.224.83.6','Re: New Lara Croft model unveiled','One word.... <B>HUBBA HUBBA HUBBA</B>!\r<br>\n\r<br>\nOh wait, that\'s three :P\r<br>\n\r<br>\nWho needs Jeri Ryan (Seven of Nine) when you can have Lucy Clarkson? Drop the borg implants, gimme those combat boots!\r<br>\n',1,6); +INSERT INTO comments VALUES (16,15,11,'2000-05-10 16:16:05','Dries','grmbl_at_buytaert_dot_net','http://www.buytaert.net/','212.100.176.145','Re: New Lara Croft model unveiled','Just wondering: could this Anonymous Chicken stand up, raise his finger and tell us his name? :-)\r<br>\n\r<br>\n-- Dries',1,3); +INSERT INTO comments VALUES (17,0,11,'2000-05-14 12:32:26','Dries','grmbl_at_buytaert_dot_net','http://www.buytaert.net/','212.100.176.145','UnConeD','Your \"editors note\" thingy isn\'t themed very well. Apart from that, your theme looks very, very nice. :-)\r<br>\n\r<br>\n-- Dries',1,3); + +# +# Table structure for table 'headlines' +# +CREATE TABLE headlines ( + id int(11) DEFAULT '0' NOT NULL, + title varchar(255) DEFAULT '' NOT NULL, + link varchar(255) DEFAULT '' NOT NULL, + number int(3) DEFAULT '0' NOT NULL, + UNIQUE title (title), + UNIQUE link (link) +); + +# +# Dumping data for table 'headlines' +# + +INSERT INTO headlines VALUES (2,'WWW9 Conference - Amsterdam','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/16/12753/2799',5); +INSERT INTO headlines VALUES (2,'Lost in the shuffle: Microsoft\'s proposed remedies','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/15/12406/2367',7); +INSERT INTO headlines VALUES (2,'Sniff Your PC','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/16/01250/2618',6); +INSERT INTO headlines VALUES (2,'The US Gov\'t and Unix','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/17/53433/1439',4); +INSERT INTO headlines VALUES (3,'Scalable Vector Graphics','http://www.mozilla.org/projects/svg/',2); +INSERT INTO headlines VALUES (4,'Pizza! Pizza! - Linux Style\n','http://geeknews.net/index.shtml#954012496\n',13); +INSERT INTO headlines VALUES (3,'XPInstall Newsgroup','http://www.mozilla.org/news.html',15); +INSERT INTO headlines VALUES (3,'mozilla.party.jp','http://www.gimlay.org/~andoh/mozilla/flyer.html',11); +INSERT INTO headlines VALUES (3,'Mozilla World Tour','http://ftp.mozilla.org/pub/mozilla/l10n/lang/m14/',9); +INSERT INTO headlines VALUES (3,'Milestone 15 Released','http://www.mozilla.org/projects/seamonkey/release-notes/',4); +INSERT INTO headlines VALUES (3,'Mozilla Does SSL','http://docs.iplanet.com/docs/manuals/psm/psm-mozilla/index.html',12); +INSERT INTO headlines VALUES (3,'Beta Plans','http://www.mozilla.org/beta.html',10); +INSERT INTO headlines VALUES (3,'Mozilla Developer Meeting','http://www.alphanumerica.com/events/mozilla-conference-1.0/',8); +INSERT INTO headlines VALUES (3,'mozilla.party, 3.0','http://www.mozilla.org/party/2000/flyer.html',13); +INSERT INTO headlines VALUES (3,'Help Wanted','http://www.mozilla.org/help-wanted.html',5); +INSERT INTO headlines VALUES (4,'PowerPC Television Set-Top Boxes from IBM \n','http://geeknews.net/index.shtml#954013035\n',12); +INSERT INTO headlines VALUES (4,'KURT - a Real-Time modification to Linux\n','http://geeknews.net/index.shtml#954013187\n',11); +INSERT INTO headlines VALUES (4,'Hacking the CCM-202 Hybrid Cable Modem\n','http://geeknews.net/index.shtml#954024844\n',7); +INSERT INTO headlines VALUES (4,'AMD News & Info for the Masses\n','http://geeknews.net/index.shtml#954014581\n',9); +INSERT INTO headlines VALUES (4,'EPoX EP-7KXA Review\n','http://geeknews.net/index.shtml#954015133\n',8); +INSERT INTO headlines VALUES (4,'MS offers terms for DoJ settlement\n','http://geeknews.net/index.shtml#954013627\n',10); +INSERT INTO headlines VALUES (4,'Cool Cases?\n','http://geeknews.net/index.shtml#954040599\n',6); +INSERT INTO headlines VALUES (4,'Rack that iMac \n','http://geeknews.net/index.shtml#954057516\n',5); +INSERT INTO headlines VALUES (5,'140 gigabytes CDROM','http://sunsite.auc.dk/FreakTech/',1); +INSERT INTO headlines VALUES (6,'quick finder','http://core.freshmeat.net/search.php3',11); +INSERT INTO headlines VALUES (6,'Bahamut 1.4.3-RELEASE','http://freshmeat.net/news/2000/05/18/958623620.html',10); +INSERT INTO headlines VALUES (6,'TkDNS 0.2','http://freshmeat.net/news/2000/05/18/958632369.html',9); +INSERT INTO headlines VALUES (6,'mod_perl 1.24','http://freshmeat.net/news/2000/05/18/958632380.html',8); +INSERT INTO headlines VALUES (6,'xsu 0.1','http://freshmeat.net/news/2000/05/18/958632460.html',7); +INSERT INTO headlines VALUES (6,'Sportal 1.3','http://freshmeat.net/news/2000/05/18/958640264.html',4); +INSERT INTO headlines VALUES (6,'Pan 0.8.0','http://freshmeat.net/news/2000/05/18/958632486.html',6); +INSERT INTO headlines VALUES (6,'Arping 0.4','http://freshmeat.net/news/2000/05/18/958640941.html',2); +INSERT INTO headlines VALUES (7,'New Slashcode site for I18N/L10N/G11N','http://slashcode.com/article.pl?sid=00/05/01/1656221',8); +INSERT INTO headlines VALUES (7,'New Slashdot Servers','http://slashcode.com/article.pl?sid=00/04/28/1336253',10); +INSERT INTO headlines VALUES (7,'Missing \"From the Dept\"','http://slashcode.com/article.pl?sid=00/05/01/1659239',7); +INSERT INTO headlines VALUES (8,'Search','http://linuxtoday.com/search.php3',6); +INSERT INTO headlines VALUES (7,'Support for RSS 0.91','http://slashcode.com/article.pl?sid=00/05/01/1733225',4); +INSERT INTO headlines VALUES (7,'portald: Through a Firewall','http://slashcode.com/article.pl?sid=00/05/01/1723207',6); +INSERT INTO headlines VALUES (7,'Move to SourceForge','http://slashcode.com/article.pl?sid=00/04/28/1345220',9); +INSERT INTO headlines VALUES (1,'E3: Linux Still Waiting In The Wings','http://slashdot.org/article.pl?sid=00/05/17/189220',9); +INSERT INTO headlines VALUES (1,'Government Gives Microsoft Offer Thumbs Down','http://slashdot.org/article.pl?sid=00/05/18/0222239',6); +INSERT INTO headlines VALUES (1,'H.R. 3113: Spam Bounty Hunters Wanted','http://slashdot.org/article.pl?sid=00/05/17/2136258',7); +INSERT INTO headlines VALUES (1,'Dialectizer Shut Down','http://slashdot.org/article.pl?sid=00/05/17/1240227',10); +INSERT INTO headlines VALUES (1,'OpenBSD, Reductionist Design','http://slashdot.org/article.pl?sid=00/05/17/2117221',3); +INSERT INTO headlines VALUES (1,'Online Book About Nano/AI','http://slashdot.org/article.pl?sid=00/05/17/200231',5); +INSERT INTO headlines VALUES (1,'Main Linux distibutions port their Linux to IBM\'s S/390','http://slashdot.org/article.pl?sid=00/05/18/1218234',2); +INSERT INTO headlines VALUES (2,'U.S. House caves in to email hoax','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/17/162615/239',1); +INSERT INTO headlines VALUES (3,'Mozilla Turns 2','http://www.mozillazine.org/screenshots/alookback.html',7); +INSERT INTO headlines VALUES (3,'O\'Reilly OSS Convention','http://conferences.oreilly.com/oscon2000/sessions/mozilla.html',1); +INSERT INTO headlines VALUES (4,'Phezcount 1.7h \n','http://geeknews.net/index.shtml#954123999\n',2); +INSERT INTO headlines VALUES (4,'Old BetaNews?\n','http://geeknews.net/index.shtml#954057866\n',4); +INSERT INTO headlines VALUES (4,'Pyra looking to Hire\'a Few Good Geeks\n','http://geeknews.net/index.shtml#954061597\n',3); +INSERT INTO headlines VALUES (8,'Canada Computes: Get to the root of Linux&#37;s file system','http://linuxtoday.com/news_story.php3?ltsn=2000-05-18-005-20-PS-HL',3); +INSERT INTO headlines VALUES (8,'32BitsOnline: Rebel With a Clue: The Rebel.com OfficeServer (Netwinder) revisited.','http://linuxtoday.com/news_story.php3?ltsn=2000-05-18-007-20-PS-HW-SV',1); +INSERT INTO headlines VALUES (8,'Advogato: Open Source and Business: where do you draw the line?','http://linuxtoday.com/news_story.php3?ltsn=2000-05-18-003-20-OP-BZ-CY',5); +INSERT INTO headlines VALUES (9,'Wow! The new screenshots look great. The style suits polygons better than any ga','http://www.betazine.com/bz-news-reel.php3?inid=1281',7); +INSERT INTO headlines VALUES (9,'Neuron Entertainment, Inc. Starts Building Filbert Fledgling(TM)','http://www.betazine.com/bz-news-reel.php3?inid=1284',4); +INSERT INTO headlines VALUES (9,'Crossroads in open beta','http://www.betazine.com/bz-news-reel.php3?inid=1285',3); +INSERT INTO headlines VALUES (9,'Spheres 2000 - one from the little guy - seeking some testers','http://www.betazine.com/bz-news-reel.php3?inid=1280',8); +INSERT INTO headlines VALUES (9,'Microsoft today announced that the official Web site for Dungeon Siege','http://www.betazine.com/bz-news-reel.php3?inid=1282',6); +INSERT INTO headlines VALUES (9,'The World Called Hollow - now in open beta','http://www.betazine.com/bz-news-reel.php3?inid=1283',5); +INSERT INTO headlines VALUES (6,'the Anomy mail sanitizer 1.10','http://freshmeat.net/news/2000/05/18/958632554.html',5); +INSERT INTO headlines VALUES (6,'buffer 0.81','http://freshmeat.net/news/2000/05/18/958641773.html',1); +INSERT INTO headlines VALUES (10,'God and Computers: Donald Knuth','http://www.technetcast.com/tnc_program.html?program_id=50',7); +INSERT INTO headlines VALUES (10,'XML Standards Update','http://www.technetcast.com/tnc_program.html?program_id=70',5); +INSERT INTO headlines VALUES (10,'Tim O\'Reilly on Open Source and InfoWare','http://www.technetcast.com/tnc_program.html?program_id=48',8); +INSERT INTO headlines VALUES (10,'Perl Creator Larry Wall','http://www.technetcast.com/tnc_program.html?program_id=52',6); +INSERT INTO headlines VALUES (10,'Linus Torvalds At LinuxWorld','http://www.technetcast.com/tnc_program.html?program_id=72',4); +INSERT INTO headlines VALUES (7,'Undefined subroutine Error','http://slashcode.com/article.pl?sid=00/05/01/1727253',5); +INSERT INTO headlines VALUES (7,'Rewriting Slash from Scratch','http://slashcode.com/article.pl?sid=00/05/01/1735211',3); +INSERT INTO headlines VALUES (7,'Possible Bug in imagesize.pm','http://slashcode.com/article.pl?sid=00/05/01/1749224',2); +INSERT INTO headlines VALUES (1,'Court Rules For Connectix, Against Sony','http://slashdot.org/article.pl?sid=00/05/17/216207',8); +INSERT INTO headlines VALUES (1,'Alpha Release Of Red Hat\'s Itanium Distro','http://slashdot.org/article.pl?sid=00/05/18/0325253',4); +INSERT INTO headlines VALUES (1,'Boo No More','http://slashdot.org/article.pl?sid=00/05/18/1132240',1); +INSERT INTO headlines VALUES (3,'MathML Status Update','http://www.mozilla.org/projects/mathml/update.html',3); +INSERT INTO headlines VALUES (8,'Canada Computes: Open source made easy [Book Review]','http://linuxtoday.com/news_story.php3?ltsn=2000-05-18-006-20-PS-BR-RH',2); +INSERT INTO headlines VALUES (8,'Ottawa Citizen: Corel faces revenue crunch waiting for Linux sales: experts','http://linuxtoday.com/news_story.php3?ltsn=2000-05-18-004-20-PS-BZ-CL',4); +INSERT INTO headlines VALUES (7,'Hiatus Coming To A Close','http://slashcode.com/article.pl?sid=00/05/10/1516237',1); +INSERT INTO headlines VALUES (9,'Jubal Announces Third Millenium!','http://www.betazine.com/bz-news-reel.php3?inid=1286',2); +INSERT INTO headlines VALUES (9,'Wrath: Zerosen - is accepting alpha testers. Sign up today!','http://www.betazine.com/bz-news-reel.php3?inid=1287',1); +INSERT INTO headlines VALUES (10,'Playstation2 and Sega','http://www.technetcast.com/tnc_program.html?program_id=76',3); +INSERT INTO headlines VALUES (10,'Computer Crime','http://www.technetcast.com/tnc_program.html?program_id=79',1); +INSERT INTO headlines VALUES (2,'MLP: Dog Shoots Cat Dead, and Other Tales','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/17/164024/536',2); +INSERT INTO headlines VALUES (4,'Linksys Etherfast Cable/DSL Router Review\n','http://geeknews.net/index.shtml#954124498\n',1); +INSERT INTO headlines VALUES (10,'Danny Hillis on Game Software Development','http://www.technetcast.com/tnc_program.html?program_id=77',2); +INSERT INTO headlines VALUES (2,'More thoughts on filtering software','http://www.kuro5hin.org/?op=displaystory;sid=2000/5/17/1448/34580',3); +INSERT INTO headlines VALUES (6,'XMPS 0.1.0','http://freshmeat.net/news/2000/05/18/958640663.html',3); +INSERT INTO headlines VALUES (3,'Netscape 6 Preview Release 1','http://www.netscape.com/download/previewrelease.html',6); + +# +# Table structure for table 'poll' +# +CREATE TABLE poll ( + id int(11) DEFAULT '0' NOT NULL auto_increment, + question varchar(150), + answer1 varchar(100), + answer2 varchar(100), + answer3 varchar(100), + answer4 varchar(100), + answer5 varchar(100), + answer6 varchar(100), + votes1 tinyint(4), + votes2 tinyint(4), + votes3 tinyint(4), + votes4 tinyint(4), + votes5 tinyint(4), + votes6 tinyint(4), + status tinyint(4) DEFAULT '0', + PRIMARY KEY (id) +); + +# +# Dumping data for table 'poll' +# + +INSERT INTO poll VALUES (8,'What chips do you prefer?','Mama Mia\'s','Doritos','Chipsletten','Hula Hoops','Pepper n\' Salt','Regular salt',NULL,0,0,0,0,NULL,0); +INSERT INTO poll VALUES (3,'My favorite puppet is?','Kermit','Miss Piggy','Gonzo','Dr. Teeth','UnConeD','',0,0,1,NULL,5,NULL,0); +INSERT INTO poll VALUES (4,'I eat my waffles ...','in fork sized pieces','one square at the time','one huge bite','on a train','I hate waffles','huh?',1,3,9,1,NULL,NULL,0); +INSERT INTO poll VALUES (9,'Fear leads to anger, anger leads to hate, and hate leads to ...','war','revolution','suffering','migraine','alcohol abuse','',NULL,1,1,2,2,NULL,0); +INSERT INTO poll VALUES (10,'Fear leads to anger, anger leads to hate, and hate leads to ...','war','revolution','suffering','migraine','alcohol abuse','',1,2,4,3,5,NULL,0); +INSERT INTO poll VALUES (11,'What do you think Jeroen should learn, or get better in?','HTML','PHP','The Gimp (GFX)','English','All *sigh*','',NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO poll VALUES (12,'What have your friends done for you lately?','Provided an alibi.','\n Shared a drink, some laughs, and some code.','Sent me an email saying ILOVEYOU.','Asked me to fix their computer.','Well, if I had some friends, I\'m quite sure they would do wonderful things for me.','',1,3,NULL,1,1,NULL,1); + +# +# Table structure for table 'queue' +# +CREATE TABLE queue ( + qid smallint(5) unsigned DEFAULT '0' NOT NULL auto_increment, + uid mediumint(9) DEFAULT '0' NOT NULL, + uname varchar(40) DEFAULT '' NOT NULL, + subject varchar(100) DEFAULT '' NOT NULL, + article text, + timestamp int(11), + category varchar(64), + abstract text, + value int(11), + votes int(11), + PRIMARY KEY (qid) +); + +# +# Dumping data for table 'queue' +# + +INSERT INTO queue VALUES (1,1,'Dries','Delete this submission','Ingore me!',957626169,'Drop.org','Delete this submission, will ya! I was just checking whether the \'notify-on-new-submissions-through-submit.php\' feature was working.',0,0); +INSERT INTO queue VALUES (2,1,'Dries','Free porn!','Better luck next time.',957903654,'Girls','Forget about it ... this is yet another dummy submission! :)',0,0); + +# +# Table structure for table 'refer' +# +CREATE TABLE refer ( + url varchar(255) DEFAULT '' NOT NULL, + name varchar(255), + status int(1) DEFAULT '1', + refers int(7) DEFAULT '0', + create_dt int(11), + access_dt int(11), + PRIMARY KEY (url) +); + +# +# Dumping data for table 'refer' +# + +INSERT INTO refer VALUES ('http://www.buytaert.net/','buytaert.net',1,42,NULL,NULL); +INSERT INTO refer VALUES ('http://www.atlantis.lan/','',1,7,955955129,955957398); + +# +# Table structure for table 'stories' +# +CREATE TABLE stories ( + sid int(11) DEFAULT '0' NOT NULL auto_increment, + aid varchar(30) DEFAULT '' NOT NULL, + subject varchar(255), + time int(11), + abstract text, + comments text, + article text, + category varchar(128), + informant varchar(20) DEFAULT '' NOT NULL, + department varchar(128), + PRIMARY KEY (sid) +); + +# +# Dumping data for table 'stories' +# + +INSERT INTO stories VALUES (1,'Dries','My first news message!',957443997,'This is the very first internal beta of the drop.org engine. It\'s still beta-ware and bugs need to be tracked down during the next weeks.','','','Drop.org','Dries','track-those-bugs-down'); +INSERT INTO stories VALUES (2,'Dries','Test message',957445708,'Let this be a test message.','','Don\\\'t forget to mail your comments and bugreports to the mailinglist. ','Drop.org','Dries','test-like-you-have-never-tested-before'); +INSERT INTO stories VALUES (3,'Jeroen','Science: Controlling Your Computer with Your Brain',957464588,'Jeroen sent this article in - I\'m not sure how to title it. It\'s /not/ about your\r\n computer controlling your brain or anything. What it is about is <A HREF=\"http://www.rochester.edu/pr/releases/cs/bayliss.html\">some interesting research</A>\r\n that has gone on into detection of brain activity, and interpretation of that. So, that could\r\n mean sitting in front of your machine and thinking what you wanted to type, or open, or\r\n whatever - it could also mean that people stricken with certain types of paralysis could\r\n use computers more easily. ','','','Sience','Jeroen',''); +INSERT INTO stories VALUES (4,'Dries','Layout enhancements',957568850,'Evening. I just made a couple of enhancements to the PHP in order to make things look better on IE 4.0 @ 800x600. Hopefully, I didn\\\'t broke the look of other browsers: it is not easy to make things look perty on all browsers. If it doesn\\\'t display correct on your browser, then let us know. :)','','','Drop.org','Dries','we-make-things-look-better'); +INSERT INTO stories VALUES (5,'Dries','Getting involved in the PHP',957570149,'If you want to get involved in the PHP-part of this website you\'ll have to go through a learning phase. Sometimes it\'s a pain but once you get the design picture it is as easy as eating cake, or winegums for that matter.\r\n\r\nCheck the \'read more\' link for pointers to stuff one could easily start with.','','<LI>A check-all-posts-for-allowed-HTML-tags function should be written and incorporated in comments.php, submit.php, webboard.php</LI>\r\n<LI>A check-all-posts-for-flamebaits function should be written and incorporated in comments.php, submit.php and webboard.php</LI>\r\n<LI>The colors on the webboard are whacked up in some places. Instead of fixing them, we should come up with better names for these color variables and we should add some extra colors for highlighting purpose and such. Also, it would be nice if we could use a class for it rather then having to \'global\' a list of 5 or more colors: <CODE>global $bgcolor1, $bgcolor2, ..., $bgcolor3;</CODE> Just \'global\' an object <CODE>$colors</CODE> and use it like <CODE>$color->bgcolor, $color->tdcolor, $color->hlcolor</CODE>, etc. In other words ... an overhaul of the color stuff in *all* pages: it\'s not difficult and it\'s a good way to explore the code.</LI>\r\n<LI>Make a theme: plain easy. Just make a new directory in the /themes-directory and your theme will be automatically integrated.</LI>\r\n<LI>Replace the cookie stuff by PHP4-sessions.</LI>\r\n\r\nDon\'t be afraid to move things around or to change the naming of some parts. Just try to make/keep it consistent though.\r\n\r\nIn addition, you could also check the lengthy mail for things that are left to be done.\r\n\r\nOff to bed, I am. I won\'t even bother to spell-check this mail. ;)\r\n','Webdesign','Dries','don\'t-be-afraid-to-learn'); +INSERT INTO stories VALUES (6,'Dries','Quickies',957625993,'Want some <A HREF=\"http://www.vir2l.com/\">eye candy</A>? <A HREF=\"http://www.phpbuilder.com/\">PHPbuilder.com</A> features 2 new articles which is exactly what we have been waiting for: <A HREF=\"http://phpbuilder.com/columns/tim20000505.php3\">A Complete, Secure User Login System</A> (we need to partially rewrite our user system) and <A HREF=\"http://phpbuilder.com/columns/justin20000428.php3\">PHP and XML: using expat functions</A> (we might want to follow the new trends). PHP monkeys we are. I was pleased to find this <A HREF=\"http://rootprompt.org/article.php3?article=359\">Emacs Beginner\'s Tutorial</A>: I\'m printing it now so I have something to read in my bed tonight. I also ran accross a <A HREF=\"http://tortie.me.uiuc.edu/~dorneich/lego/misc/legoGeekCode2.txt\">legoGeekCode</A>. Oh, and it looks like they revamped the main page of <A HREF=\"http://www.linux.com/\">linux.com</A>.','','','Quickies','Dries','we-love-quickies'); +INSERT INTO stories VALUES (7,'Dries','NASA snake-bots',957685364,'<A HREF=\"http://www.nasa.gov/\">NASA</A>\'s been working on some pretty cool <A HREF=\"http://www.space.com/news/snakebots_000504.html\">snake-bots</A> for exploring outer space. All kinds of neat features and capabilities ... take a look at the pictures: they look practical and intriguing! (from ./) <I>Mammy, can I have one too?</I>','','','Space','Dries','please-don\'t-gain-consciousness'); +INSERT INTO stories VALUES (8,'Dries','From bumper stickers to mp3 players.',957693553,'When looking for <A HREF=\"http://www.thinkgeek.com/stuff/stickers.html\">cool bumper stickers</A> to decorate my new car (you know what to buy me know), I ran accross this <A HREF=\"http://www.thinkgeek.com/brain/bazaar/mart/cart.cgi?action=view&type=item&itemid=325e\">Portable MP3 Juke Box</A>.\r\nThis momma is portable and has over 80 hours (4.86 GB) of playback time! That\'s about 1200 songs or 120 CDs! $719 is a little expensive though. I gotta be carefull because I suffer from those impulsive just-buy-it-think-afterwards moods. I really need an MP3 player: when I listen to music - and I listen music quite much - I listen to my mp3 collection 80% of the time. I hardly use CDs or cassettes anymore, so from that point of view: an MP3 player would be the way to go.\r\nPS: I\'m just rambling a bit because I\'m sick of writing uni papers and because it\'s better to test drop.org with semi-useful stuff then with complete junk. Right? *g*\r\nAnyway, I guess I could use some <A HREF=\"http://www.thinkgeek.com/brain/bazaar/mart/cart.cgi?action=view&type=item&itemid=287d\">Penguin Mints</A>: three penguin mints are equivalent to about 1 coke in terms of caffeine.','','','Geeking','Dries','It\'s-gotta-be-mine-mine-mine'); +INSERT INTO stories VALUES (9,'Jeroen','Windows Source Code Proposal Confirmed',957790469,'ChipX86 writes: \\\"We\\\'ve all heard the rumors about Microsoft proposing to open source\r\n Windows. Now it appears to be confirmed. This article on MSNBC says that Microsoft\r\n would \\\'... provide open, timely and complete access to the parts of the Windows\r\n operating system code used by independent software companies to design their\r\n software applications to run on Windows.\\\'\\\" From the sound of it, this seems like more of a delay tactic than a\r\n straight proposal, but interesting nonetheless. (How open is \\\"open,\\\" by the way? What about \\\"Timely\\\"?) ','','','Announcements','Jeroen','from the please-don\\\'t-gain-consciousness'); +INSERT INTO stories VALUES (10,'Dries','Updates',957877356,'drop.org has been activated, Natrak smoothly switched things, the mailing list is now up and running and all droppies have receeived there personal drop.org e-mail address. Oh behave, baby! I fixed a few problems which actually allowed me to fix my typoes in my previous post: now, you can actually check what particular <A HREF=\"http://www.thinkgeek.com/stuff/stickers.html\">bumper stickers</A> I\'m interested in! *hint*hint*<BR>Oh, I installed a new poll and whilst doing so I discovered a few poll problems I\'ll have to fix.<BR>\r\nAnyway, I\'ll keep rambling as well as adding (semi-useless) posts to test our beast. My mom tends to talk to the walls ... at least I made some genetical progress, don\'t you think?','','','Drop.org','Dries','what-service-pack-you-say?'); +INSERT INTO stories VALUES (11,'Dries','New Lara Croft model unveiled',957955426,'16 year old Lucy Clarkson, <A HREF=\"http://www.core-design.com/newlara/newlara.htm\">seen here</A>, is the new Lara Croft model. Her vital statistics, you ask? 32 <B><BLINK>DD</BLINK></B> - 25 - 36. Lucy will make her debut appearance as Lara Croft at America\'s E3 show, Los Angeles this week, May 11-13.<BR>Well, what can I say ... she has what it needs: the breasts. *g*\r\n','UPDATE: <A HREF=\"http://www.core-design.com/\">core-design.com</A> has updated their website with more pictures of the new Lara Croft model. Check them <A HREF=\"http://www.core-design.com/lara.htm\">here</A>!','','Gaming','Dries','fieuw-pff-wow-dang-boink'); +INSERT INTO stories VALUES (12,'Dries','Theme system update',958130349,'Our theme system has been overhauled, revamped and recoded from scratch. Nuff said, just post your comments! :-)\r\n','','','Drop.org','Dries','we-had-to-go-through-all-the-files'); +INSERT INTO stories VALUES (13,'Dries','Pyramid Mistery',958131056,'If you are - just like me - interested in the pyramid mysteries then you should check out <A HREF=\"http://ourworld.compuserve.com/homepages/FDoernenburg/mainpyr.htm\">this page</A>. It is a somewhat skeptical page about the Great Pyramids and because of all those truly whacked mysteries they claim that they could not have been built by the ancient Egyptians. What do you think?','','','Science','Dries','living-farao\'s'); +INSERT INTO stories VALUES (14,'Dries','Make your own mech.',958313828,'Some guys over at <A HREF=\"http://www.mechaps.com/\">http://www.mechaps.com/</A> are building their own mech. Why you ask? <I>\"Why Not.\"</I>, they say. <I>\"To be cool. To be worshipped by nerds across the globe. They can be used for construction. Mechs may also be useful as a war machine, as they can be manufactured cheaply, are very modular, easy to repair, and inexpensive to operate.\"</I><BR>\r\n\'Some are born nuts, some achieve nutness, and some have nutness thrust upon them ...\' (DriesSpeare)','','','Geeking','Dries','you-gotta-be-kidding-me'); +INSERT INTO stories VALUES (15,'Dries','NASA Proposes Launch Solar Sail Vehicle For 2010',958395687,'Apparently, NASA plans to launch a <A HREF=\"http://www1.msfc.nasa.gov/NEWSROOM/news/releases/2000/00-150.html\"> solar sail spacecraft</A> in the year 2010 according to this press release. The the first trip\r\nwill take about 15 years, traveling about 58 miles per second. The sail will be 440 yards in width, and will be constructed of a reflective carbon-fiber material. \'This will be humankind\'s first planned venture outside our solar system,\' said Les Johnson, manager of Interstellar Propulsion Research at the Marshall Center. \'This is a\r\nstretch goal that is among the most audacious things we\'ve ever undertaken.\' Check the <A HREF=\"http://www1.msfc.nasa.gov/NEWSROOM/news/photos/2000/photos00-150.htm\">pictures</A>!<BR>If you want to do cool stuff, you want to work for/with NASA!','','','Space','Dries','we-have-an-overheated-cool-o-matic'); + +# +# Table structure for table 'users' +# +CREATE TABLE users ( + uid int(11) DEFAULT '0' NOT NULL auto_increment, + name varchar(60) DEFAULT '' NOT NULL, + uname varchar(15) DEFAULT '' NOT NULL, + email varchar(60) DEFAULT '' NOT NULL, + femail varchar(60) DEFAULT '' NOT NULL, + url varchar(100) DEFAULT '' NOT NULL, + pass varchar(20) DEFAULT '' NOT NULL, + storynum tinyint(4) DEFAULT '10' NOT NULL, + umode varchar(10) DEFAULT '' NOT NULL, + uorder tinyint(1) DEFAULT '0' NOT NULL, + thold tinyint(1) DEFAULT '0' NOT NULL, + noscore tinyint(1) DEFAULT '0' NOT NULL, + bio tinytext NOT NULL, + ublockon tinyint(1) DEFAULT '0' NOT NULL, + ublock text, + theme varchar(255) DEFAULT '' NOT NULL, + signature varchar(255) DEFAULT '' NOT NULL, + PRIMARY KEY (uid) +); + +# +# Dumping data for table 'users' +# + +INSERT INTO users VALUES (1,'D. Buytaert','Dries','grmbl@buytaert.net','dries_at_drop_dot_org','http://www.buytaert.net/','javastar',10,'flat',1,0,0,'Hi mom!',0,'','UnConeD','Hi dad!'); +INSERT INTO users VALUES (2,'Kjartan Mannes','natrak','natrak@zind.net','natrak@zind-dot-net','http://natrak.net/','lovesilse',10,'nested',0,0,0,'Hmmmm.... coming soon? :P\r\n',0,'','UnConeD','N.'); +INSERT INTO users VALUES (3,'Jeroen Bensch','Jeroen','jbensch@advalvas.be','jeroen@drop.org','http://www.drop.org','Pass th1s!',15,'threaded',1,0,0,'I am a student computer science at the university of Antwerp in Belgium (Europe).<BR>\r\nI am 1.86m tall, have brown hair and blue/green eyes... anything else?',0,'','UnConeD','. . .. Jeroen'); +INSERT INTO users VALUES (4,'Steven Wittens','UnConeD','unconed@projectx.mx.dk','','','A3h26gv4m9r',10,'',0,0,0,'',0,'','UnConeD','4096'); + +# +# Table structure for table 'webboard' +# +CREATE TABLE webboard ( + topic_id int(11) DEFAULT '0' NOT NULL auto_increment, + parent_id int(11) DEFAULT '0', + root_id int(11) DEFAULT '0', + subject varchar(255), + message text, + create_dt int(11) DEFAULT '0', + author varchar(255), + hostname varchar(255), + PRIMARY KEY (topic_id) +); + +# +# Dumping data for table 'webboard' +# + +INSERT INTO webboard VALUES (1,0,1,'First message','Euh ... hi mom!',957442705,'Dries','212.100.176.145'); +INSERT INTO webboard VALUES (2,0,2,'just testing of course what else?','I have allready found some bugs, how about you?\r\n\r\nJeroen.',957454049,'Jeroen','212.100.176.145'); +INSERT INTO webboard VALUES (3,0,3,'just testing of course what else?','I have allready found some bugs, how about you?\r\n\r\nJeroen.',957454098,'Jeroen','212.100.176.145'); +INSERT INTO webboard VALUES (4,3,3,'Re: just testing of course what else? [NT]','',957454259,'Jeroen','212.100.176.145'); +INSERT INTO webboard VALUES (5,0,5,'happy testing','The webboard should be sorta stable as it is clearly the good ol\' atlantis.lan webboard. I made a few changes though to fix (?) the login problem and to allow anonymous posters (alas: Anonymous Chickens) to post.\r\n\r\n-- Dries',957457010,'Dries','212.100.176.145'); +INSERT INTO webboard VALUES (6,5,5,'Re: happy testing','Well it is very stable but the colors aren\'t right.\r\nIt is all bordeaux and grey when displaying the webboard\r\nthreaded, but if you select a message to read it the bordeax\r\ndissapears. This can\'t be right can it?\r\n\r\n. . .Jeroen',957523760,'Jeroen','212.100.176.145'); +INSERT INTO webboard VALUES (7,6,5,'Re: Re: happy testing','Your right: it\'s a bug. We should make a list of all bugs - I\'ll try to fix it tonight.\r\n\r\n-- Dries',957529636,'Dries','195.162.202.97'); +INSERT INTO webboard VALUES (8,0,8,'*pompidom* [NT]','',958579616,'Anonymous Chicken','212.100.176.145'); + diff --git a/password.dict b/password.dict new file mode 100644 index 0000000000000000000000000000000000000000..0267964a883c635fb8a13e2aba53154ff1ac25e7 --- /dev/null +++ b/password.dict @@ -0,0 +1,16 @@ +foo +bar +guy +neo +geek +nerd +fish +hack +star +moon +hero +cola +girl +fish +java +boss diff --git a/poll.php b/poll.php new file mode 100644 index 0000000000000000000000000000000000000000..e1e530b5e6cc803c505a258c738ae5d10a179c55 --- /dev/null +++ b/poll.php @@ -0,0 +1,278 @@ +<? + + ### poll.php.inc specific settings: + + # Use cookie: + # (1 = enabled, 0 = disabled) + $cookieUse = 1; // 1 = Enabled 0=Disabled + + # When should cookie expire: + // $cookieExpire = 604800; // Expires in a week + $cookieExpire = 60; // Expires in a week + + # Bar image we should use: + $barImage = "./images/poll.gif"; // Image to use + + # Bar height: + $barHeight = "15"; // Image height + + /* + CREATE TABLE poll ( + id int(11) DEFAULT '0' NOT NULL auto_increment, + question varchar(150), + answer1 varchar(100), + answer2 varchar(100), + answer3 varchar(100), + answer4 varchar(100), + answer5 varchar(100), + answer6 varchar(100), + votes1 tinyint(4), + votes2 tinyint(4), + votes3 tinyint(4), + votes4 tinyint(4), + votes5 tinyint(4), + votes6 tinyint(4), + status tinyint(4) DEFAULT '0', + PRIMARY KEY (id) + ); + */ + + +function deletePoll($id) { + dbconnect(); + $query = "DELETE FROM poll WHERE id = $id"; + $result = mysql_query($query); +} + +function enablePoll($id) { + dbconnect(); + $query = "UPDATE poll SET status = 0 WHERE status = 1"; + $result = mysql_query($query); + + $query = "UPDATE poll SET status = 1 WHERE id = $id"; + $result = mysql_query($query); +} + +function disablePoll($id) { + dbconnect(); + $query = "UPDATE poll SET status = 0 WHERE id = $id"; + $result = mysql_query($query); +} + +function castVote($vote) { + dbconnect(); + $query = "SELECT * FROM poll WHERE status = 1"; + $result = mysql_query($query); + if ($poll = mysql_fetch_object($result)) { + $vote = "votes$vote"; + $result = $poll->$vote + 1; + $query = "UPDATE poll SET $vote = '$result' WHERE id = $poll->id"; + $result = mysql_query($query); + } +} + +function addPoll($question, $answer1, $answer2, $answer3 = "", $answer4 = "", $answer5 = "", $answer6 = "") { + dbconnect(); + $query = "INSERT INTO poll (question, answer1, answer2, answer3, answer4, answer5, answer6) VALUES ('$question', '$answer1', '$answer2', '$answer3', '$answer4', '$answer5', '$answer6')"; + $result = mysql_query($query); +} + +function updatePoll($id, $question, $answer1, $answer2, $answer3 = "", $answer4 = "", $answer5 = "", $answer6 = "") { + dbconnect(); + $query = "UPDATE poll SET question = '$question', answer1 = '$answer1', answer2 = '$answer2', answer3 = '$answer3', answer4 = '$answer4', answer5 = '$answer5', answer6 = '$answer6' WHERE id = $id"; + $result = mysql_query($query); +} + +function getPoll($id) { + dbconnect(); + $query = "SELECT * FROM poll WHERE id = $id"; + $result = mysql_query($query); + if ($poll = mysql_fetch_object($result)) return $poll; +} + +function getActivePoll() { + dbconnect(); + $query = "SELECT * FROM poll WHERE status = 1"; + $result = mysql_query($query); + if ($poll = mysql_fetch_object($result)) return $poll->id; +} + +function getPollArray() { + dbconnect(); + + $query = "SELECT * FROM poll"; + $result = mysql_query($query); + + $index = 0; + while ($poll = mysql_fetch_object($result)) { + $rval[$index] = $poll; + $index++; + } + + return $rval; +} + +function displayForm() { + global $PHP_SELF; + + if ($poll = getPoll(getActivePoll())) { + $rval = "<P ALIGN=\"center\"><B>$poll->question</B></P>\n"; + $rval .= "<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=vote\">\n"; + if ($poll->answer1) $rval .= " <INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"1\"> $poll->answer1<BR>\n"; + if ($poll->answer2) $rval .= " <INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"2\"> $poll->answer2<BR>\n"; + if ($poll->answer3) $rval .= " <INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"3\"> $poll->answer3<BR>\n"; + if ($poll->answer4) $rval .= " <INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"4\"> $poll->answer4<BR>\n"; + if ($poll->answer5) $rval .= " <INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"5\"> $poll->answer5<BR>\n"; + if ($poll->answer6) $rval .= " <INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"6\"> $poll->answer6<BR>\n"; + $rval .= " <BR><CENTER><INPUT TYPE=\"submit\" NAME=\"vote\" VALUE=\"Vote\"></CENTER>\n"; + $rval .= "</FORM>"; + } + else { + $rval = "There is currently no poll available."; + } + return $rval; +} + +function displayResult($id) { + global $PHP_SELF, $barImage; + + if ($poll = getPoll($id)) { + # total number of votes: + $total = $poll->votes1 + $poll->votes2 + $poll->votes3 + $poll->votes4 + $poll->votes5 + $poll->votes6; + $rval = "<P ALIGN=\"center\"><B>$poll->question</B></P>\n"; + + if ($total) { + # percentage: + if ($poll->answer1) { + $per1 = round($poll->votes1 / $total * 100); + $wid1 = ($per1) ? $per1 : 1; + $rval .= "<P>$poll->answer1<BR><IMG SRC=\"$barImage\" HEIGHT=\"8\" WIDTH=\"$wid1\"> $poll->votes1 ($per1 %)</P>"; + } + if ($poll->answer2) { + $per2 = round($poll->votes2 / $total * 100); + $wid2 = ($per2) ? $per2 : 1; + $rval .= "<P>$poll->answer2<BR><IMG SRC=\"$barImage\" HEIGHT=\"8\" WIDTH=\"$wid2\"> $poll->votes2 ($per2 %)</P>"; + } + if ($poll->answer3) { + $per3 = round($poll->votes3 / $total * 100); + $wid3 = ($per3) ? $per3 : 1; + $rval .= "<P>$poll->answer3<BR><IMG SRC=\"$barImage\" HEIGHT=\"8\" WIDTH=\"$wid3\"> $poll->votes3 ($per3 %)</P>"; + } + if ($poll->answer4) { + $per4 = round($poll->votes4 / $total * 100); + $wid4 = ($per4) ? $per4 : 1; + $rval .= "<P>$poll->answer4<BR><IMG SRC=\"$barImage\" HEIGHT=\"8\" WIDTH=\"$wid4\"> $poll->votes4 ($per4 %)</P>"; + } + if ($poll->answer5) { + $per5 = round($poll->votes5 / $total * 100); + $wid5 = ($per5) ? $per5 : 1; + $rval .= "<P>$poll->answer5<BR><IMG SRC=\"$barImage\" HEIGHT=\"8\" WIDTH=\"$wid5\"> $poll->votes5 ($per5 %)</P>"; + } + if ($poll->answer6) { + $per6 = round($poll->votes6 / $total * 100); + $wid6 = ($per6) ? $per6 : 1; + $rval .= "<P>$poll->answer6<BR><IMG SRC=\"$barImage\" HEIGHT=\"8\" WIDTH=\"$wid6\"> $poll->votes6 ($per6 %)</P>"; + } + } + $rval .= "<BR><P>Total votes: $total</P>"; + } + else { + $rval = "There is currently no poll available."; + } + return $rval; +} + +function adminPolls() { + global $PHP_SELF; + + $polls = getPollArray(); + $rval = "<TABLE WIDTH=\"100%\">\n"; + for (reset($polls); $poll = current($polls); next($polls)) { + $status = ($poll->status) ? "<TD WIDTH=\"20\"><FONT COLOR=\"blue\" SIZE=\"+2\">*</FONT></TD><TD WIDTH=\"40\"><A HREF=\"$PHP_SELF?section=poll&method=disable&id=$poll->id\">disable</A></TD>" : "<TD WIDTH=\"20\"><FONT COLOR=\"yellow\" SIZE=\"+2\">*</FONT></TD><TD WIDTH=\"40\" ><A HREF=\"$PHP_SELF?section=poll&method=enable&id=$poll->id\">enable</A></TD>"; + $rval .= " <TR><TD WIDTH=\"50%\" >$poll->question</TD>$status<TD WIDTH=\"40\"><A HREF=\"$PHP_SELF?section=poll&method=result&id=$poll->id\">view</A></TD><TD WIDTH=\"40\"><A HREF=\"$PHP_SELF?section=poll&method=edit&id=$poll->id\">edit</A></TD><TD WIDTH=\"40\"><A HREF=\"$PHP_SELF?section=poll&method=delete&id=$poll->id\">delete</A></TD></TR>\n"; + } + $rval .= "</TABLE>"; + + return $rval; +} + +if (!$box) { + include "functions.inc"; + include "theme.inc"; + $theme->header(); +} + +if ($section == "poll") { + include "authentication.inc"; + if ($method == "add") { + if ($admin) { + addPoll($question, $answer1, $answer2, $answer3, $answer4, $answer5, $answer6); + $theme->box("Poll manager", "<P><B><U>Status:</U></B> new poll added.</P>\n<P><B><U>Overview:</U></B></P>\n". adminPolls() ."<P><B><U>Add poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=add\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Add poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); + } + else if ($method == "edit") { + if ($admin) { + $poll = getPoll($id); + $theme->box("Poll manager", "<P><B><U>Edit poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=update&id=$poll->id\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\" VALUE=\"$poll->question\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\" VALUE=\"$poll->answer1\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\" VALUE=\"$poll->answer2\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\" VALUE=\"$poll->answer3\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\" VALUE=\"$poll->answer4\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\" VALUE=\"$poll->answer5\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\" VALUE=\"$poll->answer6\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Update poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); + } + else if ($method == "enable") { + if ($admin) { + enablePoll($id); + $theme->box("Poll manager", "<P><B><U>Status:</U></B> poll enabled.</P>\n<P><B><U>Overview:</U></B></P>\n". adminPolls() ."<P><B><U>Add poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=add\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Add poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); + } + else if ($method == "delete") { + if ($admin) { + deletePoll($id); + $theme->box("Poll manager", "<P><B><U>Status:</U></B> poll deleted.</P>\n<P><B><U>Overview:</U></B></P>\n". adminPolls() ."<P><B><U>Add poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=add\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Add poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); + } + else if ($method == "disable") { + if ($admin) { + disablePoll($id); + $theme->box("Poll manager", "<P><B><U>Status:</U></B> poll disabled.</P>\n<P><B><U>Overview:</U></B></P>\n". adminPolls() ."<P><B><U>Add poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=add\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Add poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); } + else if ($method == "update") { + if ($admin) { + updatePoll($id, $question, $answer1, $answer2, $answer3, $answer4, $answer5, $answer6); + $theme->box("Poll manager", "<P><B><U>Status:</U></B> poll updated.</P>\n<P><B><U>Overview:</U></B></P>\n". adminPolls() ."<P><B><U>Add poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=add\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Add poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); + } + else if ($method == "result") { + if ($id) $theme->box("Voting poll", displayResult($id)); + else $theme->box("Voting poll", displayResult(getActivePoll())); + } + else if ($method == "vote") { + if ($poll) { + $theme->box("Voting poll", displayResult(getActivePoll()) ."<P><B>Note:</B> you have voted already recently.</P>"); + } + else { + castVote($answer); + $theme->box("Voting poll", displayResult(getActivePoll())); + } + } + else { + if ($admin) { + $theme->box("Poll manager", "<P><B><U>Overview:</U></B></P>\n". adminPolls() ."<P><B><U>Add poll:</U></B></P>\n<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=poll&method=add\">\n<TABLE>\n <TR><TD>Question:</TD><TD><INPUT TYPE=\"text\" NAME=\"question\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 1:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer1\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 2:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer2\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 3:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer3\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 4:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer4\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 5:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer5\" SIZE=\"35\"></TD></TR>\n <TR><TD>Answer 6:</TD><TD><INPUT TYPE=\"text\" NAME=\"answer6\" SIZE=\"35\"></TD></TR>\n <TR><TD ALIGN=\"center\" COLSPAN=\"2\"><INPUT TYPE=\"submit\" VALUE=\"Add poll\" NAME=\"add\"> <INPUT TYPE=\"reset\" VALUE=\"Reset\"></TD></TR>\n</TABLE>\n</FORM>"); + } + else $theme->box("Failed", "You don't have permission to access this section.<P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>"); + } +} +else { + if ($poll) { + $theme->box("Voting poll", displayResult(getActivePoll()) ."<P><B>Note:</B> you have voted already recently.</P>"); + } + else { + $theme->box("Voting poll", displayForm() ."<P ALIGN=\"right\">[ <A HREF=\"$PHP_SELF?section=poll&method=result\"><FONT COLOR=\"$theme->hlcolor2\">results</FONT></A> ]</P>"); + } +} + +if (!$box) $theme->footer(); +?> \ No newline at end of file diff --git a/queue.php b/queue.php new file mode 100644 index 0000000000000000000000000000000000000000..2964b6098aba2f07b30381ec1820049f7e6a4fe3 --- /dev/null +++ b/queue.php @@ -0,0 +1,50 @@ +<? + +function displayMain() { + include "functions.inc"; + include "theme.inc"; + + + dbconnect(); + + $result = mysql_query("SELECT * FROM queue"); + + $content .= "<P>Anyone who happens by, and has some news or some thoughts they'd like to share, can <A HREF=\"submit.php\">submit</A> new content for consideration. After someone has submitted something, their story is added to a queue. All registered users can access this list of pending stories, that is, stories that have been submitted, but do not yet appear on the public front page. Those registered users can vote whether they think the story should be posted or not. When enough people vote to post a story, the story is pushed over the threshold and up it goes on the public page. On the other hand, when too many people voted to drop a story, the story will be trashed.</P><P>Basically, this means that you, the community, are truly the editors of this site as you have the final decision on the content of this site. It's you judging the overall quality of a story. But remember, vote on whether the story is interesting, not on whether you agree with it or not. If the story goes up, you can disagree all you want, but don't vote 'no' because you think the ideas expressed are wrong. Instead, vote 'no' when you think the story is plain boring.</P>"; + $content .= "<TABLE BORDER=\"0\" CELLSPACING=\"2\" CELLPADDING=\"2\">\n"; + $content .= " <TR BGCOLOR=\"$bgcolor1\"><TD>Subject</TD><TD>Category</TD><TD>Date</TD><TD>Author</TD><TD>Score</TD></TR>\n"; + + while ($submission = mysql_fetch_object($result)) { + $content .= " <TR><TD WIDTH=\"100%\"><A HREF=\"queue.php?op=view&qid=$submission->qid\">$submission->subject</A></TD><TD>$submission->category</TD><TD NOWRAP>". date("Y-m-d h:m:s", $submission->timestamp) ."</TD><TD NOWRAP>$submission->uname</TD><TD>O</TD></TR>\n"; + } + + $content .= "</TABLE>\n"; + + $theme->header(); + $theme->box("Pending stories", $content); + $theme->footer(); +} + +function displaySubmission($qid) { + include "functions.inc"; + include "theme.inc"; + + dbconnect(); + + $result = mysql_query("SELECT * FROM queue WHERE qid = $qid"); + $submission = mysql_fetch_object($result); + + $theme->header(); + $theme->article("", $submission->uname, $submission->time, $submission->subject, "", $submission->abstract, "", $submission->article, "[ <A HREF=\"javascript: history.back()\"><FONT COLOR=\"$theme->hlcolor2\">back</FONT></A> ]"); + $theme->footer(); +} + +switch($op) { + case "view": + displaySubmission($qid); + break; + default: + displayMain(); + break; +} + +?> \ No newline at end of file diff --git a/rdf.php b/rdf.php new file mode 100644 index 0000000000000000000000000000000000000000..adc38dd76435e46f06e125655ae175af08222ede --- /dev/null +++ b/rdf.php @@ -0,0 +1,247 @@ +<? + +include "functions.inc"; +include "theme.inc"; + +class rdf { + // Contains the raw rdf file: + var $data; + + // Contains the parsed rdf file: + var $title; // website name + var $items; // latest headlines + + function url2sql($site, $timout = 10) { + ### Connect to database: + dbconnect(); + + ### Get channel info: + $result = mysql_query("SELECT * FROM channel WHERE site = '$site'"); + + if ($channel = mysql_fetch_object($result)) { + ### Decode URL: + $url = parse_url($channel->rdf); + $host = $url[host]; + $port = $url[port] ? $url[port] : 80; + $path = $url[path]; + + // print "<PRE>$url - $host - $port - $path</PRE>"; + + ### Retrieve data from website: + $fp = fsockopen($host, $port, &$errno, &$errstr, $timout); + + if ($fp) { + ### Get data from URL: + fputs($fp, "GET $path HTTP/1.0\n"); + fputs($fp, "User-Agent: headline grabber\n"); + fputs($fp, "Host: ". $host ."\n"); + fputs($fp, "Accept: */*\n\n"); + + while(!feof($fp)) $data .= fgets($fp, 128); + + // print "<PRE>$data</PRE><HR>"; + + if (strstr($data, "200 OK")) { + + ### Remove existing entries: + $result = mysql_query("DELETE FROM headlines WHERE id = $channel->id"); + + ### Strip all 'junk': + $data = ereg_replace("<?xml.*/image>", "", $data); + $data = ereg_replace("</rdf.*", "", $data); + $data = chop($data); + + ### Iterating through our data processing each entry/item: + $items = explode("</item>", $data); + $number = 0; + + for (reset($items); $item = current($items); next($items)) { + ### Extract data: + $link = ereg_replace(".*<link>", "", $item); + $link = ereg_replace("</link>.*", "", $link); + $title = ereg_replace(".*<title>", "", $item); + $title = ereg_replace("</title>.*", "", $title); + + ### Clean headlines: + $title = stripslashes(fixquotes($title)); + + ### Count the number of stories: + $number += 1; + + ### Insert item in database: + $result = mysql_query("INSERT INTO headlines (id, title, link, number) VALUES('$channel->id', '$title', '$link', '$number')"); + } + + ### Mark channels as being updated: + $result = mysql_query("UPDATE channel SET timestamp = '". time() ."' WHERE id = $channel->id"); + } + else print "<HR>RDF parser: 404 error?<BR><BR><PRE>$data</PRE><HR>"; + } + } + } + + function displayHeadlines($site, $timout = 1800) { + global $theme; + + ### Connect to database: + dbconnect(); + + ### Get channel info: + $result = mysql_query("SELECT * FROM channel WHERE site = '$site'"); + + if ($channel = mysql_fetch_object($result)) { + + ### Check to see whether we have to update our headlines first: + if (time() - $channel->timestamp > $timout) $this->url2sql($site); + + ### Grab headlines from database: + $result = mysql_query("SELECT * FROM headlines WHERE id = $channel->id ORDER BY number"); + while ($headline = mysql_fetch_object($result)) { + $content .= "<LI><A HREF=\"$headline->link\">$headline->title</A></LI>"; + } + ### Add timestamp: + $update = round((time() - $channel->timestamp) / 60); + $content .= "<P ALIGN=\"right\">[ <A HREF=\"rdf.php?op=reset&id=$channel->id\"><FONT COLOR=\"$theme->hlcolor2\">reset</FONT></A> | updated $update min. ago ]</P>"; + + ### Display box: + $theme->box("$channel->site", $content); + } + else print "<P>Warning: something whiched happened: specified channel could not be found in database.</P>"; + } + + function addChannel($site, $url, $rdf) { + ### Connect to database: + dbconnect(); + + ### Add channel: + $query = mysql_query("INSERT INTO channel (site, url, rdf, timestamp) VALUES ('$site', '$url', '$rdf', now())"); + } + + function resetChannel($id) { + ### Connect to database: + dbconnect(); + + ### Delete headlines: + $result = mysql_query("DELETE FROM headlines WHERE id = $id"); + + ### Mark channel as invalid to enforce an update: + $result = mysql_query("UPDATE channel SET timestamp = 42 WHERE id = $id"); + } +} + +function adminAddChannel() { + ?> + <HR> + <FORM ACTION="rdf.php" METHOD="post"> + <P> + <B>Site name:</B><BR> + <INPUT TYPE="text" NAME="site" SIZE="50"> + </P> + + <P> + <B>URL:</B><BR> + <INPUT TYPE="text" NAME="url" SIZE="50"> + </P> + + <P> + <B>RDF file:</B><BR> + <INPUT TYPE="text" NAME="rdf" SIZE="50"> + </P> + <INPUT TYPE="submit" NAME="op" VALUE="Add RDF channel"> + </FORM> + <? +} + +function adminDisplayAll() { + ### Connect to database: + dbconnect(); + + ### Get channel info: + $result = mysql_query("SELECT * FROM channel ORDER BY id"); + + print "<TABLE BORDER=\"0\">"; + while ($channel = mysql_fetch_object($result)) { + if ($state % 3 == 0) print " <TR>"; + + print " <TD ALIGN=\"center\" VALIGN=\"top\" WIDTH=\"33%\">"; + $rdf = new rdf(); + $rdf->displayHeadlines($channel->site); + print " </TD>"; + + if ($state % 3 == 2) print " </TR>"; + + $state += 1; + } + print "</TABLE>"; +} + +function adminDisplayInfo() { + ?> + <H1>Headlines</H1> + <H3>Concept</H3> + <P> + RDF support can change a portal in a significant way: third party websites + can become <I>channels</I> in our portal without having to make 'real' deals + and with a minimum of extra work. All they need to do is to publish an RDF, + so we can include their latest updates in our portal. Yet another easy way + to add content. + </P> + <P> + That in and of itself is interesting, but it's not half so interesting as + the fact that other sites can include our headlines as well. Anyone can + grab our RDF, anyone can parse it, and anyone can put a list of our + headlines. Yet another way to generate more traffic. + </P> + + <H3>Features</H3> + <P> + One of the most important features (if not the most important) is + chaching support. To avoid bogging down other portals with a continous + stream of headline grabbing, all headlines are cached and refreshed once + in a while. The 'while' can be costumized but is set to 30 minutes by + default. + </P> + <P> + You can reset a channel, that is force to update a channels headlines + and you can add new channels. If you don't know what channel to add, + check <A HREF="http://www.xmltree.com/">http://www.xmltree.com/</A>. + Make sure you don't add anything except valid RDF files! + </P> + + <H3>Status</H3> + <P> + The RDF parser is still in beta and needs proper integration in the engine. + Until then this test page generates nothing more then an overview off all + subscribed channels along with their headlines: handy for news squatting. ;) + </P> + <P> + RDF files are non-proprietary and publically available. Unfortunatly, + RDF is not the only standard: another commonly used format is RSS which + would be nice to support as well. + </P> + <HR> + <? +} + +$theme->header(); + +switch($op) { + case "reset": + $channel = new rdf(); + $channel->resetChannel($id); + print "<H2>channel has been reset</H2>"; + print "<A HREF=\"rdf.php\">back</A>"; + break; + case "Add RDF channel": + $channel = new rdf(); + $channel->addChannel($site, $url, $rdf); + // fall through: + default: + adminDisplayInfo(); + adminDisplayAll(); + adminAddChannel(); +} + +$theme->footer(); + +?> diff --git a/refer.php b/refer.php new file mode 100644 index 0000000000000000000000000000000000000000..9cee9e77d7c0177d1c3c52512af6d7befdcd4574 --- /dev/null +++ b/refer.php @@ -0,0 +1,171 @@ +<? + +### Include global settings: +include "config.inc"; + +include "functions.inc"; +include "authentication.inc"; +include "theme.inc"; + +$theme->header(); + +dbconnect(); + +/* +function addRefer($url) { + $query = "SELECT * FROM refer WHERE url = '$url'"; + $result = mysql_query($query); + + if ($site = mysql_fetch_object($result)) { + if ($site->status) { + $site->refers++; + $query = "UPDATE refer SET refers = '$site->refers', access_dt = '". time() ."' WHERE url = '$url'"; + $result = mysql_query($query); + } + } + else { + $query = "INSERT INTO refer (url, name, refers, create_dt, access_dt) VALUES ('$url', '', '1', '". time() ."', '". time() ."')"; + $result = mysql_query($query); + } +} +*/ + +function blockRefer($url) { + $query = "UPDATE refer SET status = '0' WHERE url = '$url'"; + $result = mysql_query($query); +} + +function setReferName($url, $name) { + $query = "UPDATE refer SET name = '$name' WHERE url = '$url'"; + $result = mysql_query($query); +} + +function deleteRefer($url) { + $query = "DELETE FROM refer WHERE url = '$url'"; + $result = mysql_query($query); +} + +function openRefer($url) { + $query = "UPDATE refer SET status = '1' WHERE url = '$url'"; + $result = mysql_query($query); +} + +function getReferArray($number = "") { + if ($number) { + $query = "SELECT * FROM refer ORDER BY refers DESC LIMIT $number"; + $result = mysql_query($query); + } + else { + $query = "SELECT * FROM refer ORDER BY refers DESC"; + $result = mysql_query($query); + } + + $index = 0; + while ($site = mysql_fetch_object($result)) { + $rval[$index] = $site; + $index++; + } + return $rval; +} + +$info = "<P>If you are not familiar with \"top sites\"-lists: we use a script that keeps track of the number of visitor your website referred to our site and we rank you according to that number. This can be a good, free way of increasing your website traffic: it is our way to give a link back to referring sites. In order to take advantage of this feature, you have to do is to use the following code when linking to our site:</P><BR><CENTER><FONT COLOR=\"orange\"><CODE><A HREF=\"http://this-site.com/<B>?url=http://www.your-website.com/</B>\"><IMG SRC=\"this-site-button.gif\"></A></CODE></FONT></CENTER><BR><P>By using the above line of code you will automatically participate in our referring site program. Note however that it will only work if you applied to above code correctly, that is, make sure you don't forget the <I>?url=http://www.your-website.com/</I> part. The more visitors you refer, the higher your ranking.</P><P>The highest ranked sites will be automatically included in most (if not all) our pages!</P>\n"; + +function referList($number = "", $detail = "0") { + $site = getReferArray($number); + $count = 1; + + if ($detail) { + $rval .= "<TABLE CELLSPACING=\"2\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + $rval .= " <TR><TD><B>Rank</B></TD><TD><B>Referrals</B></TD><TD><B>URL or name</B></TD><TD NOWRAP><B>Last refer</B></TD></TR>\n"; + + for (reset($site); $entry = current($site); next($site)) { + + $last = date("d/m/y - H:i:s", $entry->access_dt) ." <SMALL><I>(". round((time() - $entry->access_dt) / 86400) ." days ago)</I></SMALL>"; + + if ($entry->name) $rval .= " <TR><TD>$count</TD><TD>$entry->refers</TD><TD><A HREF=\"$entry->url\">$entry->name</A></TD><TD>$last</TD><TR>\n"; + else $rval .= " <TR><TD>$count</TD><TD>$entry->refers</TD><TD><A HREF=\"$entry->url\">$entry->url</A></TD><TD>$last</TD></TR>\n"; + $count++; + } + $rval .= "</TABLE>\n"; + } + else { + for (reset($site); $entry = current($site); next($site)) { + if ($entry->name) $rval .= "$count. <A HREF=\"$entry->url\">$entry->name</A> ($entry->refers)<BR>"; + else $rval .= "$count. <A HREF=\"$entry->url\">$entry->url</A> ($entry->refers)<BR>"; + $count++; + } + } + return $rval; +} + +function referAdmin($number = "") { + global $PHP_SELF, $bgcolor1, $bgcolor2; + + $site = getReferArray($number); + $count = 1; + $rval .= "<TABLE CELLSPACING=\"2\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + $rval .= "<TR BGCOLOR=\"$bgcolor2\"><TD>#</TD><TD COLSPAN=\"2\">URL or name</TD><TD NOWRAP>First refer</TD><TD NOWRAP>Last refer</TD><TD> </TD><TD COLSPAN=\"3\">Commands</TD></TR>\n"; + + for (reset($site); $entry = current($site); next($site)) { + if ($entry->status) { + $delete = "delete"; + $block = "<A HREF=\"$PHP_SELF?section=refer&method=block&url=$entry->url\">block</A>"; + $status = "<FONT COLOR=\"orange\" SIZE=\"+2\">*</FONT>"; + } + else { + $delete = "<A HREF=\"$PHP_SELF?section=refer&method=delete&url=$entry->url\">delete</A>"; + $block = "<A HREF=\"$PHP_SELF?section=refer&method=open&url=$entry->url\">open</A>"; + $status = "<FONT COLOR=\"red\" SIZE=\"+2\">*</FONT>"; + } + + $first = date("d/m/y - H:i:s", $entry->create_dt) ."<BR><FONT SIZE=\"-1\"><I>(". round((time() - $entry->create_dt) / 86400) ." days ago)</I></FONT>"; + $last = date("d/m/y - H:i:s", $entry->access_dt) ."<BR><FONT SIZE=\"-1\"><I>(". round((time() - $entry->access_dt) / 86400) ." days ago)</I></FONT>"; + + if ($entry->name) $rval .= "<TR BGCOLOR=\"$bgcolor1\"><TD>$count</TD><TD><A HREF=\"$entry->url\">$entry->name</A></TD><TD>$entry->refers</TD><TD>$first</TD><TD>$last</TD><TD>$status</TD><TD>$block</TD><TD>$delete</TD><TD><A HREF=\"$PHP_SELF?section=refer&method=edit&url=$entry->url\">edit</A></TD></TR>"; + else $rval .= "<TR BGCOLOR=\"$bgcolor1\"><TD>$count</TD><TD><A HREF=\"$entry->url\">$entry->url</A></TD><TD>$entry->refers</TD><TD>$first</TD><TD>$last</TD><TD>$status</TD><TD>$block</TD><TD>$delete</TD><TD><A HREF=\"$PHP_SELF?section=refer&method=edit&url=$entry->url\">edit</A></TD></TR>"; + $count++; + } + $rval .= "</TABLE>\n"; + return $rval; +} + +/* +### log valid refers: +if (($url) && ($section != "refer") && (strstr(getenv("HTTP_REFERER"), $url))) { + addRefer($url); +} +*/ + +### parse URI: +if ($section == "refer") { + if ($admin) { + if ($method == "block") { + blockRefer($url); + print referAdmin(); + } + else if ($method == "open") { + openRefer($url); + print referAdmin(); + } + else if ($method == "delete") { + deleteRefer($url); + print referAdmin(); + } + else if ($method == "edit") { + print "<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?section=refer&method=update&url=$url\">\nEnter a description for $url:<BR><INPUT TYPE=\"text\" LENGTH=\"40\" NAME=\"name\">\n<INPUT TYPE=\"submit\" NAME=\"update\" VALUE=\"Update\">\n</FORM>"; + } + else if ($method == "update") { + setReferName($url, $name); + print referAdmin(); + } + else { + print referAdmin(); + } + } +} +else { + $theme->box("Referring sites", "<P><U><A NAME=\"#refer-info\">Information:</A></U></P><P>$info</P><BR><BR><P><U><A NAME=\"#refer-more\">Complete list:</A></U></P>". referList("", 1)); +} + +$theme->footer(); +?> diff --git a/search.php b/search.php new file mode 100644 index 0000000000000000000000000000000000000000..5d5c2c3b33b59120335f7ce523eb5212fa5e9601 --- /dev/null +++ b/search.php @@ -0,0 +1,96 @@ +<? + +include "functions.inc"; +include "theme.inc"; + +$theme->header(); + +dbconnect(); +$terms = stripslashes($terms); + +?> + +<TABLE WIDTH="100%" BORDER="0"> + <TR VALIGN="center"> + <TD COLSPAN="3"> + <FORM ACTION="<? print basename($GLOBALS[PHP_SELF]); ?>" METHOD="POST"><BR> + <INPUT SIZE="50" VALUE="<? print "$terms"; ?>" NAME="terms" TYPE="text"><BR> + <SELECT NAME="category"> + <? + if ($category != "") print " <OPTION VALUE=\"$category\">$category</OPTION>"; + print "<OPTION VALUE=\"\">All categories</OPTION>"; + for ($i = 0; $i < sizeof($categories); $i++) { + print " <OPTION VALUE=\"$categories[$i]\">$categories[$i]"; + } + ?> + </SELECT> + <SELECT NAME="author"> + <? + $result = mysql_query("SELECT aid FROM authors ORDER BY aid"); + if ($author != "") print " <OPTION VALUE=\"$author\">$author"; + print " <OPTION VALUE=\"\">All authors"; + while(list($authors) = mysql_fetch_row($result)) { + print " <OPTION VALUE=\"$authors\">$authors"; + } + ?> + </SELECT> + <SELECT NAME="order"> + <? + if ($order == "Oldest first") { + print "<OPTION VALUE=\"Oldest first\">Oldest first"; + print "<OPTION VALUE=\"Newest first\">Newest first"; + } + else { + print "<OPTION VALUE=\"Newest first\">Newest first"; + print "<OPTION VALUE=\"Oldest first\">Oldest first"; + } + ?> + </SELECT> + <INPUT TYPE="submit" VALUE="Search"> + </TD> + </TR> + <TR> + <TD> + <? + ### Compose query: + $query = "SELECT DISTINCT s.sid, s.aid, s.subject, s.time FROM stories s, authors a WHERE s.sid != 0 "; + // Note: s.sid is a dummy clause used to enforce the WHERE-tag. + if ($terms != "") $query .= "AND (s.subject LIKE '%$terms%' OR s.introtext LIKE '%$terms%') "; + if ($author != "") $query .= "AND s.aid = '$author' "; + if ($category != "") $query .= "AND s.category = '$category' "; + if ($order == "Oldest first") $query .= " ORDER BY s.time ASC"; + else $query .= " ORDER BY s.time DESC"; + + ### Perform query: + $result = mysql_query("$query"); + + ### Display search results: + print "<HR>"; + while (list($sid, $aid, $subject, $time) = mysql_fetch_row($result)) { + $num++; + + if ($user) { + $link = "<A HREF=\"article.php?sid=$sid"; + if (isset($cookie[4])) { $link .= "&mode=$cookie[4]"; } else { $link .= "&mode=threaded"; } + if (isset($cookie[5])) { $link .= "&order=$cookie[5]"; } else { $link .= "&order=0"; } + if (isset($cookie[6])) { $link .= "&thold=$cookie[6]"; } else { $link .= "&thold=0"; } + $link .= "\">$subject</A>"; + } + else { + $link = "<A HREF=\"article.php?sid=$sid&mode=threaded&order=1&thold=0\">$subject</A>"; + } + + print "<P>$num) <B>$link</B><BR><SMALL>by <B><A HREF=\"account.php?op=userinfo&uname=$aid\">$aid</A></B>, posted on ". date("l, F d, Y - H:i A", $time) .".</SMALL></P>\n"; + } + + if ($num == 0) print "<P>Your search did <B>not</B> match any articles in our database: <UL><LI>Try using fewer words.</LI><LI>Try using more general keywords.</LI><LI>Try using different keywords.</LI></UL></P>"; + else print "<P><B>$num</B> results matched your search query.</P>"; + ?> + + </TD> + </TR> +</TABLE> + +<? + $theme->footer(); +?> \ No newline at end of file diff --git a/submit.php b/submit.php new file mode 100644 index 0000000000000000000000000000000000000000..83db2ef1e7bbea022fa31aaa21e991edf99638dd --- /dev/null +++ b/submit.php @@ -0,0 +1,175 @@ +<?PHP + +function defaultDisplay() { + include "functions.inc"; + include "theme.inc"; + $theme->header(); + + global $user, $cookie; + if (isset($user)) getusrinfo($user); + + print "<FORM ACTION=\"submit.php\" METHOD=\"post\">"; + + print "<P>\n <B>Your name:</B><BR>"; + if ($user) { + cookiedecode($user); + echo " <A HREF=\"account.php\">$cookie[1]</A> <FONT SIZE=\"2\">[ <A HREF=\"account.php?op=logout\">logout</A> ]</FONT>"; + } else { + echo "$anonymous <FONT SIZE=\"2\">[ <A HREF=\"account.php\">login</A> | <A HREF=\"account.php\">create an account</A> ]</FONT>"; + } + ?> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50"><BR> + <FONT SIZE="2"><I>Bad subjects are 'Check this out!' or 'An article'. Be descriptive, clear and simple!</I></FONT> + </P> + + <P><B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + echo "<OPTION VALUE=\"$categories[$i]\">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Abstract:</B></I><BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="8" NAME="abstract"></TEXTAREA><BR> + <FONT SIZE="2"><I>HTML is nice and dandy, but double check those URLs and HTML tags!</FONT> + </P> + + <P> + <B>Extended story:</B></I><BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="15" NAME="story"></TEXTAREA><BR> + <FONT SIZE="2"><I>HTML is nice and dandy, but double check those URLs and HTML tags!</FONT> + </P> + + <P> + <INPUT TYPE="submit" NAME="op" VALUE="Preview story"> (You must preview at least once before you can submit.) + </P> + + <P> + <FONT SIZE="2"><B>Important:</B> remember to include the exact URL of your <U>source</U> in case you refer to a story found on another website or your submission might be rejected!</FONT> + </P> + + </FORM> + <?PHP + $theme->footer(); +} + +function PreviewStory($name, $address, $subject, $abstract, $story, $category) { + global $user, $cookie; + include "functions.inc"; + include "theme.inc"; + $theme->header(); + + print "<B>Preview:</B><BR>"; + $theme->preview("", $cookie[1], date("l, F d, Y - H:i A", time()), stripslashes($subject), "we-hate-typoes", stripslashes($abstract), "", stripslashes($story)); + print "<FORM ACTION=\"submit.php\" METHOD=\"post\">"; + + print "<P>\n <B>Your name:</B><BR>"; + if ($user) { + cookiedecode($user); + echo " <A HREF=\"account.php\">$cookie[1]</A> <FONT SIZE=\"2\"> [ <A HREF=\"account.php?op=logout\">logout</A> ]</FONT>"; + } else { + echo "$anonymous <FONT SIZE=\"2\">[ <A HREF=\"$account.php\">login</A> | <A HREF=\"account.php\">create an account</A> ]</FONT>"; + } + ?> + + <P> + <B>Subject:</B><BR> + <INPUT TYPE="text" NAME="subject" SIZE="50" VALUE="<? print $subject; ?>"><BR> + <FONT SIZE="2"><I>Bad subjects are 'Check this out!' or 'An article'. Be descriptive, clear and simple!</I></FONT> + </P> + + <P><B>Category:</B><BR> + <SELECT NAME="category"> + <?PHP + for ($i = 0; $i < sizeof($categories); $i++) { + print "<OPTION VALUE=\"$categories[$i]\" "; + if ($category == $categories[$i]) print "SELECTED"; + print ">$categories[$i]\n"; + } + ?> + </SELECT> + </P> + + <P> + <B>Abstract:</B></I><BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="8" NAME="abstract"><? print $abstract; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>HTML is nice and dandy, but double check those URLs and HTML tags!</FONT> + </P> + + <P> + <B>Extended story:</B></I><BR> + <TEXTAREA WRAP="virtual" COLS="50" ROWS="15" NAME="story"><? print $story; ?></TEXTAREA><BR> + <FONT SIZE="2"><I>HTML is nice and dandy, but double check those URLs and HTML tags!</FONT> + </P> + + <P> + <INPUT TYPE="submit" NAME="op" VALUE="Preview again"> <INPUT TYPE="submit" NAME="op" VALUE="Submit story"> + </P> + + <P> + <FONT SIZE="2"><B>Important:</B> remember to include the exact URL of your <U>source</U> in case you refer to a story found on another website or your submission might be rejected!</FONT> + </P> + + </FORM> + <?PHP + $theme->footer(); +} + +function submitStory($name, $address, $subject, $abstract, $article, $category) { + global $user, $cookie; + include "functions.inc"; + + ### Display confirmation message: + include "theme.inc"; + $theme->header(); + $theme->box("Thanks for your submission.", "Thanks for your submission. The gnomes in our basement will frown at it, poke at it, and - if you are lucky - even post it!"); + $theme->footer(); + + ### Add submission to queue: + dbconnect(); + if ($user) { + cookiedecode($user); + $uid = $cookie[0]; + $name = $cookie[1]; + } + else { + $uid = -1; + $name = $anonymous; + } + + $subject = stripslashes(FixQuotes(check_html($subject, "nohtml"))); + $abstract = stripslashes(FixQuotes(check_html($abstract))); + $article = stripslashes(FixQuotes(check_html($article))); + + $result = mysql_query("INSERT INTO queue VALUES (NULL, '$uid', '$name', '$subject', '$article', '". time() ."', '$category', '$abstract', 0, 0)"); + + ### Send notification mail (if required): + if ($notify) { + $message = "New submission:\n\nsubject...: $subject\nauthor....: $name\ncategory..: $category\nabstract..:\n$abstract\n\narticle...:\n$article"; + mail($notify_email, "$notify_subject $subject", $message, "From: $notify_from\nX-Mailer: PHP/" . phpversion()); + } +} + +switch($op) { + case "Preview story": + PreviewStory($name, $address, $subject, $abstract, $story, $category); + break; + case "Preview again": + PreviewStory($name, $address, $subject, $abstract, $story, $category); + break; + case "Submit story": + SubmitStory($name, $address, $subject, $abstract, $story, $category); + break; + default: + defaultDisplay(); + break; +} + +?> \ No newline at end of file diff --git a/theme.inc b/theme.inc new file mode 100644 index 0000000000000000000000000000000000000000..bd809146dfbc80c12961298a5a0b60554549e638 --- /dev/null +++ b/theme.inc @@ -0,0 +1,7 @@ +<? + global $user; + if (isset($user)) $cookie = explode(":", base64_decode($user)); + if (isset($cookie[9])) include "themes/$cookie[9]/theme.class"; + else include "themes/default/theme.class"; + $theme = new Theme(); +?> \ No newline at end of file diff --git a/themes/index.php b/themes/index.php new file mode 100644 index 0000000000000000000000000000000000000000..9e8407ced152995d79199434a41f8c12865d84d1 --- /dev/null +++ b/themes/index.php @@ -0,0 +1 @@ +<A HREF="/">home</A> \ No newline at end of file diff --git a/themes/jeroen/footer.php b/themes/jeroen/footer.php new file mode 100644 index 0000000000000000000000000000000000000000..a48c8b0d09b29a57ecb669631ddfdde71535d916 --- /dev/null +++ b/themes/jeroen/footer.php @@ -0,0 +1,45 @@ + </TD> + <TD VALIGN="top" WIDTH="150"> + <? + global $PHP_SELF; + + if (strstr($PHP_SELF, "index.php")) { + global $user; + + ### Display login box: + displayAccount(); + + ### Display voting poll: + displayPoll(); + + ### Display old headlines: + displayOldHeadlines(); + } + elseif (strstr($PHP_SELF, "account.php")) { + ### Display account settings: + displayAccountSettings(); + } + elseif (strstr($PHP_SELF, "article.php")) { + global $sid; + + ### Display related links: + displayRelatedLinks($sid); + + ### Display new headlines: + displayNewHeadlines(); + } + else { + ### Display new headlines: + displayNewHeadlines(); + } + ?> + </TD> + </TR> + <TR> + <TD ALIGN="center" COLSPAN="3"> + <FONT SIZE="2">[ <A HREF="">home</A> | <A HREF="/faq.php"><IMG BORDER="0" SRC="themes/Jeroen/images/dropfaq.gif" ALT="Frequently Asked Questions"></A> | <A HREF="/search.php">search</A> | <A HREF="/submit.php">submit news</A> | <A HREF="/account.php">user account</A> | <A HREF="/webboard.php">webboard</A> ] </FONT> + </TD> + </TR> + </TABLE> +</BODY> +</HTML> diff --git a/themes/jeroen/header.php b/themes/jeroen/header.php new file mode 100644 index 0000000000000000000000000000000000000000..b884c6d149cad9ada299a22f798c7a4b215feb2d --- /dev/null +++ b/themes/jeroen/header.php @@ -0,0 +1,29 @@ +<HTML> + <HEAD> + <TITLE><? include "config.inc"; echo $sitename; ?></TITLE> + <META NAME="description" CONTENT="geek-village: release your inner geek"> + <META NAME="keywords" CONTENT="geek, nerd, weblog, portal, computer, sience, news, announcements, hype, cult, irc, foo, bar"> + </HEAD> + <STYLE type="text/css"> + <!-- + BODY,TD,P,UL,LI,DIV,FORM,EM,BLOCKQUOTE { font-size: 8pt; font-family: verdana,helvetica,arial; } + --> + </STYLE> + <BODY TEXT="#000000" BGCOLOR="#FEFEFE" ALINK="#D5AE83" LINK="#CECECE" VLINK="#FEFEFE"> + <TABLE BORDER="0" CELLPADDING="2" CELLSPACING="2"> + <TR> + <TD COLSPAN="3"><IMG SRC="images/logo.gif" ALT="drop.org logo"></TD> + </TR> + <TR><TD ALIGN="right" COLSPAN="3"><FONT SIZE="2"><A HREF="">home</A> | <A HREF="/faq.php"><IMG BORDER="0" SRC="themes/Jeroen/images/dropfaq.gif" ALT="Frequently Asked Questions"></A> | <A HREF="/search.php">search</A> | <A HREF="/submit.php">submit news</A> | <A HREF="/account.php">user account</A> | <A HREF="/webboard.php">webboard</A></FONT><HR></TD></TR> + <TR> + <TD VALIGN="top" WIDTH="120"> + <? + dbconnect(); + + ### Display admin blocks: + displayAdminblock(); + + ### Display referring sites: + displayReferrals(); + ?> + <TD VALIGN="top" WIDTH="440"> diff --git a/themes/jeroen/images/dropfaq.gif b/themes/jeroen/images/dropfaq.gif new file mode 100644 index 0000000000000000000000000000000000000000..9f890ea05b57d0d7942d942f5c1d489e78420ab8 --- /dev/null +++ b/themes/jeroen/images/dropfaq.gif @@ -0,0 +1,4 @@ +GIF89a � �ç��¶¼Å¸¾Ç»ÁɾÃËÀÅÍÃÈÏÆÊÑÈÍÓËÏÖÎÒØÐÔÚ«²¼®´¾°·À³¹Ãµ»Å»ÀɽÃËÅÊÑÈÌÓËÏÕÍÑר¯º«±¼´¾°¶À³¹Âµ»Ä¸¾ÆºÀɽÂËÂÇÏÊÏÕÐÓÙ¢ª¶¥¬¸ª±¼²¸Â·½ÆºÀȽÂÊ¿ÅÍÅÉÑÇÌÓÊÎÕÏÓÙŸ§³¢ªµ¥¬·§¯¹ÂÇÎÄÉÐÌÐ×¥±¢©µ¤¬·ÁÆÎÇËÒÉÎÔÌÐÖš¢¯œ¤±¡©µ¿ÄÌÆËÒÉÍÔ—Ÿ¬™¢®œ¤°Ÿ¦²¼ÁɾÃÌÃÈй¾ÇÁÆÍ0A[²¹Âjv‰¯¶À:Kc<Le•ž«§®¹ª±»™¡®‚Œ›ETkq}Žs~t€‘_l€z…•Œ–¤Š“¢my‹O^tP_tQ_uGVm„ŽžCRjLZq‰™Œ•¤BQiƒŽ†Ÿ‰’¡8Ha8Ib]j~Ubx7G`p|r~u€’xƒ”z…–ht‡o{r~u€‘wƒ“eq…gt‡r}w‚“bo‚dq„gs†lx‹\i~an‚ivˆlxŠozŒq}Yg|^l€dp„fs†iuˆYf{\i}^kcp„[i}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þdrop.org FAQ�!ù +�ÿ�,���� � ��þ�ÿ H° Áƒ*\˜@�0p�A .`ÐÀÁƒ�"H”0BŒZ¸€!ƒ† :x ð$ˆ +!Rþ1‰–%6˜8"Å+XTh‘ÒÅ1H ”1#)”5\ظ¡ÇŒ:vdäÑÃ……?¼ ’QÈ"E9‚ “@TR`á’¿K:„èp`… 4|„ ðoJ–˜l(¼°É‹ž?”Hh0Á'†¡D!e +•Îžÿ¡&XÅÊ,Y´,Ù²•KjÃìâå˜0b–Œq¡úpnãÅ’Y-Pwî‚ΖY¢ÅÌ™äÍ "W}p š4jÖp`?ž¹@6mܼƒ»¸yóÍQ—7åv„qäÌ¡S§q{„v4áÅxä¡Gu¦Ð|xGYøQŸAZüH Mò`4ˆ„\Xˆ!‡ Ò!A‰¢!‹0Òˆ!'äÈ# #1$ $1�; \ No newline at end of file diff --git a/themes/jeroen/theme.class b/themes/jeroen/theme.class new file mode 100644 index 0000000000000000000000000000000000000000..abb1350a5fd2981498c91a324e0ac32eaa3ba6f1 --- /dev/null +++ b/themes/jeroen/theme.class @@ -0,0 +1,304 @@ +<? + + class Theme { + ### color set #1: + var $bgcolor1 = "blue"; // background color + var $fgcolor1 = "red"; // table body color + var $hlcolor1 = "#AAAAAA"; // high-light color + + ### color set #2: + var $bgcolor2 = "#EEEEEE"; + var $fgcolor2 = "#666699"; + var $hlcolor2 = "#666699"; + + ### color set #3: + var $bgcolor3 = "#EEEEEE"; + var $fgcolor3 = "yellow"; + var $hlcolor3 = "yellow"; + + ###### + # Syntax.......: header($title); + # Description..: a function to draw the page header. + function header($title) { + ?> + <HTML> + <HEAD> + <TITLE><? include "config.inc"; echo $sitename; ?></TITLE> + <META NAME="description" CONTENT="drop.org"> + <META NAME="keywords" CONTENT="drop, weblog, portal, community, news, article, announcements, stories, story, computer, science, space, hype, cult, geek, nerd, foo, bar"> + </HEAD> + <STYLE type="text/css"> + <!-- + BODY,TD,P,UL,LI,DIV,FORM,EM,BLOCKQUOTE { font-size: 8pt; font-family: verdana,helvetica,arial; } + --> + </STYLE> + <BODY TEXT="#000000" BGCOLOR="#FFFFFF" ALINK="#CCCCCC" LINK="#444444" VLINK="#666666"> + <TABLE BORDER="0" CELLPADDING="2" CELLSPACING="2"> + <TR> + <TD COLSPAN="3"><IMG SRC="/themes/default/images/logo.gif" ALT="drop.org logo"></TD> + </TR> + <TR><TD ALIGN="right" COLSPAN="3"><FONT SIZE="2"><A HREF="">home</A> | <A HREF="/faq.php">faq</A> | <A HREF="/search.php">search</A> | <A HREF="/submit.php">submit news</A> | <A HREF="/account.php">user account</A> | <A HREF="/webboard.php">webboard</A></FONT><HR></TD></TR> + <TR> + <TD VALIGN="top" WIDTH="120"> + <? + dbconnect(); + + ### Display admin blocks: + displayAdminblock($this); + + ### Display referring sites: + displayReferrals($this); + ?> + </TD> + <TD VALIGN="top" WIDTH="440"> + <? + } + + ###### + # Syntax.......: abstract(...); + # Description..: a function to draw an abstract story box, that is the + # boxes displayed on the main page. + function abstract($editor, $informant, $timestamp, $subject, $abstract, $comments, $category, $department, $link) { + $timestamp = date("l, F d, Y - h:i:s A", $timestamp); + + include "config.inc"; + ?> + <TABLE BORDER="0" CELLPADDING="4" WIDTH="100%"> + <TR BGCOLOR="<? echo $this->bgcolor1; ?>"><TD COLSPAN="2"><FONT COLOR="<? echo $this->bgcolor2; ?>"><B><? echo $subject; ?></B></FONT></TD></TR> + <TR BGCOLOR="<? echo $this->bgcolor2; ?>"> + <TD> + <? + if ($informant) { + print "<FONT SIZE=\"-1\">Posted by <A HREF=\"account.php?op=userinfo&uname=$informant\">$informant</A> on $timestamp"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT></TD><TD ALIGN=\"center\" WIDTH=\"80\"><B><A HREF=\"search.php?category=$category\"><FONT COLOR=\"#83997A\">$category</FONT></A></B>"; + } + else { + print "<FONT SIZE=\"-1\">Posted by $anonymous on $timestamp"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT></TD><TD ALIGN=\"center\" WIDTH=\"80\"><A HREF=\"search.php?category=$category\">$category</A>"; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $this->bgcolor3; ?>"> + <TD COLSPAN="2"> + <? + if ($comments) { + echo "<P>$abstract</P><P><FONT COLOR=\"$this->bgcolor1\">Editor's note by <A HREF=\"account.php?op=userinfo&uname=$editor\">$editor</A>:</FONT> $comments</P>"; + } + else { + echo $abstract; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $this->bgcolor2; ?>"><TD ALIGN="right" COLSPAN="2"><? echo $link ?></TD></TR> + </TABLE><BR> + <? + } + + ###### + # Syntax.......: article(...); + # Description..: a function to dispay a complete article (without user + # comments). It's what you get when you followed for + # instance one of read-more links on the main page. + function article($editor, $informant, $timestamp, $subject, $department, $abstract, $comments, $article, $reply) { + $timestamp = date("l, F d, Y - h:i:s A", $timestamp); + + include "config.inc"; + ?> + <TABLE BORDER="0" CELLPADDING="4" WIDTH="100%"> + <TR BGCOLOR="<? echo $this->bgcolor1; ?>"><TD><FONT COLOR="<? echo $this->bgcolor2; ?>"><B><? echo $subject; ?></B></FONT></TD></TR> + <TR BGCOLOR="<? echo $this->bgcolor2; ?>"> + <TD> + <? + if ($informant) { + print "<FONT SIZE=\"-1\">Posted by <A HREF=\"account.php?op=userinfo&uname=$informant\">$informant</A> on $timestamp"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + else { + print "<FONT SIZE=\"-1\">Posted by $anonymous on $timestamp"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $this->bgcolor3; ?>"> + <TD> + <? + if ($abstract) echo "<P>$abstract<P>"; + if ($comments) echo "<P><FONT COLOR=\"$this->bgcolor1\">Editor's note by <A HREF=\"account.php?op=userinfo&uname=$editor\">$editor</A>:</FONT> $comments</P>"; + if ($article) echo "<P>$article</P>"; + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $this->bgcolor2; ?>"><TD ALIGN="right"><? echo "$reply"; ?></TD></TR> + </TABLE><BR> + <? + } + + ###### + # Syntax.......: comment(...); + # Description..: this function is used to theme user comments. + function comment($poster, $subject, $tid, $date, $url, $email, $score, $reason, $comment, $link, $thread = "") { + include "config.inc"; + + if (!eregi("[a-z0-9]",$poster)) $poster = $anonymous; + if (!eregi("[a-z0-9]",$subject)) $subject = "[no subject]"; + echo "<A NAME=\"$tid\">"; + + ### Create comment header: + echo "<TABLE BORDER=\"0\" CELLPADDING=\"4\" CELLSPACING=\"2\" WIDTH=\"100%\">"; + echo " <TR BGCOLOR=\"$this->bgcolor2\">"; + echo " <TD>"; + echo " <TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"2\"WIDTH=\"100%\">"; + + ### Subject: + echo " <TR>"; + echo " <TD ALIGN=\"right\" WIDTH=\"5%\"><FONT COLOR=\"$this->bgcolor1\"><B>Subject:</B></FONT></TD><TD WIDTH=\"80%\">"; + echo " <B><FONT COLOR=\"$this->bgcolor1\">$subject</FONT></B>"; + echo " <FONT SIZE=\"2\"> [Score: $score"; + if (isset($reason)) echo ", $comments_meta_reasons[$reason]"; + echo "]</FONT>"; + echo " </TD>"; + + ### Moderation: + echo " <TD ALIGN=\"right\" ROWSPAN=\"3\" VALIGN=\"middle\" WIDTH=\"15%\">"; + echo " <SELECT NAME=\"meta:$tid\">"; + echo " <OPTION VALUE=\"-1\">Moderate</OPTION>\n"; + for ($i = 0; $i < sizeof($comments_meta_reasons); $i++) { + echo " <OPTION VALUE=\"$i\">$comments_meta_reasons[$i]</OPTION>\n"; + } + echo " </SELECT>"; + echo " </TD>"; + echo " </TR>"; + + ### Author: + echo " <TR>"; + echo " <TD ALIGN=\"right\" VALIGN=\"top\">Author:</TD><TD><B>$poster</B> "; + if ($poster != $anonymous) { + ### Display extra information line: + $info .= "<A HREF=\"account.php?op=userinfo&uname=$poster\">user info</A>"; + if ($email) $info .= " | <A HREF=\"mailto:$email\">$email</A>"; + if (eregi("http://",$url)) $info .= " | <A HREF=\"$url\" TARGET=\"_new\">$url</A>"; + echo "<BR><FONT SIZE=\"2\">[ $info ]</FONT>"; + } + echo " </TD>"; + echo " </TR>"; + + ### Date + echo " <TR><TD ALIGN=\"right\">Date:</TD><TD>". formatTimestamp($date) ."</TD></TR>"; + + echo " </TABLE>"; + echo " </TD>"; + echo " </TR>"; + + ### Print body of comment: + if ($comment) echo " <TR><TD BGCOLOR=\"$this->bgcolor3\">$comment</TD></TR>"; + + ### Print thread (if any): + if ($thread) echo " <TR><TD BGCOLOR=\"$this->bgcolor2\">$thread</TD></TR>"; + + ### Print bottom link(s): + echo " <TR><TD ALIGN=\"right\" BGCOLOR=\"$this->bgcolor2\">[ $link ]</TD></TR>"; + echo " </TABLE>"; + } + + ###### + # Syntax.......: preview(...); + # Description..: this function is used to preview a story and is used at + # different parts of the homepage: when a visitors sumbits + # news, when an editor wants to post news, when people + # check the entries in the sumbission queue, etc. + function preview($editor, $informant, $timestamp, $subject, $department, $abstract, $comments, $article) { + include "config.inc"; + ?> + <TABLE BORDER="0" CELLPADDING="4" WIDTH="100%"> + <TR BGCOLOR="<? echo $this->bgcolor1; ?>"><TD><FONT COLOR="<? echo $this->bgcolor2; ?>"><B><? echo $subject; ?></B></FONT></TD></TR> + <TR BGCOLOR="<? echo $this->bgcolor2; ?>"> + <TD> + <? + if ($informant) { + print "<FONT SIZE=\"-1\">Posted by <A HREF=\"account.php?op=userinfo&uname=$informant\">$informant</A> on $timestamp"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + else { + print "<FONT SIZE=\"-1\">Posted by $anonymous on $timestamp"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $this->bgcolor3; ?>"> + <TD> + <? + if ($abstract) echo "<P>$abstract<P>"; + if ($comments) echo "<P><FONT COLOR=\"$this->bgcolor1\">Editor's note by <A HREF=\"account.php?op=userinfo&uname=$editor\">$editor</A>:</FONT> $comments</P>"; + if ($article) echo "<P>$article</P>"; + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $this->bgcolor2; ?>"><TD ALIGN="right"> </TD></TR> + </TABLE><BR> + <? + } + + ###### + # Syntax.......: box($title, $body); + # Description..: a function to draw a box/block. + function box($subject, $content) { + include "config.inc"; + print "<TABLE BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"3\" WIDTH=\"100%\">"; + print " <TR><TD ALIGN=\"center\" BGCOLOR=\"$this->bgcolor1\" WIDTH=\"100%\"><FONT COLOR=\"$this->fgcolor1\"><B>$subject</B></FONT></TD></TR>"; + print " <TR><TD BGCOLOR=\"$this->bgcolor2\">$content</TD></TR>"; + print "</TABLE><BR>"; + } + + ###### + # Syntax.......: footer(); + # Description..: a function to draw the page footer. + function footer() { + ?> + </TD> + <TD VALIGN="top" WIDTH="150"> + <? + global $PHP_SELF; + + if (strstr($PHP_SELF, "index.php")) { + global $user; + + ### Display login box: + displayAccount($this); + + ### Display voting poll: + displayPoll($this); + + ### Display old headlines: + displayOldHeadlines($this); + } + elseif (strstr($PHP_SELF, "account.php")) { + ### Display account settings: + displayAccountSettings($this); + } + elseif (strstr($PHP_SELF, "article.php")) { + global $sid; + + ### Display related links: + displayRelatedLinks($this, $sid); + + ### Display new headlines: + displayNewHeadlines($this); + } + else { + ### Display new headlines: + displayNewHeadlines($this); + } + ?> + </TD> + </TR> + <TR> + <TD ALIGN="center" COLSPAN="3"> + <FONT SIZE="2">[ <A HREF="">home</A> | <A HREF="/faq.php">faq</A> | <A HREF="/search.php">search</A> | <A HREF="/submit.php">submit news</A> | <A HREF="/account.php">user account</A> | <A HREF="/webboard.php">webboard</A> ] </FONT> + </TD> + </TR> + </TABLE> + </BODY> + </HTML> + <? + } + } + +?> diff --git a/themes/jeroen/theme.php b/themes/jeroen/theme.php new file mode 100644 index 0000000000000000000000000000000000000000..c6645bc0078d30e17287ba63c0af0175605ba78f --- /dev/null +++ b/themes/jeroen/theme.php @@ -0,0 +1,119 @@ +<?php +$bgcolor1 = "#CECECE"; +$bgcolor2 = "#486591"; +$bgcolor3 = "#CECECE"; + +function themeindex($editor, $informant, $datetime, $subject, $abstract, $comments, $category, $department, $link) { + global $bgcolor1, $bgcolor2, $bgcolor3; + + $datetime = date("l, F d, Y - h:i:s A", $datetime); + + include "config.inc"; + ?> + <TABLE BORDER="0" CELLPADDING="4" WIDTH="100%"> + <TR BGCOLOR="<? echo $bgcolor1; ?>"><TD COLSPAN="2"><FONT COLOR="<? echo $bgcolor2; ?>"><B><? echo $subject; ?></B></FONT></TD></TR> + <TR BGCOLOR="<? echo $bgcolor2; ?>"> + <TD> + <? + if ($informant) { + print "<FONT SIZE=\"-1\">Posted by <A HREF=\"account.php?op=userinfo&uname=$informant\">$informant</A> on $datetime"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT></TD><TD ALIGN=\"center\" WIDTH=\"80\"><A HREF=\"search.php?category=$category\">$category</A>"; + } + else { + print "<FONT SIZE=\"-1\">Posted by $anonymous on $datetime"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT></TD><TD ALIGN=\"center\" WIDTH=\"80\"><A HREF=\"search.php?category=$category\">$category</A>"; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $bgcolor3; ?>"> + <TD COLSPAN="2"> + <? + if ($comments) { + echo "<P>$abstract</P><P><FONT COLOR=\"$bgcolor1\">Editor's note by <A HREF=\"account.php?op=userinfo&uname=$editor\">$editor</A>:</FONT> $comments</P>"; + } + else { + echo $abstract; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $bgcolor2; ?>"><TD ALIGN="right" COLSPAN="2"><? echo $link ?></TD></TR> + </TABLE><BR> + <? +} + +function themearticle($editor, $informant, $datetime, $subject, $department, $abstract, $comments, $article, $reply) { + global $bgcolor1, $bgcolor2, $bgcolor3; + + $datetime = date("l, F d, Y - h:i:s A", $datetime); + + include "config.inc"; + ?> + <TABLE BORDER="0" CELLPADDING="4" WIDTH="100%"> + <TR BGCOLOR="<? echo $bgcolor1; ?>"><TD><FONT COLOR="<? echo $bgcolor2; ?>"><B><? echo $subject; ?></B></FONT></TD></TR> + <TR BGCOLOR="<? echo $bgcolor2; ?>"> + <TD> + <? + if ($informant) { + print "<FONT SIZE=\"-1\">Posted by <A HREF=\"account.php?op=userinfo&uname=$informant\">$informant</A> on $datetime"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + else { + print "<FONT SIZE=\"-1\">Posted by $anonymous on $datetime"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $bgcolor3; ?>"> + <TD> + <? + if ($abstract) echo "<P>$abstract<P>"; + if ($comments) echo "<P><FONT COLOR=\"$bgcolor1\">Editor's note by <A HREF=\"account.php?op=userinfo&uname=$editor\">$editor</A>:</FONT> $comments</P>"; + if ($article) echo "<P>$article</P>"; + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $bgcolor2; ?>"><TD ALIGN="right"><? echo "$reply"; ?></TD></TR> + </TABLE><BR> + <? +} + +function themepreview($editor, $informant, $datetime, $subject, $department, $abstract, $comments, $article) { + global $bgcolor1, $bgcolor2, $bgcolor3; + include "config.inc"; + ?> + <TABLE BORDER="0" CELLPADDING="4" WIDTH="100%"> + <TR BGCOLOR="<? echo $bgcolor1; ?>"><TD><FONT COLOR="<? echo $bgcolor2; ?>"><B><? echo $subject; ?></B></FONT></TD></TR> + <TR BGCOLOR="<? echo $bgcolor2; ?>"> + <TD> + <? + if ($informant) { + print "<FONT SIZE=\"-1\">Posted by <A HREF=\"account.php?op=userinfo&uname=$informant\">$informant</A> on $datetime"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + else { + print "<FONT SIZE=\"-1\">Posted by $anonymous on $datetime"; ?><? if ($department) echo "<BR>from the $department dept."; ?><? print "</FONT>"; + } + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $bgcolor3; ?>"> + <TD> + <? + if ($abstract) echo "<P>$abstract<P>"; + if ($comments) echo "<P><FONT COLOR=\"$bgcolor1\">Editor's note by <A HREF=\"account.php?op=userinfo&uname=$editor\">$editor</A>:</FONT> $comments</P>"; + if ($article) echo "<P>$article</P>"; + ?> + </TD> + </TR> + <TR BGCOLOR="<? echo $bgcolor2; ?>"><TD ALIGN="right"> </TD></TR> + </TABLE><BR> + <? +} + +function themebox($subject, $content) { + global $bgcolor1, $bgcolor2, $bgcolor3; + include "config.inc"; + print "<TABLE BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"3\" WIDTH=\"100%\">"; + print " <TR><TD ALIGN=\"center\" BGCOLOR=\"$bgcolor1\"><FONT COLOR=\"$bgcolor2\"><B>$subject</B></FONT></TD></TR>"; + print " <TR><TD BGCOLOR=\"$bgcolor2\">$content</TD></TR>"; + print "</TABLE><BR>"; +} +?> \ No newline at end of file diff --git a/themes/list.php b/themes/list.php new file mode 100644 index 0000000000000000000000000000000000000000..99ad96aaeefb52ce30878466a2f450e1d348c6bb --- /dev/null +++ b/themes/list.php @@ -0,0 +1,7 @@ +<?php + $handle=opendir('themes'); + while ($file = readdir($handle)) { + if(!ereg("[.]",$file)) $themelist .= "$file "; + } + closedir($handle); +?> \ No newline at end of file diff --git a/update.txt b/update.txt new file mode 100644 index 0000000000000000000000000000000000000000..cddfb91a43a2cee065063b16ce761815520e16f4 --- /dev/null +++ b/update.txt @@ -0,0 +1,2 @@ +This tarball has been created on: +Thu May 18 20:30:40 CEST 2000 diff --git a/webboard.php b/webboard.php new file mode 100644 index 0000000000000000000000000000000000000000..8820e45b5a9b58f132203ee0c7b2f3f3fd545d8c --- /dev/null +++ b/webboard.php @@ -0,0 +1,545 @@ +<? + +include "functions.inc"; +include "theme.inc"; + +$theme->header(); + +### parameters: +$timeout = 70000; +$width = "100%"; + +##### +# Syntax.......: text2html(number); +# Description..: Converst ascii text into HTML. +# +function text2html($text) { + return nl2br(stripslashes(trim($text))); +} + +function displayThread($id, $current = 0) { + global $PHP_SELF, $timeout, $new, $theme; + + $query = "SELECT * FROM webboard WHERE topic_id = $id"; + $result = mysql_query($query); + + if (mysql_num_rows($result)) { + ### fields from MySQL table: + $author = text2html(mysql_result($result, 0, "author")); + $subject = text2html(mysql_result($result, 0, "subject")); + $create_dt = mysql_result($result, 0, "create_dt"); + $date = date("D, M d - H:i:s", $create_dt); + + ### highlight current post: + if ($id == $current) print "<FONT COLOR=\"$theme->hlcolor2\">"; + + print "<UL>\n"; + + ### indicate new post: + if (time() - $create_dt > $timeout) print " <LI><A HREF=\"$PHP_SELF?display=$id\">$subject</A> by <B>$author</B> ($date)</LI>\n"; + else print " <LI><A HREF=\"$PHP_SELF?display=$id\">$subject</A> by <B>$author</B> ($date) <FONT COLOR=\"$theme->hlcolor2\">new</FONT></LI>\n"; + + ### highlight current post: + if ($id == $current) print "</FONT>"; + } + + $query = "SELECT DISTINCT topic_id FROM webboard WHERE parent_id = $id ORDER BY create_dt ASC"; + $result = mysql_query($query); + + ### recursive call to process childeren: + while ($row = mysql_fetch_object($result)) displayThread($row->topic_id, $current); + + print "</UL>\n"; +} + + +##### +# Syntax.......: displayThreadedOverview(id) +# Description..: Displays all 'child'-posts of the 'root'-post specified by +# start_id. The posts are displayed in a typical threaded +# style. +# +function displayThreadedOverview($id = 0) { + global $PHP_SELF, $active, $timeout, $new, $width, $theme; + + + $current = getCurrentPosts(); + $total = getTotalPosts(); + + $query = "SELECT DISTINCT root_id FROM webboard WHERE parent_id = $id ORDER BY create_dt DESC"; + $result = mysql_query($query); + + print "<TABLE BORDER=\"0\" CELLSPACING=\"2\" CELLPADDING=\"4\" WIDTH=\"$width\">\n"; + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD>\n"; + print " <TABLE BORDER=\"0\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + print " <TR>\n"; + print " <TD ALIGN=\"left\"><FONT COLOR=\"$theme->fgcolor1\" SIZE=\"+1\"><B>Threaded overview</B></FONT></TD>\n"; + print " <TD ALIGN=\"right\">[ <A NAME=\"top\"><A HREF=\"#post\"><FONT COLOR=\"$theme->hlcolor1\">post</FONT></A></A> | <A HREF=\"$PHP_SELF?threaded=0\"><FONT COLOR=\"$theme->hlcolor1\">chronological</FONT></A> ]</FONT></TD>\n"; + print " </TR>\n"; + print " </TABLE>\n"; + print " </TD></TR>\n"; + + while ($row = mysql_fetch_object($result)) { + print " <TR><TD BGCOLOR=\"$theme->bgcolor2\">\n"; + displayThread($row->root_id); + print " </TD></TR>\n"; + } + + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD>\n"; + print " <TABLE BORDER=\"0\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + print " <TR>\n"; + print " <TD ALIGN=\"left\"><FONT COLOR=\"$theme->fgcolor1\"[ <A HREF=\"javascript: history.back()\"><FONT COLOR=\"$theme->hlcolor1\">back</FONT></A> | <A HREF=\"/\"><FONT COLOR=\"$theme->hlcolor1\">home</FONT></A> | <A NAME=\"post\"><A HREF=\"#top\"><FONT COLOR=\"$theme->hlcolor1\">top</FONT></A></A> ]</FONT></TD>\n"; + print " <TD ALIGN=\"center\"><FONT COLOR=\"$theme->fgcolor1\">[ current: $current | total: $total ]</FONT></TD>\n"; + print " <TD ALIGN=\"right\"><FONT COLOR=\"$theme->fgcolor1\">[ <A HREF=\"$PHP_SELF?threaded=0\"><FONT COLOR=\"$theme->hlcolor1\">chronological</FONT></A> | <A HREF=\"$PHP_SELF?threaded=1\"><FONT COLOR=\"$theme->hlcolor1\">threaded</FONT></A> ]</FONT></TD>\n"; + print " </TR>\n"; + print " </TABLE>\n"; + print " </TD></TR>\n"; + print "</TABLE>\n"; +} + + +##### +# Syntax.......: displayChronologicalOverview +# Description..: Displays all 'child'-posts of the 'root'-post specified by +# start_id. The posts are displayed chronological in a +# typical mailing-list alike style. +# +function displayChronologicalOverview($id = 0) { + global $PHP_SELF, $theme, $timeout, $width; + + $query = "SELECT DISTINCT topic_id, subject, message, author, create_dt FROM webboard ORDER BY create_dt DESC"; + $result = mysql_query($query); + + $current = getCurrentPosts(); + $total = getTotalPosts(); + + print "<TABLE BORDER=\"0\" CELLSPACING=\"2\" CELLPADDING=\"4\" WIDTH=\"$width\">\n"; + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD COLSPAN=\"3\">\n"; + print " <TABLE BORDER=\"0\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + print " <TR>\n"; + print " <TD ALIGN=\"left\"><FONT COLOR=\"$theme->fgcolor1\" SIZE=\"+1\"><B>Chronological overview</B></FONT></TD>\n"; + print " <TD ALIGN=\"right\"><FONT COLOR=\"$theme->fgcolor1\"[ <A NAME=\"top\"><A HREF=\"#post\"><FONT COLOR=\"$theme->hlcolor1\">post</FONT></A></A> | <A HREF=\"$PHP_SELF?threaded=1\"><FONT COLOR=\"$theme->hlcolor1\">threaded</FONT></A> ]</FONT></TD>\n"; + print " </TR>\n"; + print " </TABLE>\n"; + print " </TD></TR>\n"; + + while ($row = mysql_fetch_row($result)) { + list($topic_id, $subject, $message, $author, $create_dt) = $row; + $subject = text2html($subject); + $author = text2html($author); + $date = date("d/m/y - h:i:s", $create_dt); + + ### indicate new post: + if (time() - $create_dt > $timeout) print "<TR><TD BGCOLOR=\"$theme->bgcolor2\"><A HREF=\"$PHP_SELF?display=$topic_id\">$subject</A></TD><TD BGCOLOR=\"$theme->bgcolor2\">$author</TD><TD BGCOLOR=\"$theme->bgcolor2\" NOWRAP>$date</TD><TD></TD></TR>\n"; + else print "<TR><TD BGCOLOR=\"$theme->bgcolor2\"><A HREF=\"$PHP_SELF?display=$topic_id\">$subject</A></TD><TD BGCOLOR=\"$$theme->bgcolor2\">$author</TD><TD BGCOLOR=\"$theme->bgcolor2\" NOWRAP>$date</TD><TD><FONT COLOR=\"$theme->hlcolor2\">new</FONT></TD></TR>\n"; + } + + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD COLSPAN=\"3\">\n"; + print " <TABLE BORDER=\"0\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + print " <TR>\n"; + print " <TD ALIGN=\"left\"><FONT COLOR=\"$theme->fgcolor1\"[ <A HREF=\"javascript: history.back()\"><FONT COLOR=\"$theme->hlcolor1\">back</FONT></A> | <A HREF=\"/\"><FONT COLOR=\"$theme->hlcolor1\">home</FONT></A> | <A NAME=\"post\"><A HREF=\"#top\"><FONT COLOR=\"$theme->hlcolor1\">top</FONT></A></A> ]</FONT></TD>\n"; + print " <TD ALIGN=\"center\"><FONT COLOR=\"$theme->fgcolor1\"[ current: $current | total: $total ]</FONT></TD>\n"; + print " <TD ALIGN=\"right\"><FONT COLOR=\"$theme->fgcolor1\"[ <A HREF=\"$PHP_SELF?threaded=0\"><FONT COLOR=\"$theme->hlcolor1\">chronological</FONT></A> | <A HREF=\"$PHP_SELF?threaded=1\"><FONT COLOR=\"$theme->hlcolor1\">threaded</FONT></A> ]</FONT></TD>\n"; + print " </TR>\n"; + print " </TABLE>\n"; + print " </TD></TR>\n"; + print "</TABLE>\n"; +} + +##### +# Syntax.......: getRecentThreads +# Description..: +# +function getRecentThreads($number = 5, $filename = "webboard.php") { + global $timeout, $theme; + + $query = "SELECT * FROM webboard WHERE parent_id = 0 ORDER BY create_dt DESC LIMIT $number"; + $result = mysql_query($query); + + $rval = "<UL>\n"; + + while ($object = mysql_fetch_object($result)) { + ### fields from MySQL table: + $topic_id = $object->topic_id; + $author = text2html($object->author); + $subject = text2html($object->subject); + $create_dt = $object->create_dt; + $date = date("d/m/y - h:i:s", $create_dt); + $size = getThreadSize($object->topic_id); + + ### indicate new post: + if (time() - $create_dt > $timeout) $rval .= " <LI><A HREF=\"$filename?display=$topic_id\">$subject</A> by <B>$author</B> ($date) [$size]</LI>\n"; + else $rval .= " <LI><A HREF=\"$filename?display=$topic_id\">$subject</A> by <B>$author</B> ($date) [$size] <FONT COLOR=\"$theme->hlcolor2\">new</FONT></LI>\n"; + } + + $rval .= "</UL>\n"; + + return $rval; +} + +##### +# Syntax.......: +# Description..: +# +function displayAdminOverview($id = 0) { + global $PHP_SELF; + + $query = "SELECT DISTINCT t.topic_id, t.parent_id, t.root_id, t.subject, t.message, t.author, t.hostname, t.create_dt FROM webboard t, webboard r WHERE t.parent_id = $id ORDER BY create_dt DESC"; + $result = mysql_query($query); + + print "<UL>\n"; + while ($row = mysql_fetch_row($result)) { + list($topic_id, $parent_id, $root_id, $subject, $message, $author, $hostname, $create_dt) = $row; + $date = date("D, M d - H:i:s", $create_dt); + print " <LI><INPUT TYPE=\"checkbox\" NAME=\"delete\" VALUE=\"$topic_id\"> <A HREF=\"$PHP_SELF?display=$topic_id\">$subject</A> by <B>$author</B> ($date)\n"; + displayAdminOverview($topic_id); + } + print "</UL>\n"; +} + +##### +# Syntax.......: displayMessage(id) +# Description..: +# +function displayMessage($id = 0) { + global $PHP_SELF, $theme, $width; + + $query = "SELECT * FROM webboard WHERE topic_id = $id"; + $result = mysql_query($query); + + if (mysql_num_rows($result)) { + ### fields from MySQL table: + $author = text2html(mysql_result($result, 0, "author")); + $subject = text2html(mysql_result($result, 0, "subject")); + $message = text2html(mysql_result($result, 0, "message")); + $hostname = text2html(mysql_result($result, 0, "hostname")); + $date = date("l, F d - h:i:s A", mysql_result($result, 0, "create_dt")); + $topic_id = mysql_result($result, 0, "topic_id"); + $root_id = mysql_result($result, 0, "root_id"); + + ### previous and next posts: + $prev_msg = getPrevPost($topic_id); + $next_msg = getNextPost($topic_id); + + ### previous and next threads: + $next_thread = getNextThread($root_id); + $prev_thread = getPrevThread($root_id); + + ### generate output table: + print "<TABLE BORDER=\"0\" CELLPADDING=\"4\" WIDTH=\"$width\">\n"; + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD COLSPAN=\"2\"><TABLE BORDER=\"0\" WIDTH=\"100%\"><TR><TD><FONT COLOR=\"$theme->fgcolor1\"><A NAME=\"top\">Current message</A></FONT></TD><TD ALIGN=\"right\"><FONT COLOR=\"$theme->fgcolor1\">[ <A HREF=\"$PHP_SELF?display=$prev_msg\"><FONT COLOR=\"$theme->hlcolor1\">previous message</FONT></A> | <A HREF=\"$PHP_SELF?display=$next_msg\"><FONT COLOR=\"$theme->hlcolor1\">next message</FONT></A> ]</FONT></TD></TR></TABLE></TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor2\"><TD COLSPAN=\"2\">Subject: <B>$subject</B></TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor2\"><TD><FONT COLOR=\"$theme->hlcolor2\">by <B>$author</B> on $date</FONT></TD><TD ALIGN=\"right\">Hostname/IP: $hostname</TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor2\"><TD COLSPAN=\"2\">$message</TD></TR>\n"; + print " <TR><TD COLSPAN=\"2\"></TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD COLSPAN=\"2\"><TABLE BORDER=\"0\" WIDTH=\"100%\"><TR><TD><FONT COLOR=\"$theme->fgcolor1\">Current thread</FONT></TD><TD ALIGN=\"right\"><FONT COLOR=\"$theme->fgcolor1\">[ <A HREF=\"$PHP_SELF?display=$prev_thread\"><FONT COLOR=\"$theme->hlcolor1\">previous thread</FONT></A> | <A HREF=\"$PHP_SELF?display=$next_thread\"><FONT COLOR=\"$theme->hlcolor1\">next thread</FONT></A> ]</FONT></TD></TR></TABLE></TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor2\"><TD COLSPAN=\"2\">\n"; + displayThread($root_id, $id); + print " </TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor2\"><TD COLSPAN=\"2\"></TD></TR>\n"; + print " <TR BGCOLOR=\"$theme->bgcolor1\"><TD COLSPAN=\"2\">\n"; + print " <TABLE BORDER=\"0\" CELLPADDING=\"4\" WIDTH=\"100%\">\n"; + print " <TR>\n"; + print " <TD ALIGN=\"left\"><FONT COLOR=\"$theme->fgcolor1\">[ <A HREF=\"javascript: history.back()\"><FONT COLOR=\"$theme->hlcolor1\">back</FONT></A> | <A HREF=\"/\"><FONT COLOR=\"$theme->hlcolor1\">home</FONT></A> | <A HREF=\"#top\"><FONT COLOR=\"$theme->hlcolor1\">top</FONT></A> ]</FONT></TD>\n"; + print " <TD ALIGN=\"center\"> </TD>\n"; + print " <TD ALIGN=\"right\"><FONT COLOR=\"$theme->fgcolor1\">[ <A HREF=\"$PHP_SELF?threaded=0\"><FONT COLOR=\"$theme->hlcolor1\">chronological</FONT></A> | <A HREF=\"$PHP_SELF?threaded=1\"><FONT COLOR=\"$theme->fgcolor1\">threaded</FONT></A> ]</FONT></TD>\n"; + print " </TR>\n"; + print " </TABLE>\n"; + print " </TD></TR>\n"; + print "</TABLE>\n"; + print "<BR><BR>\n"; + } + else { + print "<P><B>Error:</B> no such message in database. The message you are looking for might have expired and does no longer exsist, or might have been explicitly removed by the webboard administrator.</P>"; + } +} + +##### +# Syntax.......: printForm(id) +# Description..: +# +function printForm($id = 0, $author = "", $signature = "") { + global $PHP_SELF; + + ### initialize variables: + $parent_id = 0; + $root_id = 0; + + if ($id) { + $query = "SELECT * FROM webboard WHERE topic_id = $id"; + $result = mysql_query($query); + + if (mysql_num_rows($result)) { + ### fields from MySQL table: + $subject = text2html(mysql_result($result, 0, "subject")); + $subject = "Re: $subject"; + $parent_id = $id; + $root_id = mysql_result($result, 0, "root_id"); + } + } + + print "<FORM METHOD=\"post\" ACTION=\"$PHP_SELF?post\">\n"; + print " <TABLE BORDER=\"0\" CELLSPACING=\"10\">\n"; + print " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Author:</TD><TD>$author</TD></TR>\n"; + print " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Subject:</TD><TD><INPUT TYPE=\"text\" NAME=\"subject\" MAXLENGTH=\"75\" SIZE=\"50\" VALUE=\"$subject\"></TD></TR>\n"; + print " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Message:</TD><TD><TEXTAREA NAME=\"message\" COLS=\"45\" ROWS=\"10\" WRAP=\"virtual\">$signature</TEXTAREA></TR>\n"; + print " <TR>\n"; + print " <TD ALIGN=\"center\" COLSPAN=\"2\">\n"; + print " <INPUT TYPE=\"hidden\" NAME=\"author\" VALUE=\"$author\">\n"; + print " <INPUT TYPE=\"hidden\" NAME=\"parent_id\" VALUE=\"$parent_id\">\n"; + print " <INPUT TYPE=\"hidden\" NAME=\"root_id\" VALUE=\"$root_id\">\n"; + print " <INPUT TYPE=\"submit\" NAME=\"post\" VALUE=\"Post message\">\n"; + print " </TD>\n"; + print " </TR>\n"; + print " </TABLE>\n"; + print "</FORM>\n"; +} + +/* +##### +# Syntax.......: fixQuotes(text) +# Description..: +# +function fixQuotes ($what = "") { + $what = ereg_replace("'","''",$what); + $counter = 0; + while (eregi("\\\\'", $what) && $counter < 10) { $what = ereg_replace("\\\\'","'",$what); } + return $what; +} +*/ + +##### +# Syntax.......: postMessage(subject, author, message, parent_id, root_id, html_tags) +# Description..: +# +function postMessage ($subject="[no subject]", $author = "Anonymous Chicken", $message, $parent_id = 0, $root_id = 0, $html_tags = "0") { + + if ($html_tags) { + $subject = fixQuotes($subject); + $message = fixQuotes($message); + $author = fixQuotes($author); + $date = time(); + } + else { + $subject = fixQuotes(strip_tags($subject)); + $message = fixQuotes(strip_tags($message)); + $author = fixQuotes(strip_tags($author)); + $date = time(); + } + + ### [NT]-feature: + if (!$message) $subject .= " [NT]"; + + ### 'Anonymous Chicken'-feature: + if (!$author) $author = "Anonymous Chicken"; + + ### insert new post: + $query = "INSERT INTO webboard (subject, message, parent_id, root_id, author, hostname, create_dt) VALUES ('$subject', '$message', $parent_id, $root_id, '$author', '".getenv("REMOTE_ADDR")."', $date)"; + + $result = mysql_query($query); + + if (!$result) { + print "<P><B>Error:</B> failed to perform query!</P>\n"; + } + + $result = mysql_query("select last_insert_id()"); + list($topic_id) = mysql_fetch_array($result); + + if (isset($topic_id) && ($topic_id > 0)) { + if ($root_id == 0) { + $root_id = $topic_id; + mysql_query("UPDATE webboard SET root_id=$topic_id WHERE topic_id = $topic_id AND root_id=0"); + } + } + else { + print "<P><B>Error:</B> failed to perform query!</P>\n"; + } + + return $topic_id; +} + +##### +# Syntax.......: getTotalPosts() +# Description..: Returns the total number of posts that have passed the +# weboard. +# +function getTotalPosts() { + $query = "SELECT MAX(topic_id) FROM webboard"; + $result = mysql_query($query); + if ($result) return mysql_result($result, 0); +} + + +function getThreadSize($id) { + $query = "SELECT * FROM webboard WHERE parent_id = $id"; + $result = mysql_query($query); + $size = 1; + while ($thread = mysql_fetch_object($result)) { + $size += getThreadSize($thread->topic_id); + } + return $size; +} + +##### +# Syntax.......: getNextPost() +# Description..: Returns the next post. +# +function getNextPost($id) { + ### Resolve root_id of $id: + $query = "SELECT root_id FROM webboard WHERE topic_id = $id"; + $result = mysql_query($query); + $root_id = mysql_result($result, 0); + + ### Resolve next message: + $query = "SELECT topic_id FROM webboard WHERE root_id = $root_id AND topic_id > $id ORDER BY create_dt"; + $result = mysql_query($query); + if (mysql_num_rows($result)) return mysql_result($result, 0); + else return 0; +} + +##### +# Syntax.......: getPrevPost() +# Description..: Returns the next post. +# +function getPrevPost($id) { + ### Resolve root_id of $id: + $query = "SELECT root_id FROM webboard WHERE topic_id = $id"; + $result = mysql_query($query); + $root_id = mysql_result($result, 0); + + ### Resolve next message: + $query = "SELECT topic_id FROM webboard WHERE root_id = $root_id AND topic_id < $id ORDER BY create_dt DESC"; + $result = mysql_query($query); + if (mysql_num_rows($result)) return mysql_result($result, 0); + else return 0; +} + +##### +# Syntax.......: getNextThread(root_id) +# Description..: Returns the next thread. +# +function getNextThread($root_id) { + $query = "SELECT root_id FROM webboard WHERE root_id > $root_id ORDER BY root_id"; + $result = mysql_query($query); + if (mysql_num_rows($result)) return mysql_result($result, 0); + else return 0; +} + +##### +# Syntax.......: getPrevThread(root_id) +# Description..: Returns the previous thread. +# +function getPrevThread($root_id) { + $query = "SELECT root_id FROM webboard WHERE root_id < $root_id ORDER BY root_id DESC"; + $result = mysql_query($query); + if (mysql_num_rows($result)) return mysql_result($result, 0); + else return 0; +} + +##### +# Syntax.......: getCurrentPosts() +# Description..: Returns the total number of current/active posts. +# +function getCurrentPosts() { + $query = "SELECT COUNT(topic_id) FROM webboard"; + $result = mysql_query($query); + if ($result) return mysql_result($result, 0); +} + +##### +# Syntax.......: deleteThread(id) +# Description..: Deletes a thread including all child threads. +# +function deleteThread($id) { + ### delete thread: + $query = "SELECT topic_id FROM webboard WHERE parent_id = $id"; + $result = mysql_query($query); + + while ($post = mysql_fetch_object($result)) { + deleteThread($post->topic_id); + } + + ### delete individual post: + $query = "DELETE FROM webboard WHERE topic_id = $id"; + $result = mysql_query($query); +} + +##### +# Syntax.......: expireThread(timout) +# Description..: Checks for expired threads and automatically deletes +# them (if any). +# +function expireThread($expire, $number = 40) { + $query = "SELECT root_id, MAX(create_dt) FROM webboard GROUP BY root_id"; + $result = mysql_query($query); + + while (getCurrentPosts() > $number && $result && $row = mysql_fetch_row($result)) { + list($root_id, $create_dt) = $row; + if (time() - $create_dt > $expire) deleteThread($root_id); + } +} + + +function displayForm($id = "0") { + global $anonymous, $login, $support, $subscribe, $bgcolor2, $bgcolor3, $cookie; + + if ($cookie[1]) printForm($id, $cookie[1]); + else printForm($id, $anonymous); +} + + + +$id = $display; + +if ($id) { + displayMessage($id); + displayForm($id); +} +else if ($section == "policy") { + themebox("Webboard policy", "<P>Webboards are normally used to post notices, hints, questions and such. Messages ideally should be written such that others can read them and get some value in them.</P><P>Everyday we see posts from people who choose to swear, insult and threaten users on the webboard. Therefor we track all IP addresses of people posting: we know who comes, what they look at, how long they stay and - last but not least - we have a valid e-mail address. Please do not use profanity. Everyone is entitled to their opinion, but refrain from posting insults.</P><P>If you are a webboard user and see an offensive post or are being victimed by someone on the webboard, please contact us immediately at <A HREF=\"mailto:info@projectx.mx.dk\">info@projectx.mx.dk</A>.</P><P>We do take our webboard policy serious and we won't hesitate to e-mail the internet provider of the abuser to advise them of the situation. In addition we will block an abusers ProjectX account, his IP or even its entire ISP: as each internet user is assigned a unique IP address on the net, we can track people down and then 'screen' them out when they try to return. In most cases it means blocking entire address blocks or even ISPs.</P><P>Think before you post.</P><P ALIGN=\"right\">[ <A HREF=\"javascript: history.back()\">back</A> ]</P>", 500); +} +else if ($post) { + $id = postMessage($subject, $author, $message, $parent_id, $root_id, 1); + print "<P><FONT SIZE=\"+1\">Your message has been posted:</FONT></P>\n"; + displayMessage($id); + displayForm($id); +} +else if (isset($threaded) && ($threaded == 0)) { + displayChronologicalOverview(); + displayForm(); +} +else if ($delete) { + ### check permissions: + if ($admin) { + ### delete thread: + deleteThread($delete); + print "<FORM ACTION=\"$PHP_SELF?delete=1\" METHOD=\"POST\">\n"; + displayAdminOverview(0); + print "<INPUT TYPE=\"submit\" VALUE=\"Delete\">\n"; + print "</FORM>\n"; + } + else displayBox("Failed", "You don't have permission to access this section."); +} +else if ($section == "webboard") { + ### display administrator overview: + print "<FORM ACTION=\"$PHP_SELF?delete=1\" METHOD=\"POST\">\n"; + displayAdminOverview(0); + print "<INPUT TYPE=\"submit\" VALUE=\"Delete\">\n"; + print "</FORM>\n"; +} +else { + displayThreadedOverview(); + displayForm(); +} + +### Check to see if a certain thread has expired: +if (time() % 20 == 0) { + expireThread(302400); // 604800 = 7 days +} + +### Close connection with MySQL server/database: +mysql_close(); + +$theme->footer(); + +?> \ No newline at end of file