chess.app-33/0000755000000000000000000000000013034414342011661 5ustar rootrootchess.app-33/Chess_main.m0000644000000000000000000000474713034414342014124 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Chess_main.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import int main(int argc, char *argv[]) { return NSApplicationMain(argc, argv); } chess.app-33/GNUmakefile.postamble0000644000000000000000000000005613034414342015721 0ustar rootrootbefore-all:: -mkdir -p ./obj/gnuchess.subprojchess.app-33/chess.tiff0000644000000000000000000000623213034414342013643 0ustar rootrootMM* P8$ "A`R+a0peTP JR(*jW%bPHJ&QJUL`)Ba*J9Dr J@bH:T* dĠE*$)D"V$xTAJ@ZpU(kP)r)R60*0pqg.L=ʕ"W`diP.v WB%9 EH*Fx8:RMt rJǒc32&H8!;9jTB  @;T* p U%J>RH]Uqw!䏥T&oD"P$>?cvk&ŧTtBGzIR:uLTEP3} #8Tm3YIFZ&BHMS5LL [x 6!}[IJTլ4Ώ]pP{GIWq=ϝn, ]*pr00 (R 4+# ' ' P8$ a0@ ( 1h$R &¡dA$Nb@td(4H@ #IeRe40 A<Mu F,T+?%Hd!ʂOQ ?ZΫv+ 0 Q2P$2lXJ %~7ri O1U`}WD H MBR.O{)Gw>#=aU&Վs-\<x', t~٘j1~V20d m>e,/ B,6.h@4m + dyOyWf4(tIn41M "m= &ꪲBtR5j-2ҥ ~RU*ʯS*DZUȠ7m{b$4kr75/ W GDъI*ӺXNI%4>R+R/#+Pz!YqʈJ&@JڰAc c(^NC9UؒAp_D'k2& 2 핀KK+@g?Ӗ38?i>+*h!K\sc.cZ{GjiЛ̭Cq@V% 2C@p``}+/KIHQ|z[2R󚐃!2j0!! k"6l&GFs. z6e86r +'h!xxվJ C>/s LU 'w+}/BTї牬 +M!kaր@ C^`6/&DYN "`/ұ~/HE[`e8Ap/Ś%{%)4^`D!?\O1&%b%x3&mfC12\tJљhҺ #O>8y"ReVBf3E~4&pJPg A>^K/0wk}F<f ЖT/iókMОJdZIҋl"'5*r3Q8,,eymKY iPMI YgC|7gI IN#''fǓ"i)seVw_2n| \#ћ͒lY3S0mN&WA\oIu ޫ@@3hNҍ.9!XcoEtʌF4en $7( CH ľ)U_=2\dItG} 6L'g&KM&EGO: ~z;Bd6M;;{`O3cʢ|:Xh##42׿$H|aTϐ"/\[1MqH|ةim !h%SF+DYlJGJg#1QygxM˼Jeо*CX68G9 &={-{z$ZBp f18lݖˇI\MGN3S$(6@0 ʼzRW B5yKɏ pV'LhulR@\ U̹p6_І N/M(B@+BZކ$F4ƒr͹00 UJ  (R  ' ' P8$ 0*D`-B 2;CeiT2/5Hd9Da+e@~}EdsU6K ҍ5j9c Ө<Oҫ9>dEl|U7TSX ‡\[jԻoԬ[u+Ա7dp$L=UU{$#5S:{ op^Nav7-K    (R ' 'chess.app-33/ChessListener.cp0000644000000000000000000005173313034414342014771 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: ChessListener.cp,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #include #include #include #include #include #ifndef GNUSTEP #include #include #endif #include "ChessListener.h" /* * Copied from gnuglue.h */ /* players */ enum { WHITE = 0, BLACK, NEUTRAL }; /* pieces */ enum { NO_PIECE = 0, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING }; struct CLCoord { explicit CLCoord(int coord) : fCoord(coord), fCol(coord & 7), fRow(coord >> 3) {} explicit CLCoord(int column, int row) : fCol(column), fRow(row) { fCoord = (fRow|fCol) & 0xFFFFFFF8 ? -1 : (fRow << 3) | column; } explicit CLCoord(const char * name) : fCol(name[0]-'a'), fRow(name[1]-'1') { fCoord = (fRow|fCol) & 0xFFFFFFF8 ? -1 : (fRow << 3) | fCol; } int fCoord; int fCol; int fRow; char ColLetter() const { return 'a'+fCol; } char RowLetter() const { return '1'+fRow; } }; class CLMoveBuilder { public: virtual void StartMoveList(); virtual void Move(int piece, const CLCoord & fromCoord, const CLCoord & toCoord, bool take, bool omitFrom) = 0; virtual void EndMoveList(); virtual ~CLMoveBuilder(); }; void CLMoveBuilder::StartMoveList() { } void CLMoveBuilder::EndMoveList() { } CLMoveBuilder::~CLMoveBuilder() { } class CLDebugMoveBuilder : public CLMoveBuilder { public: CLDebugMoveBuilder(CLMoveBuilder * nextBuilder) : fNextBuilder(nextBuilder) {} virtual void StartMoveList(); virtual void Move(int piece, const CLCoord & fromCoord, const CLCoord & toCoord, bool take, bool omitFrom); virtual void EndMoveList(); private: CLMoveBuilder * fNextBuilder; }; void CLDebugMoveBuilder::Move(int piece, const CLCoord & fromCoord, const CLCoord & toCoord, bool take, bool omitFrom) { static char * pieceName[] = {"", "Pawn", "Knight", "Bishop", "Rook", "Queen", "King"}; if (omitFrom) return; if (piece == KING && fromCoord.fCol==4 && !(toCoord.fCol&1) && toCoord.fRow==fromCoord.fRow) if (toCoord.fCol==2) fprintf(stderr, "castle%s\n", omitFrom ? "" : " queen side"); else fprintf(stderr, "castle%s\n", omitFrom ? "" : " king side"); else if (!omitFrom) fprintf(stderr, "[%s] %c%c %s %c%c\n", pieceName[piece], fromCoord.ColLetter(), fromCoord.RowLetter(), (take ? "( takes | to )" : "to"), toCoord.ColLetter(), toCoord.RowLetter()); else fprintf(stderr, "%s %s %c%c\n", pieceName[piece], (take ? "( takes | to )" : "to"), toCoord.ColLetter(), toCoord.RowLetter()); if (fNextBuilder) fNextBuilder->Move(piece, fromCoord, toCoord, take, omitFrom); } void CLDebugMoveBuilder::StartMoveList() { fprintf(stderr, "----- Legal moves:\n"); if (fNextBuilder) fNextBuilder->StartMoveList(); } void CLDebugMoveBuilder::EndMoveList() { fprintf(stderr, "-----\n"); if (fNextBuilder) fNextBuilder->EndMoveList(); } class CLSRMoveBuilder : public CLMoveBuilder { public: CLSRMoveBuilder(); ~CLSRMoveBuilder(); virtual void StartMoveList(); virtual void Move(int piece, const CLCoord & fromCoord, const CLCoord & toCoord, bool take, bool omitFrom); virtual void EndMoveList(); bool OK() { return fOK; } #ifndef GNUSTEP SRRecognitionSystem RecSystem() { return fRecSystem; } SRRecognizer Recognizer() { return fRecognizer; } #endif void StartListening(); void StopListening(); private: #ifndef GNUSTEP SRRecognitionSystem fRecSystem; SRRecognizer fRecognizer; SRLanguageModel fModel; SRLanguageModel fTakesModel; SRWord fToModel; SRWord fPieceModel[7]; SRWord fCastleModel; SRPhrase fUndoModel; SRPhrase fKingSideModel; SRPhrase fQueenSideModel; SRWord fColModel[8]; SRWord fRowModel[8]; #endif bool fOK; bool fListening; #ifndef GNUSTEP void MakeWord(SRWord * word, const char * text, bool optional); void MakePhrase(SRPhrase * phrase, const char * text, bool optional); void MakeAlt(SRLanguageModel * alt, const char * t1, const char * t2, bool optional); #endif void MakeHelp(); }; CLSRMoveBuilder::CLSRMoveBuilder() { #ifndef GNUSTEP const char * SvA = getenv("CHESS_SPEED"); unsigned short speed= SvA ? atoi(SvA) : 25; long refCon = -1; fOK = false; fListening = false; if (SROpenRecognitionSystem (&fRecSystem, kSRDefaultRecognitionSystemID)) goto failRecSystem; if (SRNewRecognizer(fRecSystem, &fRecognizer, kSRDefaultSpeechSource)) goto failRecognizer; SRSetProperty(fRecognizer, kSRSpeedVsAccuracyParam, &speed, sizeof(speed)); SRNewLanguageModel(fRecSystem, &fModel, "", 7); MakeWord(&fToModel, "to", false); MakeWord(fPieceModel+1, "pawn", false); MakeWord(fPieceModel+2, "knight", false); MakeWord(fPieceModel+3, "bishop", false); MakeWord(fPieceModel+4, "rook", false); MakeWord(fPieceModel+5, "queen", false); MakeWord(fPieceModel+6, "king", false); MakeWord(&fCastleModel, "castle", false); MakePhrase(&fKingSideModel, "king side", false); MakePhrase(&fQueenSideModel, "queen side", false); MakePhrase(&fUndoModel, "take back move", false); SRSetProperty(fUndoModel, kSRRefCon, &refCon, sizeof(refCon)); MakeWord(fColModel+0, "a", false); MakeWord(fColModel+1, "b", false); MakeWord(fColModel+2, "c", false); MakeWord(fColModel+3, "d", false); MakeWord(fColModel+4, "e", false); MakeWord(fColModel+5, "f", false); MakeWord(fColModel+6, "g", false); MakeWord(fColModel+7, "h", false); MakeWord(fRowModel+0, "1", false); MakeWord(fRowModel+1, "2", false); MakeWord(fRowModel+2, "3", false); MakeWord(fRowModel+3, "4", false); MakeWord(fRowModel+4, "5", false); MakeWord(fRowModel+5, "6", false); MakeWord(fRowModel+6, "7", false); MakeWord(fRowModel+7, "8", false); MakeAlt(&fTakesModel, "takes", "to", false); MakeHelp(); fOK = true; return; failRecognizer: SRCloseRecognitionSystem(fRecSystem); failRecSystem: ; #endif } CLSRMoveBuilder::~CLSRMoveBuilder() { #ifndef GNUSTEP if (!fOK) return; if (fListening) SRStopListening(fRecognizer); SRReleaseObject(fModel); SRReleaseObject(fTakesModel); SRReleaseObject(fToModel); for (int piece = 1; piece<7; ++piece) { SRReleaseObject(fPieceModel[piece]); } for (int rowcol = 0; rowcol<8; ++rowcol) { SRReleaseObject(fRowModel[rowcol]); SRReleaseObject(fColModel[rowcol]); } SRReleaseObject(fCastleModel); SRReleaseObject(fKingSideModel); SRReleaseObject(fQueenSideModel); SRReleaseObject(fUndoModel); SRReleaseObject(fRecognizer); SRCloseRecognitionSystem(fRecSystem); #endif } void CLSRMoveBuilder::StopListening() { #ifndef GNUSTEP if (fListening) SRStopListening(fRecognizer); fListening = false; #endif } void CLSRMoveBuilder::StartMoveList() { #ifndef GNUSTEP StopListening(); SREmptyLanguageObject(fModel); SRAddLanguageObject(fModel, fUndoModel); #endif } void CLSRMoveBuilder::Move(int piece, const CLCoord & fromCoord, const CLCoord & toCoord, bool take, bool omitFrom) { if (omitFrom) return; #ifndef GNUSTEP SRPath path; SRNewPath(fRecSystem, &path); OSType refCon = (fromCoord.ColLetter() << 24) | (fromCoord.RowLetter() << 16) | ( toCoord.ColLetter() << 8) | toCoord.RowLetter(); SRSetProperty (path, kSRRefCon, &refCon, sizeof(refCon)); if (piece == KING && fromCoord.fCol==4 && !(toCoord.fCol&1) && toCoord.fRow==fromCoord.fRow) { // Castle SRAddLanguageObject(path, fCastleModel); if (!omitFrom) SRAddLanguageObject(path, toCoord.fCol==6 ? fKingSideModel : fQueenSideModel); } else { if (omitFrom) { SRAddLanguageObject(path, fPieceModel[piece]); } else { SRAddLanguageObject(path, fPieceModel[piece]); SRAddLanguageObject(path, fColModel[fromCoord.fCol]); SRAddLanguageObject(path, fRowModel[fromCoord.fRow]); } SRAddLanguageObject(path, take ? fTakesModel : fToModel); SRAddLanguageObject(path, fColModel[toCoord.fCol]); SRAddLanguageObject(path, fRowModel[toCoord.fRow]); } SRAddLanguageObject(fModel, path); SRReleaseObject(path); #endif } void CLSRMoveBuilder::StartListening() { #ifndef GNUSTEP if (!fListening) SRStartListening(fRecognizer); fListening = true; #endif } void CLSRMoveBuilder::EndMoveList() { #ifndef GNUSTEP SRSetLanguageModel(fRecognizer, fModel); StartListening(); #endif } #ifndef GNUSTEP void CLSRMoveBuilder::MakeWord(SRWord * word, const char * text, bool optional) { SRNewWord(fRecSystem, word, text, strlen(text)); if (optional) { Boolean opt = true; SRSetProperty (*word, kSROptional, &opt, sizeof(Boolean)); } } void CLSRMoveBuilder::MakePhrase(SRPhrase * phrase, const char * text, bool optional) { SRNewPhrase(fRecSystem, phrase, text, strlen(text)); if (optional) { Boolean opt = true; SRSetProperty (*phrase, kSROptional, &opt, sizeof(Boolean)); } } void CLSRMoveBuilder::MakeAlt(SRLanguageModel * alt, const char * t1, const char * t2, bool optional) { SRNewLanguageModel(fRecSystem, alt, "", 0); SRWord w; SRNewWord(fRecSystem, &w, t1, strlen(t1)); SRAddLanguageObject(*alt, w); SRReleaseObject(w); SRNewWord(fRecSystem, &w, t2, strlen(t2)); SRAddLanguageObject(*alt, w); SRReleaseObject(w); if (optional) { Boolean opt = true; SRSetProperty (*alt, kSROptional, &opt, sizeof(Boolean)); } } static CFDataRef sHelpData; #endif void CL_SetHelp(unsigned len, const void * data) { #ifndef GNUSTEP sHelpData = CFDataCreate(NULL, (const UInt8 *)data, len); #endif } void CLSRMoveBuilder::MakeHelp() { #ifndef GNUSTEP CFMutableDictionaryRef dict = (CFMutableDictionaryRef) CFPropertyListCreateFromXMLData(NULL, sHelpData, kCFPropertyListMutableContainers, NULL); ProcessSerialNumber psn; GetCurrentProcess(&psn); CFNumberRef num = CFNumberCreate(NULL, kCFNumberSInt32Type, &psn.highLongOfPSN); CFDictionaryAddValue(dict, CFSTR("ProcessPSNHigh"), num); CFRelease(num); num = CFNumberCreate(NULL, kCFNumberSInt32Type, &psn.lowLongOfPSN); CFDictionaryAddValue(dict, CFSTR("ProcessPSNLow"), num); CFRelease(num); CFDataRef finalData = CFPropertyListCreateXMLData(NULL, dict); if (finalData) { SRSetProperty(fRecognizer, 'cdpl', CFDataGetBytePtr(finalData), CFDataGetLength(finalData)); CFRelease(finalData); } CFRelease(dict); #endif } class CLMoveGenerator { public: CLMoveGenerator(CLMoveBuilder * builder) : fBuilder(builder) {} void Generate(int color, short pieces[], short colors[]); private: bool TryMove(int piece, const CLCoord & from, const CLCoord & to); bool TryMove(int piece, const CLCoord & from, int dCol, int dRow) { return TryMove(piece, from, CLCoord(from.fCol+dCol, from.fRow+dRow)); } void TryMoves(int piece, const CLCoord & from, int dCol, int dRow); void TryMoves(int piece, const CLCoord & from); void TryMoves(bool omitFrom); void TryCastle(); CLMoveBuilder * fBuilder; int fColor; short * fPieces; short * fColors; bool fOmitFrom; short fTargetUsed[64]; short fTargetAmbiguous[64]; }; void CLMoveGenerator::Generate(int color, short pieces[], short colors[]) { fBuilder->StartMoveList(); fColor = color; fPieces = pieces; fColors = colors; memset(fTargetUsed, 0, 64*sizeof(short)); memset(fTargetAmbiguous, 0, 64*sizeof(short)); TryMoves(false); TryMoves(true); TryCastle(); fBuilder->EndMoveList(); } void CLMoveGenerator::TryMoves(bool omitFrom) { fOmitFrom = omitFrom; for (int i = 0; i<64; ++i) if (fColors[i] == fColor) TryMoves(fPieces[i], CLCoord(i)); } void CLMoveGenerator::TryMoves(int piece, const CLCoord & from) { switch (piece) { case PAWN: { int dir = fColor == WHITE ? 1 : -1; int orig= fColor == WHITE ? 1 : 6; if (TryMove(piece, from, 0, dir) // Single step always permitted && from.fRow == orig // How about a double step? ) TryMove(piece, from, 0, 2*dir);// Double step TryMove(piece, from, -1, dir); // Capture left TryMove(piece, from, 1, dir); // Capture right break; } case ROOK: TryMoves(piece, from, 1, 0); TryMoves(piece, from, -1, 0); TryMoves(piece, from, 0, 1); TryMoves(piece, from, 0, -1); break; case KNIGHT: TryMove(piece, from, 1, 2); TryMove(piece, from, 2, 1); TryMove(piece, from, 2, -1); TryMove(piece, from, 1, -2); TryMove(piece, from, -1, -2); TryMove(piece, from, -2, -1); TryMove(piece, from, -2, 1); TryMove(piece, from, -1, 2); break; case BISHOP: TryMoves(piece, from, 1, 1); TryMoves(piece, from, 1, -1); TryMoves(piece, from, -1, -1); TryMoves(piece, from, -1, 1); break; case QUEEN: TryMoves(piece, from, 1, 0); TryMoves(piece, from, -1, 0); TryMoves(piece, from, 0, 1); TryMoves(piece, from, 0, -1); TryMoves(piece, from, 1, 1); TryMoves(piece, from, 1, -1); TryMoves(piece, from, -1, -1); TryMoves(piece, from, -1, 1); break; case KING: TryMove(piece, from, 1, 0); TryMove(piece, from, -1, 0); TryMove(piece, from, 0, 1); TryMove(piece, from, 0, -1); TryMove(piece, from, 1, 1); TryMove(piece, from, 1, -1); TryMove(piece, from, -1, -1); TryMove(piece, from, -1, 1); break; } } void CLMoveGenerator::TryMoves(int piece, const CLCoord & from, int dCol, int dRow) { CLCoord to(from); do { to = CLCoord(to.fCol+dCol, to.fRow+dRow); } while (TryMove(piece, from, to)); } bool CLMoveGenerator::TryMove(int piece, const CLCoord & from, const CLCoord & to) { int coord = to.fCoord; if (coord < 0) return false; // Field does not exist int color = fColors[coord]; if (color == fColor) return false; // Field is blocked by own piece bool take = (color == !fColor); // Field occupied by opponent's piece if (piece == PAWN) // Pawns move straight, capture diagonally if (from.fCol != to.fCol) { // Attempted capture if (!take) { // Field is empty, try en passant if (from.fRow != (fColor == WHITE ? 4 : 3)) // Must be double step away from opponent's origin return false; CLCoord epField(to.fCol, from.fRow); int epCoord = epField.fCoord; if (fColors[epCoord] != !fColor || fPieces[epCoord] != PAWN) // Must be opponent's pawn return false; take = true; // En passant } } else if (take) // Straight move is blocked return false; int pieceMask = 1 << piece; if (fOmitFrom) { // // Simplify language model // if (fTargetAmbiguous[coord] & pieceMask) // Amiguous move, don't do it ; else fBuilder->Move(piece, from, to, take, fOmitFrom); } else { fTargetAmbiguous[coord] |= fTargetUsed[coord] & pieceMask; fTargetUsed[coord] |= pieceMask; fBuilder->Move(piece, from, to, take, fOmitFrom); } return !take; // Don't move further after capture } void CLMoveGenerator::TryCastle() { int kingCoord; int kingRookCoord; int queenRookCoord; if (fColor == WHITE) { kingCoord = 4; kingRookCoord = 7; queenRookCoord = 0; } else { kingCoord = 60; kingRookCoord = 63; queenRookCoord = 56; } if (fColors[kingCoord] != fColor) // King not in original position return; bool kingSide = false; bool queenSide= false; if (fColors[kingRookCoord] == fColor && fPieces[kingRookCoord] == ROOK) { // Rook in position kingSide = true; for (int i = kingCoord+1; iMove(KING, CLCoord(kingCoord), CLCoord(kingCoord+2), false, false); fBuilder->Move(KING, CLCoord(kingCoord), CLCoord(kingCoord-2), false, false); } else { fBuilder->Move(KING, CLCoord(kingCoord), CLCoord(kingCoord+2), false, false); fBuilder->Move(KING, CLCoord(kingCoord), CLCoord(kingCoord+2), false, true); } } else if (queenSide) { fBuilder->Move(KING, CLCoord(kingCoord), CLCoord(kingCoord-2), false, false); fBuilder->Move(KING, CLCoord(kingCoord), CLCoord(kingCoord-2), false, true); } } #ifndef GNUSTEP static void ProcessResult (OSErr origStatus, SRRecognitionResult recResult) { OSErr status = origStatus; Size len; SRLanguageModel resultLM, subLM; char refCon[5]; if (!status && recResult) { len = sizeof(resultLM); status = SRGetProperty (recResult, kSRLanguageModelFormat, &resultLM, &len); if (!status) { status = SRGetIndexedItem (resultLM, &subLM, 0); if (!status) { len = 4; status = SRGetProperty (subLM, kSRRefCon, &refCon, &len); if (!status) { refCon[4] = 0; CL_MakeMove(refCon); } // release subelement when done with it SRReleaseObject (subLM); } // release resultLM fetched above when done with it SRReleaseObject (resultLM); } } if (!origStatus) SRReleaseObject (recResult); } pascal OSErr HandleSpeechDoneAppleEvent (const AppleEvent *theAEevt, AppleEvent* reply, long refcon) { long actualSize; DescType actualType; OSErr status = 0; OSErr recStatus = 0; SRRecognitionResult recResult = 0; /* Get status */ status = AEGetParamPtr(theAEevt,keySRSpeechStatus,typeShortInteger, &actualType, (Ptr)&recStatus, sizeof(status), &actualSize); /* Get result */ if (!status && !recStatus) status = AEGetParamPtr(theAEevt,keySRSpeechResult,typeSRSpeechResult, &actualType, (Ptr)&recResult, sizeof(SRRecognitionResult), &actualSize); /* Process result */ if (!status) status = recStatus; ProcessResult (status, recResult); return status; } #endif static CLSRMoveBuilder * gBuilder; static CLMoveGenerator * gGenerator; static bool gIsListening; static bool gIsInited = false; static bool gIsIniting = false; static short gLastColor; static short * gLastPieces; static short * gLastColors; void CL_Init() { gBuilder = new CLSRMoveBuilder; #ifdef CHESS_DEBUG if (getenv("CHESS_DEBUG")) gGenerator = new CLMoveGenerator(new CLDebugMoveBuilder(gBuilder)); else #endif gGenerator = new CLMoveGenerator(gBuilder); #ifndef GNUSTEP if (gBuilder->OK()) { AEInstallEventHandler(kAESpeechSuite, kAESpeechDone, NewAEEventHandlerUPP(HandleSpeechDoneAppleEvent), 0, false); short myModes = kSRHasFeedbackHasListenModes; SRSetProperty (gBuilder->Recognizer(), kSRFeedbackAndListeningModes, &myModes, sizeof (myModes)); } #endif } void CL_FinishInit() { if (gIsListening) gGenerator->Generate(gLastColor, gLastPieces, gLastColors); gIsInited = true; gIsIniting = false; } void CL_Listen(short color, short pieces[], short colors[]) { gIsListening = true; if (!gBuilder && !gIsIniting) { gIsIniting = true; CL_ScheduleInit(); } if (gIsInited) { gGenerator->Generate(color, pieces, colors); } else { // Store for CL_FinishInit gLastColor = color; gLastPieces = pieces; gLastColors = colors; } } void CL_DontListen() { gIsListening = false; if (gIsInited) gBuilder->StopListening(); } void CL_ShutDown() { if (gIsIniting) /* Shut down later */ return; delete gBuilder; gBuilder = 0; delete gGenerator; gGenerator = 0; gIsListening = gIsInited = false;} chess.app-33/ApplicationNameImage.tiff0000644000000000000000000001364013034414342016546 0ustar rootrootII* P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhQTE6OTjU:VWVkRZL cR酿goO 0:w^oWFx1 / Q@bP8AE@TKrn!GO [ Zr``wnw[}.pL #?D⁙ \"4H\٭4TH5ՠcrA_6uǑ} 0K!|#u%٪(lHHK6(lh&YF_ d? bbjD@ z?1<6DrDN\8ghAQcPyBV1 p tW"hC?a&$ x-L3Ả8 ?kD$ ׀J@< y d h1ʈw +J$L̶+ *ȁ "׈S sYYc0&(b^ |@Sc(lU|p.Y9P C, b-+~9 2LS6bH9h@_W44@n ?E_ lj7eM8goHa$qI 0/'ވ/우MN!c R)N@I}` ZCҡd=Ԃ  Jf)RNIB}*[E[q$ HDq ;En"D)q;H aхE>)ҵa 6>#}&v&y@sW NpcU K}Ck=`ط KX-B &%2R?k.P t`]@_[Ff9»@$ 5.) xA` VRTC I{p ag@kfvSh`i$@-ϐ$d@'ဠX= vD!iJo F$}!HiI!h4'53)~K|C|p)6A&hi1B0 ad,u?ȆhǺ+jVD5"TT!!!tbCq ĀMEBTXEL`RDi!) hջr+̵-˒/ J⸃vG;ԾI:S Nh)1OIg7ItdDi܄i4ȒKV!U7bOX-aȠ4d/bV\.ע``cvPfp3Lwmwyޗ+DB {:HLHL脻(J7;˿]u22 HuVi dLMLT! L(h!*(>bAh֤z#<憂PXz^kZ=jVkU{@y~ɏ(!.:S='1/hXha:enD94M\'TX!bY!#shhvhh†ܪ"!rp=rj§Cx Ů!WyYzBq=5&fBA:Q}yǺHH!`ܜ2 V0&z&DCD !솂 H+z%nCay ( dӛ%B ]%dCB;bE뉸caQ2FXH^<5h!D7AGaA52"  298갂LH6q P%jBH $ 1r)HKY5($LB4ě@lHeT[YipAln0HLH!/hGٛSnnMԪ(CA9, d45k+]7>z =Ì]$&yE {prr`akE${Zj%^!}I)!4~J@G )ee\B].!LHm4!$TzsN}=?T a]SzUڽWܚ8PQ24  E$!y[nBwUA(0(hkptB35d QުY8!5P״xWQ^ DOS svhH6d| JB-öfBd\[u],SAWړ7v g3'ry\g7tz]>Wv{]~_#(-^a<``P~T7 `؁hA1I%Eb(c*a)d(́5·qؑBt2:H!/0 4cʍx)&- Pw g? d15)ʩz!HK1"3 SBB* oQmG%IҔ-K˜ * b Q-7Tm5i4qKYlx${Fhd؆K^?e1R b `mooBUvIBO @ ^} ( L:l747anx -SށC\@ 1 =UJ$d YZ`B`֥ꚮε @"+퇠巜vn(s d D":xSHq& `Nh FH ^hF _j/p;۞xݞ$|p~ 6x%(⁐@ԁ(ۃZW݋]~^Jj4 bJf#s 9iH b1H Bq<@d 10v@ ԁ@Ě o$>j @IP$ 9@T. @! k܁B8)j0@ [ B`H cBLE e܁:0BhFpȁG@YPg%ęRnNI &vd D A ^M AhF uB!CM0b"* P@4U@gL@ ~ə0$mj'EGT\TRZMIAk҅EG0=R$9JR" &@8A )F/Xr8@@Pl} 8Vn@qOu@D @^n |@T6~D UjՈ+$+B焊@l.b)VZ[MikγO@) `ٴc_@!tz@ Q]N66 c' `+Ҁ7IkP\^t Vv9Z.,ުVC r7_{u}͵V`9myN[^oPn_M k.R U-'(q%ŕc\SQ-z,QwDXP5lc̙Kj/ "쩔 XKU9NũWY6fiq[[zPQɧ'R_}7 8ujиRܵ9=)˝nK$DiL-mNeߩFZLMaD]gX}[bl]F[/flݝ[Ojm][onmݽ[rn]͹F[vnݻ[zo]  1x(R ' 'chess.app-33/English.lproj/0000755000000000000000000000000013034414342014377 5ustar rootrootchess.app-33/English.lproj/3d_black_sample.tiff0000644000000000000000000000342013034414342020253 0ustar rootrootMM*J P8$ BaPd6DbPPDDBDdHrLF;Ƅ1 G) |=XBʄCz!niԊ*K~*J:,k0DRW׎{0 ~&o#⤣$" ƨLx?*#qf/&Jp!6'ptK,m<:jvWm x3  88MdB͠@&MA^Ŵ*ƣ|e$.r b'|(^I+T. (/-kj2w^v5zK? #_C4V8rKF2RRpz&"ލjH@d 'ʴj4!(FaȪ&זS{Ȩ^JJ@Ȉ%A4 h(xR,hn\j\Ǝy^UJ04RRE[J?%8H dҭ7\ ;ѝ m ̉0L$7ߓjKz X"EFJƖVhkuD*-<¨tt|hJYS)Y²HP;H""D=/=1a0/␉\&6q}1ӁD.Ҽh/7Hyj@l^eaTN /̍[H18J`r0*53K"ORK՞8JCyYJ R}O[gD |sB@h ͉q*pˊˈ%C\K$@ro*d}[kXE)#y[$@&o6%BtLZwWM((.lpa?_ny?UK+@\Q^-f4@H) %a &t"|2ULH` "='8it *XD P7'J:HNxW0"d y1r]gW9f<wA5_z\\^̦qBn֨aAyv_7,ZQ}@xJ]@;N/[׃-PC RAIHE A?# IBClasses CLASS ResponseMeter LANGUAGE ObjC SUPERCLASS NSView CLASS Board3D LANGUAGE ObjC SUPERCLASS NSControl ACTIONS chooseSide id closeGame id forceMove id hint id info id levelSliding id listGame id myAction id newGame id openGame id print id renderColors id saveAsGame id saveGame id setBlackColor id setPreferences id setWhiteColor id showGnuDisclaimer id showPosition id startGame id undoMove id view2D id view3D id CLASS Chess LANGUAGE ObjC OUTLETS blackClock id blackClockText id blackColorWell id blackMeter id blackSample id blackSideName id board2D id board3D id boardWindow id clockPanel id colorSetButton id forceButton id gamePopup id infoPanel id infoScroll id levelSlider id levelText id menu2D id menu3D id prefPanel id prefSetButton id srCheckBox id startButton id whiteClock id whiteClockText id whiteColorWell id whiteMeter id whiteSample id whiteSideName id SUPERCLASS NSApplication CLASS FirstResponder LANGUAGE ObjC SUPERCLASS NSObject ACTIONS print id CLASS Board LANGUAGE ObjC SUPERCLASS NSControl IBVersion 1 chess.app-33/English.lproj/Chess.nib/info.nib0000644000000000000000000000066613034414342017650 0ustar rootroot IBFramework Version 629 IBOldestOS 4 IBOpenObjects IBSystem Version 9G55 targetFramework IBCocoaFramework chess.app-33/English.lproj/Chess.nib/keyedobjects.nib0000644000000000000000000007521013034414342021365 0ustar rootrootbplist00 X$versionT$topY$archiverX$objects]IB.objectdata_NSKeyedArchiverH 156<=BV5WXYchopqv}~-17DJKLRKS\]nowx{"&'(+4&89@ARSVWZ]^_`fglmpsv +/259;GKLMPV_L`iLjlpstyz~  !()2345:;@GHIJOVWXY^_dejkpqvw|  )*+3=AHOPXY`ajkrs{|}~ !"'7<BRVfgpx|~_|C  #$)*/67<CDEJOXYZbjk5rvw~ vw}v5    ! * + 3 < = > A B D  h i j k l m n o p q r s t u v w x y z { | } ~  p  o            ! " # $ % & ' ( ) * +T , - . / 0 1 2 3K 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Qv R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   Sb I U$null  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValuesGF?@D>Ex234[NSClassNameUChess789:X$classesZ$classname:;^NSCustomObjectXNSObject_IBCocoaFramework>?@ZNS.objectsACDEFGHIJKLMNOPQRSTU\NSWindowView\NSScreenRect]NSWindowTitleYNSWTFlags]NSWindowClass\NSWindowRect_NSWindowBacking_NSWindowStyleMask[NSViewClass  `x  _{{32, 521}, {700, 600}}XNSWindowTViewZ[\]+_`ab_NSNextResponderWNSFrameZNSSubviewsXNSvFlags >defgZ[]2iLklbmL[NSSuperview  _{{50, 0}, {600, 600}}UBoard78rsstu;\NSCustomViewVNSView[NSResponderZ]w2iLkbz{L[NSFrameSize  Z{700, 600}WBoard3D78;^NSMutableArrayWNSArray_{{1, 1}, {700, 600}}78ttu;_{{0, 0}, {1920, 1178}}78;_NSWindowTemplate78;\NSMutableSetUNSSet>dAрÀŀˀӀـހ    &*,.046;=?Avxz|}āƁȁʁ́ЁԁՁ  ]NSDestinationXNSSourceWNSLabel(WNSTitle_NSKeyEquivModMaskZNSKeyEquiv]NSMnemonicLocYNSOnImage\NSMixedImageVNSMenu' !%[NSMenuItemsontrols...P2^NSResourceName$"#WNSImage_NSMenuCheckmark78;_NSCustomResource2$"&_NSMenuMixedState78;ZNSMenuItemCDEFGHIJKMP  S  UYNSMinSize,*+) _{{718, 273}, {332, 454}}XControlsWNSPanelZ[\]+_b->d.Z[\] !i"$%&'()b *S,YNSBoxType[NSTitleCell]NSTransparent\NSBorderTypeYNSOffsets_NSTitlePosition]NSContentView,{y/z,0>d/,0Z[\]i_45b.x1.>d9:;<=>?@ABC258GNSaglpZ[]2i,kGbH,0340_{{14, 99}, {252, 21}}]ResponseMeterZ[]2i,kObP,0670_{{14, 208}, {252, 21}}Z[T]Ui,WXYbZ,VNSCellYNSEnabled0F9: 0_{{55, 148}, {93, 22}}^_`abcdefghij<$Zm[NSCellFlags_NSBackgroundColorZNSContentsYNSSupport]NSControlView\NSCellFlags2_NSDrawsBackground[NSTextColorE?;<8 DUHumanpqrstuvVNSSizeVNSNameXNSfFlags>#@2=\LucidaGrande78yzz;VNSFont|}~WNSColor\NSColorSpace[NSColorName]NSCatalogNameCBA@VSystem\controlColor} WNSWhiteCK0.6666666978||;}UNSRGBCF0 0 078T;_NSTextFieldCell\NSActionCell78tu;[NSTextFieldYNSControlZ[T]Ui,WbZ,0FHI 0_{{55, 249}, {105, 22}}^_`abcdefghj=$ZE?JZE?QRN K_SWhen the white bar reaches the end of the black box, the computer is ready to move.pqrsuˀ>#@*=Z[T]Ui,(bZ,ZNSEditable[NSDragTypes0`[\T 0>?ـ߀UVWXYZ_NeXT TIFF v4.0 pasteboard type_Apple PICT pasteboard type_Apple PDF pasteboard type_Apple PNG pasteboard type_NSFilenamesPboardType_1NeXT Encapsulated PostScript v1.2 pasteboard type_{{12, 235}, {37, 50}}^`c$$S(WNSStyleWNSAlignWNSScaleZNSAnimates_]2$"^_3d_black_sample78T;[NSImageCell78tu;[NSImageViewZ[T]Ui,(bZ,0`cdb 0>?߀UVWXYZ_{{12, 134}, {37, 50}}^`c$$S(_e2$"f_3d_white_sampleZ[|]Ui,mbZZ,\NSIsBordered0kjDh 0>?$%i_NSColor pasteboard type_{{196, 240}, {55, 40}}78)**tu;[NSColorWellZ[|]Ui,.m0bZZ,0koDm 0>?67n_{{196, 139}, {55, 40}}Z[T]Ui,;<=bZ,0wqr 0_{{61, 4}, {140, 36}}^BCDE`abFcGfHIJLCOPQ_NSPeriodicInterval^NSButtonFlags2_NSAlternateImage_NSKeyEquivalent_NSPeriodicDelay]NSButtonFlagsvt sRp8@_Set Piece ColorspqrsUv>uYHelvetica78XYYT;\NSButtonCell78[\\tu;XNSButton_{{2, 2}, {280, 293}}_{{24, 134}, {284, 313}}V{0, 0}^_`acefgbc$eE}|R_Response Meters|}~ijC~@_textBackgroundColor} oCB1} rCM0 0.8000000178tuutu;UNSBoxZ[\] !i"$%yz(|b *S,z,>dZ[\]i_b>dZ[T]Ui;bZw _{{8, 29}, {264, 70}}^BCDE`abFcGHIJOPQ$vt R_Force Computer To MoveZ[T]Ui;bZw _{{7, -13}, {265, 70}}^BCDE`abFcGHIJOP_NSAlternateContentsvt RȂ@_ Start Computer vs. Computer GameTStop_{{2, 2}, {280, 87}}_{{24, 20}, {284, 107}}^_`acefgb$E}R]Game Controls} rC_{{1, 1}, {332, 454}}X{94, 28}_makeKeyAndOrderFront:78ģ;_NSNibControlConnector^NSNibConnectorʀZ[T]UiWbZ̀F Z[\]i_bӁZe\Z_{{75, 42}, {256, 22}}^_`abcdegb$ZaE}R K]blackSideName78;_NSNibOutletConnectorꀠZ[T]UiWbZ̀F _{{75, 12}, {256, 22}}^_`abcdegb$ZE} R KXdelegate?S[blackSample[nextKeyView  Z[T]UibZ̀ _{{9, 77}, {195, 26}}^BCDEabFcGZ !"#  ZZ'()*_NSMenuItemRespectAlignment_NSArrowPosition_NSPreferredEdge_NSUsesItemFromMenu]NSAltersStateA@ K @pqrsu.>=pqrsuv>=34YNS.string786778;_NSMutableStringXNSString34<=>A)FXNSTargetXNSActionWNSState' !%IJ_Human vs. Computer__popUpItemAction:34OZOtherViews>dR#TU<=Y)^' !%_Computer vs. Human<=c)h' !%_Computer vs. Computer78k;78mnnoYT;_NSPopUpButtonCell^NSMenuItemCell78qrr\tu;]NSPopUpButtonYgamePopupCxp^colorSetButton|}ƀ'Ȁɀ!%q597\Close WindowQw]performClose:̀Z[T]UibZ̀р΀ Z[\]i_bFUHF_{{12, 4}, {93, 21}}^`abc$$$((WNSValue_NSNumberOfTickMarks_NSTickMarkPositionZNSMaxValueZNSMinValueZNSVertical]NSAltIncValue_NSAllowsTickMarkValuesOnly#?Ѐ R#@$#78T;\NSSliderCell78tu;XNSSlider]levelSliding:Ԁŀ'ր׀!%ɀTHintQHUhint:рڀ'ۀ܀!%XPrint...QpVprint:߀' !%q쀿$0%[Hide Others_hideOtherApplications:󀘀Z[T]Ui;bZw Z[\]+_brE_{{37, 73}, {321, 18}}^BCDE`abFcGHIS"O$ ]NSNormalImagev 耮H?BC'!%SNewQnXnewGame:MNQR'!%WOpen...QoYopenGame:](ZclockPanelBcl^setWhiteColor:Aig^setBlackColor:Bol ^whiteColorWellfu Wboard2Dz{~'!%ZSave As...QS[saveAsGame:'!%_Minimize WindowQm_performMiniaturize:' !%XShow All_unhideAllApplications:'!%TSaveQsYsaveGame:!%UNSTag'#$!%"ZU€ 3]2 DimensionalQAWview2D:ɀ')'( !%_Arrange in Front_arrangeInFront:;׀5+ZblackMeter݀!-Vmenu2D:〠2/ZwhiteMeter逘13'2 !%_Gnu Chess License_showGnuDisclaimer:̀5[levelSlider7:>'89!%"[]3 DimensionalQBWview3D: <]prefSetButton>_setPreferences:7@Vmenu3DBuCDEFGHIJKM#$P &S 'UsD+Ct _{{691, 464}, {387, 340}}[Preferences>d-1FZjZ[\] !i"$%67(9b *S倁WVGz>d?>dCEFǴIMQZ[T]UiWKLbZ̀FJK _{{12, 28}, {34, 17}}^_`abcdefghSE$ZE?LRI KTEasyZ[T]UiW\]bZ̀FNO _{{72, 28}, {35, 17}}^_`abcdefghdFgZE?PRM KTHardZ[T]UiWnobZ̀FRS _{{115, 8}, {209, 17}}^_`abcdefghvG$ZE?TRQ K_60 moves in 5 minutes_{{2, 2}, {345, 50}}_{{24, 263}, {349, 70}}^_`acefgb$E}XRYULevel} rCZ[\] !i"$%(b *S̀倁gf[z倛>d̀>d ]aZ[T]UiWbZ̀F^_ _{{12, 28}, {46, 33}}^_`abcdefgh$ZE?`R] KVBlack Z[T]UiWbZ̀Fbc _{{12, 14}, {41, 17}}^_`abcdefgh$ZE?dRa KUWhite_{{2, 2}, {345, 112}}_{{24, 124}, {349, 132}}^_`acefgb$ƀE}hRiTGame} rCZ[\] !i"$%(b *SӀ倁onkzl>dրӁlZ[]i1_b1jmj_{{2, 2}, {345, 37}}_{{24, 60}, {349, 57}}^_`acefgb"$E}pqVSpeech} rC_{{1, 1}, {387, 340}}YprefPanel=Gw^blackClockText@􀠀ay[whiteSampleg{Wboard3DAg~^blackColorWell  '!%ZQuit ChessQqZterminate:[forceButton ZstartGame:$&Z([)\]i*+",-./012,455[NSHScrollerXNSsFlags[NSVScroller]NSNextKeyViewZ[\]+_:;b>d>54-Z[CD\]EFi+$HIJKLMNO$NXNSCursorYNScvFlagsYNSDocViewYNSBGColor >dTNZWXY]wZ[i\5^_`2abc5+_NSTextContainerYNSTVFlags\NSSharedDataYNSMaxSizeXNSMinizeZNSDelegateZ{480, 173}hijklNnoYNSTCFlagsZNSTextViewWNSWidth_NSLayoutManager#@~qrs\tuv+_NSTextContainers]NSTextStorageYNSLMFlags8\yz+3478rr;_NSMutableAttributedString_NSAttributedString>d_78kk;78WW;_i+WNSFlags_NSDefaultParagraphStyle_NSInsertionColor_NSSelectedAttributes_NSMarkedAttributes_NSLinkAttributes cM>WNS.keys|}~CB@_selectedTextBackgroundColor|}~CM@_selectedTextColor78;\NSDictionary>[NSUnderlineYNSHotSpot\NSCursorType W{8, -8}78CC;}ǀCF0 0 1+ZNSTabStops78΢;_NSParagraphStyle78Ѣ;_NSTextViewSharedData\{481, 1e+07}Z{481, 173}78iitu;VNSText_{{1, 1}, {481, 173}}|}~CB@_controlBackgroundColor$W{1, -1}78tu;ZNSClipViewZ<[]=i$$b$ZNSCurValue_{{482, 1}, {15, 173}}\_doScroller:78tu;ZNSScrollerZ<[)]=i$$b$YNSPercent#?B`_{{-100, -100}, {87, 18}}_{{12, 12}, {498, 175}}78tu;\NSScrollViewZinfoScroll C p]renderColors:GQYlevelText<8^whiteClockText]whiteSideName"ZforceMove:([startButton-.B́1'΀ !%^Preferences...:;с>'Ҁ !%[About ChessUinfo: 񀚀LNրCDEFGHIJK,MRSP US VU؀+ׁ _{{561, 594}, {522, 307}}TInfo>d\]^_`$ځZ[T]Ui,WefgZ,Fہ _{{214, 239}, {94, 42}}^_`abcefgbno]$E}݁ށڀKpqrstuv>#@B_Times-BoldItalicZ[T]Ui,Wz{gZ,F _{{166, 214}, {190, 24}}^_`abcefgb^$E}K_An Apple front end for gnuchesspqrsv>#@,\Times-ItalicZ[T]Ui,;bZ,w _{{433, 192}, {77, 104}}^BCE`abFcGfHI_Ov  D@VButtonpqrsuv>#@(=2$"UwhiteZ[T]Ui,;bZ,w _{{12, 192}, {77, 104}}^BCE`abFcGfHI`Ov  2$"Ublack_{{1, 1}, {522, 307}}X{88, 29}YinfoPanelÀŀ'!%^Take Back MoveQzYundoMove:Ҁ'!%ZHide ChessQhUhide:' !%[Zoom Window\performZoom:ZsrCheckBox􀘀 ŀ'  !%^Show Last MoveQM]showPosition:ꀠ ' !%WList...YlistGame:>=aUzA1_G^ =|'B,E.,2@56)9::;>$:#L-]`gOPQfN Y_A?M<ghFTLm,C>ȀZBj(.QՁ,GƁFlIځ4a.ǀ1/2"5р񀳁7 ́ځl!*;́]!'1ԀgaS88Mց&߀0̀pN'TMove>dy€ԁ~=.YNSSubmenu'Ձ !%q: ^submenuAction:~=.' !%>d>M6zYgЀZZ]NSIsSeparator\NSIsDisabled' !%ZZ' !%ZZ' !%>d€O,'92!14~=.Ѐ'" !%#[Application34р>dր:-m_5: с1́&'.߁/ZZ' !%~=P'*( !%)XServicesq+-,34>d__NSServicesMenuZZ' !%ZZ' !%\_NSAppleMenu~=U. '" !%2>d !7~=. )'ǁ5 !%6VWindow>d -|hȀƁ8'ZZ' !%^_NSWindowsMenu[_NSMainMenu23 @<]NSApplication78 C;> F=a),',,.,.L.,2 .,9,,O)A,,L1._L$,,,,),,,́ǀ(0ǀ0ǀB̀Ձր04010!倴"Z j' FՀ,"Հ000ǀ̀.̀00> =]UzA1_G^ =|'B,E.,2@569::);>$:#gL-f]`OQPN Y_A?M<ghFTLmC>ȀBZj(.QՀ,GƁFlIځ4a.ǁ12/"5р7 ̀ځ퀢!;*]!'1ԀgaS88Mց&߀̀pN'> =]                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f gABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~_!Menu Item (Computer vs. Computer)_Menu Item (Save As...)[BoardWindowYPrefPanelZBox (Game)\Box (Speech)\File's OwnerZClockPanel_Box (Response Meters)_Bevel Button (Button)_#Static Text (60 moves in 5 minutes)[Menu (Move)^Content View-2_-Static Text (An Apple front end for gnuchess)_Menu Item (Zoom Window)_Menu Item (Quit Chess)_Static Text (Computer)_Menu Item (Close Window)_Menu Item (Move)[Box (Level)ZColor Well_Menu Item (Minimize Window)_Menu Item (Game)\Content View_Static Text (Easy)XMainMenu_Menu Item (Take Back Move)^Content View-1_Menu Item (Print...)_Menu Item (Window)_Image View (3d_white_sample)_"Check Box (Use Speech Recognition)[Separator-4YSeparator]Menu (Window)_Menu Item (View)^Response Meter[Separator-5_Menu (OtherViews)[Menu (View)_Response Meter-1_Menu Item (List...)_Menu Item (New)[Scroll View_Menu (Application)_Menu Item (About Chess)_Push Button (Set)_Menu Item (3 Dimensional)_Menu Item (Human vs. Computer)_Menu Item (Show All)XBoard3 D^Content View-3_Menu Item (Preferences...)_Static Text (Chess)_Bevel Button (Button)-1ZText Field_Menu Item (Application)_Menu (Services)YText View_!Popup Button (Human vs. Computer)_Menu Item (Show Last Move)_Static Text (Black )_$Push Button (Force Computer To Move)[Separator-1[Menu (Game)_Box (Game Controls)_Text Field (Computer)_Menu Item (2 Dimensional)_Menu Item (Hide Chess)_Menu Item (Services)_Menu Item (Gnu Chess License)_Menu Item (Hint)\Color Well-1_Static Text (White)_Image View (3d_black_sample)_Menu Item (Open...)_Static Text (Human)[Separator-2[Separator-3_Static Text (Hard)_Menu Item (Save)_Menu Item (Computer vs. Human)YInfoPanel[Separator-6_Menu Item (Hide Others)_.Push Button (Start Computer vs. Computer Game)_Horizontal Slider_Push Button (Set Piece Colors)_Menu Item (Controls...)_aStatic Text (When the white bar reaches the end of the black box, the computer is ready to move.)_Menu Item (Arrange in Front)> Ł=> ȁ=> ˁ=UzA1_G^ =|'B,E.,2@56)9::;>$:#L-]`gOPQfN Y_A?M<ghFTLm,C>Ё.فxZBj(.€ށՁ4QՁ,G,ƁFlƁ Izځ4̀a.ǀ1/2"5ˁӀ}ԁ;с6񀳁7?ȁ ́ځl!*;0 ́] v !'|1&ŁԀgaS8 ʁ=8MÁց&߀0́ Ap*N'Ā> q= r s t u v w x y z { | ~                ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁      !"#$%&'()*+,-./0123456789:;<=>?@ABCg` j ;n:Pf\ue#=Q$w.Lhrm6}D4a[a^pMb1NRg(hIIxU|dvO!VTEoLPXj_s_b%cZ5]o0mKRiZ&BFqn{t`M/fJS,W~k"pl>d > => =78 ;^NSIBObjectData"'1:?DRTfKRYgy 1KUbdgjmpruwz}      C P ] k u   ( 0 ; D F H J L O X Z _ a c |     $ - 4 C K b k r _ a c e g i k m o q s u w y { }       " 0 9 A C E G I j r !#+=FK^kmoq ')+-/8:?ACx"$9;=?ACEGIKMfhjlnp  #HThs}")>FS_moqsuw~ +5RTVXZ[]v3Xacegikpqs&(*,-/124=?LNPRTVXy2S[ckv{}  "$13579;=Uvxz{ #,7Chjlnprstv$3FXjxz|~5<Y[]_acu$&(*,-/135>@CE^`bdfhqsxz|3579;<>V,.0246DQSjs!$'*Bgprtvxz{} 02468:;=FWY[]_k|~ 7 T f x !!!!!(!1!:!7A7C7F7I7L7O7R7U7^7`7c7f77777777777777777888)818C8F8I8R8U8j8}88888888888888899 99999"9+909Q9Y9s999999999999999999::::::!:$:&:D:Y:[:]:`:b:v::::::::::::::::::::;; ;;;;%;.;9;;;>;G;L;_;h;m;;;;;;;;;;;;<<<<< <)<2<=<^ >>>>>#>4>6>8>:>=>H>Y>[>]>_>b>n>>>>>>>>>>>>>>>>>>???? ? ????"?3?5?7?9?;?L?N?Q?S?V??????????????????????@@@@ @ @%@F@H@J@M@P@S@U@f@h@q@t@@@@@@@@@@@@@@@@AA0A2A;A>AKAhAkAmApAsAtAwAAAAAAAAAAAAABBBBBBB B=B@BBBEBHBIBLBeBBBBBBBBBBBBBBBBCCCCC C,C.C1C4C6C8C:CICKCUCfChCjCmCpCCCCCCCCCCCCCCCCCCCCCDDDD!D#D%D(D3DDDFDHDKDNDoDqDtDwDyD{D}DDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEFFFFF F FFFFFFFF!F$F'F*F,F/F1F3F6F9F;F=F@FCFEFHFJFMFOFRFTFWFYF[F^FaFcFeFgFjFmFpFrFuFxF{F~FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGG(G*G,G/G1G3G5G8G;GLGNGQGTGWGfGGGGGGGGGGGGGGGGGGGGGGHHH H"H$H%H'H(H*H,H.HWHYH[H\H^H_HaHcHeHHHHHHHHHHHHHHHHHHHHHHHHHHI IIIII6I9IPAPDPGPJPMPPPSPVPYP\P_PbPePhPkPnPqPtPwPzP}PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQ+QDQPQZQeQrQQQQQQQR+RER^RwRRRRRRRSSS5SDS[SpSSSSSSSTTT&T9TOTaTmTTTTTUU UU9UOUiUtUUUUUVV)V5VAVWVoVVVVVVWW0WFW\WhWtWWWWWWXX2XSXmXXXXXYY Y YYZ_ZaZdZgZjZlZoZqZtZwZyZ|Z~ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[ [ [[[[[[[["[%[([*[,[/[2[5[8[:[<[>[@[C[F[I[K[N[Q[T[W[Y[[[][_[b[e[h[j[m[o[r[u[w[z[}[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\]]]`]c]f]i]l]o]r]u]x]{]~]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^ ^^^^^^^ ^#^&^)^,^/^2^5^8^;^>^A^D^G^J^M^P^S^V^Y^\^_^b^e^h^k^n^q^t^w^z^}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^____ _ _______"_%_(_+_._1_4_7_:_=_@_C_F_I_L_N_P_R_T_V_X_Z_\___a_c_e_h_j_l_n_p_r_t_v_y_{_~_________________________________________________________````` ` ````` `"`%`(`*`-`/`2`5`7`9`;`>`@`B`D`F`H`J`M`P`S`U`W`Z`]```b`d`f`h`j`l`n`p`r`t`v`x`z`|````````````````````````````````` `chess.app-33/English.lproj/white_rook.tiff0000644000000000000000000000111413034414342017420 0ustar rootrootMM*~ P8$ BaPd6DbQ8T`B#QE (K$R5`&;5O1H>7iT8>seP M*Pjuj]dSf宿n!+-q AlN0;%<0PdrP P8$ BaPd6 Vfqȓ Y4Q?I|e'L&p9wΧEQ T/ͩJƧ!xDJmit "cY볛1m ]~p03 1֠]c;-ʏy |9g)Ei:>[U=.@@,4<D(R ' 'chess.app-33/English.lproj/black_pawn.tiff0000644000000000000000000000103013034414342017344 0ustar rootrootMM*J P8$ BaPd6DbQ8V-JRU*09aYDb] C1lW-dpM!T )ZU&KB*Ҭ:$ERa5*=ʳ5zQ7 }w^`p P8$ BaPd6DbQ8~0xC.7IԞ; r5i<{ (HehU"K )4Sk0D'봚2*4(DgX`5l9sˠ: `ެlUt O?Q\w=@@(R ' 'chess.app-33/English.lproj/white_king.tiff0000644000000000000000000000120413034414342017376 0ustar rootrootMM* P8$ BaPd6`CoRDaѨlrHdR9$@{VaQˠ)y/O#S:O&*<[2j)wF ҩ~eHeHK:q\55QZ1(b;&%Un5U#V='jc4L97<7>w`91L'Ve9f^9Y/3SR uGx|^0@@(R ' 'chess.app-33/English.lproj/Credits.rtf0000644000000000000000000000011213034414342016503 0ustar rootroot{\rtf1\mac\ansicpg10000{\fonttbl} {\colortbl;\red255\green255\blue255;} } chess.app-33/English.lproj/black.tiff0000644000000000000000000001164213034414342016331 0ustar rootrootMM*܀ P8$ A08\.Cb ġ1v=H`(\\, E`UI h? !Dz$b!"RiT  }NRU5Y~_BCl-ive' ժuv:Oޅ"hGbqPxp@ c+Z^+a; "' \8h38#Fy_,v- |FOc?ƻzl:R(X'iԶ  B!^V?g)Z@ +ja@cj;L7A{zUi++cAr?O*2M 0^3`~3A3Q~L(^h"! ;<Bj*, <-I_DٞEyw`OFx##%SȲjʁA|xDa-L0iHkB<7%O ZonF'n@|Dy^fZc?378B(%RT 3mO >"$ξ"Z_ĴL3L;L7Mq6q!`R۫T"_oEs@U%GGb JN .5jRMOO17vww1sԕdoO4 $6yʬPX2g/Gw\tQ3 +zvNՁdDjy2`5%U 3('Xi7 B6$0f>l*%JE'aKK7n^?` hV ['&0X7)MfE~Z +:8-ujȯRIy%Y % fh|3k87/h\}+sΡ8;wMâP4RHւ7Яʀ'G?P@(1a}7,`C8@9\qi (VD!w#ТgV91f>'-B Bs*%2 _o=9i>O$Y}GC4fQyu0;RBɛb17f!@)WvRUtF%h?h_JߣwA#ĕ&hQ/_^cYEc磻4.e(,/Fv Tk87,c h.;![~hKҌDz<'rEm*fee8TTqՊ~uWg\5dp")|ѥB>]*Jq"6ÒT.m(h 0rXH!)I~n8_S/kq}S)XTy!Uq86ARsO/3 h/-_xɜ2p/+ e'vʎ ZoĎPZC;Li<['2B3O 8Lqu84lI_ѣ:Uro:xK|hYU9(Zj(~&FK,dAE>$`*mgqJ cbUm][K:@Ne T#,Skli/1rljdHmrA0AA{iEGPo3DvV.zyHavͩ>(CԾ`CE:\D!`:5g,3k4%YMΎb҅< 23A*vԭp pa^~NTr\卵˶Ӯ*4FE2ό>q4vHGx=hF ,fv-.fF7 B.q~pxƏ0:Bװ:L3X>F$HxŊ H *`+oi wX 5`.&7&0ApH@~ \8*b0Lc b#voT`q dcHO"q pظ򐥱B$c)0^e,| dAМOPI(ygv..&bT|X9 B!hj:>hpjoH$ Uͪmr*r )1!m%>g4'0d֜ȆL j8dbBPv2oO.qBKXS8"zCL9llAͣ2ziI;RRM<,ASH %J6M.ў7ڲf˒>fԿof΋c| %2 +O`1s8BNIsKERdFI#D5;n@4*m%ɐj-Lp)}gIZVk8H/t]H8T HCz&6R@vHʈO =ERBds"7 )WfN䠾5PjD92IMQ JK`ajJ $16J1\4(>'-ggC@HeU cdr=Dog }lM^qG a;VD *?75OJi֜kl e*XƊhd4 w`[ IW{gX8U$B 9$ΊV<ׄL36Jۤu m09w#FdHHJV>3H|:qSl6'ςh[1k0EV<*Zb5S/iFhp,<L#wFҰKF2fB`mk аmtHƽ\S2^aԛ)y$ispsBCJw C)7@|+Mi:mܔgs\V闌0Ӷ/8Bo)7Qjd(r-s/}.U~^},dRQbDayӍFDSEXglX~8nHhbb1 B05ryd 0WWuOd9e]^%)%L:D.#K8I}B/afITbWo8Uq]>-460~oNH/*4X!2Bac1k)agFTVG$GæKD4.Woh{q9,y-'i6Q(Rz[Fj OUr%9x}wd l !{ɓFۍ̎XBl?xZh0n=[k41O ceum詘Et_SoEL( \!}FX`}xj/Y_&Uw$H^h dBkV-P 2;%elXm-S^\FUq." `\>:p&MqK'76#1>@[F.l l;(f2ߑ{E"q&EՌ ppϊ}F Xop?S("oy f $.rmɻ``V:<|Id(R ' 'chess.app-33/English.lproj/black_king.tiff0000644000000000000000000000120413034414342017332 0ustar rootrootMM* P8$ BaPd6 C%RDaѨlrHdR9$Tb@)VVJ`VQˠ)y/O#S:O&*<[2j)w>lNJɦ|\<zn6 <H%&*05:?DINSBW\afkpv{| `>l` <ń֔0%1<GRb[fp2z b,֨D8GGFGE4E[9MYl1wI'X\UtH  Fy^^kLR;oGYap1Ab<"yh9sN[kiDxlqiw`~K`Sqkwo<]G 5 6 X x ' $ l @VN)Y&6 $' ' '8BIMxHH(FG(HH(d'`8BIMHH8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM Nm 2JFIFHH'File written by Adobe Photoshop 4.0Adobed            m"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?J62'e1YC B?䰋$g1{Tۏ{kP6=$oEc*uV9l`wܐA{zcj NJ1|۰0AiyYF揄HaڂCVB#pՓf? ~0H gORyJ3.'ęIn[x@0Nfs&_$Į^v1oyjثǰ,bPXKXvY: tG?rYn9a"@ 4Z=5ms C Ǝ&"fH]>ח8{v[ ʫ^ƸRGTcr@$Rb>1e-=ToN{oO+RQMxLBCx! ORe%5\$dH24'q8'RMN;kX=W#|FV犚-:G򺟡mmX7>;LNrgVZĐ.\h +/BGOcc^!"[aGmffdc\heMc64Y}bַz~`uo~:*%eĐGJtM{jB;OQe_/Zҷ?)Fks$gh=)8kzo- ~HioޙE8^>9PV.ick->`zGqGHyile${Hz [d@>)DUHc癒IݬqMbu5_#X)'3 EH23 e!/|wIJ?D4l?&4i#3sXH;FN^BujJX-&|t?0~M6?h .V@7 d1y:V-yrh1Z,vGMs:޳;4;-Ku~c6-%7fz<>m{Wv{]wx|^?'z}^g|~_?~_.+n 4 @,T @PqA1 A5q A#DLO83FeqtmEqT[GqdG-ȑu "d&r)?$t)J P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?FB0'| (]NT)URU*uv_X+v:fXmVK=l,W+]s^.7}oX<boجq 3 2|s+3z=j4zַEjvZ~c5[qp7<x\G3tx.W7z:wx|^?'z}^g|~_? P Bp C0lR%Ean/Qi$zKHd4S H|k+&Ig>t :P4eNTiJPի4rXWj*ݎdUeeZm+uhZKs/&x./b87'fr~g-C"MLgYl5-To_6{3o7|-]ix|o+v~_CsοKyv<]'Oy}_>0 :CO3 Ap- sBP=ïAC14IUDq_qt[dG1yq!GP#H2D%E.{3 ܟ)2(+R*K-̓ 0M3ML5L9M\8:O=ӝ;T ?-BQ P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?FB0'| (]NT)URU*uv_X+v:fXmVK=l,W+]s^.7}oX<boجq 3 2|s+3z=j4zַEjvZ~c5[qp7<x\G3tx.W7z:<0?T}4\#m?G?>o?s@/?AoAB04'Bd3CP7 C? C,E>1L BdCCADt :P4eNTiJPի4rXWj*ݎdUeeZm+uhZKs/&x./b87'frFt3 Cj3M.O5qn_6pͮo7z=q5\^\Kut:wO{.x<~/z|}?_?LP+@3=O0) 5 A#9A DPqOEL_F1d;DVFoG2wDz$#H2DH3 ܟ)2(+R*K-̓ 0M3ML5L9M\8:O=ӝ;T ?-BQ0 ApX<2 !DRŢQf=G$Qy$nKGridC'L%ٌg.&Smy{ޯO{~~>@P,  @LAB P Bp C0lR%Ean/Qi$zKHd4S H|k+&Ig>t :P4eNTiJPի4rXWj*ݎdUeeZm+uhZKs/&x./b87'fr?59|A4ڜGu[=_lƻs8;qx|Ot8Wv:}g[@q-< =/o>p?;D=<T>t ?д5 B 1 +DE đLOQ4]Ep_F0iQqG1u {!ǒ,="H4$ɒ\ ɲq,$Jl%JR/J/̓ 0KS23<s49N3l;N=M4AO$-4EEPe5 hApX<2 !DRŢQf=G$Qy$nKGridC'L%ٌg.&SmΓAT-CtEDє\ր P  w 8H B|.)ãxJ-#G )L[(ʡ(c.&sk4Ϩ1{DO49- JQjT}2OH*ubM;_a-6i͢j( ʡnW`nLڭ}0 N3r\ndsYZvI}Mk5ng1-{|,rb\'3sz[ئv={z|7{~>|w> lAP+ 1 PBQ/CQ$9 Sq,[QYEѤasQy _!F$w#GDIl')ʒ+̵-˒/ 1̓,3L5͓l79Γ;=ϓ? AApX<2 !DRŢQf=G$Qy$nKGridC'L%ٌg.&Sm'ry\g7tz]>Wv{Z̾k3>.7}O{>^o~}_0#@P,pLD%-B|1 O BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhQh (8U.Si*d&V*rP+jzd,p[-l-p+mt.tku], }{#c2Xk'ٳ6;8Ɨ5j3ڭEiZk;mp7\-<^G7s]'ow{.}?.C, Ll% - 5 Ðb A xL.@ND@6;G2\rGȥ2H4W(ʦ2|kL)?;gJs>(T%2KiTڍ:OT+UbWO4g6k]uj.6EsorUb05\enar8|'+\3+=s ?%5Z&g[; g;Lw;ry\g7tz]>Wv{]wx|^?'z}^g|~_?~_S| +W$@pCn0|)Apt3C7 PEđ KDLQd|e mcGkFsGp}!"Ȓ< H2d'I2)p+Iģ-J BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhQh$%(8U.Si*eVҪB^5}flu-nv mv.v~ 0F7j+&O-[273-GN+WvXsm7:޳{qr736.ǧzC|\7{oO||/G}߯J, Ll% - 5 h BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhQh%GRiTe6OTjU:VWVkUvWV;%gZmVeo\nW;f ;hD*(t>#Ţ(n1Bc\ $(C˦3 \*̦9Nu9O1 yEP =*{IeE.SK3:_X+*cmUdn6˝r/7ju_WU^*O-TWq,f\C鴚-Qe>6-~c< 7>ry\g7tz]>Wv{]wx|^?'z}^g|~_?~_j, Ll% - 5 Ð BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhQh$&Q0*EKSauFR*tb Z+uj^eX[~aZ+M-~.;08l񘜞/#a2Y|s-fjpV+l5kw;=qp7'ry?73t4=='Kt{=M7ow6]n<}/=~oo|(, Ll% - 5 Ba0hD*àq)Ebpxf1G2tK$I2|r?.$)\[&vYP')7Ci쾗?өU:VcOS(iR^'v _V nnVw^mW[z/< ~+X&/PrWv{]wx|^?'z}^g|~_?~_ ܃#*/%B+pbB<%p\+|3-C5CMSlUE|eƐmF\sGq{ u!G$}#H"r<$ɒ)J*$Kr|*K,˓,3LD5L<4\6;N<ϓ6O+Dr5GQIfI'JcY!KeS)|k1L3yi?'%8iU6yOS*ZFVk5Z^[V:eYU]o\l;5i]nWy^70؜f/r0 =N=?T++Dr5GQIfI'JcY!A0xE&Sg')F(ze&KTj9VVV)rWVl5v_Zl5k[n6w^lu~`/% q8<67d1G+fswh2,֓9hu:=^[lu-vamw4X,҅ʸ2/]L8\7/:~Tu❘rAw<=jqA.l,L(T% o  DqLQqlE!d_:tNCc"{?Iriw"H4$IrS&Ig)R#FҼ}(5*KR+1H416SdM0KıNNS3?P @I3R7I8e-Fu&4:1Bђm!zDV93ZWc7#_lka%}`5i#gM|ZhͫhVm)VbNuN[s\CqVu$Wbw^7=z_E{W]r_xtW~޸%ۄ_7a8x^1EN;vA6WdCYFk6oXf}`bvfh9jw,fhY8{liY"( @ a(T:+bR9Ƥ8?&JdR\]*á3";$[0&P 3%2MhsI,OGUiB_XbgZ+In[-W^v,;o p[ﰜF cVl.S#cqk鮂X-fWW69=}KIjs{vm[|7( i:ލw]k&0Y":YS*.5C#b' ;BPCb‹:@ ď>?qd,m,JAjD!:Ь 1="@mp&qrd(>|4I̯BQ|D\#,S2q3sd{L< 2Tʲt-O<8@QS#UQIдGR0树uMT=MH "HH$t-b}]ֵnU%JVUI%]6i}eV u^ٵbXvkWgeZ6McZվٖrvWwMmt]\ޱp]WՓt\5y\־ qZw߷|X%lbV!p~)ݘN5_F-&/5v[VUyyg^m9ޅhhnCiz8~kjZcrfx>˓T-CLTҀ(a@8 CaB#C#hr7tfG"¤L[!30651g:BAZe0SjT?OeF.V*v*VHX}f[mw=uZn|)vI&LTq7 ] ayO'ai5ڞc)eo,[GVkY:i[}l85\c%ތ{<߽v:2u}RYz=,w[};<;N<0D &l&w-*P8#\8-cZ0kEzXE XVJI\,fض}jU[Z}hۖ3 [5mw^Uq۷]i}V] \ԋ{7%^ a7~{`Ḯޘj66~MXGeYnO.Q7N1dІq㙆{m^w^-wsõZ,S5-EMԚn( @ a(T:+bR9Ƥ8?&JdR\]*B&NF$Nfr2s4 K2j\AJĨqJ$)5`WWhX-{bSc֫-h׫+mtkݺc]oW&Z8,F }(XfFbpdo;G: ދKdp=V4y wXwx9~q\e9.S+[7s]p^>?wdkߟW䫧k3 zZ+D l @|BP)*z C()5K$SEqDEs-'TbB fɊt# \) ЕH̅Ɉ#H"{#HT'J2jS&I #,2/T*ӂ$L/B<2S4 0Ӫ136͔5@Ӎ 7M>Ҕ1_.S 5@StNl״o>ZF< pv$;n[OfrZUSjf;TpG5Ŷuo\kur]o7%^۷ZnNe,Setx>Gc; mQ;.n7뼲/{-$PL<0+*5˞ɤ1$ELUől\HFhTNFlt+k G="R:fiJVo5JĬ,KԳ).r1M Y2͓L-ӌ8L7MsNϳT?LBE9PA;|G*tCSMLs;F5P4KR4 JP5AW2TU]XTk=W4K^E`-OXXZTEgvuaYj6šmZvͯomk\ҽ3+ ټFUwtwx|!z^zw. J##(c(V3 cp; .%G.]4Ge^I'NUsՓG*LUg&9h6zKZf9;fZ+k;6kj靮liV᫥VhoY p 9q^ums/rg;q;)Nyu'KAuшxW*( `h@ CaB# "hR1ǡј.K ɥ2[/aTލLgP۾k<ϡ m cZTIi6QNkz=f\UjcVe_[W ]tW{c5<qTeb߲6O-d4v7/bsM?vZݞknvVuT8fy+sXF^g$O/z%o\W_^O#0, LlXDP"ޞ'0"i'pB: $М&@o%d:"a%,4>- e%*\Uqs0́Ƒ @L_-/ O+E2lHR슕Ѵ(ܕ )SҬ29DY'LqMΓSHA*pдJe0;R\B@3v O DMSN"Hw.=%Pji{9_IMiY=XMe U^Xv2mih*YqV뽭upݽw75jZEnו{_t8 yρWa{.M#=\dVy-beنsYF%NDN}b( ;h@ CaB# "hR1ǡј.K ɥ2"@0:_##j?Ψ>Oh U!))>?KDrJ:`W궺giepmwJiQ.M a[7A+kFfyVT{E(9͚\Urf4ۊV,>&vl:Y [r‹9O3}zLq{2(FBa0`" ؔ#CQ90) ɣRI* wpHKy1'~y G;I5.aMu%:TTUBXjjcgXNMnҁc/V-y/;v+ulVS\mW^/2KV 2٭o8>=]q ·Gk6]q{UoOr:'Wvy [pO/bv:L/XUejXc֭^Z Em85oVrTh*târe}ߗɢ+. 8LxV-6%bra("ɼD5^d%]-¾Nb˒MkoYCvi fY0 C9Ӣ.&td*ڜcSg;g{&Cۖt=З6ͭo3óo9D;^ߟkVDZm>оvYβo[曦rZ<7i0ލc9`.>/'XǗza( BaPd6DbQ8> 0&2)$M! LI,J&3 e*Ȧ3u8.j*H%ZMUu*D޻EҨʥn9Xekeh6^׻g|nғ~qXezunK `2x\[=eVs  c]6Oܳx-eo8Uk[\)m_:4r;YNs:6ק'Ex^c?O|/Os?% l% +/ 40#1 ĐK SlQEOJ6#㺤01,ԃ*!",D{#9O,!IrLl*H0̟˳*4ReszMNsD+ϒLt;MRT =PTlAδ!I˴L%<4]:4}*T90Gl%Q4L VOSM6UWQWYPʝ[̣TMMO)dFXVC)Ռ23vv\Җ *EZ /mwŗuxDWW{F|^J/ `Pb6" 4W joSi*665b[%ӎcl1d-)\2_b^?esbnevh5T>Z6ui0YfT9Fǧ{.;:/Ź#;zc=Io>X~Kn:vwiO#rfDq =E:(F @ a(T:+bR9Ƥ8?&JdRHEPr NaI$>A loENgMWXjU%Q": ieZ]o[vy pv.yKb,:孶}rўg' EJ1ke?L1.n[E\6cyvy'KivF⇯7:&oN<[ uO#UE "`֘=;:zƚn<Ưj/>,>9槂_2/nR{4hͮ{mi{k<` {.Ufm<<ʿk^s'SYva(#wa@8 CaB#C#hr7tfG"¤D3Lgds7hQѦ0L1FR*5 6{UիS%j*XY-n\ʝ҇`Ԯvmzr^+]L/<OW)dX .^,&#fx{]o9WQy]pޏSnfx[-EgNm}u}u;>K뇓_zv/g }ôƼ/>3Os"ciѲGZ҄eSozU; /fe5LD%ǃ`}di_vwW(F @ a(T:+bR9Ƥ8?&JdRP ] M峹tw': 豉MTz:T*䶵SOjV)u[OgZm֝p\6R'Vꇂ߱X =kr7{-Vxbt8M׎d9f䩻)M)ml1kﲛ^]kYmo3}j;y~߯w<'Ψ;>N#xi=C;"3?pC5oض@nP; @C/; IytǬg濵kvIFg˵9mۿpf[4*1LܙaX/\5sh8 @ a(T:+bR9Ƥ8?&JdQqZ"7i:w'Qo4OT9A͡LR3]"RVk)"BQZ^ح5Ꝗf[t*%q+w~wus Ok9ݶŎDY,ec39Lt_\Yګ]K0-}inuf+g\v kw3kw]- oSrsݼŶBzE;y?rnn60?.S1 B8%/ñˤ ;0ǽcK5hfpzPTƉ$eFqsƱuF loqȱ$ɒD HDwBt ?<IJ>Mt91S,3$4D3L3m[ND[%A2s\g$AVfW;w^oW`pX<& bqXf7drYƢij^@ ;PCT%Bp\-°) t=Ð;Dp?DU1dK1tWƑDmF|u1qq"H%I4%s)kT,+'n,#jb=-L\B3Mj21Jڐ.h{䢯 ?L(PT,$b)C!c]V;B5FK̶YBN쎫vMp`/{QíFri!wEJf OtFS:K;W$Ы=ϜZwo~w}EyPUzo9],ucrzǯrECw'{ 30gnٿgl+_nx |fk|D\ #b羴`M[kѼ~P"VX!:4 W#́h)(X48P20h 8 @ a(T:+bR9Ƥ8?&J`cwiLceo=C&ӹY8(M.N%jBjOWiJ%dΎBVU۠W; "B񚼋HԬ{ XkX[&B94g/)D1-:JƊ}cunw[}px\*JksI+ì*K)L0 L7,II"O9Q:=O;O Д- C %A~Ǔ[&0Bnʳ3*'JCO ?6T,ueOR5x.5n*P+@Q9o0-4 a#/߾a8VڢCjI28@Y`+@>W+c}e"{F 4SPU̅$+(;Yp/z )&Ip|:t6 8 BaPd6DbQ8HD""w{y ?$h܊E(Ks i*e3y$ S635瓨*Hɩ;Ozf^GȆb!ff3 =JTy yͶ)UuZGXh bp|EvfʫR*;;S-Cjt}=;Ƃ$BuMGp7ur+m^;lJkv9\޿ww;|uwD]gx}} ?;܇P"fmDŵT;PpsY*BRT<pT4q"CltNEƮLb2D#ԩ @v/L'Il%Hd"",*0KE2VG25rK 3ʲ15;sL+˒3L(=ϓ?#XJ= L45DM4dEQ-IQt"PP$E<#ڟSL; H[NmiS=TduFT\;BND2 wq0Uj魲u}]1E B̋SD 8%'e-^6l^}^W"ڲkN!- *©4ZukW8/bI̽o,1U6[uߕS|_wzww^w{蓺r:\mYgojí'Q0-yr -Rt!GL)&L<4K{L5FZ3o=U,W hX7IT/A{E5mKtWK]ve=hލ=uMlIp<_19o~G}/xO9oz-ƮR3.<썭4XZlNjޟ`N`Rm7O- x$߄%=du^' y?tI1.]>lI1+/% ]eF&ӛN%Dؓ+%pDz%znmAzD`}-q n"|5HڂPQ29GGh Bԁ)H(Vl'GxM rDM Y-%8 `h@ CaB# "hR1ǡј.K J]Aj].>%4M3jU5! T@PԚ- ]GZ"7RS:5>LS' Va+tJwD&Uw53^Jjޟ[-VL-ulMZid054CR!DcG c1snW2uKQ DAͻx\>' ܨ/21jЎfM*>'w /x|ypf)6H忮4g| 6nAt 6* ~B[ 5 $$IҔ-KRZ/*S5J-͒MRU2T郞mY05Mf@EHMN߷ TBozQI-IQ&PO|n'-FM=/M%W(rg!Osv{b?Y:fv;cx]l3^b:LC1sBetVѹ p3Y1~wF+Vg"l.j'/ys?%ffal;;!z{V fJ\O @µIf&a4&SFoi膟H$Ȗ~Qs!T3R{EMJ- 5ou=(jI'`𔰵bQjAF3dnQq)Gxo,÷xܿH6y"^`D(%t$8 BaPd6DbQ0D""1W{w$QX49dҙ\ W!wc$DU(N'o,'*UASa5(j-Fe<ԩ&3N4xML(ꁚ^3YټH]0Uz|Q|U7Lig//8j.(xMi:74s)!W({n}q;gq{l^5UMfEeN[}$ wl~</}\~W7xUeT 3׻pcR4T-\) R"!D6P.2*DR+[??L*q#,JZ!+N˦CO IP{(̭- 3nxJe)6[e>c`:~0 UA#qW]uX۟Zѣa i%Yu %l_ZuJeϢl:%#" սs@0Rt|%-tx\Di\' Ux9qQφf):[-IQ{|!P+Q6OTD(6>w7d S}-t\>9:F7eq2N$"*Ob=['k0vg H-ϻ<:猤9!3b @5>q(Z@X {K؏|W nA:b@W ߳I ‡b&Yjl0Ƕ ?KЙR"U<})VKPeжkNd99:w]cFy5 )/z(zjX98 BaPd6DbQD"E[|r Fd KIeRI U.Ge{=T#ލ\';__r7<7 ?xUPh<K<Л "?,CB@03^6K4lb150ʚҰ^AP#MzŨD_'I<)J(4+J[ˑ/ XE%j3)BWMqs3,B붪NJTΊ) O3iȝEєmGH%!IҔ,(6&T\JhJL* /I V'YY ] tx<`3#<뼾ã#$VO5o(or\s[!YVM>uyQzU%9M-*)4UœqB%}Ë롼:fi󘢿PdIFWy6]i͢o6#-hXA~ 9ixj8%}^ތK@:ֻ|k<\Dк&r&<5{?vgf lėP hz0K(nW7r#wWM!Iu]o]נ *wymoFt;OޫχG}g9VUךupG{3[$!hv~de\W%.OrOg IA %nTJ+ 8 ;h@ CaB# "hR1ǡј.:)#C0g0j 2F3Xw8O)4%2mf(]WV@@P,/pDp[.3x@T*TJi5#'&bb^7U62ԙ9ght%KjsU3O7ͷ1}{x9Jd'58T"w&j^78]'kx2o@no3~=[}{w>ioù%b/C=0gӴRGKRq,*Q⣄C1VU4{;owGqj| }2&My{;ow^'ʪcyc??iL?o >@(| ,!@X5j9Hsor~1䶉 1HrBȺ0/iʨ6Nsris"Ni;H3FO?SS41Ҕ-K#U$tOSrEEPH%9O MQ 602uK~8 a Azg{vv @o4*l3-N1TLI|{^UTԷOP`w$]~uE9"%m- '@ DWA*Dy&Ur-*ygf!aGz%0c!#uטiIй-Ee0"^;31mHzaaXnB{3ilNvY\pGU|OTIU(cx*O-5~wY֙Kqjs{SGW|q]_#@,]9j$ԟ9/'qI5I$b& Vd&OFI"d@Aja0D k!>Xǐ,@`zɉ,ť"V&T͡s| 3hNئgZPy*2 Lm!@*gDꑠE i7Hn%T34PQDi ^1( f14w"1R)a1' X,80 H؅"܏es,ޚawJM>8 mwijdri*`岢26;)'2%H$#CޘRJfL( z^/ r4^<-0#PLAP4Ap,!3FDdw*/#DqD/RD[ 4-X EϤjzE*[iD823%8bͲ2 ͦp;T# rL$RfL{USh< 9:J1=H(,?Hot$Nq/LlFR}$R5MӔ%>2sƈmK1}S1Q]UU[1m[9FG{Ntm+=|abvmeY 4 y|pBGIpG`a D `Fj y !hh{D?&iWˉBG ҡb#4*SXQ$OJ%32eg`mbc73cD192~NZnڎʕe56Cƴa>ïl{l&ӳ'F۵mf-[[YZ+4g\ngq3P4[";AE5=JPTH,ŴB7뀟iküu\U_#f$ >B*e ?y*_y~y/>]w*ZMYU_5gNosFS@U ?j@v> @$@j kk%-#p~«3T3Wk'1j,<+Cf0̘k' %B$ڠ$n1ƴ9"5"c/8!$B B] g|y;G(qw%d,c4 RB(^[1u=)^ \":][H5EDAG} wu,~q"Ҩdi~lHP +y93,rMM8vMjM sn})?f% H`D(@N#ѨV; ǡp# QF!F0i|32dsii(LfƉ>'z&i:JkT{ ã{'f2G# x"ʧs'I"a+^3WZL=(mbGTȎIldU3.}It,qx3YU+ṱs.DaQ^ӈ6R !ȍ\HCd'&fl31UFi /v"5D5ISd7'R(fr)jI0⚬A(4NF+Y5kРxE8˓#$OS34QLGSTNrA c?VUmWNI]/4R2cNGOS"ڒ!~( gy' 7{ڨ@*܌g0G D3ImEgBVԷC'J j7 l#FNJdvRqټri5s~s(M6-WP(jfjuњBZ-51U:Onvө[2lP3Ed֣FeLnQovDo~>$yy-WXGv0yo0zfW3RޭnjPFY^Kckpb"F|ٳ͙K,d#wc/lvnZv!Z{߽W>0oOԒAP\>z䞞D:g;x <]=SB$M9b&NU Tx{h)-=/6x&D@ 977a H<ŠZj2 ۳S6hQ YDQh?`7Ξ3|A7Pj11tHЫl;Z3:"~2.E !NkVbjj-$)DXE#LN6Th+S=5EK*r]V$?֔OVVOEWדNmLѩH" i%;,/ h.s,kZ10l_ A )K0w2.b#wLR(3 ûf^]3}_ACqU{EL]=ZV3cy&=˅`ـwmfRKƣ9ucex>[:VY%&DATD9)lkʗ0 hA JwU ''KL|nKʕNTUyX[o;uU5^{} bmW)8[/򴔑s k.ً^+ӥG|V1n'ku]Tv'}p/ڽ}**JVY3R*̕L.DY / ?aE;?,A$̀p?΀{XP&X,Q8V"hUvt !<`{"Pm2Y)p=1F nwO>7|H:[y:KJd8#wa@8 CaB#C#hr7t@Em{+ FɄ:̡9˨T6CNtڙ1Sf*BNUujv͢ TPeR%gDȜ:DC0iFpX<& bqX26 bYZ0DP  B.@pA)Ai P5E ĐL,P%B"뢪CkNik6*f/&[6"+$ֱQtΔK#HioΘgOHHcEԔk==!WGu`ꤵmY"3 ;*SŃ:N%`L͋dEcKaZJM7<ŻZ5="5+COWEQSE'R/{S4SQWQ=7e_d@;3TeD]*թfv!hZslWM/ׅD*+%^K]xTkXaAϲWVPr9%U XnU\Y}d %jV3:b&[)˴ _iQ6p{oW}.-.03Dbw+3YS^Wβ鎶`s蒋to]uZq1f})@*}}:<ӑd%y𞟭|;EYf߼=_/G|Ll5Ӌz7'yQ#&iN1^*Ңxp-@^YwD OV {43`^1gPԴfZ|`t:= !z_s̚# "#2?2x~A0B(*S !<Coϝ'SQ^-ȳ;pZ% OaTfl8"=V@@8F @ a(T:+bR9Ƥ8"DN@/i Ǥ)}?PhT:%GRiTe6;KjV^Cdg"JmYrH=o[2 m)jk(Eo" vn16f'Fo\+ө7H3mS^5Sif?l1=f1[ަP*[[_*t/R-=Ymv??Q|z_=? ҭx3J#.i ݼ#>K^ ¥r9! *-v=oDnIЍJ1+1+I1\,L T̊ӴKJMsTMESl7͓;ϓ5FPU;T5[R:Z"; 0u]וV;s^_dԶUgW/|YvB3 AM3lT\Kp ,H]oNӒaq ^LDTSMV%bwatf\ NV_ᚇNݏ&y*Kc6Sd9Th6~_mfsϿN7di~Wef*d=4Nwg  [8Vlxv8mUN Fz/yиF^v^{]0G t"3N]P|YƮ8i!ՕmQQt}'Qc ]UWϝʝ=v6R=]Utݝھ/UH'L r>'YJS\lmuuA6?U86uϷǀu'? SRø84Њ1 ΋f "W7(xADYsLʴNZɼwȕ-HM a*=M?tЏHa=ga҆NQ`38y-JLHu#,G,L#G塟UԇP-E{BhTHVk!RyBxcIrf>9L3$ĘR+VPȟ $1i9 4p؊|/YeJO*K"fLr1yH!ɒf"Ha@8 CaB#C#hr7AFL"w,{#FfS9m7 hS-?LɔBWNU3L' joCH.l5+gUw+/Z."y.9D3kKk6t/;e`Ԝ^ٙh-:<ΖkZJi4oKr-*H7;M?!\(/7@'73Y.ӫv{v_ڧjnZC"{Ϟ ??j?6 %bгrγ"A-{*.hkrQ<1EKjGm-#ts2ϥt&QtTGQ|Ft0PCCA TA`Sˊ1f V![]iU$D5ҿEerͱcY5[v̫%&51=g,]=tݗ]T.n[WȄKIEH`~ I=3X8u5;Rt?/]V1;WcUn$M}6WV[ٍ,ʶNhg᷵y6_x ۡZ*-#03[ޥƭnښiSCwȑE R҂9R~^Jۢ]gZN"K &!6955ZUEI$dh4cU q_\a ;qUWx_E[;A]tUg=lt >W--PmC%0ïΞ/О?:NhDHD+#Sy= B1cny5Ya?lm4;3Td bi'*fd y o0Y;9"l(kB _c-La8/Ax% '"{:䓳,D 3lj=B߯o?L>%YVMPI; B"hw8f"iθJ̲Rc7Meƍa @D H*"h4M =#8R$E q&̳Rw1f8T)/R ,U) ,5t~3{d:7sSӛ 2E'Hd(z S5KB$ O EQԕ-MSfrTVeO4ܵYL _Vg|~#0;14Qɨ"Y^$*m\NsE%8RJss{"L^1o^\)ko /H>b~/?os[aA,I7^UGyNYٍ՘!̄0v?91֘乇Q-.JK*^F%4O}~^־sZx׽2;[cv]N5ʃV{[|C0* 6OhL/: rm[ݨ3cpZޓg$<]uOUP5s'BauT%r#x&~Ż824A|OP,IL{^@y ^ G(`QxHcT 0ŝ4SȺ&! \*/ffM7:drt&D@4X\JLf~g{e֞S47KZ.h1bϋ]3b Y.9i7  H BaPd6D@DD"n{xd'#R]'Lei,V LSE? CQߏ4cqjR@`=NtBiVfmi&LE塽'zMWN|ʰ=O5r'G[ʬy}Ob88ViX^3/5"B,IHxmo5g7tyRxrnNϻ˼{˖_ۊ<_/uMgHJjF:Nm@40b1T H;I6,;,sS DK 3D2C4%Q2M,ͱ21VËka0Y-tDHIg'b G.Dqd߲D.3C+1S :ɤpšs9ΓĶ'(lN릝3>.\:LK2ۘ!F2+7 R.CKť,OK?K;oLe3K5_=i)] x(@zx"!(. %jPǨzJ򾂶t,3,dW/&݂"*k:<=XVmruCH3Y0) K1WxϘEiN|!L=~"8$K䔦MI=CehV59~C13IgO}IDO5f:Kzv@5-hxltcseEa;n9WdѼ^#_m^ |^.Ӈm|D7nde:o>i6swJ܄Y׉'~`X_4za^K(Lc1VM^sjnjP}Jw 741ؼ]u3%}߅Av俬!w_4qW)A tJNTw,GrvDž A(2apX/Ι#haAn `K ӱ,SbXk IlHLeh,H Q Aq G^LUx|tY.},є)5Ĩ!NNy'xcq>yQBS1FSjB  q29ș-";!9gC!{9{)8k"1E.f䁐!$l^QB Cf"ihc2o`#$!i1Xکcs}I(|eeAَR* hi3Q5=Y7fz,ΒbKwyu΢D@@H BaPd6C0 D'{ypj##@5H0L[-Mhls8BʨyI?4 0dbd, S @3**EInFc!4U[.WHU5x[6m!J앲bT\ݷ9hi&D3:FZo;-?3: w{3UjeM/5zfϝ\&é:.[Gȋ2;&v7|%.g=߿dU@V:ABBp B fj;ݴM|6 sE,XAnFic ^4D%\GčK ,#5C&RlQ2U04*k9c/0d>DJO-98FءQ &d %?PTmG$NԢw/:tKM!TK^`<)zU 2omcE91Vl'5mz1`@ t灼t ##QN<$IOrӰ4xUUTyG2c}R$p렪Fj;I&M=u3Sjt'[VD#xJ-!GF[+0̱)gf3o #W$WhN:Gu'OSu Ak"*/y i CY;!ץEQ]y_,~_wqsRj'F37E&9hW5hîh 5ZxquwqA=u24ƠuoݦHO35%9*~ث P fi{$S$f "UZda2*vWi"\ӯqƒ<3O /m4D4WPi\!0­.Q4D9i-B<B UFkt(~bLP(HblLnqb-@.fs!=05د!0J `Z54&] t'tӁ0Jn*yJg/ѼU~Ujo;p罰$@\$k/wHk lLlDü6kthSjD*ug|_FqҨ!Z[ah$I-J$[鵼)V%c ȕ²M%j3.<hIj8Q!D?hU<jBg973ҹf3y$'FfO@@H BaPd6BB" "a`~%%JeQ $O.%hDc7MRHG9&c2!M7b;"!UtsOK5 \YVe-v$%wdJ̪fn\%l.7[XȾW%)x+TM/+}$iMFWٵ2]k3,8b(;49͜r8n\Ʊ<Ο;Ч=NXM"x'zS7quW5ϗbV2-0#@K ƾjhMU$TM4 '2<9 L3W6q".4" feطkd׹OSs?9웴yb '+Y-'̽,j%l3 4͓l fo'j̫;EOP1/C2AQ3CLd*¨<(RiaU?;1B2іa9$ ɼ"YW\U`ZmEZm%".q|hA^)v]]\^uZ8 02ɂaxT`#harv3EYVDC7gq]FR޹V[.#-U6g`5l1yHWuayui2ji梵O(╟AIolyakz^h:|R R:J+ҽ}WAUAVE]V[u<3FJ;MWR'? -|/qEv?S/O]'3pBM"V_atk; ")օr\gY>y^_q*"#!D,eF+6r{oͶ}=jo;_ӟAfFq:1יU*(xR] {ӂOH!Lmk@ߜ3V;ՄO%BHaD#of#yO<(M 9}q HF v~*TQC AbEI=^4yL xڸ3QlvҒVS]1($BbA nHj ƍѦDDH BaPd6A!y" 1@ RMI]yO$IcHRi3әWEcCdy6K9c YL:F㫂ᙾQYnOfLJw]:uͲњM3p wVũ]ZoҞFT3HV-Ktpn6Hvk x "ZLR^!]mļz C!ZjmųEÀA9;N՟r]q%h\A*-FxP~';!w0;Y5bs" !UWsqO!R,/}wzTOn8f`C~ԖxY͑6(clB4OfC%bIQEҔ>㴡SH ;h@ CaB# "hR18@D"AaR|WGv37NgSm ˡ='ƨEIBRUSS%qzllf3" TIw3 xf"*KXLӫ{K, b!x62U o3UY5ZyTް^s5gW O;FWB^3Uvh#SbޏfZ֟O+bͫtڭsEļ=σ}UO^iIw6+<7P @"A(ȲeRfNC3. 8DJʠ0@,UYرIlIƑmpKcöD BFNAj2Cm0|Kh:+ALB.lP禳+&M S7ǮT89[媳4+5z'd)BhGQ'KQ3> =O x!ER.К#0ʼcUմ;SWV]1JҬ`V\V*9We+a*ԁKs",̂Vqܗ-ț˙4UN׍yވF `H;ý B xf3a an "¶ >"*BU>]c2噮mk+)FS5oVM`"J!LQXVdXR٪U~ROٶCNЯ}#>STRúͲGE 1{mB':;tEPN%)[UFJM>{:"g]'U$.*p~=`uù^_wް6+xM:}OܾbzYĩX1ͻ}'^k%3~e(kS|[=H BaPd6B.D;PWx;h I#I1xZO*f2g)wSXs${2O3*ê٪Ϭ3*Fa[<]ߗ?۲Q)?\?FطM@m˝:{ZD$AVDM } .4JCCD˝(ڶ!x3 3Fr/ynDxٲb <KK JqԪ;SI/5>ѽɈ+4I͑<5ӌ9SG;D*꒶'Jɓ|QMEh$UqnAO"4dhX.9{߇D3q"O$ 9<K Tk1]C ـX ^e$qF6Fg}\TJOHTzbqE(Ǡ"C_RJih(^Me>)Fj&b$VD-ʵb˵jV0h^|c ~#S HFBa0`" ؔ#CQ9]1xDw0D:?/;R(lg2Mf3I^6EGb=KԊ?U*`dB!}_N){.J5o][VQ3uWҦ.m"fmz6Gpt N^qGFW]g"&iO+A9Zy=>o_w2;T7 @m4N0R9As$228p< ÐD; DkJˀD33Lr+LK qNKSD! RH%'#J)'5+Cl'rԃ/* * Sc' e9G1,|8F+N=)8  CN[$I#q!F:;5GL-*N=O ޓTJ,E!2 tU&XVp[e!]W2yZL aQ$8bC5BЍJ°l=lۖݽnt=[q- Uv2#*.]Hݢ};_=ȋ?`x,i "M_c)Fx'5f#`> ժQVɬI"H^E:P9bwht[eulfCg+uLi_ac|jibb"61~G-v9_&ޱk,P$TUocU9 qY/W"ۿV7\/ CyDUw _r.y' 04:'atjؚDC:F:bh*`M2snۖs1R+8"*~O?: >{ 0 GH@Y$){Ji:)!SnљŝF!j=Z.ƤniT.fb ŬfKcI9% /ZZIVo\tBC)i,@ø|_a&ʢU(ǜuSX`D(@N#ѨT"wC1M&b1t1*c2|*cwͦqy}O(3$/ l2NTiz^ѡ12o/i2sg٤om9Y׻`ovkLN18\UVYqYʼn4jBt] f7!Dg)'-7xM*fDeUw<wx|?c6mwD\a6/~9f&xS(+n2Vf '+ݵP3Dԡ+= %7Ex`&mÀ/Ծy4 GQs'rtDZ6trK.K|"! Fl,k5%1ø1Α,D*GFP*;Г@hL4)- "@ !KRT(74;SPб*>T`f>s3(m?84-+/55i[Re! h'$=("3>]o E+9DW54[/im&3luԷ2KS ]`Bi8f>G|cPbT*1i^JbFN9fW6f,14-3^`g }v3:K ܥnad±8UńfxT=gTԛA웞DŽVQ5UaL1V=hTu9X7.x\W?osSuYT 钓WZ5͋aK zwKn:]litޟOOSXۗMV^0mϓNó?zgO|w~?[ @E l @ rlė"H\ph'.QR)JD|`ұzxyj_i>$paV"EZK*Ͱ0jʼnN٠Dlx" HTO9&9Hap8ؖA *i1[tqw4{Fi>$V8l\+@< jyTfvP%DE#%HJDA(!@@ 'ɚDє6.6CeU|01ZBIY,B1D+Pĵ,Ɉ-z$~fO"5דbnM٣{\=NI˧;@MSoyOW HF @ a(T:+bR9B.D"oH-"];q?7]:)?e)U^7gZ;=>ǫ{? oi$khD Ι{&ohArpt"M*@(KD/;̉1TSEj^8hҖJaxUr\Fmm8jɒSJdJr̝)L)/0$%sM55b +̸"2ILMlq2l33\=̉,Jt&R.J7F]Pre3HT?OR҅c*SMEQU5A_UԖc׶ME(I:H72eS֭Yҭ)r([b(}2q} .A gz@P`Ncz$\*,㈁C 0>TB!u4C[J(rϷ"xhSKu͢bE]fZmĩB$⮵45/ UЊdɳlW;nؙE 7m߽oWꃥVlzeXl< Z5g+Rmr1|^h%M\VUj.s[+fC 5)tfwW &ny_y eu)&/^NBWwc[\Fo~h[h-˫dVo"D2HW"\nZ  \Ud!qW/h6;UF'"6uj6K \ U; ,PL 0xq=@ <@p,0bTAp&Qh )CJJsv//roV>447y";u H3cVvZՒ%\I%q"=3Fp)F}r">J$O!D8gM%p;#ԏ)k-%] D<;ɼRY12 [e¹SC;"|? UDS> M 77x"NS%1m OILԯ&3!5"x.9@X.<S0Ib(c;Ce'tj>Ai;ģ C%J`ҶU JӉM$׿!"H#wa@8 CaB#C#hrB'|5cp輲5.ePT>i FPpY3Bd9b-O(0,-j|B}V?d$"q;]iy@@<@0)DfD׊n1W=Q2TS1T)w] `צbu'p" fr -JT&: FA$ 3L 9TD$64Q32B3ܥ=zD>H(D*҅'K-LK)HKtRcNSCS%5; /9UTb"%t]rh5{E6iuIr XFu_Q6C e "*Zr 5DmnHoQ-m'7#1qY}HK +(( & d`ҶK׽yJQ0LEY$CYG,-]^cf޹|]yHg7rZ۷2%tZ97%!":Ba";Ұ5u[VTZR;5;RC!]Z>d9EYVޛMm7  m|Thx^Fs?3[s^ȯLoc©4iogA{}efkؘ݈Ҧofn{gGi{"yf^lu&Ul9ɃI3F5Yٿ_Wtt4٧~mػ}+ 3u)se$Wh]!V AXQ\fȓd+b-fBNRÆ :PN=CsP Ap5p=0Cuq;p#  R0"CM-drjoA<4*ipg!rbh;c%йxC%z~/7&jJMp*#pfaBO|1yJ=% =ӓziK)}-&S5!$#4V,}̙C͑DW7䬔zKN9&Χ ; aT&"أ;/sG^dUDV(TA;(d+ Bpt"D!feQxұT>A C0 L=Ѵ\8DV?qK#D*Eo&E|\jF;\N۷q KIҊԵDM&%MoDsȊ6lrϔ#gCELE" m!$Pco_ N=:"U,ߺYWJ֔M0d>V-ZR8 G2ؒ)rh3Xedٓ*w lգ [u q$!\q՝s5Tav[maQ4~ ` a+`btgPm+ f2a fm)Zetf/FyPg%YVDģDܿ/iڎk7kBRf5楪Ӯm\֍rnuP [ou5A4n\/ P q|qM^D9m^ՏClO=s"S9DL/Ov{%;]W<ܤF&G4~n4t[rЪ3YhD^FOoKU_Mכi9͇j;5 ߦ`)6)"[Un*'ڌԂ$j t *Ra;DY-ZC=jj@dKqg}ڝE:8SW2$؛;h# A=$ :PT ,>@mp=r1QTHn?@hHx! (Y:"}ֿ9LB_UX .]DHUEVjՎʙS]؀%wGPe7%b mg$Ie9Zd;GLu26#lY:n5SYUQ %A;~W7tΖR;=w-Cwx{Mw=^gݢ|7-gߓ׉WMH>0#@m, @dp AoT|E đPɺiNETb1L<.tWqZJ#Q!H*\HJ1 pٛ1|Q+EMZ#||qӵĬo$`g7Lt$dz2N3OsŊ.idrh'*-")&I1KҲ-%Mz+PD&Qs{I5 %IUmkOte![U5s`zh);E;i; ckZM@DփkX p}u`䪁x4 ` y['xGe*#5gFp"C%%ԔbVlϙ-"cg;Uݗ4yroZui>?O.Y^*P`XU޴5 Gn3n)1Mm9Ň=%5vP)x7ۇm\d<zQ2U9Nt} ׶vw>vo7s/y(Q5[9uVifLΡX͔D,L2&q | fNj\~+Zy:r>hw2+lI6W:$ ^ 8%;a K=<򐦞Tʖ=H|+fh;*@xCx}<ʣA*^1(34M VqcGnKe/]`f<{dD6O 4SI0䴔 uH1"d; <BuNٸ۞{pQ&IG 8b"9 tKGXki!H4 ⇈TXdFI"O=QRX.zB\Ÿ4FH9M-‹ {Aa>AX'M̃d8X BaPd6 ]!L"o;XӾ/F`zLd1)DOI2Y0)Ċw-$- /@j%SMo6Jx-z$aL >ݏw g;]l/wMx^2B3d%5)Ө+^3Y̜s >ԲH]%u_`A/5jBJbڨ,i!F'wq}8@x]|` @ $7=UNz抬xJKy DsVLX6@!8G/յ=]Tՙ?Zd¨9,:E=jI6D1K;DYtE:ڔ]nzF[FL76~.S$iwBYy;xYd\tE]?qt='G\ۙ.k2NVSE=xq*03%\MycN߅^NMFh=3 ]:t#}jnwKm1$F?IJG<Ź)2:M-~kMf4[Coi7޾ 5*!:RtwIgE,\ sq5È*.E̹%CnmB #%.1|- M @P! ?>%@E|HtHj.H<##̃FػJȦ2[ϱ">pոտ!Xd-"1h&4œII='^;ؓnAxs򥵓6GI$1vUXBa0`" ؔ#CN4D3o LdHFMLfS)d6"S Ig:%aKٞ?^fYysgzO(Xv'm:Cđ&ŒXD+i$3;E'3sljd+J@h)$N D8R9L*TrMs6B;O3#nR=uEєRӡR IKM*: %ţ// 7hS|$C2K,s=jNT]W/|JWԨ¨jxU3ڂ3EL3$mJ''_4܃YVD>yz }NRpO338)#sRLRx8FӥWFNU^7ϛHN=b8 1x|>3}hiuhoAøuFaV%TC8. Ȑ"6 q/%#t*dp2f1\T"' k:7N[ybqZqǰ,R'M.,~;Msl`ut5sGEXе齳F9ywwxdr$F]X}uY,j~25AפQXz1Mi3 0쵢seovq*џ g>fgYg@FKϠws]tBVjy5"X@G@14`ҀpR(%=|l4K ޛ6=U0PQƊN?RU؍ "A`x^,"Doq~6#ȫQl90,H"L--:r^ ބN*ŧT k~:F,"dYnVWG4vݩpR% Rܩ")A ZH\tOWb9w.ރR|w@fA X `h@ CaB# 𠈈Dcb(5atFWF#Qj_%sI^[3fRaj 2'EiPYaCȫY2WKjB؆b!̪fD[9$'{z7Zr-*j6ej;RLjJeUwIMvh]U[]'zvc7Eۯ/`3.LO}*W%^E^v<^?'ęEWsaBgWW L5 0Fi^;DFҵN*-D3 6 EK"b"􈤋d޷MfƬ;ϔx"O@0Y+h͕q*-m'4I,K \,1zMi ͩk/6,DQ%($ܝ>JIS0"-h| T<;,}WWU=cKеm ]7VUEY_V^L9bTŕ[ւ *M, *;g%I:-$lguHmfQUڏiTR,]keOx Q8+2"a`.]3ZYx홏d @;G{Lӗe_f3gfog63&,-hhpYM*ӃbT^^OJfzzLK1*_e`xg$m]ѸK33͓#s_[ JH5M\\_Bfj#E ]waW545oZ]_df1X5v} i${N M7ҏu",ЩfzZ5ũLsu]j!"&LbS@v ^> AX,Dx8!0/Pa )G 8_+P̩ Ȫ0C |DA}t/&ANqDK@+Xx ϭ'\e|-C]TcsD$"HJ`'AX BaPd4.$w|r#CK!CRiY %)LF9.JIy9Og9=[:(OSȝVA+TXQ3k4MW4̉2*w^oW*;3bqXTfD9K hB=3-qY 0Jl?+i)$14jD ,f+иeb*؈3մOGcE*f?2/1le+"32n#I $:<뿩Bž'BXӸIJº8%q "`33V|Ah`$`15!Z!z)_,tB!y 8#iwA=bC(%DxX `M66؝Ck^-f#DDw EU-F@@X BaPd,#]1""wјG=H#)ʦ39\>?0MbҸS"Nid{4Mt %GBS'Թt RSyXlV0̈DY)7^aPDfٱ ͬj"UL>7N9;ɚflqh#oP1l}o+iZe[3`l7 $iWKc*%fD_ry\;{3\ѼMw,h3# @h> lGl<"̲{O?f\ ji32\,ԫ˰;P:ͫPwkaU( boڽ DKx4rHYKoBM;_ *+nGk0I0D*! Աq*qqs 91q=0Гz>NGH% ,įDH:(A%p(kM)3$M"@MXV|R@ue]V; Uw wزx$@"iH6wR#0;U^kf*5"ׅwmOqmV7;0o64{Xޒ 8qT+ˆv!yeRU0(S'V[ce^uk_fyUB@dZ.L,U#;=gU}_3^ƻbᗐyUv-׎ïa~?{oo=vC;?m߰o<.ŊJ.rM U4^?vt^WQ(˦ն"4Xf8=y[Riyg5v]+95Z4/v˼(b r܄/!|b9tH#o!%EWYsm!:o/i"r4%Tf15G9>MLc 9xP,6!PQAv-8.՚uy_ޗ]W|hϯ]{,! :IML?sO$MWյ햮uqJZ{ U<};nipw Dg3nH9i['F9kfdOa)ZevpE{qe7ܩ|5e"q ;n\ݩ:^I=|׮ZgVgsȶ!T+@lrV;OK"_QT l=8ȁ9IhE⩧CN61'֕?km]ƀ*5'(X?8`& \ar3@0zZh@8:sAV0 ^5,B S0D㒸O7JBoFf=8'S)P<_=c1=9#1P̈fInvY6/8[#3r%d)7SiVS(>)..g}>bYʩ2^FOn/ 6Z!S";vFysq^>QV繮۞EnM]5<5cs"?xJ{b?}SuǻULS+ ؖ3^ l¨3 \^I/6$ PS ELI};]d0I TqHˢGMUN$Nu~ w kMZ=?*pZ7(s; XF @ a(T:+DM$4w)J#kBM3ժx*BJ;cC)Y54GOKlDĔL-:V)B%lΜT1On$a)J >MesxrDvO2+[sպ)<BV^5kس1]aGHf :sf硬r'@w[ ;;%Y4oNZmdB pKSm" Y4M7=Ca]~fdg0]ɻeЊo}~314+MU)zH%[&pzsv?]g#ϓ 6I풧s=Yv?E3vM_#o$~~{H c6<K<6ۣ?TwUQ@6{ݤo0C J0@?p4wGp00po:Fe;E25SUQXOwj 4ޛ&uRYK]1T"̣WKD@@h`D(@N (ӽHh%7 F I尙Cj3̤r]+Rj)_O,C`@07l3 Tj( w;)M aK0fUl8]bYS+3wfIjusy3" 1j9FgDq'%θl+U6&hm3> ?z)~-fϜٲú ^A;l@oA$@(43C^ף5 Ð= 'tJ8.UE2%mC0Qb t8TRNHIDXXūSwom'3{ nA `1D}U4o ^Nz/6&PRu$2~ zTCt~ɡVJtc03 g>B$e-A !DjȎ^ I3!K-1 MUctetnBtPH>^L9] ;gRatrI;dx [AdU)MS;к|=A$O p#Z2J4t}X!Lq !jkq˪[/)97%մys6 XF @ a(T:+" !F4v%IqdWJٔi"giԢQ5N3G4j]"ML{p9vExBhD' kށ IJiDfD&i8ˡB/؄[;44M+M#;D%[\)>HLJD+IbT?i;Cєqz9M~Hj{;l<[c#"r/Hԙ񷈍@5|T»›U7D4Äդ %-ZE7<Z[%@t>9]7X3NBP6X^<קx=;f"H]quoY'[ q||UTg63v~SuX{ cFoݙ4|S}8ĹbSH0,#qCUت%;d .`2cVBl7t夅Cp6@x ,P?@Xu;X2@D 4AAHa WSrH-CLэT3GCw 3ۈ3c`8-d+j7Xd3N#W+ϣIi FXC fsp?h֞%@m591|jGՕHԩ5O ᤂ fKNXdr<d@LIX, F*53rۂ3y$X`P \Ri2LF}|t'&̖i;PR;(Й&x3# hΚH2mGTAFw^RK &P:qh @ a(T:*" =GB@IRXD/C2\NG2<;?P(ʃ(Of4IJu3&U:,߮!w B@NPPc2!M"SQ9"c%UZW!U$ %+rٜGhsZ~re2"胺yPbpIrr22_ιٙ=jsE|?z}C7D|Y>Y>l'ꤿ++;8 I4M T$J 0Õ Eđ"#륮;}3s'r4P;j=f6A1 MT5 0 qT˒ܼ*+̀D*⩚n GMDxN%T*Oq#[ 1/"+DLq '*R.|9HP,)6T놐Kt}$4DwNUbUUE/24"lwmj$R^X_'3 c5Hb#h[LqiVgUt8ͱیq)pwWI&PekQQ#[ -l];x%[8VtbSغ8bV",DSf?vQ"28͡R[^%3%pKROQi3ݱlS xun:^V=VlXsy\;ϻ;z~ǟfl=}7Hkf&]j\e\đu :d[ԳC`d]p--մK@˥(=ɰ cI[TěVRN=lGz#> \A88 (T;cm$*rw U >f=\B6K ج82F8R,B.,vw6# hQ 眃۠& hT2D.FH"1֮2)c9Sz:"nHf'UvdJJpEH[TI v&S\1 ByX~2BJ$zmP+#,٘ndG7!94,e"2PY"H3SE$0;K 1[V*3E[=IXNWMm]:Vu_c.dJR͟,SkS !MQG("-js%u]d׋Z+G$^JDBVm%v.b/.R $Q BM# xS =xAY.IKll ͂QtkϭaNv7C wzM 5c"aօkδƐͰS}wfٝYc^^ӔUu 4hoѸffiighWtalUCRHQDT A-mjU퍦b-^< ƪv"-bV #hO]%i c\e{&7Kֽs_~EPZxD!Eâ'BHI*ГM>վfm |}ۆ__[zο1[ANR«y"(hcrϝ# -4; QPjBVESs0>] % f[pliQ/DD2]t \uC1#qŢؔXmn.0g ᣊ[oqc|(A1IPs(ױa$GGv Q+܆72 XsjݡFO!41**.JK* ܀u9DY[gp?ֺKt.ĉԢF|VPGVc6()33d:ʆ15SF7^{h @ a(T8f"mkyH4>'C+&$lK.!yU=%s=DydIOj:A)ᴸ:TW:m4Qvy5o$s""Fk[5gX)M΃gIf MfcS?)r`jUU<+h]*l5ZE .:}V<P=yW7ty%] H+a>{wz!^qD~2y>)#00o($ LBH3ں׼T5PHô+ .rU@^E0󾹼#?uPshٳR*k ""*>Q K |N*re?|"B1D).lKݤ(ڲ ,LP [s5ԍДcEs(DRE[DMCw45r*t*­ؗNk}6ڞU_yj8UC\wEqWMcȼ&^N0+k1O5٤0zHrG6ej[N6okuzvI}alʐ]15 ^7B. "!Dwoƫ(5+ BL/Flv-p%r}?R7;3TR"Baܾ D/ʂq`Isi.ho !_FѺ23TlDڀiHeX\A`!DXX1EbT|"y>qJ("T1Y3ňv,&1& 7df\n0HXyg-3DWf f+ꈏC+"[n b/X\t-C d%SXg7E*yKi9Sk{=j׵LWpr%")L[` p--L#mlw7SB U@YVқ̋v1M| pRs+Z+ ;j;NH2'tREb@dI2ГEV!{ |= ADrK9Ϥe3:ҧ ļ㜼䶮Lr#3@:f{*C <@K-j"0̃CQS%ќQ< ʗ/z.?ot'H$OĨ2wԻ!hRS 5"s,2u\龵z+I&M?)^IMbJMVi" M@ *w͕`pgjj^蜶}3OP@Dlc;w`SI9a2 MٗR@V?$40Q{dM>U]m.FLkVwgiԊ,JE+x@U@N2^r-ݏd[l6LSk X]Q{v9:UMSi."s.ڦ4O]Zǯ(W#L8*A+oV79vUroIsͅ\0WRB;A>UOx&1sW@Vp+3iލRB%rnkAkŒXksGůA=YDaG~i(HDCh𹈕e݁oZtC :D+ OMTD['u_zF >F˞zn==fw0O]тں|w4DUH<'9XK :(ȡ@ AAqq7`)0O0\$BOjF(ѤA*g z.JE! .+#"7Ȫm IwFokL}1KG#>U$|Spbf4zoHWӴ_ m!)%2L\(aA&rHQɠ޺#h @ a!""a5͇H] !!e(T#/rl[4K&rI?O'teQ贊*WK"Z>]W4k%I}VUiT0"" ȊX`k;% L]WOVS ݽ"fsKgSϮWIj+W:5sK6ְM(EAb8\'q\g/jrg.eg9Ioh"~*u#y>E*7{z٫'!c^еmD LfɚA : 4P[>c :&fk*©>ʔ=C<95LT ;ɥpt ; k &/[)2K+#+vA,%ɪ* @-5# ȡ*!l'NTN3= o9B& AhECr Ӕf>tƯdǑgVVz Fj?sV|S|B @K'\B6YXlC`( FQ[k@Ԁ#h" 31۱K, *rJ7䒓DH]!% u37&!☖#FE 5三^.B[EFOdL]:;^TuV b*uj) 9^K0QˊK匭(xМkzEgj-0< 13>oY5aD! hod1hO"YFumůZ_o_[\p}byc'ki7kB׶G/"VFgH5MvbwS6.M{[g| g"ت*|"]phlY{j-O,;lҡr>Q$I/S˿Wh2 Z,BBn=i@TJ#DlaD)'Hg|@pL#6zŜ$\^P|Q#aH-%Ԅ:5wMzyJpBZY3ic46S.؉Њ/E]!c\-sB oʚĸLvOnE fES TIuHaF!`9rE-S\Ǚs/΄q-Hh Ba!3lVwȼ $|!J$9LOJ2yd[3M'Y}6N3-]%),vsEipmeTitJ%n " ioF("U3[+n(iZ^03 WݱXdz/dD|"޴q+vhcGiZ\[tR(^Hc4U\L#<*d.9>oCKZfcɀ8_R+X%ҩ^3SK]2RI!Elf!+ura9 L yL+jCYޓ!!UMz|sͦ"TLM*i.en8NmS(].~N1X5VZun}=3_[d{>GwdJhNx#0I4/jB- :ߎ@3FDkCX<[3 x32 *?m"m\'"HĕM;)'; D2м:s榑AptBL,oM*81QZG)=tI1?PCPa˱ u"4s(DLwHb:52|]LSޣlGԻ!H5Z˕g&0lNQKeWmeV+M\̓3VU旈p 8]Y}¤ք<^;IP9 B5/ZQih1V{hYƚ{LKlvZSj@ӑ%R2mF"$zA4KWu]8%-K/)(<̶Q~9QtL ^К똈*E\f"*/o}"0ޤO:ރǑ櫱33y?|O8_͏@ӛ i>h"=[<1rne;TNֻsnuE- 3Ȩ)8 U tjF2 ZdAM)h BaR#D7E 5c  KEM,&1 U%B3yry2O {.g|fJ4y6iHV*BHD3A$#?(aBܪfbt)D:Uo55u#֩*vOuldMC#55y3Xݫ;_W\-K-3F}Wb!TDD"7ZfGV8W9r4h/s/u*ȃ4Ql܋ zߌ*5 kѳxM0^.4LKnC#K$#*# 8S5jéC;jjD ijk?@O+ۇ<ŐVM)t"M9O@DwHM*LKeeWR%aVmb2\VpWvmZЕ_L,cHDFyVD CMM`*ХY43-׵m`wd3ո #5LzP`K%53Yy^S;YWU4 coeIR8=ݑXMf1r$^ݰU,YΎplza.O6g:}djѐdj By \ܧDƄz6yxLijj/s!OthUBDLxYx\ͷPzS:XK!Ù6a =}K?as=}ep-?d3Y##q-SfJOzOZ_Hr!ƗK&KAM]>HQO5θDr jUdY@EҀ^dGRug>a]NVD@!0"Y١'x]QYI@wDӗkz.9܁cqmguqfeС`U82:E;|.XL$@<J-92=|E Hd0F,qZC lf klq&^ 6"]5h9.N(`mJIKF}ʹO-$\mKDDh `h@ *(T!;CB~K$I2U-Hr 6'%zq>LM}3OiTD:BhY EKDb!'aVQa5j]f?3"l4̤Pg"3qW9o\1)܋') cwҭW`0[}+?R iVk"j9[r;:3 dJs҈ZFd?(c!$?kC?ikR;)W'B&nG+Jrˢ˒ط+ZfAD.3T;=Bj񲎄Pg-ϔLE3ۡFϪl7KM+Òe,Jd5Ώj<3i%PP+ fV$2 k^q=GSE 0-DHQVDԊn;jy~xI sǐ `kjDÌk"`p6HMI66XTىIVAxԭe<9:yC8eVuKMIgYe)44Ӻ5UzdD;[kr~(ݱ2˚ln8jqյgP;ӽO+ sHȱI" &GWi흳UtSثKcw4o 5s}s&77zfnF5'G3dfk?Gee/oky;{Cl6Z?\OSazw{)'eBGOټQhgXG`(X$n݈2]D1O8. T<8K@w8X@Xd{1[ D% IIO8@ Utͪ*7uTetf}A,nHft*KZ6  ' Xy8?[,\kQ-W;# מ"OsTJ+I3bUӳxN?ƇʘABY=!&+LQrZ$k[E;Q#ԄV#w']ØTriRMI`YiW(fˣ&sXNa\rC26@̩C2N a|S"P5Ўk‚ D\DsB*j$# M1&'I h BJGx"w"@#C`n3`R|r=Q'|M)KR]4gI K1)\Y.S"2?h9 B!l< .kn2Y(nQz%>IPiĤSDU"y珛S۽ڝ=S|d-53S5ZiUDUy Gkhm3;7ԙCr0Z= yת/Wx^6CPrH%B !o"; \!Hcj< tm`wjɮ3Dݽɴ4q6E<;2pLxP H<#KQȠM$3R33#H2EJG:39!-U),EB3!E :UStDUVbYS˶EI.TI(o*\ 1iH }gx rf@ P";ʇy51" ࢨU W 0n;u.tKQȥ7`XZ@TIu|GIl`,' Q8C@6W^6Nƥ[[(RxqNr۪=]hgӦUBZ˚emM1&DW 8vUsZOBy?E͒t(Q8Py?=űB2 5͆w=ⲖyuոЖԽÑF"+r7E=v2mV?d9SޗzzX4[fW,Ąd< 6jq)i}H,gL+^ VG8!w˰[-@l@J جpP$c=%-R}D9yDCpUJc5A4 b!yƩқGmm;TEP#pE*NP^'4HQJjBFBsĨhFz G$2rAՃ4d̗ON!eCǔi *CT@Ft h6à<&<#Ce0s)['Yu*܄LZF~ 8wJdV6Ahg3B1NXܜPǂ*Xo:>%S}&'92g"_I|Qޝs=M8*T(ʵKN4C 8p#ҕc̹-l6&QzŶ3q4J>z #C2<߷rGs- pPJlǺrkO-%"ѴR;SO RTjʠ¨FUBK9N,aW$cX3EiS +gZ ~x H4dzTzTH9X@@&zg@S[ MdIJ{4= E /KfM"iknZȿ(U40DM6V;?gܥ 6SaLYdiS0YyS7$y3"/jk?ӘJo.Mu+!f/iM_žq?|X:،[NZv]{[v{ƛl]l3MYOQعBع+Ior^L&w ٺCB%SdC"u3PX}'_TuDUhߛeo 4LUCh E CȠ4I8;h wBU a\ C8jSB"<`< @` Yp<xi BU.(DU(| J*'];M\ǧ=U9b"i&6G՟aM9,KX7xeDuLDVU+9SBF\m!l0A}/Ѫ7MЙA&: zᙠ"ĩ3@KihZk{3Ul)r"Pyr9cf Ly;"yxD ݒ|O=WpS2 khh4h{.hJG0$n}QzfZttudR`E*hꥯyG园]еVIW%hF @"3b'xDE f#ä%@RT¤2lc(gy|:c %wF3U35 =}7 <V*a@ E}?_Q8 >&L<@KΧQTw*m9S1U$i*<5X6h-d]IɵtEVM~w6M3MTkb{:__߆٤B UG2EN6.}V<<^n#;3 7pXf;H5{:XFʔp:.HA!6МThL&QF7*MdKpr2^DAT#RL6qcm5 m+H4\ AЊ@ϛȀ#?ᚡ:nCP=IPFёt\/EXf.Ԕ}<3L޻V5ɼީU_(]Q55UFoR@襒 " B7$ QU,o4WIKRۗMmr\75Suwx qx" @z'I@y G&xXyg%|LmЉpDɚa +@pat>ꗂ0Aǎk@I<]%קl~t4G430E"Zo*5 ɚ^Ho~6E y=PgI+`"v”[vx GϡEq%"q!qC kh XL0p<@`Li~ǡ@gPF TXD3ipwSU~ܘqD]*jx*r*XS  C#Id\>?)ItA1氉Tk'O*Q4L]#S;@Aؚg/(>@om}:@8T  ۥz!'ΕO#1TwM*l6wH1DD͉:V#N[ NCmTd,nx[!ߚM"(nO!q$ {wз}AŶWK??b?%J=-c^M8D "3+ 5 Ï:8ЧsA +7ovΕoi".\A-se@Drᶐ+8/68V^C0*QʒDm|k-5/)L$wHh'"Ǒ{9#Ӥ>ۑUZd']v/׹N(Yf;u1?׷x;>Ms~@0# :T#*o#/ C5 Î<,iDB)͈D"ؙԨ.qvPE 0\)"`E3rLHl3҃ ʛ?[& 9xEtfN lΦLr39̉ 9@ F$'GG|JkoqEL4*y8mGQ7G;αґ4tWM Yc7+ šr0+>$ \D*V},!>ēMi2*y~@ GpU Hx$ڴݔ x;FiWT־$Y] \P<< dB"6Q4c/a!-fM_lXSP(ϺF-2 \z3h$3xo,uG Yq T^I1XEW%øhڗr':! AmxsÊН[vp^]T謷yP%êJݿXaN61{6_J)]grˉa#;  X!Ճkyf354͋RK%0)Ճi>Ă˲0ǕVz=/Cx0XFq.RDu3Љ:6-J]"dD!RKc1Gty2 H"H{q>Qp4#LRI0IG$|6TtъGjXdiWIZr]8lMMj4<{/uƴ~Lᨋ:S(X2&R2iɔ@D U&ArRJuym%-I0S!?`J3,- >fŤC_ZZ2bjZE+&WGD*@ x`rz އ0f8Tf%G`ѹ$rK'RMB"ibA5')O=IRI =ϧ-&T:&;{" <T D DATM*٭li-:"c'x%cg.ޣ:MQUPTZ hzz2J-kl# p^;e扤o\cHS ^ ܒUre^^+5ۅ89F+\eXBbAl;9j{>As!2L--=C~NSf(R@#y zNh͝{OZ~![2^Fwt~ZL8DrҼ>*PC!G G3o+xhЙN򺲝]uNXJ2jFE1غ;t.X;r,7C1"E>'[Qio4?L^r'=qQ&ɇ"͹?VscOFFDq18tsKBi?۟s<"CVHaGO܇fPƙ_8Ҩ:,5#c NU}&nP"mdrtg;.뉣5(IUMf.loިt*G}y.jl]U=V ?BҴ+ѢCN5bjU0M3/ԊLA,3W5`ӵCLjú&X c$$wı pGڣ,ݝyb+"Pr 8RT% pz, kZ#<)O\@JE#Mq ",4?BpKt8ΦgC C B!;NP3EXNs[Vu?uiHcE5o]U2oeW)5̃ 0Ll˲X\rv*JMaJ"W[E{N*Dr-vCb|xn?3\TUqRۆw0^"0rKEqTMD,3ϱSDH,1yNzc:..Đ.)A^>&N4:u%u2IPB1VhnݷҸw]i"<;'Ky f fWyc#M%g[---c&UNܯEGM(I/[PSԿ-r+pp]6g{wUbؗO=fi3zaktFDhxE#'}> =ȁS9c9.D9{7C˰?udɹ4x eI@'`[B VDp#jD^{H zh4t<B3BjH2ɼ{C&[C@C7՗Ymͮfn vP]hqoF1&;gd^d"[[N97taPQ>=kZ pM]*$Ɉ*:K1?䆤3f1Dȍ)r. Y:W-R؋,!jq>KӊnL4 Q[-EƼXܚ,EtRJmMNdCRD9Ȼ9"6|P! u I|̹Rx `w| #EdZ%ƠD6Cb ?Lav9Ldm3Nd‡.Q'sdSMQh- P5<2Dj{zqo\H;8P+WzM}_*x Qd+1x*d,A(q<^IjqȰC "ʨz>H83*NHAK?r!USVKbŔe0XV{0KT-RrD37(cM7tF)G˒ dE>}+֮D_\t xdM6;mXնȯ9PR^ FĿDZ4VMX8llUcHn^"M2%7.+eURx`ftGn΢m¡B);3q:%ֻ+&z]ol,(ͫ&7\TFgܻ +ZV-e\B=3qy>XkzMw2e 3o,̋Im|=oC5_VǼ!D+3tovݙ⪯K kJ3ow(y;'F2S=7ig~_][_`z]qϱz須쭶~*I`"ZBf;}2M5UAAO F@=#r׶'{`@>YKH@W^t,9o ѻeh];= Du& RNTSLzϽ-&C}QlV%&OF .; Jh"$3)EQQ5=`Eku[&3Th"GO$d/qFDg wf=6FCpn ־AAc~h%kSݗ2T?Y#/HdhD~5 9ڵIhFBJE㽽;.T"x<;F`9j#%Ȣ)\E-D3ZGJfyQ0I(4r}oDe)4u3()VĨ^#S2e^*k^fU$^/Ŝ_x9 AN%7&@8l~twLK՛4Sd|Qe*kWe24MwGW[|Դ_S DڨY+K9Ͻ=Oo-2\m?8nUP λ/)5pdcTlS 8JDb:+1t\Q{D"2Dh缒,5[#Hm<;హiD0VZJ K/&s3)cMsS"ђě̈M3D=Lʬjj2E 3Ar;R2U!.TLBӮ"B;3QRt>7k# 2TjIe–EHC!.7kD#af΍t45R]!;ꤨjWvIO[0ЮXn U7s ʶN=qq}c9!;3Dњʿfx^sba}MF#87c~Dݛc-KWtКJB "3(qYYű7͏:oCHeoSqU?\ ary\Y07Q2U5>[E^0ekbusIr<~ YQWYkcrDE'53S_!j**b"3G^}-C^Wqpw˲BYj mDVMz*o0"%3;c5D\{d,fS=Qx\d~~? :qx)FWS-ؑ4đ%5bj* H́;!vcYĖ ڗ`(Bh ?Hѡ[Ep1@ȬAEȐȢ!aTOR^s"=Pa,mR2/ke-CE4 Y*D(*ވjNQWs5+|Y&S0[P»Y2\Qn^lf$LqJU&sl~d.DxDHo]T"EQHZ11MI%2rU-$lC,RDc>aRK!IZ ,;O1֟˛o}X֓vKBܗsGt)mׂH2v]`o]:3F_˾~isñVb]3Bh;`Rc\BVs ث_Mzx#lD;ރ1Wgّ@zT2rco-=&$KHg3`"4fÜ8AZ)x=8tCYx.B  ~/Gbc^AVȢRDDU"rN,x 9]S"Dq"U"3B0&wV- @,#G.E$ɥRYY+%9O4e)s?O#/QqE23!)RTTjhw;WZ5V1̉ChTV[PͪիN{߰7k;a%lel oX3zqJ~Qq|6N.WֻExͽj[W)3|,]狨4^\[f< KrЭ]׻ ˭k~_ wtUc^ϻzګ#p" 梭#3ЃZ /iBNb.CGPsI 0^131^F0GWqH/\Hf-b^Ak;ĴC/7:-S#):6QTm γDˬ͒ 0(yIrT@Ih]u.3LQ@F 6o(h}PU+̑;E[[K%uܭWBm-{RU4^x-U=9jaMnV"c48LUϑ3fKZZyS3+pm;w{V]PDbƓ_OAF5Pf(Ek t2$v]ucCA^ާDzuЉ:EʹFu  D\SNE⣥(`jnX_5TX{G. s} |0 U,pABgao <քYf'H1"rT8p.0VX {-LMxU~T>l[|qi :"tn"B) %GQS2wOl\=rLֹ-n IH"՟K^DӞ0i$K߄=( VR&`R%EYg1Pc#V3EC'Lf6W̤ȩ Hx[k;0|>B0R7b8KaCH8#jJ#V_#zQ ~:w6TuIQL|5zS.KZ)hʮ' PdB23 i'R@J+#|WE) S"4n:QbFHO?o M*dq-DHϼ!̊!2oI 'dxUOz .-;$Lo3ܳ4L!쨬L#;!CLN=;!MD}RT2AQԮSWUr}>d$D U^Vt7ؔt 8Y%>eRY}%[UBiS[Q\pܗr)f0p" ћC=OҎ$B-TV7=ąHrPL8+N^p\a}~_wՋf𠪊(Tk5NKBhe_btR%nq>S°A)FW 9Y?/)ޛw]lQ@jZE4#Cc۹D.2PT] f)rf&\|G јЖW9nNì4֙c|Yx U< f,%ȽVm۟idJtfmUۜy>zWPيtwyt'U32,2 }0QlSD$ۇ;JVBOh͟1umXMJ^e[p3\"#]f>{Qgp \Cό.P^E^1dImhעo" BxL{LhW]׬R雫6m 6{ S˷jZ%q;03l8o]al;oEm28.$[Q"N|]qWuʻ_jۯCtXuw̧(H*q7vytG6{S Ɵy'xoNs^9U n 9HA3*{q, 3i9ZAƬHgP4sI$-52"Un=@xivGŸ$A(뛃;>) Yw+I1ԣ 0?ܟ̈^,-6Ccas!D,Pr (,$kA"PaCV!*Ԋ5ƭ2Y"]xЯNf3" IslN3DR{mag4igiuo;7C5f]c5Moo; g5VUrSIm;9 o=kjٺ\UaD|z-챼=oζ .s#'+@oBo>̳>.:(TP,jK ٦dƍ կmL+ CqGĂȳM11+)J)ԑ%Y1 lc؀Ml6xc.=2#䄑GȺ5sL bUI@׌[l203&ߝ |AAB$dĘeEKC.%–cOͩf7Iu*8WI(7/'4GRqt r6,8ӎLYb h4#5 L` = ܻnvRYN #ݕe(%F3{SQODZO~FU7S9ɢg@JFdȂ  ;0F P؄* #1/APL%ҩL/2iI0UK'3%@fzn#@)M#Cv@@Wu>]Gá{@ILp$jUD"z%V2Qr!Tob"hs;EP5:kk2-m3[3N]~㍲gS~or;N`$}_}yO:@ET";\@*nCaP\訉>.$HDC̳."Lzq eƑmGo[7MKbE#9)c%b|Cτ] 4qrM-u] ] wz'@@}`Ia}q@t/.UE]!"*b$^P0kq5T 3erֵVkI⃠\U&n,Ue:kFƙr;tf^@Y e{;[%U&b{B]ũ\fɲPeoEJH$\BMJ;tqOQVIV kA5M;* Tf *?yg鈙I4rw˩|sTs>T]Vk^7o\#*Mg0_Pnu|ks@GCi",L r@7nϟ v }$<7*sIC03/՘d Z[?욧3憍A}t;jxh( @`x{P :FCkab|I˲禗+MLq$Dqlo֮$D6EɬPؤ&Ltۜ?l5xaChj+z0"VyrM/ !w)\Jy\D!]6|Ȉ1櫔&z G4JP,s֞b*Ҥ130Ni8HJsP~"B#zlN9ե]ӡPPe$\cBPfI[ kRO<4}T=q:=kȝ2^٩J"fcM([SzŨ0MsSHvuHJiM!  xK áhpA2-D"FKش?ehU/˦)wN#s)"i0Bx)H86l` FuBF象V"*i6;C< VU沉򅋞NxVc9|;fe 9 *~O=)e;8FimWqu'e'"٫>1ņq˔Nazxҫ~k^_M`7h6L I4< ;\"ӳ/3 # #ó@pmt; uvM֒$[sZ~R aYs|`  6_Pagx*@"fW0K^hsҐu+?X剏U|瑻j";+A7˒C1c%Q55H*"*Il(f^l8{6-mt}Aj-?HC1OSL;-_U=gnvj1DyfxTcu[\5p t #354`EYC;Ij޳_Dh34Mg0>⺷l˜3P?]m4-F#5 [eg NQ\;#[ -0%xg}_J}{ٵz?y{d}IK阛hݐ #.#_Aɋ&$PþEA# pgOQS?[@l ,h Èm |/P!_c`4Yg=Du4f5%EcS^‚3L 3I!)m~i<ڔf;'p^ÐaDԠȂlj,b.-AC9fRȴ,o1)Xia.DDrh) 6g/^2uO8 %@(Ԑ0"t3h+  Lɕ!HW~bx!ND4"U&|ѥX4N 8/!Ū GA܁js*xL9=~ؾ1*+zVlOj?Ӆ 8V+F2A2F@@b Ew,2 ᰸H#EQXF#rLF#$j.à9=MTcO(T:%Q$ѢM*Ns:p"C4& Ìs so@ "' +.D dC5Up6 )" lzM95BtZ&M3McT|vS~fDȌ<}DP;9r)&ܜ6} qܾ\UOC03c.gOu>hU{z/çhKy7n 3${BmsD";Dӵ/[Xŏ<[ъhFiB10o6n7,:w5/#8RCi%Ho8֧tS 914^(03DK,4QM3F1$:N;fS^A,=6(f4'rH#PFL-Q"Ui7G4]{orz_uUL,Gm*6fUC4W*HK&RS%lU43,7 0㺺9/i6vھչ6sʹVY5QTpŤ3Yd#Qw2[=r{BpGLڛTɶd[4L}}"RJTL#9f1y<z}LϥQx^?{kt;qoegbbrwt%bޫ[7܃`+k:+E>5։[$OR=sR~TL kKQPVUz$)pN&Tz!bY/P?P L&q).$g0G9NmC' ]}!QG@w?݀_{ $ y?7e@7/ͩnTh[5 Qb ̈"W4B_GPrMf(KAjsTYcXS5D }'7\g2%afޜ7Zh*xLStz>/|34~^Av>jjD37&'4iʁ#͚Lk<4/ P$Н2ý./]>s29;CpzA"*1xoDɌTES?4;ɓOT<$KDKhQ-'1lOk;&03E ըPDQqc7GqI3$PO#d1- !43aI>} I16G-1IcWTդ9P#/BuFa%\t/;@:sK:;sUh/n\MpV+k73p{r"ywǸy~'Yyfqd@(+MHp;4Mnݑ:jHġ;SIy4cD׽]ɟfi^LLyj[ǥ[w_%[ӎ%eZtphn3rCjPw/OJTncR;zXw1D@];ܵi듽 Ŧ(ܑ 53dv4$…s:3L!*W<[x.s;W7\=HQ^0m\Nazmi~Ɵp" #rwwmw=}B}lK Ddkl$]$-:y,m /o;R.נ3wcɘwhT4wq?r4)p"05$HD> +1 P9 Q"%)8Եfj>7,h40cp&Ce4M @Y. LlEM;C=(;FӍ1MnvC0TR ?U-Q8Po뫔oQy3c A5ȕ t]We42KjkzK^`XGLj9I2ugJ C  x0gkݏn!2V NiӸ tE]Cӷ9VU-P k/[mV4VnjF>7k磯V>{I)Uݰ#azf`Lԧh{6ax@@L: `!~)  @<@UzFD#@M ^$fL Sr];TutfL(vG ѫU?>偏KBAE\Uadܫ5=OG0e{x!ƀfyx.^AvSc)30131AXLdtNGH5Pn.}!'_qd;$v:>Rg3bz,B^3]xD94vڙ2ZoM8 \h)zu8 Bd6g_rsЇGd5!G&1|p!v/tk#3w%Go޲( byiJKD "B\2 A0X,& B(Br)!`ѩ WCi-gYcWfb,xfo3y3>&]_G7|~_?WfUdLi*,80#7jݷ\[ŽB$3P43-D:iJ9tlB|fLDž[c H7m@D1#=cBrDExfB0'34R͓T5.htfDžS"^MJ/%҆rmCȔB9#LM&ʩtw-@&qSwiZUI!)kDՈ)SԵEWPPUmS CTR"s- Ӳfuo5&eV-eܯ$m3SfRЬuwoizQVif%dȓOfc7$ 3Sմ&v"w>k#&fy7 7U.]]c[YE&9dL7DK i=Е !H=A]/I!X{OSƠ3ynAEx֙r}BWEr^H%YW xVg[ڞ_\|ѽ;MS[O}^ku)h(E{3԰"x ϠWxU&Q}-;8srgmjKt&k epI#c+)n*&6ae2~ӡ6(oEs v[( QQ>ǘ#qq>DA x"5~@!;sȌ*j-qlFj5=;iz].r*&DMiL}RC#̩S~x%LDx*ȫ{)+J>6)0:T؟ GMHNfCHq" ҔvO؉jqJyͪ|+Rf\ Rü }PYx T4k ӇsMջ.Qng|vTL(@@Ȃ  w!0h4,#ͶDHVooR;$ U6ÐB D%"D"U $VB,J0[EE:S4%QSϙP?õWm!Fgh9Vn)@;(E1oVeqY]fwtDՈffDڳOceoYtg5hӳ?=g]WS5W!Yn'_zy]Z ƙ%ڽ"|xnoUmMp\y%W"n}޿G^\~Qkp. PMm'#$9(LnU;zIʦB,aSxj-ݷ? ˆpH9 lVT2&`PDӤXj99JP6%|r{Ef` ]:޲jMQַ(\x<\D&EQ0ſ҅ȋH-г LfGHL7ixǎ~$) qC 8Xo a6oDK|ҺVeHdԖFkO>{f[r5T.ݺ 7D~m/+2ǎlud@jbk,/ht*Fb=u(D;&5h*aS7}6A73t0{?3?Nh5] A!L& x#Ddb9ár(f'$܆#+"RIg5%q#Pf3I$7Ijd@ѤS2"6M*պs *Ȓy3)ֹw>GT.u|P1 ~ މNf5w0B psYmt򗦦j-IIUUC-Rw/< [\"\C_zw79Mvv5Y|x-VQGCw/?xŎ 33*k*P/hBǛΙ" "^#o"NB0P G76N"1,:*H&+g0z1{J+q+(Hă*Pl)T,22N) )m3$!?F,pbJ3Hx\ϱ-nQ)]KT%ESr+74|[.5f2]S# DJ'>(PĮYCCr_זcAd[vHQ OhGſt1fPhF\{5N:e9_s {bDego2ߓ~z[O>/c1;l͸wk)HtNb,nD"^U*ETniɈlZ2x6S=Z7TC7tU;n`']|ŏݧkIkzEu@D ^+rٷnVؗpEL)a/]aq?ͦwqS~8߉&gaߙ WpֈϰxʉdM7yٴyyq97V4:9@) W̒6zg Ŵ^Y}WU]8*aΚDH*ƾQSF2{gK֓93e իJJ~a@%( ~,M)|)V\'|&i},`= *àQT &0w>6@# #ϵZa 8C ۱aȕ%%)H! Cr%䆎IƇH߫5R+&eƬ.$M)D'[USɳ2")SAs$?|`Yn@@b'xEAXd,# APxL")#xj;#脒'`7ȦDm5鼪qbq E9"ITg:NvjU!`fDWD\fKVGS$שsդs2QQnoYy2%WjUY6:h4Y5ǦX7Բhr U;7Z-.;'-fnr'݄s9:uVfD@ L)SN|9\qj|L7(:DDȗ*LPl~ 䏴F*0Dm,$lK.CZEk&)<N3j*"ڷ{E\ԯ Q%.M|MJ)- ?+H3C!E!1s"5 <4sl7<BA$4w6J;(*\C=P%EQeFє*tN IsKH3*7tSW"1<=υiczՄSaؖ,/5BӢּU^ͽrBV-FkBҢ""+$,UQ.EKS1;Os,' iO^rO24|Ĩ8NBm-;*^-walV[`w y₭dߎuiHuڡqeh OU@%^MI )cY5sgp-*gM; .f͵ҷ@7H :/N{Mfudw GVL~ l8*[zdzhoS75qd42vcMi}סqPBd9_C3XO*N c|4fӴȵpT!~1_mnԇ˃XU"̤>F1Y/U8zPmI*0w /0ށ[| Ġ^{knZf(?wtt0ţD}aWlÒ- ;Ѽ8G!$?hU.IeZ]qp6Y296X nU*Hi B$o%eF!Oqk#cMVDG[Qu:YbġXݮFaO<9 a80h(dj}oWhsJk纯L<ƒII "!Ш,Fax6#Xz"d) )$Y).L'S^{(4[Eʦtj\hE3La2| ̈;ҭ4oP%)3/HۤR{7Gj|\,%3[A ]-+_pJkhfO)+d25U!U7Z-!tqcqOL4ntC̉# ) ˥)T2KSp8 0QyjWo Z֒kt߶uTعYV*ˆd-b_-F=uz_(Ec9;cg~U^TwU9 9-G$$ՁWhNO#s&ƢbK,Y(͇-]򈿐%nisªIy޻!XH8l[-Jg$B, 2嗆y霎`x`5{ f«;s*q[T4E}gN$9ƕm{C]+[3q-HrRɷ,Cәcg[bTW]MI!VF١Y .p|zkAX-cxU ERD;`ma5kA r]Spl7$xݒ+,XTh+~dk`R!"c$dv]+|/rm ũ-=ذN M2>Ҵ3] 'ϡlOK^j6$Ɣ!,k]7_ ytNb Ew8D# D`d&b429"a1 OKd)tY0AbR9*a?JӸĚW1ϥ]*IhTJe>QTE6_F*"U*kbEb gnfљr9Q*+5ثleR4Ω@j=Ҫ;&Y:j%WO*e7Rpig;}6s]}euJ_=?[j#6߈nv}zNG+pb"D!TUk>ҴL|ApllR 0K À3<;װ-kp겑c4)tF rmDLq >OS rDI0TIJv;+ʮ ;$AU*g1ư!!I1%6M3'N%d>h$D7{3A0˿DC"{?ԲNS@CP3 B&-uKAұ%⨈:ӘHBQQrS`-)cJvm,>v\^*sd"" 3(z/Q2W;bZVMFM4sOBץзm,K43 ݴMFw2b C\޷2U-BJϑF.(U9^TyXѩKa5M0|"+Ko3p78T6M|3P&r9nEdKqmOBu l:M쑯fj:l=?NN՛ݽAS ;ZL *XfEn%eQU6T.+@kc9|g_N"\m:;EֻUԲ|w,35Z:Ĕ\nQ#6~z~WXz 5l1LGiW}VCaaTR̍bZC#H/ L &LC+ʚ K4T-yUw&z,"2e5铢Pt=<54gODÑ ޔP#xz<gjπn26~^>Ef:BHj H`#=)*2$ojM:Q,!Cf-C5>f LaB_# yB} b^,Jרz!.ƨܗ0!&ԜEE 7hcjyhȯtSi B}1|dy5 ʢ  p"w0hl#Ca1|:-G2(BGIcRI FUKr _DiD}>Je39kDN"I*(SyCLɖkM*$Dck6,Nf;t]鷩mc0o4 ^#xg]TZ7JI`td杜M&ꭥWnpts54 8N_GXQwjc ͡z#~fw NhU[؜XKv׫ *l$&fD ix4 >?>$J 22J1dW=1ֶ#lUA,PGG!2K@p4BF01 (P72[{0v@LȈK(h"10,NaEDC2.c1116KA&"d@tQTL$!39tDUhk+,L5cXT%W][W5[V IWEHPDxoEo3>2" #) U1&JLNJKQwZf0}+@x`;ᤱTF>S]Ȍ4ҩ*0TʿBPMoQ]̸l͐aգqRNQͪtB㹼bT$Ś.#${MgivOaU5bOy+^:Zڊ8| 6!fTDKj7 mj/ 4Y6fifjP:ib.ŏIYyTZκԈϷ|TELģS *g9ᒅl,IH̸,n6UUHavJmqk;b*$* n$5Vמ\mr%qŤs2[?BS,V{ӓZ)7DΒ$)o<'ĭ 0DgY5l<<+ |nmb*ҹWlNDX_wx9e 6V3ygeHfz~5vŀN@q`gg6i_-ޝ^npRBpHb0rJ4`   wB0xDBatB% b-x)hfA$ɥlK)rTYsIt^yAT u?P9"OThtzlD;z%VTDB"fMDd;1BWmߦ3Kŋ KP(~1xw3" rfDOg]7ygZ%VatJ6v6m*bT-]'[x\>'A9^=W ⭑V^^k=j-TgugphV+?l+40 A\B6͠+ϬPC듚³JҴ;3QS=D[Ll1īzDRM#> ;LHMH##<%Iw/'Rd1?"Hg!4}0Jo&R<+e դT5D&UFPZ4!J8 gσ\e}tZJdBԶEK *Saz64<[ID&ytwc1h{ƑAt& K^MnY㠭} cV^[ITD(ʔPNƕ.gyY`1F8FX^| uJ3=v T$@oPd«u&'8UzJSasSd9WZ^FDe{~/\wDO(dl!a8,icqy;%Fv *l & /67^&*(b'xD;T x. BbjCbnA DyTV?(PYT[)$QFK;hyiAQJT=Su*u2OʥQUDWk"!+V\(w(Y=8M KyWl!,sYw=ITMruQV; Z]w$^7b G"Ͳgg 3.w >Aveww'1"@h2/5Qu~lsF53 ñ<'az17!VAe,gEt3زy4$7K54U(җxn:{ F ; rm:f @T6 Q";C1-Sbl$3ijԢ.,Cփ*BmTU!14;;kne9֐"D-=ޢw, /yc2 ܛ@ F ә ]V!Α,pVc|t6~;F?{rMR뺂)S:cWG=/?* ¨UYbƛlzR!517(>NyY3rbx! لN(Z x߽'4 D-f `Ef; i4Ǝ#9lͬu1h""XQɢ@+T`GU)k$GDpD}EVM7[uYaCSPCfᘱX ^4eMW6cEoV:ȸc c3*d. Gv=JXqRFdK1)u&rW{aDY%S!7o&(#]Ĉ]P2$K#2'.L}'. z}}Y7ٓ/Db'xoA0w|*wb18V)F@B3crrCH11*Le)4#yk9Ȧ"H6gV9UBޢUl.gPB-Leof-jSԮ+Y^T<%O~[iwU]Uc-aow=Ol<&\W v; :PΡNZyKj}/ta$U33r}z9tVz.]f{6%Z IJ-,޷O{*P#p@@Uݶi> #~ ˏ5<Fl XED8+pZr5Zmifs"MJQӱ|-~*{fn|s 79imkV3C-_s~wiw:ۖ+ Lov%XF3 %\qk5KR@~̞[PEd, 0G  v?GpP#*\'$4966\<;v"AA D "L^$t̉h..EؼnB{8͠?6Ec$]K"2PC_/Q7ǐcySO93(H ٝ4",WI2ؙL>II KzQN,ԃ=QrR3]QXJm"Bm LDKF 䜹EoFWSr&,˝\7'.ȳH=;%xxu^+$<\ ϸAD"'*lֽOTEqlX38cc"Â7E[2 VL&C`Ƒ@c9%'Q~T`Ll躓cFУ, B0rBٕc;Sy74S]C#48 @\w#E ${nh+Ҕ=(ZREcL>e; 3t䒧TkU4qYCK5,wRb6ovO3}bME,?WEzXwXa(x>@P"~} fѲ|GPxrx(Ģ(EAHp@ #"A=@( =@/WCm~P̮vD;ɥZwǦ49TD3DŽDL>.1Ys=13Ke@I2yԒg;r=^U xf3=4J>^ۗtz]:&Iː5<9x3" q"G͓u:\/;:m5ZO8MC9; ?lAmSA$- 5 NWB>J,JcX5OLWEEZ'1'""fDB fۑ<Ðܥ(N,3û-/yނ#037dڤ#\MsSΓњ#M%،pft9\ᘈ"INܳU]i3b[wzOtE9C ^>_yLв#qVu-ʸ:|P댁*g)A XϱKEd¸hN6Е';CᫀB?@* - ((u =@K?CCLwHx T`D S!tIDS\AH#i7iVbKR >M'c|R"و(9Ιe)qJke#uA/R@8șS&fL !SKi#_+|t>(YÛGxBD7)%#:gq.SBwRq&EP0PI6\E@PI*4uO"'ؤ.Գz>l$H->}}CBWBdo9bQG䧯g ;xA8hk=??  w  B@z `6G xdB JarHI.Ie4k+%ӉB !:$/'Ihh} [ACq^T-vWD Bʵf*VvSRM$XfNmNz 03:hN׺WfpW%Itմ>ZYuu//{[)ŖNs>k[.jvkh5l:igS^t;]4MknNFnV6[r#Fv}V“DL ] kcwv(cFoEj!HD*v~/s+y,$S B<9X6H7hTc3yieQS>**Dֻk-*t_z5T h?C6 @H I~p, ~P,@.oe86 ¨U%ŠG # E7SB=GY N Z8(TY:ouu&~J㬀" pq`Sn/hΪ"~\ P,&*x(E^Hþ;):ðdK3+p Ulri4Mp42PKEmĔ1T>O\*o.0:0-/T4A1%u(C52PqV[Id'scsEU"= BI/jeE1kj?Z*H8kj%qIMӬ=E)6iM)R# &Hn8lUh])>1*20iDIm 7 גKWC\X341cD:& hy J : @6 q]go 0@.5ԒB;Fa"Y]d=paNҴxeZ[s͝T\3 fAY6,d΁1~gf]§xfjb#WtPК [Pcwl$U#U>]å=9NQntq*035W\zvc|^FErU AZ!kM?1~KM$A2{˯v?jxGjQy̌=fR4PI Ba@, C \H#w!(tN7㱨r#$GщސG(d3F%2)[$ʡOA ߴ@s0 DA `(Dm4M=@0N2 TCm P2f׋mO"Fn{ 1Z F3EmXNSu![;^;k{Z_+k"d7;}lx}/pӝs{D |*y֖I9Γތ|?z}W 3JbVdW&I $#L{s@BAxD$C#;k91;-;DBMBAMLA0|;D9.C@+\wI7^ afL-pͷ*2#)35M2ʐ"O4o(0ҌI<j-("PIbX&Qt'# M#P0#sPlR۳UU1]ER8V413VHP¶C3ȭ-P%}I{c<{]eDml"ygܥ0Jh\Y]g)|g,  Wa6\K\+J L]\OfL3K92U%Vu:g{jd^P$dljԑid(؜ vmt=}/Ed,#赺US7V/;6g'mѬ/dN{;v'0Սg82eprk^]"Y(wA"|{]n]2R}r -պkkTE̫2[4wfhF(_)$ZWm24hE2HDQw |bY?8`TU:0fֱrlNR7HG_"zM]A\2S<8f0PKzAIUtj1U)6 p ƨteDI5,XNږR7CX1/ TDA?@4!/' ^<~!Y5dR 싒zob$ԺXd8 xwaHe̢*߬0*v2gqBIH \ņQBGa@>UNęAI64ϖTfT?GdG MCa0i!4ΚaEJ2ȃ0`L!PhL1aQ8|J-!H7d҉$Qe2X5& dfWHӵ0?Kep(0( oN!fK2M2 6oDn}঱-eLvw9OeRC._iܪwY<5mVU-$v݌ryVkyx;/2E;r!Opj`U[6m@0r@#sLALfYU SCo{7 18 *U0 1 \cGNS}!l2%!t:@U‹B4Һ~IJ#A01t}P$ȧPVD$A4<S;L{OD%$u BD1#A"J-ˍ #=P0U3+@LTGOr+3[JQN/M$ E;/u}?Pµu5|a4CT]vSΗ[<)wgxT *`@ Ud68 y@ ҄)`]BV FU%ZklR"2 @4ES=O<Q[sW0Z o e:,EDsZ9Ci5W.Wp9.UC,Kl=>UHemjms>ܝ+Y4fVlpoϑPIDv#f:P:%< Qo:Gqۋ^7zwmκ3 ƣ6Gp#=f}đieEǗ;<MX')ʢx'cu6򇶷NiZd >oi{Aq_˕kV\o+D"CY-p'SA!ܫl&(;`YӁTI' T Hz шoK)"m2j$ U3~Cjy "1|CFH'q0WNGT؜D !7yݘ%6S0`{Io%Y`]H9nj3|uL ;F Cp0ЈDNE"Ȍ^AF!jS$-k2dYT[=H1 ~?ph04@Ǡoo:.󋃞 <^0{> <&)ZU;PD^* \m `Qof#Q;=Y81ҝf-kvXumf"pQ;xOq}tet:J]G Be^fh<_uWuc ,.f3dx8cIBM+ 40'07 вnTL3/M>o>.^ΔjGlFAV"H=5IԢA ?{Oj,o3#I5T[ ё4L,f¸&63QTє3mD䲡Sd}W1mM"rc ølO*)XZi)h;LWU9}FjW[# \';M|GJ PH "Ibz|trgPsT>z3j t#Yy‰&qjTRhkFJk^^sۚœrLIG)k%ko!F1/*Q][_dz]/Եfܯ;;N[m}UAj6v:me7NK#0ԗ=r\3Т3DܳfoYy &KxMhHhg3/M g^ː3ʬDKGDl-ˈ wbrJ-='<ɛiHP^k0|&2 1lr"@%Y:kύТ5[dӨQN Ahp8"~F>!=~3(c|kP/L"  LhU"7uv"c0fp%$f%C#OzKhNyJKvYX*uҚ^,sRӻ(3 -BG)8H>3"M%i.ORIWM6&vqNY8Ua˖ =P Q=fJsZMUOLt9Ӆu+uB HQ2^8D)u/<6PDQI2EAt::u!E&|[˕h"j!F0F[{(=8r"#Ҟ#:-NjC!.@@"'xDw!PH# D(tUELV'Ƣ9\N Apٌ_'J#P\>}6O1\#рsA@}* 0 }7^ UEDϤcexfKȖ6@Ȓvz@fsYy)4% Kju[G&gj^/g}5hxWgG?j\]/t(sSgJP6>nHl;{Sc8g3ݰ6Lԫ~>/;|^A#L9n+C#A# ))Z3ÉC 90Ueᚘic.FrZҽ v [M9B*qqy R"#)G1ÍtB$ LRd?8~S̡=O206hyfl\,ά|=T)’+JK?M4P۬,I?B6փtt)PzmYP3f(ZlGQ,u|&SHlW e: +S4\M±5\ ӓXu0/ZY4K@W{!K!`E`  K܍tq=QD04^d"eA1JI2&J6ڢt ʢ "AxFނp4&) EXt29C!0NG 14n'BnC fp_(dZg7Lgԩ0ghY"a%vN3"Exfij4V8D*֦!mӸ;װX%? l(|e/mWLMicP=e533 "זLoeZRT ;4 [&O"ԮL5w[jXeo{|ܓWv%2갈5n)MtwW%3 cuu=H B+mw7]Vkf}y(ӝg+Iy? еI-H9}$iꚭKK4AM\kʟ-Q\! *W|bVњ9:Jb+fÄWK}Iә4ַ7-sUlZMY*DDK1|lX(VhݥBj:N7w76+ sќޝvؐ#9Z½~7xo#n]:YjUGޛWן6~ӐrB;R~nhWy J][i͉|w2@Yi侞,C)PD!J=03ZdO~ vEUD3!}Z|Let+Zq Ƀ!)taBG gd4aQ,ژyU|DG#̀PLmG1PtFQBTD6 ]U," kl3;9 ԡF-IIH/6 XB{DjY LD$ @1s.rBN" FJ& `];TeZ4<^S1/'w7ڪkAON*l+ѓ b Ew`x(BQ\"%[hlR' `FG!e2 '39o*DDD3ziVFiq)lfDęBo\nR5NkvMT}_>džZٰ1G^3a:UdYsY;_Z$u3ukL [dt֋OLxNS Iku>G_DLlUϭv{]wsׯ^5^G1}]{3+Kg^:JVï6;8<;*./ B0%PV?$<a AD$A"Ћ) S;ùyKE:DHH?&(Ҋ)NBܺ so"kD&\¢cŋ 9Sj=6Q+IdҎO12;OP uFEl Ԭ 53 In41SB5UoPˋ|!(%VL  FS]id9 7!ZtN˔ ز͜+l\̇2,/*ڲuyXm5EWYi.\u/ UL,q쩿SմҴX!yzV@55VW!L,{ҚH}}D'ydAܭbYQn.y2q=q.$(6hьCA0(D ?U"I_@&>F[d~" gSYč]5 ӪjN3--PʲB!B !F DyLT&+Zsp .cAc,.܁._'$d!a0@U"â0,M HZCDe$+Ne4/*LfH|*ШSٕ6<ɨ5VVi!k6+I f3o7:%NTݮҫhPpX& ɯ}??˦`^PJĹ/kӨ@k^.L3 >;)LM :#wY[=RrFl+g sqú;섋")"*;"=*ܫ*>|JC51Ls>߀Dk',!7KĶİs9N.;rҿ)> fiz+.j`δ= 4*$>)<{2q3ԫeL&cX/CsQ B3MQR*5  =e O\.)`Nm *K;YœZO=H;0LVMhu|G=YlT7{ "3W9R =% v0Si5O4_5X%U_&;]'(33,[%Y^=akKdy*\K;.Ndfyle8tebWB[UdI3/1xPZƙQ/ H39U<= i_[ZZB9eў0m,yASr}맪]ThR""CkCPv;Q|~[i>lٷ35;=O YrW&^o>TRv5+wD3xM2q ̷؞u>L7瀽۰(卅_p:L!=Pzd S7O])7x r "I[,?HcSS '׵WKX\.Mq!4<mDI5LH9bB99gksfʩWyrSKLzxQ鹎:5ίh2M:C2>}nm1bj[tɍԙʻd6ԾG77'խJۼf ^13f?z=q7URNU|#w^wf[DuYXj+|y/;[ȌӻW*?m8T⣹p .@*|2\2ǧNڟgc@\o^ Ve͡U q"FUkUhU8h<^U HoBTzaТkd4Aþ!{-`8#%6έx:ԺW@)xyP>g@ق!Pn.3= _NPv 8RrgLD"Q%%GtAQD 2DiZ`|6^E #'i[~#%/QqR>evaLrNAEuw0X -ڼxm\Dm՝I- E"5qM.ɑh.DczmH?q\+7Ft/s&&9!J&L6@@ʢ #A@2¡|.-C,f!aQlF'EdY ])@. .E+E:3AQ#HLGEK$S?7)qP63 {yxf[LZU%"!DoYl:~Mm`p8Bp66AcY;'ߢx^.2!4M`8Jexb۩^Jd=]x3׺&ovm:Us.M4|6WNm< .k__ \"; pBn*#p|<@p(4M,NZjϗۿ<1 p׷-z;*n*M6L$:3C24JhC 3v/&jk 4 |K 3J7M+Iȵb>\H fCrv@O(7쨇.7j32˦lܖqӣTՉSoV"U#Xϋ _\EC=VuIHIBOV|K4V>-@ՈAZνKVDkQu&g&_ciTR4 bfAԐRl]='P=1 JĜmӞa8cmGJUXN}=MD,MCS':E@֎+ICj^Aw:-d&i,͙&S9mYoUuu:%βˎ?q3X]z "^Z#g)"U-c߽D%ȩ31R3_p]6Gxo WT 0{^ѲVI%:O-U7Yq2؈f%{;ݏsJӊy*^t^_`#,"eyަ4OC(p3تwnA=!7PPB] xGƆe+ !9P |bA"DXv"Cu!xoQN F\iqn.E%䉅Dv2FXtb#"LV*fQ&P. V$Y)tTL֓RU ,I u{# ȃ0Ew@\ Aapx,R!Ģ0^ǣQh>' e0z3#a&m&NeST:G(g+:&ө5a KH0DDJy4U' fU]Ao\nW;w^oW;-hjbqXf5U+dq,쉹p|zBoB %ȱꖊŰʙ>Ev' *V^l*Xf+ ŽA+#%&1PLQLJEo2S$,sKQ>u%RJ4$UuDSV=u\וmUW݂eY4DVw @Ӗ=LZuFB&q۶uiՍ*Ȧm@дB0)ϽMQR!-n#4N[Q3ݽjfCm|I@c 8g#J ]otZ^OgNⷽWx:;fP۪jLCټGv{zWa]>MhPݥ{_PQY4EJgdhfW4M~:vT]kLhUNa= "`jou? $sP՘bH?ZPtG5CF]h{4 ڡn횬5h%L <tL UG\_s(}MEH4 $0bqs{zUD.r*pދmeQ*5 Fo/H2H*hiDlQ$-PHʣ0w@<& DaШ," EX2 (%2TFO!LfJQ3 y5b9i'`yM#,w;iw8DkЮUvQ׹ |Ұ8:&[E\eT[yf;l6]s3Wa׬Ib-ފw[afDM/t ]i f9g/L[<^{DN%u0^>/}X?gM"Nͳ$ټs+|/%Pr5 {Lޡ퉼" 8|"p/4;G E3=:ZDDtU IlWHQRBb<^Iϥ[r6}» urv)Skj!9!5`Ynȭ\Xm`_vBD[.ʦe7uӝ5kwrV},ۛi*ιD%>S=e BT#zCFjf]PI-o"<۞xb:\u1aTyoo?3iBR߄8hL!no@\InAxBFh띓m!-΂.DȞ|⃢qE/躁c4i)'?_')94D$*\ 74={Бs Z60JBӴj PD >ĦKC,)zf㸲7њij4+EH  ɏԼF7<"Ȋ8:s/.@Irt%1Ƴb1(lӉ*ӫ (:MJhbk014EVҭˬlE-&oLFO-rUY};%3,=fRVhYSl5Y]iDFpM+{voXBkwxBt:JW"E2|ra_m̮T99lxOfuU3(zsL7k=G=u3Zف4-yԐ!(6t@!Fȷ?EaiOl [#$ 60B7pbC/ Z%2 9oQ2N€ة[5J =F,3jwfddEkM%!Z#lK@Jpһ+2U+J[ ȓL59 ĵ,ӫ1hD "(JfϭRɢFı"IѳK2NҐq9L JSA#o5(45'U=+s1+de',UB2O+^G27Z8I ";pVZ,Dpjؐ$/a\,GQw]M^7e#)E*!R`x. I}wEc*w6a%ƿ42ҶDPD1^Ez6eԙ5MeRm3tbٖ^:kw5_%h\%4U.j%k>dGl= @kۈ&n:؎);{ɲ2_R|i*OuT86͵͘_qNmyHsYgAsq=ɕ7ur9֙R Ȼ&KV$a{+~*I=_FRc/tJ;,Ǝ)w˷x9O`)FĞeJY9Ԣ(_Ji.QD$ 0E-b06d!m-mեFaUGՠUj.}62Wf o'ռ4{$䨮a-崹xHqnLV^A/]Dd a.}ǂ5i|NQ6|Q`5ҹv!*7G[$xI "#'M1֮/#j)Jأ i{oi>KH\ ;*YPaxw|PIbKh έ?1|r1V6 *RTi- ʗ&[ bAH.&eR-eLWJv+e$چ.Ȃ'x !0`* bQ8NbDvƠ(t~C14jJR8tnK*ȥ}L!qJ:H(56]&B#2!T"3Ulr3̤AͼoWW o' )]o7vbp9F W+xD ~;o=_oxkHЪ4^)Xv8XU3&jFI\s\.3sviwrh7_ &%D ;(pk3C1-C7rd"oo.MUCٚٵ)bװT;\\3m賌w4Dn λ#m[!M4"RC9%k|qh(;BcO324_%Bs8Ҷ3j21ށ8'm2# ࠽ TBLBj^/HU)$bx(}'Ұ 1ZK $ [Lճi/U(純IJDJ}9>tW2Rֱ`c0ʂ+S?Ԃ*!V^o4Z@' ;dEOKH*r1#HawùN\F`=\jޓ.RTVMCed(-w;u>;#T=A.={,o]TMќ4Vugw.9y*jY>LJ#ȵWeY{<8U7E!af@{׃X.`U^3"n >z^]LnZ#rQ6Sl.pwE^TJ|]j9^Eq2=M>o)3FzV'+cKI"D gWx_oZFW?UaY/uu)tZ+gd=}}+ZVٔ2h;n&Z@ ŎZKi͜M ႲP/=/z!JsEL1btI 2 6NRc@yZR`xG;duц07C]h~ᔂPķGct [wS\\sEa&ECJUIg%)[dc%JD$K E(;!(*"*%\L1JWA."lϝ"wb!R);;ћ jn& HdkU 'HHHJqf3Q8$d58-`Ȃ'x B & B3C!q|f/ X/$Jd25*ˣi]#ɧR'F1 +CRhIBUD"iV74}8"3 "$e5HUwhQlc}ߣmwzbpG{y&&+ ݧ;og/X Ki4<^]fW;Ef^ZTm~ }'|N_)E: fN y[<[GzHL1UL̮ Q So$VURhlœKDz}]X65 Y"2WBըf*{\(L5Ap-??B_CXh@X%$NUeapCk-#W-]I!*pzw%9L_)^W^YZSh{ 2P 򖆉M^iHjtVʹ-`U~lB%.EmvnϷ);H;CT d {.pbU$Eo?dzr|)J̎a{sw3dK";VaP&8mn W]{" B"Hw=I5cU/=Imm5Iyئe Gw%ZZÛ5vm2/pс"sRuQ,9He" ۫e)6x-hub7+ mU۽Nz0->ҒNlt"#+!̐?BY,=Q7Ce3 i\*סw E¼֚ʼ&S3үN8,60= u5n=%`c=AG%#F}/>MPvIP+-C(d-3k$6V ^DUU[uP$N مBYSdPPPc6S;\jJU2sЛ2bdɩ&4%L{kitI Ce|:*i"'xD"w@<. pؔ@#a")A7xA㱙B[KRaH`Y5)3x̮U@Pg'@)tyDff*J^$HTD^7lo4: B]dL^(J/L 냻p>6Ldb!m޳8~s gZ&+?ѵ4Ů#uYfoZYs561&+Hqq>739XF*ye&<7z1_'Yokҝ "QtFݺ.S9$7ZpA*rףp37f튣'FQ5QbR ,eƑ.6©{z;!@VED_#ВItɒU4 쎿KD!̒,31JI<*#!H+$$z  /k}A!P@t$mBrjT+-$ *1dSM./Q;ϨK*r.T|ZE2Es7F$W"JZeYY ZRT:|2D^;mٛ#T@*w:5Y[6ESyk]\Tu]3XBzq.*b4N+xOPO~6I2;.tR򫁗8XLљ4L 7/R~smgy˫SU+l ɤiu:;)Zf>Nz汪$Y4DG&i>yf_8廆߶7S|6[Q\zf2N9yc6=bgn |w*u1mx XrD ~]n3}o]9|s1 ô״c#rT&MmoM߽w |L,i7~f X~&u ӐlaF?/yˆ:c\۔'*װ m&Iڳ^< rx ?dY !G JIL* CuЫNg }*)Ty-F⹣L)XW9@̵.XWEFlcl*"@gfL1DcIsVm>$4P.6#ѽtM ȥ%cʓ2aי&vRpZ=HIY RWHjܹn0cyB 3Ggm*sMf.8h`Dm81\vdɐ5JJq&Uef HU6h7dfb[$U? ̝>7JF3 dò99rgD@>`'P`4fRi#ELvbV~R JOVE wx AP"ExF#GDZ3rlE-K$i29v=x@pX,p80 jڀ`(LxK1~scaA!o3Ui HnᘊU[M "ݣYa޲XxaX̼;;$f9=҄pm!q2}G+8ڈpx\-'tYGUtQ)ӿrsǓǠYٖ{9~U]B1@oKAp4 &pD B)' $; yxo5m۸IC/őDW9qL[FRՊ Fixfkm!# #1Dɒk޲q*q􀚵20H3I3Dq|i7,( p.l:4S= 4͔Lk( rL>1c" & [@!P2A* BbPD V(ĒԌk\6";DӠ$D5[ /䋼șOcZo>hΔߢ  q*.~P|Bq` X2kܐ fUʔBǁNUWnDLUj^s23 @#D@pl!dI; Q >B|ȮqbvA\&x*Vq9+#I<7 Fɱ,A)Fa3 1R~K9DM/[?7>Se A"K"xI'8-l/2$ p*-?Piwa-4NZkR,0]5P'L[Vm-k]V}`m UI]!1S;xuIrZiUACE4lEFD* 9xI``ayx|%|,gWv{\"(V^qو"*XW QI,|j'U$Y{mU"\lJ6%TU-.wj"9泬\tId;_+K3h[N]dZ {F5"00LP3I/ 'g qk?w:=PiGm].;iOZpo& y r- 1(3¥Ri#]eLi7&3G  4¢C pnvkEz@4zm6N3xD3 ky4U#RXRfuvGp:~Eq8LVG1xtq.FEf 5ylg$pe{;.{9ke C'p7.lf-5Zy:8/G)s[wv$ǩ0}"3ҭWL_nm@Lw9wۿ R0CL C{L€oDB#\,s:6i,gΩ5S"/=2 7!H4UJ GVE<.I&bĭlVV!H\* 9=В=[oM(YfYH(DB$# yus&;Kz%Ck ZjN^69zƻg GuLK\[Dn`.&f;lI3,HǼG KDjoBF>L7ؼ;Pr^TnݎZm`d{͠ J)ɾKQ+>[dy{ǔަQzCétD-eNd@VhҘ6O>6 mfgf@AB;!A&VmܿN EYUF^ h ޓ"M)l3]ý`, EBYty-Cx$1N~ 4?PdaQ@(@`;f\|Դ4(;i{i,&PH@laMdGQ{yޫ^/E3%ŠBEg{\ӎrYjZ'qeYf^Yv]]ow"t]ޏ1z7ֆ%1;o"̷ 0p@/|@<AC :ET4<#zD1+;O.EQlQn4UOL9NL}/3P7sp6%3B8QS-Gm`yg` 1՚4sY0LO3J fU.e<. cebsV9eK,gl:Svl=t]Ws=oa:`iv*ӹ:+B~9Au_һDr^io';qm9yF9n\!Aٴ;R9v%`t|tf4^\mkP'f;6qg{f:jYYynOާL枧rm˫sQ?}Óٝk~~!It>Ή;R>2'~)EeBDFֻ9KM4wLK5+"SaϠ"T#UK7Z|,- Gx|LB pߪy Ah?G`Cpf  @ITD;@D[kԳN22y $B5D#i( 3]denNiZFy#9LXBd;* noYșj$٭ 'd۫>1s%z]msq '5,Xg)Ns1̪͸*k]9{Eɫ\ ak4]nW%ȳ8;wl20=66mnRouAFY{ ysL үNލ,ëԗurIs<>+WD"nk[~>?oET<K=P{񳰜,:( : 1Ϋ1 NixE#DN,c;1 kB6lNOKB\8LE)G1i;-FOs"JI#5l3qܲsNL!+,wD8 }=%. RE)lTbtզ±cՋ O%n+6TUTj~5|s'mTwxuPAr|{YiI5Ã>"5~mS TkX>jK&g;un%☪4bjGL}ϕNI4}YT-m{WGե^=2;uĔ_Yv<ǣwu;s*4-#a‘"pe{}{w]7䢣_~y3u #:BM FS r7jQܲVB HF`n:+Ŷ?$P\ x x50{PbLe[ w|5ia ĸEa^˂eI%Z0#JZKE@FdJ&q5¸DbMecT{N&V7>/B AA#X{-~$xRjL;8̤=cc͐R+J+ ?)Kۓg]I׽ mhLDhp,Ș3L"&X`~2Le#t֛R?K6)$D촉876SRGYӕ0G0?ͧRSD2xJhPR3v3Mr#m#ˌ*DI4NjԪJ+u+HRĺrCsCs(PxʋCC0s23rCA 6ܺhP"1F8H7;S:ȽOT'M?RUoU]VH0DA3 hh#,G8t#$ufFgiب}M[-ys` a}G1h `giF3jӽ"^oN%Z]S/x"A)ΐe 2VÂ4wY=fKMB(v.5.Lsj/]?6&kf(nRTA>t:YT3fk)sCfïW;ESl%[uNY7-;{Lnp[B-4&=W^EVX^lr :+ ȓ:=_A}uq3x)S/ڗ7o pE}^-iJ$^[^ekPRdKSb(b}kZ?Xì4Oi2g*tSZ#&eH3j-bl]!ġTBE |OpG s5aʸ„|L`0y :ci8f `brtyEa(ebc{Sg-崶]~),).n$[*愪RjL(Q$aTqh#Ԁpg:Ɲ'RINqNJ J6Ƴh.@G?T L*wI"L"0Q+A(S=Gc9TXt`K]` #C#d7 .L:j"~GX$sVe^2/>F yʢ "@<& a\.&;PȄ>Ǡh;hZS҈4f[!Lh@3@`@ egk \a!g2)]J#5M*R~"€\]2k˄E18|6xY3fyL3-n??lq,nÑ3th/;mTDUל^?W/4v{σ5ޯ?ѓOзfۼvz$oܿ$@  A4#U 0=3:$FD$;4O+C9.@̄28$iK$" +X^DA23#` 90n]!M A/m ¨*y8Ns$>3ݰ#>O4en pL7{1Ԑ%.,I" $jt&k.,LQWWVZ;q4?'>MWs3Is*qYYK!K4<54Uy @>`g B P vP"Bf"9f*s!W ^;?2N%GR/tSbU`QFIesP d'qM [ o^=Ege9l;&k5Xe#dk%n{~ooMBT3/P<.70c޴F.]03/Qy'I}tk5ATBYTuz/])y #<6)71=Qwkq;Pfd1ߙOE5]Q7ox}?l=yL>H$vFBflj~7񆷮TDG3,s+l &$ApB%Ad#"+ B2LI4UDDJ>ME+tbqf5X'kcLZLDUfh9t}i:__v+T>Agz8ѿ'f;v>ڒrU DWO%(̳r ADC*jmk-*)NWA9V EƞC@-1LVrx,7H ed0h`Ng~(X;@QF8=H8 01#lk`0 `-@HaRU("{R9D O4Z$(a%3|o\5ʪ0 J,&DȈPG2(Dl=*0arR./i?S &31*3AeY-e8sBSMY6Տ]qI)%+T2ӁB)%'3sBP H_|#D  BaP ;!|> F"F=bVC$Y$vE+r:,H.crXD@?o3 o V?-fX^7M#De1{]eRxDfl35I"$A2M* m[/|nmk~_=߳z s#` [o*HkUrT;h[&~79i_#-{hf;/34n7}y>Gקk5/wDlz !B@@$ddU KRRҴL+來17R$(.ıN@ำJ.&mdOHMI1iDR`gHn!sQ5ṋDӳHu:U ՐXcB"uY2:1==Y)RRlYQ|a as h\y'$ z 0&zg$[dVHp")bjZ*UuDu4 مmc.MKau$KYZSU(FdfloóQ.3ӏӤkzTjknfFӛcl;t٣/ )d{K[\.KB͔2cJo09S8,cI p D 4f|Bđ,MCl,(BKڰwa$e[pS ̃ #0[IlD!5\Y'`3R HR$/r$Dʑl0L U(#$`i 2.Q jPS|⥰c3DM4 Q =$bw,'|JE1;3)G2d/ =.ѱrh]S$@Ե@v=9 e bo+m4Vk9kIVNkG]XLTERjOR{)E}C4sUVWvnƴΌ" VL%PD Pw`x WM.[Ѽ:Ts'VԤ5y~蕎VcXQj~kZ뚽o˲$t+[ -$yCаXG~xaB 92M$ַl v^5|Լzӹ&=o޳ ;MsTE|r{|ҡtu/=VrER5NԤQk7ifor!S=aMkyjPA=_6| _tig?wwTr~i|@1@^EAмM0frPAhi|'\RSg> "3N] $y M1Śx 6a[xj)L\*iI(^)9Ei5F1'+Lb1E VU?#߫0M dL#䁲f++]UsDLoeI:I:gW\d` "εQo 3*5R>YG%[ud*0VY)Y}x] yupM%2 (s}[͆cJRK30x!.Cb.0CcLV#j;##2rW(â5dYt#Es: o2X,^(I1X܎=GS^7]RgGY"!UlB5]gFEѹT⭀K0Xh/aor"Hѝy{ޯLMj-8]NKXuNE8a54+Eƚ`4Z[7St|3~{*IIʵz'^|0+7>߿?h߸;n0DPBm !nS 4Upd7q"ĭҌ7-¦ٶhFQ`ŮB" ©4DLPHk=1J̍N K I1;+3M/U yQT/* LOC5>RnL UECdR*N{P5rvWrda%NѰZRDil+ ,/ m3EIPWCKQݕ*iNZ \QWV_m;[k}Q4w4M]5gz^w+q_-coY. {_P׮[\9f6pAX^hwSLhXfv^]8F0ٮpfZmf-Me$)ЖUxOf9vUޙ9 U8C<{tJSBqr?Tc+8_(^,GaqWUS=󼼕)PSZMϓ.bXvi/VSP޷m h\_fތ#"T5U"k|(W[ 3AG:O@+%*p)ȿ'`U emV'9!@=!PB! D A<@xK 1P͎" !9Ph|xJU"DXbbA.&D=btQQL EQ2*qn.CP2BWL (4$%!4h,q1LXND= RrMA웻€m92 B Ȃ  ; \ C"P! E[t>$"rL&)+c2x~_-FQhs ITtB10(%-S!o*N"3PJ9gZmVeo\nW;}0""&M|ߥ  J18lF7cm+fsw9ht=IjuT@f3"`vX]/k;ip7+]ytry\g7g׌|Oxcږqڜ?zy]s]w{D+P !?*n?/7JB)̿'Jd$p<,b5-D"3$ƥC2 $Eo,r$P?1<|A"o/$q{,MHB Yy5QG7MG(3 37;O*4%K?OtC),BДCѴ!0&"3OSie;QS%BԵEO;/U Յ^+m QUGW4;ŁIS{bWtE!2_YU=ShVGjնPZun[5]XleMuQEuw6Muޗmi\VYߖ` ~B+eyYX{bV.)z#^kr`7Y.CE[ +3 + <[. TG Jt3憡4y-ӓݹ< |[#:#Ë5#o³^hސD}q!&zE]󂖟;ed"#DI40 "K&.̌7sK}7At_St?Tܼ F$] ww~[yg_{>mvwc{/D'y?z>C~y?/| `#܁0 _3W%DZߜn :!4P2˜Y t1v9P|apeO B1 Bf Dpĝ*Lmu7aQ] *l)qܐ))X"j*.S-!3 ʑ;!B . 0 LMܩ0UixD%ZT,CMETmGԍ!I2S+St9O4=Pӕ5RԕOUTU2eJVmZt>5mSWU]VX5_=cY[T^WvsiVk)v-b\dٷ oruk]vzK]7-t\5}^p fz+jJR<"˪R*D)Բ,1!#,UH3Kaj~8JAH.OMPIJ)J&Sꌔ% ߂ɳ.bZSŕkԛw_ v >x <.@`Уzo> ?)iA׭XS!d%iSLE=KbZH[DgQf' ĠиRBQ-wILC>$)"77eA=6S)bE?SeTD*?|)fTm.땺ao7k/G lޱ7˾> M+a,c7_%G1K[>13{\mN"jٞ[[b _ci6=σ/8g;𹛏_|} >(Bp6ÌM;dAQ, EOő:DJh""OҐ'T-HF3 q$D-ʒn)cL (r"+ӴH "0s2sAP .J.G"Ljj i$ aD$H𭗅] 'ʲfoՐ[UՍaYWY>nQru}RW-^b%cMi[5miZUj[TۋȨ5KqX7f]5u]7-r\U=nPWפ?jߗ.ou=ك%a7nG^V\_|b_uua~Ad9.Iv:fauK$RDyVTܟZĸFEFhIlF9^ fEnR9fQ_îRKI<$bEI-2F-x&" 3W^UO;>}<-7<k]Dm;no ҾL#c<иhCЫɭ1@ ; Ζ#I#Γ+4\ N 4d_.+Z E;.C0DUYjpEtY!Pl-tұcU6MUeYCgC%ir q%KmY]1'CI{}, H vVf)5vϨ̨N䅃HyޑT5v] N7UQ*q6=x^w^G\ OoW+WmTb%9nT|I889jiNIPȗFKڎ/YXo5"k&.ט/s;H.3" ܛ<;9]6OhͻYlTVZz~;#[``ЌK6.I1g@J64tpw5F F f 1w(+!MI3['Ug]G\=.Q9Q)ۯ?z+f{LW?׫B}Ľ'pjp-34hdy10FB^DyO?{OUAN1JШ?v٪ vN2c^>̩8b!K|*5,Qlq* A A?0\t"/Aۡ?QbBb]'rt3kB>Li! YI&XIH" 7xaT6b,F AQLj'`ADPf%K (Cz#+K,GI1 u'š2#S"D":ЊETz '춋=!\g[Q]UKΙx`i7drW[VRib ; *[d{lZF}lZb"S$ZDd,"ˆSulcBM/ϏG6Q%2!" M:oNLS(jXWANMFv2.Ե2RI^E3tZ^q G|a V +Wr4Ieקr_3GG[Zd}}}=- W_d_q&[czQ5ᴵ(PsOD&g Y/&c3/-f hU† ك: k=HMKVpN DX AGhC\"MAJFh)0d/ >v*e"6X n2tvSʢ #BX8 A]pN D0tV=G㐈AQ461 q ,Q*HԞ-+I#T%FHfDkҭ4o;Ynu]s|6be֋]3\k(%oujpX~38.rk2珺'a6n_w'{׵%ע,^5tSmvZKdw}9upqs/P7L @ -Zei~g2pQpZѝ7lu[VԃsΏ Z0@;v wګVa;s4]樂$P]JO'-OT(邱KomSsXJ}QmȹftegiPhݴqo/dzn籍Ep5N=oGНÄ4;z&sg;gm[M 雟 {f;=FUZWN-uFu`le9 )qpהegB'#߆PCW K~d>Hz¡[SnF!m !uE/'Hl/Kу9 ،{nw5<;sC(zL,;@դV(ˌ#nC!Rį+ \ͧDprQJ=>j" GxE@C!PBap"dZʹw^oW`pX<& bqXf7drY>("/;=k" u&ygGg{C`a`4y8@ \.)DzG`,xzygxzIl@Qи+ Y`! Lq|Oм=0$GЀC xM`(@uZM@ *`x{vسĠہ!J \xy2܇&l }EIz$4{QJ3hF~1h _QqBų7}(pI'N̨qG}Md&'{I~`8 qdwG{g`]ye Xy ϔ4_BT`Zyp[%c!w1l~lQmCF ZtrO9=ygzE'ĀOF~Ghf`Hup+ "Yxu|78 0'az)=ҽB,/Kod'77Ӆ?P3|P@L({d5mۺF =@bN.5FRBLux0>@urC>& ~ht >@ c2G7e0v?@, O5.7V< q#==qxqb0$*՘Y <$Օ``t` (eJK|DNjZ~6*zhzLq õ>ˌ:⏑ U-Պ?jCA?9TGK FkDX;J+)@T9$R\F6U#sjz!Eƕ]m_PquBPԥn@@ /VF](p&a3a(bKU~Ц{w  U).F##` I\Cr,4'2HPȹ,j$\O(apm@ Y@x)0? (AǐRw= \lDa@Xz;G t^Ju@:f$0z$,wSH CP ^&M6]QU.91M"JO2Nb ̽V'CSُ@>U/{t*=j8~+QޮR6rhPuf@"5q;/&M`ka OihTPևTivՍ@ Q:hjX!< #'RXzIM>F0G!+'(V^8fpfZs3{˄l{e6'؉~,hmIT<'CgW3y' g" }[핈ɴZڣ"*Z覒k=GXB`bra~X'X@ Y <d% ǠiCmԽHz-A`H{ .Y}bG*U Qz/щx g*x?z{Hi? :ұ]ξҚB'nՔC,7Ff?-Ld ް=CYZ 5=" zP;0 5Ri#2 >&ì?-xu*UƲ@dDPCLA=x H樧\BGyJUͭ>\ARX){%O,iːquR\E%J ӀT3E U> n6NgnOU}zOnpJh0  XfATޗgjJgMeK*$J^^n_hhMR0OWy0z^~c!_xޡ=A A x`5zRpxU-0i>O`y%`TyM RbJ`t+pI)y|!L# sAN m@IgJkwDc(-&@ =EePM%"c|naи {&2> %`RSHVV*_24 c,)pi`杝 l3F^X"sʹs$KCvaPʡP} ?@HC+$Yъ9%3Ucxu\XϹ[L),CDtǁ톎x$֢+P~aV$!#>`tX-O#`H">OT'$"PxO=G]Jtܗ)>,4GHxT•k;K +1L I,*7HߛzX `Yl+T[U=4wGY ;x?5:ad̃Wҋ_ PI2(WѼ;5#D-clXOE%d>Ei B8"˔{Imɡ Z8KزMmDR]gn}Ƶ[ktG0cGh&Llxix8q #T/A"R c*U(&x:#P!KJ\ɿ5ԥpJ+{%# {.ŦPp}qOHRaq[#v$?cCWIDʹ,`0kNJԲ:.J @ I  sŵzTwUU-C`2 Md \NɧAn3e*1:XnS(M7 PR3T%s[PTusWYdutjc:x|g 4ϚuF=C5ցcfeAAaiRZAWHE\:EqCсK U¤9'o$&dLl;ܡd." 2".(*rt2d~2"IY",6JEpm2d.C 0fXk*0kkXEŰDHRB4$H*DíPe:zz7 sTJ\`EF*g`iGR-cVF$Lp `bbvu 1ǜjf1i4h6cf. 9$n!2#C2ͩbH1;1 1 T'%ɣc Y8䒡#ܣ;&^J.D~$2A.Dh;j"4Gkf^8c F&q(fB(5# d2~oJ>O jLN^K# :$` . P!1v>pF\:=1H>`40>IĒK@XdXxcJv Id+W6B14-l9#*7&VK#yNIHHeIcOP fF7gZ D?_B9&vET!BE}q@:)*BM^K0;OV(tY(~%n IK6f%SbE\\-2#MG0Jg 'FuB(\A:Y&&t)ZE*@2KAGInu.:\oAV4bdkӀ+$0Sh2*j60W*(ff@" z2tD0-:ıe!B@FhCT/Tnpz&(ex6}KY;~IJg8dd$#"Ʃ/i0TcNgRDUcP`cb>n o@>2hI9Dj0UbZ4X@ =a`I8Pf:APt{DD:DBYw0AޡSyĠ,#vyDvEBf[TJţecMP,:ĒiN;MMM#T>4S0,c\Ͻ90jH(DF*ej -46cN#YRϾv£|1`hS-SS.6 ŵ['d`^Þ#N:蟀cV8`#"i -M/Wd^-B`>q6: Z0\641ꔵc ,6[Cdi3PNR"NjH'; "lnK R\R|S@¡d\anOz*5H +K,Rrr@(/r03'r+ # + 5," " 7x<& C@|.DЇ|C"4K"Hd8J=&3 61Mf3/Ox  =@`=y ^׫A xށ4zYܮF {V/P{ǨAU76[Nj 9{O0 : =@ty,+" xAXф 1r3<~z1` BgOB01~OF@ -'0A3'i*0L.1йMX-.) b/r*˔,ǂK'x*-,QOR]x;Gs# 1#jcDg5"'DL \@yR[lSμ330֬c®A=,h2+5sMb+ `R=K{S }Պ!'w->[XSOZx OlKzQSڇ,D&@*0x`->ZmgkǾ@u̡ƀxګ-C2 w]j0+0q(祴,^;x+o~ soO !ꢁ*oxAZ&A='#G * I\|L=U~; Fm@J910jr Vp ;{{FE-~9,Ky&n8 .Q#>io`E}'kCɰ80 ɬGxL\DstҌYQ$C= `<|g?B` CҦ̭ +)dednI M)s,9_/0H3@;XZ,wx@,"TRG@y!@n㾣T B 7%$tID䓓bhE'*YUh丑Un7(uU\5$u@ș@&ՂW Wl-nVR KHpnZel0X5ZHuY'Bk K2$L}(dvLP~~!4@ BjxU Or \ `A8{\Z%Zü:eF^ w7Ȇ9:jΰC qPy6@;%H+DVlGړ>ms(3.*~d ʱR vɀSE9R{YAVM1  e\V"L':(+j<؀'(biyzK1MJm9|&X~w;1ɚLTɶ k"WexL˲)`k2ygXEjLNIe3J)5^xLYO0ȌԘLABc;[O iIu_~DҳGޏ|nC#uĤ{$A\`8 BScg!P"]r91 C`S`M(|i9=(>l%BS[v3&0,sW eDF+܁ʲp諽DPem >y-Hj"d޼ȡQ)vc)LLS MњJi!L6_;wl#F_~H1D({J49 D` `@xVؐ fe}?8wlTHQ9yQOۀΔH80UfSjgC'~n0#pBD¢D>P(,DLC-rJf\FP\DBzg3`âcn:`,y|=DJu\B* ͈,-rF,,E:+E[v-&L-0*dDžΡZrFOPGj4Fow!'L@RApb $+G1  FL vk:j#+6 "C #J ##'JK# FbB>jر!%$"H!@%D|K(KHR*R[&R(RU#B7#r)?$"N '"^&>(*h :H v>44SV5(.  fag^7e%)Drt$2P2Jb:c:q,3$5PC E.Xdexxe, nr 0@-( âzP^[ )_P|5c"5Rbf2QeiPm-B):tS(MvɈf+d\猻'fK4j~$VSHE1K+' a`DLr33%:Qw4=Tx4*R̞F",hdplNdHTE3į C2ؠ 3PVv.5u *[¢K~+&æwЂ+@@G5]3X)%Y$Ed5LDt ǒ4/jV'?=+foiWZFe mNOsC6pRمl?Qx11}$nD4}y7DicM60}ŠL{ 4XTBBelJ1 f>%z(@ 3EA0 "`Rʓlz3B1v\B89Hp djB#vJEj2dIIR!OCOuu$EdnŬG(*)Sf\DE+I7T#}XL5 W[)aG%4+$.>+S]-0S)d;Fn~dd)&ďJ<g= hG;$SS~<&2 J@@ F'51RdVp2gg(YLİb8,3_ތT_(d<4U$~JC@*8wj<4a%`L(n{kب PRd0'|k@Rx|(J#)!ҙ**!}*#+'@!ʢ "(Bఘl>'c0TR;b0$b%P=.E)\v%'D%}NaӸ O@S =Ph@9Q[AIz8 0@-y_@O x!{a!5[%M   Aq_e.:_qyv(v(ga0 mhpyY@Z𞐠@jܰ*hzĭh Ljd*⿭' CpzksyǪ)@0PzhY+P 6 ~mۊ~P{B,8d28p+JpAS ?;GcJ@y8`t~ ⭹˶a|BG,KS|Rv) ]o[%esJxL*Q,BE.5FI5:X|an;0+R'D*b8W:wƠa,c2g0`uy]0-Y0U`P4|xG` |,!J 67mwK)~B%*Sw4N~\P5w~ݼsJxD@ +;S}mT@*TxtO|NO h% 40yÀQ:wH47vf+$ 1@|y+`A>mG_ P?Sl7du`8uHdʒ@,2*ZE :V zo9)£(9k7 q$lTPHY0#D`ڸII)((UKq"Uy]kuUE*&d DPfDa-x IeºVzM!" D+/BXb8c#LeұyPj%ݏ!< !xA4[+`@_/Y!i{=X)@J?"2 !yBO~gL2@<,UtF2n 8th.%2K!ĔjyT]&0ゝ1@͹ҵ]&[V P;~kĦJ]#XY'{:f+R_%jH;0:Jaf!J= L0$sI)!LsmƧR˘ =VV敤Y])NAF=!A6̮ƧutTK.A($-70[ 3rnLeRDe:/)b&`,S)*hVZK1B$JGD]eTi"#)ZT!:T̩L8ł3bBf.ӪK:J6J}v$bPeH€Y΍+!2J۞1jaAy*󴘦=;x8aFXzG;3S?}@T/Bbp{GUb KjEWl{dV0-IY*N4>JzPe<$2j % KyT SN+xP|Z\rX=X ˉ=eEGsΙQP x!L^)**=v&gĹ<@fv6ؖiyRBؘS*eLY;6 J(=oy̆xAKVc"9vhDPVCfl,lS0*q,V4ADq#L1FDV4A^&Hhkln¾>t4"ƶ:!oj\ ^E0B*F"`*'kfJ:! DJ櫪q$jвX"%"d!'iJ'Rr k/b~!'?#"+03R"R#r'%t#L2h#$ 'J!!vdE1cZł/0 VQc)Xh !aa!ouu t df44Ic*C eCKJO#vJNj䀚jy,m0=,:aZ% +,/Ԓ7` ؆!1|h@/d(?-ԅHC9)Ib|fN!Qʧz{Ft j*F*+~cbD D(EhH,RFzE@  ?>1d>)b2O\DS@%T,j`BG2S +- w^P/\v`N6 J5Nl5C^vdC [4u;SDj8.@J]*,B"ItOJ*)`z.+bAEPʅƚӲj)";Ble6 4[WPeUGJVTd:=GGHcEqB꜄?$Jè0dj:IOC!VO*~D%>T{MZ&l`h&>X1bDS' c ڣx\;pt~Dtf*D"E d)>q$B*+b֤sD%܁E8@36♨,Շf6T,O8.CHd"=tTn\ug(bE6OwR7fsâ8b/D7-*:0e4hkP/ŀb@2_e9hhEHHWCP0f;Hw .ZCi5ڈS4ga x66DVFrvh,$t$:6Ȣ-Fx-mأs> L@!FD OikưBaog; dS#R{u>6M^'f-jb?u>/sb^o/}UnS‟ d'o@@}Y1{(+cގ0(@<~+G{T$x( b粯 ,!1Z^5iKDځ{CGm Z-$1Tt:Y)l{0HFy j0-۵+N:Sg'@a~[, 7;jSpc1+FtT 4 tyj8gi,- q*{V@AG,pBy iव|2 .5Py4Iꪁg)0g:LpbçjMi觴M~!RH> )qZ6: \G` LIK y=j}\4@\#4m;my`;ku0!g:G橁JJ=!xˋVK_t\HAƏn"d G4K{oj Zmn잊īlڤ $6glF>:mUJD/\k9t:|7-{fK㟠Sdq%+>I:3GNyF6"«O6c^UMF6>>YVW˰+dk3 L},6>;((x=d/paFGtӶҹh.DhN,l1 H^/c{Hi=Z8Ɖ.i6Y#5E=Q/0nnͻd 8c3B&)@dGV5F3N1gD)Y,x09L@:̀FP}OcH&?KYEۑK!)|Q"ǫ< @&#<HIq%$LHüNHiq8bGM)DJN P&u>zX@%LޟLju+$bETi&$$S/JF%UR}KIy4P^: ?Shq#:<T͊n~,mp H4cqH $4%)I apbP+5JƖjfKX0"mӻ&i>gLu4 \4gdI~0 ޝ`l^VCL*N0'c>MGmNc0W?Z)% .K3ńRʶkouESJN8̵Xev]@@^x U7ߨ hȔәA*-7' ;BQ*ÈkCadB;IuNle\uL6S釀CTÞi[.݁":. Ls5(v tĩ@C~j𩚛$>KA&Pv:X'cJVw3TjZQ_tN9*XբRy׺֒*;2侤fNj/ӣf:|M;<WN;cTTj Uڠ$a1\lSsl|.Q)T7c;3(1l9TD*74 |J:eR+Ķ27TKed҄2g'Oǀ?:L,;ifTnW=İ7ͮ_O&nzd'6Q.6 c =!H"@+ďC khl4RzC8[obm,KD-܍q*Mԣ(4(,AaEEc$g:4*]$V~JuH7CpE J$AgU:#TPNvqlX5<_-`7Ne(;#j7=F@6T*/BN6=DK bK? ^,)<~<=.stƎNS,X,}B=P ctfopG'Y4H,NkrbK`)l҈P)GM)+^^H"F_B)žhk(q%i@C³c+Fc Q#!AF"jB\ Pl0`;bTD8d;eNe JP$#.72@GPCx} 7DvD_yoHɐalp4%/^'ܸ*vs%m܄ hr^sH6CZYh(&lG66D!a`P^`@$d $(R qЮBdh%j`%ʇJR1lB0"q&q X f!ʣ0D* C8xF#C]b;b8,.-"J R)La6 7XL =gnav?(@ x~U':<SNS=nxq@o Wz? OP{\wޡ-y\A Az^AuG9@kt xt@Bqd@?]Ǥ^AO>&@ QP, A('RT6-Ky@pl8d_}'2p'/ @SIҔ`qj<α 9mGB~6jbsԠaF@{~o{.2yQǑ,NJ 2PͰ } XP G%M:Km>@6}u5J ʬH' PpYL-E0sjʯ[/-H=K:-uVFjz+~@( MCV*|*,xz{zFttPIsl;>ĹEyN\:Ǔg٫.ù lJ^~3`P>,vjْ22E빶q[R1"1ʆ3Jۍ;HKDHCiH*X)i?`T{*LuGNdP}t{h=Y+Gv]pE//NZMxM9@!KǨ~8k YX=5b߇0T+yQ&%JÖbZߡ1tb:,"3_L :2LṘ84ܛJf)D}t֋ | s*ޮ=`m$f’='D~[Ly0s +g%+4bl)UIYT~UV5 14i:VfhD V43Pɞ=ۑRcPy ?@~hGɡ꒐lŌ gG@ۦO?~ G9ő D(3?ߙ 甪d?1U2i*jWtv'))Jx:@Pdn]hXZ8F*CN2]$^0/X;.4@8 ˜0{N>R2@${&,v%$ܑE$KuQBUYA"rgUi #b&N*?%dʸJøD&ȢCd%bcZ :FAWclhJ`"MlYJ4XXL>DZT^~xNҎ;c}iǴ`|a̚:L@>@P@  LKwRb)O)w*:x ]\5Sɠw$ ~Æw!JGl%稲IUO^+hJ|z)g|3W)Cl?/ }P _R@| #u=(wlawrp 7Q] =HfZx?se]8>B@6*fq43Lc-C)usR=?2QK!lUfN=KHs'Ivt^[@:R}JU2 ļvN kJ[_p+h,`a=}=ti8]$U-$WNg@>UWg O(DPD8(U1)_8.o@<-ԲG+S]F2pt%"㫹EeW0ڦvgZ&”z]r3yi %b3v|۟$g*źMGUR3h=yP<}Ą芌Xӯtb?z{@j- {aQOf>\Ux?O|6$ 02!UD@ʾɆYOa<2Ŋ6 ʡ2JNt/!a7 crJ@ Ŭ?!Ml!ZKA`I o.Ɓ@Kl+΁ +A@O lluz޺Lb / – n2 N1̒r, F)COJe Zt$:L@e,b JBG`2k2CtGz|r01b 5 ip{@ ! ܻaq@ q r @n8L0* !a &` ΀$JrJ`&a¨ $&J' $J$*BT(22)X|&R(̮R&ʩy)}+ bW)j,!*r-rުBdȫҾ(/ %Ⱥ:ʻ'J <a!MaʚgdIBV=X=@6l,ZE@z<@ 2p> z&@C,,@!6W01 >U7?38s,q>Re BE,+>D>Ӛ;%8 M FA <0Z:Q7s6*SS]?lD%b\S0::ZO:qAB5O@Q %t96 Z+xMs\Z_=LRxԤ=':x2s>ZT=1 ?iHZLU6JԌF32r˰Zc@!7HA4EF[#=7mRZ[F,3#@:?sڗU&=3J=0@8v2t?Kd 7%aTb˴\s@4?$%?-L{Mg_AIt5yB5{7t=1F@;LUX^s@9{S-oJy<4t/JbĴ6U0)ăbsUm ɎC=dSd =,i7ӧmIlHijU8mnxTv>ɏ5Bbcsh(S3ZA2i-gkԸTGf&mbeP+{jéLtF)xG|v(%U6:7?to0:E79oh*Gx}=0C>7BT9R%T4s?vss[5Ul`VPTkAsgSqgMm"c9o9*67}fy!>T6 -՛:-Dqawp5_i8=]}go[[l3FJyst?\aW1ꯎw, W ko-/:` M +̓1H9*4O=HQ|`2رLjp~* :P>qZ/tvËzG /BII 0I|=Г!$̒>JoDU#3g'R;70Q&<0,=kLşq+,|7rṚq/71Ǭ/->4P3}3MD\:Բ۷+ Omӂ/Vҳr/o%_DLD>œ*7JE/]‘DZY2^w]| Q4?MO=Xy4,[oNHMU@X0;ZPY ]f^Gv[6.dL;[gK:9oŏDL ȭ<JW6Op?UD8NɅlM]Yfi$-jD]s}vCY`[ :[LŸMgF:QuK|ns(Da9b`,S3Kjmq8 Ӕ= L;r~c> C@ @#,P0c@< D PS'L"D)$ܕ3 Q$ANRJD.!82s D""p}a(xpA 2#pС4<#PhhAHޅĚȂQ"0# Itf" ͇BDȲPW"f`Tx;h1`|>`Dya q>8΀D>8|A%97mt`GiʩT~[c ܝ_V>@L!QG;PJVADӆ`Jup2$L\ :3L6fdЖ'\O95R >G9!:vr=ZHPb/4bytPކyTLӛ#|P;&= )˩o&E,>Egp$&t ?*"4SB"Kf9=cLx.#y,%4˫ssL>xsU'*5I*Jfl*6|ZΈҺ\Qȗ[ =犔TbéJ҅+̽b+Ʈ:Am7RϩZyBiY3'qϩRyQ=YhRX @= BL<|`ϙ q߮,qŤ@{[?QmSW[[=)ZF]L)_]46TQWȣj\f8$"SMT.I(]&)r2)Ec h ;G2VSQϫ8#sn(x9ggE6b+m񁼟WNhGW .^&6C MQF*glU3*UN_c+zVw‱iUXU^J 0rP;7reՋ9pe8uY#!@UXՙӀy1E?j~-y x[%4Ҷ(pwO'g}_wK#sBګv3ܰGz\Ѽ4};> p@@cW@Hx, IPH0f1L/ oG O: V <jo<ɀ0IBI )ؘ(/8!ژ& ¯:iV0D/pj/O VH0E. o">IؕP8*))-`p LTOh.e  éG OϽQop  QnvKkBo>Lob&!pN͉묔O*D˵o/pYpJѡB¯S1 ܢ0gKC dzϓ_ `K8z~%P0  @$+F2- `1 odR+ Ro (F@'-!o p&R* 3sϣ+P oBї!(/S*SsP?N%o+ ,<  ( :@  *|$bX$ZS(܉<dh!JX#&@B;@n!s((B   x[# XElؤ Hd2  B"5+H1ylSIg)$F340]"fT=?_۵Nc~CL0 _vvrmU\k "al*9HyO=4omq7Vݺܮ8 ?z}3/BD@k.lSmyk . COO<80CXp4El n@ 6M31񋞼ň$RNBE9"%|VrZ/h7`/n%gR@^HcaFh1`FǏV#]PF(ftޔQP,hZ"C$6vƚNhcST^D(b,ň*aT1p.}Ji |ǓSR2~8P,C!!GSY["w*K**jM˹'<>VT 9&SJ)@(u NRokAP@el2DW 쯴;W 4>ĺM w3ډqvnQz3t/+ן2çyl<"BS37@DV}CQR}k&~ y_ur-w&ҜebHh5Lxm94:;M]!u$:>-6]NZEMOT "rb Mzn v8p"86͘ PR 4Vf'.C } )M(.2p h-2 L.<8 DT-3O) v@m`j:RˢLʒ*0Mw"80^ oeN(MjuL El8n!xo3!G&xʂIgqH!&rpQx q"fħvGȇv1L(l)DB Ew`xHF Ab0F#!PhDb/B"p?"E1j3"9$"IC ȥW5Hv_&t3w?kۀ{Vz8n7v'`9@ \^9+qDo9SYyZnnjVB ڭ;vǞn-yqw 6ű@ζ|{-7mo l\Ǻ˟y ag˾0S@lc"޺j8|;mSs0;&hŋlI\M$Rֹ",D\Lґ ,lܾ@+S:yzƲl22.X<`kFǾ Dz0: Q|Y)K@y4P+Ƒv5L,"}TM.4:5ԭOĝ9JQ22xM b41Ɛ#Rۮ{3LEQ6殞n]y&3.+IGRLUk%Ѷ>\u<CJ_+4:l jǎ <qr,N,Ĭ]5&+x`w:l#8|>15ĴqaDTvGtjrf\$ޯ{J$>VrxV4OJ3gnIyn 7Ҳ2*4F"ԎNmS>>2GKys2.7eXt?}@V7S;CIL't!@W3 %Di<H9B 'D܂Y%q)N %DD &7ߴ$$JJ)!܁A*S(&S 9&R a<)d* ba?&xHEM)f@IB XODx;G@cw)yew[T;D斅@g9RysIƑAǩtьa$|uGEP$BJHDJҐyQ=20Բ) VR̋J/1U'TIK)TrǞ] BXGP ?9cp4Ơ0"uY-Sqc,"r ?qJioDdԞ1S]ODQZ-ip8'jIX{ sQCҧ_䃔EE#J?M$4rpXu>'euLtX}vUITCJKY/5"" }&HI&/º ؑƐQZKZ ebX h}A7`h&,Lm/򩨠3c-K+{gW-=$͹$4rW(QJ{-2XAdf+܏; ^Tq j\vȹRCˀRSL$Uרjfp@uH_vhC\c `4,X  $=G \c>EI)U.hM/X@n61KLT%WiE%.+#V[4)ڱp2J]Me?ґDjZ J.Խ:@ vW 9&%/\p1H}Mg 7. (<t8G#hsDj|h>v5ARp/]&Hbi5$b$Pɵs9OOCWMEnOr9[B?X =g x8KtcLr\ڸ1pQHH Ӹy_өXH_s/3QԔӕmwvH3<O·!3|mLJ<@!׎v" lqVWI)k+rz\nƩHagH )XԌda j `P> fVSn.n4EBO&kf;o FԈH'/Hd;h ̒ (? f"/ĒEt֔ !DI>Fv @(\A!Z!aeڕ>Ɋ0pB淌avq#O(h.,^I Tr'l9j@ { NфSpKº)P?  )\ \d+/F@6@:` Ar*jVNjϟhcDVOn" #!'γL#|$c*.BF2:ߨ6+%܆-ꁎ6m*n0A ʣ0D* BbPD6'`H b-(ǡ0XrO %ybC7|BrKfxdޠ1w5賩6w Wd6W~n#l,3cmp-,m{!|x<Rv:פּ@!%p/_x@%[,Ӥ1Wkmz ;}Č_8>[ufjE}-! ol8^`8QrX  Wn {< .847,y+kso" ;n1 E*6/zx<ܱL[  F㻇0,[kpDr&D DȻ[58&MZ(J@8@Ҟ+3t{$N*Q 0@'tɸdySd/*(CVq $P-\,2Ɍl&dԌ{: KyCLhFdX!P *_g˜WË#7 kl!$<|ҮP#I'ZvD*Z(iz"ijJԊ$,ֈB LSO1KIBD)HF Q1}1@gE ~%UhԞ9$,B z`Li*eZA" YKm3@Hǁ&"qTKBJB"] b+~#@!3 ~E"D9,GTR+P|" z4O69#nN;)@w(bq4>C'~K4uJO+XwPB@qY#w3@(,j$'fCa% .*NuSQ3&LruevqqNϢCn:c|17#h@ä9CyP#+@?ؽ˄Q'CTHO*acKDH N||92UI[K>PTFVM&jQ$xi`Tvvbj^ 3#։ Y+W>3Q"~2 pP9GP#8_V@= 8@=# < ,A$^"4QJJd=x5D]˂і>Ӎ&9⃤[SYsP|Yy5P9%PץNi۬#߇6R@M'-(dKQl"+@A>wgNZtj X!Nu"w7 ͆%AM⺵HS'I^޸^H<01eGYZ-j; _$*B$=QLAdy,7y̬i:3"(D7D\IOG,ۍ !Oy'³NhtF2 ՞tZIpq#u \txke|k.#iu+N ZB?tm/<Ѡ!lnkZNJBͼCg"K^P/"u.7}n;3r9D4噢ȋ$u @P,?|~@7C:)G7u 8|ykQ`2/ƌ%}jMZFC\w&WHFmo7ގ9BNth^7EW{kmrv6'5\}62hngtGV,?#`L@d@4q6G@Xy;.;ݮn  cg:^ڢz.oWO[V3;{6Nq*O7;9QdmͽB/?{w@A /+==3??\?¯+hɲ@ >-.B>6La  \`"EBu23h +0P$N /'ϘT2-.\b4%Bn!RK%\nFY2fBnr.+ϸǨPEi mJC.9xL*>(a<Vb4A!!aaJod6vzh,olBAܐ$2PGH4z6 jۃQL6|^H0LmlL  m:m  '1 h'-8("7xDw X8B"P4"E0HqY#!|/ DGө C*P?Nʨ7gq\W}. wSg.}G x}iutJRLS 2xο}4ˊZ)iZ@7X 4@: A8&!x4 >1 \ގ;Hô3n\g:VѷKP4QH?w;QaALje|;5tSa5vP۪F\F^4׆47.dGIvd ;^Z7XH6<:8PPJs80@@\ q잸3@<@0  rxc|qq Q -hP;h׿hcm53JOmm Gf_h$h3NQ(oPV)e#A-clDw X!E:7J'mMZKF]Q߫2{@MjJhJu$[c%as; H蛚e `w @X@8 @XOq;h  tA;C鮜WVX#qxE)%#P?@ \0`f A(@PY8hC`x 9?x/E׾VʛdT{4\Wv_D1ÏVU#R  }=(l@,<`1Z+&Wt'5p[W>upAL 8>@ S;Xj.hzv9 N[EA7^ߌJF{b>-Zc 4wH.@hLHq;Ϩ(؃]4}ܪ.S|ׁRY+4D@xqX` q`2=ua4P*QG:3zdvmPejĕqr.G[G z,@)0)Xct;`2ɇhr!oyhznVdy Kk OL* p ?(@` #Pp14< G@R#na=FQVٽ'o^;zއ ! Z÷_m5N.j]peXjUs\NJ’Ţ   L 86 !p2=㱙 >/Fǡ y)lgwFx` @-27uڢJDtyԊˀ6w~pB zgAnP@F@sE`V 8 g}||eγ^mE(՚ ya(X?8uas~')q,zOB xߩYQ?x{!0 < gPJ * gn'imaPR6ǡpGazyCH۪>Vi qY)v{ćJ.5RmySCOpb]~KRq tr"*pS97&.|6/Rnd^S2)iq( SVW&T9)M HB 8 }hq?` 0cHz?@,`{e;DY}o5M¥~pP% Lp%bY 1@sh`h6qH%T 8p=GC.9u< BˡHn.:8Z>{4@@dp(*V)v80~@s \,@HDSP`@y,p<A`#pp e> Ab {!Pc`}9 ǘ\چjFl\-f-՛t lr,:2|j0$@<2G ln #` dƐC{)~5_r:2 cW3m`sKKbsB fQ/t kTI[ͩ[ X$Wf:axd*&|D(EKِQᵓ?ըm8,nx{G\'>u,wtq Q!2` :Hv;WVTge+C2t C.h郗[[ ُ=D< ^(=@XcPv .TnD[KO`ˬ*kɪ4?/(J< I  0*GpX}2(62 (76rrrj\Iq1]s";,`r0Q-GPr`y Cy`;P.0!atq?@]aA\Ob mֱ|*.!Kk}GpP ` E<|xkzD(- Ȃ'x0x4 @B-{E`(4M#FpBH;%E$ԙ5I&Ҩ+/Lh*a]V+9}4T)tCQӣ<.:ow `3 G w'C<w=@` GEW9:Oglj휺%kS:ccgsB($A``[tx=^w %sFD ` >\sqXMޚשJڲI,PK tk) A`^}gIce"`H*z</ x#@DyJ *63~AH`A(P":j#:ʫB\ p&TEx}l#xH`< ǩpgk8 }K-6I3h @ʯ0 @jl#@򤜍! aP.mҗ!'*, PHBFhS5pFǺsW BG`D-. 3# !JȡTqu˗G !p ^4b@ 1`Pa 0f oy5ش"42S=hգԎŶ!x`p,z0(` /=n\ B0GcmCkc7q]B`UlDX.zZW>CR ;@|@XXà{P2¸;G,B?p :PXg/B},Vb@3„ q80eÌ0F [GGG b!g QUHA#oT\'96` >C|>@3`;`qe,:@C8p 9(Hȴ?-x] e AV]9 >P: ,vPdaʓ59x)S:\څp$~U5#Z R|P B@`:GCHdZ a֙Ǔ`:=w 5cϫ1eW{_\19.\Jiu>C#k $ "1$ @9;|VRʣL%! KИh7k>2̗5$%feRR "Lx]fnW̏~ku B ˸8&Z"5c &+bd!T ʜJ.AǿY|LkU0F9GBb2KҤ9x&N0 L 6F3 Uvl@cx#:2W<@u^ m9EIm 3 (ڀ8bQ9G>0|XfS;|D D 8x,nYH3,+UZʕc ` L~@t A !@G@@'t%S>'M8 ,?Ôw:dF'Gj+$~{//}9\ˉQ9$Q=BH cP?@@B G_Jq%Kn<#/n5ϹFd$aŚ`` ZA* dF RL`@aKeD(Ԅ-*8GĪg"aP*`^@A!Ak؞A@P@rfaaH,+<"H_lب."PD{0}W0Q&%bf.m) AB0|w"(#šZ HdR6M C!1= fz#C"3)n!0&8RirGSEeBTf5ժ(I`@w?ݯp&a@d @,{=NF0t>L0iUU*z$' u6ߩW5u]'X5]@ p8HYxA{ 108:o3-9@%mjZ^z@JT.Mj  00nawac ڡJ2$+vhRA)pݨZd&s'm8% a)8 Ǡfqr)`<Ҟi((O%{!Bɒ+p5tup,d|G6G { XVXhw'yak&xGG u$z"jʉ@oDQTDl'H w'S'\ YlY R)[2(+P4= [Zuɧaq؊ zѮx'qn UqsA $Az') 4fI\/FؔE#o6g#RsBgx| 9@%hu\`P6mFi ` Ͳ,Gtt}#H16P#gآvv8}B]Ř= 'zbyF;}Eth4e@&Fj#(f}^\Ny;a{^+jXğPIIG(P64? ` Z? d`"GCtT>>X@T@cb ~Sf4kXQ"B DtHɀcC|t`6Ɛ}߇.D=X 0D>@ ,g |p '}OIj[ 5lA7&{H肰vxC~@X$a@^ $G]<O%#'o0W&d pIB|r>O626hPpl:P0iiM $~< 0!=`# mf.,ˤ.Uph %!1x ZEbP b3bäiJGVv pFiT-?|k:G N{ܢ?`4D$a;i-."kix|Olnk1íu@-q( @qcn8Ƹ{ @X֠8(1oo[t. h:Mwٝv#ok6x4pn^#pF%+,G5%vHe졷e} `)` p(>ې#tgm*!N `E&mPn@,R%!Bͩ86Y|A`@ f`p@ pN`:a`Fh@\ʘaYLRMx~K _Qm|H+߭Nˌa+Lp., _qH&Qoܒws{o z=ZT$~q2 R6Z v,&@p *p#Pu@YU?" ,cs ?@@>8AIMcr,ݒ?4z )h;2pMÿ+.$IM&r/>G:a .>0j ZB;<E*?@ T 8ct8@A)a2#:XnŔYyZsԀļ<٠ t!@;8cN /Wb}$Uu<ȩ1єΊ& lX"C~>!!tF=XpoPrj"I[~ϲ9M)-6&HI8<~ppA@|2Z9(xeh`>`!=Ǩnq=Xy# (j"eR $u\:6M\P9X* <øx =xG8 d> p `s:`@%'7NQT6G)ڬUM nH^<B4^H#_ЛF ɒS[\Ķp v@,0ZnvA8C$x&Bȹ :Zv8ְL% 5 XME?)۔&@ 8<8z 3#r:fX\,0:{C};xc8Di)`Q%|²IJdu3[<=G8<!Cxhaz0ĉ0 p@p@Huq5F Ć Yb)֎ZvdId_`et 9 Y}]@zA5Ƙ ˀ#ȲJ< k  _!J^5<(,\Ƙ! m. X.'o=`~Aj.̈ иP@,8V(@V>C!(;( .^!AmP>00B#L 2k䊣 : b[lgr ȇ] 0,L #w { !XB E hL:d1(C#P>3 Ƣ)z]&GS|/L$f{' 5ȪU"RS&RIMrCeTkRҪuL#?(joG! #}]  z<^@8x # q=/滑l4 Įd+nwY*7P'VbkQok dv1o9,"w%}]J70!Zժv] x*(*%@V`0 @ ,▛+B"d~*HZ*i[)Q,P0 $)xGq|G!xZ<.`9g&P 鷮84ҳ*J Ċ9ʧyw0, uGyyiwgp> H'wǡƁ@M_:8n/F*ڷ`Ok:ʝ*REfwgar|"/urFfQy@h Q H  @ 5-M8. ^I:N ƅf+)LhZ@ }Xh`1uA@y3|0NJ̌DjX /LnH,T6hr /9_i.AM ͱ~QDA 40X&BIXi(Èp ,#HQR|Y~U } BAcm G 1!#4a9iwx?yDxĬ͉EtCH0Q[<@#*,A7"<|М°z: Co<xCv@8F  p"#hNiCNac%ܙ%:u\Ljcu^@a|HS,ю(oؖ8l`w¹oQ !غ%yӔG#tP,?Tcs!l QOAy!4 bBɝ}5j.JsD!sFvZ_Oq&h@Ď=hI<@@0m qz30 x*Xj5xWY$Y>k) Sjŏ\ L:GpDdٔ n"A3NmL'@c~ ͈hqxi{8@! (Xp9}HKqu,G+0M8;ETrU ]0qVَ/C1W gȃFU5ͭ(w Ø 3_[;-Qju/9o$8v A0Ba@&͈ 72ưbu18`ݸ kU "uuh5 tQ( ?H}1= mq)D !L)>#Cl@pCZ q=ke(r:S[Mo" : ?p[2^è; +Oj>z`;c\6@ ׸ԝ6"2U,ވpneӄI,>X uaP` `s% PbO B Y pP,6xX!=@(56y%E53.:]CU%xBMG <A AtnH<L0CxkQ9P  ='԰g(d' >꺵4cx~aA|@8*xD+PÍlcbڻzmE Th MTO @!C@  T`B az`J`gGC֫mm+MkLFbx8$ 4@AvLda6¼"`@ -bxA~ Em +zE"-?GLԭ<~O~NhErc1D-jΊѮѪܣ" 7x`D* a(|$â1b cQXT?Gcp</.ERi2Ff鴎o!;*Q1M=*gOũ}?&U*:&P)5:RW*j.ަN%u7v Fܮc?= @Jݏپ@A jW \fyCiQ:{},(Qrk;;$}ߡ9q_`'S }0=mw $ y6)BN xIzAzd.Co8j>(\DZ~1!(< `|GIo&y'h7 *"3͜4Nz>&M;KJ,ȃ-vpu v'H 0P`@ ifh`8g' `.z - d$mԎ8ʺ̩кMj¿B ̭B gĎ|H @A tYQ?@a  J:^*0Պ^XPp#8⺮z 9v qp@+ mp%BZJզ03u(b52#KG#|@8}Q0`:cL #`&@LB}%$GF:7囔Ĝ13ù?G$~ҌU4xd;@ Jh@$wGOQ*!P,|ezap0G#/%z{Czf?x4|[%J=X @A\ p @T{6iLjehq=Rҁ3$,zxrt`pqm x$4`ð D<Z B(@ 63#p)W@kuo]Zo?D">z \Q1J(+R4[0>%@L4H8b2gyqGG\{1)@%v+lhw t'o>+\d1z صU!#8o <.#6H;0 cYNS4BZq  zx&<3Ӕm\ YQc^GAy8O[6r[wS0f܁3{hX;CW`MzJx;HC;[3!oD"*xI6g3,$MP9 7gĪg&"BJ^<:,6Ϲ*Y/}^q@j{C);Ba0 Civ<3dmu˹kta#i!b4L(mɎ\&e:"h;LVW4՘Se6<սWs|S2?)9~3ހ2$L~.-F6_V-z{=@:v)+ ^ 9Vw\ݯ|+5Ns1ҡhuɤN@ `) ǂv$'АQFX T@( C@eQx#hژW Y3g,&6>9<"q5 cȌ~7EX> "Ke`C6äXtVW:&oQ@ރq4K(N\UR"S~TVrd!bp𻄞` %aHo'ZqT%I5jRjfќeYERfB \[^z!+z)oI>eͱrxܘ ime*"@Wq„ale1';!??@Һ)2#+bҬ`O$+Rӧұ> F++ƫo*т(Ql>N4j# RģP .C#Bڌ3lGp+:o=&OJ& Qtf;)n|Jn['3Ps3 s;v P(z{'yQy,8"`GvIT  kŬ@E*-/ 2d3Tf@1".J?9IؼczԢ-6"V䂣ΕsHDA [54+QCA֤30$-{,7zKLKN+R"D"+/44;5LZ)5).xK6K(Vbʙ.qhzNCh咒52W |Ɩ&ROW]CC#Y\YϳO^4_l嬄? !2e^]h4~ cluV%HXfV!/P?tklxf߄qzJt!$3 Mo"\˨IM>{Z]`fݑy;>ωӲi!s{Ŗ^Y^~oco3xi{0!4 x;Ph B(c> =p |` !m!t.  3DTH<gL'Yw.-͗% xM*7mZcmjDsicSvz de䓠;32!w HRYg#N+uʕXbhGĢ?$ԟNXY@vɾX(4T!@Q3rx2KF/Y#uek&W7wLhe ZGW[:Pɻ%\ .PsRG&Ctc&khG?? F/i~3ƍM=CPHDX㺡3:X?2%%:E)/M}jO+/QڀB0:PGXJ{ۓ-ΚT&\aoU18it!GÙrO[W⻐El?pTb X0@P% ?Kck2Fx0 48`QM2q-iN&N \z*j38y8Ǚ\CBKlz"&l)[V5k=3 l gg: N?J1[ggKF9hENoV=O@MSZ>FT߮]!p8/&:k1bc;%3 [&+UgmG<ݸ'{?Jʥ (A#.ȱ( :h$ c舾IZċ>0lH<ˆ" 4;0:QI{43BuXU[&4q,>"$UD7F=nY.8T,b0R3 XG !^rDϻAQhwŖɱ-xuUL4tLu: Ɏ|z4uѣC!ܮL!] 6n/3օ8¤SnBAp÷JHt S+j ,DEylUQZ&jc {J\D&I'O"H搊ݑS ESћRڻof[%іZL\sccZz°>`/|V5mM81;c^ KfnRpW'.R\O&,Aoعwun,iXp+h wJg~AYa@a@ @ G@`Tcq6xSQ~46ZT*\*[9RF,!e0]N$].lj$y An]ILx8 Mᢈ}o{ ګ;!pDBu⣿RwEhȀc:E !;iEw,"p]J;.3~ k%B+Hco;mn1!Q|6>#ĕk^46 ˺b1M,|.Ua@SdL4앦SQZӼh-K#K;)fVCB yPuhQug&1VZĻx3} )otJ?$C]9Q:*(\ZJFU$`zweK&&]E['kDh3.CE 1%J;xX`<`Dx!@xT %?5Mko.?J%,#Z2uJߣ*Q:W̸w;3Nj6 %ee(9GvKv+:*T^P2@@ʣ0A`4  D!0X Bn5av12TK)Kry4ZmK8C;PfYi LcNyRfsH5dZ$ kGJg5zFQHez~Z0L0X:>>) Aj=alXEZKocRC塻 XR5b8h%BxVƲ1=KpY_AY FQgn}\.)^ZfHZv-Jٺ8Һk,b7꼈"> )/7L23ÀÏ{D>;ƬBa+BP|u# x x #&JK+P )T̷oY n$໱H$E 4s$̽ͳܺL!K#;: ȯҰ= )Ku/wHÕ5OL f,V7nFjʂ^TnU`ط{ܹZ[gW N-&ܸ#Z6 3S^;q+m97?۶#/a.;]EBZ7m/qЏ6OJ){44aTD1bIee5F̷8Ӯ-vdiMd3yN`cC_yѽx?3vtʕB;5c՚u צMiUD]-3=ږ&é:X<$]~Va#f?f[n)ߍ̍* Ț+'Za^Uzh~Zy l_[6vW[C4%XZ u7N֛ BXƺ_9F9z7;\~/- & |$+uCOrLa%G @FKyzp샯TX]i"tHz!5zE'*;mwRZ݂̬W1~HyL'ڤic(Qt-|f ԡH+;vjQPQ 0"Ys/FU؂E(D[;+et$p28ӓ[yP٢ԱsC =FV#A@!DE"J8̞^lp1SCf a g+:Osǎl;2Gl>&&2ļ7lJ+%]c,IW!&-!5l]_P sdU 0mg(9f]ቑRMj$IU-6c UU K h)xH{ՙ׺[kIFO3^k5s/dF@@ȃ0Ew@\2 CQN APLr) 㱨Z!!eNd>L`g6NfԾ=x=?sZTC[u.5Ud:3ZR5VT"Kq%Į3M> \N7J) uo${boye66D.9vI*91U;#k2˷nty:?CpQ);;C.lD۱ v1\;I (p Bp;=k.8ɺhNCpC$& &IJVpjR3H)QCHo>Q( 2;+Ǯ+ ;q,x@JA;(:eh*j<V̢8j"J#Q>ϕM1 Px/)bԮXe}# 1j|Oav!^-Y,٤]řiNg&#7}5 8ͰUTV*AXNE?fX7PzHg溆o.ѓ`W1R毈}}kGXBʯg6P%gS*Zen BLPһLIXh ֐ * c\`A^5l+Rc-vm>oiv+zϼ. RP[e֙?ly;njeYդEoҽګJAn7]yѭڟIu8*h󮅶#Pj rڱM9EdRtaY8p[taswa*[_O2\)lWITuӪEQaŕ*ۤU{Tj\aR5)Ԓ#J=uڎdD9P3a][Cv?sѩZ1>6;l\&s l`PVDIkMGCjR q&CX˂U;MPڡ8`o$݊*(=W =*0Gbt_?6s!-= G6BaedOwZ:$Cx;D@ŗ 2K4dNL.w_@Ȼ9C300CC0*))RJ+r2n,J3L-1KCd$ȌX.0RdQS)A;;~" x+LF2,(Iڸ8 u#*0TBX(͛]B.@{ ;nҼ,)trRR4-B.uHJLQZG ҹRL# lmcGKd捪 mOʯ+\24.Aı'L̐[Nm]W B~]#^t P}+[ prgy]P[Yl\:ZmF_]]1F 29k^^]uյMڳNSo>i]m\5ep fZFLY1LCcZײ]I0ݛVo̿cT%ڦfdyr%dź1·\?qezĺln)hla2ZL2)V>8& 19plu̕V,'Yٖ_QO[x+gOh;vzkO1rG7Su^H>\~0g [V Cj3gIG< 9q' SǙRMqeUm`Lk ^{ݣ@ $'y>b`ъVFe؇k|O!07T@eT"39Y,*GO3L\!$܄Lnp(6mI9'kǴ#A8; `(t"/٥2De&G'JAHd#$Jo9j6!l,w#~&X\yFZ9IrKG;F،N,"3T)W^KBuJbUNˡ+A*O16'kbUMʎM'g.\b*2("&~)GZ `6W)j}J 5ԡ'-µ\^'JP@8$ԔS+)BxXQ2rP͛3q'i @@b Dwh4* LDE¡(V u"wOJނ(WǦ̋ϲ4_Х-OɣFA {m+ZA lt J/S7?c>Ì),.j(ڵjId=-#i6GT/RC LGLrHT/TEdIS4GJ(`ɐLV՗t.NMU2)tCde۞ʭ\,1T{4il~Bč 2)9P eS&cWt\e,J,r_EfW_Dp5T۰x\LNZaɵM`Sw`]gk0\זmZz X2|LQ y+f%4OTYEiBGr5trQW&[e_.3zZN& مS3MzkZOy"5~E9et歶^g1%mm:C9Q.D}Ҷ6_ԓ/bR/m}fS_@ȿlnxN+fѪt=AՌ!GQw K%ġe}7;?⊎ԯߛ dTӡ`*qx&8hs}Şe&4HIP5bfI?sZoJn¦DQ .#!6";g\Zy[ ՒC'^.9Tx & E:*.5%ȥ bZ+sRi A5KpCE(8 9)>DڿX&\yoM@"1HW 9.#jqm·g-AcFcGZ'$8G"gv/vb[K n y+iLZ":FrHD=u7Dphm)7e;ݩsFLE9}3 )& DTFۂeIR2alˊ: Fn }>tbȃ0Ew@`. aȄ6C[Ј4* GxJ3a49e)TR/Gd/=E)ʍ1PcYw%ds3UrFV2 `$ dڳ[O[-s赉Fy']"nf.@P/劫}l:YZQ*Q2m@nqZnۑj;{DǬ%B)TGi\Ǐ35l^kn2\kQ4%㕨u(;+#-{nz> Ð,j&D^:R.%LBqG8&Mj@N 8j$P |7ʴjP60J "SB/Q| SQ.4{Ďu-0C 6S ӕaV4?;>Gns2Nè4y;6EOVT<@1t\F CKîW@t&B eh5FʌQ̨"+/s\B.8J,AzOs?@o ohM7e?`v+\gK\5+-su!ʖ n[01C'`3UQsb_yTSEX2BN[r/bt-7K>bc\uLU˅;IE"_zVӛE4sÝ\Ney\Z=u,tRgnz3U8Mc\0 iXų8k^p~[+ȸոTZmxU<鋪ø|ݡtT3˼(t> {Wˬe%n .aۍ,HKVL;r(R52?'K偤ȎSuG4d,m>wK\Z PCmDǏ2\4ĽhjυVQA$ht\yZ!@@Ȃ DwЈ<6]%bLCQDFMIY\VI.oH!qdzdQiEeU|SY֏NA=Td]o;ؖ{sƖ,l\Iۻ\JRy G~u/-E'19q'IH|[Si'Eb̬"{B/љczg [Y ޛH&ڟLA}r !J46fAZKTH0GࡍFfn@ k!%~y3@ K-'ECj 5,r%$h &(jAx01_*qyr3& >X!l$5y0Tb/"民[/ ])EhYCG 1?'9JABh>8dz8@ @Yv+(yԼ#HfXF$FH*4k\/׸P$Kk"4!3lNz?_9Y%dk5xbʣ0 D" ¡,:Bxt>b"(+z+ 7zYEY6%4F2FuG3+bSb$U*L(rɵ>GW鵊^wVyFLF9>e,XC8ư6[ڃ ڢIz]c%rjS|C[g55^d5Su=r:bg+ej=._}_V] w9!ڻ$/$wɸ9|ݓlv oQglϫd3O;*h0j >ޤr8ȶt+C|9-p "mjO5#T BQ{ C4Q:K2ް4:j =p3m:-+2Ѱ\ CA9$Ӛ;H.B0.\@<؇o6вD)k+VԛPѶǮ*BNM,7:]AWr}qM<|ϮgYX%UU^w}p{ JIx1SLP$pH˹M0L"oSܗmᔣnJX =2yP>cLEئNb"]:mӏMa;`00QzebHș.98mvV[775 i8~aq;Z^iآm6RmfΎϻ47&r\іY>|%GV6[R3\tyAJuJ)siSв4=b{hdc֢֕t}/ZD s[U.V{B޺]oU8pI>;;kwW M \c]7$,WB-}O%X\ҔXddHYZ(W TrGap5Fh|Oa׶_l2;XCP-|[0:76ߛml TA[/DCX,Kk= ^PQAƸHL%5!wI]&H~cբvNevCW,dLAiD^:DJ<*‘30xt3~n$FTh:J[9GZcJI/Ƴugϡ3*[;kZFzi2' cn)TbB/(K!g" 0!0Xd !m,FC" EtV #1LO$ʥ1a J񨔎y&tq s v}6MiBTեq\'&A╻FK:byJf<+rEf`o;Jl{gяZlw-`ײ#;r8w5oz2qL ]75.K@-tr-q%|5Oе\F͌(P~Gg/Plgz/' i{+=}m괷#¬1󐞰05T)>C+# &f=;O ٶO8Q4DhZi\ ì:"L$=ˬR'tMJ;JAjTzÒ2r+)z9nԍ2Y&6#t'kl-)B 9>>,UBK(# :oP\ēOP* JV*bPV44%OMS;Ls'n2G/YtԂu 1%C5;MKCh)5SM)KTR\Dr;{p*~eK40ݵQUQc+j)NJCpջ JJT'\X/SuZ'qų$t6,OT&ýobFb*QVy?WN/P[|vbꖶ/iLr>>.Yӛ}>ڮp$9O^)Ly3d 3Mg2..+Ф6O{[fHM3H}o- Xxq>o7kh}Ķ:6{\oypMEP0w0߷DVVZ{ z܈30&"""tr=&ԏQ  ts BTPhLtU؟]<)uA/ d-иV8<,Ux2D9NP 57ğcq0&O#+-z#_sfx'6G!hF̽Nh# O,)M&H茫1B Cq˩^_l ]p$se/X.U@AJWy+&1HGWnOaML=W߄FKo/[Z|QٖubA?rFFHFb Ba0X0a|RFbF7ǣR8CE[8m/L`v/5w1QJewO}RQT#ʽvKR+,ڵKWVzuvlVU{}^i0 /nP޳jhXkD~\(*4pܝcw-X*>qmY%I?jS=')hj8Pm^M\;T&fmFɓ6[AD+Bjhן5wϰC@M;=+3 J#p+:ͫCZ ,+g{tVɲm٣BC*bY )Gi %z.rDn1>nDgXA|̫/x:Z@3{(_'CKыt:jlܪ4us#9Y GN;Ύ:[wӗG&xvpGxv<=`6U3dQfд (TA5z/ Ct;FG$&8Ȣ+|:06"BBr{wB2T͑+K&smM;Elm+p\! 4'̢},|C:_.%;E븦H<"\ &i'DaW"%,[P GdԍQ`1!Q18!R{k*C+ YUo9o&`ɣ` >q@XKh2o {8`]4=7XR Jk!9W?ER5z&HȂ  `Р  D!0XR&w#P>;BTbI#š򨔮 /Cbfm2Ecrh[?NY'>E?B4|y%KtJZ_Q4y j1e LQCgP[}JC.傫)PJCIi4$v^ Xpyv(X3ɥ~7X芾3 3 ?+ ޼MK16+l뷋\/ 0/B7KN2P*45o3.8obMbO ?ҪzIK90n@ JJlЊTjB3,27mU)Z+‘l9J>Nuh(4UPsjW4i1u %Gcȓ?,\Z;jp \ ̰s`R;#VBٷM2%TRÚ[=Ik̭Cuh/.!SKQ*<,ј7uN+V62LOQ`$&XYW&qMEc,O9&bD6v~qZRҵm3NY<^U]RCIkބc듍6X;aN)-F㓾=f״Nώ)NԥPp,tՙIՍ=-OnUhqRwDfcio@VާhÏ'<%3dW,C:Ȓ>}^bɍS(7/2.D 8]CMeh҆< OY9f nHN;3[Lh3 ٶu LfOVr^-*%4 xAuF QqL70k2k5'aqp9Áx#hxOJ~-ؚuK*WeuEe0r#(/)͌E'Tav.,?W"me(ϝ [e>.=*DB#L;Prq;f'1Hx꫚ȉLlɤ^iKSK=Xd$ե4XETزfdQHm,oIAb~0CD"`už&2xZ'?;Fgaff^cpYM7ZfG:X!" 0B.`FB0,N$DH"!$z5D`Ҙ:[*˥qh|jCCfze99$&Pd1Acr:u KPG)MN4רTOQ$4Y|^k:ַ@KnS8oZ(x-(B`lރ9 J+\:}`q+5ftKv!l*g)fZ&)^-`w\Js;ʭYU&pZ<?̵{SsaͳݬCqnN;6ɢoJjk2 ԕ)p#3 P9ƯϪ@*=*.t,PK@߹cF+dLDo۞LR ,*Ej:G$FC*^>og).D>)ܭS?,#;0q5bM.';dB4!>K<F1|'I,3 '@҉Cu#̳%0rLKtEc88QwE++3ҥ$Pi2vOS?픻l4) 4Zlp0s"Ͷp3zi[P\ _-E:U+]ݽhcx,%/W^Z}n.aS3\-qoI7[Wf+=HNsTqW[&apk9Y# ISthȺ-͊IɋvcWzʕG۹dKAiAegb]鷾g',[3d9?TL>R=_d`Nƹ?X6+(^Zm-[ې*GFk63iQ:ݞ6E]˯uDARtH$wyW֛ø4&@@|K<<}5tl9zmC)` <"rYdp E~$~´8SlsO_X|B;-e;6ҊKOKč~#&bK,!Şȟ |MpJOTo*R~_a%Tn+~Q'2h^d$ 6#{.3`jbnb_NNŸ87&4#)}3]GX1z-, " Dwa0w|;x,V DP:'B~+BeR7 cpX! 8l%OrQ$8;TjTʄڛN̠ڝvSj5[IViV;BXkt5"Mj\nܦ1Us9|>IJ;1\+ٶ*+F+Nk9N i2ɽW"gҍ>sLpT9L?-\eɆ[\c׫QbZ73KckJa>uխLs٪k==+ }}?$-Ĵ,cD0J«9ors4Ӡ81RC.i7DX.ml4˪K;-0F+Kri+1b$3B-Ғ+շRJ: ͼ 9rUr~s4U };D_ rjqz]ll;;0?_6mm }/5phk䁐 F[IjhQ,;$e /bMc\0i&rTQm9UxPG!h1hNp"`_9>a^!;z-#Qu|-hyF8Uw S{N'ZPۂ e<Ġz֜;~vӠbks [ďv+JM/,ig6C?g);COX:\t5ύe"qPdf-5{Q K'N|g%0KKH PB@ { Fb"/ FcxL5%GؼCDch:=6L(KriUIOȨ2j;ϳRB BHFJM2ԭH6[9s ?$WʹR̻4MtK;28;tӴ/4 kENCNU+XЪHC@+hP9ނF =OBPx"O:&iҹ3LL>h;nXiEX9uYuV;RY3/V75lHv{} @*MW.L`}P2*#T$};эcs^3Kt ulf8NZ|OyuBzKCT6gسyS骷$e}>aQåVf iT:RV÷a:E6G^*Sf%k)w_y4UQ“S2n:Qu9ևxF!ͫ)ɓYɦy3Oc5UQgYB tE]{AYc szԹN>,R\^n"Ґڰ}m? [=,XV݃>(0.HF4%_+ok~5w#}v~KquCM"&3JU+*֟l:5VVMICtRwG#'Cw'qJtWvj3AD,DIzFeqd$"1&WjYqd_hqziMԗdA hM " 7x`B>D#8XE F"̊5$D`YL&-*"q'Ae񸔲mNRidz!>ye&Bes R?H*JJK9*p~acJPBB)z\g@s'ñ5fL+6Yem'kJxur{rTOi1|:ՇT-FwﯗU^s YM}%:>6睦';Kz9XO{1 \LNa ‘j3.`!82HAIPSD+O Cm|4H7$L<ֹ2Ϥ{}Ì 턄E/ʯt.2Irj &1-?z" j[.<> +@Ou'J ̸M0K'Q%Pi{4,qTօ5X¯'D3pJFR/m ҷTkVMe_2H}:JN)qg;Z+ڇpW}(lAPX$Ȩ DXU͘VƨBkΙ.D#O3 $wtjw~#dnm(f$5V*5e%QaU J4b v]GHd]lX,T4? *'U $*9(&tXΙj I@!# [Rj|@Yȟ.TN9̞D#qQJ `i:'D/;\.0A0Xc |N+ EPEF$<~Bc t:mg#BfM *D5^#)ը^]'V:UuTUV:_UlLJoK]BpR حxJv, VjwK)e;~,,Wdz>ұq͌/!7uYl;Z#rt9|tJj; mmo(P&t;4».ҩ9E>2l/ܨ=KꑥiҊ"*:Ӧ/4 ȮIƼ΃n-6( kzѷ e,= KrP"4ܜ !*J H3(k !+X(OԐ/:K:d>T= M- Ɠ?4JHI\২rFы.ڭD%#ZQ$@l'-U#UX5߻͊ŬՍ)61^Ie'n4oEmx!FX q24wl+N+ rld'3qḼ|Z"YrK}H*XW,?:qraMĆZ1"7QTF?eeIO'E}`1de)f1ZwkYAx[ؠ-n{J aCo[߸qdJɹ: k-+d5mLĭw(*Ԥp}EN~ۙ‰X9u94eOºR}q|}qylDнfMZeSkvgNnVͧVܼmpQ2-*]OՐӗr\xuw]ϴ3 /U~VǼJ6áWfݭ+3`Y_kN!Î}FO5RI4rߙn~y'Ҫ"Q8[m# `_'4TBc~I` FdLEĔUD$*H7 1gijM ".*\T $7]I쑲V*Ejxt9ahD7`?r ;i%^%bRP.qW;Vop=xb\(й)|x$J4g&Ex#rrȈɑj1 _Gƽc->Jt(&΅NET}V{bzd*pH]k. 9O4q9[)é$;Sq702..6R !D"0D;S Xl& :'G ^7AdXChJ;&岩,~%FqYfRcL)4#W)+5VcTd-ekt(TJM(Zq(R}cM*\4;'EZZq|-7ܯY W -Wӫ'vp}}/ PA7muj+~m-/{)l&X*oT~5ì/O l5yCo#o/-I.Dp \%-+BK?Q0z4G+?)FFdģP幬I@,RJT+\XRCLðp6ݭ+7Go4@*\o OTOCOp$w%RѸLЏ'P@3t4A7 6+4T0ScOt(ej?]Xtj~*ᮑ,ߺB4.S$Hb: & %8ܛ= 5< KtCRhN43k|>ﳪOs܀D|gTT 3R&Sma,SCDyRF*$L`֕aO9r5"(Uڀ;F҄bMn%' . eQ!9VC\43]TMܓuo CwA(׍Dr^VcAc՜:<.b㙃y:6 7"]+y)jvVx6LӌQVgo[GBR RKnjyli2>Ӗmz֢E\6NA7j݆iUyYօqd5K Mw\]ƾkE<+Ƶߒ}.LuW8d5\Ym[ {c svw=5c$]{`.fs4;W])ex;>7tz[`H}!&?I{71uD'Z:#ys`D}lO-Ť Fh`s3cs23~ΣoT(x;*:9I=FqFܑfAD|h+3+7׬ͭ f4쇂 7hLJVXq ]^ŷdvQX|?ۭ*ܴSzN/h8 _),7aA\ s\IrQ|=7 96g O"T589Nc)'.ZaDyQ;u~sEPxd?쎞4,浮vD&NH4!2,eKkPb^B7fo7Eȸ{Nr, ~,12ȗ=E?@Dɉ+&͝ci]A_X;VA6^EE`J (j[}E0W 2l_F]#*h-4Ez.PLDVeg'c:4Yl&oiu30@XkAyՅ G'eXa.4b|p և^{6&ؘұe4-)3z i+R@ ,9,?KVr<@#W,Q1i ` LN<ybL`صzDd7 [6@DI5! ,b<`rf+hbW+tjt+iY7!}`>01!) ! p~tQ%D9Ye: 0S W%#d+ŭi T՘hX&m Se I+F0&ݪDN$B 9ȑ'*6f cyz<閲ob/Z7Eyb7%rWf au(vL\y\7 qkB8OGADOI鶍虰hbt#nè%>f\B{ 'amY~P@z?3']A!8gO8L`zfFrUEh,alu3Qmc`0FH:}+E:|+ ,KDp`BC8F2؊$جʅlTdg-cl.&l!%:iD%ъ3)0 > T⭿. m$5B5OB h:bڇ蚲,Bp BA k p`Hmm `FBď`DS<㲢‘8@2EWmL`?A-5J.DI$$ khnDJeƎ`i#2qs >̂-bĒ1h^q1NLknIZ5J2yF.o#|bjc Ol hXh&G ) :OXͰ9 3,,q z;1,hc .7o)f~+bǦ1ȧ'IDl¬1m @MzFóoch1-欩#"" Xxī̡Dm2l\b¸"lMTP ꀛ(QNz ^:`ϒa\ 1ko2-"8ŜG/rFz?Xc䬤'L¼WgX6Lڸv.(CBr+DLFȟBL&01l ll &(f;DE18cSfIc/f&HK=rɯ"c6"-cJM~"ǒI`6f[FaZ|lJĤk'Q.y|<`I׀@5F?z 7 @I"Cc5Λ+[4"+ɧXO$;0$ ȆT7"p#_HTJiA_T/S -lstLL3"f7&n˲j(7*I=4c9%_+Ig r9B֣mbK˭-֗lx8ZNN:ADӗ/JzMG8C!NLB6Ƒ! -V_xIFԥN/y4Wהvyl^p@J0 -&p#5$_@ X`\s/TSBFrl;C'M(OMSI`)&@<5g9*nrU7>Sf ؅U u:Q L_ENl~&e\4ac8cuz N R;}cik [03G3CCOXCbeoڄ&NoKM: z_uW;: >T` I҉ -;Ed"aR cEur_&4LŨvP[( ^:4_,LNלf7c؍- н#iΉoQPAwI44SƀJt"f\$] )oRkCW[5Ml @jQOl C}ff0f]t z6MRJK-G-y@'00.Is:l[zNec f?kXzB' X۲^4 Bi'8Z#Dڝbwr-$z'ʦ˔Ǝ7H/@EN@ 3MiL|lBЗrV̊&EŀkHMԖp+@O )Jf܁>g  #m&iWԉⰃe^-yMW|e`/Fuamr VĝyiW;;-E^`di"OSDr|Ke45u&m2 C2ZiV4NtJ=fpwet@:ow#in7; [N+clY8)0w$tw*bu330Nf4&jFbl&Z`~6$/j9ØBሲVTSW["[1SJH^98az)&GdvV&g?=67,x{j:M $SXcu~̺ Y|7[+˳n .A2 i/p ak*'ۛ,ڼ߅ B:ѭGuLFPXL馓cŞfb͘۶y+@ G' -ېoŊ;0Ar:ŅORɩATa ]gldu1{L-_o knK? "2/њboUk!2 }G֛6Əlk¹zv:c yz#"|O;dai>L]FsuL]؉'и6E$"hK3³Sd~-e&w mugo_hf~؊3Y+A_B'2Znv]R8\+sWw fN`[ euoX( Ii 'ο^2]n. 4\,`OPJEu| `T8e" GOKmc&99 ΰN A2 yuF'8 |q"_B&ꀆ! 0 vy~h } NIf"eO讫#>02 Id(R ' 'chess.app-33/English.lproj/3d_plastic.tiff0000644000000000000000000062173213034414342017311 0ustar rootrootMM* P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%gZmVeo\nW;w^oW`pX<& bqXf7dmW-fsYw=ht@I1%[k`@j[@S 8[`puIA4Vۧkt@[w&؃%68^/{@! n۸;lOψl [ܽP?`$oAK7Kr 3$ԺN9v1ֻ(CL @r~GM|>mӊ  4s80"K1 J+įJ\91+Cb s=B$0#,2#C, Ky,@.$E͋-c0ݛ4=qK:|綨pѫ_ٹZJ-)"hE5daFL]m{g$c.үt|KY7=;hBC4 !.q@P\Z d:{əG, ]1LS+Xa6( y} ? X>g{UZ`] 576d@U7յ^;c~U9"il,G—] %[ ]ÎrIZ2W&g/ͿeX`o&L#K-x4G#Qhe 5脐CB䮒">{Fmt{6LԐ‚8UK6cp1NFjJiD2;.~̻@xHgH[!556*xHUBLOD 7␭|}qͨj0ќj> dHEч1NUc,$//$+:QhZN5[]"k@ꂘUbkAD=!@hhv#ճaI n1ݻQd. BTgv,&;'KrC1P^.)9E} / ((P:stvrFw> %l ШyL}Y%k *qY d7;' 9b坂^E[($fwA:r*I7gqk'I]fO mhlA]KWTū2|P@MAӡ.OV8@cpBFюJMUcBx-)"P,uʬl&(ЎEv^VU+G*ڂbIu\$ݹIʴ"',߿L6d#v>{kd6-%CR;+CUHe:hƚΐ[ :F Z0SM@OJ0]Scdv9bK NhD>.KI^ΌE(T#-x=&`fLKc_2Ei(7*x[1DO:HPYV<d͞n̤;MD j(ƤŒ:Ìfek@kDt#R @&~9gpgJDc.ņ\mQH# BpEfUg<,-t5pQЛLPP[zǁ#_ftQ DgRBniM`dclLie»YgLdldCVnyDq{ ĺNJ^.1OBfiELa v-nz"` Z LItjL{RF-".)Z\if=d]GSǰ/2&L*/$wpё7td:NCӫ "=C:m$Z(:= "rqGGT5ST8q*?P/[/<&tqb唇R)ha=sMP\1hM&,Tj?1&VnH&7f#QTTєpc.q4SfyFNdF^Q)DLs!7Gi"t4K&rj "uDO!$GiK"@ @@9A `@ ! ÂH`FA@!TZEFD h<"@J.PZ5C# I1LAdt;J!$9f<E)Ep!|^1D7J,9, U`kR`W5bIu-Q$V-u)Ae,J%NY3H6DJ)`!9>u#*Au)>v&iYlퟍh[ hl&k{ r<* ($2>)JҶfirDFdDB]hf"!99&Ne-DT%:[@+*<b  9F l̴ǐƢpUp2z# ǑY $8J (G^2 ŮHl¸F )$G ݃Ix2J5M3!L*/CBֲ7 (cKH@iE; gY#Ǥ \oQHbGV)Bnj |ot ^zT 5~J`*phU6E5F 35}sJDX ,B j(@bY)}=Ɂ@a(LBZL [ WN {* *5*Zk@˺~07a.g`PJO,phhB?$dBdL 2&EI,ZWq)*るoIKʢǡ雿|Pg$`&gh\!8>t#h&)Hcz5Sb1D($d{ǁ`1=whY(QTd.b5w? ꁄ( ;3P>JAn zDVY"`@ 8!+|E"(|0$rD#nDzV[(lNBdoV7W"䔈Yj-,H% ؐ[罶~sEBdQyת//1r 34eX4$ $y,pH_L+|\O=yzgm Il2:o3د1K(x _L*kd``a~ }=Mu-ñJ[>ot wHBH&!g$Pr;U!FMȪ.kR"UhkTw`"$ bSO:S4iRM*/)ӮCuW[Xfy&P$4@8`*L})}=  x4 #VT@ %f`PHH6g1n/2R2~ߴRz(%WD@VzI`Coi%. XQQe`W{TI$4(j#96r&5QF8 !kcH.'Rp1 x己 S A OiXOt\v9`Ϲ!@YU+[kq dmv&C5?aE哲j+ˋrXsxxj^aF96Hx#RPճ!w[a!шA1MZ$H[نC 0J o6<kRu#D1p_vioq(Heh;0 騭D5[Ƒ$'j)+ĝϗA(N8+hI hH ډ2Z$ Cf4&8߫ɗ A!ئQ~ȹ`!,YJȦ?(1AR 72# @ H"*$'z @!&2!  "$@ IAKUÐs 3#cpչSA :2Gǁ @ DX ,I8֋H2DE]dBk_ #'=yǭ80 9( Qp" ЎQ+(KU @!9a ;,"% 3̰@;#,ҏ( T% ۊEӟh"dV»(8X;;(Sp* ;!  Eb8x":뾀!(4A*yRQ* ~GaM+yZ6 ֏ЖH ("f dkj#3뒯KlA0#Tb$A SC- 1Ih"K=/+Clʲl ݈M|+ 7[]%'$ "[<:N KPp 0@2x7|U5(TP`~PE(EeUP@Н P8` CJtS+H$NױB$y`BG3# –@ֈ1' I Ud<ڢR#3k U$!҉}+P*ٻ0G`WS ⍠7DzL¨5D3 SX) U.ĖGu֝{Dyj%R[SG"T ظ" '!7)W@ џQHucaJM9/ ?1St |cJ2drU 9Cp?Y ܚUbXѨsrѾEU_p$E<P!I\bb1s.bnjXN0 1ΐ VK!< 1LcY4?(?0 8qHHE7=&7Mi, 0!# ܐ&dh c !݉=-. 0J]x(TQQ.Օ` 2یiTLr3(b#1P 4DE$|NXy^x|V.q"<2$:$]m5# X-y 7 "4W0ai!#`߬QP"DQpD۴>;`Ȗ.;ox1786QQ5>$bGӂI S#Ҿ݂سib-H59*9Q 5W<_EP^.|-N2NQbg/*vo,PSoD QȮn+>D L]VۉC-Jz{$/n܀<6P} شB  f9x>WҐTg[A! Rv IHATC[aT*hD :V ȵ/3Ԇ;Dg![Ҋs5j;i0G& F3*ٶ ަtcibFXƱؽJ- -NgM-4; ʚ),)m e9طp"Q0HndqY0}eĕzL "襟eUNlf+xJ27Md^=pK"is C%sԆԍV3(,g*ƥ?L}B6C! $[^SAO?}e(Y/8oZуRT>5d!*!$T2pO2_H[c'5U_s,WܙKIȺ*,}򑳃ADƦHu$MeJ aSQ)7 ,pʏdǍu=c_N3%-m)0Tӡ ҽv1vA;d5)ra Y0s<ljof80- _/u1tqpxJjd' Ӧ8ĎAbqVPݘ׬P/ZӵXegT87/^wXJ}`٠^9"s宒$|'2u P8""BL !$-(*FD2dR9$eA4BYJĘkD!K""Ȋ4P@A$.@ È!Z _A%1nաQ@E"2@ + %gZm!f)tʑ+`/rB&!(VE BYa@bQE"B 7 q׬\)T ȦT(AJ_VT"ө NǓ BwAdڀ5P EA~L P$U\%P|QBpY @\3 KJp!(k֤؎5+(E` xG Q Gy! bjĸJH("Е,: #!#ƀ"*F#8"|$* 3P)=B LX)#N ʨ#4#͚P3;'( Z: ´×5 I;8&;)T\1+ *.!K+D@ KW:Ӊۜ*$ƹ;TKR  2n]/[@ډ4ID Qjڪ,؞+ؤ( 4 D,,#)*2c) MbN + Kot"[" "*hWVҪ(;^ [ѕR+Iآȭgb+HhKcv6v:$bMf*@#U.15c6Jy_6l`3NjqWhJs^`Ski*Ip\<ʪ-.TDhKxfVH QK,Jx*5 ޛNB68儍iږ:=r];{7F` 6Dy1.dQD{De&CEA t.! !h 6^& VIzǹdZ,ޑ@7$BԬ #4>}u4 @#Dq 1$ YK ` MPSi$`ZRVۊ"In$A"k G2)z"u0l籚aAPJ_L XP'ڲCDT0܌(ARdkܟ1h UӇaP3QDŚhA,*^oL*`Uѽ#O:" &XKd\-4ܛG>BON{)+22ePP-VJ #@(dE` GsHH0eh5ĀGF(G2o+^e1-G$r28%209 ZN ;+RкG7 $$ F&#,pM,3?!* %3@3f9,8.,& R"Cs7M#' 3Z%QD]OKbEJ&%3aݱTܯtp,=` 1vx*;re Dj~%$VrG -g+$ή,gCOith#:3.$j-?Z b"_S%L,9M$‘C(R>/6@#%T2ba&bED%/W68a)cd !% ~I8TmEЇ&:"!*ԪSeIwvu%Ɯ b-NjKK]ðymjL e-6Ē _#"mFka6"3~ )T}E(8[Y]Nڛ*|t&SXN gI)y⛔5#UB.1&0xhC"%R,S08@ʋ$&}=x7W9x !"S83ML * Սxɕ^u , ^(2T3t5įbCφ2vb@( 0Q܇sN3;MXd=`#xhdMO{"90B)f:0X4B'HT(":B ^21C:jl(a$C-D/5:/ T9ۘjQq/Z%)~a* 4=,2œMo?2V6X, ^~hyl GC"g`̶T&< K' QhrJ|qK{+L?} 3-(cC0+:kBa)v15M H;@ U bay$ (kc7J{wx8AWHnJt%;n}XԱIs{v l<f ҩC̭Pq9ـuڂ-UKk/ġ!J?svKj΍`E05֐E#bPIso,O-p¨1@<)`# y itҫFKW fU*/jwGBM%DYq%dL $߀6 މ|iW~3 * K/?^@ds & ڦ|{ *ݛ܅ BT#Zۂ: Fb qUv-/Wewp~]>`ݽQAWWfS^$O..("3"4z]Ze+eD@!u"q0) 3nڡCor};6~XZ Rq |F)+U#J) hj;"pFM3B` e,Y+JR)D*Q°D(f2Lјe2MLD IPT ,JbVA0JJ<DaQT (ROgY8F@ϧn*H!B(DE"E8> T"fS1U3̩$Hh I2ʔIR4LK -"_q${SxTɄ@;og4w;]3BUpD::VrZdHQ*tD ̱$,IٲV]7{w8"H**'i:zƒ"*A7 #" $ J"n*.2 5CV* .,b6>KH #: 4 BΟ'sҧм0*2d &. (OL(Hj$N@J x,ʹBʪin( @J.0z.p-M,ʯK+2̴mY9(p(43FEKh:_;5l@"G֎#0,* 3&ih*,Mx 7D A,(mDR2򾱸0Y"(4ر,(u̸HzK `iD#(x M " b 3h*ArIMҵ ,-ؓ%N-S-0|<: $0矧b&,A f<-5ॻo) rNn6LFfH"v(~EKB:L.iC5 nqͥ3aI> W+ Nfgq" 2:Ze e Bizİ1G0=J):A\ᤀ 8J6Z!U.!t3-MoL$ %).̛>J bU$I}>RjtL,TЄeag*CL4N4&]aU-"r5"\bXB@pT^ %:FJ G*ȁ1=G`iZ,@V RHV _P(-xH:2} NE& t3e+U1 &F%1#6G3P+9wwTbhNNzEY.;eE.GON+,`%=.Jʭ r-9z+Ra?lÁ8-5!tw=XQ |:&"BQ d< ) I.%X$>EN'*l-(w3__r4jP"$9^M+ZVJH]+: s&%"PibdI 4WihTG)L)P XӚy>WhUk$0X= $(ˣ 0 A؎2"0Q (2Y8*%{!t$@Ssf=&/ U :}8J Z). %"I Սj #ni!:xq A"A;$򙕩" бg ʈX2+"@,&-6@kI01ȶrC. h +!i2 [W-Is%Q"/93*B 5< )J E .BBa2** CIA ԫ I4YL}!ZVu 4oZ`2 *@׍$T_ > !,I؂ARǚD LqZ2 V8  ſP ь53+*% |q0ԙK g 9q2*)P9J:Ɛ/q/=L:A9 )t'RD؂E,Y a 4|++=ガ|(< ,ۊʹPDچ+ Ԥ ?𩾓=qZ J::@ 3  NR(a{ aMC氺%>d%b XR(@ K0)zz+T0 ӵ};yU48( G3[# )؃ x$!ҸA zy/HMT5=<č:<ʕ0G9F{ĀH6N8]X*Z}04ڐ1v@n R (HuT@('2aP$ӭ?`!ZHPk xL˭uT5b=0iL 4p  2o`OOZQkւ<-H3b , (O(ȏkFM*K-*rFWY<$=6ȯ# H(4 pj ,Bx79;@4g#\_ը# ̔hz; P0C1f5TC9v 7Pʀ>0 mJ gHh bnxIbmZSEWYu 0gÿ́sSX=zB54Ҧ> `2Uٲ˘ #"PkqVIaRv(ȣ8Q sل޺-،"ؒ YMwA 8ZI:aTԚK[YL$?M= =:_5[']+PI]h[ iy{ '$ iL^mK0x z)Ȓry / ;F۰ ;"H x;gZX$(3g{igJך2HGѸXWHFh֣eΡo f gԄigR5ByLdrF&&~*Wr+Hy}L$h2),b ⳿c,G5g#Pt \Wu 7WF J$PXf3B&Tɔʖ,RPTU*cTSS2HdRI"GHH"Bde*bVKr$ 3Bˆ@ AB2DQ%-^(kp(T**Bi2 b!^KpR"U+2QXSqģJj'Sdt)T!fʅIR'=LࣆbU*e#@%P@ iaV*l6AMt{TA-VN|"淓hAϣMp` 9T0aHl~Gei&fh&ip2 ֠x)0p(Ϋ6 뤯 ,l*tϣ`t#+Zh*ރJH(c(ѱ$2H,T Њh?,*2z£2퀂[t#9"-3z=:n6ͭp+h(5B竄~E3 Jd2)P+* Nx'[0B+"73f 8.ވ)doⲚ 2~ *I#B&B,)#䆵#`P$ ̌UC4SBJ Rض }[2KUMK j24M2 kL^7K82*+맇$"(|$B3(KH2B R\C28HTU0xLLdM#fGK̴Xz:ԹO B"}6F*ȢR, \*2E-q%nҧVw=dA,> (M6ȈjgN̺ރh+I!e"X" '84l&(N D4+#H"t jMYB.:*DjWJj3Nm_ kzZ 5pΊ6(5qo$A62b=Zn*T~BHV0`D%cqnyEAD4!WxebNȋd[i C.eW+]+"'UשF f6ǖhanDet43 -B щ4>vAʹ2ND jP7œT''bq&!pԘzGio+5@,GЪu5s-g85O(L(E$(DB 3tH`fR&DI%缲) UlMXk /+!$3@& `$䏇 WS B`K?#Nf-o"CG%f]AAY-b3/RkM 6(Ԟpk-RuuTdw,xB(d)z# T5f i!a!E&a~#O LYG 0E4 /f^cTT=M%3q_ Qr _O(^|i DzL-| I9'=QRltI2a11Ihbh #F NVD $xE#Q &϶E,Uy5Jn"btND|[ j}H8fF]5/Tun\qD @<4BH)qݷPsʹpgrz`S3٨Ydv w<)E|ë^R2u8uikRP !d)4;eWȈ"l- ]ڳQ:Mh`#VBιkOU4DYKyLϜd@`(15+hM\<оZQ,h:2ژe,弍bTKQ2'WxD.Hʧ ,jr;#elC)H*"l.A d L~ ncAK+?<ҵ"36Clbj3)zJNjb+@gݿف"6ED7LLrb hi6 BB骑+芆CVRB rm* XCEBf+*zdH)&m É.'"B&҂{6ժd 240IY8 W&zL-$:|RpƇNmo[e\ DaKh( &N=V8U I%-ž[`KG.$#Me"IbC7L\;3b>ߢTGզ# ϲR b.C\Vj . 5> (# =e ̔%e& Kj&MɒC!PIe$2 gx) btYb5`b&#jz%*dn$ 9Mp N3P\7 jUD?Ug#!gɆh^Jbb>,B(@C4;(m2 /Ub]@6gOU4f<3j]gr4]Kz-\;еd߰G iԀ"[(ܖjJf$$cjVWHWmDh$4(5?JbԈLaLJt@X>@D$(L*ITӮC_5`yjk`2yi+O&sE; >hҮqYX,z 8Gh ~X1 !u'geU@A$Eu F)TXY%&Vk.I2 -n? zH(+/K@" " ( vk#/H3#K(ҪFh")iz S 6>ϥJ$Ixζ $Pī#"8 *-ʎ$Hb$ s #J.J30!:ɲcLJ=02?ݲ+6(KՈ%3"` D"hlR诈S0"%,4<ۄR 6"jA2,!N?!*3JI*M#VTCPvtMPJHal@ q=޹) 63dpJ)-!JĴ,۱pKHLb E:4# \vBJ ICŽ͑bj 뻎LMWj_q&iK WeCtb[.>F+YW(*"HڌI"26de"4d'dP33`%!*\RL㌦50U̕j 1b"n yw&+V.\V(aȢ 2'TVB.gU0rty D 0xWcw^ "(P>T5.wG,,; ^o`Oc=*`E XkN +z'Ac;iL(tXB&V FVO6Q(%H[@FfQsɇ!UwR65eMB"iDQ \j0ܒV aF.JD0*BBP:P^Ƶdh%IG*&KlIX itrD{dA9 D i E] PglD B?ӲRbBI P(h<0'&Ҩ2[PP uJg@Q)*ag44W&ѫ#a(Etъ)9ãV[m#tڜ31fRݱ'<˒p)pI#Ҥb)Cun$:["/ xǶq@ sjDoAv3L$$lL{u.ߗ&@S&3,*$`UU4B{t0g-M(aptHZ\Ymp;#D-?{^&6 rLy-Εht&!N있9/O>J=u]GU:A€>n]tVO~[ce"JYn6ب!VXQ=MJ!, \Qa<:PX#ޡ.Xt%L-GsLGp2RI7r[1ME؜ ʙQІ7nTFrZ,!8/oa{c:)xÙ*GȲ`;/pH6d߶Wu1dAD RN&i*'Xi.1lYHa `(B9HpꏅHb3Y-"j+3wP!*bDe#M`ERsc+D_=$a/UA* t-FP bmI4"'1$C`&l"b>UKdUdc=, J "b.h&i`BFX*co0B8;lF2FPbOm$N #&n -.(%K#o: I'n,V.*F-p*.k E=H 1/ʄ Ls 2e!J3l@`1e >}`pn1ǂȭ^Z9XjV M§&,6DJ,7(X+I/$"q i *njD$Tn1pz|$X[d@H+p?آF!œ*8,j/"P!k\&; R HTOL DaJp%.6 $l-0(C/l6JW&D{b<'e%2L:L+$_bxG (2pAplmLn2ʾ/!®"P0H3B̺"M".,jmK_$*TઝBW-B&; ɟ+G+&o$&MO+zm#*l0&qLI(5/. -+0VC#2bg2bz0還[.̴#`&R1"Jk^dȇ dBIܜ`*+!Æ,J i#c֢@g,`,@G3<:͜"Bql^Fp&G#KQˆ1e."@*%B,`1l J hrehԆ\iN +H҅&zRC"=*dn&  R%,,' لWDpgj2BQB]Zux#º'G",(%"BH}#®-"ec//E MID"BH>Na& *9dD-Degm"BSRJ4,d&B G$3*C?X' G&vjF'ޖ0l",ÏGÖs%mTT2^V1hpU1G'Gl"se=b&4c8\ qc"LBm(QC~6rvs -$#'EkҴ/er:F;56 È-j -vv62 X=1&n3JP#g+\!.nl$:γ"oGQ|L,D8Ral.C#l;p~cP*"Bl@rNzCu0BZU⚁sCjU"pb,Hns+c'EJilqIF(9W~9 *yKT^鞒l Ǘ´ I1?,S%"z.(#q86"ca,RibNmlТ:1wg:]y/bƠ7%q@J<#.;mYdhnHM `o!T*ƔiFDj!mI\ԭjE4GDl5s+7T(*CF0p~(#RNa-c kά1*i`&By&m#UPϷ?˞C6$^.Q=xmd1}V. ĊY#i$,)BAx1"*% ZEr+B.t5~!o sLAB.zNfb.] *']mhx϶4׃"Z4%ib^W7`z».9Dpf'8 :RPǷDDt H"'~$Wn/&KLЦ #*+,vBT1i ۷eJT$Dӹ)k=@۫L:cRsyaO" Sםp)GS*)xBql[<. (Yă(Jb D17 B'Mca /V1( +EC+Rn>H"#ꁿ )Kr͵ir\߯bL<-z+ LHҺț 1ƨ+$C&3s$ N"bӠ" "H.2J;(x,l SCC B*UK:XR,\H  ԛA{@4+*lحj ,O z **ND(3 ю4 &/#V4(*P,#%0QH0T=2B95jv*m̐Xlղ !.Eا o?5 4 i<(46.KNуvCzV( {҂-$ P* K@m9Ϲc\G,ha!b$}yeRsuh@%TnR%ԣc0ĎeX]9BCx͙ZFTE "ؖV;pl`%!9H'sF[lZ$Ldj_\9X n1ea,Ml3 PDJkS1 @)+弜AR!JTxM(ˋ:L,pUIXp]Feop9\IidD a40` Yu&-_,D=`t |VT,YEVR!a)uTJlB3(u=MksDTDBQq/(;o<%`F2W *P ;""|F&ɇ8ʧwh3|%rGd,%?#X 9O6PQzhd#`\̑/@n) t14a @#:D JT{M2p3KA&pҟQk#pca97.ᵳ!il!PA-Up+>Oj!G  &WI57!T]^" XoR樥$WĔ'H$T*i[zDK?6.0[2ޟ.lyT^})H"RrDjs֛bJ 0BlWBזOY T$p -ΓG%EitHdLt}l"&$r)1D U,JTb/rK‚b;3*>Qm)#5IJΙ/L HUnz*Zr0q/)[#LPARV"F "SmcE#8)"C*ۭH'S"j cZA| !O?q7>M: @$;琚x!C>ɔSַs׼{kD*' 0(½ >7D P Q $+›Q:$ +;B/7>9R8J$qϊi(׎!X`j .7„5C1;Cq0@;(C뻚ZYc 2!2CKdh[ CP &⋩Q ,Oa,/Q;EShq!G8Sjj>)$؃0F9 `̐h60jAGO;ÌrGK^Z 2^;*儑]B$E3%H,+ir! QqRf\ HVl5c/C`͍;-!h< ؘ< U`:ShXC.1/+8Hڑ  962x eXإd=Y5ȄAq "s'VḤՌ6"0Ƞ] [\E+ߋ)b2`;.j==fDyR@/ ef,qsN4h\J k$}*5y[[_j Pa 8E t8MvDc|bۙ7vV~b<- =,ZB D .κEvЏl4W3i-5]ټ× D i @ `Is>032\?UX%Lk1ͷmZF$ƹ9+Q钶-qlNF*ٖH}k!)H9m^.*S`Ml'?Zi&\(̦VyTF '(NiqQ!XSTiH"z\ȦMd~ AxF3Vv%~hȚ3ϸݙ$vlgRBP0bmlXnoe4TMM%Eiq7 uu/S<YO^uVKH\GcT)qz& kY'ޯml-G 0!`T>qZCԓCȢt >$)(o> G8YjQqJ1EvrlyƯg!t8믨=834Ww;D%M0?m؋C?[t )n>ٸ4:)081BJud"kpEaӢB\FvrzMJHJ9G 8pA(A)-¶&!KbK_l#RHKn[z׭ﮭ)y6s5~Ϋ#9v-4 /~#^TUOP1جqBG E|X~h_R]Zvxo/kfh D@jy'VT]{liMPE"HX@VCaF% ! *J0¡R*B2HX(Q E% t_3HhC'$m=HB(B<d2Y| ?EZebE&т$r;&"$ 2(^]H98Vl6R刉`aT3allB=$es=UX ߡ`r8fh'7iY^<[x}Ƣoi- Sr+Dk93sCzp&q-R)\߉>Dۑ\] x2󵂎q L1s]<Ԫ}C# J4DlqlapLhUKzH:Iƽ+G7@2=ҍFR+x4:!փ+0@B8μ,IKP)́9$- L$4bV?P[8s'Dۧ,|GQbT2{ZJN|`ʹT6 iW 2 ;4EJL(4GK ƌ6$+8<)#3BPh*iC,>%:Nd:ɻؔ|RȪ样zօRیOȇ[6,4Ԛ+X%g [,T< <ݡ3r9)32`[)l.ERZ:i9}KZ+V7|74 OTT/W\3xr[RʽD7KКTd"[)z{xYjp'phY{:]B4= m6FyީV5)MNiY;OXWhKP X\l|(""]D!;-.v ' ' P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd( (6N'S{53}GR(T%2IR4ڝ>WV*՚nES5[j]V%n\-Vۥq׻}_V% y߱8^ \%w}_/ ?0i:fiHd:GZέk޽ů{mӣmz.ݨV~m{ p\G q/ro#\)|-CW=Q/C/Et?UG]oa]cm}x^/~Oy_g~ϫw|A pXDBatF!bQh^5F#ѸvA#Id2y$M)Jҩc/Mfym:N?hz5!)eFRTZRWkcY,V[EfZmusnWky^/׻ap8|&# bج7#eqt\#3IsY=h-FSku^]l])rp8>?sy/?P0<{B0\'B C07 BP/?Q49C "R4#RL$I\&*2Fu.G-LR2LrR247Sl6Nt83:@O ?P,+JMEU!F4}%JҔ'L0t=?@еA=OQ5]SR}UVԕYXUՍmZVUq^u@S7bӶ=dXMeUf6}2lձmn\Vpܗ=tܷ]v]WmwWux޷|~WX `^8~a؎)ؖ1}ZݧX9cIQ*APhd& Db8|V%EQb=d9C'J$ҙd]*Kf2i7fө}=O(SGRhE2T*FSkv_X+%bYm6{Uom+u]/W{`o<aXlf'dr<~W%eY vvh3&Miu:}VYu-mm7[}W p\~_qz@oAp4BL%pt-k{ sCEđM,QQlSő\m‘kGp3Go!Hu 4{$Ȳl'ɒ)*'J2.Kc1s,e3̓D4͓\5Nl7S20Or=Ks@OCE Dє]B#BRT)KT3 ӝ=N?QT5MR%USuMMMm5YRՅmZV4}k\VsYav ycM_صuVegvkͫmno\ qMumw]}xޗy}Wߘ a*J!8b ؂-~3x;5&=dFE>[^]euV{y}Fhf^z~ƭ޽vêzˮŵfo[|p '|O܏6rG/s;W;=tKOQ~}?}?g}{~w{<e0 @ <.@dF A8-0^ A9!ЊB8M aD$P˜Y t1CHe a7PC{AqWH&&DQQJ(E8bTQ^-Řa0FHcDgQ6FbtJQ69y$7G| @H9 !dDREș#tN%D hI'RfQɹK'e<2RJM+DRVJm,e2\Ku/俘SbJ-&<3e91fDљSJfMI5ӛSVmy6fӊpN99gDϝSbu9'|3vOY5S~O>3PR PHAl.DXZ)Fcn?HRY I(JetTLBm4&So5Ш3$CRT(BQTJ=VWS*UZ^X,v*nhmVK]q\[uxo}^x+8^r\_'fV=Ƃ!D5ZfWl=qm{}Nqo/t^[v{ox^]Hz8J}_] APhd& Db8|V%B!H 1~F Ȥi\Q,˥2yi0dC!!E(rDeNUm[|p ʜoO!q3r!!R]=|Wr Kft}RZZmtZs\Ѡg6w{WYǣg^N]zf[Ò~oIW/}ǍfsiR/y5AX&k~I@g`s%Vpz:x.B\rw0C0BM!|=!&G\K% %b&ED"P>$EOQ,Z'f#j(CbTd/F"4yr:HITr*D!t@R";IHc|o$$ԭk D)ܨ72JY])|2Ya-;@3!32_"s-LɃ3t}PeAH(fSỉ;0brM 840.uNy8gD zBBlϹ=b9rKZ .%PBu0ډYF@NrIj;#›v1*FFB[E9Rhyйg#)ko=SJqO%9.FOJ2jO#E[(PzWT*Q N37g (G'c y€WY|~W#+}0EWblDy9k6{gݟv*ZKEg-EV@f%6+݅({Xk%Ֆպqɳ !U9+"lr][OعM;{x.ߎQJ^{oٻ׾|n}쾷 Hr`THݭȸ'KJ"sOih}Ó--k[:?xY G-.){kLII$c_1XsA\ŒU&\mrhrͅ3.hf$0TonJgWo܈<[sdy0-O59*g;h=/ޛZA}ݪe'7LZZKmgZ^k}h%cxh-3M˙e|I;FӽiF?Y&m-kf8X\nP<a]烰ݑ6{waԿ`^0{0T|.p+QlECG`q]{ŵ\gq\s+9gMGR ꦛě̹.\\FκUQ8wT9ĎrtA=NǍ5֊=Ok~DfۻE܃WwyPI38nɾ.1\'~k63e9/$}k弣㼇>s[\Xol9|Gdl|q)߼^^cy;W|/v6.h[}^ʿB~]e???ءm6oM%i q-NugN .TxmSPXvSWOPd0hjL0$mLxj͙K*ߐ0B-ڍܶPL ~O) p P J/(P ,d q "N Q EpgN"l@bQQ4kh7*q7H}֎QC[>gq]1q1a}?X1JwSO1nQxQ#.@D`GLrL4qyܛ,/-贯Е2OD(2 R f=!Q o 1lc|)|O!l۱ր##%2W ]&2ɵ 2P,!'s'&R) O"}&Lҏ!"6rm]2a+RB@E{,y,o-12-R.r03qr-r0s 0. =0J$.+2S)+'2+*s5*S8ԗP p sP1KhPo+6PN g 0?py5 ShH5"nq) U ^~s::;934S53c80൳<37*3/+3+s3`$/@A+A1AS 0$4B43Bc/oCACs441(EsEEFsラr"")/)&=%3);tz~2HuI|A'tH&tJKtw J92"yHt9KGG)M2Mt$ԗ4KPGI5MMoYNKhIMJ&ti>k>cE1R5?c@:$#9B!D.u4;DOTtET .bg/a5k@uSTOBuWWD?sX]TT U_XdUZ4PaS7?[P[RuRig)m8y:p7fY^4;4֛=<;] U`qLuOM9 ]\ԥ*F'k+gB -G4C+$OTt2SRe)W4-N+U[W?O;aVu{LT4Xg_iY =Z,PZmڨ\VYUEH57cKkzu- U/ :NSNx4LV K ! d)t¸q*)G'cccC67Ay^[Y~e2FQc9V1fw̳9h/.jYNjqqyKa!0XF KہiEsmAwکZ]9t=+#.[ONѲ?2 dp~Zw俔 YcgƬנCUkpX>M#R ֹ2HV A7a)A&Kjla8=@0dI PQ-]DD&ͫG1YQIDU\;Ɋ!XMWEr;e$ZXѬ8DU #Ÿci1eH^ Ha.xoQ2EE>֬xpѨF%\Pή8ĥJ;IWe3VJ Ra$YK7˦ < /f#63xsi3-٘]+M3ڜ3~j 8IrhL9ƅ'd—ӒzAVSwyڅ`KɂPY[A D:*CeJQ:-EJxOG² w1CVN-9Hd85-.ڕRNy!7.:K KJ"U tѻv88媄<­]:ɵLڣRQz\yWAbo#+ .`$ ͬu 9\2a獛VY+ElSKh/(uB8G( 6Yr[ɊRl-JګwUo JZQUqі^*kw#7^FzuߍѺ;W NrḰmQ#]I_2_\p?+_irk`vr1Ԫ׻_WW]L}u!B9ۓ&|Ͳk"dmɀDzXVqO:aʙ,2j/͌23fWrTnnB,)e]/=\h7^^ jõ>Ϋ>֝?MYe ?"jr?̄IOZSωxUU,*/aEΪޱlc#4٧#SJ-m;p-S*HMkJ0R`9Z\X]hA$7A8xưlcPo@F9q{2Iq.IlδA&P<d0 q`BX-W1 qqЍκx~L.-tۯZ,2Ň(l- T opQC eLB!܈'Ri %"#1xDH,9%RM#ĩp]%&KؿM$K!G/( rR))**2)n:adb1uf_x''nei-N0[,C-2RDѐ7̗05/10L-0P!0 2.l03K22/3 M KR556]63i(҉ K%@}80% #us78夓%GS:;w Bӟ$:#`b3m>3p!g>e>i>@@OK3o %-EA+{@.ѷ31G0Xd+ɱKB itC6c!CTUAtY2itWEDEH#@UAG~TSBqTkF)CGIyAD =1F+K3KS*6! %7dOrs;2hOMJi% {$$/M%'S:OMT&qq'!䤕R"RsMsbORC"C8ŵEPQӝSr)N]aTSR^2KpԹWtW) BR/3kGD!0s=2PUZuSZQ-1ZX#[D˵U\*[KS])^5[Z\ZU^rA)}YA_50^u_vu]4%Z }Wc`adM>N"KeYeVR^J K?S<%gV}gTC:uWhztT‡iEWU3hgh^hbhjv=*Y!qg8i k7kC#cev]eanVennvo6Ed6df@ 7r9I5b)\u@!@( `fs75sw9s=sAt7EtwItMtQu7UuwYu]uav7evwivmvPaGE,{wڱbx1]qULoz}oVzz{zmNn7q3UwՃXtUp;10_`'[ (@ `g%z)-1:5wc~nMLR@lN-{8Zmfk 6qh7͜4 4V X :zFay::Ŭzɬͬѭ:zխ`@1`zɭݯCX{RgU]( %w:o{%{(APhd& Db8|4b! FD!bE2 ~B$IdG*G9t^g2d[&gJ bC!e6!C:PUVHuzj_Xk;t\zpm v.z]7\B B!PcyS#Yw)h3ٲ @2DZ^[ܶ:f]n0:͢hxZ>'Gh29؆1_=J~__y*L<M_`,V_̇K;vD t/!,@d@[ *~|C 4E Đ>BQ@%"mQaHr #L%dxb Ja@ Rԯ,2-L2Lr.A,B4sT3K3d=2DZ 0$(aGQHQԝT1K؋IS%OӵL"T8"µ A-b A iYV5k[֕q^Wv sa׶->쥣f 0jZůe6۷)pDX!u]7]vy]Z; \77nٸ&o[XMh3J*bXX-5u_X=[!PiN:nd;Ls=:7M~Ͳl9`IRnvuq)Q<- )yRK!-g1rJ #(fCuZ/jؼݐ t;}[55 =Con-\헬{ o~Ϲmyޏk ,x}ị!ݩ'x <,ce@ (*IA 2 A'Íɓ% 4*0̚4K aiA 7}b~o F2?)@!4ؓ$Pk 8 E*yNmj.Ec[1f PVbM (SF:)E$ٴwR<[|eA+e!c,vFH$J!e,j*YhI3&ܗ[PyHc8E.DVt %-%R^K9m.%(_A3u1,.eL=3l=y"H"$e ]94J<)A@hq֝=\i}OҜ[mQ],P4@XQ~@Rc)6: n$QȓGB4 B R#RW !q(~e !u/'ė|:NP!P:f{ /$A'j:JtVyO>Y^iz>[koY+g'?fl] UB y`%6N;*j-VൡB0 B,LrSjij)rXJa)=HQIH-TzQۍGJa&"l.PFtϺU:Ft;elU y:N3Դ}TјN:CͶ770ؚ /9f3Y,0 |[8Nd0,)D\<18b\I)_ ~] cS*V#+%fA UbS% NFS9oeљD҃j-vs25"=RPM65sRe5 @nsj)ŹARKz-#nL+Ph +n!K_ )󊦰Pj(ek$ D;s8e eV[+ݤ = *V!?\;xeB{UC]rn͵kRXMZ6aq];dl8 )P:p]q2D<+Z8u  ZڟR]N89NC}S9*"^tO1Gs]%93Z2#@*ݚD:Fw9ӣvwMwdM p紷!UrG|'lz7۲2Swd>݀n *TY .,2ub 0|6xD+}_ncɓ2Tf ="z^Tm"Od]8e=q2H/O\je74d?Jѻ'gvomm#:߇B` 1Nzhmn*DnJ=ϓ_EATf\v0.+dm+ 0g7-ެm# 3pMN2SV`l۰pt|}[pUjp&u</C "/ b " 0 $א>kҀЂ2@j:Ps-?'r4pp&mrqON|hhJ.10m4,Nƻ(6K(aV`hPqT) SKfK澯h,R`fQFL,l=@"1qFt noK1iO ѫ1qEL/T̔^ISf !r$h &z,βt9Dt7D=D-)E$T/FGx1 H2`@ ¼"(؞t+Jo|?N˰Ν<O34L3K+J*O1:SM/NN1B3ryOkcOO?D2-ܳ7Ҩus54ж2~3 P-,Л g c-GRUU5OTU3 Gp 05mV{UMWܕY/UXu[XUKKFACSs1S՝Sа#-F 45 5Rm[U! 3T"-0' 5\tsw F ]?OUs҇^ P j5NuNV3` }f^LKNbX&JbĹb#L@44e aQQis?Ԅ]G$b/GEg1gLP]h4[hoFuDDVCVi6ivj6jvD1EVhT_kEFADхgwlvnǑGmvv]m d!dIIyIԣ""Dcv5L3̸HԊ3 ~ 06i@rjXŌ1̐kt+|#EDM8iXD4?kxtx$tŒVHei!"1"v)@ #r1AV'd_]sYe` @$dU^ wPUم{^y AT5j u5y 5 Y'UyXu}VWٜyݝYߝ2W^6_U9Yz0㡹۝՝y}XtgPp|9SY #1u54ս m]\m\) sr?9vDzڋpp 9aD}aZzMvcC9D1:cHňxu:xpmX]md$Kf8eHogñ LO@F!4`hxҙ._2Z7 )YVjGIk;?1B6ɱ;vAHae{nK2o9/t[J&wKcɮX$pd GA::ygj 5P5U}\]Br0-N d٦7~X u\D7A|;0$3zwᢹբ|aG9z\p{y9|\Z!9\]{z-}5Iʳ_;OUO:[* #"%\tvBKBV' u8v2|ڛM䍿;]]ѽ!Z k;`FN9NJϙCb}BkDaLgdP)5eqmRh@fm }oEvd]ax]Q{U=ڛIٝ۝4~}yy Fs[.a}߰mm#Hf^#tU,PƇߙ2]6hthˉqϥTp᎖]B)=~=Acn`c| ξY| OaT#(At/`|3[<-zCj: 缙#gy ~W>|aGSľZS* Â9ܽ<[XgnZͦ.zo8DtW[pU:Z/'\YIZM?Y]_axiMqywz@. V@FV*)ŊֻZV luͷ{nl c5[8€;/{< i r)E2pX<& !Ј4bJ5)ʥc0HDaK'˥ Jg5Mu5'sAv3"eB-"%K)T-BUU5jK"UrF8DB3KM%lZۍun {_W˘LC%a6# b؜^e9lc5a2x>1%ټ(0 6۝oo 8+szΗ?!"ea$g Zf Nu:evwKy8wz^v,@a&D4-Nϴ3;"µ0E2XWฮ!4A2DԺ@Zeb* *,X3"\%詺eaZ~jp@+β*-ɯŰB*mb(ÔZ~nAn{o[6ͯlGl^ģ? ZRvsZ79#:NuJVvuٺv9`U-:/=.0 y>bҹ+naxsK4{~PA_|}Wz^a"-ua 9 mBЩ yZV&(UUy "5T!'TS*P xQK"#`TS1DanA?e4A#%P%`7D+EUMEq $Z:CT a5HiRBG ,'EGG UKP]\+rʑ6GHʱRXF"1;l:@rRJyM֩듈l_~[?GkPf"1Y1{zgL٠f!`UPKh Bfb+sdRMd<FO 8&ĨOb^ҧ1p BQ1l.@JBId2D(u$ĹFgjѶ6Q*OEiQ "R9$]H(&SRavf@Ъ`DP(<.UnhEa,~<"Pt{lFCtc%PaY)dEa:b#;/ ໷xEװ'nҌ10h w"FqR.<`hUeUr .!AVU]Hym|Y2Ic;$p6ӽg,՞v@Y*&lEcc>y^zk6&+ulfZWFdYviZ3 Yᜓsw` Ӭ* s4˷1ilU Pkq It;J6˵Gփz'Lٴ:=jmPt[c `3}Z@g62'WֳMc3K@My^sڕigKea0%c@g5,=ew6\9^Kޏ`qIߛKyix; ,&q6NZ+=iO5֣Y&@FU[pv۹o9V #p8G)3̚gdC [}D)+RuֻQV:wQOu.z^O0ҒG %/Ї<7\Rc+`r(U {l-G7H(Z RS.|횒=jX럁_QF^^+bD2l]rְD&x.GX`VʩvgY(#!07Tie4("V~zWE(餿.ndo߿us? ?b\?T@KV+XN)\ *3rL "9ꫦ+6o H:髒2=7+)jB4 )~s%«!,S"B#B,1*C+м4C3|338R+@DܡJ;Ӽ(8@E/F99@J;;;:RDLND*:j#,QJEZ :OŌNL;Z:#KċDlEE I>LA jB H"T)1!kUv_XlOJZmVeo\m烘oWiܰX<&ޠ*f6wXlW-h*vw=a^,y}&کL5 6[ gw48[xs@B0ωt"}.F sr;=w}>`j2)$ c_ oA;ABl#PB0 D.H#Ġ+ FeƑm`H !@dC$%ɒ4&JU1+2ĵ)ķ/1@M3(9C3\1 A,OS'?tc=E/#=o=QmGtԥ-I N+fGSu"\*p')cX(ZYR6m]DMc °5EjYʅeZv} ZvͥiZ  :(r5uWhv]uy+^-|+b ;AX@Fa8>avA!a)ax+FD+߹6Q}MYv[f~eyiQc3bx^.Znl_W-tz]NŰ` |Vݱ[VjVffkفR"p pq|o kr|*hDʔ5jVՅrOO[GEUtOZ֛SsKHC߻x!= ï>z7z߽;{_ $@1DR#*?5__"X qCU"H% T  X5~B= ,'P jCr@ɆCB; a8VC} !=!DXHAZ `"dPF'EVQj*H\v&F|*FCm#t9:C ` 30GW*pH89d<Dp`LrNIW_ƮM@7Kz3A0£2S9O*trXJm,C2!˩{)G)"P j;ܙO}׳2fdzoeDP$T NIO"ru VIOZA:RSwn-Emk~كVkFȹ\-jZ[)u1͓5f °bi94*aMʈ; `͒3QgUMU*U=gPa24•._[ו&T) ݣTbWD-҈ Cv )sN:ɹ (\DdTMzia6+t w!93ݝ G%GM{3vigȆ Oo BB*'X"?gy,Kޫ%d "`@3dU6ݻw3x=w)ܛs-h#.|+jp[7e,F;`F ^,"Bx!U[9W͜B&]46PjѺ=/P-QhE9VLir zYduα^ѝ܂h|;;Ιo)j%sE^ۉ\?jwD8zS P" $1WMܝRDk~:QFXC'P)bYwJ%lI𯰊؟Di}dzا{Uc4C`b8//"0$09|rT;PF\R-L?3LǙA}3rk ~|o(L@0 n뮭&,p+%:H^8 J%k\t PUBv'R* X@*XİPtj88bea 2`P إ hJbͯ ʒdJ  `$mސ p ȫ꺬 j 0𠭱  F p =zq1J`F!2q@bLqN`@hg:5 KDj%G_Cx7ž9570 D#>)@NQlkC) „!N ͏B ,o+FLF3> r3 /~S!oz J FF2%")"5"3# 8Rr$2$LRPSXTG}ogRl1ܼE&ˬ̸, |̲i>L+*@,A+ΐ ›n Bɼi2Rщ.)`l`fӰSQs//sQf#DaL >TnE2.?2m8P. aV."D44Ne5J3*& 6Mhbʈcs7e7ph* *  ӏ9pڌFT16m:m`3a@" 5s5 r?RNMG2,¸ue,bdB fO'Jrk&qDP[  ȩL3 g!GLM(y8R : tNhO NMOM1!G$$MMK%KW%Ը g/04&=JtJ/*(RT)O)oGrEѦzlH4}4~qHqW4XbcQYܜZ4ECD #fs 043u[ğ`. WQ*1PvQ+-$سV* aЫ`v<3X]z* v Sy6s6a%:6#ab8ccӕ9Ssv)d#dUa3,` ifqguF`FA%^iq/i5i16(74T5<-W\6\vBf)Φ"5ZTIDYOY) `H5FAoDoep6pVoAD,^l&:1sH, tu)%TČ `BQQu!#ON-wwowyxsxWw9v7vMQyJ7MzWFTAR743S/r|ʃrT(uLˬU U5X)io ̓a,uYMEVi*apW, ߂5M+))354">04*XMBÅ6W 2ء#X s*[3/3 <4͡5e1c7u78M9cd6AS7Ɋvb؛:c *g fnɎ\A4g7tw2+?3\g 'jI 8Y)tDB{XGI0qIBD&?n7Y9%nP= w+@g{F{.GF)@ s{׻( BwERK#OǝwY]`yLckF>9vOOZ wz z :tP:yy7dBh':9RRVȅ@JNB@!8`7T}~75[w~5YkXP)> ǖycڳS6zU@(}Cz(y=\kbsu6h5*3foAT``VpfX ހ b!bsc;7c=AE [RVeZd_U{Y]`eG{C1MeSMd#[ {mg1QV;hh-1-iv"`]%k+,`iA.|*?zWZtR&z(e'BYT;|TUE5moqB6xqp1,yAT@ʖ~o/!w6,gW6[ z9uXa < y.睁 :vϫ:ꞽ:A '2TY{y~(z7z4\ \ɿ!$ӿ|˟+)?, ) ?A:%‰R(z;r F{< H] w?Uzu~O=E#WU"$w%/~ŘE_x>վ6#5+XWupKA3UY L ୮ !H$"A`h( C!P\N%E⑈hJIA""$29,O,K{UT 3EA;\vNS2J2h<ѝZ)iXF0}|* IB1Eow{qܞ//|Ds=74! F Bbe|/'ox>?#>O?"T AФ# p3p: C=DqK$Q !d)aƑ'1kGQ/ e!ȯ 2@C%FRt(JrD%#Iԕ!KsLqRK 3[⠢MsMsBn!eWHM= \3`"0ЇCgka5p̍ˈghsQȉQ4SBzp  A?mE# [sn;7*]te4n8(cD6>'1AHtB @D$dIE.%lrJQ̞R4|$SP] 0fScVM #pd Y;%e^'< Qs@(zB1V&&aLP0â mM8D.¤I5ꂳF-5y<'zҞ6y-V\uO@h1wNBgb^JPDW D3q7fޛ,)MiæsI E C"Ζ% ȥΛK@Y;g,ڞSz٫Ph RO4)K͉2&&会U0)L)$ڶ[F\!HJ {U ( 3v/xb#jػl}>` a$usTfQZ6i%:Zc-oy%Z7RK-je*:߹]-4k` W!8ZB$ -ǹ9"tFB#O =3Dw+o4&C8qwA!B7碼 EI`U^ǽ mR@hHxB Wb(ݓ.O?ۻqn;'Z`Gv~oz{2B`o@Yyb+Bøx7!`4IxF&z]`Etmo)=vr }9NƇP&||CA<_qo>C "0ȋrBߕ|&?OߕF TUf"3:6)qB)i]&TK^`’&A?@m$ ';4{FXA<A1aarpAXAnAW(*$#5$'vBZ5''J!B ,[b k,)1x@*aKk mkm:hC :*;7*;uzry?c+?'i{&CĬJD)H CDE  sskE{cŀ"PUß" <)=)dҦEK){(etΙf^=aESgOgZ?0fFZ/Fh E"CGi]-U Li=ERT]K #Tj+fZ ' jG4M\ٗ e]ə.d jSKYBIkvū L!P/7qII7' Zn#69"d;V82G70 ~> xFB<+iF7l 71"$>` *yOPCx_ y'O~jC"B" o=t(9 漷CQY<J S2@q*#2_xOqnTvG w>O P" b'|ŋo'5+WۖO\/)m⦅3- 3+1!1?S1p!Dl A AtI00$v Գ .r׏z."..%\DElsbȫ@ɒFFP\ ry NB6M7l QO1OtOn_OiP.mPNp@Q1QQQQu!Q#QS5ST *MuP25Ur9U/b LhL1QW4%rT)Ď2lErqXR(2J&O>݂nܭΒ[U[u'"VVGUOQ+U\ԗIx6,1.;D^曒tY^^ @M5a ﴭ/ 3=)bi 00eY>%??񑐲Nl o @ pp%elJWDG4XyO_ ϘNr`@ˣwKW_ǣc?@( mבI 0Bqwz[Z[]H~'U'@pWWX_|L2T=M}Z5D`T PϬѭu8z宺鮕'!ӯ~)~82F8h6>뚸=7U9R 5ju:|Y Յy'X'Xr%:r$Ti:m[qZyZqiI;mtMRu?X;{ϣX)~Q)}]û鞲 E{+{˽Қ0 EAhnpn mi`yKVCdGFjP W-9Q7Vo*pl|K\QS|Yyuh@[\;|?֫j|) Fq 5Y54٭lsl a6w=6b6nVjojvp<`p̺r rxrx^r,Jm\UG}н!\}Hy#[w;qH;wW!yU*6@2[RJ 1a{#*2`|}uzq@ !3}z9 nmـݠ0(y1k8'}~Λ r &=uAMGUY:H2H$cx_@edMy'G K'_YcB!3%~AxkyR*99%l= Н^i;d_ r;Ţ:!8ݏ8|♥"A4}pk Ws󑠩>ǒ<ʝɀVa7?y U[]_|c9Ƽi_#yfHL93Afm<>?霹? f'l y4py70i^x?E_Zߩ韯:IsC[/W{vGx1cz_5   A2 !񘰩Re0dDCʆBW*KBg1+fR;gVuhS̪V3 B:ΡRU*:fXV_ֈ"a2e: }s\[|_weP:2!v|~Fd2Lvc+zϥYD:xvuo!Ht[V8QpGr\2sz>d`*%2JYu4Mߗ^c"JG@pEPC#A#BPHd2"HC)DHF4ĈY D\O#Ab "( G HQ#HL"Ix B+Jrī,Ի+ fbH(sB63L6S7! 7Ns8ϳ?ͳ A aDM] FNU F TU$ TCMaC (#T:{TUMV }cUVu%iYVY\r1kjIaض8ecYVEfv]hYijZ}i[Uiڡp",\EsMt]W}v^vwm;_"wמtTRBka6G\~a؞#a3w`5{^|dFGy Yhh)dAhٶ]ggY͛gN:&b3]i^gXjՍ]V5(S+UGMI%6 tE7MS%Oo;ӻp[ M1'9q|N'r\):s35PT'A?RtGtQG"Hc-ri+ȝėɽ{Ib()3!D4>@I`HzOzOCz'èUA A*i2xpML)pD88X,EcNY24p"C87*i 10BW at26;`:CwaB5"H`9.hMbڄ@!c`;坃vCI  `!@'t[oIL( *L@*F މ$2P!T   HcΔpJIG(T|"$"z㿗r]%m0]vIT*gA Sڅu3UBMgN&ښIH:3NBp"[ko P" kz5=¶j3tT Z+=gk5n%עN0.V8 fqQxb]M23Sa `p:] a.` 8DI; 6ScGGOcP 0e HH# @A l&众HE @f5foEg|G#IJn{ں?o ^C F @v28_Ǟ@;F`DT(p63°c5K!3W(s= ƒ!A؊)~GPD؛|O Eܝcq\u4qQȣ;c0=J?0 ;3{9 @93J  L i %W>l"2 U xK$J11ʬ,1 1LIK2k(HL4 L/.Lz;=b=# =7|͏8 3+>@"XHA\MMͳI%Ą;⻬LN[!Q3;Kc5saG{NyNγ£ L>(,Kjf'eL:6#6])\"+9Cs7#t$ESv[wE:+RīijP7PL8~ ےEE% _> T?$Lʕeufʰ"LִjS\1!J3>aLgUqVh1JVnT֥k֮ a!V &!."mJpaVf$ |:bܿ"#W 5`\XB" `Lq؄:f@c `,%^C=JMF4IdZ4Eߕ XAPhd&FAȆ$‚(f7Fq$z9$H򐤚G&JQ*M ,N!O# 춅3c1H$"TB1% g"S)Z^ cm6Em#mkįt+݀$`XGa\'a<)ً0Rh3L2<ך)5^RL TWxsNI;swtNwuQ!Pd.e,z ;~Y4)j({w[Al@*3ckmz g}R:CIW6CV4Θ0Pi6cTSNCBl2QjC-f ͘3zSP_,JeMi}Yhi5 ]`@̮fG]5V3o] q2ݨy[:P_\pbb)D6&sRɹ8,u˺'ZtuiީiD6ZYk] ZJf` VH ךWh(T }sRBY̷u%(7^?Nm.x.2h^Ҝ Hx:GY}sAp(;tO38& qT`=G^6j"8ځ("D.8LbS.X,lpø۝]Lcw}fwke)r ײ؀'j %y'0"I#${`fb/  m$RM HJ2Q$I VRA4G /w'h O,O(l`HhZR,"8pN@R,FL<2+h ,G,,2,PC;---C9-(..R3R8+Ct|<^@fɳo?,ʬ@0# (L(=3x pRγS_όϤ~Э ud M'&(" %%ZU$k7~K( #PsSOi洎 <>=AR @ڄM.Aq[%j iC-C14=wFV&!26aE+Eta\ew1yG4qGqvC4^_ET屖ia`p4ކ/K.܍f魻@ΦX% Nθr.QNt8tLuXsgX! s>S;QE7!#)ٳPy@B@ySs:= U@M@њ|)pb;%xs%8Y$qU9Iz'#$`Tbb ?':/(BP1r*ҥ[F =+]Ē]uڈ5UR^)_i_U._u]ua+oa@D!3[0?2,Hy@ 03Yo'?XD+@ =U5PX_VHPpqUVJz9vU)V˰vj%$ > &ӡlu9:S b =U=!R o snSS>s@fVn#0ۋW$1Aj *(CBWNWT  !SJ{TgF1_H4Xuw7xvSFGWGy*:aNhTew qvzjH궫`ʠCb{CqJwJ|f " K+}jr&J  (&Q޲+!NHCns;==;P8$)RulVSSC b|&LVoTӋ9 K=xm7u8[8Db~*@H.f 33OZ"*H)rLfdZ R\]a]x,Xݍߍ 0.ݏx׏.:@\/+S#$sc2P,(3=Y842*~6ssVES_5Frm69h a6j)YVaxo2`yV8w9O=q78vM>VVɄy@BITmxgXwR"@%"5xI{b"CU0{%$ZӁ Uyd&4Pb !;%{)-1;/\!T[A;E{. ﴛQ;Ub{a;D{eq;u{9{} {EhR`%k9ivU)ik0`*|p )j$њ;ŭǭ;;b+p9т {nS8T3p7oſ5$AL VLF.~]{-^1`k4xIM>IZ2,jx0/>=]=|ءZ^Cd ݞ~&fDE%l*ySS֓g֮ZQ9oS!$y@nϜn_m#|kC 8 [̜IWTSHR=\YC(E?4_ǴY!{?|^ߺ J;ǚ4 g}O?ϵ]q ^ׁh$C"T"B(PP"J)ҝ~Ϲ* ʂA(5 2Ph蒹WjG,E)F(keeH#Z4gRRJqp%Liuiº"$zj Ǩ#ʎXXJ_e  %KQ6UuaFQVY=cdՖR@E"C[erO ^ezZI&,sHjN W(elUP`$\lVRFyfQDT!@nqgj#Iɵ6Hm Zkmb60u3XbW^*\p];u׃+u݈;;rl/"7yi-e[ok-Ez>u ȫ5l SKY*mi;pO & ѹE*v߼hv{‰ֹR[HŃGUk+jII:֝i9&9ʷ6Tuƻ`*#ל{9Ka p\cav1W؏:VFT˙k)uJ# @2R(:sSUOtD[akXm` '[AҶO^f{;f)`|A{GG;A ۉ(5@Z,܄ynd! D0#C[u.N/Q!GSu qww{Em{A/w=;ooC/A?3hU`ۅ@Gl=? bh'$O=1!4@0(*(1="J ϲjz!! ;#-$2'B%("¢"38) /Ҽb?{ijB75#(A㿼[CӺBT+,+|+)("$+ۮC"4;1<5+L:SËVÒà& x<&91 f&g6`6l&'ifX Mqb\L'bs6l:DPyb?TT7>>͕uY}ٍ,LL՟?K ;-M%?k?MHaQI:Ƚb"b#b$b*Y;H֥VbrBPc #׾3UxW4I85m| x Lc#8\%\vDXC@ ھIM1@X*D d%2^n[\6PLadNۤ2ۻ1|Ɓ^=#m6c9[9@07A43Dʁb)*(h.4#"UaV5]HЋV) i.,n]]gPRV><&? BYv`MFMl]ԑԻ5H%OOU#UF1al_Ҹçh鋦]ïPmۺ% ;& x P h.) drDbR EđxJ7vI&$LW/H$iYLdc~}<#e)GcB"S)2Uhd3,gl+Uenc;3J*}߰lgpd1c\T͐d|r[7)C!e=>Wk5e6۝}oJ"%Tf܃+7y>gWu]U D! TCO}/s?A ű0#:0`B #"* 0A2ԴC ί,j* ʷő\\E^;+ z*DZ G#L%%I""" t- L!( bzMJ"S4$B SJV%VɪN')j8d B R8 Sb;Oӕ =PB(UUeWU!WYV5YUq]Vխs[ ]aն-cX=dٖEe`b( Jl* @7Gq\%\ r݁say]{^F_~`U è+> +1F~%blhxӋd6;=cd(jy^[eَaefbeg9}$*$K :8$iZfiږiέjkּEoFqe}FY_>#p^_,`W/+X/(8C"ݗ_=qAt-]]*u TF Q⨮<(܊|22"§~"@m^W_V{\VEmW|V}odw`|?U\|&UP)Bt$PfB(BQ*?(BF'5 pz BI !O:Tc*%@!!B+mv"mE$I.RDP@c"N-E8r Y@yMh71ݚn#q79GSZ 9Gã|qBG!܈;Qƣk>LI)+% ='tp%b( SDQHT ,A`C@b$W/z)ETf \D$RBHI&TҨdJ&mK.!N @JAL :OIgu~hN'% bua0NyC1[@HEEjѰVT@HA *?V 0}c+UMX/dARTJP=V QDKfF sӺ*痒^Y3t_F Dr.%GCCbW_Y#VqA6c`EfIF]e9Nـ+Si56;V5{R-[Ul ,@d,si[o=;.",V6鰦&.qWe]C;@eX]%_5r:Wok\KeJ@w߻x-޼ z-`AR`UGUxU zkR*8Uib1%FT[FXvSyq5o}:U7 TmQќ@C A";VQ# XWꇟ =医@_YK+(R&3%<۱ %:g8Y"4I.Eаg\Is4t)@q~,eɗ3j/A0 |jcڊ:j]I㕟'0H [vk3s:Ha='am&6DRd`!ĩ2z+DD)eJ HSn!4.UY e/wB'+h`te6 u4wϚsY&M}R\ٛZp%)8 R@G9hzr$&rT+1МɗdLN]i'@b #:;BFa֊K!tWN}~BAL ֆb^-Ȉl pϢ 2N !2 Fh49; C`h@pG Q U ^i0-iH։Q=i! 5펒@Bt01iC ȦA)V$( Z)``fK pPh~vOEݭDzI)JhG&kq$Ѩ&WK"bLiQS02按6 `L Lj~ʖJ ,L@ l`,;  r#. Vʪ`N O]O\ _$Э2RJF  OvbJp2'&`h )O(o$O!)o*2*3fjI+K,+,/Dе/Prط&ַxR. β/t2v+Op|K01 qF% OC2NG`u\@ HPx ,zz ,QEe S |} 2ʍ!Y"q"29R77~zG-p.0 ؃Q03=d<3=) 0O P@NR`fў+`nDDέA (  t0.` D# ҍ.ҭ0è6M 4i kl l2մ}ԁHTHt~9sIlJW?#.K,AR.U}BPBwB 42t6AJQ2KztH3Œ i "oFFGz 8Hԋ}t}p~~q~fKra1)Dwy=AqE AOX4 yMkOV. TIQĈi)iI5_ev"qt\)nX(V3ux4$)e;-rw#w&dČM9"S!X9!Ӎx Xێ!” 4ok.]2JM%U_U]\_mhru/z+_`#9γ22*RcK3a1*UScdKerequ5fei-2.Keg+0k 1gM)$V3k3 4U56mi%[DX݌8l`!X*`gY"ΗꙢ,ZtN}78k` pq=Vb/SS>=?>iTe:m=n(WF%`Р Hd"*N0PxB)3nwMEz #EUSy~8|7ɭtuC [F}MgYJƒ6fK Kt),,3MDxA>4N ~X?O\FB\`xS8YuQ"u$Kќd3Tz&u_7=Qy9ot_u>{C-;%u Q UY*:}|lm Q| ZeZ uª͛\\ϑ2Y^5ERoJ_3(9`\Pki~ Wݰt~P~77qxc-B!M8M0#1F NQw7gAh0{p}5鳆z褦k>Ru==}>{=iݻO"~Br\Q+3^սB ĺz|!:: Z7/7A024ʮ*j %uב_5u *4DcHIQŏffy*IO!c?q?o\wrȹiɼSdvY\ygJ$V3p1i@$psK%ys4v`@ ÝM9 BF"h,& BB(Ф"!HBD0D2!dI E+dRITS& ̦Yo0咉e+&_@Ѧp(!UC 6`X{%a0[ەde*!"bRģ aq+X}ث_L_I\ƫEҔcҝ\F![qd.7+!|Kk4J̅yD1f}/x}~d> @o?ĀL()t!0' BP+ ;C (QLSMo<,8ͳ8N23#*~*zj%&j!XH*Ne0 #YxGa03aQeFfh:6Lhvjajܬ±K װ4 (ӴlQ F vm9,4[ a qgq|r|+E8ĿY?l)h`T Q*"X. j A4Pl8BA) p 0S;D; ; %Q@B$1"LE"Dl?2'X¢V1V)EJ +幀οk_!MWPi19cbLz2?-3! ?ǹd FEi͈BL]$%\ ;PĢzQ'4*eDGRWcvҤ;q!qMG^dșϔL|24@5d( D -6ArkM8PDȾrΉHwh;Gs<~) +MTl4iEJ]r5 bMS`&ʚs=4q;>#AU<pd̬92DF銖jFQSJpT9ShúUZ*ꐬUʼ-\RxDXkU%!YRfL#Lo} ,Yxr0dvh; "BA,p. 33z5k d\YcYQ'Dz2󥨴fMkC1fƊ X&e.AP 5ZeoçL1rȷV=@cLٟ1}ReɸR"`L dM`C5KtPRLt;VXdH鲌L:.{?et̙T{M6n~ wNTF|5Oug8izNme)$hKΊn+iM{R:: |"0d!+M麒tM)7O XURNQ:URPj֪刯BDY5fk]ON[+Y;b]]J^PzOHX C -ů!琋bYO͓y&J"2/T*fLzD @x4Fi>[Z¸vaV*XݼIw.p ^O yq8_}:Ot߳_`|); @+  K+@1T ()<ޟ :2%2C# # NJ A)!K*B h"3xz&r.#<衢³<7#6 [?3-*π GD6#SICx2 :(!+:FBr+T>D[+DC<׫#D=H;g$M*;k9M%4NTOsi6j%%lUz_X9LX$b+tEAjɬDDdF!|Ct<<60h*BJ#ُ9 D30 D|23РKl X+05PMTKL LL,L 5l ϪĹX!* Ӽ(z"T+]L"MTKUMQBD΄%D\#4 Z4\U+_U:^ V) X+2{4$ֳz0JrWqut4?eu%vmw vM>5|W}?*?<?X9XK쾫쾲>1@@V>%>.;X靁V3aY=`VUU]Z ճ)U-&HmS׭#MUZ8 p!Իș+BTU -[T,- O<ݮGσE FCHۼ x +O=Zɵ@Dm@ @\m+`T =xK8*S*#L](3](+-݃ (򑂨9*xj,s;^)%CAG y'dlFl-Fޅ^7Tf*k_h_f:p_&⛸DAx+B;B+ʽ~(,(*r-<)~l8C(*NjCi'^6Ȑ%8{aiN̶ap";:T\}_D6IW\ \o %;S P ODKÁ:mQc"0CCwq*Y!hGhp<-5d~rr d1 d(Dd%j@-klyffkSsk%t9?Mysus4<>szWdg@?Ao4_D/X6l6otXapp"sحXxuzu6{)d@aNr\U'٦u͜" 3HaMh$vOdZh闈u3R:#On3n,``knj`o^73x6ᒞL|&F įbp!Lb(PГSxxRI|wG ##?Oz0 h S)DaXPEAHv'Qi$zK#H%RvZCc*MS{4f$*L"RB0EMScIW"JjrW{|eYl:ۭvۥv[-E0J15a8V7q\O)brLo) 4ᦇ8*c֯[lRѣgkv{>}ߚ sr8n3M%\OM4֛IZ-&(tV,y=}M?;+0 4C# F0d !L' (= CAáEME`FBD3ƫR,4uGk4z"Jʷ$ɒ8AAár*E+0̓/)4 )xC6M#6L8"J"O*NE?Sچ%"-@4$DOJ5Iш2 (Bҡ&T"BSMMT1 5kZVհ5j }\-bXfVUp׵` vhZm׶k۶lܖ\iZQRDJrJpf0+ ~_3_X=3NXN!D.ᘰ͋ <3c8)D&"pSeHxbgsYyz|dyAQT;=㾛:vSj:n{DѱX0J#9n&oG2=$9jf<ڗ-ͽ1,}^*%A>_yW 1b!#Fˀ}:d~ޟ^K$ P Ӽ)DVaeVL!Y+x֔)Vj2\zl *~0RT! e ٗuHEQF*DgHՋȬQ~(Ey*a9& HF%XX i%#\5/нi!d9n/d qLʙ2bS1d S? SȂt P)E hPVZuq :+yW_lxWUP׭OY>kX+ Oy=,LuYBCA= *;l̝eL嘸k@qٸ"QV5g.mekw \;qnEl {pm u´KmmA ȹ;zsaޫ{˦.:TE ӥkow ༳S/!`dp~@LV8nu3؉LK¨a"B?1{ؽPcb7@}2T A* W_tXLdںeYkfK/%%xUBFB`쪾 J pfଉ$] . j T'[B;OBxA2.^`h!, *HJG-).IB @PV %-p*Cs$nR&ZS"%G%N&rdOP'NB[(Ƚ %r$JfI R ` YڰEr *Z̟+,Rtk HDæ {/&K3/4:b 0*+Z/\y1p ln~ Ol+OO44LF5SY4Ϭp@6Ku73*kk2Knƽ+ֽg<ܾOst D ;pFZPL|_* `ƇnjlPAPiT(Nڂ"R*1,C2C*4\ ↲+Ɋ,Х j ) 2FB'%m& Tt&G%S"(E6e0TITttItStAVt!*IdH ?̡oq"mZ/?5T5Ml\vB^Qb  ܕ#Y#qR1RQSM58>ѠPcI >U?q@a`_n Bd$C$2uNC$E3Z.4FլDđLr!3j`N h¡$#9#R:LM0N/$d⥮rM@ bK_Nΰ"2{HPm%ae%G Т>ζ$$S )V \o Hc,dHi 6 { gff~ɖ^V, at;32=Ci紳֥0&Bd%ee1]1rgr!O4mll&5nF5n.6psqppyqS(fӉmf9GPss'HH D;ts'ul-{/,3i3.p5iVw j NJ4 xPV&]Agz4"S~[p {{{7|Ż|7|}ЎZvN/X0%1 HpDثNcH ' p&E %b1JQȝ`B'n%Ruu'qR2nd*@E\1Lq$1+L,ZJ:A *aOt6ױgT::qQ Mm)5& Su=ѕI1uX=ZUcVubJW\Q֝wUDLt!ZZXkr!R+@ Bj1#УUӔC#NZ{2U5a3_#b('P&ٍdnǀV8 * jC *fH4ʌCDÝ EY9گyמb!0$i~ w֕>7=rjoLb`@n1Fn2:/8Z4p/7v=!T3EmK5K5Q5zPeop pFW6 pl978ӆ0Hj33sS,!& tZ0 8z` C>;?%>F Cy A7 "$Ǵ#DRCY,=A{)B1CǝDɀ4`@!ˁ>'&v)`i{eaGV(y%x)hAW*D^LRL-M8rM؁`h#%OtcTٍz@u95!x hiexSA?8UG| i8UxaU=m© %WՃWDCQ5YRL:+N0Ըq ͹H<䵺Md N]"#9Q]\]|@%^Nvԥوw{*Y%ܫ'u?2-R%EBaE7E`- %}UgeZ~We(Yή|pe kx)isi v0bzcc@g!efikgMlulwq/v46zcs:mo{:}sozpw=R]\_r3)9FgGs$!]C;tuŬc@`0AKki >,=w}#_>^@߬iy}Wz& } 7ҋWEW>)>*0һEB yT"r`Z8=ʵFk+{P9AvaV yf醛qʼnxyX"xdO8)3{͌h %1tٻ߾> 8Xǿ QmѵV򱹏qiʑDG MJCAK; \`|dY_d& ɼ7 +pN7a~8Uglky;w;]1x{~ owRRo-O@p oP`d!gB!1 BP`) QB J~: F1sJ0A"2)e r!2$Hi`IC'ɡ g*Je,ʲԻ* *J3bh4I2E3Z2iJΈ6=>S\Ms?Mz!& 5'J='LAA, (j (e4Tu-ISU5eQWu( UdkYum^A݃gbV%$X VhChv}^VUbŏdݗpV_#2A$iw"|^_} 7>,`#Faö%y B9$Dh!6Q9fV!bf >ffqgyy6{9fMKCFэkZƷkN=;{>@M ">n{ƇhxKjor<ȏ<;\;st\IP+?TB pD塠Ivldz]-^x᧍~Oi>_8axa> `6 7}b0I("F^_/W|@8p-w@%!)8(ʱj[+eUUjVLaR [8\.,(\;kXD 0ʘR8)P S `Ђ0@ B ŢB {MJ xՌeQQ=ȉ "15(pcz>Gn9c"`I #DX&*%4IJTJ+rAP[/Yq-qq10 T`Cj0h@:`\P@Dmvelk7D 8 c<= Z Dk@!S>EtMс]E@"+A4Q-TM>TVDh 3T0C2  ^i8cī;fiF[`6<0$eƢ66q?FE@CHJH 0;3):O:P87JS7p|y 3A2Y% x882v9@À"e&chS&&m8ȼHVJp9 '4'$'\D8p+9`':0<|:S:Zjdө 1Ӯ)BGZItG3p)*;;KR6¥¥<)+j G KBZA8!K5$Z+Tf+Ž;gja<̣ʢGaJ"r%8;*!,|KLDDW>K!R TUrM<ӽҴ Lw3t:#,*C[)2b☁z?J389.. @D0k2Q/d Ϛ/OEy3P1C\OZл ͱ)ұ;1aD?1۞,-."L2|jCt$,:i}8<3;33IxR5ă7BD9;CMiP[TیOE-0*PU9R%8M%Cm2C;N݁Hk?OL@Y@@@@OO0U$PTL]S<C cP %#,#"c(D,2Q߹M CKR-9CÑC܃ + &Y,D R 2 lBs<+LSkJ8S~Da,Ja-X"٠H3@ESKi,JKKNa+Oӆ l+Ch*V6$#b&+NFg>^~f5vFo5>oW7>o @Dp$$;l;4ճ&j%]Ty7dzAK>5.`VTdfVxVeEz @ SW&ddqW.KLHLQrVPevR׭|r_ɗ, }XY//I嵃^f?f%JEJMsjر \pZխY#:<$;#ِY˟GgnvguKu[̉`gk\tǼUFTZ6ZSEs׽*ifJO[4\RuzDžTC3Q4C. \!\jv΢l]jЍ֙A(U@j]ݼ@'}kʭkk^mAgP@^yl^B)8483\_d)v½lk"l痞v|5v#)4:`92_0;1`>m Ǧ`DdFaG3lE[]fͷ]u[T^g"SցD2M"= s]*jFlƏ{?{i<߻{~Z~-b~( ]-pBI_> GW;攬cTc_8(CN@q_%̂,NS$WVFHg&IWIˋ;߄WP<~}Y*Lrev~w%~Po'/}m}fVqe|r-[s<{/3bfGXfs@D*g2`h,UAqԯ 3C HdƣT:Ec!TrR|a3Mf2 e9'SCAtj-Cg*21F5ZU!ՊcXJA[1؄EoKpB ^vpjb x`7h rLB1 !Aذe2uᖠ%jD:^mop[F㕽j5Z~Yt.GjsĴFA!!+LV|r4K~c@#@p,+D C@XB0l(" C ᠆Ð;A b,G DNEqtQQiF G1uqaT3Sɒt'R(JSrl-K,˳ O2Lo333A,"(#;O;O?HsăBPt<} QT{FFQȠEA4IrTKCKS=LS9P;TTTՕq-V5}fCVUmmV(3 q,EQhV-cdYvmhiZgj <,>Dܷ?oϕπcO5`ʗ`3ˁaXNxvO 'b&@C8 㠈(;.:ۣnXeff!ul7x6h`Bt)c JBHT0%\*!QJ2)#܆9&E$|F)IrV!!3c[)QEOӄ"R!*V*kn]&k de:6c-m3PwSEz4 R3)e1#YC,E y)6C*gsdM{;gL}Vt*Gu1isީ[ ->WE!.gGxu!T" ê<_[i}-f3 "~ ,@P pl3AP|"<! д3 Ð<<b(3b f!DOő\]Fh`QOGByGq Ȓf9Jܸ)-, 伯k!AA*3j7)xC8SE93C>O@Д дE?! *Tp"&V#4-L$t:ӡ(P?O#ɕUO(fT" R` Ⱖ2vc db"YehYueZͱmem[ 7r\n]7h0;e AށF +("X808^3b4b4:;c /GdC@F 00h!~cfY"_4!ug(g0j*hfiڎ(MT4ֱ7F{^ I+?a3`&>b A/d#{,`PfA< (H &)H`%`bEK(뇋yi,RB,5YP%mz25ڻ 2WDA &U$2%DJ  Q#Lc%~G#\x1,,2Ur JU"L & ʂo ;q $]+ibMDZpE)y.e"x PCDBYS&e2&x}453Ikڱ̳|r&i9HMYvNכ(i6;xLCx1G{g3Y1't t H2PuBA&*`Q21EʎQj:H4i-'HP&E,P%$,rj&|W)XL*10$IIڥڠA(j‹Q JUqTjCF*Ȧ,rFrIq4WB( ;ע{_Srp"2c@"`2PD8Evj*Y 2̆꜏u5P`^Ζ`D`L:nc,A\6B;'d 2vF# 3ggWeδ:Zs69.3N ;T`lɰ6@{n[M7,Y./8z\kq.  Ԝ=漎n\;w;tM:WR]^(;w|]x޼,k(ca9||͟ z V.HO|s͍¸6eyn`v1[roJap^z H;s'@O=gW)Hb!02r#gI"Ҭ0I4Zji#L~"YElXN:@mIQA(Mdr9*Z̩䊐\H8񰉆U Rp3  3&1[onmݽ #q0"V[vnݻ[u8{~o!oN G " 8[`e e{xW\ou&*E\~88)[(@|؛#alٱ2UZl5\PAbmiz<HX;]1B]Jk?:ƛ]ku"}Z-νشP# t; ;y]w]^/wǍ^OwX|^4<? G`M Sם~x aVs_E.[+jtQG1;TiSj!]+->4?2 or `5dv8X"ko<ȅW) [,yWCudRZyh$A*)Q4Te2S5`S^cNc˖~f^''rs&&k'Rc&e8%]9s99@bj s-u;L;S<`’§rR=Sҽ (HMO>!%?2\(T@@"0!S, 0 TT C(B̐e4&eR4@HCHΌCtOmv"X"r!0M@J}eHGdrE$lNĂ3=7JbԯJ5KJ#K$D1L  0 4 ѳMѡйN4NT0M ;C 0ޚzËQ)Q0>?#835-Qu3SSUSXAMKq+K4JUU0_QB^B1QV Q_H;4+G%sXLX5:JJ ћNOԜ[ؘɆ)"R%'Bl"&Hय]^u^l(T.rB3_L$` # Pr-'bA#;c-cv4"@aV%^& 88S7yfry'ygpyyjG5G)SR S*6*rfҰm+gN  r rlRll mm6mv./R006 0mȾv11k&X /202hfngqq;3"fw+(A(F֕5W;)֑)CtrItdk6f16~F0Tve7%'vce[&ӛ&S9ӣx7xe9<3"\aWxF/_@At✩ڒ Y .Beq)uXwۇ Md) X Y9| ?OP X8™X5Q 1__ ߕ] %WEǞ!ʒڰQ\N|0 J %HZ/׻j QNc`4" ) bA #8JFH\&F%!APt 2J2P$1لu9# dTA(pStuLJj]Vu|MaثKU&HfVR* gD"a1 4! c!G 2yqigsttMVR3iFiِdLy+!~ࡸ'gr9ƞ-uz$vCѝ/Kx/!N#DR~"?@4 P vSco B78Cq91TJ=E^SQUqsGqy@ ,"Ȓ4$Ir<$rpi(6ҳo-K Ĺ-ˢ"D˖sC9n#߸D98s:C8+O, Ð$*KDQLϲ]I2%JҌ+MS4$2T?MT@,3 2uT'5|oh֕\U{^>R(  c6 ffYmiZ6k/)l6pvm(n[uڨ[fHZd#&(m%&`X_bt$&f_ Q2UdwLQT3L(e Cba%wYqZggiVihhj-vƮ%03FͲl6Kl{VĶݹn۳;;Nwj^5kY2 |[ k͑}<7\nöH%ɹ,=:(rt P^1 x.b\O^*S]pxw"{-Ր_NC}!>FJ{]01~lyR6l#/@ :PdAȩٶv.~ πȇqsz"aH"kH";aLC\d6O[Wh{ Rh.dȕZYn5 zFI!9Yf,Ō&V]ЩRvN+hfK]WnmlBdL^b 0wYHU5.LQQRE0ѭt E 7 G[Ӯvݜ3|NSyXun~V2|yG+\XQ.4J(2%cDO|{QPҝ)6t,ij`A4ivtPD ?0gAPު>s1wrTjX<UYYPU4sA\|nj&J VD J!eJK-!}F~J#uVm,C]+ պ}q>P2OF~y`^[uΪBTAV ;BϜ!hv4;YPC D;//鶯)0(ހ 8;!Ȱr&4k 0 @T1$1ClAž!A1cA# #I2B{ɲ;1 1,. ALrC;:[;Z=!#>! R0EE"4r&"r(LABL{M5Ɉ>s1#bј3Z5h[݊NR-R-ЮEBD( ෤TYm j=T[ūgEP [ F\"E U8< JXF:+7{7]%o c|bb&c Rd:e 03œ8:&lh&ۊ'oӍ'r8<8:'s$+J{9ql̆'w9BZ(c4‹(:kIr*ɑ.::ږyCTzHJGJ;Rjq@ Rt7*l*ܮM S:[Taȡ$ZUT=> C*N: LbYb=\ 4I}bbq{D-&Z. : ۬V,b Se6D٘.Ec~۶a2N֬j]2]dJ(D!]DCη]%k^>OP 1^sE^Нl5 ^ mƨQ%ϲީQS/l,ߺ 3><83"Q`Nm],!@DR< RfRr҃HR`! - #i^2hnlOaCY5Yn=n}"KK7bo]G n1TPZX*U;4AM XDtUcyxU`cGڷ ~GIffdX=bpo8Vh@DdTi͗VK([fRq eJWB:^ZWeۨQ-`a <i:7 >_0Je@ U;ĪnnoY!T!g;YYsۗdg˕!0bV=V86⽦pKth=OHFV ZF~/@Tse:)h=YY,EFͥn[]_SZ9IJ7͸ KPU(1mX*;843vܬNnN{$2_잫2'歛]]j;6sA$ T? @^Fx;^[MkBl7l)_ M?t/2ly}ߪDlQ6?798Ì9@L$]$D ``(<")5{ [oXY/bG[CZ=وDbMKQLEf5@!, Z)^)zEHڷ|o|TeV/ooGD% 0+;7fmz:wG.[ɟ'۪^)ΌfXdshf԰V: ΉA c8pIQQ^31єEHd94FR)p MLi8gspT#PHJ5"EuQ*F(ҫRap^#!!XdTֻiRl]nWa1 r\7q+xn8|5ԧqv6&!p7Kcrc>J1j5z>e 4aH+j_w- yz=Ck1Lo?]*S#1ex'cdx$>?w</dCO@pi" 31 3+ 0 C= D3$Aq$Uő|MİcoIc(; !2HT*IT%2p+҄)˲ĵ,˒BINEL5M|8ͳ53M;lcWgK>?*QS?)bkB- C0$>3q (Ȳ \LDdT+6Q0cƂ@F"&Kr!H+, #Rj')(jR 2lm7 ݷl7t"l" a"JA$)(d'T22mGQ!0f%NRx**t}%JSt?N% })FN!hHUr5n 8cMa-cؖ%odXMgٖ6 6ck j[V V7`XKuW-!EJ)*af;,+Jw`Hd!aXfa؎!Xv(bw. id LB.Q8і >]._f٠KewgĶ+U;U9ĈBC82NƯ"&*;m;Ѷnv׹m&RSCoSp#NqL<'5s(Qΐ@ b'N"WQvoe}iۈo}su9A0;qfgeWe>W{^P**AXoՃ}GۂJ?_{ʗ 8fY@S[ -@+]Nr `Ni<@"@*`naB_+ep!jW\ t5Vj+(Y "!BڻF]v.PbJЊ BPQC'lE5!J^1A'SĐXL;&P(#|j$PU`ΟQ`<@BUH2 mEܶ%$@~\VfȥSdDH!++A4fXg-少B%t/MI1A̘*du\=HMYzω3l@|Ĵ?d9 C@s ';BjzO9؈vTNc4Ef*QD`bj4Ft-ꍑBJFYSS,)*ȔGOK)5AB@f+ Tri-M'7`NchFB;B&1z/FHrDb;UCcGD-E*zVEhHt]+DܭbempChy a?`Wb-o]>)V^}W*аHB*UuX+L*ѰābeE5kL}IT)3f 峧󙐆dɡ3p3D 6ӚK@U PZl0I]!wDP6y¨!o-¸6p7Ʒ-|/1۞s1F꠻t;\0~ v <*ꭓx wpͷ:3Wneb׶_e85`Ŝ֗ZL|zR~IIzEH@Dq  *̩<meA̽uBTߴ$+yeV r\+x).@ :#ٴ(һ=( uDtp qH*MYCU1UKY$E4)$ 4%!SIpÕ Ti#B#jFeJ}^$~,D)(DrnJE,%4rK[8(W)a' pYGb]罷DyxϷ 4{ 9xAP f{ R2m+E)CuF|"9 -[$}Q_ *5Iz8$BKQ[ƜnN l?i0D jT׀ &򡎺kPFǩ{2jNK;SJk$X(2A l[ c+m$'X-Վپ){pDVD'"pCV^!0?kqV{YjcVdA0^߼Eon#@gJ[Z[Ji@0%l?~VE7]mŸ?9:0L>rDGHVvgX P$'|txG|xP0`"ĐDoz/zXL\G|' ``~ DvЀLLA n̦Иʯk", n`b@ `BR W@HlW0 Vp∈p0 ooB(N ".N"Jb3m<&!>N1""e*ī'v`D*- )".B٭B$M1 N)PTqʖJځ(6j{~Mm7 8߮.iQ #*r"ү)Qf"Q6M^% ,X(nRo8KROJ[΅/.s -AtK._`lv}s3/r.cka4@.+ Ntį5f@hf+6cb@`d(& f̻K9s9@ k s:;p s  u33g*‚ 74`h gϠ5oWc]@h  7S4)?0Bξ P>ӒL Dcc k,^>Zj *5G-.Go/GH/,0o+.r%]&"/)q q%Ԥ%Ԭ (@K4HLn4fT2Tt+"`.Ov %-`mqmPjc@L 3"RюmR%2),KJNU(xњ*/ɚ,/rKHy|wЊ4|t11d *~wyjujt6k4YATeS3zIl6zh7ڹ~O\_n1o:5p:9op=ov!s:.) 󹥗r/<:e;@GG=Zqsq=.ss3tpGlY?QQvƔ ƺ 1,BK?Px׊H =yC(7DQăTND1e ~jH [e[Ōh!ϱ ʹqY҅$""h#ӮM cB:ӈڬ\ KK ŵVʶSE8S`faOOrP-GrM$͏PHQeqkf.Yu)JXoS-Sq3KTX6ۈrySQŠ!4;  VtXuXµ *ZnIխۺF9տFÈ`FH#]w%`KšLLȶNN$DP@D,hcd"KT 8x l;OWJ\[ZeZIٯĆ}fW}4v70}4m/}%AL ^`fj/Yys4aD;koc@R0WS5vugv٢p@_O8:3oo]zBZ6q'9rO$ugqsz{sA3b.!MK}ϕuv=[|k޷i9A;2ڷxGxz,07z9=8^DOLˬH>͏GXI[*X/)/(}ǚzHϻ5G֫ Z t[W.ٗs~y},s^}m/B!aJ+Y.H\|k!]Q;PHBJAxqU,4Q58@kxؓ8^~1x? 1ɻ5yX5An- 1蓉5$M&I S\$^{uܤY-%BijGyIyO'DOv*HPLt߂vP!7Wo e2NN^+~}M͖Y-`] ќ_HY 1(ħA pQJ Q$,+E0xe .C#EdLB1"R F0S*U)B d"OgᩔrDbCo?BeIJ0, B0. 7Ë? GڲQdV*jjTrqy)L $%Hd&rK]#42sB*62I,.K  Aȑb\%tڕ |7OS?"ɊRPhR)" дl؍b 820gPteQḇPSm+; ~(X2+b5ӐdD6Idyϒ9.T4_9݈g9ughYΏZNsn#iBj$KCFl[ϴFٱ-ߺ;a3 )i|oq\o'ri\7k\%rYA=u=f/5~#kw" |^w~]xxWg]@`0< æ2(}Wӫ??گm ęD@H0DڱW=iځqj,4[paVADRÄ+V*́ed hsS'4St;N'e($?:DHrBqhA0'r\ Ї@3#d øU H#b1]7WQe|2Yl DIPB4!$ dedy2P @n+ihQ(MyR9Lm2&朳,ew:tq-ۗtK c)|Oq<0)ʀ&?E)5!@Ti"Њ0r H9D(N'𞁜q+FKG(x̏J@!'@ `O:$f͙K-< `j"I_Ph q.u("4!EȠbL[q D0N.Ԙ(B"d2BG 1*[Bn`ƒ^Aаׄjָ4lSV l.Uz4Xg(罰G(B^/bX/_K dWlΰ@BA;vu͋ZAt̢2p,d̺ @P\VnKVh6\sкW6g0R&Sfo ]/ z ٽ&y7{&Vq!;N=0nw9h  ` mhnZe].;l>;wށ P(RM`zP qe#p PfC~!4KO"~hw_F @6 [koY)W rͰ 8=_UCVҽBw_y?g e *J~RMDPʂOD@#Pi]* q@nL 3z8wvPԍ'REZAx,^@!39Br:rȴa27j-D;B"IHi"܆*J (wNvUoN{Kc.;~{/3epn~>p鲁8X<Ȓ8_Bs-;Q#DܖvpD 6# gA5'XstvrFJ2lVJ{n@I ` Ғ:Nu}#W*R!d HI)$뽐vbM•U;CTxuR"= 6B0<#|ZХi+ uIVOHHCZ%8 ;PQ``MT(L%JTPI.'*҃`Sk&aS2S]4bb##b>!#R_Rx+ҍ*)$N%+.+Rb-^,f/D3aHQI5RD{gS9uajlu=5B]c>C 8B- FI ` `OT` P&L(ф8B!4UxPUVU[ծSeNTU^WMb$JHČIH__E=_ӻ\LW*UpOCG!3g~mc_04g*zk@j!JWddƑdM.(+B9K$g=\wܻܜ}Y8\ ;E͜HȂ CDdZnZ}i\iViZŭI̞i[[%Yh H5i-D۾ F:覉KF\BKR̬jR\{GG~ ֶh-\Ń :%kLklM=] 5lMc,1rӝg383EsgsTalt+^u mw+ȡ\4E4eATZ }h_^_LL qd( U Pm Fnx6 35?ao"lyQfQohU56a3R-"$R>fb;v(:=,p.) M5.bou2c>cl m8Sh ;"jc>cزT?XZT~FqԾnJ` 1t*j&RUuYeVS^VnVefYU(ZV$׊ eN)/w/1*O1-i!5Ο2Fԉo9fg_Y ` "Ŭof ;8CnLJLPfH`fEa8R@So.Ӊagaѳo~5N4pJb b5"b.!};p*pCp/N}cbS2N3?ccjchc$jCx D/ U>#f@#]dsL5nEvHI|fqTc" qD!BP\0CDb8V1#(NA!D2iKپk>?At:'iSOޛB4@PB$.X30 f!p1 C,6Cq 2C0HDTEq8b0Ƌzƫ :GKİ, , ҳ"#U!)J2E*2+R/r.Ls330C4L8J*9! P:&>Osm@_?ɒu=)]& @ƘO)*J tFM8V* A(d)ՕE_X5[[usUU5}]WՅ^X}^Ő!Uef5ZMP6plVTAas\4(#%wx^ו+_w+zX. w:ࢶpbXh)c"lV:c= Pid(kXf>cYi"r"ADHChZ&46F ~iڮ8z2 Zm!&-=g4zu%E<aيw!䓳*fzdUMYR@m fA  v A D9;%Hy)='E3ZQxU "@#Qje"W#tI *:,a+DT&䙩:b8ZNiJ24B_Tq)v jl)Pcj<\ J-zR`$*jJYõBeEF`MY2̅0 BZzjBV ~ ֒d sЎj++2*,]6MtDr^kz 2^Ҵ/YL5aL)#T37`U2oA)3lEfͭ)@Z N18Wu3\jwilmj]t 7{[C7͋[@<&ǹ 3s._/f ۷_ \6\;ω1AT,RkLwiޥ_6/=@`<UrBR/dߒP~?ߌ~k,Pt " MY٭hAJMXUgLNJV.AhYA֭{՝ix/k8Y?A M`!hnk3T$*jBlV*wMThCU ܣ'b19bQhEhzEG "ٳ6Fp{jwNݽ#f@6e$ᘙ|p!o3f}%d[~vke9 /4Ι|+uf怇o}@wNx Sq fp0wm[8W@7[1 }3vUr7ٹ?iPr]_ڳj Q~?g[]owVoFhogpFrsP8',  +ou2DvLD KgnwPpTw!4bF  XphJ^Ǧ{o{@ |Ўɇ~ lКʬ(|E\Į| ,O<7 Hc /J-ш' edͅThB $PE"nOuDCȠ% %oh%q$hONAR"(h :͎؎Qd *M"2 IۭIq$2-43Q4)8.iACi_m)x 1n4"I#Xq.:@d ƑXB!R p$Fb(`r* #lو2LI œ@h*:dNKJLMn']'((DE>Q".O"4ֈjtJʎ8 ETHjw+^򞈥1QU/&O6pͨd+O@. `av!&wL]l 41:ly rLlƫVLa3${ l70 v> OosdfGo+7Oq&oֻitAFKs93 kK737 2L(r $3M=;>0BwL>w0T2YpK lP]33Ty32Fs,dz+2k2df ɔ+ }ʐCC춀TE  /f(ΐEEj챰.ROPό/в4tZ H%.k ҅(n,b"+I1&OOIdTL))Q0 at(@l&7%RRdhFHG!u BWU//c0-{n6C޵:>TcS8GQU5W"q8CSU3D.H|` 2d(Y " Y*UYF4R;NΒPcFУ&rjl''R|r'(2(!)m=4ME`HL2a Bd%O'bQHxUv;cdD vEdl/Oe1-,o4e6V!GN'f `BtR]nu2/pA30k@'iF!e5495dF[66q67sP7vV6kAT&ӫ9oop036spsm<rs`r6vk7K>PD7EDRw(ǻS? v31O}e_:^ ' '  ׈~D=D'ˈ guHqGzef-//-{ح/MswR`!2xgu֧@tǙ2/nǥ "6}.ɴ2T4wDwDNڔ~(bO>bU}ӗG!F̃V^tY h?SWI# 灔b%S~J8*hk);B&')  :: OFT"*ט]Q5xg۬8p2&1#.\xՋuWQViSS@>uB MU8u(3 CVVug)W{X uz  D!SYXaX_|)Zu/ B[d}[Į\@ $``Ro]$o^u^`D_$MyjJ$P Q!a[ea% ɢ^1!c GLQɱwp#^n"6Z6Tԋ}ZeG - ā包u{4v!hhxL6i{idtCoLɠ\lX3r6ɢ+n=Wp/p]e=cp?pg:MfkQ'+Hs+؝/=Z;Ma>I>I7KtۥoWgvwm/}w=B wɗ ,C߬y: g~`ٰ<߱ |J˱yVkg0ކ"E#aL&Wy]Kq8a"U4ϖ ׋ X όqyr?-x"\1ZB":IxNęXE\HЇ-]|c]RqJQrzNi ~aIJuS;a`^gq˞QHuY\P \䜛bOoC/w{<[%Tde"o3eT 9F2`ahx;ȥB4F'EјLVH,zE$HȦRO+Je/!$B AgE4zPLjA%FR )1b[ղHhDƂjZmfmpCn}_x 4Lc4J 4)loXdYlDGiJ^kn λ XrfMs4Ne (}~cOP ' BAR W̦m'H~_A ?<"f"$PPGAd  % BЬ/ C0'0B D+DP΃CL!Fd*F00d*qp2ȇI\Ht{$DZܛ,+Fd.ǒ+Rs2Ǥ n)S:Mӄ8=OS|! a(cB"*A% P(1ԕ#IT'AǣNӬPPDOTHT}ECTKE0Wug^: : "آcYU2Y6xhviZi ݶ*)+ ;r\cp"8QH*B|W׭{zWf7~_6^ ax~b8!b f $9 < (ϐdKNF3dN4d^QVcٖ?Y- c*A0IiZNiijzf:5%QMfy^Sf;VӘd;fEn{n. 1`7|qw{w^ܧ#H/0sJ*u]s-[h[alvvթ؃8B]>'x]/=>>W"xeL4 CTA}<)C%-WHS?SU.gTco ќ .$A<M !,$@RDGi%4ѢHi* A,I2hgaP 02oRG,Dd| P B(glEd$Vd"%3(`^'v 1)4xTc)p #ca;vndI.&a,0VIIbbf`ʙh rQYPi426AL_d020Cu"Թ\ DPtNus69 w ;Vi5$O<@'jӔFBI,quD#!4$ AHU:Pu % DȦJ  ba4rHa2CtRZQ b,CBKb-)Ty `f"iZ?8mL@jS)>0%P ʧ sUB¨RS;M!2"3EqYe@Ӵu¿-º aBRhƹW,q˜bU,fʹ+N3k6ak항gK4 cZU5~IaJⴻŚUc,252LMoվ;[W@A8wIY;|lZ9:׵ksW%%Εp.;_lu`^VZA0^Xu<|ކ"yibg>+{q \ڿ`G :}5BcUSCN:iHOySVcQH+(UO(4&q~-h] DuQUx'z;+ $\3(3DS&Q 9p*;!T߳/..lF waU%t!ÒW݇p-tk2{vU03]Q r=8k+f| L!vl= [۳tMS2lnZ5k6ڴ~{Xl]cuY%7Kxa`D U1>M_*2(1K4/͛K"ͯ6+< ??0l!i(* N1 @S@@_ 1RJ*9*:II<)@SS/IC%P;$r4+?3/![* =B:3I%B9p]L!F(+ccH4JÐS8$n8 kCh178&Bw5SVTF` RX \6nEllS*\65H,@VSUӜV\6\E+6>07]Er+s^C+F%(7x췄BD Ƅg}7n|PRƽ"R!U MM4˄T?8 U|yXDzի8}9G4QkV+B9y/3?) 5(!/%Ja";#*J3*GW2: PAQ!P**UvӨWM*8eL41b#ʅ;Ī?݈0s":cʹڜtؼ$[,x Ljs>ZY;=Y=퟾Z1L>5L}KK>ZMͣ峜۫Q͐X-J1X<XN=ʼ尣!0δe}\y@ )߻q)$!M+(§K%IE 41SBWT 9J!:+B+!Ⱥ 3E - )5gVkP8*X\J("|35~EADE_sQ)FUHFdf_7Kjp45OPF;F&"qb}<}bGtvG|yU(aG‡9G2E "= !t:C lH^=^<:v9c=HB;1Q AF]fG"dvJ)?12"OI)>y?dO>@:[34~ZXIg;lN<</kMuKgegsR~{K|,~,> ;KefCNc?T·MM}= X׿֐+Ƒ;X@D@K܄ 1l1c)Om˯IIEm{&FHdk%&*-qS:E味V%ȎBBI.3u B)%I B}1PHjµ!LY\4h:_ElQc4N(ES4 ߘ+@DuJ%aTn&f`%)ت 4 CT&/@a*^S+RyǛo8D7oFD,Ǖrߜo& "(G.-|n,Y Z~c&2c7p9CBc1E)A)}-3ww̃Tcy:Se.P!Qwz}]}ݓG㔯dj, IcB:ZeĪ\^0sMx*3[eT.ež7/8T g*Fx<& C!P9E hR$h!cv>gSfCK%rلe.Lf9q;f$KbDBKNH5> SJTD1!ea!Xlc+-fZ{EqٮWK{W1J股UbJ7%r9c&c5sLgA"ȅM.Q!:!ms n;D"!8|^iqn B._,8AXtx11 =>wd|# /hn)O!\A=+03?K>CA(D37!a0,0NC2x0LC2E$"hLB#ќnBd#RD!fST622 Q,pL2'>OFjf#c:}DF7;΄QR^׫R-e"H֋-n[nVV]ȷ-~_H,FV3*7$2!Jdyc+t<?ӈڭFX*SF̱7s;oP^G,ty.G<JcQHCwѧo'=zo~dL ۈ@n|@Kl6<:C"AA3@̴1(1LdUEltYD$#FwH HkI ɒB)0$@DJr,˒ܽ-J LR33L2M 136S2 *ix2jv*'@D!# b%bib#HډS(iB@KiT n!r){^M^W >1u_Yq`=^ZUs\%mgW696Bwhu][xTEP9Wgz 3 *_ a>2a~ -2X80$9 *ޡD^噆[Yxf"||hy`U 3j.Ϯk[Ͱmճ`Cinm6pUɵ^Ͳ(*c?9ˊBLYi?U9Nau[_}u܄AV9?.'7^n."y%`)B2!E|a#g?k.VZYjZYv,F20d`& B`D-CPBQpF4, 2S!L`;*mM)IT/U$&O伕1T&DUJMhû"+񌱰bZ n`*6$#yv-f 8#ꎑeB Q'DR!DW#IFՄ"DB2N p)92JpGT4s܍Q'Y)d|eZK|}ofs(ș(J 7'ϚHL+IPl{"dIBfDDHH) gAehuV8;1<#~%}tmIt}0gJɍ,%cKi4МSMMtb' <(u~HȔjv L?#\@ Ykmh: `FM&18#PQ@1E&n&i(2)?1dq1ڑpqxQ| 16NdOH`.E,!j Ȑnn!" l!@ lTy B1 L$? e`n%Z L%?ʼƅ[p`rRFPb'P\hU$n%tt̼d`J*/ g*@0+ֽK<̴rr " <+so|ARod3%23(s"v  0K 5 5@ 3R-vR-r-о7oS| H  Ӑk 3+/@j0{+:%3L5;8<ij~ DuG [{$(q>\|R&na$(%{&(LL HBWZu_&<-_8Wvo:`_`BRr+NNSc@Bt|/6Sego"f2.s0 !3H/khCio011n+2-k6kti6kk d?53iOiG4R4ZB9n`5ֆcgK8slvu7f 7B*ƿ,^3 eA/t3EtQ<"[Lb`Sb ƕb2uwX[_>Ll6'xJc$E6R& ELH&~%ʕ 肥u4爠ʪ~ vGLh 7w8xn Xx!8%x)aDCA x9=IMLp5]a@8Qq8")F!?88\!VXxPK'$a} "zUXEYzLTwR{gw\Kp028x^cxGQ5ڞۀ`j 1^yz5mR4U~zz㮠fůTpP  ۛ {>U^O# -k"7~KOCZEI ԏeHu!'H{~/@;*0>&]Bh߮]#Zpi]9{РP{p;Rwh?`]%E\ /bwbX[Nx3o4&:=EAooqFqӊkѝѠ BTA 8," BS̪V;C8j3Gd~G!c8UJ3 h_.ReJg2LT,BPhsEJi5 eFNA) ujp!ЅY%Mec)=l.lJ6#*xL2eኦBS*b8vO%包\PC!D"Z8R!uivym7-#; NAyE>g$uyngCݏwx}ѧh3q47+#: GA7! a01p@s ?% ?9ÏNB4po1E*C(N!Ʊl2r):"HOG4o(*@Є*?rĝ)rv!qq"̒ "TJYpDaF3씊0@#@PT t5?t=%HTDҔ/G;NSCO`UP* EYThXUea[ k\ {YW_ ybW=:Hϣ<NgiVi[vm[m\VpwEtIȪD:y޷:|^߸_6 <\m[dc8ݻc1X:d>ATUXffYeafŁ`WU{YֵvX$<-GT]EOҴ֡LRt}EQ h*ɱ&Ͳm;.ѵvn{!@Vqp\q8@GKN`-R+0Jo+}002Є'ʱ3{{a !tL޺0{H KdC)=| f!W\Dg SlH$)r":IHҥtlR].YNЀ2 :9ʚlv1:HE<6:VEB(*,#]kJIE)6GjtMPZR`<*C%1VtWSf|>gLޞ|]BW D@cV6*2ӪuItuVj]3 `uVvZXbkڶ\X 1:DOczWX킩L2fFX#Bj !O<[4*gLř @zT-)SJe%IūQԊ9Km7-uɾ6~ㅸn8Kᖛ+eIuݒ@r0AjGLt 0#4irx{=us: ]cC) M̊ErPg!" !Ji 0К;Y^K] *X) Px# H^j| . #h1rAH1x0 _XpdIH!]te칗8CRVsVi͑S5Pbs;XXs{Y3%.h`d9&(h1=XrD~ȐdH"*4&@ $R[W(x `Lu);gTïVÕKJIF~A0" %yns&C/S 0 BmRśGDU'%ÓNbq7栩lQM2tS.x&DIq1;`hC:PeBz/F+g)Vԩ=**uT1UM*望Ppr칤zC{]a}7O h)) #u gT ]IA#;ҋ1jKJ`ܤZ$RDP!N| 2Z9#B8[ ,#3 % 3#3 +3)38Œ*B+B:B-"#t0@,2B#C*6A!KJ#AJ; C 1D| KTK5lA,EDH2 J#]^6UbDW:X%E f Q Zm9b E0y0x)CkvIr17a/y/*z3'Q&czF/Rv':8w/ 4CX]A8; ( 2(D() -a-:+9B̬ʚԊ,<,HI,"+¼I*+ܕ:Ӭ:C;+Iɩ+{I̛IܜIûۻp:+I$L+,<<[ĬKżi'l.%2kM//|MLja|?E,F7|EW? ŚcF1E{r8)HE;H\ `#* 1L@5XDcD <508B2 $O4=2<4:ë&'p!@AC$!B$1B-PK0Pk1 $'3;9% " 7P P P]Q- 3C 6{B4A:ѕыBcHO 4#O>?TBZH!Ɠ_#R'ZMj}8[i/MZUP Ub/jv7L\د1T)kF=G[J{@* Ms I=X\*#d O@jt-(5:FR "ϕ#]=<ݫ%]#8 1l$ |3N[-54=5PP^^^ލ "_-CCCѵ4 QQCC<# "-ݓOCb]LBRtCҋW5`<  ϵJ_DOb E-50ShA  h?@C0@͉%%[a\&<ūt&qԐ䷳}3LY'14'J踞(Uˁ=[$m>*ɏZ (+C6G|CVcY֔Kzs)MPRH~@W@˟HCKC!b1]ȁ ,D63JdWL؄JJe%e.Te=XnNIJI坋X:˴JŐFLt&B9#YejtfkVU_3c5dGd9沎VG ;>@mpAXQ=rq.Ee 8;)XՍWuJ<1FM>MJ]} XW!r'#1eG%Qfrw&fVqxeZJ,Je-嵎eJ_dWs/W ȏ9 mp̵=]sp _=AfB?Eg2/qCNZS UյQn3ڹ& \A͹$߯)0F>iTTasw TS21OgC*\kil]G]$E-ӵ@ ]x* ѱVϺ߾l; T5lw.0ވx%wkxG_#z6w~C?}-l5Ѿl^ %w4w{Nlwwp8C $Dm6M Rzm S2YQ5mv\]K6^I֏ǭuzn6aO&v k ),h:73TLi;8UPGR8bit1)3pM+gdy9c~679/ ]ffiM5Yqd@2s:0HD/re~LXO"~&'(G)6Kq~'r.G0VՑf.aHc' 03H'ՈHD"A(<$Cpd" bQxt #BQЀ+ QQ*cYla,"L9i8Έs?QhzgIb!GJ)"u̢zvC:,fA9]uuj&!.K؅x,v{6f`;$MX-Fu@@!@FH4(7P>6 Q14 918>'*H^%I'P'!̡3 vJC!.L s#WUU]k+!׭ @Jo["+t^o@*U;B Ƀ‘ \&TC'fqy[52h4Y iJdRb*g;-{T'ri*JKvzsw]'C]{?im_dF ( 4$,9 *2 A3 +đMDKz.޶-+b@0!b$yG G!HL%l&rʲ,Rķ/hbN@fLb)X(p a(b1:0& hNM$IA((8͉ |P*2(* NtB4L!]L)U`oVUuhRTgRu-a]U=oZTU\TVMH:eAiZ6j+*Jշnۖ [n\MuWHCvzvW{`|a~`,3㠌"F*axnᘆ8~+ .+#.3;MqTAc6~e晆m&gfs6ehZ#chzFYP20zx+k:ïk˱mz˵:>kfI+d&O\fA+50G G}_G~}}WS|݅7|]U#83B/ሞx$^Ppi(bϭ{߽~Z:`%iZg@`XJ`pU6B *Ud `*V U^UP>8*Ol M\Q ĆR_yXDEBHhxRO'D([B A4qfD&DXPFM$^]QZ%EQa 8e2&&2f9C(Z6!HڅЊ3ԠʎK>Q2 3H$YQnM*RKS+&YK 12ʄXe a|$(8K!/& DE#?p҃BWC$"%ęU6Og n*IoҊ2 }p!@WQ*T"XwkV>n¨Q\Eq.OKۮ5UvUmկa_@MslNV,Ã#d50z]xq-v5{o ,C? X{ZKLiM*코lٛ8٬YViՖj[aSv[V^}5Q+gE|qUZq%tb¶$AN/۪k]n;GgwZUUuxA^¤{/)_W}|/QSW#}/ح(#󣔨QЅ6cN8n?/):SJd*zxP18CIC&C©!JD S$|'yuN1- M\2ș BføT%|×bdR,1(3fZEqTcsd1gC)LCZi `)?I|$Ic;@В:Ii=u=+4^VJ-])e>%U lϺ5dsa03nɘך"jdBGHfkͭ7RLJ[q9ҾL3tbW֗ Q;S>N{O\)pN N* t6$YJe} !)WׁH1UF.Zy]F s^l^0 \E;\krN=6I([Nm4PC|CU+x|7]&keH 14)\r>9?R}}٥f׺ڹվwu'sT#"&a%8ɥi%a H<"(Up$I"Qlbr"608 a!0Kf."jq,lI)-`B!R,P0L u ,-r3`J?>M cM,̐`dM4->Ӑ ;(- 0m[ _ ma1?@B6!Rfmw Q *1 T-E0l 0{(+X ۉV Kʜq`JΜdC[z9`B "HFE"HOќPE %i`L ">N,PধJpJêKq؀EtVBıWS*, n`NmjT Pv/zh@F@-Ύꖩ *",]4@>toJ"J&+-`s+%%U.& AD;/*/o]ꬪjfT+ڽs{O򿯺4J,/exVSEz&Un`4nmQ6 RSe6Jw6e"bTRHJ. ($Ӑ&%0R,Z%,hR"(N.An .)ʉB=,=l=̊"ڱG>i٬Ԙn S , ~13@ p$0є,ԭOC 0:;>:B:F:tJ OE4AEtEEIEMFKBWB4)BmG-eBGd#ieT@3zCm|2L,I./) .S>>4̢ IQUHJdܭMqoNqr`d+I .`"RS.'l#QPRG9&:ө9L5&RRR/LHñeTlKF%KXCUX%LF T!V!2 NX25"*n'r900$n$n$%/h.@'$ @$@,/G+vr]vR^^ҧ_^n!0U`+h6 oD6aR\ --bba!`hO}Z5ddu0̭xoyǡfS)f'fJ2 }EW^jZLU0 ,0 !/S{L)15sW4N;7F xn>hp`5X[ϑY "+#M#^" Z[5$[ - --J $F+o&򹒙-&^e^O^_9?_yAyDY50W'9Y#+tg9ixAT͗^%1hF//H3Y x㚧0`Sf%2vv|v3@f^ux|%Jf§*AXSNJESjiTf q4T]QR1pBym6lLj\3!ɥ̔&)BdC|3r")q=5ęYKWG tQtڕ# @T~W}2 @|ͫ-aBu'F/xW5yQCxF7zϭѮ:zլ:yOy|0Z| Yu}_}+1"446 }{L:w> tIił[YN]N[c8DP$fR6O8o{pyPDNSZ;Rd$QާpU %];Rs 7[47UJOVeNh>([<"u\xveU0r6v @ ͏ZI•0[Y8(* BagO`oa;] 6x@ !5CƼiK):6 [S2 UiV1m+81[bLq}k8_Qmwћ1Eb!}OԶՖ9,,*XOՊ6576l9@E@aT@Z n [~;XxX9"e+_x91<:sY.Qmoc_G_Q+M'i#* rd3, )Br&E"P4 L2!̂Q J2I,/+KR6CGA1'!Ni{ zB9pz}Q]J]ףe(ine:jjږb,Hx˷m[훮oeQE>ޫk<~\%zW3Z(@{gS]FmٮcY~GHPDI8{w-x]V^`7>:G!׹{$/~|w]}vwv ]:" "*M \0 k, %0AAL8+AP1 %oxF<,e-_Eb[9eŪXg 9)pq T,D#*P?"V\儳Arc_Kـ3 tJdE5hd&H"QvHI%$dh LJiV;̔BXK8`8 ɱ3  |' OJ @Z% J=E -1BCEAS-" ipsMDy_EF$^B !0,bfhCqgնB eT5Rɑ0EwbDWf z/Yk_^aUכ]#` @!36Jm5l3[]Kpۖi1=h\:&ҁ&iK`ZJDKpVѾ[Wmyݷx%ՠkIrmNQ˹Sfs.y: ˥Wu](쉻Xf@Кx|k㽯,:<~Xuvu |x>7Jn~/.pPMQ4%Ơ@KUJë>‚nIoRPO=>&|FCEd*zV b徕܉F@4ctQ;cةB;d\*\IKǙHۜcdi^:GU8ld6B͔{6J;GGk@Dðr:M"f&OiӳleB?mIV՚Wj_e飯4ƻZZb].Le "g_$fE;F66 twnmgdt8FMS7OA(yOւoe C>QK(_[SRwժ ꆛbu0`b <[&q\U%lOjür5Xp A) $!B\BK"X3V 2D Vj[bN/\ޕ}+<lvk Y;)dՙ7e٭޼! @ԺNsw9s7¸i8hnx/o' "8A4 :4 {5s B:o82?$ A2ABjA*CD6+6*$xB14MacC#Z[% 3SxÁÌ7éÐä;ô=C9SYTA54CbCYvzH:|:+Ț/+++ެ<;RIr=0=S֜Ij.ZI<|ܠIԢ\J>"+HH:ԈHD)LC>?ǰQl^e81yzGBG[9lz1](n`28\B!z(ҌfNd)SX]@A03>#PP _P PP}PM5"ђ2%0LygBNC $']$c;lU!)O4ROpL|7{z'[E|R]`7}7 Ҵ03^!“B8)*)ӵ9(;=N݋T ,ޢ|粌gNlzGB1tTO1amz@:*%L@XP@uTU`U]9K 380çzV :}c:>\߻%j;5kVďI q=י8;!I}wJwxI<%|<|}<=X}WX)=yX]xmxXyhMK#5s=o "ˑ˫3A=g>m++=">Q3 Z, T1ڭPډn15R-T9Zӹ5J82I_SӌC!Ž!}>[㸽N:ۍ-:1b)PT3`P*\3DM*#tV( ϐ ]O%sBO(Œ]BQ#,2]ED\C^ BD,A ] e^m^}ލ^5C5^4CF]2^`LKĤK&QD*_ "2TE5,7-` L#YKy[{l]71E. S8 HH2Mt[\U<%A[9aMEa):*Z!b@#D|{Mv& 9?p YbV&s*°$>V7:aV.9HedHq~Y<>dKԉL֭mdVnd8Kb*,rCXXfJIɦWlJ|dPdSeS.Te dKXdLX幞>GKL/Dn=#0H=\~qqggtc  Z㙱O%TctmL*}W9j\)RTPRn BC =T 9K("28;Ai3'{tu4d\B\jjeߥ]kkw 1%^ӍNkowwoxkwy5OzqWq_qїowҀ Vl.Okw D S5'VS5ZWKeGL@l A Ĩ@@B-P# . CBeYfW~efkYsfcgYzhPD8e " z~ֻ޿l;;FEQDi:6;nyum|3\.Kd? dAv-`€ T+@Ct?t=t==7un$Lf!}v/}#x5Ze~olZe{5Us_Ruy/J}u UOUe_xBؖeChY5*P6`yM94L|'3B^$-D(J"P'XHAxCf rRVBC}AQ"DXa?QQN*EXYQ@}Da€DiQdx8q:GXGq>G)(BHX?FP!Ƞb|Np]8PA ~LDKP C.Q)H <-pP@e`‚RZJ8J A ]*m/V0AR`@XU&0 LYU; ̙u5<Ϛ"e͹r [vN;SzOY@xO}O? P9E T.PCHNQZ E( Oj=G! Z7FE&4qs.EK1ԒҪmMi+ZsXB `0b$ܛ39 OS_ʚ5E\?Ҫ|j\y|VS5B_@[S}gRʚ Ak*\!Ey:'H2&(F 0<4# R+pBdY6V{5g堳ք4REH6 Z]jm)[[h 6woWYۄ*Zkͺ.Ճqmط۳fN\y%7V]p/m+zM^+d 3H@'W&A99Kt,$OL*IAPˆcM$,BI~![J2`Ҁ=dTk#Oڰ5BʣSo,S꒰LȌ1:zgJ]qӗ3_Y{2e̸sg\sEgg6oY:g3xy>ggsFe90,4z/. ~ϺC;M'ƑKI-tFD=5ҺgUYvκ{Tj]mZrOavZsM]^*jSXKUՆتUeTU7ɹhTmWh72!L)2ED2b'L`o&"%I^ݸg b"eXhH@V S%SqҭʿkE'(*Wԭ0ǚs>gyO9s}z \͹I+tAD|N:?%^a齏n7iY;p]YA>V*RJJ?$7շ"ӝS}Y/"Lt2SWXr* <ܻim.6O)Ѵ*g3yn !ǹ^_R}M9|_Ch_|*9|hִ_oP{?O ӂ,*Q&LٍQ9ٕfozoڪ}(V)~Oɔ$*4Wo HQHJܕe@D>Q2dp/t@d &(U|! $ɐӛ9Zi8S~"2.|PXQhYZR!3<4C4B=3N8WDNz$Bz/v(dFvG4zFfEGHI#c0T1A$AcA J?ÛKC<;L :LcLMM@ NN4NtNNTO@O O4O`PP`PQ5QUQQR5)R R5S7R5=T5ATu> B 5L MU U]UuaUWSu]VSV?W5EWUIWuwRsX=R)R%XXYuP+YաQ P5 ZPP4[TON\[NM38:9;>éKK?tJuJUJ20`I`IF4HTHtG}H GbxF`H`5Z@HK(bB!(=7 h0 PZkD-E*EHX @pHPf8QH$ܖPizQche?A^㓓cZ_v9#IVbY=)b 1Bif E6(O 5] N2݄MRWk7CAX Qb2a3څ7&z lzmxk:ӆX_VrG1>dVBi p4mzlwFÁ 'L q{ s t;#~W]v~ճ|w|{MyPJUzWz;_z7xE;=};?u{{uݸ9v[+{{WF 58!8l˂F:px?Zc㽧!ᅶن6߭톶ӬzـۓShEc?YSkl)w "8h`Tbx 6ְbTN üYE0"3C"xݡF.F)l?a9It`c z#=JԷK<^^#^]yM<\ŞUZP<՗U}٧yπV[<МΙ9ϜuY+}͕})[<і\<˞ә_ՔI^M}QK7Z!< /<A׼cClGp $td"6QX$\=(p\<6]Dmںo$6D36O<6EqU cǡ:1 Om{:݅Vco[o;ͯwq;X[r1t~?uWI);}5]{oɴMשzgm{|q?~>ޝQ7uWCq^7;ɂ7)~'V>pIxK^>^l BI(f8iJ@/K$o( OPk 6zJŸ=hWAV, ]}%]u%T#}d1ߟ Ty?:]әi̹qwYmѽy 3Tٗ<ϙ٨ d1 4.ADDDRV'GT$d4I+T0fk;Ohy CJ% H2*RizRUV-~FlrEيu]7D_ ݃0L&+CFVDd\_51[Eu}V"@@# eِamTe݌]nd΂ror^Huz>WXvw{aP82xno.S2{CBD na(b)?h)7P<! @3m ?d8!C)OıSD8]fiL)aG!H2$#HB+ !z"I2x(r)b,|/I⠈"Ks 0LS*"MS`5l9 2N$;*O?Jm?5 EQXBuHH0*T3OStMDSc=QUMX2ՕE_T=d2֕k\Wu3W{`E3 v5X-g`KZubvUdih`WrWuYֵ]vշWxݵ S^5?NRt+Ft>at%4&#>bT'>OS=Sxd31L<3s K|-fr+򌛛Y̋HrgO@hPzBhU 6P!DhVQz1Fg T(oP}?fҚ)6`1qJԓիm,;'M()ru(%MSUV}skRuIW9LTЫH* @_! 2"[!E.X!cl-v*׻ _,śUW=flkIi!vtZ%k6Womյ;{p-¸W%ww*\˞ wJ]ktջWt]gx/ Gp^Uz 55&W|/u_ yoM漷;y`\uʻ>`m—akqwۻ}6blKo-vZ _l18c{?j6neV6rFH/&؛a5vel)ԏq=j֎]uFPڹVT62Z˚۔;57@ՔM Єj%5]Q~hh&e@N5[.hu B"*uP!4R B5ntY}[5Lz-{v؛Vj ـGUlW5^;Wkm`EuNzm흾k[pnm˹V[v-߼ky-7n}o 2[~x' H8 H\I fOp!8G\3pQ87o{ۚw;vsպuOA蛣7kj흯zڛ?jնnwd6/c읖 uz`vo5nϻw~ioٗ5+rlR֧'^n1*BsuVݐ#r.1qNɷ =.zOE=+>nrLJ䌗 a$p\^o,O/"YLu@?V}lsq8Ƹgk)bI-×+nGJp7/"/#@L@B<@*@+@?0<???3A[k [ A?#?AѾ1+$B*ɲ>|'6 #‹$d*2>K㲫)RÍxS*3QC*C9*7%@!)67RJ$Jcٝ"zS%K*;<ȏFɽ$CNc2T)5'̲$<#4!1-BAML\MlAk .2A+T@0  J@l|N:JM?A 0tM,M|0?dMT1*#1? LO&O!,OB (|2Ʋ@) 2ó6C;3M3O:%JVK 5U,KgK4A%Q ijGIJN|II $E#T:gtsEc]R{Ʌ*636SԔF$:/RDf0HeȼiFuLjȅ6Fԅ{T+8GGT> D8<SG9{ӝ99F6ȍ5k:lȵ4TUfTFcHM/U].Um-U{sRðҭ[IWm(;V;ZIaE[44eK9DYJlGyAH)IGVR´%(=|ŽW@=vWǜÏ1U|ה׈2=CU˴53x*+%+2'PO >ՎM \ő?,ODcYLND0kͬΔ@@ @Y@eND4 YY 0 Y@՛٥$.YtY]YmYMO5?$A͑OR-[L>$#BL%س[&X,P,.[ĤQ xׁ4-)Xd,(d<1XdlMddZڻd0/4NMN\ZWZXN,Mڄ,eM_N`Z[ K[K1%Ot 1hϖH[c潷,dfՊCXCB\0E13zS+8I8g+S8P ˭P /!G#ܤAJP(< B q()¡(d((01O!B Ri%9\g!2 BD!B! DP U&J*}FVUUv[P6Z(6j o\'t~o< b1S^'b8lGFyQo+fYlg鳺6{vg5=&{ixZN&?g9Y\Sc9lwWoswW_=>t~Vu-_ݏJ¶**p\)pr- .ȺI4BD(di:YQ #I"1 0D)0L\2!q|9qs7O=rS5NM5BTBDG|rg}=9gJ:V'Ң–JJ?L ~PijWo{=yL:'cGL5e`8lÊp82Fdk͠2BW a|#X? Fr zNr9R"Av"4F@`<p*'O*}>C}/D(.=؈2睒Nҽ78`+Sy3<ʢTZQIWTvT-ѼMɼqmŶ6%n\l3v5Շ;ڛQi-6y6Ahm lpϙ\,%غ(;*LP^F<Ƙc4fQ<( aIKC)C/4-wЊS;k6~O=AiKNzVg[e5;g\3N̨[`pܫ_Snm7iRթK`eS*뼬R(jDM.MAAb-.eDvvtѱ2vIw$ԋ&HǬH bVLYr ԃ!0J(Q>"z Os߉,Oً{ Q@D: ÚsNIpBC~jd&F“s~ɼ6_hs}NF 9x. kt u:Q&$@-yyGDz1k]L[.?' .11>5|w<,IL&H[Gm~uR#*ݯK1qḛy· w AC =fo¨[!'3~HB GFAg.Q sE vlM*DG&ĵ@(p4.qL2m 0LpgbNP(L * vdΐMAVs"DP p Ov K iZPDsG1 =Ny0n(g! 㰌>sp)rpNFϮNIh% ĠJ,kOU@e Xm +0L+ M ΐ~qm 90p ` 1dik ͐Ry% Pk Jp"qU K`Ѻ pDQ!Ѻ TZwny.DyR ēgi$C8#InwD vGLjʬ%/ db @ƑNI!njRPPlE,.b&y!$v%'Vw2 %_&L$Y')HryEl""`bŘǪ{Ozo,o#6!K+U+2)/$2+"R"nv莕 .u Ǚ 2 &!6$I6"Zv,9#e$ $'O$ $E.K ]@!BQfG<ԕJMIL tNQFpJ !JԾ0uNsPq'U?bvL.#=EHqmtԕНLJK/ t13R4!U41HT;C JuAQs`DoI}P W'Y!x)2J"j2&rz $f&vǷIt.q""y^ӹZDE2=!d3"5`rs_(yU\Ρ%bi2. NRc3S9\y]R.p6z%Ud'tnStH)rSaս+67[$_pz- 8&uvm^vf,ZVXz${b'!"'+?6{)nmm9)S"/.ea3%6"{V!g 7[sKcs) `^sok7( vfan΋s5xJ|!G:s0GUNp8qv1 tYfϑv7O™QUywyTe5[pApʗ0QkGbI,rG$Ĺx^5>OuG;~Ot·L&9|nNJ*X%zHϰYp Gw Pw5M 1Ps*oU1AGzpKARUKOGD5WLk4JP)O A@Yo qSxU ~XVtpD[ Y c=TWG|QZ#asDs8G("N[Ro2#i'ke: vlPD[254I,#Bm5G 9y0`|%K[h֓ॏ(m@ʳ^+MMZW;sr&3tgnG+w'dwL(+! HIFG$Dw%wfsCk\{?#:(2Ks3y2b]W!qYKs*c6xysa*$iyl9-O-0N$wR7ʯ+Y2r ə=7-šLG,1Ne`$v&:O6CiXX,T{ b>PVuo=1JmFDKp_5MEw}w±o<Tz)xYH_NԙXKWTHSICDˬCT5Sovҕ)wrY.2CnwAo}A7<ܕqyɹ^W% {> a+i7La:q Eĵ0, {G [wuصp{}5oU1LO> _)qe>%O7G䐭i}'N['籯PS8M|vX]]I ΰYGU~_^17a]O^4m' |%m>\M)i8uwǵ1y8~׉Wa8K=Dߗ5)H|n(:δ ch 4Bb{(AO`Wɤ鵻JR2;n @yk11m? ZJJ*#< 2t~2 Űwop(q'۟X}BwjlِØ@yO=v.3Y2&.WVSӫƲ3_oa_5obNM\ ja}Ȑ:'z$*zTma=UeX]e"QqLPIj'tU4RFJS31*e9"VFY"dόb+1$u_8Y+c\!?-\Km,X2hi`ƕd2,`95RU*Q]&}ײElټ{Rք֢6=)UqgxBʩJM&U~?rj# m A2ih {&m_LS{,eLֶUb32vܫh:qZNhmeB(n1(‡ 6_5grȍ2-/ݑ탛s e@L1v t9%HcE.D 8+d˱PidKwݻoj1Pʹ:բDl>S\2vYW,^'-c4s' xFW՛̉t.H6]Jm"9g$7<bs?d`~B |J~Ͷ(%d<-K\,0hu.!^=᳘>\ fw҄^/b9)'BMpB3dQ\;&fI(z){$ 1[C!Aoo8&cA9bҐz |R*Kf1S%RiBS%*;("®Ym)q*b*y )lA QI]6A$*QGBZ x2N&)$&@rg'b#BT3=>sl#:3Ô:%1,5[4*1$i*47<FR\ 5DGDɀ@YwaFA8yDyCuŢEL'T6*n@FtD.JE13FC[*0%;L,g#ё DZ*a*E/@{[*?眸.0<>3B1 ՟":H"9Ӯrp+"Hcι,$/̋=尜~IK-h 9k C-RHqWȪ+sJSZx{򴞢 *Hcx`! Ir ﱂ/s4 b"J9" b..$SqIjС(ƹ-ɺ-̨>{HxpF6jY$8kj'šS[S:[~S#SlDLK8&MMi.#Y$$3\zF*ct&ɟAk J&+<G*)#i7\AG{xJ6{&YK(#tͼT7/%hL?8*KJ&$JPG O,Lϣn6VbBQҒ-EknOHWMLNi$}84;R+x,aO4S1DR%8Az%5,<ȩ 9jO<$tu["S@Yܺs{ٟK;S0HBX+KS8EzӤ%X+"z"<؂=b=$hi4x`ž {lVy8LBSA{ɈݞԔ/%tפzԴ}Vب{WLpɠ #? O+8V*"Ha|Ll\|ᨼC10Frtr'ڭE]#Z1DDShD<#_GAp֯̓^aZ JDuHɺ>' a`D⼍9,c*Hֺ!lL~:ñv"n f.Ⱦ:9c:G8 6G~Jd9+9Ät*YD4'Vʳm.Mu#P[NU"ѽϜ^TCvb`*@\%p5 &#ZĆbVD>g6Y5Y)6ao6HU?i^lf=5"jsgER$2>s)IPeNx\zgqp&P$2JpR) ]85-2Im24.gj@SRBN3fXO֝C!K*PF5rMf~g$?@mQi|0viqNXb7RBOZn,Gb ըXtbJ_,ƵL#ЫK0Ա>aGlὂ̞ǂcDTJr =aK TV1-h_d00+F _O1̩.Q,K؆RTk=X1J吼\Bʟzz>9mr/t Io1 .Am&H.N36ʹl0t/QDJO3u1;Ԍ>uEMKS5]5WVYS֕UTl)̢w3s=xG31Zӌ@խoD AP4FU[m0u@PcdVE#RLAeW)RSSu5eY6Qn׎;=0W{XxVT&CR]5YZ^{teeva2YGTuE۴D#~܊upY9.hEҬ{}/aZZ>lZ}k\~Ga;a5J.r /K䌲 ЦC-,b*K$# Hk_jg ws;nJJ5~,u./ B_=+-;9+k@t]_4uz- v/6sz unlBzQv' 1N=AGSIn^4%谘ALc‚E~xRB/L2CAL8qhmٸgN$O5?:I&B8aara>- s؋pfTpX"_+QUBu1!e 5WxB!JD%"Z+h]=6Ѕ#@1ZBF|Ti42D$_B-d;IiI-:2r{0~NIg"-&Qw'ԸZmMAO OL0SW,Vc,*ozNL>٦3j}-?lKUnM44ABE6*҂9/ %h'&ֺi饌NjRjy95N:nWfĖ)Z!@-h@"b-%Bsg,o i:YP5rTH7@TR(8H$ZSxh,s P']t'<:~\=B ^H1zo𝲘w1P*XfM}GRVNP1&)&1D$-jX%*9tB揎?( K쳶BDɢA}-c. Yw yMK =VW0WPs&4LVW̾r4 V+9kqR}D2+ky KfJVV3B?jBe^w6f&6uYqKL'afLg eJK-TZ5I ~kJjT-'b}U8%PE?SkEy(1: W xeDM_*(6cq dkw$kɉ'FVC',ϔ?9NK|A0;ltw'Uf2;.Y9HíJVGouc $ Kc Nc$a,F/i^3XkSq37S&{3SNtU73j ;;ʇnp^844QH`pNJ(Lbǚ%njrƁWIڄ.vbtn,Om& Dz||k:1+#JP"P,QLdj&F$R6$ Q $>gΤs&;_$D#ϑU tx+J,^v' 144l: nQtIu Poh"bqy> [@NYYt*w)ZG"{SMPu@#8c$(h(\ؽU*>U#^D%^2l ` y)?pmF8GDGp⩌Df/Y iDQ&%V\aiI-Z0gCrE)?TQӽ9 Яg2-8N 3: ={l k0`qhqBb,~e  *SB6kh p4I<̩}+T5r7gMdF dEmGFMcmvOuJ{unqsF+vR1E. L7gFwC9ׄYG+Kq $R yvxhw-HcM(H(R̄5nRQҨ%.cRoRW+M* r-ՈUoO|.x"g28qd5EdVRMwRwh~@'wM{8?45҂4Kvnt,L';a~1J1J3zJ}.dzQ,5yQ kIQ؇,1*W*mpp*7,@A7^R 7du{nXI!l8C33iT5A BeٓlTmP L#7`Iq1/d"ٓ5Ņ88s ٥k9y"ѹg8Ɵ֓9ڦL|97HB%_hv]6fjZV#&4;FQ@*mg3LReՠ6,0d'DĻuT2A 'SyGV6%/SKaU)[w&Nyw@;e^잿%2CS~v~5a?;|Դ^ny Iw?^I QwZetӶ\qvWr=ћOs3QͿy9\Y 4Y?WWPRc3?ߤe]#>: QJRB GHALB: "xtA XL4%pHj E89 K!$p9 8Lf$ Ɩ#ʢȜ:%H(*6#Q6{c1x̦_ TsTcx Tv#gADsmYФ=1c3!#+dY- /h.jgdӻ/_ds,*g QNG7+CnJ=[:Y<[l݆*};Mn;g H-yO~__э 6;&02l:pRR;%0Xp!AbB3$22DT[YsOeLbi7GvQZ20 )2;n:N&͡*$ Z{v$_|gx8*]<t "1̼,W.צKnHSo,9Lkඞ.ޘi r@V #3NqN\4%ЋW<GwtTO op%[KD8/B)p1B#!30ELWB)dæbC3qD{d7cKd[|,J\Wwd8%V.J%+2.uAh]3k#ل1cU.$QmE22ypd SdQF,ZD ~N*ЃfrZB1ڹk HTKFJfOJddMiǕ]JVb2)8Tqs2DVV́Hڛ*nfxegF+5,eR@#VLY˅/V|X4,Y,pPYA 2PBʤ ui8S4e I3hFYHƕ"Ri.fKGhSj,NVf n'tٌNs1ƮF'‹dr⋓uGgf9cKYw.e{k]c%MԥS5ZV@U8䤫sNgVua{ҽVn)0{0"\avMfY:B|KK cˬVQ ^A v;J͡vF23;EB+[{Q`S9')dU-N}mO>-ZS6!֐]s_1c>d;aO|#JxxXIuc'7Ż9WWCTJhCE)2/F+O>P/#-Hg5)VQ2>($_,1`2rE)A%f&YnTEƋIm[C!9TLQA#ܙ?-a[4bܱԵRPgr'R3a@&k4\J%hFlї3hd۠8r ۓCWVs qHvp:ɓjT{?Xg'e72ܫ~ID@wuxxb7ƅ G!^4 OIG}}k 9HK$uCa'm'OFO^䞯|D99pw9XbQSn(f^#YI޷G__ ruF!7NqD{mz\ 6޽W>'Kⵃ` Ƽ #*<(?kDz?Ȋ軚1@@!K)9blC'8y7y9+;R.$x$*%')J 4ri8%8h ba?6~jڍ'?c#q&tT+9A4BJ4J>y)=+S8)](Fm7lF/A'C':#w=6JA])cp*)WSH8I,qD ]y |)|y"Br5lfLC~#!A[Ai#s;iJ#L7ʙy Jqt6y4:8v%#&wrR#dxzƬR3/zԱ$z+1 2:ޜ3:."<: ̝ײ<Ij?d*hl>R.k .k-rH/K-,Aֱ//d z= !/>.[Љ*-3 Ϲd**:R vŌUS` D򋪒@5 e%S'SU% } [K=[?C \JˤĜ^J[IөLMl:Ӄ p b-¡̯Q @[0ZƍRƏbJ ꞹI5űS;]ޝ?|X.2PM&9V 82mT,3Ii`,>Q6hj~n^$$ 7)`ЈQH*')#Fd8?%iPU,: "Dpk7#LF!*"9=G 8&!IfPrwO6'Ry%-0K)VLSYR Nf#fK^Rj܌C'Fw m$,osȝ~S+zn㝰]|ig*U{uŋs[ !V} ı]S+Ud&b?U["i嶨'hsC+  4ۮl*Z Pb1R/l0n8li“F&ڊ2 Ɗcp*HN!@%ɲ(O"+J24o&!P!K/r`P)<$Ȓ4NS* l2M6r'Lrx'RTP@%j]E ;Hm9OON]GD!RBIDJ2OU-US5gYVZ `xוw^ b te_QJS8ρhMkOJ٣CK2t%LاHUK"˓:J<:Γ\0ҥswYVqeuxs jZSx)CZ#sS7x͖ضeSPYO-v nfwd-ɗvw(դHX,D޴\*`%!Zpmi,-[wL8iirI)2Ԛ!>w{rK6DCX-`u-ZT\*P87bHE90R90CB]yDῲOP/e((D01/bN sB QoBS"s{TB(C`B@"}rbhv\Έy;JQyP!I ,\ #T#rrmE,!J .C$TT4TR*OR'e:\ITK9bBlZU$G&P ]-;1KPkͱjc>NX62ij*u)IX}oJyy- 3&4fIFh<i '"{LK3- 9{CqeSr:cpQp3N-iÿ:9Cg\g=ʗ&3dvc)ftJ43C1lrmT8GBTvpo*שkHRi5 ϙ3Qy/3jlE:]V% dcrωSQ2tXMQeV eo^,HBS՚cƃFcMD+EpZ1>ffyLf/,4r3L9oh̩˖M6]]1(lU:X&jhSkm:й[pԗLO3Zsh8NLFuQ^aSɠŧdSCk(.K8uwb %B+d'ʷ]Z3Ki5o KkH̘s\{s?DFy<+e"&DoꜮl75Ygm.+ 7A1F0<C|~Ĩuc6H wV]DbnkbfH0Rut(AGיI,?#@$"@K DɋHhȈblXɬC̞2hË0}sH>ux'ɯ#"$L 'oyox 28Hn%\wGq!R cc2*/ξv5kk?#2NFhʎFr(%rڏ8 \RϨy)Ҫ Mo nRH}ZQ²A ʢu,%B3,Ʉ"\oPKȄ!!S:j’O6SQ' &֜5j~ل"flm8pVЋP.1_d^aى<`e= p^D@MiW``ɿj9ic38i >ȥ 'ZHQ&3pqF2x07>@DCt6qC;tsB;-f_fQD)Lne?9i4 D 8͐>nm7*D n,%FI_)FnqJ6S:K:f3-iʦiiқ< 1S&b-1n=$<<@1=QRŒr9B(iSc˖AV0 zo2wdžum#GH95.#(~  5?(\A B"IB0T}s,RlFLkW"t5KT-jt?S΁|` WsvSi'"E`x̮xR_"ԋ/S/c creQx ZV 6#z( e4gh\/6aZ V2'%:&LpC@T"P'ȣ.f gE\P^kIDʣ 1&PJpD|N !𮬉awWL0tYAJu%)!5c_CZ'R{4'Ke1m6u5h+,J"H:nCHDdr! r{UHu23i#BK?n%x략S4S*k(߇/##K# )Bu{0s2봳 xҥKh/|CX%K%L@u3%XKXÑ0u0A1u"|h݌a1c,R+3v xZ‹A&r~S3u-jjhIͺ__QtiT>wءq_m!̯w;JGG%EEmC C70{) Y@S7]<ܛMSJPL*$=1yii~~CZoYQaد0WnoL-?81toFz/iŁrTitQY>3O88~8S/aOdO>rܓcSn0Ox{QQ6:MlZ9ԙU JZΠ;ЯJlSm|4li}TG&*wٸaIwP?jM\KnPQg7?Fٝ7 ?  QNTAPhNC)L$Bu gXhщ EѹQNGGc^u')M7̚SK3 xdʌqJNen6'צF2(Qh3a"0*MG5kj*]i<4c+ZCjFՄ8jo(!fR:E)0is/%CtkD-^clPrp8)EH] G<{G*mNCssWL}k5׺;s;鏹׼:8#|B9N,p&b@KB(买;=tAnK9I[i|/ Bm%o1A7e'QDn܅":nԞ04>HS"p|7E2۶>63QtI+@/CJzؚC4,p?O%QROS89d#Or1L BQLϋ˲ (A1l+{YVMqL7L?Hʖd6=T5݅dXp^Ϣ !aoƊ2n#! 2,z&]nޗ 2e,8: 5ۅy-]l{2@ 6:d5 z6+,v0m벞$ c,ҼkD 6Eۘ%{7C7{*rC6đBr~ӑ?"/ۡ.,8 &!4: iK$5i9jraEAww,hVa;{i thxhY+3NhfުcFm,8-wr{\=ms?t3#R$H˦j֒ݼ?6LdI=VDXADy44 X-= {R aP$<'CkQ9i\*Tm!0C(t\ҳ9e[R:/=+U3d:PDA#T !'Pµ]tQN0)$h_9ʲ7+ M\;buиSG(?#tF\SYH,"m4b+)¶7ל(lU*$'bP`iiZ!4yeiqbUQ_Ki MFYY"lHNE+xޱKEI4 2&Ty1 Cib7J(ʧN,"в ].173 +E1&AҖ"5(f$G: 43yC%]'2d>$F ȢN#%L0T.,ݠ@*JV {-)hQbu^JBU#l۱~MӬ89&9|Ug$a:*tjn6Tau*Rg]U$U>>FQ ,գjY;ELl 朹AuA R)6xWk.+ŨG}n7e+ЮݪӘۧbv ny2JX:pKy?}Kx+ͪmhtZ0H+luڶn涔ZQoNa.wjmAK$&k}m;tܯ27R!&\ſgv6fUl֕YG^AbLIdz[=oA<'Mz-:e ]sd绊͵N7儲Wew3Ӯ.vUp0y}_kmv(O 2]bEژ:3J+r~49umƟ&*:˜CCU_tkIQ@W?2MCrM>~Vg}(U?XլO>zwi 52?$RH$os-$r/4@a@P:9A(2Pb10>C>"CJ4>C*Qb:Kը V(AȢbF="x=ae6!]A{M'b8+.LsX1%1R.۸Ca+*Cȝb+: H82-JAJ$?ȓB(D:3  94R,"ſS*"Iؕ//ax"b,+*Dy啨F! DDZ dG Ɍq9 F!/cټ.TnfY[;ɭ\euu,tlXDH)1Ȫ*H)I(tdO.+*ª&ɠ>2EDL/T;-ȄVȺDQkE˷#si-Е)ú$1  BLh.JPJ K;4,'R\’K4쳑TKLJIK R1#D6*M|BbB hXˠš4q1@J4iJaJ@!&9Q$A/!M,6?H"MkBZz=U`2#ނH:?362g=Nc>:bN<$kT2)s8${:KNK3aJL$a̻QզK>/k1iJ_?Lq<3h9;0S3P9 xP 0$<5) m P'ʓJLӐ:e9ԭPʬ3iZˠ+2ʗJ:$W J'#dKC)bݽ|@޽J0K?^X 0ͪY48%ܫXg0=SCTuA'95X=KچP$W)~8B$?<>;(:BDEb%BAZs1 !ʬ4*pA AS!1,Y<}!ͳ2`M34ܢ'"5 4!ۥ\AV 4=1XR8 Ǚz6i8Ɵ3ࠩ|Dܗ /QܟCTsID E0܎U۰nj7~ĝ%H+ՄuPGE %GV  a&G~$` xbVa J̉0dMXem  *υеN2KuP#TbJL5QJZQ  f8J%O4!#M>;Ad|Dcc|ƾXŞ>CT:Ic&O#MJstpLFJ1X! C}1Jf O=y6$TK B6?fQkKL% ¼G4af|K^qN^MQh"FCOʔzb9iP=A}T$fz΅ cNL\ECJ\-Zch1D8L8 У*S!HXtN-)##jTC!r8|F%!T@o3$ ೱ<_gи vϧS6a̧4|DFC)2h[)I`N)j BHPa-n6`(IV(Px9RQJS+QLt*BdEwV q"Td$dee08hv'aƕk(zyu—42_{-~TdCp#c{,sҜgd{?:rbHȪ¿ڳ.00IȩAM"-\0NbNCFDRR5ȫe7|> bNgı!Ӫt$-CO*ʒ)/ *K0K)0ʓ*\7R/s=!S<(@M/L:! s4 NTm'GRT];9SeJJӔKNseMLҴ?K a0XSYN]KGUYMuuPʹPXsҤVdBO:'@$K M]ԔhsRVZ7mھP7N͒/[Sݞ:E6wwZLwf޳Ae{W78fD$}Q-wYaNOYUUs=%Jf5cWE5$`q]Kh`Ǧ zv|Y+2bՋdg25Y;N$ Am)̗0!p,C0 s0xP*H# CwtJw5CW"J?ΓtjHK ʬ]ɺ-S4,hу*sM62Ƴ  nRݑ;xPC,tι[_e;x,M~m˂g9u/ ǰS#xfE`d0&ݗb)<roI* gd1Rq7?I<<(z 7CA8T#sP,xaiJw09$a3},nL1d줤\ 56Y,Yl=IE䔡WrFQ%AHJ5+RU#aX3b]1-%:c RYR.Mպj* bL4Kpi7̹E&SDJȵ6_^'5T$SaO)XԕKՓK/,ӘI27Wݔ,2r& 6eƖ!ƪQ$An%h bI~gKYTt+ )%12TАp -=ӺriL QJYh( KIZpƀO5T'֑tiTMaQIA-p( [(U*SĦe\NZ2~ueu)Y|osO '@&> hA Zk?$ }Iiz(  _4!BcZbE@2Lz}ETd*O?kq-Գ*'Vi"&1] Z-wh! q= #8y1 2"aLYDY.%dB3h?ö+=qJA=;ns y;{e^6 ; Q'b쁏7%Z#gu8Jf\bM񐲝n(FËZʮ:K80φS_,\3ctd~jZѹ`%)*IV[~qMrg>3c+#nd;Wi{LsR`ʉO5fƔ.L_2ݏ ͷh/i1W.}@vS'6 &hygYΑklP*C&̒5e ֺ(|b-Mx&fBU=!h2!-+NpeJwLgxj.SyV]MMK 1Ah `%ػ'8:Fb9*NY[KS+%ocz֢XC;2ٔ'z۳4hnnUE:Sw|Swf]=oyuq_b1+sc'粻h3s_ {#؍&{q:0?zf7C`-1:(M!2&97>bKǙ\<.yhSfdMx}0/i [*hJk"ii./uo{+(nwNnOcPoEP4.F쒉"G..Hn d/({G ҼCf9Ǭke-L4}F($"i /#,Wvq1:amo0_4oJ3&eMS4p3@ݰ>mA44Xflg D]3R0 vb)^nBK03jjy8 -n$ ֜aVitG 77qTe[>-7Fi8d;MؓPhsl6*l4 ]s6eK,BLSPI@"l0B5 X CNQ 4.oC:6ȫ6^GbDn9< diG M^"NEHT4*qFQtVSF ҩ~eHeHK:q\55QZ1(b;&%Un5U#V='jc4L97<7>w`91L'Ve9f^9Y/3SR uGx|^0@@(R ' 'chess.app-33/English.lproj/3d_pieces.tiff0000644000000000000000000105061013034414342017112 0ustar rootrootMM* P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%gZmVeo\nW;w^oW`pX:xT*P! P@1@ *U"q@ZT f@!h VB B&PU*jz ж 3'K JHHB Ҋb.,y ǃ 5( UTJX8 Jz'8" =("(@*f'͠1H@ d3Ȣ0R +4͡!("#." %p<((4.lt 2!Q x4p@|5> #,@;r( 8/'cH-@JH0%!A EH$@-Dވ gJ(Ɉ*"1sJ ТPrv)8 b/ֈ 0p2Bf -oZaY+>\H32 (XHi ;D]RBgq|JJ;_MȀ>,Բ#p8U ?W5r@Ti%I~Cb ĥ2X Ub"'օF@<:!c*>_;JE~PaK` Z 6 @(z(n @$qS 5(P _ t Gy~Rhpt9R QRz](@5>DZEQ" TլPPs1V}EL͙)dwŏ]7b[/"R*7H قR  /}aaȠYXVne1cPh-k6ib++F@ P&#+ś U&*OM$B@ DŽ_:U )xs Vdqiy1 Ex?l]>B.oABVԐ/0i 1a܉|aI[H Hi KWxLA!@hB0\! %.5jљ`@(P:Zp%d0525E%}t7`!#rD(CϯG+γ!!j ><Nv.P  "VSCD '=ŀ"舘Wk: <O9wb =-9 o*~Vx P,lORlð-e oN]-P T`Sa l*EVzO ]B~dO9f=rt{.h7 =H`V6f {nXAPKnA@?PavzeJ6"֋nhHYO~T04OVhfθORa|I@ZeOpb"B6!NvpLYB(Ae `6N 0@!p_>c_*: n*haiM 7.:&+Nxk`VNt0M LJ:nAVP氖 ` L, ņ@1$$ K@6! =lF J6E Vf $1h*ZC^ ` 2Eb0* ,"@Z@ M@k`-  a  LJ c* QP?!cni T T̬< OJL >Vl$p A\~ !Vt  ણqxS~' L\ !pZЖ)@j^2TʢR f;2 8B ;hЀQ6ʢV$4!]/,);'&a3[!\,=%^v 25{f W QPr # 6 6 ~WBinh<^A4nT4d@|n nr` @c$ kS "lMl;4NGF44!(,awx)` `.`e6քp:.@SSd@2S746,sr3 t \kB tJO63B Դ tatL <aJ!FӃ:YA* 5iU$o({# Xj6=VnŠTrm޾)^``#?=!0v(@Zb $Gx ybiBuK vu~0aW\֭RUiQ t<.b=]&>ij6C@Vb@EWTT 0 U"@hi*h~w*%R2.:jwJj_$Y|UI\SQaQ2Q$T"G̫ ҥRF~jZ D\,*1ܻUYJ<4e.W^[^QEHH 8"!B+9dԥ(-p1KXH"R(P%ndLw:YԩLdZL,ϥL%sbf߀ZD)w]%lhh-&"$]}w }OJ./8  @QTP8Q2- \t0&J$\4` (˸4(48 ](菤4 Q5éR۠UI L \;1lOT s30Sǒ.-+8UNI.Y\U $@*M 2%B*%#L;StS1OԔ+7TUUWVUu_XV5gZVo\W5w^W`X6bX5dY6UfYuhZ6jZl[6շn[p\7r\5t]7Uv]ux^7CW:+yu ޷PU7x )фR5" @aB`!*-FA"ݒL @x "\@"館(63+\0(*)5 ͵4~+ HBj9ͬs "# ;=FJR6j"i .뵛p4Ġ@(fH /C"@%46.L0 S* dku<2ZI,7sZqJv_2`(-MO5r*n!f (.+?bo~XPVlPȻYe52>X,Uоu -|*B)~@ "ۀ @ljҌϝ YUcxaD2s$F%\\7|JpIV\Mb_apHoDEK|(,@XU :Eb>"or ?p;+ a|%!RĐaCJ%ZG_~@20_{2ؿ@G$?HUx^/UA7CD1$?3 @@iIE\ p \ *eP?&"`,(ajcuJXlT=,pH fBp(LVBtH$ zP_ )Bh4)I4}@<ȹ.I*B-Bc]@G/K:ZaC m.ϐ(+'ʄ+\Vt̉Uɲ$ x# AT+ "VG(Q +F+ޮZ]]trВ*@[FDOBc C7cUp]Z<.]\hrpA 7*(j N\l#tcuՔ)MAoG* &JCH:f  ?pdJ  a)p.@Z$@, %4A ORj ps%+s+9: A.3Pb(pۯ:opU nڢ`T$K $Was u:CH!){)-n}@%< lؾu?:)IU@T"<`C;5+b f՟5rM}M&SPfñ(#f-elxRB)0sFy S EL;L{EBbFHU esI FˍHE $$@R>H M w!(TEXd KDpRYp0@GRp҈aHe' *>u ø235#(y@RPBE^J i(TȸC^ 1 i;S(LXpp!Y]Bd+ QIX1$CA w (~%C  Z\L..6R߱?aq4)@] b$8#(K0*(+e SS+S09E(;̰Ԋ+;')@5 2| 1HMH2D %a3 QP@BaG! RB TBh)tVJ0QYJUGP)EIT M&R T(ds Xֺ*(rSTVSEuSbBR 4+){A)]: JmWk Պ4SWkRadW8fQtIPZُB4h(i!P Bt*_T.q3Pӹsu!)TPIP*BBTPˀj@܌,1 Ƞi\D!@SƦI{*ƂԶ"RLҺ&m8j# "[ᦡr*9B4K,+ٵ ..{\I>(S#r( RP 1j 3"Ϛ8 *mL T/F*3'oTWFB:QTUP:/u~$zҨUz\@3A/ m%Cs`Qgq]E)*#YR( (̿ZHiP3j"TV T5y C,n(5UX4 7n`(2'؋o|&14SM.8-OS>A@*"Ϋ6z"[hNu23^N@W " $9c I;s%YttU<Ј W:|UL=֢`*J⊭ǂ|ga߂8* , ˾ P}4E# @Ӟ@kb)T4Muj4pT_G CQgS 3#(I(GpPM,4\o U qJ\jՒ0%X^Mo`ǁCKA@/=Â+PhtrGCufÅ{u>+ 2PN$d8E Ƙ0R7T-3o(d&@B$\%I5@Yu2|lE*!Fbjcb=*HG+`0د@Vd<TBQU&H(E&*RYP*bwGŗX4KWk$B^;"@ 3Kd[Jq+ϤKd\3 D ԭ.Ex ŞRrL/ĩ]H 2Ȉp 8,JLᨫTA/`5/CL( HbS ZEص:T,t]/ "ˀ> 5dITw1X{ TMPOhK3.yaYAo`UM֬F.kZwHn`JZ0l|m HGaf$zPA N/مtl*Psk >O81)h t'X;xo(wOpZVdA>aQ.d- N7Ц .,?'e0BQOSBSmCeX1tș-(Z)@=M'kMT?1vɄ%)&Eл#'$ fH! 0YÏ5ś,r Q@D' oпcH;XJt¬ g=Ivhr8ssJP.FAV.OG*8VJ V"3FtV6"l\ JѦz'*MhZE&H*,cL\LĒTE 8Ʒ@/4W N @{•eN#Ww3:C׊DrP&L.N+R-<28*EI埳8aüQ p_-.0a(p `p E&` Љ(H͒).`P! {f (KFо7&bp 5IA(Оr&p ת #Й'0Na A7n)./)J$ _" "ǰ/ %} L C?o'%!|((?p!V!AX FD/80  2#"< j^Hn/8O2\ F "ab6 02J"B!&*( + 26&Y.&"h 9.$Ϭ$Y.^!\3~%0TlŪ  > ; j32JN@^J&TS b *^coz `.N )"οB5Oa~!4_ R0f KT -B, _ 4&~?* A~&.4>A\ 9T7.N. F*)%@("h3,s &*4&A(;j g^.AZYB C *  a1l fT B3T r T% HEBŒ.Bj"20EH"1~ FRLeb @`#Hj'v T4 QE2@ /"o4dC6drrf3v"4\J.*4" :`45 @c$) ARL3r(Id$m! VJ_#؍^3a怪Qc}L Q",!)z."( #( ՇPB T Rߢ8Q !@ 3N K`ftF5Tj=p N P]AN£"98d`#fO^3. A( +u<)D/HP` .< x6!"4EY Jg@ JB TbE dvT@R/` ȁ^ɒ A"H64jg26X| @ -e ~@ ^J1 ũ6, eV @Ң2&-E2 2 'E N*QᲑZ 2TgLRrÈ X!Ol(#.{ MyZZ>efGeY$#*rC͖M`8O[ SA>BvYV<)%Fs-3!"\ C/ *p#'TUBdg"8 G%~BNr*7O)mC -nqR8a\Bjv-QG.܋rHK8Q *%SR >CӠcGt"TbBOE!4ZVh-Z0=3T@3{2zL aE-E :".Tc NhHL@qO5d5|H1n5ݔ!P]dtLzeUjc8 @#(j2Y .`/) }&L^( 2Ⱦ)bE)QFQi/7"8r2F_'M8DlTqBAtX&"jJv؏+}cB @ {mZ\<1D̝{qX1`wEZQ;h44B]Bf R 2}?`䋍eR:Zd!@*@'twhT>Ђ+D( L4R*5RN cLGe \Z8>#"TAZ Dr ^ö 2rLpOSZ.[/>a%@ui)* c:åyz]NlvFYQ& @m؈`‚$ҔW##s ?h1 R^,^b} 5YĂuci6`"ǷYf& n'g,i`*P_R l\* dEz= ȼaQ(d,})%> e|! $<-MF˜T hF;T [CLj ]dgX'#'xEJ&x35 eOZEܞg,׉%zun%@bʄ!og$_t#.š%0xE :OJ|F [H׃ĩT&y"Уy)hB,g-%@(eb{_`,퐸u@8 <(/&~.`n7Ũ`+Fs { &ty{. 6"%uoA]ݖLp$S ˰^FQR&c<)2A*V}|%w Y]~. S  = 2U @PV{UJB *7+RD"B@벩T("RS( XQP+ f**V23y2 J|VZֹJe3JJ!Bv޷\ 9IV3V4hjӪB PB%S2AVK%s@J+ [(D 1А%c@XX*^@t JU KaMkrѷp5v(c$j"E`hfj6HL>U@QHDٌwPʸ t*qTܔb Whx(ͪc0ڬJ8bĊp(R3 l)gLL:nԲ]qT x]D*:3v]t g̺ M3]Ch%J ,5 >*oq] vW,gzhH7 ij"r@;U\Ȁ2(c* ȨCQ+I)Nx+#!舂"F)4# "wAkND V08-z#_ʤv7#A91\VQMML$Ө32g~rí5EeR ƷMBy7VR*MҮip'y~UN3zVR 9ڜ kn! h=NSF@ #:5-eM'[ #n|37+`gq+ T}eH*+oywƅ6v {-ؠ#L:ΈB* ]<~k h*dɁV__2=ιRPyS#9 $dYʘM ,#+l ײx] * JHWMW,JEMi3 ]T3GUuEQ)^[EJP|EHjRu2y2RIƂ =4¨&I6o, --\:PQ( A`) ØLnPlzZ,q`  | /JQ0U,!b]bXAK`PYpEK|RszOlEuX,/RnmYUQBXqC4 u ‹8VJqZRxdJG)07i0Hn8R t Ъ3fdCS+d5%Ki4V&yW9 X-E4H T% MJ*hXe *u4hAXd|D<#4~TF)5$l4Vj)e3֛SzqNi;SPjCTzRjUK6TTjSVUzVj[vUXkcVzZkUkA>VPUp!AWBb%x5>BN%tn6\Ex) r>%A(']ea%i\Y(I*%B)qڃh, MJB/DԃͅZX t\ H,@D,VXRRBZ(U ɬ"%L&,{y n^P V8{ZzS#Pg$wXU`~DǠk؊զHDL T7' R5*ǀW<7~^egp>?Ռ IZT, @ zsR( #k\`J^$pDX<\+NлBj-^, P/0WH/@tKVuPj8Fb|Rs b-K`BPQ0ΊfB@ЯFSP@۪u<| zo,7Yf^(X@FCF.5 ! $Tgܗe#%B*%\º?t-ɃU(Pp[P."t:  *++=J ϚkW#(54P"@ XUx)aꈒ 8P-AH S!8fϘQG` "@"/HPݍUP+L(" 4   cp "0 5+|  P30XX}ȂP$D@px9 ,t*,* ,5  C : Tr $ ;x/P$Cku3Ax(5X THx;(L )5(rc`J((C{~Y55@sӛp3H-$5* iKXS,} IӔqêH_+H(05x>Wy&;C31 I 0+( p$т"(= 01m Ю0H`m l+ Ɏ{+  o!mn RB{+x# ;@"P`<  )0Q m;Ӌ T+u<9j`x4ò;- (-P ̩ <*$;'!071!0gTJ"UV JH8 "j׀ "(>Ɣ)HYEޅ91DX0u" M2WM #V1LXt"( uV]V5<(H-vUC(n* H=I: *ȫ HU"es!T2޴CYtS!+H(,qB 0:vÊ2";CrFR* ?tuG( +4K2q/ *Ȱ"h * $* ,6E* Z\*\ 4 +*J AT B;뺒*„|CtKlF bZ44 e14 Ժ+Xvl#VW]FL"( ),(VW#b4w ,H]1etUŢ- $2PuP\HG(Š$(_`ɠw.q-T髠ߒ +KQ*š4EZ!"  1x2Ȉ= y V]=KkJ4U0kZaB{ @*D#ƦB:cD/  Ü3=xRAnP (͔tv8b0iEdX"4 05&BM4u)! ,X"dJBF6BM6~r#Q @\W^V[D-fҜ\Ld60;AAE/#Z!@TäYD9E]>&@Tlr 0"8ؑ&m$Y) %W[øw2]2EA?T0YgjFҙAR˸Z)[!J5^\S-'"F G{DuQԾsj&SZ3duCN[C֘(T,."$PpPRɐ*Oq,.1f#x#AX+QhCI2H8*~BzgU@)*i2wNr"0*svǔҋ£ E.yW\ŨkbXHk2͢9H"K WTt\@Z!7ؿ. %д!lxAWشUK >Pi8.4W)"S Eo  ^$W<T2"sf XEĹćX{qс ie ,$nTg. 8P6B d&vuk1 B\nw0)ì(kKy)%S;+ܾ(Z*Bl Y_ PB6,ȈQn;gluԶfLlF;IE_E|\EieA,ªf-WoY*}ITw >!upHGVB_^B^ p: (!b_^+HHb칻TnEpBU=/Ej'uHK b,]k ND\@)5h(@ Vϐ .XjrgvyqHQ}^A*+F9s>BSNق"!V1  FGa8p§m plz6vFK3+Ȳ6cYeف*! 14*E"R Hu .Z >,>=Kb2߉@ ͡8Dx{{˼LIU.j !tmCۚ/0vX"EbSs碮}\d}߁h5"tvf,[7ѭIrGTJ1iC[AF6X )"m͊kyV/E// EȃAQ$3"kRVN4A(4HpXpA&^ma, &D®̲5"o-$6@W4T3F]l^ j`-\!L:"!tAH4<JTr025-'4$$LqI#@=b 5 m-,7$.VҰЃ$`\!T\" \K"aޯb "aj^ !amL~$q\Lb lG 1b|3 H.D & Z9eD^( .R,La(T "+\2hҍ (:!M Kpը / 24c$Zldİ!Ko"x2N_EF$N"pd"m 2<V`1$r,t(^##ҧT2O&Jp"IK Bde-QFmh >#t5f"hG#th+L0F w|na$TR)hkrW@Tmr A3($VL.eL /$d-31`1!23%2s)2-213353s93=3A43E4sI4M4Q53U5sY5]5a63e6si6m6q73u7sI xN1c0&98>:BC9/9:)8Q:eSo;d3!+<4@ 3;2J 2<1>+Fhѱ>%Fo@F*vֳ37,XTmSrHm)t7*J,b?6"pxv3l7 pX` Rj3r ,HB |a:Ry0NX0ֳpA`x)#x)R !| n`*9- ( 3r)4dk ܔ34w`8"Zf*"" Nt+6T}Nx#@)&b rP`.Jw5N"z#%îM6Re_@| A|'lYNs3Q$Qb"(kZ3lKtA aO2! =W0"Z .D.XqaLRHl`n3Z.oӪ!@"!'VERY ]barE^`C.PU` D3lo>!ae"N{B5VsK-T& AfB42l`N^!@A *< bT~4FpVp=EOPCcDUQ1AItaAâƉ1&x |%uiCD:I2^ek.` 46*eoi9ioo( *&j3ftSqfV`vmfn("d.m -6n&V j;|AV`J M_+.I\ l"$aR6'`O1 "vPV0Nd@ aZ NFqTZAVh2lw: +*qOuPf^G2.qgVĎTn&p, Fz!, LE'488[M 5+Wn!-z$p_bhMC_<8]"| 6!vfh)#r&o4$:@+y kf#Ugf1cX7AVB"G:VOtx8a@+x"D'!s2 E@Ӻ+p!ZxM>-TAd1`b K!F+k$sN=U3(,ER.B_)HK lF: !CI:T602w'x." e=+" pl5\'(n2d',!* ##> WOhh7å=€ H aTu PяjHB>T\S_N! 9@Tⴂ8"*$:2",T#2%#6â />O`*a$ (Ac7r_t!zaR1SvTJ/KrqGCs]aj 6W֒$`:; 1v6IXIM yN*`BF4bO`"G["y#d.@=Bj`Z\EBF -~ @D.$1":`Ӵ p"Cu! (\40J\"R|Ov#Bk"ֹFf Ӵ @ :4 $: ,k\ r plPB(AH&H:1t#ԃ <W  +Z/@ Ꮐa=LV9)/7RP d+a_Jg,<*)")(Lla( 3w3j`\Bq2E`&^@T  s(%Հ!(;nBZ4$&#  릐@`z*\]t( D cY«yN wdJ y$&9܊@=N2"hV^%zU "h C ]жeh w`Kq#XT=  ^}ZE'gvlK|P*lx, `A,.~]l0q"ɲ(6G WW C 5,چ aӢ&Qĉ`x"mALa&e~.(HD1g)%*p iǀQck4 ;բg?R`rcCh<J(-A|) "$D3YLcNA̞R,?B&F ¢vɻ֞gF7Ђ>sʌh ʊ̻ 릂1*02R&RvW-B os*7ʀ+U|JZh,B  2Ɋ[EI*Њ|ܒ 6ZΡ\W02Za0+gzI4@ʁ*,r0pKƃKZ KzTH"A# ( 3V"O@=} Ril&$ ʊO@_9 RL$( ʀQT2FIh(7K6c&Ŝ.W'35r;,""+((2 * ' Lzb5e֣>sP@L,[ryvUEp*3lZ&t P@(JL}0 :(#| &MES (-PzM5:iF0;1fÕja4^}> 0Q~X F@/(OČ @il L1~{X‚ b]VTK# A!U(YL@tC $>-(!䩄VAf+TTY=-<&j1=Җ)hu-'Udʌur # "v J}UpPADazq IC%X`Q$aU4 =`ԀS88:!A"XG$k@Tb8&@]pN(O1R~A\:s=Sh):B~gS ,C[Hd>{%,, ac$EkkE0 OT#utUúɗ^EjND@2i`UGX J2h6IX51X v+#Z]fXEЁ\;TVˉ`T2ABf%Jt;A3_bTQWXb ~5J!w/f2.O[.! Vg+-30ĉhO{c[I(`ˉlI3%pp`*v#LhEL'$2x:,D)x.-iڹp#8VJ9\HIYXs3T&ÑX YDܸ08dL F9$;*r#:Xc_TZ#3Hi*tL2*2/T*c:X+OJ |>-_6g=Ȱf"6.Aҽ1 BxR^H*n*5ы% 1l,*D#Ao"@;܇b_4 0`Jx*gaTUs@rQ$ƆGZ~10 nH@./miUX*Cna#',  /`n:t:EEdZ`Khl0ph2޺ ,,f$lF@<-,2Y:WE~m C? T5\HF'o^~7Kac>R`ET b$ .A9j9he6\&%@W(S`Ю.Rm/숈Y:C ,|oR@^2ǮH\1V%BwT"+LGx!Fĩ @_V+, \A!TTHA]ћ%@_f)pjb X 8h  0x,C=6К P30ʀS,0U1 H?u+LMAi4hL Тv38!Rn1 (( ,! Ŷ5! +8 ..t0(2h B|ə:?b445DLED\FDlGD|HDIDJDKDLDMDNDODPE QERE,SEE\D@\ E^@F^ Dd_lE*lh hFI#F$\pFGYLmGDXid{<ǰ)G E"ǔV0,n` J$^(.ו^E=HC(XX*a`+H*R(T\ 3| {ǰ*jljHV|Ea 2ԍ( ,𚂨+ae(*ILV2ʵJLZ :>y- HTOϐ84E諂@]LHU J<2 3p:|̴DH2ȃid0 MSG,ٛ}2u(lD9؃elYиь`]_JS%(EHO((PC|GVR#0cڗ˔IM*# ЏLX 71v0h$c>MM <_!8P芬PX Ю8_2,  *D8{zR(>Q9 `$ X}-# DD# ICt%8 #|N0{?x}rpʀ}P˫ @F`(*B8zhԤDh?ВPU os}9e`4)̸ȅIوr,HIb\ܘ Ƙ2csyr(_)J /u!٩h]5HK8$MXw,h!.Y h$c]^`*Lbvr2k PC/)vJA`UCHdTiU%ZH !)F; :jRYL<1ଚOR7BR(BȔ@" @D**L B,AM]*hH,RJyd . jZtUUI\@\b R E, A4KT(A*b.fHT"*+K!I\T 3 (R eJ"0J;2Gz)  !+k"Q0_AGӐ)Q^H u,C?T2( itFTܧb$(ʑ x2;J']ӂŲD4u7(r ĨRj*I+L ]p*̃/,2@  ?6)a[V+( w-Wr*SJȩAs@"xTS(JGroгOR,‰J*"$#E};YAGYJ,T` V E&ӫrJ*T*)j-3zSnyVr0) u>VUȓb7} kg U oFrZ" ΫMЩ"*h Ԯʃq DS.ilӡ"hzs.L2DsAe60 ,* xJr3Vì]ARyY"P.\ !OAC<Є T ,(HٛpIk,>\S)xۆvuR>`+f{O,TEWXRY/祻S\A6+BΔڨ*) ҼƔpDtt+h D4ڴT.؅"K0zFcXdyg6Ef$oI#*';N4ʘ 'qr!5+&Xŀ<A{p^TbYٮ)$Ί`ZZD(2PT yNùQL Z&3[oY=?Ǣ:hHTi BY] EYqBO~C,|Bs)!"ie  3xQ/Ia*3#0*$jTX7IZpC"$X h*PdW'ƔFI P(@a-?ttۀQ.iz) ]*L9YE$7'g BW4=) :Y|ŞhEϜlhS mۀk :YC @;;}Op<|;4e "dB, cKMNȨ>ykzo[ǀKnkIm J>>(; :[ί}!`ƗPݝMGd#ZMXK]o%2RF|bBQ-Bd !Kb$xa6O VaD1P+D5M!!]l fhM.  [O XN3HF ,(bMGg"QDF&dIX%A.E<'ѻ`X4s1ґaKLJ|:oQ,O+FrG>77$"P;ʸw1VJBUԈt.$lWq#aLjft[!VZ:؀[| F xkzHb7pMQVcUSBK\8Ȩi RWjPn#}G` I8rjGiz @UyTe"+dd5H`AW Sj0h}\n*iVDȳ3LOE^䩢hbx%VpT xwr|@8dK2EP,-,Y#u׀+AD`J$׸J{w}j Z(a؃# EZYFD"1e: A^" LՂ:W HiL-V1f("%:|JY+b+(-':˨H~"by0KL] "Jd(vD A\, +H$4BL4- K` # #|+R ;[ ޷pDKF!jV( aVo@J&a~(oo$\] xxh>^ A"2 TCЉF+@Pgp~Y҇@ B"aJi1x CjF :#Y "*xB⎟ 9 0t AIĚG$k ʪEhn@. @*ލPT`A:f#xRޝ)Q(Fv@^O#4pѴ|cFavd:n(K (22hFZPQ 2Q^~o`hI2t6( J5@i +7#"4F@b!6aAVx!- Y&t bE "枩@gaVI% lqlF-҈|!4Efq8DJ"AP1R:; R.BD`HI䄃I (zW ; 6d #w!RLpA4<ADb->K6xO}q VrhV@h & +2ynw|_< KNB,A~ 'T|@A’kVkF`9,0QKDv ?NlNJ`;oW61b)3J<Ky<Aje<Sxg`\ SI I*QCeNj!`2 a(G`* ACr*yx /J@f<jJz7AD\HhtvEʷTs1$4.ET@>s (I«ȄG/L, 7VR[A|: |J""<@ p]K6?@V)#jJ)>(!^`džDa,YM{b XJ,>,VDbt>,є;L "p KԞtb k8jN"v!k2YN) ?`>*%2ˑ A c}i6vǤJV"e8O7&MH)fXRGp 7mW'׻ x*ŷ."}GmX}$jz? )P wːF ʕgwPhN#Z%^|b#"_;1x&VJH@%IFIV` ,aqD$4 {y 4 @@c\+x9xD@(.*緜7BPd#t61#{J`{^: |9A ix0C.|ʏUbqP!#Bx4ωv54Ah}ľ Bwvo$C@d}g9woi}o5Qj1[kEDƶֲrw]2 'Z@)B)%116t*(+g/"DNh,@eg 2pJ`  H ,?dp@nT!N*#j|/ A^gv@n@cq@* e/w70<[Tmvt"() J/6)!, qaľh1xFlb`,A†r$vVA]LGV懋"*`,  ! r"pAV^n\vZ6 ː!+@|#&]T%<`@" Vz_B~Æ,va5A1v4" g;VS@3j#``>UFa~ar,{wLU lE W ]@"4;~n Z$ "ڭ5~ ^l#VGLg 2 Ifii!~IfO b("F)Q׳ثrŖEϟ]A!W%NdV!!R R~RT"͛Q>#R1& \V*2jkbFy40bL~9< ktf :!022'f=Ͳ;"4pP+5BL{/`p7߉Pw oVX. D=ᜈ( <#!Dl!$v L$7pAV:(9B!9)"2|lFin? PK,!*1";" t6 ƴ0OxtT9FWhhX@,PZPd{7)p$FXXPD`RADwsk P\!](9I12T!rΟ~dU]fPdbO =#t DAUt"@(D E#TB!$dZB8Tԥr@x@D ȅ)U>)i(i F2n*H^*`T&QH%| )Yr (AU[^KJXAԨ#SRNB(UeJUJTRZF#9H* ,Rj5DY aeR.$ۑ7ZYԻT&BҩteK6la(NRi5CH ^QRv =2;  Ʈ *&* )e)|R1(W)H#V˗EPJġȝ"RA Ѫ Z0(HԆ":Ũ8*DAx*"! 6YuU4¡ 2#)})KG>(pC()M$ *ʈ8J+8@ k?)rш 2424kQ2L̃c;3I@QL͊# 4T 8@ +2E)"˔`H0W/  m *U,/ʮ0{H,VHtbΰ+qCYr1t͊hȸ U$- 1_B Ģ-)` " T(4J+,h%(c٘|B!b_1|R6_6KeWqR2: R-(' j`*4J) bTYe2x*+5e3i+/T#Ӝn-,%Pr٣xs"g)2>;t4 */%ѩ`I_jX ]<ˍ%L%G+_:̊ GBΥZ$i<ۯ:WÀGqҐppw#3K$U J Myo?J'*%&l($t)$gzCG !̴*PÐpzh;] e团H=-2G ޢLT2PeO!t#Ě|©x•!:ńJ 9Jp88IU)f̑DB)%`[XKdvhX˜JHDM vCp%#(.Uq%6q QRN V+$Ծ )`, XV$D(Ƣ>G1 aJ^)W>2yo*BȔl%P^w+4:K6lo)|.{,U\OÌTT8tYTp|,*D@E6XԄ[d~z!HC `!=Xy t DȖ* D^BfaPJ:6L'9ġ䂶p4?U*bܫ`qwFp*SazF Xi+'րK /xuAs|f$ wWP4$]ϙ oPB3T[`D hX]D)e 62xG% uc'oC#2( e#pB ߠ%UF::HfkUs– #:y*¯pBkz|f4Ց> ^IhؑHkTL9b36ji7"`Wbq*|gHй;@,Ճɛ.2%QT/))T# *γGp"dh/T/2\À ˹k|7Rdu*Ig9`aT=䏄[Fo&, H/|iG@Yy'$Y " l RjM7[_w%& _/5~Gkpb*xI~2E^Ǜ5^9DXnƹJ/a8MEz G@SE8Ԣd൤NSg`%`)?M #AP7W&Q*guL;Z`Ux) jnt0$0#B/S fr8U 2g tj̓7[CqP"fF)k ;DYÅͰ "@BYP'"4WՕAXK&Ga@!k[7=w+bB0Şx*&34FLr)a+(R $ /) uY]ȅ$cPwڏyL8P}<(ãs CK=;(K) lX6Y5_'RP2pu ңjraQc *顀\,ԠQX+ ȼA2E(U?d#Ű]ؐp_.2Qp8(5,>EJH7y=2ԑZg:KJDʡPтM8)cp} ;} vƚQYH5@PL4BԹ" Q<-Dӯ-[Mő+q:]́>i,}Yؙ݇xw**>F XcT @ ΰ85`a`` AKh J x}"4 h4$0pwx]l9]MB@}5Uthw z,yjˎG-03K%Ȓ20* Lٝip}́LȅȰL%vz&{!X4M (0Dw("BQ(=,ܗ$wsBIP}%(0L Qb:YQ)[T˙ ,U=(B04J(Q00IRU" H}.7|<|f%ʸ&e06˟Vq!X7W&L / W8*'=*8J(`|ʅU=مRnҎS&c`pO!L(U*vG-5 CXUS5Xpw4F3\|/ªP;ȍ]kKL8 ̒2й73WvBYDC|}͡Ġې_T,4Rx*"]O KnRe>?TeE7e^W6 `FWYsBK d^dW K \cdFe䡏mKI.DfH anf()fpYVg>MGfDQKg6z1|Abػ4gb!fN|L6źfS q0( d.p)  [g0B3 1riЃ y!(H(7Q^8JՉ*^xZ\؀Lx4|0GP:hs8H픔h^jh -&gȤ5h@ (Mjng):-t7ͱ&v(C+fr*fPm&6 "!YX0V~+i &yP|s}|Y8_e"(Xrp*k2ny\RQ%HNڄ&h Ș8 ekW0˜4KT>,pozۅ0)p)g}l;#nv@h_NuK/k^-sX~u1W׀((g&Ԍň87?^_ Z(-"!&xdZhDXb(0 "@0SE |Џ w](6h3`Y?^DžS!r X h3Hp0x?Z@uXh*Cŋ``V1Qȿ8*hg0"J$JxwR 7Ơ080BB!U24p8%#n-^TJSX- |ƵpPkU1m( 7C|*t(쇇5+HvJw +}Np FɸJכao8}p!5&5X*k QXwwPx:KThJ̗$^cLTbJRF3;h@JX\<W:ҥTVBХ3tԄ hjUl\#gLRT*m%REd0 g=)J!!;R^. B$R kSԪRKDb zm7J @7YDxO@h)YLU_&J$BTJi`RT(i) &`2舩M!TQǂ˷ҹJJ66 PN.(JK@*Z+˚ELcP"UBeִjq- YS ?kQe,@hW"J@ l ɸ>Ua]GS 8.٩bw'Ol%z*)*Up" 8" "(*:%qRT#0+3/# *2H+","ʜ"jEhqLC* +Pp"<0 b0Ъ+DekP@HS S(*Kɹ47%ވ_`0-H*؋$P #J:)b(2(ȸ H!*/p_r gվ&it++pʦTtAVUVJ*5`"T0cPj Ax(1Ȇ#82ԝ< F*DՑq,S  U8Z cɓd@oѸڗ@%;:PXKpB^Đବm$dq-z_VpDE 'aJ\T$tHXF=BTTg; Ad"mDȰƻMQ,WІ{'//vZH5-k Nwi㺒̓ NDfW$$!@ W61P0q ES`qK0P*T|fun2]*;yCu1!T2|l&RvniW]^ҽ'q7C+R(h1 t$ sQe]8I~hL Hkj&<9V뱙0r3 pYt\;ݴx76}[ c~kв*5q/M0}]\s+T2De$,2n^i"*RC%r$U--"΢nЦ/te5"t`:fYWM1%,K#ū@Vy d5 +DJu٤ Hoլ\lRDH ; {frjpiZ`BN,]nGR:W}ȕ"Sb(\9m @`XaS-U;P [Q!{Fn]Q:W%#Y0@e'^?.BN-Iʡi5d&Hn>8GGeo=~AF*RK E xI-w`~L8~4B'B# ц7 Z!6:b q*G#L.rdž nM.&~ԣR,*u$J& W&uIE2V)`: *!gD" 0 %L_`  &, bdĀW O #z# k*/@Q!Jt!Lj2J FCdX2arLl[JB̶s#\H!o"a\%eJx\ t, B^A*!|J 0`*2d-u*J ~> "uBH$1b!"o]HL2dH IZhU+N$T6/qa}G6 5*`k"2H@ #Lq΋B"TLT$ 0nx`Mm'LjI**o L+ 1Ŭd>~,+Z["h 'o/.l1eMADH2kl2N$ʸ1V+bĚoZ HH&~4L,!2ʔ (P~=7$hJSrh:EHL+&T]AatΐOm-,F "8U`e ԗCr &Fv 60Hg1`* @ HwgD%pd@ksa~1X-h2 ܬ*c%9beS !j_B(( )xfJ@ ^@!*r&N"I ~N ! OEs*LjmzD LB.Hr.=TGA,Ԃ9 d 1I^@l2-BJ" ("R,2ep`M:b+h_:~6 I&[ /)C= Bq$CDC 1C5F=doDOE*,#q Lɱr$ELʲRw1JS$-K&M3'Mr6mЁ7N2 ;γE8QRۍ5c[En0ޯ.ե+OW:tW]w@.̝}I xIVKrkpb)9=>f LjKgcq1G,tflg^wތF8M]jXKU\ـ_'fPzk3>ίgFDz 6,&zl0q^1j P|n_\Z9;h4QA)sf!f,hq[mn!; HW)zJ)Fj"+i".8 )HE މ~q1# _N8B1o`?s! ,b Ľ "X<D@cԝF,2:HH!`8>"[,p0J8Pb8RbSf*Fz_EϘt_餗԰L).c|˳ #H0Ǚ&7S͢1M& dya&eLia'l^rIX雳|?)H^yE 6` 0TɪAhbE_G$/Ԓqr JK + T/5`N=SWJ $./b6~_o:pX*Sy(Q3|NyXŃ.X*.͚pR (hb C0WPˊ߮f._BbbA  >Ee5)(N-eųh,x~kMNn= 2& Wć֠2+. ,' ZtQWllonD+ZyƐ+yCl/䐶mi=Χ*/ ilpeU0+cmۨV#=ɑWreCʱ]ە6uٕ$Qj/aJ?S=N#a4 k>XkNE[)ݥxW'伣ǚx1X{^SLMxvߝfW.G o/'Q`2"ȍß)wa5f'o޶OBVb77,Kи#n{f-{ pW+_;r{o0j#0"Lv=0\4\Y8?fx,4Y)787e  HtղzfRd]} K~ſb[ߐX7jvWYoaa^;` n 0} A<{ `E.n>XGW)EL7=zQM׳zk|^>lMowu(\y@~}m~7iCU1[~nD`=\}ʜºo,IR!/0J ^poNJo/r/1g*P6ΛBPoPV]piN(Ob)@#h1pϹ w. P}  Ac N pf\ l?alB́Yv8* Rݹ?y wܳ;+T(;L#QSk,& PL4d#C+-|[ r OFH2J’dƱpR 2d'I)Jr+J Dz2O#Kr0IRL˒2L 7M8l$3Fs:B9Oo@N>Ps AP. ETlFOE%HR JG5-PӔ5NS}7OTtEWTe#S5cLT]_Ve\U5s^Xu݋_V5ZYVEcVmMMelڶݝlXo[Vr\Vki7eow-k۷Mu%}^v7y `W ^=Շ^}aw6XN-&9b7/ߕ~=y&+eYNWbyN_e!fm; 7i-f%dzLiَw@íւz~.ϱhfm^5n{~eOV#ۈNL< \kQ4/Mj<'7r+<È?]K \@ ;C &!F="Suw +[x("5{roGӚ?wj%~eP@RKlgF_Zor(g1hA.$0pA}X= a mBBR_`1,g *op8"T\?mtPϘE~DRFWF`(hS9Oցtp(Q ytB#2z5@Á\4cD ]&Fb*NyrzP! trTI(hE&IahT^.}dIV` 1eې̰7F~ۉJW6h͑&@s\w ;aeij^ . 9S;d@fFZ(a_D}]02Cc 7&k@Y ;=_QTX.0p&Z"_i>6ʊP`$R١ NzP"u;/F 䄪fjUgk;-1z@J*Qi6V{]ʭy-ԙ_mF|@Œy!C-&$}d٢XI`[@lej$6, if&J1@0g Ap3!%j+ZSF08:\]ԠQg&D:伋:_> ?t X蔠h|DO.$%m욉($Kk@;3G @E|CT4#:/s9#`?8HP1K%96(CW# r%$\QB-(UȜtRu_$(`X*"`ϨH\>7n[ 7W=Wb.a͊UP sR#|4~a5͸/6]24`Ox.BC#xfGcHNAEYl7DJ"eX^{+95g;}$Da WCHF!Z.HG(%T/l:jz֥ltfI>Ђ~{vڱn9fV;qkO܇ q濩RVN r1%p.q]'Rl[n"<|Oc/r;7^!F`l|}Gݮqׯ7z7i[eU߻x^w3Z:n!l?W~ك'@0 "~ @0YZf04%h5^  1GBLY>ʿ{Y AG0X&RCvGK܉CK %kfucJTLM(M#q,xR\)5zWd}gr3*2TZD29GTvQmPpDGA#' ؔI"LU]\Hq|&IrMO䑅Ji>H,'IO%I敊D# !Z( iV.JeF f3hɄ?!e ̥ƭflH9P@YMz"k8|3NPPPg(d(Q*/ECNTRZMIE)TRF]} T%S:9 14֙SyN >N*-HSziQMLU.UJUURjUi]rVJX+EW5VzZjoUV:SyWzT][ aMn clezvNV%elurBW1c콙vEb-=֚KSi$媰VjZ;km[kWn-v p\q}˷>Kr.ѺHKsvā^W$E%mռ7:ދ{#)\y]$$ӵypƹUE?+uR\5oe9 ,taYlD I^4rXljLA\Y> @BHo3 cq Qx2)"Jc X3S /"ss͙Zᧆu˙A֩`U"3i+E6,#pՄ^!?*X 'lᩁ3>`%'\BrZ"gEukwQɪzQwB!%[M3.`!+76*sbjը,!UVocMVQ2kf˯SOe}Փ#vbV=(Y9 **޺2^C ˹cƫR4ŊxtEʄ[:=[g 9ڶE Ä*$9"t+S6\m@**}j|3"f*KC஦M,@ 4y޶x-BM PiדK}SǾ" rP~%h4N$~`TnbghmIk"1<QGQP ESOM[M7-(Pxh.s5CNK!d4J5k$$="GqG~HiX5xy5+GJ`|v"{H3KQy(Z55ZL5WZtbC0wEMPh~W\\{UUUXT*) V"˂BЀ aş8;3Ic2zUCqg~C,D!s Aй"kä(t Cb)mZQ|Nͥ4Z^-RDk!aI)REPfԪ[E3^R(Pm1KMzpPkc}׏"ۡL!g ʎ@(<@$<㤦?p"|D$D#!o J?@{ # )z"|ƨ!Iq) O*dJ2dŏ`ȻNH\%%rGnI̭8P Щ3?. T\ȯH.0Ⱥ.2H'OOKԨ[:U,UW> ǧ} MDK;e;S= `ЍL?FjWzAsP5>]582*w:yT]ځ4t7{D2*Wg)8fY# \wcn](b}M96V0~vȀ+{\Uz 9{S9ٺ.Uߤj(淮kl;Dzl6Ӛi{^߶Hnovc.k?M3qm\)r_5s<7?9Ar?UtOE}wggcmu7Gwx=oxiy_w>'/x^O~/ρ|z޷|?{?~߫O<c&?HCE@ dnл&Y`SS&@ȑR^ AK t@*/o 2M jp%CA"$@QD "Yо"×bF/,ȗT~.$Df`oz!E Sl yk5Ɨfg"Z04hכtmMg#INM_IX H*j6TxRd35)IU)K;CgR R%2)h csU*f+Euԑfip{Ю$Vʡ^kI$LA0'hĐRǬg_@B(` 8֠P *%ۋZgLI"[KT5-%J\`Ӏ L˃.9J檤tnT%Rb{qcz- E%@L}F1EE2_}b"8z\beS4;+auC0tt.ykɎWk {ѵ*kKN5KmlLuu:$*Dא[0G"l1Xĝe]TdԺѭvJ5'sl;ROSY3ى8g ch2'G):Wi/ȎF3fTxD8@Q_ex)s-'TJ|)^96d}9sTW'930wB@($ pXB!  PR""Råq)Z E#xF'2Y RA`SNVtI/ġ Vr Y?# їaq]r!)7f}C a gϯw{^b"[3a$&=7zizW"64舿h"oB!g9u|.P|"6HS ?'D Ʉ[ ]w0#P:C nf,f.$#p1 H'(1 UZDgLYc锋r!R'(jV_b9Ÿ_s>qx]klE(c<.Dgd\D✌CqGY" z׍KI}&! 2&%$FnXIWy)ޅ=>Q!<L:qe,ɋBi.<%O3H͈K$ _׽1kKpXrb%BRPYPR2 hQD .B,6bKL?ASDZBп*q•e r*@Uu wf;s Bzt ʯi /^% _}o!+|`\ F X(~`3z_ـ7 {ׇ_L)pw Ev1ØcLCF#[~?x! 6)'"ܑ^PYOc샍r;9[-d|_Y*a컓3&UǙ+˘o5ei36\Y[NxD*/uxH*#P/~D34#&rۈ's^gU+-h'}Ԫᵯ'ZAv/=d:gй{usnMeԧ!W[^|+$B:.O¬Ok]҉v: zLӊځzXv HO<ױ/]wUEO}oz O'{s.L}űjPzP-P{7v2Cn@ :c3̘ʾ:Bޜ!L| XN1o\gåXPI;n*c2"lP$N-ԕ8#h:؅di0Š;f %C>`S$=\*1:**0|je QN"1h*|/X`V+Jf_61OzqQmUx*'NvNdF~!)֯ 0q<sK*2!s!D^!Ѹhd.q"*j !Qq#$ClBFK *b4yghXqQ=%HF$(attUƙD&¦"#r'P*+ +r,) C1s+eZ%RAQL2~"/E1j*""Gw0&ĩR ь 2d:S.pw2*=5M-B#RMyW.a+L$5 `J3g0f1J73vG{4KL"4 31T /1sP$Z#:;-Lc;D.09.qVĠ.3/\& 9ʍ3 >'>s|)/T=d%7pA5C\1;= %s6!F:5ё"@)!$CC0YT?=ADo>TS\^&.*&.'@n-$\)%9i L-p`GbG90F.0E=:PK<SJ4&_JGJS PR*CDAL33MJt)Ls]D|Tyoq7;P5 A5H|l `\.q)K;RfR$`U;Cl#!<;W*BnjUW= l8yѽ1m] ҭ5we#͒U=8ܝ3*_=#a]Ur")}on,s-͙_^κ!Tݑr}}ݝ(AGAP 'D<3M =e] q(\OI06#=OSY2] @=%R2!B4Syӵ7B-2Jd\qG ^Q3p`0Iₖ`Z4$0,#]` ^yQr%X9r)wfv\Dkށ1E^& 0P)|N\>B~#`@]7uD0Q:i^f)^uKtiI~Ư&"TA?^I8-m^AS7n%V+c_/ÐMs٭`_sΌ mXYa1LF c'rZ2`lQ !bE+Fq߾N]џQU|Q  A :/F^.Ї+RAaИ6S%1hf@l4G$I!(*(}2 ii?? gB]6#z0O$B8, @؄(_ A b4F;Xb)`EXv xe1(+Y &PD!6'#Bw (J4‘EI??+İ܃\%e'\oe6%awe7H%amR)Ɗ CeHnXfLvEҹ fgL4@ @D:K]'/bTtIO[H;\5o]?MbX:~' Kžc/T@@ -⪶5'z  [AD EPY 3K?1  hD;?;J!3Is'KR*32 43LԂM$I2nϼj>4-CE&8s8N% ] Q}#+˲ ϷԺ~(K!>PDέ*آPMձAXǎRS,ZF6udDzq`R-M>ma5,\@4(k<ì4espVN]4WVZtnmqFt)Yuu_kd"WO=tѵva`TD[;@c=Ie&D䊞L.fe K>k 2{ʉyS,LhcǡiZT.^.v?=,26HDk7!.㳦JuARIO*f.b)Yȭؔ)N#U%,ף-K-h4~T O U]g6j *sBJ?Z,Vd4zN 8h-^lHiu4M[X2AMi LګB}:6\eͶ[M_׉y.>ވ{˽׹՜hu EW l:=_c=WLӟ!P/'"a[j8oaB2saά5oT]Ҿے1V2.XԂtNaI$V{u dA<'2?ɱeH2˔(+"7 o.KyG$K 9&$^]¹)yAd sйC>~>3Q$'tѹX*` ֹF|'T=v~ ;cyU7Iܗ?U,`\܏ʱG0jOKJs,>0,%HY`/()@EM PO'K|^R1'F rw0f0 OPq Nˊ(PĎQ^ p p:I"p.0ꋥ>p0K*h8 z2px't4z=FT! ք05#n:O1@>G@Є!P3tl ȭ1 nO#(Y 2 &+-D4Q $3dіK~>*cjd4n@\YgG' DN'XQ *J=@J4!J O2/´;/0•Ϫ#n!Z#Dh:d"|RBDF%e~Rb}(Ϩ²*)wq+VOoSp*i$Hp/+|Gk+T0q2f'R]/*yUʒDZc)-rnU1#(|Tp ,ncD& 4EAg0c?4CS[# &rSg52Aq)&W6RΙ$28)O}90 biQ(YdȪ7ĉb!;g(@*سk9G@9 g=CA;R&;0S lӁ;?re 0MC&흛MWi[bXg4Y_{\ga{_*w IPw{:"ۢŹf "py?.X!Ć;%×;чAOVQy80[+S]C24wB:a*O,sțV\|/ C Ɯ>{: K; ~'30Q0!]=Y>m`_' }J=\bz ^aLd'I#Ĵޣ\UNUkL-ޱ|`%0f%8)._ 03^gAo ~ա(^7FV?8?=>7e>E >HDdM9{Q{I T*{D#+ _F_ ߴa=]WaH>w='i]y 4  AP;  :@o& )G҆) zDE"@D#2|PYd_&f9>9'SM;`fM.( XguX֤ma I[=~%XTQg:n_0eV7rpn&5sOOz}dGvw |r;Ww] i~Ih3ԧsxw JpHx'%=>B/0 ϳmf*.К"0v%1$KEBs軀KlFiG-_(G$H $ T >qr)+*΢ q rH΋(b,i73dʤgMt>;єsL͔[JԼ=ECk8H̪bi>/%CH}Yq4 f& U(#\O B?UMI4'B;kZ$ Y)lQ0J 3&`(l\h9[ճuQ5X?aP| B0/$B@ \BX<BE?bQ$JBF' ; (\I@6<(G$k[#G>IH]. Hש8B#SUM0ɘ_K JKu]sKi7x-U{_oLXF5#꿾LNkԻ8j1P59|SA2| ö=$?hIb{w Óko[m/2gi*Fޓ?L;*r =މ4l>K(20gnq3(4.Bg T8L@bMY ʩMRG.)EhU!'R#2B $ovU-+h#' ,'nr%0Khƿ̠*A󠺺vM,*  kd[5/hB'.SٿitΗ?(ӓ[ w5u]i7PSWdV01c#+"} _w'5mƊPHGltc.{~_t"<իؽF,,OUA}gJ3V8?#N&q7le%??B5 -P:-|đGH{G+Dt0[o!(ܻ2PJ,$Db#I$ RZi%fؽ0B$#3-9 e3=(8Bd5З@B%*\N hQg!*t,?!j2%8gD~ȣ\6]@ ?D?сB) ``B\%;. rW{KvM2Pv#Ix$LD$9S@iKy TPICtToSI`Nn*@$ Kv'Ut>*tȐjگWЄ׺[kЯl @~mU%&d!Ue9NP&C[R<uYpN%d& #h$"6]Zm9 ,(;tB垶rzG})I\ ]]eۛg+*#{iM׊}u#@ 'qHzlܻU0)ͼ\to +^mQ`o#f9enV7\_Si>X_߬s.(5SޫMxWN8 bLsj@S }c6I9H܌fB~9쑉$ Ke^-6+a`lJFM#Qj 8Xg9LU23cAu<S- 4+DXgDl~NƬa*[!/UG-llZ[*! GI_4"|ir7]/m >6ܠTWUb"Ͻ&7$fKn7b7 pBAfxF ?8"aY˔Zc+Ts;<;Y?s{>UI\RQQ 1>e=0jN"^&+ŷeۻz^'xtOSa]O|s[$< 9O<]`xJ{qhз@A{(u J#F: acQv*[qk8yUJ_̮) _vU$` _h=r{y~K  (RO9_< ٤-!%+% ' ' P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%gZmVeo\nW;w^oW`pX<& bqXf7drY'ry\g7tz]>Wv{]wx|^?'z}^g|~_?~_ P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9gy?Ph:GRiU6OTj:VWVkv_Xl;gZmUo\n;w^oMpP9Mq/1c,nReJNo9'gK,iT{Yk1Eyo;ņqZrbUR*A D ^e1I6BT$g7 wN Z׫vBj_ T`! UZduI\AvX$vqa,#h? *t阇#Ey!֒MT" Q`F'ubF7 0Fg%L!\ZI4^eTfpș'r=& $!v~G\/հ/E Sf`D)%P@D! VfbP_xgL%ecŹtUzhZ!ظC29+aL QL3iڕ9.5幕+SUDFuFv477 +7FB^UHi;򤯌q73/ ̉'Xo,=tXD%n4 }L0u.ΚOA0UGjnaІa%TV!p m܇+m[kXW-S0,\}HUEA&|w[ybm aw+L]7ޤAC c m$#Hs&4+V/`d`KaF S4ϠkPO@1C;є`9qfa!ZJcU6gtiq}&Y&9%)YTibTř)4@@*a^&Ey^ՐXB_h 31\ϰ]Q$*Ǝ;xxwzx{dH!FB ,Qv;8ЕFH/.15Ety6 &F&Ib0툼r>[%Y쩶M0FK2C*-E$T ԓFOҪA=~Րo "v ,nGh$fF>U@#ݷ)OG<)݈}}p:O"$`ChD 0PPD 0`K$B񹄋-ܻu!nVϞ9-"-!v1N fO3 r:|饓Dr,X)ZMҙ7pPd;@B @6@@2@)m3 C6ٱ%h@ce;7UXim7D AbB@(iq 6\(w`2BHMzˁ$a,"hBs 7hOU6#P D6:HO'`c`7Ht:Z12h$C|nS;2% 2-`$&:$iy02$ȋ6y̥ U #U9*T&1$frnKX&NH؄;׎b#(rT1HPe 0ƖDB}W>E4>DAUtB @̡Ydyc[Ns)H }0?ZE!4;Х.r$ #3{o[z~OsyTD'$̪gH5)}ߤE~)CF8!PRW J//0,@3 / @,/$-G30$ 3$ɑ|&@eb"HgE{H猢= * ᜈ 䞂ATNd@-ʚ$nJz$)Zj7:Y2GSq*5IaĽ IKD! 4/TF&h&)^)[TKVA;otA)C0IZ9g\. Qm/B힓U-{wI>:G2Iz@+O4-i"  Bx ;*t$*@]U@W[C$xܷ͘hk8xgwr;zJZ&geZ4I4Pȳ)O yxg ;ZשJ*@ %&ЇaNnAݵDk\|d Z@ ~=0]Q 7H.0H3)Voh^_t:p<IU$#[R4S,~ǤN=繪aFGrH,.<$ ϩ#r0'Op$ GƎV.0=<*:'>|;AFG58MfkQ":ɍZn$ȩLa Hf (.y4l iz>MiKDXW%0.KqFJZdn@(pX$b$(-X37e j;m)[QgU A <Y(T )ط/lx@GHzt%hd);@$Wl;㞹ZaP.r`q  6h#ː٤ vB͙ ;>0̡`_%ҕəA$CR;6?a =f峽jؙ Aqg)E `LGR{vZi!`U 2yi$y47K YZ1D T7g۵x 9#ZfD(cU+F N|]#Ϛ' Xbf@ڄ18_DU1#м/cNnJ0@vcB>h?C\oOٽB2Kt-̷'Z41iIͲ]3MDk>FQME6s@!iVL~ .QS nh?fR )ҬxONV /9{47ًM3 o6W,K[Zro_$$pM8X6xOC(JckMN3]m}XFIW9Ԝ mGϦ)WПXJ*S< EdmByڧ xAWP!@jL$ Ҷ"źq rA162w8I`Q>ȣe'`ՌM$; h3ͭW{^J*dJ3ȥ46XSq%9f ū}>gc[ 5d 4`Yz]<;Jɟ!#C=%hUJO9z_o59C |>-wq]L'ym +uMlh r y4|Fc\g`TbhԒ3g]||HAjP;G5B")o@6CH# vL5L-ђjnm&p>Y:vrdo'z0b8Md|̢D$ 5 O,/#*(+:҈ R .R^%^J@Dj _#~!~V܅<$$<0$K00tFLZ5OblVzQH &u(fq NĺA1['J22@34&D! E#>}L Pd ̂$_}Ѵ%J^T(`@OE6^5ܧ ǀ(d입\ G°Ua?.o0F&uӚ QsTSLhmڏW31!6X+M , q ` 5|D@}81F+R-j'68XRhn@j@ 5s>b#S 9L$*(PL^CS쨔d`h=<"-BļL΄bnK (a~(#VL>c2VEH2jjn0 ζ59✈LPsV.sv}:J@FCd"*cK)"F!t(dv#H^|5h#f@d"TLR~PrdBUPBl`P@mG]4" 0 S}O.D>Gr\Rq`l/f;҄`r`S%X@Q~9UAKu-NHDCZ#%.IS8@".JhbXg /OYwZ0m"5<`59 i.#<blN31~5-d.+2f%CjfT $4Ke5O.hP.a* `h>4}M_9t8\S(f0G@8%!4V唘ԿX, [2iB<(t5` /@P ޴:Rm oh,4hG"!sEY3wŴT"q`~(hԀX)*LxH-qy7zWږvh ;# j9oq dD۱ niJ7 #ƈ>QJ:T A!&:2?2a> B0 7z}\j?4 Ji.#2LLsufiGb$"hnLw4/^`UCP#(S%M_DKGZx;#BV#44xƽlvX@v^(b8(f5[5.?= SaKNTwR.)Bo:#^T4+^;nT G(eLY`k]C @4G:#YMd T]S^q8@b4^@>L@`Kz/O >=CL +0ئ".Hڠ@C@{!DA=p{˨1Kz j.2"GDaj77Hᒦp3DMS9wZz*~#z?>%A1k ROm6#n t3M%eL Ur"t$DJp^s5" h,kD"Ka# XNzYTD8[(p;b; $A]̩~k9>Cx8+tW#oP7=SnzvzrEJ)N(]'+b78ӊdbp?bB5nQtHyōsyYhfX2:''&i6* 0YH.!S#VI[*#P]^E@Qt/`\ _¼d')ӳ%N(:u@7xXJIKTݐ+zBE&>,kC6,iQ![gvHq(ug.s< 3)`IBL8AC(m@AGKnKwrEP OZN  Sfp\!x/aZ4;8rF`f#,KK?l,c~$JjnEP7(MGg{`< !Bl @'U*h-d #ЍyNE'gIx1ȺX.،a P0s4: ;&aR[?sKjA!Q23Z,P NJz") ؝91Z̶bR8;Y6"s{^'p_/+h'PY "#$9AJZ8K$1 Azh($A ʽ;AE$Z{xt+9:&-h/++ќ : $z>  'p/x3Qpȼœڊ5( K*xHE gX"?k `"n=X_pJ @`+gE.lC$;R*l0$`&Bp =[Ћ Q  P'x5 ` ,;$@Ȑ%tM>l :sA$s  |G8 -J[䍊.#J-: #"|ę;ld %4SY(ǐ ۏ/L p H,@%SF$ kc>_z>w?RPD1x~#A<]/LfPxM[|!DP 2r|L"DjV+]) $OH$RJX>W9gZ<fȤOmGee֨e-?`Əj =* %/(o;jOzC:[A:% ?<ñ f/?(q0 *@Dk򀱊.{ 68@ sD80n)@Dks79te{Q? xaQL SI$J.Gؾ0=A$TA%;εi3([S Q$azk"$in۩Uҥٞ ҆ j0hm j/X- */# `;D~ >5N;ÊEO+X=SN™nZWdڨH$V6DeWEy>z9n"̓CdSpfLURx"ݎ7fOĦsz]A;a bZpd8&XP6WO-aBj! Rc1LJ˄U'Ϊ-"-]rFVN\v7:jO~ZmU~B >iYfRSc' 7 p !6nQYB?7`<`_ )!>jBȥ 3I/`؎YؑPpiI cIr D,dQι(RQL@|%3 UZ'9 ".1 ĨI4I)B/˒b 7Nr RQ=q5\~\du ,'"Dg+iӁ-.#vN̓Hҹ1 DM 2ESZ6SA7\PMZ\yo%5w"WHx(a0ث0I7"<~JЗ0J`QוfU<EĉBS#LMIqAREnI0()9eKiV ٓ<"teL^U[ ݰPH⨍b 8_GdaMجηU$_Rz S)je4W[$;!~Kb*j4* -H"ET~D30) [fI7Gʀ+#oaE \`6L)oev`sg^58Q%$Ix/BϛMp P(M Qzo\*/Pdu3SlO ;T*ݧZ=0$"zlv'eQ#U=TFZcS@d#UD9< 0LŪ3qV ]p ߫W| DRƞaOxJF0@TNfNW@10p`u9gaWNN 9pG*"~p1݆)NY<=(_B;= )T ULp%$ÑyHK5! H x3=`\W7y9#8c*ື5l;@p$lIPI#-f % q tvLhjB ؎nfj D H(mHF ! %DP1lmB(V< @PEe2AKJWD&ÚKE\5OqM #b %sȊ@$* YDccq<7BZ UB"(4d~OdYu"Z:*։Gg&L-R<^bHL \ >s@H(kj.?8 ,4  @l:wkjw+f@C$RrBl$\ -#B2)@v)oVCREJ:@H#Fn2rOʷ"Z H}k;h "CPs2@@L$ 좊6OC9 !,&` b#A2,,o0 8PNN836LW l /2CCm9& @N3D b|%%ʷ1L0$o >XDOA2Y 1p f=T$ ,"f)b ^P!$V+ӴW0fgkW$F9,Bb<a~^Rc4CHUFOTz"a~_Pf 1l#|IJ'!VT:<)؉o)"v0.H;e'4j`n(6;bHqna4n%s/'uD Dpd0ŒߥB<beрP`%DqU*L ruV":%,u. 0(SmP\uZegaO$#VFx`"5; 5b(t,h3\碶d$5S }rx-4GNl*bP[cQ(e""3JUtG(5>FF+`6]4 % fl:`H,e'mIc!#`!M'Fa^.GȤNƓCg/h`"^wD&E$ "@\No(28F91edUxr]r@nG,B`n$;Vu 8;o4 4A`R$ĒS>s +2S@nhlBhsl"(ctUISutT@3 SϜ <L~M 6 h0Dqj/Tu}&%:Yr9E] "{|X*, ^dN }$< +f"Gu ^FS&-)ėcUņDQIUmh*b`i(\ M)LJ,NLz> Dc]F*!rӇv>@-)oxK.IUx!!QX`L QpgJ&&m)ZSq/q0jBƓ8 ^fFbgF6 ~V)¨li7ְ% F0T-vN^T;X&Tba" BmA,*fPW3cw%j`,v3n- r8:zbF<+cwʾ+AT$[pt1. (Z pչ'Vt\kȎ·Y$XmQd"40[:|R1oȏ UFYXIEz5@&!)## B%##I#A}1.^Y" RNY̯W/QC> z`d:Oz7UWɅW5+z|sAZ!-“ 0IGv¡|lXӹ Ĭ$V(dE&{()G1" 2cIGY"ZoT%kd),Kƚ[qbZ;icQ#y`5G d8X%&XzifҢͺ1#0zBX% vF,SdBȖ~H2#ňE"8Z⊎孹 ;[.F NDd6u 5ZՄ< !Y RONGfd S4̀{rP/ E.sR8+P`x_HѶdޡ 8r][PS1pǠOOHp A_ևUӳH`l*R0 E9D67KXKc<0B@N@f;AΉ54gKJ4B PS B 9տƧ.'| BT2`M΢RU:<;@5 3r'c#Σ&OGpD@X4 C1~oY{v*fEL9o*dRyPD'F>\T/̆CdPP02|n-PJ#;,:Msi= B5%JANۭ>TvtU[-= ^sjDDSH%&c}nv7e2o'r p [Fw[߈`\<Bz| xZ$07R0ev"~ZY{c3 [0/ L@B7k^?zJI:JC+$E "lZd;Ol:݇ʲ<LR[Ϡ$=*?iZ2?14,η8frRdI갳3#L4$'$[4<D2fqV/}rp& W+(%(U !Th)W5Z6[6k{^W 7QX8aU֝Vz$^QS0̮ P,6:Ɖ~kus(@4&U3GU4޵¾׫DKXC)qxmHV(U^%j\cx&Ac,p"Z $9侢uM fv`/&3GC 'lf?+X%<2C3b {kkHM8ƻzF˽K#/ Drŏ :As;"E0a)ČX:I2'F-7F ,0G ⩧ EI 4E5ɶ"cnK1? &B90"BH+lD4ed0D#[P.S؜kĊS. s&NB-CTcZv+)Lg&ӴS K\RA'P⣁Dy%0eLӀOD@W2LwXQaAAO/r( Fz0##4cBšsh0NfZV^;''Tz8O$IFʶ@%lAH2F!] 1MPC 4a[ ɤL I2K27fzuO}~*ln a5օ5\{Se F`/e<ٖfFz>'U[ X#&`80{VRBVUXTśZK]q^ÑJRbn4@˹Rj޵^_XпF=cɚT؞@(Y,1[u*36N FlWZBjW9 /&-ֈdceJm`$t=UHmknj9VQK @U))X#,~tOm].aʐ!%2g62[:ג K7.d.g M9Hwd+& X#pL?Ss{V_Ͱ +>0*q?{m#5#ruxpO qb7; eKNfJX3A^}5_+f~0{~i$@Px[6i {5kluv+k7OFAdljq翳-vI, .L)"HNBD,j(S^L kǀ/z@0hfc W]B?h>+,W*5\-ؐ⨁_ 8;^yLj{KYk '2+@?&!)G Yˋb80̽ qkPyA,{+49"3YGhLٰIY?K8CE ("A^0隗4X{DE@$%,33 g9-9C03l f9>+XQzs/7>b5Չp+ ΘUᗔ}!7P\M86?/ ,JݢS!!:k=351N3 Ё8?hQM_44."Ā 366 K+H1}>GTŧY͸-)06O? /£6Lq͝+TMP! +#ϪQx/Ir, X!| ~=O&#HMHVY@ hrq0t V $n=b<5y'$Т?x5" {)@e9HŌP![95^N|o@!/ ]ULMvjPD3 j G'B HȚ?5w^]xK"o~*D&Yαn; ¦o'디E"n,`$2߃rIaU}˽X#X"֭N<[Y7%}αbwO+! x^7cSl+:’}eph$(0h%^6"|Sxՠ F-O̲6Cx!Lrp]D '08P*)dX߾ehU È2bcveK"X홶Rь|@G"Xx"Vb l*"dWH#&ZHv槃i^@)߸Dd0ł0hCY>拾D~C @@tK, 3@ap_KIuC&r pGXBF dto(0u)%,1`/AwgJdK>%PCa-9RBI5\˩ XCCKjf:okMk޸:Ck{6{ EEś*3l1{KiLغcdV-[nMǸ۟pn.y77|o׾~i 8>;kT^8~?n#8K;xK6[Z{.Ù~jg-/^{!}tLжgFX+cPwl:η8'a]w]u;&˵;[v_x]ǽ7| xNǀ]gGZqo#ȼ߿x_!|?>_WǤ>z4o~z4_􀀀$ BaPd6B qV-Aqv=R9$C%JbyT] KRm%Q} g*$b{EQ-*KS Uno]L}-Y6T[WD]7Y05 _16,\j>` aZ|ij%WL$eO=z۩Fup5+xF%!ȃ¡xh>*Ȅ~2܏|8ۈJ!!pH<"|B)wn)0:3,ad/AP" "10 0003,4R4B/(G-2ʆA *(*| //)7W/KhDHLB> > "g0"2=.SU3}YS>Z STP]+_@(ESH^(GR6C虆x? }E[VEm!Vo*K%@TdUdP7aZیu}_jm\ ~"̰5}YIEP^闆yGV8jdhK"%LWłbcOh(*"$Ct%|JX `#a .Z0"! :U5VDY9ζkAdzûNGSċ#(#ٔcU1B*a3>U H+ /KlbTT UVy$-1apDaDc4]$@B0 5s~/hfD^FFA\CCð&7^/ <'mm߾$Yqfi4Ա!o0d ۻz] J>B L4N<BŐB":oĠ,@B#4` O}vt:x"0m|C. ^U t(|3.EP=ػHTa$0|" Y %.U"@T;e{@'Re*PYN%:à<{M+&쫁YWD}T!Ȅ;ʥJn7DRY,Q&BH$c2&|s:'B(Z Jͩ}BN@"Td?I|?H!|"X-`l Ҫp1^HAjLT'Ys_n-6v6iˮ,c39f{CPh}6{He O5+;۠m|_Y'V=U (VIǂ<{aKCz|Q/Lћ:JqВ&LDHG UUXAHua=Ŧqy@ S&RRIF{Pmy(W֒L^ɶ n"(pR7èu)db-3Ɗ:$aO nmt骶HQabLud\uVl r4̡$hoZ^mj J@jP"]$=b\$J3/ FSª$ s60X;FӐ֬6hJݬ2 "Wm,#A]R_p.=v9`DnM6[ h,$L'Z~_XU/ )gD&_(c'ؗUNo{l@f#U; Lx$N2, CPxAh:![q-t! Ájn龯jZ;0ʋ>BO/qd9xBH8etKrd@ax7$dM,D@)'JE:x%%O.KB 4GP.=>LTG⢵L"UݓeFȔ#hM`!p xB Yvǡ+P 6~ܴ ~qI`'3J{X'@'i޾$Nܮ 4aUpPk][7 U߀!y-|yXin)X^`5'oN*]*D/-Ix$vRz#',Ȣw4U;[!{B0ixiMq FQf$6 |ˬ)B@" <^܂!rEz!jIoi*"2'\YE#H8,B2ŬrBz!->Lm 2"bzq›]3c-H&-`ڞV8"0#Ϊ.y!p"$ב_ʡN#9;NgCxIQ3*IQCPFՆR`!@nl-/)Y|aݹH8- 2_Yb!/8y B P@-^ em0p~r.@+~ BB}:~LQo/4KeB0DY0B55`Az(%~rJfɑ@DXUi `^R09(d)t1l҇zK|2*t0(68cZ,#αyD$t G:F!R^\&6ftM]>gXBq|/&#ҡP=rxӍ"dVgUImmu~qB@y 4L܆zu$HR^ (\. ԨGP/U,OH-TPƙ*D:H 2hI,Dq>_0FgTm&踖Ĩ_2vi$%|(J\\j? 䌌"u <RPi_qWy$f @;gc_`@b( dƴSXs1;JL[c" [`Yb.éb5hL^![xjkZa&1+U2Bt:&"S\~NZj߹%ġ|+粁 'V6 ǃ ZI*Š$ bE #:e{d C~/XP_⾓sʼnrRKR a$}ъgT-5% L!YEx! ,Gܵ&Y֫1q=,⑿p%rg|A xGpcLi+&nf-Fb> T1ؽgI 4fW9q`RDa5a-Dh Z" W& bT1~%); 'U!|7rsT&<."UHY0G)߁Vh& "b^b< *xPW ]тGl]~x}28coAr@x3p`ϷI!$A՘1T. W 7BNv_!\?Rw;] kW8.ŀpNwe#(^KO| Y7\asD[O'u`N X29n&LR\{~\a|-W%d'֕u&3'DENWY̒ `-WJA^NN R((dWJ:tl؏Dx@NP >K,(9J.THDHP#.$L[IgFrqe`>,(j W8;? ɨ~Icv 8IGoB@DH,,Jp(Ɠ!j 5;.2Hm y B>mlFbmk>1"5CVA~^$%UZq!6#bw"% 1 >XH6^b+^wGDQ2 *>^.* " f̷҅W; ʂwA+T E$0/jkn+)g0ۥ3Jc``ǖΪβ ;;`8 %,0W>у '$Lbа; Bd$ҙQ&F">18(ʕi/dFB@+j%1*'` B>L&b+j;ԹBv@(%(Va~mltl:s@K" I+dJ~-` Nƀ) :~4JLT@s0ccvW̑`f!dF7J$^ĨXS /8L]*H|`u!"j  %\NC$;0+0zd;Ю;Z\ #"`p)|;N 3/<3E\0?[ oepOA ' j68~O 6)A~WB12Nbjj6-EFEO?:3+=0>BD"vM:&ޫ]'@f"R8ց=4f*%*S'"@hB*(/̃P,|% R. $BD}C FSM&f8j4+,S$Zp@r#K>^"Ql/Gtx7\#y bM9>D2p 4H8B+X3W\0T\NX]uL3;7-Y@HAb:5BB"B/)",TL?,,Ԟ+\rVui:$ 5bMhxJ~XSӝ>:rZpN */M8phVL5'RSdsbޓt`z cF >dET2(xr!b$LR(IġElN!~)eq,/hPa>Pd,ϊSctz1Ot Dz@z-E5Ui+ t6WA"rP(#bN/$(Ps>g2 2Zr/A u&ӄyj/'Be EOכ rq! Kn&C.tFZ3dkkKKbd1w0D"-r "D /1s 9QyXñJWH'@B^a"-Ux:?}Oh ^E,6▮hײ\DB6)~+Of%U|PL +> - (%mV *"BI|W/޲b*l*G~1_QOqGJ D갋nEMMc4CY=+I y5!sx@ ֖E޲(%'@X`P5d$/4`Vң"gɰ&4GB5Wx$f/RAԎJ5p4,c@0v)LBT|'#(+/9~OCY#9*b|#*1 (IKvxf6'  Dmp )=2o1\V$bzO(/OWEa>8>*I;6X&#wqkR*֛kjP2>7jm `!OV¨W#`į.9+%UWLtdXgrd *9i:MW' NP< rfsWl ʂxestdO_ P]E:IFoBӖy$ i&sH$R+"*T$-HKbQuk^#n,`CLDYZ¢7"x V0b"0Z+iLS&]B@X4@A^V/{uCBJDA!x~#Yk BS a?#.DҾ?!;ȤP~2IpcUN+ٴ B%0}Ba2\ymʭb!={Ukd]oYuZ]טf~21Þc~qD1]4_c-cDډx ׂ$Rf{9"R!X\t)V>GMq"$CO0| уĺoL{Xa\,(>= O:Fc=S̭0 `+3DO"̘Fpb;H4OӋĔ7N$-s@ JV9zd8jftD F*ML< 93HB 3 !o ?c*D/)U' %aA>?"LFY;*n1f}ZǓ}R8RZ,Of%H?k$`_KV !`X, nrf:vsmM]ouT =e"*s01]GdLݝ[)T@w&mvik N ޏsJvWMP8]iT4UMCNC(-߈eF+ O"X̐?^Ԙ19_Bڤ"<)e<9inmSna3r$o,w#Lr B Z RFZhP~6kýL_#ioLЮ W*?T?0Ό?n>U:!dIZT>dNޚTcn>ѿl2W($1(p>C($BFaY#xwwҐM@%dy}Tez1_xP*,XBy/'1K0gB QP2*sD"?Sy#()`E a%'4ʊ3)؆k`•. ڱ5ti%PgK xS)rp@ު$2%N]%XslZu6"QT|3F{* }K0y` I*Yl'Tc #EO9 :GD! @@bpCM#"𦗤6M@Q;A#ȏ7L ٺbA)SjP(H * cj"hMukDXfqp}I<Au`@АgCpB MWKLu 8ERQ2rV&œ` Чc|>4s!V>kf 4oEQoEI*E;H?Ge' *h Q3a"a!7}C,%#@;uus  A1=z <9kf 0S _^_&=B@Hǚ D}t\/fY&lL-PXw ]B'&Fq6yݡ,-૳cٻ5[P"DkEbQ҅ gmt>ւ]ۋ* #F Xеu׃L+G,/LڡK'/2`*ŗsjzTlGy9={@ 1g;%l+yT` T3 (;4 sD*`Rɘy(#)P"0—;xѦg3pQPVP 7x2 'H+͊DXÕiD g 8щ<X;EB dHAg ㌂.;3$hSmJL *Ц;'U9P BX ۶ ?!CA>*S qGK *إxʫk'p'DWA  ;C2 $%V#b%@ږ3bھʣ5]yVD8?,_\:>) I;;>);l9."'.ܡGp$IX"AK3BF6c߉Q+Ṱ?@K ԰,E06 !+6* A։i:Y!Ȥ@5>-|0:Q"SJ*{ǐB"8CՋt˨pĜODދaHTP؎;14L%ctы3|(+Ȉ(pGa> ]t"{+ȍcS 9{J=@ :$. i/cK0E HF4e.|I06hP*и(5 Hp-JÁuD+N;3r K8yc 2}#Ѩ|h?ryHW-TjU8PF7[MD2Ȥ:f7#ZohsU+vC'#B&bm,TZ vU!O&syP09-C*c`ə츴`VhD/;.eGi2o*<*\Tׄy^?DPf$o-=M x.O S禢B;{i@~C$[슩s/ C06ĥ&* Bh71"׬o @U 8$￰E̡0̓ oU3$Мs#3M5^4ȣ [\(D.-nQ5ETB'@.S(1əj&3E "'AM^V*#4Er}C2j*D堇L/҈Oܝ-/z:%{HN㤯(#a D-47ΓY Ϸ­@"wEp?D aXZNn? HߊuvBŪ,j7R=ß?W89h7ت/F_hW0:Ѭc<.Uၠu; D x!{>1=ԇ+tWK/"9 FJ"MK M0Mz`Ŧv(g4ٻ򂌻({;\ xˡg[TOYv]e&T&z{2 졳.<^ޏ*!J ‰j"x2!ѶT8TIj*K?R`No_d {m?lx ʚ:5& Z Q'Xٜ 4~4!wtRFg*H8M4TA%BE "I! EUCBhb&&hNK/*0K+ F4MC(gYqZp#k+j8sR\v*H3r m8#&EH b\Y!NBBi7Q(eB.dW.e5b#bP2TPg( YIrO YZ\JE Yw$#m͸70D摈2}2[m vV:̣ !wTS`q6#'$R_g A J"b@a$L(s];Է8pYǢ͉H*Ҙ&[DșALH 8jB;ٲp2Dؽy<7&P,orDJL".QԄˊRENP 3i߫ (҅OVM䋗xgї+S O2 x] ,G^pd@5Wu>WG<_u "j7 ֫}FbHKPKBK>(Hj2MѰ|F N:eJ4-ŸPo[%=Ma=+0_!Bt%@*6DTs F]Jq f+-4+#M);~t&b$DT*0+6ot$D^\NafVQ ښ$ț T]IF^ʻuO+c6a7Gx޳3?dTЪ4EUP?,$RBWN@  %9f}"xt* '8ն3Q'Zv5:s.1CxP-3Ac \ʘ@m2e]g[SrI~ #,^vrr Vu VzV*/23rjD|}]mDK°Vv5PK$z#|2,/3jEɝɣsBNj~^DC_('eeIǘ7Fy\$Rz/n4RpDɀAP>30Hu鯆z \@g\K[zK~}@lXa6z]-L؆.Qc^Θ,av?D\u,3yv2//˄`? @oa RKx¤+ V]6o/0@/ =2<|VٹR:V+^%&OvD@FSPp WUfL ͬM CZe XP0xXbK@Mk:xфN 8G}(ǠED&`֬^@T$e)4CB ؇#%tF`͊&dОǫj`0Sjn`h ȍ Ta hfr"|b-n݁ mB ,$d#P&`j /*ۊ&D6SJ - $WBGCb%6T Dj3g/K(Q%fBLœ䱂2*ԅ|׮XB L].设YwB(1v!IkA>^++F/K"ZS cDB"l.-teʲ'BB( 4N1"^ $2h R2^nj"6;kKM\n B`@,4TeK'& (d %P ]C$%[ü5D$'fl5n8zBc& )fg"(F $תO*lBth b2Q cucE0g"d@H#!!֒LuiP@"uQc d2BLl7s5hBP\̌y/""FE]#!vjlP1"g(BP? spu\ ʎC`D"? Δ 驔l !5g5h b: i&rw)iv$b+IE4SZQbb%5&<2~f`p8jų?+`lRc9A3 *ͮ7 )ȗ*,_ /*')LnIUXd6 #Q/ʞG;|%]S&hD"~Ѭ(l3`c eH J#k=2V(N!>/#uO~323.-R@Ad&` #/jy3TEzAC, &`/{24VWQR f~#(xJZ#+nU`R> d>+ IJ;0_:B` *8 o`u(&X5* Fv"8gޕTN^C8&Ks%[DJ68r`1c ίD@]V*T&#oYOJlsu톄O!42dTlolrnvouE$"^vd3T,,P5Σ-C]f@h ,p. d#4:##.!;%pwH^dR(j 226)d`ĽfAU:reH:K C`?xv 4'/T3DIkj?s _bNK~=@^mea XV0$X޸;$P8&@ H;jۓu&<}n2;W%4~p_4ER7IP un F8Hz/g*\t"  AT*}4e-{6$߈kҽC)|OHr|h?Bd?t $AgbvgS)=0o3RyRe1NȄ^ 4KFƓھ/bģqdH;Id`O~Ց!3ѥZ_;n}R"/*}e0Q2d~"Oʳ2x?\ 3WK*lUHkaeh|+DBsad?滍#δ2k`DP:0\ Ol"(j0/Ib<A 2pb B*2)6?j2LRA8?% |c5Ar)a$<;1Iw,8/kp~!2LLۘaD|D0*,4U@5U܁C[i~UO@ASp%(!ĵҍcY#mq]&:><b,A%gnL-trKb0>? 5LdY`CpWY3&-)wӒ$J82, Mi4jR`+ 5eYh=kG]"./nNux/C}®Yb)凸UL`)5%幀 0aȬh';rr @] TS#!#90 7;A 2N J'5sYᵑ^ {2-Bxʀh %xv"[r %C>Gi]Ơ`.5|x|*ڞ8$"'A&,hFCfҽ5",sX4HCSVYGrprӠ$h+::*x |oYr7+z_#)&x:s* [vs ($k.*ܺz?G@/K q:NJ#hccC0 (šR )2zwxhFz:#Ħ( -L /Oڞ&K^;r%S)SaC"")߄?ATRH' =M ^ʉY$-I^j (1r-C4@8H;>"y!IbĂ> j{ƋP_ʺ_t,5i;> )b А4i2 8,MH3КX;uLCID |PHdEz)_PWfx| .D"32{\ydљyZ(ɟ\Y|.1>ڶ8o[{Q B:*pMa,-.yhdRy< 8*: #!02,E됈ÂC>PW 1B"Dl%e<#%](эTH0 g &H<EKx aAP*3~".-XU4K%;Pъ*":(UâMoxpס.d+ILخFG.kOLL$<,yxj :CHqK^BتF=rɶ8_6.!Dkuu07Zy yDC## 퀃0-T ,Kӱ(Xs(3ЛG`U|VW/M뮐R\!8GKtʳq2&[G83鲡|TŞTO:;A\P3aCӉ(T!vM lƩ%[{FW@U/5o[s1gze>GsyV/e%|O"d?!X$}?PhT9z"EY(yw.7Od($'/lS|U5c-oOhbV1 7jq:N"f`#5x <1DdD?Bv}sJú>1PSo, avMGGl"}~#Q=ǸѨ\9;oLqRb[-]L<6qA4 ;JW7ba:?',br s@2IBZ1l9>$³ 7 :N_")IBB!H$޲T9éa%D`A f"Kl6$^? ӸC D2C@1L@7&I" "zғ"I?+K¶%I{&2K2= D6¨֑4Ӯ"q /?LQCBLE4@{WSGn=/~'ux(YiHqڧRو~DDRTxjT!T/'2?w׺"~`R~ )̡^!+}eޫ{f}iJ<7 5o,bVI"'ݺ⊟ _"e(];&&!1=@' (`Xm溴N?2SG\A] %b>GU\U@]d5L݀]+} g('7!(jSr)C#Bg^?+`P22;4; mPBf/o\+伷pjv.;r 30~XKos@7+Pg/Z@go\+/B"Y'sn HfXƒ޸%D hBT z)F6iT[l*lA33qcEդ3ʰd*8}Fy $Ȗ`I;@E"E@wR!!K?OObE2 9p&ˑp!<8!Jq)D*6fvsG%7"^JOUY>R`hI^~JBň73d 4@ KtPڊFR=&wֈ71zw"ҀCZXY%gCMMԩ(zQ 0I1&pW[28ӈA} .##pC D%)Ϥ=>Es<@+N"BK.\,W~QdSa#r=ph 1-ujrEW(d ge(UVka6cU+@FIK %n4@ D @L trxv=~rs2H[J EȤ~vԎ}ʹf,`@iZϲ,2o$3#2.v'&+Mz` z%q>yA@wL&t瘩B@F3 [+"_4hhP8]`f #k& N%kjjE| h0WY @X$"ҠP'Y+K#_4!| A@ K(O 6$ $mG(B> ꨉC= |Ax9GJ҉@$Уc:) AvpB*@  1= d,O|G&yR/` Q Ȧ),`1# 1֨i&c" 1 "ޏ :g(NrӇ',~-PQ9 H0Њ%ƒn` Ql3^ ,`o"R<a[/!]@&HNA `F`j- jY" R'B~耊!oG!!U1#E2NTn_~:t&T dId@Fe+6`0A1<%9r(L  = $3n3è`df -wf4s$ s &``p3lt @ W /,dTffʀ r;b=nT4JS58fJRJ-VXSXY5YuYYZ5ZuZZ[5[u[[\5\u\Y\]u]]^5^u^^_5_u__`6`v` ` a6avaXT!6&X%bcb4g:XV9cdEOd6IKNEMe4bvWe_e6cdgdkdVocscwcV{cbeYeV}hWhv!iUiikjjTjjԙkkSk5hVXvQ9/'6s6l8TvbzXnQoVo=o‡n4pGp pՋqqRqWq[rQrX7rr'rW4?99r=r7-twIs7Qt3tGuqWvw_t]sa2wkwwqv{wOxohuWvWqsQWyyׇiw}yz7zzzב{zwyW{w{|pחCm|y7|w}~ }n|~W{WX$ BaPd6B qV-Aqv=R9$C%JbyT] KRm%Q} g*$b{EQ-*KS Uno]L}-Y6T[WD]7Y05 _16,\jJB H$ B`J|ij%Z;d{ h(dD]i6Ғ[x| !ac[{{@=%ǻ(iJA"IV)R-<_8#@ܟP<퓇8?ܠnP@2OaduV"'F1.tap" "w(5eyT/:@XWzdۣ!tDŽD('9(h2V_r#L D !83* M j CxobRC',q"}J;0|C - RW@pH @IEB?tycl_M Gʥrl̦sIo)'s :ШtIUH(ЀLD+ ƃ_Rʄ^"AhBldRpxHF*qڬv/B|d?D!;䠙 Z'3h b)Hȥc=VL)iD/Ѫ"Ƅ" C+$c@̔4nON*xGMWD˕=nS>>@DJ#b*yk=W%f YrD# *]TCOUJ @|G@׾.86j5İ2 fCZk>AOH@_WRAq}RHCAE47rQm`A@9dy᎞*}$! XT`?uIaYVEkY%iahAfNC/*!*J@Yu}( ֶ܊3fa6okX_2i/{ n#"r& ݹָ?}Ԁk D+hk8ڽS 1oY_ ox(qXf-U4>רЏ"FQ [.p$5͞|3=PT"d2; vHOȉXeZV@ָAA;ʢWɒ=+*3 NbX5IIA%>3xEAeޣia:R[*R'ש{)Y :TO. NZ0@ T^90ُ& \D]#k5vf3LCCA=|Uñl/ieL37i&Ѵvr\վ0|ۢ 8k=!fMy0U漳>JR"QEBCViYey^+0tp"0hRZz!)DlQ偅ZR ("B́ hٕ*b 3XM#X|}?=dy8"Cpgq;ȹb|B[S I0L<7 !M6$b2S8P H"5DY |"M&9%%&G@"m6I5)&et@=0#&y? HBY"O.9gQ2HA4'ޚ"7[2\!Yg VTGF /7 vA-_ 54okwR9*D0c90$v(<,H vA}@%PDFf(z(ཌྷiF~z `K4jQJ9B&fL"R9`B$NE|3ad}/Ѕ B p28U@ ё #vu xq| L*tV^sWRRA\!hW$\R;^YU Jθd[ODgLPěY+YfPܺeopV߸$CW=VL_*ȤhD/ 2x~3R/S D^ gS}?b1MTw;C1IwKu͆/17"JsC9o vUoAhWD$3%Wjp>/B b1Xf6ysb !fqpM+Y1̦!xnZf GkC5ĒuWjԚM."g?eLw[nkan!UvNx~??o?#ze~$GȪ#Q V,ahz@ xqw E|V|0 /7$zP-'| "* >nꊜ6Rc'LS*23 d8$a@dA,!P3M5'n.P; ^NqK"ē+8awt,R+ NT6pDhS@R"AjE(fֶ`ZU!(fAH$ !@D ΡSp 4ɂ^%QVF|^oJ:.DXJ(?C#0O@$ڷ:b*1r;`;x}^d j+ BQY,k`?0(I>DCRۋj-ul3 dIl"/i}2zDhxc\fL&k놏Ӽ:a浸R 0Zyӿ$nZvߙZ!)]ee@OvAFnZ~A9 B:#0[B&]A} B~4zbL20t CA rKJ> U %u>WJ=#*1 LkY:T6۠ "L w8Gɺ碷H\DȪ+8J3BVcm]A_CR0!qYP*VlhJkaw,}2TF2Ez!>1>{&6A¨Zd `?7Z(Vqr 3f 0p \6]xi$ےuhvO,R׫qJ 'Ȯ+.< `4\8!;)ysD\RN}"~|'\FjR+"Z_3Ehof~AtyˀT ?hpH߻~֐bZ0SKybY'~""ῲu~*HC0mee KyjR|HVؚ+`T3ΣBpJDߕ# 1K.MGH40)h 6; zHOCFϰ8uy0[+qB, GxXa3 0>~c!^o kʉϤ,JrP3OTc-ʰ ̶A"(G6%h 6.00@(JB zf%D8hV€M _F!kB@:Pf'KvB^6,*n:BAhD#|si (AD%Vjn:BF$] iڬL0,T\\,#f45hnchS(@\"@`Of }%$I70 w -F,#.Ɋ &%ni (J *;n*ŠRHn@,vzrn%"&t9X*JD.h=Q Q> "p6#%}EޡT@#)"zJD eeA>!>D')և`~f'甈æ&4/ `T4Yno!Rd  +g|~!zTF6b(ڇ q`BfF"ʆNR3qv3 'e`\YbcHoʊn&.*+>"/hRD '$S R&Ĉ$B$&4lLE t<`H.fhދ64åV!|@f:?wӒ?< 䬡~_>b,$cK &Q#x@$3B_:&B0 |$k-&5cJ-\ vfa^䁾aJ v`eR/ +b" ?%b&p"t~!(=:FBpltфjEVE"<`bB FQ-pU9~uX4bZan*:ќn!;5$@ZL#41nn3/(`@(jJ$ʴ7 d \.ZĴ=e1;FO4>'F4lGqK@"EF,$޾Ϣ:ø?H3S€ $,*RD+nkO?P~~G(_(1,LV;1gTP%AA%~o DO /.r#NI2rR0NH0 bnTUF2`l-$, uIV Wu''l8h2;x~U$5gHI5d7\S6X(N 0ŝeI5]r[C֖.7 9cV(Udf`_oCBf&E$T27%xc3TqVf'`# A2AKZ_-S3ZBz "ji:pACpuIm`4o@!XvY::B^:]# @ v&P;HB5G+ȗH5D B*oe.K_"c&"cCQ#i!G`^$#Y/q6;ldGBF MSL7Br%q>B%8JHvRRv~ :*A0kG*7u1R yOPXl FnJ{u6@|g»XA 针\)b&FI; >20\:`TRT$EaU7yG%%&h@>.M3X!O ޖk =t>z ;"4=DC/K(BS/=0:=Q,G<#QD[aZ {%6!H4׍-+@/ 2XJ-*NGh" pA$!3HsӅ=ϪޘP'LAoLTC d, @&wBC* 7e}2y0G(9Kz4A?N@FԠBb5Dg>*#$D~@5HFGHf`jSNW9v$ۊd܊ʺ* Vu%1̃$ZqtW'ibP3l63B Qz5yL[@0%%5A`B /7'uzR=B!q yTxFXWu BR,YK#>W~@`i" J<3 О,+j, sŽ;"os" GnqkLAܚrAeTgV Ḣ2SDʦޔz< =elyO8}[|"pӴz,2XfC@5˴cA+5 5Md"X?G JS`Eɢ` 2Fп!!Vz%-ɔ u6b[Wz(%N[HQ_/p`!]]0odHz!hEDP2lV4(B4R HD2JRXh0A6#TIJo 1@ b R%CTh`xd䔑C$6r-D /#j Ѥym@ZDc 4TKnJM)tѠ/MrsɰC h=rUe)P,,„2Ry5E5 I1D"DTi#+^F yy@yff>>%ȩ']զIH¨O2ݹ wIbK+ \‰!@ة\c%KI@ԗ*>L(RcZnKmE"- 'xJ˚^0PzH1$dy2YDWC(hYIiR 2Ѝ N&Dz[&1R#gj/K;I^&Ih|kWPd:vW7 A. Q QwNP<"BNDx1~+ =<܁!j #SFƨ8B/dth\?K@ `HWbA59[k.:OX"X'o 0w7)~o'T+& DHg0OKVq`mWCIDC.lJ DgPq7zhG,&B(D$H$5#ʑ (Ʉ},Ur3ꐿ! *D3*$؛B'͊OJf'(C $|G8z P%lZ#y X2Q6G0jlPJraC]ȇn8FidN"4dh$WB$!<"ml6^&hA?ե%A5,']MA7=xRo:3"^ ' kE,xxlnho{&VH7JQ'VZo?NTx2`R0LuuE3PC`lA.M`HR%TQbzų5@c5 lXrtg5 F^ z074 XCcOO_]Rj tg&kiՈj~hңڂJw.@ԦϭJrLfO{8!P$p׃֞ƫeBԉfp*Ȉc?| 'ѝ88|b\.(.,0#/*)KQ`%@'`'9?& 0s q_ @#ۦ6P#L4x 3 AU"Sa*d1r=!(^p$} JA`K¨3c4g0'`DP ^* ̬P??*D '&G#?xDp3`""y+8E4 QL!{څB0 L{, -[q󾐞Ɇ>:hEdð(4+ 0 bծ:3 ;7K7Y1Jc DD{  c{2 $iP'+ÑA?-d8lz (X8[`p*Ѡ0"9,A8 d u%7X5G L5ĜiO̟H404qI=OqHIӀ / LuA> j.X4FxG F #V {h+; * @;pG"[j't̉d DNH N) Pο1!:yl$݂\1%yȎI|ܺ%$ܾ]",q㮬˘-ܐ}P i仨G<+ ˮrC&x? ++LBA;N@CfNj ⁘&.;ɤ,*hʀJS"G00Q%MROЭN3K,޺ɋ*3XVZ)FpW`$x t 83HLW@jb-; dk?z1ʢyq:8N!0S+،4M Y$8UirP+P{(7 = * D5P%LR:u3h+)US$$jR H";ZOCP3z#B"| -W;{FC#{+[,xۦAb `uf#?Ľ&UyKs:`$ {q eIB<*Ȥ!_?8?]t_O8^=#*.."<tɷP(  B lOS=ČNE18B<#z2L1%2/S쀧E" )0+ *73|N)Pfy!T_#h'@$V)ӛ5:>

x/ԔD21TU2"^׫֭F>C<UE!cKNJJRgQQqv3{uR"E~dzے|H2y+y= 2F-|+@rL0FiMb¸xynwV '=+v950&`x2 ļ"f~O<(:]BZ'\1g#a@q67$$!ZxAF:z@* R+1W$PM SM*FSC 񢖒j:͡R@MA9-l1IWi>죠F5K66=dQNd :?j5pb_:/"|i Z3ƘrO!n$n|(TO՚jO^`?D9~{1Fo  Lb[&‘RtJpoRu 9#-LKB,夬9OS۴h#giM y`%еư aIh𑦓#G&B(Jv^# JTF R9nķ"{&BeK6T/l1|#VlZ@ i#f(~,* y4}RhSRtYfՏ5N !.)yPIa/`U.dբee%e#婆y3j OcUN5z˝`d5Lyꕢ^4ss&Zy mfQAOeO_VMSH4+U2gʣG!ZR g"XeM? mJe Zי#&[ IkpTfPHת6$I~]"+D]^z F1vlm}4H!=[i$S7H/ J'\A7uI_ȗZObo / 9\\3  x !D:YgfI1ךU'vV"֑F] v}4vңx}t_默qgE)4ʜDް -ݬ% ڄTB֡n=Y \rFDp`N0 e*Xqi"ϒ0_X/ c%@l:oP]H`h `:%t# ,j Ibb6ae"n q~$ ˮ%f ͐foM`hԯ~^+ا4@"!x~",L؉gh4d .bZLDdJD‘h{`xF{X.%pӁ9`^!>FR-%hnnC" Ǣ ""+j{B|oUl1OQ&v=:!"8@ #kbڴd܍0A nŨQ(Go\K*F21BÑC/O!bXh€6z:"&o0̲CLHz$oe j'2|OF6Az%04CS&˪8)KgnNM=7Bˊ"0j"ZJL%\a{E}ƮͥJX `Sr\.Ĕht* f$pX+ eO%h^%nXx`"#>lRbdVPEqu 34HEM.͊F:Qmw@g"NPQf+JviCqIDؤ3,c@ ֢Mj2Ć*$`MPi&r*C"~SD1.y% #)-g,@MCD@ /ꪪ|JAK!duJ |Q vT%q!=n")c t$Abt)$^P1 r˃ /T(!  B~RKXk:534z"hGǑ&@J\Ṋ\,*NPM'ŠJ/IT8 4(Y]Ty-M7D${\Xce MK5W<^Hj(Zhmg]K)X=noWSn. B*5# AW|z 8-.-"2Ȁ~"M}Zt.ɠ@mL2B,$!4U}$x0;ӀT rY=FBCiΘehsKʢ 8%FJ%n8 .Iw"5X!tlE 8Hm=-gfIW$p7Ns >!A>VJ㎜IBWEKcJI>gT-I%%7%bgŒPMttV[(:VmTWPq!\dMxoGgkT@,#4L؊qFWwBVw@$.veaFW#Q"eܞha!"eP2 *Mwu M<k$:sV5Th'&r:*UwO@hBT"t#u.@B! ^Kjl-52N w  Nk d@c++$5=$(4h֢8e2Sb CN\B1Bp+oȁGeŒ6t@J$5ŗBuc59" 4) *R C+P-2K+ VHS+cfxp" .@0#,kÃm^  Xؒy :/1x te-fB>@j$ol1 DF,@5à 74SpHnVZo`$\#6s )X,&Y; Tm;nqZ)m)DTyM dV8P.Ne,DQ:XgƁW3 ݍSW"A^etV֪V@}Zb%*MobR4}Pb!\Pj62Wʣ;Z ! $XєIdo5Z9Gw^ϪǰpLwm&o jCoFzqVdŜV"qTrրn1F"tz~jB\o܂YG< xT"Hb.V#Jˉ8 vGZ\ D!9:${L#v;ɳym8 }<+kt4ӓE(Ua)a)h#k(Y};%(I 'e%rS ٬ Vj~;b[ *(,\B+TsZ,[z|yL.2ǣb $e[l!7aN#a8:s8|냝%g(u"]T^1>W0':<)B#DM[FV FP+D5AxDk1In@\aйEz=}rb bFʰ6 eϩيy~c׎: }@T WϰЂZnC UEPq, c&$m~$ޒ2$|xy1~I;`r~UDrⱚpHNj ƇLЉ|a|Ou=8Tf7C d y$"2 r"%.ק<(¹JB g20B7#pʂtz(Z; *!R,|+6Pܸ!?"x4x RPD' C(|ߑ*O1f? "~Q:EDB!23gze _oS:<++@ൂ}4Jh HBo63ĹB ɣJLb6)st(TJA4R(" !MѹxgE4O7#xFD LӄD1lS FgeDCMI[:a{2 q=ѲDUb:괈( $l,""A zPUs T_h%#IhBi]NbJo}XVT$I?5G||V7U3aD$" TTnQIIS . \ ŀD)﫢 HH& C4;hO J:9cW?Bi(ьLu Aj8FX{>;FB+ fw2gYTF de+9ͯcI뱜,x6(0rx QѺw[?/\(g&,ͻ"N @RZ ޚI٪śrp_Q(fyg=DeSm H"ZI\KFa}Wi)3V TOY%L\ɰ>I!R#ܒַz?#5aSjy4"rhJ(/gf%e}S`I4fȒ{O }a {)#V>_^ّ]m#R>̌9&R~:6 HqG@!W:O/0Ð8MbfSvGy7*U$TH0H8Xme# FzVi>&r`$%^;I* | P0NNN Ss|Gh k;@ňgad&Ϫ|QĤrbӂ:;$ē" g=2l+$|@N(+b@k(ʷ q`_p6l8vurS@@Q2<hQ E^JBVͤFNj&Z|]MiPE|fm FmPz} \֘ C -4+DIDSk BjNǯ؈  eLBcF!%T|E($G7ԓJMأ $h"R@3њGRnɪJḺ />@F̣dP"܀g&QPfUd0R{cdr/`S(ru6^y~ ڱmSWԾ*ixOYLEC 9;D4ŭ#9 Ҁ!I8~Xl*kT8ԫtƯXV4Ӭ+wbO ֚ofw@D20}t5 9W't2X@Enp.vO*Bo Kl'ňVJـd !X?b7$03e_DO4`D ϗσôo~ޢiU!JVf˘?D+J8TA8n3C>^|xQk>ihV!fvd!"`{DteoSH ~unPo X++1dꦸ-"b:|Q:/?Q&1'D01D0_Q X>:Lj$*o{ ]m7Jv}MɁ~I'ϞPEm-ML hV4+#~mMӳdֹxe0XCpQ&Ôt#-ڗB_ OqCc<&nE Ǒ"pPȳGD$ ;_ }5T*ijWBDrz<U+Y.AqPB(N |gǯYZ6DQ7Nw'b-dᾫNGHJ"!xT܏%R{Wĥ JBTFoB14/l;VFj{y"ҩ+Xcb(.1GɇJo1;q`+9wkyY.//P =I[0?a$J .춙+ #O|A(-*"Q5@B <6A@ u#yq۝0]H? .*J@I?`]h#҂[U29a>kx` [L]z!rWD >*AR]QBh25 둌K4HoB+Қ9="/=CN'R6ePG@_X? Ix>T2CQ2cS3hgg)CeX,]&2l@VE")NgS}?A R D.~!Gg•KJ} 󴠾Uʓ"}_b)o\ a0"QF5Wk}<#X1 7vsB1 f3N&wh[KX(O1~\>3sܺxHڜ &RR_;߇w< 9=Usg+F-Bzfɹ D@$ 5BF >2O+#B"ḡzj,^3 Lj#@" JDlQ~̔ PE qF/Njh%iJFȱ:2]L&{|i1rG ̳r04O{! ƫ; ԥ"#w'|':#<3O[lۍ. GJNDA]8.ja%d^赔|[F'MӴ,p.Tv4EGmJcReef#ETO@L8ޕsܗ B: 2GUջn2o3B뺶CC|7 `*: .4QZ3 nf4y:-`Sp~!ҡ}%$jƢ7R$3H;qlZBㇵ\)dxv '^H^]}+Fi_%peK{|AFGߍ]&nE$-a~" /j,7rG%Y],'؇?:^J"w@! ~#O{1_bGg8!^zh]8)59E@ 3n=e2Q U7tCͦ J%.DA%$fMA@v FX h*8wT##+堰c)ѬzM%h!jyU40d>' uAz];-933@$%wzc!~IdNķjr| $ػ=6 P#*=K) $^s`<*};%֘8TW# X* sB@," Mu[/± y [) \8QМav350d+*aBlG+=9[iFCBqj|xPA^|ĉ d;kL 0q*4 ɰ?~29{"#&x">X62ext,к+EGe[#xUkR: 5X8 jJO{h;q{c~->sT ۘy+AJ^GuC]&'gL` `̲r"UH#+c|M:{6e:[5"`0;@{!7oaqUL%{k7g`OS"FN~5$)xU㾿O,%@pI5,EYL"wi'n"CHXO IEͲegɵ=c 0bhW@*ԦN"[Tt$]>/s9M])! ;h&g-O_HM*NͲl1򪱒f,d9h'&فNq2qA)&p섌Ye Z3ZP4ҧZq+A$ID?RD!2*q\}y|=y6ڥRq[t-V H2TPU(o@*ylj?v2T~ZVdFNdd$d^wAV%)a%t{(08 'a0Fxa~5+;kqg+Lr,нRv g*g4΢h <0io2phWblRьRhtb".:(a"MNqiƠ, "t ^FϮk +p Onjգ FpG-|@ p.,*g' }Nh甉fXaeLr@DgBF?,\"f^bim,5G8B^=' B>e¶04֨\ڨf2='@:q (/Z S7 0p fH":A^ *mxrh H [ '` 9Rd62ƪŒjE$mBqт bbDb u8ZdR,oH/}PM+j _ 1v*AxC`~##D+ND6I ,J \=`K'r!T){,#$$r+1 JtM/N:CZB7Q7Ba,&\)nDb *( ۀ1#cEEenRN<4He#)M/0Ґ8x~SMBRxc!k,0o Ƨ$ؽe ҩJBx` *ZŠhB>M(p{,3ܗcWe&MbmfV u:2T'j9.L]NcIP^jyBӐ4u(A/)PQNT.+k*s:B:2f+P>dNK kХ%l6ARU|'.&$Ѐoc<~f#O|2X2K+d8M68@BXN'زcƍ1䅆J.ZEZKD' :p_9RR uD)'3|?2 0)ITm^ m$ ~}W9H b6̽Tu`gԧUb ,\R0i<6P Tc|@&AW+-+8XHIJU@ 6jNؗVL X* nN@D!6)rH0k$q*FQP W3F+0U9moXk'"az/H7$"Ds:U Pm'@B8g)ies$@yjs{k vDQk ÐBq4b'LBuA^IhF>"8 wȱ`$ $*p(Ls<$h@]st3?}L~Z dh ڮmF7J.hvhg.ox^--u&dNlD=4P/<^rdx.:?@$nbVss&;\`m @8 mdЛW,Vqfԇx_*0|!^ý,_`oz\F&ؘV5i;\$ 8vK!չ|``UXaU 9uof`T }ü09yb r`b Dq+ m0>qnШ>Ƥ#;+r#0uz fd)پpUe'EbYKwA4i 'N\׉ ޮ: ;u;K M H}ش?n- f b  E&( o 3g*J#6C fa4H tڃi` MN!V8#DUj:) D iLj7@r)cO:.` jRʋ~bd- GC {7&'r@`K{B9!Xa}q\Q8@9lRVFtleڀ![@ұ="`tPH[z'3JAvp_! XEA7N@ t34u{4Ri,@h`h:@ 3=# ='gܝMۊ: s`ͫK77K+#ֹڣ5T57>`T#.]\$ E~BD`m L>W^bT,>W?I~%x˞!=("꾩>~뾹>~>~>~>~? ??!%)->UޙZ?OHW̅cS^͵sT3}y_uqme_a_ߣE_5YUoXcVH=oݗ]  AT. N)ţB5G ?ILY Kf|i$gyh iZ=&KD%F@Ugz[Wk edҋEmlZ zqnћ}| apM1ca%Ey|5 7GtmNWߵ\ݫgv=wvw iٸNLz$ BaPd6B qV-Aqv=R9$C%JbyT] KRm%Q} g*$b{EQ-*KS Uno]L}-Y6T[WD]7Y05 _16,\k2cYK+hʲ6rQh3:,+j(:n0,./.+\qPB$ DCaD&\Kr޵x,+%@!NhH*!u=w=n{JD(2 ! APFA;P # *KDApdAxB@W ] >;)™*nң FÎ!AP`//F!p"@S1Ls"3L"  AH$ UE':<4"C*t% E"4B at*Jx'h"BTAшuU(}VյR8`aUű|^!:E}NV(m^Y,ih#IRbALTFԂyodYw]uZi"V:u)c;^SR$E0;Lug$x&fca8* ld񕹌F͇|Ni^c2<nJ9oS!DߠaǥN,h&s"z ``d&[ dz^{BiM:8;楏T0TR4Ģ!O/{*w͋W[=/)^;dݹ&SU2>}'OrE޴a߹=7wSr(Ar]_LIpUӂ  A "BPN)E(n9GⱩI%ȤҙT(K t\  J|D/3?Ld9> Mjmj]׬ʕ)m+Mvȥ1VȥF/CƄ!<')#ָ-ocd$#ŕ=4 @$䣙Mm{muo@UPyCA{= r %S~3Qk? X~zbm#0>+ Q^M pᒅ0!m@k * ?gxBH2Y$I)T+7 jJĂ./92!DAjl{tdk|&D>%kRC8/4XTie" 5n47 J@ Lʌ& tŽyGlZ.E7@T A(b66:B!T7KүT3l2n'vR$ aNUsb0vX-~_"XnaӍ4ŧiD(3 L:7R~QS"aD;E_, ңEtLIJKTȾ4[HEULS[ w9~$՗a eDPZHuAPlEp¥^~^Ƃ}-K+ז(CV<[.5ŃqZ|8x& [_0$_b$2ތ`k60D?Ԍ9 P7>OrZ.U0EH>b"bjX)U`²Zyy3>rM ( Hy4Y$ԃ0xa[}Qќ yv_R@h;Gz0g@;_q0//NorLp(M5j,z(m,%Tz-FHVjC̓#~C6׌>+>@ U ;P4 0T:3Ty>0('6,@M4 ھɝF_EZXP+;Aqa@Gc%<'-]؛D xUZӜU4E#&Y^@@$";Iʽ3򩼬_*&cGR&cH^"KB!|"gS}ΌgsxD're=n}U/]o7Qۗp>/d3|}d;^$I}->Ļ!0fŎbK20Y/}=YVcZ4]|3(ޒ#) pО%PbN OYL.ez*)rwr(nfڠ5l1L%"j%|IW o[,!@K2>a>j5׶9cm=;x#k,mWAt\DI,qV-^jfVܖZi6vlL!0X58Χ{.6Yf_Q? 4+ԄzM= ,@Rj FjsH!ګ? "qa++tê X!Hw32 $nI  H  a(,b b(C`D !%$j/m!M u;>@m 2݃oːwȟ\`AVZN|8@KT ۚTh#Umǘ zQ=c%@M.@(J%"h{Ll_VRx* r 5M1&);Rx RQ#$ D @υP 2`+O phi^%^qQF QaG$y\ye'QV`vB2Qd)QAK'BBH3m9i#%9 P"QK?*TychP@ S K~"ŤR;+M4a,(ѩST2s{BdL\js U@x9E\0_Vȏwu4Wțv(<$BIỵԤ; #D ðoq.16ش|3DXx8C " FԅD` BS)6 JEoG,S\N[A\MHE vxk@.Xw3wa8]Bb;)8x怿|6f@48̘ ]^R`E*;/8(McF,|L`Z3FB w ..uFy|Į!'$P[w_ ^3"(]^ѠAdVzGr5d@P H9"5. ',0JoX2LWdz fGg ~r*\C ].Ȑ"`$>;džc M/1fPSL(P^60)a>\bP_܄P-J@cf:',)Ѐ2Apvmrhx\xw<* %F HANv}0i=K{Iۈ\ 5Xy)1Ǡhv _F䘘 @Q!z+e).L#_ipJB_@"+"$m6@<"lLX/ŞB>+:^pT ɔ")Fm`"9bR;8P@THJt حL-(>km x'@4;: 0 6d)d [ Sy`DhB%#9!^""350&0n®nEd uGhkiY!8-\t/qk.!VϔRF\fA>(ν$&@"'HJ_Ɯ`B"qLB%B^zl>@BQAߎ2\7NbA| :>Y$m"dE6ʤ7 P0 H"*"HN K7#ф.` ^f"\G B1M(n.RîO j O&OB.HNe- R $-A9de0AD$rfCCBML&"3B<*`%h-q/4@\OvU"(,@~Qnbԩ"O%@U%JA48\ lF*Y8v fjtjJ. D` b@"[_1i("F[1P+W7f۳?S0OJ8#Yi*<#d/5?T-'$3Je%$O\Uz"2""@!b+b&4͔DMZ 8jd""bL4:Sr F Y$$hh *BdSeM7 '2΢~m#!0A~/K#A;1_Gn b&!3+B%Bc%hx$#.dHa|oExJ\o+JDEt@LrWC{R @FFv /hoge'M oVZ:NbL@*X7Rr`G SiFB4#Ӆ"Yqi $0ntU~"wG6fB@X>}u+Z|E DMN%O["O\?# FbV9.=]!*w. h"+d,r #%J:Ҥa#3 a9p;a1c[\cLq"#2sUl L!6mLa^`""*$y1 4*NM5ő1x/j R#A^(1ම%x!BFXb pAT.Dcr<3׋}vUJ9o"Ȅf?!x_2M!h O fEfٌ<$yR阼| J>!Yazo *K^m":M9+ 0g0΋(b^+'0FDMSdֆb2L@^?k螉rJh-Jj ,چL0$摗E_'$3.bRq%I(H@JE_>P'Щ}Y0=SUUU"5bimE(0ew4,ʒn=tӉ ROX/Ӭ 2> rMYCS5ՏM5m(:V[_L@|EM!9Dd^׌ΐ7>Z-;fmYgyH :2i_L[Y4Oz|*QuF[JA-άovW%~7$ׯ):SB+W5Q`Щ*6XG|ѐ:&Ӌ٘țJUB/*iKUUrӬMs5:/e&By P^UMF'2s1BiZ& "o^i!!$ &`8o =גFRI#/'1V&`Q M;`@ A4%,spI,!3ШDؾ4/mi`w _aWX-T@)nvϼEyc`%g!TT%".^#o| e Ҽ+K2J$xX"8@P`%P@M҂BG <²6d )*p0b\5 RO'8\3[r 4I] FJ45(C3 1<4Ÿ$ HIzDn<!!T+*t΁DBRszb GJ#1޾Iƙ<2EH/HfRK yu]/P-`f 3ά iZn!`ҨUGJ2/huM"B8Ua26.|(X-$.D)҅h2͗TD]Xa/-ٲ !{Bw3/6F&.+zn` ƀD y^roPA@o. Z[PT6Mc`?{kez4LetM|;I05]{]x)HE";$gk~FG9nIPEե;"zA a)8d#h?bW q $^|:$8('HJLEˡUczBA59Q`G"\99fҭ<%y('E{wK} HAeNugJH,b&Ey*TץUA 5+B OM IÁ"  epT%nRd4BR~)>,iKIy\ ̟d0 3KMFf*P&`OĮHL<ֽ!sW'RSEfi~Ji86Q!KOF1۟"wj.9^@U ElS sͣZ=it?bG^I"en4ÿ'L S);'x /_D4'H .3h~rޒbYo"+D*]T+qTlz!0 Pky"} 8PC6 yCωK^/%U=`I>/5n7%Y }=uFFyB^ybGQ:@8AST۲笴nΦ,ȅ{z L"tCLPMn7Fڄ0""KXH衖R7TIz9nS-]63#CԎ;@ѻ, @zNHl<hH 3\ +_6m #FcI߯DH 5zv 7J=S `?X+ "3Z-k85Xy J_8;dC(jĊˈB_q|Q9c(&ˆV ! _MWLْ# Bɻ7( 6`D)CO&A,;7D %Bpx#ΙRF.$y&g&*r`/yq>@91/PN_ʼn44.?K s9F xpcK0Uy":T5|$N;Hs,јzkδAؠ] "-<͸k0` CL+^h%! $ke6P$3ML:| ȄdPȹ2QP^KOCͰpOhG88 2,ˠ+! Dh;<]NTEI:T@՞I!9$#\n 8Pgأ {FHҸ=G2[-{&j40@>,UFD|?!F P)YZ 9{8OQwH3BD P.l!$VU+ #%h"P(7!:8&'fp(2=hYVJېV*$ gUU'#$d~CGJDad]/@qCJJ=#;% te6.3FS|A07|1v2)>Ff/bEn1:vBb5ҽxee?W{&E!r*Ra.bPD \ B/I.2ǣiFzG$>ĸ{' ) $J$w!zz2ǁY0TKSs\ L "a'dC3A>+ ,@U HV&yxM|8@$@ҙ᠞'E{W՞W( V([u+ ݜ0Ev8U$ru_ $ Z (- D S WS*lU xz!^$ z) G!Aoe owޯLMt"j!l:Cx f/Xl-P 6=rG0`C#?  phe^D'  KX!oI2^=bkܱ;}"g)ӐHRtglöAeꅽ[> :,}iG{bP^^_eK(٬O(&c."︘?Vkgr$E hElS.Z %kcL +¼C_(nD ,"aTnL젊cHM[% ^YQ,w"߱b ۑ:9FZ"I@C_"0wFdh\:0zb*9?BV ^= l, }ASk[LZVJ. }&0l# @^ CH4!_~O`K#GʾKZDOĩ1V+i ɘh3LC$Ҝf`0٠ݛ/P9](\M$E̙D(+k_677Jz5V|DڄLiOm'iT+Պ`H MD lC/-eQ$*J(5m)00"hW)oK]}Vw ^D iՠnQ{/%l"zO NL48!0#4Y^%+"BX=tF0ҚFJgB5D: '4T\Yj*/)a$n AE42\YGy*"ᯱv˥@;݆$TH ko `7"=KnDIIM  ZNM\F(2᷐3 38A 挔LQ?1ޫ cKmz.0'"p(xofϻ賹3aX'{#eO֛h"DXbfeɢJ`5B3V]s Ƚ/rbm$"L8|Q#MK/hV104A?Yy>$2K1YTi=a|=v2W~0hi2,|[qc=FVBYI0s-C{Iȁ8bo\ ۩9'Ů2@kҾBK3ŽW]oO5)3UcRE|P!d!e5pye`> kN~pv/0i _BzpoĽ Xxсy*ezxBFt+oȢUMf#=DQ&`'h876 1## Iɀ2 1?(v#*Q fͮ,H&J"L$0%De0#@ Ruހp%fKԦ8nꢜ/Y +8q2bpNV@B%e +"!>>el!6$$s$0/.) j4,2WpP% a񈢍$ב%kr JJ´.~.IX@j Ě^ 8JX$ uANΩ,"J=nCňɚ@ $+Yrzl( p$&,B(jP D"F?G"m0d 8 6 |IM %K%f :֩ ZppDGBTr `~$)G"Z@- d:ҋ-c f ,1"~͐W05;)P2N2D 'rQv2`u;":F@i94{&`hu.M#$DeAT$E.q3C*&j ڥEFQSAD#h嚬^&o!# A<0!+TDER'bKj!ŞW%&ʆ8WmQ2QfHe&nΛ!̴in/@jlr.w̎ suEܠH}nVo\@%fgјj1T:– l{f'p8KX P(C q^(+VbFnVkdsZ}&p&cm0`)3|[ –Aw0Š#{90]b)|C Bn|8' " O&`"wab5 f`ƢT+7sa>O"C x7_@-T& ⾈#rIAl% v_4>։P֥Fs$Zh$uAUN "Nw!J8 iKrV^5fb0*x8zlr#i^=@kԓZ(GP╓fOUw^ Dqjj±GZ]o5%!>a,M٧h<@#wj%Z#5A#{6N D l8M(+[G-t;8`hdiqHhtr4fF*"h^2-d"4A2C+[#wb$Qc\c k}PQ=UH2m`Q3XG}[2'  "=Skbס&@XnJfsQ8r`z,ZA~&Q$yE&I0&`3~m . w%`da}`OB 3`쮾NR88&` .n|s:xɭ()TB/'0|oF$Љvhfy)SD..>[ CC8:ϰY` ew?R "d@~4b"I%IP|NC$/ɹ3gfs>k;f3Kze>_bx?zV/J|X?%U"2 }.?ec|( D p ذW& C9wf[&O1j/ !?`\da]4-D*J5D*جbxF/ҍKi.&6ĖT X2e&38{7]W8hۍ@\:dp{ : 7J~E5ĖxG@ %@"4`F! $ݢf+;i:X>VDdcmEɕMFiY͟tԊ!3qp>;NUSUS lT+_!Ŷ}F"yNŖo9ߜmQ% Kq]|62HCW!{3 Bo -TT~# "]dz g"U.2&e؃#u#rJ V } ҔF%U"x\#e'%޹b6BN@A"ކdsd)/t/0v\NEI9T o)P)RBP+*ȆV.IFJgxRX\1P^UZibzFzTOǡy+H1u9?FL eqN$ EeU ސT&CV%%r',DXA7PDHcI?gR=#c-hI!07'RW+PhT:% .!7!|MF)HV2i>S2h~O;+ahN$ߎCb~`J<[LB'uhh4&VW0ER3pFzȥbП2L ݛ !M6HүRAc/$#o3Zi?TGy@H$e76 "'߲KP^ ',4d r B@Jؚ@C ?0YBº2DCDsF\kF`,+˸FI#Ԅ#ZDhB{޷BTaųcF@ ps{.L,/R>Pq`_+qeOPQ ! J? 0kR ╻b-t5U KrMi575VԨSq]+_T.mJAE5^IC3 *N/4%j^ީX yn. 3ezqy_*Ȼ\Wd<@X=d8`x%~a?0ʒDFv7(YT0" m__{v~."b&5(2\ iNz!fVox'^9^.j&]8껗(_CwKg}ZKYD4< Bf 9>d[td`]_XѠAysZ=T뢆{38sq^ _MO)Z٫}š[N/OOpYD0PI2f h/R<&gQi  @l% m0d sG g AkM: c$:* A, <ƨȡ;*F[=sh+4RrPDUQPwJ\ I$[qN6#@{R"@V&7-%;HYӓb-*@!)g, %L ]+s<*Jh*!#7O8H8A(WA)̈-'G1JQRtfѪ~(KJv)$G^ H \'F1zqP8N9 h Xs7ʮ)h,Zsb҄!!$1EA+E'SJr 6Bb |]^?АD ARE+r9r;G{XLP^~1_4%n\~EgH}B# rt 10ƃ1xr[{j\3nW᪵#/a:$W_v+lo>yn@"3_xIʾ_i6cNI$sjP#$ _-e]*@'`ԕJAȏ*YV3{힘Ew8 tKI2̦,טP_%U߉"`XJ Q.4mC80 >ߪt[0JlPׂ"aPY1kɡû3|/V1MN|7ֹO3ڍk:6X- H u$ySHpTq]I ,"x&[' y-IӣV{)SԺ3y<"ԇ[^T~᧹nT*ӀzgvXOd|&om,}` >Q45#Qo$)D`rN*C/n!O(5@YSZWdhM)DF (bl&@!n(BAVY ɐG8N~$2pƾL`z !<^Fj\!Д*CZCȬ {A0BL%fve*bDaljIvXb`ȩ68{"bBL1yg:8G#69?FQ Dkv5wWlH:s‚ + "0jsbѠ^I|&GK(|is^1Vh"+ZtFE4~ @5]wQh臫a&|Nk=@ggzni}k8xJ\KrR9 *2"ꢝ1I9&IwwMT("[~t g.Hgh<0: p%i$ 1ޖIPB Qj$A{late:No[4A"b`ɞD`j"w8/\l;Dg (T/\"#J #@%`DS` ҤA_qڟ)YυKoBzW%tԒ0N6lRv4)\fF+/bF4cLt]@&Z&2aQ,Q45.,h{QO 4٢ s6߻-WmH8 Du@Fa|CkmʧpDZ%]N~B=eǽn cA_ZJ7uԖZׇ΅`fz)l޺E{eml@"\B1botaPٱt@B]†@&Bzo&k&{fw:uW'4 C)V |>HsiЙx5nk ]j[yCz 85\/@݄ XB&WY{c[dEIH4?K{7i%vLB *I@ ?b)AUt#&/^q@BS PAT. a` T^]{2n٬c=x]kR4D'(Gc63DBHVc:B̐HU/jX_3 mB4g+pD'2x~30،./:[ۄ0D#3K~G-ky0XlN3 ڲ;|2$*g ^UxП1~!N?eՅd"1!1LTD/|\_+9z$Fbaj̇Lfi) ĕQ#w֕v$* =ϠD9^zF^`r][tMøݺܢBx)'*Ia?B"Pdv:P*t{Ȗ 8W^oaJfMrW:Bõ}(ݝU9+Esq L@AWdAW*@da~lGvB J ^!4l5R$ (g ? O$_Ɲpt?Bš$A'үHlA7mV0^_[f4)t?1- B$EZJLcN*HC$AzGU`&лmTEо)ٙWm$2lzB#Z5Esdc셑;Vp$-%Љ%⁥JZ+- kKQuV-f\rk-d ZGOUK܋emѵ[T%w;yu ٛIo3ѻ[;tom?`YVx7`pXW a|-pXwa=q#Xb|MqF+Xb]q3X:+\iq;Xc}rCY"d|rFKY7&?>l)eWAWTc.l^bJ2^\΋6gn6,ߗ]yk:sSyC>,y4(AMmtMvSFbШI+._N?%t7 Q-Nu,xT}_5յYMns&6k f};l' &v37l ($ BaPd6B qV-Aqv=R9$C%JbyT] KRm%Q} g*$b{EQ-*KS Uno]L}-Y6T[WD]7Y05 _16,\k2cYK+hʲ6rQh3:,+j(:n0,./.+\" "0P"$ DBQJy%[2>#D"% Bg?7?ʳ$$`%'a~!|'AxD<;+!VBxB@VEа>- KrqzG[J   L'aB ,1/)1* "H@`UF1l+qh" 0.C4?"3"A*t!!H`bd(2 X"4CC""R!2T!HB ]AY:E1x_B"ƀPbU5v2d0VRaD#H<(" o /_&A`%b}]uY Q` FWL xg7Uyf^6!h"h3 ?B$nM,* (BF;E~Y! fƀcyZ^;}aybim1:8?, DCr5fI>!.yꌆ+HFx DuGjȈ#\P^= ROP!*Ey?xf˼O2,Ь^RIu?)G}^;ˊ"C)¨o H"}Mt}wIUࣁmNQd,8|y0[toSz8!!y'y 3  ADCEF+GI%AryT=) _2LSYs6Ad]C!p5,EStNURUUԞ[WaT/b)!IɔC'IAn3!F;h?qGx* ez;2ɺ#ĕ1$N<,hFx r`"i @?A=afrh~I"A6a#HS$Ɩ4#3SJа!t+ ⨾<0dUZⷭrclr$" 6ӂ!D¨:A<?αsRzڴQjX4YVU:&Q kQ n1oCfLҀ.abs&URF/͜pWH©[(Ev3zwRH:na~]Q>* \'rdZLɤd$}:Q_v(!H8^yچZs aF_pǠ~pR$"_(>gjzcYf۝A 'e^aD*whEim{ZM(xfEq4WWOcśwE&jئp"9=m}@BTZBTAKQqifbBG_z'ӦQWm<]XW LOaa}P|X1AA\m=iR1cwoi堣]`_VLP4/g9d k`lG%!UV5`'^I<& CbqXddrS~O-@r!,#'_QceEmpf.Y!we"l$'.S4 nwfex\>H#{^X F%zzڈYJ$d-ISd A*hEHѺggJ0O)-B`/ML@v?H j2/1S$P|CbaE4Nn PtLAFwI>&N򈵊0G­bE #tР}B7Ml IC/)a?Õ<3i3Vռ\Ry^* >DJzو L/7 %%ɚP- \ vf!jTz8y龧itI]ҝT ެVX ~ X!xJҥi3`T |'2~"> jd>eյ͛ͻx{'an7b̦]b14@$%^]Q?KN*ʛ< lD-4T*2G|n*wkƹiY4Mti?iO"5V§P llwk2lLH3:?p|OSSe@D TՁ=ݰhFGo*ژω@{EPx#XD$Pv]t]ኀ@8`9A>(:UyGfEΛ44'5l SCD@O83GFF?Ec| PЬZ薔>I$(Bs y L#Cxomah] H  h 2HDA5``Yq1}gȢ=+|-}M0Hנm JXj $=!Xs tT+k=ګ @㼓1D XDJi@2-E- L D '@T2 @tNP{Y j_+7, %8hz]PMw ,yOQϘ,|٢N=J˒ FY *C哈/n\8Ԡ l0mkLRj(UQ`GR'L40t+d ]4Y-iޡA$~&֜dW.` @֋u2Ip̼*-/ F> !nJ" q@I IDHm@u$ }-Ost.Vn R GCrM+P`&żsLQ?/qVq*H_7G0}%:^¨U~RJ;#P޾Ki[ fW"tRD1#~#%@-i|π*e8 !gx?: N2XP 5L4Cnlig٪vF@) pG`p]#pg FhNFC}ȡ#mBF 71覡"Z"6X i,yPyL2id+A`J -F $`HMJ|0>-D-.jA\Q*j) :\A$@6N0,1m&x+*HF@NbcJgI$ 43b:$B>"""8'H@R|g~DB"#4Fr+jF@:F: QDqJN0"ax*訶G!~5B.ⲅfU` *r<@VO(~gd*,X0z!lAa^5B$$=$lhBLtjU#\!>*"#C>f1) +&t+"g.Ю#g#h#t!~O(D&eRwm ؈,v(>4*ҷOS,L.hD5RX! Di@9''@'zDq3,hJ( &p*iR6R%9Ş"(cp6i)@*r8PA#67/l7/bExàFxmF؂E"nNFF6qG "Qg8h f*) 8`xdf"8gE.).G H~@)䡀?, #Qg/ Jp9RIAH mOr̨ ~qdvA-6KE/ȀC B :DE~ ⶔ ␅@u.Ȯ&Q[p 2rDfH,4xF45ICf F.4'**5]+f{-]g^DbrX"o#D'&%]W.*LA^Ȇ%ai6c=ztc).%S ̻'"wn%%J,bPe,vvjlŅ6,`o"US62@R+HճXI@5D;^>*(X7@d#4vkTc is.`4ZdpG  @qMSycZ?Jn-[:J)x"6Ѭ_XB)`DxJod V1MD5Tm!^5 -$&di ŌmuxBJ ܓIYZؗDih gr`SR^R J7OTv.@B-n'Vd7,6/ Q$6$Q4Q7A{B =L:zuJl}UKx[@}9|nRq^!^Bx+v1_j4uVic SycҰRT_*\9>4BY7+rpsmMY>S+Wm[t\7?P@9:0ȼ~u.#ғ ;$|"^IG-;(` ۂ/] I?RQf..6PDІEzGҁRЦz*!5^@ _,of@$&0CR.Țz˕H%hc&h?EUHwi߇'v$wiaujD#'6u7 M[;XfZ'YCY%i\{`x!@5NtbV`7喚w4_@`e{قc0-#w_>e}mz(5luv߷huD̹h1Kfx0n?JNCP_>\ {ɍ/nvxh_2ų+%:0?5O K. FO#1 K+x0I #K3^>-5 8 X2 Qs~qJ4i-r ;{g "MI~v_ _/0vfK2a,/hC(bh ^ce\obg*et2ȹi'˸=og CerPoINp} P>|o (8KJ72Q9%# xJG4ևp\0nd*-Hs7&] ,̘3&UQ A*Stԑ>4~Jjغt#_qBA0FCT%{$MZ~ FM#+%gDVrP%{Y[wOrnbzU, ºMAu5C{^fB^q ¸{` lʵAȩڍ!~$NwnQO A%)uhД)2cg%#G=N \,M+.K^6ylJJb$}SP^^qR\x%NѨO&XerҍR7xbT"~KBU'*QLUEFp_U7_:XB^ B5Ky0'擳MG\9EKx&o"ifɢ9<H #/*lX$o4=h͢4a3K/% @.MfOͦF$>Ι6Z+-l<~[YOΡ9+0تŸ ElJ S5'+8+?!z0)ћ '0`rـ+ 22x  x bb,%8ʗábf8x 6&3)s)9ոw@Ϩ ׻K$2<״*s,7(76K}S:YXDЦhl䀋sB_rC4Y1l / LHL1x)`ȔZēp0bG<`钀 p71\%Y1iRY dA(V 643Gl$ZH(,qJ8M4p䰄x,JQyWOI-%Ã+ vgg諥:DLPU/I|f8XlS ehyުWR|]vqR_*VQ]xaxH3gr6X-Th:5@KeId C_d5!VH0D$WQiYOz_IJ}2T^6["KJ-Ĉ&RɄ_zٴiL > j* (jL¶hz"ٶ, ^)Z {X!p"j &H<r[ !F|NCZAD]%,H(J*+< 5mlZd,⨛2 r@;{3 |ʁLkVȁ|QMM( ֡*mz6+ / (h0:1;,,L("Aqnasg)rADTMM t]yo#.CO? M6B{bH6S%[&@eᚢù".qT_O0~HKwMi,VWoˁoj+8W, YXb^Vz(+KKbF44ņx2"ᘗIx^'~j)됦ev$I? 2Jg~% jR!mjA+͉;ԏ{gԡ:lx h=C gu%_ HT0!p%uݼf^a>DؤDLoKY4A;RBh&-@:̐>[1+`B _ ,1R&p/'8 4 M.T پd"ZC<Ԧ!0J$4X~"&#)<'E%xdH/ɓfcK&`"Pq8pGH8 |a6M3Wp\QVd5ZT-0 7@DH.R$yR*r$PBzD,%GB~HR(n-1ўyK1"8e D,)V*Pf!(@B ߐFD@S Gv<Q;0ȃf (@$@z8O*u7虨}[ GThQ9 <Vd&) )@IVWP2%rcMҒhaD!(:d̙(jYfI$bj@7HcV*2@D3gp T} ۱f^AT.epHOy!K )]6/ ,-87Dbj`Q!I!N$8MS!Ȉ&~ WO Մ-3 #>L+V@`] '8?) Be*`K%4(kereW߰hN8 ̄@+$"iflnt Ā.g)f.HGc}6e<0C_5To/`ב6.QH[¼$ѽJ ‚$U ,+#9`D\;xY"P9g?E&+'C7HÜ\]P;LٳONĿϭ[`$9oijQmB؀Ay ?RڃO),4H^&"s_$9.Y06tThK14ΊK<k&C)uz$D*ЄywLl)@gKEPfýN) Fr\4; GXORHlXjv#2 D"( f.3^@".:o$bG.{'PL]4% v0p*5ibģ :(2[0GztdI2( g4tzLGNƌK "<+ЌeL0V"j)/,(ň`e U b!"C´\0 8|`lb^ (H X]M36C9-=q#m6 c"1@(NJБz7@mΌ ,q,,@dDrǭxqH`"Q&h#Z"(!>WLqRo@d>P)jP{#xDdG1hS2J%vzB[$bL11gHC` q*-,4 |H!2q&nZRc`dqs `αAV2fRht b`|H`Fv[[kV  *${ [V@2.)xfP̐u*p(["+H<-& *IO 'E6&d;DvCF*f`~` gj@s(d{Pұ-< w8,.@=-'Ohwpj45@$3 ^KpPH3/ &hnhA:d N&<\Ea:N5pA"tAZ8Q#^)(NGB4@2vC( #1nG\H=0#v`J.ֳNT8$+&z"d$CW6PTLT+>`b&pf1-4;$^$"‟(Bq`^UB,0&b %0:: SԒ7>?ΘTK#'VJE"±u e2J~PQ.t7@D<^@jJ@#D<1 IU8" $N2JDDUSSf 6͕`]&sR\$D0-VNDLBtꀒ5Վ%pkj5@P_S.S++(&S6F Q+fM[#]Q+,A^`+< !%$yp-%<, G,1UKоOPUТk'  ks{12g%,\pz2/4$64<0yP6*2 Eo-K2̉M7/j2@ /C0=hb\0UMC f7-h"-8sCJ+Fx,v~"+ROS&@ª3pH&t-ՉlT[X<w`=s$j\m##8? ww UDEq'LNJm!:-}XDEX"qB':/Z;"*\Ddǀ, hH@ՎRb5 uh2!S'EpdCSb>V _/,brd`F~6>JQ!e~lv=&; XlA0c/lfA"728UZo+-ź*b9źdB1v*vz'Fix/IJj^ά4+i 7}h=8J0{`+ ?1Y 땻jSyau)9d9V;hԁ`s  $ ±?!e 2mh 2Ɯ{&~ $uR@b8qT$1en>ףCwC5vgC% \oy|Z9ò: 8$^Dky,)Zچ"yOxQ1+{"3!4WX7)^oFm>cb:2; ), Dd=:2A0/S][dy (t,,- NUxФ5 J1:)b4TrDOBnFBA̵#qQq$AjUo5h%({҈X[X,ccwQ&6 MMЕY&eqk_P`F 1 b 򼷔O]Ix %*&׾,-CGSwogB'Ebh" ԰*8M:[,FEvI*HT>{ L^=N4΢f)zVd$&:. pm{#q:8)/<<9o+Cͨ`Qc|'<.Bᵑ/"6|Λ$%ץizGgR9d4s:58׳G%ԊmC1~cg*d]UdI$<.$YבnH~gp$IŚ@4.V>qޑ 0`vU5X tX= })9y+P1+YR+-\)KkHG30B*!>tx+aJ~%zd*%!u+ԮU$j R{,:` (l3~ř 7LQ0lkɐ2Mw3? ϏWM_-.as1N0((~< L33 !qt)I%}gFWjloȈ"=$/কd˫L̴As6N _08H ;`^H˝ lKa1̓fDa \11 >"*)ƮR{ PEG!-`= Ё F <`l+a3E>C(nP(<~2@Oh(zE8j{HTCu> 6=ck.e?t9"|jT5`a6f̑/*A^orɅئY&+17 DМx|93Jى ,Q=fDʫ-N&z?Ʊ"H딊8AQJ/$0Y00q{EŒ٤"T,SNd AQ\݀+n녖`Lػ2WKd8:soeP@phT$ECf!T.(A>iJ5Z<!==l^=?"KI-vSiϝ6cmP ST WVUI{&"ZNta(kz̄۫N?vÁ $k'(͝iwNjqڥP/1Cˉ@v/{PB3?I]E*Kd@&Gq9']ep NRd0K`ӥJu1u8bp;X G衸2<`щ7P.$`Y PzU½HEmaj]1$8,9)ق85:pWcyƢS ؊ɴ$Z$2i/͐T«|5u@w f[~}grB)bfB!z626])Kz7E5"lTTLxP&j(vHN2QDO{F9SƜ"3aD#PO^"@JvTw L/tD4m6"3 a-CۅS5-5G[&};84kY"msE(yn*mI&GgMB;%tv8x @>}9a Ldr`U͘M,jh+㪁 FEn#a@܊RB' =bKɃcB/aXK@򮃿4" :jNμMϴ%XubM$"@\kB ${Ҳ<nVxT ~F>i )A&U>iG )8ZݭIs 0;Q"8$ ,%LYBp ق(A{=/# Y@0k6[َ ' >!Z "3j ?Ї>p* @q.3[""(=@11Ч R lӧBԿ޹?`ɟ[C0Ρ6x -ƍxOP" :ёK0 B*ث댈Y  k(D;^#$Oو%$)a@ۅ"`&7!RL2(3'r\6gE %HSd(QU BE51㏢Υ[-)$і~Ǔ!P$Rf>W`1S@Q1h bD".ys6ADRBÄycHTy(-5` H:B7HH3hEqSZc>h @b@RŻʤY*b? "3baKJ*{C-LKX@60K-)CʎљC8H)qҤ* 4c +c@E\C+"L,yRDJ|@Jc@3Q~WYIgz_ D#1_*Ȥ!/M򹨎p)o!O#(shę{v @jnυB 44ӵ@Dd9%,3$l'dЃ d9m" "Ǫ7!ژ3*g;)Dȑ.Gq"C7µn_Sl1t &,JV*_騈J6[U@R^Y~Lf~.*؞tUFA.d9~c( *Ng݋^L$W*"[&Ү Gp*!nfkЊ"}ԐZH/޷S(y^+eK|ElBJΤ@k7E#@{umϼ })\0NWR#L2jj. snۗSxCl8F?b m&̓GsS1^4vwh+Mᓾ.Dy`p9C4 ulxk@+*, H?#Xcs) [HXLڕ/j %l}?"&-,EJ8!A;vNKAH,]:/k9?ҕIj*5r0EY7Hi@ ", ~[QGWFP@l$_yyt0Fez,'6 e MD)n$1Sif-&iY;%(2d+%=<yN?i:Ql*!xbr ِ͒j{'= "@ {/|0ň_4n]iZ/FB3qw.L [0 di֕~QcmsBB`unWA䅇G\uN teMCr({9QdM 劷$ǒ!72S[F B0D@Պ+SD#EX;?;$(X@`vSjɏ+@ON$w07joBWC0]D/XHPif3L>L,HD !=^p%[ğR@Gk P#%GdԲOl` je͓vUwGqWUH,@M);䘊l#sOEnʮ00L0`_ف?Ro0|d,?S_VG7q\ K a1t:T-̵+R+3s'|r1H Ŗ/8} F  ^Q|o/B|t#.plR& `E $܅OۨUgB*/S ߅^ʨ!Ҝ_!M5Ek(6ȂcBП1.ot㰆NUΤ)߭`D{A#i\l9@&ģtb*+4^4JkFWJ@7N&7A[i |waƊ}8{ zT/(< -1FdRVRFKOel<~.NM+ (ljI/)A&,Ubki2Dm3 dF_4pL`#lZ`u}i_;-'lcF ,tv]~#K+2 J-vR `d&u06nrc'$-8hH%VsxO"*){'TG4}(.:"hU‡?ЌYH "Z>Ö0ZNp*ü"++#@JjbNibZ:Ets%rE/"UfҔ(2Ƥ`~m` 5"S`< SdN פZ죎`}(ij!vI* DC:0Aȷ-3t %"e)Q;"b)5.!0)D '@M." 'FHB!Tԅt4BpB[71$SR'E&Z"8@N $b3P3M CoDfIZ"!AQCI%b@ ,"D+/tl4-D A^E2ϋL|z#py;H NB*2Q<@҇D֢}dƠs\ҏA:aU=2&)H}r6P`(ƈ9@N"n g?aȰq705h7n$,hu8,$fО'&9&fU;BA2p|"ȶGE+ RnS[ ߂#bp^WQ&L)LT" Gd ЭK0Lclg! o'$:eDvZ $%*Z|4zG!QL-UO^CNQakgǓ f޶%2` T+?Q+_튆Mt.,( &QBrS Ԇ'ާwO7`)&j0B4Ur>0֍Hd Ceu'Ra D28c IBb <ԎmH,[:S)8rqs—դhRB$83,d'4EJB k`$^裗(nPR E,&1y*`" ,FFʏIG +k=tO짅p DE7TS|*phsj*M~2pBr^-@/XPS|4x( *d AHa>" +TF>As:4i+Ԡ߂ .$!?qAޡ@@<'t.)vx)b9`phA~#VVUWUJ,5^FxTcG%2ý& =񣕇Iyȁn2븳*jF7tɽWw2a(vt&Ћ EZ [pbpZ!j8]Bcfx@%+kX.8_} *9fn=E-i Ulh,:aVfE`Ct9c$hiInʉ JZ@ Eqvh:&9jy@S7% ?`hI,T_g\Y.y Ɣ0*De*f GF, u[ =( η3';FbVjBlM>r)NNz((am/ e r[q1$4L`0%ErU> EXuRmYГ2V>y~rxFR8~9",7J\3UZ[;AyPZA?ÿ2Fm.@&`BAx,E1A<<2,؉7I9*:pcuj?5UTߛ'|2DB 27owKA~j"$DP3˘(` "&=BN j,)`":*}bY6HPZQSV(\` n$ "9ʥk G-G@1Ζ U@9T+6˫a/ǧ[ [f[IyiKv.>_w~" rP&6vIF ).cfMmLᥴ݋×\,(ֶa^a#T:->4jwr| 2bo,F&#Ɖ,/' MU6$~jK>yYG>Jq@'[*}| xn7ٌ=nC>_ze>xGsyV/bO"!G'Q$JR1R_\u]vU{V}fDo;R K%ɰ~P^[ 9|vGxC$ ? @JH?2]C bbCq .l%"Gܑ$Zz.#EI^JȾi6/ȡx#!sb jrύsd_5Pn:&D2P#V5R ڢ;#0=J0X-1o1m Q-5Vk.AN CKFL3GU`+jVyIJ g%^TDy1G `cX&MA*oB# aޱ˜JƔbF"a cM.9M!'i͵~Z3+(cFIpp z!x_ @:L#z5dPt~5BH (#KڹXZ/{Rf}!Cjmm/0n I0$״>X΢U|$Q ?PX#~<5Q~xS΁aĚCHά Lb4P0jHo|5X|MD]p$A-4De,`ͺ "MoI%aHX0̓r%$`!y<Hwr=G〰:/$]҆ @<ܝO)ʹ%20Eb8ΥH9 PEy6:SJAWO_bc//0vՏ3Dxf s))*d"2dJo-$"C;d`*\'r}' d')dm/` zKB,h`\fpZv BHYP$ShU)F**D4s.G bGQ\_rRS % 9`̔4CfR|-w:bfZ9F*WNDD}Q~+,-=Ց˄`}4C@/a#Ơk8 +LK)€R쌀*B$@3dMܘH`tD,RJ Y&2T%Xf 2p2D̍p ;ZV9$Ō˃ qqlu`eBRAn Z'P8LPuC Tp*l˹W%0Xšlj4A3%s q7y${5׹ѳ}XQc@^ðhvr-` pI&{AF[p [ˆ]]wupqUdTfmuIW>O&zi!?0[x6AO9p&O3+@ܔD}YʰicG&uU Eʑ&qBjt \C{a @X573f#U _ McmA4e8k$؛ Nظ0F.iRƤzL|\;~' <`SoA $^A 2:# I/z8ڜ#s>{a境0Ba\x3a*6 E9/lSCX^H7^.J1jn(; mz#z:*8:@;bEA2q"5NL3<_% zB^6DUH"<} 0n84*4_:Q eF :fzd8#G+$$*S/7!5E>0mQU ?;/f"k1l?{˟?XD'T@OɂɁF#CM{>l8*=D*TXYJ레?rV?iZ8@]Y_rEKAAOqϯy*V.yc@lFh ˙7bKP=)?G"<[ 9"²W=#A{Hi$Lо18PW= +{*Uٿɉ1Ԃ(<h"IzʅXUȠ.qGЭNIp'/8pK$p LUpThUlFJ&Ąp }4髫0_VV@E& z"CTHV hC*<L,P`84O8M]WN@;3UMQ2DHT]/X_WFA/-84, #K\G),*..CNDc95̼ -.bu=(.(%# Ѽ{4-($(.54ԬM9[%3+dlh" T%CTD-;4J(5ԡr,*e7:& \Fq$Ҁ E(G yU/h湬N]iyְO9lV̝K I{WTs#pn VMxj-lSin=W WWiu H Wh}WyWp;0׽:X*Y-Y=YMY]YmY}YYYYY͜YݝYYZ ZZ-Z=ZMZ]ZmZ}ZZZZZͬZݭZZ[ [[-[=Sd[r\Xe Učżչ[\[$ BaPd6B qV-Aqv=R9$C%JbyT] KRm%Q} g*$b{EQ-*KS Uno]L}-Y6T[WD]7Y05 _16,\k2cYK+hʲ6rQh3:,+j(:n0,./.+^zƑ-o2γ,+R֭+rABzz*Oy9~.߫ޖH F`&Nr!r"迊L2k:H@08F " A@$QR 1G1#*Fb" 'd't(|Kc"r?4S\7 Q,L,1N\Ol3RF"ag%T'tB@" +<-M1 >KMAt*MS@%*!x#WRT,jsP1S2X Pa4cT*("]6 /](^&_!VB Md6ʁ^<Z[oo2܄#(Te$=#8HLZߋ.-A Z\xչ$WD b=1#0UfDYxd2q_p%Ebh^5E1Ex( xH>!CR0 )T2t7*Si }FLUdUJfZH+ ~1D'ڭBO[dRfӗ 0 tB<+UT 'Ea7rt~["sny2=Ő ?.ـvN 3$ I `0"k}b: 45ÃBjjٛ:Zg$A-E'O5it0D8Z( bw^ DN ^[M+C(g\|+p We_GI:W4!plr- ݽIG($*%G',x4rKB+' ]"oh?V>W|@ *X!!-h~sEP_v,JR:e OS>  mrG^2x(% esI%(C7rc|'>Tlns@ɰqܦfU?4"R*R$ Syv?S|J xG{u_$M AH^"9t"ӹ}?+۵ ;fc%OSz=3I!Pb:0*7\ :A q<7fܶqH?tѹ(/͔|ʯCTO?\@R3-02Ph9JrRUaXʕiQk.@+(sUa b0$53b ,͈Ao8^U5BzAs#tp'Il%0/l-%r+x~ X- Zv:JT"B ߮.H9]2OuA@@w684؇A*ކM4tHbf Z`7bx7Ka}Uڮrņ5>Lz r; 9RW"/2Ï3:"fZ=Har> >ʑRA!&ŚE hh1墴I[$1B:/#D07Gxe3A ΄1 z&e8c3 obWS`bte,D R$y{=@KB-Em͢x߄@Y hъGGyc>I)17c&H HӤPMEP$&O6 Яs >i3uMUGL`z1£Sqd#U*YF#";#v#GdjsI,HBcx}'kTl]/?|ܥg/E,# z28bKPA7)꩔lOlLRdP3pP8J|aN'yT@9u yO)>4'(O"0f Ի~)P/%{GH4X3 `2 B#S<x3)\#dyRgKK$P)~5s9 H4"z;1#@q6!P'ݘ. H C0l "FA{T.P jcHE (EK\یřS"܌@; A.暶vK8Dxw. Q4>qѼHL-x'wYȾH3  v!)F @*6 Z)m}x$A/Útp6oxQB%A[PNr!$oafnhaMNE@*4ȽTF OM .f[ENps\`he ]Q7M$ Z5O,b5qb!SҘd J؍1Ѹ0 w҅sGxXt7,:6GkB"o^P+ChDHԔJ #Ϩ#B*tg̎e;R :/|á¤؉8*3Bd9>Sd,@ -cڤ0{#-!" @|&Ԅ3 "0OĒ!1 !F'Jg{DP~2Txf2"EcB \a>FD ,Ș0Ӎ 5Y"RU SlB>L^9I") f^BFS*09_ 0!ޛ:6:Y2,B@QICN`Ӏ''e58ce ѥ&BS J;9;/1)!,9*<5n\tO!S9>LJ  L#4B205t*1OR3Tv.Â^8qR<#RV6,m.h fFȈL85FBHI7,r3E#*!3r0C#K. - 8r0a^#ž#~(.#FmP*:ZCZ;P40%l J*at. K+2؉#^B[L!C` *L!mRT چtJ iCw'6 TI qQC6 %# V&( ~*4dD ;b`YoBj)Z=mj&>iľVbmtB"PcL֑g} B.u$*n`RV,Ga*` -&Fp xr R!2 '{bOBnTEBJShoH. #FRO7IlEngdPmz`et ZN.Dh #BAWjcBj ȅұM+)}RD|Oq~#~"PYi5Lx(DD_BRq|D/<ݮk=T^/ۭiP$Qh1#:W󙘈mE喁$B6h?*> .~ 5a-aƀB!1/M]E路mIK18J)FMͬ[}yk(H\f7hXClVx~m71x .I= m+_7H7/h70p4  ?BBN@#*?HB>D\,# /q(k@.;c|-rZn];FGšL(dy_fz|NL5^6Ax"?&z2^D0GJ$jd LD Nit_J!b7>4#RѺd!VӶ<+(I#X?HcdӁvgT vF2h*թ~MG^ywکMVWH뜎ceнÇX??[.[M=D`#Bat!m'"{N6cdN&X߱F.3:2Gi6X@$ pEd>ٳ:˺I;{@b ю.#3|3YRO6j'CZ to7x"JOj_E&q:7`@T)X$½$ T7{HN%2#۝w@0AN@"^iwlQ ^n4|Ts \K^ rT:ڞ$'u+a>) h G$h#0{)< h^5yg\U䌻lI3@xWLcq_9 eJt7!<XCywG\72ukD,(_V ȨD^VL K 1 cQnm *SQ_.F[Ҙ.,> A$#G9i" kT88__ l,rTe0IӦEyqPJȈv 4JiyԪ@6Jj *M5$/$MZ)MpB*D }EPB"DfQ?X@A?FV[$d*=FUZ5K/~+IyJg~.U=x/Y .^{+ 8OpDH D)k@1b7`p c Q>Qym-0 B6bg\:I TrԎƖFNi`OgOT^B W*$h 7ֻC diH0ub%%?u>p5| ӂc5W+7H.$O;Oiջ^-Բ]ˠ?nLnRe.tBA0-gdOHIh)TWRBPW'XrddÌS_sxOsD ^%&65P7y(>^H>-<.djy4 $bG/#$Dt9i GI`͍l;v!)`TMm*E2>Q@/'< ` .mubHKAm\Ⲯ|TDR=7z d`ᒵtwH~#nl@g,s U Dt>] C|51d.ZYGfAWh} @Xq}vM%ĝddDϋaꄴgs)؄ hx.~[O0 @I+e"v&ƏĚ:Uyh"#"SbRAUڈ58h/@NR]I,!xuCin0 `3N_Sm9JZILm!T.r&RX4|Cø#u{a(.:Ի 0@ˆ{ 8x+)RNH1 Jϟ1< #38)w 3y9yyjK8ȅx )  x,遐;73K3K@As21hbryX$I+5q3h7 :P{K<|F@Kq+ {N@[ S7h[y[(0ДA8'; Q6`@CȀC#lsk7 hΊJ  @w@ 2iif[y8ŪBE8{Q&a%c}~NZ~y=, p,D8kp9O(z 7:l*l %RgIG"phǤ!® H(Q枡FP'Y{&zx h \ .3' T<0tpK郸>xix,f1P, !P"NN "Cdȉxќz%A/0j,8@P?OjeS!҄ @F"ALjERzS <E=$0Ρc!3{ |O=?Q3 5CN ȧ S(&:%.<<S@? βl0;FATQ0 :0GhI5*)DȣkgѠ@gM R"Ȑ$4H&#NōlDuU3`2H4UcZ? 5:;<4bI0'3/%EdŪx`DW"T` -(RԼL$ 3S=_':>*T/~I1ւ3A$g@1\>LOIIVL'3%T'2}hd?LA~$> ZrY84pw=&[<_:ޗ pf2V/\,>Ot" ؜f:ԗkڿ;Ƹt.Lv?Сi} D?K >J+S*m/ { Bt6#h57L hSP*H-2\q?3@@8BB {>CH%P0BK?$1\X@f۱l$8Ҵ1I_!Dr)DI>3{Ĺ6 T+$:cVJ DJĊ*:6oeH<+ouCq0YNh-5ش]ϨĩREzI Tԍ~ NݩЪ, /f4і҄yf':Ɩx7ybw$EYZfី9lx_NaNF)n>l>(Kފ3#{oڢdAb"T" 7؊yzHTk tҘI$x`x7$m=fT,rH+B2v,qHU|_؆H"0 ̔'AP*Fl`Hc3\Ң$ "CR 0 r1Dlv*KreĒ@Պkfpl'W*\GsehD e嵻d`NbYm !>Z (iJ޼H%,o [Xa6Xa HOY-r˘n1h % 7\6,q%G]e)^?y2W'~.Z ֽ`=ߞ'V~2@ 2r05䘓;WFJ1ah[+h+a~u KL KSb]DQV +7GUR,#$ֺ"ETR9;d-iFR\1b`Y `/zX"P j~>1j^N_a<?E[EW. B~ nS{`.Ұg޾J.H nWLvZ!(„"k@_BJh*$br'~D'`FZmJGH(+ o-Dn(J"r  feh !TXc(B$`jŒb/l0HfLδ'`jZ:/.D~2 ^FQ'Nw"!),~h.~l"bH9knv^5EMbj]@FZH6goG$gPympl`Jpp&@j Nflo*Dbj1O = *D 㖸oc.%춱A/ 3Ȑ; ;;%L2^#æ<9bNDa24ʢy&"vQR^xLdJ|'vnC)\2vN!]Zu)&kbRڔ3Y( \ӏ-8J. L$J5cGf M4MI^N@$q A$ ~!%FudTa o`.O0~/: ;v- }4o0nf4b^(Su$LSJOsf'2H ֌Zdt[EQr=2H?lF*4.ng8T-HjS) @@ Iw'/!~YjJEhydMqyBmSsek~-f)de/+(I6c&(Kv2f^*W擋NDαGIC5O["&(,&u1{dCW,2/C/WSbta&ѧGT6 tƭiUd<~ؔ~n}r2 Kʮ),h59\{g_JX 2GfxGWAJPcOY2kT1Umo5`]62K9zwle툫hCf5}νZlY+V%*-7㖖kG85Spj`)ʓ_d. "b~UooUJ\•!Xt2`LspMV2B˭j͇C$@~XC1 HȂyU$=\@Юqt<3q|d?E1\T*6d *t-xvE`!uǤ@WX rU@@ۓ =˰j89b֫kCNvyaT@BBc**F "$afW9{8(a!=çHA>jFb*ChXĝP"*ElQY˰/toX[:#$"xT\B@Ho{a"IJsG-J L[B:Lx&Y|]2 ,cVƌd:k~UV({3{xɪx+N9\b 0a}\k{4% }Hs..OZu)H.yi8b%xE5An .tRyBA;$ʳ]DAfI9UI.3)`#D0[]"ZB,9.C-,& ا!rFJOPDڛ7` HÝ-C0*Ri,Wi BVɾ$ ݟL縅+/P4Qm<π5SoS%Dy3ہFŨ_%el]$+{!Xfqz}51\'@Gi /קK{ėùg~1xhӈ=s"2=mַ{">)KT˼~$z~4,nۂ/c:͹eI`~9]2" ݢRWS%؀ U1E1!41LzYDđw-gz8^{GCnA5.@Fy@{Ξ+PHQH2@B(}^F>}~koEKn\2+>:'"C6CE\= SY5961`eL2pƵ|C??]Zyhlp!5IS2W$8kQ:.Bj?qk2vWqu"ҝJ&<`KYi6;E*QT G/um !^!(C DN)E>5!LBf7B~C 6e Baxy=' H_IyI|h?LE)FRLTn)@D ܈MR!w?tG& B}G,*}^3Bz|2!јoSజ434fIU*k=kue?lRy (8 ~t]eٍ`MmS6'd:n\t"Ntzz[=VIMܬM8(.K֍!j]iGPܯoO~9M$dꛎnűcW\6‘{Z 8 /IjF$ 7J( x; G1@6$-?̬Cȅ "N@>nD'(5-ͺ7Ͱ:8B; s2#.P#pˎ0ߦJ Q *R" x5%Hh$U5T@.(2B z4*Ky -O 3a(!F*RVw]'^1V"aD֛v~]L;#/Zԁ( FY-sFN$xecx:9_`90)Avjh0M`/ ;AeI>D3 /.)w!EΟ"2ksz[ KlSy~ 6)\6c l=)s$T)Ѭ5_v9%dCB%R2x H>l P]'/w&*^'}+((,mܷ˽Fn9aDQ=q9wPMUzH N$s3lA_Bؚkǐߠb*\v|QA_vXHĩZl XǐDBQm!BV,LAh+mb-Qxwjτo^}PY>bhWT$kI ;pVgٸV ³dOE pVn \aIAeT3h`s)]6d[==R p[3 5\Tgl"{T3DBX)D!$Źf!I- f4J׋|%LpP3^'"|E 2F+qjB2!FL遳~' b i14*}J\2yΫ0 -gDH \ E'Uua4(KyBN҂n6ωEmµ& f ۛd}HePJI>d7J ?\~*Ek5.Ü$I.b@ uCZ{lYુp*#R #}TU OR[<) C&q`"Bԋ;F!Bk-rod^ _sHF|Y:R!JgCOv4fJeq.rl F$=7*ǏaGwfV eUO2'm˫2]42LFfwf0kR{jBws!or:XK+,v4JkY!&@Kb魑꨹HY pj`~ڣ+ "tg,,E$YeOճK0ln؜4ּ'\x'<L7(Op>HL8,9h@v.D&t8D#   @l ɇ p{9;E Q4x7jFVŔÔ 2]y !K0+ӊ;m*(9 -@ x'\c# A-!I "QԮ K`i!y):<8v 2SiF֫ʄW:+l{- ʘ (&̮ q Q9Ti0%|ʸ px˼j3z|̀&P0Iȕ/cD&EÈT1\i1r/ D הhЧOl.3gKѿH `H#\ ӸB'p+HM腺l?1 qFMlYdЀ$3#{5oá6z~_!w?Š)x?jMl$/6ܦV>j_]lρ7֬)u[,'f,\:ngiT%7[.'oqm?HL(J4_*}K*c1{y*4BZND_1 hFI  &Ak܂Aʪx?©*P3f>$R OP\A 4ސ0 |NMٲLKDd]'-Qh1-G${N \Ʀ+6\QI7hAS$7-ǃ0,MRTVEp N3-*'n:>S L0 $Dq(:QԂۈbD*% BP`9TuccY4]v_jy~]:> # ~%W0fI>d3nLKjNe:GAS"ձI}OMz^d ֢iɾ#H7B¤+mݡ>^B~ڈb( O1}vlعyY'aGh0ޥ8)e%{Q?Zl/HXXV&k(Џ hny5Ж̹j !5T --*Y #>m%QT[xzxۊh; ??7yZMvuÌxCW\qOOMޗ3G'kIJbP" @\"/?1~(w) '(C $pTO>CW*nJ1Y_,[jt r,Zl}-J ƨ]*JF@yXI6A"5sCp8Mg–Lֆb.gF bR32^G!|F p=rŊP"l+A}`"E;Qk{ P!7|E1`lLyiI ǨWnH``?*ꘒZidct2kbZEU{vRzzP @E j^*f/!U#w͓aQqȰ3uL$ik+wkb<̅PFr/R^4^H*6&l8 y JL$29#Fc&65j!E\B %:fH3=_&l֡etzE˛m4`D>}4!gKю< uWOqY snz$N1v'#@0ڡ#|k 0yE nL3 ! batbsZE^[0R\:O“=zD&. A,Z:& D8%OG(K$+Hb錰bo(b$0o7Ha/|ļmQӠ]qe+.2}K}%"b4LM f/ۓF`(y2`ޛC]JO+f4 /%d[#GM>O#¿ sj&nMp9(m=@b?Ӻ_$!EeDN"uG<T5LLD+(ƤȯI(բʵ߷B`JQwt^u];V"CޠcOTOVXIDߊzA'|;*ee+rR]H:AN )b#j饠r 2#̿gi^\v]d&"nLi,!  nxGLֆ&vc$c Z /:kT %ƨʤNJ/' >_f$p0d/L#f(B##z\Ð10 Ĥ !:>d)eƁq1X &f 7b3&lq$~lLy 瞼Ps-v$_"vxk|؎4Jfx&  P ]mA#%` #eю$ u o ~w1Uhp`F_C@dC4E"NS4#Ĕ6*6Ə ~9p؟œhFO@T R0%O"R@hN#B,[.d/$N$1 X^@" @#,["$"#9$n1C`H&P @Z0'V_$bhFH#B5Ug5!B:c30!Ş텦DH&)fDj`$( `-j;*OEO 3D0PE@@0;C)tUBDԁ&`$D[:F 4ZBm Fc葨oBX'&zJ*4<$&K@b`t4 8TА BBe$H#PTQT2+r(@ Tem+Zem4`0tS\+(1jblZFbA{ e &_([2`ThW 0k] =`$S2/ ƅWhZ0p$1F]?jf|B1Sbd1Xk/vlPx\M'T]lS'/5c#$x_Z rq@Bl !*Z#E68 5dz qMl2Y" Y+T A ǜ1vݠUNB phKrB[ rL}ORIGOq@l&|N:mn `!Sj- ׀BLbX@8< 4֧j&xILBx  $8$rmd%Hclug%TdY U/ 9NҀQ XER#RC* `"$h69,/T$ST,.H'(,chMRS^>);cna73լPD>)U ``n0w 9#*.?a~NuwЌYGXӗL 4h(9"03Θ! yN3PHQ2'` !nz׭w҅EI:c1 n]"[9"$GX8#?Z:TND8MXDPwlGOx^CdJͰFd]z}3^O.߈IDpDor&C+2&nC*`H#JDgg'QBX@tBl<:%>Tt`9^<4O֜!>KLLY&􄧥n@%5 Aot"#G4%}(T\Q(  vP$bQ{ #~[P G)j4%a|3У91V ǔ\\ k͌vT:cu> G@(M[ }!e`l,vl0u̻,Ʃug n8D/T\#tµEIdn D(Z93FiG"F 9r@^D%vL 1yB@/ِk}oLjs7'v@ Uqa#/ QۊXRMmfQ!\yG"YlԌ́^'}t~q\JlEQx _t7lnrX|,`8#ƒ8Ch۱#rg'iHۨE09`#M1n:ØsB!0IdC) hQj21z`; ,CXWKz7UR&).*9aw.oB:S4ʸǠ0h| l9:B8"#GwGC 3m._Z&)Ca$¤tGOjC[B-x *B8ɲZ_ü A̓., ˬD^8L(5˃D̈́Eg09e/`D]4UjK1~I2άĴBs 4$EZHc " x}7 h,S:GKD(BQK'Y>]ﱂܕ㋥ }gb b$&V)#/QQEڿ޲+d`s7:hce8#]Nek Pؾl̛U[P*F2xha7bx$qYSsWΦ#: \bT 15@UHp@fϠߣ3Yn>IND m' 1⃆zm {\SH9v0~r]%2Y^jk(sK3Y T=AA>GlQ֨99`[êçu#_0v.MBin Z[U""qF}iq B4*6>;E;gpIϲc5gtD:eͅaQ F/PaxH?á|"En9!*E'sa>o1GB~3pFp} .jj?SUT]L5o,i4^/K}2DDŽ|o2Ӭ 3' ByU/"1@)ZEB*^Suo]f]kMuD(`f:y rz02i,~#ĪUa3NA`a;ZJt9[뵍s<+11I =@~ !xh>(ε:\yVWl ݽ)3KèL/^Em!w2z`or.d:? Qx BH3 p<%3FC{=B#B 0!h L.Ы*k<#7˻8#7 1=B| RjH>R刂r|tO\M󰾝1U |h$BPT,0HTj /!4|HMޔ1 Tt ?-eU "օ!lR'n6{b¿4+cݖF#T@{X4xޕ/N(q%~o~v4y"/f,#ٻZn-: ~~G ' ~'B|H97%QZeZע%D;pڃxujrñ#$6; _{v|fA^TԳ7kzBXs |\2$?ɦmm?(&Utq&*]j3"Ηmm޷=ϯcN  `A9hc0͸ΆӶqޘ3n$ٸ/aX^@z%Aac94ӟ;|1 "ZDF0d V0HU P'"V';|;Wp!c ,QYMCrF[ mH2l&DywƽwD"Z?B*)yń>B\jh>K ?0B}]̉h!Q਽PID?vpƚR^ADSaO|Q^UL"btB^oK%ݳ^{q<`~߂ 8"PR,:3lOR3A2IQ'սOY&T$P"- "7$i` 5fx]8,֢pS~zfgӆza3TND c\3˚/ 5AЍYtШ xWd ^jҙ4C^bF* YT0x:EcQ8B-@%CbAA)<2|AgfL"N c4QV 2/yǝp|DÄ # cs6|T "a).JQ~Tp@_IBnehZڠetBoU@D[-2 'DŽ{r.XLђTk/"$ )Y##غԉ4&q>'ޑXZbW^"vb|x3=։01=XQ#.zy1>[΂X<۳gKPxK]dloEtM mhitMޫʟs T&)DG^W[ \"-K[OзvphLo\\ #0g8֙H듨Wg u[g Ó$/z7>#,_;Q~:, W7 p%DR5Pt܎f3+B ˥-zN֦FMJ#I8;Ԋl}1,&İ9ok!kU $G|{I)<.!W+vcg8Kx6UI feNX*l4dq#Z}6Xybj6hDcFPIPMVc6Oj͚wKT4`v3_y%$w\q#1:!a f(K+ӣ/ƚM \clŞ51ŪGi=_Lu A#9$Ƿ_ ~SX_q"v<#sgy 3aH9YʋnHԙ #'Kk14Eԅ$&Pߠ)|Z$*K)Va\ 7򳖥i+2pw FĂx )]5y@ Xy+< jy/xH:( ʕ1% pj8tySL*KS=7AA/ 1S;Zؐ03{46c>'Y3#R #. >؍D,o:aٹI@N f&B, S<xE)׌Ḷy% 1Ś tO##I;`Fg#OLliD$( ĉr)E"q0M3'Y9"FxPU P98+sCEÁ;|/1,t!868AalZ=4u gxŐ[%9sk&hfI6';&""Wy&bR>LGXKHyǒ` ۴,exKB̄-b G7/ˎ!)b#%d8$IE0-~4{h I*Pgs2j297-\8^+Ik-DU #,ɵx\齸"0?T̤O3L(ϳ׍Z, ۉSYJ`3`]EF0Ir)ж'pAʁĿ٢>(?H A05MU,)zRODDtDaŰ`3hُ Q;C>DatT*H#a\LFi@X=,HL9{-0`J$JU1`3d,CCr ͵.RJ QڻFx #bH #sRlNR|MX;ǫ `SͪcTț$Nҹ "- 3/db_ 25DЫpLX=3.3Ôa軂 ,\3E (8۶r$xp.JY!/*o_ J=8+J k ?,c S9-@-╎  56/"E/' # T5҃B^8I"t/@:$MX݌C%Ċ'9bd aN ;qoL$ÙadF.N !"c+H\.veDʈ;)y˛= 4աgmfjް4`TQz]|!<ك=^l*Uafe97͌2ً5bv ^2z"";{ 1fu!;F[(P~z:UnO鸳f3PNۢ=a6N9~ZgfN,YaƂ*hUǮk]ӚNkhЫ85cQ<3lqHǂT.^)-bI in U8&3$U }c1ZX05=p<*h4f獑P+ uN`p3P6f 4n!HMP+2 m!NMpVK0HE/$iE`s0؆H"J©t^"dZ" <8df5RQV.MRQPW݊"k]+c}Gΐ§. Bi tl = ب-\&" M{L[ް)da0dF+ь`+j=G($8lu= Hq{RR4~(D)rl +Ĩǒko쾰+':4Sj )MIā2 : ,>Rm[_K~MPx0,@Qf+ 2_@ 0vB#tp*оB@߁< ^0J F7 8_F A$!@T [D3F|( NWLa2%,@p#@ @ȩ/zN9[de PPFzH2"P%yH-C伈@DCZZI2ᙥBClBJGn|':%Xt!Sg  ;]CzQYDcDm(Լk+ĒKN`nize)Nù;lZ:+L@g5uTrZ=(mx3 .Pb@bˈ0 ȟ<. @D= "qG"@~>HEp,gȠB tw.; ~I OH#aUͧSx@԰D d< ivY )VgF QG(D;8.3`G^mXOw&$=*bn=D@h@6Wcx̟DR`"'yhE@zU.MiNPU"  f7ňՊS&!u@!ЈRUb)4_ ]eQf?ZH~n SI[i6Yv~iZ6`D*eL?b2nDe6xn!=vM'∄|BvbvҾ2;E">2 6o(l /М*B027-$ -s0t?\Q8 .@|d3`p#Ȩ+--H~.[3i(F҈"TC-.K0ALʊ$   cyTE/ b8O]ۭqfT"ƃ$Kl"0i}?@1yGS2y#3Hgzi^GClDb";҅u\wsX<&bqX#aqp}kDX3e?k6ZD9:g!53嶍74?huj=!;ry{x`?zqW zbD*O2qCvWx_jt ' Ip>PzfBp^@1"n<>;ABѿ"f3KJo -d > 0Bda8 >,)2,+Ĵ0AI!@/,%`|ׁ: 3 0"Ui%4X~!ln*XBixPtgRMR2T44Vat @f A.@K@\" ; @J @o*§<虬}ϺDYC@2#9\"FRfpsCPC^CA(#Ia:ӲyXmbINiR 3 TA:@"t`Or-yo 0Oz UpaV@xOBctjLpdKV" w?P"߸{=eL g@J5 QV@aHv?*re&#3 0 W(BVt`xW0O0o5Ju@ihkkڬڻW)洀`Ei7MT[`_%-U>Hґ~7>c%P3UI%<z M"k\ff5H_/+fc ^4>$ 8| Ll0PLA@@,Qlh1G6'fB@"ܘ4h zj`prb#b͈@O0 ?nVgnQJҼ|IbYE{<@eAcD"B@9ŊM ␈U/0< !@#>] ^("!&z>ޅr "/Kh@&v*%̐e"أAr\Eb -P lE"#q (,!R ڰĢӆ'qA#$J^-:K-m$T >8[/ G)/ '*'YE"P.bL$BP= 6@9,Q g@b$"C=1.@Rb%cqe4B* B1@ 1\nQ#8S h60.n"%`" dD`< 5 1g@\F" 6^uE2{; MNM:*U ؆暱s0p0.%#D`/2| DATC>9ȀD9^|-"X$ &~$wb "@N%cY!>3$EZ daG3"K@Z!w~DȀ)x f)%$VAp,mO@ \tuYB6XrfD>CN%H`j3'+5 R]KTR@D $ \"V&d!ڹCh`[N`/@^\@dP@\LwOB= ? ('@,%/Q"B$1Kc,ك"C?LPfZ,EZ' K\/ҟ-"{m9IhW|ʮ!j 5L.+3u/B$xar8C/ĎL@rWr& ̠U`qN~ggn`*Bh8" )=f7 hk /&20d@ԼL\,*jļB{+:#{qƱ4N,BR(%hX#<#<֓! a R& H$N39γ%YXn0t_q^]L"6pAxfAU<ӺEY]DY~ygIR?$_" ~@ SJ B42*$(T_>*II2&WaꎭR+`^k\M%[}ViQ)fa!m 0VT+=BжzULjD8Ր7~!sҹH" ݀3O8:0>y#ҷ 5LLȹpcޑ Ze/7 -WR!"RZ0rV*Gb0Z( BƆAX:We]?yb#qx5%_ \`泷YB5X+#fBb/ϚoKWX5HBa!k.^t\e4.`&3FLD -'o{̚A$p },g 8Q6 @a_΄"L%GiBJ&YsgI.PL˹ܦ` DzhW> IpfH84!\/%5 <3yv? wK}Y=`rfw=6?T]!MZd"Y.Ȅz1Lҩy 3t {ܚ3tk= c0YTpwGQdx ۽+ʺk7I4rT y, 9"LɞH(ЊzveIzF 8.f2㤻^O}.DWRu O!%ӥkI&N&)= \pqn)H(_'PRײ^aC<,k ABD NX;7o׶gmƅwBzUYTYbMJ T,Õ ^nQE)lnj(QS҈?B}B +UԓS%q hͳ<ٖlpqfư#T|=1ҋڛ{7+!fOYt&]RyR)Sm7{oq&}~TtY/ƻa_q@7QKS&a;ɪɃy[)3AލϛbQ#ǭ7 H`/Cxsy {$PN `8760 _84$+z4 (9N #3 b8k_"&5ȕ뢈8- py)>(52pؽl+9goiU "2o"vС<""z(p"|AO #XĘ ċ赾:&4: zKdV7h<-&7))LTcbPEq!{ 獑)m 8)D%K2V>#q(1? %7? :∢P7'9@ X DH+_xO9@),<~:|Bk9 alO )j j*d ѓ9çX<;۴V.*j k ›PD[ ۔Cz:=ZIO*Y  9Q`W0a/DǦdGqYO)X :ˆaƙ 9* %FؾYí@ t`!u`=t,2ּ5d=+݀"Yȃ{y=ux=P-T*@"J7ݜ*<ݜ -|0!' w`_`?&)۞(DDdj JBVzۑ+H- *Ƚ \wia%J/<_G @ 4 @' Yڄ|"J ]k8!&1X*6ѰQ2 XḨÔ Y/ Q%ܮ#DTFh$99 <Њ`Y_1A!Щ=+C09(8G>0? 4"Ʋ0<)T}7- * H G]54`-VQdE.p  #J ߶sfI<▀!/Oqf.HjmR؂#Y/epd"CVKU 46Ѓ+ }$ Xh?S 蒙7+HU9@EIx8 t͐b3*SЈ>_R~(J%xPp drP{dVh! 1g=.Q\2}ON``#v{n33{;鉄zv(; D9_wd>:%3!L:ʕ} `TmWra@7B4|$/% KHf D@e'-JV3$T@  |^F`D(8Lk$(F56F1\g%+pD/˚c, /(gFc-F"9L3sCPtJrm X %8JZ?Q b̫V% 3BMbID/}{*"PD V15 &tZv)b07$(t_,wz2Ez)4wLIOK6֝a"+@2JIo\V;, +@LԵ D_KM!w2̢ޏ U`cf'*TVH"Ն %=M2BO6`~^]ߧ^:U:p@&]1ʈUV~E܈ 2W%{z2P‹AWb" mIBDŽAVe5 jXz@Z𰘙e"J"">MCSzޑK Dxbm2D& bQ2rfGVTy`_^ fu]biؾsrG*Pxok }D=0P>W+xO\pD` &Ra `8OoPhH`V;gN]H/$IұY ngy\4sD EQCQH]RX,5HHi#e^Və5Ŕəc -i!"%BS"$8@C`".-!R @eF#2#jDWN4!eDb͡]KjI#&ą2@ԦF`h Wɬ/C0Q@oOө(S@ Ւx ]b!I&BlMO٦KɁ+ts\PJ;qT ]CQ%h"G `ǃ0ZJ4*'R} $_DDJ7GV JWE$ #6N H'5QOKXuYQ-QڜgJZ,J̊FQ:ttA}[_(NJr ]ceY+EϳwPtԦ *t&gP\ DM ϡ| yC >y<tVe"t| "<ޔD=j혟!ۂP1 V%VÞa(BۓqDM!^Gwȝ$ ғkY#}`@~I{^合gVزu%Q xm~vlx6 xpӁ y!(A\76 ZT<$eLʜ%@! FI y(/T~KQFBu1LM-SPX P6R }䌍<~ (4fS|Bt f氐Tâ"+͍A-} S&RB`5 EȈqv뵨wRDU2zh +}Sq8dyՓ4`y9@Ez)xmh׎J ҴW !J"\)j>} /`)vku ^H'?' s;x7x2$"2BJApɡ4~73e%ZNۮW5*lX .Ir&RP_$blPSEeAKQro|Xw3%y)q(b^Vc:%\4Ŗ$bg'$Bd\*P8O&ŤA2#g\n"aA^bjCetظb`G7)zډJgBPa8Ub2 ΐ^S{ x 6a!)¯m(G#o nxPkbFw Ͳ]h KVn)],BČ0īܛ]&Hb#dJ.m(B> !b>9,f>a^(x"^! s#n%vdf,VL=ɾS` F `R f<##)`j2:4":`@!4p 7 p)3m!>d ҙ+c&`j/BUv`ޔʒ%//D-a0U~DbLj,~$ Ͷʈ`vC ^"VDbG*rxK.?=| < $t?0sS$H$|77V JG`|`,6k ` ~׉*1%dbnb?@bEY*" DFL;5>#&J|fMRO .\3blȮkpدdp8 $aTkTq g1 %@ РA`m-,F4x f 2k!0pC`:Q'Hh,N >(h@sY'KV^ A:FUhх?@]'o&ncDo,pr#X [OBsl8aa&(Ÿjc!]T7 hFhmYK^I`jTCs fػDk,{,:^YVZ V\f 3沬6`D6Hv Į¦Mu4w#v^@Jւx^5'+F`j o% "%o Tص8tJP3(M㧎z%@=)s2g<0c\mTxGQ=faÌ\b/@O03MDV n?f0s,.5 i0Ǭܢ%`IWwu@ʵL"ʶ3X,"$ey'1A[5q:#c6f$$++^MX`yu6 8#*@ <8;B2dԞsq:es#p!0(\e00 k+cbrug]!{ti/Gp- xz2g@hDs@D6Fh+Lv! xe Pu 5gOF2>Jh]1KG@ *%"Dd4W.E/Ϡ֘82oMBt8J-ML 1J@=AX A)a4VckaD#<&U`$&x#r  5~b1*uVGS'`"aV#d) vPkML+H@Sf̬@D3Xخ h v]Nw`J_ n_#z#&7(P*Y'#hB@"2Y*8H޹ACY4Y9F fo.Z&x9m1$kfyXoHƲ-XEHn@ bcBGxmV~L)WT}fHH G\Rgll4bN$hnaw[ {c%`j"8I[uG),7.v"Ѝ| C-?'QY2%ٲϽl4D1څ}bt@Da|[Ge"\b~(.b-U3!<[ 6,j5 Bh:I^<`.`)r'%!2([`jhv@sfɊp2PtyC&X@ J ˎDm6bP;]t` spt%Qɸd ۣSXޫhıJC;"GHWsHS6jn*E7 㩿5w~WF| :$ C`p'fti#ƛab`"a}]QdG18Ƣ`Xx#"7zQ66nI\{s@% ]M V K}$2 й"6]%5Ϡ~o.>qrr^[怛 |K>9i&bg?늭e&H(MD ;ss@#ĦXߚxgvF=v2T<0lR0=Ƣ1iQ-VY)$sΐhc:%[_ч`7&զ,ф 7:צ($|2uKKF (ʇ;p7;B[K|a/- {X^?|ڐ1I<7 @A7x>vVʍwZBD/sCG~eθ9n#y:f?BCV&..eWk뽼ӪEh|{ _ f!gSJ=)U4k;|߆>L"k9w&"5Lr4WJU)%^׌ʼ$? H~٨&se-G8྿$^d"bؼ*дf+n(^ J/"Bif.¤#ؾl,EGJ@$ 11r&jҕEz*HG2 Li"*3% )C11s#¨4j7,*겡 %IBJ" F7,@ RRHT V>Ƨ ;c #(ni.%`Ԝ, H}{zI S .Ҵ<@&%S `/rmmZAr mң>\Nj|L iD)2ۋlC8)T-rW"(rt74w⺲ȸ TBT>qRuD:)%y @sA*"cb 4^ʋ8?0ua1 NDӮR 6e-CN70\WPnFh߀0dyN5>@BzC;> }D>U )|Qid^<;!<R0h*4ܐ{{l?$fPaGޑm )|mA&d|RNQ!K$`Ǚ J,TAT:IP,3qPMi&U _$S-+ $*xA˖P%EqlT8'Í4 ~ )b/W+ܓgA$\"y>tnJ^*-)tnv+gV>2=+! 1 ]\,p*%X|i^V!PbOQWM>nM2-;e^Ғ@HVCІiV@JEŸ$S:`xD H\U8RX{$K܃fsP9^%l זEV ɦDVfO\Tv{^yWY\-3u>\OfBZOcIBnV>SQ7m4nwG'Ш=4'j\BgЯ`NɈ{Ҏsjn`&1#l|60PU9|,]{F+xd(aS i0k#$ D.aԐrCi0=7w[vy/yI51MU vE@_poH "802{ 8G x!u+02 ޏ6_ #,j[C"C9bO Z!&ׂ(%4b"5RnI =k[C2 <3h0ex{eD0΍* H8[IU:ʀ)%B%>9P`^*ys@Ȏ;A 14^8ڃ2 ͖ !Z{võ;H ;s 23zH $̃C=0qtS*ZzO8* p(Ƞʮ+ h+ `FH HUsJ eFX H;jcD9\߭j1h;.}̥*-G.ܴet.9HY|bî %6W Yҙc6EFA{`G/΀q4m9[ ;bMJM>$ Mj{1g"18IvU+)B<*$C'd?`ӹ}?@e;C,L>' c1_"ȒnU[!~"T e}BBR:+3NGWƕe!ͻ.#AK^D H+䵙De|"lm,3,U4Uɞ@oq*YM`*(F6{q>x5]r^#xc),#83=*lBj^l ւ (C>͓(( Bȳ-h? #tPkZ0#@3Q&k[F*}Db{qh|q“\ x Jff!O2:#B;AABB*+ Qj螴Brs\ ԬND&O@ ,Ԥ1u:֌k[f+&'_"V&Ey2ONHx@Y_Tp2VN_kOi^KCFb<d:UsȺD6PrP$ QҖ^USI{fYiOD_8Ycyf/! &&SP"KsbGIՄ8U!-5i8u:2=zI2pxGFspO(dPz8L%=kpY4d~@Њ9symW,HDFB49raH ]-I ާGt(RTT0+}>[OMjR~RtK+9Kԃn\Q(m l`/@T!QwV_T^.1P-@^H528Dɳج ޼ō" ,Ī9>e.2lv9GBvl̞5p9q6k{bFxg+ܕr,!Hfv[؜4S@,o"vl<&]Y+ i%Sv+&G|c\ B`Œ8\8Χ%jap08SDbF`<,u "0`adJ̹vf#&j".j>h^j\'i"PFʬfPF@eRC &όPU2{0x"&l6xa$vŖȥzrUfgqÄrB/ ^3&Pzl(Enz"A'(80/*G8jh,Y-*+ T@xW  2ЌFJHk!`D@ ^*&"Kv.v+"  b+,&@jNA΄SnB[$P %1H 7@$ꪍ7y!+"H FB4$*V9%C׉8g;r;0( )X K;r@m=E /JFͱ (|@Z$d^@,BEfE\^詸>M1 Ѣ\f*7lF^tZ'> kS!B @M]"QJ*Nax3 , - %YRb>Xڶ#sݬ rNj'|e3>p$*]+T:ҿ\xn/Y ! " ;!~YA^ >qpqǽHi %r c}ρ^Wtyf7RDȄ"I d? 0i5M`x"UXoVBgi>G"h\)"q>K#W"1\g7v)"_m.hM~`H;XD/ -=woHt!^_s3Q)Jly3Z tF/}hDknַ[/g V%xG#CR~Th_8Ҁ F&[n֩G{F֡ G0jF㳁 !{OJlΫL`?ȂF#KC0RZ泲9!9A =!r3: 13ZR<GBވ$+h+Q_42TȮT`.FA:˨\H,C㚖9tf-H71}RBȍ /52_8A%l_=OAjPuLhJk9IR_ tKu˜XIgj^2 !*zWGR2<%׵p\+K`x"fҊ(eisbٝ _ L Ό2揤'8x`2#/*!Yvڭ24R,$yVX扫JRWYg~oz֨ j =Q~Y Ij3/f# %%Q?yڗh[2GQt]dJ蟐oc!ͬ4\i.:7XlD8+ &:2Mъѥ;F$WhG߉<Pl[SUuJ!!IV}d\e$$\EM&/d'2H"DQdlO"tp4ͿDYyRU"\^g)Zǃ")lGa2Ķ2FFh"IQ6H,xpPj 7 !\~&y@@Y>\JE~ K$E|S[q^M@@BhDX2Q%[uM-D  4 (X9Iat62=)ˆ^piB(U4O3`͉6c4 aHJh`VR到2fXXԚOX.aRlK0-wβkQU*WDL+#4 &`H¬B 0h6w6*kL)SHeF9V-Ă j xQ&"gHMXT*@J\\(u3b0(&z`/I (#$/SO&E6w 1l肇"%,?,= @`VPD"UGUl+Qi[,N*JVU}9a݆YU y)l"әu:KMy7Ir n0i"؇jllMvyc#i ['W4RK ZBc 5OirDvpmڕN\K$#$Pܪu5*IEZUy\Xr.01__~xD g(*3h&ݞM ŕ uPd Qa՞9 RcFy VXkj&cf^?hY &y@r}0BRceD~5 Y2נ'tr441B HFe*iOfM ^vL4[q!XtQO7Eh[M@J"a;0nŜF&$c5x,)C*ލ_ 2Y f Mck~|Mo }o,? &aR!dkr.]S[EfJ_QSV$o7&rhM"6s}^D/oI9C`@x:B[6-+1$ˍW"¹WIDe(/$yB$@cͦ(9sm@r *ʱVB\"(E(&n)+s{ed:El 6o"ieWn,DAg x*3I)*XSy!G3dK7['` f2"C&B T9܆cTXOxggyD y0!ukoypנRܾ'ӏZ`?T!I"+߀`Nb&GH;PټS:;<@ڵ4 z 3x+2liD` &b+t bxp,.?h,pjxcSR8Γaz %ҮB 4 K92)èB2M辘*@7#-ʝ$Fܖ{|&,؍ ؉28=2K˖|"ꠉO D60 @&) jĒ̤?lJ3 `RDžA¶Yx y ,tWe//JM$a *N{A =:"422k骳yZGP*MaǍ0W"z 1b',h%98"i鴿?ȧ5Ҋ?Ƣ+ᐴR͉,f=xҴk.l4"#q:!.8ȉ9 Xft YٝxoǠ=Zɱ <0TI(6nq$yƽ/6ٳ\3҆s#Aщ`++7Dɹ㷲Z82N/$+ٕ9Zz(3BX᤻ I+遘(@GGaĘq2s5Iѻ<<ΙP 0*O,D- !!۝W|#TY9d'zgsS4;к`y…^PRg;Sɟ p?"ב׉*ȑTHM4ֈP0:FЇ% PA |,E U+> /iHDGIן (S&,+S1bʻ[*E#HB0"h.l:E@LVN2<8 '--2g>쁯̰}F9Z]4 R‚68by-3.%RDhh3ep bh Wic?R7+Zn1`em æ? 5fR2msSIļe,MJb9-Z_`sCR.&C83f&*R `ej#ShQK[4"1+n .؎LXF]o+Ӥ8jyqIyt_(6@@-8,/j#X CbJ)K5ͽɮ93d4ql 042>Z̊R&xP"! Xc4ZFڤ[ F8oI3o\{5ص"B܀,Pͷ ;}%^h G5PH_UxFnPV)U^S]ȶh{Ӷ9,q/Xg1GyVHA\͸x/Phӂ۱Sm(『5 ]- $#U5qd2~9 o4A06 S}IfQ!p c6Ȝ %9^fB[6XO[%`,Qt86<Ȩ Ran/~Ug5^q$> KWʧA&*2Y.:"nPEw܆GxD+;1G~am=ik䐜O7g8k󨰆j-/M~$ !.׍yo(-_JJ2;9o;)~O)*̦\Be6@pi}?A tD)wCk 3׋ZTQtz"<NT/ uA\h49@(:-]+j~'5}Po*8D%W,vq&q(e/Ѵ~\ёfRq!gW>E_);DW(#V{=HaLC%mȕ I{ _ȓ(ʌe!W:6#s,*3 WƺFZ+r*8[ī؎?8ިD'"3~[ͶhGfΝ)|‹>Fϰ2a,"q] X !` *QB$X]èGz;'VҮD:} @j&щ 0`b@*3qS p`Nb>A~—1g,PDWO| _Vbɪ:2BHrcp aMè*B EdrIb n'`Ě F2z}2*j/"p?j "/Fl+l'TA3gJrQJ$+iv`2(XC<T'@W @U5 1&UU,&>K?DA$+C w0ʫC T`@s=*A5ztV~:kUsd ui}S6"EG(r0A#w<ʼ}8&E|#i *EpgLΤlH@w"g8R.Ugm"_8CEI/pSA4/B^JLB<#e^ﮭZfB8Yڣ3-#q V@]楾}M2q2&Ȝ2"D`wa4@ݼᩰW[3DB_ jC [j /5T^z669]" d)I UOT1 &0-t:F  X u4A} x/&@q+``wg~mv>! MH¨[ p+䍇f %@ }XBNiul lg1$O7ExZڑS\%eu2.+H !Wa=/ PЈW;{#%Nҝ-f ,`Sx({47 XDEC gd;uF6 ހB8vC d3cF}j>| '0uUбW@YfBpDK5*h$@Oz;_T. V||f :@ KO/d 7Z9g02#3`aU16r[hh-gHZFBxBEu.y0ia+UL"J^ $V`v :(ϱSs6m.H0BPD ^#fn!FՑ{Ι=~#\ϯAoIw8_)ns|5ٙ^{t@x|/{'/|ߙKo}߹~_7~w'}|0p 0p[pWj@(LFD jF0KNRp$V(j (.ND$ÀVV[P~}(qen.Z N:d6N([ 0r E F @x@\R(@>%!P@#) N PKo` Lu\@5 p/2Z ;*"@y[^E!P1&1+ q6Kq?1koqs1w 0 ( .nCܜMc"Jd 7h{qq/@m$MO : ?/ilQwe `"6$:7D.PD#/IE3"D"+"Å fq SdY1NJT"#3&+&P&&o%0 /)!P[C""D2_')A)Ϳ**PFdŖ@>JRHZ%"2*-LY--4M$ E>R ` /-2 .n11NS >W 2$2XN$(/0.SK1SI4!$8XD2)2b>-DR4WO58l.+C%%e(,@?,^%$E#8#538SUZrtD\gC>,"%`C"I;?3?m$!DO$d:C%G8A1s lU2"NCu="S>%B3Ds@SNR},e,,TBʔOAIGo Pǂ|lrx: +ASpy!Gr<1,@U@StKK4IFICDDЅr!U6ХgUgCG'TDD W a|DTpTMuLM` @$Eu5E6FR".;PX㠬0o)QQJR&Űn *qĂ~EZj@DZ@.Q8p̂W! 4ia&`h F DSgVG)S`,FBW 41Kp S!:5UEdO@V`f t@Z N`p $2[\4EVT\+'Jr:6@0?=C[B_T%Hd80T3\6gxfF%D#SdV6\( `Dd`@Q:;,sYv :8OBQgDYKk3;R^CBh!n)8MU"OC`#:i!~J$+J~@;4HEo%."VJNf"~BjtC37:O2VM)Q8",`]AGCZqUs;3/{%LfhW Ӡ % }v|@{ Ww}bt-nI",P0*o6&"ZIF-qQq()!OD%",f,6>bKvU5$Y`$OQ{U{.@!#~71XMwEg]ӝ%Ol^K`ky$6EQy:|V&% EOjӫj| 3hwn8$  ⩼_*Ȥɜ XB ;X"b6@*s9vGyt_ȺqaA">+  ȉ"%K̤b7R,p@W3LC4$a0P"bzS,??GSg3PӼD5`xe$RtqKR=0STvC`V"P ^2) XVK`>欕h H6YVTX̲{<Һf?SP̬k,\MxH)" 6%<;xפP b_k]I")Wd.p׹nׁvŌJ&.z&4 :)صXs`1Wbuw^Ծs"fyvy)L2-6:" ,a{Z_B<V g>4i(BB3 c4e0G"z.k\=ʖέeLa|.!sՄ D syѯ?_ػ|1IB zgjJ0\gV+I$V˙HK,T7A(fk޶ YNBL2zc5 h њF`9 7ՠou/z3BָW?"k|9LQ"hN:og ҝ{H?N-WG^ S)0!V IS p*]c\H#Yέ1HE>y/|CnB} \>A7:)yduNzlD'a<-vq"7Engs?e-A=2mQᡪDRu_f txО yV%,uGV: ]5vp Zy"m1PF@ߓ=Pū!𙉛onQ mp]fI#tO=8'D;Q [M?Tyת>jS{`\EH#~VY#53Ms"Y鏚:,ȘD B(Mi%dah@jc39њuT*ގ tm8{'C %5Bz,[ElVzV[kF-hmݣ5o(/FY00ZJڸLk+uI`FۿiV/zpDBW̥#& iA+LKч88>'>3`҃|}W E n=gB` jS H#0rTXX OpIΑ@25@X2@ J0D aP&UB1<4Plj>ן=$lcB$TM OܘT.yJO2mFI}(ctq@z |e`(udA؍픷( h䃅T.c).>Z>f</hB' D氭/)fP5?26F ]`F@zК,VL6hP.#t,UT>Dp#z$K f 6T*j&i(* Xk*p@#v>K&oi D/B` B8#*2 fLf 5~0f|`t`t`N@L]p@S# B` ; 4"zd(Ge do +'.`F&O2igجjzX:$|jLN H8i$y"FR/zrlD"'  I/*)7&3Lʥ5ΤQ0r2L"D@dL"@NC`%B;2LP4RVzpl2R3#OB< ֭*[ .: dTCrb !)*ꆔ h:?b&3ȇ! &#|*!d0`f.#m!eĦ@O`u[`#-s}c@J)J+T!~>:D2 "\pn& Nj0N.!j]tp1ɳ"DjQ&J+bD3̎єbm6BbD~#h8m-D 3߄8A3t@}HE/R.@P[CPq\)n|c2C 1  ^#~2U:d^b kF%,Ԩ.%4@&8?$eRS"i }Ml C,4Q@膃QllNwQ1/m%n+rm6it#bI:"*"v$TA!U,i&9$`WO=`Ֆ~h^ct#"3Y JJȎ7L" ! Bt,ƆcR~wK2w~4"}^oȣA!x_6 aPQ$*Cs5"ɛ|Dʅ*!iC(:HZ Z^wG8e_dnZD'B בrPyW7J}vF?K^U_h?)p F$3U9kWzיMR~vl0n-Ebʿ3&rGi?2VO{@VKδ*!:vIh'l0&M *¬д)}G6M0اdP(=0l<"LK BA]o(H$9w~&I-JH10, D@y̍WzI Bjժ'kEĜmqg Scwvjmz"@&Cډ CCwCc87yٻDϴOSv3K:vVЫd>_(Z,Aq5`쯘2 !D@0Qo=`S HVH`!>~45Q7%Jb@xx? bA@aCzV9iu*DuκE'RYKXH[#S@AY@B׫@dʱ"BW>RmZ+1X@J RPaCtAKq߀Ji1~U(oI3/`DyP׀O!$+ReO`_63sNګp2KP`˧!XeՈ7ZfsB/D-DM 7t{b\& a/Fy:"bi%i3W͉:-r‚3PJ{Qe<*9u)+32Ubt>)A%p|4bϨlc]@2@pn@z/yN,p @}s r~ ^h@@E_@<C{ҧds/Q ( J'[A6H20$NZeɨO|:3x ];Y*J>lP;ѾƤ`V?01_~0 bHI OWť\f)6[`ky~>CA%@_!tlj{Ἔ myHI F 47ڭr$"'y5g.,訴kU^Vnd(AiGDi/]b4AIP!u19j"-b-w) qO3+g?#p9g.|,@"x yp(`xRpw qe4cй"=Pگ _^5o{st變م 1D 6KA4:ʉ2=8$Q؃bz 8'O+ Qyp\ Mܡ[Y@PИҞP!݁Y821)n4Y2/c6 e {΁|12Ch8;2C$(YCX  ;) (nx! ?1Bn ?̊89)'H !t>2+AUJRξY4ܘP"PЙ$ƬھH7NP  =ѵڛLk-1ȩs$脫{]ʊ>C\qȾ:!y@kK (ɨ)R6鵬|­GЉ p/XWxS@&1"L,׎X '/p8.!ȵ";'oXp퍊3+(n"#[bBAnQɵ$*}ˆ7Ў »Rq Ax x62;#ZJshSqBЌ ؐPOH/3xB/- D$F(RrM+JǘESEk^6P3r1@Xضb%{6]Ǫ׸I&i*觏Q6+C1\]~B0 B-FTF\jF2xY2FEN+왚5E*/Cp_:Zӄ<? 0@zL#0MDTW؇$ Ƅ2yWIz^_+aw7"wL(u\|(wP_ h2R3ȂGȜPEY@| @ @B4AP.0RA!ѼpF I/RhT.2R]kLIi"%V9\,P>b_䌛e$ydGF񑱁F6Y !wIZZ4OfrR} ̇n@0zC JI>>pH$ 2WQ$iLc)* @M!ʠB8%Q0 m@d*@)4 Vڑ: ?I$IP A&bY<\L4kpQ>1[lC7ȱ/ՂL( Jוo}K?-m׏2PɖC.5@JEe!QIoyx#Mt+(o :y)*+5vL3^O"br`j\' ybTg2K+@NaP{ "(BGA {+{ =<|,mUVdCM 9 .~{k5GP$ ظ47cl(ĈD\B$ b{z/)=RfY{:||s锘;Du9])<)waرpbzd#>OH 53xμO5.sh~Vg% *5Hdaq&[4$-Asx z<x aI).V|%.F hoQ/W$JFgJB;'"ِ>.:(9iL xbg4ĄO8oɧHBCE8;M;a/ $Fq#$y< aU Qy#?HE=~*!kKe儜MM $ Yp y^ N:>(8œ#\J?OJ?{QiB½@(@ 4; A'wIh£}-Gj]- ^MpbtD$9yGQbBjDSaSG,1O1(R%We^ "&+n|N0Nf +%\Exl\$NX|*Dq)صB%ōHYfFH+HW"K4lƞ#erW+\v̠ gk @暰`!/4^+b^ xg#\PpT+V  d aN0"0+&e̤xV>mB 4pgBDtgzZ^6Px'bNBy$.IzzCĮ0uLБq^l3J )vd+qr R(dJTf`n1ʒDz0RjH Nͮi&*e#AJf(]Џ`Fܡ!BE͚OEʉ#L04Rޠ r b`+i,'Y"0CB~+/38i2#h ~N]%&#\>/ `B4L" Z;X)L B\8I2d;!^8h.C_@ o($4BB^$} o' "6,@ၾ9t5%/:e6{/|G!-+ H˜/D$$cȺ$Bq`Fs0B>t@^.-/fq=JI 3*B~v-qo:LDI0&>M/3DCD+% FFA+O0R'K-txFR@&$4og{I ,NS_`\*&aKG'$!4PcW#^L:e-N oֺ& -B!Qł"h\b*Q͖~R&Qp`v_P "윔mb5Qqv6bIgxI"yoB|5 h*f)6mF|l*Q s"6/k9X՜U[fkdsj r v: "GxPfM-c9woկF3 zKKT Ex( ]%]j\xRet." .a|S/#u! `rxD%4bk͢@yLb(:T tScMR̴elE\( J.L&,QZ|^#TKɳ#`52@N|0F,GoSKJ.`n0>mA8.>B2 ¢A)xOOD]a`4l B( "A^/,#JxW6 !^+bZǃBCIv! k㺀G׀& $: ď$Awn$TfJ){$L(C"g!2h<5l1T.,teit(&o$8BN%"aX^RHKt {X  6^G,HT+ JVv'4~\(#,=+AOfF.))-dAAo4%DS 7w)DXR7?rr av;^R6El]2Ĵ3d6Dքfك{(vȀ@v,PsTmW$oh:ߛ" Qs+`Q1{T?$2:9!CT3#P+ZRyY!7+J}hY#7\T{Ov@$ /Nt١pӡ?huՆ(@ V&7o}dcGo|C,$8 R H{P(2v!:" 8[RCH AP>B̗$VRX@@& ݒ !);/3ú6 #V^ذ"`$H ~:{d@gL0%A#CYC$xۣ$6FE(]2L9g{-@ItHe( Y+Husz2n*2vcT+":Aޒn:2<߼B?9VGO9%0 Xv#VBy^\)(9+3=>sQ'|sWH\;XQ_[ MsZ4q9 E p&b@owy`Fu=jX"-Z1]v"]Ğgem @Ba82d#Bݷa! Os,qzK vABD Fdrzo'dKD;srD;^( { QgIG;i 4 U#rHhNZj"z{@*D@ )[# r+4krkȣ<@ /0^ ,E.W&#opD ~jAR,@O\$4vmް)'+ |AI Њ"Ug@ű2/ƅ(([Χ fqxϕKG iKnU6 T $6$%FnY~ƌ' VK^P꒬UY^2s 3;7dXFFF\vCCn_M{@jNJG x+Ym4%|U9cjŶL `"x"ړ^7zМȨx#4D Qu2}h7˲}Ht;#.< s]z*s' o g+_|tӧ!$ n aƕMlwwqIn=ݠFvg'zF75D %\*T*$zIjyޞD6􁞮xaOGgXWzR̃ v zmӀo&nAY.,?ٺ_ 0" a1i-E,@ e|gPH8ڜCjW ]F$ &fI$<POHiฐrkM{/ #L]&I72BQɫ dC"3 "e5m1;P@Q3~(e:O@n4HlûB,Wi?CЀ]RAeJ`ȀjR lv$9- #RvO¡(NaȔ0@_/ AF 2iOі3g8,"aT+*JS,|ǵtՔSSL9Sgk3ķoѪ6 VJRqt>IbVmR DE|-/J>~' 'E8&:@,Ҹ/dY%D~&E{f3) D/B@h"Q _!'RJUMI@T:gH!fAW{^$Q˹o,j34<'-ff"2FCCYvj)y缮m-.ҁ 5I,1iPu"ӚD#:D4gb^S̟#bւiD=nړCkL*V ~ kw=X AЉ$f iDM $|E\Dȳ{xR&dObw0ա@}%nۻTpD' 4| ~[3 0R8_xG6[@ԮÌy_1`LC.#8LLM xuL%i T,Lc"0ܯ` 0,k [1sNg"Gah·r'_\Z5(i a71{R Sf #R](+ZOB!"q^d M BlPm;n$ f}IEe9AHUkFݥHA3no(. VUD~\WhL[U˘wRqn_Ea[ 0V.pz,&OCpdS}(1hUgfnUj(4դ?"wT*Jͯ;Pcd[;EǙㄴ $ 7뭖ʐT J̙uqKe<ڠPּn`^e.i3O25mytvعdH N/8WOuhj6VO㢶!zw !+Ŷ{5Bhqљ)?QVh`F!3[єHƣ);2ܨ }qc<; [G rB5~ԯ8[7LT%1 7 20G^Sr* >=-05 1d9띲 X &{3r (3J1{Q=R/3ۋ mj;Jf4*7@e)"j#K QX1@S;009)yYG áB4 705 ;  zÀxAa*ँ{E7HB*5r Qg+Ş*>s-58E7b'R0G"(/KJ`R/{~iV@Fik6 1DPŐYW.2$Ƥ+ks{Rt i:is4Hqz(* p+tpG10㝱̰j|yiA˭-)-ңP"ӵIe'-3{ޝF z7tt4j\sIkĀ JK>{Js̏+0"z4 FĠ蝕 D{+OD*DБ؝y -Y$EkꏊSE B-@t!뭽z6 Û > @ @'!i?@04L v[(̴Nvhz%\i)'4``*Dlx>$90!  (b1{ S,?Bƌ[Ke@ \JB 4[=*Y4t 3pF;X L>I>y VB $% ђ=(2= +&IDp3'@OQp B &ؒnji0kJx`O' ӥ,‰.,0-3/Q$xе@̕À^>͐oZ+L.N{mO*<'J|m0UCiUSM&NUiS讪QwGVĞJxLSF3 ǖi}9ѯ@ F)Sŕ`aTڗ9Pszlx DH Ul;kb3pm@ʜ>5+ l%i;"3@TyH"C˨&Eܲ#ɝUTRh"%ڗzn& c(Qٷ#<=oMhY*KjK<zIB"Kՠ{ HuS SX*kcOu=JɴIB5H U #-+eq\N3$YmYt ]'/t t\M#Έ2CPʼꐈrVaQe.Vc(fgvd2Gs*rOaiJccI Tzx<)ʋn,~b]XP2FXဈeեeUښ /}ta8^V1}rT;e{x89,J;N^*Xzb 5RKy}W4iSwfQ(j(B /̕tPLd$| H#d+$Q(K+`ޖKbJzĘQRV0%q)̸ ʔm%u˥Z)2"LU:Dzf'Ӛ$^@L 0* XquKXt0&:O(A=Dl:'ӉNM^>T%A/J( S!Mƃ\il6PɔTX`V FP`3u^I53X ,;0DVԁkdQT-s Hz-GVj_ښh,~\@;":9Ra!%S nسL@Zʣ-E(5DXj*b|x˜_2ՎLBGR H&DfR!TA.sNd$L8lj4zN]eհBQ+N35žT2욤$_؄]2AVo,178 [b( :#b@e##@ N*2B v$ H0"t@L&nʗ(*h$"FZ{+dO$dX+BrQN1ms 8mlR%'+$ZĎ&d'GNr vҠqnGF9LN)L^▢**Q'\@=C4T',~- h$f)"=,dФF" .',_+"fo|*E 4KFz&0e`ZL#pKkX1@\Yx"Cc($sD| ?s\~6eRεZ\}=2 ,C" up:\&x Fz[ǐc,4TY O` ӕ(B^fbOpmֳKJH`"‚ F 'ex*lt~M9bv(#p>\2>i*j8nvDPly6 rhW*&YJTITp3> "̂x82d+p ދm?B^V)J(ff!.+(ю0-F+%BSN#N;q2F5рϥJ"G`:Hͭh~Dh?3 $` ˜3B1NT fѻIWdARPp`8`!Dұԏ␪#WDM)- $m:JUW"n@$s"2Ȫ.@Ӓ|;@|$.DD@ ='V.EήrZ6Zc :C)KUFUΗ›F]6g `n%b(Or6/䉴S.o& 9&RG8?T.Ob’ѝH`l$bi&5<$bJhHil$R5t ~V$7jwK%sjW B6V"Bc|sW"y $F=EsLHmab)VU6S=fx)VdX o4tB `IhA^V"K|O[A[|X}ςj/]GkJDj,FSBqEh4yـĪHHa,Bfl6baZ.e$b_jch2g())Aercxǃ:ft2h{b I $0nerB LOH`WX 8&4f ~%?P0NyQKHsg\߀P^^}P&>@o ʐ@:w=<`$`ZE2buĄYW!Y~4FU{W. *^23!q2me&5+C2m=*n^ʀ% a!~7:sR/p@Iѣ³w]θ! ԅ^Z.A qB3֚HdxW]x#b1ݨTSC/Uʄ"i|"'a2kW!Ὁ".M09Tx8 "i.:6w`b )kc);GB}m/ 6"PpM^F$%wU#pC uZ' ml*NpP,W! Z$ʢW3j?rK'{ѷMZꀞ*F$ l=q'[MoRۛȌN +;bDNeRf0 Lٵj@TcA6?)Kr~w7zWh^#nV"*8j5?JO^\ 72|hSHһ >*s:Fym`j*.h řG\Ȉ T% *CxV*`c " YuI8h^+ @!6XDu&{нB6$bA"b; $*{:h/qgljW Dr*ў f2`qW>|;E% 9J). N(AFoyCz JV4ydo U*] ݤ7cF]5wHZF Խ KxQ5g ^$t9ӌEUJ1|@j'*Wb]x6T'G5+Z=V" l" Tpnj$F&95t8LyE:Rݝ*c V͆6.O4P-*份 {5(b6z[!.:A4Dzo]R =Xq}J-mYwڒlڭ-no:BrCtffF%͊7 )#(42%>A˜7;e>ش!96bdqɪȄ],@MSKUR#x F/PhP_ C|"/8^. I%IXw?3e:=;)O"d2x~2B0ʔB#~A(WҠs +s|D''ze^~Jz"/F1Hf82PF$ =n˦ ƄSpؼXb%@,^2T]n-+7i>H҈  鞠GtBzOm  {7<Al 0Gyg†]1 Y^~U>8^b~_tփ07PZN@Bf¦| e|3%&*oHWEyR:p /|blt 2cp?D7)o“&Q+ THZ,N*D!d% 1,RB_=!Iƫ5N!s" A%QUDC Kí:uzj+S]Ej⻬և(@Ɍ2Dq0Eаə-$zkGL\h}xWh[̌Pl#zv+RkLkN(]h-a wx!HRvr3 ?$(+>*d›MӡZf9 뜤%#+S /D-[ bN.Nac,`HɆA"Kƚ*Оhz`;/B{ښ .o/XV&2i@6%6ixuҔ|G m1jz@D"ȚM=D/j|s9E#{ɀ0x.-{ΐYP}pHe' Zl%X?IH ٜSXL<)Co,pVDfp{).FD2,Ceғv LhФ5:C*/(`н9iK9=.B!Z+?jR&s-!2v[TMٛg7nB(E("hWmGpĻ'OgQ- IGBĐ""%)_}pVϤC!w'JoŒ˳R{&Sd8h%J7"1bfmF*`D K~q.H7C(r=^[3%d r:܉Whe\|puB`YɧWDsEM¾a|$_#$""Ni&MءPB;kK5JLʸ"ֹ h fOȸp%ی4HQ*z@(4;%H~];~[Uj (ԑ&4;9@&zǯ?z%ELAg0vC[dDQ̍r =gJ3X'ڍsU&ؔpt  +:gZ[:ix,(% O‚ ,Jx(&{ @Z7n*! +&.u71⯙#i/Q!y$,_Ϭu fy.J 4y:4:ƝewЧ/ qhoڽy( Z2&[i! \:%8F C9w1(CQqFe)Qĺ /pMcjݐ B)>tIh hie3b xS ;ȂU\${u*WsJK1yPIxL=)٘҉.q+y"SA3Q* ȣd``?" 5"Iȑ1m 'M}N)C!OL61-|:Ճx hCJy~;,B8uR#0%k#AJQ_qPxDM 4q:32X-1L5(K30C U1pc22o|F o-u1 y[1yڨPNph 065d 삮) 3ůt4:Q2롉ĝKsHUb"JGš\!`KMaOICi3Jի%HU68fLV-Dđi)[k(ȫQ(;c 9ԉ]qK/[ς̼*aϾ#?I*_L }Cܽy<_;( QlDvX d- #C 7ܢ C^ MX,Q14vMY(Odք>28a{%M+GT! 74<yr=kb53x/N6b㟞$ſ)qz7W@؉Z蓂 "*S!5W ;$AG*û@K_̿ ϡ w-" Q OHt#7{A*4kߧ*Elh)]=[H5𘨕X$PcCs 8Ļ3 K#3L-; (" ]3VzZA?Ic\#]9 dT,7@9ԮRF-[AbR/KNz >`\,ӑ?}S4k&sixM׉,a*m~-fx.2-|*3iȅEU^>dD_x'q06{E߬LFdÁ QÆr0a- 2m>s댬Fhev~&>C/VXY$]. icHhuRa`DxD1#N@cHY:dXM8 泉*Nv>^/crJ73}0&hfCA%@M _BUhorP7k03 j#Tryوu5h5yӵhgzPJJ27mxaX; Qo5MhyVf>I&wxoy7;ރO懷=-Nj+}؋` AQWސ_'up>dz*8 (^DZEg##D.Oo l[=22v?OGgl)PA~:'켺~Fx?2#Л$9~#E!|f>|X tT1dN1ɓζx t/B ƿ6`*P*:*(Y4O-G 32|5) |e(i3ζɓJ5MLXɁ>;Rx?';@ p;Nڢ"ؕ{"rJzS~NK=!x#)@.K* ,'+ >L,2y8|SJ??]P"kSJԭI:t?)j^HU:2-C)O!SVM"$,2S 56'lNm>TxS,""`d)*Bi~[zb\4(rSU 4$#☮'șff8o>Ϲ bUKjc6'CxFʹ&̣,ϸ=*3X7QWjhkp Ѣ&8&wQ߷dn$WOO5kNzl[&)c8Ӧ-@8Lɕ9#>M$!gb@+zݪZN fz7仼><#3⾫jY&!BH.}/%YY!);*H.o%]E 6bx❙b`H__}P#isf I2 C =,\W@HP 1$ϒUdLYUSOŒi Ud!Avh 3'}4ȞH-D*t0Z JShB\j HN1QXXrXf1C(&s [=5~D}""NZy%S?؋+%̒4ro_3;1E!^.yatrP_Y6\dЕdƜD;*EEE$-G9DИSɲm@ɓ"@s8M~pZqGSIH'옟_7. 8.!"d- bBɖT<19XM CN_,5\l gX'֟R ' [2 &~zк3m&՛ gNgzXb?7By%8<Εu/\LJi7bdQF%B rC!"][!?Y|H]ZtJ1vʛAPlGN vm]af+XWi49r$&jMZXX_'`_$X/K,1ѧkGioܛv+%tȘɦ\LIij9 %Li<s|+2/-AtRhzD'3tgUHX>E~# 4"JmB HM c2+"yG?1~ k)Rxn2jx dW7@Blu<[ǔJ@D Z8j`7fӵ~ںa/;# cCɒ:uH+J/`(d%?Ch$&Dъ ie]9%95ôT%2`jvoHUjE +m3Ik 4'\' *rx8g բHE%>hJ@_Uo\=H rž09F@%)b!CԦ.,)H r |$ O"0E9T-HT~"B, OҨEtsF~n\ 0:FtT!"*>#,>Ζ PHm''DE#My.[ C!B`HL l#^K\hr+`u/`ce*eڊj#N`!Z@#BJtD)tfr>f.wG,obbS'p3o\uo#$ >c̛eH6.&5Ev2t(X'ko6s 8{/vc`0H ¼}.% 8F%'@RZ`L56#VtcAl:㈊ 3(3*D*v!< Zqs*0K1t:9<Š ;`9!#8$҃(D,-_ one(9ў P1 2Bi81F."D$@0 G $t88&NRcN op @oBK`hԦPQn`%EK^9Dh0RPXEak45Рksj'sK@TA($A¨-;,rsDV=C`A6}8">ӡ2hȉ]>JG#J`kXr @$FA8b9šyfw}:T  5 " 6wԨ3櫕0 7L)wAAZTsGG#2@ `df vt!\ ?y~a4W" y%t &p'T& V̓yV@ - $cHVqחHn -/َқ``KZ]B  Zd=8dbT@K`/Wn hظ`nq t`r`ooDxy` ~f-Ρ%a`9-(@$Fvclŧb8@DF v٤ypX^9)~7`F ^vF6f8QKUm/Ro{KeE<%a{`T7;|:` {hHڊz[KW:Fo%Yz d *B7%]5F1 PX#P`#PQxQ(R$G n)KS_}hH7Wt}M'|OYHv2T^>U# " 7!. ~  g  Y!#!x( L#*"$)U ' 'chess.app-33/English.lproj/3d_white_sample.tiff0000644000000000000000000000353213034414342020323 0ustar rootrootMM* P8$ BaPd6DbPr!m+ʄ$p3!|H2Q9d"#3ʥJP"jg*V_f{Ǚj-.7HȨ/eSO nZ<+*8ԱA"e|ȪrzfhڨO(\?a>0h;ک9ny޹-*zo>&z'Az" Js"()zȆ"¹DEk'j1?HAD$h#A`F @>*/ʨ.nۄAC{[dyRO,򭣯j,Ơ8剫P_p*+ 7H!F mj2sh3vaTWH2Jܣ +v= 0B;HElCKڐ F(h(͡ꈑuIoROhTbWҖ弦VOA;&$0iCb!scƙt.S ̛cp hU EI"aD ~EI2.S|HlWX^g#7SYp'U6b发L*]'nH ~,M l=.:Wa"70 |cZžF?1_qN: >5ゐ#>"9V'tF-)EҶ`#G&pgh `"|9uv9t#3->FJ5DbS 2yJAAv/a| @'*D+`TĉNR /5HP 3vY$#i9wR̭@ "B Q@Jy Aa.@N/  *X37)jP'/U^u0(Ԗ6iB?1=O_L%P1:oM=%&Kߜ;NT#*F9h̻Iԙ%N#SŒkl5f>~˖@ZOi7"*G] 4& ,hJId,`Ճkfd*Zi<ݡ{A~ׇ*r%PhfaEeP]ݖ.FJU:#̶ba*zdf ^7E_"Մ8 \^2uW{,pYxwN2,.[bT3wX7_%2BJR(R ' 'chess.app-33/English.lproj/black_knight.tiff0000644000000000000000000000114613034414342017673 0ustar rootrootMM* P8$ BaPd6DaHx CR*JId28TC IdA.B&Hc2Ϧ24*d & !M0YA8% Q[f rE౸J)p2UUSM}N"X<&&AnD6bifsY* P8$ Ba/To &TDGb$Cbr"?(ds la(ikJ`ҹ7@4ΙM4 %UAhX%.PL`u&nU% LnݚYuD++qHSdh4 0|FB:h9/g&sIVd]TaV65]zǰeu}W}p`@@FNV^(R ' 'chess.app-33/English.lproj/Localizable.strings0000644000000000000000000000310613034414342020233 0ustar rootroot/* alert panel messages */ "new_game" = "Start a new game with these Preferences?"; "no_hint" = "I don't have a hint."; "no_undo" = "No more moves to undo."; "draw_game" = "The game is a draw."; "black_win" = "The game is over. Black wins."; "white_win" = "The game is over. White wins."; "you_win" = "The game is over.\nCongratulations, you win."; "exit_chess" = "Do you want to exit chess?"; /* alert panel buttons */ "Yes"; "No"; /* window title messages */ "Chess"; "Chess: "; " : "; "1 Undo "; "%d Undos "; "1 Hint"; "%d Hints"; "Illegal move"; "Black's move"; "White's move"; "Illegal Move!!"; "Ambiguous Move!"; "Black is in check"; "White is in check"; /* preferences panel messages */ "%d moves in %d minutes"; "%d move in %d minutes"; /* black/white player */ "Computer"; chess.app-33/English.lproj/black_bishop.tiff0000644000000000000000000000115213034414342017670 0ustar rootrootMM* P8$ BaPd6!RN+ E(lF!°8T!Q@ ^VP )V*& N{ 0|5 BMTc,C.K:L<)FçFѬaGQr섛QVG#.q ɐゖ4@,(2UJ , !3d5t73T9od=ϓ?(@@z(R ' 'chess.app-33/English.lproj/SpeechHelp.xml0000644000000000000000000000110213034414342017133 0ustar rootroot PlacementHint1 CommandInfoArray Text<Piece> <Square> to/takes <Square> (e.g. Knight g1 to f3) TextCastle kingside TextCastle queenside TextTake back move chess.app-33/English.lproj/white_pawn.tiff0000644000000000000000000000103013034414342017410 0ustar rootrootMM*J P8$ BaPd6DbQ8V-09aDb] `CqlW-pM!T )ZU&KB*:$ERa5*=5zQ7 }w^`p P8$ BaPd6DbQ8~0xC.7IԞ; r5i<{ (HehU"K )4Sk0D'봚2*4(DgX`5l9sˠ: `ެlUt O?Q\w=@@(R ' 'chess.app-33/English.lproj/clock.tiff0000644000000000000000000000107613034414342016350 0ustar rootrootMM*p?P8$AT6!6%9RU*#һtWDWԩ/DeJ\R ActivePerspectiveName Project AllowedModules BundleLoadPath MaxInstances n Module PBXSmartGroupTreeModule Name Groups and Files Outline View BundleLoadPath MaxInstances n Module PBXNavigatorGroup Name Editor BundleLoadPath MaxInstances n Module XCTaskListModule Name Task List BundleLoadPath MaxInstances n Module XCDetailModule Name File and Smart Group Detail Viewer BundleLoadPath MaxInstances 1 Module PBXBuildResultsModule Name Detailed Build Results Viewer BundleLoadPath MaxInstances 1 Module PBXProjectFindModule Name Project Batch Find Tool BundleLoadPath MaxInstances n Module XCProjectFormatConflictsModule Name Project Format Conflicts List BundleLoadPath MaxInstances n Module PBXBookmarksModule Name Bookmarks Tool BundleLoadPath MaxInstances n Module PBXClassBrowserModule Name Class Browser BundleLoadPath MaxInstances n Module PBXCVSModule Name Source Code Control Tool BundleLoadPath MaxInstances n Module PBXDebugBreakpointsModule Name Debug Breakpoints Tool BundleLoadPath MaxInstances n Module XCDockableInspector Name Inspector BundleLoadPath MaxInstances n Module PBXOpenQuicklyModule Name Open Quickly Tool BundleLoadPath MaxInstances 1 Module PBXDebugSessionModule Name Debugger BundleLoadPath MaxInstances 1 Module PBXDebugCLIModule Name Debug Console BundleLoadPath MaxInstances n Module XCSnapshotModule Name Snapshots Tool BundlePath /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources Description DefaultDescriptionKey DockingSystemVisible Extension mode1v3 FavBarConfig PBXProjectModuleGUID 1411C50F0F6215CE007AA8C8 XCBarModuleItemNames XCBarModuleItems FirstTimeWindowDisplayed Identifier com.apple.perspectives.project.mode1v3 MajorVersion 33 MinorVersion 0 Name Default Notifications OpenEditors PerspectiveWidths -1 -1 Perspectives ChosenToolbarItems active-target-popup active-buildstyle-popup action NSToolbarFlexibleSpaceItem buildOrClean build-and-goOrGo com.apple.ide.PBXToolbarStopButton get-info toggle-editor NSToolbarFlexibleSpaceItem com.apple.pbx.toolbar.searchfield ControllerClassBaseName IconName WindowOfProjectWithEditor Identifier perspective.project IsVertical Layout BecomeActive ContentConfiguration PBXBottomSmartGroupGIDs 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 1C08E77C0454961000C914BD 1C37FABC05509CD000000102 1C37FABC05539CD112110102 E2644B35053B69B200211256 1C37FABC04509CD000100104 1CC0EA4004350EF90044410B 1CC0EA4004350EF90041110B PBXProjectModuleGUID 1CE0B1FE06471DED0097A5F4 PBXProjectModuleLabel Files PBXProjectStructureProvided yes PBXSmartGroupTreeModuleColumnData PBXSmartGroupTreeModuleColumnWidthsKey 186 PBXSmartGroupTreeModuleColumnsKey_v4 MainColumn PBXSmartGroupTreeModuleOutlineStateKey_v7 PBXSmartGroupTreeModuleOutlineStateExpansionKey 0145C6BF000FA8B211CA1586 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey {{0, 0}, {186, 338}} PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch XCSharingToken com.apple.Xcode.GFSharingToken GeometryConfiguration Frame {{0, 0}, {203, 356}} GroupTreeTableConfiguration MainColumn 186 RubberWindowFrame 615 612 690 397 0 0 1920 1178 Module PBXSmartGroupTreeModule Proportion 203pt Dock ContentConfiguration PBXProjectModuleGUID 1CE0B20306471E060097A5F4 PBXProjectModuleLabel MyNewFile14.java PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID 1CE0B20406471E060097A5F4 PBXProjectModuleLabel MyNewFile14.java SplitCount 1 StatusBarVisibility GeometryConfiguration Frame {{0, 0}, {482, 0}} RubberWindowFrame 615 612 690 397 0 0 1920 1178 Module PBXNavigatorGroup Proportion 0pt ContentConfiguration PBXProjectModuleGUID 1CE0B20506471E060097A5F4 PBXProjectModuleLabel Detail GeometryConfiguration Frame {{0, 5}, {482, 351}} RubberWindowFrame 615 612 690 397 0 0 1920 1178 Module XCDetailModule Proportion 351pt Proportion 482pt Name Project ServiceClasses XCModuleDock PBXSmartGroupTreeModule XCModuleDock PBXNavigatorGroup XCDetailModule TableOfContents 1411C50D0F6215CE007AA8C8 1CE0B1FE06471DED0097A5F4 1411C50E0F6215CE007AA8C8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 ToolbarConfiguration xcode.toolbar.config.defaultV3 ControllerClassBaseName IconName WindowOfProject Identifier perspective.morph IsVertical 0 Layout BecomeActive 1 ContentConfiguration PBXBottomSmartGroupGIDs 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 1C08E77C0454961000C914BD 1C37FABC05509CD000000102 1C37FABC05539CD112110102 E2644B35053B69B200211256 1C37FABC04509CD000100104 1CC0EA4004350EF90044410B 1CC0EA4004350EF90041110B PBXProjectModuleGUID 11E0B1FE06471DED0097A5F4 PBXProjectModuleLabel Files PBXProjectStructureProvided yes PBXSmartGroupTreeModuleColumnData PBXSmartGroupTreeModuleColumnWidthsKey 186 PBXSmartGroupTreeModuleColumnsKey_v4 MainColumn PBXSmartGroupTreeModuleOutlineStateKey_v7 PBXSmartGroupTreeModuleOutlineStateExpansionKey 29B97314FDCFA39411CA2CEA 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey {{0, 0}, {186, 337}} PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch 1 XCSharingToken com.apple.Xcode.GFSharingToken GeometryConfiguration Frame {{0, 0}, {203, 355}} GroupTreeTableConfiguration MainColumn 186 RubberWindowFrame 373 269 690 397 0 0 1440 878 Module PBXSmartGroupTreeModule Proportion 100% Name Morph PreferredWidth 300 ServiceClasses XCModuleDock PBXSmartGroupTreeModule TableOfContents 11E0B1FE06471DED0097A5F4 ToolbarConfiguration xcode.toolbar.config.default.shortV3 PerspectivesBarVisible ShelfIsVisible SourceDescription file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' StatusbarIsVisible TimeStamp 0.0 ToolbarDisplayMode 1 ToolbarIsVisible ToolbarSizeMode 1 Type Perspectives UpdateMessage The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? WindowJustification 5 WindowOrderList /Users/heron/Chess-49/Chess.xcodeproj WindowString 615 612 690 397 0 0 1920 1178 WindowToolsV3 Identifier windowTool.build Layout Dock ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID 1CD052900623707200166675 SplitCount 1 StatusBarVisibility 1 GeometryConfiguration Frame {{0, 0}, {500, 215}} RubberWindowFrame 192 257 500 500 0 0 1280 1002 Module PBXNavigatorGroup Proportion 218pt BecomeActive 1 ContentConfiguration PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel Build GeometryConfiguration Frame {{0, 222}, {500, 236}} RubberWindowFrame 192 257 500 500 0 0 1280 1002 Module PBXBuildResultsModule Proportion 236pt Proportion 458pt Name Build Results ServiceClasses PBXBuildResultsModule StatusbarIsVisible 1 TableOfContents 1C78EAA5065D492600B07095 1C78EAA6065D492600B07095 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID ToolbarConfiguration xcode.toolbar.config.buildV3 WindowString 192 257 500 500 0 0 1280 1002 Identifier windowTool.debugger Layout Dock ContentConfiguration Debugger HorizontalSplitView _collapsingFrameDimension 0.0 _indexOfCollapsedView 0 _percentageOfCollapsedView 0.0 isCollapsed yes sizes {{0, 0}, {317, 164}} {{317, 0}, {377, 164}} VerticalSplitView _collapsingFrameDimension 0.0 _indexOfCollapsedView 0 _percentageOfCollapsedView 0.0 isCollapsed yes sizes {{0, 0}, {694, 164}} {{0, 164}, {694, 216}} LauncherConfigVersion 8 PBXProjectModuleGUID 1C162984064C10D400B95A72 PBXProjectModuleLabel Debug - GLUTExamples (Underwater) GeometryConfiguration DebugConsoleDrawerSize {100, 120} DebugConsoleVisible None DebugConsoleWindowFrame {{200, 200}, {500, 300}} DebugSTDIOWindowFrame {{200, 200}, {500, 300}} Frame {{0, 0}, {694, 380}} RubberWindowFrame 321 238 694 422 0 0 1440 878 Module PBXDebugSessionModule Proportion 100% Proportion 100% Name Debugger ServiceClasses PBXDebugSessionModule StatusbarIsVisible 1 TableOfContents 1CD10A99069EF8BA00B06720 1C0AD2AB069F1E9B00FABCE6 1C162984064C10D400B95A72 1C0AD2AC069F1E9B00FABCE6 ToolbarConfiguration xcode.toolbar.config.debugV3 WindowString 321 238 694 422 0 0 1440 878 WindowToolGUID 1CD10A99069EF8BA00B06720 WindowToolIsVisible 0 Identifier windowTool.find Layout Dock Dock ContentConfiguration PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID 1CD0528D0623707200166675 SplitCount 1 StatusBarVisibility 1 GeometryConfiguration Frame {{0, 0}, {781, 167}} RubberWindowFrame 62 385 781 470 0 0 1440 878 Module PBXNavigatorGroup Proportion 781pt Proportion 50% BecomeActive 1 ContentConfiguration PBXProjectModuleGUID 1CD0528E0623707200166675 PBXProjectModuleLabel Project Find GeometryConfiguration Frame {{8, 0}, {773, 254}} RubberWindowFrame 62 385 781 470 0 0 1440 878 Module PBXProjectFindModule Proportion 50% Proportion 428pt Name Project Find ServiceClasses PBXProjectFindModule StatusbarIsVisible 1 TableOfContents 1C530D57069F1CE1000CFCEE 1C530D58069F1CE1000CFCEE 1C530D59069F1CE1000CFCEE 1CDD528C0622207200134675 1C530D5A069F1CE1000CFCEE 1CE0B1FE06471DED0097A5F4 1CD0528E0623707200166675 WindowString 62 385 781 470 0 0 1440 878 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible 0 Identifier MENUSEPARATOR Identifier windowTool.debuggerConsole Layout Dock BecomeActive 1 ContentConfiguration PBXProjectModuleGUID 1C78EAAC065D492600B07095 PBXProjectModuleLabel Debugger Console GeometryConfiguration Frame {{0, 0}, {650, 250}} RubberWindowFrame 516 632 650 250 0 0 1680 1027 Module PBXDebugCLIModule Proportion 209pt Proportion 209pt Name Debugger Console ServiceClasses PBXDebugCLIModule StatusbarIsVisible 1 TableOfContents 1C78EAAD065D492600B07095 1C78EAAE065D492600B07095 1C78EAAC065D492600B07095 ToolbarConfiguration xcode.toolbar.config.consoleV3 WindowString 650 41 650 250 0 0 1280 1002 WindowToolGUID 1C78EAAD065D492600B07095 WindowToolIsVisible 0 Identifier windowTool.snapshots Layout Dock Module XCSnapshotModule Proportion 100% Proportion 100% Name Snapshots ServiceClasses XCSnapshotModule StatusbarIsVisible Yes ToolbarConfiguration xcode.toolbar.config.snapshots WindowString 315 824 300 550 0 0 1440 878 WindowToolIsVisible Yes Identifier windowTool.scm Layout Dock ContentConfiguration PBXProjectModuleGUID 1C78EAB2065D492600B07095 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID 1C78EAB3065D492600B07095 SplitCount 1 StatusBarVisibility 1 GeometryConfiguration Frame {{0, 0}, {452, 0}} RubberWindowFrame 743 379 452 308 0 0 1280 1002 Module PBXNavigatorGroup Proportion 0pt BecomeActive 1 ContentConfiguration PBXProjectModuleGUID 1CD052920623707200166675 PBXProjectModuleLabel SCM GeometryConfiguration ConsoleFrame {{0, 259}, {452, 0}} Frame {{0, 7}, {452, 259}} RubberWindowFrame 743 379 452 308 0 0 1280 1002 TableConfiguration Status 30 FileName 199 Path 197.09500122070312 TableFrame {{0, 0}, {452, 250}} Module PBXCVSModule Proportion 262pt Proportion 266pt Name SCM ServiceClasses PBXCVSModule StatusbarIsVisible 1 TableOfContents 1C78EAB4065D492600B07095 1C78EAB5065D492600B07095 1C78EAB2065D492600B07095 1CD052920623707200166675 ToolbarConfiguration xcode.toolbar.config.scm WindowString 743 379 452 308 0 0 1280 1002 Identifier windowTool.breakpoints IsVertical 0 Layout Dock BecomeActive 1 ContentConfiguration PBXBottomSmartGroupGIDs 1C77FABC04509CD000000102 PBXProjectModuleGUID 1CE0B1FE06471DED0097A5F4 PBXProjectModuleLabel Files PBXProjectStructureProvided no PBXSmartGroupTreeModuleColumnData PBXSmartGroupTreeModuleColumnWidthsKey 168 PBXSmartGroupTreeModuleColumnsKey_v4 MainColumn PBXSmartGroupTreeModuleOutlineStateKey_v7 PBXSmartGroupTreeModuleOutlineStateExpansionKey 1C77FABC04509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey {{0, 0}, {168, 350}} PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch 0 GeometryConfiguration Frame {{0, 0}, {185, 368}} GroupTreeTableConfiguration MainColumn 168 RubberWindowFrame 315 424 744 409 0 0 1440 878 Module PBXSmartGroupTreeModule Proportion 185pt ContentConfiguration PBXProjectModuleGUID 1CA1AED706398EBD00589147 PBXProjectModuleLabel Detail GeometryConfiguration Frame {{190, 0}, {554, 368}} RubberWindowFrame 315 424 744 409 0 0 1440 878 Module XCDetailModule Proportion 554pt Proportion 368pt MajorVersion 3 MinorVersion 0 Name Breakpoints ServiceClasses PBXSmartGroupTreeModule XCDetailModule StatusbarIsVisible 1 TableOfContents 1CDDB66807F98D9800BB5817 1CDDB66907F98D9800BB5817 1CE0B1FE06471DED0097A5F4 1CA1AED706398EBD00589147 ToolbarConfiguration xcode.toolbar.config.breakpointsV3 WindowString 315 424 744 409 0 0 1440 878 WindowToolGUID 1CDDB66807F98D9800BB5817 WindowToolIsVisible 1 Identifier windowTool.debugAnimator Layout Dock Module PBXNavigatorGroup Proportion 100% Proportion 100% Name Debug Visualizer ServiceClasses PBXNavigatorGroup StatusbarIsVisible 1 ToolbarConfiguration xcode.toolbar.config.debugAnimatorV3 WindowString 100 100 700 500 0 0 1280 1002 Identifier windowTool.bookmarks Layout Dock Module PBXBookmarksModule Proportion 100% Proportion 100% Name Bookmarks ServiceClasses PBXBookmarksModule StatusbarIsVisible 0 WindowString 538 42 401 187 0 0 1280 1002 Identifier windowTool.projectFormatConflicts Layout Dock Module XCProjectFormatConflictsModule Proportion 100% Proportion 100% Name Project Format Conflicts ServiceClasses XCProjectFormatConflictsModule StatusbarIsVisible 0 WindowContentMinSize 450 300 WindowString 50 850 472 307 0 0 1440 877 Identifier windowTool.classBrowser Layout Dock BecomeActive 1 ContentConfiguration OptionsSetName Hierarchy, all classes PBXProjectModuleGUID 1CA6456E063B45B4001379D8 PBXProjectModuleLabel Class Browser - NSObject GeometryConfiguration ClassesFrame {{0, 0}, {374, 96}} ClassesTreeTableConfiguration PBXClassNameColumnIdentifier 208 PBXClassBookColumnIdentifier 22 Frame {{0, 0}, {630, 331}} MembersFrame {{0, 105}, {374, 395}} MembersTreeTableConfiguration PBXMemberTypeIconColumnIdentifier 22 PBXMemberNameColumnIdentifier 216 PBXMemberTypeColumnIdentifier 97 PBXMemberBookColumnIdentifier 22 PBXModuleWindowStatusBarHidden2 1 RubberWindowFrame 385 179 630 352 0 0 1440 878 Module PBXClassBrowserModule Proportion 332pt Proportion 332pt Name Class Browser ServiceClasses PBXClassBrowserModule StatusbarIsVisible 0 TableOfContents 1C0AD2AF069F1E9B00FABCE6 1C0AD2B0069F1E9B00FABCE6 1CA6456E063B45B4001379D8 ToolbarConfiguration xcode.toolbar.config.classbrowser WindowString 385 179 630 352 0 0 1440 878 WindowToolGUID 1C0AD2AF069F1E9B00FABCE6 WindowToolIsVisible 0 Identifier windowTool.refactoring IncludeInToolsMenu 0 Layout Dock BecomeActive 1 GeometryConfiguration Frame {0, 0}, {500, 335} RubberWindowFrame {0, 0}, {500, 335} Module XCRefactoringModule Proportion 100% Proportion 100% Name Refactoring ServiceClasses XCRefactoringModule WindowString 200 200 500 356 0 0 1920 1200 chess.app-33/Chess.xcodeproj/project.pbxproj0000644000000000000000000011761713034414342020013 0ustar rootroot// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXApplicationTarget section */ 0145C726000FA8B211CA1586 /* Chess (Application) */ = { isa = PBXApplicationTarget; buildConfigurationList = 1411C50A0F6215A8007AA8C8 /* Build configuration list for PBXApplicationTarget "Chess (Application)" */; buildPhases = ( 0145C727000FA8B211CA1586 /* Headers */, 0145C733000FA8B211CA1586 /* Resources */, 0145C752000FA8B211CA1586 /* Sources */, 0145C75E000FA8B211CA1586 /* Frameworks */, 0145C762000FA8B211CA1586 /* Rez */, ); dependencies = ( ); name = "Chess (Application)"; productInstallPath = "$(SYSTEM_APPS_DIR)"; productName = "Chess (Application)"; productReference = 0145C725000FA8B211CA1586 /* Chess.app */; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions chess CFBundleTypeIconFile chess.icns CFBundleTypeName chess CFBundleTypeRole Editor CFBundleExecutable Chess CFBundleGetInfoString CFBundleIconFile chess.icns CFBundleIdentifier com.apple.Chess CFBundleInfoDictionaryVersion 6.0 CFBundleName Chess CFBundlePackageType APPL CFBundleShortVersionString 1.2 CFBundleSignature ???? CFBundleVersion 1.2 NSMainNibFile Chess NSPrincipalClass Chess "; }; /* End PBXApplicationTarget section */ /* Begin PBXBuildFile section */ 0145C728000FA8B211CA1586 /* Chess.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6CA000FA8B211CA1586 /* Chess.h */; }; 0145C729000FA8B211CA1586 /* Board.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6CB000FA8B211CA1586 /* Board.h */; }; 0145C72A000FA8B211CA1586 /* Board3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6CC000FA8B211CA1586 /* Board3D.h */; }; 0145C72B000FA8B211CA1586 /* Square.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6CD000FA8B211CA1586 /* Square.h */; }; 0145C72C000FA8B211CA1586 /* Square3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6CE000FA8B211CA1586 /* Square3D.h */; }; 0145C72D000FA8B211CA1586 /* ResponseMeter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6CF000FA8B211CA1586 /* ResponseMeter.h */; }; 0145C72E000FA8B211CA1586 /* Clock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6D0000FA8B211CA1586 /* Clock.h */; }; 0145C72F000FA8B211CA1586 /* gnuglue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6D1000FA8B211CA1586 /* gnuglue.h */; }; 0145C730000FA8B211CA1586 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6D2000FA8B211CA1586 /* version.h */; }; 0145C731000FA8B211CA1586 /* ChessListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C6D3000FA8B211CA1586 /* ChessListener.h */; }; 0145C732000FA8B211CA1586 /* gnuchess.h in Headers */ = {isa = PBXBuildFile; fileRef = 0145C716000FA8B211CA1586 /* gnuchess.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0145C734000FA8B211CA1586 /* Chess.nib in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6D8000FA8B211CA1586 /* Chess.nib */; }; 0145C735000FA8B211CA1586 /* black_knight.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6DB000FA8B211CA1586 /* black_knight.tiff */; }; 0145C736000FA8B211CA1586 /* black_queen.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6DD000FA8B211CA1586 /* black_queen.tiff */; }; 0145C737000FA8B211CA1586 /* 3d_board.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6DF000FA8B211CA1586 /* 3d_board.tiff */; }; 0145C738000FA8B211CA1586 /* 3d_white_sample.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6E1000FA8B211CA1586 /* 3d_white_sample.tiff */; }; 0145C739000FA8B211CA1586 /* white_knight.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6E3000FA8B211CA1586 /* white_knight.tiff */; }; 0145C73A000FA8B211CA1586 /* white_queen.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6E5000FA8B211CA1586 /* white_queen.tiff */; }; 0145C73B000FA8B211CA1586 /* white.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6E7000FA8B211CA1586 /* white.tiff */; }; 0145C73C000FA8B211CA1586 /* ChessDoc.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6E9000FA8B211CA1586 /* ChessDoc.tiff */; }; 0145C73D000FA8B211CA1586 /* black_king.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6EA000FA8B211CA1586 /* black_king.tiff */; }; 0145C73E000FA8B211CA1586 /* 3d_plastic.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6EC000FA8B211CA1586 /* 3d_plastic.tiff */; }; 0145C73F000FA8B211CA1586 /* clock.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6EE000FA8B211CA1586 /* clock.tiff */; }; 0145C740000FA8B211CA1586 /* white_king.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6F0000FA8B211CA1586 /* white_king.tiff */; }; 0145C741000FA8B211CA1586 /* white_rook.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6F2000FA8B211CA1586 /* white_rook.tiff */; }; 0145C742000FA8B211CA1586 /* 3d_pieces.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6F4000FA8B211CA1586 /* 3d_pieces.tiff */; }; 0145C743000FA8B211CA1586 /* black_bishop.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6F6000FA8B211CA1586 /* black_bishop.tiff */; }; 0145C744000FA8B211CA1586 /* black_pawn.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6F8000FA8B211CA1586 /* black_pawn.tiff */; }; 0145C745000FA8B211CA1586 /* white_bishop.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6FA000FA8B211CA1586 /* white_bishop.tiff */; }; 0145C746000FA8B211CA1586 /* ChessApp.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6FC000FA8B211CA1586 /* ChessApp.tiff */; }; 0145C747000FA8B211CA1586 /* white_pawn.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6FD000FA8B211CA1586 /* white_pawn.tiff */; }; 0145C748000FA8B211CA1586 /* black_rook.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C6FF000FA8B211CA1586 /* black_rook.tiff */; }; 0145C749000FA8B211CA1586 /* black.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C701000FA8B211CA1586 /* black.tiff */; }; 0145C74A000FA8B211CA1586 /* 3d_black_sample.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C703000FA8B211CA1586 /* 3d_black_sample.tiff */; }; 0145C74B000FA8B211CA1586 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0145C706000FA8B211CA1586 /* Localizable.strings */; }; 0145C74C000FA8B211CA1586 /* ApplicationNameImage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C708000FA8B211CA1586 /* ApplicationNameImage.tiff */; }; 0145C74D000FA8B211CA1586 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 0145C709000FA8B211CA1586 /* Credits.rtf */; }; 0145C74E000FA8B211CA1586 /* .snd.snd in Resources */ = {isa = PBXBuildFile; fileRef = 0145C70B000FA8B211CA1586 /* .snd.snd */; }; 0145C74F000FA8B211CA1586 /* chess.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0145C70D000FA8B211CA1586 /* chess.tiff */; }; 0145C750000FA8B211CA1586 /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 0145C71A000FA8B211CA1586 /* COPYING */; }; 0145C751000FA8B211CA1586 /* gnuchess.book in Resources */ = {isa = PBXBuildFile; fileRef = 0145C71B000FA8B211CA1586 /* gnuchess.book */; }; 0145C753000FA8B211CA1586 /* Chess.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C1000FA8B211CA1586 /* Chess.m */; settings = {ATTRIBUTES = (); }; }; 0145C754000FA8B211CA1586 /* Board.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C2000FA8B211CA1586 /* Board.m */; settings = {ATTRIBUTES = (); }; }; 0145C755000FA8B211CA1586 /* Board3D.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C3000FA8B211CA1586 /* Board3D.m */; settings = {ATTRIBUTES = (); }; }; 0145C756000FA8B211CA1586 /* Square.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C4000FA8B211CA1586 /* Square.m */; settings = {ATTRIBUTES = (); }; }; 0145C757000FA8B211CA1586 /* Square3D.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C5000FA8B211CA1586 /* Square3D.m */; settings = {ATTRIBUTES = (); }; }; 0145C758000FA8B211CA1586 /* ResponseMeter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C6000FA8B211CA1586 /* ResponseMeter.m */; settings = {ATTRIBUTES = (); }; }; 0145C759000FA8B211CA1586 /* Clock.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C7000FA8B211CA1586 /* Clock.m */; settings = {ATTRIBUTES = (); }; }; 0145C75A000FA8B211CA1586 /* ChessListener.cp in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6C8000FA8B211CA1586 /* ChessListener.cp */; settings = {ATTRIBUTES = (); }; }; 0145C75B000FA8B211CA1586 /* gnuglue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6D5000FA8B211CA1586 /* gnuglue.m */; settings = {ATTRIBUTES = (); }; }; 0145C75C000FA8B211CA1586 /* Chess_main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0145C6D6000FA8B211CA1586 /* Chess_main.m */; settings = {ATTRIBUTES = (); }; }; 0145C75D000FA8B211CA1586 /* gnuchess.c in Sources */ = {isa = PBXBuildFile; fileRef = 0145C718000FA8B211CA1586 /* gnuchess.c */; settings = {ATTRIBUTES = (); }; }; 0145C75F000FA8B211CA1586 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0145C720000FA8B211CA1586 /* Carbon.framework */; }; 0145C765000FA98111CA1586 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0145C764000FA98111CA1586 /* Cocoa.framework */; }; 0A6F9B550019133F11CA14D0 /* SpeechHelp.xml in Resources */ = {isa = PBXBuildFile; fileRef = 0A6F9B530019133F11CA14D0 /* SpeechHelp.xml */; }; 0D378EBA00263F6411CA14D0 /* chess.icns in Resources */ = {isa = PBXBuildFile; fileRef = 0D378EB900263F6411CA14D0 /* chess.icns */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 0145C6C1000FA8B211CA1586 /* Chess.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Chess.m; sourceTree = ""; }; 0145C6C2000FA8B211CA1586 /* Board.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Board.m; sourceTree = ""; }; 0145C6C3000FA8B211CA1586 /* Board3D.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Board3D.m; sourceTree = ""; }; 0145C6C4000FA8B211CA1586 /* Square.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Square.m; sourceTree = ""; }; 0145C6C5000FA8B211CA1586 /* Square3D.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Square3D.m; sourceTree = ""; }; 0145C6C6000FA8B211CA1586 /* ResponseMeter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ResponseMeter.m; sourceTree = ""; }; 0145C6C7000FA8B211CA1586 /* Clock.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Clock.m; sourceTree = ""; }; 0145C6C8000FA8B211CA1586 /* ChessListener.cp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ChessListener.cp; sourceTree = ""; }; 0145C6CA000FA8B211CA1586 /* Chess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Chess.h; sourceTree = ""; }; 0145C6CB000FA8B211CA1586 /* Board.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Board.h; sourceTree = ""; }; 0145C6CC000FA8B211CA1586 /* Board3D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Board3D.h; sourceTree = ""; }; 0145C6CD000FA8B211CA1586 /* Square.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Square.h; sourceTree = ""; }; 0145C6CE000FA8B211CA1586 /* Square3D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Square3D.h; sourceTree = ""; }; 0145C6CF000FA8B211CA1586 /* ResponseMeter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ResponseMeter.h; sourceTree = ""; }; 0145C6D0000FA8B211CA1586 /* Clock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Clock.h; sourceTree = ""; }; 0145C6D1000FA8B211CA1586 /* gnuglue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gnuglue.h; sourceTree = ""; }; 0145C6D2000FA8B211CA1586 /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; 0145C6D3000FA8B211CA1586 /* ChessListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChessListener.h; sourceTree = ""; }; 0145C6D5000FA8B211CA1586 /* gnuglue.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = gnuglue.m; sourceTree = ""; }; 0145C6D6000FA8B211CA1586 /* Chess_main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Chess_main.m; sourceTree = ""; }; 0145C6D9000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Chess.nib; sourceTree = ""; }; 0145C6DC000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black_knight.tiff; sourceTree = ""; }; 0145C6DE000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black_queen.tiff; sourceTree = ""; }; 0145C6E0000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/3d_board.tiff; sourceTree = ""; }; 0145C6E2000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/3d_white_sample.tiff; sourceTree = ""; }; 0145C6E4000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white_knight.tiff; sourceTree = ""; }; 0145C6E6000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white_queen.tiff; sourceTree = ""; }; 0145C6E8000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white.tiff; sourceTree = ""; }; 0145C6E9000FA8B211CA1586 /* ChessDoc.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = ChessDoc.tiff; sourceTree = ""; }; 0145C6EB000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black_king.tiff; sourceTree = ""; }; 0145C6ED000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/3d_plastic.tiff; sourceTree = ""; }; 0145C6EF000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/clock.tiff; sourceTree = ""; }; 0145C6F1000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white_king.tiff; sourceTree = ""; }; 0145C6F3000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white_rook.tiff; sourceTree = ""; }; 0145C6F5000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/3d_pieces.tiff; sourceTree = ""; }; 0145C6F7000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black_bishop.tiff; sourceTree = ""; }; 0145C6F9000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black_pawn.tiff; sourceTree = ""; }; 0145C6FB000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white_bishop.tiff; sourceTree = ""; }; 0145C6FC000FA8B211CA1586 /* ChessApp.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = ChessApp.tiff; sourceTree = ""; }; 0145C6FE000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/white_pawn.tiff; sourceTree = ""; }; 0145C700000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black_rook.tiff; sourceTree = ""; }; 0145C702000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/black.tiff; sourceTree = ""; }; 0145C704000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = English; path = English.lproj/3d_black_sample.tiff; sourceTree = ""; }; 0145C707000FA8B211CA1586 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; 0145C708000FA8B211CA1586 /* ApplicationNameImage.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = ApplicationNameImage.tiff; sourceTree = ""; }; 0145C70A000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; }; 0145C70C000FA8B211CA1586 /* English */ = {isa = PBXFileReference; lastKnownFileType = file; name = English; path = English.lproj/.snd.snd; sourceTree = ""; }; 0145C70D000FA8B211CA1586 /* chess.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = chess.tiff; sourceTree = ""; }; 0145C70F000FA8B211CA1586 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = file; path = Makefile; sourceTree = ""; }; 0145C710000FA8B211CA1586 /* Makefile.postamble */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.postamble; sourceTree = ""; }; 0145C711000FA8B211CA1586 /* Makefile.preamble */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.preamble; sourceTree = ""; }; 0145C712000FA8B211CA1586 /* CustomInfo.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = CustomInfo.plist; sourceTree = ""; }; 0145C716000FA8B211CA1586 /* gnuchess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gnuchess.h; sourceTree = ""; }; 0145C718000FA8B211CA1586 /* gnuchess.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gnuchess.c; sourceTree = ""; }; 0145C71A000FA8B211CA1586 /* COPYING */ = {isa = PBXFileReference; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; 0145C71B000FA8B211CA1586 /* gnuchess.book */ = {isa = PBXFileReference; lastKnownFileType = text; path = gnuchess.book; sourceTree = ""; }; 0145C71D000FA8B211CA1586 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; 0145C71E000FA8B211CA1586 /* Makefile.preamble */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.preamble; sourceTree = ""; }; 0145C720000FA8B211CA1586 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 0145C725000FA8B211CA1586 /* Chess.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; path = Chess.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0145C764000FA98111CA1586 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 0A6F9B540019133F11CA14D0 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = English; path = English.lproj/SpeechHelp.xml; sourceTree = ""; }; 0D378EB900263F6411CA14D0 /* chess.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = chess.icns; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 0145C75E000FA8B211CA1586 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 0145C75F000FA8B211CA1586 /* Carbon.framework in Frameworks */, 0145C765000FA98111CA1586 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 0145C6BF000FA8B211CA1586 /* Chess */ = { isa = PBXGroup; children = ( 0145C6C0000FA8B211CA1586 /* Classes */, 0145C6C9000FA8B211CA1586 /* Headers */, 0145C6D4000FA8B211CA1586 /* Other Sources */, 0145C6D7000FA8B211CA1586 /* Interfaces */, 0145C6DA000FA8B211CA1586 /* Images */, 0145C705000FA8B211CA1586 /* Resources */, 0145C70E000FA8B211CA1586 /* Supporting Files */, 0145C714000FA8B211CA1586 /* gnuchess */, 0145C71F000FA8B211CA1586 /* External Frameworks and Libraries */, 0145C724000FA8B211CA1586 /* Products */, ); name = Chess; sourceTree = ""; }; 0145C6C0000FA8B211CA1586 /* Classes */ = { isa = PBXGroup; children = ( 0145C6C1000FA8B211CA1586 /* Chess.m */, 0145C6C2000FA8B211CA1586 /* Board.m */, 0145C6C3000FA8B211CA1586 /* Board3D.m */, 0145C6C4000FA8B211CA1586 /* Square.m */, 0145C6C5000FA8B211CA1586 /* Square3D.m */, 0145C6C6000FA8B211CA1586 /* ResponseMeter.m */, 0145C6C7000FA8B211CA1586 /* Clock.m */, 0145C6C8000FA8B211CA1586 /* ChessListener.cp */, ); name = Classes; sourceTree = ""; }; 0145C6C9000FA8B211CA1586 /* Headers */ = { isa = PBXGroup; children = ( 0145C6CA000FA8B211CA1586 /* Chess.h */, 0145C6CB000FA8B211CA1586 /* Board.h */, 0145C6CC000FA8B211CA1586 /* Board3D.h */, 0145C6CD000FA8B211CA1586 /* Square.h */, 0145C6CE000FA8B211CA1586 /* Square3D.h */, 0145C6CF000FA8B211CA1586 /* ResponseMeter.h */, 0145C6D0000FA8B211CA1586 /* Clock.h */, 0145C6D1000FA8B211CA1586 /* gnuglue.h */, 0145C6D2000FA8B211CA1586 /* version.h */, 0145C6D3000FA8B211CA1586 /* ChessListener.h */, ); name = Headers; sourceTree = ""; }; 0145C6D4000FA8B211CA1586 /* Other Sources */ = { isa = PBXGroup; children = ( 0145C6D5000FA8B211CA1586 /* gnuglue.m */, 0145C6D6000FA8B211CA1586 /* Chess_main.m */, ); name = "Other Sources"; sourceTree = ""; }; 0145C6D7000FA8B211CA1586 /* Interfaces */ = { isa = PBXGroup; children = ( 0145C6D8000FA8B211CA1586 /* Chess.nib */, ); name = Interfaces; sourceTree = ""; }; 0145C6DA000FA8B211CA1586 /* Images */ = { isa = PBXGroup; children = ( 0145C6DB000FA8B211CA1586 /* black_knight.tiff */, 0145C6DD000FA8B211CA1586 /* black_queen.tiff */, 0145C6DF000FA8B211CA1586 /* 3d_board.tiff */, 0145C6E1000FA8B211CA1586 /* 3d_white_sample.tiff */, 0145C6E3000FA8B211CA1586 /* white_knight.tiff */, 0145C6E5000FA8B211CA1586 /* white_queen.tiff */, 0145C6E7000FA8B211CA1586 /* white.tiff */, 0145C6E9000FA8B211CA1586 /* ChessDoc.tiff */, 0145C6EA000FA8B211CA1586 /* black_king.tiff */, 0145C6EC000FA8B211CA1586 /* 3d_plastic.tiff */, 0145C6EE000FA8B211CA1586 /* clock.tiff */, 0145C6F0000FA8B211CA1586 /* white_king.tiff */, 0145C6F2000FA8B211CA1586 /* white_rook.tiff */, 0145C6F4000FA8B211CA1586 /* 3d_pieces.tiff */, 0145C6F6000FA8B211CA1586 /* black_bishop.tiff */, 0145C6F8000FA8B211CA1586 /* black_pawn.tiff */, 0145C6FA000FA8B211CA1586 /* white_bishop.tiff */, 0145C6FC000FA8B211CA1586 /* ChessApp.tiff */, 0145C6FD000FA8B211CA1586 /* white_pawn.tiff */, 0145C6FF000FA8B211CA1586 /* black_rook.tiff */, 0145C701000FA8B211CA1586 /* black.tiff */, 0145C703000FA8B211CA1586 /* 3d_black_sample.tiff */, ); name = Images; sourceTree = ""; }; 0145C705000FA8B211CA1586 /* Resources */ = { isa = PBXGroup; children = ( 0145C706000FA8B211CA1586 /* Localizable.strings */, 0145C708000FA8B211CA1586 /* ApplicationNameImage.tiff */, 0145C709000FA8B211CA1586 /* Credits.rtf */, 0145C70B000FA8B211CA1586 /* .snd.snd */, 0145C70D000FA8B211CA1586 /* chess.tiff */, 0A6F9B530019133F11CA14D0 /* SpeechHelp.xml */, 0D378EB900263F6411CA14D0 /* chess.icns */, ); name = Resources; sourceTree = ""; }; 0145C70E000FA8B211CA1586 /* Supporting Files */ = { isa = PBXGroup; children = ( 0145C70F000FA8B211CA1586 /* Makefile */, 0145C710000FA8B211CA1586 /* Makefile.postamble */, 0145C711000FA8B211CA1586 /* Makefile.preamble */, 0145C712000FA8B211CA1586 /* CustomInfo.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 0145C714000FA8B211CA1586 /* gnuchess */ = { isa = PBXGroup; children = ( 0145C715000FA8B211CA1586 /* Headers */, 0145C717000FA8B211CA1586 /* Other Sources */, 0145C719000FA8B211CA1586 /* Resources */, 0145C71C000FA8B211CA1586 /* Supporting Files */, ); name = gnuchess; path = gnuchess.subproj; sourceTree = ""; }; 0145C715000FA8B211CA1586 /* Headers */ = { isa = PBXGroup; children = ( 0145C716000FA8B211CA1586 /* gnuchess.h */, ); name = Headers; sourceTree = ""; }; 0145C717000FA8B211CA1586 /* Other Sources */ = { isa = PBXGroup; children = ( 0145C718000FA8B211CA1586 /* gnuchess.c */, ); name = "Other Sources"; sourceTree = ""; }; 0145C719000FA8B211CA1586 /* Resources */ = { isa = PBXGroup; children = ( 0145C71A000FA8B211CA1586 /* COPYING */, 0145C71B000FA8B211CA1586 /* gnuchess.book */, ); name = Resources; sourceTree = ""; }; 0145C71C000FA8B211CA1586 /* Supporting Files */ = { isa = PBXGroup; children = ( 0145C71D000FA8B211CA1586 /* Makefile */, 0145C71E000FA8B211CA1586 /* Makefile.preamble */, ); name = "Supporting Files"; sourceTree = ""; }; 0145C71F000FA8B211CA1586 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 0145C764000FA98111CA1586 /* Cocoa.framework */, 0145C720000FA8B211CA1586 /* Carbon.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 0145C724000FA8B211CA1586 /* Products */ = { isa = PBXGroup; children = ( 0145C725000FA8B211CA1586 /* Chess.app */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 0145C727000FA8B211CA1586 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 0145C728000FA8B211CA1586 /* Chess.h in Headers */, 0145C729000FA8B211CA1586 /* Board.h in Headers */, 0145C72A000FA8B211CA1586 /* Board3D.h in Headers */, 0145C72B000FA8B211CA1586 /* Square.h in Headers */, 0145C72C000FA8B211CA1586 /* Square3D.h in Headers */, 0145C72D000FA8B211CA1586 /* ResponseMeter.h in Headers */, 0145C72E000FA8B211CA1586 /* Clock.h in Headers */, 0145C72F000FA8B211CA1586 /* gnuglue.h in Headers */, 0145C730000FA8B211CA1586 /* version.h in Headers */, 0145C731000FA8B211CA1586 /* ChessListener.h in Headers */, 0145C732000FA8B211CA1586 /* gnuchess.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXProject section */ 0145C6BE000FA8B211CA1586 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1411C5090F6215A8007AA8C8 /* Build configuration list for PBXProject "Chess" */; compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 0; mainGroup = 0145C6BF000FA8B211CA1586 /* Chess */; productRefGroup = 0145C724000FA8B211CA1586 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 0145C726000FA8B211CA1586 /* Chess (Application) */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 0145C733000FA8B211CA1586 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 0145C734000FA8B211CA1586 /* Chess.nib in Resources */, 0145C735000FA8B211CA1586 /* black_knight.tiff in Resources */, 0145C736000FA8B211CA1586 /* black_queen.tiff in Resources */, 0145C737000FA8B211CA1586 /* 3d_board.tiff in Resources */, 0145C738000FA8B211CA1586 /* 3d_white_sample.tiff in Resources */, 0145C739000FA8B211CA1586 /* white_knight.tiff in Resources */, 0145C73A000FA8B211CA1586 /* white_queen.tiff in Resources */, 0145C73B000FA8B211CA1586 /* white.tiff in Resources */, 0145C73C000FA8B211CA1586 /* ChessDoc.tiff in Resources */, 0145C73D000FA8B211CA1586 /* black_king.tiff in Resources */, 0145C73E000FA8B211CA1586 /* 3d_plastic.tiff in Resources */, 0145C73F000FA8B211CA1586 /* clock.tiff in Resources */, 0145C740000FA8B211CA1586 /* white_king.tiff in Resources */, 0145C741000FA8B211CA1586 /* white_rook.tiff in Resources */, 0145C742000FA8B211CA1586 /* 3d_pieces.tiff in Resources */, 0145C743000FA8B211CA1586 /* black_bishop.tiff in Resources */, 0145C744000FA8B211CA1586 /* black_pawn.tiff in Resources */, 0145C745000FA8B211CA1586 /* white_bishop.tiff in Resources */, 0145C746000FA8B211CA1586 /* ChessApp.tiff in Resources */, 0145C747000FA8B211CA1586 /* white_pawn.tiff in Resources */, 0145C748000FA8B211CA1586 /* black_rook.tiff in Resources */, 0145C749000FA8B211CA1586 /* black.tiff in Resources */, 0145C74A000FA8B211CA1586 /* 3d_black_sample.tiff in Resources */, 0145C74B000FA8B211CA1586 /* Localizable.strings in Resources */, 0145C74C000FA8B211CA1586 /* ApplicationNameImage.tiff in Resources */, 0145C74D000FA8B211CA1586 /* Credits.rtf in Resources */, 0145C74E000FA8B211CA1586 /* .snd.snd in Resources */, 0145C74F000FA8B211CA1586 /* chess.tiff in Resources */, 0145C750000FA8B211CA1586 /* COPYING in Resources */, 0145C751000FA8B211CA1586 /* gnuchess.book in Resources */, 0A6F9B550019133F11CA14D0 /* SpeechHelp.xml in Resources */, 0D378EBA00263F6411CA14D0 /* chess.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ 0145C762000FA8B211CA1586 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 0145C752000FA8B211CA1586 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0145C753000FA8B211CA1586 /* Chess.m in Sources */, 0145C754000FA8B211CA1586 /* Board.m in Sources */, 0145C755000FA8B211CA1586 /* Board3D.m in Sources */, 0145C756000FA8B211CA1586 /* Square.m in Sources */, 0145C757000FA8B211CA1586 /* Square3D.m in Sources */, 0145C758000FA8B211CA1586 /* ResponseMeter.m in Sources */, 0145C759000FA8B211CA1586 /* Clock.m in Sources */, 0145C75A000FA8B211CA1586 /* ChessListener.cp in Sources */, 0145C75B000FA8B211CA1586 /* gnuglue.m in Sources */, 0145C75C000FA8B211CA1586 /* Chess_main.m in Sources */, 0145C75D000FA8B211CA1586 /* gnuchess.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 0145C6D8000FA8B211CA1586 /* Chess.nib */ = { isa = PBXVariantGroup; children = ( 0145C6D9000FA8B211CA1586 /* English */, ); name = Chess.nib; sourceTree = ""; }; 0145C6DB000FA8B211CA1586 /* black_knight.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6DC000FA8B211CA1586 /* English */, ); name = black_knight.tiff; sourceTree = ""; }; 0145C6DD000FA8B211CA1586 /* black_queen.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6DE000FA8B211CA1586 /* English */, ); name = black_queen.tiff; sourceTree = ""; }; 0145C6DF000FA8B211CA1586 /* 3d_board.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6E0000FA8B211CA1586 /* English */, ); name = 3d_board.tiff; sourceTree = ""; }; 0145C6E1000FA8B211CA1586 /* 3d_white_sample.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6E2000FA8B211CA1586 /* English */, ); name = 3d_white_sample.tiff; sourceTree = ""; }; 0145C6E3000FA8B211CA1586 /* white_knight.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6E4000FA8B211CA1586 /* English */, ); name = white_knight.tiff; sourceTree = ""; }; 0145C6E5000FA8B211CA1586 /* white_queen.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6E6000FA8B211CA1586 /* English */, ); name = white_queen.tiff; sourceTree = ""; }; 0145C6E7000FA8B211CA1586 /* white.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6E8000FA8B211CA1586 /* English */, ); name = white.tiff; sourceTree = ""; }; 0145C6EA000FA8B211CA1586 /* black_king.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6EB000FA8B211CA1586 /* English */, ); name = black_king.tiff; sourceTree = ""; }; 0145C6EC000FA8B211CA1586 /* 3d_plastic.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6ED000FA8B211CA1586 /* English */, ); name = 3d_plastic.tiff; sourceTree = ""; }; 0145C6EE000FA8B211CA1586 /* clock.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6EF000FA8B211CA1586 /* English */, ); name = clock.tiff; sourceTree = ""; }; 0145C6F0000FA8B211CA1586 /* white_king.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6F1000FA8B211CA1586 /* English */, ); name = white_king.tiff; sourceTree = ""; }; 0145C6F2000FA8B211CA1586 /* white_rook.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6F3000FA8B211CA1586 /* English */, ); name = white_rook.tiff; sourceTree = ""; }; 0145C6F4000FA8B211CA1586 /* 3d_pieces.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6F5000FA8B211CA1586 /* English */, ); name = 3d_pieces.tiff; sourceTree = ""; }; 0145C6F6000FA8B211CA1586 /* black_bishop.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6F7000FA8B211CA1586 /* English */, ); name = black_bishop.tiff; sourceTree = ""; }; 0145C6F8000FA8B211CA1586 /* black_pawn.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6F9000FA8B211CA1586 /* English */, ); name = black_pawn.tiff; sourceTree = ""; }; 0145C6FA000FA8B211CA1586 /* white_bishop.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6FB000FA8B211CA1586 /* English */, ); name = white_bishop.tiff; sourceTree = ""; }; 0145C6FD000FA8B211CA1586 /* white_pawn.tiff */ = { isa = PBXVariantGroup; children = ( 0145C6FE000FA8B211CA1586 /* English */, ); name = white_pawn.tiff; sourceTree = ""; }; 0145C6FF000FA8B211CA1586 /* black_rook.tiff */ = { isa = PBXVariantGroup; children = ( 0145C700000FA8B211CA1586 /* English */, ); name = black_rook.tiff; sourceTree = ""; }; 0145C701000FA8B211CA1586 /* black.tiff */ = { isa = PBXVariantGroup; children = ( 0145C702000FA8B211CA1586 /* English */, ); name = black.tiff; sourceTree = ""; }; 0145C703000FA8B211CA1586 /* 3d_black_sample.tiff */ = { isa = PBXVariantGroup; children = ( 0145C704000FA8B211CA1586 /* English */, ); name = 3d_black_sample.tiff; sourceTree = ""; }; 0145C706000FA8B211CA1586 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( 0145C707000FA8B211CA1586 /* English */, ); name = Localizable.strings; sourceTree = ""; }; 0145C709000FA8B211CA1586 /* Credits.rtf */ = { isa = PBXVariantGroup; children = ( 0145C70A000FA8B211CA1586 /* English */, ); name = Credits.rtf; sourceTree = ""; }; 0145C70B000FA8B211CA1586 /* .snd.snd */ = { isa = PBXVariantGroup; children = ( 0145C70C000FA8B211CA1586 /* English */, ); name = .snd.snd; sourceTree = ""; }; 0A6F9B530019133F11CA14D0 /* SpeechHelp.xml */ = { isa = PBXVariantGroup; children = ( 0A6F9B540019133F11CA14D0 /* English */, ); name = SpeechHelp.xml; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 1411C5030F6215A8007AA8C8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Development; }; 1411C5040F6215A8007AA8C8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Deployment; }; 1411C5050F6215A8007AA8C8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Default; }; 1411C5060F6215A8007AA8C8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers\""; INSTALL_PATH = "$(SYSTEM_APPS_DIR)"; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = Chess; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; ZERO_LINK = YES; }; name = Development; }; 1411C5070F6215A8007AA8C8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; HEADER_SEARCH_PATHS = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers\""; INSTALL_PATH = "$(SYSTEM_APPS_DIR)"; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = Chess; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Deployment; }; 1411C5080F6215A8007AA8C8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { HEADER_SEARCH_PATHS = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers\""; INSTALL_PATH = "$(SYSTEM_APPS_DIR)"; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = Chess; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; }; name = Default; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1411C5090F6215A8007AA8C8 /* Build configuration list for PBXProject "Chess" */ = { isa = XCConfigurationList; buildConfigurations = ( 1411C5030F6215A8007AA8C8 /* Development */, 1411C5040F6215A8007AA8C8 /* Deployment */, 1411C5050F6215A8007AA8C8 /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; 1411C50A0F6215A8007AA8C8 /* Build configuration list for PBXApplicationTarget "Chess (Application)" */ = { isa = XCConfigurationList; buildConfigurations = ( 1411C5060F6215A8007AA8C8 /* Development */, 1411C5070F6215A8007AA8C8 /* Deployment */, 1411C5080F6215A8007AA8C8 /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; /* End XCConfigurationList section */ }; rootObject = 0145C6BE000FA8B211CA1586 /* Project object */; } chess.app-33/Chess.xcodeproj/root.pbxuser0000644000000000000000000000441613034414342017324 0ustar rootroot// !$*UTF8*$! { 0145C6BE000FA8B211CA1586 = { activeTarget = 0145C726000FA8B211CA1586; addToTargets = ( 0145C726000FA8B211CA1586, ); perUserDictionary = { PBXWorkspaceConfiguration = { ContentSize = "{938, 732}"; LeftSlideOut = { ActiveTab = 0; Frame = "{{0, 23}, {938, 679}}"; Split0 = { ActiveTab = 0; Frame = "{{320, 0}, {618, 679}}"; Split0 = { Frame = "{{0, 233}, {618, 446}}"; }; SplitCount = 1; Tab0 = { Debugger = { Frame = "{{0, 18}, {618, 190}}"; Split0 = { Frame = "{{0, 25}, {618, 165}}"; Split0 = { Frame = "{{0, 0}, {302, 165}}"; }; Split1 = { Frame = "{{311, 0}, {307, 165}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 1; }; Frame = "{{0, 0}, {618, 208}}"; LauncherConfigVersion = 3; }; Tab1 = { Frame = "{{0, 0}, {484, 208}}"; LauncherConfigVersion = 2; Runner = { Frame = "{{0, 18}, {484, 190}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {622, 139}}"; BuildTranscriptFrame = "{{0, 148}, {622, 46}}"; Frame = "{{0, 0}, {618, 192}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {295, 679}}"; }; Tab1 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; Split0 = { Frame = "{{0, 0}, {200, 45}}"; }; Split1 = { Frame = "{{0, 54}, {200, 46}}"; }; SplitCount = 2; }; Tab3 = { Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 4; }; WindowLoc = "{63, 14}"; }; }; }; 0145C726000FA8B211CA1586 = { activeExec = 0; customExecs = { }; targetExecs = { macosx = ( 0145C763000FA8D211CA1586, ); }; }; 0145C763000FA8D211CA1586 = { activeArgIndex = 2147483647; argumentStrings = ( ); debuggerPlugin = GDBDebugging; dylibVariantSuffix = ""; enableDebugStr = 1; environmentEntries = ( ); isa = PBXExecutable; sourceDirectories = ( ); }; } chess.app-33/Board.h0000644000000000000000000000574413034414342013073 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Board.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import @class Square; @class NSImage; @interface Board : NSControl { NSImage *backBitmap; Square *square[8][8]; id printImage; } - (void) setupPieces; - (void) layoutBoard: (short *)p color: (short *)c; - (void) placePiece: (short)p at: (int)row : (int)col color: (short)c; - (void) slidePieceFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2; - (int) pieceAt: (int)row : (int)col; //- (int) colorAt: (int)row : (int)col; - (void) highlightSquareAt: (int)row : (int)col; - (void) unhighlightSquareAt: (int)row : (int) col; - (void) flashSquareAt: (int)row : (int)col; @end chess.app-33/Chess.m0000644000000000000000000007013613034414342013113 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Chess.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import // own interface #import "Chess.h" // components #import "Board.h" #import "Board3D.h" #import "Clock.h" // not used #import "ResponseMeter.h" #import "ChessListener.h" // portability layer #import "gnuglue.h" #ifdef CHESS_DEBUG static int sCDInit; static const char * sCD; #define chess_debug(x) if (sCD || (!sCDInit++ && (sCD = getenv("CHESS_DEBUG")))) NSLog x; else 0 #else #define chess_debug(x) #endif #define NEW @"newGame:" #define OPEN @"openGame:" #define SAVE @"saveGame:" #define SAVEAS @"saveAsGame:" #define LIST @"listGame:" #ifndef GNUSTEP void PScompositerect(float x, float y, float w, float h, int op); #endif void CL_MakeMove(const char * move) { if (move[0] == (char)-1) { [NSApp undoMove:NSApp]; } else { int r = move[1]-'1'; int c = move[0]-'a'; int r2= move[3]-'1'; int c2= move[2]-'a'; [NSApp makeMoveFrom: r : c to: r2 : c2]; } } void CL_ScheduleInit() { [NSThread detachNewThreadSelector:@selector(initListener:) toTarget:NSApp withObject:[NSRunLoop currentRunLoop]]; } // Chess class implementations @implementation Chess + (void)initialize { init_gnuchess(); return; } - (void)finishLaunching { float red, green, blue, alpha; NSScanner * scanner; [super finishLaunching]; defaults = [NSUserDefaults standardUserDefaults]; [defaults registerDefaults: [NSDictionary dictionaryWithObjectsAndKeys: @"0 0 0 1", @"WhiteColor", @"0 0 0 1", @"BlackColor", [levelSlider objectValue], @"Level", @"NO", @"BothSides", @"YES", @"PlayerHasWhite", @"YES", @"SpeechRecognition", NULL]]; gameBoard = board3D; [board2D retain]; [board2D removeFromSuperview]; scanner = [NSScanner scannerWithString:[defaults objectForKey:@"WhiteColor"]]; [scanner scanFloat:&red]; [scanner scanFloat:&green]; [scanner scanFloat:&blue]; [scanner scanFloat:&alpha]; white_color = [[NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1.0] retain]; [whiteColorWell setColor:white_color]; scanner = [NSScanner scannerWithString:[defaults objectForKey:@"BlackColor"]]; [scanner scanFloat:&red]; [scanner scanFloat:&green]; [scanner scanFloat:&blue]; [scanner scanFloat:&alpha]; black_color = [[NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1.0] retain]; [blackColorWell setColor:black_color]; [levelSlider setIntValue:[defaults integerForKey:@"Level"]]; if ([defaults boolForKey:@"BothSides"]) [gamePopup selectItemAtIndex:2]; else if ([defaults boolForKey:@"PlayerHasWhite"]) [gamePopup selectItemAtIndex:0]; else [gamePopup selectItemAtIndex:1]; prefs.useSR = [defaults boolForKey:@"SpeechRecognition"]; [srCheckBox setState:prefs.useSR]; [self setWhiteColor: self]; [self setBlackColor: self]; // [self renderColors: self]; // default color pieces [self chooseSide: whiteSideName]; [self levelSliding: levelSlider]; [self setPreferences: self]; // default preferences dirtyGame = NO; menusEnabled = YES; { NSString * path = [[NSBundle mainBundle] pathForResource: @"SpeechHelp" ofType: @"xml"]; NSData * help = [NSData dataWithContentsOfFile:path]; CL_SetHelp([help length], [help bytes]); } [self newGame: self]; return; } /* MainMenu responders */ - (void)info: (id)sender { NSShowSystemInfoPanel ([NSDictionary dictionary]); } - (void)showGnuDisclaimer: (id)sender { id text = [infoScroll documentView]; NSString *string = [text string]; if( ! string || [string isEqual: @""] ) { string = copyright_text(); [text setString: string]; [text sizeToFit]; // [text setFont:[NSFont fontWithName: @"Times" size: (float)14.0]]; [infoScroll display]; } [infoPanel makeKeyAndOrderFront: sender]; return; } /* Start a new game */ - (void)newGame: (id)sender { if (dirtyGame) { if (![self alertPanelForGameChange]) return; } finished = 0; undoCount = hintCount = forceCount = 0; new_game(); [self setTitle]; [self displayResponseMeter: WHITE]; [self displayResponseMeter: BLACK]; if( prefs.bothsides ) { [startButton setEnabled: YES]; CL_ShutDown(); } else { [startButton setEnabled: NO]; if( prefs.computer == WHITE ) [self selectMove: WHITE iop: 1]; else if (prefs.useSR) CL_Listen(WHITE, current_pieces(), current_colors()); if (!prefs.useSR) CL_ShutDown(); } dirtyGame = NO; if (![boardWindow isKeyWindow]) [boardWindow makeKeyAndOrderFront:self]; return; } /* Read a saved game */ - (void)openGame: (id)sender { id op = [NSOpenPanel openPanel]; finished = 0; [op setRequiredFileType: @"chess"]; if( [op runModal] == NSOKButton ) { [filename release]; filename = [[op filename] retain]; get_game( filename ); } dirtyGame = NO; if (![boardWindow isVisible]) [boardWindow makeKeyAndOrderFront:self]; return; } /* Save a game */ - (void)listGame: (id)sender { NSSavePanel *sp = [NSSavePanel savePanel]; [sp setRequiredFileType: nil]; if( [sp runModal] == NSOKButton ) list_game( [sp filename] ); return; } - (void)saveGame: (id)sender { if ( filename && ! [filename isEqual: @""] ) save_game( filename ); else [self saveAsGame: sender]; dirtyGame = NO; return; } - (void)saveAsGame: (id)sender { NSSavePanel *sp = [NSSavePanel savePanel]; [sp setRequiredFileType: @"chess"]; if( [sp runModal] == NSOKButton ) { [filename release]; filename = [[sp filename] retain]; save_game( filename ); } dirtyGame = NO; return; } // Added this because it seems a little more Mac like. If you try to start // a new game or open a game while a game is in progress it asks you if you // would like to save the current game first. - (BOOL)alertPanelForGameChange { int button; button = NSRunAlertPanel( nil, NSLocalizedString(@"Would you like to save your current game first?",nil), NSLocalizedString(@"Save",nil), NSLocalizedString(@"No",nil), NSLocalizedString(@"Cancel",nil), nil ); switch( button ){ case -1: return NO; case 0: return YES; default: [self saveGame:self]; return YES; } } - (void)closeGame: (id)sender { if (dirtyGame) { if (![self alertPanelForGameChange]) return; } dirtyGame = NO; [boardWindow orderOut:self]; } /* Give the player a hint */ - (void)hint: (id)sender { if( give_hint() ){ hintCount++; [self setTitle]; } else (void)NSRunAlertPanel( nil, NSLocalizedString(@"no_hint",nil), nil, nil, nil ); return; } - (void)showPosition: (id)sender { [gameBoard highlightSquareAt: currentRow : currentCol]; [gameBoard flashSquareAt: currentRow : currentCol]; return; } /* Undo last two half moves */ - (void)undoMove: (id)sender { if( game_count() >= 0 ){ undo_move(); undo_move(); undoCount++; [self setTitle]; if (prefs.useSR) CL_Listen(prefs.opponent, current_pieces(), current_colors()); else CL_ShutDown(); } else (void)NSRunAlertPanel( nil, NSLocalizedString(@"no_undo",nil), nil, nil, nil ); return; } - (void)view2D: (id)sender { [menu2D setState: NSOnState]; [menu3D setState: NSOffState]; if( gameBoard == board3D ) { id v = [gameBoard superview]; // NSRect b = [v bounds]; short *pieces = current_pieces(); short *colors = current_colors(); [gameBoard retain]; [gameBoard removeFromSuperview]; // [v lockFocus]; // PSgsave(); // PSsetgray( NSBlack ); // PSrectfill( (float)0.0, (float)0.0, b.size.width, b.size.height ); // PSgrestore(); // [v unlockFocus]; [v addSubview: board2D]; [board2D release]; gameBoard = board2D; [gameBoard layoutBoard: pieces color: colors]; [self disableClockPanel]; } return; } - (void)view3D: (id)sender { [menu2D setState: NSOffState]; [menu3D setState: NSOnState]; if( gameBoard == board2D ) { id v = [gameBoard superview]; short *pieces = current_pieces(); short *colors = current_colors(); [gameBoard retain]; [gameBoard removeFromSuperview]; [v addSubview: board3D]; [board3D release]; gameBoard = board3D; [gameBoard layoutBoard: pieces color: colors]; [self enableClockPanel]; } return; } - (void)print: (id)sender { [gameBoard print: sender]; return; } /* ClockPanel responders */ - (void)setWhiteColor: (id)sender { NSString *path; NSImage *image1; NSImage *image2; NSRect r; NSPoint pt; path = [[NSBundle mainBundle] pathForImageResource: @"3d_white_sample"]; image1 = [[NSImage alloc] initWithContentsOfFile: path]; image2 = [whiteSample image]; r.origin = NSZeroPoint; r.size = [image2 size]; pt = NSZeroPoint; [image2 lockFocus]; [image1 compositeToPoint: pt fromRect: r operation: NSCompositeCopy]; [image2 unlockFocus]; [image1 lockFocus]; [[whiteColorWell color] set]; PScompositerect( pt.x, pt.y, r.size.width, r.size.height, NSCompositePlusDarker ); [image1 unlockFocus]; [image2 lockFocus]; [image1 compositeToPoint: pt fromRect: r operation: NSCompositeSourceAtop]; [image2 unlockFocus]; [whiteSample display]; [image1 release]; if( ! [white_color isEqual: [whiteColorWell color]] ) [colorSetButton setEnabled: YES]; return; } - (void)setBlackColor: (id)sender { NSString *path; NSImage *image1; NSImage *image2; NSRect r; NSPoint pt; path = [[NSBundle mainBundle] pathForImageResource: @"3d_black_sample"]; image1 = [[NSImage alloc] initWithContentsOfFile: path]; image2 = [blackSample image]; r.origin = NSZeroPoint; r.size = [image2 size]; pt = NSZeroPoint; [image2 lockFocus]; [image1 compositeToPoint: pt fromRect: r operation: NSCompositeCopy]; [image2 unlockFocus]; [image1 lockFocus]; [[blackColorWell color] set]; PScompositerect( pt.x, pt.y, r.size.width, r.size.height, NSCompositePlusDarker ); [image1 unlockFocus]; [image2 lockFocus]; [image1 compositeToPoint: pt fromRect: r operation: NSCompositeSourceAtop]; [image2 unlockFocus]; [blackSample display]; [image1 release]; if( ! [black_color isEqual: [blackColorWell color]] ) [colorSetButton setEnabled: YES]; return; } - (void)renderColors: (id)sender { NSString *path; NSImage *image1; NSImage *image2; NSRect r; NSPoint pt; if( gameBoard != board3D ) return; path = [[NSBundle mainBundle] pathForImageResource: @"3d_pieces"]; image1 = [[NSImage alloc] initWithContentsOfFile: path]; image2 = [gameBoard piecesBitmap]; r.origin = NSZeroPoint; r.size = [image2 size]; pt = NSZeroPoint; if( ! [white_color isEqual: [whiteColorWell color]] ) { float red, green, blue, alpha; [white_color release]; white_color = [[whiteColorWell color] retain]; [white_color getRed:&red green:&green blue:&blue alpha:&alpha]; [defaults setObject:[NSString stringWithFormat:@"%1.3f %1.3f %1.3f %1.3f", red, green, blue, alpha] forKey:@"WhiteColor"]; } if( ! [black_color isEqual: [blackColorWell color]] ) { float red, green, blue, alpha; [black_color release]; black_color = [[blackColorWell color] retain]; [black_color getRed:&red green:&green blue:&blue alpha:&alpha]; [defaults setObject:[NSString stringWithFormat:@"%1.3f %1.3f %1.3f %1.3f", red, green, blue, alpha] forKey:@"BlackColor"]; } [image2 lockFocus]; [image1 compositeToPoint: pt fromRect: r operation: NSCompositeCopy]; [image2 unlockFocus]; [image1 lockFocus]; [white_color set]; PScompositerect( pt.x, pt.y, (float)336.0, r.size.height, NSCompositePlusDarker ); [black_color set]; PScompositerect( (float)336.0, pt.y, (float)336.0, r.size.height, NSCompositePlusDarker ); [image1 unlockFocus]; [image2 lockFocus]; [image1 compositeToPoint: pt fromRect: r operation: NSCompositeSourceAtop]; [image2 unlockFocus]; [gameBoard display]; [image1 release]; [colorSetButton setEnabled: NO]; return; } - (void)startGame: (id)sender { if( [sender state] == 1 ) { // This is the loop that makes the computer play. It can be terminated // by several conditions. The "Stop" button may be clicked, cmd-. may // be pressed, or the game may end. [self setMainMenuEnabled: NO]; [self disablePrefPanel]; [self disableClockPanel]; run_computer_game(); [sender setState: 0]; } else { stop_computer_game(); [self enableClockPanel]; [self enablePrefPanel]; [self setMainMenuEnabled: YES]; } return; } - (void)forceMove: (id)sender { set_timeout( YES ); return; } /* PrefPanel responders */ /* Change the text displayed below the level slider to indicate what the level means */ - (void)levelSliding: (id)sender { NSString *format, *string; int moves, minutes; int level = [sender intValue]; interpret_level( level, &moves, &minutes ); if( moves > 1 ) format = NSLocalizedString( @"%d moves in %d minutes", nil ); else format = NSLocalizedString( @"%d move in %d minutes", nil ); string = [NSString stringWithFormat: format, moves, minutes]; [levelText setStringValue: string]; if( level != game_level() ) [prefSetButton setEnabled: YES]; return; } /* Set the text fields next to the side matrices */ - (void)chooseSide: (id)sender { switch ([gamePopup indexOfSelectedItem]) { case 0: /* Human vs. Computer */ [whiteSideName setStringValue: NSFullUserName()]; [blackSideName setStringValue: NSLocalizedString(@"Computer",nil)]; if ( !( !prefs.bothsides && prefs.computer == BLACK)) [prefSetButton setEnabled: YES]; break; case 1: /* Computer vs. Human */ [whiteSideName setStringValue: NSLocalizedString(@"Computer",nil)]; [blackSideName setStringValue: NSFullUserName()]; if ( !( !prefs.bothsides && prefs.computer == WHITE)) [prefSetButton setEnabled: YES]; break; case 2: /* Computer vs. Computer */ [whiteSideName setStringValue: NSLocalizedString(@"Computer",nil)]; [blackSideName setStringValue: NSLocalizedString(@"Computer",nil)]; if ( !prefs.bothsides ) [prefSetButton setEnabled: YES]; break; } if (prefs.useSR != [srCheckBox state]) [prefSetButton setEnabled: YES]; if( ! [prefs.white_name isEqual: [whiteSideName stringValue]] ) [prefSetButton setEnabled: YES]; if( ! [prefs.black_name isEqual: [blackSideName stringValue]] ) [prefSetButton setEnabled: YES]; return; } /* TextField delegate */ - (void)controlTextDidBeginEditing: (NSNotification *)notification { id txField = [notification object]; if( txField == whiteSideName || txField == blackSideName ) { [prefSetButton setEnabled: YES]; } return; } /* Actually set the preferences */ - (void)setPreferences: (id)sender { int button; int level = [levelSlider intValue]; set_game_level ( level ); interpret_level( level, &prefs.time_cntl_moves, &prefs.time_cntl_minutes ); switch ([gamePopup indexOfSelectedItem]) { case 0: prefs.bothsides = NO; prefs.opponent = WHITE; prefs.computer = BLACK; break; case 1: prefs.bothsides = NO; prefs.opponent = BLACK; prefs.computer = WHITE; break; case 2: prefs.bothsides = YES; prefs.opponent = WHITE; prefs.computer = BLACK; break; } if (prefs.useSR && ![srCheckBox state]) CL_DontListen(); prefs.useSR = [srCheckBox state]; prefs.cheat = YES; // always YES? if( ! [prefs.white_name isEqual: [whiteSideName stringValue]] ) { [prefs.white_name release]; prefs.white_name = [[whiteSideName stringValue] retain]; [whiteClockText setStringValue: prefs.white_name]; } if( ! [prefs.black_name isEqual: [blackSideName stringValue]] ) { [prefs.black_name release]; prefs.black_name = [[blackSideName stringValue] retain]; [blackClockText setStringValue: prefs.black_name]; } set_preferences( &prefs ); [prefSetButton setEnabled: NO]; if( sender == self ) return; // default setting [defaults setInteger:[levelSlider intValue] forKey:@"Level"]; [defaults setBool:prefs.bothsides forKey:@"BothSides"]; [defaults setBool:prefs.computer forKey:@"PlayerHasWhite"]; [defaults setBool:prefs.useSR forKey:@"SpeechRecognition"]; reset_response_time(); [self displayResponseMeter: WHITE]; [self displayResponseMeter: BLACK]; button = NSRunAlertPanel( nil, NSLocalizedString(@"new_game",nil), NSLocalizedString(@"Yes",nil), NSLocalizedString(@"No",nil), nil ); if ( button == NSAlertDefaultReturn ) { dirtyGame = NO; [self newGame: self]; } else { if( prefs.bothsides ) [startButton setEnabled: YES]; else { [startButton setEnabled: NO]; if( current_player() == WHITE && prefs.computer == WHITE ) [self selectMove: WHITE iop: 1]; else if( current_player() == BLACK && prefs.computer == BLACK ) [self selectMove: BLACK iop: 1]; } } return; } /* invoked by Board.m & Board3D.m */ - (BOOL)bothsides { return prefs.bothsides; } - (int)finished { return finished; } - (void)finishedAlert { NSString *msg; chess_debug(( @"finished %d", finished )); switch( finished ){ case DRAW_GAME : msg = @"draw_game"; break; case WHITE_MATE : msg = @"black_win"; break; case BLACK_MATE : msg = @"white_win"; break; case OPPONENT_MATE : msg = @"you_win"; break; default : return; } (void)NSRunAlertPanel( nil, NSLocalizedString(msg,nil), nil, nil, nil ); return; } - (BOOL)makeMoveFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2 { NSString *move; short oldguy, newguy; BOOL verified; short *pieces, *colors; dirtyGame = YES; oldguy = [gameBoard pieceAt: row1 : col1]; move = convert_rowcol( row1, col1, row2, col2, oldguy ); verified = verify_move( move ); if( ! verified ) { [self setTitleMessage: @"Illegal move"]; NSBeep(); return( NO ); } newguy = [gameBoard pieceAt: row2 : col2]; if ( (newguy == QUEEN) && (oldguy == PAWN) ) { chess_debug (( @"pawn becomes queen..." )); set_game_queen( PAWN ); } else set_game_queen( NO_PIECE ); chess_debug(( @"<<< opponent move time %d move %@", move_time(), move )); [self updateClocks: prefs.opponent]; in_check(); PSWait(); pieces = current_pieces(); colors = current_colors(); [gameBoard layoutBoard: pieces color: colors]; // [gameBoard display]; PSWait(); select_computer_move(); return( YES ); } /* invoked by gnuglue.m */ - (void)peekAndGetLeftMouseDownEvent { NSEvent *event; if( event = [NSApp nextEventMatchingMask: NSLeftMouseDownMask untilDate: [NSDate date] inMode: NSEventTrackingRunLoopMode dequeue: NO] ) { event = [NSApp nextEventMatchingMask: NSLeftMouseDownMask untilDate: [NSDate date] inMode: NSEventTrackingRunLoopMode dequeue: YES]; [NSApp sendEvent: event]; } return; } - (void)selectMove: (int)side iop: (int)iop { if( side == WHITE ) [self setTitleMessage: @"White's move"]; else [self setTitleMessage: @"Black's move"]; [self setMainMenuEnabled: NO]; [self disablePrefPanel]; [self disableClockPanel]; [gameBoard setEnabled: NO]; [forceButton setEnabled: YES]; if (prefs.useSR) CL_DontListen(); PSWait(); select_move_start( side, iop ); while( ! select_loop_end() ) select_loop(); select_move_end(); [self setTitle]; [self updateClocks: prefs.computer]; in_check(); PSWait(); [forceButton setEnabled: NO]; [gameBoard setEnabled: YES]; [self enableClockPanel]; [self enablePrefPanel]; [self setMainMenuEnabled: YES]; if (prefs.useSR) CL_Listen(!side, current_pieces(), current_colors()); else CL_ShutDown(); return; } - (void)setFinished: (int)flag { finished = flag; [self finishedAlert]; return; } - (void)movePieceFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2 { NSString *move; short oldguy, newguy; short *pieces = current_pieces(); short *colors = current_colors(); oldguy = [gameBoard pieceAt: row1 : col1]; move = convert_rowcol( row1, col1, row2, col2, oldguy ); chess_debug( (@">>> computer move time %d move %@", move_time(), move) ); dirtyGame = YES; [gameBoard highlightSquareAt: row1 : col1]; [gameBoard slidePieceFrom: row1 : col1 to: row2 : col2]; [self storePosition: row2 : col2]; [gameBoard layoutBoard: pieces color: colors]; PSWait(); [gameBoard highlightSquareAt: row2 : col2]; newguy = [gameBoard pieceAt: row2 : col2]; if ( (newguy == QUEEN) && (oldguy == PAWN) ) { chess_debug (( @"computer pawn becomes queen..." )); set_game_queen( PAWN ); } else set_game_queen( NO_PIECE ); return; } - (void)updateBoard { short *pieces = current_pieces(); short *colors = current_colors(); [gameBoard layoutBoard: pieces color: colors]; [gameBoard display]; return; } - (int)pieceTypeAt: (int)row : (int)col { return [gameBoard pieceAt: row : col]; } - (void)highlightSquareAt: (int)row : (int)col { [gameBoard highlightSquareAt: row : col]; return; } - (void)displayResponseMeter: (int)side { if( [clockPanel isVisible] ) { if( side == WHITE ) [whiteMeter display]; else [blackMeter display]; PSWait(); } return; } - (void)fillResponseMeter: (int)side { if( [clockPanel isVisible] ) { if( side == WHITE ) [whiteMeter displayFilled]; else [blackMeter displayFilled]; PSWait(); } return; } - (void)setTitleMessage: (NSString *)msg { NSMutableString *buf; [self setTitle]; buf = [NSMutableString stringWithCapacity: (unsigned)0]; [buf appendString: [boardWindow title]]; [buf appendString: NSLocalizedString(@" : ", nil)]; [buf appendString: NSLocalizedString(msg, nil)]; [boardWindow setTitle: buf]; return; } - (BOOL)canFinishGame { int sts = NSRunAlertPanel( nil, NSLocalizedString(@"exit_chess",nil), NSLocalizedString(@"Yes",nil), NSLocalizedString(@"No",nil), nil ); return ( sts == NSAlertDefaultReturn ) ? YES : NO; } /* Support methods */ - (void)setTitle /* Change the board windows title to display the number of cheat commands issued. */ { NSMutableString *str = [NSMutableString stringWithCapacity: 0]; if( undoCount || hintCount ) { [str appendString: NSLocalizedString(@"Chess: ", nil)]; if( undoCount == 1 ) [str appendString: NSLocalizedString(@"1 Undo ", nil)]; else if( undoCount ) [str appendFormat: NSLocalizedString(@"%d Undos ",nil),undoCount]; if( hintCount == 1 ) [str appendString: NSLocalizedString(@"1 Hint", nil)]; else if( hintCount ) [str appendFormat: NSLocalizedString(@"%d Hints",nil),hintCount]; } else [str appendString: NSLocalizedString(@"Chess", nil)]; [boardWindow setTitle: str]; return; } - (void)storePosition: (int) row : (int) col { currentRow = row; currentCol = col; return; } - (BOOL)validateMenuItem:(NSMenuItem *)item { //[item action] if (!menusEnabled) { NSString *selector = NSStringFromSelector([item action]); if ([selector isEqual:NEW]) return NO; else if ([selector isEqual:OPEN]) return NO; else if ([selector isEqual:SAVE]) return NO; else if ([selector isEqual:SAVEAS]) return NO; else if ([selector isEqual:LIST]) return NO; else return YES; } return YES; } - (void)setMainMenuEnabled: (BOOL)flag { menusEnabled = flag; return; } - (void)enablePrefPanel { [levelSlider setEnabled: YES]; [levelText setTextColor: [NSColor blackColor]]; [gamePopup setEnabled: YES]; [whiteSideName setEnabled: YES]; [blackSideName setEnabled: YES]; if( [levelSlider intValue] != game_level() || ! [prefs.white_name isEqual: [whiteSideName stringValue]] || ! [prefs.black_name isEqual: [blackSideName stringValue]] ) { [prefSetButton setEnabled: YES]; } return; } - (void)disablePrefPanel { [levelSlider setEnabled: NO]; [levelText setTextColor: [NSColor darkGrayColor]]; [gamePopup setEnabled: NO]; [whiteSideName setEnabled: NO]; [blackSideName setEnabled: NO]; [prefSetButton setEnabled: NO]; return; } - (void)enableClockPanel { if( gameBoard == board3D ) { [whiteColorWell setEnabled: YES]; [blackColorWell setEnabled: YES]; if( ! [white_color isEqual: [whiteColorWell color]] || ! [black_color isEqual: [blackColorWell color]] ) { [colorSetButton setEnabled: YES]; } } return; } - (void)disableClockPanel { [whiteColorWell setEnabled: NO]; [blackColorWell setEnabled: NO]; [colorSetButton setEnabled: NO]; return; } - (int)whiteTime { return whiteTime; } - (int)blackTime { return blackTime; } - (void)updateClocks: (int)side { if( ! blackClock || ! whiteClock ) return; if( side == WHITE ) { whiteTime += move_time(); if( [clockPanel isVisible] ) { [whiteClock setSeconds: whiteTime]; [whiteClock display]; } } else { blackTime += move_time(); if( [clockPanel isVisible] ) { [blackClock setSeconds: blackTime]; [blackClock display]; } } return; } /* Application delegate */ - (int)application: (NSApplication *)sender openFile: (NSString *)path withType: (NSString *)type { chess_debug( (@"Open file: %@ type: %@", path, type) ); if( type && [type isEqual: @"chess"] ) { [filename release]; filename = [path retain]; get_game( filename ); return (int)YES; } return (int)NO; } NSTimer * sFinishTimer; - (void)initListener: (NSRunLoop *)mainRunLoop { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; sFinishTimer = [[NSTimer timerWithTimeInterval:0.0 target:self selector:@selector(finishInitListener:) userInfo:nil repeats:NO] retain]; CL_Init(); [mainRunLoop addTimer:sFinishTimer forMode:NSDefaultRunLoopMode]; [pool release]; } - (void)finishInitListener: (NSRunLoop *)mainRunLoop { CL_FinishInit(); [sFinishTimer release]; } @end chess.app-33/Square3D.h0000644000000000000000000000612313034414342013463 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Square3D.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import @class NSView; @interface Square3D : NSCell { float background; int row; int color; int pieceType; NSRect location; BOOL moving; } - (void) setBackground: (float)b; - (float) background; - (void) setRow: (int)r; - (int) row; - (int) colorVal; - (void) setPieceType: (int)t color: (int)c; - (int) pieceType; - (void) setLocation: (NSRect)r; - (NSRect) location; - (void) setMoving: (BOOL)flag; - (BOOL) isMoving; - (void) drawWithFrame: (NSRect)cellFrame inView: (NSView *)v; - (void) drawBackground: (NSRect)f inView: (NSView *)v; - (void) highlight: (const NSRect *) f inView: (NSView *)v; - (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)v; @end chess.app-33/ChessApp.tiff0000644000000000000000000000537213034414342014250 0ustar rootrootMM* P8$ "A`R+a0peTP JR(*jW%bPHJ&QJUL`)Ba*J9Dr J@bH:T* dĠE*$)D"V$xTAJ@ZpU(kP)r)R60*0pqg.L=ʕ"W`diP.v WB%9 EH*Fx8:RMt rJǒc32&H8!;9jTB  @;T* p U%J>RH]Uqw!䏥T&oD"P$>?cvk&ŧTtBGzIR:uLTEP3} #8Tm3YIFZ&BHMS5LL [x 6!}[IJTլ4Ώ]pP{GIWq=ϝn, ]*pr00 (R 4+# ' ' P8$ a0@ ( 1h$R &¡dA$Nb@td(4H@ #IeRe40 A<Mu F,T+?%Hd!ʂOQ ?ZΫv+ 0 Q2P$2lXJ %~7ri O1U`}WD H MBR.O{)Gw>#=aU&Վs-\<x', t~٘j1~V20d m>e,/ B,6.h@4m + dyOyWf4(tIn41M "m= &ꪲBtR5j-2ҥ ~RU*ʯS*DZUȠ7m{b$4kr75/ W GDъI*ӺXNI%4>R+R/#+Pz!YqʈJ&@JڰAc c(^NC9UؒAp_D'k2& 2 핀KK+@g?Ӗ38?i>+*h!K\sc.cZ{GjiЛ̭Cq@V% 2C@p``}+/KIHQ|z[2R󚐃!2j0!! k"6l&GFs. z6e86r +'h!xxվJ C>/s LU 'w+}/BTї牬 +M!kaր@ C^`6/&DYN "`/ұ~/HE[`e8Ap/Ś%{%)4^`D!?\O1&%b%x3&mfC12\tJљhҺ #O>8y"ReVBf3E~4&pJPg A>^K/0wk}F<f ЖT/iókMОJdZIҋl"'5*r3Q8,,eymKY iPMI YgC|7gI IN#''fǓ"i)seVw_2n| \#ћ͒lY3S0mN&WA\oIu ޫ@@3hNҍ.9!XcoEtʌF4en $7( CH ľ)U_=2\dItG} 6L'g&KM&EGO: ~z;Bd6M;;{`O3cʢ|:Xh##42׿$H|aTϐ"/\[1MqH|ةim !h%SF+DYlJGJg#1QygxM˼Jeо*CX68G9 &={-{z$ZBp f18lݖˇI\MGN3S$(6@0 ʼzRW B5yKɏ pV'LhulR@\ U̹p6_І N/M(B@+BZކ$F4ƒr͹00 UJ  (R ' 'chess.app-33/Square3D.m0000644000000000000000000001176213034414342013475 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Square3D.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import #import #import // NSMakeSize // own interface #import "Square3D.h" // game board #import "Board3D.h" // portability layer #import "gnuglue.h" // floor_value // piece size #define PIECE_WIDTH_3D (float)54.0 // 55.0? #define PIECE_HEIGHT_3D (float)95.0 // Square3D implementations @implementation Square3D /* This class represents one square on a chess board. It has a color and may contain a piece. */ - (void) setBackground: (float)b { background = b; return; } - (float) background { return background; } - (void) setRow: (int)r { row = r; return; } - (int) row { return row; } - (int) colorVal { return color; } - (void) setPieceType: (int)t color: (int) c { pieceType = t; color = c; return; } - (int) pieceType { return pieceType; } - (void) setLocation: (NSRect)r { location = r; return; } - (NSRect) location { return location; } - (void) setMoving: (BOOL)flag { moving = flag; return; } - (BOOL) isMoving { return moving; } - (void) drawWithFrame: (NSRect)f inView: (NSView *)v { [self drawInteriorWithFrame:f inView:v]; return; } - (void) drawBackground: (NSRect)f inView: (NSView *)v { return; } - (void) highlight: (const NSRect *)f inView: (NSView *)v { return; } /* Pieces in the big bitmap each are 54 wide 95 high and seperated by a 1 pixel wide line, with no line at the bottom. They are ordered king, queen, bishop, rook, knight, pawn -- white then black. */ - (void) drawInteriorWithFrame: (NSRect)r inView: (NSView *)v /* Draw the chess piece. */ { int col; float shrinkFactor; NSRect f; NSPoint p; id bitmap; /* Composite the piece icon in the center of the rect. */ switch( pieceType ){ case PAWN: col = 5; break; case ROOK: col = 3; break; case KNIGHT: col = 4; break; case BISHOP: col = 2; break; case QUEEN: col = 1; break; case KING: col = 0; break; default: return; } shrinkFactor = (0.65 + ((8 - row) * 0.03125)); f.origin.x = (col + (color == BLACK ? 6 : 0) )* 56 + 1; f.origin.y = row * 96; f.size = NSMakeSize( PIECE_WIDTH_3D, PIECE_HEIGHT_3D ); p.x = location.origin.x + (location.size.width - (PIECE_WIDTH_3D * shrinkFactor)) / 2 + (5 * shrinkFactor); p.y = location.origin.y + (8 * shrinkFactor); p.x = (float) floor_value( (double)p.x ); p.y = (float) floor_value( (double)p.y ); bitmap = [(Board3D *)v piecesBitmap]; // ?? [v lockFocus]; [bitmap compositeToPoint: p fromRect: f operation: NSCompositeSourceOver]; [v unlockFocus]; return; } @end chess.app-33/MakefileOld0000644000000000000000000000451413034414342013764 0ustar rootroot# # Generated by the Apple Project Builder. # # NOTE: Do NOT change this file -- Project Builder maintains it. # # Put all of your customizations in files called Makefile.preamble # and Makefile.postamble (both optional), and Makefile will include them. # NAME = Chess PROJECTVERSION = 2.8 PROJECT_TYPE = Application NEXTSTEP_APPICON = chess.tiff NEXTSTEP_DOCICONS = ChessDoc.tiff ICONSECTIONS = -sectcreate __ICON app chess.tiff \ -sectcreate __ICON ChessDoc ChessDoc.tiff English_RESOURCES = Chess.nib black_rook.tiff black_pawn.tiff\ white_bishop.tiff white_rook.tiff clock.tiff\ black_king.tiff 3d_board.tiff black_queen.tiff\ black_knight.tiff 3d_black_sample.tiff black.tiff\ white_pawn.tiff black_bishop.tiff 3d_pieces.tiff\ white_king.tiff 3d_plastic.tiff white_queen.tiff\ white_knight.tiff 3d_white_sample.tiff white.tiff\ Localizable.strings .snd.snd Credits.rtf LANGUAGES = English GLOBAL_RESOURCES = ChessApp.tiff ChessDoc.tiff ApplicationNameImage.tiff\ chess.tiff CLASSES = Chess.m Board.m Board3D.m Square.m Square3D.m\ ResponseMeter.m Clock.m ChessListener.cp HFILES = Chess.h Board.h Board3D.h Square.h Square3D.h\ ResponseMeter.h Clock.h gnuglue.h version.h ChessListener.h MFILES = gnuglue.m Chess_main.m SUBPROJECTS = gnuchess.subproj OTHERSRCS = Makefile Makefile.postamble Makefile.preamble\ CustomInfo.plist MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles CODE_GEN_STYLE = DYNAMIC MAKEFILE = app.make NEXTSTEP_INSTALLDIR = $(SYSTEM_DEMOS_DIR) WINDOWS_INSTALLDIR = $NEXT_ROOT$(SYSTEM_DEMOS_DIR) PDO_UNIX_INSTALLDIR = $(SYSTEM_DEMOS_DIR) LIBS = DEBUG_LIBS = $(LIBS) PROF_LIBS = $(LIBS) HEADER_PATHS = -I/System/Library/Frameworks/Carbon.framework/Headers FRAMEWORKS = -framework AppKit -framework Carbon -framework Foundation NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc NEXTSTEP_JAVA_COMPILER = /usr/bin/javac WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac include $(MAKEFILEDIR)/platform.make -include Makefile.preamble include $(MAKEFILEDIR)/$(MAKEFILE) -include Makefile.postamble -include Makefile.dependencies chess.app-33/Board.m0000644000000000000000000003321713034414342013074 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Board.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import #import #import #import #import #import // NSBeep #import #import // NSZeroPoint #import // MAX, ABS #import #include // own interface #import "Board.h" // messaging objects #import "Square.h" #import "Chess.h" // NSApp // portability layer #import "gnuglue.h" // floor_value // square colors #define BLACK_SQUARE_COLOR (0.5) #define WHITE_SQUARE_COLOR (5.0 / 6.0) // private functions static NSString *whitePiece( p ) short p; { switch( p ) { case PAWN: return @"white_pawn"; case ROOK: return @"white_rook"; case KNIGHT: return @"white_knight"; case BISHOP: return @"white_bishop"; case KING: return @"white_king"; case QUEEN: return @"white_queen"; default: break; } return nil; } static NSString *blackPiece( p ) short p; { switch( p ) { case PAWN: return @"black_pawn"; case ROOK: return @"black_rook"; case KNIGHT: return @"black_knight"; case BISHOP: return @"black_bishop"; case KING: return @"black_king"; case QUEEN: return @"black_queen"; default: break; } return nil; } // Board implementations @implementation Board - (id)initWithFrame: (NSRect) f { self = [super initWithFrame: f]; if( self ) { int r, c; NSSize size; [self allocateGState]; size.width = f.size.width / 8.0; size.height = f.size.height / 8.0; backBitmap = [[NSImage alloc] initWithSize: size]; for( r = 0; r < 8; r++ ) { for( c = 0; c < 8; c++ ) { Square *aSquare; BOOL even; float bk; aSquare = [[Square alloc] init]; even = ( ! ((r + c) % 2) ); bk = ( even ) ? BLACK_SQUARE_COLOR : WHITE_SQUARE_COLOR; [aSquare setBackground: bk]; square[r][c] = aSquare; } } [self setupPieces]; return self; } return nil; } - (void) setupPieces { short *pieces = default_pieces(); short *colors = default_colors(); [self layoutBoard: pieces color: colors]; return; } - (void) layoutBoard: (short *)p color: (short *)c { int sq; for( sq = 0; sq < SQUARE_COUNT; sq++ ) { int row = sq / 8; int col = sq % 8; [self placePiece: p[sq] at: row: col color: c[sq]]; } return; } - (void) placePiece: (short)p at: (int)row : (int)col color: (short)c { Square *theSquare = square[row][col]; NSString *piece = ( c == WHITE ) ? whitePiece( p ) : blackPiece( p ); NSImage *image = ( piece ) ? [NSImage imageNamed: piece] : nil; [theSquare setImage: image]; return; } - (void) slidePieceFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2 { Square *theSquare; NSString *icon; int controlGState; NSRect pieceRect; NSPoint backP, endP, winP, roundedBackP; float incX, incY; int i, increments; theSquare = square[row1][col1]; //icon = [[theSquare image] name]; icon = [theSquare imageName]; if( [icon isEqual: @""] ) icon = nil; // ? if( ! icon ) return; controlGState = [self gState]; pieceRect.size.width = (float)floor_value( (double)([self frame].size.width / 8.0) ); pieceRect.size.height = (float)floor_value( (double)([self frame].size.height / 8.0) ); backP.x = ( (float)col1 * pieceRect.size.width ); backP.y = ( (float)row1 * pieceRect.size.height ); endP.x = ( (float)col2 * pieceRect.size.width ); endP.y = ( (float)row2 * pieceRect.size.height ); [self lockFocus]; PSgsave(); /* Draw over the piece we are moving. */ pieceRect.origin.x = col1 * pieceRect.size.width; pieceRect.origin.y = row1 * pieceRect.size.height; [theSquare drawBackground: pieceRect inView: self]; /* Save background */ [backBitmap lockFocus]; PSgsave(); roundedBackP.x = floor(backP.x); roundedBackP.y = floor(backP.y); winP = [[self superview] convertPoint: roundedBackP fromView: self]; PScomposite( winP.x, winP.y, pieceRect.size.width, pieceRect.size.height, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; incX = endP.x - backP.x; incY = endP.y - backP.y; increments = (int) MAX( ABS(incX), ABS(incY) ) / 7; incX = incX / increments; incY = incY / increments; for( i = 0; i < increments; i++ ){ /* Restore old background */ [self lockFocus]; [backBitmap compositeToPoint: backP operation: NSCompositeCopy]; [self unlockFocus]; [[self window] flushWindow]; /* Save new background */ backP.x += incX; backP.y += incY; [backBitmap lockFocus]; PSgsave(); roundedBackP.x = floor(backP.x); roundedBackP.y = floor(backP.y); pieceRect.origin = roundedBackP; winP = [[self superview] convertPoint: roundedBackP fromView: self]; PScomposite( winP.x, winP.y, pieceRect.size.width, pieceRect.size.height, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; /* Draw piece at new location. */ [theSquare drawInteriorWithFrame: pieceRect inView: self]; [[self window] flushWindow]; PSsetgray( NSBlack ); PSsetlinewidth( (float)2.0 ); // PSclippath(); PSstroke(); [[self window] flushWindow]; } PSgrestore(); [self unlockFocus]; return; } - (int) pieceAt: (int)row : (int)col { if( row >= 0 && col >= 0 ) { Square *theSquare = square[row][col]; return( [theSquare pieceType] ); } return (int)NO_PIECE; } - (void) highlightSquareAt: (int)row : (int)col { NSRect cr; Square *theSquare = square[row][col]; [self lockFocus]; cr.size.width = [self frame].size.width / 8.0; cr.size.height = [self frame].size.height / 8.0; cr.origin.x = col * cr.size.width; cr.origin.y = row * cr.size.height; [theSquare highlight: cr inView: self]; PSsetgray( NSBlack ); PSsetlinewidth( (float)2.0 ); // PSclippath(); PSstroke(); [[self window] flushWindow]; [self unlockFocus]; return; } - (void) unhighlightSquareAt: (int)row : (int)col { return; } - (void) flashSquareAt: (int)row : (int)col { return; } - (void) print: (id)sender { NSPrintInfo *pi = [NSPrintInfo sharedPrintInfo]; NSSize ps = [pi paperSize]; NSSize fs = [self frame].size; float hm = (ps.width - fs.width) / 2.0; float vm = (ps.height - fs.height) / 2.0; [pi setLeftMargin: hm]; [pi setRightMargin: hm]; [pi setTopMargin: vm]; [pi setBottomMargin: vm]; [self lockFocus]; printImage = [[NSBitmapImageRep alloc] initWithFocusedViewRect: [self bounds]]; [self unlockFocus]; [super print: sender]; [printImage release]; printImage = nil; return; } - (void) drawRect: (NSRect)f { if( ! printImage ) { int r, c; NSRect cr; PSgsave(); cr.size.width = f.size.width / 8.0; cr.size.height = f.size.height / 8.0; for( r = 0; r < 8; r++ ) { cr.origin.y = r * cr.size.height; for( c = 0; c < 8; c++ ) { Square *theSquare = square[r][c]; cr.origin.x = c * cr.size.width; [theSquare drawWithFrame: cr inView: self]; } } PSsetgray( NSBlack ); PSsetlinewidth( (float)2.0 ); // PSclippath(); PSstroke(); PSgrestore(); } else { [printImage draw]; } return; } - (void) mouseDown: (NSEvent *)event { NSException *exception = nil; if ( [NSApp bothsides] ) { NSBeep(); } else if( [NSApp finished] ) { [NSApp finishedAlert]; [[self window] setAcceptsMouseMovedEvents: YES]; NS_DURING while( [event type] != NSLeftMouseUp ) { unsigned int mask = (NSLeftMouseUpMask | NSLeftMouseDraggedMask); event = [[self window] nextEventMatchingMask: mask]; } NS_HANDLER exception = localException; NS_ENDHANDLER } else { NSPoint pickedP, backP, roundedBackP, winP; NSRect pieceRect, backR; int r, c; Square *theSquare; int controlGState; NSString *icon; NSPoint p; pickedP = [event locationInWindow]; pickedP = [self convertPoint: pickedP fromView: nil]; backP = pickedP; //pieceRect.origin = NSZeroPoint; pieceRect.size.width = [self frame].size.width / 8.0; pieceRect.size.height = [self frame].size.height / 8.0; r = floor_value( (double)(pickedP.y / pieceRect.size.height) ); c = floor_value( (double)(pickedP.x / pieceRect.size.width) ); pieceRect.size.width =(float)floor_value((double)pieceRect.size.width); pieceRect.size.height=(float)floor_value((double)pieceRect.size.height); backR.origin = NSZeroPoint; backR.size = pieceRect.size; pickedP.x = pickedP.x - (((float)c) * pieceRect.size.width); pickedP.y = pickedP.y - (((float)r) * pieceRect.size.height); theSquare = square[r][c]; //icon = [[theSquare image] name]; icon = [theSquare imageName]; if( [icon isEqual: @""] ) icon = nil; // ? if( icon && [self isEnabled] ) { controlGState = [self gState]; if( ! controlGState ) { [self allocateGState]; controlGState = [self gState]; } [self lockFocus]; PSgsave(); /* Draw over the piece we are moving. */ pieceRect.origin.x = c * pieceRect.size.width; pieceRect.origin.y = r * pieceRect.size.height; [theSquare drawBackground: pieceRect inView: self]; /* Save background */ [backBitmap lockFocus]; PSgsave(); roundedBackP.x = floor(backP.x); roundedBackP.y = floor(backP.y); winP = [[self superview] convertPoint: roundedBackP fromView: self]; PScomposite( winP.x, winP.y, backR.size.width, backR.size.height, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; } [[self window] setAcceptsMouseMovedEvents: YES]; NS_DURING while ([event type] != NSLeftMouseUp) { unsigned int mask = (NSLeftMouseUpMask | NSLeftMouseDraggedMask); event = [[self window] nextEventMatchingMask: mask]; p = [event locationInWindow]; p = [self convertPoint: p fromView: nil]; if( icon && [self isEnabled] ) { /* Restore old background */ [self lockFocus]; [backBitmap compositeToPoint:roundedBackP operation:NSCompositeCopy]; [self unlockFocus]; /* Save new background */ backP.x = pieceRect.origin.x = p.x - pickedP.x; backP.y = pieceRect.origin.y = p.y - pickedP.y; [backBitmap lockFocus]; PSgsave(); roundedBackP.x = floor(backP.x); roundedBackP.y = floor(backP.y); winP = [[self superview] convertPoint: roundedBackP fromView: self]; PScomposite( winP.x, winP.y, backR.size.width, backR.size.height, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; /* Draw piece at new location. */ [theSquare drawInteriorWithFrame: pieceRect inView: self]; PSsetgray( NSBlack ); PSsetlinewidth( (float)2.0 ); // PSclippath(); PSstroke(); [[self window] flushWindow]; } } NS_HANDLER exception = localException; NS_ENDHANDLER if( icon && [self isEnabled] ) { NSSize frame = [self frame].size; int r2 = floor_value( (double)(p.y / (frame.height / 8.0)) ); int c2 = floor_value( (double)(p.x / (frame.width / 8.0)) ); if( r2 != r || c2 != c ) { if( ! [NSApp makeMoveFrom: r : c to: r2 : c2] ) { PSWait(); } } [self display]; PSgrestore(); [self unlockFocus]; } } if( exception ) [exception raise]; return; } @end // Local Variables: // tab-width: 8 // End: chess.app-33/Board3D.m0000644000000000000000000005167613034414342013274 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Board3D.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import #import #import #import #import #import // NSBeep #import #import // NSMakeSize, NSZeroPoint #import // MIN, MAX, ABS #import #include // own interface #import "Board3D.h" // messaging objects #import "Square3D.h" #import "Chess.h" // NSApp // portability layer #import "gnuglue.h" // floor_value, sleep_microsecs, ... // piece size #define PIECE_WIDTH_3D (float)55.0 #define PIECE_HEIGHT_3D (float)95.0 // back store size #define BACK_STORE_WIDTH (float)80.0 #define BACK_STORE_HEIGHT (float)110.0 /* Each set of points describes the vertical lines along the board. */ struct NXLine { NSPoint a, b; }; #define BASE_X 89 static struct NXLine vertical[] = { {{BASE_X,122}, {BASE_X+61, 467}}, {{BASE_X+71,122}, {BASE_X+111,467}}, {{BASE_X+135,122},{BASE_X+162,467}}, {{BASE_X+200,122},{BASE_X+212,467}}, {{BASE_X+265,122},{BASE_X+265,467}}, {{BASE_X+330,122},{BASE_X+316,467}}, {{BASE_X+393,122},{BASE_X+367,467}}, {{BASE_X+459,122},{BASE_X+419,467}}, {{BASE_X+524,122},{BASE_X+469,467}} }; /* Each coordinate describes the y value of each line of the board. */ #define BASE_Y 132 static float horizontal[] = { BASE_Y, BASE_Y+54, BASE_Y+106, BASE_Y+153, BASE_Y+196, BASE_Y+237, BASE_Y+277, BASE_Y+312, BASE_Y+345 }; // private functions static void squareOrigin( int r, int c, float *x, float *y ) { float dx, m, b; dx = (vertical[c].a.x - vertical[c].b.x); m = (vertical[c].a.y - vertical[c].b.y) / dx; b = vertical[c].b.y - (vertical[c].b.x * m); *x = (dx) ? ((horizontal[r] - b) / m) : vertical[c].a.x; *y = horizontal[r]; return; } static void squareBounds( int r, int c, NSPoint *p1, NSPoint *p2, NSPoint *p3, NSPoint *p4 ) /* (p2)----(p4) | | | | (p1)----(p3) */ { float dx, m, b; dx = (vertical[c].a.x - vertical[c].b.x); m = (vertical[c].a.y - vertical[c].b.y) / dx; b = vertical[c].b.y - (vertical[c].b.x * m); p1->x = (dx) ? ((horizontal[r] - b) / m) : vertical[c].a.x; p1->x = (float) floor_value( (double)p1->x ); p1->y = (float) floor_value( (double)horizontal[r] ); p2->x = (dx) ? ((horizontal[r+1] - b) / m) : vertical[c].a.x; p2->x = (float) floor_value( (double)p2->x ); p2->y = (float) floor_value( (double)horizontal[r+1] ); dx = (vertical[c+1].a.x - vertical[c+1].b.x); m = (vertical[c+1].a.y - vertical[c+1].b.y) / dx; b = vertical[c+1].b.y - (vertical[c+1].b.x * m); p3->x = (dx) ? ((horizontal[r] - b) / m) : vertical[c+1].a.x; p3->x = (float) floor_value( (double)p3->x ); p3->y = (float) floor_value( (double)horizontal[r] ); p4->x = (dx) ? ((horizontal[r+1] - b) / m) : vertical[c+1].a.x; p4->x = (float) floor_value( (double)p4->x ); p4->y = (float) floor_value( (double)horizontal[r+1] ); return; } static float check_point( struct NXLine *l, NSPoint *p ) { float dx = l->a.x - l->b.x; float dy = l->a.y - l->b.y; float dx1 = p->x - l->a.x; float dy1 = p->y - l->a.y; return( dx*dy1 - dy*dx1 ); } static void convert_point( NSPoint *p, int *r, int *c ) { int i; for( i = 0; i < 8; i++ ) { if( p->y >= horizontal[i] && p->y <= horizontal[i+1] ) { *r = i; break; } } for( i = 0; i < 8; i++ ) { float m1 = check_point( &vertical[i], p ); float m2 = check_point( &vertical[i+1], p ); if( m1 > 0 && m2 < 0 ) { *c = i; break; } } return; } // Board3D implementations @implementation Board3D - (id)initWithFrame: (NSRect)f { self = [super initWithFrame: f]; if( self ) { NSBundle *bundle; NSString *path1, *path2; NSSize size; int r, c; [self allocateGState]; bundle = [NSBundle mainBundle]; path1 = [bundle pathForImageResource: @"3d_board"]; _background = [[NSImage alloc] initWithContentsOfFile: path1]; path2 = [bundle pathForImageResource: @"3d_pieces"]; _pieces = [[NSImage alloc] initWithContentsOfFile: path2]; size = NSMakeSize( BACK_STORE_WIDTH, BACK_STORE_HEIGHT ); backBitmap = [[NSImage alloc] initWithSize: size]; for( r = 0; r < 8; r++ ) { for( c = 0; c < 8; c++ ) square[r][c] = [[Square3D alloc] init]; } [self setupPieces]; return self; } return nil; } - (void)setBackgroundBitmap: (NSImage *) bitmap { if( _background ) [_background release]; _background = [bitmap retain]; return; } - (id) backgroundBitmap { return _background; } - (void)setPiecesBitmap: (NSImage *) bitmap { if( _pieces ) [_pieces release]; _pieces = [bitmap retain]; return; } - (NSImage *)piecesBitmap { return _pieces; } - (void)setupPieces { short *pieces = default_pieces(); short *colors = default_colors(); [self layoutBoard: pieces color: colors]; return; } - (void)layoutBoard: (short *)p color: (short *)c { int sq; for( sq = 0; sq < SQUARE_COUNT; sq++ ) { int row = sq / 8; int col = sq % 8; [self placePiece: p[sq] at: row: col color: c[sq]]; } } - (void)placePiece: (short)p at: (int)row : (int)col color: (short)c { int col2; float m, b, dx, x; NSRect loc; Square3D *theSquare = square[row][col]; [theSquare setPieceType: p color: c]; [theSquare setRow: row]; dx = (vertical[col].a.x - vertical[col].b.x); m = (vertical[col].a.y - vertical[col].b.y) / dx; b = vertical[col].b.y - (vertical[col].b.x * m); x = (dx) ? ((horizontal[row] - b) / m) : vertical[col].a.x; loc.origin.x = x; loc.origin.y = horizontal[row]; col2 = col + 1; dx = (vertical[col2].a.x - vertical[col2].b.x); m = (vertical[col2].a.y - vertical[col2].b.y) / dx; b = vertical[col2].b.y - (vertical[col2].b.x * m); x = (dx) ? ((horizontal[row] - b) / m) : vertical[col2].a.x; loc.size.width = x - loc.origin.x; loc.size.height = 99999; [theSquare setLocation: loc]; return; } - (void)slidePieceFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2 { Square3D *theSquare; int pieceType, color; NSRect oldLocation; NSPoint backP, endP, roundedBackP; int controlGState; float incX, incY; int increments, i; theSquare = square[row1][col1]; pieceType = [theSquare pieceType]; if( ! pieceType ) return; color = [theSquare colorVal]; oldLocation = [theSquare location]; squareOrigin( row2, col2, &endP.x, &endP.y ); /* Remove piece and then save background */ [theSquare setPieceType: NO_PIECE color: NEUTRAL]; [self drawRect: [self frame]]; squareOrigin( row1, col1, &backP.x, &backP.y ); controlGState = [self gState]; [backBitmap lockFocus]; PSgsave(); PScomposite( roundedBackP.x = floor(backP.x), roundedBackP.y = floor(backP.y), BACK_STORE_WIDTH, BACK_STORE_HEIGHT, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; [self lockFocus]; [theSquare setPieceType: pieceType color: color]; [theSquare drawInteriorWithFrame: [self frame] inView: self]; [theSquare setMoving: YES]; [[self window] flushWindow]; incX = endP.x - backP.x; incY = endP.y - backP.y; increments = (int) MAX( ABS(incX), ABS(incY) ) / 7; // was 5 gcr incX = incX / increments; incY = incY / increments; for( i = 0; i < increments; i++ ) { int dr, dc; NSRect newLocation; /* Restore old background */ [self lockFocus]; [backBitmap compositeToPoint: roundedBackP operation: NSCompositeCopy]; [self unlockFocus]; backP.x += incX; backP.y += incY; convert_point( &backP, &dr, &dc ); /* Save new background */ [backBitmap lockFocus]; PSgsave(); PScomposite( roundedBackP.x = floor(backP.x), roundedBackP.y = floor(backP.y), BACK_STORE_WIDTH, BACK_STORE_HEIGHT, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; /* Draw piece at new location. */ [theSquare setRow: dr]; newLocation.origin = backP; newLocation.size = NSMakeSize( PIECE_WIDTH_3D, PIECE_HEIGHT_3D ); [theSquare setLocation: newLocation]; [theSquare drawInteriorWithFrame: [self frame] inView: self]; [[self window] flushWindow]; } [theSquare setMoving: NO]; [self unlockFocus]; return; } - (int) pieceAt: (int)row : (int)col { if( row >= 0 && col >= 0 ) { Square3D *theSquare = square[row][col]; return [theSquare pieceType]; } return (int)NO_PIECE; } - (int) colorAt: (int)row : (int)col { if( row >= 0 && col >= 0 ) { Square3D *theSquare = square[row][col]; return [theSquare colorVal]; } return (int)NEUTRAL; } - (void) highlightSquareAt: (int)row : (int)col { NSPoint p1, p2, p3, p4; int idx; squareBounds( row, col, &p1, &p2, &p3, &p4 ); [self lockFocus]; PSgsave(); PSsetlinewidth( (float)3.0 ); PSmoveto( p1.x, p1.y ); PSlineto( p2.x, p2.y ); PSlineto( p4.x, p4.y ); PSlineto( p3.x, p3.y ); PSlineto( p1.x, p1.y ); PSclosepath(); /* flash 2 times */ for( idx = 1; idx <= 3; idx++ ) { float color = NSWhite; // float color = NSWhite - [self colorAt: row : col]; // ?? PSsetgray( color ); PSgsave(); PSstroke(); PSgrestore(); if( [self pieceAt: row : col] || (row > 0 && [self pieceAt: row-1 : col]) ) [self drawRows: row from: col]; [[self window] flushWindow]; if( ! [square[row][col] isMoving] ) sleep_microsecs( (unsigned)15000 ); } PSgrestore(); [self unhighlightSquareAt: row : col]; [self unlockFocus]; return; } - (void) unhighlightSquareAt: (int)row : (int)col { NSPoint p1, p2, p3, p4, to; NSRect backR; squareBounds( row, col, &p1, &p2, &p3, &p4 ); p1.x = p1.x - 3; p1.y = p1.y - 3; p2.x = p2.x - 3; p2.y = p2.y + 3; p3.x = p3.x + 3; p3.y = p3.y - 3; p4.x = p4.x + 3; p4.y = p4.y + 3; to.x = MIN( p1.x, p2.x ); to.y = p1.y; backR.origin = to; backR.size.width = MAX( p3.x, p4.x ) - to.x; backR.size.height = p2.y - p1.y; [self lockFocus]; PSgsave(); PSsetlinewidth( (float)3.0 ); PSsetgray( NSWhite ); PSnewpath(); PSmoveto( p1.x, p1.y ); PSlineto( p2.x, p2.y ); PSlineto( p4.x, p4.y ); PSlineto( p3.x, p3.y ); PSlineto( p1.x, p1.y ); PSclosepath(); PSclip(); [_background compositeToPoint:to fromRect:backR operation:NSCompositeCopy]; PSgrestore(); if( [self pieceAt: row : col] || (row > 0 && [self pieceAt: row-1 : col]) ) [self drawRows: row from: col]; [[self window] flushWindow]; [self unlockFocus]; return; } - (void) flashSquareAt: (int)row : (int)col { NSPoint p1, p2, p3, p4; squareBounds( row, col, &p1, &p2, &p3, &p4 ); [self lockFocus]; PSgsave(); PSsetlinewidth( (float)3.0 ); PSsetgray( NSWhite ); PSnewpath(); PSmoveto( p1.x, p1.y ); PSlineto( p2.x, p2.y ); PSlineto( p4.x, p4.y ); PSlineto( p3.x, p3.y ); PSlineto( p1.x, p1.y ); PSclosepath(); PSstroke(); PSgrestore(); if( [self pieceAt: row : col] || (row > 0 && [self pieceAt: row-1 : col]) ) [self drawRows: row from: col]; [self unlockFocus]; return; } - (void) drawRows: (int)row from: (int)col { while( row >= 0 ) { Square3D *theSquare = square[row][col]; if( [self pieceAt: row : col] && ! [theSquare isMoving] ) [theSquare drawInteriorWithFrame: [self frame] inView: self]; row--; } return; } - (void) print: (id)sender { NSPrintInfo *pi = [NSPrintInfo sharedPrintInfo]; NSSize ps = [pi paperSize]; NSSize fs = [self frame].size; float hm = (ps.width - fs.width) / 2.0; float vm = (ps.height - fs.height) / 2.0; [pi setLeftMargin: hm]; [pi setRightMargin: hm]; [pi setTopMargin: vm]; [pi setBottomMargin: vm]; [self lockFocus]; printImage = [[NSBitmapImageRep alloc] initWithFocusedViewRect: [self bounds]]; [self unlockFocus]; [super print: sender]; [printImage release]; printImage = nil; return; } - (void) drawRect: (NSRect)f { if( ! printImage ) { int r, c; NSPoint p = NSZeroPoint; PSgsave(); [_background compositeToPoint: p operation: NSCompositeCopy]; for( r = 7; r >= 0; r-- ) { for( c = 7; c >= 0; c-- ) { Square3D *theSquare = square[r][c]; [theSquare drawWithFrame: f inView: self]; } } PSgrestore(); } else { [printImage draw]; } return; } - (void) mouseDown: (NSEvent *)event { NSException *exception = nil; if ( [NSApp bothsides] ) { NSBeep(); } else if( [NSApp finished] ) { [NSApp finishedAlert]; } else if ([self isEnabled]) { NSPoint pickedP, backP, roundedBackP; Square3D *theSquare; int t, clr; NSRect oldLocation; float x, y; int controlGState; int r2, c2; int r = -1, c = -1; int hi_r = -1, hi_c = -1; pickedP = [event locationInWindow]; pickedP = [self convertPoint: pickedP fromView: nil]; backP = pickedP; convert_point( &pickedP, &r, &c ); if( r == -1 || c == -1 ) return; theSquare = square[r][c]; t = [theSquare pieceType]; clr = [theSquare colorVal]; oldLocation = [theSquare location]; [self lockFocus]; PSgsave(); if( t ) { [theSquare setPieceType: 0 color: 0]; [self drawRect: [self frame]]; [self flashSquareAt: r : c]; hi_r = r; hi_c = c; /* Save background */ squareOrigin( r, c, &x, &y ); backP.x = x; backP.y = y; controlGState = [self gState]; [backBitmap lockFocus]; PSgsave(); PScomposite( roundedBackP.x = floor(backP.x), roundedBackP.y = floor(backP.y), BACK_STORE_WIDTH, BACK_STORE_HEIGHT, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; [theSquare setPieceType: t color: clr]; [theSquare drawInteriorWithFrame: [self frame] inView: self]; [theSquare setMoving: YES]; [[self window] flushWindow]; pickedP.x = (float) floor_value( (double)(pickedP.x - x) ); pickedP.y = (float) floor_value( (double)(pickedP.y - y) ); } r2 = 0; c2 = 0; [[self window] setAcceptsMouseMovedEvents: YES]; NS_DURING while( [event type] != NSLeftMouseUp ) { NSPoint p, centerP; NSRect newLocation; unsigned int mask = (NSLeftMouseUpMask | NSLeftMouseDraggedMask); event = [[self window] nextEventMatchingMask: mask]; if( ! t ) continue; p = [event locationInWindow]; p = [self convertPoint: p fromView: nil]; /* Restore old background */ [self lockFocus]; [backBitmap compositeToPoint: roundedBackP operation: NSCompositeCopy]; [self unlockFocus]; backP.x = p.x - pickedP.x; backP.y = p.y - pickedP.y; /* Unhighlight square */ centerP.y = backP.y + PIECE_HEIGHT_3D / 4.0; centerP.x = backP.x + PIECE_WIDTH_3D / 2.0; convert_point( ¢erP, &r2, &c2 ); if( r2 != hi_r || c2 != hi_c ) { if( hi_r != -1 && hi_c != -1 ) [self unhighlightSquareAt: hi_r : hi_c]; hi_r = r2; hi_c = c2; [self flashSquareAt: r2 : c2]; } /* Save new background */ [backBitmap lockFocus]; PSgsave(); PScomposite( roundedBackP.x = floor(backP.x), roundedBackP.y = floor(backP.y), BACK_STORE_WIDTH, BACK_STORE_HEIGHT, controlGState, (float)0.0, (float)0.0, NSCompositeCopy ); PSgrestore(); [backBitmap unlockFocus]; /* Draw piece at new location. */ [theSquare setRow: r2]; newLocation.origin.x = p.x - pickedP.x; newLocation.origin.y = p.y - pickedP.y; newLocation.size.width = PIECE_WIDTH_3D; newLocation.size.height = PIECE_HEIGHT_3D; [theSquare setLocation: newLocation]; [theSquare drawInteriorWithFrame: [self frame] inView: self]; [self setNeedsDisplay:YES]; // THIS WAS A PROBLEM! [[self window] flushWindow]; } NS_HANDLER exception = localException; NS_ENDHANDLER if( t ) { [theSquare setMoving: NO]; if( r2 != r || c2 != c ) { if( ! [NSApp makeMoveFrom: r : c to: r2 : c2] ) { [theSquare setLocation: oldLocation]; [theSquare setPieceType: t color: clr]; [theSquare setRow: r]; } } else { [theSquare setLocation: oldLocation]; [theSquare setPieceType: t color: clr]; [theSquare setRow: r]; } [self display]; [[self window] flushWindow]; } PSgrestore(); [self unlockFocus]; } if( exception ) [exception raise]; return; } @end // Local Variables: // tab-width: 8 // End: chess.app-33/Square.h0000644000000000000000000000564313034414342013302 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Square.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import @interface Square : NSCell { float background; NSString *icon; int pieceType; } - (void) setBackground: (float)b; - (float) background; - (void) setImage: (NSImage *)i; - (NSImage *) image; - (NSString *)imageName; - (void) setPieceType: (int)t; - (int) pieceType; - (void) drawWithFrame: (NSRect)cellFrame inView: (NSView *)v; - (void) drawBackground: (NSRect)f inView: (NSView *)v; - (void) highlight: (NSRect)f inView: (NSView *)v; - (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)v; @end chess.app-33/CustomInfo.plist0000644000000000000000000000037513034414342015031 0ustar rootroot CFBundleIconFile = "chess.icns"; CFBundleDocumentTypes = ( { CFBundleTypeName = "chess"; CFBundleTypeRole = Editor; CFBundleTypeIconFile = (chess.icns); CFBundleTypeExtensions = (chess); } ); chess.app-33/ChessDoc.tiff0000644000000000000000000000464413034414342014236 0ustar rootrootMM*N P8$ B`iRUC$5RU$E"Lv?(>[*eTfM`*s2̧pQh2'tbTmF_K-jP\JHMl3DܢjR[,Υ Z3˕ y%nM|U}a/8JMޒk'y%57rzU_2ZQi4X`diEQv=W34?˼+ P8$ d5 aB) hf5" +IOt %8i2\-*U:00  (Ra ' ' P8$ BaPd6DbQ83-FcQv=Fb_QD?1̟=s|@6Д_Uo~_ʩRU&8Mff|g#W#*yTV$7ʫ48?M{<'- TRbA䒋1wxO|<;*Ц {%,(GwR5IL2c}6WԹ^*$L/ە/[ݧ*.ZgU\Ӂ? ᭁ\"_ש-{^Z`beЭcx l]R*63\`C}^EW_өVEnEkʏe(n)wVOv–t7 ¸v# X _.NE+teW^1OBFΔ.J* vf٩+(WIdE 3(" ~E{[I p'FOmF].Z#4 2`:Èwo ++b,_Sd`e!"ʼ``%F݋RJu(dȱ8Zxt}{ET a}aǓ}<2gt^k5T pOBvM.e IAKVZ*沫G]NAқ+NAf4&c% 7h$XJX}6v~įUN/%Dh:=( ja @interface ResponseMeter : NSView - (void)displayFilled; @end chess.app-33/version.h0000644000000000000000000000461713034414342013527 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: version.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #define VERSION "1.6" chess.app-33/gnuglue.m0000644000000000000000000006071713034414342013520 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: gnuglue.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import // NSBeep /* own interface */ #import "gnuglue.h" /* types, constants & external variables */ #import "gnuchess.h" /* Application */ #import "Chess.h" // NSApp /* UNIX/C functions */ #include // fopen, fclose, fprintf, fscanf #include // signal #include // time #include // floor #ifdef __APPLE__ #include // getuid, usleep #else #include #endif #include // getpwuid, passwd #ifdef PROFILE #import // times, tms static struct tms tmbuf1, tmbuf2; #endif /* castles */ #define NO_CASTLE 0x0 #define LEFT_CASTLE 0x1 #define RIGHT_CASTLE 0x2 /* external functions (gnuchess.c) */ /* extern void gnuchess_main_init(); extern void NewGame(); extern void algbr(); extern int VerifyMove(); extern int castle(); extern int distance(); extern void InitializeStats(); extern int SqAtakd(); extern void SelectMoveStart(); extern int SelectMoveEnd(); extern void SelectLoop(); */ extern void gnuchess_main_init(), NewGame(); extern void InitializeStats(), SelectMoveStart( struct MoveInfo *mi ), SelectLoop( struct MoveInfo *mi ); extern void algbr(short f, short t, short iscastle); extern int VerifyMove(char *s, short iop,unsigned short *mv); extern int SelectMoveEnd( struct MoveInfo *mi ); extern int SqAtakd(short sq, short side); extern int castle(short side,short kf,short kt,short iop); extern int distance(short a,short b); /* static variables */ static struct MoveInfo move_info; static struct BookEntry *book_entries; static short GameQueens[240]; /* private functions */ static NSString * computerMove() { if( mvstr1[0] ) return [NSString stringWithCString: (const char *) mvstr1]; return nil; } /* (not used) static NSString * opponentMove() { if( mvstr2[0] ) return [NSString stringWithCString: (const char *) mvstr2]; return nil; } */ static void convert_move( move, row1, col1, row2, col2, castle_flag ) NSString *move; int *row1, *col1; int *row2, *col2; int *castle_flag; { int type = no_piece; if( [move isEqual: @"o-o"] ) *castle_flag = RIGHT_CASTLE; else if( [move isEqual: @"o-o-o"] ) *castle_flag = LEFT_CASTLE; else { char *algbr = (char *) [move cString]; if( algbr && *algbr ) { *col1 = algbr[0] - 'a'; *row1 = algbr[1] - '0' - 1; *col2 = algbr[2] - 'a'; *row2 = algbr[3] - '0' - 1; *castle_flag = NO_CASTLE; type = [NSApp pieceTypeAt: *row1 : *col1]; } } if( type ) { #ifdef NeXT_DEBUG NSLog( @"Piece type: %d", type ); #endif if( type == king ) { if( *col1 == 4 && *col2 == 6 ) *castle_flag = RIGHT_CASTLE; else if( *col1 == 4 && *col2 == 2 ) *castle_flag = LEFT_CASTLE; } } return; } static const char * sPieceChars[] = { "", "", "N", "B", "R", "Q", "K" }; static NSString * _convert_rowcol( row1, col1, row2, col2, type ) int row1, col1; int row2, col2; int type; { char algbr [6]; if( type == king && col1 == 4 ) { if( col2 == 6 ) return @"o-o"; if( col2 == 2 ) return @"o-o-o"; } sprintf(algbr, "%s%c%c%c%c", sPieceChars[type], 'a' + col1, '0' + row1 + 1, 'a' + col2, '0' + row2 + 1); return [NSString stringWithCString: (const char *) algbr]; } static unsigned short convert_string( string, side ) NSString *string; int side; { unsigned short move = 0; if( [string isEqual: @"o-o-o"] ) move = ( side == black ) ? 0x3C3A : 0x0402; else if( [string isEqual: @"o-o"] ) move = ( side == black ) ? 0x3C3E : 0x0406; else { char *algbr = (char *)[string cString]; if( algbr && *algbr ) { int r1, r2, c1, c2; c1 = algbr[0] - 'a'; r1 = algbr[1] - '1'; c2 = algbr[2] - 'a'; r2 = algbr[3] - '1'; move = (unsigned short)((locn[r1][c1] << 8) + locn[r2][c2]); } } return move; } /* (not used) static NSZone * create_zone() { unsigned pageSize = NSPageSize(); unsigned granularity = pageSize; BOOL canFree = NO; // no dynamic free NSZone *zone = NSCreateZone( pageSize, granularity, canFree ); if( zone ) return zone; NSLog( @"Zone cannot be created: size = %u", pageSize ); return (NSZone *) NULL; } */ static struct BookEntry * create_book_entry ( moves ) NSArray *moves; { unsigned moveCount = [moves count]; if( moveCount ) { struct BookEntry *entry; unsigned short *movep; unsigned entrySize = sizeof(struct BookEntry); unsigned moveSize = (moveCount + 1) * sizeof(unsigned short); NSZone *zone = NSDefaultMallocZone(); // ?? // NSZone *zone = [self zone]; entry = (struct BookEntry *)NSZoneMalloc( zone, entrySize ); movep = (unsigned short *) NSZoneMalloc( zone, moveSize ); if( entry && movep ) { unsigned index; // entry->next = book_entries; entry->mv = movep; for( index = 0; index < moveCount; index++ ) *(movep++) = [[moves objectAtIndex:index] unsignedShortValue]; *movep = 0; return entry; } NSLog( @"Memory cannot be allocated: zone = %p", (void *)zone ); } return (struct BookEntry *)NULL; } /* Functions invoked by gnuchess.c modules */ void OutputMove() { int row1, col1, row2, col2, castle_flag; NSString *move = computerMove(); #ifdef NeXT_DEBUG NSLog( @"OutputMove: Computer move is %@, mask %#04x", move, root->flags ); #endif if( root->flags & draw ) [NSApp setFinished: DRAW_GAME]; [NSApp fillResponseMeter: player]; if( ! move || [move isEqual: @""] ) { #ifdef NeXT_DEBUG NSLog( @"NO COMPUTER MOVE" ); #endif return; } convert_move( move, &row1, &col1, &row2, &col2, &castle_flag ); [NSApp movePieceFrom: row1 : col1 to: row2 : col2]; switch (castle_flag ) { case NO_CASTLE: break; case LEFT_CASTLE: [NSApp movePieceFrom: row1 : 0 to: row2 : 3]; break; case RIGHT_CASTLE: [NSApp movePieceFrom: row1 : 7 to: row2 : 5]; break; } #ifdef NeXT_DEBUG NSLog( @"White has %hd pieces", PieceCnt[white] ); NSLog( @"Black has %hd pieces", PieceCnt[black] ); #endif return; } void SelectLevel() { #ifdef NeXT_DEBUG NSLog( @"SelectLevel" ); #endif return; } void UpdateClocks() { #ifdef NeXT_DEBUG NSLog( @"UpdateClocks" ); #endif return; } void ElapsedTime( int iop ) /* Determine the time that has passed since the search was started. If the elapsed time exceeds the target (ResponseTime+ExtraTime) then set timeout to true which will terminate the search. */ { et = time((long *)0) - time0; if( et < 0 ) et = 0; ETnodes += 50; if( ! iop ) [NSApp displayResponseMeter: player]; #ifdef NeXT_DEBUG NSLog( @"ResponseTime %ld, ExtraTime %ld, Sdepth %hd, iop %d, et %ld, et0 %ld", ResponseTime, ExtraTime, Sdepth, iop, et, et0 ); #endif if( et > et0 || iop == 1 ) { if( et > ResponseTime+ExtraTime && Sdepth > 1 ) timeout = true; et0 = et; if( iop == 1 ) { time0 = time((long *)0); et0 = 0; } #ifdef PROFILE (void)times( &tmbuf2 ); cputimer = 100 * (tmbuf2.tms_utime - tmbuf1.tms_utime) / HZ; if( cputimer > 0 ) evrate = (100 * NodeCnt) / (cputimer + 100 * ft); else evrate = 0; #endif ETnodes = NodeCnt + 50; UpdateClocks(); } [NSApp peekAndGetLeftMouseDownEvent]; return; } void SetTimeControl() { short moves; long clock; #ifdef NeXT_DEBUG NSLog( @"SetTimeControl" ); #endif if( TCflag ) { moves = TCmoves; clock = 60 * (long)TCminutes; } else { moves = 0; clock = 0; Level = 60 * (long)TCminutes; } TimeControl.moves[white] = TimeControl.moves[black] = moves; TimeControl.clock[white] = TimeControl.clock[black] = clock; et = 0; ElapsedTime(1); return; } void ShowResults( short score, unsigned short bstline[], char ch ) { #ifdef NeXT_DEBUG NSLog( @"ShowResults: score = %hd %@", score, computerMove() ); #endif return; } void GameEnd( short score ) { int gameStatus = 0; NSBeep(); if( root->flags & draw ) gameStatus = DRAW_GAME; else if( score == 9998 ) { NSLog( @"score %hd, winner %hd", score, winner ); gameStatus = ( winner == black ) ? BLACK_MATE : WHITE_MATE; } else if( score == -9999 ) { if( bothsides ) { NSLog( @"score %hd, winner %hd", score, winner ); if( winner != -1 ) gameStatus = ( winner == white ) ? WHITE_MATE : BLACK_MATE; else gameStatus = WHITE_MATE; } else gameStatus = OPPONENT_MATE; } [NSApp setFinished: gameStatus]; return; } void ClrScreen() { #ifdef NeXT_DEBUG NSLog( @"ClrScreen" ); #endif return; } void UpdateDisplay( int f, int t, int flag, int iscastle ) { #ifdef NeXT_DEBUG NSLog( @"UpdateDisplay: from %d, to %d, flag %#04x, iscastle %d, InChk %hd", f, t, flag, iscastle, InChk ); #endif [NSApp updateBoard]; return; } void GetOpenings() /* Read in the Opening Book file and parse the algebraic notation for a move into an unsigned integer format indicating the from and to square. Create a linked list of opening lines of play, with entry->next pointing to the next line and entry->move pointing to a chunk of memory containing the moves. More Opening lines of up to 256 half moves may be added to gnuchess.book. */ { NSBundle *bundle; NSString *path; NSString *book; NSScanner *scanner; NSMutableArray *moveList; int side; if( book_entries ) { Book = book_entries; return; } bundle = [NSBundle mainBundle]; path = [bundle pathForResource: @"gnuchess" ofType: @"book"]; book = [NSString stringWithContentsOfFile: path]; scanner = [NSScanner scannerWithString: book]; if( ! book || ! scanner ) return; moveList = [NSMutableArray arrayWithCapacity: 0]; side = white; // book_entries = NULL; while( ! [scanner isAtEnd] ) { NSString *textLine; if( ! [scanner scanUpToString: @"\n" intoString: &textLine] ) continue; if( [textLine isEqual: @"\n"] || [textLine hasPrefix: @"!"] ) { struct BookEntry *entry = create_book_entry( moveList ); if( entry ) { entry->next = book_entries; book_entries = entry; side = white; [moveList removeAllObjects]; } } else { unsigned idx; NSArray *substrings = [textLine componentsSeparatedByString: @" "]; for( idx = 0; idx < [substrings count]; idx++ ) { unsigned short move; NSString *string = (NSString *)[substrings objectAtIndex: idx]; if( [string isEqual: @""] ) continue; move = convert_string( string, side ); if( move ) { NSNumber *number = [NSNumber numberWithUnsignedShort:move]; [moveList addObject: (id)number]; } side = otherside[side]; } } } Book = book_entries; return; } void ShowDepth( char ch ) { #ifdef NeXT_DEBUG NSLog( @"ShowDepth: %hd%c max %hd", Sdepth, ch, MaxSearchDepth ); #endif return; } void ShowCurrentMove( short pnt, short f, short t ) { #ifdef NeXT_DEBUG algbr( f, t, false ); NSLog( @"ShowCurrentMove: (%2hd) %@", pnt, computerMove() ); #endif return; } void ShowSidetomove() { #ifdef NeXT_DEBUG NSString *colorStr = ( player == white ) ? @"WHITE" : @"BLACK"; NSLog( @"ShowSidetomove: %2d: %@", (int)(1+(GameCnt+1)/2), colorStr ); #endif return; } static void show_message( NSString *str ) { #ifdef NeXT_DEBUG NSLog( @"ShowMessage: %@", str ); #endif [NSApp setTitleMessage: str]; return; } void ShowMessage( const char *s ) { show_message( [NSString stringWithCString: s] ); return; } static void ExitChess() { [NSApp terminate: NSApp]; exit(0); } static void Die() { if( [NSApp canFinishGame] ) { #ifndef __MINGW32__ signal( SIGINT, SIG_IGN ); signal( SIGQUIT, SIG_IGN ); #endif ExitChess(); } return; } static void TerminateSearch() { #ifndef __MINGW32__ signal( SIGINT, SIG_IGN ); signal( SIGQUIT, SIG_IGN ); timeout = true; signal( SIGINT, Die ); /* Die() */ signal( SIGQUIT, Die ); #endif return; } void SearchStartStuff( short side ) { #ifndef __MINGW32__ signal( SIGINT, TerminateSearch ); /* TerminateSearch() */ signal( SIGQUIT, TerminateSearch ); #endif return; } /* Functions invoked by Chess.app modules */ void init_gnuchess () { gnuchess_main_init(); return; } void new_game () { NewGame(); return; } void in_check () { int incheck = -1; if( SqAtakd( PieceList[computer][0], opponent ) ) incheck = computer; if( SqAtakd( PieceList[opponent][0], computer ) ) incheck = opponent; if( incheck == black ) show_message( @"Black is in check" ); else if( incheck == white ) show_message( @"White is in check" ); return; } void get_game ( NSString *filename ) { NSFileManager *fileMgr; const char *path; FILE *fd; int sq; int c; fileMgr = [NSFileManager defaultManager]; if( ! [fileMgr fileExistsAtPath: filename] ) { NSLog( @"file `%@' does not exist.", filename ); return; } if( ! [fileMgr isReadableFileAtPath: filename] ) { NSLog( @"file `%@' is not readable.", filename ); return; } path = [filename cString]; if( ! path || ! *path ) { NSLog( @"filename `%@' has empty CString.", filename ); return; } fd = fopen( path, "r" ); if( ! fd ) { NSLog( @"file `%s' cannot be opened.", path ); return; } (void)fscanf( fd, "%hd%hd", &computer, &opponent ); (void)fscanf( fd, "%hd", &Game50 ); (void)fscanf( fd, "%hd%hd", &castld[white], &castld[black] ); (void)fscanf( fd, "%hd%hd", &kingmoved[white], &kingmoved[black] ); (void)fscanf( fd, "%hd%hd", &TCflag, &OperatorTime ); (void)fscanf( fd, "%ld", &TimeControl.clock[white] ); (void)fscanf( fd, "%ld", &TimeControl.clock[black] ); (void)fscanf( fd, "%hd", &TimeControl.moves[white] ); (void)fscanf( fd, "%hd", &TimeControl.moves[black] ); for( sq = 0; sq < 64; sq++ ) { unsigned short m; (void)fscanf( fd, "%hu" , &m ); board[sq] = (short)( m >> 8 ); color[sq] = (short)( m & 0xff ); if( ! color[sq] ) color[sq] = neutral; else color[sq]--; } [NSApp updateBoard]; GameCnt = -1; c = '?'; while( c != EOF ) { struct GameRec *game = &GameList[++GameCnt]; c = fscanf( fd,"%hu%hd%hd%ld%hd%hd%hd", &game->gmove, &game->score, &game->depth, &game->nodes, &game->time, &game->piece, &game->color ); if( ! game->color ) game->color = neutral; else (game->color)--; } GameCnt--; if( TimeControl.clock[white] > (long)0 ) TCflag = true; computer--; opponent--; (void)fclose( fd ); InitializeStats(); UpdateDisplay( 0, 0, 1, 0 ); Sdepth = 0; return; } int save_game ( NSString *filename ) { NSFileManager *fileMgr; const char *path; FILE *fd; int sq; int i; fileMgr = [NSFileManager defaultManager]; if( [fileMgr fileExistsAtPath: filename] ) { if( ! [fileMgr isWritableFileAtPath: filename] ) { NSLog( @"file `%@' exists and is not writable.", filename ); return( 0 ); } } path = [filename cString]; if( ! path || ! *path ) { NSLog( @"filename `%@' has empty CString.", filename ); return( 0 ); } fd = fopen( path, "w" ); if( ! fd ) { NSLog( @"file `%s' cannot be opened.", path ); return( 0 ); } (void)fprintf( fd, "%hd %hd ", computer+1, opponent+1 ); (void)fprintf( fd, "%hd\n", Game50 ); (void)fprintf( fd, "%hd %hd ", castld[white], castld[black] ); (void)fprintf( fd, "%hd %hd\n", kingmoved[white], kingmoved[black] ); (void)fprintf( fd, "%hd %hd\n", TCflag, OperatorTime ); (void)fprintf( fd, "%ld ", TimeControl.clock[white] ); (void)fprintf( fd, "%ld ", TimeControl.clock[black] ); (void)fprintf( fd, "%hd ", TimeControl.moves[white] ); (void)fprintf( fd, "%hd\n", TimeControl.moves[black] ); for( sq = 0; sq < 64; sq++ ) { unsigned short m = ( color[sq] == neutral ) ? 0 : color[sq] + 1; m += 256 * board[sq]; (void)fprintf( fd, "%hu\n", m ); } for( i = 0; i <= GameCnt; i++ ) { struct GameRec *game = &GameList[i]; short clr = ( game->color == neutral ) ? 0 : game->color + 1; (void)fprintf( fd, "%hu %hd %hd %ld %hd %hd %hd\n", game->gmove, game->score, game->depth, game->nodes, game->time, game->piece, clr ); } (void)fclose( fd ); return( 1 ); } int list_game ( NSString *filename ) { NSFileManager *fileMgr; const char *path; FILE *fd; int i; fileMgr = [NSFileManager defaultManager]; if( [fileMgr fileExistsAtPath: filename] ) { if( ! [fileMgr isWritableFileAtPath: filename] ) { NSLog( @"file `%@' exists and is not writable.", filename ); return( 0 ); } } path = [filename cString]; if( ! path || ! *path ) { NSLog( @"filename `%@' has empty CString.", filename ); return( 0 ); } fd = fopen( path, "w" ); if( ! fd ) { NSLog( @"file `%s' cannot be opened.", path ); return( 0 ); } (void)fprintf( fd, "\n" ); (void)fprintf( fd, " score depth nodes time" ); (void)fprintf( fd, " " ); (void)fprintf( fd, " score depth nodes time"); (void)fprintf( fd, "\n" ); for( i = 0; i <= GameCnt; i++ ) { struct GameRec *game = &GameList[i]; short from = (short)( game->gmove >> 8 ); short to = (short)( game->gmove & 0xff ); algbr( from, to, false ); if( ! (i % 2) ) (void)fprintf( fd, "\n" ); else (void)fprintf( fd, " " ); (void)fprintf( fd, "%5s %5hd %2hd %6ld %5hd", mvstr1, game->score, game->depth, game->nodes, game->time ); } (void)fprintf( fd, "\n" ); (void)fprintf( fd, "\n" ); (void)fclose( fd ); return( 1 ); } void undo_move () /* Undo the most recent half-move. */ { struct GameRec *game = &GameList[GameCnt]; short from = (short)( game->gmove >> 8 ); short to = (short)( game->gmove & 0xff ); if( board[to] == king && distance(to, from) > 1 ) { (void)castle( game->color, from, to, (short)2 ); } else { board[from] = board[to]; color[from] = color[to]; board[to] = game->piece; color[to] = game->color; if ( GameQueens[GameCnt] ) board[from] = GameQueens[GameCnt]; if (board[from] == king) --kingmoved[color[from]]; } if( TCflag ) ++TimeControl.moves[color[from]]; GameCnt--; mate = false; Sdepth = 0; if ( [NSApp finished] ) [NSApp setFinished: 0]; UpdateDisplay( 0, 0, 1, 0 ); InitializeStats(); return; } int give_hint () { if( hint ) { short from = (short)( hint >> 8 ); short to = (short)( hint & 0xff ); algbr( from, to, false ); #ifdef NeXT_DEBUG NSLog( @"hint: %@", computerMove() ); #endif [NSApp highlightSquareAt: (int)(from / 8) : (int)(from % 8)]; [NSApp highlightSquareAt: (int)(to / 8) : (int)(to % 8)]; } return (int) hint; } NSString * convert_rowcol ( row1, col1, row2, col2, type ) int row1, col1; int row2, col2; int type; { return _convert_rowcol( row1, col1, row2, col2, type ); } BOOL verify_move( move ) NSString *move; { unsigned short mv; char *str = (char *)[move cString]; int verify = VerifyMove( str+(strlen(str)>4 && str[0] != 'o'), (short)0, &mv ); return ( verify == true ) ? YES : NO; } void select_move_start ( side, iop ) int side; int iop; { move_info.side = (short) side; move_info.alpha = (short) 0; move_info.beta = (short) 0; move_info.iop = (short) iop; move_info.rpt = (short) 0; Sdepth = 0; SelectMoveStart( &move_info ); return; } void select_move_end () { (void)SelectMoveEnd( &move_info ); return; } BOOL select_loop_end () { return (BOOL)(timeout || Sdepth >= MaxSearchDepth); } void select_loop () { SelectLoop( &move_info ); return; } void run_computer_game () { quit = false; while( ! mate && ! quit && ! [NSApp finished] ) [NSApp selectMove: player iop: 1]; quit = true; timeout = true; return; } void stop_computer_game () { quit = true; timeout = true; return; } void select_computer_move () { Sdepth = 0; ft = 0; if( ! quit && ! mate && ! force ) [NSApp selectMove: computer iop: 1]; return; } int current_player () { return (int)player; } int game_count () { return (int)GameCnt; } int move_time () { return (int)GameList[GameCnt].time; } int response_time () { return (int)( ResponseTime + ExtraTime ); } void reset_response_time () { ResponseTime = 0; ExtraTime = 0; return; } int elapsed_time () { return (int)et; } short *default_pieces () { return Stboard; } short *default_colors () { return Stcolor; } short *current_pieces () { return board; } short *current_colors () { return color; } int game_level () { return (int) Level; } void set_game_level ( level ) int level; { Level = (long) level; return; } void interpret_level ( level, moves, minutes ) int level; int *moves; int *minutes; { switch( level ) { case 1 : *moves = 60; *minutes = 5; break; case 2 : *moves = 60; *minutes = 15; break; case 3 : *moves = 60; *minutes = 30; break; case 4 : *moves = 40; *minutes = 30; break; case 5 : *moves = 40; *minutes = 60; break; case 6 : *moves = 40; *minutes = 120; break; case 7 : *moves = 40; *minutes = 240; break; case 8 : *moves = 1; *minutes = 15; break; case 9 : *moves = 1; *minutes = 60; break; case 10 : *moves = 1; *minutes = 600; break; default : *moves = 0; *minutes = 0; break; } return; } void set_preferences ( prefs ) struct Preferences *prefs; { if( prefs ) { TCmoves = (short)prefs->time_cntl_moves; TCminutes = (short)prefs->time_cntl_minutes; TCflag = (short)( TCmoves > 1 ); SetTimeControl(); bothsides = (short)prefs->bothsides; opponent = (short)prefs->opponent; computer = (short)prefs->computer; } return; } void set_timeout( flag ) BOOL flag; { timeout = (short)flag; return; } void set_game_queen( piece ) int piece; { GameQueens[GameCnt] = (short)piece; return; } NSString *copyright_text () { NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource: @"COPYING" ofType: nil]; if( path ) { NSString *string = [NSString stringWithContentsOfFile: path]; if( string ) return string; } return nil; } void sleep_microsecs ( microsecs ) unsigned microsecs; { (void) usleep( microsecs ); return; } int floor_value ( value ) double value; { return (int) floor( value ); } // Local Variables: // tab-width: 8 // End: chess.app-33/Board3D.h0000644000000000000000000000634613034414342013261 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Board3D.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import @class NSImage; @class Square3D; @interface Board3D : NSControl { NSImage *_background; NSImage *_pieces; NSImage *backBitmap; Square3D *square[8][8]; id printImage; } - (void) setBackgroundBitmap: (NSImage *)bitmap; - (NSImage *) backgroundBitmap; - (void)setPiecesBitmap: (NSImage *) bitmap; - (NSImage *) piecesBitmap; - (void) setupPieces; - (void) layoutBoard: (short *)p color: (short *)c; - (void) placePiece: (short)p at: (int)row : (int)col color: (short)c; - (void) slidePieceFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2; - (int) pieceAt: (int)row : (int)col; - (int) colorAt: (int)row : (int)col; - (void) highlightSquareAt: (int)row : (int) col; - (void) unhighlightSquareAt: (int)row : (int) col; - (void) flashSquareAt: (int)row : (int) col; - (void) drawRows: (int)row from: (int)col; @end chess.app-33/gnuglue.h0000644000000000000000000001136413034414342013505 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: gnuglue.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ /* Glue software for gnuchess.c & Chess.app */ #import @class NSString; /* constant definitions Note: These constants are the same as defined in gnuchess.h. This file is created for not importing gnuchess.h in main modules of Chess.app. */ /* players */ enum { WHITE = 0, BLACK, NEUTRAL }; /* pieces */ enum { NO_PIECE = 0, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING }; /* board layout */ #define ROW_COUNT 8 #define COLUMN_COUNT 8 #define SQUARE_COUNT (ROW_COUNT*COLUMN_COUNT) /* function declarations */ /* invoked by gnuchess.c modules */ extern void OutputMove(); extern void SelectLevel(); extern void UpdateClocks(); extern void ElapsedTime( int ) ; extern void SetTimeControl(); extern void ShowResults( short, unsigned short [], char ); extern void GameEnd( short ); extern void ClrScreen(); extern void UpdateDisplay( int, int, int, int ); extern void GetOpenings(); extern void ShowDepth( char ); extern void ShowCurrentMove( short, short, short ); extern void ShowSidetomove(); extern void ShowMessage( const char * ); extern void SearchStartStuff( short ); /* invoked by Chess.app modules */ extern void init_gnuchess(); extern void new_game(); extern void in_check(); extern void get_game ( NSString * ); extern int save_game( NSString * ); extern int list_game( NSString * ); extern void undo_move(); extern int give_hint(); extern NSString *convert_rowcol( int, int, int, int, int ); extern BOOL verify_move( NSString * ); extern void select_move_start( int, int ); extern void select_move_end(); extern BOOL select_loop_end(); extern void select_loop(); extern void run_computer_game(); extern void stop_computer_game(); extern void select_computer_move(); extern int current_player(); extern int game_count(); extern int move_time(); extern int response_time(); extern void reset_response_time(); extern int elapsed_time(); extern short *default_pieces(); extern short *default_colors(); extern short *current_pieces(); extern short *current_colors(); extern int game_level(); extern void set_game_level( int ); extern void interpret_level( int, int *, int * ); extern void set_preferences(); extern void set_timeout( BOOL ); extern void set_game_queen( int ); extern NSString *copyright_text(); extern NSString *user_fullname(); extern void sleep_microsecs( unsigned ); extern int floor_value( double ); chess.app-33/gnuchess.h0000644000000000000000000000570513034414342013660 0ustar rootroot/* This file contains code for CHESS. Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. This file is part of CHESS. CHESS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the CHESS General Public License for full details. Everyone is granted permission to copy, modify and redistribute CHESS, but only under the conditions described in the CHESS General Public License. A copy of this license is supposed to have been given to you along with CHESS so you can know your rights and responsibilities. It should be in a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. */ /* NEXTSTEP 4.0 changes: 9-2-95 Just a little clean-up along with gnuchess.c changes. The original is saved in gnuchess.save folder. */ /* Header file for GNU CHESS */ #define neutral 2 #define white 0 #define black 1 #define no_piece 0 #define pawn 1 #define knight 2 #define bishop 3 #define rook 4 #define queen 5 #define king 6 #define pxx " PNBRQK" #define qxx " pnbrqk" #define rxx "12345678" #define cxx "abcdefgh" #define check 0x0001 #define capture 0x0002 #define draw 0x0004 #define promote 0x0008 #define cstlmask 0x0010 #define epmask 0x0020 #define exact 0x0040 #define pwnthrt 0x0080 #define maxdepth 30 #define true 1 #define false 0 struct MoveInfo { short side; short alpha; short beta; short iop; short rpt; }; struct leaf { short f,t,score,reply; unsigned short flags; }; struct GameRec { unsigned short gmove; short score,depth,time,piece,color; long nodes; }; struct TimeControlRec { short moves[2]; long clock[2]; }; struct BookEntry { struct BookEntry *next; unsigned short *mv; }; extern char mvstr1[5],mvstr2[5]; extern struct leaf Tree[2000],*root; extern short TrPnt[maxdepth],board[64],color[64]; extern short row[64],column[64],locn[8][8]; extern short PieceList[2][16],PieceCnt[2],atak[2][64],PawnCnt[2][8]; extern short castld[2],kingmoved[2]; extern short c1,c2,*atk1,*atk2,*PC1,*PC2; extern short mate,post,opponent,computer,Sdepth,Awindow,Bwindow,dither; extern long ResponseTime,ExtraTime,Level,et,et0,time0,cputimer,ft; extern long NodeCnt,evrate,ETnodes,EvalNodes,HashCnt; extern short quit,reverse,bothsides,hashflag,InChk,player,force,easy,beep,meter; extern short timeout,xwndw; extern struct GameRec GameList[240]; extern short GameCnt,Game50,epsquare,lpost,rcptr,contempt; extern short MaxSearchDepth; extern struct BookEntry *Book; extern struct TimeControlRec TimeControl; extern short TCflag,TCmoves,TCminutes,OperatorTime; extern short otherside[3]; extern short Stboard[64]; extern short Stcolor[64]; extern unsigned short hint,PrVar[maxdepth]; extern short winner; #define HZ 60 chess.app-33/Clock.h0000644000000000000000000000501613034414342013067 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Clock.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import @interface Clock : NSView { int seconds; NSImage *background; } - (void)setSeconds: (int)s; - (int)seconds; @end chess.app-33/ResponseMeter.m0000644000000000000000000000672713034414342014646 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: ResponseMeter.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ // own interface #import "ResponseMeter.h" // PS #import #import // portability layer #import "gnuglue.h" // response_time, elapsed_time @implementation ResponseMeter - (void)displayFilled { NSRect f = [self bounds]; [self lockFocus]; PSgsave(); PSsetgray( NSWhite ); PSrectfill(0.0, 0.0, f.size.width, f.size.height); PSsetlinewidth( (float)2.0 ); PSsetgray( NSBlack ); PSrectstroke(0.0, 0.0, f.size.width, f.size.height); PSgrestore(); [[self window] flushWindow]; [self unlockFocus]; return; } - (void)drawRect: (NSRect)f { int res_time; PSgsave(); PSsetgray( (float)0.5 ); PSrectfill(0.0, 0.0, f.size.width, f.size.height); if( res_time = response_time() ) { float ratio = elapsed_time() / (float)res_time; PSsetgray( NSWhite ); PSrectfill( (float)0.0, (float)0.0, (float)( f.size.width * ratio ), f.size.height ); } PSsetlinewidth( (float)2.0 ); PSsetgray( NSBlack ); PSrectstroke(0.0, 0.0, f.size.width, f.size.height); PSgrestore(); return; } @end chess.app-33/chess.icns0000644000000000000000000011021213034414342013641 0ustar rootrooticnsics#H;'???ics8]W]^^WWW]]WWW^Vis32ģXK:]w'~Mm|MG{mwkMpwgkt&83+t8.8{).$L4LXutlm36[^AFICN#?  ? ?C??icl8]^]W]2WWW3,-]W^]3W932^]33^^]^]W]32W^]]Wdୈ^^d]+d+W+VV^VV]VVVUVW3W3W33]OVV+W,W+V+Wd]O+OV9^^^V+V+W33]W9WW9W^]V++V],^++23]V]+{+il32}at>PŬhjS =Ċ z¼6 4Ҭsy{yM o45Ti~m]'2NS{wwg:߉hupn`A xpijd[ò,ZĀ uieh^^P%=avodceV]ִ[<@nhUTRPFQ}h+^bƵRʺQ\ܯ\j cöt>6CF?9Rke%xrqrvtqw*N϶ʯT}tPρ~~ PCVjjhVWmx' B^OPWqm6uq:B mdJU*5yLNՐ= (xwm{h Zcpje`ra$ !jO`VZcdo\4 O^ 6Lb^_PA;8\WXN"pKUOPD. UPLNH=-[ƀ {RMJKB?Q' =aSNI:Aַ[=@nE7=<7,1ph+^bvxRʺ>>;] cöO%*.&5H{e%|d[UOQPUQKT*Nz{qi̯T}tƽѵev4YӞUe⃎ 7"2FFD12Vv* FwM89Baf8yu9>EFR@ 2a=2EAD6()?:;3 X.855* 6423/%.\Ȁ c4201')S'=b52.-.!,׺\=@nu' ""ei+bT^sia_aoXkRʺ-"lj!Q cķm-  (oe%P?8501241)2*OÇj^URSX`g[KD̰T~I@v6ʹy/P䅎 ! ')%Bv, Ho>&%0Sa;|y=E l8mk_Ex;Zrݞxmh;SX[oo 63OMil ).\c8;|*3gkOOit32=x+Vt.hu@;܊O Ԍ. 'ɩϱ?;ͯH:|:T Qe_ѵq[EIdiE¹{8(V"dgH6aPW3\3VļBqS_{Ϳu"zʭ°[#¨t1вŷŪ{Q(d˹}Ǥ~h!)KθwuzƢs4+@̳xhhs˶|sY./^ƥȰmuxx|uTdz|qwtcF/mͼѱ~mormA˻}}}~~llrqNʵ|}|yy|{~~rjnp צ|xy{}|yzy{}ugmn1"Xںö{oklou}~}uquxy~ ~tglkZT$T}yƾ~vd^^[]eqzy{zvggsz}| }pgjk[U3!zҤxsnga\TPKNT^mqtuo_gqy}}}||}~ylfhi[T%\Ȱ~[W\]TKEC=;EZcdmi\]hv}~||{ |}}viedf[T8p}_^VG9. Lj~}|{yxxyyzyqibdeYT Ap_GZ<%G@ARn|zxxwwxvwwohcef\V-7J`o2NaMCNe{{ywwuuvwvtmhddgH4CV`d`qnSIWl{~yxutuvuttqkgeej!( P7t`qTMaw~|vvttsstuupiebej!i}nQVm{zyusuuttuvrnhdbdjTdmVcyywvttrrssqrpkdcadh e[p}yvsttp oqonkcdaecWDq|dizzwspo pnnmhac^dbYxـyis{wtpooloop nld`a^fX`oh smxzupoomml kkc^`]gXjLbspxwsomommlmllia_a`hc]Eruxupmklkkllmkh`_``dxzG|}vxvpnkjlkklmmkjjea`^_gswGgό {wxunmmiijkgc^`]`jzg /Yvm yvwplkmij kkjjhb\^^`i{knU 'U~ˉxvtnkjkhhiijkjjhc`\^^bf Œv|P5;b }xvpkjikhi kkjigd^Z]XdWɁ̓y|[.(1p'yxunkhghgghhijiigb^Z]XdUϚz|eL&Dy l}}xwxsnkhghghiihfca[Y\\bc؜z|o8 ([/rqyzttutnjkhighggiigcb_XX[]^[}xE1V-qhsoimsqlhjggffeeghedb^XZZ[]W[^R14bqbWigchllgfgde db^ZVWWYVRgc V)$Unȅ8RVYdffcbcddaabca_[VOROQPWgke@";vg>BBACFLNORR_dcrmxX4$ ".diaZTJGFEGJIFIJKIIEFINUX]bdcqwtig l<. %>v}gaZT"UWYWSTVUUTTSSQTVY[^bddbr}tsxnvL1! )Wzf`]]\[]\\^__`_^[ZYY[]`bdft~xuwv~wa:, %8sū}tjhecdgffdccb_`afq{|wwxyxxZ |D0'K~xsqmlnnlnlljnonqt||wuwwxyz|v|Y6$$1e7{ȴv}wvvwwxyz}u p>/(?=ƭdĶzuvvxz|}a N3% !-YSV˺'zwy}~~cŸ c9/'6uʔ]cwŹHͻ }E2W)JҞ`l_ž{kkмV7(T'/eüԨlfپLÿѣksθp>1#(=خjdԺIf*Ͱhk{ڸL4'" #,WyeҶHVt΀)ִxWnèb8/K':OҶV^OzշyY]dJ2 ԺxXYLg ճzZd\S.SyپNbXOR˙e[bj\hMnȥSg[VOE\קqU\fhr^ә_#"apдQi\WSHAKƙdQU`ejtUާx2 Ji}ácTl^ZUOF=BY{۰kOKS]aejqfطyM!TnзRRha[VROKG?AJRkzrTMEDNUY`cfksayh15hnɮVPkc^YQUSQOMKFFBA@?@?DDHNSVZ\_bfou[voD 1IhvŬe0akaX[ZXXVUTUTTSSRSSTUTVTW\]aceitl8voV/!YdqD2Yefa^_]][\[ZYZYYZ[\]^]]adiotjJWsff,D]hc:=Pcmjfdaba_^_`abcdcflsmV@Q~zfb<'M_r{eI/(GXcipnljeefjhlkjd[O-9U{gaU&%1^`o`P8637IJUUTHH< +=<[oxb_8!C_iwlc\WRPNNPRW\clwlfP$X`¹~jd* E^h½ Śul@Ve{ּsb, 7fkס|qB Jkw|_*bl؁ߠy4 Lhw}K "_on2;m{H "(r[<ד[M׬Z-l)d̰j2 }ݗ{{j ʰ-'u2%db(; 9LIy||wtoWC03PjP.gr`(=N|O2!Q>plA!N$An}h 1|؟]@JdxsW"`{{ɺƼ}iG#g}tw|o[ '!kjw{x|yuxa:(Lem`qyos}{wx|vz}}tzdL)9wu_Xfdagsruz|}z{qprqv~oy{eW+,lntZJKZimvs{}~}ywxxqlnopswsami[C,DiycR]ouwxuwwxrtssumlmkmow}]cc]>.P|w^svfiosuuwuturlkrphgefinpvzcV]\L3Rs|_hzhgknqonnhdjldgefeimorxjRVXU-pxlwthagkllomijga_cdcfd ejkot}nSSZY1:~rzwj^aaihhkkhaZZ[`aaddceeghkot{zrYXYW2ʵzqa_`_`dhhggeb__a`bfggfghgjkrsxo]SVX!C|}|uo_TQWabbc_`ZSZ^`hhigghefhgjppi`RVUD>3>d^xmmgbXGEEBFKY]\^]\NOX`adgfhideeffgiifWQVUDB)rr^]WSMFB;636;BR[[\VGSV^bgjgjieeacefbUPSPG?Bbfbb@?DC86-*&$/DFJONDCP\bdb a`baeh_QSLNG?2&SfmxaBC>/& (=CCFF=9Nbffddccaab_abcZPMLPF?PSMQZZRbt9  49E:.+;Q_edb a``bab_XSMOOD>(YI ,B%0,/;Teecba^]]^]^^XSMOPFA"2JU ;H619Obfc_]]\][VUNNQ5 );GMD[[<6CWbe_^\[\\[ZZVTSOOS 4" tQfZ?9Lahe][ ZZ\]YVRPMOR ihjZ=@Yc`_\Z[ ]]XVUMMOSTdniW??D@=NS V)$Unoj$;?ELONKNOPPMMNPIHG?8;9<FYSk/=T h“<5>@B?992,-6OmkP~uA+^"E̸xddeffhhgg^``b_p{ɴL~T6'0c /iÀjIM'Oj2=] gAIY3BA#/>1BǴS:@@}@?)588-(KǑ]87>@2R ,U)uH6252+'8]ֵjH028<<=Aqb8#6r_UB52/--*(&07>afcddA4.#(14679:AN@ wA-'Jku[H?4/++.021)).,+*&..012457;>HJIWUvX4$ ".dhcQH?<5140476235532320247@@FJNKX\WLg l<. %>ttniaOLB<";>A?<<==A=<<=:;>>CFIMMI[`YX\OtL1! )W3xpij_NKEBCCDBDIIFGFJHIDBAADDKMKMW`[\^\`\a:, %8svxpncbb[SRM#OOLKNOQQNOKJKLGHHQW``[[\__]fL |D0'Kxtniddejcf[ZXQSQQTVUTPSSTWY^\YWY[\\^`gZ|Y6$$1e7rztoljkhjjllqshegfg_bkfggoolmgc]Y[XY\[\_bjk p>/(?$ƭX}xwtrsosppnopopqoqkpttprqusld\XX[\[_^ajW N3% !-YSL~}{|zywtvusutsrsrxvz{{~|rh_`Z]b`^_gSŸ c9/'6uʔ]cl~}}{| z{zzywxx{{wneflfccg=ͻ }E2)JҞ`lY4||rpomocnkkмV7(0'/eüԨlfپJq lѣksθp>1Q(=خjdԺGKL|k{ڸL4'O #,WyeҶE>Y˿]?znèb8/K':OҶVF:_]@E|dJ2 Ժr>A6M݀,^@HDS.Syپ:H>7:pڀހ߀־xLBHKEhAMnȥMMB>6.@uӳW;AHIT\ә_#?"apд?MB><1,4fȦ|L7;EIKTBާx2 ;Ji}ác>OEB=8/(+@a{ͷoR76;DFJMQKطyM7!TnзR>MGB=:741)*06P^uxxyzx{}eY<2.+2;@FGJNVJyh15hnɮV==;:988688:;:;<>A@DFHJXP4voV/!YdqC%>ILGFFCFCBA??=<Vc^^g$/Xh`m~xpjeb[U0 ^b_i8"Nj~}}wphd]WF% db^oٛ1)Meuvtrtuzxqg^SCTfbWgéu<&/FWoysoilw|ui\M7!:^eXNOf}i_^m{sd`q{iVC&"Gh^NINThxpkju~h\gzwaK9%gb?BOPQfeUTY]dr|}sacjnu~iS`rmR>'.Am}nE9IRFKTRONRY`dfd]QSZZ_gp{eOWh[A.)PpoQ;3>>9BKLNPRV\ZVYSMNONRY^hubKUYD8et~jJJN2$%2AHNNQSTRRQLJKLKOSZbqxQANG:', $qww`FTr|b9+:GLOPOOPPMONNMIIHIJLRYapa@BD=%0PsvsR<.4LlvkS=GdzgRCBFHIHIIHEFHHDDBDCFJLPWdngK59:5/LP`]dXDP^m{|k[LC?BEGGHGEEC??CCADBCDDGHMQZccP86::_lsfTLR]akjd[OC==>CCDEEC?;:;@DCBCDEFIMRZ[R<6:91hx\WbY^_[VRH=:;;>@BBAA@=;;@@ADEEDDEFGIOTXQ=388 "%u_pxjeQTRPKG:21128<=>><<848=BFEFE DDEGJOSLA266("$hkF6+&$$%+69;:99/.8>CDFEFFD EEGJMJ;255)%JZO>`}}V951-(!$072*39>CEGFGFDDACDFGIE8242)&!>BA[vpp_>#!%% !'+/.)*5XM#4>DCCBB@ AABA<6112("5,  #7BDCAA=>?<5011)' )5"- 2>CB=<==962 '+&::%(8>C><;;<:85115 tDB=<;<:964225 iIF9$':A@><;<:872135TdLE6#1@@=<9:9741-/5VOB1+;A>=98 :98822,0/&DqNL@17??=98 7877/1+0.%xـ XOK<4;8787 20/+1,jLb UOLH;:><8778787651..-28]E QMGF:=>;87677886640--,.KzG| VQJHA;><87768 56520-,+0MwGgό NLIG?=>;7675 6561--)+1dg /Yvm ZPIHF><<87675 66520+,+,2xknU 'U~ FKHHD=<;87665620*./ Œv|P5;b EFHFC=<966565 66511-)*'.$̓y|[.(1p dFBC@?=;764554551/+'()/+Ϛz|eL&Dy CA?B<>>;764354510/+'**-7؜z|o8 ([:;==8;<975634010/('()+)y}xE1V`92:736:743523/0/.' ((%&]R14bKi-&63034432122..-)$%%'&!/> V)$Un OrG#%)/21/0/0,,+&!"!#""-5e@";vQn]/+/-.,- )('" &73|k/=T Jcxd!"%(%$%&$ 0F]ZF2~uA+^ .cdy`PAB> #&R ,U"u*@`nL+ "#pb8#6r+G3&$AEDCCDE) !!"&.0 wA-'J0yHL9+$!"$*+,36qX4$ ".d1zZUC>1+$  $$(+/,462+g l<. %>4o`ZLFA=/,&""!"#%%#""#$#""! "$$&()-.,7;5460oL1! )WXbTNHAC;0+(&')*))&%$$''+-,.6;68869=a:, %8s^n[VMIE?==841/,,..00..+,))+15;:6779:7?; |D0'K!ed\UNJFC?>@C@?97733223344331468;9656778:;?6{Y6$$1egnb\TPJGECDBCDEEGIB@BAA=?DB GGEHA=967568:/(?#ƭHnb]XSONLKIGHGGFFHFFHGGEHLLHILLG?8658879:1Q(=خjdԺ@+]}|zxvutsponljjlruwxwwxz~zxtssuzs_,nk{ڸL4'O #,WyeҶ>6f}{zxz{{|zb8lnèb8/K':OҶV%:gze9!%mdJ2G Ժk +Y{d9!(#S. Syپ#'GmyQ+#(*-h!MnȥD*"!Kqɀ`4"')0Wә_#?"apд(,"?]ƿzT+%(*/,ާx2 ;Ji}ác$,%"  ;QnkK/#&),/.طyM7!TnзR#+&# -9LNNOPPUWYA7"%'*,2,|yh15hnɮV$+'"   !#$'*/5*wvoD IhvŬd%,'" !  "#&(),3.'voV!Ydq?&)&%%#$"#"!! !!""##$'(*/0,$Nsff,D]hc:'-,)*'('&%&''()*.1/ F~zfb<M_r{eI'!&-.--,*,-/.,)"+U{gaU&1^`o`O8$!&9MH_Z {u''74DD XSqk#{1-?8TIe] ws[k /U[4&FgtL-3QW9  !@]fF'-LvՄQ2 9W\? 'FkuK,3RW9 "@_gF'.MxՅR3 ;X]@" (GlvL-5SW:  #BcjF'/NzՄR3   #CbnN,1S~ӌ^<  !@`jK)-Ns{X6  ;[ܓbB#'GdiK,  2R~ςV7  >[]@!*IlnK+4TىT6 "@^`B$ .MzzN. :WW; 'AA'chess.app-33/ChessInfo.plist0000644000000000000000000000055013034414342014617 0ustar rootroot{ NSExecutable = "Chess"; NSMainNibFile = "Chess"; GSMainMarkupFile = ""; NSPrincipalClass = "Chess"; NSIcon = "ChessApp.tiff"; CFBundleDocumentTypes = ( { CFBundleTypeName = "chess"; CFBundleTypeRole = Editor; CFBundleTypeIconFile = (chess.icns); CFBundleTypeExtensions = (chess); } ); } chess.app-33/Square.m0000644000000000000000000001202313034414342013275 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Square.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import "Square.h" // portability layer #import "gnuglue.h" // sleep_microsecs, floor_value @implementation Square /* This class represents one square on a chess board. It has a color and may contain a piece. */ - (void) dealloc { [icon release]; [super dealloc]; return; } - (void) setBackground: (float)b { background = b; return; } - (float) background { return background; } - (void) setImage: (NSImage *)i { [icon release]; icon = [[i name] retain]; return; } - (NSImage *) image { return [NSImage imageNamed: icon]; } - (NSString *)imageName { if (icon) return icon; else return @""; } - (void) setPieceType: (int)t { pieceType = t; return; } - (int) pieceType { return pieceType; } - (void) drawWithFrame: (NSRect)f inView: (NSView *)v { PSsetgray( background ); PSrectfill( f.origin.x, f.origin.y, f.size.width, f.size.height ); [self drawInteriorWithFrame:f inView:v]; return; } - (void) drawBackground: (NSRect)f inView: (NSView *)v { PSsetgray( background ); PSrectfill( f.origin.x, f.origin.y, f.size.width, f.size.height ); return; } - (void) highlight: (NSRect)f inView: (NSView *)v { f = NSInsetRect(f, (float)1.0 , (float)1.0); PSgsave(); PSsetlinewidth( (float)2.0 ); PSsetgray( NSWhite ); PSrectstroke ( f.origin.x, f.origin.y, f.size.width, f.size.height ); PSWait(); sleep_microsecs( (unsigned)15000 ); PSsetgray( NSBlack ); PSrectstroke ( f.origin.x, f.origin.y, f.size.width, f.size.height ); PSWait(); sleep_microsecs( (unsigned)15000 ); PSsetgray( NSWhite ); PSrectstroke ( f.origin.x, f.origin.y, f.size.width, f.size.height ); PSWait(); sleep_microsecs( (unsigned)15000 ); PSsetgray( background ); PSrectstroke ( f.origin.x, f.origin.y, f.size.width, f.size.height ); PSWait(); PSgrestore(); return; } - (void) drawInteriorWithFrame: (NSRect)r inView: (NSView *)v /* Draw the chess piece. */ { NSPoint p; NSSize s; NSImage *bitmap; if( !icon ) return; /* Composite the piece icon in the center of the rect. */ bitmap = [NSImage imageNamed: icon]; if ( ! bitmap ) { NSString *path = [[NSBundle mainBundle] pathForImageResource: icon]; bitmap = [[NSImage alloc] initWithContentsOfFile: path]; [bitmap setName: icon]; } s = [bitmap size]; p.x = (float) floor_value( (double)(((r.size.width - s.width) / 2.0) + r.origin.x) ); p.y = (float) floor_value( (double)(((r.size.height - s.height) / 2.0) + r.origin.y) ); [v lockFocus]; [bitmap compositeToPoint: p operation: NSCompositeSourceOver]; [v unlockFocus]; return; } @end chess.app-33/ChessListener.h0000644000000000000000000000565513034414342014620 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: ChessListener.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #ifdef __cplusplus extern "C" { #endif #define CHESS_DEBUG 1 /* * Application support for chess listener */ void CL_ScheduleInit(); /* Call CL_Init() in separate thread, then CL_FinishInit() in main */ void CL_MakeMove(const char * move); /* Execute a spoken move */ /* * Chess listener support for application */ void CL_Init(); void CL_FinishInit(); void CL_Listen(short color, short pieces[], short colors[]); void CL_DontListen(); void CL_SetHelp(unsigned len, const void * data); void CL_ShutDown(); #ifdef __cplusplus } #endif chess.app-33/Chess.h0000644000000000000000000001665413034414342013113 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Chess.h,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ #import #import @class NSString; @class NSColor; // Preferences structure struct Preferences { int time_cntl_moves; int time_cntl_minutes; int opponent; int computer; BOOL useSR; BOOL bothsides; BOOL cheat; NSString *white_name; NSString *black_name; }; // game status #define WHITE_MATE 1 #define BLACK_MATE 2 #define OPPONENT_MATE 3 #define DRAW_GAME 4 // // PS routines without prototypes // #ifndef GNUSTEP void PScountframebuffers(int *count); void PSmoveto(float x, float y); void PSrmoveto(float x, float y); void PSarc(float x, float y, float r, float angle1, float angle2); void PSarcn(float x, float y, float r, float angle1, float angle2); void PSarct(float x1, float y1, float x2, float y2, float r); void PSflushgraphics(void); void PSrectclip(float x, float y, float w, float h); void PSrectfill(float x, float y, float w, float h); void PSrectstroke(float x, float y, float w, float h); void PSfill(void); void PSeofill(void); void PSstroke(void); void PSstrokepath(void); void PSinitclip(void); void PSclip(void); void PSeoclip(void); void PSclippath(void); void PSlineto(float x, float y); void PSrlineto(float x, float y); void PScurveto(float x1, float y1, float x2, float y2, float x3, float y3); void PSrcurveto(float x1, float y1, float x2, float y2, float x3, float y3); void PScurrentpoint(float *x, float *y); void PSsetlinecap(int linecap); void PSsetlinejoin(int linejoin); void PSsetlinewidth(float width); void PSsetgray(float gray); void PSsetrgbcolor(float r, float g, float b); void PSsetcmykcolor(float c, float m, float y, float k); void PSsetalpha(float a); void PStranslate(float x, float y); void PSrotate(float angle); void PSscale(float x, float y); void PSconcat(const float m[]); void PSsethalftonephase(int x, int y); void PSnewpath(void); void PSclosepath(void); void PScomposite(float x, float y, float w, float h, int gstateNum, float dx, float dy, int op); void PScompositerect(float x, float y, float w, float h, int op); void PSshow(const char *s); void PSashow(float w, float h, const char *s); #endif // Chess class interfaces @interface Chess : NSApplication { // nib components id boardWindow; id clockPanel; id prefPanel; id infoPanel; id menu2D; id menu3D; // BoardWindow id board2D; id board3D; // ClockPanel id whiteSample; id whiteClockText; id whiteClock; // no connection id whiteColorWell; id whiteMeter; id blackSample; id blackClockText; id blackClock; // no connection id blackColorWell; id blackMeter; id colorSetButton; id startButton; id forceButton; // PrefPanel id levelSlider; id levelText; id prefSetButton; id gamePopup; id whiteSideName; id blackSideName; id srCheckBox; // InfoPanel id infoScroll; // game board id gameBoard; // board2D or board3D int currentRow; int currentCol; // opened/saved file NSString *filename; // game status int finished; int undoCount; int hintCount; int forceCount; BOOL dirtyGame; BOOL menusEnabled; // preferences struct Preferences prefs; NSUserDefaults * defaults; // player colors NSColor *white_color; NSColor *black_color; // moving time int whiteTime; int blackTime; } // MainMenu responders - (void)info: (id)sender; - (void)newGame: (id)sender; - (void)openGame: (id)sender; - (void)listGame: (id)sender; - (void)saveGame: (id)sender; - (void)saveAsGame: (id)sender; - (void)hint: (id)sender; - (void)showPosition: (id)sender; - (void)undoMove: (id)sender; - (void)view2D: (id)sender; - (void)view3D: (id)sender; - (void)print: (id)sender; - (BOOL)alertPanelForGameChange; // ClockPanel responders - (void)setWhiteColor: (id)sender; - (void)setBlackColor: (id)sender; - (void)renderColors: (id)sender; - (void)startGame: (id)sender; - (void)forceMove: (id)sender; // PrefPanel responders - (void)levelSliding: (id)sender; - (void)chooseSide: (id)sender; - (void)setPreferences: (id)sender; // invoked by Board.m & Board3D.m - (BOOL)bothsides; - (int)finished; - (void)finishedAlert; - (BOOL)makeMoveFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2; // invoked by gnuglue.m - (void)peekAndGetLeftMouseDownEvent; - (void)selectMove: (int)side iop: (int)iop; - (void)setFinished: (int)flag; - (void)movePieceFrom: (int)row1 : (int)col1 to: (int)row2 : (int)col2; - (void)updateBoard; - (int)pieceTypeAt: (int)row : (int)col; - (void)highlightSquareAt: (int)row : (int)col; - (void)displayResponseMeter: (int)side; - (void)fillResponseMeter: (int)side; - (void)setTitleMessage: (NSString *)msg; - (BOOL)canFinishGame; // support methods - (void)setTitle; - (void)storePosition: (int) row : (int) col; - (void)setMainMenuEnabled: (BOOL)flag; - (void)enablePrefPanel; - (void)disablePrefPanel; - (void)enableClockPanel; - (void)disableClockPanel; - (int)whiteTime; - (int)blackTime; - (void)updateClocks: (int)side; - (void)initListener: (NSRunLoop *)mainRunLoop; - (void)finishInitListener: (NSRunLoop *)mainRunLoop; @end chess.app-33/PB.gdbinit0000644000000000000000000000022113034414342013517 0ustar rootroot# # Generated by the NeXT Project Builder. # # NOTE: Do NOT change this file -- Project Builder maintains it. # view directory gnuchess.subproj chess.app-33/gnuchess.book0000644000000000000000000013365613034414342014372 0ustar rootroot! ! Opening Library for CHESS ! ! Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. ! Copyright (c) 1987 by Stuart Cracraft and John Stanback ! ! This file is part of CHESS. ! ! CHESS is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY. No author or distributor ! accepts responsibility to anyone for the consequences of using it ! or for whether it serves any particular purpose or works at all, ! unless he says so in writing. Refer to the CHESS General Public ! License for full details. ! ! Everyone is granted permission to copy, modify and redistribute ! CHESS, but only under the conditions described in the ! CHESS General Public License. A copy of this license is ! supposed to have been given to you along with CHESS so you ! can know your rights and responsibilities. It should be in a ! file named COPYING. Among other things, the copyright notice ! and this notice must be preserved on all copies. ! ! ! ! Four Knight's Game e2e4 e7e5 g1f3 b8c6 b1c3 g8f6 f1b5 f8b4 o-o o-o d2d3 b4c3 b2c3 d7d6 c1g5 d8e7 f1e1 c6d8 d3d4 d8e6 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 d2d3 g8f6 b1c3 d7d6 c1g5 h7h6 g5f6 d8f6 c3d5 f6d8 ! Two Knights Defence e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5 d7d5 e4d5 c6a5 c4b5 c7c6 d5c6 b7c6 b5e2 h7h6 ! Two Knights Defence -- Max Lange Attack e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d4 e5d4 o-o f8c5 e4e5 d7d5 e5f6 d5c4 f6g7 h8g8 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4 d2d4 d6d5 f1d3 f8d6 o-o o-o c2c4 c8g4 c4d5 f7f5 b1c3 b8d7 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 d2d4 e5d4 e4e5 f6e4 d1d4 d7d5 ! ! Vienna Game e2e4 e7e5 b1c3 f8c5 g1f3 d7d6 d2d4 e5d4 f3d4 g8f6 c1g5 h7h6 g5h4 b1c3 ! e2e4 e7e5 b1c3 b8c6 g1f3 g7g6 d2d4 e5d4 c3d5 f8g7 c1g5 c6e7 f3d4 c7c6 d5c3 h7h6 ! - - - - - - ! ECO C25/1-2 e2e4 e7e5 b1c3 f8c5 f1c4 d7d6 d2d3 c8e6 c4e6 f7f6 d1h5 e7d7 c1e3 c5b6 g1e2 b8c6 o-o g8f6 h5h3 d8e8 ! e2e4 e7e5 b1c3 f8c5 g1f3 d7d6 d2d4 e5d4 f3d4 g8f6 c1g5 h7h6 g5h4 b8c6 d4c6 b7c6 f1d3 e8e7 o-o g7g5 ! ECO C25/3-9 e2e4 e7e5 b1c3 b8c6 f2f4 e5f4 g1f3 g7g5 h2h4 g5g4 f3g5 h7h6 g5f7 e7f7 d2d4 d7d5 c1f4 f8b4 f1e2 b4c3 b2c3 g8f6 ! e2e4 e7e5 b1c3 b8c6 f2f4 e5f4 g1f3 g7g5 d2d4 g5g4 f1c4 g4f3 o-o d7d5 e4d5 c8g4 d1d2 c6e7 d2f4 g8h6 ! e2e4 e7e5 b1c3 b8c6 f2f4 e5f4 d2d4 d8h4 e1e2 d7d5 e4d5 c8g4 g1f3 o-o-o d5c6 f8c5 d1e1 h4h5 c6b7 e8b8 e2d2 g4f3 ! e2e4 e7e5 b1c3 b8c6 f2f4 e5f4 d2d4 d8h4 e1e2 d7d6 g1f3 c8g4 c1f4 o-o-o e2e3 h4h5 f1e2 g7g5 f3g5 f7f5 h2h3 g4e2 ! e2e4 e7e5 b1c3 b8c6 g2g3 f8c5 f1g2 a7a6 g1e2 d7d6 d1d3 c8g4 h2h3 g4e6 o-o g8e7 c3d5 o-o c2c3 c5a7 g1h2 f7f6 ! e2e4 e7e5 b1c3 b8c6 g2g3 f8c5 f1g2 d7d6 c3a4 g8e7 a4c5 d6c5 d2d3 o-o g2e3 b7b6 d1d2 c8e6 g1e2 d8d7 o-o a8d8 ! e2e4 e7e5 b1c3 b8c6 f1c4 f8c5 d1g4 g7g6 d4f3 g8f6 g1e2 d7d6 d2d3 c8g4 f3g3 h7h6 f2f4 d7e7 c3d5 f6d5 g3g4 d5e3 ! ECO C26/1-10 e2e4 e7e5 b1c3 g8f6 g2g3 c7c6 f1g2 d7d6 g1e2 b7b5 o-o b8d7 h2h3 d8c7 g3g4 b5b4 c3b1 a7a5 a2a3 c8a6 a3b4 a5b4 ! e2e4 e7e5 b1c3 g8f6 g2g3 d7d5 e4d5 f6d5 f1g2 c8e6 g1f3 b8c6 o-o f8e7 f1e1 e7f6 c3e4 o-o d2d3 f6e7 a2a3 d5b6 ! e2e4 e7e5 b1c3 g8f6 g2g3 d7d5 e4d5 f6d5 f1g2 d5c3 b2c3 f8d6 g1f3 o-o o-o b8d7 d2d3 a1b8 a2a4 b7b6 a4a5 c8b7 ! e2e4 e7e5 b1c3 g8f6 g2g3 f8b4 f1g2 c7c6 g1e2 o-o o-o d7d5 e4d5 c6d5 d2d4 e5d4 e2d4 b8c6 c1g5 b4e7 f1e1 h7h6 ! e2e4 e7e5 b1c3 g8f6 g2g3 f8c5 f1g2 b8c6 g1e2 d7d6 o-o o-o d2d3 c8e6 c3d5 e6d5 e4d5 c6e7 c1g5 f6d7 d3d4 e5d4 ! e2e4 e7e5 b1c3 g8f6 g2g3 f8c5 f1g2 b8c6 g1f3 d7d6 d2d3 a7a6 o-o o-o c1g5 h7h6 g5e3 c5e3 f2e3 d6d5 e4d5 f6d5 ! e2e4 e7e5 b1c3 g8f6 g2g3 f8c5 f1g2 o-o d2d3 f8e8 g1e2 c7c6 o-o d7d5 e5d5 f6d5 g1h1 c8g4 h2h3 g4e6 c3e4 c5e7 ! e2e4 e7e5 b1c3 g8f6 f1c4 f8b4 g1e2 o-o d2d3 c7c6 o-o d7d5 c4b3 d5e4 c3e4 b8d7 e2g3 f6e4 d3e4 d7c5 d1h5 c5b3 ! e2e4 e7e5 b1c3 g8f6 f1c4 f8c5 d2d3 d7d6 c1g5 c8e6 d1d2 b8d7 g1e2 e6c4 d3c4 h7h6 g5e3 d8e7 e2g3 c5e3 f2e3 g7g6 ! e2e4 e7e5 b1c3 g8f6 f1c4 f8c5 d2d3 d7d6 f2f4 b8c6 f4f5 b6d4 g1f3 c7c6 f3d4 c5d4 d1f3 b7b5 c4b3 a7a5 a2a3 a5a4 ! ECO C27/1-2 e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 h5e5 d8e7 e5e7 f8e7 c4b3 d6f5 c3d5 e7d8 d5e3 f5d4 b3c4 c7c6 g1e2 d4e2 c4e2 d7d5 ! e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 c4b3 b8c6 c3b5 g7g6 h5f3 f7f6 b5c7 d8c7 f3f6 b7b6 g1f3 c8a6 f3e5 c6e5 f6e5 e8d8 ! ECO C27/3-5 e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 c4b3 b8c6 c3b5 g7g6 h5f3 f7f5 f3d5 d8e7 b5c7 e8d8 c7a8 b7b6 d2d3 c8b7 h2h4 f5f4 d5f3 f8h6 b3d5 b7a8 f3g4 h8f8 g1e2 e5e4 c1f4 h6f4 e2f4 e7e5 g4g5 e5g5 ! e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 c4b3 b8c6 c3b5 g7g6 h5f3 f7f5 f3d5 d8e7 b5c7 e8d8 c7a8 b7b6 g1f3 c8b7 d3d4 c6d4 c1g5 d4f3 d5f3 e7g5 b3d5 e5e4 f3b3 b7a6 b3a4 f8h6 a4d4 h8e8 g2g3 g5g4 ! e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 c4b3 b8c6 c3b5 g7g6 h5f3 f7f5 f3d5 d8e7 b5c7 e8d8 c7a8 b7b6 a8b6 a7b6 d5f3 c8b7 d2d3 c6d4 f3h3 e5e4 c1e3 e4d3 o-o-o d4c2 e3b6 d8e8 h3d3 f8h6 c1b1 b7e4 ! ECO C27/6-7 e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 c4b3 f8e7 g1f3 b8c6 f3e5 o-o o-o c6d4 c3d5 d4b3 a2b3 d6e8 h5e2 e8f6 e5c6 d7c6 d5e7 g8h8 e7c8 d8c8 ! e2e4 e7e5 b1c3 g8f6 f1c4 f6e4 d1h5 e4d6 c4b3 f8e7 g1f3 o-o h2h4 b8c6 f3g5 h7h6 h5g6 e7g5 h4g5 d8g5 d2d3 d6f5 c1g5 c6d4 c3d5 d4b3 ! ECO C28/1-7 e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 f2f3 f6e4 g1f3 e4c3 d2c3 d8e7 b2b4 d7d6 o-o c8e6 c4e6 e7e6 b4b5 c6d8 f4e5 d6e5 f3e5 f8d6 ! e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 c6a5 g1e2 a5c4 d3c4 d7d6 o-o c8e6 b2b3 c7c6 e2g3 g7g6 h2h3 h7h5 d1d3 f8e7 c1e3 d8d7 ! e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8c5 c1g5 h7h6 g5h4 d7d6 c3a4 c8e6 a4c5 d6c5 b2b3 e6c4 b3c4 d8d6 g1e2 c6d4 h4f6 ! e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 g1e2 d7d5 e4d5 f6d5 c4d5 d8d5 o-o d5d8 f2f4 e5f4 c1f4 o-o d1e1 b4d6 e1g3 b6f4 ! e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 c1g5 d7d6 g1e2 c8e6 o-o h7h6 g5f6 d8f6 c3d5 e6d5 c4d5 b4c5 c2c3 o-o g1h1 c6e7 ! e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 c1g5 h7h6 g5f6 b4c3 b2c3 d8f6 g1e2 d7d6 d1d2 c1e6 c4b5 f6g5 e2g3 o-o b5c6 b7c6 ! e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 g1f3 d7d6 o-o b4c3 b2c3 c6a5 c4b3 a5b3 a2b3 o-o c3c4 b7b6 d1e2 f6d7 c1g5 f7f6 ! ECO C29/1 e2e4 e7e5 b1c3 g8f6 f1f4 d7d5 d2d3 e5f4 e4d5 f6d5 c3d5 d8d5 c1f4 f8d6 f4d6 d5d6 d1d2 o-o g1f3 c8g4 f1e2 g4f3 ! ECO C29/2-12 e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 d1f3 b8c6 f1b5 e4c3 b2c3 f8e7 d2d4 o-o b5d3 f7f6 f3h5 g7g6 d3g6 h7g6 h5g6 g8h8 g6h6 h8g8 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 d1f3 f7f5 d2d3 e4c3 b2c3 d5d4 f3g3 b8c6 f1e2 c8e6 e2f3 d8d7 g1e2 f8c5 c3c4 o-o o-o e6c4 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 d2d3 d8h4 g2g3 e4g3 g1f3 h4h5 c3d5 c8g4 f1g2 g3h1 d5c7 e8d7 c7h8 b8c6 c1e3 f7f6 d3d4 f6e5 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 d2d3 f1b4 d3e4 d8h4 e1e2 b8c6 g1f3 c8g4 c3d5 o-o-o c2c3 f7f5 e5f6 h8e8 c3b4 e8e4 c1e3 g7f6 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 d2d3 e4c3 b2c3 d5d4 g1f3 b8c6 c3d4 f8b4 c1d2 b4d2 d1d2 c6d4 c2c3 d4f3 g2f3 d8h4 d2f2 h4f2 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 g1f3 f1b4 d1e2 b4c3 b2c3 o-o e2e3 b8c6 f1d3 f7f5 o-o c8e6 c1a3 f8e8 a1b1 a8b8 a3b5 e6d7 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 g1f3 b8c6 f1b5 f8c5 d2d4 c5b4 c1d2 b4c3 b2c3 o-o o-o c1g4 d1e1 f7f6 d2e3 g4d7 e5f6 d8f6 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 g1f3 f8c5 d1e2 c5f2 e1d1 e4c3 d2c3 f2b6 c3g5 d8d7 d1d2 o-o a1d1 d7a4 a2a3 c7c5 d2c1 c8e6 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 g1f3 c8g4 d1e2 e4g5 h2h4 g5f3 g2f3 g4e6 d2d4 b8c6 c1e3 f8e7 e2f2 d8d7 o-o-o o-o-o f1b5 a7a6 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 g1f3 f8e7 d1e2 e4c3 d2c3 o-o c1f4 c7c5 o-o-o d8a5 c1b1 b8c6 a4b5 c8e6 b5a5 f3g5 ! e2e4 e7e5 b1c3 g8f6 f2f4 d7d5 f4e5 f6e4 g1f3 f8e7 d2d4 o-o f1d3 f7f6 e5f6 e7f6 o-o b8c6 c3e4 d5e4 d3e4 c6d4 f3g5 c8f5 c2c3 f7g5 ! ! Vienna Game e2e4 e7e5 b1c3 f8c5 g1f3 d7d6 d2d4 e5d4 f3d4 g8f6 c1g5 h7h6 g5h4 b1c3 ! Three Knights Game e2e4 e7e5 b1c3 b8c6 g1f3 g7g6 d2d4 e5d4 c3d5 f8g7 c1g5 c6e7 f3d4 c7c6 d5c3 h7h6 ! Bishop's Opening e2e4 e7e5 f1c4 g8f6 d2d4 e5d4 g1f3 f6e4 d1d4 e4c5 o-o c5e6 f1e1 c7c6 b1c3 d7d5 c4d3 f8e7 ! Ruy Lopez -- Classical Defence e2e4 e7e5 g1f3 b8c6 f1b5 f8c5 c2c3 g8f6 d2d4 e5d4 e4e5 f6e4 o-o d7d5 ! Ruy Lopez -- Birds Defence e2e4 e7e5 g1f3 b8c6 f1b5 c6d4 b5a4 f8c5 o-o d4f3 d1f3 g8e7 d2d3 o-o c1e3 c5b6 b1c3 d7d6 ! Ruy Lopez -- Schliemann Defence e2e4 e7e5 g1f3 b8c6 f1b5 f7f5 b1c3 f5e4 c3e4 d7d5 f3e5 d5e4 e5c6 d8d5 c2c4 d5d6 c6a7 c8d7 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 o-o f8e7 f1e1 e5d4 f3d4 o-o d4f5 f8e8 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 b5c6 d7c6 d1d3 e5d4 f3d4 f8e7 c1g5 c6d7 ! Ruy Lopez -- Modern Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 d7d6 d2d4 b7b5 a4b3 c6d4 f3d4 e5d4 c2c3 d4c3 b1c3 c8b7 ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f6e4 d2d4 b7b5 a4b3 d7d5 d4e5 c8e6 c2c3 f8c5 b1d2 o-o ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f8e7 f1e1 b7b5 a4b3 d7d6 c2c3 o-o h2h3 c6a5 b3c2 c2c4 d2d4 d8c7 ! Ruy Lopez e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5c6 d7c6 d2d4 e5d4 d1d4 d8d4 f3d4 c8d7 c1e3 o-o-o b1d2 g8e7 ! Scotch Game e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 f8c5 c1e3 d8f6 c2c3 g8e7 b1d2 d7d6 e3c5 d6c5 ! Philidor's Defence e2e4 e7e5 g1f3 d7d6 d2d4 g8f6 b8c6 b1d2 f8c5 f1e2 o-o o-o d1e2 c7c6 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 c2c4 d5b6 d2d4 d7d6 f2f4 d6e5 f4e5 b8c6 c1e3 c8f5 b1c3 e7e6 g1f3 f8e7 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 d2d4 d7d6 g1f3 c8g4 f1e2 e7e6 o-o f8e7 h2h3 g4h5 c2c4 d5b6 ! Kings Gambit Accepted e2e4 e7e5 f2f4 e5f4 g1f3 d7d6 f1c4 h7h6 d2d4 g7g5 o-o f8g7 c2c3 b8c6 d1b3 d8e7 ! Ponziani's Opening e2e4 e7e5 g1f3 b8c6 c2c3 d7d5 d1a4 g8f6 f3e5 f8d6 e5c6 b7c6 d2d3 o-o c1g5 h7h6 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4d5 c6d5 c2c4 g8f6 b1c3 b8c6 c1g5 e7e6 c4c5 f8e7 f1b5 o-o g1f3 f6e4 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4e5 c8f5 f1d3 f5d3 d1d3 e7e6 b1c3 d8b6 b1d2 c6c5 d4c5 f8c5 ! Caro-Kann Defence e2e4 c7c6 b1c3 d7d5 g1f3 c8g4 h2h3 g4f3 d1f3 e7e6 d2d4 g8f6 f1d3 d5e4 c3e4 d8d4 c2c3 d4d8 ! French Defence -- Classical e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 f8e7 e4e5 f6d7 g5e7 d8e7 d1d2 o-o f2f4 c7c5 g1f3 b8c6 o-o-o c5c4 ! French Defence -- MacCutcheon e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 c8g4 e4e5 h7h6 g5d2 g4f3 g2f3 f6e4 d1g4 e8f8 h2h4 c7c5 ! French Defence -- Rubenstein e2e4 e7e6 d2d4 d7d5 b1c3 d5e4 c3e4 b8d7 g1f3 g8f6 e4f6 d7f6 f1d3 b7b6 d1e2 c8b7 c1g5 f8e7 ! French Defence -- Winawer e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 e4e5 c7c5 a2a3 b4c3 b2c3 b8d7 d1g4 o-o g1f3 b8c6 f1e3 f7f5 ! French Defence -- Tarrasch e2e4 e7e6 d2d4 d7d5 b1d2 b8c6 g1f3 g8f6 e4e5 f6d7 d2b3 f7f6 f1b5 f8e7 c1f4 o-o ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 g7g6 c1e3 f8g7 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g7g6 b1c3 f8g7 c1e3 g8f6 f1c4 o-o ! Sicilian Defence -- Boleslavsky Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 c8e6 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 c8e6 f1g2 b7b5 o-o b8d7 ! Sicilian Defence -- Closed e2e4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 d2d3 e7e6 c1e3 d7d6 g1e2 c6d4 d1d2 d8h4 o-o g8d7 ! Nimzowitsch Defence e2e4 b8c6 d2d4 d7d5 e4e5 f7f6 g1f3 c1g4 f1e2 e7e6 e5f6 g8f6 c2c3 f8d6 c1g5 d8d7 ! Queens Gambit Accepted d2d4 d7d5 c2c4 d5c4 g1f3 g8f6 e2e3 e7e6 f1c4 c7c5 o-o a7a6 d1e2 b7b5 c4d3 c5d4 e3d4 b8c6 ! Queens Gambit -- Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o f6d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 ! Queens Gambit Declined -- Orthodox d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7 e2e3 o-o g1f3 b8d7 a1c1 c7c6 f8d3 d5c4 f1c4 f6d5 ! Queens Gambit Declined -- Cambridge Springs d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 e2e3 c7c6 g1f3 d8a5 f3d2 f8b4 d1c2 o-o g5h4 c6c5 ! Queens Gambit Declined -- Exchange Var. d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 c4d5 e6d5 e2e3 c7c6 f1d3 f8e7 d1c2 o-o g1e2 f8e8 ! Queens Gambit Declined -- Semi-Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 c7c5 c4d5 c5d4 d1d4 e6d5 e2e4 b8c6 f1b5 f6e4 ! Queens Gambit Declined -- Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 c7c5 c4d5 e6d5 g1f3 b8c6 g2g3 g8f6 f1g2 f8e7 o-o o-o ! Queens Gambit Declined -- Vienna d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 f1b5 f8b4 b1c3 d5c4 e2e4 c7c5 e4e5 c5d4 d1a4 b8c6 o-o-o c1d2 ! Queens Gambit Declined -- Slav (Marshall Gambit) d2d4 d7d5 c2c4 c7c6 b1c3 e7e6 e2e4 d4e4 c3e4 f8b4 c1d2 d8d4 d2b4 d4e4 f1e2 b8a6 b4d6 b7b6 ! Queens Gambit --Slav (Krause) d2d4 d7d5 c2c4 c7c6 g1f3 g8f6 b1c3 d5c4 a2a4 c8f5 f3e5 e7e6 f2f3 f8b4 c1g5 h7h6 g5f6 d8f6 e2e4 f5h7 ! Modern Benoni Counter Gambit d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3 e6d5 c4d5 d7d6 e2e4 g7g6 f1d3 f8g7 g1e2 o-o o-o a7a6 a2a4 d8c7 ! Queens Pawn Game d2d4 d7d5 g1f3 g8f6 c1f4 c7c5 e2e3 b8c6 c2c3 d8b6 d1c1 c8f5 d4c5 b6c5 b1d2 a8c8 f3d4 c6d4 e3d4 c5b6 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8d7 o-o-o e7e5 d4e5 d6e5 g1f3 h7h6 g5h4 g6g5 h4g3 d8e7 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 f1c4 c7c6 d1e2 f8g7 g1f3 o-o c1g5 b7b5 c4d3 d8c7 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3 c8b7 f1g2 f8e7 o-o o-o b1c3 f6e4 d1c2 e4c3 c2c3 d7d6 c3c2 f7f5 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 e2e3 c8b7 f1d3 f8e7 b1c3 d7d5 o-o o-o d1e2 b8d7 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 d7d5 a2a3 b4c3 c2c3 b8c6 g1f3 f6e4 c3b3 c6a5 b3a4 c7c6 ! Nimzo-Indian Defence (Rubenstein) d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 o-o f1d3 d7d5 g1f3 c7c5 o-o b8c6 a2a3 b4c3 b2c3 d5c4 d3c4 d8c7 ! Nimzo-Indian Defence -- Samisch d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 a2a3 b4c3 b2c3 o-o f2f3 d7d5 c4d5 e6d5 e2e3 c8f5 g1e2 b8d7 e2g3 f5g6 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 c1d2 o-o e2e3 d7d5 g1f3 c7c5 a2a3 b4c3 d2c3 f6e4 a1c1 e4c3 c1c3 c5d4 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5c3 b2c3 c7c5 f1c4 f8g7 g1e2 o-o o-o c5d4 c3d4 b8c6 ! Grunfeld Defence -- Smyslov d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 g1f3 f8g7 d1b3 d5c4 b3c4 o-o e2e4 c8g4 c1e3 f6d7 o-o-o b8c6 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c1f4 f8g7 d2d3 o-o c4d5 f6d5 c3d5 d8d5 f4c7 b8c6 ! Kings Indian Defence -- Classical d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 o-o f1e2 e7e5 o-o b8c6 c1e3 f8e8 d4e5 d6e5 ! Kings Indian Defence -- 4 pawns attack d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f4 c7c5 g1f3 o-o d4d5 e7e6 f1d3 e6d5 c4d5 d8b6 ! Kings Indian Defence -- Samisch d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f3 o-o c1e3 e7e5 d4d5 c7c6 g1e2 c6d5 c3d5 f6d5 ! Kings Indian Defence -- Main Line d2d4 g8f6 c2c4 g7g6 g2g3 f8g7 f1g2 o-o b1c3 d7d6 g1f3 b8d7 o-o e7e5 e2e4 c7c6 h2h3 d8b6 ! Kings Indian Defence d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 g1f3 o-o c1f4 d7d6 h2h3 b8d7 e2e3 c7c6 ! Dutch Defence d2d4 f7f5 g2g3 e7e6 f1g2 g8f6 g1f3 f8e7 o-o o-o c2c4 d7d6 b1c3 d8e8 d1c2 e8h5 b2b3 b8c6 c1a3 a7a5 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 e2e4 f8b4 d2d3 d7d6 f1e2 o-o o-o b4c3 b2c3 d8e7 ! English Opening c2c4 g8f6 b1c3 d7d5 c4d5 f6d5 e2e4 d5f4 f1c4 c8e6 c4e6 f7e6 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 g2g3 d7d5 c4d5 f6d5 f1g2 d5b6 o-o f8e7 d2d3 o-o c1e3 f7f5 ! Reti -- Accepted g1f3 d7d5 c2c4 d5c4 e2e3 c7c5 f1c4 e7e6 o-o g8f6 b2b3 b8c6 c1b2 a7a6 a2a4 f8e7 ! Reti -- Neo Catalan g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 b7b6 b1c3 d5c3 ! Reti -- Barcza g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 ! Sicilian Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 c3e4 h7h6 g5h4 a3a2 b1b3 b8c6 d4c6 b7c6 e4d6 f8d6 e5d6 a6a5 f1e2 a5a4 b3c3 a2a1 e2d1 a4a3 o-o a3a2 d2e3 o-o ! # Sicilian Defense col. 2f p. 176 MCO 12. (Incomplete game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 f8b4 b1b3 a3a5 o-o o-o g5f6 d7f6 e5f6 f8d8 b3b4 a5b4 d2g5 g7g6 f1f4 b7b6 f4h4 b4f8 g1f1 a8a7 ! # Sicilian Defense col. 3g p. 176 MCO (Incomplete Game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 a3a5 c4e6 f7e6 d4e6 d7e5 c3d5 a5d2 e1d2 e8d7 e6c7 a8a7 h1e1 e5c4 ! # Parma vs. Fischer, Havana 1965. Sicilian Defense col. 4j p. 176 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 f8g7 o-o f6f5 f1d1 b8c6 d4c6 g7c3 d2e3 b7c6 b1b3 a3c5 e3c5 d6c5 b3c3 f5e4 c3c5 c8d7 c5e5 f7f5 g2g4 h8g8 g1g2 f5g4 e5e4 h7h5 g2g3 e8e7 ! # Matanovic, Sicilian Defense col. 5k p. 176 MCO (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 b8c6 d4c6 b7c6 o-o a3a5 g1h1 f8e7 f4f5 e6f5 e4f5 c8f5 e2a6 a5a6 f1f5 d6d5 b1e1 a6b7 d2h6 o-o-o h6h3 b7d7 c3a4 ! # col. 6a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 d6e5 g5f6 g7f6 c3e4 f8e7 f1e2 h7h6 c2c4 f6f5 b1b3 a3a4 o-o f5e4 g1h1 c6c5 d2c3 a4c6 c3e5 h8f8 ! # col. 7d e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 f6d5 c3d5 c6d5 f1e2 d6e5 o-o a8a7 g1h1 a3c5 c2c4 d5d4 e2h5 g7g6 h5d1 f8e7 d1a4 e8d8 f1f7 h7h6 g5h6 e5e4 ! # col. 8 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8d7 g5f6 g7f6 f1e2 h7h5 o-o b2a3 a1d1 f8e7 g1h1 d7c5 e2f3 a8a7 b3c5 a3c5 ! # col. 9g; Minic-Barczay, Varna 1967 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 f1d3 d6d5 g5f6 g7f6 c3a4 b2a3 a4b6 d5d4 o-o a8b8 f4f5 a3b4 d2b4 f8b4 b6c8 b8c8 f5e6 f7e6 f1f6 e8e7 a1f1 c6e5 ! # col. 10i; Matulovic-Kavalek, Sousse 1967 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 a1b1 b2a3 g5f6 g7f6 f1d3 f8g7 o-o o-o f1f3 g8h8 f3h3 c6e7 f4f5 e6f5 e4f5 c8f5 d3f5 e7f5 c3d5 ! # col. 11b; Joppen-Bronstein, Belgrade 1954 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b6e3 d1e2 e3e2 f1e2 b8d7 a2a4 f8e7 o-o-o h7h6 g5h4 e6e5 f4f5 b7b6 e2f3 c8b7 ! # col. 12e; Rajkovic-Udovcic, Yugoslav Chp. 1962 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b8d7 d1f3 f8e7 o-o-o b6c7 f1d3 h7h6 g5h4 g7g5 f4g5 d7e5 f3e2 f6g4 b3d4 h6g5 h4g3 c8d7 d4f3 c7c5 ! # col. 13i; Fischer-Vukovic (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 f8e7 d1f3 d8c7 o-o-o b8d7 g2g4 b7b5 g5f6 d7f6 g4g5 f6d7 a2a3 a8b8 h2h4 b5b4 a3b4 b8b4 f1h3 o-o d4e6 f7e6 h3e6 g8h8 c3d5 c7c4 e6f5 f8f5 e4f5 c8b7 h1e1 e7f8 ! # col. 14m Parma-Tatai, Athens 1968 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 b7b5 e4e5 d6e5 f4e5 d8c7 e5f6 c7e5 f1e2 e5g5 d1d3 a8a7 c3e4 g5e5 d4f3 e5b2 o-o a7d7 d3e3 c8b7 a1b1 b2c2 f3g5 c2c6 f6g7 f8g7 ! # col. 15; slight advantage for white. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 h7h6 g5h4 d8b6 d1d3 b6b2 a1b1 b2a3 e4e5 f6d5 c3d5 a3d3 f1d3 e6d5 e5e6 ! # col. 16c; Fichtl-Dolezal, CSSR 1954 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1f3 b8d7 o-o-o d8c7 f3g3 b7b5 f1b5 a6b5 d4b5 c7b8 b5d6 f8d6 g3d6 b8d6 d1d6 h7h6 g5f6 d7f6 h1d1 c8b7 f2f3 ! # col. 17e; Vasyukov-Zukharov, USSR 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 b8c6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 a8b8 f5e6 c8e6 f1c4 ! # col. 18g (somewhat questionable) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 b8d7 f1c4 d8a5 d1d2 e7e6 o-o-o b7b5 c4b3 c8b7 h1e1 a8c8 e4e5 d7e5 d4e6 f7e6 e1e5 d6e5 g5f6 ! # col. 19m; Yanofsky-Bolbochan, Stockholm 1962 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 e2f3 b8d7 g2g3 a8c8 d1e1 d7b6 g1h1 b6c4 b3d2 d8d7 d2c4 c8c4 c1d2 d6d5 ! # col. 20p e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 b8d7 a2a4 b7b6 d1d2 c8b7 f2f3 d8c7 f1d1 f8c8 b3c1 ! # col. 21b e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 f8e7 f1g2 o-o o-o b7b5 h2h3 c8b7 c3d5 f6d5 e4d5 b8d7 a2a4 d7c5 e2c3 d8d7 a4b5 a6b5 a1a8 f8a8 ! # col. 22 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f2f4 e7e6 d1f3 d8b6 d4b3 b8c6 f1d3 f8e7 c1e3 b6c7 o-o o-o a1e1 c6b4 ! # col. 23f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1e3 e7e5 d4b3 c8e6 d1d2 b8d7 f2f3 f8e7 g2g4 b7b5 g4g5 f6h5 o-o-o o-o h1g1 a8c8 c3e2 ! # col. 24k; Kotkov-Polugayevski, USSR 1959 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 o-o f8e7 c4b3 o-o f2f4 b7b5 a2a3 c8b7 f4f5 e6e5 d4e2 b8d7 e2g3 d7c5 b3d5 b7d5 e4d5 a8c8 c1g5 c5d7 g5f6 d7f6 c3e4 c8c4 ! # col. 25o; Ciocaltea-Minic, Bucharest 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 c4b3 b7b5 f2f4 c8b7 f4f5 e6e5 d4e2 b8d7 o-o f8e7 e2g3 a8c8 c1g5 o-o ! # col. 26e e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 o-o-o d6d5 e4d5 f6d5 d4c6 b7c6 c3d5 c6d5 d2d5 d8c7 d5a8 c8f5 a8f8 g8f8 d1d2 h7h5 f1e2 f8g8 a2a3 c7b8 ! # col. 27i; Bikhovski-Gik, Moscow 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 g2g4 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5a6 h4h5 c4c3 b2c3 d7e6 c1b1 a8c8 e3d4 c8c4 h5g6 h7g6 ! # col. 28k e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 h2h4 c6e5 h4h5 f6h5 e3h6 e5d3 c1b1 d3b2 b1b2 g7h6 d2h6 c8c3 g2g4 h5f6 g4g5 f6h5 ! # col. 29m; Ostojic-Honfi, Monte Carlo 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 c1b1 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5c7 h4h5 c4c3 d2c3 c7c3 b2c3 f6h5 e3d4 d7e6 h1e1 h5f6 e4e5 d6e5 d4e5 f6d5 b1b2 a8c8 ! # col. 30p; Karpov-Korchnoi, 2nd match game 1974. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 h2h4 a8c8 c4b3 c6e5 h4h5 f6h5 o-o-o e5c4 b3c4 c8c4 g2g4 h5f6 d4e2 d8a5 e3h6 g7h6 d2h6 f8c8 d1d3 c4c5 g4g5 c5g5 d3d5 g5d5 c3d5 c8e8 e2c3 d7c6 e4e5 c6d5 e5f6 e7f6 h6h7 g8f8 h7h8 f8e7 c3d5 ! # col. 31 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 g2g3 b8c6 f1g2 c6d4 d1d4 f8g7 o-o o-o d4d3 c8e6 c3d5 f6d5 e4d5 e6f5 ! # col. 32c; Pulsen-Cortlever, Buenos Aires 1939. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8c6 o-o-o o-o d4b3 f8e8 f2f3 a7a6 c1b1 b7b5 h2h4 c8e6 g2g4 c6e5 ! # col. 33h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 d4c6 b7c6 e4e5 d6e5 d1d8 e8d8 f4e5 f6g4 c1f4 c8e6 c3e4 f8g7 e4g5 g7e5 o-o-o d8c7 g5e6 f7e6 f4e5 g4e5 d1e1 c7d6 g2g3 e5g4 f1c4 e6e5 e1e2 ! # col. 34j e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 f1b5 d8c7 c3d5 f6d5 e4d5 a7a6 b5c6 b7c6 d4c6 c8b7 c1e3 f8g7 e3d4 g7d4 d1d4 o-o o-o b7c6 ! # col. 35l e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8d7 f1e2 f8g7 c1e3 o-o e2f3 d7b6 d1e2 e7e5 d4b3 f6g4 f3g4 d8h4 g2g3 h4g4 e2g4 c8g4 ! # col. 36a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 b3a5 c4e2 d1e2 d8a5 g2g4 a8c8 g4g5 c8c3 g5f6 c3e3 e2e3 g7f6 c2c3 f8c8 a2a3 c8c4 a1e1 b7b5 ! # col. 37c; Domnitz-Kraidman, Tel Aviv 1964 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 d8c8 d1e1 f6g4 e2g4 e6g4 f4f5 g6f5 h2h3 g4h3 g2h3 f5e4 e1h4 f7f5 g1h1 f8f7 f1g1 c6e5 c3d5 c8d7 b3d4 e5g6 g1g6 h7g6 a1g1 e7e5 g1g6 d7d8 e3g5 d8a5 d5f6 g8f8 d4e6 ! # col. 38f; Unzicker-Geller, W. Germany-USSR 1960 (drawn) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d1d2 f6g4 e2g4 c8g4 f2f4 c6d4 e3d4 e7e5 d4e3 e5f4 f1f4 g4e6 f4f2 g7e5 e3d4 a8c8 a1d1 d8a5 a2a3 c8c4 c3e2 a5d2 d1d2 ! # col. 39 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 d1d3 f6g4 c3d5 g7d4 e2g4 d4e3 d3e3 b6b2 g4c8 a8c8 a1b1 b2a2 b1b7 e7e6 ! # col. 40h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 e4e5 d6e5 f4e5 c6e5 d4f5 b6b2 f5e7 g8h8 e3d4 b2b4 d4e5 b4e7 d1d4 f6e8 e5g7 e8g7 e2d3 c8e6 ! # col. 41b; Smyslov-Botvinnik, match 1958 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 h2h4 h7h5 f2f3 o-o d1d2 d6d5 d4c6 b7c6 e4e5 f6e8 f3f4 f7f6 o-o-o f6e5 f4e5 g7e5 g2g4 c8g4 e2g4 h5g4 h4h5 g6g5 ! # col. 42d; Van den Burg-Rajkovic, Orebro 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 b7b6 g4g5 f6d7 o-o c8b7 e2d3 a8c8 b3a5 b6a5 d1e1 d7c5 f4f5 g7e5 e1h4 e7e6 f5f6 h7h5 d3e2 g8h7 e2h5 f8h8 ! # col. 43f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 c8e6 g4g5 f6d7 e3d4 f7f6 h2h4 f6g5 d4g7 g8g7 b3d4 e6g8 f4f5 d8b6 ! # col. 44 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 o-o b8c6 d4b3 o-o f2f4 b7b5 e2f3 b5b4 c3d5 f6d5 e4d5 c6a5 b3a5 d8a5 f1e1 f8e8 ! # col. 45i; Smyslov-Korchnoi, Moscow 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 d4b3 b8c6 g2g4 b7b6 f2f4 c8b7 e2f3 o-o h2h4 a7a5 a2a4 c6b4 h4h5 d6d5 e4e5 f6g4 b3d4 g4h6 h5g6 f7g6 d4e6 d8d7 e6f8 a8f8 c3b5 d5d4 ! # col. 46 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 f2f3 e7e5 f1b5 c8d7 b5d7 b8d7 d4f5 d6d5 e4d5 d8a5 b1c3 d7b6 ! # col. 47h; Schweber-Najdorf, Buenos Aires 1970 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 b8c6 f1b5 c8d7 b5c6 d7c6 c2c4 g8f6 b1c3 e7e6 c1g5 f8e7 o-o o-o f1e1 h7h6 g5h4 a7a6 a1d1 d8a5 d4d2 a5b6 f3d4 a8c8 e1e3 f8e8 ! # col. 48i e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 a7a6 c1e3 g8f6 b1c3 b8c6 d4b6 d8b6 e3b6 g7g6 o-o-o f8h6 c1b1 o-o f3d4 c8d7 f2f3 c6e5 d4b3 f8c8 b3a5 d7c6 c3d5 c6d5 e4d5 f6d7 b6d4 b7b6 ! # col. 49m; Fischer-Korchnoi, Buenos-Aires 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 c2c3 d4c3 b1c3 b8c6 f1c4 e7e6 o-o a7a6 d1e2 g8f6 f1d1 d8c7 c1g5 f8e7 a1c1 o-o c4b3 h7h6 g5f4 e6e5 f4e3 c7d8 c3d5 f6d5 b3d5 c8d7 ! # col. 50 e2e4 c7c5 g1f3 d7d6 d2d4 g8f6 d4c5 f6e4 c5d6 e7e6 d1d3 e4d6 b1c3 b8c6 c1f4 f7f6 o-o-o e6e5 c3b5 ! # col. 51c; Pfeiffer-Kottnauer, Helsinki 1952 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 f1d3 b8c6 d3c2 c8g4 h2h3 g4h5 d2d3 d6d5 d1e2 e7e6 b1d2 f8e7 d2f1 d8a5 ! # col. 52d; Brasket-Evans, U.S. Open Chp. 1960 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 d2d3 g7g6 g2g3 f8g7 b1d2 o-o f1g2 e7e5 o-o b8c6 a2a4 h7h6 d2b1 d8a5 ! # col. 53h; Ciocaltea-Fischer, Varna 1962 e2e4 c7c5 g1f3 d7d6 g2g3 g7g6 f1g2 f8g7 o-o b8c6 c2c3 e7e5 d2d3 g8e7 f3h4 o-o f2f4 e5f4 g3f4 f7f5 b1d2 g8h8 d2f3 ! # col. 54k; Tarjan-Mednis, U.S. Chp. 1973 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6 f1e2 g7g6 d4b3 ! e2e4 c7c5 g1f3 d7d6 b1c3 g8f6 e4e5 d6e5 f3e5 a7a6 f1e2 e7e6 o-o d8c7 e5c4 b7b5 c4e3 f8d6 h2h3 b8c6 a2a4 b5b4 c3b1 c8b7 d2d3 c6d4 b1d2 o-o d2f3 d4e2 d1e2 f8e8 e3c4 e6e5 f3g5 e5e4 c4d6 c7d6 g5e4 f6e4 d3e4 b7e4 c1e3 d6c6 ! # col. 55o; Medina-Pomar, Santander 1947 e2e4 c7c5 g1f3 d7d6 b2b4 c5b4 d2d4 g8f6 f1d3 d6d5 b1d2 d5e4 d2e4 b8d7 e4g5 d8c7 c2c4 h7h6 g5h3 g7g5 h3g1 f8g7 g1e2 e7e5 e2g3 e5e4 d1e2 o-o ! # col. 56e; del Corral-Benko, Mallorca 1968 e2e4 c7c5 g1f3 d7d6 f1b5 c8d7 b5d7 d8d7 o-o b8c6 f1e1 g8f6 c2c3 e7e6 d2d3 f8e7 a2a4 o-o b1d2 d7c7 ! # col. 57g; Radovich-Lombardy, Leipzig 1960 e2e4 c7c5 g1f3 d7d6 f1b5 b8c6 o-o a7a6 b5c6 b7c6 d2d4 c5d4 d1d4 e7e5 d4d3 f7f6 c2c4 c8e6 b1c3 d8c7 ! # col. 58j; Gurgenidze-Osnos, Alma Ata 1969 e2e4 c7c5 g1f3 b8c6 f1b5 e7e6 b1c3 g8e7 o-o a7a6 b5c6 e7c6 d2d4 c5d4 f3d4 d7d6 d4c6 b7c6 d1g4 g7g6 e4e5 d6d5 c1g5 f8e7 ! # col. 59m e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 c2c3 g8f6 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 60o e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 f1e1 e7e5 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 61c; Barczay-Szilagyi, Hungarian Chp. 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 g5f6 g7f6 d4b3 h8g8 g2g3 f6f5 d1d2 f8g7 e4f5 d7f5 f1g2 d8d7 o-o g7c3 b2c3 f5h3 g2h3 d7h3 ! # col. 62e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d4b3 h7h6 g5h4 a8c8 f1e2 g7g5 h4g3 h6h5 h2h4 g5g4 g3f4 c6e5 d1d4 e5g6 f4g5 f8g7 o-o ! # col. 63g; Matulovic-Masic, Sombor 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 f2f4 d8b6 d4b3 f6g4 d1e2 c6d4 c3d5 d4e2 d5b6 a7b6 e1e2 h7h6 g5h4 g7g5 h4g3 g5f4 g3f4 f8g7 c2c3 d7c6 ! # col. 64j; Liberzo-Stein, USSR Chp. 1969-70. Complete game (draw). e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f2f4 e7e5 d4d3 f8e7 o-o-o d7c6 c1b1 e5f4 g5f4 o-o f1e2 f8e8 e2f3 e7f8 c3d5 f6d7 d3d2 a5d2 d1d2 a8c8 h1d1 d7e5 b2b3 ! # col. 65m; Bronstein-Stein, USSR 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f1e2 e7e5 d4d3 a5c7 e2g4 f8e7 g5f6 e7f6 o-o-o f6e7 c3b5 d7b5 d3b5 c7c6 b5d5 c6d5 d1d5 ! # col. 66b; Benko-R. Byrne, US Open Chp. 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 a7a6 f1c4 a5c5 d4c5 c8c5 c4b3 g7g6 d2e3 c5c8 e3d4 f8g7 c3d5 f6h5 d4g7 h5g7 e4e5 c8c6 d5b4 c6b6 ! # col. 66b alternate; Polgar-Nagy, Hungarian Chp. 1972 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 e7e5 d4d3 a7a6 c1b1 h7h6 f2f3 a5c7 g2g3 f8e7 h2h4 b7b5 ! # col. 67c; Suetin-Gheorghiu, Hastings 1967/8. Draw. e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5e3 a7a6 f2f3 e7e6 d4b6 a5b6 e3b6 d7c6 f1c4 c6e4 c4e6 f7e6 c3e4 f6e4 f3e4 f8e7 h1f1 e7g5 c1b1 e8e7 c2c3 h8f8 b1c2 f8f1 d1f1 c8f8 ! # col. 68d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 e7e6 e4e5 d6e5 f4e5 c8c3 g5d2 a5a2 d2c3 g7g6 ! # col. 69fA1; Janosevic-Larsen, Belgrade 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 c8c3 b2c3 e7e5 d4b4 a5b4 c3b4 f6e4 f1c4 b7b5 c4d5 e4c3 f4e5 h7h6 g5h4 g7g5 h4g3 c3e2 c1b2 e2g3 h2g3 f8g7 ! # col. 70g; Bednarski-Simagin, Polanica Zdroj 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 c8c3 d4c3 f6e4 c3e3 e4g5 e3g5 d8b6 f1c4 e7e6 g5g3 g7g6 c4b3 f8e7 h2h4 h7h5 h1e1 b6b4 g3e3 a7a5 e3d4 ! # col. 71d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 h7h6 g5h4 d8a5 f1c4 e6e5 f4e5 d6e5 d4d3 a5c5 h4f6 e7f6 ! # col. 72g e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 d8a5 f1c4 c8d7 c4b3 d7c6 h1f1 b7b5 g5f6 e7f6 d4d6 f6c3 d6c6 a8c8 c6d7 c8d8 d7e7 c3d2 c1b1 d2f4 d1d8 a5d8 ! # col. 73i e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 d8b6 f2f3 a7a6 g2g4 f8d8 g5e3 b6c7 h2h4 b7b5 g4g5 f6d7 g5g6 f7g6 h4h5 g6h5 h1h5 d7f6 h5g5 c6e5 d2g2 e7f8 f3f4 e5c4 f1c4 b5c4 b3d4 a8b8 d1g1 b8b7 ! # col. 74; Tal-Larsen, match 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 a7a6 g5f6 g7f6 f1e2 g8h8 e2h5 c8d7 f2f4 b7b5 c1b1 ! # col. 75k e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b5 d8a5 g5f6 e7f6 b5d6 f8d8 f2f4 e6e5 d2d5 a5c7 f4f5 c6d4 d6b5 c7a5 d5c4 c8f5 b2b4 a5a6 ! # col. 76b; Spasski-Larsen, Santa Monica 1966 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 h7h6 g5h4 e6e5 d4f5 c8f5 e4f5 d8a5 c1b1 a8d8 h4f6 e7f6 c3d5 a5d2 d5f6 g7f6 d1d2 e5f4 ! # col. 77e; Kujpers-Minev, Halle 1967 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 d6d5 e4e5 f6d7 h2h4 d7b6 d2e3 c8d7 g5e7 d8e7 h4h5 c6a5 d4b3 a5c4 e3d4 f8c8 c1b1 a7a5 f4f5 a5a4 f5f6 e7f8 h1h3 c4b2 b1b2 b6c4 f1c4 c8c4 d4d2 ! # col. 78h e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o c8d7 f2f4 h7h6 g5h4 f6e4 d2e1 e4f6 d4f5 d8a5 f5d6 f8d6 d1d6 o-o-o d6d1 e6e5 f1c4 e5f4 c3e4 d7e6 c4e6 f7e6 e4d6 c8b8 e1e6 h8f8 ! # col. 79j; O'Kelly-Simagin corr. 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 f8e7 c3e4 a8b8 a4a3 b6b5 ! # col. 80k; Di Camillo-R. Byrne, US Open Chp. 1958 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 h7h6 g5f6 g7f6 o-o-o a7a6 f2f4 c8d7 f1e2 h6h5 c1b1 d8b6 d4b3 o-o-o h1f1 f8e7 c3a4 b6a7 c2c4 c6d4 ! # col. 81b e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d4c6 b7c6 e4e5 d6e5 d1f3 f8e7 f3c6 c8d7 c6f3 e5e4 c3e4 f6e4 g5e7 d8a5 ! # col. 82e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d3 f8e7 a1d1 o-o f1e2 c8d7 o-o c6d4 d3d4 d7c6 g1h1 d8a5 f2f4 f8e8 ! # col. 83 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 h2h3 g7g6 c1e3 f8g7 d1d2 o-o o-o-o c6d4 e3d4 d8a5 c1b1 e7e5 d4e3 c8e6 ! # BAD! -- col. 84i; Karaklajic-Taimanov, Yugoslavia-USSR, match 1956 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1e3 f6g4 f1b5 g4e3 f2e3 c8d7 o-o e7e6 5c6 b7c6 e4e5 f8e7 d1h5 o-o e5d6 e7d6 c3e4 d6e7 a1d1 d8c7 d4b3 h7h6 ! # col. 85 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 d4e2 e7e6 g2g3 d6d5 e4d5 f6d5 f1g2 d5c3 d1d8 e8d8 e2c3 c8d7 c1d2 f8e7 ! # col. 86c; Carcia-Pomar, Havana 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e5 d4e2 c8e6 c4e6 f7e6 o-o f8e7 f2f4 o-o e2g3 e5f4 f1f4 d8b6 g1h1 a8d8 b2b3 d6d5 e4d5 f6d5 f4f8 e7f8 c3d5 d8d5 d1e1 c6d4 c1e3 f8c5 ! # col. 87 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 d8b6 d4b3 e7e6 o-o f8e7 c1e3 b6c7 f2f4 o-o c4d3 a7a6 d1f3 ! # col. 88 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 d8c7 d1e2 a7a6 c4b3 c6a5 g2g4 b7b5 g4g5 f6d7 o-o-o d7c5 ! # col. 89mA; Spasjevic-Ostojic, Belgrade 1966 (draw) e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 a7a6 o-o-o o-o c4b3 d8c7 g2g4 c6d4 d1d4 e6e5 d4c4 c7d8 g4g5 f6e8 h1g1 c8d7 c3d5 d7b5 e3b6 d8d7 e2g4 e7d8 g4d7 b5d7 c4c3 d7e6 b6d8 a8d8 d5e3 d8d7 b3a4 d7c7 ! # col. 90o; Bogdanovic-Shamkovich, Sarajevo 1963 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 o-o o-o-o c6d4 e3d4 d8a5 e4e5 d6e5 d4e5 b7b6 c3b5 c8a6 e5c3 a5a4 d1d4 a6b5 c4b5 a4a2 h1d1 f8d8 d4a4 d8d1 e2d1 a2d5 d1d5 f6d5 c3d4 e7g5 c1b1 h7h5 b5c6 a8d8 a4a7 d5b4 c6d7 b4c6 ! # Queen's Catalan, col. 1c; Kramer-Fichtl, Varna Olympics 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 c7c6 b2b3 b7b6 c1b2 c8b7 d1c2 a8c8 a1d1 d8c7 e2e4 d5e4 c3e4 f6e4 c2e4 c6c5 d4d5 e7f6 e4c2 e6d5 c4d5 f6b2 c2b2 c8d8 ! # col. 2f d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 d5c4 e2e4 c7c6 a2a4 a7a5 d1e2 d7b6 f1d1 e7b4 f3e5 d8e7 c1e3 c8d7 e5c4 b6c4 e2c4 e6e5 d4e5 f6g4 ! # col. 3i; Geller-Medina, Beverwijk 1965 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 b7b6 c4d5 f6d5 b1c3 c8b7 c3d5 b7d5 e2e4 d5b7 f1d1 c7c5 d4d5 e6d5 e4d5 e7f6 h2h4 h7h6 ! # col. 4k; Geller-Bisguier, Bled 1961 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b2b3 b7b6 c1b2 c8b7 b1c3 a8c8 a1d1 b6b5 c4c5 b5b4 c3b1 f6e4 f3e1 f7f5 e1d3 a7a5 d3f4 f8f6 f2f3 e4g5 ! # col. 5m; Benko-Pachman, Budapest 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 f1d1 d8c7 c1b2 f8d8 a1c1 c7b8 c2b1 a7a5 f3e5 b8a8 ! # col. 6 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o c7c6 b1c3 b7b6 f3e5 a7a5 d1c2 c8a6 f1d1 b6b5 ! # col. 7d; Evans-Poschel, US Jr. Chp. 1947 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 c7c5 c4d5 f6d5 f1g2 c5d4 o-o f8c5 f3d4 o-o a2a3 b8c6 d4c6 b7c6 b2b4 c5e7 c1b2 e7f6 d1c2 f6b2 c2b2 a7a5 ! # col. 8g; O'Kelly-Euwe, New York 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 c7c5 o-o b8c6 d1a4 f6d7 d4c5 f8c5 a4c4 o-o b1c3 a7a6 c3e4 c5e7 c1e3 d7b6 c4b3 b6d5 f1d1 d8c7 ! # col. 9 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 b7b5 a2a4 c7c6 o-o c8b7 f3e5 d8c8 b2b3 c4b3 d1b3 b5b4 a4a5 f6d7 ! # col. 10l; Keres-Korchnoi, Curacao 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 d1a4 b8d7 f1g2 a7a6 a4c4 c7c5 d4c5 f8c5 o-o b7b5 c4h4 c8b7 b1d2 c5e7 d2b3 a8c8 h4d4 o-o c1d2 d7c5 ! # col. -- Accelerated Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 b8d7 b1d2 c7c6 a4c4 e6e5 g1f3 d7b6 c4d3 e5d4 f3d4 f8e7 o-o o-o ! # col. 12e; Muller-Ratzek, Vienna 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 c6d5 c4d3 c7c5 b1c3 d5c6 o-o b8d7 f1d1 d8b6 e2e4 c5d4 f3d4 f8c5 d4c6 c5f2 g1f1 b7c6 c3a4 b6a5 f1f2 a5a4 d3d6 ! # col. 13f; Smyslov-Kere, USSR Chp. 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 b8d7 b1c3 d7b6 c4d3 f8b4 o-o o-o f1d1 h7h6 c1d2 d8e7 a2a3 b4c3 d3c3 f8d8 ! # col. 14g d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 d5c4 d1a4 b8c6 f1g2 c8d7 a4c4 c6b4 c4b3 c7c5 g1f3 c5d4 f3d4 e6e5 d4f3 d7e6 b3a4 e6d7 ! # col. 15; Stoltz-Vidmar, Groningen 1946 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 f8e7 f1g2 o-o g1f3 d5c4 d1a4 a7a6 a4c4 b7b5 c4d3 c8b7 ! # col. 16 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1d2 c7c5 d4c5 f8c5 f1g2 b8c6 g1f3 o-o o-o a7a5 c4d5 e6d5 d2b3 c5b6 ! # col. 17d; Mikenas-Aronin, USSR Chp. 1963 d2d4 d7d5 c2c4 e7e6 g2g3 c7c5 c4d5 e6d5 g1f3 b8c6 f1g2 g8f6 o-o f8e7 d4c5 e7c5 b1d2 o-o d2b3 c5b6 b3d4 f8e8 b2b3 c6d4 f3d4 b6d4 d1d4 e8e2 ! # col. 18e d2d4 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 d4c5 d7c6 g1f3 b8d7 c1e3 g8f6 f1g2 d8c7 o-o c6d5 c4a4 f8c5 e3c5 c7c5 b1c3 d5c6 ! # col. 19 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 g8f6 g1f3 o-o f1g2 d8e7 o-o b8c6 f1c1 ! # col. 20 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4e7 f1g2 g8f6 g1f3 o-o d1b3 b7b6 c4d5 e6d5 b1c3 c8b7 o-o ! # col. 21 d2d4 g8f6 c2c4 e7e6 g2g3 e6e5 g1f3 e5d4 f3d4 d7d5 f1g2 d5c4 d1a4 c7c6 a4c4 f8e7 o-o o-o f1d1 ! # col. 22 d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 d7d5 f1g2 e6e5 d4f3 d5d4 o-o b8c6 e2e3 f8e7 e3d4 e5d4 ! # col. 23g d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 b8c6 f1g2 d8b6 d4c2 f8c5 e2e3 o-o b1c3 b6a6 d1d2 f8d8 a2a3 d7d5 b2b4 d5d4 c3e4 ! # col. 24j; Smyslov-Petrosian, Moscow 1967 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 b1d2 c7c5 d4c5 b4c5 f1g2 b8c6 g1f3 b7b6 o-o c8b7 a2a3 o-o b2b4 c5e7 c1b2 a8c8 d1b1 ! # col. 25 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 f6e4 d2c2 f7f5 f2f3 e4f6 e2e4 f5e4 f3e4 e6e5 ! # Alternate openings leading to the Catalan, line C g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 d2d4 ! # line D c2c4 g8f6 d2d4 e7e6 g2g3 d7d5 ! # line E d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 ! # The Reti Opening, col. 1c; Muller-Lilenthal, Budapest 1933 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8f5 c1b2 e7e6 f1g2 b8d7 o-o f8d6 d2d3 o-o b1c3 d8e7 f1e1 e6e5 c4d5 c6d5 e2e4 d5e4 d3e4 f5g6 ! # col. 2g; Bilek-Geller, Sousse 1967 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8g4 f1g2 e7e6 c1b2 b8d7 o-o f8e7 d2d3 o-o b1d2 a7a5 a2a3 d8b6 d1c2 h7h6 b2c3 f8c8 f1e1 b6d8 e2e4 d8f8 ! # col. 3k; Botvinnik-Fine, Nottingham 1936 g1f3 d7d5 c2c4 d5c4 b1a3 c7c5 a3c4 b8c6 g2g3 e7e5 f1g2 f7f6 b2b3 g8e7 c1b2 e7d5 o-o f8e7 f3h4 o-o d1b1 f8f7 h4f5 c8e6 f2f4 e5f4 g3f4 d5b6 g2e4 e6c4 ! # col. 4n; Katetov-Alekhin, Prague 1943 g1f3 d7d5 c2c4 d5d4 e2e3 b8c6 e3d4 c6d4 f3d4 d8d4 b1c3 e7e5 d2d3 f8c5 c1e3 d4d6 c3b5 d6e7 e3c5 e7c5 d3d4 e5d4 d1d4 c5d4 b5d4 c8g4 ! # col. 5o g1f3 d7d5 c2c4 d5d4 e2e3 c7c5 e3d4 c5d4 g2g3 b8c6 f1g2 g7g6 d2d3 f8g7 o-o e7e5 f1e1 f7f6 b2b4 c6b4 d1a4 b4c6 f3d4 d8d4 g2c6 c8d7 ! # col. 6 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 d5b4 a2a3 b4a6 d4c5 d8d1 ! # col. 7 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 b1c3 o-o b2b3 c7c5 c1b2 b8c6 c4d5 e6d5 a1c1 c8e6 o-o a8c8 d2d4 f8e8 ! # col. 8g; Kashdan-Horowitz, New York 1931 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 b8d7 b2b3 c7c6 o-o f8d6 c1b2 o-o b1c3 b7b6 d2d3 c8b7 e2e4 d5e4 d3e4 d8c7 d1e2 f8d8 f1d1 ! # col. 9h; Abroshin-Krykov corr. 1960 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 o-o c6d5 c4a4 d8d7 a4c2 b8c6 b1c3 d5f3 g2f3 c6d4 c2d3 c7c6 ! # col. 10m; Teti-Tartakover, Semmering 1926 g1f3 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 f3e5 b8c6 e5d7 d8d7 f1g2 g8f6 d2d3 f8e7 o-o c6d4 b1c3 a8d8 a2a4 f6d5 ! # Barcza System, col. 11 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 c2c4 d5c4 b1a3 e7e5 a3c4 e5e4 f3e1 f8c5 d2d3 o-o c1e3 b8d7 ! # col. 12d; Benko-Petrosian, Curacao 1962 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 d2d3 b8d7 b1d2 h7h6 d1e1 e7e6 e2e4 f5h7 e1e2 f8e7 e4e5 f6g8 d2b3 e7f8 c2c4 g8e7 b3d4 e7f5 d4f5 h7f5 c4d5 c6d5 d3d4 a7a5 c1e3 f8e7 f1c1 o-o ! # col. 13f; Bronstein-O'Kelly, Beverwijk 1963 g1f3 d7d5 g2g3 g8f6 f1g2 c7c5 o-o e7e6 d2d3 b8c6 b1d2 f8e7 e2e4 o-o f1e1 d8c7 e4e5 f6d7 d1e2 b7b5 h2h4 a7a5 d2f1 c8a6 f1h2 c6b4 h4h5 ! # col. 14i; Evans-Olafsson, Dallas 1957 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 d1e2 b7b6 d2c4 c8a6 g2f1 d8f6 ! # col. 15 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 d2d4 f8g7 o-o c7c6 b2b3 b8d7 c1b2 e7e5 d4e5 f6g4 b1d2 d7e5 f3e5 g4e5 ! # col. 16d; Larsen-Mecking, Mallorca 1969 g1f3 d7d5 g2g3 c7c5 f1g2 b8c6 o-o e7e6 d2d3 g7g6 b1c3 f8g7 a2a3 g8e7 a1b1 o-o c1d2 a8b8 b2b4 c5b4 a3b4 b7b5 e2e4 a7a5 ! # col. 17h; Benko-Bisguier, US Chp. 1963 g1f3 d7d5 g2g3 c8g4 f1g2 b8d7 c2c4 c7c6 c4d5 c6d5 b1c3 e7e6 d1b3 d8b6 b3b6 d7b6 d2d3 a8c8 c1e3 f8d6 c3b5 d6b8 o-o g8e7 f1c1 c8c1 a1c1 e7c6 f3d4 e8d7 ! # col. 18j; Keene-Basman, Hastings 1966-7 g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 c4d5 g4f3 g2f3 c6d5 d1b3 d8d7 b1c3 e7e6 o-o b8c6 f3g2 f8e7 d2d3 o-o ! # col. 19k g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 d1c2 e7e6 o-o f8e7 b2b3 b8d7 c1b2 o-o d2d3 a7a5 b1d2 a5a4 b2c3 a4b3 a2b3 d8b6 ! # col. 20m g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 o-o c7c6 c2c4 e7e6 c4d5 g4f3 g2f3 c6d5 b1c3 b8c6 d2d3 f8e7 f3g2 ! # col. 21b; Savon-Aronin, USSR 1963 g1f3 d7d5 g2g3 b8c6 d2d4 c8f5 f1g2 c6b4 b1a3 e7e6 o-o g8f6 f3h4 f5g4 c2c4 c7c6 a3c2 b4c2 d1c2 f8e7 h2h3 g4h5 f2f3 h5g6 h4g6 h7g6 ! # col. 22d; Fischer-Ivkov, Santa Monica 1966 g1f3 d7d5 g2g3 e7e6 f1g2 c7c5 o-o b8c6 d2d3 f8d6 e2e4 g8e7 b1d2 o-o f3h4 b7b6 f2f4 d5e4 d3e4 c8a6 f1e1 c5c4 c2c3 ! # col. 23 g1f3 d7d5 g2g3 b8d7 c2c4 e7e6 f1g2 g8f6 b1c3 f8e7 o-o o-o d2d3 c7c5 c4d5 e6d5 c1g5 b7b6 ! # col. 24g; Benko-Bisguier, US Chp. 1976-7 g1f3 d7d5 g2g3 g8f6 f1g2 b7b6 c2c4 e7e6 c4d5 e6d5 o-o f8d6 d2d4 o-o b1c3 c7c6 f3e5 c8b7 c1g5 h7h6 g5f6 d8f6 f2f4 f8d8 e2e4 ! # col. 25; Rabinovich-Rauser, Moscow 1934 g1f3 d7d5 b2b3 c8g4 c1b2 b8d7 c2c4 e7e6 e2e3 g8f6 f1e2 c7c6 f3d4 g4e2 d1e2 f8d6 f2f4 o-o ! # col. 26e; Evans-Najdorf, Dallas 1967 g1f3 c7c5 g2g3 b8c6 f1g2 g7g6 o-o f8g7 e2e4 d7d6 c2c3 e7e5 d2d3 g8h6 f3e1 o-o f2f4 e5f4 c1f4 h6g4 b1a3 g4e5 g1h1 d8b6 d1d2 c8e6 ! # col. 27h; Van den Pol-Barden, Holland v. England 1960 g1f3 f7f5 g2g3 g8f6 f1g2 g7g6 d2d3 f8g7 b1d2 d7d6 e2e4 e7e5 d2c4 o-o e4f5 g6f5 c1e3 b8c6 d3d4 e5e4 ! # col. 28m; Gufeld-Bokuchava, USSR Chp. prelims 1968 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o d2d3 d7d6 b1c3 b8c6 a1b1 a7a5 a2a3 d8e8 b2b4 a5b4 a3b4 e6e5 ! # col. 29p; Lundin-Tartakover, Groningen 1946 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o b2b3 c7c5 c1b2 b8c6 b1c3 e6e5 e2e3 d7d6 d2d4 ! # col. 30 g1f3 g7g6 g2g3 f8g7 f1g2 e7e5 d2d3 b8c6 e2e4 d7d6 b1c3 g8e7 c1e3 o-o d1d2 c6d4 o-o ! # King's Indian attack, col. 31a g1f3 g8f6 g2g3 b7b5 h2h4 b5b4 d2d3 c8b7 e2e4 d7d6 f1g2 b8d7 o-o e7e6 h4h5 a8b8 b1d2 f8e7 d2c4 o-o ! # col. 32d g1f3 g8f6 g2g3 g7g6 b2b4 f8g7 c1b2 o-o f1g2 d7d5 o-o c8g4 c2c4 c7c6 b1a3 b8d7 a1c1 a7a5 b4b5 a5a4 d2d3 e7e5 ! # col. 33e; Olafsson-Kavalek, Wijik aan Zee 1969 g1f3 g8f6 g2g3 g7g6 b2b3 f8g7 c1b2 o-o f1g2 d7d6 d2d4 f6d7 b1c3 e7e5 d1d2 f8e8 d4e5 d7e5 f3e5 g7e5 ! # col. 34h g1f3 g8f6 g2g3 g7g6 c2c4 d7d6 f1g2 f8g7 o-o o-o b1c3 b8d7 d2d3 e7e5 c1d2 d7c5 b2b4 c5e6 a1b1 f6e8 a2a4 c7c6 a4a5 e8c7 ! # col. 35 g1f3 g8f6 c2c4 g7g6 b2b3 f8g7 c1b2 o-o e2e3 d7d6 f1e2 e7e5 o-o f8e8 b1c3 b8d7 d2d3 c7c6 ! # col. 36d g1f3 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 d1a4 c8d7 a4b3 d5b6 d2d4 f8g7 c1f4 d7e6 b3c2 b8c6 a1d1 ! # col. 37f g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 c7c5 o-o g7g6 b2b3 f8g7 c1b2 o-o b1c3 d7d5 c3d5 f6d5 b2g7 g8g7 c4d5 d8d5 d2d4 b8a6 ! # col. 38h; Geller-Kholmov, Moscow 1969 g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 e7e6 o-o f8e7 b2b3 o-o c1b2 d7d5 e2e3 b8d7 b1c3 f6e4 c4d5 e4c3 b2c3 e6d5 ! # col. 39 g1f3 g8f6 b2b3 g7g6 c2c4 f8g7 c1b2 o-o g2g3 c7c5 f1g2 b7b6 o-o c8b7 b1c3 e7e6 a1b1 d8e7 ! # col. 40o; Lombardy-Burger, US Chp. 1969-70 g1f3 g8f6 b2b3 d7d5 c1b2 e7e6 e2e3 f8e7 c2c4 o-o d2d4 b7b6 f1d3 c8b7 o-o b8d7 b1d2 c7c5 d1e2 f6e4 a1c1 a8c8 ! chess.app-33/gnuchess.c0000644000000000000000000020375713034414342013662 0ustar rootroot/* C source for CHESS Revision: 4-25-88 Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. Copyright (c) 1988 John Stanback This file is part of CHESS. CHESS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the CHESS General Public License for full details. Everyone is granted permission to copy, modify and redistribute CHESS, but only under the conditions described in the CHESS General Public License. A copy of this license is supposed to have been given to you along with CHESS so you can know your rights and responsibilities. It should be in a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. */ /* NEXTSTEP 4.0 changes: 9-2-95 This gnuchess.c is changed from its original. The changes are mainly the additions of function type declarations (for no compiler warnings); as well as small changes for casting types and resetting global variables. Its original is saved in gnuchess.save folder. When the changed gnuchess.c has problems, go back to the saved file and recompile. */ #include #include #include #ifdef MSDOS #include #include #include #define ttblsz 4096 #else #include #include #define ttblsz 16384 #define huge #endif #define neutral 2 #define white 0 #define black 1 #define no_piece 0 #define pawn 1 #define knight 2 #define bishop 3 #define rook 4 #define queen 5 #define king 6 #define valueP 100 #define valueN 350 #define valueB 355 #define valueR 550 #define valueQ 1100 #define valueK 1200 #define ctlP 0x4000 #define ctlN 0x2800 #define ctlB 0x1800 #define ctlR 0x0400 #define ctlQ 0x0200 #define ctlK 0x0100 #define ctlBQ 0x1200 #define ctlRQ 0x0600 #define ctlNN 0x2000 #define pxx " PNBRQK" #define qxx " pnbrqk" #define rxx "12345678" #define cxx "abcdefgh" #define check 0x0001 #define capture 0x0002 #define draw 0x0004 #define promote 0x0008 #define cstlmask 0x0010 #define epmask 0x0020 #define exact 0x0040 #define pwnthrt 0x0080 #define truescore 0x0001 #define lowerbound 0x0002 #define upperbound 0x0004 #define maxdepth 30 #define true 1 #define false 0 #define absv(x) ((x) < 0 ? -(x) : (x)) #define taxicab(a,b) (abs(column[a]-column[b]) + abs(row[a]-row[b])) /* additions for NEXTSTEP 4.0 */ #include /* malloc, rand, srand */ #include /* time */ struct MoveInfo { short side; short alpha; short beta; short iop; short rpt; }; struct leaf { short f,t,score,reply; unsigned short flags; }; struct GameRec { unsigned short gmove; short score,depth,time,piece,color; long nodes; }; struct TimeControlRec { short moves[2]; long clock[2]; }; struct BookEntry { struct BookEntry *next; unsigned short *mv; }; struct hashval { unsigned long bd; unsigned short key; }; struct hashentry { unsigned long hashbd; unsigned short mv,flags; short score,depth; }; /* glue functions */ void ShowMessage(char *s); void UpdateDisplay(int a, int b, int c, int d); void ElapsedTime(int t); void ClrScreen(); void SetTimeControl(); void SelectLevel(); void GetOpenings(); void ShowDepth(char c); void ShowResults( short score, unsigned short bstline[], char ch ); void ShowSidetomove(); void SearchStartStuff(short side); void OutputMove(); void GameEnd(short score); void ShowCurrentMove( short pnt, short f, short t ); /* functions for glue */ void gnuchess_main_init(), NewGame(); void SelectLoop( struct MoveInfo *mi ); void InitializeStats(); void SelectMoveStart( struct MoveInfo *mi ); void algbr(short f, short t, short iscastle); int VerifyMove(char *s, short iop,unsigned short *mv); int SelectMoveEnd( struct MoveInfo *mi ); int SqAtakd(short sq, short side); int castle(short side,short kf,short kt,short iop); int distance(short a,short b); /* internal functions */ void UnmakeMove(short side, struct leaf *node, short *tempb, short *tempc, short *tempsf, short *tempst); void MoveList(short side, short ply); void MakeMove(short side, struct leaf *node, short *tempb, short *tempc, short *tempsf, short *tempst); static void ZeroTTable(), pick(short p1, short p2); static int search(short side, short ply, short depth, short alpha, short beta, unsigned short bstline[], short *rpt); static int ProbeTTable(short side,short depth,short *alpha, short *beta, short *score); static void ExaminePosition(), ScorePosition(short side,short *score), OpeningBook(), repetition(short *cnt); static short evaluate(short side, short xside, short ply, short alpha, short beta); static short SqValue(short sq,short side); static void CaptureList(short side,short xside,short ply); static void PutInTTable(short side,short score,short depth,short alpha,short beta,unsigned short mv); static void ataks(short side,short *a); static void ScoreLoneKing(short side, short *score); static void GenMoves(short ply,short sq,short side,short xside); static void LinkMove(short ply,short f,short t,short xside); static void UpdateHashbd(short side,short piece,short f,short t); static void UpdatePieceList(short side,short sq,short iop); static int ScoreKPK(short side, short winner, short loser, short king1,short king2, short sq); static int ScoreKBNK(short winner, short king1,short king2); static int trapped(short sq, short piece); static void UpdateWeights(); static void BRscan(short sq, short *s, short *mob); static void KingScan(short sq,short *s); static void CopyBoard(short a[64], short b[64]); static void BlendBoard(short a[64], short b[64], short c[64]); char mvstr1[5],mvstr2[5]; struct leaf Tree[2000],*root; short TrPnt[maxdepth],board[64],color[64]; short row[64],column[64],locn[8][8],Pindex[64],svalue[64]; short PieceList[2][16],PieceCnt[2],atak[2][64],PawnCnt[2][8]; short castld[2],kingmoved[2],mtl[2],pmtl[2],emtl[2],hung[2]; short c1,c2,*atk1,*atk2,*PC1,*PC2,EnemyKing; short mate,post,opponent,computer,Sdepth,Awindow,Bwindow,dither; long ResponseTime,ExtraTime,Level,et,et0,time0,cputimer,ft; long NodeCnt,evrate,ETnodes,EvalNodes,HashCnt; short quit,reverse,bothsides,hashflag,InChk,player,force,easy,beep; short wking,bking,FROMsquare,TOsquare,timeout,Zscore,zwndw,xwndw,slk; short INCscore; short HasPawn[2],HasKnight[2],HasBishop[2],HasRook[2],HasQueen[2]; short ChkFlag[maxdepth],CptrFlag[maxdepth],PawnThreat[maxdepth]; short Pscore[maxdepth],Tscore[maxdepth],Threat[maxdepth]; struct GameRec GameList[240]; short GameCnt,Game50,epsquare,lpost,rcptr,contempt; short MaxSearchDepth; struct BookEntry *Book; struct TimeControlRec TimeControl; short TCflag,TCmoves,TCminutes,OperatorTime; short otherside[3]={1,0,2}; short rank7[3]={6,1,0}; short map[64]= {0,1,2,3,4,5,6,7, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57, 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77}; short unmap[120]= {0,1,2,3,4,5,6,7,-1,-1,-1,-1,-1,-1,-1,-1, 8,9,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1, 16,17,18,19,20,21,22,23,-1,-1,-1,-1,-1,-1,-1,-1, 24,25,26,27,28,29,30,31,-1,-1,-1,-1,-1,-1,-1,-1, 32,33,34,35,36,37,38,39,-1,-1,-1,-1,-1,-1,-1,-1, 40,41,42,43,44,45,46,47,-1,-1,-1,-1,-1,-1,-1,-1, 48,49,50,51,52,53,54,55,-1,-1,-1,-1,-1,-1,-1,-1, 56,57,58,59,60,61,62,63}; short Dcode[120]= {0,1,1,1,1,1,1,1,0,0,0,0,0,0,0x0E,0x0F, 0x10,0x11,0x12,0,0,0,0,0,0,0,0,0,0,0,0x0F,0x1F, 0x10,0x21,0x11,0,0,0,0,0,0,0,0,0,0,0x0F,0,0, 0x10,0,0,0x11,0,0,0,0,0,0,0,0,0x0F,0,0,0, 0x10,0,0,0,0x11,0,0,0,0,0,0,0x0F,0,0,0,0, 0x10,0,0,0,0,0x11,0,0,0,0,0x0F,0,0,0,0,0, 0x10,0,0,0,0,0,0x11,0,0,0x0F,0,0,0,0,0,0, 0x10,0,0,0,0,0,0,0x11}; short Stboard[64]= {rook,knight,bishop,queen,king,bishop,knight,rook, pawn,pawn,pawn,pawn,pawn,pawn,pawn,pawn, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, pawn,pawn,pawn,pawn,pawn,pawn,pawn,pawn, rook,knight,bishop,queen,king,bishop,knight,rook}; short Stcolor[64]= {white,white,white,white,white,white,white,white, white,white,white,white,white,white,white,white, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, black,black,black,black,black,black,black,black, black,black,black,black,black,black,black,black}; short sweep[7]= {false,false,false,true,true,true,false}; short Dpwn[3]={4,6,0}; short Dstart[7]={6,4,8,4,0,0,0}; short Dstop[7]={7,5,15,7,3,7,7}; short Dir[16]={1,0x10,-1,-0x10,0x0F,0x11,-0x0F,-0x11, 0x0E,-0x0E,0x12,-0x12,0x1F,-0x1F,0x21,-0x21}; short Pdir[34]={0,0x38,0,0,0,0,0,0,0,0,0,0,0,0,0x02,0x35, 0x38,0x35,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0x02, 0,0x02}; short pbit[7]={0,0x01,0x02,0x04,0x08,0x10,0x20}; unsigned short killr0[maxdepth],killr1[maxdepth],killr2[maxdepth]; unsigned short killr3[maxdepth],PrVar[maxdepth]; unsigned short PV,hint,Swag0,Swag1,Swag2,Swag3,Swag4; unsigned short hashkey; unsigned long hashbd; struct hashval hashcode[2][7][64]; struct hashentry huge *ttable,*ptbl; unsigned char history[8192]; short Mwpawn[64],Mbpawn[64],Mknight[2][64],Mbishop[2][64]; short Mking[2][64],Kfield[2][64]; short value[7]={0,valueP,valueN,valueB,valueR,valueQ,valueK}; short control[7]={0,ctlP,ctlN,ctlB,ctlR,ctlQ,ctlK}; short PassedPawn0[8]={0,60,80,120,200,360,600,800}; short PassedPawn1[8]={0,30,40,60,100,180,300,800}; short PassedPawn2[8]={0,15,25,35,50,90,140,800}; short PassedPawn3[8]={0,5,10,15,20,30,140,800}; short ISOLANI[8] = {-12,-16,-20,-24,-24,-20,-16,-12}; short BACKWARD[8] = {-6,-10,-15,-21,-28,-28,-28,-28}; short BMBLTY[14] = {-2,0,2,4,6,8,10,12,13,14,15,16,16,16}; short RMBLTY[14] = {0,2,4,6,8,10,11,12,13,14,14,14,14,14}; short Kthreat[16] = {0,-8,-20,-36,-52,-68,-80,-80,-80,-80,-80,-80, -80,-80,-80,-80}; short KNIGHTPOST,KNIGHTSTRONG,BISHOPSTRONG,KATAK,KBNKsq; short PEDRNK2B,PWEAKH,PADVNCM,PADVNCI,PAWNSHIELD,PDOUBLED,PBLOK; short RHOPN,RHOPNX,KHOPN,KHOPNX,KSFTY; short ATAKD,HUNGP,HUNGX,KCASTLD,KMOVD,XRAY,PINVAL; short stage,stage2,Zwmtl,Zbmtl,Developed[2],PawnStorm; short PawnBonus,BishopBonus,RookBonus; short KingOpening[64]= { 0, 0, -4,-10,-10, -4, 0, 0, -4, -4, -8,-12,-12, -8, -4, -4, -12,-16,-20,-20,-20,-20,-16,-12, -16,-20,-24,-24,-24,-24,-20,-16, -16,-20,-24,-24,-24,-24,-20,-16, -12,-16,-20,-20,-20,-20,-16,-12, -4, -4, -8,-12,-12, -8, -4, -4, 0, 0, -4,-10,-10, -4, 0, 0}; short KingEnding[64]= { 0, 6,12,18,18,12, 6, 0, 6,12,18,24,24,18,12, 6, 12,18,24,30,30,24,18,12, 18,24,30,36,36,30,24,18, 18,24,30,36,36,30,24,18, 12,18,24,30,30,24,18,12, 6,12,18,24,24,18,12, 6, 0, 6,12,18,18,12, 6, 0}; short DyingKing[64]= { 0, 8,16,24,24,16, 8, 0, 8,32,40,48,48,40,32, 8, 16,40,56,64,64,56,40,16, 24,48,64,72,72,64,48,24, 24,48,64,72,72,64,48,24, 16,40,56,64,64,56,40,16, 8,32,40,48,48,40,32, 8, 0, 8,16,24,24,16, 8, 0}; short KBNK[64]= {99,90,80,70,60,50,40,40, 90,80,60,50,40,30,20,40, 80,60,40,30,20,10,30,50, 70,50,30,10, 0,20,40,60, 60,40,20, 0,10,30,50,70, 50,30,10,20,30,40,60,80, 40,20,30,40,50,60,80,90, 40,40,50,60,70,80,90,99}; short pknight[64]= { 0, 4, 8,10,10, 8, 4, 0, 4, 8,16,20,20,16, 8, 4, 8,16,24,28,28,24,16, 8, 10,20,28,32,32,28,20,10, 10,20,28,32,32,28,20,10, 8,16,24,28,28,24,16, 8, 4, 8,16,20,20,16, 8, 4, 0, 4, 8,10,10, 8, 4, 0}; short pbishop[64]= {14,14,14,14,14,14,14,14, 14,22,18,18,18,18,22,14, 14,18,22,22,22,22,18,14, 14,18,22,22,22,22,18,14, 14,18,22,22,22,22,18,14, 14,18,22,22,22,22,18,14, 14,22,18,18,18,18,22,14, 14,14,14,14,14,14,14,14}; short PawnAdvance[64]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 6, 8, 2,10,10, 2, 8, 6, 6, 8,12,16,16,12, 8, 6, 8,12,16,24,24,16,12, 8, 12,16,24,32,32,24,16,12, 12,16,24,32,32,24,16,12, 0, 0, 0, 0, 0, 0, 0, 0}; short winner = -1; void gnuchess_main_init() { ttable = (struct hashentry *)malloc(ttblsz * (unsigned long)sizeof(struct hashentry)); Level = 0; TCflag = false; OperatorTime = 0; /* NewGame(); */ } /* ............ INTERFACE ROUTINES ........................... */ /* Compare the string 's' to the list of legal moves available for the opponent. If a match is found, make the move on the board. */ int VerifyMove(char *s, short iop, unsigned short *mv) { static short pnt,tempb,tempc,tempsf,tempst,cnt; static struct leaf xnode; struct leaf *node; *mv = 0; if (iop == 2){ UnmakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); return(false); } cnt = 0; MoveList(opponent,2); pnt = TrPnt[2]; while (pnt < TrPnt[3]){ node = &Tree[pnt++]; algbr(node->f,node->t,node->flags & cstlmask); if (strcmp(s,mvstr1) == 0 || strcmp(s,mvstr2) == 0){ cnt++; xnode = *node; } } if (cnt == 1){ MakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); if (SqAtakd(PieceList[opponent][0],computer)){ UnmakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); ShowMessage("Illegal Move!!"); return(false); } else{ if (iop == 1) return(true); if (xnode.flags & epmask) UpdateDisplay(0,0,1,0); else UpdateDisplay((int)xnode.f,(int)xnode.t,0,(int)(xnode.flags & cstlmask)); if (xnode.flags & cstlmask) Game50 = GameCnt; else if (board[xnode.t] == pawn || (xnode.flags & capture)) Game50 = GameCnt; GameList[GameCnt].depth = GameList[GameCnt].score = 0; GameList[GameCnt].nodes = 0; ElapsedTime(1); GameList[GameCnt].time = (short)et; TimeControl.clock[opponent] -= et; --TimeControl.moves[opponent]; *mv = (xnode.f << 8) + xnode.t; algbr(xnode.f,xnode.t,false); return(true); } } if (cnt > 1) ShowMessage("Ambiguous Move!"); return(false); } void NewGame() /* Reset the board and other variables to start a new game. */ { short l,r,c,p; mate = quit = reverse = post = false; /*mate = quit = reverse = bothsides = post = false;*/ hashflag = force = PawnStorm = false; beep = rcptr = easy = true; lpost = NodeCnt = epsquare = et0 = 0; dither = 0; Awindow = 90; Bwindow = 90; xwndw = 90; MaxSearchDepth = 29; contempt = 0; GameCnt = -1; Game50 = 0; Zwmtl = Zbmtl = 0; Developed[white] = Developed[black] = false; castld[white] = castld[black] = false; kingmoved[white] = kingmoved[black] = 0; PawnThreat[0] = CptrFlag[0] = Threat[0] = false; Pscore[0] = 12000; Tscore[0] = 12000; /*opponent = white; computer = black;*/ for (r = 0; r < 8; r++) for (c = 0; c < 8; c++) { l = 8*r+c; locn[r][c] = l; row[l] = r; column[l] = c; board[l] = Stboard[l]; color[l] = Stcolor[l]; } for (c = white; c <= black; c++) for (p = pawn; p <= king; p++) for (l = 0; l < 64; l++) { hashcode[c][p][l].key = (unsigned short)rand(); hashcode[c][p][l].bd = ((unsigned long)rand() << 16) + (unsigned long)rand(); } ClrScreen(); if (TCflag) SetTimeControl(); else if (Level == 0) SelectLevel(); UpdateDisplay(0,0,1,0); InitializeStats(); time0 = time((long *)0); ElapsedTime(1); GetOpenings(); } void algbr(short f, short t, short iscastle) { mvstr1[0] = cxx[column[f]]; mvstr1[1] = rxx[row[f]]; mvstr1[2] = cxx[column[t]]; mvstr1[3] = rxx[row[t]]; mvstr2[0] = qxx[board[f]]; mvstr2[1] = mvstr1[2]; mvstr2[2] = mvstr1[3]; mvstr1[4] = '\0'; mvstr2[3] = '\0'; if (iscastle){ if (t > f) strcpy(mvstr2,"o-o"); else strcpy(mvstr2,"o-o-o"); } } /* ............ MOVE GENERATION & SEARCH ROUTINES .............. */ void SelectLoop( struct MoveInfo *mi ) { short i, score; Sdepth++; ShowDepth(' '); score = search( mi->side, 1, Sdepth, mi->alpha, mi->beta, PrVar, &mi->rpt ); for (i = 1; i <= Sdepth; i++) killr0[i] = PrVar[i]; if( score < mi->alpha ){ ShowDepth('-'); ExtraTime = 10*ResponseTime; ZeroTTable(); score = search( mi->side, 1, Sdepth, -9000, mi->beta, PrVar, &mi->rpt ); } if( score > mi->beta && !(root->flags & exact)){ ShowDepth('+'); ExtraTime = 0; ZeroTTable(); score = search( mi->side, 1, Sdepth, mi->alpha, 9000, PrVar, &mi->rpt ); } score = root->score; if (!timeout || Sdepth<2) for(i = TrPnt[1]+1; i < TrPnt[2]; i++) pick(i,TrPnt[2]-1); ShowResults( score, PrVar, '.' ); for(i = 1; i <= Sdepth; i++) killr0[i] = PrVar[i]; if( score > Zscore-zwndw && score > Tree[1].score+250) ExtraTime = 0; else if( score > Zscore-3*zwndw) ExtraTime = ResponseTime; else ExtraTime = 3*ResponseTime; if(root->flags & exact) timeout = true; if(Tree[1].score < -9000) timeout = true; if (4*et > 2*ResponseTime + ExtraTime) timeout = true; if (!timeout){ Tscore[0] = score; if (Zscore == 0) Zscore = score; else Zscore = (Zscore + score)/2; } zwndw = 20+abs(Zscore/12); mi->beta = score + Bwindow; if(Zscore < score) mi->alpha = Zscore - Awindow - zwndw; else mi->alpha = score - Awindow - zwndw; } void SelectMove(short side, short iop) /* Select a move by calling function search() at progressively deeper ply until time is up or a mate or draw is reached. An alpha-beta window of -90 to +90 points is set around the score returned from the previous iteration. If Sdepth != 0 then the program has correctly predicted the opponents move and the search will start at a depth of Sdepth+1 rather than a depth of 1. */ { struct MoveInfo mi; mi.iop = iop; mi.side = side; SelectMoveStart( &mi ); while (!timeout && Sdepth < MaxSearchDepth) SelectLoop( &mi ); (void)SelectMoveEnd( &mi ); } void SelectMoveStart( struct MoveInfo *mi ) { short i, score; timeout = false; if( mi->iop != 2 ) player = mi->side; if(TCflag){ if (((TimeControl.moves[mi->side] + 3) - OperatorTime) != 0) ResponseTime = (TimeControl.clock[mi->side]) / (TimeControl.moves[mi->side] + 3) - OperatorTime; else ResponseTime = 0; ResponseTime += (ResponseTime*TimeControl.moves[mi->side])/(2*TCmoves+1); } else ResponseTime = Level; if( mi->iop == 2 ) ResponseTime = 999; if (Sdepth > 0 && root->score > Zscore-zwndw) ResponseTime -= ft; else if( ResponseTime < 1 ) ResponseTime = 1; ExtraTime = 0; ExaminePosition(); ScorePosition( mi->side, &score); ShowSidetomove(); if( Sdepth == 0 ){ ZeroTTable(); SearchStartStuff( mi->side ); for (i = 0; i < 8192; i++) history[i] = 0; FROMsquare = TOsquare = -1; PV = 0; if( mi->iop != 2 ) hint = 0; for (i = 0; i < maxdepth; i++) PrVar[i] = killr0[i] = killr1[i] = killr2[i] = killr3[i] = 0; mi->alpha = score-90; mi->beta = score+90; mi->rpt = 0; TrPnt[1] = 0; root = &Tree[0]; MoveList( mi->side, 1 ); for (i = TrPnt[1]; i < TrPnt[2]; i++) pick(i,TrPnt[2]-1); if(Book != NULL) OpeningBook(); if(Book != NULL) timeout = true; NodeCnt = ETnodes = EvalNodes = HashCnt = 0; Zscore = 0; zwndw = 20; } } int SelectMoveEnd( struct MoveInfo *mi ) { static short score, tempb, tempc, tempsf, tempst; score = root->score; if( mi->rpt >= 2 || score < -12000 ) root->flags |= draw; if( mi->iop == 2 ) return(0); if (Book == NULL) hint = PrVar[2]; ElapsedTime(1); if (score > -9999 && mi->rpt <= 2){ MakeMove( mi->side, root, &tempb, &tempc, &tempsf, &tempst ); algbr(root->f,root->t,root->flags & cstlmask); } else mvstr1[0] = '\0'; OutputMove(); if (score == -9999 || score == 9998) { winner = otherside[mi->side]; mate = true; } if (mate) hint = 0; if (root->flags & cstlmask) Game50 = GameCnt; else if (board[root->t] == pawn || (root->flags & capture)) Game50 = GameCnt; GameList[GameCnt].score = score; GameList[GameCnt].nodes = NodeCnt; GameList[GameCnt].time = (short)et; GameList[GameCnt].depth = Sdepth; if (TCflag){ TimeControl.clock[mi->side] -= (et + OperatorTime); if (--TimeControl.moves[mi->side] == 0) SetTimeControl(); } if ((root->flags & draw) && bothsides) quit = true; if (GameCnt > 238) quit = true; player = otherside[mi->side]; Sdepth = 0; fflush(stdin); if( quit || mate || (root->flags & draw) ) GameEnd( score ); return(0); } void OpeningBook() /* Go thru each of the opening lines of play and check for a match with the current game listing. If a match occurs, generate a random number. If this number is the largest generated so far then the next move in this line becomes the current "candidate". After all lines are checked, the candidate move is put at the top of the Tree[] array and will be played by the program. Note that the program does not handle book transpositions. */ { short j,pnt; unsigned short m,*mp; unsigned r,r0; struct BookEntry *p; srand((unsigned)time0); r0 = m = 0; p = Book; while (p != NULL) { mp = p->mv; for (j = 0; j <= GameCnt; j++) if (GameList[j].gmove != *(mp++)) break; if (j > GameCnt) if ((r=rand()) > r0) { r0 = r; m = *mp; hint = *(++mp); } p = p->next; } for (pnt = TrPnt[1]; pnt < TrPnt[2]; pnt++) if ((Tree[pnt].f<<8) + Tree[pnt].t == m) Tree[pnt].score = 0; pick(TrPnt[1],TrPnt[2]-1); if (Tree[TrPnt[1]].score < 0) Book = NULL; } #define UpdateSearchStatus \ {\ if (post) ShowCurrentMove(pnt,node->f,node->t);\ if (pnt > TrPnt[1])\ {\ d = best-Zscore; e = best-node->score;\ if (best < alpha) ExtraTime = 10*ResponseTime;\ else if (d > -zwndw && e > 4*zwndw) ExtraTime = -ResponseTime/3;\ else if (d > -zwndw) ExtraTime = 0;\ else if (d > -3*zwndw) ExtraTime = ResponseTime;\ else if (d > -9*zwndw) ExtraTime = 3*ResponseTime;\ else ExtraTime = 5*ResponseTime;\ }\ } int search(short side, short ply, short depth, short alpha, short beta, unsigned short bstline[], short *rpt) /* Perform an alpha-beta search to determine the score for the current board position. If depth <= 0 only capturing moves, pawn promotions and responses to check are generated and searched, otherwise all moves are processed. The search depth is modified for check evasions, certain re-captures and threats. Extensions may continue for up to 11 ply beyond the nominal search depth. */ #define prune (cf && score+node->score < alpha) #define ReCapture (rcptr && score > alpha && score < beta &&\ ply > 2 && CptrFlag[ply-1] && CptrFlag[ply-2]) #define MateThreat (ply < Sdepth+4 && ply > 4 &&\ ChkFlag[ply-2] && ChkFlag[ply-4] &&\ ChkFlag[ply-2] != ChkFlag[ply-4]) { register short j,pnt; short best,tempb,tempc,tempsf,tempst; short xside,pbst,d,e,cf,score,rcnt; unsigned short mv,nxtline[maxdepth]; struct leaf *node,tmp; NodeCnt++; xside = otherside[side]; if (depth < 0) depth = 0; if( ply <= Sdepth+3 ) repetition( rpt ); else *rpt = 0; if( *rpt >= 2 ) return(0); score = evaluate(side,xside,ply,alpha,beta); if (score > 9000){ bstline[ply] = 0; return(score); } if (depth > 0){ if (InChk || PawnThreat[ply-1] || ReCapture) ++depth; } else{ if( score >= alpha && (InChk || PawnThreat[ply-1] || Threat[ply-1]) ) ++depth; else if (score <= beta && MateThreat) ++depth; } if (depth > 0 && hashflag && ply > 1){ ProbeTTable(side,depth,&alpha,&beta,&score); bstline[ply] = PV; bstline[ply+1] = 0; if (beta == -20000) return(score); if (alpha > beta) return(alpha); } if (Sdepth == 1) d = 7; else d = 11; if (ply > Sdepth+d || (depth < 1 && score > beta)) return(score); if (ply > 1){ if (depth > 0) MoveList(side,ply); else CaptureList(side,xside,ply); } if (TrPnt[ply] == TrPnt[ply+1]) return(score); cf = (depth < 1 && ply > Sdepth+1 && !ChkFlag[ply-2] && !slk); if (depth > 0) best = -12000; else best = score; if (best > alpha) alpha = best; for (pnt = pbst = TrPnt[ply]; pnt < TrPnt[ply+1] && best <= beta; pnt++){ if (ply > 1) pick(pnt,TrPnt[ply+1]-1); node = &Tree[pnt]; mv = (node->f << 8) + node->t; nxtline[ply+1] = 0; if (prune) break; if (ply == 1) UpdateSearchStatus; if (!(node->flags & exact)){ MakeMove(side,node,&tempb,&tempc,&tempsf,&tempst); CptrFlag[ply] = (node->flags & capture); PawnThreat[ply] = (node->flags & pwnthrt); Tscore[ply] = node->score; PV = node->reply; node->score = -search(xside,ply+1,depth-1,-beta,-alpha, nxtline,&rcnt); if (abs(node->score) > 9000) node->flags |= exact; else if (rcnt == 1) node->score /= 2; if (rcnt >= 2 || GameCnt-Game50 > 99 || (node->score == 9999-ply && !ChkFlag[ply])) { node->flags |= draw; node->flags |= exact; if (side == computer) node->score = contempt; else node->score = -contempt; } node->reply = nxtline[ply+1]; UnmakeMove(side,node,&tempb,&tempc,&tempsf,&tempst); } if (node->score > best && (!timeout || Sdepth < 2)){ if (depth > 0) if (node->score > alpha && !(node->flags & exact)) node->score += depth; best = node->score; pbst = pnt; if (best > alpha) alpha = best; for (j = ply+1; nxtline[j] > 0; j++) bstline[j] = nxtline[j]; bstline[j] = 0; bstline[ply] = mv; if (ply == 1) { if (best == alpha) { tmp = Tree[pnt]; for (j = pnt-1; j >= 0; j--) Tree[j+1] = Tree[j]; Tree[0] = tmp; pbst = 0; } if (Sdepth > 2) { if (best > beta) ShowResults(best,bstline,'+'); else if (best < alpha) ShowResults(best,bstline,'-'); else ShowResults(best,bstline,'&'); } } } if (NodeCnt > ETnodes) ElapsedTime(0); if (timeout && Sdepth > 1) return(-Tscore[ply-1]); } node = &Tree[pbst]; mv = (node->f<<8) + node->t; if (hashflag && ply <= Sdepth && *rpt == 0 && best == alpha) PutInTTable(side,best,depth,alpha,beta,mv); if (depth > 0){ j = (node->f<<6) + node->t; if (side == black) j |= 0x1000; if (history[j] < 150) { history[j] += 2*depth; } if (node->t != (GameList[GameCnt].gmove & 0xFF)) { if (best <= beta) killr3[ply] = mv; else if (mv != killr1[ply]) { killr2[ply] = killr1[ply]; killr1[ply] = mv; } } if (best > 9000) killr0[ply] = mv; else killr0[ply] = 0; } return(best); } short evaluate(short side, short xside, short ply, short alpha, short beta) /* Compute an estimate of the score by adding the positional score from the previous ply to the material difference. If this score falls inside a window which is 180 points wider than the alpha-beta window (or within a 50 point window during quiescence search) call ScorePosition() to determine a score, otherwise return the estimated score. If one side has only a king and the other either has no pawns or no pieces then the function ScoreLoneKing() is called. */ { short s,evflag; hung[white] = hung[black] = 0; slk = ((mtl[white] == valueK && (pmtl[black] == 0 || emtl[black] == 0)) || (mtl[black] == valueK && (pmtl[white] == 0 || emtl[white] == 0))); s = -Pscore[ply-1] + mtl[side] - mtl[xside]; s -= INCscore; if (slk) evflag = false; else evflag = (ply == 1 || ply < Sdepth || ((ply == Sdepth+1 || ply == Sdepth+2) && (s > alpha-xwndw && s < beta+xwndw)) || (ply > Sdepth+2 && s >= alpha-25 && s <= beta+25)); if (evflag) { EvalNodes++; ataks(side,atak[side]); if (atak[side][PieceList[xside][0]] > 0) return(10001-ply); ataks(xside,atak[xside]); InChk = (atak[xside][PieceList[side][0]] > 0); ScorePosition(side,&s); } else { if (SqAtakd(PieceList[xside][0],side)) return(10001-ply); InChk = SqAtakd(PieceList[side][0],xside); if (slk) ScoreLoneKing(side,&s); } Pscore[ply] = s - mtl[side] + mtl[xside]; if (InChk) ChkFlag[ply-1] = Pindex[TOsquare]; else ChkFlag[ply-1] = 0; Threat[ply-1] = (hung[side] > 1 && ply == Sdepth+1); return(s); } int ProbeTTable(short side,short depth,short *alpha, short *beta, short *score) /* Look for the current board position in the transposition table. */ { short hindx; if (side == white) hashkey |= 1; else hashkey &= 0xFFFE; hindx = (hashkey & (ttblsz-1)); ptbl = (ttable + hindx); if (ptbl->depth >= depth && ptbl->hashbd == hashbd) { HashCnt++; PV = ptbl->mv; if (ptbl->flags & truescore) { *score = ptbl->score; *beta = -20000; return(true); } /* else if (ptbl->flags & upperbound) { if (ptbl->score < *beta) *beta = ptbl->score+1; } */ else if (ptbl->flags & lowerbound) { if (ptbl->score > *alpha) *alpha = ptbl->score-1; } } return(false); } void PutInTTable(short side,short score,short depth,short alpha,short beta,unsigned short mv) /* Store the current board position in the transposition table. */ { short hindx; if (side == white) hashkey |= 1; else hashkey &= 0xFFFE; hindx = (hashkey & (ttblsz-1)); ptbl = (ttable + hindx); ptbl->hashbd = hashbd; ptbl->depth = depth; ptbl->score = score; ptbl->mv = mv; ptbl->flags = 0; if (score < alpha) ptbl->flags |= upperbound; else if (score > beta) ptbl->flags |= lowerbound; else ptbl->flags |= truescore; } void ZeroTTable() { int i; if (hashflag) for (i = 0; i < ttblsz; i++) { ptbl = (ttable + i); ptbl->depth = 0; } } void MoveList(short side, short ply) /* Fill the array Tree[] with all available moves for side to play. Array TrPnt[ply] contains the index into Tree[] of the first move at a ply. */ { register short i; short xside,f; xside = otherside[side]; if (PV == 0) Swag0 = killr0[ply]; else Swag0 = PV; Swag1 = killr1[ply]; Swag2 = killr2[ply]; Swag3 = killr3[ply]; Swag4 = 0; if (ply > 2) Swag4 = killr1[ply-2]; TrPnt[ply+1] = TrPnt[ply]; Dstart[pawn] = Dpwn[side]; Dstop[pawn] = Dstart[pawn] + 1; for (i = PieceCnt[side]; i >= 0; i--) GenMoves(ply,PieceList[side][i],side,xside); if (kingmoved[side] == 0 && !castld[side]) { f = PieceList[side][0]; if (castle(side,f,f+2,0)) { LinkMove(ply,f,f+2,xside); Tree[TrPnt[ply+1]-1].flags |= cstlmask; } if (castle(side,f,f-2,0)) { LinkMove(ply,f,f-2,xside); Tree[TrPnt[ply+1]-1].flags |= cstlmask; } } } void GenMoves(short ply,short sq,short side,short xside) /* Generate moves for a piece. The from square is mapped onto a special board and offsets (taken from array Dir[]) are added to the mapped location. The newly generated square is tested to see if it falls off the board by ANDing the square with 88 HEX. Legal moves are linked into the tree. */ { register short m,u,d; short i,m0,piece; piece = board[sq]; m0 = map[sq]; if (sweep[piece]) for (i = Dstart[piece]; i <= Dstop[piece]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (color[u] == neutral) { LinkMove(ply,sq,u,xside); m += d; } else if (color[u] == xside) { LinkMove(ply,sq,u,xside); break; } else break; } } else if (piece == pawn) { if (side == white && color[sq+8] == neutral) { LinkMove(ply,sq,sq+8,xside); if (row[sq] == 1) if (color[sq+16] == neutral) LinkMove(ply,sq,sq+16,xside); } else if (side == black && color[sq-8] == neutral) { LinkMove(ply,sq,sq-8,xside); if (row[sq] == 6) if (color[sq-16] == neutral) LinkMove(ply,sq,sq-16,xside); } for (i = Dstart[piece]; i <= Dstop[piece]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (color[u] == xside || u == epsquare) LinkMove(ply,sq,u,xside); } } else { for (i = Dstart[piece]; i <= Dstop[piece]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (color[u] != side) LinkMove(ply,sq,u,xside); } } } void LinkMove(short ply,short f,short t,short xside) /* Add a move to the tree. Assign a bonus to order the moves as follows: 1. Principle variation 2. Capture of last moved piece 3. Other captures (major pieces first) 4. Killer moves 5. "history" killers */ { register short s,z; unsigned short mv; struct leaf *node; node = &Tree[TrPnt[ply+1]]; ++TrPnt[ply+1]; node->flags = node->reply = 0; node->f = f; node->t = t; mv = (f<<8) + t; s = 0; if (mv == Swag0) s = 2000; else if (mv == Swag1) s = 60; else if (mv == Swag2) s = 50; else if (mv == Swag3) s = 40; else if (mv == Swag4) s = 30; if (color[t] != neutral) { node->flags |= capture; if (t == TOsquare) s += 500; s += value[board[t]] - board[f]; } if (board[f] == pawn) { if (row[t] == 0 || row[t] == 7) { node->flags |= promote; s += 800; } else if (row[t] == 1 || row[t] == 6) { node->flags |= pwnthrt; s += 600; } else if (t == epsquare) node->flags |= epmask; } z = (f<<6) + t; if (xside == white) z |= 0x1000; s += history[z]; node->score = s - 20000; } void CaptureList(short side,short xside,short ply) /* Generate captures and Pawn promotions only. */ #define LinkCapture \ {\ node->f = sq; node->t = u;\ node->reply = 0;\ node->flags = capture;\ node->score = value[board[u]] + svalue[board[u]] - piece;\ if (piece == pawn && (u < 8 || u > 55))\ {\ node->flags |= promote;\ node->score = valueQ;\ }\ ++node;\ ++TrPnt[ply+1];\ } { register short m,u; short d,sq,i,j,j1,j2,m0,r7,d0,piece,*PL; struct leaf *node; TrPnt[ply+1] = TrPnt[ply]; node = &Tree[TrPnt[ply]]; Dstart[pawn] = Dpwn[side]; Dstop[pawn] = Dstart[pawn] + 1; if (side == white) { r7 = 6; d0 = 8; } else { r7 = 1; d0 = -8; } PL = PieceList[side]; for (i = 0; i <= PieceCnt[side]; i++) { sq = PL[i]; m0 = map[sq]; piece = board[sq]; j1 = Dstart[piece]; j2 = Dstop[piece]; if (sweep[piece]) for (j = j1; j <= j2; j++) { d = Dir[j]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (color[u] == neutral) m += d; else { if (color[u] == xside) LinkCapture; break; } } } else { for (j = j1; j <= j2; j++) if (!((m = m0+Dir[j]) & 0x88)) { u = unmap[m]; if (color[u] == xside) LinkCapture; } if (piece == pawn && row[sq] == r7) { u = sq+d0; if (color[u] == neutral) LinkCapture; } } } } int castle(short side,short kf,short kt,short iop) /* Make or Unmake a castling move. */ { short rf,rt,d,t0,xside; xside = otherside[side]; if (kt > kf) { rf = kf+3; rt = kt-1; d = 1; } else { rf = kf-4; rt = kt+1; d = -1; } if (iop == 0) { if (board[kf] != king || board[rf] != rook || color[rf] != side) return(false); if (color[kt] != neutral || color[rt] != neutral) return(false); if (d == -1 && color[kt+d] != neutral) return(false); if (SqAtakd(kf,xside)) return(false); if (SqAtakd(kt,xside)) return(false); if (SqAtakd(kf+d,xside)) return(false); } else { if (iop == 1) castld[side] = true; else castld[side] = false; if (iop == 2) { t0 = kt; kt = kf; kf = t0; t0 = rt; rt = rf; rf = t0; } board[kt] = king; color[kt] = side; Pindex[kt] = 0; board[kf] = no_piece; color[kf] = neutral; board[rt] = rook; color[rt] = side; Pindex[rt] = Pindex[rf]; board[rf] = no_piece; color[rf] = neutral; PieceList[side][Pindex[kt]] = kt; PieceList[side][Pindex[rt]] = rt; if (hashflag) { UpdateHashbd(side,king,kf,kt); UpdateHashbd(side,rook,rf,rt); } } return(true); } void EnPassant(short xside,short f,short t,short iop) /* Make or unmake an en passant move. */ { short l; if (t > f) l = t-8; else l = t+8; if (iop == 1) { board[l] = no_piece; color[l] = neutral; } else { board[l] = pawn; color[l] = xside; } InitializeStats(); } void MakeMove(short side, struct leaf *node, short *tempb, short *tempc, short *tempsf, short *tempst) /* Update Arrays board[], color[], and Pindex[] to reflect the new board position obtained after making the move pointed to by node. Also update miscellaneous stuff that changes when a move is made. */ { register short f,t; short xside,ct,cf; xside = otherside[side]; f = node->f; t = node->t; epsquare = -1; FROMsquare = f; TOsquare = t; INCscore = 0; GameList[++GameCnt].gmove = (f<<8) + t; if (node->flags & cstlmask) { GameList[GameCnt].piece = no_piece; GameList[GameCnt].color = side; castle(side,f,t,1); } else { *tempc = color[t]; *tempb = board[t]; *tempsf = svalue[f]; *tempst = svalue[t]; GameList[GameCnt].piece = *tempb; GameList[GameCnt].color = *tempc; if (*tempc != neutral) { /* A piece was captured. */ UpdatePieceList(*tempc,t,1); if (*tempb == pawn) --PawnCnt[*tempc][column[t]]; if (board[f] == pawn) { --PawnCnt[side][column[f]]; ++PawnCnt[side][column[t]]; cf = column[f]; ct = column[t]; if (PawnCnt[side][ct] > 1+PawnCnt[side][cf]) INCscore -= 15; else if (PawnCnt[side][ct] < 1+PawnCnt[side][cf]) INCscore += 15; else if (ct == 0 || ct == 7 || PawnCnt[side][ct+ct-cf] == 0) INCscore -= 15; } mtl[xside] -= value[*tempb]; if (*tempb == pawn) pmtl[xside] -= valueP; if (hashflag) UpdateHashbd(xside,*tempb,-1,t); INCscore += *tempst; } color[t] = color[f]; board[t] = board[f]; svalue[t] = svalue[f]; Pindex[t] = Pindex[f]; PieceList[side][Pindex[t]] = t; color[f] = neutral; board[f] = no_piece; if (board[t] == pawn) { if (t-f == 16) epsquare = f+8; else if (f-t == 16) epsquare = f-8; } if (node->flags & promote) { board[t] = queen; --PawnCnt[side][column[t]]; mtl[side] += valueQ - valueP; pmtl[side] -= valueP; HasQueen[side] = true; if (hashflag) { UpdateHashbd(side,pawn,f,-1); UpdateHashbd(side,queen,f,-1); } INCscore -= *tempsf; } if (board[t] == king) ++kingmoved[side]; if (node->flags & epmask) EnPassant(xside,f,t,1); else if (hashflag) UpdateHashbd(side,board[t],f,t); } } void UnmakeMove(short side, struct leaf *node, short *tempb, short *tempc, short *tempsf, short *tempst) /* Take back a move. */ { register short f,t; short xside; xside = otherside[side]; f = node->f; t = node->t; epsquare = -1; GameCnt--; if (node->flags & cstlmask) castle(side,f,t,2); else { color[f] = color[t]; board[f] = board[t]; svalue[f] = *tempsf; Pindex[f] = Pindex[t]; PieceList[side][Pindex[f]] = f; color[t] = *tempc; board[t] = *tempb; svalue[t] = *tempst; if (node->flags & promote) { board[f] = pawn; ++PawnCnt[side][column[t]]; mtl[side] += valueP - valueQ; pmtl[side] += valueP; if (hashflag) { UpdateHashbd(side,queen,-1,t); UpdateHashbd(side,pawn,-1,t); } } if (*tempc != neutral) { UpdatePieceList(*tempc,t,2); if (*tempb == pawn) ++PawnCnt[*tempc][column[t]]; if (board[f] == pawn) { --PawnCnt[side][column[t]]; ++PawnCnt[side][column[f]]; } mtl[xside] += value[*tempb]; if (*tempb == pawn) pmtl[xside] += valueP; if (hashflag) UpdateHashbd(xside,*tempb,-1,t); } if (board[f] == king) --kingmoved[side]; if (node->flags & epmask) EnPassant(xside,f,t,2); else if (hashflag) UpdateHashbd(side,board[f],f,t); } } void UpdateHashbd(short side,short piece,short f,short t) /* hashbd contains a 32 bit "signature" of the board position. hashkey contains a 16 bit code used to address the hash table. When a move is made, XOR'ing the hashcode of moved piece on the from and to squares with the hashbd and hashkey values keeps things current. */ { if (f >= 0) { hashbd ^= hashcode[side][piece][f].bd; hashkey ^= hashcode[side][piece][f].key; } if (t >= 0) { hashbd ^= hashcode[side][piece][t].bd; hashkey ^= hashcode[side][piece][t].key; } } void UpdatePieceList(short side,short sq,short iop) /* Update the PieceList and Pindex arrays when a piece is captured or when a capture is unmade. */ { register short i; if (iop == 1) { PieceCnt[side]--; for (i = Pindex[sq]; i <= PieceCnt[side]; i++) { PieceList[side][i] = PieceList[side][i+1]; Pindex[PieceList[side][i]] = i; } } else { PieceCnt[side]++; PieceList[side][PieceCnt[side]] = sq; Pindex[sq] = PieceCnt[side]; } } void InitializeStats() /* Scan thru the board seeing what's on each square. If a piece is found, update the variables PieceCnt, PawnCnt, Pindex and PieceList. Also determine the material for each side and set the hashkey and hashbd variables to represent the current board position. Array PieceList[side][indx] contains the location of all the pieces of either side. Array Pindex[sq] contains the indx into PieceList for a given square. */ { register short i,sq; epsquare = -1; for (i = 0; i < 8; i++) PawnCnt[white][i] = PawnCnt[black][i] = 0; mtl[white] = mtl[black] = pmtl[white] = pmtl[black] = 0; PieceCnt[white] = PieceCnt[black] = 0; hashbd = hashkey = 0; for (sq = 0; sq < 64; sq++) if (color[sq] != neutral) { mtl[color[sq]] += value[board[sq]]; if (board[sq] == pawn) { pmtl[color[sq]] += valueP; ++PawnCnt[color[sq]][column[sq]]; } if (board[sq] == king) Pindex[sq] = 0; else Pindex[sq] = ++PieceCnt[color[sq]]; PieceList[color[sq]][Pindex[sq]] = sq; hashbd ^= hashcode[color[sq]][board[sq]][sq].bd; hashkey ^= hashcode[color[sq]][board[sq]][sq].key; } } void pick(short p1, short p2) /* Find the best move in the tree between indexes p1 and p2. Swap the best move into the p1 element. */ { register short p,s; short p0,s0; struct leaf temp; s0 = Tree[p1].score; p0 = p1; for (p = p1+1; p <= p2; p++) if ((s = Tree[p].score) > s0) { s0 = s; p0 = p; } if (p0 != p1) { temp = Tree[p1]; Tree[p1] = Tree[p0]; Tree[p0] = temp; } } void repetition(short *cnt) /* Check for draw by threefold repetition. */ { register short i,c; short f,t,b[64]; unsigned short m; *cnt = c = 0; if (GameCnt > Game50+3) { /* memset((char *)b,0,64*sizeof(short)); */ for (i = 0; i < 64; b[i++] = 0); for (i = GameCnt; i > Game50; i--) { m = GameList[i].gmove; f = m>>8; t = m & 0xFF; if (++b[f] == 0) c--; else c++; if (--b[t] == 0) c--; else c++; if (c == 0) (*cnt)++; } } } int SqAtakd(short sq, short side) /* See if any piece with color 'side' ataks sq. First check for pawns or king, then try other pieces. Array Dcode is used to check for knight attacks or R,B,Q co-linearity. */ { register short m,d; short i,m0,m1,loc,piece,*PL; m1 = map[sq]; if (side == white) m = m1-0x0F; else m = m1+0x0F; if (!(m & 0x88)) if (board[unmap[m]] == pawn && color[unmap[m]] == side) return(true); if (side == white) m = m1-0x11; else m = m1+0x11; if (!(m & 0x88)) if (board[unmap[m]] == pawn && color[unmap[m]] == side) return(true); if (distance(sq,PieceList[side][0]) == 1) return(true); PL = PieceList[side]; for (i = 1; i <= PieceCnt[side]; i++) { loc = PL[i]; piece = board[loc]; if (piece == pawn) continue; m0 = map[loc]; d = Dcode[abs(m1-m0)]; if (d == 0 || (Pdir[d] & pbit[piece]) == 0) continue; if (piece == knight) return(true); else { if (m1 < m0) d = -d; for (m = m0+d; m != m1; m += d) if (color[unmap[m]] != neutral) break; if (m == m1) return(true); } } return(false); } void ataks(short side,short *a) /* Fill array atak[][] with info about ataks to a square. Bits 8-15 are set if the piece (king..pawn) ataks the square. Bits 0-7 contain a count of total ataks to the square. */ { register short u,m; short d,c,j,j1,j2,piece,i,m0,sq,*PL; /* memset((char *)a,0,64*sizeof(short)); */ for (u = 0; u < 64; a[u++] = 0); Dstart[pawn] = Dpwn[side]; Dstop[pawn] = Dstart[pawn] + 1; PL = PieceList[side]; for (i = 0; i <= PieceCnt[side]; i++) { sq = PL[i]; m0 = map[sq]; piece = board[sq]; c = control[piece]; j1 = Dstart[piece]; j2 = Dstop[piece]; if (sweep[piece]) for (j = j1; j <= j2; j++) { d = Dir[j]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; a[u] = ++a[u] | c; if (color[u] == neutral) m += d; else break; } } else for (j = j1; j <= j2; j++) if (!((m = m0+Dir[j]) & 0x88)) { u = unmap[m]; a[u] = ++a[u] | c; } } } /* ............ POSITIONAL EVALUATION ROUTINES ............ */ void ScorePosition(short side,short *score) /* Perform normal static evaluation of board position. A score is generated for each piece and these are summed to get a score for each side. */ { register short sq,s; short i,xside,pscore[3]; wking = PieceList[white][0]; bking = PieceList[black][0]; UpdateWeights(); xside = otherside[side]; pscore[white] = pscore[black] = 0; for (c1 = white; c1 <= black; c1++) { c2 = otherside[c1]; if (c1 == white) EnemyKing = bking; else EnemyKing = wking; atk1 = atak[c1]; atk2 = atak[c2]; PC1 = PawnCnt[c1]; PC2 = PawnCnt[c2]; for (i = 0; i <= PieceCnt[c1]; i++) { sq = PieceList[c1][i]; s = SqValue(sq,side); pscore[c1] += s; svalue[sq] = s; } } if (hung[side] > 1) pscore[side] += HUNGX; if (hung[xside] > 1) pscore[xside] += HUNGX; *score = mtl[side] - mtl[xside] + pscore[side] - pscore[xside] + 10; if (dither) *score += rand() % dither; if (*score > 0 && pmtl[side] == 0) { if (emtl[side] < valueR) *score = 0; else if (*score < valueR) *score /= 2; } if (*score < 0 && pmtl[xside] == 0) { if (emtl[xside] < valueR) *score = 0; else if (-*score < valueR) *score /= 2; } if (mtl[xside] == valueK && emtl[side] > valueB) *score += 200; if (mtl[side] == valueK && emtl[xside] > valueB) *score -= 200; } void ScoreLoneKing(short side, short *score) /* Static evaluation when loser has only a king and winner has no pawns or no pieces. */ { short winner,loser,king1,king2,s,i; UpdateWeights(); if (mtl[white] > mtl[black]) winner = white; else winner = black; loser = otherside[winner]; king1 = PieceList[winner][0]; king2 = PieceList[loser][0]; s = 0; if (pmtl[winner] > 0) for (i = 1; i <= PieceCnt[winner]; i++) s += ScoreKPK(side,winner,loser,king1,king2,PieceList[winner][i]); else if (emtl[winner] == valueB+valueN) s = ScoreKBNK(winner,king1,king2); else if (emtl[winner] > valueB) s = 500 + emtl[winner] - DyingKing[king2] - 2*distance(king1,king2); if (side == winner) *score = s; else *score = -s; } int ScoreKPK(short side,short winner,short loser, short king1,short king2, short sq) /* Score King and Pawns versus King endings. */ { short s,r; if (PieceCnt[winner] == 1) s = 50; else s = 120; if (winner == white) { if (side == loser) r = row[sq]-1; else r = row[sq]; if (row[king2] >= r && distance(sq,king2) < 8-r) s += 10*row[sq]; else s = 500+50*row[sq]; if (row[sq] < 6) sq += 16; else sq += 8; } else { if (side == loser) r = row[sq]+1; else r = row[sq]; if (row[king2] <= r && distance(sq,king2) < r+1) s += 10*(7-row[sq]); else s = 500+50*(7-row[sq]); if (row[sq] > 1) sq -= 16; else sq -= 8; } s += 8*(taxicab(king2,sq) - taxicab(king1,sq)); return(s); } int ScoreKBNK(short winner,short king1,short king2) /* Score King+Bishop+Knight versus King endings. This doesn't work all that well but it's better than nothing. */ { short s; s = emtl[winner] - 300; if (KBNKsq == 0) s += KBNK[king2]; else s += KBNK[locn[row[king2]][7-column[king2]]]; s -= taxicab(king1,king2); s -= distance(PieceList[winner][1],king2); s -= distance(PieceList[winner][2],king2); return(s); } short SqValue(short sq,short side) /* Calculate the positional value for the piece on 'sq'. */ { register short j,fyle,rank; short s,piece,a1,a2,in_square,r,mob,e,c; piece = board[sq]; a1 = (atk1[sq] & 0x4FFF); a2 = (atk2[sq] & 0x4FFF); rank = row[sq]; fyle = column[sq]; s = 0; if (piece == pawn && c1 == white) { s = Mwpawn[sq]; if (sq == 11 || sq == 12) if (color[sq+8] != neutral) s += PEDRNK2B; if ((fyle == 0 || PC1[fyle-1] == 0) && (fyle == 7 || PC1[fyle+1] == 0)) s += ISOLANI[fyle]; else if (PC1[fyle] > 1) s += PDOUBLED; if (a1 < ctlP && atk1[sq+8] < ctlP) { s += BACKWARD[a2 & 0xFF]; if (PC2[fyle] == 0) s += PWEAKH; if (color[sq+8] != neutral) s += PBLOK; } if (PC2[fyle] == 0) { if (side == black) r = rank-1; else r = rank; in_square = (row[bking] >= r && distance(sq,bking) < 8-r); if (a2 == 0 || side == white) e = 0; else e = 1; for (j = sq+8; j < 64; j += 8) if (atk2[j] >= ctlP) { e = 2; break; } else if (atk2[j] > 0 || color[j] != neutral) e = 1; if (e == 2) s += (stage*PassedPawn3[rank]) / 10; else if (in_square || e == 1) s += (stage*PassedPawn2[rank]) / 10; else if (emtl[black] > 0) s += (stage*PassedPawn1[rank]) / 10; else s += PassedPawn0[rank]; } } else if (piece == pawn && c1 == black) { s = Mbpawn[sq]; if (sq == 51 || sq == 52) if (color[sq-8] != neutral) s += PEDRNK2B; if ((fyle == 0 || PC1[fyle-1] == 0) && (fyle == 7 || PC1[fyle+1] == 0)) s += ISOLANI[fyle]; else if (PC1[fyle] > 1) s += PDOUBLED; if (a1 < ctlP && atk1[sq-8] < ctlP) { s += BACKWARD[a2 & 0xFF]; if (PC2[fyle] == 0) s += PWEAKH; if (color[sq-8] != neutral) s += PBLOK; } if (PC2[fyle] == 0) { if (side == white) r = rank+1; else r = rank; in_square = (row[wking] <= r && distance(sq,wking) < r+1); if (a2 == 0 || side == black) e = 0; else e = 1; for (j = sq-8; j >= 0; j -= 8) if (atk2[j] >= ctlP) { e = 2; break; } else if (atk2[j] > 0 || color[j] != neutral) e = 1; if (e == 2) s += (stage*PassedPawn3[7-rank]) / 10; else if (in_square || e == 1) s += (stage*PassedPawn2[7-rank]) / 10; else if (emtl[white] > 0) s += (stage*PassedPawn1[7-rank]) / 10; else s += PassedPawn0[7-rank]; } } else if (piece == knight) { s = Mknight[c1][sq]; } else if (piece == bishop) { s = Mbishop[c1][sq]; BRscan(sq,&s,&mob); s += BMBLTY[mob]; } else if (piece == rook) { s += RookBonus; BRscan(sq,&s,&mob); s += RMBLTY[mob]; if (PC1[fyle] == 0) s += RHOPN; if (PC2[fyle] == 0) s += RHOPNX; if (rank == rank7[c1] && pmtl[c2] > 100) s += 10; if (stage > 2) s += 14 - taxicab(sq,EnemyKing); } else if (piece == queen) { if (stage > 2) s += 14 - taxicab(sq,EnemyKing); if (distance(sq,EnemyKing) < 3) s += 12; } else if (piece == king) { s = Mking[c1][sq]; if (KSFTY > 0) if (Developed[c2] || stage > 0) KingScan(sq,&s); if (castld[c1]) s += KCASTLD; else if (kingmoved[c1]) s += KMOVD; if (PC1[fyle] == 0) s += KHOPN; if (PC2[fyle] == 0) s += KHOPNX; if (fyle == 1 || fyle == 2 || fyle == 3 || fyle == 7) { if (PC1[fyle-1] == 0) s += KHOPN; if (PC2[fyle-1] == 0) s += KHOPNX; } if (fyle == 4 || fyle == 5 || fyle == 6 || fyle == 0) { if (PC1[fyle+1] == 0) s += KHOPN; if (PC2[fyle+1] == 0) s += KHOPNX; } if (fyle == 2) { if (PC1[0] == 0) s += KHOPN; if (PC2[0] == 0) s += KHOPNX; } if (fyle == 5) { if (PC1[7] == 0) s += KHOPN; if (PC2[7] == 0) s += KHOPNX; } } if (a2 > 0) { c = (control[piece] & 0x4FFF); if (a1 == 0 || a2 > c+1) { s += HUNGP; ++hung[c1]; if (piece != king && trapped(sq,piece)) ++hung[c1]; } else if (piece != pawn || a2 > a1) if (a2 >= c || a1 < ctlP) s += ATAKD; } return(s); } void KingScan(short sq,short *s) /* Assign penalties if king can be threatened by checks, if squares near the king are controlled by the enemy (especially the queen), or if there are no pawns near the king. */ #define ScoreThreat \ if (color[u] != c2) \ if (atk1[u] == 0 || (atk2[u] & 0xFF) > 1) ++cnt;\ else *s -= 3 { register short m,u; short d,i,m0,cnt,ok; cnt = 0; m0 = map[sq]; if (HasBishop[c2] || HasQueen[c2]) for (i = Dstart[bishop]; i <= Dstop[bishop]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (atk2[u] & ctlBQ) ScoreThreat; if (color[u] != neutral) break; m += d; } } if (HasRook[c2] || HasQueen[c2]) for (i = Dstart[rook]; i <= Dstop[rook]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (atk2[u] & ctlRQ) ScoreThreat; if (color[u] != neutral) break; m += d; } } if (HasKnight[c2]) for (i = Dstart[knight]; i <= Dstop[knight]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (atk2[u] & ctlNN) ScoreThreat; } *s += (KSFTY*Kthreat[cnt]) / 16; cnt = 0; ok = false; m0 = map[sq]; for (i = Dstart[king]; i <= Dstop[king]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (board[u] == pawn) ok = true; if (atk2[u] > atk1[u]) { ++cnt; if (atk2[u] & ctlQ) if (atk2[u] > ctlQ+1 && atk1[u] < ctlQ) *s -= 4*KSFTY; } } if (!ok) *s -= KSFTY; if (cnt > 1) *s -= KSFTY; } void BRscan(short sq, short *s, short *mob) /* Find Bishop and Rook mobility, XRAY attacks, and pins. Increment the hung[] array if a pin is found. */ { register short m,u; short d,j,m0,piece,pin,*Kf; Kf = Kfield[c1]; *mob = 0; m0 = map[sq]; piece = board[sq]; for (j = Dstart[piece]; j <= Dstop[piece]; j++) { pin = -1; d = Dir[j]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; *s += Kf[u]; if (color[u] == neutral) { (*mob)++; m += d; } else if (pin < 0) { if (board[u] == pawn || board[u] == king) break; pin = u; m += d; } else if (color[u] == c2 && (board[u] > piece || atk2[u] == 0)) { if (color[pin] == c2) { *s += PINVAL; if (atk2[pin] == 0 || atk1[pin] > control[board[pin]]+1) ++hung[c2]; } else *s += XRAY; break; } else break; } } } int trapped(short sq, short piece) /* See if the attacked piece has unattacked squares to move to. */ { register short u,m,d; short i,m0; m0 = map[sq]; if (sweep[piece]) for (i = Dstart[piece]; i <= Dstop[piece]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (color[u] == c1) break; if (atk2[u] == 0 || board[u] >= piece) return(false); if (color[u] == c2) break; m += d; } } else if (piece == pawn) { if (c1 == white) u = sq+8; else u = sq-8; if (color[u] == neutral && atk1[u] >= atk2[u]) return(false); if (!((m = m0+Dir[Dpwn[c1]]) & 0x88)) if (color[unmap[m]] == c2) return(false); if (!((m = m0+Dir[Dpwn[c1]+1]) & 0x88)) if (color[unmap[m]] == c2) return(false); } else { for (i = Dstart[piece]; i <= Dstop[piece]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (color[u] != c1) if (atk2[u] == 0 || board[u] >= piece) return(false); } } return(true); } void ExaminePosition() /* This is done one time before the search is started. Set up arrays Mwpawn, Mbpawn, Mknight, Mbishop, Mking which are used in the SqValue() function to determine the positional value of each piece. */ { register short i,sq; short wpadv,bpadv,wstrong,bstrong,z,side,pp,j,val,Pd,fyle,rank; wking = PieceList[white][0]; bking = PieceList[black][0]; ataks(white,atak[white]); ataks(black,atak[black]); Zwmtl = Zbmtl = 0; UpdateWeights(); HasPawn[white] = HasPawn[black] = 0; HasKnight[white] = HasKnight[black] = 0; HasBishop[white] = HasBishop[black] = 0; HasRook[white] = HasRook[black] = 0; HasQueen[white] = HasQueen[black] = 0; for (side = white; side <= black; side++) for (i = 0; i <= PieceCnt[side]; i++) switch (board[PieceList[side][i]]) { case pawn : ++HasPawn[side]; break; case knight : ++HasKnight[side]; break; case bishop : ++HasBishop[side]; break; case rook : ++HasRook[side]; break; case queen : ++HasQueen[side]; break; } if (!Developed[white]) Developed[white] = (board[1] != knight && board[2] != bishop && board[5] != bishop && board[6] != knight); if (!Developed[black]) Developed[black] = (board[57] != knight && board[58] != bishop && board[61] != bishop && board[62] != knight); if (!PawnStorm && stage < 5) PawnStorm = ((column[wking] < 3 && column[bking] > 4) || (column[wking] > 4 && column[bking] < 3)); CopyBoard(pknight,Mknight[white]); CopyBoard(pknight,Mknight[black]); CopyBoard(pbishop,Mbishop[white]); CopyBoard(pbishop,Mbishop[black]); BlendBoard(KingOpening,KingEnding,Mking[white]); BlendBoard(KingOpening,KingEnding,Mking[black]); for (sq = 0; sq < 64; sq++) { fyle = column[sq]; rank = row[sq]; wstrong = bstrong = true; for (i = sq; i < 64; i += 8) if (atak[black][i] >= ctlP) wstrong = false; for (i = sq; i >= 0; i -= 8) if (atak[white][i] >= ctlP) bstrong = false; wpadv = bpadv = PADVNCM; if ((fyle == 0 || PawnCnt[white][fyle-1] == 0) && (fyle == 7 || PawnCnt[white][fyle+1] == 0)) wpadv = PADVNCI; if ((fyle == 0 || PawnCnt[black][fyle-1] == 0) && (fyle == 7 || PawnCnt[black][fyle+1] == 0)) bpadv = PADVNCI; Mwpawn[sq] = (wpadv*PawnAdvance[sq]) / 10; Mbpawn[sq] = (bpadv*PawnAdvance[63-sq]) / 10; Mwpawn[sq] += PawnBonus; Mbpawn[sq] += PawnBonus; if (castld[white] || kingmoved[white]) { if ((fyle < 3 || fyle > 4) && distance(sq,wking) < 3) Mwpawn[sq] += PAWNSHIELD; } else if (rank < 3 && (fyle < 2 || fyle > 5)) Mwpawn[sq] += PAWNSHIELD / 2; if (castld[black] || kingmoved[black]) { if ((fyle < 3 || fyle > 4) && distance(sq,bking) < 3) Mbpawn[sq] += PAWNSHIELD; } else if (rank > 4 && (fyle < 2 || fyle > 5)) Mbpawn[sq] += PAWNSHIELD / 2; if (PawnStorm) { if ((column[wking] < 4 && fyle > 4) || (column[wking] > 3 && fyle < 3)) Mwpawn[sq] += 3*rank - 21; if ((column[bking] < 4 && fyle > 4) || (column[bking] > 3 && fyle < 3)) Mbpawn[sq] -= 3*rank; } Mknight[white][sq] += 5 - distance(sq,bking); Mknight[white][sq] += 5 - distance(sq,wking); Mknight[black][sq] += 5 - distance(sq,wking); Mknight[black][sq] += 5 - distance(sq,bking); Mbishop[white][sq] += BishopBonus; Mbishop[black][sq] += BishopBonus; for (i = 0; i <= PieceCnt[black]; i++) if (distance(sq,PieceList[black][i]) < 3) Mknight[white][sq] += KNIGHTPOST; for (i = 0; i <= PieceCnt[white]; i++) if (distance(sq,PieceList[white][i]) < 3) Mknight[black][sq] += KNIGHTPOST; if (wstrong) Mknight[white][sq] += KNIGHTSTRONG; if (bstrong) Mknight[black][sq] += KNIGHTSTRONG; if (wstrong) Mbishop[white][sq] += BISHOPSTRONG; if (bstrong) Mbishop[black][sq] += BISHOPSTRONG; if (HasBishop[white] == 2) Mbishop[white][sq] += 8; if (HasBishop[black] == 2) Mbishop[black][sq] += 8; if (HasKnight[white] == 2) Mknight[white][sq] += 5; if (HasKnight[black] == 2) Mknight[black][sq] += 5; if (board[sq] == bishop) { if (rank % 2 == fyle % 2) KBNKsq = 0; else KBNKsq = 7; } Kfield[white][sq] = Kfield[black][sq] = 0; if (distance(sq,wking) == 1) Kfield[black][sq] = KATAK; if (distance(sq,bking) == 1) Kfield[white][sq] = KATAK; Pd = 0; for (i = 0; i < 64; i++) if (board[i] == pawn) { if (color[i] == white) { pp = true; if (row[i] == 6) z = i+8; else z = i+16; for (j = i+8; j < 64; j += 8) if (atak[black][j] > ctlP || board[j] == pawn) pp = false; } else { pp = true; if (row[i] == 1) z = i-8; else z = i-16; for (j = i-8; j >= 0; j -= 8) if (atak[white][j] > ctlP || board[j] == pawn) pp = false; } if (pp) Pd += 5*taxicab(sq,z); else Pd += taxicab(sq,z); } if (Pd != 0) { val = (Pd*stage2) / 10; Mking[white][sq] -= val; Mking[black][sq] -= val; } } } void UpdateWeights() /* If material balance has changed, determine the values for the positional evaluation terms. */ { short tmtl; if (mtl[white] != Zwmtl || mtl[black] != Zbmtl) { Zwmtl = mtl[white]; Zbmtl = mtl[black]; emtl[white] = Zwmtl - pmtl[white] - valueK; emtl[black] = Zbmtl - pmtl[black] - valueK; tmtl = emtl[white] + emtl[black]; if (tmtl > 6600) stage = 0; else if (tmtl < 1400) stage = 10; else stage = (6600-tmtl) / 520; if (tmtl > 3600) stage2 = 0; else if (tmtl < 1400) stage2 = 10; else stage2 = (3600-tmtl) / 220; PEDRNK2B = -15; /* centre pawn on 2nd rank & blocked */ PBLOK = -4; /* blocked backward pawn */ PDOUBLED = -14; /* doubled pawn */ PWEAKH = -4; /* weak pawn on half open file */ PAWNSHIELD = 10-stage; /* pawn near friendly king */ PADVNCM = 10; /* advanced pawn multiplier */ PADVNCI = 7; /* muliplier for isolated pawn */ PawnBonus = stage; KNIGHTPOST = (stage+2)/3; /* knight near enemy pieces */ KNIGHTSTRONG = (stage+6)/2; /* occupies pawn hole */ BISHOPSTRONG = (stage+6)/2; /* occupies pawn hole */ BishopBonus = 2*stage; RHOPN = 10; /* rook on half open file */ RHOPNX = 4; RookBonus = 6*stage; XRAY = 8; /* Xray attack on piece */ PINVAL = 10; /* Pin */ KHOPN = (3*stage-30) / 2; /* king on half open file */ KHOPNX = KHOPN / 2; KCASTLD = 10 - stage; KMOVD = -40 / (stage+1); /* king moved before castling */ KATAK = (10-stage) / 2; /* B,R attacks near enemy king */ if (stage < 8) KSFTY = 16-2*stage; else KSFTY = 0; ATAKD = -6; /* defender > attacker */ HUNGP = -8; /* each hung piece */ HUNGX = -12; /* extra for >1 hung piece */ } } int distance(short a,short b) { register short d1,d2; d1 = abs(column[a]-column[b]); d2 = abs(row[a]-row[b]); if (d1 > d2) return(d1); else return(d2); } void BlendBoard(short a[64],short b[64],short c[64]) { register int sq; for (sq = 0; sq < 64; sq++) c[sq] = (a[sq]*(10-stage) + b[sq]*stage) / 10; } void CopyBoard(short a[64],short b[64]) { register int sq; for (sq = 0; sq < 64; sq++) b[sq] = a[sq]; } // Local Variables: // tab-width: 8 // End: chess.app-33/GNUmakefile0000644000000000000000000000223113034414342013731 0ustar rootroot# # This file generated by pbxbuild # include $(GNUSTEP_MAKEFILES)/common.make PACKAGE_NAME=Chess APP_NAME=Chess VERSION=0 Chess_OBJC_FILES=\ Board.m\ Board3D.m\ Chess.m\ Chess_main.m\ Clock.m\ ResponseMeter.m\ Square.m\ Square3D.m\ gnuglue.m Chess_C_FILES=\ gnuchess.c Chess_CC_FILES=\ ChessListener.cp Chess_RESOURCE_FILES=\ ApplicationNameImage.tiff\ ChessApp.tiff\ ChessDoc.tiff\ chess.icns\ chess.tiff\ gnuchess.subproj/COPYING\ gnuchess.subproj/gnuchess.book Chess_LOCALIZED_RESOURCE_FILES=\ 3d_black_sample.tiff\ 3d_board.tiff\ 3d_pieces.tiff\ 3d_plastic.tiff\ 3d_white_sample.tiff\ Chess.nib\ Credits.rtf\ Localizable.strings\ SpeechHelp.xml\ black.tiff\ black_bishop.tiff\ black_king.tiff\ black_knight.tiff\ black_pawn.tiff\ black_queen.tiff\ black_rook.tiff\ clock.tiff\ white.tiff\ white_bishop.tiff\ white_king.tiff\ white_knight.tiff\ white_pawn.tiff\ white_queen.tiff\ white_rook.tiff Chess_LANGUAGES=\ English Chess_PRINCIPAL_CLASS=Chess Chess_MAIN_MODEL_FILE=Chess ADDITIONAL_CPPFLAGS+= -DGNUSTEP -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamblechess.app-33/Chess.iconheader0000644000000000000000000000007713034414342014755 0ustar rootrootF Chess.app Chess app F Chess Chess app S chess Chess ChessDoc chess.app-33/CVSVersionInfo.txt0000644000000000000000000000024413034414342015237 0ustar rootroot# Created and modified by checkpoint; do not edit # $Id: CVSVersionInfo.txt,v 1.1 2009/03/10 21:28:36 gcasa Exp $ # $Name: $ ProjectName: Chess ProjectVersion: 33 chess.app-33/Makefile.postamble0000644000000000000000000001443213034414342015312 0ustar rootroot############################################################################### # NeXT Makefile.postamble # Copyright 1996, NeXT Software, Inc. # # This Makefile is used for configuring the standard app makefiles associated # with ProjectBuilder. # # Use this template to set attributes for a project, sub-project, bundle, or # palette. Each node in the project's tree of sub-projects and bundles # should have it's own Makefile.preamble and Makefile.postamble. Additional # rules (e.g., after_install) that are defined by the developer should be # defined in this file. # ############################################################################### # # Here are the variables exported by the common "app" makefiles that can be # used in any customizations you make to the template below: # # PRODUCT_ROOT - Name of the directory to which resources are copied. # OFILE_DIR - Directory into which .o object files are generated. # (Note that this name is calculated based on the target # architectures specified in Project Builder). # DERIVED_SRC_DIR - Directory used for all other derived files # ALL_CFLAGS - All the flags passed to the cc(1) driver for compilations # # NAME - name of application, bundle, subproject, palette, etc. # LANGUAGE - langage in which the project is written (default "English") # LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project # GLOBAL_RESOURCES - non-localized resources of project # PROJECTVERSION - version of ProjectBuilder project (NS3.X = 1.1, NS4.0 = 2.0) # ICONSECTIONS - Specifies icon sections when linking executable # # CLASSES - Class implementation files in project. # HFILES - Header files in project. # MFILES - Other Objective-C source files in project. # CFILES - Other C source files in project. # PSWFILES - .psw files in the project # PSWMFILES - .pswm files in the project # SUBPROJECTS - Subprojects of this project # BUNDLES - Bundle subprojects of this project # OTHERSRCS - Other miscellaneous sources of this project # OTHERLINKED - Source files not matching a standard source extention # # LIBS - Libraries to link with when making app target # DEBUG_LIBS - Libraries to link with when making debug target # PROF_LIBS - Libraries to link with when making profile target # OTHERLINKEDOFILES - Other relocatable files to (always) link in. # # APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles # MAKEFILEDIR - Directory in which to find $(MAKEFILE) # MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make) # INSTALLDIR - Directory app will be installed into by 'install' target # ############################################################################### # Change defaults assumed by the standard makefiles here. Edit the # following default values as appropriate. (Note that if no Makefile.postamble # exists, these values will have defaults set in common.make). # Versioning of frameworks, libraries, bundles, and palettes: #CURRENTLY_ACTIVE_VERSION = YES # Set to "NO" to produce a compatibility binary #DEPLOY_WITH_VERSION_NAME = A # This should be incremented as your API changes. #COMPATIBILITY_PROJECT_VERSION = 1 # This should be incremented as your API grows. #CURRENT_PROJECT_VERSION = 1 # Defaults to using the "vers_string" hack. # Some compiler flags can be easily overridden here, but onlytake effect at # the top-level: #OPTIMIZATION_CFLAG = -O #DEBUG_SYMBOLS_CFLAG = -g #WARNING_CFLAGS = -Wmost #DEBUG_BUILD_CFLAGS = -DDEBUG #PROFILE_BUILD_CFLAGS = -pg -DPROFILE # This definition will suppress stripping of debug symbols when an executable # is installed. By default it is YES. # STRIP_ON_INSTALL = NO # Flags passed to yacc #YFLAGS = -d # Library and Framework projects only: # 1. If you want something other than the default .dylib name, override it here #DYLIB_INSTALL_NAME = lib$(NAME).dylib # 2. If you want to change the -install_name flag from the absolute path to the development area, change it here. One good choice is the installation directory. Another one might be none at all. #DYLIB_INSTALL_DIR = $(INSTALLDIR) # Ownership and permissions of files installed by 'install' target #INSTALL_AS_USER = root # User/group ownership #INSTALL_AS_GROUP = wheel # (probably want to set both of these) #INSTALL_PERMISSIONS = # If set, 'install' chmod's executable to this # Options to strip for various project types. Note: -S strips debugging symbols # (executables can be stripped down further with -x or, if they load no bundles, with no # options at all). #APP_STRIP_OPTS = -S #TOOL_STRIP_OPTS = -S #LIBRARY_STRIP_OPTS = -S # for .a archives #DYNAMIC_STRIP_OPTS = -S # for bundles and shared libraries ######################################################################### # Put rules to extend the behavior of the standard Makefiles here. "Official" # user-defined rules are: # * before_install # * after_install # * after_installhdrs # You should avoid redefining things like "install" or "app", as they are # owned by the top-level Makefile API and no context has been set up for where # derived files should go. # # Note: on MS Windows, executables, have an extension, so rules and dependencies # for generated tools should use $(EXECUTABLE_EXT) on the end. show-mods: cvs -n update tag: cvs tag $(NAME)-$(CURRENT_PROJECT_VERSION) new-version new_version: ifeq "" "$(NEW_VERSION)" @$(ECHO) "*** The NEW_VERSION make variable must be set. The current version is: $(CURRENT_PROJECT_VERSION)" @$(ECHO) "" @exit 1 endif @$(SED) "s%CURRENT_PROJECT_VERSION[ ]*=.*$$%CURRENT_PROJECT_VERSION = $(NEW_VERSION)%" Makefile.preamble > Makefile.preamble.new @$(MV) Makefile.preamble.new Makefile.preamble cvs commit -m "Change version to $(NEW_VERSION)" Makefile.preamble export: ifeq "" "$(EXPORT_DIR)" @$(ECHO) "*** THE EXPORT_DIR make variable must be set to the directory in which to export, for example, $(MAKE) EXPORT_DIR=~wsdev/cvs_releases" @$(ECHO) "" @exit 1 endif @if [ -d $(EXPORT_DIR)/$(NAME)-$(CURRENT_PROJECT_VERSION) ]; then \ $(ECHO) "*** The directory $(EXPORT_DIR)/$(NAME)-$(CURRENT_PROJECT_VERSION) already exists, you probably need to do a $(MAKE) new-version first."; \ exit 1; \ fi; cvs export -r $(NAME)-$(CURRENT_PROJECT_VERSION) -d $(EXPORT_DIR)/$(NAME)-$(CURRENT_PROJECT_VERSION) $(NAME) chess.app-33/Makefile.preamble0000644000000000000000000000021313034414342015103 0ustar rootroot# # Makefile.preamble for gnuchess.subproj # # Copyright 1995, NeXT Computer, Inc. # # original sources OTHER_SOURCEFILES = gnuchess.save chess.app-33/PB.project0000644000000000000000000000150113034414342013547 0ustar rootroot{ APPCLASS = NSApplication; FILESTABLE = { H_FILES = (gnuchess.h); OTHER_LINKED = (gnuchess.c); OTHER_RESOURCES = (COPYING, gnuchess.book); OTHER_SOURCES = (Makefile, Makefile.preamble); PROJECT_HEADERS = (gnuchess.h); }; LANGUAGE = English; LOCALIZABLE_FILES = {}; NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; NEXTSTEP_MAINNIB = gnuchess; NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; PDO_UNIX_MAINNIB = gnuchess; PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; PROJECTNAME = gnuchess; PROJECTTYPE = Subproject; PROJECTVERSION = 2.8; WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; WINDOWS_MAINNIB = gnuchess; WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; } chess.app-33/Clock.m0000644000000000000000000000702013034414342013071 0ustar rootroot/* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $RCSfile: Clock.m,v $ Chess Copyright (c) 2000-2001 Apple Computer. All rights reserved. */ // own interface #import "Clock.h" // private functions static void renderHand( float col, float len, int minute ) { PSgsave(); PSsetgray( col ); PStranslate( (float)31.0, (float)32.0 ); PSrotate( (float)( -6.0 * minute ) ); PSmoveto( (float)0.0, (float)0.0 ); PSrlineto( (float)0.0, len ); PSstroke(); PSgrestore(); } // Clock implementations @implementation Clock - (id)initWithFrame: (NSRect)theFrame { NSRect f; f.origin = theFrame.origin; f.size.width = (float)64.0; f.size.height = (float)64.0; self = [super initWithFrame: f]; if( self ) { background = [[NSImage imageNamed: @"clock"] copy]; return self; } return nil; } - (void)setSeconds: (int)s { seconds = s; } - (int)seconds { return seconds; } - (void)drawRect: (NSRect)rects { NSPoint p = NSZeroPoint; PSgsave(); [background compositeToPoint: p operation: NSCompositeCopy]; renderHand( (float)0.333, (float)20.0, (int)(seconds % 60) ); renderHand( (float)0.0, (float)20.0, (int)(seconds / 60) ); renderHand( (float)0.0, (float)16.0, (int)(seconds / 3600) ); PSgrestore(); return; } @end chess.app-33/COPYING0000644000000000000000000001451313034414342012720 0ustar rootroot GNU CHESS GENERAL PUBLIC LICENSE Copyright (C) 1986,1987 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license, but changing it is not allowed. The license agreements of most software companies keep you at the mercy of those companies. By contrast, our general public license is intended to give everyone the right to share GNU Chess. To make sure that you get the rights we want you to have, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. Hence this license agreement. Specifically, we want to make sure that you have the right to give away copies of GNU Chess, that you receive source code or else can get it if you want it, that you can change GNU Chess or use pieces of it in new free programs, and that you know you can do these things. To make sure that everyone has such rights, we have to forbid you to deprive anyone else of these rights. For example, if you distribute copies of GNU Chess, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. Also, for our own protection, we must make certain that everyone finds out that there is no warranty for GNU Chess. If GNU Chess is modified by someone else and passed on, we want its recipients to know that what they have is not what we distributed, so that any problems introduced by others will not reflect on our reputation. Therefore the Free Software Foundation, Inc. makes the following terms which say what you must do to be allowed to distribute or change GNU Chess. COPYING POLICIES 1. You may copy and distribute verbatim copies of GNU Chess source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each file a valid copyright notice "Copyright (C) 1986,1987 Free Software Foundation, Inc.", containing the year of last change for the file in question; keep intact the notices on all files that refer to this License Agreement and to the absence of any warranty; and give any other recipients of the GNU Chess program a copy of this License Agreement along with the program. 2. You may modify your copy or copies of GNU Chess source code or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating who last changed such files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains or is a derivative of GNU Chess or any part thereof, to be freely distributed and licensed to all third parties on terms identical to those contained in this License Agreement (except that you may choose to grant more extensive warranty protection to third parties, at your option). c) if the modified program serves as a text editor, cause it when started running in the simplest and usual way, to print an announcement including a valid copyright notice ("Copyright (C)", the year of authorship, and all copyright owners' names), saying that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License Agreement. 3. You may copy and distribute GNU Chess or any portion of it in compiled, executable or object code form under the terms of Paragraphs 1 and 2 above provided that you do the following: a) cause each such copy of GNU Chess to be accompanied by the corresponding machine-readable source code; or b) cause each such copy of GNU Chess to be accompanied by a written offer, with no time limit, to give any third party free (except for a nominal shipping charge) machine readable copy of the corresponding source code; or c) in the case of a recipient of GNU Chess in compiled, executable or object code form (without the corresponding source code) you shall cause copies you distribute to be accompanied by a copy of the written offer of source code which you received along with the copy of GNU Chess. 4. You may not copy, sublicense, distribute or transfer GNU Chess except as expressly provided under this License Agreement. Any attempt otherwise to copy, sublicense, distribute or transfer GNU Chess is void and your rights to use GNU Chess under this License agreement shall be automatically terminated. However, parties who have received computer software programs from you with this License Agreement will not have their licenses terminated so long as such parties remain in full compliance. Your comments and suggestions about our licensing policies and our software are welcome! Please contact the Free Software Foundation, Inc., 1000 Mass Ave, Cambridge, MA 02138, or call (617) 876-3296. NO WARRANTY BECAUSE GNU CHESS IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, AND/OR OTHER PARTIES PROVIDE GNU CHESS "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE GNU CHESS PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE GNU CHESS AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH PROGRAMS NOT DISTRIBUTED BY FREE SOFTWARE FOUNDATION, INC.) THE PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. chess.app-33/Makefile0000644000000000000000000000202713034414342013322 0ustar rootroot# # Generated by the NeXT Project Builder. # # NOTE: Do NOT change this file -- Project Builder maintains it. # # Put all of your customizations in files called Makefile.preamble # and Makefile.postamble (both optional), and Makefile will include them. # NAME = gnuchess PROJECTVERSION = 2.8 PROJECT_TYPE = Component GLOBAL_RESOURCES = COPYING gnuchess.book HFILES = gnuchess.h CFILES = gnuchess.c OTHERSRCS = Makefile Makefile.preamble MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles CODE_GEN_STYLE = DYNAMIC MAKEFILE = subproj.make LIBS = DEBUG_LIBS = $(LIBS) PROF_LIBS = $(LIBS) PROJECT_HEADERS = gnuchess.h NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc NEXTSTEP_JAVA_COMPILER = /usr/bin/javac WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac include $(MAKEFILEDIR)/platform.make -include Makefile.preamble include $(MAKEFILEDIR)/$(MAKEFILE) -include Makefile.postamble -include Makefile.dependencies