From 5f6c39999d959379dc92cbca43f7dedfbf9d6568 Mon Sep 17 00:00:00 2001 From: Stephanie Gredell Date: Tue, 16 Jul 2024 02:25:06 -0700 Subject: [PATCH] working bullets --- Ban.lua | 45 +++++++++++++++++ Button.lua | 84 ++++++++++++++++++++++++++++++++ Chat.lua | 50 +++++++++++++++++++ Game.lua | 39 +++++++++++++++ Menu.lua | 48 ++++++++++++++++++ Player.lua | 108 +++++++++++++++++++++++++++++++++++++++++ Text.lua | 73 ++++++++++++++++++++++++++++ assets/ban.png | Bin 0 -> 2229 bytes assets/chat.png | Bin 0 -> 5250 bytes assets/environment.png | Bin 0 -> 40826 bytes assets/prime.png | Bin 0 -> 36263 bytes conf.lua | 9 ++++ globals.lua | 3 ++ main.lua | 87 +++++++++++++++++++++++++++++++++ 14 files changed, 546 insertions(+) create mode 100644 Ban.lua create mode 100644 Button.lua create mode 100644 Chat.lua create mode 100644 Game.lua create mode 100644 Menu.lua create mode 100644 Player.lua create mode 100644 Text.lua create mode 100644 assets/ban.png create mode 100644 assets/chat.png create mode 100644 assets/environment.png create mode 100644 assets/prime.png create mode 100644 conf.lua create mode 100644 globals.lua create mode 100644 main.lua diff --git a/Ban.lua b/Ban.lua new file mode 100644 index 0000000..b7e9525 --- /dev/null +++ b/Ban.lua @@ -0,0 +1,45 @@ +local love = require "love" + +function Ban(x, y, angle) + local BAN_SPEED = 300 -- ban hammer speed in pixel/second + local EXPLODE_DURATION = 0.2 + + return { + sprite = love.graphics.newImage("assets/ban.png"), + x = x, + y = y, + x_vel = BAN_SPEED * math.sin(angle) / love.timer.getFPS(), + y_vel = -BAN_SPEED * math.cos(angle) / love.timer.getFPS(), + distance = 0, -- distance traveled + exploding = 0, -- 0 not exploding, 1 exploding, 2 done exploding + explode_time = 0, + + + draw = function (self, faded) + if self.exploding < 1 then + love.graphics.draw(self.sprite, self.x, self.y, angle, 0.4, 0.4, self.sprite:getWidth() / 2, self.sprite:getHeight() / 2) + end + end, + + move = function (self) + self.x = self.x + self.x_vel + self.y = self.y + self.y_vel + + if self.explode_time > 0 then + self.exploding = 1 + end + -- increase the distance traveled + self.distance = self.distance + math.sqrt((self.x_vel ^ 2) + (self.y_vel ^ 2)) + end, + + explode = function(self) + self.explode_time = math.ceil(EXPLODE_DURATION * love.timer.getFPS() / 100) + + if self.explode_time > EXPLODE_DURATION then + self.exploding = 2 + end + end + } +end + +return Ban \ No newline at end of file diff --git a/Button.lua b/Button.lua new file mode 100644 index 0000000..ff35d27 --- /dev/null +++ b/Button.lua @@ -0,0 +1,84 @@ +local love = require "love" + +local Text = require "Text" + +function Button(func, text_color, button_color, width, height, text, text_align, font_size, button_x, button_y, text_x, text_y) + local btn_text = {} + func = func or function() print("This button has no function attached") end + + if text_y then + btn_text.y = text_y + button_y + else + btn_text.y = button_y + end + + if text_x then + btn_text.x = text_x + button_x + else + btn_text.x = button_x + end + return { + text_color = text_color or { r = 1, g = 1, b = 1 }, -- white + button_color = button_color or { r = 0, g = 0, b = 0 }, -- black + width = width or 100, + height = height or 100, + text = text or "No text added", + text_x = text_x or button_x or 0, + text_y = text_y or button_y or 0, + button_x = button_x or 0, + button_y = button_y or 0, + text_component = Text( + text, + btn_text.x, + btn_text.y, + font_size, + false, + false, + width, + text_align, + 1 + ), + + setButtonColor = function (self, red, green, blue) + self.button_color = { r = red, g = green, b = blue} + end, + + setTextColor = function (self, red, green, blue) + self.text_color = { r = red, g = green, b = blue} + end, + + checkHover = function (self, mouse_x, mouse_y, cursor_radius) + if (mouse_x + cursor_radius >= self.button_x) and (mouse_x - cursor_radius <= self.button_x + self.width) then + if (mouse_y + cursor_radius >= self.button_y) and (mouse_y - cursor_radius <= self.button_y + self.height) then + return true + end + end + + return false + end, + + click = function (self) + func() + end, + + draw = function (self) + love.graphics.setColor(self.button_color["r"], self.button_color["g"], self.button_color["b"]) + love.graphics.rectangle("fill", self.button_x, self.button_y, self.width, self.height) + + self.text_component:setColor(self.text_color["r"], self.text_color["g"], self.text_color["b"]) + self.text_component:draw() + + love.graphics.setColor(1, 1, 1) + end, + + getPos = function (self) + return self.button_x, self.button_y + end, + + getTextPos = function (self) + return self.text_x, self.text_y + end + } +end + +return Button \ No newline at end of file diff --git a/Chat.lua b/Chat.lua new file mode 100644 index 0000000..f503e73 --- /dev/null +++ b/Chat.lua @@ -0,0 +1,50 @@ +require "globals" +local love = require "love" +local lg = love.graphics + + +function Chat(x, y, level) + local CHAT_SPEED = math.random(50) + (level * 2) + local vel = -1 + + if math.random() < 0.5 then + vel = 1 + end + + return { + sprite = lg.newImage("assets/chat.png"), + x = x, + y = y, + x_vel = math.random() * CHAT_SPEED * vel, + y_vel = math.random() * CHAT_SPEED * vel, + radius = 30, + + draw = function(self) + lg.draw(self.sprite, self.x, self.y, 0, 1, 1, self.sprite:getWidth() / 2, self.sprite:getHeight() / 2) + lg.circle("line", self.x, self.y, self.radius) + end, + + move = function(self, dt) + self.x = self.x + self.x_vel * dt + self.y = self.y + self.y_vel * dt + + if self.x + self.radius < 0 then + self.x = love.graphics.getWidth() + self.radius + elseif self.x - self.radius > love.graphics.getWidth() then + self.x = -self.radius + end + + if self.y + self.radius < 0 then + self.y = love.graphics.getHeight() + self.radius + elseif self.y - self.radius > love.graphics.getHeight() then + self.y = -self.radius + end + end, + + destroy = function(self, chat_table, index) + table.remove(chat_table, index) + end + } +end + +return Chat diff --git a/Game.lua b/Game.lua new file mode 100644 index 0000000..ef357d9 --- /dev/null +++ b/Game.lua @@ -0,0 +1,39 @@ +local love = require "love" + +local Chat = require "chat" +function Game() + return { + state = { + menu = false, + paused = false, + running = true, + ended = false, + }, + + level = 5, + + changeGameState = function(self, state) + self.state.menu = state == "menu" + self.state.paused = state == "paused" + self.state.running = state == "running" + self.state.ended = state == "ended" + end, + + startNewGame = function (self, player) + self:changeGameState("running") + + chats = {} + + local chat_x = math.floor(math.random(love.graphics.getWidth() )) + local chat_y = math.floor(math.random(love.graphics.getHeight())) + + table.insert(chats, 1, Chat(chat_x, chat_y, self.level)) + table.insert(chats, 2, Chat(chat_x, chat_y, self.level)) + table.insert(chats, 3, Chat(chat_x, chat_y, self.level)) + table.insert(chats, 4, Chat(chat_x, chat_y, self.level)) + + end + } +end + +return Game \ No newline at end of file diff --git a/Menu.lua b/Menu.lua new file mode 100644 index 0000000..809e701 --- /dev/null +++ b/Menu.lua @@ -0,0 +1,48 @@ +local love = require "love" + +local Button = require "Button" + +function Menu(game, player) + local funcs = { + newGame = function () + game:startNewGame(player) + end, + quitGame = function () + love.event.quit() + end, + } + + local buttons = { + Button(funcs.newGame, nil, nil, love.graphics.getWidth() / 3, 50, "New Game", "center", "h3", love.graphics.getWidth() / 3, love.graphics.getHeight() * 0.25), + Button(nil, nil, nil, love.graphics.getWidth() / 3, 50, "Settings", "center", "h3", love.graphics.getWidth() / 3, love.graphics.getHeight() * 0.4), + Button(funcs.quitGame, nil, nil, love.graphics.getWidth() / 3, 50, "Quit", "center", "h3", love.graphics.getWidth() / 3, love.graphics.getHeight() * 0.55), + } + + return { + focused = "", + run = function (self, clicked) + local mouse_x, mouse_y = love.mouse.getPosition() + for name, button in pairs(buttons) do + if button:checkHover(mouse_x, mouse_y, 10) then + if clicked then + button:click() + end + + self.focused = name + + button:setTextColor(0.8, 0.2, 0.2) + else + button:setTextColor(1, 1, 1) + end + end + end, + + draw = function (self) + for _, button in pairs(buttons) do + button:draw() + end + end + } +end + +return Menu \ No newline at end of file diff --git a/Player.lua b/Player.lua new file mode 100644 index 0000000..e591078 --- /dev/null +++ b/Player.lua @@ -0,0 +1,108 @@ +require "globals" +local love = require "love" + + +function Player(debugging) + local lg = love.graphics + local MAX_BAN = 60 + + return { + sprite = lg.newImage('assets/prime.png'), + x = 300, + y = 300, + angle = 0, + facing = 0, -- get the angle the player is facing so we know how to shoot the ban hammers + speed = 80, + rotation_speed = 1, + thrusting = false, + bans = {}, + thrust = { + x = 0, + y = 0, + speed = 1 + }, + draw = function(self) + lg.draw(player.sprite, player.x, player.y, player.angle, 0.5, 0.5, player.sprite:getWidth() / 2, player.sprite:getHeight() / 2) + + -- draw ban hammers + for _, ban in pairs(self.bans) do + ban:draw() + end + end, + shootBan = function (self) + if (#self.bans <= MAX_BAN) then + table.insert(self.bans, Ban( + self.x, + self.y, + player.facing + )) + end + end, + destroyBan = function (self, index) + print(self.ban, index) + table.remove(self.bans, index) + end, + + movePlayer = function (self, dt) + local FPS = love.timer.getFPS() + local friction = 0.7 + + if love.keyboard.isDown('left') then + self.angle = self.angle - self.rotation_speed * dt + self.facing = self.angle + print(self.facing) + end + if love.keyboard.isDown('right') then + self.angle = self.angle + self.rotation_speed * dt + self.facing = self.angle + end + + if self.thrusting then + self.thrust.x = self.thrust.x + self.thrust.speed * math.sin(self.angle) / FPS + self.thrust.y = self.thrust.y - self.thrust.speed * math.cos(self.angle) / FPS + else + -- applies friction to stop the player + if self.thrust.x ~= 0 or self.thrust.y ~= 0 then + self.thrust.x = self.thrust.x - friction * self.thrust.x / FPS + self.thrust.y = self.thrust.y - friction * self.thrust.y / FPS + end + end + + self.x = self.x + self.thrust.x + self.y = self.y + self.thrust.y + + -- make sure the player can't go off screen on x axis + if self.x + (self.sprite:getWidth() / 2) < 0 then + self.x = love.graphics.getWidth() + (self.sprite:getWidth() / 2) + elseif self.x - (self.sprite:getWidth() / 2) > love.graphics.getWidth() then + self.x = -(self.sprite:getWidth() / 2) + end + + -- make sure the player can't go off screen on y axis + if self.y + (self.sprite:getHeight() / 2) < 0 then + self.y = love.graphics.getHeight() + (player.sprite:getHeight() / 2) + elseif self.y - (self.sprite:getHeight() / 2) > love.graphics.getHeight() then + self.y = -(self.sprite:getHeight() / 2) + end + + -- this will move the ban + for index, ban in pairs(self.bans) do + ban:move() + + BAN_DISTANCE = 0.6 + + if (ban.distance > BAN_DISTANCE * love.graphics.getWidth()) and ban.exploding == 0 then + ban:explode(self, index) + end -- endif + + if ban.exploding == 0 then -- 0 -> ban not exploding + ban:move() + elseif ban.exploding == 2 then -- 2 -> ban is done exploding + self.destroyBan(self, index) + end + end -- endfor + end --end movePlayer + } -- end player +end + +return Player \ No newline at end of file diff --git a/Text.lua b/Text.lua new file mode 100644 index 0000000..c3b04f9 --- /dev/null +++ b/Text.lua @@ -0,0 +1,73 @@ +local love = require "love" + + function Text(text, x, y, font_size, fade_in, fade_out, wrap_width, align, opacity) + font_size = font_size or "p" + fade_in = fade_in or false + fade_out = fade_out or false + wrap_width = wrap_width or love.graphics.getWidth() + align = align or "left" + opacity = opacity or 1 + + local TEXT_FADE_DUR = 5 + + local fonts = { + h1 = love.graphics.newFont(60), + h2 = love.graphics.newFont(50), + h3 = love.graphics.newFont(40), + h4 = love.graphics.newFont(30), + h5 = love.graphics.newFont(20), + h6 = love.graphics.newFont(10), + p = love.graphics.newFont(16), + } + + if fade_in then + opacity = 0.1 -- if should fade in, then start at low opacity + end + + return { + text = text, + x = x, + y = y, + opacity = opacity, + + colors = { + r = 1, + g = 1, + b = 1 + }, + + setColor = function (self, red, green, blue) + self.colors.r = red + self.colors.g = green + self.colors.b = blue + end, + + draw = function (self, tbl_text, index) + if self.opacity > 0 then + -- when pausing, the below will still fade out, it will not be paused + if fade_in then + -- only render text if visible, otherwise skip it + if self.opacity < 1 then + self.opacity = self.opacity + (1 / TEXT_FADE_DUR / love.timer.getFPS()) + else + fade_in = false + end + elseif fade_out then + self.opacity = self.opacity - (1 / TEXT_FADE_DUR / love.timer.getFPS()) + end + + love.graphics.setColor(self.colors.r, self.colors.g, self.colors.b, self.opacity) + love.graphics.setFont(fonts[font_size]) + love.graphics.printf(self.text, self.x, self.y, wrap_width, align) + love.graphics.setFont(fonts["p"]) + else + table.remove(tbl_text, index) -- remove yourself once you dissapear + return false + end + + return true + end + } +end + +return Text \ No newline at end of file diff --git a/assets/ban.png b/assets/ban.png new file mode 100644 index 0000000000000000000000000000000000000000..bcaba27b7a77789c2a388292f1046e1be50ad4db GIT binary patch literal 2229 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

)2tT7X*tlGCF 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 IM6N<$f+6q+i2wiq literal 0 HcmV?d00001 diff --git a/assets/environment.png b/assets/environment.png new file mode 100644 index 0000000000000000000000000000000000000000..e68a96d2a3bbf7fbdd59bddc687c283713c1de0c GIT binary patch literal 40826 zcmdSAhg*|P@Gcw?lp-}!6zLEILKW$qAW{NS6qITJsiF5SMG~qML$6X*z|ec|s8j_K zq$5ZbklxON@A;kcoj>98x=<66eRgMeX70J?Ui1?!RdUk1q#zK8TY(hfBaogY}%KXhVEp7 zV8;1V;k7SnpqyFx=pC`1fwI;xg>kB378*h_i>5}3x$;yIf>isa{b%}N71k7x5c{f(hHuoxXQIm(y%jWSb+tZI@gUmO zhpn#3dv*IHDAb0)?pNRVc-waJ#E-}_`m65-Unc~E9)Tvr?y+ctvE){-JYClXDRty> znkZ0^9L_pKxNpXZxLLfiLH6052?`Y7)t692!kVB}2>~q3f&cl7daJJ@59DQM%r=~y zR27dWcX?5^1nO;EA(Iz{(vW?Z5{K(oU;6yIHsxI?ly+0sHz_dLaCarDb^7vhWJU1v zTGQVxnV%9KE!!`#4gPTl*>bVF%*#ZrwST;N7VY}7LRYkzCd000(!Y@ioXxs1Ia1q1wXm@2APx6-6a0j^Am|dX;p&Y)Lf3NM*EQW9FJ%)ezqy~Xxp^Od zsp=Ex^O|pvLI$pI>s}oBnDB=qg)T77!KTmfrEqocF=LTHGP1!{IN)j{VUdEaDy z`FruN(`9W?Rpg5h-P#oeA)dr1+r-Crc*!WGurOrAA`v?ovlKN)6$NeLCeH~`k}~?= z$!@sW;=o(fPo%-lJ0$`w2-h`qJi~6vZXri=?y8a zNC=hYKXp^a54xs)k`9P?fOW*jQZ)-u^xs~brOCi4tPLcN!b)5X5V7~ z6&8LVEqVLB#VgN*9xZ0KAJU$?3CWB4)U19K&MzZX5K-6jE@W5s#vmx?u7oFb zMu83i4?oOa9kaILJ$?L*;9Yd)edg4($Uw$PSo*_6b*Rr-2j`}@A6^+TKS#(fF#A4r zN)0FB7T?2^*WQyF1smVXp>o`LZ)`e4k#kV`1@Ih95t<6Fz9)Lks)LrT%LPJ7Hnw-P zi@R%LYP1(*C>$&5k1UNg?wz}L0S>$xm3^G@ppXOx&Iw&tq1G$s{Y3oo1Q>o3|DI(}MC{ta zuX7XADQ5}K?z~9Idq~$mcL*VQ3=)5@Sh7D64TtK;s$rhhTsmpI225mV#*mU3AHwa} z{YwZbNR5@IqtLpQ#JIfM(P_D{B<$MnMRu-zI!G4J$`b!={om)4*H%T>pzUA>g79RgwgVC0}9)WJ-hHo8BUjt5$3oAv0 z#{FSoFK=;bY7?Jz?ini&kK-R;-5z~Pok<_!cFUbLU-`jr99BlL+IJVgE1q|+ch}q0}6NH`*G8lsN0JcU6|IA@>(zrYDY%azogMn=YV~B%!bK-WH}YD0-m=; zD5JQ<=4?j=c9o208WfXWx$ws#5w9KWI}L`Z>cVLDB^;%v7t>DU)O=)-f_#rW7rkE`|S`6RXDOA&Gy|hZQ29(#3H2*mYAd<%5#0f z4ORJ5$3QOGW`RR9ERwCv8ZEFzS;Ws0m&Cx<8>R+zG0~f-hVq*-0HX^<%1qT7dqt-HR*iV{;JQ+!68eJ{(?fo}YusoAv`i zK~&DG?M1{E?spkBnt@xANbEDYYMrwW^9Fvetxl*WppZlV{x^P1@zBZSBEo@m-*D$Q ze$swm=h>b8BQD_a3VI5_mObGvbfwaH_#Sm6D^_ei@n`DI-oE(k-UmDvhFE>tlp{(4 zP9}9vGvF6rTCsDvFf8$x&BC1mfzNt{A7W@Vy7uq~iyDtJ;V1~KGk}SaK{ib1(v%Pw zJ&n*2|85M1iR94Jn@LniH$*6ZgXZxKEdzlgrs?(Ioq}0aD3EBsU$#Eh_FEkHNef(l zzPV$J=Ymw8-c`Ay$Fw$!^ytE^gz{8>?#oby;Wi{gfK0JJM!^ygC>@LDF^W~+ z+K}Y3>gQogNBOhVi+l)^F|ZQ6Y0^CHAS66xlQxsrtI{%|YrTy%(eRlLH`c}w({FQ4qwfx~@dyJhk)?67FG$f%%^j`6@XkwncO$ zO8aNvZzVLTK`?yBqzgcG_P%a}PLXR{`Rv zq9o%s8D{+So!*vLT;}+%nW#+Hj$bqy-!i=)pK7zPynwEE(adgY?C!AbSV$NZEfIBe zw4;|?Zn)PtuhUvNkQvTyzN`uSOX~?U5&M^{+<|i=<>F{dPP9K{l8x-qQ-^rGLC{J|wK%__Km8n! zh_p*t^3cAMx~Q#@(7f@=bO=ejv|HrnQAUUwqswF1j}Q7&)w&bb?4lQHr0rc^M(_db zhtSho@OoJ&;s2dPqPh^ae%6&+S#s9=4GL1DX7&MX8cD)v0HsD%Rq-w`JQs>D59PTY z-zG-q5U|A|N);|hC;41e!n1Fcjz6~}E_$oUc-eSDv!z99TzE9hX7r8uf?s9;T{CZk zm^=2~lKnu;HELIuut+YrZ_+q#O5ai7Y*(}z{)b2+eS~9^Yww2_$>@6)A`gN13Id6? z>meCIIBrhEO!ck)`V1terF6tVi!5byVn1Y_&|B8Ukvmh`rM#83hKR%i%>^-bf+CGP zC00+QL?M0gB_)0w=%-cdep z`D-zv8O48oL}<|-%c zFr;N7`R!1@&(K3Q6qqmQGdUrc3a;lQq89~0E+$HO16cB$pFYlv!Bi-2h-tNml-Z73 z$65Jx$#!@C^!_th&S5Jp0EhgQE$LcFbrY~-!uGkqHGgNIeR)tUCiQZE51E{16Kgh7 zLOVzwDTa>tr;|m~5Rux{%cMzL2OE&Ao84fd_L7e9ULCW)mcC$k@3B z%;(Rwkbab#4-#n}vZ9d={$Mzg|5e;U4uOu^slWcqlO~Gmo`VscI#`2HHofr12B)hZ zb^aT^wCEwG;Ydge;A@&QawS`}x1ILjVbSo}z1`Gd#EVwym_!omBwkq}-+Yk|?pehcNi{zZBS zI_U@kl!;4s?MqxY2B&C`g|IK z=?m+*=R)*_yxYr#YSa{rbjFjF;P+omaHbXepMO1!er;xzhRa%{f&1%zbR_fK@hmX@ zbg-emqGrW-Q*H>K&?KhbT@*LIDFxfXX1N~`nyyfRTkZd3Y_xZJgw31+7E(xe_uM`y zo*U53O%KaY@vnaOS`o7EnfSJ47d^Vofq|AzuU%dOh!{4m!6;+eO@Kdq%OdPU77iTfidXcY8&%`?~Dh~h*FC<&-_%tY%04qnJ_{ux=RT}*L? zf!QxNBo~esD<@s7BuV+5K18_r7uUTs`m(mR|J7A*jgGO+!pB3FcQAJQXrY7prP3A$ z1@^Gj_-4ftFk2e}?-X~2F+$EC53|6vT~z@+)gWSidd4A612YmtH_hvN<($=qN}^5T zS?L(vT7H!+X_L!ee-S$CJGR!7j(a}TDbxwXwt#|oNgtx#XU>Ob+%es)Rei;`># zeq$7fHLR#|jcPecjU#vHjPIt2XH$*f#pJsZ9lDf?HN$I3AT37%Z}qB{r3AIoOX$|t z9@fO%oVQXEUA1NJNzss*_f0EihLnlVv;?fM=L`JYC-yPQUXzPLYv|HsSWCnoPa_7C zH3znNX=mHkA=?RW{kZp=2Ymwjtma<=cs+;YkCmRJR6FN8`^LyP!w!?_LFa*GDmda~ z@Zrl!G*<;TI+7PN>Fk3k&Muk(Yl}9SKjW^!vcD;BF2T8F8t}SD5lwiw$G9chRn@GZpJ1IMjDj_kbRH_*K9lUehy&JI(mdO@>{FF0@k)=zd5oQpuCu&k33ZX*kHhlqW{st6SLP6)2njB1PlhiShoCi})Xwx@3e^lzhU{*OL<6u^*SHG>wl)8A>+nKbi>0 zg`k5UF#Goy6a%O^rH;KYhEu%N4oSQ%FP$}Fva_QN4}~5feujsblgicPgsE4s$*eV0a9{a zIoq~Muz(?&eTLMGJd(q&_o%gn<|DZXMks+4JI45QD=UZzNeqE~?K&xLzj0@Ry`8%- zbStLS-XCqD1Op!f9&AWPt6{0B^eWPY<*tIycu38_P+;;T+mq&776a)H3plguY*TYe zJ>^4gs8d8w7+iG6C-(mXf{a7dc(E`#MawW7_Sjk`?mn)x{M(ww*GyHWX`YG-&(mn2 zI+`?4IO>~iLS=p!w*ZqoG&viFYHEyf9R}V%wusW^1UJsHlNz}%Q<17l+N|%cNd-9d z9zF532fIqS&vVh}$-xxLj&XhYq<8t|d>aa=q|s-(YOl?m7sVac!ejzpdh76!sVi>^%}T6| z9w@+5bLtF|4JKj^i`3pu?;Ob54#rB}{}i0)I(f)UX5xUZD6Avypg4Yx zQHP>^E&IZ>ui5_?RO z=JpK3ZMd<=ua+xLDVQeMd{hwu5r(6<Gk&hLL_9-?dIfRI(e+kC}-KJ>mO#cQP}s5T=R}zMm7JIy5;?vrUsK9YX|g7{j{mg zvEiwG6GkB2qU+6|y}f&C2~W?L2S8j4P75{{$yeVpan8NZ(GuXM;lP}rfWwg|G?qliPJ1HufM=+<@f4dvjha-qbBpzpbd5W$l-zw zu`=s0-$2(lcL6&A=Ct|sMMY3B1{vSQKAKg~;=Q_O@^;{2_=1n=WjQn>i8XC<;Q?SN z5ZAT#{LmD-3oHW7f7-UNE1Nd;;_cLvZklTbqVam_I7mQ=N@5C0Asp&rbxqysIs>^s zERh*cHbpf8i-=3s{FJN~$=XvL#f7|q{OKf#;YxUX>t5$=ZNw(ayBsVmbT(8t56%C$ z+DTSSsd@A2;Vg8q{G0Ds_&DQ`c#TLV6}h0ZdkURwE?ye(V77|3@8Q!=;Mv=wu+Sm;_|XaR zSXAFa0cM|8O``7*b@tP|;&teKK3&F$1G7k%u}9O4W#Td9Mt2ePg`NS~Y)2PBtoW~P z8xJ8-h3Ygv4x3Q@WXL{;f>bcpI7GCmilS3RzkSgfUHg&Vd&M8c>2=dE0wylaAcbUX zcGL$cmsgiZB&dn%0Aw5+HF<16HmFSOb*HMtPQ4Ry|Hm&LR*o#|S-h|otSP4mHcn59 zF%966@JpD)y;J5C&W+?2p33f7p%{)bQnXM$Ehn>3RsG;MSTqCV%$BQ;hUhhb_vO|X zQsct(Fb}RzmX*^b_Zdex(7usc=zhX0ElA zWO}JW@o%obSjtpU{hqUaPY-T9**;IBZvw1kqcyCTH;;^A!@f_ut)`hGqg^*G=Z9=F z63)MD5DK((H%hAOnki=+qV~TEO*RAo-5pzQPE$#)n)$@nx^t%slGayDpk8dFv?Q;l z|FiDmmZl(yL*oZc@NmCRS5Bk zlu|y822iF7gYP=B8orE6`4TxE50h0?CR`^YCmfvLAxo@U+%$EDk6{>pGW(dEsMg{u zW|bPmuVpF?H>nfHkULur_{S`pe{K-wo{KgU{-N9_d_!`^^&wS40hjggv%Crwn$)+! zSeR`{4{1Y+m9^)qjw6%Q7mr5@o?aCm>L8%%=}c{^X2THs>rzDZLq~FK5FMh_f0uX2 zLdn#O{wV0RwcS=c0)1wKB`$y8znBCc24}!~#R9)$wUV52!8F7*h26!h5RE8_AKbAK z-dbt65*1G2d5*07)mELpiuZ*ONF@H*U9zqq;CXO@c1yxJU(BkF9+X;?KMi%Up!v6p zVDxXJf~D2)JRc@3-z_XzjVa7GxzFzuxe5c*I{t{iiopDPvT*;Nta3x$u?4*z?!lNN ze-{mR6H}8SY+FugT$yo^%WtU(frOOLXl^@}Bh~={C!!eg=D_M0qfF<8j$Zo*VqYbI z8N3CE1g2gCD0;u{F+Z?q7#LhgVz;&_$;;DC146i@fr6iGJlqzjRj zSOB!85^VT1G;Zzw_$Ywpg#2CTug(d^@*<5}#pY*{7f!#faD|bfE`TSb-3U>OP~*WY zQT!PI&cVy-Gm~uS1F%^ib*mu$~atRHLkqSYiFDipaftD__lnxx-B>C>Xou+FV7h6>eDzLx_NKUNxO z!s|b*_q@Lw)$VyY80F%~$cq#Jtx#;o27-skPwE?Jw^b-k&Q2J;PHZ#kJCgonHM*=d z?Hpf^=VaFUumCWKDkiOht!J9!M`*V0$+-6YiZ^>dQCOfg`d@jl7QzSd_#6!t-H;EM zZZNmAA4P!SS78WfLf#BxVOo$;Rsjn?e>Q^V+FddFj*QrBCc?KYm4GM7D97N&$Q5c zoXb@&ThT}bHh2s6*R^m6e*+@RzW}G2)z^*US_^sXZJor6AqI+$4H5pgL@^8_VGsKE zsWsdu{s24+jtJ|-Yhc2JG;7sSU17s4G^AB*I`?F%iH=}D^e2pY#KRsa4Jz8ndQO+1DDj}{~}L$_7+)x6``l#0CzX%D-<;R{UZ znkqm$ETGZ2ZW@DO_)js^Rj8@C%WgWX&A#T;J4XtkQXA+skfFYszzC84{+-rp^An2h zX21jfI|SL6f4Se#8JCIY5YG0%^P(Alhz%mV&sz8pj zi^8+Z(Vtf~HSjB(I(($=UBfj1M8l=^=GFjsA;LuRKEW}re?p(j^QOQ(hR~WJzHa6}OW^!SQ`rq?SoI0%o%}mAthxZnquR^L(n*5kak$e!V z+untMpdgqDDC|z75|+PvELN)2I=d9`?e9R~l3OMu6KO zOgHR!K8G(>fl?oNr=@(}f4(7h&x{oVGSiK|Q&!Z!@nw##20|E{gxXv3PD5M3?ijqV z0@n_izGp1@)|qJ8^+Z;?i-A}%x;bSh9iXJI?fYDHaF%W`Lzr0gp(PL7_->XJp*O7Z z5Pp@8yP_^cGl`NS4^_ms6TdTp5G2Ii%eJn-a-~G9;-WZub~@TgHqW0dbaabrpfYm9 z!0v89pE6C-Eq--}qr9r(59c+JS3_Xadu0Hu0|)Hkbrua&`Ja2fvWB4M{_zagSX1<4 zwO=Tj+0kkc%HiEK`vQKyfS#bZL>j{R!)V?T2*)CNlPB{mz|{CRewY0RfP_F9_ZI)tFMdFuxzz~3 zQ-U&^3YT99dF5DS$0|*+l1Zis+2r_?i-I`yA`GsUVHXuk1xF1$mvE^JgF0G~P=EQR zNqF<;y=-Z7hnwsqsCHEuHQ_*uEf(M@=C|7{%UoLy2Fee)^&7_9MJib5)UBtg(JlPT zpC51EKk4}%)KKdRdx=0deEuG<2mOunD2o}l4YzWQ;m@w>tkuKi>`SzGe z0;+)T7Tps=LmI*h(p;-+sWL+z6GXyjHBgTmRp45Z8P{iX5}U1OC8Ra_fEHZ)3P_vg z2?6$+g_Z8Cd^KSVpcw$wDF~I^D>Gbh#cwtkvOA+81P|R})kN7A&|Dz_e$2yGDuN^Y z`u0ARlxqr1aZ*m)dXF*-VTr>zi6xa`#R{C)xWIf_`3*r-qI5vMG-zKccP%_%#)+c2 zBo+mAE^S$R!4G!yD;Ma~aYlPrg7Y*3o z<>YMigV-ZQ?(TC)ueSGjjC8<|(AJ*T^pLn#rnmqvTS72yq+3SkimMzy-@E#FLy(2y zt$)ob5M?68HEdX%_Q1>dr@=PEV=z_0;lc~JY<%A{f^F(2%ng5kh^Q8hI&trj;CSWC zrb(shn;Muixt6ehy-=Jv8qPA>i0$mjQ~H^!R*M}dL`^l=a6uaY=~aKK3Ov6D-FQjV zwV0?YVYyMrD!RG^P|b?Zm6%QHwHCSKMtBKoL#W$0vnC1J@KlGCNUJHuVMAaXlN$iU z6j=jW-KwHHiYDGTx(q=4W5{EE?Q!^5y)NsGwfmAbeDND|L zi0r2dLcgj0KuJRR0HpZzdPmwYzbKsSspYq8^>eZO&+Eu`?(;mf;iIm>gK{`jYMB0Q z>97ZDN;CtN#^3y1QLImt!tHAXV3ELjMHc#Zto@Y_nm43RwOe5@nRWw*7)EIyK$MkP zbdIrLO8~WT!(`CSLDtrgysRsaQUEIm-C<+JO!o7nDL}7P&pimlQ{X-j#1jU4*Da{w z6)k|29}EFF2X+PMe7vscwVY@Ey-r4oMnFS?0{B#PN;i0IHnfG+1`2#I&AS45T_KPa zbAAF#Zk9Y*|D+ANo)Zs99pJip-!Ibau`F2n1d7gSXsNraBD#vUe38 z|Iy0#P+TvU2C}XzOrS_kRug~R&f)|mDLb@H{_oHhLl|(S-a`aOs4YW*xc$A<+{W&J z4#nlNDg%eHlsj&|zhR#Ays6=v=|*2~bf!#?uZI8WM)d`yj2h@Z`1>C0tgi3;3>X5W zdv&BfJ3Hqk3orcLxtL|eEk*#ig&LBTg6 z@89hmYX>1JlW|V?Y9@r5FW?btQCAetNuJuKQ@xND&I-`L!4Gwo7b*)L0fD8h?SV$H zFp0w9+iZ_rFWWDBi;b73m*LichyIH%uB;f*&<)$&)d3G2ARXYpapMyq=++JY?gwPS zj_>~q6hKV{sv;sx9C&RwdQWPEQ*`hq=shv8C=lTB|2FEixvnIYMw$vOAVTqEO#p#3 z6=Z;4JdpyzGpH-!mEyolkZ%f18N~?#nfZ5tn?3_W4&SEIie(`Zp<|r9+3(BQ!@HQby2l-vfJm_8@q^Q@J5a-5`a;R; zJv4uo1;w|Y$zGoQIAp0oD&1z>{0 zLbU0jG$MC?UGEukHsO*DQt+Bbaf<8;Q)vT606ifc3F!wUP`*3Es(O>75&%DhLVc)~ zr}Noqa2g6N4f0!1)yujryvTiUl6%H)#~VFT!>#L-@w2Hl3gv4d^hmV*$hK7mM8Fc? zC3eA@bv0(r?L4AHjqPvXk?=KG1VF(U)qua-1VI7O*(0d48yR=*ztQ~5&!YY!%UxSi zY8*E4d#q@ikexBl<3ZD9g~LDloYbhD!-d?|O6Hq8z-EF#NE-f>X$g<4*erZ%2d1aq zWle@!r}`iw&oSzAytJ0emm_p@;QgR1)97eLi%#wqc=6SEfj&aMVUe67=R1``g96w8 z8w$Q>=|J?LG7+Yq>{s*I9e;~cvSCvN{!B@0@^(Ly=JRk)c^*z0y2p zXCNEjPgn${PtvuqwaZ)8owN9zKQT3vBg8)(;^|toX}o;YEVC-Wqmq#E@3eyy1oD0w z${#ak&lsDur~y1WRwpr}!DzqRF=o|4mk zB~Np@{9H@BF>!J9(wV93!0H+m-m{_C%yFjl#qHA{hvzF!T-Y70NmI;#$T_s6S7ftC_^HKN^a?AVF^pf9-998>1&TJKaVqa+n z;rx?#_wU1=LC&tuu)Yne4mRLK`e%5N#7}i{jyHzg|I%p*aLFGxF3Xb4PI}B1$#n|4 zZaAI~%v-UuUkMwYUgd~H&npIpsnX^wI*Zy18u9ObP(n-N|tnzJv6k@yImjdr1 z%ysE`D)3a~WX!O$QppYuF013W{IUcn?tOyxd=u7`Dxi}LO5-RoSE@R%semojet@Xg z$aCf9scE%${kWlXw$He~D<=Hjww*KlssVWY1t0w`>=s$>4Jg3 zEPBL#74`lGTD+>T=1m!Z6@l=u@TC+ZiCMFfCq;t7U>#DT#*S5aLcYP zqYW<>AgKbVz>!}b=-C8S+@9iP` zd!Mm-w`?5@ZnT`A3)7k2Wz&a_uzfSjknYhwJE9Kg{r z`1SLTH<)7iSt7U2mRk}|sTQtOcR~#?ZGymk?Z6;~`PpIUk8zbK@}xsPmI^Lass*bA z-ZvySCAA)voSP{hPft90!;w?4E5J7DBuJh2UQHCMv#@Vp*#yO`cA0voB!!l9_h$=U zh)`2A1zafU-=fLebXgv#;tZ*Zbiw5L+uXXXGqKHombvHcos~o)qlqJ8hHMg0UhRO| ziETcZDDPf8Fw&4N8Xo!GaLty=&xQmHCP!RJbQFZ$zI}?Im zTE|S3Z|(w0SIDbIcqG7UnWZ>9T>TSUyZw+^lx{&yQbEX;o)~yWJ7Msz#|>Pn&>6Te zKOHT-OOm#c93j^HU3lU>GW?UJ!28XY8iKR8fm$#V-<)<=n?c@XSGE-G7sQWm^wJjQ0c#8mz4l{`oV}m~+r~?K!B&@F>@g1zLa$|(h^Kk$fL0QzWby4qZ^zGR~WL{ZLXYR7z6bnJul~3lJ!pI;M>$Uc|Z-&N#vQEgIc?i(4 zG^eeFL-?HhopI00i3>>^Oa?nzb0FtqNvMEZ2t_Te=rf{!+dT{iVj`Z?@BeUUlU4{k zw4mwtv@$MRy2&pm>ve56lV@u05t>oHMyjFXX!`Z*+3z_8Yt72~z58+e*=xs@&dwop z$=f4eHY{fc370xmIn~}RKO(-_q1X9_ILVHN@gK%D%InRel9B0&a~hr>KR7jC5BirV z6}%p2J(Hkq2#J&a5Dd&PI-_ z2tL**=0+Qyfsd{0sZnhuK-2|_$v6#3RuMS_&g$EZNi%b}c3c5rf3VQ9~X{SgBB{~1{>a$g9|<=*}lzn4qL*cD=s z&oEPK-N6^`usJRhn5IEqTOMK4iYJ``GrDRF-qt$2< zmLXmM>pY(`h?ou|WXj5%3T$x>p;)1~%ZK_}!4d3z1=7Y9bwbogqKHgR;rQ>KEGfDj zX>@(Y>a%YWLuh)mZ((cF2&;_q(AvYc^jyY8G(B-8{3e$dQ(mq{dg5?G$7=o~E2jiV zNDa=0ebsp_2U|gvz%dvL`ga_j2&j-ikb=)NlWYvYQTOLfI$rvC{FI#kigZFxpo@(g z-JKnl8wSApJ;Ps58xfin38U%x;aaZGk-}iw#}@yGy7J8z#@)PP0-SAA68O4+N8|U^z@N zVperUorxi{-A2E?DJ=YIV(>Vi1iw<1d>v>s@?C^&W>}mME*90-1PnCvWNsgkaCJ}K zFBsArpZL4CGSspc8vo)`L8RK1OyuH#(odX$FFNB#N0ive!%eXY}-Q;wy(!HV4@{Bd4cx4T6XGd z;3xz@vptqASNLfe^^zU(Fr&Y5(te{+Na#Bk3%Jr;e|@oyBsxt`=5hEo!Nde;IxfGmB>~hwO2f}GL5RDHa*7cFaw|DE zVwQ=uO3KXc|GBCrK)VTDov_Tuz236U^mc159s8Gn3Jy=_k}(+gja^Z|Lh1rwf6v1$ zANSlbY3AyVpEH-b8J+#AH_mp)Xwkdl$aed9>?tKU_Aw2(>gj>d^DB^68&c!?HZ=AF znfE*!d+*MZ2R|pDgccUYmRRi4^uMF=2c$@AXW^xVZCC&j{5_!#_e-hknZ56w_5Xm6 zyqoLeGs-wY=oHs12B{M3!rJ-{!_Bw5Ew-c*Wfx%=+T=Z#hhx<~0SFn%%7N95vG4Z0 ze1e|i2kDUg{jVnSJ#jOpKRr;Jr!;Lx^HW71C-k2kp8XyT>zznk8ln$MMftu~44`kS z0MJMCTQB|w6-{#N=LsK~IvAMVwO*g#2DhR6!0mav#@vpN|>p9o=`iC;_j&* z*{>XINLeH|6_7Sdn5GYK-IXX|tr?8*<$`Z6E| z2nW8IH@@z88MSD6+8`nD#r90BN zr@B~xXzU{BWvlC3vgLXD?$kX5 z;`M7M4CA|LMLlH|8lzN(9T?ZIGjTxv;G&Aj9A2MzHEj4V(FLbFJa^R{HX`2PK4_>d zUf6D6AgKS0)MM!GRyQ&~3uX`sT!VOdGPYmc{i+EGj3g?JEqFK6YB#KXC%!<%p-AUC zrpL0LdI_bG$DtCH5s(|ql*jfpBm)uu<%m_D7eZ{Kf?`VRShmI? zH(b)JlK75T!xAW+D|AOWAf1pw-d`xN*eNk*X=f2YhL-j5)MN(pJm$)TYoh#~0RN)3 zXcV=jf}JyMQ3VRI0KuD#4NyVeTgnO(TQQ4Siqiw_Z?z+A`7JH=>%B)i_JW7|U&(voGI81R zyt!GNh#j@1?Bz$S1YR>h4GHK21ist$&{jQFF{x?BxbA-;=E!b6H}A-#~KVOpl_>3v!=3`UB}b zR|$QV>eR#S_}Q>}6X+16Wu_7z6ta!pjN0$7=*<0{gS88&Y8$HfSH`y8Pk@#Ri8F?g zOu#bqTKV7JFNztif!+DJ(DV1r^SM*H`uwC)x%|3+_PA5U{iddJ=_q990kPMaXeynM zl_pL6k7U&9#6?{)ZmfDvKh)7Nqh4Z(i(U82+8=UU18~!>=bBBdB_KOQ*Ox}$=PtVclv}^%c4i5^HQNeJFo5r#aSImJu~dM%tu`)u;c#u@fd9GnE{3d+vXr`V;>0>Z&4zN&o-QAyq_91_&`O4 z9{S_WD!mcQuWur-Br%&$ydg_{0IFF5QfaV2;+IZXx7gGKe~-J2>s zER|aI5l=U*XIg*j^D`|vh=;>~6?y{?a-00*cTuo$n6eH42|h#$%D3La zknT)LR#W28%y9_p4HSd_l_Vfh)fxsss7UCc-JGJ|KgH@=!xH6vJ(D9HW*eo$E}yRH z#DtunTP#Z50hlE9dl5j|Tl2jL^G?Vo#;GrT)6KiF02t&WC8B+XutX+L*Q#(KZ=Gd6 zH$h3lme1xB659J}YW_w{_pY{L#)==E=OdrlE z6_I8ZDo==ieF~C>2-v#9_dcA#8`EyItA+ z?T2d1#K)2xY@v$`peVlH+dC}}+flTzsM$2v&}#hehXV9fCptoHf(`Gtat@uYPON=db-2U6pQK6x436ek%r^zxMg4Aa9^cr zpEw+hBEDr(WlYh+W6_ZNsGuQ8>GeO0j`H+$61t}shME(|I|nEb7mCB~#plQ5l)^$4 z1-}#J3z+j!S2I^VW%Ya470CrV0DTlN-mKl%?4N&$P(G0BcWG7*?IFcGytW8eRbM?< zP7<_%_U;k>t5tz?7D4iF4J4~#hQZ0?Wt6DyiNySpoYDp{xC`fhrH|8Z`hvN1BoXo* zj~bMEzphCI*Kxb+dBosYPqm6ptXs#v*bW=S<`ZzYRR?z(K?WdNnJe}$i2$G@Kp@2~ zhuSMBI$frXNx!XVMC2CXMM>o7k=w&-%ex*Eb=7EDz9CAToRfPHAz+b&&iZUl9}8TI zRRF4u3R2hyK$o+P%wuG%5AErhk%tq-JVbLRhZ=9^3tWo3>c5s>}z9=x6J9^_Q#|et@-VZL! z>cAunJjHx`*R>0bpM3oA!act(NNLN=#qN=jN_gFPsz8Te}zjx*>OSh<#;i+ zNO7}uqMR(8pAFbvt?lI%&0F)1&s4}oGX+o#CK8>1J^KBO0(PnkJWszLSWs``*VOM! zVh=7N&O1HY124t&h7b07VOu$+1hY_aSZLJHw4$^gp(`>JxHM$*1b6S8yGc`G6=yI8 zj+m3acx7F4idg)ja@WgpiljLRM*;Lnijzy4BgD-7?8W-0IeYy}Hl@ZJ9tB(+OzC^ZsQrt$=*~n`R}f)4x@jHyqETxm6AkI_jW#_gQLC(JNXme zxxDJE*@UF6$lssUIu`S;sK&e&zbdKP*&ACTF9l1d??x(2|C-aqQ(%K`4-9=dnE7Vn z>ov1B3YBBIt%0j$SypXqVrYcHuEeS@Uep(ykNBvT0DYt%EO^8<@dwgVaqp=*H#E1u z9(O37#~n>~?XI1)Q6}qOUCG!so7cADM`{<&BGP z1|Yz8N*mjDK07^dOGZ}LM$z?w@4grJ&4PT`*970xDYAsqqqbry`Nm?%AKF;;5j?5w zW&_l5+1@;`Ur?b8q@-PaiXo(-p>9W^PDw-k6oLQzoqoY2(e12wF^iG&nblQ&b>T)7 zLo2MQl+Dt3*?qa_A_fXh@LpleULW$Z&%Dg>-&;oeuICn3E^VMn=O(xPm*R982)t44 zyMN`Uw=a>0<65|#oy*sORR?^cviqI6i$z6&k1w4Mub=ciU~%kv^qgpXO1Z1ntUzOV zxqIQ4;8s56Ws|`K>f_hqH!c zG~{2L(ymkLY)5G^^@?bpcW|DcW#a#iNmJT-ZZmw{VtT(_c9!I+y_uig>V`j27Gf>ahtP#%CWeKoAlH2 zre;Mf<>h0lo;%GP4!!u{@B8s4jjN%mEWqdX133JU#Wm@VZL>?szr~@4OCMMI^(I7f z2s6(%HYx)DN1;}~X^Y#~9U5LTOr&tLZw9!o6fx=?&iZ+YpA02um;Pk2bK9f$dL%3F zsdc99l6ezk6BBecWA<-_F#Y8#=jYLexnIhg6zxZNX&aGoLSAGZf0sWF@Jv!wb4uS8xf2~Mqlr2<5hzCt+%uPM`30D*VUWx*yZI5IUyT#frvy_6>o&z7lH=~4 zcxIw*;Huf0Zo9h(={hVv!G8aU;WpS)tGO;^o4E#r4m(0PYxr%7b~A%c1QlWo4#(#WHyiZZ`+HI;@rC& znRG4+e&{}i1XniQ5$}qAhLohUav_LkJFWKm>L?1TESFEwt)JyyVP~tTLGt#7IaKzW zNE+-yO>Qv*`pKz;8#-|d?t>hEKzCuaZJ)&IqVFo3+dUUEME;Gti=|~+qaFqYq@RNb zFVpuSOzz~n8SA#3st|PY{%0#|$@`Br6YRUbg(d@l6QM#AQl22dRdcBTLYvewtIhKI z{!@7?EaaJhkJaUjT&Ni-d%DUQ4p039pI4}1jcbyyt|4sOw z#uNe_tv>As6mgdobuJo(&_jH7p&5)o{D!?G%_2-y(w|74u6l+B4FPv*e5V{ezv)nwsvd~3d$ zE3Jjy^dYxi%&IA7d8H!C@Z`aTl1>JlIP7^yY}p6I)&L~!Xvwss-m6Z%c970S2m^w^ zAG)z09~0UmcqWL` zT61WtO_tv2?mefl;o-GRlMs6J*d7yFX{bMICXp&5AveHJt`}#6 zibC7hAj+p`UI6!4ahwG#9++OHuV>j6-J#bgfkx zK)L;aD2saV!8ao?Onk=a9vPtMHq6P}&)c-MC^djJg`%7O&h`BwoYullLeA#agf1)D z0Iax8lY$bP_E5ArDR4LZ2^l|d7?GtJ7dBkAb+~wY@~|}!#Cvap^nINKBXB!+3uYEy zUByO;&APr@@x8(Eh`G4eWZw!Seb;ACiYU5zhw`@-KwCNO zXzGmbK&i*ETJC)>BSZYL3YJY?9_KtOBAKwg$K-X!|2DoBJYIq!+1ZE&VXJZv7ho-H z=F1CYA_xfv5u$|N)F54U8%e`{E2tF2E@nzL{Ym9|_RhDPAMQL5`ywpx<(+HfmPoc2 z+t9+zn;l1#+!Zw<&Z05JrMkbLJBApr9<=Wg-k;D@lk-i8B@=5m1+ToM)tR-=ZfK84 z%7;!XK}CAQ8OW8s0QZ8iWgumk2@b6@y5U3j?LL!gSQEg-*>&;(U~Rr}HKFKo(duht zFyNsPZ@lf#e5EehMc>h7xhu!_+TfemQ0oP0LBmAykwo?QIP#38d9Gi&s8%=i&3q0-aKVzV{dRNUoNz zNAZytCO%+Wd}>0BHorXY2@~p<8~@EoRYH3JzY%^&YS+C=3#L(y8>ZALHjjFs8GrB) zgLmKZr8B#fmQ7dH{!RO<4ZILpq7G=D{H%rKr+n1V_VMykTGRC3Cso&`YmX>P`Vdtu z>}8!ZZx@#M3$Kj#P@gV1jrUIX+rQ!BA1yBKAv9LhLl{Ngm0KKzE|peMQc>%QUSX3{ zRPf-ZQPAE`ZG|>_yE!%$eH_%*Y-fWUmxfA|UgbtRwIF^ym9)^OEc7j$l{3a2G|uBt z%5~g=bv;c6@US}HdENv;wJA)IYB8IN<-%;GP)1qo&H@B&-vMmwL+nfqb)#6B*d47c zmPx^ie)3t?&kZ8MS_ z5jVwy$yM}Uiej%D6p;K*?$=!s`dQ`3yko;8@ScaqFeGjE*GuZXJ?Xmk>W5+qVXS#l zPnauc7ft`XpEF*`7?8+J_NYyMU4;Hlb>R|)Bz8&`%BlX2QAdkQRA8PZ#J3`inJ>>v zQ!Kp)fYSLB1d4dn6)DkblKtJ)J>D7*Tui;g)NGdCuxI2k$xV3e#yBd7G``Datca z|9C#plkO^xSFBu+^|R?LdS8(=zfE6_Hm;Re@Ts(tJA-XG6}9}ULWkD09i?3uS4;ZH zZ^#L>Re7}7$+CJ3Syli^XcF}TsW_H&LmLn)#c$+derArykizcnk&gJ*PwFz(#-dI6 zmu7u$^lwHp>2l>YbO|rRB3gd;@OdYGn610VbdS03ouK#)s$OvXg%_>UOkun;RM++>Q^@W}P8nA3<6YuV@6cYdfaM(5o%;WcaLJ zdH_Ll8~xhCGA^ZY8__E&)Gl!`ZM-j&HJhpX&UE&5aCP;>VLOR5yq*d-xeul`6?pUP z!m?)mi|qR|bzD{Z536`~$mDPLd0wN9R{o6~=Y@?*9p+@FzIfDX``xVPZJW1CQBBI3 zVIz-r))~y#;jEyxwoE5!PhXonoE?4LgaEYRTmgFqD&g|!7Q=UfP0-24{%Ro^M6Uqb z4F6Q%1?;!%>5`KeTj}|Y=&Lh$cB>%q8gJM#X-KLRjJk70P?0w~f6~Q_C>;dHt%PWDpn3%*0@zdrw|bz7nMR&B*sh|J2;?!7{kFGc5ut@$A#?t&5| zJDSS-+S9g^?H|-jDzTfPtMX0u;42+#p=X~RQ(tG7Gi_xzCX`C3!F7)wohEY4um+94 z6zN|4^IP6JoWRI5V>u}$0X`B*n*N%Ig(0{8U zNIn0r=mqJz75;!PLuzDYl zKYyg|b{vDVCFT3gM^cSJWLV!U;tIN1w#maVXlFB#bRXjgI_Ah)wqt~Jo+Eu?atji+ zlXqT#kppIj8w+{hn$kL(sd`8e*Nj^C>e~^;he36vh}t)#_5Z-UfGGkj?lNLBeSs`5 z8NMJ}c@+JgXK{HXJ)_(26&7B{HQWm%@@RTt+9yUm?*SK{`1uZS^o!)@IEIbU^%a|w zE!)SfS17-{$$7???bUNJ--TadquJ}?O@qdW$I!Gbmi1pN9|2FCO0JgE++c2Df~rZ@ zj(lQ+Z4n`L#gbx1?PvdWBN8S4dW-Ypf^SVUW?nG`xg&J!hsY(_3unj>qD?DN+KL^7 z-K)8jvoo6=V_9xW*;$^V^}qn;E4#}Wxn*kA4is4w*aRU^aHrN@UbuTwO9q`nh@wMc@K0FHhM|rWWVvhfbf} zdHw>HHYB|(Es8@@>wnHT&!9IBk%ZTr@FQeRb3#0jMKGX zb`GkGb*dD9Z{w|vU|iU+Y9?)fXZZ-mqc+lepOPZ|x-(%I@MXE&^ZsU?T6Onf$i_c# zwa|k<{l0phUlr{9AZNTDCWI{C9pROs2kMMnJ(<@d5+D;c9J0rT{zZi(a9cB&z3mzi zLq)_~D>*_+l+0l=_PXH~Y_-ZWDB-_@k0?9uerA$0oN;eKHKV@F;#4RiUfG+UtcTkb zF=>a^#S6;VV-Mz0ViuWs%!eInr%@=s53iOmC5zn|v=%)C<}TV?N+L#lgB(!47_Mxz zBBb_-fm^hL@~z9v%rpzdujHMjhg{CLo!lG^E-wpFJkbcVo-5E^aJH~Gc}ENRK@K}> zq&=uRrz-kI@M-awODJ(ci}Tl zv*t~Oa=aoP&!AtE3^t)KS*->n z?Mf{AVIE1pwtIwdwk>Z7C}e)={b(;mx0Ex1?O~h)sZ%wf0bbHtc^RGyAA4*LVt@hf^rNq!QSJ5r*6((qySQNc~ z<^3mTgV1s5SW^>Ab-qeLNHK%b5t0eS+aQMsPv+4jH}!Dwhdr@Am7krTxKMX7!b@dW z#^{Ss))nw-_{#x^vgCzM-8B372$7s(R-Mqey$Hz?VcqAjt3Z!@jFCUb>&oJe@n_pq z4{hB6&L@*>U*wfp`*X0mio!`jxtrSe8hs9-H#eZZVKPU^ohD#!g#F9L9&hqkrI?#g zSm!EIL_D(Jk;xa46Ebzzp)dm??v1n@SwD1~F0WTmZWH!{(cV%U(!Kn8Zng08x8iMD zapw=+zXY$eugfBSO&2Kvg9*Kq z->2xWUW~VOy@t->1Z&PhYm~uv(5X!C{yDk&^nO{>o?yKx^#>9-dhnFos!Tp8uOmCT zH6W+$tivy6#rsoK@YPk6uS{Tt!+U*-yk8OkwhFn8U#Pq_s3IFJc0ZG8k#0cXPW4j5%1H( z6IU*!p_9MBPfA z-7h|cH@-|e1Y4|7+5bk;*o~ zd%eVFWkcd0^xzm7^H5Z5Kcjot5Ae)7=e?t4or+C?%6nZ`;SPV%%u)_yF2@TXrm*81 zpW*N`I=C=;0(wm(HVZ8qnV1t`Ia0ZH)@DpvLy~mSzywjA0*mREd6X_rv7y<^>pRC4 zzaam1GSupq34_j5bj`IZLdD26=^FR;*ZyGxRmkf_Q61vd3-9hF?0c^{+y%D8aQ_5? zXmt}L)kzu`m%zGIh0WR^i87zw@hyAq)0YA7Aw9``Pdw@OE$VGALY+t$SG&Oaxto$- z7rNWdb?xU1GnLcw{q^>t5>M!Z;VS>>mq-Ob)wRvjyRYUCg)(%JvhhZu{0DuhTRQPUE&23u#juMRo)^##Eh?&&)JMa7oEWku==($ zvq@YxsSB0!3d%e@+!;Q*YtiAVq9A9l@I+eLKdl>oKZB{IluqqZKbPd= zUz4if;-&wih`WsEdN$A$Oc6Jl^aE2?0ox??%6j z86W@IE~!6xa+2%?`wu%>3VNp29zVKMk$-LjMD)Ogmkkr}7-+jsvh_TM)5WN@AAomm zD&E(4&>Hyu<#EzD0PR%DlP88GZslzpuK_0o7`GJuDV*>}9ss4nJBPwB2x84XdApy? z0&IBQEVkpXNl5Yll%8M*{YqTs9vOTZa9#J&@%A~OmQNUQ6-yveUWI4BvK_kxUYU;YTnS$r%jIg{CZFu8Oy zRXrkv457vm$57NsgkR&a?@`i|vfo3Gm0PGUD1?8jVP4-W-ESFf@=T_~C4EIlwCnKKSz~kNA zmj&7tG{Ah=5`Nni)!NKx(6#)slXkOa`@9UMTIc~vQTr&dwd#L5-!Act{097bH@OAh zj41^;4G9l+-vQ(YGk1ETv-8R~1V#3X`_&<94riYJrv?98bCy#-q0K{RU~zWXGR}uH zt$~hC7^-xECGIZnxg7HNEvD@}1{_#=zDbwTc%*D&)cH>nlyV>djXZ^m3z6yJlb24SF^qlpsad@xx>uEL*?y4A3)Sjb^d)J zSa#{-O}W|xMvt2UIUF_)JT{(3^BrV82W8qb!`@Uz_BEv>R-G4$tQT5*q}}wv?5Cay zIrZ=?y>Y0l7Kl7COwcbPmhQtQ+B9Q`Uy%uG{t4Ena##NsR{3ceEbY4QWNs*U^+?tE zQ$f#@9^?1i;1J0S-kck~K`QB&O*&=wfUsUo!)kRy>*DwuO(^W^I;HjcKGwWE;PhaO zbl^=Re)`Y-WI-K`|Lq%^gj$3R)7qSdlrs}7Vcnzvkf+5XJ`U!);ui3C$`)XY#MM(Z zmqlK>IChGr-|uFum~`#c(@OUkwCrcB!3<*A(FHC#)N9tWnby`d-GbS13P0Vr4-mN8 zlC}zRlM{Gt9$_QydA1x$d}#~4zXm?Zq{nH`)>7jeqeKJZcEez%B6$vMbh=-YW#-0> zEdjTEuit>__3DLjW&}jeY6o>kN+<3xEya>n_tohb!sr(|-1Vx3FcDT%AS>7=jE*9b zI!O>Mv%jY)6Mtk!x$vG;gcXBJ*XC~b2)sJE!dtYH9jtyT=yKck-p%Xte@`}tUXOZn z*P#y0+4k!nF)TaT51TTnCXqzLYI1ZWHNk`VeT5eZ4jw>4VjNwdEgVKcKwrW?M8A56 zFarJy5M**Y)A=O)&}nzeuJV=i`Co|o_eUu3rRRzT2AbV|ox=DLP^o&Wr$|565k83% zZ0=zc@0j^~xQqMpMl)B4XFh=DstJv3&qPUM2#``f;arV7&aBK6uF+1j7X0*-$v)o2 znOQBZG%72gx3&0=(&GbVAvGp{+V`T-**$3!J*nb<9Vf596Jzaw$;7;hTxzg_c;3cJ zfA&fO{#uKsD>^WKsKGVeMN8DRsvY4X%_R}n&1}?-@FD}vB2`d{{XFHl1p`jcE%a>Y z&%`NM@0tL=)8ozIylf>Ca^9pH~sws*u+G~95d7a$EO0fE? zr5Rs=?7{e2#xiOOW?#wrk>|*<7Yg%D#QSc20DXgdGRcIFq67YIc`iuJvqvTC_n27@ z5C+)j{?JcQ6R6qM3DeRwh_G$#cKx653xpB>?r@5s^XD|XA^XuF&W;kR5=T?%!q}oO zVFrllJv|4-GB+fxqRj8J(A0YleqcKgTs`z#xD>Pb2*VsK{sS{ZOXYQre0CHU_wr(V?taBs(&4jW=7jOcwAyt9DN+J;(jAv%uWi)A)bXJFY413r#xh|TNb!0=L#)i1X* zW{bsZR8g1kvEwoXcXd`d-q(KAaqPC~CY8k6r`o#8cLblfW4H9L zYF=cTw6`K6Jr%Le(pYbm5%ac|K6Be)|EBGAo%%t)K_RWW53>LosdMR(G?we zLn{>UTg3JBvjre90HS2M4>*X$hCUjWKZsnrK|$e>&H9Ir^2sj2)5HO7t~Gc05D03c zrjn&TMYS!wDdh?b7G39cQ42C5M(l$eV36_&ozy02z&4qu`KesHroW-{k7%^9G3Tmg zox}1OdnW_O_OS&^mX{1X(-b45GXg zcm|pmqM=?*i*I}!Zft4qtp%is7mq)79<$dh-OL z9pwF`jtt0QwkG)6ET-K10QX4FDW3|#oxDbG*$<;?15x4^^N9;}jKQdl9khOn3sOsX z#Th6c{62aQb>K_)8Lu#KuGZ&mRU9-$5f!v}fI@>Jr`N>vm*e<2LyL^iOABp_==p8V zZ>yd!K$ccIABBvb7mM=(bjMEa?0s)H#ln!J=Cmh9t@miDh0Z{H8<&lKG&hr8Sdep5 zdKqnu(P2G|r;m5Mm8 z>a24fER-*jZfe~;f74ivMqOIDJ`J3G{HOSi%6Nd1E%!G+@1uCm&aRxq*PBl&_4#{J zOA$If6UJnMB@brnr~2O0zNc-shsZCU3*Gcd21jzlc>(b5mdYe^+w9@v<8S)*xMP8} zlku>Z1nCi{#~(T{J{JcM*?F+La5OBZw4WZR>U_LMp!NvAVsnS$QXJlYbwdOV_q94k z3}gaAy~2=DzoXfd#&ECs^v1kmI*qa@rice7t>8mwnkPJ0ZQ-!AH;IGo)5FWeGjwL6 zOB4OSi%d3zBZ%zdmkt$kBt$>`aRIH_cIo_|EY73WV%a8q>qQ=Z=!dewy)+;SQc$cF zYWoipJ2vh6*qB6jxNzWi4y~! zg21O&$0^@7PvR~Jt5IO!roz@7Qbflsa*if{c8{pbn!E>ey$v@}awQW=&jNmg#|nD; zz5kk-?W;Jq(xHdI89zYF!gD3@ItI1~LMcWmbISWqV+Y95z`bM^gKd@H21 z1GsHO7uY97M%{f%AjrBK;R`T36Fn!Ji~!?+=-l;VyBMF{yB0!)Opq#5(tfnY2V7Y+ zucGkHkJj7D^*fy9`sOLRkYxHFekOFOU5l##y_P+x`*d;2} z@D#yCRcu@k68sr^@PoDcj)un#BvXvDhD-O>?|~`fOb=Obg5q*u5&jIMj`>*6?cHd$ z*5mBsYH{Mj+Uj<1i)Pk!$c4+TaY>pL-EoBN(H z%%bx^J?}b?5AqU9@vYW3(DPfFz_9lSzD2LN3?cb|ZBYUjU@_SEQwFdB1-!RDf4t8| zu;#B@ivd@T02UXF;94pT%`2J=4{QC-8=gVh(VGV~zvS7**=m$DAx0(yjK8%2%wiCc zam`uTtbXhDJp!N%ezg8(i%!RH)B1*JZOw5%mC1HWGW)qBO)b97NM*Px07znAd7yH0 zj|17&Kcrgc1h80O&}YcZ-4uHTot8%x;|Bk=Yei*XCPSv;((TkH1=PkgXwfEmoBT30 z9DewLTzDu(ytp15c3@4ZWt?IQz-*F_Cw(uhdnDFfVp$WvY$)MpiGL_8zB=Fs ztY>L(5^QX0ND9%L;%hh4bMszTxKx0VhqJ50zv2eaLtz-pe-4fGC`R!c+7uLW3+{-?DlfoiMg?k#sA)!|S@)mug^a{wU$F z(6gcdg8Qp)FW&b3s5rQe2v22~vIvLBj6kP2GCx5<_MjNQ~;XB=pfq(ZwF6d|_ zaAHjA=v-`bckAYm1;`cs-d3xDd;lY<*|>N$9}VJLrCDUuarnl>mXbI3HA2E>wvG{m z+5p0Htx$~<{Z=9%$yNXBv7-d^l3#bN;%{#O7gMc_IyA+#0A>uFt}vq)aDo2Q%s8wD z31FPS0W*Fw;N&`iBH8}ELX05J|<2a=-nIHEEcoThZ%>2CXt{()7o{js&T^^`nPAy z;*=wriCy=XiAm7MQWVA!DI%^aJX2AHC!}W$hFJ@vhuKAEvQqXa3B*n82~ghriWM`W zYi!fevHJXEh*T-2N@oBVe*&%p-gSAofa*~Vux4(wQeqtsH!2>zn^I2>l}7nR0%_~~ zgS=%9I6wx7c}5eE0|X;Fa59e(OdPPy0XD&NPUM@`4e_I9;{>7=*MDi%8qi^GH~@&_ zv0l<~nhWQ!y&n)iNBcw#;sG21a5Pb4<6yfEXh9%wu=4q!nK*nd4LVmV535AlI< zPTHF&mL{sJNleBp%6^=vd5**Tx&;4gI%{y&e!L=c8RKkkaauuD`C^!s9)8}-XnBKnUZg+k_bP4jtp#bt}o^QtH5a5OPMArjt@k=Z%NytGY`(yr{ zqL+=aaR`9&8a40P8Y=2T0Cxs4&1sO)8(5OxOz}4jAbZq53YvC=4hCd;rN|9*dI!uU%{%~5sIe@$--5n!gS zJ0@z50KP%cy0-TGC`>qd%|Qx|k%b&X;{j}CL|(iNDeSiNZqtUqN}yD`oNW z&FiB$Z93svsqJ+m^oc<)Ray$KzB=PxNO{(!vXS&SS;sD+=dGXlbN(yp$rnCpul_9< z*t0TvEO%C{fy%mL<^z~t>G_>KI`@qDkCzA~FFPx-=5IQM2e;X*PiXCWW-aBH0l>j= zJChEs>VZ{9#epZIRp$)ijI7?9pms4_EOKG94mhHn!kE~%Mz`Ieu4(fI-!NGVD^IJ3 zev^so-gB4@X4J*0>K>c-5#6{N%>GzP*3o2+W*j zt#%edaMMNW$H|D^PO)bg+3q&vg8sdlQ`Fs_m0$bk+>G|88k)9R{Mm6awf}x%;3sSR z5~==>N*qrZ=?z@TK(A*1jUWmMj*h5T8^MzSN`d2Cuwh+W%ThUbSy@1@!Qq)5ax3Ak z&{s_I)Jjc(v00b0nI8yq=N77vOY@<45^?~u zToNeVR;aTu%6UB~6!P%_k!UegbD>C$TkyZj+%^O2zGBXij^6&<8%KlIH1>63BoOiY zs(x!}aH-8H8QltFQ%ri$wUUezP7#Q*NZl$b`Q$WQSv)()f{QU7+SQ40VJO ztL1qAJfWpb?+6dspc2JXg<@lugKD6|xTiSK;mKLg2$rK2Yx+4*cT`q|7<)7ou2Neq zCiN+m;VkG3&o;q%+woFPO7vUL@{zGT$uqfLOCB`*!q@Cj6zE?049Mm%I@n1fnP&+V<48e}lV&TlsDJ7L_{52Ez)8-scCv60?7FF~tRZ6(drI*LD$ zaQuq2Unu&j$vv-kG})!W_n%kh>qA?AqVsR3Hr{tYDy0mg)kx zO7Gbm{By4tkp9_NkkmptgKr2JFb?50Mvo<3FL%JNA6fnt;4*(rQBZa!q6p`i95eid z=yVO+ay=60aX`m&7aNj8gCQWL<|Pg~MYUM`O9T7Z>xtkA?C~q^kdHbU4=O&0ew;Z_ zu|in0cc8@YdrQ-MD86)4%%u~v@gR_h+a#2r1^!X&I8EB^^(Fbg$6Qapib(%^;^2F_ zZD59(-GbNo5=(D2`*gLo<4)kiTkDMOC;yO%OU|w@?Hzs`V9{TOGetZA%!A*NX5x2}*Z<5%@ z5zkaF;kh6zS_pYq<%Uhn?X*&Y`YqF zs^eqFQ$?njv}Ip)b>vF@{Pt_po5ggBlg@>keK$VNuFQzroc*&X5dy1C)bilr@@?PQ zQm$vXEAJlBPiql2rChM>iHFuuD-m3O<^zU!3*o1@r&;ojck$fx5D?y%f8DE`70nkB z-g6CAcU16fvrxLX=Szhl%G)3~6W}We-Wy;Mek@!j=54#rg$y{YQ%Sg))lM?18`+XNOxf1T+@Kj5>v_}6n4w$Z&P2wmp^vcb$3aCK)6F_v*VDUn=alN4tuJB7a2d*S=*` zu7)`$oe{Y6w5jb&YN5MFHWyWA?yjRN7;%NYXR(*MLrT9uX_~RS*mk?L)GJ<)+Ff@Y zAHGsj&C0q)eX-u1`zfm0DA2);e-Y%k$+;G2P-fL|#pHoz7jx-?-=TygjL5Q=bXav^53?g-Y1Kgfda zy**kFo^Wz8{U)aD@Tv?km~VWgf;@(oI-;h?1p;b{UMe{ByEMn=-;e>TWa}Bz;uDxRpf9b2?&5^hsxX^kKdazp4R0JTv&KN? zEYMmHnyHS1v@-A3u!O3_SURBneZ|lVl^&`-vO6F#B|4eIn{JPZ$ilG07vvoJYhppKT%>0aG*|Mq+X_)-a zVX8j3FrLEZQ{DmY)ia_I0+z+iP_k1S!~K>qIaw&qTuN;hvDs z@wikF0iJ(veUc!P^jy@gi2Igm>;3-ANWL^&B2Bpi){`6Lv^g>+KYexfheK8yvJj1( znSaq3^ojdqY^+N><%79b_I+q?Lx^B!r%|02K}3SuKfJ5Z_YBQPM7{1eH8$kcXT*7YGyaRaXmoQ z5v0gq=T~Li^*9nzAv4&gL#@ zvrIE~ZHhZ7ttxg<|ChDA)TDX6~`-mZm;Z zY@f?nCY9dN4)w2`emjMwkc-ic$X&_vodz|GHfJ=E1kt-eL$b2%jWE7KSXgyKV(PK{ zixI>J)uglIpWzg?T1Em=ZbI5VG&Bnm)e7PTQ!c;P&J)v%Hp%M7p=Q6O?1jwy6dQEg zdn!HslX_-BuwL)i>wC1R-k8bU2jBi`_XpLeP*@KVCP!U8(v<)Th-Bq|q)^tAc$ZUBE*-o4?zl zKFeU|tV}dS{?9_NCrGZiA-V223`_91M+`A(32Qif>4L?7^TrgIUbVU&vA;4zl}%sL z@zh+?@cp>f4AETUrj)l)+-`2~tot zlb^b?$&Gt|J2BHz!k`)j$(V{4uv2>SpXaH9RF>^yT9v1v52n9`C1zX*2__Bx?7kyd zXP0TPb|_#!5^I1#cPw;i4mB4K<@?=r+9q->w~|Ye%yK>JM_ZGZ>wn2Gdeoeig>UE* zFF$@@W>0FJQ*wtlTLT4JN>5-GE-kR~Q)5G6$gK(Y?yLtNwXlIXRbe_-(C1k%=99U% zTPefTiG;JhZnGkdTI#jQVJZP|vvI9Fw`Q9360krwT^a0?Gg<>Rhv33eqGjrHv8&M+ ze

16-GWkF#lhvALuV#gAuBJmNkgsNF?t(nFGx5&OOf<(On+5{^V!X_6-sY5J<~$*5VaNW($EZl$ag*!2H92%;A~p<5mr+vJKxHy0jbcc*b)F zLioqNc0ZFk;%0SdZ0Ny?p|5XcgAc^~z^8(%>d6cqmKd}*jWNQ+#oW3tUz)-{_(sU!Jz%^ z+c#lhob6={=j-Ncwo)r7eCK`kZc1jb!TG2^&t~z@_X#rn?YZVg!&e*kZ8L}1Jf^Ju z3;o+MAs^};_DW4B8q|pH$%8*21zU>G?dAMk|NK0fcXt@VjMphTxHa-v5P@azgYwil zu;U;T+&__QKci^9k(8bNG?i~Lm?2z)l^7(XBQOfPNXNODV3 z0_7~nyk*DeRvz1_AaMQds8c}*I2zAy5Zr#5??Ts@tkE?dUv>-VjD_t1a;#q91iM>h zBVuz)tPy6|&v9>ZDD-j%V#OU~G>w_*_T31a3Z(Z5-HEB34);KR@l?D{hd+Xx7uZMD zW$8R-+@1eSm6}@~H;l~gen^k*HdfRQ?H^qHe5Zs?Zg@jw$MqTdZuLiQLB-4c!mMiw z5OZ#oRHF^*76{{jsXz^8_H1SYoH6mZFOV441*vc^_(m#pBa+r~OdmUaA7vb*X&>po z^V4k#w7y$rO%_gjApk@$;`9P1UsuQe_GqBb>VgHepj^qnrhSS(+O!hNZr8e8?Pm3K zlCvz$n=q<5n%TDDbKGO=0tSX|8F7UXyfa54X5=y3msrHFoCo)dN5vY@DVm@%H;}_x zr8DjDM4~ImXa*UBLETck=!Q4|-sS!uxXsf`grRSbF@qoC3Ruzuv#7_A!XY=V30yRP zX5R1#zSR)w;~z+f9mx_@EPoqKBRH-Vk%`9B=Soz2R_~PF;ZmV|J26x3NQ}*V`>GDy zMER9iHTvDrjbavFeH4f3%yqQ;lkOXU||QzJkpp;dsiSbrJec z*DEkoSuePga}?5ho@F!6Yy!#RC)|%mpI=TyN7G2AYROO4Jgo#Sg0k=2n6wBR&n%cn z&9;;tGFO~t4m>C&(JPT;L&9$SK8A}>@Mee@FdlzgAnDWHLUd$Uzkma^%WVywFER0^ z5$eTA_C(wS(wn@wt-ZNF_gQl-BPVSa&ioqa$LqMBu3~o*L8Qt6nX$+O&(JPkU;f~1 z0IQ~W@-$PgW+(h`Eob5NUmfuR`P4R^=cK+UXESVugN*?8KAxlG*8Nz^Bl5=9E18xa7(F$ipt?uOj2f*P!82}kW(RY$Z{ycEas5SxGOj5 zG}&m5YdIh15K>qn=kuXqxJ|j+FUQ_EG6}h);ME>#V!SUxJbg@Fr2rs9^fseen^#n;fh~@f72SiZ2!2 zph+vUjaeLyRKeKzE)HF_DX5Y2Co_Mi_=n^LV)YF@P8+-35L7c%iMHZhIBJ@P;rKkP?7 zP1#iu0i@htt^lM&(B;Q@@vId?{U~ccy+nbu3mi?;dDb7Pi#Nt<`6dj7yxP{Wc$Ey& z@8E$(^=!?HmZ0b|A+@sZB+CVJ(Z{k}eR`M-!{*F~$PU>39lG%xD#-ea9_Sh4!%%7; zDj@o~(~~kbD?x;p(7W>x_NB$*WbO+)l?R_@+!I*EbsnrcH+{wVTQWvt=Puq=>7i*~ z_GamM6y~yT-{(9gW9dYiw~r!0%NrTpZ(D+UH3Bmqr);1^kwbItM}kVzKhF8GzV2(M z#k9t6PARhmUXa_icj)}&>Uqp#zBb%Ajc5CA-GkuxDDw3HqCx%a3Rm(@HedCejQg<( z+BQ$xL)ABb{=pub{gv4hB6nQw1zxUXT5X|beS#ft+0ir2%HXtJ1D_|AAQp`peVvW{|*MNK zQn%9c{T*rg&Hk{G=!^48>Yhc#O2&g7W?mml08a&vNgn0{!e2U56*U}T&Ux@Yqw>4H zN;@D7BQ=qBuVuFX1Qh=B*0FYN0tv@Gm!R=G7^;3%ouj0X&Fob?Eu(htfzz9hK-b1L zR~XYNaJTe9+o0Rl>`8+h0@;FWv3&fb_1d8$**`xnXu^TzmB2ug5nH6{XpeCxhjSvt zjBp1PN~#KYIu*13@0ODHzjoGMXPfeh(f(gd2P@Rh=IM=~sZ%EUBBceBb4iH(S%(4; z$c|!m>C~5D%)nveoAOm`k2|UoUw&<>M$B&({HvPr5m(+WWBm&6=NS(J zPgf7bmRh^=rx&8vnMYY?DA& zZpvLIga)`rzw(c^32PQ7k^zx73ov?=lYA(5p zcOoZa$h9Ydz^SNRt;GfZ1Y6pUJi%1tHW4Sf6OD8Q4+7q5I|Z%I_kH!;J=9ZKm%Mxo zx-YYO?7-YPAXcnZ_=DJ1tEA2NIL92-i3xuNAsHW!T8f3N$N^#Gt2RjzP*-z##|E=N z-nkvvjm!u*!<;yEI!sy~{_eo(2=yHAR-%YLJk}n&eX0s!8`CKxS(z^%7UOnwJhWKD zK4#9TT=d~gY#Z?t2vIoa0|WMRZzfb44`3QF)3=4Dx$9e#Y^;cuj7{#-EUk`U@s?7Y zxQ5ql%N;Sa>|8a7LA$MNEhW^P^>4g#eSW-(LPlIdziApAH`*X3T1H$F_^~S87d(#z z%F!c(Qp-hyD;|T6?dJKIeAZTp3y=Wh*o!?WK(Q{qhg!e#3#osM`VS-b*Wr|(1!W;6 z>GLy-DUc^%d2p5C32W6b(3XQc3nIQUdb13oRuz!9qe|W$-sy&Dc{p@5?4OxYcN%MiF8ixZM&r~UK1^&ea^&i$ltW`v+G<7<$L7D-pcbp(xKcy zhZ#?27=H4%W;^6=I04qM^(=%|^5u3-47jM6pt_`hmZ?lX7~ibaQcWr29rm1uE|;I& zO`DkEW!a{1E^r37M@GQuPiU*x{-e8Lb-DiPqz+~LfaK8frzhO>o8CnwquWwnd; zvw`l}0*-UCSLbuBGUu9@5{)X?LQotbxur>O3jEFf_W@K<0{*zbaD#~xXT%jrNc?mH zY{TP3A4C#g;ad+9fc_FXabl~gX@3ve^vB4W# zx;|zP@3*}!mHDFgRUyxB#`mb+G$ih_aErv<#pvZjH|X;q=CJrQLm@Z94`3U2uOai+ z_l3y(>~`SvE?ukJXMCD16>(9Ey7Wh!fU*{e!zJlzLgsh=HXg_p#%*_XN z-xiC$wu}R&O1pN6gaKe^?CRvbgL@hL(XST7nWsgBioGwkSerLbjX8Gv?F|xnEQc1DF3=5{f`1{8_C|NhjR9`k&`(^w ztGw)@^{BxVU=s!{4$1;Je zkQHUTZk+TQ>Y>ISd*e%Zg|fIkwD39M4y*5$<`j@Le)f&-?8}YG`xe9#qai+q?zS!* zY5ZP5a}K`OwD?D{KC6vUan-x$tncd=+1d(IBk7!4p%LI!Z7LHpuLFN#Ar%icvz z3$tHx;5oz5q0GsJOiykX&SDJPq^{?GudAtvsNQsAYjb6~v(m3r)wfSr@8?vUW69@| z0ms+7Y9_95gDfCMo2x`QeBKJiE=a#I0kh0LAE+^2l~cyR8-yV5&D_e_K{+zjRbt$Jh=OyR)S#c`8u^&Hh zS8i;*qD(Jp1c)cakkSFiuj|t-*)U_fOPGQ*fUE(u5g19WLcP-|P`R%Re7aw}G|ZYD zeVd%tW+)>)2{=Q<$Hl8lmv;t3RoFlaq)~Pkrtjhs@I3ll;Xm|(-7&!|U+6V%lBv=f z4-3}_D{nd*X701MMDvV?jKujr3Qx&vs$2CYFz|(+p-8+(HEB-q%ll`u_uiuw z=B2DnZvtjHsPAcj%de)X)E*ocn*?_;bT)eM{^QmtQF!?C-#O|Y5$1T6O}iJZJU#gX z?NApRcM9wx-PCL9`Z(zXAWzt(QQ;9sjbj&OKa1>JBo2II!r=r#WFQRC3V87{M_h@z zl>|UtYm^W!Mmk)X0y7jot>=DcyT*JPTjDHgAT);^rLZ^mnY{j3f8Jw3SDvzm-Z(*YSN@ z69d-lH*Hc#V?mCfLE{HZQ?#S!RZtB>bi8EE*mD`$C zC^au2PICD89aiVE)D4@LqZbqPm<#j`WM%dH9Qcu+XQ7>#6&I-M@Lhr*IbSL zFMc`+y&IqpR-4q8Pk8i)7bDHiclXTjv;?KbH^n)T;#o>|IET^k+WZXN2jnmyAXIa| z?5w8WDev-(f?93!K?_kAw{j|_Ba6?=6m`aKZoXU-gQGnQ5t`F!Y8{%6VMAgb>6<@E zsCb>yQ7{*^P_{upW{Uj9rK|k_K;GHEgBs4p`W@tP{`*}e$ux=?orY#cZ>oqFmTynY zns>V$-2U>xrENhj{pvh}lCgbIVek-r2#O);*I0q7>}Pgu+3aqLGy zwn&Kkg_|5`EYHxu*{s%guCe*%L`4j9EyN(>X^3@Mk7CGF2}bCkxXb>6j*^aPxSM;&ZeYE3nJ>8aAg#Y+`pMQ5;hHH74 zKB#udj^OZeBhIsdZr}Z8syYQxRmQ5s`h%Y}d}QA{Y~zC1BoCb=kXcy{HL%E=F#(0 zbr^r<;3&M)_)GAWs7HlT(TZzX6f!Kxwax+{?+=M4??oOfsHVfdrj!HO8$W1c{j}qh zuvAXj#(hXEK{(^5ptc-<(!$pl#FABj8Gay9R~r?iOd1E}K90jh%e{^HCm+au#x8gg z>7r@8qqlUtlxh^_?;QjAB+}Z%%k_mu4S?COFNESJqiCxE{Znp`YQWd3Hm28Pfr#1p)W>E}S1fur1X1;-vGF z>T36sP{9Sn`Cy9YDCh^UzszFr;Cixwp&VE&NIY5rX&?v8UG1*ZID&z{6!X8iEF5C+ zV)gcaShkOHz7Zn64{3qFSx`>3Z}|heSG6#LHrI1uWGKk+_HtqQyLn1brx0XImgY9ab*JkSNsM&xD^u2|FKp4;c2+PUW|5tNu>}j4t7f zntMV|hu)q;^28)J$$LP$&%@FjWCf5^1W=vD4kr9@=R)dnxNYZ#-P?U7SdovZuv7Ya zY(h;L-6rs*V?FxOgcUy?cr~bflif)YPm{c1h-Q`F0Bcqu(O-Q%THA>%_AlU~FAR8! zwBXedKA`5x#JVpG;DVs2-;@5tm{)6I`{!rGH|u-2Wwve?=1e||Py0j@*;QQ{f-(d~=)W)gre11`G z96~xjKk3CS}o6(ee1PrxP`-amFND$)Tw3mtxKNw z*wHA=tt-5&m00R0ElMj4d2k%siTWJD&nqgt5PUar2k&zpPMdPGUa)3YpU%&mA#Fo{ zDH4ykvMr#j?92!fgXX~3)Pz8BiG|f)2oZ75iRe|i6J%kZ07`h44|UHe=*doOvFiTG zbnez~@lDX^vh&EIVM=!t$h7q(H=;bA(#l{#0b)MQT-);5JP1TAuN~2F^A06J0@r^q zcqM%`u~Wk@5y%{UN}Y``|IvncMODlqYoHSQVb0A;jXxZ0tY;#SXFRJML)t=QMCiPp zyQpv{t2WIg)ujQ=i8q^F1v-bkYALseBuI8b4`p#GNhG2nbH|PLW67Ec}sp zWg&k)SU_muZuA~DbwgDOT(Vy_e4{(g z3HL1C>q0C4euMiwkY?e~7H#gEOpcCwhV72|KKnHQ$Gdu`-Yf1>>XX(`TYPfgB+6Y35^k@_9P#s267GaaI!)UAakAvs|#RaC)&>Jcp>kY)!f={lgzo zG(WoDO9pBBp+cn?nf-S61DHFTIdQf+@_Mms(9SwgKH^%Xs+{H~?ehPR|H}$|`L!l~ X0*WLd8ub4=W7PbzwOPrfyHEZHH=!pK literal 0 HcmV?d00001 diff --git a/assets/prime.png b/assets/prime.png new file mode 100644 index 0000000000000000000000000000000000000000..54a7e99c732268a0688f5886c93e51e27e74204f GIT binary patch literal 36263 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

#t?}_wT_Y34e zF&;rxQC~cwsw%2_jSDSxw`JQ_jAm1)DwOUhl)?0z?F1=IW@9nu0*;T4I6FII^VVB* zRV$)}yiA7ph}l>4I2=)BI=7#)zS*_g4lJMrQ-wrK}}*N8NU~Zp&mk zrO0z^F66%$dqqqnHyP98DK;wvzfwZEY&zkYcfnGQree=*Jb7sUgTMT@fByga-F&vs zyqEwUot^*edRza*cr?ZPNKuqvGQ6wkx{f@z(rbsSM%KkZhb%SQ=uw$X{Ocg6mG>eZ zD92zm>o;B_D+|i;gfi2dpFHB>qj%VDw;UWFaPsJk(Wqp;e=NAtRvOvqbk5%40T+w& zR5St#Zg;L7l4EYKfx~EmQaB%|>W0pF$|9%T$qZIIbX@N}VdDB4R0zj^Xe8Cx8Fv|LX7dbA3L=^ytw) z`pQ>d@4oZZcW3o-Lz!iSH2#LDa6SsJIY_{9Bqp_Q#CiFC)5!@jna#!A%Vczm73=#C zs5UEZfBSp!%L^XgyT{|xQ%+7!MRW*MbIy)GOY%Qc?h1U0?NeGi2rlX;<-MTV*12K{>kDO|JcVr z{>tqaf6$-^O0#VmGHcO!fs3HLlu_9E@=4IxkHFQbBBkI-r?bc z`y3x1Qe-9GIhsnmn&$I)0s}L~*3!0)%hj59-g&^+@4n6BlQZhNX1m>rL)>JNd^i=I z>m-+MR8qIikm#k7GGz!-O!94|ME%kewEzbombdWc{b zItgLN5NzNfTp7fw=ym7o2Wf9OYk@Wtb6_@<$2I~jX(Xqy^C z9PDMJn8YDO+nh`rrjt3-`3#d~qRLP(ozHmTr5BmaCw%eOKF6D{zec7rnTWg;WS$ii z;}MsOH76Hm+`Ib@Z{NGmgNKi}TrI^=v>cPqCxiekuubm3(HJW4ajO-Xu_zx=%0F>h z$Vx*|)pbgo)Z}S`(`O0hJST~(>wzy!mIbk%Ja(aHjn{R!c z*WP%Ov&E&XLyW~o&t||YkRqv20b{KU4l2^My~SZFXbUPhLTrEk7t>e1 z@bx#p{Q7HO{lg#n?)SN52-35pDP4~)@o^jt1bTFBQ8%*d31V;^PX}t<;53o^Z4w7 z&wl>bu(_DcFIF3Z(v0R)^68kWZP_+kbXI^;Vw}2MvRbXA_el$6L6_B#{Tovru7p1; zx>(ct5+4K3m6WLfLW+RR^L)tm?R9tx>92~il!&j|4^}>z&5}oyEN;i+Y2q}+CwS!E z3+R~{2-@R=e`dvGo@X(&q3Zs{ANt`x6TRnf|A6&siBd^F9|O)i#*-0E*D#yU=(>(_ zG{Of*jH0CQuA{Ci+P1-1MO)R}fBOz!d*cnF58ST_=ZYLOUxTJB3OK?I87zqk$EF_w!Qq>EpDio!a+DI*G zgDU!=QGxVJEmc)i;wH@pFc4bGB{9Z!jE%9!nDH>4>$$$?z3ltmYp>l8Yrn^){f=kG zv!s!Zbmq(K^~_#tKhOXF|KWQ9b)!+rM@VTiKs|}XV04C~t3P@2rAtp=^KYiz$?ji% z``h21edL258gK1fwnBKVsRTrxJS0Uf2cyQZl!KzoIu@-}XJ%POmSw29pePFV_xI@c z`&_=fg*FYYW7yu^Lbrw_S#b93S?2Qv@4x#ldV>)!ojJ{4|KM4i7Hbp*lyZ@+)j%y> zCW5w`^L26*VUH=}m@XAp)3%lxm1HSx+fYl58!rw!-pk8+5CoRP+Ziug;h==V?PhGE z>*||sZn=DGxvta2H22Y_YgTr$m`c~gaZH{XRtI+2`}4ejzpihlc$ynS@%9Hl@V9?) zF`d~|Hf6&U=HE;JKl;%R zzw+F3&;8xo-+VK)hF)(-T^60uzzb2 zX$Zq1X^|5|Atz3rWVAA-ZCh@;^=2M_?60`@9q(j39FWczINI>0<2T?Tnarl-Ns4j6 zG}f2bGz~%ulq>Ljg{d3b)^?hg_H8MxK+ZVUDJz7F(KZZ1WvQh)Md7QA-Y!YbRJOCP zlf z_hk|%2r2)oa5OifYM#PNc?$&AG!AuBWP zx#w-1zj%S_r)SvO+F~#sar*QQo0}K8>82C>_4gk~x*pO~+<4>&PHPpFO>5A#p{fgX zZM8~)AEA5+#<6c8Z3nxKSms(vaA6)VXxbKSEGKW#n8V|`?)B*R?J*_0U@*EbGFRGT zuGj0?<84W3>RJ!W50Iv@Jt|iysxB+MUUti+L^)tw7vah`#xZ9wJxcOoVqFrlt+IMA%&nSbLR6Ilj#AMwssh= zty7i-rfn#4>y>Y4@ZSC+LwH%{(o`+Pn;QSz@ZCk1? zF3>bfe1#&4BJ#ZGtW7SJu5qwmgjJ=9LJy}dadfGjR{yK-{rFP*hIlgp%x3MQ=gyt` zoA%E7%YTeo#%JtPXZa97%$8ktzbDYMIFA}n{V6?G z_rvhe;j$dMW?4p2m1tuS-jFs;ItE-zQ){bX?{rDN?;mQc#A~t;me6NMIEON0E2yJW zTH2$muDdszlqs}#8{#@kQcNt&kY&kpeY2%#iV6fqbKi26NT z*E!Tw^#%ibk8;6P5?$3y=Q9iMscSM_AqCW)9mUi|Nm&$DGBX_7*yPgUUyTE9C(AXo zI6_z|xvp@P{kIAssEV@FvfEZbQ`*99w1L1Lu?8Dt*3<=5#krs7K3);Uv`BgW^tp3q zi>5gl4M)WDIaD^8Z#uCAOQQ{U-*GqJ{q8<5ocb{*PoCt++B&;CQ}*{yBV9X0b%kI! z7~wRETaVtxnbR+$N)NLzy#2PfgX7|vkRzjG_Gr*8ZB=v2iQC!VKR`M@gZ?U6S>XmA zVd=M*ET7)ABg^OE37N;!YnN6!L@Oi<``mTQZ5HPd#~fW>V>leL zG8&NNnVs8((P3bH*)fCzU!fw2bQ}T|T9w1bQ3_ciT}2irNYBTZ3f(mLVMLmj94vM) zfa)n^Ta|s!{U>j@VgmTl^QRu|^@pFjbm1a_khHCXi%XT;|Jl0KJp1eq(RIymIHt-g z(ln>YDyp)fRR+hANXJ7M4>YXxS1C7dWFjX-s)rJaqO6(i&8X|fqF##{T8G_Bd-ij_ zYzX>2%BsQCkk>i$CZ;Zm&ZnjU!`|Lbhc~tHKf1A*+M)7z^RXiox~9$wnzCRRg@_}Y z^!t6JXHA*1yJ#r?`&f(&cS@=zK3^&>PbC`>YICa9m+$eVt*`7(@8K0wOij~%>r4ORk@)Zb_U{a;B%|MpXsepdqsMVwhc}&gGsEYe1JR=MoV+Ng zN=ql-+1X(+i>(4tC_L%YRxQ2Wz=Dn)haiYhN>SuCL_PFF&YwR|9H*U8v7r}6?CnmN zmoZT^#O-E+zSo6}1l+&^(&X?Sr+g1%3{lS( zO;J~`Cbuky#Y>|BingwBUCFRNA`E-D!s`Mu1$Aq{)VNrRI8{X!TatRQSe&OyfBWBl z>3i+Zdk-D1p!K$UPX4Dae*O!eI=Z^b*z-vy6Z(T5S(YHB;Mr%M=HkWk>}+qdyR~h@ zRA+O`gUhS#?Jz(J#V`NTyUDT~Pg>?%6!mSBuNHJl+Y$tJcISGEEX{G1WVT4avGcn?DLmy8NEcm~%qJ6)>9mrr^Pd0w z=wna59{VS+q+*)K$)}%q>ZxD&$Ok|4-lD3>>KfHFWL3@Pc%8St?OulC5&eFjAPCsG zyk)nO;Itj+`E?yM zNK@fC`k#OC(I=mLz4q^lDyFk%_v*j+U*G)r(Y1~5-*d;Ew@T$Pk5e2WsI{S$l8wz{ zq-n~==26bContyVKvxx>3b^C;+qvhSdsrQ_^aPrevUKYa0>h`##}j zz^}jWz3lDmvb(!WQ#H(!m><7>0f-pi#YiT+(W_IvErxjF{r7ty2LvPT>4}Cn} zWqPm=O^dEGirExXB##b#=MP`c{kx)y3E=Br|L(*w?SsGnd%ySi@gqmZ)BQchD?_rX zVzNK6z{1vHJYMC-n+zvUo@CJL9$rH+SaUoFrz0dyX6YcA{cP>}pdil)x{ie*HefPWG^;^Pqh3#$)TGZET*V4U_0Zd~MtDeW4Ws*Ylve6IHrKYx}#Z zuJL>yr96hik%b7gEmf&$0O3k2gmYZ7v_LmC%J(Si3eQu_rV~6*;53@O?TgIzwsho* z2S4}cPrmee@7onwOaRZm@Z&SRKqU|S`UCIZ+1sNrhUx5p*0h9Si0fK3X&6Ne`hEPs z#}!smyX4a1&}CFMm@b^%ZhA|W=Hx|ARn;U}%E7^u*9 z-LnQtrEpz4@b;A?o*z&a8S}ke>O3WIoqzF#FF*UGD`C&B*kS^B?8&FUf9I_ykKTOC z&F^SigY*U018v)_2jJ$L`D`SbuugYPMty0ltq z<hSgVw%U9$@1jO@BZa? zeY7mgwG$_9B1==kD54{0Asm741$e$qQ)_gM?|B#+%Bms(i3)c0$r9#^nEkzdE?wT@ z;>8P0=X3V<_c(v?0_QHAV=|pm)FrxYsEx)rEhvHXq)oUJU6{RN(eKNUiDibk)-Ad* zR8>t;RUmD~fGcI!sdlJqONx?8a_s00lx0O;SiJ0bWev~siQ|~Py**slp)7MoqalNS zkDl*QWHIS%jwjlOH-^K9{@}lVE4z~RN^%vfN5B59gSWo*Egyd9w?6*3RQ^~fi{oY9E(LbN}diDVq88cnV%>ek@*A~ud4#fw6UqB^ua^?E&~vl+E% zDC&wo zqick4Naiz=*_55jms&ydnLmE)xqp2n?vu+^vi|b1C-#pYU46!NoQFK+3I`jODmpZ- zgH8W$0a}BUE{(SClE&x`Q`&jeT&oq5N_G7nMcYDA+M}r`OA1|4YfVv=-JgO=S5(?w zvO(CevJRT;3V9eV(PH^ROAan{j$J^y9=;#Y&=Q0p!{HbqT*~gE?l=xX=rbJk5w1fR z`0Q?9Mi+VM(th&4e&^}WU#WX^)f5xJx4!fEnfvem8;d(`yW=<0H0v6P7RV!ngQpap z@8c^)RaWR)qwBUqq}p(J$F<<+{&-AdT9P;+NmKHoAj^{_0g}ORWXBs_%=7YIBps`~ z?DzT>HPK0Bm+Ta+ZH{CZc+^!%RaXdC;wd|r^@5PF7qPanP7w5Hu@umj2H`r?RY|;< zQ)UVC$u4D@uyg6+{wNAR_{Fb&_p4X({y1EP>kt3KAAIqB?|sids;d&$0h*Fw6fqtS zXqyJ*N~jy^Qd4P7W3U})tx5BOtSs=Q>abkU)Fo*evzX6F;yFcLu~@{`q&c4-UX0te zMRe99DZN8++cMa6nRzLtV0~?c*W!QL6K%%0BO#_WXjIY z4wK1*>2%I?F(=D1nx-M}BhozU+%xiL?oh4}tgns8vV^KJxPCzEDk{^0RH)D=&vSwx zV9<+jFtl||pd@uwv48m@>13BGkH6`?K~ zWo3npjSU9lF^=PqXC+x);7UbNR+MFhUiOfLpzV)OU$RwY%Dk*68)Vs7Ou(96rz#6t)8e|4Wx9V+S7cd694E}? zF9H@1JX&oBJ0av2@2&Ft)$DuJGl~33o5k`G*C9M!B&&Llud{45wvqhj3$BwKb z9XR{r7diX#Ps%`wPyX3cXFh*5?#ESKOaQN3+WzT@8#brE_zQP^z;Ogg60^3liYu(G zdzoqExE3L18jA&EnZTwS>Z+nhQ;NL67@MKw`94h-16b8oemkAdm@XEiSx!;bXshZ) zNQIONN7;E?SsVI;5kaqy^n7&NSlYJ`C{Gf29!fZPZcCoTTsV7%?ThF3`+@r4BTt<9 z>eadzSA8)7eE0FEo;!M345g1;L>{|kR`n?F@(BU--iafV{ zp|YYVN_(UgdB>#Fb|9Q4EaHTsEQzxWN4U7kv&9s6Na+I(x`masb=&CdG~`Qym2eEM z(-JDl_N5EF^3o{|b}zrslk&ZP{P^kTuI7EXCW;B*r$0IM4bSs`<=5W(Yd2pwf6l_g zI;fxNI4f;ykgh~2iD`@#v?U2il2BwhS(cG!8A+Prg@J|sB`HaklI1yhS<~VmeUCWF z@wznMFboNT9$pyWO6&ApU0b8=B6wP~C4-}p0+iEo>iK6m^U{ly>HM3=kF5XZfBDw) z+gJM@TruR%H0I@>oMLgX%lf$g@R603hyLhmPiNP{9$YiU1hB|;Q6=$L4`$O( z+;PX9QCSw$x}o16&=|vPIz_mGC5&%&)A@{A zYpX5tyu(ZY#}Rf2+wTJ{jnTNm#x&1nGsfc~YpY|NRx_RKuyyGbwl1Axw!hsDLhm#G z?f?Af(@&kgY_65(e@zt=!1lp>y0>-diQ8_!{S&?)x!M?}vqdMB?J?*NI5?QvH&aoN zWhq5j&~!;8O=Cl|Hjmvve>g%n4QXm$9ImJA9jLD9^&_O~((grhN>LUWWu8GN#PeNn zorZKVV{iKsyIU8SAMB#@xRjVrKJvZOpTE|g{WVui0MjHt_xN8uc1i`o%G&D24bqh| zNi!QD?+0jIk>>?z5;L36h?AH+FDNT3cFW6}d7Lm^%vsFmRE;KxtR`DHHqos$Ev;$n zJW#nf7(C??^#USa;-HDAyKG%J$M)rO#M51xGTZ6-?)(4riL+n77N5JrHNI9OKm67A z+;`u7?|#<<8|y0{UK!0u zr&EeFu@BL4Y~Das(bSqOPiX6$EMJhu30X2{F`vFrm+6Q8;&k@Pwfd~D`C|Hi*FX69 zgE!xL%gF~k=|1Qy_W|Eif%W(=8FDR6>kx!J;y6KTZF9tfklAd8BjARko9ylF5ie#| zdfWA*j4_l&!D4!T{A_-yIBDGUN2A z=Qx<`Fh4kWSh)PdZ=5srwf;Qc(8cus71u)#+%Z}ie_&;0?KfNzZaA*R!54)^*&iGn zP~`=^e#EffBTZ8pQ)6_~;Y}^}bTOMyr3=D9{mCQG?0)Y0lfAyKuj}jjy1uTj>+AZu kzOJw9>-xIBuH5y10WHhvWBCR4hX4Qo07*qoM6N<$f_BU4K>z>% literal 0 HcmV?d00001 diff --git a/conf.lua b/conf.lua new file mode 100644 index 0000000..9205a54 --- /dev/null +++ b/conf.lua @@ -0,0 +1,9 @@ +local love = require "love" + +function love.conf(app) + app.window.width = 1280 + app.window.height = 720 + app.window.title = "Z Game" + app.window.display = 2 +end + diff --git a/globals.lua b/globals.lua new file mode 100644 index 0000000..d8d3e45 --- /dev/null +++ b/globals.lua @@ -0,0 +1,3 @@ +function calculateDistance(x1, y1, x2, y2) + return math.sqrt(((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)) +end \ No newline at end of file diff --git a/main.lua b/main.lua new file mode 100644 index 0000000..ec093b5 --- /dev/null +++ b/main.lua @@ -0,0 +1,87 @@ +local love = require "love" +local lg = love.graphics +local lk = love.keyboard +local Ban = require "Ban" +local Game = require "Game" +local Player = require "Player" +local Menu = require "menu" + +math.randomseed(os.time()) +function love.load() + local BAN_DISTANCE = 0.6 + local BAN_SPEED = 500 + + player = Player() + game = Game() + game:startNewGame(player) + menu = Menu(game, player) +end + +function love.keypressed(key) + if game.state.running then + if key == "escape" then + game:changeGameState("paused") + end + elseif game.state.paused then + if key == "escape" then + game:changeGameState("running") + end + end -- endif for gamestate + + if key == "up" then + player.thrusting = true + end + + if key == "space" then + player:shootBan() + end + +end + +function love.keyreleased(key) + if key == "up" then + player.thrusting = false + end +end + +function love.mousepressed(x, y, button, istouch, presses) + + if button == 1 then + clickedMouse = true + end +end + +function love.update(dt) + if game.state.running then + player:movePlayer(dt) + + for chat_index, chat in pairs(chats) do + -- we new check to see for ban collision detection + for _, ban in pairs(player.bans) do + if calculateDistance(ban.x, ban.y, chat.x, chat.y) < chat.radius then + ban:explode() -- delete ban + chat:destroy(chats, chat_index, game) + end + end + + chat:move(dt) + end + + elseif game.state.menu then + menu:run(clickedMouse) + clickedMouse = false + end +end + +function love.draw() + if game.state.running then + player:draw() + + for _, chat in pairs(chats) do + chat:draw() + end + + elseif game.state.paused then + menu:draw() + end +end