From 9a497d056e5286763a04322b26f928625b7bf438 Mon Sep 17 00:00:00 2001 From: Jonas Weinz Date: Mon, 12 Sep 2016 15:19:48 +0200 Subject: [PATCH] initial commit --- 01_clock/v01/clock.py | 99 ++++++++++ 02_gameOfLife/Main.py | 147 +++++++++++++++ README.md | 1 + arcadegame/ball.py | 45 +++++ arcadegame/bat.py | 38 ++++ arcadegame/eventhandler.py | 200 +++++++++++++++++++++ arcadegame/main.py | 164 +++++++++++++++++ laby2/Kachel.py | 77 ++++++++ laby2/Laby.py | 255 ++++++++++++++++++++++++++ simongame/GenBasR.ttf | Bin 0 -> 269048 bytes simongame/button.py | 43 +++++ simongame/error.wav | Bin 0 -> 89262 bytes simongame/eventmanager.py | 21 +++ simongame/gitter.py | 227 +++++++++++++++++++++++ simongame/gong.wav | Bin 0 -> 132998 bytes simongame/hud.py | 133 ++++++++++++++ simongame/kachel.py | 74 ++++++++ simongame/klick.wav | Bin 0 -> 14380 bytes simongame/klick__.wav | Bin 0 -> 8864 bytes simongame/maus.py | 61 +++++++ simongame/pyftgl/COPYING | 340 +++++++++++++++++++++++++++++++++++ simongame/pyftgl/MANIFEST.in | 3 + simongame/pyftgl/README | 139 ++++++++++++++ simongame/pyftgl/example.py | 140 +++++++++++++++ simongame/pyftgl/ftgl.cpp | 157 ++++++++++++++++ simongame/pyftgl/setup.py | 72 ++++++++ simongame/simongame.py | 133 ++++++++++++++ simongame/startgame.sh | 3 + simongame/tools.py | 93 ++++++++++ 29 files changed, 2665 insertions(+) create mode 100644 01_clock/v01/clock.py create mode 100644 02_gameOfLife/Main.py create mode 100644 README.md create mode 100644 arcadegame/ball.py create mode 100644 arcadegame/bat.py create mode 100644 arcadegame/eventhandler.py create mode 100644 arcadegame/main.py create mode 100644 laby2/Kachel.py create mode 100644 laby2/Laby.py create mode 100644 simongame/GenBasR.ttf create mode 100644 simongame/button.py create mode 100644 simongame/error.wav create mode 100644 simongame/eventmanager.py create mode 100644 simongame/gitter.py create mode 100644 simongame/gong.wav create mode 100644 simongame/hud.py create mode 100644 simongame/kachel.py create mode 100644 simongame/klick.wav create mode 100644 simongame/klick__.wav create mode 100644 simongame/maus.py create mode 100644 simongame/pyftgl/COPYING create mode 100644 simongame/pyftgl/MANIFEST.in create mode 100644 simongame/pyftgl/README create mode 100644 simongame/pyftgl/example.py create mode 100644 simongame/pyftgl/ftgl.cpp create mode 100644 simongame/pyftgl/setup.py create mode 100644 simongame/simongame.py create mode 100644 simongame/startgame.sh create mode 100644 simongame/tools.py diff --git a/01_clock/v01/clock.py b/01_clock/v01/clock.py new file mode 100644 index 0000000..75859c9 --- /dev/null +++ b/01_clock/v01/clock.py @@ -0,0 +1,99 @@ +import pygame +import sys +import math +import datetime + +#Attribute der Uhr:--------------------------------------------------------------------------------- +windowMargin = 30 #Abstand Uhr -> Fensterwand +windowWidth = 600 +windowHeight = windowWidth +windowCenter = windowWidth/2, windowHeight/2 +clockMarginWidth = 20 +secondColor = (255,0,0) +minuteColor = (100,200,0) +hourColor = (100,200,0) +clockMarginColor = (130,130,0) +clockBackgroundColor = (20,40,30) +backgroundColor = (255,255,255) +hourCursorLength = windowWidth/2.0 - windowMargin -140 +minuteCursorLength = windowWidth/2.0 - windowMargin - 40 +secondCursorLength = windowWidth/2.0 - windowMargin - 10 + +virtualSpeed = 1 +useVirtualTimer = False + +pygame.init() +screen = pygame.display.set_mode((windowWidth, windowHeight), pygame.HWSURFACE | pygame.DOUBLEBUF) +pygame.display.set_caption('AnalogClock') +#Grundlegende Funktionen:--------------------------------------------------------------------------- + +#Funktion um die Position eines Zeiger zu ermitteln (0 Grad liegen auf 12 uhr!!!) +def getCursorPositionDegrees(position, scale): + #offset von -90 grad um 0 grad bei 12 uhr zu haben: + cursorOffset = -90 + degrees = 360.0 / scale * position + cursorOffset + return degrees + +#zur Umrechnung in Bogenmass: +def gradToBogenmass(degrees): + return degrees/180.0*math.pi + +#endpunkte der Zeiger berechnen: +def getCirclePoint(position, scale, cursorLength): + degrees = getCursorPositionDegrees(position, scale) + bogenmass = gradToBogenmass(degrees) + xPos = round(math.cos(bogenmass)*cursorLength+windowCenter[0]) + yPos = round(math.sin(bogenmass)*cursorLength+windowCenter[1]) + return (xPos,yPos) +#Grafikfunktionen:---------------------------------------------------------------------------------- +def drawBackground(): + screen.fill(backgroundColor) + pygame.draw.ellipse(screen, clockMarginColor, (windowMargin, windowMargin, windowWidth-2*windowMargin, windowWidth-2*windowMargin)) + pygame.draw.ellipse(screen, clockBackgroundColor,(windowMargin+clockMarginWidth/2, + windowMargin+clockMarginWidth/2, windowWidth-(windowMargin+clockMarginWidth/2)*2, + windowWidth-(windowMargin+clockMarginWidth/2)*2)) + +def drawForeground(): + pygame.draw.ellipse(screen,clockMarginColor,(windowWidth/2.0-9, windowHeight/2.0-9, 18, 18)) + +def drawCursor(color, width, length, position, scale): + end = getCirclePoint(position, scale, length) + pygame.draw.line(screen, color, windowCenter, end, width) + +def drawCurrentTime(): + if useVirtualTimer: + global hour, minute, second, micro + timeGoesOn() + else: + now = datetime.datetime.now() + micro = now.microsecond + hour = now.hour + minute = now.minute + second = now.second + + drawCursor(hourColor,15,hourCursorLength,hour+minute/60.0, 12) + drawCursor(minuteColor, 8, minuteCursorLength, minute+second/60.0, 60) + drawCursor(secondColor, 3, secondCursorLength, second+micro/1000000.0,60) +#Enventhandling:------------------------------------------------------------------------------------ +def handleEvents(): + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit(0) + elif event.type == pygame.KEYDOWN: + sys.exit(0) +#die Main:------------------------------------------------------------------------------------------ +def main(): + #Hauptschleife: + while True: + handleEvents() + screen.fill(backgroundColor) + + drawBackground() + drawCurrentTime() + drawForeground() + + pygame.display.flip() + pygame.time.delay(10) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/02_gameOfLife/Main.py b/02_gameOfLife/Main.py new file mode 100644 index 0000000..e9934f0 --- /dev/null +++ b/02_gameOfLife/Main.py @@ -0,0 +1,147 @@ +#!/usr/bin/python +import pygame +import random +from OpenGL.GL import * +from OpenGL.GLU import * +from pygame.locals import * + +video_flags = OPENGL | HWSURFACE | DOUBLEBUF | FULLSCREEN + +pygame.init() + +dinfo = pygame.display.Info(); + +livingSpaceWidth = 48 +livingSpaceHeight = 27 + +creatureW = dinfo.current_w/(livingSpaceWidth) +creatureH = dinfo.current_h/(livingSpaceHeight) + +FPS = 40 + +livingSpace = [] + +def resize((width, height)): + if height == 0: + height = 1 + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(0.0, livingSpaceWidth * creatureW, livingSpaceHeight * creatureH, 0.0, -6.0, 0.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + +def init(): + glClearColor(0.0, 0.0, 0.0, 0.0) + +def initLivingSpace(): + for x in range(livingSpaceWidth): + livingSpace.append([]) + for y in range(livingSpaceHeight): + if random.randint(0,1) ==1: + livingSpace[x].append(1000) + else: + livingSpace[x].append(0) + +def isAlive(x,y): + return livingSpace[x][y] == 1000 + +def draw(): + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + glLoadIdentity() + glTranslatef(0.0,0.0,3.0) + + + glBegin(GL_QUADS) + for column in range(livingSpaceWidth): + for row in range(livingSpaceHeight): + if livingSpace[column][row] != 0: + health = float(float(livingSpace[column][row])/1000.0) + + glColor4f(health*(float(column)/float(livingSpaceWidth)), + health*(float(livingSpaceWidth-column)/float(livingSpaceWidth)), + health*(float(row)/float(livingSpaceHeight)),1.0) + x = column * creatureW + y = row * creatureH + + glVertex3f(x,y,0.0) + glVertex3f(x + creatureW-1.0,y,0.0) + glVertex3f(x+creatureW-1,y+creatureH-1,0.0) + glVertex3f(x,y+creatureH-1,0.0) + + glEnd() + +def getNeighborCount(x,y): + count = 0 + + xpn = (x + 1) % livingSpaceWidth + ypn = (y + 1) % livingSpaceHeight + # nach unten hin ist keine ausnahmebehandlung noetig, + # da python bei negativen indizes automatisch die liste von hinten + # durchlaeuft + + # Vorsicht: boolscher Wert wird hier als Int genutzt! + count += isAlive(x,ypn) + count += isAlive(xpn,ypn) + count += isAlive(xpn,y) + count += isAlive(xpn,y-1) + count += isAlive(x,y-1) + count += isAlive(x-1,y-1) + count += isAlive(x-1,y) + count += isAlive(x-1,ypn) + + return count + +def calculateNextGeneration(): + neighborCount = [] + for column in range(livingSpaceWidth): + neighborCount.append([]) + for row in range(livingSpaceHeight): + neighborCount[column].append(getNeighborCount(column,row)) + + for column in range(livingSpaceWidth): + for row in range(livingSpaceHeight): + if 2 <= neighborCount[column][row] <= 3: + if neighborCount[column][row] == 3: + livingSpace[column][row] = 1000 + if not isAlive(column,row): + livingSpace[column][row] = float(livingSpace[column][row])/1.2 + + else: + livingSpace[column][row] = float(livingSpace[column][row])/1.2 + + if livingSpace[column][row] < 20: + livingSpace[column][row] = 0 + +def main(): + + pygame.display.set_mode((dinfo.current_w,dinfo.current_h),video_flags) + + initLivingSpace() + resize((dinfo.current_w,dinfo.current_h)) + init() + + clock = pygame.time.Clock() + + frames = 0 + + #Hauptschleife: + while True: + + + ticktime = clock.tick(FPS) + #print ticktime + event = pygame.event.poll() + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + break + + + draw() + + pygame.display.flip() + calculateNextGeneration() + + + +if __name__ == '__main__': + main() diff --git a/README.md b/README.md new file mode 100644 index 0000000..9005048 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +just some stupid old python projects i created years ago diff --git a/arcadegame/ball.py b/arcadegame/ball.py new file mode 100644 index 0000000..4bdfd3f --- /dev/null +++ b/arcadegame/ball.py @@ -0,0 +1,45 @@ +import pygame +from pygame.locals import * +from sys import exit + +class ball(object): + def __init__(self, x,y,dx,dy): + self.x = x + self.y = y + self.dx = dx + self.dy = dy + + def setX(self,x): + self.x = x + + def setY(self,y): + self.y = y + + def setDx(self,dx): + self.dx = dx + + def setDy(self,dy): + self.dy=dy + + + def getX(self): + return self.x + + def getY(self): + return self.y + + def getDx(self): + return self.dx + + def getDy(self): + return self.dy + + + def update(self): + self.x +=self.dx + self.y +=self.dy + + def draw(self,screen): + pygame.draw.rect(screen,(255,255,255),Rect(self.x-5,self.y-5,10,10)) + + \ No newline at end of file diff --git a/arcadegame/bat.py b/arcadegame/bat.py new file mode 100644 index 0000000..42300ac --- /dev/null +++ b/arcadegame/bat.py @@ -0,0 +1,38 @@ +import pygame +from pygame.locals import * +from sys import exit + +class bat(object): + + def __init__(self, x,y,w,h,dy, maxY): + self.x = x + self.y = y + self.w = w + self.h = h + self.dy = dy + self.maxY = maxY + + def moveUp(self): + self.y-= self.dy + if self.y<0: + self.y=0 + + def moveDown(self): + self.y += self.dy + if self.y+self.h > self.maxY: + self.y = self.maxY - self.h + + def getY(self): + return self.y + + def checkCollision(self,x,y): + if xself.x+self.w: + return False + + if y self.y + self.h: + return False + return True + + def draw(self, screen): + pygame.draw.rect(screen,(255,255,255),Rect(self.x,self.y,self.w,self.h)) + \ No newline at end of file diff --git a/arcadegame/eventhandler.py b/arcadegame/eventhandler.py new file mode 100644 index 0000000..004df24 --- /dev/null +++ b/arcadegame/eventhandler.py @@ -0,0 +1,200 @@ +import pygame +from pygame.locals import * +from sys import exit + +if __name__ == '__main__': + pygame.init() + + +#modul, welches Werkzeuge enthaelt, die zur eventbearbeitung dienen. +KEY_INACTIVE = 0 +KEY_PRESSED = 1 +KEY_HOLD = 2 +KEY_RELEASED = 3 + +class EventHandler(object): + def __init__(self): + self.eventlist = [] + + + def update(self): + + + self.eventlist = pygame.event.get() + + + + def getEventList(self): + return self.eventlist + + +class KeyHandler(object): + + def __init__(self): + self.keyDict = {} + + + def registerKey(self,keycode): + self.keyDict[keycode] = KEY_INACTIVE + + def getKeyState(self,keycode): + + code = self.keyDict[keycode] + + if code == KEY_PRESSED: + self.keyDict[keycode] = KEY_HOLD + elif code == KEY_RELEASED: + self.keyDict[keycode] = KEY_INACTIVE + return code + + def update(self, e_handler): + + eventlist = e_handler.getEventList() + + #TODO: hier ist noch optimierungsbedarf, was die Geschwindigkeit angeht... + for event in eventlist: + + #I love verschachtelte if's ;) + if event.type == KEYUP or event.type == KEYDOWN: + if self.keyDict.has_key(event.key): + + if self.keyDict[event.key] == KEY_INACTIVE: + if event.type == KEYDOWN: + self.keyDict[event.key] = KEY_PRESSED + + elif self.keyDict[event.key] == KEY_HOLD: + if event.type == KEYUP: + self.keyDict[event.key] = KEY_RELEASED + + + + +#klasse eig unnoetig, da pygame diese viel bequemer selber bereitstellt... +class MouseHandler(object): + + def __init__(self): + self.mouseX = 0; + self.mouseY = 0; + self.LeftButton = KEY_INACTIVE + self.MiddleButton = KEY_INACTIVE + self.RightButton = KEY_INACTIVE + self.isMouseMoved = False + + def update(self, e_handler): + elist = e_handler.getEventList() + + + for event in elist: + if event.type == MOUSEMOTION: + self.mouseX, self.mouseY = event.pos + self.isMouseMoved = True + elif event.type == MOUSEBUTTONDOWN: + if event.button == 1: + if self.LeftButton == KEY_INACTIVE: + self.LeftButton = KEY_PRESSED + elif event.button == 2: + if self.MiddleButton == KEY_INACTIVE: + self.MiddleButton = KEY_PRESSED + elif event.button == 3: + if self.RightButton == KEY_INACTIVE: + self.RightButton = KEY_PRESSED + elif event.type == MOUSEBUTTONUP: + if event.button == 1: + if self.LeftButton == KEY_HOLD: + self.LeftButton = KEY_RELEASED + elif event.button == 2: + if self.MiddleButton == KEY_HOLD: + self.MiddleButton = KEY_RELEASED + elif event.button == 3: + if self.RightButton == KEY_HOLD: + self.RightButton = KEY_RELEASED + + def getLeftButtonState(self): + code = self.LeftButton + + if code == KEY_PRESSED: + self.LeftButton = KEY_HOLD + elif code == KEY_RELEASED: + self.LeftButton = KEY_INACTIVE + return code + + def getMiddleButtonState(self): + code = self.MiddleButton + + if code == KEY_PRESSED: + self.MiddleButton = KEY_HOLD + elif code == KEY_RELEASED: + self.MiddleButton = KEY_INACTIVE + return code + + def getRightButtonState(self): + code = self.RightButton + + if code == KEY_PRESSED: + self.RightButton = KEY_HOLD + elif code == KEY_RELEASED: + self.RightButton = KEY_INACTIVE + return code + + def mouseMoved(self): + if self.isMouseMoved: + self.isMouseMoved = False + return True + return False + + def getMouseX(self): + return self.mouseX + + def getMouseY(self): + return self.mouseY + + def getMousePos(self): + return (self.mouseX, self.mouseY) + + + + +if __name__ == '__main__': + + font = pygame.font.SysFont("arial", 16); + + elist = EventHandler() + test = KeyHandler() + mouse = MouseHandler() + + screen = pygame.display.set_mode(( 800, 600),0,32); + + + test.registerKey(K_UP) + test.registerKey(K_DOWN) + + while True: + + screen.fill((255, 255, 255)) + elist.update(); + test.update(elist) + mouse.update(elist) + + code = test.getKeyState(K_UP) + code2 = test.getKeyState(K_DOWN) + moved = mouse.mouseMoved() + + button = mouse.getLeftButtonState() + + pos = mouse.getMousePos() + + + + if code == KEY_RELEASED: + exit(); + + screen.blit( font.render('KeyUp: '+str(code), True, (0, 0, 0)), (0, 0) ) + screen.blit( font.render('KeyDown: '+str(code2), True, (0, 0, 0)), (0, 20) ) + screen.blit( font.render('Maus: '+str(moved), True, (0, 0, 0)), (0, 40) ) + screen.blit( font.render('Maus: '+str(button), True, (0, 0, 0)), (0, 60) ) + screen.blit( font.render('Maus: '+str(pos), True, (0, 0, 0)), (0, 80) ) + pygame.display.update() + + + + \ No newline at end of file diff --git a/arcadegame/main.py b/arcadegame/main.py new file mode 100644 index 0000000..aeb409f --- /dev/null +++ b/arcadegame/main.py @@ -0,0 +1,164 @@ +#!/usr/bin/python + +import pygame +import math +from pygame.locals import * +from sys import exit +from ball import * +from bat import * +from eventhandler import * +import eventhandler +pygame.init(); + +#spielvariablen: + +PLAYER_SPEED = 8 +KI_SPEED = 12 + +GAMESPEED = 1.0 +MAXSPEED = 3.0 +SPEEDFAKTOR = 1.2 + +PADHEIGHT = 100.0 + +FPS = 60 + +#hole infos ueber die derzeitige displaykonfiguration +dinfo = pygame.display.Info(); + +#mache einen neuen Bildschirm in vollbild +screen = pygame.display.set_mode(( dinfo.current_w, dinfo.current_h),FULLSCREEN | HWSURFACE,dinfo.bitsize); +#screen = pygame.display.set_mode(( 800, 600),HWSURFACE,dinfo.bitsize); + +font = pygame.font.SysFont("arial", 30); + + +myball = ball(1050,50,-5,5) + +batleft = bat(20,dinfo.current_h/2-PADHEIGHT/2, 30, PADHEIGHT, PLAYER_SPEED, dinfo.current_h) +batright = bat(dinfo.current_w-50,dinfo.current_h/2-PADHEIGHT/2, 30, PADHEIGHT, KI_SPEED, dinfo.current_h) + +e_handler=EventHandler() +keys = KeyHandler() +keys.registerKey(K_ESCAPE) +keys.registerKey(K_UP) +keys.registerKey(K_DOWN) + +clock = pygame.time.Clock() + +speed = GAMESPEED; + +pointleft = 0 +pointright = 0 + +error_counter = 0 + +ticktime = 0.0 + +realFps = 0 +fpsCounter = 0 + +lastFps = 0 + + +while True: + + #timer: + + ticktime = clock.tick(FPS) + + #zeichenoperationen: + if (ticktime<1000.0/FPS+10): + screen.fill((0,0,0)) + myball.draw(screen) + batleft.draw(screen) + batright.draw(screen) + screen.blit( font.render(str(""+str(pointleft)+" : "+str(pointright)), True, (255, 255, 255)), (dinfo.current_w/2-30, 20) ) + screen.blit( font.render(str(lastFps), True, (255, 255, 255)), (dinfo.current_w/2-30, 60) ) + + pygame.display.update() + + realFps +=1 + + #logik: + + e_handler.update() + keys.update(e_handler) + fpsCounter +=1 + + if fpsCounter >= FPS: + lastFps = realFps + fpsCounter = 0 + realFps = 0 + + #spieler: + if keys.getKeyState(K_UP) == KEY_HOLD: + batleft.moveUp() + if keys.getKeyState(K_DOWN) == KEY_HOLD: + batleft.moveDown() + + #computer: + if myball.getY() < batright.getY()+20: + batright.moveUp() + if myball.getY() > batright.getY()+PADHEIGHT-20: + batright.moveDown() + + #kollisionsabfragen: + + if batleft.checkCollision(myball.getX(), myball.getY()) and myball.getDx() <0: + x = myball.getX() + y = myball.getY() + + y2 = batleft.getY() + + dy = (float(y-y2)/PADHEIGHT*10.0)-5.0 + dx = 7.5-math.fabs(dy) + + myball.setDx(dx*speed) + myball.setDy(dy*speed) + + speed *= SPEEDFAKTOR + + if batright.checkCollision(myball.getX(), myball.getY()) and myball.getDx()>0: + x = myball.getX() + y = myball.getY() + + y2 = batright.getY() + + dy = (float(y-y2)/PADHEIGHT*10.0)-5.0 + dx = 7.5-math.fabs(dy) + + myball.setDx(-dx*speed) + myball.setDy(dy*speed) + + speed *= SPEEDFAKTOR + + if speed > MAXSPEED: + speed = MAXSPEED + + if myball.getY()-10<0 or myball.getY()+10>dinfo.current_h: + myball.setDy(-myball.getDy()) + myball.update() + + + + if myball.getX() < 0: + pointright +=1 + speed = GAMESPEED + myball.setX(dinfo.current_w/2) + myball.setY(dinfo.current_h/2) + myball.setDx(-6) + myball.setDy(0) + + if myball.getX() > dinfo.current_w: + pointleft +=1 + speed = GAMESPEED + myball.setX(dinfo.current_w/2) + myball.setY(dinfo.current_h/2) + myball.setDx(6) + myball.setDy(0) + + if keys.getKeyState(K_ESCAPE) != KEY_INACTIVE: + exit() + + diff --git a/laby2/Kachel.py b/laby2/Kachel.py new file mode 100644 index 0000000..a7eb791 --- /dev/null +++ b/laby2/Kachel.py @@ -0,0 +1,77 @@ +from PIL import Image +from PIL import ImageDraw + +NORTH = 0 +EAST = 1 +SOUTH = 2 +WEST = 3 + + +class Kachel: + + def __init__(self, pos, size): + self.dirs = [False, False, False, False] + self.visited = False + self.pos = pos + self.size = size + self.walkable = False + + def isVisited(self): + return self.visited + + def getPos(self): + return self.pos + + def open(self, direction): + self.dirs[direction] = True + + def isOpen(self, direction): + return self.dirs[direction] + + def touch(self): + self.visited = True + + def makeWalkable(self): + self.walkable = True + + def isWalkable(self): + return self.walkable + + def getNumberOfOpenWays(self): + n = 0 + for i in self.dirs: + if i: + n += 1 + + return n + + def getArrayOfClosedWays(self): + result = [] + for i in range(4): + if not self.dirs[i]: + result.append(i) + return result + + def draw(self, target, offset): + + pos = [(self.pos[0] * self. size[0] + offset[0], + self.pos[1] * self.size[1] + offset[1]), + ((self.pos[0] + 1) * self.size[0] + offset[0], + self.pos[1] * self.size[1] + offset[1]), + ((self.pos[0] + 1) * self.size[0] + offset[0], + (self.pos[1] + 1) * self.size[1] + offset[1]), + (self.pos[0] * self.size[0] + offset[0], + (self.pos[1] + 1) * self.size[1] + offset[1])] + + if (not self.dirs[NORTH]): + target.line((pos[0], pos[1]), (0, 0, 0)) + + if (not self.dirs[EAST]): + target.line((pos[1], pos[2]), (0, 0, 0)) + + if (not self.dirs[SOUTH]): + target.line((pos[2], pos[3]), (0, 0, 0)) + + if (not self.dirs[WEST]): + target.line((pos[3], pos[0]), (0, 0, 0)) + diff --git a/laby2/Laby.py b/laby2/Laby.py new file mode 100644 index 0000000..bd8b9f0 --- /dev/null +++ b/laby2/Laby.py @@ -0,0 +1,255 @@ +#!/usr/bin/python +from Kachel import * +from PIL import Image +from PIL import ImageDraw +import random +import sys +import math + +CHAR_WALL = "X" +CHAR_START = "*" +CHAR_END = "#" + + +class Laby: + + def __init__(self, size, arraySize, kachelSize, waySteps): + self.kachelArray = [] + self.size = size + self.arraySize = arraySize + self.kachelSize = kachelSize + self.img = None + self.drawObject = None + self.createImage() + self.createArray() + self.visitedFields = 0 + + self.maxWaysteps = waySteps # ein aenderung dieses wertes duerfte + # den schwierigkeitsgrad beeinflussen + + def createImage(self): + self.img = Image.new("RGB", (self.size[0], self.size[1]), + (255, 255, 255)) + self.drawObject = ImageDraw.ImageDraw(self.img) + + def createArray(self): + for x in range(self.arraySize[0]): + tmp = [] + for y in range(self.arraySize[1]): + tmp.append(Kachel((x, y), self.kachelSize)) + + self.kachelArray.append(tmp) + + def makeAllWalkable(self): + for y in self.kachelArray: + for x in y: + x.makeWalkable() + + + + def draw(self): + for i in self.kachelArray: + for j in i: + j.draw(self.drawObject, self.kachelSize) + + def saveToTxt(self, filename): + fobj = open(filename, "w") + for j in range(self.arraySize[0]*2 + 1): + fobj.write(CHAR_WALL) + fobj.write("\n") + for i in range(self.arraySize[1]): + fobj.write(CHAR_WALL) + for j in range(self.arraySize[0]): + if (i == 0 and j == 0): + fobj.write(CHAR_START) + elif(i == self.arraySize[1]-1 and j == self.arraySize[0]-1): + fobj.write(CHAR_END) + else: + fobj.write(" ") + + if self.kachelArray[j][i].isOpen(EAST): + fobj.write(" ") + else: + fobj.write(CHAR_WALL) + + fobj.write("\n" + CHAR_WALL) + for j in range(self.arraySize[0]): + if self.kachelArray[j][i].isOpen(SOUTH): + fobj.write(" ") + else: + fobj.write(CHAR_WALL) + + fobj.write(CHAR_WALL) + + fobj.write("\n") + + fobj.close(); + + def showOnScreen(self): + + self.img.show() + + def save(self, filename): + self.img.save(filename) + + def openWay(self, pos, direction): + self.kachelArray[pos[0]][pos[1]].open(direction) + + if direction == NORTH: + if pos[1] > 0: + self.kachelArray[pos[0]][pos[1] - 1].open(SOUTH) + elif direction == EAST: + if pos[0] < self.arraySize[0] - 1: + self.kachelArray[pos[0] + 1][pos[1]].open(WEST) + elif direction == SOUTH: + if pos[1] < self.arraySize[1] - 1: + self.kachelArray[pos[0]][pos[1] + 1].open(NORTH) + elif direction == WEST: + if pos[0] > 0: + self.kachelArray[pos[0] - 1][pos[1]].open(EAST) + + def scanNeighbours(self, scanPos): + scanResult = [0, 0, 0, 0] # 0 = nix, 1 = unbesucht, 2 = besucht + # NORTH: + if scanPos[1] > 0: + north = self.kachelArray[scanPos[0]][scanPos[1] - 1] + if north.isWalkable(): + if north.isVisited(): + scanResult[NORTH] = 2 + else: + scanResult[NORTH] = 1 + # SOUTH: + if scanPos[1] < self.arraySize[1] - 1: + south = self.kachelArray[scanPos[0]][scanPos[1] + 1] + if south.isWalkable(): + if south.isVisited(): + scanResult[SOUTH] = 2 + else: + scanResult[SOUTH] = 1 + # WEST: + if scanPos[0] > 0: + west = self.kachelArray[scanPos[0] - 1][scanPos[1]] + if west.isWalkable(): + if west.isVisited(): + scanResult[WEST] = 2 + else: + scanResult[WEST] = 1 + # EAST: + if scanPos[0] < self.arraySize[0] - 1: + east = self.kachelArray[scanPos[0] + 1][scanPos[1]] + if east.isWalkable(): + if east.isVisited(): + scanResult[EAST] = 2 + else: + scanResult[EAST] = 1 + + return scanResult + + def bakeWay(self, startPos): + self.pos = startPos + for c in range(self.maxWaysteps): # pro weg maximal waysteps schritte + + self.kachelArray[self.pos[0]][self.pos[1]].touch() + self.visitedFields += 1 + neighbours = self.scanNeighbours(self.pos) + if neighbours.count(1) == 0: + break + + possibleDirections = [] + for i in range(4): + if neighbours[i] == 1: + possibleDirections.append(i) + + #zufaellige richtung waehlen: + nextDir = random.sample(possibleDirections, 1)[0] + self.openWay(self.pos, nextDir) + + #zur naechsten Kachel gehen: + if nextDir == NORTH: + self.pos = (self.pos[0], self.pos[1] - 1) + + elif nextDir == EAST: + self.pos = (self.pos[0] + 1, self.pos[1]) + + elif nextDir == SOUTH: + self.pos = (self.pos[0], self.pos[1] + 1) + + elif nextDir == WEST: + self.pos = (self.pos[0] - 1, self.pos[1]) + + def bakeLaby(self, startPos, isFirstBake): + if isFirstBake: + print("Berechne Labyrinth...") + self.bakeWay(startPos) + unvisitedCounter = (self.arraySize[0]*self.arraySize[1] + - self.visitedFields) + + while unvisitedCounter > 0: + #fortschritt in Prozent + print(str(float(self.visitedFields * 100.0) + / float(self.arraySize[0] * self.arraySize[1])) + "%") + # zaehle unbesuchte, an besuchten Feldern angrenzende Felder + neighbours = [] + unvisitedCounter = 0 + for y in self.kachelArray: + for x in y: + if not x.isVisited(): + + if self.scanNeighbours(x.getPos()).count(2) > 0: + unvisitedCounter += 1 + neighbours.append(x) + + if unvisitedCounter > 0: + nextPos = random.sample(neighbours, 1)[0] + tmp = self.scanNeighbours(nextPos.getPos()) + possibleConnectDirs = [] + for i in range(4): + if tmp[i] == 2: + possibleConnectDirs.append(i) + + connectDir = random.sample(possibleConnectDirs, 1)[0] + self.openWay(nextPos.getPos(), connectDir) + self.bakeWay(nextPos.getPos()) + +if __name__ == "__main__": + + #programmaufruf: Laby.py [W] [H] [Feldgroesse] [filename] + + try: + KACHELSIZE = int(sys.argv[3]) + WIDTH = int(sys.argv[1]) + HEIGHT = int(sys.argv[2]) + FILENAME = sys.argv[4] + + except: + print("\nFehlerhafte Parameter!") + print("Benoetigte Parameter:" + + "[BREITE] [HOEHE] [FELDGROESSE] [DATEINAME] " + + "\n\nBREITE: die Breite des Labyrinthes in Anzahl an Feldern" + + "\n\nHOEHE: die Hoehe des Labyrinthes in Anzahl an Feldern" + + "\n\nFELDGROESSE: Kantenlaenge eines Feldes in Pixeln" + + "\n\nDATEINAME: Dateiname fuer das fertige Labyrinth (ohne dateiendung)" + + "\n\nWAYSTEPS(optional): gibt die maximale Laenge eines " + + "\nWegstuecks in Feldern an, die ohne Abzweigung vom Algorithmus" + + "\ngeneriert werden kann. Pauschal kann man sagen: je kleiner " + + "\nder Wert, desto kuerzer ist der kuerzeste Weg zwischen zwei " + + "\nPunkten im Labyrinth. Standardwert ist 100 \n") + + sys.exit(0) + + # optionale Argumente: + try: + WAYSTEPS = int(sys.argv[5]) + except: + WAYSTEPS = 100 + + laby = Laby(((WIDTH + 2) * KACHELSIZE, (HEIGHT + 2) * KACHELSIZE), + (WIDTH, HEIGHT), (KACHELSIZE, KACHELSIZE), WAYSTEPS) + laby.makeAllWalkable() + laby.bakeLaby((0, 0),True) + laby.saveToTxt(FILENAME + ".txt") + laby.openWay((0, 0), WEST) + laby.openWay((WIDTH - 1, HEIGHT - 1), EAST) + laby.draw() + laby.save(FILENAME + ".png") + laby.showOnScreen() diff --git a/simongame/GenBasR.ttf b/simongame/GenBasR.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f37980e06002a60f8af2eba6eef4b101743fcc4 GIT binary patch literal 269048 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 literal 0 HcmV?d00001 diff --git a/simongame/button.py b/simongame/button.py new file mode 100644 index 0000000..850684b --- /dev/null +++ b/simongame/button.py @@ -0,0 +1,43 @@ +import tools +import eventmanager +import maus + +BUTTON_ALPHA_INACTIVE = 0.3 +BUTTON_ALPHA_SELECT = 0.8 +BUTTON_ALPHA_CLICKED = 1.0 + +class button(object): + + def __init__(self, mouse, posRect, color, text, font): + self.posRect = posRect + self.color = color + + self.alpha = BUTTON_ALPHA_INACTIVE + + self.text = text + self.font = font + + self.mouse = mouse + + self.clicked = False + + def isClicked(self): + + return self.mouse.getState(0) == maus.BUTTON_RELEASED and tools.is2DPointCollision(self.mouse.getPos(),self.posRect) + + def update(self): + if tools.is2DPointCollision(self.mouse.getPos(),self.posRect): + if self.mouse.getState(0) == maus.BUTTON_HOLD: + self.alpha = BUTTON_ALPHA_CLICKED + else: + self.alpha = BUTTON_ALPHA_SELECT + else: + self.alpha = BUTTON_ALPHA_INACTIVE + + def draw(self): + tools.drawRect((self.posRect[0]-2,self.posRect[1]-2,self.posRect[2]+4,self.posRect[3]+4),0,(0.0,0.0,0.0,1.0)) + tools.drawRect(self.posRect,0,(self.color[0],self.color[1],self.color[2],self.alpha)) + tools.writePerFTGL(self.text,self.font, + (self.posRect[0] + 20,self.posRect[1]+self.posRect[3]/2+8),(1.0,1.0,1.0,1.0)) + + diff --git a/simongame/error.wav b/simongame/error.wav new file mode 100644 index 0000000000000000000000000000000000000000..954ba824ab0cb5054c2d4dd9e68f4237f0ef0110 GIT binary patch literal 89262 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 B5DowU literal 0 HcmV?d00001 diff --git a/simongame/eventmanager.py b/simongame/eventmanager.py new file mode 100644 index 0000000..b962e05 --- /dev/null +++ b/simongame/eventmanager.py @@ -0,0 +1,21 @@ +import pygame +from pygame.locals import * + +class eventmanager(object): + def __init__(self): + self.eventlist = [] + + def update(self): + self.eventlist = pygame.event.get() + + def getAll(self): + return self.eventlist + + def getByType(self,Type): + list = [] + for event in self.eventlist: + if event.type == Type: + list.append(event) + + return list + diff --git a/simongame/gitter.py b/simongame/gitter.py new file mode 100644 index 0000000..de3cc12 --- /dev/null +++ b/simongame/gitter.py @@ -0,0 +1,227 @@ +import pygame +import random +from pygame.locals import * +import tools +import kachel +from maus import * +import eventmanager +import FTGL +import button + +#Groesse des Spielfeldes +GITTER_W = 7 +GITTER_H = 5 + +#GitterModi: +MODE_RANDOM = 0 +MODE_SHOW = 1 +MODE_PLAY = 2 + +#Werte fuer den Random Mode: + +RANDOM_FRAMES = 60 #Anzahl der Frames fuer eine einzelne Sequenz +RANDOM_ELEMENT_RANGE =GITTER_W*GITTER_H/4 #Wie viele Elemente werden Maximal zufaellig aktiviert (muss kleinergleich sein als Gitter_W*Gitter_H) + +#Werte fuer den Show Mode: + +TIME_FACTOR = 0.9 +MIN_STEPTIME = 20 + +COOLDOWNTIME = 20 + + +class gitter(object): + def __init__(self,size,eManager,mouse,sounds): + self.kachelarray = [] + + self.size = size + + self.eManager = eManager + + self.kachelW = size[0]/GITTER_W + self.kachelH = size[1]/GITTER_H + + self.sounds = sounds + + self.mode = MODE_RANDOM + + #Variablen fuer den MODE_RANDOM + self.randomFrame = 0 + self.randomSequence = [] #wird auch fuer alle anderen Sequenzen verwendet + + self.mausimaus = mouse + + for x in range(GITTER_W*GITTER_H): + self.kachelarray.append( kachel.kachel(x%GITTER_W,x//GITTER_W,self.kachelW,self.kachelH)) + + self.initRandomSequence() + + #Variablen fuer den Play Mode: + self.level = 1 + self.mistake = False + self.playingStep = 0 + self.done = False + + #Variablen fuer den Show Mode: + self.curFrame = 0 + self.maxFrame = MIN_STEPTIME + + self.showing = False + + self.cooldown = COOLDOWNTIME + + + + + def getIndex(self,pos): + return pos[1]*GITTER_W + pos[0] + + def getPos(self,index): + return (index%GITTER_W,index//GITTER_W) + + def deactivateAll(self): + for kachel in self.kachelarray: + kachel.deactivate() + + def activateAll(self): + for kachel in self.kachelarray: + kachel.activate() + + def setLevel(self,level): + self.level = level + + def initRandomSequence(self): + self.randomFrame = 0 + + #alle deaktivieren: + self.deactivateAll() + + #erzeuge eine sequenz aus kachelindizies, die 1 bis RANDOM_ELEMENT_RANGE lang ist + self.randomSequence = random.sample(range(GITTER_W*GITTER_H),random.randint(1,RANDOM_ELEMENT_RANGE)) + + #die in der random sequenz aktivieren: + for i in self.randomSequence: + self.kachelarray[i].activate() + + def generatePlaySequence(self,level): + self.randomSequence = random.sample(range(GITTER_W*GITTER_H),level) + + def changeMode(self,mode): + self.mode = mode + + if mode == MODE_RANDOM: + self.randomFrame = 0 + + #noch kurz die richtige Loesung zeigen: + self.deactivateAll() + for i in self.randomSequence: + self.kachelarray[i].activate() + + elif mode == MODE_SHOW: + self.done = False + self.cooldown = COOLDOWNTIME + self.showing = True + self.generatePlaySequence(self.level) #level sollte also vorher gesetzt werden !!! + self.curFrame = 0 + self.maxFrame = MIN_STEPTIME + (TIME_FACTOR*MIN_STEPTIME)*self.level + self.activateAll() + self.sounds[1].play() + + + elif mode == MODE_PLAY: + self.cooldown = COOLDOWNTIME + self.mistake = False + self.playingStep = 0 + self.activateAll() + self.sounds[1].play() + + + else: + pass #TODO: System fuer einheitliche Fehlermeldungen implementieren + + def getMode(self): + return self.mode + + def readyToPlay(self): + return not self.showing + + def readyToShow(self): + return self.done + + def madeMistake(self): + return self.mistake + + def inSequence(self,kachel): + + for i in range(self.level): + if self.getIndex(kachel.getPos()) == self.randomSequence[i]: + return True + return False + + + + def update(self): + + if self.cooldown > 0: + self.cooldown -= 1 + if self.cooldown == 0: + self.deactivateAll() + + #und die kachel updaten: + for kachel in self.kachelarray: + kachel.update() + else: + + for kachel in self.kachelarray: + kachel.deselect() + kPos = kachel.getPos() + + mausPos = self.mausimaus.getPos() + + mousePressed = self.mausimaus.getState(0) == BUTTON_PRESSED + + #WARNUNG: nicht in den verschachtelungen verirren!!! + if not self.mode == MODE_SHOW: + if tools.is2DPointCollision(mausPos,(kPos[0]*kPos[2],kPos[1]*kPos[3],kPos[2],kPos[3])): + if not kachel.isActive: + if mousePressed: + + kachel.activate() + + if self.mode == MODE_PLAY: + if self.inSequence(kachel): + self.playingStep += 1 + self.sounds[0].play() + if self.playingStep == self.level: + self.done = True + + else: + self.mistake = True + self.sounds[2].play() + self.done = True + else: + kachel.select() + + kachel.update() + + if self.mode == MODE_RANDOM: + + self.randomFrame += 1 + if self.randomFrame > RANDOM_FRAMES: + self.initRandomSequence() + + + elif self.mode == MODE_SHOW: + self.curFrame +=1 + if self.curFrame >= self.maxFrame: + self.showing = False + + for i in self.randomSequence: + self.kachelarray[i].activate() + + + + + def draw(self): + for kachel in self.kachelarray: + kachel.draw() diff --git a/simongame/gong.wav b/simongame/gong.wav new file mode 100644 index 0000000000000000000000000000000000000000..ce2be31cee15370725a59790807a5ef0eb0961a7 GIT binary patch literal 132998 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⋙Ox$KTy4R4;{lh7}MN~$Fr zr5hpGP~?B}RHf+)rqW_hC<9veB=QZ4fVEGU(YBVtRVAIxdRs zizq^af|vag-*FGyeaYF?;jrDXuD2{RFEAZ2el-XU$Mt!7gAR~RIt3sCw&^K`2Zlpn z!aZqz3zX8Wb{_CP=XrYh!~t=L87Yl*P7F(}Z8;8o3a>^Q&~9uU{ul8Ac_EcUe+aan zE$km0GuOxa#@{c<5}p(Kg+icFvqc)=HX%;9RPd5-=7qUlPC5G|YZx;{-%sOFkC5@C zr35vuJ@yhBkD7+4f)zlow&2o-lf1+^@N~(l@WxPK(C`1|JMP`&SqQYCmCmD%_x6yj zo9(a_VqIxLTCSQ$o3qU=ri2M@E-=pl*CP*{#S^SjTg>LRCmjseB==R1z_-_*2Po?) z5m`(Tznxs39sra%8~k77M6kHv1#SvKN1Q@_O@Y$-(8n_tGe@ynvz_ey93J-o*TT&Q z>h(O{BHnObG0(}p0A}7VoX(v8*l>1l)&}M&#v}R-+9m34N*^+XbcN6t{~FsCa|vZc z6v2lz=O-&qcX{fYII<+S;WNp3o3>|#U!w+d_Q4fd?DOqYSLMz{DamDXz8M|-tH>-4)Q z9*MWRZ)RfXE3M#)8c@%f*pnX5Mxm~^mJ?rcY@G`WFT(` z`Qj$VG8US%jqB!h6D$+%6s-oEziK3%qzk0Wq@AS|KndzE?kchh*6_=@9=4bHj=mny z8fOR@xOM0VVi3rLbV$|2H%HrqMM0*&k9Rki1^;zyvTwDWwCB)}74_0}0Sjcux3W1r$^aEx^RboOz*cXe=oaCh-Ed8T{OzSq9Z{t1D8!QVr3 z!Uq5u&?jD#m;xrmD#$t5cEnQD0>E8QA@nB|QOLAP`YtA$eUPK(V)+4Y=!EG?ui+Xoq=12-$uAV{EzgITt%s+I%qb!o1tNTVO<2;uMFsM{djkIX&UAJMR+4d$&Y&%$ydxoq5_~sofAl!y82BRS_LdW=Pl-URd-P2jv#K%A9i? zmp}#i!}iHK2x#$}EbS~UW)-;atIbX`*D}rW($dQM8aM|6yUng})H@?Cv1hLLrH>mp z9~6e)L`KGNiTlY3X))vnbPv1)X+*66%E>`|ny>&|iv&eLE2HNykjz@<7M6&8ijCw9 zrr6Uk4%z*fY zx`Nq-8wj$W_sAouUulJm&CGkOAM8(@bKHr%2yZF>D<3Z43m5_?{~zGnzTgRYGl1G~ zg?*Z}n>mvqp=&|y$RPhm>_qsE>xlh|ZiRY=D1hIC7DHa9N2PR$?LdF8kL(E#4iyA_ zev|Km_nYUtTkj$QZ+)fXgI!|ZYa;+XsJqn#RG*`kz2JS%Vz-o8Pg(i4JK!YF1D#^j zNpR}TgW7Y9R$pYZr9)Pxj*CPG~8Ie2K9Q?lo1Zgn&809Io4xGL( z7(19V0 zOe53J^f6t`X69Sw0p=JchIxb0j&X<1rB9&kr(UL90H0$ZF^WHklVI1Nbw~zcJZv@O za=ILNBG8y9GB~s)Q0Z&yJ?n1ks&QNeRq>?tn}uUJ47y&gsod0TikW(wFPr6-=aw1P zOk2oSV}AxXnH#R_px=Gwedl}QuMN}$Eg?%d9!W(ZabY4WIXE>neX`{x1PSW|--R$B z`=TFXa&b5CdBiKEPLzk#p7aNdJk~aL6$j4)>l_4d;cMYQ(IcP=MS$bE0wfSJ0kKHp zf8zeeImi0UP|-dC<$583g8P6Tg=_(=$+BoufBKnO76P()o0FA zRlD}yRS%PMBxh#Mz??BTOLDH~gmT(=4|z%7cwe@!qyGgc=w}1Pn9YovoyS_Z8Jv}0 z$>$R82&2T(Qb_tC!&Sg)Tq_+~2r9zhSWbMtuDXFU-Z3w>_D4!%JbsrPM;COQc9w-r z-OrN#CVxozH?>8sySeDxX}JsM_U2leOP8y8>dcfm$>Wlmc;c>OpiI4{J5k?=0eA*F z3W->^SgHbJ@-MLOy>wL*72_pi)uIg}{lhCldx9@uQ!JqtQtHcnq=DjCVGREdHyGyH zdInnh+xc31`{m5YKAOe+ZSnVRW^eGK#4`+;O)~dpR)IIgWw~>PcmuwTf!^#8eu8*Y z)@zePKO!UIKXpBfAI)`a+t4p~oJ`Q~9P3@Fo>@sp;a0F2z$vcD^*UD|*C&YYhPm#g zmQJ0Jayl8F%>&2PmF3KIe71k4UsJFiir{f8o{H5+J0lBi+pUi+tXXf)ZOU&fVMx}K zIw5{DwkTRLk{y~B%mouK<>U)ub>S}8j`aoB`CIw&do4L=cKNJHf3qMj^X!;z2yq3s67eIjWmw=;&XJ#hQ-FHsitMQb*Jq( zas*wD4Z`yhUx-PhmD&Zda*+1eH``5)*$&3h&-vEb)OFrf#JvLIqYdEQ-{7As51&$i z->-T)dY-!TxLdfoI4e0+dOMXM`rz}?J+>8=X{MG2tL|28Xe58=k-8QbxvG41wtira z?@dnUY%J?@W_CtO#=<{&{$&6D`5XJw8agLov7q_1yiZ5(MDZ60fxZ=Gpdi!4UBV(amB#CCEEwS(Sd zUjaVZF0NW`gXf-SWRfv?ZgO^VnUp>$gHyVv%LG{Xeq`_hvp&s9lo6o*w$}_tIX@R@`3I6iH zm;Uno=eq$l{GRW*&+oIq-}?Hu`9J!L1ttdG2I@1HnP%)4b}iQ!{3a$*7L(;l%0l(E z)--f4+%js2A5YBDH#8PC$1U$|x6rltNU|iIV_)L*xR-f8C%Iq>AvxF2Tnj-(Xp(1S zogN$$bDg5S6MdW%@w(tDyKNQC^-XIGUv*Uyn_@_G zHuz1>X)RPrc_^hu9y2f4zZ@>q5w}P_xu5!0>mJGg76^;)1jP6n5Tj&XXjN_f(5IM- z=ua+&n{iLrx4^ro>0(`r+$PUIp6i|%RQC!{$sG_M2R$7;jC-SCTn9Pfo_JqMu)+vG1Rfw`2sYZr=IOeU6R@4VJS~j ztf^%n(vwruQ&y#*EO0BP2LCGiUB%7GvQ~6q4KXyCwGf)otb+dnkFV%P3JJDOyo6BqV zlHMYKzIFmrI>N{MHu;+dXePuktbxxXbQ8Bq8FFX!iqOc>$cLJmpbe?myhPu}b`rCk~U{al=mPz%J3WEZ2(KFbi_iS<# z?m4bc&Qi|)j_vlF^keD`c?I@mjlyc6ifxm%g5{#AhH;%E4FeZDL z1{}|y5hsEZ%N6_BJLqKGlf+PLHsQ_5q+7 z7I98@-f+g8Wn4X6b6q=K=Ug{j|GBQZj=NU42Dpm4emUnuJ>TUpJ9^r;(zmJS$M_H=Y#b_(`fbZIgLN6;_Ui{_ce9{L)I)R;Sx z6soC>1+3dr{J?MGhOwiVrGZ!e3jS-pp}vAXJs^0UFSoC)Z#m4X74t9fXZo83&Igj2 zWsJlOWIwP?xtm-K{wiNZ_#g}vlcoF82D!h|NNu9E4^9o84o4zAV%Op=0mDx=;^s$| z;Wjt=02@jesg<!jRDK~ig_R!a4x-c9M8ay8kUTmsydCBQNB z+OgJNjm{*O5e4uEXg>tAowxjBE^3M!KIt#&PA0a*PsWZ!Uq+ZP60Q>J99*m&R^KTJ zIZ3WAwGjsj6M;3|!tP|w1@8EN!&6oBPReOpLBTCKluBB^(Ar35tf+3f;j$@e$&1tn$BBdbK~Hdmo%P%kJR_2-CI3n8 zlX5oYTgtDLYbn!G+~CPDB)3c2;`z@Va2WuzmvGd9F1;r;np{X6!Ea(-)Pz<+y4V(5 zuUS5r6DAk1SXB&l^!0Q_6I47sdL}Y7Ts-t#o2eF6Zc9T%vv3}G-{MTj|HJpe8vreL zRQ9*5iNM8CS)QzBS^MDI-vjHlRJR;`keUJYgqylEtZgR6%+JZM9Far`y{D6JN-=(CKwHhByhh z%DRWR*Sin8Pr3KH$GI!GAGs{8>>}xsiy)j?S zzu(zF7_XQfny*^!SkKumAqUXy z*amzVF^e2c^`h(9b31~LJI+O}itdl@{=mW2Oq!Q;Cg~RZECPM)xu>CL9X!Jq=R3!7 z`#*F+>LgJK--p_ezSc{?#&tEE)+ORY;8x!z;cvmgT0Zryd`{XZ?h(%NnOtRV5gTWw zGs(=gz_dW4fGd#jXF+si`9AF*}0bZ#17O^}3_;tlDR z{7H$cje~1KOn7wE2NT`}_1_E&Ow}ww>ltJimPFhn+tWW_CTzbe!);3XN~F9Vmg5A>-K$USQ*%O;a#7y{f+$N0PG z=m-gV&OcBEt;$d7qnIxIliaNQavJtwFZh%VaL@z`By#TfFICSdkESj|gatO`9 zQi&R5OR6?q&aQJjaEx_YT#MiwHF3`eCG>&&iTkp9qr0a&$$iz;-u1!R)_KNZhpfAc zen!b8LZ%YA@q%!o1lu#~9?LLuc~jVMNIwYXJ#WRjN6E;QP~RY-T~{W+mZ_j{i$BDz zU>7ng0tfu>d=B48@AsU(Ifk68*=w_BLyvnRJCxlf=L2w!d0+ioE3v0HdS*lTnXHaZxcq>FLghnPo_RswTf zKDl4=2>7X#EG2DBDv-3s6L6P>9(@+@?sH)mMRTeMDdWemQD`#q#5&oM+x*lx!BAHJ zKCvp^Bxa004Q~eI-dwAp!V)w&k5o}?CrsiGa+z!yb}68(;Q_yYzQ2h7yYG;1rf-aI zgm13zs4o+yA$R)=22KV#GEVk4`<%PYzY%i4OWID^rV3hnh?7#$&9PjGl{(Te*Ql8K zSsq$*BYn}M*c&`fm?@m*>HDyEs=D)=v%BlPtCV|^`CJ^p{q00 z!miHSj%3GB`w{v*rH~d9A);6o`UF{S>j19Be@&H)&-LAO&*5p#!9AHvgNoW)c`tPl zU-Lsb9eW=5hEC8$_0CzA{WYse*0;awz)dV;mA#Q; zE!1|Sv!b(`bEz6LCItjD;+<(QdO3r7u#MBthmPFq}s(A>(W= z>v2Gf#|*{va}s>4ZuCUh6q>B@;Iod3n}qhf6Lyyw7kY2G&8 z_1J zEzln|JT~ghX_g7#@nw)Y*kb$>+%!3oK4|~yFuMx4OM3Drh2Tz(UMW9Q8l+BzdpRb9 z*7-K2dCDs2MD}_nxO2OXIFjt6sl&u`>?a~vv&@oF)hoc5U_vmX1mTWv7y^+*A)~$AgzbKVTnT^VqStNjFa~8Wx%imNnLbFjHIwKS30tX3}r$ zF-Nj15AeJHdAb1yR2t%ARC3qkq~zO4)suF4{<u+0Ai@XCB|B4<@j4bZHzvpLWUN926YndPnNEA6il7{R<^8}kfsaxZ|x_he3U&`Hv>KW6K58s(gaSp?bp z)OQ7Vcb=)pEd-xN58!`#t3S1IA@+ZjqkH16&S4m6Tx~jMeqwoIy<^*kOh8LwU$F&v z3UP)gOJ4e4T_@G&dLX=ij=_BnDMCd@|z-IqI;714L{F`k7 z1-Erpp{#OQ?ZG4N%086cDJQQt0To>zC;)x!4DK{931y|}@&zTTmJ9X?Z4FSQV|H5-7S;OO_7J&-?!{K&fk=^ zmfZP0TCUIZfLq-$gkg;z~Y;t zr6adP6N81dsPaL6C4CTOp(1cU@40H+1GY6AV@@&?nfgp224xa~M8FDlz5>%3YWYQm zVJff-*spA3?lf18zs?VU9{q;6P8uc;RQjtkwFAMIq2iILP}6%R{^*7qMB{pMA?pKM z2h<0+_XpXE-f#CgT&@!Ey(6CUNiAU`P)bTuU>fSApeZMl%O`J2`V3qH3R4xCj?<8_ zFzPf>1%He-2ClcG<&mj9IIRcj*!YH6?PzxRXlO{Vk>*hy3NF)9DX|H3>z6nSH-de{ zv|#QB`UmuZ3;r4Y=Kd;BNy_`1LF`}f+XBM^*|2-U4Jz9@ZZO|MXe)Mtx3UZ7bW(!- zLN~*%=*-yncvIa`y~{YlbjR$r_OR_no}d!!`AZNH@*{N&dPB;w3tY>KoqwE#TpeBG zT$5d6p_UhSWk3e5=zQsD>bP$&Zl6!Tq6n%XIgD6_AHoi!$B{j@mDUNC_U0<4h~bTX zHOz)MI#c#C`6 zc^7)qy-j@YePjF;fU*9?{9$=6kI+usCrNTA^`+JTIO~p47W!L*ez&2p>9V<;^{g!! zorJx>39{-05Zlzu}G&UVJ`z&eD6K+FqV6X6x#C`G*HIc4l|7D-x&^ZS? zpF1g6Yu6apLikK_b#fJU{c)~ymWO)Y%yG_Mz&;&%TN72BY)|yVhX8ZZ9I0)KLoc$} zRM#l#7wSqSPR5!>?}s~qmM}<-%ZsHlP}P@n?V$_F7s%zW=Nk)d%xXDrvKMA|&F+vr zH2ZM2F=t^;es8AthVQ2TNg&Ep=hi~B_m=+1eW9jL3K5Z2Q9QmT5!H<}+%kI1O)X=r z>uj5#3z>qo#cARuF_a8}W*CB6_?RwiA7MXb|7%Zj)P&{Ln8=o9}F?GpJB8Wm*JbxH}@ zD;^e>@w2%F>`~@Vpl;xlzoB39UG?qt?S|huzRLb}esf?+ATM*9nFN<9YTR{xwJ=O< zBo&fvicfi`p3wFO7lfvT`$u|4Tg6(%8z<`NI_P^FCPNOsXnt>r!rc|Ufnj`rM~Grn z6MBq&s$-dRysN*vpy#V+0^r8h;Pu;`ygs>CGM>CL$?qxbspKx{l0XY-LSG?^5@WC{ zphf4gv@ne^?9#o6qp*?Ubf_3O78@$O^gui+T;bnwxw)Av&n#uq7!A(Ot-y`I^8gcY zGVS1RADR5@MD{6LoLk6wxz_wyzL2m^pv5I(s70TF9;{q7M@{_V+=T&^zJ?GRL@w?3D0fMHP2$`pwmVTNPRSjZo{hJ_wm-mBcd^RhRj7RrLy4d9HLG3uJ(WJs=cyf zisO*ujl=7RI|RpH$63d8M{bDsH2Wg@5tT!#FmrzeJOU)L&1!?1e#3z1YbR!dztu=O zeZ^JMS^2MG)`|z)hen2%N47^##m>b~L05Q0f55QTxWF{R+|5$mnq<=>>Bv2Zk6CyN zA{QATPg3LQg7%m8kq+50#rYf9-&wAcuG`@2-{TtQaskJX%Q@L`*`7{^0K2~Ve|VOg!xaatxS8$8 z)?)LrP8MZdY${ugZO_hOkFlA6d&hAvxMKV+o)UHnrNl?#JgFAoURlXf1DX&l5N;LO z6#Wj9M>{}gn*rV7SWBjL5I7hs;hTsIvIN}`^6ofiU+AU2g6l8SQ$J~3((9?FvlC-+PX`%DsSfoL0Q~XDwvVIzHCsuP~%Pi|*+Y2Ne{eh+9_lP~@ zU@9+tgKleoYOe_$)fWfiEbXl7tl`WLZ2Kd}Tt|7wJ$p}3r&`iyDTL}qZXsUd7Caw# z-kTzwZLO>=EcML=OtkU0{*i8DVobb6i~_uPA+#YlKx?iRR8ruMWn6R!X?#m=A$yN0 zz|0RAK&z_a7kv+XCqNZ>?2AHt9ESe(M4&t4Vtwo@?lu2GFh~XE0m?De5bPg%9Ih2T z5KBp{)tL-4jhUvdmXlT^(iUBZ-N7>nmE@@m`mBAtqk!{_v#M*O%MT8%n(jL8@@|v+ zscSUU^F>a@(Z;da{sQ8i1kNNMa1BhKh4P|ZvdI=Dms(!y8(ay|Zj08AZH&K56w{9|Trx_gf|h~SIkuC?dGtPZ4&O#h z1`b}Pw$Y{SXY8pE%MTn0M{#Ez=xVDw^8xpE!!gE@2T)=?`whAhy`Bn?709u~9{e7b zf#x7y+c)cd%N~f5=5R~J9o=x)(tRsB5VVBD!QPszoCVdhu*mYyxSQ-1=2<|2_pkx{ z{QIH1E$F4a`2b;U_gZ`#eAWF4$XIWgU#yX@EKC$1Nkx=pP}2v6UWY41|BaawgLN16 zdSg{nAM+y1D(hC;9AqR~0pp=tZ$kVc29bZrw$wR_pxe`X=(jX#uVC+BA8DUvpADZ; z_Ad7F_5}Teo=6v>Pg8ZN!=#5COdQ1D!F?McB-8fEdeAb-T*LIouwI|0dll~+GemcX ztA{eRm1-M>k{RH$KJgsq2B-CTrYv(OFgQ>qUBxE;vDY+;hv(`-vF#2ts5 z*wRE%d;s`rj8b29X(8=p@M>s%cy^?Jw0^8+yilT`&ZEy~$ZafRs%mZkZ)LJ=3%r## zm>&-lG`O1FcGTf_+;UEJ6>^_(m+;K?-1NNny!IUR^z&%${_bn8bU0%_;Ju8doaA;q z37diZwAKV}^s6B+a1AeGjiOh=bpc&1RGTUV%k9BMdHW#ah`W|E~ zYzejQne@*ee` zzF}VlPU}aY=1g-Pb6o>9X9Zy0uydO;FL+Cgjsf;7G(xwfwvp*XDmVhRL0qJw1CgV) zzt&RL0hWX2FD8enrE#=joBp)!MdE$@Ps|_v8u=W)7CIeVuFU`*rMX-~Dk+u{D)Ftk z3G4+%&x{Uu{Y(5c{SLnYe(L*I`6K?hfs#xnbB#UCo#dYitXNzgq?}cwps?)=XGLnp zrpIq40y@G_)>zY27yM<(R>peVHUUXSAEKQw1{;BMcwgcZoqiWy(l*qj%F8 zfP*{R7uyfo@7nL%@7WLA=h^Gq1$qrU*A(hD86{}QU3%;@vfox4Dq=U&H$x5Z_gdmT z;e6Rc)3i)wkQ@@%3T=1~XJyTRN+yGfFaSEK58hkeXTUJj^6m5G@n7~23>0CafJ&Zm zk6?=8yO<&A6->>qRSq@@bqV*542uqqb&vN*G}G187co#q!T8B^0pfj>wWcjMl8xL) zmtbA+R3aUe^=4F*T1%G%1Yg9l#_`)x*x3Qtg`v()&OFX^$9PBFJ_uqXM&$wLVo4$u z<|OYROKcUb0rN6Y3g79M=qe_D#r8zI!AylNBx!$CS)r85@+9e&m`_|K;KBjE9v^_2 zk8xact|XVtksQUPaHZh?MsnM@R~*jw;1BVbFiQ9<^cQo)#ZoExuY3sZb?BwF2(}6J z49|${kN$`yCwhSI&j=2ITjrwHX|`ub0jwXs50t|!DnS3WUw6!NmWH!c(Y**Z{(W_) zyRW+ExC^__y7IZEIj=i@+rxC2;>Z`E?99Zfp)sf-!{G+sx5l}K26~I`L40$pKPb5Q z!>J)p(4&=7Yb&GVP0|;!q&Q9Z!?%X~+ldPRI%&uv>^tTP%%>h;&M+^S7*mH`#mcZB zlH+FaMTGCdesQMMSMH>=SG#CqK|Qz}{u@aFUU50FKmu&O>}FbRK4y7gO}BkUet^<; z9G^tgB{Rt-l$%~l>)<5qx4*N8fdg_nbPlimynU{{6x8!^v_{RM{*s-@Lqr&Fgipmz zp|26iX0)YPi&*lR^P5Pc$>7y}N!*VgjID@{h;$BD1+3-JP?c0rIloj^>?JIOCrRd} zvYE_qCK@;t7!;@w$QMWnln(TOxmzyKgZT!#JM(jYxQqM_VH5ZQj>)f;gjy>&C-f?u zCpsqfJYGUKU;o2U*|gC7z(U*VAd}HmP(uz7Yssmwe^GBg023nT9jVTd&V9}&&iBrj zP~&GhD>=V9hQaf+hxwKuRf!r2I@DW=uEnUB z2WVIPL!yYjxnYWNlj(^0l;wbRt!)TW3gw{-fqj^GFX98yggi!u$u877>H}q=%h8?a zQS@|r2|b6NO824b&@TEDwVtXCEa^bfOLQhKz;jfGE`27l#PWw6i&){fGa*9;{-A$rcw)S6dIIMQ z7HHZs5m?EJ33v{m_$Sn9dKOINN{$uIWY;{`H<#004wOy@`1Yr`BEXpLcf7R!1byll zpp#tqY2f6ZS?hxTvY>Ih-lkg`cgA)^YKOCfN42SHf2A+5yvM~%p|Nm|ugibo)^gpr zvVh_3TrS8{t+~m7)c=52e;9v;Hw*2B3j!ie65oq$q$^TA`I_8R`2*Rig67rE1LM#m z+&0oE+Ah{RJ_nouPxNME4LDnuL2WCIbcf7)5Wh$OJ4MZ=o7oxrd`HC54eH=+=Y8iD z=N!O{?;O1y5AFHE1G|g5MSdkRa0dH}W+A_9AFZz}kIfHFkBx5)>3Uh0qAQme6kim( zALS!8BGbdSLxxcE;709>T3nr~T$2g81Nedjp`~z$H}GS)uWTul|w2X+#bpsxgG5q*Xg$Fs~BIKdRqQi+W@u-V}-zl zS)VFJOY|;#nq#wr2e(FJXH#GjEzbK;GjPXNh>Rt)1aWbiGy~`JFD_yYvBl_jq!=>V zcH0`Uw6!cYzlWOM+&Is0T>nLa`xSwM8UkDVl_>#XR_YJdAfE?h`5GH1aW-L=B`4QaRwB zYfDd{H`4#oN9e=!VtO!Ll>S3ar))5r_lZabJ)sY94?U3*wut2b><;*C7_ZlX<2o1} z9^pbmgF0<9+^(aDSB3rj2JSeU&g5s-1gO9jV0U}^yZI;jPXfm3|p zKgUnxoAV`jg17Ne4&z;XIldh~l|RL2@nwY>!h4~*co5ts2c^>TdwH5tRSm0;wUfb} zpeF2(T#0^&iSdfM-uh#PU&hkrQIZpJ%m#8LHG!^SkK1>`T<&(K#Tz;Dpap6*Rg^kOrjgqSGtnPEkA=`` z=xDf&_>T3jMKe!Y^>SuB)b|<8PGA}Hf~!}9O&WRl7yNQzfLIsaNO`52+F6?vJOs7S7;O_< z6n~o_^<50>jQ34Ch>(u9;m90xIy^-eq7*5U`>B@D5q7j+v|Aia9HSkJfM*!zXy_mv zSM9y+Sr8j9sWQ}T@(v;4`SChfM|2o6!8Q@}^pS8^Q+H!`Llb>7UDHIJc%xY3XvavO z@bu8m;599vrl`G?ow6Xckxs$c+AI_lPV*h$L|x|Qab3CUTt%)N*Mb|)?dE=gma_x6 zpY1|1@g;CS^<|gBDc{s*+C9*7zJ=w8EmkJpEHM_MeLuXB_a?#2T0*eR;Wcs@T?YFc zP~sfXn*2z%r|wWG^f3AW{fhR}VLC|XKwrC)?oX%E|53v!o}5E6#9-nEo{A5}_M_>D z9w}z449rPeb8}N|V_^fK&rUpuABc^GjO7lq!CTrvb-FSRZoM8Njss+Jor?f(b(5(H zm3={=4Y>cx2O0jSv+%j@HN0vEFz(-kdl>AY>PE51CHV(2Mt>W>PDu&G1=H zO`&>GX;c(6#bG2y?jzEOy*LSc+&T0&k__3Zfwifnnz@+CVEm&$rdyC`0~IkNawI%2 z)G1g^D-Aw}l5nbq0S7Ph{rR`t2+qnqV>g1LHjQ1&o?;o8OO}PQbhFw^FAq9GlYcShId3JMjOQP$Cdc!#3kKM{Q|=vV{cPq=+w(u(`@+>618Cx z_6uf=W5vBeIE3wAgaqrSUD1pob&UXXW9i*~{O1bUH9b`1PJmFWvqX=*=-19$ZvF9|oNr$esV2*{+aZK3t2r5NDd z=O&}6lW~#ZkzUdj1-)==d|T{L^j_p?_!rzGt7$rog40z^?h3AlOG1=y$)APqf1Yi_ zTG+454dy=d9(KU;57{Q*#9GF;7V?TVm_SI#HZ@7B8SEIE8{QUq6#X2N;zk{H$i^S8^dqk{bvaZ-;NhuAv{0kG3b)LzWrlN+uC1NnPE~_(Z6ON5aiRF>Q}J z65_)pMFdnR&iCO?Lf5f}sl(`)_kovzZ=gdrgw7Cycqz&~=jQVb1(%pDzJU9OHz^C$ zf3(5D)}hAX;t_i^0$laI`1ZscU2AIcpsT)9RU^xwXY)Y%gAy zcn#+(o9s=!po&2yxj_G-BecOTK~CNdJxBmhiI;3cZiY7##N1dxG#BEq36^hA(^nb$ z7%J*fc!r0uebJqf4dJb!gTenaP%PEa!2T4HcS#;#N*jQ_en1!})D&_-H4*p>o&%o@ zE|d`33UeV!LPC9Ut*D5dr57;e`A#0Dpz0-c81N3JP!=$Zk0TGGPh%P2<mTFz?zrlh<|ypAX0K@9N3&El zY7n^;T*(KqW9T+ym2Hf*r=^lPFL1pX`lq@xi39OxIri-eBc)XI&pwb^^tqYz2mYtgs%o!;1R_9YQZCJ1xN39*p|~pDWK}L z-`dCElhE_<>&WYwyFbqNC6v$d;^R%0!spAr#+ELbRZv)9>9sa zDNt-EmJ+FS>MpebI3b$4Np>RzVjNV$q4-lQ4VwvGEEH*En{Pc}d2RNZ%%)UhQ9~nr zEnTNXi+E4)$qkH*2u}{J3GURct6voJ{}`0pqC*@n{Nnoo+qj&o$_3fSkbC#DXV__;wiuizbId~8JKZa;=$X9a{Cw1TSs-cvro_VlkJh-!F zBO|~~S{Bz6*NBm%5hB3`b?`r68Pn{|>@9({Dro2FGjtc|(5F)gaya>z$V>Fa_hB#4 zC{hrnxjVr77;FB=G~YPOuv))EwTemV9c`X`bI7Z0}#%?O^|$@hC_Lns@B{b;d= zgfJV4M)lAY=F=6?S2xr(Ha9gfH?dT zB|D~nY2rM1K+D)9Rh}w2balKW+k(SdB|8nv3kjN z=2*}V1_%{Fy(MHsNmUDJb%MP@^8oEW0;h>N;n9`XS2WZEwz`bGo+~{U3yRAHD{$Dg zd5OEv9pJWe2e})ZAGS?Q;NOBr{De?iyd<`eGNh$)n(`48gj$-WodI`4nXn)3PM;QS z5_81=#Lt0qvA4dG!DAGSUrg7``z?#CgKh1AdvIWXz>hhPXb3)m{Zvi*AzjP9&(1>3 zH+8fJpMcZx+CJJIq=(X1D2+@d(}<$D6BCgewz<|SFjKL~*vJsk?N9WJdty0}bK#w# z^}zD}tKL;~N|XPcsBL0(@vE>^=quC!yyzC-+IFG7&|O$0oELmTVR3|bN{oxGfpa&= zqvW@89p$D{MSY-l)Ff?FuvRDm?#qpl;h?A2jF(B2*HzFrfa#+_rU~X*mJOhb>_xVq zE3n~seZokdCOc7Isa6mZ46wZA?N#i_c0VA;CiEAmCI6AR$q~eH{3k}i6h&ubs%^RT zxaEfVmq{|_Gd47gga~<>uqJB97slR19l*(*4rAdyp$oxW!4cXkwS>A-@yng%8=$Oj z6`kTbAxSvSH{wO^FgF2kZ#DR|hl#wKTnfL6PZn+qQ{lPNL)pFpJaB@Pfj2?yC2aPA6nKY0`~z+Q4CIg%_#^2Ao60&xW|gKvhLWAlOX z+0QoA+Q-t^TnM(;U)9eA_JoUVi}r{(!|x&Qj#fJ=wdICVFSs@D0ravJcG z)-N=)F;b?truF7F7Q}kRI^I?gd4)_v^I%uOOY;LCLi~Z7+isFB!0)@L2UI5Ht>4sR zY9pL19krHBA?FjBcqx1&wgbHgoBdwE#(+EKi>AZI<%a1nDcL4bBVIXHBU&9;lYyai z!RwkqYYP5Lr!rqgfxWIGrHdQI9%3O;C;k*(2=|5mgqK3P5Cl%NkvK;@FUDXReGl}u zqvQZobWK^Qme9Uy>w~>RMZ&g7Hq^scvB&XGiEp|fD2K_W3V_~wS_j%jLmlaiH39dc zkJv}HfN$N8ehvF zbyHDeeuD>`0W|nXi^kHRml_ma6uJVAlPcOI^@UPYSuMw<8IlP+{pH2aP`O(HIuZG= z(8<2yzrkk60z!XbA7GQ7;%l*$^i7%~=T@F6tD(0o6SRb+(C6?Iz$G_g|HW?s`+i4% z8x-7wrk&=QmLb;4HUxQsOh-#&53oM?H|TV45F|MWvhH(W<3qria^z?76!e0%pq_6h zDiM$H_E6F5f;-L(_2alLYOQFU2-@vCi1ysZdf=a#2>sN)`0?1&=!AyANyo&FVqCZ>EEIYGYAg*% zu@Yd#Nl-xqp)qhj4r!f~B3}U|ga*xXImCL^Q0}lPqC^6K;D3Rl{zdmn{|a#LRnso> zJWGFTMVkTY;Z!sqb_HvRzr-65#|abJo?JrSfj1$O3dushdx=~Pf5XXZL{Gq2vw^Li z12Ntf-H9l+ind9Rw?3G4FxOqtSl!SH?%n7Bw`sMBHHkKe)B!cRL9mt91*-aT`L^U2 zYk*26@WVlsUd`13N9J$#Blt!WY*}tLbRg~cbbg9Z6!80bX`MV>8KDl;h6hJMO= z{h+av@ypQJUe+HnY&A|cH8`)r08R~lIro`Z`P{%MCc^Fv|Z5YGikK@~b%_^iZJvm@ieV?wioTeXL(5i;)uxv+d*stxaByEs6sEP6zn z7!|CdT}%^Oh!e$q;up~=b&_^UeyOUwQHF}C+=6Mm<7z4Gveqp4Be*P7F)W2oL>9rM zeOla=h$U2=PwzKm8PiSK=FgVz)_b-q$Qr;|W$-L~Jy8_mIxisHyA%(T7A`tLeW&(P z?O~>6CK)D%5)bfXygzmj{es{~b=yGea?3^YXA@$oZX9gbp?|F-bS)Dbpc0mf&48J< zVv#w($~6t`2x2gW^g*qr9)&nr0sf}BQdnFjx`CnVCYYeItmj7o`_PO3hu_G*=L-p| z1VY>m6`$y{R&|vKCoaLRDXgj>0Mc&%26n zk!whXtU~<*{<7_$?M#Pnp8^w|^U1vAb)pe?ep=wquo}Sn6oPFtL0fOzf7W8wB`}@d z#C*V{8rvAR8hrYy`boO02|ivN`jF+(E0I58Pq=bucyP7$0JPkS%53=_c(mq-3E)v& z!exFeuqXNWWWES=S2OuHd@13mPzKnzDWK^@BeAA!MEdmdJftVV(6W$Y= z92^9lVHaf#;F7zdMH~PEs*oOr@?$ zYM-LVkFEdMT*yUmHvK{; zU>Y_PXYtgV zI&ZvaIHEtJ+m|>UzZAP2{S5q13TPnM zecvc&{dAKOE8;t2x4@@?z?Q;)Lg&Gm)k52^ zn!t0CDUXpkX$j~F&&5SzLy;1_fKF}-H-vk_PsmqQ#DBy)pdHMUWNDggRJOsiDyyE= z#snLL?9he0j$DWyjID|a6sAUNMINHL%*IM z@a`Oay%R4Kj0n{2W#jJA^Ep$FF~6~? zVWNJE?oQ%++!ikdlP(j0cX$k&rb-6~LRFWQrpjI!0jHTF&IRmyQy2|3&eu4>=Zk!7RwW9x5+o1vkTWz$WF%kHi>w7nATmSTlGVQKTWV z6jZjbrHG}AdAjM4@wI`|yYuw^dmIn;xb}uz=}74iR&djk}AsA<@(AGWfmaCOzmKBVyI5INJNXI zM<2#cgOh2wZmPaN;NFse;D4GgT4uu=3EB2RoPPlxCd7zeA8+8A^Zifj0S=vJOn|Q2nK%+&oB-zjptx%u+rFnXd`%zim>m?Ypo1w z`a$z|6K_m0rUBpE7&NN(@eZ+`(UFmfVYnqB_ynqYdD!*$47ig6z+m4H`-yqMH+NIm z50xAgT7d!Q>uB+=m4ws1hj;xNhj74I%;u904 z;bPx&`Wc2gM#S{ew87lhQWShmXTjH02K|k$$Ex9<@nOI@3?<)^Y1DY?1oad;-nZ06 zY9Y7+evl)`-$Y|#ExeUD__B&4MQ!=Pm#mt;7%v+(!QGzS5_Lf@EE7$O)C{)^%?TdY zLTVHBq*6jTEZ32LNgJegQZXqedd08eC-|4=MI5HXI!cSA%aSHll4r{g3Fr-z$Wufu;xb+cFi9p_5uJlvwI!_O;Lh>A=8vW% z*blqRa8qy9H_)w5{E4T<7sozEt47yE)Ns%6olptz#p;7&v<$Vo`dVqFJeAwYUm(kx z0CRN^t>RN*hcI0jE(`RGwQ}3V?&^F3Vn5IacL7Gc zg*Cz+p-s`7NHy@xVmbN9@1J z>MbHn02fv>@da?zth8LN0uGJcYJ1HSd>33D>K%4P{zi62hsO%U)8o6Ln{w*!>*pHM zj2W<*sj@lUyu?x*s`?OH)V31IjUGUYU_0RnCgQL0LVyhS63+-PArk`h?l*{)fV6mg zIqrtDrNg?QN05LmzpV}Eo}0mcdDr;V@I#-Y(-N*kKIo@4w(Rbb*$QjxV8c<6z$lYW^@(1uKKkx?lUW|bl839hk|KB<6u@pDAGW9Y}Gpq$4 z>6=7W+#Rn3ec_hKr*N)tf2it~;Ar5n8mae{`cOlL$QU5`QNU)Y;#=_yAouO!UZ{TW z#Hd(JnkK!HO2}JfR9O!E=oz)Eme8&SCjoXxB5xz-ql;rBLBB1fL-l|3_n-%v0K7F} zd1jdl=jy9%7H~kDQ5u^C(OwN-3~Z?am83LLov29sA4_KetyQ_L;nnMpz3Em`Iz?#_ zq@)|AJ4L#YP>>P{3F$^!y1P_DQl&cur1$^-tJk{EVcfBY=XmwpG4{vz%{kxqo$s8h zaB?*H-=tkhLy}4+-HVQn=8Uf66dS|&=%rg|S(`LftFO*c?#k)q=1hVe7XAxz1ugth z-d>n`PV|$X_|kGF^DAR_A`||ZC$SE(2Ps2R(xmJGiLXE>g zcuAyU^cd>N7IIcsaPHk?2^};inMz1?6;-Pve$j17wURDG8xk2Gf=r%<%Hzd4q3K|( z5n#m!QYQG+5cX=^_H+1+y_v9(tWH~8{85}Ir;XCaTG-*5c$xUg*w?W%u@fodQtGAT zO%YSxynX!k1?p(llv*e&2UF6=dc>~9YRAvUnHb$i z9U;G{fZ%^+LZrT$3GI67yBirE)+5vC;tpk!wGgV@)}*JP_uR=Pxs`m}$g`w9N#7@Z zlJqJ%Ct5msGSVb+F?V;ZX3vcfFjG0-56yGdwisD2WOV0h^?JWAY3&AFLnCPybc;9$# zoF-#Uw+A^b=-d|dGY3|1RoEeplA6isl&koFDrlFruXQyvCKL$|4L=UoimZsdjg*TH zgNfXUhLZ{;RZ41z-qS3pMpD_NbV;%3k>~_`Os^yJA|>&`)@CbrvCwq=U+p70g`4Q% zW}=7CM(jfsS>PY`{&Jr?QKzu|C9!_Qh@d&_jK3eB7t0#knbMkfb>;2Gw=>@U$j>it zkCAUn5FMvcc4vThhoQuMn}`?-jgsa`X46%BC9^HBo#k$IFU4Ewe;GuDBf@a;Bk3jh zy`7R%y{6958tQszf2dP9Q)CN$kvq|WFx~dahm+H%YDYEMnd%TfYf_C$RXNqOG{E&Z|fN`0d|;ANc_&j`DN12Fa9+{>_#jP~c8;k;4Ym`nATi7NMJ zY)Gs^Oo?6R{j5(}m9jErYs&GITPbp^K&*9a8b0?(ym5SK{B68W;@3oyF^2o-Vg3hJ z4BN}>TFwh+vD?ba>Ob%|2jhiSVsR{zTrJayu1VyQ8lspyvW7fvU)r#Ar~=}y$%3(|f0j`Bo3&#sf1p%&q+ zk%N)8(VO&jb|fhvs9tc|naMMfze#SMT!bFZnxy7QZgdHEaDvFV9&Q)D9%>Uhuh-L$ zX(e%#B@^j4<(l#aNs+pWJA_n1t6+m~d6k)H`_oBw8q=e?ZWb|z8)xzSO^(N7y<@La zzD>!+M*E3qb05;{$@{hpipspV4{$K8PbnPR9jhO=;%gG!j3Q>jJZa6h2eX5%h!=Qw zV1(ZYpNS#qnDhh(#o@mqPkI`Mx+fh53 zH7Pe)w+R24ob-&mHa1!#`YJLbk{fmLz3?dJTXKQl=c@-f%}dD?eZdW+!0=+YnO;*3 zWh*;=zaEKYbV4e}Hl`F#+3~hD$m;T&^>3Ck>9zIEwKtKs&EKwjn+iR}Nf`rfUmtHs z6A9VWd>Wk>jYq2_jZfO2^e-LJj9~ak@?Gl6uy<-)uV^gNlY9AyO&aG=8tQ2S)D_BM z`Jp6AImMbnI~eYI@4g#)$EWU5)n}QW(a(6D7?wz#*cNYz7yfK)ZtSbr=doh3_sPPU zVi{v4Ib-+O53$3s7#pR=#LuB){g5ydJ&ngkf78StSHiw&PsK$V_5Sph`@Mr|LN3wA zZ+%c+sti->fwNxWR2~v85xLBaw1NU^(Ubl)`9X4)R3%bXV!G%(^y+P}-Vk2}%9FG- zsz!T6_JzaY2B?aMiSwL%_hf)PTRI}X5;6!ifgMYm11+oHgKfC7}tn2<=9 zSQ@Vwza5(zs~*#s!e5^xDRWZ}Q2~p^hQ`juipOWeLZ&f?u-$0JovgMx zQVDStxud-*ey-r(V2?0eYzfMGfv>lpT1dODjnVVLscMH$z^OK%m3EG9j6REIC-1hU zbN+QwM-;50Nq+Qn^anKer;#ZrSv$k!!^c7;Lu>S8X4B881=P{X2{Lapd>U7T9DLnOHrZNW^7ZcSId#Hwg#G103VrfeIlpHB3u#v;$-V<*hzKx_* zP8pkWDdnTs%2;Ml)`y9|VCnf$7FVL0eCnikU%1D;4gSQSuTYmRZbZJvIVP#iw2b;+ z`sh&p@G%hYtw>{3((G{YZE(UgM0sht206g)7m}7yO_Zc1(X!DaFv30Ig5hbQXL@yg zwsv1F!t~cpIVP2o`lDjK4oY$(J3Qa5<<53q+BNJ|mSznEF}5*oBzmGc%!+@A<6#D< z@cmdy%3mpmQ?|jSj*@|;*oU#cXztN?AC!jriSx`Lyy6QRA6XBrxzv!1?iHr;`ubIa zi13K1&mmG(SyoOfW7YC#z2o%4p}nD+;orj*VYyPY4cX~F9rkkk?(LI0B(-7cpb$55 zHaaC*GipTUM=C`A2!9#A5Nd?FSV*6yJybtYCo1RRw+(Oy>=$A|HW=Nq*86g>B&k&g(m;sfGRd_k-#b5#3MW~TH{>6+4o|D2k# zJ>^+S{@9?{iCEtF4`kh5iRbub;>HM5w^q{$rUlMN? zPZhr$TN|4g>lf=9YX>eIK%QC^I~{uy%NK7>gkOp0;Qbv>q&L1Zt{QdCLuP5~uvOW< zVSf$k-Q~8Xrl0j^z^O8cPsFX#ICRon>O*y%)>Ho=bSd-=d}?*%!zeq*cul|10S%I} zpqnIt6!#~MK{L6+tvHdvk+n9^V{m3){U)?_fBrs!mFE`Ut)GzpgT? zI*OC^j0=hRi3WyZp2ZFOJ@v4)+ZnyLeb8KJA$}n>m8&Zy)vVfo+8+IzP@(XJaEHi~ z$d`1e!bx?LMkFo7fAT9T&^U5du_TKe)-f7^ebkTK2oDU~p^2ezXquiz{}Bc<5`@)3 z`A4ospDi73@ykLnVLF_ug8!3u!!7BKK+SrOufv}z zvy_~8oT4dNQ0aQ4Y@!ynkDZCt<6e3*AGzNcXcn`cSv%0)>$<7Dhu$xKPuva9h4o@< zDM{WU*HxY=gVm5WR@3w$`fa^oXcaxs7U8wwx8aW>13|zyBSEAH8biD2SJ5HS{?YE# z`HwlzWn#T1w=yxDIXpWQ3iXDIWYb!zGpUFFN|KaaEF;jF^xJy<>FzAB_k&E*z}2VX zXR5>w~j^N9B&Z=b&{K%AUPDH2;qMgJN1=(a>7km5vM)fH=^UEI0t zOma(j4{#@!3$6x}gaYDUVlPhet6W35&q-2g3$(oYR=p&3q)7M|9Hj&B{^gJM0mDCx zro*LJnV2Y(^nOx2dI;WFFnW$ye?-RmGxPx*nW9r@?v7@n*_}ic2_$d@`9iPHn zOX@@mxUFjRF|Hf+c~#A<+k8_wt+U(d;%4#w_Gb7Ef?UD_VLy)8)^a}OrE*jqt<}+O zw*55+VNH%?icXCN(H2P?lAgd2%Yt^RCYMMKC*Ml?i8pr-j^cA$kKiDyLpC*Jl6GE| z)SA@v?a~u5r`S@M7M%B!{H8em{&PNa=GnH@%DP}yg^5%%&Lz6=J;OENlT`7)VvAw} zV@<#$AI3_>KA}1ej4g{@j=hH>e3)pTme7o`MrL!VS;@L%O|~mKZ=8*2Ck6fg{2jp% zp@Jw&`=zmRDdmB(KrN>|U|&`=^dqloboddRYHs8a-P}ge;nCUARnhfmJ+onpO`{(~ zpO6V!M1t_Da9Q$hQ#?$K_20q0i|F09Rd&f?e2Z&DTc{yS4KBlRyQB8HPCaL-ZCOpN zZDuxeqTwWlC)C8WcoCejBl+$9lz+&&%TpHc*KQ(Q1$j+ok4DY-w)jVh9cZN2jWHntE6&DSgsSGFgkLM+d7+_`n!PVN%tgP6)o z_PctUaRGhpoV7o)7h9>U38oCv%4+lS~_w&c9VS!!Vg>or>sMzT*et#_G>)hj3sdl$!S5f3$Kl&Zj(kR)m><~>3VsB0f5p%B$Z1~H=t!eT z8YUyZ3m2nD*eUc_@2}t1TF}AGrVdaJagJKjkK!R%$j3off3bJLjo_4?~!6sV_$HO{bmE zhUnQs2SRnj*TPLA$H}`R(MYUlPBQNQvTk;~$j8XKA4V_0qhjIV^a;C!F6tG*SAp6{ z-L8a`j`DsfGwRPjLTTaWK*aNR$*byZcMH0UolMS5I~`U1J#b11bEi?yxRV&2$cEC` zJDxj!hdebfR*TA#BlaG;!~a;-lGv?Sh4>tp$dp7r<1m^-UU2U&`$wlYzJO9}3`iwN z;$!iuv{hcHbmb=E+FHFu=mjo#C)_J?G4ej0r&-jBzoJ+8ITBq*x4C{aDS9e0GEy*d zF5Ek;vlpuf^Eq{x$7`Yet+r6lEA^E>y62 zS?ysW1R6T^)R=3aJb zWVQd~T~&8w@3=RVTKFn{sc(RYt3#HiYckOy8zw3iS*fApotIxN)F zf}LWamf-{843VypO_68BNsVYX>c?>YY90NId-*H!13K@yaQpCmw3E|%S#Z`P^+RFW!yV z9~l3U$T=DRH=ZZah;v*`6g0lY8&}obYUZ<6S-I>T^mOiVnnKZ6r5giCcmT`ZdvO1gxuSdJL!8hIM-9=;W- zMh{xln`o=m=So>+gnUwxrTXF&;R;-;Ctni?!$J-^xt$+~_P*8w^DA8N-y7+TgNY7k z*Jt9><89+5iF6xJ-_ux1OpNCu;)ld{vMHx_Vg<-#u<@VK6PC|{&QWLD%*LkQgT$-&T)OKz=yzFc5*o_a#P=wA2S;Ky9i7SXd-2Z` zyAvN8n~mz`UwAb#6C=aOSTEdFUVpy`dhae2(oeaK{k*FJ>REMwmR?`0mk;d=l}E`+ z75OT%HR9s_YfX$#ByX}1Ta`M$0RJo(Zmxh^GmS~ztN}P``AZInkPg6La zFJ2r)rEPo^_whVlIx#MBJyF%zXyh|jg5LL7_3Rh;VavO>_%cFO-{ngJ9fd67X}qL` zQD_pmp> zFA+RrC)1arD{jPR{aF4^Nw3aVbAjHI^uhWqy=-Vk=q7!`j^RaA_E*zPd}Tk4vDxZs^~Ke5S&l zh8ys@f=B}x`#vhk>*%ZKa}eZOGC4RC1nkM@nWidKn6qt_!pg1&Brhu~EFArzr!`$p@@ zbb5LA$OUpo`8TP!G+i`>_ITe*1?yl`Gd#`v)(xCtj_8cHlbJ!v%?^PYXhEZm?6?4X zah|LAe7c})rHj9XTRi|LD)Bt=rsxj0;-8YY-Zz$@TAwio(oKJ4uXTpvTFma7Os;Mb zriz`U^0Ka+WVc2&?S(d5&l}pxi(0^xcU^wl!xDrSt({Sy|Dt?z^A6>v&s(?Wa~l z>vyxfx!0&!?}~`O0qgvO{>jBbr_{T z(Hn$zhLWgso5KdGLkBvDYa{z2zw_5-{=Pf0|0=v9TqFD-)SKRIe>zk3w5@7b?Wk;( z6}hf7N4zBz5c&p({d9h3oO0PP;FOMFBA{Wy_>92|lv zrseNS5j#T?s}q+{Oqv)=(Hm-;E6lXk5bL?s(|$$`QQakOIcoZMegRa6AK!Qmc=5O zBG1D|!;`|b!g6?fsAb60XX^#^omx5Vs9Hwds^nCrqgr>6PKqBeg?l%s0T=PTF5F2z zoDOg84)#T>HWAX0{VhG2{#>1Cn23PiXU99mKPS@j!9_}*pdW3C}uG(F_MQp5>HTf&)FEPJ3U3e7K z4c7Xp{1M)Dw~@Qc`N&yi7qB;?`2J?LG86PRphonP55{+~OA3H6))7*x3{!bGuvbV=$fCoAiea!k84 z&@O3pxsd|&q;G`^g!_iqg)fH{e4?ds$5cXN$OAin1eW}s8J!@s3AbXP|Ew3qDb9Wq z^;30&l3N)kzmn>+RU^dy;ax$hppC!NQ@vK4Bt*tKWqoQbGjo_Tjhw~?Tw0HLO%3Tw zKVzbEKaQn8VmHaUW#WV5$K&rO#^Ac_%Vv`?Y-w3*)gogpbgGcCmU|6-A=ntS6htys z4e2&$p>Y!NHQTHpwnOilb+MGia>j^7^=YD1XNAK=CU)Bq|0h_-Hy+c_$ zjK;>Z#BvaNw!{An^ILhqqfp+fqie`R{k9nKZ|}sC79rT6o*JO z2P#&cs1|(=?ixkh{1fgPj)nRW>rI&f)7hN7RJkGNM#q{DzfH}w&Q$-3m)9HUo_C5k z^U+Nv($`sJmNBmxlZ-0N?p#c)N=!)fO|(Wq{1VjFhu5?uaVYU9kq&ibGzxEE)HLVQ zNv{b5No5bG4t8>GI-T+Ke&Z$i%a{(i9gIaMy&w*ivY?-IR??^|)Y{rPtp}4-9YPmE zWy3#*?}ZECt{evs+)SLTjQkYo5-ATu--_z)hh~QggtqBr@L?6hA(uuSkJ`{dJ|mTv zR)gKY7p$O1@YHYNU-O!Jf4g70H=J(H8-ABG_Cl+ibzGF+Q#FRkHjC7Wlpr?lh1ZAsg$sorho*%-3q1hs=GPBu z&9%qsNc7S9N)~0MoJU?I<)B-bO`IwyxRf9H&HZEEhu$)DxsmU3)-~%3PSL@S4i9_t0W)#$`IJMz~G5e|QW(lR)iX zqf{5CZ~IqhPN*K)ca>g&enqNRiicco&6RhqKYq>B+Rw96hT(UrVMIK2oZIvTUh6&UcOJ!e4{rpsjx# z56~nx&a1j>x3^zdL#=eyuVzbJm`90$&y6f>4Y^1LUXxhF&r-DZgJ>ld{Je=V&G^Ge z=6}16>93ABNXyx)n6+Q#lyG;07VmmP{A|IVptGQe8`yT@N~`5M%5&vM^?hxRR#`v6 z_hfg3KHzoz!_L3vk@1oBXeK8?k6R-@gG@?CUXa6ThM$Fog>+D_q7T;oRhy{0mG_i^ z@^z^QTJJ*?>oq7@J=kAX##_v*`Vq`K!PZc+@>z$?E-1dcjUMz4Uvh>S^c22Ke3q!l zPt8Ot@XDgZ1vK|M#w_C*%yzYz!J25v_BiHr<~oJkL-g1Z-aIs*>%k}?hqzm82g;f* z=TnHR(ZpC!2jN>Lx`&_vO}2BuLYl%17kHohFY(UQ z5S|JP#ZRPX()aQQ$|0oz9mCGrbFH2JH*9@Y=w+xh)q}5vg}rcE&~8r9t{iy~J{bNX zT%XDM-JxzMqf42^JET?Dj;qx`CMA`b^lk@9cg0%FRAd$SZiwH?Kka?utw$+cOmAmB z)9S~qI@W7*l3Ch(Wc*BbJtLFr`{3+jK!{%_`f(dm6Ppr$ClsS1FYk58 zyuHV+;+$b?*;{v_m)}3;cY#f<7AlDk#Bb zG9E~)J9+C~fyxbj6w-;y z#DdapsiORcTwl427w9@w{V%O1^SHS~6Y!dq36BNk+SJ6FRK;%8!p2~&2=#n=_!D%+ z{^YE&x}o)8r)m*AS^vl%$i0{$_Jn$D7=P%OXUF(6yc*lkI^Q!sGg=!{j2*;y9x}o&%;HtDW?65o+Ng?IP~IhX1ZwYS zFWH~Ng!*B&UnbzVMWmBbCs|NtE5%V9s%yV#HT1oDp3r1&qFA^OZ1zm}6-u_u6v)41 z-KDUPg5hi2NI^E5w9ubvec3A2Uwx_cP;Seu@4^X4OOWlQ8C|8^kS&nMCt z-KpsL(M^)x=|9Wt51nJUNM92n|BLgs!P{UQirg=_FL&@Y-z{<>WiC~{r+R@t)o3t$ zR=qQI{f?eKRF&WQC)^vSd1Wt|ONzl!ZjqJOguV?mW@G&&eJWY&rq&B@z&KTB0{5BR zQr;nDV8-Q;5E0r0>wVL!;mxIsP}TW`%>je07wEk)W4w`{ZT3G971^1-f6ShSJItc% ziK2BYyDEe?x2crOsFTG6q`t= zrO%0vvdUic#f561_R!91g^A#6c(i)+`#ub%p-=lIwPX;kh8}bcN`Xr*lLhL)(HEh+ zAJ-ade}df)g57^c>1`wZPQDr^JPtm`wV2i)O^kG)tKQPNXZNxN6rjq~kcDu=jOG<% z6ONLOMs0k{#f$<*VdlT98|{r@aKV#?074#u*CY(T-)^P1zpdx@&J zfKz1!ne@Ze@CzAhr&bEJAwOPmMd>SFl0E|~rY2wA45~4SkR28xd!t;#8R5A0G^QnY zq5-9ti_NTLaGeP$nI8gI8# z%{}3E@g93q{EXa4P2r9(Sd2=Gr6Te^xw3MQJ;dA80@_d7Tdk4480TMcblio!sD~jT zoE**=P8$vpA6JQx3861Snb;Hg11RynHctCM+ppGAuPbeE^>)VB+Y*NRxwuCt%+8jy z!D#=j*9q52J-no!J16X>M99~c$oG~%LuXt;e)@pTe<$Ep)9}cSLZ_aS*o=ZD8K2_k zJ!RxIN0^WJj=%{#??>$V&J}uWfxCn%@|Qm#NGt3R8j5elNm5REHwgZc(pLc#bn~nPpJ2WP2F=_G?_$16&uL{+_?huO8fFn_Ng-Km|ESgj|rD zQ$ZT2zvJd#q*+=M5czX%q-$tC%G_Nd9GQx^h==}z_pU{g_&k)1qil@+5m{^0yR219 z{ZnbFT#{RmeLt5DpgAlMf}nSB$^X>fPz!n|+vV`_*X4Z-0&( z=uO0zP83UgNWN-?2CJas^T1xwY?oNKaqrMWf6$up$H6vEOhXc+DEhl$Pr~0)6m81#X z)z|3Vaq?c&zSVND;iQ3jTj``cmD|cU(Hr*TwVooFLCfH{U)Z1SIc^swSZg{b?V9#^ z;x=ynWL7l)Gu9b>VI*0Y5PO=qm$;vJ1-8mfg&c-n^2+#_H}wxa+lkgAtB$>!jT*C^ zz!~YjWb5!lzMy{JZx=kKAM&5jU3@L}kzO$i_FC?zyimHSx7E7ZLEJ!7^vCE9KjJn^ z4^kfjXJ3b6vW5Sg%1bL3wm>Lt&`sv(x%CxVPHnnsagJkbYZ)S)7xRL!{^4Ey=s)us zF&k3ET}D-3X@6p$wt8C`(11oz2gBw)Ue5w!GQamgxYKas2bk;*;~&EYm3(1-j~~D{ zYgtpRdsayh?=zg2`R9!=}7y;V^AUGYoe4 zJ%ZPoRKhakMqjf#N=p>L`Xz>LaP>kF+UT1?@U`Hy7JY znv$=+A=2kb1*z%faFJFPjs{hNlW0IEyz)#XlxL@073WX;OS* zHXegS4!{YICaxq>&_`VL59-hGZWO0W+lpK0MYME58Lb-1&uK1^ zv%2Z;!>5L7?}1RNsi&1%%Aaysd99S1Ui3wwBz?AreszDIXS>bmd=_FKTQWOO(pdA& zQsxb^QWZl)2ii!ikEgy*LlHW`ZR96otukIv(U+nrcD4S-b-9f>&tYy zH(3V*`685sUdWGnIlMmuv@qZM%R*Ntl`>IIk-8EgpNJcTw8D46Grx_09&B>dt?Zt4 z8lu1t$GdoxPE}sKe~ZnoW;rurzBVoxM~yA~Y%unKtF9Occ6(Jedz#B}Fy(-wZ?+`6 zjeWq*?Mz{RP9K!4?)YK*`C>3J$SkZAD$+^lB*ox{sg?Q42kJ6451oXN-cvuPzfX4B zLaxmgu84Bg5nR%mo-N-rqW?Ub-0M^OtMM&_ujoM!Rb8b&leg{V%Tf(cZ!z&_*zK_3 zjo;0`;dS;dk+JSMgYXB;qlWx#jkF3{*UX>IW@b*R$Zy2=B;HpKqZ5A(A>P;HUh;7^ z3^2EwDtves^W0PCU+>`epR@%W`A<)}N@W@j3L= zj^ZD0sW0a~qIk!e@}9mU`%Vsx0FN{y?--wWB)+A2yH^{dFxbZNj=t`87z;l)j z9#Vw&)|otZl&@=4HK&*l%ql30X~+<^J=AgN>!kJOp;_dW6%=br@po27btJqJ-f zPAkerzX2fkrAlFCxBQ8GSgI=R6Uz`IA26ey#N^Q%`XN`{CZMdE&Kb0m2Uag;^j4aU zO^e@oC{v)B@Cn?+Uvd#2R!SnRQ5nv-l}b_zUZ`9Btov*gzht*??w~fr(0SAN^WlWM zK=0?NA2-Do(hcVAkKtXMk6W&-x|fXAN?VFv`W_17xB3S1@KfE_lZov2U>&JI?2q-| z;3xyR4++=h2(1X3;$TqLYUNYqh+GeBQcF52mSR6_7GY8#1l_11b-mx+PuLMs)j4Rl zuy0!vten211IDaek$FLBVU1iz=^9P`kvtK-m0hv&gIVupz$JdIhH({-i#?KU5pInjmZS+}eY z?7{Z$_6N>4aNC;h4mX!KAD%t~7V>kDMwl<;7T1fV!HYHIQ*4m@Q>mivry|Y-!Pf`D zKZLKhB+7pY?LzT64m(^ym!uU8{gu8BeI=@I)tYKA)G_LN>N2Giuc`|Btm}f^zhtvt zXW>;aIFRADIs9!*f?aoexlwloZ|jLY-7ZZ%oN0Y-`LLytW-T+V`NTLzY)s>3hVj<~ z{{8^>@*elH(u{%Lcd+MczMauo;uJtzY~sCvhkO+L#gt1HaSICRGd%ohlsRaocvg)@`zHZ8ORI2i0K={lk{@ zdRiG>sFACUzl^Baz?@4*r?$1;$_Bp`oB`C2L9XC^>!tFiQwx{ivR=hLqvc{YX|g1u zqFrJe|6JxoKBpi3h#925+B)sNmVp}a6|Ce}{kVRW`*{Y-dO*MZ4}BwCsxzAc957jb zQ11z~hw3S_lU$?QzGvoXQ?33+!EUZBTR zi;<|)pBe>Ww?&Ndc!P#;s!K)|vxT{qsjtS=!Swb(`Z@K$?j_xI^wVeXs>b?08ysHo z<))i_zwjtKFxN_%)$65@eFYnMx%b?EVW2x$kxNpW{)s=tN867*UhPNe=FrXL3iXdP#Mb`jpQ4bX1^B zdP99Qwfi()0YeXT2{iIrzfRtruMg8J;lnzkP0*@o|KV@`RK24Nhu?0HKW1YKt(jGC7rz%$vcV?W0^0>x+fF#Ck!rlU(w2 zrrHKl)vKtBRSOsVEZ$Zoy}tg9{)>K0zd?-0IMYj_{ZHmcrs-YS&EmixM^XtNsgu-F z_%wQ<0L_&1$=jqd(qXE|VPa$->ihP0D60@oxx##(rh;=0{F<<4kg@I)9Zh*t58#47 z(=q4^VjP4wa~a4t#V7>o-OfqcF*8+wxC%KVodhnX1YhwL{0V+?Fe%6;OcmY}r;Dkj z@4>vCBFI2F}Vw{`Cx(zH<`y@+q}&ig^@uw;UdoKk!`kM8(R1tLqN_{a@Ym-Z$PWCK1m0 zm4dB7erjPVag=C?-QZMp<%4kC>58Pb12g90Px_4ZzTS?yenn5kL}xR)IKx6ispTEX zUU`^}+=cfimwpzMtZ1{;>})N|uFRJse6i`N*oIxu<%HEiMk=A>eTUvK76oX5Q`)&; z4}snOO{H#z$Ly_n+T38yLX96nH1xwAG>(&PHvgn@WU{JS1Fa2c4f*V^K#CHI_Xa1) z?S`&c%KOF3=uh;OU1bUkAAb0=mmM41cl!VIOi?h_^d!zs0ilFaBrGD<`mvRF0lYA(*Wv?whb ztz^5meVy;noI)YJ=yvd);bcmSYq6?uS?DJQ?0$b=UMA;P7Acw4Z^>8Hw4d>l=H)J? z>D!6w`@{yz_fW7eqRh`EHp(;8a#EYBeXfaoVf8CDgL+Kq!Z|j`4RD)`lk(u|ts~wM zdK2qE26@T875(45X81J*)7x3(eCV9!cZ%41t*%x!>naY0|FOdiri(-IfpOn>1J=sV zsm6frU9%qf%4WL$h+WuO>ZEa}x+(}k@JCV$M+9atkS;=J@glyHP11Yv2>A}W^)%(4 zQbHZ39#UNpV;?Z%pKL$Lgtkxztlkr(JAl{JNpA+P&929_(`1C!?0!DW|4%+n(-vkp z0vFIYX6;9dme371Q?1}ATGnzei#NqhcE>wuow;^Vbf9ilM(a55s0K4gugJT{QBMvV zzZ-YpP&v`F#}OgA)quWK%xY|Jq{B9p_^9XZWff)qOPj&oz{j z?CK7sy7D*ugL`yupQ4dI1Y_L@S_fDCF8%|r4>2+s1!%w1+L72o+}_U29?AK1MM@Lz zPpRI!iHoJ+!lmXmbB}om#V0lYuD$iMb&?K3U7WBF>{8A&=P_s5=;rh$(ADYhKc@3} zFKCY=wgc)(E9s8(rTmXvOF4kcY?f-^YFekov`XkaTX<0dkx`5Y`ItyahmZG9@L~t> z;#G9WGE7qpK|ozb2Vsv~72kU!=>n+tqR?8n9CTn#@@u*w-+39BYO6$5AA)cEusz7m z0T)@w%P&r}Uq%I;WsWv`nZ1dLLB#!Ba~Jhox5^Of+j&>DiKrC22`nThFUxcL;{fXH zU&bYO9u4SE`XPtuMQ@Pu%0I~to2GtKva7?@6KZ-m)hz9zW`cmL6BC0`btm%I2vpI= zdP(x`ZEZ9B@e{E7dKiep{+|ZCs!42-+eM%4irA5_A`BN)VG3V6TIv_VmsJ(jp*tSm z*-l9&KS$cR?aS5=RJthpJy#J8?ZNQn&En?AL`z*9DHF~0u&K=Okmc5Y>|I+7#_H;v z#gnzgE$pqJud~e08?3^0vXY&Pzlg=8<VAq>wM$=(E3PXM6K1w^I-X=pT}hAa4d}fvYD05+w?icXheI}T74vMngX+Na++k-^G8MEdvm<+7v8Ez(Y* zJ>=A@>aFyz!Bs=~>4~E98EDtywiakzwEWsFFjftAsm@m_D_7+q%uX$qKB9yBxp+=! zD%|01J@UWuUwVT)*PVo8W35w;bMz)ccEP`MQP)@Tmg<-VVN^0oqeNBAOV;hpd2Zm) z=)%hi+h5yf>~bh_nca!7+u>|q8-%~1FLT{JgsW(zzp*WSHD9b4CZCndD12j-sf51j zPCUNFv^Jfsh2FK1yl zNCj$oUGcooQn(bf39k9=->JQC+|f+6t#Hb+1!06;h~Ca@rY5t~0X@N4elo|RqKr1j z6CGR4bMTK`R!jPX=d4UH`*pTyH*nTEqT8AIuiWS+|9Kt!qwvB-I7x@op=u`XXJ^Y? zNtS!j6Dg}KR4nBSbu)d##^kI!Xj+Yk_m%JX)MK#LBl?Jkz$pW`ClQxMFD;9#m&^0?HVhb>bM*h+F#hIh>wL5K{LIfJ=Gk|(^TCh zAK$~xv5gLC4?4G^b_h=V5zc@K@3K~F`H3_bCNfTx*!k`TL(zMCgR;8um4~n06z4l9 zjkA&3_L7X+h`N5++{6jG)2FRTeQ#j40XP1Pn(~saRA(ys8>=kH{XXAhTZBiWqkGaV z?#;zz-OInqPK{0A_t9jmro=}cX}t6V4QLg9jTXvgrg0lk4{xI}wxZS@rk@ZYM^)r* z8p2De@zyePnsXqRZtt-BPwHoUMPNM6vh8wpl-|xLS^fF$-)O-PrqI7#%+B7uUL7#j zXg7;{#Odv11pAJ&YujP_I^6Yp7<+YU;`^K`HF-Fjl?Qg-fasZS9k8BQ*@>s0?JMY` zyx^T%+I-k`<#@<;Mfl&ouFC-J#3m@N)J1(}15 z{zv{rua)PyKjS*N&W#jxZu4i%W@@5+1;1}StALecS?0gyeX8FBbSs&hTnQXD$2!Gs ztXlRI@NQA6&wVQ48aK5!%zMgA#TneNyMn^Pa#ZVaVgeR&QTi0*t0=A538bs7Q5_zt zIZ)fa$2E6OdqO1%>FHqRQEJB{5ae3)k}q-XKUG($UFd_HQHCl7*f-OQ?$j!&qV%`e zn+f%wg!h@Ls2Ke1cf^lHOCd*hrhjmRj%P?&!5)fB z(m-nZBC()&P^gO{*9&cNj$e$K&vwwhd2R*#GgIj#ytY@s4s%i0ck+HZp)nR<+eXL| za12CvT_yOYbT9gyNANIxZ1+WL(4AJ!HrP}@_aC={w~m@V+IRd;!QG&~@EhLV)p$uq zOE2iP?cloteVE)y&+oQIeL{by85=6rYA4a=Qn(WhjoQW!cnK%n0+?-eEeWJJmkHts zxwkv)b_b|8MVf}TcmTiOEqF)*E}bS=M(*A3RrhXEM^rkwmGPcTvdi&3z%|tD;;0Un zxraqK0LK&cKasBvm^aC~72joD&2DUO#y7*xFy~`;IU6;`uwSZ^f5)%KTz6^VS0O73 zP+V+A?#&?&Wm{}6RGcHctU72RhtyXfl&bjn#%c3FhCA^-9MTRj$-Yec5u8|;i9!P= z{Daz%{=p&CimaflE;wiAflUsf0NoRM;kEu25C2U61Ge2(W~W>aW~i34(culbv>A-* zf;E>v_bNC`qr9!RY zTAac(aSP!98~&z=Z^Smz0Vy{X`95FZSiokAs_Jxh%jMGAqVb$1*JdYUHHA_2prW+m zeHGwtE`q|^Xc=(F^@SO3QEGy*dY~*0mu&G{wtamoNc0P%!F066btpi8(P>Mf6WxYs zmp|y4)xl%-5Qe*uob?s8qA_*6vDKXT9?XkcW1XgUWU;H^`}vjrT4ARzy>!WK=B`Co zZ0GIwKJdRslWT#NRhn4Oi0br)j^PCyf2-sqRGiav4Tq|~p2Ip`4C*DjpPO}pn-^r>*#AhH%JX6BypVcaC)u-OCqz9b^oVD6^ z@iFbe7ckY8yn)_px}MMdenCnwfUk!P;uQTPTs!hfdeO7l9Pl}JaSL7U3x3!2+V9l8 zH{6H^yL!e64$|=%P8P@o|JX@IuK?cNq;z9%&S?;DF8QqVwUkZTCbojz&J{iu&Z8|# zI7!Pflh6nKeS=$@FUkJI+j<7C_`*&i`~J+^sze1*n5+8Nyk|b;eWkLBz(2-X`#@Qr z+7qZCC2^L$cIvo$!HN?-kDc$=aL(*vqGGaO2(86G#N5&kC_rW9$#e}1DSdG|q$s6e zxeLf#F*OUE=?n7HXcUIoyt7&S_elQl22}izc3a(`_ESr%|0yfrQx+__92>1WOBS)0 zEY1+J3v+{f!79H95%LM%fTr$KUV1Ln#joL0|A0+8S|3qAo`a`OfqqZH2A`NAy420B z@2G@^RhqukDLXsw>IB{N5yVGDIEd(X^-uXlnGA^sZSlnB=UqJ(KbIELNoXQ(qN+E+ zMe|fChM#iFyE;;Xe)&vo6RymQAe8H%lHaJ2GdRg-S}HQuOd{O@2{cqp^vM!TNw#DI z|1eP(XAAj+ZSbj!^rAg)CesM#-2rYc_oOq*DZxy_COA?}*vKokJ8$JgQ|V5RAV-b1 zrV#(z;O8%_)Ob{SqPnw}6_4Et=ao~Liu#;yd#?3T`~Cgfeog#k`Gi^M*8RmtVngYO zR2Xg;ms>LHk_J_7iyFs|*-u+eq`zh|HwSgRsGbiNBH_?D0>bKmr|bcfyY*EYUvLfF zievE2Y-3L6hS-NlpUF9P2KD%M_i*;5|LT2?=WjAIJGY#fyepac=&`tbGtvV+OtgQ8 z->fx}-iV*}R!?g@eDHT-Jr~}m8TMH_tJ4vduA|2tr5l3B7G?3MUyQy^Nccv$O+RE0 zU4+TfbGp&LP}Q3-NA+B(z-!s6-b0(KptS_yPG+0H5){#S+8kb3PgIqB%s-!j5w>I3 z!7U=I9_W3oT$>6qODc&b*OMDrDwGxe47vyI|NOVOPP%v!szXh7dMrlx*`>EFH8rkABVMH=I0!Lx1Jd3t<}~t zvu|yc+M9iTcfq@#DEHumMbJ&U(V1ExR=^j~UGRcA?34S`@9azd3TntRvP}i|i8J46 z%x3=6WULm5ybH4PN`8~da(aEfnnV|jKpJR0|$((ZKp;tiSi z%;=9n|7jT0kG&d<(Ur-{4A z%?@6B3A;T>FJxtqUKk-fWWV2bF`YCBw3uHWC7+SAa*kEXzc^!?s}pbuT!rUm;4GE3 zCUC4){MAsaf~O$^GZg35U+JUQQZ=yRB&8xfwuPXqC*;38@bu=Wz26Dx(XC6taohT@ z-=W2WIDsS-_%9uu&iWX;lAW59?6DSE-=aQrrH*t11&<-_cd5-+AM8y#kJHuJ zj6bfnyA*eFeQ!A$Xy?zeT zYD(|_7jWZsSo=#h0Ny2c?c#R&a6TRX=m@naUpM-eE$MrRkULU;$q^@uX~acD`j+4` zPSGCSWHMd#--y$+?onqj8S52n^;_^saa*@vvlr(i9Ci;H$pPNeMSK~am6NVwcbsuY z?U%TiI>U+|v&H%wys+840p4k^05$zzzjm+<56~Fl8D7!@?_&L})CfOmn5w>qsp6*O zqRVPBG15gFPn2)b_JI+16D_moRX5TKYOmE}oS_;j)@G$S-*4GWuP~67;L>;?j>heG zh#7T_FJ9MVCVHy>F}{<@WZy^l6Kdh{-Qo0SQZHt2=QIs*H`(Oh9cZQ#h?4%?%~0ZH z9&vNU@JjN>cv*R**^(r8m(Q{JYn*aH z$*p#xOMXpN*nL%B`&#>ksF*@$a4dJwmdcS!^VnUnnkcV8@A;523h&QL=1ZEPV(pZ= zNXhW@cA~=mN*-*Gx{$ZN zgt>R+95cD0n{=RS*b~{Kk)D^e7f#sAy@0MbkBOts{t3S{{suwlB%BrsiBqYCHJAl^ zE>)!)eO=D1w4A5&oOed~JT|AEZeiPmLEq{h-y=|zAPn=22;@-9Aa1&YVn^e6? zs0;K7INB&QCW8=m5@p6$M2u5g{_bB;ZJ&R}?OD=15R z#Dp)zP4sZvOMBVq*&Z*yCD#D^o#SoQMpNIS-cTj#MI{(XS87K;`aSK)yCt>M+7o;> z{OoNG;-2A zx9AQ0A4~TEcXR#z5B!Y#wvrIZs!&9fkZe*(M3Q9B$jA&u$;#d%6d93`ke%_B%&24~ zA_=7w%68vp{GaFie~#kN^O_dFsWGHL$U_XAPVd@>JUqNOCQg(zp*l@Bq zR2`Gm+iiSCefbNeMs|A~>S9hNK=8-;$K%lAC+TgdW6#1T1KmnV-hN3Q*>iidYIf7@ zukndzZl_ZuS5NB+Qy#K;zrOr=I=x(ExSeHBMkleXmt&i$VMoR<#_Ov>@&!klpn6^o ziH4elmxiO^S}BuK4yI(&>+i2R{2p6+2PH;nS)-EAV-&pEc=@5!<#?Z$X=YA~)orjQ z2f~AN*^cR>mI!?x>=DcsT){*BRu?`*que%`4WGvXeHf{Mm78y}EqD5HEaMw#Wz%w` zou^k?1*uOrl`~ylTp@Cup%E{wnwlY_-$NU*B>k$`JD=*kRdkz(HJ-kqZG4w1dT0E}m9($Y z#>x_v<;1W%IW0mRWLv+e&I2r~n%Fzd6m%S4Jpdnqic8<}^AKhGLm3`*8zsf7oEg&KudU`t zx}{cE+x{Tuyx`5yUx|A6QOI=@vsU94FJn%M2KL08#iOyQSfKBtUDY8gRdzAc@-2DD z0U4s1iK<&N$co#OpsL=<$U92BT4Pc*a=S!YTb6ao{^wrlyX-vZ7x~`C$Z_iQMzG=o z@$stLmjYh~^3WIlXkurCI;12nYnL2Sho^5(xt{V6T;5M6S%YOfoqB;@;JPm2<ClFxt->na54nE`VHLqwY;_-P zG1i%5tzv62K%J@N?uQ**()T_?IetF;1g3Nc%vejz`qG?5b}ELt8QRJq z{ds-w4DJ0}!qXFI@lD&Y&WqKx^rj|ZTfeWx387jTWC=h(t-dWu<<(@M#Q1WuOa@ z$3^j@RHVaMR*m?_@o=Dx$)lot{qJC1%JB?##;m9LYX-spt-I4X=_6O5tWq*yZJE4| z7+f0Tem(Ud1#n+kCXl)@Wk5=CNO4lQTKF&6{mIZ7HQFQI&h{1$*#W)him%t#$!Wg3 zSF|v#+*q}Gs=YuXV8-0(C*<|_^g*BGB|*&AZ!+LP}`RVWu;@OxZVPl~47v_P-xC2ZjdH{C~GTWlZ5 zP*AK2(3gBqJ1`voSVBFxofW>2l2!hAKU_8ZpAJ!@P)7dIP8G6N=QG9=>&358u2!W3 z8W*i#|IDPwQ;{oty9vdwv1bvlC}erjKa6P9KF)^+k7+_eSPCC zaN}iBI1{hPVB7QGYOVG1U}sva5cTMAz4UAH&&zsK^Udj;!yw-u+-|pDdVB)({=JGi zpZ8vOvTJ-N?z~jwLi%ET{wLG3nULPhO9rO3=M&HAg;s%eYx;Q$Rs492;^DM(n765n zzBfG+)@4%UM5I`>pKb4jVgp%Lc{uA|yEWFyhVKP`4n75E-BueelGUFVgHF(GG*T_C zw?`nzs!CIlJ;g&Rz$LjeL?Eo?HU~YMnj>|u8l<`!WS+MOT!lNU>Ov3Jzug*WrZ}1% zFCRZ08>ADxA7lQoT@GW}RU~~gUDC6-x!<7p@oBy3=BnEgbU#1O>wh10npgPxR1?tW zDMuT)k?*|CzFA~}_ny>_F3|UUCAL16m2&3$c=^D@z;)>T3)^SfguV>jVd`{A_&*V= zH!u0!#*kVv;zUvQYnksScXIkW5>nh2>W9hNM>~@z zxIrWdnYXWPKlh~AlW^8Z`28$=QcGWbJ>_48^q@(R`E&v=)5qr5Rft0Cx7ATOk{GKQ z_Gh`NmOM@}E&VtKs29E=uZXcfT0Ay7cEPsZRq zyns1*lEz^u9qIRaN%?K`?4`mzX@qu|TV<%|q8NOZCkIMMdW)#U2 z+{bZS0xHu*d;ytMj0~p!c>uS!Urrxlw!0F$x)pyVu*yty_u$^(Lp1{kf4OwKUeH35EUe_^P8Lh9YzJLNgiybrrREIYyd&cmN%IqmsKKw(>J%eXRmkS@m z{k$hzo}(&j2fbg#Voiy-u z(oXQnH}ZNOG3iwpWSEFo(w`H!?-{~Q8J(E@rHY~})sg1|5hffqY633&wE6_j^?17*hpK}HvUEYP8H~;z@5|~8-rQ-$ZFML zgYXPn@`|#S&r;6OpVU#q&gB)qu&t2I8ClKcL@Bop>gNon_%B3by+}_d4{Xxg+YmN} znul%#rv@Jl?xbY86`!dpJfQEH(-zG3_V#X*%SyuUD@?K0rlPq9o3Bs%NFVK8yjCw6 zzAvV3oHKlxc7$3cZ+bQT#ShaD&;-=PkbZ48y?%7MsnxQvvFh9M@yYSOyr*Je;C7&u z8aG#{Gj{QwaA&o8m?Ct%K2_K=Z_lol$QeJYfcCvRVl8dF@(mNR@?gmpf zg?ok{3?I@#Eroj@W}f0?U{s(SyP6O$L#r_(_7v6M5?%Fs`N-5reVUD*bY#1Vzgg9Y zTb$)R>e7a3wP4-KX*K+_1$J~Ip6D2zUlnsc>oF(KLI0P;tWTpEVqIbfVo$23LV-Ro z)>FYxO;B|XeQg?{S9lw2@*<{iH}zskvA3T*xQI_|<{=wXH_*vUqa$mPS|#;vH?hg= zLL*wmKg8WmX48KOO~R1IRGRHnAzK4o0`~-VoA}J94(V-v^*fA5F+Hj=@?lKfJ=oLE zLAS9^PVCCltMG~vX+@IW-UxCZ2P>Xdqt{6vi&e}WX%+cQ4f2xuHpPyMFJsyK+27E^ z4h$R&JR%qV5G)XS13n3aE2)V#hp*@-yvl>uQ2NGY#7gX|z05bjx!!{hdpODSB5w|! zz7x;e2_JVmyheTdpjprNLr;W`$V>Un<+To6!7i4>0(Fd~Q1{mMzPSYBaFdR*YkCP? z!|k4VPaV)FZN|)t!M-f>Iapc#;|F6CcSdN0CQGqES%z$2$2`JYAKjrgG< zPFLCA7CAK}05;e6nFkIdC{neoswjOL%r{@Xo4wybk;`iL%^3X}t+94YjHAOWs zQZJIhwBcmcVTtqrjn)Qt@jfr7uuDn0Gt~FSdhk$G{_VRUWfg z*dSK*f(-!~Fr!QK;Gd*n+UPz?v8!o3{XemzHeJB{K)t}#c!FEJ8k-+$ptG}Dg?(T2 zKxB%|a=B<7KE;+kmwum_!=Kak$a?eG)kK;61D3VIjL}I`Ek#W14#4yNt}1Lt-EfIY zBT-EihunVD4H;qUdwG@g1@8`-sh+B)BXUv?w_A95_#Y=}YI^WIt)5(qaC-G`YJ=0UM-&8@B zqyNh4jm=VhOAGXhj@xzLc%i(}#a+ChUt0?@X-Y*mT&FXU3m?X@%%aA6Akx9qR6O#s zxEqnvSHw~&r8dNK>Q?LsV_w7pr)&Xm(`C6~&nJo|bU z|MpC3wbaK_@3SfABDK&G`s$Zc9?+TkBHUeddoDCjJr&SHXsVuC7I=jQXb!aar)k*= zvETLDs$oeNc(Qrv7Z>OOR_7uAVR$xBJWPXsNBc3|7OC|r+rRKWW$6JDR+XM!0q$QP zxf!WOo&1AI`;O2_NF14OI;2+MBb%)&nZrFEEXhZ9^7WTx^`C6ic`0QqANfb*tqe83 zl{$fCeF{5%3Zabi@2{$Ey*n4`?F#jtQ%g0l%X(?3PUvcITJQ-Q_!IT*dXtio*r)93 zdUP?ZbyjuAAlW%XA99*q*q*)So=@ta2W9+ny6^o}EC8GFL z+i&vnQK=*O%3HKDFNjumK)mZzQZJ<3?M*sUVcyK)E%YYE=w`;4>;5w^(~SB}lkhF# znW*1;=;59=(eWyU?~l+@OKRmys*$mfUKdBT);wM$yi<)|JDloHx_kS{cfo$a z2h4$WwyAIh4dyi{t2$3l@V)2VMm?w4rT^C`y>R+1HS8KUFbc|gTLyWLk9-U(9!k57 ztF9+rtxEq>ym~G2DfXv~sgVDVc|WHBdOrRUtXL&5H1Koa{@|OGav9V?Q$ojS`J0A6 zq9@Iw!_n28-WK&?)Qnpx9$rVRYQW#Cr#@^-^;XJHdIv*!Qa*c(K2eM13GbyQDsGl- zM6fgu8R9;U;Q1ecdxzoV&hhjH_F(RTvR;VfkDR3;8K2$-hANq!M}>HUZ~smu^9Qt> zo_1IIgED1vyw8I4A84^kix2ZK)_J2Xc*vz_c`DK$V@2ZwXvQB@86FBe6nsZEEX>n) z$cD{j!{2TDYpGh_mU2aRy&{k3DDJ*1d%UAV-Oh>1sBQmp$}wVe{*=>dkXP+2+v(4E zNEdoAY;x3WNC_JL;oeknidRxLQ(S@?E8KmV4m z{FZh-?G7iYCGUUW_ua4^y<=n%{-=~~#159#!WQVL{_O&&_eCh{w%+HQ;6K!)2~W>K z=P=z2Ylf8aYKuuM=Mbb7q_aN;KUR>)(pE%@_U28H1`@- zO}zmt9-1bziM>@Zy<6#j>P9~@lUI>m{1o&)+KhTRZ0tF+#FOobEyqiLa33w5 z;{@&a^Yq3Gc*j3{<9<4yYAh=8d6JFYlNy&>wx-OaD66Ih`9Z{L5YA~HZz!yIF*w_t zeNYdfy&0G7@eavK{k>RuIb?x|l{m)?_WlsoVTXR(n>sd+rx(O*-7xd~2fThkH#7aP{y`l~#eUuN*F>xoSaESIEmn_RU8n4wrBbgD9EFoBXfkCnokQVpD^K?u zS>!=1d`}pD86NZq_TeAQsUoHM&AAMOnJn1byGKvoKE;cfbMj&WX zy9*!LhAR!ZhsV`|FYxjDHg!I!KF@@0_?n`wgWq@6NqUD%hEG#0J{3Ao^<32y@mQ0q z$Ep1uF|RW?_C)NI8O;}>*`xcQ-WD?9?euTp#UX6x1+_+Twso(XZ5%9F(@%7%R24X=cn|O(eH&zK9@ruvnz5*s9h+pNuANb ziuB2IO&w+CA^p{be_*X&wfpO!EYeUP_n0W!#h&Xs8^QwF&Z z{3O^~|8_sdp(6ag06MuNzB|?zZ+$*GH`>(1WCESEpwIf(H=GO)KAm0^?{L%ps9%$x zzeV0`kb5oNIPcmMc}v1ri|v0d?LKzle-b(UcI+ip$VKe?a5K2~>9&61J)c$VZTTMt zzOc=W-8!z#@m__oMnz zmv~4b>bBE+Ur$|~h*#qxJM7YUMs0i0ZM3sV?z(BuG4UVc1@xg;1>%8cDM^n6bF1iP zg?`2_z7!sfb-2W~p7Tw|+f=%Z2IUV7U7EW|ppsvmYPCD*;T-pvLHI&7RncbgwV~JT zNk2;I_ars!lt8t>B~Prrwv=_-t!N&! z46Iwt4K;C3@1=iCZ~04l27G;M5o>oOT^G84bUo!vO_Lf&#NM8E0o_IAu!2smK3llR zwnm1&lMNe(r-ToMGbYi=R5x+dCV>i)=kN{>IsJFF+S5?)e7mwT#Q*0$N*e!)!V;L&NJ-xp&DTEopmZi@v*cH;*Ol>Tt>~ezTBO^^`vzwte(Kc)r~U<-KEL zE0tP>P(I7{>78l7Lz8kpxsXJr)^-@{rJbv5BjyaxRqx1!KS1fffT!nSXXgjJ?!fJ zE%>oamJlpC zBp*0QKrVcP9`;~-unyHZD60;Y!$#c6qjV0-Wy1=QaOAM6Z;KlV`-@v z$A_J&H6K|jqi3QK>>F7bxe_TG9T?rJmTDxY|7*r&q7CDvVBYPRlP2cve-DX z8o4{L);+x8;Q+11+qs%cp#M3 z2AqMi^f@uBMoMSccA5J)2A^COv99=>ky*B|t-~fjbG~nr6#}kE$DX1#^i0vnYY`!&#H{ zq;FGQzvMQixrOamlH+C%Pq3~%DQo4Aq0oJ0cJ(Kn%1{+ycG`xibWGVo-{Rh@(Kmcy z7e$f4G26xJd*jhgjAnIw?+)t4dTRCGBFjt_yr>$9c;@TH-yt%4Gr9d4R#tcTuJP@#NjF;SoG{iJs*`%Y$4~64p&tKN zc+!0Kg}3(1C&Ptb!0Ma)Sd;QOTs2CEu(A3h7o7ODDzc-UYhg9vbe*XJdI%o{TgvG_ z*^O44-fy$s_aD_hhQ5mrn24Wy3;CLQBj*54nleE-#FOhO*%K7jPI@m6BOfj8^A*P6L+xXqx zUezB}xMl2u9_yVOf5sM2W`)cXcaIj2{;B5f&R)WiV{*iJ6;r}L%JKFRlqhA@wJ(ag zL(Hk}rj5(b1_#+Ta|w2DD|VmOgKn=Xyr8EuKqkDyRM1S*tA&E?<-$L)C+$OX)#};J zr1gch4(Wm3k9TOUzdlmU@rm15=62>|9f!#0_1#GpSaEH5q`Y%)_z1gf6!OL)O22Z! zi)w?HO+;_hu_$DAbv))ItoJ#>Gfnu&XJTnXin&axk?$bJdC=Af(d%86$xvLx40o|L z{V05uL%eEZ%hwjwZ6R#fl<0R<@Ac)76R`p;YgIfJucH@zmO9`q*)T&g8y=Dk>$CaI zl(G4!bvv-F*(s|;-o3ozdr0vsHP%OdwT(ECOGe*7?f8PK@EFFTk$2>M6MPpoIUo2W z&?sXbfH`7!_%ku z)txxr3@VmJW{@{f?iY0>U|D4rO(=TQxmUD>xS8kSFv~=mY2^lc~*K z7=&+Rk({z!9X{P#ZXc_Dn!>t3%|kvAwF+S!R?_I!RgK)@>Fab9hGDQ@lQo)POInFvZ|i|9 zQ~{s$X6th5$Qk@R6R!9@IV2<>P4f1W2dN^zil^eT<^?XQ3L1Dec3?o=60W*dc~f4Gqm5MViqLDDA-J=__#I#OTIOqqwbxTUQKkQiTOfm8+eDXXL`|1CA z`r|N4!qW$^rD1O49nrX*m|PJ~45pm4>vyc$;0MvuQX5p zIR2tKWQ%=SWn-6cC$Gzfe@8a!@;8LxZ=3B}DeLu5M&9~-ye_|Q#m0v7ny;KBD-U@c z!aAa((*SxuO1*==713_ql5iaoAJ2cwn+yAwr?02SoWLvIN zvwP?zcJ*y^JhYh4eXLg>wa4E+pp*NzY`2q_d`_wLsUNFUi~A@{E}Ln2h|=cuq@SNM zuUbt9czM#(TkyD3&|-UR?~hEloqT{h3CnBkA>XySB2nyI85)#^JiZ;f z>d3Ad^Z(NBB7&FL2*-3$gJhu!m@NktvEgJvutTsAWx(`6L!8`hj6)UsRpsR(HGXHai^XcJ8VJN@5jK0f0riUpDKI9=e zF|7`-w=E8n=OotT;h$D#bp9k*bh8 zaevE zn4ehq7Z__g-Oy8b_tSJtZ?df0Hk`f<^h)vU<&YWPS@AGm z-xZl3H$I2qD*R9D<;XiM_5e7{6WZs$0y z>Y6Qs)W%m|z%~pr7m_)&hZ^?jVCLX95i7v}t%!G_W;!36Yx1a&j>u9ttBPL2QMKV< zShkYtFc>-Gd+$iz$tv9L7J2@-`^aFcVNIE4oZCB#SA5QP!u6`#M^(!!)ag%P{I=3K z)Co+W*0|Ty?<_jyTsGf~Vp-SKhA)Nt%ho&eK%?P%OrJmLB+p^sp5^1^{QEt$8Naiu z1@5B(?&k`n_GrD^+@XX1tcFnU_i)d%P}Wxv-IFTZmHzHW=^Qr5W_98B^P<)Soq=Z{ z_$=b@DO~7wxM~BN`pVCbiC7``Q3*TxzPXl@{JgqqY`H1>V$k9e`vQtXa4YR=sYG?M z(_6uwqwU>gD|9s)v*l{Toc8&24u6pJ_5WzE?^6L*Voy)|RDuy7qI8e5x*g6jz-&uV z>d_rk8jZZG=~u|Jo!- zgg4cb)7a(1p+E6^T`@qH z6@CIMmZNXjL{(Io!omBF1CPleOR?_{!oBm=xJAU?FK`C6R8)V;(^Jj7ykINl-I2KW zM4omJKZspFxQ%nveVKKBDyz{4*UjGgQ}AsjSAEoZQbx0<wevtCAYsca6U@S#xl)(GizVpI>`I%0h(nKP#&Gn8PH;`_)%H78Q%IV2IsBl)5(~%S#8lvtyBR%xg(Np=I$?( z6X)de%h<#_#Ig!1^uCdgBHQrpc~q1G*yW$<+tzrKlXgZnm7z|UQg3Tp*114ofAc(O z@ousAJxb-@SXO2DWF*Vk?nW-!qLo#&&Fd_=+($fo)j4*;VWY5$HNttZSey9P%O+O; zu-&4YNrX#*_Z{cUB5l6)jn#zZ!@e-_lvv$G#u-X8T5Jw}U+7Mb@xS?5(b^ zzf{c1sMpk3RGq1MJ%H1?rCXJQf9K&FcS0ps^hS5%?Z!LDv*7~x(XH@VQ@xOjZuV{U zZMyBu1MFM89bcouEp5(awQU}iVi|N2X3{j3V_84T4CBqGHBeO*wl6P41$ZTSiks;v z^qEBVV8+oe$v@}KK1t2xB*QL!x)4wdz}|A)z{5qMt?2?d`~8E*Ctk;ky- zGg;OR+LO9!kx6W4m+$;fI6_^T)fw(!RcUoiQw`^kTj<-G&ykCtwl4YHf z4WH!01Nr*8@L^VTjj}%jhB`AvT$(pZpI}#?+ey_kTt@|RE0n;zJ?Jh&c#{e0+g#o! z`2jBZ9vX*fFkNmQ@{wxpL2tfZo5YLvM{h^I#h;9X1z&U{Mc7tmINlOKw~-0&_@Etn zFT-Jz?T$N1ja5eEodj*B(e(DfWc>lXzh;-**?2LybUtpeK=3ua%41m4XOnpGM+m+o z%+W_*8olEsq z2wGgA<|zVYE%mpT6?=Ed>g}SBLGVAzB2)DHo4Aojee=6%oKo3WCWt<-JF3LbyP2X` zskV(#SU1rL`JagOuqnSeluUVPvS#W}<>4XI<&eAK_wmq4nl0TOSjZkYs~~*RNyh$^ zhWsFJ|Hnygxr>{u>JL1_E*bv=$i0yhr(jJ!H<@0?yBB{^g>+2j^e^=59}oOzV!03Y z{f3SC@8StE$9|O6d#dpAM1R+(`Ix4%qkLE%`n@N4Cz*A7vh$dSMSzCxV~lhB5J`&^ zQH2eo7(5?+Kov5br)Tpvk5T%!83NDIh3pE1?W7&ZLod^vG==##v#jjlC#Yx!!0=zN zp+mm=pKjuciHpBwk00fh6?RYbqeUwt6P^}%2h$c5FyFEw*oV$Kf_;6L@;x5^nuk0s zhwRfAd&!&O&-g9_slE%tS%)GkAlhDTq$aFYBzck?PI0eul!PN2@{h5sZ-3-ERoQd? ze~YO!a%1<#$muEZ3Z{-W$c0aeDr*8)vDV#eD?FuV_?+ju6z3bFL97okP6&Uj8rj1m z&e=b8(Y^ekiu%E?EfWX&yN@Si!r#sBj`9qOhW=I0ya&B!q=y}k6VL8Fb5r6k@sMLY zM>fo_rfL&@PxM_OkNn`< z|K?84`TQgrZ%p1te~Ov%SjE3=5}F!n6?!amE4U56S2vg&XFVg(3hF&eH`NhK`gd#@ z{9Xy)`vb)HMzn^QbrI(HRP^l(p;UL0qVA!fIx%5YW##%t?rH?2xXYVKbNYXD!}R`u z$Esr2*B7y~(0dF1cbw*=iNEbfO1T%Y1lzp#x`ZCpI6HxUV_A>sQ}q&E7sw;uu&t9U z>R0DE40&zf=M&vWGkx3K;mh=n(>;MFV65+G7MlhO+YY;gr%`{l?cJy&s z^%FTgmrlzhv-VkWn4@*5QYaGo2bbfm^Lj_odurTc=5Zg!U3Y@CK9sw+;zAEYz{jy$ zhs3Z=BEVF*Y=;jNF{dD&vT#e`G4&sM_ANPQ~*0g zu}?+i{urzp&T$(wi>DStzILyO9w%g%!T}ZYcK$*l~|DtGgDx(*VHpW-4QWfULSPzCx{?&)>2=$(_ zKc^{d>TS*x-h-i&zp-*JsYI5GS?Q2(4d1k%$TZhX)n@mw$7iSNd%7J9y9=^Omco%f)Yrl_T{&3(%Nt&=YCOvNEZucJSo! zk+(#xS8S=Mp-QaG>uW(?t@RW~x{s|U3d7zs-2moYqQjQe(-;u@%yy~!%pA?opUOee zJzgD>LWkR%4k&?pYs%`gS;|E`P-jz1t+@BIp)x9_2=i$+3=nkJ`-B6dTFh? zO+>5@{aFtOub2)P7^vbc(R<91zv!)!CrpTRr};~b9rk_R#-0>qS-(a8M{73Dckbdw z8uE+hoT467(gEI0+{Z@UgWED;O&Mf{-tA2ht8Hvn>@ZJ%1_QL&j`1>{+0wvoJfsoT z_*ax!57NL7vx)ep&@K3+G7O)%k?Bz5a(=PikJWBtj{4&rcJ;iBnZ;ZF5*eg3l}2W7 z2KrRhUlC`$o7y&!3x9I=?c?{yFXMoQ$YOb@%+_InT13mph8OwzN>$ZhD5Skw_9bVi z?>3q`S5FMlEayBz@17r;>8iuF3&tu=-!;*0kQna$O?LY?Zn3S7;g9rXwP|A4;vDjL zqrscFgI(UXlMN$M*Nwb`o%={-wbUCRR>aklNLN!Q1Z-Zuns(=EjfZ;s-x`~R8xZY#&ynzO4g>M2e`BYd^O7ZOYB97jQyfd2<5?%o629cr^Uapj4c&vWUQK0C zho_&gA);g85xH<(d?3|H7F&&Gvxo%lJxKTW|1B$3XZ@SV=knnQKJtchv~nx0QQ*b1jedmhIqBE&I7omX>wsEYNH{6^-xw(y0#BghPTDuS6S8y zb;V6tq$~{I9%dW`;m&4J3s~4JS@3=QP-_)PNj3V#(D%+UP}j6j=o0H3ZPqh^-j|s= zs%Xd5PHKu5ZSy>(!hMrEAgf8-74T~!W@R@ia=DC?4Fe&(+an$ZeiJBG5RHGjN6tzX4@M zy|H#O?&RTEnypH6#L*YUtjs!~2Qbo~_}0U43%z)FS3cgyxyFmT>)F-CWJa%VyZ0xs zVtVv3T8Wvl-MIG({^ZZ)!u$1ICaFWB`UssdHwUpT1s}N&pNUIfA;ax1s zcs0o+w=tUU_m)5Ez>|60$5AZaXc4=NZu$`st2bsbqkY!XOcxdk{Hu~4;N5?j^%3Ui z>^vc>AI9Shg0m{HtXnK+J7wjE;_Q1+O0VQ8`un$u5b;`-%6STn64;-9FwM90SjBLy z<8=#f*zMO2VmM6g_dHH+gBB3^EZ*Tt&n>rKi(h{JTp(eWBW*EWO`0oZO4vv3y$W?Sqxe5&ILb zHj!o3q!EZm&hhnieBlG}cc?oV;537rW19QeXsgKu$fT%Rs;3OP)BflCF};JSiV``! zInBvFyO}ET#?S2nDj>=X#ao}#NvLk`<5aA}Nxq(6Y<+=`yaC}35~oJ;@gbsBH#K8j zw{Ea_;KVG(TB9+gPKvPzgj zx-7PS#YaArF^0L5fsuFpb2NqKLg&~I@uouh&x+MkY@7L0kF7TS&u6-Yxoi#`4pm>r zEp`+kkMNM{>|u%6o7rZ*R_1}1>F!+Q>&56DUKX8t!iIx*#t^sB%Y8I)ALUFy2Ta{= z)eGt=^5#_){?E>oCUW{e>f1rOExBl|7wGGhq0HK47Ob_{8&In+l?|Kg3fzl7IjzoE zCtJ+$?MJzb_j$)e=UBo&4$1l%%F00EqQadgW>%ut_(e_|BS$~QVp5_PM5X`9BXe-^ zW1VD_^GtJ&&&A~Z{38aLRK?#xzA+67J9cSs=`I|L^W;1`*~~G4*3s$9}As4qM|y40T~QuRfSK2n4m*$WF_1BP%fFw=Vyw=%l+E-?jy}P zp747ICL{07Xi@ynaQg!OrVDsg-*X4%q_n8=F)k}punH~i93FB@Rmv4M#gne1b?AzPE-s7wr_R{TikABJANtI6GoL!wR{7)iNIHea6Z$6u@VvXd z|0{v9-c_5O@ou&k+_j&?EJs`$PJk^ltDh!5&9>IvHJLv zj_IdYqdHh>gH9gx)JVFltAT<%WQe$VT2_D3yvs0r);D}TY;(zD*pU~Uq=j>|b{mb| zPc=;3y-CFTy;^D<98fcq$0oe5M69;Kk{G$|a^b7=u>Zz4Vg>5UA?G2yp<-`QQ&jua zxI^H-YNBd}=szl^UF>MNlPqv6i=AVGczl?D#JtP1j40hp4YE1MpUT(YU-FmqFAn(JJH?XPSS*hHE^n`a!Ub~ z)J3^}mD_s*msb$;z6aCWNe>~cJ2eaPDW{9DN4`p+tZT8a@Et8!R+we2PU5T=WRV;& z{5c3^he-Q{Gb|HxSNZuae*Opl$O&Q9)rFq~^PU#5D#Tu+EZd8bdrbd!S~3@w#W*B# zNUA-kokg2ny14hTtZoqeO6ch?H*&9SsTFy9Jtt|5ORNW7RSZ9hG09|q^^Yd>KTx?m zZ({Y9%5py5B%urV4IBQJT$`DP%%Ywt>;0GqRCC?o-b7aa8q(;`UMk8WDQ@IvO#D{g zekIm)g^cp0On=BulUopP3Fqjn%eWR+%qUW{6fw5MF51iVGEd(ezlMEpsp|R0Cgqa$ zl8n=P{gY)?6|;upbawLfTcU3v(Wx>_RflK1=oHU}E5Pmf-Nz;Ic|Df9FP@@=>NXLv z-hn&|+9bDLPOoR)^EW!SzAE)QynA(NtUu1-K0N7uo$+Bb8&5|cir(o)PDg%%ez!Tn zYNuK2=ewNkjCbhVg-xxk4>E=(;GoF+psH}NtxRWm`t!KnFHC&q)4?4P*y!Ee_hAxlfKR)0)Bc#CCi3?0E}1zFI;Z0l+M{(@6H$I8l!V|kPJaZ*H>CwDdqmDLG36rIrmT!(sRDqqmY6E5Vx_=jqk4mW#YMB)d-WfMlhfT}P=WR_;5sdSRB; z9sXPH?G@)RLD}6%Nf@P?n|K!IQ_cMpbB+v@SjSY5bCMaPOelxQ`=wiLtcQ@O(?7uV zmXr&3U>us!lKvap$FjTN9PWz!p%R%T3N>R{g)u?5V31=v(+Pjy=ErW)>NuR3ILAW} zRx3)b1<}3siWjgirJq@>Bl_u2s&D7g`=!`8)K%wmzZ_CdXJ;C|_wV36nCrHfsZV6< zW1%ZFb9vNNW%R3R^6;np^Ks|M?LIE4RkrwjL*TM1q3j~o7OMBQJUtLRjLGU6C@&Wt zz*=|0WrcajC-Bj8vig5;_#)r!HQ(_Oz1+C({2OooR=nNrG<$jZ&-AZ1>17K0J;YYd; zXDO4*)6GnV5B^oBzYO($DHq-$6RMz-TUfj>BPT4SgTf8ddcQlqaXTa{KMXbkl z9Y?|@XJYwf*!N`GQ*zE1 zMRBMk7hG~hj@e0}F`7TsG6|jTDJ&JS>IVy8A+1c&>pBI$^6o?K;-FLf8u?GW%I-d@I7c6~)cWWN5$lmyLm72B z?d6?RguQvlaSG)s7>9XKRv=ggexG0x_Z$YkG|TFvzwrg+@tb@Y;v@NaMdA!4u!;HA z=W+G#as8jARLwoqAP*<8;u^@HNw8S(7Ehm!CwoFJJfNQHob-?*)VKpE^@_%Bv8)wl zBf8^5%0pUNZJzoUM){R>9pf7(oa!G8Z#I5j$vJwerB<6kh?-cfFMfY&Iz8;q>;U!d zrN4aC-!&D=x~al_Sw;6bjaiVU^?BKF1k2jW*Z&U1F!6caLQ%I;47Mr|zJreUV(2u) z`vsQwO&R17Rr;?Y))>#D6h>~p=hIUz%&HT;*zDZX_QalnPDa4JrRf9CK^h;k`*!T6 zG!V`kJF;=b@!1=1zepMy{VR3DT7=Sd25-B`g6Qn zJ+CU9iZ`i97jS~TzGXHfr%v=LcHDr6{3jDnRSQ*)-DB_VJ_vree%lMl=zA9wf7MCO zx|LH-ae-pXh{eqvm3d}p8kTY{^I2~ z)aN<)M@87Uv-?;mgIrLhR}ir#^7Oyx-fN46%W$OGc}OoE{DUT4N>f{pQBj>V!&(A+ z(9Nc(g?NWUZsZ2ry372w^L4B%3(wQZQlKlh3qC-T#aiw##q+|;5^o62fOdSn zU@i{P@0U;&jEZlGUohoTPY(Iqj*zU-$?LNE26!<=KByzVy$?UFQ&pYB&fQ{L8Q`ic zaz`S2{Ovw=+l%s{-_;?RL4s5o>-`Ds_*w>f@g@G`dg{Wz)l;MVjm6_JHP9lJVIyo- zYV23vY(5sD3(Khr5#|$T6DPUt6lr$LWRmNP@bfwl@4#d&byVan1lzocA^k=bQds;L zLN|PtD(e|f?Gy7MG5Gz}BMM!&$w3%f-C;p!)DKFA3upGWrpb=YMy)UCuE} zgzkuUFRDsEr7E1H8&Snx?lTz6_i2EN$%VUVJv&e?X4auvi7RL-tKZ48_C!B}e0yTF zo{p9go9^N58JtA9EfU|!){63v7t9&G>*m%{W8I48Qy+H{v9{tH@=+1?H>rF~pY2Jt z+XwR2MM}BaRAC>>>KB4J@wN@HY@;E;4eaM6^n1g%4~bMUck`crKPi7~VppTpwhh!E zcd639)~oBG3dwKx6e?`hn7bzI-<_;=7^DIPLb<#XQr zYE70kgJqqQ4HGfzb@*hazQ}eraz=%CO)g1uiW{QU@BC&DtD8${(#<)_nvcAwx}A$h zdO;O(OMd+b>a7SZ9&`8a@R0lM%i1H0^%i>{!Y`i2%YDlBd#etgg;0w4=6A{NnSHW3 z$Nj7=VOMQ=(G=eFon13IV8xd5=}Jnb4DPrMc4?cA`u*_SK$ZH5Kt|}KH8tsKNGYAd zx2o-rebpk1+{pL7_3!2mFFVB*p9{`)G-+3JXcc=VGhrT>_XlWm5NuGwWXJ(kL0_Jp zPhGePYu(%=SWK^SDfXtRcVA~^S-X9^alU06-?oaU{{Y*{;SAaEba|Ykl>4YB61=Uy zwk(-J?i6_&iC9bQSqypmbi&iu#{ZNsjL7>i=KW3Bc^h@|J?ivc z)PDPI0xBu*j+R5t@{r1OC*yPyj*D4^@LA3O&)1jpg}u&kGIZYOoZC3zhIYvx3uKvo zeqVK&Fm7sT1B}%bkAJUsxO^?AzfKvD#gxlu$sAIc4rrgsus?3Fw08z2vf<~+EYb<< zTay(PmHYCtue`kFAyKRPGKVQJ|hQBg4X_!(`)eb8B}ur$%PGY{mTQ# zX-Uhdu-|7{2UynKVpd(VHwj-~q8i!d27Y#yb1dwP+T@UWaIJVY!8uxr3We?CJ}vUj zbf>j-J+Ik*IE$y(H1T=Pd#>Ks4=El`@&3Or)DUg?YaU96Bh)~%AjTdrd_8EYtaCi1 zV^GAWI8LTRVne2me+OLoBkXZAU z*t^}_eFnVL)2i0D_eT>JMv~`YRu=_a?>myS?_4Gm_ zveH6-@(VouUubb^5@p@VLpF-Non-YQ_{DR+-4b5hSGIde9;pO1KH?0;d>(bGn#uck z6T(`k4|0r(=^j;jB4T}R=Wtw?t%)bJ)*Cl+$RTfFdw1Cfl+SzUyXwBKhZocEauwB7 z-DSGz7?gD^YacXn6bAmuiS}W%SGkXg5LR1Sg5o0Y-?Gml=V*!{4fFJ+Jft49c*RuE zOlcfi}V;8BK)~`5-qlnLpD&2XT^84vfJo09gR!alal&0Z7IzrdhV;# zReMw%zyypgo5PuNXgII01!t^`v(<`kuQM-}IKS-$U!6P_cs{eb=kvt zC<&}Dys`m>v@k*hm`UsAs*rpcr+LE9pYN;%P1v4SVF_XPvtgpQr=U*tXR z2~4Hwecp^@B=8*%>8mch54X4*)88Gk%d5iO!zu={j*9T&ZMEUoqR}Kb(n;=qfo)ZH zCzaS#HCVV|GJgz##8&X7KkUpYEJk#cP1ovrW|GsJ;+B@rlXHCL*T&%#UlR{1I!6lZzFoxXPxW5X*0Q7K z7T?n|Dk&Epk*@|o+C}0K)x+l^P8$q-0gUgjkneI?{N|90^ZvpriU3jx-Q>n1>93BYslhK8%&?gB#qMta0zQH~Aldc0XJhpfI#Y?hEVtLzdwT{ZsYmDD!TH{I&IB?!MY*3B z=50>d^@)1sidnYjrBgLUbXwv@ z)+f)h+Bp`otMRy%Zm`%>v_Ba|-aR5#0%KLgkpAPHJ=551B^~wORc;fp%N1xz&xySs z;+z}9i@9XO6KblZu=x;~yS=>Ez&$+gQ;$_Ob&fvjt&d>iUD*1YGRPDDpZ&2GJG?>t zZg{5?-}|2~!ad$b^ac<4pB$3IH)tcPFM${T60-`ktcHC39Z_qRldSYv?=)-hDU01v zf-&jlKB}|9toZ8vc(9RrQpmNxcO&h9{T!{ugoz?G7 z`ubQrd^b1JR5hD8O9Oq*=DemCKcB*`{^!KkWRP;I+qcxn|MQ;fjABP~THCcY_TI@u zUQ?-m=?y!XF=>tA-q|q5DeOre9-Q#?zU*fTJ6g!QSF*1!;Kzk9%Q*M(1_jsCs^J{4 z`$0E3PBry3PrvSlKULp0@MfI^x42OK_ENkU9nf)|*YOnawN%`h#H=H-^&-AL#CLvO z=4|`7SA*Gf`m2SSsrm+qS|2*eBH4YJ+gQZQ6X$qG&TkAI7k7?pCQH`hihGIQ z32buApE<&x{TTh_PZ)>yJ-gC6RKI$b)5PAF)Dwwpcmkuo+IOA6vfhLYTk-E#_(n5c z-bEgKUxrx>9UqBawpYA3&w8CIV1?%qG0RpTlQkdey%8@AKfHy_{FV+VAH3Q@R$rF1 ztW=iuB>Qg*X$`f@eU_6fb%rHwW43dQO5R5^oXMj$o7|%3+9XQ6Wh2vL_=Zzz&2c=v zQW7nG$wNA*LvqFc!W7J-fNzFh%qJV3lN;7zcgC@x?rbY@l4fkGrK-29N-J@WMOgPA z^+7Vh{7;Fz!|^`{W4Dr?-kox7cak}&VfV~*IpiL_cpVPCKL^l*;hrlmf0j)Nv!QezLO!`gWY zi)EtAu{?5mC%JGl<|K#yQF~8rEf2{+qxX_t#&p%h5gM91SWFd+RtFW+@FYh0$O-1D z6lXfe2zJ#?B~`~c^4h!qo8IpyG}f(DQ@MkGW8`Mbh0m)CuZ!^uX>}S=jfb&|>+!vB z;1^4p#=RE(O;=Q-C{HK@yFuc`B)Cz zdt2LDzK{!30*_)GhC*2f1GmNAXLX~;QCobMj9K|)hgy8ShuAcVZB56M%=TlNa|~ry zUED`)+NXjt`gs}jGj)DPJDCcqLiU?Ec_+yLg}giDb2+4`zc-6H+^=-?-%9q?9}u%H zK!IN-qwg4MzBh5$ot>o<8|#Jl8Oe7R%QE{R{iqtGEX>;%#@Y&-WQsrL*$kCukKh&` zRw=yW*?mg~bPo=ym1mm3i@!qf_qvf<*o4^9Oh-*x4}%xV$c3lz^eTk^xJ;NTgCsETBoQmY^rq?-ZiL=n z=jpkrvbJL!dZ?=Jr=R%|dov#5t0QLR)ZIDFYSy}uDXQ^ze0qpo-JGJ2>SQEbvOop0 zM@@f&)}$oN+YM@7%g-XTe$P{Ce55Y?i-%MZS0PMb^3yVP`%vn0Jq1Uy0io zq$AbU3F}h37gpO|6C1XOyaV*u%2QeYtZJy*wH|hsm!vhu3t$AKt>WKG!2gV)lEF+!hJ)BCHo#P=`xvhvbUoG>8D&%ofl7mFUA1IUyVXb@0 zAzN@j8KIK~eDwop>7e~aAu+WSEZBgLbW)ED;NL_1806=D{aR~QR}J@bcjyK*vt8sJ zPOQMd6Pp8W2uh2^uWLcNwxt*+MA#a%I7KS;? zV5b8)+i?#p1h4o?qi9{b~oF* zsFR+^AdUFeG!?)}y^un(>l>cX7Ionr>V)QU$WrL;8gx<-`hHhd|5BBAF_=YEeVmUp z^z1wFiM~$I-&x*-u3mGFx@zEJ&XMlTntNfIN%}%B%BUGJi<@ETo*38%pv8j_-7p?f z4*z};I#~)|bY@wJm=zaQe}o3tx{(h>+R@H3(vNX|{xQG#(rq1cA3^7M0ygWTDqP1p zZ{i!OdlTPyljFarr%I_o-%(S4Blg~fm1{_2HU)nDPM0bQ`9AEK*AbiA`0hQ$seUk5 z581r!|DEGu=ZHJU0oM2dM9@$*l~oU6m%KCpBmRgk!U=!ZcpmbU3iqbUaJ9bWn`+!A z*-DBma?&&3tTQs7XHRj0#Agz`GDk#C+{aHeegPW6vY4Ypo59-(p04H(zAT4i;!16)j|K|3wS#{ za6i_gjT-f1$nOXhd`K2~gg4jm^jnEhUEE1G=jrHvUe=SU;J@Yx1!eTZn7j`~tY%53 z_ohg`QgzdYVmvz!*{RF=F8(Z`1G)&EB(i!(6-BAoy|F0kKf*`WV-*(o_A{K}1D`~+ zTE?z+xsUVgDx3Rw$~gw&!nR>ZGsa8E>3wu{zQ&Pe_rzMN)R#ebH_WdlaBn}1?MhGh ztht2jYQA!?Z#_PeI7w%jqZ99F#cS%qC6DT(r|Rb8rn_Hq7rvE@Rcd6Ma{)t+~lNnaStpI>$<<`$n(fFB^<< zxV>j(o`EKQHko9L;~So*BAlihndl;vGF359ExL=!Aq(#0#UxL=JOuibI^pJws z#h>Bc55%ljeXqih?+u9YkUX-UZ7uTs=kWMB{<&Bb+r+MZR0XF|1U!UyZ=!cQon`(c zV&%81MCg=Xo(;H!cGU`ul_S||J99_+$CF$ zrm{NG+lBP47s%?*(~BK(X*C_j!(u)1;Vc%Jkh1$&HPlCNe8EmD*yFG+Z)NKT9rQgoBSVhF!b=D!@qeTx`iN2VEcrL9)@3H^=Jga^8>jF(O!@p!4pij!l5)EbcwqoK2 z2yTL-Gf%q$j&pQU3&OEU2APnU_j>xK6m7Cho&LNmdx_m;hj7Y=RMxGj2NadzbXomj z-hQ!fJt>lzK{0ML;`#K{Gf5i? zg$1a^4yg{APn{INy=`=zpOFn`>%s3yv0erHHe!*h)ri+Y(GiX-9QDO{8NHvs)r3FT ztMWSLjjHhUjKg*sOyR9}stYUmKR(w`i;+W``^5b*y5e&>=~117EBrsj<#^U1p0(OK z+Siaw(eL?CY)pY;PRbwK^?pK`)WZ#T=u5uGGq8nmg$U5Jc zRe?sjNv-}mCjH)u^j{f;jP)Gr%q<-q#6>4KuEx4eS*fO+pWiy+W?ihQ__{xhb!kRr z9ny`ekpIa|SBsEL^EKUS*nRff*VKRCp`SLMXZ55s8t|+_nMZNbI{oW;B4Q>SQ?c+g ztUHI5RKX%@XrvKMttcv#f{m1(46uI!Q-r{BE?IkO1EA4+Tn^DiI z%>7ix1U~;W&&ny+Ri#iGiuP7;v~#qDsTsej>HEF%C1tWKV>%p9>3Ls)E%Ib+SA~r6 z&Gntsg#|^(91+rA9nwIBd&pkzPx*OY>(Q6#>6GMIf3V0(vp+}e^eG&l!ts@3F&taP zM=r{wj_%LxwBksNw??Fw(~-M1)we&|T~^xK{jFm1136@`zIAP!a~Hih#^+s@sn(BD zjO9dhJtMyif-CfdT0+!>U!9Gwiomf=2APpGZ;!-Sg{^x2V0C+-eZ3d?zLtIVrjJh% z(#R)W{-X3g(KC45-l{gdrM$hEf5~<~8}$M)@i`8j!7g9PDoYaY9;6h@h^3Z3vD8N` z_OW&O1GLHcR#^Io^f^>-L`Y}rA!BlUZG|eQ*}RnQ?XSj-+HkWfH!q8vsTb7H{-&1V zettC|FS-Hge4x?VeBC}zc>6`<{@)YNX*rT-k-wZcAK=V$-SbIeJIV}7jkDaY^ zl23%RovT~;yI$$3@?i~r6ui|^25bREL-weFcMGw{Udm*y zb>E>pvXiQ?q$*^Ej@(dt4qD2EnN;cLI!+H|wejBhRfdb{z2WrYjcUWQslZcMWCv}# zoD!MG60^koT-C=?_wBI5FOSb#or8IA)E^y6Gk+)2^Xn&FNxi=;`c~x@_2uXI+4c3hM+#K3pU7{Q$!^j_|6* z>ZpHl)J&PMCsp%~PsMG+w=_UV}RmO_mt#%!~$ESDNH(tvQ_&an6-=eb? z$#Dnt9g48XSw`N-_?wE2MoC>&hoeZ&6L74>3X|b@9NRVXy&yS6`Yfy4{dCFd`yXlc zs;Ax;lehY8O$EJ^4f?(BszmPLS&hVcQM*bHV6C-DH7=A(7O>2ZR!TO&@h873=2?wA zyQl959E-Vs5$Tnv_lWedIzW4<#q;eVe$4;IINvPh!v9TER*!5r+X#2ENCC>W8h)zJ zyBe`d16}#rRAgE9$b@5^Zrl_);4#d5S*oUf!yE7V9~W-X0ji*LvQkfO2xZrdQa#}t zwdeDWVY2!yyuJ=r%|rX{q8ZmFD}2wVesF7r47o%8$fDfOV2`%+%s|!c7rID?eV*b% zD@Fa(w{z_y&9C0MT8HChp0LX9fHFL*6Rq?D&iY(t*h<6aNftRXWs(L^G)Pf?CVvYY z`&jKenQ$a~+-29wIrf|UZXNX_J3#Kl>s73?t&^{YiOQ=~4u!IQ=UG!}zQ=gh)i~=+ zc|C_1*`i;%Oq49*QDKdhx?Ef7tIQK6>?63yb8ol%=S|GJ%zl$1`VH+E#hYMJ0EHN`YF)p~J!B3a~&9 zU3EnI0dq2ydcRLjuj!MkztBM=?AGbX7mCxpYxu?(K5~z2crjI8iqiT=jBLTbDPB_ijA=Sc_Jqqp|CDz zzeh0LM{sP@H>q|qr;pbG`rY^N*B6idRMoR{Y|uL?ucGQ?M9=BVO*g_#KBt$d&MgT? zH8^TPQBzK-?4Cm6{14AqqO16xKJSB+<|P?r?IGP@2hd3Cx1I4wacXgCijW?u!p(2b z-(nTjYjjpOUf;kvRS8+-IF-H&NBu1St#NF^Vf*lIZYZll+s2CLL+la#xJ{WERwSC5 znJ4AKZ`Fl`S-t}gcumJ((eG)hh z>JX>!a_}D zhq7WMlMn6YTN`0n>u0dlZhAMDPxe&SV`-sZ{{U_F0lwR)nkr30-zd^Y>i})hIjOE| z9d*b={rA1Nw+6j+`9>9jl)?F>J+xZsZ}7!lYDD8t85nE zoBiHtugpKzq)Onci{Q9bCVUa|&ZZUrwzI6h&fH>Gb<))ecs06ruN^#}QcDBrlg{$`xrwz3>7g7I6Z_a?+vX;q(rR9(tb$j2mhPz77p%}e*g}y;Qxos@= z{a%LHEe^6UZ~@*_1coBCRc@-}Abqt)ML%7fzbK=3Var;o+douOQ~Byc`p6epFO2T{ z$KJ6gt~|$gDIdaFUzypVBDX6hx|l*aUB1i5Cdb6Y-%uQOWKoI5JW|Uut`tr8Tk(9y zE7#D9#bu+bWu?JlZ;|!FB03Ij?QwYt_b&3k$mY(dMrYl~BF~AD$@&OO#qv&-?orH@ zTU6w6X0gzpIN(<`*SG98*0cM1)#a-6!m7gM_I~`&?A&C}S83mVu!a))ug@4>r?xKb zdl$Eg)@k&~)3V!*)NDg5JQXoh0ZKlLH=SUaoT9%7R<0sjHck2CA;{m;=Ur)cLm?GS zD^)sUjcdSMP|ADnqxn2)`kdD@e*k~c%`b9-@0Cyc>mm{q6hrhSVFiZH}6qXx8 z@pgfurk$4ub435=T~$bTO7u+M1-;XpeW-%#DSOrTKLDN(tKV7`e?yGii&3xQId$c` zilX{dOj`h+!jx_q);L>~w-iUW(*Q5v-7nN2`%(tE1oQSYKQnx<>LC%*fFJkaSySo7 zUAjP(>67;KQh$1Ul+6AmZe0b*PBFjVj)DCU?GhX7srGL@I?l76Vvn2n)w%YSov@d4 zA+0#Xr{7y!S1qWX`bp+}g=cl77t2_q+LqXNbkgv5%j{RsP-lzi3b?C;qnP+EBS+SN zuaW4u&Q8b2`PDd_y+RF=C#$km=9A8x$KT$;H&}4ABw2(MR+oTVsh*zBzfTD^13{4`QtP{{O;5a>#V5 zt{+cm#<*e=U9m09QVn%smy8u3%Y8~G zw@la&^Y%77AIh{ltRhrX^W3Jt{1&~qTqP2*-atnxSZjz~RuhbMo-wZ!55K4sH;b2z zQ2azA&Ze%$>eUbAhuQWhO_}V_kDDqh^-+a1w0Gv1y)9qk-hp=EUWqYF@vJTS=bsqY zi~QwozSRzr#>RavB-LT44#l}*qcKg=9@2Yt8eUd~O~+T;;V4J*w%5ZL0>?Z!PWaz- zE~ZZU>c3C*iGXbmzSyEN!CWfCQBh%1;ZK?RgFBvYpxaVm$1qC2}=z> zYrB0Bbgf0lZL;~3;%O}2T|)h5={D4(5bjb(x|u z?O3EQ-+Ghoh>GNEb^DL7ta2`gVxcbe40(T~IC?@Qd3{pu<#((iAM|YBwmSZpQFavrZDhqJ)a`{(T$m!Gi5PFoTDN1i zr|9-^`u0(yABW>yIJ#rO(JF&=dZfkmny$2;>1kZ~g&ek*@-1&>uQ0NnDvKd<`#8B| zmLo>L7@mcW*@>$nItHtw?h;X#c~vOI-B!9jSDy`Z)mAc8QMqufcYE9CYVP7$^~HKl zd*D~D@iD$n%QiF=d%W{LA{l;UaXnO5TM zF^n}$Cu^UMLk%_0&HC@*S>O4dkYlM9X=L}wZC0BG@~u(keTs2^A+qP`EzF1MOR+IQ zE`L?_=&KufUBXd@QrxB6@C7D+UNzNDU#2v*xQQ2!mDPJ;nTGU9^s_cm;nQ*HFuwJm zD7l4qwZ&a6c++L#`wIH&8r`mLP(B97D9rFRrrW`$aUi|*C!%n7Cc|^sA>LwM7QKACD7jJNKEqzjvL;9qSZXa!SS z-quA|^g*oqqE6hzlQ@p+V%2n=oAj|>(r@_I_s(Rc2x&|AK8LeD=M%rFMM}_o7yCT$ zt@w8UB(E9qSl%@SmQNj1-5!SnM$lFRWRI?JTrBgHu5zIWH|*p*$9X8t^RCsmuR>JL){2X7b`fov&I83KIa)@)b?{k)o=E}7U!Fn$*cEc ztg$``^s~CKuy?wYs(Xmq4$oTQ^I#cfwl)>tR$jQ9-wcH0brBy{8Rrb18Ux!f-25nA zd8=nOl|d`;s{`!uHSInOV|7*G)Y2pUljXm$|MulniL|zJyu5Y8{W?M4v&aPeI}9WB zl@)s!dpC7cS9rS9RlQi_NjQRaKc;6^z;VoHLTX^}PBiZ`7;C1SzQ+#bP+1-9C4E+O z&QL#Wqu~py?&^u%j>gzqBtL_fUbj9wTGWq*=S?~CC2SU6br+R*HNUDYK2D+B*Q;ly z;*BS1(5viPEH4-C&~2Jxx6Y$d%VRX+e^~7b_4!$F>jF$$$01dtj^!b+S(J ztpPvjl8#nU^_C4opOn(`JwP-5K*dg!N#0Po4%AtHn1A)=VfQ6lJmS8mp&a2kpX!XR zqDzjlM>SE_0b@O>Dx9PW*&wGErRSPcC(+G%57#WGEsn8B#7I+~e}fr+fN~t9QXC4w z%aqqpsGd#M=*?m`h^0nwmlWrFMc906w z6nh(~-hw&~jm2b7oHf!e?*+2Rfn<@IR?J#aTV2`Y0X7+6?9a&cz#eZK4@js%x z0~{C8{AKvnK{fLC7-KX)?X73o)QZuL5cY>_`7|!azE2@k29O~R(jBYO9AE#qD z9KR0aNBwzIKj#3qU*J{$(@&jB?fwYIUhz>FQ(S=gx>M1^Ra0~HtPk3^cn0gYm$wGc zMH6w>N=oY(g;H6Uuqh?mnM&zlM|>X|WB|K7$;$>%l6}PZowQYZRc!-$ri@jozxm~l zaE!sc_sg&?bS_I-MTiKQF8@ADXI+o|&rR%mn7^+U?K6$@9kc!lB+p{6C!7P^dLHAx z;r{WE&h@;F?2!q_8G7HXRQ->rZpXXs8rRQ7m7YhP+@hNm*>DDhv`MVzGOkd+mtvzE z*rb=EkJ0z1SNc01q7U!pRX18+Y=#x8VY%Gm{8zQiXK=iX1G}oG>cMe}{eCMkn z?S7|vvw;ki-_G7m-fgO^{tVB$*(lEE7UYf!yMt>7+EPmfir zKguJn5$iQoM7ee6exp&AP${1q?}z$^Z#zbc?$M617+{(lGtc8|RbU4aj;fU6<#61i zd;E%h8eh}Yzl-!TaI}=wA4m%RBbjU&_C1KTie;Q(j2Fs@ZN&3+$tt&r`&*#6L3X)@ z*IkC8YeQT#BU88HSAI2%GI`Cl?oy>S!RsaLzuY5-%*8IRCY^N?g>-?cs+br#Xr9-} zBnw5sOtCOQk7q0;GL|jIi4=C@2#}FcW{!{qDvy@R6wMZlETb5@0NA&(mbNom_eQDGmLoyMDiEJ~~ zUtfrx@Tv_y3-X6PLlGWX7w2^rX^&Y!7>7ZYV60G!XId?8uZHU*K1b6>^RaIzlng7e z74@dh7w_R+ZCRxgAL|U$HEh%hibmMrOgIX#$3AhsM0`w;(VxaxH|m?zquvXO^erM} zx>|II{B^r5(#-CYGmPq#tb?L`qv~RjdiP5&O`C`P=mZkNl%lVHe~Hr7nWAL zHRD-5=%S(eK-1*)mA=pZPxVMK5nP>qx*)~LrTnW^I$N+%6Zp=PJ1TolUTe?4%Y(~R zAfd2^u*dDR;>E0ensv6_YS6iKM0nPNb``f}k#ppNVk~ml7`GVfN-FBxWR7b^l?Hjri&docE?0h zOWZp~HteGh)R~VrqWQ|PNTvwhL#3=!l`Mi~J}h&c-@3I#=%Vxr?HmivWAe#IUmse}G-gvP4F-uZPLe$fM(iL)Xb-Y<)^l@HHlkrMd# zgi-D==PU5*A}d$lvBUR{MSN;yvc@jaaY7a>g&)Em9pQLDCVY)OzQ9;pM0!EGw2lb5 z7RNkFQ;fDp;A@_~o<;u5af)vnETvAWieGEPaz4A%PaaiAY@CU6OIiKMpxSq-@t5+e zkKuR;j=SxfX^F8aSq(X?JHCwWorEig&?o<~N1z1-UW3*utg`w?_jZ?g-@qm-lNFY- z#0tmHEVaX?ikE#VkWCCt#*-zXR6#Eey} zA+^#4>Ph(yF^&)T$G0l>UsQ;H$%%Q*dP#F%o+q8bGG{_ng_X)em|qX>ZJ@#C9NVvgepz>7pU%gSfs5ww+`Pb2}w>iIb_~<8~Jt!w!pKU zPwk~${`Ot_r|8$0q5^7JZ@i3G-fAueP$pwA?*eSNhgvLv<2s()wC< zUT1U%AjyeYiz0X(a#S&bN}g-eUei8;mlUm|{&v2PU<5&3%@`&sHZ9EIVn!XAy`=%luM z0AmctydS&ja*XviwOCe{w2`cSGtPQ~SB$dD;xnwZjP~0>IsKC(Lo^rUU8liP)>(#q ziaPSL#xc(b)?G~td?h~K)@vA`TE30uy;ST)PCu?A@UsY+E;3)0MIQD^svE5ET*BWY z+E3GK3?zU1HnM$?1cJb@AGTu@dtT8|T2)(H{c<_J>dLPkg=3_dnIl5B$%T1%a7`NG zDzSbKee%3me^;gb6@Ooo)Yc(0o>LqYF#kniDegSgs$hQgY!(f3KqQ6QT_}GBcqF;*ScE@p@F0m}3z-aJ|NWU#sHm9%f#QdzD>7e3BQ^y557h5K85>kqY|3aCRH$2M(SlPr57jDS;O_N zA7qj1)Y_M_NYuLJ`Bp(3oF#J~h2=2Yghw4qu~7uli1Kr(<;(e1H;Q)v4j-xZ|568F zQ|bT};=||Cy;sSG_vl@RMc&6+vt+iYb+@H>KLSaHvFA-k9$7qtPaS5BU97fFJk95g zA0@wfiaNMmCcFZU8ggMC5wb&9AltKEGlG8d`fV7rwaBf1c3E-c`kYO%$yE1fFFD~j@SQ#NnSju9XIDBd?^ zkeQe_w8(nuV5>Ev z{5x52I(v-bmxK6K58C}o{80yw6oVtyLsszSX<6^ehRz?9q-=I7fsOp%(w3 zgI1WkPx-=|Eb^E+jTmW7jcs_uk#9)yJ`Ku-3HHpId0YSHbZsi|m49KLmfe{fAY-ohg&A zh2neG`-ESO@VU4Fv|0}t{c6lx7mm|(fc`dT>twAjsnn51@D$JJAx1jbZE>kgQV#>4 z$tGp3Toq%3V(Djz6ycRTR+}|0hPgfLcc^0?6J@XB@yXa@u}I(T`&tT$kh5@aWW(v>(vDJYm1B#l9yw24e<`+V zZzU)6ZvTYiJ@%NLG}bP;FpqbtLY+3_(Kn0Ghf`JcroM0R?`*!mNCd1g=3n{IHYm0` zx45+tGq1)~KfwEiZ2o~dDsc3p6uZLFlIA&!7A*qDA4#1o6d|EchOtQB#9E#3R&$J6 zFJ;BEAgRPI)A2Vg>MCKHG!m_S}7u>Dl}D6bcY%_TZ~`e@#bpc z&Q_%EhT{np;cK$dBsjhoc{@Z%2JKLR{V%fmc@4k5OPmf&tTl%6o6aWlWyPhG${NQ; zas8`vBad1Q#Zp`_PqvxLuij2Lp255Kn2)w{Qhf|kKB?X#^uu~{_q82VV^z6BS)>ov z>MnAFx0;LhhGxE=3|~`3RE4QJR1x79h@j@MUXxVGT{@#r>0!NLK0Y!p^W~;rQ>5qB zqp2c7F6CL#2fA0R4#J>sQH>Mv)+~MO@6G!%dT^C)-D)^i`n^6M>y+MRHXq^TgH_w3 z`1}+$2_y@Rd5MuPhhdov`4ewj!WQ#!?hMZw@7W`8#M54VFS}l!a76#7JjTjYPi;1H z3uKYWEb_V)w*gq|UKZ)XU#?8b@sh;C7sz^bA*$@Gf9(>rzbO-ftUIiYUbDni1uK9z|_vB-1A^N5jk$3oYb?UqJ+u}G+& z>ctEFZa}#-abNgdM^?K9TlJ)vpYqx_DEA3)%+-(E=-U4{O3-t)aMq>X`+7?2Ua>lm zMPB3aV~ufA%5&cs_dM*i!1*0a3$XGWkAy-T567F1XW8RnufNrGTFb5%=p$EzBPW%$ zi+*2@@jpwk9{F&fx$SM0r>iKrHrb?^xo-l;#V|BsohJCU85~zZdL0cA*`p6-Gen%f z&97#fmnBrsZ#qC3v|QPg)f?l=4!EXAvdAE_8@}~EF8UaA&E#FPj6Qtq8~!vWp_nNH zPWGI!IxerV;*;Y`0LW-Pfh)OIiG6>=Z&6qC$@T&E*Zuz-=R!CRf7ccZsWJdQx2&pLK@(#wzO(@ zG13?RzKFL*v&n~!kInn%eCR93*Rag?^D}=>V~yb4QKCGa|7hZ?+g#-;_Pq#>s&-!% zg5v<|ua>vwsHr|On{QyPf%x|UTzWg7>Fj7jd$hDZ&^#S2cv@@L2(P)>1{*XQa!aBjuklTa~bSiG4eA17$76|#zNg7 z2@dXPy!J00heEiwDqYuD_G)ho zUE#PNj;BTY>t_005kJYiPlx6+cs_&T6Y)JcG1dEtb6;bPL9F-yzv{{!ZE1u?tXx%2 zFPPNgJ`u7?=K4~6j>nt9T2Euqhk1PuHo3_W@!Wx3+C$L}iuSD0i8XG4<1SI&mtQ^O zb+72ajAPkZYN_QSeHSLlqOwktLu&D?$RgK@(>qinkrAJVcRX*flli6i5JQI^gz0XpkJo*Y8&%)i09q&$jbrl}Jkm9N0 z%0)!_QJk`aMSh}BX480)58p`j$P?zc_emtTL2?5x3N+Wc)e%cwmzdyA&*?3mLX`|l zI6lA_v*e_oXoYR!?`X;)WvG+dJgX^KSv!~hZcbw&S%2{jRm}dl2l0{y{zk~SvBjWvD zyxK!v>}LF3oPnr|qbnT$N!EB6j)81AoKAd~Z+?232Wx=thZs6m?) zbNv%??w+I<7n#GE#xM?&*JbACAbC6?=_Lm4gyS|==$a68fuJi!>jC9Mo-@F6qxyK$ zYd=i(n8zNg;n?H)IWWp;KCyF_`D=oGuQrY@Nozfrc^87asLqJIviOIOfvuVUbag3^TT8<+uJ=^oq#ngXKXn&@*AVJK+foq1ErhY7yg4iH?`qW0X0Vko+oe ztYYU~s+{Bgr;1Z~R&Z9m^#1LQC`DWm#2geyKT?}Jo=vp5za~pZq_dM%!I3}{l zX!HAud467$Jjr+ZnET$w9$7DrhunTN>8enOLq+)r_V|E3X1K<;n0J+HZg=g&a(aFd zlI>X+ut*Ez=wx2IiuSvWudj%I8h1Ts?q7uF<#fiau+!7*^_b^80LPtPbF-Q(JI*gO zGu35~66*9EdO*Rwo2-c}!CBcB8OuXPh?1Ag^dQHhX1y;okFd+b5cEmN9%rkFjThi} zO^5YuI3~)25g&nLz3c9QBa6x^o;<6jEYg@o+Q{tJ@vTr>y?D&SqT~trWKbG;#LHlq zo_EhPtnmb!JwgTaOwn;O?rtZaUxNQ?t8OZ?M-e!VvHdRf+geq_zZRLqx5m(oucTZu z7$ZH+yPh!q{_w=lIG$pw=di(0UNyooRu=qNe9THXRp zSX18*N7RN(c~;c9Q_bvH{yqYdP+Y;nPeJp9k%zW@Jmrk20S7@bln;hiy^D3Hu*cUJ zW2vicz*u`zr02rDrFd2q5ptfHY{IkJ&|1M;Jsb}>`e5Nl)9epooo9^yY0*7^M};1V z7{AN2yFlOGYlC+iutyE{h-xaINI&A;wnMVYdoSc!v*4I4lf09V3^U5-u-DTx)IhNk zcn13UGz`zfI26{`Fx+U?m;lFT{Az*Sip%-cW}5c^#ya71N70oF1%Gbp!Z(NH8Z+CK z&WP-OxAEQ&M`Zax6FD;cDKu`M#0R(Y!J9n0qt~@!(G^niBAT9HLU zY0VLo-t~&{zQ}`~H}+?okz3-g7u-7>iZ@wf4CIsG|H3?c>pIKmoz2w3 zA97(%t6)WG>`H3Ub9mOpVx$!$9a*FcZ@Gi-_vAZamA=l1>qnizQV+q`n=N|ax0^h> zgD7u9;ark>CTF^4Iq^{_<-)%(223}=&}qJFSr2n0it zC0=yjaMpO!Ge$u%)@!Cf@g=MNpc+`queRg$Ln+du{~n%IJ6YsXNZQg#*HI~59e3fP z`^5Dm$xxjbm~HP4Tt000j+Io~X7lqqdmLwx!YoqG z?A7q@^;o2d@w80dev9!%oZQJK_a-0e4bT0~`&govd++qe(9-X)bX5>uV zQPK?MlS4AqJAZh`Ey*HFR1b5FWri_LGPd`Paun}+lmEPCwBQ&W8XfcaMP(+zkx)Kuz1z_%S>V3( zJ2K2&JnBDKx(nNNOi|v_YcCRKwZz-$>dg}TDstf=EWaI+jplF}?w=3I7Z`M!(S68Y z#yCb8Z;bm5p7eUc6qXnPd$5-(z{sC?oz~iiX!u{(cLiz3tKL*qA^u&q%NQ&J~u6 z^H@vY4aZ^ckQb+v-~p%0!Lb4wTI&)xS{Ye;Gkv`ozr}dFu}b%oHg#$wzQR%tx$5-VR?H?bbVP zkKudoiSOw6WJkw5UiD*&kFZDJI3!Eugrg`N<#|?EBr=w)e#?65{^?7W978+8Jx8fj?lh8vPt;Xm$Jb$qnpTU zB2wN>d47!1$MKHiJ@<~o2OoLXG|&FRtLE{l#q7EYmv5Gv4kX5kN`R~FqH^I``+0kDePR2%S$eZBZ^S!>783}uoW{=P&xvc9P zN;)envdZzjvCMURe$plrVHpq02g!@V&)#!{KYirqlyrOv$$Ur_VTvVKcZHbyg`IzA z?W3tDSBQcrBO69_c(##Tcy zp6?n_NuADLPcuiklgj!N)Bl#`O_5-H0UswRungQGDd&3H@egyb5t9y#JV zswKKzoy5(xjt)s3wr0DC@k{YteK^i?mGIMIERs*8XXrQ_HE;X9?^d1_bGZbLsM=>I z4xW+xYcfunXyk!syxSAx?~gn(1={H>F&jI4YX*X?R*CapMcf|OJ*3l{iF@!oS)XbNJA;iIIbq1KZW ziQIT41XnxTrQcWjyOn!ez}nQ&2#yO_<7^rA4EduB3l~orB)1%rm6TBA-|aN~2L8PQ z11~na;ay)lzDQVti=&Gg_L;$(!cwz55*cS+Qo5lLSFq_O#}3!qXNC?#l0zis_kP8^ zZ+47S=UKH`rN5<@_|~5%;r={416S8-3*nUi${# z?>uvfBbYl>XXxFX{Axe1iuyK}cZyDb$rK|ohUzIw&M~sOkTf>eG1}&7)Gc6Y;dcCt z&R1hU8+t~4oEtr#v%I=W(z_*Hv9Q?7hp}>4i#}}T_OZw|@4p^vu68Wr?Th*R_i%)! zkNPBZWO&+FZhzx;ut8WY^vDuE6`FlLYivDl^v)sI{fFmf=>Y|2 z6@?>MD>7oW6z`#d&ok2v91R_TrZFsmDIy})(W2tGAXQJnxV2%Z&aW!CN^oGP1RsCvnD2Jvi-jIp?6IiugQ-@s#m~HIYto4k zAAg=?tQ;aeJJw5i@2GUEP$}VEQC~$)XuxY4rg#b4Txj%>^@E`rvRgz(T@fCNB(zoF zD9fv&J6c$65IH@Eb%Z0{^A9L?o6BuR^GouO73TM+G|Es;i;Vk67#2el{uU}dGWZhD zSebn4=ad6CyTVS_+6zTg2FJ}*PVbeM7la>_4HT z99xViko*kEDre02Qsa)kPOP4V4Z@cK!z#Zw_#JVz*%4l~({)0Z{9%p`%OKg@8_KsR zuP$K>v6rU2F;#QcVwJNKn&6}JjJO_ui~eWajwAGCb% zo;!I~tR@tPqHOZ6%KWRU(N#0juuH^CSf_RxecX!s&i0Jjyr~u|#_Dmrvvt{t&Y}Sg3Js7x*qf*i;G0(xpXC^O;J=s-ZiP2a0vzj9m zW}pbxE}N`TD$Phi5t1K{Jp3v{cQF)vRMer0!X~?+_|2H2Cfc0F8ROkx_9J8eeDd7r zk!*howhb!=cSjd)w`=|Gnupjr<|zZGgo4kP7{7SZjiDUNrI-&TT+v7?CqAyk0&!MO zxZ-C#R?&Us6W^BMm!(rSDg;aLRkl5Hz!6#G$jN9A1`aL1D~)R#n`}L4nTY-vclgof zbOy?>M6g__k25`bFskk_b_ z>`A*+Fw)2j71Pg%gt%26mf-2q9tmG8m3%TXQSf+V^EfgfIi5W0xS0!!9CAdA?oC+2 zOTx!OiEl|~AljbhKidY8Ew&l|4zCDX>`U_yD58#v8r^@I>m9-(!CLvuV0d*=X9;$R zag}zfoLP?EL3u~ijxqaDD@7e%DLr1=Gve97+(rD%?;3esC9nC3eq7|j>{yR|f7uLt z2x|uCgog!-#wer83*U*ziJCtAZl@!7Hdrp68%L=@4vN5n@iNOG|H3Ga6_y>oO? zB8SCzBBShg#u1|pM889^J002M-{n~m+k2eZJQa#0a!0W45g4MH%HmtWj*;2(rCB`n zWTb?r2N#F#D{B13j61Si*r{Z?6&5Jr{?k03jUxCvZ_-xz6Qc)`&v48e^~fvL6c!q0;_zgiWJck{#s{A2Cy*uJfd5&t)#d zBccNlUVf^xn4iI85&z*k#h@wzNvvrFD})UKLs+q(d&8#rTqWxByw04-uQE~=i9B-L z2#%(4L}rXEAGV1jtP}J7d-@%*yvG@O@LvS6>JhIAOJws#rfVIC;usWRk!;_}$dp&+#vCWO>J6m+-Em$-84- zv*YE6v4#fQ@1A`pkp(9OyT*AajXz@Ih}#ioM_enakH{Zk?TmyY!}~=>%zz@Qt3Z?A zSB5qQy|$1uY?0sS^SWMke1vC3vJjW(VYz7(&Dc{t)qp%DW|jxr&9>u?Cf<0p$ zps?S8DjQq;44m0$!vgWVJbnj9Y#Rt7!ef72%u?`44(}Z+(%}ce!@-!@Y#g&243Is_7-=@M z<%S`=C+?3bCNxN#fgxBbJHkWnhKh@K%9-9VydYRO@Emm>ar@}Wv1N}jx@+P6G3()j zaqC!mMz&XGzb;-MGm>qK;N5tq>~{+v$ezROkz|i3uQ`n|Ms_~sos#Sk>tJyPl8BXT>%^_V6+e%spV{BA3Lw#_#Zke{B?F%;a<7dzrL;a8NueVmLTEI|{PL9^=ox zPW0gdNw&SS=PMLMsJg%q-WKm1>L|`^_B6mW#&|Sd6VJ&W>2V|bC(TKWI69))dL;ge ccL|Hf?`%Zb?-%!F-->(Vy<<-QeO`?0{}VfJ4FCWD literal 0 HcmV?d00001 diff --git a/simongame/hud.py b/simongame/hud.py new file mode 100644 index 0000000..e3c3ad1 --- /dev/null +++ b/simongame/hud.py @@ -0,0 +1,133 @@ +import pygame +from pygame.locals import * +import tools +from button import * + +#hud-Modes: +HUD_MODE_MAINMENU = 0 +HUD_MODE_PLAY = 1 +HUD_MODE_GAMEOVER = 2 + +#bissl wat zur GUI: +SIDE_SPACING = 30 +BUTTON_HEIGTH = 50 +COLOR_FADE_FACTOR = 0.1 + +class hud(object): + def __init__(self,posRect,mouse,font): + self.posRect = posRect + self.mode = HUD_MODE_MAINMENU + self.font = font + + #Die Buttons: + playRect = (posRect[0]+SIDE_SPACING,posRect[1]+posRect[3]/5,posRect[2]-2*SIDE_SPACING,BUTTON_HEIGTH) + self.play = button(mouse,playRect,(0.0,1.0,0.0),"Los gehts!",font) + exitRect = (posRect[0]+SIDE_SPACING,posRect[1]+posRect[3]/5+2*BUTTON_HEIGTH,posRect[2]-2*SIDE_SPACING,BUTTON_HEIGTH) + self.exit = button(mouse,exitRect,(1.0,0.0,0.0),"Tschau mit V!",font) + + okRect = (posRect[0]+SIDE_SPACING,posRect[3]/2+100,posRect[2]-2*SIDE_SPACING,BUTTON_HEIGTH) + self.ok = button(mouse,okRect,(0.0,1.0,0.0),"okay dokay",font) + + self.bgColor = (0.0,0.0,0.0,1.0) + self.currentBgColor = self.bgColor + + self.exitClicked = False + self.playClicked = False + self.okClicked = False + + self.menuText = "B-)" + self.messageText = ";-P" + + def getMode(self): + return self.mode + + def setMode(self,mode): + self.mode = mode + + def setBgColor(self,color): + self.bgColor = color + + def setMessage(self,msg): + self.messageText = msg + + def buttonUpdate(self): + + if self.exit.isClicked() == True: + self.exitClicked = True + + + if self.play.isClicked() == True: + self.playClicked = True + + if self.ok.isClicked() == True: + self.okClicked = True + + self.play.update() + self.exit.update() + self.ok.update() + + def isExitClicked(self): + if self.exitClicked: + self.exitClicked = False + return True + + return False + + def isPlayClicked(self): + if self.playClicked: + self.playClicked = False + return True + + return False + + def isOkClicked(self): + if self.okClicked: + self.okClicked = False + return True + + return False + + def update(self): + if self.mode == HUD_MODE_MAINMENU: + self.play.update() + self.exit.update() + elif self.mode == HUD_MODE_GAMEOVER: + self.ok.update() + + self.buttonUpdate() + + #hintergrundfarbe blenden: + r = (self.bgColor[0] - self.currentBgColor[0])*COLOR_FADE_FACTOR + g = (self.bgColor[1] - self.currentBgColor[1])*COLOR_FADE_FACTOR + b = (self.bgColor[2] - self.currentBgColor[2])*COLOR_FADE_FACTOR + a = (self.bgColor[3] - self.currentBgColor[3])*COLOR_FADE_FACTOR + + self.currentBgColor = (self.currentBgColor[0]+ r, + self.currentBgColor[1]+ g, + self.currentBgColor[2]+ b, + self.currentBgColor[3]+ a) + + + + def draw(self): + tools.drawRect(self.posRect,0,self.currentBgColor) + if self.mode == HUD_MODE_MAINMENU: + self.play.draw() + self.exit.draw() + + + if self.mode == HUD_MODE_GAMEOVER: + #message + tools.writePerFTGL("GAME OVER!",self.font, + (self.posRect[0]+SIDE_SPACING+10,self.posRect[3]/2-30), + (1.0,0.0,0.0,1.0)) + tools.writePerFTGL(self.messageText,self.font, + (self.posRect[0]+SIDE_SPACING+10,self.posRect[3]/2+14), + (1.0,1.0,1.0,1.0)) + self.ok.draw() + + if self.mode == HUD_MODE_PLAY: + tools.writePerFTGL(self.messageText,self.font, + (self.posRect[0]+SIDE_SPACING+10,self.posRect[3]/2+14), + (1.0,1.0,1.0,1.0)) + diff --git a/simongame/kachel.py b/simongame/kachel.py new file mode 100644 index 0000000..03d702e --- /dev/null +++ b/simongame/kachel.py @@ -0,0 +1,74 @@ +import pygame +from pygame.locals import * +import tools +import gitter + +KACHEL_ALPHA_ACTIVE = 1.0 +KACHEL_ALPHA_INACTIVE = 0.175 +KACHEL_ALPHA_SELECT = 0.5 +KACHEL_ALPHA_STEPFACTOR = 0.1 + + +class kachel(object): + def __init__(self,x,y,w,h): + self.x = x + self.y = y + self.w = w + self.h = h + + #alphaverwaltung: + self.currentAlpha = KACHEL_ALPHA_INACTIVE + self.alpha = KACHEL_ALPHA_INACTIVE + + self.r = 0.5-0.5/float(gitter.GITTER_W)*float(x) + self.g = 0.5*float(y)/float(gitter.GITTER_H) + self.b = float(x)/float(gitter.GITTER_W) + + #verwaltungstechnisches: + self.isActive = False + self.isSelect = False + + #nen paar getters und setters: + + def getPos(self): + return (self.x,self.y,self.w,self.h) + + def isActive(self): + return self.isActive + + def isSelect(self): + return self.isSelect + + def activate(self): + self.isActive = True + self.alpha = KACHEL_ALPHA_ACTIVE + + def deactivate(self): + self.isActive = False + self.alpha = KACHEL_ALPHA_INACTIVE + + def toggle(self): + self.isActive = not self.isActive + if self.isActive: + self.alpha = KACHEL_ALPHA_ACTIVE + else: + self.alpha = KACHEL_ALPHA_INACTIVE + + def select(self): + if not self.isActive: + self.isSelect = True + self.alpha = KACHEL_ALPHA_SELECT + + def deselect(self): + if not self.isActive: + self.isSelect = False + self.alpha = KACHEL_ALPHA_INACTIVE + + #update: + def update(self): + self.currentAlpha += float(self.alpha - self.currentAlpha)*KACHEL_ALPHA_STEPFACTOR + + def draw(self): + tools.drawRect((self.x*self.w+2,self.y*self.h+2,self.w-2,self.h-2),0,(self.r,self.g,self.b,self.currentAlpha)) + + diff --git a/simongame/klick.wav b/simongame/klick.wav new file mode 100644 index 0000000000000000000000000000000000000000..43295d5162c619403caa13c1cbccb626f3e94d7e GIT binary patch literal 14380 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 literal 0 HcmV?d00001 diff --git a/simongame/klick__.wav b/simongame/klick__.wav new file mode 100644 index 0000000000000000000000000000000000000000..8a1aec302ea9e62ca6547e66a6b667ad513bd1fb GIT binary patch literal 8864 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 literal 0 HcmV?d00001 diff --git a/simongame/maus.py b/simongame/maus.py new file mode 100644 index 0000000..c4e5474 --- /dev/null +++ b/simongame/maus.py @@ -0,0 +1,61 @@ +import pygame +from OpenGL.GL import * +from OpenGL.GLU import * +from pygame.locals import * +import eventmanager + +BUTTON_PRESSED = 0 +BUTTON_HOLD = 1 +BUTTON_RELEASED = 2 +BUTTON_INACTIVE = 3 + +class maus(object): + def __init__(self): + self.pressed = [False,False,False] + self.hold = [False,False,False] + self.release = [False, False, False] + self.inactive = [True,True,True] + + self.pos = (0,0) + + def update(self): + pressed = pygame.mouse.get_pressed() + self.pos = pygame.mouse.get_pos() + for i in range(3): + + if self.pressed[i]: + self.pressed[i] = False + self.hold[i] = True + + if self.release[i]: + self.release[i] = False + self.inactive[i] = True + + if pressed[i]: + if self.inactive[i]: + self.inactive[i] = False + self.pressed[i] = True + else: + if self.hold[i]: + self.hold[i] = False + self.release[i] = True + + + + + def getState(self,button): + if self.pressed[button]: + + return BUTTON_PRESSED + elif self.release[button]: + + return BUTTON_RELEASED + + elif self.hold[button]: + return BUTTON_HOLD + + return BUTTON_INACTIVE + + def getPos(self): + return self.pos + \ No newline at end of file diff --git a/simongame/pyftgl/COPYING b/simongame/pyftgl/COPYING new file mode 100644 index 0000000..5b6e7c6 --- /dev/null +++ b/simongame/pyftgl/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/simongame/pyftgl/MANIFEST.in b/simongame/pyftgl/MANIFEST.in new file mode 100644 index 0000000..8cd1c24 --- /dev/null +++ b/simongame/pyftgl/MANIFEST.in @@ -0,0 +1,3 @@ +include COPYING README MANIFEST.in +include *.py +include *.cpp diff --git a/simongame/pyftgl/README b/simongame/pyftgl/README new file mode 100644 index 0000000..7b18840 --- /dev/null +++ b/simongame/pyftgl/README @@ -0,0 +1,139 @@ +README for PyFTGL + + +Introduction +============ + +FTGL is a free, open source library to enable developers to use +arbitrary fonts in their OpenGL applications. Unlike other OpenGL font +libraries FTGL uses standard font file formats and the Freetype font +library to open the fonts. + +PyFTGL in turn wraps the functionality of FTGL into a Python module so +that it can be used in conjunction with PyOpenGL. + + +How to build +============ + +Prerequisites +------------- + +Make sure you have the necessary libraries installed before attempting +to build PyFTGL. + + * FTGL + http://homepages.paradise.net.nz/henryj/code/#FTGL + + * FreeType + http://www.freetype.org/ + + * boost::python + http://www.boost.org/ + + +Build +----- + +$ python setup.py build + + +Install +------- + +$ python setup.py install + + +How to use +========== + +Overview +-------- + +To use PyFTGL, start by import it: + +>>> import FTGL + +PyFTGL supports six different rendering modes: + + * Bitmap + * Anti-aliased pixmap + * Anti-aliased texture maps + * Outlines + * Polygon meshes + * Extruded polygon meshes + +The first two modes draw directly to the screen raster, the texture +map mode draw textured quads, while the last three draw actual +geometry. + +The indivdual modes are encapsulated in their respective class: + + * BitmapFont + * PixmapFont + * TextureFont + * OutlineFont + * PolygonFont + * ExtrdFont + +However, the protocol for all modes are the same: + +>>> font = FTGL.PolygonFont("example.ttf") +>>> font.FaceSize(24) +True +>>> font.line_height +37.51171875 +>>> font.Render("foo") + +Obviously, you need to set up the OpenGL environment to make it +useful. Please see the example.py script for a demonstration of +PyFTGL. + + +Classes +------- + +class BitmapFont() +class PixmapFont() +class TextureFont() +class OutlineFont() +class PolygonFont() +class ExtrdFont() + + Methods defined here: + + Advance(string) + Get the advance width for a string. + + Attach(font_file_path) + Attach auxilliary file to font e.g font metrics. + Note: not all font formats implement this function. + + BBox(string) + Get the bounding box for a string. Returns tuple. + + Depth(depth) + Set the extrusion distance for the font. Only implemented + by ExtrdFont. + + FaceSize(size[, res]) + Set the char size for the current face. + + Render(string) + Render a string of characters. + + UseDisplayList(useList) + Enable or disable the use of Display Lists inside FTGL. + + __init__(font_file_path) + + Properties defined here: + + ascender + The global ascender height for the face. + + descender + The global descender height for the face. + + line_height + The line spacing for the font. diff --git a/simongame/pyftgl/example.py b/simongame/pyftgl/example.py new file mode 100644 index 0000000..e90ea93 --- /dev/null +++ b/simongame/pyftgl/example.py @@ -0,0 +1,140 @@ +#!/usr/bin/python + +import sys + +from OpenGL.GL import * +from OpenGL.GLU import * +from OpenGL.GLUT import * + +import FTGL + +fonts = [] +width = 600 +height = 600 + +def do_ortho(): + w, h = width, height + glViewport(0, 0, w, h) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + size = max(w, h) / 2.0 + aspect = float(w) / float(h) + if w <= h: + aspect = float(h) / float(w) + glOrtho(-size, size, -size*aspect, size*aspect, -100000.0, 100000.0) + else: + glOrtho(-size*aspect, size*aspect, -size, size, -100000.0, 100000.0) + glScaled(aspect, aspect, 1.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + +def draw_scene(): + string = [] + chars = [] + + chars[:] = [] + for i in range(1, 32): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(32, 64): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(64, 96): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(96, 128): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(128, 160): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(160, 192): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(192, 224): + chars.append(chr(i)) + string.append("".join(chars)) + + chars[:] = [] + for i in range(224, 256): + chars.append(chr(i)) + string.append("".join(chars)) + + glColor3f(1.0, 1.0, 1.0) + + for i, font in enumerate(fonts): + x = -250.0 + yild = 20.0 + for j in range(0, 4): + y = 275.0 - i * 120.0 - j * yild + if i >= 3: + glRasterPos(x, y) + font.Render(string[j]) + elif i == 2: + glEnable(GL_TEXTURE_2D) + glEnable(GL_BLEND) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + glPushMatrix() + glTranslatef(x, y, 0.0) + font.Render(string[j]) + glPopMatrix() + glDisable(GL_TEXTURE_2D) + glDisable(GL_BLEND) + else: + glPushMatrix() + glTranslatef(x, y, 0.0) + font.Render(string[j]) + glPopMatrix() + + +def on_display(): + glClear(GL_COLOR_BUFFER_BIT) + do_ortho() + draw_scene() + glutSwapBuffers() + +def on_reshape(w, h): + width, height = w, h + +def on_key(key, x, y): + if key == '\x1b': + sys.exit(1) + +if __name__ == '__main__': + glutInitWindowSize(width, height) + glutInit(sys.argv) + glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE) + glutCreateWindow("PyFTGL Demo") + glClearColor(0.0, 0.0, 0.0, 0.0) + + try: + fonts = [ + FTGL.OutlineFont(sys.argv[1]), + FTGL.PolygonFont(sys.argv[1]), + FTGL.TextureFont(sys.argv[1]), + FTGL.BitmapFont(sys.argv[1]), + FTGL.PixmapFont(sys.argv[1]), + ] + for font in fonts: + font.FaceSize(24, 72) + except: + print "usage:", sys.argv[0], "font_filename.ttf" + sys.exit(0) + + glutDisplayFunc(on_display) + glutReshapeFunc(on_reshape) + glutKeyboardUpFunc(on_key) + + glutMainLoop() diff --git a/simongame/pyftgl/ftgl.cpp b/simongame/pyftgl/ftgl.cpp new file mode 100644 index 0000000..2089cd0 --- /dev/null +++ b/simongame/pyftgl/ftgl.cpp @@ -0,0 +1,157 @@ +// PyFTGL +// Copyright (c) 2007-2011, Anders Dahnielson, Luke Williams +// +// Contact: pyftgl@shmookey.net +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +// 02111-1307 USA + + +// FTGL +#include + +// Boost +#include + +// Namespaces +using namespace boost::python; + + +//////////////////////////////////////////////////////////////////////////////////// +// Font Wrapper + +template +class FontWrapper +{ +public: + FontWrapper(const char* fontFilePath) : + m_font(new base(fontFilePath)) + { + if (m_font->Error() != 0) + throw std::invalid_argument("Invalid argument"); + } + + bool Attach( const char* fontFilePath) + { return m_font->Attach(fontFilePath); } + + bool CharMap(FT_Encoding encoding) + { return m_font->CharMap(encoding); } + + bool FaceSize(const unsigned int size, const unsigned int res) + { return m_font->FaceSize(size, res); } + + bool FaceSize1(const unsigned int size) + { return m_font->FaceSize(size); } + + void Depth(float depth) + { m_font->Depth(depth); } + + void UseDisplayList(bool useList) + { m_font->UseDisplayList(useList); } + + float Ascender() const + { return m_font->Ascender(); } + + float Descender() const + { return m_font->Descender(); } + + float LineHeight() const + { return m_font->LineHeight(); } + + tuple BBox(const char* string) + { + float llx, lly, llz, urx, ury, urz; + m_font->BBox(string, llx, lly, llz, urx, ury, urz); + return make_tuple(llx, lly, llz, urx, ury, urz); + } + + float Advance(const char* string) + { return m_font->Advance(string); } + + float AdvanceKerned(const char* string, const double xSpacing) + { + FTPoint *kern = new FTPoint (xSpacing, 0.0, 0.0); + return m_font->Advance(string, -1, *kern); + } + + void Render(const char* string) + { m_font->Render(string); } + + void RenderKerned(const char* string, const double xSpacing) + { + FTPoint *kern = new FTPoint (xSpacing, 0.0, 0.0); + m_font->Render(string, -1, *(new FTPoint ()), *kern); + } + +private: + base* m_font; +}; + +typedef FontWrapper OutlineFontWrapper; +typedef FontWrapper PolygonFontWrapper; +typedef FontWrapper ExtrdFontWrapper; +typedef FontWrapper BitmapFontWrapper; +typedef FontWrapper TextureFontWrapper; +typedef FontWrapper PixmapFontWrapper; + +template +void export_font(const char* name) +{ + class_(name, init()) + .add_property("ascender", &T::Ascender, "The global ascender height for the face.") + .add_property("descender", &T::Descender, "The global descender height for the face.") + .add_property("line_height", &T::LineHeight, "The line spacing for the font.") + .def("FaceSize", &T::FaceSize, "Set the char size for the current face.") + .def("FaceSize", &T::FaceSize1) + .def("Attach", &T::Attach, "Attach auxilliary file to font e.g font metrics.") + .def("CharMap", &T::CharMap, "Set the character map for the face.") + .def("Depth", &T::Depth, "Set the extrusion distance for the font.") + .def("UseDisplayList", &T::UseDisplayList, "Enable or disable the use of Display Lists inside FTGL.") + .def("BBox", &T::BBox, "Get the bounding box for a string.") + .def("Advance", &T::Advance, " Get the advance width for a string.") + .def("Advance", &T::AdvanceKerned) + .def("Render", &T::Render, "Render a string of characters.") + .def("Render", &T::RenderKerned) + ; +} + +//////////////////////////////////////////////////////////////////////////////////// +// FTGL Module + +BOOST_PYTHON_MODULE(FTGL) +{ + enum_("encoding") + .value("none", FT_ENCODING_NONE) + .value("unicode", FT_ENCODING_UNICODE) + .value("symbol", FT_ENCODING_MS_SYMBOL) + .value("latin_1", FT_ENCODING_ADOBE_LATIN_1) + .value("latin_2", FT_ENCODING_OLD_LATIN_2) + .value("sjis", FT_ENCODING_SJIS) + .value("gb2312", FT_ENCODING_GB2312) + .value("big5", FT_ENCODING_BIG5) + .value("wansung", FT_ENCODING_WANSUNG) + .value("johab", FT_ENCODING_JOHAB) + .value("adobe_standard", FT_ENCODING_ADOBE_STANDARD) + .value("adobe_expert", FT_ENCODING_ADOBE_EXPERT) + .value("adobe_custom", FT_ENCODING_ADOBE_CUSTOM ) + .value("apple_roman", FT_ENCODING_APPLE_ROMAN) + ; + export_font("OutlineFont"); + export_font("PolygonFont"); + export_font("ExtrdFont"); + export_font("BitmapFont"); + export_font("TextureFont"); + export_font("PixmapFont"); +} diff --git a/simongame/pyftgl/setup.py b/simongame/pyftgl/setup.py new file mode 100644 index 0000000..f38a127 --- /dev/null +++ b/simongame/pyftgl/setup.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension + +__version__ = "0.5b" +__author__ = "Anders Dahnielson" +__doc__ = """Python FTGL binding + +FTGL is a free, open source library to enable developers to use +arbitrary fonts in their OpenGL applications. Unlike other OpenGL font +libraries FTGL uses standard font file formats and the Freetype font +library to open the fonts. PyFTGL in turn wraps the functionality of +FTGL into a Python module so that it can be used in conjunction with +PyOpenGL.""" + +doclines = __doc__.split("\n") + +########################################################################## +## FTGL module + +module_ftgl_src = [ + 'ftgl.cpp', + ] + +module_ftgl_include_dirs = [ + '/usr/include', + '/usr/include/freetype2', + ] + +module_ftgl_libs = [ + 'GLU', + 'GL', + 'freetype', + 'z', + 'ftgl', + 'boost_python', + ] + +module_ftgl = Extension( + 'FTGL', + module_ftgl_src, + include_dirs=module_ftgl_include_dirs, + libraries=module_ftgl_libs + ) + +########################################################################## +## setup + +setup( + name = 'PyFTGL', + version = __version__, + author = __author__, + author_email = 'anders@dahnielson.com', + maintainer = __author__, + maintainer_email = 'anders@dahnielson.com', + url = 'http://code.google.com/p/pyftgl/', + description = doclines[0], + long_description = "\n".join(doclines[2:]), + download_url = 'http://code.google.com/p/pyftgl/downloads/list', + classifiers = [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: GNU General Public License (GPL)', + 'Operating System :: POSIX', + 'Programming Language :: C++', + 'Programming Language :: Python', + 'Topic :: Software Development :: Libraries :: Python Modules', + ], + license = "GPLv2", + platforms = "POSIX", + ext_modules = [module_ftgl], + ) diff --git a/simongame/simongame.py b/simongame/simongame.py new file mode 100644 index 0000000..e1eab95 --- /dev/null +++ b/simongame/simongame.py @@ -0,0 +1,133 @@ +#!/usr/bin/python3 +import pygame +import numpy +from OpenGL.GL import * +from OpenGL.GLU import * +from pygame.locals import * +import tools +import gitter +import maus +import hud +import eventmanager + +STARTLEVEL = 1 + +if __name__ == "__main__": + + font = tools.loadFont("GenBasR.ttf",(24,72)) + + pygame.init() + pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=128) + + #sounds laden: + + klick = pygame.mixer.Sound("klick.wav") + gong = pygame.mixer.Sound("gong.wav") + error = pygame.mixer.Sound("error.wav") + + dinfo = pygame.display.Info() + video_flags = OPENGL | HWSURFACE | DOUBLEBUF | FULLSCREEN + + #ein paar variablen zu den seitenverhaeltnissen: + SCREEN_RATIO = float(dinfo.current_w)/float(dinfo.current_h) #16:9 + GITTER_RATIO = float(gitter.GITTER_W)/float(gitter.GITTER_H) + + FIELD_W_RATIO = (GITTER_RATIO*float(dinfo.current_h))/float(dinfo.current_w) + + pygame.display.set_mode((dinfo.current_w,dinfo.current_h),video_flags) + tools.resize((dinfo.current_w,dinfo.current_h)) + tools.GlInit() + tools.clearScreen() + + eManager = eventmanager.eventmanager() + + mausimaus = maus.maus() + + git = gitter.gitter((dinfo.current_w*FIELD_W_RATIO,dinfo.current_h),eManager,mausimaus,(klick,gong,error)) + + sidebar = hud.hud((dinfo.current_w*FIELD_W_RATIO+2,2,dinfo.current_w-dinfo.current_w*FIELD_W_RATIO-4,dinfo.current_h-4),mausimaus,font) + + sidebar.setBgColor((0.0,0.0,0.5,0.1)) + + clock = pygame.time.Clock() + + curLevel = STARTLEVEL + + + + #Hauptschleife: + while not sidebar.isExitClicked(): + tools.clearScreen() + + ticktime = clock.tick(40) + + if sidebar.getMode() == hud.HUD_MODE_MAINMENU: + + #kleiner Effekt fuer die sidebar ;) + + x=mausimaus.getPos()[0] + y=mausimaus.getPos()[1] + + if x > dinfo.current_w*FIELD_W_RATIO: + x = dinfo.current_w*FIELD_W_RATIO + r = 0.5-0.5/float(dinfo.current_w*FIELD_W_RATIO)*float(x) + g = 0.5*float(y)/float(dinfo.current_h) + b = float(x)/float(dinfo.current_w*FIELD_W_RATIO) + + sidebar.setBgColor((r,g,b,0.2)) + + if sidebar.isPlayClicked(): + curLevel = STARTLEVEL + sidebar.setMode(hud.HUD_MODE_PLAY) + git.setLevel(curLevel) + git.changeMode(gitter.MODE_SHOW) + + + + sidebar.setBgColor((0.0,0.0,0.3,0.2)) + + sidebar.setMessage("Level " + str(curLevel)) + + elif git.getMode() == gitter.MODE_SHOW: + if git.readyToPlay(): + sidebar.setBgColor((0.3,0.0,0.1,0.2)) + git.changeMode(gitter.MODE_PLAY) + elif git.getMode() == gitter.MODE_PLAY: + if git.readyToShow(): + if git.madeMistake(): + sidebar.setMode(hud.HUD_MODE_GAMEOVER) + sidebar.setBgColor((1.0,0.0,0.0,0.3)) + sidebar.setMessage(str(curLevel-1) + " Level geschafft!") + git.changeMode(gitter.MODE_RANDOM) + else: + curLevel += 1 + if curLevel == gitter.GITTER_W*gitter.GITTER_H: + sidebar.setMode(hud.HUD_MODE_GAMEOVER) + sidebar.setMessage("alle Level geschafft!") + sidebar.setBgColor((0.0,1.0,0.0,0.3)) + git.changeMode(gitter.MODE_RANDOM) + else: + git.setLevel(curLevel) + git.changeMode(gitter.MODE_SHOW) + sidebar.setBgColor((0.0,0.3,0.0,0.2)) + sidebar.setMessage("Level " + str(curLevel)) + if sidebar.getMode() == hud.HUD_MODE_GAMEOVER: + if sidebar.isOkClicked(): + sidebar.setMode(hud.HUD_MODE_MAINMENU) + + + + git.update() + eventlist = eManager.getByType(KEYDOWN) + for event in eventlist: + if event.key == K_ESCAPE: + exit() + eManager.update() + mausimaus.update() + sidebar.update() + + tools.drawRect((0,0,dinfo.current_w,dinfo.current_h),0,(0,0,0,1)) + git.draw() + sidebar.draw() + + pygame.display.flip() diff --git a/simongame/startgame.sh b/simongame/startgame.sh new file mode 100644 index 0000000..e0bcd8b --- /dev/null +++ b/simongame/startgame.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd ./ +python ./simongame.py diff --git a/simongame/tools.py b/simongame/tools.py new file mode 100644 index 0000000..ac7eba9 --- /dev/null +++ b/simongame/tools.py @@ -0,0 +1,93 @@ +import pygame +from OpenGL.GL import * +from OpenGL.GLU import * +from pygame.locals import * +import FTGL + +#Opengl-Tools:------------------------------------------------------------------ + +def clearScreen(): + glClearColor(0.0,0.0,0.0,0.0) + +def GlInit(): + glEnable(GL_BLEND) + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) + +def resize((width, height)): + if height == 0: + height = 1 + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(0.0, width, height, 0.0, -6.0, 0.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + +def drawRect(rect, depth,color): + glBegin(GL_QUADS) + glColor4f(color[0],color[1],color[2],color[3]) + + glVertex3f(rect[0],rect[1],depth) + glVertex3f(rect[0]+rect[2],rect[1],depth) + glVertex3f(rect[0]+rect[2],rect[1]+rect[3],depth) + glVertex3f(rect[0],rect[1]+rect[3],depth) + + glEnd() + +#FTGL-Tools:-------------------------------------------------------------------- +def loadFont(filename,facesize): + font = FTGL.TextureFont(filename) + font.FaceSize(facesize[0],facesize[1]) + return font + +def writePerFTGL(string,font,pos,color): + #glOrtho(0.0, glOrthoSize[0], 0.0, glOrthoSize[1], -6.0, 0.0) + + glPushMatrix() + glColor4f(color[0],color[1],color[2],color[3]) + #so ein bissl die Matrix drehen, damit der Text nicht aufm Kopf steht :D + glTranslatef(pos[0], pos[1], 0.0) + glRotate(180,0.0,0.0,1.0) + glRotate(180,0.0,1.0,0.0) + #und rendern: + glRasterPos(0, 0) + font.Render(string) + #und die Matrix wieder loeschen + glPopMatrix() + +#Kollisionsabfragen:------------------------------------------------------------ + +def is2DPointCollision(point, rect): + if point[0] <= rect[0] or point[0] >= rect[0]+rect[2]: + return False + elif point[1] <= rect[1] or point[1] >= rect[1] + rect[3]: + return False + return True + + +if __name__ == "__main__": + video_flags = OPENGL | HWSURFACE | DOUBLEBUF | FULLSCREEN + pygame.display.set_mode((800,600),video_flags) + resize((800,600)) + clearScreen() + + clock = pygame.time.Clock() + + #Hauptschleife: + while True: + + + ticktime = clock.tick(20) + #print ticktime + event = pygame.event.poll() + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + break + + + drawRect((0,0,200,200),0,(1,1,1,1)) + + pygame.display.flip() + + + +