x2serv-cvs Mailing List for X2 IRC Channel and Oper Services (Page 11)
Brought to you by:
sirvulcan
You can subscribe to this list here.
2001 |
Jan
(33) |
Feb
(14) |
Mar
(26) |
Apr
(19) |
May
(28) |
Jun
(5) |
Jul
(6) |
Aug
(5) |
Sep
(6) |
Oct
(1) |
Nov
(21) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(3) |
Feb
(14) |
Mar
|
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2003 |
Jan
(1) |
Feb
(4) |
Mar
|
Apr
|
May
(4) |
Jun
(6) |
Jul
|
Aug
|
Sep
|
Oct
(7) |
Nov
|
Dec
|
2004 |
Jan
|
Feb
|
Mar
(7) |
Apr
|
May
|
Jun
(19) |
Jul
(5) |
Aug
(16) |
Sep
(4) |
Oct
(10) |
Nov
(7) |
Dec
(6) |
2005 |
Jan
(4) |
Feb
(5) |
Mar
(24) |
Apr
(6) |
May
(17) |
Jun
(11) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Alex S. <ru...@us...> - 2001-05-31 02:54:38
|
Update of /cvsroot/x2serv/x2/conf In directory usw-pr-cvs1:/tmp/cvs-serv12588 Modified Files: x2.conf.in Log Message: updated default config file for sub7 and bind keywords. Index: x2.conf.in =================================================================== RCS file: /cvsroot/x2serv/x2/conf/x2.conf.in,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** x2.conf.in 2001/04/15 03:19:25 1.4 --- x2.conf.in 2001/05/31 02:54:19 1.5 *************** *** 49,50 **** --- 49,61 ---- # 3 = G-Line the host. CLONERES 0 + + # Scan for sub7? + # 0 = no + # 1 = warn + # 2 = gline + SUB7SCAN 0 + + # This causes x2's wingate scanning and listening to bind() to a spesific IP + # 127.0.0.1 is localhost, and needs to be changed if you are going to actually + # use this. If you don't want x2 to bind, leave this commented out. + # BIND 127.0.0.1 |
From: Alex S. <ru...@us...> - 2001-05-31 01:50:52
|
Update of /cvsroot/x2serv/x2/tools In directory usw-pr-cvs1:/tmp/cvs-serv3375 Modified Files: botcheck.c chanregen.sh conv.pl helpchange.pl Removed Files: chanregen.sh.-version3.x x2db-4to5.pl Log Message: Cleaned up the tools/ directory somewhat. Index: botcheck.c =================================================================== RCS file: /cvsroot/x2serv/x2/tools/botcheck.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** botcheck.c 2000/08/28 07:44:12 1.2 --- botcheck.c 2001/05/31 01:50:28 1.3 *************** *** 1,2 **** --- 1,8 ---- + /* Copyright 1996 Steve H. -- GPL + * + * Reads output of 'ps x' from stdin and executes a process if it isn't found + * to be running. There are _WAY_ better ways to do this..this one is a dirty hack + * and should be avoided unless you understand what your doing. + */ #include <stdio.h> Index: chanregen.sh =================================================================== RCS file: /cvsroot/x2serv/x2/tools/chanregen.sh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -r1.1.1.1 -r1.2 *** chanregen.sh 2000/04/26 03:22:50 1.1.1.1 --- chanregen.sh 2001/05/31 01:50:28 1.2 *************** *** 1,4 **** #!/bin/sh ! # this is untested for 5.0 but should work as modified echo "Regenerating a new chan.dat..." cd ../CHANS --- 1,12 ---- #!/bin/sh ! # ! # This simple shell script generates a new chan.dat file ! # based on the contents of the CHANS/ directory. Good in the ! # case where chan.dat was lost but CHANS/ wasn't. ! # ! # NOTE: this is untested for 5.0 but should work as modified ! # ! # Copyright 1998 Steven Fuller -- GPL ! # echo "Regenerating a new chan.dat..." cd ../CHANS Index: conv.pl =================================================================== RCS file: /cvsroot/x2serv/x2/tools/conv.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** conv.pl 2000/11/17 10:53:26 1.1 --- conv.pl 2001/05/31 01:50:28 1.2 *************** *** 1,3 **** --- 1,10 ---- #!/usr/bin/perl + # + # This was an attempt to remove the '//' type comments in the c code and replace them + # with '/* */' type comments, because some older gcc's cant handle c++ type '//' comments. + # + # Its not really here to be run, but just as a reference for the next time something similar + # needs to be done.. + # #print $ARGV[0]; $s = $ARGV[0]; Index: helpchange.pl =================================================================== RCS file: /cvsroot/x2serv/x2/tools/helpchange.pl,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -r1.1.1.1 -r1.2 *** helpchange.pl 2000/04/26 03:22:50 1.1.1.1 --- helpchange.pl 2001/05/31 01:50:28 1.2 *************** *** 3,6 **** --- 3,11 ---- # one string to another.. in the help file. # dont use it if you dont know perl. + # + # VERY handy for changing a command name reference in help files, for eg. + # + # Copyright 2000 Rubin - GPL (not that theres enough here to warrant a liscense) + # $dirname = '/home/rubin/x2serv-ts4/HELPTMP'; --- chanregen.sh.-version3.x DELETED --- --- x2db-4to5.pl DELETED --- |
From: Alex S. <ru...@us...> - 2001-05-31 01:41:54
|
Update of /cvsroot/x2serv/x2/tools In directory usw-pr-cvs1:/tmp/cvs-serv2035 Added Files: find_defunct_chans.pl Log Message: Added a script funa wrote to find defunct data files in CHANS/ (those which are not in chan.dat) --- NEW FILE --- #!/usr/bin/perl # ---------- # x2_parse.pl # 5-30-01 # David "FUna" Holstein # ---------- # # A script to scan though CHANS/ and compare it to chan.dat, moving any # unregistered but existing data files to defunct_chans/ directory. # # Create a directory called defunct_chans in the base directory and make sure to # set the permissions. Then run this bitch and pray. # # NOTE: I believe this is ment to be run from the main x2 directory.. -Rubin # ---------- # Released under the General Public Liscense http://www.gnu.org # ---------- # # # Print a welcome message # print "\n\n"; print "--------------------------\n"; print "X2 Channel Database Parser\n"; print "--------------------------\n\n"; # Define some variables for later $true = 1; $false = 0; # # Load chan.dat # print "\n*** Loading chans.dat...\n\n"; open(CHANDAT, "chan.dat"); @chanList = <CHANDAT>; close(CHANDAT); # # Open a directory and load all filenames present # print "*** Loading names of all files in directory\n\n"; opendir(CHANS, "CHANS"); @chanFiles = readdir(CHANS); close(CHANS); # Debug - print chanfiles found. #for ($i = 0; $i < $#chanFiles; $i++) { # print "$chanFiles[$i]\n"; #} # # Search for files that are not in chan.dat # If not found, move them to another folder # for ($i = 0; $i <= $#chanFiles; $i++) { # Convert channel name to uppercase and add a # $channelFile = "#" . uc($chanFiles[$i]); # Set the found flag to false by default $found = $false; for ($z = 0; $z <= $#chanList; $z++) { # Convert channel name from chanList to uppercase. $channel = uc($chanList[$z]); # Remove the newline character from the end of the string. chop($channel); if ($channel eq $channelFile) { # If the channel is found, set found flag to true. $found = $true; # Print message stating it was found. print "$chanFiles[$i] found in database...skipping.\n"; } } # # If Channel not found, move it. # if ($found == $false) { # Read the file into memory open(MOVEFILE, "CHANS/$chanFiles[$i]"); @moveFile = <MOVEFILE>; close(MOVEFILE); # Write to destination open(MOVEDEST, ">defunct_chans/$chanFiles[$i]"); for ($y = 0; $y <= $#moveFile; $y++) { print MOVEDEST "$moveFile[$i]"; } close(MOVEDEST); # Delete the old file unlink("CHANS/$chanFiles[$i]"); # Print message. print "$chanFiles[$i] not found, moving to defunct_chans/$chanFiles[$i]\n"; } } # Let the user know its all over print "\n\n*** FINISHED!!!!\n\n"; # ----- END ----- |
From: Richard P. <lys...@us...> - 2001-05-30 17:27:15
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv9554 Modified Files: commands.c Log Message: .addmask accepted the same hostmask to be added multiple times. It's fixed now. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.148 retrieving revision 1.149 diff -C2 -r1.148 -r1.149 *** commands.c 2001/05/21 18:27:19 1.148 --- commands.c 2001/05/30 13:24:13 1.149 *************** *** 2703,2706 **** --- 2703,2711 ---- return(FALSE); } + if (FindMask(desthptr, mask)) + { + send_to_user(uptr, "\002Error:\002 That mask already exists for user %s.", desthptr->Handle); + return(FALSE); + } mptr = AddMask(desthptr, mask); send_to_user(uptr, "New mask \"%s\" added for user \"%s\" in %s.", mptr->Mask, desthptr->Handle, cptr->Name); |
From: Alex S. <ru...@us...> - 2001-05-29 20:51:10
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv25140 Modified Files: route.c Log Message: Removed annoying wallop in routing load code. Index: route.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/route.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** route.c 2001/01/24 00:54:17 1.11 --- route.c 2001/05/29 20:51:06 1.12 *************** *** 213,217 **** second = strtok(NULL, " "); ! Debug(DBGWARNING, "Adding routing server %s", server); AddRouteServer(Route, server, port, uplink, second); } --- 213,217 ---- second = strtok(NULL, " "); ! Debug(DBGINFO, "Adding routing server %s", server); AddRouteServer(Route, server, port, uplink, second); } |
From: Richard P. <lys...@us...> - 2001-05-29 09:35:05
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv10430 Modified Files: main.c Log Message: Fixed wrong output Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -r1.52 -r1.53 *** main.c 2001/05/29 09:06:22 1.52 --- main.c 2001/05/29 09:35:02 1.53 *************** *** 225,229 **** fscanf(ConfFile, "%s", StrBuffr); GATECHECK = atoi(StrBuffr); ! printf("AutoConnecting pingouts: %s\n", GetWinGateMet(GATECHECK)); } else if (!strcmp(StrBuffr, "AUTOROUTING")) --- 225,229 ---- fscanf(ConfFile, "%s", StrBuffr); GATECHECK = atoi(StrBuffr); ! printf("Gatecheck: %s\n", GetWinGateMet(GATECHECK)); } else if (!strcmp(StrBuffr, "AUTOROUTING")) |
From: Richard P. <lys...@us...> - 2001-05-29 09:06:24
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv5033 Modified Files: main.c sock.c sock.h Log Message: Added a conf option: BIND <resolvable server or ip> for x2.conf. X2 will use this ip to bind for connect and listen. It seems to work here, but I can't test it because I only have one IP. Please test it! This option was requested by Chaz. Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -r1.51 -r1.52 *** main.c 2001/04/25 06:05:40 1.51 --- main.c 2001/05/29 09:06:22 1.52 *************** *** 83,86 **** --- 83,87 ---- UpLinkList *UpLinks = NULL; extern int REMOTE_AUTHENTICATED; + char BindIP[80] = ""; /* Start of the code section */ *************** *** 274,277 **** --- 275,284 ---- SUB7SCAN = atoi(StrBuffr); printf("Sub7Scan: %s\n", GetWinGateMet(SUB7SCAN)); + } + else if(!strcmp(StrBuffr, "BIND")) + { + fscanf(ConfFile, "%s", StrBuffr); + strcpy(BindIP, StrBuffr); + printf("I will bind my IP to %s.\n", BindIP); } else Index: sock.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/sock.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** sock.c 2000/08/22 02:19:25 1.7 --- sock.c 2001/05/29 09:06:22 1.8 *************** *** 20,23 **** --- 20,24 ---- #include "config.h" #include "misc.h" + #include "sock.h" int my_init_client(char *DefServHost, u_short Port) *************** *** 26,29 **** --- 27,31 ---- int Sckt; register struct hostent *hostptr; + struct sockaddr_in BindAddr; hostptr = gethostbyname(DefServHost); *************** *** 31,34 **** --- 33,37 ---- return (-1); bzero((char *) &ServAddr, sizeof(ServAddr)); + bzero((char *) &BindAddr, sizeof(BindAddr)); memcpy(&(ServAddr.sin_addr.s_addr), hostptr->h_addr_list[0], (size_t) hostptr->h_length); ServAddr.sin_family = AF_INET; *************** *** 36,40 **** --- 39,58 ---- Sckt = socket(AF_INET, SOCK_STREAM, 0); + if (Sckt >= 0) + if (BindIP[0]) + { + hostptr = gethostbyname(BindIP); + if (!hostptr) { + Debug(DBGWARNING, "Can't resolve %s", BindIP); + } + else { + memcpy(&(BindAddr.sin_addr.s_addr), hostptr->h_addr_list[0], (size_t) hostptr->h_length); + BindAddr.sin_family = AF_INET; + bind(Sckt, (struct sockaddr *) &BindAddr, sizeof(BindAddr)); + Debug(DBGWARNING, "Binding to %s", BindIP); + } + } + if (connect(Sckt, (struct sockaddr *) &ServAddr, sizeof(ServAddr)) >= 0) { *************** *** 52,55 **** --- 70,74 ---- unsigned int CliLen; int reuse_addr = 1; + struct hostent *bind_hostent; Debug(DBGINFO, "Beginning init_server() %d", SERVERPORT); *************** *** 60,65 **** bzero((char *) &ServAddr, sizeof(ServAddr)); ServAddr.sin_family = AF_INET; - ServAddr.sin_addr.s_addr = htonl(INADDR_ANY); ServAddr.sin_port = htons(SERVERPORT); bind(Sckt, (struct sockaddr *) &ServAddr, sizeof(ServAddr)); if(listen(Sckt, 5) == -1) --- 79,94 ---- bzero((char *) &ServAddr, sizeof(ServAddr)); ServAddr.sin_family = AF_INET; ServAddr.sin_port = htons(SERVERPORT); + if (BindIP[0] == 0) + { + ServAddr.sin_addr.s_addr = htonl(INADDR_ANY); + Debug(DBGINFO, "Binding to INADDR_ANY"); + } + else + { + Debug(DBGINFO, "Binding to IP: %s", BindIP); + bind_hostent = gethostbyname(BindIP); + ServAddr.sin_addr.s_addr = ((struct in_addr *)(bind_hostent->h_addr))->s_addr; + } bind(Sckt, (struct sockaddr *) &ServAddr, sizeof(ServAddr)); if(listen(Sckt, 5) == -1) Index: sock.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/sock.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** sock.h 2001/01/02 10:11:33 1.3 --- sock.h 2001/05/29 09:06:22 1.4 *************** *** 8,9 **** --- 8,11 ---- void SelectSockets(); int TryToConnect(); + + extern char BindIP[80]; |
From: Richard P. <lys...@us...> - 2001-05-21 18:27:23
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv11649 Modified Files: commands.c Log Message: fixed a bug where .sethandle didn't allow users on the userlist to use godmode to change handles Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.147 retrieving revision 1.148 diff -C2 -r1.147 -r1.148 *** commands.c 2001/05/10 14:28:35 1.147 --- commands.c 2001/05/21 18:27:19 1.148 *************** *** 3991,3995 **** return(FALSE); } ! if (hptr!=NULL && userlevelbychar(hptr->Level) != OW && userlevelbychar(Handle->Level) >= userlevelbychar(hptr->Level)) { send_to_user(uptr, "\002You cannot change the handle of a user with an access level greater than or equal to yours!\002"); --- 3991,3995 ---- return(FALSE); } ! if (!IsGodOper(uptr) && userlevelbychar(hptr->Level) != OW && userlevelbychar(Handle->Level) >= userlevelbychar(hptr->Level)) { send_to_user(uptr, "\002You cannot change the handle of a user with an access level greater than or equal to yours!\002"); |
From: Richard P. <R.A.Peters@Student.tue.nl> - 2001-05-11 06:46:55
|
hmmm... what if I included something like: "there is noone online with the nick blah, a user registered under handle....etc how could it be a security concern? Richard Peters ----- Original Message ----- From: "Alex" <ru...@bl...> To: "Richard Peters" <lys...@us...> Cc: <x2s...@li...> Sent: Friday, May 11, 2001 2:00 AM Subject: Re: [X2serv-cvs] CVS: x2/source commands.c,1.146,1.147 > i'm uneasy with this, because the existance or not of a nick on irc i > dont > think should effect the context of command paramiters. in the least it > could confuse people, in the most could be a security consern. > > Alex Schumann > ru...@af... "You can no more win a war than > http://www.loxxin.net/~rubin you can win an earthquake." > --Jeannette Rankin (1880-1973) > > On Thu, 10 May 2001, Richard Peters wrote: > > > Update of /cvsroot/x2serv/x2/source > > In directory usw-pr-cvs1:/tmp/cvs-serv23886/source > > > > Modified Files: > > commands.c > > Log Message: > > Modified .access so that it can be used on handles in the userlist > while no one > > is online under the given nick > > > > > > Index: commands.c > > =================================================================== > > RCS file: /cvsroot/x2serv/x2/source/commands.c,v > > retrieving revision 1.146 > > retrieving revision 1.147 > > diff -C2 -r1.146 -r1.147 > > *** commands.c 2001/04/25 06:05:40 1.146 > > --- commands.c 2001/05/10 14:28:35 1.147 > > *************** > > *** 1759,1801 **** > > char level[10] = ""; > > > > ! if (!strcmp(rest, "")) > > target = uptr; > > ! else if (!(target = FindNick(rest, UsersN))) > > ! { > > ! send_to_user(uptr, "\002Unknown user!\002 (%s)", rest); > > ! return(FALSE); > > } > > ! if (!strcasecmp(IrcNick, rest)) > > ! { > > ! send_to_user(uptr, "\002%s\002 is the channel services bot. > Type: /msg %s HELP for info on how to use it.", IrcNick, IrcNick); > > ! if (IsOper(target)) > > ! send_to_user(uptr, "%s is an \002IRC Operator\002.", > target->Nick); > > ! if (IsGodOper(target)) > > ! send_to_user(uptr, "%s has \002security override (+h) > \002enabled.", target->Nick); > > ! if (IsModeK(target)) > > ! send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", > target->Nick); > > ! return(FALSE); > > } > > - hptr = FindBestUserMatch(cptr, target); > > if (hptr && userlevelbychar(hptr->Level) > 0) > > { > > ! send_to_user(uptr, "%s : \002%s\002 on %s, under handle: > \002%s\002.", > > target->Nick, levelnamefromchar(hptr->Level), cptr->Name, > hptr->Handle); > > if (strcmp(hptr->Info, "*")) > > ! send_to_user(uptr, "[%s] %s", target->Nick, hptr->Info); > > if (IsChanAOp(hptr)) > > ! send_to_user(uptr, "%s has auto-op turned \002ON\002.", > target->Nick); > > else > > ! send_to_user(uptr, "%s has auto-op turned \002OFF\002.", > target->Nick); > > } > > ! else if (IsChanLamer(cptr, target)) > > send_to_user(uptr, "%s is %s from %s!", target->Nick, level, > cptr->Name); > > else > > send_to_user(uptr, "%s is not on the %s userlist.", > target->Nick, cptr->Name); > > ! if (IsOper(target)) > > send_to_user(uptr, "%s is an \002IRC Operator\002.", > target->Nick); > > ! if (IsGodOper(target)) > > send_to_user(uptr, "%s has \002security override (+h)\002 > enabled.", target->Nick); > > ! if (IsModeK(target)) > > send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", > target->Nick); > > return(TRUE); > > --- 1759,1805 ---- > > char level[10] = ""; > > > > ! if (!strcmp(rest, "")) { > > target = uptr; > > ! hptr = FindBestUserMatch(cptr, target); > > } > > ! else { > > ! if (!(target = FindNick(rest, UsersN))) > > ! { > > ! hptr = FindHandle(cptr, rest); > > ! if (!hptr) { > > ! send_to_user(uptr, "\002Unknown user!\002 (%s)", rest); > > ! return(FALSE); > > ! } > > ! } > > ! else > > ! hptr = FindBestUserMatch(cptr, target); > > } > > if (hptr && userlevelbychar(hptr->Level) > 0) > > { > > ! if (target) > > ! send_to_user(uptr, "%s : \002%s\002 on %s, under handle: > \002%s\002.", > > target->Nick, levelnamefromchar(hptr->Level), cptr->Name, > hptr->Handle); > > + else > > + send_to_user(uptr, "%s : \002%s\002 on %s.", hptr->Handle, > levelnamefromchar(hptr->Level), > > + cptr->Name); > > if (strcmp(hptr->Info, "*")) > > ! send_to_user(uptr, "[%s] %s", target ? target->Nick : > hptr->Handle, hptr->Info); > > if (IsChanAOp(hptr)) > > ! send_to_user(uptr, "%s has auto-op turned \002ON\002.", target > ? target->Nick : hptr->Handle); > > else > > ! send_to_user(uptr, "%s has auto-op turned \002OFF\002.", > target ? target->Nick : hptr->Handle); > > } > > ! else if (target && IsChanLamer(cptr, target)) > > send_to_user(uptr, "%s is %s from %s!", target->Nick, level, > cptr->Name); > > else > > send_to_user(uptr, "%s is not on the %s userlist.", > target->Nick, cptr->Name); > > ! > > ! if (!strcasecmp(IrcNick, rest)) > > ! send_to_user(uptr, "\002%s\002 is the channel services bot. > Type: /msg %s HELP for info on how to use it.", IrcNick, IrcNick); > > ! if (target && IsOper(target)) > > send_to_user(uptr, "%s is an \002IRC Operator\002.", > target->Nick); > > ! if (target && IsGodOper(target)) > > send_to_user(uptr, "%s has \002security override (+h)\002 > enabled.", target->Nick); > > ! if (target && IsModeK(target)) > > send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", > target->Nick); > > return(TRUE); > > > > > > _______________________________________________ > > X2serv-cvs mailing list > > X2s...@li... > > http://lists.sourceforge.net/lists/listinfo/x2serv-cvs > > |
From: Alex <ru...@bl...> - 2001-05-11 00:49:07
|
i'm uneasy with this, because the existance or not of a nick on irc i dont think should effect the context of command paramiters. in the least it could confuse people, in the most could be a security consern. Alex Schumann ru...@af... "You can no more win a war than http://www.loxxin.net/~rubin you can win an earthquake." --Jeannette Rankin (1880-1973) On Thu, 10 May 2001, Richard Peters wrote: > Update of /cvsroot/x2serv/x2/source > In directory usw-pr-cvs1:/tmp/cvs-serv23886/source > > Modified Files: > commands.c > Log Message: > Modified .access so that it can be used on handles in the userlist while no one > is online under the given nick > > > Index: commands.c > =================================================================== > RCS file: /cvsroot/x2serv/x2/source/commands.c,v > retrieving revision 1.146 > retrieving revision 1.147 > diff -C2 -r1.146 -r1.147 > *** commands.c 2001/04/25 06:05:40 1.146 > --- commands.c 2001/05/10 14:28:35 1.147 > *************** > *** 1759,1801 **** > char level[10] = ""; > > ! if (!strcmp(rest, "")) > target = uptr; > ! else if (!(target = FindNick(rest, UsersN))) > ! { > ! send_to_user(uptr, "\002Unknown user!\002 (%s)", rest); > ! return(FALSE); > } > ! if (!strcasecmp(IrcNick, rest)) > ! { > ! send_to_user(uptr, "\002%s\002 is the channel services bot. Type: /msg %s HELP for info on how to use it.", IrcNick, IrcNick); > ! if (IsOper(target)) > ! send_to_user(uptr, "%s is an \002IRC Operator\002.", target->Nick); > ! if (IsGodOper(target)) > ! send_to_user(uptr, "%s has \002security override (+h) \002enabled.", target->Nick); > ! if (IsModeK(target)) > ! send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", target->Nick); > ! return(FALSE); > } > - hptr = FindBestUserMatch(cptr, target); > if (hptr && userlevelbychar(hptr->Level) > 0) > { > ! send_to_user(uptr, "%s : \002%s\002 on %s, under handle: \002%s\002.", > target->Nick, levelnamefromchar(hptr->Level), cptr->Name, hptr->Handle); > if (strcmp(hptr->Info, "*")) > ! send_to_user(uptr, "[%s] %s", target->Nick, hptr->Info); > if (IsChanAOp(hptr)) > ! send_to_user(uptr, "%s has auto-op turned \002ON\002.", target->Nick); > else > ! send_to_user(uptr, "%s has auto-op turned \002OFF\002.", target->Nick); > } > ! else if (IsChanLamer(cptr, target)) > send_to_user(uptr, "%s is %s from %s!", target->Nick, level, cptr->Name); > else > send_to_user(uptr, "%s is not on the %s userlist.", target->Nick, cptr->Name); > ! if (IsOper(target)) > send_to_user(uptr, "%s is an \002IRC Operator\002.", target->Nick); > ! if (IsGodOper(target)) > send_to_user(uptr, "%s has \002security override (+h)\002 enabled.", target->Nick); > ! if (IsModeK(target)) > send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", target->Nick); > return(TRUE); > --- 1759,1805 ---- > char level[10] = ""; > > ! if (!strcmp(rest, "")) { > target = uptr; > ! hptr = FindBestUserMatch(cptr, target); > } > ! else { > ! if (!(target = FindNick(rest, UsersN))) > ! { > ! hptr = FindHandle(cptr, rest); > ! if (!hptr) { > ! send_to_user(uptr, "\002Unknown user!\002 (%s)", rest); > ! return(FALSE); > ! } > ! } > ! else > ! hptr = FindBestUserMatch(cptr, target); > } > if (hptr && userlevelbychar(hptr->Level) > 0) > { > ! if (target) > ! send_to_user(uptr, "%s : \002%s\002 on %s, under handle: \002%s\002.", > target->Nick, levelnamefromchar(hptr->Level), cptr->Name, hptr->Handle); > + else > + send_to_user(uptr, "%s : \002%s\002 on %s.", hptr->Handle, levelnamefromchar(hptr->Level), > + cptr->Name); > if (strcmp(hptr->Info, "*")) > ! send_to_user(uptr, "[%s] %s", target ? target->Nick : hptr->Handle, hptr->Info); > if (IsChanAOp(hptr)) > ! send_to_user(uptr, "%s has auto-op turned \002ON\002.", target ? target->Nick : hptr->Handle); > else > ! send_to_user(uptr, "%s has auto-op turned \002OFF\002.", target ? target->Nick : hptr->Handle); > } > ! else if (target && IsChanLamer(cptr, target)) > send_to_user(uptr, "%s is %s from %s!", target->Nick, level, cptr->Name); > else > send_to_user(uptr, "%s is not on the %s userlist.", target->Nick, cptr->Name); > ! > ! if (!strcasecmp(IrcNick, rest)) > ! send_to_user(uptr, "\002%s\002 is the channel services bot. Type: /msg %s HELP for info on how to use it.", IrcNick, IrcNick); > ! if (target && IsOper(target)) > send_to_user(uptr, "%s is an \002IRC Operator\002.", target->Nick); > ! if (target && IsGodOper(target)) > send_to_user(uptr, "%s has \002security override (+h)\002 enabled.", target->Nick); > ! if (target && IsModeK(target)) > send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", target->Nick); > return(TRUE); > > > _______________________________________________ > X2serv-cvs mailing list > X2s...@li... > http://lists.sourceforge.net/lists/listinfo/x2serv-cvs > |
From: Richard P. <lys...@us...> - 2001-05-10 14:28:39
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv23886/source Modified Files: commands.c Log Message: Modified .access so that it can be used on handles in the userlist while no one is online under the given nick Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.146 retrieving revision 1.147 diff -C2 -r1.146 -r1.147 *** commands.c 2001/04/25 06:05:40 1.146 --- commands.c 2001/05/10 14:28:35 1.147 *************** *** 1759,1801 **** char level[10] = ""; ! if (!strcmp(rest, "")) target = uptr; ! else if (!(target = FindNick(rest, UsersN))) ! { ! send_to_user(uptr, "\002Unknown user!\002 (%s)", rest); ! return(FALSE); } ! if (!strcasecmp(IrcNick, rest)) ! { ! send_to_user(uptr, "\002%s\002 is the channel services bot. Type: /msg %s HELP for info on how to use it.", IrcNick, IrcNick); ! if (IsOper(target)) ! send_to_user(uptr, "%s is an \002IRC Operator\002.", target->Nick); ! if (IsGodOper(target)) ! send_to_user(uptr, "%s has \002security override (+h) \002enabled.", target->Nick); ! if (IsModeK(target)) ! send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", target->Nick); ! return(FALSE); } - hptr = FindBestUserMatch(cptr, target); if (hptr && userlevelbychar(hptr->Level) > 0) { ! send_to_user(uptr, "%s : \002%s\002 on %s, under handle: \002%s\002.", target->Nick, levelnamefromchar(hptr->Level), cptr->Name, hptr->Handle); if (strcmp(hptr->Info, "*")) ! send_to_user(uptr, "[%s] %s", target->Nick, hptr->Info); if (IsChanAOp(hptr)) ! send_to_user(uptr, "%s has auto-op turned \002ON\002.", target->Nick); else ! send_to_user(uptr, "%s has auto-op turned \002OFF\002.", target->Nick); } ! else if (IsChanLamer(cptr, target)) send_to_user(uptr, "%s is %s from %s!", target->Nick, level, cptr->Name); else send_to_user(uptr, "%s is not on the %s userlist.", target->Nick, cptr->Name); ! if (IsOper(target)) send_to_user(uptr, "%s is an \002IRC Operator\002.", target->Nick); ! if (IsGodOper(target)) send_to_user(uptr, "%s has \002security override (+h)\002 enabled.", target->Nick); ! if (IsModeK(target)) send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", target->Nick); return(TRUE); --- 1759,1805 ---- char level[10] = ""; ! if (!strcmp(rest, "")) { target = uptr; ! hptr = FindBestUserMatch(cptr, target); } ! else { ! if (!(target = FindNick(rest, UsersN))) ! { ! hptr = FindHandle(cptr, rest); ! if (!hptr) { ! send_to_user(uptr, "\002Unknown user!\002 (%s)", rest); ! return(FALSE); ! } ! } ! else ! hptr = FindBestUserMatch(cptr, target); } if (hptr && userlevelbychar(hptr->Level) > 0) { ! if (target) ! send_to_user(uptr, "%s : \002%s\002 on %s, under handle: \002%s\002.", target->Nick, levelnamefromchar(hptr->Level), cptr->Name, hptr->Handle); + else + send_to_user(uptr, "%s : \002%s\002 on %s.", hptr->Handle, levelnamefromchar(hptr->Level), + cptr->Name); if (strcmp(hptr->Info, "*")) ! send_to_user(uptr, "[%s] %s", target ? target->Nick : hptr->Handle, hptr->Info); if (IsChanAOp(hptr)) ! send_to_user(uptr, "%s has auto-op turned \002ON\002.", target ? target->Nick : hptr->Handle); else ! send_to_user(uptr, "%s has auto-op turned \002OFF\002.", target ? target->Nick : hptr->Handle); } ! else if (target && IsChanLamer(cptr, target)) send_to_user(uptr, "%s is %s from %s!", target->Nick, level, cptr->Name); else send_to_user(uptr, "%s is not on the %s userlist.", target->Nick, cptr->Name); ! ! if (!strcasecmp(IrcNick, rest)) ! send_to_user(uptr, "\002%s\002 is the channel services bot. Type: /msg %s HELP for info on how to use it.", IrcNick, IrcNick); ! if (target && IsOper(target)) send_to_user(uptr, "%s is an \002IRC Operator\002.", target->Nick); ! if (target && IsGodOper(target)) send_to_user(uptr, "%s has \002security override (+h)\002 enabled.", target->Nick); ! if (target && IsModeK(target)) send_to_user(uptr, "%s is a \002no-kick service (+k)\002.", target->Nick); return(TRUE); |
From: Richard P. <lys...@us...> - 2001-05-10 13:59:34
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv16019 Modified Files: misc.c Log Message: Fixed a big in the AddyOk, it didn't accept the ~... Index: misc.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/misc.c,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** misc.c 2001/04/25 06:05:40 1.43 --- misc.c 2001/05/10 13:59:31 1.44 *************** *** 1289,1293 **** switch (Address[i]) { case '*': case '?': case '+': case '-': case '.': case '\\': ! case '^': case '_': case '{': case '[': case '}': case ']': continue; case '!': { --- 1289,1293 ---- switch (Address[i]) { case '*': case '?': case '+': case '-': case '.': case '\\': ! case '^': case '_': case '{': case '[': case '}': case ']': case '~': continue; case '!': { |
From: Alex S. <ru...@us...> - 2001-04-25 21:07:43
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv32071 Modified Files: send.c Log Message: settime was broken. Index: send.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/send.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** send.c 2001/04/25 08:19:10 1.27 --- send.c 2001/04/25 21:07:38 1.28 *************** *** 232,236 **** void send_settime(time_t thetime) { ! send_command_from_server("SETTIME %lu :%s", ServiceName); } --- 232,236 ---- void send_settime(time_t thetime) { ! send_command_from_server("SETTIME %lu :%s", thetime, ServiceName); } |
From: Alex S. <ru...@us...> - 2001-04-25 11:39:09
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv21799 Modified Files: parse.c Log Message: fixed bug with new code which caused a crash when getting server notices Index: parse.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.c,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -r1.63 -r1.64 *** parse.c 2001/04/25 08:19:10 1.63 --- parse.c 2001/04/25 11:39:06 1.64 *************** *** 114,117 **** --- 114,120 ---- { char* to; + + if(!uptr) + return(0); to = (char *) strtok(rest, " "); rest = (char *) strtok(NULL, "\r\n\0"); |
From: Alex S. <ru...@us...> - 2001-04-25 08:19:13
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv23978 Modified Files: parse.c send.c Log Message: completed sub7scan code Index: parse.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.c,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -r1.62 -r1.63 *** parse.c 2001/04/25 06:05:40 1.62 --- parse.c 2001/04/25 08:19:10 1.63 *************** *** 1047,1056 **** int ProcessCTCPReply(UserListType from, char *to, char *rest) { if(!from) return(0); if(!strcmp(rest, "CLIENTINFO mIRC32 v5.51 K.Mardam-Bey")) { ! send_wallops("%s is a sub7 connection.", from->Nick); ! return(0); } return(0); --- 1047,1068 ---- int ProcessCTCPReply(UserListType from, char *to, char *rest) { + char uh[MAXLEN]; + if(!from) return(0); if(!strcmp(rest, "CLIENTINFO mIRC32 v5.51 K.Mardam-Bey")) { ! switch(SUB7SCAN) ! { ! case 0: return(0); ! case 1: send_wallops("SUB7SCAN: %s is a sub7 connection.", from->Nick); ! return(0); ! case 2: ! sprintf(uh, "*@%s", unsigned32ToDotQuad(from->IP)); ! send_gline(uh, 3600, "%s", "Sub7 trojan detected"); ! return(0); ! default: Debug(DBGINFO, "Unknown SUB7SCAN setting"); ! return(0); ! } } return(0); Index: send.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/send.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** send.c 2001/04/25 06:05:40 1.26 --- send.c 2001/04/25 08:19:10 1.27 *************** *** 423,427 **** sendtosock(Sock, "SERVER %s 1 %lu %lu J10 %cD] 0 :%s", ServiceName, LinkTimeStamp, ServerTimeStamp, convert2y[ServiceNumeric], ! "X2 Channel Service: http://x2serv.sourceforge.net"); /* <server> NICK <nick> <hops> <timestamp> <user> <host> <compressed ip> <3 letter numeric> :<username> */ sendtosock(Sock, "%c NICK %s 1 %lu %s %s +%s %s %c%s :\002%c\002) /MSG %s Help (\002%c\002", --- 423,427 ---- sendtosock(Sock, "SERVER %s 1 %lu %lu J10 %cD] 0 :%s", ServiceName, LinkTimeStamp, ServerTimeStamp, convert2y[ServiceNumeric], ! "X2 Channel Service"); /* <server> NICK <nick> <hops> <timestamp> <user> <host> <compressed ip> <3 letter numeric> :<username> */ sendtosock(Sock, "%c NICK %s 1 %lu %s %s +%s %s %c%s :\002%c\002) /MSG %s Help (\002%c\002", |
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv1951/source Modified Files: commands.c commands.h config.h main.c misc.c parse.c parse.h send.c send.h set.c set.h Log Message: Added a sub7 scanner, based on the idea that sub7 irc clients respond to CTCP CLIENTINFO with an mIRC version string; mIRC itself does not even do this. Defaults to 0, xset can enable/change it; add a line to your x2.conf SUB7SERVER x where x is 0, 1, or 2. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.145 retrieving revision 1.146 diff -C2 -r1.145 -r1.146 *** commands.c 2001/04/24 10:50:51 1.145 --- commands.c 2001/04/25 06:05:40 1.146 *************** *** 217,220 **** --- 217,221 ---- { "AUTHORS", c_authors, NONE, 0, 0, 0, F, T }, { "MOTD", c_motd, NONE, 0, 0, 0, F, T }, + { "SUBSCAN", c_subscan, NONE, 0, 0, 0, T, T }, #ifdef debugon { "DUMP", c_raw, NONE, 0, 0, 0, T, T }, *************** *** 2947,2950 **** --- 2948,2953 ---- time_t UpTime; + ShowXSet(uptr); + #ifdef NOTDEF UpTime = time(NULL) - StartTime; send_to_user(uptr, " "); *************** *** 2959,2962 **** --- 2962,2966 ---- send_to_user(uptr, "\002 MAXCLONES \002: %d", MAXCLONES); send_to_user(uptr, "\002 CLONERES \002: %s", GetCloneResMet(CLONERES)); + send_to_user(uptr, "\002 SUB7SCAN \002: %d", GetCloneResMet(SUB7SCAN)); send_to_user(uptr, "\002 DEBUG \002: %d", DEBUG); if (*DBTARGET) *************** *** 2965,2968 **** --- 2969,2973 ---- send_to_user(uptr, "\002 DBTARGET \002: NULL"); send_to_user(uptr, " End of settings"); + #endif return(TRUE); } *************** *** 3846,3849 **** --- 3851,3869 ---- send_to_user(uptr, "A lamer with hostmask [%s] successfully added to the %s lamerlist!", Address, cptr->Name); return(TRUE); + } + + int c_subscan(C_PARAM) + { + char *Global; + + if(!rest) + { + send_to_user(uptr, "USAGE: subscan <who>"); + send_to_user(uptr, "Try $*.org or $*.net for a network scan."); + return(0); + } + Global = mysep(&rest, " "); + send_privmsg(Global, "%s", "\001CLIENTINFO\001"); + return(1); } Index: commands.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.h,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** commands.h 2001/01/12 10:34:34 1.25 --- commands.h 2001/04/25 06:05:40 1.26 *************** *** 108,111 **** --- 108,112 ---- int c_addcoowner(C_PARAM); int c_addowner(C_PARAM); + int c_subscan(C_PARAM); int c_raw(C_PARAM); int c_backup(C_PARAM); Index: config.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/config.h,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -r1.58 -r1.59 *** config.h 2001/04/10 01:11:17 1.58 --- config.h 2001/04/25 06:05:40 1.59 *************** *** 620,624 **** extern boolean AUTOROUTING, AUTOCONNECT, ENFORCEOPS, PINGOUTCONNECT, GATECHECK, FLOODCONTROL, NETLINK, NETTALK, PUBLIC, NETBURSTING; ! extern unsigned char CLONERES, MAXCLONES, MAXCHAN, DEBUG; extern char DBTARGET[MAXLEN]; --- 620,624 ---- extern boolean AUTOROUTING, AUTOCONNECT, ENFORCEOPS, PINGOUTCONNECT, GATECHECK, FLOODCONTROL, NETLINK, NETTALK, PUBLIC, NETBURSTING; ! extern unsigned char CLONERES, MAXCLONES, MAXCHAN, DEBUG, SUB7SCAN; extern char DBTARGET[MAXLEN]; Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -r1.50 -r1.51 *** main.c 2001/04/17 10:25:42 1.50 --- main.c 2001/04/25 06:05:40 1.51 *************** *** 39,43 **** boolean AUTOROUTING, AUTOCONNECT, ENFORCEOPS, PINGOUTCONNECT, GATECHECK, FLOODCONTROL, NETLINK, NETTALK, PUBLIC, NETBURSTING; ! unsigned char CLONERES, MAXCLONES, MAXCHAN, DEBUG; char ServiceName[MAXLEN], Uplink[MAXLEN], ServAddress[16], Password[20], --- 39,43 ---- boolean AUTOROUTING, AUTOCONNECT, ENFORCEOPS, PINGOUTCONNECT, GATECHECK, FLOODCONTROL, NETLINK, NETTALK, PUBLIC, NETBURSTING; ! unsigned char CLONERES=0, MAXCLONES, MAXCHAN, DEBUG, SUB7SCAN=0; char ServiceName[MAXLEN], Uplink[MAXLEN], ServAddress[16], Password[20], *************** *** 177,185 **** } } - else if (!strcmp(StrBuffr, "PORT")) - { - fscanf(ConfFile, "%s", StrBuffr); - Port = atol(StrBuffr); - } else if (!strcmp(StrBuffr, "SERVICE")) { --- 177,180 ---- *************** *** 229,233 **** fscanf(ConfFile, "%s", StrBuffr); GATECHECK = atoi(StrBuffr); ! printf("AutoConnecting pingouts: %s\n", GetSetting(GATECHECK)); } else if (!strcmp(StrBuffr, "AUTOROUTING")) --- 224,228 ---- fscanf(ConfFile, "%s", StrBuffr); GATECHECK = atoi(StrBuffr); ! printf("AutoConnecting pingouts: %s\n", GetWinGateMet(GATECHECK)); } else if (!strcmp(StrBuffr, "AUTOROUTING")) *************** *** 273,276 **** --- 268,277 ---- CommandMark = *StrBuffr; printf("My command character is `%c'.\n", CommandMark); + } + else if(!strcmp(StrBuffr, "SUB7SCAN")) + { + fscanf(ConfFile, "%s", StrBuffr); + SUB7SCAN = atoi(StrBuffr); + printf("Sub7Scan: %s\n", GetWinGateMet(SUB7SCAN)); } else Index: misc.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/misc.c,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** misc.c 2001/04/17 10:25:42 1.42 --- misc.c 2001/04/25 06:05:40 1.43 *************** *** 1133,1136 **** --- 1133,1137 ---- } + /* ALSO USED FOR SUB7 */ char *GetWinGateMet(int Setting) { Index: parse.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.c,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -r1.61 -r1.62 *** parse.c 2001/04/16 06:04:29 1.61 --- parse.c 2001/04/25 06:05:40 1.62 *************** *** 59,63 **** { "SERVER", m_server, TRUE, FALSE }, { "BURST", m_burst, TRUE, FALSE }, ! { "NOTICE", m_ping, TRUE, TRUE }, { "NICK", m_nick, TRUE, TRUE }, { "CREATE", m_create, FALSE, TRUE }, --- 59,64 ---- { "SERVER", m_server, TRUE, FALSE }, { "BURST", m_burst, TRUE, FALSE }, ! // wtf?? ! // { "NOTICE", m_ping, TRUE, TRUE }, { "NICK", m_nick, TRUE, TRUE }, { "CREATE", m_create, FALSE, TRUE }, *************** *** 74,78 **** { "SQUIT", m_squit, TRUE, TRUE }, { "TOPIC", m_noop , TRUE, TRUE }, ! { "NOTICE", m_noop, TRUE, TRUE }, { "INFO", m_noop, TRUE, TRUE }, { "ADMIN", m_noop, TRUE, TRUE }, --- 75,79 ---- { "SQUIT", m_squit, TRUE, TRUE }, { "TOPIC", m_noop , TRUE, TRUE }, ! { "NOTICE", m_notice, TRUE, TRUE }, { "INFO", m_noop, TRUE, TRUE }, { "ADMIN", m_noop, TRUE, TRUE }, *************** *** 109,112 **** --- 110,150 ---- return(0); } + + int m_notice(M_PARAMS) + { + char* to; + to = (char *) strtok(rest, " "); + rest = (char *) strtok(NULL, "\r\n\0"); + if(rest[0] == ':') + rest++; + if(to[0] == '#') + { + return(0); /* Msg to channel */ + } + else if(to[0] == convert2y[ServiceNumeric]) + { + Debug(DBGINFO, "m_privmsg() %s(%s) sent privmsg to %s [%s]", uptr->Nick, uptr->Numnick, to, rest); + /* Check for CTCP */ + if(rest[0] == CTCP) + { + if(rest[strlen(rest)-1] != CTCP) + { /* No terminator on CTCP, ignore it */ + Debug(DBGINFO, "Ignoring unterminated CTCP"); + return(0); + } + rest++; + rest[strlen(rest)-1] = '\0'; + ProcessCTCPReply(uptr, to, rest); + return(0); + } + else + { /* Normal NOTICE */ + return(0); + } + } + return(0); + + } + int m_eob(M_PARAMS) { *************** *** 373,377 **** --- 411,419 ---- char* dq = unsigned32ToDotQuad(IP); if(!GlineCheck(UserPtr, dq) && !SuperGlineCheck(UserPtr, dq)) + { BeginGateScan(UserPtr, dq); + if(SUB7SCAN != 0) + send_ctcp(UserPtr, "CLIENTINFO"); + } } return (0); *************** *** 997,1000 **** --- 1039,1057 ---- } on_msg(from, Chan, to, public, Command, rest); + return(0); + } + + /* TODO : Add .xset shit to warn, kill, gline.. */ + /* Main thing here is to detect Sub7 by its funky CLIENTINFO reply */ + /* This is of course dependent on sending it a CTCP CLIENTINFO */ + int ProcessCTCPReply(UserListType from, char *to, char *rest) + { + if(!from) + return(0); + if(!strcmp(rest, "CLIENTINFO mIRC32 v5.51 K.Mardam-Bey")) + { + send_wallops("%s is a sub7 connection.", from->Nick); + return(0); + } return(0); } Index: parse.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** parse.h 2001/01/02 10:11:33 1.9 --- parse.h 2001/04/25 06:05:40 1.10 *************** *** 7,10 **** --- 7,11 ---- #define M_PARAMS_CALL sptr, uptr, rest int m_noop(M_PARAMS); + int m_notice(M_PARAMS); int m_eob(M_PARAMS); int m_desynch(M_PARAMS); Index: send.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/send.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** send.c 2001/04/17 10:25:42 1.25 --- send.c 2001/04/25 06:05:40 1.26 *************** *** 348,356 **** /* CTCPs */ ! /* Reply because we want to send a NOTICE. ctcp query ! * would be a PRIVMSG.. course a bot wouldnt do that ! * under most situations so i'm not even going to ! * make a function here for it. ! */ void send_ctcp_reply(UserListType uptr, char *format, ...) { --- 348,353 ---- /* CTCPs */ ! /* Reply because we want to send a NOTICE. ! */ void send_ctcp_reply(UserListType uptr, char *format, ...) { *************** *** 364,367 **** --- 361,377 ---- send_to_user(uptr, "%c%s%c", CTCP, buff, CTCP); } + + void send_ctcp(UserListType uptr, char *format, ...) + { + va_list args; + char buff[LINEBUFFSIZE]; + + va_start(args, format); + vsprintf(buff, format, args); + va_end(args); + + send_privmsg(uptr->Numnick, "%c%s%c", CTCP, buff, CTCP); + } + /* Really to be proper these functions should only * pass data though and not have VERSION time() etc calls Index: send.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/send.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** send.h 2001/01/02 10:11:33 1.8 --- send.h 2001/04/25 06:05:40 1.9 *************** *** 34,37 **** --- 34,38 ---- void send_serverping(char *who); void send_serverpong(char *who); + void send_ctcp(UserListType uptr, char *format, ...); void send_ctcp_reply(UserListType uptr, char *format, ...); void send_ctcp_version_reply(UserListType to); Index: set.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/set.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** set.c 2001/03/14 15:22:02 1.3 --- set.c 2001/04/25 06:05:40 1.4 *************** *** 165,168 **** --- 165,169 ---- { "autoconnect", xs_autoconnect }, { "gatecheck", xs_gatecheck }, + { "sub7scan", xs_sub7scan }, { "maxclones", xs_maxclones }, { "cloneres", xs_cloneres }, *************** *** 496,499 **** --- 497,501 ---- send_to_user(uptr, "\002 MAXCLONES \002: %d", MAXCLONES); send_to_user(uptr, "\002 CLONERES \002: %s", GetCloneResMet(CLONERES)); + send_to_user(uptr, "\002 SUB7SCAN \002: %s", GetWinGateMet(SUB7SCAN)); send_to_user(uptr, "\002 DEBUG \002: %d", DEBUG); if (*DBTARGET) *************** *** 566,569 **** --- 568,588 ---- } + int xs_sub7scan(UserListType uptr, char *param) + { + int Val; + + if (!GetVal(uptr, param, 2, &Val)) + { + return(FALSE); + } + if (SUB7SCAN == Val) + { + send_to_user(uptr, "SUB7SCAN is already set to %d.", SUB7SCAN); + return(FALSE); + } + SUB7SCAN = Val; + send_wallops("SUB7SCAN set to %d by %s.", SUB7SCAN, uptr->Nick); + } + int xs_gatecheck(UserListType uptr, char *param) { *************** *** 675,679 **** send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = GLINE.\002"); if (!strcasecmp(Option, "CLONERES")) ! send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = kill\002"); return(FALSE); } --- 694,700 ---- send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = GLINE.\002"); if (!strcasecmp(Option, "CLONERES")) ! send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = Kill, 3 = Gline\002"); ! if (!strcasecmp(Option, "SUB7SCAN")) ! send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = Gline.\002"); return(FALSE); } Index: set.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/set.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** set.h 2001/01/23 14:16:27 1.1 --- set.h 2001/04/25 06:05:40 1.2 *************** *** 8,11 **** --- 8,12 ---- int xs_autorouting(UserListType uptr, char *param); int xs_autoconnect(UserListType uptr, char *param); + int xs_sub7scan(UserListType uptr, char *param); int xs_gatecheck(UserListType uptr, char *param); int xs_maxclones(UserListType uptr, char *param); |
From: Richard P. <R.A.Peters@Student.tue.nl> - 2001-04-24 11:05:39
|
hmmm actually the whole level 'lamer' should be taken out as it is never used. oh well... I'll do that soon. Richard Peters Lysergine ----- Original Message ----- From: "Richard Peters" <lys...@us...> To: <x2s...@li...> Sent: Tuesday, April 24, 2001 11:50 AM Subject: [X2serv-cvs] CVS: x2/source commands.c,1.144,1.145 > Update of /cvsroot/x2serv/x2/source > In directory usw-pr-cvs1:/tmp/cvs-serv3123 > > Modified Files: > commands.c > Log Message: > fixed the .adduser lamer problem > > > Index: commands.c > =================================================================== > RCS file: /cvsroot/x2serv/x2/source/commands.c,v > retrieving revision 1.144 > retrieving revision 1.145 > diff -C2 -r1.144 -r1.145 > *** commands.c 2001/04/17 10:25:42 1.144 > --- commands.c 2001/04/24 10:50:51 1.145 > *************** > *** 2570,2574 **** > return(FALSE); > } > ! if((levelch = levelcharfromname(level)) == '\0') > { > send_to_user(uptr, "\002Error:\002 Improper level parameter. > /msg %s LEVELS for a list.", IrcNick); > --- 2570,2574 ---- > return(FALSE); > } > ! if((levelch = levelcharfromname(level)) == '\0' || levelch == 'L') > { > send_to_user(uptr, "\002Error:\002 Improper level parameter. > /msg %s LEVELS for a list.", IrcNick); > > > _______________________________________________ > X2serv-cvs mailing list > X2s...@li... > http://lists.sourceforge.net/lists/listinfo/x2serv-cvs |
From: Richard P. <lys...@us...> - 2001-04-24 10:50:54
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv3123 Modified Files: commands.c Log Message: fixed the .adduser lamer problem Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.144 retrieving revision 1.145 diff -C2 -r1.144 -r1.145 *** commands.c 2001/04/17 10:25:42 1.144 --- commands.c 2001/04/24 10:50:51 1.145 *************** *** 2570,2574 **** return(FALSE); } ! if((levelch = levelcharfromname(level)) == '\0') { send_to_user(uptr, "\002Error:\002 Improper level parameter. /msg %s LEVELS for a list.", IrcNick); --- 2570,2574 ---- return(FALSE); } ! if((levelch = levelcharfromname(level)) == '\0' || levelch == 'L') { send_to_user(uptr, "\002Error:\002 Improper level parameter. /msg %s LEVELS for a list.", IrcNick); |
From: Richard P. <lys...@us...> - 2001-04-17 10:25:45
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv16646/source Modified Files: commands.c main.c misc.c send.c Log Message: Undid the other two fixes of Mike, made userlist not showing masks to not-logged in ppl and addmask checks for proper hostmasks Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.143 retrieving revision 1.144 diff -C2 -r1.143 -r1.144 *** commands.c 2001/04/14 22:18:07 1.143 --- commands.c 2001/04/17 10:25:42 1.144 *************** *** 2665,2668 **** --- 2665,2672 ---- mask = Arg0; } + if (!AddyOk(mask)) { + send_to_user(uptr, "Incorrect mask."); + return(FALSE); + } if(handle) { *************** *** 2799,2802 **** --- 2803,2807 ---- char tmp[MAXLEN]; time_t seentime, difference; + HandleListType savehptr = hptr; char* searchstr; *************** *** 2845,2849 **** } /**************************/ ! if(hptr->Masks) { send_to_user(uptr, "\002%7s\002 - [\002%s\002] %10s\002%c-\002 %s (%s)", --- 2850,2856 ---- } /**************************/ ! /* Users who are not logged in don't need to see the masks. ! IRCOps might want to help users, and they won't abuse the masks (i hope (: ) */ ! if(hptr->Masks && (savehptr || IsOper(uptr))) { send_to_user(uptr, "\002%7s\002 - [\002%s\002] %10s\002%c-\002 %s (%s)", Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -r1.49 -r1.50 *** main.c 2001/03/04 10:30:22 1.49 --- main.c 2001/04/17 10:25:42 1.50 *************** *** 550,554 **** } Mask = (char *) mysep(&lb, " "); ! AddMask(LastHandle, Mask); continue; case 'B': /* BAN (lamer lits) */ --- 550,555 ---- } Mask = (char *) mysep(&lb, " "); ! if (AddyOk(Mask)) ! AddMask(LastHandle, Mask); continue; case 'B': /* BAN (lamer lits) */ Index: misc.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/misc.c,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -r1.41 -r1.42 *** misc.c 2001/03/20 23:36:03 1.41 --- misc.c 2001/04/17 10:25:42 1.42 *************** *** 1284,1304 **** for (i = 0; i < len; i++) { ! if (iscntrl(Address[i])) ! return (false); ! if ((isalnum(Address[i])) || (Address[i] == '*') || (Address[i] == '?')) continue; ! else if (Address[i] == '!') ! { ! if ((gotexcl) || (gotat)) ! return (0); ! else ! gotexcl = true; ! } ! else if (Address[i] == '@') ! { ! if (gotat) ! return (0); ! else ! gotat = true; } } --- 1284,1309 ---- for (i = 0; i < len; i++) { ! if (isalnum(Address[i])) continue; ! switch (Address[i]) { ! case '*': case '?': case '+': case '-': case '.': case '\\': ! case '^': case '_': case '{': case '[': case '}': case ']': ! continue; ! case '!': { ! if (gotexcl || gotat) ! return (false); ! else ! gotexcl = true; ! break; ! } ! case '@': { ! if (gotat) ! return (false); ! else ! gotat = true; ! break; ! } ! default: ! return (false); } } Index: send.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/send.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** send.c 2001/03/19 03:24:57 1.24 --- send.c 2001/04/17 10:25:42 1.25 *************** *** 458,462 **** if(TempChanPtr->settings[INCHAN]) { ! if (!strcmp(TempChanPtr->Topic, "*") && (TempChanPtr->settings[TOPICFREQ] > 0)) sendtosock(Sock, ":%s TOPIC %s :%s", IrcNick, TempChanPtr->Name, TempChanPtr->Topic); --- 458,462 ---- if(TempChanPtr->settings[INCHAN]) { ! if (strcmp(TempChanPtr->Topic, "*") && (TempChanPtr->settings[TOPICFREQ] > 0)) sendtosock(Sock, ":%s TOPIC %s :%s", IrcNick, TempChanPtr->Name, TempChanPtr->Topic); *************** *** 530,534 **** while (TempChanPtr) { ! if(TempChanPtr->settings[TOPICFREQ] && !strcmp(TempChanPtr->Topic, "*")) sendtosock(Sock, ":%s TOPIC %s :%s", IrcNick, TempChanPtr->Name, TempChanPtr->Topic); --- 530,534 ---- while (TempChanPtr) { ! if(TempChanPtr->settings[TOPICFREQ] && strcmp(TempChanPtr->Topic, "*")) sendtosock(Sock, ":%s TOPIC %s :%s", IrcNick, TempChanPtr->Name, TempChanPtr->Topic); |
From: Alex S. <ru...@us...> - 2001-04-16 06:04:32
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv5954 Modified Files: parse.c Log Message: made the whois reply network independant Index: parse.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.c,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -r1.60 -r1.61 *** parse.c 2001/04/11 21:19:10 1.60 --- parse.c 2001/04/16 06:04:29 1.61 *************** *** 539,544 **** send_numeric(312, uptr->Numnick, "%s %s :%s", IrcNick, ServiceName, VERSION); ! send_numeric(313, uptr->Numnick, "%s :is an AfterNet IRC Operator", ! IrcNick); send_numeric(317, uptr->Numnick, "%s 0 %d :seconds idle, signon time", IrcNick, ConnectTime); --- 539,544 ---- send_numeric(312, uptr->Numnick, "%s %s :%s", IrcNick, ServiceName, VERSION); ! send_numeric(313, uptr->Numnick, "%s :is an %s IRC Operator", ! IrcNick, NETWORK); send_numeric(317, uptr->Numnick, "%s 0 %d :seconds idle, signon time", IrcNick, ConnectTime); |
From: Alex <ru...@bl...> - 2001-04-15 06:34:51
|
pls ignore.. sent to wrong list by mistake. On Sat, 14 Apr 2001, Alex Schumann wrote: > Update of /cvsroot/rockbot/RockBot > In directory usw-pr-cvs1:/tmp/cvs-serv28029 > > Modified Files: > .cvsignore > Removed Files: > .kdbgrc.RockBot > Log Message: > > > > Index: .cvsignore > =================================================================== > RCS file: /cvsroot/rockbot/RockBot/.cvsignore,v > retrieving revision 1.1.1.1 > retrieving revision 1.2 > diff -C2 -r1.1.1.1 -r1.2 > *** .cvsignore 2000/10/14 08:59:30 1.1.1.1 > --- .cvsignore 2001/04/15 06:30:23 1.2 > *************** > *** 3,5 **** > --- 3,6 ---- > *.o > *~ > + RockBot > > > --- .kdbgrc.RockBot DELETED --- > > > _______________________________________________ > X2serv-cvs mailing list > X2s...@li... > http://lists.sourceforge.net/lists/listinfo/x2serv-cvs > |
From: Alex S. <ru...@us...> - 2001-04-15 06:30:26
|
Update of /cvsroot/rockbot/RockBot In directory usw-pr-cvs1:/tmp/cvs-serv28029 Modified Files: .cvsignore Removed Files: .kdbgrc.RockBot Log Message: Index: .cvsignore =================================================================== RCS file: /cvsroot/rockbot/RockBot/.cvsignore,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -r1.1.1.1 -r1.2 *** .cvsignore 2000/10/14 08:59:30 1.1.1.1 --- .cvsignore 2001/04/15 06:30:23 1.2 *************** *** 3,5 **** --- 3,6 ---- *.o *~ + RockBot --- .kdbgrc.RockBot DELETED --- |
From: Alex S. <ru...@us...> - 2001-04-15 03:19:28
|
Update of /cvsroot/x2serv/x2/conf In directory usw-pr-cvs1:/tmp/cvs-serv11353 Modified Files: x2.conf.in Log Message: removed the no-longer-used PORT line from x2.conf Index: x2.conf.in =================================================================== RCS file: /cvsroot/x2serv/x2/conf/x2.conf.in,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** x2.conf.in 2000/11/29 11:19:27 1.3 --- x2.conf.in 2001/04/15 03:19:25 1.4 *************** *** 5,11 **** SERVER 10.10.10.4:password:irc.yourserver.org:8888 - #What port to connect on - PORT 6667 - #What should we call ourselves SERVICE X2.AfterNET.Services --- 5,8 ---- |
From: Alex S. <ru...@us...> - 2001-04-14 22:18:11
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv10241/source Modified Files: commands.c Log Message: Fixed a bug in c_kick( where an error message had the wrong var for nick in it. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.142 retrieving revision 1.143 diff -C2 -r1.142 -r1.143 *** commands.c 2001/04/11 21:14:23 1.142 --- commands.c 2001/04/14 22:18:07 1.143 *************** *** 4022,4026 **** if(!(target = FindNick(targetnick, UsersN))) { ! send_to_user(uptr, "\002Error:\002 Could not find user %s.", target); return(FALSE); } --- 4022,4026 ---- if(!(target = FindNick(targetnick, UsersN))) { ! send_to_user(uptr, "\002Error:\002 Could not find user %s.", targetnick); return(FALSE); } |
From: Alex S. <ru...@us...> - 2001-04-13 01:43:33
|
Update of /cvsroot/x2serv/x2/doc In directory usw-pr-cvs1:/tmp/cvs-serv3082 Added Files: helpguide.tgz Log Message: A help doc, in various formats, for printing or viewing (for your users) --- NEW FILE --- RA@´¨`Q©j*EkQ|WÚjE¨õU[íößÿ×ïûìcvwB¿ÿÿk~?Ý{ϽsÏãsîsv ¡hqP ôë³?wÛ=Åíîçv»K*&þGË+*Êú¹+JËÜeSÜp½¤Ôí.íǹûnJñ¿¢ò2Çõc~1¢]ºûÿMÿ®jÕö6>¢\[Phow_ÕÖ.ETÕB_J¦´µËRp-bXP¸¡kß3V »SÛÚnQQ¸JYäCøRIëÐÜöKô"jCÜ"1ÒDÿrukª]çJg¬@·RHÑf´ÉBÐÝÖ!BÄÝæÅwïK¥'ë/¢©. ñadU9Qáb ZUUâø`Cü+DT¹~«¨=¹p7ëVLàÕñaAV8^¸¨ EC×#Ÿn>r¡ Ý Bb*'µÃ Á¢½kÛñ ±^ ÂÖd.¤´×wæ`7ù0¸Ii]E29 éÔ¡½3ÂÇq]©ßv+Jb¤KTrÅ4 n,>¤PÄ`1ÒZòXpÄÑWÌÐË4 )¦,â¸Ñ½ ±È±nrI vH, µÃצ7gãDÏ@VJ'X°~ðÀ©IG$d:& ¤zú©$H¥Ò£9¤b421+)xôØÇzûEê¢>ÁÞ¢d"¦T%ì¬n2.²#=Í[*[S¡JkmÖ'Ù2³*«Ã±$,!iºÕ%½57 ¢áôÎÝ bðÍà&C·¶ví¦ÉT#íP&9çjj/Ü2H¢Üf!EµG;$6é¦5ÂçÔÂÉÇlns3£¼¢tKr0CË»ÁÕ ªgK#R7Á+;xccëc&7\·Æ Jøa2¶ÙY^P!<6LNÂfÇrb$cBxêjï@©:lò¢}ÑWÙÜl´ ðªõ÷ÓH¨Hê#ø²tí"!kÜãñ673£ÜD%õx°$¦7I3)§Fß"B7þf¶ÉñÐq-$Ï®q©Ñò&YAí b^±ÕÐØâNÚCX,à¨,vñªÀ EáÑÈùV ¨+HÆ¡kFS_Z]¶º5.£{y¶k\àø`ì1 q(?.PµÇÒÉeQÕä&v Ýñ\#Ì©[TPoÜ@Âgh<'£ÅÂh²qªÏâ©EOñU°z(UÈ!IîÉF,0-©B|"B3ã#È®æ-SP{ÂÁ³"lfØy®ÞwYþXè Æ)NÀ ØA%Ñ%²Q]¹ìñ@)aØý¡ìÇKíå0> %>F² 0|ÇG£O) Ó Ð"Lx@ ÀGÙ)Ò.vÄpH7]bî ÉèÆ6-7yÆ\ö`:dH¨Æ9p.-E®ÚÛ(RqD®i!sôó1tCrÊ«1¥«6ܲE"+o\B£6Þ q¨ÖvdaYLÒCSÈNç-À>£¨hØ-d!® Ý>ÂVA3ª¸¸|ý10Ûì¼8nj%O6ø<Æ^'9ÚÉ¥í4ƵÇýpì(Ì42)(áÃlôMPFßrRáà`¸÷éjÔêã6ÖzR:qÃ8 ¬hHty©~ÂL¡C%Ý]ù.È'ÜüôéÊQ²}Qó=¥Ç§3Ó?ÎA'm¨Å 2ráX@¤Y$ 9!tm«é«j]~³lÙ2 ¸lð¶à~úS`¶ÌÈÇ ïÎð&=¨¹HC<UØ>Ãî&°Íe!@Ö IòÞñ=»ÀûlhÜfèÀ G"±÷íUoo¥ ®¥çÒò ñªÕì§ÌW ¬¦ifhxÜ÷T7É!K~AS å°À;Eâ~)°ÛË{phèÉÍÁ à93gA}åbO]clLµ%á8ËÅp,¬Ð® =¾Hü°ñ%CýìR,"¢*ò!ý¢i K· ktx±½'.ÎB÷´$Û¬v Ç$éDÓ½e$t¼ã_®1:&ìõkÀì£+íá>øsjÛ´±."õÑÄ¢²©94cêøÓÐ ZP@ Ú¨ÂvË*ø-!XEc¸c] I<I15Fµ²mIKÐæÁQÆtðörMÌ kAZUYWÇÍ\´ìµÌðÜËæ´!ËQºÉ©1vô±!èã× ¹ë ö@ΨóÅd$+ò¢mUΩ=Q"GX»ÂþIÄ6ÕÈjBbçZDXXá]ô2¹ßÕpnÍ.Lw£« -{í3IÂ(¬µP¿*TúdØ»-øE|Eâò Þ^YjÚ$H¤Ç8A,3zÒZÍÕµo!穬ólå©)Tëjã V²¿©kÛH ñ*r hI¤Pjaðïl$,Ä É«N"åâ±hboAL:ºÇT<°¤7¢Lܳf4%Y[)¬KÚ°×9CI)!úL²/;Vj Óó?/'ù¿;Õp¨ÏrL§Îÿ]QQá.aù¿+&BþïÒçÿ>53ÇU7zZ.ñy¹¹-õu¯µª®Öù&MZTæ4©º¥Ü(+.4ÉÛàåtÌbÁÿ#©ÿ«¢f¥N¼<siåt aAåq¨]s¼È©D±G ÝíbW¸EßD$ݺÊÝxÜIl@¿ì!¢Hx]à d׬¼I¾+ì2ôÓv^þY3'A'ô_t5ZB§ ¿A>%~N0d)É¢ µ~ç¸jBH¡p:ÔWÃH ?â¹Ó@oéÌ!³Ó1aYLRgàÞä+ àI3h¶©ÓÍ!´ÓChKÓÊ.=´ÓAèôóÈ>s´ÓaqÒI;P:ýSdi¡ÙÞ\Ói&K?M£ÌsTÛ1j.¹dZ[$-½Ô"¯S°&²MkítØØÚé°5µµÓaork§£Wzk¨3³´ØÑÅ|Ùv<!ÈF_¯MÔ9ZÒl6Iµãä`SZm§ÃÖÄÚNjojm´£¤H®méf;µÛ>º¥ãdI¼.³ÍÖítدQ§í»Á ° j2Îõé$MnÕPعQM¶ÙÁÕØ]Â4DeIe\<êuÜÆí3wrÊ*ë8£%Ûò;ög'[¸¹ÇѦÛw$QÖr»Òc/IÒ·ÆÍ ®Bà±K³Ë&÷¹q& ôØÝé YÐíx²§;äOÏ&VÏæ3öÞs²[ð×Y%]-¸xIÒv»6·$îUb9{z÷MÖùݬ2¼Ç$nI}"³ÀSe{·äMË& ¼Í*}¼½n£4içÓí?)óÑÛÄb¾ìE³ùXàl³Ô[áq(£ôõNI·j6³Ëloq ºÌ¡@öĦ²ÓÑ4j*:`}Kk®\Aßѧµ2I h<E¤Mdë9dCìÉ6EíéÔTTÁf:MW¡¯é4]¾Þì ê̺Dû}Ú} xÊFØ©y¦+8qj¨4Y¡ HNè>d3IæPâ"ÕÚÙz¢9ÓyÚzvÒy6N%Ù'ªÐ5ܲ±xGßøûzüÐ{ø#@¸%²æÀ1W 19á'Ë'aÁüÕø_º%-,bZq¯¹Å½ÚvAbG¡ûE[8.Â&é\2PzÐǶÖh©í7-^aéYqµe]ÅW r*i@4d_gb+I¥%´±BÀãeE0yLT¤`Zù$5ʲð9°¶uMôÚDÅbR.&Í Ô±P2¯?ãtØVÆ^W®±n¯ 7ÀCZue¯É¬9>£ xøBZúξ^ÓÑbcŧ£WÍ;ù¯ÐÂã9Üm1õµ|2">ÄS¹d<ØZð;ÆÒü±tͦ§eiIIìxZbÀN¬ÓU7Ì5ì£!e[©IdÇÀ©jXÓ7«rVgÒÍ9"x'ÙJ( $)weE9Ii@YªdIÙʪ¤ÓagQ%¬Û½edV Èf32ÓÂB¶L¦*õt*ù,^*«¥®eA§g²lÔÿÔD§kËyT§±-q>³JÎ!QÃVWÚÊãÖJü¹üU¢ ¥Ø °¨¤Å¥ÕÕÈ"cß`¢30VËB28£zY6!ÎJo{ÕC}.{$h¦ºÌè,A%(øÕÌý²íS³WJËÙrú¢/G ¬·%¯XÆ8²j¨]ætä^½ ²¬éçtØYÕÏéèU×/½-mÁ?ȹa¡ä d\0 Ð\"}Êj@û÷ÔÛF ËZeÙV{x¶J_ØÐnÅ*IíC¢5Ç Òc2}DxÝÎ:DôçV Ñ®õ>õ´ò¢=Tߧ$°£ê qä·VÎÛ^Ðî)h/Ã8¥¥pÙW{ÄÙ¨zÕ{´óÿ:bNV_ÒÑÔ¡dÊqrZËJ¡±ÌÙ¬´læZËÒÎ?õäÔ«v¦Õ x¾-°}ïÌF-,dYßÓéÈ¢ÂgfÁþw|¼ø§u9»ª ñ·T4ÍDr(JÎ>l,j z /QjäÄ¥Lû-U;M'ã2¨¶ <«ò©µ^WÕéÀáÞ¸ç·ã!s¬Ëzæ[-±a¶\q¨a,yM{Vf½ú«m2*»ª± ýµº±éDHöeÓ)0YW%ñ¡i;²-BN<åR6Ýs)[·Ò¤ kÓ{³«hkáÐ)ÓR·éø5§¸Ö'çò¸ºL eòAåÜtüyIÝ´Ú^¶µvtÕvíU§VéýËXúw£ÿái¶nÒÍkõúl«;[÷úäVøÚÌT´£ôsz³«ÊYÖÆ/áªBÛJ§*B¢*ÔV=V¶¦X ¡¿%6»ºÖNõÊÖ6>wÒØö¢»¾ÒRíÏ®¬Éd]Ù6åF¨Ï¨0·}+yj"Xo; Zªt¸-Û2.Ëm!æTmÜéȵ޸}ÒôôïF¶¸EuÎS6mÉwrp Uli,1i-Qù÷tÁêÂãý4YeøtKh.ÎIu-ù¸è§ÕäÉêéKÊÓõLWWÞ·,Ëóln,9oa¬,kÑkëaO5ú4͵L=v¤ ¶ªw:,ªOÇ7VkØÓ7}pAwí È$íbT{«ZçèÊ°ÓAHuu|HÉ^õ¢ç\5¾EBráÐ üâþÐU¾jÊDÁH\ÄAâðv äf$E G´è<çÁüHÉ!í¸úÀ; «g"Ä8å*©Jvü`ØT0¼ZK^ïÀ¡Õè1Ò=µÀïxÛ@üOn8¥v0 j½¨)ã)¦¥a}K¡EA&ð !hQtQÀ!ÈÑ¢ ,EqQî ²ºª¥²i·E;\ETñdè3Ò%jØÛÒ¤ÚW¢°]<vHhñËЩ(9âXsZÐsÚm'#%ö8BÑHa><ZÑ %®e÷HA$K$6_P~Ûþ¦@Ä'®Ô2!¼cÇhÛh£gÂÓÕ5Aì1:âèËÇÔNDýã8pæ1§¡¬@_ )´ µqqæC@¦ñýü º0·Ã&µ's{*3í°ýÚf[|&pDkÉa vMÌ^Ï.)o§ÿ˪ËÎÿ³ÙHKXsyr¥Ëú!õàY6t¸¨A®R8¼/&£ R iÖÒu/çÔ(Ù"Ø4Q, ZÙ`~SýH¤Óêź3."r[á-±·¨ë ïH!ô`Ö;k½ç¤íÊrß®¤õ8aFDÒÁ%rÄbT°"©3Ì)yt@m §C(M°ty8w¿$)¢¼²Ô¦Ì 'hd_ïp=}æÚ®®õx9Oe]º³BÍ¡=Õ T÷òÅj~¾Ww »"Ä«8ÏFPDv¢ Qk~ú<)ÑM[´Ô`ñé+ñ÷ÅÞôYðÛ¤qB¿\Õ¢L">Ì4l3aj5·f0ðÏI~)Ø¿tªáЬ~¹ý-/Gaq4Ø# î·{ÛÝÏívTL6üþ&÷sW¹ËÝ+ÜSPûò~»ï¦ÿãúáâQ)Ú¥»ÿßôï_uMQIq)b><þÊ/ôm*çæ$ÿÆf:êHâáièbúY# 6yRÝ¥ª¡ ?Ñ#2>ìt¬Ì[·òµëOtwú ËnzúòáyC«gw>]9êóÖدóÉ £F¯öàÍ[ª÷´¹?Øß«Êg=ØÇ[óG̸~ðàµÃßOÙZسuåVqÚöá÷Tö¿þ+nü7ëíÜý~ä¬Cf¿^8<à¸õàñ|¿7¤àèÖ¬ªìänË¢cþfÍoß{é·~¶zÄÓe«~=iÀ°úÿZÚ÷ö©£1ìªCÌ~í¦Îä9×¼ºlÛû~óÆcD÷lÙÕZ6f}Í>y»?qÛ÷¸O.¸ðp`éc_7gÍô;75ýÖ¼ÃÇ¿7åÉÊ}®ß·ç±®Ú9ú㯯]ü´pxëWköòFõ¾|î¶ák6/ÛöêÒ;ÿô»áÑ/tÜvôÚ;Wß[8vçgÜ¥¼îÅOë>(ÿâ«Ðë^>ÒþÕŸë'uu®+4àí ¼ß¼ag¿¿~ë´sOþþÁOX?~oÖÁÔKï¿á¡OúïnøÇéí]÷»Ú¾µv¦ûÅÝ[µãÕǯwo)æ8ö{;öðnÊ;ýÁM[§;õ;ðù£³K7ÜqâÞ£×ôûäÕy'fþcuÿ³~8luåÀ+v_÷ÚóG¹¨nÔgãn¿lHã£'÷üjíª¡ï¾³ç.ÇÉ©ÃïZþÁß <òþôÕ÷¯¹qsËþÉëïÊÿ ¯éëß/kÚ»ïwSÞ¥ÎÒ8ñÕ±7¿»pì-®§Ý{Ú«[ê®à¦~ÅÏëfÞ³§éu%ïÚô^éuWþøÝǧ¼s×ÖO§6)Õ·¿¹¬°1?ÏßS·aü·óßó´×ö~|p¹óø·ò¾ÕöHé[E/u\úLá#ßuMh8|óW;½ÿ{rí+Î{|ÃÁ3:/mæ>¹âU±KíY±hÉjó?cïWÜÜõÂɧO-:XÖþøðÔ̵¡ëÄ¡¢ãS_ÿG]£SéÑÇ/]øüVa ?,ÿï/Y°îá/ï¼v×ïß*{qöº¼á«ò_to¼K1fñ£yìzïo'~R4ï`×÷w½²à@ûc¾yâ¹~:lèwo{ñ¡MÎ×ÜoåýöøM+Ë6Hß[ÿΨqü['ó[>½$ÿÒ²g5¾øuÞ-kÆÝ÷ü=÷ðG:Æ}:5¶àèÑ£'fm{É5w÷¸ÓÎ{⫪¼çÑÅÖo¿èñÿãÃF®vÞtbFõsÎ/ÿ¼,ÿõ²ê÷Ç>PqgîÇ»6ûryàu÷º;·½]ÓôwþÅ~ïÀUëîøô¹óXüÎOß÷ûùøó/Vý á¿joryúWÆ~}ûêWï;ççÏrö»£=#¶Ô_xäC¬Y5´aè¸oV¼åÉÑ«zN*¯<ÿú(uôðþG&K§ï-Xí[7tÀÐ:?óÕç<°zÖÐkf»Vÿi{ÞÎA®Õ×û¿±Ú}çÐ÷´µ/ _µàÚ%µÞçñíy¯rçëC¾?ú3?ݵab¥è{ò¼mÆ üðüO~xá}_W}ëÍÎà¬Ê¿ìú|5¶ñÌCÅkûϾUPä];¯öúySu¿|ÿè»ïþjëÏ߸öp}á͸}ÃÃÅúWÎ}üBÿmg}øËyrÆÞúeÓW·-[ç2SyûþWþ±©æ¥?ý}¿ï®üÂ×F;zné>ôÎ_{qñªýßn¯÷2A(=÷ÛôÐ7íÞÚ÷è'}'î»uçov=1èõóÞXÉwm/6mÛýl ßñÌóǶ<ú×ýs¿\²ú?-ÿ ^¹äÑÐãÏ~°iäµåc/}ñÀ w.ì8ôÀí³¯9}KËóCÎØüÅð-©äØöqO\÷QxÏìOÆé¾h¸{á°g6ývÈ+û£kÝGܽ¸Ä±x`lkóA«Æ·{orÑ ¾·Î=¸µû%ËǦ {pÏ·>¼|aÕé?j}÷Âk/¸¼êo¼¼½¼{Ìî3¿¼iHÍ3æß?¼ÒÓÂç¹òÿüãN[ýW{T_7o»ç{kÚjsôªñÇÊ7EN»gþü±ßzîA¹)rÃsÌÚ~p÷®¡]Éýäèö½?®¿`°¯Q9îÛîás¿ôçLëkäç9u,{ñ£}~ýwÇÊÉûoyëÛZßú¯pí[W¯]ý^¨|{ËÑ Òïi;}èí~ï²7gl²ðG£}û\·{$÷õñÒ_/kº'ºxJ#òȼMù^7÷¬;'lößÞ¶ÈßyGùç¶l?ëå¿ühÅÀ¿xÈ}ú¥?Qè(YöÔ·ê' §\·W]¾fÜäÿuÝÂ]üþü;ÅÅSbkºÇs}ì×Y8Ûß¡?kùòÁÏõ÷È7]#/yùPçÔÏ;ö¡iÚôûN^yÁs3¾ýÍÏö 7®{¡ß¯Xy£|öÒÈ_ßû³w¶Í»vá¸oßï½ yÀÌ»ñïÿ¼¤ê·rèÐ.ï/ý¸°FýÁæÁ_î<ñÕ[ö¶½>ÿÐ-gÚ4òGï®:§vdÑýWþyÜä=ÃF¬¬ÍûÍ× t5\òâ ߣí]{ÚØ\±ùﺹ¾ñï¾q'®»`e˶µo\ÖÀim¥×ü¬à´@uÉuY3öÞ<u×ñ+®ðÏÞýÓ3FN:8ù²!oæåwûúñ×¹8sÀárÆïü×E;ÊW®t:HmÔè+Þ䧱ݾdZùÔøårЬknïÐ߸L5&AA>Ò¢9Ü´T[òÍÍM6|/á*èwÐ&ùd)Ð,¨\)¯yPO¼§SãÙtJJ)%%¥i%Ì®ã|ö`å³[\kÝVw¢#o ÷DçÖCKGWîühIçc³ÜckÜîÜ_|ãð^Ͼ¾J×C_õ´móæ/³ã@¤bLýu¯õÿb}¤ôÜá÷¾V7óÍyÃj<%ÑÚ«ój~·ìA/×N¸ÉóÒçÕ«ý¥[NØuíÎ/pÛîÝüi¿¥)wt~TÙ÷GÜôm/îóì|r6_ʯ8Þóäk§ -ùÙý?ýûk§un ìØ7ÛóÂï^¼·pÚÆo<òû=ïßÿÉQCOÒÜóIJ÷´Î»eùÖ½þs5MGïXR6æÝc}çûçIòK6vÔçg©/_þå½ko~uûÉÑQ¿ùÞon¯.Ш¹îö<W÷sÚï®(=ûÍ«Úç¼kùÒá2ßѲáSL9=$¯QüùOýmø+o(Û7oß³/8¶réÈoøÁïv~vGÍîø@ùUCýhðkGáoj;wÜ+Þ¼b÷~¼~ãÏ*x÷Êî),9ü'=7Ñw(?¯ö³ÏëüÓ!ùþ9G¹Î¸`üþkVFÆÖßãºþþ§·¬=öú¶ç ¹3ßWpävní¡wøv¿¿`NCáç|Ãñ÷ sUÝZøÉô'oÙ/^9sì=²_³gÞøYw¬Sühâæñë¼ï#ÏÖíþ¬tÞæ57l¨z|HÃUï/Û;âä>>¸àâÏç)õ(W¼ùÛ{¨¦îöq%2Ce©! {d1E%½ J ¥ä|ìÀNÁûöÝ;Å(:Sjí ?¦Q Lv:ô¦¤©¢kÕýJNÔkeíÙ¦8æ7^^ÝUWتR2*Uº%¹ÿN/ºrÿQ;_²ðcùóÏ[²â.R±[[3BÍò÷vié-ÜWÑýF¸åÜò6/ý;êui}&É2¯ø&±4¥D¬Î>¿ëÂÂ]i-\·íÝè6ZæøÍ\¼Ê£Põ¥}Ó$Í®ÃVW^MöHÐJò뼿PæARNØG?ÿGB2÷/Ç %ØÜ[6¢§ðEò9xañæ7+Ü ÉG4¼6ø´[·çS{À@oK¿µsX>áw o*?øT:1ÖCi]¤æR(e.k瘝orìµÙ}óe¢Zîá§G2¥ {$N¸ =³[OÏ«kï8ôu*åôAd§è»îò?¿ÿaç6Æç®Þ¡vÑ^'~7ôx7º½>MÑ3HÙ2¸yoaíèh¿oy¡¾z|´¦®&]¹ã;ÑÕZÛ%N·ñÐhk|9zjµ8Éaõ[£:"קÙÒ´ É>;7i¿D=ÊFT Ôej/Þ9P± ¾Aþþ¶×õ!Ã%Cۼ˼¨½x[÷£^wyó{ÉSë6½K%#%+ãªöæܽںѹw¦Ô{/;(wòZrJ`J÷Óí~f Ö`ík¢q^ñÍì_$4j8ݲ¹M8ºÞqöZ¶þ48RýäÏ Ú%ÞDvªjßÄFʯuòç&%í³]Câ2T@(%ö¹¬Î×ù= á«ß.³TåÇ"Åv·÷IÈyê[X×2Õ)¿Ô6Õ¡:o]r iünñ"!÷cïpºtð襽FV<\yÐ)|-Þc -óQ¦ H\ÿ^q~£çàWéC2~ G×UWöÕ}pË4 bÔ_k)-Ê0ë×4Ô;Û6Ñ'ð\ÇþÈmçµNôÿ¶uÒn¯´ÎTßÓÕÞÕÕ.ÉZ'd»TÈ:Ͷ*ÙVl[Z'î=BR#&(I²6ÐAÀLÒ\)Öì³h³u¨D+¡lÛ ¶À dZaÆ+3e¦Fd!Ýð@¥t0Ó½ÈU³qb;JæPn¹[æóerA(«× ¡[59M{*Ûõd°·"F2;±²:Ý)f2SÛ5b$3ê©~ãù7䳩*cf8êù3{å,äµF (JÄß;ÀXUØ!,M©¯°TË»`å×eùü°»\Y/ ÿøù°WÏU/Ä:OÀ»(.ÔuTLíýüX%óº¬ÙH=gð âÍK|V«¯aV»ïÛ©z¨WÄK¶»ÓFYü¬n3qj1\;ù\^s½lj½AÞN¥à³ñf·. jþ$áï³ïýü-âɨ^C[óIv¿)gýâÒª«(Á%÷T¤Lü ÒJeüÕOTHT£ìE^b{ýE®,ÍN5»Kö÷ïP_-Àê¼cêz¼ªí pJ{ñ~C*è¦qØkçZÛ¶È#j==V(Ñ_<Kò<¹î¦åztZ":U-ýáÙÂc·ÐECÄvzפ¦j¤³ÜZSZÛwt¥õtêÁhð9µÚ+Ütäs]¾Fëý-ý,e©As£auR|öÝWû]þ§%Ê#éͧê½.ØñÖ´-¶èîÜO?]:Ùüö ÞO£f½â+jr<CÙbÓÚ5Ûêãäw$Éu>Wd. "¼Ä,ßìêÃwÞ´Ò[vµNßZÉåIuÀ{ö¨^{(Õ¸x§L'¯ù^rñOÑárõ¦79PûEù¨EJþUGN®¹þ)<áÒ`Ôcq#2|ù+ÃWóE}Gh=±~§Çñîè#ÇÆ~Y}ÝîâæÉaÝÀÉ;/²R<Û¨{zïDÓÏÉ2¸¶9³æe¯ª{oÿóë«GGjoOô5D]ºO_|ê¨ðèò$îÌG·O|n´ 22¥R@±²;zYÚëí¿ÜY{; 'à÷nW*¡cï;Äú|û>ÖOãî§n&Zzí³=Øw©^áç/8M¢rs0ÑYYú¸ò[7U#rj婶5ë·ª±ë#óü·à ¯¯mµnïØqíð¡b»DqÚB÷»Ó·Ät'+~qÜKعNWcÝÙ[Õs4¼(Ýu[/~¥NÕ&HÙhPªBëFä¾õ®ÍÏy¤;ïto«ñR_Ú¶Éè:Ê@aÄE¿·RѽÙ&E[núMHòÀÃÃ;³c; v¼Ù"Ä·}ù7g7&Oé÷_92(è£Ü¨ãa®YàÜwìRtÉÎbÊê§6UÝúÞÍ»Ù(Ôå¢ IIcë!³<G¹2¡¢ü"ã¦Ý¬ì¬ØÿD;%ë_«ûìööÍabLyÒC3såjêºðÓRmÑãb®ùZ)u$£ÖTÎb iOìzØ}aM¸Y¢¤1ñý§øÂÃUùî uÊ'År¿õ{7 ¹Ðn np;{lkYÖÂ7wjªÍ_guÐuuÒ >B±ÖvÉ¿¶ª»ç_?o¡O~¢,w»xw`Àêsjq÷Ù-÷{¯éÙ?§º¥¬wPWíô)tp_"®ß¨ýÖ¯KUhRæËl¢¹=¼Z,ðäÓ2ßÚþ»áIáio{E-kj¼¿ýiëÓC¤î¥há/Õ÷ã~18âäV&á¦tN¤L:£$àÈgÉ'of6¿Óçê0¢¡1ÏuÂÿRçÑaóê0£ÿ²ïk ÐjTOÇÉvg?ä'yTXjH®ÄÅ7)ã"TmÍÙtTÁAày)ô°Ëy=lKÊê)nbÁ÷6:»3 É®Õ'¼VìFtºk»PQǤ fðà¢û1ÆiÕvßøI¾ð*¤`Ç%Ø æÞÐgºMë4×=ô»6µsÁDÅ Æ鬺OE¹WD4<ZùIgVjÉewµ.¤g.ë3ZüH|§!m²e°¨*-L &g\°¦4ö±boü}CdROQ×)ÝØJrédñ¥qÁW«z±¯^75wOÕJ£÷^¬r÷Õ4¬ùhVRØUñÙ[½¤RÓÁåñ µô¯:¥-<Azz¾ÍÜ¥´óVM@~¤¼8Q¬ ézbÓ àjý5S¹®í§Leoä¸@Ùd¦M&ý!K¦µGy{þ}=åÞ»ÂäÜÔ×7J+æKTóDîz¸MÝ ÄwÔ<½A}§yÆ;õDHblñj7àDt _&=7EßÉm¨C³Z?aצEMöæ«YXƶïUª[Û-pتf§æ$bI-É<Ùdsפ¡º%Ü£QX?)»P©wgFØؤ1R¹LH©ê2 Ú\ÕÝ,· ËÜãÖÆÆÉ/ÛTEåÔ*Øjð?zy|a+_¬àlvg&übÖÚ¯v ôû÷j¿p¼ªzF4yòczúó]â·e*ÂÚ+Qc_,Õ[úN.~ÁÈã±+¯wIç¼ÖÕ{úÕï é!¶cÚ+ü%KnõRXO%ï[RÝXóÝm®ËoÚsÃÆDò!>üå-ÄÌÍÚ¿OH^*0nuí]ZÔ%J¸¬Ðw($°7¢«ÑåVNo¥)õݽvæðíg«ª´²r{ÏèVÆÙíZȤ#»À(õ½ÿ8ø5öFgß@ÛLrq¦Áý»U-Iج©JiQuÇìDòYa3øý&²Ã ÓÃ5)g|oU-ÈJ»#[b'ëºwDa!êËö+bßÅmñX|ä{íðwê?Þ+±ì'çm]iÂñ£'Oå¿wÖ[Tühÿ@⤠Ññ]Ñ·¯¯gÖR²cni®K6;ªowì!~¶9÷®nßa¿M´½*ïnZ'â+Û8(á+÷F´ÕTSÈãwq£PÚ¯|-cMRuzü øz³¶1~>üÔêDâ]túm£âTJ»OO6'OÐFlé|]LÂbÓc Þ.yïÐ/{èìþ%¿,ký9<]»Àá÷(EsQççÛ7ÈÄoÕ¡~=pÃÃúMùÃÏĵî{ùÉGm(ÝEÀ¬]³ïk4¦*j×Óôâ æýtz;zø2ûW7»+B¯I¹v6ú 즪&¬\°b_¾\Òñ¬}Å£Í ¬ Ý{æ{L-ßsW)jOñk]U©ü%ºr[h,|"{ôÖéITRÔ÷7S:øI?i½çW¹?Rù¸R¸/Ó!øÐ-É+vMÂ5aYÁ¯®®2¬WôY9¯î'û¸dûáüt½6è|}ЮËs¯T^$-_!(UÈ$<~(_PÔq0I£ÏÜã4Ñ¥ÓåùG˧¤m¯ÿ¥fÍà>?bë:¦m£Ýñ»_òcNtv9JjY' X<VÌ}©rõxOÀ|y¬³íµ"^Ë7\ß$%ºsÏ5³1!²É³²XhÙwÇeÕòÝQÙÿH@Tél÷ÊGµrë6ÿ`ª»öI\½XáÅ÷$ήäM@bT¾^O´Ã#%¡ÁÖvz/²LÃðKÞ®¯Á$jZJT!V W9%íöpÓÙÜlÉ[öX÷xFeC`ª[R^fR?\¿Qkë"Ýç"ØQ.·°Y5MÂåQò«ÚcO;OxtêD;Ò½õ¬Ë\\ô´ð]ÄR>¿O2Ã){SÈîiXNl¼¤¿A&cÓïz~Þ8Å^JK*té<èòõ4:¾÷®Qü7U57ñ3Äay®ü/Uµá\UÇΧªñ¸¿ªÚ÷ÔÍVÕ´x1v0Ü+TºBVtÙ¤$kMy¶¯¨Â&¢ÒvÀ4ÊD)§«_H÷iïsUâkÄ/Pq墫Ø?ô8¿1zNÂJYÃgÀÅCmϵ'üüa÷ékz;ý~R9n¾Rç'®* í3#Èe¾}êT Üöü®b;ÔWqSôlXرÐýÀþ5Or7׸¼e6zÝ4öp`\ËDÖé F5cuæEúÝGL-Â]?5.÷µ§ÍÕ*ÃpÇľåùOJVÜfzÅ CWþÒGqÁc¾û³R£½NZ«÷d:»ÏN40x$NÈR®ÃâÝÂmÎÊ ÊY¿JHG jÞ7Þ`ãó¿¤È£¢l¼ýýÎË¢âË5µÛlzQÈ>1l6YäGÄÉULc34ÿíÚ¾/ãP(Sü}Bæ#ý/ÔÇ$ü°:ãÒ±wÄ;Î<ª3B&Ù;ª8ª?7± êa*oÕÏv|y~Ü ½×©\c×àGÙÎ}d #ÉKr.lÇk¾CD(×µ«!ej4¤ æñjé}í¦£òe¤Ú7ëóVÇXïɼ¼6ý4ó°ZúÛøbõ¾2Ì}s522°¢f¦Ú¶¢tzº 0 Në©|cþöØ /UuéÞ¶Þ+ùëÖ)]åo7=OSMÃìkJ¦ þQ¼*´o7"Û/áïùÝVª»_XÊÁu9÷ðå7Ç$v^¼_îºPâ³ÌOëÁQ7ÝnR^è|®À×ûÃ%üѤ¾²¸xÅ`ùSFßò+®~[¬.}z¾U®óÔ%/#§/[ùV=|!±kU͸©8FB¹ò&ÆRÞqDöÒíx_ÅÔ ¥h]éxú.ÇRuDÝûA§êþGWSË]ÔƦh{ ôI¡¯¶»Zs&+©wÕ¢³ÝÞ*ü«,eý<`|\U/ÙÒ{¤ñxfØ«OÄ®Ý÷» ú´*L²2¿:¹½ef¿°A!ÞÜkL%\¹¯´¿|s¦iA·qÓã¼SüÔN×!·öðÖÓW¶ýxûÊ» s¼zÁ¾ïÐIâËÅÛ,©.T×ó}²3 æ ÒS"b9lûh Lu¨2 Oà#¬×]+ü.è-µTë¨!glC|^Ù »äöËÈLYCáNùö5¢M×ïünæúqÓ!ºæåâ%¡ÒØêq»æï=¸ÜµONµ:×$anbûpJ±;Â2¤ DÖIÊUì·ñGªyÜ\îX0qêÙÌ^Ù£"c}½¦w¶IÄå.\02O-' h:1$ìVëó_Ãl5?þÔö¥[½»Cé)dR`ïi Òq$ë£þ0Ó,ApÙªR«-+o©fzdÆ,ÞìxüÉ×ÅSññ=S6jÊ(Ûª¼iMb®L¼¬ðîh{©îb{ßõ¢ã*Å.Åä§ùCéSéZë#~<ðkÎ%MÝH3uëõ8Õà½vó~ %IÇsDT¥,yãíøU©Kõe3Èï0 º¯ÚOd;¿Ï»±L¼âJ¦«ïèUò^§òáßç]ïY·^^¢¾Ùc*Wâ¹Z'3þ*QHaÎV¢y(ñÿ$f+aeÇlOà-þ 4¥÷¾ Jºõ0ny2#iâv@¦Lc§| ?LÅÇh¤deþ6 !׶LP4¿iRªÃÓÄD²ÇK®\¬éªÜ¨+·>tëÙG,)yVyÆ ¸Ó}ªWÈw!%úã3ò« ù9bB&¡<dï4Õ4G6?ÒÚ®eñ³´é}!±àã3Üúå_s«ñ×TªgNO,8R¤þ}DëjHªRZIÁ1Ý´ÓKE4»Ûk´25/íÄòù),ÔöëWLÍy¾Ê_àþÙÚÐ?/<¹k¯UÙæá j,E A¯üNý°n5½õôFúgH|¯÷×m>bõ¨ò1jUÄÊÝ$Oß;S*þÓÙu£×xjËg$Ìwùl_!Ûq Ìì%f¾'ýÔ)çÓ´$ x Ö¯1iÌàoZÕ¬k°<d'¨½'âLÍ*í'Vv?¯ÐOtÝáíé½ÊAZÊ)ÿ_ùYáÖ>å1|fÌlÓ³´±;=÷-wÕüâ ~àR hÿ!l¾úç]¡¶*ãL¹Ë´twývã´±vöÃçFvÕ¦^ä¯;¾»]zI±ÌÞûa!ó) ?iSNxó6cÉéÏ®Ìi÷º MgüÆãÛVObPI+t)$8óŪÿ²²ÑíÆ:K¹vÔU©«+½³]]ÿr¸ö:Âþý^jãí§¯Í©e¶çD¬/O7lé2¼]Â<º ¡¬¼ú`ÖÚÕßI-Ëvm3°0ìÜ©æÕJ¢w~ûúá±XïS| ó¼ï"ËdǧeëWÝÙ$.û<uìùA¥¢J6JM»É¶Öôô=K"MùÄ¢CÕ÷HcR/z+G û]ûJ/Ied^»±¨Öb£Oµ8ÝñZ«±ß éÃþã;{§ÞJÝó±qÑ9qRòG[ ðd©2Ý|æ¬l1õøÌ ø㩤FÉ'C¯¤]fcX ®¾>ã¶ßí.Nò¸r£ÝâKs8>pÝyüìÂë¦ÃÕ2!¯ý ÛÍnÖE'I_¹nI3N|ݵu,:xÌ$µÝT!i mzú ÆåÖü};²ÚUÒ² reü¥r« ;VVövHûÕÙê\I»n²)·ïB¡dÜËà@¡O*Që#ã¥ÇtlS¯h9}*8×FRf°SDruR¡_ñ¡~Ú©¬³±©¿|ÕKén[^°në »ÙFö`ªí[¥´×´;ê¯Ló»áq§Ò¤%rCiÏ; Ðð¨mmþv®ýÞDCb\}åãïmOiï|²³ÒpRjÉÐÛ}*ìêþ1Dæ.å "WlªRÞy§¸"Ư=|çËÔ$Ê ë´&ÿ"¡ó&`,9i%Ùf¥,mæv*ÊMªXHn}gæ;BÅÞwÕLÅd¦-òZÚ%µÁ¾Ú*(k?@kå$ÝoþpL-ÿMû¹îm¾®2¨ú²Æ%Rªö.¡>ïqz7-dÜïÒHªÜk_±þ`ÒêÕûóÛè¹õ\=sÿñ»ÊÔ¢Ãîþ6%FÚá¼gjÚe'zãÊdÅ]lÊkjÄC]¢dNy÷F¸fk/°ù´¼íÖà²3²Ûüæ¢e?>6ô[èKI¤Yü Àü:ÈãøòĨñøÿ¥Î&Ì£³çQãÿÛ1jXgg¦Ö=,ÎÖ@+f »µ:{´ÅSrC ̶çËCÒE*¥.±²¿¤Ð6 ª¥dÃÖlRSDÈùTYTOS.»p7¼HNh!¡¼ã) ÐoÎ/é1ª£äp¶z² 6Êg«!ëÚ I´ÁA§IEñݱFrA¤cøCÏüuîÇÇ¡dë¼UóÍ|dÄz-»õ[&ÖÊÞ¬yyõâBv¾_9FUG6ӲݫÐ4Ý./s'¾ûãySJ/ÇÎ<¹jó(ãN¤K±ÆÚ%~gV¬° M@ñ·$òÐîä¾Á§o³Ký"_Vv4Ô2{_#ªr^]GòóÕÉ ½hÆëI'Íjå!Ö&°ÒÊÄÜ&O®¨URÒÙ*x)@òõ¾1·-h3ÉÞÅl3Y$2b ´$'B½®ÑóÔH+)2S3ĤE¾{¦']v<$²äÜ«´àJâø¹ôÓÃ(ÍKl²oö`¢=Òþ0IÊP×ýG+|¯ºÔy@q˼sS,&¤¹jpÚ¢m¨D5uX3ô¶º<ôçJi~êÉèU¶Hk¼0%ÇGQSbAvµ¨ßé¼Tâö©+Ó1²û7£½x áÇþÔ\ü6z é Lz EMs®|ßQiþE² ë\¯u('éûñé¢lǯ s"PLk_ÞjEgÿ¯v ®[t+åf Ýy²0¤%Oühh±L³ÌÝn/Wjní-Ô%mGò~ï,B©¯÷#KíÚåDÚ~¡ÃãÐÐÍíî)®]õÏ¥¹%[éä#º ©U²Ù¦ëNSÔSíä÷yíXrólR'_3Ðô!Wé|L1¾övêÕø ¤8U¯Ýaò$Wÿ¼4®ÞàCH¡ä]>£.¡.ïB¬×µÆÛsÃ$É¢ï7»\?þzTÖDJDêþ'ëP»ÇQ×ÊúÔÒð©5òz¿/ATIYcu®Mnpë «-èOÒääEX7?G¨}ÙM_5¼7*Ý6a:N=%çí¸ËBÜ+³ìßÔsm;õñçýÖþ(9é¯îõ Ö2¿s~üãnsê¨öê«4ößà=a®îefµWbpµºwkÌÑÀçÆ·C>/nmàË kÜ}!®î(:ù¥©ÿ¹¬e,lfxðnÝG¯.KÑVùkZå[}ÛMë½v Ól«V.ß»WéYÆkÿ y\R·JïmÆjVéÞu2"6ùóôòCÊÂ×jªXT$VºîëB_æëð#£v¤ô, ðÏz÷Ã9ýkKøBI "¾J)óm1ë¯7(j6~g¥úöõ UcÜ1-×ø¬ùá[zø¥ÏÆ,¹³$r2\<áâÿ6Ïóc_ΤôõÔ·K_õSzC²~»2¤\"!'zK¹åV£ïñíR/kO·.¬ÝQx]cZ³££yÙ@XHâîÞø»ß³¾{¤Â7 ×õöVP,I줵ÜFÓfÝkUEÄ+´6w)¥ Qª#}P\$]}\âºÚ°ÅÝÖW>ª%~ Õ£~sÙ1;ùN¹9tÒÑ YÁÄÿ¤ÙÔÿi£Âô²´ñ²áËW^O^NÒOÝo(h[6 6ÐQm%õ-XVÜ|×:o¸üfÎSÅ]ÐÍ u4ÿݸλ_V?é·« ñÜòé¸{Ð]®UêÐy#Öº:äøhàaÇ0üJæ6ínñ»úñ2SL¼»I¬¯ZÀb·ò µaNeNâÚI{Pr¦.»¸ª6U7Mmß0áñÍ7êÇòÀãõÿÔøÁüßY?óý óý ?ìÿO"¶j¨kBRÌø( ¢¼ "ZHþN»;ÜH¡ßJzOÙHJñøÓ©Sùf{d[MÇ·{á<·&ëäûe;iÔùÀáà® ´¼CWîäØPÂ~ÛÎö8u=6%¢Ø ç£ýÇRðÅBÚ(iÛÇæºñÎêR61å_qK·[sRÁ´.تÉ"®eª`,w«Ê¼¥LK~N3<,´J8`üBoÃ#íÔËY[ë¾<.ô#ȽQy´'µÌ OºþÀ85óÜ&dÊý[/½ß§´6îÄÝWÑ8ô}¶wzEXìFѶj±Ëy¿:¶ÇËÚJ¥rǫͯf$_øxɯÈw¾*7¯NÁîÖ|bÍ*0öÏÝ¿XHtÊýmzÇqÛ«:ÿV8#Á½Gx¡¨UNjïªû®&ðÊn·¹¦zÕ_vĤ÷ÑÁïÕÊÁÝì7¶5®0Ñá{EÔ818d\³+2õäZ©ø;&RlIVRÉ>ÃlA«V®C)*YS¡fæTYãÌʱg׫µ¿unNÒ¾Hbý¨Û¦q:»)kÏfÃìRæsãnÇ°ãZ*ׯêìTjÎ>$JèÀ8ª¿jªÌÅä¤ í]¤¶VëDªaö¢ÇĪëIã«ëëF׫?Åf}{|Oº~m!øú M }PÝýp*"}Û±£ªÛ¯× } YE¶©_,P¥ì®=fÖÓý\·Ò§ÇI¥GQ"kª¤i§Uôo >vX¯¦Aú¨¡Í¤Ó}êÙV%½§~u´· ú|fÈ*ÃãòÊÂÂqRáâ)çScßÔm^X{GÒÀQ¦êGNÛþ¡ÕåA7+×lè>KòÉj÷9Uuö©SH9i¹¾ìMÎ 2|¦VIÎer0KÁÚÓÇß·'/½Z")9L_ÞzêåÆ'êþ²=±H£rµut³>ìÆnúø°ùsítõùïUÓ0©EÉ)·R+ ·]X|&¿êfâã¶Ê"MQLð®fç«_û>Ü>`¡û+?kµiVðÝ*iÄéVr| Þžã}ý] ÷-Ü% 7ÔØzÝd¡ÅrÈ*òºâÄÁ Iv¹ã©R;Í+7 *W%8©¼)L÷´5õóùP0¶-,PXMÙî Ñ:fsbñØÂX\TÊÉÂ2ùnO¤ÑN>³÷WS-ÕMc{s¯Eêúâ²ü[Zä¦Ðt¹Üò£_Wäµû!lwèÛçsÒ0%¨¶ãv¦1çéê§÷7ôȱ¶?Öx³ÜêD¢|ûsá_ðÞ=#¡TOÇÃĬ~ôwïÅ/ö³ñÜ-6Ä·ô,ö;?bÐõôDü=¢ü÷65æ%HðÛ²Q+LÝnåçþ'Z!{¥(S ÂßòNf.¸ 9æôáª_.³Ý¢¨²ùÊ¡ñ¤*þª'ZtBñx~§Ñ®QVD¶ÍósïdöX®?`#cñv\uq\±p× JÞ⨵|SGä5µú~Xú!¬ÅÖèù³kmaJ£òMIÍ¿däßÕCï~¡Ë_&4¯!L½ úx-òçaïÿC-B'îM7îMøûqï?óbÁu^¯Ð22]åæÅ* Ö§9ñÞ8Ù]©h®(lò Í#P9ñºO¾E7T¯{fiûØé|feýdì¿ûÞ+øûTWèÉ,F » uÓ ES´6:^D"0)nô){(XÞkæ)'úú!æÊÚPÎi'+®ëvbß2¤ê#ã^¯´Ý âÞçeN~£¯+5OÛh¿=X^ék,ç+tóûf³È4ìÓe¾ñÝ´ÎNæFæªÁwnð£rÝ_¼·9ÈH¼´ ),Ý80eð.KÕÔ&é\qð£ a¶CÝwBé£'DÌ=öi·+_¯¸ì°Ê TÙ ßé>*.½íXêø M]Ä×j%E©jémÌ¥3ZV¡!B5ÏÌ2$à|ß÷/xhraÔk¬å>ÚGÈ|m_Ûë{%dô®©v ÿ2ÞlU¶;ê1¢4xl*;·ÙóbVoWçÔydI¿!j,¸<ÁGk¿ñE_ÁÄ˨¿>I®|<l/1íö·y¦x5L¤ß$Ãì¾yr¨¨ã<¢ÝæÍr!¤b"ÁtèµÙ°µ¿ÈS|»c÷±TBâÁB-¼KbÑÑÅWNíðël¨Ñ[feÚÑl51vËygد¬ýL˶·£¨?+Üèñ~ýu¼Cû¡¢/VýYµ¥«M[²/ú/×)mÊìk÷nÙÛ'(´a*ùñÒ§Ï%ì[¶©ôEÈCãKÓ%c÷ËY%iïv_ºüÔ&Äfd¸cîÙÌ"¶¼þ{51í{-7ä_0ilúü53ýÜÐ×ä¥/Å J¯hø·/£jjTì`)VF}|ÖûÅæWfó©a¦ÿF #Û¤·K Ä'òXÆ`³õµQGþÖË)á>*Sk ¢w ÈX"RRpþåâèe9t¬wÍb c5=¨ ãÓ/mFÚn-^yX×ÊW7¹NèÏÿn(kîzÏåì³ø»4JzH×k°ÎDê¦&ö/F³ì H|#ÃzUÚ/¥ÔÝùZÒyïãÚRBRåHKöî®~ÂùÍW÷ßÜöå÷KãGÄV?ÖÁÚ0Çí2¶&Øv}=p¯}[èc?XvÝûCÍaÇa7æÝ OX³`õ/·<H²´Mh¼`x¬á ;6Ñ$ÔÐí÷ãyÞÎëñµü Á!É8Ìtâö¥Vö5×Lw*qÛ5d\[^PмªØH£`åäðÜ BÎ RÚ<³äEÆTåM,AÉP¡Ëóxù¤Íî/Óº²ã-ÉÌB¤XD39ñØÉÛÓüY~¦rý]ÄùzcTÝ«T/ã§ôS[Ë?ÉUêÏÓAáÔÛLxÚk ;vE,ÿûL½;Õ^ÙÅ.Ú´&/|Qz<9ïzKûQ°ê-~Ö=Ñkb½ýAP¾D?»ì\a½l ÏáµÏî ×Üèv>-$Ü5±/Qá@h½y° ᨹÒmÏÞÝ"+/åÉ©©ãeY±¿Ûbõ,ÚH;Ý°ÁwqßǸU& §ù<>?LMÓÕ9#Sv²²kþ2Ô°Ûµ Aø@ÎÝV!³µ8Üþ÷ÏظB×{tôÑ$,_úø°ÅI<ÑðyÔãWÅÉ ºç©dÓû2 G}¬s Pæ9Öª[ýé`JNMëüúwj"ògïÝ8¶ÇZ%$X¶Ióñ)YeÏ"AÈW-îv¬BkXiMÕy÷V|î]v;}«> þxײæAê§n¹ü(³±rx3o1¼¢pÇAÖ÷'{N§ëéü¦ºÞüÌJÉá *S©fãvpVK<Fÿ ¬PXlY(üDUDmÇ= ®Z#?./_| _ÖùºYÈïJ#è¦xL²ÊÜ×]ôy÷óI QÅuªsBF²i©äiD»`d¬¶qBîÈë:sóT5Ñ2Éã`+Ú9d<öÞY¯µ2ä7é¿.ëJö½»ýÛõ5=éÙNîNUÉÛ:$4bÖÑ$úЮ"Ô1°i-Úê2,zz3åäÓ¹ÌÓýË2JuíùwVY³ ¿ÃÉèÇ)ªñ&éHOÔÞ}ý¼]4¡åcdÐÜ/V³_;dLáñ õ`ÙN±Ó¼kù^AÇddÇLõÚ|xäÐYihÝA¼XëR¡|OJÕb"¦H:Q!vq÷»}«FÝN&(«T.~èugòd¿ÜÉ°¶)ñACìærþg¥ÇÖÓ+âS¢|ÑÓo.únÿÏS^SVðÓv /|×*òݱëߧ¶h ¢"%ÍÓ2Ï %ÝØ%Í4!5^¬üM±½ù÷í>¦ÂCÇ p£"',&<ãï!¹¸ÞÀÓjRÔ.l! ;-~)9Ù¹H©=±9ú*Û«O2dDh*ð%KݵáLT=êF ÏåæûÚø¨¥g¿?wåé¡x w_ß¼{izõ@)Ù·ñÜÍg|ͱ 6²1ÃÛ",½¹-6M)ûonâ_)ó\1)g}¾-s©ÌD[éÊ5[z R`|w¹.Wûõ CYv ?VÁ¬ðGm,èÞz¶;L7maê£ã TãE)Ø)3(m¹&\!ÿj¦c8 ȯo¦6ݳ×t÷Ë¢j<VH7>à(¤æoxȱ¾ÿfpØ1Uº8°Ó© ]÷ÃDSûüõQËúÔÈbéVe §zÄkjÆv¡Ouhüò&m¸jÇÉl+SħÀ©SÚÉ¡#¬í0òSÒÖÇÖ,A OËÿÉæÙOÛ¯úÜeÄ÷tO-è;W6zSÍöáÆLÍXã5ZKLÅV9#J4;Iè5¥öÝYI=`±àxæÙÓeîÙ b~ê(o ÚNSÉ ã-V)?¦ÀMy.ÿOcU¹´6_É,¸ð{_$ô»GDü¸¶ìn «'±¥ ±3æÖÿ[ÓndÏ;ó?ð{GJd-¼H0ÀßàA"ÖÅâÀ£èôÁ8ð7¬±!øFct±Xè;"CO<; "Å°h"ÀûXîm ¯ðC ûÎØ ±( ¶8:ôqòS¶è¦F~Tc#á «'®ùó;6qÌRJD$ÌÅx3b+WZ:[!Åþ×ïÔüÿÓýþ×ÈØÈÿ»5þøý¯D"¯¿ÿ`hH$ïMø÷ý¯ÿ/>xîèÑ4û=éVQt¨ Rü³Óä X; ýaT¨µÔC¼daá@r´tã}õvS'è¦VèïÐÅ üí·ÎÏþ Å Ù9ïæi¬L b(P_":Je2æô]G±w2á:g4ȵ<ÝMÛþ ê¦ `§`1¨ÝÍn¼D ì Ûè ,#Á7¦sÆ1 Ó ¸×Á.¶Ð+ÔáÖ-Lhf`*èì`g]`09ûìê1Á4ÿ`ø^°5J »°ón8w¼ÌNðì qCÓ Z½C Vls¶Laq:Amx8Ø@÷7=Õ,Ý´yЬ ãyú:ô½@ÿÁÀÈo¢w&j`Îj2÷.X$ò`;:}7Ô þ!²Ç °·Çsg{>ÉÜaizs3ñ0xÀU9¤ßr0¸÷'.§àjN¿)ؽnqG»ÛØz¿¹Ì¡cþÔW Âe1Lw·ýG$ÀF-¼× !ábUö]0BÍÙ+ê¡Î;)gÎÀ9þ7¸wì§!ÃÓú×úý»úÕ Ew{®þ7áüáÀù8pvùÇ hà\CjIðÈÿ ìãÎo/QظGÏ>öbLKx%8Áñ0»Ù(:ÊbQÕÔ½f.u/¥E*i̦xÜ\_r@CæCÙùëù9:Ó³r·6u¥3 î\YH6T£àî±PÀßüD 27PscpÎÜ°dáîG8Ñ"¹ò÷©1ÓÐÎà^bh,*Úº) »)è TÆ|þòa´ræî!o=bùché1 V8¿°Ûp²Ý/,*·{n< À§3Hqh I¥°É#àltÿéC0-ewüô@ZPèaà ÂÓå Í?Ñ"쵡ü hkÓÌÅ Ã,ìü8+2Ü.AÇ @wÁil@yup_åiðþhâs} ¶Ö`ã£<æ1Ѧ Áòt0O@ :ÏBô,4s×ÍÔÀH°ÒDkÎò?*ü $öbÊCs ÎÌHPE`(4Ø?nÒÕÕý«&;T5-AÑÂä A«ó¦? ¿!qà-#8;ð£ÐY³$:Kf.Êdda>0ûRGþ |LèBn¯:>net¡DjèB~èð(àM<ÕzÜd!¸¹ùr=i$³ÈàFTP0² /'pîêö¶dûysQf%;þ²c³º/yLW6ÍNPQwXØo.d=@ÚcCfXÇ&_h6¶Û? `Þ)º, u Ä ¶£ÁFAPæ bä\[! ÐLÜx/`ÿ@E#>7ÝÈQÀÜfÏ1wdÇÅÖT8Xð xÁnéàa¦=[:'}³#z9 'ºx[8UGH@5PT ,À%¡Ìþ}ôL8(ÆØéØÎ4ÕÌ/ÌÀ{¸ÈH(ôò ß±ÖêçµeQèÞ¢"ð¬(w_3î_st¶°D@öìç}Ùù³t²ïqç æåɤà_è¥+Ï<ëÜYH e @=¦Ã`ÂOI±9öc qP tÑØì3#çô@0%|ð´ùÆB^+àÉFÐ`uIè[Ì.è sLl¤¤g Ö¡pSÚl/²áQp~À(2" ªäÈR@/xØ:Z:¯{.p0 ÃkQ §í²Ân{d "Î< 9ÎdD (ÕX<;f ' ` 4øn@SàÜþì·ChCüÄæröà¯Úh@øió 2X½sáþàK.XÓ FÓ¨1°ýA¡³© }îÓPù¸6hY®<¥±+¶£aâÐÔ¿Z¡âdéÝÏá1êfT¦ fé`è*1àgØ: gÚ<,óôSd%0ÔX §l§Á6+ ÐôØ$8çyNлMk0{ѯ;½©?:öì? <ä¬b<»0\ìL[|Ó4ÉN H¥²[£Ào)à O6óYxR짳9»`GVÙçÐFÔã]±få¼ÕÅÉ&0à{¨°3!@íÀ±¬IýecI¶ KDxS]rf z ?#ÉìàìJf¹gVciáQá<2ã(t*õcÙ ` üX80èº JÁ;ÁG§ÁÁ¢iPãX4ÐgøN¤QÂx! lð@ð$Ð~<_³óÕ¼$)á¨@ôAà£ðò¥02uàݸG]¢iä²àY oBI°y±+Áæ_$ô8øÒEÛhß'¼uÑ° ð@ÆFq½8Èé³p¼&&È&pÿP¡htàwkø+ üh8hD&òxÌ×YOãÆPý¢`¯Ãõ¡ Çüæ ÈìòZ?è¹âG' ÁdËpÀ÷0÷ ¹Y[zð z ÆÞòBíéhvø@2Aé#(Àªm >à71¹0iq°¬Ö]ßÒwÜäo &`¿¹`fN_ÂtÈà¬*[Ï9 Kð `¨¾`ó}çÁ:Dé3-q¶L¦@¯HP ÆwÙQ.k§u )áO *GC°ªcÛMPA/&ÀÕ0~ W V¡4\å7Ãe¥°BÙå-0Øà yhÀaalüR)!ö£° vo0ñt¹m.`ÁÒ6àiøNçNç7Gfwd 0þ¹£þwÿüOßHôïçßÏ¿?ÿ~þýüûù÷óïçßÏ¿?ÿ~þýüûù÷óïç¿ùùÿ |