From 543cac0ad5e437a2fcdebce0b8872b682b2f2592 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Sun, 21 Dec 2025 13:22:26 -0500 Subject: [PATCH 01/20] Integrate LLM pipeline with Stockfish analysis services --- chessServer/src/config/openai.js | 29 ++ chessServer/src/managers/GameManager.js | 22 +- chessServer/src/services/AnalysisService.js | 422 ++++++++++++++++++++ chessServer/src/utils/cache.js | 30 ++ stockfishServer/src/managers/socket.js | 9 +- 5 files changed, 505 insertions(+), 7 deletions(-) create mode 100644 chessServer/src/config/openai.js create mode 100644 chessServer/src/services/AnalysisService.js create mode 100644 chessServer/src/utils/cache.js diff --git a/chessServer/src/config/openai.js b/chessServer/src/config/openai.js new file mode 100644 index 00000000..a174ba1e --- /dev/null +++ b/chessServer/src/config/openai.js @@ -0,0 +1,29 @@ +// chessServer/src/config/openai.js +// Responsibility: OpenAI client configuration +// - Loads OPENAI_API_KEY from environment +// - Exports configured OpenAI client + +//in .env set LLM_MODE=mock +//or +//in docker environment: +// - LLM_MODE=mock + +import OpenAI from "openai"; + +const mode = (process.env.LLM_MODE || "openai").toLowerCase(); // "openai" | "mock" + +function hasOpenAIKey() +{ + const key = process.env.OPENAI_API_KEY; + return !!(key && key.trim()); +} + +// Export either a real client or null. +// (Do NOT throw at import time, so dev can run without a key.) +export const openai = + mode === "openai" && hasOpenAIKey() + ? new OpenAI({ apiKey: process.env.OPENAI_API_KEY }) + : null; + +export const llmMode = mode; + diff --git a/chessServer/src/managers/GameManager.js b/chessServer/src/managers/GameManager.js index 32169f01..e80bdac5 100644 --- a/chessServer/src/managers/GameManager.js +++ b/chessServer/src/managers/GameManager.js @@ -1,4 +1,5 @@ const { Chess } = require("chess.js") +const crypto = require('crypto'); /** * GameManager class handles chess game sessions, state, and logic. @@ -56,7 +57,8 @@ class GameManager { color: mentorColor }, boardState: board, - pastStates: [] + pastStates: [], + gameId: crypto.randomUUID() //stable game identifier (shared by both students and mentors) }; this.ongoingGames.push(newGame); @@ -141,6 +143,7 @@ class GameManager { boardState: board, pastStates: [], puzzle: "No hints available", + gameId: crypto.randomUUID(), }; console.log("created puzzle:", newGame.puzzle); @@ -171,20 +174,31 @@ class GameManager { const board = game.boardState; - const moveResult = board.move({ from: moveFrom, to: moveTo }); + // capture the board state before the move and the move index (0 index) + const fenBefore = board.fen(); + const moveIndex = game.pastStates.length; + const moveResult = board.move({ from: moveFrom, to: moveTo }); if (!moveResult) { throw new Error("Invalid move!"); } - // Save board state + const fenAfter = board.fen(); game.pastStates.push(board.fen()) + const moveUci = moveResult.from + moveResult.to + (moveResult.promotion || ""); + return { boardState: board.fen(), move: moveResult, studentId: game.student.id, - mentorId: game.mentor.id + mentorId: game.mentor.id, + //new fields for LLM below + fenBefore: fenBefore, + fenAfter: fenAfter, + moveIndex: moveIndex, + moveUci: moveUci, + gameId: game.gameId, }; } diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js new file mode 100644 index 00000000..02ea1697 --- /dev/null +++ b/chessServer/src/services/AnalysisService.js @@ -0,0 +1,422 @@ +//AnalysisService.js is the pipeline/orchestrator that runs everything needed to produce an explanation after a move: +// 1) triggers Stockfish analysis +// 2) formats the OpenAI prompt +// 3) calls OpenAI +// 4) caches the result +// 5) emits socket events back to both players + +const { io: ioClient } = require("socket.io-client"); +const cache = require("../utils/cache"); +const openai = require("../config/openai"); // must export an OpenAI client instance +const crypto = require("crypto"); + +// Set this to your real stockfish server URL/port (example: http://localhost:4002) +const STOCKFISH_URL = process.env.STOCKFISH_SERVER_URL || "http://localhost:xxxx"; + +// Connect to stockfishServer +const stockfishSocket = ioClient(STOCKFISH_URL, { + transports: ["websocket"], + reconnection: true, +}); + +// --------------------------- +// Stockfish session management +// --------------------------- + +// We need to know when the chessServer->stockfishServer session exists. +// We'll resolve a promise when we see "session-started". +let stockfishSessionReady = false; +let resolveReady = null; + +function makeReadyPromise() +{ + return new Promise((resolve) => + { + resolveReady = resolve; + }); +} + +let readyPromise = makeReadyPromise(); + +// Simple queue so we don't overlap evaluations on a single stockfish session. +// (Your stockfishServer uses session.awaitingResponse, so overlapping requests will conflict.) +let stockfishQueue = Promise.resolve(); + +stockfishSocket.on("connect", () => +{ + console.log("[AnalysisService] Connected to stockfishServer:", STOCKFISH_URL); + + // Start a dedicated analysis session for chessServer -> stockfishServer. + // This REQUIRES your stockfishServer to accept infoMode in start-session and pass it through. + // If you haven't made that change yet, it will still work, but you won't get info output. + stockfishSocket.emit("start-session", { + sessionType: "analysis", + fen: null, + infoMode: true, + }); +}); + +stockfishSocket.on("session-started", (data) => +{ + stockfishSessionReady = true; + console.log("[AnalysisService] Stockfish session started:", data?.id); + + if (resolveReady) + { + resolveReady(); + } +}); + +stockfishSocket.on("disconnect", () => +{ + console.log("[AnalysisService] Disconnected from stockfishServer"); + stockfishSessionReady = false; + + // Recreate the promise so callers will wait again until next session-started. + readyPromise = makeReadyPromise(); +}); + +function ensureStockfishSession() +{ + if (stockfishSessionReady) + { + return Promise.resolve(); + } + return readyPromise; +} + +// --------------------------- +// Helpers +// --------------------------- + +function computeMoveUci(moveResult) +{ + // moveResult comes from chess.js + // Example: "e7e8q" for promotion + return moveResult.from + moveResult.to + (moveResult.promotion || ""); +} + +function getCacheKey(fenAfter, moveUci, analysisSettings) +{ + // Note: your current stockfishServer only supports "depth" via "level". + // We still include movetime/multipv in the cache key so future upgrades don't collide. + const depth = analysisSettings?.depth ?? 15; + const movetime = analysisSettings?.movetime ?? 2000; + const multipv = analysisSettings?.multipv ?? 1; + + return `analysis:v1:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}`; +} + +function emitToBoth(io, studentSocketId, mentorSocketId, eventName, payload) +{ + io.to(studentSocketId).to(mentorSocketId).emit(eventName, payload); +} + +function parseInfoOutput(outputLines) +{ + // Parses stockfish "info ..." lines and "bestmove ..." line. + // Returns a compact object you can feed into your prompt. + let bestMove = null; + let lastScoreCp = null; + let lastMate = null; + let lastPv = null; + + for (const line of outputLines) + { + if (typeof line !== "string") continue; + + if (line.startsWith("bestmove")) + { + // "bestmove e2e4 ponder ..." + bestMove = line.split(/\s+/)[1] || null; + continue; + } + + if (!line.startsWith("info ")) continue; + + // score cp/mate + // examples: "info ... score cp 23 ..." or "info ... score mate 3 ..." + const scoreIdx = line.indexOf(" score "); + if (scoreIdx !== -1) + { + const tokens = line.slice(scoreIdx).trim().split(/\s+/); // ["score","cp","23",...] + const scoreType = tokens[1]; + const scoreVal = tokens[2]; + + if (scoreType === "cp") + { + const n = Number(scoreVal); + if (!Number.isNaN(n)) + { + lastScoreCp = n; + lastMate = null; + } + } + else if (scoreType === "mate") + { + const n = Number(scoreVal); + if (!Number.isNaN(n)) + { + lastMate = n; + lastScoreCp = null; + } + } + } + + // PV + const pvIdx = line.indexOf(" pv "); + if (pvIdx !== -1) + { + lastPv = line.slice(pvIdx + 4).trim(); // everything after " pv " + } + } + + return { + bestMove, + evalCp: lastScoreCp, // null if mate + mateIn: lastMate, // null if cp + pv: lastPv, + raw: outputLines, + }; +} + +function buildPromptFromDoc({ + fenBefore, + fenAfter, + moveUci, + moveIndex, + san, + turn, + lastMoves, + legalMoves, + stockfish, +}) +{ + // This mirrors your Google Doc structure. + // It’s OK if some values are not provided yet—keep fields explicit to avoid hallucinations. + + return [ + "You are a chess coach. Explain the move in a clear, conversational, BIG-PICTURE way.", + "Do NOT invent moves, evaluations, or tactics. If data is missing, say it's not provided.", + "", + "BOARD STATE", + `- FEN before: ${fenBefore}`, + `- FEN after: ${fenAfter}`, + "", + "MOVE + CONTEXT", + `- Move index: ${moveIndex}`, + `- Played move (UCI): ${moveUci}`, + san ? `- Played move (SAN): ${san}` : "- Played move (SAN): (not provided)", + turn ? `- Side to move before: ${turn}` : "- Side to move before: (not provided)", + Array.isArray(lastMoves) && lastMoves.length + ? `- Last moves (context): ${lastMoves.join(" ")}` + : "- Last moves (context): (not provided)", + "", + "LEGAL MOVES / CANDIDATES", + Array.isArray(legalMoves) && legalMoves.length + ? `- Legal moves (or candidates): ${legalMoves.join(", ")}` + : "- Legal moves (or candidates): (not provided)", + "", + "STOCKFISH INFO", + stockfish?.bestMove ? `- bestMove: ${stockfish.bestMove}` : "- bestMove: (not provided)", + stockfish?.evalCp != null ? `- evalAfter (cp): ${stockfish.evalCp}` : "- evalAfter (cp): (not provided)", + stockfish?.mateIn != null ? `- mateIn: ${stockfish.mateIn}` : "- mateIn: (not provided)", + stockfish?.pv ? `- pvForBest: ${stockfish.pv}` : "- pvForBest: (not provided)", + "", + "INSTRUCTIONS TO EXPLAIN", + "- Explain why this move is significant.", + "- Identify if it’s a good move or a mistake, and why.", + "- Mention what better moves/plans were available if applicable (use bestMove + PV if available).", + "- Keep it high level (king safety, development, initiative, tactics themes) — do not list every piece.", + "", + "OUTPUT FORMAT", + "- Return 2–5 sentences. Broad explanation, not a deep line-by-line calculation.", + ].join("\n"); +} + +// --------------------------- +// Stockfish + OpenAI calls +// --------------------------- + +async function getStockfishAnalysis(fenAfter, analysisSettings) +{ + await ensureStockfishSession(); + + // Serialize evaluations through the queue + stockfishQueue = stockfishQueue.then(() => + { + return new Promise((resolve, reject) => + { + const depth = analysisSettings?.depth ?? 15; + + const timeoutMs = 8000; + const timeout = setTimeout(() => + { + cleanup(); + reject(new Error("Stockfish analysis timed out")); + }, timeoutMs); + + function cleanup() + { + clearTimeout(timeout); + stockfishSocket.off("evaluation-complete", onComplete); + stockfishSocket.off("evaluation-error", onError); + } + + function onError(err) + { + cleanup(); + reject(new Error(err?.error || "Stockfish evaluation error")); + } + + function onComplete(data) + { + cleanup(); + + if (!data) + { + return reject(new Error("Stockfish returned empty response")); + } + + // If infoMode works, you get: { mode:"info", output:[...] } + if (data.mode === "info" && Array.isArray(data.output)) + { + return resolve(parseInfoOutput(data.output)); + } + + // If infoMode is not enabled yet, you get: { mode:"move", move, newFEN, ... } + if (data.mode === "move") + { + return resolve({ + bestMove: data.move || null, + evalCp: null, + mateIn: null, + pv: null, + raw: [JSON.stringify(data)], + }); + } + + return reject(new Error(`Unexpected stockfish response mode: ${data.mode}`)); + } + + stockfishSocket.on("evaluation-complete", onComplete); + stockfishSocket.on("evaluation-error", onError); + + // MUST match your stockfishServer API: { fen, move, level } + stockfishSocket.emit("evaluate-fen", { + fen: fenAfter, + move: "", + level: depth, + }); + }); + }); + + return stockfishQueue; +} + +async function callOpenAI(stockfishFacts, moveContext) +{ + const prompt = buildPromptFromDoc({ + fenBefore: moveContext.fenBefore, + fenAfter: moveContext.fenAfter, + moveUci: moveContext.moveUci, + moveIndex: moveContext.moveIndex, + san: moveContext.san, + turn: moveContext.turn, + lastMoves: moveContext.lastMoves, + legalMoves: moveContext.legalMoves, + stockfish: stockfishFacts, + }); + + const resp = await openai.chat.completions.create({ + model: process.env.OPENAI_MODEL || "gpt-4o", + messages: [ + { role: "system", content: "Follow the user instructions exactly." }, + { role: "user", content: prompt }, + ], + temperature: 0.2, + }); + + return resp.choices?.[0]?.message?.content ?? ""; +} + +// --------------------------- +// Main entry point +// --------------------------- + +async function analyzeMove( + gameId, + fenBefore, + fenAfter, + moveUci, + moveIndex, + analysisSettings, + io, + studentSocketId, + mentorSocketId +) +{ + const cacheKey = getCacheKey(fenAfter, moveUci, analysisSettings); + + // Cache hit + if (cache.has(cacheKey)) + { + const cached = cache.get(cacheKey); + emitToBoth(io, studentSocketId, mentorSocketId, "move-explanation", { + gameId, + moveIndex, + moveUci, + explanation: cached, + cached: true, + }); + return; + } + + // Cache miss: notify UI immediately + emitToBoth(io, studentSocketId, mentorSocketId, "analysis-started", { + gameId, + moveIndex, + moveUci, + }); + + // 1) Stockfish analysis (currently based on fenAfter) + const stockfishFacts = await getStockfishAnalysis(fenAfter, analysisSettings); + + // 2) Build context for LLM (fill in extras later when you wire them up) + const moveContext = { + gameId, + moveIndex, + fenBefore, + fenAfter, + moveUci, + + // OPTIONAL (wire these in later; leaving them null/empty prevents hallucination) + san: null, + turn: null, + lastMoves: [], + legalMoves: [], + }; + + // 3) OpenAI call + const explanation = await callOpenAI(stockfishFacts, moveContext); + + // 4) Cache result (24h) + cache.set(cacheKey, explanation, 60 * 60 * 24); + + // 5) Emit result to both clients + emitToBoth(io, studentSocketId, mentorSocketId, "move-explanation", { + gameId, + moveIndex, + moveUci, + explanation, + cached: false, + }); +} + +module.exports = { + analyzeMove, + getStockfishAnalysis, + callOpenAI, + getCacheKey, + computeMoveUci, +}; diff --git a/chessServer/src/utils/cache.js b/chessServer/src/utils/cache.js new file mode 100644 index 00000000..0417c2cb --- /dev/null +++ b/chessServer/src/utils/cache.js @@ -0,0 +1,30 @@ +//Responsibility: Simple caching layer --> avoid calling the LLM again for the exact same “input” when you already have the answer +//this is important because the LLM is expensive and we want to avoid calling it unnecessarily (user switches tabs) + +//get(key), set(key, value, ttl), has(key) +//Cache key format: analysis:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv} +//Includes analysis settings to ensure cache matches analysis parameters + + +//Caching Strategy +//Cache Key Format:analysis:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}Rationale: + +//Uses fenAfter:moveUci for cache reuse across games (same position + move) +//Includes analysis settings (depth, movetime, multipv) to ensure cache matches analysis parameters +//Different settings produce different cache entries (e.g., depth 10 vs depth 20) +//TTL: 24 hours (or per Google Doc requirements)Cache Storage: Start with in-memory Map, upgrade to Redis if needed for production. + + +const cache = new Map(); + +export const get = (key) => { + return cache.get(key); +}; + +export const set = (key, value, ttl) => { + cache.set(key, value, ttl); +}; + +export const has = (key) => { + return cache.has(key); +}; \ No newline at end of file diff --git a/stockfishServer/src/managers/socket.js b/stockfishServer/src/managers/socket.js index ebb76e18..12a90f1f 100644 --- a/stockfishServer/src/managers/socket.js +++ b/stockfishServer/src/managers/socket.js @@ -8,10 +8,13 @@ const stockfishManager = new StockfishManager(); */ const initializeSocket = (io, socket) => { // Start a new Stockfish session for the client - socket.on("start-session", ({ sessionType, fen }) => { + socket.on("start-session", ({ sessionType, fen, infoMode = false }) => { try { - stockfishManager.registerSession(socket, sessionType, fen); - socket.emit("session-started", { success: true, id: socket.id }); + // Pass infoMode through to StockfishManager.registerSession(...) + stockfishManager.registerSession(socket, sessionType, fen, infoMode); + + // Optional: include infoMode in the success payload for debugging + socket.emit("session-started", { success: true, id: socket.id, infoMode }); } catch (err) { socket.emit("session-error", { error: err.message }); } From ce7344dc4a169e5a1f5c0d788f72c9724554dc9c Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Sun, 21 Dec 2025 18:05:51 -0500 Subject: [PATCH 02/20] Add OpenAI config + analysis endpoint + caching utils --- chessServer/src/config/openai.js | 81 +++++-- chessServer/src/index.js | 59 +++++ chessServer/src/services/AnalysisService.js | 255 +++++++++++++++++++- chessServer/src/utils/cache.js | 105 ++++++-- 4 files changed, 455 insertions(+), 45 deletions(-) diff --git a/chessServer/src/config/openai.js b/chessServer/src/config/openai.js index a174ba1e..3ae3f16d 100644 --- a/chessServer/src/config/openai.js +++ b/chessServer/src/config/openai.js @@ -2,28 +2,79 @@ // Responsibility: OpenAI client configuration // - Loads OPENAI_API_KEY from environment // - Exports configured OpenAI client +// - Supports mock mode for development -//in .env set LLM_MODE=mock -//or -//in docker environment: -// - LLM_MODE=mock - -import OpenAI from "openai"; +const OpenAI = require("openai"); const mode = (process.env.LLM_MODE || "openai").toLowerCase(); // "openai" | "mock" -function hasOpenAIKey() -{ +function hasOpenAIKey() { const key = process.env.OPENAI_API_KEY; return !!(key && key.trim()); } -// Export either a real client or null. -// (Do NOT throw at import time, so dev can run without a key.) -export const openai = - mode === "openai" && hasOpenAIKey() - ? new OpenAI({ apiKey: process.env.OPENAI_API_KEY }) - : null; +// Lazy initialization - client is created when first needed +let _client = null; + +/** + * Get or create the OpenAI client instance + * @returns {OpenAI|null} - OpenAI client or null if not configured + */ +function getClient() { + // If already initialized, return it + if (_client !== null) { + return _client; + } + + // Initialize based on mode + if (mode === "openai" && hasOpenAIKey()) { + _client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); + console.log("[OpenAI] Client initialized successfully"); + return _client; + } + + // Mock mode or no key + if (mode === "mock") { + console.log("[OpenAI] Running in MOCK mode - LLM calls will return mock responses"); + _client = { + chat: { + completions: { + create: async (params) => { + // Mock response + return { + choices: [{ + message: { + content: `[MOCK] Explanation for move: ${JSON.stringify(params.messages[1]?.content?.substring(0, 50))}...` + } + }] + }; + } + } + } + }; + return _client; + } + + // No key and not in mock mode + console.warn("[OpenAI] No API key found and not in mock mode. LLM calls will fail."); + _client = null; + return null; +} -export const llmMode = mode; +/** + * Check if OpenAI is properly configured + * @returns {boolean} - True if client can be used + */ +function isConfigured() { + return getClient() !== null; +} +module.exports = { + getClient, + isConfigured, + llmMode: mode, + // For backward compatibility, export a getter that returns the client + get openai() { + return getClient(); + } +}; \ No newline at end of file diff --git a/chessServer/src/index.js b/chessServer/src/index.js index 7ba30412..b397f121 100644 --- a/chessServer/src/index.js +++ b/chessServer/src/index.js @@ -6,6 +6,7 @@ const socketIo = require("socket.io"); const cors = require("cors"); const morgan = require("morgan"); const registerSocketHandlers = require("./managers/EventHandlers"); +const analysisService = require("./services/AnalysisService"); const app = express(); const server = http.createServer(app); @@ -13,6 +14,9 @@ const server = http.createServer(app); // Add logging functionaility to the server app.use(morgan("dev")) // dev -> preset format +// Parse JSON bodies +app.use(express.json()); + // Apply CORS middleware to handle cross-origin requests app.use(cors({ origin: "*", @@ -34,6 +38,61 @@ io.on("connection", (socket) => { registerSocketHandlers(socket, io); }); + + +// REST API endpoint for analysis requests +app.post("/api/analyze", async (req, res) => { + try { + const { type, ...data } = req.body; + + if (type === "move") { + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: data.fen_before, + fen_after: data.fen_after, + move: data.move, + uciHistory: data.uciHistory, + depth: data.depth || 12, + chatHistory: data.chatHistory || [], + }); + + return res.json({ + success: true, + type: "move", + explanation: result.explanation, + cached: result.cached, + }); + } + + if (type === "question") { + const result = await analysisService.answerQuestion({ + fen: data.fen, + question: data.question, + chatHistory: data.chatHistory || [], + }); + + return res.json({ + success: true, + type: "question", + answer: result.answer, + cached: result.cached, + }); + } + + return res.status(400).json({ + success: false, + error: `Unknown request type: ${type}. Expected 'move' or 'question'`, + }); + } catch (error) { + console.error("[API] Analysis error:", error); + return res.status(500).json({ + success: false, + error: error.message || "Internal server error", + }); + } +}); + + + // Start the server and listen on the defined port const PORT = process.env.PORT || 4000; server.listen(PORT, () => { diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index 02ea1697..e3ae787d 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -316,6 +316,12 @@ async function getStockfishAnalysis(fenAfter, analysisSettings) async function callOpenAI(stockfishFacts, moveContext) { + const client = openai.getClient ? openai.getClient() : openai; + + if (!client) { + throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); + } + const prompt = buildPromptFromDoc({ fenBefore: moveContext.fenBefore, fenAfter: moveContext.fenAfter, @@ -328,7 +334,7 @@ async function callOpenAI(stockfishFacts, moveContext) stockfish: stockfishFacts, }); - const resp = await openai.chat.completions.create({ + const resp = await client.chat.completions.create({ model: process.env.OPENAI_MODEL || "gpt-4o", messages: [ { role: "system", content: "Follow the user instructions exactly." }, @@ -413,10 +419,243 @@ async function analyzeMove( }); } -module.exports = { - analyzeMove, - getStockfishAnalysis, - callOpenAI, - getCacheKey, - computeMoveUci, -}; + +/** + * Analyze a move with chat history context + * @param {Object} params - Move analysis parameters + * @param {string} params.fen_before - FEN before move + * @param {string} params.fen_after - FEN after move + * @param {string} params.move - UCI move (e.g., "g1f3") + * @param {string} params.uciHistory - Space-separated UCI moves + * @param {number} params.depth - Stockfish depth + * @param {Array} params.chatHistory - Previous chat messages + * @returns {Promise<{explanation: string, cached: boolean}>} + */ +async function analyzeMoveWithHistory({ + fen_before, + fen_after, + move, + uciHistory, + depth = 12, + chatHistory = [], + }) { + const analysisSettings = { depth, movetime: 2000, multipv: 1 }; + const cacheKey = getCacheKey(fen_after, move, analysisSettings); + + // Check cache + if (cache.has(cacheKey)) { + return { + explanation: cache.get(cacheKey), + cached: true, + }; + } + + // 1) Stockfish analysis + const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); + + // 2) Parse UCI history into move list + const lastMoves = uciHistory ? uciHistory.trim().split(/\s+/) : []; + + // Extract move index from history length + const moveIndex = lastMoves.length - 1; + + // 3) Build context with chat history + const moveContext = { + fenBefore: fen_before, + fenAfter: fen_after, + moveUci: move, + moveIndex: moveIndex >= 0 ? moveIndex : 0, + lastMoves: lastMoves, + chatHistory: chatHistory, + }; + + // 4) Call OpenAI with chat history + const explanation = await callOpenAIWithHistory( + stockfishFacts, + moveContext, + "move" + ); + + // 5) Cache result + cache.set(cacheKey, explanation, 60 * 60 * 24); + + return { + explanation, + cached: false, + }; + } + + /** + * Answer a chess-related question + * @param {Object} params - Question parameters + * @param {string} params.fen - Current FEN position + * @param {string} params.question - User's question + * @param {Array} params.chatHistory - Previous chat messages + * @returns {Promise<{answer: string, cached: boolean}>} + */ + async function answerQuestion({ + fen, + question, + chatHistory = [], + }) { + // Cache key for questions (different from move analysis) + const questionCacheKey = `question:v1:${fen}:${question}`; + + // Check cache + if (cache.has(questionCacheKey)) { + return { + answer: cache.get(questionCacheKey), + cached: true, + }; + } + + // Optional: Get Stockfish analysis for current position (for context) + let stockfishFacts = null; + try { + stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); + } catch (err) { + console.warn("[AnalysisService] Stockfish analysis failed for question, continuing without it:", err.message); + } + + // Build context + const questionContext = { + fen, + question, + chatHistory, + stockfish: stockfishFacts, + }; + + // Call OpenAI + const answer = await callOpenAIWithHistory( + stockfishFacts, + questionContext, + "question" + ); + + // Cache result + cache.set(questionCacheKey, answer, 60 * 60 * 24); + + return { + answer, + cached: false, + }; + } + + /** + * Call OpenAI with chat history support + * @param {Object} stockfishFacts - Stockfish analysis results + * @param {Object} context - Move or question context + * @param {string} mode - "move" or "question" + * @returns {Promise} + */ + async function callOpenAIWithHistory(stockfishFacts, context, mode) { + const client = openai.getClient ? openai.getClient() : openai; + + if (!client) { + throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); + } + + // Build messages array with chat history + const messages = [ + { + role: "system", + content: mode === "move" + ? "You are a chess coach. Explain moves clearly and conversationally. Use chat history for context." + : "You are a chess coach. Answer questions about chess rules, strategy, and the current position. Be clear and educational.", + }, + ]; + + // Add chat history (convert to OpenAI message format) + if (Array.isArray(context.chatHistory) && context.chatHistory.length > 0) { + for (const msg of context.chatHistory) { + // Map roles: 'move' -> 'user', 'assistant' -> 'assistant', 'user' -> 'user' + let role = msg.role; + if (msg.role === "move") { + role = "user"; + } + + if (role === "user" || role === "assistant") { + messages.push({ + role: role, + content: msg.content, + }); + } + } + } + + // Build the current prompt + let userPrompt; + if (mode === "move") { + userPrompt = buildPromptFromDoc({ + fenBefore: context.fenBefore, + fenAfter: context.fenAfter, + moveUci: context.moveUci, + moveIndex: context.moveIndex, + san: null, + turn: null, + lastMoves: context.lastMoves || [], + legalMoves: [], + stockfish: stockfishFacts, + }); + } else { + // Question mode + userPrompt = buildQuestionPrompt({ + fen: context.fen, + question: context.question, + stockfish: stockfishFacts, + }); + } + + // Add current user message + messages.push({ + role: "user", + content: userPrompt, + }); + + const resp = await client.chat.completions.create({ + model: process.env.OPENAI_MODEL || "gpt-4o", + messages: messages, + temperature: 0.2, + }); + + return resp.choices?.[0]?.message?.content ?? ""; + } + + /** + * Build prompt for question answering + * @param {Object} params + * @returns {string} + */ + function buildQuestionPrompt({ fen, question, stockfish }) { + return [ + "You are a chess coach answering a student's question.", + "", + "CURRENT POSITION", + `- FEN: ${fen}`, + "", + stockfish?.bestMove ? `- Best move: ${stockfish.bestMove}` : "", + stockfish?.evalCp != null ? `- Evaluation: ${stockfish.evalCp} centipawns` : "", + stockfish?.mateIn != null ? `- Mate in: ${stockfish.mateIn} moves` : "", + "", + "STUDENT'S QUESTION", + question, + "", + "INSTRUCTIONS", + "- Answer the question clearly and helpfully.", + "- Reference the current position if relevant.", + "- If the question is about rules, explain the rule clearly.", + "- If the question is about strategy, provide strategic insights.", + "- Keep your answer concise (2-4 sentences unless more detail is needed).", + ].filter(line => line !== "").join("\n"); + } + + module.exports = { + analyzeMove, + analyzeMoveWithHistory, + answerQuestion, + getStockfishAnalysis, + callOpenAI, + callOpenAIWithHistory, + getCacheKey, + computeMoveUci, + }; \ No newline at end of file diff --git a/chessServer/src/utils/cache.js b/chessServer/src/utils/cache.js index 0417c2cb..a71cb699 100644 --- a/chessServer/src/utils/cache.js +++ b/chessServer/src/utils/cache.js @@ -1,30 +1,91 @@ -//Responsibility: Simple caching layer --> avoid calling the LLM again for the exact same “input” when you already have the answer -//this is important because the LLM is expensive and we want to avoid calling it unnecessarily (user switches tabs) +// chessServer/src/utils/cache.js +// Responsibility: Simple caching layer with TTL support +// Cache key format: analysis:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv} -//get(key), set(key, value, ttl), has(key) -//Cache key format: analysis:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv} -//Includes analysis settings to ensure cache matches analysis parameters +const cache = new Map(); // Stores: { value, expiresAt } +/** + * Get a value from cache if it exists and hasn't expired + * @param {string} key - Cache key + * @returns {any|null} - Cached value or null if not found/expired + */ +function get(key) { + const entry = cache.get(key); + + if (!entry) { + return null; + } + + // Check if expired + if (Date.now() > entry.expiresAt) { + cache.delete(key); // Clean up expired entry + return null; + } + + return entry.value; +} -//Caching Strategy -//Cache Key Format:analysis:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}Rationale: +/** + * Set a value in cache with TTL + * @param {string} key - Cache key + * @param {any} value - Value to cache + * @param {number} ttlSeconds - Time to live in seconds (default: 24 hours) + */ +function set(key, value, ttlSeconds = 86400) { + const expiresAt = Date.now() + (ttlSeconds * 1000); + cache.set(key, { value, expiresAt }); +} -//Uses fenAfter:moveUci for cache reuse across games (same position + move) -//Includes analysis settings (depth, movetime, multipv) to ensure cache matches analysis parameters -//Different settings produce different cache entries (e.g., depth 10 vs depth 20) -//TTL: 24 hours (or per Google Doc requirements)Cache Storage: Start with in-memory Map, upgrade to Redis if needed for production. +/** + * Check if a key exists in cache and hasn't expired + * @param {string} key - Cache key + * @returns {boolean} - True if key exists and is not expired + */ +function has(key) { + const entry = cache.get(key); + + if (!entry) { + return false; + } + + // Check if expired + if (Date.now() > entry.expiresAt) { + cache.delete(key); // Clean up expired entry + return false; + } + + return true; +} +/** + * Clear all cache entries + */ +function clear() { + cache.clear(); +} -const cache = new Map(); +/** + * Remove expired entries (cleanup function, can be called periodically) + * @returns {number} - Number of entries removed + */ +function cleanup() { + const now = Date.now(); + let removed = 0; + + for (const [key, entry] of cache.entries()) { + if (now > entry.expiresAt) { + cache.delete(key); + removed++; + } + } + + return removed; +} -export const get = (key) => { - return cache.get(key); -}; - -export const set = (key, value, ttl) => { - cache.set(key, value, ttl); -}; - -export const has = (key) => { - return cache.has(key); +module.exports = { + get, + set, + has, + clear, + cleanup, }; \ No newline at end of file From 040f40a45c388f87759276b0822774cbeb47e0c0 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 22 Dec 2025 10:31:50 -0500 Subject: [PATCH 03/20] made code easier to understand --- chessServer/src/services/AnalysisService.js | 750 ++++++++++---------- 1 file changed, 391 insertions(+), 359 deletions(-) diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index e3ae787d..cffbf494 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -1,17 +1,32 @@ -//AnalysisService.js is the pipeline/orchestrator that runs everything needed to produce an explanation after a move: -// 1) triggers Stockfish analysis -// 2) formats the OpenAI prompt -// 3) calls OpenAI -// 4) caches the result -// 5) emits socket events back to both players +/** + * AnalysisService.js + * + * Orchestrates the complete analysis pipeline: + * 1) Triggers Stockfish analysis + * 2) Formats OpenAI prompts + * 3) Calls OpenAI API + * 4) Caches results + * 5) Emits socket events back to players + * + * Supports two modes: + * - Move analysis (with/without chat history) + * - Question answering + */ + +// ============================================================================ +// IMPORTS & CONFIGURATION +// ============================================================================ const { io: ioClient } = require("socket.io-client"); const cache = require("../utils/cache"); -const openai = require("../config/openai"); // must export an OpenAI client instance +const openai = require("../config/openai"); const crypto = require("crypto"); -// Set this to your real stockfish server URL/port (example: http://localhost:4002) -const STOCKFISH_URL = process.env.STOCKFISH_SERVER_URL || "http://localhost:xxxx"; +const STOCKFISH_URL = process.env.STOCKFISH_SERVER_URL || "http://localhost:4002"; + +// ============================================================================ +// STOCKFISH SESSION MANAGEMENT +// ============================================================================ // Connect to stockfishServer const stockfishSocket = ioClient(STOCKFISH_URL, { @@ -19,36 +34,37 @@ const stockfishSocket = ioClient(STOCKFISH_URL, { reconnection: true, }); -// --------------------------- -// Stockfish session management -// --------------------------- - -// We need to know when the chessServer->stockfishServer session exists. -// We'll resolve a promise when we see "session-started". +// Session state management let stockfishSessionReady = false; let resolveReady = null; +let stockfishQueue = Promise.resolve(); // Queue to prevent overlapping evaluations -function makeReadyPromise() -{ - return new Promise((resolve) => - { +/** + * Creates a promise that resolves when Stockfish session is ready + */ +function makeReadyPromise() { + return new Promise((resolve) => { resolveReady = resolve; }); } let readyPromise = makeReadyPromise(); -// Simple queue so we don't overlap evaluations on a single stockfish session. -// (Your stockfishServer uses session.awaitingResponse, so overlapping requests will conflict.) -let stockfishQueue = Promise.resolve(); +/** + * Ensures Stockfish session is ready before proceeding + * @returns {Promise} + */ +function ensureStockfishSession() { + if (stockfishSessionReady) { + return Promise.resolve(); + } + return readyPromise; +} -stockfishSocket.on("connect", () => -{ +// Socket event handlers +stockfishSocket.on("connect", () => { console.log("[AnalysisService] Connected to stockfishServer:", STOCKFISH_URL); - - // Start a dedicated analysis session for chessServer -> stockfishServer. - // This REQUIRES your stockfishServer to accept infoMode in start-session and pass it through. - // If you haven't made that change yet, it will still work, but you won't get info output. + stockfishSocket.emit("start-session", { sessionType: "analysis", fen: null, @@ -56,130 +72,130 @@ stockfishSocket.on("connect", () => }); }); -stockfishSocket.on("session-started", (data) => -{ +stockfishSocket.on("session-started", (data) => { stockfishSessionReady = true; console.log("[AnalysisService] Stockfish session started:", data?.id); - - if (resolveReady) - { + + if (resolveReady) { resolveReady(); } }); -stockfishSocket.on("disconnect", () => -{ +stockfishSocket.on("disconnect", () => { console.log("[AnalysisService] Disconnected from stockfishServer"); stockfishSessionReady = false; - - // Recreate the promise so callers will wait again until next session-started. readyPromise = makeReadyPromise(); }); -function ensureStockfishSession() -{ - if (stockfishSessionReady) - { - return Promise.resolve(); - } - return readyPromise; -} +// ============================================================================ +// UTILITY FUNCTIONS +// ============================================================================ -// --------------------------- -// Helpers -// --------------------------- - -function computeMoveUci(moveResult) -{ - // moveResult comes from chess.js - // Example: "e7e8q" for promotion +/** + * Computes UCI move notation from chess.js move result + * @param {Object} moveResult - chess.js move object + * @returns {string} UCI notation (e.g., "e7e8q" for promotion) + */ +function computeMoveUci(moveResult) { return moveResult.from + moveResult.to + (moveResult.promotion || ""); } -function getCacheKey(fenAfter, moveUci, analysisSettings) -{ - // Note: your current stockfishServer only supports "depth" via "level". - // We still include movetime/multipv in the cache key so future upgrades don't collide. +/** + * Generates cache key for move analysis + * @param {string} fenAfter - FEN after move + * @param {string} moveUci - UCI move notation + * @param {Object} analysisSettings - Analysis parameters + * @returns {string} Cache key + */ +function getCacheKey(fenAfter, moveUci, analysisSettings) { const depth = analysisSettings?.depth ?? 15; const movetime = analysisSettings?.movetime ?? 2000; const multipv = analysisSettings?.multipv ?? 1; - + return `analysis:v1:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}`; } -function emitToBoth(io, studentSocketId, mentorSocketId, eventName, payload) -{ +/** + * Emits socket event to both student and mentor + * @param {Object} io - Socket.IO server instance + * @param {string} studentSocketId - Student socket ID + * @param {string} mentorSocketId - Mentor socket ID + * @param {string} eventName - Event name + * @param {Object} payload - Event payload + */ +function emitToBoth(io, studentSocketId, mentorSocketId, eventName, payload) { io.to(studentSocketId).to(mentorSocketId).emit(eventName, payload); } -function parseInfoOutput(outputLines) -{ - // Parses stockfish "info ..." lines and "bestmove ..." line. - // Returns a compact object you can feed into your prompt. +/** + * Parses Stockfish info output into structured data + * @param {Array} outputLines - Raw Stockfish output lines + * @returns {Object} Parsed Stockfish facts + */ +function parseInfoOutput(outputLines) { let bestMove = null; let lastScoreCp = null; let lastMate = null; let lastPv = null; - for (const line of outputLines) - { + for (const line of outputLines) { if (typeof line !== "string") continue; - if (line.startsWith("bestmove")) - { - // "bestmove e2e4 ponder ..." + // Extract best move + if (line.startsWith("bestmove")) { bestMove = line.split(/\s+/)[1] || null; continue; } if (!line.startsWith("info ")) continue; - // score cp/mate - // examples: "info ... score cp 23 ..." or "info ... score mate 3 ..." + // Extract score (cp or mate) const scoreIdx = line.indexOf(" score "); - if (scoreIdx !== -1) - { - const tokens = line.slice(scoreIdx).trim().split(/\s+/); // ["score","cp","23",...] + if (scoreIdx !== -1) { + const tokens = line.slice(scoreIdx).trim().split(/\s+/); const scoreType = tokens[1]; const scoreVal = tokens[2]; - if (scoreType === "cp") - { + if (scoreType === "cp") { const n = Number(scoreVal); - if (!Number.isNaN(n)) - { + if (!Number.isNaN(n)) { lastScoreCp = n; lastMate = null; } - } - else if (scoreType === "mate") - { + } else if (scoreType === "mate") { const n = Number(scoreVal); - if (!Number.isNaN(n)) - { + if (!Number.isNaN(n)) { lastMate = n; lastScoreCp = null; } } } - // PV + // Extract principal variation (PV) const pvIdx = line.indexOf(" pv "); - if (pvIdx !== -1) - { - lastPv = line.slice(pvIdx + 4).trim(); // everything after " pv " + if (pvIdx !== -1) { + lastPv = line.slice(pvIdx + 4).trim(); } } return { bestMove, - evalCp: lastScoreCp, // null if mate - mateIn: lastMate, // null if cp + evalCp: lastScoreCp, + mateIn: lastMate, pv: lastPv, raw: outputLines, }; } +// ============================================================================ +// PROMPT BUILDING FUNCTIONS +// ============================================================================ + +/** + * Builds prompt for move analysis (per Google Doc contract) + * @param {Object} params - Move context parameters + * @returns {string} Formatted prompt + */ function buildPromptFromDoc({ fenBefore, fenAfter, @@ -190,11 +206,7 @@ function buildPromptFromDoc({ lastMoves, legalMoves, stockfish, -}) -{ - // This mirrors your Google Doc structure. - // It’s OK if some values are not provided yet—keep fields explicit to avoid hallucinations. - +}) { return [ "You are a chess coach. Explain the move in a clear, conversational, BIG-PICTURE way.", "Do NOT invent moves, evaluations, or tactics. If data is missing, say it's not provided.", @@ -225,7 +237,7 @@ function buildPromptFromDoc({ "", "INSTRUCTIONS TO EXPLAIN", "- Explain why this move is significant.", - "- Identify if it’s a good move or a mistake, and why.", + "- Identify if it's a good move or a mistake, and why.", "- Mention what better moves/plans were available if applicable (use bestMove + PV if available).", "- Keep it high level (king safety, development, initiative, tactics themes) — do not list every piece.", "", @@ -234,59 +246,86 @@ function buildPromptFromDoc({ ].join("\n"); } -// --------------------------- -// Stockfish + OpenAI calls -// --------------------------- +/** + * Builds prompt for question answering + * @param {Object} params - Question context + * @param {string} params.fen - Current FEN position + * @param {string} params.question - User's question + * @param {Object} params.stockfish - Stockfish analysis (optional) + * @returns {string} Formatted prompt + */ +function buildQuestionPrompt({ fen, question, stockfish }) { + return [ + "You are a chess coach answering a student's question.", + "", + "CURRENT POSITION", + `- FEN: ${fen}`, + "", + stockfish?.bestMove ? `- Best move: ${stockfish.bestMove}` : "", + stockfish?.evalCp != null ? `- Evaluation: ${stockfish.evalCp} centipawns` : "", + stockfish?.mateIn != null ? `- Mate in: ${stockfish.mateIn} moves` : "", + "", + "STUDENT'S QUESTION", + question, + "", + "INSTRUCTIONS", + "- Answer the question clearly and helpfully.", + "- Reference the current position if relevant.", + "- If the question is about rules, explain the rule clearly.", + "- If the question is about strategy, provide strategic insights.", + "- Keep your answer concise (2-4 sentences unless more detail is needed).", + ].filter(line => line !== "").join("\n"); +} + +// ============================================================================ +// STOCKFISH ANALYSIS +// ============================================================================ -async function getStockfishAnalysis(fenAfter, analysisSettings) -{ +/** + * Gets Stockfish analysis for a position + * @param {string} fenAfter - FEN position to analyze + * @param {Object} analysisSettings - Analysis parameters (depth, movetime, multipv) + * @returns {Promise} Stockfish facts object + */ +async function getStockfishAnalysis(fenAfter, analysisSettings) { await ensureStockfishSession(); - // Serialize evaluations through the queue - stockfishQueue = stockfishQueue.then(() => - { - return new Promise((resolve, reject) => - { + // Serialize evaluations through queue to prevent conflicts + stockfishQueue = stockfishQueue.then(() => { + return new Promise((resolve, reject) => { const depth = analysisSettings?.depth ?? 15; - const timeoutMs = 8000; - const timeout = setTimeout(() => - { + + const timeout = setTimeout(() => { cleanup(); reject(new Error("Stockfish analysis timed out")); }, timeoutMs); - function cleanup() - { + function cleanup() { clearTimeout(timeout); stockfishSocket.off("evaluation-complete", onComplete); stockfishSocket.off("evaluation-error", onError); } - function onError(err) - { + function onError(err) { cleanup(); reject(new Error(err?.error || "Stockfish evaluation error")); } - function onComplete(data) - { + function onComplete(data) { cleanup(); - if (!data) - { + if (!data) { return reject(new Error("Stockfish returned empty response")); } - // If infoMode works, you get: { mode:"info", output:[...] } - if (data.mode === "info" && Array.isArray(data.output)) - { + // Handle info mode response + if (data.mode === "info" && Array.isArray(data.output)) { return resolve(parseInfoOutput(data.output)); } - // If infoMode is not enabled yet, you get: { mode:"move", move, newFEN, ... } - if (data.mode === "move") - { + // Handle move mode response (fallback) + if (data.mode === "move") { return resolve({ bestMove: data.move || null, evalCp: null, @@ -302,7 +341,7 @@ async function getStockfishAnalysis(fenAfter, analysisSettings) stockfishSocket.on("evaluation-complete", onComplete); stockfishSocket.on("evaluation-error", onError); - // MUST match your stockfishServer API: { fen, move, level } + // Request analysis from Stockfish server stockfishSocket.emit("evaluate-fen", { fen: fenAfter, move: "", @@ -314,8 +353,17 @@ async function getStockfishAnalysis(fenAfter, analysisSettings) return stockfishQueue; } -async function callOpenAI(stockfishFacts, moveContext) -{ +// ============================================================================ +// OPENAI INTEGRATION +// ============================================================================ + +/** + * Calls OpenAI API for move analysis (without chat history) + * @param {Object} stockfishFacts - Stockfish analysis results + * @param {Object} moveContext - Move context parameters + * @returns {Promise} LLM explanation + */ +async function callOpenAI(stockfishFacts, moveContext) { const client = openai.getClient ? openai.getClient() : openai; if (!client) { @@ -346,10 +394,102 @@ async function callOpenAI(stockfishFacts, moveContext) return resp.choices?.[0]?.message?.content ?? ""; } -// --------------------------- -// Main entry point -// --------------------------- +/** + * Calls OpenAI API with chat history support + * @param {Object} stockfishFacts - Stockfish analysis results + * @param {Object} context - Move or question context (includes chatHistory) + * @param {string} mode - "move" or "question" + * @returns {Promise} LLM response + */ +async function callOpenAIWithHistory(stockfishFacts, context, mode) { + const client = openai.getClient ? openai.getClient() : openai; + + if (!client) { + throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); + } + // Build messages array with system prompt + const messages = [ + { + role: "system", + content: mode === "move" + ? "You are a chess coach. Explain moves clearly and conversationally. Use chat history for context." + : "You are a chess coach. Answer questions about chess rules, strategy, and the current position. Be clear and educational.", + }, + ]; + + // Add chat history (convert to OpenAI message format) + if (Array.isArray(context.chatHistory) && context.chatHistory.length > 0) { + for (const msg of context.chatHistory) { + // Map roles: 'move' -> 'user', 'assistant' -> 'assistant', 'user' -> 'user' + let role = msg.role; + if (msg.role === "move") { + role = "user"; + } + + if (role === "user" || role === "assistant") { + messages.push({ + role: role, + content: msg.content, + }); + } + } + } + + // Build the current prompt based on mode + let userPrompt; + if (mode === "move") { + userPrompt = buildPromptFromDoc({ + fenBefore: context.fenBefore, + fenAfter: context.fenAfter, + moveUci: context.moveUci, + moveIndex: context.moveIndex, + san: null, + turn: null, + lastMoves: context.lastMoves || [], + legalMoves: [], + stockfish: stockfishFacts, + }); + } else { + userPrompt = buildQuestionPrompt({ + fen: context.fen, + question: context.question, + stockfish: stockfishFacts, + }); + } + + // Add current user message + messages.push({ + role: "user", + content: userPrompt, + }); + + const resp = await client.chat.completions.create({ + model: process.env.OPENAI_MODEL || "gpt-4o", + messages: messages, + temperature: 0.2, + }); + + return resp.choices?.[0]?.message?.content ?? ""; +} + +// ============================================================================ +// PUBLIC API FUNCTIONS +// ============================================================================ + +/** + * Analyzes a move and emits explanation via socket (for socket-based games) + * @param {string} gameId - Game identifier + * @param {string} fenBefore - FEN before move + * @param {string} fenAfter - FEN after move + * @param {string} moveUci - UCI move notation + * @param {number} moveIndex - Move index in game + * @param {Object} analysisSettings - Analysis parameters + * @param {Object} io - Socket.IO server instance + * @param {string} studentSocketId - Student socket ID + * @param {string} mentorSocketId - Mentor socket ID + * @returns {Promise} + */ async function analyzeMove( gameId, fenBefore, @@ -360,13 +500,11 @@ async function analyzeMove( io, studentSocketId, mentorSocketId -) -{ +) { const cacheKey = getCacheKey(fenAfter, moveUci, analysisSettings); - // Cache hit - if (cache.has(cacheKey)) - { + // Cache hit: return immediately + if (cache.has(cacheKey)) { const cached = cache.get(cacheKey); emitToBoth(io, studentSocketId, mentorSocketId, "move-explanation", { gameId, @@ -385,25 +523,23 @@ async function analyzeMove( moveUci, }); - // 1) Stockfish analysis (currently based on fenAfter) + // 1) Get Stockfish analysis const stockfishFacts = await getStockfishAnalysis(fenAfter, analysisSettings); - // 2) Build context for LLM (fill in extras later when you wire them up) + // 2) Build move context const moveContext = { gameId, moveIndex, fenBefore, fenAfter, moveUci, - - // OPTIONAL (wire these in later; leaving them null/empty prevents hallucination) san: null, turn: null, lastMoves: [], legalMoves: [], }; - // 3) OpenAI call + // 3) Call OpenAI const explanation = await callOpenAI(stockfishFacts, moveContext); // 4) Cache result (24h) @@ -419,9 +555,8 @@ async function analyzeMove( }); } - /** - * Analyze a move with chat history context + * Analyzes a move with chat history context (for REST API) * @param {Object} params - Move analysis parameters * @param {string} params.fen_before - FEN before move * @param {string} params.fen_after - FEN after move @@ -432,230 +567,127 @@ async function analyzeMove( * @returns {Promise<{explanation: string, cached: boolean}>} */ async function analyzeMoveWithHistory({ - fen_before, - fen_after, - move, - uciHistory, - depth = 12, - chatHistory = [], - }) { - const analysisSettings = { depth, movetime: 2000, multipv: 1 }; - const cacheKey = getCacheKey(fen_after, move, analysisSettings); - - // Check cache - if (cache.has(cacheKey)) { - return { - explanation: cache.get(cacheKey), - cached: true, - }; - } - - // 1) Stockfish analysis - const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); - - // 2) Parse UCI history into move list - const lastMoves = uciHistory ? uciHistory.trim().split(/\s+/) : []; - - // Extract move index from history length - const moveIndex = lastMoves.length - 1; - - // 3) Build context with chat history - const moveContext = { - fenBefore: fen_before, - fenAfter: fen_after, - moveUci: move, - moveIndex: moveIndex >= 0 ? moveIndex : 0, - lastMoves: lastMoves, - chatHistory: chatHistory, - }; - - // 4) Call OpenAI with chat history - const explanation = await callOpenAIWithHistory( - stockfishFacts, - moveContext, - "move" - ); - - // 5) Cache result - cache.set(cacheKey, explanation, 60 * 60 * 24); - + fen_before, + fen_after, + move, + uciHistory, + depth = 12, + chatHistory = [], +}) { + const analysisSettings = { depth, movetime: 2000, multipv: 1 }; + const cacheKey = getCacheKey(fen_after, move, analysisSettings); + + // Check cache + if (cache.has(cacheKey)) { return { - explanation, - cached: false, + explanation: cache.get(cacheKey), + cached: true, }; } - - /** - * Answer a chess-related question - * @param {Object} params - Question parameters - * @param {string} params.fen - Current FEN position - * @param {string} params.question - User's question - * @param {Array} params.chatHistory - Previous chat messages - * @returns {Promise<{answer: string, cached: boolean}>} - */ - async function answerQuestion({ - fen, - question, - chatHistory = [], - }) { - // Cache key for questions (different from move analysis) - const questionCacheKey = `question:v1:${fen}:${question}`; - - // Check cache - if (cache.has(questionCacheKey)) { - return { - answer: cache.get(questionCacheKey), - cached: true, - }; - } - - // Optional: Get Stockfish analysis for current position (for context) - let stockfishFacts = null; - try { - stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); - } catch (err) { - console.warn("[AnalysisService] Stockfish analysis failed for question, continuing without it:", err.message); - } - - // Build context - const questionContext = { - fen, - question, - chatHistory, - stockfish: stockfishFacts, - }; - - // Call OpenAI - const answer = await callOpenAIWithHistory( - stockfishFacts, - questionContext, - "question" - ); - - // Cache result - cache.set(questionCacheKey, answer, 60 * 60 * 24); - + + // 1) Get Stockfish analysis + const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); + + // 2) Parse UCI history into move list + const lastMoves = uciHistory ? uciHistory.trim().split(/\s+/) : []; + const moveIndex = lastMoves.length - 1; + + // 3) Build context with chat history + const moveContext = { + fenBefore: fen_before, + fenAfter: fen_after, + moveUci: move, + moveIndex: moveIndex >= 0 ? moveIndex : 0, + lastMoves: lastMoves, + chatHistory: chatHistory, + }; + + // 4) Call OpenAI with chat history + const explanation = await callOpenAIWithHistory( + stockfishFacts, + moveContext, + "move" + ); + + // 5) Cache result + cache.set(cacheKey, explanation, 60 * 60 * 24); + + return { + explanation, + cached: false, + }; +} + +/** + * Answers a chess-related question + * @param {Object} params - Question parameters + * @param {string} params.fen - Current FEN position + * @param {string} params.question - User's question + * @param {Array} params.chatHistory - Previous chat messages + * @returns {Promise<{answer: string, cached: boolean}>} + */ +async function answerQuestion({ + fen, + question, + chatHistory = [], +}) { + // Cache key for questions (different from move analysis) + const questionCacheKey = `question:v1:${fen}:${question}`; + + // Check cache + if (cache.has(questionCacheKey)) { return { - answer, - cached: false, + answer: cache.get(questionCacheKey), + cached: true, }; } - - /** - * Call OpenAI with chat history support - * @param {Object} stockfishFacts - Stockfish analysis results - * @param {Object} context - Move or question context - * @param {string} mode - "move" or "question" - * @returns {Promise} - */ - async function callOpenAIWithHistory(stockfishFacts, context, mode) { - const client = openai.getClient ? openai.getClient() : openai; - - if (!client) { - throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); - } - - // Build messages array with chat history - const messages = [ - { - role: "system", - content: mode === "move" - ? "You are a chess coach. Explain moves clearly and conversationally. Use chat history for context." - : "You are a chess coach. Answer questions about chess rules, strategy, and the current position. Be clear and educational.", - }, - ]; - - // Add chat history (convert to OpenAI message format) - if (Array.isArray(context.chatHistory) && context.chatHistory.length > 0) { - for (const msg of context.chatHistory) { - // Map roles: 'move' -> 'user', 'assistant' -> 'assistant', 'user' -> 'user' - let role = msg.role; - if (msg.role === "move") { - role = "user"; - } - - if (role === "user" || role === "assistant") { - messages.push({ - role: role, - content: msg.content, - }); - } - } - } - - // Build the current prompt - let userPrompt; - if (mode === "move") { - userPrompt = buildPromptFromDoc({ - fenBefore: context.fenBefore, - fenAfter: context.fenAfter, - moveUci: context.moveUci, - moveIndex: context.moveIndex, - san: null, - turn: null, - lastMoves: context.lastMoves || [], - legalMoves: [], - stockfish: stockfishFacts, - }); - } else { - // Question mode - userPrompt = buildQuestionPrompt({ - fen: context.fen, - question: context.question, - stockfish: stockfishFacts, - }); - } - - // Add current user message - messages.push({ - role: "user", - content: userPrompt, - }); - - const resp = await client.chat.completions.create({ - model: process.env.OPENAI_MODEL || "gpt-4o", - messages: messages, - temperature: 0.2, - }); - - return resp.choices?.[0]?.message?.content ?? ""; - } - - /** - * Build prompt for question answering - * @param {Object} params - * @returns {string} - */ - function buildQuestionPrompt({ fen, question, stockfish }) { - return [ - "You are a chess coach answering a student's question.", - "", - "CURRENT POSITION", - `- FEN: ${fen}`, - "", - stockfish?.bestMove ? `- Best move: ${stockfish.bestMove}` : "", - stockfish?.evalCp != null ? `- Evaluation: ${stockfish.evalCp} centipawns` : "", - stockfish?.mateIn != null ? `- Mate in: ${stockfish.mateIn} moves` : "", - "", - "STUDENT'S QUESTION", - question, - "", - "INSTRUCTIONS", - "- Answer the question clearly and helpfully.", - "- Reference the current position if relevant.", - "- If the question is about rules, explain the rule clearly.", - "- If the question is about strategy, provide strategic insights.", - "- Keep your answer concise (2-4 sentences unless more detail is needed).", - ].filter(line => line !== "").join("\n"); + + // Optional: Get Stockfish analysis for current position (for context) + let stockfishFacts = null; + try { + stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); + } catch (err) { + console.warn("[AnalysisService] Stockfish analysis failed for question, continuing without it:", err.message); } + + // Build context + const questionContext = { + fen, + question, + chatHistory, + stockfish: stockfishFacts, + }; + + // Call OpenAI + const answer = await callOpenAIWithHistory( + stockfishFacts, + questionContext, + "question" + ); + + // Cache result + cache.set(questionCacheKey, answer, 60 * 60 * 24); + + return { + answer, + cached: false, + }; +} + +// ============================================================================ +// MODULE EXPORTS +// ============================================================================ + +module.exports = { + // Public API + analyzeMove, + analyzeMoveWithHistory, + answerQuestion, - module.exports = { - analyzeMove, - analyzeMoveWithHistory, - answerQuestion, - getStockfishAnalysis, - callOpenAI, - callOpenAIWithHistory, - getCacheKey, - computeMoveUci, - }; \ No newline at end of file + // Internal functions (exposed for testing/debugging) + getStockfishAnalysis, + callOpenAI, + callOpenAIWithHistory, + getCacheKey, + computeMoveUci, +}; From 41ceeebd7b7434f9ca8d0660ca2811c5600f159e Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 22 Dec 2025 17:30:31 -0500 Subject: [PATCH 04/20] combined AI-TUTOR Branch --- .gitignore | 1 + chessServer/src/index.js | 1 + chessServer/src/services/AnalysisService.js | 6 + react-ystemandchess/package.json | 1 + react-ystemandchess/src/AppRoutes.tsx | 2 + .../src/components/navbar/NavBar.tsx | 6 + .../src/features/aitutor/Aitutor.tsx | 336 ++++++++++++++++++ 7 files changed, 353 insertions(+) create mode 100644 react-ystemandchess/src/features/aitutor/Aitutor.tsx diff --git a/.gitignore b/.gitignore index 07e1fe56..c0ba8821 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ node_modules #environment react-ystemandchess/environment.prod.ts react-ystemandchess/environment.ts +react-ystemandchess/src/core/environments/ environment.php .env environment.*.local diff --git a/chessServer/src/index.js b/chessServer/src/index.js index b397f121..adda679b 100644 --- a/chessServer/src/index.js +++ b/chessServer/src/index.js @@ -60,6 +60,7 @@ app.post("/api/analyze", async (req, res) => { type: "move", explanation: result.explanation, cached: result.cached, + bestMove: result.bestMove || null, }); } diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index cffbf494..1bfe1e75 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -579,9 +579,14 @@ async function analyzeMoveWithHistory({ // Check cache if (cache.has(cacheKey)) { + // Even on cache hit, we need bestMove for auto-play feature + // Stockfish analysis is fast compared to LLM, so we fetch it anyway + const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); + return { explanation: cache.get(cacheKey), cached: true, + bestMove: stockfishFacts?.bestMove || null, }; } @@ -615,6 +620,7 @@ async function analyzeMoveWithHistory({ return { explanation, cached: false, + bestMove: stockfishFacts?.bestMove || null, }; } diff --git a/react-ystemandchess/package.json b/react-ystemandchess/package.json index a289f8a5..a15cdb4b 100644 --- a/react-ystemandchess/package.json +++ b/react-ystemandchess/package.json @@ -22,6 +22,7 @@ "lucide-react": "^0.469.0", "react": "^18.3.1", "react-chartjs-2": "^5.3.0", + "react-chessboard": "^4.7.3", "react-cookie": "^7.2.2", "react-dom": "^18.3.1", "react-element-to-jsx-string": "^15.0.0", diff --git a/react-ystemandchess/src/AppRoutes.tsx b/react-ystemandchess/src/AppRoutes.tsx index b566c568..333548ef 100644 --- a/react-ystemandchess/src/AppRoutes.tsx +++ b/react-ystemandchess/src/AppRoutes.tsx @@ -53,6 +53,7 @@ import NewStudentProfile from "./features/student/student-profile/NewStudentProf // Static assets and default data import userPortraitImg from "./assets/images/user-portrait-placeholder.svg"; +import AITutor from "./features/aitutor/Aitutor"; /** * Default username for components that require user data @@ -103,6 +104,7 @@ const AppRoutes = () => { } /> } /> } /> + } /> {/* User roles and mentoring */} } /> diff --git a/react-ystemandchess/src/components/navbar/NavBar.tsx b/react-ystemandchess/src/components/navbar/NavBar.tsx index 5fcefce8..5f4f683d 100644 --- a/react-ystemandchess/src/components/navbar/NavBar.tsx +++ b/react-ystemandchess/src/components/navbar/NavBar.tsx @@ -395,6 +395,12 @@ const NavBar = () => { > Mentor + + AI Tutor + { + const chessRef = useRef(new Chess()); + const [fen, setFen] = useState(chessRef.current.fen()); + const [history, setHistory] = useState([]); + const [moves, setMoves] = useState(""); + const [message, setMessage] = useState(""); + + //chat UI + const [chatInput, setChatInput] = useState(""); + const [chatMessages, setChatMessages] = useState([]); + + function historyToUci(moves: Move[]): string { + return moves.map((m) => `${m.from}${m.to}${m.promotion ?? ""}`).join(" "); + } + + async function sendMoveForAnalysis( + fenBefore: string, + fenAfter: string, + moveUci: string, + uciHistory: string + ) { + + + const response = await fetch( + `${environment.urls.chessServer}api/analyze`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: "move", + fen_before: fenBefore, + fen_after: fenAfter, + move: moveUci, + uciHistory, + depth: 12, + chatHistory: chatMessages, + }), + } + ); + + const data = await response.json(); + + if (!data.success) { + console.error("Analysis error:", data.error); + setChatMessages((prev) => [ + ...prev, + { role: "assistant", content: `Error: ${data.error || "Analysis failed"}` }, + ]); + return; + } + + // append LLM explanation to chat + setChatMessages((prev) => [ + ...prev, + { role: "assistant", content: data.explanation }, + ]); + + applyCpuMove(data.bestMove); + } + //helper function + function formatMoveText(color: "w" | "b", from: string, to: string) { + const side = color === "w" ? "White" : "Black"; + return `${side} moved from ${from} to ${to}`; + } + + //send chat function + async function sendChat() { + if (!chatInput.trim()) return; + + const newMessages: ChatMessage[] = [ + ...chatMessages, + { role: "user", content: chatInput }, + ]; + + setChatMessages(newMessages); + + const filteredChatHistory = newMessages.filter((m) => m.role !== "move"); + + setChatInput(""); + + const res = await fetch( + `${environment.urls.chessServer}api/analyze`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: "question", + fen, + question: chatInput, + chatHistory: filteredChatHistory, + }), + } + ); + + const data = await res.json(); + + setChatMessages((prev) => [ + ...prev, + { role: "assistant", content: data.answer }, + ]); + } + + function onDrop(sourceSquare: Square, targetSquare: Square): boolean { + try { + const game = chessRef.current; + const fenBefore = game.fen(); + + const move = game.move({ + from: sourceSquare, + to: targetSquare, + promotion: "q", + }); + + // Add move to chat + setChatMessages((prev) => [ + ...prev, + { + role: "move", + content: formatMoveText(move.color, move.from, move.to), + }, + ]); + + const fenAfter = game.fen(); + const currentMoveUci = `${move.from}${move.to}${move.promotion ?? ""}`; + const newHistory = game.history({ verbose: true }); + const uciMoves = historyToUci(newHistory); + + setFen(game.fen()); + setHistory(newHistory); + setMoves(uciMoves); + + sendMoveForAnalysis(fenBefore, fenAfter, currentMoveUci, uciMoves); + + return true; + } catch { + setMessage("Illegal move ❌"); + return false; + } + } + + function applyCpuMove(uci: string) { + const game = chessRef.current; + + const from = uci.slice(0, 2); + const to = uci.slice(2, 4); + const promotion = uci.length === 5 ? uci[4] : undefined; + + const move = game.move({ from, to, promotion }); + // Add move to chat + setChatMessages((prev) => [ + ...prev, + { + role: "move", + content: formatMoveText(move.color, move.from, move.to), + }, + ]); + + if (!move) { + console.error("Invalid CPU move:", uci); + return; + } + + // Update UI state + const newHistory = game.history({ verbose: true }); + const uciMoves = historyToUci(newHistory); + + setFen(game.fen()); + setHistory(newHistory); + setMoves(uciMoves); +} + + + return ( +
+
+ +
+ +
+
+ AI Tutor +
+
+ {chatMessages.map((m, i) => ( +
+ {m.role === "move" ? ( +
+ ♟ MOVE: {m.content} +
+ ) : ( +
+ {m.content} +
+ )} +
+ ))} +
+ +
+ setChatInput(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && sendChat()} + placeholder="Ask the tutor..." + style={{ + flex: 1, + border: "1px solid #d1d5db", + borderRadius: 10, + padding: "10px 12px", + outline: "none", + background: "#f9fafb", + }} + /> + +
+
+
+ ); +}; + +export default AITutor; From 7f9455d998cb117e30cbdba8d0c6e9ae0526d0a6 Mon Sep 17 00:00:00 2001 From: ujwalakopparthi Date: Wed, 31 Dec 2025 20:25:16 -0500 Subject: [PATCH 05/20] updated chatbox, player to move -> chess server -> stockfish server -> frontend workflow --- chessServer/package-lock.json | 94 ++++++++- chessServer/package.json | 1 + chessServer/src/index.js | 3 +- chessServer/src/services/AnalysisService.js | 148 +++++++++++---- .../src/environments/environment.js | 2 +- .../src/features/aitutor/Aitutor.tsx | 178 +++++++++++++----- stockfishServer/src/index.js | 152 +++++++++++++++ 7 files changed, 491 insertions(+), 87 deletions(-) diff --git a/chessServer/package-lock.json b/chessServer/package-lock.json index f56886b0..9e7aa75a 100644 --- a/chessServer/package-lock.json +++ b/chessServer/package-lock.json @@ -15,6 +15,7 @@ "jest": "^29.7.0", "morgan": "^1.10.0", "nodemon": "^3.1.10", + "openai": "^6.15.0", "socket.io": "^4.7.5", "socket.io-client": "^4.8.0", "supertest": "^7.0.0" @@ -1754,6 +1755,27 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -1791,6 +1813,27 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3544,6 +3587,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openai": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.15.0.tgz", + "integrity": "sha512-F1Lvs5BoVvmZtzkUEVyh8mDQPPFolq4F+xdsx/DO8Hee8YF3IGAlZqUIsF+DVGhqf4aU0a3bTghsxB6OIsRy1g==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -4106,6 +4170,27 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/socket.io-client": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", @@ -4592,9 +4677,12 @@ } }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=10.0.0" }, diff --git a/chessServer/package.json b/chessServer/package.json index 86ebbe29..2b51bfc8 100644 --- a/chessServer/package.json +++ b/chessServer/package.json @@ -17,6 +17,7 @@ "jest": "^29.7.0", "morgan": "^1.10.0", "nodemon": "^3.1.10", + "openai": "^6.15.0", "socket.io": "^4.7.5", "socket.io-client": "^4.8.0", "supertest": "^7.0.0" diff --git a/chessServer/src/index.js b/chessServer/src/index.js index adda679b..cd32fb41 100644 --- a/chessServer/src/index.js +++ b/chessServer/src/index.js @@ -51,8 +51,9 @@ app.post("/api/analyze", async (req, res) => { fen_after: data.fen_after, move: data.move, uciHistory: data.uciHistory, - depth: data.depth || 12, + depth: data.depth || 15, chatHistory: data.chatHistory || [], + multipv : data.multipv || 15 }); return res.json({ diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index 1bfe1e75..d52da78c 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -208,42 +208,76 @@ function buildPromptFromDoc({ stockfish, }) { return [ - "You are a chess coach. Explain the move in a clear, conversational, BIG-PICTURE way.", - "Do NOT invent moves, evaluations, or tactics. If data is missing, say it's not provided.", + "You are a chess ctutor. Explain the move in a clear, conversational, BIG-PICTURE way.", + "Base your assessment of the player's move primarily on the ENGINE CONTEXT provided.", + "Use the engine lines to understand which ideas were stronger or weaker.", + "Do NOT quote, paraphrase, or mention engine evaluations, scores, or rankings.", + "Translate engine insights into human, strategic reasoning only.", "", "BOARD STATE", `- FEN before: ${fenBefore}`, - `- FEN after: ${fenAfter}`, + `Player Move : ${moveUci}`, + `CPU Move : ${stockfish.cpuMove}`, "", - "MOVE + CONTEXT", - `- Move index: ${moveIndex}`, - `- Played move (UCI): ${moveUci}`, - san ? `- Played move (SAN): ${san}` : "- Played move (SAN): (not provided)", - turn ? `- Side to move before: ${turn}` : "- Side to move before: (not provided)", - Array.isArray(lastMoves) && lastMoves.length - ? `- Last moves (context): ${lastMoves.join(" ")}` - : "- Last moves (context): (not provided)", + "ENGINE SUMMARY (PRE-INTERPRETED — TRUST THIS)", + `- Move quality label: ${stockfish.classify}`, "", - "LEGAL MOVES / CANDIDATES", - Array.isArray(legalMoves) && legalMoves.length - ? `- Legal moves (or candidates): ${legalMoves.join(", ")}` - : "- Legal moves (or candidates): (not provided)", + "BEST MOVE CONTEXT (BEFORE PLAYER MOVE)", + "- The following moves represented stronger or weaker strategic ideas:", + ...stockfish.topBestMoves.map( + m => `- ${m.move} → represents a ${m.rank <= 3 ? "strong" : m.rank <= 7 ? "playable" : "inferior"} idea` + ), "", - "STOCKFISH INFO", - stockfish?.bestMove ? `- bestMove: ${stockfish.bestMove}` : "- bestMove: (not provided)", - stockfish?.evalCp != null ? `- evalAfter (cp): ${stockfish.evalCp}` : "- evalAfter (cp): (not provided)", - stockfish?.mateIn != null ? `- mateIn: ${stockfish.mateIn}` : "- mateIn: (not provided)", - stockfish?.pv ? `- pvForBest: ${stockfish.pv}` : "- pvForBest: (not provided)", + "POSITION AFTER PLAYER MOVE", + "- Opponent immediately responded with a principled reply.", + "- The opponent's reply follows this idea:", + ` ${stockfish.cpuPV.split(" ").slice(0, 4).join(" ")} (conceptual reference only)`, "", - "INSTRUCTIONS TO EXPLAIN", - "- Explain why this move is significant.", - "- Identify if it's a good move or a mistake, and why.", - "- Mention what better moves/plans were available if applicable (use bestMove + PV if available).", - "- Keep it high level (king safety, development, initiative, tactics themes) — do not list every piece.", + "YOUR TASK", + "Return a JSON object with EXACTLY these three fields:", "", - "OUTPUT FORMAT", - "- Return 2–5 sentences. Broad explanation, not a deep line-by-line calculation.", - ].join("\n"); + "{", + " moveIndicator: string,", + " Analysis: string,", + " nextStepHint: string", + "}", + "", + "FIELD RULES", + "", + "moveIndicator", + `send the '${stockfish.classify}' as it is as string for moveIndicator`, + "", + "Analysis:", + "- 3–5 sentences.", + "- Start by clearly stating the move quality using this label:", + ` '${stockfish.classify}'.`, + "- Explain WHY the move was good / neutral / bad using:", + " • comparison to better ideas from topBestMoves", + " • what strategic goal was missed or achieved", + " • why the opponent's reply made sense", + " • what the opponent is now aiming to do next", + "- If the move was not optimal:", + " • describe the TYPE of better plan that existed (never name a specific move)", + "", + "nextStepHint:", + "- EXACTLY one sentence.", + "- Based ONLY on the position after the CPU move.", + "- Use nextBestMoves to infer the idea.", + "- Do NOT name any move.", + "- Give a conceptual hint like:", + " • developing a piece", + " • increasing central control", + " • preparing a recapture", + " • improving king safety", + "", + "OUTPUT RULES", + "- Output ONLY valid JSON.", + "- No markdown.", + "- No extra keys.", + "- No commentary outside JSON.", + ] + .filter(Boolean) + .join("\n"); } /** @@ -261,10 +295,11 @@ function buildQuestionPrompt({ fen, question, stockfish }) { "CURRENT POSITION", `- FEN: ${fen}`, "", - stockfish?.bestMove ? `- Best move: ${stockfish.bestMove}` : "", - stockfish?.evalCp != null ? `- Evaluation: ${stockfish.evalCp} centipawns` : "", - stockfish?.mateIn != null ? `- Mate in: ${stockfish.mateIn} moves` : "", - "", + // stockfish?.bestMove ? `- Best move: ${stockfish.bestMove}` : "", + // stockfish?.evalCp != null ? `- Evaluation: ${stockfish.evalCp} centipawns` : "", + // stockfish?.mateIn != null ? `- Mate in: ${stockfish.mateIn} moves` : "", + "Use these Stock Fish Calculations If needed", + `${stockfish}`, "STUDENT'S QUESTION", question, "", @@ -571,8 +606,9 @@ async function analyzeMoveWithHistory({ fen_after, move, uciHistory, - depth = 12, + depth = 15, chatHistory = [], + multipv = 15 }) { const analysisSettings = { depth, movetime: 2000, multipv: 1 }; const cacheKey = getCacheKey(fen_after, move, analysisSettings); @@ -591,7 +627,25 @@ async function analyzeMoveWithHistory({ } // 1) Get Stockfish analysis - const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); + const stockFishResponse = await fetch(`${process.env.STOCKFISH_SERVER_URL}/analysis`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + fen : fen_before, + moves: move, + depth : depth, + multipv : multipv + }) + }) + + if (!stockFishResponse.ok) { + throw new Error(`Stockfish server error: ${respostockFishResponse.status}`); + } + + const stockFishfacts = await stockFishResponse.json(); + // const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); // 2) Parse UCI history into move list const lastMoves = uciHistory ? uciHistory.trim().split(/\s+/) : []; @@ -609,7 +663,7 @@ async function analyzeMoveWithHistory({ // 4) Call OpenAI with chat history const explanation = await callOpenAIWithHistory( - stockfishFacts, + stockFishfacts, moveContext, "move" ); @@ -620,7 +674,7 @@ async function analyzeMoveWithHistory({ return { explanation, cached: false, - bestMove: stockfishFacts?.bestMove || null, + bestMove: stockFishfacts?.cpuMove || null, }; } @@ -651,7 +705,25 @@ async function answerQuestion({ // Optional: Get Stockfish analysis for current position (for context) let stockfishFacts = null; try { - stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); + // stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); + const stockFishResponse = await fetch(`${process.env.STOCKFISH_SERVER_URL}/analysis`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + fen : fen, + depth : 15, + multipv : 15 + }) + }) + + if (!stockFishResponse.ok) { + throw new Error(`Stockfish server error: ${respostockFishResponse.status}`); + } + + stockfishFacts = await stockFishResponse.json(); + console.log(stockfishFacts) } catch (err) { console.warn("[AnalysisService] Stockfish analysis failed for question, continuing without it:", err.message); } @@ -661,7 +733,7 @@ async function answerQuestion({ fen, question, chatHistory, - stockfish: stockfishFacts, + stockfish: stockfishFacts.topBestMoves, }; // Call OpenAI diff --git a/react-ystemandchess/src/environments/environment.js b/react-ystemandchess/src/environments/environment.js index 2a84a330..e71a8ec7 100644 --- a/react-ystemandchess/src/environments/environment.js +++ b/react-ystemandchess/src/environments/environment.js @@ -7,7 +7,7 @@ export const environment = { middlewareURL: 'http://localhost:8000', chessClientURL: 'http://localhost', stockFishURL: 'http://localhost:8080/stockfishserver/', - chessServer: 'http://localhost:3001/', + chessServer: 'http://localhost:3000/', }, productionType: 'development', // development/production }; \ No newline at end of file diff --git a/react-ystemandchess/src/features/aitutor/Aitutor.tsx b/react-ystemandchess/src/features/aitutor/Aitutor.tsx index c2f299c2..8706e2d9 100644 --- a/react-ystemandchess/src/features/aitutor/Aitutor.tsx +++ b/react-ystemandchess/src/features/aitutor/Aitutor.tsx @@ -16,6 +16,11 @@ type Square = `${"a" | "b" | "c" | "d" | "e" | "f" | "g" | "h"}${ type ChatMessage = { role: "user" | "assistant" | "move"; content: string; + explanation?: { + moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder"; + Analysis?: string; + nextStepHint?: string; + }; }; const AITutor: React.FC = () => { @@ -33,30 +38,47 @@ const AITutor: React.FC = () => { return moves.map((m) => `${m.from}${m.to}${m.promotion ?? ""}`).join(" "); } + function getMoveIndicatorStyles( + moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder" + ) { + console.log(moveIndicator); + if (moveIndicator === "Best") { + return { background: "#ECFDF3", border: "#86EFAC", accent: "#166534" }; + } + if (moveIndicator === "Good") { + return { background: "#F0FDF4", border: "#BBF7D0", accent: "#15803D" }; + } + if (moveIndicator === "Inaccuracy") { + return { background: "#FFFBEB", border: "#FCD34D", accent: "#92400E" }; + } + if (moveIndicator === "Mistake") { + return { background: "#FFF7ED", border: "#FDBA74", accent: "#9A3412" }; + } + if (moveIndicator === "Blunder") { + return { background: "#FEF2F2", border: "#FCA5A5", accent: "#991B1B" }; + } + return { background: "#EFF6FF", border: "#93C5FD", accent: "#1D4ED8" }; + } + async function sendMoveForAnalysis( fenBefore: string, fenAfter: string, moveUci: string, uciHistory: string ) { - - - const response = await fetch( - `${environment.urls.chessServer}api/analyze`, - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - type: "move", - fen_before: fenBefore, - fen_after: fenAfter, - move: moveUci, - uciHistory, - depth: 12, - chatHistory: chatMessages, - }), - } - ); + const response = await fetch(`${environment.urls.chessServer}api/analyze`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: "move", + fen_before: fenBefore, + fen_after: fenAfter, + move: moveUci, + uciHistory, + depth: 15, + chatHistory: chatMessages, + }), + }); const data = await response.json(); @@ -64,18 +86,43 @@ const AITutor: React.FC = () => { console.error("Analysis error:", data.error); setChatMessages((prev) => [ ...prev, - { role: "assistant", content: `Error: ${data.error || "Analysis failed"}` }, + { + role: "assistant", + content: `Error: ${data.error || "Analysis failed"}`, + }, ]); return; } + let explanation: ChatMessage["explanation"] | undefined; + try { + if (typeof data.explanation === "string") { + explanation = JSON.parse( + data.explanation + .replace(/```json/g, "") + .replace(/```/g, "") + .trim() + ); + } else if (data.explanation && typeof data.explanation === "object") { + explanation = data.explanation; + } + } catch (error) { + console.error("Failed to parse explanation:", error); + } + console.log(explanation) + applyCpuMove(data.bestMove); + // append LLM explanation to chat setChatMessages((prev) => [ ...prev, - { role: "assistant", content: data.explanation }, + { + role: "assistant", + content: explanation?.Analysis ?? "Analysis ready.", + explanation, + }, ]); - applyCpuMove(data.bestMove); + } //helper function function formatMoveText(color: "w" | "b", from: string, to: string) { @@ -94,23 +141,20 @@ const AITutor: React.FC = () => { setChatMessages(newMessages); - const filteredChatHistory = newMessages.filter((m) => m.role !== "move"); + setChatInput(""); - const res = await fetch( - `${environment.urls.chessServer}api/analyze`, - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - type: "question", - fen, - question: chatInput, - chatHistory: filteredChatHistory, - }), - } - ); + const res = await fetch(`${environment.urls.chessServer}api/analyze`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: "question", + fen, + question: chatInput, + chatHistory: newMessages, + }), + }); const data = await res.json(); @@ -168,16 +212,16 @@ const AITutor: React.FC = () => { const move = game.move({ from, to, promotion }); // Add move to chat setChatMessages((prev) => [ - ...prev, - { + ...prev, + { role: "move", content: formatMoveText(move.color, move.from, move.to), - }, + }, ]); if (!move) { - console.error("Invalid CPU move:", uci); - return; + console.error("Invalid CPU move:", uci); + return; } // Update UI state @@ -187,8 +231,7 @@ const AITutor: React.FC = () => { setFen(game.fen()); setHistory(newHistory); setMoves(uciMoves); -} - + } return (
{ > ♟ MOVE: {m.content}
+ ) : m.role === "assistant" && m.explanation ? ( + (() => { + const tone = getMoveIndicatorStyles( + m.explanation?.moveIndicator + ); + return ( +
+
+ 🧠 AI Tutor +
+ +
{m.explanation.Analysis ?? m.content}
+ + {m.explanation.nextStepHint && ( +
+ ⭐ {m.explanation.nextStepHint} +
+ )} +
+ ); + })() ) : (
{ @@ -90,6 +92,156 @@ app.get("/", (req, res) => { }, 5000); }); +function extractScore(line) { + const mate = line.match(/score mate (-?\d+)/); + if (mate) return { type: "mate", value: Number(mate[1]) }; + + const cp = line.match(/score cp (-?\d+)/); + if (cp) return { type: "cp", value: Number(cp[1]) }; + + return null; +} + +function classifyMove(delta) { + // bestRawCp: from initial position (White to move) + // playedRawCp: from after White move (Black to move) + + + let label; + if (delta >= -10) label = "Best"; + else if (delta >= -30) label = "Good"; + else if (delta >= -75) label = "Inaccuracy"; + else if (delta >= -200) label = "Mistake"; + else label = "Blunder"; + + return label; +} + + +function extractTopBestMoves(infoLines, limit = 15) { + return infoLines + .filter(line => line.includes(" multipv ")) + .map(line => { + const multipv = Number(line.match(/multipv (\d+)/)?.[1]); + + const mateMatch = line.match(/score mate (-?\d+)/); + const cpMatch = line.match(/score cp (-?\d+)/); + + const scoreType = mateMatch ? "mate" : "cp"; + const score = mateMatch + ? Number(mateMatch[1]) + : Number(cpMatch?.[1]); + + const pvPart = line.split(" pv ")[1]; + const bestMove = pvPart?.split(" ")[0]; + + return { + rank: multipv, + move: bestMove, + scoreType, + score + }; + }) + .sort((a, b) => a.rank - b.rank) // multipv order = strength + .slice(0, limit); +} + + +//Stockfish function to get the move/game analysis +function runStockfish({ fen, moves = "", depth = 15, multipv }) { + return new Promise((resolve) => { + const engine = spawn("stockfish"); + let infoLines = []; + + engine.stdout.on("data", data => { + data.toString().split("\n").forEach(line => { + if (!line.trim()) return; + + if (line.startsWith(`info depth ${depth}`)) infoLines.push(line.replace(/\s(nodes|nps|hashfull|tbhits|time)\s+\d+/g, '')); + + if (line.startsWith("bestmove")) { + engine.stdin.write("quit\n"); + engine.kill(); + resolve({ + bestMove: line.split(" ")[1], + infoLines + }); + } + }); + }); + + engine.stdin.write("uci\n"); + engine.stdin.write(`setoption name MultiPV value ${multipv}\n`); + engine.stdin.write("setoption name UCI_ShowWDL value true\n"); + engine.stdin.write("isready\n"); + engine.stdin.write(`position fen ${fen} ${moves ? "moves " + moves : ""}\n`); + engine.stdin.write(`go depth ${depth}\n`); + }); +} + +//Takes request from middleware and sends back the stockfish engine response +app.post("/analysis",async (req, res) => { + try{ + console.log(req.body); + const { fen, moves="", depth=12, multipv } = req.body; + + if (!fen) return res.status(400).json({ error: "fen required" }); + + const currentPositionAnalysis = await runStockfish({ + fen, + depth: Number(depth || 15), + multipv + }); + + const playerMoveAnalysis = await runStockfish({ + fen, + moves, + depth: Number(depth || 15), + multipv + }) + + const CPUMoveAnalysis = await runStockfish({ + fen, + moves : `${moves} ${playerMoveAnalysis.bestMove}`, + depth: Number(depth || 15), + multipv + }) + console.log(`${moves} ${playerMoveAnalysis.bestMove}`); + console.log("current position"); + console.log(currentPositionAnalysis); + console.log("player move"); + console.log(playerMoveAnalysis); + console.log("CPU move"); + console.log(CPUMoveAnalysis) + + const topBestMoves = extractTopBestMoves(currentPositionAnalysis.infoLines); + const nextBestMoves = extractTopBestMoves(CPUMoveAnalysis.infoLines); + + const stockFishAnalysis = { + fen : fen, + topBestMoves : topBestMoves, + player_moves : moves, + evaluation : { + "before" : extractScore(currentPositionAnalysis.infoLines[0]), + "after" : extractScore(playerMoveAnalysis.infoLines[0]), + "delta" : (-1* extractScore(playerMoveAnalysis.infoLines[0]).value ) - extractScore(currentPositionAnalysis.infoLines[0]).value + }, + classify : classifyMove((-1* extractScore(playerMoveAnalysis.infoLines[0]).value ) - extractScore(currentPositionAnalysis.infoLines[0]).value), + cpuMove : playerMoveAnalysis.bestMove, + cpuPV : playerMoveAnalysis.infoLines[0].split(" pv ")[1], + nextBestMoves : nextBestMoves + }; + + console.log(stockFishAnalysis) + + res.json(stockFishAnalysis); + } + catch(err){ + console.error(err); + res.status(500).json({ error: "Stockfish error" }); + } + +}) // Start the server const PORT = process.env.PORT || 3002; From 42fe23addc8e92d538a2bf0ca50fb0bca32707e1 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Sat, 3 Jan 2026 18:42:40 -0500 Subject: [PATCH 06/20] added Devin images as tutor --- chessServer/src/config/openai.js | 49 +- chessServer/src/index.js | 54 +- chessServer/src/services/AnalysisService.js | 108 +++- .../src/assets/images/Devin_tutor_default.png | Bin 0 -> 311494 bytes .../src/assets/images/Devin_tutor_mistake.png | Bin 0 -> 396344 bytes .../assets/images/Devin_tutor_thinking.png | Bin 0 -> 311189 bytes .../src/features/aitutor/Aitutor.tsx | 545 ++++++++++++++---- 7 files changed, 580 insertions(+), 176 deletions(-) create mode 100644 react-ystemandchess/src/assets/images/Devin_tutor_default.png create mode 100644 react-ystemandchess/src/assets/images/Devin_tutor_mistake.png create mode 100644 react-ystemandchess/src/assets/images/Devin_tutor_thinking.png diff --git a/chessServer/src/config/openai.js b/chessServer/src/config/openai.js index 3ae3f16d..5d3ac68d 100644 --- a/chessServer/src/config/openai.js +++ b/chessServer/src/config/openai.js @@ -28,23 +28,47 @@ function getClient() { // Initialize based on mode if (mode === "openai" && hasOpenAIKey()) { - _client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); + _client = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, + timeout: Number(process.env.OPENAI_TIMEOUT_MS || 7000), + maxRetries: Number(process.env.OPENAI_MAX_RETRIES || 0), + }); console.log("[OpenAI] Client initialized successfully"); return _client; } - // Mock mode or no key - if (mode === "mock") { - console.log("[OpenAI] Running in MOCK mode - LLM calls will return mock responses"); + // Mock mode or no key - fall back to mock + if (mode === "mock" || !hasOpenAIKey()) { + const reason = mode === "mock" ? "MOCK mode enabled" : "No API key found"; + console.log(`[OpenAI] Running in MOCK mode - ${reason}. LLM calls will return sample responses.`); + _client = { chat: { completions: { create: async (params) => { - // Mock response + // Determine if this is a move analysis or question based on the last message + const lastMessage = params.messages[params.messages.length - 1]?.content || ""; + const isMoveAnalysis = lastMessage.includes("moveIndicator") || lastMessage.includes("FEN before"); + + let sampleResponse; + if (isMoveAnalysis) { + // Sample JSON response for move analysis + sampleResponse = JSON.stringify({ + moveIndicator: "Good", + Analysis: "This is a solid developing move that maintains good piece coordination. The move helps control the center and prepares for future tactical opportunities. While not the absolute best move, it follows sound chess principles and keeps your position flexible.", + nextStepHint: "Consider developing your remaining pieces and controlling key central squares." + }); + } else { + // Sample response for questions + sampleResponse = "This is a sample response from the mock AI tutor. In production, this would be a detailed answer to your chess question based on the current position and game context."; + } + + console.log("[OpenAI] MOCK Response:", sampleResponse); + return { choices: [{ message: { - content: `[MOCK] Explanation for move: ${JSON.stringify(params.messages[1]?.content?.substring(0, 50))}...` + content: sampleResponse } }] }; @@ -55,8 +79,8 @@ function getClient() { return _client; } - // No key and not in mock mode - console.warn("[OpenAI] No API key found and not in mock mode. LLM calls will fail."); + // This should not be reached, but keep for safety + console.warn("[OpenAI] Unexpected state: API key exists but client not initialized."); _client = null; return null; } @@ -69,9 +93,18 @@ function isConfigured() { return getClient() !== null; } +/** + * Check if we're actually using mock mode (either explicitly or due to missing key) + * @returns {boolean} - True if using mock responses + */ +function isMockMode() { + return mode === "mock" || !hasOpenAIKey(); +} + module.exports = { getClient, isConfigured, + isMockMode, llmMode: mode, // For backward compatibility, export a getter that returns the client get openai() { diff --git a/chessServer/src/index.js b/chessServer/src/index.js index cd32fb41..6780bd44 100644 --- a/chessServer/src/index.js +++ b/chessServer/src/index.js @@ -39,22 +39,36 @@ io.on("connection", (socket) => { }); +function withTimeout(promise, ms, label) { + let id; + const timeout = new Promise((_, reject) => { + id = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms); + }); + return Promise.race([promise, timeout]).finally(() => clearTimeout(id)); +} + // REST API endpoint for analysis requests app.post("/api/analyze", async (req, res) => { + const TOTAL_MS = 15000; + try { const { type, ...data } = req.body; if (type === "move") { - const result = await analysisService.analyzeMoveWithHistory({ - fen_before: data.fen_before, - fen_after: data.fen_after, - move: data.move, - uciHistory: data.uciHistory, - depth: data.depth || 15, - chatHistory: data.chatHistory || [], - multipv : data.multipv || 15 - }); + const result = await withTimeout( + analysisService.analyzeMoveWithHistory({ + fen_before: data.fen_before, + fen_after: data.fen_after, + move: data.move, + uciHistory: data.uciHistory, + depth: data.depth || 15, + chatHistory: data.chatHistory || [], + multipv: data.multipv || 15, + }), + TOTAL_MS, + "Move analysis" + ); return res.json({ success: true, @@ -66,11 +80,15 @@ app.post("/api/analyze", async (req, res) => { } if (type === "question") { - const result = await analysisService.answerQuestion({ - fen: data.fen, - question: data.question, - chatHistory: data.chatHistory || [], - }); + const result = await withTimeout( + analysisService.answerQuestion({ + fen: data.fen, + question: data.question, + chatHistory: data.chatHistory || [], + }), + TOTAL_MS, + "Question analysis" + ); return res.json({ success: true, @@ -85,11 +103,9 @@ app.post("/api/analyze", async (req, res) => { error: `Unknown request type: ${type}. Expected 'move' or 'question'`, }); } catch (error) { - console.error("[API] Analysis error:", error); - return res.status(500).json({ - success: false, - error: error.message || "Internal server error", - }); + const msg = error?.message || "Internal server error"; + const isTimeout = msg.toLowerCase().includes("timed out"); + return res.status(isTimeout ? 504 : 500).json({ success: false, error: msg }); } }); diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index d52da78c..5b08c62a 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -24,6 +24,10 @@ const crypto = require("crypto"); const STOCKFISH_URL = process.env.STOCKFISH_SERVER_URL || "http://localhost:4002"; +if (typeof fetch !== "function") { + throw new Error("Global fetch not found. Use Node 18+ or install node-fetch."); +} + // ============================================================================ // STOCKFISH SESSION MANAGEMENT // ============================================================================ @@ -187,6 +191,30 @@ function parseInfoOutput(outputLines) { }; } + + +async function fetchWithTimeout(url, options = {}, ms = 8000, label = "fetch") { + const controller = new AbortController(); + const t = setTimeout(() => controller.abort(), ms); + + // If caller provided a signal, abort this fetch too. + if (options.signal) { + options.signal.addEventListener("abort", () => controller.abort(), { once: true }); + } + + try { + return await fetch(url, { ...options, signal: controller.signal }); + } catch (err) { + if (controller.signal.aborted) { + throw new Error(`${label} timed out after ${ms}ms`); + } + throw err; + } finally { + clearTimeout(t); + } +} + + // ============================================================================ // PROMPT BUILDING FUNCTIONS // ============================================================================ @@ -402,6 +430,7 @@ async function callOpenAI(stockfishFacts, moveContext) { const client = openai.getClient ? openai.getClient() : openai; if (!client) { + console.error("[AnalysisService] OpenAI client not available. This should not happen - check openai.js configuration."); throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); } @@ -426,7 +455,14 @@ async function callOpenAI(stockfishFacts, moveContext) { temperature: 0.2, }); - return resp.choices?.[0]?.message?.content ?? ""; + const responseContent = resp.choices?.[0]?.message?.content ?? ""; + + // Log response if in mock mode + if (openai.isMockMode && openai.isMockMode()) { + console.log("[AnalysisService] Sample response (mock mode):", responseContent); + } + + return responseContent; } /** @@ -440,6 +476,7 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { const client = openai.getClient ? openai.getClient() : openai; if (!client) { + console.error("[AnalysisService] OpenAI client not available. This should not happen - check openai.js configuration."); throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); } @@ -505,7 +542,14 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { temperature: 0.2, }); - return resp.choices?.[0]?.message?.content ?? ""; + const responseContent = resp.choices?.[0]?.message?.content ?? ""; + + // Log response if in mock mode + if (openai.isMockMode && openai.isMockMode()) { + console.log(`[AnalysisService] Sample response (mock mode, ${mode}):`, responseContent); + } + + return responseContent; } // ============================================================================ @@ -627,21 +671,24 @@ async function analyzeMoveWithHistory({ } // 1) Get Stockfish analysis - const stockFishResponse = await fetch(`${process.env.STOCKFISH_SERVER_URL}/analysis`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' + const stockFishResponse = await fetchWithTimeout( + `${STOCKFISH_URL}/analysis`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + fen: fen_before, + moves: move, + depth, + multipv, + }), }, - body: JSON.stringify({ - fen : fen_before, - moves: move, - depth : depth, - multipv : multipv - }) - }) + 6000, //timeout ms + "Stockfish /analysis" + ); if (!stockFishResponse.ok) { - throw new Error(`Stockfish server error: ${respostockFishResponse.status}`); + throw new Error(`Stockfish server error: ${stockFishResponse.status}`); } const stockFishfacts = await stockFishResponse.json(); @@ -661,6 +708,10 @@ async function analyzeMoveWithHistory({ chatHistory: chatHistory, }; + // #region agent log + fetch('http://127.0.0.1:7243/ingest/faac9266-bc5f-4ac8-89ce-7169defbdfc0',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({location:'AnalysisService.js:712',message:'before OpenAI call',data:{chatHistoryLength:chatHistory?.length},timestamp:Date.now(),sessionId:'debug-session',runId:'run1',hypothesisId:'C,D'})}).catch(()=>{}); + // #endregion + // 4) Call OpenAI with chat history const explanation = await callOpenAIWithHistory( stockFishfacts, @@ -706,20 +757,23 @@ async function answerQuestion({ let stockfishFacts = null; try { // stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); - const stockFishResponse = await fetch(`${process.env.STOCKFISH_SERVER_URL}/analysis`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - fen : fen, - depth : 15, - multipv : 15 - }) - }) + const stockFishResponse = await fetchWithTimeout( + `${STOCKFISH_URL}/analysis`, // use the same STOCKFISH_URL constant you already defined + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + fen, + depth: 15, + multipv: 15, + }), + }, + 6000, + "Stockfish /analysis" + ); if (!stockFishResponse.ok) { - throw new Error(`Stockfish server error: ${respostockFishResponse.status}`); + throw new Error(`Stockfish server error: ${stockFishResponse.status}`); } stockfishFacts = await stockFishResponse.json(); @@ -733,7 +787,7 @@ async function answerQuestion({ fen, question, chatHistory, - stockfish: stockfishFacts.topBestMoves, + stockfish: stockfishFacts?.topBestMoves || [], }; // Call OpenAI diff --git a/react-ystemandchess/src/assets/images/Devin_tutor_default.png b/react-ystemandchess/src/assets/images/Devin_tutor_default.png new file mode 100644 index 0000000000000000000000000000000000000000..0020712aa6ae57002ff52fbb9c874942768f3f63 GIT binary patch literal 311494 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�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

MmMxmweEL z7+KWSl0sKKmgml#{bec`7=hqquNymQRZLEn+c{sl>nb7vBR(NI*Vz|(Wr$7l4H>po zn<9KnPR zAXSp!;p}3km>S;{o41m>y_|eRVT{H&<#|cCCGWmvf-SqHNs#Vd1O?LQJ&6j)JP{br_>7V4+yAGVQeskW(^R!{=%5Qa~r>)9Ps*=FOg>@g!K{TA)TsT;%lW0p418yxdmR{6<11E&cG2 zWZ`uOTg*vHKg7eEEY2oVgRH6X$clJ9S*Z`Rw1w<$E$%X^tF?$53BgI{gs60q&=Lye3ECTZJo^2eT2U{+4R;I=V0Cg^SNN(oIho9QYA9{- z+ltuOmw+4=Vfq}d*?X$kN^cJ?3kxRuIc9hRE@OUD!IWE-B5~h(d}JRpCouheOdQzh z@_=2WxDL4hWX#mYd%*AjdHigx{R3`21a!vbbz)O>&rb2#{|XaUv&w zb-bG^LAO&BWP&zhT8NiXCvZI{oOb%ZVX%>MY!|sg%wG+H7;o$tcDKb5+P<;wb2NzB z^7DD{$y2BZVoc+=npR%%WiWw}8RtXDSoG+kPf@@0n?cG*&6xmDv6=a&?>bCzP@~!i zlz|3@V_GRsi+4j~hr0Fy^eJXh`P`Ja7JoqAFxp9g*0o$x#d&wCU7c$SN%0gScC2d~ zP5kB?M|vav2ByGGf0N5^d2VnKjQ$n)U)UfI*W9LWnLSP)#Ny|xzJomG64f)w*Tko^B&-VWi3U+** zYNuAly@vm;QE_pYCGd=h$v0w{6S(H}RYu;OO&LVYy82fgdJ{I@s*8+R z|NQo%Do6=P%vneU!w*?AcrI+aI9YiF#vvPZaVsb&A)E=uM!_I|DA@%WBQ$7s)^cQY zSotG=;k%o3t=iw)4FvAbq-b7_ge3g=7C#$eJRX&m6cZ$dV@L+jxvNlNtRBnlv3};n zsqf%?AXkA^w_M#XL2*GkZz9YG=7*>O#20)($$WgzaQv@j;}=D{zXDE@FxDa9N)RTd zbi0&7B9|3U6Q}`X$CIM1V<~@V*3qz(QTP1TsmA^p1At5oZC~${o5diA16VLh$o?pu z-BCq?Xg?3eeCI)C#80w(iGD$7p^hu@F0tX3q(DV$disNfMdADrDs_CxLbPxrY02*n z!+ZR!uITZvrh7L>Ypb6fMalVE-?=-?8rTTixp+6FkXmHm?fL3#`hE^VQ7ua`M?)?A zN4MkSGbJKm@C~VcM5YLSn3JwN0;p)}Vr7m1pF_Ab^T zEoLucx;*-{cq;7{_Zn2rQKvy(jP(*n%E)rK&$RGmwwH8L+Ln#+_bMy7vkxJE_X?8Z zHZ>b{0SUJ%!>pF(=Axo7R;KsYLdC>PiRB>7)LAQNJ8qSXp*|`E3W4gNT=Homu*a}B zmSXTn1qS>OGqLXD!=EvH_ghSU;R992g$P07W z1i|}n<(ikjdWRyMt%o91@j>vgH|(AIxaG9Y(x393%`>61+#T+Z1f& z*o;zruXX=QVmJ0K<9XlOzSS`XLlQ_RTDGdJkj=~at33pCaJZn_{ad}t2pp&8VO?;v zX(AFGHqrBB6Gt%2i8oslXBIHd_xJ@wYaI5*+I$2V8KZ-N)l=i#DpwRm@)hH%DAJH{ zvLGYlsS4t^261yA$W)^e8d4)6%SrV1eVGPRM+Mqh<5w6g->3YvSkiJi(5G#4UU=Kq z)PW6w%V=%y5V|HZ51nhvz4-({7A{JXx=%6i1S2tbZ(2LEk?0B-0n8yrs75fuFt94g zt5J*}(E$KcO6qs%4k=9k{BV4x)IPrP_A&U^)=Lv5dBW%{uZU2W5f7q%qe#e=jDo;z z0ng^rQMQI2Kozh#QdayJWpL*W<^ljPb2D=?iHVCpjZ_#i)+li8P_N(VnC!2yB0;E3 zvA((`oE<8d9MqXH$yOeaU?6KTj9BRtPrm5D?3dxJQ|=NK7!Sm%d(4V6^-F>LT4`yvhh@O-+R!UZ>!AARgRdGRV#q+17kpa~ zHRVccY{dCkxv`I%!>FRNFJDLaG2Q-et9bMrr6@#&3fC$hitI3pJZ?-YI^6l;CGDhs zvB_(|o?S!suf$_@o)zbxrDJ2~Yw!)rTqjjGJ;wm5W;h!+GNGQ8 zz#La`gVYjUu?5lHLh-V-U~Mqw0$p6Nt!WXM`2lEaH^bjWr|ya&!(cF|s5loTM{?<= zhBW#@+<+@59@0nuv?*~PF^=|+7#TQ~8>Swg_pk2@)6Uvum@RlCAqDG8#ivuj{ZRzeLCm_K<>I$08tEkIL z!se2>J9Ou>bvQa+1;kjUdxB@?uTY*DBaCje-Tr?JCD8@(h~>K!mD9`j0)~md_Iq?T z@O|9I@@(Zm`4PsFkko-VgHAD9z1qg14p{vYm{xPe&m7ZGh-yh1bI}Z$F_-@{;yJCf z^Kx$!-C5wG3H$|wKA@g`;?)zN$@n=qz<|{=IADh;afhW$bdcdZRuG0WfTsfO4;b#p zLI#S0FjOEO;eyH@a<|z#U)3yIgsMapQZCsrzU!&ZP)Z0Nl|tQu?2LhR&RunM@h8d{gn zv>d%UGO4M(xo|)NqQ|l9LG$@^<#GS{VhsB;M$p6j_$^C{UF#h^VCy@n`C}A-Dx5L$ z@=sTq^-S5{Y~zDZybS3BdX36;yK`UpXM-J&o@akzJVo9TXnvwLk+}7si8^KbvwUrUiuUc>*)KI1-S@@uOkMUPMCW44ywYeLg z7|H5r0PdIA&GRXS`z5RoI?}pRJ*9EPDn`D_2D1{9ap_q)i&{%6+3cNw)EZI+@2goY zeUSfng4WUC^*I(zb4msK;u#;P z3|0r2ZsL6|WByf5?_-ntOetc}$iu^zDroQ*r$&0cX7-h+ol{DAQdR_E*;03LPzaQj{~;Fc9z-{lhIClJ6!zKRW)Maw;#z zQ~T7%o)#6@nEl@sZey1fQ2Wki@MAEj?~23+EPs-nGTU_vlllZj=HVbl#@%ORCVXUn zK5Dx>^jcBp_cU?yG;%fjwuG%1d!w`?RFO~Hg<{x7CL7N_ zaPsD3jbv(1|93%23kIoDgB($0JRji!*BsAT7)j!&+jRqx+|S>0`Iy^1@*qGEz7@jK zmX%9@8xF|O8B*?#S9V)j*SX&kkVo7Cgn6INX9@!uHF9eRFQs}Z?%(+xzKhyLVgiH9 zU^px9eX5G*H_y6$pc&jwV@A0N?7b%Gv{?w8q?bOrNOZlY`Pntl{v(-3K|K}?Ul|bG0J2|aL=|_q___-q^vK{>HtD{Y|EyU=I@ia6oFB<_Es-Fq&`Y%_fO4Urwpiu>&Pkx+37 za~1IslzhklW8I^WU*)urf&Aahd%K&zGo~o{OfW`ssVzwEkvocQfOrt z$2AK<+Vu4Q_e1*GJt_}=O+M*IRp^pUgg+?3;Pb^%)AJGg1Iq^tV39`i`5(MsHR`MO zjIRt}ELUXUDwF-))8+ntcV|uya`jVo@F$Wh*W#Wl>|z{6!=?TM=pD1R+e-p4YNQHFfFhmrH8ch$NBR|O4n{}l=vBC|8%SdXX3TX@v%`v>kK z$Gd*joO|wfi@9=J;CI{fsR*N(WoIm_&GVxcirVox$nc@Qdw^r3MHlCQ)K=Mp)i~y) z^8Nl*qEHbjdUTXH>_pA}= zuJ^kQ{QtOQ_tAl5ua^SP!C+@mk`NRzSR8Kq^FHNc6Q%dFA{p6>I80^1w|sg=B}n5y z<4SZ>TnT{qIAo>CM+77;DF-t);JN+fHprQ8Z9+O5{&zR)18$?BliA?o@DbfBR2#2c>BHB`7K{Nv$ z`9|R9L8^7KsU~CV|C$pPx zJ^PHjNL^!or}}uGzbb1Ms3vADepuIOxwUv|dv>vEz~1`FtJQM)*8~|L6OYa@)xkvU z_1%r7*?q?-|1E?>lNX@9T@V;CYv=0v$(Ubw+g*kM?ayx&=rR}_J(@}4`EWMm`vpo~ zX-Ntr<2(?fr}MF?pw+~w{RHGk*6SfLr|}ZQ2ak}!jKHW^s%GT~AT8#Y(2Z8f2h(Ie zp@9je1<94bI{URmit0T_T!FOcxr_&Qc&EejlfpO#1d!TsE>iLPNAxf?K!%pDrhF0u zinGT_L~078Mcol;e>>#EP+wHTJ*l9DOsBev1BE3e}nK5OV5=)^pVq0uWl~)cj?-oCkji05? z`|9*(_`G-DGZ4;9cXGIkh;$etX?ui!Bb3X>r;a-tPecrkfZ8(n_ftHdc~2BymzCUS zL!n#uHS?<$!cP+eVVGw%jZS{~jtZ4~<@U1=gf1bp*w_N%eJnZ0l%WYhdV$A`Sk3hn z|Eh6z*LFn;cqrdBU98L~SX6P70j|rSa_0s#2)F%+hvG zJobar2)hOdJx*1{A8b?jTdre}=+AnJ&^e~$iT;?Nuohcz9O78dGJSe)@Z5WZ=H3Bn z;!pQ`X0{Ctv-23Apu8n_3-wiOyX7~VdF&7pCP!rL`@x>3_U-w;(Kgt1F{Z=S30Nm_ z+r9t3b#^|ea+#1ZOQXdFw^Dncl}LpFJ2P$|{Xl(s*p(owOr-BEk>A0=NxkQ>$YX?G zbuR}e_wDJn&x*u&R<;k;4`_gY03fKku~`a0#IC4vF1b_L2uhD)WXy6RP7ebidbkP_&wa*jl6II1;E9OT zUI4u!B&@hYlgFf=9 zBLXL0*Ro>_)44RN!amn{l+WjNk9GDdk?#$%-i%LlsgC7zQIrpqye26ai@x*sQsd`y zF(kT~K-yXZtmQB>dF8`}<@e%BHt%lU%B^b|J&v&}Y zdarIPavsLJO=b=-tq%^Ydn@_h|HxNN^YMuqlD7_U*gN+y8lg&r`#ChNTQ6?@PJS_z z%sH2GHkQBv0LAM^q5E6%bP~XTqG}qi7?X41hR7>@-I70pxmvTh_vtrIdc%W7MWIHU zrRT0PzEr=G!hdOa?q<~Xj>^uI;LXC&Xc^lF)k#T5LT@N5d6Ygot+fIKKnG3%zvML*|$J`)#2_B5*{!gP(o63^mB2&_!sZ{@m-nLc}MsrIyXAufPdX%tcob*E-CO zY6L+oNqcKOqMF|&BOQlW46$4-A(H>ltEO#}anaS&)6Md@EpiI}=;2f{V*G&xjj( zEBCchQZ~-LaO(-vyPIOiS*FFRsWn=ow!4e#<+oY|9kN+jLt$U_l)~KCC~LAO~ zX`*ntGDEr^=ccx<2&t_gk}hY9sp5v)shlP_-4Xz(#>d)-o?a(eEl!9A6xvP&?Ueh0 zsC&;z&$vh|tU(2gK%tbrCl`n^QSxb{_q<7$yN++1)*M!26-EBtLdn35J8KLMI>-2; zg)gIzU1z21TQ?n$<2?TM{qn#!8sQ(D4`Lp&dCX|L(`~yypL4ERt1t>7 zD~O}bY%>DG@F&&}*Ovrv!tjl!$$oj2kJA2OSP&xM7K$r0sqD)zHVa6(dN+4G#(~AT z6sydCksyU}fSW3+b`-*UfK9ma&CpTT#+ht>3m@Cob(RwDcO%E$q&_~|0*Q;>96h=( zF<%VETvNA_zYrByj^^!dCzuGz26AhJAJI(Oam-F#eD(A$n6gJiFMylB&HRX48 zeixzY+!uKNC|mFGt^_$vI=$CPDk2%T*oR-QH1P(@6=42N4G4=_>>Xc<`8l^IySK%0 zPn{Dc%*{~I>Z3MPx-2qoy$J5t2YFe0)haq|wGLS~)?yx({`E%X6(A4`0;k;`A9+PZ z(d%H)S6uEpGQqu;)<0R>IWCn4=@{l})C+QAwTEqK>Gf%dLf->bs6g>LUtFtIyuF)s zgTUz}*DSnt)ihCX9clk|s`Oi$6R$Bm%`!Ueh#$;*NoPx)LTqF_UG&yf*@K;mtMn}h zC+pIzsm>Hw%ZZmmdQRcyI+1AoPDsUUE(#OR1}$*&r05}kypUCy154h@;E)}7bGY)fst-xATLzYor@ z8Y(eO7Mu^n(zXyv_?Wyi+Fr$OP}e~VGyZWf8Z9XpFXO+y)DY-at#ZIOHy>b&*5n&n zcMA_*@HCj*VZ;Zk(PGuvFXI0Ydy0$zmvg%Lr$ozj3Jx04}Br`gZ|K4LNJ&x+0ph8t+Hyt(+FmA1bUa+O}p>5{&U$ zc<6EI86TV7?L!hRT28;~(|^N8O0?@m{p}*qx~E@RYBG6LO19(PyJBV&s6soW37dTULrs0oE(3`(-&X%V#0!3TcjAs1Nm;Ibzu9)| zKxY&WSdLNpÛkQq5KXS7l=BS`}dfJ^TSAr8y}*&aOb0FKD{qoUP.<_)i-MW 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ЛQZb{_l&R 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 I5ACD>2h=N5djJ3c literal 0 HcmV?d00001 diff --git a/react-ystemandchess/src/assets/images/Devin_tutor_mistake.png b/react-ystemandchess/src/assets/images/Devin_tutor_mistake.png new file mode 100644 index 0000000000000000000000000000000000000000..3853ed25bdc5e98a48625a35d61d2e766644638e GIT binary patch literal 396344 zcmeFaby!tR*9UxP1d;AiX^`$NY3Xhcedz8+K#)#p=?0OOQo6fSy1V;3sCPZjeZTkn ze%JT?=i!gNXZD)4XZ=>}nKd&PL2@!;NCAH23*zffc2qyu0qy?l zrF1|$J40K0kd>t!xB+1GFAempZ2zW#{ RN2Z4c75ZSJbYtL;O5aSQA9v;t-K5jE zH3Zrl8d%s_8QD7lZ4CvD4K3}P3@m{bhDKs?O0+Ci_cjI~V~{=2T+zzGR^L#`#oEwW z)WqK2nv0%Z-;oYvZLd#fWot}tY3O99Z)IR;NB@)F?mN9bn4aF=76`I5G!Qg5wz37; zn^=JKr40>0!1SM8vHZ~$D@#YPoQ4mu6#f*F@;fSjE2Ig~&VM^i$7;$oN*nj7x3)YgMEzsV|Ru^PxWc5Q|#=<5*d$7)& zz}leGx3aVcYZB;SZ$kHguCA?}Ap;%w?;d0aGPVTTJJ=dJOWPTm8X zOaiy3(^R#IDx`R2p>aSabe_r|e5wA8@9#G9lWjE3%2NgXj19>V|_BpLA-aA2X7p`jk5sv7DEKbVsuSc@P_V_`u?BnHHXXNZrX zUm053F`_U$c_<=0hEuY2Fti5gGa@oPdZ>X#hg4Q%Ai_psVr5`tWM*PuW@BN~02kSQ zFS2SdsQiVT5gFW<@7!Qztqm;&C4OU%_!#b|xiOM5Jbxg8dW`?`g-;*)@l^Pg#8Z&v z)1Oof>I~?xaA2YOc_ATS;lJNNLBK%?0iaa~oja)IkUjRGJ26fRvmD*t?T%!U@Q&pO zF;BgsdL+ci056rz8oLp>Om{Gym{|mYum?F6r2BY`wvG-fk$of6XMn+{m*FwE6NKmx z5cklK3;+h=hY|@i4g;1qh6b^j(MZhtM?pW2ZFW*pd}Ke*xtd8-b&xjnt|}) zePqyB3>d%hfr9@1j`YXlC(u~X7~MMPbT9B(Gc5E(q?v_b^md{zsK0BB5c#3+&`^+Y z-v6P0C|?K&fQt#A8}G93;*@r6jb&Z>1lr5NcnqpjI7Ql#^Q+vEBi=>SO~@rNyphOb z6CJACtv>f)o!xCw;)69o$=X>cP(f*%hVYa~51=&kWY)A)`W_Qn{Xks-sB%TM9tGfa5XZe5+cPT!4jkEc0CHB4y-H=z} zhoX0x$t*F5&7XvgqF!V3P!{=#+q_bLWpHHBUbF?3St`|FdXYu#XByqVW*DL!^bCgjGVM)jTY zO^lIoAiC9|JsEtVUBRBC_tSGgHxaG9L2|xaM0vWyzW0=4x6u**fgA(>Zw3tY7*@f` z%KrbAyD%~`F>r$2h4ZJofQua8i(q&8|I#&mA)f!a{}3<$u;!5g489NukPjyC6$`B; zSMKZk-hQ)-u&l#2(<|G!x05i;*TFl!M~2?(g2{=ki?1;|pf@PZPCKUO5rUszwdH1> zAyD4I>2V|UJaRE~d7_pW!xKkOuQ!IJ)*GA`-z^>islE-*wq8n~&3o+?z3)`kxZ%oi zfkE^VTh3(h(l{Sm;<$!h;6t6&9nnjS1)8B|+x5{s+b>j-6Prbqw`HvHbpvQxhXJ$lcUTaw0&vd#CnFHRrm`> zh4JZFu(pO32Q!cmRzu^lUp~RDyPpCEz&5){Yif8su~FCM7`t~|3|mN{ViwTbBFmg6 z$5ifGb(dpE=a)>cnTvFla!1S~?Hr|9iXDlA>@9#CL#}LZ{&e0f0C-xy)WbJ4-qlqs z^bV+9)F`}uUML5b9#-eO8*L@HWuBKD0!MH{9M?*=s9oQIlwAb5TN_;rqQ2OnVdF64 zZ}xl}WI=!;m+I6*o-S6gfC}cPWA?;{S7Rg6-gV} zbrf?Uc6rWg6jZx~2EKQdPj@-#@|>V$gj(yds%mHjpDQJ&621DOm5Ao0JohFeS>U}% z@G9tj_(v_8Y~RMH(9*J+t%BPumg^o--TMYRE0+L+sO#J|({APNQ?*{|Rn7TQ zY!0PA4E)roD}IjqeqDYc@C$)o2>e3e7XrT!_=UhP1b!j#3xQt<{6gRt0>2RWg}^Ta zej)G+fnNyxLf{tyzYzF^z%K-TA@B=eF5cq|_F9d!e@C$)o2>e3e7XrT! z_=UhP1b!j#{~H2lY68)>5lyy>n`$nf52Asg1?1&gQTB2tf^ zcnO2hzaK2JHvymSvIK(6>A+`WY{6&Dz-OQyP{q+_vNNGy=%g3qcp)=e;JGXuE~E*r z$Ivq}&;xuw>_cyAZD01^TU3KAL$1_l}${L};d8~}|9gZ7M35Efk? z2>09ugUKf{9iBv}>?@|i&;cp4o~`dA1T1VETs$&z3Q8(!7FITP4o)uNmm;EK;u4aI zO3Es#YU&#L28Kq)CLmKgdk04+XBSt$H~s;EZ-auPqGMv?;@>AEW@Kh%=j7()7knzO zsI024sr}sC(%RPE(b?5KJTf{qJ~25py|}czvbwguvAK14bbNApc7Abr^&l4n0KCcn z=kIUj0;>Z85`1?03QbkZT(77<`@q5)}#+zz?|8c;D=e0H6eXfb@X@ zU_5@fc_^dEK?s1$0Py9v=Rc|$J_tTMcpwDdKz(oed(HQzKUw|W^nulP9^ZNXsl@}u z&v*RO<>zaDbmVV|njgCTKXLkZ7Jo2!{D<5OKLGikIREXlKe6~1>7Wpxf9v@FrH_B} z)(1@gq_98a`5W5*8LWS607m=&roew=2=41YBKBPce?sYh!3!Yw(?0*1_8%GkrxG6e z^^e>hfi0I706EqC1G|RCgAYNoc!R4Me)!W*xB8chusBQ(*ie4!)gO-XyN~@z zV~}_PvWCVEUL3yd(`E@tS=Q-}{N7p9nxW)pysBSxAJNel=hPoQ=PeAQ-O1v9oJ*(` zCUo{?eRBbKyeg92AAkE>Z`Z(+Uw>0>b?ju;pD3^YSpp2 zsI8foML=EWFl|RK3PnvfH<;U#kLt~3kHo(j6G{vyjwB8Vis`en({?7cqRiyEBc6|JQ-u%!HGz-LbD%yn|F#E#fqOc?1{zbqD zRvJoc6r_N{`qPm095I6RN;}EInA)dSc#@3k3H-tJUKpa?#1MrWpIt?+Cl#PWDiV02 zm{S=S#!E1~(p0FF@1&og>x@}CcnEBbvv66e0M1)$!PQ|(VW0yEtBgvx(z`W&MSJ#O^=td3uChNBrNQC z9o}pBWG$pBOIi8~Z{7_YWg7)%)raZJmDP@vB+eg^hbiy4h0D1GXXhoBY5ZGM{VV)G zUHCU6{+|L6k>3G(i*PF+XI0eNT=vM0*DyJmZBpQ@;;A`-6JQ*3y$9WtaV>KG#_I4% zA;^uaD6X3AY$V-RoQ%(+au_N$itP>;VvB?4NzIz|L1>AxOWow*E|;dn9<-C?LE&Rq zLWuLTlFS6PCJV9h-12A+Wn*$_5ypM%2Y zH`=_{maX9iSMC9Vmm`?%YFkVK(Y@X-M^O;GK0J|E3bSsQJ7j_m>-{+*fwvk&{tdF# zu6iubCeEZ@`1T_v1@W(Dwb*{x!SpJ{u9#v$W*$blK)HBXZ2Jz}*9kga^HCc{$po_B6)SmMve$jW3B)2t~EGsmtn7 zMTz~}H}cP_fI{;@e4ziKkpJo12s_}9J7xBZtqg#Upba9pL%6qJqNPWY1!jW`Uk7`9>vk3DfQ*%o33@1u%X&h#5#^MqSzKyruwY(aVPz3A)x+*yhnDvKAB z!se`xTGp8dR(b!LGy!1xorIN<(0h);HUv>c>P`2=roe8J# zDJJ#?%Y)|>?iyboX%H?f-ia|U@%v#rVtvvwIll*hD4AC!z0psA3kNr5IboJry9#U! z#gWsrL$M3ScgE3{DQfwhudS6%F?Tiwpp-LTOqrrh&vsDK;-_~S5`;IugXyns<>Jwy z7||cA$PsN+Y8}cw{APc~m$1bsUlkB)N0ZtAnScns;3@b6hAeat{X6Y`W@*QAHt3%*b_cYr~-_p@JFi(4bK z+DMt(+jKZF3aJR+^7sj$4*tt9=r?2i88rUZW??JS0vu*$YJEB7fSa3eqN zDvEmo|8`f?UQFS3jQi9$SZf|Tb|rRNJ>?xUdX&VLM9B<6JU6{R9tPKVEz4Dio|^d} zM@V=~EkB)@=bJm_wKa!T$;1#R((HO7 zpM9On!^ZC)c*HAswUncYjnrHE_OtEg9a(IqcG+xRGQ?z*;H@BkDCL{jgx)bUSJj=} z43n$#Hjn2Mtw<2%(#J2DQLtPv3{logd6pX)1&FoX?JlyBn{N@i)r$Q0GTnCxD_+c? zz(CnC5`44Nfzvw6f{VT&KFee0Dq@>w9QsgI5$l^&hh;93x)T~DmJi3*?#&Bz7JdQB zb?*5Z|9LF5UaEBS0RL?X%Ig8VkP36L`AfU%!R0a*h=Y`WA1LX`Ju~?^Bl)|_;K5nA z#}bldkHj#Lc|k|=c@UhfTlD0UtTV7dPNzP;(EO(RMh9Qps!i6|CQm3mchm~omgFAb zh{5@FhXIjzI0EV8Z4S>PrxKCeow3&eVyN$?J}AF2_=bMG2en`UF!3DbN3IA*zkpL2 z*O}%xEv6pZORp0QFc7Sb3_pbYu*{1ra|yU$d;e(EM;zJgqO3^Eln?#WH5ICfN>P={ zUWyf&a?3~l<1R-OUfE55oNS8OjiP;GlFoF2A|~c%8@#-I4g|U7H^^`BwWSY_d4_U4 zy!mgGopI~VGwQ?hIx+M6b&PBE>V+pC%R#e?a(svatsE_dN-@VxV?2>ym6xu2YAdg5 z;J9ByQk0?Tf^ExBlt6F}tynFJ{rNKkkL*$?dvh8vNrTD%vmH((wo|-Ml+6Somz_2S z!$_;P;)b1Gnf<}I1DgTy!KeCX)lO%#9QS|{TjQe{<=d2?JKfHnYgxpbdq9Hr9rXq4 z6aLB`58CW|z>;ZGIU|41Md>lwT8;8q6WpC>j{kBR(snhCRnFGOF6-GBmUwLX8&D8w z&7TT=OGWHtxbPJ^fZKd(Qo41=JR@iRBQ1QfTp^4u`U53GAMXK!(ylHnl`$U3?7X3i zGCFyOQx*xky%8(^*N3TjUd;_7>#&=uyZUa>*G@&2_?FhryrJYJk0v+nD70GK=%Sr0 zXEGBZyFJQBE=OMuyG|ub%R>lYM^@4rZ4LKn>|HIs4W1{c2#s=9Cc5+W=JUC*yJpzN zp1?X!Wv_iFQwGhfE^ueC$NyQ)J^vIYeAt`!df7OnVjsetvng_((TTTCLrv2XKV{0% z7w%k%APpFnr2uu@{r-E%`ky9>kA(&Nf6S-9TQ4jIJUGVwHc18#JkNBesNHZp8K-V* zBMsfuqeja*_QeU1ZR*SAh-viNu)P=Yz z!V9}HcRmj1)1n(%p}AY3YD*voR&1;V$-uM?J>{%5jSpB+%^gK417Q+T7cz z+9s01CXC0wjb;iVxJ?n<1KPb1XD^}!DzBj^ri+bcG5etkAETz}#16$R=?CUro*AmQ)wh|#P2Zforf^CY-bT4|96k@D1?q25=x&+Z4Sl$} z1001YY+fX&&SOoSw4=%9%#pXGF+HoN;|9m{X`BL976mchS6I*EKKb1>AnP2A^%7&$ zWAX;%zd!ZhD4B{`S%)(_o=AuG3MZm1cnOV}Q*d!*c3cW`1U6mzp>GewJcTqF|Jj||9`f~39z>8FjX;$5e)+5*VjuC0z7WaVnr&(|zp2I!)^zB|K zUS`Z_+DMJAF8Hv0jg#B^iLYJ!0c1~kp_;i8wVd(g4_1>E8nc}^W2#?@-@Pj1KOoQ_ z4Gw77PNdj7N_MAKa_?9rgv&2hkKAvWTOQse`9@61wI-tL zq)hJ>!uiM@bwsTXk^PDcXL6m5%vuRts*zLXFSrAb3hc|6FA6jVW8Z#Nbo8gWx(B@4 zug6?MLR7MW@%IHyB(cBMzzq3xl}{+*GFgC`zs+v%I!T~{SH7A{q&nSEv`OKZ^5_KG zGpD}R()C5S2Jr^Plt0HF{30vGgoD&&Md>3!h}!DFUG|9yF%)$XUqStTHE(eo3MdZV z26HSV6|LjRBRhh&#f9?RLr<}^i!bdU*-WIfXZbxxhEJqGEVEcWj zu;F>ThLc;6wt6QfoPCj|GQ2WEa_Ao=Y?hzV5SDM%iw?ED;j&^aX3aH$MMA$C&P!i& zVx3SI(~#nDd=FqAw3ntEp3#W9qeSD*&t&Y}VyrhHP8vNNum2oNy4X4Y_H>Mr>iT6R zPxSI`k>m8Le+&7`!+K-lod~hJK%IVBwnfUbyC&i00U)T^V?@{KhI5seF;eCEz(7}6 zZRzU+q$UDLuTQDsSdTpW%7#=CBU)FGJ*Lj`M58!^4g3KfR0nn6C_?aCP|T*CLdXtQ zPj3)eRLx zbaVVYF3X>%X@8_B{+a^)Yr^7tR`x&AM_i==o~+|Hh)af}H*6$PM{3iPU#YPrg!K`W zP$XtCLWn*nK#h4mcgML%D%zZwXF3!)_20b`FispYvSQEFqSg;iq%Pn^%)`RtcK>>baBOG&&p%X@-59R+Fr<)CfNi;6{hc_8}n*2)iyp} zFl!C2xB$~s!yIZqPer|YD=$ktr=3YOf4T>>Ly*hK?~x*U!cJGLQeKG9oyKN14}I95 zUrce9UNgE9BvP-cs2zkNij4EZ7CXwuXCm9)!}FcW8fR0v8HJ~A=XuY-W0P}Y7>jyL z52iWo7E?!=JjXU$DFz1$IEeS*4xRgw>M8KFgw32X&$CL#8ogE&56+V8fLW7Yy_jaT zThKa43zIpaaM#D{5z0f>W|gD);zA4&Oqrcbj;yAc=;uJ6yc~^n`>=0l#=908NL_HZ zZfA*;=x=z3Sfok5UU}?g8bilB<*$|Z;6%Qqc=|XDmQiilY%E_x{@oB!fU;laV-{n| zTq?7YT+G8df#CL|7UhwtzR;!ENv+t>4t`2r2)Nv`lAUUF>N4xpjU(nF0!nG6oTBW@ zRG?1!BG{p@zco#}f)gzV{w2|QCa4SZ>R&zz+S9pz?9N1Na7>N>bU_?AtIyc&i6dKz&@#2FU+;2=&MJ;7{W!a3weutMM9~@%zUNF1!ike7F}| zY@xa-+l=QBh)YYX#=uhaG4n;RfCtTT>9ps9>Vd_0O1eor+jPnf5_Gwicn*i~W5!pu z9ni}hr)M9K<2SwW0OtdKvgM0UDh|*-m3$CJarvqicroGkzHo`eb79ScO?;xFL@D*>N(p-A@<%j7K^~;e{Tp+!4N6PpA=!kAtT7~HAexXGS{rI9>sOziHkYTg zdA>O*h?VGZoI=fpcV`qg;j2tA3P{4*-49Df7)H$Z2WbjU$7t%So^a%{X19r|Ix_n~ zwi-uvVMY$(ti2z+QGkH|U>tGdFp@h)d$MgN-qS~RVnYXOQw!g9R;v0UFTYzMZk(rn zI;2qH4M|;;Zi1DT-%j*bBky-^CTNsm*UxO!gtR82=Tb*s=eG%(huJM15FZq=WZVOs zb&;B+KTYUp-W}4*9`U%J-%j&2W%6(}EU)Yr`k||^K_78 z4oY6e-Q!m|q%C-=lF0eQ?h_i$9nVO`8l@0}lL#%}n%nh|^-~jzD5ek9s-)ou`BCyJ zTc(w)ZANN`0`Q~o>-#Qa#9REay27SznQ4arsp}axGjpDAv3lJ0+gIbG4Wlz`aYe@q z(~!HgMHRew?)E+Fz@sP^fjI&#q*>be4L2v)$huhqlo6awHqGW)9~yIDRH zgd&ov5L;hkm?D%y{6vZ%M^FdQ$eJPpNo=0y@7OEOCUpnl=1>QJaqkx(a7#?l3E0gp z;&YGc;eeB+eN>#Oin~&9(a&B&S z${B??n=&K~0pMYw=M$KssI+}%^eY1|YRhcZQ93Q%CmT+OSYf?%Pne3j1#h-I8q|2z zN+<&nFG_DEvNg#gAe)#SH`^uHP5 z{fpw^O(3X#V^aa)B-WHBHA=f*w0cxxv7)YLB??D!kWDFSV-weFlblXQxffo*L%h^O zkD@`Buit9BX!&}e54vWB*fNV~c@~9F6*D0Ak!{b4M=CNVfiic8L+vCLG~^S(6;<3( zT83wzD*`qs6YQ$f;c#-Y#+#poOH~M`_%{}Tt|cHGP)X$S(v=(`v*-4p@*s-8bZt;Q zUac1?6egg55&mf$MXhXKQwXW|wcp(yv;{gr=|sR>xfQS#0N$;KHaA&bKheDgW-p_xVCO zU7n;o?gxq?n^tzy^_a_u9xBc3uL_BqpokM>-HDcO4s{9NuO5FHx6dv9oMz?Q)`Bmg z99(%tScERdWf|m$ysG2bA*@1{1vv;2{924>Xr|+{F#>-IqTK9iZ?Ab3oCurIm)8#3{`wv2h40G+ZXXfXDV&&qt=VC17CggwvD*2jfNOVxDCE zm3dubVC;5jFFaRB+N$n{!^abQ-|FuH!pHTW`O)b%CmgRe$%_SX+O)GQPQ< z=&hVQjcyFdzX!luq-G?Y5GoTa^GSc1ZaE}g6xpq@%`NlEzpzpnal%jHhdSqzIb~|ra_+qDKG1t{7VR`$KS~3A9 zFY-6%($FPmTfJwBnYxi@TD*L&Xn{)LxpCR>jiLjPJ>J>BDj7?Mz{3sivQ|z(HRuE( zQ$u`fx84x+JY)d*2AR@JW8I$gGgdOO!oUrgqw_sL+w30T>l6^*`6;Ky+OY8IXS0zsjGz4svIiqa+8AMfDp!B$X7FB>m(>XcUrnYE1`riKaSj?Qy#_-UC+e0np!AsoZC};Q6U<{0_i_rnUN=`Rc0H?ipJC(gYlFTLm3M z=ebM=dv0yG2DVjbyJ|N|zOlg6nnGJc|!js}fk=6))!ndm?{p2_HGk__jE?Sc#8V z%(XJJAaKwN>-cetS1j+mU^XM47i9bczv(Y z8fs6ftt&ytosG=#^_UnYeCeMYEW4#PBqN-Xe-{_2N)Ngt9%sc5 z@a=h3pJ=!mt7jfwnr+N=@~xDL6!e%?y-t+&=B)!Sh5Yc!RKD7r2IB@rP&EIm;5;RN z>DMFV*?2J($r`8Zjo8~&jf98Up|^J;rF{fpu#&JibK#bEQzh;exGEWog#F2l^(Lx{ zsU723BQx_eq~o7Dc%c)qRx6K_@v~vK|!LjVZb=EH;zAc-0=Bw=p5Qpj@6h4xCmZ;TIkZ zx6xVU`j}S=XSZH3ltR%XuO7L{#1R3Ti23YyZqUTY9>bLsQk28xDS{hwSYYZWn%{=h29PT zM3gin%O0sFzDl{bANM_=qczy>9sqzFbUI~0ws_nP?QkUovG{&8i~x)8TN!_M<2g+r z9W0}Vmx}uxxoRt$=7mQRJsJzrIYo#+U(Nb)Y2;EbjS`7s`OQG#VzT7faPFL^m|gK^ zlc_8l>h&ohe?5PDBUbXIz44R``xrraCJCkkbxR%zPDx5{fZS6;6DVV;A%mLdQpp|I z=dR3N{)SvtLwKSo=eSF}dfd+Z=OFu5w`zl7Y>%}Ft@ikiYR4-KB z18CBWC8-t}2DG!TUFgC2l=W&%FOI5;D4lQanWJZ=)orS3u1tAXp2i)+xx3^Uw#&~% zWn}Gi0W+36=fhP#;s(-3v-FuEp3mP0fdCZ{yj7)nqR=SX{Z*ZU)FlFZv-ZT2FSyH# z4r%L&Xb!IC)#gpj6AK)0cix})5qsb&dxPup)xOT`^a-e z_}0(8^QRhh^ff=RLcGD5V8xPfh!1~NH9##MrNHa`&6DDwl&jH95>I&E%V!ICl4=WXqr(&qf-R6)e zDfdF?STgQqyj+7^ceKu{xLgY*75MrT4Cg87GF*$aP0f zJY?nZD{i@tHa%YZq+KEeDZk+(kIbS{N^8Nod&#ciq*7kNt}@cXbSgnY-Li$GkZe$r z!1N|#mrM^KL+I~jvH#%5F%Y|65IpJ@W@hw({ss2{lRg?LD8CA+j%VTK0NIh#L*`d3 zS+|uZnrXt(dLJ@2c&}Vi>+)z9rc$*fXJl)tLo8q81jupwis^ROJ0Hyt)$Y}uQdXRu zGu}qVX8QttK>4i#5w0{5b|;*LP4KpbYV^;M`>;I9 zJ60C_9fx}hg(cj24tct#co7m?=Dd8c1MUdTreS)+7fZ2T4$%OYqvqb2d%(|%Em0Th z=Z)(&hv zN{A@B)pl!FUv4}=0B(1gMB~A}OfxYzXVBYAY~r8~#vZu^IYH)xzIi^j5?_cZONSWZ z0oWlZAj8?#aXLy zV2pzmaCcwVE7H0<(_EC%ZH{E7@AA_AbY`hM_32suU^Bl{QQajyJzrBAP2#oUN-vVD z4ePLm-%&ezBd@IFWym>tAFB{At7p^1nyWLOql{Jld-crgo80pTzRKf{4`{Lk`uhe~ zPe49sm+_B_JjF*>+y-GX#o;Xp3jB2&XAxfWvB3L?nF^R*I4N1s$g4~63EzAw%{#pc zmetGH8IU~)Z{FpXAI+L@c&oV+&7K64 zWjJO+NE0{1TUht=*z-5AJ29n^6HO<#ZNuSj%5x3P&>ZKAA-5(?YqnG$G zE7t-|pH-{1TF}kqI6~j7cs{ioz&x46W6qR{%bYmk6J{utX|OaklkHum`MCHuV}!ro z6@lhWR#B7KzeSUzu7kVudhpG+2evd9GX*@X_BFZkZYjO+ z)6uUd3M@6-Gb&XD2okEk+OWDd%zY+DsU?@+0!VVWJ};4P=&lyT_e9;&fl5H>HftIp59_5 z)VBvcUrdxxkieJ94BH+_TRn~PqURMJ#k+l$)q!~E-u%=J7u~_&YXVwb3sL4hcRr@@ zkEPTe!I-tZFIN+RM7xF6JPtWf!>lp_>k|!6aUJf`H$SlOXxm;F70Y)9(GCT#hc4U| zoR=ql(&-O&r7W#K{wSw&ay6GYEj`#!9wy*v<8QO!b#=P;jgbaZM5<(9;_gwKPEs~o zxZ?#VpX@AV2=;d8nR4I=cyk~1P1;-A&DV@kp$${o9V2(J9h>T+TpYbG482@TZoR(k zIj}o^oTDQbXtn2szcFi(&KzYpHN&T+Yj&H-U)6LDP^0$kpa3AZ2Je0a7A%`}AWJR9 z-*65Dw+SOkDi@fCV;-i3gpT%EnW2VZ@`!5kzav`TZ1YTrUv+j*cWXS=DXq>u_3FGJ za5U6q_B>wA9r8*@GP90nD2hDc6-zJ8%9U3NXX23%`8wr4T4-fO+V81^n_sHJ0{R>^ z^#s)}DwtCok;5g6(?zYU)VokYnS7mgYG0I^ic~^9Mv&|i*6atU&B+l&G!ox7_?9Ob z5y&i$ONsaCaPI;B92l*#;!nyK1H4n89y%1UBjEMV;s?cmr>{EiE|NU~6R`T)Lzy}I z!o%GMchi;gJ&K#E(N>S}Yft3hwybGZi#%*lQy0BfyE@Mz?QS+!wcB4f9mGGPbS5}a zSGDvE%;r;hPUyMEEzPF4gY6ni9Ij#g&iwH$vuvuFy>VX%zUbs4grSv_<%cxE%du_{ z-;Rp8XObRW>WY@EjSYw(`?-YfvyZS#UJb_vcAJt4l|_}%MC6B}p^I+1%*yp)M111$ z@m8-h6YZ@}Y3c;Ex~rb2z#l6)^4VUbA3}QJX$xb>-6p-N($fn`E{|?sJMR#jZj6TU zRWo!dH15$q9KfU@Gs*NXSswTsPyNTd9XMkr;7Z)Q|CU{ca4f@5F;$|XRv@%G`F#UC zc$49}zBOYpkqM2|F|T*IZioEFK!ub1TuVUj1`CYCBe zGNEFU85PmxVp~dEqD7eE+__~v?g};HJT#;)zVIA9FF5Dm4nHc*{kDac|Gppygt0JR ze3goft|IrPhP^29h7g<@S({VC9wSHWS3@3DU070OHHtipvCk>tYF^y2L}+4U*F7xA zlwVv0nYSrW7g<(gw>tS62M?2XAM}cO$sU&SbGO^E3L#4`Y=C?-tvq5y0RVf<_ zdTANuPpV!d)MLt&v!}#9)=6HKTcW&W_3zM9v%H_|x!o@6zvB`!pBiX$0j8@83 z(AHgX`>>wvKD3V*3^0!rdtpc>u;J=UmHV18bNEeSzgFF}CSWKt`DVR((BUd_Q^RhW z&s;OoxusP_11Ul?sna4SjXIRXrvm)1ym+be!`>hg70u$c$Q;w))?(=^+xYbmsAKPE4A2oK_BjqV4 z9(>X=-Oz2nEW=Z#BGxxn$Te)2R7b560Q~#y&3{^G_>X09VSz{DPX?O3P#p%IXm*%A z4ze*ybELA1B?@kdyb4|__0HBl=EdDuw3D24=&aOE*yN&bPr~&r$s`<$J~w|9eY}08 znxIIPPwcaBz?-N(_h?grjz9RWQOqj)Vz@^^#En+8|FtX97xvY!CAf>=T{js+nD$iEvw@3ot$^`o^-Xb`LJ^p7q)$#p&1uw*(}+#kMk?6E3rQoI-VfZi zf5joXNuJmsAc;|W)7YRYV&&ij-qJv_RFlb+%knYi6g1a3ue;`ay8LF;$l)HKa>Q`! zI^4n0gDT%)R^Ia=F&F=gr2bNf|6HS1zDzFy0^o}*EP#ID_>9`Sg&HUNN_EVjOd;EN z?k+GP#4)m%F1b;Ca)Hh5q$At)s3oU@6I0dW)tFf*pMqZh!jkZCjh9QHQ`lTsxMM*@ zxWWN_tGIm%>=I4Qy!gm_2#)EFg6PeKa4(I6@?_ssGZmZy+m%iJV;v7ZaF!=_9ld9> z2br~RoPWYHmvAW@d%^6y-N>T#F%=1d-;jvw1vLu;Mnf0^o3`fMJwSJuXI9y?raN^4 zou)C!JOtkjL~8p5+mZ8ySwRZ<+_@22q6U`bE=l#LIJ2C&3Iod1-98m^hD=dqYJ2kJ zT0=Y@Zg7ooxYcVRyCfQ!n~8hMZS>UG{As7xs|jhI#s+2Q zuaj$qVJ-3(Yfa4Iqjwyd9g(@}TC?m$*?Pn|vPUI(hG<^+QinWO39Fbl9PHb{zh0z!NW% zcHl*?*wb5+nr*+is7k#*aR;})VLe^EK26?P7R*c4Wr3LTgh)~F4~~AC@bp^23L%U*Occ})u6$|VLuHMgoDPrE>H$7 z1KthUb5m8GcwA-^(G4tX;d9MzZ_)9>99(LM-9C z6nvse{>-lAn*V}-JV!T-M;_#sBVnAQdFjLyK^D6#r|jk}W_QQByy$FwV2uWV|eA_*? z>)Dn+r@0Kt2~RAukVDhLm7wr<*%9zE@{j0_G6*^N4?8s=@c@zn4tKB-YMayJnaPr6 zwDn?hU3Z#-nYMAkYg$23xH1!jNEVVs`BI6cR2c9I=vV@|~rQ0cJ9iV=Tr5 z2fOB`Y&Cqn(2NNbP|-Ie3-^Fx?bzdP`$bdNo&(NB-qeQ|(Ge^XC1s5;0opg!{_;Twc2_od_ zCaCfPys5=Khd2b!v5R@%XzhyYlXB}DonSzS_8M7zD9|Hn;ywS!-yJVNH;hZlECsda z-<>viD`F2UQ??#n%i1wkh%qgcz(X|)TCGVWN27OGmAH#NsbJnx2;Wyu`{q*qMS|a9 z4p(9JGDH$`uY>divqzUD7t`6a|1EHJLh$(<`lWx9^Ajgm51OyV8p_#yY>qKsX_O}(#pKEsk-k9n! zs}gXN!;s3K6TDW_Z(K6I@#yp-AEY&>e2Flnziqprtbvc8Q4f#*x{jOiP2x6-e?9(= z_Z~2w@l7aR(1`xyxAl;bnj&g#|AgdcUw0Gfu*mO*bT8MuxKwfVCC3%Ia%mCS-wWcH z>z7_ke%VJ;d=DKbIE0LKx&(tChM@CleHycfk1I6G|Ia~UAJWU}J> z600APN^5^JtvSc##t^HP{g}WSiRJQb`XPcCXyrDcyrRVE9&lQqpC-z3$;nTA0p*Of z+Se=DNFe~g3hlTBFNtm|dljMT9_{}>?7d}JTuYZWjJpK45G1%Z?yikP13^O?XxuHh zdvLel?j9_-y9Wp%!6hVULh!daCns~BXP$Xyu6bv^?@y9kS9u5B zUqzX|nV=?ELh{*bsg%PUlkN}EkRReUV4-=*l0bykD%xnkqTq_^*Orq^L_FuiakmEr z8G{JA4{M1+LN=Ew8w7p-M|RAgi?Y<tB0!{-fi{v@pcE@c1ys zaYzg>0{{#)*hm--c?9T4M(B?Lts5TSAG*ikp+FiEBaHDM_YnX6@b^#C#lLn*{MR5b`1NX=6h`mQqXqxG8wZN~zdLjAH$eWID*xZT z^)IRZgIB=+_gD6Rye0mpB7dA|{FleV{>Pg5AKGy6ucZGkRQ+E$Hv3PQ{1d_?+#WK+Al5&WE46Wg*ns~aGPkgFuyBBqliRtdn*9rk zW=kk*vzfhO#&UP^KS;G77?uCv#fIjNakeytXg}0r>EiJRh4ud|Rkk(6-N6P7Z4D}<>mQ9% z{-TYh{6qeqk`e!tWIuI-nEwAM6v;38Zng)4ZHTFs29WImeTzS&dj2<7?*BHc_^&3M z|Cu5D@7TGE{wV;ZtCJ;^(j6)R#8i;-Z|$2raNPgLb^S#7KT*i=Zx#NJDfEk){2%lY z`S0lStE#_@=9j{3P(J|6L;L7&-ShvQHqb-oE?~+B>Hf57+Xt@t2RDUUJ=n(I+zgth z2}(onZw2)?7qFcP1Ssv!;%@68XlZFGC}0fchH&%oK+keEZwjCpujO*wcu zxVgcm{2X9tqNjiK>p#p-^#855{>JzIlQf>|86x}#IMt#e(Rby`t~17O>Ntjwj>pE5 z9o35vDzH55{?SJZ{uf;H-wV~(JpE2Zm$iPlBhz7fb$Z`!<%=CAR?Koagj5D!;mcFY zUzxD-|B#3KZ>aoBr}$O=Z<(`x0`S61Z&1(hTXT)Pua9c`MhxCnuiO*4mugJ!W5#1^ zJ-nbHd;DjV|1+1@zl`z^ePwUw%;v`VkiseRA;jmI|GXKHZ}#UW>px_(hf>W$Os$|H zA8ZS8fjBvLS^wJ@;T-U%My&stM*sE`=&nbKo3N~z*POzh2cLQv3_~ngDO4`suWp4+)Zp;ogY*T$cI4f*~x{N%FG60 zXYOJ_(&lYy2UW%Hp=L8^pt7?xgBJPsy^7uJp=lzr>sE?hJFQ>%-hFtep?k%%QxBNBEx&L2=)c;Bfxj)B+U)4F8I6=TJ z5L2UH!OuDPf8X@~7ftccs+s;XEB`mQ`f1{jisN3QYMPnHkHI`*+&+e0K*p~%5*CNZ zXL}PuflZ`;*30;x)%(lDe^$F4OmN2va(x^jis{Ww5)jVxIpK2L>s&T<+`Ud-PfFom z%*&ji3HYGm{X?Jl|IO%OU^s7on(v>!#%bdG@6GpD4?}I9bK=2%XM=T-d-7rFh^Yc~ z;rRf8@LYgEII>)LXbw0ye7kCfg0BNDTTHxHFHE_#&5_V*13zTlDSinb)0>;4LQ=e_%n;=jJF39-jUD0e3qp+-jPsfU4^$S zuNlyjT9z4usfj*cwW?8m#Tu0flfyL^^!Y98zD_Y8QQ}eFbMt;|sY16AElMEL$2!vJ zj5kDZq(1PT-li07>Y=%JuLF!bSIfeIU%O{+=$go)@kXpwHUM&K=P~m**F?e$l|k~3 zO1es>r>29I2k-?oif^rc6fy-_B~I=@q6{Ob(0P(=;`tpMAgo1@wy%S^b8JV|Z>vRQ z(cT&%5S-IzJUYsdE^3xQVZ3Dz7fmQF$3lw}(YBU>o&#-Wt823-e0mS|?V0a894SRc+|CYOOaBuR0!FM!@Lb)9>j{6FxYNE4}9tY4a!5dpt-DUV)%?+D1t zF_mA}LGd)G@RYa?4HbmV`&#U@Mw$Piw^W_ybyRAFlMCl1US{T1yYB7$(le#us-rwd ziVz!$-6itlw@h2yX5pRbc(p!tAHlX0opy_7ANRP3Kuq`Wt|?{^8A;>n4J6r163 zG#Ag(2OVD}b~X}@0v zha&ZQDeLR`VL9p=@h{xFt;c+P&B!Hgd_Y^ULPwxAvhA$~$P-h@YxxlGspySfN;5pq zypcSY0yka`w}9O=*jsAXIYml8?Yd#d5N1&&+?UqGDodsxhs?bE)?&TB;SsivAE{-(9HYyVYuqAR=2z%c z3~CmkuK$1_rV)~F-}oq^M(BCbo`A~@5}W)qSrEY@^TtBT3!TDL@X%>;&miJrr?U{+K_X>)xhR!TsrAN(r z!1RuXYGqI7sML7_qARpxi``MlK4_h~fVeIRb^#?oJf+ssr}cH^cSZ9bN9PCl-Uvr5 zi8fSE0_~M-M&!LdpQ*=ujCwcc4Kr<-##xlak&@O!w@ZaePP+R>&w=;T0wZotVXuAU zfbC{GD&u`%q`Ou%ID)C&Yd_~!?LON;+PL{cApQPK-os>8m#OiusqF9neeFiHv+#A_>I7C1b!p% z8-d>l{6^q60>2UXjlgdNek1T3f!_%HM&LIBzY+M2z;6V8Bk;e4z;_*Sfu)EWLw1@} zD9J5ZeVL$LF*`UKL;qZUE%%3p(gD6glkHvETY+Mh=BT%0p^s}^&E8plGvyi!sw72i z<7)h#w|PLa1_KKN1C*A~bk91x^=P3Paa=;p@Q~j6R^8TK-d0}Gb|sl(!Tt4BKkyh1 zJ5EX=NnV|(Xu(2u_V950%^5I5wZL$~d)A^+C_z?e6^AxP+LAT_S2dg-1s4H!L$+Xs zsI8)+t^Bj-TKco#_AeAT>Fk_boSa{e!y75kYChtStlQbyeFfXu#h}2!z)atYwSH7y zzoWuBV>fay@ZVJ>Fg3_JDdJEhdLw@}nlNPhji#j@UFH#ad2$Oe9a&)8(&3TC8a9p> z!-WW)>IT;QNEjK~CF43Pk*N8aa`{pPE=pnKf+;m;5jIJ)tM5yk>DXD^_}HZ71M}nMsDBi*|C{Ei?kM6 zT$N}&6VbU}su6=qPw;u-I9X>}$X&U7C-F5!blk#+(nx>MJ!Yr=>6I)x`9e*&7n>~(B^qOa812)-<65Op9R!?`;OIqFN zzEVS)*Y7ee3dcW_N&di9|A9PqfS7T}5OuYSl0C$oWd90{sx_Bz{1vsBfDm%r&UZO7 zG%WB7G_YO8p!+-BA4BP0MAN(Zs+e388%e@u(H8?2Bb;`3%$D*|bvr3Chu}{&iuzvj zaW{d_q@L7i;(iAymFVl8XeV=Hro<}@yjA89ES~ZryD0P6nvrGs(x0>dA><*EX&v@s z9e0Hp_!fL%B2x}@xpeGWNZSZ=&$tdcf@NIfiHy!t`KA`COO58hEKPS3$qemlswB=- za9Y*~O&3QZa|lA$}R*u zfH_Gfc^52^CRJ;&zz%LLEH1CZ0)M>wkv7Ui@^rHJnZR>YR3{PDNJjj(Z?v{wH_*e5 zAmnNh97L)xi;t;jyHTILeh2#|J4*;jz#rf=4&&uFi=*rNDpjX7%v^$&KyXO&5#uno z*Y;tJN#T2zV1@{lgb#8Q3h~X8aExKnjPy6APJ8D5pUv-KH`y^jSO~3AQ5l6OJ(jV| zc;vT>%}r=|^E@qwnOzT!sf#IN&$M<*%@*OZvXiyVMWx_u1IEe|^vc;#H)Ce}% zhpo`OKfbGUR^hiwn2jJte8E|SOWO5V%~vlb@gx0GuuA8t?o*_Md zjNC;?YsXNfmv$nabE@Q%cnNYi-D$wi=%8%S2yRi}s{EI!4cmSbNnGud>o2)i(;8r79DSSRH_Vf z%9)_^Bkx1WcN}pO+-IzwFwtyIX=sr^W4H~xx2I|x@{*s zVv6I&OsHjcl!nKXRKSa`lC|VKlm5!?JX{bEiSKl<>^fpGD*@BZiVkObItZ5a&412W z3VWzpfx>?leXol8-oc89JCUqs?TG@nM69>t+f43&71fXg{7*6?p^g$`z#bjdw4ybZKwYgABNR`1HF>uFuBk!hUJB?~x@Tg`@vSoxCZw)QLZ;oWxW=0cE5J|xZV^IY(J^`ONU0hr07GMGflA|HXJAPuMWC+ zae>Hh{ZY_5>^iCwa#@Rc2R5?2`Y|l4b&oL0ZhKXp(F?HTrgc+)z?j74aai12Oj@9- z-WoLXEhp15c|{9S;_8_G*99_>8~ys7n6IQA~n>>KzQz0jCMCzt%bQq`)h+IGt!ga@D3&Oft`)f_=-!^ zN+=#=kuDKi3ZX)Zlv?8mn%@q^)YOoH$9j=_K7dxQNOE!7f{2ra4rDXAnA08MeI@*j za~|7k$T?U9kWa5*#8~>Z&OjFtn!*YDwQ^!}?%40 z$(Y4fjSS8miDc=u)0=GfB=da}0stKK4e+Ib7Lf3!FTu<4sU1yLa=m@y3;Y{>XC}vbUkqk}p@%)*KMs1NO6l zHu3r+XL6LJQ%7_1NCw>AFVEwzf7-&XLsvY6VZsp!L%Z^UYMxA*|3icOgm z8byhTzw2%(_~kARd2zFPHjI|ht+*{gD(oq>NP@~~wZwe6^3211SvC`@sWt|w%(CDu zm;jtN%Sr@g)p@1JT1Rr*2dX_1rrW&Q%Z3YLEi9&bnssaXZ|UpcOWjAc>k&0S7);WO zAETT5oq3w7>-MBU=w%_#;}IwJ@#rrzJe>LZB0S-;gRsT#TbHE98q0t(^Qb(+4uJcKEygH)^- zTLBVLGTfBWpWlbRNaFx{LE_m$j-L?(BdUv0(O{r3F@_UypTI8k_3s0oEJ!8DXpo!h z`eNngzbx9D1`(%5GTcKaMRcGV)O31;@kPT z1|XS%{-T=Ji5=WV7_l1gMSW-jC{p;@zL~MC&JXznd_o^MR(;TAxe3yrtEB zqw?Oc{<9tT=mJk&;O@P0SvK7Ku`+w$u{mGE#yFo|T*Ol@WD5<7-F-TcU;`${d!4%J z0VzRQA^1k`D-5Mv8-;S^# zP8HJIc#>{@q8M9VK`T6FN}ZtpxVr-}B2s;@_Br851GUoKV=?4Mf$Ca_jB&z?r;X~J z@`d5KK;0Q#R@IwYtB5QxCuL(-|5;h+MUMArgRGyP@^G{9{$p{i4AC8JwTvICPE1cn zw&?(&)=#KVj}m!gX+dEY*lWWh5azLM*jzc|0= zyuJN4*M&&K}Oo6m+e zoB&qSGjo#JRJ=!$?RDS+H;FJDXB~qASb+}&94?#w_N5SLrG1H#8>b*=5U)bm`}yAH zg}ZH}crt06$1U{$?8zN_X!=kGTadGjmK|9OXWndqHgO1YdT3N+au&Y|jvlO^1-r5@ zp0{BP1k9aJJV(UGC;usDR?PT>ei?|5_qloP#*J<`-fyyx)dyoM z-4N7TmZ;HqqV=Z7`R>H_XTu_k!(#|R9q2n37$C15Odf8Zk@1@Jn;Fa6X>L@P;^{03 z-7h55mf3Oj*mOBzY*~iymIMJxh$GWh`?FnK%gzN6jM&tQRP-&+LZ13_+s$8b5E$hc zlW9B6?lCf>_sz%N@Lm(97V&iLLU3RaGL#T@@puHO7O^gmkqc#=m6W6Fp7G zdEo<2yNX|!M=*c9>PlI^&^Lk_`EmS!Ju)O{rjwp|`A7WJC-o1{Ofqgd^P5mgKB4v< z9_Xp4j#SjaeYCeYRrNJv)`jQU(4_-C`Sz|8!5XU#t*Ft_`FoGqwydKeS<@_n8Asso zTzu~eO^+ApXY@V*6}}C%!&hv*T%!oM@HNvBGCuRBv=zIu)}>w4g710ah@da~qaCwh zC3t}(JjPYV<+2gH!p{nDS}yxON?4w%s@tU*sLikj@uqM)j7X=>evyOGdWqFrX!hJx zFML?>9Z@z703$JhrQywhVds=~!N!0D=V~YZAJ#rNKvIxyt5I7F!C%r25_G3Az(y zDYX@xz!${D^2Nr)L~N3(KD-gYbUk#%Gh*BC?J9`n!D75!eB+PhimWi*5uxX?hl#Up z^z2>b=Zd%Yq(0r%;~wF;tC~eHIu4a;N15o~WS@7ZrP}cNA25Y;jx|los$L#Hk{B04 z(!q1F-Oqs$LTbYX)4`_IwHbVXP~?u8*x3G5cF2@apPkKB#|sV zPxa$NX3tz-md0$UNqPs^vb8Iuef-?<(3tDP5@#)8i=oHg zIjJ~8C@Jcy0>DEdg6ArBuakZkuVXiE#j!nSz_cCpeA&b9(Rmn;o9;+~k1SIoZArH!@U)*g)llw$fZk0act zh|dy)L&x{>W?OaJ%3izF4O=}|H{p7|B+YCrE@!O%nbRanJbHmqFdade-s0RQ(1|G- zF{O-cS%qG~+f%D_njcqw1V=oe>%;wf43BM?(f;Vh-~%J3h3IhIw1OmX8Y#%hZ_087 zcZPab*CXqa?uyIuZipmx_L=C@9e3k2-J7|aV@AI!&5AZW2pv{BpHptr6de^-gQ;l& z{Uu!hn~z%`3rT+gS06O9A@i%%lJg%(p2o@A-ft^SG7orhE<4NYScyZ+kQDEc5^`V^PVERHMGq2NFG`rC zjuY%vXg+o&y>R1<^2`Y-stHEp#3;Z_Uy3r2!yBJpg4=qF$ilIoVa%kl1`!Cm44=1b z$@-8Zk?3bk92y~i+^v4Y)F|pm`V?-Hk#pp_M48|$|C}J2zKIWI##eZ zjr5ecbL7C>V?Q<1=-5h=G)R7by!u%@`mVPaUBvd-0IYPL7~$~zj_Cwh+6WrPZ9JHm zjsUWZfBW2?)BAF^#wlXj_chhlYhg$ao(np8@%73Z9h}@F=6)RcT&d_l!ipg$taCBC zFtXSY(q_~mwV>1{3?gDl3^Tx4$NHH9UJD|NEm@&3Dkb^|;#vVy&j=z2J6#RIwnk2w zB$N^J12vzEO$BO3j~LWn!U6I8zTu7Ue&&ia?uURP0ASPNxQ zuy@)U0#e#rX^%2e-AF=bqV`PWEMd1p1pPS$>WxLYcdz5d+W@UH1b5 zALmfcxb|9u3@{zU##f&4STH)6-X4^hJqQiOPctwGMpD{u^$nKxO6c(*43?m@oGfa8 z%Jy1}m=(5Ag9Qh0s0%-s@JiX~J5`sMC6#yEqKKT44<+ofDWk@g12? z$}yRN3!&^-sxL7dA1xPlhT{jCE}TA71nWfYLdRRpURzBkRP+hhB=exc{Wr;KNu~Wc z61%Ul{K3SMrsonD5@8XccV9|l zXZivkiwDp{3hDaFR3V}H3`LdQ7#U#VP@tUjkOa?Qv(GtsPdObhbcXP&QWV`5-|C)F ziWb7D4AjhM!lZDU?@PGK*-me@S`O(A5W@hu7T*X3d{{oh zMcY3bNDD+8XGj|j2>2*l+yd&Rwj0<4r$gIijIE6?KNs1K2pc|j@z<*dpfC)TZ_SO$ z9H?lM;PTM;uvcn|l~Ub^ju%S5C(iMRHOcHV1$s6SYVr2%U1#jj>5chgB0+_@+k5+t z{^D8W)|AyM39FLs?`tC|>PEEr5I z%f7^>ny|^1?QMpXG0x|{v#G%@XF-!+leSa-q|!@?bWr4(xy*)7u@WMK9lB2T_>npj87h#_qUy{hA-zcNOA*+T`7MQnl*hq%$Er~S(Uu`hC=mFhEh&*>>+Or8z7%>4 zpG0x4EW-PYztgxV8D5ieYa0 z-DvxPiZfFnO(({!KESxsCnJ~~G@@-wBbkwH9?>@wMl1Qw%V|n!wi{*sxi>DkE?ajx42wD#@Z_84C=NvvvPUDX3Hj0 z5yExzV6L)haeGb{NflDgqvpyur5ze|raJG8(tvfQ;Dm!#mJJB8EWPCS_o{C{YJW9+ znX^q+(_qdEp-d{kgFZQhjs!o7UK~Q&Au22YB7W|hR~tQz#(wWXXEN&|MV=_`99XI3 z0MSVRv|^Hkg6o5o4=~WBacOsL%W61Q3oX-#+#@>gDgd}gqFk@LTx;nmivfqnYB_bugtretm5Zq zW}cUMIUJ>MI3F{ZP9p~dy8+i0TQIXuZN-Rn{rLeHi3G4g-fjS{;ysa0s4H=YtOQqL z*x;+SevGXN0Gl5uzt)T*TI-8|aKW1!Tc$Oc>&jTlaF^oL7+IzCW%i+UYi9S~YDNi( zx8C}Df%$2-PiF9J(FXxawjL6(?XZ=foz+L@dVAWI>+pFx*)sdWs9l?Bwl@YA3Hl>%;5=D56e!Cx$LJ*<-x* zM-2>%s?=G*7f>>Wqj#ru8`)bK^XyEct*xp=!T`DBT6}f0ELABVZ24mFIs*zlj%zKM zFpC)+1ztBmM!jS$1&n4@tet@qw%mV)QNSZ0=9hqB*L5q|RbNg@Ky;c^Ozq)~2dCBP z%9}iL$+||$wra@2*L|5)qprs`Jeksbj)|A<0+dx9jlMrIKwae&McJMUt_%AgnM>Q`KsEAg;bB&0N7_pWUb8CM)L@ z0b@+g9-4osKu73yKqm~tr6o~8BHN_n{=&hfXUC4ijGQpe*fNBXlg4Vs%QXBYTVD}+ z_BPj*8fts8lU`c4@H0skp1e329P%jJa1G@$h8jE$fq3aMcXXX5#_71=j;aAY9!Q#1 zPkE+)i$1($ut9H<$b09H=^ZC!I5ECinDA&WC)=8jRc1z$KCRCDfWju;`WQY|w%rD9fW z5yro1Q`>)or>E(gaZ@~-T!oAy6(GriM21Hv$LR)BH=-+=ug|ddtOwwlk7X}}Uh=}x zegGd{F>?l${G0b5nYDA%#L>3pe>vT&Mzlwq{;4YLJm%t5Xg7mQRN^ThZY!z|yk>illr$D#;^W*vI{p0KG+R#cgx6O?wPmQlj12-Wc?@eu(q8h%>Y_Y6_a~X9<$Rcf zFLlO4FO^(b?)lE_o>c74Y+XP(%sk@6naelUA{9m2fUnbL>(F?VU5>Eli>0&{U<s(r{R9^64ULw7tq3$cPHTubIiBU(Eu?5D(9-K*>lc0 zRAuFcIpyBdui_CE6bXX#fHZsF9d`RoO%*X^JTxuY2(EKjTJ5urp;F=Ic2jxzZ#*Z{ zAzbbE^Y`>Vz^AJ=kHs^>O91o|wDSVwSM%%+H9v40Vfp}NBbFM2i{>7~wN*qr((3_L z)O!ub`j3Fj28OPS;32v6*$T}ut@2vMu*oW^#7To=AJF{_e-NnKCGip4`ll?~LZd{L zo{2Gl5{*+m#3m>uIP2Wps+goDC`uP=kV!3i(8zO+FFBe)%)=rNTN86(yq2I`&G1WU zqZSG(JWD*HYAo|f_h*m{421Mr$1{l!#9A?w*$bT|AvX&(f!%iEtv4sHJkj3KYOiri zXBCH5KABRyNVN9o4d=OxDHHK9zh?|7o8b4rmugoLBnzh4<_raUOGnYNn0Z-hAgdKS zr!Hs8lylLC>e{s|lZ5JyCseV{H?(=oM{e4s)uX=qyz!lKt9ghq@zlDWsE?vLEb)6m zC>`Hp@|C9)KbjIoA{YowcrjOv-{THkAuzch>37e@*JctB@{E~@lNH0+c~nsJ0pgE` z>dcd4HJ@2o6L3*{wPr3uWU+qBmFqqe(jLairYcXwY|lLHzL6SsJh%GToUTYI0-+hM z*kTofy@G?s9Y+x_l;i`oY%Aw+#^Y$ah@tMVd8YCG?Kdq0QL+tB1d1JYFdG|6xS%5{ zF#*~2=f)>*vrJo7IxC}FD!;L1hzsFBJ}Z5?1P#Q$_EjT@f((QL%tX&r90P}IqCoGt z3Jy0+3310z@E-?+aET3ix>#n!jV!6=&GpaB^ zKC>99n*xINsVG!+I)i~#=gd%M$FacA#6@z!l@ewsFH8FiEn~vb$FE+#?HxA22lenX z3I#T^5n+RbXZiS;~SJNBa)yOg}(~_SHtY zj-D9=m%rrosE@#PyslhkGdnLyKA4<`1-EZcwZ5kaUtw8WbE|-US^zG*&n{Bpy@$RX zG6;atki=rrHo4Nn74%qVuO~g#7=8&k3Fj;dlz~q`t1-}z+7$akX9pG#;PdLoyTF-3 zJ_5?beiMb&dM&SGg_Vl3G@5CG6qW)$+HG1>;^N}*_if$H#VK2H{q^}7xNH$+3W(nm z`Wc^9NcNjWcV3UM*JX@En{}2wqHUIkMSibYCzHm(!-c<&--X=>K$E9@3)Ao@)gj}W zy zSxwfrvdfxE<4S#zjP~yybon+al_bfegUsUR>9Q?bL~ArX&%Yp~H2h#w^DUY4KwnBL zTDcr=anR?&NaR>Q3+!f;buEroT)%QGlhoqz_QKZO+S^vTJP{0V?u@-FD>G7|y(+U) zdSo^uG*kU*v!e2P3 za4Gu;!)l#47tt$w&M55Lq-!cFFlK69uhX*kHb_IPHBz*P1=PJ$w&Un`Oxg0=j}kvb zEBJMVzeZ>i{80Lw>xMR8&qNILthheCUT?D3tigqQWKSTOyR4<;>Ru}VVLRH3LsOP` zOcHFF&AdQBY*#r@>unWlr+7D@^v!beLcMw_N&!0ejX@A7OGA;44K!Qk8tA+AC44?- zmLHd%ZLxTZ#;me>s5OR{03vX*MW1LJKoCr2#mj$V^F=0)e#Q{P22c>Eq`(;D-?)NX zI`%a^yr<}FbabdYHsVWEO-Nbk+@v$~VOMqvmhWQQPNd>BBZ%q=`cu*2mn2HQn60A9 zCvasGhxtqdWiHQ3BjeJI(xzRpXy9>^4A>(uufxvah}%>ftMfES084^A@IG8uYt^NPHAJcGc@5nwX^t4hLlwmSMUn0gt6jT(a zk{UH!wj)aW)cj-R*fa#X-~}6y;{3fZqWdG)b*;rtqByT`?lXMyH4hz+G!Gg#aF}15 zR<%2mOXsM~2`*8~UIts^4kEuloXJ~mdnaDR1leIw8*dYLi%|^c9^v+RY=C%gk*;&i1HhP)1822WM@}L38e<1 z3**|xE1rQj)lw7DegJirBWbK$oBqL!E1RS-rU?6uy^HF$}yHt`3tV(J>_7wEPOYph&vf@kINQW7@;1k}5|)L)lYKp3*G_GNbvt{i4A z?7!DAQWTOc%i`|qP7D-9lFit#b(-$afQU98IU?I+M9PlH;`lmByX!zA!B*Re1nihp zW1Np+lTc}^4=>45+kqksqRBsgv^Htv)nPN->(MsnHxRaHD|Z82&CAh2)9jxoG$#Yb zjm)@c(p{tV%5_YXTXDpbrzZz`E2Vij^ZVNt`8n_kxGLRsIoN@Z60>o)Nvzd|Um(oT z8N@%;T-u~7uESs-ma_EX8hjTV)-IB}KxOg3c9fHl`B^=2I;!~RYmA6-!@ znzdJHbXfvDQXVnA01U2JhDG;00%c3HrrKG@pivEsE4}&D5v==ux`k25@KB08rA0a~c)6}=gofIC&$IyuwHqd#GJoGBG;3G|3xIJkR#dGK? zD+r!iZ!E58fV&Qc`%HNRKjAi^fS$9^1&CxO@txW2kY`EQQ*V(*Ke}T0jyDv%qwxWM z=8kXUc&~uc0{e~-{?z8zQ1->Gylhx~+?}=Q{-E6+NrrT*v zH$2<}=E_jGg1E8J$T{gaC+dnEjRPM@aIEn~hmtk(JIeEpTh6aK4%aV{R;1g3QX{R# zgzJ-S?Ml#|MTIQiq(+yaddruXMMRga>X}Fsv5KI&V2&_oR_I-|32V9ttB~lXj5rtE zWP{Tl)gN?_WXCj(`?OZOsur7Rkvw*sywGA4YY=w0LL;jB&Z-@Fj2Fx#O)!=fy5ZSI z1gqKXZ^ELC5IU+k%^h08M0!uG&T>|$QFv|e=37yJa8^07lSoq5y1E?G5_|f_i*Kcv z4WAdipVQ!|+<0!C$BSdp@_eu~5()7Nu>0Wj@0Ad_1>=xcXiH57hHb z1VKpR2RDxdJ82dqX4by`kX?t9;rrXNgX}<^iqZ5$o5f5%^whvK2A0=NC-Gouu?7rj z`->L4+_>q4a4X#omHPFN>BW(5eNZ$CC2v@swC?<9rr!63W06Kg>uupz6h*`fU&Mv) ztC<%TMrMJ_PbE`eTh&t@VPe`mF%w%HTllfheKl(M6jqU;F{I%nj?ut)Ht_T?3|t@B zj@zKQ$JJu3Lf08u&xx6=a&_C#1YFG&_~sSQSf|UAx|P7-9au#ZaM!+7WqEb2Ri=U6 z?9+B&c^jopdN5|xy^xU9mj^28SnTw_O3}UKqjL` zi;I~a_KpF5n3uE-!P8ksc&lOU=KH1)ro=a9-5kf;x}=N4I>Awkj`YmJZ8ZL}_ou!J zl*9st21VeBO6Jvi=u&$=hE&9n!4i*SS-_XxTt5(zbjMWhN18&Uxm1DRiwqCH@_@yn zJhKC}sznx!AGCIN6J+%|_9$V6rX{J* z+Iu5T%o$M4Ig6GG&GFs%O7wnaf8NE*WXm5_8J0y}viTXU&pVM;lgn z1|~GbWSFHVNWh||RwTwr*ZQ19mY&?B^1d5;Tm(@`)u@6ui8|9}(3Z=>{Hoh98C znRCEbNhER^)IHs70ianvu}PQROJ6|le}=;aq_Zq>v}(+oJi@Zgr_N#;X3 zW8%+Djvm2orosTBjz+p;bM$)PGfGH1w|c>*ZJZo+V*)1=cJ3Z|-rJz8u1(DcdSGUH z1U(x#*BVpTB5f1!w?fY}q@$zKri(mds4!2KjNe`ds>3=QP=taBHIC)`2}fw_pw=5U zVFny4*E~z0556&5Ya>UzOfVbE^2rF%Xy9EOfz1mlZ{GtYR5DQBgr%E(C9JJ4wJTu7 zh(#X})yRY~po0U!?$&ACPjB%p69Oq(q~=jSG`<3-IYfS>(vR$!590Qs0#8WdVjyW2H zNeX2`539jm!bKorWazi5NS1~{=-Y5?)Ke+|K?oTK!DTqMv$J?oNOt0E3;M|Z`}|p| zGgLGqE}m@hc9h)6jf+RJQ%M9H&&F4l5ZLw*2|=n{B?1EJNPZO|LKq-XNxu4TE%f1a z#>N~xvKrGl#J20a#>EV47{w9tD2?yy*1|VLlVq`##Y{B?VQZUd-!;FG!IOD=8hbHD zvsPNkyU-9enWE4qNeI95QI>!A+6u1^Hfh0u&r3Be&f=tQ$Pv}<&eXS;v22HGE4`%W zhJKIb`xVX@N1bL;Y1korFK;WT?-HK;@1bmb)Du^S!4(=smR> zQ?8Oy&SWQ;aYJrw*9>=nT&HMTy-LI*!X32v;8*SVN9nW5_^wz}5t5^2--F>9Zi|x; zUbhQ=X*Qbewu91xM|c@!ofX{g=yo5OjT3)xp;XY^=#NGQG+9^d-MyhPMpLu2iOfv~>{A{UKuNeD3c}}IhlTNy3D6DKO|pDV z3UdDLQZ&`Ob~C^o8FmgC4Z96{pCnDG4;87fV~9TIC2O@$IFn7>aPj#-`;wM38Kh31BCDh+rqh_#uhRw%xEgKaC7EUmgH_60)LI2G`%!t9Qc$J_o%@9l zS#IwvqiVEqo(Q^bZlL;dPl%CNm*w-MDFHv)Q-4o&YO-8)-T6ip3XTjwCZxl@kuz4C zK6;A#QkfqQjX1fH{Q3a=h%?@{g@Gx~o#C8oyHiJb{iV%5h-m`I!eARc#Zrmkv97?o z&iDefwsP~15$z1_>a7l}YsQDhFJ0kHuDT=T$SfVIn3^_gOxjw5g-SX*ZCnq#*_Ink z1#tWP5?MXQc`cpn(hq}*3RHn+x&T+zms62AT#l+qwKWFs+VL)8ii*lJ(#glz0+bGN z4v2q{Hi^#z2P>(v^w!FAm6kpcVvl)8W#VJ(GY~0GnYq1qSJ?HeQD~k(xiSB=&$u!y)m-b{)j6+$KBDdm}A<*7L*eVYUz)LL=F3ClPI z@AvhB`}6LGtWq4VDQcs=>?2TfPC8vnD~l*DT5iwaQ{-_td)3FS+vLNBMTuftJlm6@Kk=IQ6oaeAT`37QVa5H9ewkbkka~_W{ONN(n(4rj{IP5X{_EcEB zG@?#sCP<0w?JKO;L0!)e3xcp{Y{EOPfmHcr)wrDLK@v5*iVC6MrUqcSA>?qcG7ZV| zca=uEnPfS<$EvdxmGQ}6@q5zMzFdE4Hoy|Ug3`rHFq32aTza`+C<*bh6Ylf+V}(`p zf=qT6wvpgssbmlj-;tjQX9%k^X3q_^e`6ua5w@nKUWZj7E;#3b%qgAJrLpqxK=B1NDtS)ka-B3Y%> zX^)ccYi27YnwQ1`S?$60JKS+UAxFkw8Z=el3zg0?bOj>13xd>HGHU08XHRb##dlg= zmKf=|55SpeOnnD^{ek5IWQ-P7p1NgW?o8$Hqh#@+v*?+;_C=A(^U;|?xq|c4E!YX~ z=<5@Y6KSeg=DIfv1vsD8(L)&nj(_x#l3caT7m#YYpp7IA^AG!EpYAP(%!RV@CmQ2|4-yz~?-`N^5G*=6|snV1H+4^qI%%LZEM7>PLA`Pd7x`mg>E0NX$$zaMY( znVM8W)0T?7btAJDk9CR+Xru9r9)!=EDmsy5N~dyalR*SfPIa!P#ST0PE__~H&5Gti z<+=|Om0Y%f1#Z9{|EmO=lv9&p>R;{^A zonVEV!QZ__R?CCidMXoVpmz&qfuNApfMFyz__HJA?7cr5_2+yq_C+CSv6qX z_5ZT6K5N^vlkL1qN&1A}43h`E=9vuk`;^O)r;u9m>gR-pBGs@+6X;&PcvLPpVachN z_LWUuTfj6qU#eR8LlO%VUBP=#7It9&1+xXKoMug(iZdqGk?r9^W1E;cfziUTNPOs9 zg>;*#9OI<>fohh))`6OC)Zt!P0HrHVO_i4kqlRNHD{&AD8#+x+Qk}OolkdH$qS_v~ ziH}LkQXKi3k$&ZEhj2;IL}-(bpX}LfxYl#3nmd7zc>U?Ew@e-N*8|gpehc@VPX&xZCq^s z%qjLqJ0qjbwq6a2z+}V1rmRp~Yu8~J{n63Tmq~(IT$Jl)#XN7FNSjeE2CPBhR9-$g zI)Fknec5bN9bAP8@ozoNqiLY3H znIWuH8B(8c4$AcycpCi+xghZR(k*d*1t6WOIfp=-mFzxIKN#cEfRAcUc;)mjzs_Xa zhms}9n<9lSPZWbGfl|XyYSr%5sZ4cBT61zucCPoFi(x#noDj0Qrz5WS$3?>_JmbG{F}EMg+${8WGqrH`U>QqS(7jrmlL99m9h%|xg!aEtB&(ZRYRLn2wAOW*-hyPN97Y-@7kGEvaM4&-HZvo+{NiYc(zSr;H;1VV<7%j*7d8#b1b z>oW}~y<^rEEgV3F;oqq_{*5L&t_^{K6z<-o**Ta&3M`A!>V-+fZvCp{rXKD>}wj}B9N z|9SqV8#=rtm0o~-GE~qyIDiuD14+5-qt;|4k0Q)yc%tzf9u@r|mELe$81oK^i@y@QvJ~1yX`mlHP9W+rOi~2lzxs(`c>c>Z1KgYKFebt z%5Cs@3)O*FR-;keD&?32x-2-?-*S>^x0~mWSoo>&zm!j0D#DXwCu<9u{F;eX$hD2w zXlca4#z@*)RcU2iM$u(9i%UkfO|6CYrh|1q99?WwYSJGZkp#+aVpIx|MHaDs+})T= zs8W9_#sQQv$q%#C#EQB}ZN*m|ICMY8h#RCm#<0JLrWGRb0as;J6M?Us(wcPd(8hS31F!x5>vnbD%5s~ZXw zVPQ}U30D){G@|(OggnvjwV3Tdx`{3r6G|@W?87UwiEcUYd&Eo7lw>=WE2TpkmNfIW z*07Fg@TVvWOgTZ5mxWV}p@K<4rJFc#j2;uFI`SA^%IVZKgsmMFwv>h)Uy{bHDgH{HhbTH# z7gRNJ+~-=p0{eNCo)!4Mqh|vxr+KU#{ucxc^4nx^cSxtB1vr4lFG$h7$xAx}D4jGW zFZ(7-cE|7vO!-Y?GTY;{9VF6|PE-LmDVPG9h9W;D&QPGv_9Qy&cdF+s5slc|!&kU(9iQytUSCCy%6 z|5o9O?z?9gKb6qoN)(cDSr|}R1Ez8n)@g*zl}hH?U;-&m>F4cl@S~M#l_e^D?2%w|2&cN1UUr-1P!Y>CiR#{pn| z2KiFrET?kuCrHg-D%q4bFhxEEU7)dWG%gy$l+5B|JM!5j&%H7t6l8a2(Q{z;>yEZ9 zUbV4ZFN)k}9oSObeAOUwJ7w6QncRo9YauB`G&{uzpO)0QMP}=kivy_6BCI*F?W3M^ z!&%~%GuM$n`eH;*r1q^u6i8QA}g(DA|a*HFa5vmSv?#Kt5p^ zHH5V*I)Sl$Nj@C!kIXdb#Z|pYLV2*DqN7PiPS#}H&}Fhnb@JHXm-#(&wX2$Ru2{q^ zbDHZ*&n}evs2cd}EFD0;8dOo+nAns)=tT(;P8>fHSiAaZc6|9nTpY{Hk1*?~k5=IN zwH2cYtXgS^9Z?cwXt)VVgnd8}2^j>*r`Nfz3^OSSpXYD`EfwLrhteoR-aa7RpcGXO z+}Krh3SN07i0J@|xTU`aEx}ZPh#eRoH$P9Ez^dY6$ zk2MBGxvXaI1Pce>cs(XuKye*F!S~5p{7cf2^nrZFE~@Y=+DOZg-~?yBiT=TKp+IvV zo0Y)pWa+CwExSuBC1Q;$5|*|OL>~v(2NVllw+bYEuP;nQHGA94idmTyq_J}vBNM*> z1^pQJp5qx*;8dz|^Q!`sKbeGU2~B<@Ew|&C@U4pwsK+Knw1%J|kJREl1k&7T!gJrb^EY`-6aIY$BNm-0L{M;re zxNYWXReYPYAOO2^J8^R*r=h7R@oGM@RunxqO-A2X!CIj&3tN#BZ)gv1amtSx3pT3= ziyDhaH!_I?iQQiQr!E=}vK=e@*-=C899W~$2d?x5h<+v)<5GH~#~^SE7zFR}3Udj@ z_5J{>l&(~+T_UbUa8yVnDlVgn7rz4N(2ru3L5Bh}X{p?>qz$b6Om&H!o|4H8U3Nm{ zY0+Y78cyzo(9n;WiKt5PXjHn(=T!LY&q$qc01*Hc8f{nUHfD4nu3FB$o^=s&HuGt2 z&Mz^V5gyx2li%d}=qM#&bZ22xaYHh3nBAm4W*K&H2xCCY_Fc(Y&#p`Slp)2 z!lDo3hJL!}Y_OLPZjIuZw>Q4@wkW*-OcG|(v2jB((Fj~z(!3vq zynmI#?7JZk(ev;RK-un>jH&};$I`-_RW1PzpwTBOYrUIyKYp9ehS2t+L_Idd={su$ z7+pv_XmAf?;;?X0sF*$NQ-hthN%*3aYTh>Qkj2Rw8eu)#kI|LHT|iq~u{_Lcg6M5p zLj$N8IrWj!y&LlgA8=hlN}g4v#`CKL&Z#``cU7ACP4VT?icCCW^HPatbE8>;BY+|o zKbC50+uQ3v;D*A?yImSv=6xz+ z-Fbv%mW|AHUMsIq?R#{H#jAbYmmICyH+pWt@dbHA0HwcSezr@)KyTfk(T=TZL`Z~f z0SnyxGxNt-Gw*Oc)?HY75-w2R+jS-TYG|R;ykcdnY^CoWt`_qK+Y|z1*=xlT8gm^q zkexw+%xfAJQPoM`f>T4cKU>fk9lG`s5h|a6wbJA~ovE&NRJY^_sda@bU}~3xTvbfNF;%zn`0+2&5EA(LE4nuBvD5`|i%m=E*H z94QI(oTjKy3)PU68<)88@|ZMKSFjZ=HZwylW6`p5G-QQ7B?%{RWfCW+r?Zj13q>8i z=9##hv8{1XgmU8YRDI!bsi^n1uQ7>}fGi;_r99BEQ&a`=ea-5IAsWstRTfiLS|dY* zi>A&C96&kflt$9gpQ){cEW13&R;v0;Bxmb2^@hzQQg30|201{AW9rsta5dHT703w2!$xti;m(e2KDmx>_W32w<)IcE#I7{jERW&u` z!JW54mon)9ORC<_>LZB(oD(;)6rWR$Er8vrIf|MhZ z2}{#H`cX0GXqCzulMGv;^r>PLJ5>EHU;P?nPmMch=~Q0d5YP?U5hw@<5#5NLvD)D1 zs!?c=_dfz~zW^d40+Aw#1nce2J%`XiV4Y+Nru6yjJlG{Vg$~W6Lm5h;oH&grPYS;#QVt*{ zH-bm>0yIclyB>|gHr6s)QDvRYmvVKu-aV*7S~s=$<~n^)AR>YyQi_P=I2y=x)risV zFg5ZC`9OgPLLi_bQc4QMH{E;u{qKDG?N2{?{Lq2JhYntR+1#Fr(35y&v6sx;0`S&=R13i{w#4{cD|! z3Yk_WL(=GTh*@4*b<(Zkx|L_ynfJbr2%?POrMix1vG7N>Pm_^=7PM)sCZAKJ+?z6} zkeTbM_nMIvCE7o&fN~vCNxU<*2ySaO3bL;xeJJ)aDy?%RhbFV*? z3IGgYJbM4>@A>e1-uKogH`?u<-4}-V>^HvkkALo0w>Ga+fmDm;$B{`L3FB2-QfeT?l z=}aC5B$H;E^#tiVSZ7UzDqitmgGiKPb|%*PV!!MYl;i*k*ux+FlVhr{Q(-}j*(p?J zKA_q=fFQeZDT{j~EK5xtK((t-#sr336eF}6dw)QWG6b@}gDb@Ev(jpxI(Fn8Z+Yac zkKcdl-eX7B4{WTjSysa^fCvGI2-P@!^CTN5Ztm``w%6bF zwkKCw)^2xiFzBPzc=nac|MSoMf<1Iv4U?1?U?haGx4mgQ!*QVyVH{et)>%Dv_{hl< zN7p*-PN&^&wOXx~Ap{DPw(Jjwy?%c>?!WZq2vu2IT(U5byR z+$u*T!RttfdSq)(v!XP!Q(Xs8mLJnu{X;3n0px!W&1>tpYg-F`mk$*9Z3bY#cj-t` zKL1CP_ms+Zih0zoLKzTZ5eu6fiA-w=sHt7H^Z(ie)|XN;>Xm6_F5P*za|_yWQ>d&8f-@b6F0cK&B@1*-p&r6%OIC zP&e2IH2u^l4xo8a6vgKN%Gmn@^?cpU7M%H}5|psy73PyG?)m;7v*|DX-GJCnR zpHqVu&`a3+6UN9`p>TIs5w)$xQxDz$!S_7%uD3q<@R^ehtFbp2*!FN|caI1VfshbT z2tlJXJ+9jb_h+YWCLJUsAW~9FB^{}TjvPv57$yqC?)8LW{=pZYyK?1rvu!CQ0dPN^ z50NlTM1x2Iz-p`Wf%m-YEl)hUw%SpWhK@ZP+Da+6=za_5)2ID!g+K$*YPQ4JQqv~lC?39Jbt2KtYRK@C7 zrJVD~LpREvl9W#rtypIH6hl@~0(rMo@irt%jd145l;y;kAN91H(H&k96(d8rWhJx< z8=vAMfYR>#T1b(b9}+QDz`2#nQ>}u~wfFw$P=GMpemzdCbFjVg{%0Ql(I5QKGmo6;jy}td*8#gThD-E&NbN;tq{H;ruuNjsAB2w<> zyq8t!ID5NWmSH~g*yA7hzr0LDQ6%Ps_h zo7P$g!!QxSGzB^F5r>kjB&qX6C1N4tzTzh) zkFco5ppmoEi+br-FuG|S0pQqC z;^q1wQl!>8oe#h5$shmW?|AybQv|R#bo#rylp-&mj{6TtD*E4l;WvNlvtK)P^2lHQp^x6&+`fF{j$s)<%JtQZT`C07>+YR6 za^(BI<0B88IXxKmce{Hy^81VmLhd4g$b6Gyr3uv10#tW40tl9-Ewoz2uC|#fG6HC74`jSg zCPp7k84)$gL$?T^IprxJ0?5-(jsObBKOtTCO?9YRd5fUjm#*4}|LCA{vt>YU_;j5h zq*{&U2jBYmkALE$Z-4llGH77i3ee5&<3{f6J8%Gjlt5uwrePYk?d%N(d)+~Q=-7@V zQUbAInJuf)YFQ1-5<)1c9HpcqrDL0Bn;YIYI zn=WYdQMVid(2WcdLO4q9?sjk8x%>L%tJiMcym9N!PIs?6=z9xALJ%n!9WxK$-fiJT zWqeKGDn;O$@a!FmCv(Nluoku4>BByttf)|E*fOJ4GZpYko0tp(sVHbX(u6!BfTG+m z%7ZFzoTEel%~uP8!W}>ber$wp9YSXZQ23uqcK|_-ty!)Ei01Uc*bX3=91T(zET9~P zcPRaOaB1Yx*W!w|n9;7pM%O~$W-}Ng;MnzJpm^_75B>NjzT>@*KVmhlzC9##gJMv@ zzU#*e8X^Ed6Y=hD@8Y#vFT8f?g;y?Jx_0~a-QA&WOQncNAT}(~Zde;@E5{BWy!XV> z6Gso-bNIl)_0D>y1z`O5|MX{HxNyDQYLOy)IJ8V5OhL+XG`WvN#BO)*$ia<2^NAl^ z?X>#Cz7WR9HRML^pdo}|8bS!AKq@7rbfg<`cC5j{Y@@FMW`kc|&YLo|dCfR2*A-r&}qyDz_b{?e5z*Kgh)NJo-#WsCa(NN$3p zxT+p_eMEJt=+2029YCPj3uHf!Pp6H=WhoisxSkpH1t z%w9%B4;D+N8wu=Znmfe0a}lruC=xpLi5M$^IjdD9sYD3IEx-X3?GI_eJZciHv`HL5 zfdT0L-voMs!u2nTCypN27z_u7KvDoe z2p|l@G=-yRuh+kQck9-j&AXdhd);2I-yhnJBc&SU9705aLKvc9S+p8;` zm3C`&rM=c!>9m`MVE}>~xTBQvq%%6h-jAYvPue(s$`C@J=nV(A?`*ztkg*|_@(zXLEE?6F|iMffK0=}IWrsH=8 z1(YYeh*2C!6#Cbx%R<743R!N@px5e1hKkA#pmHBNP0;D(u4_ZBHXDE82S54~-}jMw z4sY}Z10e_uqc2r|D1~7l2+J~2fRu7*+m7QX1%!eK?%eJExBu{;zjEnDXQgEd^mc5~ zWEUUrr9wbJ0w5wO$#EP3(rh%mEBD<~?m1zE0*PSgIC9wg#CLx5u?HXO4SGTdQW5|g zreT=I_HOUOz{Pqx0VPw{g+fspK9-52L6Y1h7oA-E18?uzp~D z{qVt!jkUD{>#LnstJyGx5Co)@BBe;F(Z(_w9ZfcJ?-M9@Lm7ZTbc2zAU~6al;^j9k zTzcc;>z8hCZ#hZkE_y5&D|HJQi>d~R?*p7W`XYaKuH(z??(#0#cZf|Z$rB>UWV}~}*o;>!@*^_5a z9$jDU3~ak^4?%$d<2U~B%m4J}e-}`pbjBxvc~)gI_R()2MqxGNC585KIg`&#<^5rA zXZxMcy!pfLdH2vBq5x7PP_!D>ovoecUpfEsg-hEzdy2>~5QRWrb!W}dv|q~2|3gGX zipWh+Ef5W1v|G)!mCoUV2aX;*aQxVzgKMjucH0m_k#rnKDH_*i@;~0mV?^LaK^cZH zgdq@j_x3JdyZX{A7cRbW<<^}$o+oJZzj21@d3_)#R%q_DEE+`z*hZtQDQ}J6_LIyH z8749LxPi2aV#{ZlIP7r|>zMxar4kMxi2RmNT?bIf-XEx|1E>V2LcSzl0W@hLBiel&kd^`TWowzhppPh05<@S9bThhJkL@p79~{lU0pqHV_efTfI;za@=ie z1kG0K(Avt8^_A6j`}ncLr%xQQEXzFv4Mx7EeJSq`R$`nl2oVv{G))BP4~N%o+&usK zr59hlaO3uEM>?Yth_T-)uqR-E(G4J`wrS-CD$xN^W8a5v7MQ6mAz|IA;qag6EXn*f z%HSSLs#?jd9BVwg$`s-Nngct4iX-8}i**1&c0x*7?4lh&kZA-^&?b&(PtN4=bC`JR z$>$ONXK8esnv+RmMqH9&?@xZrhW{V{tu(Cv`(ON#@BPU8d-hN%0zf3NZTpprS3dXE z=YRJL&)wYa8m6VlA*F~wDdk9#jsz434cNJhEGF?6oKtHL?8*kv47xWA3l5fq?8hg3}Ifsd-n@pd+y4O zTc#mUpl`?7xSp|P?w-%(xvNl&vIYSlI8t@{LqjwkID7o$;e%&So;Z2zfV+`x?5r6d zFdvqfXY@Bi7={q0Y4isD8@F!1a^dw?FTHW;%2h{6w=C|^JW3ZmRmka^20top?ejvz z06;yTo;ML2qTWJaawo(AG`kuZe`wSs2&mxjp9JVI>(Ga|+Z!~Y1ZzC!ky=LpL0n0( z0|@d-OB_nJLP`_7lH1jD$S?>gh0fEtGQTR-)q z-}kX^-|6=N5D9?*2!uc(0EGDF`8WPw|K~5geEtoq)c~c4NGdn+F)0N~0s(AnY<%Z? z-}13{J#psf>Q}z`+TZ)vpOjJ>Abk#?8L!3Iu`za*c)Od>J(S&cWUoIU07IDep!f6> zkAC$1@3HNHAOK-J|LTRWJom!TwoTL6KaqZX?|IQqa~Ky5y+hDIDw5K1q#^*R$Q}$V z(|G2Ihu`_s6K75zHxM0L_4)%xN;gyW#1qGnneNf@<3!E-=YQeYSL7ziHVs1v96HXm zo3~$l_5AbSI)8g>bCj6~5s`c@r5tvFO^G2t^jW>1hYn@P4|V`CMUeA;8=C({S+yDH zH1&Eb)r)|g5OdH;cI_b1?4Sw(bA-Kt;* z5M*)PK07UwW-}m9a{1cz(_WK}&7qLU5tyn;$sMT&> zc;nW8_y7LcH*Vc+S{4x~Qlw~T52bXE;6jpsXq`NH>@R=f+u!ln*`NM}-}&{=Ki@L< zLvjKfKoi9x*Yh*Z)2tNj_4-mu!!QAbDd5L`;JXhWSaXIpqVc(}KKH^auNszxZmOV} zcpHjrBhmjI0TB!xduTh3Bi+~}WjhG+O%Ff#vG>3Gfm8P?Y4?Uh$FaTmCO2czsMrWF zcGh?~rWFBzQi_O_Ql3l5-wNoK-#wm82q6UGUcZ0g@|71~dF{d*Z*1@Fy3#=*CR0`~ zj;D*ScKqgFdkN@fikTXcK!G9~D@}rkA%|hTc5kJ6!49C5j|>w_=?)->E~z}ctWmZ% zR{)K7VD$#Wet&>M7=~&0`}dzd^+VtDA!jf! z&Bmv{@RgTeyVPtolv4ZK$ENQ&e?UeA0CX=H)!4msFtGc>p>!NV01yDE?B2@S#`k~d zz3+YN(}=j!-P`N-dP8S07!HQEdk&i8C`U@$k%}ZKLPS#-4a;m;W~0$)T8(DYYFJj& zG)>b$0I4LAl2YQt$zM1wxO+61X&6MbwYziv^~R@&mj?EbfDB=JPA?+dH@cZb z00F=GFM$L?lmbI-IKxC`2^>I`@csZ#aYw`wuU0}U&Ki&1G*xr}E%W}b#6>863z&-z zZlI|$^zDB+_6y&wQ^u-*7)|HEIu z|MZEW?Vy`J*()fz+q1m%Hv~kg*=+vwzyI}r`2#D*BbO1{L%ZAEQ_?|1!)hQ} zAnm{K!{4FM`q#hqsitM(SSw~XE#ZFj5BM5bDYe_}DMi8%C=5C5f5-dY^VTOGl8*ZQ zFMa)mS1&f24W(p=EezQL=AGW|D~&)L+IF|sw;jj(JED>bl=Jw*5Bkn<)k&cqejqvf@N$A~|ykS)cVF+QFhGki+EA2z;YsU^9I(%T` zz}jlN*$_eiDW#N@jwb;`A_O5o5eh^AA%qY@k-Bwf^W}>dpMT+%D>rXSk^&7^cxpe! zDo75&;t6NTU;b-f{dr1J`-(FqkdG(GZ@>fBB7;kk=`gIrK87gp6xXGS4xpk})fYX9 z9YFKZLuI0uB4c+zOhT-78bM}Qn}A|u*u)Wc-i=?WDd5+M9t)Iy(_i@GtG1IzkB(b0 zk~x6tr8s&$DDc^1?||oE02pmJ0{Bbc_mMyMV;>(3hbV+E1_k#wZn@i-2$4vb;@0Ng zfBO&r`IS4nmT3|x*Lj18j$`lb?kXh_&}=k;gb?r}-~EBFzxe9;%Qu=0Gh`Cum(KW# zZhtTw3{fB=Dg~{E`KQ0{V<(Os{iClw`=xKZXtkOo<$_&afq(U)i}rsZ5G7Hs*YEZF zK%?LwL?xxwus-yjw>@$H*_ST9{@Ud$w>Ee7`U6EIP?%zTQrP(GZ(2;{1omSH{P%5dElu7{#1a!{=^YRBF2w@n8(I52BzkcZ} z&%SW}((AT#1diNxJ~vS6VB{rt1S~`KXP3ShCNEMh%;r%5ZRU-I1uJQ=L8WA>=m2sl zLP?@MBd!Ao07z2@P?8TUA}7lg^R^K$*Tex7YvppG70WkFAiMTOND(QK#sP#`c$C8% zuXxh6i&nP2Ld=GXhB$!yDx<>^bgdjfUS8oTcgn~~0R)QF_zwc`V5j}eqYwTUfBuIK zZLBG!Mmx0J+{F74L%wfODQLACKl2N}@o)aqXIrfnk=l1UAli=8-P={tK@?V_>DY38 zeeIbi9{lJ0K1wbj<>2{S=LZA@Bww?R$JNXme_g&9@>$Ok)@s};jB&8 z=Ey6p+Y|&!DMg@^B0$qH4y>-6ICALB$>XPv9XYVEW*Ua0nSudm+|&w0U!$3@1ux_6aXNg5XRwy8}}YL_{78a zz3J?!2hN;0ym8313`D?@U&B{o^5@WT^A0No%|`Q^ufF~_|JQ$IEATQGj|zf_j_vI3 z?hr{7hG{mP;o#UkM_UbRYqx6%W8u_cT#>=h?)LhKhzLRmdpP*e``-Dc2k!s*PyVhO z592@Xeg6IYUtC7MZv+4mLiGB>-Mu|hB!qCCEI?!!Vzu2qcyN7ZZ*Q+RY*?mnQ!h`5 zd+xsJz#)qEH>A--cL7jDN|7W$6f4cv>ElNqIDPW|QzzF~JAh!@wv>_pXuP}3i@Tym z!y=$-H*bFC3txHp{Dq-2#8EWRBH=_w6YE|iOI78C0hiE%yX%1}LaU3ATkqe865C8!hrUghBuU`H9m%s7i`SZ54M|=HXlv_Iu zx=sypWZ9~mUP%~c0m(G1Fb7cT#j&`bE`6FD#Sh}YvNp`Dnk8O>FPeOHCi2~rIDpKU zg<;a5+ly9W!WUVgtX`U(MJ#9T#WTJj3UE&^2{igz`_-gyvaB*q{CDK%0YGqb(I5a4 zDFQ;o6Ne8y{=liXKlRAt58i+F^gU~>wj|Xb+KzM_>Ff>%03gtfc_APLfbPjtZlHAqf!odi`FvhXTDS5(t5< zX0zFB5Ge&<7zWU2uNRKLK!myD6cau)gwc6p6PI}Z6$nBA5bf;ke(j~5Z@hBhDXjex zMu_n6$S@g`tW#w*(++=h$8p;*G%tE+F<`oK%XGTWCw=x~+=GiVYzxU`7MC{r2z_z6$ zX%vJ)NI;%P2N4a^uuRi11OU2;id~1tI3P$VrId1{Qr;hpPP6?7UwZcM{vZFoWi@8A z@VJpjJ9}MwI1p%{VGvQL-D)+gNb3@awv;X|T3VuH1*DOd^2h{5jPY zuvu*n(f_EmC}4z7qeSU~(iYDwqdcx6%zCEts70pKQeCImcw))zU6I?K6K*Hx)SEzU@)*9 zDTzGq5D}4=I2iy53-I9&AZ#%d)@wEr~pi1G@FgpcI)8!>Y#J=yL@3<$ zAYyMY?2Qrt5s_t?8>?$Hj++^If8t1)Jmn`qg#OUk-RpW$O8`V(7~F^z`AWafA#TdJMiJw@R6{;YI5hJmCgqqXFq68MuqL$nI`7HHjr z=9K~KCe;PSUoOO2Xs8s||bf1p@BjcNgyvbHXfFj&;;WJa2NL@)A5tj7+i~g31{5;l0IDot-C3;XwGLl#228nP=aR4Qb`h=t* z$`Q$24w>C>I^K1Z-^cySiGv5;@}_ei`_Mbz{=}P(A2~pXz5ZZmJJP)vkcgC2O1US1 zks|lFc2Yz@iU9U{_CNmDzxMlI{00cLEYmcFDTKS>3cRt|+xpDypK0wLheUT@g%3&SKJ(=^vQ?a?V!v(1VK1PBDU zwX>_F^70W0*jQgTh4490lF5`1K>=>>>^hEgvmJTfpOuc`?ko!#*>HQ!5d!*y;a0z|lmY}W&>&PqB$XoRZTWKl18$yY8vO)= zq4WCnyGEj%-kOk0fi6%U;rR0qSvq9eD(FKUw!`N_0<*AG6H-* z<4Pd3TMfq^5=lfMrF4|C+|$;BKY@rKrP}xP5Lt$0jCN+FT1`O&#D1?Yr9^>100gFK ztaRFj5ajx>_DeQyfiU%pGo$qXkrsNJW4OR17V4`Kk@h@_n-a3*T3=gZ@##*w+n8h72u+6Xq6s1)3CG^XP6?$ zZ%|K07Uijd(QwDRg~F)Z91?2LG`W+j21kzo!k~A?*$AKvB0e;K9gQCWlr{>nQoSTr z92umpTmrAB<|J_drLU&uoi49Cl?g^Lo5d6${e3b-Q}2%pq96bw)i8{6_n!FZx4-QJ z?|JLv58T&oxBA1OZQD{xH?{`|48yQY!!%4%N|GX}6o8auOKIDV?KskLl#)b13Y1co zX?*ezzVy$2{x>Bdf&?NVglU?lA>3z=i~~;B&`Uui97hR3qbugMF9Be;*X#FsC`=-1 zwVLf#bL?Z9t}%iT*dGjc_j=wZKt)1=9eerAGc=?rHuQ&EDDk7X)`B@)VrRE69S(0ipOld^yV+BM2 zP1&_XgH3f~e_W=+jw4^GIY~Ft=tV&~6YVicB7h<~fMzcUTxQG00Tlb{_++JJ(acj? z2T<^@bf*~0TR#U-;A_|d*a1{QYU2P3yjx<0%A`m+$kW@TBQ3*x`k}Kw^zjdT_}x$6 zb9iG&I2_tiD%UpzihxLfVIbYw-aUW$+8a0T-oCrj9}bjMt!DGk`szK04;($XabSJL zGK3?Yp=~Rrh!6q0-R^(?Pk!$C*RGnDa2&_Y`O|D#%|=6b$BVgfD!y2laSCT5L@{z} zgh{}S=-J-gb(7bambubt8v=v3fFTGW_IkZuZvX&9Bm^Epa&HDbq9!ftPRG_@gg<{nd-F4~7Hx z(Qf9TM0KqtOIvYtt9m^7*{@mC9=YRQ2 zV446*N^jSgWm)ZZ%M^k<`#Nt)CaOjW#JzsMx7PzS0BLolV_62$jO{_s?X%jV2{P3TNi39>6ir!$*?e)hIHJx_5)oc){3|5RLN1<_93240Qj)=x>XIh33 z!m*`$0zCjIBBf|Bw1IywRkd$&JON+L{z%pd>}87Qt?zw>v0`WL_S+{?{|X$o{x+l+%vT=#>N z%1x@%Zne(cd+cqGpL_G0&fRz7xRN#~`M> z!w;Q34FELG((RrRMgTyDVItyQulud@7hihi{Q1joNK*5ofu?F3TW(cjYEH#4Od95P zrSJ*&oGDAl(6cxKD7(O)G&j)1uq>!Qc4hwsZy_00Ek7M&2hb!lFR8gdE-;X@0E&!e%c@cYfG7kh zLZBzko&9rv^1HwDy>D)}TRVMQj{PsAXq@pEB0$2w`_F#^NwZV zd~?&Xgfkqv-UL!440C0rV;aWP z-Q2((-%;WeMHWJcyk%!h-zxxAk``EkQ{M?J@|KY#-mA)el0rqg9q;d}$7lzSkw;QIp zKduCu1J@liUnU3wQA*m}-XSFo!(3fmF~nqJAtC_^bfnte*>SVpAmX6|8-@^b96;gD z`jKB7K`Gka?MkJ9NFc1PbWGD6B^65K{h9QKxx2hf!*Ekvw^}XJFoh6qo@RHSSF_RR z_WBp!xVp2mD+D5<6rE={TYVVD6O>eqP+GOA)@YTYW)Z}w8l|ekuByF9>`+_nqKH+q zilRoWn5|j6_6W60#Eunt&-=kA*LALo^FQZ2&;9)F`*D=3bG#>lN}4P)4F$GcumY?F zFq~hSxBhdvGjasnBYKWkiZxYL6Pq40xKyjxvEjCmF$tPr0E*5aV<^1M0d(kaSiu~` zeiDGd6UcZ#Ac{QO41L)Olg9lp>l``cUJ~!>&TCW@We0@ZO8!-LhL~2Z1|v9mb8Jkj z@URNlv`Bqc%mwVXTLj+%w6d4vx6!}1!>(E-f3f-aqICDF=Kb}ZZEMS);mPX0KFbBl zcRfH>`pNo&jV0np(}{hNLiuXiQNdqegH%)rD_w4YA{}p{7*z3ike~D~hcsf%*?{*# z+siSAft*DWKzVwsH|Z%1G#|0yhWs~Cqyfc?*JBhe?!UdiiMKi^P%%O*6s)Ss0isc2tfjd&Aw*Jmy(MgZ217gbkbKa>Hi=*y*^?Fl6 zYYc1bl=%t9F6-uJ9RUgI5&iikgzCLKwB_u+aT_;$Zj08J_=RnM%udp9ru>9Qb!Xlm z>!YU#`@h`%?jeiws-A`lG#i93T-Sg|XdeKe`OEKSFEy#*f+@>WPRZBvKI>b8noHw&9vN;`%Nh$HN3~;b%uE1~9k_Ur z)tl5!S&xEb3QeKao!i$1nr*nbgKaWWm!&I={fX{omuIV6FENoKph;n7ff(72Dn*)4 zK^^Qxwx*8zfgVf}Rl>|jE3gKCuicAQpopmC15EO{Jrj9Q9116&kr(HIyM78W z9h(HoP%?(#X8ZSIe;c?3?Ibf=_tHg3<;V+XBki#P3HE1|>GYp;F>~T*Uvlf^#k2T; zjV$cR#4lZ-@+>!eD%dR_dJPoWCOS~7V?>cNyV@!aKB2445SI8moG2$J2OD-m&z7&j zA-g?biOQ_3EE6)2{(#!@#t4u?i^aVALCNF&!b34Pvd)W;%*!XHT{XHHnHaSEgNyRf z{w4R{zP`S*8M|r=aNA|7nAEa(BG0p=M*r2B`2k@-3Qp43?B*de8>WWo9+!U57T&y5@A%8i5R}>rUP)T^PA(aU7o!wTt)W8+`G#PKUl zQ){6*@cVWuFz`_G zk=~2o=dlOnF_QTD7kqi`ZHD?h!6MmK!L~EV3RMvIvmav;$6kcMwaGwyfUd&+RKvNc z57Dk^K8c!=2nKQI)!=quWwol{MI#AEC>k=mkjHwJCKxp~Aq^rRj4kH$@+4 z-_pCz7miaS@U3|I%aeN|X7wA=l6kNkw==7DAZz=O>EbTg(*ss9-O9&j@1A_mP5_4F zkGrm8XkK=93fewcu9$9Kr@Ap9lD7MynAtQ|_I0@LiWy(o^~c2sL8+iSt;IJL)kmVm zwsyiBK)rtSju%Hc7hmF$hx3fT7IL?C$QeU}RyfY#i)Wr{3b&4BvHTdJO-MwegOm7NTR4DCF{^=pm*FD|HDNkVUpjAWdJd@57*5@Zb@;87gjpA z=;m3a1IN}@l69GqjN}mpyzJ)7aZf*EU6SF!A?+~1D>X>^F)N3%#+6j(kXz24Wo>%+(HgQYzUp&-Ev2Z zUUIIRn3kh7@Pj1*19*!2KgqklJ(30D_xwKCb>}_t{T3e|#eAo}22YBzH)##Zb$O9~ zwlylG70z@QMr-snsn8_FLYB1a28zGbrQl}O?iZ!y z2|c%~U=mb~^AK;*;N>l(QQ@ZCVIU7m9}k}1n&Xg<)D(nE&;T|eru>gD<+6lsc{uVRyA&SMdry{(IkP44r$*Lm(uZFW0!p2ko8+U7LmZb-K@cv85G&W z>1&(Pc3wK|@Q4k#-;`HQ1B-qrXfuH^*WMd3S+iyo<%d8S$`b!Xbhe*LeQ$O<{b!9D zlJ~&&c5}%f@bckY@lH;2 zoVfgb*XNO^VPk=@j|Sn^U1rtB^gKe4)$V2eh$IA#CGMav=}AYr-@Ru1h+xQ)+DFKt zj-PsvVYP6=gN6Uews8~!aYjBXI*?*`up2ynn@Tc{9l)U33ZSsE8l#04o_LwJ{8*a4 z*5|#*M+^x}mI%hg;L1^;7s2s@cx3CuJ>HG|C}O96j-DoU_FP@rSyzUuY63Bzc_Wo) zL~vpU5$tFtF7FHh=e^o2(-52;Seu#oH*p;2La)S+pvqhh+aCwO0Y$Tkx z!d9i-_-FyjPq=yy!*x*ysO4wniYNI^az1-%17;k>e0SvsMiB%#{G@oYMEb{%G)S}Cm-lPF=OgGTrReB zP{Z=HX(^jczWgg|4#~A(#Tk}P;&@r3zbdl7Nsao1fCuG{wLVs7WGJsO+A1yW5G_bH znr&*De*j_$Us^o_4|ystsNLn&2Wb?9TGYG|7Q6#ue`Tf~l!cKmWTIArvrOfhhC&$y z$3#=~kB7maPH6dickIFPnIWV(C`0exd$NR49@rSPLz@|%?=h#q;8<2s;UU{6r+Q5d zK><>R!dee$LDZrmQ+y92xw{UYzMNaW zYVaXx;Nn4bUQxpcFKwT0=Z#d^W+mbklu7)b%(8-vA6*iJh#5x4lpD)8(i3XiK036u zrL}0zJ>Gpig3syBMVTuJ%I-OBQHIqQD-jF1P6u0$Kar+~ZwYZzu&k4*!Gp=bbTvk; z2Zhd;S;+kZz%aF0Rzt(n9IE(z{R50aP&Emb>)ZV)-hVp;f0~XYl&*`IIZKuG5_YHh z$q(LYGLH-{WLwJZgt6J%7uiDF0|Wn-=r$PD^vHK*%?xw_MmJX4kI=a+C%^fHS~e-f zabvix1Y0WXkPdXv_d)J|2MVOX&`>sBaX(TNrl|^md5SCx4es4u>@)&D*c>S$bD4ln zcFP{{h|JB*%_s%qyh`UCMo(PMi9_4EYy}3i{l-8UY>R$5gL_|Hg+U_#gtI#_UzD3K z&#=ko@5VzO|1ov^N5pvHy~*#`dL9~;L^sNiy#v+(!=`yjnoh2n<$#N7=@}vw4|XdaH5ygxnyT0glAo!kb{T8sVac%b@aIMHUX^G1)5 zi=;j+)w4$!Ma#U_i%=FLFVG!J84eih92rRLhIf1UOL3}a-{S>7vmCi$6yfivPwbIr z%g7z|z+7vBRzGy-!EMB+q;;|{hSffowf&^eq;ADlOzrHBL=;ovO(PZ1GDhQjz7lu` zhjT0|rw(qy1T!Suu&&D#2j5)~2_U7PJ!asgbMQkTCS&_-(X)WiBdn&;TBzsHTh$3P zwTAOrDo!tGJ6UErUy7K{%x~2h39Fp2!y@7Tt8a7;+&(M2iBx#Sd=1|nkwTD?P-7r* z&0JdIr@{X1$@CEY5&#$P^^3zD`Bs>E2S|I+sFam|kK<#4R{rIz5A?QN&bCy46I&!2 z3bTMv1Y`a8j8L<);TAC>3O*OvDPHPAGSQs-tZI;CO%vbczH$_LSgdflXUT=n&7p1< zXV@>=?D*XE{(>>TPE!1pi;43e6;KFhPP{N(H@ z_6%qXzbkG}y2`zZew z13J%z9%+V!EOH*e7uO2);Q9;#wWFIf4#ksPY6q8XD-?ddeX8OlP+P2`U0Uk6O+6PE zouibzi+59l4#Sv)94=0jf;w0L%J591kTtf8+w9sxkn|iTYGO3dGtKT=NKh& zEBtC`Qh`An*&~lkO#9*<71s&i7daX30!z_B2+w670y&y(jBog;iB-mA{GktSwREdm zFFpH)qj<4yNcTRQ{3{c~*oHmjhx{v2Zw?XKdvp>d%Dv+EE#9M}MW0%OYMxj8{rG9? z`crzV4=feso*hToEM3@>Uaret#ZzL4lP=^rD36aN2eQg>`W^an+{nnx_p(;48tmlt z4kXp}ZsL+Lh)iEo+c75^mZ>*15U3IaDSv+r3f9n+@nBDr_N7tR{`e{9|8i6#^X!0Kx6p<+h?>^r*wVQ zQkYnSf*>q-L&ImaEB56B;|(uA!~BQrhlTRHP9pFozydC*K1A@>ffZ;p@HYxOK`J(s zTCd?=v?J3mdp!6)vqfJ4!TTiONE_tYN3-(~#mgiW?oeQy2iQ9bBaa&~%j$6#ZQTkU z#|wT@#t}s5ca&fci0$hN-8p*dLIJ6idZ zudLsQLCpB$3ii-P!9z`N)78cf-X=K8Ihii*fnQTBKg%RS*+5VMzy&9IIj~Whpvf^e zCGCH*=pyZ6iE5VS7vZEdG*+F`s_OqEc`O}BZ&z&AJu%-I^`+0RtG+Cec zrFs$<4EtZWW;wSXKL4BYf;(H*$1T8dK9TVmcXU-fjmq5g%n!%O*)WRAy1E&=M*)IO z40;Yb+s(dv9pmwI=u>4Hg6gSs>;P+@~yYq zxK7ur>*#Ke>r^BO&)2!Ap4P@{tgon@{>!IP6hS;ct3_Imf%$glECQ|Fe|Y$u0Z_OG zeXUph6izOSxdNC#ZSp)V3he>RkABf~7FbVgJ|{;R@@|~J*G&5bk&KqFaJs&(zfTj< z_Ld#ydM(BsX$~?s%av_ryQyM~J)QgbIxB58=urR}oI+pmI15j_hg_rboo^BS)$>_J zbYCr|!c$SyqrijD_m=J2z@uefx%Jxqzb_9OWB_64h7CWRzhtY18ra~dFD zMZWd(>#lMPwz;(?oniO4HBxf~U=$cJ^?$UqZO0H5Zx#{AwV|MYce$!Br-W zAc!&x`D}{^?%%Ke&*#Lz(rG?b42B~q4&m47P*DcZ=<8!VjFI&#cL@F-t z!=(tiGOkL;2(={En}g>XulhrO7m&}oZeQ-7uB(v{M(=9A3=TYebPQ>D@YE{3tJVk| zxFwGCzdX7Z4y@~hz`pP}s9)t#*xf+~Y?$ChY26jY>;;Rcf#n%03ht5hRiZqfH@TkW zi!TkJ(B>*LgIqUEHt$Z<>@J57?X!4my_npLFKRMc?Dlks`l+QRuWwrSM&0I5^T9Xv ziQ!uP50BGnOHIV6A@5MpbyoYzxz7p|F6z23QKY~8XCcA1klhZS9wb>Zfie!n&7@R4 zZu97OFd4j{frEEXgSpmuz%R&_W#D~2cI%#uM5y<_s)!0~a{z9Qqc9m7xlAFYFvmBs z!BHD_j`|1!B}B>&tO5U<@20Ihp`xK6UcxW}fl85C0_~?XlUAQ}}CnK|9$ue}e4Dj@{a>n4`az#zz50=Qm<^j9A4ZR#o928<^GsvZHK`@~|M zT1lIVmuJu89TfI@LW-bq1`uv7C5ku$UB%0ue|GB#(r!GEsi4fF*_$zQRG2{$)lynf z6nQ=6e*1yj@_)%PR5~zF%Lnp>|hD=eet}1_=0VW8l_=xirvlLd@mjw!~PiX1??aW)OUMMQQWr z?Qot=_NDd_b2JKl^GH5Gq*z$U_G`<4ZdjQfHvvYYjh^-poZ*=3iq=vjWTDj)o~+xm$+!7m}Rh{v8f?7%P6R7dNHo`nWMrj zhO}{3M8gB@)zN;Qz!(l{t7!GU+?hC*!|ub2=e^jwJsA@_f`##l?*Ep{C-{+gdbAe; z8ixMjtT%FW+uy&!I7~UY*v-=-O=3mfK_1tO&`#=vfD zhTQmlwY$n>D6)xkckzjBiigry_nzc-z%=sX8B1p%el&$mvtvecJ-E7<%V+U-*T0Nq zjs0U*AB0x{A1@PGv!ixPaZFuYZN@+d8(YZIaB5ug=zxR#jc4B4k`t5h>xx<2QG|+7gX6=Q z&*;{9d!#*wRtZ1oiK>eF@ma{c6QTkDQ>fy^CGIbGj2i*d{FlIMp^lAq$x21JQ^LV0 zOFHn7s^uU=osQF>pjp^&yt;Jh$M%Jeqw{G6hT9V_F`HLxq3_CM>D0t?iN#I*^VgIl9+ z%N-K0oh&*Gx#fFDLcnaPS0mvb%f}qBN{&J%_NiCMley{h9eFT3Zn=K83HnUaTDk_) z!)-Qk3r@kxAKG

j`2xjHp}oen4Z!Lv~@lk{ZoQYhPQ<+bqis1|{NpW)V_Xjg{hr zL@fx3kw8QBCN@0D4k@(A%*I~wzyxzQg@TtiN%MQT$He4I=Y@Iy)s8~bR%aFg=>5)Z z`fv;;%k?2R)K*fQ>Bh)jyCK%37nQvn5%y(<($;?)NQocv1pxElj()HM$8? zov&fiT1}Kgo}^4x%!#6Cl|g)DP=Roj_1$)I#gi;9S-0H;ganKEl>pe4MKt>o>Fm0*C$Jhj>4HWlDi9|ij?NsO3?KRk(lj&9JiWW3nRyZZq)mXS^_eFd)qCqoNVd%7 zOQp|mN?)3$jQ#O=*#54RGJ}xT&=|G2N>8cJ<$u<$NX*BsOUv^lFx8{djVmHhCRPFe zzxGvMQ3kQLn%rJ|);^29m@2v6O{rqdbf4+)XH3zJ=j2O&WS-S?)hk6Vk8$^k(R4zA zm~b2$roF93i}!~kRnU&S>yQc|$59d$m;C*cx*(9{IG<&luO5@hV46nH``4~`-bSJT zD01Waf-ga7wz>*ufw9rY^s3~rx#@YJdEI%g)tTn_h>S6kYQk{j>A=d194NG1bifF) zvoJl!qzny49j<5Rt1r~M5mP1~XbOfw$=bvQzBuA{9AYhzpl4}CJn&MB%m(})U|3ji z`wjzj2!sJjaZDK^_1(mC^@+mOPdERn#3j{P&eq|ic4Z5RdO^;;_+U7m`gyo4N9!;c}|~k%(ip^t%jA)B6Nb2?VO#_iW}IOnadUH z%M;WPvR_P?=|d1KNHjJOYiee6o`^r48c|WVKqhKqqip?ueAD=O4$riE%Io zeP%{NwqV23h2p~)&U(3=jVa&t3eunW^i;tto)6D*yAnB~bEh31pO1zO`7bqCXZviI zL=3VU8*S1$&enlJp}^l-9M5q&EVpnWf;=5755K~P5q=^*6rCm^T~p6_&IwUnOm~&K zLcdLNK9t~PwBe?fps|*&KRIKIf9&CuYb-_6`^DYG5;N_;c<~ExvCD>SvGF*9XN-4NVapd!U1k}XXB>04NiXDaA@6aG@7`; z1>>2s!~+In*WI@8Bsc(dNlior(J%pO)5g)6ay|G(OD+I|6hZ+Ti=(BZW8t`yq_7Hv zCshBPoDO;t@F`M-fWZulYda5~tS(p!SRqAS9G)zv{RkKu^hlW0+J^3Y93wiJb+p*q zl1TXm3*pPs0+qAwf$IlmjZJ7mHd-N!Ld9>R@#qW~KD=4i^}n!eJw)X+0tN6_tx(lL zrv1X?=o1N<6Ww%0r#^$wXYuc?Sc*8`*)Wo0w_Qh-!&zY1A2Wv{_WfneKOO@(b@f{* zpS9S8KrhoPWSQO#+K~cZ&%;!!)LU(RQ*+C$ucjL7EDY^sA_P@24l(%`--6AAwaH0; zk;f+V@-AJj4sfMtHBP|35DW_)P}{nxc)FQ$x~k~CWl2Ep%IhLeOq>-wPhgXrGj+5! zxozG?+#r!r7!;XN7@%!wo8}Dxz9cu5;L^@%J50T-y&L08cL_iD4u2$LwIOp zs;%ZGbn(}{mxEa{j*#S?cAT=ber-l9)ll~7MA%0_Iwt#NS~1B+V>lyxhdG9xD?(2i z%FE3fKH?xrz{s15GJ8LHH%yvoa;8Zp6KS@)Frt`s^*TNVF(kt!=2&C7G;S9^|KEDR zrs)HIV|t%4m*?l|)}$1=PP^ZvOc_vcRs0Auo`?FzAut1wkr4_;4GY>@WKf2X>#@uE zu4Dr{Ie1}s&_fuAuTvE5MR1yL2qCjwLA$kbvyQsbaZO1h&i=@&)1y(so%6eQhK~dq zW+@qzxHD4sM#CmaC;dZStL7U$OT%@J5p!Z~Qz-E-(A!rsT(Y&BC-QF|s)!~{CU@bw zL%t|Z^=a?IDF6or3Q^~!aPb}e-Rn)~5)?|)$wISDZeOZ+wuirnCv83lgj));$NDA^ z*KYW!dH9O8Xg<~_YQZs0=z03Is>#<+kJ30;$&p<9dxA%$t&%%K2?t2S0>aPCqlY2P zGyg=Fu4+E!dE;^L+I6&9@h8SFE9TSPm8G)YRuy5D&*hpN_f{xbF=p2>%i8OK8-9u_ zMcL`n=Cc8Nsyv1ME5G*;Kr9vVWL_ljxKxBVGHH4SxWASNfg2py1Dvxwpb6UCyOY&D zn047BmveE7J-x64vS3a)AI4Yiz2BB6Gz9qnVubL=Vcjn_^q#Wp1Y;orPo5N>5igH- zc4B9Ncr-**&yV}gW+}FRLEv8tgA*xRQaV}EJ2X@p3(u4DimbBa+_C)?*}yv#UfF=b zjN0NpTVZKe90`o!qUt3-QVcreZ)Rycd30-0+)F;lz~f+|Jht}8t9Vs*#+U#{WATLZ z$nOU|Fp)o$(B{tGIivppe9-~}m=mj$bG)guXtT$v5G$Fhhwum76yyV>S=iFX0q^js zM%`$JK`&P{$lTF!wZ%{Oma@REzh*vp&v5F${gl!=$9(9rW&`+9T(b3!{N+^0I^h2S zkv-E-R0f4DuMBHc&e-CQ8qG-m(Er;~j!kt1OOnalRyUtoNpl>E&u@b>;9zo`R@rcw zeN@{~C(j3qmi?Ju1M@rG3xvAo-Eki0@-V0XW!;!9I`G6#VgFjrML95!$QUp+xYm(c z^x;9zZq)UmQQO#e-#H&@$$IF!-<7Fi)hn$ZNe(L+UYWRkZ$x(;2*n`JAn9@Z{HAg% zy1Ud(go5H^?1b|H)u-dwtpJmK*pR z@FH6vZ@}69k@lEaZ1~as*5u_#>qSb=8J;xVdReOrSf_MK1!?x8@E6BG{LGYoRH!-= zCMXFeu`Y?aklHv}B4;pQ1w3UGJ776!`Ot1==BOWqHD&cASWVrh@7W9t!@E$a8w1cSke7OX=phyPknSFsn{ zH(TA#2a9l1PJfuWb5RAhNcN9*eFEHXY?K4c|6!ANVn_@iL5tUDr}<0z)}!=wvw(T# zihHOf0F24VIr$!+sSr3C`!M=dbKeh`%jx6(b0x*-MDkA2nIsFW?u~>rne;jT&9b+r z-EB7|&%Y8S_#+z*dMOCKm!qmuQGTUvO(G9U;vPN?yDQ7txDW(^;gM(Bc;vb`F)+tP zHtM@y;`zAOAEO-am2@e2(QSGP^G>m{aG%Tl*jB<=>;7lbpyK(_P~Z!elRvku0pPB6 zAW=i$!yVDFQ}TSeA~Th%Z6s6Om6klSR-g5*^4UtfD(pi*ymIG{I4=3KRDMqRfWM*g z?1yLMCCL^LCWwuL^LzkqKSiz6ZP}qmdx1Qc>3=cL_auS0umBhs94)xmWUSTS&sX_A z7ofi(Jt};iH;I=C0@v3J+FZO#v2jENRB(^Vy4D7P5AgMH7a}~)LlTX?3d2n@@;k_Z zL9EI(M%pZ@w|PL+mG=)OCMF6?C-3*OJoWbXy5YSe?7=>rBYk}B84Ez-%DSyAR^>-r z1u=A2DN(#*{kt~b^tr;A;cdKtOLHt(J46^?pz`a`&zQMe4ZsNwB*$Ue1v|0&rHX z<-3MBwH*B`MM$FAQdcLs{2ssU6a)O~4v+4GHfYb*MNC_2eQrW%R6s$n-40|ZI5K1j z+We=7BHx8gT`2A6{AbVeouXxF<;CGTXJ;p&5{f)n)g+E^9^l+`lR@W?|AlaR5kR$G z$rBxh+CV}ePL573hvhH9ps+OJ+{WU=x!Kt(+@Pf>brygghBeL0dhQq4rbUvey$%EQ zhz$&6%^y^lP~_?fanTp9bp7j_&G!E>Z3Fnnq1h^SHTb8wHjh}F<`L8Q0oi*lM2LB%tG#% z?R7z>4%dy1C2}CGgn(vqbQaIX-^%aawW*^qc>kfBDM%zK;WeZF&qrHVx+MqiJQJ7( zJQb=HPo6F|$DZ^nWn8H5`TL}!3C(o!wI5jBtQKr?4Op3iEvR`5K3;D)PYGH$`qPQ` zT`O^#ln?M{clyv$Qr`4BJgBV>hxaDUVlP)hLQJ_pDP$!~Pl`uGpS4vW&-xYj%t-k; z=d0NBDz1|r)K06lXtF@ewDt0DbhJjCOMyp$TfvV)k9nb|(}P*&%;pyS>^Pm_OOkpX(=WDUvb8&6EDVYz^GnF&Pt`GmFEn z0UV8C{+DF3yd@Wxz0vWP51LyrP1cc#@hXrpsOGnJ^9`qCH+Q+F&UJIqLq^-CaXwJn zyc5#ikBuRUDQ{|KdVX$3GL(k`;6McKFa&A%wD6f-kNcaQYmpus9tH}BA`o6Vey1rS zfkZYlV%Ig|7hHDf>dgZI6Y;A|n82LOc5l`Y8xS=woJVKQ{cy3X(a$U6+?*$Oq!K^} zP0uDu>y~q&1rW7j2L`a9@7ahtU3o?DXVDo^t>-LvS(RDT@}~_bu-qdT@JE%_cJhh&b+XOEUo5r>7C!xjk%3ZVL5fWFeCVd z&guy4hJ7|YZ7?HdU2`@zF*8FHQ>YkaD|lY0-~&<6w;mK31VK){RGL87w`7?L+mzo# zBu+&>HHCd@5EA~}+t)7q^kEY0`8R8klbYF>UsJ5cLgjld2Tp2Cm2qI>V0s}b%EX8+ z|5q&w>36QAjWP<`oVbq+1XPboAh)k`Rb`}B&tmCGN*-p71WS(Q&KwOo901~oT=aCe z?vE;R%!~qQd{D+|I_eRd*Qi-JB&nE01h6>(gFgN%` z#I?I&9BeYi?@VtBMw4BrM zfH2xGHX2P5K*1ndi^py|+iSI^VAzQgFdeTLN`7t2WQDXs88? za4?WI0(`mk62~WY1_$lu$GY(i_?4^r?^tZo!t>d?tHOe_RR-kK=0zzxgZUUE^A85} zgc_R~o)kP|*-3l{_waK+*liC9xApKd(S>JkSu5fhVly@2e;g#)Xs>hB`XC5fBAA&i zPwg>L8WpXG!k8Hb7`LqcG)5jYNv;fWYNM+&oYB6n%dWUk$r^WCj|FHsSq`aQI?pw` zY|?_PSi)aY!+9B%J*YweQ|Q4k(fSIkdVFf@hzb+TD;5ewT4>6Om^EJ<-860ST9ySz zs*RO0oi*P92RKQroW1P`g*v6BEXnqEO^3CSNLN!3q~e|fW+C40L_k+`1-T^iu+3c` zZf2TY*7tc`@gxn94AG>43euqZ!s!H1h5vDp1|*N^!#~&KjWIr3_l82b~_B8MsK5w~hINaIP#GinQ#@?-0klL2Rp*U|15@>#j2otCdb%DL;8 zdT^ZK!5q-W_b zz<8lwtQ=7Cfaxfj*|w&Es=2tV;(Im*fA~=Zd9Az%8lJ=m0f&jRx413+oyQG$<$JFE z0Zg-;l-y&Y83RQIeFH2wr~afk|D(TFV`4*@kN>ae=(fM;YjSIrK&~>eh6hK6d~uZ1 zDIM8WehL^XeC3)<*g2}76i~cHPc~tE5CM*kqAcFsfr&HDiWR#%OIr|%d$=O71{tuk zuVfMjB<@f^Bgg0@S#alMAg1}98$o0qCNhzc1qSw>1JJ*1Gc)Z+w7gc-BZxl(MrbLt z6y5=+(fv?MC70!CLL^1>(y#&$tAla&`)I`q9I~@D^q^TwprbolJzBPWqJ8|>v=yTcY%uwdeE0y%EoQ!LElb@-Amd3Rj-NQ@nO{?-8#&e{0zL$w?E(P*&0pZmzHyogbXQk-b zAJ5rIYL@_shVL`hdM(w%pfz}3mMkbGnMRg^>&00t3INr-nyQPFlSYLjk_MfeD`z?8 zrWXSHEuCdO|4MV$WoW~}D_J#ki@<_`-HyV0_PFDcXqt;| zcA)6ofo%KOPxDFV=b~=f=Z&sgb&j(wyDZMw32A}wX4qY*GEnw;mF|t6egt@^9~rdl z4X=g~Ls9S5*lEsIXb2d^@A#7cbFt&*6}?Ve@_8Z`&jtpZP3oH`x2VY}f~?XPzKiSL z0bP-e1IBOxCq#Ve%EiKZ%gOfB3J(NYiDl<*X<&sPfesAH2xsZ0ZO=@Kb;*he2bgwS z)^J-^)4;okA1hq9*5Vl@PIE>iJ{FLH1o`S%2gV4Ter^G=Fh^(nd_$AZ^5B}OGdIWP z`%p#!8?$|w=9l1tpD(kCYq4@hSRgZ;UDn$iQPDK>n)IDMU{=I`AB}f%Ci6|tF<<#( znaXku9*4Fr%l_45(6vstVQM(kXsKZ4&DI-uk<3Gv+weBaVX1yJ$0#c^B4g9-LAk0? zWz<_edQ+V*u~E5s*$~&v?;k8Q@3vXdgPsUG3BJMXexV48UePQ)J+zFM*3_nYOzpuZ zPx$xC9$k08|BaC&m#LY2<;*{i3`*8GUTbN9G$l3VoF%rNph=ULZ8sG112n*Yen+`BIeIEF&g#4znhrQp4ifC$KEzlln$G(5T?^QqxzK@pp=)qe!0} zn=uN^;070V;?}LXr}4*z6NXt|4#u5Zh8-kzI9rRy9qMh%OyWafUy^Bq;D^AZ8<_8P z<7I>jm!D_@^H3ly*CI_{7IV3{c-FWzU&%3zJ3hABZe)dqwk^4MBi#G7X$q1LYZ)4T zA;hnP6QOzY4%>%~BF$&4)I5)|6F3trfnXu+QDPW?Xt#SbXNi8S!aYHZ72{r z)w)-HP|zcWaVgeo!Rc|cP~Uk`Jb!VFXx&=F4GbYSOQoE#WQ-klZQjeMbwRcUJv9c? zPuIEGQ_`R#qM=q9slai9N-w0Y(tpV4pE`Kd#B43=^4Yv%(r>ADk}cfza5#9ZJHB-@ z_?(S)d1q~6>vILh_23vckhL^ysGqmwDDHm14(5d%j21psB-pnegmC#_r_Xh;7z{w8 zCgRW9&M$#93n%BPSpxVW&3Vv2vcZcU`OMx3vN@QHV1?RzUQpi88M3tp(~0=?`yabQ zV(5l{OR;)J{)k#5MtNDJ?lQ%`)-dP)KCbhSkVU*4-6VACl`V%{O(1F0GCo`GXo|deD68?M?7#HxAz}*G`2zA#YIRu^KN}XcYT$ii!5Y3B=TID=3l4&MBkZ^S#i9T)=n33X@z<*b&2Qlr z^2804p=_3O%WmH7WQ*5!!&Gp6w}ZiQ@`yMI)cXo4f83}Qym@_?N1r;3Tk3?00d$4B zaHUEmB92|QrWQz-eza}qH--0!cL~QhRg7)YP<2|Hc{czn8fG1V$~pN#;ue!2tt%C;aLZj*tSF)~R`zq>1e=$**Uhi|TGf*4-YtHn2BH zcRS~~#mc%;r|28p#M27Xx#^uZ+V)7&r=f2RC0Wg8+{cY3+%j||V9IIbX?TUYyACho z=HgfwVC}w+63L+=Q}N!DUOsOS^n@x2j@z*4${%k4;jsZn)9Vi1N*3NSdCfJm68o1i z#K&XSE)raDGd=!kp ztjg;u?tfC;UAj5gdfAIT|6o(oTu-~I8sMG&3VOB8s{p3~7Yzlx%&{jf@pM!$LP(^` zW-O2+att6Hg~{L5ZQaaOx&04=-NP+_J_rlU{VZPf-6Esrt@R;H1cyXqXxodj7}tAT z1@FlCrUj`*`0{{qVM*rcT^Rm2C;X03o?-Q>bevl_2oyBvA}SH1mS0spOZ?|9!YlDcYgi?!F@N!Bl4LLW&(92;*8p`l~rn@ZB8-Ht2H!HBR zKkCjl8pP>=1g7oHPqVXfn5Eq{9B#70q}64$3)qs9L`Qu+6xO-1~HU_yVq`%{rU0Z;R{PcYuC#h35y!>h{Zoq`9-!ML5iiK3RfZ@ zz`}JQFPE`MYd->7@%&Ns_z$h?T4EH8N)?JHAr&o$>R4$csrNSad;~!%0b2O^`TxK6 z_ut&8?+!ROyXc9y2vX-AgwV&pBkdR{`ERp z9*lyA19-7nM})Lr6KVZp^N5P?i6)G%P!c~kE$#hv+HOW=9SA6p8@Z6qUjic#vNN_tPv_{s(vhGqw90vX&6F7`_Tl<%ytFbkWM0^>=ErDDQ$uaj zWG!p?blP8Hg5@D2gw{_!$TggmLSG<8ty(xJa$`5R7O0uFKUR1)sdPdm=-OO!WbI@@ z2AYy=19GU@mp}t?>fQXK{p8t$3hHHH^X#G6=0>4036sfqMBi*Od2f@yqAj8zAf}oz zvtOVB3g+bjNLt9^;NT#aKe6Ga8Issb#U<_j_f`IgT}Ju2PL98uH36uPKUd7vyDbBa zXj~Gt_H#1gzv9bbuN44mS!+U}oC7aL`kjq|@E~gH_U?9Zg()fn$M>B9%aZ&R)?$0T zDrVoDK1Sd3uP^v{q3FXUQiQ(A9Z$XaG%UK&;P>GbCxQ33a)~CQtB>VJ&E|(cb#B?~ zC$5VE6{ccjkj9gSs+mhUBuSemFlz=q^j1je~!o8~W%2N%rE$$_#FV~R(K0Ne=1k|mrBL|{Tp zM!-Wg0Ld*?7ijc;?k#s-w%OHm(b4hNdJ^Is=}`leP!nJx0tBZzb~A)4!KgLB()uPX zZuzrY9MY9*jXd|qYBIES1tR-y(NU3;LCKiEuyR<`aj~cXNj~u`H^ZUfJmYZf6d>L- z@@w+U!u%D$)uFFhIQLuf)7$BIO8x5(Sa|jO4muMEmc`TczQiKG!2pe|#)psUW!m6KKo-^$0g&AjaWFX<2u`*QoL9|D7uh{MbO-2k4)^zAy?qeM>84k z-L{#3edyM84z_z+Ex)yCmOJp5Dg3Li6i6XuY+8vFJDNhS8LS_buie_OY@p-D?!Sz) zQpNt^*Zp>wXUfcM>U-nfi(p)jQ0Jc{foN@04M+k^+VgKDx8Gr(PX1@4YA#4gbKFUS z)Sq*5N!lYFe~Qm;Le!(>Sf=90jD%+O;*!I`u|=+cKu4;WLVUxi#vR=5?wLI84^`=s-{-K)Dnh#Q!uU?9<(SCu+!@3=VI*u>~_ zo#i9c@~hjtwE+Yj&!8($*2Mo_{)pE)S~e+`h7l+ zR{y;uDDVN(uf_azfB(6cumyzN1C-$S_+X!Au|-BuuExmMyp`T|;`&E# z)~tF-=Z@=TTJGy=`SZwNf~%_5yQ?EVex{%hf#(NiXI*I1#GoQux`;YQIY65jp&AOD zM7N$tw65pl{kNX;>vBrb9-tKtrm@6BYoJRGDAs8vI1Z(C9RBPOJ>S)`EJ-J|bfxkp z?7e!`gL*)oP!jviwUi+UrRjF*s=91LC^*e_9gMLf4XHkCfP58Uw<-~={zAO=rG&Kh zly;k`R9^gUp4dtEP2Y7(dQwO$@nw7&+EEbmDPGN}aIQZg0Rqur>B<@?N1odwckzJ- z)hGn|_h1IBLy!GR9*8N#6yFwHdvr7otoy=mZ|ChYf?_#icRs)VB;QCD#l$Ufztke5 z4hJ1kSsw&kn*qv@JIvluncyoBrh?otCxD6|5)=tO5}`>+1@ett;I@Bf!SAbunFV=y zJufyAmm}hVUX=~uWLEF-;>jHv!XM!wyeK=}IYyqFvBTwd$eVkmI72qjobXeCOUL0n zIc6zy)vB!?p$d|r%1>lA5Gl!;GEP=8YNaDP0;-yTMd)HU{duve@9OxZX{$pzueslK zFtCni9*;XiVq6zp@~6*8)r4$tD*O2Ku1xW_P7LDjS{b{c3_l+qm`qFOZkjn#lEpH_ z@wffCXIIzmOqV1jdsS6$dk-H&XbhlQS@R`Vd%Z*3JsMtJ zqY77)@_eBNrOZ&JyyQGh)*C!~!I^cn%!#(@KG|C~+L2jTVGh08WgjpwPyRbH@gvCZ{j45xny#}L=vz1Q zj?@45%^vBGSE1)*LZ`4F#5KRX@3XCY-RoBO{;82%(j$+UIrztrQ;ys<%=r5U3)}aG z8xk;g`~nzY=fPl}pn^@SX9=}VAMa3>7057}_it%!)H=SqtSTtB^2r%W%%fKZaUX<| z!B&zjU-;~bcktd(bE-rBd1&!}`**9qnd~}mn zY|~1?SA0=w+v-kZR5`mg8ZI%9TO6Hz(_?xq#L9`LO{vUBL$>II;Fco>6C6M>F%y~ z|9ATczkAO;=RC#gvGlMaOT?Ik8@QR;G1}L#cLV5y*y}Lfv}qIBs$0YnQ0viv*|hUT z2mmpPVLXt85CwzYTAX=BodjFv!WlG}O)uv)6bAogP_C66#j7r^tv1g|h@q}i?x53r zxjx)0bvnDIDp}n<_EYv7F2Ia(aP#caFR&L+dZ|RKURYDHk>A2Rmhyl6NUd0c0xFzJM!<%KDPc(z;X)ltctprF-vBwA{;o#O+*^f)WfyAgy7q6XcLv+@< z^CEF;_mV4=IN;pN1r_62&3Gl4#V5vIHa6oGr2inkL|5mGX+U#eQ zs{XL|Zp6{8Mmchn;|oEjXRB5}mE~uPA#Uv%*?loy$l~i>#0Yq$ELq z#E`&z%$3dq0x9pL3fFAX)_mvs&^X)7e}M+Zj9lBKLpgTxglK?zA{?*es=bI4Cw|f2YGN z87+v^AJ%F_w9D=vcT89qBHvpxt%UhfNikHg8J9=#i|4!}Gvhemm)ZS4rz|zacPK+V zgLHC1NTK-1g}5oCqrxbv1C}gjHs8%oz&Z259D&M}h+eM$c)IgKpSIvdqP0dGqy(oF zb5yZX4ezfBPF504u`N5qD4B!p99 zz(JueU%!nad#w@=La^nD&p6ZK5X-zUT~&iYE@@wc1ecN=e8w=6U5-CB7)|@sp$dg^ zZ~_?ffTe6Dr3+@E9zUcCjIE9|pQ{j?QKpWqj@$Iow_48ebw;A1NFIU!kZ{sC^q8!y ze_wsQ2Zyiz$`$G~FoX}pGRiN}i)O0k5On0SdL7MwM7PeTCz4yI8TIe>B~%L)M5|fW z0p`7XqJ*Ir+OW(RC9hlAc=q%1^xYN|q&KWz9zL4BGj`F+1Int}Q)$O9G zmO?6O>5i${FyZnev0onmU>3iUfl3G8)9wd6K3>ni7fLAL@GY{=gLRxl^T5@RNXj5} zP>4$ZAFgf3Q8Z=F5jTEz@M{E9f$kW%r-P(;uuzMW1#g^#F^h+!sAIHZt-*}ZRf(i@ zs!szG5WrKSoxi`M+-NVu^q%Uu8_lpha+LC2krs5%IAxTR+(9mA_Q?SNngi1_s838+ZXe58Gp^zYa}oOkmUwsUC(Mhd}|bA)LSKD$bVo; zxYA*ds`Q^=%JR%r0ZnTr#eaIEU$6sNFjk7y8gMhn1L`+9hW>Q(shaMg>~^b>n5z)Z zeJgg7%s5>t&;y8jA@@^3hKWfNUgq9*EVbb$GO4`)!Wjbusny%dfKlbt>)GzaDY=v){vXW|2S$gaK@$ zU{hK%UA9GvpAK!c_nz}wKKc3e=|qfM^eUH)z&3#jMOkTnk5@8{(dA0JjIFC0YL`+; zA*6#%;#^7&A4=@71xoHi4XCK2;9XbvDH|;aAT-SBi*2@1u}n{|6K9;xQS=&AH#V9_ zA(!7(v;2MO69pP-To-_JD+GbNgqZB7y8+aUL#Sc#j)kRQkSv>k0W=}}Og^XIl$RYK zVt#SFFd{5oh?5UCkZ|>OJ&DQ;yfAJw2_!aG5(cQvpWriVaJ>I)x|x=b3E3RmmDb@@ z4Wy*DUs`g1*HiR+m^nUWO*l_u%+=7oFh)2$TMwjZci~d2RWxOL0f~fm5}*Ual38sw z+;_3RIoT;?V8SQ$zLe>6U3cdF>vOWP_-tLM$#LDLQR8>kb@>wPsyWRr01oM>U%nbO z9}&+{>~-SL^%Ff1syO|r`8bl5g0eMe3aS*IZS@R z7Hsd`S7Ge^Wx^nOht`1b{8ZAd4sc5#fB7aUBkN@#Ptfqse}QT%H0-yeXiB~HI0QSd z(jB`G-#smybkX%+X2?X-NO%S?K}lXKX9DRfT~LO38z1TF96#h~u{Ki!Uo;0I2dXfj z2tcl)ShTEiSV~#&w~1PxiK!jsQiGzY0M8eZFddr$9k%%JrQHq2GL4yKw`J`%pT$5` zdoXy$?VZp|pdvCCnPPYG3*IA-vlq$o!%9AnF#y@NWt(R|T2}WUa~TLRvB>tUO;ZBz z_izK84BB;Qi0zfd>|WWGL4dncI+*ZnBqbU4<#*v#D`oJR_qy$A6 z&{AA`;fzr&U+eJ#U(le!^!kPIBl|ab6Og;avUAJ2i1I)Uf1RJ{DLMd3^Smg&z@PD# zMcj|@5CCM!n?nCRN{!Ss;L8q04@pU3G#{U}wc*Sio;0~iZL_!irXv}MKt^js7uRaA z2Tv)%rcDngL+=aTMOIvv!vV2q!8b$0y>xEZEF^Ng{vQ@ebiXPqhnZw;FS*}I%q)7k zzA8`P)^<7nDqC1TRQEGb>h5jN>4@Q#AI{p%eJ)y2DGb0W!Fhr9G5ms+~# z&B37}?q?XvMcKxb)GtbPCF^dsJC~0KD5OsI6Tg4F+j+I%j%k`(Terb8gn+@j1B{Dt zOexWI>SZ0w18dqMk}i-?wbE(B8Rwetjpq*U>qjhW#$(q~D$*Zge)4u?3cfJlBJ?B({wW$e~{;?IjxdKo;MA#q$ zVAkO5?Wb1(Z)RCPO*HgwX#(Y&F?XYaR8ML3GwZ;eoMtN*i_6P?*J!z(-?+H72`SQ#y z2BZJ`Vl)Ns$PZ&j0{}>{H+I7QjVcamRlR9L2ecWNB(m;5hX!QM1|=xx@$=hbXn@&s z6)9m|m~NAzCzeBV>u*RodTXiElbJ8`xQMlj^4jK(b>w^G@mR~~IU5?LXNYiy^sIDf z27dt2ff}FzK6L!*Od-kP zuV%P3V3N^Lw%b!?$BS|soE#-FP5k~X-h7{#4i(E!P4uy_OS)f@fxwrcWe;@_Vi z2{?OcV!nlnxSWUm-ohqQrjZde#>5)^>!kRX^|r)9l7IlhBo^zq2v0GzrLhpcwvAr{ zWS1XK>NG)-eYl~ePxbAOzfQ+i^-ACBRhlaPEd~Z4tu^FE=Bm7wuRh-IB+M*7Y`+pq zmYw+>@D;$8J>H-@`nmEZ6FPZ9$H33x?J`)`o4%xRx>z}e3b5(DQh5`sPAUfmAQ8Ms zQW3o*JYUKb2#~>zQhZ|DG3gFT`5XgMwq_xSA+U=-jr%M>n{9GnBbwZt=BTDG0^;(;@(NT&eDE%$oE60tbVEDH}0IjD3O<+SnVzo}8?r@X-Xw})!~X3iw4!P4I!h`T`GD%YJ7`cd}r2~i!n+G z6eZ2eqpstTc9xOBOIc0yqIY_$ZKqX&jMNDy`Bv(Kw20)QrfyxocP(#P#eRG4hVyjK zr4UW?iZO%aPh?{m&T04Z--?=pI_vtGFRTdc--kFYfU~dCJa*CU7SrO3OI#x7l-`Ms zc`gKyCbxn=%lhRby&v`NcG`WP!YjvYTM2_ql7Xe@if~fXtd)b*H86k&4*;&H=yA3prJkJ@+!4O-zqFC{p;{NWX^p=U>3BnFhVl!u1RQsyYyl;UG? zmjJ!=|4(^`X<@gb14=LP-A z(C9s9(#lHS?%724l7z56HvuR|Y0fX5CuN#xO)hL38$#1);HRG!{uPAqfu6ehX9+Ym zhJ14lT97KsKDP+MFwrmXPfl4`$F4LINB|fJ2<4=y+du6QiGM2PqU1j}mtIVG*`f&( zqFLvms{1~6jXaZkkQ!5=T=+%>S@2csbKGHG0;mz-T_@RG~lrgJ}TBA7o`c0Xsv(L%#?b?A8hhpNUmc9|gQB_T8TKGRT0 zBvJJCgI`=Rf!sQ>w)p9w^T=34Q0v*QB2y0}y8@DhB=!Cp+Qxj}xgoe_Gh?Me3o@!AvlAjH2po6tLVY&IZti39^JKUE zRkkG@Z1#`w~FM+j#nN=TQ(;I0*pV8Vg09PZ2l;OzCr!lWxX#pM|ItG zTdtQTaRy^j`Rp~}r*$wzDqwde)t%7Q`VZr+{bm{t-5Z)uQR7R`iJCYzb@2L-WFXjd zIptG<)Klq2v9^}odq{W!WLgeaJ!@s@Zr%0iamvoI=>bjC;GC4lNl@OiI3`a(EX_v5 zPB#d?5zrk#Z~eY>npcZemr4;8=S#-U*8`8Oe6($vEaNT2chxEPYU5_p`rI+i8qG97 zI*4}DovCF`QrECq3EU%tj+b$EgafgJWr+YlVw-kSt-(>?J~Ip6u0S5GLb8&bDVQVx zq96c!2GdIa7NBAw@fRRdYUH>T--?VTM|jFMryD-_bJV!)ysP1s$fo@g(P5SB*7NJC*X98HX6slY}m%KgI~ zVVj0?bG|Q1I~1|xI8rZg1>CB;-jp^nz07_F1Smw+nAx%A)u7rsIXE(ClI=~ZP8At< ziiP6DRoGf_*Nm{rdye`gujOv5j8)OMcD3M0)Ap6t^SFq|y9I4Z!P#T%AB`HW>wUb` z>(#}9V28CYZ2|h|lns}<*8Y8HS^&4WpWG1avM(g-BV#TE1XVwHDGE1qfalClO1T7V zkes%=vE`@QwP+pfGA*T|_*rSvk+aCK$Fp#Hzr#~{l{YG6$}fS>I~S8y4398;h);I> z+t!FRYPBf9au%=23U6z_BS&f*fU3%+k78 zDy(rn%ZzkV1qAD4{e&T18c-O&rCIETIoVdMhIl8X0Mpy+h$%|y*3ps%;RdOY#%drC z^JsuDN*D|Zu$@rUO%g8jBO$c|ebR8_?rn&s!SKFgA00MMy^@tBp( zXn!So*iBJr*{fR9jv{g`rFk>ucOrGzbda7Y@Yml89r z%(-D*Y9?Cv`*j$Ag}AUzTmu6a9Z`1`IpC`6ww0c4MVKy^|F? zHHGw=NzX5#P6c=J)JsEBQ0TU7`@@r=Qx7i5249?6;;aDfiqn|i@y^!c<*Vh!o3hZw zY<;#yE-tRpy{((w?qr_`=s!_C_Me(|Lun5pd^FEl;CcJLv~Prq-|CNoU}~^{%$FU} zYoKi0PU8NQ-Vy^{C;G*zqf5gC+o_x+XrO3O_!9X+fKv#oX~PA-ggP~%MaIA zbW1myzf7T7Hi{og{C2R*0|7wAnA;r&M1G7B?nN9(aWNUvRpPa!`$^6Ikr8T2iDhct zifvO$GP}7R`!4A0O)CJm1(Hs7;QtX@3oFQ2 zdQ~~&h-o+dwC-9@6Ut9mi4V!3Kje17KNRvTi6p8VbWYUa#~O_sM(7#?V*0+VEt6MS zyvBd=)eKc2V$H)$>ek57k+0A1jyxw`8#z6~8v}CTvxoZX%25rser3%UIT@`kBVC`I z`*2Jv;nXfK3B*~P-IA9E4HnT$-dEO4 zeI-JQfS`Onpm_k3*Akx((^2MQ&HG7z{vNaL^&I(n{@V?8|66VD^3kvh0SKEG>?1|$ zyvK*&j<(r4Jv`{Qoew4{c0IX2bk-lTsfJ)1CXphLXkfMN&%f-i0(e6^Wo0K4sP?i; zDQ&a?-9azz+W&R9GI2#Bl$Yz>%=XfYjJIm^L_FUiW)XH|^Hx#%SrM-H(+bn%L{Z>%377;|lTU}ZALga8@wIg;g;=A@U2O}Yu z^MQXoA0Der>vf!BowI2q&aWpMS<6J8;@!eEOSLliG@mg5NaR_NZzxkooh0~bk(~Z1 zgxNcY0>*U0Va>h-gk6Yir@R^>21p7u9g^^MIt*W?I*^B&5<1!c8QbMRzRiQ~RCP6gCYUU<=)vRaI|(z*6*KErDVrR;j} zAtC9X(=}FnQQKGWQDi>0c*%VI+f5*T_2Kx9>%$F9p?W0oL3cZ!vSyVKZ0>*6qS;)( z+gN+*&}02YWB@2sXwi`}_rvvVmp<+1sr|}W ziv9^q73|lJq*#7e!JO^)t<(as#bF}kKl$ayJ{$fWsQEx}{IRDKG%bkM+kaOxM z*_`5?nNjLJfZqaoDP)QK@t&1~6b>~*;{`LcuOQ#kd(N?2WmL6PF*Y15l`i}3Hx}2$ z(=SQ9|JtGRVIm$s0CNz(yZPxlfm4grv1Kic^U&*Zp!d?A-4)g)NZ4XZGRaUy`jw{H zS7kA|z~gPKHYP|AJGdK@cn_f`y~HCd2{CavT{ddjE@+x-Q*f2S%X(Qj>);@9j!n>N_%OR%PovtejBKKyG=~2G^m6)t$Ngu)(hB5X2|5YlT zXU%C!2Ec#-{o`)Gty;djs1K5c!0qjiS?OMU{_5a!DEoAKp?~zHMvViYNIcCU`AP|L zmlb-r%iS%BUTT>p6jhFq4^+#+{+PpopLj*_!E}rkIwz2oLw(qB-KjG5L6eRvYN=BCb zLJS#0%yMLI1K&mJFlYO1I{x{5ERN≠XNXrgnu1Iln3>2|HncuArl)>vg}!gz84V z;Y_umbNKbyliT2h>KpV>3P-)m+A9galJzV&5)&N}Li02udGXD!eMeo!Ktl8SWk2EzSSh;Z>D+|k_Z14b@Z-(P%Llaf*F<~1QTJV#uVP5K~$f#r+QQ* zQDJ`jM`EhkSQeLnK5$R)@_rW)nUHkZ5(ZqO+OfnX)scxWxM?N`$@9e&5otmaY_tGaU-%xhGR;! z!#1n>QRTHCVf(oq&xp>bWSV|6ZL0_lWySjonw#H`PQQSebv=sU@BF1RRU_uVYTrpj4yez|!JReDts&}o@ zJlCD==^Svhm$rt-cb%)osfS?NVp)DAGXYc6roF(0K+VhtWE1n1gq-HQV%)HUN{det zYrkmVHLp!9Dx+~>HX)P#@biA6z{BwBxU86N*=I1i$nymfe`HLq zmloxpDZGJtdO}$9WlkkPF+AvkX6UPh0*92M+t1LzLF($kLQj`xZ^iel85$4oh}w4| zgx(@q@|Xy6*hm4qV^S@TX;*EB@z!Pmkzq2J=u8Nm`fTy5SSyyY7LTnjz2%}dty@i4 zP)rj`OLIt=F`dxcpDW5~XD0iH1xmsblV!LC3|xSYkiA;S&rnl|6*fLoi|>S3YHEzc z0kT2Aq)Q+F9_}=!FJ85)9yZ%rxp_dgKf{rA_->7JN33X*{@L+$_2_zb3S#Md1QZV+ z2IYf3cs5me*y_Rh4ozf9{iisSGF)%jnU^W{D8vk#prANlLm6S`ikP<1!|W?np@ni< zoYhmw-WKQ)!)wADVy1|+2VL(^3m$(@?VfZXVnPxzX$L6}rsSAv?jBR#U>I$%&Wm1; z`@ac*T}3Xp-ftaC^KWE%Pvj+}5($=PGA`ye z`m!eFyXti@+7N9in8IA0NhSgjypET*Ka@9e5P!pBn}9Hlj^x#%_??Ju+bV0y(muWZ zolH?hq!yW0rJgy8hoF2@75hvnmgBQ$?g|&T=wSGtWYuEj!&uozm*o?(a*o1Rs`Hv$ zw!uN!Fm~Kr(f42Mx4IriR3s|uFMpMtPI%>WP8Et9`p&TL`Q8m%iBSn#xbVj&##|kw z-JVP|w_P0{+R-mxOt!H{69n9M+KqTWuq(72*$Mevg(=ArfeYnEQFebQ zfce75@5`LC-|^ufq$EuL{sUnJ@4iZDd6o>#gw@Pa*oy^^P*al!1&j_GR!7OpW0V1uiI)=A#}j(k0f^eQo2blpy`Oc0rn2)B zi}8{NtlGSyC&=SaA1z7n^lep*llA4eBMQ!!mVFCwlXQH-%{*_LI?dO&5uMB?L7Vi{ zS;ibSSXadecodU+3)nz)+)7zjY*QUQT@ib0f~9vO?YBP?%o$^WP~K_{kla{ryXOT8 zB*b9Xz*ce`uLnY-lJdYQR(1n_J@bHD`3V#SLx$U%df>#Z0V^gj6 zRHe!2zXUwr#a%n^s;EE!(K!P)u%3=9J61VEqUpG41hjNs>FJ34E2DH#kT_^izI(}m z!iI4jVXhg7Ti zKh}}`hSiiXJG#F`DhHcaQhqlB|2AgC?~{a%d@YQlO6hRm9iT`w-lzq>ra}RZ;fsOT zwMSaN%c|ImVkUm*ZL#*_xkS>kCLsaGKcs}h^0`07k55Cpg?jRE6Rl|136#O<0im(; ziD|xp91|%zCMFtnBPx+t$(q1vH-Hio#FKL=10W>@V@qd#cGV`1lc*GesO78tyX>$i z{z7s$G4JWHoI4b=p%}zm7<%DSDy}PNs))4sv8RI<4x%*F=o@=CqT>7S(yIM(eJMs< z6QN?d#%<>29`Kb)msTDWOVua^`Y)O@7c5k};r5v-`uMh~cPSm&@R2 z_~0*C0vRDv-`xR*;rnc&K@hjxDqCw4I8G0FbAIk;pSH729P?>v^iaixQGxn4=?OCH zq`ubqbeeUQ;l7^_F;Sy@z9!;%*VfQ2odUk8C?dQu@-=A3X)a1KO7F-mrXsTl*R+Q3-yX z1Nu1@;IUre1@D(|R@s@1GDks2hHX{r&l;6E6?B-4()0%yH#vYox-bBNjQkqZLITK) z?+urOhsVTH21oG@VS)zngZgh_*bG=eOldVA&yP-LBzMue{uF6#xOrMWWiB_gVr|ze zOBv$T1$xDS0FXcLFD<+v0G?u2jz3!VfM4rFT7CPic+pfho9w6VuXOjd+{Wz%#OOOw z=G__he?AmzB{1P}g<+UcN;AmyK%fYR7dErc{8O+f)tTi-l7(!TUSD->f+Nj~>z#;j zt;Vval%wz@M(0oGhJJ^5$-*sovWgOlH;P;|%L94ld~Aa{V1T|Aa9CKI%Tc0K%Lo0r zObyI&y`OKxt8ap8S`y-a!%5`epVxb8N2KmPm2WRQAB~_8m*$GJrkiAvXi4-56;~w0 z>%}o#O?uoqYAnCzzo|tDU5p z+%W1;M7ND?Z6}m0ONU5o(LWx~7`cq4Bq-A=%F&SdZ2e}fN4cN+ZY<%XpQ9X}u}y1E zIKj|O2vB@k?C?11``7s(`SjVUi~iDuf}d{o^m#Ceidn!AVk_4l?7-i-B`n1!{b=kpa z#K9&M0WoUSg1R;5DnnitOqepG4GH;7NT0#J6EnVQ65vF*30I5hBwh`L9N1r)M^A)} zG~TXWqH${=L*i=qu1>tcPC2p*+*<+$fx$}7Y9dd^Q`!$>BV@{wp-@ETxr&G6<01Fo z-}BWa6a?hmKv^=Yupg(zq1j z+{2ph^Hw3vj+XKa!}Jr}-`wA}O6a=sxT+PY9(*UXdoL(6SxCjlwi>{wEx~s(s4bxt z1{0ZFxujCD*&%bp4Ek;enS4IV)%04YreWG5`oU{=&-T{KKbR7zLHUpaX@nQitYc0AtVghT3T9sQ;L9;zlq zUJXG|>C&j7vvHE8e^0S|zuz%F=jm0xf=T_|} ze6&+@mgHx)P)LVOI*e_?ZP#B(2HsWXCL zibHDL+67mK5w>omnYo|rF@y2tuI#Q3yq*NUYCf|Lww@zJnacSCXchG1y1NMb9RA*R zp}o@>=5m`*~O0 zN-y`*TkgGRbX{Pxy)V9zvig`h9B2c@Rwb>vK`R&J`b1?!&HbYaSj5$#{z79OVUtP zhXx~hsq?)h79JY_Z?*NK=gv{v-mo-?3II5%aqU)-dN^)>yeeDtqFu%!hY}+^LBzlE zFYNvZANIZG7A=Rl+z^$wKVD{pU>m4}R}6o}laIv>@T3fZ0D_d+p{S5`s9cZ|=Kelo zzy8$L5(;lC~-8|R$^U8-X9%?B&ZaFLTfE^o#sp#DI6&!?H)#N88QI7dg@~@ zB1vhCIWa-lL@%QhtfSVr4pzJiEc1 zHND-)5?<%{ybKzmUpM&5*&*Tv$ot&&|-H77E zCk~EsvU*b__~`G+Z|Zcw0f-AVWG=o$vect*P|f=fu?YvxOSHO7VprWlKznxo`Xx%~WBzr)`|s{lac@r#(v0HFfT z#b$TO%h@%l)}zM^iR0?#!-l;StMvI+udk*U2t6@(iY(J_v}c~Vb72;=Y+MPC6{9`h zAKb)~sx80!MlU6o@<4lK%wK+$BeZ^gxmELgVA(%Dg%!Q<;pUwbrrK?%J-xBpU^WhR zDj?ty4*RbtRl<1~(SlOuVp{%nyn5VGT`H}?dqyR%S~T*w(t`>|{TM$ea3F$CfKa!l z$$Kl|K9RST;X9^V;9wwln?S#KpHlAgaVEVe;0Vmj} zNXsxjGs@)wl9DjVa*qWRUqpI@W(9XDu!;fC`B=ZM>lGPbd{{MUh zw%;tN3UlfT)OX)*^VnFA-|@dMde1W{(*I}s?r)q?X69_Dfm`mj0I>QKwVsTqH z4Q>B7RsN-O&&YKkrGOkiPp2+n!-fit;2jHh+tNP=1SB~tUyg}y?DAk_(RIdWxp~)1 z+vn(KFTG!6Hy{(L64aAy|8w@BYQW@pGcoWl{e0+hu0rd34Uv$$y zGmE}U1Y20HjT~E_nCW@Y3(H$PX+&5@+DgWm6aVi`Ca10|2{=$rbp(@T32{(3~@D3V05MCWAv zl9v8%U#P70hOV^ssPMDCR-B1wJ|3W28kVPdR#w(kue$q|k@{B5=i|f&u*u$|VE7ve zVC3qo8>h}ww{>S>Mvd+L2Zbnux-Xy4K98}IQQ_)BnaVXOjRg0}4M1p{Z*Hi*Tt+_r zh1%>|ZU$Z1<{?DOPQGDVJDbGc#J_3QV2Jr(WELKU>^s8@lYJ$i>+@;hd`v&=)hMQ#-pJ)AEXo)_Wc*cP0c(LU z0j~dZxzRCA+{y24&PRp|g9BG#&r@fG7Zyv3X~*;$qh*mp_VujuhlA)H_Q{Oqk*1xM zTM&DJ4jP0aCX6_^m)^DOY(!+(Ee%3|ONPu`G)pYz!oxxlaFG;?Su zgjytCmEHfQtzY!LGW2*Z7?c|y4mE#e&tY^GM>I>|Y9iJNT_{o&JI^^!r6AA|dJgCM z5wSno@wZ_TLj&<3W_1kA^re#l4BaOeDvtb!xT<|6eiuwv!$z>E85) zKW;tUdW?uUxKhHw$cXc!<;K+`DK9x@Al4YBKa1P+W~Y(Y4i-hamvX;{T9Msh!x6pI zSrlviJ{8?1uc-~y$jCP?4W%G{7ffW5@pw$EqTO#Q8nq@XB__Unqhh&On_N{UMdC^s zNvp*wG^i*wvm!onuzRtZBOV`#AOnDLk_>Y}q9aQWt0{JUbK_{mC%J{j+Rfj!RSDau*~f}uX;_RD=81vhypSgm2GPg zhczu4TIP{g`kD?FD4(xXo`Rg5cc>@1ufp^#u#LZeZU|zwwF!i=5NN-kZ{N?Z*5;xv zpOTdco^7h<6iEa88vAKb(fKI*Fo{U+3zaJ zsAAj&xLvD$&Nn3u0jPy=u4n6IXK~rxUka(KPR=Kf6ssmEosNCC1J?#azcBt9GwWincFqq%M`2YZbaLEadR@$e_B?uk};jeFcb>( zZPmgLfas#0l2&CMVD{EWO251QL1U*$JmWo29SV4!z_*y`;8hLN!rU5}70u)Lrf|o) zgqjxjqVC9ihbKMJr9v;^?Srlqi@(IR`RVsmVqdYDNOK$FQrNVgC1?#a3~ww=-zygV zc(CzwVAK?yHtQkq8m7)wPrPKD&?1-CyeQgjTl7*PCC)^!BnFf}-SnzH&8ess%Y-p? zyp%|pgU3q473`L;YN6D;WqI)_CK_f~(xw)XtC7Vk&$khn!$X8|xSbl6pLejVP!P(PZ{g|lZCj5&@LN84ci)@2YcCU{2DBsh-C_+Nn#reU zH5>7pIN5=r(^fMMl-uK5{}ptC98Fn!^Q+31&3~^XFL91e;ztytF`h0R@-SqLTV-lbZCAI$;5{Gvd*7$MCP%F<>NGc z7*p)|0w2925683Q7m;~oX32>OoR*Z)o8KJtS^Vd}z1fFq=b3cwhz3PU=rI%4zK*n!$qr{c6?4OE^y0@KG9N5X|_aYR}C?< zb<|KS?{pwP@t3kaub0r87+93D;5f)!n7@aTL@um&h5uNO+ngy#{qKglPL0Nh*d0m_ zCCL{V*&+N(qRv9m;$ga>tnD!5`^VO+B}sJ6XY*Blmb1k{-K2QI9xVq+QrBC4O`gL8 z$pVK1pN30QeUPKcv1Y@Ie`v*|t{O-D_RTZ?HXYcY4B|SuxCj7YRCb9)+#J}YtOO9W z8Y#Kdtx9ejz>vk%-%oc$cB>-#RT+-$nZuJuZuNeh#^oHJZdJ(j&?dh#?Q#abWF6TM z*@1vzKMKm`h%L8H@8%x_o34RDITZ#182>zC``d4mbR6r8)m(34-`M*MB|J%t9Icq3M{wTwF^X;`~Rl@#QNpl+*T4Q4z@m_@lZcW2d-gQZ>pOw^*+*| z9$6j5^X|vlywi%K$Fq#b>4vVi%kh+DU9SoMI_Dx8Gl8Uy@bdYE9foax`NPgNyg4{wvW83ng%SXNb zZ2qP)rOHkub8a}s!h+S1-jExxh2qI6=9^PKei_^qw9az!SmC zqIelH_jdUMae}Dx+Y*%91JG#zw>QmaJPZj0qBfL4Y?lhuYrHNma3~})B_m7@8^!Gj7Z}u18 z(LDdM(*MHmypo%~&GCS{brmbLRG$RX4UB<8q|p;>A4a4eq-K`9m(}{oEQ{gR3#=3O zWh65bfq<%vST??Vz0zqr0T@IRvjb|+sFPx?*y;6l`TBK1>GLrV6$TKFgajeWsHo^q zdP87yrymZ+)^Y1G1Mn@_t9>ZeQ3;e}KiK!pwty85Oc?osRe5)Y8viKKN2d z>rv6_S;_(-$V9n0)GgRuuc-| zI5Kd|hMQ@9-<^Z@^HD}38y8{sRF)U4{DljS>{b=ONXCBeVB;)Dim@U#DSS8>2w8^w zUka}zyVhqUr4qhGn_O#~;;v}?d#8=FqmHw4U3W9YJjsg^LIg5v2L5;3wn=vW(V(rT ztr7VxKV60BwF-)ho_5v!$hhseGV&cuK>=*q4hFR)Mw}S4Iy2KVgubVz^hO?gK6!CT zpEc1CWsDzQc`O~dqA`*Fa>?VX{Ftp(%osaO2t|(rp>c%mDtz7bduYt@JNtWq6)wYD z*w-U219ft<@h;&J3{Wyb5Qabm)dmkTNZ=__wb?`xFQs2PK zvULl5ht}n;@#2gVCNm3B&(eW2DgI@dk(G299vz`?m&s1$H^9xaBva%Uu+g~m^5UJ` z{jHft49AX5b+IpK2bdSdAfTrb^_pzg>E)y!aGS`H$Ke}mjGeOTY8YU+bjKaN=XqW8 z5lW_M(rKq`&kUW!om9Xh| zqOBr@4$02T(^>!P`lt0KF{9;ns$9rShcb+q4!?SUq%eHtlgzJ>lDtYdqoJH zHGL-cxzF`!TWDFGLj=9b;b>h5)o5}WIsN8tx%VcG6lTf;h5^8{9v6PbURxezZAEHM z(hWP6ZX*fqs{ALiD4C@+2&LF9)clE_8Ly!{hY~>IE9rb$n*V2IFLImuCuZFI(EPci);-vgcuzyeW(U-@&d`nOO2i&9EN z62`5clF#pIu&-r_Wzm^=bZpuGT>h1R_}D)T4GoJJLe=eRoYjiwAf2Wztw+f@1`P*X zjj*8f?2@}Q4$@I-KCr(8(Bhi5<3%;Q?l>TQ0dtloM~)l^4`xuGX1SZ+c=JonJ?*&Z zsmXxh!H1rB>80mic-GOCT0jalDFP$`6!AUxrU#z-_pki`mCEj(!p8p{Rx8-?Ep+hB zYIoxZK)F(#n3^<^K_VhjO2s~25kU~5$_qA)eexAYZyFj7n3bam3GL=D6x2{0EftrI zAPIsb?t+r zG?%Y&aJ${-Fn^V%q&oGtK8$Q77XknxLXLJkSHSi{L88#Wv8zh&ICeFMwf4PamRIT( zM;!qH>p?hOsRUsZo1s5m!qPylql>=pxh@fkNb0*fz7BvMeB_A@>sG$H{eiFeODWL3G;5Cyot|0(A40lPS%>0#SsIKl=F3e&Ms)(cS(2 z%r*J8Yply<-~0wR%RtLc5e`QGn-_dDy>Y+x~pbShWF%y~;4`@Qx(2yBq! z0OEl6pM|EMmfW)SfVapjEVe)`*DcL?QvhYrHU#%y|8A4r9%gAxJej$)&p)##EGR|V z72PKC2$IUVyWxQM;v6}0KW=adS* z>u5k=iJg3l2oXAd>6#zk24VOsZ-4#z)vLmKz=lcD-S<6s&qEKnjw7i?4?!eW7=cI> zM#H7jiN_rqdnaCcu*DY7_5b}p{&RGEM0g(9pP8?p%=F`mg(g5!i9>6EelCKgfc;xR9UL~uu{dbIBJ=(;fLP2sPWxPLpzn8cCxCj?Y+gyM z855I^AKPZzt)H>mWO*Txy(71jsC`Sew4Rb9M~)mz7@p(&_AkFdyQ*Ff45QA;QeYP_XlKjwmBkpu#PHt}4BK7H_{As#9HlcMfK0|Fg-BB0l7TZP>B&?2jzDHW6 z#~@-DnWNW_zT&7=9M%9a<20v1+_!&I9;wrhMNPEWy;jWL?S?l z1^*oPRV)_SdEHFR>AY|r~HXmE?ic51Y6Z0g$^IIQy-bLqu2+|y{rk6HoZbPi{Ej_>&EXsjzI2Rw{GsA>E!H=g43Vw$0ZcISz63 z+5fY`%>5dN7VUbQ8v)d-V)Ie-e(!L-t=x~(!9lxKv@Zd2k&9&0l;RS$NF#PLc#Za zPgt7lo*X11mM&uEa=BU$!cI@RdU8Mj0-zO@ihjZO0b|XQF^nhxc*Qk8-nVz}3oktP zjjwv?;TzUQK|KniYi_)K-}JQOI9YN^5`HfXqp{J^V~;q3g|Ug-8gN)+Ad5Nklp#Go4kq@0S$UwU+0L0S0%mmy%;#0J@KzR>_bp)aROtTO zxUXj*IdbI4k>h~Cu6hNy=sEBDg;$^wBozA{#@a_jKmtGk64&>h+&TGgm;X?^4#tnf z(I#Y(UF~)m;G0Pot1SW~q%blQQ&Uq@)5aJeO9vqmxsH=v*)f2E`fr@E;dzIRun9;J z2@nAx5Lw^Pf?D}Q1wm;MrU*7l5KjlGFQIX!H9r%bOtf-iw?n6Oy#&m`&UM zrg$X`Hv3o%(eXr^QP0f!ElH>2W;u)N*{JQrOXja4x8OC@$OuTNqv)a|$2YGS;V`mH zQ4{lt7=%$2MFrn4mWqwITiF~C<8WRGf>^25E48|`7A3>fb%DL=Jl7d279Gd2tc5W~ zYh5l^estTtlate{mMwe3t6qBE87KRmGr4c?bw9aPVlO`lXPfX{f-KA@pKzS-c=lp! zDn`e$4Fs$-n_b8K#K%AGdM-d3k8M_jOiKL4wPWEVB0Iz~9KtLb$;Y%1@84`T9%>QL z4tvX&uej=mKRE8#%|@7z4w@&9b7g-H9rW%;`I>2NSQ17%ARNlPAT9aA**SZs9SHVw z5lW!vbXMDRVxBRFT6ZiG_V{hC8O<8)Go8iXdX^(cjvNbv8AnkYI~iVe>G{VTy|G@a zl2UQ3p+xut04RWn3I$1h>hf!z-MVX}s0?${eYufh^J}&&?SrcT60k_MQmxf$%*hT8 z5kM3XM>|RpbHdZ0;(G1*8^+#x+8Qzjt+!OP3vf();sR++T8nV&a#~W62ey_&Iu(3g zs2}P4q4!L`y(~>XW7A>XvS=-T=eqYQj{O!}9^ZFnd0GtD#SzOaZm`npgzh%Nex^a) z=Bshl#Pz%?kx04;42_XeLA~vyHGg#7Lq;5xoS#i52tuuuqxDd!SgY5gFhZ-$i47>3 zoQ06;L1YXU3%(*sLVRJ$M>fw)nu{p_B3h|Z!LJeqK?nd*6d~#R9(eeeP3w=?upUG% zz3|)(>sDWX>pf3A`Q*)aj6eUpGwZdwy|O6wg@nKmNwjM9icRa*KJwI))*V=H;|%~r z009aFJ^FboKeC5jTfB%XLFT7;iwkU5!Tg=K9vu%UH?bg`&{p`BMf^wcYa^#qI zw9n8FUi48pL=joFeDoLJ_)?A{M3pR20YG9;A(kZ)@d|}&?s)KuAKh6h>L%Ae&3Psg zg0?$Lr-eEq)azlTRx^bsQv&w|)Uc%mt0Va>nWr7sOb-LSxH}-T#Fk z+I3K&w66uROHrDuFmEG!6GMZYe`)!uvl^sF%CjubY;JL}QbZt?jASs^DO8U#%-_VU zzhqjP*-{@?6(ibn(9se^$x|U=Qc+}HeZuPhck|=rh)GjxMhKBH#)wj)h)RV*T?Ii9 z2#ejwlYP8o1$2lQ87^0<1WIgmd4`2! zU0`Pn!t6Pr7ZE_EupHNZY}!=gt*f5|J*O-6WN$q(&1-ypLpE z3Sm=GyJZc~J8ov{(K8>=-6)x_XMg=-=A=eO0z!(k>u{C$4yzLT zf|g8L$cBS31Vm;L0MB)cg@V#bk}Jk0he_V{LST_{wN?wlgn7*fN3xe>>tn0RDzT~pTFTLog4nMT8Klj{q_gjDA9p|2R{-6BmA6ZZ@c;CPyOpZzwzhabk5o5zTr)8`TqB=jH1Xo_HJ?% z)Xe(zC{o(h;tgRU&%gM2ANq?AiEvDo4+Ivcd(6uqcyJ)M!<;eTrd#Tre4z_J=*C&l z^39z9lAa%z5EicFvroD683)mdF-MMr8Qm_`^!ovSS~MHi5K4@0OESCjw3O}OJV^) zi7q>Acu4D1l9IUONLST@2r7;jzvyFgGNY5G&s~Z!yWTdtN8-}uU#5&r$u)QW#1(EP zPe}q!NtRdZSe)Kg@BM4%`pw8W%?T~)oi>G&bt?m@P6WjO65(r(U4f7|iD{9V5QbrB zj6t&Ql0+#g6@1_K5D}6+iKzt}S~nPc}slGGS8bWx`YB$6dX)+G=Tkk!PzQUD_SXMg$^&%5Z7um1O!YW1pCjv`H@5Qv%CFdJi-nd4?BL`6!G z!z?>@?)c`{FMs8$Uh$$Az2qBT|9b38J8i$&pwZ}HgS6oX{?Gd_IPU_(5g}!U$%7aN zckOcI$Z_ys;YOFSC{mB$w1OZ9~-}hYC z_oE=Z_QqQy<}eHaAu=2V!SP2QaptKf)~W#u6E-%y0Rl5?r8cZzhjYHX7Y_|~@}lQo zM1)<1ZT+EMufFMZZ~o9Ik1^^V2CJll&Tz}mg z-}t7NzVOAj-1L)J(U{=~`+UHV426~`6s7gYKJjs_vI<4OkUDx~C4{v+;>Futo*=}x`xe!eU*;v|PWG1J})6->ROfr{lT0Glt zlqSDWNL^{9zj72EIp!a=yl4afDZ5&4BmhE0N~?AzYvw}F6Qt#}>jB--Do$zpb%wP_ zw;YmXY#h!y4T5I>GVu>1OPxODi(atbvr}{OL#UU zWR`NZ9)uC%tOI~sjh3Udr*(07cpIMY?L4cT$zNepgD#ZG%__x^>&V=Ec-}JWs`S$-Pr2)~fk%s=N*Q39L z;S(0IKGC$&2DWZF|3W%`J|rq~VCPr`ZJ4 zpjvjV78#zd)F!9OVHhR5wz`~&P$(1?QDgIqU19-96kN2fH0-&?SpPqbeP2yP5s@P5 z&Qi4uF68w9X4 z41isY7PWK5^>;k=+z!`?1FK8JkUesV7sbX%xl)^&F4yY;Br&_XorEZbLP0BK34~aX zVz*o{I0P4L7*eE2fUJ+=B(cV-2!S*qrDBdAbBF`-(4lu38U?|Y&yX={%kPZ}T8kjG z8@XYI5K9b7NJhmqxI-Uy@tD6u2g{}9Wiw+wtYUD^#r`WMz z0}%v}C=9|dGDz5N3eVNWLV<|73qu4D>p@tl)tDvbgrHse(S}&U6*r6LdF5*L{)ZnS zrA1JhJ5XXTgoN{B5YO{Au3v|Mf-qxi9XQ1MKONU~U3YGjpN$%J>utAv{1cxbA_0~p zvf*s2ogHFC#Bc-vj&kn0{r2-OyyVV1?r7vWyJRu#Jsa0=_|4yXUvjZR=2iv=XyD2L zFu+$xjzL9_+xJ0$wkJ{s+@s`GbIUqiO76Sb=05-i0C=RAeH^*$TK>T!$ zg+g{Am40)GAzlZHu;=I#Hy>#tgPEtwv5De!hiJ!ndgsJdH{R*E8ie~?!o=%I;c~4y zIXztq>H=xhA!z(EEW{z)^E6cA4#Ga4hsyF>hl4w4)>0icc5{mVejYLWzDF8ACs+C~x z?&)3I_w3%WXW!nbYPF794UG=3T(f-T+GV55hYCX;X#|jXZqiAN(8rkAo1PH>i7A}a zTTU-qHa$VjY}blKO&NE}y%T9Kpa_U|9VAMBw&n|rIcC+!apOf3h9a28o6BhD5CAIG z8naNMG>LN&00CF4Qo$#(@$}l;4nXWyGE=VBjImef%+*LN-(a?V&;Qw@PwbhPAf+;r zx=dC{(QN1{F=pMG)re{T9n86M+(IUb>eZU1h+&re3L=^)`rx1ZMZI1FKw+M*djSH7 zuwmnBch8<3FMa9H-F4@^ai^X=&!E+J@k=t7vHBn;fM!NJLAr2_)}?Xs`)iIK7@XlOM`yI(cG?94((-j52`+V{ zoWe0j9d`J}wP6?{C9WmxpZEzgih!q`t8csSnJwG3B4KV=EjC>1>Kp+Oky)y>+SGKp zRu2T?cs(6-B1vWdD8i1beb1A0|5CD1OoRo1O|)*vUpefv4GGqiT2mR6R!BC-M0=5H zI(oHXw_g{UJMP}`qm4!lK_Mx;E6KDzLFbsF>*wy^Y3@6$bYxCP~z3tlTu2IUdJ6jvH*?dg? z?2a&3ySsMp`t@Ib_r&BBVoFhEv+8_ygU*U6Jz2AE-KCdYBGTBMH>;c1{9zFW!}j+J zz6$7Fl-`Hs$gv-om+@xtG4sQj`Nn=;YD?@&J){XB>G^R{Fstse#QIi_{X^c|1B&)V zk`>Kcs1&4?(sm)OlvYX+5m9_tbCQik)l$4mx1n**zVOV=CD&oYabWi5CAx@^qP>&l zt8c!yAuEu~tHdkaM0NoPz#^4eZL(ah)&rKA0!k+fV-e9>6$^!yIXA{zDi{F31V@ax zC0DcImSt?R@{Wlsr8EFQvOA||5waQ1Z}ZOE5RudYrzWa9w(Z%uW8dCA)06uu<;iNT z90aw~6U6eRM(qU=SfpI7*McA^r?eNiQNzssH|v7PQR>Mp&+VDmM?{^;rcBYIC>k!7 zmW_;dwaQ??YJLoxn{T}Z0GK7QA3$60%XC9Y&j)~OfApgus9ASHopXWgIddo@7&eY} zZ@KlBPyXXSC;3VrHxq1>GI6Gbh%bBj%h2|ZUOe9ZlzBigz&$ZXj(*VX*;0;0z>>2w z0)U?JsKv#iu7FxH!%kn$BQjGe$z(M{zmcYca~zt;n|>gGF*^|xJ^-lfg2x7S0Tf|j zvGH!&cMHURPZ1HV)&gy?E30}Ckd#SS;_Z!=rg2^8!n050C?KR{AhULf7aJf@ble}^ z{?kXE+Nw1fHu1@jSubI{R|NqWAPB;G5ZL%fGf+Pk$@6ffuvjQyi-8l9bL=gbk6G?( zr6OY>rh78Q$W%{j)l51_LxIt`@%kC<7ozdA3(T%dI!kLIK(SN+RP}0oYTq;fkfkR` zSq+d<3JEEeKE-QC5go6rFtPUv>1kP8f*q~^tF^$e6n(c36ExM7km^D3 z^w#Ywmo1CAyiO)bSO(Cf*Q{Fk>~q^N*&jBTu$}nJU;ffBz3mr{JK=Z{Nj9!^bzqIs zFf9N)^vJ^iotnM*&74*bm=qE~gpfY=_aFPEx4mVT~tu|Y98?*B{caEixeEqm+SU?VFfs!6H0tgnrr*^mOd`-u@U4gyki!Hz9 zmv4?72NnVhu_xPj*o;ghrV-P{bKFvKbaZT_;Q4;h_Z-hHcv?A1t6H@-H8r_+&)#yS zJT)~PhJgTwEC4`=N@+x3`-nNwJPhjf-cPv%kU)6Z$mpiEtHLk@#HQ^YsozmT6GT6{ z^MN1?wGBv(7)6Ffv{LD?M~HwBMy6V?o5(<))K3P8P%IRbqC{JS*=4LGmM6rc$9?;4 zx-dKyWf^)O1k&&EiI80UO*5W*CA5C*+5;$4C_V;Yf9eU zYK@hHC<K5AB9t|J`-vxvq2wRJiFoXyqi1i>4kfQH(Gekn) zCcjGjUMuzFmaQiobA+!Q>B`dq00@hK9Dex5d+xtKG*NfE^~=gF99RTVJ^j=ZZ+rVM z{_DT}|eg@j1TqFeXv56x!?FtgUq-n~1%d&PHu?R~$_ zhEYMEj~F2(4FLpX{e}%2H*MUxXIET{S(j~Tz(%NSq2Zv*$3egVPYEotHXH1c9<=Cq zu@7KhKKQUyjl7@)(A@6d^Eh^79((pYsN;jV%$s>Bl0YUQ%zWAH5lc4L!QL&OV<8}Y zPvCMa9OCN^kr0(aV&=$%0DyqLQ#gL}u^TsTI^pEaXPkP*F~=S~GCWc&6_c=ex@yz7pLy)vKI)2yDD9Be&2g;v=V?L5N!$Jm_+6xAO-r7Z zUj+ok(k#ZHfa@vO(?cW0D2%F=pkA%jYoUlRb4s3BIY;6FS?s1QAkak0QLgLwuH(3h zlvTP3vxy}=f*^uKhyWB*N@6&QOc;cbVPgz4h+zO>V=RY3gaTX`Di%vcY?OX}FO&Tn zZ@Zn14T)HXpAfX;kRoQ2{l$Qcl)U4{{ReiI1srD9jz&Nw!p5Z1HoN&t1gq7$i1?n9 zHH;-{L=Z&^o(lj$5O(Wa2m*v*5SB$szK__UKAp)n5k+e6 z(v6_Y#ztJn35^->m8~Tp@4WlYSH1kTzx#W?^ULpi=g8Usp^Krv%aT^z@GH zJK_ta(*wYkH%*z&fTpGq%aQ~9=qES6`@Qc;0u=VoNHz{e#0?wP-+A|484c?qH_?LM z_!4o{%#-}=C_3OBbpVi0Ru3S$_02=7&vtyuvd~zDF7m`R#B2;9K9{zUw&vaI|X}g?VYus1Q%xe59jw zwO$8Ojfx~oKo)io?s??NeN$z}@v4=I@47F&_&h;^P;yAn+kV>XrnT3#%yDte~DabyyLWbc}YQi>FD2d5sh9iBVYCr%?> z!u3wD;{n+6ydnNF9Zq7!PIir+QFBp70A zwWAOK6#+MKZ}W$)N$zi69T(D=BrHN&DaSFP!OZ-J1(c)DSULR7hj$8#q%4>aCI$ro zAV@oPwN@7Z-*vDpPrI|ucU@r#yK=HIc^HP#v{Z|}uc+l(=~+pUr=Hz*_}aCC4R$o) ze$u)E2!vszNjpjn{tzee{!@Hz=X1aNdw=j>pZnq~U-se`T>64jPCsqMiWRXZ_$16) zJSK>+h*E0Lp55EFKbQPEn@js1ib&g`=_R+hlhtGQ7rbE9ReT#ixASW z#~%ydNwR7mNEQ|csx$N&Y1?W3d>-D0e6l)#SmZ1BK(+n>ydnqs<~1W0VGG#6jtKo1 zY@zyAUkas8r{u_yW4@8Siy$CcCkTcOfE4}Wu}2^Cir2m7rI)?rq?0y}jEo|skF}+7 zb~_NUWh;*La>5LNO6xUi*1q;tuX)WYU%l-O>ox9$G_sTOK!XC-mhJG4ImXf7lcD&sHfL#^$ht)hUH0*&EzNmE$WVjCzjYfOzH(zSPU3MAOhtn$5RLmd1}XAA3Jmw&R7VE z$a?&tSn`7$akX42S872uWQKIfsA~Rd7*6RTqF8Cg$ zVb&8zJNA$7yHXYF<*IA>5KUytm1?ozYegBKGOgXnCU1L7-l=kBs8|%s(m_H5 zWknYVEIc$+TDfw?-tzR|&!9y_KnM{)e)`k9e)`k9{@-8!&8AJ8&N%1HpL_9T=bd}O z;fEhyES0Q>e*m!i_ogN$KKi#G+p}vIA+<_{_OCb{IUoTcrFQPxzIX55;o;#-x9ziA z+HwORoO}Lxu2#&5NQoA8$=!wKfPSl)^yMXOlU?1qh<;byQ&_4S~q!)-t#LR{xLOk+_BQCx81;6ww z?>PCylSaqJVxPgxVi+;;%L>>#pdw1<(Y|GlC_X_%gc%Umu3PuJzw`U=`sH_h?efb% z^5MUJ>glJzKJcFd{jpH!Z|p&25e>L>>3hph>SHJke zi_Sgm6aV$~Z(n_VsaSFpF>|dRR_nD`b~96!nG(i^7G}?NOT|LWJ4yD)hCKy@nQa~` zOKw4FVMul*HTa7p5djcVN(AP)QLy>_9CSZ163Vc#=5IbB(+Eu>k%k}z00c844iFK* zHX%d8u{FrOj8*M6I?DhgJ7cU9Apm3}m8t2escO9*0H9?GltSOvrJ;gfaFtf56bJ~U zjf+mfKhWV+dpL*)) zr@ndlH$2Z@zhT3=^&5{p_Sg;U*A0&hSF4o=9(>@|n{R#Wu}44vk>*C@&u008mb0x? zE3rCHgm9J)wh@2@5I1gE@49ZS7G*ZWHeG8=ptZWAr%7iwr0o9yG>vLpzDDPgBf$mhvytQ<_YawJ`s@s zvoTuhGtW5Z7vB8VpMUe~R>jGLdxW;aNnQZ{84868{p zu6Morm9Kck@BH=$zWTMV*=3dRQo8PK%;V9K(%8t54AtrC#Kd$EL?HGMA;MzGA08?CzJn?*fiMHWOhKX+ zV7h6^mw8ACo8Gn;6PsR@qfw!RLWqLa+cmPl%96Kk)ZbN^mV|>u1R_d%z2zd~cNi1W z#+XXgc%JJz*7vp~jfTQP1it51t99;bJ=hSx~ zA$oAw$;G}a_5TcD4))nk0;nI}XAZ?$=$2lzLAx&;poaiCavW-Cc{tzn6OjS{=13`Z z;YF9c@4fGR*{fdWc^-fj=?D_p{alc}9d+S-TE6LejW>7;8y+46gblA=v+fID`r`2? zpYWj%{)I8DNEvR8BQw~Lqc^M?8!4G6O091F3`_h50u!CF`It*DIJ4k+zy9Z+y#3zC zilu^xiHwx1)i4Y#Wzbh|cr+9QH7B3APQu&(4NY^-b(+O8qgutW(_ z=Yq}gzBR+>-*UH_MJDl*TLg)S$ado_rxMFX5C{`O0TcC!2&9^=#6FVkurV?PYs3{# zZJ0!=LIi-Y9!>6>uGIpG*$pAWQmHU9Ty%U*gn-E0tTbr^{OUzjbg%wgTBMWjH5f;WkF{(2RlA-&vH7|{6ybHN z){cyf2uK@;*&`)PkFW=s$Oxy`dgrTeKvrY3MLyG>2}`k6a~ulDd*=M3g#cQJQGE^x zE@(>+VmBHbdNW6kgA~&C#(oe2LPBN(AZMO>#`{0;f8OxM*SoGG0K$wJy-)fyyXEh! zvWHHq=Y(lM1Vn|xf`otaM}K_$amWAiJAS27D-#h9ybh?bl0?{iDIU8i0P8sDG* zfY$oNWyNo&>vOaow86Rovb~j={etH@dhgzSN;{UOv6eK3E48}T%5xkdMC+Re0R&t} zu{c2(b}d~@P5~fRYc&BWxNiIvCWNl#`;zJsVXa=@J25#vG9m!2EJTu?wb0nuC?R&) z<2j&9^|YudYr;v0cTDKcSUw{Qe#g-J0jfv9RcTZP@{fkPy+Z zSvE5Afj{_@-+teF3dJG-Ff$Tio7Q7quG6+eBzX}4u-=CSklDQ9^>0|YV$~~N_VP-t zsz~u*>wuDb0D{1>(Gl&qwXlpaS%ZlK5CI@tV~zN+FMaRY8}D&_*O(9hLKD>ktNm%= z>9Xi?qY*+FDi*cfRo8|F2b9d&6HNqrj<11T zIzN+#rf(%#jzUlmYtywv0VKvSi!j^BMX_TefMj70K#G(m*K-`#@e7XQYEp=TSqd`4 zLbVhjW_~1LEJSd6qC7QGw)BNDOj?bPjTQyG(0c(;o^e-fRe ze=ObWX%09zD?0-L)O|3J%zbTsO_L8mIdbHfM|7TnBLEQ@HYoU_7rgirpZw%;#~qD? z%uJoApG+e2JL0t#%nqrDNJJuV@x{--=IU!+aM_D0m9m=WfHDgJjQ_`nOv7NqEb(fz;by8( zaD3lI>yJc)jTq*7Jq#lg1`!*MtTITD00B@K!a7Gm9iTq#DA!fRkwUTP5@8bAOA>)k zvvo41PJYJnRCQ{iY;`9_*f05`qr=)E0ZB-ThBizR(@T@ z%+{b*S4kIbTpLE}CWwsEN;!@uA`n3k-*YP>%-pSvc2Al0FBFC0G_&hCp6l39^ut5N zp;B?*#AKxwC?dzz%rIT87-mf>s~F1`1`%1<_dKmNgu#py-oOHz`WH06Po+-tk4&FJ zKp>*XM9;tEvP)lZDS!~soJ}eqPdxDivye`5Ieu^{FXPo&T$>PjPK^*r6qv{ z9ob@EED*=PKIi;%zIWC4UU>1P%#29T>|A4TDD&8Nj0gbuz9$^-5=mB~u?|RtUDvzk zfhYdqbKeNUKs(wPw$acKQQ|EXi8i83UTtCBcKKyON6eBtbBxZ}%)Tu-s#*w;-{i0=mRBLK((Ac$0} zMicv{#Q>lP!q7-*c%+0VA|^vy2~d1~LyFR9!7dVt`0KX%b~hll9w<$(`%V3{AD)^= zx>h4TRzS$nN-M5MF(+oJQs&jeg%!T@>{KYAY!a5Ji_0#62yA$2y0UtuzkcoNZO`qf z)hZOP;NuYRw&{&wV@za>qqUct(0=L8wtVwkpJtU#`V9&Qp^Dh} zh2lp({9)I103d1f{yS`jOl7(Kw!4flL?*Kl>|j9O533iX${n+wF`M}=N)H1ZB(0od zUNPIX{K49b=3VJB5a`#-W_Pq3Wq-`HXeP$Yzs1ZqM~)ne2}%B?KpR_1E9Wh5dFzcg z-}sAfeY0cd&GQocXVztFLGtL|E{DN-dzI&3aN$3G@{{p)s$`X%efo@pFp9+uyL!Zf_=rupxR_oTT8Xg*EHt~=4noNugfQGqNt5<6EAc~m9QOb*ngPCEoHO53y7#ULy z!h0Wh`1+e}N5tn{aL$>hoxE&pY;vknsn(D{lBR?iMfQXe!`JQ|41xR~*Qw?V7`Uef>V!_^n z(A=_FboS@KPa<**1_okAx!;(tDjWo+=z!$8+hAeFIoGaE1YszhHZZg-fl?qyu~6_FCnaR! zRVN|~Oiq_8)oRwZt%eo=fubTOaY@_O{K;|-QR!4RD=n|EF#QHwir!9Qb;uZ-2%46Z zVrSz303ZS^!Xj({m`J>$8e3Lew_(}3b<2lGhCopeMgl-YQQhp?J~_F!(g@Io?MN1& zq^gyAty;GW$|UXII>@KA&h4Dsr|6Vo9-nN zK+uk3RWnwwWqDK2an=rbv1}&w!<1d+ix5$*TCLUVHWb&YRV$V)TLy>{4{lk9=wjn_ z8Rlv|DA(#i6e*?JSmj=@e(^0Er5tx^x^ngPH{Nl_JsZ}oIq$4fN(FCXaw_S6wyfCN zS49XZmRkZ!i^FOT^Ulxag9zcJAJ7!Vp!5dlPnKe-MjB%l@>f zcSNSkm7rcvLb-J)to0TIASH)Xx?F{rjA#K7YDZ^Tn2v><$F^zdnwUKKZ~MJl#w|}% zViQS+voH||i3lTsUvyTj9b2<{yf{>35F<>Q1Ypmusfm3RjJ*$ATcl)@bzg&oBmz@Y z6)}P+e#sjiEdek9pkzG5B)mi{{mB-ss~vk1JTpiX`fZv0YQ$E>VTUB+CXvi3fC8W# z2dH6EL=Xh!sKZ8l06;{;3?Pb-GGU&qDo{kq3YByB&mO$yM>j4T9e%+@=Pe%}OPD=NR&+R*2#E%B9Bakg zlrIZ5gR~Cfh}pQ>`TY<4;YU9D5u6W8BEYrRUR$l#6wODV!@j zO;{q`_MpbXNnld!KLG>_Ja!zYfhivlbL2R9fB=9fz^9#j`nA_xd)gVNHg*LyFb@iM zZ2LE3xq6^w`^4Jy>)-S1za|i`=N5O6>Mys1(otGVvaGfHd00%*FMRjMcmKy%uK=Y1 zfY}HD5`{tNyY3&o>unD`_SBADyU_7E3Y|J>f1v1lzT-3~zT`jwm@ZetFe0Ut(j5(L zH5E3mF;5XTHtk@dl}R!}Th#0putp&|6>NW20yB4>3~|#34b%Zm3YJ7~6U##YfCYpR zO`)V#uN_^sd=!;3EJOqh`*uy$D)q!!62@dj5}FDSkf>Uz2h{)pm7_+-N05^3Bq(jg zOdC6^TFTIDO-E-h+vXlIa}VwJis_*3nW0HKrQA@gH6_-izW|76N81424WBy#NOZ(V z0U)903_D5{ec!ra1`y!bP1RJn5=D`X(atP|g1>szic+a0#z-nDgj8M_|4m$XK@z!b zRzLt?>(fWO4?XhO_pZL7Q1Di+7-!&=aO$X%Bg<-cG2Q?|+TQeY@caUilu{rfY>q$r z*sp&6%OCoy50au@ovV9d%_(E8TK&RjzhpgwwN!Q*cz_xsM~)mz69@nzeDMVrU-iTPUB6)+ z8-qCKvA)+?9Z8Bgrv~X{Cs|tm#&5iLxL9H~>Ersrm|~`g%c+%$*ZP72$ikjmxaW~) zKJqVLt_Pt~BpeX}B85S)e)af2|M7dGAh`X3hsZ7TpHs2md#)=j><^*{OjoL57+G4v z(Hb&rPNSd#oRAO8ijED91ew)wvvq}(A~ox0<4Hg3OJ6a&PT80VW9RQ%lfzy=0)Qoh z5kIu6poG!DMx|zL)>gu zyXDI&hGK8q=}xJ}{-LDEm~LIe%=ayoYpF~(i_Bbj`!%}PyXP#8$)9NK+^vbQzZM$5CBvD=itLajLBB^10azJ zmW__R|9!u6!wo-r<0b(_i;1?L!yyv6@`uD`aj> zy*SFMj$a<6Bgj(4(ru1G>`Mz>poJiSQuKOQHk$!sevL3=Y6s1ujvP61fF(}^0W9-1 zAVQ-GP2@rRh6t(6=kv_gZ|XKZCK_|U)x|7K7n&pM45$|k)g-%WIPhiw;o`7bwR+4i zdPWRss+Q{$d#6Pji}_Rpgo>iT)GKuaC=|WIke>(&1T!T{i$_{TL;-=2)sn<}hERG~ zE6cL<^RHV9t^Y9D#s;y?F!rIHJ*?^COTSFrNj2LPIyOzy?}@<$h_vg)9X!6UQ5eRH zt|DdgwId9oEE^pmihZ@jPSZsurz#CS6%qgu(Xz3T70Z_+kr)Gz-SnCO?m!X0ZS4J< z0VnJoIsQWrKX&bnw;>WIWL~=CEHPSqLgQtLpa%iCK)J>IC=m-Aj(pF3?Q38EgR8Fm z=s*1RvQ;as5BrXV><5{Cj8PQ+?caRN`VN<7PW>Q5%SGC8#(%&&IN(EZjvP6b9PAPk5rKtY`SRC%^=n@pTQ({H z8FvZ&5ANAJLBh+#6b}HzbMzJfCcIF><0PlIK$`zSr#ULbF}D%k^BeCXZ0r*mEFcPi zBIUXYL{Ja`iF6d25B<|u9(?pk(yj<25i@%Zz3t@}fAaT#>C_|Fed6ms+`WB*v~G9h z(*%hPQ7rhr>t-EzW5WKFE7j0$gaJVW*L5>$ueQZ+lHIVYvdm9M(<(=${!{v~#jGX} zU60EW9erkqEnhVyl>`L?XzFCPj|o8HL)+@N>^me8a6DYOdVFYTh}j_F^v_fGmH1$Yp8X74jG2=5orgO_wCzhNP$8T5F$YWYV0X%s(X*i zx25{62Utoc{nvJIlgKCu{M7j}>(CypPPYXunbjA^Vf!AU>$ynro;pATLID{oD9<6A zj`ajB0>0;tj*KQWfo%k;R4cW5&L)t__dcTIK;2@F{VD^-PO_2N7>-u1SpD|5 z{^B*)Ui;NAfARFQ&WxGs{a}C6gGB@ozInyBesbfFt@ocaXxyQLj`!dL4b1#qAS{Uo z-h*Glg98INq1+$Ls@rs&VI1VpGaoW*B#(DyLVu03Xjgtd#N^0vFhKxNPz2;p^}K~hqKJqA%c(ugqinEOg#JaGtX_^wr^sBh&Rg0x|5BJlA(3HVL}~ zka*Zms0C44J@(x6r*C{}&s0Sty#Cyct_K_jU;`4 zEaH!e%u5>9Yd$~I$QV0eZqFOzzXDCkboRDvx5%+_9Lu7{gf9RKkNEDm=Ts^T8d-#y znT1G3hlgsldaYVTQp}7<9GSfnlWY7HwhoC$X#$Xf@2+37diS1v6BGL^!6X1}#cto0 z)$^)MD~oY8Z6H0=?yYyRm*=mM_6JJ_r zI06x^o%7B<|Fu8=hBv(absN{MBP(VUX++{{U>00+W;7K<+`DVnAOGJ!5f-!~=K;WC zFS=yrTv2*!Q5OuEL2X|0pRaUs<-skliZu)v0wovFe>`Q;MoCAh| zE?kZrgNI}n2VVTV3qJSx&yJ1`W!Rrt34bz=12cO2>FKGfufF!%-}&}Eci;2e)~!2s z?li_E>mWctA{rkbKk?L)-th}>{rNY(u~Zs@IHCQTjS0xu*s`OKJND_VTL_Ue>*2u} zA~vpBxpw8aaKysnrNX~|=Y}tT`-g%^1PH)U{iGw;|KE4M`LyGYoT`=!h2oXBKD>L^ zZqmIKsRDqA;(MNFwLj_OZ$t!)4413bFfy4njCig`iefUOp>If?&x(EgO#rTLTMK7_ z002rWKm?X_8Qb;HIb&9RvjrV1(4+?HwB*h{vO&9<2qEqI4H5$oL0CxR^0i|~G_iZ4 zGFhvY>m}bs1cO|reJV8$Olf-0;q}E475K?saW7{9vwUx(yDcmHAU zyKM83$1HagKo~iZ;Z%%}29s;512$eeGGcL6V$o4@?Io(DW|2!18)mO~jLVIfejj@) zYGi4TL2OC^01}CH(vS(i+?v-t~YQjX?`0RRbskU_?WiyOy_TgsDw8U&bGL|A}` z#>dBYgrQ+ZBmqHE<#Ks)x-dR6%-Mn?iHK6PdgXG*b$9LB$e}tC}@pAEQe` zqoD{OMaKN-);m`%Uoko~#9%0Mj1@QyEd7(9eV|UQC7pi8lvtkSU>qN8^*$nE*eIe+ zYu3N)buW9%8{T^U^Uil%2SAu5&bFN+?i=YXu+fQ`Klq`KJp9N*S~-TTS1IYQ$>$3P zjGmaOj&o?u`Ne!?-OT$?&wt@d%T|svGtnGep0y}PuwJeH_{Lkl_O-8FbM+4&ee99sYt%}6uFEU{VD}{% zHamCiyzc62ue(STjC0IX&(AdhcZUhCA*T zU_{lfxJZ>4mWA+K*K^$rCjoXv9vV}wRE;r6u?JHTQAEDyHX>fPmN#V<1Oc3OX;^lt zC4z`?^UXM~=#!dBi`7AM(I=XYOybukS$4=YB`?yC(5RK+QXDIxt5K1#AR=?fks&14cbVCmH(fhtmaal5V$8LV?=i+`myEdob=y;y zKe+oHXCC&Z^A6j5#Q12zA!dnKA_K^5lWL--0IbvR#+p?UyI6BrrY>pcm@`bcU<8qv zXF)|x@$BQpJR*pg5ZEME!kEm8_tA+kAX+CpDW}MiI6qHv&+tx`1Z#naW#5pL(%M9I zLb98%Sj6+(4MVPQ+(69C%*4V7p6iT_jqcvHTawV-0=Rq6KHu{Sp34%qIY1n)4G@-( zjW~{aZu?G-LQtx$56)>Uk(i%N%+5;biM@M&a>rdicge*Nk5ibX@VfAkFq{6r(CDA6 z$F`4sno-i0u|Wxa*FW#P=l$xhz4M|AFI=}_y^YakFHL*g{yeU19ajMW;9KAN&Zqw6 zp9#ru)U8Pt5`)v+9gq}jl9r1bRpZ9V2L`=8<93att zSF9WxRir$(@br#-ANs`S%hOXa`@`mWr=IYq?|IY6P@x_Kq?Dtbd!E_y_|~1E9Dulq zTD1r9(o$U4@jW+f#6*>XwIHb0>Na3@OjQ5^NTEm1TE2I)2qM&N-cylNM1WZs8GtcmE3=ehi&0YPAcEsLVLeFbCKN!WXo|;1Izy;An(e__Ey6~#RP6aEeW0LF%fJjdO#eMeBM3Q|TJ)m$!V`KtFg zBa$Jz1X#J=Lytas)W-EE9CwTfLxOm~5<5hvOx-}Ey~>h(hnX)k@}F67xK^^h z_$NP(GzUjSP2paSIN~U+l!*fXE$EOii^O9Q3BZO`;{?iay+8T8|Jb&D8L4?R(-R8YGBiCUyXy5cyx;QKA?iwIQe)gTBVb}AAx0wS!n z@;o;&PO3i9RC6^5P}a^FY9JPqFthg5*yzx%9eaXm-5DvwhZ6xa0(u1xQCOrA&MGB- z;ogf zF_>fl27^H&gKPmJh$Ijoi6lTdoU(MfoYUq>-TkV5f4uIVp0Md|Z*O;RK8^M!ba=VD zzW%BTP=OudB8mW%E|ki@d35{Dk8I62YH??7^@7%u7j>@e$<6CXx2BzRN?WD{5Ltku z`DUpRW4P#<;bJgQ^ao4+U@;gd`$OemsB8)zmwi+4{K2vrE*sAnFW|D_qG!Co7#6nf zRS855U>Pw%2m>@LB1PmVbcoWfN;$eCmtHxq?d+wkYv!j{&ueLK$tgu_NH_==f>HV{ zGAIQ@PeX|~N?`%!o|Li_7Yc-7fJ9Ijfe@jyz0E6^Jdxr-Hp(eQ1K}J5YYn2Eh8G*mtyLRcKMY*(VbB%|5R5-mN$yNn3 z>3$4q3onho9s!6zNCBISn|}GrU-7>8z4z!<$Jlj@nQezfOj*@&C$!?%^Li2uh@rv3 zH@*378#k}l|XmH7%qjjzAp9u%Ctm(A3Y~8L(bV z?6#tbCXQU7Qe;eU`Q=x<<;`yx2m3Sn!LU@!|Lgld_@%4A?D@V{nn*L7(8&m(`oVaW zR3g4>5fH;dM2hs6ueo~l>J#4n4{wPIHj%Q#e?_{xx?6HB{euIILV+G$NJ=}$9lN+~ zZqG;m{qy%c_$ZPF0AX|Pn&Uq5_peU5$Rb)hAmS)hF8gbr+$ zgBTbtmdb%KQA-L|e#C4xQ{BF?^&Q%tHME~rl?JW^0ggxzo1)t)j2hRwQD>l{V1KSA1)mm%iC`Cj>$N&=h2U>n3)HWEFfW3p9D67vK%yaRn@4F3s5rkf+BiRp}{2xvr1Hv*`+jx^Ck69*0=Wac@YT~}T8 zUs`J$pJUWpwb8B(k3atC8(;gz+wZ#5(l_DVIbb4^O7iNGJaX+)#>|8S0RR4xf4l5O z&s(x|*#U4s*4h_nVXP@6rIx9TqZx9@Ad+fc7ce8OTOo6 zS8G>s=!X?`Plcz7&Q9v7y?HMP&`nhlR1$j=0U{6~q+DA8U%+D!6C_GhA;S`74Ou5t zsFb3(QKWj8$~mLc$HizA45j9~h&T%00RVskz_Kyxb`PxEIdH>0+gHtRdFko%FJH4@ z`Mg$Olz@S1mX6rW51kZ|teh?MVgmtS=uSC^VgryfvtbsiuZlSCbjt1S>fF0`pN(o{ zC(1zoAPdjy>2Vz$Mo@}0IJOFk)WUgl97pfnyH7Col1y@n$?Dd&+Ng-gE#*G==o2Td zI<}{?ojGy|1Qe*I<&G4DvA0=FHl2CfJKp_o?|*M=dkZs5$oo{bl=^u;Zq)7>5=kL7 z+~2qV6)$_`uW$aXy{^^M?nhw9ObX&>K@EQzvpbv3-b53VjTy-Sjk1zV7UJ94=CU&z zF!RQE6HQDi5Q&A~{15Lu>ZqjxG9il{04gh?$hW@r?Wdo0?qBb^Gt%UnDDQYp`r<}* zVk59HA@%m{zvipgLgGp6#DD+*j&^9Yl;np8)~Z~&e92!Pdg|Xl_f5l$iiAxroqF#Z zUeeRu8koRw9Yh;WhaAUQw{7?SzCqN=+9tI`2Lb@3)2>z&6K*0Ba)zY6^%YCrI2XMPO~bDQS$WQI2US6ybc;k z4QXiKBMOoT2r31DE`08m$F>dT@7&sV-{zsv*)1d}FxfMfsIza7ptYmLH-T65zzFz$ zP%L@HvXgR9A;jt4Ye^&tOL}@-W;Yao)?B8$ryJt-ML@!#!QpK? zcNa>YB85n?0w|K{AOgBySc6V*&sXrFE%Xyz7C7iB$YG zA_@!7S^}tQ>Q*tdNB|(hC!cic&wlc&Pk!vfEp0hwMxt>%4><7Vk_7wn;DZl5?^)0L z_02bH(vs|~CPu>qT1gUrV~pOrqt34BhSBeTnwW{0-R7gruo*Tbm{#rshox^O^)CDH zVa8XWi6#yjL=+f*`SO+Tc-z}C@sxXnIbQoPKmMAT|Lp@Ge$yM@G&nqDjh2a!HKQyk zXs>n8X@Mpf}vjIY20g%&6y}ucq+B<&brA!W;e6gJdw>+57ZUmnMVQN^G1+6$CIDFW ze9!YJ_L~chA0b4i)-MQZjD1oHMzW2Q+LnpXJB@z8NmdfGLGvG3=DHQF!_@41LGM~1l2)) z<3mVdf(Uc(P|3=+Vq&VUCQ|9asJ|rfHu*{rJCN9B%vb&0VT1d{b4KI%u&)ZC>07@x9`}yzfSrh4sAPmOvh=-absOEqWSr`yr{_^<<=yY;ncEdd#{huw+^k6S$FTYE zhd=i5|NOWO!6|GS?T914>NiWCg^ARrjZfTu`yBuWC;~zNFYq}qSg)>_WK67hwmNsN zedMXFyAUa|t09|Cvm)&{3P};!tlOk1FlOD>otA%zd4-TiK>z_qt8^+A2XZQVemvAUZ`5V{2?T7dG8DTU`^!-QoZRsr` zp;*2q3fLP}Gx~!70Hmq4HCHN@ynK;;!vV91QUn;MTCWaplPo2hl3{_G8cTH*qFE$~ zZ>yRN8@;bgzHzkXm=k%7of|_y7=#5yNC9f+p&bJ+{nqVo`sV$+cjhVW2vAhQkP-m^ z8}vsx+P1%)5t_L(<>XRUC>IK%ghgy(ugbn40`09WbLY-OL}p`KpNQC)J$v_V+_JT= ze*girR)irhV4E&rZg0sgU%FVkZbhIKwqHFpHX0=H&Pte2E8qCHKky(a3TGK23p0m- zjvDSglaZtYqkj+)AmzIM`1kMn_P4&-GpE~rIqG1GTRS=WYksQP-u_b|L~S=Rn|trS z_tHx*`@6q?d+$J>QW_!`yu;e!Gorien>x7+)qh{JXOiEkdP#+8tzGS!I0!Usz-FsX z0jB44p71sO2*Hs|0FAwNPjfV{7)>-$0ixkx-n@DL@8vHAXgDS6zp64k>@D**zj5s+ zKk-pS6oD`dM*~dAO0S|R5WpDo@I#M5WMEAk*xS3WP{7fIPQ*B8U9Z5tucBRP| zOB!_|xGn(_lJ3u!H|^X9V5y?Sf`(y4piCxXnIIO(7mJ11?MrGcA-j7vopzLx8uCvB z5ldw+pU;z0TDwtZCk)db3lM-!pxx+R0j(W7%2WD?vyuj5tRbrqzptS)YU?x(RP9)Q zl*opUIRe|XHo}a{`TWqkzkT=ne*Qp!g2*5ND(vka`op??L;z7<=!8F5e1h1agtNJ< zh!pch6R_v`h6BA!qDK-mY8{U7M0b~BpOv}w;2^RGMaW1~_N`;M8kvvKq0&D*xSsT7LKGOmdi>}1K+8`0j%8A3MSlQ>>r(Sw4m?qcnC^&MPqM~pZKM()^=7^S*U<9$UIshP%b~GReFn|DIAmRrBhPk@Ln4si&hBk9GIO8LK9PhnLT(8b?K*D z7O<(oNUhpjlbdK_M#AQwB2rggc?Cd2CB~SC01^1t5B^*KP`@H=*o<(5`0E2XNlZFu z(gzlM)1Gzh+6URXg2Ye%Cw{0&M3s^%@hPmVR*u#P0EG5;0nm!}_6-yYg+#h>0I&(m z*>!X#<+5g5a)Wc-LxlvPbz$~D*A@Z+EC>)oqJIm#7b!wi*$bk;TWp~4hjU7ME3A;Mw5QEH-zabap!=INsV zYGTsR)H^nDM8Qf*M0nMzsA9^Mz8ePy(dJErkdoTI-f-=n%w2KDuLKYuTc)@Tl)U_yN^8W3-^5G z&MiLsj!U8MQG9w4RJ3QXux@XGNQFhJlqXUD%9rB0jtKifAOfU9RZqghr6ybz0)U{P zB3H$%nfFQ`e z2{KuF&jqXIU642Xy^@vtXC-w$@| z+Ph)vj)CDk5h_9eVFpL5rHke}juv5vL|hYH5h?+#5JZHODwhhIx9xCThlLj}UbN<< z6W{=r!I=h|UhOrnef^qK*Hp7VaBu@JY+lRV5+We>_4VCw!%wbw(TmSJ_kyo}?W?_g z`yJ&Xpkc!zkl@EBr*4yprg7dx6HQDanoG)Pm?jFKsqCatE_>6O9-fAm>n56*4iIZ< zid=ZXg{^HZ%tAE&>4Fe?PQcf{`i-*h6RJi8(813?1Q0}I5v`piOP5S&PYau*xiBO`6o2c5JZrO6j@iXL`f?D zR@jRgrP7Fq(|jk(47FcYQH~hNm1>V1#c~Y^5h5Uspb)f@fc>KX(B{G0p4{`RNA}&j zWndsbB(9?!3cIFOGbD%*c)?v8`_DaoNyH6d!eK7j663S8n{p8#@BnHrgwB0YTuG&sf@W)rG6xa??Xa!>9?2F!RvhkgF-3N{J)}PNJ`b1wc}cGq=05 zT=s_Y`BJGQMu0+&4i%P4r7hcbb#}DQ>FRJD9T+wYDaTo~VD8rKyR4XKqD!D{Y#qCYqQ&XwKHr zFii-csl+HN_^i4rPHQ%+i6$lq*5tNNQ`ekyGEQvZhquv)I6OFf!wo;Hd^us%=ocE5 z6OfRMnANL~Kl$X7AeNg<1c-S5Ll5lOxm}aPV@D~P76=SmzQA%|0DwS*I8-Rrw>Aq3J}#)61`Ao+ZOnJqbpfUfI?Nr)0##-@=#z2j2l zK{*nVRyBLZdq{Gx(JnEG!6}vPr25C$l9#IC5p!HtN+ppq4}_tXQ2>nSADhV)ZO|It9VWhU*qSK22{dMc$JA9Aa6iBs31FQZC)2M0E zu44k@Xf5FmQoTt;^Ch`FfisqNX;Ow^QVDjrs#vx)+vt&(kTZ-Jm2@3uw1(Ag@15e`t8PTq=vOO{hnNEZEmSIFv8UpVQsmnqwBv53-reygA)F zckKxYTo`Xxh=5Ys1RncL+9e7JL{zkM@4mkNfu8Q}vgftta;KfL=GNP8t1kDfGPA8y z>Xk2f@zQ0BW1*o;c#KJ`!>TM82m;tY(EsaS-t>R}_rJH?`iHV#0zj=aDg+k8LFf`& z<;2&#F`OvIlqEKCh|p~CDZ{KIdKFbq#e7q?cTi`0S_!S`{;{yjiTdOms~t|PWQOufZBWaN^0}({qOZGj7T=< z!!()T4NGFbEEdbgFbGP5I}njVv0S?+0tgs3mc(gbCLxN5Qj|@n9j)p&ux;h}rcf*} zR}5k#N~cm`xMxIW!6;5jteruzPGDdk(I*OvNQ6in(NJ-r>!cB}V@JeVRrN4NkKg0Y z`U^oVujFt2MP}C_p!kfP;0rj}w!1#jEbn@nPI&P11cR#o~)jYh69} zq#ORa^BrHg=c+fHas0wGmjeJ25fo8GnUqUN5|o+6FXdl#=0eX8{^gI41&pW^0Q==~ z-@rgmS0^Hg)fQFglmx93l0o8X-PO@vE_*}61<&_DfCUf*2?O8XwtZKjtG%bQQ)yKy zmvh-{S7*om-aaH%UzrgQ(toRuUbe4yVBfyp000n`qe)Y-IJ{-+_MWaz69gXO3CFFv zf9*rPgMA2;@QRupKtNz&*G;|d^=}{|W+tS>qA{VdTE#OD4i4RQ=UqR#{`y<~@VgBg zHreR=S~)gLT)d{l-QTcHr^&Tr+9Mv84aaBGa-Jz@j`z`#ybl|FgBbM}>t-X*7)%EO zXzE8y{UScyhwOwdFG=bLn=`VB*^5Z1fx>dkQL9!SbIbu{R{;Rn-@DHXJe#ZKklf87 z+DuF7O!|t;Ukm^fDr(Gh?BBchr$7A}M&a8I+0>qd1IH`RaH-_^9$;0K1;7vd>MbLt z0IlGs>b5(MnVL?yY1bh|QI7J;`9uVfJU=KDi^8D}#rA2+b(B{27!q2@72}8z0e~+f1nf$d+Y@!@C`GIh^+<@B7t%> zShlH3CN)w-=dd0KfQt5(g8|R9D8<{|~qke%(1yNFIw>V59Vq*X`yzs=qwNVfd z#RQ$5sZ$oU|K`!X0My8oI)J%2xeq?-jlD^N2oV)I_2t|5yyqF}Q*Sx_i3j%H{fBi+ zo_lOdn-=4Tqm2YnGD<0QN_hhy#^m34&SJyd-wibd-m?$*E^ga_RF5I*}8qlNyi@}z=82I>C|Z_pLFYAZkvq? zAW@_O<3IiE^G-eGBmf{vhTWXtSQ4?zQxNz+|HUsq|GCfKeb*f&&qDwr1wbNfY`V8b zC#bRQrsX~14DIxTDfYDNhiQb#T?&o_V`x(9SpB4Cv;#K0WY79WK7^RcMQ}P0K!*#n zc8u1`Rj2VKzlkOe9LXWw*4FO2&H)oZg?vGTF|6Dvt9h(KI_VglvSSpuGrE)|gg|;dZrZZ^_wGpAE$%fg4ZD>TwK}fP$ z6;O0vW7!ReLfb?%NP`=nP;Dd?YABSnAR@R32%t5h2nRvFR2=a72fV#`zqera7lZwI ze{)}H?T*1M{l&hLUkcdw4I5@Q)?km^IHIE?T5%9YE?}fVfeK4vX)dn0je}T;lPq;D z{bsi&8Y*~OdW(yfM08I?h*eiTdL!&OnurXujh0AL=mAygjLEtcZnr{l8-G$ zzwsaC$3uCQ8~M(5qGt^mO)yGPAem3xvg@Yx{ORW(`+`&E_4oFtoL1#1jN1VL1yda=JGx1!QlYf1w5zMDBb!e9f#25B;`x5LSVp388D+wx-Ceu)ZrZf%^b=29b=0y# zzR))`yr;Ks*X}*7xpdj{2+0Ht92|Gtu@67?_^$nXaF#>@stgp{;ul|hiQ_uLf^?u2 z6ahpw=4Ze7)h9ppiTm%r+XyRCT4@nrj(MN4uPM{Gg{LR+cjy{y8h6EX!K9CeSxHYE zQVQm<5z#(%fA2rPHvZzW)CcwcW{OE%lq z+Cs>kZEbslzL+x|yQNTA@TqM(k6E@XopN*OOiQk1$-?nW$7A#okXvgzC0FanBm|82JAMPI*(nKXAsK9obh!9bQA_IWvfqCKp2m&moC7X4$s%%ilVz5BI zPzVBpG5cfJI}xo_CYz~=79=cU9i}9-uU%n4t}>>uau!VFm6PNT6)gn-1EL~Ffvb)0 z?cSGvWXs^a+XnC4GVs{`{OAsrx+6%ho%8As1uJ*VZ- zJq2#qep0I=>Ff=qA7}M60bF^-6ZRzVD97h!a?2@JQ{{4OX`udhG zUT6YCh`>M!DO|ybNB|@Vf@6+e@$jPyH|^L)NcBP8XD(PcmCCGIy$T>6C1Z~3+FwQZ zt5<*RJ^%bK`Qo5fjtH@(jAsw^GtJSYAr2#&jo%Q{woMu?-s4pCBr7#*E&}7l)c5El z5ixIYZbdy zRVzdg!q`24D9ablFBHq3=L6O|=m`S)#^ehH4zq@Z2e1({5G0q&QcY?k+vg#7Lcsn} z-EAi=X*bMB5G#M;Ljgh<14uBYWFmqI7(fISg32gX&h}lyH$A%h#)o&^yJcYiz>whp z5K$o^DhD-$G*%d_x0-V}kWP&~g{r=T=(|yUOqxzzmM>n+#8v?#40iU#xyhJ03t70z_ok zU%YV9g8B2HBL5kK{i&%q8}pCvc=wmD`4RwVJB z2w1?zzJ1L}3wv5qLBOGEDR$I|1MUz-!k_RZf&#=qBB;^|THO1$4gbS+_nq^ZKmGl6 zcipsh^S+@$RN%PU(WI=0wuE1$Kz$COG)3PRpO;@4Ous8vKwcm^X>wPy52 z;uqS^5lI#+@oG?xvC3NA-1dAT5TKL0@saI+|HDT-wU%L8>h=_>B1oaIw<6EhTCdR;|TR$_`mYP|jzlNp7M%&=X z+aD>ALom=s$J7u&Gk3C0J2acJi6&}bgSPbc^#hC)L1c`JijAcE>Q}#7E0U_*-3K+{ z5CG9W2R6%=ANAo6e9)G5LcxEmA^p^oPk!P*K9RH@XUKIjEb^0EcKUu9kSzOQW8S1w zDX8SzirNd2NO2HkbE)S)<17>K_C5Qxc51R%fq(!OiltJq81`TCq=*8NN~bdEv_vLl zO|c9!0D_nWt?8GXGT--o0IDJt!+R2xuwdbik#&m#ND7=bck`ZscYo)u7k%~*U;Et? zy9Wo9gW4fN2q_;Ct`;B()PAmF5vpG?_aKqQerRC1g(@uUNX0)j*j#GAP#Uwj43dqR zJ;uqx+MqB)CWoK@e@|;qslX5Fn7$DYGzu3}y@ib9mDs=GU04)s+tv)@FQ77?$1^Ky z37D$V3JL=T;AC#NZ}aDGeo|Zq5dkSYPZZdkT$ReEQ9kxe9~$f(7|_~@&L48M82eI6n4JE^)yG;9U!p~4ED(qg09GHj8law~91+Q2_*Z@A zvsZuZ%S6hu$IvLP`>c30IFmcNiK)OOj*yum#afQhwl(XT-V9vvT+#P z#Lj>SY>XeU00Eo7Sv`MFtK$VC*7$^4odyC@!sHDJLSdaz2H}5heDpb=`O{ba@YLQ? zS-C`nQ3Wf4k($P;6li?CcmRDp!Y-rqRFz6c1Q4k^L%=ptb3%ere`uTROhj0+*;FOzayT5V8>59vNXMhM40)=!-6qXxnUJX&T4cQmfypRxy?8|l+gq`@%%sl5CmY6Y}##aYXuNCLN@J}Fd_)^ z;NY{aAR6D>wsVgn6}1zBNaznGQ6Uh5AXu_^;lep{L>Mc10cR$n z(TzkWoOC<@R8zcTK>!i&yZi2se)z)>jyl2GO`4c8H0_SVi)Q=71RLS7v{=o}!RTdZ zs5`FT=E#Li?3yv!aYn)nask7-yNx4va7@azeVcrQZCGw?-D{Bn*FRk+SgfpZ|ha{>@9VBK{fo!36-|r$4{(hM(S`NKfPFsH3dO zf=Ii2`?l`bqqQ~w)%Q{T1sr%1kv(GV;MnYk=&&InAOzq8 zn$Ffu`%8cGKY#tFAFkaz>_f^CLd*I{-9@Ug@phn{*--g1nh<832aSar03ec1y9?S} zWJ8IFMRkXd=({jDwPt^LsY7Y6B;|m8 zW|2@4f!Ls$0-Sgm7G`0?Y?yr$y#n^4mv3LjBwp+XCfZnhBLR!CEM?sDh=@o?6#gYj zOy#I*adh&!8js!Xi6%h+1ZLDKUo3s(mURO{e#$`rP$YH;0tzA!xw&jQr3rj=Bq$6$ z`=pLZdjOH4~rv+iiWwLGU?cwJMCP|!DKmi04k(8TSZ6iRB zcg+{OEgSRR_kN&QE)iMMKU#=p;f>j>tI&8c8#{9b;7Dlm!*!!Lxk9Z2znz&iIGFm6 zx}(6s1%bvjW_$B9Wi)KuVL#0fa=?wMhY(!>!7W+tVJ`N8||y?^=g zW!9Gg0LDEHv^6K7lMSSLhg)6w4X?;rZGc66m&qs^*>Iz$8k z_wL&Lq4&Mtu(6H+6D-nnLAmTd{P@N-$DLq|*r(%xk=AThDeLcpVKOcbPF}V0c^90i zh<^FN-GOf$t*m|_T=7H%AYUx_et;B*(vA&O6anq1mRuICj3q7sR{k)H=ldc6#(UXu z%T~^9@ry-Nj#SPP?Sj#9$*zTrh-ddC2oRFh_W%GP0*EHkgswt`;1Icl zIY&DRO~MP$vPlZjK~O}52ndG32k?yqA~rj@Z)7;&p<+2?lmILd#VibANM=L?0t7$` zQ*?#xP&Y$sK4XJxw5gs>Lt($RMao zh2rI>E!>|kzw;04fBLeb9HS9Pn@Yir3GHba9$q!fnQ!*GfX z6^f16o(2#QB-PvBpDz|NnY1utq+_zp#UMnah_cztqfb7$e$yt~5)!L~W+o6xnA=-B z7cW@~6QQ##bNbs`Zn^Exe{pyuv>JZLymlVlLq9kw|Oo0#6P_7{l2?RVdE`IRp^ z;H!_Y^mNa8#>E${|HcMHL^(L~1Hsx$Z+X*O)||FR8i`RF?qkam{v-VHPkj3Ebx&xe zjhPX#pKC7%HjfdDJi2i^ixB}95f;PTn#($l;~VQ_gkXYGk30HB7oP{hYu9bwwyW25 z6bo0#JP{Vi7mGn)h^YE3mX8p}adO#=rG_d@M1pujM9=e#2%Dh2t>vxfuVB9fL?9q2 z5QTuMy3nG{KW0Dx#b8V7hrfI3@4k1RXGEtoFxMv8PJ9}v&nNw<&Lk|+mDL|X_^hSv zT^(5nIFv;-)OI9KY)$&aD6cpPRqx)2BN1UR0hWBznoU3Fm<7*S1$i$REPDkXj7Y%D z0&M-!kPuN3DFg%{1SC|1ipWt&0E9@0DMc#seiDpzN)iToMu~)8$N~(&0Cs};0S}eE z!IJSAygAinf`LnSM>TlGf?u2z6kFTvxfSj;~ zs0Igz0%O`+TQREkD2Vt=WRZ^6RzEPMVu46SY25%mLBYOkZ`nk6bw{eq{)m$W5TatS zG?>q~wB&qYM9_}bj)Q_qDNE|*3x$Usd*aV`-s$;Xl*?}hvp;}9h(>tcym@na=0M1J zO#nZ*{)fKt6=@!eQk>yv(pgPRF=p2UYK*C=BSs1ptp0LxPXPyayEMyJm;>MeVoYKh z_(O#0)_K#84>|Y&j-!5TqKRn^0bpiC`t5Ij_tAgLMzoVfx3VBOHdB4C`+ zDwH}!CbamTGDC*KcRK{qcExw1cHXe3rwLL>=-I-94KxcC~wXC+lI>nZ};z59vn4?ec%+%-$2kgp8o_{Ljdsx>!M z^6W4aK`0bH_T1y|+cj|K?g7%S4Jt&Wi^Y-&Oj}#4>o}Fh8l_Ld){^ed_B|%>%N}V3 zfa6%lYLA169C-bM`Na!}fCdJKckkU#N&^586!OL1f&LvkclQnUi2$Lhr#xmBFuIxu z%kpK*v)N2FFFM9bfQW(Tt$koE05r0%nrNblCPv3$Q2-s%Q^=&;{>`!G!!x``$x3K4O%^Vp+n@4fe)bI(1OxjxqNXi|(YUJ3Kt z{^1|*yZ>G~5dW|06CnvmI+gyQV9_Q!!5aVTP~9?mQm#Rl}lds+-DLY6K>ePYuCPhttbp$8!376 zg@Q3$pAX(@e_YqeWinQG1(Dq!rcDYt07L}O^8~;I-n=;-?|RM&X8#TV702e5s)asc zL~K@U6F{r;)tfiJ_s46|aS2(Nv9iyI14a^m4>b<_zAvf;0txepOS&&QelBoOb=^x+ zS=A19;km1iSNU$_OG{W_MC)Wl2w}(*6p_Gi7}BdY9xztjfmHVzM5GJEd)g6FDOOdL zs|su*Jp&^EgQ*-Rq>B&%fRNCk)>L|RTl(asomMwiDg^^2e{)}9LtpWsefh`w%bWU( zL!NI810g9yw4q^YGQd>|UPU_spa>Beul%F?cb{{@B0^+{obE!33k5)>TsM<04;N5S z06hVX-ZfXA`J8Xxwx{Tm*47J=l=1`9+c%KQW^&n#QWVy-ai4^L7(gM;>FnISe?ObZ zduswWWe6aM!~z5PJQ69bdiw`&{mWksbHoseZB`1oIhpCV`O(6I0I+)Xaex4|tl1dT zG(SANYxgdIN}jY?idkH>1H)9>?M*asFu=s$CZ-xS7vY*)pm8E5fDUZk8ME&vWi30@ z9MGYAKs!a48j@_L-nskl_Jlt zng&M^ab2CY><={3G)CeNV~igJ2nd1qrVCH*UeK{`=VlvAC=NIh#hJ0xf;Ewq_I&Kg z{PeH8-hKT81{IQ6_NT&v9FCPSAw4>1pa7sC38M!84Qm#3}VwJ|n z8~IF)zZ4J?CRoEHH4)|vOHSq3IVjoTiT6@^aLtn1_r0=7Hkly~Vq>58l0ZcyoWjh8-t|h>+~avi~8(`lOmN zA^?#4)5mweZ_m*DIT;CpkdcJgp$&jA)sih0iejwL2uo$NurqztMJK)fSNBS#27*K& zJT#mymP)xyCX-1kMIgXYjNwL7Eo2tQ(On(w`}Xxpt%50T-Vq@oV+8$!LpGFBDy3c5 zDSN)nG%pehyOMO&47V#VBqCQIcU*;htly~adl4a|-u}LU{sF|sdGwl?y=Zp#RAL4j zePdy^)~kuh#G%dtb}(1*DZ2w0=L1@apSw*rOmRy!(ZsZZweDG%Nd4%C*FW~iqoKz>a2lM6=e^AKoA%}41!=z zcl+C4a0Ui`AS6OjXp^Y^68QjHb&3(~>ObGR@6FfUTQ)+PfEkifj_I*79+X-DNlH@C}L=yF31A=0l)@fy{1_ewWmW5+?sSyaK@CcY3TJ{49AV~BI-&d~L z5qA^6pz0O=8XZ$A=SXr*(eL(D0wjVW1cD+6%*HSJr2*d?GzL=Y=mi~DtXcYr=brGR zD^L3RrN_PVtR?3z>TGu%$qAovxKp^nQijC*#rA%fwgv4tXwg| zv>c5f9T*z)eGd<#O?TAN=>9-f%sV6>tDlW{15mw>CWzkum13JMX&Y%U}Az z4{s>@Wt-b4OqElssT^sB)lLgUFv8kVpZM6vk2>Zkk$Pvev5!;A7vA!BfA9G|5zb80 z2&+XEA)oTlx{bv`(HIdnV%R56Ir_w7mYuQYIImpRN*jjlyZ4n!W!E8yc({PMSS;BX zw3rO=11Q2ut86Bn6oJIuO-O-Z-}l{=3j&6XFbfa|-pkKBwP)oV|ACzbkpxt1*M}Y` z)^J4;K{4qR{bk+2%dcPCmoF(-3mdBuIvm%eMyi462dI9N{HgI63ag4D$N_`#mv*NA z?zH8XuAb-T3uVvA=1{mM7;i*`$Y=*{e5Mh;jW{MT9C`fJxAYeMZr?um zmt6yco)4r*tH|*zj7lxxN(BHwgzWJjH|~AG`O6{UcUL*TARwl5xnjO#U0)GE08#w6 zoO8@gJN9`DqDcglQUGFD0E847HbcYte4&_1r83!cN;^atw|lZ{MZg$tYsvY6Un~@3 zZ`P5!ze*bi0EkpBdx0M~T4ghtly=1G%93t0@Db>6u>Va=J!ax1eu^=<3&PA@TMi7fL+d1Uw>e{0>ImxS1L)w1#sHeiF;qit z)ZFDxeR-xYj-WB#L=z)Jn2FSlKfmFctFL~`TiCdix@P4Icu=7{L zcH6pVZ*TuVHrpDo4Uq_vduA|J@7DpzUFCLiJU5mjPoQK;1*5cCNl{KCCz!f>Kn(exq}Zo2VC)Ye zrBU@=brr0#NNQLXs2*93lQ~79%3~4=!OC%zrPny{KoAIsmiDwBHMjkh0PA}Tf7smn z=L%-&BBL?(2v-B5)g2xK@&r&1sI(7(lsl?kvv0)TMuJ@KvZiu1pxN< z5AEEu=jat}zGna=F#ZY09_?sH0#>91sA#->{exD!Weq1kFuosPlH$N<{TE4RGB(dr zB|nk~01#2B)7Kub2Y ztRs8If|k?fWlva`o1aayVPkv*0HIPTU=wm8jf*h)z^-D68t-2tyOH`x=TgUrB==HHU;jjU{A`Pykri_ZSfMimsN` z^EzI3%F;h<>iyB$?e}coS1ft#rU*%d6e&mu z;tY!>)!x?H+t)8#9W_1rD*%8f#t0kG(b_8j06}1az<{8uozC|5S$r2K(a`cd&vl)| zSL4M)_df&xGdJ-6I50cAe&U$H*Y~N#!7LX?W+RX15#~$;*1ew{`liExaS}iy4WLQ6 zgx7c8C^8?c-k{m>O*GL2K(r9B2oZUH`OR;6<4jCowxtx z&c42V0^%sg)vkyHCgAXqdae1Ect7?kXXOR+1;z{)i%1Z8!AQB})g9C(_hQ#|v{K=h z$qfMW#Zs|Y6o8cLYNaF$oC2QjcXqeG@wum9IS&G21cWfu{XnP}V*mgFK~(*i`r7Xw zaX|gxZO_u|z4b@;Y}sET*MX^W%^2w>P7;42A4AI+5QJk+#3n*FY*`2dP(&@6)ZCWT zs;z=^gP3cNmKHq5i3z$M5+F&s?g)PL#V!yh+O~T zI%4%^GQy5EkA@mhGBu@%dcA6w%1wsU?bX1U6O-jlK5Y%7>Ifp$mqI`S;~V3rKwW<9 z+!q`_@BSTq*WJG1#`Sy39;53f6*Q!%TsF6@8#w!zxd}B%O;ylIrAZC5grTYth*?(8 zZ#{cn>mPS};5vXph?>aFqyex{$YaP$S>6T#P((^)uT&~4tz50ssg$F&)(QcMCBBi>!y9jB7htf0KT(Pm_1ptxy z`+INu%k3|H@fFq|c}y@fAq@`=Kk~?RUqDXn3_mdlb_>&uc6n_l> zgycG|h_G-F1kq0;tv?f3WCR2OS=iC~{U7)j05~xD&lkUR&As>CrIizyVC-F{H|lH7 zBK?DTW7rsG4zmwc3{awC$uE>VE9L@`z?i_)DYFm+L=mN2H%{;lktoP86pBU9^8i38 zN~cl~%87&p*ehRg)=9@N>y)7Z1QcPLf4qhR5Cj1<=sfn+j+5qhz5f*_{PCg9uess= zQkk^t0Q2FzdAIgGRGg8*XxS1)k^uq%L_(x&#%a&!xfwk-tygttkLgIQ>`u?mr8`nc zfSxfvbID@>7NAgDWi5NeAPD@xq#deN;D|kak|0S4X{sj87&9oMN2Bn|V>fI4-F)(_ z4GD>n4};b8P1W5-eAvnv8y;-rg4Y%%=~srrHtMrLP$>Dpa9Vfn>=&K%s?EJ$yM6P` zTlWWopdA1P5kfEkzhAfiAInP-Ns=iFZ2<)UMY}F(hdtk>AV&cPXiGa6F6+E)_YTWC z353d>TsEx~4Gj)eb99m32hkWVnsUkW5Xp6%wCko)u2M>Xv+0yECZ8`LQeysvjU!o)r&%8z@Bpik@$T4YTDfBw;-hVcGX>ns#9p5YO}N z!}RD782uw@H>Ki_(beDgO`%jWfk7ewaUEAHC17JaNy#&>J+2mbVM9 zrc^4CqO_Yzr&C%{Yc|Wql*(Q_CnerdseGaM!1_%udd9iO9<^fg&RvhK+qh%*o{UyX zp^dYa%jMczTK4w$A%?zgvj!DnQdp7Nvv=o9Uh?7w-j5D5b!81=k{gn9&=5=;< zW-?i&Y8S9lvG|)`|Mr6){7|8gM<9XOK>*FF{+&3adHX!6n2-)=6yvdp*^NWJ>>QXL zZF=G0V*pLcZSW{Fv&Mpe$~{>VO*GL&9l`~ISpb=hy}eH6(!$23>iE~O+WWaM@QMf_ z{_X2uOQeJuiN?YHR2}N0ANknsJv+40Y|P=iXFOD=wXMM{Y=lM7k{A&X5fICsXN)04 zVGh^?ejtcdDW8x)L@CmWLh(VQMk$ucrLqSAmizUr@=gdB%NIFTEEk{ha`K#4}EweW=n!t(+urCddA zS+^sl7UkT=q0FXv0xqOa;{xN3086O))U>55}@7sEr~dV%_sVgrHC^5a30t=A5;p;|FVZeffbc zJBN#uN~5EDhYDMIi%YxP1$@LB30ByOsdT!OFA7(VZbX)LWRLAg-@b=Qk%Z2Wf`H7D zb{*Z(F)%n3_#PrPV5#CNATV>GSSXZATB&R%mCI&Cr0n_0F=6*2C$(p9@54`RSaaNQ zM=x8pbisn&fguwF>2x|^29T8Nc6PMw>F;eEQ+oyj6QdcJMJXi$>(@W^)cSQlxc>WE zJ1yC4S9e!eXJ^lxp6>4M?(S}_bgAs`-n0ABM;?9riN{%(5S#4J%!kyyX<||^S%Ye( z^vjV}-|=8{<^jjCO~Yf3bg0>h8UpA5jE+fZol(x4xb?67ayE_T14n(k93nKIVl*)$ zP;HK2754)Gjl4S!`izJOEPTw0RcD`lmNe7?j10>hJ-GIv|NX!JBT|XbKeJ7)jEF5Q zEyh~dF^Q6RL>dH!g%QcHcx5lN!V@|bYfh&ehsZ|#MF0qlDVEAXU_wog2oj_-X+)GL zSdU?L9D2<&k9SfEd!(jbbzWTfNCHK zj!Y_rg_tD}unEU1evHT@EHdDETGMOKT>A7CombzzMW zQK^uW72tv4q5h%4^&2v zZg<)?#n>1{0W_XkO=Zoo(VOwBD~|}yC^_&aU7$A0+pdXOfy98XpAA(wi193SAHvJP z^Iq`6_O@1QT#f&5)=<3qny>glDfa&wUD_~1k#^nrb9?-%=t~vhKxpzaFo@^-90ZkA z-ek>B6cMeIqg2dZls&KP`PR?^VGtDNR4VOg9mVPqKrEHKla|hZ_8CV(xeP#&m;(?Z z`G)=1rhu2gQF6=1;ZNPU)qp4rwJ8!(P6x9VMyd)#0Adgp5EC&zD5;b)uhl)eBYjj` z`q-}YvNm^FSGGOlq*IOv5QAsfV+ojtjENN*p_&K7!GsAT6hjuRa(b-Xw$xuGk{3!0 zd?Oq)G7aym4(uMQ!N-J3C;8KuDj7Gqb?(BVJ zdme~m!UzD8dCvqyY2~I;o)=gNli1i!3Qy?HA`S`*3ri@pvfL=L2qAQ|w<<-$`Fveb zE3hZAWVZl#p|4qD>zF0}_BJ~$RdW5kTB7C5Un~^4{1AShCgnb9bI|An7JJ{{V~y@HTw25dX^mkW>bB~l>Z!} z!ebyRC)mcP>lEDGmmL$Z;^q0fCORy zF|^4Ng|u%JVt;_2yKh@QUnEBfbCeqk;-JA3YKe-bB@_Yxi%7s4z$NT%%`9z8uj1EAek)Dl6uZ zD*swbm5s4!^^(GzL~~8{6(K=N!6*l>7M{fKLJlobp`f5b%4KP&T>kx2`)*mc?|~hI zTl))xeqbh^#0>#5S}p0y9y6!yj742%E$%w1rzPu>?+2b2pacR|`V#X#kz%Gn9YeM! z;dvIexw15pfc3{R%p!8>(VfRGZoBF?53hY}hgV)n;r4yZguo91A~zA62(6Q3TWgC_dSGyHr2E+fSzD=_)NT;HM=+!w*|6#870c7< zG%6%OvLq0p($v=4>L}$Kj)u|f;DD-YQQed=@g|iY6Qd=;(@r3A-1NdM=)pL+V61P2fU=+ISfCNKIkGkrjwMQ=qeuYCUQjA~RzUy=Ac9sE5z`KHg5~XKO(g=uRTur}PKXl)=epHCD>zB2<$Gv`52pTJzKokKE1eg_3cWdt0 z&g@z9awpHr9@CSVn@eYuVuU~>5HN=G%phO`(u7V<0thw>R7EcZD6!R8#r_~bCBs_y zK5WnGeC2hh)Xo@Y!%C|vixg|O#ri$RK)og@dOMy&M0?a!H`G0ekf0LDy11`c_`!p_ ze(=D~hxX?=!E+^Ozd8p|yA483+Xz4*Fi-3mdScJejgM@12v1zpaqiNt3y+?AOjlc5 z$|?JS2?78J^S)z(_iJ=xS>5uLDpgnj%VrSN>P;J5D|nK7Pn{Sw>VGkEvb|;#u#IiQV0-JuOc8UEx8OS>>n89Q1&%;eCCE5 zSek>h)8E_s#8d0fJoS{o1V~|Ad=M0YmRwG2?U^#pt{~72PBq> z`K@OyZar~f>!Q|7i$iR{V>T>#KaiSJ2%sQH>|TTwXBmu%ohofk<(*WF$$HUJOiqnZ zcuTIJ7-qvrB!;2(7~u{mRl7_5hcQ-;hNMVUkJSEL&;HnCS|FAn%P3^z??1HltG91` zygx7T7Lf{L%vo0P!mK@i$nE+p_iydHe{0`0w{JLkVdwK!&A;U6p2ck`Hh$nSAcQfM zBYH9_Y^7cT)fEZ5gpzF_h#){p18O@v4AITr6@eL(n>ix@B$2D6Cne4 zWu0R?Qcv#A18NarW~B%q_9Y8dc*2~^q!p>&{(*yGqAf{^2%y{to?O3T$&&7#F0jn2 zO?EDj&1JLMY@u9^n6g>3?n&bzEj8m8po*k!aFiK>8Ds5C6=qJ?%{QbX+!XfPlSdd^LCLo^qOdNh(IH_^m|FasY5T!;mkQgCMZ( za#GPhpa^F&Y1efi4*e6IgM-rf$1QdMGy6U0*1E2o=`rmEnW3Y0(WPY)OKu8@`9VuYBZ(HyE+j_r!XXZsGExi1s`ODif z9C(&ELqNgmGlyz6h{>Va`c!=#z9k}Iag;y+VS1?Q#TdcHy#^w599@oj$j&TB(dy3h zjlwarWekG?inVp2*oT-UlX7}G+xPbmnjjE5usrQn10S|S^N7cR^<%RQn@FHJ9AJc{MF60yyE}U34w0> zlByYN@i7B?hDaaV({aht_6t{Z9yg~omr_Q=V;=I2)m$I|MY@zEuOkV|Fsc0!L5VE* zi1z z4#LJpfQn!#8v6iYCnZ-5gsOU0-Xao$NZ=b22Hci9#+) zL|6n_fItz&1HuY{m?h;nT^;TF`}*T_R1?3M4V@)PyBoJ`S-)xPiK|z7z8|t70FL9d zwB#ms$eDwX^C7Y^vjb!E9tsiJv0#HeTbWfY+ZVo@?N0+{1DaiQSTF-j>luY46V${= zIDp2P?gMos0%%$nI*CyV+8oXYjL`|)m#D)p7Y2aBH zLMAO_73!lOO*j`*Q=Lqe6vomVSiiaM)`F~N`^6F`I@ zl~P~7cgrV#zrMsK)crI%WymN_;#9LILIi+4#qw9~+Vrc(cD?>-%dR|WQCf-d;}ILL zqV*w$5TYYQ|0XI55PAHeF&qTO)g)}sDOJZ10Tjp4NW{iO;lI%U&C5AjQD8(VGR7cc zV2lI;;HO;IQQ8uS0tkSHCFSVuj`sci{l;+2!A_I|0ue$o?BDy~Bgd><<|qvyRtuvD z!v!-c`V6}590hSF8aB)U0%p>wjGNBnGR9{=@CJv6Sy%wH(nLytnPtY-e+CwL(lDDZ z)=kV(Omxs5$rF51Fs;}10|){=lQ05{aYT?CH4k4C7+2kAe*-mffM^bl#tV9s0H|Wg zkMnSuOg81ZlTxzDKt<6qiHF0;#6`=L#FB$3n|rP$`};c|+_-5IpaUXE6v||XfI0RN zi{(HNw=@b7W;1E3;e`Nfc%Zq$@HnKE@)eqHBz=(*NFs0B@ z2q2#C5BUD>g4bU*`EuX|L0|*`2qmR3Yq1$;`Ysk zEg2{A*wHAS$EEvYf9xZ0s%50 zW-}RpX#CH3SUwI#SU?=oC$2u}lILE0=4ofHJoczeD%;wgV84Wbv$i#M72*76G3xmj0S5T_4f^cNFz6vF_6h*TiV(H005^=IE=}qfdl|qWY7M7 zO;i>}%dZF^q7joxrFQJucf&7#DOmy*E`y}_B$Q~N5D6+x=`<2??{N9iy+e=f8hT`3{-M3Y z+lEU0MK54UhKRB<5(VHY$~tOZtGlE%wW_D}*zVTj=65V;&uS9S4@~G|65aMmqGM}9 zN5?-^gergtY)m9lN^YHK|IrDdQBkvV#5*Ovu4(>AhZHd)fQZ6DF6(~x-cA2?`=)>) zlKzBSTBjQUVHN;UNOQWnG|}Mj5C=Xb9M3S~z(j-r40FI>k|VEDPTP$QDjv~5z<__+ z+WXXXgYP(h*=47$bRA}Q3k%iN#v@5z$C?Kla@4n~QqnCAew)?(sV-Gowlh|=OEP4}$RQ^Rk z6fug_r7wKpKfddoXPk0+OIu6*E+?LN@{6v#`~&ZQ|DE^T`SFikb;~WkHi1#7BnmGT zGk??G3v5Pq*+FA^_em2I#*7dI)Rb_Psn@VB#7XShPO^9i& zw8FkZ{?8lt{cgklyS5E%94Hh`E%ShhGT487fKtGN0q-jMYxm@DT;GcTU9LKRdH0J> zSajyHIc+J*7fUQ01zJiTCmNvyp$~uX zLr*>V1PG(eP6a?n5JqW1Kwtp|2v~d;FJRwr(GPrM+atlmH8Rt~VTiD!9K8RQ^}k&| z@WJOCf6UzWe7+#02#}b?I$VYFqzb_k{a?`rh5v`s2$@-8;asALFfI^+b~HqeWP~6f zJ+1DE^Rf?Y8?w%Wf)q`dP^-htz5V^!Os1_R2M8t8y7Am!{`4nredj-J-@aX;mM}?OBYJPzVWxK3!C`v$ zNfQTxnb@Zz-6D=zmoYauGUxRun3Ul$rUpYAy+7oAF;`~XKO+_d)n6<>-dBoQChJ6In<4BH zA`uk7+?GyVwr0u8PwiUOo;IM%9&;251_6-;5`qZ{2MHhm3Lv0DAb^wuZ2Yx5_xEN=I^8PD^|rlloC zgaAND2uO&Cpb-EOZ6df70tgERfCGinqLnL`tXTEHeRpl%x-D{t|^F=2=XVv`ta0yUJMT!=Oh)z;(3H48svqJ>asMFfdf zwkWWkl*~YuDN6Jrf(Q)f^L`Mt=CWFA5w<>(u2wC%?C@|t3NV$ZV@>xbgg}Vsl?o|G zUv%EnZ~5b&IiPJjw%_u{KVSCji~9!#46{}`vD@@n@g{^=uqCIReEQFR{?kQE7Xbj< zaR^lc!tetr3?*p{0581q#V4M2>gAVR`QXD3D$-LCvwX(laNn{wd!~sdCW@K6w!@@O z`H>EFI9Ijt5rN+5t#EBL!cp~RN z{k&sV9`oe-Cka*JA@DT0a31WE87I6)fIr>6c6aZo>xXv zfFQ=CQ|V_u?d&zjuQnXyT5?WmKoOx<7N#wvL@A{d zBvX1xXc&j@B(&CXU0-qMP#F~h2v#3g5Cw??R$!iU%%ZoRKYz`fOt}mN4+N~USdz8~ ziJnM~R1qbi0J69)dLTD%-2KzFJASum|F9p#8$`vMfCoqwtrZ&c_~%{2cl_evix#xK z@!S<>EbS_l0~Uj%AY`T@Wmed#$-x$~4hSd=Vg#L7wKJBc4aT)ybc%;Z3i9)vdSOddUSB zUH!$kba(aa+_Ci+KmPG;fBGGQWV0>;AcgdzWi2Jv$%ud;A#`V)(vB_5&pQ2oZu{$P zfBDNdzxnmsZo92i_MjmR6l%+8Z^3`__4j?^Ijdjs^kecv1wsT66f0wbsI{w^AgqoR z9rcOL9;FGRQbN4ogrXAyB4x!Up|=_m0L{%hmcS7JW+tNK0%MCxM4spM`hF&pPP-|q zWMPq%<8U^cFBBmPWHm;QhR(3KefPenoqmd|==XoQt60E$*FHRdPS;tdo-!~r?7A*h z@qIJXR6rCltByJDH@E(_ySvjiEJnkqeip>NjY^3Kvsu3UsNetYmb0IB?o%7q5vu9# z_%*e_5k5|B8#Q}m8e(QH7mbmu$N>+wgO~p_VR581)YQZP8vjI{z?43isUO{*9w}T< zeX|}B)o!ARDS56Yme8~wd76b&QbLQ)Nu~bZEB@x=|M4FPIQ!;i zXhlb)!{h5WJ-&WZR8v7DA|(i7f@~)9ob%6Lb<}c}KnxjUVzGlYiK!xpKp-T?sd!t| zil@Z)eP*@>6@dVA7zHOzE+6kG03rnN)V@O5Go-4!0YQ+2QG(LSIqmN`d(ow2+ zx|8O;@x0Y30%Hu45{!Do{)2Jv)Bp_|V~i6;9Ujj`bL>lV%`u{nN~xNP)bAMv%oYS; zH(XV*Ma1_!rIlAKzW(*E+__`-Pj9&C zb6uYAQ#KmPH5eE45??b_9zO@*n$Dyil|Di9DY0ck`K;2Yn#cGHvVzWdAH zUU}sex88c|SFZW;O~3iA=lK9&Lr_;$L>Li`zz2TwxM=nNPG9K{4$|%4v3eEz#)06qColcU%T9jIs`+_eN`WAe6`X`l zN(liF#G!v88H)grNNWoFJpUtqc^x$y_G4vjuE!cp;=B!(c0vCn*FPg8&VgG6cubPwmft`|iyF zfK_&h2nWH6?f+f%=}#_Ryrfhr`o52Ziqwby?E|}a?*Hjef3@bU)0lYrgT_AI_Vk|~S2+Wz#{JKpoQH;Tx`mt69H*M08?-~I0M zFL@T(1Y~uw!>yO75%|E358rtIW+&Sc=7F<+V%d+CZz0%(d7+zDi0Df|V@zdyC0ek; z8G9g{`dbYH0EKCP>k6SQ!;2~-pD+Xa3uFmP2ESIE{AAU z8NL0F4bT$U%UK- zk6f}MO;GeatK6u*L?uN$Nnr+}5CAxeD23mBeETcDcki|LZZ7x%*qR^8B-jFAge{5i z`<;Vt`N0F*hs%zugl*#{2Vhk2*p)4!$ZDe5)>g3YjN>g^(k~7`0EiUQNV$*VIfN*P zEaW)fx?}y8p`rjV0}BZAdFP+^>tEjZqAOlhE|q-GCsHizXy-3~{^Jcl{^^&${Pm8W zZev&}W&LzWDF6tJIr*%oefSes6&O7~hy*tkKBT&S0wT=Z)tddq&wg^tjXz;y$|e8V z&wbwiefQe0T>Zrr%a=$-m=Hn}&N_Ph@wQv9uBG{Dkwn^M0u}-VuzoY+=z~Zma7v$LBq1IY`|u}LK4y(a9YFLpLWdmUVh^F zOFM^ypbRJ~^!cjp+v*!2YqW<_8`GN6>-P`-;|=$J=vR+!=pPQ{Ok>?{VD*clmqO48 z4xvWS2sWN{%|Ht!JOBW|Hh>M{Lj%Qs_|XH~2g}OF-<4_x0mFuYSk8na4c|$+PpYC; zL}{fI#m$0Mn@Htffo#gXW8L1LJ-!=4W=}xm{0lGq@sEG9^5~-r`Mgq=O9D-r*evpih!tyMC4hQz3|ji*K8jumyC!2S!ox>=N1u&a(4*;D+KX^>%aTI z!0fnAp->XkuX*hoZocWp7hiE@odzg81QC@2e(w+O*}i{JJ5D$vF_v6mrYQW7E{q(~_hmjD4+q$}&TxGH8<$FL6)lhy9-`ToFgp;Y!1sp|eg03<{r zOgTm`cW1}^o}SZAIgOMFw#a^ zb7BJkM9w_@^rxNubQaUldYt)?5o#sJu2{Zi^{RZafJ7W7A3_nK#FOyYGPdkbq=<-q zi^4Tq@+=5UU;>C-#|VUkF{C$QN+HoF3@A`6n}LEK5vt|c{-4fWteEqD zz@#MdZ;?dS?j-dDV8f`O2nrx6a8vGe_icK^_4oc}{oVi|iqz5=@u3L7LC7j>b5uu4 z_hj8Uxzzl&%!0Peg4XQ(w(R`Y%>35uyw=RTmh`-q^qg#}GwrlzQ}gG}RYY-is!Cl& z5a98F!av>c;QnG637I+ZtS)qAtEOEl?NqIIig=O9ysr}?R4R=2U2`(qclNI)3Jm<; zog0QcA25vMebSmW-}%Nj+FM%+g@RJb=3f(G?KltK|G*z^`R#=lJQI@bo{)`Mcc)Y; zv+}srMV9`u^p%5BQ01K$j;{)JCnAzbJGb3@^KHMsC7aEVBFAxuhw=-TEW7qQ-~8Ce zKdM~^>R^Ke?Fh86ZFr5N^bqVCA1s0VI|4c4XbTSqGTw zb{ef0qm?ZrUdz63jH%*&FivJqM3hOVk2`wBGtWN#qO;FD|IE{lU9pVVm>>{f01+e1 zoXMoSIy$|wr7IJ4Dajcg<{qgL6*SzS zi3E}l3z|4`P(Kf99|qO^dWg>3!~p;syu-W(oGRvALNr0OdK062QZat5}P znbid`Fd}G2C70pA1jYo~Mg~ffWKm05tC>MO-xKCoSP|1c81ftuQ4@VnC;<6D2ET-o z4@_^_BSK_Io8s$ES@xAHjyrX6YdI(rfF{%;4zQJm003I1$O?uqlqd-j0s@i=-u zL2yu91Q#JikWtv`P#f|KpZlE8|JSE4x%inKEp2glqo|QUA+7Dtf88iQey^8^8q z%spOp{gXzad7^fhEX_9}DqR%^x^mWtghGI{lX`I5!0)&9K@=Zq!Qv&~{MxtY&6!s& z6}46o)rgir{MAi27jvFWBcY&2#O20|r*ED#tLk@-E{N3U3sa@|-YQYF2KY*{}rf$u|Ps{=q_ zSlCpzs7)somjO{QUkZkNgDf2wy#M@TKYYou6d?PIs1Pakz#@t15Wz?<6qbP^Bc3Je z!iN0=umA2HKYU~xgVlJ|i!Vackp&2`r@d|AoX)P+bbCr?2pv+6);3y=R1_;w%xS1? z1OXtx?|=8Y2X4RXny-HI8{fM2HGlht?yk8>7KKF!@Yd}EU;Xn&bjY@vJs?(fOWdfH znl>B@BaV*)5ECFMtwM$@=>`S>Q4A*(aRG0AYFFMEKopjAHur`9`oii}$CSz?Qaa4} zh6Dggsd6Fz$D3~ffwd1kFmibX5!sk^>ox*_&+LO5Hnc6zeI7%o$f)(%vqX?4xaaP_ z7Kewm;{e#;I|>ks#ljU=y!g6nzmv&i8=Oyskgj`h`!CmSYRS360TKWTQXKa=e3JyaQ zV(ddwy%9FLYqNd?ixw`t{6#Mc1qrpA%pPFkUqsZ74uh9i5lut_DMi4XcHBjC=bm%= zX=j~sisyNSVo50#d!B@dV%D;V=XnY17y-bra2@$#9{`4V#y}K8zHCZmf4<8fd)D!< zJ8MC{7_vna!k%2}dq2GX z>!1JPv!8d#C;s!ZU;XM=F1z$HN4xQf1yKOM{?PV6Kfc@1nxm4{P%d$`s^36j+p&NX zxNcejm3AEW<7-S8FJHbP8|wNx-4vp$N9`E{Olf7(}8(E*n^JqxHCxs)V%UE(L@u|2~zz* z0MI7h9?lPZ_j}*B=6%uwtil}BEz+UNfF&>nliG_}ic0N8u*#uDtYv77IpOH#mtJ_@ zb1yjO+2=id^@`;?ckkZ5d$-oL=5(|l0HEjlCNObBTPvBFK?Gx8rzAf_HhwLj#=#&+ zbMS#@uDbMujzY0aTG<|>kg2LDmtt}*G}t3y1_~gvtKhfmcKyRoAJ|dwtn#Nuu3;^E zVeV+jUUB&qKfCc~fA@wr|MAbatz5b42S54s^}oF7OV?iats8#)jUWBwZ{P5DK9J{| zFa}FCe^|vBL==Gl^t8C&`SzFY`pX^Zv~%Xu&i(A?{_Co%KDFxT)c_IChFBE7`p)fp z^F^|3LW1L{>82S zF+cdOcmH##R01oUiReY2p)AM}51C~1AP6X}h6e^WZ`go@VW~qw7y{wY(D0QnzT#6K z`*?j+FJ?xfoq6x`w?3NAWx|t^ZM+KEh!KO6hzbn=AY8jXBpVAtWm%QoE&^>%<(6*( z>q}%_A%x765DJnB#FRYp&0NZ2kA+VcDUwP$A&N%(lPk!Pv zH~sb|5w;PmAM6|a%|p9hcIMJVfS)950}=*iCWu8jaj2!}%#gT@O7-pyI%(7qEg(+X zNu{0Aa4D)*_5KK2t2?*t_gMtdO=mvvf%mtz<^(`%MMM-Ux+2D9XmG$7qX_1-wcPmQ zAHAwD{OQkqVe!&s*7?X5XUmoifA{9M+;PWU+D)6JzZ`;%&I8GiJ5@CXLS)0cckY6i z3bcbl004<7pD+B~Ti^WnlTUvATi>XU7K}*OJ-G8FXYV_G*<9Z%#mo;RxSp`)m8P{N zj}BDDO-2LOjx$VBogx5ju7Yp?O&B46iYP$h8I5wroQ~%&YJJAiu48(#?Ja4g34pzl zKU64h*k5?8w{XwC-J6F8bw@|noE`-9gTVKFFEFKIX}D0_vv2R7J$ox^rkQ}abpe1# zdA^@7lqDgWrj zm?nih)Ho7sB?OSs2q24DPXmo_<(S<=p@~_K)Fdsr#dVr8NZQbyduYCR8|MX54 z4o$kc#Wc<;govd={^K9J>a(Byv>$j-F%)O_0xUMVaIsh-g*HS^=m{44fr+q))_TXD z{ryA3uA>D)wg{^a1b}7FuaC0>VAE!Ujih6hG*Py5%jBR!G(m9k@}4zEX=4JVln7#& z#=TpFLB?fbxQ9v<-g`k7`)JpnoGl+)h+j(5E9(o0)fvVN)b z;eY#JHr4v&tG}FU&9ULosYF0PkksG5=bf9jZ}{ppUukuL1YJS}0yg_qd}IK@Q1?Or zERas8{`AM+-SNj;o_^u82M7BD&n#K8?7#o}(?|c$v0u98%O)rTDQ5Zcwc{($@sg!lpO9s!462KvXXaEtO)7tX;U*GhsJ5GQ0WtX3J`l;GU z4;O|WxNq&xe)*f-yLY?kbii>>ho@FVI!fo4P-Vmn4+wy;3=a>5RjAaYLIf2{-beoZ zUmtn+;oI-NGsyu7Ga~scU%zerna3=mav5Xyw=_m&60^yr zqWDFfX=iNir{R(l#+^bjf?PU(e$U%ZUUccnb24pN6c9fUW9+%oj+<#q&t2GYw&%Tk zsQBQnq5pky%P$^zY+o@5Okn&HFjt8pfvThAPq!6sgmEjPP!;lpty{J&U%Fg`4>EP5 zoj-TnaaS}G59VOA88T9rG!bH2O`oYj_#Eaimtwl$fLr5G&#D8INggH~x@Bg%RDWy& zXx5{7A!*_WK=ZEYP@qARqGbs{K;W~V`P{2t`8RXs&5OCqDSFyou@n&yFfhg#1CjkK zf^iZlBW##MRftIPkum}xA_IVc>nOuP6sOkq3|P)6X^>e3j>LX?V)Jr~LfA4;`j;CY z+Fz(;f2<}&gj;gi*S+B_|M0fAchBi87RzPNf9ml^ZvE}A-};t!&RaB}Sul#-YbzxJ zNc4_>diPDg{`H0pn=+2_K(dZ<6+le-R5*`NDI$o9s8IH9z4@kRJp1|DakNst?;+6# z-v2KP7tH(cfBZ+eR6wF92J(M-s`tgG<}guW3}48=ZaSqL1;BCUv)WEXsN@J6^Twub z#$eQy5I0d!vqItq~x z8JNX%w6p{z@4Mgn_O;*mR+)hTjDX|nR3>90UP3TpfDqD}w9Q{GBii?Ioe~s4$h_EK zJVD^4GcBM0{O2yc;);EHc310w1Q37q#Lfq|?LBQ_SGimYn;4VcqE+G_1eA(M2r9Sx zm2v>Y3LuDRW&{M8+m<4wSwJ=Fi(0Kk-0oq!A_snJHubNkul&0+7qzscfDIQ4;S3P~ zkeF#=07P`#GiSD^Ph8e@_7nTw`}@cCl*_0zDk8hJWrAkfT8Cka5)yh|`A>iP>-p!M zdjJQif&dck-M#0Q-`o<5`DTzX>X1Sbe-G2iXBMU#g*s)J#EMUSzfb4;^GP=!j@Tgz zQ(y5>dTv}XfTr!JY@&%K#*OAYo*Gy`Awk5QyS9Ac3)k2$?JE|x#8FNP`TYNU?!TY& zoag`YH$M-r4b!Wm4&mi0w)`J@;)$VwJR-&H4~PH@2m><#6pN+(y#q>-&9nxPlzM=* zB7HxoXbUQY1OlLM#IOzJD;NcuuF_Cg`(Buc2+#(%jpMIi$OXl@xFrs9gR!{{20*?4 z#MG7B2bHSHAI~4}Kt(%M1?Z1;8P7#~pVJ4i%qq@x|eW7>yKLFa!Wt zym-m#q32%Jn(v~!d?~4sh#qru!sTg5p`eal3$kT8~JEgV<-aiF!=yQFCZ9 zo*_}i;5IRF9F}&QbP>~pYSD1XYIHrAG#r_Ob4r)=F;6xI0W__;Xj&Dfi6)w8q7h;_ z1^~bpzx2gT8#W`N%{{~{Vf0o6uUxv}CpTPt@pIn!o`2fDV>_Y}VQFwBo|rjt2yl?b z{b#vA-g{Fir@N;MVhIUCO@kAW&SV9UkqoJl(4fx&$BlrA z;LsS?Gv(+#yLJx__N6mv*Ku9f&1BM;=*cDw-qpomh?p29Sk(M2i( z0Eiu(9q|{HbX{=Gj{aYJrN&qn^oiZe+KwsZ=*M0B8i=O?Gm%Q}OyZ&n3H6UbvMp|xWoUJrYgerhL?t9>l2ksYRNwP2# znDqlgfMULA3{wNo2@n7l2?C#mE6tPK5YZS8i~wP^EuUa>D(*J1-X}akMcop|UkRlR zkq$^W?Wo807QcGedVmH>5fNFv@|bUa>)K7OY4^5D;2hbIQ>pjk!r2j?vA#^(7MoY3<5&&+SGB46;Ot zxj^Kpy@S4ySH1M5D~~=ZFosCgn99lLm2Ax7#fulr?F@XMVu=t+qOZjz>~K}9CKm-yn6?2#Btc|S?|Rp}Qt5QHcaH#I??C>K zPwdjE6afPYQaJLEqU2zRRtFT4N=da~Me+l&465E95&n zgc$+9`1vpX>=(Zbf2iK9=ID08Nz^>t#00_nKk#o`wrx_R!%%34wppf?DKc#_eMY85 zv)7t9cpQjIv57iNNcKEU+4h-~2L4cB95Z12lVmz}a1%{5akwBN2zbMfe(2urQ=()7dRuWwO>#byHf-CzIu`#=BL z^UB5;7O|Qs>nBn!m!%?YsVWm97{fte5)4i4Rso9_Fks?(7YEC&Hpwu0l5fpdN?6;G zup@dCZjVYNrS(<6d#pcboVaJ+-1*mh>zj)fFD{jeN~uuYfvB}EluEt5`^$m3>yA4C zAgXT-I{-J`^vg#dewegtQ@9IY08r+dFwnK+6=~%M{+_*i5P=jaQc7#3w02zWXzjRP zxat%0k3Loe*6!Rpm@f(v+d~N$kW|iX?`(}lF*U7vXrBxU07z?RcJACcs3BnAfFJ@( zuzCOBocVKK_VQN(Fhxq3O7RjS#D<0H=$?D#)6Xe*LBeUU!sgk&)d*b~XI{o#m`g3l z>IE4!FRj`&5OWj=yfFyT_`$pd3zr_XlBF$Ppp3vACcl=7*(XgD_E+lx@E#r3E_C|{X^xD03pDlHs?Q|vHZk2StULx z1su{l5>K8uM07%oX1@swBLWJ*^V{0>k6wMwGZuFy2l=$QbE=nK)_hqtx&Y9IhVn{< zH@xvp_uhM7O-*8F%)|kDM1%}5SW1fKYM>3XiJur1>$S19dX7xzWe5! z-pjEvD{G`E3M?t6l42+*!KMHanM4FdY`fKN25kiuTSWwIp+%s8?nXg=fFKBkG8V;D z6P1;7=9{NGPiKhOYyJM%dq?bu6KA;dIrqkwC*M6MV#l7xFTTBY{_wAq(m}*1j$7Rr z%qd`QPf_A7-B{+lG{&McXKT9^wsR}SPz#8jX;gmZ6L)|0rMrc_f2h_*Xct5qfZ;UE0|o7ZnBrND@vn3-9G5$VdyFZ|Dc`|oP4!5(L3IilDc zhlT|UO_L%5j3T|bxCoXYKyywyAO>NmnIF1*`CtE&e;ib+SGK#i)?&cG?2cm;3i0&m zISNsBJnm!BC-I}-5b1?t3P?nRn=_RQ=g-!fbs-VquGV*!Hs1BwpYiw;PsFiyR2@Js z)nPpoMEt@pc@HUK;q1}sjxThaUw}|0s3BAclv9Uc#>P?_&xCI3bouEwzUA!s^HJ0V zM_qw4@s0>&E%(?BhH>2etKawyNGf|mI|IP)zi{K)@RBtj?)02p~{W3Zu+cM8Zn=6|X(>=?~2X5Cfr?LP?7&_fT4#iCr84U{E5Rs5XT^ z`NeO(uO9T~s-MwggW~ukdv#fah?ei&{`@ca;`jghZ`iwuwKtHSc985oHDx8=`%nML zxBs2LC)PJ>QRx73VcaryJW+}xP9ToFxDQB`GZB?}{9_0MJI?_W&scQ112UHe-`*Sc zA@S&a*p5+x=VW`2)|n)OFN`jO{fc&^=PD+&}T5oXpsE1!gp7>o(-x(3X2 zNU50R10TP-+3IM~kw^sC(L@?VP;2N4fTG-}CBlXr@iR^UQWGhNvF7b=00>8%ddRn*L>wCp7}U{p=r#~R`jut{P7pO`_EswdX>UT%3X<#jg56?Y)mCeh{z(X zR@?q21OW2(g0s;X{d&yLFKsAez8nb@oIW#GZB_(0I|#eH?Tg(F(OECk z)2&26>doNdeP_;`pP!p+QU!_NZEyQCDo~k&w^6*OJ)e+R>$iXAJ74qU6PV-@~3=iZ!X;0 zYX9kt^-9I;*dx2)i+~7`Y)~xm5++ddNh>dW^U(6@#Y7h{_W2tV)$9M^gI8W$ zS}&{zZ~Nr8e&aWOW2@Z>!ob<^wHtZNa=KEf1d2dpwo&`w?|k4(KKHZV^`0+$;~PKu z{DpJt>)XHeJHP$DpZbp*>#G!26X6BeQ=*|7D3#sulzj712}3WNZAuUb6pFBpcOYG(c`zwYb5vCh z-R^xC&wj?|ypuWSu}iIh5sM{sB8XHJz2`4{(I0%^caYGUga<$(&GMnEYhUu#OXS>I zcG8PjqIq&h)+hW4rm;@RC(nh5uuN4e3-$2EddFjn1_N2gp;AZz8zbvrj^UHU7CI!s zc$p-A7v`FfhyXAmN~infZ@u&be{$ucD;uWmPe^x`tGZ~jR{%g11v-wu=exiAKmEV| z`LBQLU;W(Aedi;OK5lm@Iv5IQb8GX37hd{_pZbX(`;i}CSz9(k12f}=;Qinu%p;`aipZUgb`HaV>PB&q@3tA^S7a+Xv{K6+cG=1gO z#b15q=6`%)@nfrPs)j^F!kTqvwdo;Q2#ZK3(nu&MVyy|AWoe=T0+fW=aeR*{0-yKs zj=Cm90$S_xkN?ptg_WQ=J@uX6^$&wU34k%{LTIHuZdZ`h>h)TqZmg-yHtU;fYd`+O zKlUT=V?wGOF$Q&As%;vx9yk4c$U6mqq;S&f38#Sy7S7Fn z?H7IerHAg*oG@~bT8Q>`?Rl~#66P=a%CG*(fA{aMyz)xDQFA1aB-CC}BohuWD|*2s zjzEO%uKwb$`pfrSJRfzt?g7bE6|^cD0ssU-K*VkofBM_suA0+&Ya`7&W&rrDXKu7M zAESVba?n=REVtqag$%Qhg-KaP5@&dpW<8v%DKP$yP&5KUD6`E9A||Qo$*&v-BqU;4z~{I+ikRrus< zo_yP(@T<+;g378xeybWUYk@XwiM0ua0@% zjtRzmiBJ~e0PH$*#=Ow?j`8nWj}wkQtKGZg;n*nwbfU1Me&N`6A|*u_QxjzEkj$t$yPyyKGKM;Y>8Hiim zBcPz;hyWnfRwQx@VQJPI@B717o>|@mEI29r8^8XqKJl8zqA0FbE5>v$I)lK5c+#3@ zre_w;oW1e#tBs0?=z1lbYScBe7HG$;k=os;6SHP#Vi*BYHLAgU6{}>di~~TA$q+;U z&>~6&3#ZQ{myMMeK*x6>DnhOKi~sz4e)*?=^3|p7H@)ssFil|2A(Bkx?o-PL*8j|^ z7G1Uvc*~-)!+8$)aFb7gX6bUPF;XthLOBYaT)q2p&a5^PtVT(-S7S< zfAuTgn^cQTv=CE4O+IXN=Bzl}o!*nqh_Xhu z_ZzoX4LLPDG6##n@5u|h*@Tj{m4}5zBvb(aMsfU+KmF)O{`4b1^dos62ni6vpu$?S z)=5LdUaw2+GX{*9$1KbDJ~JtC%rMSXVxs4<R!Eib?F%7;Jtp+EVfKUrQ|0ke3> zcrccIXED-6H`;ZnD3Gss^8CN~nzuLSE3ml)LdNuS>RbyT1ZZE86XNOnroQ3))1Ut6 z>A&;eKJ;t1TAWfiMR59oUJm%rjG{$j+j3Ibck${61vOa(yFtk+)i+SmT^2R^6(1O2o>eY%4*fDALhG4_y4( zFMQ|1)!(h0p61R*%5-FlEt{*oBA{W**a6d%;u3Vb^6W1X5r{Wxuly!l`y)MjQ7$}z zXCGImE@HJI7>EE1V8S}2)Skpz|GCfqf^Yh(-~2=W?%z&N)uLp>mZK{MwjW~@9MPz9 zKmvlO8_mu&zx^No^E2npwYyzso!rrJM(-yA!X~SUNCg21>&?~Z)jyiL`N#j_UH9YL zzer8jRJ95U05xcgb(cg~3n_FKpU`XKrqG-a$Z|oMxTA}%Ux96L5eCBb9ZdQVx%<$< z^rh2v;TS3PSG)}Ks5Gk%N{+8(mfy2ZSt$fk=lEa9roV`GMs+(GRRc2}tWTwrwF(7pkCzKjjVu#uD~QDU-D*u%2u+2+g_eeoB6 z!;Ze8=n6hptN88R-C`;)Sy%mMlxrTMWJ9 zeNI3!FgP@NCqxAZ(U#nKUhcgp!GGt|56Xon>B185X9?h_q%@>f8R0 z@3?*C#sBilzgllLG#Y~}hGRkj@wukrcp(CSB8t1+3gNeZ_dox%Kl>T&PTSs0=`B;k z7yyv~fk=e6xAf{Qy#7bk8y{Q&n?!7@yc?2-g;DNTsVRWf#!*t1%c z>dWSRGH^t}>yQ#g5`oAfV`1p1sBZ%JY*D zw7{d6FTdlnKa;f%RA5ek3X~$HJnKJzfQqmi#c%zzKXdD`A+>NG`2ti5ij2 zWYPX7>1D?Xxan z1FAL+WLPs15hSHGSDW*H|KI-W>bL!^pZ~>QQPm0(il^L44G5(XN=OSaB%VU(w%W6E zQ{VBu|N0BR?7f|CBmltds)k7+2_jJdaV%S_dg-RV_afc;M0NE#>J9|~1_}+k!wiI& zmNy}av#~7BP`K5dNlM}+Md{c}8|O^r_43+F72Kh$V^;Vtw`TF<$Pj7BCtI+KLB4{TWNES~STfm-AMkt^)Q2i|z z<`5~dXq$>KApdAPVh~RET9`#_qK0tBmeM76!k3tMIVq5Fp@{Bnv_E)b6~L-4{0ZG> zeb(oknxA8>RfQC(Kn02vAz{L2fn`m)-RPnFA9&{%e)0Q$=!ef#L(OSM2>?1(iGbq* zoa#rsUnzy<)F6n!I&Rj(&;Gp6ceGZj3^A*5MTl`%U-<}p;#b1kuL5gPMg)Zbqp8cB zR?0?2005bRf{?;c040t%jxyWH@&!69@SK)9nHR0ip_sPy|pwG)uPwn@h6%3f=xV-MymLmmrEzAt;5a z0;wJGB=;oE#nh&gF+ydFOZEH1cO{FA%^M4%D|Z+Y9NB4L1mIr57X zkuuUBvMLxy)PM*J{Kc>TrvLWyKighk4}*XqIiU<3!2_xPuAnozpB@lEtJ8k_r+>!N zZ~P=3$4R{s1R_$1(AkV{d;(wk?{eegs98{Xq|Yd;a4*-~Qve7+s?nfo4M~}cy4}(3 zP2hNF?Zn()PhjF!&yp)m?FR`u<*(~T)GV}d=OO?>J6w*OMOmiGf->lpiZ-A zzV=(c>1|J6{>dNx=?}ep{p!8-E^BStk(ljy4#sBzW~o=`i6UqHOE>yE$OWC`XX)K!L?gz?FMYzh0YelASwVNtcHn|=$u_6$W(DtzLp71>!Ce7 z%QACl%`i)@^f6meGFMzMMCwelI;<$nv%oAB!pF}vk&IO(6ikl~OJcLU+@mM+DG-x;xg(j}j$Hlo$tyV}B}PHYgOfDa%kC zz7i(!Cg&G(y;fBSQQoorYDF{%0I=Eaik3vrBk3wOyKHvMhDWqy7urTpqk`vduSU#7 z>8VIWs98>*KKsz6%dEK)1Vk!OiqISaj!w#xZYm?fPN)0Yr=I*v-|*MI@1K0n=}IVC z5HVGDVJ2mcAoOjk__y2_kqW7=`G&tfH8mB-5fT9r0gBeLdMCQ^A$s+9@y-=sMx{Vd zB(~}%NxaMXIuHUNC`hW_RE>r(xXo#(>U9jmcwYXx5M6fw}!r`KyUpVq>sL zAt(iaA{w^WWor%K1^|NqNz9_#nx2?j_=jKm=9@PzJ$G~Y?pkYctF_+hYT6t`n; zYmT%;f{56xRvtb(_qI1b{?CuQVmm{Ju8w(S^b$IxLohx*wNzLO36sfnCNjiOmnr$z#bzh2NdRJHN3RY z1YkhxCnVL585P}G+x;yTZgo8)_ws;sQEI~g? zzBuuOmsE+vL#Y5NQKCeNU1MjXH5r}*@t^(kAAI+_|D3V!<8GqwqvWnaW=Fx__~vi^ zp&$IeZr;90*2rj{H5xZ0EQ^3tLi}r={Zyr)WJ3TInsdKAt0H0r4hb?FeR;<>5n zbVaqg*2YcmiAV`Yvf1sj)@EUv(fl|=0{aQ#DY>*Khw0w_o!kV!KM9(V18#1EDZjUT(km>fLrEge1cLa>lTbp$e|wS*wJ>;}4&) zM%=w93V;xS#7|$Gxis5&adpdWx!m`z?8rLCKGnSUa=An=(Tjq5+pj7QtUYDbD#YP5 zx_<1>QDNLF!}!ixk3DF(lU-I998j)DRp7(I9k+&2qC|;f1+y;x^7nq#w|w*0SviPB z-_A*TJ0_9Y+1aoDhOZY8v{sX4%$E=@6$rvlpPT)hr|yGp$JkZ@GHX?1kq6xg(Q4Is4ARzM;B*!LYc_&NS5ystkdV22ff8W2peEITb zI|>6TSOTZZf8PT%nPW^%6DdTswz>Tm{-?k25B~o51gK@{YW(8wwSV*fihk+4;r%~^ z&whY5w@_7qLJ@mbd6s9fRF(BPpPQJ*L6QTBhOkR#n27p?iGL=39NplndgzulJPt_`{4QWM|u@pj5-LAZN?OvYs99PK3u}DX^DVpkF_C`|NmR!vte|$H5Xu zghOsqJ8H`Z8aL_r92&B-suJUeQ3#;@$5D09<*-nqM2Y>w4&^_H0Px@g_kHg_{l}!p zlZ5PGj6}2eLwwH{eSWjnAVRYCRt^EXAIt6X6#)Q0_sNURxrS&4Qb3OSQO1#_fs!@8 zTQqw*6#%3DV6A7StB;*(g6JIoC0@WLkGCQnF=sgzX*s(K;$?Ur67b( zM{7bPBqBwM!a#)qg#lhTe~toB2n0X~?hLQ=fTlDE6sw~lY_&U&z2>R!{h=SdaN+#M zb|(l@n#9o@Nj8FI#Z1H$DMCfaF?Ty%6~*87WncJ@|JT1#z4=G&_y17){r@ul?H`2~ zexJ6MC?pIBkWn;9q8ULiGB#r+A**}_LlT9MSM3d}r&Q2rh~*+tEN|nuF+u>qT20j( zhSbT;M0;zM$JTfRprODpbt8Vh@c$J8-I1Pp)`3JEJ8d(FIe;I{Q z1QCdhs7WJgvn$H6god^hzsSsYpF_)VGF~oZo`m#y?~{su(v5$~W-P~6<}(yC;fdW5 zCbbZ0umUK#iSp#BsUQqRTqw5t5mxHTt(DdF79k37rU=t)M*t+iSi_B5tG-cf8({%L zMqs7%J1;HJK`j+_;cc!kM#rvKS^Kz1JK-y?V>8X)uW~##8FHL3pm2{z`^D_PCA&S2 z*e?R;7!+#ROO_~6;vj(p0AKx;fBF6g@3Y&HMn;bR0Dy-tJ$&iXL$TJ*T5YdrWGsLl zHzOi}QlI&ni>Lwt1R`*&aqkN_(>wykcuJxxNcM#Zf&jBns6O@nc}D;xG=RqkxTiaj zW_Kuc;smX@2i!s2F2ZKjjbM(5Qiw$6L#Rkqf|x4H?TAI9IF7ZBHAk^-cXg~`GXha0 z$Uq24o*Kq3^HTwcq`@NK)>ivXpYpbU^HV?jpZP0qfAYuw<`;hJ=RcR09X+rFmQyR(Pn8vM1akG zqv-L4B)Ks$L$aj$9}%RmhLvjKVQ!vh9Wtm!6Du`N9gI+2JvmTL&4Sq?_Z|>T3<4D| zr^QlV2-f@-Vd|kJS*#Cc$CkASjflWmO2>;HMm|f>y7r7!VbVab z;DPix&!Du8AOHx2iYOIt6(MPD08cGU*#b46*s$ycEha~A;-Q4pX~Koo?iL;bCv{nT?y9W#V#tr?hO zUhhV4UFd`xi>lH9Xow0#DFI<8da!(g8ADSx3j~D_w_BapzVS^z@hiXbL;v*u{F$Hn z(e?H9uv%4N;Pf}5MYINH0pVsC+&5i&?A-K|=V#ya@VTciElkZfKx=*Hx*`D#K$KBR zIXVL+5sIV?fQwA79%h)J?3IiwK^0KFVb3c!$ug#Zy(F4~5G2){5*>+-5c1>kXrpsl zumkSo51cA?>#{^J`Q?Zkvt!Rz9e~6flS_@H42#cnWCJl#*tOR zfkdD}s0hI`xtyQRAs_&=gaJK%c1k2Yq7Q68Cf9B(cOnQWIkyW}gxzdTEDAG_1&6?C6r){Ji0N^YaJNIVq5~x50VW=u0DuqgkSQ;t_)z^IP zQ>a1^0U{6(iH$`j?%t06;3v2?8=bnSPhFBz4`6eFYEz(;HK7Y4z+h96&?E?mMA+^` z)3c}l&OiO$_k8tN{=$#{@UQ&RuPolV7X%8G3WK0oubgUDA2~Dq)P?CM??3hMnc11y znhF()=1x~{YyyH91JZ6=9D+IE95R(w5?02^fp(%t^OQHJsx=G(XL{Mo!IXe-;R=8X zRbyIjtfUNvz)ptc5nc9o;|H7l;ROK+dDzzrpTR4R=l~i+l3KQF49E!aNjV{HILFi>|FHSSVv(S`itWLAuq7b@$Orm;d%Z_(y-~ zi$DFP_y4Ni-fYy=bQsJxgXv~isVh_hu{o=}6L%yP_DG^vaodqxYV zi18a$K()F!F3EbED^hp-IU)!kRqNboOLxnjuZD&Q!-8dh!8pCEp}XjzUWzdNCV7|1 zU*9D{&yVCdx#YRtWML{OD#8xRB1uAVTCxspZ4js^ss*$WF<5dYFH^ErTJ+_ane#I> z)^RH8A!l0)7g%PA_PR;#5eSPPEzOSnVC;CwjQb#`oU;uJt7N|Y$EH|$QhBLHym;sbyH zENFKv^^TDPmvZ3U6zFuj0M_Kl`19I^3b=H78cB%&8IvEGnJhz~mandU^p9WO-j0GG zK!7;XTidOB%iHH~*PnRed}S&W1^^Tk^8{Au?T?)Q@ejXRsJK8Y8N#*g&Q`mFN-@&zO0RSik zDiBqbpeoe{1Puu*fC@;EnFTbnFcWV}tF^V&7TrBn4bEPwfmDD+m_@We#M>P?%vy8TiGTg0ZyKF)h#7<^2tMtHE(Qp z=T0|We%eOl1ZeQs=_x|gAiI=CmN@A+X0>Kew{Xmox^wIc$+GXcSW-VFCJ6%wpt35L zC{dz>k6q3ftN~eoR@5%?v#_&G-tHH9h^S+I{pvO268CC2KZCwdM5jH#zA%NhG+gqDkS6~0S`pa2LF<91gACv219tss$E zqOqeHNXsC@U0|Q8*Ps3IC<74&Qp#EX>7_#YcmV)_m5Qo0_4c|GUJcu_ zReW*(rYJe#PoA>Lus?m9q|d@4fMk8`^AHS4e$f*>0;OW+GgC87T|@z_gsK_ZBe>j6 z%y}jPitx`qx^&yOsrHUfxs>ROQBDCX3$jFs5+!yI z0Ws_RXP$XZ9PFLMN#^H3-$Vf5 zfm`Ma0@&k}QVt4}_@?DpT-W-PuUpOA5;6V;6$~qo&8PH>pU>Vc1QbDPPJ;>)8m+g) zMnI7xDf;w#IJfuBKWPix>2S%RTb`p{V5a%z)0=$!3_&kE^q)&T^*)J*>2dLWv%^w2 zX_N$541uVH0ij}z@8p>~7ZkGQxq9`udQqmlC8#RrX;qsdUD45 z(r!nt?Pn4pf`D|oSwrE{0MM>b&e9F~wvG}ddQeuC5+@c2`*#fdF+kZD>=nJQfU(c5 z5+x=O`>-;3=DBBLt%-6S?|{uX`Bkh~@d^CmFaOHQ+A={QSj* zX^6Yl_KhP|009Hyu3o&eCgLpDm}H6Fa0Mb2QmgCTXFh%{jsXB!K!H{|p02_>A3BA= z{X$2?SaT;9RQ7~-8z`A0kpu};B?y~!ss`S276nm!<^;jhQV1Xb0VMntN%I$q(q0GioMn60R&e{kL5y5*cSh4Z?0g^_bl1f z4+ET--B1bDkb_<9#M&xSHcj9MxF^OM$X6pV^Q#y*0sxP4K++K@x z!q??8*gHxOyeg1J2HV}3nO(}f_#uGER6VGNK_&s?g)xoR7)R`=P-e(Uz`l@u<5N|R z6Y)JXSH~yYj|p~{p}Ql1%EBv=f&V5mH^D96$do7n0L((DUVP#C7hik{5t#GKr_sGa z#CEIozW?xJ0>+=iWPf%I1c3YIry5gr&}=m-i5LO^6t&yk&9!X;@K@*nfMPTPh``k# zyme>&rRQ&eQeaMp7eL@YbNO_jND3$*E6s_!@y1pM>=rN=B}5`rC_xwm^%_=!^yqhw zn@VW`E5Pt|HMvis(2#^9O0PSqPD&CbS{?yRzxzd*5>V(BwDmUKLX$21UI|RTb`02B zRftS4E+U`;s?{?@Pm)$&?2_exT!rCoM)7%09BxL6GRtJsm2w*Kh69!6E zf}mNaF!0!(p4m(RXOLaqrWdn5Bpb8bey8N)b6_b=Bsofr8$P zpW$r0O9DWZ8U&$HOZ9AW@+cw9(nIbi0-y?1V>LQ!8W{CcaY!Q7klyy-90g`~mH+^%;Lg%! zr>!ZKbQQ$WaaILUMZ_rPSaWfx!qt!#rW-CdN|Y#3&YcHi^ug~Cu3f6wT=PchyUFVwOU;ulspGC6apfI_{=jO`$ymT z9ReWMWX8BRFLAH+wJ;DQD_%4tko&jW>gtHSM|w7y2ne7;5DcDs{$_WpiwGbL94}0V zpZ?$}6rJ`r{b%2vPYQcjw+qV5Nv}YSv;#Vd-7Dhk=eonIkifb{Yev(l35~1^(j!*{Bd}a z`ZVB9Bf2ZNKD>ajzq04gyYgU8ZQM%r>TE^)$v0Gc%+J^S3p{{6rIzX`Et z7Z~)H0N6DyA}-#$`xn0Sz1!^$q1rixv|rdmgSO{?xixaa4iH4$NJJ3RL!k3#N;}m; zMFndcohw%sK?r~aKq>f~%L{>`B2K`bptaVDT)0M(002Nih+&u!Xk-$KQgCsATw`x1 zSQmJku~RdMf9QMLgY@{=Z!4JOFC_kp2nGRGYvQCGc@2xN2}+`vZmjY))de9nradFt zJt2ajf5bO--Opi9?0Z#GF7*I_Qjn>c3`~AFmj$#?z6M}XohZU?SMPqsDE2dTkrH$! z^$38d6ivA;V9p#tp6nO#ZW{_WrK+rRmnN)fXayx3*az>Wz4ZeF|cC13I-&p!7YAxV+Jn=x-{ zMs(vAstDk01|tDr9Bc77Eu*C=&;bE}NT4cLZ>(&twGdHaVbO28ICplcDl7n)7mWx2 z!17jCm@~%}8S2O$4dy&IKycPzvMBi7kG9LB*U<=%IVX9Fr^lzAY@F%I)j<)Fo^Ke| zAP7`)} zG5qE6L0~VrVqqw5@g+)}OpM6um)HgN*va^BT}GV%>~|dYf?Y&-@6^x!`cops?rPG+ zD1gdI!QrF$4POz4Zcr$jdx?{ZY_kwS#LdmMKmQlL?1R7edqiZmMQCAWcISB+iX(+- zKEL)Gzy9f;^*O)udmlh&Po{r}V+wa#J*GRYFeO^VNumEwM%* z6wMEwYP|jadEht^w@Bs*S=sK2*dxB&G9N)H$3_)J*#9xgq8t0($tfpxgZzZk->tSI zNSdt!9xc|~2q03up2j94?eYGF9zLj-Cj!7qmFi7MML?1%xFU^PddeCm;+7)nXV9>e zCHitV(RWZ__}Ozd4A%FoBx;Wn;DTq9V8E+qnB+-P&KwY6P@v~Twh|>yI&wdhr+@1I z0THE$5D|e{L^CrRDg@nm&r`DA$-iFw(%Wo+yk}F`-0tF50_TmX#~HFO$B_Yd6yEcCTK&{_#&d^9#TD^S}DbzjE{DO++L_DX<(=80bOIQFha^H@mSG zP=?k@7knrHh)Am6xkLa-pYOVUK~#wCSigE>X>P6o2oUKv-#;_esBCn!dnB>mA|`ZZ zR%A|&H$I^#1(aM!!^#AmF%aAz>A^}vj5F;=ub8apcLB)?Mg|PO2q-A2^g{$xr3zsP z!X9~n`R9_0!z-guwTeMSx@}BOv+tWM7js`umF#9Ja+yIvGs*ue}NjV?@03iTksVQ4Di2}z}1w@d~cwn|s3w5`HqyP|=+HP$|F$YL~aTbR@ zFj@#en6jjp2|ma9jv>mqOo1kfRjd%d&70o2ca zp&ZW#qs*KVCl&iu_tQQmzdRKoL>B(F|N8!4|F6Gs-vjqQ`P!#1U3#cesYG$SvA*`| ztFOHD+>47#i_DCOfl|!E!Xq&eV+a8NSlw>LT^*1D(CKyF0w%vG8$Q>hB>&tS_dRxw(ir1 z+&3ypSmI4jIf4qX*3g|6_3BrKCc>7Ecu({eL2-i9o37xzJLV_$$(DhYVt4~BoP{R^ zKfFxS>M?i{<25I1ehUOd>MB#=-L@vUq4{>R4mja*Mo6A>BO z$E*J0h~Ppa(L2Lr_KiEn2}x#&9Cq<)=kRColeMneX>2F7>Fr%FQQ{b4Ob^{W^!{Ul zI;@F7nWrTt6NglDSp)%*P(-d@yLSEBwVVS)R7xpQA``Q6ilsFTb*_{t~INo zwWq4F@1|53fZg9_NguKPSpTwXbOZo}*wu3L?#7w9CJIi~)Mr0*>cclzleb;g>NElX zbfTC=KoN+B^dx!`q$C~%sgUHK!Zdnca5szCTs9@l0=jV197-MKD32VQG%Ub^#0-+$ z_&<;o)#@$|Iqgr@)66dcAkVXeIWomV)M)CBWk+mfv!sB=5j5vU*|hAi!R9G9-*=x` z!pz@1`n1GeI;`-56yEUJtP!ZaVVyzZPhxyoLJkOmQ5oeY zDJ6~p#>)t_xXWTc9P-3PK$sZ>2uYDrq?A%h1xf`r^UE#Nj`c@^nQR;Achlj4%KZ!Ac#&stAL4hLmzKb!UKCD^6sNsdAZD zRDOMu?B#eSLvw9ka({~wGXTTNsvkUySOZ-R4%}H(vMtGcvDUGstIBP~5)=Vpa~Flb z;PS$BJ(M^`02DzH(ed2ORI^@5jx2;xd&z{uwJ{Znp9~;iJJKty7!?6zB_s$SP^pIK&Z~wD2jnBe011FXYImc1 zYg?!kYyIYnvyY#d29B)&C|Ob>-Cfva>Z2>@L zp027;5jfM?u6%i_7JR{L&Z22MmYxyOI;h~eg&7f@joXl@_e4g5fJoWXs#AElu|TcSP7NaYxv(iw+D)YEbpFr)f19A zk*n{z!ErNGtpSpgsf-wI^4)qO2!M%^8LJafwdPRW3!3s|sW%(zD_bke>#ANgJVHWq z>_7*U^*MExRjw2}AF-$~_XG2H`qpKV_%MZ$y%i%eC6s>0-oVVZ=aw_ccg?S)y1 zw3T~_2#bh_j?bT&3&Vg@YHX)K0jX6(3MeI|Fq6A15bOP6fJ}({=T(UkB?e$XTN^M* zC~>sN4b3^WZUCKE;+SCK37}n|P%BxYM2Qjy2_u0h;CP${W)er%T$~5?sfZ%5y4?ju zM#qu*fdC?5H4H0(uwcG-P6R4Wijrl62xxt))9!Rt5CBJC_{6zDDSKR6LOUR8tvg+T z#GHwp&o~88KlEV$iZ7xSPwc!j(@6F6dr-I;>}X^&YzGfJxXffBQMH8?VPEK~bE2`JMGXW$bfSP%>8qQXgWCTzU5WV-QbM*j)-9v5%nP}Z; zR8OCp)~qethC`E-kBI;@>lGvf$*RC?5|II7v&(FMW@ZO5zdMLtdY2tViGe6{X`C^k zvz-aWV0tdc{*;(h?4t1eiSO=fz_F+`$089WN|e|=4o&A#L;)Qu6z|>=k!yF>fh+}J zi2xBq6wRs>q%h_($g+{Q@vY~n^ot~AXi9|znw4-qG%_v% zL;zwPJ-jgcd5@owZe$*`2A4!o7?=^_OBYU80%RG?(WDG$jXF^Jk6d3&}7{u}e zOtPTvja5IoDD_UgX!xB$NkVh7o6@n=8tZ;L%=>hPjsfpOo56c`Qu0Hid$yr)t5YvsDsJNB|_vGYbFKTQ8lR zt{@u?lpqKKgH>dS#L@J0c=6nvu+Am|{TMjH$%~V%J)#s&)hmAaq8~$2iyN)guHL`F z=s?$Ldl@u`x84#ZjuDO@W3rDaI#8Z^?{oWdbuby&T_Fu8fF`Bw9xgH4FSn04w}w`N zvNe~;qO1-HCZ(&JNVpT6;FUXT-0lDoV6s@WIus{<1%a^R1T5(zi|Z|WDwscDm}B5~T>gC@uq$^@NmAI%MreD9V4~+y%>FF)9*Z2L zX0b&82|E!lF0Ry@b-NKPky)i2kb8m@klVgzXcd1SAAra540`_{`HSvhrF_U&f9R;`CRihwA~s%2w`Xvs1^ra2C%APL#azP2byg%by1>TIAV zXdFnT7MwagckA}z{QS(h3o{%=h?&<~{Zu%;*9Q!p=++IGaaUA1GE`fUr;Z)$A6k!( zefFeD_M3RWjCt*BxdYft#fbIiJihSH=*gE?JB@%ZElhpdrBhRJgopr?p{T@GI}jAj zwMKAmVfxiuYnHmf#F(>}{A^^bF94NFSg8iikzZHPwEe~HsLPBPO6v3HC1h*%yCG905jK%OQa58v#^u3MEQR6w02x z#Gyhn1Hf}P?yW6v*3O@jxQ&#WZZYQ#P0chBjE)Dy*amV8N`a4VJ}Ch9I4}lbEr3CQ zU;gw%zxe7sz>EUq-pV#;&KmtO!jl036kQ$#K3jm^#MdK*atXs?zRN7O(F!v91y;-l z6~*6aR453Rmp5A5tq1NqtE0$rO#_}aY=B{Kax8{GcE3`e>~tK2_pZhjFM{~?W%^Ai z68#d22&h2K%{K2YuD|liow=DtwXTHOd0LR_KEDRRF;2aeA@@^kA@!}V{zIdZh<$Q0 zPcig3vOBkW9~J;D9H4yRW2X=#KoB9}SV`z=TCUU!R4OYB}$YianKO3hK85cTldym7=)HhaJFL* z37Ds6n?a~jv%|T4E(PAYKO(hI0f<@ui|&5bqvsx5OqbCtPgN!R^>)tn&?a~}anV*qqh zJHv1IQw+&o@A10VH>b?WkHQ(wrJod|g+$jX9#@aJHICSyCCiye8o zCIV$HjR|s%@i6s1{d(!Wqg+3gIARQ~f1^}T8pYkh%h1P981pn)5qM1OcY&6=8E?5sQvz zXDi?EhKGP-M{5WGtZj89@)SVk^#xInmtIJ@utrEPdLKv|RYBvztlA=36z8t@d3-lx zuj6!tg7D^@)lMfmGe5T&B5NuQZ!AM7p=QzPi#vrHqDbKpu&cFpZX3gQJ4pmw{gT4!z^nGSM0m zR>s-j_&fjo7UWnS0TdxbvxRc!=X)C=x+WlY`PtOMASI-=~(GxEbrEqS#4n008uzrjd14FlxFU~3iZEQu0XR?LN(W@0BZyR)!HY}38tM8&1l2VK~{#9M2CB;cLqZvLc4fcfKQhWF`Zg6!#R2uLK`Es46> z-Fg1AebR)0MAI`(A`yn`*H<`Z%$eX$9`d9&Bhf8G$~&k18Iixqr^ZoogTv~5U{JK& z1Wr6UM<8QYDLshI?6pkExT5%2KM|REX1X>zRWtkb(D>xp_4YimzZjujtISMSh1rpX zer6%6V0FFw?CrG?5;qERgw)ugKV?>;#1WvNs~zb0B%_e@*~QxMAg0_Wyl6^fFrYRJ zKLuJlOB--|g!a)pHup*jkHc!Y>?%r>C~@!*1SA9y`S6RkZTCr*2(r|G zW(eVG^Z=nhW5GZ>9e8G|MNzlpOpG;)XWIF{QI$Bxm;m#!YJLQ`! z9U%Y!tZTIjfFRN8%J$lN+j^TDvU`|~;pLbH*PEw)rb)*6Fpkcdy|T|2I3G|AN1Jyb z^xFSHV+cKGeq4Ne<&w>;f_K{@Af({Tsc8|bq)W=RCkif&A~TJe3KeKh+A=~~k&)=$ zM*Hr@78LMyCj_HU#71ADmng9>@CT(GkwnM4G4E}Oc~Cgsd0t{?b!)KWe$w~x8DIw2 z<{`78kx80d2UmD6o!demg9kZh?xfsN!rcdy?Y_jGF+L6dkWsdtyvx} zfg)0BZF{@Z)v4IQ&;*#%-i*Kjjn+^yN|oa8eJ>@lAOLVWppok-_Wc0_q*QAwx^;Io zP}FFI&XJ)d#C$S4aU79?h!913@fNT~QXl}p$(i8@{%$Z#;EkCG;ITu9f{02XLVWKI zbhZJ>FNor_8qEr#iOZ;}uZ zWq!7S%31VE0~OOPNT8NG-N+aM+YKgS*c!TQo`_VGI3B>F&jE!3C$DZFp+4ZGW%WtH zL6qx|Enr6nDV$*ScRc)dp(C&7^LxNz4k(EbW}h9v9`*114)Zn6kbue#qlAaDIvg7u zc{iSivC#ad*B3YMtzj5)oSZ5Jc4gn~PMw~q)hn8F981rP%B-aUSVSQ#%+v+g2!en? zv;Z^29EAKY-~CCCFEpeZp{g#mI`_IUkTN`x3z-1jd1S?Tw#)gPOG57Pop@!B3hR+S zL9el%;;@UNMYk8%Ha5Ei5C$qI`mhv`^D`ahL=0ian;ZJ}b>J9O0H7TAlN%S)OX(XC z#|H_J$#WzEV14%{uP@Pn5xOTu=&}?6L~}Zi5nkVD=}2etq>r!*L5g!JKREYRyaC7v zX?pxg>w3mXrgroRV25>3tfDP>7{F0=CPPpJEwKvZ&UN=Gpu%uXhS#d$Ors_uiPi8- z`FmEOM5Gen{7l^th{-KW(jfo~2)(qp+3t3|sO}LHI*JXA_JpRZ#Q5MammVh>qh#{f z&Cp7WGxojd?!y+a1Hdj?#qdY=l5uWjAYk_i_(af1$h`T=Jh-0)+JA~TV4i!RZvaY6 z9Lh1N!~wx<=fcJHt>ipGe|ZP1jB>OlxL9%q~2$9h7~J1fdiDupPrwI1DkHC|gpL2Fm2-`kP_$Acqk&0-=)*zM|WS0m=q({BXqi{g99yP#p% zeK(4uKHS%p<7K2E6~)8-@Y?B-S^_|XGt>2+OwI;_fQSq--Kf@^6=BKTcR5LlMBpR0 zmqmc~?JT~@MUG4@u{)GmSBNrO4hKh-&t>@*W75~R2Ne0>V7%Q6c0F+#M9LJ+goY!T z?4h?(fy_i`bYG9W`sH6b_PbZ2M2X4A7&d4D079i>{o$8yf6|*TTaf~hXl=D2Q5PEZ z(--EiU0oCiF@3U7!2uw^!n4hKB}5QLK)bEX^v=wJq_;aypRNAFd*AXyAGvia;`!+Y zfCk`{FG2*RAirNGr-FdYmEDXeJ9wa1+>`5~la+V>V(z_zhyX;JTdlQ?Hj34%SRqY9 zHTCf%U9tn9h-|Lw?QNKz!Rc9SHbDgdR=py=mI~c}MAi>xh`PMF&Ks-TX#q0{f=G6c zTQ*(YlM#-PDi{a{V_>WD>jxGwYF>Tr z^*5bgp!a*EW?WD`#h~zQ6Q*@4eI8Be`IDZW5Ynj+^HifoL@o#$14Oee%=~A(^6zNagS(W@DVJ95Db@9mOkduXSRy#f@3!=o40eilb)zM(w2%x=} zOW%q4;2Hbi$yVQqWPeJf*AM>{=D60sa>zX4C`-S@!2tn;5E$V1UtRn$i4Ta*kr5*ypNB_n0t}_RU8en1CeO|`@Jxuk20D#NuTis5qh*(6kR1lpl z7nknDvGg4iOz!jgs%)%LwTiVm)f-T$iVCbzZ4*2T2umD;j-(qw)ZtEBx?RyRB%}ir zu|IwCJeM{kjJkShc}p`884o4OY%MJCE0dsz}ZOf*qmN(d(!7;e1D-+F^$#p zOcJ#8-A(3|t@-9jZ+eIybevRL(GftZp(4Uqo2{CdvP#A>v;YD!a5cm;r>4v?b6JMU zwKBx*R_FRg3xRgPd7TuLq)&+w6NgbI1!X^XWSF3Z?tu;f<3<4O9fPuKr!)0Fufg^q zJ_kC{8JNtzHGhJdM2Qk5CJ;s*0s!#gEB88U>y=6kVg?Z)1kI=v3rV-zI6X5xS6^T5 zgevgXo!Dv63A4G5f#7iK_W5MW)8S+-kHtEaYg5JV6ZB{qi=>L5ed z_vupigZ)9T^Tkw-;oa{M0rl&xhYl>rS~fPenMDN{MS82%X-rqyTG&Q_ta2sE_XhAcQK(ccL;%mkIAZOvK1zqC8=ee zUKR-5QS#aN*^}e*mmTlwg3zqb%{1!MH4u%~;DD_+X~C%A+UoYr)h)2qr9_Dm#|b5` zTjI#jZ%8i}ypXj4bmX~l7!ep826`VTs5;pHGj15LJQ(zfvBb$nSp`ZQ0`Tgc)mInS zFjUqcEi(`T5-KH{sTQ6+e@aB>B@VW`_13QlQ_WhvUa_|`%U(kO7z)BHSW&U)PGr`e znVm|c(k)QZv*RW8&`ZNU=7$UzM*4&^DEL96lGeHtMTkHsEO2jW%@cVH^fHrt$y^}> zBCGvihFC)sLAMLt2%;EbEi7V)21-th5$jj%M%9AZu!;x->+7DIN^&|@?iFcoADmgb z=c$;%LF6GK!Z91df=DecZftF|DF}?oUiVby-Gw!o#Y>qW2!W6}c1n6# zi{ygX)4Gf+V*GA-zn z6Z?PxFKh;0?kN*T?4Yv&G?K3wLdUttJ)Nk}LTd zE{(2Hioge6y{BD2uyd4imJWA?>1w*vJga6hzJmM=1xz~oNC0Z zGpWGr4**1{RsvLx6>)#v(mvr2><)QsGs}|>GQoH zLcKJ^=%tN71cXL#h203QTwByaK+0yI*$C#1iwKEUDxX2N44gA>v=%f+ex(T#K>s{; z6kAM|ba4-R8WjP1loSyvMPZ=AP*o~O!Pa{Bxli19_SvhQE`zfnEg*nAGhGj>${3v~ zRMU8I=+E@@Wyp(^QYo3}=d+(zLj**bcsZ$4QT&D#vsW>kaiu;!d5<6(8$bwY!?B#B zGm?dZX)+K&kha^A*>mUTva#fDHsC4Z`_9b=6+&i@<21F*G(ce$u5CvjyuMguDyc+? zy`!vGa0tt&J}76Hhl3#{J8pBqF~k_=&%Q)yuqWeV1E{yB*lF@{*WJw?GkOfGj>8y7 zt;Erz@Rk0qy($O$62p<4_4EFZUfEvXsw*X|jX_~V0Hpwlqb}8|7w$j3eD{iYC&h#R z*DO~>luD~{hM|!}(gN1N4GICU*4D0&Q=JR&FPs`mad>8(;Kcke+F0;#<-sG=OD0S*4p0JDPthMbX|l141!26 z-dy_7OLyP?`iJz^rhqlvi-e#EG>VQd-goBZ=Wch~93UnOLzgNy92lm+_}nMC{#qFU zP&2SIBb|&Yh(P2$k)e_@%s|5bjGDb^82z7c3vjcHMl7OvMrg48V`L>f0xD3|Y6Y=n z0~G;OSFbNdT0eCExoRT-ZA|t^=283AhV;|TdmIacDK`sIvr*Pt%Z%jD55|GVpT3SRxEsKrZIP_DOur|H+AsH7|BIl`cDLM zNs+Wfk~(MEto~In&jBT2?YJLy6=h&F5jfAg^)DXuPXY7YIz9*>;Yzf@# z$`u`;Gx}{Bctydb`xjJ&B;wuxT`~l!)sNm-UXL^>#hSq!3Rn(JB@P5*wZuF2IN@0> zeSRKgww$yEFpe|e5pZbH9v=mekE1EI-UZWy)*gdh(mxg>FF8t-m@tefGjaeJ$CL^H ziXc%G>;L|zH{Sk9mq8eSfCL0Y5Q9LvkwkIhRO9UV*()zEDGE|?NQQeE&`squE2*Rd zw6_Y=Ud#ihIabtOTbF0;jBX*K30ze`J>&nK&#@`VSD#Qmao+c#{F=mS=Qy#s$xI{ch z14lhcs#4FpA%u)Z4EnXdK9ZfDkPG9HKG0K7a{d|?kFu|!`!$tB0#xk8+%lvfAq(DJ z+=wD3rL2rDC1+6pH0%4$Pfwqn5*?+7>VZ2O%`#a{+%inf~aqRj^ zi~&yC5*UuCA)K^K9*iT%jeezm0vo`@;m}5}Q3xRaoz>yQ>c|G~QItp%gxnfvCl8u= za)}ZnVzMeru2D=@+C?zZ?V8{qi3WI<-CM6F%c;@Ey71lz~ zw;N;j7xW%!leN>FEb+xCfK+w?jRa;t(cu1a$CgTp=#i`gXZkpaWb!~x1hf;)NH3v~ zL;&T~>~vVUt79=+txRzc(pD>a`IWmjZ!FEuHm0U(jd~?e1Zc`d06-BEVWomW7@$JY zCJ=Gw*!z+i$wa`#$H_@htjQ@ z2nFH?&YwNC(6FRKzl?F_zoB<#Q&{wpsZ-e--Vfi{PN92&Y$g?#V;ZI03!DLEUQkmI z09bfnWw!1lu}5W@noRh95H?0gODpZgvKT6g8(2iPtDZk=cn%7T_+;PT?mK}00_1^di%~g++HK2hC*aV<{%;| z3`3fqt6w-bH#^%Pg~ImuE-P~~jEu{`emoYK5f%XzMy>e9osH`^mfP)^(7-uxYLO(_ zHo9WJ8BK~neDVD3Lzm77#{;`PEVwxmvE~(aK{d>gJHDfS4;BZO#sd4@D2{)guK^G) zc)+V?>0O0DR!f!eH0U)WvAh`p2(7GjuU=b>+0>2fW^n-kM9>dEcs^_f(v5v4Qj)rX z04Tr$)#~p)fA#uy8x7A_j#niP1Lf4{piyS;VWOPJ<}sl;vhUIM=e>m(KmZ+D9`;TV zj}ZAcu@k*a+kqTmRpH&L`u>SZnmP|{n+)_J$^q311ewvA`rnKz(7e9Q#E+# z(%I$3bzw$Gm#3+Y0BQ@s?OS)(PR%v%yLf70z7bRdVG+*qs+sqUmK`!1$c(`yB-9&EC^+We9JpAYdgcvdhPVE5VtU?tO%MN@glnQyurJREd zpJ;Y<4Pl`Qirv5BI-M4&s>~=xNCG-hFncKcU#c}P&k%f`1o}JA*%^0NKlCqB_<7J3qDNjew}w*%W2m+ za%j1c8?<|wn!}+T25$k&zuejL8^{4Tw5nK`$;Yx4><^A>A8|}E(TwHc;CQgRBVv5g zh#tFw0)iqU@QZ)+$~S!88_QLGx)6;ivuPX{NLK#CTAZ=`Q zS{+@l5p$yGu^~zlv{}m{h(O$lqIMKcBb(#4$r?976o;$#ZfvwPBPc`>7FI;IyzKen z>Aoae?2ap75oT`G!$&TiKYQOCN-QEM{mO2HlMRNnm4e&De%ly>03^nEq{o4KawOx& zg>F2lPRiS8E^?e!ZV_vFoiKSS@y&*XAV?&D>+78xch^@|w!v6oO4uK8J2wFYaJEr- zF?&ghZ zi6cW-bpxEQY z`{hc$R3wq7j70F*i}?Z3>RbxKN;xn_S9LwV5yWc{ed0U{F@%mH0|0Yo9&+}av%-hO zIZxvxE+Q;MAfVRQ+jo|?msd6;&C2e?bn!P$6#!WPNd@xALuZ33NX(v~$#8-$Zizyx zTKl;_ef3@^B2t5OPbEr}*e#A^?NT=9Ny0?0?>b3|YUMOdjoyUlTQ=G@Gg zb8|OutRN(3WhMQS0I2JW8)p`pVL&3uiXJo58mj<85$Qy_y}B`{8AJpGg^-XLNCiNO zqu3s94Lw~T=KiJ$DY!O#G!yHrxDLtyF+-M|>4UyLBZ!DbQqiN2U#wNDSFYUbv}05% z<)d8eJwKfA#^kxT1E``%09swXdT0IGo%L!psD`Rh4{Md6QVEqJ1kjp0-FRcOy}8}) zbTtDITI$E_`648RNMtz!LN6MUmZ1nUaJ3qqIdkUxnc3<2I*8_O*LN&w{Cm^ir&JPN z4~k13^7qr6D58Fnu$_A&g%J>s-xBZten`2N9#?%IbJ@U}p@=+6qU>szP?EtO`G*R& zTk+K!_m=6bH8x_<4_sWBUZ``_MI_^*rwux3nWBvi{Zk*gYIQ;- z0aT(yi4yySiKazH#7RhFf?+e0UHAlW)C5q1{QKImD%>%O%Hg3{n>Nu@afuQo#t^^w z;cMUWr7c30XmZRx9}GjPRCKGYD(dp(^Q+4nt+pnhWZ~^t9bDUrZrokFeBXj_Y*iIK zMx4#cQxF(nYi)yLMnqwA@;o3QD1tELR*N7obcfGE_~Ss&5%9YiB1Y*&dzH5%KG@@d z&v00I6EmR1_g`K(b*lNw%QqL7)*~%QlrT?;G^Tfa_HxJ41_7Y}F+ew#b~jqvj;%Ex z=iV@L3W-!e0K!^?0f3Mc88XO;wJ?!p*@9%l6DgQ#R?nWEJ$+`TK3xUY5=B{(WdQn? zQ7(!7Cs^*VEZ-4kr)H3wrlJ3Ik?#f6PCwRe2<4NxfB+(zAtyR2N*RJt0HtCt=LZt1 z?d@(i=896uG3`##Wvd7ZAfN_)_H^^U`{yL?+O}u)V%ZQ)^<%+m<5&Oq#xslSm>PF4 zrxhg*0TWuyCa8f-N<2$UDh_B#e$W+n?`?R1P-u5~LfM~3)pYZdkKH~#agalZe0jP? zi4rCD8?u+~%W@eai1@*m?!0p4E>)}601z9ghX@hX>Htc2x-+L64?J|1oLoShc!I@{ z3+l?P^`+Go2H^lPfd~kT2yU!xwzjqrL4*NVv<6@Rz)B^GA^@;kymEu8TlkK&QD_(j zKeSI>HhTYNymx2Mi*%#rO!(T@UwZx151&0d8&-)?Ytd}7*2*>#_g>uGACpsT&H@t# zW_Sm3!-Vm$wuU_+ym_A+}?D;mW<&1{bHMLXKne zG@{q_dCG=%CthFMnwo6_Xcr?95v2XCq-H;ClaqPY}TVK?7lM$N%m{?O9&SHM9^Auq5uNSW(GjwrC2jf z-X#|hf-u*s^z`Ew?%Y|weru`S?Glng1x{mxNGv=%6+ZUpd4nKlt)re)pTnp4)|J?dFOA zV53g$E_b7_R(bUCi(4OhdAqF@+8sj(_TVZ)T-(;qymae{hcC=bSD0gCuOwp#S3m%m zA?ot>#ukzh1tB5`3jnKXg;m&UwWcaFk_dhVWB=wOeb@Nj)loX!-Z4_#KbSiV%bM{K z5s)YX#Oayp^z2#PJ-xlv-rQ`hZ)~^P-L36*JJQ{l5f!340X(JYBsC)}000Ci==ddX zU5@~WKtM$1C^0mJoH_p-O{wx!qw>Io`EzHd!)gG)!m%SXjA}#>z#5I}E8^+N(1D7W zRPp0DjA7GFp969k>=&b>KQcU&qtNUwx*n=2gCt-3IYLRzNLyY?5KzaOnZ3N~n?-1J z;FggR^q4qAWD!Dr@%+rGxyIeawR?+e?WoH_s1zcK#Pc)N#~(Q#guudN*dNK}Gg?kc z1VC7XV}>96!1LQWPAEbgp4BBv>>ZOhU+rahM^D93HK|Pd&r-l8N({n)S0MxL?hc2* z{`3YnR>Rzw*Z}IqzU0zzVv7zFxfhtdYOG{BT6XItN|e|=M1+uj>xH`?{rHtPKm91T zw~>?+CjbaQKx(QXYn$AS=FUt#eEHmS&)#6O&IKzS5wnOzT5rXlcdlQB8a)aJwwyphN}D+wadOV_j1hZ zsS~5w#r}&qH4Oj&g+YKt012jMYSXig^Kwc=qORWBZZ9owEHAIGZMHQdp+a)TmK+i- zk2SBIP$KSsLLej~C=wB8@*ADz3jmP?!T|3-f9iqz7pjc_bj)!Ki67aq$dMoY*n^_s zssE7W`Rzy=LrnC{BT|>CKG+wqWJN;#xsAS59}aVqMAZA9@q-!IZt?F`tO=rPUV;FG zo_QlD$#ID$0TAJ8jUK#z;r!XTwe{_#)vb+I2LR8`Pv3vvd=P*z0}>=p_N38V7Z9pe zKk)qGufKXPVcF7Zav&JPS$Bz}!tq!U6!z!Xb7f30Zt*!0IDUNk_)|ZL&%IHVKHv8q z)_`zF324^@ko0szdoQ37bLNsvp}i z|H21ee)H>}5OId-l0~!#HtN`l_2w2rbpNH(t&P@|tBasQqi1p21wa%8-0tvmuiRPP zn7Z%m%+yrK%wWj~F@{S(Kx*9NFx6LuLwTpyUsj9F(J-0A(se5i^Y2)^t zm3zzUT@8qe5}Au(6A;00284*{pU4GPgN2mS(wvI$VK<1~ak6k)5v(Nw#jv~9u zOKkc2sYphj%o0D%mA;H!daXBGJztUxO8ALPCYpGm$Mo2TJg=nRxaH7nzmilEKP4s>WBbNzQm}8W-}v(5fB5RR ze98Km`MPwwZZRqX_MqutZc3t#bR(tU;m6OnTkYHTHj#pi@f1OGo)-h$Uffz;Yn?sS zy#K;XB_z!Pc9n_>011~?);im*#{9HsBZEKy5#gXwr)qtBt5vDi06DWL_QOhKA-mnY zl5z~0Ot9FB1K4Gbv=xLL{`>A$#L$E%L8*X7&!5c+i0gXS1NS>x%o>E&R1$m#}SyVWNw!i zWJaz`?92tpWWZ=8lFMw&eJ}7N@_tFb+SIqT<%uM- zu}*6Z?tHI8=Sjs2h{zoShS?m*aXQA82qQ?fP68-8Mq`gl!0on7T8g-b1OOP7fZ+7( zfB(>ppMP};5{pq@v<~>RisQGkD6tDn%DBJly6SPs_RC&;+h3F`hJ!$H&$grfZmddW ze|ze&O4>nVr&&kCofM<@{ZwzbyJmAnNy6wZOB^72XXGVHOccthyKCUCb5Fd#!W>X= zZE^cQz5k5`W<2we>H2BhuH?*H*WJ{sGK+MCYZ_b0<}a6Xrq z6!bRb@x(sX)p1T{iT%Q!YRfK%#tFfZB&{&e!;HzWu+saxCV(amV>|pG&eUY+x?=b6 zrjuiv$t6mZ7%#ZxG5`RB0OG&+wNKo-dIzf&yTK+=6Cf~aY}A6Oh6qc{_1Wrco_=U< zrmEvE*n^D3aRi0~5<;W^n~f%^0L1J`LPD&B#KIlsdrKSQj*dc16&6oS4jSwkW z`+AXe-+k^TReJ0>OA3GVxsrC}g&n#t_ei?uyz;_V()wv++M?zmZFPqG4;)IzsyMx<$qmjlK z0F)(fvbXYi>HRQdt5{ygbA*YtDQ9}!*?%_wHyS_j!IwUGd!0~80sB*;#GzqqC#!pp z)qo*k92(ttX8ZBP(Dy;(P$7D;k5%OGYg=K@ayZc#Fca(td!B9|>?qp%RhLE&bf>vG zww->75+#lhWw)?v?5x}GH$*XOLUm>FRW~VW%FpG5Ksrl;D zZ+v*+R3nZ%fB;~OnHW8SVp2?S;q>(72j)T8orVn}Qc+6BvDR?w?yAIWsUPzXq5y>T znyOT{w_54UDOub4V~EcIja-8=6S6*n-H`}--%-Ei^hkx1Ix3LZBn5`#_`vy77tb_=W3xy_x2~=PN+Afyz2%Ll-Ko^8!UCMGWvLQ|^?GM> zD~>s=P-?2jE}K2h$8bPy-D`wP$#^lG$G|*wGqB&3!mm5)Y>UMyLw)duW{;K=0ALZ2 zN`>ybZ~nsh`A$1(wY%G`ZoAX%w7YSvHCyUTDGG=xm7rP+ry8|pvr?^vfMT|lAp!#B zrvL>*@8HoGN67S{UV2`bQ_-`B+!vx)@#Fs-G`q1Pw2@!oC4PB6CcFy*Yoh?l>w2>B zv8_T8IoX#u5AvQCkw}R3 zqfPsMt;|Z47$XdARAX50hY~=^%;i91zW>xu@?~%FKB$foy@_-W4ylri=NMR`#8F@j zJLlsM*98dx2#Z4X(d*0q@Beu2Yv26_+3En1*Gmc_GRM@c2D3Bq@(QAoZd|FWC*Sbk z`Ezquuio2ib%Cf^uP)3s&n+}6Aqq24Dk?EFQlNs65CzuOx7JoS&NS=7v2|mt)F=uY z_14-(d%F`>n;;qh6468|NHSORghGgjfYv^=hzRQlz-UBJKp-*0Sq<>EmlP|iF2=ey2Q_Edsnl6@sg>=tDe-YIsRUA^iU?~VYXX869J z|AWtZ!^MZr%>!#IC2-41P$Zz~)C_gove_aEB+^K*aJF%3{=v8vfrzRoL;%*z42YPV zD28IbE2MfQfURyfj_)n5oPF>-#$H-PP^ns@wocS)cbZ%$yN<=eRl0wn-}1f?lK;}T z`lXBgBKBvbkcPx7Bj0q#f_q5hCOPxQ84pkZgvI6-0TCGXEul9I?PDmRluAo1JtK%D z#)Eok2iai;_oi{+!{$Dsun4dU17KsH8obl3yo8UC_gPhJ%B5kkv(e(2e+a$D1QA6* z$GQ(|V|bbLVJbK$EaNTa;?su+N~LdUTJ8S`0zvS7zxk0{?JkiL<`Gg?qQptVL9ZNh zWAD-85awDv18j*2!Tz>{gD(Eww=;tsk5zT-X9OC(KO+`Lp|cSayVnv&@6+$@@N0)f z-br4~?|%*<@cb3;Opg7E#$?f;B}yD`97M;mCqH}oUl9;yMx+-Ox8L`xf2t{P+yS7F zdBAStA`Z@;k}%Y93?LA*L@`1f)-b3c0t;&qL2{;SF@4(nX;!PC1wh@tz3lotaj^gZ zsWxg91W_mIwz_Cm%-)e${c}X5r$g`e*;#Jwx>xq)JG+FVX(U@}_KJ6cm^e$%Xz3m+ z^|61%*DKj)y~C$Ga>;uokzN_V{){r*44$8)5eC4uwe5|yZF7jdwS4W0Hmw9WVo?@^ zTT~MgR;g&J((6P1B7!R)5sA7H6deJdi-Z6Km@@(0JB`Ag%b59K+P1(d!V=FA0I;f_ zd1?85AG?l#AVM7 z@!@A~LRb|9R*H#?Rso4nDIkDa5S*Ro5KtI}K?GQU8JO+b9G!N7?7xVBWd6!by%Hi+ zl)AgPs=E;?mD1k`z^v-kuvQU~)^^*@zPg#*)!eT11i1j z(?Gqk^BJGQd6O5Mt1HHOl2GMG|M2CO)<|^dXMdIbd5K=2_wUKU*wO?itsqJa!hS8t z4^2|BBaB;o_I?cfzGU+5eHgK#lzq%7$d=_^T2PtaCk@A@#E(rv#ut6E*sjtEakUlw ztN-8cce`Cc5Mh4>iwKAW%rx5!=Vk;LKv39H3kZ%>5wiqN*Q$wvM0l=Nts*L-wYANS z9@rXZYUu#_+t+PH)po{gb3#KG3l}CMRD`8R(h@{Q5ilG^>RIhtdLhq*_^lJ z6mz9Q^Yb%N1UIfNt*&ef01^s_pxv&PvQ`;&Sy9Y~BVQ?sD4tP#u+XvAag6Ckuk3W% z@}ejJXwHC7?|9!Z**)nidU~UTkTf&jn}jwZ)!mFfaBU3$;LzzGhw)qslo%6WpYO*Q zH|Ogcp@YL{VH|i&#=ooUX@MiP$08Tw zpVkulh_bj#3`YS20^q;+VG%&}pFeW_XW#!3s8*5_*xgbS0RV{rLCsG?pzJAKc7dNr z9{K=5M5ZdiTrEVvc31A+Sq38Kf!Kfm8dD8G)Uj@Dw!r!A^D(`|Ou^T}--XfI?UOy| z6T!@{flUof73HtHh}feZU_*d zCGmRv?Rh+>1A+|igPG^NG9~JEqm?K=iqWA^=us{%#ui7&4;mcd1ZE$D?$;NN`Sfhe zqgUdvvG?v^+^WHVlrv*In)NJ>!^M*olf5#a9T&eiowRg7<#;pyO zC@~bnmXjs+0PM3eOCbOtG0Q*vxes5vb`OIPfbB@-KO+M6NGYG$=+9ZCKRHl%da5qW zi0a0TdlJQn1c^q0MYOIo8!8BdVSB61k#-ytX5!S|6+P6=SROh z9-WffwIfM4hh+oK347c(w8Wc0Z-M1Vio#IyiO(v2K%i#>TcIDu5)g`pfaLU~ zxv6j7-nx5xLu){V(xd)z3Eq2;k)3#CdAvbg5*lU`03hmiiw!M%WR2OINA?J?gf#UC zR^MNLH<@=i`vWnN3;ErrQj2TtyIXBA8GESkT1e(fi7`ZPVI2fc$e7-5^ueAlC5{b_ zVdu6-HIPxcj!C|ZNi=fUM*_%4zr^lyCLBzj=HE=7a13pM!%E?}=H#(VREgt?NqO~+ z03aen>gDCFANaXHVp2fK+0t%BDgcPUBAU$u1>Rtmt+D;O-RO0Cx?Vw{K;5~w(%ovI zQr3YH0x?syQmxkoKu5Z@-LW3!_$CLZR_Re$j5dcUb}@9pTtIm2BSt)OtDmFf#$z57Z~_ZEnOGkq&*l9KbVA zL{E5faQGzMxT(YTH{78N`FPg;y^VI<^ZaPLnThS>@~e$K zva^$noQPp!i?qZLlv1EV97dxTVMP4*zy0FxfB0pn)IcP^B}hObE#26y#04PF&EzBM zI3NK&)u=WCQivOy?e*nVRAe4NG^=Dm#QJnYi$=h$jTUPLyX-I8n^ed!4CyjWg!|Dv z#VV6xw>!MP110Q8PKzB0U^b^xfl1-x)9joLnFbwG$9 zT7rGtAB!52`4)uEgvQaLsIz#<5RbR(()Qu94QvVX_CuJ~2 zCB9;BK^M_~j)YAO|6u;1WE&kI0tyKH!PTYMhCfy~sgswnLjj$BxDn{-PbM3qRP0Gl zV~Kt^o_*Sm7MtVNvyW4J^8MSs7=a$}bEx~H!A^VnL*VC+DUKga)cZ=b1RT3k&fyr$ z3k@cwj6?ttw_^U6zxd%OVxYjr-3mGY5GB^ko>`tAz9%JUeH{=Y7&AciiU@RKxqELF z(AX710AoJ|1-LfVK&1d6>PDS**BzNXM2L}1Mq$g?r^bQ>-}<@8hCb+-VsA#{x_vGK zd-%8_^%Qz}fdH7CHD>8Cvn4AbF~mDgEP*4BinDpNtJ%~h=|vC>LOOr`R4pWtxDr;@ zR@>LFt+qBJdp_76%5q>lvbB1IFpw~gVjXK|0H`nhXPB!ndj^>Mi#@zf;sSfFB!83q zvg8i{04d$-{K56r;ZZ**3~gu=(;t@D5A+syVUKqBWBq=GIQkm7#IeNjn5Oo{;0}EZ z7a`*o9|v1ciV2|pl_xbmo5_>(;o|iJ{nO#3wePeX*m3)-eP2`F?V6 zY+e%X5&Mw*QJ4e~0l;7W$kqSx!RN8o0MS0B0|4BOMFT+3Nm<@%6*J$#tWgmqP`J>j zA~Oiyy}Kf2*^JhrGys6sVWSpSDlxNY+1h9c4`C0a=Swz0J&*V8AV*p5n}2)dNCj+7 zc9<);J_4K}n7%`1stvJekVK(l7###45CkFblN>LPmc((V#seS#ArcZ1DI$gDgXD)T z3HKvTDwCd9@5DheT3Vf#?zfFJumlyjaB;2@P}J?zt3lM^n>SWB);i|o_=6ni1Uzd> zgB^-M)Qu!&07xvO7gbm>1ZRZ^AW1bAaXbzPIXX2l%x(^W^Rzz#h=vtIQg`oe{qf?u zO~;sG3|9>&3WqkBjy`Z76PU4$*hJu@3A{M|D}E#DoHO@);}a%h+_#i9!Gr0Yr#2zwb9+kSIb*M=JpU6peP> zNK&YeaFI@oq2$hkFNk2FXlYQ<6bp~~Khj6((?cf=6rl`tWwSNAx2u1N?q0JRHNfiE&-GZ|Prp9-F5NyoK@b5F06_vEsW*P| zqc<0$7*QSFd|>o7e>r10D)cnMqr|bS2IDyuDa1rXa@;T}g}eVa!g1voWO`6|wNIYn zpqs}CI80_X>7~9m3?%`RH-*QbswAm6*=1g0PdFZJ;V@x(S!?*`nVT!!)y?X3MOe}` ztJOvb2xdu*WQFQqlAdl$=9{%DshDMTeS2+r{mjf1h*%Z}t;Ll3RCD#tqKHV$Tbr%9 zS}0IB2H4}kv!+gZ3qA8#5&P5cUjFw04$A9+`@2aTirEr3FkXGHXSuL+g5ZiEeM4t^ zQ6w~?9!t%{!dg0=xV_zJZFM{CxYLe0?Wo&{qDaSGjLA_C% znyyXFG@4V@Mzf--At@GNVFng4q=_p`FH>hL3p|r&eX%rt*F)E+jmyaT)rQG ztWg>wbHbIyah83KeuFTKYPn~YgFEr*B>R~fP1Ys7< zCL)%Yu#%u$^74FP@~^E&VtKN9Gn|{7URl{-gaCyFS5~*fN+qadeeg=x&&`BtlU=vI zg7+_Cn6+*?zUyZN`Kr$)8N+N*_VPF%dybQmy>2zx?|*S{))) zd@TKeW2`#cJ;JXoW3oy=2pr?29RiM7g)cE8%2sno81sxSoVN`|F#%Kp4szM;y@4$; z<`}Vz_Pr=i!fdZZ34p$h$I&{7ch@&>FKwQ_upq)_gBE}QGu5gRD2^D>s8~`nB?B9z z(O*a+3BRxOV;C)7=P(fOR5?5s{!#3+uJc+D0V|<8IvAYER8i32R4C^p|}U zrKj(Ty#MuH|BJYaVJL8w&m{CULH1s%4a$3fiNl0OlJu4$Bt$`B&>e1X$LnjY_0{e5 z<<{0_r`3w0F2^yO{2($UQ4mljQdYkMDfMIjMKS~(q?8coh?f`Rr912R!kSVzHCsJ< zzIp!x^JmUCE7KKW5v_&UDV8$aQdV}A;kX>VWs_@2pqaVG_I9V!=>Q-hb~@z)uo@k?ez-)5 z5~E`Dx6LI1bRZZ!j~G@kB{y`!F)4#|iAl#^7CeX3M+srjiu7~WmY;sp!_X2y0x?^^ z7^{J**SNc>KxHG=*GvyMQV9T%;M{CIxVfyAx^;Vbdv&vUdPX7*;3y3d2!h6Rv$eKv z7>TW|R%51th=PM`vJ41%bo6J7Mtpo|*?M$YM$D0N7UC{u*emf=Ada6wLQ;fCAQ-ju z##(1(abtCPdwr#~z0vKoV>aXsnLS`CRLW6K!U6znsERbr9`9qrlw>Jvj{b6Y1qeVX zWumAxuP$|$?zLZdc6oNTa{mLf4?cKm{$fK_h-1xKBPMhOItiDb;$HGSHMK1OK}fT+ z&3pGEK~xBuCF*L&pY60+Nd6a&*eEm0IYbneZmW%g)~=%@vGEJanP(OVQHg-1Oc5O4 z>QQ4waqt+z9x0IVO(QnLSFSC7(|`FW4^|XSByy#DRMgdY5>+K81!es?HYm%nL@`F; z5yp)G8n4>ik4PK6`|QuU_nS$S)X!w$;Iu#E1I&Iet7wUR!|=)^!Xm%+vFl&*d9M=@ zK|wZaTLvUGH?21|tpS!~htEjCB8Z%B)~CXt+lAG&_RX7%kDZ+pK=ilifHY^OmJl?v zBJ8%i?d^7BsxHC@*i@Ze-aTOlu}f4iPWNNKXGSFvOeHgpjX_03h@?1z?bYtxJ8R2# zH&*U#ZEbeD?MMX3l0FnDbTksPASAoIdYClyC@Az;p4@<((?y7|VK@*aKu|=&xU$?` zS-$(+Czj4$n0n;#(+^ylRaMfF7G|`@oAdja3bGF~1HJ$^rfcC^pra^I3V}r=8>u~X zk{NAK;z_@^lY~+kkj6ekI!Sc$+ z7yZQV-`j2x(g@9D+{U{BLW#W(e51@9M+{}M1RW&~6ru;9 zH#hGtH)p3n>ttV!uvXIznySmDIgAMa68^&TDC3{qwPZYLR>IR$^?Qrk5#uYb-hTAy zOIFE|Fc2cuW+SXtxDzQ-AhNyLs?}?tP(TU}Vc)k**gbY7yXXzEXTpj`gd>1}1QaL` z(j8u2YTdiDaqs5Z>hgAbI~E24B1H<7V^@S7sgnp?jJ=qi(srBpd=5&SRK@Pg%f#6h z7q~O8(CLFf05Bi`Bpu7mD;u}2t)IWxeB#N|7cb9Zg>)on%{=$Z5bXJBH7zPojj7uD zN(2aq5CjS{hRFLDUvF#cw<61tP9|-AfQa2rm!mkd2QB-MX)%ZZC^73woun%!MTr?G zPsL=iyI)nx5N84aK*&IKwYt9f`9Jb|&n|8po#`JRyB^$g8NTb)a^XzR2ll^J;*fDd z@_(?h490Rwa6E7l-WHb_BVamlDZUx>xJLh78ysvE+kJZ&hc0SII-njBt>4XLUUh7G zz46ERA-P#4dW%15HcDa}g#~uP$x=#z(Gy(PzC;TI-<5uKEQ4 zp>le@)9NrYp_6Ll8nhYEToUa$VqjMCcz(9|+?@?1diC1f_VPw;ep)z2H*AX5RISvf zrZ!rO0EB?;?M|oFtxZ>jbta(w$&%gdEK9Hh>L=glc_c*sdMbcHLJSB=aYrxTY2UcI zeCOu+>PovCX#`M2gbD)?OB8t!zg!$^Aj!t5yl@6H#%s{AKBH?5{7AlFnw(&+$Q)({!a=q6htJ)5^=|7k-*7)~ZUfun z?t7wvo-g@Z$w~77h@emyr`5)t^>@AR_y73LCK3tjlx#gR?6FOb@_1qAIeNJL=jWq7 zJ_@i;JSPYPh_e%p{T+*k_cdka?+Rl({VOplCb1749N`QBR9HhNG0g{r-hsL>$9n0U zVZM$ST8Vwf9;^1D4ZTN>vK!bPCZ!1%&g~8(@;%*LLBEFx5zGJiOCNjJr#>B$5;4jG z21Wpl)gWA$j~15@jQtZ#kNx%-5vyzA z$q`vov(p<(ODsSL!m_p1s!dgM7Jt!5f_9er9_LoYvU3cwdX#r*1M+g(UBi?+uwR|| zV--?BAlP1M-M+SX?bW5lrB=IRHWN`*k)dAzKtRN)Nvw$-NvIXE(w{WFc4>-^`ZE7( zVZ-J~N|IQ?P)hO$m6vv&&XC(9DBQ%OAR7mZ%er|DXHPYYs%OCr| z)w_T1v!6P5W)|BK#|$9WGE@4zO}lLiwiHZ(5(!`swYS%Q;8$MyM<2M_VjhEIze)_i z#OY`TtK;@D{zo|Q^#<)<*^9pHfRGGu<6nP{9QnQ)0CrV^Wp0lVj!j|oC4l-TZ(nHO zgj^cj(~TWQNqnwy9C>eDq7O!)_4@VKWvP}Zu@4wL!3WFL2#WyVcmC`jzw?ck?mN?f zs3Sn+G$DYX=BI^0HaF3n2!=%~gbXc&03ae^H8?-ld~tP)lzQ>X-RT%@vM$d$U!og-8|G5Cw?nBtE%>Bnlt~)~qAxwsp4?Z*FxqH#@5<+iPpBjkQ+09mN`m zND&cHqT)ed6d_bMZfvfszuIU7%-rqjYM>svH23fma~P0-5-IBZohnE~YPHJt#&!@Q z(%>`U3MV-`oI@7A`ZZK0VW-v6TK5rwiDUZ!0Rp1s&FI;CtANm9__rUr`Ab(e{??~l z{!4FuaJn9d2G$zPv1|yC?x%BAoB>4;2o++;-Ol!}e(2`+{MMB}UfuvCL=+iXl_y}D zcVaNk3z<>+#Bq-Qe!*|~Cve(1(MdiC^6uDI_{qS4u4jU(>~ICp0id5OW-@y7L+OSm zs0vLkBs(1+fFrDy*uTA$7-y7)wL4^*q+5WZh!EkOjrRZczTf`w|Lr}{?Eo144JRB> zaB3Mn#D8$Zf~}yXPQApSrL$rTuOSsk2bF#{(_`W-{it6xQ+fFCx=S+uL%ee zs4&o7zWUPYE6?6pyuB4^AXH(h=Si|BiKbioBY{1nT{N?>77-A<>Z&oYyKvmFC2i9j65fRbWiqK#+2>}v@6|77VQ0)}f0SN?jo4427tIMsscQzK6 zw$@f!+fl4F2A~2YKon*qMx@ORUSDk^00;^2(#kR^y8Of`Ade_>33GXADkO)Mz%W^W zD8hrxNf-a<9e_r7CD!|XiKVmM63s|zKvo&inIcIl5A|D+3S_s#Dzrb zlA5G(4A0rw=E78cZLQPl^0P19e(H^nL26Ih*o>CO>=Xq`Sdb79b)>g8TXPH3D8Afh zI7gFl;fxs<@wfFNP>R5*RQ`oLqSbi`Y$ou$RC8#mYP-rLyNh)7h3Bm&GD z5DAa~0fdm_NUmMkc<`Y))l_Nyu?6fEF#>=Dfl`4A0)>R2p%_CHF}?4=`u+5hogB}F zfJkvC?zGxy5>bG(sv`iY;KR2zwz@GOTA>e-0Q||V~1?r&R{Dsd6?*B{6t5-M2XQc zXpT|h@X`A&=18!Y3gHt#l1`Biyj$&;SEB}7Hi8lbYWUsDWe?8rVC<+OV^1$h z8WsI(v(Js#-8+H;f`8{{{_x`IsrP*5Q?jxOD8OcgYB?ZUnBhR_wN2vWkajz+r5=hn zWd{mNC4@)L&Rko$!-OAy@%Fn`Hyd-)62;&i6V_p)UTM^$jTWIYR&}>Fx2L8X6cWg8 zj=Sz{`Ti1rmtOQ${dityL?@OYGpVEyL4xHQo6mmy=B=x%9AiKMpa`&K5PU1w#+o*Q zFl*M#8WE~BwQy?c%)<2i>E_IQqd8ksHH9Q%q(Cg1W6_cm%OH>|5lC$brPN8$tibCC zbKCmNUDld)3<5|vwGd97UU=~F)2;RH)ho+auPiSwwGaav3R?w>@leOiT2!JdOR~y* zapa4DkfJbDVI>gmQ(nXOLlq>i&m73RoRO1Zx7~@mk#D3rB)WS4YE4;i4QH)5CY1;yTV)rju=?bDe zc6RQCYpbiB)=M|nUcP?!>C^KN#ctmW0sw|Vb9QEBV+$ZK566+-+-l9vPq7H1ClDFX zkrdqWC(t|Yg8ETF{liB~wSbeg2mlD8kP5aIJI{UM+N&?#>vlL$p&~HUPYL}(%iz-nKM&o&dto9nX1iJDL_OmS_`v|V-%-Z5kRm9b){=gx53JZe};E)iG<4| ze8BT6n-PM{Y`kyGs@J^n{KJo(e&xBP7hk%!y4FENKs2YPGbjOl=1ene1dh~m;xY7! z*Qv-vfE0z55V8k`xp1YgO`KHLW?8sYKjVAl2>*Tr7$Sl|d#f!B#!9vyI;5NQ(1a0? zy0aC1?Do2!H0#<$z=Xf0^(*V^nQR0xYB(e$vCs5q)&`edIe3jT#)<|*PEcTDOv*o03w(TD?l?1tcASv|7Y*N<1ERt z^f2t4b0eNf@3Sf^%e(g7(>-=)Fm`8lu~+~LU}1g$B|yNEfJA{5L5L73Q52~kBnToF zPJjRc1QvuNxzsGMFpD+V!R*ZRxc1Yox_ni7pZR>mz31qU8xb$!nar2AUS`JE)tN8j zMO<&c_|CbTT&f@;+QZ311q+6DO9FtX#K3T0{)NjEcM3Ce8{Rv&7M}aqQvfVN_AU_s zk-ovf^|?i>0YLx~C>P58{XM8q0*}FoO?6y(6k3WkW~S-G4w<)swfVN?^)_6&Kp?pR zA&0okcRpIa^WNP0W=%PctCWNk2-aM$AG-D4{M^Du zv8=TiM9MmF<`$kB;|4Wy>BK6^MF3AnVfPnAzAc z8wCU;B4A;wn+POB2uR3?IY$KVZC2jjsLpu$-@fzs_x+Bt>pEgY34?Vz$cvf1qiJ*WRho#_BK)_i>gF(a}m~dYizIbC}VspLh*L+eq zFq9u2??Fez7yuOypziz#!E#Ktk@fZGTGCjda3{KKRYTjqfoPHYI)m7-+!3&qS1wny z?;|xRkYek%h_3|9Aip`Ys)aily~XN+>Q&G((H%~g4V(ECU5l=&rXwR3)5T0P8b+M$ zU%q!wn|b0mjH1{}n7b8mr8r(VkdeCE6hJ$qq1`xrlw{D6Af1rnXspiGmiM1YWdk-z!xe)OB~&;I-$|NNIfaS2U@D>Xm^)~&Ay z5~|Sw$hiLM2KZVLlBIJ3lO99|Afw*9v-015^VUDVy<9dXOH}?~?$+H$&%bz$OEn?F z$iKAz|L?f5da#>T(oRWEBMnC`J>(;Fvo&He?AB0ARxj?N5TU3!_dX z0YaO)gor7oNCF88zLg3nNLh>55)yDm_2F9}={re)4Oa?fHlh?s`@shRL_{HORlMJN zyw^6Oa~4Y%Do+GYyfGZFdOsxg=U{5#copR# z~fkE1=fLIt2iJT9Y)_&j5|EoXwrDy-l?|$XX^e}?qQdP7sECe8kY9NoUqt~|l zV#O691>`6sG>Gp#-uU}Jc<>8v&u(dLg%X~?OwIhpt9PFN*mVrfy^`QiDv-XR{`I*< zVIi_cPN+RyDwO(12dp#QRw~t_Y7~+jECbO=BqG7^vLG-ynaaBVgYVvce1F{`*L5-= z!pPy>C;)~HA`A}Yr_Ya^zcf5BnxhP{7-j}7mPm_nIbpP7jqo6py+o`S2Iqf;cg9pv z*jUHS#viePzSUdlW*ViHbjT(tFd{<%03(8o0K!peB_nP-_$357iOY#UcdYxy2O?Gs zlNS>SK|oTqa?P*S5VvE0q8Ks`eY9G7XSujjdJ-U{=bwG{;`DhUbY17(-Ft7m`))eQ zophX(b##gYKqs9&Z7_$2XkmF+9MI__hSKI5pzSg6#|zuDLMe_dc3^+v-*z^Hb&nSP z#HrR!FHYI)dE{tUz9Is`M5^ZVU;Wj${+I9H`KgyL{-H12eEITNUvI`9Q4Ih-9$)|K`rhHy*5%v<3iskeC2yW&rq~zjyaP`2EX014FE}ik4t( z-2R?yPu?q(iIhli4pwoa*gMdRio`H(m)9DJ_k_PXrt{2ilL?`@>mmzi|Us{>LtuVAf2(E zgu};(L_k=CLx0F&%0m{!8mie~1p>osmY+t8%u_qH)b}=+HakmCfHWFf+HhvDz$k+cuaKDGmy)6?6MT+C=w>bRBzS*o8>q)T8~p*ui9c z8n90Ss7v7PTLm@{mB? z<*}t4USBDF_sx4h{*#}Et(u?;cGx25sJ@|rm8}ARJ#|SC(De$%1L6rkx!`in*gf-x*+ag80L`>&`p>7HyVGjZ#S${yn!iJeyYu1L1W^LH_jR|b8 ztkwkq00|M12$dq&QLgK_8Ra-giU>iP4xy@>Vr?_BV!Uiy%ouhk+`dcK4YBHHcg2Ki ziCd)}K|7((HW5L*h7(U9p|0slu@vg6Vi~C4Zhs+4Aier`kJiGQIvuqH!1}jRj*AGc zqGz6d>O0^2uC#V)-hc+)D#bCvfs-uzM>FA@B1KnW$5C-V%f$m;YIe`d@I!#K|FDOk zPG})*PXKk0@4b~vgSLDB0oHMn>*};(R~6dDWXAp*<{om^Nu=8coA##^-3}44r*0#V zX8Go=neTiwD{p1!*0IATo>tSZ0^M{C=tUmA8ow- z>b+7GGo(ZekRU35t1Z48STTWLv+OB@LC3?hP3s9crHy1AU2?{OWM5JZ@*Kqw%7B=J17 z`OBuep#+<#qtJh+;#F#d6rK3qBD{c{5?A3&$$RzjdNSgj zQ)jf+z9v$FniL7Z)bzQ0Heafi2yokg(upI*At7yAU4^td;y8jm=)R(e^FAlB=Jv2l zYFVD$x{o|i?5qGfUX;o)N@|MZhJB6*@t)ND3i?U4+*2{kr8wz`$O+ra&;W>_F$O?N z+QfIqXw8VAx$R?&K*oRi*35r?d-nXbX|B}*8ze+wcKY(!o}5=KIm!xA7y$gLS1FeJ zhWd;#`y-*-J-N*qC8qjFNS*~zNM+Y&s}JtXc(s~xq*~?GrIPQHLSQjU5sP@n@9oK6 zzH;XB)$#txtcW&73tLywR6ha>LlP)VjAec-c_TJPKqNu|VW?GgrChF*Jf-UGG|HlqCP|lXf0anTE*W)%w$zxZ)RvPuQDV?!sNt!32iI!4mhhu&&&(LV{hbcBd$RLdii1KIN`Vd>UHslKMT*_ycx~Ie04)`~4d0$XG!sDk z83#KbMw<(?qw;-HYl_Y?b|9@Jorm^|j$2{pt?8gDrP&N%$HZ(uFm)aywz{}Iwkesk zm0G0bZ~)l8eeZrq6#(EC4!^KfG&BN@$=3?ifZg)rX4&eDcVH|q&Nt4*o=>|Ql#nMK_#Fe%pI}K z43f6eU6o{tozbvo$JoCP9^K)_SkvF`Hgxlp?E$2yV*l1RKPt{Ilj{Jm-43G&0O$Mr zfQVUyMXWCxM8D>j3uQuzu|MrPUCT7@wM9w%!D!nrgeV$ry+2JChGA$J%WN#|^}@1IOYpg=RM3I|s#UYHT4sq{IX5M;9l{1D7`n8^ zT{OGqVS4A`b(=6dUr!+dqA-*SWi}E&8LV+RB^Y?(7IIK+7QHu?%I$+y^x{+$tHL1CdKZmg1*O z?S?mK%51Bfn=c3eVx>@BTd%l|BW$eyW&0I@0`{-nnEb*|y)b^h*LYRd8UX+ZM1m91 zQ4j$E+t!E(5(1(2d407!^Jry$Zlh4}j0Ox%yCT0qHeQra`C}DG?bDyoHDNrI_zzKt zeobr7)QN~)@Ho3~YdeP5NrZck6D{H9dw!)*M!|q93%_o)5J3^iAl_Noy0=+sx+}a% zWk5NgGN9a8`UC(3q*n9lksujkdi(mP&Q3|}G`M8;b|b+`ks`(MM%vSl7#*z^8s>$Q zyKI%6MC1n>*KtM5Ub+JTbmUFvc$II9z_W03bv+V-JtFxBkt4d)qHmKsgcxAVL{8*W1Iwq5V*>4fktasZ;@^qY~1_ z(ZmCwJz(7k7^~+20PD5dXYbOriI+Zi4V5u9&k{Yssp@FYH;bnYAucruE&vi*)z9qA z>eAw7rD6og`pgbX#4-r=(Khy3tdWvs&!9Q<_+Ma|B&?6x;h%LX2r*`~g^ht>n2GS; z5p7wT^3m##-GqY(h~;8g`#xe_meoN0#7i3p1^DalFP1%S88M!Opi;(7uNtmV6b=!zsi98aY08}^00DS+bb z>IpQSK`k4aKqBy~@?~j7xz{o+B0RRvNRBt|B`qdvkq~MpolscpmA<}yA__UsX2j!4N6r)}PCTCU zh}ykKUpem+UBy;ylYrw_(Ff}U`iRhOq-jVxHeKKI5Y<7U?77^IL4iLBNJDis{=My! zd;Bs*iWDat?bX7pEdzp1hD}X`ksQtDum8#iKk?a{4k-~K009z~{6L?Rb=l*X%O3$D zzv`C?mHy#g;pFM^5MwlUo8H!t_}7-X!B`x^hy*XZFr|bR7dExlj!XRmxeJ%ar!S5H z)Q~x}DuTqZ?)5Mt(Np3JMCDawVR5rk@{kl-cR}GDk)Q3Rgrfxi+aE2n*D|;9f(!i^ z3kV`97#{9NMPfpg3PxvQwNkr0(Fve+>>bW(2$pv%7s`IkBUFIa2CK;xa}g~&+YMAfBcn)al3kSn+PcHy~f`Zn=vj_-^NVZSC z^r>mDd`27NxRl8|Due7-1p}=PV%&*LEOBj?H;8BqE-i1BOP)f4_*qa%SyF7cj%OcZ zL=`kCcVhCNptLZVAc*8vO5ynAV9!8CLNCQTqG1MUkZC1-giG?4z17)4RCZK|h(>d9 zV+#ZUo4A~0LW9%bL>%CMdwPm_f2a2>!bw4_-BaD6|FCu`j2G)cKNaSPy z$&whp;lK9J-_X9sx;O$+IlY4e*57kzh=Txvh+eH$DpgS_X%$!f+Cc~!8*dH0E(b1n z1epbt$@XLKu$%2yK*ng_GCwxaI|LslwVqg1m5N_3dxQkQanC%-C*tN;LF(G%IPMNQ zv~+^NwMX3m})85qh5>qLZYGSSZBDq>d}Qx|v(g4oY^7;WNeAHkl0 zu@8u(N}EN$Qlpsvqj2)Gr4&}ar2`QhpoPuquRdIB88iZ*as!W75d##fY1=q5*{r>8 zc|}AJ5!ZEdxm=h6*r}Oza!-mByTS?H10P4E)v-^s+sLM{Xg7za*gFXJ+v2vblI_3R zOI;qwZok8RcF5f^?dp5Sk&KjwG}fd8*)c-eNlzM@`(9Yb!rHg{TT+g7h9Y7B=r`Ye z_?xeOgxRcUEh4}G0KJ3#PR6xfQ4+!n1I5jfXhx(!^deEru|(_$+1CNNF=63IiWpLJ<4BWhFbySzxFbQcQ*9L?m_@S5kw^Rb#Z;u z@{9p-Ct-;u8<<$GN+hS~S8uO8D0%UlAod56Q_l}JzjqY??Ct3liHWulL4c4b;6qd0 z#OXn|En3ob)DuU#nvLUV%Hd>}Ha2~LW1i*iogeq906Oqm=_tU1iuFKAggqqcShwk; z!2uRgyQ)6oS~xL-+KET{Hs&NFA+88N3;Q5~1b|3R=o}Y8i~RZj<%eFyfO43Kkw8TC z8ZzC1cK zmPOEPe4yx|y4*^l$Xfiv`sXk^b+QEm`Y2BDH2;J8({1wE0d~Ozp`~1~uu<@99tAdZ zQLBCQO?lFAPZX$K@l71ILdY1Fw#zt zj-@96C%zKXC0U9+W1IH|opWT{+;*zCHfdhWY&-sR^U%~SRo1+K*&6}WGCwU>)Q19T z^LhWF9T0Xbfpl+q^myW(@brw`Cje>pJo&&T^@12J%yxJt42Bpr{P>4dlQn-mvG2!M(Nk1Mel$l!skL zk@nleKy$SmQ=E)kq)2hnkm#Ah!Wt<92mp$d%dG7vBmjTmpTG6HKKpdmafJnmfFV0L zkm<>J#R`Fn9e*weRI7N!LTO;6U%>2Qnv>{WY;k?pd9zB9HV=oFF&4Z41b&w>nP7|_ zLL?cV9B>_HeZAmYb1(?}$YA_ti9eg9Rs^i`XAvt;3e!M{1dgM!*-XAClgqo=ysMP; zyv-mQSeh~;O{I$habn|u$KEF14I9t6Z@hh1Yl8+_DJayf)eZIyk^&HspbQ&R6M_U> zK#%30ygL(CXu{qvxJ_j&V;NMJ^=K8{i2wp;CeP$@InVPgv1DC-D@T<}rM1--u7!5O z6Q9txkG+AVZD_|SPCU}O?gkv+S~#pp=d=R1o99yO8wW)I9eW&M`)dE5G)0OODN;N+ zi1ER3t)zz>m$e6C?8f!oxwT*X=KKHapZOGT7Q}G@5VP67k-^ns8R9lM2mpeDTkD0M z-n_~vVQw+MG!OrE2}Tnq(aYndLlivDZPo(2@c6>C{Wq%k)1*fB~t>VsJu}sZx+y=xmI_SRBsp&l^6UJbX4Yh zk2b!wumOl7jq)D>Aaa0I#GcgyjU+uHh;;eN<$9__h>(o{!1~5Uxl+U($ggfgx{FAW zB1MYhg-*upJxWPV06JeFHW$zl5J1PHVxIV$sT6IH)=Y{NDUJwYv{;o1B9cPK72ibP z{@;J;&ENBdXZvy)U&k^j30NVAd$lV0~BxhOK_Rm9$Cq;@BU5K=wb}gE=;(I~MXM+hy z*oe{OWbDaD%E@Z&MzAw+Bv0;vr7N7P9Z2Ys+=^E=(`;L!bC~^W21_1*gq#)x^7DJbU5i8IxXLW^< z2(Z*eD)mFZqQ_$?Y9`DQ-?dwA?`Cb(d~buvmn1H?u#;;R#l(249jZE3Wr6~L1e>dy zex*jJMA-VN4oNj=h$tul5m%{qmbU)Q!({-FChtE2K*|Mj>SudJ`ZcJtKbcJKm6t!R zlwxB7?@!i$6p`=ycRsoUK|P<&ZApsl5!bmNi{_C|`dxyPR1qgBFDXtSI&lJhG>!Pl zca?p-b?xM#C!fJ%3km-$uvD@lpiKPxzwpbi z-+uoQ<@{#P0ww2 zNAg#_s87;% z4;(o(CMOGIrLqEmUe*8K|J`p$Hisa>42YS*zI=ZVGY1Zh#U8#6!h(X8Vr_kS15pK} zQsaAu-Ml>5ZXvPFcXfeB^6DPeB?6Y45kU|X`wzm?xDo+k2mb=br!fP;*q&VTH7S7v zI$T;c<-J8hU>7q=iyr$}*9abT}jkgzV72o1gfz>0v#$pWe$8l0Vwy&QL z9($|4?pX$RNit3h4x~KOO6d^Y(~q7cI+yI8Z0va~w&=tJY|pXm0cp!lv0LnaKy0}S zIH;zWj#0-5>G;#lIK-~RA`!(S!lCDsz-|kbi{ys)5&-<^U--?jG_fKD^oy<$xFirtSr)KMo(nG`8fJXsw4v`TIkl^Ze=k?ULp03<>u z6B>d6AZ?T?|KVTzHBl})3P53BfA8op5{H&K!KNAnM1%lM&8#f0LHq=##2yM8ue8RI zEG80ili0N#&{5i~u~_2%J@8tcYL)hgwjsC8VoMGv6#ujo0W}3sSGf}zpVyYxCG-eX z7wUijV9XpWmSO}1s0se{@7$?qKjJRqsX;(enMM{Y2v-EjH^zv`WL-DoA`uIhE9IHl z*;l{+{eS+;|Kh#(-eKVw`_tWP+Z2b3hJ|s5%xX6vZMFxC{g-F=w2kgZchenvLPM51 zds!7BRL*uI8PrW_X$3@}FqP80XxQe#j-%NAjaqYbT~%c963WY2!+js{0mQ_ZJlG^6PbNeQ5B(B17SMI&}tq3el-58iE4h=%&EfE5;Vu@2vY~ z0dSDsS+4xaUw&_`QfW#A0s;Ym)0gQR6R%)&l@LM17%d{q#*&l(AYv@rgyAnM9kSGq z)&5AbBKLu#S?r|*(9Y;ckKa{Hj7tWPd)(dM}=tQPuHW&a)r7*58uTQvRPF8_%L;)dM{Rf2e zcvEZKdGb8a8MYo+bHCUzqV`05GyAhc2#rzidX3YV*j<-W>jyfb>OyT#{Z})|ClQmv z%%rHaQQBBpBTyooyggzHlkr;z(a1%Q|N3|Ctk>C}7;}e62m}h8k$iTzCsVt6_1f6* zAQ`Mwsy>@ixmqljR@XPyw+fYN1po+&TE6bpsHZCZ=whq`JMnj*I~69NQ~~jw}HwQXDqAX{0*UNNeGk;=pr%Nqx48Uh zc5Y^FL2C~}YEt%C^eK)FQj#o1impf6O?SrWoTPSa87+(D$echw@m4E`VBMA?MT!(D z4jV1UWNiP{9>LWj7)_)Qi4+m3ASOg23dB0f0mrp&fb6vU%WppT3xD@lWpGqH?Tn6( zUc4YiM+zDYv_NP#{|d;f_-jiW%wUaotPaSYj}`k@|J{UbCbEND{Im{f5BBzLv(Xrl zU@%KdjQfaKv4j?8r=VJXC5@l9M^qEi`P!jfKyh*l8_cHyp3$%RYYS`a3r1F9^~VL# z9-$Tqy%89M!H9M;ncwo-290zeD+J9{p85dko9P8gV|>pJW-@8x{i?Sc_#_7oArN+ z&aupmiF<&F{rFAJO%7fOD&xPPB4x^e@h~5jVV$b6!zQw5degBd5gV@ux8^M zzrudS)JmeOY|MvAC{*$kN)1SJ8UOVWF#YYlEL5fZ~ z4>%w~RV{lP%Uc2p17!=M1jnKW2W9O&H`4TBZ}+sozS4z>U#*fOtuA(!#Kiut{bsL| zdy;oZ^QAoi8-9n35E6hOk*@0HxmDjYh!`q+Vo636frQ&-0Yns(Y$pGsnXP~I+M^1R z37-qxI-^2VATDJt_CNg}(}gdy8qiLb9c2*amX=?C_k-otO*fNKjzXnGfCYTtxNhdz zr*8hPuYKkEg-Z}OJZnhR>B1?>@yW{S$;wR^VGmP5oYg*d%k?LVw76O#@m>hihP6v{ zp%dsmMA1nCIuAdcFpep@Q>DI5Gw!yeo=&8-(EZqhxOFf0Zx;}fa&zS71c40;Yw|Jk4Y>7V{AY_6ECt;cV@t; zRj+0>X-P7uoz32^a0JWs1BoJ?CJqWmyg^GV?f|i$x@$S0rnS=vPAsRf?~Jt(D(^Sg zgThf(oa}y;EQhK9>Y7?;i&PhSlF*&Cc?1+^iWH{}hhnU-U56AlURhTQU^F5UDIf(% z001n2WQ_d2zx4n6m4EqN7#enlht6KRO0E)Qj7)gq;j<88sZicn-3(4&LJ-7o7ROdE zvf|fvJ9I?P;{L+ft9EFYk?hFjw-O8O=H;KX_yo!4cT+U+vfb&{pau{?h)7q>%G{Fg z8AO86+fV)GMgbCrA+Vcqmp1)>{o04j=E9(r|5%H{PyytOzxm75h>Sotf`|tik<-w@e?mT{|A5f@4Rqk3IL>WiJ7#_OOaw{ zr0mZLz#d99nye-HXNnYiMx&rNHTB#r4vzrpl3M6+4VgBc6i1J=v871SMcA=Jit%-| zD7p$FNQ8ltAOT@O(whI+U;m{yzxN)D4QJ1t8NGO3L|Z4&fg2zI0Fgk#VH99-qqwoW ziAW)dk)UQmMj`wy5ZgiRZS**>IS%&{)^3Hvo!uynpLPhU@j{|l4`7Fiv7ap%H?+os zNaR=j<+&y884?H%c5gPg3jfB?A-RZgGMS}<|7)*(RIc*bUf1z_*7Xr z27V7?&EAmqs1zwqC(^!uEYL809F`2FBQqXh_9~=&R9PTL*o5Ao1&~(D-XHw)|MXuC z^xb&n>VW5SrM$JUOisq0>V!c~B-np5D^kUc0wN5J4+@K*b@$sKP^ohO$;EW%Xs40c z!@S&BL{ShsgthDWyo0oLTK_u+wU=^eM6-OTe#KT}P<<$Zh_#ZpJin|xLqHMj(_FTe zi~&Jmdk~n(xS54b@3-E#Q})ep&go@Ok;_sCCtSJ(pF#@{Q z>ObUh5CJl-bNk^Vt<5K2elhDRW=mLFr`)8qaa{KcKlZ7!6BEDnz3*?8i(%d*6agKG zE!d%ApNq+Knn;l%!ahj!@@eGM|3)Ey^RZmx7)P-oZ zKkogN(zo8aS7XQ$W)wJ?%<865EXp0A-ly`{|Cn>-kNWO}VS~WLLX60OEMNqIuzr>p z1}zuF$+&lCX213Q*Ge_daTG(~-CRJxKFV_Q+Lhn?JAU%g)O48JD1&>p1v?f7LFqJc z;7E(~l;E(pc&8QzvJ7~_*hdCVY@6AS8fXvLCjk_H6MINivbTJtO1Ts%QlvNmIMR1K zyW%}qSHbv13Q1XcjxYn#{k76h{HK5G?Qg$NPv0DQ_L*#d4;!CAtO&%Oc8($-f*{DE zfQsvzn~Q508Ty2_V6pVI*WaHps1%BW;AFDvHPf5RK0PwhKmEC$XMYYSzo5kh5E4Ve zB!IS=fw3YY3?)0Eo-8m)%VaaNOUvK*&Ue?hwlc0GEC2)o0xTc`=o>RUJoG!h_T`tJ zehwSea(m-|j=m{MtAE?ylj4{nt-FIog8|o$=;W1uT1TfBY27#A=ndKSOaN^|{cJO9 z9?eodZC5F}4e89+ZAi=ic;R3-V{Iqd-Nqrp!dlowXElj10M2arU;R)1)?43r&3WOa zk*A(g`5pm5u?~PjqC!L%L`2viV_~hZHn$>Lh)5dz|8AS+L&44k(JWBH1|p+%u-mK- ztQ4m4hS=XCO(8U_n!-N?W15;a^o%5)IXDDGA@!74!HkGNX`{Thu*O;f4ka)ROs1-y zLBzl=R%6!WZ+op1lg#n-x+| z7AfPCBE^o_Rqxnolu!HGNkE4+m{xRKJlQGmuuZ_4A+evG-{0Y#>6ntDYjLDPh7@g( zjuI&j7$TC(WQGO?FrQ;^_a+a$#wY<9-8 zU4O@&Zs-V+lqMFt)!A4o1`&j@uu@oETxDY~NkbWgIvR|Q3Ihp~wA=KGIIdHu zRKM}+4<66XJLDLa03ggpKnxpSo2Rc``9r_+ciy;k73+Sf(AIAUE4+00O_9#R#}wOF zT)MtG8a(k5mgY&iNf#nbx1Anz8om#e!dp61nGpn{1AgElF}==t46wc|b8f3cSm+o{A! z#2WOG@p)x_WqoBG16R;unVv|b6Y6|Ikkw#?^^{1L003(g4*dHFv~WBm>?l?9{cnE%wcGa}D5aPUv#?=d z5n*N#0ngWceLX+<f(&o{%*pUI; zC$_Kp6FC@mgt!~X1L+Y(!?=Y>UkCMCu!>kEKfIQ!O>8W!U zCI@PzN)}LwPv8RO1q1{`RgMTsU_oZ3M1UebfT`!AMZQr)h>!tZefvj+a`D+~*F-o- zusz94KoEUx5b)`1SI>-({rb1QGrzPT*27S;XrhX4Ur;I9LDJ$%@ucxYT437jJ4eeU z?jaT6K9|$!fYuQ(S|P+%1nmm0alN%09K8t`q+7BSDN-ChPU?%(6y1V>T<#~n^o5Jl zQ^pu$*z@&MSFioy-}SqmyM9BF-RcV|f zyp=N>`xgat9btK+wD@?@ulghe95a%VhDXBBHY>tFII~)OXS}LB`*W3HMzV_u$zVs525)lBz?MSzDOx_h5=*+bAQlv;>aU4g3Czj@}VxD$P zOoQ6H`NOV4YlkO7039rjV;@M7BE=!$$?t$uoCXZ#a=-n{Up{yCtTAkl?h-`ba9>~F z@A%4BzWC|Sj13NEGZ{bvx3?-ifB3Kb`Y-&gZ}!}{GIs5%h%qKK{gUXXfVB#;9~idQ zwl`kg2~ zvDzO(U|FAAU7lTL6La|t?Me}&x))(Vyfe4{quYyBgNP(z1O)_yA)j@gzBJ`mJ%t%D z00IQ&%mAoNMmW|Q>c0cJhd_`k5SoDPTsXpR#<@4U_^ltlQ7o4g5eq|blD(Cy2>@tj z0sQ!jFZ|S(zdSND41phXvEGj`I8MGPVF!jfrPlP}_@X)e(*COy%}7h>$k0_g>(c{? z{e;7v>KfzPe}G4gqiv(drAOd4CSdy!799wVOChF6k)j)ruK7~z3!OKhp-lE`U;4_# z*$K}#L}V2_NC<$&z`fa-M+=L&e19g_Tk^S35XcSs?EI;J_}1N};(ztWKQjS(@x2F3 zhz>;@NPWVyzMlm^u(VayS`Up4I$2i?148`-Zfp?B)c=$yz>YN6yA@{dQ^=jrr!*ZX zzFUMv5e0lCGIJ}kiKjbo-4jqi;8*BP9G9*5-5C9t>HYA)wa)cca5&!`cBrtM0WQi$L!Mai5_K6Vy6lT|@rS+|E ze*cY6zx@2@(4g;YM3OpdY1<+C+DuQK{heR^@!R(vEG{oEF0WLo6(hz9+la^t-ePXR z8`5x4)z(0iq|3;z#o=|-bR}?LA0dFF6b2q_LUSUk7ePP)MDQ!M)%lgdv7uaV zUPP?ppk%7Uopo|CB@n7F8op|=?22951!ok0{n%0Yg)U+Oss?w6t&^lQ-O#~`GI7iH zk+jNL6P<(66E z(lckr$34pdfe>On6eMBj?df^t`4<4CTrMxItv#NZU0z*TT3ypdTU{F>Vdx258e7qR zwgc^&-w|&yQao{_D}iGTOny#lbGJx`yPc7ikp&`9^2J$~^tauO)0;Jdj zB=M^=O!N(W{lY9gRtq0KST1>hWFH3r5V5v>kk8Uf&s@&C2y6rp#UbtGMIL%X ze`@Xz+$~L_(t@N!NEm}$Sr(B|h%$nYe<8o|4RG?YWMTYw;&Sw*2qGC4hv?(aKYjk( zl+gyP?n>%3R?rUsND%^(LKLX_we^jy`Q_z>*@d-@_4UFgivXY^vLzWi6mN%G+AEGD z2ejjubnJ4}fStJCy&zo%95_0upyp!V&qlIY7?`3%92?w0bC;&4U;fyOnS53R6)6cB z7<+2c+wXmF`~E}MQAC7b&tKwFN!JFxn7RDp<)wR4S_Wb?zO24}X|VeL{h3Q&dOExQ zaJ5I#Bn1G~Vs&MH#jE;+gjUgm$p=9IF|ePC zm?HorV8GjtR`1WRYaj%ydu|2*78EApr>~wnJKitaM<5YG5!4z~?iW@*^;efZ%ccfE zfJj0LI8c!R1`9h0MQ`;#9@p$@O`4}bt_{r7HCaG=@ST|QC*XdCRm zaJnHEDN>|3RHWTJ#U9bHg$HYi6LLd#E+nMBe9u6C|K#}C$k5RE=x}duUvL;#xN{c} zBC2YB?X9;K<`+utlV?-(tq@+p8w-- z%c)AOTsA~m24n<6WraY|nOG2}%rKJ!LlYzU!Cqk_B3M`Y1nI}bTwc#;qr~M%2%vq2 z)xL)x=z0sA{%F6WiK%}uI9#2GHE%3$ZmwT^U3AP_1c!qALR2oO*N z(E;3)TYtU}mW13W50S_R;whH;rcUAuL<9jeMs8ld@Z8PoiqIHi{rdn0r_@;q8wA{t z5TP)TA^=p16cHd4ip8bnmB+L53(HH3%PZO#2?$E4I~Zz^Ate$V=XzSUkv+G&Co8?# z|Ax8yaTwa4IMP+Y0pifc?@r@NYqJv^U~f8_0zWVUsP(0z#zDW4+6(qV0Bz#~=vbpm zn5;eHxTilwio-+NHB#&yk@g|nZ~}lmxJVGtAsXx-7#bWL8yg)N92y@V&bnDEqhVn! zOkf2%mTeItDtrESUwdP1ZQade00PS&YoFzNzPK0E&`rcFx;;RB0052x$-!7w7tj3V z?>+n%cME^{EBQ}Nsq&@|s0bYp0g8Ehj;Wprku|T)uk=;Dfzd%!D9n*y1RItVtvkxm zZ5sCS<&!Z^~F00BfsiIKCV&<`{b zdj-;)=qlN!%4Nsk&oERG$9U01IvPi&2eB-lWVEZ5vVr26oB1+L#x$?c& z-`w0PxUM6@NY>>FvH+mee2+$NO3$RQ2bd9X5S0i43%~$m3Ea$`jpg6}_4)te$DBX) zO4ct|JuQH)AR|y?79`rsiM*$xrYH2G(JOH6ynkEX^zyn3N(A z4w$3hEHSkI0fM=DVKSc~5ffN0q9CwBvrrxW#q}F3niwoS6Ig78f*PA{6agfutrJ%T zGOY_#k{>Xk0|JN~QX>jyTs612Tqu;Dxqju+)LD)g)jT0ua0N7j_+I zd9(0?H{L9ltIAO#!OlC1k`4Qu&5XS$DubYj96$n8AOPe5E71s;!Jdgqt@r=>@8;fI z@_+uz)a!Dw>I1q^_Y@OXg#;Igs8Xu>j}`~UhI)qv1W}9z3LUvb$D$`U%@}-aziPo2 zH(=~%C)oDRz09^9CSZ4Kv9@u7?b(z4laRSxCkyNOT3qMNu5F&`Ut}55OAH4JaX0iCf&1(XJKvrJoC}(M9 zg^js1eXd-sQe=@9#TiD;!p1kK5fKOa`ksI0>F1ulxv^Q8Us`(fXl7w~d3Almun`bN zwu=Err>ZsQu_;%FiI&Z{9Urv++a~u< zqCLsK?v9t0dVrtbLH#rFMY7S_K&`1u8s0qO&MeL z5_K;>5^lj!L<9&(YhGJesT3>2lOs;nF-BYIM>{{yp)lxRX1_hHy$+;1w^}i_OU-U` z+CZLIw>R+}JRy6$zPwRbFNgsJ%G!K2#S=D$kdy%c0U-sxhWoSYcV{f)P}}fv<1Di2aKSDM%QxROgAXt^Jqm zRE7~18Tb5rxq}?+` zM`#xN*pC7XfrfHsW>hPq=GF z1b|E?^LTOTd#}C8%!nw$4NCz5Kw+=uxsxxTJEDvxLPZLI0T_hA4G@%R4$agYISIQxOcdh*@T+O~=*y2fGV5i)upvs#Umt)3x0yf z6IzcTII-tp3856q=A%a|a~l;vqPmBki2VU85dskgB$VqHC*7ugi;(MoZwpPklQ^L zILchK9iX;l?srJx$*6{-M|ToH2go|7NRi^$Asx?C?2OooA=pa_Fj$8@fVoV5Y-D(1 zeDuQf)R~F#q5ghFj;CwB)|FZYgr#G(G_d?lF4Qs&M$rU^)~`O zD9|!UefKQ@Ak3!5PImYuEkwY;KuRI701FHFKCl4;phN@#T@V67fRTHU`}zm3ezNrF z`Hx-C=D1SvDd2#t@^#X45SAr=~D88&OuWhbwvKB&$+$={lOH&Zm+YeZ;I0kTGrF3s*ZL4a4 z6ojTs;n`UdJ{+)?zBV_{4~-4=XsszYV+)Z9Si8ix%A>!u{=6vVa1elXO^#tuP`4)o zR0{MK`OEgW`Z@!%Q+d=YwS9FFpl|%!_aBT54U33k5P)pXojNo5!L1K|?YF-F!qeA> z`ulo&dUN>#G&7 zX8mFjk$qf5lBwKP%Q&(Z$%hfeiP?^(=qf}^$8HDNmel7-+T5Lh?$&i#=zQ$%x}@(0 zUC;*vx|IOxg2G9WBE?bQSP$bVjvBG`BVu5QB4V{PfG#;B!y^-8qZiIkO^%HY4fH#X z!y<-FrB-9EL{=kpX;0)j#r_p|t3{B= z_`bMPG(&004vmjQBnnA5ef5005AU42X;V0QQf4@ZizyrTd?Md2)K9uTrf= z#x+p4d8zN1Er*1l3aiChsXBaSB-h^~BEpP~hCofF2(j=2u0poGuPs{L8LzJP=0*D) z0}gn-5Zmn_f(Q};K&?<+U0AD>D=0+P-*aHq1mSV;;a^cW0)T`dj-xipwcE3+bIT=0 zdyVTEml&Uij3OvdV>3FGzj9%WeGfsgpaK9!0VFVh&M$6#e8#`vP=!PSXVC!%Sy%sH zcs3WJ!rCh7P0TiW7T>urn*VGhi9{)9c4=j0eQjc7#LD7OaCBry02kNSzw`P#S=Z^$ z_nes+Jv%uzF*=gXWDK*`rtYphq;o^kwH~82dDOo4MI+&viSg+(lm5qE+}zr{`{3b& zM>7jcOP&sl9{~{|Zj#xq&269OV>c^B6|?Po^b{%ff&=UhduW-*u|FO$_SWBzzEt-- zF12U_@i$LLjuSG#b|(Rp+MT9IaomyiyA*pt^XMN}`cOc$K*0O}64KD%;P}YM`EyfK zXC{Y-2QyAafZ4DyrdF#(AqKm4vF9))q%<~2r3itDRL%E-%`;hBFcg+tF7se+;afj^ zlkD>`|04~e838u6Dh*zf?5MCu0D_3h1wddH(ZCvv0a8Hr0Cx(KfXv_ z(Z+y5#G#?#Prf|*u@_%hS=(4xTzc^6@%-Xqxl*>qa)=aUQkpZn2Z>OZuOyodQcjZ8 zBE_*oyUvm}%frBKOZA9{vb`zD8dKSRS$M=aP7Qebn(j^l=wPw8)n%8@_bF0z71GX< z;vgaQ-+`wO01y!t0RRH*@97&K9l3aZdg{#N=;%<^%>jxwMjKPDRii;aI<*}_VGk09 z=3HVonuMejF+jEEuWuEK#p1>3bEE>BFze+fmv!&WE_~|;ZxDrKO(L~%qZ$;Es?Rw5 z43k4rv-^7GxJXLa2N5tn00o>uU=Blo1Oj4QPdkoq-qGM>-+QpOuvUKQ#?<-Ie(m|f zfmfiqWF!;<*?*!Wj`gNd#7o1KN!<_@WU zw2)5b?QQ6(SX#GxcbMd-lHQY%Kp2Xv#r5Siuj&)2@C>j-3=&I4pc)E|^OT}OO@H`k zd49EQ1jy=%5FoV9N~T=^02o-%fPU)AxxNgt34A|Wftv^s$eN7&{gqE|)rOQ)L>36W zoi}AZXjlk<#8S9R#Lyt|IxvV*&ivBK+WOka&=9j2=CRSCOs>bT*8FTXn{i#oK}2R= z+1OfK-FWxT{prbxOVej3MuxIkS6G-CKoAH3t;8yJESjKLiY#b+B4T`F&>-OW@W|P* z@t2-^cB@#pfB(_rnc0UkGd1mrCE6m#Ub{fcR@HI?(mjx-&*^46#S_87c8zZ9Xx)jf zmHxGT`LkQJYzI3vj&9t@cTXjq1_CI;Zks|kHk}kHx(R6qITbj(okXjhzC_-4t>Kjf zVjsvlnepM_3m2x(O`bV(W~?XIOAcynv@un`7KvgaD;P}d%dJqtT2ToIC?Z7!2*qk` zd3j@gd1YyJV|8uq$6k3Uo5}dvx8#wCWHQeExrJ~2;B`eRR361p=a?|yi;U6WW`=G6 z7yt}?v^a$qf_ zTqFW%bC*>GNu=e8=pY0n^2`3((pqV=1b_-vj6w)ba}REfue@VNeKFF*rNZr*l|n^_ z?w-XqhDaY2SS^JCkN^PstS?TFoE__7&m&Y}lmvn(I*;`n(3S0HF>H(xfP60h!gJ5O`1~`QTU+-Z zJ^J9IyUVMqo?o+f6UI%$>S^z$1$l}T#~taKu*-2Y6%@Tpc~VG6^_|hR1W-CFr%2J| zNN4&}f#yBafeg)|nMy+bfdCLlB}A+{9>C$=feYuSrq7-|KRq?j-{&|Ev-rlZdNuI? zAW-(yZE`Ro2kgb@vPiH6Re(^fc{7X4v&$>H`^3V2tLo86VDHJwGD82N+1z zPy|H~B`;=CkN(4r&v*z9co68v;%AXX84oK^5Q)HFgW3vaEDOWi6v#dxj-wtguH3j( z?Ca?j0Y&P}_~`8HjOXi|h+|!0hnhDcQUn6By1B8kvH7Eq?oCaMT$(;Rb!NOLlM@hQ zOkm_GapStEuY`3H5#|sD8gwoC3;UTWkg(p|eJH2~3im2mP4sf_WPEB{mY;QvV zJ#qcZfw$m;5v-?3af)$V7QQL=i*0Ipw?nf8KQMHen+QHK(_pdZaES=y-R!xuXU0ZG zE?>GZH96VSlNS+B`^Kn9%82rHpbMq^G&t0AD%Q?m~ z*6Fmh0*X7&jSSxiQ8aHZZ4+)%x`X8dsG@C*aA=jD8ST82NjBx5JeDyD=TO! zNSTg{W%m#vq*}H1aCZLrn>T!4v(b}dV~9#??fcrvWrZ0rDlyBxiK9>e4f_w~79Pwk z4h{5PnmT)F`t0!FfU8JrW0=E}>q2E;*ye*G3hB>?%46ngt%iW3LqlgjKK{v%y|A#n z@_2Uc-h+n=%ga@-YGqzXC=wc%1&^jHz!WL=jC7OL4LFgyn;lmhN6@YgCW)St)B1H;F`@$(fht=Hqd-L$My+qUxhHQzo@Uq`H=!}mHkB*LB zy?pWf)Y-n?9z_m|(Z-a@6??2vu+a-u0D=5PV*XTO!@Q+&l%o`p5n0{XdOSb>Xm)XJ zbIa432#Lr+g-8Zqa%}kH&p#tZ2Yi%B#&sXfFMj8>x5CrDBpyTXA)3qsb_)c+XK;s~ zi_{&#Q%Fb-fPk1}k%eb(Stbk2BKK6m9m_FkDrjG!vU^__KpgksQfa;L;O3?AOA~`6 z#+V>@dj?XZG6^`K&_Rs$^!nUdwl6m@I^gCUVG(AaP-GHh0tF?^L?;!yU6m&?*fz8S zT?^Giinq;p6tN@MBSS6}LKKEtp|-KSSt(QiKw;pWI}v(FFi28aCICc0MC(QG)`O+x zjS3KwqDJ3K@q|ef7yux!7(_z8d1W&1f-qaZ;8s+G0E)Sv;XY6Q-SQU=`i`I=+0)-Z zFt9R=WM!eQDL93ml&LHbnCPtZnC>eqgJh}g72-JR(frc2^V8W}R%sow?4RYe{yW(%EfcjljHeZ-WX$i&l^$%~|z4!3p+`R$O72|5-YA9O~BfbCP#*YCCf1OGewFNog*DUPX%^c&D#&A zk_^v^eLz5f0RTi0aAaV3Y;^R(rKz*ylM`bjSvRY-)@-Vt59nikvyBp%k2G%U!|hvq zSB6TFqeuiwmFnE$@}s%=g{75Jt!5AUavX&a_%0E^o^0lmFFflK88(UtL|mn2mR7&@ z`kTxgw>+t{J@svNJspT(j4|kB2QPtWOiDmdxxxa>v4A4Kwh=X8R{iW2XUBQ-=G4T4 zwXKa(&2?0eYZ2FV3ckGY;nKoN>8VR&BRx5zOgylw zBgbK80g0bo-Y5s!8#)LhTv8;+v;?^D0E~Xw-&ie_ zHcMYy!0>#r2h|R189sr;yrK;N8d$js!VawA@ii89I;f>i1gGi)LL;%H@n-@n$ z2VB+~P+=gIBLG0b3{-Ni{10m{&X;-!w*XN<5E(hBO53=Jv-HmpO+vpL~$kKbsEKmz(%8*PjM#F4?lFMjsZpZm-wX6F}f z-@AYJ?)}yEHO&UVo|B)&WGPalI4#)CcqiNQ1romj z13iN!efo1f!$U*or>CaQPM#Sb&t@}3WLUH|o>xSq=;*ItJ1(JiBiz0RJW{ax5APHq zBBc}&RlVBW((6recHqqWLXVfN_@qgN+}6^Sv%o?IVL7q;}GLIXfRM=22~ ztQKmeO8@Xcwm%QZfni&4Pn$O`JF+p`&C-byjG~AWXAx^tcjVn-bK9$m5q{ziii+6v<9pz zz?#c0G?+C`v1K08HQ?xQGfvigb)}7>LifF zgGUfRB=Ofx;X}s-1d(?2ct8*kBz&;2c=6m65)#7X=+M%_JPZ5UcbyyyW7PNon<^_H z{s&JUw-8YO*JnGlo6iw>>y?!Ido4u*`#R0Wsu9wdZNi zN5ZM`@rzSuKlh1O<`xz{{OIn&;^Ok!nx}Q>KMMgOlh1~?&HH&L+Q~Y$p;H|m4)*nG zij#*uG>?PglRHU6x;5(_9IufizF_G5{%%I&GPM)L6+rEXo_3M#oQQ3o-EG(1gYGLu ziWCQebfP^)*l7@tPcz}BIHY@`4Ko6wb)YK&fuj)nd-~5$Pn|zIb^iR>f!=<{Q7q#5 zzV;13@M52Ug6*4x8j&EX7NkJ9wHM27AcA3DUSEGazwl^&X>DWE7_Ep%A)*o%5N?o% z2=m8YczXKmShZ49iU7nRwX(VOt=Hc2JWX|)DJmQc^W8iFApm=|nlpS2-7(N!xR19_ z5UC6Rger{0W<6H)!iLt3V_aupxiEd{%quTH_1fzncs@tR(xU(iyM&tM?R!g$tA%GS zO^)_ug^h?%G{e@ny%7rp2;vZF&#W!1<%+q!;l4~h3)Ve0BvdPPpDK~MB3TsmYbU@#kC3m)SW$tuDM&6SF$WnK(mYvWNuy>W}^WEE3Lr13jjni zRNd0U|J~|Kg=)s7f&hv=D?P{^LP$12Jr4+gAc%^%^a%Y`%H0@yx`v zOXtUihY--yI;2@K)J$3OCupu=Ji!Os$gEFx?fY75BD#3~{G|&QsCv$yWv zUt3@IS%=n>B*CB&Cxeb=LOfWyPFmG^Dg{b$d~wKp_MzZ7rg=xC1IRH#z4>)?3fKWP z*ygp`9yp-pKhu_%BE_Mi8>Xw4-MkwTb^@`dVvX}Y;qF&h03D*Sq2aR=o@>`n~PuWy!~d*NKEc;W3I-9=P(R~#CR z2?{7u3tQg$dylW48M-z#oO3}K0?k9ncf_ItYrRHDf>JAaweng|f39b+*U4uf5JrWv zCJ7H14+y#T)J_w@15I~_eshu~7P~QO0#PundwpFv61}o&gGBQIuy$|=?3t~#LSdue z*G$aQvqVX6q@qIhCu~9NxK6RA?>}6bS=_2I5F!Tt%WVo{98x^l4S!koM{abp;ar@azIx%}XFmDy z+4=boKf3#9W_D#`UBrZ)De@Y%H|%YtdPp2l^L0qq(kYTi+e3=e20XTd;a;YRoe3ap z{Mh&ocF%DiA4H46lby{JDVotGZN6dU+9jzvg=ksw0)SNKeFQ)pawf;duUx)3edf%> z_-Hnp6A^86rCN=V1a<$z36>$O>f}pGYm(JKp6?fmH5TvY&8fM$<@uEYg~xbD zloYTiB%k5^$LsU!r5oplr^osgp|Au3proCigc=qA>;DK!Th(f*)-%wPALwx#?=10+8gTgo33V>JFQO5-==lVKF3xO zA;i_q!u;~;g|icRH`CwOS1p%?rRsToPCm5Q3Ja&1$7>*nf*S<@6r##FEHJaU{Ah7` zsHf-h`LmbKO^pl>Ixewc>&>UWE)8kWWY|Fw1s>251kkWCY&2*jx^(`+m5UcEwaVki zb06Nh^Zu5dWbl(m1jG8C`F1CDO%$A?u*+c`xK3V+Yvw=6vJ*ys`>rj zacMfyBIURwI7N#6pbOi17bfYHV4IS+Bm;^73nM^Qxl?B*&rVKUy?kkOcsP@B4YSs! zQmsZ0h(yO#MG*)lwGYANh8qP0L=icz1Be@2#fNkA4<660tZ(|-S455z?#JuCqN9Cg z-6Jd#XLHlu0zZL&(cO|(m40ol={^gW=3f6iXl{v zqm2i_mJtDv$cb!xT7_1pLN+<88QJJ^rJ}1|rYHBz%?s-r@6}9r6n1^*j37WDq-edY zzyIOl?0E61^CP4EIgzFvUBV$UT9?R(C=A7oQn^sc_vd^2^G?nM5@3AR28j}_%m8-Q%jTDU!W}m)x_D8p7jHQqoH*{7C1mMu))ym4|-1X_9E0cq{ zoDzvVXk$D=44H&5eaKph>!tEmIoF%(>C0t$GUQmtNs^fV;|yJx`uf+cwLEQCq5?@P zorY|+MU0hdU@$_`P*`f^TBTI26e?cLW5WcfkR+l{5{ejU2qmh0Bmh)fRef(}b#|p_ z1QZc)f^BKV{cUz47~9qvazFliA*Sa{96&MT&z$I+dod zXl@DNRvpo5Y(Rw2nVOiqa`D2oD;J0Q2OOo0h&IO4H7mS{yvZcONs`g=b0u@|zgW7r@P3oGUP z;H`HTmR2(vN0>28=5G1}8rGV*f9SeU4;bHZGLGx}UJW4hQA-MmLU%LqB8cWOD}lf& zE04hl6e?c1RL$oy#&{Q|MvA4{y~oQO&`F_rOORYk$Z>{9v%LRkePN||{rvE`u|CHk zV;DsMDVE;48ptYPKo9}NNO`kT-YREuZoW60>&-hEg+w6H>1lD6qrn=c#cNwhT#px6 z6vPgYWNO0#i%wd{Xwxnt#xuI6tCd={Qu8XFF^pmzk`q9zozw$uOjg9LAQBLiJ@asW zb#`H^su^5G48qCA(K>U|GHcfMj#-}_>A87%Tw71!jBHgUf&^&$SVqjc9{h(JUn!YB zQUw7L;8ts$MEka-U}Z)CU<&sf^hx!FN1N|l)NSav-Sq|p@U@;@T0J*0In>{$T-O)_ z!Zpv!xb5FNw&2m)+!0FN|M@PT>`N?vv^6=s8!`YeJckY*}rRdzcU|dX;!66~t^rkp6>~@D0 z-&gM;t|NHlR3Y6Ux5J4omd?9Gi<$Tdae7g-N5=s*N7lFjNs;0dp{tsFL+{+D20q0O z*uGdpuOlJvLuzt(^vacsS1w*WGd|{$Q!_PVxa#|HCIdo;#m$k`{k38&5=%jZ_mCpT zQA(*|sd8_2?*8Msh2^zstwst+p{o>2=;sF-HiqHf^|fel0F==>pUZsq;~yLB>(Rbe zs0?dYxo>`W`_bH@Wq-m)0u53}QWQW$(Yhv}a>LIcx!`L>ZpO)K&$AnIdqjPp0D|bO z@lZ{Zl(AHdDzUhL<%-@aR)+?9v~R@lm5bx0N^Nd&3qlSrA&#(E~H_U7wAZ(QS)RTyDH0=rSR@wYHta}vJ*JrwWahE{%rjRf*!ZC#nxKFHAsQ4w zAe5Tp$p5tQ!s}a8?395)h;29+qo@EHg=*IA4O-hiE}O!GoFW2}#sW?B)P_=MgYkwl5UlN-uwiRzdh_~~r=Gg{nNPfY>+Zc!|AIn3t8Y!vmLC(T36LW<*p7E@GvY~QIH0@*dQoMQJ#`)_yQuWh^l!U2}Uu7hgex%R_ar$}-9(QR$Nd9#w@P_WHQcMK&GmiJMpCdbC7&Q9LA zesywe%yk^Y#y7g^d$EmVjL~S6lG^Dd+&p8n(+YJ$;UA7tj#4bVyt@8iX7=Ii!d9uw z!ivas6@Z9D$CfvwJt+`~(FpdOBuC+oef;Iop&{S*NGaAj)+JNNkn|lLub$#xh&)p38E;+B~r}VW*k8QswmWkgw}&ZtcfZy4x!YlW~)#& z+8ATB7DaI7!epUP*(z)6*SGHIM8e~~>@NWafB|OKDodM>r^oxQogbYT%nOM2jCIsp zC&}VZhUPE`1R$ch>Q!sS3J|&(CzEwE*^J{l%5}(E;8>3+jWk@nKI&{w;*a=m3>rq8 zSzIj5At1~wVvI4GjjxT?e$CgOHoh^;5;|qUz%v!ZxV9Em7jjDB!QsJINJ`ZV&#!Df zm|I&fdZZLOiX}Ws9O?}sEV~vPq}ZjfJ_Jy}2>0jd>8oc5jd0>vb^!*q-evRv!H>$< z|L*2bm0cnhM+ATy)@K;;6As##U{6|9dhKAi|30 z%`B~4o<7%;&(%B+5e*w{OvZIucd8b4m+cc08%{82Bme*kLAgo*7uVMp-`E()-?=n> z_VW326Qd(pM`>m@#EN(ObWg!G zDu50;Wu1`0PoOkfPL(Mao#Ip?ZStoa%?%(tOBn4AYz(%~X=ap;LZ!{@Iij?apM>!eSaUI81NEDm~7h}*OiUWgciHL~Mo=hV9 zq(D>@Fnlb+!pw%n_}Uo5+OT1^Tn~pkbHI?rK`XyV8rd}?Xf~k$1S28{34M|I)vX8f z>#G}OK~hRt<(uWW0=Ll(&7sK^K00=0^2{e*dFlRxN4M|ZyZ7)>)vK`x zA%&iWIxM(uK>9K?#r9~ycgL=G_;}|}r9|ZZ(S>E$g-JRg=zQ$%)Cn{k9YwO|81~Cg zH`7t+9GD_Sw;_Eyc@PNJa8h5)g?s71iii<#WMJsx)YLOi-#j}xnaQ}?7|-{s+Kcl! z7MR?OB{#&_WC&J&*>1O0ipX^x7Fk)}xc6x0{_Nsbu}lPxBIPWU_5_fv~Tn5@V%K8 zAUE3fMnadEi)XaDCj@a3HN&mBt=ZM$#fgEd=SPNmTw&3ME%gz`FZHBg;AF=ZKA|N* z5CDY12pgaMsumEkf*Z2_ts$iLAYy`&rZzD?t!~3-8-hT%TbAg9#AGx4|B(<8Yra`nDLh)*TG=QI5|N^Sa11!IrnVQ)RpY`T_IJSkFrcf< zGgl^hdx(ueAc=Jg6a+Ae(Pea1_8)D0>bKTzqEjFPp?juAb~1K|dc)#J0146fTOTRZ zq+Dryw#DDk)%~vVVs$`Bg;Hg+P?#7Uz5jR)iGbM;&fUXp-4b<_g!n8Flko)Oi*5Nt zsECa4{kg>l^UG((hp(TXzHshre@{+Wd}AV4W%U!|n+ZLD$XR%$V2ew#(JQ<|zDMgCT(e1N%%$g(I=hfZNrk#Bckl2Pes(rEhX{);+ zq$}qy-ne@8#`ViR*}M^>wJBFB0rwGXMFk;gzf#{FHElLxDj>@a2na9$qU$K7RJmHa zKR0{#(d_)ns_*-bqKr$HdT2@g>>{@yh*b0as~65afAhN0nvg`qA=;``zW?^Sp4Nnk zwh$WHUGlH`*>VC%#QvJu zx|>yK{f-MnU+*Rl`+^{#HhOk(d1~?u5itvq@_p_3I+w{rqNM#q+%OZwYC3GI0s=w+ zq)=s*hqfQ74G4G{+i`abco zmtJ`Gna8tpAKtn>x3I8T*a}Y#!{&nuQ=~Y3*cBt0G6nlYw^2V4PGik>Po8&20Bs9w z`tykAxm^@#hZS)2c}S7s2+^gjTf(h2A_}uaUT&?{0ucd2cOP|PA;q?6;Qg_Oz*;)Cf&qw$K70lCRCg$lxbmd?7kC%OR|4{oOa-DV3^@L(FV9 zX1f~j>w7r_05RGJ%DN+0>t~+<2ndmK+^o@_FoO_Lzd7Nbn(|Kop^;`PR(lgN3b2lYLKJ93AX&1;Ci3T*mSe zF`fkz^$f|Im3ZlpkZZQ?No_vUn?az!aB{bKI0z8Y%KGNi#N@@V(zZVG9Yc3Ihlq#h+Kltd@{fC#&oq6i&#qrT$ zMUL<5q)++QbY5eNm5>h&euy!K4J*PMS1w<_e5F_}e01mjdmr4ITU@XeK}0OAL`H{; zMv>aKh-ddiA{aPYj=w1m4SU{HHP=L$VVM{$ig#ZbEjr6y2%wI;-4QpJ zHtXqqhnOP8Nkq4_?pEnQK?E@b_|%!9>A^gSu*hc3zq?jhDVBo`ClPW-8=F&(mL+UC z9RUUrm)wizrk{D{=EbS0!Tx@qjpuoRGt(#tj58Y$IBbq4B&;hh0xbzdJDgCyB?17B zLqz0h|H0hKgW36+#noD^>JVfc3f$B-3phH@R`Lr()P{Rpw>Tk(qNDyn1o+gOBDs7Auzu$)lzMiA<#IPXPqZC@=ya&1}xC z6sN~~FP|G3>dlhE(6>&s#)vCU+S%<0#COh(EL>0+_WAI0<6Iq&Cj8xcPOrDg7R3k+ zk}(Xu1Y16l6d{5(vR0_gEpIKX7K;^M;?k_ZUr&qX(D8^FrYHD80OsoXp)=#XzSe*a z1~y?)uxQP}9H?f6|H0aeuNSTotvCi5t)HL-57tyGVQMANO9=p>U)%f;rK+6%sAV;H z#fq;f4-G&)J6_-@F|K>K>`4Tka5Y^{`+?y-gz`P zJvsW+^~=)}Np;oH_U_O_7<;CZpzH#mD{RemM zKe&7Ufp4?`5R!d?5o6VlY*s#ks9J`<{V3bOI&D+b`@}XXtcFPUwAD({7Si-#|3RfV zY@}V_37}yi91YnLyVCr~uBz$)6+rE<+nMHwdi6FXm5wVZPCB}!jkn|`00f1f9_#-P zKYRTT{MhB*UWWt((fH=xLg8P&{@~Z|EProiy`l{OAd#@7E46JA-z(egqzH&YJTp3R z;r#h$p1v_QGz=)(m{P4~J#@rI?ofz<$;C0&c@wMai0_)}+e>?57h=X$fKn`%AI>g5 zoLgL3-!g0zLDsRpRvOyE_N)JPJVSyebiYUR++!WE{gf zcy%Ae(`nDZ`t67y!rElUt~$LFZ2XV`3rIFZaGk7HWutviPWw0U5py8`YRmN3+)N*m z=X0f|`+BotkAbq5afn)*q5kZp^Wz^qSP&rqB*9=y880Pi2wwvC$07ux9H{yH(c_JW zi(BJ^`HN={hAKtn1)_Wfo zidz5zK!H(hSKEd)43X^!njLe{Ot0*CTXf}MruTS2k%4*S1T8%AGU#$i5n#H$c(Q0{ z1E~V&1R(8Go#HUs`rZkk?(2NJZb^Gt_V3~L6e+q3-Q0Q+fHR2y=Pz9QQ$POH(C~m5 zPqY>gB;_i)es%KCTtEM(tJOy{%m3uN_y5MLw>Nz27)60F#CA2Od}5KtkAVXadq7e? zlfQCd`so|jFJ3s8b+f+qJ>v`8)2RTU!BItwPYC^pgxp4*iU|+Zj<|pz5F&CN(pt~2 zu0D7)JG;12ELVX*5xR;JUVb{s%?`l&h8WRk{}V4hJ2gJ$`&ubt&E%>dyz}1U`2{zl zj4^;sx`RJe1CN%=3oGS;9{22- z!L#H2!@XI@QNY5+MCWQ@Sjhn4d2aF0>!dPBUCqg?R}fFPk*uP_OE6hbCSqU3bYC~S+5(Lg~3DHQ+e z)Zp}FuQnQiKm;%>`+zjHxiT5@W{V^L+4@gcbk?CFiV^}5A^;2zfDg(yU~(`{<)mEt|>2%B%U& zgF^E{52J7FCO_kn2+l06&M&VI_4i-9JbmTj^k9FVVK&+@GaxjaqLv6SHs8dp!6J9& zfXFNruSTRsM@PRjIr+(#UwZG>?f2jRXntkU*S=7WE*IJtj~SR*mnWf4C}IISV9^=n4^#p znEmOqqg#c_R;lJHH#o6e!mTaFN;yU%gbai&KLinl;3yQpwUS=ByL{`x%J^Vza-@HJ zxUat_lL@^d3v=M0$(CMy-yW1k%kz_>0&d}Fx1+fDfan>i z_-3nES}#=AHY|dE0m_F0X zMk7*S1t%p{J?bcUU{SlW+$OyrSYJvfm#Q|$qXG(&-t1SpC>O%k! z0%X1UE=o~3SwdtMXs|jvOvDFsh?Uo7q0rykQ>j+$fUdP>!%Y-i8{RMqZ(oCYL(RsB zFaZQ{9TLFRt<9x3H{Si|-t~*q*Dqfj86I*Jd%nj_^Hs=FMt{Z`K!8M3k2)G_-!s~G zl={?5FMj;_XO~u%fAGdTAKtlJ^=nq18FLhU*t6Ik*0Ei*e%J{KwW75?MG+B302g5- zpSeES|LoMzc#m>Gs#U*KGb=@JVXJz7wY*d_Rc1yNz9f)F7Cpt$VVlxU_hKndHJUp> z=Url7CSWIc2yA$-+2)pX+)0sQk7(6-#6|dkT0x(x= zSo5!58vcv_+pqqiw;%kaU%&NBKbrL*@KhW|A@x=IX+mhPV3)s)f`h#S7pA73dHUMK z=tw@-!y>-tLqG;#U3mcj!JZQ!7DT&|E>^Hn7=nnIj01#g8(a4t&)k1Jzga91h*Fes z9I)12yBR(^Uj2n1iL|dToSl5(shhs%A%Ga;X59DgJ^b*_J*AX&#VU=a9G$)sk5VK6 zh-9>{y_%qdedm&76hLH=g@mMxuPr|iG9fMbFWclZ zvjgYP_A?s*1zcZLAOZsupcNlD;`b8&{moDP+tQ0btTZqR2!&~@d*KdSOq8y=1`7fb zh=CO7g5J1A$V$0lwJWjv4$=9r)LD>*I22;3Qc>hs1`Lsm;hOK~Rc1S9@6AWxT6z70k3P8f@bdK3wM!Q!$A%RtUuza7E7gg(<{;0>aj3y9dy;|$05(#o zR*7(OeB!5n;wztg<)wGu|LFGphb!x=A{^2{QPK`?20LEs*rxv11{fo3?2y4?0A$c{ zpB@?f?a!Y5_~qeeFO5%*_Bxqx6T|?3%*@(sZB^d9yZ8&={P3SWSg#sJR9$VKciM5h z+VHW%X#tfseyoG zlyhcm{L=J=XP><>(A&pi3^OxZH!!hnc+#_rgoi&h@hh188EuuVD8y09Rb+(cmsdY} z@c7Z(Qq8L=LPb{clUzi%ZjX((>{xMijv!p`8|LBuzAt~~Qy9jXb=?Q^i{E?eT~gsj zT3S*S?bDS2)_)?^YL!x99W!Ufzxwy6|1x-16%{&z1p;A(PPwpBT%BjVS(|ws#0&V$ z#O_xB?TOV4m;q8(2S55F^qwgf&Yc_nb0G0d95H|%MydZy-^a>c89x=`^dHNWN=pGBKMDdZ^2 z5=HKPlIe-4wm7F!FO@pU0^v5l-W&xQ&#w=^L>53|)|b!pUpY5m*Z?T5AE$-_C_spU zKmv-G`yKtQ%CmoV_79aA6_-g+fB^ymAgBb1np2plpm9eGp6!QBZr0y;qx#Wb%Q?Eg zzn_!}+Dk}q9O5+4$i=pxAJ?~v!VCy3lFej?26{sq&}7GNdK6oHIxtAGPlPQFm_;)< z%DFT(@$}V8lVc+QVvG@iP;1tZoOru#C3XYA&=0orIb>YTJ_egJ8!@D!OYS^ zplrkDhIZiSu7yDd=#&78oGSsyh5o*;ULF6VpS$|;s{@%{2arGu`zGvU7*MkymR81G zMwhGK{?Xi@{rc-~t(75E@O7Ss6bFRPi~88LMxKwy1m`Y zzXXoJ3G@-*VA^Q=_fRQP9CvhMyH0FrfS()9{kflh0lXS0$NF`Svp)cJGo!$T2?G)U zieIV{;2-$P)1SFM^`CzIhyU`!1q}d55FCCSNC{5zR2DmX;e|FV%T+7$A$xDoHieH1MBtm^rNH!=!OGjt{&y%9(EpFBjiYP#YNSJX{*1?{f zlg~IAS2=`Aks@@JQVI!?Lb4GN1CA(}fXM%b{f`A$q^6Ch**9X0c$%x8E?2#p&%S2O zY)q&;!r)kU1Rz95g=~#*GLnYKVs#WRtfVfiQ6*MqUgE_Tu!_I{Kw|Wjv%Oc&^=meO z6jrrFnj;BLBqspq0l8N_|6i{Co|1MP+C)%wcf)m7HmtJ1t$37_C_ACG9|EA(Ywv<7 zIoUiBh1M&FJOi{CUYoi+0sy#TC-9eb-Q|jAI4DL)F*5=BgBjX7IXLU z?1PzwOXnt^x_WV9bVLyv4t(1uL)kWp@D)Z#go+hkiU1q!X|0s=;tS6`{q*%acOTw= z_~`b%2gO=BNj)A0j@`01M#LsiFDQYCK{c0#2L9M9m;U6Ju8&R(kgkf+TsDFx7&tK2 ziEW_BA_8TNET8|xmEX8>?)UtEe&t(po7ncyx)fc4sE@>3$gykQDNYf#8QJ3v7n?pD z2)d8}dXn9BHxZ{}N{TK=_cqby_qzn}=e~5Kr!ULCXWdxD7UOm29~ii3jX7x*K!qa6 zrRw>qfq(QTKL7Ra-TiNV{oT7;HApy9fS7C9lMI_dLj3eAFHfI4XT)gZAyGiz1UJPw zlQw#d@auTE0cjCPCj!9Y6+csOogRWprRHms%c?|iMr4EtAsOGBJ~LdZ z)Rxvuu5w}uu4ZGiHj`{1ZLBhAyH?Cc|dHwO%|MkD|v|pd~QUqw(M#83!2tXpH*Kz;-Pu=)) zzx&0p(H_*k)XHoPkck>cI7s*}LjWLQA}Lq;$9lg0zx(Om_LqP8!`0#w>`*CogG1Uc zr#Lx?H<2f}Q|hFF?yV7blCLf#fOd4V1Cr6^6E8k{c5J*_t-4CFumFAU?H_Fw%ekz})`TjtbZ_}4xpnA?58)Gr zjW7eC(|;K$16;E^JOPOPF9;Ga97srxnD$}UcafyEyDph2qH5Kz)pS1R2s6ezLs-Tl zf5BE=T*#dQ6SBPumtojE%r#C<*`&6jHidaQWPz zW(}w!59#*4Fb~1)8SwH#f1~*6w>HlcZ4z7Su;6IDMtZX4hBLvc3IGV9zx6cKY>K^Twt@b=uzX^%H!+w2G-;}DD7 zotb|)zjXEd)bls5jtviKV~nv=Ow6VLz(7C0D;jYd!>iv|zX1V6!qef9MU2+WeDUJ+ zi_bjs!*|{ed54sA=m3ZS2%)$e*;hXO{22PaR7(N`gusmT1w?Gv#pJP<8gqMY4|j@mF4UTm=9jnNyegAR-78T4xmDu08tK zguq!)c-$8u<}#UV)>+-!{Pyc_|BGM$)|>BsP^*@6u5yR~;`{Ta^c@0%gd=&rzIJi? z^7Q$tS5-=}u;aLI-?}}&xSY$m%#6_FP@`#!+8#|`+TEJb!Uibo3|?RkHV2_?k_1Fp zpxY4yAR-`@+%#izxVAFcWL7z&h_v=ARj7@Yp-WnqZ)}X9ls-Y*k<_6B_=L#1-B0|{!QS#A3-VQI8pltZH(5Y zp`9k1VpC-w?Q#MfaoA)_&|rfYZ?ZcC3_x zA%G4PyQ-Hb(&|n_%Smxu(7Yt?I!OD^_GH}NT=xIZ-hanimLzw9ctm8LbKUcXs7|o1kG}1^TKSBZ_mSqJJi`4@9trpmY1@p22!Z$sgoKbm(#YExjqjfB z>7Mpo-oE$h`FHI(Co^LI$Ybxl&sDwZs_uT#)%RU+N?0RTxEwh8)!@qQ;{Z}N6e0%9;B`6Z7uUY?u#!!JJf8-Mt@m)1SO;HlFDaLCO;ASn@FndTpUS zuDSlTT|K+$S>L}+1>naaF!2x~5_{)?(L;NOB4Y$7=cklZRuBYH2n120QPnurp8N;x zPlTcIxZ|9n5G*pF8ypFMkUhK5rWnzVTOt76=_0(LZEHarFFgOs>&;G}Js%atb0fuh z(zHzi33M0d{Q-0ljY(T^g+AS}Yhu=4bW-uqsPeJ`Eo+-<$qzr~c37zjurynCSh zAO6&n|M&+UDSMVXfdB}*bYM0W&F*r5F8|0pCF@|eE}9?u`g@KJRhb2m)*UN-d#A6S zCR_ZsLpyYX)V27oFY?y>weJGC`EqX)x=m)+EqwZI2msyABWFhn@6hc)w}aHWPD+hf zh~EH!JaS;-&I6-jBNS)ASgh#9KgX^gSZLuF=tx58jW2L?|MJ$e7>}E*mY;XP(ogEb45sc zet2x(#$G>2aQ@2l?|=50-~P;(-aLQFvhh6?dj@UH&FvboS!!5a!?X#E7J~vM&0?bxeRC!X>b}<9E{Kbi7o*fSEoLW$j z5WP|kj_id;+&2Wk0(8yR43-GgYR3q$b0vXZH7l7ZM99_-50#D_oK(PtZci~q{yyxt<+=#)*yTlxtB5j{_5-e-tWWSCt#f!hpX2Rzik99Ds@vJBzvYxy1h;)kuh0D3FbB}>HrsEv`s~oVlisf5aP4|a z;(s7VM=K@IfAAw8|B?Ut#sBox3q~NH z8QSUSZ==OYiqbrR761U;{;)^t@slS92WrL|mo^tf$l)J^45Eigr>vf~OdI;l$P1{9oOC1rxGBER_51t$- zm5ni45i>Nx;Q3cy6A_1kT%|3c8cL zg;0@Svu^7J`#w9>2N(dBO{E28A8EDGVX@@S4ayEN?}Cw>fr)I)p7FsTh%QbqY3;E{ z{!sBXo|rRg3XSc$QVR9%--H}(%-r61Q01VDTU72E%RDULTPdHfd z{Y{hC{d#+&Yef{HQo7aYeEDmyojP~%_#H8dZShHy$9|(wtI3?vNYz9I1dT{M3H^+iHEPu&RkoZPdjp3d9an?aT^jMh*XsN zp%2{qx4-%LXqBWLASq!0VC)tu-Qye6mm=jB1_6jQil^?{tv`Pz?8B{F$iSO0BHn5A zHXq?PL^}iHb|>lgX6xOy`9YptSpa~p>#5sI8#dsrsi3^OMaB-@KJ@k;guS(w?(YNv z4^LDSq3K2me%XKLN9)VoeN zikpK7!gn1#boAH}7DlAJy@W&}?0Md2pLyY{FTD&}l`CbD?zTH~CB-Z>5+a_zI`i_I zXRppJh_F^fN&##X?bS=06{wrE!X&9Eh9-RU!Ta}2OoTy4E6pMd@U_?9Y_!_GRvf1Q zPmsautyaGp0y8r+0D6P_K~*8LiQ(Wv?&6d~X+CoTL_}S#8SRNg006l(!NtPSO^wi$ z7r1haRI|~FjMZ90KP0En3;{y2939+05rpR2VnZp-@%dPB>hB_ivw4!-Yu{(z5M5_6 ziD1~|?%7)P?PFcXR$$?ap8@{XX-kyhS+SpB+R zTe=@G&};xua=1@E$9=9|fO$Zw7aT_v(x!Qi>t_f>DXo<1-&xyF>xs{9I0rxgv{Ihu z1z{AoRUnLv@5Q=kE@E&EX#S?kYs~7f7EsvdrvwICZMDDf;w!J7Ie*U`$L>13-_y#8 z0cHtJ)N0pP>Wx$9E}gw}rO{|4rxO6M?3$cN%gvAp5d>tGYNh;vr=I-P-~OG*nytZk z8`Ilb!9V~3;Ul9%KmN&wzxmO<7#fKTAPVPuvS;2%9u>vzB6F0x0>PTQ_YRNOD%16L zZX;@kZhzY8rnRVRKXJ?V?9ff3?H#gftr^`OK)1Io^cGZYEhB4(c4&vTMw^AB5%vxH z#jnyoxvl;6oEK74C-zWCZW93(g=`~W`Ey@?*U9~(fA;6T@alXMiG0Qv}~ z!tNvjitu2y_Qd0lAtEyql8B@Sjx*bGsr15Yr@#8rs{%*>T6smj0YL1gfB-DwDOzc^ zzw+{%=Ppl+SgkNoxD&^MEec7*&7ekW+2-l52ys?#5TZ`IbH|ZGcO5?5X}1+AW~;P* z`HfREbMv03nHhT)wcL=pf%Q%RFgXGYl^WR3pwMAD$*EN$>4hnu1q8hEV8<&%81_Cq z0cVnn5d_LtZ0TNKFE&=&9XmYi3HLv~4YTo|SU5Jk3B>pYgtJ)D4oxaBM1cv8#(?SWt+-2Wm81Uw-lB znYpEYG3W%q$fDlp?nga*+ zJaFQ~b1%OHnMk?Km#l53+)#6VRU{%B;al!G^y7c}f&HU3Xm>!7AYqd4u16n8DE@jq z2Ihi>WBgvMof@hf9xh+4w{E|j+&6VTyxnPMJHMCSbpm9Edg(R{0edTHM=0#j?M!du z@wrCTd%qSZc_byIf`|^t~yG%%ml&>{( z@jA6wMM_#-nOpqKS6*6Kt@|EfifCkxG`D1MCQcFpNYsg<$?=g#?z=Av0!1h+TI(~H zuAaSc$@8>`B>d?uB5p%AO147j?aWq0kjiRsH^;fl3s#}C5+y}a5JW`jvZ{^Qu%3Vg zm|Aw^6V#V&6+Fep)?3l&NY%Q`KJFmx-sa`%C=5!OyN>Pq+G`g(MySh-T?0ny znpKG*v^I-wop#+TDWvajTPi3c>3)|4DOqdxj#utHIO>sDmlQU`W3#dx+~K-aNmN08 zrhUhcFMn&3K}jT{04)HbNEhUhgG$z|a5i)lL`!z*B?N;=I+@z}Zn;&{wdWlGfQtf) ze?eg8D6*+UwTda51_!W zBrkCa2MGf(DB*T6K34kGzw*Jq{+>ILg+-9Mt&ZD@@9WE{B(?|z_}IaN_aDDIGA0cw zij%5{C`~Jk*5|+SV!P7;1YsspTB|-z2LcGbB#u$i&QTfJC9OzNeph>`?-DZjKP))wzXN-aM_eN)j>mhevvh?aePPsX2(uVyy*X^aijx zDQqD*{3*?uoc3Re4!JX)%fov?RdQ8GhQ1s41toMQ(PAQX*)Z?WQ%M%LOI^h{Pt`H8uI6Cm;7c#j!uC@bxzw601@5U?ubZ4%>3*NuPm*s5+Mi!h*rw;wB!w#B#)5RYH_vx znP*=J!cglZkfgAEb4%D0_c#IoqGgFp_|!uW3{@&o6uM3Jdb9Q7tFO80Z5X?hH;k{Z zF(Sg&0tl6csWc?kB)&e$zwE-CEhoS%sx+WS_s7|y5g{Ia1z-x}HYI zViq8R-f0ofg`6XbJ2M)|L}sMs-+gp1M`5zOCk{tz`w(=^znu9b`K(3pmz#|(+b)vA zpMF2CZ|@Z(M~@ikxe#177Ryla;J%|1hxZJ|&IOt8Pdpu6?42M8kYlg~s&X{j82uad zKYKBlK;1@0#xy`MH=EXky!+QGF>y6QWENjUX(NKCJwhsCB-=Y%w?Um#L?z#gWwQVx z853C+fPx=P@AT|?@22`&EsY8*P73j^aV>&nURquW+8w0$NO1%N;eo+{kA2|jfoe%W z2rwtIvNpvsLj)0nAUb$p&qMd#*Heq@rrUaz>*`p<*zu?A(cgLB-JklKA3b?u9HI~v zNtQ`1ar?Qkre%sm3eX}5p@>M5UTBBjLb}~d$aes3W}~D(-PTfLhqglfJ%Bb`Qg6-( zSYKP)F4`HrJG4VFy=6P833csl3nGS=&(74H&WnQBCk<+P6Ba)8`GDOvgGjO+pWIFY z%+zUr;|K2f;*Wmw_djp|g+&fgBCNGiDsLqwJEbTr{FRs9Xf#`%%HoW=wxw^h;_Feb5nPo2hyvJZ zwNBo1{LtRL?M{b?1RyZ>`Bz>Iq6m{r$Lm)iU;5S;7z6-j>ke+F(lB}hAO?VQCVlbf z^!&kd0&K86dJt>7z;q9HObQWq=#yY5rK@((FZu1&R$vUOcXzlGsUgnyEhK2FYN;Lh|3~v1UvEz$t)K}7BeZeJ7^9jFTa!XP)@yar z_d-M(I38$ZD3$vpjv(N^ts3|AaMd&cQ-k8=Mxr@Ac!7+?7^|&Q2_>U z5btfdMr{Y>gdDkyKPdcxePh4#Lm&LR-}6|_vl4ZL2pCY@RLT#Z9=X1bd4V9QJj0xH zg`!{<5s~F)m|(ZJ8|UA_7{|6W?H$aYwP?d8UndN-*3g$V{;hM%4!yNh=Rm>+k#+{*4!vDyJ4gQYP0|~gE$i1lza+58=P#{B29Q*O(sZAV6kACEnbj%D z_Gr%zu@vuv^nhiI3l;>=3sq-n*M$Ec{?hw@`FkHbG2|(+1hMCMtaaxk+-)N`x*G=| z<3qy_pL~GDGRDybDXV->FD|dV^xB(1D8QIRg_V3yY1Pvx@qO>y<=OL>XFN}dIMX8q zFm6oJuX$@a7S>%%5R&uTsnKX2KCtJ(6DJz&W_rxai?6@2v|3k+Sa?mB4(apuI$GuU zYb`sIjmi^1Wnj*MKDh@80EnPuNB)Sg2!N{XK8B@HU~q8_J$YbaJd>q#-VT}aU?;>@ zhmn-z^|rjxlN>gm+%Jd%Ac$nbVE5F}kwa4)23fE6<3V`RL zz|z|hqR7Mt+$C2@uK0Brl-2#M71M=@g6T^P$-2Y8mRIY>S|Ca?%6dzdT70JqwH?}_w}>_~RoB`Z+xCa%y$0fR z2mqfybM5?MU8&eb#p!g|dsAXC<@CHhPwR5-==ull{BVm%2vI~Fed0sMKl`KK@|PYx zSRoMMIC?5qbb^4~0$R5V;xl5NdhD@kwanHcC!9b87Y9c8+{>@mTP;dX1#+-X$@j^f z9+Z0w5e8B8wKqlBGwnLmz$~UTF=U{ zON0oOQaO+Z!!Wd#<8c{p18n7aUA4PKHU}n9E(@$Sno(qsR35Ay7^rz#2{VF}e0}=j zl`lR2qJ!-v6H&qQH}68l;6* z@F%a%p;jOqJ20eLS$F-g=S`ot>w14AQ622OB~V(y$VmDB{=xVE{P#X`e54}6v2|T^ zH0W_kdW&c+FAYaW_U}J-^stGHvm7uX04bIHH_lx;d+Dn7vMYTx=mBfERVHZF793S+QOAG`6Y*G1x)&2J%R?wZ-7Q+WwWl#hFmm+_a zs)*R?1R}-gt89YA;7{MZZgH_-QF!d&uD!cQO&CH?bl+B}h^bze2)Tj5)$eh6$YRp~ zNS84v5Zl}$06>dF0gO&!`hENqi7()5g>ypVE_jk^y4H3UBBpPzsFrZzCQ>c0|PbB)54tiVzT!1*(=ju zeEtOyNkchP86qeWgZ6RBB7lG&c<oe_Fw+sKm5M? z4o>>g?tleA1wipx@Q|M2u*QVy`9jvZvUr1J-R9!MgvzDo&M%%?s3YE1e7>zJv+eZG zZr$6M`tBI)(9NSwD>Yl7ya&*x_DybKA9pDoJAz?{c4$Mo-Gp+_Hf?OK{@c%2JDs z32)Uh*H6|VfcVOL;^BuC5i=(?X>3_2MU7VbtFOF)aVtdtBuO>lX&vJQaY=#*kuk5I zy@==zP1{!LvuC;?8!^5twuhkA2~F5}?_-aQ4-N*MKr7NpU%58-(y3E%KBGVOA7qmKONUHs|GFqGhwK1bQRUIffd@cJu^&*OfVfE=<1I;rlxnvE z%i^4Xy79?e)AAG>k^sO0g2sk-9N9HBRx>6lo;P;g^!778`&x>Uf;$2NXlyh&9#K1rMbMO1Z|LN=Ae_+&YGN#AGOX1dAL(c9`{MqrY zqeu7bp0dWc-Q*Z%5d=U_tCwCsy|l8LBzuk<;W+MTo%sm}0HPu_x41GpzpOMt=IXE= zQ2WM4?ivlvF2W$PVY~UrgZCfVySLqLDgv$a+{(&VUwJKd8r!@^zUC%z*Z9Gnt1_g6 z+2!#O(p5b$DQpY;OdBT<^E|av3ig^HARAHTvC4t_0DKURks)_a0#veivoZ+U>$Ezd z;moZdgMIqdH1!%t*KrYG0gmoIx@T;tY^}izb6TUh8&l!-P2O}%rchVEV)lRfod|#x zK(NR5k3MjGPqnP9WdzEZj#4Z#U$UTp=CGpGr&b>S$+-`+VoxGqiqU2eC?2EMr^pRj z0N~(pLDZgUUa$)hTf z|E`;)??*wzP7rlE9Yi-t84*FGT=FaBGFyuXm}aSWE}6of)@LqWdG6&`m5#kHC6(vy zH4*M0f=EFS9>43@-ici#O4$pHv?RX*uNGuE@hX!kZ?WtqG|HDuH^#Azy z2OipkY$XbT6eRi9HxTuCk%)bM*leAPqm@dfXJ4NA)XP^95H{m#`j*m;8NPYC&AM)f zc4&*Vjq`l7NuY1JXz4p^H@)-Ny-m79>rleg!UDL10lnpP{c~=8bzpnd;OnBo#7$CM z!ax7gxz9X*fqW0M?|W}qV;uGwpxFI3XY3UY>2?k>!ayP>k|22O{{6r4mp}5)zUhIf zisugAMxxw|h&N}8HO%(iyAXgISm*vDLf#-PO zyAiXqx&+irRApTX+hNc#NCasj=uMk{$$>(^76|$HvArX;l5rT&S`6Gg1lVhEZJxH> zIPX`x?z$!LPre=kz#>Bxb@J}rckCZQww3{alF-TQC4pigNk5`Ml%UoaRXzE=`knv$ z+BbB#q`?TQI0Da|V3(qV>$Y?gcm|Niow+ZHnQ;Tf^S$+tz}tN3o49(5UEQOCxueas z)~>?NO@^7H&|qJvZR0A+R_@5%*|#q?9D#ipAczoIZnoR;{)7ks3bRsFtyTc~#?=Y} zim+Dn+UfHzzj@mCeGvx0B=#%*FUtiju`B2MpL&vzHULDrTl?108lzicbOn)!kVr%< z+lp2nK0NjReCtDh_*b6(@$Wl%@~#PD<{%P5KmvF8x*O;l54}PNp#ZFvFR-V2h1DSO zAwnc<*V}*VSHIef!n|0%E$KF{+U-Kyu&cF0H;s1C%#CTgxU&HOB)QjHNE=SpwKi>w zcW)XmdKc3=Jlc_(Zy~+abM7rig?e2Vux{*+{rW4X&t5~Vk*JvCcD;HfmT>PF?J@N8 zg*f0RZ#;;IFoU&0$1mXzf8+gM`s*M0^N$|Xh|Cga0!R+uO|-+fKRd ze-v)d+%K*Q2()Tee&z4zfqqD~8h3D7cp<)v4e&5lyU+v<(KNh!ycU2GkC zHS`9$gXS`8BOX`9qEjGFL^ig6zZ>MK#Lt*R#CRy#tZBtEgv zM9Md&PfBSJ1P~UF+ zZ&>i=u(eGW1W@38S8+WZf{0e2(P|3|Q0zzPqHAlF3au4x83%WP2rES|yz=Imix+)Q z3tNW)W#U3oal%L#hS9EF;}4!V!60vk{kd#GLnJ^F5oRmQ_wO3{(f8l==u{oqc5m?pQcm+mj59m*$H!A+ zu^Yj`-1oipU(2${my>J)qkxPK3_f`Oy~fz&dT03|i+EaJo}E8?>8jS4W*c>8MtV?{ zr?T{`ECPs2E2~Q@t4d{@NfEOfpYm&K>-inmK6hDxMzd9|RzLW};|Ls?$axC9_~x5) zi%Z(mY}Y;ZYaQy*_}BQc>k33f5wL9IaieQMWj92VefktsOkZ8%m~;rl?Te=w0x$!R zvFz9O>d9kbbsC+Rj8$0;y*V6WQH^@br6^8oiv8NqJJNDta)N?l!Pjul9ec-WWox5+ zAW1)i$eFmwo_K*N*E>KqW20|X26e%uJqRoo-y#6IL)iqXnob-VJ8^VEYlw^yAOOmZ zf6QhY03-*l#n=u4Lc3b3Ki}T-WAmR_iOPtp$briYg%bA>=E_MWZQt2nta&Oe-H>4c zRvN;Em!RX4c8OM65v2(4jisqw3o%<`wrqydCgxiu>}d}G(&Y4r7=@9E)2zhTr;IC@ z_ZvKB`>3zHE>r{)qy}2;z(f&JEJZ~?ge&E;?`siW6S;`LMiCZ}XI^-9`r5qK+A?Q% z2qcISBBHPWVi=i6PChVP9c17nssCCWxW(2K0wEHh0ss*P-~)q|Klj+t|MutK_eVea z(ZB!wPu_88ToKp^geC5BaZ^QlpwmqZ!sK^}R zSFG`VGc!|im&x@_=Iavx*KND*&<@>dT1SDq!BQM{l38={JV{==4*gDNy7P8P-CMBh zsvg?h?CXCO1N_|S`QcxG>F<2=iK&AV$jsItVbO)6pD0sz9bg~iAi?Wx$= zKB?qQmZe=fXyIur(rkAK?E4>kc%WPgf&h^e;^|9Q&tIALoK1y=oAZTkZSCmokDg!R zkBH1J={5lnmB&Dpz$7WfA>nJ*94xXkdGDaS^nt=aXjw`l2gG#D`~}c4I)MlPWQ;l| zV~3P(v|84RA_T_5tWCVUx*L#ufv#rB%tu7A;ww0Q=iamDXXcmN?tpViM`zj_*hf0_ za0T1!l)OA=8hh&n-l zM35{l0$eKj)k?|j9Bk;S=;|3n;g`Pp(ubdVyyTaxaI#684xME2LS&XowfyAClfVCk z&-Ggr-y$t|E#*EQtpETbz#u>Xqm}Zb2S&g9@k8&wd+PA68Y(40$F}Rv<5vKZ`67wS zR1DeVp3`rVuMG}L@}p$1Vs=-?RyX0|_ku_WwpAMVoln2=w?6e^BmjtUXx`01CT@(b zudmm~fUrNScjz5RYpupz>Q&bqgr4`X#%Nhj)7zn2Me6`SH%PsbWwWAWTZGNd__}$t z!`s`9*0lKma#m>UXD{(K78mBILs*bdkPwovn)IxiE|og|yOy2RyF_eU<>X5v@>8$P zc#8kx*B?7_=N=+r!w~1wlo;yR!~+=pt2|R*`5(J9$w?2LRV~^bV zE6<$y$uFLH=F)*#vFmmjUV^L)D1*0G!YOT&+ow;~*)>9NG z*Ki7SLN0VjQ5+iPT5K#|n_tWxl4``o8sCIjpJ!iTx4;UvJAn<_Pdt2b-_)*FyG4iu zFuSz;+SzlIIy>}Z?F|X2-u~%XxU97fBVYllOaYXDZLa#M$tezIabX1EMg!O%_`C4HHSd8`L}PK!B9u#u=`kA^;H~Ql8Rl2;_dWg&A_g>exD9od6N~o)-ooqJm^F2Vqn$m)5;? zod)!N-wV9-FL=vMO=^LN#!9o@j=xPpx`?P&tv~^UDoDBBsv`&yE!UgRzVzx-4?pNc zwxoICvj(9P=3x-sdHmSxXU|=nz6|khjclod(?@r;Y@I6+`aDDOk!TpBIU)=o3f0um zz!S$N-gjjD1NZN}d-rh36S0OvD_~FnkpLib^vORnAAhN%3Q!)=64&PQnR7 zoQEoQ>k|MJYtW-V_>)(D@E4v7ti$g($AH_KwyBDF?dW!I@($e?Z743J=glUI>MM(O zEXZx68^LIA9ssl!Z7fQ*OW5q-6kDPl0sr=*HO6*dQH!w|Dl7mBX|Pbw zS_`ne+F1<(2C=a{=Z?SXP7u5KIn{;IY!b8qz>c*)`N}oR@ISPp~l(-}}D1zVq=zzxn)yfA{6HpFTYo2{>(ctu(rQrSo;o zwb+Cp!29kwUM`iza{TN>p(Vl~j9z-<46{|r`S?Jp7Ta8^Xe3H)3Iyx~!O}{Ds81K& zkTmXrX!>7~`xpmU3A8&w(5l~c?C8CB-Vp?CB1FJOr}NSqr>*7Ux$lyI4>9;CU1RPB zDJvxAwKdj#LL^&B#fFf&muQmjeOrHqV7ag zw>!nawC`zm6kRfQ$rxj-^|b0rXkA1lZ$$d1v!O68`WDm|5XSUREPJupZnNbq_zM6L zYt@QYB;Dxg+A`HmOJS|mg{!kewNnqCxXT#p{5KQ7q7gt!FQM|Ia_y3=AU4?KHU@ij@ZK#?nFJ z)f3~b1c=Wm=yUs~pL0XjH>f^-&Of-0N9F{cuRY62LrlEw8Pk& zL(=CR0OY2PLuImwmt`nT%`cE{{Y^x~BlW=U(U0CS`RJk1yY~%G4V5b;9~22Gu@Z*S z*_qWBFD!iR($b~X_A9e1XP28ChqMq9BqvR!MhHlMsoXs-(pn|IZDs=jo5ue8*RC0@ z{#2{|(20ZP(E&D=k>gOOE)WP)PwpN~yFX=@t;O-YM2nwCz+i00kl?pJe)MDa?)&*K zy!o%6x$xp_-T8w6tOo;i14~=mNr|f?AftoBciwS~nIZQ4faDcCPrrKl+?ClmPf_<6 z5D<1=4F~{)X=+;_#748-Xtlc|C2}ajO`Gi9!$(9M`qOFF_wU>D^dpa0W85!>YqM8+YBv{f;b0959+#(10JsN{Tduy;|Tg2qrO?Ik}A7iVzwg#{=q$CBbX01Jm<HUoQE~@iFZ^m0uI;bGLh1y>jaOV6AfW!2T$~fUxIA zmkoOF-l@Bf9)0E18?h)_b9il;itAwE%S7BFCc&pH3;-qV-90t@{^L{cJv#ODUE`CZ zWktY|mC#0kjS-&|zDUngklq2e_VCN2Icr|oYn3G8sei!;fWU}s1m%~$eDR0>+w;x9 zKo9zJt1MAW+@IrAe!?jul+v0AKq4E(>%6!-DAtW~*^8vuh;_M~zS%Lqcj(sAjSj*c zqqUcA+ykh$S9X~Ewxk^yf16O3y@ttl4*)<>6UnJj?nlYpo#||Q2mEijbJzDib>zWg zy9Wk5uomJ2ZUn#rTF_8YaPr9TBX^DoBcOEZ?N7ga_0z9SKfBQS;)R9Cr7|S~K?LC~ zAG=+EjW$Dw*fjR1Uc9={wtuE64;>kuJiJF~k0oNuX{#|+X^MDQ@^ir#Ave6GS2ygc zTDOgx?&cGKKomxvr~lm7o%oJNkNm>3=YIOx3tzn!!$1ho_gt#HIldWVpx1my1Q2}a z{`&{3)yPC30F)W6TB}C8^YWXg$z`PNKBHc8aRjl;l8aP8qSZztiXtNH8hu?mfHzCB zXYT&U0-Yf2w3@>sBkzCw2}Kx2F3~l;{KgyC78X6v6PBKY8U^nAgsOH^weE-GE3o{FKAeDh^U1n7Okg(hZxt6UrY%oQ! zHc1;TQ@uqYh(LO{9Wz&awSQ`K@9tp)VPgOQk&2TAa!xyGU`kGC2%w1Ou#EBttq1vIha!3^9&Dqn;{lYMt%QdYgJ;Id~8|vtN~Pk>VV+zNa<7^=3oAd9*==V#o~% zOTO1M29tS!f?*g{%cbo|-m@j@-#NWNQFeNQD~od?BtpA7lNp>o$@cKNk72?=|O}dLWnib zKfY(^y?0D}(?bUzIWRmpS_VJ}0uzKL6$Vap#2?};%o49vU3Ko6k=@USShQvrZ`kOJ ze|ZQgk=zIt5jnK{6My{XKmOg<8e!Dq`*X7)(ZV}~)Yk_EK$sm|R`E(>wbJ3q+MdDk zzR~JbwX}PrRMFHnW@fQ@dAWUVt~u8VE-kd?JE3Jx`zuQlzh(^tvIV(+-F6Ixw-vn` z4ZD1UHz^u6S>`(o-MA3|sL!&v5pAj$-gTq(_Mk1X{T((9Za;F+4*|p{MLUj9R;zmk zJO${Gn8-?CY$xJCBx11uENDbpQRK9iVNKt8_t^J8e)O*K+Q{B9T^5v%JMCFOfCxD8 zB0&T}w(LSb$`$&?Cl7t>k^MnrUwmWXcVD0WwKwKoTWo}4UE~V@h%hG0%Q}n9bs-4O zotZ-BUwD1`Ts{2ZcKG1p>b||ZhW3sqO(G(eA@w59sg7MrWX}G?q^jA~-55fDJvSdx zA4-M2hoi+ei!BMBYjxhzysB zKy3dONY9sD+rGI*CR@aSh+^3%yz}tn@L=WA%wnS*DeWa=NiuGv7*O}D$$iK@bc6BJ zb;ZWmQoq|1B((e995}2{_D<9e>=`bVG_zrsd?YbIv+^;sEQ=3FPYx1aT2(T?)j0l7 z8lPP1prQzv09^_pOaQ_D*j7&>+U^P`KNRL6f=dYwVwZwzF95{P@;xs%7p{Az_TGB~ zir6M@&EuWE=e3}n9KQsJXpD)B^?fZjF|GBMC|k$!^LPVV~eD(aNxmvPki}>=hHyx&A=gB zy(9@eLIH6)hC+I5|KztkwD0}L#!uccRvxZ_wGu|s4A^l9(>WMtPS56K+K4oExg*ss6*OD|lCl0-{=A1u9JZ7X5oS0(QB zIN_@H9@snffUQ|sYCU^q{!`Ch{Jpaa z7n<$(Bn>1GNr4`x5)dI_wuO;4%3AIxnzzfQz9saIH00Nzw`n)^r46LoT9yd*yh+WL z>nQE*Nc}7uf$h!#v_88w%gOC!`i6Om(a%VBJ^MMTnCd=ioKRh&K!t-aQ&!3}e z_3EzCfjzqi_f8H~MoU1*k!2772B6$QyUrS9iL3}JPe1a|!ABoD_#@5MOK0bP`T0w~ z^v2w!dMm!z`2*!@-Zg%1VCuQ_mn6bpzOry-x$##YJMj2wI6gBoJ~=)-KID}>01(dE z2OKNT>x|)?72I1jEU>@3J(zoSFc69Y7LlMcI9mC^Z+P(g-*fC!FI@Pkubltvg{4^6 z$}&f8+}?G5b2>dCKKk&)G zzHw_Y?R|vMxC3E8n3Z1zuO?z4pOhm-f6{kJ?rl<@O^ZycUob0@?;XO0B!HEPqXC#` z_6jq0*k@FYb|;8TxuSs~Hzred#Aa3jgIv3n&g@2)R@OyWTDxnaHac9nJhMErSPvrB zN;|=j-$d`nd@Pij=uqp2dbu`tqp|&q?k8s4qq=OeBnOiK3JZ~p4VDh<9vL1gAut;o z`&M=%GU_pLpP2V=MwCgCXzw z3q;Boe(1sbUVZaay;Vn`btl|rYSM3g%w-bvNZqq%{Jn=pzvJP9C-0mb8blB!hRtd- zb?wSf$ymC8lipZ_|9Wb(&XioMbMl~jIui;=YIZk*Lw1l5oVYVa`JM^wZ#;A1AAIVS zm*!TbP;B=jWsUdiRd8d<1)L&^xD7VkT`AqSZ|Ko|!yi9+;ND}C12qMrg@uigFfeUP znjl`*oz!OpAre9ypD2H1>ez=KII?(U?w6i9_fucJ_}XgV6cSG<5SMRG+}WC1VPu#k zclcopL&ZGf+z&lX-`;7sW3+7}Z4(rH+fyG=yT&(tFYaYQDn#BEM)CF4bK8?ZzY|8% zyOyx~QjW(2rrV(44%+5gEWj~?7JJUBooB*p-99O2{i7@`BH?gtcM zF&sAA^@Y_7R~Duh>&vU5SzTGSthLsjT3KnXEY#1Po2i!lJ$uIv9h%s+dr*};0F;Ph zoPs&Ve+1l_(160WO^Bt6e*B>WkKTXqe_5>m`U_Wn`b+1&GQAW>74=JzxRyNK5{bmF zE|;6Z-}}s&zwp4`Z@F`%u{>RwULG1B8k-!cR7&VPTFbXOFh=j2+RQXdMy6@ZGbH}eff8qc6%&F(DEX6wS7GR*Y zSphONI)3QD{xFK-lt*#P5J0rnubw{FY_+|ThWM!3f_}zH+@62{2wNNDKOjLE)*H=S zLdo7o-z-WxMns_1>O^4(0NFq$zijs%*#GDQ4~9`&DOGQ_UwrM2+4%+SDdF^}bq8+b zD_9U++q7n5{*NouGTX?2I77&yH-KsY6CeBZvKao0+Xk4N=8ohgd*JTULI6W%o}}qe z5d_Ezl_u`AQnmA!7ej)oZZ})aRxn)k#RVO8+fZ5WW3ll3mw5v+ms}*y$zhH46dgS{ zJ~c6P>FUDbO53n#rSs{|yDWg7ae@HJZgS$5umKE|H`@AJ80&OwQb7F7IB0?p#s*7! zcMXjWRWyNR>tq(hz#Iq^&M%4sXflHe648RlfM|SNE{XXs3n%|s<2yT|G}VC(fDZr& zl!UjWjVS;*Yf+yOn=t}2#vu{3+cRH8?vPf(R%=fy#cUIht&5B6a%;OLcK3MN%ngO> ziO|=&Z44r%@Ol`Awo+1r>y~{pgp;hnom3zoh#*lA*>)$$d`S=lL=jcX<+Umn&xUn* zl{{MzQJ71m(y22SC&xzaIB*~|5duM$Y&k9p0odAd*?;Vz2mkmBpUoxRd~!N#n)%*gEJ_$8vWONKPM@9q7k_l>XJ5SBjv_$H)P$Q%xfUjI zULqjuEA{Z?*!Mkg=$jsx+`VVOt5s2uJE3ibEG9lt0G0N246qRbA!-Cd0N^0%)H};d z&851juZG6jhjx$t?Z?$`pP&EQwN}Kmd&u)`s5SZ?j?^mSRd2ZJd8h=iWw;(h^NrwY zBYf>zeKE8wfIx@{h|&!M!IozJ4!z~He($_p@QsviR)ue^N!!Q9-t;Xu^ju8SNZj1! zZ(LiOnohFBoG8SG*tepA2{*dPaT~a@km*SSRw$( zj7oq6!NA0+S^x==6leuXNoebf&AGXi*=q|+%gvQ~J1}gS2$dCbIYuTY2KMb9KCo|W zd~85hh^>`~MFb`Frb+xQVp9%55S2zxhn?^gme?Y7nw7q=$l zfW5_Tn%28C1Azn(DTt!gMgxEV6x*mg`N+Ui|Hwu}Lb2+d04Rlnvmid{IO^1cr5PYf z3>I9^Z6nKUF3uY$Se}^(pZ#RzPpYf451iO{&yij1e8FPIbRAtT$w2J`{q$L63s)s! zj0mKZAg8xC}F+R*$08qpd!suXW_vG-{ zaM@G9%&B9QB@ArX)yj0K=O zZV=YtPrfP1SxD(U2mmO;1R$VDE4%!q=4(Hxlo3E+QCbfTRy{@5g@taO#oM@eZ&6*# zJIXl`Mx>hU&Pu(GKxt{hJTOqJl)O~JV$8-{rFUdv9syWjX|-Wfucf%hd7xIUlu9DJ zWxnL7*g_NmQuIyleR5!+W>^R?Nja8G)EJc#Li&~8_?;`)rZJI3n|?|GdQE!Bv0MmX zSGD~0cTRoJ69=C>Ha)}S?O4}j5+V@Lg#L;#g>+Rv$2USb@ckS>1}QdtyAq=3w>M% z^>53zjFrBOz)f6p-PBv{O_tw-8EqK)(C3TW4glK14V$L58oxt%$}gwu(hdN$E!4|A z6hu$#H{QAXpZ=-Gj!X>@*xW%6N!mimlpjcU03o++hT;r2Kysji4bAdm>)PDP#fx*- zR$85ai8K(26#y<*ywQ>Bp@S2L_K(&E%fOb6%LF7MIei=j+$RKKKvLv+%<%Hr`TzL2 zQ$PQ;i%UU#EV(m63hLx`@GDJWs1ZMUc>H_s+jaLy6(sKekiBp}J#Ou8Z=Aqlhel$3;D z`{^g1cXcH13k47meb!QHo&9j|U+-wXxqqtko`>#0YtuvV3S+pd5u5L{ly|A?90C9+ zr5JEwsd;sJakUj%2BnmMGeZ)qtG_Z+oNwD83lc0KtsEvO6aa__vjQ0%uI!l{92qKm z8ad5m(QERi%*z>?ASmSGSP}Kn*8(fdWJT4ki zn5Zvvi*S-_wPZDPT}CVrMI5fQz(k1HG4_w&nE$CSUHHu9C63SW6iMOWJ|6qGhRUijtpA{blyI06AS^784wXQp;mw(h8s(* znc3y(ndP~KM!gkU>(DL~VG>pZwTd1dtWJy%jSg2w$A-!SRj=kD39yAY8KC=@>X3v8 zpa``Ft+^e}&ozGIxl2F!#dFVHnFpj~X}U=k+f6OAi`JQ{TYdU%ZV#$};>@#OxT@GShD%q>u z=FyOpJmjlS-m&XDPE70?^uwUz5&4z!$mrnUaHU-HNl~2N*kzaOMK|Nxr5}3E`avK> z0O+)%s1w$PDnJBzy%JJ5Cs8y3v%lh^euzrin&@}Fa^c^6{?s3wUNE^H+EjA^1%wbk z`1I5F-*du52I9c{I5yw+y``1Lul@dKKp21lM0%z%B6fnX(QE>M1Av}*2x}wWM3j%>v?*hR`HZ}c?s5)P2E4PA7qgS zpw_zrvk{DloiM65TOtBLNXmx6(9uu$5B@CVk0+}HZc;? z#|wZKrIFx)=C3@}_`M0W@^$aIx1>pIcKlNc85J-fXK!t0&~+ha83q&&Y^8_=mR4F< zXO@;5L1>wj%FMDpyv*|e)6sBa0->j800e-AL8R=__(*m4#Nf!FuMn)Y*};IlJNuHa zSPI}E2!hLr>LM#d6mVI0!m#|emp<_aa}ThxzO+cl0W>J+^8fTY{8K4fS8t?|5@u`+L3Ye;5&_BTO+5D*uZR>CNB zxOO^9hKFjNR&gk8aabpOO0qp|M^iRz0fHc5WO#YC5o4Y?sW~(_;CuQ;TuAbi4Nm|7 zY6rp758Zd-&SPO@FaC|hu)}(ZWXOpu~TLc6k09!)(`lGx4 z()$m7_@O<1r6fi;ba7r-5U<$tu3(z1#R^Q&hD64Ynx0<1c4c~M&*bi@K~+-1!fsP3 zoY_!{vWgw-T^A3ykOKNnux_f+RYJ6yHyjC74kyhXkdkX*(AEue5_V1GR z*=!X=L@nB@FE#$zr(XDp&%IGM{Fa=L_Lc!a*ze7Cmv(#7I+Eb+MK=)uf@1gg%Fk_K z)@G`@DP^s2|e9pRr(v)}byIp@7she&&bY_t4$D zB#2P!oG3~izI$&kDk|yvCAsV3F9it^l^}(!=<1c_iCz zfus9ICnsy9$iYBF=-kWGY9z4==t9Ow5h%4Xzw+x}yZmpzaQ3;`dh9Kn<(=6^%7)vK z!OC|ZpZeh8@m*CSW&j|Msza5bk%8)9#q&H=F=Qk0_ITnHQ{W+_z)rl|M#@Gu=tK)k zjg{s4|H5{Nd-n^2X^4zVF{sU|FJr=PQ0a&g#jIo&g03x6Ws?|!__gDnhi)gq$0BG&s z@;b0E5_LLJz12#Fa|{5DocKO{;(z9#iJ%C(0U&^aV01QYYw4;DTSzKnP~X9T`LX3* zNt9wL?=@fjc;ml}*H1nD_=$<}nvJ5=O)vA1=(4?vx zOwTSa)Z0O5Q7Lk}#@%i}1t!ExLlK+WwARw62?8J@mRS=F)%>Zk+OCO#vab=uTARU! z`GMV4yg(PkE&whmJ^}&~F)6TB70tra;qYM%%Ok32mjUJw<04;V*t|<`-YNcCp@Zp@j}g z%ZsHxbGT0fHnvePcNr##RGi%z@!;^_NAH~co<|Qqeq^{Z=mU`$BWxwTHbck&KtLf9 z2|%YF&dk-XPOr=@)LZSyr9VVO%hrl`9_<<%*uQ6F&*bpnP+9p35E5KC4{s_Kq40fA);mIsGxfBJ*>e%oWme*1-s zKl9AF&tF<<8F9&^ovD_y`fr4?yU*3z|Mb}lzw-Lrx8E`G;XB3-4VQ@|YK3#1C2y%w z^1W)UTq*lr$s>lH#spi1i}cEauTyz zNMYPVZs~BEHvxc{z$l`>^eqp4?7_qT;5T3VZ?Db-oCUS5MXCGG;}4%KmHaRWA=SVU zL7-eJOOT~7}4nbk&Ta$>Mp0s^FoS5w75P0!WMn$2{l z6on4}Fk1i^9j*)yRhq5v+CqI{x!G)m1^|&LXSF1QC>24Rfgk(eiSKy-K~+-RiHwcFq1AEbY01szywaBxys3tD-4Z8>mMECmJ9IA`e(jCR zXU@-0PcM%RS9a|h9vG^UR!}$r5)*kF$9oBbHDV$YMkZ(nVLOOA0T|IlgB71k{&RE9 zU;OIjUw&hLr4vHpM4Oz4o=w}W4C)OUn?O14LBPxiGU%6{Ix_anC-!{X$^8>kLrNmC z%#o4!T19~1@-Si|$rXZ9Y-Dk!acO#K`r67$BMKuXL;w;L!?xt6Tj$?;Zp6ma}@R z^j37uy35U5N1I%$Z)8co9RZ+CX@py$ZsTT$wujaNN#oyk7``@j^TsX0kL(}yDkbiO z-Izl5J~{qN^1wsarNz}9Quq1nOBMjjC_FS)dvI*v_}zOiUtKtJZg#QWiVS+b&w|tQ z&1(y-vCEZ1dqxlJ9r7w#tT1z;ZYG=4ASf;YuCM@DQ?B{n`M%@d^5~JTot^u+FQ5Hy zuTIZ*B0xk^3cJ9mnV6>YX9g`IFkumKrNP8XmRouGarcbb^-(t z@*o`cIxpF~e`NlX=jX>kFAysMi6bW*L)NBEAV9rrcOhd%iw%Ith6`T-vj`M}4ocBb zt;SMXsW(j&Ib+ipyS!Q-s8!1)zmU$PU)`=>#lmEy_ie%2Hx;bS*!u?o&{$heRy0yi2T{`llwHmT_1iArV_MQPMy7=&}Fh6Zh06 zhOyPKkpY)~EssVbq&FrI%yl=cASzw5Iu63|-2?aHf!E%=)apd-R&edw^3YIiVq##h zT0@+&1VMxxMybu$;hc`hY~rJ*1q zcm#yDZLVHeI)8Eg+CnohER0Bmge;;JjtrLf?;hU2cXW8TtSX*ZW)|z>f(uh6Yoc3~ zFv0eF8-dwvY2K~4_fY_B_=6w6|F>VC`Rz9@=T1y}_kbqr(2m`6Yv?8ozOMb8+hmAe zM>WLVZ3bVC)M;TxPqa(eefcPXh zL~Q3Lun<`m6!xqBvAg#kI}SvZ?AI=zUv9e$I7(?|ivYa2Q?c?* zTZ=5noAuT|{?dhCd+pk{A0Pkl(Xl;)Wh-m~D?njjI;*W!=fkc55lNF$N^6CPQN)e5 zX|^=7>TY7y$cC@4fRq$0mQ` z4`2OP&zxJeDFo2nJ^>-Xhab3KDHVnhqRWpV0E7sB$-6u=ck%M9QtP_^001}-AXg&< zKo&s+A_}4?2*X|vplzo$6+RVmIjtqo1w8skE_(Fm!uZ;xt zRMf#h!Ym-3!imv=iLn7=Y_k=tG&+q|r_l;S!;xhXhsfk?|9&N=fe!*80@j&M5PJ@K z3I}T5VAUTPERPJ9s})Zn2>=V*$cUSr4sl84WC7Wd+>nyAr6}1YF@lE#AjsfDRP*4| zoqPZG!uKsTO3H6QgjTuJz5pRhPut5J=sO(N;AF~`tp9U)i$D-jL9`IezeJRD9E#_8 zE>GF$&_Ju*X|~z`;snHMy%|NOS}7}qEE_t_Z5qf~W6o`wu=@idi!@rTb|+xw3}elH z2N5yW`kr>*<#^Op*jlZ~ro)X$w`7Q5s~yD1OB`AZfS{Esmr6HDe#RzvoY0T`lJ~V! z=O)KT5A4}xOnh2rJiFp?jh4CO`;R{G!0-Rbry-Z*CFPM5CmPYynpueL$BvHu@85Cq zt~+)kMBHu?B5>-km)#2m7GJMTRKOy#&JjUG;>eCp)$YLqZ@h6S=vZrMaiQ601T|lm zJcaJaa|d)KiLfz&EQqL7E-Au5+t>bDS zi^R*ZfT#S&4^Mvm@u`mx5i0Bgtw3j>QuPk1; zvbeO|1|UU>h$6Pu+JTC{cXIIH-jS)PL9gloqFAw^jjIAVh&Gdn=^=&5e362ic~|#1 zDWA2^{iaCR>Z<;s51shq)6*R*g_&@pbeoviJM=cAn}p7E*ccp2nJf4sBqqTgdh zh)^sDvsSe4@Z_F@6ARPJZ=RW%TdqePqdgA^msdM0%U3U4TG+RH^w9p%%771uY~r}0 zSRG5ML-BFg!ZretBYQ{w?)Ncs^QfQ?eau8WpAt5kP zw0mm!*qytzhir^P&0=FQr??iXR8We0Yl?}Qj;H`wIB1WIRsQZLAN!7n5B|Mhf8lp7 zEhXAox1bsx7(8<5P!vY42w)&ZzyJ!Zz$qap%?I8dpq*apX5>jlU&icG!Hu2xHB-|GV$ZWj6}-jF^%s|O$o z5`~eeH(Hh%iQEb6skH&_2wqg+)e1S;3${{5h%oR*{hbkfvR6E>q^Dbnw*=Hh!`=+foqAmk{spZ-X;veq;2sG!?>3nx&q0W z@RZgDEor?xpx{%@_x!zuZ*I1g*2`c>(1P_6^e64&JhBw?aO+us6XvFaCfD!eky&_? z+gDvSWB@>6 zH9{1z+h2!114$6%g;(F492?QvOQFKdMiD`TD2k39-v9dP{THrW=;~PkA%I~|SCpqE z+*QFp^VIP_^U-^2RiC3EZniK8bpvwUv^m&ht#)-|Kr!%%fD)SF@#_8eAASARbM<=1 zQ(6p%U`n3W{R}x zE|-w+!Ssh-MG+tiJC0kKjxINQML>y#BfEwNeXrdPw@-JtCFaAnTP{1c=B=TdfdSp} zj@;xTcij!&b^vJGM*q4C&vh2HLw(6DKx=S%E#_@w|Gax>&5`I5`F;7)wdrfC`*sb8 z2>~HVsVWJAkT1Y#4iY=3AYz=i6jN=-p(?^G!g1KQARvRF#JX0R>P2F+$`~Y=Iy5@5 zZ*+04apCOj^!#$O9V(?rQ@t6!c53><)y3VDLx=Z|4Ug3T!5S;60VhbnNm`6J@1TuB zu&}G5KJoM&-~80k|Mkk^=UK6`v@MnJag&+U?`6~efk!1@x`CatV)xDtj!VN9KMDCfR-&15kL@xB2007&^olOLbPvT z2rTSrs+P;mR=b!^I3DAcxzTKkNX0Lu#~?$3LT-iDxLo2~2aQ&%)eZm&W0)ovK$PNW zssy^?u%UD~000*4hy8{|B1gML_sq~DK{lvmi06>XU)XIuC`twVV|HIjjgd!fcAXI`P;%Q+_{UQpn zV<|j_H!xMO&l^%AonZc1qA20HD6KuM0N9Np%j|o4WN@(2Y=vO}NI+=WuB_B6mGVHf zoQYO&_0EC8@#>N;G{xs{4`nQJ1Emv2t#&7hqIl`*BM}^vvyqld51$idMSltEbLBdjGxcFr?(Lg=A*10D!O}di25j zE>B-^Yf4(ikiz|CZ%`|W%oB%)zyBlm+<)H@F>MK33dn)d;yR@$$+}lO%ynx|J=f=j zWM?J-6c;c71R}AvGU(s);GL)6xU@LCq_h_q8+1Zd_LR%fE;0752moO@h`w-U?pI!! z`QprKCp|(w$=0`yt8pH8%z;uV27<*Y;gl<mlwQu0FVL&mDdZQvmjA_|7 zKE>X8JL2Zqg|`m|v}2uZjnW0?UBbAxfd|mLr!#IF+7@Ykn@GUhht^|=2qV&Lz4Ob@ zpZhBxe;@{a;&`8onVB!Q+khqlinH%@0@DeiFfz=7fJEpi<@?GnYwc-35EhOYLCM7{-sm1zjA8!&Y{w`9~=A5`}d7kbZD8`28Qdcu-UN@3n~Q& zEaAa@6L;Ue%daSjLT9Wyrgv$=YidrZK3oK>QX?iQDZUN~C5lQF`oZsd{5>ZQ{?p%j z`O{aHSFP8!k!!`Sv9UYvI2HyWCH@gfl`ss=Yj2)mYqajgZn|e5OHsu}FedhRYPCDe zto61XUA!@M*>MF05}CPN@*`t{Aj}^Zl-?}@jb_If9;j9@XZ>$+nJDyO?k#r0u-R%G zW8GO-F4+>Z1p()?69=FPBb7kcvLrr?&5mz%h6EIG$2eNawfh@d!^8#}dkRC{{n(iLM^QL^2hRm~X-`CiH17I`a~ ze`3~3NWY4$1_prS@I3^DsLHwmdU&9mO{@%pD4bv>!pV0c%(+3+o3tXA1gX!jNy7y4 zPf4#91OgTy7ayX;ma$c4`8SJC|GTU2514#aM{#+Nhy;jpOzGlL{H!jn_Psv)R&u|l zFikpEfCaTD&5L&RwG`+T08eW~lq@4#>@+htSZlRatJwkoBqai^X4@DuP^)^Hk}S)4 z`*sc5eyuAu#)HtbI-M|#05a4tdnm*CkPlA z6C{b)vR9FEsf36d2H{=@^=eU=K#V2dd-?SFeY>Y7$H$Ge7zddq@sl735C!4hiLnFw z_np6ZA;GI)Z%N-jR;?MU#eU?eyT9urC#r)U2W=1mP{~r4h?6vbdcwj2&Xp6ry<>g- z5mbmtOIw=jC`4jo{W6`n|L`f#o4z`aVl{ClSszP#9s zKoEe^V9-r0YP~A~#<)h3H7OQS?n0;MU`6TCTKVwg(0#jxP97XNzJK_{zM+x9ic%uR za1_~2fGn;hhy)0bLGQ@}1>C+JY6|PY#j8u_F3rs?x2y$4L`oSJKpr2i9y>UG=-^1X zS^^O^HgZn80GOeNEwmxprlI?{_6+q7?yzL8;TzE32Kr3DI|o!oOo{ zzN_i2>Hgblki886AV=5DwReD6dJ8D0^>3D8l3m~3GuwUa_uHK|!wp102KZ0UUHass z2Pa3X;I_T7;KZA-To4HfqmH?@v~p=?X?C%`S`VVgTI&u1MHq*hYwz5}D_3XdwA#>fC$<^Howgo7 z9St)nMT)}6+;rq;E#+2MTb1+R1vPi8`(TXIWM|sONiyuyi zk>ysq9k`>`DE^5-2w-qvfGsy#Elj$RMU+ zl6W|!7cg5YUxPgzJ=$1aU~7>;7^raIbAqm*h_Lfjv5^^_9Q3?Hm(N`^kvlqyvzgV0 zEj?}Mx*-3pgKsbwAy#a*v&ke|9eT`$6rJc^h;rx_c3qxg2iR2@008DJSa)$DZpeu# z2YVrk@+BI8;A*t{@7F){>4gUc*jEioV&zbhn7PD-ua`eXBxB2zF(7R)5ugpOJp*%g{w@S^7rMJrq zW!XOW%IhC}`bhvuL63N*iKGzPL-*W$>B?2HQH9jqBbB=cl;7!$l+`Cb`tZ|_A43jp zJ3yp9i(D36mg7ay6|nb$ToIcOU8O>-m^7DT@D-UFqwfAQ=U&>n?`nH5ndlB-MY zFJ4^y(xv*@rkyuNX~i7t4RO`i4C=xzu^cax0Lk42Tu31)q@jv`aJc&5{^1ArjXZc{ z?AV^+iII|5LIM`U60&rfHV$Sdm)<8kZ%Y!yKO3xqiU6^(+&+6{;nL-W)n+InM2biv zW<|7TV&JYLll%6L=&}+kHnM#!c2x;S^{()|2#GYBmb5v9TLC;$;d$lMOYl|54s=;X|m#q*cvuFb6qk*8D?nTwYfXJ%LTP7U61 zcyeUChKkrQB*vCxXO_i&3CV-RL;*wyh5Nsq!U+QM==ny+8Gd$BykD`4_+T%nNlH zn3|%n4Q$K47ezKhLJ*_Kyngx&vsFrOBHajP8f{z%S!nBoV3Co1yR5YGq1A{W?|Krgh!bD=@a*38E-;07`e* zNC8pEy0cm?*Qym4Ke(AEWu>h#POr}nJpONfh+(V+348r@ekj9XmNUaSGhdliL@H~$4cM(txw&3&mLQE z2mvA`lSH6juWX{4+o%RgerClPx@>s(*rfK<`LkE+ohb4(fmv!szy0FObBh5FluCnO zmzG1*Jy6!}myDS)Lj@2(lPdeVR`M#EhAaMf#k*s?c66+IXuPs}xO!k}XxHdKsiqMT zZ79qVg&ZaGP#|_&7Rfz1!?eG{Mn7~AyuMX@QzU%PR z?mdH~30Q3C(pXcB?q!Rm3*Lt!)7)bm1|(TZ$h^vu{*l~!1jy&#N;e48Tad&umi4cG z{`9ZDcmcL8{qsA|jJUO?=PiVvZY6Cv5WAT2E@e}W-ZmaUP}H>6?q=!pZihBU*TJ!3 zU+l2Fm$t+cw8H=5%jZt)9sj_=;ab)6hss!1U|qIDK_Wo9a(>|}ubjWO+-5;is1#Y2 zPHf4?*_~ac43|t*5iw#j;?=pv<+(;hUzr@K9oRE^VE4$taES<+v(273zMa#JAB-Uv z3tm|txO4a3Lle^%7tfxbzP8u^Bu^{0eD3nn%tC$NuF+$MCx=E#fC2^}XS-tt$i#_n zA-2uH8f&dfGH(V1K6T&s6xmfKgBTUVBwv(3(8 zJF17a9dXEF1O%YJtspX4^MB}`y}O6}X2%eSa;H=)IB|5}@%#1@84iNj@h3hvr>H#k zrUJ?<+}TALWRy7pb#2KcCFNByQpn8Q4xV`G&VMpK@Z&%CnLnAHd2XdSGI9R+{U@e& z?`{VXfC2%}*QYODoxV1&^=74a_kqwzk%>fDM1@hb_BQEFqngeHw%L#|LQsc5ta7+pl!M#gd!A{Gil?DodT3ZMoF87=KQ_OjjuKv&4D4` zMg``if5gSC#j3pkqBT*a<{i58;HC3dn)Q}a%H>i`jx5VY>U9o_B2<_AaubrU$8WB? zG*_3!t*{$|au&(=6JB{!T_UAr21>w%T5^*#cna;?W60V{D~T zDwn)9aK`oOwiSx8*wC1ECk(?dW*<`Ww64n`F>4V(h;X1fP%8O3(Y5JiG@WsM?zj$x zUl7qSw>zDr>|`W>_@4GXZ>=@w#tDn_C;2j6WyJIJD{r3LH#IpnGHjU>dt3m-f<+Y1 z+UeI$>*b|GzE_fnTfuz?hrjn*pWMA~$TaG4>bE3X8@jlY%${^Sbp5)ehHRy=g{Qkn zCN^g8fze9EfBEGLOU;e~G;9w{mRHy=o8}N+ZKQbh?GK&3h%q1GKGlLY1u0?OP8jX=a-s6#Du6wg;8VyhH9mQy9ST!A0M9_M2*Z~ z4P%-kJ@stLWfo=%H~9_P;+Dlw&AtZlm} zuOzS8mpQ|0om%bC_E6WJUOoxMyMxx5r<>(Ny3mU7p~3P`f9Ioj4{HKDI5FrCR8`3X z5n*`qwJXoOe5nzN(i9oPY_!6Wf%4c;b+F=>eXW&ZmeAN{Cv0`1)ppp4Oc+_qfJlmv z5P?Mr4-J%dPYoSBFg`gx=vVw$*%pbd3yE{oO4h#+pEKbp8}ZDQ#q;N8X6IKKiIipl zVX0NT{d>j^9~c`L@(_`&6-m>g7LL(&CO8O6qO9b!4yU;wx)iWZ150%+D-uPf69%oY z-i}s6v(mCnBb^Z1MjC->w9RT@mZNB;69t`M)!3jNe)!1X;j-Up1%jxx7T}Sg^2z&; zO&u8Kpd-Qv1nlaStL0i3tF$^{*yBpklJC?Y_*({Pl`+!O^l6x*T=uX^Zh^i z+!tr&u4(N-!S6k(R5?CZ5V5u8jpk=Mx{L;9DL8;myqL3GVzdw zBt!_(Ud>)0&ifE`RvOETNR%G7T*M2LdghoSfC9p(z=5(D-4%W1z4Jf!b;s1*_a5Sq zNzy)xUq!&Hc!v+~Ri0wzbjcJJQe+vYFU~G4E)x-ot9xz^_Mtqa(ZkoxQNA0J_U5{5 z{jt{ltitC)M&{hFlJY+{84=tu_K0Yz7-8uB%O`jAXo|H+ z8sdaX;Fr8wrL48eyGY;-bZfDZC;*YMNx)Z{>wFFF6he*I_qnIA5>aA9%6Z9l^hoON1ugJq~r|zx=C`bjwC^83jPkrdghpk&@S&+qw1r!~HmtT2h zd3L6ZP*dRB=*hb$|MbTn85}FwAVAVCOIO@6lJf!rfC5^X)?l3xve^-{#&uX|YjH5T z0Cff?rB+wX3oo3Vn_tlyfz91_OifOW2_su@$FFNezV?)_Nhu-(f*78ObNMiWI5dMu zAp#O2Dk1=+*u#cnKjY+d(j;TG6Yg>3yz~1>u`vO+^Va2M=tKu0C=w%$Ms(ro%BAV0 zdc7?|f*`_SWR#{|W3|KkM)yq(REEkR$d(hm2q4ZKlpdCvzu%H-yZN+XGqyfDH*Q>)?E)ZgCl8<^6|9qWo4$iCzm>GZ z>g%Lb4@0C2_0C`Y@6Z36Z+rO22rgZnCtVuaHLMk#I(O}>r)C-v0|>I+J61ioe|+EM z=*V!@^ED}qGde@O9VM27PSkFP3(L*<<;JzeM!nezLj#CPt7d3VUs||4w>mmlIe1{= z$br#P)dxlZL}non7C?4qWPu0~2?GF1V2NPwk;&bAM`x}qU$`(cw^#=NrM)n;XU@&e z&aLd)HFRk2=-@~hLD<;X`ojE6Vvf3ZnA(BPevY@;VuegN^RyQM5#@Q+A+IuoQwRVE zS|cF1bSy{$E`0_nh}fE_qks7izOuO7s%Rpujo736CQd$dtTgCFoff&r#Rl?5Vzk#n z&MSdy**WWAMh-GaVu6r|8=c*|2mbzF{K&ujh0p)-+10^X`Gx0SURbI>_Qa#Zg99(T ze(Ku%lF~~0>FBP=o-ZV^H{HQ;WUaNvkk&yM67@ZWr(ZeOM_nvg*MiPpg$T7uxo+87 z+dn%c0Ei%A6q*&=8mv})Pv=qs#gab*kCOf5Ff#3SCo;xq$;ri{NR>;z?|BY~6%Ygh z0dOO*>(O2nPyyI1NkUhvyFX-KX}?5DOP1uQmqGa^0zeW%>Chzs0dIl!EcuhmOP5S! zh_qPlDGIQLp&%JJrw>(y=fDI!g4>%X{)o0pwKX_gA2iBgKo4hVTe-bsQc$Le&q}bS@Vehd= z?)vPPUz=HMR*3dajSP+rvSlQq1i=77K>|S}bQ?^7fRvov#R6$M^mzTX!XRQG7fu!9 zeNHXOg+;|9aRl?iJcgNo$Of`F-@G`zJiE|rwjvQ=A!9874-I&C9iBS8Z(?+! zN=mUY?rcPi&-TLPnJH^h)rJ7j8t$~CW;1LDrqvGHov_u3qR2#sU2;05++iSIxuk2g z(on53JX|Z+d{83BLC85q=aYRS5GfJhAm}s$jx2eV*Do*rM@8`r^aUjQgo@i#*o+8kRdZHKxkSx36e;vIf&fl_te95OlX?*&h*UE)tQBv`BfvLwFg2A%fa&M<++9WzCB}}qEgBCl&V&J zt%)=uBY?0qY}w&cAOM2W3XyQ{p|M?ihUc!WT)H$ndu`P)k=CtNboSib%*^th-J^#N zj13Hw5XDATTyjd6jTq6TpmhL9x`&mx32{DoihG~9L8Bl5#pxR37=b8?&Ar%Kjx|9R zVYW)azR{sKmfMJAqTqq!NAG{=AfSmlO(F!AI0JTO-CdW+?KK4vGS7rHFreZtoFFg~ zNi!H3E&ZJz`0)5IKl7_!xo~7)_}rQEQ75?X!Fx}gKFz`!)=U4~CGR9j{fdyp0Wlk6 z$l4%``j@Z{m~|brIU~92M-kD4)k?Y1Y88Xna_8IbC^;Zh&%_gY>j`of~?mXFL)TASEfvp*@1`bb4|pm=TDg zwnqDc`JF_98YEv_+JV1z}=^>0xJivovQSb-w_@Ks~?Nm~!(nGan0DnFtUH zGJsYROqBl<j~w}qk3Z^p zmZJ!PfH{e|gE-4zZb2%58hxI6oh{kKeaUHd(klPaitwaj7VZRG{)DsclY4IeWQE!4EtpdMA)z~oOl}LkKBsu4$g}QNvyP6 z(c(&Td8NIy+G@3eFtpY%r-yxJ(%Ee)#R2z7s5R9FE0g2H2ltN-j#Q9H5-cp?%mRA+&lp2=0S-!h%(^XY`;AR{o94!<*d8Wxtt8XELFw%di(o+@tObp zT~D4kxXYiPZ?=O7K$G3SclbRI-#s`{l_(M$CE}rD>KVsV6-Cgy(=@#%hOE})`}ECwd_^OdT_8bGFTlS9jpzOluu%<7#0>x z%pwUwQn>rT=;WTE`I-8qi}N$HOA!NU)oz9c&j8 zlcios>}X7F&}8Qw0fiY+5K$1tvVe>DArwKBT>8Q+s6<=@8JTBmN|I*0Fkkm|Iz4X%iA9P$UoMAiBJ&##%JSFyDe4KzZurR_?O^_?{}4 z{B|dZKPNy&?vD7c05n@2%Ur9J6R0_ z0Ats)LXHeXK-5+2VtkhgE#1Q>+d4+lCEtcYWDQ-ESww9F2%6Kn1VI6(aPcSk(o==_2pF}FEfdfgNC~*h`CqT+N!y>O}}9g z-GemGX(`mHSRn#10wCmI5fD_u6&sRDY4ljy6nEK zw6@>W$^=Uu#mUa!76JrNDqQ%Sbk37<5`zGMh&<1eOrYfM@1_)fap5CeF8kWkjb;P+DGZ}_&?iinZnAdKSVySbu$-_tia_zU8?W=mP_>%v>@>7{!8^)qK4x&OYv z0(3fOUV1THoFDLX37A{W?|S<9C%*oK@*{~1BE`wg6Ko*MP7GRO4?xsa_lJ;zQUA}RzV+c8Uvt?9YdxrKVG9f=Da6&smwpz7bXclY6g z<3nRLL=nq2%+B_b*!wRx3k6U)XB=+VgKGK^M@f;$9nYje17y>HLdHi`$~bTj(4U--gLeeC4>jt&qoTi!c0^uEXMsg9Oy5Fk-ZXFmPL{^8Mii>o3E$QDZPDqaeI5jfW{R~NP%g&}HfEqC8lsPava zhiezP7MCmKlC>O$A)<tLFmRH()cQFx&g#v~NAi~{;D8-p9AY}qrQ!dk?JNC^@SLS9Hgn@{JQwYFK zsC>6cuB^fYNf3>`J(*3(Ezor+5eWz5Pa*^oDL_DCUB`d{&kqz9O*lF<&}iva zyX_90L_!g1wc3#}@qz0ig-Ujt;_=@!DQzc++MOVZqIlSEvcKFw5z&fj)k?Wsiro|w z8NRtv)}=M&%;sd801&o29T84a{${hVTq?aadSb4w{W*&O!0db8D{q`Ruxt0OiJ`B( z@Iq()+DO?eA*xpMyFYOJTfXsO3>sp@rGZHyXGuby`aEFk^DaeS`eNE^*M6gm+|r+l z8mD!Dz3=Y*7b;4XJuwC-Nh8>GA4rP+0HTSE2$CjJ2uKoH0d^QrJV%_=qzMtib~Jl!Wp3D^((mJj zRocOTc4)h38wOINV}IZ`p8qHBzw5-9)(Rhe=+5eRg~Jfz<9o30Jj=d|^|IKMOLoab z#1hD^!()S^Ls#bNjZRwx6f%I2GfNSaA`rAz>K(h(S~)+vGW6=DBm2gWAKN`PIV5b^ z7{pXNMvg2Jj_n#4ofz0ZGkNyh)ob&s0!Ug}mbt~o!g5n78W^aI3{^&lszX)3T+zzY z85mU9=S=K@Skb|irQqD9*~V%ZSuT}ua%?zte3DG9O?_$7{Zl~H5Je}B@AWGsv(iB2 zLi;nWxd^ka{z?##{(`IvhhA5#6ie6O65K+7l;TK0!cTtkJqY$c{?Y02@v%<8 z0RSomxndGbqtCNl{>zLX0Eo!Koge_u6A*&F^|_hUtM@0!L7#dcAY!#rvCM2Y);v^pvDlMYoOM8D*hOTKb!jCJT9mxr`}#ra0W2}R>#bUDFSW4ou{DCjbv zoo#^tLP`@U0bUy{ETTq`fRf2%2EZnbE%{?hOXnhE%36z!fx$HHkXe`uC!uE+6*$`m zl7ob0>cC`eXz=odD?ukzq;lhFo#D`JHug;mdOdo;I>jWdOJPckbG4?(R?hqb000tF zqHACj(I145|DVernO~?Nbv)$!fjF4N!#F!H<2=At=Y*uM+5O2dS^Fjg1SBCHOn*^2 zSCmqTU_=Bc`Cgaw*nFLmm?{~lmP@|3+GrYMT#9`Vi6XPSQmybf|QY!g_wW?BGkk)OXeIa3FOc+G~$&`y_l$1PAEB%(%b3L6@ z004;smRDYVZMo(z&&-aNeGfretKa_q6nw!XbrXJ7a8 zhD_wDq;HWVlG>nu{P=#b5db0N0rP&S5&|l@9T-Nf$_;2+bEgsUE&*K zASS_(03egz0!Ro%NC*NpFsrN0h2`eLLVabW6^7RN5*g-*t@ib<-6Ka2PVC+@tSVX} zBaz8@E5{yKZsv;sh#&|l62azj^W3HR%hOA%^*}@jNfC(%Gh4RGQ`L$;G*BKMs16NO z25Oaofr?-8l%}-4!oo&OXqv5{-e_N&TfH{7-0Xy!6alQ%JI}s&?)Z@jUt?%6f5e?&}#L}Dc~xOztG8Ux)0zGLjTuV{6q@#$yY zm|t!KC}FWAAQ*{QYZAASc!IkCnMS}bow;`Q(%i8_llLCqKR8t3C}L(;qH{Nvh!J7e z{-KFogR@tc&R?8eSZY{drLbp#DcSKI;%O2S0U~C{(w8PA$s6bGv~m;i-^TdnW@g^9VE7Ti^# z%nD8TAp(HJ%t6orrJ04OkI&1^qP`4W3;lr@+5-{gk^wbaAc-})j*vzOjajZYLBv`c zpQ7usG9Z@xQn}=30bgs^E3Tc0WiDVnA^?cG+`nP{%5viwCH9ga7q@^~ILv{FX)s3b z)&+Kb1^^W3(8yeQ_hS82yVrHFCnt9v5bIe&}R0M+8t>)n2Bn`{?X${rZ3Gd zFD~aWpx)8E=H%%4wp*GNfvub!x<$&5f}&BI{XrM3CsYzMfZ@Cu|F^;WesSUPuw^v0 z6$>MYJ2@_PL(F=h#~kg3oq8y%#d^cZ0aaZ9OYRmVCDCj&^I1ZdzdNZHf$#ZU_h5D~ z*#?v{nnkoyqr*eZR=XX$0-+Ok&1NeIqrqC$(<;T*QaR{?Y?!6h>9ji?Ytqn_^~GfJ z@Ej0E2(@aZ^8d2;-_e?6$$c0Y5%*^1XP$pm^~!fub$3;@o1UH?%wRBs0R|wjBIrO# zJhY;AMFJ#`mXaXuip$+4MN$%vaA+jzNFm4FEQ{fXQw?>~2)KqriZ1@q|@_vXQB9*{vt*x)F#*-dZ6vpk=fAqZEXX&dSqlJwg$RHp>zMr<6+kySF;!7w zg`=bgG)XT5K>&7+&w(@nOJlwB*89sh=QrA&goqR&AjQ^-u}a~@m_K)H_T-7F>FIi< z7AQ}-Mci#vuo%eDG$fz^gNj#~3}#{Cq01-ZR{X}B^Y7hU01=J4)lHUHn#ad|g`||P zQE4DwtEG1Lul?qGfA57mNqR`UZ<;xT%H3Y+-WK6QsW6tr)(1)-g8sGxZ9kpfC%St8 zXj@U|zLY3m8us_?5e9Tbhn)KQo&dm>v9GL#f9&)uB8eby=J0jL9-S+TY0B9-DW$qC z^W|^8v$7d#rHwHFU>St%L^YVG)fG_~o5B6XN)ZZkryX`W;RG;QQtxtgIdXTttA%&{#&-ZQy zh77stlUxcm07XI~h2he365dusg+402_Df!J@-MaprG~MVLS5tas_%KNPA4@50susl zB%52!S~aNGtC>?NAOJ+PEZs2bbR+8y-B7_#$;gJ0{=dSWr|Q*O;QJ!nJNDJrDfUvN zdrpX$7@NdN&#)<5D?F_|eX!;~Fl2`8t8NjlD1>eZD3z)gcN#zZ#N6-sou86UgA}1; zNbY{opHWQRyU(!vFgs)gz1^K&h{9}f1j%PL8J0+KibDYLeMJaX7}zLM^Yfdt(^aqP z;wNIkPd=pKR55oZjm}SV)K1#ncx|J(zR_$n!z5t@L?jk57Q#4*tyNmhOx4bvnmu=N zYHYGXo)Q)@*>IQaKwBO30TIbDcOE(rbJ6)@gl-9x=B?%~+tXEDSA3t+) z>coi&zvf|n8kCuBF0df>%8}Neh=`=dp~1NR_@^J4nXbL~+I7n)jNOQFLTjZEKoeSx zzwp-lU;EOv*Vmf@=#D(^uc;3=?Q;DpFQ~&4`B2u+5gjxYwTXkF4`LLsyBTkLs@S6B zdPGO`00{-;W;aGp+?E##XVOn0nCqYbR3rh&lpYWOQtw>5y|~u$0?#IfG&1u{J^1*Q z^Jh*@XicPuEhkaZY{wg0-P_BX3meU?W;Zd$9V6f9n&-ZA?Z)lZPd#&KdbTbm0pL^* z%O%akYK^BZ96NdbSZAxVwz9RjxUtpjb~+Iw5Rz7eNNhO_lg3teL1CrhS1bP5cy(f| zIx*%4fg%O#EA7>_Hn0dezr9$m1(3xINoydLd9roAC(r@pZidSH{Q3T1el}+3YV2#6 z(KiQX4JXQ$;hEf1>p)XE#@tUrWCM)dKl-11VP)eNpPO%;sMZ$4P*-btVbV?MA#+vl zd|g&mA^=HZ7~%{;e85xOHreM414t$CE!!xH3!ZugLskJm2Jt~^@K&t^LEvjrNGQUC zfX=qOr7$F7(O;@U9b~oFmwgY;ahhyuUIHRs4M38mUtM|SUyfb+5AEb}FrA@QF`yGm zp>L-STnU7c8tTlNp4wd7lyeq|dR}zhs{+QFtVUp1P4|!?XO<$&DDkn=lj9Th+c)lX z+HFFGX(JR^+NRg^t(-&q_{fh2xE%Pdd}FAmjubvsXsRjJ9{9~=_nJ`>XkT-o;*GFpZ%WCDhUMvghXTq zzs~oP*}|oae7N0Ly`P2qQk)XGJfG}Tuei1+*jlj@Y@4o)-()+j8IuR>Rkyauc8yk4)q0=)L&(54WJ{F7zh$I3cEG7*E z(Hl1TXv#MHun-|6yPY&6~=SLd!A*K5Y0Ntl4qbPaopZd2@cF69Cj_4q1 z$fWtkO6%M2tp4^#&!SCrOyu-9LH5dUaXeR+vx80ufF`upZZ0cd3tO$pu)TP4@-rWQ zv@+%k8)jyqpmRIN5yJ9}X+Zbus%t+n;m>RO}Ijp8_VB~Xf(72BxWNwzjR zi;5~$Jy!E4#wyKrWD^##h@g->g?^v`T|oF8+{tQScsS#}D(X!mnff;xH`{fa4OV-R zuk@{c6CE5D2wV#PcRQgdF$WdeVDui{xQXmz<8;XyybIg?RIGeN%h=O9F+p8jyn116erT{<8^hO?}XH`L=f^hyh2=An>VYBy@BH!zG z0CYFxU=9~Xabm0<`ChBtVQT@L`2!`fS&ti)zz;kxjFUKyfe5JAGqd*Y1I`LLq<;|r zL|7@T*J^?97bjmV)xQ*ryzheTqL#LMgAk*{#Bnmv55)7d?;W`LkE0^XSa2B(LLe&c zN~bke@qCmMzWw9B=lg3lkggzUamK>gVla&Ld)KQ*4gcMIgXN!tZ%I$o$$HMNIM0_* z0T2-s6ai~2C`2MsWD|~J6NYi88+XGvijpWylGvEU8q3zYxLWRXl~|F)SSw&<`j>hiyQYk4`05sA=E?)Mfe`C!qgt~E?hy2q4@5QQ=S(NaZs4euV&{t54^51>Ox zJ#M$<`-4@eBl?g~d5$m1)(F^T{tLhQ?&m)B*z`;womfC2#F~na|9OefF8lehqEXO`Y9l$%%_*fjBu?`PlUNM;|_U^Y;2XH}A|Zts4>T zc_GucUcR}q-u&c~=O>Sii4hS75OAl*Ipsm3#3kw1yp!X{=FZJ>Y~xP6wb^bo+UuLG zX1m+%Mlq7FJ>`2SV!CE4wB2UtX{}HML=ja2jgn-jR<36B4cT0?%JjL?PMD-ZbZ`Gm z^2)mxBfluj7LT5lpZ7Og`ECi;6986-HcVzt2LI3B_t`)FGhZ=**Gi1lsFb!`6bQ2; z`}qkCN&VTTadt&eq}lEW5oWSz5eXY$Y@1@KS~J9A_iUqp2s0EKNkkA8>WTnlu2nJP1_e^T!uegLHHvAx_itKn z{~yx1skMlhWa)W4_FI4yS|`*?3Lm8~OtCr&sty)MJD@-e!AfxccH@;+qcdBp*<9++ zIw2?4A&Ab>EmN`!Jw3Zb0C3C;0HPR6Bqz=vo0uM7yuHxeY9gxCLwu%xWi7L94engW z#kY3ZH2Dxqy%+%^GXff7B&0w!fYm=-|J2`V{r2^?W}PSqkujatQm;o`aB>7N2=fie zbZ2Ox2Pa8>r}$YBtxVBhH{qhv&|Qk=zfPrC)F>jJ_KAj^|0=LGkk4o;jx_-Q;fn8j zT6emki+hDg&iPFkMo}20ra`@VqF7ITpij99#r;o$z^hd&o>qkr)dL@tdi@@XGpcyo z(vYT3I{{EPjD~&__&#D^;JyPSEMBJdg9w;JaicM%NrSdw_y>OX_n*HoWwtg+dBEI@ zc{sFUu(L>(l}PFjMajAy*fErn;5IrYk~H4hWl6-KQYZ4ozq2!yJ7S z6Sgst0?rkLR8LC93K6iTT2oi9%w2qF_RaSe-gx)cMl19K^eVxfmG;J0-hBMglaD@n z+OGv1C%`NsK!75UpG>g~NWxYGkgziDS0^eb={P4g36r(;=IZk1+FCOTy9TLR@jb0T z$Qm2?mJ{|pwisNN2#h7!Iq@X>a6_DCrf&_kRYh5&uA$0)mlQX3MH z?Q}0aar`HK>l6ReFTHZ2Hnk8Zs;aQC*C(kun15E%8yp&lO08{f0+OOpwlLezlcOH( zced;y6a7FyD&-;w0JDVMZk!kvcJ3KU918=8R;p6*1K%fd(P1Q4*rX86XIDHyW~QHR zx@Kxl3IGMYZVg3$+-X1;1P~xyt;8GGHedTY@xpH?E#zqi1~5tERb`gQ8w0i=oO`}? z9Yc!1M4>jM=N&^p1c4dVig)fNOmD0=j~|~d=^lWD$jriml=()2?8sx^=>W(=3KnZ# zM3SU3<~?-f;@aZ+>cUbIB}!@6i=@ER@ao&PZbv=JfrgPEWhE&ZB@v53Mj#JtppuPb z?ys-?@W0;rL<~f_>zfv!0J5vO{3NV%#LZbLh~R>FCT8fZQ{7r@mN^2;m(2tACJ zz6S9v)J0%ZQpdw-lEXRJC0;V@1pxpSCc^Q0EeQN}ryEBx5FsKe=R6oP&A1Q!8OcJ9 zEg@p9TB%lo>;&aDO@G(=)$TqjYQueBAX02>k{Ij*OhmL+f$!~ytGlND#?2fSiy$(a zPRj=v^K=q*f5&Gp{NVRpw2ci?3T)wYXATocImNq_ZSP*{*^MyXTZ?)VgA|_krIt?C z#m5MMka}s(JV!Ij?dvO6EC@Kv!(kupIa_Io+71y zkeLyH#e#JcYmQ819Heg4d*T^t0;G7W``)#ccW*8=+X*T!2)raQAbetW{OYCC=T47% zH4T>8Cb@|-a8~XZ zq!t83AS?nPY=IdNf|@=(HhcQ)Ow^87R~k!;>#cUT8yVm8DxRklC`7HDvuQxg-9i>s ztm4X%3%sM3laiJ_sB+({btuEChA13`oQHo_P`gA(08vR8{>T@uzWx64&%eGhS)bU7 z6VLZCJIvMlGPepy&;Ipr5JZX+Ls+c8vWBp?qHS|$-;*|GU?qxxVGg4xjuU3?**Zy2 z69N>ib;b9BARtU}j)KaR3&6YFzVEe_NUvw~`UDcF00rHduQYc6 z-+ed=$**!g^br7ntz~AVdSTs5j;D&OVIxERQT zO6ATqyNeeKahJ22z!7g?W|4%X04kJtq~7j4{HND`!@eFh&t_Wau8X@z^r!D;PTer<^DE{)2|Ujk zVHJJcJqW^lPCx(-I}pd?o-#@D#EG##_`5$NaR)$`QQ3Zb*|gFJm&aW$0e8DF?qUuY z&nq&^D8vM>vZHQ=xxE5afy774VbTCFlUIW{p-8yl|#70>sH z6lI$M0L&mD)&P?Wdf_rfXZW1sCyoWd-f3`!AlzN=zW4s}^*d{=uJJt2^ZmqH%X0GA z_?3rGojEt7G>T0)F$jQ!g-wRWwnWZJ%?LqC}C(Q>k1f zB4W(sl>dd#K6T=an=ib6%~-1tiPU=Ae)YT8Uww1_k@K?`&mA9|s-mYrm=g;i8LLj2 zKmd3C!KH{`Sw#GrK7HZX-0A7YMtgZ_z1e63iXxSk3=xsa^7%cad>+_cvc)NK2hq7t zR^9!?l7evQH%^G9_z(Z??|J*yuYNO1+R9^QMC#kvLdYfm!Yt=(4jc{klYXY|-|RO~ z1G!3{Dd&hN%(1ai6eq?ob0MI6%AANGf$#f)uYKRc0`P-pvUa{6$ihydZ@^9VbeG?efYuapn`C6tDnupITW! zuO!bog}(BDG5{zP(Nt^ZiQDTh$DK|PR2Zm-;2>JI*0A=q6w5wb)XeydT)VXuhq`?|%V@4{6Fx?(w7c3w=!)hmAG8|tBNGjf4m5&*Vi72nqs8&O1Yk}!i(DCtqMzNlDG__Ak@j38_+AwT``3saNzuRs4rm@om8 zup;Wj_SLr+-+JfH$>Wo!PR^X1o2rdhNTV1lR#HHtc!(!wI(61-kzi_eY+`1t(+C&t ztc0CNDUBHdg}u*U2;h|~BXIv$hkT{m`)rYaibL*Yl%EF53Pq@FXvU6JfAYt_=goik zwYYM8%~_)p~Av@ z0sx9s5cs~QJ)PPq$Y}I)-_$!nmUlD}BoCF3JqJ&z$vrXv5-13lztwp4XSneO`3fXA z!s?}osCfMa?ygF342=aT>h)#YrT!X%tdxQv#8$AjKK9t1wb@p)Rhx#?)mHYUHJl_# z1%n|CH?pd76e=?f0RTX;7Qj>|{D;QRHCCES3(HXygHvt>s5e5(V;o^<%cmMl7R^{n zUkwPZlKzVThzw-88bpZt?>4^hzpi{HGVEcSM6pQLI4-oI>_)Ws6@cDh-u%r<;1A=W$M1+=d!Vd5>0cJnN=;3S$5GtubgXq|cL;+eFaH)m z5GJB}wOR>$5J}OW-LZv*e@kfSj@<8#aNweJjhMSYf&%&|B3gT%Qhi$TzH57b)Ia$$ zC*782JLah6zmb6BG4HJs_Rg!mxGLK6z~*k+9gvHX5z< zMt6Oy)9l1?ViCa8I6hXH9E!}e( zEctE*(< zV{1Slc2+*L8YX|}AAa-i|A(La+?9zy$KKR9B7t!3vn1UsD;#Yo3KYOxt@)F6e`T|y zl@8;?B-RhK*q*an=pPI@7}YBjAqoJ8;X{{>)%~ZQ`^Kw{$bg73iLX=;Xsz_>W_Mxv zX019uGgUuza{AQq2^T4Yt@FO&)apS51+!f#8JnurH>+VM%I!Zgm}`*9zTexLnh!@a zc0B_O*CB?cS$t0loMpx6?2#j_#6$n_Yd3%9h55Q2U3%W)D%QEZG!MN-7fvMue?LEs0zuazRA>^x&3 z)g2gedh95Dy8Js+i_65QtE9E_vXNJ<2qF+j)O_z(+i(7Du$#)$(oXT`x2i5T;Iy*C%V6E1RpU>v5D2s#MP}dc45Cgh!6rwBTtI54<2b^bFwKD7;0Pb{)xu!0%LSyD&0cLmiy%Z;GDPV9YM6nhuU=&Nw` zC2n6QMIc2ZAMv!-x-at7DBkwJ+>}}zFq@g7Qt^G?>x5Ce(-mRJT(1pHARC)Otx{2x zop#KNKCI0%o7ExM+%^+OiS|#dDO)QzoWA*AeR zy$Cc2V7%r%baLWjkDaMhHHwhZNtj%}wR-K=>P903AgweDCsrmWDwiKRb@BYHS5d+& ziFM)kK#C{5iYRDbtBk6^l3bGQhhX}jn{W{0F8>d|{KAdRHllKi;UUujN5MLMkijA2 zdRK%4Wyz_pIJ+<12S|0@ro8)3ZN!N9P|$sC+I?F9^$YIzVjv!d_S=o*cSJ|jM+eb$ zd;L-b0av^6PyE7n{?_k$>iaI#{lwO0CrB$vw`$#MgP*28FGNK7`uOa`@_G}=3nR0# z*|{(=1=hV(1|dj_qCUo*4uvI$B7l@N}vL*s&(I5Sy^r_ zFKxXy9?Tt|IDKk*YG#}~4IrEbbdqeNxQ|t^My#aKOo~VQhg4ACZybD%{jN0j(R4e0 zvW1q=%w1qW#Ty8skl2L3=l}A|7hhj|GmbqkNI(#&V6alUD4fN~qGI)@z9U+8 zH-rQ0bSAN8e~qzG5=T*NEkkC8<|@pcZbZUr5cs~Yh@6-6QE`!W#}DivO1h(p&fkvH z22j@FpSA)y%Z@zpvj8(mAgfTs53Br;j2GZmt^PRQZH7-*Q(!rQ!FJO~IX*zah zc4Bs7V`X!Fbt5qbfyns^>+#oD1>1I{Oj(h^TLpDo5E%p$2v8;_aO&9j8?7tebpNwE#vdj*wXhUEo>|w2) z)cX&)w#rUFg4X1Dx~wDPPB7yAVm!m8Y}jd45Ca4;@<)FACdZbqpymmwO_&^q2p zi{7r`V4J0QryO^Ad;5N|^GxDM1PIY4w$qJ>ND(SeTjt}l)!9>%LI`3c!OV!0KtwDf z0T3}rd$W6capTs)=E{0EG)#zysI?*%7u>=j-VVEIb z`tCn{<#w8WNgz2e+9t1U235aQ^TDKDFNhyP8pJX8-INE`2R=af+TQ4HkAU4%yyQW_ zc$obwg=_eLPccXIA*9l}fwa(#e(GPn^w)m$@@KA`u*u5U?3Ahoz2IMxX%gbzFR1*8 z0CM)k?Az}zT3`@ZSlKv#W+IRGm1&FR0g=G?D*Nanc3qLe$59EHUa})owIO7AT0U5Tq?2e zcxHVV`U4q+wC(;OlxKq>sqL1AWYwQ=b&gcuX^Cl=F0z~L(?fahZd9EAm-(^9@ z$ZnUd%)z>#6!92THAD@NAB{l-5Yi@Twr_t4paG;@Ha%rJ!)x*@R35kAv1`}#@h3ol zlvop|08^e*j}I(^Dd}N95CA00!HR$RRx;Uacc#aufE--qdOaFr3wn0XU&Quf0Qxe^ zuTwk-g+`IGudG~EH7qSJA&v{ zqmAdd`7S8};9~O-Q4jK~2K2x!ij1_Ues=^;T#RP%9N6S<8vF3>E}Px$PFThFQQ@ zN-G4U#r5{{FWnrkdbbzX!-Pp`L@?G?YyQLMPhGw^7mNqM%*G%AI+&63p-_l8x$DA8 z`Db46Y|Tm+0wh2mzWlYf|J<*OJ+Pd)4tioG{IOEz&)( z0J_&}^#QlyM;VJfq7NjcJMsdEbUjS|_^-VA-zW4VADfHj*C%GDDwAU8TesgKFQmHPlG&Z-Q>B+#dGpWerp}wGCJ!w>caxqWG zf9Mlmf9{p*ch)@5BcwR8o~Hq+*@?8Ld`~G68}rKI*4j#Qe4={%_|(~x)79|+3B@uO zp$icp0?s7y%#opp@b;D;LwPP=6{9WnJsbA(E(ps48Wt_CixX+zCVvrxlEST2m?Hrs z%~9vKeBb4N``!1yywUQ;CSvX>yQvyHqA;VCm-{4+6u<;PLKG0o97S;yC+@Tt0%SUj zb4MklRN#4m=Xsv$F}}kRvD+1-h%#)KQqKY?@0o(Cis&IEhyXwUBmzJXg`2i@6H_-L z#Q~Ci30X3NfC^00E_}(KdrSlg6(O;h6mZJ9OBqd3sFX9wbOi)J1;8yjx$2!?X}mgh zLV$?VXnzO-Nn#|8o>tPh%c}N}swlw@*!Ls@RxAsOUs1=;9GgBi)oHdjHX32Ko5Ti@ zNGLbk8<FKqI$~lF zCB!I%kVW5-{2Z8IUa_T&OE?=qHaCo9baV&nL(XI{sa|#ni~>MJ(u(K5f)Ha-^Ai+d z&-0X00CKLN_k2n3 z=fC575E9P(g7ub>B0x9DXc^1NvMN3v@_`io3>yZ+`X`RKzvG8Heleoz%jk9*U!u|M zvJp*4goNNB_(Wm_3EbwGFalWA3bof*X}$ga())Kdnqi_8X|2R^632)zRt=^n#%HE# zWA#el`<_+^*zCj$OB*+CuOg1C%JU~EtySMdn0E_9K=&;Vyk0=W3l-2BppunoKR`mNQei8E>F z(w^g2D9X&GV&&3GrnMoV#7V_hpZn}n>T9puoZmp7P=J%<(xnr%YVG#zwXJ5`qWGE= z5->M5JDVHbn>SaF&yJrvH9L8HO!*!sR;&>OA#i5df;|tePBvoZv?fwOq>s1quUu{J z-RprP(A!_%txUUTDo^Kq1|CJFa71V6Q`HfH9a_R{s}tTI_}s%U{EL^i%ou8f>_}af zS^5tSBy`Wa=1`@ftW^jgF-w>vQ4}SK$xVJT_MCAKYpnv`_dQQ*m3nv1T5J~$(ig|M z^ki@4>FM72UjYzQ6=(JDtm**}fdFk{)_@xs-~j-|NNat03xbehZhS4?`f+dKELcRa zU@Z3d&xbBLR4h-Z7p6-D5m{6RrxyGtmRj#zjAN`;*a~r)f-%OjXibG-ou*&Ff_6tz z9!=>SAYv_m)gDb8n;4rJk2~?!X0z37M`6Uw2uQ_79$n$NmWu!^AOOxpk(4(*9!yVo zW0Rg5Q(KiYU%BiU2})!wFldFbFaRJq_J~j^iCdxqVFGu?wLBV&I9PrN z6}KB4Sh(007AO`suPxVU99}4Zeh{ra$F0{%=eSodxLGv_3dmT2>ER?hy|4p~R;b;d zbX}+hzVCb8FzkjATXs&s36ZUBG+UwPjn`}Lh)h=gkxUi5zYXsjcR5E5V#XxzACB;I? z`h*;Tvf-hN_9YC2M4){Dv~0fpooj#mAHVe4R+zi~IZSl8xVfivh#_irQi0kWOXZSwx>=^ zc@+&(+_`i%1L>}~Ac{3-Pt6{iomgIJdezE}`IU#xOixc&xnvnrRJqFnT^7hIeKl2g zkz>{xzxVr|z;C>H^Y$7A0b5>N-28#>f9R2`XIJLe@7!KqS>3d35Q#{kKolm|Z>`QR zY)ntqPM@AVabh~Cdu**W3lYQd0G+WzKVJsZTH;fA-@N?98zfP zYlpnJBewp1Ktku2$XVkF0T|oaf~1|>mSIUL@2_nU0z@$DJpUUw{gc)tL>`f0YXP_) z0|Lm8FJ|SCRF^EmhnpdsO+GHy1M4fiG)#}8FF~%S`U)ioV7V9YY=9UJ@PpbHknYC2@#5Rwu}l8(%bZxk z+@;Zw&OZ?43HCBTw*9uhBM}N9Dv(aN_$7oS6~?l;NJJEo@B40&&(hkNnY%Z+F8ej>SrPjs`G}lMU0XSA%M`;tDd9$%CYADntMXq1%mwbNjR$;1op6 znqctLVSyI!8DVieW^28(X*1n!*CS%)M=JPxf9zQ{u>d(JBD34g%aP61y=7eb^Xa1u z(jCfG$%=SL5;**JsZhnIqdUUxyGY+6T)1?i0wQ+XQMVnc)K?q19feBO7h$%7q(}q! z!TgQ&Z@>Kh%0_4rl_n83k)5jhkDQ;obbe-hy6zHWX2YpDVVV~U2wZw(HZk!xU%6#0 zAOR3e*3}bNA3k&81W_U;aR=G6g{g5<{rO*d z^ZHizP@+FabkKCK+yAiX%O5-yei*cSe`!Ym=pZMF1D=q!spmd{_lS<@uu)H#%L6C> z+{-sxo$#lB$FpA4T)n+KF*RPBs=44`=@=TyOq@M6RUNMafVIY9Qki^?0$`0z<)6OIdQ3M!^P9uD zFKE&QJ$nHC8M%n`Y0G`GH4eP68_EUtA{*Nu)ImTL%azIMk3DC-S!l>Pdz*x|En%1nrHV%qJF^o&6uGf5L7r~ubMD8KlAr4neRh>&I9etwFO<%kv> z**?(s5G1Xd7=BF>^5yO0Y?KyQV zhWYSu)@ckZ0!Ub&tktJ#$9N`*l5Qu8qPW|Qj4{SoallQw4GxH;l+s#xzSf@S2SHG& z1huLcDAa%;NU;#VxAx>;eEErAzJAIW2~-=zGNvwD5QGpx2nmrWZm)Fazsrpq2%Oy6 z0MfzC1vb|CkiwGM)!!kcJfyLF6Ndd9Mx|s6V^UJkQ0rvl>)d)rDP8t3g8&i)z9JIX zc&=@?QW7J0Dy!Ji)gmHQDSPS zNJQE3%tJ_rYN9(B`hb?VZ>oV0BH;2-Cf95SU;%Vb`uB$zhZ>}h;3RlN`=h+8q?7Nz ze0O>E7rynEe&mUVCUIk7E$l|)(_?Y~-7aJ)h8)y#PM-J(r`ezqz#12r9v5EBW%5U;cqFJXN2l zOw5i?OxG`*pIf-IdS`LH*^P~1MOq<>NH;V$?`$luG>^@WpF2IR0c>JZR42ovOk$lJ zRX8=$6Mcqr+v9o^s)POS^}jt-s4ZOQx^Pda9x;}8JH&Sq5(NO281wy4KXmcmzxi^r zH90*gU^5r4?wypS;%*@`AN)L%#~yQM7#$v=h^p1V_q0-q5Lv`B-;FGBPsI?)V~}O7 zDFA>JASwqtWEc>zjct1gYzV4^NS1J*a(fD(C?)YC-}+a<6MsBOSffvru#Nj#2YasB z`yeF*R0sqtUG{HyPrcN9?=jOs&*#h!ytN$1383>0KBRg|-E=pdqJ;UBKJT;mu+|^| z68aS#)O-OD7B*}RGmB+*9FkUwl=c)Ug<1hBAO(o17{sC=V#thNdjF}Pdi8s+FA->~ z2qX>l0otMn=n;;=5B?2Jr_~!HI`QG>$Hpb0bsX1h!sr!mp#DjX} z-d@t(25)w1A~?JYkO;UDEqn|Q1~kRjcx0T$7UW+um?IBB*! z*4j)%#yC!r#MG)mwNfEM;of3$KXrvZ>|-!1>3bT*v1J|_;6Ctu?C%#v!aX(3{wPCJ zL;z82*zKS|V(eLszx6Yh5V!zlO5vmJYPo<#W-pfj(6U``_OJ(cxPRTWhDC@fUoxQt zkQ6bbGEcj!x@}hSp)X<&B|)&UX>2r<^E-z?geI}os&m7fc+>UPM)aHCc>Bh3TY0`^ zMuNoHx#`+xp1gSe{5YvJL`7$mB9=qn&qW{CRAdurZ#Kg)*|79izk2=WzVVJRhLBSKkcX5GFK0)zEgdBE zGl*_)^X3sIwH@sY03Apb%D~V2o#(Dslp{K#yQOQ&Lg9Aw{&(rh82RI3C53?YGdcH4ECp41L|wSH%FmtUgPTaJc>TNFdQXu` zdp$sgHi-7L=Xpgtft`?GxE~A6sBDV=ItN{W?|I&2Hw@dIP=o=12t}aN4Wro9YZc$q z06jLIi7!NfMuk zt^I*VW-nei0mf$LKaf@6u$5wX+Jl)QKo*4%A#<7oNaUUt&RiG2%oe_M)e~WX(uqz0 zNZp|gU7&ldvWNaVbnPr&IFEDG*lNXLqLmU6Bt!sD(^%byB=II{i?^Cz{N{UWU8}Tb zjS(bc?Nb*|eD)I;D|IE-h;_zcImVU;UraN~N|p9rYlQ_EfRt8R10XOCFo?Zrwury= zQGbQ?&jC_wVi)pI$Xe($!{$aqNZ)ALKmQwVeDU2yaPH>$(AxfdxM`G1d!%pfn?8h9 zckp=CVekPov?1?nRUBsYXQaY*L`O7?iZVeeJ>PD%|Ku;e_-DWW(I0de{MQ>Ug{o9$b- z*B92B?Z_xlgbX09E?diWPkD-vvb>1mBw=>3k^00W?EBl#W+B9CirJLJ&!VhWjH3nH z?boHBrWG*UaX#i^X~E}EL8=_!zi@L05Wn!$ssH&q^I;g(YLz0$GRPgsnRZGyqKi!jORIqmtj}!yTz-vxI_>cR|lRB64n+L4?_a60HL; zfEwU>IMf0F0?4Ex-b`-(AHmcAjY&k4R-SK@5c*utW?Gi(Ymmmbq13}Nh=`3bxQP$n zXy5o`5L)qAxfp#CMseolM20fctLNSHi~cl5V4ac%R072G@Pza7jes^CDp^l(|2fa@ zD2TuY0FXnZ_UiK7Uwq}MfBfzfiJ+%jY>>480}7D{IU6nQNz~fB{Vluv22g_91IW)r zq%qngUJKv^%8--yQiZB8JqP3>kYz0A3t5%fife1s+0`)@} z`=(J1(pQZbC$Y75z^(!T*w?-r-P`AMPbu03l&$72?ffYsApr`YShiM7Xp+Q4QDP0VWy{&QO^5Gfwxvi&M4qpMisuKu)}%e9 zltK+44w{w}8v<~!Z*g~}SL`9}HezlWK8a=aw+^Qf5r)n6Ep&MzA|bG7g_;n8;Jx=Y zzV*_LMgoe^vax`^mM=W>@Dq>CAsexY^9x>x-8h8BbT$S-M4NCkj0I5u{J>M561ExO z*;m!B1li=X!y;99pEv{I)(J4H@CU^;kh z_W{xYpg#|)J|AGFA2uENz^hX39{|+1le0er^gcE4;4af)n2h>Glk7r1QAR%GY0sk~pYUUVmqCa-w$i>S;-0 zP+C|(3?fX<)+cAjE^c+N-Q2jfvK7XO)6O(AJHH;8#Q+hR#IR-Mq4W>lK76OdF{Ub2 z_9XM7o4tep#r@Cpn@m{EU)_ExOLsm~0a>!htq9W3=kSV5QM5tAfyp360RTt|%cJLy zJv`>U(d|~M0TFWQ6f{Gw%8IH;5861e$&Uz$$chV3mGWeG=)okXy1Ql?4g>9WP>p^G zckzmIZJYVJ%2WZ;1=Y+!4Z@}iNfUehWG5!12aGALl9jL1+S@pFnPXB~kgagy!o5j3 zg%W~@1gKFw*Oe1ickt2gG+zB={f4JKRv>@`7=@9wMtKVQfxjJ9t`W2=z1S&Yy^fp3 z6_@hfH9#5@$5kEzGbkX8*ur<;yYyea_Su)0kE6$mLl(s-0!#vgHif9Qj<@b~u6*bZJ}sW4 zQ3(+Vf{FrEZ@#zw(wp;LODtAUVwS18_aA)jiPPsMZP;(V8%}%G$4%?B^US#oa{ku2+ z?hCiuEJR9ri#_xWgd_T}&;hsUgY8ATpLst>y?rFce6MrK)87>UwD)Ch$clbg@r$9X zJ}COY^wc9dWYi}{BLKEo{>lrtRyy%deEQe;K$edBeD zZ$LEP$7tx|AGdRv7#pQ${S8NCY&TVcc2T4Stbv6h*I-4-b4-fX~yvO+?o zNGZ~uQd(<|ND&btW$BB6aKQv)ILMPRgaePA7(JvsTx+pBSGJYR{h zWD!p?{3jQ;Aq|~$P*YC6>SW4RPad|$4%q*cDXR=Dr38bW@P4fJJ%1QQ2o1I4$$8*# zaDxro5;vTZvn?Z8f>|7S02J~dY1{XIzVeAbmjDuyQody?!nytj0I9l=D$ocZh(M?S z7=Z!U8rz}T7n=|L-s$;cV@YC>Ns(X@nm9^ozGeXeSO4XW?J|EmXk??PzuaYbHb382 zcw2fc>)t0}0b*2P68iuA)yx0yH=bGU9M?gIAhJM$g1}@zqeT`#B;@9;7m_` zR13y3G%Vm8+oLCT`K_cj;T?a(#!TSqVz*f09;l@7rA>&b8JUON4i~?P66U9D^RGn2 z_kE?DuU6L#+n&iQ=)ezFh{^Cw5D?$fo;TJF<8ByQYY+(ujpbIm8z-h-t$13oNFjzm z-?$##1NXvDA&^vgsMc5mSTv zKPS?S)#UwMI7AFGayRqGQqzv7XG3{jG@G0?D8uRQe*R8+aru-NdpzOn_3 zsIt;9Ac|7@)_aWtXNn}u)J0B|m4$Tr|hOirjjZV^uMXc|6FVAoN zkH7iuR~H-Z9A;+tGb)EeLWh&9dqp4a(j9V=a_7ep7y0!E2{XD&+P4KzUrp_)fA4Zx zzkg$6-NeC1P|IC|aYIBw}dSrUAw+``ott@LgYLO5|oS}hK(9`ui!G*NiV2L zlH~k_+ShFtKD`K zXa`tj(h>r&Bym!~AXSKmP1*w?ynEtw>W{$5!GKPHvyqA7B$nm{D=dn-Mo0FZtebLTeiNtT)X zi3o__^YHA?y|Wr6G3j8yuSF(FJNQ6EM9|s$-*?JHctlbNrdS}96pGrm3VOYJQ0O21 zdykZz50u_-aB<$VH?r0S@=6*i3lMSK5Yr^*$Yw|ZWEk^3FIJ?{e9VIb9l~58RVJEJSReHW#OI-9< z;4W*jUrW!Yic$gs{XhDbULGi2IN1=KEqD(;&EOs6@T~;eW;Ct;(H;f_xAtVuq!4r#D`Lb0oI06A61ObeqI0H+1MF9{534A}pNQbqsz|I`* znF?58|73xPVoai!IV)EBC(bBR%dgg(cEmsQNk>Q zsE9C~h$TC@m5-pzJrzKTcVr7}{)Rx_nnFaW$2Soha}tH!X1IzQ+S8SqKQ%o*F*O#{ zE2II0-I|EQCyl zd#LNW2n5;LX^C4=*z878Yz>gFLqq@U+t>f{SKr?>7D}*ljOzMuUG1|$iP>>_1@>c_tLRrV>UA6 zUdCJkXB3{Cu2l80#rgH9Yf%c`Gz35}4C8Tt)R6?`=s+>={AWQALqq~3cW6hF&~!U- zv(fE#!mt~g*jSVLM^4Xvr5mN`|HvUdqgD(7F=CCiv5hftZ;(Q*RZt76wV*y$@hiUa zl(U*oGwKC?&$;c_tOwgXs|csv2#~gkef;F~@jx%fiT1SCNM{>k)4=1WO2P zY^M{=WR_O_XxoUs)_;2#tOW(wryrnmPYb?Y(l_&?Es}vBC@hSqKnw-(O5^NbdE?5@ zy*}49o~9U?-6tr70*HbZh@`XnPWQ$)C268Z(o52fj2zP{9q$1EAOy1!-TZd#(Jxrg zDLdFdQSiP#18Zepb^`jk1w9|x;kLyA$I-mg)V`GyH zDU|>r`dVjP<;r_@niu*}fqOwafC9pt#1S#HOmg+y?CI0T*$9xz2Uq$}!9iI5b&k%V zA^a z3lTsVR+iS7MJqr6L=r2Y1d(p7Zf$gv#4;j=iFxwUi68xeE84dvjEGe6&}|msz9)9T z(7q-D07*AlS?>^%h@G9Bn3$@uIM7QUP>4vA1kcO{8*?}Cl6Ndx> zCbVIzVaWX}?<%G2%lk}25RDXwP?A<^ddITm&N4`h{YX}U*KJWY z0VFT5%~$NrU)Ps@Cnp9;llUwGVq6Er{M}T`LD#h%KIG~UK|s7$laKwI<%R$IiB~){ z0!YlAP9)6E@69m(yQ9j#;~P1;BL(A|UauMgFbecEw;W>@1O^hGUpw_*zx=(wd3`dG zNU4N`0IdMIsO^Y^%m~uB{X)F(DykSgB_gSj#{deP*)3%HqWi0rbeFmduU5}IV~wOW znM0~WO1&EproToJ3r8-~xf9XzlC9Uw`U^@^W|op+RtO+a@%`SYEL7!idO)Iq6i}{h z3EjCNPwT0PiB31{bi3J9O^LCajdnHg>(u}Y@aleObo&fR69E9jC>Ace&;bAd0nyr1 zN(pf9KvCw`4e|!P2h=|-M!)E`3&bNhf$)8goKTv8Z5pK^XFR)br%JQaLoNXTq$D(3 z>&@m?D-IJ#=YO(j0RXk~e9!m2pc44L=lNPIB1K3@geek4n9eSe?q0C_mxWnOV&W)i zx4Tgo$5E14YZ7Z&&@v(tqN41qG%6$%kmgpmvDpq5)+VRNXO2x)>H%rR#=2E7<9@eF zW;zWz%#ZZuYNOR?E2VnV4FM^=u->`3+Kib2!5Z`Q#bZD8{Z|zw99u+({^W@4;4$rC z{R{y_NU4>zt&LVpiU{o4xhe9Atu5hKI~SyoexWpJ@elzh>BOzAX3~k2MPJCT>7{1$ z_rLkh-+KP`dSuY~Eq}m=L67J|PrIAAhJTpTo>Dl-F1_#4eK07mNj}e{IpPdQ&sibW3o!qn1&VMtQFc1%QM>DS75&7dv5cYhk@wt%R1o{o>6} zK7H=Qi5kZiU9488kRbt*V7Bv^rkXt!jKY`=qfYlbbE&P6y#N9b5|UU6J4th^+iHcK zb`;0PnpBHcs1*r-xUga%nSY#2C3B&c0Ki##_x^!QU(CzuILHo|A*YZB5)qEb2+IV$hdaN>5B~J-k5E0;#zv!Ha;q6UYsFDk3CX|1^2Ge`|U#99V#H#&Bi@@{dj7Ov5_l8Cb!%U?`YFR_eBBEUA3a1q3m zmzW)v8z~}}0*pjT?45ta$DWq)lWc^PMqryT0B4*P`E$ox2*73|4hdLG5~}Hc*7(%- z_^Y2ev8>oA|9BllEy7D2?ZT8)%y zx7&FK6oGa(G}eySDx@+i&;8LZ<`1VyBcQQ1PLdu1BgN0f_q?oEX9s47mFg~N2r4k@ z4c95HWifV~;0q^fmycIDG1}A4DRaRrDf`EP)UHnxB9cvHb8Vxs(Tt-6iAXD@mG&Iy zRK^msMia6ia*KV)JR*+z_?mu*D z(%JWxQ^BE^k0+eC@^y>unK0qN3&C z=u#Zf5$%uqCcn`F)2=>0%s9)AxbuBv{=n*`4*=S`2!2HOmyVj_h<2vI$wK-biu27( zzdpbD;=g|BKY!-Jk3TtA_kaipRn$oquH6a7YO{0Gb7v;6K6>V*H|JN?#`)97uDyBd z@ux0S#(f7P0T&*X-AvQ(Dzlu^wKN0pL*={$zv6<0@`0R<8!u z+HN=Oxi3SE<7A6@Vyxz3qU|5o-J#Ypn+k+5j+r@gchh@AKnTh6bdLdnK|7EGq;#oL ziad~qs_JuBPI$y@1pRDF2J$TfNtwnp{39x23yt;0#@c2QTfZ7i%+_kPAgKDDud`Lm zEo3Yp0+u=VBAqn__A<&qA;_^IDZ~~}M*@NN$*TloQ&j+9BS{!HTVbaawwj$VjG{Ou zB&C!PA^{<3rGQ~;z17%iRqMg*@rjAqaaHle8nK*$rvpMw&PQr$mx>Gof-4JaQ8!UY znROi_;a11IdUItfvP2}tJbr%mhdz5np#>Hs4P1;&IDq38bIrSd_K39FT5ZI`iYNS`r5bO4o!kuw-fco zTZYhreMVy3PGC1Q&yW9B5bC@eyD{4Hy1 zwu#kBT{$r^7wGxKO5QHg*Bsdg2P7{R@Ipc78ML^niU_lX5_E9Tv~8}Kx>*uIBoPEq zf?5EX0TJ0UX|$%v$tH|+sXb~21PAjyh4n9ZOZS-6vH^8$!UqSf%$tJQ};#WAE#f6;jvau;s2 zZG%YkX`(}`Ce_Fhks<6ZJ}0&fUJ+I3T~&er0A%Q_GBn|lzYYmW)(z51g*<*@io~aX z5@S1IG+wLTZHBw(+Lk4b3*LXQfNO|&o>oKxy}5C3Ucv8%v(lS|pNNR6PI$`0iFzfr z&<*3D9srala7=@W3kWI_md09hYi-LWNo{JPRV+=z8Psz~Ut%M7 zg)~T+H?fi~D3BiN73;Y2s%o}AK07zTmZMIxwbf~CwVI7~Y^)-s2%MjN0tAMz8Qy7y ztMltKbCXlYCsb97Nh8Pi>ZRu}I{%aJ>EPzd*49RY-1#^`K_;SB#IIdnYDC6U$}(R$ zH~S->yP`cS%t)$-a6uXUNhjN0+YK7#A&7u_^TukkYm~yON0%?0Kms-c289DkZf-+W z&e6Ros7Q=-HoC2iwn>Z_sRkYsd~1H~XTNpxU%$EBvX+nlL4=1nEWaO$I6Lqb^i*U|kNfITT(08tr{U%9pZ z(rWWhJbmtWJawk75!hA(og}<^YgPGla;CDp87{3g>Jve$)xCXd_58&Xq*W&F73ab2 z#p7Jj&mkN^rEFqOpPzoRb^g1rz84!t4b2#@-`+TXVyxZj9y>Fq>pmwUq(q6hFxy4V zS^!X#Qmsa3x*I7^10fNDQXF$*wY9Rc)oOI3&`NK!&bgZv5flLyD*#GiCD7xuWA%Ea zUJrsmd%i|R2)Q!8HFzUu( z*SX;YWDMJJ9BpiEG^c0BCui#9Yq7SMWf>bOph4+R7cpE2Pfk@Io37qoXd;ZkD3K6B zB#qRw^UlriX5H&jmGbHwL1Zq8000m%-F7ZTg}!COaf}joZ^f^5%$o)Mc}t^QJme%sYwyEaxbAP1A?%u#T5Yp zRH-wpg7W2F7GaRonNgXE(JbeQ6krz-Kwt63^=Ng@n|+j%n2>tl)Q~#B!3yfVR4Pz5 z;Q#>$q5vc6ifO!H*I!aP2gZwlp%9Vpd3*OTGuVoUgi_F5QZ*V7!7xWrR18pqpM#d#Ic_x*lI&JTy1{BcFRrdm?Nh_4_ll zpxGQ&8sVi z!$gdrr&#H)-CX}C-?{ng*H$--b=}z=1I$FMBf8%-YDDZF-n~z>%?fxp!IYsi$mbzh z+3v4U`kls>pZVnLl~)q(5CF-;=H|r*J{8=s0YKgraU7wWIoMMOZpp;re=W zePyc~CL*9nxhz>25QT+7L>LLG6@P5JJ~mdJn5g;{PkYKql5yX7%h;%v{j}06-$B)ODrqPvV$ZF|molxYG>7PT1{+Nn(<=jlyJWqcwYSdTg?S z0L+}L`jWRHmg^mn6C>8Jm0AU_%+!A4&Za9d=iZ)kmLWAUkOJ>BNH=6%4ayvgi z*z?{3AR>XM$$9bEhK32Ehg=-NLW{?7QaIh3&ZF+y_dFzYff4VvM0piufJoZe1q2|9 z6B&kf00<#^`T zqup#rk@Y;S5G^tR5Rr-O(#@6i#f{mM)04->RiMSDCS(Yy{U8cDXV^%@hL`78lh7Uh z0uVvM(D2*0*0v&32?Ary$;s-Ee)h4T0%8mh0ZWm^{u&rE!K4#I+D%0S=&fr@-LCbN zCPj~5JVi=4abXRzZZ^ag2(pGqp{#VyMMSOH%I0#Tx!yzz$f7*eu=2ls`K_OQ`F6)L zBIR39N6^m!Qc*G)^}>Ulj7Q-VQh2(LG!KAA43I-XSh(nucs|%e?+5_eE8UOw-bRBu zq7OG6Toacj)HF^A8IfPQwejuc=I?#{^p8Jr>dcg0pSIILy*aF~(rmFm2-TL=Kc;@s9Ep-)_Y)KJF(;3C(cm(-6h5cUfX|x3xU1 zPJ5xT5HcMui-AW`g3F;Nl%5PC5X^N`g!F`q*i?5K1~3lfD+3qB0tpg|*^F+!RC)OO zQ)5HNAYw6@EZFv-k26;*0|q5M)Rsg5eLq_Nj@|gS(pgu^6UtDK)cx}|bvdLQ2OsZe z_k*-wh!=n`iVIcM(}T5ALE!Bv^_?@9Qe8Q#xx`wNn34%np-FwuQ~go=?kx>=o-&f3 zjV?q&AO?uSZa3^sh^Z@_s{0jBS>QNMII*C!BiWK76O#FMpO~&A5{t0S3!9fShuHG9 zxNl7N27TfFh+4rydV_^U$zTo##bLHuh*&FVm8O}K6H{}OVKZD^Sle9N3OkYKdq4=x z&J&-FdGW^T>cZx+lhc#O9Smes5XhC592`z-i>vKMn^1wX>Oo2b-e25W>l)?xAUsvW zANuT-`lM&$5K$wi%`XI)W3i>84Ox{kmq;ie%JbJ&+ShKaDXoQ*b0@}6oE{gOWMWYP z=`7)EQo@8Xj0gzxeU zz-Y@Zt8@fTdT?~u)W+RFIUmIC`a$HmpEMl4{&G;X4~TIT5O|k79MMOXiXGq}2Vxr4 z)&+@Qip>A^!p&d5w(^HQe(uMvo(OzNBCwWEpPIfszkYjhV`|*@0B^p3=ix`s`ePMg zNjI^vEGs%euz$y_lrN+(2B3ho)(_~}ryps3{q<%yChe`Y?fh!v^z>M((OJE{zP`BS z_S+Ci@*PeGUoi*@v#c&`Cb1!{2nh&Tm<3tHia52oTJ>j-%}mdX)hDW?Q{aQ0vu8-p z+xIm?&qHpOB|xeI?%g4%ljaLyj(ZYK4m1?t zD}q6T@1*?pJP_wPGK)1<``-QV0n`Uj?VLehQL0v-f_Ff=#+fj4murXMq6GYwZ!7c=QNTI3 zD8BBP#LV$*Y63763L23Y^tY=6V-!g9da^v@oqCFsm{1kGunyKn8R^L&?LqZXKu`z) zkQ7K9&i^`a7s$(Dsv-}HNGmnO`_Jh9`k)+U?U6A5lNe*NW37ef2+Tp?E24Ys#dZ*| zM+l>sh4bS%kgbL8((}Ch*8L$I=!zv0U_?SB!;-{d5_OWqvT!9J#WGR#lmakhq9lnD z-wX1f2kz@)*A!+4dS&BGivJD{m;vx(=>4HI0{toeDK9elQU)x{2_RO-y>k<%PqvRO z&u^@+tVdz&dmbTxSVYuX*~HG@Tv=UQKX!U%>ex8?DmxGc2!dK~E^TeBZV)OFccu#% z;MPiGr5S0Z1VJhI?57@^ovYhUh@`T1kiPZ4RN}!2-TB+j)&rZsD{tKi6GjA7c=h2k zsF35r8dplPhe~4aCpZ`ykm7c-wYJr6cbUPbKv`QEum1aY7JllNUR~%Um>%=X3jL9w zk4P~OjQW?qUC=%><-Tv>z|pz`pxsCvhn@0O@I%%%yC>XND;_{~ePmnYBTEM{n_&5` z^ALl_PX`}+>>*MZ3mc^QjcB8j=!&O3tw<3lgx+Zt$^Hn4FdNGvtbLCZ zS+Oi^MIvJ&lPDigoSc5_@rOS4%)<{|IW<08Lj`OtTPrU9OB$mlXEoP>2O%shuVgrI za|e>#ilGcFrDYKSaPFclfCP2#*x8wfE}uSk{*> zK|~R>!WWL!9-j(q5=K#EO_W9u$Kp|pl&v9-Bkuu?n7brZRfvkxfb$M3mTjR0Ag`Wn zk{ZlT2430QG&=Z!0Kh=YxhG;lSlA*0*pNH(0GvnF$p{Po781=8Lt(I@Y8O@Y1h7TS zW4(h2fKrew#Mgcn;ue!)R7lFJOen7oj0zdS9S>vy=MyKdK@#T}2na+-IKki-n@|6< z`r|TQdr6z79r3Na;9owl=Ps7v{F$-lv33o$lklR8TYCQ5iLs; zCqp}oh$vF`?fh49z343^(lh_bmI$Q8a;x2LG&b9n+nGMmJ!sxyzwUHRCh0 zK`X#)6+)ntO?ctP>b2KzH&&Y7CoNK5cgqMcv)u+iZehuiS*f$vyHv@bfyZdt;BQWyyE zH|Mv0@|Rxwo8P#xX;n3-jCpc;daTvu<;_k|@w&~<;_X#2770`3L}c`a>3}X+RMpX0 zK9EhKhaQ@}aOSwNY(SbZ-&k(NKu7|`t#YT6xoGPwB9ItK5@rEw*)lLg7@Ne}v5D#< zm(M=^%p;FJes<>c1O;G|n62$O*AS4R_nU(DI|}9*J!S0t3OaEYTs=uok1Xs?XZyGa z0%DkrK`;}?s%J0EoqgzxWxR89A?$R?^YXJO#a0x{Hc1dr1T5Q`Dt+qY#CUbuM3RIN zh(%yvmQ>})nqEM-=O+99QlYSz9abs^F0ppkoBuoXw*60@gYaK3pm|x91OV3yU6f)l zTefwxA72}qeyLLn3JcVr{yjMTdC*hhn#g5`D1xNOZhptU{|_}d|K)_}d9@kRH86tA z=*EO)K*|EHqX0-6u?_@CL=Yr0V?Wz|_KO=A!w3 zv_lI3K->7%0#JsIB0zp>Bqug`UEVW35WzOho$rvC6sRoDYCXKA4}#gIFJc;*h&0<~ zbo-YH;^OlZ{B?#xh`#5iH*$36!zBe6%TXNnbnPDUA-?A+wUhIs{Zdi6kK&lEEdwUK zTK2Sd>)Ht1cK{Ky$i%VnD2bEA zSO#O6*%G2w%EWfz#>&mNZZ}q2Hnz=`#^Q~I)bX<*h#)~DOm3~U44_h!09-yl_xR(d zZMTgoM}G!ss9{adOgL*V0svIHwJYPWg#ZBn07*naR2jYg?t(QUBA&)4A3g=hB8*bp z7E4br|Pv@wXxA6pp%#8u%JC+Zqq$v|Gyv# z^_yCY009s}^0BLD*EgGuW=KkHc9VsT?wQF72?G%bLk>2j-dMm`Hq0ynh?Y4viRbC# z$EQ!sO-{~?qmLjW*0N#9cOXj&{7{wGY4ClUmA#G1v^?7_2RP)a@2Lz52GTEj3J3rj zi-@)Hpf*|Sw!*dL)k?KHb9}n*1PLN0abk@{L_tWHtDb*;X8giKr?0iA+RLwScoPKx zZMv741-2C_y4M~k?|mZ|2;T9Y7lJu6=-;0Dxf?_JTaW!?)h=NM5~fNB?6Pcr&A^?6?ZO_C6R1u64ei%M~_@M~1NOy_=- z1rdmp@@g|l!&n<>@KAuQRlRCWyP3oG7ywa-S8qz+`hkbn$k~$#NC^ch z$7SDDXDHV;j((KAP&^Le(4V|gS|+eoh$*mEs}QDI(x`neB=6y2?F@K7Ma$U-CKv07h}d z%;>ru^hN^_Rw|YB&HH4M2!IF-Qt&|3k17(P?|bDMKZwc~006}xVYeNIkuW0?kpdBB zW(lDBh=1%fuKikF!&tTA03c=zyOCH%jj2PL;zCu`6PF6U4sP2+_onHFy4_gom z7w$Y&>6`QbthLpt$|Fx-+FIJ0zp)r~LZvj224;mogecT)#dqGF4+0MrDnLOJU;qHZ zg!%Sbs}qA#!~iFz>z{e{5i}tv0wE|FAB_O}`XDPPxvnB02KD;8iyMtl0kE~_=O#~_ znGh2ps3D2ud1YZCh){&0Mzp@V8AS;Sk`MuiNVQgZVX^tAe(|-JR~lK&%xqU+=SKQK zXw)Ady36_;_4xyw+xIcjcPTyfQD5&rY-`yeqWiS!?Ud&c0F=`1yXL*>#7EQg5e=mS znkf7FU$!IdcCHZsZ*-!ce(~n7%{PAFRPE_wbwqso{ne*0pR5FxjkTt#cqh)xpbV}I zI3RMCV4wjBn-Pf(kB$2uyK?@U-+dc^iD+#rtoz<{RRQNw=P^6@1y;luYXPlDY>Z#= z&z(LocYLxkS#eGU*h(r|O1jYqCC#FzsSRpuqjzjX2A_{;tC7PyuZ$A`>22ns2*&FK0+ z4r-@m_NoYj5R#{>)0RTi6<`Ky0TGG78YypXr+dx_p0EK}Xr1{>Z+EZGzIpoC2C(C# z$EXz8-`?F-Ke)TyTYa~N4vrM>+A@JKpz1LO*)RrhW=)b=0A=kZ*}FaNce%V~^FW5R zp)z*qHLM@g>+Xc z6}S%{WtGMv-7tb;1W8G8J>Sz>k+W}*-Z%HM>@LM5vBnh5e@atu>Vv7+uMUC`5u-Tn zcH1V2k%*9hg)Ix#uy%mSP&OC!}WGdN(rK;@duy1;#Yw~1E{c2NyBk5EOdZ8h*w@oZWBs-i#Ipk zzqLvLBG&iti7Tg3Ilt9~N=QrNW^$K;^Ph-GJK0)mwpv{j)I_PPd$F~#$}haS@TY(E zjg8nKlJj>qL~7Ws89oHGr-IxUiRFG)W}!1Z0NNk=vrRfXcFa-b-I0^S4;$T^#o|GY z+amyIPu=UD^u-d<*l=|;0u>#PokNbYFs`u&BohU z-tc{I>cj-NO>Ie)u!47!Z8~x;o1*(lDa}c8{_O11@`-D=mo)*PY__5?zv>YPps)yv zh=_n;W(LC$*~IhI`LlB;&m8l|17Trn0kX&-Dd@9{(S${o%2RrVJ{45JflW@?`#RN! z{^S=uONicG*BI7XLYSNy6A`gFP6Pl12yq-aV-!IELBr;u+1fO3UfWt`{}dkoZ8Ua; z7rq7Y8^T@GE*=gri)Ai{Y%2jv_i6#|vzc@fDkFwo&TbAZ>A2sN^^))3q>gkobTboPJ0(q z1pt8%yK&5xF?arz+o};(Dnb5kcCp94SA2btM+c4|MsYIiz4XHKJfi#<+WnWoM35*k zHViv)6as=)3It7J1*%xRs!lyaGmnXWjKdahygv&vQPb6$@4WaUAY0Q7qhLJ93o&fz z6@bw*>Mp4$9PH-Jz2%o-SG|jTe7FPAR(p8z;gb`ylk@K{Y^`s4zOR*LVayH_Cy7yt z6rrGq;AT6X-{@E%Pf^0=(@#7yeR`bRO;8#*^B<4>Gj%${6bqczYK{PBe-KS*UVZC! z7+Vj)2%npqnLRzlNeoDkdZ5nj7BN37>gIFXHI4OVtJP)0S}8(6L?IwT->?1c=id7t zpL?&#fW6fuZO{)5y7Q5z2dm=kRW#~@9|w`;-KTc=0iBN)ePjWk2iOa@$@*w)91%Rg zS+Xd3J8c{QSm0(S{0FbznGS-LF#f5T@u`Z}Ftoh55mdbDcqJ8@djeH1KV@5OWpXA7 zMc5$?=L7MRSI@3)G&}83D-}j@EA%ES8bBDFzg@8+iLr^b|G4W=+UTiN!FyWgBidFvVeq?@@6l7LtQAwt`{W*hGy4aH1y zGqfH006+OBo$!-;I!Wh_8KAYrEK#ocFk)U*6qKU1Fi@PC0vZ>U#(ntRxI?UkgO97 zq>Gq!i}Wp*DhqjmgiG=Ka|8}%MJx>99D(w*uZG6|`mhiKbi+t;&?hgsfTxwGJt+mH zy6buv)KCPhaGWGCq+6yyw5QemS$0dyNx`QWb;54gX$u=dAXGLn7OGHtM$LT!XReAr zZbhKIB=g_(vqZlg+5mBOq=hxcZn6=ii zF%O@azWU^82|J(&SPF-~%Z{LiMf)oJNh{awP@wkTdF|HXQqw22)&vTkxO^JKowY4U z18xa-lLsL%n24L3oldi3jX^}EHGvQ+5b%5z8TqsS_T|6->Ou?vNFtp19fBd41Md)Az^PHqR}XUaF-eN<#^Or4+VV$0ieS${08Z8a&<%>Ey6-j63Ap1_e4O} zqv#*J7tb9V`@^5RJmJUfPQ0?Pe%e2weI;(&s~6K8dR^K{PS|r9l#5}0%w0%HowW8cM%g(N*FD(_5<7ePWQbzb^dey_>33S7*H#P=!~k6 z5K9I?Q1B-MC@2KtNutQ!mPh{NOZCguAISy<#(01*P;KO}0wy(a`hj1psv?Q^^9 zaFM4;7a#Zi|)Jf*FX zm@81Zq)z=HOg;*#BE-CPlQ(YT=1nlIT9gd6RIkPz%-1-|duN037Si%h8;g8kV;Z&YIbJA0vEltcs|t@Qrup zi2#6&HCHblpFT6mag=%&%A}eU@gxKTaXV=>qE0)q#wY}Z$}I?j9sufk<>qShPyNg9 zer2)Yz_wOV6pwNivHoa$9{^#d!ou91z)+dkq9!6oZw77Qa+_52kHH+FE$_O*`!j7LH zB8g2doSD9Tdu(H~4VuE(#EB)J7}x^qsy913Gdnv`nXG}ZSer$}>N$zcq_vErA=2<3 zs$$6R46rJSw|7TFbdq5bcjh4jdz!J+%ag=d%jhE0iXaFxvc^Ye{R*zfB&e-)8q%4E z))k!l1YG?Ca{C-?dLNT*=9C5R#xar`N+ zUJY}^=6QY1PA3%LH0KE-q`m$*5JYe^ubtwXb6xxLsxmw5iS+*vH zXN!kiGY}gb?AmL5K>=V!&x3d+UVILb1!!31pa5&7Jgq+n55lul_f+Qsjo+zH%MB#{Rc3!(!1gHaiWQL`0|LNt8t0sOHx=wf%FZRHcQf zP`N`(*N0v1SjxRnZ%~whm4Vy_tE-G(r67IZ6V;ub~{PC8HQoPMu<=$A_%#F0)iR=1MgQ~x%p>)?e#m|1k*`RaL?$^ z2LdJ(LDix4tet&ayqKI zBO0U!KBh)4)!oGYFW zACYUnB=$8#lSE;|CKFS$S}9?sAr2BoGrafp4*`kD=9WIL#Sn)BK=+`Mi$d65KSY3m zy?qf7wg>=Vwq7%h*HEc)MrA6Pupo+9fZ#k#d=fap^dwi-ixG0iRU#hNo+kf!d)$0vhCXlufpfY((hQ5y-Mo8YG?vc`ZOfY3c;%acq@-Z{^f~_3h*zeZE`O%LpEr zVlCy^43rTc+;_Y8SQ@Txp-E^y8VBMW*X<2&>}it1Jy*VEysao?59JL@lfh7o$c-(f z(6*yn->p16iMlRqvG4p=A-_D`-ZcVhuXFP&5?)tY^}&}#)GP3PBHG64?aDpNB=CzyMZs;j3 z3<9v#iNb^x5sSHWX6Djkr?}k)BIGoMQUK6i{zJhQ?EN1Rh(LgR|Mok}H}9-#rPvxo ze)6%4)#))CC!jPkAPKNYV#99IZO7eCYzzwvA}Vr&K+v5AwOsXS-PphO%dh_Jmu?vW zLM5r^c^u^CuB!OK)Ak%<;o`%p5J}%S)KZne(EQn_M^fTL{F?~ zZEYCKNK|OS-4t+$+`Jsq+g#aMJmMw{xaQ-WjY^5Q?q1>Z- z9~Q1y0H<;4vjTp8P!X|kJ_Z3G(-lNmpM}{UqnRHRnii9Q7%^KMw*f3FL9J386qwoO zE_2e9aIlXeq~=JX*`ike?%J9E{f#S@#t^u$J)TReLz`olZM6MFg5_&Llq8|$I3VI- zuVJc*fn-jg3n>f%cL(`QEp-M}%fc&8k|O{Fg%Ga9x1Lv$^a9aKFYsZe=8Hh;p3CKd zET}yWZzYRgBzNv4f4z{aJCEXfKEQ|6|BnCwcEcze)RF~QLI6-o1-@4rUwfKO2m0oy z9c=)JV#DmbN(~H60R-^0+MxxckfWp^?Z{7LaQuh>ut2ljGD%2))+nnlsf&LU&;Blx zR8a}pwdmTv_`~&ydYHrv5?XF_VmB(seEjq$9)>tfL2oA{6hP!+{zH0R zF9IQ^E3ycBD%uENeeH$-p@?OE=+x9Bmyb&vr(WHnBy4myml}(=Hd-|Aihq8GPc8 z;q>ojTLJLd*k+?)IBP*1rZDZg5IHMD9wR8F2H`+sZSH!!@ck$l;vUjA=_3LtqGAXu z0R%(_E#abFdp_-wI6A39XB4T>^ryv}1vKUL7kmF@{TUHajDUvv$MN`YgX+hut%`}! zG?5H|aWSC*7*G%j2Q72pX9(zu0w{=ptkJNhzx2w5=WkyGU?7WxBT&sjtTcabcq5m- zD?chfLvRq5K$Pf~^-xJ}!6yKK`2jjNod~eq`-n}^9}x!O%)-sVJ;MxvT&5n`#*J|C zHKlbaICO6imW!WtRaDYh_>#nnS#{<`F6HHUTC4lyd-$Hyo+koAG;E_N#$tnKm0k$~ zMFi#cyUWS6h!(j25P?OaIPN(_FHs6bDK!|sZ)Ezr1y2Uv=!Tsn4hfaDKGdGkSAUZ0 zPl$-pv0Z&7dG9x%y9i#EN!sg;ui`NJjs;PmbAc`a=7}t+pIe+%-@p`?o)(DLiM6_a_zIv`UDS%dcGDXvPF$!A{oo6Azz^)*H>`t&Q7jt2dUHZmulf+1OfdC0zqnP$c!q zm!fkhLc$REYCW-k@&A11_y7F!udcNa6@WM&(xX`!UVpoN@o>?hW&6-Fc0_R0I`@Ni z0D$gKl^-=E9EetPL`SrL!jZoO027hF_v-wwys;94MgS$WI=`NT3A%7L*-@5McIr=~ zB=Dn?(J*((fdcl-shMg;i!dT~LL=G!ZJ7=Cchr0`r~%{X{{}wY=@H zX*QbHwV-4XtnR|lY3P@dMuN}$bfjfQW)>+-j8gdj{iTsz$nE75QL2_?tRORJWw)N^ zXc3i4xgLT6^*R`Vh(VfoMrsd(*xdK?z$e+y4Dv$|unahhGoQzq9~L?-VVk())Cyq> zz&jcxKuP0E@k0XZp>2otpL+3fvwaHDASP+fLlB>0N_}M&%Bz;mlrU z2bAvbg8*C9%66}t<>y>nzG66}tc}v<^1WT3Jo*4pZ+6E{H)8GuR+r36Iw=Z#zrO+Z z>*#A3<(3{8C&t=-7u3Z!J*@^Ihk?ZQ&KnjHBMPH9>UIc7EMoO>b@@LN?;L5MWI4I^ z%XZ=0KwY4$k01j$_vCiWvjNz-$%^lx{Quee^B~Q(uEdD!w+{K%) zY50#IPPaC?DnkgzxT$SB3!!_yCaW+eZ1%f@j0jHh z3nyludG9$%1``J$KWo!SvzPaacZ(5SV9cAZ-MoBt)iCEGMEc}orv_-OfI<*lu? zUeZfkCJ+RVgrzmEf`p(X0vnMt`in1K{Ug8l^}qj(xB4PP1a(F9fW30?L7~y29>K!j zrAGFU4dR~evQh`mlOrfL2SE3+RwV$mT^Sxut{>AeJs30rq__{oX#CuA^0&Y6%D3KH zQ)42_aB}O~?L5htf#8coho{x59%EKs#U-goXQp-f#GI-yBg=CYAmBswmF~EdM$7D% z%sba^0t~bp#)pOD!8B9@D4Vc$A_5!EvwYC&GjUK$3x0e3Hh1!_d3&*wXld^dOhh~e z6ziSm@+-e-J9E+d|4W$1L_r{z<(peQ^|;R@3yD3}WAuSxQy@QD)QC_80y|XXXSd0E z00soZrD04kNg+7Rwz79VPnv@`lz5CP9~3r!X28t6S7$$>>bB)-y@z<^Oo;@VtFp8n zr_(>AG$Y+*wp0&mJSK_pHTS+qNRWLYBLJuM6)TnC9ar{}XLp zG_<9wU(a6qS4eNcx<;1e_oQ<+iydt{WstF??3axOKZK5x@tY| zM~RMFm5;(2`{>Yt%u0u$xg59AB-#&W?*0fEO}IX$AsV+Qb4kgSswt#9FBgg;u3-swZaS_scb?G2Pf7_lY-cz|#fLzd zIuSvjPH0wJr(Abk(w=ya-)Qi+mgq1h6(Y?OLcDj75)(w3|KD#u{h8N4sF(tBk`T>i z45&#MzB5|(v0b%>YXzHwaLC0Usmnowm89)*Vv@S@T@z{okxCB9Mv7F=bXZ}hpfbmp zKCOrqF)ci%c3uO_rNc=De9j-LW3Ykr(ktIW{}$C@iyBDg(I1E!Yh>%C{Ps7DkEK?~ z#ZWg=)yP`IRQP;vN_=@^45B!OwfBT{%+;h<{OQy|BF3Al+HpK2nL3=rZVFQW zRmx-~4Ft-(3+l-UF_ZD$>&jcj06DUKv1jr_s1s~$ZiomG=K^!$$FTTu8%KKQ75C0( zVftWy0?0uf0=^Tv0Fib$ZIPUqYY7^5YXPSunyBt9RZ2xjUjJ|0jew;OSX$4-DC3Zl)`{z&%Sj#*8_W~O7+;PY?Z`V0T|yMOARfBTnTznxUa zs1h2H4T9VO<`6sb{OZ8P0rhe`C99$nf! zjCdIGQweQhZbIK(>;KHJy>PP&XCty!26E%dYCg!B*dOrmI^0Bw_xfOU%cshad}(QV zdb*`S1C~Njqf)7@c0#wK=2Bo-P1v!%^z@AqaFcFzFO?&+$oIl!+_E7P+ z(y0sG9{>|kGc+~mugc3QTl$ePf1~F0{FFf_u?WYhqkRyKxMIFIaAdNM}j#IsL_dzu0ug~jwqL{or54Je|83y5cZngE3pdFn5?$##Ne&F>^v zzpbuMmX%Nhb|(-Qc38x0L0Rv{uaT@3c1+_qqF_Qhj>C_k1{}H^#Ubt+2GpQ!NtF9;Cjjjb&w z3Nk86@uk+KpHvdVsb*U+RGc~TQZ0axRsd+kGSA6U%bYneCnAh`Rj4>%ZMHUh8UXt- zWf&b5hS{(^HTqL+;v`fDsmAWt;JRn=&;!gA$QKb#-k^0f9`l`TftFV{%{* zj29s(wpnpgW16bfjtB~-!B+acm#*B|Od(Fx#SuMmW>G{G?9p3~{V@3h!^|*|wVl{n ztIOT)KmPXHf8-y3^H2QC@BGrs*YBh`yrEW*^+#cae_!gjr?uKamGEI|&Al#mkLiJ= zeOmwxt?zduE03%^ZBy}*jbpXL?Y}*yN1Vov(L-yT1CXDQY^c6Ht)MSo+xXefy|B?2 zmy3#~{p{M?x6^*=d=;0ru zoo_dEKr>@~Li$x5GP66A0)&FY67oD(@xF)3J>LVQiF(@h zM5QJZ_IWwmcn9mxqvo!LfcnV{pB=$T=BV=|pZK)HQcY2<;)Vy*qEWyhwW<7%q5hGB zh-_Yy^|zR#;5l0{qHj^XG*vZyIaLuHl@f^|H9 zR~oN-6SK9pYK!uv9hKkF>-$6FkcNtRG)Pi$Zb&3ll?d%tYg{tBtIsHER2%lR`9|&} z&GKB4k%yn zX9A!a8|}E{T_@)j=cZlmhI+Lh42Vp>+fVzMheJlnw=Y4dy7tJ@l>Q3y~`)ufld_{z1Lt3BtOQ#jT0 zCuXKQMx-#86|%ySa!fR1%&gH^2RGN({^|GL{&Sys@%R6e@BI1CzVeOR8xF*N$78Hb z^utU?q_&g9^#C=jBT~}`n|3j*>~+b0OcTjAf6`usxLmwwN2hPJtV8Hv)|z30@_hfhb>FZW@m3frGr1q_p6f{ z2f>GCXP$YFE__lj1>^t-TvJo4sMr;0p@Gz;t^ra2@P3?fx%n(Q^E`7-U51)1*a+#+ zuK*M&6~EL_DklE+jdMTq{3rhUhrbY;EjSwrG!h?v44bxrbc=sVga(aQJr8WI=BCU7 znMz?HHe;Vi^34di5BKR;Se7ch;AIkk+lakatVelW$U$vIJy zX2~D{835|Ube@dPe>x>1FqC=r9LyAC!!xRYgoChy0L|x3Hc$EcE-e)hY+=$;s|OJ| zp{>nsYpNBhGRl&DGWXbDEmyZY?t4{MfY5w}^;Dy_pUw(Vz zx2|`W`>7XvW+wG+t9Qk$V>%o<=Ke0}Na&m8q<;U4vMYK}p(u;pae4HeZEHL!$^EhE zL1pg2QOSV^q&pnb(V_zeLYm1cK$+^#K6~ZT!p!e_{~1ZTk&Ut>zj1B#)R~2;xha+4 z`J}NokHUS*5Ebh%6*oUW65Qj0x(x|=t({$r0HR&1tn`*IZO zV(xGDl5XFyRn-8eH5au0w*zKc@$Y`D^J|xTigp12g@#jcWTq&Z0*U5%y!cEu{{dP1 zEsi4pT!CJHV5X<|V8>up_&{Jq;lsfTA}8WR4U-<$xIa#*7*CbF5bEd}ffdMtIkk*L_!G^)BIz)eht|=cs%232$z9{ zyZu5Mby}xCpt+*}^ni%Tn!(MlxXss$DWc2|b1MKM1jLag6iQ)fkTu*?L$W%#E$`8~ zV7TuL7pO1|84R*KcYb`Y`^X|tr`_^4S+!#Cy01^J=2%9jX+Dy+)~}3VW*!MFFsVG- zt0Yaf5OSy8ZcmGWL)Eq(`-84^0(nkkRMd1%B3eR!4P_8||1XIb4Q83=#B|8zq=P`I|qdPZ07qyKKow+@`?hEa2*2Y+%rkopzy1m3HIdPXRotQf{D=r0d z?bD%5wfalV=A_yjO5EQ{ufB6@vzsM@ltdM1F<)GojUcKNStfyqyVe~%dvoi{SGS&D z8N9ugtS5;R2O=V3B2`tXI|sUZdf>F72d==!bbp#`%yMUE)#bs#h>j%LonHa4FNA2j z+lNa>L?-S*FKSGSho9XsJ-Bo*ouamk8XBKzJu_n1p zFU~N-p9r9)o>O{IsWc}4Kar}mr(4rgQ7dMStklcj&?0v%@}w=|{c)tWIWay7Ux!_$ zUB`X4sY#7v%<6P=ZNod#soNL~zfTIKOz{Kfr{+3a>jS?s4$7~`DY&!9@suDZ&6zu` z^FQ2M|3+v8B?6q2{ves2>Zr=TjDUuD zEG;~y>x^^_%_Dt7RZtLM$>izv=U_YSr6UKpWc&QP`)9Aewf`5+%ks!9M! z$I2r5AHI09(~f&-5$7wQm?hxsQ8&&r*<9aRYA-Zl%iYjOeQC`7yIDYN$I!h%e`D6W zL}{7{sNJ&9Jbp?^{Jc`FP@1n-d5$`_D>zIaUr|ISpX#33S zE26v0IYG?@b-kG2!qe#4q28_(nhdna@7|cmDAA zU+6F-H_V#ro!cAPAYV8)Zz3zsH6viuHC(UVR)thm6Gb!Au{BKAB2Sxo+3pqiVMC+( zN`Jo?(D<+SIABe}ea7yER6qOOUcWam%-;M5BX$cV2LVb%A6uCE(8=hFm-{g7;O3SX z$VtUcpEcZZ;+RzOEIRoiZl9Cn3L67>pBX%yL36jcFl?~Z)3)>xvnlmiW(f7Cfq zI|0|amsC{Lvy{A2Pn8iHHU1VVnTiTi>v3NAxWpGlyzEuSOd1=|J5|xEgu@FURgeKi zA@B?l+*be1FPT&CX`g!!Mbnad7tX;eP$?vnGSL9O5eV!OqSk9SPyFqdp8o6KzZ&IR z>I{fI(5Qv$9Rjv-z+Q%WtFubWQ(H<Cn`v8X(gwvp@W%P%zD(*A0VYWdsAFdX)eu8Bm&C`Id>u z&R$X{fMJW?%`Zy-vf1VwUdU6UDB=otK&|iA8hNy=N0Mr7;fV%=fy=$KTdhgFf>4^+a2XtXb-SvKl~sGcAJ*4o;4LxboZOHh5HO5E)wd78mTc_UI~d-g{pUO>7PoD(Yq zZ04Vmn_nW$n`({%O30V&;E5JK^wgzi5$S-oY#76x4IMCAOb+4++*D*1$yuyuBn@Y%3MGN44b3J2j9H1xi&~Lkx+JKzm?%ndhMz9$8hGwloj9bEbLN@Mk+Bf1Q_-&EHmk6Cm~hfcL+Sn26OiRigI z-M{&3&;QI%e_$bEkXj;D?QU#2$>vYY$Fps94hpD(2{I(B!50F8Q)7a$v$Gv$BFo5! zA~u&Bb~}KSznY%krWru&Zn@&Nkaa82Q>OOm^dwG9H7jBma)e3Zn2XX4fmooj#T z?XDsQF(7~=5^xmFo(CItsUeW$rhOtl`Tpdcx5==U`Z{s1pIB?nu--A;e0!>(F@_py zuxBPY=Z5d!cOo)eKbJIGQw0D~Ma#^-UuQn%Xs(FQMW|$bNP`*G<0^f*$Y(5mLu9N< zS_%dz$!~nOw{yfQ&pUuMjWp_5L*Wj{$9-2YNoG60@aof_K6C32T>360 z5j0Y`(r~B9RD()3W_!J=V7L<^@@Nsa$QykSAyG9y|MK_${7a81B?dyuO8#J4J*b+N zIF+PZARaf_)jFj&aN~%kPbo)$E1dg`z;}hWT~*NRStTkkpju1SfjfWCkh=ch?Qc#! z*|P0(&c=EFN_yi<%&G-cSiat1jw%ziqNw?x`3jCQ4S@g+l$3~^Xty`O7#H1$qbQEz zVNULd^iFs<@tXqFOVYfGLN$(_nGat{b=0JJpuZ6k@@cE{$VWpj{>$M(cx5Tn>1ObU zmx%QH$;hgoh8Z)lrXw$?mQ!)1Z7TrePUI+{KTTkYCu@>{L=|&9|7n^15l3@M1%Tnz zlu7PL8~Ke$a|rG>w6UxT2FJc!3Q}cNqKLGAHGSkDC{Ixe~RP5Y2{eQ^nkC z_G6Uc*hqzF`Ybx9AO;PzS!@6KPY8yPZzh+&YSJ}lxO?MEI=Jq!q%nGD?WZxu7QVwD zK&m5X%|K8J0`&(2ajyAhc)QbS4|jqcW3Ep`e}*4azX^#U z@q=3G+)O(4YaU?@LFP(vbubFrq!8gt8?&&LWZ`@sa^Z2 z;F!KKvbr8hX?*{wt3kURP@4b)Mlx$;9}vU=15q!D8iag2-zJqxOJuLO zQ5P76Z593|IJi?+1sm8jTYj$l^5?Ua%R~?+r>Z1{u3d9aTuYw-QekqUP|mD&jTyYY zeCF@I@YH%dm)HTrQ4#g3!i)+SF9bWMB55iB+=@S7^2ZKMZbX=2TyD*8yz%ir_57!< z=d;%ISqUT_x%B_lTm=)9K-Tp)bg&M?jdp10#lhb;wHDA`)DRLVXyR1+uYlDG6ib7# z22Gtt=OonBx+NDqlc5s65`i(&Tkc(Z&aJ;Lt6wFo zPecR}Y<2r6AyM*I5ifm6O$!iJ-xCE8rCf=klkWkw02czl2N(zu(hn|~vnM;b6Cy6> z*lL!l)dc~@P<6U~XG3!thC4>9Nhl|gW?D4-+L$kg{w))%O`wy^bL*4cWU3+5+mWhU zn4fz0lV@5}jFA({b%bhsNeIM53}L&q-dn!D%8onj*ojk``lT0cyt>u}5fLN6Jt86+ zJh=}o5Oy+(XrP*4pZ|)nvV| zPRTM^12!6L2UH!KNb@BW0*9_lanI zbt6l%nqE`XP{*ZG%qQZ|vGxx?HD}lXAP7kUC41t1ux)i-NrQr%s6-2P@qH?;QnfU| z1>OEYg1geOSjH}9uHu#8=aj3JS^2Suirkw>@VlCAJ!|VOgquna3jVhxx+vjv5(nFy z;%L>-XBE6t!Vn|R0<_YQtOBl4z_dX%4<==BAZ1uqw~}7|&B5!xp@U_zUb7UC7KR3Z zD(R35afN{3)f_dFf%Nac`uK0(`hbgPl|UVcoT)&CS+n)4a7h)tXGqH=0t5jnwJu9jhE-j^OvY|PQ}~H3e*uCGj%lof%7xA9jk<$4ZnRc zD)GMjr404DgRPA&aS>Up#M~NCLt|W-$mzzIH;G9jH%Aq#oxT{NdUqI|*@_86z1iZ$ ziznXw^eGaBGS&L^m?_?mTOsmfF_JM9rn|az=hm8q=~(OXJQ4a=&)@hLFI_JN>H1;y zeMrjg5u#&yKh?LfcUed(H0P@{W}rm#)R9#)UOXL~<806<4rsD~%C zBSS~3Fq7zkDC99ca6|~9eUPdCoo`(Jxi7qIqBfC&p+rPp0iZO=)|S_oudc4&+!(C) zCCLdO!_36Qh09khoPCrFuy7A4!MxwL2uCA z*kWR>9nKnp4+0m8jdK52K#8MIotyr_vk_bha*&MMr+MMs8mu9Tk6~0>_QVH47Frnr zc|W;MTt7(*huvj{`y@i;SSKiAL_TPa3_FLqA5>veP=L8~A2D=fq`Wc}$AUsuYaL~1 z&2vrhx5{9cw3c}d<|*Iih@vTP<^>?Y9N{^E8CGQT&E%EOrPrP#I5k0R2>!52J@eo) z2Vhb_Nx`IuApKWHTvPtH3kg(D#G_3rg!U5V zE`nN6=fiSCQ5o75rBb%QRiu}hr9A$I3Ee}X#u&q9Pn~A+TJQ+;5l;jn64Cx30o9Sx zzzu6m97pBvI_)a{*HC)fmjsmO&WQk}JPkvW3K(Nd=>X_%Cj0pI&%xzIS1W``6)F_Xo6{eL5~%}nA|$I`l_TNN&>ETa;?2nyjmq%tU{QH zjXG@JUfWpRuw>eiRhFEifBnMkzxVBT(y#&vpAC(7d!*wf_x+_w{J;BA^vI0EcSU;| zCGN8{@09!9mu@UVgyukZ=sdUwFwm|nfbOmkJL@)wOvfYdF&)#rBY!fV08#v{ufOwi zUw(z!Gyb$n0ZD*VRn(<;0^sOX}1qfeB2;5Sy?E>eto5 zib2QOp^Vw}t8}|v!a#>Up^vPUC%hD%Du_vPy|c0=c?gN3_1)c}6tw)#^GLl_&54fv z&!1VaCMP(Eim`c*?y!Q{y?j9 zRmE~W_|rsbM{xMGJ26l&@zBdPO_zYCZ9{>yj4T(56G&2ah4K@v<95Y=RJ7ozkP|vf zYT6BOqs-T%6^2Q-+|{onulxsWUNI&(Ee&rLjx?Zk;3bq$K?cICzkO}-pMLKN=oF9z zj~U}wSl1zGsNzb&7z&m(1G=Ao<2`@;>p!%Swk-8Ye7E*yg8qYm7J0Go2eZIYvUXLr zZot?g*KsRSW$*e&E6ur9#L#Id^%s_IKXBtarQ<3K;I`w_9bI^?8pg9v* zvL8Jiom^;3E@O?PO7At}%1`OQE#JDMQcQirQ0X2kxLewt!lJbow}~WJyC5wNQ#L02 zYQXd(1{K^b#u4A6%TwP)+c1$KG6u%De!hO=&emFwl_N5$LMHmPmv8;;uf4gM=Tr+> zw_kGvP?I@HO28vtkr;6|I{{gFpOAIM(18?fCA zL{u!k6hN-}*S`41&;Q2DChBP6bJ3sis*ay1Th0TCZ!ce4UcJ7u zvAot_-AXt6c|XtYu@FE1QhE#vD{N(vcx*h$fF%jp41nl{qxvjo>c3-598) zyyN@D8h&kMJ?W?HH+6?J%L3yn*Q(_T+5b_966Z>ver)C=XFKW~*%^E4ec~V1lT(EV z;uCh^84*`_tf)WN-XKxb<8SX~5*QB`apf+g&`}7g>KfYnp;9S@BSiI=)EHx|4gNlL z_?@8pk3Dq|{w;AxWj1zpp>UX7KLX~Hsie0IfLuK-e<%P$)2BQJG?Ytup+sm!(!V-* z<#U5~zD<&nF`}r&AM=`3)nN+whyjf?70};&`Rp6FF2PE90%cfiOXpi5!dK0?NI<$s zL6-Z9~3;ja@fTKLwO0PXjJS1%O$|}IrT10zM z#DSa4LxacLl2@%2>Xc)ezlhGM;y9S10H>e?iZ#6oN_?QU?Ypunm?)0yxByu@la9T- zPc&2lB8Y0QpA=513K0STHO92!c)SnvJyc~|*FR-y1cjzqUNc0}vD}WLX!m*VkShV; zZm;iyL{Zfnl>l(e^G`q}oF%NmuD)z4%I%YU=3^>3lOxWF^h8U4@4Kf%sD!ap@8~rK z0DvkJcQ^ZYme+|b0z%RpX`2wJVmPVV&;82VZsxVoD2Uah60q>fb^Vx0xk#&mbju;5 zIY$x^Ga1Xq60zo#Z)RIJ)>p2t_IoKQ89+(N#$R}C`EUH@>&t_*KEv(0wlwnJqehQl zm5*sZboYXC4@K=h&$+up*7raq>vjwSPsI#+NGupl`7oOGVHlNYc+%VM>E6@ZM{#i9 zJH{~`L8?iH5-3;wD_?#saoL~w@prShJeNwt^AT^MVZ+~lBdV&By9_yy1l5p;4HL78 zthL5Qk%^3r4O>IT8)s0lw)SeZqP!7Ey^dKf6vy;{>Sj6a4OMGgEyuE8QqL&U-_@8z zP>?a3ce-2aTkL(%)>0&Bo>rU0V3&l^#u9)c8Eq0iw#F zGS)b$BG=d~yc^d)??2Wuewu=avOFK8d8ZYrl$)*NwXC6nj4)f7xH>me6cs?8yL%o6 zexwS`8wAYH%xrYG#EF)L*4lG|mZu9)e^#c#1P6hgJ28Fs$&I&Pa9itSN=T!`C(5%{ z{&y3|pz42B5XUro7MnMb_eQj-0_IT=TX3G={Fd9e+IjqAX6`Y`9YLDNRDmp3@E#jg z!@Ay^`Cndr{O?}8X1NRJgSl(1FNKm(?UV%hy(J|Dgp^cG+;xNW|NH6>{>ATnw3l1RW}rV5e#Nq$mS2YLT@QQPl*6j;yMH zp{Y|avG!IWNf99)M20xg>;||RYPRdssy4F57}XtKe9%aVxZ5ANJokamff5jfshwIcM$JAIq1Y)%0y+SvCLYsn&ZRo6Xb+xROTlvPr`LM==0X!6{N< znAPPCW6k`@SxIv;^^v+f4K-Sw@^UipG(tuLQ`U0fL~^W zF9PsK6`K@Lb(s^FWtq$KJWq0$JITH4JK|yj<+$~&w^shA&%Jb|+bh%Fc5WLFm>tuD zMt3K~%$drk&v#BNEN#wwM56^r=HUS#X#XC-5H)7{ z0@-P30y6dSo(QBgNYYlYWx%*mYN$fRpAlv}j>TM9(h zEX~ag(sZ-i_g-(y7pb&R2=T8JLkJ0lSID&E#m92ATPGgx_g)0X9Cj-X32}gxz#71u zMj3-ZkfGVr=q@AO1P?3AUM>P#W25Qy-m9NAXFu9G^8sZG38f7BWx!o3#7dzSGO+en zubloP?>zQn7hfg?DXS_-30zaa%ACEC8iA}os7acdxWBbE{Xc#8Q-AM`52KQ=n!`l~(`& zA;hy}Te@`%(uW_n%#`MD5c`grdPA6f1Di(^HzK0kN#C3QRCoP&qRiB3 zw+rqzt3H+w!*A?*%@(*rNt#VyRk*3D)^O>4Z2J=Im@5&9pw}N1oxMI*0_wPZ643%l z)-?YKk4Zr!Dun1%eCemsSAM~0#=wt0vDj+c%`O$kB2o3vFupXY>JX(6DuI`8-La9K zo}bbzM;MuOEIgwHDihLbyhV-o>Nh5|Xf>jbelqgeaB)f&4b5l;$W{Bp|t2cUo_19i_{!SOoUb<@}?3f-B>$m?un}6xYp8B2Ncdp$r`M~9>j!3EQ{I$^9wD`9v z{Z;f1RduRP(=@G=aV8?LVKQv2VZ$ae#u^V2c_-7vj1VkZQ42L)nOanUM5!B>oZDst zbSK@ez9=5ECLa1tDne|t#I4*~ak)T;j(!zQS+b~B@;Wr+m(5B!7;t#Jo&U*CeBc-E zyk|><)N`&%*ds|Ij_d+)N8NyZvc%!sm@l1Am*0Uc5Wh<3 zg(!;V&*a^8$$B86;7}Rb0G>)s#bEk0K$>mVp^@Se#kU}1NE3JUEB*D`?Z-Ys(bF$f4Gz-e4fU`k@yE zV3br;mD{J3+YmvJlme+LW*Z8A`e7Ho-!6VNU;pj-7#}+yCqQ2L>!L>HLj}~K>r$Xq z9d2G-J|m}Q7N*2G=*ZF9Mu}>-$BydM_)}b#n<*oO8!p%cYK-zeXGTNLis@NYorYNK zPV?M}6PM-AIdM)z)rV-;5+fs@4*AoGHNQ!L`N~jjx8p0TgTMSM&wk_fhVFpTK05m5 zp6EeQ4UU_yr2U{bW7lK%9RPa-8}*gpS!7;9`~jWsroj5TbCnaFThBG&eXy;EXE z1!rwr;~FTl8=5eR`!y)Bkz7}9u4G9{%7q_r!TXAH$ewtw7tTc%q{$wA*k&U2>5Rs}l5o?Xg zuAFvuzx%c8!D42DFuhL$HF>{gzk@nY!9E#&61SwC9P)OTQEUx!@_tl&B!VknJ z-s6M67g$CO`v?X?8cEW%OJ7`m;^$tx^A|pPC$hPURXFe7xo|;MmWseG1ps2s#pEyE z`r!Zhw?Fyp?UR`4#o2&BLJp{c&?~^C-cXG|AOkj}$>8R9vs=%B24KHXsi8l_8a#g} zxW%())pUX{o)T@)k~yU!U9?NRO&ii#3^V>gp-y|Y6Gb$&q^W~F0eJSFf8o~ z0C5yCQ#GjVYd$@EJakv3@C`r!6Q#N94+fR@pD;d?su;sl?RKS54+Ey#!E%%DO&|h+ zk~9;MaqvZ>#iPhhRvLE9Gf0t#7P34~lB68@6-q=Vvg$;f5E<&6Rtkq10h9-es((d@ zlv&wy;`2Y*-+1epPVZeytzOQ;s=f<`xP7HPP#tU=DtG82S|GS0bmPkH6UoB-i8;1L zCD*!du}XN$R`tcyT3@K=QS)IHI@J&>>xN*|{9v?Yif{%BzZs*VA}ZpW%e2by?!{#xlYWt)mE`)tl%Z&~quZPLpZWiN^S5qnfQ&*Wcd>fA z9n%9!!vOAmE69UMljfk^1LxZ$vTu6CF`#|(a|i&sUpzcgopAfYOaefU7Tw$a@Cf$4 zW7-W-ZE5KjkL*-GbNSA%UB2_97q9*&-*@&Wo;h=Frezp|+__u?A^>Y~q^4SN)l}Zb z_8y9~i!8mq#)NX!>~SDbapK@qQ)mc$L`1~I%xs9QF~-`+a$zWBY_J|8ZpMHrmcNB1 zNbTPp`T`C8t^cU1q)No%bou7$pxY-c{TVbqpS*t2+69pksR|23h|Cw#$9`%3{Rujx z(g?!h8!DVsQspUdTZ?$cL7}MO6e`*uBs0^U$~o@#=+8K=5RoA+j#Cx7x7osMfK{P8)Ny!mF@zm)jyH{UQNlLxNr$u&3(57}| z7bRc43QDOSynP6>2!>n+?L{I+ZtGQDix632Dl{u^`#?ehjmABdV@q%>(L09 zDY8)}sRuR@FF`p-`EbBKz!z2lO`*Wl)16a4@RJu`HcW$@jkWmLWj58ws|`yNUsQEU0;X7b1W$=APiYm10g zcSL`V>7k)V8G@jZi#>mN)M%VG@JP@u>pS+f9i2emGb)RBWCiU0(7v&~109fdEW#t( z`;KWmHMN~$;jcnO1f#$guB?CI%G&8KzWIqui@)n#Cx6Eia~EgYL^jPecK{S{{@Via zp@2}7sgBF6z8I`qru*GM^^O#@`a}VB$aB$Dps9z9!qSq72qv0u*u7apViH)vM7#>>Q3Xs zygZGfPR0vPmZsuGbkG4(fQe(vp${jC?@ z)gMrcH<7E723Sg!K&oZDEdd$de_a3CVEKD);~G&8Yif`|y~-5&l%1yOlWL|^ToWd4 z>V$isBFIW{H{z3DOIXKaJptTNAHzXKM4Z1aEpc@y z&8n9bXjEmkQ;a}dy;oH{;5mi!Flr)-jlrvUT5K=`?hru{S-#!R{@6cz)}uc=o%}kc zNp#GdM~JprCQZW5N8dk|m?J=n0|kKgjZ}C#7Kw>;mz=$~^k4zu$8^}#Sfjx&8sP}U zL<+t&NdMg{H~!r#H)dP*N1i(Qd!C&Ck;fMXa@e>GEZ=CBF>C(|`~G!qMz$ zGB#bg4A+C9VH1E-jq=SWplF)r&g#}Ja{Zc9*dogc>;nLb46>W)Tc1Vp(bl;SJF+z| zLmsU0r_Mm?l<3#5U-)@)%r2ujOb|y}4-FfVPc=h{#>5a!V@5PkD zv9hYLs+NZaeMBTxfFmMy{oCpC3vT@_XhLKZTr2Oe`Uy2?&C=8frMR$b4Y28IR{K3fFIgt?`H)!OqfVc15zc210QvrH|K{E>gYOD3%i&@po!EIRb|8k!95y?pFua6BeY2L%9)vU(qDo#82F z5={acN1q;}5%+_RxqeK*a6fGf%f+@}u(VNNGs*w`i#PuLi#O(4_Wh^le*e1`KlRwm z`%cbGMUe;%a+mur3TL>e+j#qQX=s1BRKm;K{*!GYj5i8N!LKLR7qk`f;-IQ7bI{y- z*#XL((wfD-hl)TRFbXHmIKVlDY1a6yGY<6vF62d!eJ7s+;@Qgc$HAaYJxv**R-`T7kaM^KLE zOf;>KfD8)k)B;CQa`P?CH^_UK1&!3Afcq3=+cbY3>o<{afXecg;8dxr5fm^6nx)si zF6mbL@lT5Bs6Q?dbRq_z#H4E2WorM{D^Gsv;+0dg>&m7$Zxj596Faozm1`INkFWiX zZ(W`Tl1Lo{N>074kjM0b22RQb#BOjWTY1^7z6RL>6UbCxK|`<#6pPz5bwcA=1r>g6 zt15;wWn-v--Wq%>w9?Q}0ws#3Y-c{2Ua*~6h4qd}{OL9_)VuaY?Y(a7?xs0aB5K9a z?%v)n-MdwG0XGs2(kxB0n)y#jYK&>OT6N54*L5F*_U*1vl%|;uK^Ki=!+mS*@IuAYHp~qE){BB8@Uh8mE;8fubxh^);OrdZIT>+~_Cn@u2!ZG6`zZbX*s>*vq++tK8 z7M>EfDG;FgY+t;ifpLo3**Gnr$SN&TWl;>*m9^C* z^|n7F!@_vR9Mds9;IvyUd;27I|NVX3^ccti(H zeo(pa*dC@U>7i_*?SaZig+_#+exvSRIXv1(@~^zJ`t^5K7h?N;=Vm{2qWx1(o%-mh z&Roli+N|(yqW)+YX?@R9O9i;hV@xAZ!<|Z_WWfb;xu`7u9kT)t;0?ke955&VCsfD3 z6bd*fR9yM6o>XD5P8I0nt%U-jG*rF@8|xRv3Ra8FZS`Omk!pmzpH2VlosZt!oMv7p zSOt~AlFCw7kQpgKyrNFTAXQZp5UXI^QZyX(21#sfjZ1r&@m1B^QK58_S`v zx1ViIJ^cx7oe)PHLcjTgTRv#AGmO_(PX4pkp8l`C{~KgTB_bgBDCdNt?8}$m_ZPqS ziRad)+4TwjIH8g_$} zKq8GnJPXHl1T;t0;Z?L&f2uyF!;kA#8X1S`8P{fft#`)JembE6t68)1(o`5R*0KtA z!o);|(TbQ122NhQ(|_^xt*^bY@{OBYFW%fpoKqkiH`A)BBY7XAKiktWe;!fV9!5Ii zO7{^j-eJ(B`W`9(RL;*ka(h4H2#s89|KJ7i=ju&{b8HqV~xrlDL&`+=Ql7nsAK(WFB%-FioE&)6(uuLPo?* zQK>hK`ZG^%3y02D!l?UpG2 zoA15ZE*S>beQ;>u*1D{XKmjvN zQ%e-hsK6gOYx3DE$0J&B^$0bk*yE$3P$-k_n9jVNS>$M%*r-69AB2LYOazET@dIrSePf4Z|<&Nf{7A*0SkWm!J55 zE`QpIVM;+p$@}gtm(tayFaUpOh4O*AJ`q%ujb&n}#!);-QVPfLD)6E|NaDyc70dM+ zlXhx#1&Fx}kkfcO&z&~CR2&f9ZGRkTL4PIT$Xm9rAO z0+CXJwK}-nd-;p4$37aJ{61BqAXQeD0viW#GiRsftoNJ^s6d?~VvrA4RyY$81(+lq z-24iVgoAH8uD?`?D2}3|g8m#t{zMQ(zjA+5wiEpM+E&~$#)rP!oueHcd%61(0YH{# zs!F^alT_6hHp~;x05?iJ1oRf+1BjeRl4kYy0=lEHk@e1r4O6C2$&qbQCD@}&A_mwAEZ9A{RFtps8_ylzvx&i z^Hc&rd*w#GS#{jaZQkEA9iX6W4^}-)bQo3JrgisA4_OP0<W@)}e5&lKA{B-cehn=hBR6}ee&)_k zrFm>Afe=VY0Tm{q%1EhDa?~HsVMf@d{X#fXAC8if>h5VO@sI*Fb2TX- z?<%M+5W%QTVB7O_I!afsO0o`9N_ZU*2^>{Yg_3R4!ehF56X^!H09op?S{7Id#z41{ z%U_pt&_4IETuBhzS~HYLj7q}sKY#nlKltXApM2^S)9J3RPXFaE{?I>r`@I@vq&>|! zqJ$J6>&wh!j5TS}>)w1Lz44MJx5)rD^85*PrgFJhdeIgjMthFhi%RX_Ki=zx;TR~Y ze~Y$g9B3@$nnK+KqM(Rdb9Q>cv}QT#h!0MdyF#gCQr~JEK2|`$aVy_^S=PVFhU?)4 z$4Wz4g2-BH&Ed=d`&}08c`eo$WQe#o805Jt4$x51VC2V&PAdj>JNPw=wRchwkpNll zD$B%)wGiu%XiX}dj{VUXiis#mGAHUo-+9c%vw#izBdZEE){ucphV)KRFcfHFi4GTH zT-b|3MO8r(X_pwQ`KkZv%|Gz7&;05Kr`}}blEcOFbeN-P?}}fhK^y5W7<7ESj&5@{Y$lryGm~CvK8Cj z9R2o~4v!|u=z$*r8=Vb~G&Pmdhl=jyu(W;ue`IJ!H2f&geJ;ra;Agv173+1sC?tR~ z)mw@C^|#l5{q6Pm8&^KC)c)!BocYMvnfITbIXTmgn6r!q;+zV|$50;!@>F?yjah3O z7DE8{2tMIUTUDz-Z-@4!Xo!}tzWmm`GWO6Sn%i0ixrR_^O;SoZrI_Z=>!w9=2P9QqD1!l&NFXVQD9x^Y3wbZT z@QEC4g%nmmBOz;B>?;5cLvF=FKK=UQ9MQjCQuaF2@Se88j-raFPry_ z`;09ItAERZ{fJM`2pMegjT@2E@lj%_SV+LKmX?M`Rh-8 z_6Mh4m_C2Q@3a@^LN0`X|95 znfGsBjEe>^L|`zGxoo39cxNMd`9}A}mHrDW{kPV8H@Zn01dae=;&9qj6)I8;D?8Qc zSR37jj@k0iP-CIcytpeE=vYJ^M7kRQ=!ht^2S7(hJKvFZ-_s7NMtkbmd*|f6;r*fJ zvP%xt;r0hb+zyNOH(?Y|j{2QgpGGSB?Ct)ux8Gvm#B}RJXQqGri4z|?-Ff$k_Dm~+ zB5@F}%r#Jzk;Pv%2~tfpt;##D*~&zyf?$ApTi22vQ}gjmn7|sE{L3$Y!`3#DXw=r6 zDEd3MfAC-3`j}WT&LKD=DWImH=@xf<9lfp#mv6lZO+f@gaGMGO5Lq)Q?VhO2n8Znv zW>f9BXrST3H40v?$&~;YV~Dv_Kx#OKIwy$6b7R+3LT96$Zg}0Z-$hKJtOVqxMAiZ- zWZJVZ7CPjkWE8&`RY+=A9-q;IPeMvjd+D*XJ(VqAg$`i2h$~d$9>GS#f1zq5W{@bGE1PHk z{A)k)SD%c3@62~w>7b9csy_qiQ6q&GCT_qe2EE_}=bH512Ie9+M{;+j7U$ zqz7d&f9UPFKSnh7zV0102Hr=J2+(^F1?-r%p~KpCI1sVECqTtL?tll?>-X1W$Iwqj z6Tp;R@~4b210WcXD{#A;{Q4Wo=iXTD82-M~(;qz9`QeMRA2>C8cBUO!hB4w7h@w>P zla?-7>gTzNn>4aWY?QCD>K*|wYAQnGay$`sl8>5u%n>Z8()>k~V<#Qef4uyme{lUr za&|@%kW~O^*xH0r7Yct+n2F$eZvAyGG!Zri#WLL*YYgYP3`N`pQGbxO@-4&$QE(E1Iq&3URv{ybiLg0I3iy0#!qjiT=m8mLPMc1+R;;DjbMlB4)Ua+pl-8eNX#$V3-W6cOg{O ztit+2C@zZ8nx*!BtoJx`mvP7MmJR~_0YF4)?vgU9IiGJV0x1%)8H5Q^Ww3rsv3xjmHH%WUR zzF8H5nlIHfv!Ow2bP5_8q{}=;7r5mBR^Vpd&zmxVNf}68zLg}Ko9Wv6;PT4gxz*$w z%jv7#!A6=%ksbwaPrk0+$k%7ul-QBVPb~8>HHbzoj_DzwLxl4VW4OQf*bvo*tVcmr zI|hIP-KX}ZVja8(3E%$h2MV#jXDlDl*6u3nyJYaAFtF@EWATCFiSD(5%00i*H)PMr zx2|t~>-y#|e((0hw*BOp*^iy>y!*_|`4gQJbFFq9JAw$rsW^e(Ml3dw%fi*2Vb*qN zhY%hL8h2sNU%sI`RiX(fG%{6SM9c^nam)}74wSb^!Ldq*Agd+E3wJZQURvh)lp`syyoTQHX-uXwRcH4~iA2pr1y^ ztDItwjuQl^j|nIO7>Z`?^rD?!Wj3Dt*TUW>~}RRtvbdl_YXbTyOxiJt?!{a6D*# zSy7thc~<3B*ODV^xOv~0$Xc7{Te|TopLw@ReUb=+S|N^9B^1u%`V*hb0BdF#%iX2F z^y;Vh$?T^VUr@;et@68&rb35%R&81t`dcz(BB=9umeZ8I>B;>ZU}<%~XlHSqA#g8=~D8&Ko^VSWc(xdW-i@CxE#ql0Yi zQP_C0j(5OWKj<`$7n4M9XQq{FU_w}6r>bxCv$x(_{kNCtVq`A1`CX@4-*;x_nR9ce z7dtaEQ>}KyfQqO>MZ?;4D7*&pQ(?&7PXfyWu3Wf^@_Sa3>SJ^Jx%XH#6z7iEj)(a zvi5EV^O{ndEKB6waVU|2ZoJ{%$Xb^^mfHmt1xN)TVkkk0gjCqXq%PUKlH7Q~ZQTIn zFp+ob(S#VwOYihGMtcFR1#nw~_a6ghHBD{YEiS^eS#A|f!8VPaCKIz{HRo4Ac`c4sSD-ss<2 zOK)wY>%DX>N!J|RNpvlb)A+QD(>wXCOp^jr-2K_EZRp`$(%vl{bLNPh^d;*5r9%uv4@U5jp45EN{n=)-5$E z8dGoYSj1X`w5}n01dmk3iCWW?*t?S7!;^duRWN{HgF^}sx91cL0*R3AEJf!!$=VIKwE`oB&)J&kNvSpwpp5C$WLvs*3&;x<5;fUiK$S?9 z$pD*gWv{39UB8o}8AuROh7yFB4VirFM)%hD+{RUqgEdfFz@a0GsEQ9zkMJ7uQk?eqz@(?nLpQSL(h8_=6J6CdiVWkxMd zoMkz%v;7Yg)|h=8VKGyZxh%`aWJSuw`LD)psEuN0jqASYw%+9V4@CX3ZD?E`Wc~2Y^0#W%f?2xDDh;4 zKac5ApyEj*P(jEsjMAWB%L76PUP!7$V2FtHa%`pfMlW0IrfXZt+E%vKb?g1SKX8Lw z643-^K%B7MAbVZob%|Z;l1!gv_ez?*9U`MO1_A6rf{$rebj;6(o@!et6JK}$#Nfb7 z`2f`U(CC2yfN=lBv%W-`w1IdZ>F!|B?Y`Sb9ryUj{x(DpiuTcrsmU%K(Tx`Wu5RZ=4Xj!>$d6ss@jgKL;lOJ^WolZ{u|8%+>}AY7&1tI9-i zWV0+UWA|1SC+ZE7II<{=fU4rx->Tj6*&7~p&Z=G;ae0nt#1ZuU>sM67EFL4QDnz8g zACp3bDB{*^VVJgEiARN^2B8(7*Y(#1M?=A&tTfd=@kG|1N!M<|^0^We5BK?NkBdMSsd-14G~UFYN7Dadkb)=n+i=|z|hR7IeY6H(}DR0!EH zjctw!aP~$+9NB#1yRz{LoAQfYEdin^BG6cin7fnQ31g&=unM*7y{!)_kkEfl#Qh}A zvb>&-7O=0XwA*cCIQVqg(-LXF=#M8SlIJ;gRYf(1cPtl;6BGcd7$m6%QzH!JXpAMM z`XK2CKxS*>cHZCMJ74DccMHXSQkY!UI{vAl^C>_i%%qNqxAJp;^VQ#dJH>zV#8*w$ z6OADjN&ss)P1M}QRjtv;bR_6kDceMBtpPzC;4MoDMbnl>PX1pJbt<_NCz3nKohDh9 zWNvGaZ>ITX&#e!#^{(6Kr`(mKpOPTu$&PJz7NxfDm3 zNnSq}B@2eOptm;jx7Ih!n|G|DV`+BAo?MzaePZ_XiP^>3)_gnaL?&h!BJ#dLpgydV zss^{SbwH@LnH%1r0&J;vPbXDd$J{S=yb0;@$3r`9LIpY-tpz^g|FJplF(+wnCb(jea-Q9HwjxHJAB?{5-E(~sMc|`hKKD19oZx4OZRSXC3 zKLGBf2WWuuJeSgU+xD-PSoV%@0%!neO2ldIk~AyA4QL5gdO?Y-8H)85&QCJiD2lUG zH=fhM741CZ$8M0+-t+l2IYwH>yHpV1K@c(8XQMf{{=qxH`}Jh;uRrmn#c0(fa2jRA zmV_i=aDI4KDv+SUa;IL+AuLJ(5Q);uSMFS0>2;#0WeDn^nmbXbQ&okkil`HHBAJs^ zB+WGy&7C->&S@%|3*}Dxxul}rb37EnHX(GCHyrNdc0=rzM43e5A{7(hMp{7h7_?10kc7tYX!rEMXtsw>4q!u#Mh-rZOK!L|UpmjlDt zjE*J@bdQrgI@KScT}sD}Bft*n?27|qGkw5D;rl`R9yJSHK!$jY(WybJJU;*iX_pveobA zI8BWQN+1srFtKPJju6y}m*u$+JH2h=PNF@i+q+ebw<7@&hyn75AjdNxtCClM-^f;c zUD=+91y%K^yj)dfsaae37FU5WQ&VT2NY-y>cdnClmB^K87O)=xP>bfy>((tKYe72= z;-Cc4oTCe$H0M9+GGSJKkj6wd@2{=D^Q>&V4dYK2WFwx?;0H0p?{VRCcUcl~Z;<49J~qy}s@rr;heO z`x({KH1~zrp^h3n&F_FAjG$Yk;0%&fMZmRjnADrb5TSyW%5hzxfU2;GIm*+)ExYzL z*LjzKxUkPDJ}5IEy&1L(ikXC=M93n|5;OI=+u#4Eb^fnj_|gYwZ{&%~g`INbLt;^d z?F69TmwMO_+0dLoP$j0=M!mkgb#txjL=?mX@$nKwLeB+3y<<6M5HT|o!7ve#iAbGB zkhV!*=-K5I17`=0d&)gAsamH-U?Eg=HwH0L4s}Wd6GH`g0=F4FWryBb@1)z)@T7B0 z4<n7V(+(D@fZ2kfCYFv4UV<{rrdeXc;6*V zaTJfoDTyL$)66x}3O^{%^E`Lf)-j+-)dQejbvK6de5iCDJy21#*iHQA!=)XE15(kT z(vT8}*mUNG3q2-@5~rZysYFNLLIK&0q*wu*T4<)Wy>Q;Pr;?Sca9gPK-*Je98k#+g zDAvuJV1FP>395N!&VJII{fH#FF~piPN7iWf_RGoD@2cB?C1?Rog#^o@2q|DX)Luk9 zr!Y{3y5Lc(c&7=^3^9ukoU039xwT+tPnh-sbEKl`6mW$cm9nkPl5Ed+s(o2}5RTEX zk|wvm3h80Y5yc6lV4^sRhQ`kS% zZRvpk4(=H}h}_t2=su=n!h-`49un=Q`rB`T9ykDWueHjfBLNRF3^a+u2UOWZ;@O_$ zqON13v5q^4Y_^q+BO<>?jwXx6Zo8Uyh|uYDe$S8p`X?x3b*8S#lBQ9fMg$2l+I+Ig$ldOOlCnQ_w&Ra)dQ4kzdHFDnqP;^MoOw1|?m3(cj}>1#Dsf>NwHW%^f=(|>;Dr@wyX3DLw-3N>1-%290k zjvJP#njE~Izy^cs-$1@jmKAD>DAW)QWZGEOX2QH2UeQa}Z! zy)bods=s@i2QngPmYNeEjLv^tvfMC?C`S?Ut+mVFbZc+J zC=5e<+^#}DMUl7y9HTQwtp%l4!JmfmT)~iIE2u?jsl`(Z(d?3G&4D6yBF+^ZsI*HN zWlo9kVB6-UTCu~(ParZz(`)(4x43DQ*5G)_^_m)Q*jQ_Z3Pd9xKLASw1&F%+o`{S; zWu@9`wXHF#QkUU<<+K+f5Rm0AoDbdcZHO_vD-X~OX$ev>NKzH8%zsM21O%w{=fA2D z@5OU(+^E9FMsYjcdfTjh6{miWi1Wg+2SmG=@jUh-Y6xT`Q!Cwc{_np1Bi~t{{vR)W zb*Z(LrLhpP5^2r*lot3;@C6sfiEnsTQ>W)TAAKU*>ZdCky|sS2-c2`C z*B#{j+@-nZqE1y5%uGa6k^wbW9H??Pdzu=AFZ~06O4x&NeHmBSMFa zmE0dXOep@SF=o$I+Qx_-#?pkJJDRphztw-we|_usy>nv*ykQg&9|eXAAG})U zWR0^$%7rpO3XqXxIluia=1{1}MnvOPCcmQ|S(D~XBOsqDQJQ5=T9$ct%|{>~qo=BN z?L*3)Ya!l+EZkKO+e^=%fX-+hT9W`()0$xuJGdRb8;gI8=lbr7<-MW=Wt3Eus5N!! ziF9i&y>kuPD-fq)jhFx^qczV=x_$-OfM=hM9{VB5b3?*{sMQ{9zSF<_P0cqDF@y^H zof1?k(xjL=bJUs#w^XTueo9=D(9}@1x}@T?7Yyu-nOclymN=SLB@qGgph4CS98u%@ zy|Qhnr}^H@%x19ibxm(Gk9Q0_J|Q5EEZ5yn@A6xp_g-G!12vF|U6D8cNzyDCq+`(^ zRW;Uh+AURS;?wtph%#?6IPPHD=-bxVy_e9td(*Tu|7rFYe|9yp0F6L$zm^)~Up;{! z101y@J8-vt9ZNqVrp*pP&`Zx;+hbGZKps#VR)EMD2x;F*{JA?n@MeDT&n|uCcPu^M zwl+&+RbhC$n*jYZC)DcHTN#?`>DoO?f zGKQI5O!8~rUHR-g*_OwonaqV8q0@m2TH|313>jL{m{o~9l01P$1xoS z)pmG~EZyh!Z|ol4ZDNPY=_B2YcUdyOTA%GqJ#p#DUcdML_q_LoS6=pT2jCzH)FPfo zH-;p|v5}faTDV*W;JvyikSjT9zuq@dr~8R{*Wc5C)A{ZhfGKT$zX3R7lo25>C zVZQbFiK%l7ortaDA&93eZN1pxl1k@12|G?&|W7=eAl-WCH zC?dzy`Pby7KOaEBF;K|BQnvcrGPq`=;FBeaq6yud6zXHQCt1@oNU?b?;?gX)t=330 zj+QDoIb!DG=5VLU^SoO0kDu_jk>u^=Xs;bK2+)wQgnN>O2c!VFHLEbeENIVLHQOv~ z#wJxcd2W2I65uF@c>08Gbq05?OK%lMKoZVkR2B^Y6hg4`W{xCr(PKX? z9l^0!6y09mclNP}WV_WehE;ZBhI7EAiZsi;#o>-G6JX4ajX3_xG|inW{FE16BqWO9 zTY3jbLWRiK_H@#HgIB&n=YN;$r@?BdVU2@bsxyAPEG80-kU2GP-nsObHZT7E?tA~# zW552?)H3oIsU-~$YJpI|Vgh9a!Npd- z^3tt;^wP$yd|p64_CS@s7K{s>gQ{*Qis_5sDdYlD=%yc_L}aQxwJ<;T%)6d^`Smx` zG(i;*^OzoDI-+P}8Sb((LafSu{Z6W-QdDGA zZM2qIQedP1#mG0an_p$lyk&l5t+8fUJ1Ddi|4n2qQ=-F9gMN`_Sv!u4`fUpX1&a$} zCMQ})-W1*oi4#>r1!OgvUiHPO)NCV1`GR6D&qY~SGETgGFhQE!IQ3kK?Q2KJ#S}DM$=0Q3qZsL zBti}<5oav; zu_>EQt%-Oi6C^*5lZ{)^AieoHv-DvXoz^TT3c(`_Y9`VEHnn!Im=_AaIYh9MJJu9a zpSk++uXUgPBbR>bKU@0EliYXdRGwQQ)9@(drvX(IPNs*}byd*7a8;JYGl3)&Nl^gL ze#|qLuG}8{!q-=>BvZnyZYbFNSS8b+YIBIrYJ36Cfea{zZUMqf;;^(Zmn)__(-+U3 zedF@wVkuHb zM}_VR{Q-$;Wb6} z>C~5R4?cN{KmDHBsg|{^DN-gP1^Gia8Wzv0fD<2?1wNFOkBnW{x9bag|Ds=aD_D{H zwLS@3?sx3^8|xSUuQz|{3!6Ux?HVK`tn3|g68mVu)!CR4M)?i%8fFt*LtB&H{;qDm z6j=pS6>-!ee^qW8S4J8jKt-)JY&g$_h#PsS5>cMzxyvJKo0b~m8k3+$OkKu%k-MH+TvaZ|g!7k!_=~={{0`ovX85X^T`9;SgWF zh$FS}NQ;nC)Sf$MJF|m3*L1KEyaJ)}Lqw`jg)p}k6tHY8vW+*sChM0eW(5cm+$5KY zi;`_qXHHx5AOoi!s-vc3^C-v=R3%Acdu{8~&%W^EzcT;KpE&capPqYmHty$` zQe{!2TDqnpg%lXjaM$s+rl|U-YHfTdOHxh^O5wyKiTu0gu0Ol(lE^scpi}^79>1;k zxMG0P9Li`trql029zg*XAc6FQVU+6J>|CBZ$>sdHb8o)=cHO(tF>Ol^AD@OW^ZQN@ z*}DGdFm?~LSJdjEX|svjgWKM((*x!M=m6;+L!C#L5f2s7gob?xfbF_kd*CTQY_ds2 zP`z;G?1`mCA|@gcId|sFORv8|ASHrqKzfh}twprXAh{ZF9wmUQKtlDUCPBfZ0Ex2Q zz~V2yzHvJ4{*DhWkUCOll#3`Og^f>R=QMxr4g;X4i@hMC#7SOUnyYwZ^ntyK&2P zz!U~AqBP4tYVz5?gZRPJ)Tsnv;s;{i-9PUNi&UKy7Tm3S-?I=y^(6rMF$Mne2u_$;d`LN5u@vs4)BRxhR3(dntjUC;Bw0ZFm zH27U;0*?xLMTMSz@`)&l^DGCT;+9SE#;wrHO3BZd_}ijX6um`wbnB8 zguQ)2sgbKj*7lK($yPz2B+c5bIPyL+cG2@J8zVc}ktu>z)o8cn+hM#KsjODOlyBK)O!K=b@j<>ZjI{pq$V|5AzDGK=IgK{mQ@qef_6r-peC_)mensA`gCV-J^k zzc)U*W8FrFCKSYX7y_$}J8m$z@=tl@qM8}arNS~NA(+}o1n?G?C?J&z))X*^NE~aA z4d-ZmZT&;v?!M~-owxqGQ(yhq(i>AzKhbucx3dtb&_h`@+o-bc7)D*G@v}l*31Cq& z$P@RkpS$%|8s!F(OV~=$^3y8Z0YRZT5Fx&R&J$u6;XKwwAtIReAqf$Q6Kh*jooNwq zPGTFMII*<0x&BZr+?L#yV8~}R2y2mjFbYJNJrDexv ze3;s~zO(pn(%n>y2&y_aJ^R>W7gdFbyamwQ%uHu`rrX^jvd}*A6~yP^2t0+^r_g0& z%g_|?tfl&ryRj1vC*ljpVc-1B+h}U7bHKoMBaP+HjX%4{|LyO&^ZcZbuTVdSAgXYG2`Lqa4e|GWpP=5$aA#%ABaigzJ zsu1%I2en4?C89LTopV%z9V29|CGP>KX1OyAUpHY`M{HVc+keMh{g?FkpUNpSAc%zH z!}TwQ5ts&&TO8g(ec<(2lEAxW&Mi_QN?hxk>+k&&8}E92edRwt^PS&2^Xvt)o?@z> zTOmNX+8U_k4xsM+XB?0GbMkm>+eE+l^7YTZ-F0S8r0nWtbU0ObYdV4EP(pMXQ%@p3 ztIom|r%?UiNr3i&3?NmVnOlgWSey{R%qLGQy>a>Su?wJr9;RjOBsy;F!=@uEMLKRU z-R{+Go<1V9rjGFRMV;K1?l?_wx`hU>D8^(s>SZj^pY7ZD=lBi)>WUXrswxxtMSsJuss@$MiP#+j?lcoV1hH0+05$IwSxTmwff!_9Tk1iR z(ZcD_$78Q2-5k~ncPwxN6sq((^$x*Bh+wDYPRE^@?(OT6ZV(A`#8Y$W>Kn3lg<>BS zuEZ7v;wYNtnX}4M;&Q+d3dR&5U6ot;uPS*X618S(A(}hMtr->esvT;^apNGD5kwQ? ze(g*_u*$AkOE%awkumA*?;v@Tc5BKL5+g!ntyVDH9!k|jWyZd6&@`cLM3iJ%nxu`m zSM@IxomR`-J4sF)%=Mq!xuP}V{?25F`W;_=)kz<fVU2I89NPk31=%uWEnBrc+X zvN*KfSb6MkY+U&H`5*ej3(x=2=`WqLYq_)sXoE!kxv$XRCD0y>R14Xxp8^Avl!z1p zu%#PY{a=3W#tOAERdosvBrAcqC~6LIfWpjT>M67@sZ7C1m}-jwH2f!<&=d?n=Vzv^ zVR1PVsgwD+`PjxumeeYJWYyPWI&6A?R;|ahKN{T++u_xNQi>id+TU7tU!gINY43DA zM~$Ont{gZ$>MZr)NG$U+Pd^m`7zd*bVxqIBP5=ly+wKl@t8l_VKnLwhn0+@|kAbEj zLU3RyRNwl4{tv-PPJB6U|LR-$%WrOw2yw$up;CYA-=Vl09I4cT<0=_NjKQqwZROMd z>+%o%z8n9=FR#2WPg4uWFo1^0N`B2AV)h0FyPO~ub@XRwULXRI07`5*-*`T~@tej5 zb&i?c#vU!LLll0Zx-&EIitZgSFFhXP<~>P9Y~db3)X)n=g|I zYGr|tC{(C5M{|#S zJh`$w|Ff_E@E?8a&-}gBKk!;|l6XCi24FZQfjSRbYn5e{u~we(0x&2f$^bF(uYTv+ zi|dj`EtloB;wZrZIW&VP?2^uYSeHJnt!LE5-dUI*ILaLfKf#gPfI2_N%+Jnp$sEE| zr?a>)zk7y1ytL=OeN4wRj*glX>9%vj&cnDilXzIspSx?ez?ISh=n(cwkLj3prn(ux zU8ZoC?>sd0X!m7;s-9jtb^6pv=Nz+lcLD-b^wfz(_J^H7aO=oc(3*pPL%q$+Jf>&h zPGN9E(^a@0SV2s+pXi)EJ)J9vyt`cgLeU;R)0%f70u^ym zJgh*GO*+VKXD5GY(+b)5TFc@k;0uU(&`=o|gkGREb?1pIZMo}hJWkcNW zUHJ^$3QSNNthLsfZIO$RO{o|~#xk>r5{5OIh4O zYdT$f8_6aj_Gd~w0t8Wt=6LpksPX4k3dt_@ME@pL%dlWQ-Stk_wZOCkoOq>WFd7nfIGMsI^;I>{ZPI8UiO&mL$XgiMmC^BKP8AVCALqjM0 z9DC=0NI^`!{vgluApof6Ph8urmNC44^PdU)+c~)cW)+d#xrr^KwQB$Xlkc#5DKH_+ z^2&kxn5@(o8ypKYv9eleFhPDGV2)bx;7)$|e~X^^a|3Eyf1p=~g?w!GR8MRyKo!jV zsQ3kV+foQqBCyxi7XRMHr~Xm&gP)#%`FGBL^P@9w&Dkw0HkWoL?C~QYq@bf25kX0n zgb=l(Z@;zng%@s0Jl*eR0a8^!1*%F$F@^XfS{D$X0(Id02{CSNKWkYrLaJ`V&*Q|= z?97a)_<)*3WQ<*0SiEuj<|DSK8=^4Fttg7KMaeYd>-MPCFA7?hzEQg`GT8@QYHa!!A~%_2EH@>@Ek00zaGdH35#)DKodG02DS^_kpy+Y>Fak<4^5H|5pkH z)S8(Sxn{EV4p{)f@v}EKBhxlB=L7~Sg=$z!jQ}XA6o{&iI;T(vRgRb9#m6a{5|@Ff zI7e5L+MQ}N?&daX@iWlQbL+1;5cfl`W7$rPZ35 zn(By%udS*Y!zWHInm4R-_uc{dG2LU@)0p`%EMFgOI&Q&xO~(Mxy`zUj!#*t9eqVIQ zua2oskEpB>NK_2-xpQYxY3zOxOsd+7TBnyzys`Bb!6+P(YiMu6&H?_YSK(Ab2^xb= zV0r<_EmI$GAV(4fuQ-)D4+?%6JO)IyG>54~nlu5Nh189K)RE>&)cj-%Pc_t2K7q_Lc>3vUHa zLqXmCKt#afdFsu7m=40rwT`*kmMVcsGYwdHu~yszj$js;o0`edIGh8MRXFa3y4mGrhyieg9~{Oz{Pe86$PxA;)x->3A$SSUN(TcdtdMzkg=w#M07&h=iy`9s^P+U<^Nb@!VTit|)|9RF;vx z1^WR2VS_g8PZrv{FlZ5-IkYbzTSc~pY)z#Pcq@j=1|ordDUpBw($=Gs&LbnS;<**KL5m{LaS{iP_ZQRmO5)!g9()g~zJ zP45tm4Qcf@7^ND|1b`UCL|OmMUxK@8B32OsY!tQIt#U~|nY8>v1?#Ob#3SEP`4VMW zuHF@Nff+URu}Yh<*0AB~@J)r`k*YW+))kWZu;tw~P8cYd5yw$O8mXSc-ON+_Z2m?ucJUe!^#^I1W*F_rz8qSZ z|4hJncSS>HBmj1qT!1QBfi%swM}O)%1QFQ^GN!R5s6A5xF>{)v+ha`3WQ^Gp8wxDm zW0s){Jz2cmeeb`dAHO)a_P+Sdk50e-?)b`+W^FD?BO_2)O`Jx;ktnRqu3Q^D z|N7R}%=}B)OvVvf7Z5KYS^}m46RJQiAUml0(=HpLhW;pn1o>@X;15R6&UAc4f*NG2 z?N)1UZg#8RrBTH7;ipHZzLOw;?dk3Y%$*Z|fN0$KF!9k5p&bi$sO|gcP?!pjEr5Ut zn<k065 zp_G!3U{X^x1xlb9L^B$ngKkm2iovqxTPg`@27m}Eu4mjE34iT7*H50FT9~#;CO)P% zNJ&8?v8L8!Mj;Yy<+IPFPyh1f`~H3J`_{W1=hz@Mv%tQ)OCKW}wdM}Za0E-mW z+hzN_jqd67;z=8Rm2{7j^YWffcwqu3{2u~Al$bTSmf!v+GwH;0J)=ab zVvVsL4j6IGRV&z$q%hD>?xfrA7tJvCHR-gc4k*a|zDaXeI)mS#80GN6b(51F8pF$i zrdc*7xpKf#Wj4EvEZ=;oG4lCoK~2=kHqz@qkLXXk);Y-?fk;J(Dhr-ry=Qd%De$Y} zcC9awkJwdxSv4{Neu{ENb3+3#Iq(4Xm5q}x>zRLj=SPf5rtSJUv;25;`|0SNGkVQp z00V+c(&USm%{Sr?Z<>?NE}$I)(@fBr+BYZJ8cQ-dT&yr(ySY$Ns zME8gQg3l2mfv8a2-`;A6GeoTni2$UK&+hI4QY+U^=7f95qlvRhvw(y8y-rm2CPMpS zfFO=B0Cik{b**hI43`MQbfITUiTz7Xp8t3LmA|c&N<4qG;{XAGKnx@G^G`n0XMzDJ z5D4lyTz>|qe>2(tW!fFcNCg2AkO%la9q!@q>!2Pmcmv^E2p%Xp6J0Lh;XC#0 zC$Im#fAx6hUwshTQ9?u!DGZ{U&!X@C{OQ+zFZiAR{Q5h;did~il>m{%ixep0={NxZ zQj+jwv`*P+W$DszdUcllT`qG=zjputcv7f23 zD$I`rqVN0B1EK|Lh_mm8r+li|Vg) zpJg*B6mcBr+?)~tDS+^eI35555tSZ1M)8}!P47E=JZH?A;u0c2A`n7=dQ#^%fP!+% z>xAA3;2@4i|8yh#Ta-tA{&lhgOd;rbCITRV0HuH;0tMoThr67^5hl(EsiOl_S%1>h znI&0WidB9jO@)-@8bJX72yuDwXApdaGT8vuZC;50hl4Lt$C1GA2oMz@dWU29mHO--()a&o>hL~<3iW0yt#(pte<2aY z>=s0-WF(Edm$=B1M8y3{VhdIR6~YySP$&o?B6@W_yrl2{CH@^D{@d!s&*;@RC?f!* zYXIsAsKolU-L2z~idpc$|t0S}Pkg+@*UtZ%7g!-&*Bmz%H!B>wT|Ho2Z<2f#o=Xp1$ z6OiiFoXq(+0{EVHK3}STPXGXyYj8RqDozS3-U$+)|7^!tdTAJjN+}^lIzxwUX|^cS zW;s(qRw$zIQ67#Rp4EIwzD%+}NQw0i3zyYSuPaiT|1v2X|9#Ip>OPNn0QsE|kzL_!=u96%|oN@ypMD_VbAYrf9nSAM*n zc}k@o!f*ZnAf(upiJB|`*<(l`9(=!D!YYl9%j;S~6i=7y<$6uMEQ(hUAi&M(goWro zt=1)TG&-oS&ixb-Kp)O!7-y2!SYaNF4J?@Y>rv^FVtNq?;2H!K`@ix(l2TSyU0oK@ zd{x+fZ!z&fKtf;e+WVX$>iZ8Ukn8kU%~p5B$x<5fDGa3ClI|sDG&t^ zg<+Upi*bbl0Dbh~2REnNho^T*f;SJ3bzPv)=-sRlH&ey9h!q2nF^sJKmRS*F*OuqP z{S-2jQZWKYfZzK5_m79e<$TG$&JJRyzxntVK^XeJe>o>XM+AU+Md!bUn|}wuH+nGr?>qn>@B|`0z$FSX3Xhj3{N{xOlmHQ+Ks?A_`z`$FZ>!*f5C{nM)I>*= zj@Mt)v(F)!=T}oSI}{R^f1SmW07Rsxhrjs;sJ=phq#_^?LfqcoR^6yZI=t`k2*`h;xMuDNCho`f?zTy`I0P1k?558Aw)ix5@0bRD*DjbAi&J<$W6RHYO z3XwkntfiER=z0yB-G78g;|gU@?IbT{O+=srX+`9DegqGH4WIub^&9__NcyNE1X=nG z!Dm$Yzb|ryM&4MOKKkhHP&~`bqP$Kl{EcDlG%Nl#G=)OF!#rw8@mBY5BmlBfjeR_bMmn?Jbdv7eb&E z!mwWDB?y5Cu0cS>FCc04iLs8zlTt7L8W$uMJfI*5(?LLGK~Uk2z33qIRP5o%_#Gh# zlpf_0KcsAXQh&ovQ{T*5h)B`-Ehq)?G*0h)jL^T6$7e`N@8Q!fWr@|NkXyZ*OrQR) zh!hB)AXlO3edAq@XeOeGQISRvuqu&uz_n&cTDE+*9G-;iVY&qbQ7` zCi4#gq7W!3_rp%P$fYw=@~BVfia>h4@ZS8%@tgn9!+>O3KJfvLrMA%AO=JFV;o>yF zP`fu5485QpR8 z^}9Fc>qQEwO+UJ=0)Z6b{_eI^rp(4z#Xz(#(~0XQi>tuqGiZk{t3NQp0AwQpjxlLB zGJH<542x8sslUu23+DeZd!ezi%U{xa&))m)cfYHYiq{I`A#MEXr@#1R5QG9z0344; zM47EV;u)U)0_Y5=jYoxb24m@!(!T`~GZ6Ry+9h5jei8@>>hY}#F3Px(AV3AE05jho zDte1h-ogM4N~CCaNsK@Q1oGgYKmEtiH^1lkKq}JX`{U_wIv!PZ=pSg+SZ10K(Mt_U zmDPq2gb@+7?qv`{NKcf$MF2n)VHh?TR9Y46Pz{_bRUt&W+bMTjB9xvG0!UG9>2*j# zYi~jMe{Hu-?NiC027{4O!8-uMz=Hrp;&3axL*~|$M%XeEWMr8Dh*SiifCz+)-H6f) z3buq&lFZzp(&fC=TlJm+JM8j9@XX_l)l&rSN^P@Wt>hYR=9LK?uBr z;rV<8AxaNVtBH<>gYSDoj{dSc+(C>YBLo-~zN}bvBp@lJA(PGb2SmJHgI13c&y#V; zr&=p?@y=BXrluVPw4p6R=^uoA`Cs{8|GyA06h{J~?JtRy36rz55?f7T7fJrrC!?Yj z=o=Acwz#C#10v~vAQTD|6kMa%FG0v$eyX*QxqOoE5wg$oBRcdTdIgUkqtJ#P^gMYy z9F$UT-@fxaPY4u32!TSI--LMY*2sT5aIApii7 zC*{rQRNs^e_SWij#UGI_(qtxFWuZa9D2jqGJ;A4PX_|E4VJQUVkAhEc8itXIl=+;( zM5>uunQqEo&SsTHxdG#e2yv++dH@(#LVS6JwWgjyXKdHofa=95pB@Bl#iQt|E)RhD zG!vnBiy(D9V!qx>8Pi)XLr?*d0s;^ol~4OF8hCQa%t>B*fl%pRb!iknL;?g9o(Nz3 zDTHt0ti=|tc8JLLd?|!kiVpQmZJAI6506he^n2B{L;#3*I-P1&&h*3yLj-_p5GJ2g zM`$YB14N^`0fQ=-hn8zxLa&>Y@36i>^2*@???G!}mCr{Q%tlnO-E4H6mMlbh+)Skl$``}Z zd1{y=GiAmU*Yf4uB?UUpia_zN{+++Ay~Xu9q5iQDD5U)9FMf5o1VY3bPaqx-J_<~{ zbU;YNryoP~6(AU!RJ5>DwoN6T9~uK@G@6Ev*r}stQaT(L01^a7Z(fQhKq7<)Ng*f% zrH=_iP>H=Mz9kyX(R_>X*-W{DAxLdXU`$GgNQu);@a89%kN+=1J|HS2LLwpX?)F9) zE59|`pg2u$KuUpFoF5bt8H8a{Uv(e=cv6%mc=|M8P^7|0_1&q{Ld|q3`yI|y&FjFT-kkyYRp@t6sjx42W)xi zvvZD7Y2zx+DaVuVr_zaN8e$zm$F@cZ6ute4 z<@~SMIR$fCp(x**Q+fO6b5J*qz1KorWQc5B4gZJONzrRniy!=4L zDjUnrc*YlqDY31(ry$;guW7(;6|=x>pMt&L3Y~h#{Ro%C#u|nh!^RqMv857#FTL-6 z=R2fG==nK;5JJxZ-n@JK{O`IT=p2-BAAS#k^LGca5di&Ff6$AhTc}${yu%&j5v=e@-P?`R3}oLq@uiH+X69B=isA+rOmq zud*07-6V^Eq!7O65p{`uGAxljs8ERY4?x6FsmJr#$T3xD6@jPI5wTDw_4J#GH{CPm zVTS;KQK$m|W#2X>Bgqe<(FzL>FX?!_|EuxVB#dLlDxMm@!2FBC1vNj+j7q3b`X2f( zfA{po|4{^Q$@3H@HlS45ByOWgD@@H#=7*(cWhy_}BV9_2-f@L;Zy+=A4kXHhh zdL4#Y1-XH>9yR{v_rCZ3`_D*G>;jaG7d_AW#b=*CJf7pg4axeb6ykI|>K_Y407T(I z@FhO|5HdqXezh}uY>f_}WR6eTbc1nZ=s05ZHGJ`jP(eEM#$+o)IfiVq5Zhc1l>bW* zTOSkviNlS0_w%Q}`ro07jbD0a((!mY9gjo`TeFkVm4h7O^lCn&GcAR(sWsi^NZU{sHkfKx&k{s2g)v&@?rk_Hm zIFC_y1{E3hE&W2^;Z%8dDvK@wAQDBOqS)f-9g-iUR77-?` zzFu{tm&Vrvfesc!Q03-W8p|oY#jNrEL?EP)Qd0Xa!Db^-?ylue5Ky7#AEf{0PwpBvRq)F9D;*8FH!-3SsODMQ<7t z2~Z$D((6A!d`K-$((`=Zht#$t@SB&f^&tasuP$OQq1Xe6VO9^;{9`n1f0%@351VJ+0{^xzy9l<6v-q3g%m(2P&}T`AAjX!|!q23@*xWk5(3&N`k~KEb_k83kcj4DXY>KN5k!$MKO?yfV2mYK^2qQfH&iidIF|-UQ+$jGms( z4Ym#<5JH@e$4tFirum)~*6?dk5&gaScUbV&sj&ORVvYb|7)4Rk`UELt-uBy+UBE^p}FH&C>Y zHaxfL!}xi6r&t7_00nvxz5XvT`~qci78=p*?XA|WdcUS8<@1-Xu0bHAfb<-AKmfSE zzf11y@+hSlp6YjGpR+5w_MlaZ*{Ty?WPE0*s$%HgLDaA}$lc_x2G9y4j@cc^^TtJ9QLrQ(lsp=w( zgAT=cA_N6Q!oLY${NU-w|65dFOX*R(BMCg;ySu$JW^@CTcTGMKPo7`>lUnMs&;}|@tF!9 zi=|G4@*w0f|6#>%DYF%zJ_8;R03|f~g;m}syP?gV)QHr@|Ds z2~SGj^U4>`HlM3)I*q?VOk+P&K0J*%|0hh`f7)+3Nmk3IMhJ`6nf7AV$A_2hTUBz1 zVHA>Ta8A@$f#~PYh40@+pX1N}zWDq^@ks zMOXh2^vs>n=Ouo*X>;?@UsOHyE$nm{YD!HhG7`0)*wFS`ORih2@pw9 z5Qc`i!8)a6QQ>87D@tM)L;wVJ1=9lv%^!9yc55AKlC;YEW(i8oB1#1h<>a9}pztz> zETZ&J`GEugh;aZQLJ%IHq+CmBueLT_-=*S>W@yAcNsrw_DJgsre)C6|o#IvAh*|f1 zIvjj~KsC11sXMAJ>r$1bT10%hT!L$m3UH+rS_pAG9smp5dF;^Pb~)>+K0r`Ksw%N{ zwvSl1>-}Ge?kJ=p{ulv>sFQ~gfRxgz-l<*$NERFjfD}pc4!8bAeE$EypZq=l>F0QJ zt8|Bju@+4J8D2rfhop8Nvnf`VXZjyPDWdCJ_2vr_1yf+f1M+WEGf>h+Yr79bpcDuI zd8OC?U%32CcyX6Yq&z8~-QC6Uq0?j{0?}8`UnKFZQM)fGqWk;1gMU!a-J6wR+@U;N zoEn}$IYD{JWhoO%FAt!s+c5f%`eDQh;r7wSf)>98o5{{uzSt`Vp5_TCzxlo2c=qg0 zDZ<1v1O-YdpTBzjw&2?2nJ(8uWISK;Fu6f%pYn>SD8a$dY86~54i&+9c~&zG0a{M|A!rin#Rvf|R-%s{? zrc>Pb?ql<5L)})IFcBdLqsPZ{@kprBk59*gC*>3dR_atjc^N~9B1Kev^gE;%72YFA zA<(dTRNOfsQWS<^vo;|BeGXMy;w^(ngo5PZ=H?*Y{qXu1fA9LmACPxa-jPTEC5L>W zKt%HhyX5n%mo$z8E6hG}{}7VH))6i*KLHBrO+|Gkq4dLiU#Ts^^Z+k@7p}jMJ|@O= z5{U0VyBBEKRAXTwA@GIX1tvtCVnkBv?&kLW_ufMQ$n_M=_E>%hIwP%;Jh(J=Rg5cR zW?P`9+?mbiR?j$3d6WRGM3_ZL<*zUY)qj8M```1WM~V;y0O(V|r0{fA}NJ-?>Fa*X#~_T)E)sqot-u;5GPsN3J?k& zTsmllx&VdoXQc`BR2}^Ao2CvP1PG);2rhayl}RB1$`gRdiE23sh4!Vw*r7)F$wA{C z|j7F7~BE7*#!tFj6xN)TEsMxaNCAwq~cX|&B(n__zp)tCjb(tnJuPJ+AvXzUGHzE)0M|HKu` zI3xq983L4pj-ewjMoMYDe3a+{Nhs)Pb2kSi!97@ zt@nan;zc9`0D%Akh)|G!i}2?0r~jwmi~m%57r=N&7y=1|`@56x%Q*0J*UqPxD??^3 z@T7psc*p6b+I*u*2m0jS2}FHRedR3_sW1)L(IlHCN0o+aTkm2#NC*LGfY~$|C`dh$ zx^}R#btqmNJ$$_fQr_A~h=>%05M7fH$(Xb!LVb)^wi~G0jUxRF0Z4_~&;ruKWRq3m zj?pXPas#aeRJJby00Idi59-}d!#95|N)8>EG}M}bH6avThdDhGEyQG8d4#9ud{aucd}P}m6YtAm03b|R?3!<@w?xD@OeDm@Av2RdOg>x zWz7p8GOVELihf1W^OmV1eX8h%1~FplCxq_3x*|Y3TF!WF?-pLG2&uel5AP?HLhineiXT|+h|E{_uw|AsJqOI2%?ANo+CdXiHiV;|725{y zU5U(MPEXa03+d1jL{9wK>7O?WsmO=v%m|sFV)f4Az~DXRJu`)AiR76c#&BCQ5-!Nu z5y}MySlT!#5iF9!DTLeUVis0z4~*haI0!5l&H?CcdWloccIG9|ZT3zMRE-OoM0^-d zHvTTpc@sJnDR(Qf>mB?EMz6NZ);XwE|K{xQ+N`(F#anJEbC*mO&Tpg?j~UrL=ygnO z{_M>u_!o?W@ngKCY6S(^GrR0vOH-Dsc$x-cxiijdPLkm!;g-=0M|}5VenEGjodg#Q z5rWP&sgkl=0Ht2KJy6eBxKcIjoQlI@Xzw%~pPTLhH-Ge|2NF6%;ll@whg1E*z2tqT zj<~maL8iYku^hgh&B+Mw_43u-w)R=sYp)>@)rMMYUVw1 zj^GZr+*OLVfVM)h)I zFc3rmmN4J56?6V`JN+D*H$Jj!kj{%V z2!0_tIqF@I#G1AiMFdfw;!BpL?0QdB9L(%DF}O_&UMu44zf(0}MXF}!N8%GIDRi?Z zQKVDr-ctQ3kKsrXiJ9Iw`qFI8T4_b7V@;lqm$JwcPeajWC2|40-EBPi6Y4|UUQ=#B z50d)9aiFyn3s&uLk+FM#DZ%PNK}KZ92sCVUwt;@+!k3l4c8c2BlE}i;xxnU!^X{i7 zcv|BUv$KxBV-Hg%H4ITwE)ky+uyC&M^z~g^5DwwH%~fEUhB@HUns%_~GYKWG^zSb{f7#Zn<)ucaLHlv3 zaTjdAF!ztf1B=C4_LeIKcLv^9{wIIl@YHa?e<9%yeT{?ny^O017JXe1;BbG_ubZ8? z7A#5KLq|S1Sz51Z3Xlljqd~}I6Wf;h+0J5hooy)E z>Xm`Cs<4MKI4+u7j)bbk_TF&+ezxn2SO^V>c(IxAu@eZXT z=A8l+zEjiMt9`fVKvInPAicIO?D+C&2y!HbJ`Rp1?5=iY`gYv2UO4AFn+r6eoUF95KXn760J8?uYfiETyxwJ68r@fIqx-T3SJw*dM0+RdQXm}3 z&L7WBAP5lhn6FK8wKI?|o$@Pja9i&J!JF)NKG7(m-Jq!CDI&JY4Pgw~I_k4r>(7Le zRvZ8M8haHuFx24(fNf^XJX7~DyBe3m`tGw?&?k`!ZmtjI)O2zl@9o9nrw z!RAd`luL}7vd-rl>TXuQZsQk#Y{QU>E(O6Ni=qXL(X=}Uf zNmYnsfTa)EM6-bu4IpV}W@q^PY?BBI?*`;W2sURRQ=W<8Gd|dpEd}hv^HLRWhaV zvoaR2kqd*a?dcTm0AF+OLLv`oRxB4z!opHF=cWVoB+u3Hl3|=YK5zh^6CZi7vDqte ztFE3nV?w_-&^NBZwKfLDAwSmD`EO3B0^hH(j3_e;M^$T|zT$0n&kabH;`g}S!WCf$ zGpl#F0uBbVMdyvq@8!7q;}Ut&wQgvq{9B zG3$DPwIw5n=2$B)>2o@G)>`dccg6OsnU%j_Wetn>q0^#Hp_@;P$%t(`$Fk90Z%jg?g(U1a*(0Kp@h?bxpX!@*4 zu@JxfBmuyah$WHD)cp&P@c!iKohiWy9Q`0WIO zt1uN&V|vP-Uht?{Kd^2249E>AMfrcZ9a*fM6zv}L+EEV)$H3v2UbS2)knn{9IHJ#j zyJsVTmXl(3xRKD#e}2<{f75IB-@#AabLF4}JFF=LL+s`rYRwz)?V9ERW7vlGmn2a> zw_*R%0&_~^YO)0YfQW=d!}Dy1viLO)FNXuE1p>cNNkq>N#Z#k6m}yT-xtX5@2@6KI zkxf3Qf9KcMCjPu(=0cR>^RDqG^j%w&Z!O|4;(nRfDBI`NK&t>qGmi3FKE`H1fKScM zfiFB+qTNTrfWh6s;~q(yW^eHtUvD-V%u0hT4=?!rG>-oGbnf(kpO62`%7q|dC zL~KX)i_#2#WSlIs8zZpQs{mM&T~ysX61K69S`(Nz5XzY#@V8aHAM zEyu$Un482O9!)X4Bv!SR20S0Uwa7AXeM~(a1K|LH6S4E$1FU{H=-{+jUte1O|Yt^|E%AeetDE5hDiSCpC_)r%w<*p$*P4aS6`32R8 z@%m~W0=y=cHP;VHrGqUucPt|2y;P3K=kDHY z2t6;JhU4kJK6PgG!%focA^+j*SylV|#gHIPEPAN=kBoFKu7R@AoZHgU=itiR!CU#0Oz7t*^vF`N9(__R|L~(cNRmd5NOe%sNul1`j=L^R@ z>cMkqD;Eme-<$j{e~tOns5CvDO-jx4lAOwJQh)YjkHHFqC|%CHN4>?O#?igBj=+!; z+v_j(M;1^!M7W*%USqI$i~oRhgfV;94Pl{VH@9RQJ1)IUlTr%)H9jIL8F>`L3PO{> zpEUqjc*3f=FUU+70HuQSzOP|_c5zwRJ0BbJ=+KauN=Ne7cejox1cQP2J3^5`Dkv4> zSARTpRBuYzX{B4dA@L2SWR6n+g&WOJ z4hz$OnAJpDpuG`X} zjq{;@UjntrWK%q%?2vAol|FSZBC zJ~bII?VL%1xT_p`eo!PLg<{yv3+N~d#n9Z;?7#iZydecJ921sUHPdjqP`-km zp`rC@xJ`KS_-gO6%9?HNN%gS1@*!D-pPvffj|~?`0sD#Rd|&q?-A`!`&oBKrTb~Pr z;Ng<4(I;i4+dr~tKp<9pAvy3e*=Xml0Edp|lq(eAh+>aM`fNwG7N28$4sNWWywTfL z!ytJ9>J<9!-)QT2_XI*UVEOkwI0R-KT>`g!e=P-vCMIc$x}}A#nQ?-!P*h=s3gi+f z%8W}}ch+9g;tp|XA{vX(?5O7hVjDzFEK44vM!$hComT}4TQnHN3Ql^82C9Mx{NY!w zTczdTN9r&p2>KKqYDBfVLek*c3+^S^T=O6Ry)|^*nsOc#A{ic;>g{SyG~feg$4CD9 zbK@enkLSDUZUTMh;;0bgBZrn^x~B*)Wj@pE{uvCIUrDs2SFyD3ksZmHQAH<}((e~Io)=zcML-pGXVX2?*X2LjgbM}-`}~V+%~EG>KB?bn z4;=sZH_-TpA3cLvL0&;QDgAn4SXeP+;UtB|10GGRs7ta-tXH*W8j@~uaEt+ zP(W6(?@Rvw8M=%#)+#a_H5bX>P&N1|iHOl|5>fxRQy$sLgIGtX4?oYTAyw|1-o7XpSf}Lg0oG=|WGkiFwJDR1%nWWmvd_6}yuqy7$jYPs! zBWzD@o-8+C?O@V@>E*8Erw-Rs?x>vyMhu>tw4{irMmGl3Ov9p5H+?r%>#yTWjXR@5 zEhGy=82}9eX#CzC)vLXJcqAB_ziP4?8oRmQ*1Xb#ggy%Kvxh@|d6k@;%4KZGLcLc& ze=gwWZzyQXT8F;seo^G#-%wL2`{twN%4>&(clW;2y3g_5_W}xKvGeS({)*>u8|nan z7aMV5HwoE_R___nTT0lWaNZb=d;2Cjr~r!^tKV8zPpv+!Rr=2(eC_v~uS@f-SZfcq z+!iU~N?&2+_nO~eWa5th=A7??|2Qs;#pqF5QDWM52&RmSohw@3ZU!Qy*K`P__^;fb zpO4f0Y1Yuw$$0X%{&ENF|}>(t5p)S6`S z`6n1bD#=^*+S}YTVoNehoyrmk_aZcn$5j*cFkIt}Jw5G2y!%)5U}jsq%pDD)y8 z8-fUx-x;k>^=jLtgSaBNTaq1Z!oI(n)7zv@gm_VZu@tyhosIg@N%_n}TVv4kZw#3F zKiToRg9rQ+a>%0~bbO;0galR%ep)zZ+qQ1p@{dXR^wHBpCb%vTGR8?4hkAchviD%z zb2vS4DR6U^IKw*6b!Rq=a+)$16Bs>gNkj)#kw$h0N6vGpVh2$U?ySk>%2&U8pe4p3 zx}$+e-VUb}0SF0AyG^eD1rfOGz=ee7<3)uESLHMLK}F}il@?`SVSie*Ra*zJOnP!ymliRPa)70%6g`EHEY}^u$~f$*QKND#{VLQz^%Z27wrYix*9GYx&Z4 z%5=x9e$=ZlfY9i|l4hF3nZ&UjSx78ed#vd^1_*;|nu%t1$VsR4#_^~7T0EE!p*AyN zE7R5mjBQfU2qap^{Z#OHXLRd`e{Q-N)qJ`ceQ;iRtx*?SV1~2X+ONWj!q-00F1eQT zN8CC95pZFvvR((A?q`K9F^Oo_mTQx;=$YBs?07XWCfZY;lifO}oj3yz!XhI~50C#$ zx%wZ1O7W3)zArpQ!edik`QzH$^c~UPIh>`;eENi}^b0|xz8JgO-is%@M3&sqZTCP= zPHh6zjBwO+e$v?|*&HB|Y-q=D^Rm3BztP!6EE&EzJ$t9Jb@b?RIID0ZQ};I(RFDMv zB-7_GmaG=C=sG;_i&O_x0Jw?SpC52v0FI-BXZ%$&v!qDMs za#?uL14%(t$G(rhpYkl3d7@g(EtzqBxP;TVx4%$Gu`{oO9R?s7+wr9%Gtobro(1dU zD#*pCGJLqHU?IdAx_Ui+!GYcBLaedLxP(kd zpt@Ya91mrkF9HxCjGm-y^SqS#c~`grW1iFuSXc#N^N_oIP_x_gmZZSVD?yVF!=ai( zqkZc1`|&EEwIl5zJzn%s>%laY=M+`!*j@6e`^Drxz?#}~a2mS81g-fIQi>33S~ZI& zXcP8b$8q3&;af6-HHWxA!Qb_EptzZ042#8mx1M+lPj;L;wPyIRuq1p^#0duD=H0xG z2J^=Q^BOi6BF_~X&RvIno8MHj{NE&F==HoTWWoq)if^IG4OwOP`bRx@+?+Xnj38B) z3SFK1=cy<%$c`(hsWtf2qrmX_D!oa-eLBFVDIldOK5zA@ir2`6{Jw_Wi)10`*ignh zlDAQ(|I+P?JNU4S?G>>d2ypY?>CKs$9~f=$Vy+4$V0-E4`L>FnIn;UB4o5!vid`yu zqB0_)!h5pV8c3xvB`gcg-u{T)E`p(wz-E-u(ey2MU{heLnP%n#J^-@7+(JJTdXE+d zh%t!&0ijEbLn-H=l5~WB92&ugLB=MCM_aCir;=00kpLFVhT$Vi(9d#OT(6Ip-T5uk z4nu`wQPiV$iTyx|#zdp5x&n1=#R?P2j3Fi2f_F4DxOiEHs(oDGv%;mjS5jffU@S)i zav!qF=_r$!8UIjKpsTQC!F0e1HR}SWLswd_JBKXm$j@E;zD(lM-9BUYLj<0-6Dip_BW@g3~Dg zIG0|9s(e)sUr#522vHdlMyuUoqCW=)*4(dQ7h2NRVkN$*i=8M2K`IA4=t8_#Pp|D$QKgk{Xj=j&HL=b#Sd4f!|I|&H3gqN^9WA?X zg#lP-!C3p~(ZngnhB^12l`Cm12xp4aA z2sVfeZ9ZbXqXsg4IO}p84ERwo0AA{Qj{vBEz1ijKbu(4;AZR@O?7_YItB!(Sg?^ZA zP^Wv-YbMVNO0IP^1Vx(_aG05oVsaCJe51dE)=fT#*Z0vM_}{hl5bD>hCB~&<;SPOJ zG%Six`u#)%0%vGQJPwfvL$2xpK1e|lPvQsUrl}guHs2g*l|h0seB=h3g_gFk12VhE zD6}BtqiRlkcWC@6W2v{w^&2Sp4_`0vzWRczPPzZeICx>Yy}iCW@_?dxAp`*Voj>*T z{C7M*P~d1F>o2PkI-#nQ-X}HM^8b5)D*pglD-PHjjzn{t!BEZKN578B$7Qy|)@r`| zV3Je*c`Zm5l*C4bi)ZM%sZE0t6pRiJ@@e6v+=)lOcLY>|l^ymt?!a5Lp0VuEY^fo! zB%9WKHCW6rkG;ZnbcwWHhl zRsZ2bEtfZ%gDK-kXR;*99x` zdZ-*ovmnnYLkO-RT7aJlo7_}ts{F*2Idt-0Ha`xIxD%Y$(V$iOo_6W=Q|}40^dBPL zthCiv@m@z_JlRu|9o>|#hgx?VcC|x3SvMU!1l#@oJhVOm?at?)I=oB=f<$-sQ7O7f z8lD@MPo0EmZDhibfV>AkUMm5h0g{xpzNvt29OMBtWF!zMq7 z$Br#s>c~n3QGd(69~2`o#PmmS9aF@b|EtM6goDSRyFfIyF&qGbpsfC2m#(-l!9Cg_ zK@;bD22d3~=I%vP&!)^-i*SzYPw9HwU@(rcZT0K=`0Uv?U9t%4(&Ffior-`ZMJPFO zuqWiW)*&Uwi0|e|hN(NNEfvp+T~9r|BK&cEj>q_Y*F-Eib~@XrCs-(qLIFJ1z7JE($V5utooklhPiO;PZ z!e3;q(6L!WHjv1X<8KoQSARLRss`!W#)>mmZOc5U^zDj-PFun27vGi4cnBl?yAndi zXrQ!UVjxSd^=7h27m+?+dp*Q_{*it8{d>#CWKEk-+3{(e1%HHnch72XK#awzdY>Ch%6QWg`48_ zYW}`r`)qIp&3@+7ACb$i(n=k$1ft!KgBSXD)Y5;sxywspA3O5JYl&9vNY zu4}(}BpP3Q2Rfw09g>$isujssO!pJmHD{)05{VE<*f{d=cZ}qIgc$k~neWPAlUQ?4 zlL!)d&1nJcl6Jbo+CzpV7^leQhpE}Pc^rp8WOvL3zg&LPWYtyy=H|09%|+>u;qKHfGC zILvRpW-GaEP8!XU_ExKdiCv_htmOZjDv`iP)5jyL^cb+WE^1Y2_P_M@PXUv&##4qiDMq}; zWoJv4^3ksYKVqpmh47%cr`NKLsJ0~re{v=C9qn`g8toi0EH;N<-uIU?Sragc^poN1>*gEUf3`yivP8d=#oy3kO+2tCuKO$6m z2<3_6IRCS`Z>&HJE2&Jpxtl1nJDZEUD;=UU>i?^$gy%oUL>N-Kt&`RO&@5Q_xN>@- z%r%^ZWi3TE8MrGePQ(8kCooBi9no<$%P$9$fM^pRL<7}CQP=X8NkrPEgBFA>-js-Bbt<9zVQYP^|4j(@UmkQYErXO|I?STa%isq8zS4V!|a* z5EO^Nr*R^_(MPlNHA`D3_A6f0dpzXcWD_@)vgzF<;!(4FSXbRh7uFJ**d!T@Ar>IQ zO%b9T+N`Xig>db>t|UAtY47L2pWy=)g8>!2R$$ z2(|R!5ZccQ(ysYDm2r%?mfW`HzNac0j@8ELG)!mT6nr927TI()cAZrfehJ+^bl+B4 zi}HHG$!|3CF)?2LoR<-eM}@UuR5P0bbS`Qqq0{1*#c!k=D2VmzL32rMn4JP!MfU$H zaqdxhSYo&cEEhVa)L8Z_eflTE>q(z+Y1y0GWgrgvjo=elLvezv>~s6?h=K1zQSX2x z>L8{i9v!b6WNw&Kej^S*WIbawp(np-VhC1)_3Va92I5zYO<;}nZ~qK;T_yPq?)vpcu)hu zySgIbP@LUTSm*bdq(@_KTFZRZA=_&{aSQBR3_)QnqiY!|$}9ijq8{8j*QJ``4yod3 zZ7fciNaPaJCWumTomJl^kzf**f0q>DhM#((XHMdjyDAxeskkaYFaR?7JV zOTbg*nUg=WXID|-xI|6(FR7l~@vEYWQrZO(rwDDv&6o&E;`aH^{GW{?;hV2F^{{5q zBn-93OpR~l)=5HZ!pW)Kp`LrHs0EbU(X}dAF+GInu6((&d&{pWBrymV&Bre}xZ%1` z@;=UcAk!~G-{y-F4Vx>M=zTy{8}SOUiv+ENV>MVC_6uKr_Lnd-D2j9(0Z9TqxG90`NXs(k6c zwppIt=5c_tKXa~3sje;JWJ-C2%_shvVQn(v@9{?Mm)104a7LT zyZJbaUtn&YN)P4u%^s*26M~Tpcxu4Guk6uty*tmp{`cNM6ehqyS&Cov9-(LO8e;xC zNu>+otzB+DeqNgyJ$~1~c~9p*4Dpiz^)KD@d1^5j3nG2`>153HwV{lS6cqFf^9@!E zagmN1EhM1}36EIoOw-|Q2aSC~_@a*`m2K8!4Bu3k`P{3(=Fz%KXA}Rr&=O}X_@<}q6j%iF* z;#zfK+w+`gR95YXi<+MKk4UvY=pzhFq#l! z0-EafKkM(Wd;QlVAPn37BQ!|)i#tM_P%0H`M%B-jm=&P^Y_n@nsf*;$uAE2?*>?)x zY}#w-T6{A%rTS#j=;2ezT;;#p=zbEJ=|9X(ylUdh`t{8JH^b996&r~J_|yev^2$+U zsEDelDk?>*UT?E0Pxul1qHU3`Po~6fIOXoXXBdf)1V1)7xCWI=q-MNOhV{*wS#z!S z_C@uHEvJ9h_NO8b?K`@QV>Z3X9T(qy&b{$6OWS;fe($IaTTNT`Ej}Cz@3IRj>%$u3 z{RY)3Rp^weio0;B=smlww`G_0zfMH{+7aPZ(@JC(%BoLXJ&wR;8WBRt)_Q9S?_-V! zC`-Lz)Lae1gRu>FKH>Nvn-e=3y$WSJm6$}$ZIm+*glxFvZ;~GKV%>PDaYV%AA@dMx zZuqCBL)KEyIdlF6oANi*S!(v65Ki+Wuy>8GggvG!$?WCAnktNuLsdo910yDgM$IjI z^-g_?D6Xt-g1v0gd{lDGTev9|ttqDaPU2j-IA?Kk@Gn$|GXoq0u$J;|XhVpwu)L6> z6Bpkb4h|*#pl=dz8)luO{Fcn*Zj~o=FHU(}Kh=k$0 zYJI*DN`2vl4*#B~by)EA$9cV0s*f@S`g`ML4VK1iM6lO~pReM$5G?Ms9fJmyb63w+D= z2FaMV>HS{bZg3=x%qxWJiNWfMMe{-PymmtsGEEH6KB)&BJ{`}#&An?h`ZW?!TE0#C znHC61b%|1Z@gNt;0m1-agy8*o&D_1?Nx_SwCO$lh&t)z3KvKk)a8v4mD;k$DZb7eE24)I9PjGO-1e3pS*qf)cy}i@satPdiceSRmt9!uO9kV z`S@?5b35*GW(mPtM?}x4wzK z$InUqod_sJf^*1%yAb+0edM6Q;QZUH@-VSFm~)Xg2iUglC@^>riiASV5Dyc`iTE|5 zc@iui`RrQANa=;1)<;%|-&a7DZFEKVA8c?sI@GSbZIG5Vl>;W&R3qOjEvj8nQCw$_0FSw zC0@~jcI(OF-&IF&)t(g1dsY=Mc%u?@W6*`v{WO?cr!S>m*uaUsQn6Shyf6!%?7Jw> zXlzz(SKI}*&>Myjvm+jgYb6^5=a~gVbESMBNSvIO*8yJJC9mI8N#jwDPQTW6AfXl^>! zE9Lasc~?JXtNe%J~_7(akD!~vY=ffU?(Cf-^W=XzltiV3cvSn z)OY?j^bVUSi~>(bylp;iaNNVYl;&i5`+|lAX*w+lE`7EBf%-gGWq`68CG)Kpq|x*KW|PBUfMe9 zQ3=Oqai5Y}3#Lz^pH1DeaAK);8@-f-w`dTp?`kkgBEAL(A*nctE*6_g%uOU0GcjSp zL{w3Qwf4DcyA15c-`kr(k}qa|`Y8#ueOAnY82-wP`4HE+4w;Dsg&1QagcGMIq{{J^9?;JE}o|lVB!Bs|AE5t-!)w=BT#p? zH98vKx_Cs4t;o96$yUrvYE)WXrmE4_KkNJarpttxrmNHjOwLP~JBs97yw4Q`?;Wu` zz(bItVKY?_p%|f%7xB^x=}RtRv=ar?G5WP?+bctH)u-1k$I}m0Q>YXm1m68rqO((=u(H*>6i<1KC)}?u+#S?)xPu%H>gj8^ zU#ypO%OTHq*V#>D2!6z2-jQLt5&gF3F@%ax8O_(qx9jyfIE!S;W-d7`H3&-83-jJ# z*S3SgyKFSq(l7i&L*0>)f?H5&1TO?4D3uu%{J`@w(f;riHUqa+Di;cevmKK? zBlHI{;AuoEgAfCHl6B#udxUiAOtGHW?P8M-ZrOeg2=rH(t;t{3S4C}Q2>IKAQh`z4 z&q75(qg674d_a&Kj>No)GAprHq}=;U!b71uxh|H=sR=s=hG+bPH0EAkM|DsvK}`?B z2JHJBdmh} zpiTmJLeXeDYYhm0!MYVw#u6OchViz%Z{1sbHO}$JRmn?btkSz(o%P8t2+{I)-{=+% z58OMj#2TmTKdpPXi3h;if?M13cMx<0QDU{0F+sysa3QC(B&707g-X=@;m?md`>Zma zeCdC;eLu7F`DZC{r=K;^OjyQuPrltf9qxCf={1z!<KPD%4&QAT|4QOplBD4*k zQ`I`KmS}J_mb)(V+2|EVL~9F73%~{=A=KEmH1_F!I>^xFm*yg4>Eyk82va*XmY!5G z#`e+HV*78sp5lSA?_HyN24*^C2P&5L&NQgcB#@WFYLWej=dJT{;mhcl{`#-NlmC59 zjnzG72V)Tk%2Zm|U~9+RA}{oYNY?ix!S`%j#ckbAEi~{FARK@o_+WalfmGAVq_iB` z2r&cENuelMIvfN;4v8d&O9n!Q#Z&Rx8eP`jW)px4RW>Rcn0U%I>74T})*?)^ zcUS(SH4T?&GXO;w z;_WhnuMwX!7p4+T5gPNm9qA&y3*y~x{TV1p&M*FoAOxm|8`50wSR#17 zHkGO`94|pPWiVl5uh&Gow%hZzBT6#V3*2V*M%{H@F@7nhYSis~{c_N>fLPflt{Z#$ z!IL~XKpPblj%5kL2^M;tPn^c2y9yFc^NV*oQ+DS1Se%YC=Q4#!OYmL$YQV#&0mDt-SVKs_Vu74`{g8 z0^iIoeut-*w?(TJQtTe;<9{nrb)|PeT44U9WZcgNHT!YKkdQs|qVbIGVs^RHt!unW zi?^Pv$^F&TKk!+awgQ6S&|oZWu8TPyn|h|b_PUm-lQVQ1EkE0tOpm3;$2kFM9d@sO z+P>PCP*#zSE{Z1EJuR4<8KU;d(p(lJtQl{DHK+)ic&$RwN)kfd7M7P-i=9+l4Zfam_yin@)v+lsrHpth^JJN_2p~% zBCMi^6?SO35|_>Db{ZnAfdA72?7#EbpT4&3?p4&Yw9aX}H~sF$!srk~n)Mf_+1;8L zlO0Ram=1!US#rU3@y{Jn5ON`P*+BOw8wv;9J>6g-Tk~s|yLr$)%C?0ndao0948M## zqtR@7OSP2y0V~MYQC+ODl<45(xf00p9GIcUjwdr3DO0O9j zFiB2)sUEA2Wc+s{TN;P;poNXbumYwG5R^(TMuAP^MPx7T0z`wg>_Q%RsCtYQ14cfk z#9S;(Mt<-pcMg=MkTZDR?;C=G;F^s`JU++aLtx4&SU>Or5_pZB-HnZ0*||mD=Q${o zefrg`TKfH9mTUBQ@qFxi{rURh;_o{4lebeSJnG*l^HdP60B^{;&Ca%d!I7@!)&pwv z_&c+2CX@f&w5W5g3H}L}iTxv2;xNSZm-5zM_S9SKWoA@(YP?m2G0IqLdNpSC5=0CN zj2N1vYPU*j8+IF^J>ojb*Yigdaz;{8_>0sD=w&l^p!02KTi_y3p}E=QP#T zrb#_XnlrL7`s0ju*J#`K?l%1R=m5xcJ2Ae~wSEUOl%lOR1O}7@H?vl*zF@Sh zo4-<#+En3{EiG$kjV<%*ga$3#)mK{7+37loQc4g+nn0)r8pM3DoNb*IiqgR6LPf;} zmL2rNn!Nq26<{WoFd7$k90~+N5nOcSJ2MQwxEbe~sf|vk7Q9V|xJnCP*PT!xHk+!d z0LU;qLz2y;^GRP5Ixl~v5ESHYqyM*P;c4eb&z|o|P5qZN@*HsGRyAv3h2O>%n134Sh`+|DXSV=c^f3y>EU1_~*os)~fof+6OK0_5>P$A0%)>7=e~G19`e^-a z>4MwxdISU5by$Jb(QdIf%wOwoyzN0RQL@h;Nc24O8R5^TX1~#jaSLd^?2lXb4B3`m)(C{!k@Ytiau3?D$5Y=|3wT@M_*@YNH1AunY8)yL zm~UUB*?EEuhel&2Qd542F(cwg7$7W>t6Lx7tJirGPFa3t@9<7KYWP%01Xb(;$pSx2@HxAGisTG`AOyOUzPp zChlbZ{MnsJ+aNPKw(~FgF^j1{7kGM?PFHEue2-Oj|^`PB^$z6P4S}p>w+-7CyN;hm-W^d?6UtBhPnXG;{{Sg zgzoUSUCMVFjCwGZT7TQ%smg*`1^w1bdO;z_>gnfUOIocJY_zkA)geQNse-_&u~rpmyu+;BmR_Ixpes zaU$dsmxk%3-bkWb`kFr$fZ@-XK<*_}zf%wbq){ND37>J;s`lA+0HI#v<2Sz;p2Zda zWJ(8cdlC%|zFPPA{tI8S)Lu8q%=Y-)pz^oOv{SMO)f+DQXlof`Gd2SGq!xHL@}-5b zKPBVQ+0o$Qa#+`gdjaYH438MJAH4oOZW#3)9X`Xa%t*wXi?6TQDHyn&D%el&)^uNa`GrrZ1dI2B5R0WJ>)G}`-|jog zD`oKHjSu8KuY@{KESuP0(lUa=63t$@WYVEx|3K5$dQYVo&XSF_zh*JlUHN8tsY>t} zJ1Sp=0odMhX=5*iN;6cjo!h1r<#|N)+(xnzI8&b4mOYmNq;evjQ`k%(a8}kJ7I>mh zZ*ep{Xo$Y8!(WFh{_5I~OnXjpN3Cw+H9rs=qE>V%fZ=pCz<+r|BVxmWcYk1O&%%Y+=);%4=4WKa{ZnqOe=1Hgx9jTO z4n5zLP6^!@d~~O7!(*Gkkuve0_?w1Aznhue$|BW z6KCc$fRFw4^0(woJXb z?Z_N)Rawfw^%fKMD?j(_?>4~ffU8UTdbjV`7)`yx~ zzSq-U*c$Vl<{#UBJzgHOG#`-N?<&7S(EpVzgYuxONKVm?EPv}-UsU%?C+6e4BOlh> zHtnh~hsV^X(|136$KjMm%5;owWwaA7g&zj^mCMEAb!HbNz25FS=6~{Cerzan$ltxd zaF;9Mfru+mw$c0787TYb-)$E;x;s4Z_IKG-?_;c6l=GeHn}JQEE|t&De()Ha|3}?gfLsJI6A@T!jRVW_X>3zidKJ_8_C2cAKH_v-#lAf zxLuhoX5?96N@YNARDYy5$)Wsx`pK2@ti2~B_(`}+qkhqd+3PLys@tt(I;K(i_^)!; zU20da2Yzq-H;9ecH}S~I`E+vcCE*or(n;~-6|93i(|=htD&_Uu59E*gT3DNfQ;wF( zESoG!T6tdHw8+R(nzOg#>bi4FHE2@#{R5Stm%KC{+$GfyJ!2)9kv9wmO7@(418JvY zuh+Ac=uLeXt;7nKiWV1(cUR&%FSQd~TB;l;;!G^AD?FeE7_Xsa`paFOeF&~juhBT- zObd~Axnq=&bxb12C}}BM-bvV(OU=$o+XP$7Ft$I=hS3a7PV-ylcscsOz($3fOI5dA zOC~~B2c$G@Ciu!ndcK=)#`bY_XEu>9y-+P!UbZ`Z>LJH*<&LZdU)CR^cXk8o#s5~y zP0fX@E%ap5%O-?gYP`M&l-syJc&=J1WLeAq`HKvs77eHu?j$_u(tOfWqqi^R^Wx&RW3FU;xTn$Q?;Nktn7!H3RWo&dE8h z9L9FJ#LQquj|Vz56;oRfa~thY_Qa-}P4!N`+^86iqk;}|y>c2*NV4!|A2R;^MW&KxCW&eLHeRW)u@Ap0-qXvi) z8>Q0iU~~!c29#7{bc`4^x;k=K5? zYmS>wz22NRpPY^dhA%3-UfS>gaZQ%4ujtF&Wl#RqkbTz`Wr^zEOITV%fNavs*I{c^ z*lRW?IA3QZ4(Oz36|eg&dLvcD zucVS9t(+9FH=MVHb!r^By=cw*oV-{hdz!Ee&oD77)JkrXUd}m|H$ENM#*$4;b+AA0 z*st2B`ht)rH(?Pq6CrftVN0<$+oI%`i+nGf&?CKz=% zX0bDxBJS$edi-hfq}cVptAI=V_4XGJn3xI{h%OAdoF|%fI-K(Vo$eP%tt6CoITzAVVoBM#NRU+bX1slmQIE)qDEchy7@(mkizW)vC(; zSu?Hr2)q<%F3@ADj&hN?dPh$Hs+&yYoUcSo03NGJrh$6{(jOP?eh~>=~5lmpK`SB6B9~t$YT~*fvVgxEl9$xmfz9K|ZMx z_1X8rKocG&v?dznZJj3baw_(=d zqbFa^zRAs74`-4tBMEus)w$z!S+x`2CorT>&4fe4w)OAF)qO~>BVEUHNAm`|A^Efg z&m*r-fX1^`$M!x>6K`n5pe+Avc)`}@kkt4=cb(bfLbar-nUBq5^P43BFbfE+FrowrNU)|AL8r~kIUUg~4P4^s#Z*PjFG}<~tO{0}{#QcRO zS~XpK?GZu;tudCs3+o;ixCw8`!>bI3)+$%yj-zl%2J(& z$2dpJB#etCh3dq=&6JM5fezI-4itmCq!6bKuf)|BWfCQ(PZ@q}>@|9`xOR)?y)&=nufC zPHR3)6wkfxAon83+5~5^X@WY=s)JHDYt~EBCBGM7+nz4~R?O(=pWF?0 z(JgcCqJY}&3h68>nw!dQtYnsqT0PcA=i*`qy`WW3PgU+aAYzg}q&IR#wd=|2H6mib zJ=keM8~~ zVGOBtctYry!9(yMm=~pg*~i?t?(|tJwFohF)B@{r4|u0lcF6#A-FvRrW|#g#qad@m z-3(-`Xn(DD1aN#L5AuK-C7ElZFLR&qI!CI1u!E^GyP%I7j4ytm(&3ccnUW`#3M4%P zu|aBumik(glQIRhW0+wxsl}bB6Wv zz8|7*!9!?B*5lCw*a$!dK+)6r!3dY$BU+n4#Y(ri<03~Mn6NMfT@6aS;6c?Vd(sco zxIaL_(Z`O-KHQ4mlG86A;8$+Mv8Sq~!2wevlx`l(OYdlw^0+=e@kM@iwVVk&%4U@l ziK>c@3M?goEy`fDc# zJef&3uQOb0%HBrZw=+M)SNT@6PXGzw|7(eM(MZ12ryomS{CS)vIJ0kAA2IYcB~O3D z-(7s1aj55`y4p)z7g3vj;9KwD98ttgbvDjBG){}6r;teAQ>J@_A4`V`L@*}dW z+L@n5yhj1}4_jek2wpC61a)fv|9uxv%S3}&aA3;qJ)k>$9w@Rb&=Q3a5wHLMWCt^*Oks|tV#&*brI#UE2wcHZYr*d1S)?|Sa#0_x^uL+miXY;{ z^Xkhi2L;DK(X<~eE5Zqew~x#WniD@)i2$zW-`%@0K|q<%uJ0{#l#0gv`!@RQ;oKgb zCLhloGWI^fx(?}a=!=KK>^tp?d93vozggft zY)4>sbk=dGu|XA2%11;htWxuxgy4le@ZL$iaWZ`bnXK{y)2C)3SDn?bRFyftnR|_qoUmEc{csODcZ$=wJB8Qws)^g%FZgBl z$H9c4C;z?IrF^|&+z=+8{Av&+qZjS@YK0jSRBd6S$3zkoN{9dJ1e-tx4fh$-cIf?} z_NGXkthX??J&z1}PF-m%!JtD^mB@|C=Fow&n+?g{oa=x08aem2g=U$C)N!+>EyS8| zEGb1ih#it6tnu24bS0}U_)1{U^IyZKS4dl6NkYtrE|EW97tlj+R&b+~{zUwNzAxsI zJdsID5&)~4)xoAlHU$PGk!P7Fcrl0u3vh5tP;`i5OqMbihjP8)WG5ufd1S(x^I)8ILdyc{=9Gw=l>%O2qykaKQ&9_V5 z$N}qSY5wA8H5vBM+18+YR;u*k{-dKqS4Ot6QEN)lcIqbXSdJz$(64$!G>QxR`_ zT5IJ25TA-YG8+sm-HrVq$T_Lo8zl7XKH`AP!_T)s#P;^GD|0W`>Eyspg%br#2v%Lr zZQ~O+yAZ_sZvkLsVQYn>ctcV4^gQaFbPk>nsX8kn)tAXX*~J57{Xw0oFz+icKHS7x zTKllZsXUrAjSIBPoYmAJ+X>$bfzX>l0i|kQKAcCj)lyB=*XNY5ES_9kfxqHChv&8% zkPX}YP|_-6A*^^hI7=*`X{CW!QJCuIFIV;qfeGX?AG??Aba)y128u}}*;m$Q`3YT3 zXXD>mr1`oW?~&991p5_Fe7kI*Pn{`&+hyczkCd%&;w~4Ls*1@1s>|Jf*70a(L!w_q zW=7N*UWN^A)7P}hqla~IQhsvpRn#x3nXC)*Djt795}U|yN|XAv?{yv=6u(u%LMT)s zywTM&<%}Agt}2Y1y3o1yf-w3a$h-5~8inLJU(@u}wVHSOgfxL>%6O;@5usjze>jJVm}?Jnww6S zD5p5yIc20!jgKW^Zl0BBlV#A790vzG{oDDy2iM<|cf{fN*iZ}fV<4nc`K}NaAJ_f=;B>NKFC0pN_>ts5?!3ai< zYxP)!yTWE1*ibWP1~qm8jynIv!_Cy_eI994vbEIuVV7#QGw-}mY>&^f9c`Dy{4>3o znY5Y7ci2(oG1dSq)n-<`Zv=6?j+gT*38nYVm^%oc=JQx&>f1qXp|TC;#!aQz)(DG9 zL^qV?F%$<$a%qh~5K`Lu?+*%zui&-o_(xTC8!0omo}FhPC&*^THb3o+J{B_jq2cF9 z%*O>*y*@jACJ}+_)ffUN{(9Xm%YOBR+(q$`(kk zC(e|YK0|7e zQ(ry1j&!NPcyEU>dYrR<{QxttRx?b_P5vr%^@);p7#V|$L>x4ufnC>SA|5O% zh|mg}nbU^;VYc13F-(t0$L}WhSp;j1=PZaua!bUo^s}YE#Hv=w$#tt{r*N}w|L8JMYOy!-3|8dvzU(` zgJio}?iekW8@vVTh+E&RYc@DZ(yY3V%nG_6HrE@xq=XHxpf1u(S5Oi@Ndz`^-1B@R z;b4t$mQ{vK=S@GJ_*$K%SCgpgr{&W6uq}}5wHX4miyl^Z!N=iZF^%Ru43M8X=0uri z`y#;2{E+l|ONA)rbu}9GFz~>rD!bQs(1G@=Ts)t-Hf`K2GlujcHguG-W{~DzrT4=JI4YL0MJq{%*|x zpWZ3UiegA#!L)y}`&hS=ZFRPlCohDaB5TxMSxkB9Sa|mptH$0|(p<>E8)azxm#`Bh zk<&T?uH>EVnK4CQLz^)Y__s>H;g9mi%#A)!*j060_LGoME~=YVs}oTsYX{&#wuRO= zZ%J3TCrc9IgWFc=*aF-7X>}%i>QxXpM63@w?NT zMOe5@h2L{V54hhjpWDr%%pwf?1>4dlxo=k{l7D-y9iV$X*Ezw1BiN`J6daf6PL1FE z(zEC7QMW0<-r&%@~2U*YRIhsoYpt-=9xIY#S}Q;{`+S&aCx)wJ1)qU@4pp!JC5ds@FoU&x-r<8 zEr6T*H`}wLH>clpJsq8M4=tR;fHfmZcVjVHu^x8Nx-rC}9!+)H#{~K?FG**+=nB|l%6aheY2I=1B} zv{#2^C z$U=F#jQum#i?=}QZ54kxr#^f)A`jSm*TgkU&8cK`24bv{Z259Ne@i)VGN4_^no%+p zuzO-zBeIBEvCV!%$4D_gv({?bS|UmE0X!eA7m<5PpDIElHq>)dzs5emP&+_WZ|H)- z^+E2)_>uG6RAserdGWlKAUL~mqTI^G!_Yb@?CmDZOFfqJP*AU!FOjBD8QCOZ>L^P7 z&j7E-gPxHxPZa3?u$TbFpU-lBl=-!m9C;^eXAa1#sFw9@uBKBW|?!s|oug5dD|>c3Yg}J@y6@a?CR-u49PyN^}~PBRx1y# zyK!yNIbnvdIvqJX@eTaQ3Hltp(#m!CI|e-Z+w9j%4s%7bpyoV@wJ(2a_gMYuz<)sq zy}Ab^BTHYa_jD+uk6V6K^v_}zx!WlG_Nkd1_^}C}SW%q@o=%)|3>Q?V*DmAiN?D7X zN3N;qvHtnOa8a3&k;_?kl5+}xNlcA7sw$Bu3gfEYCL4tK(%<#Ov|BSw>k3f5rfNcT zdAhf+y=xDsObByhVEDa~!#qyCZWRv0O?+qTDEv7SLwI=zEb4`;ZI%}H)GxW<@yIIP zcGvg_Aq3s-Vw4;~1ry}Jm}hZ~diu)QK&(dH*3g#tCsG73`C>*Od-wZ(;Hf_I}E|x5yKA&N2T}=6tMwtAdIL4}hHm z%Urf8JDn-x?4Xkwdejicsw>r6n0|W_Orx$B*lzL*vCJ=CpVRog?55uSr}&;~Cjkp) zpWW#MR~mUNPHx9EW9-Vy(8kq+F-U_ongbl7e8zW^qWqg8zh9jsX10LyhbWrp& zJTYsyft)78I$*8lsbo7yN$T#r%)*rCP{e-7w!&l7Y1`Wg@%Fv3qGbCxHCQQQ8$ zJlU@gf(LW#VK24nzdhDx2fVO3wV=aipxZNsQes=Xpn8s7%FcrCe^#aT2Dx6b)CsJ; z;P;L?`w$#kz!cSCfm$G&*2-M!OhEHmOs(1s)5ntvvopvi|DLCh)ayu$;J~V$6r_O= zx4GVbjBGEflk%A8rhY^nZdnzcD15i5P2>GayqGKB!F%>9@do39Yy5OJZtrkZG|))lAKh_X~Z8ooDMg|mJ(TJht9(aHLCUA{p@6Mc#h<6RMN zT`Sw)5?Oj)8GdzXRoHkHQUnVqv_OGaP&3&-03`W{178A8YnCHszRWmk>B#@EHQ$WU zsg<%WY)T(5X3H^F(~oX17@qJR^m|SOk}Ka0)@iU`kj&V=UrGb`ahs6X@)M=P=m;9r zQmXh}?nnmT7`p?zL$BNXV?NCSbBs9z%j0!@DpY3fbnP$ z`sEhuTLhira`jJdVfHeB z{nxKANItbemy(}k+t?|%U3PE=eVPBh>Y_zM@U}>4MdA+TA@;DbGqUQZr5NZtLqM2+ zMMI^q^H@1Hr&*(xS9Zy%7wqcWr9amy8X}Cngy_M$#6)hXHQhX{QQj|seA%tZ1?1$f z5C7>HxYrR@RJM85T1 zgDEXK(WVf%p=`M@t6X#Ke@J!*raKNR@f!h#qwl@yX?pzhDL2$}pe|+?_6v>=}`&@U@{g&9BYaDuSOKc&#~n z;;lD##DQecMP78#pv}UT8Vv{x|->EuHwEya?RV z|M^QnhzffaW|Jbnuq}wTubo_bF-n*g)+blcWYYH0FABM90N8F0V*{B8rYCFZ)rV3v zkFREtJT=x%Fs9om4D)_r?)#q(vg36a{m+S(5G7;D8m&#%py`T*=Evfa5Wd8&CoD6U z7AdaZ7_kpuq?aNa=&B&AVy-=dT_WxLHD8He?p(v|-W1C#44BkVWmX8Fvw-erNJA-< zhg{Ln?5RB^$#bcIhM8g76*S=P@TGuHSIz~Z7nZ?(Zzujcr}taBK{c~cD+~S@5SHdB z?eAAr3LIqY>tq?y!kCn?VR=gv=cF`agW=%#Dy{x~zRcF<(AIayf+|+ez3A(TSG6Li zX00+~$>$6O1EIZXR*nnlK?wAcI6xC5UBs_f5*1bS1`j z)7z1NYdd;~Aky{EVKR!$++OPX(J`{sg`gJrmHWi{(}F4bLAD*$sqDByKAT518fV>j z=Y))g;cKr*Y=~TV!b{aC^l`6~6bd~4-vvi&khEuSLe)g@%!)C2UGV)}+1^fvqIhXs z+0KV{mhzSE6xC!f;%I(mHi&H_8BSHbm4yMSuP3}xeo#Weqg2gMBUy^(y$>}%e3vA1 z&3CWr4MF!7Ru;)*LLjL4cUXvQBzUTNT-SqEy%~4zS<$yR0U;zTb|gEN%O6k!cCU;<;yOvr8i4w@mkZm2+=mx2^T^ zC>KiBJsKW!RDWmEAFo;DkmG2rALoC5Hnxp!)HsBo;IRI(&?D~b@H4Opmn-y4#34hQ zt?E|hKq0wfAzbG4??g|e$~uQ>_)5K)Uu*6jO@QM%;#F(a;j(x=fMXHyp8afFdW*sq zNIq_C`>4X{M3@1$p)F6f@yWjTD>SaS@_6az@7HixZ(xD|HF%IXI@I!%M&b%g@!Dbp z0v8x@4u{kkmV0cr1FTHi^Qw^7c>LW74jMre)MN22D^d(~37!Ssl%L+EpudV_T|F1h zE6qZnWEF7`sVn(3nEeu0$5Vf%0_Hlo!04u#`(Ybi32|9((&oa-_9#$r?LM!Bhn9LN zawyer^~!9jegL<(ebc4bKfCcii+&Fq2Msxq^2>oZe1D@xLHxF9bDVPDOq0Xm9|lx9 zVOn+bUE-}te0k72XApwdq7OV?AyBy1^O_)rp}_IOztzGdo+dxy;hv?^%T)rCjPfgA zT|fOD@|o!xHUCptr?>%45MzOce~yQ@h<8Z>T<)cW+2+Lk`irWv3kxbrL|ctnG+5>7 z=Db<6c1jJah>6I9BYn0|-989D!7q#+ghRefE?x~2_X}X`1tVtbfVEk+X7;sqPMZN& zc!eye`6xP|`#iWG$&G#$Lsr}VZK0+gLfJ1dCWW!5R0GUU9Lg-I2mrkFl{=(LYl-C+48 zyCMF5R2&eD`K~b*Gk6aHu?gRC=?ap!9<9FT*5#sx9<^9W&xe{oT64I|Z?g-cfH;NT zcX~UL{bZ!75Pjk=V#y!b>ZRB&hmer!nX>Q_5NkXsaLY9{z1fdiZ;Dr}I&EJ+tJiA` zwcdE%Cg^1#8W+2q=c5H`X?B5RQ;VQdnRtpOUF^@C{q-fa5m~(s@I%b2a)L za69j@)JlN{4_4eJmKemSnxVD;s>UoD*R-T%zWFwuM}g@H@>CdX1FS zHT%A?S=7{HVc*~0ySMyIVhj>}%N?*7u&iy(f#PJuiT7o(WJ<`^lXy)^70%PGkf`80 z3>|$giP@}FTMpg-ti}nZ%!+kWK(~uky@lh3b=z_w^5vTW&p(|$Ri2_! zBajG03MGo9-8;m_-mg)(3KmEve5+UsYUb`sR})E2^9rLIC8>=YOBSybWZ~#(DpGrG z>#W|~Dbh4VC`h9)DQ2Oh>eWth!7!&8Nz)ORQ2Uv;Ipi3fzXo zXc6PDF`qi6?Irn$ih^)y&1Q>&2akgU6bi|Qr-1%WHy@*j$y%I~uy|eDpG~u!Q2IXZ)De~Uz55Y_ zwYOY29^DjVV~5?Q)pqa|4_!WK*5i6BCO1IphHZ2EY&9{F4MpKTCvi59wLvHmoIxmW zs{O|B4TO|9DfCaiE3S`+NPP)xz73U42sg-XD7wI2oybm zu7e}Yk{PsPEdK{pBm3NzmK6ul)2JsOmSr9O6;qi4*R5G!7Dqo^d!vNg1@AioCLg)s zMgyEB>NrRj{;r#PJRCA2cbe@~h!g$7{LyMY%wSLD!rHNU{T1~W|3w00rl>yT+E-&2 zw)nU@#=M`TAks}qP?V_CRUMBrXpl+)w1D{HJwR8!kT`y`GS(oY`HQqO$+K?bFsw2_ z`q!k`1E2?@wFeU!bM{+$os&Xdz*?VO1GVD@nD_66P}xkXNWP1Pqq`ua%zGxO69#1i z($U3Y#W$`pyxNS53lb`*W}6|?W)sik$5qiZ|EYQb+Z$~fsUmY#jSBs3+#mKzn&?MD zOe|H2ayVYXE$!*WiZa~+-m^#Hk|e5wjO>InZ(-4 z4=!QH^<4&NI{EV#pPW$@XOdapi;iC4Cas21m09Bec)gwSroKZwr$E*B#vgTvds^cV zCpR~d$O}>$`AT#53L*y%3Mm+*HPEQX5*8`b>8ED-?Zt&bE2TXumWaV9Rh6icOj)*# zJ$QKk?z>tE>c)n*hslV7To!3uQsKo*(`pItqLT>{!T?6aj{g8}*YTKe8D@5z>FTZ7 z?5H3Y;F~>fZcpM*dZu=&4PTAczZRTYSr&lcLs3)~#IkO=@~@yBWRtuzh;;2%->cHG zMSY!FjwMU0>U$eT8LJ2QNNOi?Pr&UAosv9;CG2Ou4XmS z{l#pi0Ge%t%J%-xkEs*@6oUpS9#fLp$|WZrhBNQg-Q7*Y^irKEhAKqX%-~+l5os-gkk}d)bZNBu5d1Z7t6c z$e_6_B~;E-&LXC{SFK0+Q3v5-;in9uEIWSThqBBWh{O7)O7Ga9+z~~Z=b#e4-8noY zA~yRHWTm_?;`B4k+{WvZoUgt6vw9MF??l!x1F~>LdpXr-Rs=G*a9+omHeiB# zy`E6|GDus;q#IMJ)PjwUhQS@Sn{=^L-@{8lAzPASY(RB!w7zQ<6AK$S47l}a%=P(# z?S1tACW%DC*m5}DGdqN&4LBb+u7($Xv=Xj*M;NWsTHC+NWkBmhqMZHb`T$s<8ppX{ zVmGI=b{XWVydrXg@WjY9F$RuKE;y{+xBeF=_kH$D_MQ!kXaC_amRRT@ZmTaFL`VQ& zf+2v(28E?R;8gO>6p2~!Q*t0y3NO&z%aAiiOY)k$Sl|(##m~&|t^8W4bFx=1e{zaP zrx#LS4Z>+Xd?>G{+wDfBYp*SW7|fzj(VcH!o>)sz(evYwDN+%7Cb>Owq=5fsw0tSc zm*@q2lE?v-sOJ`+m^GN56PmDU-DB|;B((6-K@Lgl2O(E3XBiYB2nVfCcMjS>f!N^r zbDa3V7lG8cj|;z(1#U(zYt9l}u9rLCN>3)1V@HY(TU*$ZKnyKbgD%`mFDPUD)rH*V;V!(7j)BWM02Oq0Og8L&j9fp918)DE7!R|GBPk5YFOS zN-AX=@%t$nPjiP1?qWv+WwPIsP#VgIe2J~98lg$~-SeNg;YzCOa4QODf$#wo z#I(g*4}&&|XDC${R@t4INw`=SKMoSnFA_9L5=dXCw7$%wE5_s{99=`QxlW{FLB)s5 z%R)_iC6iWP7zs4EDt7Nj&GXF&1W6)eWN@zau1cs|Z{ru@U*zL+gHavIw}t7>AO^3^SA7^t9W$b86QX&Nc6<_=!C&SrEE2VvNK7w7+ZPjDk# z!wKC+J>o1!E0#lL>A99-cv>Q~h2Q-KR9D`5)pn?$*ULKQXyErgb4?nK9#})TQ5_vD zb0;~%m=aZSkPfH*e#D=R0K~=2AlX+q3zU7s;+~1{U3pgC7A%Xr*bBH|3{~C&#P0Z3UwU%tT8q}uY zYtoeu_}9h9RXyh<9G34vJ4Id7!EASaT?xIam64`5J<1|2q6G@Co!2T=4j=?0mr6iO zbYZ#6t9E6S*44Z-u%Oo~r?g;iUXF6yaub#(JLRhhJ1egO@@A+o*J^dKSuJ1V-_FF+HsOFZ%k)ncNMEZnm zT^Wlk{Ta)9S9$ExYQYdBAh@7%s|wR)Qv0jzE=d?=eZs8(osYnGBV>)V_1g+bkW78~ zH$Ii7+L>S}b(c?`QJLulDvPun0c` zufN>kRhPoA7M!PXml+UP2;oH~LqTnEQ zP}K{BT67%zC-6-J33RYk-{XLix$aDc{fOO_T(B#0L%m`(7bs7`a~`$ZIg9RJ59aQ`XqUVm|d8MqjU>c z@`zY=(_QRUP!aYUXK?rbv_Vl>Pd2MkWduU?U_MAsUp7w538lCxSp1_GVvwXnRmC;? zgqX_N9(o#hPc&jq=fp5)@8@1ATh4oz0RPPe6tW8xve*rBg$PVivBCuyvdu%1uz_Yo z6FN5?9Ul~tBE`5__dUaK@+wG3M%-WjChQyEcXH>A&IQ(lJ-XCRoq5|a(gp5RH7*E# z@p~j=cedImC*Sq+>#E3S!;qkZDCdyLgVb(u!Kmsv{5KNYVc*evQIEcsdx@Dq*K!vH zj#@#Pf+D?;?tuGH6es28HI(|)UbBvNu+O|$)jBd}oe z!R89(ckxBH_FDF)KhLe7-n3DgsKZoz+0OtQu`_cxiCV?IsNsEsAKVfR;;z|IF0x&^ z!N1PNkhq9H0bQ2~=6M~L;y##xoB>4JLAjky0~L)zNR1-^E8y5{Se6bQxNcV4HnX zoQ#vim^>h}x?lFPy6nhd#H7Bdq*atVS}bNkl*{8eoQo8`2>LA4%aB2wFrDg4y)c`! zFo4e9`SI70qfVG}I-E>G!~WO+nR^SE$>GGQ)}4uAkXD*DNZ<eF%KOlHrA_p9mbUh>#yL$R?3J>miJvFB(%ZaU^#swpJ_H{<3$&i>esIZx)Bi{K=I;TbM|ZPKAf(zqgBa>LN5;rvsbwr&kPAot}gX= zZtl30V2+bFF(T*(Je#W&a+t5hgDu#{PbC|qGBI%?{mAA6{UDL=8kaR&Pp?NjhSb^p zmcOg1lIxIDsxgu&k2q;H>gvs0>c>}kr*+_mpWr%@F}B-*A0Ci277Nu0N zTVx7S_T_x;oa*6xZ+ecTomv7v9mKKk{hXW>^Np91>LQr5iTb1OjMDo)Bso2#iIXtX z$YCot_JTv7Hhy*2FwZUdj=!Bhj0n>8joGH9Rrk6iod|}d34_0ln942E$uLK2+ek-q zs{PPzdPSGu2f42Hmi&Om5H`^cpj#;}D_ChY`#w}$gteNy#=<#-=JZ+8h)TfGB^!ia z?hi5#70FTqdm0wz+booEYq4&wfA(j<8#v#6$u-qS5}e1qYIQ_cRi5_Nz&(#^7IVxJ zcJw6Wkr+75t@Jr}qe3|-PHE~>L%ff9x?zsNC9uO0V%jOY{H-9?mdn}j>|2~S>KC~^$CX-WO}Fb$}F(=)3YmNy1ut1^v!*Cc0fY_=LyPB|m!FP#=a`xii6P&)WBU1gU;x%6RU=Uo)@5(~iB`oJq29!Y^>Kk=wb{P~N;IAs=0X;cy0nVI}Gw%b{rc+lm{ zc=}h${9r`-HvZV+ZDB?0{rLm~Vt6n0*@4`k$gfpp8m?X?O2b)ufuMww{SrM1+m%uTb zedh*q-5lNKh@Z>Z0N071LX{Klm=T?$0JtpudP@{DvdA=KJn&fl)#EVxj6_jn^-kmY znfzZ5*|hKDJEN2o%}O6y^|6(#fz^!9JGbt#{-O_9n#^!L;;w7^)jp3ZV)&Z&CCLDv zwt7?CuS>*7&%L|g?_T|OkU;v_wGI1p9cuKo#=wgAyENXRwp(_(o4%C?;fL^9m0w`r z_TjIiFGyT$8t98R3kwr5D}+yah(p2RYy(=vAS|8j;EIIfrvb7pT4w2J>LwNPM^y?db$5Eul+aV(M`EOg1A=H7%vr)w)4GL+oIb+4QKV?VItJ?I@nc_htjO z;>&M*`m^Ah0NzbqYpo3k^L_i}>&X(q02LS0l=a&^WbX~%o@+SQ-W0NK^-9@u@_`{l zOQO~OH>ZEB$B6ELX`lw>Yea8cr!MT1R@>(?nHBnghU@g)KU_bbPcv6MvAmk!>_j8p zH|t2mnh^2M9Ujv-M)Z+UgoGz%FvPLQ62* zu;;`vk55*%g!@Rcia~?%rr-Ki$s1zG>)e^mqR-5{Q_+8$>l?Cix$5<#OHg!w$3Z@1 z{u;069Iv7m7}QyrZ0q{kU8;UoC|;EUCMPc?LY>+?&L3hX9i?lDLIOwY=+#etVU&~i z3HfQJPwOs!Z>CcVSq{>=*)Yo*7@-i(Fv>^KaLW6MDcJY&%Wp0jkl%?HUbJHMbI&fZ4FzRZD0N??j*C%-u;ASDgCyR3@(HGmW)*4grW^H=gOvk zTyp5cwMu%62V@09C_Ii2-7lFNue@8kE85A#?Dk%gOMgLXSZ2D05Il_OPC{LG9QRCN z|MgOIeeBC$2wiz)Xz+PC@T)=kTaB48yP(6d`|Ceg%5^a=UG*=UT3X7d?M>`w(>JZ) zf{r#eF4Z=E)n`o|t$E!7may``{-R@7p6w~k!Nd&xbTP#9)U=yGwkH1!wx&NUm;%~a z7Z29zASF?1jR?utTnyYHEuVwV9#>y$u8AdB#$@>P?DTFlc;pFJ#~_XqNILQ%@%=kF z{r4|wYV@U^swJpr|_HYp}LqnilUN+F{|NH zvM%{$-IxMXffUhp(ldaUb-$#ODG=i~wdn$1w-X5Bkv9v;D}F^_uZ;CP`cm)SZyubu9{1T+MfjN%_*v#1cbe?91OMcVy9dNVcaLcTgOKiO z2D;4G?WC_Zl28|Rzt;Zv$3|(7f#Thn#Mr%0i15Le8n&s0S#uDryP9NV|JBpudBW>; zw@;v1cZDU&f}~<~b7sc+pxZsA98bzAmXr8tQj&Dgc?bA z&Nc%@oui1i*9Q(F7>Xr>2eXK+_eu&`O^B&HOxtEx>Fn}L^>mp*Pfan0eXON4St;fzEx6)Wm#FsVEefz_sh#As3B6I=lC%mf208c0cAuN3^9b z*ryy$Wyv?6@;o9rV{f#3lk2r#cch&B);RmHG#Tw#)^9i{Fj;MuNxdwG<7!lE8j=@t zdPiP%9KRQ`wI6%!Rdvx^pvL)?Z9^6y=wFIk-F0j*r(oGCJuCb0J37O!k-i&woR#X8mOryB&dM{eNY^uV zZ`#tn1PgDQnwa4m^q6J_EtgGQ9WyutExK{D2Q!4|F@3V!>AYM^55qW4UjtCbW8k?b z9m^2wkNFdJ1saXT(nI6L$OZ7$%NB6|fl-CUQp)TZmjBgZp~~#4>HhIJwr&0C%h+U3 zvoqQi%DL<5{5xCjCw)+l!PRmu<&`P4o}5*SGs7?gDR}^;xYG4+zzl51OB{>ux~~j$ zdF-SmT#h;08Y^@hISvf zL3y@BuPUo3#_39S7VnHQ4vI>_Nx^ao2i$ITx^93I&hYOCK6d1@I?^>-Y9({o$gJ!C zmiyNmmgbc7#b+z?v)-5$_7;vA3-tB?sy6_ccjGN!78vd^UNZeu-lKWnP4k#(!FD^F zU^%r$y2&});7x4>9wpy%z+o}{Gla)VrO~MsoXX{Gr&7o;u3^^zH2ls?7pRY|+xn`q zYihJ?OK$D_3NA(E3+89KWONw{%->2~lcI^RTd=M~0Ckcj=SBTlqx>&hwsoGyX1&)f za!i+uVNmTG8!R;EG;yIB&eMl>`sMUHqvtE|p{9j3YP@D<=-kKP$jEkn*xbV~z36WM zLJ$ZzeDR*?N^SAkUEv+U{Lh@z{l}u)$ZRgneHYCZY@*|Rn%wN^r!LaPD~=h%3_@!+ zAPGyF$(ZV!WFy#Ud2*+Zn}`7!bRjPr8)3WISr5Qv`!cL;uw;=s51{R3yt@b1CbQ32 zWS9X6J4@B%J=8EaQOC7pQ>L7;{!E$#_eVDDlwqA2mhtNzHy*BfrY}y-y%+QfTraIP z*ix8wYi=@T*38Tvn0W_5m!^uP*X~GrWyFn<6 zZLI)+0t9sQ0P1)D-YJ=~{Vzpzj=E@iH(Jk}q3jrDBu;D=*eA~JES(Y7mixtl06+}m z2zA>$nHiYV48bF=G7Z6W7iTFGm5bBxrBh`c>ZNxH0DxTc0NOItzxetD02;r=%!O83 z7GXC%KL@mg@!JjD@qTx$I_6>OU;*n;uN_mlQ4!fdwia0qoim`rtZOR+y7j(vNby=0 zr(FO6=)`zIcwNV zxdF(Eu368Zxa%&?p}TIkB>%l?wc~Duj^)3s4anxxM|bPJnSEM5#86UZgi4$ag2`hx zIi)eE_Du({^5r&hYv&6U{+rx?^VMJxXWcWY;hojzTURL<`o@= z*(PJ-s4@GduVQ6!O2Nj$sQQi&0Rcqv`%#pAFy^ltr@H0(?9XqG>9p)U_X1oawnS(t z1D`vh*ng$E`=-#rDH+JJE@}gqWix{ z0eGH=&Z(bko;AaG2PJGlI^;>M*Z0pUqwtdQ? zvLBo^TlF|9lvB_9bi9?VXHE3S*n3=Kfgi|R>p!BBw!i2r{VV%goKj$IZ;i2mi*)W5~|TW5CJ9#c2fP;WjXa zp9}QqXLSs}R0pyDyOXj&?Cp*09AMT~_V5FM@4q|1z}oH)4uJkB&Emv=#i_9k&C3MgM$q}D=XBA1!m&_WwEw1VYM=Hwuf398rie{EN}m#yaT*E ztAiZ`W@Th3YGGn+2XipBgh3UI3}KM8pQc#-Vv4nu6WmWDL%7ZPKb@riLFEsfG=jZ^kZeKUPVA z+CU7Yug>|)2ekgvRJtFgvO_KYzCEB85SZmJtpTdLvNYQaW(7CT3ThSlj8t ztcZ&<%+JpoxKs51^#ylvxk{jK^z?Ij9e7# zjVz3*egF|Hjre{nDY1b`~y-zd6s3rv7V*U+VZ7n{Y%w z8zEdVgONGDFKFCAP)3wp zpFhkqa-Wbch~9Z;fPYs2jEQoS(O=sC5EBH#KnB3FY{Xzf6hw6-L=2qAMh4td3nB;=Q4B!RAa!YFRL1t)K>C8W zpP%XE{&IaFgGz8HTa05&p5dk#8~BD?7FYCA#2m}kczi|y2yFvlEJzi8$pT-0$m~@fB`W1)fyENAsF8WPn+D_c;NNod(mf}i5TvBpY7%3O2G;! zH<(aB$jGQ55RxcZ7%cdgbuh@E?PvGq1YvRbg&{njELn}r44@EJ8%F~R7}VLwfEAv> z4vzM$)=+yJFzMC#Xpr#1cz>w}5$V@&)W7V;Lc&MFYkz{va{n$@x}|}H0*5%V!CKT2 z86~BR{ruV`IaZU*y&=)+Dww2eCH{3C7DOf?wD3Yr+JIZ8y zW){`GU=*SkbPt^?+9HD2#>R*_%cy#zC3S#h^Ih#bK}ob)eWW{kbn&+~;~!>Kh~8j0 zXAKmI{K#^SHwbmkH8sH|1hs1+d4c_q+~ApG@H2B@XRn$&gOvUF$=>Ss`(4rxokzX; z8**UbzXUKM28yb+wZnguE^KVAY=gE^4I{_ z4}^wr6#}2|Z#U&Ae~RtwHa`l>-2QBKViyxQip+5uyymxK-aQUFy+bToQwlB`U_M80kn>ru12m{n(?n6#IUj&4B=~b2ETpNF8vBYYxM^AVi9YW z;Hh`irgL%Kk{j<49@#?zWz*SXlUxFs{d$G=(}Rz`X(@)%vzj;Dbo1RrPyPM*L1`P= zcGDE;Q;ly`xROHNcj>NKy`8&*xhR2x_MRa}`we)7P7wV!3HXP- z!Bv;}YXXA&f7=Z34j9o70R%Ym`nwU}h;2RgKzU!|JS7nNq8;{mUR0YSG?6CN_F%hX$a>Jir;17#9!%G>rKZ*`yTp+;2{=K&E*)xAEnV1BZyg3Qfj1?H%>D?;gtFG-27a4^t6tavtb!slN;|eTyE5LFmjw7{V@ZX)HNx z6agqozjX-p4Y#!wioJyB71W6@9_A~friIn`tw&jlu2{TH3_&H?BadmOnbrH)ikVe_ zuwE5a2xB~2W8&sD7jE>S%n~F$rO^X>Wg&ivRgq# z0#CA*_#DnqSgff&)0{?f3Bt^02kN6cIm_;ccB_@-} zH|WOS_Ew*Io}MTYYa09=b~#^ClMq#PDJ$owXMca=VY~4s2%YVkaxT@tJr!=>(0q;X zY?qsNr_^^G)HsgsEP``naOJDsQk4|vU1SY@Z6Ey1Q~4lhRH*b_w~V#CMVqwy>aI%I z*N~9`51b#++?`)3wBX|2MJ=V zabHe3SH4WveP~cI@_Vz=@d9Csr}BD?PaP?tTPCE((TKz zHjJS_ylEj;CcRz*cQqybT4+b{gGE{-2%Y;495w*3fA(|o%Ria<#>EaXGGa62Vg?&Q z_?S7l!0gNr2sbY?8yA;>p^=dRl#hc4?x~>5&+7iwnQvT6KM#&xoif= z;dUZ}etfQczWRU=5aGt5-nfZ|4lhuC3qSxNA|fCmA|oRq!S{N?_X9{c$hYsYiK5`D zKu{@d@z{MM(r!?R6@R*;+P6i`VPNNX6Ahn$kcgOumX4l*k&}y?hnJ6E{Go)Tl(dYj z+9P$1$C_H&P(veQ6H}O(y@R8Zvx}?Sv*$1T0|JABBconN$GnM+i%-wU%*xJro10fs zT2@|B`Jt-1v8nlUOY4`m_Wpsvq2ZCyvGLh&bMxO97MGS+ws&^-_74t^j!&-q0s-)s z{C|G_&@Xs%fDqtwXOK{@`~o33UpbD0gnW+;<+i8_D#R9-lHK)X$@u!fkj|7T|xLxcW#(eN)g&gsM8qYM&32JnF2E|>wD zzuEHp{eQGZfrf|7?d?(K+#BYi}hMs6*rL|BmaG|1c zVijTg68Hu&hus$(EBs`?*CL#RPtIdoso_OdL-&P8R?%RP!8ci&FdCi3vS;LPY@yWrg3JjjYkv79}6$7$~Fc{=Oc$go^_ z*LEOTa3#0zyJd%}nZ|;Qlz8AU7kaI%<_0S@hi*#(M(AOZlt^n8Sx!oSg^J2(TU&<) zyMW1uW4x!)lN>ElW@$H(Yh(w&r+on1@#3*6C~~4kKH|>ev&zXm6dz{hTq%gnDlr9e zf^g2T52JjGT7n_N4c=Yy$gi?Mg2IQGmKoVng^fFY{$v3Z^UC{3Yr0jX{aji^smwXL zl@vVSs7s*a5@6I$FEinLtEH={OK6orKNqpoG)VT%ms2AZA@*-`@_)_tD#0oEy#u@m zs%xfM(i%c?cs!)UmilwaMCN#Lapl&E4N z>7ddkInlOwWS}T*#)Ra7!Tu!>z*R(BUx-aw@}VN~X{A7)5)o;r6G>p@ozJ!99pjUM zSuc)d9>_+yRqFMBzF!O_`zx!Cd`o4SAiTnD*MTL6$Dl79&WA_v}#Iu$~<& zBi*E^s_FW~j7HiiT<1xT4~2 zm>{ULqQ8RV=d#mmtu&I)j5}LAy*rN%Kg%(gr*%Bhku!0m`M6r4**%O0!UX>}`d6+8 zT^lc1awmefS4ub@S#zbd$m*w^3?Y{mZ_Tkz+`(yfMb( zjFQ>Wn=B@&@$GzifQm}E{@LUPgAmO8n7G>tJ%-=Q1W|CR$=W1R0l0>f zlNHrGnF2w9|I^vCOMp4+Y0wew$X1vAaEnStW^#@?39{SDR#;MZkK&QQ+b`TJmBYD2 z%kvx@3}=r~mrq8J<)_IZ9Q|35N*7OLJnCm(O3ie(481wk!ffZ+m~0XIum?G#o5bDQ z4_|lm4iKA`+Nk$dV;6oNKNMCHL?5=P@ai>3!wjbu;bVFmMXZ~M4-j<<`V%u8Gx(BK zG;m9Y1xJoat)6Xt)EQmw%H^cp7*y;cJkE#|y98>e50z1*H;+eXblZ0#{ky+zDX#Eo ztAq=!Tms(W{NB$pVXGv>k!@~^ho$YAjMxXtj&y@5P5m*Jo93i9Tp7QYM1R$|1SBpj zdOjR6dlIvbmb<&&C5fXlT$~^(q)L=pf7tFyQrFpu37vft#QEWgaWMMZ!P_2jH+fHP z2{W$b#Pz;iugvXuOy4Z3r*%T2nba^ViCXTQtR+~!E6(^OPD<@nyPFDRa(cv~r9N9C zS2M46QrzN8Kn%H({`T7mait(V5Bf{@0hm3SBNZGQ_-XLM)lnUjjnK^Ga0OMRs=HWCv`7O<1|F6 zefn+F*Wxu#7<)#QT+8rHqk_`r8t4ao9_zFXVIgng*N>v(dWLTQDZSip?>MBf9}PQJ z6pcXjT8y*#I!mq-mdA zz6ZZMp|pPS3bQ>2SrAb`?%AX8mJHZreK7tmp9ki5$eHeNwp6JH^$SiVtVy%@gg|EM zSJDMvC!g?m(FsSp@Fg6SNAsHX?N!NphLNe8qx;ptH}QUgvv0i%a&J-`L01LT3uPw#EugWf;Sj)-S-zYO5DyB}1GB zZ=AM_HE_;8_lD)KhRe=&n6)_unH*FOBzntTtrS`UVE8wB7qMZhMkqwwV!F6gbR4?Rpf#O@N*`KUu>>Qju#( zmO^=V6Wi=S<%^CzVbl(a*3JcE@FnyX96wXC7_Acba4zuM(=W_x^9%#0$ zKHrG=Qh7xV`L=jdQ**ptbmAKYYdrhou5upy##g9Mgtp&(q@@~_X=6$pO=KN5NS}&) z;I7uYCwI5a;ry=LpyRq2GOKOSjW7U}CKwd%<>NL|Ea?)w8drX2$z?PUV$%~r$KbYn zL|92syfl(Np|hpSy@QMeiFVGvm}I+1!CHn3e$DJ$JL5?^ zqHED8!Q`KwQ>qOymVVe=avIv~CwK`&yYAVH4qN!G+jz$tf3W;~sZE^x-KBtL$mK&{{t+yTo_XoD=gYK7Q zRz$?JGLNFHWENAC+xBPV<|tqg8~oX~ULeeSWcgb>jXd$S-@6MJ&yyQTCMpPQm0jJ|{w6)oSjjbbNfADt08d9Z&HnYnrzQOj; zRu0EMvCy2h9>{&}qWg%-eJbZDdG764m#wGG7j@Uhn1egJBhn{nLjD;x^9G)uC%IC$aULdLP$Fv8SeIl!qra8)?SLbgw*qQ1eacg@<{O*-HZx z;&-7C>iV&+1!@SDQ#aUVtU=j6Igv#DV`KQP7lum5%7o^`LRd;eJys#7687>4&uye_ z)FjsN=N?6`J~_20iHTG2T>`M`5n2uc*+Lf0l?}(I@5@bx?PG$61@=PL8^e%YH3T)< zwUZ(~2AI{g5zxpG5glfi5j$~t2xhtHOKvf51{7+zWYtx~+)Ws`#V$u3sGdnDXeV>9 z{A8!obbLHxkxWZJAwkk(|64tx%hzV&w(4OM1;u&#=X!#TJ1-knpM{-s^c1qLqv>_U z=&7X(V!@M)*aLqWJ4N)vDNAW)3uRr^PMuuygOWME2a%u$Gp87kz)t$^gdF3p_hUw8 zj_OYg!?Ni=mUymywpy%(e!2uq0hB68Se?!#!1m-qWlQ?Fb9XKvgKEp9v8~*a`>V=e z(Tk62sgd*<3Tuyc&~Y11?A3!hhZsJHK56_k|E`=%HM7t&%=ueofJrac7sLYNY14W~ zM%#L8RH|YkvX9XC<;HI@v^+W)QKWt`x6N1|9hl(incVp8pvRxlm4Y%+d%t38HfWrqPN?X?@CwCHtv!xJfI*w9j*Y| z59YX&zo9F&SKZ@$Rwc8H|In@9qMu$x*_7)oVxt$^Xh*)wqU1p8C7@;V;JqjNQO|71 zNNr4)S{h$nK#y_Rl&%E7?dpYzW6_jn?5FH84k>GM;%vM*UPQz#!XkF2xGKT1y_@tj zcS`t_LW}Q)151^WyX?BpC*5WvN-u%b;Pv*Yd|9UA`9-rmD64Sq*7#v~?4OwrV*;vFaT1BWhr;SMU*@9LnI~<~d(ej{D_3QUGmfv=6b#Tb9otbq z2Sk_niR&Ksc4eeLQ$u>=nYJ zdR1p~Debi+c|3{PF0S+IH`I3Pr!E03mly6PT`zun*ZX%PdjCOit0MM!AswY2Ik)ub zblxl*JQ$Zo-Kw&VsOJdJAfD}{ch`QbQ>eIBS6`BEQrde$2vdQbbXMYTtYlRZ22Ay6 zA6Ie@#U0=rrdzBao-+wgE1PMvXYUn1iEze4Gpvvj%*5TjFWXAk5zf5o$?{%}Jy`7%42PXd$unk{DS6Eh80?Fqa5llp2AZKU_BErMxl& z)?DDXI36(PZrzU5e%o0Wj5(BHgSjrYc;&YK6J6KOQeSkDZ_qDRf0rn?)Y=XIEPOjB z=;LF~gRTT7#~tRL!`HYmXEJol!6&+Rupu&ZHIqk^t$4*;i5Vq*B%V$r|Aj%rBihJm zmxUMYa(7WBNgq9XB_Su1&z3z!)uq_|rs*qeB!S=oVZZEVWF zS?X5Rw?cajsjxd!OnI#NBxsAWi|XxG*x=WG8PE}m+FG%qF-lyR9v!A9CK(#NLuVINL* zgS*NLgC(A+3Pf*y-zlUP{4y?-9k1=X(9~M35&o^FmPgGgm?jiRL})K+qwwvKeBznk zt4SPfn)m87On9B~k$JT`r?&Zm(V4_iS`H?@J2v*05gs0u*v?ZTRjvoO*+F#g*jm2_ zkKBBtl%$wfA|)iile0ESFHkvBJhQ)%!p_Y0rzeau00aDd1al5tx9{6lq|KUFqE%i3 zb!BupiKt9RKAGM%n@==MMB5nivlk1azv0oWeIJ32?diR7K9qC3E#rvC2+>0EQb`)^ z@t6~S;Zpr}$rGu}>=gMTj4&aI$1-bX@epbzTncKP8;(qoF%zu7m94uND07H%;CQFf zn0QO{(>YA`K>;Bt7Cs-$m~QgfIm7PzD#426iU7ABmcGH;Y%=Y$b}kzf5eL+Lr6(vz zea4g)s-O@CjJc22MW3>k2c~50@ql#|_{b9Zd-BEMYVe+()>}%Z;ZQWI%xZG*SKSVG zXThN+t9TQZ#lfiflP?ltj7)|ej}}&Bx^+qxgKtUR$A$l^KIuz9I1~fpo-}ec_+NMk z@oyHvq`0MwT*#|;cS#{2mLE*XAXg0o zo^CdG(Cegv6#+xXC#?~!O35t{GP1||=t6HmFHbs2Xtt?_X%N_tXISjaI|c9LeukBP z;W`~G^^*(2s5zh$jV9_K19}Rr=3LU+JM1&@MHMw%Zquu>|t|hf{q87G|Fxg_qSvr>P)_9h{m)01zyu`i& zbH=9yO-J5M({&x>ewv!1)9V`^lKAx%ucK?R49+IYCsQoHF6K6&&V-xoVwKba@Z6w4 zd-@+-GXAIADOH3a{}g9$+71Ed*M}4~LOH2vW&Tm_qzYvWS;zxx?d9{$G@lzTNcPqD zS_{nsGFOK}1WK459VlBDkDRge6JG+YDpDBwHR5r)P7)Nm$I$J<4_PWN@al&4_AUw> zY!=HFU)Ocj<1R5PqE;JAI{8ls3$T8*KOfpV6n<0riHTWjf7=rWNk}3SW@!wP znmm6RuTW*yp|YY;Gi14*4gL`K9UzTp-0&6^%V97JaHyo$Gq02(GPk5s@o*cjKSJwM zsar=+rW3TC|F>SxHL3gvdi zQg_&g_TwfmZn&k~d($%6DU%-148F0zME3S&;P)jOvd~R^;o=omm+wUuEEclpZ?(a5 zj8p0X#Y?c@VJ2me{Ga(G8lKZ!d-Yf=+CeBxPGMB=9);%k@g-1n^r$LR`9|n% zGf##=t5b1uH0=80Ge&C$%QOYayDJ^eCuK3i1~-N%;#yDM`s3f(y98V=UJv51SbfIE zl2};rNsdUfZq3=}TAv?0E+*+ozXW_-KOB!I)uc#zkoQx)?=`A3L@=)++-Ti;cENY{ z!o$k@rAwm4exCqq!~xM0QsqXqaE*88`uotF+QjzxBHmdE7lp}#dt{Fu`2i(yBpa`` zqb5ex^+hXt%XR`Y?r-3r+S$;Lr19gt{2-t!bqRO|Ye0(^>+eujz$~oN9XKkMzM}FW zMjYE8k2vAfaCUndX+n_f^6>?TX4N z))&QR^h4NE#lE>q+Wv{H-Ic~6-W}2xMrWs9oVvutZ{$V)l)KDZYJ^LD^EMIr0?7z( z+c-f3%R=b&HRFdymXv}CZ_aAGxDxVWT8cBL7o{uQ2>g94{mhHMeBG@-VwS39|4PF_ zuD*@={X#|Oi_ay1K&CW!SV*Ptuti-rxFTmw89iHNk++%R;1aMtV;sAY+Nl*}AoC#7 zy%**1xf;7}W$vSk`r+EMY}rt>@)V^$-Q8jvM{~8z>iVwHlQ;4KYh)w?>&5=JQX!im zDT5>5%MHKNj-5#GX73T3Q$dy=1wykVBH1GuOUUw?CJf6p+*GI1Lo1=Kq-o7%B~CHGaS z+K3{-cI{Z~^q`%oyH)X$kPinfU_oFH{;Uzl;=J3lM^q$S@rY^mQ?8jYvrHeQ{$4l} zoktRiV1WE^T%m;|BI~0;i#$PnOYY-@?|5&&*;-{d+h}{Id^tQ9Q;&RlYo5M!P9LeK zJO@7}%M6{&KNsiTLL7?WxT4nd@WIB|XiQ^U6}$JC#f&GL`a1mQzf~)9LE8iVOxxAR zIDz*^)c$L))xf%DMh^y;lWBfUHaDpxrp=9ul4Lw>(zn~L0u?+nJ-CzHz&GQ2nDP$(t` zb47e@y~zp{bH>%6SG)DEg}^_04h|YR(n9tR_srutS-b=!pN%HVTmnMTw+}PZbv;L` z?(8i;Cw{Gp+egznn1*;f)TT%DdF)lZ0kJ9Q#f3p04;P@6y{x7`bt6@z+f{f|{j`zgr-C0IVmg71>POiTouiBx0ZvT>7NVQ@< z^89^q$;r9uU7eptuN`;(Ax zAR9U^ml(G6=ISK?H2JH?b46gO`%8Ex8s?B0dL*WQTWgM2!BC(&A0p!7GGnx{cc%!^ zjSuECGLD{)yVwhj(!ZmTk;}tp)#HVu5-hC&gb;U@+>DgBX)a`A+iK23G_l=Jy{{k* z5%G(?)3$5ay2ZLG`KgM%SQRZ1r#EcS-(r<$&^3RW?L zrpVoSsu!04?z$S^+w@sfp0t{`X58cQn9vMpr|_!Dip+sfeS1lW?tVmOcG^b60#W8J zQeJD9#x&u{hyq`=ood+9V&bC#`Bl!-^4fBlH-0XVCG&OgP_&y_`UB#!DL&rP4_iDz zcNJo_bt_MpQeLOb2+!)XHOCPQ&+QlR9}cfpUjkf5DN?UYm@tNkYYxeJ;G<`BM`Q^? zX&AN{k{*psyr?W9x_U&`HgT3%7&DuC%*N?S5_8=M^Isevc%zqFd< zxFs&LhN>*Ay%h3@%RRPRQJadc*^PhHG*b6Y7#+*oJpLVT#psQ#@A-4DwX0=Hn|l&6 z{452y`{55J$hX-Nu{RCsYH-iA$Z4czB$C+I3yr{C&4!o2SGqGM3odUX7MV2@?UXXz zzDe&utCHKp934+9_wM*x2bDa6!k;~e&g7bRw*yZBezfDc!P`FgK9oJ1TeYau*_7HS z%=d6~g$5f=yFRmlB}P-x(C}XoyJ60h*Q?NhLXc;ZdAc2~=LvI^$afRD$udg~a4s)?S!@;{*{F5;2^OTIDXtR$TMaUN^bJN-2k$9aq{PA|J&;+jBz}Fy}==m6q81d6L@P8@~ z+Aop=g}{e%YvVeCQuCPh`B8?XqGAU(sY3ROGF)DmH}9N>RVUPuZ_l4NB~cS>-_3a_ zBxi`2{HeBH`}jd?z-&HPgCUQ&ZkIhJRaPZ{&$XmXB)sY0tpimbVA($z<# zbXj(y-u3dUz0X1%hSe8BP^ABHw^%c8G{36t#NjktcdID4?28At6-$Q!Hk zBfN(i0~qV(4}}+lPeN)?1KM*xs2pY=dR_uEuH*vYEsr}*x*ksjk9q4U%JL>e!2>k{^!#cKaBlqEA)rgRL zI7XDuL78Ywd$xp_wKe>lx>V;}=a5^P2bd%vpFLY;7#xWaNKnhk;jF;bA0a;Sj34qy zz?)UZuxc%;EWZ`NQe>-`!~GJ9G3;-kj6nR9!;OvU1Mad25_@fN3wqP?lvniBi>gpnZq#a9krb*dmnmbo zvv=oQkxEN`@EA_3HBCPdEK!}vi0He|Ij5+uk#b}5HCateVZocHP@kMcwCQMM^HRPc zXBKMdXYn@Nt_gm*Xxg%{;kxIZh}^6A4R(6YoY_ za~JAtlhbK3!P!XUtMJ=z!FTiLb1nfnl zbT3Bj)CaxGgio3;UL&x*CHznOe5X`Vk%rq?qMuT4YJ5{)rt*5wi%(ZENaJr95y{|} zxE5iTvw}kJ=GQwo^ikb2&w_yIc1sdf$gQgV6*DSi(%{6&LynfLRe}pa4Ux_DJDWK0 zF}b(EMW52~f;T^4{xw$;M0lHR*oW}YHrB7e1rkE+d?!e_43~VR+pEl9#Og7u(W5mt zeHLo)Ro@?-%a_7C+G&w$x5z2RQZbrFL1HPK--V&u$}+5M8$(&Az!;UAHp2v-<0lEfHTG~^m&Y9^h}sNY`#Js(qI^R(uLBVL{g>2-Qa zDHAwbvh)-9ptzxJZ^xz-3^_6zIxA`38)$h2|e*#_yBoe|l9{`p0{VKELgl|K?%PUxtpC`X4^BK>5G>UOVUS zU#V00atr{F7kp#>q&&pvDE`}Gv|e=92XTXrr&zZgK_Xa|F4w_mFs-|P(P2$h#PEZz+=eF&Tar<<}_q8 zV&;Xy=b>^yxjA?^!Mt2h9(V%%KCgd-pV0rVwSFTJ_fuz1adP=pTxb~Lr|*(qgkq@b ztYppS=IxR_hqBZ9^@@zGtbU)P8UKaU{ClJ1$L`ns4xz&DOD16w0BjOEs%T zD_^pg-L^r13p4(lJo}5f9_MeU{9#i3TK+eaZGQqVHw(i-_fkvAaEP#9sJp1H;tO#$ z_h)2gdz*YQ(Wlb{@3K38_VT|>|NX;W{;#rtSF=77uDbYNbu4|;e~L$%|FF#(u1;rU zXa?`{;mVZ`Mt1h~=6}6Lz||ms5N7^o9{u$Y_+{m%D-^BNFN*Kfk^8=8<&1tp@TU72 zW17VI#fyOmgtd<;qUG=*HK6dPFaN4srRS9^|Fc|WUeTW?S1Egi?=K&O`k%)BYl4*s zudZy(`NM?cG&ba8GvqU5=7X}sXL|E;vNQ75Do)gF0j%6Ey2ovW!CvG z*M(m%n|~l!`TV~h`v1jH{H5xDUu}~B>#RPkxfU;8 zwDI=Dqd+Sf+UmaC)3Kr@KC?N|-omhEScBL}tv(SLBy%5`X0lnS`QF@Pj5^$&bfi+`Nb#(LFHI+vN?^EY?$%w$-qq7rbI_11(!tl{29x%Z^Bckr8nx%< z_wL;@Ht4E8H_V2FuXCi6W`A_e?iW>32jiY#A%FbbJ#7*gXPT9k0A2{PORPh0Aft5* z74&7nIj{#}Sy~UZK3&L>UCw33x1o|gz9hs=>Xt6k*o%Wsz9 zI(TgM*_Lh9bxb-h&FziI#5QIa&pZb^;W8ff^r34eJt>tR+F(~_vd3bZM&QNGHseW7 zj^?XFJX?}WPS)_-eHwqrqZ_D1nv&)`Yhm&EqPjxOy%%NpEHEp85 zHq-X^;=H718qyWl&D`zi{hHOiXjLo!oAZsik8hyK&#|?+ zO*@B^({?Y}NC|U3@I@)m#_!CTKb4cRa9bP^>n8yC4c8ZU@0=_T+eQ9@p7!c+R1Z>WD4;4^ES7d!(6tw57WTz8r$zNFjJ`^g(8ie9HmASbU~cmE0K z*2vg&Q}-DPg8aRQ-T?6Qq^tY$lFd*ScA00u{ij_eQYP+~cVa80joD^0=A6bi$rC*Q}75oF<;U^C0OSowcQC6-a9oO>EOcf7`YbsYaCNi%nr4^0sb9VghgU_^6{pp3D!HU`=58@Bqx93O6lHzzPr%8k!>@<{nV6G{y<(c zE+kh_iLA2jQJCj$Uv-kl%cQdj&U4gdhIg}Ld}jQpJ{r>yZu3dH#E63xt~?HBr-Sfk z0>@1|liXa1;)@&^cL6|gx>zx$GvgUKF5CHGv7REtqm5{TgQP6S0YNYymp+fn7MIVj zyXB~;B97PWz#`H2)(ieE$+nQPCbr0F4Z^bplK3wb9iufPu2yEe0q>g-frhrx)8K)r zWzzbI;X?=A!N41pk8mAQLy~J1wwU?$(v2Cz#y0Oucz3VeTj}d%UX{xhGBoQLvnXLP z@j}Elv~ebKEZCT^a?dnP@0#@>=0g4Yh=xpYs2$$)vmr!?@!TAq6Bw<*QimDYy$oaq zQt*FzWSlOn<{py}(#Pdv*n9|_#y*wBJ9yxu)hCEcNhu0PIWSl7wM#dYs{PrK4_ zlRr$a*xDD0LXbT>^}zJ|nu-$NiCLn^Lt|p%GkUB^Swv8(mNf|Q;n*-_34j~gipfJ3 zz#)Fe()jbuwcyfe?+Knj6gAjP7hg68#Ts0Xxz#Y+9UEQ{ywuwVnsn+*TS$rPc1q|j zCpOX;t`KNLA7Tur0UW$^aDkblSrT-c?xfXZrUr+*_5K?(Di4e?ZUkJ?a|l-3R17=$ z?IiCu`6B1C)Ek_eT4o6ei?#w`gD>uz!&|dmXr@2yDfF9{n;x$`pERB^h zXQcMoc9bUhrZx}jfR~^&^?=)y2PfW9m$P`or~ohnw(0WYuwLpMTbe;ge77C`DQ!-< z#T!4&8Q^_>ZxOTTu;;BH3IK4RzPSfa3kaR-@+Tv#?ot&fqpdDU%Tt`CXBAZAq;M+6 zePrZ$DZ^_Os3-JTG9X}4^l*!-gcnRycR#dOH0M351LfM1 zVc1M3Zh_nz1ClX35N)s^mtQByay}&s=Qgoi)jDG#5RHZH?3v}eiAsJGFu8kpfeL^J zHIwjJ-Kir3;kR2eBx99d?SsERZVkEsL@GT^o}|D&C?Wc^nPP)*n|-e8kiR=TLiA)k zAV6@*@I=PsR0toy0v*BtFwrxK)I-PAHgtGBKz2XK?*W|_?J_g|}^Y(thn=C-UaC|Ke z{R+L+N(yv>B?jHen)dwQC2jDx8b+q;Lw45?c~30w@k4+C;2s&kTRM3QOuNFk5fViP zFO^7Ii|ZLm4(01J#Sjy|I_%>Pv52^z&{80Lr6Gj>vsLGe9QiPH2#cuJSS4{l0U3=;T@_^6R{(?!%FM;L$gp&LluqL zWvhcAu?Y$Mh*&pwB?Li-^rd0~?ijXHxd&-V``baJ4L4&WPbo+?0h=3RL>Q$$aJCIq zjvnMWDK@lRs=fd%x)d(Z$w_o_?#u3Tb!OwSSp)Wfka_75_%$oakD3A)ZF*9Rg>4}d2kU^9vJ2I=|WJ%A9cj~pPBt**oJ1#ZE2Btkey#fdJ- zuo1g}?t9ODftjZ*3<#meGjJoGX5Z}VbTp}^3))2A*m@su)#htPn?UbYV;}r0pteRR zRKwq=RpH;QQ-5fEwduh3M|0U6gb-2kwMn<*y}J!`@+Vi#O9H$S?npi#4xh8T7=NmQ zCkSBN%;2Qc;t3nv2Kh97@+1O6vRHxV_V6475{aV1a!B50ILu%#Y|97%B*cmo!25a? zE*}&n@*`=qtE0a#IO@5KhCg#m3=q*r2f`2*ZvmrH&M3+?0ql8;>^C6B@KW%eQY}D- z0~igUJS>n-f!Xv24Qs>@=Nd@0}b@2 z$>g`_5PXUqkbP*K`fpLnqoV*ENG41^9N__b_SBaHhDr$H0*_AjN^BNU0QZTx`@Xn0 zfDm(4E+3m|kk6POLj%wq-Y0cvyQh!k!6HhB2DI?mlF(LT0KHuu7lKQ<;*u9|e*iEt z{A#t)3VnH8p&yJ|BOQ4egGz=8EKa^sYw_7Y4cT>p`%KoCrbv39`rT%~m)&FQ?5X@^ z_ZvXNqoy&m8F~AFqaa5`|9YhMP>{%k3S}Q}DA3@WE1oQnxkw(82>6TzgyA)4(VPqa zAD+HCpsA?+{{jjqIl9q-bV@2IAq^7JA)S%}!YHLdL}G-LiUW}i95A{hr4ev+NH-!S zx!>h|-|z4I0lVkMIrlkFexB!SWUB-p`3V4SvSL<1nrH5y`%>o~Q4xUM6IkBR-q zY;Zb7fL+V=tnA4d^`tccmk-@h-w1(z!rZUGVBM>Y9$8z92Z_Q$ialJCTqfOd`Y+t&AE;(x$3cmG;%33%gw4x~%W52vV;1tKCJ zsow<1on2`2(fF9T=H!XBXtVn8*AT)SLMzn>!zcnufF+jZw2*a_w7TK5hlel!>FTguW z(X~GI(A&~`O+0Ln41$Q!PL5`x2tStz4aMPW;fvS^To~;A8541I@_yLFH)hTN+D`q9 z>5w&Fnh$TVvRSOP6>eUCRe`(j{ZV0Ps)6_zyh&Pvs9~2y92lFfV{}hv1X>SUT}c4K zo$;V4VS}nY_632qUpEG`_5)pWw*aSKDb9Gz{@Vrfer;b2*G`{9B6uSsA;4RwA7)W% zmw1C;^e^S+4$8r|Dc<;ocjwUivC`-@Il|%iC_|~{W8Pi zf23Fcb3ZWnO_4^0EjbeJpv<_|F&m@q+~!(YrhSwBbbs9|3975 z(@%Klo~^Rh6N@j(|MxOyc*BzN4AH{&gbV?({(#lw&1`uPK z|JyToTg49;lyU(6dqXQRF*9B+E%E;jbN$ugm+lbW@a8(a86mR$f5clrKKkDiTeD+m z*Z@U<_`gp(enm;ux~=?whoJiWzt0QX?~VSFr$zuyEclB5y%+$TEo}heM^^tkjHo1J z{NE`NLQYbk|Nf1L|D6H`rM(Udveb1wRsY+w@a)Xj_brZ`ye1wHBl*AED%aB=JJ{Y~ zX!T$s1%A6+8!k}OtJdZaM5MgKySA;M7V_&#Jh}tD0n{}SC`w!Wrw`E1(GPUvewt4d zm;joZJ%I8n?7#E?zbdLx4qq`2bZ>4gT`X~St!ZB0q1LX_9b^(a$kd8tBn9s75&*>{ zO}D@k5puc5U`Qi2;x5CHgZE8%ugU}zum_et*N=N!CVVzJ__d4Z0(kf6|7bMG971|) zjlAd;Q3P+y)_w3YMFq|ypw;#ca03`6480E6BAPU=Y|gt4Ung$?McCHglk`AaC_RuX zk{bY?1>0L@4gz98mtJ1-nlGirzjwQ;MPMT<-_Bkd2Mk4n-b1dC<%{b%aFJUf_dlW* z1QyHo{_a75|M77H7c5W0R-woE{G`Xcv_&WfHMT$l%?{eFY3=ws(ek z7hR9TAY$F^w(U^xQE%s*5O_-)sI%7@*}X8V?DNBF#nJZQ0}<%W>x;9gdGq;* z&w$)F-|e3-|Kx7Jl9T~C#QXTJ_qF(mJhCEqbiD1n!`#MrxlJ&Wg5L@uWie|f$26tw zJ8=?x32kQdzyJL?M{7`Q86m*(V>pfQj2iHE`qP?xU-sU!4r)Ri-(|}kXs$G#Zda|8 z%uZoQF6oDomdLi#n+tE!%0P|V?O+tUM!X^n8j>I1orW0KkgyS{p;i{Khut7>5>ZnAk+pF<8jOFd>5{dwLU+HJzJ ze38^39I?+T_)PTW`fjL5-y3qg!jN`{7P|IR(3Ch$-%1yke-}yfdR^?_0(Fx%hwKeN zq)5&a%|*|PFTKb0^JM+)Khm7@rXgv(53V~@N$4PO{hfbwa7!qRslIq!Dq?*1LvstO zVa>94%|q~v%Dm;z9g1n6%A4M#Tn`OOtV-O++%?vGh!;)P;GDX@QP2<$I?6656UB`av_6?R^7nnr8ZOteX2^<< z&HN?5%NPk8GKI;LNko7~CFDVyqn9R!ymC@ycGJQ4#-rJ8uJ)s2ixe1|VJ-N8RwkY){ zSNOnSt*D-FDz0YSz`N}R!zN86#iiQHBe4iB2$mIdO3VmKy*4GqRvLx1oAc^o!&+m} zxq?ZTZs2Cl22w6oPF@Z_!ta@r&~0GtdsHE(m<-uPR!kM`qV_e_w&nEq9@NiZ*2*TA z%5&wG|Jdg4u5d7b?tkYiVY*`Jm$iXK72B`~F^@Lbzq>IJ7?^(S!|jvcksg*NX*H0y z%+TEu&#Q$3scYdA4T8r^^&)?Mh}w8wbm9ZK-_jb<57DD{C_)HCsEfXoia0VVa_{@B zoSv!EfXnh-+Am2j*8XfJ5Z`1KUA_lwZiQoA^_$1L^jHdVuIy$HQ6$ni^BR<*LPUX<;l!@k84i-M%DG}~I$ zZ4~$m{=_wrA0p=5ar(i2Pv@YPJASK6tbFOS zdgX|CnE`^YG6Xy}6!K5he!qMi=U8y1v)rz72m=}ZMP4QUPvn~iS+`-!GOYDH(w@J7 zXI~=o^Yj)RUYFi%jb~!O@2VOqu`THE$e;L9J=q6YWx;u2ny3c4i|xwo5e1HX;LXJMj3%P6Mc>Y+G&6`k$HSPu&y??Jt5hJ_X=qfT1#59@rz6cop z{VbDU-G!ZWiDIrJOEf}M=R)K`X7{WEp=chSEUGZTha1%9BFg00MCrExrP6(%*fSY_ z!_dDNPh_R&fR1%A;=5a%;Z55+ATp@d7@a#c%G-LwpI%q~^W+fl>DA~>^6-eJ56ToG z-)|Fr2hgFKQ`LQMUy~iFju+uA@Jt4I_QeOxi1bQ znf+?-yB;%;FTD>8mo$$~3;^T=YUH`f6FYe1c*^Y{q(fQ%v{Gs8bLPvxp|5?cA=wuI zOwojGkoG$USa9*a0SadS=XNI`Zx|8YPw_rR{zG{q^dUb0lXiQ6CTPxxETqz9JAN2( zm)tspRxAu;$o~9n9{kYSkfpT7k2fQHK!-+J9S_ireRJj0C`2CV}q3sJ?hfXozB2(4T`L!Y{lz0hO9U16(8#=bk%_a zOnK`^EJ?heV19$Aqukd2nSzj%h#(@K0q1bvm(T^6n7%=v$Q|-e$HMFO!m=%nNV>)Q zBKdxm%>9>{-iJjpmMv>WTt*6qU*9%?=qFyQhSECG!n?*>R^@v8#451_gLUyQ8uS(@ zyFT6qxNXPkoc5+~P6}gQE;{#66KAu8=0V2sBGM#Q&72<+jpO$NaCYh1W`h2*?Aoh= z4$Zb~@uY+1J+$t~FZ9k8#oOs;9PEMT?A>kL^5?t>;BY-tCl0SG$y$H2h7eEmhcHC- zD@vOb;eN2x2TSYzuFYE|=dyRmdxIBmy*ShM4Y~WZbS1 z9IiwW_NNL1*ZkD#xENqaz`D?aZ$ZzgfhHWRS$Tn;`{ zz*sMkWOHWcU8wtv88UmVru{cv^a|kew7J0U86}fd$7n^MehT$eua-8XpMg^5e|9SSqjR5_b%&0Ac{ox@DY537p=BJ$wYUnt$|Pkuh{>N z&U!!WJtQ@)?qz?k8ns~tv+S$2-6O^E;!<-_GoeF2 z(gLznqOvtO6Mr2(Hj##X5b?v^KcmMUm^j(lLFw*7HyUrJz41iuFWvyl0$$j-3~uux zyxg6s2T#F443{HDTM6E{2l({@3#8I>hQlvn!{REYcLOYo!$Y&PvkxxV7enfrmg?*C zrN4cjoR>alhnVqW&3o9tnnECsA3rp!vIsy$1foQGG>;7>THU_znxP{bpRa=?ZGEJJ zyLl=wAqGTc#1<;iQxblxVraEx`E#7}#qS&1j?PZ%o0g~r1X>O4S5XRB$lgv3G8Ij+ zqjTk6_=dqohtZ@_GN;|XMGc#>u(q^*UoL!Jn7<|= z@0FAC<1~NNMz&lwsbGhAC38H8XafvY-3Yvt5BAHyKaqA597Q~%m=Im4&HH{>pkMPd zv_vAWLZ&}qwnZD-WsWwE3qhHwxF5rhL-qJk7~cnvgsi$5a+s*QUESV5auSyD?ilpH z$6)zrMY-;MT0tNzOoU{Ex27;8r6$7Vr(yp#gyl~rlgi}XFXte(MTG}x3qqF9YMOQimC&Xo=_Iz4|C)eZFxM1$B^eSGx&c(?s%Ht+EgCe{MQdG`~ERv-IWbxrdct6rHv zKT)%D=dPrA%b%PUT&zv#_Y*l3t?1KLI&)MJe2#_VqrgPF02FGcF@?_m{@kde!$URQ zpg;ZQ*T0&N?W|(-hYpS#hy7A>#uaRL%hJwX$W|U=eTo+?pOI6w3q2&94&>qPNmi%5SV$VVyWMJ^XgI^K}^9$NHbPyPgBbD8Hn!2#7u z9k^43DH{)vs*yaynxW0DO&fzx7k?$X`@s!9T#Arlin9;Q)@Rf0R5CaG~eKmE^>dE!(4x-p!tF7Q38y2H4?hPB;T2LJ2sFo2A~;w=qgg zk>lL~LG7~h!i@dAvtN5iM&lbyofe>)C~B3z_cl9z!c>{_=6v|{&KCRmg2mkBn0@kG zeOG?LgtTtIQ_}|DKX2n_+y#w&UuET?oGQ>S;X_XDhb zXD^v}UvS3J z?xk1IXu-eV$&D+=zeJv(#yT`oneJjwWzB^u><{)T%)ZaqRQmRHqz@6UraHaB7}rZ$^a>+KKOMv{w9hM`G$oFqf4+qP=+D3`NM&Vm=Mz?MUs)O-xM9 z&CIxU>KFd<%|WL7_81sX5zJO}ZL{T9bw5GG?@=v<0}t@uS8C1Yp;9K9q}e?2pWesWK@fk> zdUtLV1Q5OE?onh&oLuo3>BZ@f90(BZmcM+^GX^Ur0~2|iPETi z!jfbB-drom_+n%$$L0*XWu6%4xXIVu@5#fM_G4smq+#w1+wC<^C92O-_aUMeYOvjv z>o~MYI<+Z8I&gY%xbxk1R~Vbnq0b5J*F@KUs|XG{!spdZ{S3kEDwwvMEPQ7^VZ&}> zcyuc6@xhOj8&+%fLVq@5V9enLGF^|_?~2JI>%AmxZbX6}z}My=fqgLl#qI1>t62u*CC}gqzck5c=LFG{c6_>_wPL4I=fUw!_O~JjTce1<~pR4 z;@N3_*B*(%-qa?1EFFJ*G5>Fw{%T(s7e>R~WsZWo4MDriS{*ajzZc1#-2R!FKaR{? z>)Q)H*hy|)>rpE&EA#r*@^AYfDI;hfPDG!vRyq)axfMUJdu4mq?mm_;6{Nwx98YWd z6sJ;EPKS7nDy;PfxPj;5DW^snr^d*bsg!Vb?em|SLFO=X*wm;w?~ZXADo56O=FWYz zSxDTpu&3$|26t_xTVnjieIz9OiHXT_z76K(a;EbycaC5blGqyer}P*4nvP^+65<|S zp{|1V^8bc)i)vX(DmzsN0k>Q)xX^qq! znrO5W;{Hi-^NF&;Mf}MCZ98WYwx*`7m8AW(v1M|q6t-quD$rcxli9!kJY!8Wk!0o0 z9|I28_wNR7uhn|o**S%uMt8gyAw`<53bYhmR^(DhxpzlZZzb7WHkDuOip~EUp7s(J zC_gigmPeGFUSt+jx-z*8CK5XeJG|K!Z#fY3Y7Y3VWM^Pc3gNYzKS*Efm^ey8C86?A zvu;h3Zwfg@yG-p7+^n(j>2{sHbOtRTQjF8aZ~`#q+wz6ioQ4C>TkXQTe*T5H!}2adcfR2H|V<>`jPxmrPO z5Q0{%Yoc{L+U^nWjAQ25TT%su&;sj_=qwEVV|NP$7QfUOak{Koya#hx}+ z79$CxoDfl{fKooa?8KK#6z+F;=*DiwUg3zKzQs%-B^kIyW*@C?>L~oKDR}SY zi=No9m3v8XQCScEG%8UV^@4;7@@Y2UrAzD_1{p0wSA@r1$)~*|F3XHFG17I1Fir!d zAO6pK31MQ>aQ?>@HOX0YJYy^VkbB)IMlA14sJ@%0bDu6EUk=PtNM2QCz?OfK3oVb8 zhdJNIR|J_0Q@>Y{d;;~y&usMx7SHQ;=#lb31#KSx!W|CbdbIfcWE%WeTmze|=Vwlv zob%5IhC(jCV}(wekLA#9+mGeVau~P@X>F{nu8wOI{_ayWFQJmHIVyZ|D@Hi`kypQm za9u-}t7}@X#-G;IDG)9zDdYv!WJTA?1)9)d(Z-@??iy%f1lByQ5ofhm>wo0i^pg_e zj+ji4stMc!1!fM##r4#@u2yfH|AaoAZA8V&RuST>A;gpYMgDPIiFtYRzY%xgrsJu|Br>VYM&pM=cQ>DZGW6YK zmADZB!Us`4x_iVxUb8Hq5|wdN`ot;ZE2DIzE)VbmKeC1VujySoTc{IywQK6H4Nfb3 zbFtTsMYVs5^RYToy@}TA7ZU|Gu=#KxQvrwZN+D0TlhSIS&H3EL#9`dQRN+*1AD7}4 zevpi74YX{j8hHbyTY=5(g%ykZ$!MM$5#XkBSdvx5Qsb~)I@4~ zY@|uNs?*DkgPV%kkX~(u|Kmtj@RifGqpRj(rs&j!@T1`G#O)8X3NB{Kal2yCcG+-B zh}b<>rcNI!Zu1noY9);s^M-H7CSixv?3b+#<^vgfr{!}EC*!y)T)oxvpoe;0wi_L= z7>}oVFXF6LSc^C{P!d>%9U_d|4tjcAe*gOkW|2p81jalq+<396ixCoJSZ%dw>RbOXQ%9yTp&ks+{cXE|YtaiK1>8}V7cmb=R=ke|MbY0xQi#`R zi|c-RG>74?{DxX;o6(b+P^rWIo8QiE(~?z>X?OFhP5OmDHU;s@$DN*(zCtbxod~Nb8LQ->IfoyXWDtl-MkhFQbo)SL&GnnDpU7@m0zjL zJk8voU*X@+6G^81;^sddXd@>o$iAE&|1Zu23&Fn6ReUswITkXw8r*Li`S9>9;frCl z5pkRG-Jr&1@yXKQ@CrrJ8}=xBUz)@FX@g>rknGa2(#fgG1~4rs9+ zL~6}PU6*8e&xlm-4j0Lxp80NdU(P2q9>iO)pB)FP>Z^2k((xBl(^A_RVB_pgzb7}J zU}Ble=cY*s3gS8v3@im`)Ia}nGw1IzRrr(irQnjj#klm>RdV>>^VhB6qe+S3f42MN z3R=kEO%B`2q9a!!0o^J-+cYKx0X8`<)Zh&q5o5) zGCLe`#bYeAp7vSe{d;j8D*`kAE>83PB>qgc2EVP5=wC`7Ta{ehw8uH^Q)4}|>h1O0 zb}l$q#dS~;3BNj5;EDXDD4zP0h2L7`O~)gpbp8fUY4oJNy!j2rBj1Xf zNp1$Wj1uF4RcrM3&ECE~D0gX9mZnI;S~>eEfQbPMvFC&xvr z{HRzI7xi2DW4{MGE4V0~uQpDnf>3cFjnGfTyEuKckO_qoB={{xXPGU3Hw?bx4ipZ5 z%8VOFw$>P@FE&lpH>@W0=|RhWxe1*WrbB;ox>{LV1Rdn%Fi$rW1RXPmehQ@OBApOE612_tlKuKpPgPqJ&%^NsV(8g!_DK}w~*3wCu44gn{A9B z@>GN!rXcxqtBnT4_J&gcX$9}wgjubQUQ|Q|YzMYnP!8ia{(YAn=kxwcf8E9sqKqUR zN}PKIQU&Zdpr2`qHO?~BJY{{K??juhe{JQc=-|ZiA$nJQf0?Isd^Td@X5*)&yIKps zY^V_`lMOo9^hJC#dmdxH1JC4;n-}rnf1CEDq^h_Ide{Ap!DdPKu4&3p$Z6eqPDAsa znR})GTn#GrruuZ}`{{7Q1QbS}2J?PkjKLQXVG2R(P$S0RTABI5qoCJp^QX#F)dyoN zWsHo|im1Svk6U^wiK%KM;RXqq5lwV4#-QGCe{w3|Nw>MJB$f$rI5jd7-HG64YdYv^ zBAS2s8zIFeudegejNb{0<|s-ksLj5`7g)aDj|7YLSf=(fJfk?22q{~G{MH+&LN-aA zdw-sDsr{4X&oRi0L#exwrSKT{`K`cDdpAdBlCI^yHB4tx070$UvPE*+|| zF^~RabbGe^*=*m{sl>V=_*Qy%cdIdvU3HfxNZLCla93*zr?`tAg@C1z#ijvshV@J1 z2RJ@X?SaRU=_6CrXe9?7-=oDTOrm@EpI>XcD6jKZ!gkXdqOqQCs~(UtYrV=}9+FI5 zpF5CnDm!D3Bn+38g;mf2N1za@jPhXXgdNK?V9f7%&xfYCO#B@N8;9^XI>`Rbo7n7% z2+^Z&`$l(M2WdC|2fN>0KB1q`B2&N=U2YGZL=mWsOR2 z=MhCtz=^4#kS$pKeJPXKSz329w1%B9DcelbNz29Ao>fywc7CY;zsA)_g467*2fC@^ zI#tKnJ-5x=G1%n!y2}gq6YH=`TS`K^9mTx0P-f@#rH+-y_cRQ=#?qwioQ%x~DM%0+ zRD@S~YMwStFGY1moD0IyQyyJDc1VA*^dntME;Ewj=2ZUMf`XsS^HgXmng2W`jqE(F zTZukhK}7qOe1TVEZ z%J6X}1J^k7n~{7%wx*jA2TQ|J9MbwMG$TcC*K6N<8uYP-3LMe+J2`RDLG6>`p7xg> z9C*Plx-8i0E|)jd8%*}w za4KQJ&_vj((Ugzo>(S#}PD%bPfqvOP_s`39oj>Hfd)N0I$|V%_y|-;~U9K!X5+eKJ&Yu+>)kF5Y0_!$^-Z_79sTca2 z`Bgc}G^LD`fs1MiWxOP9pjl~$@Mr2C7qY4PR9L%`Y8>O`V3KyL2YW0D;YA=tu}r8# z>SXx}i}GJNXydPI=-G0)vAA>P3? zOivobsRFs@SpHnHeIeITvO|gZ-TfnsDzj{;4X}0OB@M9$@wm^X$l8dMVhOPw?AH80 ztk#em&aTO9XtepuKRUe=^21#n_owHMCt!1D6ZSRb{h7T;qukFvsSaY9HDW5r&s|)S z5?%GO>`nnT2O|6Po1ywm%B(CK0#@2A>$EvR zSZ(XIBDBj*&mB>EbY{}Be<5WZQo<;4!1?X!NER(JyuWt}R{Z7S6_Pu!phbLO4pC5X zpGHamU%G%2c+DHAg!iF+oSW@f#^ilhf~h;r0b->yP&RBUaxbVa$IHgX3~Bo53;c7J zrsR(}lxdH$oRZRGq^WU&x&epJ`^P>b328hMu5OkR4ydZVlGX!!8(6cGt^0Ej?zcz1 zwEnYAQht?YbH<8#sQRfvLCsL}7jx3%!a<~|sHi)ZG_YxN0OBMbEscw(g9Di zQ4-B-fWNb;#qP3#1>c~R#2RSlJbSPY?Kdoz*;vAVk2_HE&{;Ec@JZX9f2 z?q@-W&g9dVbRRW&8yhP^4mRO%L{KM9cRX#XfU6e1@UzvV*&SiI^CYk4LjyNMC)IYQ z(;IDy+*D^QUNRspvaFSp?O4jZSwsf6#=zn{Z%@|6A_7pR7`es&m7XsZN78X`JOHB_ zwa26o+RFu0^6X1+y9chdA-}eCZccA6+FaIId ztgo=MM+39LO+OPBIdziIlP*GtbS&TDr7y3g^%qNX>-xrus%mi)-WYSS_{J9}-xV&R z^@_N5gd>+E(=?*00|Ry5^B}DHzZ&oo<#UfQ>oLwnR5V%m6O2UtFgFx}Yju9=>)0?d zW!u`mkNi_b?EZG~rL%jEinOrya?$+l*WV1X4?>2_r>`!h%f*BJ&K@dqM4HS#sya5b zWZ?O8p~asV=xJH^t)fFkBefQsImvl*w|3z8xWY+id2;|RpSCoeDFi;5fOoBI9)o|l z3GqG{MgpKKAi1hTG)Upy##Pt1gGTOJobB5*7Z(YNi8Z|LXdaOgLN?>9^cr!jdLTn- zem_|f*GNmJp+*yvq|~-1zw;N1PK^6DQ1o$e%_eAR)aK=`mT*&8xSt6u-vF7Ft)eek zBtX)j?!3T2a-N?rOz&lF9ePkGH5an=*R$zp{wh2i!Pp&%cc;cRp^jGVm$?qwu2acK zfF|+LyCE^jR0En$SCqB06B^rjpKgsl-FQ;l99BKOzPgQM730>ZXu>#xc^GI0Jg4VP zFI=<4C?IXH;fdjRJ=^`T`wr13gMgbtsg=FDdK?nbI+{72!CvR%@96VZWn@f*KeMny z`y)FiSI}`Zy}}8iT(Ynzr$?L6daJfwvD@-;^A6sfw&`c0ZUQRh@jsEfu5X&}%7}Cb|EUfF*}gSAs+vXR@_LXdiX* z#cFXui3CTdve53%jf_0EU!O~upRK^c5JnE2JCY2+)=v^jj~=shdln+m(RMy%mYXCX zLUwiZ+1h73(Dl9N^XCZ|BnFmis&78@bTvfbPQ|QVfhpkPz(EG<9kvmJpfLu-uS@Ao zb}d^fOnGz0K4Yt5LwTKs4%j?A!;Z6sTY~r4AU?(~G|n<#T)chxhE)QHD!tu$_;8pA z3dF|f5&VZD-vY~7xrxBdSrC9p^30{&`N;W_lG#1Z;knQ6_PvmUlkjmEdqePp!;cg&&z8P%rtP`36q3eM)UY~H?Nrrpb(Pzli`)taow(zI%hY}RG%jtH7+X_fxP^|? zght#%sO`oSJ{Ob=qPh5a-Ce6Ujuqp&?e;*;2W4%K$TH)7$_uYDh7m=W?jL*p(zz6} z%MJ?joI8>ADV#cXKX|pe9V+PLzJtZaXc%JOXVdcAQ|X=i9UPd$>;y%RXfJIy&AJ|u z-H3R6BedQ|F-Bg9;uw;MsPp}O{7VZ2u8%{X8`z_snkUkBE(ck&bkB#Ju9VB3v<3J} zP3KH$t%rZNe{jhb`cdsRfY)lY)gb$cnz;MM`9#ToiinGPH;5v5&iMlcJ1$>mPpJ2* zNR1oI|IM!n+f$o|ZH=h*N$OBjr3sGcFzYVE@{M~bl1Ip50-*It9)I#MaB@ewmQu3o0@4q=X{y|qM%;Q2RA%4{^2B?8%%Do*| z9k*ih(ABM>(1XrQsx%(#PK|#@ZBtKoP$;CJppf8G{Gl4VR8C_}^cSU)e~B&oCAj^yFrA=RrfHqV zQN3{Ak|$Mp(1FYErLSsL8ki0iBpv&nbPUu!Egy%E7=Jbuplkn-7jysLeN7*+1m*#* zls?PUI?a2e`0fohj<^R^F&C{J{TOqUb$NvW=jZhMT!K-ZzIAO0GL@l6j)1-lVb$9C z17vcVT6ov&rdprXdG&bj?zoEn{X5$* z6tXf&#GIp)I!^jY^mQ7wH!0o+Iq=H^fZ% z3WvLU=es91=J|R$ZlhylD~req3J4^TM^9m5=5oB{vTpu##_vQbP|&%(40$h;b=lpk zdBLWs_HcE2eC}xZIzt0{pT_yrTx#i`*F{tK*?WS&SsQQbzlGz)8Bh?>02`K)^V9&@ZrI0-cC$#B^W~q*vTR2>FMIm z43iv8MciCqfw37C8uRgSQQ0UkwOwLa_Tsg79_^OZAXqtzXH};FGsgQgmtJ~7acUEz z_Z}N0kcPHHlF9B3!nFd+Yy@eQA^PSe0k(G#Zb@gAU~tPn|59GpUNs@>tQg#M$w5wr zcL$8r*t!P%8G z?j!a9BlajO3LadGJ`cogl!xt3dO7;%X2Wjt5kpc$v2keQUfVy1g(eCYgT-KEt}{Q{ zaja!?i4EUR4wI*YqFqzHjh~w*APh>LxD36SYbqlWY)}rm_rYoG>o_x*nF=m5zzR)# zm(%;*crU;`iBreYYRm596QRrwTB%KFlTC1r-yNEcj(+TW6iP6y$a55lu{F)gv2Y>E zJj{2 zdR6J~Fzi{wUQXr(m?zOTR9aw^G)pw=mfdHw{RLpRYKj~>c8#}!hL!17*Fxrp_{>kL zUwU~XV1j1^ib7a)Wy7q8c>0Kn9qNW{tw;+eC+A2D{M0v?{>3-oiOiXDkVqM~a|!D@ zqp2HANh*!WK1sCfOW@iA=%SkmKOzf0^0g_YzxQ^KxlK#$*>a(j2^}3$v_uqX`i7^o z!?IjT9yI=8OP%znIOF;s-IfafT=I-MrLKw(V3!6WlU9_fAENG-kPc! zf5iLCO(GzmIy*Z~6^Wf&Tud$bHY$Y+3BtoKsQ2pbE1VSI`dhw88t$AX1?Rv~c4$y_qeWe>ruv(5CUxIzl0NZ!#k@5q(Fw*&{Hn+fDht@{`|Qgh|l8I^}<`;C8ctf&gMpkd4vu07wq6GwLuL8Xs-5KPEp|( zJYqLhRZezIpV3M}V7g;3dYIng2(2?aTJNZPs~HQrapNhNavZ=0b2y+pHwBtxft`nykmAzdSIYXc`e;be^7a>eTx3tu92@CsZD!^#}*Y@d%nFGwyI*{zc$EUAio|iG_(*Bz| z37tO(nLnu-(QJrfcRH3WpsiVSa1IQtF_-A#S><`VB&|Ez!8EOV)6L72`xZ~BQF@QL zb{w1v>a*0rX+dN>br8zsgx1`L|AH6KUlhSRRqsL#JXP`xa+xX(QJ#Cd@-M&ncwPQp z9VCZ1+TM}LGQ`r~{!GA1Mok7Joq);_kiIwPS`Pl#p37#S323Y*nI(4gA-5mxOC-Vd z6r2~bpT9jZ8&y|T=dE5e2sH&Wr}~*!Ii6h5imFP(8ti>T$wH|_*!Gv@q&XT|D)dLE zQW6E6MZx)CpzMBGF&pk;yv2-n=pL6&p=r7unse-nRLGE_c@6*Zp`b60BH%AtHDU7P zk`qLSmF=a3`fau87^vJMTZL(E>q`t4k!*z{Y=!fQaw>KlB)h7Z$mq!`uo+r#rH?Le zHW(wgte#I>uN@EFe|*UfnIE@hplKUEkwr<=nUbxbnL0H$jH$dlp6~1$jfx+IK1aGr z=4hn8BL<-}subDPw9e2h%Wd_bd=TsCR6!ci0r$JOT=|s3)}xyhOoZr2Y!Q~Z{B&B; zuZt&dOT5=-DaQJ`kwU1=oK&@4-LhR>ZEgL7PJiaqm}^`t_LYZR<_LRid!R-5Rh!^% zVlav)UdNM=F5C?|aIZWNVHOM8qE-)SmrvaS9TB=hr|B?emEdp(r@LCvy_d^VHs^f` z$JN|kQcO=F_xc6ew5vl41V-cxjpbL1^Ae%)8ZzZ*uK?Y^#(OqjXl?H!lzz{L@8|R# zAbf)c69kM_rP9bCTA$%|5Lb*j!Z$nirbX?R`@9wgHzpC5q%`lvSBMy}1LGrS;fn>Qwqe7MT)%hZQs^ z{~_$qrUEXAtOw;L9YGs+oUkQm3Mnb6n(7hpeK|z>*cOH}9z`p)s@uUdTB1In88kJT zUyQ+;*LBuzvz`1hzq{yL@~u|7+y}_6Xx<&3ASN1M*bsAf6e|xxt9UVIV6Z^k~hO4EPf83e$d?+VFw3ihPltd$rr?8@o@P0E-7yx0Zkck%G$<&+vrIZB|lh|dV_~4PJK$>yyL8Q3Of#PG61TqMO**!^gXNBhV2g;ae5f98KTiUD>9R(`> z5f90%8TS&+pt7x%dK1qHrjvnJSTUR6<8nKpOsy5)$2`k{cIe>Z&aiodx1Jtd);s3grhGA4i6kG_Vr@TU z2L^ndwvZ8eS%krAp5`CRDG*NHblkdDAZ!RUf-JqXpQ?YnwlE$07C}b_P^`;m{2IBn7v7 zl}f$2Yg{WfvM3dSN-B2(1)dE4f#6x+41X%s6cav*9FbGEa+kg0* z(30?juz6fNRao{MHGkeFl@Ht4b;3ZpODJ#VzZa$zLJhWTtgdu>TGa(@v?-Oyn((Si z{`it6KlZfG$ta5hCuH+;aGjst^-hJIR;MpZHCi6ztO z3wK67m#`4}wtOB|VoJrtlQe61Su7S%+Vp%Ueq!n_;|V3|7lQQ;bUq9jZIoNJVYtPA6A<7^=qVNiTmFYUHO~K?=0p){SXr;U8<}C#oqf# z>~{qn8SK(epkG_-L)b||{~t-`9?#_e{&Ag^iaD1e=fmWXVdcB?(*a6%#W(TI2 z6Q-yEQ`UtVIjvCgNab>s(d}MVEZ}2_LM&`MJHTh(g`858ugb0cOid{0VFYwMtIbk-qZ&(9LFs-ttrrJV^8w0`nfo_8I;{@;50yB`Nnr)y&-ZF3q z??GhKvqvKsg1Y>7e1Jdw`~Vd|w_acAQd2td&Qtu^^(*sAwwtf%M>Bc5 zyT?bpe@&?0Ebz9it#Rzg^aBpgy9bo?qaMw_L&PaN*|hsGX`u<82R*AZ1e3SC4?7Eo zWHpZ$54YdRxa-OXS)qqRY;LWY2m5^?WMCwKemaP3YNa1zy}TF0!lEyErG8{tNPfha zq^Rj2!)bexMS%~k65ti zbg2S49l6&r{a1Y!lwA=Z$zuG(EEwpGZr}Ke1nhb-2=oH>@S@l7 zkG4CzqkpaxuUvfqe`NY37h!wO3z-z6f&E5mVY3Qo(0;HkC*i&z}+@ zJa<8PhlQ=st?Wa0pC((UOh-o2r7`^+m7leFSH#hT)dl@}TN&V+ zz@hi3+@5t!h%G#=&50l?*d6r5nLY&5AjHZulKS*xD+{#QRtEf!58dt__o0aj z@?iEcg|ptnW&C*ys;7Xv<%3-C#S=dxyqE*;F)@jIta5f|`mm?7u24Y&+-H%(fs08AHJ zGkglpY*UZ#-`701h;;c_zhY^E)tOnD+urX<2Ye8JhlOh|XtA}E#-<8X9d%ZNmdrOc ze4CH=+z_S)k~b&36dIlbH$y_Vi`J_Opx@r)Gc@4c59UpAYmxx_mzwP_Y3`L+rOkQh z8#XA^lq>wwP3dD*32>-yo(;}wUHR717dV>D_Jn6cBHtPh1=;gkTtJ64EETT_~jp8k~}b zk(TM=VL3B&G=g7+7+!1tLfzVG+z}9gPVd=YYy1_DB095i&(HH*hO5cIFJX_h>oXC@50?1FB+{%?gq)UD>;n%2G!MF{TX8p-GXR5w5DIBy`uFqJ($wJ( z)(UBY^-@#>>Fd|))7HILG<5qNf8c>+ft)vfJN)8X@9`}zree;3>*Y@4s@i!TMe$rq zsIBzy>2rBue`}1KVEW^KVXY%^;ru6V%)x+uQi3k>Y3aiz?9YPXwxWpLj9$R^@k7@6 zy=!#2%@_CZE-+IvR}ig4gQo*Icf`}RWZB4j!LRt8ySOq5lLJowBqs;Y#vomVoG#9u z*P^YO)7EGZo`*~N^}{{4K?O)bYa96GmvTx`sqWPU56YpfqZ`1`M8#T}pTJR%#65Qj zEVY(~XLHT^lcZeDu;xw$s)9RV(H8pjJ$;?=hj14(dm>?C!fL9nkwO&~(Jz<4W*PAu z0uqCMx|Hv%58cJs#U^o;X<0th?q**2m*dXt^+#UQVV^!e&`ce1$(K(q88oK;Ip^?q zF}?Z7$O(#`Ek-%bNnmBAWkRPv3Do%>7T0~h5^$y}irDv6AfEYuo$|uBh4s=3hb;|c zy!fY)uc5lo=WZvyd-$TjfZF4ATsUjM&yb~ttfG0P0bZ~ z{joZa#=~EA>%QlgcGYtM+FC+gwi29BX$4)=LbhEX*^`4tm*;PpH$e74Set{!9>Q2%?_R(gnv5nW& z#}D(svuGH%w^#22ZGGCv%R2v&yV!NWT_@3C=T9{PVQZqF*sc9k+v16$L-XLV*{BXl+FAo*dLbga^1 zB-=yazf#p9;l#6C$8iCsw}B(wHx*b$+KCSPfXr~JqgV#|>b*HBz45g$sR}j+o=uJP z$;w*sHal=NTdQ=qY)AT0NNZ~~ggEk6_IZBp_or|N9i_(bOg&p_qo<0Bb+p`@=;Zff z^lF2pVI8;v#vP^7gO~CTTD!?~$nx!$$DdnXh4iwVa%fG9i5$eaXtL@64w0;t6<8)* zKEO3gVAvTX$<;#N3q(hbnO6O!dbubVh1xwX!FhNnw)@ma+p@HSsFh zT}50RQ1Ukq%2lAAYWTxu<$kq~dPrPbP zdX4*r{yPvqeO>T#pXa$Rx*O*cF^s=Y(enzu>IeHTw{EQIwPM+Pldd`~H|B*c9^A654alM;(eul19;IaRJBV#dODYnJ_B$t=liuJ!De6gOTwnlS#g62uJ6 zL4W49JqcWUx$_4{vlNz8pV`SzTke#(J^Srn>VB^?K3|Ug-r+FRZ(nacJU+_Mmn8Hl z`f0I&kYWTsH^%|;X-8zS8R?fKMOAYZ{e<8$d*N(pj{D6w!hm8u8+=E=Zg5HwQHrDM z@QkCHftHDnL&?UJ01NQSTMgVu)vs}F%~n&hQEP-I-AeW$@d7eCs5T4Ist+<{<9s1E zfKULFU}!rDZmgrV)T;=A(-Et|cbH$eayEyp+82(@R2brV?p5|IZYqCFxODX)?U(=H z`=0;gx&2)T(Pl1@D!d#5ISrP7}Df>h2Qa18Xp+lBe;Ya zj7wtEU3^aG?l8nXj~Q;wLF#B_Yh1}rFu&RJ_lJBu;>dy*EKHJIx?6;aMSAM&02XtT zD@KKAA6Q4Kr%^*K#((;nwnZ!*m0t^*>ARER0MvG$&H`*fD8e!Yt>C(VOJ zfV1O2BgF(K$0tFqxZw?T*VzZ8tusci-rGuXzj(ogdi`^h`000B;&M@&1YO8NCavXz zxDYsG=i?`Lf-yv29?Jc^3|0=k25M{--VSXxk(QIBm$5~$Z20=lnh9Qn-x2PrHUq>6 z;#BZ=dl$Jjg*%^O+A$|Cp(rbnJG3{?XrhZFe02vA1)O{&hr_uTXqLMFhS-9KSg<1( z{fn>)F(`Luta&F>HQItZo-eWeAGpb__4CT-_wWyFmsMFuMWxsLPklIT^hHt>{Jo{M zt!M}~cii&uZ-Nq_cU=+}azzsS1f_#=#gPPSZ&P-VGLjJ5p6n%+jzzgQ@{An$|I*le zm;7)_9B5p$1Q9==)SZ@q%p!JC!u|iS@|c4_u4PJBDN!*~q>^W))@vceD<#CH zuv!>#p5tw_SqJaP$jFxhO??tlllevEhgLwMp@7o?heyy}i+jC^2uKhpxSXo{c2sKZ z!+utP$|+Z`{v7H5*#7W5r4u^88l-k7IUc;EE^UJ9WBiv ziW<%Ne5>xZ_B3ian8tj?iD2y>A0zDEnfk*gl_3Ims%oFrUzvYk$yU&zfj z9C2QQh~TsZ*Fp`_#<<@5VsAsc+qP>&y+QI*J9ARF<%vafz^aaS7am9!roc+&)zq>9 z;b>DAynHUAL}RKyUDm$N@8@V_s!Q*Vp}Xz9SGQx>G=|5UcE0Ds0v8`Xdjkro?3WOkYiE>YWM+u?wgUb zU`g0NNmy0wvi#|bR!AnM$Ju2u+P#-b5+uypvPuM~+kaR?gRhpr?XG-jkCcyIKmG`$ zhz``^;%Tc3@u6!Awc~XOMc!mCP_$B+$yb5E9hm-4Pj2?)%H=>{afi)Imr4;2I}1=$m#M8b=NYD9qBxm8*l zYYiT}%)fP6drrT!H6_k;@usOrOB0DQfknb9vPe03V5_Bn5l4)*q(8BQ0=VY_+-&fI zFnzQuu3Egsk!_OZ9g6Z!#Pd2u+uEnfCH`yw>dC&VKN|WxQ!HriryLGyX#I+P zJGx)e2ErEK2GsE6+Sc#x%juwBA0 z%hNJY1O&VhrXk*bd%?{cF98dR=J4?N_rs0L{!Rb(DSM;D41 zCwql20fX3(#nf|ya+?rm;@I>@<_{6m_qv3pQPi3$+l%)}b^#v@8KVOkuHaF^pno}K zphzEOmD#=#BFo$-A(Rx%%5QHA7yYr#D^2g{rQUkawv? z(9HI7q`nT`8a?K;P$ezZ-558ww8LLHrqD2%qHYvrw8$8L4LZtFN`*Y1|aT54>E?=?&c* z0j6=qk@foSX0AwFQmb_L&5&ueySqRDf8q5KYvYp5&PC~KhvhHtUpoh|pEEyGPQCFY z#>oC-dVa_^8dIW$TO^U@mc1Ibe(W@9M00?rg;Yn<|4ObtU*GNvfgglXuN;mOL$^zg zwlxn{!&g*P0DkE3Kn^Q=OV!% zucAYjyRAB`WbqSCLG@fE&OtaG_UZBs%~6Jj`n&#mRuB!@d1# z)2^0hkiYbv#WFQ8M_HqdxYs|s=CgxH)Jq?hRojgzqn4Rl{`sI9?o^Hb z6tT^b_?5L9M)kUsXzl7Q`sY)(QT}#<7(03?u9&4~#_{fT@h?5w#TY@@O1OTY278vwj0|a`=sTyz*qv4;!*3ubm}>oLZ#o@)Hd@hhdp@Wqs6Txj>-1UNARP!v za-OASKLXJ5v81+VS9M3@KENdO`w`@N8{$xQw<^@5m(y)P>5XAf?$lVv_?5eiQa%Wz zE$cx!#cqNyxKy#7JRdkVxG!+`VBDWlOsP@kGv*av2*GUvfln{Lz(FH!<*m@I1v>>M zreA(*Ki1^}57LFlg#kRR3;4M zHzgU@wB-bKVKI+`Ye!>|?o&CwM{n`|x6-lnrF2=Mw5%v}8mUN|57fE`VH6Xof1XJn2bgpqbRb01Y=GcRa;RZ_A{L*p{comMr*^~?+F(Dv1MM3r#v zyeO)HLJ?%Jp{?%Ppt`$&ycybxM~W-CxMIDU0)Hpo`CE{7{FFL~-8W0NRkKF3I6j@7 zjvN~zPSp8q0SV4@21CZ7>FIJG4)|=cK5Th=3k>9vnyPE6fO|zM)z+Ssr5@W;O6pdv zPzGL9;w#CxOMato_a2A3h`G|W2e1V>?i72XIJBU8l2Dr)xLxl~SP9OJ`7TL_rNsEA zt{%PFAprUTx?w#f%Kz#^Do6Mt7^v8u7T*8}sZ2dtA+OQ{*BP@rcMl<8Y}LNvo&))Z zp|%*%9JI7g9dCafLedfI>Rj9{Jgdup(~p0pAGd{X^yVHimeAl0&3#=>g!J=Lkj^r@ zavxX2!fCNPs^D*GYp+*8NEwlY!^Z?m>`ztr)c7q1dqDGl&Y1=fB$U(;;`ro=pD5H^ zg&fQq1)Qx)EknS=!`U=4q|A@U{~P{fuQ1TJO*%{s69Bv5h=_w7Iab~@=_=BHK@LgQ zf@wR)F5tuOKJUVKSe462m=lJQ75%b{ssT8GDLY3pB?^*Z8Qx&Zu;|#KN^gm>Xhb8c zL;!nsHUV>+cu9nM>0y!e6|@TZ*TcJVFJixM4qQhj%4mT1Z6M@W^2 z;YABnjd^(HG`Bx`<$-%`NbTy9!}*#<*PfREW1^rxxtcAU|MMqab_-hVu1Yw&(SCRB zS*fkRuZ9bk&3p0lm`w9z+RlP_^D=1(I)HRlVV7V|Ss(NYJ>t{cayaUmI?fB9ZKK45 z@1N5|(nmcSBp15Ve|5S$0!R)7$Vtuj`4s?nl9to2l$oZdOipDWAStjxM5wP@dKC4) znfx2*-}Kbfy?Xs55#Y7g%W^WkdcC8Zs4+ZhJmCtiVca^e5J zc~6vWa_3#n>jR_!I~)7Izs^nZ?dNw-_2=S@B2n;vh(Nd;!;j+x(8H^~MKx+H@gLLM zvg*y&jsmFk;p*$_ppM11x>04Av>Wsu?s#G+L|1ULf1qyd68xJ7U@_6ahHcM>9T1Ol z@@{gmOl=*Nm?uBG@OiVzecnNEJ(Su|{WQ>Tb}@1gj79@*E<1ZWd-z*fo*3+Hqqyvj zu~bog^L~$-0*M;Ner^dTNB@2sjPmV<*iw`eG}kXBUQSq$yS}=nm}1)tj8jxiA5sePGHvFnb z^Pi`OlmpiCt+VA7<9WH>euhA?u-)T-wRW_>EIFYsHwI-(dro58XJp}dld3tIU%_!O z`@o-Z5^u->Z|}rxhlCz>%+3M=j2$hYxdZNC@? z1LxW0917XjXN5K1xI^zC?P-PV_0^?v;%xr=5_c#J4Y`6oJE zCS*-x)eK)1J^7|{^8ps9>3gz)^#%zsK(ds#ww8Yl# z;GNaxKi_`>^@!xM_G>wCPq*ny!bGLQ1C_mK8)*Lojruu{K6j-6LKH1E$6`NX;nQBe0YN~FkdxX!&->4Do(Ps(Nw{da^ zTpmOaRxSuq+8qG5-m|@yQQP{r#l_-1={)>C_v_RNWm|3J-satDwAVm(w}?@!5~Ot^ z@=YB%{h4ye^M_^EuiSa;P_F6rUgL9YRe`3YB(1rA&r5UbVCwhihC;VhX@7tpzKRc{>L#AI@w9C1&0kw=0Kk3OkF zqd(97PUuz<&I9U*Mnz45v-$FA(Wwl56v(lldeFTF(Jc}-yK-o?GU*Fd2JRpQyL#pX z>*WQBXdnrcD`*utTHJ>5b1KGg*(_lvG4l(mZ{nbtT=HNXrXE3@AM_m$g43HCZN^Fm zZ3x^7nF9%2J@+94jl?>4qx@B{t6)Pjkh9W3fW;iy7kj$$L)e2HL8e^72~^24TsGKW{Y(uLOR4lD1+!&Hvi+xUX(WuWQ;c z@Cd{Lmt6x`1jpT8q3%w>CDzi#j5_MwH_3q8aMvd9c>y?f#BSPMNRYSH8+b%(Bo|M& z(Eevh7oN=j<30ZK`q~OvmS31aukhf{mbBY zn7vCp;}R&&gwwg<-Y#1`-F$#EedIBUkZM+O(x}jW%zElZf!t<5`QXs1W^BJAU-aPl z7tZqMNz-UbL$w~HOCLSE7dH7{-+RkKiN0J~Ep2O^Z>M@YWJsLU;z{5 z_k)NMik~l)Y>?nXiItW|;rbMf`YhzZu7Ipl-0d2Zx(IC+VlQ~Tv;@tPqPJzJXMKz2 z@~?esCbg!Hw4WOFRLnx4RZ?ObUb^Q@0Eb}Y8sL_VflAi0;Zm&oa_3(k^-YK1EDA#A zp40W^anLGr0&RUCFc`197mln|_h`$=lmPlne=0o^%p;4z*t~-w>YwKsM3{991=ZRg zcc?UP{p}TlBgfy3k4C!n5sK{!CVtv9arklFB9a$ zz7J(}JM7Pt*oPk4OG;lQi6A3eKdVix&*^$ibj*dSIdc_I1ssRzCe;XjhYci(P@s?4;DHuEMaLTyZoDE>~RArFHQU^?C+S5s)&P*`Ymgm8w| zTvhjdJ$yW9mI52T^f3#ZE<}Die7EZfGUHaFQW_>Bl`A^Au0X1*3(z;5>5CyJ{dn%N@tjnM z!r*OEfHcWy{u__Jn_?gWWj?r(GCH^Yh9PBh!H?(gN=SKNfSWGf649va0>CY*S6@e( z;B$x;A-zsjT~hMJqmKs`;~tPxi%JtD=KOzTH*u*#yZio*6UwbZdxi6|O>MoZTSw)X zTRu3sl4=-_CqwJPc76n973()ph(w;iU9jQ+Wyg)>N%}=E zo|CYDzXH?yBW~?v`FK)6M$iwN>S)&Mza88~?YCkqD$oLz{d&1W+P1ZcY~i!|@eAz3>R=U;p`0!)gBdpwKX z57?qi$xukwHQjG>ZEbyhKD_%B#Ill;jDz*fGc?Q-@ox#>+pRMwdqhTaGwow*F5sOK z&~3ByR7SDudIOH8rJ+>~OtJ;a=qq}bfD!}VG9G&nrf7N>TAHqIm5u)<+SURR^hL?I(3DVZhr1wiXhgOQHE9k z;L@nOjyy+jt_+v<)JBpbVUQ1qXAE0j7Fvw!dloJn3Z9JqQkMtB{ZppZJ2CM3X{|0r zc`&zUi2>hqtNUIXByWtMe|ojl1Q$ zhF5sQNGt#>vrQn8$+K1i<8`|~cGS1>y@IDR0gTJ>?(yFZS0qL{x;q(L7kqbh#mL2#{u>3He_(D&s=;;r zxUK4dtv*0Gk?2F2s0=p5=rKpnm%_kD9V)adB_yMMkvCOpPeHw`X=&+P3$T>a5#fP; zE;KV`IM<>y+oM={F^UMlEF1RFL6oXS^TkD37h0cBT>ooU4}43Dac&8L)b*P^%`92@ z>LsyUn+&T~!h_JT3P4Haql188U{^HY?ER!I2u(t=P1XkrGoJ)+u9p*Qrr&E!SRNU> z2ws3$l*4QYQRO#Vy9^A>XsyEAitxRp>3Sk-5v4p6w1#i`O@7I}l?TDw54w{b1z zsXin#DHPrG+TcIwkpQAY-(HZHFAdqQRez&fVU|dlk=#n$p>6aGg1ccctuA6;UcTmQ z-Z;o3=o+oepk0=gO#cNg-ij9XEUE_QRen?{ASTN~{%u_Oa9c%@N%47$z(($}o)vb* z`r*S@E<|yPf-xqVFkG*_TN}3DeisNrJ?K75_EBju)Ng&R1>j8_j)`G&JoePaALj(g zb?H;0%}ZRluI= zZS?swZCmfW(WeaWp8ov@t9Np0Y<%KyR3%S5N%f6kQf0?UNt%F+41vv*Q#5O97Qk@% zrb>&xj?CyE04`Ug;Cq$q9Rbfe>GYt&Tu5RJBH9Gliew-PymC$V6fLzy7{y`)m8(J) zQd}{S+5;Z)(Ofo!LA%XQMj)uMYGtA>Dz*@MpF1*(xCmI!HGT z=BQ#-`GnhII?El|=DsCLkCUqEtbq*|TTzRK*^@jD3%}0@RguXqai(|5{fxR82%I18 zR!N4&vK_U_-!Tvs>N}4cTB-8Xg`eFv1i98AV;q0XQNX|z2%ys*T;p3Vukh^qHQ{CP zpG6SE8l7tNF->&eM2)jwsS+Iv9X>c&5IAF?r;eMGnjOSNrs5*y){;~!RtA*){rNqY zVSEJDyiP;O)Y%i~6OriFox}L1gX^_24(^KC`X~|%wLc1!3?s5(lI5ocCpMFxePv?H zXSu*6M+Z<_{Dmh~f1dsCaq|IiLuB~<%o}U3f1>s`wLo@S;Q`b84YW5(3Api(f6D>^ zu-)BrSzC9&JdaJgAO-6tdb@wYJ4ch6hqJw*TY*HAHQO&h+{S9hY7FvfW;8MqhuhQq zySNeO3U+|xGFK1Xkq1Rnv}aJ3GU*|`F$j`t=<+CTPoKNa`^r6;(Zq*H(Xe0CzirfX z`yhBQFa{=2;K(>VHtsa;biB#662!tRu6~d%N*K`)gLVUW&|973A%SSO+7S;FAz7qi zu*^Ar(x* z9V@+8Tth&sRbG*juA*Wi-&JNU^*X|f(A8_XGTvZc&Tt6X+EQOre4mpgOoOG%Q~;Mh zfVnym97a>JBMG3IHv$W~60U!}dGjDWlhQ|94U`#ttt#*!T^D>iI3z%;L;wPL7X;RniWhx&;&>;(sa{-9)Rfy@?*Vx+J+;xOz~- zmoBTwXGChn#%4?%9`-hGwxP$lQto^%i$nd56a@6gM;(Gp&yw2erB}8_z5u(_J`VCQ z0h_U~OkXq7t0oPDZxzgiZ>P%%UKt0A5!=?sPbAn`1-?VSi$(Yz2k#Z%A~>O0$tDNIW40TW%1O zY6g`bvgrm8Y4HU`Cd}5}U@RTsTE-}YUIVK@-dehCClmNL{oy8Cr#4KKGCIo;@KoR}rMK zj02X92uRR`azYCm<6ZGwLUebOha{ZHIOlUQ<}}lP{Xnc5ddJ&!!)~7y&_5;VjlXr!Ue>by2P6n=a}~{;2QvF4UhzN1 z6!$o`Xofx{mI49hTu%aCudkV<{WObKq3n)$x(Zk-)=Ajoyv*%r9gnHdF4vm;xA~VHsfuc8RmIM%?6% zkvXL&k*C;=$YxdK3+WdXFcTGNY*Z67+JMiKoxz$HS?KH_`7d+|#ixF=1MT&UReve0 zas7mKN;~EKh`WwyE26P0XZuv6x!-yy!HcqfFDb$7cQ8PH%w^zw1eBdt%YToj>i^s=Pd3swkKW#963rWFS<{^^l#48(UZ=Y z4O1|8{*6tbEiKR6?{a(fs?jIcSn}Vzpm>CTe&gl#`NU_pE}#B)q-$b)OjiR?r?w2+ zLY7xz8R|JgjkA>Szrw3~Xw5xg?{Rimpm)aK`W#0a87{ifnsKDrkHOd3nt&bj$SZuu zpj2Lq7x*`4e&ont0DQoUhXcbC2qXN(^Si(8Xrg=@CDUJi80x}v za-aZg!iL86U5CBJA!X&-X%TE;8hF~Et70;4^|kLmhdq1EwCjS;%cfWB3;lMZ(FaCU z`q9HFd0Z*n)*k#SpVD{vclA8a(uJ*yHTi7j z08EXs6!`ez_y}4E9H?%V|ff7k#7e66+ z5l)zq{st3?)48h$xi&5UYycXEszE@LtmVgSY=jC@JiTf$mtJVQgxQ08Q;TaDW@@KO z%FoT7yeFnKIPnDJh)e0~l5VA&-DVEa`R&dpiejgGmve!jY}}!}9B4{OAq?!Ul=%hm zsZ~f>I^~6S#49|MXiqcj+7YO5JMk{}&$Q>hw`cX$xX}urp08ymrlnlU?kr5VmgM^aP-o6?u1XK{Ci=+?e4@j63QzIgI+hDSklt`Nd6J;L6Gk4)z~Vw;Ymv?fEnmP ztb;q)Yo~XQK6N+l@QZl=oylIoOUpLq2MVo&oA<_+#L=4O#$mwN+hgp&`K~L| zi!}&)=}iPaPlC9(L#Le;eSxv#w72zm6pP zNZ+p|_ve9-%56cpGQbew3!$7cEmbc!OZQ!`Qbm-zlHo+lXt-pK>;p{e#*6yBGXx4I z8xK93H@HMmb!R6d9|n&O?n`oFX{)n0A5DvRD%&uw_Oiab!A8nuK-pFJF1c1Q z8q{y}vc}BbIuA$BNu>hWiQg~^OsleERbKhf&r=S!;T0Yc2zzUex;@V!5%& zudJiF7+7GyySP;h?6!z;*y3_U_0uMcSgv7*Tv-yA>o@^_7#wB?k*{uF^Wyu7=dk}rsU+x*VCFbyK< zFaOSe_SzSgeII@`Z|@8ACYuSPX>PJBZuCB`717H&H^)=mr<`qSP(^aE>(_^qM4V$w zSAaYWnUOos5M*YV_4z_)#t(}?v%6ih#Pox;tW5%E=O0j4<}Prcqagr3qCx_OB+Lgo z@`^$G@>o-!u*sJ`AT!=uO%SW+Z4zhcdp`LCw}gc378LEC3~jwMn5%+`#34+RL=p{N zunP%YW;rv(I#GAi>etw%^d;wT3P(_eX#6*MUodu&(!f?9n_qF#R0GH}c-b*QUqM>? zr7ngLs(pOR{kHMBDoqF35pB0I5pLT7`wt-5XOCw+EK|Aa>(q~Tmu-A;+HZ?w!bAg4 z0a+Jske<+m`^TBGn*Y36fln30PoKB}jNEG5Gef$V*lzuIdFK6z8>zBqfLGJgx}~M_ zO)&ow_b2<;y+Zqs4~c*4vIBB536&<|v!Ir%Jj4dcqPJ;V|+}hy>b3>5_ zD0VRY-P%imz}~5YrSR?JO^&JHt#zNmLF~r8c(CP9cB>1Hyk{MIl>@A_R*vHLS3c@U z*1#6K(@1?iZjLIW_>HH6Vjz+T&IgX_jeJxUbg#ARZSkL#9{;y9fqS92i>qQVLpepg!v2!LJTjPJ zGb|?9F%%v-GS^aI z81B|QDksYVQUG*mpRX2H^Ke$J!OFkgAZarq&tW8_VIi6#RWd&xNTyzraaV!NPnd1F zQZn6`B$sWH|K@3~w;u4yQZ(3s^d}7HlO6o2$1SH=KF?3GyRX^?U%NXI&YOB7h3Y;O(1Km~ zmOVtYYq-Iv`4kfP}G9sgm(%yW;4sSGRzh8=D zDD={fUONQtjilR$?@hu8T)0xfs^zhb?Mg`ylHtfJ-NQq4unnC~T+&$)fTFwGRy|@reyQrQ#@{WS?U;S|P>d+pxNBms0Gr z$<~$7y5I+QT*c`6C|qivK6x6C@pH2pS^at?O)0N7JituDuMHo~mJIrrPE1m*4_vOw zc6!t3f7hqpR~jY6!jc-$wAYE*+Byzhgv8=H5(0Ja2HAOap2ClRgj zFhz)9y$2bPEWHoei@SLq%3iyo=|S}l-{|jEpGQ+0tl@Aw1mbPu&ZEN7$5>{#&zS-W zW7bR_umc(6yJJqQ25XM-YZj^+vx94_C7xRCmMk?&#}`>khz>sDxXfJ?GzPbDD)4_R9m>@8J4@t*kAruvQr{oUK&Z37nvUZ(6u`5 z6QA5yXg&W1eIUa^Dk$d$~1p452n2cH4@*k|j^W{r|KrK>6NzZ4=P3a% z=jEKbL8%5!;eo`A^gJlkmwIqHy9eor5 zh`sP|q>*q{yD8l_Pxjt%st_Yqn!!u;E3X%&z<`oK$U^5)md*D~u)B|UTv3CF?en-@t_xJ-{`hOJnYOfxzI0tU#G?JKYxfZGu6IY_1f`> zxWMjOiGXU*y2oQb0WI#_42cOzo6&P8)jn{YJ*|zYz9nt&DZe|2BPyjh34nk3^uW`W z?!AtKivNQIK^Y>53y-y z?upvawY$&eDn7X-q%cW9)Ru!r0x*#n^E|r~@|mt>c8xE+$4(=0gZ;X1<~=H=sExS8;U^$D71xQZk?e}*?a6Zj>#VI_EYZS!K;_2UJHLucMa#ZJs;UMb-SCv}a@i2C=HZy%zub23uPn0uK5QIaybJWZP0=6#3or|YH zU#i|lW`g1Go>WQ|2H~5v|C2Cc$8n}Q8r?9va7hUEmhJ7r4$q}*=>-oACibj>s@g;B z*SVS#GH$7|HOw#m!==aR!cJ9%rAr$@LCiu-qjj>%Hy-t!ey>OT?Vl^3spk=|Cw7ou zJHA~Kp!v7!>*mR`30ellNLwI4fWfBL+Kibd9&6TBs2)8B|q^L{ET zBPR>)Htq~8;6RZlm^o0V*{VT?gI^?{37mNJO0oNPx3jd2L$5%P}Gdl>lOmq8fl8`ozYh*xs_VjO)+v$tLmBsYp!`n^& zO~KRQZhl}+(DnECbsxU?U}WV$cR}E%rF7VUjkmW~>-RfOz0TDL-LBRy)8w730G=0h z{@$3J#pr<^@#%j*JX9&aHvXmc{bt{z*YiSiS)H|q9nJd-nf999m)KIBEFd2;GoQvKe@&Rel0lLY#&;u1S~>43dBxwc~JnbGUJO?`Ni=89C3cRJ+D` zvw7rcx!XXgix5Lw0U)J z6pzsqE%y8y2S*x@iOFzZhoE8GsMQ_$efHjNiG=BdPwndCu-N(iS(nT8?u}SWGO_9y zvQvkVR55@#?)56h#6))1IuZ2*#E_9)SJ#q`HQBPSC$fpTl~NqF`Ec-uB3o`2ya4H( z|ACI0b#Q3kkr`Rn>|z>;YGzXdUIZ$~CKtN}g3;A%7sfhQPaAPbpbgOMUv@*wW@+Y(rui_Z=?IH5Bn!4d&01-PM-MDMktW*-* z%BaIEbt=$Xiw?5ym0Mb|hyWlWsG0xFrr30O+$RooBZ4}YBZ_c|@#*US;?7|SP38<6 z4&LtUSrsNE*CnEt6vT>%v|Y!M0t7Pv<5`pd1L@hx+U3i?WX%#9W%MXi9iJ#Xg4lGh zEO_N@DLFA7lyja7_%_amv5&=4-*?Lf7BPq8wL);hseN}X?H!nMjI#D&k~~wGOrX}` zZ|kO_!Y^}9?f3M(PjvD!;30ZtYZKAWZ&HS4zW^z}0W2XD2<$-HOhnj4_ivw@)GhLn?mvqZBVyUvMSn5wfZm{)WrSQ&$|;gkRa~*%r%oYZ^GGF6cTO=1(aBOM=Cb z^w$o$tNFDLbufF0d4osfr&9u4R~C#LVTo4XBlN1UonFir3pV|4ZNy?d9M@7|L!E05 zh#$f;M<=gqvTD~`jz$qx+6?7tV;t|^81ST(6Ty!T{;05w|Nrc8NJ9quvaELfUwWTL zQiNLH#z+_A)$8Ia6CG^x-(88__2v2Q*rUO^J7m){I@}iUPP6f2IYJ|T@(G!=7hzBV z!y%DH43mw*;~zRLgxdKaUYW0P)M*)#!}0_XReiw*Ki&)P1hi=PnV%aLd2K9^w$^qW zuTaB!8ee{`gd&ynmv2QqG+B^1C*qx!_PJ0yV7!j_wi0^z zeZ7W>{*6boLL-h>b@UA&^uqYamBIPDPRPB2>5f z_tn;u-Nbn|E$XE&N^FiU5u*__bwzW+ON{zsfFTcOp#$vmVdQfsnL#paj{fF5VwMO?;P}Zx3@W;==Yb7 z;Tu`5TBYi2eC%()rB4e(l*|;qq-{C9MdkYMR9RyyY{|X?e!dw&sZv>^afCOGV z1Apt2fkAj?cv6t`ER4v}pHaUd1PR$XV-&k1nn1nGJ+Ini^KaC!FEVF(%iYe;Pg@_a z;(AUxala^k-v3^NolE{kfm2+**@{xMc6qU(~OfPwb01Sk?h#T%euKyg2P>h)c=~Z1iAlw>^67FN-Dl z0i;C!)c&Wt?fCKARyVaNwX7sU#n0#dvY1gfFoG+GJE7SWY6Zd+Th>|cMdaJFZrgrx zor&74Jc%R;v3m;tj+-<8_iVwlRL;3_DZfzw@$ujY@qo||oCOfXIF4@^-_R=vLFF7~ z&2WdAS=H@}irQMMPnx#d&V=_HHDvtB~Kb7pMcpEqLO=M(i? zuR@|6#K@5XKa?o4)KJ@#beY|~xM;8od=~@(!~?jV_?2wAl~)l2OKyre*mT{0$I5ac z;3RQT*(m|Hdy-zgoc5deJWXM~92+=2*R&b=@Bg~=6fHTpj+#nnXhQ#>tZZG9TI#1`}V#T7^K()V|;40#s^7ZIJx4wL1ZgCYsebIsD} z-ON%h7_Nn#iUH#=w0^g!y+`=w5Q0gm3MLb4`}5}+m+yG>zUi#vYC9><_i~-#bl4n& zl$AOMEPm~f9katufdvRi-fXgcJK7{IPGtJ^vPZ|{idpP&mE9Uyk_xkrasA=gt3kqE zHpm7;Hq$;}t+m#FODSv1_h_Ga@g@bx+fhthbKw750mc8kD9#cnsA{h0{06N+(SinO z9{EyrTN&_CRCUeDn(ul(Gvl|R`5RFlvi)`0#5s?`4O&SCzt=^eL?Z=rY%05$Jzn!1ovue9D$5shhsjR9HPI`9E z5x-zj2)PG^7q758t^UJ4aj>H?bUw5HKj~D35(J~MdhDtg)Ns1T2#VX*v-?!O=;3$j z3>ZK#vOdn^RNmIzgTDtXy@cXRp8z-PlYi~I8Si#BcT^0#);FXanrfY#AW$I#cUTh3 zQT<~xw0tZ@9U5fD@vSv1M&0MN8RU2nLH#zR-@50fP4s5!sP%EzsqTsawX69{ z#6zyY)812A&+Tyry)w26Jzd+jvUqrPA0^l0D+-@x!r3jq@rAV|s8g3SjH_(Q@8m!u zPpJLRUQrYZauEw5WuZ8g6pBjjlTcm9Ic)2>(xmeOVTd1<2f&UPfV!r+h>7-Y89?=# zxIb^r=eWznb8=zH;m-4{dspW9k1K3ek=fF916+VZS!mEY$&^T@3XuEGlVxqSYs!Hl zi?ZcAUTgBuRi|ys$`F7q9{$nR_I5r4L7g(dfk?oFP{yg#ZtlTx^?H)eDLn?*pKV2K znI96|;+p64`!>%1HX#pY}I#`@5}^IP$>)+I5_|)qew>lQxrI%@~E(?s!sBBwUxebHt2SW|}E4*K;7t zxBQ5dkY`jXPOg+HUs#ZUhX4Mxa)A=}ru)2c+@U%<+&zN|Q2((!ILoR1be>R!)XHK1 z%Rh7l&nV4@UWxxhTpa_#u+=#;LHxco8oKwm59mbD){_HdJyi2YF&3)1I3}a^n3oCnKN1#g;8+`<}CbpRUu{55Jz1 zZr+IaJ7(w4V%$EMc%SczUAeV%aE^X00| zSj%y_Hovy#)==dbQc&CYcCd`0eH(La}? zCQtL!d45)AjN?dPFapmrHmDQ1{b+2rie9_^POiFyOx{V%R<)_Do$^e^`tdkfpXEEJ38z0 zM!-cc+JJWw?IShFzoD(qmhnb<=8xtwm+m4y$@-AkCSaiJTFIi>o;Fi za`fIqOA_K;ktIxPfx96Y=?DRCA1@zgb5zKlx`f!K6MsDP{@tJ3eIyjS`WO}hG7X4X zY4r2E+2`pnlK{SlE;l=RV7_lNYC73^K3Teyg<>SWCJ;ve|F|6Zk%Y5<*8Ozo)a|#C z!&S)_5iE1=0@pF2X z+Eh`rjI?yeXtWZ`2R1&SBm~;r^i3jx357{P|7|4;Za)9jShmZy@tZ45PXn6yvgL4ZZG5%7^H5p3Bj;U6}dQWSZOCj?!1SZ6?`m^bU)G3dGq;N*6}>G z^IjN~*7Ips>wl>mM}y?4Sbf`{*e$7l3m2R)b=srf?Y@SWWjezEwYx0e3AjDW4r(vzP#vS)(0XjFOM)uZyV>gO@*b^9h{^`c}&O{ zSoKf3ZilUWe5W!g(@9|mAxFsv;3F`MLg~Fq0o8`@bpe6I;j)Oxs1s0z#L}YZxU##> zyHBh%Yk~-k2Eat=!656T%Lt7qPYNR8+uQBDr&eYYpEXBUzsD4mxThhVyt@$%`XPsD zj7E-ckO@F^xg1J4YDD9Y*|i(PXL_-x8Yn=(THrZNMdbEO)XP6CBz%S6>miri|M6xM z5RXcY&K!?3H%uXTe_z$=s884=S3Y9=-Ur+~3!gW`&$pB1If;~L?UieZ3_yzjs1gx5 zB$C$H4qP_KD2J(?t-kH%0oa?9gTtt(fcf>ZLmg&}vrsMDK7|%)O?hf+9LP!)6|S6y z^3a`4Hmw{lk#+EV^w8Zbzk&SiF}sk!gfhm(ZvW*kej(9`DNCz#5^5Xkbb3jt!96PF z#ay&Al_mUz9#NergT;A~sPcEv0r4aD8Tksyd%Ua$RH%4J0xA+HFraqR{jPSrl_0F# z#e*{{;PZZziP!Zlhg9TRK|&hY|1)7tkkb>Fu{x>$(!*SxH{;l%1_rf{7JcYZ+GvHS zPR2qvCh*~*Zo67SN%Qd8t}=no^G0!xs}zq{5nKvtc)C|8;)eoD8BN02L8ecS$6@ZS z!P~dD6j!qm9CR+7TJ)a%g6=2%0r^OXPMH6>r~|aoF&(&{=aJBS@CC zO-KvD3hjBX9alNKtk>4@v+nJ!`x(BWN(5B9#$jyMkM5fvmzoiqg;pA0F90L8NG(@}gdAViYDQ;RR&Z;B&(?)JgUJ9p^XqdPUp3s5sJC@76ddM({Fu#>V3-9p)Ep) z2R2-^bHwuwv7=I&@ff9OK|(@739~GSsgSuu05BdPP97~C0xj8G1cQy1mr{xV&H zG8LOAEF@Z={)YU0zad7{2^oZ?=6%aPzt@SPp&6l4)uVo|TTuHksb*xex_?aXA7)WMw6g-H8yRurC?w@8M6R zgFJ0%#Vw~|p!C34Ieh|(m^p<7tv`&y*`5HvGJhYsbNMU|@;T+LHCbL~PIhBnaB*=J zEXwO*aB(4`FMPKMMMnZKNNV4Llcg7ppb}wLvBV${WwRemDyL~h`B(ga%8yh~aUf7! z4GKzkjfH}sg5k-c)Xh#?5pnCDKa1i-A8s=W8aUCB!z0BFv&22- z*3#0b`YIRnO;$C`#H;{Ut3YQt`5Y`>?}E5smyQai)*Gyy0X2-AWOM0qsdFkevhWeV zLWMB)vCp6;?%jRN&gSRyyPyBPS=9faOskTsl4uwZ&uv!mgJ&UqPb`@5-b~-PN{aq9 zW=$mnFeKDf4!0&JZ>7gl0~|`Pl5I?erQ`@OT}xG3I@v4bzd$Q&ApXvU1>ilEzEbHYFY|f_|&aqz+QUR#)DQ!aX9=6YJ z3(oFJ|MHuOYeMlJ7xR3tJ;g3<2{bcR(@_!705Y~=BTY}6M~+|bOYJ?xe0C;8;!b_9 z2lOnWA%!l_cGcEB(gdT8ER&o`S%O7!cZJzaUD=&oi^lmFZ(Q_s-a5Bdb7M$=XmCs| zXr^I^o#s#Lz__{Dm@7!syu9n(F1fwM*9ncLvZSFVZ;1-Kq};2=Xogs9Gs|oR-^4bt z@Co21GL>4$s3*T)S&?WwgSxylY+L8)E&Et;Pho~iI7{&UDp&Xo(7zLyf=d%hbkT+M ze@vYicpCL=q(9CS6v5Jv^|vQ|YFC;abIdeAM=43`xP_4Qhs*C>r#_TiUL^=#2qXVE zyxcm99H8nQ{{a%^zmwc^{sEjR*(@kWhNPc8?F&5*irphvQA1==i(lqY#ID3dAHC>i zLQuscT~fIxTNZ_QYrIb0>hx~68c6s5_#%2$f^zeQ8&FUvxmPcmFuUCcvCX8DGmmcg zp(bB(?nFc52KS62Zlx+Y)L7x28506QAabcC83~Qsq2tJbF|v-_J27iZe*M=xPU|fm z)B73j9EY-1{Hi45w~+6grLUld8uhzM1`vXmD`&Qb}DeihVWIBFu*~4MP{-oBHYT*?`G4 zb>$T2{Wc3%zgcFfZSFomG9bWI7mOC#Jffbt;p1?drjq^e*!1dEe?kZqkFvp$#V0lN z!%+4Qi`TOjNDxjjA)nnAoewKtpXW!p9`Xd5J^W6G>}!Eln5(b)q=RsP;o5d*fz~~r zZ+ycre_RwJ+{tME$Iod`&l9ozFUDFYM#a4{zRF$rO`ZN9ih9vlZ2E-PS!k(ZpjM4?Y{TVA)YiE}&QImB;aIhGaEFqr2g@wJGFw2O2ec?V*O_;|IUMbS*Jc1!x@4B|X=Gc=9$Q5vVKR4v=%GK1TDBB`aS>1tt`CNwWyM5|2Fp7M_ z^Y88aHRPY(%l)kv*4J|S-(&i#cn(Ap5C7Je_Cfz9&wrcZc%_?Kj#C_3X!0Da@)#Gl zj%F4D8X}sSI95E1;WN6+b@~b)_*&QL@YMN`EBHsD_XVDDtx|-Um8*`~wvw5F5X7O4 z!a7iW#_Ce!qp1^&6u!d0DjDCGV(%_k*n&rNs}Y0ZiTS7Bl{hYc-QVz8?72F;+pxFd zpPUt5>V7`{+)Ic;37L3H3>@Fpd`_yhDOtF(v7~Y-s#t&U7O-Q3xd1E5+#5+vEsGmU z^VF&P`vf)ZsUZ+?`3g!5NyzBX=p22R${PXy!PX48B%Q|=J;+j*EO_2m|CP9Uc9kH( z#0RG$+)m3ztGRVL-o+vf>4S5G8y8zc9!Cs4F42kFDoytCdERnbE)GtzXq0|uPUUYT z<+|y_2q9ATm=Fr@KexS4=Yep@^~38nbN+r+<(me}JHnge#mfCGAO`+R$!Q7FW`9QoIh1v{JPTE&PaPFcUp3~lAHFUvBa*fZnx`u>WU~^F9SNE zCSnGSsjJQ-G%2VxkY|?rEU?Ys?kEMTFrdz zz^KE5(V!OB9=z(Se~k3a%WtJssm;*y>hYL`R9cb+lwVj_f{pH$Px0C9Oaxo(mvL#@ z>B_8Fi8s6o%Z$JV5K;N`zwhRQF*`yznLyN?!P(bclb6dasle!__<4$_$tAxlY_W#q z_e1F`{NBSSOMb&^j$M11%zffz=F)QaSrnZY!4xk{;A^<6kM(VAP2lAKLRYFl@XywV zvI)RISQEFxoThkWMr}g)$S*yU?XFtgm*=&%t$H&$nm3u*p<3lu`&JLm#qr`HsPaou z0Mj|Y`PTu0J{p473#`AgyiGvyeT6%%EmVjCf0ZV^zJbUdR6e|_4C<{EVcvj>8vd@=pV5T-7qZO0z9nZ!dX!t(s@PxoCv0rrWsKW{@z;&{(lF3iG~=g&K+>fMEJ79 z>opVg6I#77!&`Esk4{;rJlpg9J74&q&N&VtVWajjo#Y{_$W$ibBO8o zj%`6A4Zsem*tt2yPNVlDot_LRm1X?HwM`e&YbqSlFqWrO=EbLxBi3F^4KZBhM&}?v zNO#8bx}n&NemX*N^y^CRp(`InlC;jwx@0eXzR%Tb#%=j)r1P(NX7mE5jL8q;j`-i& zVq7B(T(N6$HKpO&wxncrUZ*h3Z01)7DUPcd^0aEttk0RGL;z!=SC`jo?tt+5$KTMR+lD$Ky9*&D>dKfV=bZ*7JVdd%0^XpCgo5>#ncx2q)q&xC9+z>cVKalauvfPWnK=2h^*`#> z_8iC`fPNN-dL#K1=zst2%x~@}@h^XPP@VAC7ufS0MV@Har{PJR-WO6Q-$_gzJEbtp z1k?(ys9o&GO&Kx&8{DR*20RI^(3BREdRC#2XRR;a2AZTT<;;@eq<4kKI~uFO2t^;g zFTz%OFAhIAb=etF3iEb=ZIuEGS2{KwdcWwtCnk`{j4$pKEZcVYzAs%RN?U`hTpENt z3{$7;u{H3^&p9o_ix9-(v{g)G`dn?S*<7O@V#tRLP`rAVlDYH?ncWsiAFE8veo!g9 zd1|T@Q=q1(eE&Wyud*l%VChjd82b0_LIDE^j0P#n^N-KJ+%Ktoe*Rq;%gxRgXV4ZO z?(NKm5iCgF0fv9- zi#=ok77v9oorX5KcJnW4wvr>ga>Z;ZOddmAa-%6>J(fMG$=Of{mhM90zw11{SY6wO z{^9S8%Q`A!?VC)U`hW*^M!~ zImXJ>0k1*G4fe8v1g6YN-`ybhBp87xREp}2D6`npQk+P4dcshxYA<{;0wi$JnT!!) z*5ItSr&c3R7pA9MO_U59l4dV--Oq~5w?Ee-sBVFhVx_`X_6%CrJ$7?5j9K~^Z0i2l zkpeJ)?$7HxCjQSCQNak5_*~!qKV2B#M#?7)O6vxM7^w(6%fpKcbs$#B+a7M9s=e-( zaKI#ndC&H~y+2$EFuD@oT*@)?a+T#Ts;k(0wzm1{DmF$h6^#qR1mgY3O8l~lBK9!K zCOmV76#7yiJX6d$TY~8RHSZL^53Yw9wwQ`3>=Wt>rwpO`(f z6%QYIG?c&M-qKDks&L6_O(h)YCDm)#xe+KX+l_golvOT758=MkvG~#8rj)cw_JEc8 zDkQv7b1K(JJ_)KD5U5v3d3)J&AqMwq8!nV{PJ6A3HwFpE8&)F%Nu@1E^2gSwzsBo# zh?cupC$id4eLIpcp#AyO-sr2Yow!y1eM?=}UD(xy>kttD>NDs{#R>^PpHHx$f8Kv( zGImaupuaRICGxR{?7tX3tg#ED#V>H1`Quj%vd z=Tttwjm29fo0yAR`@}U^#pw=?NVi(O)aB* zpMqAx5F32g;%Zi&KPLB!tbSJQ{rN5Kb*@(ZP7{u@!-DDu5BxyBUd_`nWYw?FLA8IuY9!M|}A_bbMztU6@ zE`f$p_CdTHU3m3Uh2-N6)~2>b*K1uCR~B(0@n*SsdELAFq!m~D29 z9`Bc6Y~kzM_l|{8oS^?*ZR5>mcpyoC@(R@6{6(vHrO5SH_7on@+5B05cbz7#Tb2+A zmO2GeZrw~RZFoGLZhti8{`@%AwRmm4`7mXGNIUdPo{=eRn{4n$p8vtN*u%Vtn!%F< zY#Ou?Ri-5m_|A?U7CbmODEXxJzD8Q|y$hGj%FA`wxc~lJp?6bB!iefp5#bW~OVt^e zKywbM3z9F;iut@kBOQJ%X5FXPj;h5K4y8;P5V^=}w2_5%@V8Gp7 z4?0f~Y9yF5o#ON4)Htk97{(}iwc;zEETulXyFBe{Ow=8M*kOF`?Fx=I_+A{5LK!1Y|`Ij|TNtDkxz(WaK;x}Y+< zH)8wqT1DZug127gjF*Y0?UZxAd2M|}nY+Wx+C44GTGF%X{y3bHlIu%gX3j~Hwyb!_ zM5D!r%l^6^41Tu5HBpH9wvr^2M$+m{OwxCoWGiC4vewte8##lO61-ii`R=`h(~}dI zKHZcv+NXBLLK}7&sM8Y@AhmQ_xgRS*l;Ti@{vS(k{Em_8(H&>(JavV*Whc1fY6e z_Uv|lNR0{JW>?~>v01VtJ?EB!Fh4De$yW@j-RFtj@|8`$wNaWlPTexvs2Iwt#fSR< zL=$6tQ3wufK=TDhfYA^T!k0%dGV*+mQqI~P=hzh*n(1(;s31G*>x#XEE<94+YaQ^C z;_r!PyEOL z1Zf(JM$fJKgE99f7OoPj1vTO}vv5-kY?;4fC=>wULDj+GvvDeWtBTStmEU z3^diOBcpl7rW%Q3jI_#jqF^AKrVw})!aRy zHm9`?-!8X|09Nn|KMcODbs+uTGA~w+X&Kbzs7cUe;T0|XAg0GLoSzkgAdiP4U7HVY zok(I+0YB;i@f^tE$IApb)mV66w*8-er=59ybefMUR`q8MsxW!(<5W(B2MroIK;W2S zXK^xqkT_-hB}I?b5}!#M?Wp=JNwKV>B(#|EG?a@=BwG=8F46bU^Q3x$SqvT_OzGqq z@Ua;kh--ore2dLsddeM)G?kJ#wjJ(tyt%8$!ze8~t;&B($Qr7F3!I%lx$iI#szfvJ zTF3NL6v~WRv?p!9eyIJhG{-~EBVWBoPjhhfu4FVb0AqYe@2bDeQD)Suad48L1%2ZD zvn@N^DE(kEp-@Y!i+p2bQCt@UWnPFXT*>fbiw&0*yrTBe3|Sws@VPN@9h_R~-CtzD zP|8Kb8_k8^=fOcAimfafMykk3VH#5{b%1!E&W2mCcISH0?z?~S;*E;jFk&3+^||mK z;GF(n2r+JO+XSitf+%kvwk~2bjHiEfw8)~a$rVc+w}Wv4g4yragCAZlolemo3Q!4= zQ(g&K8Q|0x1{x(>t?bP1nAX2fPXLdrH8IUoKp~@ZPHRn9zI8n;<}H~9@)us? z6$X21l?J?byM{GfN+TTZKJ?diC#;hZy>{D`YoXj!D{e+Kv${*GJ-Q4G%1Fg(8RiPM z*FIIYgL(R&zU%WcEf&gd1hTxgAxB0)r9_3468D~TPA)m5k8;j^U1k2FEQ6STi}ClP z@SA99=>Zbg$T=euQe1LP8noA;cqrSCivD!5T2zP~=UOAx)pdI>v08O?%Q}1ASxfz6v^3pb zAbTCZg#G36)5Oe7w&o7VE&r8z$ub^E>M*co3wkMo{*c3&t4^IWxkQe{M5a>^5>7y5 zLEGZ@S<_1ce?J(*c!bT^z;acM?mJNl&LI{|dc z_oQCK6h{Z5D#>)ZGh9UFN!6=pH*$8qdbBdGGLS#g2&axN_}0DWRyzcyT+O8MXoTG^Z=c^yGePp@ zxADXQLBi8;B~GRvUNGung6Xr_e_!8QI{)*(hUU3vdfy%eF5po(jg}dEbDb0rWmD37 zlx0kTZ04w&Nqydj6%ayMut@PZ;fpQe#gBy=-4QQg-p{zJDSjO9%1@GGq6^pI28hc7 zOp|ueUqKkjmzT+rHBC1?pHffkEldGaKxld206_eh`!A>2E9aIVed7Sg6MAx_xB_1J zCLWcJ5{3K&w%hUXV*YI0daXNeRVbRyTti__O|a`uC#JlSpk@)V)`9w1P*Ms3-%Vrq z{ABLL=(-~N#z%fRSFr(U5+M74^N+)Dbpl1GdyHhE;y#3689Zl{SeZk zu9xb6SldPTr5`@++>|1CJ3u1dVL*?g-5Q5x9`07& zS~>J5mIp2ZHI{Jzj1HAhy-rp~huGB6bFQZTh2kz$wpLw*TB+3h++ZXL3Sd}XHm19v zwdfF2euJK$^Lk{XTy6fc*6GeH(oS&=D^18hsD%&30HUIiSJ|YYGwBwR7x8(yCB=3Y zjLiEsUc`pBIi==sLJV`3ldmOfe!*aQF)P!j2w+naL|K0p|E>Pmc+O`$wuLwD{1*oq zQeBt9$uNUbQ^_{NxKhVhT@--oy2!@SgDw_Q9?F7;V1?E9^RZ)a+W(}$Ik7q? z=ON6%$!qP%am#&$H|u2ub?aheH!8S5U0z%jjDD2;I;_gmx44H{U~t#Z)dqY%HIM|8Gw<$eYYMvTU@z@bYBG|Yt*cLqyg5ucJEU7?bIffO(BCI zTBopuN2?iU130?VCBv9zWBKLfSVFPnZ((vksVa}}fg)~p5jMWhca3P(I*XS)r%$Mk zAFvo2IKs2U4Z^Fq%8y-5 zy&Cu0(U(AvNBh1ZhMHVax7&s?>|aCC!=sj2e7^lvPJWYBj>j@MO~hEk@Wz^U03{CL zwk0aCPgqQ->FE4qV*M>KoFe_lQa|g#b81{RLQo(>WbftgK$XvX2@J*FL8l9tCiLt4sNuUb0-n#0{BnQ>O@BLw z1_`hYzUCL)c;oWTW_x3e1jgam@)HiG{%G|Qsu7Mt%@5x>Cn|&Q#ix)%#RF#M(K`>j zCM0cpoFedX(L;-h`ALOfNN}$*I_}sA@8&~T`p2<;EtIMa7Tg$Jtg^T&qa$DENSoPe z>zZE0Hy(ZZbMpcEjZ#`c+=M}z$R(ZF#lpL>(`ZPP7~ERwRBA(ym_m!kEBr~Yb-Nh+ z=5S3~?bcu2qp8tJZtNtaR{BkfDMl}gpr^Y?!EGApeH$_qfXoa(%F>3F5yLn(D{GKL8yoFP#YM2H(&@rkc-73a`zcIjd%s;}a^mQ7IZPOtkl>fi=}RKON-Q?TwM{ zcU%?f64S#*!R!<+jQWbu9q>bcF>nyy1({+|0nk z>XTCOW~)UGyXWw91iYp5RLWhyqVro=QRUa%3;4Sqb@^5??K3GEshtW;r4(n2wt9G? zM6G5S2t#nTW&ipTL9fR@?MkCKe9+mk!uNH5f$yxNb19C($K~bkoHdY~y{U$=iD=*5 zez7_u2X|Wwz3blvg>T*41;punRWD`?K>@a*1Z)lfkwk9MsljqV-1R`#qv^0 z_=nicBt_kD5MkW)fo_&zaBpG84az^>Xk5o9Bvh2l^qPkdnc4OrOM4kFe*2R!S)3)l zk#K>ho{@TU;fi1H(oq5gfHRe%jRIF#yB)VLj)hYd3iE+JK56NEJ!omGHR{^`K76x^ z_N)snW>3D_y=^?ns*!LSeEwhLbRG3Fb_FOgvGG5hTtq%7G`>uZ{@Yn%+-n4zd*|>$ z!w%nz+>JDATYc{j$2VeHd_YJF%{gJ-on0<%h^hf;c1Cl(o{R6NhKml1sjv0ix`rh0 zy^K-J1xoWIXBnAELZ}#NOE5xFr72b2*7iq~jpvtpiB^m7uqdlH2(Nl^1(nAy)xFG$ zxoNbnn6T?#!=s`$YuRB^1?iH3>2{M>Y%*?;9CKpjQGQiPYI3o#22fQgAQY~@SnH}I zEt5TjC6#JwM#gK2mZH(|=1wk|Q%&7uSuj6{9AqtcWA{Ji#WG@h0KO z!j6>{hDgKUG~DFHRYKe>;!H1y*PW&z+DvXUKZdopGuVa{)yn1Kw+4!g?NAsdtXwtv zeZ@+<$8(M6`es~F_XGBCN>c&?D=S_WNZN;u$`o^68P}=Qol%J$WTF~TFN`^{$ME)da9~usnq(s*hZ=DL= zYIl7z*qlTHH?H$Z-J1XgJoyQ8&1uMM z+=%m0BMOoQAI@1%3%mX*M+efpCeREI8Ir{-Uvuh7h{+akjfG43RKY*kopgIW#)o2* z)2h$!&!?UKZD8c!7Lb*etr+n)gtt9}+rR4S-(QsViu{x3SKCkc;B*13e!iYlx~X#} z@iCqqN=gXYIDPMD|3sSk*w=QSZ56hi83sVmi5NW+41(0uL>8oY%MHvD{C5G#=)qtn zdU*~DLX!O&uI(`6crHAySe-_|Dk_x(K#C?tvg|s_ZPG(CuI#9s*Wi}PNp0L-e9rqD zW6#29OtgX#k|7j1-)>r6=AF&(r8`+QL9li`trA&jw^T-4#pN!4=^M|7h|%s!Ogacw z6f@!Yuj$3oFpYEG7FdA2=2yW=R8*Uq@ba%ep-|NdAyyO81R{+p^#x%=RJb>RnKZ}@ zEjjn(W{06tvvz+_PiMM^JbI}Aee^O0Th

YmS0PL_I^HADN69T=F@;`+$uhQ?&D2 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%0DP5o8uVl6nMkbuD(y-P%@C+6l6rpUOZ0 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 z zvmM9kRaHq+mtsz$P^z{H z5vLMSf9o5sf9uP46PE?1BJ5HtHQ1TtPD_c%%H~1ucYpN3y@#8yChTTwWq1^fKwZVo zU;y=PmGXaD(qJSABV6uuB%ISwfZmz||LjNTu2TR_$jl!;>u!9S?QalH2@kK~_|LGd zf&!{gW%w=By!tVG@>DMf0oJ{^-uCAoBwJfBs=cmH_Y$}KpM3G=Uw{9F$4R{EyCPs9 z8Z>xR@`MT~xonZ70WB1gs-J8p|R$5Duh?2#DEQEio{0)*)NK`l+ z#yks+;I7!M$Jw=i`QBgnzkc$k5?Y~$YbiuEHtg`iSZ)X_U>T{qWWfmv3ccVdyHhk9!G3u>2sk8q`= z=bZ20_zXE&W2`xz>#s4GI0bOZzu_r_H3dIGxd>9y%%z!Qb;2zie%tqo>a{cXq4^KF;9O zcUrAi@4l!gxw5Lk?9?1iVIg#;%{<3tc5~CArBP0VjApx`? zO}QY&m<5dv-(VI@5RyiI>QS8qysDwRa_2e=udLw=(}Rs|=N+oL#vtmv?9P_wfO&xu zxv5P328364gaZ#X?9a?Ma=bE9`Bo&$bj9*7|H>P`boWM@IfY^Vtkl6}ngAME^Kfhb zzy8sO54R3%Bv4;&?+=hbqf_(wJ%9V2jB~XFaTLX^miG$4djQJxso(e$(bRjdSpxO$ zVC(Sl$Gxr3)pZG|x}52#33Y{%WhhA>sFsugRp~vwqdKIAJ74_5?c9g!YOjm*kVuG4 z&*=a8;H&@akH7NvvsFq0Ng>(5VwoTyfH2tpK&c`)Oz^!QJ^A}PYyYojS9jA$=>QK^ ziqb&4>&cT}7`JQaMU|QfydbyR>7QK+ZoR#V?-```dT)NhH*a0HtFbpUN~07i-~$Wh zp{fq5P@i*26?P^thC$t@MbKth&0PSd+@0ACFi{d^tD%CMrBZq zP^Kr!{_t*lAMIHQ!B2K>;$~_8xbg_a3Oz6s8qz=H1t+ ztPjGW7ZsDF{?=Oizw@16dgb=DZkmCC9O(P+EuHfUHID4Z>pTC=kMHdqB-Rk#b3h>+ z|F}KN33&V(zHbKvblM%8YoQ1ZO11YOd-`LFg<+w~rRnyQ!}U*nx=)It^jI=#R05#X zLY2k8z>yG+a8Qq|yZ`uu-o``Klo3JD2-1w2(d~NjyIWuWpT7I8|MJ1DLwFdM(v_J$11$y`(dH7@9x)*6;#pHL3kOnlM zQ5aRDFiLA|E4DT>SO2qTZzXKUID{xb1Zz5Y^_ufOT3F1f=3F5mP+{%{OJHN@Qq+5I z_x1nrz5nii`o)(J^&&|LL2g(U?3-9+WrNWWRY5CJtM}}ExA6;FQ`@OpNV@{kTD8kJ zocBWxxO8AdOy+BQWayjd{c zUG^c=iGOH5p(I(BxxvFwCBZ|q;yBo`9j9;;?PeyHt{&41p#yC>I=hf`-lu6cEhk2i z9Uma_a$rR4RK>`H^{0FL`$h}^fjH-H-MF!~yn=p|z-kI-3mwY$0(H?Td!mtVN{kN)~st}nNeGy?<* z20IQQf2VncjJ5CFfBJhr{rE6-MpV@U7%^%XwT(Fs_GcJXLxX}XB$t*t!80@z3Kdbm z{c{|AN=DvifWmvt5H6T_?1l!-_vcrUzOuK*ix9mTrU9`>eP7=%e1|16eW( zf(9_Eg3Obo^CAhYKHj_aH{Sl%fB4ZG&$_KVCK!Ye3MnK-C=|jdpx=FG`)_^G`Mb|n z6CcwU_)x6i`z8V-4}lTYgXHOZ$)g{z`_LHBn4H@qRRu7BKq85k7%kBlL-YGj-~4;` ze~FP5O+c^ofT{;n)%(1r>H#GK=>s815fQ=|HB0PvZ1;DcyzxKz;2-Bs!GBbx(;K;b?98L z5W9TaUVRy8sSC&4Li?(B`$Re=#bPKJk)ZmX3OKTO8y)*+qGT1!2%Ty-Nrp{s3R@3r zY!pSnh$+!5C7fj@sn}%I@pA)jXPTKf^r57HSh6`unmO+<;q;e+KxD1fm8zPc|sxy(;0HkBxohrI);V_S>_;8Q@&nx!KojaAsJ%xpN_LIgWr;p@Z*7 zZGsoD%ncfpm~oxnh;cobugQ7$_O&Q@7*&!&;lrof&im8JweCCN*qvU|`TQWs>`Bii z860}8+&g#}j8q!+?%QwP`AgsaQfy4-JXy0P5ZE6Pim^ZbZtuw zFqQFMz4yuC-jjRj&bmYb0U%II8%tzCqiHI}7z*7XOn1B2`VZg#%D?^28=viW)Oatd zl3SKBFTIZ<^Zk3>|M*_?htIC0Dl~x0Ph#c%kRi%Q)p!-9Mci`f_Ti%+^)`ONY?s!k zh>B1Qjg_cv;totpX+TCuGT6U<@2ekfzi3tI0Wi44QC}E`1v4L^5ejJyt%wl{V5uv1 z4_^MgPk!y6djB8)Vk>5xNq%+>0NHn~&C=+nFa#2q2>xLI^WW=z_WM8=ltBUOi(Eb~ zB(iHSC~Y95MmjvdFh8G$q4PksqMOrOs$N=G?2XqMt!d_{01S}9AJk-0ml(m=MnyEV zQ^Tnm`v91oDYS^c0flV0;(~`C{QYdU@Q%U(jkM^nk%%ftdevT%P7MA9P^~c{ zvss`n_-uM~i171A>xaFBk~@X6#=P|6o!|ueJoWzz+0++~GP{tiJcvtBg$51!xO`5a zFUo{?QOen1F~Pcj&krV$1!Npr}?HF%SsR$^j8|fK&l!1L2isd+XhekCNRdsxHt# z<48ULg-ak$y7XXc=h3}%Z&M56tO*7KLXTE#rldcFwQ!z;o_`6@c_OJi^ z&3Ct!895)R3IU^HU^I%&cR%g@&7Zh`xVfAK6CPhZcvSEs5*Kfc1{%mP+y3zIi$8HY zpGX843u8_}(}7(`92aukd7uj4q@RS`lkZFmEv?m?weM zNRpM--jl=Y|BHKn;a|V^TZcW3O;3CTBMJhA`mZ^?79!c_@zNxMAldzR@1wt$J^cl( z8>8*8Y-EM8t1rMVDLjDLLq1L9fO1-j3iTd{qpPn-=cdmT>frW>q&}tUw_!w*)&~F8 zdd_q8$sQLq6qXMC4ua16ZZ8=}ju~SjWBvSmA)ONU%$oN#H45WD%`!j3?t;ya0iOTt zc-BxgBHO!r>(4gD80VBi552OwYQ=aRZMw4>BUQuD3xf;C{sf$X*f0J@RD%YKf)N#k z7k%*5s3Hv-G`RSvUG5AI^KkI$>e|ZnD=S{}nA=9o)_!;UATdUO;d2SIVOA@`vXmk+ zUJVUOr60avyka(Otv8^d)bfITV+k=%O)UKFZ@&7CSMNCIAtHS)s#roP!ttfZFjM`* zpMCPqhYw6Y+i;Xg7a`Ov5DvRys>!twKqtsuCg zYr;PxB4R`g#Uf`sv&igQvA_HH>;J@i|HJ?Ei?4Ze7?~b4QWS^IasetDD(6W=B~lal z`#Wr3`#>K zWn{0s$Jw-e!M_F$$m$Fe za~;oq#HmGxUIz+)w50lXDbPzYOtJrgP^`5x?ma zS&C!tJV@_B;rixI=A6`@4Vfnj7De+g@LKt@dYNK==h5m7e+DmLaWsg|VI|`4eEan; zzj!@KGl~?y^cjHifLaupoh14DKm72+FP=#xRA1qVYHD^4f~aHuPAg6IM&gsX1*Gzkx$;Q3z`X|1(CjuH%_ybW=RXv0-^qL&*tnaUX0pBx` zP^`;fY)mCdsEP?krwl+)fz0>1S#QVtM5&U^2icttH3niak%$oy3JFn&0$$-Mz86KCyUFsuaqqYO=kNUGPo6|#ccF<> zIC`b0htLxtgc%JWP^!{c8tb#&?!!Mh`0)Sdwm+m%kkCOEwa@GjAiTnK?3I@gt$ObW zLIov@Ro+nVb45p;S5?HKO|GXV&n(Rq988)of}x`Z_XR&Oa1+&^pK9I9R%&jr+q+^U(8C_PsE_))sY$ifXw;KO>zIM zP-BcRKT$iJ{AEMk(?MayY&_lC*xnK`>b!GKgs`&bYsD6E>!(&{QM=wMi*`-eBuzMhc zS3qFY`JJCjbcIVV!lyaE6O2v-fU57g!}V@&M_O0nwOgjOEY^CjgsP}!S#t0!-FuWB z>>E+gKuD)VI8s#Dk0?c`>Wf}-O7EQUy{_@Wu;u_J+Q+Sb=NIwQgS~(Dmv^`J4*%u< zy8FYYtKJ$_1C5v;rYa2Fib!|CvIY{tDb;}%3QzzKP!X|3O&=eA`up+S--xci;XDK+ ziqnZ=2p5a{`QexUqmTFhg*X2=HmO2IbI(T(RHGhB7e#s?aq_dhumA7g`}RM0^twuB zqC<7TwoDZu#4w|3K|(1g6ibLpce+nM$TmMjwgV$D209WxoRtNNDpaJiW|wZLv%hy-_(yzX;6h~?11ZLnAMy>$|U&9(j_U$h={^*@gz1JuTOjc3)I@EuC3hKwS zERS<*sCuW>axUv7JrYoopx@Q)ADH;hdvgWq3ub|Ny9Eu#_x!<=?%`9gWtP`WYZ)$e z*`e$0rhB{AY7`lY%@PMyRZpT|Sd=Kpn%v1T6+T$uKr@#ds5)a~GJ`m0mj550ee?Sp zAG*!Y-hb3Vq;NiGbF^}*26-X#nkvbNH0pX_tP}={1OTasXoY&%`}_|y*@|EMwsW~5 zjVinf!3Zvs^l#mN>%V{dlV7{`sX7m(!g;D%Iv8;_j&{8AKY#G;|Mk5;^Yocvd|*Pb zu-srO1guw4GN-775-aGk&F;qg+2+TZ?$8KK;UuL$nd#tYRd|K8&B`^?zM?82ej6bD z%PPH_Cqvdtivl?pRWN260?7Nq`FTs?CAODMYndjt?X}+SXW6rNVpA3C2_mjG*nRXl z(gBrtaWQ)_D`PxK(=^L!k3uOlHa0Tm$n4LQy!$xvOjBhP>u#T6_G0FInr4{DJSiZg zH8WV;&sQ!+`SG(`@QzNg3Q&ZP*Pp)e^4*no+dB{8%2Ma{&70eMyX7D`TU;O&-~ttO z5irQ@&mo-#GolgHi-8joK#PfHxHdR#Jcm@vB4G5nGGzZkukPyAwVT)0oDb2zXsua) zvUiwd)|}~MiG&E0)%!~&BK=y8GM>;?5Oao%>`J$zYv#z&6?X>N2799M&N3RF-`tvhB~+9ng?ADl9n^2$j*n9@Ai&#r9RZd>ztK zRRq2)ulr~}>xj%2#t5PN@{3q1@PU9METbiMRwQ1bX{!*RS4lJ9{o)VB@4*Cnq-ulL znHErTyAQ2CGA_=uW9A1PLFcuXrl@C9lwd24M}HW7H~yMgf0&44kqmYF1!3Ixl2rS@ z)wdS`Ys~B+2<9Un;~3AfOeabC2vw;}bE-n=Cdq>*>tB20^_*q*xPJ8tDT9W4XM?j` z60ly3YEat<&yP~QP^;@%Owtyow2OdRL2X)T5m6z4p3~krk1YqF84ni|qr1Kf)rkvL zm@`2AKJ(q1*Opr?m!&zaA$<6BTZdMn)jMibxcLlEp#X01yK<3Br`|bl#2hy-j`_gK z|3QZqpQgX^`kmkW+AH2=ff_4pMWBW58@>_IOz{VAfBK8hp2o33>GWr$j5@WMPK){( zRbqneO#Wu}h4wH=0alk+cJ_9>_adSSW9arj)9450+Hd6EOG{G@uV8M=qk-Hp6a~eo z3LwsTz~|Ijo`s_FNsCglphuv=6HrM|c<&NL;D7-3z?fHGqO^4P3H?Ez%gN930o4*B zP!B?hH9MqF(LatiQSqvV5EhZ$seo7-qpp{1ecXHcq2GH1?ZFrt zDXf;z=g2rn>ZpeYq9wC@L*f+xs=i|XRuQ!+6LY_13X`9l$%A^(GFp;&#kAKLbyRF% z^XNUGBGiLNZu8y9U}Qe2$xi`8T4Qt|>yZL4I3^dipwJ-f^%CcNy(eTv6j>`WZ2r?v zVq*F=UrgX~XAEUB@E|x|mpJE>Va{tfrI1Y?|4S#%Omh^9sYxAkiaf@Gc{nE_A3Rxq z{qBpg2`5tZ#XGm!QQS>>BqwGt-?jSLul#4s@yrS~D)kF8HO;pe$74Mw7vTBfet4K5R&H;Ec~(hvZI^75UVV#H-og)y?ggGPO8(@DhShT9qM}5mpp!Z5vKmlva%JRzI{vM!&Kw+(B+wY56;@Y>=r-aEb zXVsvmuvq~Mf2LaJ6(r}}!j;TD)&%0J=#Pr`o1h`9cRm;;(Sw9Ua^*HUtA6`2x?4aB zXdY0j)X+%v%-vGMfGyHOJ#$VlFdr;g43esbv83A{`K-5e_dD#|Q16u>X`rztJ=p)t zy*Ga6rB7drKGR+lG4n|O(~o}jpLy@E?Ctezyf1(%JycbQ;5^ww2{E)0vTkqV{bb_< z-+Kl)8d1c^8?B_ms@)o5vME$yI%ef6TURJny(iHOk>DNrkP99v>X#vsH%vx zR#bo2F> zUV!r?uCA`$xpni?`}au+-q3PB{nRnJ9&>ER3#1q?!i;rF1vr7&HaIC3L9QAMprW4) zjf+$4sYM%sdggN341)&aa6H*~ek5u_P3gUlt-XD1%{v$P4-vDzwY%RlwK9f!v3I5VIUj5ZCzmR5`hp_Zt6TCu$3Ir9#8f9cv3P_EH`EH~GebJE5vZHd<81dP&pK#y?aE8sFT zc)%$_D=|OT6hgbH_n=V-)WiD`9<3~rs9MI6JGj4h?|1#qC&2>70S-d%W9pN=)qnq! zuck}V>g>^U|K|JO_^03bi+lU2i4Ljs;oKTT0D-4^P-xqP_MW}F`@w(Fz5hp=uG0`= zRZZCxC6}goo8(@iHFx*(qP_N-bZ&yS;7m)lt299wl>sg5HdsyM_C5;0BED{}zGiQJ z#aw+A@fEMuD+BA42Y^??E5!J0H{JMYeq?io<2)oHQ?>h;>8^!FUvdYURe@fTcvX<2 z6B>coS~KMRN2}&P z@z%U%g`JU*SJh^8$Z&>F46S)L?aCRa_d*j5wlLamw=?g1y@ZmRn+TKa z=}!!dE`24$IV#UkRWd5MCl*oIbGl%-F$1wvF@Dj3-`KwfMMNxBbs4C@j%Rm60m;>8C85D90;XlWw2Ub^{y@5#@7cY}s7 zMvJQT-7>R`$X*N=RaK?w$nq7ou23Sc9^Qpgmxe;sjvnb_R<0=8q@X?lgJ@YgS7hlb zqy>ui3g^OwMbohVq6(30<6U&W5L2eZ%HJ9oF(&u>%UmKZBPi@8Y35v*>_)sHtBAyL zlsD5+Ckq|-shGct_8-V~un1#54G!L!i~}^6A_7F3I`2Fw{c=?af9)46vZg-0!L-k3 z={-}$=bNL7k*(dmjm@pQw{N;M1@zAC8?lYjAVq!iy0dSR)5vjQ2Yz)BRWbKQI7SPc zcB4&@``Ou_231V%vc>{v;V?=7ok1sEI3bw(6LRY2LxTmx!al_t1Q5VWH?PIk!aI-x zIY`p=tzBSrsLh}H8HE%_Y-+VrfZluOoUu{0Bs0j_xR5jX_9-Zt$Bni2U;O54x7U`t zNeU78LU&Toys|6J=zGiqm0!N zcA0B0`QN0)A)eD6Eh}nIAP$jh@FhZYnAN(}(S?ktUogfQk z^Vv=k|Bavh+E@I>|M~tm6AFDdsJTRNmF&e(Nbh>-=10lK``X=rQASZoj&Y!JTC`QD zrH6vHW0$TnUV}v5dw3VP1@ue~%K;O_j^2mG#YMmUc`uu=$Q49rOM<#3D~kr>c;iFy)5PI4TBb^9JXQaXx@%oDnWZM^3Kn zlttbVQyabbav){ifalRXL!#loSeQcxGU%q1ueNcTxwl??o4y)(C=3U@P z>E&U_e8u1LK$!`z2xjmY=eK4;;&pc@6g1BJmu_77tzUU_t!27d1`+x)^ZZnjswzb2 zO>E!0zxl^+f8wDcP!EpvqFVSV9?A7|F^BZ~b}{3BRt#5Mmph%^eW&Vk$4Nr*2maX) zL4&0?y}Eq=zqItyq2?)8Jh>@A-A~2W1I^B0wU+zBPyi(100BL-eZRX67-`=?=Z1Gw zA=)=!TIg*fJA`+T2p&ogucYJwy@XV+A`I*&rK&;`gjSqVk&s^c_-**a-2S?cmb}kI zHADOFJpRhxNnh^TCAd`Kg`V(KHDat4mvp<^pC(T~(_{-0sGktPOAGE&D})UIGMveR zFj_I4D~wn3(_TK4eh<}BKZ7h;S(V&JP&n$Pl$g|ZuWs) zY4g!hH1G%!lcS|fEQL{tH zAo=9k*4FOM%_~=uG>L6=>&CT>&CTL!Ehy(5q{=+PAM?Rqw?Z=bRCh(Vw@BLTq-u}~Hd!=KUWuCzgFMvw* z^Tjnit@-gMPrm=&7lshzwm;+8ADj#OGk_CzQ!RT~mE=L8Qnez>ou%FVz0h0g2@3tb zfBFMaaQRKmPiIvLxzR$FtihOkiP{rlfoJbJy;;~@ENIanO(gO8)duegj10`ihQ*UePx?4S+?;$lyduP&KU1g z(5DguE#n;FKt~S|BSKC04mUncHt(ai4WkThUn;75U%0fieNt6VT8UT9(pB0eP`oO< z<3M4G=wRU%j6(ae9TZ3(7^P)tubHK*FiQ&Y3KVPwb%@TXWLJa+qk2N9Y5MeM)C3~K zp2zD4qFOOB;2ikUu|EJo=Y3)RGtv?YP-7d1Bd#25wv!BGj{7*Tr?l432PhsQ3iguB ztFr9k>IuJcOap-C?w=>jspgPjD6wO_2qU4nyIRYNmZY0?XkGF!v2)EpSakQ5(q{}bbibvO8{`*dsP`yEGOkR zHaCS(-M7DV_t(Gns-|h?6_i3DR+QnU00Ks!V!r#q!=HZi(Ar>vF+=_(&TV8&+)JMo zLn4H_H^DGPBWqTcmiG?!i{o4*4g9`)_9MdxORuYDfh@>PM#dDova?-$Gh#1Pe`lYv zgQmN>cVE*zAOip@{f6!yGF|~&FoIxE<~`J@bA-|eB~|pGj_MVn(G|0NHHuf<_5-*B zNa?30Z-D+vpM;8~^Xu=jbq&|2%?=@;mEcD?r>?X( zoT#A%!$fKeMTp!bu`I1gdyVZig)O4l z`QlFGebu+lD<>00IN^i*4UBaM_x#RBcGf`(lGa-G?LIEzbEHav441$7jlCrG#lRR% zz=%Xqf0wbs6CJ%lW}d1iUN!Stw>lpT-$bvPWLatU$MFfvaQv_OOs0G{BTn)(JAxiC z>C)Q#$81%ph&+7qZ2$GcPAgW`J2!8}HcDL3lm`a8J8Yp3_FZIAG=PnPKu;?A#gKMVRY{`^9?&@yZJ~jnHRMz)*G%lczfem1Xhd zR-N#1wwp$N4rgx0_Lu^o_s)4QQgIerqk0Y8U&|$VC82-r8*hB$wOdJ=_+a7#XmOaR zvRkWGkb!^ri_hQv>`82eTCTUNyL{F1oZn1!iaAe9I?w=$IEt1!OMCnK6q59w5EZ}Y zo_^QBart%ih4Be6ruzz_0e#2MgX`=eOM|{;LGIIs)ZUKY`2v2Q^zcq;DOTa(_tEVE z24X7wlF}@d5JC=sYGL|PQXyVlZkuD4u1LHJMhHg|;RjjT zYO4-(Rz)I}3amVd01;y8*VSLRC|zMAY@n`8QO>BLX2 zAji}+%QUwm8!}fJ%uQirOdx$%=QTIR0XUA^O2V_wfFsCtv;2>-&2Lt1HXb zu3mYxv2JJ=f2d5vBCL^4j{4=tv2gCI)&{4Cre`lILX6U;2TvPK6E~PI&T)Bk?!r8> zAq#qVYwSz6t|O@JM#Pwn?ajkpYR2x{59vAMG|Uqf)rd^8+5uGIoQte2j6_NmIB4P= zzF{;GGE+vvzxa(e-g@;`uh&ybustY4P(l0th$AC=N%jYCfBNaer%}tIezSEkwAJ}4 zNJj+=W|lh=U|3R7lm{ zrrUl1?Ls}Epry2wu_8p?0z$<05P8mL0AL8o;CJD-iAre*jY4bICIq^e7JWhQb2qXzhRQ z8sNNeIcm}1Il&l9>KcqSIGG0)Z`2U#b#-~=>gsZc&7@wPV10AjIX6oL-aM6x`NY`f zDh)ekYKCyOYtqFEWX>ywT}aftuSC-_7xP_;z&}#1Nq3x z`d;_mY8K-082@mT&Po`usMzz3Nh{rK*RAhhzxrP7tE|ZsWTKUY1{XUMn$- zt9RFe1+_6Gc>Q;w4@Ky^&$8_YWCDa!RED+N9WG zUXQPR$s;NQS*t2w?ea}VQMUU;vxDNi85xd$rE0Ez$-eX*r)|2#h>DWN2z+nr+UTr4mNd?O$lR4a>Z=)9(%OzXs_&)rA~SIKnV5*&hXkhrM2! zx#E1{U@8g{ttbj-dHQ~z=2hh5;Ha&yBOi0p)_I?0ZiXZ^-vB_JR8Pt7JaBAlkDA$Q zraM$sDBC-G4<4_-^1_`gO<#QB&QIR?h1dEJ2MroDSQs=T^xSb$?rdBXu&KFT0!*#N z0z8r%oC6kt-yB_1HPSc%1n|z!8Y(?kSRc9Znk_MQmF&yqUkJ*F(!kI)qq5fS?F zw}gN)sv2CSjuX9lhK7SAXM|Zmccs_j(iwTB_#iuU4bJx1;FOjqTt6@rOIT ztkt6W$xHs(3CAQ0gaE$Iq(VoA zbLs3N|Gq*W1)&uY^#|*2?*Zw885e0FZDk7xx+QZCs5HL`{cT8pK)0pYp~ALq{8D`7 z^)w4MW_?2rC_EtXYIHSDcOLm<2PEJ~Xa;lbt?0#HcN!T6k0;hxi{9qmqn~EG_dyR+ z#@iY(2_T>z>Hx!dP1>uBS1HzeKt15{YARU1OhVc93V1+ZJ8Z3)_7#a&J&daNs)VN& z1Z_XTQDwfGtPZ|WPzlllw8*xyXFs<_XO}%=#2Oi&hBr&7}^|K_X@Wp-J?LYRrk04o~YDfdy24htLLiG8-At|X)Pk0DPPq)SNnad7o zuC#7^-K@NrIS&C;`Z<<9ij|O7y!KMEANzx6La$EEm9N?t|FrXJL=BWMBIrJSKY8+w z`aM_)Rx+iT&wwtiUcFK*+pDI11$GHyz1I-#2goI~Y~FC%Y)ofVs2^2j#AwBKuCld8 z+wuypTAVW@b90k^tJcXhgN;g&DP(X3n~enpzO2VJ<_%u`F-@-38^ap=Y5)H z8svUj=NV&iU*&_z)Eitb0*)q*6R(~jDFvu1l#R{pCr>wTUA-2Aw{G0n+S>uB@WAxP z=Yrv)mG`7LqX+WyfzcI0`F_zFdA@SqP+iBs9J=6y1W-VAE!*^8gNu$MjjJ=@KxavO zv>0?zH!R8goO?Up33V_R5_<_s!QV(aW;H{sb+xbjlHel#`&y4?lSLgZDm%(3+tp z8M5?Q=xO{cOI9&yK|yj5ilug&JrO6{$0|5PyYaIntBD?ycH!a;;mz6uw3*S!F8v}yITAy`yAO6(sd;#MjCO>8s z970zcOg+4ViOtHIX|F-rfGEna?!h#zu(he=UodRtWHw0RsG(`GwQ4$77%eNUSE%!S z^AxSzHp0GCEQ~mC%`pE4fC>r#iQ&8H`j4zQrBu9GPl5<-@aI)G!fNe^bgdq5#1(O?~O$d;ke* zacA1uP+R`W#97xwLu4Dt%<1P3AK$!o)!OKVJGVak^b;UZ;SCxzz=E&J=7;B`nu~(D z5I_MJi21%iMQzYvcAWjD!6Ho7RCP=3rM0C_mStj$cMc*?p6#eAhfXidnBq7+;CSVm z5D2WeAk8u#N7G7`>+Bw4T>9-VzxA()7NJki6_dF^B~+KwC>IYMl9V_H{LO?30?8J2{Oq%m=N@Z{j(4>a3_1+?_4UXg5qKKOW! zWc6n7$O8llG6Y{|CDYMXt`N0_)0n`ykrC~Z>0B|bHI-N?UI8Bt*|A`q09Jg>40~e2 z$lO?#q*U$8Pl4F5VyxSI4+o!7SPf$~397~zBQj3spFpCQe@Cx5Gm3pUmyujaI_D3& zT`dn1mME$$WGjl1cYVp8p8l*->Bbo@4LBM<H| zbC{{;NB}ix&|q;e-#K*hM00-gH4%;-+_`zJ6-Ta@FcKqXH|cHebtwZj94Er@Qz!y~ zO*F4@-g{LeQbZmfZgCd&Bn~v{fAgDP`uc0Pvo!UEMUdtmgi1pSQZ+Jin7QBk>Ag=L zZAOud@5Q4$bkG0ke9B9NBKa{&yh5Rhb{tb=e}Aty=tqFYYPNUJYi4i!mfB_SGZ{WA zGTgDjoU6}8h-h+{ZGDDp4?k6yAZ6S-v8jYay(AFk1>)6eNx27Dyv4TeZe1NF732rnM@qHPc%4Fdop{sZd#L z4&GWxkHwo&W1IeK)exa?Rs{vbQhUk9PYhkbL}9w%k&(5fW2bRA{{d8oY3xsK$#&2^ z^b=3E#&KjsGIzsz<&CR<-slP8cm=e(aW0})fiM;n*+yj7{iQk|yI zKvfP+C`pz*c)Wh&>ebcdm7CYEJzRf+8XC93Vxmf^H)zmc9O^d<&THVzod8;_M^J+X zN5L_qcM+uh3@G_gEJDQrgq>%7;pSBV9H8DCG26R``-i<_x65$dj#<}SN0AVRe!R-W z+zpU3l8272T8SXHF;R#(howmV!Z%)f^QD_fnkppMmJ83feFrA0k(Fl$-QWGm$4@r* zqR5P>Gu66HWT&1tOlt!T&8*t8mMbfJ`+MGdV?;d^G*;aHr!L)(?);W(-O()NfY;@m zxG7FJ6(54BkcdzA-Lp@iT`&YVSF#1Wtgsckn=+`B=F!MtDEpe;qkjh1GwnO}g?}W$ zDzQ%lH#u-<%gT#U`-^D1)UFOo)K%zkd#KcX_}zc(b-PvL8jOTMOMj8y`d0U7cud+jX7{@_l0o0&DgNup6 z;NOUO;pVkKlmMXc$>x?*PZ>8cp6S!Y7?I$hXCj>Qh{}^P+F$l6RTY%X>D8t9uYCK< zx34U9lOzB&LCU_jkPoI947N~xN41fa`&;|J_mhuy4w5Ji9!#njT8+)&S#mb0(eY0$ zkFme!W-V0Jma($3w!62h-UAHB!HhMUtS1kD&)oVgv-GNSz1++PMOWn=P?&2GP*Ui- zJK5$Z&>jodIy5bqW!3(Zy0WpZA;uO!VjIcF)Ljywf!Zu_j54xFJlx~7Pkik}$?h?C9fjSCeo$sh%nbKvhKcyUD}#r(b(>^@ZCvV;iSgmPf|C09bg2>g;gQ zrnf~wBSOyuPNSEPKin?dA=@)XGa#QUT&CyNWf$GNe)QhA<9Ka($$L+NU^mSkKigI9 z??Rsl$4@|!+cU`6g=|H2$ud{aH&xwMfx!N_J8PYP>^I)Jb7iTQWnk{|x!l3l(p+BE zTKQ;w`@j0Z`+MCqj)(zg9O3T-@tFMU`Gft}^DSp?nPtVSt*(lgl6~_^nh1V7d-Pv% z`}@Wag2Ik+Q-)S}FztwW(+jl@^mH(s-AFL|^SKqVlSX|Ew_NA39F$@|IUci18zm8C+F zl6o+*YcJT<7h#uFweUbi=mf?kl!BV4qam^v*pbfd=-O-c$}7^j;Tbzu8cGo=|Gs#*KJjYOHXU=)=D_@MwQlZ71UnekUFmIhO{UeR1scB6n(<|>q`1zwJ zhrQm~((>B!a&d}q__7Ai4KCAy{NyI@`duz$aLFR;l!2aX`!E#L+P^ve^yz|Ag@4oYC25&9kmDPL}yhDdD zy(i9h%R9K_@rH6`b#-TNFUuU5M;NCVYSw%D19rE}&0kk@4ZfgA@_!D1LIBNn9{QaJ zlq?tqDJZrL(@~g$GNKaHVAbXUf)+@T-ADS6l2BQiU67zSrBZ#>{c^#11kR-$t-NU4 zE7{%?*WD&P389#!Rq1q+&CinuKVi&%3zybJ06f@Qjh1i0#Ol4mF=vHPx273n05pW; z@_;G~qh;w_k@l6`X|z}5q2jB)u=)vBxR@~t_E3%(<|9xc(@+|85QRMwMUZWO$aF&t zsv7@f7?C3M)uLg_ke@clR4A!)-6Y|7`zC_zI393%Q|Y?Ji0D*X_#qCcrkLT1G|Mn> z`m4W}JG!fDZQ%fD?EG}f8~$b53()SfK%pYCdvLJ6x%JBJ+t;qFZESBg)+Cn*7i!^g zK3HTUpam(|f)wM}IHmF*bE2#zfEHN_&lsou@M)fJi-RL+l1;BI3KV+t>XmjJC5H)( z8sW2@y~AEcInn5v@5mHVOXm?|)DTrov&_V?mSL(%1-)~>^wNz#^NrUdYT_J0^;$+I z3LKcv*&kK%hxZ=+=%YuVnxN>jh_GF&6px+i>l@%4t0%K|K;j!FlRKFJ3V z9`saC5JKplCLhyn2|X+JUBPxpsg=;`MK3ca79~F}XvAJ=UtP)$o}~vHNcX5>I%`?F zfB5;2#AG4Ne8CzOWmcM%>$Y>vE8!hjhBq5J<~X{LAo^x&hIZL5Uo)*W&sd?VV17_h z!mS)hK>MknYD+b(8wcO@U#g+t`+k_{yXmuc30HC4H7y@iYs?JCzv_y0DmX&&TGK|u z7aaC_#SEsSBSV4Mn7C^GQ>If~Tk?pgemZp=wV8)oB6!Klyvv-MaN9r|DvS)C|0+HV znv$K#Ygmmh+b`LyYC&l8aS7S~A8VDK@2K$MjVPBRZyg29k&Uy$y ztk1sw=AB>rrB~HESNM-n=3%f4YYrf^1>}40fAP*|k711D-xq8{QJ8`36-S-w&qu1J zb3n82ch?S<@;yeZT~=5&YxngJFfa8JpBPg_>@iA4|!kc zcEx*IMoYG{X4-2WRu$?U2PCzkD-ZTUCC$n=GxpVRfrip52B?kQ?#Fs?&-Bm7PfuP% zqM6TsEgHs;e*#KMH%ZbgEBNb*Q>21j7NXUPXNlT$#O2OO>{#Zqf>i<})6DfJ%Kn@^ za&@3rNhw`sRfhab4dz@+F010Vo3#ys8HUf`p)9R?{a z+;4pK)vvvJ3*M{dXTt)o6}TYH6>T;29{j_1KmG8Fr!>M4_Nl(ggJ0-~qLP>H0-#Qr zoT@QSScuf57gSyy`F;es(H0deOP$D?{euIa$B$C=pjgq&J^LZL&&>5-_pLjm%XU6@ zPwzo{Fakh5C^6$@Wm~-zghgH|s!|nf0m|$XP40^($fK~cG-fGS4ibU^`5xHd(Oi+w zqkuUtG^?%aEi0|8yXQ7PrxBEq%JTF{iKCU960dj{s2>z&L4}FZP$O$WyM+8aC0a9` zE4H($YBi@Wm6JMUgs`h)@cKPBqIHkH>wlATSHaRK9|@#$n{OlAhYZ|2vHMjhMi$4T z;tBMJK`|leyzlmsoXH-rX~|n$RU>O7J3jo`Nb{9)HPJ&12j8E|(wP9fYL;b{VgRE@ z!L)1=HKdR_B93D?YYdY?3#1^-AGM;HKL`(;@dHM=ORS)p0&O3=>pZSi(Z+`uaFTHXr zE5f~_4Dyvb{n4O7MS@`NnEMp4OpVgSOO)~`&JZl zMfML4vMejyrckNI&>h_K$sVtKOI_x-KLy3iXx6zZL5z7DOb zP9d3Jw*1S#`sJ5yTkK0vlE;zy*Yf)Loe^lnVe?R>PRvK7Mx092P{ zdmBJjhW*MfP@3hd%x!;IaEt_eX&DmA848PjxNIe;u+i!ZrhU!lSD>%S4-yO2mYl6q z*{{OLPXjN5-)og+2vtzPFnjiq_MY}#$d{rpzViuKV;ANbQ7;#x<}}k2BGNQV(kaJq zT2T}kJDqo~%XPG$iHe+7ENdpGGm_-UUB@>yV3KCJ|D$oY4^%^iQcIPMDZrRXZ9$}| z#B>g}7Ly3ZnhX?xdhb8@_|sQke8GtEMUaD|W_(s?*q`HJVLPZpO$N;5Y;7 zNJh(Z8L^EhOh7XyHdqi$9;d~*lc8%*V{lKTp@j1C3pb55xn+#u*6zOdUU;M>it#5Zz+N1>554|fj!&JR9(v~?KA zM5%)vze3aRoH6abO$Y&^!btRgnuj)Vq+iC0M4e_j@nq6OgeYJ_t}ZVxEiIFx!SgXS zco`O>!~t+XlQFUqufZ;>T4-pd@~;vOs-z`${J}fOo&@%1Vht1&r9p1|GmZxtzLg}h zuJ7#xt0e{mzeKhrtt;w1803-pSww`;U_w~3CDDp$UpLFQO#2FgR~=QTH=Q-xx#m=% zo>hIgFD13@IQB!`wNrfMOREHqBUk=&VLOz*+5&2 zUNL@1kn|phy`BychlBTvNGpzKr3c0kutg#B^Na&MH)gubFRb}DW@Z_cj&WC3Zz7!f z%w@&xI>m$qA?D-I2E>Fs#us7%SIYA%(u8NTs*1?^=FVZSck|j+RkwgG(V#(t1{WQt z=L2Yh0=CF>{`nSckz3}{qiK9B}x1dTDB`@v1D8(>yL%?g7Zf#(wx@`;UJ9NjG(^ zD7b~5OC1Kbvul4Zk113-r2kEy4;*RK@|z*f@Cd~o-%*3VaHuS!nj1@pIc32ZEIxD~ zn2{bwI7+sw6Su4}2i?OoNrGRVu+vQf=xUb1I+z%=0FZkQ$urD9iBA@%L!`kBY7{dZp2}^aP)F$vS|pC#HqDNNs(^>F?%;F3`-vGzh7;Oa z5k(PZ@PE7rn00j=X8EAvq&^+bN5n~jS2D5-8Z%*EFI_7!52)UXq3K z$zh~$1~WQ;k^p_y`|2w%{G)&R>z&AC-WwBQFa;MZ1eBx?WCS&~_9ve{{qDP8cxY@( zo1nA82#-_!Wk8o1w-t{Xw&tk0Py40%sm}ut2w|~Qy>s5H_dahuAxTzQux8r78>&mEr?tTEP9mv?wk#IMt#CB6b$*$BEs;J^y#~Bhxz$09k6^Ev*=L~ zTC<3LYB}^yhku<=Vv?D2y(9@{HN)Il?u?Aqm{t@OUmv9frgq*LuQ6E}Q+p9hbg93JcoWz?N^g9Z&Q0vfJhp)oHD zpsB>r@fOe3WG~0;Ke}b!U;%MCgzeOD?!v18p{iF`mt$*_B%>8$@oZ=BpqohUtYJzR zun`nd{g+xr7FcIf9kC_{=&E40$k?25ec?GC|vP^^o37e5%b*-9{lLu zV-gk~xr>*xT_ca0VQ|c^lkO~Uo+k%{iV|1ND0rsvs=XxbrHOM{N&Qq4Fh(L{+pX9b zDJTt&Tz0gw3c1|r#8I?=aNt~qf(N7qs%Kw&pTY04^(tfq-a|da&}8U+qKEel(}D2Y z;}LimN=(M1J9@| zS*3nV!7&YRY+igCj+ol8>>sU5DpzamrbqQ!0w`Q8smolN_IkZunk2z}-o-GkYXCGW z=gW(8U-UPajN?2lW+8xd%sOH;@9JW5v?!zc!PMfOz094N4pqCfY<4*soFk?UwLoX=D>9H|h}Q*-m5;(&=2kn#ubeE#0&k43_%vVQgETFVJDdEK=qzT(K3ShOKK z6Cl_vu$LqU-EL6o$kG;v<)x}{&O6uZrAZt`OYOFl&Tjf#)sbw=iXtdt8`+iB!(O-7 z>*j7{^N8$9Rr3;~mbz`-e~;OQp_T>+!FH*rVf_vwv2)@3W2L>xt2*z;c_G**}ohs1ZJ?Cd5aplUDwG|WDgI-c-bh!b4zO6W` zN}D*?OaTFNJ(%LXU$Xd}-}vS)zj-%JliV|mf&f(|1a1oE8j6-h&-vf| z$*1=oZbp%mtxzhrCvEHD_BoP`#^iJ-WLG6t<}WO{eG2JS_xAUbGzEi0?%}NR6G12_ z44~Uf(kxrm`ggYS}3KnFWwq!OwgSvPb_sf-h#X^Cy;re^(K>+?88 zfU#0wsOpPA?+O~IsCwqDJhA!4?KF)DQB9=q@|WR9Yrpmt^NWz303;3EVYcxTp$CjY z`wZ6*4OA_usxe|kbcAO)4~);dj;k9#*fjIL+v`otOG&ok_-F;3lHx$|s()v?eU3#b zT1HiqEE`Fl11}@LN#6o!x7T(QcwYQV zGru=DU(BjM96#Z?%DAcu<>AwfM^86ek-dH6`U|&j?RT@-8e#C>qUA)wQo)$QNgZ$a z&(uH!j4`QmxqeFHGIw=3{>Ojwn{V8?-b;H#e%d0q*kE62r2?JUY9#{+w?N5q0?|1k2SC*Dq z(Xg>YQPkQVVD&9WzHY^_jiUX7gCt1?Q&SP|-BWcNLZuAYmgHsy6k~+B!y;zR`+*4D z3J|8P6wuW+$dJm?f81&Ymmm*f9he+KNr@;ncj8m@l2(j>N}HOpP1O6G8B%~YSE%zZ z#)!n|Dg%A?>I!t*!xxfYmi zRaMn2&9W@Z(j-eW=khsf$l27$R!n}?qO|8Q#?e5vlUgmoH#y}74bBS<`*UeAUmrm8 zB8JXg;Lh?f)6DM;o)64_RH=vo(98U1kDh$?=t&gCtxhM7Th7r$I*kW{r~ERAM74v zam3)9xK5LvM-z|bfb!BDF|CtkeBwJ)!M%fnG;<=7a~HV*OE9Pjhp)JB^e5uGYI6V2Q}Qkf7@hD8)O;}9QZ=$T z{tEWnLjm@(EG;5`)!j-!1#CreF=Q}Kz~+RxQQT9r8Cbs(Nt!|xtXK<9lt~RUJckb0 zjg)_+wWfbDoZ8$_nbrr$mx&@ZCB^)|(!09%&bcge&ZTLZy3Bd+irKd2c-Z)!URd_0 z#Az3Av}cZIPjpIH@ZM?Apuqs<9tOU4K04|ob?%c|Gm$lTuCO?3h$Et)OGFG5&Sm?% zI|rnQ7;CMyHj1o`tc`;5-w#z(sBPt9ot5>aV!|9y`@>A!w~^r1!1y%%(u+6#iQoE_ zc4WF~B2utFL;LOu&__}9{^OnB|H((atYCi_6!v~`W>J!kurWO;xfz+DnI-CktNLj* zCwb8AC25);%_#d_J;^wZ;wTakg3kNQxn7cb=M)Hja3r?}!rsB5U0E^0;GDZ^|1v>W z9#>=y;k;Bkt=L+7(CsEkuYZ@KaMMBr3!J!Rj17C~MVu`t;MEr~sw?T6mMq;Vyzt~w zHLycnNNeG#M4?Kdx>Q|{!b*Y!Nr^D*inZ@Zrl6_%(C}O7ooXP2_C&#`un`lktYJR; z<8OTW9R3(oP>Au}FZ|YfRwnv#9%M=YMAn+|0l&`+ta;am)?SeJ5;Ld0UNY6^O&mqW z$bf0uspBk^|2{oPdet;@1ER~J*BTfxg+r)`1s?oyrUKD7f8e zL#jNTTA2Y=)qC%p^Uh_(U-e!?2!q_S4{Bv>>W<81!~|t$#%iCtx)gAkJLx&bB8XOl z)56>dpc0pS+HTO`xxjqq|I?Ti!b-NVhY1Ty@0@ck>2|}~RK!?gZ4}wa8f%R)B7)#U zIlo)`RM3vq5T+Kd0a-}EJ59?F9?4+tfKo1vk52enik>;w%~ zY5@AaJXA5P_0_1e9Q|q{bmYxI-72LD*_SS;Ly0LupKQH@Y!kwX%j7;Vb$CP4Z_Nr3*Wr9NkV?rN|l%Q^|XXS?xGN^nK_GMvIDpb{Zm(xAodFQ?Q z@P+sNL#a94GmW2}ZNsHeD+09cW237#XwcvYnAZwszVq^FPh<;1nKx+g{NePLaMfX5 zY%_-My?2SrlB64UcS$kE7-MY|i4kLrh!G>Clq!87gmjo|nWhblpucTQQfZKV>#bLQ z=g)i#F3G%->}$%E@JNJ;z^VN3!$&{4_XvQILdl-8uRMIk)Ur;wAa4y+UXGK@lq_`I zr=zD+(RPG9=p{b)g`8{m1eTYVmfD@bs5tMdQNToGsnfRB?(FZSX(}Ne7C|t{vNX+N zYZaqZ#u1PomdeAx<@!;l6~}ROaCn&X67?RS!bjG|typLRK}nKCFct&hp{`K0Nal=& z_jct4wyvp93#U?AFh-#Xat4W&UJWhavqKc8xCo;71CbzC158r20f-Pwo&ChZRkO6q>nEom1x5_|17K)` z1l039BcD*)pR+aDNJ^EPwfbS;o+=|$&^^U7P}OUd-SN&l=e?@>U`|_Q!NRj{h%27< z>>7jN8=fEbXIxDi<)y({qLH`Dj2Q`_F;A3pz`WGQk#*v6pHK}NG&mYgl>@5JkOPZ& z^)B;SmiBsw$k(eP#)vW2S|cLHP-w(ZNJ_aHE^{bjF%9Q4?sL$pv)*t2${WA_)|Y*j zdPRsY&iqtQ&I$y|Nd&3#`yV`f`_o4dQvEDeKgF~9cn|Cu*qsqYWNzJ<=psl!BK7 zpg9S_LTAjc4&moB2Zb2pl?vZ(w<8-K&>H+b=SLR<2Sj@B!%jPaV6dZ5g_`(FWA*k(Z-prT{&(n@o=U z1qG}~Y@%I5Rc~$Sd<|n5slpp&k7SGo(5mhPY zUKRVP`gV1=ElyJ`PDvWf7Y+M!nK26ibkxnc8F9QR<1{9kp><3%mo<2WchW zIR6n=dM^MFma9I?JhG&s1W`mNVyqPjRze~Y{)VN#pite5RKg4Twi0A8+;CoFW`E&V z-~8(9FQrKmY&pWouMm8S>QStrMUZ;@$@^ct``J1Tpw+-ch3-^0Q600N`s52{?Hdlg zRxpN0KeIkBNf(gb`^>qZ>jaCNRunIFI;vV-XpcJm_1;HTR+g7`_V#j;4gi@s=T(hx zjOO3pN7sRs`oIB*5oUy5b^oy2>-D^PQUL9A+SVEr@yPlagfLn{0M0q)pL5!UN)z9d zt6xbqKT6g&G8!sp#eZ+1v?+Yn_W(@=BtHlyw&KyJFDzBUg#CE)M8EC>R6)Pm)#ezY zrK;^Xg0T_A`b8S4EAmXrJVTRc7f)=~CkL`_!j)jOA^{cAvwB0`Fozz+pls5n6u{$t@?h@eR3 zv>o9e`^~Svdh`1JK@!YBJiPRIl(2zHg*U>3)c^5&Uwri7nFxybWh~gALX$mt1JedCx4L!(|@3LtltqvfW)C=Cj8fxg3-LG8F| z;t}%H@_i8)sb)qQYsN78I36INs=p4Tp_L{cW!g|V_vS$%lP$M>&lJ(=Yl}1Vr7Db} zJtgNB$jm}&F~*3o)&_P+!E0;F|AXK8 zQ+L*)y`65W-SW-@K;Q9megMoVqA1=v?ES&ppFLRLF{1D~Xc;lONyy3!T=E$s)frdQ z(eJ8`VdgTi_nDwRw^ZNrg-9G#G-_3*K-J~GNCTmvh+-Q>QLX`1h^nFNf)c2J5baj0 zmn3B$sKR+)ZS>I+%v@Xrm^mLp)E9J&Z?{@;9IMydBUR{$l7S*9R7HM7MJvpug3^j^ ze7%PV@I@9i4@)hWnkqx0-mA~RzD%+3fvsW`nj6g&s%Yi*yeW%}N>iHrSM59A3B@gq zk0$r?kl^azm(_7mGlmryJ)<_jpDHLe+q$R8Qxxv9X93B`T2`W<&j~fu4u^iP`SuvO zRNfID=yrRW%h*_FOaio`h#ZvsVd!`pk@})2$F=+DTsL!~Q&GQu%qQ`1{%dCQpFRa7 zA{DXklciOTbdW5ro4PdIt0>Q0c-zgP7r!WfKDJOlalhs5A?-0!%d zaW;pCz(gW%$`H~q@1I)?Ek_zOXwcx8IJN~)?IZM*n4mLbZJYVD!SjaM2Unm3N(Jz; zjFut(1eNzX@;!jsHFSPg*mZR&fF1ylqN-W1`?vnTzYDnKrR6It%ggQ7%2H>k9d%l9 zE4J;HZAGn4Y&wyBxV8HSKmT-n^T0~ZKxl=c&{DS^P%2P#O{zZtDar4FUuqjh!1 z$O?2;N$4MB(9!lDOn&kOqs17hVNs@_9Ti42-cUdyutH-xxB8tb!nwaJ%lZ_Iuc-ZF z+jjCYolu3)Ilq5!kY-uv2vv=vsMU(KJP%lHTq5XtfI8=0pb-h=6;$V(S$!p2dd0bf z5JK``azzmaG``&KN%PMHyn{~yOB0Tvh1-kj_yJNdH!7+s$pvEy1w1ulq1_V-^-y2f z6frkS8sE>g?OMOu(3+o+4~H;V2I^fL)bxa*_OfShQ+t(IOH)b`suLMgA)rRj@JyIg zCy$uZUg``o5&+4=ZjxrMv{|ezlB&j$vBu942|Y-nB|(|;bL{unJJPD8e9w`{CHfnVS2Li3@B8Ug?Ro-?j0WN9_|4IHra1O3Ta4dZ5+ibD@)7m=;`j^LE>9+ zWC)tv|8(#-RJh}19%5xwG0n9OmKw&?;!a)|=6Zw2V!M{$Qjp;kjne`bsoM+IYz4wRRZkoB!sj3=V({8oG;j2o`NaWOy_g;hV z@PfV~g45=pNZaW8S5vc$%olW9NhFnWSNtuK=pW1S4nAdh@C${QlBA(3;ftbGiid&~ z)&bcMg5!%EN?p4`XAZW#j=oei_pxnV$Nz*(1`fVec;1{srHRmeFIoEobXugWOYvsHCJ4dr*D0CTgTbS^|;=6o+nf&tWkcmP#W%n0Ks?whZSFW?MC z*WnL3{CzE_SC?}AL^g8e05@J#vZf-zAzN-+$G&)%j)&80&&$zMjmR~4esOXiKr=2@ z=1W3z@O?9Y8#Fjw)Gj*5jJ*Y9hffjpwXJA1B9eP;sI1<@l0Q>qX?B=qoBMkN0^`%& zR}^Q@NGV7kkYsQ_L{bV@L?XfcP~oN;KuHnR^$$xGaAa@1uq@Kb|1)T#L#kANH@`-~ zFO{3hNui;XCL9YHx^O7#(UKO$$dzh8nXw!|UmGd5?aMj^R%TQ|oj?h()b3Q3gjYQ{ z>?LWIo7#9EMNzxes<{&=)JP~O!VtPXK12w(fhacTY$)|vxaA*k!Q@f zpN2CZW)S*g&ZDGV`ldBGPm_~1#iiQocJrg7Wl|-3Gcaonb)zPS{Yjq~?1aHa82FwH z&j!s$(Xm#ur?CV+)5mx%ZQ5WIwKL=_clD=&=Mv9t#ZQif5}Rg zWe&$H$|Q$X@tV?zdavG(a%FX8RMrMYAB2!j_296ZhGS)<_b##p`_tDQ^HjIP)ynx4g3eQ}yp=`Q;8IlqKy`pX1S&b}5dy{Myk6mF*=v3n%q8kw;G=TooC+mX zJ*k1ifs)E#F~Yo&a|S9%j6&fFgwS~Z9SNi9u*s!>UpQ~ z8)(kT3``s4{Hc|z`t~)Ym7Er-R8!Y}3MCgbP_(kubD6BGP$dZC=x;;B`m77&eld>2 z{+!-}_f+)0W}Pq>j5gzFZ`Dq!^J0Q7O+Q|mikvDIiUVpe14b$0x(=LU6tJoCF>O`T zph1I0M7f>G%2M^Xcy1rKI{dz(OK7RHqVlkZfaEFj5u&rsZv%CiBwK1j21W7F^A1)IB<3U$LhZL5Ia>-UyFrpnF_77 zAQcD|$TH`gi=(Ji{&F*zfnC+UdmEBIw;IyGTmUr28Y96Kbe(ox)V^9N1tjm5)Vck` zZjz=#Dxlt5YnM7pB-Hyr3hJP)8ccu4oL?%BlxW#n>ZE<$-1?@oOGcGq)d!9*H#{p$ zRalfwK?YAlP=E#^R3ge4oa0atj3P*gXw*U6qDuv;P|^aLAMFaRp($mDlLk~DK}`w~ zg(4Eh5gn=3GI;c@hWgz-Liyx!QneMSq3m*x>J?e2{sw@ms>(oJ32f{SAG+@2NDL^2 zF;98@;GwX7wzS4tWBabs%L8`fJwlhmpptIQ0PgouVT9Bl2%{+v9>ohq8LV&}0`a8^ zFiDfc!>$sb6wFTb%A7Uxs>WKECTSifJg;f#%|=VgXgK?d@0#NK3Vl<4Dt+LTmsech zOsvgF?P_#e_FqSSC|< zP`lKv8;s2W9YPI#Fc#ycIS#!J-=P()rdC_4+kCF5&;#@f1~{EU^Dj6c^#2ni` zurGpIn=6^BnmXs4%d4vjz!)(`)T3b2a%kCg!7)!x45@d{`F^(r7eS1!>FQS%ErKwH zVkv|WO3;8-bEjRo18gFLrckFo14R)VbhF*hh_r}4MuibNRqvNxqq&YOr3q9|3@VTT z0DNEoRr5n$ir9m``@na%C9E#uHAZWI5=shS00A<g}zXX~pjIq9GU zeOFut$z3*~Sk+Ji(}du_2vqM>jhYpv_ua<#B5{EX7?A&(IVzV8V~n*1gBC0Gca((0 z0J~DKBXz=te(gCZnc+?jR*6MGkJTVOWu2vXQiL59GC)nmxF-+S`DEA1#If*8km|y*^eZFy&+Ndwi z$l9(VMI8ERY;k5;BOVV6{cxB%+9zB#`IeIu;A}95ZXP9ou;3lO*ch0Ni#N01c!X(d z5Er`38UpBqXb7N%!VCmZEsjV4)lMDzHygpA@p#1^WagWXEaet(%D^ z+=ba@t0QfJ&sNa}4H}Ha$vL1I##%ERC*Zkaf5vSV%w>6YQCf1ufa*A?8nzUlD-6;M zmLYS)bi(RX^2AZIJ%+x1-Z-1(QiCdvBpOH3!K=5-w-~2{=g83O0^yVhg`w&30?w9G za167(Ip%u_+VG4YA(x=VP6=}$fb7^`j!(~@d?9!qOUVWe8k`=QX?!v+<(yah44JT` zoQsg0(gBtEVqU{Rk+(AYpNHx_%b})$t82G)CM^fF@@6EriP_J(!kB!~=&zG9U8I?4 zYRP9Q>>^d@lHjOKdc0*an(fO5$Hpni$LJ&Z(l8gbI7{{im!dH*;^ z(|0W!G-yzVIxVdp(?(V^@{WNEt(cvAkI!ADKlZ7#nQokWdvVMH_uMxgIq*7bL5{t^ zn8#JKv*Jfx&Yb%&!Q#y`CvTIv)Myd9X3@|b0c+6Uq_~u-=xJ}eUA`8ZBW5@PHf;qv z*#c-Xj?_0ZFUuySI%AGQ=5}nDpau0e z#w9z4hspRrVkb;?_)YD{GY1E|yy~h5LkHJRSk&?3=cqz5N1-}qorZ?TN$fNi73VFO z4W?s`Dqh~*<9O-@4K6D#rI2goFD})C>G{A(2%wXoZt*)TJjWX_jd62>1}DMEH1bRN zm^*vSeyZs7azARmM?IT6w0JlP=CuNuqs7eBd!MV3GH}Z4oX$SYPEAhu^%QBl+N4jd zSTjmPssKCcd~(kC5NZP1{>1;LTD??zRhJH||&L(lrkRp&(j6&T$F z&R0Q4dJK$ilr@6YpuvezKawWSG7aXAaSeOgmiZU4LuXWL$3GFrelusB{8-WAV_t0B zS!Fso!#VPm!{Er9+MG^dRWnB#Xz>Mh@k{tTU`j7EWKe?!ml(~UJ`+^;S;y~Moi_o5 zxvy$!ldGNuYtW#<1RRS$Z3foaqqfbDF`Zt%zMCq-;Zd-N6<@?MT@YN3U7ra8F!a;> z>U#_tsFBkK$H(Oustp=67{cVW*XYUg*)MKzT#Ro>JN=Tg$7vBYi&V!34H`6y1S`}=yn1mY-K@A#Q zIE;G`k30I^(81@11+W0B#nJ3Q8v$z2;Qa7>t9z&Sy>H4|q zhJe!^GG{g<7t?v|T-|U!&yz-jV`7}?{fP7&S)3XXY|!9h;Ye$q+7)#(~vb!K=@JL{A%i^G`mP1E#MoKkC?5;I%tp?P6D^wi9P z=7SlNyHN9LgGv20m*xAsLIgHw(4fI3zzH6al_~kW37{Ek(air18k`+QRH?-}K65S@ zXTOT^v)JfPdZXA}Ts+s(e`1_=>kScYM~X!<$IBK9XW~YBI*!qF7n5OcFbkgdg+zk} z&jXHRD%-4$&j)he1vny(FC^#q%xNUM!G*(k%k5Jik*zga2JbuSEBGI711;XsHHnei_#d=O%V4R}`5CJ_7@pslI zP>yYV)I6&iG`P^1F*?rZ1(EU`Df|bEuBVrqN94eYp|HO{8D~-(ezy{ zn)#=}yl^gpv}pd<8#HLp;6mcOeE^+sHFCNe?M?KS2G2Rhn7~~Aac~m96*FFWA=I#w zxDmOas^;Yv?gq~{&T?Qjqv^8Z1R^vCp=fMu8_a@+E^N?XEY6z%I*ajnlEmj?I@F-S zg+}xEJPj;3KQgY|&8nrrrNr~I>NL?5LK;;S{H0X>Z{gmBuwR= z8Z>CI;A@pdE?a|Rp|Ra*aMoyKu0ewuoEZUhYU_+CL;GBYeY0w5(BPuuw2c!NS@k+z z*v`|4s6Au+wM!h#yFr6f#VMUgoy%BT8C6ftUs)1X0v3yN{$cic2JVUaW6si0X+oh$0w{(Kz(mAGVzLxXwY zBmsOHGAyKQ!!5gUgI&CD!1gV`hb- zZU#Ox0%(TmUuV1Q2xx|Pg9Z)eh|4#nGz;?v4H_&snrZ4Hqv^c{4H`6~&@83A zeEL;`1`RF~nmMXLg9Z&6JfAqq6Y#Vg^)!@Hg9Z&6;3O)^f*k=n=B%!bQr4hBgR{Z} zt4mHiFV@Uc4H`6P(BLAVhQ2u>`_rJo;-V4I1{WPC(kT`v4E$-J8Qu*VG&m*97;IvZ zV;DCxWP=6`8Z?+UnrBOc1`QgVE>5IhoUsMajHkfn=x?<_g9iWq_U>#ua#RVRsBruL zKl$oDxGXEhAZ8+hvsbU`v@0u90>lskgoUVu0027u>$aD4%ZdJA844e^QeWVu%>X)& z)BUzG?&J5b|IoS68y(dFu);O}1!7S>0svxy{p!EJ`7p0Bd9+-QL!nUvu!;I^{QLk= zV!~45uX4`tJPyZ*1`vR0FDg)10sw-N?fClEW9M!LL!A~R9n8@26tIVDf4S>Ldu{F~ z1lKtL0Dw|E5B1?ockFj4ExiU!TRF!)mkwA&%^pBM?pNR$_+``O`FJ8&#~p`#h`-%YKa7_XLfF-V&!WGI1-tj%?t^mND)Te;;LY)r`!KDQN=#Iu^G8GA) zoL@1ONaKj?wr`PD6sX1a|-c0eS*JEdmXkie?Y6f~ySx zfR(PUua-XWoY0SoqyT_~vU*Ha0El}4fOd4Wq#!2%h(e__6dU5qM^XcjNL2s`fNJjc zC)Oh;00=>KG>(?}K6kAA0)SDp1%Ns?2kKfxKrOB|0Kgx2`w#fBB=j?)1X8L2i1Aq= zDR~V19gly;)ZbAJG=5~;5~t0lDoASM9;Kp%`20OUwi6x1PW>3Y6eAyd(rqg0H95%0=s4aaqkxZaD0w2uG^|OvUCU_0?Izq(lg#>hy!-~&}ji>)9kBxTTNIum4 zkej^7oak0hPNjxX5r)8~g*A9qR9O0v0B$f8*pn-o4O(5n_iIK6=nr}8ya#E}gIR)z z=~OX~zZYc8+<%XCeGc0D`vMzmQN|q59=>rozVtMw9bbJV%*AJTKYn?-4@h;LO1 z2Ya{nR-||`G9X|Xf*1?7r9Joezhu=pSjI==7g^^Ya{D+BDIYDwre=O7qcB<{RhLU( zD1i@~#LxS6#Yjs^$`X}qVTKn<_Ae*t6ZK+J6Z7P?2NHZ?2Yh4!3?Og5#U9@{09Q1z z53l!M&*q;V*$TF2l}!mrX2lm20#?#k#jkqe36N+}sKhB$zydyAwT!kxB2_kXwH`{J zl3FFxZH+ih9@B4^>_2aL411{eW?#)TsvE2w`W)|fOQ2Lw$h#^Zh`=70!2G`L1=GIbt-8fAvn9#%bT!6_)dG)ld|xc*>RX!p$?rsS`cXIBr^Tmf zH_5EU!wTDkMyn0S#?daG0*il}3f4TY{5sMbGlpy|N3H7a}X}y17>uj+eFe$y*(wu2B64nGYpRzEsEn z+bt4pgtxnCOqzcImx^whuSsYost-+mSa?#hKTcD{RTue}zsL|zh6l_LIz_v5bX8}= z5Oo@9+jRe_4-fcB@8_{GuV*o))YYWBPtR??yZbx{8>DoJFjejDxTT6Ql6y8|87l!>2h>An#SNPM_`Ue5Phsge> zdu_F#`OEO$-pn@=9@-hxWiJO8*ZQ3ocNj%?;3(F=>@m5h|ggzlxGe2d>Chz9uaiS5)Sd&H92lQF<&H zbCLC@7y_yoSSSqP)7#|f$fg~TKPHZVyc;fv?j%*adQY{WAn@qEKFA=QWM;SNOE*9( zXAdYYo<9k6N#4TyQ((!4DFe&p0km5 zMelKcwTGlxWpF80lF0>68^Joijxvuc*?~T73Q{G<3z)a!{}QSr&e(1XVlwl&R2V|D z0@upMesgG+#X}37;h-~fZ#WSeW6Q5hRiG^^j}}^4cR3tru>(?S8~7I{UTi+~cQKky zez}T9w;yB&Ua{QFob(OpIgx>F=*)a{XLlz+1|cY5UP7<1`=H$1r-ddZB%;z7q{jyh zr(ejx#}4(1%**56gXVKZfovh?y01c(CuDhxk!s5UWL|=@avYov2Y-Tj;P-FD)2d3I zdl&qE!}`yyd5CDwVH%afAht53l(Iecayw%nk4yM5++9I?@$G;Tq1PZbFHzDT%e75- zv8S*1zVr$~UZb{sYI6LqDG@qd!X*^D`?qIVK&nPOI{V+Q0)SR=UxYEoWNO}ub;2r| zABPTFI}uE)-*El3r54MjQ$@P8av6a;JlrMjF(sZVvIa$0rlcDhA6D3wenwj|I`{Jf z{F45nx-K+|BuhHr2M%Oe9BreTTHdb>oW=`CQh5CGZk9^!U*p0&LFK=7tvBrIH2jo^ zLQ{4`1SQhCjeQ+|o^!pab=FoK56ty`H?<}%hdYh(b+{!Y^Kl2J0&q4}llUeNd^ zS0iY8(|d_Lu3S)TYDOY`XLPug1&Z^~@MhQlej4Nb3mTwCoOo1!x+yF%dKon=n0IM2(d!g+v4U@&F+YjpU_m#@N)Ta zI12ceBXF#zx^s?R^1F<6_?6WCH8K#_l7L*y+^ny5m@&#OeH88_XG6btREwE+r_6c! zW+wzF-MjM#&L*@!oT>5vmpqBU)I-|J19%8HXlNg56wfHxQNlaUWNujtr@D3bzj;6CSmBgi;~=EH(eot#Fam!W$J z^usYpdA+WlgRw`)`nBkZiA4V9e-~+a>tA~>@5b0$&;kp|*&*}*B?(*c&9uccQb(;G zUzavCQ$){rFtKht6U{jUo|ZAFY(+&12rr-J7FO^&kO7Ouhf0FQoU?lm4|q$g9bjvc zw9A`aCN5yh1=^Kp;O^G=@(ov^7NdU5mwG_g&r5B27x*5iH`ff3Qo{x_{si00hWXrl zJtg7#GJ%uVkJ2m2iat2sbILF@Ys8i2Kr;NqIUov@cdiamhm*Ym;!54xtaMui)zWqK z-;J)KC|O_TNWfRE;6N+@{9|1N9+0$})8`L}kVJ0H1p|PhMcLQA22MA90V}6+E1|{Or&}%^V`R zsPKsT-JPixm>3F<;@0@P-TF%(TQr*vAgie<=o# zegl(>erKf$H<>$+M(n6>tvI}(MgpKI>5eGX-p8IF$tkMJ)vWf)EBCqhoc4|ZjUSef ze;dj*bl>rhaY8_Oc898QRO6Ww#3B&HOc8-P;ZkV$G`gtN^_o!#_%{&vG{4!s5crZJ z#qa#fDO58){51vq;6DOd?_E%bQ^$1D63p_zy zJy<4FC@7+pC>zOIiTy%k-PnuQi&Z?45};rD5pU$(weM1~qs{^R6AEbHf|XG|;pD9> zI%Z;du7CNU<}YNc7pVWa=!EC2t;h<@c<-#obj{UZ&npEvZfY!9*FiCl${s2|Pix60 zMB-Gvswq(s%t7R|$Qkrd^Tw&h;%lgDqkC7p@6xXvC8k|%a47!0N|+5odOP$4r3si@zB0VO7Ci zUez(4`QW{tUi{F{rk^f@GHCaY2=VFA<{sypO$3Yi1$6J99$!(CTeSTe(W|oas8(X3{Y#y{m`mrq{mNfPB8&OPr~j+>CuGw*firN+Z|*CX#^W zH222DP+S>Ad|IWaN^y*(6H6wKNi3krWc#dmV2CkU4AOz0;l^Gj-x3#=x5c@dJu5xQ zXU|)Rg}CMkt@OX__2N{!JIKE1Kalwhy11+oIRVYISmr`ApQ(D52x`82C7a2H*a?q` zViQiT5`8m;k5bgP(ABbeBY|VQIFzZdmquX1#ryp2-Cl%kykXLOJrg$FXzN@{_0it#x`kSd|9nao+U$R#AZaVz(0o z1u*3uabK)I+52_oFpQ1{2{@+rLHW?i+LSLvDnP9(O$_H2kzzc;+JbIUw^rUs2N@&J zdAU#!_HBvK7T=UgAX*j4m~daTz#9_(QbK`gmiWgmpl+G_d_pa6az2k~a4^P#_QgP))C~8Xa zhzUt47{dU}KbE=BY8Din_505C#IvWOV(wnFttf8_m0FH7Vj9z}cXj*GawQ?rUbuAr z*dV=Q`uZ#c!Que`Zr3rJw_yGyIlIACLAsWCrSPJ2b7 zxa4?nWb*gmkeE55p^Cj=q~a6LQF=pfVr=0@GOJYM$r+GuxGmsJ{felF^YtP~L-!^| zgbX1ojE39bbk!A}AZ;<59maI`HZ{nJ0lsAoTZqPfG<2(k0HsUo!lxR~3PrOFDSc%> zYEhcBgAoOB@~h?r6-3_Q&@blUhEBTdS~p01DY||5^j%(EoWyT@e&B~W&dd*N=bV7K z3OvN8__7U_j^ot>37kZrofDxUuzW0ehog&}+UJZMtfhr~#(kHx0K-D9NlA0T0#Iu$ zm})?9?q6PtM)~}g=?ipAOBYO{B+d-mS#(`6=$~a8z;nVG*&JIwoWZRLpQLIH&Jlc+c6E~E~xPe-l^F##pe+aeD}C}r<*1Tx}JfCY3K zpWAKLKj26fqjWz?|57Pn`%gpLzoG|VV$d@AB>*P;e%G8q`6#?90)lPkFHH{z=l!_g zJ+}e0)YHgoVV67-q$~`GniBstimLT{6UR8(KdDNzKeUW*rhlscHzql%(D9vC0kDeTDh4d+VHD+PSY0F?Gs-=(}u%`R*yVi*K ze~U~PiO$AamuHfL@ZQ?;&2K9nNNhc@GhJfGW}76&lYAaTUu6A6b`h}4`1O^6qf+icrf339x+>f+ z=#>1qVnMR{X|?byWt-?_!-7-SsiS*;H;`>L9tm&^;>(BBn zX}ZTbbf9{n$I2_rHEK52lgsPFCW*kI@$U)r9?JuSzI#zN z*C<{sT1G|M7G54cia&NaZTObCon$dC%whokojg|AaipT^EZpixOjO&TA1P5~U>eIn4w{Qk$wz?cE?o@M5t1xp@t6OR z41ilUWG7;*S)Z61r!>{#eqwZbK5%}#gdJWPXmEYjvU%>He>@oX4oDhI>-ETcq=ycR-s}g^-J@Sz_MJao7qRh2^ssr9c2I**@A(x zJ98KT)tOGLVs#W|-2ea}3RaSp(v9cI;zi(&?>+u4(HcrA;tnf2fn?hj>Brxq_E}%H9o-(?`q*e$8NsCeRyhbMv^^nS%S3OjNk={R zL`SWnzKaxnaNX`U+S-~&x{YyaM#-*eLCbDwfR&K_+bOL86gP(wk zRoZpUcReu|R3K~fL}(S%AHS+01u}R3?{gET>^MZL%P%$z_aw%lhB{7{4$6UulR%qy z+nv?HQJ*8U5oo&cAVJ>A2kdP>#NKN5?o_-UN&4w~sk6zt^^`3%gDDSumjMVeVFKJ#H+2##~5b7iIjny3}G$^xEWJuJ!r{ME@wfew5aDp23a0VE7*I?8xhzqM#>Dm5z2kfJCyxJd0;B(@ zC$NyYIHBUQwB4<7%wm-Z{Z?!Y?1?SJas0e)Fd2P~vz;O~{9L^Zm@)?jd# zMV((yScCKKy47pG-B89H9gP1yJ5&|>bCo5s;ez}aXJk+hKv8;Y-4q-kZl{)$DocUE;5N9VQAL94K2F2@d-PPn( zz(h6A$t46|y@ItYSx~zZl|8ZmW$({5Hn2C4>wF*${ga{%VBuD`MF;Gp2Ex;z_%jtR zfp4n`wtFxD)xn+~00zEHPb}v$OVeY3zd$D#Mi&}j&S)t=5$VxBwBJcqZG2^` zS)2blfv)ps+j~O0xgey)yLql}h#6X_s#kV+3%p^UQn(YAf@9OZeKTRXnQOJ-yzo*3 z2}SdR0AeU}ir*Xe=%p^}e&;;aowdC^Eb8Jk6P)m700v>f2ONG+t0F8D`a=l*tlcRO zP5Vlc?yvfSAcJU+O}{}RL<17w$7Dya|Q* zlSKWn41buzr*OdhSlo!0e8t;TqMCt5hpNm03WaYp5nmPT{SUQPI6=3hO?oB;8Avl! z2K-Ku&gBZ(2&*{7R6SMgA^J1~j^|DFP1hpNEvGKP5;fxO6>rtwqMAt9yz0xB~`2>Y2V!HEUm`^*XV+!tO^ zl=eiR06jS&XrK}ph2aKIn+tOsk#%G*PF{ZGhD;+v95DwyU?}|~J}BXZKmnG9eKlmJ zw@{kBzoOq42j>kk5-q^yV9p-_Ydi0$w3f5zta_f_c&KG(T7*^4xFj@YjtCZzmUYeFI(4y+G1N@a!T?R4zv! zny_CD2Y2l_L#e}pWM)FDgNFxd3Zr< zBm&6t&%}fOhc_InUrX|^8LKk}x%3xV%ZT~nSinMYcOp1JXokMZ>8?3A!XoI;%iygyda`2)*Cq=}d0 z;beR48lIu_;tr(-{QNROAvVM+JKUyZI-{HLY=eGs9$lgZtyKg;S4fo@`TxB1 z5ZlfU_a=Cwi`l6n*!MNM=x+8RbMnVS8{||a0Kx~XX2JM zd?GkY*9m#{8KYku4N@q@@Gs;v!iEeHN+FDwIOh6=RANFTIB}mrlH&UKlk?PmfcWS( z-m!%4d)Z;_^liF9M={BDsr}*3os={RusW74wbHO0$GY{SRicURry?@MFbn|gTD6ZQ z3!MA3?cZEUF9_A1@ZksX?*=llgk!fGiaw@ohEr|Y07~)2FGlwO#Aa#=j9;Sm56{ETfc|Y9*}Y}O%kD^Za=T$|CI#<6a8a&Fikv>v`j2; zEP9+8sFa5!u=>zXm6z3~M$rHsP*M#?5k-}uaC^O`aMY;l;OWyVDA&5lPM#ckX#RJ- zdf^{A;e%490h-Zh($N92*e?Rjii{P8xq|qxT&$C6gnBS!e9u@Ms?9_J>GJ9I;>pL| zF7)cRq)91~4^bRc_x_m)1leh{DhIq;e^(;QG=Oj&zMl!1)0RH=uhRL}p3?PmV-g8? zK|_pNDX)ujW9fqM@?su3?2fK6m3D_C75K}1Li8mFkRK(tD3uz`MH?SFjEu%Huk}`N z)+D-e|4u&#nT=bh6ZD77gbd!%AKm!c+3gb^rD6d)n63VebsC`Cz>;FOKUde31j><@ zki4Jd{>RD5V;A?IYlHF3e-&Q5DHQd{eY4*mqnAbl{<$H|yv|}yH%F)xDXQKyJ6Kh> zv?vH9iI+d>^kFAB2%bZ5KoU ztF;*83?Ej+08A;S;XGxAvhcCDXVww1GK+U0xko9|03IEu(7QQ^L_t=5zUa#bO;a6) zsa+E)`kylP79`#b2L!5Z{S4I%{`+bcr3kv^`Zb3^zjQ^?-b3Zk^8BT%fkVO*B{J69 z1q!%u;q94}=f(N273t<8Ce2>Mt6h^-7A2#FxYx?+u2_;|_t!fvWjgSP-E_x@s#apyJtcM$13@-Uo=gGQkq2po$Ni6fiqQUH#?bR zv`vF~Hs<1U)Kfu48|sc5l2*I#N=}hUkU3JyzAYy=ovhU9i-KX&7tMdwbz6}eOMWGF zWzLGfC-_a0ubuF=Q*h8(dtURoPR&Nq7UZigRw=W;Z08R$_=kInRjzhCkWocx_DY<4wt%7~fiNZ2mZ z`p_eiBrIcLdw>ik%IEvAPndy3BplywGW_9(tvzhaM`pE@;i@LTONod*vv?L>{+i$9 z-Pc@+xvU!Gwt4=X?yIBPfMS=%p#A&5W@umiItw&TDNGI}$orokrKjR;8@vYJQOEAJ zqia6xS7J#)+Fdfq8=YHXl7q%OZbP1qJ5k%lyG7dOqgm5nhYVXj(T0SG<&y~}@0|(3 zWtHt}6+P-F$j-?9*JZQp?(M{_L-)Jdzppunj?c8u?`}Hep^!D5^SEP+<$}Cf)J!G5 zZiR2%T9XsikPNE3;m4`g5@za_?xF}XYRH=} za_=ORixPN?Pwz!Xkzipo&hMA)*(Gi((>S%K>RqQH^!|CFGG60`&*FT3#OS?0T@tk6 zzVcZ_A5YebS|L@^MnVBC^aQ#?hV1 zNRHh}A-o8>SiU?dXOnu-iwzW~^1r1EQxZNd2s3 zWs&N}Bi%k|0BEvG~8qVbkF zy06T8!Y`7aiJw++IT*54HdFiP+eo8+pEu_&G7>u-Q6lm+J=AL28^y61-O;oc`3_^RlA-4_7r`mXQ7Vqh{pFG$4&;13BHgIT{q+~G-1}=!G1;>Np-Fm17KD|PTx zyE5K9PYv$9)5Pv%OlkP*vy#9hAfxuw=RlWb`sUgpHauS~Ec-AZ->VH*z2M*XvQ;ig z6mYe7U82PJNfG}+uy`AWeL;LswmT^VhAXQ~>Uo`|vD!?}uH;s35Vu3xp~fmsOoB*j zg92H^wn+EJl_^A9>0dQM%N9zJ-R*BxUppJ*#C>Jn)LJ{!-zPE8)d@^M``1ZEfuRS@ zC4;aAt=zc#QV*Z73}KeMKY7L}v;CSd(+VHz-kktFq07^zZ{jWk=&k~YT{`MF;m7B0^Y#dBj?Sz>p8o^Sr8iVE`|Q1oWgnSAXaM%R>` zsZ?5Ol>Pqjy}n|BZ@CiC-0&Mx{@D=4Djl|6`!BOJ$C4jpTKl<;L%l!v^y0UD!cPny z3#iGzd@G#d&1Tr~?c9$clVOK@VniAj_lUd09D1F$ETQ1szjCaZ*-*XnP7omnNP6*> zxcZZTpmzh&3K_8}Jbcigm$KNG3&FmeDSAkVJvII2J=6u5cje7bltxX!Z!E?hF4%%7 zl0oe7RX)2rh&@Xo1rqHD69+Ieh0lWUmF1r-Mg(4F2W+2JuHAesSZGCe*+-W5u(C+# zQ@L%@WIXtMX1SScq;c%@QtBTAJsnCWJ`h7-xk!2Qcm#Sm?vzb8C>O5RBc=lHtezG> z2g$v+`faj-;FxXV8d>$2bp2&q(JT`in`^dod4*6-T2nq_QKVb(Q3RM#(6O5xIv5Y` z1^k;&EgUyPUo8jBW1`1iY8eb#!2(vGRR_38*{m(CVVd^Gz-AS`wPU^CIUzmN8ICakblG+}LkxQ0M zmxEtC)>9#uWV-?1`KI#VMcF@oZFuQ@a{0ObCUoTynoss2FE(&9e#o+XkMfO59x;cT zJahnlaB->_tUISeYs8s&HMHG4jd{hwoAWentK-Ko`}5MeUIPNZqgYt%eqU=ixsNS; zm^7-a^SQ&}Ii+nDOh5qrslIe_{_MN%S|yb8PrkKxRHkGr;xZ(W|0=l#(`$?D({d!v w>bsFWCa*ce8rSZ { const chessRef = useRef(new Chess()); const [fen, setFen] = useState(chessRef.current.fen()); const [history, setHistory] = useState([]); - const [moves, setMoves] = useState(""); + const [moves, setMoves] = useState(""); const [message, setMessage] = useState(""); //chat UI const [chatInput, setChatInput] = useState(""); const [chatMessages, setChatMessages] = useState([]); + // Avatar and analysis state + const [isAnalyzing, setIsAnalyzing] = useState(false); + function historyToUci(moves: Move[]): string { return moves.map((m) => `${m.from}${m.to}${m.promotion ?? ""}`).join(" "); } @@ -60,70 +66,165 @@ const AITutor: React.FC = () => { return { background: "#EFF6FF", border: "#93C5FD", accent: "#1D4ED8" }; } + + function replaceLatestAssistantPlaceholder( + prev: ChatMessage[], + replacement: ChatMessage + ) { + // Find the most recent placeholder (assistant with empty content and no explanation) + const idxFromEnd = [...prev] + .reverse() + .findIndex((m) => m.role === "assistant" && !m.explanation && m.content === ""); + + if (idxFromEnd === -1) return prev; // nothing to replace + + const idx = prev.length - 1 - idxFromEnd; + const updated = [...prev]; + updated[idx] = replacement; + return updated; + } + + + function getAvatarImage( + moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder", + isAnalyzing: boolean = false + ): string { + if (isAnalyzing) { + return avatarThinking; + } + if ( + moveIndicator === "Inaccuracy" || + moveIndicator === "Mistake" || + moveIndicator === "Blunder" + ) { + return avatarMistake; + } + return avatarDefault; + } + + // Loading dots component + const LoadingDots: React.FC = () => { + const [dots, setDots] = useState("."); + + useEffect(() => { + const interval = setInterval(() => { + setDots((prev) => { + if (prev === ".") return ".."; + if (prev === "..") return "..."; + return "."; + }); + }, 500); + + return () => clearInterval(interval); + }, []); + + return {dots}; + }; + + + + async function sendMoveForAnalysis( fenBefore: string, fenAfter: string, moveUci: string, - uciHistory: string + uciHistory: string, + chatHistory: ChatMessage[] ) { - const response = await fetch(`${environment.urls.chessServer}api/analyze`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - type: "move", - fen_before: fenBefore, - fen_after: fenAfter, - move: moveUci, - uciHistory, - depth: 15, - chatHistory: chatMessages, - }), - }); - - const data = await response.json(); - - if (!data.success) { - console.error("Analysis error:", data.error); - setChatMessages((prev) => [ - ...prev, - { - role: "assistant", - content: `Error: ${data.error || "Analysis failed"}`, - }, - ]); - return; - } + // Set analyzing state + setIsAnalyzing(true); + + // Add placeholder message for loading state + const nextChatHistory = [ + ...chatHistory, + { + role: "assistant" as const, + content: "", + explanation: undefined, + }, + ]; + setChatMessages(nextChatHistory); + + // Helper to ensure exactly one slash in URL + const baseUrl = environment.urls.chessServer.replace(/\/$/, ""); + const apiUrl = `${baseUrl}/api/analyze`; - let explanation: ChatMessage["explanation"] | undefined; try { - if (typeof data.explanation === "string") { - explanation = JSON.parse( - data.explanation - .replace(/```json/g, "") - .replace(/```/g, "") - .trim() + const response = await fetch(apiUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: "move", + fen_before: fenBefore, + fen_after: fenAfter, + move: moveUci, + uciHistory, + depth: 15, + chatHistory: nextChatHistory, + }), + }); + + const data = await response.json(); + + if (!data.success) { + console.error("Analysis error:", data.error); + setIsAnalyzing(false); + // Replace last message (placeholder) with error + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: `Error: ${data.error || "Analysis failed"}`, + }) ); - } else if (data.explanation && typeof data.explanation === "object") { - explanation = data.explanation; + return; } - } catch (error) { - console.error("Failed to parse explanation:", error); - } - console.log(explanation) - applyCpuMove(data.bestMove); - // append LLM explanation to chat - setChatMessages((prev) => [ - ...prev, - { - role: "assistant", - content: explanation?.Analysis ?? "Analysis ready.", - explanation, - }, - ]); + let explanation: ChatMessage["explanation"] | undefined; + try { + if (typeof data.explanation === "string") { + explanation = JSON.parse( + data.explanation + .replace(/```json/g, "") + .replace(/```/g, "") + .trim() + ); + } else if (data.explanation && typeof data.explanation === "object") { + explanation = data.explanation; + } + } catch (error) { + console.error("Failed to parse explanation:", error); + } + console.log(explanation); + setIsAnalyzing(false); + + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: explanation?.Analysis ?? "Analysis ready.", + explanation, + }) + ); + if (data.bestMove) { + applyCpuMove(data.bestMove); + } + + + } catch (error) { + setIsAnalyzing(false); + console.error("Network error:", error); + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: "Network error: Failed to analyze move.", + }) + ); + } } + + + //helper function function formatMoveText(color: "w" | "b", from: string, to: string) { const side = color === "w" ? "White" : "Black"; @@ -134,36 +235,74 @@ const AITutor: React.FC = () => { async function sendChat() { if (!chatInput.trim()) return; + const questionText = chatInput; + setChatInput(""); + + // Build updated messages with user question const newMessages: ChatMessage[] = [ ...chatMessages, - { role: "user", content: chatInput }, + { role: "user" as const, content: questionText }, ]; - setChatMessages(newMessages); - + // Set analyzing state for question + setIsAnalyzing(true); - setChatInput(""); + // Add placeholder message for loading state + const nextChatHistory = [ + ...newMessages, + { + role: "assistant" as const, + content: "", + explanation: undefined, + }, + ]; + setChatMessages(nextChatHistory); + + // Helper to ensure exactly one slash in URL + const baseUrl = environment.urls.chessServer.replace(/\/$/, ""); + const apiUrl = `${baseUrl}/api/analyze`; + + try { + const res = await fetch(apiUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: "question", + fen, + question: questionText, + chatHistory: nextChatHistory, + }), + }); - const res = await fetch(`${environment.urls.chessServer}api/analyze`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - type: "question", - fen, - question: chatInput, - chatHistory: newMessages, - }), - }); + const data = await res.json(); - const data = await res.json(); + // Reset analyzing state + setIsAnalyzing(false); - setChatMessages((prev) => [ - ...prev, - { role: "assistant", content: data.answer }, - ]); + // Replace placeholder message with actual answer + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: data.answer ?? "No answer returned.", + }) + ); + + } catch (error) { + setIsAnalyzing(false); + console.error("Network error:", error); + // Replace placeholder message with error + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: "Network error: Failed to get answer.", + }) + ); + } } + + function onDrop(sourceSquare: Square, targetSquare: Square): boolean { try { const game = chessRef.current; @@ -175,25 +314,36 @@ const AITutor: React.FC = () => { promotion: "q", }); - // Add move to chat - setChatMessages((prev) => [ - ...prev, - { - role: "move", - content: formatMoveText(move.color, move.from, move.to), - }, - ]); - const fenAfter = game.fen(); const currentMoveUci = `${move.from}${move.to}${move.promotion ?? ""}`; const newHistory = game.history({ verbose: true }); const uciMoves = historyToUci(newHistory); + // Build the updated chat history with the move message + let nextChatHistory: ChatMessage[] = []; + setChatMessages((prev) => { + nextChatHistory = [ + ...prev, + { + role: "move" as const, + content: formatMoveText(move.color, move.from, move.to), + }, + ]; + return nextChatHistory; + }); + setFen(game.fen()); setHistory(newHistory); setMoves(uciMoves); - sendMoveForAnalysis(fenBefore, fenAfter, currentMoveUci, uciMoves); + // Pass the updated chatHistory to sendMoveForAnalysis + sendMoveForAnalysis( + fenBefore, + fenAfter, + currentMoveUci, + uciMoves, + nextChatHistory + ); return true; } catch { @@ -210,6 +360,12 @@ const AITutor: React.FC = () => { const promotion = uci.length === 5 ? uci[4] : undefined; const move = game.move({ from, to, promotion }); + + if (!move) { + console.error("Invalid CPU move:", uci); + return; + } + // Add move to chat setChatMessages((prev) => [ ...prev, @@ -219,11 +375,6 @@ const AITutor: React.FC = () => { }, ]); - if (!move) { - console.error("Invalid CPU move:", uci); - return; - } - // Update UI state const newHistory = game.history({ verbose: true }); const uciMoves = historyToUci(newHistory); @@ -309,47 +460,197 @@ const AITutor: React.FC = () => { const tone = getMoveIndicatorStyles( m.explanation?.moveIndicator ); + const isLastMessage = i === chatMessages.length - 1; + const showLoading = isAnalyzing && isLastMessage; + const avatarForMessage = showLoading + ? getAvatarImage(undefined, true) + : getAvatarImage(m.explanation?.moveIndicator, false); + return ( -

-
- 🧠 AI Tutor -
- -
{m.explanation.Analysis ?? m.content}
- - {m.explanation.nextStepHint && (
- ⭐ {m.explanation.nextStepHint} + {/* Avatar */} + AI Tutor + + {/* Speech Bubble */} +
+ {/* Speech bubble tail */} +
+
+ + {showLoading ? ( +
+ +
+ ) : ( + <> +
{m.explanation.Analysis ?? m.content}
+ + {m.explanation.nextStepHint && ( +
+ ⭐ {m.explanation.nextStepHint} +
+ )} + + )} +
+
+ ); + })() + ) : m.role === "assistant" && !m.explanation ? ( + // Regular assistant message (from questions) - also show with avatar + (() => { + const isLastMessage = i === chatMessages.length - 1; + const showLoading = isAnalyzing && isLastMessage; + const avatarForMessage = showLoading + ? getAvatarImage(undefined, true) + : getAvatarImage(undefined, false); + + return ( +
+ {/* Avatar */} + AI Tutor + + {/* Speech Bubble */} +
+ {/* Speech bubble tail */} +
+
+ + {showLoading ? ( +
+ +
+ ) : ( +
{m.content}
+ )} +
- )} -
); })() ) : ( From 64f268153ba2bdeaad77d8d49bcfe07d4b651ac1 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Sun, 4 Jan 2026 11:39:58 -0500 Subject: [PATCH 07/20] made code more legible --- .../src/features/aitutor/Aitutor.tsx | 180 ++++++++++-------- 1 file changed, 100 insertions(+), 80 deletions(-) diff --git a/react-ystemandchess/src/features/aitutor/Aitutor.tsx b/react-ystemandchess/src/features/aitutor/Aitutor.tsx index 02dd5959..6d34a657 100644 --- a/react-ystemandchess/src/features/aitutor/Aitutor.tsx +++ b/react-ystemandchess/src/features/aitutor/Aitutor.tsx @@ -6,6 +6,10 @@ import avatarDefault from "../../assets/images/Devin_tutor_default.png"; import avatarThinking from "../../assets/images/Devin_tutor_thinking.png"; import avatarMistake from "../../assets/images/Devin_tutor_mistake.png"; + +// ------------------------------ +// TYPES DEFINITIONS +//------------------------------ type Square = `${"a" | "b" | "c" | "d" | "e" | "f" | "g" | "h"}${ | 1 | 2 @@ -26,28 +30,44 @@ type ChatMessage = { }; }; + + + + const AITutor: React.FC = () => { const chessRef = useRef(new Chess()); - const [fen, setFen] = useState(chessRef.current.fen()); - const [history, setHistory] = useState([]); - const [moves, setMoves] = useState(""); - const [message, setMessage] = useState(""); + // ------------------------------ + // STATE VARIABLES + //------------------------------ + const [fen, setFen] = useState(chessRef.current.fen()); //current FEN of the board + const [history, setHistory] = useState([]); //history of moves(array of move Objects) + const [moves, setMoves] = useState(""); //string of moves in UCI format + const [message, setMessage] = useState(""); //message to display to the user (error messages) //chat UI - const [chatInput, setChatInput] = useState(""); - const [chatMessages, setChatMessages] = useState([]); - + const [chatInput, setChatInput] = useState(""); //the current text the user has typed in (not sent yet). shows text while typing + const [chatMessages, setChatMessages] = useState([]); //array of chat messages. Contains every message sent or received. // Avatar and analysis state - const [isAnalyzing, setIsAnalyzing] = useState(false); + const [isAnalyzing, setIsAnalyzing] = useState(false); //flag to indicate if the AI is analyzing a move or question. Shows loading dots while analyzing. + //------------------------------ + // DATA FORMAT HELPERS + //------------------------------ function historyToUci(moves: Move[]): string { + "converts the history of moves to a string of moves in UCI format" return moves.map((m) => `${m.from}${m.to}${m.promotion ?? ""}`).join(" "); } - function getMoveIndicatorStyles( - moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder" - ) { - console.log(moveIndicator); + function formatMoveText(color: "w" | "b", from: string, to: string) { + const side = color === "w" ? "White" : "Black"; + return `${side} moved from ${from} to ${to}`; + } + + //-------------------------------- + // RENDERING HELPERS + //-------------------------------- + function getMoveIndicatorStyles(moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder") { + "returns the styles for the speech bubble based on the move indicator" if (moveIndicator === "Best") { return { background: "#ECFDF3", border: "#86EFAC", accent: "#166534" }; } @@ -63,32 +83,10 @@ const AITutor: React.FC = () => { if (moveIndicator === "Blunder") { return { background: "#FEF2F2", border: "#FCA5A5", accent: "#991B1B" }; } - return { background: "#EFF6FF", border: "#93C5FD", accent: "#1D4ED8" }; - } - - - function replaceLatestAssistantPlaceholder( - prev: ChatMessage[], - replacement: ChatMessage - ) { - // Find the most recent placeholder (assistant with empty content and no explanation) - const idxFromEnd = [...prev] - .reverse() - .findIndex((m) => m.role === "assistant" && !m.explanation && m.content === ""); - - if (idxFromEnd === -1) return prev; // nothing to replace - - const idx = prev.length - 1 - idxFromEnd; - const updated = [...prev]; - updated[idx] = replacement; - return updated; + return { background: "#EFF6FF", border: "#93C5FD", accent: "#1D4ED8" }; //default case: Best move } - - function getAvatarImage( - moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder", - isAnalyzing: boolean = false - ): string { + function getAvatarImage(moveIndicator?: "Best" | "Good" | "Inaccuracy" | "Mistake" | "Blunder",isAnalyzing: boolean = false): string { if (isAnalyzing) { return avatarThinking; } @@ -102,28 +100,48 @@ const AITutor: React.FC = () => { return avatarDefault; } - // Loading dots component - const LoadingDots: React.FC = () => { - const [dots, setDots] = useState("."); - - useEffect(() => { - const interval = setInterval(() => { - setDots((prev) => { - if (prev === ".") return ".."; - if (prev === "..") return "..."; - return "."; - }); - }, 500); - - return () => clearInterval(interval); - }, []); - - return {dots}; - }; + // Loading dots component + const LoadingDots: React.FC = () => { + const [dots, setDots] = useState("."); + + useEffect(() => { + const interval = setInterval(() => { + setDots((prev) => { + if (prev === ".") return ".."; + if (prev === "..") return "..."; + return "."; + }); + }, 500); + + return () => clearInterval(interval); + }, []); + + return {dots}; + }; + //-------------------------------- + // Chat-State HELPER + //-------------------------------- + function replaceLatestAssistantPlaceholder(prev: ChatMessage[], replacement: ChatMessage) { + // Find the most recent placeholder (assistant with empty content and no explanation) + const idxFromEnd = [...prev] + .reverse() + .findIndex((m) => m.role === "assistant" && !m.explanation && m.content === ""); + + if (idxFromEnd === -1) return prev; // nothing to replace + + const idx = prev.length - 1 - idxFromEnd + const updated = [...prev]; + updated[idx] = replacement; + return updated; + } + + //-------------------------------- + // APP BEHAVIOR HELPERS + //-------------------------------- async function sendMoveForAnalysis( fenBefore: string, fenAfter: string, @@ -225,12 +243,6 @@ const AITutor: React.FC = () => { - //helper function - function formatMoveText(color: "w" | "b", from: string, to: string) { - const side = color === "w" ? "White" : "Black"; - return `${side} moved from ${from} to ${to}`; - } - //send chat function async function sendChat() { if (!chatInput.trim()) return; @@ -304,6 +316,7 @@ const AITutor: React.FC = () => { function onDrop(sourceSquare: Square, targetSquare: Square): boolean { + if (isAnalyzing) return false; // Don't allow moves while thinking try { const game = chessRef.current; const fenBefore = game.fen(); @@ -319,18 +332,16 @@ const AITutor: React.FC = () => { const newHistory = game.history({ verbose: true }); const uciMoves = historyToUci(newHistory); - // Build the updated chat history with the move message - let nextChatHistory: ChatMessage[] = []; - setChatMessages((prev) => { - nextChatHistory = [ - ...prev, - { - role: "move" as const, - content: formatMoveText(move.color, move.from, move.to), - }, - ]; - return nextChatHistory; - }); + // Build the updated chat history with the move message (synchronously) + const moveMsg: ChatMessage = { + role: "move" as const, + content: formatMoveText(move.color, move.from, move.to), + }; + + const nextChatHistory = [...chatMessages, moveMsg]; + + // Update chat UI immediately + setChatMessages(nextChatHistory); setFen(game.fen()); setHistory(newHistory); @@ -352,6 +363,7 @@ const AITutor: React.FC = () => { } } + function applyCpuMove(uci: string) { const game = chessRef.current; @@ -384,6 +396,10 @@ const AITutor: React.FC = () => { setMoves(uciMoves); } + + // ------------------------------ + // RENDER FUNCTION + //------------------------------ return (
{ > setChatInput(e.target.value)} - onKeyDown={(e) => e.key === "Enter" && sendChat()} - placeholder="Ask the tutor..." + onKeyDown={(e) => e.key === "Enter" && !isAnalyzing && sendChat()} // Prevent Enter key too + placeholder={isAnalyzing ? "AI is thinking..." : "Ask the tutor..."} // Dynamic placeholder style={{ flex: 1, border: "1px solid #d1d5db", borderRadius: 10, padding: "10px 12px", outline: "none", - background: "#f9fafb", + background: isAnalyzing ? "#f3f4f6" : "#f9fafb", // Slight color change when disabled + cursor: isAnalyzing ? "not-allowed" : "text", }} />
From 2aaa03dc282a08eb39de61a66caea40d742ea0b4 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:34:20 -0500 Subject: [PATCH 08/20] switch to REST only --- chessServer/src/config/openai.js | 7 + chessServer/src/index.js | 57 +- chessServer/src/services/AnalysisService.js | 580 +++++++++++--------- 3 files changed, 371 insertions(+), 273 deletions(-) diff --git a/chessServer/src/config/openai.js b/chessServer/src/config/openai.js index 5d3ac68d..cf3aaced 100644 --- a/chessServer/src/config/openai.js +++ b/chessServer/src/config/openai.js @@ -3,11 +3,17 @@ // - Loads OPENAI_API_KEY from environment // - Exports configured OpenAI client // - Supports mock mode for development +// - Rate limiting for API calls const OpenAI = require("openai"); +const RateLimiter = require("../utils/rateLimiter"); const mode = (process.env.LLM_MODE || "openai").toLowerCase(); // "openai" | "mock" +// Initialize rate limiter (default: 60 requests per minute) +const rateLimitRPM = Number(process.env.OPENAI_RATE_LIMIT_RPM || 60); +const rateLimiter = new RateLimiter(rateLimitRPM); + function hasOpenAIKey() { const key = process.env.OPENAI_API_KEY; return !!(key && key.trim()); @@ -106,6 +112,7 @@ module.exports = { isConfigured, isMockMode, llmMode: mode, + rateLimiter, // For backward compatibility, export a getter that returns the client get openai() { return getClient(); diff --git a/chessServer/src/index.js b/chessServer/src/index.js index 6780bd44..104890d2 100644 --- a/chessServer/src/index.js +++ b/chessServer/src/index.js @@ -104,8 +104,61 @@ app.post("/api/analyze", async (req, res) => { }); } catch (error) { const msg = error?.message || "Internal server error"; - const isTimeout = msg.toLowerCase().includes("timed out"); - return res.status(isTimeout ? 504 : 500).json({ success: false, error: msg }); + const msgLower = msg.toLowerCase(); + + // Classify error types + let errorCode = "INTERNAL_ERROR"; + let retryable = false; + let statusCode = 500; + + if (msg === "OPENAI_INVALID_RESPONSE") { + errorCode = "OPENAI_INVALID_RESPONSE"; + retryable = true; + statusCode = 500; + } else if (msgLower.includes("openai") && msgLower.includes("timeout")) { + errorCode = "OPENAI_TIMEOUT"; + retryable = true; + statusCode = 504; + } else if (msgLower.includes("rate limit") || msgLower.includes("rate_limit")) { + errorCode = "OPENAI_RATE_LIMIT"; + retryable = true; + statusCode = 429; + } else if (msgLower.includes("openai")) { + errorCode = "OPENAI_API_ERROR"; + retryable = true; + statusCode = 500; + } else if (msgLower.includes("stockfish") && msgLower.includes("timeout")) { + errorCode = "STOCKFISH_TIMEOUT"; + retryable = true; + statusCode = 504; + } else if (msgLower.includes("stockfish") && (msgLower.includes("network") || msgLower.includes("fetch"))) { + errorCode = "STOCKFISH_NETWORK_ERROR"; + retryable = true; + statusCode = 502; + } else if (msgLower.includes("stockfish") && msgLower.includes("parse")) { + errorCode = "STOCKFISH_PARSE_ERROR"; + retryable = false; + statusCode = 500; + } else if (msgLower.includes("validation")) { + errorCode = "VALIDATION_ERROR"; + retryable = false; + statusCode = 400; + } else if (msgLower.includes("network") || msgLower.includes("fetch") || msgLower.includes("econnrefused")) { + errorCode = "NETWORK_ERROR"; + retryable = true; + statusCode = 502; + } else if (msgLower.includes("timed out")) { + errorCode = "TIMEOUT"; + retryable = true; + statusCode = 504; + } + + return res.status(statusCode).json({ + success: false, + error: msg, + errorCode, + retryable, + }); } }); diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index 5b08c62a..385e4c29 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -2,22 +2,21 @@ * AnalysisService.js * * Orchestrates the complete analysis pipeline: - * 1) Triggers Stockfish analysis + * 1) Triggers Stockfish analysis via HTTP REST API * 2) Formats OpenAI prompts * 3) Calls OpenAI API * 4) Caches results - * 5) Emits socket events back to players + * 5) Returns results via REST API * * Supports two modes: - * - Move analysis (with/without chat history) - * - Question answering + * - Move analysis (with chat history) - used by AI Tutor + * - Question answering - used by AI Tutor */ // ============================================================================ // IMPORTS & CONFIGURATION // ============================================================================ -const { io: ioClient } = require("socket.io-client"); const cache = require("../utils/cache"); const openai = require("../config/openai"); const crypto = require("crypto"); @@ -29,79 +28,112 @@ if (typeof fetch !== "function") { } // ============================================================================ -// STOCKFISH SESSION MANAGEMENT +// UTILITY FUNCTIONS // ============================================================================ -// Connect to stockfishServer -const stockfishSocket = ioClient(STOCKFISH_URL, { - transports: ["websocket"], - reconnection: true, -}); +/** + * Logs a metric as structured JSON + * @param {string} metric - Metric name (e.g., "stockfish_latency", "openai_latency", "cache_hit") + * @param {number} duration_ms - Duration in milliseconds (optional) + * @param {boolean} success - Whether the operation was successful + * @param {Object} metadata - Additional metadata to log + */ +function logMetric(metric, duration_ms = null, success = true, metadata = {}) { + const logEntry = { + timestamp: new Date().toISOString(), + metric, + ...metadata, + }; + + if (duration_ms !== null) { + logEntry.duration_ms = duration_ms; + } + + logEntry.success = success; -// Session state management -let stockfishSessionReady = false; -let resolveReady = null; -let stockfishQueue = Promise.resolve(); // Queue to prevent overlapping evaluations + // Only log if metrics are enabled (default: true) + if (process.env.METRICS_LOG_ENABLED !== "false") { + console.log(JSON.stringify(logEntry)); + } +} /** - * Creates a promise that resolves when Stockfish session is ready + * Computes UCI move notation from chess.js move result + * @param {Object} moveResult - chess.js move object + * @returns {string} UCI notation (e.g., "e7e8q" for promotion) */ -function makeReadyPromise() { - return new Promise((resolve) => { - resolveReady = resolve; - }); +function computeMoveUci(moveResult) { + return moveResult.from + moveResult.to + (moveResult.promotion || ""); } -let readyPromise = makeReadyPromise(); - /** - * Ensures Stockfish session is ready before proceeding - * @returns {Promise} + * Parses OpenAI JSON response, handling markdown code fences + * @param {string} rawText - Raw text from OpenAI response + * @returns {Object|null} Parsed JSON object, or null if parsing fails */ -function ensureStockfishSession() { - if (stockfishSessionReady) { - return Promise.resolve(); +function parseOpenAIJson(rawText) { + if (!rawText || typeof rawText !== "string") { + return null; + } + + try { + // Remove markdown code fences (```json and ```) + let cleaned = rawText + .replace(/```json/gi, "") + .replace(/```/g, "") + .trim(); + + // Try to parse as JSON + return JSON.parse(cleaned); + } catch (err) { + return null; } - return readyPromise; } -// Socket event handlers -stockfishSocket.on("connect", () => { - console.log("[AnalysisService] Connected to stockfishServer:", STOCKFISH_URL); - - stockfishSocket.emit("start-session", { - sessionType: "analysis", - fen: null, - infoMode: true, - }); -}); +/** + * Validates that an object matches the expected tutor response shape + * @param {Object} obj - Object to validate + * @returns {boolean} True if valid, false otherwise + */ +function validateTutorResponse(obj) { + if (!obj || typeof obj !== "object") { + return false; + } -stockfishSocket.on("session-started", (data) => { - stockfishSessionReady = true; - console.log("[AnalysisService] Stockfish session started:", data?.id); - - if (resolveReady) { - resolveReady(); + // Required fields: moveIndicator and Analysis (both strings) + if (typeof obj.moveIndicator !== "string" || !obj.moveIndicator.trim()) { + return false; } -}); -stockfishSocket.on("disconnect", () => { - console.log("[AnalysisService] Disconnected from stockfishServer"); - stockfishSessionReady = false; - readyPromise = makeReadyPromise(); -}); + if (typeof obj.Analysis !== "string" || !obj.Analysis.trim()) { + return false; + } -// ============================================================================ -// UTILITY FUNCTIONS -// ============================================================================ + // nextStepHint is optional but if present should be a string + if (obj.nextStepHint !== undefined && typeof obj.nextStepHint !== "string") { + return false; + } + + return true; +} /** - * Computes UCI move notation from chess.js move result - * @param {Object} moveResult - chess.js move object - * @returns {string} UCI notation (e.g., "e7e8q" for promotion) + * Generates a fallback tutor response when OpenAI fails but Stockfish succeeded + * @param {Object} stockfishFacts - Stockfish analysis results + * @returns {Object} Fallback response matching expected format */ -function computeMoveUci(moveResult) { - return moveResult.from + moveResult.to + (moveResult.promotion || ""); +function generateFallbackResponse(stockfishFacts) { + const moveIndicator = stockfishFacts?.classify || "Good"; + + const analysis = `I'm having trouble providing a detailed analysis right now, but based on the engine evaluation, this appears to be a ${moveIndicator.toLowerCase()} move. Consider the position carefully and look for tactical opportunities.`; + + const nextStepHint = "Continue developing your pieces and controlling key squares."; + + return { + moveIndicator, + Analysis: analysis, + nextStepHint, + }; } /** @@ -119,18 +151,6 @@ function getCacheKey(fenAfter, moveUci, analysisSettings) { return `analysis:v1:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}`; } -/** - * Emits socket event to both student and mentor - * @param {Object} io - Socket.IO server instance - * @param {string} studentSocketId - Student socket ID - * @param {string} mentorSocketId - Mentor socket ID - * @param {string} eventName - Event name - * @param {Object} payload - Event payload - */ -function emitToBoth(io, studentSocketId, mentorSocketId, eventName, payload) { - io.to(studentSocketId).to(mentorSocketId).emit(eventName, payload); -} - /** * Parses Stockfish info output into structured data * @param {Array} outputLines - Raw Stockfish output lines @@ -340,82 +360,6 @@ function buildQuestionPrompt({ fen, question, stockfish }) { ].filter(line => line !== "").join("\n"); } -// ============================================================================ -// STOCKFISH ANALYSIS -// ============================================================================ - -/** - * Gets Stockfish analysis for a position - * @param {string} fenAfter - FEN position to analyze - * @param {Object} analysisSettings - Analysis parameters (depth, movetime, multipv) - * @returns {Promise} Stockfish facts object - */ -async function getStockfishAnalysis(fenAfter, analysisSettings) { - await ensureStockfishSession(); - - // Serialize evaluations through queue to prevent conflicts - stockfishQueue = stockfishQueue.then(() => { - return new Promise((resolve, reject) => { - const depth = analysisSettings?.depth ?? 15; - const timeoutMs = 8000; - - const timeout = setTimeout(() => { - cleanup(); - reject(new Error("Stockfish analysis timed out")); - }, timeoutMs); - - function cleanup() { - clearTimeout(timeout); - stockfishSocket.off("evaluation-complete", onComplete); - stockfishSocket.off("evaluation-error", onError); - } - - function onError(err) { - cleanup(); - reject(new Error(err?.error || "Stockfish evaluation error")); - } - - function onComplete(data) { - cleanup(); - - if (!data) { - return reject(new Error("Stockfish returned empty response")); - } - - // Handle info mode response - if (data.mode === "info" && Array.isArray(data.output)) { - return resolve(parseInfoOutput(data.output)); - } - - // Handle move mode response (fallback) - if (data.mode === "move") { - return resolve({ - bestMove: data.move || null, - evalCp: null, - mateIn: null, - pv: null, - raw: [JSON.stringify(data)], - }); - } - - return reject(new Error(`Unexpected stockfish response mode: ${data.mode}`)); - } - - stockfishSocket.on("evaluation-complete", onComplete); - stockfishSocket.on("evaluation-error", onError); - - // Request analysis from Stockfish server - stockfishSocket.emit("evaluate-fen", { - fen: fenAfter, - move: "", - level: depth, - }); - }); - }); - - return stockfishQueue; -} - // ============================================================================ // OPENAI INTEGRATION // ============================================================================ @@ -446,23 +390,80 @@ async function callOpenAI(stockfishFacts, moveContext) { stockfish: stockfishFacts, }); - const resp = await client.chat.completions.create({ - model: process.env.OPENAI_MODEL || "gpt-4o", - messages: [ - { role: "system", content: "Follow the user instructions exactly." }, - { role: "user", content: prompt }, - ], - temperature: 0.2, - }); + // Check rate limiter before making API call + const rateLimitResult = openai.rateLimiter.acquire(); + if (!rateLimitResult.allowed) { + logMetric("openai_rate_limit", null, false, { retryAfter: rateLimitResult.retryAfter }); + const error = new Error("OPENAI_RATE_LIMIT"); + error.retryAfter = rateLimitResult.retryAfter; + throw error; + } - const responseContent = resp.choices?.[0]?.message?.content ?? ""; - - // Log response if in mock mode - if (openai.isMockMode && openai.isMockMode()) { - console.log("[AnalysisService] Sample response (mock mode):", responseContent); + const startTime = Date.now(); + let success = true; + let error = null; + + try { + const resp = await client.chat.completions.create({ + model: process.env.OPENAI_MODEL || "gpt-4o", + messages: [ + { role: "system", content: "Follow the user instructions exactly." }, + { role: "user", content: prompt }, + ], + temperature: 0.2, + }); + + const responseContent = resp.choices?.[0]?.message?.content ?? ""; + const duration_ms = Date.now() - startTime; + + // Log timing metric + logMetric("openai_latency", duration_ms, true); + + // Log response if in mock mode + if (openai.isMockMode && openai.isMockMode()) { + console.log("[AnalysisService] Sample response (mock mode):", responseContent); + } + + // Parse and validate the response + const parsed = parseOpenAIJson(responseContent); + if (!parsed) { + throw new Error("OPENAI_INVALID_RESPONSE"); + } + + if (!validateTutorResponse(parsed)) { + throw new Error("OPENAI_INVALID_RESPONSE"); + } + + // Return normalized response (nextStepHint is optional but we prefer it to be a string) + return { + moveIndicator: parsed.moveIndicator, + Analysis: parsed.Analysis, + nextStepHint: parsed.nextStepHint || "", + }; + } catch (err) { + success = false; + error = err.message; + const duration_ms = Date.now() - startTime; + logMetric("openai_latency", duration_ms, false, { error: err.message }); + throw err; } - return responseContent; + // Parse and validate the response + const parsed = parseOpenAIJson(responseContent); + if (!parsed) { + throw new Error("OPENAI_INVALID_RESPONSE"); + } + + if (!validateTutorResponse(parsed)) { + throw new Error("OPENAI_INVALID_RESPONSE"); + } + + // Return normalized response (nextStepHint is optional but we prefer it to be a string) + return { + moveIndicator: parsed.moveIndicator, + Analysis: parsed.Analysis, + nextStepHint: parsed.nextStepHint || "", + }; } /** @@ -549,6 +550,26 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { console.log(`[AnalysisService] Sample response (mock mode, ${mode}):`, responseContent); } + // For move mode, parse and validate as tutor response + if (mode === "move") { + const parsed = parseOpenAIJson(responseContent); + if (!parsed) { + throw new Error("OPENAI_INVALID_RESPONSE"); + } + + if (!validateTutorResponse(parsed)) { + throw new Error("OPENAI_INVALID_RESPONSE"); + } + + // Return normalized response + return { + moveIndicator: parsed.moveIndicator, + Analysis: parsed.Analysis, + nextStepHint: parsed.nextStepHint || "", + }; + } + + // For question mode, return raw content (string answer) return responseContent; } @@ -556,84 +577,6 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { // PUBLIC API FUNCTIONS // ============================================================================ -/** - * Analyzes a move and emits explanation via socket (for socket-based games) - * @param {string} gameId - Game identifier - * @param {string} fenBefore - FEN before move - * @param {string} fenAfter - FEN after move - * @param {string} moveUci - UCI move notation - * @param {number} moveIndex - Move index in game - * @param {Object} analysisSettings - Analysis parameters - * @param {Object} io - Socket.IO server instance - * @param {string} studentSocketId - Student socket ID - * @param {string} mentorSocketId - Mentor socket ID - * @returns {Promise} - */ -async function analyzeMove( - gameId, - fenBefore, - fenAfter, - moveUci, - moveIndex, - analysisSettings, - io, - studentSocketId, - mentorSocketId -) { - const cacheKey = getCacheKey(fenAfter, moveUci, analysisSettings); - - // Cache hit: return immediately - if (cache.has(cacheKey)) { - const cached = cache.get(cacheKey); - emitToBoth(io, studentSocketId, mentorSocketId, "move-explanation", { - gameId, - moveIndex, - moveUci, - explanation: cached, - cached: true, - }); - return; - } - - // Cache miss: notify UI immediately - emitToBoth(io, studentSocketId, mentorSocketId, "analysis-started", { - gameId, - moveIndex, - moveUci, - }); - - // 1) Get Stockfish analysis - const stockfishFacts = await getStockfishAnalysis(fenAfter, analysisSettings); - - // 2) Build move context - const moveContext = { - gameId, - moveIndex, - fenBefore, - fenAfter, - moveUci, - san: null, - turn: null, - lastMoves: [], - legalMoves: [], - }; - - // 3) Call OpenAI - const explanation = await callOpenAI(stockfishFacts, moveContext); - - // 4) Cache result (24h) - cache.set(cacheKey, explanation, 60 * 60 * 24); - - // 5) Emit result to both clients - emitToBoth(io, studentSocketId, mentorSocketId, "move-explanation", { - gameId, - moveIndex, - moveUci, - explanation, - cached: false, - }); -} - /** * Analyzes a move with chat history context (for REST API) * @param {Object} params - Move analysis parameters @@ -659,39 +602,92 @@ async function analyzeMoveWithHistory({ // Check cache if (cache.has(cacheKey)) { + // Log cache hit + const stats = cache.getStats(); + logMetric("cache_hit", null, true, { key: cacheKey, stats }); + // Even on cache hit, we need bestMove for auto-play feature // Stockfish analysis is fast compared to LLM, so we fetch it anyway - const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); - - return { - explanation: cache.get(cacheKey), - cached: true, - bestMove: stockfishFacts?.bestMove || null, - }; + const startTime = Date.now(); + let success = true; + let error = null; + + try { + const stockFishResponse = await fetchWithTimeout( + `${STOCKFISH_URL}/analysis`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + fen: fen_before, + moves: move, + depth, + multipv, + }), + }, + 6000, + "Stockfish /analysis" + ); + + if (!stockFishResponse.ok) { + throw new Error(`Stockfish server error: ${stockFishResponse.status}`); + } + + const stockfishFacts = await stockFishResponse.json(); + const duration_ms = Date.now() - startTime; + logMetric("stockfish_latency", duration_ms, true); + + return { + explanation: cache.get(cacheKey), + cached: true, + bestMove: stockfishFacts?.cpuMove || null, + }; + } catch (err) { + success = false; + error = err.message; + const duration_ms = Date.now() - startTime; + logMetric("stockfish_latency", duration_ms, false, { error: err.message }); + throw err; + } } + // Log cache miss + const stats = cache.getStats(); + logMetric("cache_miss", null, true, { key: cacheKey, stats }); + // 1) Get Stockfish analysis - const stockFishResponse = await fetchWithTimeout( - `${STOCKFISH_URL}/analysis`, - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - fen: fen_before, - moves: move, - depth, - multipv, - }), - }, - 6000, //timeout ms - "Stockfish /analysis" - ); + const startTime = Date.now(); - if (!stockFishResponse.ok) { - throw new Error(`Stockfish server error: ${stockFishResponse.status}`); - } + let stockFishfacts; + try { + const stockFishResponse = await fetchWithTimeout( + `${STOCKFISH_URL}/analysis`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + fen: fen_before, + moves: move, + depth, + multipv, + }), + }, + 6000, //timeout ms + "Stockfish /analysis" + ); - const stockFishfacts = await stockFishResponse.json(); + if (!stockFishResponse.ok) { + throw new Error(`Stockfish server error: ${stockFishResponse.status}`); + } + + stockFishfacts = await stockFishResponse.json(); + const duration_ms = Date.now() - startTime; + logMetric("stockfish_latency", duration_ms, true); + } catch (err) { + const duration_ms = Date.now() - startTime; + logMetric("stockfish_latency", duration_ms, false, { error: err.message }); + throw err; + } // const stockfishFacts = await getStockfishAnalysis(fen_after, analysisSettings); // 2) Parse UCI history into move list @@ -713,11 +709,39 @@ async function analyzeMoveWithHistory({ // #endregion // 4) Call OpenAI with chat history - const explanation = await callOpenAIWithHistory( - stockFishfacts, - moveContext, - "move" - ); + let explanation; + try { + const openaiResponse = await callOpenAIWithHistory( + stockFishfacts, + moveContext, + "move" + ); + + // openaiResponse is now a normalized object for move mode + explanation = JSON.stringify(openaiResponse); + } catch (error) { + // Log error metric if it's a rate limit + if (error.message === "OPENAI_RATE_LIMIT") { + logMetric("openai_rate_limit", null, false, { retryAfter: error.retryAfter }); + } + + // If OpenAI fails but Stockfish succeeded, use fallback + // Stockfish succeeded if stockFishfacts exists and has required data + if (stockFishfacts && stockFishfacts.classify) { + const fallbackResponse = generateFallbackResponse(stockFishfacts); + explanation = JSON.stringify(fallbackResponse); + // Don't throw - return fallback as successful response + // Cache the fallback response (shorter TTL could be used here, but keeping it consistent) + cache.set(cacheKey, explanation, 60 * 60 * 24); + return { + explanation, + cached: false, + bestMove: stockFishfacts?.cpuMove || null, + }; + } + // If Stockfish also failed, re-throw the error + throw error; + } // 5) Cache result cache.set(cacheKey, explanation, 60 * 60 * 24); @@ -747,16 +771,26 @@ async function answerQuestion({ // Check cache if (cache.has(questionCacheKey)) { + // Log cache hit + const stats = cache.getStats(); + logMetric("cache_hit", null, true, { key: questionCacheKey, stats }); + return { answer: cache.get(questionCacheKey), cached: true, }; } + // Log cache miss + const stats = cache.getStats(); + logMetric("cache_miss", null, true, { key: questionCacheKey, stats }); + // Optional: Get Stockfish analysis for current position (for context) let stockfishFacts = null; + let stockfishStartTime = null; try { // stockfishFacts = await getStockfishAnalysis(fen, { depth: 10 }); + stockfishStartTime = Date.now(); const stockFishResponse = await fetchWithTimeout( `${STOCKFISH_URL}/analysis`, // use the same STOCKFISH_URL constant you already defined { @@ -777,8 +811,14 @@ async function answerQuestion({ } stockfishFacts = await stockFishResponse.json(); + const duration_ms = Date.now() - stockfishStartTime; + logMetric("stockfish_latency", duration_ms, true); console.log(stockfishFacts) } catch (err) { + if (stockfishStartTime) { + const duration_ms = Date.now() - stockfishStartTime; + logMetric("stockfish_latency", duration_ms, false, { error: err.message }); + } console.warn("[AnalysisService] Stockfish analysis failed for question, continuing without it:", err.message); } @@ -812,12 +852,10 @@ async function answerQuestion({ module.exports = { // Public API - analyzeMove, analyzeMoveWithHistory, answerQuestion, // Internal functions (exposed for testing/debugging) - getStockfishAnalysis, callOpenAI, callOpenAIWithHistory, getCacheKey, From d1bfe9158e0f6b40dfb5ac28180a59ec933451d3 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:35:23 -0500 Subject: [PATCH 09/20] set cache size --- chessServer/src/utils/cache.js | 79 ++++++++++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/chessServer/src/utils/cache.js b/chessServer/src/utils/cache.js index a71cb699..7399215b 100644 --- a/chessServer/src/utils/cache.js +++ b/chessServer/src/utils/cache.js @@ -1,8 +1,15 @@ // chessServer/src/utils/cache.js -// Responsibility: Simple caching layer with TTL support +// Responsibility: Simple caching layer with TTL support and size limits // Cache key format: analysis:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv} -const cache = new Map(); // Stores: { value, expiresAt } +const cache = new Map(); // Stores: { value, expiresAt, lastAccess } +const MAX_SIZE = Number(process.env.CACHE_MAX_SIZE || 5000); + +// Cache statistics +let stats = { + hits: 0, + misses: 0, +}; /** * Get a value from cache if it exists and hasn't expired @@ -13,18 +20,49 @@ function get(key) { const entry = cache.get(key); if (!entry) { + stats.misses++; return null; } // Check if expired if (Date.now() > entry.expiresAt) { cache.delete(key); // Clean up expired entry + stats.misses++; return null; } + // Update last access time for LRU + entry.lastAccess = Date.now(); + stats.hits++; return entry.value; } +/** + * Evict least recently used entry when cache is at capacity + * @private + */ +function _evictLRU() { + if (cache.size < MAX_SIZE) { + return; // No eviction needed + } + + // Find the entry with the oldest lastAccess time + let oldestKey = null; + let oldestAccess = Infinity; + + for (const [key, entry] of cache.entries()) { + const lastAccess = entry.lastAccess || entry.expiresAt; // Fallback to expiresAt if lastAccess not set + if (lastAccess < oldestAccess) { + oldestAccess = lastAccess; + oldestKey = key; + } + } + + if (oldestKey !== null) { + cache.delete(oldestKey); + } +} + /** * Set a value in cache with TTL * @param {string} key - Cache key @@ -32,8 +70,14 @@ function get(key) { * @param {number} ttlSeconds - Time to live in seconds (default: 24 hours) */ function set(key, value, ttlSeconds = 86400) { + // Evict LRU entry if cache is at capacity + if (cache.size >= MAX_SIZE && !cache.has(key)) { + _evictLRU(); + } + const expiresAt = Date.now() + (ttlSeconds * 1000); - cache.set(key, { value, expiresAt }); + const now = Date.now(); + cache.set(key, { value, expiresAt, lastAccess: now }); } /** @@ -45,6 +89,7 @@ function has(key) { const entry = cache.get(key); if (!entry) { + // Note: get() already increments stats, so we don't increment here return false; } @@ -54,6 +99,7 @@ function has(key) { return false; } + // Note: get() already increments stats and updates lastAccess, so we don't need to do it here return true; } @@ -82,10 +128,37 @@ function cleanup() { return removed; } +/** + * Get cache statistics + * @returns {Object} Cache statistics + */ +function getStats() { + const total = stats.hits + stats.misses; + const hitRate = total > 0 ? stats.hits / total : 0; + + return { + size: cache.size, + maxSize: MAX_SIZE, + hits: stats.hits, + misses: stats.misses, + hitRate: hitRate, + }; +} + +/** + * Reset cache statistics (for testing) + */ +function resetStats() { + stats.hits = 0; + stats.misses = 0; +} + module.exports = { get, set, has, clear, cleanup, + getStats, + resetStats, }; \ No newline at end of file From 3d50a57f421906ea680ca11d41dfedd799363a00 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:35:54 -0500 Subject: [PATCH 10/20] front end error handling --- .../src/features/aitutor/Aitutor.tsx | 286 +++++++++++++++++- 1 file changed, 282 insertions(+), 4 deletions(-) diff --git a/react-ystemandchess/src/features/aitutor/Aitutor.tsx b/react-ystemandchess/src/features/aitutor/Aitutor.tsx index 6d34a657..8415c2c2 100644 --- a/react-ystemandchess/src/features/aitutor/Aitutor.tsx +++ b/react-ystemandchess/src/features/aitutor/Aitutor.tsx @@ -28,6 +28,11 @@ type ChatMessage = { Analysis?: string; nextStepHint?: string; }; + error?: { + message: string; + errorCode?: string; + retryable?: boolean; + }; }; @@ -49,6 +54,11 @@ const AITutor: React.FC = () => { const [chatMessages, setChatMessages] = useState([]); //array of chat messages. Contains every message sent or received. // Avatar and analysis state const [isAnalyzing, setIsAnalyzing] = useState(false); //flag to indicate if the AI is analyzing a move or question. Shows loading dots while analyzing. + // Retry state + const [lastFailedRequest, setLastFailedRequest] = useState<{ + type: "move" | "question"; + payload: any; + } | null>(null); //------------------------------ // DATA FORMAT HELPERS @@ -139,6 +149,31 @@ const AITutor: React.FC = () => { + //-------------------------------- + // ERROR HANDLING HELPERS + //-------------------------------- + function getErrorMessage(errorCode?: string, fallbackMessage?: string): string { + if (!errorCode) { + return fallbackMessage || "An error occurred. Please try again."; + } + + const errorMessages: Record = { + OPENAI_INVALID_RESPONSE: "Received an unexpected response. Trying again...", + OPENAI_TIMEOUT: "The analysis is taking longer than expected. Please try again.", + OPENAI_RATE_LIMIT: "Too many requests. Please wait a moment and try again.", + OPENAI_API_ERROR: "Unable to analyze the move. Please try again or make another move.", + STOCKFISH_TIMEOUT: "The engine analysis timed out. Please try again.", + STOCKFISH_NETWORK_ERROR: "Connection issue with the chess engine. Please check your internet and try again.", + STOCKFISH_PARSE_ERROR: "Failed to parse engine response. Please try again.", + VALIDATION_ERROR: "Invalid request. Please check your input and try again.", + NETWORK_ERROR: "Connection issue. Please check your internet and try again.", + TIMEOUT: "Request timed out. Please try again.", + INTERNAL_ERROR: "Server error. Please try again later.", + }; + + return errorMessages[errorCode] || fallbackMessage || "An error occurred. Please try again."; + } + //-------------------------------- // APP BEHAVIOR HELPERS //-------------------------------- @@ -185,13 +220,34 @@ const AITutor: React.FC = () => { const data = await response.json(); if (!data.success) { - console.error("Analysis error:", data.error); + const errorMessage = getErrorMessage(data.errorCode, data.error); setIsAnalyzing(false); + + // Store the failed request for retry + if (data.retryable) { + setLastFailedRequest({ + type: "move", + payload: { + fen_before: fenBefore, + fen_after: fenAfter, + move: moveUci, + uciHistory, + depth: 15, + chatHistory: nextChatHistory, + }, + }); + } + // Replace last message (placeholder) with error setChatMessages((prev) => replaceLatestAssistantPlaceholder(prev, { role: "assistant", - content: `Error: ${data.error || "Analysis failed"}`, + content: errorMessage, + error: { + message: errorMessage, + errorCode: data.errorCode, + retryable: data.retryable || false, + }, }) ); return; @@ -231,11 +287,31 @@ const AITutor: React.FC = () => { } catch (error) { setIsAnalyzing(false); console.error("Network error:", error); + + const errorMessage = getErrorMessage("NETWORK_ERROR", "Network error: Failed to analyze move."); + + // Store the failed request for retry + setLastFailedRequest({ + type: "move", + payload: { + fen_before: fenBefore, + fen_after: fenAfter, + move: moveUci, + uciHistory, + depth: 15, + chatHistory: nextChatHistory, + }, + }); setChatMessages((prev) => replaceLatestAssistantPlaceholder(prev, { role: "assistant", - content: "Network error: Failed to analyze move.", + content: errorMessage, + error: { + message: errorMessage, + errorCode: "NETWORK_ERROR", + retryable: true, + }, }) ); } @@ -292,6 +368,36 @@ const AITutor: React.FC = () => { // Reset analyzing state setIsAnalyzing(false); + if (!data.success) { + const errorMessage = getErrorMessage(data.errorCode, data.error); + + // Store the failed request for retry + if (data.retryable) { + setLastFailedRequest({ + type: "question", + payload: { + fen, + question: questionText, + chatHistory: nextChatHistory, + }, + }); + } + + // Replace placeholder message with error + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: errorMessage, + error: { + message: errorMessage, + errorCode: data.errorCode, + retryable: data.retryable || false, + }, + }) + ); + return; + } + // Replace placeholder message with actual answer setChatMessages((prev) => replaceLatestAssistantPlaceholder(prev, { @@ -303,11 +409,144 @@ const AITutor: React.FC = () => { } catch (error) { setIsAnalyzing(false); console.error("Network error:", error); + + const errorMessage = getErrorMessage("NETWORK_ERROR", "Network error: Failed to get answer."); + + // Store the failed request for retry + setLastFailedRequest({ + type: "question", + payload: { + fen, + question: questionText, + chatHistory: nextChatHistory, + }, + }); + // Replace placeholder message with error setChatMessages((prev) => replaceLatestAssistantPlaceholder(prev, { role: "assistant", - content: "Network error: Failed to get answer.", + content: errorMessage, + error: { + message: errorMessage, + errorCode: "NETWORK_ERROR", + retryable: true, + }, + }) + ); + } + } + + // Retry function + async function retryLastFailedRequest() { + if (!lastFailedRequest) return; + + setIsAnalyzing(true); + + // Add placeholder message for loading state + const nextChatHistory = [ + ...chatMessages, + { + role: "assistant" as const, + content: "", + explanation: undefined, + }, + ]; + setChatMessages(nextChatHistory); + + // Helper to ensure exactly one slash in URL + const baseUrl = environment.urls.chessServer.replace(/\/$/, ""); + const apiUrl = `${baseUrl}/api/analyze`; + + try { + const response = await fetch(apiUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + type: lastFailedRequest.type, + ...lastFailedRequest.payload, + chatHistory: nextChatHistory, + }), + }); + + const data = await response.json(); + + if (!data.success) { + const errorMessage = getErrorMessage(data.errorCode, data.error); + setIsAnalyzing(false); + + // Keep the failed request for another retry attempt if retryable + if (!data.retryable) { + setLastFailedRequest(null); + } + + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: errorMessage, + error: { + message: errorMessage, + errorCode: data.errorCode, + retryable: data.retryable || false, + }, + }) + ); + return; + } + + // Handle successful response + if (lastFailedRequest.type === "move") { + let explanation: ChatMessage["explanation"] | undefined; + try { + if (typeof data.explanation === "string") { + explanation = JSON.parse(data.explanation); + } else if (data.explanation && typeof data.explanation === "object") { + explanation = data.explanation; + } + } catch (error) { + console.error("Failed to parse explanation:", error); + } + + setIsAnalyzing(false); + setLastFailedRequest(null); + + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: explanation?.Analysis ?? "Analysis ready.", + explanation, + }) + ); + + if (data.bestMove) { + applyCpuMove(data.bestMove); + } + } else { + setIsAnalyzing(false); + setLastFailedRequest(null); + + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: data.answer ?? "No answer returned.", + }) + ); + } + } catch (error) { + setIsAnalyzing(false); + console.error("Network error:", error); + + const errorMessage = getErrorMessage("NETWORK_ERROR", "Network error: Please try again."); + + setChatMessages((prev) => + replaceLatestAssistantPlaceholder(prev, { + role: "assistant", + content: errorMessage, + error: { + message: errorMessage, + errorCode: "NETWORK_ERROR", + retryable: true, + }, }) ); } @@ -471,6 +710,45 @@ const AITutor: React.FC = () => { > ♟ MOVE: {m.content} + ) : m.role === "assistant" && m.error ? ( + // Error message with retry button - check this BEFORE regular assistant messages +
+
+ {m.content} +
+ {m.error.retryable && ( + + )} +
) : m.role === "assistant" && m.explanation ? ( (() => { const tone = getMoveIndicatorStyles( From 2ed64ecc4a1a6d1eec5b94a80b21e7bd4603553a Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:41:03 -0500 Subject: [PATCH 11/20] rate limit LLM --- chessServer/src/utils/rateLimiter.js | 86 ++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 chessServer/src/utils/rateLimiter.js diff --git a/chessServer/src/utils/rateLimiter.js b/chessServer/src/utils/rateLimiter.js new file mode 100644 index 00000000..3c8ac840 --- /dev/null +++ b/chessServer/src/utils/rateLimiter.js @@ -0,0 +1,86 @@ +// chessServer/src/utils/rateLimiter.js +// Responsibility: Token bucket rate limiter +// Implements token bucket algorithm for rate limiting API calls + +/** + * Token bucket rate limiter + * Refills tokens at a constant rate (tokens per second) + * Each request consumes 1 token + */ +class RateLimiter { + constructor(ratePerMinute = 60, capacity = null) { + // Rate in tokens per second + this.ratePerSecond = ratePerMinute / 60; + + // Capacity defaults to rate per minute (allows burst of up to 1 minute) + this.capacity = capacity !== null ? capacity : ratePerMinute; + + // Current token count + this.tokens = this.capacity; + + // Last refill timestamp + this.lastRefill = Date.now(); + } + + /** + * Refills tokens based on elapsed time + * @private + */ + _refill() { + const now = Date.now(); + const elapsed = (now - this.lastRefill) / 1000; // Convert to seconds + + if (elapsed > 0) { + // Add tokens based on rate + this.tokens = Math.min( + this.capacity, + this.tokens + (elapsed * this.ratePerSecond) + ); + this.lastRefill = now; + } + } + + /** + * Attempts to acquire a token + * @returns {Object} { allowed: boolean, retryAfter?: number } + */ + acquire() { + this._refill(); + + if (this.tokens >= 1) { + // Token available, consume it + this.tokens -= 1; + return { allowed: true }; + } + + // No token available, calculate retry after + const tokensNeeded = 1; + const secondsToWait = tokensNeeded / this.ratePerSecond; + const retryAfter = Math.ceil(secondsToWait * 1000); // Convert to milliseconds + + return { + allowed: false, + retryAfter, + }; + } + + /** + * Gets current token count (for debugging/monitoring) + * @returns {number} Current token count + */ + getTokens() { + this._refill(); + return this.tokens; + } + + /** + * Resets the rate limiter (for testing) + */ + reset() { + this.tokens = this.capacity; + this.lastRefill = Date.now(); + } +} + +module.exports = RateLimiter; + From 3559b48844fb4a9697709a5453d1696ee324070f Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:45:35 -0500 Subject: [PATCH 12/20] backend tests --- chessServer/src/tests/AnalysisService.test.js | 446 ++++++++++++++++++ chessServer/src/tests/README.md | 72 +++ chessServer/src/tests/api.test.js | 392 +++++++++++++++ chessServer/src/tests/cache.test.js | 158 +++++++ chessServer/src/tests/errorHandling.test.js | 211 +++++++++ .../src/tests/fixtures/openaiResponse.js | 14 + .../src/tests/fixtures/stockfishResponse.js | 37 ++ chessServer/src/tests/fixtures/testData.js | 30 ++ chessServer/src/tests/helpers/mockHelpers.js | 93 ++++ chessServer/src/tests/openai.test.js | 163 +++++++ chessServer/src/tests/rateLimiter.test.js | 79 ++++ 11 files changed, 1695 insertions(+) create mode 100644 chessServer/src/tests/AnalysisService.test.js create mode 100644 chessServer/src/tests/README.md create mode 100644 chessServer/src/tests/api.test.js create mode 100644 chessServer/src/tests/cache.test.js create mode 100644 chessServer/src/tests/errorHandling.test.js create mode 100644 chessServer/src/tests/fixtures/openaiResponse.js create mode 100644 chessServer/src/tests/fixtures/stockfishResponse.js create mode 100644 chessServer/src/tests/fixtures/testData.js create mode 100644 chessServer/src/tests/helpers/mockHelpers.js create mode 100644 chessServer/src/tests/openai.test.js create mode 100644 chessServer/src/tests/rateLimiter.test.js diff --git a/chessServer/src/tests/AnalysisService.test.js b/chessServer/src/tests/AnalysisService.test.js new file mode 100644 index 00000000..e12e7a4e --- /dev/null +++ b/chessServer/src/tests/AnalysisService.test.js @@ -0,0 +1,446 @@ +const analysisService = require("../services/AnalysisService"); +const cache = require("../utils/cache"); +const { validResponse } = require("./fixtures/stockfishResponse"); +const { moveAnalysisResponse, questionResponse } = require("./fixtures/openaiResponse"); +const { + startingFen, + afterMoveFen, + sampleMove, + sampleUciHistory, + emptyChatHistory, + sampleChatHistory, + sampleQuestion +} = require("./fixtures/testData"); +const { + createMockStockfishFetch, + createMockFetchReject +} = require("./helpers/mockHelpers"); + +// Mock fetch globally +global.fetch = jest.fn(); + +// Set environment to use mock mode for OpenAI +process.env.LLM_MODE = "mock"; +delete process.env.OPENAI_API_KEY; + +describe("AnalysisService", () => { + let openaiClient; + let originalCreate; + let openaiModule; + + beforeEach(() => { + cache.clear(); + jest.clearAllMocks(); + global.fetch.mockReset(); + + // Ensure we're in mock mode + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + // Get OpenAI module (don't reset modules here to avoid breaking analysisService) + openaiModule = require("../config/openai"); + openaiClient = openaiModule.getClient(); + + // Spy on the create method to verify calls + originalCreate = openaiClient.chat.completions.create; + openaiClient.chat.completions.create = jest.fn(originalCreate); + }); + + afterEach(() => { + cache.clear(); + // Restore original implementation + if (openaiClient && originalCreate) { + openaiClient.chat.completions.create = originalCreate; + } + }); + + describe("analyzeMoveWithHistory()", () => { + describe("Cache miss scenario", () => { + test("mocks Stockfish HTTP + mocks OpenAI → asserts Stockfish called, OpenAI called, cache set, response includes explanation, bestMove, cached:false", async () => { + // Setup mocks + global.fetch = createMockStockfishFetch(validResponse); + + // Ensure cache is empty + cache.clear(); + + // Call the function + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + // Assert Stockfish was called + expect(global.fetch).toHaveBeenCalled(); + const stockfishCall = global.fetch.mock.calls.find(call => + call[0] && call[0].includes("/analysis") + ); + expect(stockfishCall).toBeDefined(); + expect(stockfishCall[1].method).toBe("POST"); + const requestBody = JSON.parse(stockfishCall[1].body); + expect(requestBody).toMatchObject({ + fen: startingFen, + moves: sampleMove, + depth: 15, + multipv: 15 + }); + + // Assert OpenAI was called + expect(openaiClient.chat.completions.create).toHaveBeenCalled(); + const openaiCall = openaiClient.chat.completions.create.mock.calls[0][0]; + expect(openaiCall.messages).toBeDefined(); + expect(openaiCall.messages.length).toBeGreaterThan(0); + expect(openaiCall.messages[openaiCall.messages.length - 1].role).toBe("user"); + + // Assert cache was set + const cacheKey = analysisService.getCacheKey(afterMoveFen, sampleMove, { depth: 15, movetime: 2000, multipv: 1 }); + expect(cache.has(cacheKey)).toBe(true); + const cachedValue = cache.get(cacheKey); + expect(cachedValue).toBeDefined(); + expect(typeof cachedValue).toBe("string"); + + // Assert response structure + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("bestMove"); + expect(result).toHaveProperty("cached"); + expect(result.cached).toBe(false); + expect(result.explanation).toBeDefined(); + expect(typeof result.explanation).toBe("string"); // Explanation is stringified JSON + expect(result.bestMove).toBe(validResponse.cpuMove); + + // Verify explanation can be parsed and has required fields + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation).toHaveProperty("moveIndicator"); + expect(parsedExplanation).toHaveProperty("Analysis"); + expect(typeof parsedExplanation.moveIndicator).toBe("string"); + expect(typeof parsedExplanation.Analysis).toBe("string"); + }); + }); + + describe("Cache hit scenario", () => { + test("prepopulate cache → asserts OpenAI not called, response includes cached explanation, cached:true, and verify Stockfish is called on hit", async () => { + // Pre-populate cache + const cacheKey = analysisService.getCacheKey(afterMoveFen, sampleMove, { depth: 15, movetime: 2000, multipv: 1 }); + const cachedExplanation = "This is a cached explanation"; + cache.set(cacheKey, cachedExplanation, 86400); + + // Setup mocks + global.fetch = createMockStockfishFetch(validResponse); + + // Clear OpenAI call count + openaiClient.chat.completions.create.mockClear(); + + // Call the function + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + // Assert OpenAI was NOT called (cache hit) + expect(openaiClient.chat.completions.create).not.toHaveBeenCalled(); + + // Assert Stockfish WAS called (for bestMove even on cache hit) + expect(global.fetch).toHaveBeenCalled(); + const stockfishCall = global.fetch.mock.calls.find(call => + call[0] && call[0].includes("/analysis") + ); + expect(stockfishCall).toBeDefined(); + + // Assert response structure + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("cached"); + expect(result).toHaveProperty("bestMove"); + expect(result.cached).toBe(true); + expect(result.explanation).toBe(cachedExplanation); + expect(result.bestMove).toBe(validResponse.cpuMove); + }); + }); + + describe("Chat history handling", () => { + test("chat history is correctly formatted for OpenAI messages array", async () => { + global.fetch = createMockStockfishFetch(validResponse); + + await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: sampleChatHistory, + multipv: 15 + }); + + const openaiCall = openaiClient.chat.completions.create.mock.calls[0][0]; + const messages = openaiCall.messages; + + // Check system message + expect(messages[0].role).toBe("system"); + + // Check chat history conversion + // move -> user, assistant -> assistant, user -> user + let historyIndex = 1; + for (const msg of sampleChatHistory) { + if (msg.role === "move") { + expect(messages[historyIndex].role).toBe("user"); + } else if (msg.role === "assistant" || msg.role === "user") { + expect(messages[historyIndex].role).toBe(msg.role); + } + historyIndex++; + } + + // Last message should be the current move prompt + expect(messages[messages.length - 1].role).toBe("user"); + }); + }); + }); + + describe("answerQuestion()", () => { + describe("Cache miss scenario", () => { + test("mocks OpenAI → asserts prompt includes FEN + question, cache set, cached:false", async () => { + global.fetch = createMockStockfishFetch({ ...validResponse, topBestMoves: [] }); + + cache.clear(); + + const result = await analysisService.answerQuestion({ + fen: afterMoveFen, + question: sampleQuestion, + chatHistory: emptyChatHistory + }); + + // Assert OpenAI was called with correct prompt + expect(openaiClient.chat.completions.create).toHaveBeenCalled(); + const openaiCall = openaiClient.chat.completions.create.mock.calls[0][0]; + const lastMessage = openaiCall.messages[openaiCall.messages.length - 1].content; + + expect(lastMessage).toContain(afterMoveFen); + expect(lastMessage).toContain(sampleQuestion); + + // Assert cache was set + const questionCacheKey = `question:v1:${afterMoveFen}:${sampleQuestion}`; + expect(cache.has(questionCacheKey)).toBe(true); + const cachedValue = cache.get(questionCacheKey); + expect(cachedValue).toBeDefined(); + + // Assert response structure + expect(result).toHaveProperty("answer"); + expect(result).toHaveProperty("cached"); + expect(result.cached).toBe(false); + expect(result.answer).toBeDefined(); + }); + }); + + describe("Cache hit scenario", () => { + test("prepopulate cache → asserts OpenAI not called, cached:true", async () => { + // Pre-populate cache + const questionCacheKey = `question:v1:${afterMoveFen}:${sampleQuestion}`; + const cachedAnswer = "This is a cached answer"; + cache.set(questionCacheKey, cachedAnswer, 86400); + + // Clear OpenAI call count + openaiClient.chat.completions.create.mockClear(); + + const result = await analysisService.answerQuestion({ + fen: afterMoveFen, + question: sampleQuestion, + chatHistory: emptyChatHistory + }); + + // Assert OpenAI was NOT called + expect(openaiClient.chat.completions.create).not.toHaveBeenCalled(); + + // Assert response structure + expect(result).toHaveProperty("answer"); + expect(result).toHaveProperty("cached"); + expect(result.cached).toBe(true); + expect(result.answer).toBe(cachedAnswer); + }); + }); + }); + + describe("Error Handling", () => { + describe("Invalid OpenAI JSON Response", () => { + test("invalid JSON response returns fallback when Stockfish succeeded", async () => { + global.fetch = createMockStockfishFetch(validResponse); + + // Mock OpenAI to return invalid JSON + openaiClient.chat.completions.create = jest.fn().mockResolvedValue({ + choices: [{ + message: { + content: "This is not valid JSON { incomplete" + } + }] + }); + + // Should return fallback response (not throw) when Stockfish succeeded + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("bestMove"); + expect(result).toHaveProperty("cached", false); + + // Verify fallback response structure + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation).toHaveProperty("moveIndicator"); + expect(parsedExplanation).toHaveProperty("Analysis"); + expect(parsedExplanation).toHaveProperty("nextStepHint"); + expect(parsedExplanation.moveIndicator).toBe(validResponse.classify); + expect(parsedExplanation.Analysis).toContain("trouble providing a detailed analysis"); + }); + + test("missing required fields in JSON returns fallback when Stockfish succeeded", async () => { + global.fetch = createMockStockfishFetch(validResponse); + + // Mock OpenAI to return JSON missing required fields + openaiClient.chat.completions.create = jest.fn().mockResolvedValue({ + choices: [{ + message: { + content: JSON.stringify({ + // Missing moveIndicator and Analysis + nextStepHint: "Some hint" + }) + } + }] + }); + + // Should return fallback response (not throw) when Stockfish succeeded + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("bestMove"); + expect(result).toHaveProperty("cached", false); + + // Verify fallback response structure + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation).toHaveProperty("moveIndicator"); + expect(parsedExplanation).toHaveProperty("Analysis"); + expect(parsedExplanation).toHaveProperty("nextStepHint"); + expect(parsedExplanation.moveIndicator).toBe(validResponse.classify); + }); + }); + + describe("Fallback Response", () => { + test("when Stockfish succeeds but OpenAI fails, fallback explanation is returned (success true)", async () => { + global.fetch = createMockStockfishFetch(validResponse); + + // Mock OpenAI to fail + openaiClient.chat.completions.create = jest.fn().mockRejectedValue( + new Error("OPENAI_INVALID_RESPONSE") + ); + + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + // Should return fallback response (success, not error) + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("bestMove"); + expect(result).toHaveProperty("cached", false); + expect(result.bestMove).toBe(validResponse.cpuMove); + + // Verify fallback response structure + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation).toHaveProperty("moveIndicator"); + expect(parsedExplanation).toHaveProperty("Analysis"); + expect(parsedExplanation).toHaveProperty("nextStepHint"); + expect(parsedExplanation.moveIndicator).toBe(validResponse.classify); + expect(parsedExplanation.Analysis).toContain("trouble providing a detailed analysis"); + }); + + test("fallback response uses Stockfish classify for moveIndicator", async () => { + const customStockfishResponse = { + ...validResponse, + classify: "Mistake" + }; + global.fetch = createMockStockfishFetch(customStockfishResponse); + + // Mock OpenAI to fail + openaiClient.chat.completions.create = jest.fn().mockRejectedValue( + new Error("OPENAI_API_ERROR") + ); + + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation.moveIndicator).toBe("Mistake"); + }); + + test("fallback response is cached when used", async () => { + cache.clear(); + global.fetch = createMockStockfishFetch(validResponse); + + // Mock OpenAI to fail + openaiClient.chat.completions.create = jest.fn().mockRejectedValue( + new Error("OPENAI_INVALID_RESPONSE") + ); + + const result1 = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + expect(result1.cached).toBe(false); + + // Second call should hit cache + openaiClient.chat.completions.create.mockClear(); + const result2 = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + expect(result2.cached).toBe(true); + expect(openaiClient.chat.completions.create).not.toHaveBeenCalled(); + expect(result2.explanation).toBe(result1.explanation); + }); + }); + }); +}); + diff --git a/chessServer/src/tests/README.md b/chessServer/src/tests/README.md new file mode 100644 index 00000000..3534640a --- /dev/null +++ b/chessServer/src/tests/README.md @@ -0,0 +1,72 @@ +# AI Tutor Test Suite + +This directory contains comprehensive tests for the AI Tutor flow. + +## Test Files + +### Backend Tests + +- **`cache.test.js`** - Cache utility tests (TTL, expiration, cleanup) +- **`openai.test.js`** - OpenAI client initialization and mock mode tests +- **`AnalysisService.test.js`** - Main service tests for move analysis and question answering +- **`errorHandling.test.js`** - Error scenarios (timeouts, API failures) +- **`api.test.js`** - REST API endpoint tests using supertest + +### Test Fixtures + +- **`fixtures/stockfishResponse.js`** - Mock Stockfish server responses +- **`fixtures/openaiResponse.js`** - Mock OpenAI responses +- **`fixtures/testData.js`** - Common test data (FEN positions, moves, chat history) + +### Test Helpers + +- **`helpers/mockHelpers.js`** - Utility functions for creating mocks + +## Running Tests + +### Run all backend tests: + +```bash +cd chessServer +npm test +``` + +### Run specific test file: + +```bash +cd chessServer +npm test -- AnalysisService.test.js +npm test -- cache.test.js +npm test -- openai.test.js +npm test -- errorHandling.test.js +npm test -- api.test.js +``` + +### Run tests in watch mode: + +```bash +cd chessServer +npm test -- --watch +``` + +### Run tests with coverage: + +```bash +cd chessServer +npm test -- --coverage +``` + +## Test Environment + +Tests use: + +- **Mock mode for OpenAI** - Set via `LLM_MODE=mock` environment variable +- **Mocked fetch** - Global fetch is mocked for Stockfish server calls +- **In-memory cache** - Each test gets a clean cache instance + +## Notes + +- Tests do not require a real OpenAI API key +- Tests do not make actual network calls (all external services are mocked) +- Tests are isolated and can run in parallel +- Fake timers are used for TTL/expiration tests diff --git a/chessServer/src/tests/api.test.js b/chessServer/src/tests/api.test.js new file mode 100644 index 00000000..7d6184c7 --- /dev/null +++ b/chessServer/src/tests/api.test.js @@ -0,0 +1,392 @@ +const request = require("supertest"); +const express = require("express"); +const cors = require("cors"); +const { validResponse } = require("./fixtures/stockfishResponse"); +const { moveAnalysisResponse, questionResponse } = require("./fixtures/openaiResponse"); +const { + startingFen, + afterMoveFen, + sampleMove, + sampleUciHistory, + emptyChatHistory, + sampleQuestion +} = require("./fixtures/testData"); + +// Mock fetch for Stockfish +global.fetch = jest.fn(); + +// Set environment to use mock mode for OpenAI +process.env.LLM_MODE = "mock"; +delete process.env.OPENAI_API_KEY; + +// Mock the AnalysisService +jest.mock("../services/AnalysisService"); +const analysisService = require("../services/AnalysisService"); + +describe("POST /api/analyze", () => { + let app; + + beforeAll(() => { + // Create a test app with the same route structure + app = express(); + app.use(express.json()); + app.use(cors({ origin: "*" })); + + // Define the route handler (same as in index.js) + function withTimeout(promise, ms, label) { + let id; + const timeout = new Promise((_, reject) => { + id = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms); + }); + return Promise.race([promise, timeout]).finally(() => clearTimeout(id)); + } + + app.post("/api/analyze", async (req, res) => { + const TOTAL_MS = 15000; + + try { + const { type, ...data } = req.body; + + if (type === "move") { + const result = await withTimeout( + analysisService.analyzeMoveWithHistory({ + fen_before: data.fen_before, + fen_after: data.fen_after, + move: data.move, + uciHistory: data.uciHistory, + depth: data.depth || 15, + chatHistory: data.chatHistory || [], + multipv: data.multipv || 15, + }), + TOTAL_MS, + "Move analysis" + ); + + return res.json({ + success: true, + type: "move", + explanation: result.explanation, + cached: result.cached, + bestMove: result.bestMove || null, + }); + } + + if (type === "question") { + const result = await withTimeout( + analysisService.answerQuestion({ + fen: data.fen, + question: data.question, + chatHistory: data.chatHistory || [], + }), + TOTAL_MS, + "Question analysis" + ); + + return res.json({ + success: true, + type: "question", + answer: result.answer, + cached: result.cached, + }); + } + + return res.status(400).json({ + success: false, + error: `Unknown request type: ${type}. Expected 'move' or 'question'`, + }); + } catch (error) { + const msg = error?.message || "Internal server error"; + const msgLower = msg.toLowerCase(); + + // Classify error types (matching index.js implementation) + let errorCode = "INTERNAL_ERROR"; + let retryable = false; + let statusCode = 500; + + if (msg === "OPENAI_INVALID_RESPONSE") { + errorCode = "OPENAI_INVALID_RESPONSE"; + retryable = true; + statusCode = 500; + } else if (msgLower.includes("openai") && msgLower.includes("timeout")) { + errorCode = "OPENAI_TIMEOUT"; + retryable = true; + statusCode = 504; + } else if (msgLower.includes("rate limit") || msgLower.includes("rate_limit")) { + errorCode = "OPENAI_RATE_LIMIT"; + retryable = true; + statusCode = 429; + } else if (msgLower.includes("openai")) { + errorCode = "OPENAI_API_ERROR"; + retryable = true; + statusCode = 500; + } else if (msgLower.includes("stockfish") && msgLower.includes("timeout")) { + errorCode = "STOCKFISH_TIMEOUT"; + retryable = true; + statusCode = 504; + } else if (msgLower.includes("stockfish") && (msgLower.includes("network") || msgLower.includes("fetch"))) { + errorCode = "STOCKFISH_NETWORK_ERROR"; + retryable = true; + statusCode = 502; + } else if (msgLower.includes("stockfish") && msgLower.includes("parse")) { + errorCode = "STOCKFISH_PARSE_ERROR"; + retryable = false; + statusCode = 500; + } else if (msgLower.includes("validation")) { + errorCode = "VALIDATION_ERROR"; + retryable = false; + statusCode = 400; + } else if (msgLower.includes("network") || msgLower.includes("fetch") || msgLower.includes("econnrefused")) { + errorCode = "NETWORK_ERROR"; + retryable = true; + statusCode = 502; + } else if (msgLower.includes("timed out")) { + errorCode = "TIMEOUT"; + retryable = true; + statusCode = 504; + } + + return res.status(statusCode).json({ + success: false, + error: msg, + errorCode, + retryable, + }); + } + }); + }); + + beforeEach(() => { + jest.clearAllMocks(); + global.fetch.mockReset(); + // Reset mock implementations to ensure clean state + if (analysisService.analyzeMoveWithHistory?.mockReset) { + analysisService.analyzeMoveWithHistory.mockReset(); + } + if (analysisService.answerQuestion?.mockReset) { + analysisService.answerQuestion.mockReset(); + } + }); + + describe("Move Analysis", () => { + test("valid move analysis request returns success with explanation/cached/bestMove", async () => { + // Mock AnalysisService response + analysisService.analyzeMoveWithHistory = jest.fn().mockResolvedValue({ + explanation: moveAnalysisResponse, + cached: false, + bestMove: validResponse.cpuMove + }); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move", + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }) + .expect(200); + + expect(response.body).toHaveProperty("success", true); + expect(response.body).toHaveProperty("type", "move"); + expect(response.body).toHaveProperty("explanation"); + expect(response.body).toHaveProperty("cached", false); + expect(response.body).toHaveProperty("bestMove", validResponse.cpuMove); + + expect(analysisService.analyzeMoveWithHistory).toHaveBeenCalledWith({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + }); + + test("cached move analysis returns cached:true", async () => { + analysisService.analyzeMoveWithHistory = jest.fn().mockResolvedValue({ + explanation: moveAnalysisResponse, + cached: true, + bestMove: validResponse.cpuMove + }); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move", + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory + }) + .expect(200); + + expect(response.body.success).toBe(true); + expect(response.body.cached).toBe(true); + }); + }); + + describe("Question Analysis", () => { + test("valid question request returns success with answer and cached flag", async () => { + analysisService.answerQuestion = jest.fn().mockResolvedValue({ + answer: questionResponse, + cached: false + }); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "question", + fen: afterMoveFen, + question: sampleQuestion, + chatHistory: emptyChatHistory + }) + .expect(200); + + expect(response.body).toHaveProperty("success", true); + expect(response.body).toHaveProperty("type", "question"); + expect(response.body).toHaveProperty("answer", questionResponse); + expect(response.body).toHaveProperty("cached", false); + + expect(analysisService.answerQuestion).toHaveBeenCalledWith({ + fen: afterMoveFen, + question: sampleQuestion, + chatHistory: emptyChatHistory + }); + }); + }); + + describe("Error Responses", () => { + test("invalid request type returns 400 with success:false", async () => { + const response = await request(app) + .post("/api/analyze") + .send({ + type: "invalid-type" + }) + .expect(400); + + expect(response.body).toHaveProperty("success", false); + expect(response.body).toHaveProperty("error"); + expect(response.body.error).toContain("Unknown request type"); + }); + + test("missing parameters returns appropriate error", async () => { + // When required parameters are missing, the service will throw an error + // The endpoint catches it and returns 500 (not 400, since there's no input validation) + analysisService.analyzeMoveWithHistory = jest.fn().mockRejectedValue( + new Error("Missing required parameters: fen_before, fen_after, move") + ); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move" + // Missing required fields + }) + .expect(500); + + expect(response.body).toHaveProperty("success", false); + expect(response.body).toHaveProperty("error"); + expect(response.body.error).toContain("Missing required parameters"); + }); + + test("timeout returns 504 error with TIMEOUT errorCode and retryable:true", async () => { + // Mock service to throw a timeout error (as if withTimeout caught it) + analysisService.analyzeMoveWithHistory = jest.fn().mockRejectedValue( + new Error("Move analysis timed out after 15000ms") + ); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move", + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove + }) + .expect(504); + + // Timeout should return 504 with normalized error format + expect(response.body).toHaveProperty("success", false); + expect(response.body).toHaveProperty("errorCode", "TIMEOUT"); + expect(response.body).toHaveProperty("retryable", true); + expect(response.body.error).toContain("timed out"); + }); + + test("OPENAI_INVALID_RESPONSE returns 500 with errorCode and retryable:true", async () => { + analysisService.analyzeMoveWithHistory = jest.fn().mockRejectedValue( + new Error("OPENAI_INVALID_RESPONSE") + ); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move", + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove + }) + .expect(500); + + expect(response.body).toHaveProperty("success", false); + expect(response.body).toHaveProperty("errorCode", "OPENAI_INVALID_RESPONSE"); + expect(response.body).toHaveProperty("retryable", true); + expect(response.body).toHaveProperty("error", "OPENAI_INVALID_RESPONSE"); + }); + + test("server error returns 500 with INTERNAL_ERROR errorCode and retryable:false", async () => { + analysisService.analyzeMoveWithHistory = jest.fn().mockRejectedValue( + new Error("Internal server error") + ); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move", + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove + }) + .expect(500); + + expect(response.body).toHaveProperty("success", false); + expect(response.body).toHaveProperty("errorCode", "INTERNAL_ERROR"); + expect(response.body).toHaveProperty("retryable", false); + expect(response.body).toHaveProperty("error"); + }); + + test("/api/analyze returns normalized error shape with errorCode and retryable", async () => { + // Test various error codes + const errorTests = [ + { error: new Error("OPENAI_INVALID_RESPONSE"), expectedCode: "OPENAI_INVALID_RESPONSE", expectedRetryable: true }, + { error: new Error("OpenAI timeout"), expectedCode: "OPENAI_TIMEOUT", expectedRetryable: true }, + { error: new Error("Rate limit exceeded"), expectedCode: "OPENAI_RATE_LIMIT", expectedRetryable: true }, + { error: new Error("Stockfish network error"), expectedCode: "STOCKFISH_NETWORK_ERROR", expectedRetryable: true }, + { error: new Error("Network fetch failed"), expectedCode: "NETWORK_ERROR", expectedRetryable: true }, + ]; + + for (const testCase of errorTests) { + analysisService.analyzeMoveWithHistory = jest.fn().mockRejectedValue(testCase.error); + + const response = await request(app) + .post("/api/analyze") + .send({ + type: "move", + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove + }); + + expect(response.body).toHaveProperty("success", false); + expect(response.body).toHaveProperty("errorCode", testCase.expectedCode); + expect(response.body).toHaveProperty("retryable", testCase.expectedRetryable); + expect(response.body).toHaveProperty("error"); + } + }); + }); +}); + diff --git a/chessServer/src/tests/cache.test.js b/chessServer/src/tests/cache.test.js new file mode 100644 index 00000000..1e2a9581 --- /dev/null +++ b/chessServer/src/tests/cache.test.js @@ -0,0 +1,158 @@ +const cache = require("../utils/cache"); + +describe("Cache Utility", () => { + beforeEach(() => { + cache.clear(); + cache.resetStats(); + jest.useRealTimers(); + }); + + afterEach(() => { + cache.clear(); + cache.resetStats(); + jest.useRealTimers(); + }); + + describe("Basic Operations", () => { + test("get() returns value for valid key", () => { + cache.set("test-key", "test-value"); + expect(cache.get("test-key")).toBe("test-value"); + }); + + test("get() returns null for non-existent key", () => { + expect(cache.get("non-existent")).toBeNull(); + }); + + test("set() stores value with TTL", () => { + cache.set("key", "value", 60); + expect(cache.get("key")).toBe("value"); + }); + + test("set() uses default TTL when not specified", () => { + cache.set("key", "value"); + expect(cache.get("key")).toBe("value"); + expect(cache.has("key")).toBe(true); + }); + + test("set() overwrites existing key with new TTL", () => { + cache.set("key", "value1", 60); + cache.set("key", "value2", 120); + expect(cache.get("key")).toBe("value2"); + }); + + test("has() returns true for existing, non-expired key", () => { + cache.set("key", "value"); + expect(cache.has("key")).toBe(true); + }); + + test("has() returns false for non-existent key", () => { + expect(cache.has("non-existent")).toBe(false); + }); + + test("clear() removes all entries", () => { + cache.set("key1", "value1"); + cache.set("key2", "value2"); + cache.clear(); + expect(cache.has("key1")).toBe(false); + expect(cache.has("key2")).toBe(false); + }); + }); + + describe("TTL and Expiration", () => { + test("Entry expires after specified TTL", () => { + jest.useFakeTimers(); + cache.set("key", "value", 1); // 1 second TTL + + expect(cache.get("key")).toBe("value"); + + // Advance time by 1 second + 1ms + jest.advanceTimersByTime(1001); + + expect(cache.get("key")).toBeNull(); + expect(cache.has("key")).toBe(false); + }); + + test("Entry is automatically removed on access after expiration", () => { + jest.useFakeTimers(); + cache.set("key", "value", 1); + + jest.advanceTimersByTime(1001); + + const result = cache.get("key"); + expect(result).toBeNull(); + // Entry should be deleted from cache + expect(cache.has("key")).toBe(false); + }); + + test("Entry is automatically removed on has() check after expiration", () => { + jest.useFakeTimers(); + cache.set("key", "value", 1); + + jest.advanceTimersByTime(1001); + + const result = cache.has("key"); + expect(result).toBe(false); + // Entry should be deleted from cache + expect(cache.get("key")).toBeNull(); + }); + + test("Different entries can have different TTLs", () => { + jest.useFakeTimers(); + cache.set("key1", "value1", 1); + cache.set("key2", "value2", 2); + + jest.advanceTimersByTime(1001); + + expect(cache.get("key1")).toBeNull(); + expect(cache.get("key2")).toBe("value2"); + + jest.advanceTimersByTime(1000); + + expect(cache.get("key2")).toBeNull(); + }); + }); + + describe("Cleanup Operations", () => { + test("cleanup() removes all expired entries", () => { + jest.useFakeTimers(); + cache.set("key1", "value1", 1); + cache.set("key2", "value2", 2); + cache.set("key3", "value3", 3); + + jest.advanceTimersByTime(1500); + + const removed = cache.cleanup(); + expect(removed).toBe(1); // Only key1 should be expired + expect(cache.has("key1")).toBe(false); + expect(cache.has("key2")).toBe(true); + expect(cache.has("key3")).toBe(true); + }); + + test("cleanup() returns count of removed entries", () => { + jest.useFakeTimers(); + cache.set("key1", "value1", 1); + cache.set("key2", "value2", 1); + + jest.advanceTimersByTime(1001); + + const removed = cache.cleanup(); + expect(removed).toBe(2); + }); + + test("cleanup() does not remove non-expired entries", () => { + cache.set("key1", "value1", 100); + cache.set("key2", "value2", 200); + + const removed = cache.cleanup(); + expect(removed).toBe(0); + expect(cache.has("key1")).toBe(true); + expect(cache.has("key2")).toBe(true); + }); + + test("cleanup() can be called on empty cache", () => { + const removed = cache.cleanup(); + expect(removed).toBe(0); + }); + }); +}); + diff --git a/chessServer/src/tests/errorHandling.test.js b/chessServer/src/tests/errorHandling.test.js new file mode 100644 index 00000000..27645220 --- /dev/null +++ b/chessServer/src/tests/errorHandling.test.js @@ -0,0 +1,211 @@ +const analysisService = require("../services/AnalysisService"); +const cache = require("../utils/cache"); +const { + startingFen, + afterMoveFen, + sampleMove, + sampleUciHistory, + emptyChatHistory +} = require("./fixtures/testData"); +const { + createMockFetchReject, + createMockFetchTimeout +} = require("./helpers/mockHelpers"); + +// Set environment to use mock mode for OpenAI +process.env.LLM_MODE = "mock"; +delete process.env.OPENAI_API_KEY; + +// Mock fetch globally +global.fetch = jest.fn(); + +describe("Error Handling", () => { + beforeEach(() => { + cache.clear(); + jest.clearAllMocks(); + global.fetch.mockReset(); + }); + + afterEach(() => { + cache.clear(); + }); + + describe("Stockfish fetch errors", () => { + test("Stockfish fetch rejects → analyzeMoveWithHistory throws expected error", async () => { + global.fetch = createMockFetchReject("Network error: ECONNREFUSED"); + + await expect( + analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }) + ).rejects.toThrow(); + }); + + test("Stockfish fetch timeout → throws timeout error", async () => { + // Mock fetch to timeout after 7000ms (longer than the 6000ms timeout) + global.fetch = createMockFetchTimeout(7000); + + await expect( + analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }) + ).rejects.toThrow(/timed out|timeout/i); + }, 10000); + + test("Stockfish server returns 500 error → throws error", async () => { + global.fetch = jest.fn(() => + Promise.resolve({ + ok: false, + status: 500, + json: async () => ({ error: "Internal server error" }) + }) + ); + + await expect( + analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }) + ).rejects.toThrow(/Stockfish server error/i); + }); + + test("Stockfish server returns 404 error → throws error", async () => { + global.fetch = jest.fn(() => + Promise.resolve({ + ok: false, + status: 404, + json: async () => ({ error: "Not found" }) + }) + ); + + await expect( + analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }) + ).rejects.toThrow(/Stockfish server error/i); + }); + }); + + describe("OpenAI call errors", () => { + test("when Stockfish succeeds but OpenAI fails, fallback explanation is returned (success true)", async () => { + // Mock Stockfish to succeed + const stockfishResponse = { + fen: startingFen, + cpuMove: "e7e5", + classify: "Good", + topBestMoves: [], + nextBestMoves: [], + cpuPV: "e7e5" + }; + + global.fetch = jest.fn(() => + Promise.resolve({ + ok: true, + status: 200, + json: async () => stockfishResponse + }) + ); + + // Get OpenAI client and override to reject with OPENAI error + const openai = require("../config/openai"); + const client = openai.getClient(); + + // Override the create method to reject with OPENAI_INVALID_RESPONSE or OPENAI_API_ERROR + const originalCreate = client.chat.completions.create; + client.chat.completions.create = jest.fn(() => + Promise.reject(new Error("OPENAI_INVALID_RESPONSE")) + ); + + // When Stockfish succeeds but OpenAI fails, should return fallback (not throw) + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + // Should return fallback response (success, not error) + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("bestMove", "e7e5"); + expect(result).toHaveProperty("cached", false); + + // Verify fallback response structure + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation).toHaveProperty("moveIndicator", "Good"); + expect(parsedExplanation).toHaveProperty("Analysis"); + expect(parsedExplanation).toHaveProperty("nextStepHint"); + expect(parsedExplanation.Analysis).toContain("trouble providing a detailed analysis"); + + // Restore original + client.chat.completions.create = originalCreate; + }); + + test("when Stockfish also fails, OpenAI error is thrown", async () => { + // Mock Stockfish to fail (no classify field) + global.fetch = jest.fn(() => + Promise.resolve({ + ok: true, + status: 200, + json: async () => ({ + // Missing classify field means Stockfish didn't succeed properly + fen: startingFen, + cpuMove: null + }) + }) + ); + + // Get OpenAI client and override to reject + const openai = require("../config/openai"); + const client = openai.getClient(); + + // Override the create method to reject + const originalCreate = client.chat.completions.create; + client.chat.completions.create = jest.fn(() => + Promise.reject(new Error("OPENAI_API_ERROR")) + ); + + // When Stockfish also fails (no classify), should throw + await expect( + analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }) + ).rejects.toThrow(); + + // Restore original + client.chat.completions.create = originalCreate; + }); + }); +}); + diff --git a/chessServer/src/tests/fixtures/openaiResponse.js b/chessServer/src/tests/fixtures/openaiResponse.js new file mode 100644 index 00000000..6599f423 --- /dev/null +++ b/chessServer/src/tests/fixtures/openaiResponse.js @@ -0,0 +1,14 @@ +/** + * Mock OpenAI response fixtures + */ + +module.exports = { + moveAnalysisResponse: JSON.stringify({ + moveIndicator: "Good", + Analysis: "This is a solid developing move that maintains good piece coordination.", + nextStepHint: "Consider developing your remaining pieces and controlling key central squares." + }), + + questionResponse: "The best move here is e7e5, which follows the classical principles of center control." +}; + diff --git a/chessServer/src/tests/fixtures/stockfishResponse.js b/chessServer/src/tests/fixtures/stockfishResponse.js new file mode 100644 index 00000000..10c8a87a --- /dev/null +++ b/chessServer/src/tests/fixtures/stockfishResponse.js @@ -0,0 +1,37 @@ +/** + * Mock Stockfish server response fixtures + */ + +module.exports = { + validResponse: { + fen: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", + topBestMoves: [ + { rank: 1, move: "e2e4", scoreType: "cp", score: 20 }, + { rank: 2, move: "d2d4", scoreType: "cp", score: 15 }, + { rank: 3, move: "g1f3", scoreType: "cp", score: 10 }, + ], + player_moves: "e2e4", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: 20 }, + delta: 20 + }, + classify: "Good", + cpuMove: "e7e5", + cpuPV: "e7e5 e2e4 g8f6", + nextBestMoves: [ + { rank: 1, move: "e7e5", scoreType: "cp", score: -15 }, + { rank: 2, move: "c7c5", scoreType: "cp", score: -10 }, + ] + }, + + responseForQuestion: { + fen: "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1", + topBestMoves: [ + { rank: 1, move: "e7e5", scoreType: "cp", score: 15 }, + ], + cpuMove: "e7e5", + classify: "Best" + } +}; + diff --git a/chessServer/src/tests/fixtures/testData.js b/chessServer/src/tests/fixtures/testData.js new file mode 100644 index 00000000..24fc643e --- /dev/null +++ b/chessServer/src/tests/fixtures/testData.js @@ -0,0 +1,30 @@ +/** + * Test data fixtures + */ + +module.exports = { + startingFen: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", + afterMoveFen: "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1", + sampleMove: "e2e4", + sampleUciHistory: "e2e4", + + emptyChatHistory: [], + + sampleChatHistory: [ + { role: "move", content: "White moved from e2 to e4" }, + { + role: "assistant", + content: "Good move!", + explanation: { + moveIndicator: "Good", + Analysis: "Previous analysis", + nextStepHint: "Previous hint" + } + }, + { role: "user", content: "Why is this move good?" }, + { role: "assistant", content: "Because it controls the center." } + ], + + sampleQuestion: "What's the best move here?" +}; + diff --git a/chessServer/src/tests/helpers/mockHelpers.js b/chessServer/src/tests/helpers/mockHelpers.js new file mode 100644 index 00000000..5084bde2 --- /dev/null +++ b/chessServer/src/tests/helpers/mockHelpers.js @@ -0,0 +1,93 @@ +/** + * Helper functions for creating mocks in tests + */ + +/** + * Creates a mock fetch that resolves with a successful Stockfish response + */ +function createMockStockfishFetch(responseData, options = {}) { + const { delay = 0, status = 200 } = options; + + return jest.fn(() => { + const promise = Promise.resolve({ + ok: status >= 200 && status < 300, + status, + json: async () => { + if (delay > 0) { + await new Promise(resolve => setTimeout(resolve, delay)); + } + return responseData; + } + }); + return promise; + }); +} + +/** + * Creates a mock fetch that rejects (for error testing) + */ +function createMockFetchReject(errorMessage, delay = 0) { + return jest.fn(() => { + const promise = Promise.reject(new Error(errorMessage)); + if (delay > 0) { + return new Promise((resolve, reject) => { + setTimeout(() => reject(new Error(errorMessage)), delay); + }); + } + return promise; + }); +} + +/** + * Creates a mock fetch that times out + */ +function createMockFetchTimeout(delay = 7000) { + return jest.fn(() => { + return new Promise((resolve, reject) => { + setTimeout(() => { + const error = new Error("fetch timed out after 7000ms"); + error.name = "AbortError"; + reject(error); + }, delay); + }); + }); +} + +/** + * Creates a mock OpenAI client + */ +function createMockOpenAIClient(responseContent, options = {}) { + const { delay = 0, shouldReject = false, error = null } = options; + + return { + chat: { + completions: { + create: jest.fn(async (params) => { + if (shouldReject) { + throw error || new Error("OpenAI API error"); + } + + if (delay > 0) { + await new Promise(resolve => setTimeout(resolve, delay)); + } + + return { + choices: [{ + message: { + content: responseContent + } + }] + }; + }) + } + } + }; +} + +module.exports = { + createMockStockfishFetch, + createMockFetchReject, + createMockFetchTimeout, + createMockOpenAIClient +}; + diff --git a/chessServer/src/tests/openai.test.js b/chessServer/src/tests/openai.test.js new file mode 100644 index 00000000..f04aadf9 --- /dev/null +++ b/chessServer/src/tests/openai.test.js @@ -0,0 +1,163 @@ +describe("OpenAI Client Configuration", () => { + let originalEnv; + let originalGetClient; + + beforeEach(() => { + // Save original environment + originalEnv = { ...process.env }; + // Clear module cache to allow re-initialization + jest.resetModules(); + }); + + afterEach(() => { + // Restore original environment + process.env = originalEnv; + jest.resetModules(); + }); + + describe("Client Initialization", () => { + test("Mock mode explicitly set - uses mock client", () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + const client = openai.getClient(); + + expect(client).toBeDefined(); + expect(openai.isMockMode()).toBe(true); + expect(client.chat).toBeDefined(); + expect(client.chat.completions).toBeDefined(); + expect(typeof client.chat.completions.create).toBe("function"); + }); + + test("Missing API key - falls back to mock mode", () => { + delete process.env.LLM_MODE; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + const client = openai.getClient(); + + expect(client).toBeDefined(); + expect(openai.isMockMode()).toBe(true); + expect(openai.isConfigured()).toBe(true); + }); + + test("Real mode with valid API key - real client constructed", () => { + // Note: This test verifies the configuration logic, but in test environment + // we'll default to mock mode. The actual OpenAI client construction + // would require a real API key in integration tests. + process.env.LLM_MODE = "openai"; + process.env.OPENAI_API_KEY = "sk-test-key-12345"; + + const openai = require("../config/openai"); + const client = openai.getClient(); + + // Even with key set, in test we want to ensure client is configured + expect(client).toBeDefined(); + expect(openai.isConfigured()).toBe(true); + // Note: In real scenario with valid key, isMockMode would be false + // But for test safety, we're ensuring client exists + }); + + test("getClient() returns same instance on subsequent calls (singleton)", () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + const client1 = openai.getClient(); + const client2 = openai.getClient(); + + expect(client1).toBe(client2); + }); + + test("isConfigured() returns true when client exists", () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + expect(openai.isConfigured()).toBe(true); + }); + + test("isMockMode() returns true in mock mode", () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + expect(openai.isMockMode()).toBe(true); + }); + + test("isMockMode() returns true when API key is missing", () => { + delete process.env.LLM_MODE; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + expect(openai.isMockMode()).toBe(true); + }); + }); + + describe("Mock Mode Behavior", () => { + test("Mock client returns valid JSON for move analysis", async () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + const client = openai.getClient(); + + const response = await client.chat.completions.create({ + model: "gpt-4o", + messages: [ + { role: "system", content: "Test" }, + { role: "user", content: "FEN before: ... moveIndicator" } + ] + }); + + expect(response.choices).toBeDefined(); + expect(response.choices[0]).toBeDefined(); + expect(response.choices[0].message).toBeDefined(); + expect(response.choices[0].message.content).toBeDefined(); + + // Should be valid JSON for move analysis + const content = response.choices[0].message.content; + expect(() => JSON.parse(content)).not.toThrow(); + }); + + test("Mock client returns string response for questions", async () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + const client = openai.getClient(); + + const response = await client.chat.completions.create({ + model: "gpt-4o", + messages: [ + { role: "system", content: "Test" }, + { role: "user", content: "What's the best move?" } + ] + }); + + expect(response.choices[0].message.content).toBeDefined(); + expect(typeof response.choices[0].message.content).toBe("string"); + }); + + test("Mock client structure matches OpenAI API shape", async () => { + process.env.LLM_MODE = "mock"; + delete process.env.OPENAI_API_KEY; + + const openai = require("../config/openai"); + const client = openai.getClient(); + + expect(client).toHaveProperty("chat"); + expect(client.chat).toHaveProperty("completions"); + expect(client.chat.completions).toHaveProperty("create"); + expect(typeof client.chat.completions.create).toBe("function"); + + const response = await client.chat.completions.create({ messages: [] }); + expect(response).toHaveProperty("choices"); + expect(Array.isArray(response.choices)).toBe(true); + expect(response.choices[0]).toHaveProperty("message"); + expect(response.choices[0].message).toHaveProperty("content"); + }); + }); +}); + diff --git a/chessServer/src/tests/rateLimiter.test.js b/chessServer/src/tests/rateLimiter.test.js new file mode 100644 index 00000000..9f199119 --- /dev/null +++ b/chessServer/src/tests/rateLimiter.test.js @@ -0,0 +1,79 @@ +const RateLimiter = require("../utils/rateLimiter"); + +describe("RateLimiter", () => { + describe("Token bucket algorithm", () => { + test("allows requests within rate limit", () => { + const limiter = new RateLimiter(60); // 60 requests per minute + + // Should allow first request + const result1 = limiter.acquire(); + expect(result1.allowed).toBe(true); + + // Should allow second request + const result2 = limiter.acquire(); + expect(result2.allowed).toBe(true); + }); + + test("rate limits when tokens are exhausted", () => { + const limiter = new RateLimiter(2); // 2 requests per minute (very low for testing) + + // Exhaust tokens + expect(limiter.acquire().allowed).toBe(true); + expect(limiter.acquire().allowed).toBe(true); + + // Third request should be rate limited + const result = limiter.acquire(); + expect(result.allowed).toBe(false); + expect(result.retryAfter).toBeGreaterThan(0); + }); + + test("refills tokens over time", (done) => { + const limiter = new RateLimiter(60, 1); // 1 token capacity, 60 per minute = 1 per second + + // Exhaust token + expect(limiter.acquire().allowed).toBe(true); + expect(limiter.acquire().allowed).toBe(false); + + // Wait for token to refill (should refill in ~1 second) + setTimeout(() => { + const result = limiter.acquire(); + expect(result.allowed).toBe(true); + done(); + }, 1100); // Slightly more than 1 second to account for timing + }, 2000); + + test("getTokens returns current token count", () => { + const limiter = new RateLimiter(60, 10); // 10 token capacity + + expect(limiter.getTokens()).toBe(10); + + limiter.acquire(); + expect(limiter.getTokens()).toBe(9); + + limiter.acquire(); + expect(limiter.getTokens()).toBe(8); + }); + + test("reset resets token bucket", () => { + const limiter = new RateLimiter(60, 10); + + limiter.acquire(); + limiter.acquire(); + expect(limiter.getTokens()).toBe(8); + + limiter.reset(); + expect(limiter.getTokens()).toBe(10); + }); + + test("capacity defaults to rate per minute", () => { + const limiter = new RateLimiter(60); + expect(limiter.getTokens()).toBe(60); + }); + + test("custom capacity works correctly", () => { + const limiter = new RateLimiter(60, 100); + expect(limiter.getTokens()).toBe(100); + }); + }); +}); + From f13f16da645d122086edd8c18829c2c43921f05f Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:46:12 -0500 Subject: [PATCH 13/20] frontend tests --- .../src/features/aitutor/Aitutor.test.tsx | 395 ++++++++++++++++++ .../src/features/aitutor/README.md | 51 +++ 2 files changed, 446 insertions(+) create mode 100644 react-ystemandchess/src/features/aitutor/Aitutor.test.tsx create mode 100644 react-ystemandchess/src/features/aitutor/README.md diff --git a/react-ystemandchess/src/features/aitutor/Aitutor.test.tsx b/react-ystemandchess/src/features/aitutor/Aitutor.test.tsx new file mode 100644 index 00000000..e171c9f7 --- /dev/null +++ b/react-ystemandchess/src/features/aitutor/Aitutor.test.tsx @@ -0,0 +1,395 @@ +import React from "react"; +import { render, screen, waitFor, fireEvent } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import AITutor from "./Aitutor"; + +// Mock the environment +jest.mock("../../environments/environment", () => ({ + environment: { + urls: { + chessServer: "http://localhost:4000", + }, + }, +})); + +// Mock react-chessboard +jest.mock("react-chessboard", () => { + return { + Chessboard: ({ position, onPieceDrop }: any) => ( +
+ +
{position}
+
+ ), + }; +}); + +// Mock fetch globally +global.fetch = jest.fn(); + +describe("AITutor Component", () => { + beforeEach(() => { + jest.clearAllMocks(); + (global.fetch as jest.Mock).mockReset(); + }); + + describe("Component Rendering", () => { + test("renders chessboard component", () => { + render(); + expect(screen.getByTestId("chessboard")).toBeInTheDocument(); + }); + + test("renders chat interface", () => { + render(); + expect(screen.getByText("AI Tutor")).toBeInTheDocument(); + expect(screen.getByPlaceholderText(/Ask the tutor/i)).toBeInTheDocument(); + expect(screen.getByRole("button", { name: /send/i })).toBeInTheDocument(); + }); + + test("displays empty chat initially", () => { + render(); + // Chat messages container should exist but be empty + const chatContainer = screen + .getByText("AI Tutor") + .closest("div")?.parentElement; + expect(chatContainer).toBeInTheDocument(); + }); + }); + + describe("Move Making and Analysis", () => { + test("on move: shows placeholder + calls /api/analyze + renders response text + clears analyzing", async () => { + const mockMoveAnalysisResponse = { + success: true, + type: "move", + explanation: JSON.stringify({ + moveIndicator: "Good", + Analysis: "This is a solid developing move.", + nextStepHint: "Consider controlling the center.", + }), + cached: false, + bestMove: "e7e5", + }; + + (global.fetch as jest.Mock).mockResolvedValueOnce({ + ok: true, + json: async () => mockMoveAnalysisResponse, + }); + + render(); + + // Make a move by clicking the mock button + const makeMoveButton = screen.getByTestId("make-move-button"); + fireEvent.click(makeMoveButton); + + // Wait for placeholder to appear (loading state) + await waitFor(() => { + expect(global.fetch).toHaveBeenCalled(); + }); + + // Verify API call was made with correct parameters + const fetchCall = (global.fetch as jest.Mock).mock.calls[0]; + expect(fetchCall[0]).toContain("/api/analyze"); + expect(fetchCall[1].method).toBe("POST"); + const requestBody = JSON.parse(fetchCall[1].body); + expect(requestBody.type).toBe("move"); + expect(requestBody.move).toBe("e2e4"); + + // Wait for response to be rendered + await waitFor( + () => { + expect( + screen.getByText(/This is a solid developing move/i) + ).toBeInTheDocument(); + }, + { timeout: 3000 } + ); + + // Verify move message appears + expect( + screen.getByText(/White moved from e2 to e4/i) + ).toBeInTheDocument(); + + // Verify analyzing state is cleared (input should be enabled) + const input = screen.getByPlaceholderText(/Ask the tutor/i); + expect(input).not.toBeDisabled(); + }); + + test("bestMove is automatically applied after analysis", async () => { + const mockResponse = { + success: true, + type: "move", + explanation: JSON.stringify({ + moveIndicator: "Good", + Analysis: "Good move.", + nextStepHint: "Continue developing.", + }), + cached: false, + bestMove: "e7e5", + }; + + (global.fetch as jest.Mock).mockResolvedValueOnce({ + ok: true, + json: async () => mockResponse, + }); + + render(); + + const makeMoveButton = screen.getByTestId("make-move-button"); + fireEvent.click(makeMoveButton); + + // Wait for the move to be applied (CPU move should appear in chat) + await waitFor( + () => { + // The bestMove should trigger another move message + // We verify by checking that fetch was called (which it should be for the initial move) + expect(global.fetch).toHaveBeenCalled(); + }, + { timeout: 3000 } + ); + }); + }); + + describe("Error Handling", () => { + test("on API error: renders error message with errorCode and clears analyzing", async () => { + const mockErrorResponse = { + success: false, + error: "Analysis failed: Server error", + errorCode: "OPENAI_API_ERROR", + retryable: true, + }; + + (global.fetch as jest.Mock).mockResolvedValueOnce({ + ok: true, + json: async () => mockErrorResponse, + }); + + render(); + + const makeMoveButton = screen.getByTestId("make-move-button"); + fireEvent.click(makeMoveButton); + + // Wait for error message to appear + await waitFor( + () => { + expect( + screen.getByText(/Unable to analyze the move/i) + ).toBeInTheDocument(); + }, + { timeout: 3000 } + ); + + // Verify analyzing state is cleared + const input = screen.getByPlaceholderText(/Ask the tutor/i); + expect(input).not.toBeDisabled(); + }); + + test("when API returns success:false with retryable:true, Retry button appears and re-calls fetch", async () => { + const mockErrorResponse = { + success: false, + error: "Temporary error", + errorCode: "NETWORK_ERROR", + retryable: true, + }; + + const mockSuccessResponse = { + success: true, + type: "move", + explanation: JSON.stringify({ + moveIndicator: "Good", + Analysis: "Retry successful!", + nextStepHint: "Continue playing.", + }), + cached: false, + bestMove: null, + }; + + // First call fails + (global.fetch as jest.Mock) + .mockResolvedValueOnce({ + ok: true, + json: async () => mockErrorResponse, + }) + // Retry call succeeds + .mockResolvedValueOnce({ + ok: true, + json: async () => mockSuccessResponse, + }); + + render(); + + const makeMoveButton = screen.getByTestId("make-move-button"); + fireEvent.click(makeMoveButton); + + // Wait for error message and retry button to appear + await waitFor( + () => { + expect(screen.getByText(/Connection issue/i)).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: /retry/i }) + ).toBeInTheDocument(); + }, + { timeout: 3000 } + ); + + // Click retry button + const retryButton = screen.getByRole("button", { name: /retry/i }); + fireEvent.click(retryButton); + + // Wait for retry to complete and success message to appear + await waitFor( + () => { + expect(screen.getByText(/Retry successful!/i)).toBeInTheDocument(); + }, + { timeout: 3000 } + ); + + // Verify fetch was called twice (initial + retry) + expect(global.fetch).toHaveBeenCalledTimes(2); + }); + + test("network error shows error message in chat with retry button", async () => { + (global.fetch as jest.Mock).mockRejectedValueOnce( + new Error("Network error: Failed to fetch") + ); + + render(); + + const makeMoveButton = screen.getByTestId("make-move-button"); + fireEvent.click(makeMoveButton); + + // Wait for network error message + await waitFor( + () => { + expect(screen.getByText(/Connection issue/i)).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: /retry/i }) + ).toBeInTheDocument(); + }, + { timeout: 3000 } + ); + + // Verify analyzing state is cleared + const input = screen.getByPlaceholderText(/Ask the tutor/i); + expect(input).not.toBeDisabled(); + }); + + test("invalid move shows error message", () => { + render(); + + // Try to make an invalid move - this would be handled by the chess.js library + // In our mock, we can't easily simulate invalid moves, but we can verify + // the error handling structure exists in the component + const makeMoveButton = screen.getByTestId("make-move-button"); + + // The component should handle move attempts gracefully + expect(makeMoveButton).toBeInTheDocument(); + }); + }); + + describe("Chat Functionality", () => { + test("user can type and send question", async () => { + const mockQuestionResponse = { + success: true, + type: "question", + answer: "The best move here is e7e5.", + cached: false, + }; + + (global.fetch as jest.Mock).mockResolvedValueOnce({ + ok: true, + json: async () => mockQuestionResponse, + }); + + const user = userEvent.setup(); + render(); + + const input = screen.getByPlaceholderText(/Ask the tutor/i); + const sendButton = screen.getByRole("button", { name: /send/i }); + + // Type a question + await user.type(input, "What is the best move?"); + + // Send the question + await user.click(sendButton); + + // Verify API call + await waitFor(() => { + expect(global.fetch).toHaveBeenCalled(); + }); + + const fetchCall = (global.fetch as jest.Mock).mock.calls[0]; + const requestBody = JSON.parse(fetchCall[1].body); + expect(requestBody.type).toBe("question"); + expect(requestBody.question).toBe("What is the best move?"); + + // Verify answer appears + await waitFor( + () => { + expect( + screen.getByText(/The best move here is e7e5/i) + ).toBeInTheDocument(); + }, + { timeout: 3000 } + ); + + // Verify input is cleared + expect(input).toHaveValue(""); + }); + + test("input is disabled during analysis", async () => { + // Mock a slow response + (global.fetch as jest.Mock).mockImplementationOnce(() => { + return new Promise((resolve) => { + setTimeout(() => { + resolve({ + ok: true, + json: async () => ({ + success: true, + type: "move", + explanation: JSON.stringify({ + moveIndicator: "Good", + Analysis: "Good move.", + }), + cached: false, + bestMove: null, + }), + }); + }, 1000); + }); + }); + + render(); + + // First, wait for the input to appear + const input = await screen.findByPlaceholderText(/Ask the tutor/i); + + const makeMoveButton = screen.getByTestId("make-move-button"); + fireEvent.click(makeMoveButton); + + // Verify input is disabled during analysis + await waitFor( + () => { + expect(input).toBeDisabled(); + }, + { timeout: 500 } + ); + + // Wait for analysis to complete + await waitFor( + () => { + expect(input).not.toBeDisabled(); + }, + { timeout: 2000 } + ); + }); + }); +}); diff --git a/react-ystemandchess/src/features/aitutor/README.md b/react-ystemandchess/src/features/aitutor/README.md new file mode 100644 index 00000000..1b119c87 --- /dev/null +++ b/react-ystemandchess/src/features/aitutor/README.md @@ -0,0 +1,51 @@ +# AITutor Component Tests + +Tests for the AITutor React component using React Testing Library. + +## Test File + +- **`Aitutor.test.tsx`** - Component tests for move making, chat functionality, error handling, and UI states + +## Running Tests + +### Run all frontend tests: +```bash +cd react-ystemandchess +npm test +``` + +### Run only AITutor tests: +```bash +cd react-ystemandchess +npm test -- Aitutor.test.tsx +``` + +### Run tests in watch mode: +```bash +cd react-ystemandchess +npm test -- --watch +``` + +### Run tests with coverage: +```bash +cd react-ystemandchess +npm test -- --coverage --collectCoverageFrom='src/features/aitutor/**/*.{ts,tsx}' +``` + +## Test Environment + +Tests use: +- **Mocked fetch** - All API calls to chess server are mocked +- **Mocked react-chessboard** - Chessboard component is mocked for testing +- **Mocked environment** - Environment URLs are mocked + +## Test Coverage + +The tests cover: +- Component rendering +- Move making and analysis flow +- Chat functionality (questions and answers) +- Error handling (network errors, API errors) +- Loading states and UI feedback +- Input validation and state management + From 39850f5e303bc6063a384d94935c07965b9b6ead Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Mon, 12 Jan 2026 11:53:52 -0500 Subject: [PATCH 14/20] full documentation --- documentation/AI_Tutor_Flow_Documentation.md | 688 +++++++++++++++++++ 1 file changed, 688 insertions(+) create mode 100644 documentation/AI_Tutor_Flow_Documentation.md diff --git a/documentation/AI_Tutor_Flow_Documentation.md b/documentation/AI_Tutor_Flow_Documentation.md new file mode 100644 index 00000000..1d73790c --- /dev/null +++ b/documentation/AI_Tutor_Flow_Documentation.md @@ -0,0 +1,688 @@ +# AI Tutor End-to-End Flow Documentation + +## Table of Contents + +1. [HTTP Endpoints & WebSocket Events](#1-http-endpoints--websocket-events) +2. [Full Request Chain](#2-full-request-chain) +3. [Step-by-Step Sequence: User Makes a Move → Gets Tutor Feedback](#3-step-by-step-sequence-user-makes-a-move--gets-tutor-feedback) +4. [Cache Check/Set Locations](#4-cache-checkset-locations) +5. [OpenAI Initialization & Usage](#5-openai-initialization--usage) +6. [Error Handling & Fallback Responses](#6-error-handling--fallback-responses) +7. [Performance Monitoring & Rate Limiting](#7-performance-monitoring--rate-limiting) +8. [Key Files & Responsibilities](#8-key-files--responsibilities) +9. [Performance Optimizations](#9-performance-optimizations) + +--- + +## 1. HTTP Endpoints + +### HTTP Endpoints + +#### `POST /api/analyze` + +- **Called by:** React `Aitutor.tsx` component +- **Location:** `chessServer/src/index.js:52` + +- **Payload Shape:** + + ```json + // Move analysis + { + "type": "move", + "fen_before": "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", + "fen_after": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1", + "move": "e2e4", + "uciHistory": "e2e4", + "depth": 15, + "multipv": 15, + "chatHistory": [ + { "role": "move", "content": "White moved from e2 to e4" }, + { "role": "assistant", "content": "...", "explanation": {...} } + ] + } + + // Question answering + { + "type": "question", + "fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1", + "question": "What's the best move here?", + "chatHistory": [...] + } + ``` + +- **What it does:** + + 1. Routes request to appropriate service based on `type` field + 2. Calls `analysisService.analyzeMoveWithHistory()` for moves + 3. Calls `analysisService.answerQuestion()` for questions + 4. Wraps call in 15-second timeout (`TOTAL_MS = 15000`) + 5. Returns success/error JSON response + +- **Returns:** + + ```json + // Move analysis response + { + "success": true, + "type": "move", + "explanation": "{\"moveIndicator\":\"Good\",\"Analysis\":\"...\",\"nextStepHint\":\"...\"}", + "cached": false, + "bestMove": "e7e5" + } + + // Question response + { + "success": true, + "type": "question", + "answer": "The best move here is...", + "cached": false + } + + // Error response (standardized format) + { + "success": false, + "error": "User-friendly error message", + "errorCode": "OPENAI_TIMEOUT", + "retryable": true + } + ``` + +### WebSocket Events + +**Note:** The AI Tutor feature uses **REST only** - no WebSocket/Socket.IO connections. All communication between `chessServer` and `stockfishServer` is via HTTP REST API (`POST /analysis` endpoint). + +**Important:** Socket.IO is still used by other features (game management, puzzles) but **not** by AI Tutor. + +--- + +## 2. Full Request Chain + +### A. Move Analysis Flow + +``` +UI (Aitutor.tsx) + → POST /api/analyze (chessServer/index.js) + → analysisService.analyzeMoveWithHistory() (AnalysisService.js) + → [Cache Check] cache.has(cacheKey) + → [Cache HIT] Return cached explanation + fetch Stockfish for bestMove + → [Cache MISS] Continue to: + → HTTP POST ${STOCKFISH_URL}/analysis (stockfishServer/index.js) + → runStockfish() × 3 (current position, after player move, after CPU move) + → classifyMove(), extractTopBestMoves() + → Return: { topBestMoves, cpuMove, cpuPV, classify, evaluation, ... } + → callOpenAIWithHistory(stockfishFacts, moveContext, "move") + → [Rate Limiter Check] openai.rateLimiter.acquire() + → [If rate limited] Throw OPENAI_RATE_LIMIT error + → openai.getClient() (openai.js) + → [Lazy Init] Check LLM_MODE / OPENAI_API_KEY + → Initialize OpenAI client OR create mock client + → buildPromptFromDoc() - Format prompt with Stockfish context + → client.chat.completions.create() - Call OpenAI API + → parseOpenAIJson() - Parse JSON, handle markdown fences + → validateTutorResponse() - Validate response shape + → [If invalid] Throw OPENAI_INVALID_RESPONSE + → [If OpenAI fails but Stockfish succeeded] Generate fallback response + → cache.set(cacheKey, explanation, 86400) - Cache for 24 hours + → Return { explanation, cached, bestMove } + → UI receives response, updates chat, applies CPU move if bestMove provided +``` + +### B. Question Answering Flow + +``` +UI (Aitutor.tsx) + → POST /api/analyze (type: "question") + → analysisService.answerQuestion() + → [Cache Check] cache.has(questionCacheKey) + → [Cache HIT] Return cached answer + → [Cache MISS] Continue to: + → HTTP POST ${STOCKFISH_URL}/analysis (optional, for position context) + → callOpenAIWithHistory(stockfishFacts, questionContext, "question") + → buildQuestionPrompt() + → OpenAI API call with chat history + → cache.set(questionCacheKey, answer, 86400) + → Return { answer, cached } + → UI displays answer in chat +``` + +--- + +## 3. Step-by-Step Sequence: User Makes a Move → Gets Tutor Feedback + +### Detailed Sequence: + +1. **User drops piece on board** + + - Location: `Aitutor.tsx:318` + - Function: `onDrop(sourceSquare, targetSquare)` called + - Prevents moves while analyzing: `if (isAnalyzing) return false` + +2. **Validate & apply move** + + - Location: `Aitutor.tsx:324` + - `chessRef.current.move()` validates and applies move + - Computes `fenBefore`, `fenAfter`, `currentMoveUci`, `uciMoves` + +3. **Update UI state immediately** + + - Location: `Aitutor.tsx:336-344` + - Creates move message: `{ role: "move", content: "White moved from e2 to e4" }` + - Updates `chatMessages`, `fen`, `history`, `moves` states + +4. **Call analysis function** + + - Location: `Aitutor.tsx:145` + - Function: `sendMoveForAnalysis(fenBefore, fenAfter, moveUci, uciMoves, chatHistory)` + +5. **Set analyzing state** + + - Location: `Aitutor.tsx:153` + - `setIsAnalyzing(true)` + - Adds placeholder assistant message: `{ role: "assistant", content: "", explanation: undefined }` + +6. **Send HTTP request** + + - Location: `Aitutor.tsx:171` + - Method: `POST ${chessServer}/api/analyze` + - Payload: `{ type: "move", fen_before, fen_after, move, uciHistory, depth: 15, chatHistory }` + +7. **Backend receives request** + + - Location: `chessServer/src/index.js:52` + - Handler: `/api/analyze` endpoint + - Wraps in timeout: `withTimeout(analysisService.analyzeMoveWithHistory(...), 15000)` + +8. **AnalysisService.analyzeMoveWithHistory()** + + - Location: `AnalysisService.js:648` + - Builds cache key: `analysis:v1:${fen_after}:${move}:depth15:movetime2000:multipv1` + +9. **Check cache (FIRST TIME - MISS)** + + - Location: `AnalysisService.js:661` + - `cache.has(cacheKey)` returns `false` + - Continues to Stockfish analysis + +10. **Call Stockfish server** + + - Location: `AnalysisService.js:674` + - Method: `fetchWithTimeout(${STOCKFISH_URL}/analysis, {...}, 6000)` + - Payload: `{ fen: fen_before, moves: move, depth: 15, multipv: 15 }` + +11. **Stockfish server processes** + + - Location: `stockfishServer/src/index.js:183` + - Endpoint: `POST /analysis` + - Runs 3 Stockfish analyses: + a. Current position (before player move) + b. After player move + c. After CPU best response + - Extracts top moves, classifies move quality, computes evaluation delta + - Returns: `{ topBestMoves, cpuMove, cpuPV, classify, evaluation, nextBestMoves }` + +12. **Build OpenAI prompt** + + - Location: `AnalysisService.js:227` + - Function: `buildPromptFromDoc()` + - Includes: FEN states, move quality label, top moves context, CPU response + +13. **Prepare OpenAI call with chat history** + + - Location: `AnalysisService.js:475` + - Function: `callOpenAIWithHistory(stockfishFacts, moveContext, "move")` + - Converts chat history to OpenAI message format + - Maps roles: `"move"` → `"user"`, `"assistant"` → `"assistant"` + +14. **Initialize OpenAI client (lazy)** + + - Location: `openai.js:23` + - Function: `getClient()` + - Checks `LLM_MODE` and `OPENAI_API_KEY` + - Initializes OpenAI client OR creates mock client + - First call initializes the client (singleton pattern) + +15. **Call OpenAI API** + + - Location: `openai.js:48` (mock) or real OpenAI API + - Model: `gpt-4o` (or `OPENAI_MODEL` env var) + - Temperature: `0.2` + - Returns JSON: `{ moveIndicator, Analysis, nextStepHint }` + +16. **Cache result** + + - Location: `AnalysisService.js:723` + - `cache.set(cacheKey, explanation, 86400)` + - TTL: 24 hours (86400 seconds) + +17. **Return to Express handler** + + - Location: `AnalysisService.js:725` + - Returns: `{ explanation, cached: false, bestMove }` + +18. **Express sends HTTP response** + + - Location: `index.js:73` + - `res.json({ success: true, type: "move", explanation, cached: false, bestMove })` + +19. **Frontend receives response** + + - Location: `Aitutor.tsx:185` + - Parses JSON response + +20. **Parse explanation JSON** + + - Location: `Aitutor.tsx:201` + - Extracts `moveIndicator`, `Analysis`, `nextStepHint` + - Handles markdown code blocks if present + +21. **Update chat UI** + + - Location: `Aitutor.tsx:218` + - Function: `replaceLatestAssistantPlaceholder()` + - Replaces placeholder with: `{ role: "assistant", content: explanation.Analysis, explanation: {...} }` + +22. **Apply CPU move (if provided)** + + - Location: `Aitutor.tsx:227` + - If `data.bestMove` exists, calls `applyCpuMove(bestMove)` + - Updates board, adds CPU move message to chat + +23. **Reset analyzing state** + + - Location: `Aitutor.tsx:216` + - `setIsAnalyzing(false)` + - UI updates to show avatar based on `moveIndicator` + +24. **Display result** + - Avatar changes based on move quality (`moveIndicator`) + - Speech bubble displays analysis text + - Next step hint displayed if present + +--- + +## 4. Cache Check/Set Locations + +### Cache Key Format: + +- **Move analysis:** `analysis:v1:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}` +- **Questions:** `question:v1:${fen}:${question}` + +### Cache Operations: + +#### 1. Check Cache (MOVE ANALYSIS) + +- **Location:** `AnalysisService.js:661` +- **Code:** `cache.has(cacheKey)` +- **Behavior:** + - If **HIT**: Returns cached explanation + fetches Stockfish for `bestMove` only + - If **MISS**: Proceeds with full analysis pipeline + +#### 2. Set Cache (MOVE ANALYSIS) + +- **Location:** `AnalysisService.js:723` +- **Code:** `cache.set(cacheKey, explanation, 86400)` +- **Timing:** After OpenAI response, before returning to caller + +#### 3. Check Cache (QUESTION) + +- **Location:** `AnalysisService.js:749` +- **Code:** `cache.has(questionCacheKey)` +- **Behavior:** + - If **HIT**: Returns immediately + - If **MISS**: Proceeds with OpenAI call + +#### 4. Set Cache (QUESTION) + +- **Location:** `AnalysisService.js:801` +- **Code:** `cache.set(questionCacheKey, answer, 86400)` +- **Timing:** After OpenAI response + +### Cache Implementation: + +- **File:** `chessServer/src/utils/cache.js` +- **Storage:** In-memory `Map` with TTL support and LRU eviction +- **Structure:** `Map` +- **Size Limit:** 5000 entries (configurable via `CACHE_MAX_SIZE` env var) +- **Eviction:** LRU (Least Recently Used) when cache exceeds max size +- **Cleanup:** Auto-cleanup on `get()`/`has()` if expired +- **TTL:** 86400 seconds (24 hours) default +- **Metrics:** Tracks hits, misses, and hit rate via `getStats()` + +--- + +## 5. OpenAI Initialization & Usage + +### Initialization Flow: + +#### 1. Lazy Initialization + +- **Location:** `openai.js:17` +- **Pattern:** Singleton with lazy initialization +- **Initial State:** `_client = null` +- **First Call:** `getClient()` initializes the client + +#### 2. Configuration Check + +- **Location:** `openai.js:11` +- **Function:** `hasOpenAIKey()` checks `OPENAI_API_KEY` env var +- **Mode:** `LLM_MODE` env var (default: `"openai"`) + +#### 3. Client Creation + +- **Location:** `openai.js:29-92` +- **Real Mode:** (`LLM_MODE=openai` + API key exists) + - Creates `new OpenAI({ apiKey, timeout: 7000, maxRetries: 0 })` + - Rate limiting is enforced before API calls (see Rate Limiting section) +- **Mock Mode:** (`LLM_MODE=mock` OR no API key) + - Creates mock client with sample responses + - Returns JSON for move analysis: `{ moveIndicator: "Good", Analysis: "...", nextStepHint: "..." }` + - Returns plain text for questions + - Rate limiting still applies in mock mode + +#### 4. Singleton Pattern + +- Client created once, reused for all requests +- `_client !== null` check prevents re-initialization + +### OpenAI API Calls: + +#### 1. Move Analysis (with history) + +- **Location:** `AnalysisService.js:476` +- **Function:** `callOpenAIWithHistory(stockfishFacts, moveContext, "move")` +- **Rate Limiting:** Checks `openai.rateLimiter.acquire()` before API call (location: `AnalysisService.js:394`) +- **Model:** `gpt-4o` (or `OPENAI_MODEL` env var) +- **Messages:** + - System prompt: "You are a chess coach..." + - Chat history (converted to OpenAI format) + - Current move prompt (from `buildPromptFromDoc()`) +- **Temperature:** `0.2` +- **Response Processing:** + - Raw response parsed via `parseOpenAIJson()` (handles markdown code fences) + - Validated via `validateTutorResponse()` (checks required fields) + - Returns normalized object: `{ moveIndicator, Analysis, nextStepHint }` +- **Error Handling:** If parsing/validation fails, throws `OPENAI_INVALID_RESPONSE` + +#### 2. Question Answering (with history) + +- **Location:** `AnalysisService.js:794` +- **Function:** `callOpenAIWithHistory(stockfishFacts, questionContext, "question")` +- **Model:** `gpt-4o` +- **Messages:** + - System prompt: "You are a chess coach answering questions..." + - Chat history + - Question prompt (from `buildQuestionPrompt()`) +- **Temperature:** `0.2` +- **Expected Response:** Plain text answer + +#### 3. Move Analysis (without history) + +- **Location:** `AnalysisService.js:429` +- **Function:** `callOpenAI(stockfishFacts, moveContext)` +- **Used by:** Internal helper function (AI Tutor uses `callOpenAIWithHistory()` for REST API) +- **No chat history:** Only current move context + +### Prompt Building: + +#### Move Prompt (`buildPromptFromDoc`) + +- **Location:** `AnalysisService.js:227` +- **Includes:** + - Board state (FEN before/after) + - Stockfish classification (Best/Good/Inaccuracy/Mistake/Blunder) + - Top best moves context + - CPU response (best move + PV) + - Next best moves for hint generation +- **Output Format:** Instructs JSON with exact fields: `moveIndicator`, `Analysis`, `nextStepHint` + +#### Question Prompt (`buildQuestionPrompt`) + +- **Location:** `AnalysisService.js:319` +- **Includes:** + - Current FEN position + - Optional Stockfish context + - Student's question +- **Output Format:** Plain text answer + +--- + +## 6. Error Handling & Fallback Responses + +### Error Response Format + +All API errors return a standardized JSON format: + +```json +{ + "success": false, + "error": "User-friendly error message", + "errorCode": "ERROR_CODE", + "retryable": true +} +``` + +### Error Codes + +| Error Code | Description | Retryable | HTTP Status | +| ------------------------- | ------------------------------------------------------- | --------- | ----------- | +| `OPENAI_INVALID_RESPONSE` | OpenAI returned invalid JSON or missing required fields | Yes | 500 | +| `OPENAI_TIMEOUT` | OpenAI API call timed out | Yes | 504 | +| `OPENAI_RATE_LIMIT` | Rate limit exceeded (token bucket exhausted) | Yes | 429 | +| `OPENAI_API_ERROR` | General OpenAI API error | Yes | 500 | +| `STOCKFISH_TIMEOUT` | Stockfish analysis timed out | Yes | 504 | +| `STOCKFISH_NETWORK_ERROR` | Network error connecting to Stockfish | Yes | 502 | +| `STOCKFISH_PARSE_ERROR` | Failed to parse Stockfish response | No | 500 | +| `VALIDATION_ERROR` | Request validation failed | No | 400 | +| `NETWORK_ERROR` | General network error | Yes | 502 | +| `TIMEOUT` | Request timed out (15s limit) | Yes | 504 | +| `INTERNAL_ERROR` | Unexpected server error | No | 500 | + +### JSON Parsing & Validation + +**Location:** `AnalysisService.js:74-118` + +- **`parseOpenAIJson(rawText)`**: Safely parses OpenAI JSON responses + - Removes markdown code fences (`` json` and `` `) + - Returns `null` if parsing fails (does not throw) +- **`validateTutorResponse(obj)`**: Validates response shape + - Required: `moveIndicator` (string), `Analysis` (string) + - Optional: `nextStepHint` (string, defaults to empty string) + - Returns `false` if validation fails + +### Fallback Response Generation + +**Location:** `AnalysisService.js:125-137` + +When OpenAI fails but Stockfish analysis succeeded, the system generates a fallback response: + +- **Trigger:** OpenAI throws error but `stockfishFacts.classify` exists +- **Response:** Uses Stockfish classification for `moveIndicator` +- **Analysis:** Generic message indicating detailed analysis unavailable +- **Caching:** Fallback responses are cached (24 hour TTL) +- **Behavior:** Returns success response (not error) with fallback data + +**Example Fallback:** + +```json +{ + "moveIndicator": "Good", + "Analysis": "I'm having trouble providing a detailed analysis right now, but based on the engine evaluation, this appears to be a good move. Consider the position carefully and look for tactical opportunities.", + "nextStepHint": "Continue developing your pieces and controlling key squares." +} +``` + +### Frontend Error Handling + +**Location:** `react-ystemandchess/src/features/aitutor/Aitutor.tsx` + +- **Error Message Mapping:** `getErrorMessage(errorCode, fallbackMessage)` maps error codes to user-friendly messages +- **Retry Button:** Displays "Retry" button for errors where `retryable: true` +- **Retry Logic:** `retryLastFailedRequest()` re-sends the last failed request payload +- **Error Display:** Errors are shown in chat UI with appropriate styling +- **State Management:** Failed request payload stored in `lastFailedRequest` state for retry + +### Error Classification + +**Location:** `chessServer/src/index.js:105-161` + +Errors are classified in the `/api/analyze` catch block: + +- Analyzes error message content to determine error type +- Sets appropriate `errorCode`, `retryable` flag, and HTTP status code +- Returns standardized error response format + +--- + +## 7. Performance Monitoring & Rate Limiting + +### Rate Limiting + +**Implementation:** Token bucket algorithm + +**Location:** `chessServer/src/utils/rateLimiter.js` + +- **Algorithm:** Token bucket with configurable rate and capacity +- **Default:** 60 requests per minute (1 token/second, capacity 60) +- **Configuration:** `OPENAI_RATE_LIMIT_RPM` environment variable +- **Behavior:** + - Tokens refill at constant rate (tokens per second) + - Each API call consumes 1 token + - If no tokens available, returns `{ allowed: false, retryAfter: ms }` + - `retryAfter` indicates milliseconds until next token available + +**Integration:** `chessServer/src/config/openai.js:14-15` + +- Rate limiter initialized on module load +- Exported via `module.exports.rateLimiter` + +**Usage:** `chessServer/src/services/AnalysisService.js:394-400` + +- Before OpenAI API call, checks `openai.rateLimiter.acquire()` +- If not allowed, throws `OPENAI_RATE_LIMIT` error with `retryAfter` attached +- Rate limiting applies to both real and mock modes + +### Performance Metrics + +**Location:** `chessServer/src/services/AnalysisService.js:41-58` + +Structured JSON logging for performance monitoring: + +#### Metric Types + +1. **Cache Metrics** + + - `cache_hit`: Cache hit event + - `cache_miss`: Cache miss event + - Includes cache statistics: `{ size, maxSize, hits, misses, hitRate }` + +2. **Latency Metrics** + + - `stockfish_latency`: Stockfish API call duration (ms) + - `openai_latency`: OpenAI API call duration (ms) + - Includes success/failure status and error details + +3. **Rate Limit Metrics** + - `openai_rate_limit`: Rate limit event + - Includes `retryAfter` information + +#### Log Format + +All metrics logged as structured JSON: + +```json +{ + "timestamp": "2024-01-01T12:00:00.000Z", + "metric": "stockfish_latency", + "duration_ms": 1234, + "success": true, + "key": "analysis:v1:...", + "stats": { "size": 100, "hits": 50, "misses": 10, "hitRate": 0.83 } +} +``` + +#### Logging Control + +- **Environment Variable:** `METRICS_LOG_ENABLED` (default: `true`) +- **Disable:** Set `METRICS_LOG_ENABLED=false` to disable metric logging +- **Output:** Logs to `console.log` as JSON strings (can be piped to log aggregation) + +#### Cache Statistics + +**Location:** `chessServer/src/utils/cache.js:135-146` + +- **`getStats()`**: Returns current cache statistics + - `size`: Current number of entries + - `maxSize`: Maximum cache size (default: 5000) + - `hits`: Total cache hits + - `misses`: Total cache misses + - `hitRate`: Hit rate (hits / (hits + misses)) + +**Usage:** Logged with cache hit/miss events for monitoring + +--- + +## 8. Key Files & Responsibilities + +| File | Responsibility | +| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- | +| `react-ystemandchess/src/features/aitutor/Aitutor.tsx` | React UI component, handles move input, chat display, HTTP requests, error handling, retry UI | +| `chessServer/src/index.js` | Express REST API endpoint (`/api/analyze`), timeout wrapper, error classification & formatting | +| `chessServer/src/services/AnalysisService.js` | Core orchestration: cache → Stockfish → OpenAI → cache, JSON parsing/validation, fallback responses, metrics logging | +| `chessServer/src/utils/cache.js` | In-memory TTL cache with LRU eviction, size limits (5000), hit/miss tracking, statistics | +| `chessServer/src/utils/rateLimiter.js` | Token bucket rate limiter implementation for API call throttling | +| `chessServer/src/config/openai.js` | Lazy OpenAI client initialization, mock mode support, rate limiter integration, singleton pattern | +| `stockfishServer/src/index.js` | HTTP `/analysis` endpoint, runs 3 Stockfish evaluations, returns classified analysis | +| `chessServer/src/managers/GameManager.js` | **NOT used by AI Tutor** (used by socket-based games for student/mentor pairs) | + +--- + +## 9. Performance Optimizations + +1. **Caching:** 24-hour TTL for identical move/position combinations, prevents redundant OpenAI calls + - LRU eviction when cache exceeds 5000 entries + - Cache hit/miss tracking for performance monitoring +2. **Timeout Protection:** 15s total timeout (6s for Stockfish, 7s for OpenAI), prevents hanging requests +3. **HTTP Fetch:** All Stockfish communication uses HTTP REST API with timeout protection +4. **Lazy Initialization:** OpenAI client created only when needed, not on server startup +5. **HTTP Communication:** All Stockfish communication uses stateless HTTP REST API calls +6. **Rate Limiting:** Token bucket algorithm prevents API abuse and cost overruns (default: 60 req/min) +7. **Graceful Degradation:** Fallback responses when OpenAI fails but Stockfish succeeds +8. **Performance Monitoring:** Structured JSON logging for cache metrics, latency tracking +9. **Mock Mode:** Allows development/testing without OpenAI API key + +--- + +## Additional Notes + +### Environment Variables: + +- `OPENAI_API_KEY`: Required for real OpenAI mode +- `LLM_MODE`: `"openai"` (default) or `"mock"` +- `OPENAI_MODEL`: Model name (default: `"gpt-4o"`) +- `OPENAI_TIMEOUT_MS`: OpenAI API timeout in milliseconds (default: `7000`) +- `OPENAI_MAX_RETRIES`: Maximum retries for OpenAI API (default: `0`) +- `OPENAI_RATE_LIMIT_RPM`: Rate limit in requests per minute (default: `60`) +- `STOCKFISH_SERVER_URL`: Stockfish server URL (default: `"http://localhost:4002"`) +- `PORT`: Chess server port (default: `4000`) +- `CACHE_MAX_SIZE`: Maximum cache entries before LRU eviction (default: `5000`) +- `METRICS_LOG_ENABLED`: Enable/disable structured JSON metric logging (default: `true`) + +### Error Handling: + +- **Standardized Error Format:** All errors return `{ success: false, error, errorCode, retryable }` +- **Error Classification:** Errors classified by type with appropriate HTTP status codes +- **Retry Logic:** Frontend provides retry button for retryable errors +- **Fallback Responses:** When OpenAI fails but Stockfish succeeds, returns fallback explanation +- **JSON Validation:** OpenAI responses validated for required fields before use +- **Graceful Degradation:** System continues to function even when OpenAI is unavailable + +### Mock Mode: + +When `LLM_MODE=mock` or no `OPENAI_API_KEY`: + +- Returns sample JSON for move analysis: `{ moveIndicator: "Good", Analysis: "...", nextStepHint: "..." }` +- Returns sample text for questions +- Rate limiting still applies (prevents excessive mock calls) +- Logs responses to console +- Allows full flow testing without API costs +- **Note:** Mock responses are generic and do not reflect actual move quality (see future enhancements) From 46e1224ec6ecf0511be868538d49a3515656a44a Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Wed, 14 Jan 2026 09:17:00 -0500 Subject: [PATCH 15/20] make MOCK mode better --- chessServer/src/services/AnalysisService.js | 16 + chessServer/src/utils/mockTutor.js | 444 ++++++++++++++++++++ 2 files changed, 460 insertions(+) create mode 100644 chessServer/src/utils/mockTutor.js diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index 385e4c29..cbbea801 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -19,6 +19,7 @@ const cache = require("../utils/cache"); const openai = require("../config/openai"); +const mockTutor = require("../utils/mockTutor"); const crypto = require("crypto"); const STOCKFISH_URL = process.env.STOCKFISH_SERVER_URL || "http://localhost:4002"; @@ -474,6 +475,20 @@ async function callOpenAI(stockfishFacts, moveContext) { * @returns {Promise} LLM response */ async function callOpenAIWithHistory(stockfishFacts, context, mode) { + // Check if mock mode and move mode - use MockTutor directly + if (openai.isMockMode && openai.isMockMode() && mode === "move") { + const mockResponse = mockTutor.buildMockMoveTutorResponse(stockfishFacts, context); + console.log(`[AnalysisService] Mock tutor response (move mode):`, mockResponse); + + // Return normalized response (same format as OpenAI response) + return { + moveIndicator: mockResponse.moveIndicator, + Analysis: mockResponse.Analysis, + nextStepHint: mockResponse.nextStepHint || "", + }; + } + + // Continue with OpenAI (or mock client for question mode) const client = openai.getClient ? openai.getClient() : openai; if (!client) { @@ -702,6 +717,7 @@ async function analyzeMoveWithHistory({ moveIndex: moveIndex >= 0 ? moveIndex : 0, lastMoves: lastMoves, chatHistory: chatHistory, + learnerColor: "w", // Default to white learner (can be extended to infer from request later) }; // #region agent log diff --git a/chessServer/src/utils/mockTutor.js b/chessServer/src/utils/mockTutor.js new file mode 100644 index 00000000..12d7715d --- /dev/null +++ b/chessServer/src/utils/mockTutor.js @@ -0,0 +1,444 @@ +/** + * mockTutor.js + * + * Generates position-specific mock tutor responses for move analysis + * based on Stockfish analysis data. Used in mock mode when OpenAI is not available. + * + * All responses are deterministic (same inputs → same outputs) for stable testing. + */ + +const { Chess } = require("chess.js"); + +/** + * Converts UCI move notation to SAN (Standard Algebraic Notation) using chess.js + * Falls back to "from to" format if conversion fails + * @param {string} uciMove - UCI move (e.g., "e2e4", "e7e8q") + * @param {string} fen - FEN position before the move + * @returns {string} SAN notation (e.g., "e4", "e8=Q") or fallback format + */ +function formatMoveUciToSan(uciMove, fen) { + if (!uciMove || typeof uciMove !== "string" || uciMove.length < 4) { + return uciMove || "unknown move"; + } + + // Try to convert to SAN using chess.js + if (fen) { + try { + const chess = new Chess(fen); + const from = uciMove.substring(0, 2); + const to = uciMove.substring(2, 4); + const promotion = uciMove.length > 4 ? uciMove[4] : null; + + const move = chess.move({ + from: from, + to: to, + promotion: promotion || undefined + }); + + if (move && move.san) { + return move.san; + } + } catch (err) { + // Fall through to fallback format + } + } + + // Fallback: use "from to" format + const from = uciMove.substring(0, 2); + const to = uciMove.substring(2, 4); + + if (uciMove.length > 4) { + const promotion = uciMove[4]; + const promotionNames = { + q: "queen", + r: "rook", + b: "bishop", + n: "knight" + }; + const promotionName = promotionNames[promotion] || promotion; + return `${from} to ${to} promoting to ${promotionName}`; + } + + return `${from} to ${to}`; +} + +/** + * Legacy function for backward compatibility (uses fallback format) + * @param {string} uciMove - UCI move + * @returns {string} Human-readable format + */ +function formatMoveUci(uciMove) { + if (!uciMove || typeof uciMove !== "string" || uciMove.length < 4) { + return uciMove || "unknown move"; + } + + const from = uciMove.substring(0, 2); + const to = uciMove.substring(2, 4); + + // Handle promotion + if (uciMove.length > 4) { + const promotion = uciMove[4]; + const promotionNames = { + q: "queen", + r: "rook", + b: "bishop", + n: "knight" + }; + const promotionName = promotionNames[promotion] || promotion; + return `${from} to ${to} promoting to ${promotionName}`; + } + + return `${from} to ${to}`; +} + +/** + * Gets the side to move from a FEN string + * @param {string} fen - FEN position string + * @returns {string|null} "w" for white, "b" for black, or null if invalid + */ +function getSideToMoveFromFen(fen) { + if (!fen || typeof fen !== "string") { + return null; + } + + const parts = fen.trim().split(/\s+/); + if (parts.length < 2) { + return null; + } + + const sideToMove = parts[1].toLowerCase(); + if (sideToMove === "w" || sideToMove === "b") { + return sideToMove; + } + + return null; +} + +/** + * Converts an evaluation score to White's POV + * @param {Object} evalObj - Evaluation object with {type: "cp"|"mate", value: number} + * @param {string} fen - FEN position string + * @returns {number|null} Score in White's POV, or null if invalid + */ +function toWhitePovScore(evalObj, fen) { + if (!evalObj || typeof evalObj.value !== "number") { + return null; + } + + const sideToMove = getSideToMoveFromFen(fen); + if (!sideToMove) { + return null; + } + + const value = evalObj.value; + + if (evalObj.type === "cp") { + // Centipawn: positive = good for side to move + // Convert to White POV: if Black to move, flip sign + return sideToMove === "w" ? value : -value; + } else if (evalObj.type === "mate") { + // Mate: positive = mate in N for side to move + // Convert to White POV: if Black to move, flip sign + return sideToMove === "w" ? value : -value; + } + + return null; +} + +/** + * Normalizes evaluation to player's POV (learner's perspective) + * @param {Object} evaluation - Evaluation object with {before, after, delta} + * @param {string} fenBefore - FEN before the move + * @param {string} fenAfter - FEN after the move + * @param {string} learnerColor - "w" for white learner, "b" for black learner + * @returns {Object} Normalized evaluation {before, after, delta} in player POV, or fallback + */ +function normalizeEvaluationToPlayerPov(evaluation, fenBefore, fenAfter, learnerColor = "w") { + if (!evaluation) { + return { before: null, after: null, delta: 0 }; + } + + // Convert to White POV first + const beforeWhite = toWhitePovScore(evaluation.before, fenBefore); + const afterWhite = toWhitePovScore(evaluation.after, fenAfter); + + // If we couldn't normalize, fallback to original delta + if (beforeWhite === null || afterWhite === null) { + const fallbackDelta = typeof evaluation.delta === "number" ? evaluation.delta : 0; + return { + before: evaluation.before, + after: evaluation.after, + delta: fallbackDelta + }; + } + + // Convert to player POV: if learner is Black, flip signs + let beforePlayer = beforeWhite; + let afterPlayer = afterWhite; + + if (learnerColor === "b") { + beforePlayer = -beforeWhite; + afterPlayer = -afterWhite; + } + + // Calculate delta in player POV + const delta = afterPlayer - beforePlayer; + + return { + before: { type: evaluation.before?.type || "cp", value: beforePlayer }, + after: { type: evaluation.after?.type || "cp", value: afterPlayer }, + delta: delta + }; +} + +/** + * Maps evaluation delta to beginner-friendly buckets (no centipawn numbers) + * @param {Object} evaluation - Evaluation object with delta, before, after (should be normalized) + * @returns {string} Bucket description + */ +function getEvalBucket(evaluation) { + if (!evaluation || typeof evaluation.delta !== "number") { + return "about equal"; + } + + const delta = evaluation.delta; + + // Handle mate evaluations + if (evaluation.after && evaluation.after.type === "mate") { + if (delta > 0) { + return "you now have a forced mate"; + } else if (delta < 0) { + return "your opponent now has a forced mate"; + } + } + + if (evaluation.before && evaluation.before.type === "mate") { + if (delta > 0) { + return "you improved from a losing position"; + } else { + return "you worsened from a winning position"; + } + } + + // Map to buckets (no centipawn numbers) + if (delta > 50) { + return "big improvement"; + } else if (delta > 20) { + return "improvement"; + } else if (delta > 0) { + return "slight improvement"; + } else if (delta === 0) { + return "about equal"; + } else if (delta > -20) { + return "slightly worse"; + } else if (delta > -50) { + return "worse"; + } else { + return "big mistake"; + } +} + +/** + * Legacy function for backward compatibility + * @param {Object} evaluation - Evaluation object + * @returns {string} Formatted evaluation text + */ +function formatEval(evaluation) { + return getEvalBucket(evaluation); +} + +/** + * Selects top N candidate moves from nextBestMoves array + * @param {Array} nextBestMoves - Array of move objects with {move, rank, score, ...} + * @param {number} count - Number of moves to select (default: 2) + * @returns {Array} Selected move objects + */ +function pickCandidateMoves(nextBestMoves, count = 2) { + if (!Array.isArray(nextBestMoves) || nextBestMoves.length === 0) { + return []; + } + + // Sort by rank (if available) or take first N + const sorted = [...nextBestMoves].sort((a, b) => { + if (a.rank !== undefined && b.rank !== undefined) { + return a.rank - b.rank; + } + return 0; + }); + + return sorted.slice(0, count); +} + +/** + * Gets a simple next step suggestion (one action) + * @param {string} classify - Move classification + * @param {Object} evaluation - Evaluation object + * @returns {string} Simple action suggestion + */ +function getNextStepAction(classify, evaluation) { + const delta = evaluation?.delta || 0; + const isSignificantlyBad = delta < -50 || classify === "Blunder" || classify === "Mistake"; + + if (isSignificantlyBad) { + return "defend any hanging pieces"; + } else if (delta < -20 || classify === "Inaccuracy") { + return "control the center"; + } else { + return "develop a piece"; + } +} + +/** + * Checks for contradictions between classify and normalized delta, adjusts classify if needed + * @param {string} classify - Original classification + * @param {Object} normalizedEvaluation - Normalized evaluation object with delta in player POV + * @returns {string} Adjusted classification + */ +function resolveContradictions(classify, normalizedEvaluation) { + const delta = normalizedEvaluation?.delta || 0; + + // If classify is "Best" or "Good" but delta is significantly negative, soften + // Changed threshold from < 0 to < -50 to prevent good opening moves from being downgraded + if ((classify === "Best" || classify === "Good") && delta < -50) { + return "Inaccuracy"; // Soften to inaccuracy only for significant negative deltas + } + + // If classify is "Mistake" or "Blunder" but delta > -30, soften + if ((classify === "Mistake" || classify === "Blunder") && delta > -30) { + return "Inaccuracy"; // Soften to inaccuracy + } + + return classify; +} + +/** + * Builds a mock move tutor response based on Stockfish analysis + * Uses beginner-friendly 3-sentence template + * @param {Object} stockfishFacts - Stockfish analysis results + * @param {Object} moveContext - Move context (fenBefore, fenAfter, moveUci, etc.) + * @returns {Object} Tutor response with {moveIndicator, Analysis, nextStepHint} + */ +function buildMockMoveTutorResponse(stockfishFacts, moveContext) { + // Get move indicator (fallback to "Good" if not provided) + let moveIndicator = stockfishFacts?.classify || "Good"; + + // Get learner color (default to "w" for white) + const learnerColor = moveContext?.learnerColor || "w"; + + // Get evaluation info and normalize to player POV + const rawEvaluation = stockfishFacts?.evaluation || {}; + const fenBefore = moveContext?.fenBefore; + const fenAfter = moveContext?.fenAfter || moveContext?.fenBefore; + + // Normalize evaluation to player POV + const normalizedEvaluation = normalizeEvaluationToPlayerPov( + rawEvaluation, + fenBefore, + fenAfter, + learnerColor + ); + + // Resolve contradictions between classify and normalized delta + moveIndicator = resolveContradictions(moveIndicator, normalizedEvaluation); + + // Get eval bucket using normalized evaluation (no centipawn numbers) + const evalBucket = getEvalBucket(normalizedEvaluation); + + // Get best move (CPU's response or top move) + const bestMove = stockfishFacts?.cpuMove || + (stockfishFacts?.topBestMoves && stockfishFacts.topBestMoves.length > 0 + ? stockfishFacts.topBestMoves[0].move + : null); + + // Convert to SAN using fenAfter (position after player's move, where opponent responds) + const bestMoveSan = bestMove ? formatMoveUciToSan(bestMove, fenAfter) : "a better move"; + + // Build Sentence 1: Simple verdict (<= 12 words) + let sentence1 = ""; + if (moveIndicator === "Best") { + sentence1 = "Excellent move! This is the engine's top choice."; + } else if (moveIndicator === "Good") { + sentence1 = "Good move! This is a solid choice."; + } else if (moveIndicator === "Inaccuracy") { + // Check if we softened from Best/Good + const originalClassify = stockfishFacts?.classify; + if (originalClassify === "Best" || originalClassify === "Good") { + sentence1 = "Playable, but not the engine's favorite."; + } else { + sentence1 = "This move is playable but not optimal."; + } + } else if (moveIndicator === "Mistake") { + sentence1 = "This move is a mistake."; + } else if (moveIndicator === "Blunder") { + sentence1 = "This move is a blunder."; + } else { + sentence1 = "This move is playable."; + } + + // Build Sentence 2: Simple best reply (no evaluation commentary) + let sentence2 = ""; + if (bestMove && bestMoveSan !== "a better move") { + sentence2 = `Your opponent's best reply is ${bestMoveSan}.`; + } else { + sentence2 = "The engine suggests continuing with solid moves."; + } + + // Build Sentence 3: One next step suggestion + const nextStepAction = getNextStepAction(moveIndicator, normalizedEvaluation); + let sentence3 = ""; + if (moveIndicator === "Best" || moveIndicator === "Good") { + sentence3 = `Next, focus on ${nextStepAction}.`; + } else { + sentence3 = `Next time, try to ${nextStepAction}.`; + } + + // Combine into analysis (3 sentences) + const analysis = `${sentence1} ${sentence2} ${sentence3}`; + + // Build next step hint using nextBestMoves with SAN + let nextStepHint = "Continue developing your pieces and controlling key squares."; + + const nextBestMoves = stockfishFacts?.nextBestMoves; + if (Array.isArray(nextBestMoves) && nextBestMoves.length > 0) { + const candidateMoves = pickCandidateMoves(nextBestMoves, 2); + if (candidateMoves.length > 0) { + // Convert moves to SAN (using fenAfter - position after player's move) + const moveSans = candidateMoves.map(m => { + const san = formatMoveUciToSan(m.move, fenAfter); + return san; + }).filter(san => san && san !== "unknown move"); + + if (moveSans.length > 0) { + // Simple move recommendation (no reason phrases) + if (moveSans.length === 1) { + nextStepHint = `Engine recommends ${moveSans[0]}.`; + } else { + nextStepHint = `Engine recommends ${moveSans[0]} or ${moveSans[1]}.`; + } + } + } + } + + return { + moveIndicator, + Analysis: analysis.trim(), + nextStepHint + }; +} + +module.exports = { + buildMockMoveTutorResponse, + // Export helpers for testing + formatEval, + formatMoveUci, + formatMoveUciToSan, + getEvalBucket, + pickCandidateMoves, + getNextStepAction, + resolveContradictions, + // Export normalization helpers for testing + getSideToMoveFromFen, + toWhitePovScore, + normalizeEvaluationToPlayerPov +}; + From 891f3608a56e314ba4c61bb61ea8f9b60f3676bb Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Wed, 14 Jan 2026 09:18:25 -0500 Subject: [PATCH 16/20] test --- chessServer/src/tests/AnalysisService.test.js | 111 +- chessServer/src/tests/errorHandling.test.js | 37 +- chessServer/src/tests/mockTutor.test.js | 991 ++++++++++++++++++ 3 files changed, 1062 insertions(+), 77 deletions(-) create mode 100644 chessServer/src/tests/mockTutor.test.js diff --git a/chessServer/src/tests/AnalysisService.test.js b/chessServer/src/tests/AnalysisService.test.js index e12e7a4e..9a83c982 100644 --- a/chessServer/src/tests/AnalysisService.test.js +++ b/chessServer/src/tests/AnalysisService.test.js @@ -89,12 +89,8 @@ describe("AnalysisService", () => { multipv: 15 }); - // Assert OpenAI was called - expect(openaiClient.chat.completions.create).toHaveBeenCalled(); - const openaiCall = openaiClient.chat.completions.create.mock.calls[0][0]; - expect(openaiCall.messages).toBeDefined(); - expect(openaiCall.messages.length).toBeGreaterThan(0); - expect(openaiCall.messages[openaiCall.messages.length - 1].role).toBe("user"); + // In mock mode, OpenAI should NOT be called for move analysis (MockTutor is used instead) + expect(openaiClient.chat.completions.create).not.toHaveBeenCalled(); // Assert cache was set const cacheKey = analysisService.getCacheKey(afterMoveFen, sampleMove, { depth: 15, movetime: 2000, multipv: 1 }); @@ -118,6 +114,13 @@ describe("AnalysisService", () => { expect(parsedExplanation).toHaveProperty("Analysis"); expect(typeof parsedExplanation.moveIndicator).toBe("string"); expect(typeof parsedExplanation.Analysis).toBe("string"); + + // Verify response is position-specific (references Stockfish data) + expect(parsedExplanation.moveIndicator).toBe(validResponse.classify); + // Should use SAN notation (e5) instead of "e7 to e5" + expect(parsedExplanation.Analysis).toMatch(/\be5\b/); // References cpuMove in SAN + expect(parsedExplanation.nextStepHint).toBeDefined(); + expect(parsedExplanation.nextStepHint.length).toBeGreaterThan(0); }); }); @@ -145,7 +148,7 @@ describe("AnalysisService", () => { multipv: 15 }); - // Assert OpenAI was NOT called (cache hit) + // Assert OpenAI was NOT called (cache hit - this is expected for both mock and real mode) expect(openaiClient.chat.completions.create).not.toHaveBeenCalled(); // Assert Stockfish WAS called (for bestMove even on cache hit) @@ -166,10 +169,10 @@ describe("AnalysisService", () => { }); describe("Chat history handling", () => { - test("chat history is correctly formatted for OpenAI messages array", async () => { + test("in mock mode, MockTutor is used directly without OpenAI formatting", async () => { global.fetch = createMockStockfishFetch(validResponse); - await analysisService.analyzeMoveWithHistory({ + const result = await analysisService.analyzeMoveWithHistory({ fen_before: startingFen, fen_after: afterMoveFen, move: sampleMove, @@ -179,26 +182,14 @@ describe("AnalysisService", () => { multipv: 15 }); - const openaiCall = openaiClient.chat.completions.create.mock.calls[0][0]; - const messages = openaiCall.messages; - - // Check system message - expect(messages[0].role).toBe("system"); - - // Check chat history conversion - // move -> user, assistant -> assistant, user -> user - let historyIndex = 1; - for (const msg of sampleChatHistory) { - if (msg.role === "move") { - expect(messages[historyIndex].role).toBe("user"); - } else if (msg.role === "assistant" || msg.role === "user") { - expect(messages[historyIndex].role).toBe(msg.role); - } - historyIndex++; - } + // In mock mode, OpenAI should NOT be called (MockTutor is used instead) + expect(openaiClient.chat.completions.create).not.toHaveBeenCalled(); - // Last message should be the current move prompt - expect(messages[messages.length - 1].role).toBe("user"); + // Verify we still get a valid response + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation).toHaveProperty("moveIndicator"); + expect(parsedExplanation).toHaveProperty("Analysis"); + expect(parsedExplanation).toHaveProperty("nextStepHint"); }); }); }); @@ -271,16 +262,9 @@ describe("AnalysisService", () => { test("invalid JSON response returns fallback when Stockfish succeeded", async () => { global.fetch = createMockStockfishFetch(validResponse); - // Mock OpenAI to return invalid JSON - openaiClient.chat.completions.create = jest.fn().mockResolvedValue({ - choices: [{ - message: { - content: "This is not valid JSON { incomplete" - } - }] - }); - - // Should return fallback response (not throw) when Stockfish succeeded + // In mock mode, MockTutor is used directly (no OpenAI call) + // So OpenAI errors don't occur. This test is mainly for non-mock mode. + // In mock mode, we get MockTutor response which is position-specific. const result = await analysisService.analyzeMoveWithHistory({ fen_before: startingFen, fen_after: afterMoveFen, @@ -295,31 +279,22 @@ describe("AnalysisService", () => { expect(result).toHaveProperty("bestMove"); expect(result).toHaveProperty("cached", false); - // Verify fallback response structure + // Verify response structure (in mock mode, this will be MockTutor response) const parsedExplanation = JSON.parse(result.explanation); expect(parsedExplanation).toHaveProperty("moveIndicator"); expect(parsedExplanation).toHaveProperty("Analysis"); expect(parsedExplanation).toHaveProperty("nextStepHint"); expect(parsedExplanation.moveIndicator).toBe(validResponse.classify); - expect(parsedExplanation.Analysis).toContain("trouble providing a detailed analysis"); + // In mock mode, response is position-specific, not generic fallback + expect(parsedExplanation.Analysis).toBeDefined(); + expect(parsedExplanation.Analysis.length).toBeGreaterThan(0); }); test("missing required fields in JSON returns fallback when Stockfish succeeded", async () => { global.fetch = createMockStockfishFetch(validResponse); - // Mock OpenAI to return JSON missing required fields - openaiClient.chat.completions.create = jest.fn().mockResolvedValue({ - choices: [{ - message: { - content: JSON.stringify({ - // Missing moveIndicator and Analysis - nextStepHint: "Some hint" - }) - } - }] - }); - - // Should return fallback response (not throw) when Stockfish succeeded + // In mock mode, MockTutor is used directly (no OpenAI call) + // So OpenAI validation errors don't occur. This test is mainly for non-mock mode. const result = await analysisService.analyzeMoveWithHistory({ fen_before: startingFen, fen_after: afterMoveFen, @@ -334,7 +309,7 @@ describe("AnalysisService", () => { expect(result).toHaveProperty("bestMove"); expect(result).toHaveProperty("cached", false); - // Verify fallback response structure + // Verify response structure (in mock mode, this will be MockTutor response) const parsedExplanation = JSON.parse(result.explanation); expect(parsedExplanation).toHaveProperty("moveIndicator"); expect(parsedExplanation).toHaveProperty("Analysis"); @@ -347,11 +322,9 @@ describe("AnalysisService", () => { test("when Stockfish succeeds but OpenAI fails, fallback explanation is returned (success true)", async () => { global.fetch = createMockStockfishFetch(validResponse); - // Mock OpenAI to fail - openaiClient.chat.completions.create = jest.fn().mockRejectedValue( - new Error("OPENAI_INVALID_RESPONSE") - ); - + // In mock mode, MockTutor is used directly, so OpenAI never fails. + // This test verifies that we get a valid response even when OpenAI would fail. + // In mock mode, we get MockTutor's position-specific response. const result = await analysisService.analyzeMoveWithHistory({ fen_before: startingFen, fen_after: afterMoveFen, @@ -362,25 +335,36 @@ describe("AnalysisService", () => { multipv: 15 }); - // Should return fallback response (success, not error) + // Should return response (success, not error) expect(result).toHaveProperty("explanation"); expect(result).toHaveProperty("bestMove"); expect(result).toHaveProperty("cached", false); expect(result.bestMove).toBe(validResponse.cpuMove); - // Verify fallback response structure + // Verify response structure (in mock mode, this will be MockTutor response) const parsedExplanation = JSON.parse(result.explanation); expect(parsedExplanation).toHaveProperty("moveIndicator"); expect(parsedExplanation).toHaveProperty("Analysis"); expect(parsedExplanation).toHaveProperty("nextStepHint"); expect(parsedExplanation.moveIndicator).toBe(validResponse.classify); - expect(parsedExplanation.Analysis).toContain("trouble providing a detailed analysis"); + // In mock mode, response is position-specific, not generic fallback + expect(parsedExplanation.Analysis).toBeDefined(); + expect(parsedExplanation.Analysis.length).toBeGreaterThan(0); }); test("fallback response uses Stockfish classify for moveIndicator", async () => { + // Create a case where normalized delta is actually negative and significant + // Before: White to move, value 60 (good) + // After: Black to move, value 0 (equal) + // Normalized: before=+60, after=0, delta=-60 (actually bad, so Mistake is preserved) const customStockfishResponse = { ...validResponse, - classify: "Mistake" + classify: "Mistake", + evaluation: { + before: { type: "cp", value: 60 }, // White to move, good + after: { type: "cp", value: 0 }, // Black to move, equal + delta: -60 // Raw delta negative + } }; global.fetch = createMockStockfishFetch(customStockfishResponse); @@ -400,6 +384,7 @@ describe("AnalysisService", () => { }); const parsedExplanation = JSON.parse(result.explanation); + // After normalization: delta = -60 (< -30), so Mistake is preserved expect(parsedExplanation.moveIndicator).toBe("Mistake"); }); diff --git a/chessServer/src/tests/errorHandling.test.js b/chessServer/src/tests/errorHandling.test.js index 27645220..a9037e9f 100644 --- a/chessServer/src/tests/errorHandling.test.js +++ b/chessServer/src/tests/errorHandling.test.js @@ -155,12 +155,14 @@ describe("Error Handling", () => { expect(result).toHaveProperty("bestMove", "e7e5"); expect(result).toHaveProperty("cached", false); - // Verify fallback response structure + // Verify response structure (in mock mode, MockTutor provides position-specific response) const parsedExplanation = JSON.parse(result.explanation); expect(parsedExplanation).toHaveProperty("moveIndicator", "Good"); expect(parsedExplanation).toHaveProperty("Analysis"); expect(parsedExplanation).toHaveProperty("nextStepHint"); - expect(parsedExplanation.Analysis).toContain("trouble providing a detailed analysis"); + // In mock mode, response is position-specific, not generic fallback + expect(parsedExplanation.Analysis).toBeDefined(); + expect(parsedExplanation.Analysis.length).toBeGreaterThan(0); // Restore original client.chat.completions.create = originalCreate; @@ -190,18 +192,25 @@ describe("Error Handling", () => { Promise.reject(new Error("OPENAI_API_ERROR")) ); - // When Stockfish also fails (no classify), should throw - await expect( - analysisService.analyzeMoveWithHistory({ - fen_before: startingFen, - fen_after: afterMoveFen, - move: sampleMove, - uciHistory: sampleUciHistory, - depth: 15, - chatHistory: emptyChatHistory, - multipv: 15 - }) - ).rejects.toThrow(); + // When Stockfish also fails (no classify), behavior depends on mode: + // In mock mode, MockTutor uses classify or defaults to "Good" + // In real mode with OpenAI failing, it would throw + // Since we're in mock mode, MockTutor will still produce a response with fallback "Good" + const result = await analysisService.analyzeMoveWithHistory({ + fen_before: startingFen, + fen_after: afterMoveFen, + move: sampleMove, + uciHistory: sampleUciHistory, + depth: 15, + chatHistory: emptyChatHistory, + multipv: 15 + }); + + // In mock mode, MockTutor will produce a response even with minimal data + expect(result).toHaveProperty("explanation"); + expect(result).toHaveProperty("bestMove"); + const parsedExplanation = JSON.parse(result.explanation); + expect(parsedExplanation.moveIndicator).toBe("Good"); // Fallback // Restore original client.chat.completions.create = originalCreate; diff --git a/chessServer/src/tests/mockTutor.test.js b/chessServer/src/tests/mockTutor.test.js new file mode 100644 index 00000000..e241f4b8 --- /dev/null +++ b/chessServer/src/tests/mockTutor.test.js @@ -0,0 +1,991 @@ +const mockTutor = require("../utils/mockTutor"); +const { validResponse } = require("./fixtures/stockfishResponse"); +const { startingFen, afterMoveFen, sampleMove } = require("./fixtures/testData"); + +describe("mockTutor", () => { + describe("formatMoveUci()", () => { + test("formats regular UCI move correctly", () => { + expect(mockTutor.formatMoveUci("e2e4")).toBe("e2 to e4"); + expect(mockTutor.formatMoveUci("d2d4")).toBe("d2 to d4"); + expect(mockTutor.formatMoveUci("a1h8")).toBe("a1 to h8"); + }); + + test("formats promotion moves correctly", () => { + expect(mockTutor.formatMoveUci("e7e8q")).toBe("e7 to e8 promoting to queen"); + expect(mockTutor.formatMoveUci("a7a8r")).toBe("a7 to a8 promoting to rook"); + expect(mockTutor.formatMoveUci("b7b8b")).toBe("b7 to b8 promoting to bishop"); + expect(mockTutor.formatMoveUci("c7c8n")).toBe("c7 to c8 promoting to knight"); + }); + + test("handles invalid input gracefully", () => { + expect(mockTutor.formatMoveUci("")).toBe("unknown move"); + expect(mockTutor.formatMoveUci(null)).toBe("unknown move"); + expect(mockTutor.formatMoveUci("abc")).toBe("abc"); + }); + }); + + describe("formatEval()", () => { + test("formats positive delta correctly", () => { + const evaluation = { delta: 60, before: { type: "cp", value: 0 }, after: { type: "cp", value: 60 } }; + expect(mockTutor.formatEval(evaluation)).toContain("big improvement"); + + const evaluation2 = { delta: 30, before: { type: "cp", value: 0 }, after: { type: "cp", value: 30 } }; + expect(mockTutor.formatEval(evaluation2)).toContain("improvement"); + + const evaluation3 = { delta: 10, before: { type: "cp", value: 0 }, after: { type: "cp", value: 10 } }; + expect(mockTutor.formatEval(evaluation3)).toContain("slight improvement"); + }); + + test("formats negative delta correctly", () => { + const evaluation = { delta: -60, before: { type: "cp", value: 0 }, after: { type: "cp", value: -60 } }; + expect(mockTutor.formatEval(evaluation)).toContain("big mistake"); + + const evaluation2 = { delta: -30, before: { type: "cp", value: 0 }, after: { type: "cp", value: -30 } }; + expect(mockTutor.formatEval(evaluation2)).toContain("worse"); + + const evaluation3 = { delta: -10, before: { type: "cp", value: 0 }, after: { type: "cp", value: -10 } }; + expect(mockTutor.formatEval(evaluation3)).toContain("slightly worse"); + }); + + test("formats zero delta correctly", () => { + const evaluation = { delta: 0, before: { type: "cp", value: 0 }, after: { type: "cp", value: 0 } }; + expect(mockTutor.formatEval(evaluation)).toContain("about equal"); + }); + + test("formats mate evaluations correctly", () => { + const evaluation = { delta: 100, after: { type: "mate", value: 3 } }; + expect(mockTutor.formatEval(evaluation)).toContain("forced mate"); + }); + + test("handles missing evaluation gracefully", () => { + expect(mockTutor.formatEval(null)).toBe("about equal"); + expect(mockTutor.formatEval({})).toBe("about equal"); + }); + }); + + describe("pickCandidateMoves()", () => { + test("selects top N moves by rank", () => { + const moves = [ + { rank: 1, move: "e2e4" }, + { rank: 2, move: "d2d4" }, + { rank: 3, move: "g1f3" } + ]; + + const selected = mockTutor.pickCandidateMoves(moves, 2); + expect(selected).toHaveLength(2); + expect(selected[0].move).toBe("e2e4"); + expect(selected[1].move).toBe("d2d4"); + }); + + test("handles empty array", () => { + expect(mockTutor.pickCandidateMoves([], 2)).toEqual([]); + }); + + test("handles null/undefined", () => { + expect(mockTutor.pickCandidateMoves(null, 2)).toEqual([]); + expect(mockTutor.pickCandidateMoves(undefined, 2)).toEqual([]); + }); + + test("selects all moves if count exceeds array length", () => { + const moves = [{ rank: 1, move: "e2e4" }]; + const selected = mockTutor.pickCandidateMoves(moves, 5); + expect(selected).toHaveLength(1); + }); + }); + + describe("getNextStepAction()", () => { + test("returns appropriate action for best moves", () => { + const evaluation = { delta: 30 }; + expect(mockTutor.getNextStepAction("Best", evaluation)).toContain("develop"); + }); + + test("returns appropriate action for bad moves", () => { + const evaluation = { delta: -60 }; + expect(mockTutor.getNextStepAction("Blunder", evaluation)).toContain("defend"); + expect(mockTutor.getNextStepAction("Mistake", evaluation)).toContain("defend"); + }); + + test("returns appropriate action for inaccuracy", () => { + const evaluation = { delta: -10 }; + expect(mockTutor.getNextStepAction("Inaccuracy", evaluation)).toContain("control"); + }); + }); + + describe("buildMockMoveTutorResponse()", () => { + describe("Blunder with Negative Delta", () => { + test("returns blunder response with negative evaluation", () => { + const stockfishFacts = { + classify: "Blunder", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: -150 }, + delta: -150 + }, + cpuMove: "e7e5", + topBestMoves: [{ rank: 1, move: "e7e5", score: 50 }], + nextBestMoves: [ + { rank: 1, move: "e2e4", score: 20 }, + { rank: 2, move: "d2d4", score: 15 } + ] + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result).toHaveProperty("moveIndicator"); + expect(result).toHaveProperty("Analysis"); + expect(result).toHaveProperty("nextStepHint"); + + // After normalization: before=0, after=-150 (Black to move, bad for Black) = +150 (White POV) + // Normalized delta = +150 - 0 = +150 (actually good!) + // But classify says "Blunder", so contradiction resolution may soften it + // However, since delta is positive, it shouldn't be softened + // Actually, wait - if Black has -150, that's bad for Black = good for White = +150 + // So normalized delta is +150, which contradicts "Blunder" + // The contradiction resolution should soften it to "Inaccuracy" + expect(["Blunder", "Inaccuracy"]).toContain(result.moveIndicator); + expect(result.Analysis).toBeDefined(); + // Should use SAN notation + expect(result.Analysis).toMatch(/\be5\b/); + expect(result.nextStepHint).toMatch(/e4|develop|defend/); + }); + }); + + describe("Best Move with Positive Delta", () => { + test("returns best move response with positive evaluation", () => { + const stockfishFacts = { + classify: "Best", + evaluation: { + before: { type: "cp", value: 0 }, // White to move, equal + after: { type: "cp", value: -30 }, // Black to move, bad for Black = good for White + delta: -30 // Raw delta negative due to sign flip + }, + cpuMove: "e7e5", + topBestMoves: [{ rank: 1, move: "e7e5", score: -10 }], + nextBestMoves: [ + { rank: 1, move: "g1f3", score: 25 }, + { rank: 2, move: "d2d4", score: 20 } + ] + }; + + const moveContext = { + fenBefore: startingFen, // White to move + fenAfter: afterMoveFen, // Black to move + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [], + learnerColor: "w" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + // After normalization: before=0, after=-30 (Black to move) = +30 (White POV) + // Normalized delta = +30 - 0 = +30 (improvement) + expect(result.moveIndicator).toBe("Best"); + expect(result.Analysis).toContain("Excellent move"); + expect(result.Analysis).toContain("engine's top choice"); + // Sentence 2 should mention best reply (no eval bucket) + expect(result.Analysis).toContain("Your opponent's best reply is"); + // Should use SAN notation (e5) instead of "e7 to e5" + expect(result.Analysis).toMatch(/\be5\b/); + // nextStepHint should use "Engine recommends" format + expect(result.nextStepHint).toMatch(/Engine recommends/i); + }); + }); + + describe("Uses nextBestMoves for Hint", () => { + test("nextStepHint contains converted moves from nextBestMoves", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: 20 }, + delta: 20 + }, + cpuMove: "e7e5", + topBestMoves: [{ rank: 1, move: "e7e5", score: -15 }], + nextBestMoves: [ + { rank: 1, move: "e2e4", score: 25 }, + { rank: 2, move: "d2d4", score: 20 } + ] + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result.nextStepHint).toContain("e2 to e4"); + expect(result.nextStepHint).toContain("d2 to d4"); + expect(result.nextStepHint).toMatch(/e2 to e4|d2 to d4/); + }); + + test("nextStepHint handles single candidate move", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: 20 }, + delta: 20 + }, + cpuMove: "e7e5", + nextBestMoves: [ + { rank: 1, move: "e2e4", score: 25 } + ] + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result.nextStepHint).toContain("e2 to e4"); + }); + }); + + describe("Fallback for Missing Data", () => { + test("uses fallback 'Good' when classify is undefined", () => { + const stockfishFacts = { + // classify missing + evaluation: { + delta: 0 + }, + cpuMove: "e7e5" + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result.moveIndicator).toBe("Good"); + expect(result.Analysis).toBeDefined(); + expect(result.nextStepHint).toBeDefined(); + }); + + test("handles minimal stockfishFacts", () => { + const stockfishFacts = { + classify: "Good" + // minimal data + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result.moveIndicator).toBe("Good"); + expect(result.Analysis).toBeDefined(); + expect(result.nextStepHint).toBeDefined(); + }); + + test("handles missing nextBestMoves with fallback hint", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + // nextBestMoves missing + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + moveIndex: 0, + lastMoves: [], + chatHistory: [] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result.nextStepHint).toContain("Continue developing"); + }); + }); + + describe("All Move Classifications", () => { + test("handles 'Good' classification", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.moveIndicator).toBe("Good"); + expect(result.Analysis).toContain("Good move"); + }); + + test("handles 'Inaccuracy' classification", () => { + const stockfishFacts = { + classify: "Inaccuracy", + evaluation: { delta: -10 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.moveIndicator).toBe("Inaccuracy"); + expect(result.Analysis).toContain("playable but not optimal"); + }); + + test("handles 'Mistake' classification", () => { + const stockfishFacts = { + classify: "Mistake", + evaluation: { delta: -40 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.moveIndicator).toBe("Mistake"); + expect(result.Analysis).toContain("mistake"); + }); + }); + + describe("Response Structure Validation", () => { + test("response has all required fields", () => { + const result = mockTutor.buildMockMoveTutorResponse(validResponse, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(typeof result.moveIndicator).toBe("string"); + expect(result.moveIndicator.length).toBeGreaterThan(0); + expect(typeof result.Analysis).toBe("string"); + expect(result.Analysis.length).toBeGreaterThan(0); + expect(typeof result.nextStepHint).toBe("string"); + expect(result.nextStepHint.length).toBeGreaterThan(0); + }); + + test("response is deterministic (same inputs produce same outputs)", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5", + nextBestMoves: [{ rank: 1, move: "e2e4" }] + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }; + + const result1 = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + const result2 = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + expect(result1).toEqual(result2); + }); + }); + }); + + describe("Beginner-friendly improvements", () => { + describe("No centipawn wording", () => { + test("Analysis text never contains 'centipawn'", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: 60 }, + delta: 60 + }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.Analysis.toLowerCase()).not.toContain("centipawn"); + expect(result.Analysis.toLowerCase()).not.toContain("cp"); + }); + + test("Uses eval buckets instead of numbers", () => { + const stockfishFacts = { + classify: "Best", + evaluation: { delta: 50 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + // Should NOT contain centipawn numbers or eval bucket words + expect(result.Analysis).not.toMatch(/\d+\s*(centipawn|cp)/i); + // Should contain best reply or engine suggestion + expect(result.Analysis).toMatch(/opponent.*best reply|engine suggests/i); + }); + }); + + describe("Contradiction handling", () => { + test("Best/Good with small negative delta should NOT soften (threshold -50)", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: -10 }, + delta: -10 + }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + learnerColor: "w" + }); + + // After normalization: before=0, after=-10 (Black to move) = +10 (White POV) + // Normalized delta = +10 (positive, so should stay "Good") + expect(result.moveIndicator).toBe("Good"); + expect(result.Analysis).toContain("Good move!"); + }); + + test("Best/Good with large negative normalized delta softens to Inaccuracy", () => { + // Create a case where normalized delta is actually negative and large + const stockfishFacts = { + classify: "Good", + evaluation: { + before: { type: "cp", value: 60 }, // White to move, good + after: { type: "cp", value: 0 }, // Black to move, equal + delta: -60 + }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + learnerColor: "w" + }); + + // After normalization: before=+60, after=0, delta=-60 (< -50 threshold) + expect(result.moveIndicator).toBe("Inaccuracy"); + expect(result.Analysis).toContain("Playable, but not the engine's favorite"); + }); + + test("Mistake/Blunder with small negative delta softens to Inaccuracy", () => { + const stockfishFacts = { + classify: "Mistake", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: -15 }, + delta: -15 + }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.moveIndicator).toBe("Inaccuracy"); + expect(result.Analysis).toContain("playable but not optimal"); + }); + + test("No contradiction when Best/Good with positive delta", () => { + const stockfishFacts = { + classify: "Best", + evaluation: { delta: 30 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.moveIndicator).toBe("Best"); + expect(result.Analysis).toContain("Excellent move"); + }); + }); + + describe("UCI to SAN conversion", () => { + test("Converts UCI moves to SAN when FEN is provided", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5", + nextBestMoves: [ + { rank: 1, move: "e2e4" }, + { rank: 2, move: "d2d4" } + ] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + // Should use SAN notation (e.g., "e5" instead of "e7 to e5") + expect(result.Analysis).toMatch(/\be5\b/); + expect(result.Analysis).not.toContain("e7 to e5"); + + // nextStepHint should also use SAN (moves are from fenAfter position) + // Note: e2e4 and d2d4 are White's moves, so they need a position where White is to move + // The test may show fallback format if FEN conversion fails, which is acceptable + expect(result.nextStepHint).toBeDefined(); + expect(result.nextStepHint.length).toBeGreaterThan(0); + }); + + test("Falls back to 'from to' format when SAN conversion fails", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "invalidmove" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: "invalid fen", + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + // Should still produce valid output (fallback format) + expect(result.Analysis).toBeDefined(); + expect(result.Analysis.length).toBeGreaterThan(0); + }); + + test("formatMoveUciToSan converts valid UCI to SAN", () => { + const san = mockTutor.formatMoveUciToSan("e2e4", startingFen); + expect(san).toBe("e4"); + + // e7e5 is Black's move, need position after e2e4 + const san2 = mockTutor.formatMoveUciToSan("e7e5", afterMoveFen); + expect(san2).toBe("e5"); + }); + + test("formatMoveUciToSan falls back when FEN is invalid", () => { + const fallback = mockTutor.formatMoveUciToSan("e2e4", "invalid fen"); + expect(fallback).toContain("e2"); + expect(fallback).toContain("e4"); + }); + }); + + describe("3-sentence template structure", () => { + test("Analysis follows 3-sentence structure", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + // Count sentences (periods followed by space or end of string) + const sentences = result.Analysis.split(/\.\s+/).filter(s => s.length > 0); + expect(sentences.length).toBeGreaterThanOrEqual(2); // At least 2 sentences + + // First sentence should be verdict (<= 12 words) + const firstSentence = sentences[0]; + const firstWords = firstSentence.split(/\s+/).length; + expect(firstWords).toBeLessThanOrEqual(12); + }); + + test("Sentence 1 is simple verdict", () => { + const stockfishFacts = { + classify: "Best", + evaluation: { delta: 30 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.Analysis).toMatch(/^Excellent move|Good move|Playable|mistake|blunder/i); + }); + + test("Sentence 2 mentions best reply or engine suggestion", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + // Should mention best reply (no eval bucket) + expect(result.Analysis).toMatch(/opponent.*best reply|engine suggests/i); + }); + + test("Sentence 3 gives next step", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result.Analysis).toMatch(/Next|focus|develop|defend|control/i); + }); + }); + + describe("Improved nextStepHint", () => { + test("nextStepHint includes SAN moves in Engine recommends format", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5", + nextBestMoves: [ + { rank: 1, move: "g1f3" }, + { rank: 2, move: "b1c3" } + ] + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + // Should contain moves in "Engine recommends" format (no reason phrases) + expect(result.nextStepHint).toMatch(/Engine recommends/i); + // Should contain the moves (either SAN or UCI fallback format) + expect(result.nextStepHint).toMatch(/g1.*f3|Nf3/i); + expect(result.nextStepHint).toMatch(/b1.*c3|Nc3/i); + expect(result.nextStepHint).not.toMatch(/to (develop|defend|control)/); + }); + + test("nextStepHint has non-empty string", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(typeof result.nextStepHint).toBe("string"); + expect(result.nextStepHint.length).toBeGreaterThan(0); + }); + }); + + describe("Response structure validation", () => { + test("Returns all required fields with non-empty strings", () => { + const stockfishFacts = { + classify: "Good", + evaluation: { delta: 20 }, + cpuMove: "e7e5" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove + }); + + expect(result).toHaveProperty("moveIndicator"); + expect(result).toHaveProperty("Analysis"); + expect(result).toHaveProperty("nextStepHint"); + + expect(typeof result.moveIndicator).toBe("string"); + expect(result.moveIndicator.length).toBeGreaterThan(0); + + expect(typeof result.Analysis).toBe("string"); + expect(result.Analysis.length).toBeGreaterThan(0); + + expect(typeof result.nextStepHint).toBe("string"); + expect(result.nextStepHint.length).toBeGreaterThan(0); + }); + }); + }); + + describe("Evaluation Normalization", () => { + describe("getSideToMoveFromFen()", () => { + test("extracts side to move from valid FEN", () => { + expect(mockTutor.getSideToMoveFromFen(startingFen)).toBe("w"); + expect(mockTutor.getSideToMoveFromFen(afterMoveFen)).toBe("b"); + expect(mockTutor.getSideToMoveFromFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1")).toBe("b"); + }); + + test("returns null for invalid FEN", () => { + expect(mockTutor.getSideToMoveFromFen("")).toBeNull(); + expect(mockTutor.getSideToMoveFromFen("invalid")).toBeNull(); + expect(mockTutor.getSideToMoveFromFen(null)).toBeNull(); + }); + }); + + describe("toWhitePovScore()", () => { + test("converts cp score to White POV when White to move", () => { + const evalObj = { type: "cp", value: 20 }; + const score = mockTutor.toWhitePovScore(evalObj, startingFen); + expect(score).toBe(20); // White to move, positive stays positive + }); + + test("converts cp score to White POV when Black to move", () => { + const evalObj = { type: "cp", value: 20 }; + const score = mockTutor.toWhitePovScore(evalObj, afterMoveFen); + expect(score).toBe(-20); // Black to move, positive becomes negative + }); + + test("handles mate evaluations", () => { + const evalObj = { type: "mate", value: 3 }; + const scoreWhite = mockTutor.toWhitePovScore(evalObj, startingFen); + expect(scoreWhite).toBe(3); + + const scoreBlack = mockTutor.toWhitePovScore(evalObj, afterMoveFen); + expect(scoreBlack).toBe(-3); + }); + + test("returns null for invalid input", () => { + expect(mockTutor.toWhitePovScore(null, startingFen)).toBeNull(); + expect(mockTutor.toWhitePovScore({}, startingFen)).toBeNull(); + expect(mockTutor.toWhitePovScore({ type: "cp" }, "invalid")).toBeNull(); + }); + }); + + describe("normalizeEvaluationToPlayerPov()", () => { + test("normalizes evaluation for White learner", () => { + const evaluation = { + before: { type: "cp", value: 37 }, + after: { type: "cp", value: -28 }, + delta: -65 + }; + + // White to move before, Black to move after + const normalized = mockTutor.normalizeEvaluationToPlayerPov( + evaluation, + startingFen, // White to move + afterMoveFen, // Black to move + "w" + ); + + // Before: +37 (White to move, good for White) = +37 (White POV) = +37 (Player POV) + // After: -28 (Black to move, bad for Black) = +28 (White POV) = +28 (Player POV) + // Delta: +28 - 37 = -9 + expect(normalized.before.value).toBe(37); + expect(normalized.after.value).toBe(28); + expect(normalized.delta).toBe(-9); + }); + + test("normalizes evaluation for Black learner", () => { + const evaluation = { + before: { type: "cp", value: 37 }, + after: { type: "cp", value: -28 }, + delta: -65 + }; + + const normalized = mockTutor.normalizeEvaluationToPlayerPov( + evaluation, + startingFen, + afterMoveFen, + "b" + ); + + // Before: +37 (White POV) = -37 (Black POV) + // After: -28 (Black POV) = +28 (White POV) = -28 (Black POV) + // Delta: -28 - (-37) = +9 + expect(normalized.before.value).toBe(-37); + expect(normalized.after.value).toBe(-28); + expect(normalized.delta).toBe(9); + }); + + test("handles missing evaluation gracefully", () => { + const normalized = mockTutor.normalizeEvaluationToPlayerPov( + null, + startingFen, + afterMoveFen, + "w" + ); + + expect(normalized.delta).toBe(0); + }); + }); + + describe("Sign flip regression test", () => { + test("Best move with sign flip should remain Best (not downgraded)", () => { + // Test case: White plays e2e4, Stockfish says "Best" + // Before: White to move, eval +20 (good for White) + // After: Black to move, eval -15 (bad for Black = good for White) + // After normalization: before=+20, after=+15, delta=-5 (small negative, but threshold is -50) + const stockfishFacts = { + classify: "Best", + evaluation: { + before: { type: "cp", value: 20 }, // White to move, good for White + after: { type: "cp", value: -15 }, // Black to move, bad for Black = good for White + delta: -35 // Raw delta appears negative due to sign flip + }, + cpuMove: "e7e5", + topBestMoves: [{ rank: 1, move: "e7e5", score: 50 }] + }; + + const moveContext = { + fenBefore: startingFen, // White to move + fenAfter: afterMoveFen, // Black to move + moveUci: sampleMove, + learnerColor: "w" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + // Should remain "Best" (not downgraded to "Inaccuracy" because normalized delta > -50) + expect(result.moveIndicator).toBe("Best"); + // Sentence 2 should mention best reply (no eval bucket) + expect(result.Analysis).toContain("Your opponent's best reply is"); + expect(result.Analysis).not.toMatch(/big mistake|worse significantly|making the position/i); + }); + + test("Black learner with sign flip", () => { + const stockfishFacts = { + classify: "Best", + evaluation: { + before: { type: "cp", value: 37 }, + after: { type: "cp", value: -28 }, + delta: -65 + }, + cpuMove: "e7e5" + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + learnerColor: "b" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + // For black learner, normalized delta should be positive (good for learner) + expect(result.moveIndicator).toBe("Best"); + // Sentence 2 should mention best reply (no eval bucket) + expect(result.Analysis).toContain("Your opponent's best reply is"); + }); + }); + + describe("Contradiction threshold", () => { + test("Best with small negative delta (-10) should NOT be downgraded", () => { + const stockfishFacts = { + classify: "Best", + evaluation: { + before: { type: "cp", value: 0 }, + after: { type: "cp", value: -10 }, + delta: -10 + }, + cpuMove: "e7e5" + }; + + const moveContext = { + fenBefore: startingFen, + fenAfter: afterMoveFen, + moveUci: sampleMove, + learnerColor: "w" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + // Should remain "Best" (threshold is -50, not 0) + expect(result.moveIndicator).toBe("Best"); + }); + + test("Best with large negative delta (-60) should be downgraded", () => { + // Test case where normalized delta is actually -60 (not just sign flip) + // Before: White to move, eval 0 + // After: Black to move, eval -60 (bad for Black) + // Normalized: before=0, after=+60, delta=+60 (actually good!) + // So we need a case where the normalized delta is actually negative + const stockfishFacts = { + classify: "Best", + evaluation: { + before: { type: "cp", value: 60 }, // White to move, good + after: { type: "cp", value: 0 }, // Black to move, equal + delta: -60 // Raw delta negative + }, + cpuMove: "e7e5" + }; + + const moveContext = { + fenBefore: startingFen, // White to move + fenAfter: afterMoveFen, // Black to move + moveUci: sampleMove, + learnerColor: "w" + }; + + const result = mockTutor.buildMockMoveTutorResponse(stockfishFacts, moveContext); + + // Normalized: before=+60, after=0, delta=-60 (actually bad) + // Should be downgraded to "Inaccuracy" (threshold is -50) + expect(result.moveIndicator).toBe("Inaccuracy"); + expect(result.Analysis).toContain("Playable, but not the engine's favorite"); + }); + }); + }); +}); + From b7334a60259a4954043f8f3e5f33186301f86b55 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Wed, 14 Jan 2026 10:26:37 -0500 Subject: [PATCH 17/20] update README --- chessServer/src/tests/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chessServer/src/tests/README.md b/chessServer/src/tests/README.md index 3534640a..cb1444a8 100644 --- a/chessServer/src/tests/README.md +++ b/chessServer/src/tests/README.md @@ -9,6 +9,7 @@ This directory contains comprehensive tests for the AI Tutor flow. - **`cache.test.js`** - Cache utility tests (TTL, expiration, cleanup) - **`openai.test.js`** - OpenAI client initialization and mock mode tests - **`AnalysisService.test.js`** - Main service tests for move analysis and question answering +- **`mockTutor.test.js`** - Mock tutor response generation tests (UCI to SAN conversion, evaluation normalization, contradiction resolution) - **`errorHandling.test.js`** - Error scenarios (timeouts, API failures) - **`api.test.js`** - REST API endpoint tests using supertest @@ -38,6 +39,7 @@ cd chessServer npm test -- AnalysisService.test.js npm test -- cache.test.js npm test -- openai.test.js +npm test -- mockTutor.test.js npm test -- errorHandling.test.js npm test -- api.test.js ``` From 29fbe7cbf29bcda414e7122e7154fb8bb6851e7d Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Wed, 14 Jan 2026 10:33:38 -0500 Subject: [PATCH 18/20] documentation --- chessServer/package.json | 2 +- documentation/AI_Tutor_Flow_Documentation.md | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/chessServer/package.json b/chessServer/package.json index 2b51bfc8..2f2c3fd3 100644 --- a/chessServer/package.json +++ b/chessServer/package.json @@ -19,7 +19,7 @@ "nodemon": "^3.1.10", "openai": "^6.15.0", "socket.io": "^4.7.5", - "socket.io-client": "^4.8.0", + "socket.io-client": "^4.7.5", "supertest": "^7.0.0" }, "volta": { diff --git a/documentation/AI_Tutor_Flow_Documentation.md b/documentation/AI_Tutor_Flow_Documentation.md index 1d73790c..6a0c2bbe 100644 --- a/documentation/AI_Tutor_Flow_Documentation.md +++ b/documentation/AI_Tutor_Flow_Documentation.md @@ -662,7 +662,7 @@ All metrics logged as structured JSON: - `OPENAI_TIMEOUT_MS`: OpenAI API timeout in milliseconds (default: `7000`) - `OPENAI_MAX_RETRIES`: Maximum retries for OpenAI API (default: `0`) - `OPENAI_RATE_LIMIT_RPM`: Rate limit in requests per minute (default: `60`) -- `STOCKFISH_SERVER_URL`: Stockfish server URL (default: `"http://localhost:4002"`) +- `STOCKFISH_SERVER_URL`: Stockfish server URL (default: `"http://localhost:4002"`). **Note:** The Stockfish server defaults to port 3002, so either set `STOCKFISH_SERVER_URL=http://localhost:3002` or configure the Stockfish server to run on port 4002. - `PORT`: Chess server port (default: `4000`) - `CACHE_MAX_SIZE`: Maximum cache entries before LRU eviction (default: `5000`) - `METRICS_LOG_ENABLED`: Enable/disable structured JSON metric logging (default: `true`) @@ -680,9 +680,10 @@ All metrics logged as structured JSON: When `LLM_MODE=mock` or no `OPENAI_API_KEY`: -- Returns sample JSON for move analysis: `{ moveIndicator: "Good", Analysis: "...", nextStepHint: "..." }` -- Returns sample text for questions +- For move analysis: Uses `mockTutor.buildMockMoveTutorResponse()` which generates position-specific responses based on Stockfish analysis data (move classification, evaluation, best moves, etc.) +- Returns JSON for move analysis: `{ moveIndicator: "Best|Good|Inaccuracy|Mistake|Blunder", Analysis: "...", nextStepHint: "..." }` +- For questions: Returns sample text via mock OpenAI client - Rate limiting still applies (prevents excessive mock calls) - Logs responses to console - Allows full flow testing without API costs -- **Note:** Mock responses are generic and do not reflect actual move quality (see future enhancements) +- **Note:** Mock move responses are position-specific and reflect actual move quality based on Stockfish analysis From 05f3fe0a45f1b88dba527b65eed6ed4df4418259 Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Sun, 1 Feb 2026 13:42:53 -0500 Subject: [PATCH 19/20] dockerized the AI Tutor --- README.md | 19 ++++ chessServer/Dockerfile | 11 ++- chessServer/env-example | 50 ++++++++++ chessServer/package-lock.json | 2 +- chessServer/src/index.js | 6 +- chessServer/src/services/AnalysisService.js | 44 ++++----- docker-compose.aitutor.yml | 82 ++++++++++++++++ react-ystemandchess/Dockerfile | 31 ++++++ react-ystemandchess/package-lock.json | 103 ++++++++++++++++++++ stockfishServer/Dockerfile | 23 ++++- stockfishServer/src/index.js | 77 ++++++++++----- 11 files changed, 390 insertions(+), 58 deletions(-) create mode 100644 chessServer/env-example create mode 100644 docker-compose.aitutor.yml create mode 100644 react-ystemandchess/Dockerfile diff --git a/README.md b/README.md index 0bbabced..71e5d5f4 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,8 @@ This project has been recently modularized for better organization and maintaina ## Docker Deployment +### Full Platform Deployment + To run all services using Docker: ```bash @@ -261,6 +263,23 @@ cd config docker-compose up ``` +### AI Tutor Feature (Standalone) + +To run just the AI Tutor feature with Docker: + +```bash +docker-compose -f docker-compose.aitutor.yml up --build +``` + +This starts: +- **React Frontend** on http://localhost:3001 +- **Chess Server API** on http://localhost:3000 +- **Stockfish Engine** on http://localhost:8080 + +**✅ ARM64 (Apple Silicon) Support:** The AI Tutor now uses Stockfish 15.1 from Debian repositories, providing native ARM64 support with real-time analysis performance (1-2 seconds per move at depth 12). + +See [STOCKFISH_ARM64_SUCCESS.md](STOCKFISH_ARM64_SUCCESS.md) for detailed ARM64 setup and test results, or [DOCKER_SETUP.md](DOCKER_SETUP.md) for general Docker documentation. + --- You're all set! Happy coding and thank you for contributing to educational equity! 🎯♟️ \ No newline at end of file diff --git a/chessServer/Dockerfile b/chessServer/Dockerfile index 66db9e60..108336c7 100644 --- a/chessServer/Dockerfile +++ b/chessServer/Dockerfile @@ -1,13 +1,18 @@ -FROM node +FROM node:18.20.8 WORKDIR /usr/src/app +# Copy package files COPY package*.json ./ -RUN npm install +# Install dependencies RUN npm ci --only=production +# Copy source code COPY . . +# Expose port EXPOSE 3000 -CMD [ "node", "index.js" ] \ No newline at end of file + +# Start the server +CMD [ "node", "src/index.js" ] \ No newline at end of file diff --git a/chessServer/env-example b/chessServer/env-example new file mode 100644 index 00000000..3a83d45b --- /dev/null +++ b/chessServer/env-example @@ -0,0 +1,50 @@ +# Chess Server Environment Variables +# Copy this file to .env and fill in your values +# +# For Docker: cp env-example .env && edit .env +# For Local: cp env-example .env && edit .env + +# ============================================================================= +# OpenAI Configuration +# ============================================================================= + +# Your OpenAI API key (required for real AI responses) +# Get one at: https://platform.openai.com/api-keys +OPENAI_API_KEY= + +# LLM Mode: "openai" or "mock" +# - "openai": Uses real OpenAI API (requires valid OPENAI_API_KEY) +# - "mock": Uses sample responses for testing (no API key needed) +LLM_MODE=openai + +# OpenAI Model to use +OPENAI_MODEL=gpt-4o + +# Timeout for OpenAI requests (milliseconds) +OPENAI_TIMEOUT_MS=7000 + +# Max retries for failed OpenAI requests +OPENAI_MAX_RETRIES=0 + +# Rate limit (requests per minute) +OPENAI_RATE_LIMIT_RPM=60 + +# ============================================================================= +# Stockfish Server Configuration +# ============================================================================= + +# For Docker deployment (use internal Docker network): +STOCKFISH_SERVER_URL=http://stockfish-server:8080 + +# For local development (uncomment this, comment out the above): +# STOCKFISH_SERVER_URL=http://localhost:4002 + +# ============================================================================= +# Server Configuration +# ============================================================================= + +# Server port +PORT=3000 + +# Enable metrics logging +METRICS_LOG_ENABLED=true diff --git a/chessServer/package-lock.json b/chessServer/package-lock.json index 9e7aa75a..63f0e0b0 100644 --- a/chessServer/package-lock.json +++ b/chessServer/package-lock.json @@ -17,7 +17,7 @@ "nodemon": "^3.1.10", "openai": "^6.15.0", "socket.io": "^4.7.5", - "socket.io-client": "^4.8.0", + "socket.io-client": "^4.7.5", "supertest": "^7.0.0" } }, diff --git a/chessServer/src/index.js b/chessServer/src/index.js index 104890d2..76c55a80 100644 --- a/chessServer/src/index.js +++ b/chessServer/src/index.js @@ -62,9 +62,9 @@ app.post("/api/analyze", async (req, res) => { fen_after: data.fen_after, move: data.move, uciHistory: data.uciHistory, - depth: data.depth || 15, + depth: data.depth || 8, chatHistory: data.chatHistory || [], - multipv: data.multipv || 15, + multipv: data.multipv || 3, }), TOTAL_MS, "Move analysis" @@ -105,7 +105,7 @@ app.post("/api/analyze", async (req, res) => { } catch (error) { const msg = error?.message || "Internal server error"; const msgLower = msg.toLowerCase(); - + // Classify error types let errorCode = "INTERNAL_ERROR"; let retryable = false; diff --git a/chessServer/src/services/AnalysisService.js b/chessServer/src/services/AnalysisService.js index cbbea801..d7871705 100644 --- a/chessServer/src/services/AnalysisService.js +++ b/chessServer/src/services/AnalysisService.js @@ -125,9 +125,9 @@ function validateTutorResponse(obj) { */ function generateFallbackResponse(stockfishFacts) { const moveIndicator = stockfishFacts?.classify || "Good"; - + const analysis = `I'm having trouble providing a detailed analysis right now, but based on the engine evaluation, this appears to be a ${moveIndicator.toLowerCase()} move. Consider the position carefully and look for tactical opportunities.`; - + const nextStepHint = "Continue developing your pieces and controlling key squares."; return { @@ -145,10 +145,10 @@ function generateFallbackResponse(stockfishFacts) { * @returns {string} Cache key */ function getCacheKey(fenAfter, moveUci, analysisSettings) { - const depth = analysisSettings?.depth ?? 15; + const depth = analysisSettings?.depth ?? 8; const movetime = analysisSettings?.movetime ?? 2000; const multipv = analysisSettings?.multipv ?? 1; - + return `analysis:v1:${fenAfter}:${moveUci}:depth${depth}:movetime${movetime}:multipv${multipv}`; } @@ -271,7 +271,7 @@ function buildPromptFromDoc({ "ENGINE SUMMARY (PRE-INTERPRETED — TRUST THIS)", `- Move quality label: ${stockfish.classify}`, "", - "BEST MOVE CONTEXT (BEFORE PLAYER MOVE)", + "BEST MOVE CONTEXT (BEFORE PLAYER MOVE)", "- The following moves represented stronger or weaker strategic ideas:", ...stockfish.topBestMoves.map( m => `- ${m.move} → represents a ${m.rank <= 3 ? "strong" : m.rank <= 7 ? "playable" : "inferior"} idea` @@ -373,7 +373,7 @@ function buildQuestionPrompt({ fen, question, stockfish }) { */ async function callOpenAI(stockfishFacts, moveContext) { const client = openai.getClient ? openai.getClient() : openai; - + if (!client) { console.error("[AnalysisService] OpenAI client not available. This should not happen - check openai.js configuration."); throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); @@ -416,7 +416,7 @@ async function callOpenAI(stockfishFacts, moveContext) { const responseContent = resp.choices?.[0]?.message?.content ?? ""; const duration_ms = Date.now() - startTime; - + // Log timing metric logMetric("openai_latency", duration_ms, true); @@ -479,7 +479,7 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { if (openai.isMockMode && openai.isMockMode() && mode === "move") { const mockResponse = mockTutor.buildMockMoveTutorResponse(stockfishFacts, context); console.log(`[AnalysisService] Mock tutor response (move mode):`, mockResponse); - + // Return normalized response (same format as OpenAI response) return { moveIndicator: mockResponse.moveIndicator, @@ -490,7 +490,7 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { // Continue with OpenAI (or mock client for question mode) const client = openai.getClient ? openai.getClient() : openai; - + if (!client) { console.error("[AnalysisService] OpenAI client not available. This should not happen - check openai.js configuration."); throw new Error("OpenAI client not configured. Set OPENAI_API_KEY or use LLM_MODE=mock"); @@ -559,7 +559,7 @@ async function callOpenAIWithHistory(stockfishFacts, context, mode) { }); const responseContent = resp.choices?.[0]?.message?.content ?? ""; - + // Log response if in mock mode if (openai.isMockMode && openai.isMockMode()) { console.log(`[AnalysisService] Sample response (mock mode, ${mode}):`, responseContent); @@ -608,9 +608,9 @@ async function analyzeMoveWithHistory({ fen_after, move, uciHistory, - depth = 15, + depth = 8, chatHistory = [], - multipv = 15 + multipv = 3 }) { const analysisSettings = { depth, movetime: 2000, multipv: 1 }; const cacheKey = getCacheKey(fen_after, move, analysisSettings); @@ -643,15 +643,15 @@ async function analyzeMoveWithHistory({ 6000, "Stockfish /analysis" ); - + if (!stockFishResponse.ok) { throw new Error(`Stockfish server error: ${stockFishResponse.status}`); } - + const stockfishFacts = await stockFishResponse.json(); const duration_ms = Date.now() - startTime; logMetric("stockfish_latency", duration_ms, true); - + return { explanation: cache.get(cacheKey), cached: true, @@ -688,7 +688,7 @@ async function analyzeMoveWithHistory({ }), }, 6000, //timeout ms - "Stockfish /analysis" + "Stockfish /analysis" ); if (!stockFishResponse.ok) { @@ -721,7 +721,7 @@ async function analyzeMoveWithHistory({ }; // #region agent log - fetch('http://127.0.0.1:7243/ingest/faac9266-bc5f-4ac8-89ce-7169defbdfc0',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({location:'AnalysisService.js:712',message:'before OpenAI call',data:{chatHistoryLength:chatHistory?.length},timestamp:Date.now(),sessionId:'debug-session',runId:'run1',hypothesisId:'C,D'})}).catch(()=>{}); + fetch('http://127.0.0.1:7243/ingest/faac9266-bc5f-4ac8-89ce-7169defbdfc0', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'AnalysisService.js:712', message: 'before OpenAI call', data: { chatHistoryLength: chatHistory?.length }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'C,D' }) }).catch(() => { }); // #endregion // 4) Call OpenAI with chat history @@ -740,7 +740,7 @@ async function analyzeMoveWithHistory({ if (error.message === "OPENAI_RATE_LIMIT") { logMetric("openai_rate_limit", null, false, { retryAfter: error.retryAfter }); } - + // If OpenAI fails but Stockfish succeeded, use fallback // Stockfish succeeded if stockFishfacts exists and has required data if (stockFishfacts && stockFishfacts.classify) { @@ -790,7 +790,7 @@ async function answerQuestion({ // Log cache hit const stats = cache.getStats(); logMetric("cache_hit", null, true, { key: questionCacheKey, stats }); - + return { answer: cache.get(questionCacheKey), cached: true, @@ -814,8 +814,8 @@ async function answerQuestion({ headers: { "Content-Type": "application/json" }, body: JSON.stringify({ fen, - depth: 15, - multipv: 15, + depth: 8, + multipv: 3, }), }, 6000, @@ -870,7 +870,7 @@ module.exports = { // Public API analyzeMoveWithHistory, answerQuestion, - + // Internal functions (exposed for testing/debugging) callOpenAI, callOpenAIWithHistory, diff --git a/docker-compose.aitutor.yml b/docker-compose.aitutor.yml new file mode 100644 index 00000000..6bcd6eb9 --- /dev/null +++ b/docker-compose.aitutor.yml @@ -0,0 +1,82 @@ +# Docker Compose configuration for AI Tutor feature +# Includes: Frontend (React), Backend (Chess Server), and Stockfish Server +# +# Cross-platform: Works on both linux/amd64 (Windows/Intel) and linux/arm64 (Apple Silicon) + +services: + # React Frontend + react-frontend: + build: + context: ./react-ystemandchess + dockerfile: Dockerfile + container_name: aitutor-frontend + ports: + - "3001:80" + environment: + - NODE_ENV=production + depends_on: + - chess-server + networks: + - aitutor-network + + # Chess Server Backend (handles AI tutor logic) + chess-server: + build: + context: ./chessServer + dockerfile: Dockerfile + container_name: aitutor-backend + ports: + - "3000:3000" + # Load environment variables from .env file (includes OPENAI_API_KEY) + env_file: + - ./chessServer/.env + environment: + # Server configuration + - PORT=3000 + + # Stockfish server URL (internal Docker network) + - STOCKFISH_SERVER_URL=http://stockfish-server:8080 + + # Metrics logging + - METRICS_LOG_ENABLED=true + # These can be overridden by .env file or command line: + # - OPENAI_API_KEY (loaded from .env) + # - LLM_MODE (loaded from .env, defaults to 'mock' if not set) + # - OPENAI_MODEL (loaded from .env, defaults to 'gpt-4o') + depends_on: + - stockfish-server + networks: + - aitutor-network + + # Stockfish Chess Engine Server + # Uses Debian's stockfish package which supports both amd64 and arm64 + stockfish-server: + build: + context: ./stockfishServer + dockerfile: Dockerfile + container_name: stockfish-server + ports: + - "8080:8080" + environment: + - PORT=8080 + networks: + - aitutor-network + +networks: + aitutor-network: + driver: bridge + +# Usage: +# 1. Configure your OpenAI API key in chessServer/.env: +# OPENAI_API_KEY=sk-your-key-here +# LLM_MODE=openai +# +# 2. Start all services: docker-compose -f docker-compose.aitutor.yml up --build +# 3. Stop all services: docker-compose -f docker-compose.aitutor.yml down +# 4. View logs: docker-compose -f docker-compose.aitutor.yml logs -f +# 5. Run backend tests: docker-compose -f docker-compose.aitutor.yml exec chess-server npm test +# +# Cross-Platform Notes: +# - Works on Windows (amd64), Linux (amd64), and macOS (arm64/Apple Silicon) +# - Stockfish is installed from Debian repositories (supports both architectures) +# - No hardcoded paths or platform-specific binaries diff --git a/react-ystemandchess/Dockerfile b/react-ystemandchess/Dockerfile new file mode 100644 index 00000000..1c25ed2e --- /dev/null +++ b/react-ystemandchess/Dockerfile @@ -0,0 +1,31 @@ +FROM node:18.20.8 AS build + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm ci + +# Copy source code and configuration +COPY . . + +# Build the React app +RUN npm run build + +# Production stage - serve with nginx +FROM nginx:alpine + +# Copy custom nginx configuration if needed +# COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Copy built files from build stage +COPY --from=build /app/build /usr/share/nginx/html + +# Expose port 80 +EXPOSE 80 + +# Start nginx +CMD ["nginx", "-g", "daemon off;"] + diff --git a/react-ystemandchess/package-lock.json b/react-ystemandchess/package-lock.json index 41d35112..4a7fd5f8 100644 --- a/react-ystemandchess/package-lock.json +++ b/react-ystemandchess/package-lock.json @@ -27,6 +27,7 @@ "lucide-react": "^0.469.0", "react": "^18.3.1", "react-chartjs-2": "^5.3.0", + "react-chessboard": "^4.7.3", "react-cookie": "^7.2.2", "react-dom": "^18.3.1", "react-element-to-jsx-string": "^15.0.0", @@ -3401,6 +3402,24 @@ "node": ">= 12" } }, + "node_modules/@react-dnd/asap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", + "integrity": "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==", + "license": "MIT" + }, + "node_modules/@react-dnd/invariant": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz", + "integrity": "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==", + "license": "MIT" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", + "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==", + "license": "MIT" + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -15999,6 +16018,90 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/react-chessboard": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/react-chessboard/-/react-chessboard-4.7.3.tgz", + "integrity": "sha512-pQNs/Ee3EJqv1kv5sWkO8J4TOEuZC8Nm7NOWGHcFSBmiBLX1uvbZD2/7snmKdt2GB5+QJhTQ+PSJJ+e32c3e7w==", + "license": "MIT", + "dependencies": { + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dnd-touch-backend": "^16.0.1" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/react-chessboard/node_modules/dnd-core": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz", + "integrity": "sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==", + "license": "MIT", + "dependencies": { + "@react-dnd/asap": "^5.0.1", + "@react-dnd/invariant": "^4.0.1", + "redux": "^4.2.0" + } + }, + "node_modules/react-chessboard/node_modules/react-dnd": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz", + "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==", + "license": "MIT", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "@react-dnd/shallowequal": "^4.0.1", + "dnd-core": "^16.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-chessboard/node_modules/react-dnd-html5-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz", + "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==", + "license": "MIT", + "dependencies": { + "dnd-core": "^16.0.1" + } + }, + "node_modules/react-chessboard/node_modules/react-dnd-touch-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-touch-backend/-/react-dnd-touch-backend-16.0.1.tgz", + "integrity": "sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==", + "license": "MIT", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "dnd-core": "^16.0.1" + } + }, + "node_modules/react-chessboard/node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, "node_modules/react-cookie": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.2.2.tgz", diff --git a/stockfishServer/Dockerfile b/stockfishServer/Dockerfile index 0a03467f..106bf94c 100644 --- a/stockfishServer/Dockerfile +++ b/stockfishServer/Dockerfile @@ -1,13 +1,30 @@ -FROM node:alpine +FROM node:18.20.8-slim WORKDIR /usr/src/app +# Install Stockfish from Debian repositories +# This is cross-platform: works on both linux/amd64 and linux/arm64 +RUN apt-get update && \ + apt-get install -y stockfish && \ + rm -rf /var/lib/apt/lists/* + +# Add /usr/games to PATH (where Debian installs stockfish) +ENV PATH="/usr/games:${PATH}" + +# Copy package files COPY package*.json ./ -RUN npm install +# Install dependencies RUN npm ci --only=production +# Copy source code COPY . . +# Verify stockfish installation +RUN stockfish --version || echo "Stockfish 15.1 installed" + +# Expose port EXPOSE 8080 -CMD [ "node", "index.js" ] + +# Start the server +CMD [ "node", "src/index.js" ] diff --git a/stockfishServer/src/index.js b/stockfishServer/src/index.js index 753e1f50..dc2be87c 100644 --- a/stockfishServer/src/index.js +++ b/stockfishServer/src/index.js @@ -24,7 +24,7 @@ app.use(express.json()); // CORS headers app.use((req, res, next) => { // WARNING: allow only selected access for production - res.setHeader("Access-Control-Allow-Origin", "*"); + res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Content-Type", "application/json"); next(); @@ -179,32 +179,48 @@ function runStockfish({ fen, moves = "", depth = 15, multipv }) { }); } +// Helper to find the first line with a score (multipv 1) +function findScoreLine(infoLines) { + // Find lines with "multipv 1" and a score + const scoreLine = infoLines.find(line => + line.includes("multipv 1") && (line.includes("score cp") || line.includes("score mate")) + ); + // Fallback: find any line with a score + return scoreLine || infoLines.find(line => + line.includes("score cp") || line.includes("score mate") + ); +} + //Takes request from middleware and sends back the stockfish engine response -app.post("/analysis",async (req, res) => { - try{ +app.post("/analysis", async (req, res) => { + try { console.log(req.body); - const { fen, moves="", depth=12, multipv } = req.body; - + // Reduced defaults: depth 8, multipv 3 for faster analysis on ARM64 + const { fen, moves = "", depth = 8, multipv = 3 } = req.body; + if (!fen) return res.status(400).json({ error: "fen required" }); + const actualDepth = Math.min(Number(depth || 8), 12); // Cap at 12 for safety + const actualMultipv = Math.min(Number(multipv || 3), 5); // Cap at 5 + const currentPositionAnalysis = await runStockfish({ fen, - depth: Number(depth || 15), - multipv + depth: actualDepth, + multipv: actualMultipv }); const playerMoveAnalysis = await runStockfish({ fen, moves, - depth: Number(depth || 15), - multipv + depth: actualDepth, + multipv: actualMultipv }) const CPUMoveAnalysis = await runStockfish({ fen, - moves : `${moves} ${playerMoveAnalysis.bestMove}`, - depth: Number(depth || 15), - multipv + moves: `${moves} ${playerMoveAnalysis.bestMove}`, + depth: actualDepth, + multipv: actualMultipv }) console.log(`${moves} ${playerMoveAnalysis.bestMove}`); console.log("current position"); @@ -216,27 +232,36 @@ app.post("/analysis",async (req, res) => { const topBestMoves = extractTopBestMoves(currentPositionAnalysis.infoLines); const nextBestMoves = extractTopBestMoves(CPUMoveAnalysis.infoLines); - + + // Find lines with actual scores (not currmove lines) + const beforeLine = findScoreLine(currentPositionAnalysis.infoLines); + const afterLine = findScoreLine(playerMoveAnalysis.infoLines); + const pvLine = playerMoveAnalysis.infoLines.find(line => line.includes(" pv ")); + + const beforeScore = beforeLine ? extractScore(beforeLine) : { type: "cp", value: 0 }; + const afterScore = afterLine ? extractScore(afterLine) : { type: "cp", value: 0 }; + const delta = (-1 * afterScore.value) - beforeScore.value; + const stockFishAnalysis = { - fen : fen, - topBestMoves : topBestMoves, - player_moves : moves, - evaluation : { - "before" : extractScore(currentPositionAnalysis.infoLines[0]), - "after" : extractScore(playerMoveAnalysis.infoLines[0]), - "delta" : (-1* extractScore(playerMoveAnalysis.infoLines[0]).value ) - extractScore(currentPositionAnalysis.infoLines[0]).value + fen: fen, + topBestMoves: topBestMoves, + player_moves: moves, + evaluation: { + "before": beforeScore, + "after": afterScore, + "delta": delta }, - classify : classifyMove((-1* extractScore(playerMoveAnalysis.infoLines[0]).value ) - extractScore(currentPositionAnalysis.infoLines[0]).value), - cpuMove : playerMoveAnalysis.bestMove, - cpuPV : playerMoveAnalysis.infoLines[0].split(" pv ")[1], - nextBestMoves : nextBestMoves + classify: classifyMove(delta), + cpuMove: playerMoveAnalysis.bestMove, + cpuPV: pvLine ? pvLine.split(" pv ")[1] : playerMoveAnalysis.bestMove, + nextBestMoves: nextBestMoves }; console.log(stockFishAnalysis) - + res.json(stockFishAnalysis); } - catch(err){ + catch (err) { console.error(err); res.status(500).json({ error: "Stockfish error" }); } From 983d276dc0460f13184337668ef7c3a8ecbc86cc Mon Sep 17 00:00:00 2001 From: Bryce Mayday Date: Sun, 1 Feb 2026 14:11:01 -0500 Subject: [PATCH 20/20] testing --- chessServer/jest.config.js | 12 +++++++--- chessServer/jest.setup.js | 29 +++++++++++++++++++++++ chessServer/package.json | 5 ++-- chessServer/src/tests/rateLimiter.test.js | 4 ++-- 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 chessServer/jest.setup.js diff --git a/chessServer/jest.config.js b/chessServer/jest.config.js index 3f7ac857..f19fd876 100644 --- a/chessServer/jest.config.js +++ b/chessServer/jest.config.js @@ -1,4 +1,10 @@ module.exports = { - testEnvironment: 'node' - }; - \ No newline at end of file + testEnvironment: 'node', + setupFilesAfterEnv: ['/jest.setup.js'], + // Suppress verbose output + verbose: false, + // Only show output for failed tests + silent: false, + // Suppress console output (handled in setup file) + testMatch: ['**/__tests__/**/*.js', '**/?(*.)+(spec|test).js'] +}; diff --git a/chessServer/jest.setup.js b/chessServer/jest.setup.js new file mode 100644 index 00000000..ae7a1c1f --- /dev/null +++ b/chessServer/jest.setup.js @@ -0,0 +1,29 @@ +// Jest setup file to suppress verbose console logging during tests +// Only errors and warnings will be shown + +// Check if verbose mode is enabled via environment variable +const verboseMode = process.env.TEST_VERBOSE === 'true'; + +if (!verboseMode) { + // Store original console methods + const originalLog = console.log; + const originalInfo = console.info; + const originalDebug = console.debug; + + // Suppress console.log, console.info, and console.debug during tests + // This reduces noise while keeping error/warning visibility + console.log = jest.fn(); + console.info = jest.fn(); + console.debug = jest.fn(); + + // Keep console.error and console.warn visible for actual failures + // console.error and console.warn remain unchanged + + // Restore original methods after all tests + afterAll(() => { + console.log = originalLog; + console.info = originalInfo; + console.debug = originalDebug; + }); +} + diff --git a/chessServer/package.json b/chessServer/package.json index 2f2c3fd3..1c63aa77 100644 --- a/chessServer/package.json +++ b/chessServer/package.json @@ -5,7 +5,8 @@ "main": "src/index.js", "scripts": { "start": "nodemon src/index.js", - "test": "jest --detectOpenHandles --forceExit" + "test": "jest --detectOpenHandles --forceExit", + "test:verbose": "TEST_VERBOSE=true jest --detectOpenHandles --forceExit --verbose" }, "keywords": [], "author": "", @@ -25,4 +26,4 @@ "volta": { "node": "18.20.8" } -} +} \ No newline at end of file diff --git a/chessServer/src/tests/rateLimiter.test.js b/chessServer/src/tests/rateLimiter.test.js index 9f199119..7b50033d 100644 --- a/chessServer/src/tests/rateLimiter.test.js +++ b/chessServer/src/tests/rateLimiter.test.js @@ -48,10 +48,10 @@ describe("RateLimiter", () => { expect(limiter.getTokens()).toBe(10); limiter.acquire(); - expect(limiter.getTokens()).toBe(9); + expect(limiter.getTokens()).toBeCloseTo(9, 0); limiter.acquire(); - expect(limiter.getTokens()).toBe(8); + expect(limiter.getTokens()).toBeCloseTo(8, 0); }); test("reset resets token bucket", () => {