From 63f13ff045862b46db63857b10b97418a786c6de Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Tue, 13 Feb 2024 12:31:40 -0800 Subject: [PATCH 01/20] Upgrade to python 3.11 --- button.py | 6 +++--- jeoparpy/game/__init__.py | 4 ++-- jeoparpy/game/gamedata.py | 4 ++-- jeoparpy/game/gamestate.py | 4 ++-- jeoparpy/main.py | 8 ++++---- jeoparpy/selectMenu.py | 6 +++--- jeoparpy/ui/__init__.py | 10 +++++----- jeoparpy/ui/audioplayer.py | 2 +- jeoparpy/ui/categoryscroll.py | 8 ++++---- jeoparpy/ui/congrats.py | 6 +++--- jeoparpy/ui/controller.py | 6 +++--- jeoparpy/ui/credits.py | 6 +++--- jeoparpy/ui/intro.py | 6 +++--- jeoparpy/ui/maingame/__init__.py | 8 ++++---- jeoparpy/ui/maingame/clue.py | 4 ++-- jeoparpy/ui/maingame/gameboard.py | 2 +- jeoparpy/ui/maingame/podiapanel.py | 4 ++-- jeoparpy/ui/maingame/podium.py | 4 ++-- requirements.txt | 6 ++++-- start.py | 2 +- 20 files changed, 54 insertions(+), 52 deletions(-) diff --git a/button.py b/button.py index 043d4e9..8bedf37 100644 --- a/button.py +++ b/button.py @@ -11,8 +11,8 @@ def __init__(self): #Setup pins and board gpio.setmode(gpio.BCM) gpio.setup(22, gpio.IN, pull_up_down=gpio.PUD_UP) - gpio.setup(4, gpio.IN, pull_up_down=gpio.PUD_UP) - gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_UP) + gpio.setup(4, gpio.IN, pull_up_down=gpio.PUD_UP) + gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_UP) #Put pins in variables self.center_button = 22 @@ -92,4 +92,4 @@ def check(self): while True: test.first = '' winner = test.poll() - print winner + print(winner) diff --git a/jeoparpy/game/__init__.py b/jeoparpy/game/__init__.py index 85bf85c..f66ed7b 100644 --- a/jeoparpy/game/__init__.py +++ b/jeoparpy/game/__init__.py @@ -15,5 +15,5 @@ See the "Customization" section of the README for details on how to alter the resource files from which the game data is built. """ -from gamedata import GameData -from gamestate import JeopGameState +from .gamedata import GameData +from .gamestate import JeopGameState diff --git a/jeoparpy/game/gamedata.py b/jeoparpy/game/gamedata.py index 3d0a689..e3f0a28 100644 --- a/jeoparpy/game/gamedata.py +++ b/jeoparpy/game/gamedata.py @@ -14,8 +14,8 @@ """ from sys import stderr -from constants import AMOUNTS_PATH, CATEGORIES_PATH, CLUES_PATH, PLAYERS_PATH -from jeopplayer import JeopPlayer +from .constants import AMOUNTS_PATH, CATEGORIES_PATH, CLUES_PATH, PLAYERS_PATH +from .jeopplayer import JeopPlayer from ..config import SUBTRACT_ON_INCORRECT from ..util import get_stripped_nonempty_file_lines, to_numeric diff --git a/jeoparpy/game/gamestate.py b/jeoparpy/game/gamestate.py index a6d3487..a104eac 100644 --- a/jeoparpy/game/gamestate.py +++ b/jeoparpy/game/gamestate.py @@ -104,7 +104,7 @@ def set(self, state, **kwargs): self.kwargs.update(kwargs) if DEBUG and self.kwargs: - print 'State args set: {0}'.format(self.kwargs) + print('State args set: {0}'.format(self.kwargs)) def _verify_transition(self, newState): """ @@ -145,7 +145,7 @@ def state(self, val): self.kwargs = {} if DEBUG: - print "State change: {0}".format(self) + print("State change: {0}".format(self)) class JeopGameState(GameState): """ diff --git a/jeoparpy/main.py b/jeoparpy/main.py index 94288e1..57d3cb7 100644 --- a/jeoparpy/main.py +++ b/jeoparpy/main.py @@ -23,10 +23,10 @@ import os import sys -from config import FPS_LIMIT, FULLSCREEN, SUBTRACT_ON_INCORRECT, SCREEN_SIZE -from constants import ANIMATIONEND, ANSWER_TIMEOUT, AUDIOEND, SKIP_INTRO_FLAG -from game import GameData, JeopGameState -from ui import Controller, do_congrats, do_credits, do_intro, do_scroll +from .config import FPS_LIMIT, FULLSCREEN, SUBTRACT_ON_INCORRECT, SCREEN_SIZE +from .constants import ANIMATIONEND, ANSWER_TIMEOUT, AUDIOEND, SKIP_INTRO_FLAG +from .game import GameData, JeopGameState +from .ui import Controller, do_congrats, do_credits, do_intro, do_scroll import button EVENTS_ALLOWED = (ANIMATIONEND, ANSWER_TIMEOUT, diff --git a/jeoparpy/selectMenu.py b/jeoparpy/selectMenu.py index 180f6d4..bfee40c 100644 --- a/jeoparpy/selectMenu.py +++ b/jeoparpy/selectMenu.py @@ -3,8 +3,8 @@ import pygame, sys, os from pygame.locals import * -from constants import ROOT_PATH -from config import DRIVE +from .constants import ROOT_PATH +from .config import DRIVE pygame.init() @@ -62,7 +62,7 @@ def get_options(self): if self.games > 4: self.games = 4 if self.games < 1: - print 'You must have a game in the /games directory!' + print('You must have a game in the /games directory!') pygame.quit() sys.exit() diff --git a/jeoparpy/ui/__init__.py b/jeoparpy/ui/__init__.py index 3af78b7..6aa59c6 100644 --- a/jeoparpy/ui/__init__.py +++ b/jeoparpy/ui/__init__.py @@ -16,8 +16,8 @@ CUSTOMIZATION: See instructions in config.py and resmaps.py. """ -from categoryscroll import do_scroll -from congrats import do_congrats -from controller import Controller -from credits import do_credits -from intro import do_intro +from .categoryscroll import do_scroll +from .congrats import do_congrats +from .controller import Controller +from .credits import do_credits +from .intro import do_intro diff --git a/jeoparpy/ui/audioplayer.py b/jeoparpy/ui/audioplayer.py index e182650..6ad82ec 100644 --- a/jeoparpy/ui/audioplayer.py +++ b/jeoparpy/ui/audioplayer.py @@ -1,6 +1,6 @@ import pygame -from resmaps import SOUNDS, CLUE_READS +from .resmaps import SOUNDS, CLUE_READS ############################################################################### class AudioPlayer(object): diff --git a/jeoparpy/ui/categoryscroll.py b/jeoparpy/ui/categoryscroll.py index 79a37b6..aaf4f56 100644 --- a/jeoparpy/ui/categoryscroll.py +++ b/jeoparpy/ui/categoryscroll.py @@ -20,10 +20,10 @@ import pygame -from config import CATEGORY_HOLD_TIME -from constants import JEOP_BLUE -from resmaps import FONTS -from util import (autofit_text, BorderedBox, draw_centered_textblock, +from .config import CATEGORY_HOLD_TIME +from .constants import JEOP_BLUE +from .resmaps import FONTS +from .util import (autofit_text, BorderedBox, draw_centered_textblock, get_anim_data, shadow_text) from ..config import FPS_LIMIT from ..util import chunker diff --git a/jeoparpy/ui/congrats.py b/jeoparpy/ui/congrats.py index af7ff89..ee55733 100644 --- a/jeoparpy/ui/congrats.py +++ b/jeoparpy/ui/congrats.py @@ -19,9 +19,9 @@ """ import pygame -from constants import JEOP_BLUE -from resmaps import FONTS -from util import scale +from .constants import JEOP_BLUE +from .resmaps import FONTS +from .util import scale def do_congrats(screen, clock, winners, audioPlayer): """ diff --git a/jeoparpy/ui/controller.py b/jeoparpy/ui/controller.py index 5578ac1..cd01a51 100644 --- a/jeoparpy/ui/controller.py +++ b/jeoparpy/ui/controller.py @@ -15,8 +15,8 @@ """ import pygame -from audioplayer import JeopAudioPlayer -from maingame import Clue, GameBoard, OpenClueAnimation, PodiaPanel +from .audioplayer import JeopAudioPlayer +from .maingame import Clue, GameBoard, OpenClueAnimation, PodiaPanel from ..config import DEBUG from ..constants import AUDIOEND @@ -68,7 +68,7 @@ def draw(self, screen): for sfc in self._sfcs: if sfc.dirty: if DEBUG: - print 'draw %s' % type(sfc).__name__ + print('draw %s' % type(sfc).__name__) if isinstance(sfc, pygame.sprite.Sprite): screen.blit(sfc.image, sfc.rect) diff --git a/jeoparpy/ui/credits.py b/jeoparpy/ui/credits.py index 80d13d7..0c56216 100644 --- a/jeoparpy/ui/credits.py +++ b/jeoparpy/ui/credits.py @@ -23,9 +23,9 @@ import pygame from pygame.locals import QUIT, KEYDOWN, K_q -from constants import JEOP_BLUE -from resmaps import FONTS, IMAGES -from util import get_anim_data, scale, shadow_text +from .constants import JEOP_BLUE +from .resmaps import FONTS, IMAGES +from .util import get_anim_data, scale, shadow_text ############################################################################### class CreditLine(pygame.sprite.DirtySprite): diff --git a/jeoparpy/ui/intro.py b/jeoparpy/ui/intro.py index a99dfb3..6f81d01 100644 --- a/jeoparpy/ui/intro.py +++ b/jeoparpy/ui/intro.py @@ -22,9 +22,9 @@ import pygame from pygame.locals import KEYDOWN, QUIT -from constants import JEOP_BLUE, RULES, SUBTITLE -from resmaps import FONTS, IMAGES -from util import (draw_centered_textblock, draw_textline, restrict_fontsize, +from .constants import JEOP_BLUE, RULES, SUBTITLE +from .resmaps import FONTS, IMAGES +from .util import (draw_centered_textblock, draw_textline, restrict_fontsize, scale, shadow_text, wait_for_keypress) ############################################################################### diff --git a/jeoparpy/ui/maingame/__init__.py b/jeoparpy/ui/maingame/__init__.py index 9c599eb..68878b4 100644 --- a/jeoparpy/ui/maingame/__init__.py +++ b/jeoparpy/ui/maingame/__init__.py @@ -6,7 +6,7 @@ JeoparPy, i.e. everything from when the main game board and podia appear until the game is over and the congratulations screen appears. """ -from clue import Clue -from clueanimation import OpenClueAnimation -from gameboard import GameBoard -from podiapanel import PodiaPanel +from .clue import Clue +from .clueanimation import OpenClueAnimation +from .gameboard import GameBoard +from .podiapanel import PodiaPanel diff --git a/jeoparpy/ui/maingame/clue.py b/jeoparpy/ui/maingame/clue.py index 99bd403..06f79d1 100644 --- a/jeoparpy/ui/maingame/clue.py +++ b/jeoparpy/ui/maingame/clue.py @@ -15,8 +15,8 @@ """ import pygame -from jeopgamesfc import JeopGameSurface -from util import Timer +from .jeopgamesfc import JeopGameSurface +from .util import Timer from ..constants import JEOP_BLUE from ..resmaps import FONTS, IMAGES from ..util import (autofit_text, draw_centered_textblock, draw_textblock, diff --git a/jeoparpy/ui/maingame/gameboard.py b/jeoparpy/ui/maingame/gameboard.py index 1f4240b..753a5de 100644 --- a/jeoparpy/ui/maingame/gameboard.py +++ b/jeoparpy/ui/maingame/gameboard.py @@ -17,7 +17,7 @@ import pygame -from jeopgamesfc import JeopGameSurface +from .jeopgamesfc import JeopGameSurface from ..constants import JEOP_BLUE from ..resmaps import FONTS from ..util import (autofit_text, BorderedBox, draw_centered_textblock, diff --git a/jeoparpy/ui/maingame/podiapanel.py b/jeoparpy/ui/maingame/podiapanel.py index e549cd7..8037522 100644 --- a/jeoparpy/ui/maingame/podiapanel.py +++ b/jeoparpy/ui/maingame/podiapanel.py @@ -16,8 +16,8 @@ """ import pygame -from jeopgamesfc import JeopGameSurface -from podium import Podium +from .jeopgamesfc import JeopGameSurface +from .podium import Podium from ..resmaps import FONTS, IMAGES diff --git a/jeoparpy/ui/maingame/podium.py b/jeoparpy/ui/maingame/podium.py index 9bb002f..ecc7d2f 100644 --- a/jeoparpy/ui/maingame/podium.py +++ b/jeoparpy/ui/maingame/podium.py @@ -16,8 +16,8 @@ """ import pygame -from jeopgamesfc import JeopGameSurface -from util import Timer +from .jeopgamesfc import JeopGameSurface +from .util import Timer from ..constants import JEOP_BLUE from ..resmaps import FONTS, IMAGES from ..util import (autofit_text, draw_centered_textblock, diff --git a/requirements.txt b/requirements.txt index 144b7b3..41d8040 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ -pygame==2.0.3 -RPi.GPIO==0.7.1 \ No newline at end of file +pygame==2.5.2 +RPi.GPIO==0.7.1 +# GPIO Emulator +# RPi @ git+https://github.com/nosix/raspberry-gpio-emulator/@891462c30064141bca3e5d7aa7f4c46cca99a7eb \ No newline at end of file diff --git a/start.py b/start.py index 7aec6bb..fc82419 100644 --- a/start.py +++ b/start.py @@ -68,4 +68,4 @@ from jeoparpy.main import main main(*flags) - print config.DRIVE + print(config.DRIVE) From 10df684aab9a0601c000c5ae52e2dbc25d1f7fb8 Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Wed, 14 Feb 2024 17:05:56 -0800 Subject: [PATCH 02/20] Update dockerfile for the build pipeline --- Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index c84ebc8..9e380fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,4 @@ -# The original project is very old and still uses Python 2.7.18 -# This needs to be updated to Python 3.8.5 or later after the project is updated -FROM python:2.7.18-buster +FROM python:3.11.8-bullseye # Set some basic image metadata LABEL org.opencontainers.image.description = "A Jeopardy game for the Raspberry Pi" From dd6b408d783457b26ceafcb3733c8c9991452697 Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Thu, 21 Mar 2024 01:06:50 +0000 Subject: [PATCH 03/20] python3.9 --- jeoparpy/game/gamedata.py | 6 +++--- jeoparpy/game/gamestate.py | 4 ++-- jeoparpy/ui/congrats.py | 2 +- jeoparpy/ui/credits.py | 2 +- jeoparpy/ui/intro.py | 2 +- jeoparpy/ui/maingame/clueanimation.py | 2 +- jeoparpy/ui/maingame/gameboard.py | 8 ++++---- jeoparpy/ui/maingame/podiapanel.py | 2 +- jeoparpy/ui/util.py | 4 ++-- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/jeoparpy/game/gamedata.py b/jeoparpy/game/gamedata.py index e3f0a28..7caf7e3 100644 --- a/jeoparpy/game/gamedata.py +++ b/jeoparpy/game/gamedata.py @@ -122,7 +122,7 @@ def _build_players_from_file(self, path): elif len(playerNames) < 3: missing = 3 - len(playerNames) playerNames += tuple('Player ' + str(i + 2) - for i in xrange(missing)) + for i in range(missing)) return tuple(JeopPlayer(name) for name in playerNames) @@ -137,8 +137,8 @@ def _map_clues(self, clues, numCategories): ((Category 1 clues), (Category 2 clues), ...)) """ mapped = [] - numPerCat = len(clues) / numCategories - for c in xrange(numCategories): + numPerCat = int(len(clues) / numCategories) + for c in range(numCategories): start = c*numPerCat mapped.append(tuple(clues[start:start + numPerCat])) diff --git a/jeoparpy/game/gamestate.py b/jeoparpy/game/gamestate.py index a104eac..9df4fcb 100644 --- a/jeoparpy/game/gamestate.py +++ b/jeoparpy/game/gamestate.py @@ -134,7 +134,7 @@ def state(self, val): type(val).__name__), val) # Verify state within valid range of defined states - if val not in xrange(self._numStates): + if val not in range(self._numStates): raise StateSetError("Set of 'State' attempted with value " + "that has no assigned state.", val) @@ -265,4 +265,4 @@ def __str__(self): addendum = ' Previous state: {0}; Attempted state: {1}'.format( self.previous, self.attempted) - return self.msg + addendum \ No newline at end of file + return self.msg + addendum diff --git a/jeoparpy/ui/congrats.py b/jeoparpy/ui/congrats.py index ee55733..b58bc95 100644 --- a/jeoparpy/ui/congrats.py +++ b/jeoparpy/ui/congrats.py @@ -103,7 +103,7 @@ def _fade_in_sfc(screen, sfc, clock, time): fpsGoal = int(255.0 / time) # frames to draw / time to spend in secs sfc.fill(JEOP_BLUE) - for alpha in xrange(256): + for alpha in range(256): sfc.set_alpha(alpha) screen.blit(lastScreen, (0, 0)) screen.blit(sfc, (0, 0)) diff --git a/jeoparpy/ui/credits.py b/jeoparpy/ui/credits.py index 0c56216..a7bcc5d 100644 --- a/jeoparpy/ui/credits.py +++ b/jeoparpy/ui/credits.py @@ -281,7 +281,7 @@ def _scroll_credits(screen, scrRect, clock, lines, numFrames, step, fpsLimit): screen.fill(JEOP_BLUE) bg = screen.copy() - for frame in xrange(numFrames): + for frame in range(numFrames): lines.update(step, scrRect.h) lines.clear(screen, bg) lines.draw(screen) diff --git a/jeoparpy/ui/intro.py b/jeoparpy/ui/intro.py index 6f81d01..5600e5c 100644 --- a/jeoparpy/ui/intro.py +++ b/jeoparpy/ui/intro.py @@ -168,7 +168,7 @@ def _fade_in_title(screen, background, text, textRect, bannerColor, clock): fpsGoal = int(255 / 7.8) #frames to draw / time to spend in secs pygame.time.delay(2000) - for alpha in xrange(256): + for alpha in range(256): background.fill(bannerColor, textRect) text.set_alpha(alpha) background.blit(text, textRect) diff --git a/jeoparpy/ui/maingame/clueanimation.py b/jeoparpy/ui/maingame/clueanimation.py index bf9c58a..fd745c3 100644 --- a/jeoparpy/ui/maingame/clueanimation.py +++ b/jeoparpy/ui/maingame/clueanimation.py @@ -96,7 +96,7 @@ def _init_rects(self, clueCoords): self._startRect = self.rect.copy() self._moveAmts = tuple(self._endRect[i] - self.rect[i] - for i in xrange(4)) + for i in range(4)) def _is_animation_done(self): return self._frame == self._frameGoal diff --git a/jeoparpy/ui/maingame/gameboard.py b/jeoparpy/ui/maingame/gameboard.py index 753a5de..c9bbc37 100644 --- a/jeoparpy/ui/maingame/gameboard.py +++ b/jeoparpy/ui/maingame/gameboard.py @@ -63,8 +63,8 @@ def update(self, gameState, gameData): if gs.state == gs.BOARD_FILL: self._amtFont = pygame.font.Font(FONTS['amount'], self._scale(48)) - self._coordsStack = [(c, r) for c in xrange(len(self._boxes)) - for r in xrange(len(self._boxes[0]) - 1)] + self._coordsStack = [(c, r) for c in range(len(self._boxes)) + for r in range(len(self._boxes[0]) - 1)] shuffle(self._coordsStack) elif gs.state == gs.WAIT_BOARD_FILL: @@ -128,7 +128,7 @@ def _init_boxes(self, nCols, nRows): (borderW, borderW, catBottomBorder, borderW), (0, 0, 0)) - for col in xrange(nCols): + for col in range(nCols): colBoxes = [] if col == nCols - 1: @@ -142,7 +142,7 @@ def _init_boxes(self, nCols, nRows): catBox.rect.topleft = (boxW*col, 0) colBoxes.append(catBox.copy()) - for row in xrange(1, nRows): + for row in range(1, nRows): clueBox.rect.topleft = (boxW*col, boxH*row) colBoxes.append(clueBox.copy()) diff --git a/jeoparpy/ui/maingame/podiapanel.py b/jeoparpy/ui/maingame/podiapanel.py index 8037522..67ed18f 100644 --- a/jeoparpy/ui/maingame/podiapanel.py +++ b/jeoparpy/ui/maingame/podiapanel.py @@ -85,7 +85,7 @@ def _init_podia(self, gameData, scalar): fonts = (('team1', 42), ('team2', 33), ('team3', 40)) fonts = tuple((FONTS[n], s) for n,s in fonts) - for i in xrange(3): + for i in range(3): p = Podium(i, img, scalar, gameData.players[i].name, fonts[i], nameBounds, podia) diff --git a/jeoparpy/ui/util.py b/jeoparpy/ui/util.py index 832e5e1..8f99812 100644 --- a/jeoparpy/ui/util.py +++ b/jeoparpy/ui/util.py @@ -201,7 +201,7 @@ def get_size_textblock(lines, font, spacing): blockW = 0 blockH = 0 - if isinstance(lines, basestring): + if isinstance(lines, str): lines = [lines] for line in lines: @@ -332,7 +332,7 @@ def borderWidths(self, val): val = 4*[val] try: - for i in xrange(4): + for i in range(4): ws.append(to_numeric(val[i])) except IndexError: raise BorderError("'borderW' contains ") From c059cd093ec3c2f645e5b7142f6e6600a4ff0c38 Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Thu, 21 Mar 2024 02:32:11 +0000 Subject: [PATCH 04/20] pygame downgrade --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 41d8040..911ebab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -pygame==2.5.2 +pygame==1.9.6 RPi.GPIO==0.7.1 # GPIO Emulator -# RPi @ git+https://github.com/nosix/raspberry-gpio-emulator/@891462c30064141bca3e5d7aa7f4c46cca99a7eb \ No newline at end of file +# RPi @ git+https://github.com/nosix/raspberry-gpio-emulator/@891462c30064141bca3e5d7aa7f4c46cca99a7eb From 0a4587f4b91a53fbd5458f4921e1bda6becd0932 Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Thu, 21 Mar 2024 02:44:25 +0000 Subject: [PATCH 05/20] button fix --- button.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/button.py b/button.py index 8bedf37..e6ddf0b 100644 --- a/button.py +++ b/button.py @@ -10,9 +10,9 @@ def __init__(self): #Setup pins and board gpio.setmode(gpio.BCM) - gpio.setup(22, gpio.IN, pull_up_down=gpio.PUD_UP) - gpio.setup(4, gpio.IN, pull_up_down=gpio.PUD_UP) - gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_UP) + gpio.setup(22, gpio.IN, pull_up_down=gpio.PUD_DOWN) + gpio.setup(4, gpio.IN, pull_up_down=gpio.PUD_DOWN) + gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_DOWN) #Put pins in variables self.center_button = 22 @@ -50,7 +50,7 @@ def check(self): center_input = gpio.input(self.center_button) left_input = gpio.input(self.left_button) right_input = gpio.input(self.right_button) - if center_input == True: + if center_input == gpio.HIGH: if self.center_press > 0: if self.DEBUG: print('ADMIN: Console button 2 has been pressed') @@ -62,7 +62,7 @@ def check(self): self.center_press += 1 #Right buttons stuff - if right_input == True: + if right_input == gpio.HIGH: if self.right_press > 0: if self.DEBUG: print('ADMIN: Console button 3 has been pressed') @@ -74,7 +74,7 @@ def check(self): self.right_press += 1 #Left button stuff - if left_input == True: + if left_input == gpio.HIGH: if self.left_press > 0: if self.DEBUG: print('ADMIN: Console button 1 has been pressed') From ba840dc1a54f2806709481d94f521ad139c395bc Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Wed, 27 Mar 2024 19:55:18 -0700 Subject: [PATCH 06/20] added for SDL compat --- Dockerfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9e380fd..17d6b4f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,12 @@ LABEL org.opencontainers.image.licenses=GPL3 # Set the working directory for installations WORKDIR /app +# Install OS packages +RUN apt update && apt install -y libsdl2-dev libsdl2-2.0-0 \ + libjpeg-dev libwebp-dev libtiff5-dev libsdl2-image-dev libsdl2-image-2.0-0 \ + libmikmod-dev libfishsound1-dev libsmpeg-dev liboggz2-dev libflac-dev libfluidsynth-dev libsdl2-mixer-dev libsdl2-mixer-2.0-0 \ + libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 + # Add our python requirements file to the working directory ADD requirements.txt . @@ -27,4 +33,4 @@ ADD ./ . # ADD ????? # Set default command to run the start.py file -CMD ["/usr/local/bin/python", "start.py"] \ No newline at end of file +CMD ["/usr/local/bin/python", "start.py"] From fba4fd904ef780f2fe3988e2fb034917901c9fe7 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 21:32:16 -0700 Subject: [PATCH 07/20] Removed version (no longer used) added default DISPLAY value --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0707952..2e7f7af 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.8' + services: # Building and testing environment @@ -14,7 +14,7 @@ services: - ${PWD}:/app - /tmp/.X11-unix:/tmp/.X11-unix environment: - - DISPLAY=$DISPLAY + - DISPLAY=${DISPLAY:-:0} privileged: true app: @@ -24,6 +24,6 @@ services: volumes: - /tmp/.X11-unix:/tmp/.X11-unix environment: - - DISPLAY=$DISPLAY + - DISPLAY=${DISPLAY:-:0} privileged: true From 3b7f448edfbb71535a569d6443af2f258a395337 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 21:33:22 -0700 Subject: [PATCH 08/20] reflowed apt installs and added libpng-dev --- Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 17d6b4f..3aface1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,9 +9,12 @@ LABEL org.opencontainers.image.licenses=GPL3 WORKDIR /app # Install OS packages -RUN apt update && apt install -y libsdl2-dev libsdl2-2.0-0 \ - libjpeg-dev libwebp-dev libtiff5-dev libsdl2-image-dev libsdl2-image-2.0-0 \ - libmikmod-dev libfishsound1-dev libsmpeg-dev liboggz2-dev libflac-dev libfluidsynth-dev libsdl2-mixer-dev libsdl2-mixer-2.0-0 \ +RUN apt update && apt install -y \ + libsdl2-dev libsdl2-2.0-0 \ + libjpeg-dev libpng-dev libwebp-dev libtiff-dev \ + libsdl2-image-dev libsdl2-image-2.0-0 \ + libmikmod-dev libfishsound1-dev libsmpeg-dev liboggz2-dev \ + libflac-dev libfluidsynth-dev libsdl2-mixer-dev libsdl2-mixer-2.0-0 \ libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 # Add our python requirements file to the working directory From a3177440a39cce1dae64bea54d0ea1f66ef47444 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 21:34:37 -0700 Subject: [PATCH 09/20] changed pygame version to 2.5.2 --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 911ebab..ddc8549 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ -pygame==1.9.6 +#pygame==1.9.6 +pygame==2.5.2 RPi.GPIO==0.7.1 # GPIO Emulator # RPi @ git+https://github.com/nosix/raspberry-gpio-emulator/@891462c30064141bca3e5d7aa7f4c46cca99a7eb From 1d231ff5fb1caf30cace2986727eabb80781168c Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 22:16:32 -0700 Subject: [PATCH 10/20] Added profile for build --- README.md | 10 ++++++++++ docker-compose.yml | 2 ++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index 7df23a4..75f7097 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ Play Jeopardy on your Raspberry Pi How to get Jeopardy running on your Raspberry Pi +- install docker +- create a copy of the `docker-compose.yml` file +- run `docker compose up` + ### Hardware Follow these instructions:
@@ -16,6 +20,12 @@ http://hackaday.io/project/3721/instructions Follow these instructions:
http://hackaday.io/project/3721-game-show-emulator/log/12365 +## Building + +To build the container image localy: + + docker compose --profile build build + ## Notes This software is designed to be used with the Raspberry Pi. If you would like to run Jeopardy on a Windows or Ubuntu please use Adam Beagle's jeoparpy software. diff --git a/docker-compose.yml b/docker-compose.yml index 2e7f7af..1710713 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,8 @@ services: environment: - DISPLAY=${DISPLAY:-:0} privileged: true + profiles: + - build app: image: ghcr.io/btc-raspberrypiclub/jeopardy:latest From 6c95d70548724b47f25ba02d48b398738108e565 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 23:00:39 -0700 Subject: [PATCH 11/20] added venv dir python --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7bf1e89..d02dd17 100644 --- a/.gitignore +++ b/.gitignore @@ -130,6 +130,7 @@ celerybeat.pid # Environments .env .venv +python env/ venv/ ENV/ @@ -169,4 +170,4 @@ cython_debug/ # Project specific -jeoparpy/dir.txt \ No newline at end of file +jeoparpy/dir.txt From ad41fc94d69c3f1b36b2a872ca7775d31801493e Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 23:01:09 -0700 Subject: [PATCH 12/20] commented out the local dir mapping --- docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 1710713..64226d8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: tty: true command: ["/bin/bash"] volumes: - - ${PWD}:/app + #- ${PWD}:/app - /tmp/.X11-unix:/tmp/.X11-unix environment: - DISPLAY=${DISPLAY:-:0} @@ -27,5 +27,6 @@ services: - /tmp/.X11-unix:/tmp/.X11-unix environment: - DISPLAY=${DISPLAY:-:0} + - PW_AUDIO_MODULE=pipewire privileged: true From 809bd73842cd77c274038c28e118823d56edb9ba Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 23:01:43 -0700 Subject: [PATCH 13/20] added pipewire for compatibility with default on current raspbian --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3aface1..21f594a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ RUN apt update && apt install -y \ libsdl2-image-dev libsdl2-image-2.0-0 \ libmikmod-dev libfishsound1-dev libsmpeg-dev liboggz2-dev \ libflac-dev libfluidsynth-dev libsdl2-mixer-dev libsdl2-mixer-2.0-0 \ - libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 + libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 pipewire # Add our python requirements file to the working directory ADD requirements.txt . From c088f6b818d05e00b7df2f56c4166db60996494a Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Thu, 28 Mar 2024 23:56:26 -0700 Subject: [PATCH 14/20] Update requirements.txt --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ddc8549..eeb23b6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ -#pygame==1.9.6 pygame==2.5.2 RPi.GPIO==0.7.1 # GPIO Emulator From a7ad8c112de5813ebde05d2a04dad711635ee0f9 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Sat, 30 Mar 2024 17:55:03 -0700 Subject: [PATCH 15/20] Added /dev/snd and ALSA --- Dockerfile | 2 +- docker-compose.yml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 21f594a..87c4910 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ RUN apt update && apt install -y \ libsdl2-image-dev libsdl2-image-2.0-0 \ libmikmod-dev libfishsound1-dev libsmpeg-dev liboggz2-dev \ libflac-dev libfluidsynth-dev libsdl2-mixer-dev libsdl2-mixer-2.0-0 \ - libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 pipewire + libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 pipewire alsa-utils # Add our python requirements file to the working directory ADD requirements.txt . diff --git a/docker-compose.yml b/docker-compose.yml index 64226d8..9725c37 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,15 +9,17 @@ services: image: ghcr.io/btc-raspberrypiclub/jeopardy:latest stdin_open: true tty: true - command: ["/bin/bash"] volumes: #- ${PWD}:/app - /tmp/.X11-unix:/tmp/.X11-unix environment: - DISPLAY=${DISPLAY:-:0} + devices: + - /dev/snd:/dev/snd privileged: true profiles: - - build + - develop + command: ["/usr/local/bin/python","-vvvv", "start.py"] app: image: ghcr.io/btc-raspberrypiclub/jeopardy:latest From 1b9c18d048a2d168d21403844ebd0e736c274588 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Sat, 30 Mar 2024 17:55:59 -0700 Subject: [PATCH 16/20] changed developer profile from build to develop --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75f7097..5ef34f9 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ http://hackaday.io/project/3721-game-show-emulator/log/12365 To build the container image localy: - docker compose --profile build build + docker compose --profile develop build ## Notes From 3e5b3694fccb4e9b90490244d00359a38b581010 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Sat, 30 Mar 2024 18:09:33 -0700 Subject: [PATCH 17/20] added some comments to explain things --- README.md | 4 ++++ docker-compose.yml | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5ef34f9..c9ec4f4 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,10 @@ To build the container image localy: docker compose --profile develop build +To run the `develop` profile image with debuggig enabled: + + docker compose --profile develop up dev + ## Notes This software is designed to be used with the Raspberry Pi. If you would like to run Jeopardy on a Windows or Ubuntu please use Adam Beagle's jeoparpy software. diff --git a/docker-compose.yml b/docker-compose.yml index 9725c37..02cac3a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: - # Building and testing environment + # Developing and testing environment dev: build: context: . @@ -10,17 +10,23 @@ services: stdin_open: true tty: true volumes: - #- ${PWD}:/app + - ${PWD}:/app - /tmp/.X11-unix:/tmp/.X11-unix + # Bring the DISPLAY through from the host environment: - DISPLAY=${DISPLAY:-:0} devices: - /dev/snd:/dev/snd privileged: true + # This service can only be interacted with by specifying + # '--profile develop' on the commandline, otherwise it is ignored profiles: - develop + # Running python in verbose mode helps debugging command: ["/usr/local/bin/python","-vvvv", "start.py"] + + # The actual application service for live app: image: ghcr.io/btc-raspberrypiclub/jeopardy:latest stdin_open: true From ec343503f9020a0a8cf81a23fc4c053e53f52722 Mon Sep 17 00:00:00 2001 From: Garth Johnson Date: Wed, 3 Apr 2024 18:17:25 -0700 Subject: [PATCH 18/20] Labeled pins for button --- button.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/button.py b/button.py index e6ddf0b..5f741ef 100644 --- a/button.py +++ b/button.py @@ -10,9 +10,13 @@ def __init__(self): #Setup pins and board gpio.setmode(gpio.BCM) + #Pin 22 is Team 2 gpio.setup(22, gpio.IN, pull_up_down=gpio.PUD_DOWN) + #Pin 4 is Team 3 gpio.setup(4, gpio.IN, pull_up_down=gpio.PUD_DOWN) + #Pin 17 is Team 1 gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_DOWN) + #GPIO Needs to be setup between 3.3v and pins above #Put pins in variables self.center_button = 22 From d9cf456c92d745d16945c2550a2cc53c0e328ad9 Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Thu, 4 Apr 2024 03:47:40 +0100 Subject: [PATCH 19/20] Removed extraneous games. Removed Select Game text. Made Jeopardy sole game. Added fonts for teams 4 & 5. Multiple code fixes for 5 team support. Adjusted podium displays to fit 5 teams. --- games/Example/categories.txt | 5 - games/Example/players.txt | 3 - games/{Example => Jeopardy}/INSTRUCTIONS.txt | 0 games/{Example => Jeopardy}/amounts.txt | 0 games/Jeopardy/categories.txt | 5 + games/{Example => Jeopardy}/clues.txt | 0 games/Jeopardy/players.txt | 5 + games/{Example => Jeopardy}/rules.txt | 0 games/Prototype/INSTRUCTIONS.txt | 118 ------------------- games/Prototype/amounts.txt | 5 - games/Prototype/categories.txt | 5 - games/Prototype/clues.txt | 90 -------------- games/Prototype/players.txt | 3 - games/Prototype/rules.txt | 4 - games/Sample/INSTRUCTIONS.txt | 118 ------------------- games/Sample/amounts.txt | 5 - games/Sample/categories.txt | 5 - games/Sample/clues.txt | 90 -------------- games/Sample/players.txt | 3 - games/Sample/rules.txt | 4 - games/Test/INSTRUCTIONS.txt | 118 ------------------- games/Test/amounts.txt | 5 - games/Test/categories.txt | 5 - games/Test/clues.txt | 90 -------------- games/Test/players.txt | 3 - games/Test/rules.txt | 4 - jeoparpy/game/gamedata.py | 8 +- jeoparpy/selectMenu.py | 8 +- jeoparpy/ui/maingame/podiapanel.py | 10 +- res/fonts/team4.ttf | Bin 0 -> 69876 bytes res/fonts/team5.ttf | Bin 0 -> 105296 bytes 31 files changed, 21 insertions(+), 698 deletions(-) delete mode 100644 games/Example/categories.txt delete mode 100644 games/Example/players.txt rename games/{Example => Jeopardy}/INSTRUCTIONS.txt (100%) rename games/{Example => Jeopardy}/amounts.txt (100%) create mode 100644 games/Jeopardy/categories.txt rename games/{Example => Jeopardy}/clues.txt (100%) create mode 100644 games/Jeopardy/players.txt rename games/{Example => Jeopardy}/rules.txt (100%) delete mode 100644 games/Prototype/INSTRUCTIONS.txt delete mode 100644 games/Prototype/amounts.txt delete mode 100644 games/Prototype/categories.txt delete mode 100644 games/Prototype/clues.txt delete mode 100644 games/Prototype/players.txt delete mode 100644 games/Prototype/rules.txt delete mode 100644 games/Sample/INSTRUCTIONS.txt delete mode 100644 games/Sample/amounts.txt delete mode 100644 games/Sample/categories.txt delete mode 100644 games/Sample/clues.txt delete mode 100644 games/Sample/players.txt delete mode 100644 games/Sample/rules.txt delete mode 100644 games/Test/INSTRUCTIONS.txt delete mode 100644 games/Test/amounts.txt delete mode 100644 games/Test/categories.txt delete mode 100644 games/Test/clues.txt delete mode 100644 games/Test/players.txt delete mode 100644 games/Test/rules.txt create mode 100644 res/fonts/team4.ttf create mode 100644 res/fonts/team5.ttf diff --git a/games/Example/categories.txt b/games/Example/categories.txt deleted file mode 100644 index 6db3bbe..0000000 --- a/games/Example/categories.txt +++ /dev/null @@ -1,5 +0,0 @@ -SAMPLE CATEGORY -EXAMPLE CATEGORY -MODEL CATEGORY -TEST LONG CATEGORY NAME -PROTOTYPE CATEGORY diff --git a/games/Example/players.txt b/games/Example/players.txt deleted file mode 100644 index 6ac65fe..0000000 --- a/games/Example/players.txt +++ /dev/null @@ -1,3 +0,0 @@ -Team 1 -Team 2 -Team 3 diff --git a/games/Example/INSTRUCTIONS.txt b/games/Jeopardy/INSTRUCTIONS.txt similarity index 100% rename from games/Example/INSTRUCTIONS.txt rename to games/Jeopardy/INSTRUCTIONS.txt diff --git a/games/Example/amounts.txt b/games/Jeopardy/amounts.txt similarity index 100% rename from games/Example/amounts.txt rename to games/Jeopardy/amounts.txt diff --git a/games/Jeopardy/categories.txt b/games/Jeopardy/categories.txt new file mode 100644 index 0000000..bbacf23 --- /dev/null +++ b/games/Jeopardy/categories.txt @@ -0,0 +1,5 @@ +BEARS CATEGORY +BEETS CATEGORY +BATTLESTAR CATEGORY +GALACTICA LONG CATEGORY NAME +ALLURBASE CATEGORY diff --git a/games/Example/clues.txt b/games/Jeopardy/clues.txt similarity index 100% rename from games/Example/clues.txt rename to games/Jeopardy/clues.txt diff --git a/games/Jeopardy/players.txt b/games/Jeopardy/players.txt new file mode 100644 index 0000000..b5a7aa2 --- /dev/null +++ b/games/Jeopardy/players.txt @@ -0,0 +1,5 @@ +Team Alpha +Team Beta +Team Gamma +Team Delta +Team Epsilon diff --git a/games/Example/rules.txt b/games/Jeopardy/rules.txt similarity index 100% rename from games/Example/rules.txt rename to games/Jeopardy/rules.txt diff --git a/games/Prototype/INSTRUCTIONS.txt b/games/Prototype/INSTRUCTIONS.txt deleted file mode 100644 index 128dc47..0000000 --- a/games/Prototype/INSTRUCTIONS.txt +++ /dev/null @@ -1,118 +0,0 @@ -======================================================================== -THE FOLLOWING ARE INSTRUCTIONS TO CREATE YOUR OWN VALUES FOR GAME DATA | -======================================================================== -Please note that each respective file has sample data included to aid -you in writing your own data. - -======= -CLUES | -======= - * Clues must be written in 'clues.txt,' located in the folder containing - these instructions. - - * Clues must be separated in these files by one or more blank lines. - -This means there cannot be any blank lines within a single clue. - -For easiest viewing, separate clues in the same category by one line, - and categories by several. - - * There are sample clues already in 'clues.txt' to guide you. - To create your own clues, replace the sample data with your own text, - taking note of the following: - - - Clues are written starting from the top left clue box, then by column. - ~ Example: On a 5x5 board, the first 5 clues will be the clues for - the leftmost category, starting at the top. The next 5 will be for - the column to the right, starting at the top. - - - Clues can be any length, but abnormally long clues may be too small - to be easily read. - - - As can be seen in the sample clues, you may choose to write an - entire clue on a single line or dictate the line breaks - yourself. The simplest method is to write each clue on a single - line. - - -============ -CATEGORIES | -============ - * Categories must be written in 'categories.txt,' located in the folder - containing these instructions. - - * Each non-empty line in 'categories.txt' is treated as a category. - Replace the sample categories with your own. - - * The capitalization used in 'categories.txt' will be used in the game - (all caps is recommended). - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * Category names can be any length/any number of words, but shorter - is better for readability. - - -============== -PLAYER NAMES | -============== - * Player names are defined in 'players.txt,' located in the folder - containing these instructions. - - * Each player/team name must be on a separate line. - - * There is a maximum of 3 players/teams at this time. If more names - are provided in the file, they will be ignored, and a warning message - printed. If there are fewer than 3 names provided, default names - (Player 1, etc...) will be used for missing names. - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * Names can be any length and any number of words, but keep in mind very - long names may be drawn so small as to be essentially unreadable. - - -========= -AMOUNTS | -========= - * Clue amounts are defined in 'amounts.txt,' located in the folder - containing these instructions. - - * Each amount should be on a separate line, and must be only an integer - (ex: 200). - - * Do not include a dollar sign, decimal or any other non-numeric character. - - * Make sure the number of amounts matches the number of clues per category. - - * Amounts can be arbitrarily high, but note that scores of 10 million or higher - will not fit properly on the podia. There are no plans to change this behavior - as it is considered an extreme edge case. - - -======= -RULES | -======= - * Rules are defined in 'rules.txt,' located in the folder containing - these instructions. - - * Rules are displayed after the opening sequence, before the category - scroll. - - * Each rule should be on a separate line. - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * It is recommended to start each rule with a bullet-like character, such as - an asterisk (*). - - -========== -SUBTITLE | -========== - * Subtitle must be written in 'subtitle.txt,' located in the folder - containing these instructions. - - * The first line in 'subtitle.txt' containing any non-whitespace text - is treated as the subtitle. - - * If no subtitle is desired, make 'subtitle.txt' empty (do not delete it, - however). diff --git a/games/Prototype/amounts.txt b/games/Prototype/amounts.txt deleted file mode 100644 index eb950e1..0000000 --- a/games/Prototype/amounts.txt +++ /dev/null @@ -1,5 +0,0 @@ -200 -400 -600 -800 -1000 diff --git a/games/Prototype/categories.txt b/games/Prototype/categories.txt deleted file mode 100644 index 6db3bbe..0000000 --- a/games/Prototype/categories.txt +++ /dev/null @@ -1,5 +0,0 @@ -SAMPLE CATEGORY -EXAMPLE CATEGORY -MODEL CATEGORY -TEST LONG CATEGORY NAME -PROTOTYPE CATEGORY diff --git a/games/Prototype/clues.txt b/games/Prototype/clues.txt deleted file mode 100644 index 31fc3f6..0000000 --- a/games/Prototype/clues.txt +++ /dev/null @@ -1,90 +0,0 @@ -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. diff --git a/games/Prototype/players.txt b/games/Prototype/players.txt deleted file mode 100644 index 6ac65fe..0000000 --- a/games/Prototype/players.txt +++ /dev/null @@ -1,3 +0,0 @@ -Team 1 -Team 2 -Team 3 diff --git a/games/Prototype/rules.txt b/games/Prototype/rules.txt deleted file mode 100644 index 3a8a485..0000000 --- a/games/Prototype/rules.txt +++ /dev/null @@ -1,4 +0,0 @@ -* One ring-in per team, per turn -* Answer must be read in full before ring-in -* Responses must be in form of a question -* No daily doubles diff --git a/games/Sample/INSTRUCTIONS.txt b/games/Sample/INSTRUCTIONS.txt deleted file mode 100644 index 128dc47..0000000 --- a/games/Sample/INSTRUCTIONS.txt +++ /dev/null @@ -1,118 +0,0 @@ -======================================================================== -THE FOLLOWING ARE INSTRUCTIONS TO CREATE YOUR OWN VALUES FOR GAME DATA | -======================================================================== -Please note that each respective file has sample data included to aid -you in writing your own data. - -======= -CLUES | -======= - * Clues must be written in 'clues.txt,' located in the folder containing - these instructions. - - * Clues must be separated in these files by one or more blank lines. - -This means there cannot be any blank lines within a single clue. - -For easiest viewing, separate clues in the same category by one line, - and categories by several. - - * There are sample clues already in 'clues.txt' to guide you. - To create your own clues, replace the sample data with your own text, - taking note of the following: - - - Clues are written starting from the top left clue box, then by column. - ~ Example: On a 5x5 board, the first 5 clues will be the clues for - the leftmost category, starting at the top. The next 5 will be for - the column to the right, starting at the top. - - - Clues can be any length, but abnormally long clues may be too small - to be easily read. - - - As can be seen in the sample clues, you may choose to write an - entire clue on a single line or dictate the line breaks - yourself. The simplest method is to write each clue on a single - line. - - -============ -CATEGORIES | -============ - * Categories must be written in 'categories.txt,' located in the folder - containing these instructions. - - * Each non-empty line in 'categories.txt' is treated as a category. - Replace the sample categories with your own. - - * The capitalization used in 'categories.txt' will be used in the game - (all caps is recommended). - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * Category names can be any length/any number of words, but shorter - is better for readability. - - -============== -PLAYER NAMES | -============== - * Player names are defined in 'players.txt,' located in the folder - containing these instructions. - - * Each player/team name must be on a separate line. - - * There is a maximum of 3 players/teams at this time. If more names - are provided in the file, they will be ignored, and a warning message - printed. If there are fewer than 3 names provided, default names - (Player 1, etc...) will be used for missing names. - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * Names can be any length and any number of words, but keep in mind very - long names may be drawn so small as to be essentially unreadable. - - -========= -AMOUNTS | -========= - * Clue amounts are defined in 'amounts.txt,' located in the folder - containing these instructions. - - * Each amount should be on a separate line, and must be only an integer - (ex: 200). - - * Do not include a dollar sign, decimal or any other non-numeric character. - - * Make sure the number of amounts matches the number of clues per category. - - * Amounts can be arbitrarily high, but note that scores of 10 million or higher - will not fit properly on the podia. There are no plans to change this behavior - as it is considered an extreme edge case. - - -======= -RULES | -======= - * Rules are defined in 'rules.txt,' located in the folder containing - these instructions. - - * Rules are displayed after the opening sequence, before the category - scroll. - - * Each rule should be on a separate line. - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * It is recommended to start each rule with a bullet-like character, such as - an asterisk (*). - - -========== -SUBTITLE | -========== - * Subtitle must be written in 'subtitle.txt,' located in the folder - containing these instructions. - - * The first line in 'subtitle.txt' containing any non-whitespace text - is treated as the subtitle. - - * If no subtitle is desired, make 'subtitle.txt' empty (do not delete it, - however). diff --git a/games/Sample/amounts.txt b/games/Sample/amounts.txt deleted file mode 100644 index eb950e1..0000000 --- a/games/Sample/amounts.txt +++ /dev/null @@ -1,5 +0,0 @@ -200 -400 -600 -800 -1000 diff --git a/games/Sample/categories.txt b/games/Sample/categories.txt deleted file mode 100644 index 6db3bbe..0000000 --- a/games/Sample/categories.txt +++ /dev/null @@ -1,5 +0,0 @@ -SAMPLE CATEGORY -EXAMPLE CATEGORY -MODEL CATEGORY -TEST LONG CATEGORY NAME -PROTOTYPE CATEGORY diff --git a/games/Sample/clues.txt b/games/Sample/clues.txt deleted file mode 100644 index 31fc3f6..0000000 --- a/games/Sample/clues.txt +++ /dev/null @@ -1,90 +0,0 @@ -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. diff --git a/games/Sample/players.txt b/games/Sample/players.txt deleted file mode 100644 index 6ac65fe..0000000 --- a/games/Sample/players.txt +++ /dev/null @@ -1,3 +0,0 @@ -Team 1 -Team 2 -Team 3 diff --git a/games/Sample/rules.txt b/games/Sample/rules.txt deleted file mode 100644 index 3a8a485..0000000 --- a/games/Sample/rules.txt +++ /dev/null @@ -1,4 +0,0 @@ -* One ring-in per team, per turn -* Answer must be read in full before ring-in -* Responses must be in form of a question -* No daily doubles diff --git a/games/Test/INSTRUCTIONS.txt b/games/Test/INSTRUCTIONS.txt deleted file mode 100644 index 128dc47..0000000 --- a/games/Test/INSTRUCTIONS.txt +++ /dev/null @@ -1,118 +0,0 @@ -======================================================================== -THE FOLLOWING ARE INSTRUCTIONS TO CREATE YOUR OWN VALUES FOR GAME DATA | -======================================================================== -Please note that each respective file has sample data included to aid -you in writing your own data. - -======= -CLUES | -======= - * Clues must be written in 'clues.txt,' located in the folder containing - these instructions. - - * Clues must be separated in these files by one or more blank lines. - -This means there cannot be any blank lines within a single clue. - -For easiest viewing, separate clues in the same category by one line, - and categories by several. - - * There are sample clues already in 'clues.txt' to guide you. - To create your own clues, replace the sample data with your own text, - taking note of the following: - - - Clues are written starting from the top left clue box, then by column. - ~ Example: On a 5x5 board, the first 5 clues will be the clues for - the leftmost category, starting at the top. The next 5 will be for - the column to the right, starting at the top. - - - Clues can be any length, but abnormally long clues may be too small - to be easily read. - - - As can be seen in the sample clues, you may choose to write an - entire clue on a single line or dictate the line breaks - yourself. The simplest method is to write each clue on a single - line. - - -============ -CATEGORIES | -============ - * Categories must be written in 'categories.txt,' located in the folder - containing these instructions. - - * Each non-empty line in 'categories.txt' is treated as a category. - Replace the sample categories with your own. - - * The capitalization used in 'categories.txt' will be used in the game - (all caps is recommended). - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * Category names can be any length/any number of words, but shorter - is better for readability. - - -============== -PLAYER NAMES | -============== - * Player names are defined in 'players.txt,' located in the folder - containing these instructions. - - * Each player/team name must be on a separate line. - - * There is a maximum of 3 players/teams at this time. If more names - are provided in the file, they will be ignored, and a warning message - printed. If there are fewer than 3 names provided, default names - (Player 1, etc...) will be used for missing names. - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * Names can be any length and any number of words, but keep in mind very - long names may be drawn so small as to be essentially unreadable. - - -========= -AMOUNTS | -========= - * Clue amounts are defined in 'amounts.txt,' located in the folder - containing these instructions. - - * Each amount should be on a separate line, and must be only an integer - (ex: 200). - - * Do not include a dollar sign, decimal or any other non-numeric character. - - * Make sure the number of amounts matches the number of clues per category. - - * Amounts can be arbitrarily high, but note that scores of 10 million or higher - will not fit properly on the podia. There are no plans to change this behavior - as it is considered an extreme edge case. - - -======= -RULES | -======= - * Rules are defined in 'rules.txt,' located in the folder containing - these instructions. - - * Rules are displayed after the opening sequence, before the category - scroll. - - * Each rule should be on a separate line. - - * Leading or trailing whitespace (spaces, tabs, returns) is ignored. - - * It is recommended to start each rule with a bullet-like character, such as - an asterisk (*). - - -========== -SUBTITLE | -========== - * Subtitle must be written in 'subtitle.txt,' located in the folder - containing these instructions. - - * The first line in 'subtitle.txt' containing any non-whitespace text - is treated as the subtitle. - - * If no subtitle is desired, make 'subtitle.txt' empty (do not delete it, - however). diff --git a/games/Test/amounts.txt b/games/Test/amounts.txt deleted file mode 100644 index eb950e1..0000000 --- a/games/Test/amounts.txt +++ /dev/null @@ -1,5 +0,0 @@ -200 -400 -600 -800 -1000 diff --git a/games/Test/categories.txt b/games/Test/categories.txt deleted file mode 100644 index 6db3bbe..0000000 --- a/games/Test/categories.txt +++ /dev/null @@ -1,5 +0,0 @@ -SAMPLE CATEGORY -EXAMPLE CATEGORY -MODEL CATEGORY -TEST LONG CATEGORY NAME -PROTOTYPE CATEGORY diff --git a/games/Test/clues.txt b/games/Test/clues.txt deleted file mode 100644 index 31fc3f6..0000000 --- a/games/Test/clues.txt +++ /dev/null @@ -1,90 +0,0 @@ -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. - - - - - -THIS IS AN EXAMPLE OF A LONG CLUE WRITTEN ON A SINGLE LINE. ITS TEXT IS AUTOMATICALLY FIT TO THE CLUE SCREEN - -THIS IS AN EXAMPLE OF A CLUE -WITH MANUAL LINE BREAKS. -THE LINES OF CLUES LIKE THIS -MUST BE SEQUENTIAL IN THE -FILE, WITH NO BLANK LINES -BETWEEN THEM - -THIS IS AN EXAMPLE OF A CLUE WITH AN AUDIO READING. NOTE HOW PLAYERS ARE NOT ABLE TO RING-IN UNTIL THE AUDIO HAS FINISHED - -EXAMPLE PICTURE ANSWER - -THIS CLUE HAS AUDIO ATTACHED TO IT. PRESS "M" TO TRIGGER IT, WHICH WILL ALSO ALLOW PLAYERS TO BUZZ IN. diff --git a/games/Test/players.txt b/games/Test/players.txt deleted file mode 100644 index 6ac65fe..0000000 --- a/games/Test/players.txt +++ /dev/null @@ -1,3 +0,0 @@ -Team 1 -Team 2 -Team 3 diff --git a/games/Test/rules.txt b/games/Test/rules.txt deleted file mode 100644 index 3a8a485..0000000 --- a/games/Test/rules.txt +++ /dev/null @@ -1,4 +0,0 @@ -* One ring-in per team, per turn -* Answer must be read in full before ring-in -* Responses must be in form of a question -* No daily doubles diff --git a/jeoparpy/game/gamedata.py b/jeoparpy/game/gamedata.py index 7caf7e3..55259c3 100644 --- a/jeoparpy/game/gamedata.py +++ b/jeoparpy/game/gamedata.py @@ -114,13 +114,13 @@ def _build_clues_from_file(self, path, numCategories): def _build_players_from_file(self, path): playerNames = get_stripped_nonempty_file_lines(path) - if len(playerNames) > 3: - playerNames = playerNames[:3] + if len(playerNames) > 5: + playerNames = playerNames[:5] print >>stderr, ("WARNING: Too many players provided. " + "Extraneous player names ignored. " + "Bad file: %s" % path) - elif len(playerNames) < 3: - missing = 3 - len(playerNames) + elif len(playerNames) < 5: + missing = 5 - len(playerNames) playerNames += tuple('Player ' + str(i + 2) for i in range(missing)) diff --git a/jeoparpy/selectMenu.py b/jeoparpy/selectMenu.py index bfee40c..071fb6e 100644 --- a/jeoparpy/selectMenu.py +++ b/jeoparpy/selectMenu.py @@ -12,7 +12,7 @@ WINDOWHIEGHT = 500 os.environ ['SDL_VIDEO_WINDOW_POS'] = 'center' windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHIEGHT), 0, 32) -pygame.display.set_caption('Select Game') +pygame.display.set_caption('Jeopardy') mainClock = pygame.time.Clock() class Select_Game(): @@ -27,10 +27,7 @@ def __init__(self, screen): #Setup select game text pygame.Surface.set_alpha(self.screen) self.jeopFont = pygame.font.Font(os.path.join(ROOT_PATH, 'res', 'fonts', 'gyparody.ttf'), 53) - self.selectText = self.jeopFont.render('Select Game', True, self.WHITE) - self.selectRect = self.selectText.get_rect() - self.selectRect.centerx = 300 - self.selectRect[1] = 70 + #Setup Background Image self.backgroundImage = pygame.image.load(os.path.join(ROOT_PATH,'res', 'images', 'introbg.png')) @@ -40,7 +37,6 @@ def __init__(self, screen): self.screen.blit(self.backgroundImage, self.backgroundRect) - self.screen.blit(self.selectText, self.selectRect) def main(self, event=None): #Blit Selection diff --git a/jeoparpy/ui/maingame/podiapanel.py b/jeoparpy/ui/maingame/podiapanel.py index 67ed18f..6bc005d 100644 --- a/jeoparpy/ui/maingame/podiapanel.py +++ b/jeoparpy/ui/maingame/podiapanel.py @@ -76,24 +76,24 @@ def _init_background(self): img = pygame.transform.scale(img, self.size) self.blit(img, (0, 0)) - return sizeScalar + return sizeScalar * .75 def _init_podia(self, gameData, scalar): podia = pygame.sprite.OrderedUpdates() img = pygame.image.load(IMAGES['podium']).convert_alpha() nameBounds = pygame.Rect(90, 107, 102, 105) - fonts = (('team1', 42), ('team2', 33), ('team3', 40)) + fonts = (('team1', 42), ('team2', 33), ('team3', 40), ('team1', 42), ('team2', 33)) fonts = tuple((FONTS[n], s) for n,s in fonts) - for i in range(3): + for i in range(5): p = Podium(i, img, scalar, gameData.players[i].name, fonts[i], nameBounds, podia) return self._position_podia(podia) def _position_podia(self, podia): - ph = podia.sprites()[0].rect.h - padding = (self.size[1] - 3*ph) / 4 + ph = podia.sprites()[0].rect.h - 10 + padding = (self.size[1] - 5*ph) / 4 y = padding for p in podia: diff --git a/res/fonts/team4.ttf b/res/fonts/team4.ttf new file mode 100644 index 0000000000000000000000000000000000000000..196c56c80c2945266af2150135ccb0a94767b1c5 GIT binary patch literal 69876 zcmcG%cYGYx)jocw?Cxxvo$bAASK5`dyIS?K@~TI2_z7bfcE#?S;>}3-tXuA=Qpc4b7$txz2`aS+;h*p zQ$!d-hzW!zf!6-c_K}aiT0+Rbzahl(^^_U?9i2a#)<%eK26FvtdVey#?ClF~CWN^c z`?F@XP90cs$ts=@eGegu_m`|0T(9}|#YYHHH4wrTEjfF0z*tT865{MY{#Tc-U$*A( zmRp}k+51r8;bnuH))PBX6T;#&k(RCAzI5>K7t|3_kNTf}dHK+qZ8Zna6AAHtOo&ff zK0G+|;>FuONBt$pU$qRLiv7S#Xd>UB#7Z!xcr5~9I* z=F>HU+t#b+D!xK`5Ap}r4z3yg<(Gk9p?(Sc$JejhwE5O>)zgIh^CcXsSif<2{mrjf z5`>sjxMnV)vSOI_-M>D%X`!LvOX3%BfRGeB>)~B~g*{pbM5rBuOR{B0x^qV+g|OarU=oQ%>010y0lyxj0lp z>tk{``N|^Z52yHBjyx1Kr4m^_mS(}_$XJ>q4)Xo6G(RDag6PO&W5<=y^7CV96{$u! z9AS74wd%;*a#|sC@R6LRa?_E2$!Qfm&M4)y%q3%!)36!xOC~y&W=MefYAnqXk-c;* z&5;y4G?s>apUR^k4)&U{<4TfX9~euk$l9?ynhCsVDGzL(Pu+y$B2BY-o+YG3HqWye zX%i>NWm+cWw<0Z#;k8XT?nGMTTylOl%`;Y}cS0Wjgmi(NzevtsDyOSxTA0AIFrj?i zgyXs~{#(|q-@b9hvgMltZJRa?uiiWyXj!*${kn~Vn^&w`8z`%-txg02J?l2o-Ay<* zo_p$wB^%dmTDNrb#QbB~n^vz5$YpK{Y#iP+yz%Vep~U2k!^4|4Z(lte=wGsN#rn;G z6`KNsff*YIhlbY-Zd?^uxAea;@Sm6U4KLfWdT`^c;fKOlF~#nRhBNVsI024sjaJT$TUvMHZ`}j zwoPvD=$dIZoO|B+7hJgGqMa9Cvg^{_doJ61`MxWz+<(=9?_GV(wbxyL!;LrHe9Nu3 zegF15?!4>ndwy{6-uv$V;R8Q<@W&&E9(wqZM}P9z<4+uZ@~NkvdG@)V{_Oc9FC2aG zrJuk2%B#m-`^7JRMSlI8Y4Y46*$PhAytRYv(7b*^QgcgN{BQO7z zMc+h7fZUF9`j|y>IY&{>n<&Q|a0EPofLu=Pf0W}qRn8E~K_8d5AeQmRi7nUH<+bM?WWbkxR%f@+G;Bd_XQm|9?5TmE1?}CSM?K`Wv~J zTunYEpO7oa^<)qEJ2^rALT)4Xlh4Sf8`m{+j%f{EGY-E$t(6fV@tALyp6j{ek?6Tn3-G0xf%u+%|59g>Qf#plxsq zEc|S;m3&CHk#pcH&L!s~E_s~XK`w+gcaV$7AK^<6li!l}(WAXX-X-smH_1uz6ZH8< z$Rp%Y@&egOenxhq-@gZ_gJZu-$m^_yE8P{(;3|dB`eS zbGG~JZu{MisZQQ`zsuu#(rtFX;+f<5$h*S(f=}=*@m=n_-}h_(rT`n*88im(3^j&L z;SUQE1wV=Gi$-bZ^e3Je~dp+TvvRgWJzgVLXkK>@owU)R{PW+4{2c%J!69Q+9jV17(k=o#{xrES*Vrre~%H z(`(Y()4S3K$_vVuR2V9LRe59OGgTK?FR2-=adb%gx)7^7+&rf?_?EOve zd%b_@{YM|yXXtbHZS1?CZ*SjqeRuXf*mt<^XurO{r+;t%qy1maaL<@G}bDS8eUu_ef36^u-VF?_Ae)V9ApGPoCA?GI#Lk z(YAm8X4f-In9CM-ea1|;Fif=jjs5KJncQawcEp&RCHM8~%>KXr_1%4A#UewLR+SrE zylC;l#fz5=4yKs7t6ybe8xCLjo8P=Ob!s0|!2A`X8h8f$=zZd3o+&XNvtxp5pal@no@^M zoy3N;3-lkvP3)i^;>dkPyu=CWBQ8)saf1eA8YJG_mn0<9F!AO7P6~)0G(rNPQ4$0# z1pON+A|cQi3Fp2baZ&(UOd_BqBnnyz`Z*$tLeM0M<^GBuI}TbV(=;hYx}22cJ|h*R z6toibQ&L3|pw%P^T0>HxwWKWf38^D#(0Wo1+5q}7$&d=rMp6kniB#qOf*z$Bv`MDT zq$c+fBCuM}R#FGrM(T5aM!!R8J81yzAer2sNGE9o?IM#vyGb_pM>0jGQ%N(@(@0D1 z4`e!N1??eipuM0UBC?na+E3a+XONEE@5xM=&LW*i&n8`<1Ed>0${aEUbS{|+dKT#K z$UHJF_djGlnGU*u^nfmu=_1mL^dRZay$7#N=@K#%bcoCX9hT`*G8^e-WFU6}o_Y@G z3NjaTrA$|mvyfg*=7Fvu^Kz^n2v|+%M4so}c>#xrST-dM&vS^g6Nw^m=j;=nbH+ksHa*+%a+! zxft|jatY`yWEbeIGQEvlntK(a)ZMvP$n9hg=pE!T&^u*%7uk#S-Q@Dz%jm1F$o-uB zfLsZBP^R~i{Yc+Ot^&QE9LT*yen`Ft`T*#Q=zp&UeUMxO`eSk}=m@zkca$6=*MmL; z`T}{F+yMFrxe@eHaueuJ$j!MU=qV|EoZOOoo;*Qr1wBk|1AUTwAM`15d+ulCX>teX zGvvCebLNIy@0kb4fj?m^HO$i2B|$x)fUNbW=WC2~LL&&dyS z&mb;%0Q42mrx71K2zpGWuaO@k{R=XZdkV1vrN1JFa!(?1co_6Iop#PNV zzsT|2gXG`jbCIZCr5!;3RRi!)0WX9gE!7A?puT##8jKeJ$d zX5O64S#vUT=VS(EW@gXK%$k{*Gb1x|My9_f)7O*f?a54^l9@IoGj&R)r#myHJJZ#k z>1@w*v}Y!_WZGIXtu2}M=1fa-W`0vKQPkjos&-x?;#s$o>R=Ut>|xNx_br=3D|9! zm*3i?^^O0vpzjQ6+YRoj$ z*VWckS5+nxr6ontNI^K{cUX*)L9f-Q1(j04b1Xwj+QO3;1xBKaM)+vBqob7WhX-+B zaKeE_Bbad*nS5rRkpR7J5U0+_nMKZ}-^rQH=ggkU$w+|)(ok9wXbT5MjWd&A@fM;@f;84kPd-pvqk;RLObwlBy!FdBC+#oL6%eC#@yL-e~JQ54Hj>OLS zy#oRq9w`a8wv7~r!B}_SsS218MMMe*_I^pgeE5@(!S#eAgJVaO5$Q`pPg01d#596o z-KR_0{A0pXg@thHM5k2$V_!;X=dS=J?nNyc9 z3PZAO;kHF%e`haujO4kT1y}Z5y$)jF3f3#;zJkw&7Zs zNZVej7|I|mE8IKq1Ol7)4^;%*50@h-nnU>*v9&-c(YCzr;oGeDI?Wli-fk9mk`3}L2Y3HvVTW8ckb z*r%9n>{FzIIhczwpXZ*!_6R#NT7mqZ#+V7>lavmjr9bM3)nu1Z9mOVuZ3*d zvG2sTll_$JQ*0rRbNh3fxNCBUxq;jl+(_;#t}yoz7tMXlr3ugdDEAigTJ9TeY3?)b z;oLjy_T0n#<+&@lZ*tFZ2atak(c${PbC>2$;+o^!E#xXbM(kW4*~)Ju32t5PEN%+f z#949&xM9rUk1);L(CAXse;w97+=>}sO}Q7@y4*d4iN z7%{h>dGXtK**9~Cn8$N3vA@k-!y0neGVkP`U_GPzSRr?S-I%+MRp)-d{2iDrxo6qx z+{>IY_c+Vs7P1eIzQFu6cLC~;pguo0Ji0_NlQGM8sgF*ij|g(pRuE+3y=M)Ntzu;09b+AgMQlUU~D)55)mr9ianN_q7 zg_5Hg6dVddz=y+x<#3Fl3{sYP-0Z|c%fkj7F*1)RkLCu0Kp80X;(xW1+b7 ze9%35Oo3d8&rv2WpmhMNN~x4_Bdy|;U;;>a9@2nRAYtrL0n@mb<^BUVxKb!oU=rt* zV4VKI4`ho=a8vj+ZWTirq+Fj`WZX)H0H{>VN+6AXZ#J zE2m;o$`EPBG2HomP+BW5aGY8#0JlmZphz&QLNL#=0zC`R7_xAv5?E-(RM0A(s*y$Q z6gR5K>l;}Bj)4eiUdRsDDWSa6xH;g^iB#W^H?I;XZdlbAZdtF8Di8~Dg(wde!((JY zrHDTeFajoNI{^2zrJ!_LLw=uXL#a?BKg~_68Czg-v{8*MviSg(Mk4^Apit*=3lne) zV2`Ir6_gp&2dKg++)$55E1^vSwvxw9F{3`E0hFa}h%7yzgH5C{rJMm24=$d5g`(6eXambp^% zJjE>lmzr0>>T%CYKnZH9DHRSO0j(>6g^G~jU>0NghS_tXtOi;>Wlg1Gu*$fhCd##J z4md00Mne*Tn<@xuQ3E$JLEm}Il#b!1SSjz+-~<#*L4!w{LNlaXqDT~d8aLG;#L6L) zM!o=7o?a+!dP!aiv?3*7X|-wMj2BYqz8qvk-(lH!IhQAp#sl^P8d9X&@u zQ^|q=H#DY2p_F;Km5t#>v1%#{xF4tj;-XfP$4wcubS{OGkXccOBE@}uk3qIgF6*}ODs!=%1CXbsIIEGusOmVAa z+;Xb~HjPF@ajT3nZkn6ohW>DlqLCF0+`JlwrK4q0=BXmo&@XndLLXG?5Mds-673Dv zElWVwH%fzWw77r@XAC8^C0XBN`)FKr(J2)aw_2$cbf<8u^SB`cC7>%bIDr|dJZ@Y8 zHB#Kv!bF)VS|qZ7BQ}p4DK$(KKw+tHhiFT{4R2u*c|y5{TC`Mj6t`@|&@i~kmX2GN86Gbhme690>upxq9))*lch}mH{1}RS`DI6!!N^7;W6Q16gr&_?S)sF zO?liZl}<;CKx>k5(tS8t1!W!sDFhrDPAoHuCSqLYNEgm zr--wnhzLik5bS0ZaHD;xL<0xd2n`f6W~y-v6sVgKBw7|_UZK&d^m2)U7WPPGA!y(# zaH|aH)3p+M2pW5;jnv=B(JeX;3pmQ_8(GG2>-0$JDQ*S4 zk&N45fZYJM+pZ#LUg(7-BiaNUDcU4ms4lUm)I+T%h>ogRr$i|RQIGO8@Hz&aPNP-p zsOeB|poHBa#zb&OT?4Rd(WY=6y;`f+i4^eILVGaUO;S69uF+hyz-_S@MZMajGpR*U ztrAUUNv~3wv`P)q8a+I=Q4Jg>jYdxgSQ@ihiwF)a3Eod>r^=O^60(3J>cI5ais%(o zdOdmx%8e2}M1pB6)n2;*+^Ab?G+|(XUS5UBjV=^BLTgcD&|36h8|CUzf?5(qov7F9 z4LYM9m1%SkA+Dz$PR%JPmozv-k!T?Bf})OItrhhKYCmHOU{mi&Ghw0LLub|qHk;W1 zA?wW=g8|)u*&^W@iw=>D!K@X{f&lb-y;-XfX~d#2YjlX<6liczn;jg%8)88gaKsrX zXwe`V3|hD@75GHI3o)8ZDwRR02{>>Yj#jNRTTui=hOm@w@rMNh(n?wz#AcxK6GZR@ z;DBy0iY5qC)QS)x6b7Yf5fA8~Wm+CxX9iV+ zTC2eZ+&Z-p>X!tyO?Ip{ozbRITeZ-n4Y=VUC~gtvg^@IH3l0O-48@HsGHxISYAkxe zh&!$nH_Xst0dAvG8}X?Lty{0RIncT3&_xP5x|LmmUM-k(X3>cB}`nB0?YPDI=$D??_2` zzz7V;<3->gq07?976K*Vr&ik~yD?z3n5~eaRcp42E;}vJgohWMaKL7R#csFB7NXO` zUq~7w{64%H#9)GqEq05~VlkWSR)>rj{R$R}JMTc~L0X^1FX=-eugxKOt$u^uE@>Tp zzZ0_ZfoGlFFWLQiy;rhWtUi-uM`Wy#{E}IP&KzzZ-l-5Anc(U*8mPhHa45l*-2q~= zn{<$$S+al|Eo{o8)7sUBbX-R$Cq|Rc4`*jIYIGVSHqay`5Rl1f3fpW}yV+u~Yi)Le z$7!>o>Dk>@kJW0j8m$l^EdjPFskA1o5uO!322Vws^bobf8p72Ur%ld8^I@UwkT#^e z6lh)6kkJs023$^)-ySr&Tt>Y!81^`Ix}X^yp$msX2GNf;Zwp$CPTCpFH zMD4a0IFQfn@KC_;kMKL__uzM_uw*IFrf4fL8Dg=J+hq#)?Aks2^c|(3Kyu*CM+;fGd5$3PUp3Ft%WX^(+#_E>z!^>h(3www7YzcfD`b| z4m_J_puSTyNrK+0v(V;hq{Jp#bWX1mS3B%pmyZI5Bcuy;<+NjzyIKRS%TZ{NN=gd6 zUQ5IkwP0iL78dzE1~F>Y!@(31ai}eD@(v5ord@WI-A+qH z7N5^2c)VVp{M@L=Zh-vIDkTIG`fxaG5WPA}OO26GgSOiXy*L^Sgo55sp+6q< zd4sM%G#a5AvsxSujnOT+%|?sa4%4-GOfCse?5Bf4zb_IjL^W6}@H=qR8V&6ras-B6-80AIqfldkakDQEY^ezW?JTTMvO+m;3{|ebuOLW z>vzJ68iT%|&qqr{mcqh9O*DdEG+Gde_{>o-?hKe+@Y{(*!fc8foc(Q9f|hIcc+(Xc zD8>V~=z)!(iO|(#ih1L{nu18E5amV8;ixMSixfm7!DvZ15e^5!o^U)KvpHZMR+m#_ z@|k>Aco-LazCB>|n8LAebtDoF#v;WOu+>Vf$PNdivC3kA7qZcsLN#9dq)8RAVoyb+ z+8c{`t?`=L(wN0s<2Uh@X3ko7}Yhm15nJ9`C6-8pHXn9dIT;wl=2<`BjPKVp8vj!|dht&zE zXLqjP&(3DS{h3h6%{6I z@r1uNT~b<7QdC+It1gZe#zV#FblTxbq1Xa6=5HunoW@9?3b9#5JVliI9Lr}N<6v#3O{Z!2>S#c4c`OFKS7@9*&9yV(4tQ2A!9UAwX>q6sR71--5K_dOSb(#mek5FkIU%hK+2Wxqa96Yq#UZo`SjTvI}?b zzBp5#X{lGktp$V5aJV2@o-8gmtXsEiaByhh!dbo3duL4FgvTi^ym0Tu7w>LqZ)t4b z9xjdbFPz^p|Kba+?o}(6T-aS5vF{(AIepW1^?pNnef#t)rQ;_~o;ZHw#7U}D{E=is z^7Ruh96u(VIC4xndgA!;V=6&9|A-*}koibsePEvS$h+>4P=ap(brwqr3Hqt|SLy%E1 zrA|p?d8Yd;rX-&_cHVZa)v7mHP~ZbkJF23kR!q-y&QcikEa7vza(8jF`S0O>5WRhKO*+g)~jnd16RhFO`oDZyH$h*T+YuJU+!T{*|ODjAm;7wbfht*NP+795b;`79Jw-*ug@sW%T(Olk5~5ADx7F07 zX7=l~3!Ce@OCk#ub0W?KFxTTJj#7$NoP6QL(PRS*)o7|sPBhcJu?j~{o9oz-2G}Mw z%lXtu=TqCnW-N(RS&Evk$|idcWRF&!rbeq$S}k^SH1FglF)%fZR2kWx z3t?xK72%M9$>*x3moc)DR#p^73z^!fcJvQk^ODI8MQSg5@nAO4+cCGNGwfii z!zwkVL~1J5ET59}8?E+8D3mE+ZmbBlHm;wu!PDq>>!hgt>>YFK7Z~HUjSY-RQ_{Dg zyuMVFQo^?z*lEq(iE4ca4>{s(h0pm5`1|qZQW)>+^x@r>wruqN_QUNjw{!Qa4y#^P zaW0kFSkT`)w>{N8dr`}9Q3V%3>{Br$y#Zys0nc&tI5s4C{MhkhGLikPj~Q?8c{f|0 z&I>Z%fFZQPXhe1nRC42DKkYcU|HJjHD->L_ZC$O`bXMnzGG}OJd)0KiEmqqU_1X;V z8k1f-y7Tj)d7bVsrly*^4mBOQb4{_{nh6HiY|US_yv!AvIk_5F71cFGJvIZsQeRuL z``Wu}!sS~pS>6?1T-~#2RY9bob*Q^MBauh?f<-d$3;nvUUIM4^7^z_e{g$~ z-uCTnVr?6gZ3(;Q>@CNihktxcMYs#zz%?;~ZLk(-u z-yf%K11g~YoBoj`LV)CnBT4x9>Dir8#rjBVe0m(YFKjKmdE`kHE8O6!y&2) z+90Tx%^N?C%U)a7;#fC-+SlgoKY!(^rb4eq4eSD=Ru^4nbqUoNok=crk)Z0hv$A4g zfw9oyOy6cqR#yA0#gjt?MYc$ywfBGYS z3pP*RaK*NB2AfiA`leTvl_avW=e2YSg{6t99TAtaz2*Y*M>T6k23R^XBZdL(_rv`LuMP-#9gA8g7*gJWz$_cri(=!}XeB_lkgSm~*2 zC>wMVB@P?`ZB8(^UR%*wonb`J}{A9I=P^%+G5g) zn9CDZWeQp)%*UD1u&4_1OLh&n4DWAl&$e&T?9#AX@E#w!cKd*Rxt$vbFAw8o8&Vn$ zhKqu@XRpWnl*KK?`J3=83}5QCXh>;c*p9hDWpR*ImMPuA6g5Ctpman+M|k!!s zbZ6oGv3M}wxl+l=JtsB6vEI>Um;JcxK+cfaM8jZ8%8LpsY^9dSd`q*~)yz)`%Kg6eMO{;L}jTKroYB_>868rH+q@EbT zJ2CJYQ96NYsF$ghI`P?-L!%k@DJF<_yPz0GXxnx2!A(3ZIsu#*HT;v_c5CmWy_dUjOO!`!8Qp zr?NN#Q$J;%XFlCop>Zgl&}((}h)EPn_m3t=Uwh@1=Wm{+4|#%{n5Aqtd(q|9T02HT zpOXmt1Kx=EB1&4b#fVkxm3B^HWIi;0X+*GTy~oPVHLNt8W8gFjmx6Vx%p_RE*|mk} z)Q%seJzA2E+-T^wf!P43BL@cTxY(%`(oPEz8trz#xg2+e*!rr<2cQ1YtYXiB?j4ub zm+ss$_acL{q;1ivOfu>!)^aaf=XbpK@6pfZ)b$;Gcf+>x_AlCd^oeSJYUSDYUo@w& z#E<8(88S#}*sFOhzJ;(MJFUyYa5v$V&zA|uCiq7FHvSo&PiPu7w`rcy@Vi8YYZqsW z%fziB&lcHgY%C+#ifn8?O-g(XK32nvywVpYCSM2*?$}W@wn--dFYi$S5p9bGsAVa1 z*5euhrg3L8-U(2XMmO;1$&(lQ0)pV1`@pn-)u=5TeQ%vxhY2F1=BBH-)s>O*auaT^ zMpu_vMakJPS~B`&ljOGR4OL8n@xTh#kr4YL_bVyHBoN4)%Z`D}A7@r>8u^gow6?}I zG_mQ7J75*Bz4wahkk4aM>MG)qD)YA07LV0jvG}Z67apkYbJ@dlh{Q+@Wn3p>k_ z8_O;pec{$hyTxnvaiWR~dfiU9uYA$ejs>gAIy#E%mf?g>XDn!5nJmq&Uz=KluVmrf z=n#7iuf(V*ll4IaoLyvy2vw&%4j~Y)EuX}D_*6%WMb|DHAVwa5c;XF&Q|LizUmbUsYyX?T6nxeikmb1IUGZ)Wyx>IJe zUFWsy$>Z@Dw|eD1ijIibh@{0Tvp)= zC{=|a+!VD&97R?;rX*D%O(a;*k5H<&y$J2`3*upq^KtYY)#QrojNeu<%>C)Z>6g=Q zr}+ocPo-Z?znkXwnwYwHSA1@KWt?YSE(ocrunLhDAtliermpx@stPxKC0*JidQ#D% z1i?G3yv`D@O$RJB5+)JQmr%i-c>N9ZBj{Dm=tMAaAP>bTMSO}?mMH9<{_?g$rvb)e ztZ{>q&yV#w$c1SD9I0YPw5jPvJkaNG8pKP#*Y7qKd24pvy=zms-E8nFGE-Y7+v@{j zyLJDX#Vf8^)pUUQg>&fHdfXu~N!D&AD226?BH^Y>?iikJmduW{dhz*}@g;>u)tuw| z>kq7)?t|6*8t>Em4OY`mmSyYrl-*FqGS4JWCO=J%Ci!xF&!C@hnh>4}=JCP=A7PW_ zp-P?4QXJu%+Uj{BRM|O6O4?jf2fQ&2+0k&QRbjkz;*I07U76(21dX0LfU(vOq^G+Y zYDwRRy}Quy|ctv$r6j@oDs_`P@}kuP92DcHDFC!JewtwvvcjY4nyA2TC`bcW!yP zL*Z9B+_w0Z?x{Z9nN;ZUlvgytGW64c_{u?$J%{@vdeAb`oGp3X^r4BpNxENpTlz@i zSBf`@_lt+cm&LcmkHmk8LP%4>x@>%TkSm>AShw_lcmb(sG{5P644#~a*t z9Dm;3yn9`1Us3pmeFx^%mh9bnqB-DmMvH#=b)(N;Ho3Di;k7$sErYJ0lU-h&j5XhX z*Y!P(eGff-_ujZ<2>NX6MqeIY+>}f;H?N;u5w*KY@$>~8gg`9ppST?68|$)x`)y3b z28HA9Xr+zAi!LVK;|K+at&k5CS^}7Q#Pr$`%$d?@(hV4~}(R-gy>K$%_Rvg^%=xXk|`jo?n9#pbQ>bkwBn(Lc$L{2 zs!O9GZR_7$5GkrTw>TSBn?&};Vs|{bygieO*U#yWRaFe97R+0cX>6^?+;wB`@?fko z>9aUu;Y2X~!_3sxLv=1^TTS1b#!8(DpSfbuUJKc$`7&5&F`1if*yp;%^?>Us*Q+jt zh&yiVN!O>YQ5PrTJ1p!;e5_y;Z)dbyW?Pn7IEF0>YAi&wIF!CpF`_J?BMnTQVg!y@ zB?-Gl6Go^qAE64m@bQjsyeXd+jCs6Ez?~)Ndi(6#9>S9{j?gVk=Bfp)ty{NjuBa#q z(DsMel5w(^A+~fAS5`{|o2c}f96TPUIB^1FIofCcN0@0o{IURKVnTDU9;zYnR zA^c>%prL4a&Dd-_jl>x@YDDZtd|ACfJQgLwabMUWg{0RJ#$ncuHtPQ+EL_Qe!=clUAsI4cP1Uj?CILtX~o4DD9Wa8RWnwmlKb+TKXHz4`uGPg8a*(2 z;ST1-?bM>2%ue=P_BBYnn##N+>q$vORV!4~z!gx3<~r#bn?M-1g}jG8Z4q=B^}n5C zY743s`I_u_+QXoA#-7 z__a>R>d#T_Lh;AI9@kd8`p zdVmhECrS-H85NtE3Qf&)a`$~Ro3niLG5_Fb)t1p|JD9c1PRMOv?j`OmMJ>KmR6}NG zlL}wNSLwrdG8l=md7>c`$6L#bJysqsP+Dyv!4xeLgxb0ysVZ4nSyfA?AZgo!r%j%A zwun96z+4JdWd5Gdgkjpafb+4=4(Z(lu@?M%V?0dMuherpu-SPdNhUSGGH*E`d z$81(daq0B>tsT9)3#Qk8d)KM)8UNv98Ldvt4(?1<%vi8&`uf?S_O4{StSEW@{DrkO z3!>9IQ^|inG+`9S;#(}AC@xbh!$@NzW;#lz_4M#$5x;J656=(x={lmR;d!mdZDW4#=+?u7q6^tS~+y+&5th_npToND?2cKdUsVo@I|tf z<$hmT!_p=5%01>88mFPHcb#6Xj}%X9wQ)B(O_sW3+l;CzkE6Kyyi0apzGCw=7yazU z+b>viIAg2QOIm$6)|l|tXIEWx{qbWzyWr;Ty1{klKXLo|x{Bs#g(X^5G`YBF(zG?Z z2j>?!+|HoMxZ##{PJ_07`7LScM>pmE%>6>KkW9rFqPAu`o6@DFt<$E>fj?ooX5d9| z=AIzK?XffL9{0U&cFzok**b7=;IRRY>+mu)vlymG!Dw2$T3Jn3R~O6HmUgwym|v=& zhXDBq)e$CF?>jq#fqi;Cx&gXUaa`#hwu&kImi6Dxx8hU7p-M zJr>Ew&6uOR?1LNUt*sQjfv{Px?~e5c%nfOWWYG$a!r|@`>zwFAJN8VEyUda&RT9;k zlwNb4Q&PHXJ&p=DQyemjWzHgXL>-CPnp!>{jGPl@&o0gEetNz$S#8iuo{QUerUOPB z9uqT!L;7nubE*=%n_bdwU560vyzUmBewUWvw!HlAh>uq zQ`|m!hq^$6IOcHfE$;7%0o?iSz<0TZvh}-KnAs)EN?7(_%VRApbA6mC>Sb70RlJJj z9QgcM2PWHRRy35bQ?S1U>v~xc_BBaH!4GU6z{nNIebJ5UdHLLe{ zt%j1ht?^6h*0>z$?yMHCY*?dt4@t%C zukTpXU)Jm_Q>z_P&rmsM2$j#;c-grdnw!hr>SWOF2(SOc#l0UazON`I72xqKi(hmX z^;cH*+_SC2;-9->dCG0VyFq4GiJ`>Y*ZVDNQ5x^tzjr}(K+A^Dd1pOFJzwPBf&I_G zm))XSW3fgP#)M9|yiqK*@c!xyjSex+!*n4$4t&s2$Zaf!INhgB82C=~4C7;&@r-5@ zCbYX-3cO9VGiw4?lRh)6yxZ-r9^SO$u9*Xc#f_`)E}NXt8!Wc<^VeUneoHp?>VrQ$ zsF;z8Rt=uFYG$?7U=EjNr>vdg_w~%Z`GseX?rTX_-djG{=<-@iZ@svG{)(1aZ!(>X z2*1#%R{39UA`Tj8O+hw ziN}s$#@kE{2Cr~iE%{lfG2qN`x1-pKyGDc8K74s!*OfmQ{py7q8~o1Zp=)d(`=U=? zv?ZEdz5C9qXEx86F_Yh9Fc;`WW2AHaS$&(I8~t|lS1(>u;0u*M%;=bK2~%z`>DxvR zjUF5Qcv4Z@%$FW{<(BQU@RP;2f>nZ$hPdzusD@|6%?7W->HPlZjDPlPsRX9n4Gw!K z5wK|)gWhRS8#7%uK#CueAb+c3Ilg&Vm34QR7`7eXE)XmXD=8D{B2H-w#WmG&R}~cz zy|<9013NrdLcKOblQ$9-;8E{^ryMZ;rtWuw2u_XAsdu5rX%6;*idnOxZ}t~i9g}&T zPh9ec@2xWgJZ3}nS@*5l5n6c3`B!#racf1LE#$1)F^_+)?$SM7#e(2%WSagxdRL_% z4idmh3LMzT{xZ zVbFPb~>MIEvHJLZk2hiHMXFww=(+3!FM0Is43>Ze`gDx1uWUnzRoDw zE9V@3bj!3>yFcB&d}mG4VbqGDaOaHnNqFbL;CG3-CDKgeACmT}>9t+2F{W=HyRJH3 z`{0xNb)wl>aMr@BXW2!4zL(9rm(oZcy{sD;)BHswz;`&>h!7Y z)3dlLU6C%Um|4Td*j{1sK*RKzRSmjmu~Ii1&II>nG1Y?(pGtDlr12hJe!2$MLzgk* zVaHnxZ7%Wz*XctC$JV2eb03V4ryHgdprqX~Hgxly++> z^?GYW()(SO@+!ZjMpJuN874S9$ZRuAJZaU~yINWxFu29{%Bj`0ucbe^mj@0oc zDde&n*hk|7l5zAOpVYW4cF&;}=XP&EkW@)L$Bvf+!fPxG7}MqzqARgtG(Dw8tS>pv zunBE3=G6*Xr1eKzxI%~Bq#nI=^n+~B?pg#{e?tn`KPWo!ZPZBCdV_SYgnI(~Jv{DO z;fAHo$x99zEnx};k-Xf*#=96ynT*+*d^?mqjBm}k^)p8|Zq&zYMk%$H@oer)Dmsk@ zle5@*_P6hjwzpd`y|dszP43Oc!SB{)TKwCJ?@o)Zg=HvK9ha+`O9W`OeH1inj0T0 z5aS+$(3|M-E&qMJO=EK5g*)y6d#__*w9Kb9*gZzIbp9i&m%V#^RrPyuPtgUB&#RsN z;0s4n%f22x@?^$kuupqr_}c2bm=*Wbi*~i%IvX;3n7Ck*rTA8EY1Z~Pe3d7{1X#76 z$FtQYWzruZ_QY85L;FWG>|@kAao=vNah~$*r{I|;f`ddvMy0HE>;E{^9ine(XzCY* zhgypL7IW^a^>aIZ@yFD+iPqgj&o~EeO|XOGQdc0GF1l(i<LO-&Vq0QQ;-$o!i9aR2PN=x= z>=RF-B*Ahu`0D$%(BmP##?|54=6W38mhyxckBcGkssbT3Szsr#RlWjUDAm=FDC+9f zxk5@^Lu*$ahEc&C1Y-Ojr+x!W7EBZT*5Qart z;CL@vDba7dk86Xb&UkE9b|B*&7=re{1U4^u>w=}3q}wFLgsw}H7d3=gh0W~nm<-ID z{}?^qTpW)^O*$qvJpaC3ljfGzGXvvuhSlMmNITGGy3(YWfh)8w|W1?I+yMF_vqIb9$$?iu6gE@ zeav0VhMN*elhy5OJM#B;q2cFppYeZJT!<&NuFTGp|M7rA6Tip8oMU3RdtJ;quA5w# zk3kzI%!~M3DvPnuHp1?~H+OL}k|xKi>Z_BRn6CdJxd9AKmlCTfgissH%6geul4mlbctLJ~;aKKP|GC;68Tr zuH#JC3ny3lJ$NhH;ym~5(L27v6L7dAmir6$wW1fJff~epenrBXVA)s6H}ruDVL;d> za3mnI2}ebpDekGI)|&4F#^XMEPkI8jaap{-U+%*fg zPigz!Z67?hw>KT#`5<$VvFhEGYwKbrd&&G;j-G!-MNu37TYZfVuN*l{CB8_1*P2I0 zbEBWU^F&wOlqdhebTe^0T;1^Tt#{sa_F1LA$Sp@-|Kf)|<%PhAZo;JBjVYi5+L}5J(6k5JDIsgrs4w214oW zfD45VZcBht=xr$k+S_p3+tSj~MJJ_1`JVS2$#!V(_y7J)v87{K)_LCdedh1^J=I0V zy04=D8qmU7ayc11FQfh|ArTJ^%4S_@zQ(Cn$S?TS3bjo4u-V|#DpV4|U}IKD0+>b@ zZJqN>H5U(TeBj6t$1fb+D@+;f_EX1)61{zOSCC=rJ1cJ2H)~berRdvMt4<-~qx6Uj zS_GxCXgXxk3%yclQmyW4TXyo~!H#-z!eoZ9&iY z7Q~_aS9^jHA|oa?A;4w|2o9E*mXFhC@CKFg2zpDv@k!kge_g6x3Dr$OqIvAtQf^1W z(3xM7@?U!oT2eowmxz@LXMV-1l{dDx-?;UZ;{I(rW*STJKvCw@NK@sFtAb62{BWlv zAJOHUTv`|K_8zwiZ#MUNok83h=n15r5PjD!^L3>AzwuWTK=slDbbqS!I=|h~*SqoT z-@fxXm3sDp+dp$^V_(8gax_v^s=U1XyjnH#~Oy zqL)g>N^>%!R1Pi6lS_prS|O4O`OVRYQ~=#NhUkcQXCb#^<5Nd&&_!uebeSP1*Xn44 zS*GcwysH0vs=wCO-QCh^io5P3dF4~1fbWsh(eK>xT#eqT7Kx0Hp0NN04Rj*My(VQ; zZt}`xO~tX}*X?VJbL#8Ye5H0=uZAY$l)-Z~`iMMM8cycx>Wm`YKpDoLA>eFxQgY}6 z>4zAltp>0sd-BiZ$r;fe(TyU`Y;te%*(7I~9jaBqy}`r5Q^CiA&jw!!z7rJiNgWXL zCC#L$P1ZzegL$pCYcOW#bq!$E_By1Iqky=6iNTT{#Cym7NMH=Vs~{liCpp9;peB)@ul%l)Aef_lqz2#Q1g}5yH}6b1>zgm9d2;} z?yc#Hm3#FnW9#hEfi{mVR%7?vxZ~JugY|h=%z?fab|`EECAYP=w!6mT&5w00>3{y= zkyOa$DNXO()aq18X^$?{H{ESf%2MrHr&ct#!|08=w))-UJ^h8gWp!>PMtlKN{JY#M zxNC?oF;dEY4v5gnm(6dRNe=UsIAcfcqGh5P(HYS*A}+!RpECe;uQ4}(3`wnw6nJZt z-UwUqg`6VxS{Nh`wwEBjPnicd8w4<_06Qp)0tjqCGvrTRdBUyM(V~XW{uJ<#)Tq_m zTDaoF!Eqf3_ZD#pI>_o@UjUsHZAQ6P4PJE=gJ2j+2~?HY)xY1PmVNavBe0!oz}G6K!zv*quUzk4SXicK0z^Pxw-Eyg=!&!wlRS#CE> z*a(+&4+GMJulMO8z*3q?C66T30g>9zYyg0D;J}Cx2m}PgBEJ;oOyT>&z^#S*g~S)+ z41a+HA8tLC3o1a%m!B@L@~YI|R?m@uwUs>vZH1TxeT;i?7dkHR? z$R*-ADS*v4!u%VO!{*U_y~x)JTSS-IzZhF zkyj41as6X3o@TA`kn)6*L+X?WX=F$vKqAPo+3k*+SWP5mRVr!lHmR&yS)(N-9Dm#$ zlnK&x#x$fEa9!GDv?V_zJiR@Qb|C?PU71Wxpf9O5l8lggI^lLl@ouK^CBVMaoE-oTH zha(q{pFiH{;lnxc_dGsx_!k@QRLf|8NW1y^4=(=wuR0)mP^H%Vd)`*0^fR_gn*x z`CzwN9jQI}N-5RiCX#H#X$`6**!~T$6 z`~Wgk&jD5p`dLL9W!O#gjS0UoUR9`YOJGAGWr9&sR&bT^C$7f!HHbmNE>fxNMsPVf zpIbNCRsPBieE^)Koh3k;TV4J`#fVw8<|Jx*w$~MLkFGH})Jm-^tJ1r<%Z`5L@WoT* ztA2C}Xrj0Vg+ZZ~3XRsi$c~;S+feuF2+$)*tib3&;mjIpy7(vZ@7yl}zDidTsbID! zMERt}fgvOq7F&eR4BnCrDS?bbr?s&$AYK5U7wRyK--`BWh3XoK`B<|I7!~mWl92My z^pPM?vT(m>k&ND5K0A2VMa6%FWp)D(s7->De<%74`3O3=-s@1?2~=Kp@i!b5NH2~* z1>sSOG;~5?O5#s}>zg1sh%OjA#8&5B&Z@@@>Vj$CxGXZqY9tXqx^AiywcpT3t6;WY z$)c!8&LR@5IaU7pvpsGQ-Lw%zr<11@24}hNmd_jpwRrs^(E%%x#Ck>fr{%7TUoAg1 z1+o)K!KoGl(gxQ2E?_Q|LQR)P_)DtCco1D8FoXo=e0UFBy1$TNKLbKuNEkIf|!wdB$UDEzuhS{=v7$#6J2u+|y4LI52v z$)P|Z7_7{^m(HPaETJI8KQRTLh8*RzbMn+6^b*rg6C#xW6eAWN#z^6cChN9VomTQ1 zqgCW`Njx^a2ex62LgT4&|s4cp}rNH9eAEo8FZ^ls=JuH2rk?T>7o_d+EQVC39xPSz(6S z3^b~fs0*HTn33O{HIqb|ipqFiB4{p}3(AC`fpy+rqAx(8is4<@R8)O30+92}eZ!Z_ zgQSW>#vG=qk3OF?ORCr{Q_0?9P4XLuz1Wbps@nQCcQgmh5WoY=g3Z8p8f0>H+GoE; zVy1hRuU4sIC3nh23;vY%_az*WEjOGPNE&q(txrR1Vzq-ylR*=omVoJz#(Z^Zv`4Es zbbOt`xGuY?T?Z3yFP#9qZISu}rkK?et4pOdksXoak%uFcD2?`|kEBnh&!#_4b2;F- zwiht!3;AGp)k%Vb{JbpCQ>RH@M4~1vZhfN23+fr+00!;N*P($4Ye-f-;1rqSf> z2CG)4(%AWv<@YZ>qgJ16X)ajQs$#>gY^@3G#aSYQ9wVOvM8sUFMW93UnS&{s)Yl}L&4V|5 z5wM=$1?jN%m5E~TCc>r!D>K%A#kY?Iz!Yy6S=Xv}Up*;cWMcifu){3ifM$~_HKCT4 zHmS;9T-q5os(^2I;^dWGKJ(I{O(pWVq0X+XT_K`W3Ma6&I8xhow`di{zUF2Ru#0#$ zJeKmMW^cM~pa!3>vqUZVXX@908LKDOml_Eo7z%~!ayd$oa-?cgjVX%rO5~jgN#dT2 zQAmfTYFokC73GY%U~VjTHpe9+0ba^sD0*mHtp~OTPDA6YLv?T9o5pv)4X{&eGdu`@ zx$Wvr@*!!-Dh4Lp1+6|G_QFfNST>9Nj#vgQpI*My=CsmMiSyVMN41olX9F0FAK-cG zCo&H0_HEa?DU*7*dks&bcg34?K>J1B_5Hi=@`Zp$N0kl+h+f_A|&!Hi&!fQM`W7ZKA%Lnar&RWT_tP(2vn{uXouV=2OB+6E7*x%+Js zpo(xJp(>ntc`go0=tWdb04PWM=aOM>bJ}j_VSYr%+7khY^OaMGi zC3TA&SnTa@_{<$^8Y6b#5p`Yo@&m;ht4%D|E8;Tk^wEOBc}KCX*c7)Jw#u4-=8kW= zFS}wwDpNJA-EI++UexuUM@tc4&(sD!DL+uJ(?i)-W#*5YYZ@p1QvSovLSxL|dM66F zPk4f)HB~$Jn-32e)#~rP{~z66Il(F4Q&xd${R!xu9!TdsT$(-8|4jeO{crbEh~KVj z_qB5ftYJvBQ4hN>9b z*t3f@)&#U7;eTx15i9Ej)r2V|s(`x69;{fw>eU4W2ObfA8yuuAoazrZBzx_&Lhs%E zo6X51`$}f|Rr}Av`t_|Ly}WLC_nID`S!L6SOodcbCWj?4ga#&3Mqm&r`pv4ZU%xi0 z1{OSZ!%)W~eWjIoqs~-(;kI8ac_(i1+| z@2hsidDZL-!T51<{h{CmZ0m=1hyrjn4>fPl% z;kvlo6LK| zCB`6u6NamROgVyeXjrr)w%J&xR62(k6^%>r&?vIVRD=3m6w@rM_5vV>IgyKh<11ZV z6F{V;3=M_6#`Hm>M$^;OkqCrTlA^r(wOgbn;8rW`nVC5N)Kn^^RAk?{VF&tUZ?Z{7 zYfQP#V|`}R3qHMX^JK#1(V3TTH(fnbKI@ap)Q;20`qC?JCxLHHrZh*-ymB72&}~E% zJwxd+@_{gyAg~~KGGG<*QM4EDcLrcoj7D+Nl?~%RwSm)YGPb&nUsH$$mf3LBO*_>R zaVfsltyF$L0whN8p;JEcQ9v;(gAdMb*cPXya_iX}9!e=yXh%&jQ7e?8Ptm106bL~ zoVlQ>861f=g=1N-e#5oTuiAJ(tqMl_$d{N~mWorp*5EZr+Oi&Kc$G`j$M&=&YO^C= zAWd}EojBl}eRf;D&lolb)*m=6bkFWtuF*t$xXr9M)KL%ztk4&UG$+A@v=<~~-4?G7tJ4%^b%_HVrX6kQVL}t9`ZOD4>6CM$s7M>OUTKKV$w@-RR zdRlr``fKUOQXVT~o`^#Mnw9)P})}UKD>8*bCs;v>E?xo#;l-XBY;96dQ)kW4oYks#=S(S$&bVe~)T>vtG=J{P zx2>|O)E{rXC-A*TMpT(&d(r8>NtL0+vD9e@U3ZgR=g7WvD_Z~Suj+Kxqvhw09rI3n z3DLLIX#eXeY$fg_Y~<(3d*P&iyL8=0wTQSea58Wv@J!(4z~2Hqq)9+v96-coEu!XJ zfEYL*vl-yy!yde7{<6)btMjhvG!pyf6Sw*(PtN9`*3N> z0SQ1?TJ!6rKx`cPn$jqc%2f`tGpP)Yj22=#n=@;VKCx8ef+A{D>#~Bw>S;uGkH)*9 zCrcG-iG3iJD9zz-?N4YOLSUbygYlN}m5xklYtO2PH*m0X@cRFWL!Pki^uyPV+hy7H zctuWJ`Z0PNx~L+=xzdq+kO)1*JHaClxlg!B^2Xpv@Qe-_PZ%Ld~k4 zt$LVL092bwoYn&W>&-XMRdfm~e|BHPVr+vf z1AJSoaM;zrVI%hT7xD^N{PRmOze-n2CEsuNxxQfqvL0o?Y+84Cm(>X{&nug}UK3D^ zTY~6OiR87AHSphOfgu6Yh9_&=ZhU0fg_K05O}}?lHY0%uAW#q5;44HUI!*onCbS0# z=+=aL-$O96f%YXMgvokv?2QD^%?puQJ7grWf62zbRc*>R?Ux%P@Bo?I+2ut|);B~Q zORl_Of8Hb;U9zPyVX%*J1qyq^K(JOQRmU=Vxt#pL^r6=-q)py~cir3@Dc=BA%)Pb& zh*BE{My5&%sj|arw-aRf=*2&y??4-a8&JrdrGU=k^JF~jo*55t#}OQl$BWrl6)vAN zMnM26Q|QtbM<&7tO!DiDZD0yepnxjQF;g=D7lQGODh@7)ejXjllC`kAp2Ha6MX8Nn z1k?dvI9%JaaeN>gx@n^h2ph%MzxIq*>T)>smOpA8E4Kv=YK1b|(pbolQ$~?Gk!V|e z_wsHh;1qw-s+K9z04aDCMN9g|fX){$H|rj)FC~mhWn*#sdRV7p7tcYa?E9d#8=$hL zWr0dj2`@*QWkx%%qzhW|=&(Dd{r_#p*!8sM0;Z6MTi0`#(FC z^_%Sy4X_kDuPr}Z{{H)I8o8n#nQmCu|AvgObGMAB)wi{*YIMlObcfyQhEshPbVE;( z|BkUYrO;L8qvm_eKQ>dG!}KYdBnptB5PhwWe33`d4I>Y9^ zScGP+^H)Q!e%t+ma4 zDVJJ6hw`;fs}Y(AnpbpB_jZBCho15ta-0f5fA%Y-o0n;3G~_b=44))`dgCyGAhj9@ z1>7MML6kD7OdfE%PL=zc_oQP18x}G|clL4=YudxS;xo8We5L0z7 z%FxV0|AANx3^CUJm`e;q%jU$evd6ls zN)%Mw;33~wyZ=k02IH!H-T_?9o`a{O*317`<>EolwWGGq=a4A%0$iiJ@H%L*7ZnL84MD#q zcH2RQaGu#r#lKF>FP7zktne1bC!G3pjv{UKLt1G?kIb@90?(_qm|?$bDd0z9B3z zN-a#&|94H@$&sj@)xPZr>X3HAuTN?ZM`2sh|^rXmTzvbzZTVX%{MRu%6ic3*A7l3Vbys&c_cGZA0xC0C;myt`NrEtN#hrGbPe z=ys{(*Y3^%yT5O!KB+9c(kL^UprtCdN#iaS5?Y12;JoA1Y%f~7Gn}#5Tqeh+Z#*f* zTv|(JMonr&4NLVf<3Y0gg=XVW-`?cNl=r&#em~I%(wiV6=E5UH=qxlQ z%*OV{4#!T#C^Qv@?G@IANfs@TO;ZFv3$ZbP2K?DXKSo(h@{-Hl3|Y^I)8T-3|6whF}JXLslzmlnu(J05!@}@EpK^ z*2o*=P4W0)Z?d3=nUMvzEX`|ZuW4vwqLMey;fSP&!3P+UewpHfCxt5YD99e5a;zD` zW_q4@5q7qU^&JVWfIGnEO|1nXo1N?pIgWs?eAjkQU%!)7u0o5e+qNlL3_MuS&w*R^dGiGlNf z>j9eAWAQiiM8k%f>$-e_E>DlHcUKbV>a6*?2JlJGU3?#~U=Ksz^C)p=X~hZ)Dwujq zBqtK7$<^hubpfKiy`_7kyJy69W9npzB<5^KY~+yPI>T`T=gU4M@{NJV>5l-TfJh_q zh+q&TrjX^322hid+)zC&XzUk^rF4Sjc#C7jfV=Bn2YeBm_rtQpRvx}pWG}0by)s$e z%hUwB)tTMDu(ua<=Rzt2@Ak!Kgw-!N>|XE_QDk{)eVbD)KX`2(;z3sKCk<_ z?z_5ob-&Y1s{~}l^9Oz*# zSJ=>udSUrY*p10p9bDg9Y}E1o#FA%IuB;o%=PAZpcbb)Aw?;kElUC{!^y=e}Z1PV+ zTAGv2lc)xp1!(JSar>R8pemiUYrhR?U^KRRkgAGmKbh^`mFiDU>GJL$jwf9?5^>e zOl`xUQ6+GC2V&+(@}uROCp%V;D->3lMkniOT-vw!DWF4DGc9e3pKO99)l=HhS3e^l<6(H^XS%E}&-j#cGcbqIX0 zD!8et>h@Px1b1AZHx}J79X&Y)cU&AWs`*ZDe=Xec-^MmgF?Vc}YBcg*e8aN{_mh(9g6gEG2`YvXdF;l_Zge|!JE>pd=OcgpE&-u!TU zn7(;U-FoWzKwn_0KPeKWT}{68R$fbtxO54#Hc-Fk-4A?&080m!{992Qxs$yPlLfyq zfBna3E4dTS(TC-?nJ)JUg3wjq%(z&$Al=0~3(Fq=tL{9kG}zsRX&M->ta>o2!e`P2 z@WyaN9*o+u2F2@V&wcjlg4@!R8)kdmN0Qy?^tzo_KQeq-t9$KLx6h7xVO&7KS8NHI zbplz;Ylaa#QiYc&7=sV&jcn9G+knh9w zchC{$I`qy^|HH@{2s0R2=kRrmHs;na*Rz%DhnUv`GKOphqz!OEvhRNh2*cp-e)@Xz z!gcf>C7pl$+Y8spFGJi^eVyfsMBfOa*~Fp+?Wz6D4F=GnhQTY%by z6bHL!<~JfvSHfvS7ppG$XNqjpX*lfQ{HqTSZ+WsWuS( z)J{Vbj70LniUUf49Ab7tM`b4%m=*l=_2x_S*U<%LC$O)7yZk@%um2{q6WHswR$h;* zYkyEF?=>y*n7Rdc#IL zU8&glYAG70|MBXAlNgNx{sHDI;MUL!&^h)0UB6>(XVv-6r2kbVZ&kqWbNOrC|5^F| zztrM-UzM4oV6nBH9A*)P&fjJX{j3nN<1QSExI#^P26(gY~l@$PeS-H-h zQTBTEEaIH%tBi!$>u;BTH~;#R%nGpAZ@ug~K8x)2cPiH*(k5G&zdKs_yX@Kh^!4V- znZ}X%FPOi}zW(in>lGcqUT1UwoavX!yExZzSAw4~Q_6~HIIaFrI-9P|dSN|jB`r~w zGU0Y$K;RG#2sA{&I80WE6X|$?3^((dnzIdhYZI&`ctV%}nMrvw%XO((IwB~Dr{c9a&32l-fEG-HsdMYK@iapzjs&xnVQX9`k9KrNSN zfv0@9G~K;9WI5!91FH%c^@X~0Tu7_kj!vpo0`m~{3L)Z%-}t%l%jIw1c3-Jep-_8H zPB%4t{)TrS|2`EqsYN8k-8k4QRCzSjY#fSwmQ^gV({q8HEv=`d4jiJi&) zV5lVSbgMGDRBfOR>|a&yV8ce)2Gk|jHL!k6K#L-mD1{n8QmTI8-77}&OTU~q6? z>yEyGwnE+Ta9shuF3lC7AJIja$km*;02AH|%u1yhKLQF0G^YjB4fJh7LK3_MnB5ev ziN$yj!@;|@w6u0*yE?O^2Y5(305zbe1msE2cD(D<|HF_K7 z#p$itHi*`(CV)da#!WkPLj`9|MDA9Z4<5aOCl$M`Fm?_wOhKNCCmNqze|?x7Svln# zaBkv^M|@D#8@F{X%_b~rwaRQa*hRM`-}Lj{8i!Nv*2X7hb?r^G83uoAM#LV8+PP-W z^~dVfqt4CSXG8kinxBKczx2|(oFQsA0K1Ns23$*=x;l7Ux zzz=>7o@0Clu>USlt26BIAYX_ZaO{8|U>-ye(7!w)3s)J}bs?m{^1s}REh4}%!|Pc+ z$$IkWcH=U?KWH+FB``WsrLS2ANJ{gLJ>R`KuNP^Rst)(6>wju9YUHxg-nMW_p|&^p z+hBa70J?=6ipt@R*w)XCilhpjNhBSr-%mcu(+Cv`ixOr!QW_Ya%P+rkL%UTXH7H~x zty>CH95n$?^IZEit|%pp8i0qAqTOe&NbJhWC31?4Ph-@;_2rx3WYs`l=~`lIDeD`| z47Lw)h?T3e&JmfrHI@yUc`|o!BuF?{+uh#Dpq=QR^mcczn^`tkNGBW9O8tx|y$%u& zFM@n=y&sd=L029;VrHLUqBo{Z9+E-us_N7L#%Vwhhg~jftZ)|MhH9k1da+ekwfY;- zjZ{6{?60ueOUGOV=ez;H_Slg?*SX?r$5(cx3Yk2l8UfP_6!TX9*yu8&rgn0jvz=c^ zE?K&KvY5+9<6@Ck<`21jiJ`Uzt8OA z8{;iK-BUxgja?Ik8?;w9cSWYNORl^o;KXsr&(LYg#CZcW9iY1f3Q9s>hVHKJCoCrp zXWP*5(9rIkLnFgWId8zD-9tl5hId~v2qp{>>&sVgeg>9h6|tk#;BWT3n?tS5jddA0 zm)|K?C7eXaxY9U8ih=d7tFy6bqORHA+nPy)RPX{Rv3yc0otU)uHcc*XnqYbx*mZ@q zga&%}%C2ewcs2k<_&Q5xh)))y%Rm)l9R%qg_=c4gPU0~&E*7MX)p8~HX3q(0kl5E( zPf{jbBp01Ad?c%Oi!&<_TT}NvR|^BHb^g*00@hsL8$+rgp*b_NjnH z=U2dhN%6j0fm&S}7JGt_M~4h5S0-AU^%q7S+CH;sWvxjr6wB?@eLhf9<@?H0<-_B8 zZR3Mzbmt#C(ae!?E3~|~4;^fXE$1NKcUO)SB~q=a&rtqD`FrI*AKIDwFxL{i@AQLb zZ+t>VE~zW5n!9VLt}hrdDkMV4){~bWAnM6ixeoyjaXIm|(w44K#AyW%I6gpcg6;Ws zlJxih^W-U}isYDnPJdd@8S<_1kz?(1?fcq~v{L{U8P<=QMV;MIIy2naULUZVd8DV2 z9Hyh0u~cACZLS|Rc1pVKymsffWVBm7XzcDD8*g=v^HO7Q=m7V`oJlx=Z{bG_b46th z@i)j`;gg9eC>0C|BV5G8Comx;lTyK&5$nbU-(g`S7IS1P76zX~FLo(7@DHEbMMkKS z+gQi~;Gb7&FObDu9o0!ha=k}tOE)e{I89T&Xe_2_+F7cX${eu=A2F=a$<%z>2-AyU zhLkot?OVQisK3Tx*xa>$P!X}#s8n@;|EksS#VV6jBN}d6+qpdC3amPms<{<#ddAj$ zTjr7qy5aS5rlowT5UP_H#B#NMQ2Ac&I1&v1$Mw@bn}5p_+pk#?3ICTT+8)(tSNVKK zf+99v`hXV#zOqK>UtUXGNt`T=>}@&Ra;k-c9*sO5A=%b&m0scvbf-kEq7f0Nl#>AE zXey!a>u%yTj0L&}ni7ezbpxF3V<`#2+1OOd=_zYpT}PzOYQ1Xz-u=THC$D1KRGF2+ ztHGQzOlk(f7ei!&^(QW|;#C66wGyuooVJ1hP;9U^Z2e)8$eA^PQv2@3?vL zrt-%>|M1A}&lFt~Hz4s(-+upBuWjrpCn1FK^HR&M?m2_Z zAm@`CTe&i!*lmyrQz|~s@5?UhY4=$4+m<%KFj!N38o7jFPu%A;ndI^U`r)x7=bwD0 z{P(+WY#4labmsHVAoReE{bx_Sapx@u*H6cz58n089k*OF_cG+as%xJDE{Z8)Q>hrH z3v>_7;neUNpm(8zhx`mycvLbg;Sz3vnji$}u+>@;^g!d_XvrA!N|Z32eD#`DYw}Cl zRxes(#vJ0ragkYb_6v=f>#C=1k)K{QjQ<==vzg(A75@LTYLp^uP%SBWp-$pYm;$Q& zm0NQqnBSaRQSX;3jLq4mp4M)^aqqhA)06*CYeO~K^{(-m0UD-*TcOL{uepBD*8QUn zongGb1t8pG-LZ5jkl6qH{Zk{z|NpuS5CIrT2lo^12FUbmB>t^5W3&dXd25%I;_L#5 z*WNm`w;d59RR2hCz-#s!J9LO>4D?1i@q?z`PPoYJkNAz8HIyXEk&tW1@#g;iKEB^; z<_L^~D+9glbfhz}dF9GYo9m!fJxB}On-lI$jNyZ12%JX-+<;GCpakyej1%ZHd)5^~-0r)fFvXqjtxWPXXqZHnim<)E}WZ3=`rll0iOS?cf3%wNSzn zn@_)Va))0dlc!#}>sRHq?|ie%VS;Jp+MuBG2M_Ow^0@|5May9h@tx?29i7?3>(hm) z=FcDa)`r^~jnWtr{^AdSgi;1J-?;g*?lxmdlBc>L=MPP8>{Kg^d1C#>%E4Ih6gVn{ zSUeVm7ABk5T(nVxP%1TS$tz%Vb;L3j0xL|$I9oW6L*$QRNJ~iq6G-)XfkSPka1aS| zCgI%y#Z3Q;FcNfTCF){5O!5hsYK^hV7`Xd~%43XMrb2*DW-!Val)Lyb_+ti?B(LP8 zfYorklz6uJmF9PvKWe6)ExuBGr}$BkBEoU6%aN%!T8j1Ul&D?ZEF$wZ_ZBc8z4_Mpb4>LETj;8LjBDKspWDadvrn<2@Ld)mf-+xZ zAi)1#v?bA685OnweB9n+3IH}4^LhI=rWN|f^*)%2WV|IOqC`9(Afd$qwcjc=$OJ1? z1buGUeI;>TGs3C|&dZSzbRl#u^q9~p>4lR@#p&2Ih!jNt~T*u_! zX+At6O%NvDgK++*h%KnG^!?TKtEcOsayr$~*3sEULD$$+2W7R| z=2p+mt~SDQuby7LVR{ljShsq^y2*G<#-k}lEu`EDe+Q;kr;Kf@@q?!N$=o{l5o+q1 z?3l(68oNe&mcoxvqjk`*y-4{phTk9yn+&y2< zzQ>j-5@SY_`uueXy;8mQz5cJ(e>Q#JbjhKpo!h-<#%Hi-l~=k>1$!p#ci;W_Y;;Dv zOiVt>ck^ZCPs$$_6jFsP^YZU0?9{7)PnF`5sQ#$I>4U~#iCh@gDs)H&Neda>b89FP z^SWpUUnnrB%MblWMjlQ&Bs{Lj?ntOjIzuZG_9FAp_FLnVH=S$|7)b>OvaEl(bR}iy zUJHE(eGpweU)n$rSr{yx%jLT*-JKS)Ki5By({$Sc^^t%tx4cmzBUf6Mlg!TYH2WHv zZD`RLRxWRD^m%v@8%bphw)zakiDXEdKqIigSX>XMeR-pgv#gesP1e>&Efab7 z@wtFX_|=DeUr2F{NtqXXKSew$?`;2R`KgD>f9lAJ0-9Qf+OLzDVR+3qfA{JS1`i7I zP`8C%cA(d}#mzBDC3PR%|L{YbCz1w{0$qhZeDoi`*Lj~slE?39uhoajzxhkP{PuG2 z_pU%Ua1U~R1M{Y%;O{Rjg**fb0{mTzjF85Q6=X@PHRjC*l}U+287q)ZBWaECz0KOJ zfEnY5i_vd^y8ugpS$Bb41?10&AHHMQ8AjE!lQvjm0UnM;Y>wq6E zq&vt<_dhq))$FidIk5Wq(>1=Gcib~nw`yefZQFxfuXFXziF~{-*LKAkjZO`v$kjV0 z>f-(QxmK$pw|@`|b+z<9GMxFKHF(wb!R^O~y7z@|t@rP4s~g=}7rxr)vXJ$GUGQv2 zUHE|60b{ly|K0)C>pqZ57f~!Zxuk|{B}Ygq2pDCNPg$32juj&=rGyu8gnH;~dpF*w zFEKzAFjx%whkh}74kS?Bb&Sr?CKwy_&qisH4a#u9{;~pM)D)IPbuXe^((g;?A|~6a z%Ah{QwQj4UGN^BS)L0qRciZO5YzTdIYYqldFoP#f?&#{$>sMu)IY=zD)WU$s zj+N~EzEE|3pNL16p<@8%Q)tc1cnYvdVz5cXUBnqmN__!%0YosH+{B@{Km!YeK6a6i z%O|-)K!tK7lz<1r0M8dL6kgIL@W_MW`PYpG7;W-8<4J-v*hw8o<494`Pd?%ZKDmjr z=aZYLFH8d;;OD2&4J$AHWD;Al%l=+d31%SzO(X}1dY~(pOY-aj(7*8c37E<);fW}I z<*z2dP+)+>qCX0z0E~bN23@4^ybFisF8He-;lIk+gIcE160~HxynDsP3;6HC8(uoc zQBt$SF5>0VZk^p{CsE4SY8)}HHSRK=GxAsvSgUeGxfb|^1QSTG91+W=mXGwVZQ9nl zVOJLL(UBndn|hkB&BjUvi9l@J`)^A{I7Z><>dTByz43_a^dHTE;2T;>YlUTD}MpM zBZ^JLnkzH81Hpt>rjV=MwB4%WtJ=CZdT9l%fTX+a9+kSy?>Fl4oNt{<7cJCEBPv@< z<&w~#H2RVSsai9j)T&haaGfJL9%*8SduxjA0)0G%A1(ftlw`OF4}WfkHtuPq|W>6RP?5e7i~&j@&-5rt)5Dxm8c& zD)jP8LI!(UB!)^g64DG@TLrR*TtRLGBF~1r%S5G34QZF0moG&C_^+CD_+kcrqS40( zL^OcJ=@*SOGhc>&6Kc!F7oiTqI6YWBLMt9~@aNM>)kVO%59`Fm3sX%(RH3EJZ~ARw z%BR%Z1T|eN`eV>`;TaCa4T-T@yQ%^&)r%!nfN5BO!Kl8uYagj|7_86M-0-6vYvxg= zmOFaKt02>e$sU-8nTECjC>5W_doI0C3As}Q%(NteB_&~s`g9JUJTOT^(InreNU*^^ z4)LM=4e&{LFT&=-3Z7x$U##SqO~yhxRG{D%ls(R_AeHRC*}q;p*Wb8dbn5P_9$MBk zJ2ZatN>8E~ntEjW7xzpgouO@$2luSFV&@o_TB(a}EMI!#ldtTXPKDRs{KJ!1O+>w& z*7h%yj!l%x4TF*P(TT^lPK<2*`ZuO~;d~z}6I?S?uH?kJQZ1Lqh0$?hNLdJZTqz8P z6pBfCiIUoRfP>;uK;y>&>M!zgu;Q95LY-M_+*OYU;I1g%hc+B>>|;{OFW|7fTlh< z`bi3{EH`iBe4Vp#J$%;F@L8{i&#EHYOLmc%kkbk-6 za{v82V&bE3OiuC}*{@h9UPlnr)tom8F>t~tg(Bc=5ra(tQW&X#FD4{-{yw=7=Pj;n{9d$=o}Ok{wz4=4HpUbwS7dJMfp5r9*Qfe+AJ zvc@|-dRl31t}DXCz*;*Q@kw|gx8ACh_2j_*pTBVaJcKk%xcVkE#J~IcIrz{o;%xx_ zD1DCA!V8)g{DF!?SuOi8Mn1!SeCG6HM*z>ATA2Sm?+3){V|KM>)!-87Cl(1+(7P<9 z)M~HCr0EySYJil~KVaFfwKl1va+!m#v|iooRf*JMUXz=AYMIX9+q`E+CsRV_2m}q* z+N4!4;|hg3r`?eJwX%PCz2Tv{@*L1I^95??tL1ZOfyB!tK`IH5%6FlcP!8DpBGFL_ zW~mNpl$xdXQirKi)MM1Mln`ZO$sjNU*!6_Ss`QXbZ6jGzDB(Q<9uiP;<1!@xrQbbw z4v36FE|4;suN<<8KR%-o7qB#}F8sg9<9OX%TdPy8%q81HUb(PEVlM_2Fd`dwg|GgX za-dM_`a9Pcw9bKv(U|2=5)oh6?UF4?*J~vPi%O?0|K^|X9}!0Zy}TLt(pice>9W&$XtJG+4|k6| z^WxE`pFZ*$I_)k**zy%ESeiN4=8Ml8zR-#3NmLwcQgfbqx%9_%yv{I?&gV7+TI> z1KJ1<$-7V~%|$C?*T7KVG7X?PFiwCK1#@N?Gynt;0JfSZ`~j;04huFBtXItL7UtrD z>4Za4Ewo(jwy=bE%5|Gt|s}?RWHMgHowFSqhmH-|Okk_(Hp; zhJlwLrj)Dw61PsSwOQivr6!}V*gX{WNNRkcP;Y!RAmt1E2OsY?AU?G!9x8(Q0@&um5ryo}SA#x_~YoIF5JqT?}{ zM9f{`nAy805Esx~BNzZ_I858OUbijL%rX1B3;q>Hky_o@8MHemC&}XhIgCLWJn`W3 zg#w?H@r81=)hfR6=p)C3lzv%jcj2oF$f)gV8MAbD1CG7_;%amc`6lpk<%nS*LNV%% zm~D?jPOFTgAp8PCq1P+pVZKtVkU8^i$UnIyl(H^eqs)Wh!{eG6ZyELu7-UEfz(HdR z@C@u>0qM2)cG+8ANas`|PSs`l=-=r7WyoCnlEdykui1Uqzt{f|W-xj*cp78*2?)hY ztN&@t+<_Gn+1#XSpeJfnJzGx&Qt?bJOq+|vvvBu2;qH%+Z$TU$0vwwuNatzNtfzUD z!foX%XnmMx_6s9+zc38`1B@JAoak>c7f;DshJ5^80xesK_mX zhJjwwHExgHqIEzivhbVlS;VF%=kEfY(W?^6j#6_RXhPjaR_K{5WpBiQoz$79^=TCj@$e)}0E$@NJzrR3UIaxk$ow&jpxcv?2wKl^i zxD>x6IwK`ikN5v!toh=64D*>BGKzVGGNkrws1_{-W z;HeuNJeaa|0cI)VQGOVA17I5%&4g(l=d+qP6a(|d96aWvu?lO!t#>h*Mp&T=cE*d5 z%8*QA4(Gy)kzL^EY=uJ2hRNQ+vHDhzQP)y)(@er8%G7!`8R%Sb4=pA)sb;^sDkRma zb>9EjX{+bLq<4WbnBh{EAJ1;FYvodXEqZ2b8A(g?2B`qqAbnf@ee^Hq#xxS0*5LSD zx$SWPnh~?;cB;VnE?~nGM5$y65H>j%rA%~?s~4-3gv}E+#v%X5O9e5NA@<8)UCsku z{5*vH*gwMtjbOgQzWiUou^F%qs9r^f) zNop^|NHD?sJo+5j2w1Kt*3-stFq{u}g~!5NqdKV0tGm==YAz5l(2yu`n``Z1ff~b8 zp&WxZ5@uF-6R46FooB3(uzsp)ttvtFr?20wk<+zVy+Nte2A#IfdPGz%D1ev}E)>W{ zS}D_ef)0H!EYSctQHv|vUO#^=B4)3pJL_?*M-YER&yy>d`^cBv8Vd6ewE`0nS7Y{= zS%wa{54%7up~G&!nWkz%WMJ4Yzl%>J6tU&TyV_OJR@J+zUPlA?v(|YuG#!VVQK(*F zp1a{WzBz@8T+z|&Npu%zg&eTH4nr`^eC~g74f{7RYnSsNP!Hl+y8)OVVe~1H4`3*S zzzoB*v~D*rJyIdBodT8t99p~tJ{pdk7~hN`ipJi@{Ab0VyefY--EsM|g}J=w)%m%j z=sRE)4CZj;vKhT~#PXz4EP+5`t9^%(;OM7iBD|q;J*i?18JVXiMq^ zZGEe*?%U`-fU}->771noSyVB``FJK%k3A2Vz=PcnOozk7%V4<}Ob7b~D@bh3*ql8) zf&mVUI%K!K4-_J+4VjIz_%XbSskqD^jd^De|D=*qVb!XSs>E7u<~cL=h=Y$6p@8F+ zh~r;?e~e#A-Z?mS-n!%^`~kF%*sUhJ2#6XH$pe=SmSW{PgfSE>ZNq{;_sD)aLb#w z&BpQpXUaeHq{|SNh#Xc4(6ofLdW}}D(b{ac4>mUkob9QBZ+!gRPp%r0$wYRsNT$^* zeQs|@$8wb~=}_qfaj(LqQl){)0Expgk*fIeG`MO=<6HUq^_(BU_Nu%1{qpgkE%4M+ z*A1_|W_^EO%nc{vD?|hNGvMAxLG(6A>@Rik4G;|)GKO};8N)M%mkolYhINMBh8qlb z8Mws00^;mRBjoN<$qW*rluZ)@lB~htAWJb`1Ibf4y1b4dULiTq7F>dTdr<#OQ#uVG z9v0@Y5U<19;>E_+5aOJFaz!um*;$W_@lUHNVt#cQmz42QFUuR@kaxr^g#b7F$POVQnf>#|s+8#5jEsB>UJ!!9%)7&vS*`Sc? zRyB-ICBxv=@X&g)3;hZ-j;P&A>o2=r!9ju7=>9Rn^nD3ofng75CK1V7J_nzA_hA;^Z%uSkwmVz()TI45tEDw1N{{ry$6j`Jn-bFkIwXG8>#Hc@IL zECl>5SPA%3_QlzQ1uFuO=szIM(q$R7^U&{h%zRU8klB=yu!Hk=`Ms5@JS1mPZ}txIc}Ak#3RquKx;^s$b)um0Mar>X!NOmO6)$f z35dl4s=8#CUn4zH{K>TQpY$IK&#zR&C+F^|8)rWmv|8`F*FsA_{T%XMAWd>3^BD~# zi9}!)kie^}p=8+8g-^xc+y0f*{z*drED?D3Bk=A|SKl2n5j5OC)UPC$zkBtFEyRB0 z4GZ_etinIv3uJ(j#QWqX7)^m~Y6fhosa=48p78Hp{d;Jk36tbK~jixbX&* z0yHd~$9W&H7wpl$%%)aj7uKdOl)qTfUv@mWfZEX+`~i#Mf2xm+`&^ezU!N~_p@){gZ)AwD)D(d z%FYqc=ONV#{w^eY!SQ|lg5k|`G}K>=dN|lZK6#N;UHt9E-;nC^Msz1S&b|4f{i2=x z2^qTh*2VK=@X{sRug&2w9XTr)i+$@QAmWFvJj}%Z0@IaOV6P(`SaMYU{iP4d*Qm1~ z?b?!FtrT!XK)fP?(Ly4~GC_#Ovrx1dg#037R&gX!fb=^~OS76rqh`<#i>xGT?8t`z z1y{cI!|4^BCKs?eHFbTl@x_NWg`^tlER4h*Dqr#Un-5+S6-jB+`dx4Jz4qA$8iDc! zUHTHt9Trm#KmvTNwC9ry`XGaToIy`yp3i(I!#STof3l-D?LW7ZFWJ$HH2PSCJ`kb* zhRTc{)W!el?n}Vhs?z??O>P#F5V8>hgm4KE0$I2Td!Ud20YcfzUZ}P#p`-;;Ae1iF z03khWHvX!vU}Yq)SdtYU(vm=%un`UJTi;@%NDk(=~otw32X-B2dTuIGM7AcapDb%Xaa7*Bw zR*;lZP+M#$3RA@J=#p#h>MF?L@c1+>iWW%|Xh~cm-CMruH|yBL4FgUAM8oNQAFf|iQ{J6wB(l?mY?dh{#GEc9S^2irIbB%m z1sw&w$>=DctxFI$k`(b3u#E_ra)G3QX$RKh|Dfay z;E)u^6^x^+{sXy!r}OtIE*u#Az`*<)IfWGx5kF?WDK#N1UJ)wrXB|Bn9x5~#bc`?G zznOFxayANuQp5HIJ&XKlOV{4Vq%93N0y2q90dr=Lb4f3!0HOgr2vXqsovwob00Zc7 zYfu{i{mGDtY5Fe%`2#7LSuFE7m?h?G`aD=VeW zR>w-IwpFvDz^fDzsw5`r(=yV`8REL?x|V9PeXhk6t5%SSb!o|I1sO9KpDa>boxyl% zkz!@FD>1FIz?3l~#{oh`i{>`fC006IiKe8)9G2Kks?w6H3o_WPGrDq7B&za56*A+tT|_tTpwpX0ZbOkz_OkB4J1R92tm}dODLz94Ql8yr48n|^3b@^KfP^@mv%7cs+IEXVr9nqjjugR~C zkt?NXQR--Or2EPdoiV?R1?7ZmLTsu?g~==win7908e*F|cKqPRZH_>kr|roUFE1@B zOaRWkSsz~>@M#N<5e+rqVyI$@3S~2uOi&BagU+yW0dL_5sW1{s)iJsR;0^gS6!k1N zIj9X_!DZ!Qqe5CXHZK6hsK(!iSkBu3yUTu$_+Z|YD8P=oA9MuZ^;wLidpgKf`~nBw zb{T{Pi}k5XG&+Y)BN^-j#@oXXUmhLJkBt}V!dUU)Nzg~XF$kMe7)>B)@{1-^^U3*| zf+qQd&i~a=6`DbyLFjr}IH@}gs2@!$U_E;F}Ln1SyR|ahCUvvJiIEEFajq6?F&54nm`RS5XL6@EQbi$UF#T}irnH?uu8Jn3uj|Oh{=g~M$2$^?L?RP*hLS&C9clY&ji_zEr~`aqH5l1Kz7#f?2wC*QNf1Ab1oK;{7%C1(YQIcp9U4f?ERseg z$t8u>gepx8`vOmp1ZfS~tQ56e3OWoii@kuoi{u~$nqg1jA>wmfP@Bb35DzMzRvb{g zqxekm4+U4ikK(8BZG3En<10x~xPNp{p3H+Rnf~OCzgR^0uG82f;X-a*+wf>d2~>d) zIx2ced|#%xBx5X8|B^u zN3R1+ zNW(^Qok?maW5pAQq%jduCMaK01~f^$!*;SMhRYc2>Lr48f~`z`@q>aBg42Qvf)H@r zCKWMaY>viU2DI_O(D)&AV9f{S61qUBfV*&I5);E+sN~cfCDiv6hmxVdUHGs80^CKe zlqm}ev``2F)1gLx`=wm?&kD-D#zO`>SZR5< z&>Sy>!@(gtY#xsUo11@24(x8sW;2xf20jJp*kF&DNy&zjvi;mXzUt?GxZous7LfG!@omH^mm}O4v=jSz#=@R%bLL zI^C9}i!6yPOkp<(vr}TKTI4aaq4M>9tlR8ocCYZZRvtjT1Mj>8e;88~R&^#_KK*e> zu*)&w|6hO+U0}8P2bnz)W{l@~+Q(UG;PPjkiW7)uqSvO}f&K1FjN~WymKB<)NJBV4 zsJ7dmx~aB&g)ZAoK;B}^9T1p5+>ov^cBB7cBvWHXV^Udm5brR$;I zP+59&Iv4+W2+Cg{Oh1u+I{iXA-;=&HeSJEV2Gr&WbYeZK)N#f7JZ*_8edf%HN|}Jv z*^HHvLUje+YTSPkKd@Sv$~ZMa(q6{F5`*lC%_SydFT-~5I7cvgA7knUr;5M~Fv4wG z5STxA{G=f;$ks=^8Nz4Bs=`De=4`D~WYF~;afy7z^x`grs|gM zwueH_ZUJ8z{qwboFo+hkWyeNaoBL`qBEv!~2?p(iWq2cli2Rn}4MYK6QB3B~+n8KU zeoOL(OSAEcLZVAwlO)H59Kg{Zw|7dQ4iZEhssLN4)p7b1ePRkk4BA0CEU}ijtSop@ zSW;M9Vg=`RD+7*7qO2*5hQt!txltu$>RD8Z)tqTB<5IIS&0LXyB`dL}sG~Ub2{J)_ zl}%8Gxfzsz+7E_SYzqKy80^)@xbxw8@y`y9&|*~nK$zad|F?ON2go0v^~?R;fMEv% zuAn7^;n$@4ILS8g1T!JSj3mU9sRRFCIUSXl9Il0Gh$WG+icmciK@vyA*I1(>lc4aO zh+mbTr4Cn0%| zW@aZuYBUj2F)#l?Pk}f}EDsf@W~6B9i^{?y4N;jhm5JpgO)DU2maoFI=mkZgfbHU$>ZAc0W6B}#>qfHuS3PoflO0!8LLv4m=c4ll6 zX$s9Gxzfn!D1$98mY0^4I3tZWBQXj)TKhxeCPp|19Kvv7DC|)R^N^N?`4L_k@EbJl zU^id}k6|Iqq6mtN^hYu#!IvOrW%3V|0{|Q z=wBHpvi1?zJUzRKa3ssr{PDBn-;d`^t3f~@7olKPv$KGgfQObqAc@jMMQHdaicbk- zx&)1m&k!uUV)H4Zk^+Y@O@daZ=W}IxZ5me#Woj869ZXP|2*E-H`Z@MZ0Bk=oIDw%7 zi84h=*r6;4)g(>OB?BA+Gzp&*WiQ5u@WSVn9OB zQiMTSDM*vfy6!oSNSRb$V3SIsc(sZ+xin1FP@=WR+d`#=SS`Kc(byP?P#kKE#VCTq zDq<}lZ^L_Rc8ywQl;z1PWOHPkC?tWR<}%1xEfL3%D!(kBaK7;0;eM-?aR|ggchi7Q z5CbGWXwyc;Wp-PYU?Gm&Qyc^QjbB_$N`S0Fm3B=S;EKfYv)hZIeu`%G8jKL3w%mGh z9m<5d7fDE!rpA%P4s}{0E6$XNWCAe@ijqKNm?~MRPO~I)vn|Rj7<+IInOOTw#3tqm zjFTpeKPJNf-k5^_Qx-qJoSWp?fkS!RFIy`TluCh6Oh$@Tmezb3cr$7j+&nujRjJG@ zOAv;H2(z23Q>oapm{}vN+aklnP!$?-$%AW@R2ELTI}6l$eR#M{9TE~6sfW?kmlQ?Y zT4B`D9=J;nc?;ZSrX8w$sFEy(D2+(LHBs3aDpo>%)+425t(I z6Od4lM($rie!=bEVDeAMX$wk7@ z=r~u2F(!_^JJR0K+G37NE{TEY4`F(--ImYhX!PRPJaMR=7ZVX-jf&P|&u;YmrE}z+ z%&uV;T7>r7uUjBnCc6=8p4(*QGFFrfNtlI`VAf)mPdIeu1RB36%&zUlq2S1oU0c%I zXigw)bnDzGs}>5uvF5fyX&becE92^fjzXKW#8y!;Q>afuIM7Yp!+M^&8C)hfXsrCz=W8XYMLT6;{D)N@>?gYl2Bf;llAe{Ol0Fr=gf?c zz@*7hiB-`tg7RV!CeDR7U4b~&wIf$qZ)=IjtJ=gaz6SIh4)n|;NkZYL=&p_eb#l^W z6b;+Tp#op4EOMR_-538=DZd20wC2)zINsHNSwp zV)@E`&rFg#RH+eV`Pu4>j=9TM3@u;onBjm501Ic&ZZ0Zx$pj9QxPY3OpsJkjUbS*X zzo%gaZ}=J$m64!=lEG`-!`FD%T zPKBdzAQ>b*fda~eE#;0QoCnj|obyeQ5aT;|=8)o>a>(@$|!+suhasB9s-$}&xZp9JCNdyyH zU&5~;HtfIVAs)ZnTaNKy^Lxw5fwc#Ca)5yc6uGUjDUA^}xl9U1PG#cuHabESE#}b) z6V7rPX$Wh|Sq|iTEw`Vn2K&2)?I8L z>_Sze_w0Y*8wkEZWzZY44P}OAL$_gxVVz;C;UU95!$HFd!)e0>1Bgx?A<#wXQgk+5 zxvoXGK(|bHqwX%-s17|MXM5V)Qrq*G%Zi#N4ZmaGg-9Ftx-3i@k z-36TliA{vqq%oOI`KBtVi}p z_{9&(MVeY-7tf+93iE0J>iCV1?_z@=ljDi8ox&SzLX|VRwjanuFmNVF=Vp>@;KV$W zG0T%7N5DV*`+z~ZHZ~dVj0%O^Mqx3saH%&dIh0n%gsD^}IhhcmBnS9%BP3SS2&tLQ z_@X#{j3`{+E=-i4d4X2OS@b!&Bttyw6@7SIG$3h%HEgz7s?mt#2Bn;g=0&7LthiAW zkrgLXX+<^@B+p4xSh8voqg$NXo{{^j5~Z;wSGmiU2>2Uo(ag^!8v>KY6@Jc7v_X*o z!~xvPgKAOOyautbuv04r`=10Xlrn7fhB`$`>iIxbcF^w&VPCfx z>a>(V1Ya3)L7eJL$huewd0MJb4fyxgqB_WQ+5i@}Ca{IghPu$LXb!?TGUuXskXxu7 z_D4IxN4yJ4jdue&Sb!EnzOi1^2mUmRP(K;~e+?hxL0Alh$d{m{Xc=S!ybe6duSYA< z2pUCW5Er}}-GJ7>9_u=^9^Hs;f(XeCXd}7>Z9>06x5BRTW^_Bm2W>%H(VgfnbT?GG z*oN*!+tChmAG#myL=T_`(Jr)`V4;W6Bj`~W*T>Nl=(lJO`W<=_J%#q7r_t}xGiV?B z19}!chn^?c=#S_{^b&d*{RzE-_M-#nRrDG<2tG%L(4Wy8=rB5h-b6>yTj&^i8@&VG zPRG#+^cVCVdLMm&PNGxjL-bel5&9H;2K(1%&==@$=u7k!I*Y!69qn(?-_dvIALu-K zj35aP!9_1{irqcFHqtpX;0+n<@^vp=)a~vI@h)}`40d=2+}vJIXQ$T(Jtvq4{*M%& z!h6V$hkq0w&|``d+>n$tWoy0XW$EMi*3<@-NjaX5&c#}yd3@Xcdc zEP~uoOV`lGpceK0nh`b70De@%{0+iP^}r1J;F*sfG&TKtq(t(uwP~yE%>%#9_Bsj< zg@3?Z`qAiB*WrNg-F29hV| zyZU_Yfj+m-5I*^)+E@CQP9O5g*k$lKfN9_aA2^-y)* zF5ht5fSalrYVYw3cEk8lMGjgM5t@@pr_(t!^V1R$3U9DyLRv;nMo!Crq6?$jgYTQ* zAol16M31g#jgF#Mj(Oa*#OC@(^{=+8o~my+P`uVzp8KckPaHdbaAeJf6QXme|Ee)Lt9q1D-yDVAtJbY zFfDB8*VE7M8CtOZ{xvUjE_r3Qb!b5Ph>jI8kFNNnEIslMwdJ!^Bja_ZEb2k#8u6cxMdCdbi@wxfr$(~FM|UHGDZ|7c`(L`L}&2lB1|9k-A3(rq8T zmObah_qSztZu+YJ$f0A$j?Vp>y!#Yu?Bu%S-@Q`(;NkvGOI{w(&`a=4W+~+B_r7)G z>D~KZ$awAU4eJiY9;$2nO>l={pN<~A*Ah#|_^C!YNgVY9LxVo5%IzEW4lE3imGCmM zGSVr2vWlNN)6?sw>U?dzi#&bvsXF(-Vo!&gs`Yw(mUPuD)ZzI{HVHT~~rHjRgfj=mq=@`uBppI`U8Z7;1& z{M(9V$>4$|f9?N{^JIIAn9ow68_hmE;B!OwzCcWndPX2$L8M(Opork}B zZ0S#&pKhPgAOEmH|KZJY_xf?;TH=7pYV_W`Vr{&Fg!C^;pheFUGEir6?d_udG-23CF?dNo>k2I|Br|t zvn0`p{?(xgEC8zhN^2>wT!r$hE!Tf(odp*8<+9^)IYW~1x!`1xt56&T#P34-pOck#}-4|twBwtSJH zJzi5x&H8P8_-j7a53X;MqUJodrayykIDgBjzdn7(>6>=X{ABQ8S;)3M@7?rX_^pT7 zpM@kgazC$np!C7Fno8czZv02w;a7CIrbO$JyFY%>Ui!s}-qOXNy+rQ}8#%J_MDF!F zez-lwVhI27pyI2Od(JdC7L}Nc*VAMCz3`0L!G^e2mZTwc-9HLCmB&Sc=!ElDWqNRr z|AW#!hfcEuNq3q~w`2yS`xxlhmrwoG$>d*w7?u*c*iZB`hKGmEivhF@0%$RJczaU^ z+>5+}9-nt$X=-ha1H%~az#=o%zLctUcbSb?ewZuji?Phew&c@!{_A8Ed**w5fN5OC zR8ddc;2@PonW#!n$AEVbP|g(8X>9B9bhi0C-acxv)gq)r@cCRhtD(*!r=|D}UoL2B z8|(%#=JWPhB#^li8hLVFt-G_=+t+E)&}!VmR)kMoz6kp09bhgS_*{6E&;RKndLXug zUApAvhn{b|^W(-wC9fr-=2iOC*U8`gxbKwjKJOE)$%4|@>yPfP|I?|`!_WE*+_!Jg zT4FA6XWu2vYQ6V|;%5rxoO*nleO^+Fs;NA3Fne+4+27?*oE?VO>+>x81W#%&9(3Qc z^UKo0({F5iV}3zTrFP);@^??1x^>@KHUGl!=dg%&j&Z#77-u0fGBI+JMI%}WHyjfN zi2zuf9rWmC{Ei?;Zw5d%B3XXNr*9Sg+`aYh*>Cjaek&Ziuj4-e5XUaZ$#J+>Btcvv zBWMMUQT!BcSAqk>2!h21hX_b64L8CCyiH~X9V5V}j*;=u9J?cVB&plyTQq1(P5oyC zT2xba-xzz}=oou%eYaTnPEJYAlSHlLgFFocVV!aazocfj4{9&q<{xQ$d>Unk}9 z4N^mcaM&O<=o|2K_a>M}znPi0GnJ(+&BsTD@G`D}u#-DocEwbRrKmx1Fb_y*H} zyMM?%=o_>Luh?A5J0O5V0|y4gm>#6 zXdF~dI-Q;-XsC0*af_A?c;on`?(y2@2mYNP7QoK!=d zld3L(m##YIa;_3rk)z&8!P~m}T31nh#cZmsp|IRpR8Q4c<5L8U&RSQUtF$WUcvp25 zRa5IIs&^GR;XJrNrL(HuOfg^Ks;g^&@1qpPWrzR?tpSt)>ODA`s{43 zsdd)XQB!vXgHTme(NK)9GSw=8epfnci^|~E1L(TCmMU@8SK-r3;I)IQanwSm8Y&#M zR82!|O?92q$P7%AtD=Ics;(ClI+;PLa55(pRaezHXEi|QU5*MPoKoegcQsC&Gcnv$ zHH<-A#3P;iFFGB5i|I zTSvzbUUfkCUEYCShA9i+EX?-dYk*Sm+HyI}f}NQo=~tuvU^x_^_8#wiuX(Cfcwgc}LQkM0^=w7K5-NhX$t$v<@teEar}Z9$Fd1Z=y*)%>|wVzrR2M7>G9< z-+H*d{3rUWy>GpJfq3JQ4a)C7?>|?*=)#C-2+jL#bT>D@2S9Qo*uYvW!x|Ir7JEo-)nv7e#G*iV5)gdX}2F!U=x zqiJTC9ixAuBPT5(ArQA1G?XMr?j zIk}ZZcLkj;vNY3;JB%YKV8t5%D~_A7xh-X^IuzLNI-u19);J$n3`@Y;(}#Tb=|&PJ z2mniq-T>-g@QiQiBJccxwng1bso;4A@Jx=5%s&tt(|ym0r&lO8EM8S6?#Nj_U-y76 zH*MBWD{p%C+^zS1_G!tVFXqP?o_PDdPv5Ff?)f3|yRV1i_I#A_-lt1hl_x{b9DlL- z&0RHN4ZA+6RPI;CKLbN$YnhyM1>?iX&L?%uQO;Z{TOgT*iJbSJ)d z>BqkhEgz_QV0*=}U7y?5$mN3T5KwB~_nHd@B)|Sg?r%JlOa`&Dt*+-9FEbgHbOD><&B98r< zxdqpMu<3>PV{1k1MQ^4Od#&+z8&)4*r;qnZu7Bvjvm5tv39n-H#r6kY>@U}}Icqkp ze=MFj**oy$_OmeT!F?&|L9>gwvAQmfT!jaoge(QBm9!?rAhkQJ|N9HXbPjcpm( z1`Kg*#~3Fv<`EKtO(2d#jA4m)%o5h&l7xhi#ITS!Bq40V>vBoLChO(0f#n8Uv;R{w zG9uw_vcF%Zr@E`_aq85m@A3cs-*=khIgYcqdpLnRw&#k=F8RQ3zVH1U|E8lH7kuxf zSBy5ka_O!e9LHaeqpm!8^YL5hj!(Xu%{PDN`L8|ytnz?-CBCZF@oWdqkv{YMvuxAzUt8X#Jn-Tk zwwL{VzuNMBat9~zZ{;XQIENc?^VsttZVBIbju)=t-^PiYB0eIHvHf>eKKXy(t|Oi% z2{I+3K=8sow!HXv*^%9CZYS6NmLR_Kg)ee{B7H^}wW~g@9lgcT54N$pWbY21 z>dHFdWbW;&>jGDMaXY=}7?Cr$cdZ^HK_cF_x-N73xDTU8JQZ*s2KT*cU1WF2E7iKh zw)3@WU9Prwt97MX-&C!utV8^s)pee0lMCyFv&frPw+q|`a%y#*UUZDe)yU7SZkMuRNIYCFam1zg z#zu?X{Sn;LzqG&29mbijtM<3^2gXI*?J;Uun-_K&Cm{c8yHD(@w{RK?(VGHY6BxVy={&<2qi@AH;y+==BAtHw`|?E zeaFJiU5mT-?A>?CrI+o${J={NzVy(`4qtKP$FBT$N3Xj2<=6c9wXZmKoI7#y)amP9 zdHoGHzUro%Z#i@8tIytc`yH=&?d$G*{TqJbuAjX7o_l}lzBk_grU!odXU;wN=7-+$ z*0;U=XW#L2KmX2Oc-O;^y!#j5^WI;2^p_v|mG}MXB48WB=F3fAhC~`xC$OyPy2MPyPNM{NXd7{>*>=?C1XIkDvXM&;RM4{rMOE z;*0;~FaPRGU;fHhzs6Cr7Pq_~{!QdG?kBlrewJV4ui%gKuj7A`|5@?}5z`pu{&NT?9@B0&Y*K?=UC@-@6+EBmY30Hn|l;(?cxvf z$I#YYXzTaU)?c74zg=rL+wH2Y`5$V_MO(>>ZJk0}-174B*Ew$a@#SA$zIOSI%e$9v zSPnSuyvuRV|K(SIY2|T!_5QEE6N~$m8^3brm*4s2$G-d^$9?(zSZ@FFtH1n;FOR;w z;lKQM9LXLw!z~y8eGgyQf+l&wB;ud_{osfTyPm_!hqzzi-pJk0{Ui5I?r*s_ac|)s z+&S*Qa`$oX;QoR84)+lE3*1k0pX9#G{SWTF+y}Y;$$b~sdyM-v?iub6 zxF=yvPjYXA%zg&){)gPBxj*9mGxu5UbKKuS&pyxnG50L@AE5Ey2735&?oYWtgVp?R z+<)hO2G;im=;O_mraTIHe>JS(S!nJZkoVVcuLZt)9rt=znKy8EaX-O5&HXZWH=gc2 z+`Zg$+_$)oaeu*mjr&XPuedL9U**2YeTDld_n)}m<37UuI`=8=r?}tc9^fA4{$KR_ zSGhmoKEeGC_y6IZ!`0X0{Ce_Tald>>4b>l4|A%(B{*eB-{!L?xakKF~t8O22p7-7x z2;o)HM{0}7=NelY_cp%U)SFpzlIq#t<=w*S)_Xrb^Hlk{etqrMwVxV%VBJ3q?_K}V z(c>FFH~aPReVe{DcXGO6^Pzcl%e7k%Y@2TXqaB}GIIweZ=aoB8?fk&vaQ7GXJh5;6 zCG(fwxu0CFUjD}i&L6zurRJe89k#DXk34?m_5W^oG(Y-RSN-YLzxwj`Ui0X+x4z=G zV~39Y`0?rSE03Qze#?nxPkiabH&1-$B!AL48K3N&9G={Ka`&l|r*1iQ=czZIdh4lo zpL+kP|9I-RPks8-pPl;ZslPk*-P8PO<8*wwb9#9C>(^a#egB64`6}~O-J2F}>D+Sc zmPc>--CLH=Tyy3luYTmVgSS0*yLtOnxBu#E_P^#WuO+X&`?b%!ZtLqFd;R7&yx|Ss zyX%kd{?&Va;$HLK^xjkV_3wM{eSh`FXYT*Vn=ZlYiZ{LDO|Sat_nf=y-139J_vTY? ze*U3@5B<_ZpL4*!S?yJpA(y|MJ7X z_V8~!{HceZefUccfAit*Ji;*~todt~;J?T>u+-Fx5t#Jj)qi!b}d`+xDf?>YOP zZ@>4zd!PBGH$M7`M_={mYaacnM<06h(MO+n^rMfh`IVc0<<4KZ|9u~P{L05qJ%0cD zpZdV!2S59yxAekC4*vSj{raEmeEqwAUdbMKmy*5lJ|(;F{(ad4_npe_zq_5i?A?!Eg|cGunevUNjy?Z8^ow`WSL+p{}`)z0l!X2DjPFqtMSrwIdU!j2j+rv|gC zFs=q{tikcbXlzw7dyA3@^Ge2TRyZp%FlF#Gwip8bz;PR&x?(ova!R1TJ zp_dQ6}B#spMIL>jx5oiewyIJ+kN%Rk3P*OZ1?>Qd_DRU<)7y7x&NVu8ZWM0 zb=4qUI(7LKN0)9*uUgv3R^FCg#SMPs-%~2PIyc!g-Z;Bqw0^j5 zu(rRZoauFoPTtO1X|qvJYH<_>zUMl&Wg5DsDzYR}f$-cqeyN6TCGwz==lNB`)$jEm z{=OvioNwn#ocBWqHGcS@r<(udd-_klw_f~yaES|+_7%JLu!f)F_Wkt|=P&WW634E> z`!B(jR(rDd)Q!d788^Yrp3-hA;c4yUag z#Nn`NjbD;>FUi$)+czxjJif#|*nVo=C(gb3X@@&;Y+#%!P94AI=#p?8gZdOF^!8qV z1mAFFEXS^IFHu~#dTU@yd++t_bNJ2t=-UOU(cO;puP0y%Z^^WH)qFOb=6h1;kx#@y#+3`XSi1Z)~4?@O0JJH&=bD4&8e_9?bE7>8Nw(_MR&Co;rStT?Vc1 zUfOx2`rwXS&4#1B7elw_s?|-a2Vf7a_8i-D6~>x%?DE4$cVq9~;`koOAd}M}<1sUbeLJ*i!psdx<-Iw7|)m+1u&O+_{sRnH-}Tez@-PLq9lcN$fdA``mZ9 zCH`3P-~OKU_y=2#uWpfg&UZMrb6>IV*tv82iuS&9$IcypdikCcMcXOPJ$3oz=WgA5 z3|BpLbcx6Ik3HB}+V|$GmYieP^II_XOak^DKDyAzUEIgY*FzV+au6v97DO1ggHgc$ zWvd@}7Tl4ed3*N~_hUz|YG5Fbvh^caU-@K$1i{^mXS_OWY>ZB`o5h9L`s!+)GwFQr z>7CpOJolx0UUqcldz(Aa_%OF~G{EyX#`b*T!k+NQ*q(bX?0NC@V+9`0M=C@UE-5oF z{@YIE@4bG@5+D6!IF6N z6OC8VnG;zHA1@Ug~FnyBa_(!<63S<6yVa%PNi`+HR2Z5H)bA)`1JB-iw2?v*-qhoHX z@Ej-6hqwWKfD7Q$Gy3-B^Ykyd>&0^UNknLO(eVpkXUDU1r4RB7YlnT3^W1gf8@Pkw zW4Pvl( zHSrxd{yNSOKg!)EeuEo|pX50DF|H6l!aXBe+yVJCs!yz6|8zkgS^s`$Im6vd&MZHN<+reW z_j9xSm0V1p!8lF0KEBVBoV!_gf_spDZ22}a;PzC@m7Ils--WUI zE+55(78v*@1jq)hmT( zxWlr>9VYL?FC9%YG~mV&5OoZ!Uie&+8wV+%nl=GRoux`#;Zg4EN7LA3R~oUCr*JlB1h3 zHjp`XkIR=Mwrw?ph9@6L-cT#1-(t{2bW)g&k;)sGyGl@u)297Mzsb$$yPjw8zp+(b= zYro}>2K6wqsqZ<&*1W-RA+D$UwWRLT)S_nKrPRqY&uxXOEZKD6^{L`~|Kow8X~WDh zsYxWQmIyNZ3E|#K?&P0@O&D@7uSO`011XGczMO6 znyc>^KQ^uyNt`c__$mI&YS7rxQOKhcl1mNCr&ObaD3T&sibXI0)HG@CiXq1ANrQbS zmSW4QBoTHf^=t!MBpTYP7mKrw@Mu=lQ+{?Pof2bK30+O1njsTIa(u_NJRc#M)2K;` zT=c@wQE^GnaD+XT0cEG-V{Te@e$-(LWU|2T zK*wy#o>9!YH)Z|X82@0G$abxEe~Mk$kNXe{St`(K!ERQvNp+*_(rDwwCVsdR^jm@H z$ZeO(q928=gYh`m1=*vfXoaL<+pRR#H6_oR8RU7e&NKDW_Z>&hO zz7ZIy*$c}5p~D>=VUGL$u?a+qe@8w#z7)d18j$s4AT zAu5J#NpYYYBrAP!NZ(sS9yFi`nj&eIqA5zLsI>!@G;2qx;Rp&*2sJcKk$E&{Y9di( z*|b$tC9c-(xwCuM&ukeVO&zPJEtGuf%Cq@`=nqbKQrRlF(X(!X1FG+ns7n$D_v#!+JOQRD18{%q{YW` zTY0Dv-to^Avz$P2XP`u-JQC36rs;U&4q-tUcP!C8o778=1h*%@iHk z;;XCRS^;)U$EAv{E7+P+&M@`??stl8 z0ds-OQWPZ&K3Zm@G2Ve|$FM&1FjVMAA~vG-L=$9FF!Ku4!@U+5N6>NsV|rxipu; z{hBbR*Zd&X?(hR682Gyuah78$rV%OWNLh6HX3c03s+n=9Z|V1&KB@N%_@Ic1w5%6- zr``P-w3I8P{ALiMnuUrPoo~OZ9h)3g9m1kaw7F%R$^B+=4R11q68oSEvk&e z0A3d+p)RaR8qt6b&L8AmS9jMMf^COVS~OD%olxkbmIjY#YOXS?m0qm*n_N@bV0+=N z+-Po~AGR<&xb@s{6}t=dGN@7{0so|_MT16d)*SWfk`E*ys{LfJ8$jW*zRVv{whVbU zk?p)D@5;QF`Eew68fla?@us~>tH*EMHq^WZ*}i#DGkm8Px~gg$mK`OrQ(n_+HnwkW zCtjR3{dvD;bo&d%F5L>Z_r{k}SupWn9E0E~Dt<)$GQwcOV#r#cTZSX*Iuw{V{b#kp zAv|xIYR%O=|7hNo^-v-SY&!6c6>i9jQ4VbdR$1>&;{M9Ff5pxdhJZAx_#Sc)RvaQ>Qx*J#H3 zrGjXJNUVPC@Q#V45=DHw7fN0Of+WPcVEmE7q1@pYUO_)9zLxtIAMr2Y z?}U}AkOE)8jmm&VP|Z*dnNKB5lPe&>R6dm1E~enj5aAVNJpQKvv=3wx0A~ObP|(U~%q<8Em@N<}-=-38bIkfdv!S*UvluV~IGsejU^Q?E+ZV%3ZYr^?C*?}pfJIgJ;|N9yogUA@ z3NxbwOUbacg-fR}+PEZ)#)vS(vO|JV#-TB87}g^k5r%pIvO4INMPy)6W)i2k{B#FD z!F`em{jj6uccw<6c)BO>c~_^6&Q3BQhB}m_w$$+~sZ2?!QK*JUVRE!KHOyQJ7Hhud zsoK^!Xs$I?#iYd^Yq-U_eSKFdfGu?*o2HYhy4sgulngtQa!VVeJ;`(Vz8`PN47F*= z9qJ5H&oB!u6p1eJ8?;5Mr>-Ner1^&=Uj)ku;jkt^O6n`zC7rq z)I2LRiD;UZxUWc!s|Q`ZpBT0@tVyM9dFd$Lo9-~i8w*yO7{rEq*p8|Jm#uJ54j z<`#5UsqK)8STo3A-ZwQx6?#4m3d<6t*3i~o_;h?_T^CJf-2@;mo~WZ%cdgxPX7e*V zQ6MPiZ`cyqH9|c(Fm=&rW=TUKj^g_xgl2<%voHe5+>zlWuA%2VpXd^C#oYgyO9w^* zESV@ure%YHEsZ55Hk8LS`${VkfStp@e*v&Up*NWTjf=+6f*1-3J!F9=(+h+P(Ag6H8~}br z`(zf`vR5Eih@dhq@&%~C6c7J1BWVUO1g$dN%=mFeS#!|!aSZS47I5>KD1=MpAd}d|OPtlEkSgIS2N__4|=Mu+%1$ zB(>$Vo*dE@&y7y#HKo_c2itFOML#JH8Z}#M+os0^Hu62W*&rlPZL`0{I5d`|S`5IQ zG!R%)>SR8(BuTPNA~wik(_gS>t;CViz7-F4<^A-QZ0y!)A4sQw zNj`MwWiN$S-N!q2oN5snmZRBP53w>LUx(CG(z16AeTmMz>@xkRF6sevvu0W|P9H`} z6y6EP+arCxhJXP#qgm8K#3YDyHx#MW+iaV$F|S)1^W0QZeX5JJPjwTLY)Y1t8wZWc z<%10n7qMyERM9nAQ8e3h(=LCRqPRQOxBVgrdd@~`-Z$f}<4= z(X}bKwKNhu#im}^RqH8S_G`EBaH{`STma#AL=NE z%nLPtjqK@66B)ZfD|UmiKmP~Z#=nlO_&;JI&>#N#^M5Z$;x(v#;P}cVR;pB_t+ye996~Pb-Qe2No&<$0( zHmK2vGzwZhD8D6WG@@ProJ(b;miSY1-jnQcnade5;W#xADT<=&Cg7fCTd8JAhMd%| zrAcP=H1TlY*Zn{ZH_+aiU4>*6-A(lyuB#`Z=QlUcKcN_|86bEag@%?{lDbQ2hKo_l zlss$yfswc9sq)naT`yM5y_5C0-@WpN+L4{R%i*Y0Jk>a{$y18hVO35i&Ob*u@mlUU z#)`oop#l%g=OMKRWterdPuu1}n3gVvK4 z90WRRoTvmc>Tbxb&3T8qZqpxVy{H#cQCle_sePB!)Gi06VZ*=HF2q#zB)ZA6zkcRA7)E!daUu3fKOkqLG3TdJX@ zc9{l}>=%+Yl{BpN&^GWWG-CX?83(p>U;aM^| zL`G!m3!fre50Nb|{5}ri$TH=RpjK+YaXp(oESq`zIXG`T&h21AU{V-$GL2V*0{)1X zTA7yb85o5P6HOEWrk5xVF%2uUz)LIY3n4suwQ9JuFH zvFNry%JW`BLN5;UcaZD(ub}1=cDiKX2XEj}AfZJGafNtB6$=?pA?YmOL0G~ie$Vl+%i6`GhOu>9Qe6T&?G zU}f{5%PfSHEn-WdEryllV@i%og8*VAFMCjcX%!`phXhnLS)d?@E91Co6G3XRwFMFh z6S~>Yw-~jQcR}PG(Rv4zOd2aL*q5%D$%$k@JuGx~M4Eg-9L;Y7ig{M(>ELDk7I8y0 z%rvJYBMD!{zPt56uQ?JmRf}%SCnw^ZdW&`Wvbb>8dzR$~(7zm)%WQts z6{LmG8^zMPs8!}*B?_tZmDE=Y;gG4$=+Zb*f_!ACRI+mFFiw8!@;8NNsfGH%&p;b01>eg4V^C;S z)&mF5uorVAEK&tnhcu#btgx$sAcF+54!ron$p}zk{BQ+^&+(d@Zp4@~IfeQ_i&l&% zkg@PdE3`vcno8u$M8YNqZGYk;*CNg>C*m@`Q;viip8osMX zi0E8^^j-|oMG`|DqHeWx4UE{hVGJ$X)*LI_He27^PiIOeZ;(Pkgc)jakdRskoaQtU zh>OaWpl=0TD+z8+^0E^)hTd3@$P}s}Dv6;rWT60hj}O<2hO-5=b%6%TukJd58aR48 zQG=^7>4j>1lhmygv~mkfd8g--4M4eBQ_z(z?iBhfEk7rGMEC}3PPrZ=2v3#iSCwX2 zF*qzx>mc|-N(S1+4&gfxC4M>sHibng%nGqsWmU9RQ!&u374?VivD6HFW&yh;v8F1K zWM%@aGCU(rMl^(X$YGU~L1Roct2V)zFbBm+mSmQcw&;0w0MaK+U} zwaWIhr4mBOo?N-%iit&RCp;QBM-LoAM37{Yv9T|rTN+kmN{T5EP!F2f0_pD|6lmy< zppO_me*g|GpiV=QA_~U`Nl@@ra}4AT9fvxpq1b`5hL5{(669sWE;@<|_^(GYIQ&qM z{X8-2>*1^nDN`a4F}BtRAc`4Z->1z*;j z6jkwK!*=|@A4u{#OX=B?$`kYe^bFV?(7V(yc-}A^1l!SWx_*Ft7nJSvKM44sv7$ebNp7^{x&GstdqCQKB;iFE+iiVn+Obl?|3xZ{8h zgTpLmT{5AC>_9Fn1Gn<{A#E!rsf7JmAj}rBv;)WkBp`v_!1j%C!UQ4t3`hYq%G6-x z#jeT{C9FFI2+9Kfj%f^xBASVrk%Kl=j)%1fUIK`5D<83sj9##d0UQ^Fm|7I*y_51~ zM`rzoQjDuEvJQfCfIe*J8EeQODDY$tcV68SZWinxyApk^B>OEZl}!(ku0-OX;mP2Z zEgA-fsdrS~Q@gsL+aA(OHds8%x7SFn-3iPNXnDgNUJ@gL9HmLHMVrGz9hYexT3{<9 zIY|EdL>x*jvmWQ#VMB?XV@X!iUx>Eb@B@rfmzs5Zlsd*vR2*Y)iGfTC;1~GF zkVX31*Rr=F|B}3A{HmO2%;qxh{DY?T*174 zg`J^To5s)=nW-<%VjZo{X1c}Hsv|SpIK$$22CSJTY@EzY(AIcv95HCO(iPS-=t&68 z0#MvnFE=8_1ljI}?t{@bB0Bx@u#2eYoFp|?W-Bd&c>@Xp!QLf2) z!b^h)MJ=Mz-lB`;Y`UQ>ijou?g9dVqZMk8kqN(LsWC^2**+SMjN;MMFuf-zrQx474 zuqG%mt;0M+WEF~d!IF4Plj0@MKuAwDAzfc0MQ9)ck6;JG1)E~XwM24&+o8o2!aTLBofdVS9ouYLX9(q|uFD1oOi}U=k1! z)E+8=z*&1nY>FV`Bu62(AR{F~V+WIaWm~qf#S{eDlH9hZYpD?anB_>m7TF&77Zp`D zI&KCk3)f=`THum;K7=WO4rR-C(d%fy3qaCPftbl7gbLmU-&UPK733pZ1BM#LoFNU! z7yvTF4_>HB-Bc)uAt6>C#DpEiQV{o*2G~0akDzr71%a;u3|WDUf`Qob7)}GSeUeW z9#o@>7?~bV>2;(B?$;6&Ps5Wm#hm7O(1_ci13J{ubwkkc)F5>MKtxD98zCB~OVl<1 zb=WfM7}hPe2Tl0W7sG zii$@{i>Lr(yloD8Bgs}G+c7dT;J=o60k|rvp|ik9nuDbl=gk;5;`j8Z2{a`NKz1>b z%L7g70r`7|-Zh=LwFyW2kUkrcvea;81hU|2fv#KtDnmuD9kDhe#0d|<)@a`fwbD{* zDD;utTxunPD(H?aN5Q2uP??w`4~@uodxiuU7@4MO1+F$9T3XYINdtD@%cQhpOGK=X zd0z(=r-!m;?U<)QIU6n3O<28rRJ^|d=FyQt9fdNErbn2R&o7@x9qf<>n4MNh@&)4$ zgIlda2ASDK(iM^*Rd1+yf=EoJz%0zFW(<|1+JOat5cL&b5_aHDC?vPC*1#fYj;$hv z!N^4f`Ap=-8*PO8EN+D525>d-3Cs(gYZ7uYw6 zA^h8U6p4^hlBc+0IfLLnhED;os#aJ*$AW-FusF2*wr_TOhv3hLFrn5j>~XZigI*f+ zGK{F?s4c$Z7$9RuvDLx^rO_>!q-)mxXiJ^;T!3anQk$MRbS2&1(_yWj6@$fK9QLGHL=FjwhH}zCVORsMCNV-wMQ!6jEgY)#_HkvJzxNtiS2f?c zW?@nCfW&0v$PjaYdnHy3I|e*20Ww`0NWBnTO((SM*mOe_Yv?-Q4ctm?#&O9Pw&h=Lh#l!lh0l93Fh4K5WHL{YCTn2K1+zUtOo-A54uiagz`jGw04jLkiW#7a62TzsBp6$8 zH{}ij>&LQiEMX4&Ie~D%qyo=?nQbvr0_Otlu$-X)!NL%s;kpdQBFy?}p^h^k2 zCXpb`!G{p02#`LAE^={Gv|%bc`WqXweX3&Oq^7yTMC@HVK9!CKEEQkr0+}h5U%Rz5wYGsi0YUL1ss&wqMo`HGsHOE#E?1KCcjYt;PF&PsZs#aGN< zhO}fOSL&jJ+6ce~)$vsD&xKaneQSHSnFYv)8eoEQPf$grfk?d_BC5tX2y0Lq%r8HA z{tj_Jo$@_=Sz*@@dNR`p39u!GLID{dcra}ciz2M(N+!t_rYNiZ@b1k00^+V%-MKM~ zM=SmVEF}d)SMhW!0*G?Gih_aIF*7a~Wl=IFjYY2!q>F(7p!1B0KGs=!f|aL1^kC_6 z&dLjlP&I=#&|MZWN+?&m2?bi@Y1a-9ral#1sTrUNMs@X_kYEseYfrdsnGtz-gGC>v< z1p?Hl+g6$SL%3grONNMpB{g-La}a*X-_|u8Cw0xXNt>D@d!=a@p)L59T92pcsAktg zC$5{C;38GDQwj9ej`6!RQqycO)+D8=k~oetXVmqQR1*jD2s8~8a2T<+ zt==D!(l9L5*w)f|bL}0srioU!RXZCWM)HpKP_YWMu5?vaR^6Xz1?WSK)=+tCPI|U( zf*OyTGi}oYKA7+aNkeaHp5X(?qxiLE4m?+zDv1Df2vFIPpS9>d_K5cqU2O&E2@WcGGH7Us9|rP)F&2Ho>wOAgB?mhAwhN0t!Y< z0Xzc&QirzHc_J0Mn4#j(ewpS|GLKU^9+AOR&aE*h4 zL29D1OEJkTm@;nVbwIuJh*H5GdS`}?&r8~^T-Ln zdc(*THux;0x>&Xgz$2)n4+^o0CLo0+tosB;9-$tP1S{HN1U{3^62_OAQm`@jFW3hJ z9+n<(gLwfap*ROp%QT9KAY)rtOo*f=gU(3YKvT-~ghicr;R9RI1@@h(2j~>&Dp(jm z>`cIk$ns6&2^wF`B~(74@-vK{T*1}?_)T#JX8{*M7r;akRw7z)KCBC{`b;rU)@Rxq zbeqoiX7BJ|zXmTkIq#udT3H*g2@X=eXf?EO265PirhQGTk;2NuL2D##NE$fdTsJL6 z2d1LhVwxje=PI>4M$Li(Qxge%sHp*2Z|g5<&uAXm-cicFVz+Phv`n6pOPDxq41exy zQYN0ZxeMX2t$E2XW7$XpWsHidEK%>2ow^{KD0FT(IYs`%S#P1SAFPX+ZWk8Ti0#5R z$}-p&Nq{MGck|({UUS>cPM>O9MDRo)fEYCix{{#U9f2ANGKvUteV}=ES7yu&Xdu)- z%Qaoh8)}y}L+4;tO_dO+CzY5Y(I|;JLw2HoF(591_zFDn5eT5FeyeY{Q8{B9Yi)ai zJJ1?{M;6UyJ%snO;Db=?X_@sX6NQ1^uQiUq%7pM2vC@*HR*n$HHAE9ON^8mnD&8@> zf~ZilM0>%Y`BuNz+0ZVHnKrK$bz2eEYD)9c8CIVQ@*m2B8A;@YufOo9@OpZJ`y9_e zdL&N+0B}|w4E#}4a}t0gkZ5H7gOvg@V|sC++L0lY z%HCHh!O}Yn9`Th+fh#~9S|z+~pfQMjrB)SUsuT?(4K1oz9TYn)5R?Q!30P>$ayhX2 zfcQ`#ysBuJbr4FmQr5@__UcGw4Y*$DqXu+gYZZo#u(BS>?NU68>?~Qv` ztZ{l8yh`0{h_UBun%?c83Oa=i#9t69sn?T|_9kP$bmO(_Ek7djs6x<1q{P76OsANcb3qo(TFf8cUvo@VVw;_D-MfQ9B6qf_^S(J-K6&@`L-88CkA8BMTX` zg)D=>vi7eg-{#ufOPTM1a02QxqmM~jNSBur*yTwDSQuy#Y=+_?&Jfj2KQgn=GF%zY zzgiVH)C&VZ7)4sJ9Zeh4Xb=aH&B=wNzi4|X7-wn!Y$fYollYWn{bivRBJEEe$8+(M z6g-8Gnn}PQn$(qC^MNeLx)(mNS`|jJciy>NkgzP!rI?6x6KXLW>l#TOsn1gy3y&Aue^A2=| z`BN4SNmbc42A!EUU`1FFgkW-r1WA=>DOaXfU{GOjm~Ul>w{p&`^roV_7!UyaD`RR3 zo*Mish%)A!0hgKIg?V9KekH_$pRZsiE+Zg;&dbvhwK{Asxyv#P>SduJP53&hmU;nb zAn2G67XzQR3=dI~38fYl*HLmm>I-~Yqb*%f6`CS>+6Ko{GpEQ{3EPG8pe!IN z8Q4M+Bd6Gdp%U$i!BQ2`n(wIe>(cfOsM!JEg)#R2eLqy+YHG!Ckr)UCVWYfrd zYiHIcsJu3ioshk{VImicbTRRIViaYWWYuL#a}@lFgp~)%!Mt7Hg6Jbf1Q&pCqZTTA zIt0~fL~5WMT*LGO1B9kZ4{Vdu=O6MM50t>bK}wJSfD!KC@^(Zk5AeT7n(SFsmFKYF zK!+9g&Z2CDD@;om>r%zQs40iCKr=)}SF#`%#vi+?nzAYaXAfhF5~(o&8k-L~VbKcW z2gcZds;~HdJgpGyeF)Ej(z3ZJ6B9^9m6Wa4nUt`afr?G7-tmnU+pfk&E0tFjJ;_|w z4k&3kVH1r|NsGr_rRS>T1H)ku5`3%#St}KBi1$k%tFQ2GJv=$zNqSwW*)JBHder4SjQbz!&E6) zi1@22L7JNuRd4mQw7Y#OHux`!)}89QWO+Ff(12z zb!4ouvT^1UQNtDWy1G1^jU8K@1#Qm~$pkbm)|^m}bIcoo_{q75n)IAcc5OorkH<{K zu+1ujFr^8JY>9xn2Z4_{B$9}kf$+e{Yh$KcJG4C`Q(*j2a~4M}q{U)zS;!O9nwM$y zJVZjnwZdjmQnMKwJx0mOdQHHb39Dh{0o4nqW4g}7^tx(FY7$Je>?B^2YPqLK@*XePC;OpS6y;@$rZgNH8B&nZme^3Qz|8TI_Y#j=HYWQJQth(@}~H*82P*lt0cO4o0?6LV6;D!}B&G@^f^e@@(Xg?2y6C zSTG!FQw=bA8O3@?IbkM|rU1W0DkcFpQJ9Jc@x?+x6x$4IS$oYoy|;F5BqcsdwpoHR zO|`+*xy1rKX9zRl%9a`^nA{{m#x%D%#S`@78JdDM{sQs_CR=tkuOpD`|{0(U_D7hBOiF zQl5t@5d2V+XaH=rLgd2YnZDwJr2x{=>{_|KF%$Z=@yVn4{H(F9?lw2uDpk!;tH~xL zOh7(FO5MPgm07*(sCvuGEV+GfC}{;o3RQ@TCqSuwoZ5z8HxkCdfjVv7`SeRXA$X23j8I{5@n}#%Hl?pJOaSv^b=%irtAP}&?STUlDgy<#CS)sa6 zEkv*i!z3QF^4_4H)ntHH6b2&gFAn8w)RTIa-2k^9_(3i8Nj9)#KB+bOO&zr-nTIm_ z9*Yw49OKy8mLHb9d3|<*pjYlCxw2NCb(@QpT#g!2LroRpgAYw+8xl$|wU&UXaWi6U zHQ|6Q)EraGa8c0XffHpdRS;1nt|KSU+ImNa^NAw zhH0N9Mkys$tQ6;5t^6df?LU;GF4nU|%j)Uf=1%>(RQC&8bd@f_JaQxHQ2dIIS6kbq zG^GPA61qx1rAT3+cn6i2?j}Uf!|kKRLFpt}Q!y`tUGOFyJ+%&&c~f5}BYox>Mr~iL z4f5!qu>&ELUQK_1(4vYVG=ZW8NZhkfk|W%o^D+Mlj?8Xg8Bg{+k%D1DgrciT2$@h- z-mmh$_=e{SyvA?@djTVi2qb}lXyERZjjZ^bB`Zg8A2>sv0OeH#CiD65hamHr|IaES zbBf9XCUFoixM}u}dA^ugg7cX8vjw8ekPI^ZRl)#}znXcB#+aN{q$ZQS6)zuQ8V^e& z6V;~; z^H+k8n+MlhMc4~4Ifhh2<>63MYmn7+R%_0!r)@7RgBXMaY%R*I%$neOjWkn4Q>_y? zSGZ_ak2_OWlzA=UCA5W?ZW6_ zqTgVkrH008Ri^C?t{fLqUy1!@GxP@d5e-RKWWj6nv_>~H!Wwv3BqIY$O1h0R(W|^V zIDe8QPCE&$bQ;$dYf;OYJO7@Z6u0g5ycZ&{4;nzyagf(D9Mj5C2xhqO$t2NdQ8`P8 zs%ANU;vF{1MC&^=#$*zLxofq4?)6bSZkl3v-$;lQP%xOb6V~?#q6uG%3JTPA)8z7e zAE=z6Rhnw_yf7uu1mF$!U*#lO_zp|K$<9bbEPJJMkA0A%%Yq}S;z+E zuxzK2rrPaYLZH)Q#S1l1sa&P%$x)smVmS>t1(a_c8D;q_X7JTjR5QTlzy}sUpAqU8UU*hV*1fs$k;x{6shzNoN zqz_hhSJ-MaJmiUxuK}fQz+ck_n`D|h8R&&t0=L24hD_TR=sx@gD2vwusEveDIgy3t z0Q$hrD9dEnmVIR~mR~QHY|a`y0)jIU^GR4e&V|`DaiyRuo&bf%$Ro2zo9RHM52&6) z?E-!#1-b#~%)Ad%R#vagqi8Nh@f_+Wm&1H;E}o;0K$1Wcl$ASp9j4c-w3Y0HQ2QC!=}r=aSa1t?Q6wI~^> z@t&=gWT$kbK8QyM=~`~CWl0MexEZ@^ue0^_QE_vRzdp+9`1zD@);5&}D#8J_*pxEN z1hXWwZVKz2XvPjoPg;n=qLA`yhrs{4)|rm3q}IU6)rn{V8po(sk$I{1@}^y`cZVUE zB2Z&q|`WA0&0TZZ%vB zNn^mXhEmLh!>9vaDbcVIuhZ3S7X*vnt97Oe4f#4*WSD@`^16%?JUSW|SFtq^>~M z!$w!Z5ECQ_6oRagfM5!lft4Iy+u*J_AY;^|-!DZ(srM6K0NY6{p}3X#}R46URar%vF{Z1QXU(Zo>& zQ|k(MU?llUYkoKbYaN(fYNN8rI>^5rw7xR|+u`9?gj@x4Em-Cr$#y_iQ$$T9$|3t% zh#B0)IKU6ZxSs6+r}wEW2mHy}C?8JVJQ|EHLluE18r@EeK+R)%q*$?1mm_Ksm)}-X zd$XwF%7=SfDE#$;mSoMJnUXNYl&up4d7>H-5dL6xLYyH6b2{R{q75o0;^3ub&l-MemcK&ZN)O<7kXgovAypR4GwGA6uzpnzk;i9r1zsyL zJo~_`m$|Ak5h#;6`Z+jT=I<+;f^E~vy0LTEi%E0!Ler?+g~_VK1{9LaKq{*xU^$-3 z_`v=kzXU=Y@TG#yCC;eMhLJ;=000eRHGz^DBLSfYZbmHtqbgv)a1s_+O$KEEZKf!u zj9IUkbh3Wo716f}a%4C28j8Vv(=?}s*40b_v}+5cDtRxT$^34wp#@NWJmWc~=-OEu za~|=SYTm5gz?5yw3)t5aLd-yINL|dvwkE^6pGSu+vuW4uvYAuEZq)WWI;skFlgO;X zE9|{wOHa!cFSNT&F*5X~;Wx%R;EEa)zn-x#>6+u*O0JD^O?9SwW{-5|x5}6nhB+0! z1QJ4%>O-m{pGCW(EK7Pz+GDgkuwDS>h4jgxCF+6`*}a;vsLj&UM(_{gqePIY1ZdY+ zRL2CNTZ$Xp0cyzFwV|e&m`pAM?@$*sgk^49J^ATVi0dT7_1SZr5o;&?V@CmI@Tc z0u&5&n^;To-8?h^84po$_sx$;x+-*90;8;MX^}QrF;9XYBQ+)6USCuHfCaZsNK3j}h8x>z z|B7Fmck*dD3|t5E8GAMJONXAama@o9W#nY&{Af_4a6nomDK6aD&3vYzp{V-FiCc*N zF;i}>$Z7Btplexw+k^8?Kv%D&wO>*UBn|Ej?LR0>oANDkeY=DNFXtfe1ic<2QKWUE z;(TSJo0z{`(PGrxPC$FU(x}L?uL_ma-5&i zcMT2uM{?ay2KnDK*L8ibySt|po7)dwwuA4#{z2`n?@GQGkf5UV4W;umjH=e>zo!G( zWj;L2K>B9O()SOprH8A2uHG~In;Jr1*fr|1AHoZHbqP{b#!2SNlMJxoraA1mzz+B)QqM;YGKpAa)S}SypL`6e`TZkWO zas^5)g-V62gR9 z_mux?s-JiNw>1DP6P1OG8fB7pVMUe>SHpC&lR)65)UBXZa)=k?E;YOH~(+QOXw zpPv6Qj;FJo*I7SuOwnDD@{YIdS5oki7I9_Y%eEQjYG;80HJ@n&+5huI{1MF^X6Lk5w!XfW++~N(VZjq36cnun?KdzKCa} zF^7*wd%)p9uru9Nwlt7%<4KC}|pt39pncgk2# zCfZ~gR*No#)_#}_|IXVVADG3|)mHGrbF`h52&Hsq|LTw4Ra(!;XMaZa)OO)te3aK@ zO@CBgBG}iQ0T59sh&}C)U9=7F?3(6Hj&2n|#m)1$ICxsma8m=W#>>J-8O1B+_LKr3-4i1c-5Y3& zSDeGx3%z^iCoANo)vdMlG@GMcN>OrOS=!_KUEjZ3j&7R>T3!lFC>RL_MFg?R)4CQy zPEI0d9{WU|S@a4u?GUH`vb@SzZSxcJ20) zoEHA!;@r|^P(i1Ye>^|02RC1RV>8jdV}T0SD(a=4_6vRaokC||ZGWl#2ik_&F1P@^ zCspF&Oq#4p$m{YIC?_JoCjaBQ@dAqywW0QKo^tTYVisZ>pEE#m2~eAh0)lGho_B8DvLHGcy5i2Ru2v9nK*;=SpQIO=QLWFq?_1;GdmzBc)Mh>BcJ|=rm z-NV{iL){4nLz4aIg%BDuh>pg#g6s<>PV2mT8FiP)N~16fI%%ZoE9&O?&DnHx^Wo@d zehbkw789G*o#|}z_~@;fpO`8|gAo}lPz93Qm%$9-*@12Iw~u$>kS2cJ3oOi5dwqL6 zwkOa^HNAMTeXBm|R= zN#3;a9~_SMbZd4H#8?g<+^^iL8cu2^+N(K7HLd)CB-A(x-9}jCYB%+Ge8m|~l+^F{ z_0xW7SYBe)y5C(6OEa+#tVCb9^2miG}>r5w|o zxLX7q>}E`n%JB=~V#ZRV|0|*4@P;%}K}F3|Km{UtfOy zW&Le!wex@S3hCPyfi!`Acky;e#XbY-CApPXhb%%$`IY1@lw86Q$UHoNIjWjE{*FRz z&%TlkE6p%@0h=^e>M8akbWt%R0tbb>ER+^Dp)gaCU^UzYlA9ZAepfJrEhIqNbYqk9 z3tMK41Y;4|$eU!}SySQhj|5hL{&u@q+(f37b>K}3dPl+>wA5)YdvF}ze!l^B?bj>J z0(9wAVUgDz;8NR7XLENppTusVsNsSo>l?jVn?(CgJN4}h)4Z-5LU%J1s}J*WXhu2y zF9@k>2XAEe^`IJ@qcxpoi*7GnDeP4low=M$=zw8nfOD9kx=;j+)M}^N7_~ZptEqPr zQD8-F8XO4WX(+^=?XMtDmJjB$e(x36JzgZUrCWv3;@+&cmyfz{K3v?pJ@y9K%zn03 zLVO?4FHC#tJf8KQKy1EyXchOzPp|L(o#pWC*78}{Ie@XbIPSNuE%3sCQ&0u*vVLdd z7O#>Y-oVtyb@9paRz6(wP}On#yZY9qc={O}Jl8|N2)sf?k=#Q-GdU?R_O4O*>f4+I<9^r^ML#SaD9qjXl-1wDYW>wWk6%l`BnlAh*blF7=cAcjmUb$gb#j1~SbqJ3?)E2zMG=Cn;JK!)_!MSP7GWxHy(G-z-m z_N_S5vFu{j9RjVkbYEprN>A&(CC)*?k_19+zYT8U67(Q@Yn}(#L(SzG5jv1oOLu0e z71jI6Joi51Vw_sPeg@NTYDKh2QwPJp((d)>mm_|53sM3cF_7$-0qSxaV`)atah}dhDui&PPCm{g1DPAIu-s zhwF7YiQlX&Py044oQC^px2N}=40B4>^wTgJJN5oE1=VUWY!9w{{Pg3eEcPKCu*Ldj z>YZRw{j>%&uW}D#gt%IroGssae4c(-?_spX|2MFMRWeL2_j9 zLDgBQ6EZg`YZ~g0RK?O+7bB?ITAT+apo0Vl;%Wo^p+c?@Elr34axK$@(2PX1ZAfS$ zluPQ@)KFt7!sTDCW(WsJaCuI3X@6eO+qvI$!UB-G=;AyVwviO)*=d^<(LTfUH35`O zKRs{;&!(@6c5tKDF1>S@Xl(l#o`V$xn**=Kp8%ImH z-~-QcbgdQPHZh#tboLBq=uPe$LEk#Vj&4fHdVB3ZvhG2R?PDcGMVkSFB*mZ{)b#1R zr0|RwiD~4exfYF$5_d_l)lszB_jbh2&wa}pp^DK|7s^zQ7LyraCs?-lUX-rAuf;HmtS23_z7bmW$JHz7KVFh=T6Xq zm4dM)V&V>`MG14*E!UjlbBE)Gv*?hMhDFChm0$Cd|`Q)`P$%l)sL!--5$ z0uDwynxuUfI>^(Z+Cd1y&Sno-*(p z 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 literal 0 HcmV?d00001 From 6ff66e6f0ae563db7809058cdcc74c842308f2f4 Mon Sep 17 00:00:00 2001 From: Justin Revelstoke Date: Thu, 4 Apr 2024 04:03:14 +0100 Subject: [PATCH 20/20] fix another conflict --- button.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/button.py b/button.py index 127d87d..5f741ef 100644 --- a/button.py +++ b/button.py @@ -10,7 +10,6 @@ def __init__(self): #Setup pins and board gpio.setmode(gpio.BCM) -<<<<<<< HEAD #Pin 22 is Team 2 gpio.setup(22, gpio.IN, pull_up_down=gpio.PUD_DOWN) #Pin 4 is Team 3 @@ -18,11 +17,6 @@ def __init__(self): #Pin 17 is Team 1 gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_DOWN) #GPIO Needs to be setup between 3.3v and pins above -======= - gpio.setup(22, gpio.IN, pull_up_down=gpio.PUD_DOWN) - gpio.setup(4, gpio.IN, pull_up_down=gpio.PUD_DOWN) - gpio.setup(17, gpio.IN, pull_up_down=gpio.PUD_DOWN) ->>>>>>> master #Put pins in variables self.center_button = 22