From 3432eeacd683630ff13c6ede004a99c09911bfc1 Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Tue, 5 May 2026 17:34:27 +0200 Subject: [PATCH] init fungun --- gunfun/.gitignore | 4 + gunfun/mod/api.gsc | 75 +++ gunfun/mod/main.gsc | 991 ++++++++++++++++++++++++++++++++++++++++ gunfun/mod/streaks.gsc | 714 +++++++++++++++++++++++++++++ gunfun/mod/vote.gsc | 635 +++++++++++++++++++++++++ gunfun/mod/weapons.gsc | 579 +++++++++++++++++++++++ gunfun/scripts/load.gsc | 5 + gunfun/z_svr_bots.iwd | Bin 0 -> 82244 bytes 8 files changed, 3003 insertions(+) create mode 100644 gunfun/.gitignore create mode 100755 gunfun/mod/api.gsc create mode 100755 gunfun/mod/main.gsc create mode 100755 gunfun/mod/streaks.gsc create mode 100755 gunfun/mod/vote.gsc create mode 100755 gunfun/mod/weapons.gsc create mode 100755 gunfun/scripts/load.gsc create mode 100755 gunfun/z_svr_bots.iwd diff --git a/gunfun/.gitignore b/gunfun/.gitignore new file mode 100644 index 0000000..09c8d20 --- /dev/null +++ b/gunfun/.gitignore @@ -0,0 +1,4 @@ +*.log* +maps/ +scriptdata/ +demos/ \ No newline at end of file diff --git a/gunfun/mod/api.gsc b/gunfun/mod/api.gsc new file mode 100755 index 0000000..ec17d71 --- /dev/null +++ b/gunfun/mod/api.gsc @@ -0,0 +1,75 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +// For sending data, you use - as split character and for response I use | as split character +// all-10 => top 10 guids split by | + +Init() +{ + if(true) // unfinished script + return; + //level.api = "http://178.63.44.165:80831/"; + level.api = ""; + level.chatCommands = []; + level.chatCommands[level.chatCommands.size] = "register"; + level.chatCommands[level.chatCommands.size] = "increment"; + level.chatCommands[level.chatCommands.size] = "all"; + level.chatCommands[level.chatCommands.size] = "read"; + thread onSay(); + thread onPlayerConnect(); +} +onPlayerConnect() +{ + while(true) + { + level waittill("connected", player); + player thread tryCallApi("register"); + } +} +onSay() +{ + while(true) + { + level waittill("say", string, player); + iprintlnBold(string + " " + player.name); + player thread checkString(string); + } +} +checkString(string) +{ + if(string[0] != "!" && string[0] != "-") + return; + string = GetSubStr(string,1); //GetSubStr( , , ) + iPrintln(string); + cmd = strTok(string, " "); + foreach(chat in level.chatCommands) + { + if(chat == cmd[0]) + self callApi(chat); + } +} +callApi(string) +{ + list = httpGet(level.api + ""); + list waittill("done", success, data); + if(!success) + return "error"; + iPrintln("^2green"); + return data; +} +tryCallApi(parameter) +{ + data = self callApi("!" + parameter + "-" + self.guid); + if(!isDefined(data)) + self iPrintlnBold(parameter + " was successful"); + else if(data == "error") + self iPrintlnBold("^1error calling the api"); + else + { + wait 2; + ar = strTok(data, "|"); + foreach(a in ar) + self iPrintlnBold(a); + } +} diff --git a/gunfun/mod/main.gsc b/gunfun/mod/main.gsc new file mode 100755 index 0000000..c20b361 --- /dev/null +++ b/gunfun/mod/main.gsc @@ -0,0 +1,991 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +///////////////////// +// +// Gamemodes: +// +// - basic +// - team gungame +// - no streaks +// - snipers only +// - kill confirmed +// - pistol & shotgun only (disabled) + +Init() +{ + loadSettings(); + thread mod\weapons::loadWeapons(); + thread mod\streaks::loadStreaks(); + thread mod\vote::loadVote(); // does not work + thread onPlayerConnect(); + thread deleteSentries(); + thread launchGame(); +} +setGamemodes() +{ + level.gungamemodes = []; + level.gungamemodes[level.gungamemodes.size] = "Fungame"; // God of Hellfire addition + level.gungamemodes[level.gungamemodes.size] = "Classic"; + // level.gungamemodes[level.gungamemodes.size] = "Classic"; // raising the chance + // level.gungamemodes[level.gungamemodes.size] = "Classic"; + // level.gungamemodes[level.gungamemodes.size] = "No Streaks"; + // level.gungamemodes[level.gungamemodes.size] = "Snipers only"; + //level.gungamemodes[level.gungamemodes.size] = "Pistol & Shotguns only"; // works but is it fun? + // level.gungamemodes[level.gungamemodes.size] = "Team Gungame"; + // level.gungamemodes[level.gungamemodes.size] = "Kill Confirmed"; +} +initializeGametype(type) // called in vote.gsc after first map +{ + setDvar("gunmode", type); + if(type == "Team Gungame") + setDvar("g_gametype", "gungame_team"); + else + setDvar("g_gametype", "gungame"); + switch(type) + { + case "Classic": + setDvar("global_health", 60); + setDvar("speed", 1.2); + setDvar("streaks_online", 1); + setDvar("jump_height", 60); + setDvar("amount_weapons", 100); + setDvar("shuffle_weapons", 1); + break; + case "No Streaks": + setDvar("global_health", 70); + setDvar("speed", 1.2); + setDvar("streaks_online", 0); + setDvar("jump_height", 70); + break; + case "Snipers only": + setDvar("global_health", 70); + setDvar("speed", 1.2); + setDvar("streaks_online", 1); + setDvar("jump_height", 70); + break; + case "Pistol & Shotguns only": + setDvar("global_health", 70); + setDvar("speed", 1.2); + setDvar("streaks_online", 1); + setDvar("jump_height", 70); + break; + case "Team Gungame": + setDvar("global_health", 70); + setDvar("speed", 1.2); + setDvar("streaks_online", 1); + setDvar("jump_height", 70); + break; + case "Kill Confirmed": + setDvar("global_health", 100); + setDvar("speed", 1); + setDvar("streaks_online", 1); + setDvar("jump_height", 70); + break; + case "Fungame": + setDvar("global_health", 60); + setDvar("speed", 1.5); + setDvar("streaks_online", 1); + setDvar("jump_height", 0.5); + setDvar("amount_weapons", 150); + break; + default: // not required + setDvar("global_health", 70); + setDvar("speed", 1.2); + setDvar("streaks_online", 1); + setDvar("jump_height", 70); + setDvar("amount_weapons", 100); + break; + } +} +loadSettings() +{ + /////////////////////// CUSTOM SETTINGS ///////////////////////////// + //SetDvarIfUninitialized("gunmode", "Classic"); + SetDvarIfUninitialized("gunmode", "Fungame"); + initializeGametype(getDvar("gunmode")); + + if(getDvar("g_gametype") == "gungame_team") + setDvar("amount_weapons", int(getDvarInt("amount_weapons")/4)); + + setDvar("shuffle_weapons", 0); + setDvar("intermission", 15); + SetDvarIfUninitialized("show_damage_ui", 1); + setDvar("gunversion", "1.4 Remaster by ^1Santahunter - Modified by God of Hellfire"); + ///////////////////////////////////////////////////////////////////// + setDvar("scr_" + (getDvar("g_gametype")) + "_timelimit", 0); + setDvar("scr_" + (getDvar("g_gametype")) + "_scorelimit", 0); + setDvar("ui_allow_teamchange", 0); + setDvar("testClients_watchKillcam", 0); + setDvar("scr_game_hardpoints", 0); + setDvar("scr_game_graceperiod", 0); + setDvar("scr_game_matchstarttime", 0); + setDvar("scr_game_playerwaittime", 0); + setDvar("g_hardcore", 0); + + level.state = "prematch"; + level.markerIcon = "ui_host"; + level.teamKills = []; + level.teamKills["allies"] = 0; + level.teamKills["axis"] = 0; + level.teamKills["allies_weapon"] = 1; + level.teamKills["axis_weapon"] = 1; + precacheShader(level.markerIcon); + setGamemodes(); + + // Bot Management + setDvar("bots_main", 1); + setDvar("bots_manage_fill", 8); + setDvar("bots_skill", 3); +} +deleteSentries() +{ + turret = GetEntArray("misc_turret","classname"); + for(i=0;i 0;i--) + { + value changeFontScaleOverTime(1); + value.fontScale = 0.5; + value setValue(i); + wait 1; + value.fontScale = 1.75; + foreach(player in level.players) + { + player playLocalSound("ui_mp_suitcasebomb_timer"); + } + } + level.state = "ingame"; + value setValue(0); + foreach(player in level.players) + { + player enableWeapons(); + player visionSetNakedForPlayer(getDvar("mapname"), 2); + player setMoveSpeedScale(1.25); + } + + setDvar("jump_height", 60); + hud destroy(); + value destroy(); + //player freezeControls(false); +} +onPlayerConnect() +{ + while(true) + { + level waittill("connected", player); + player thread onPlayerSpawned(); + } +} +onPlayerSpawned() +{ + self endon("disconnect"); + self thread firstSpawn(); + while(true) + { + self waittill("spawned_player"); + self thread loadSetup(); + // self thread test(); + } +} +firstSpawn() +{ + self endon("disconnect"); + team = getCorrectTeam(); + self thread setStartWeapon(team); + self.firstSpawn = true; + self.knifeKills = 0; + self.gungameKills = 0; + self.streaks = []; + self setClientDvar("cg_drawSplatter", 1); + self.hud_damagefeedback.color = (1,0,0); + self.line = self createRectangle("CENTER", "LEFT", 0,-90,300,5,(1,1,0),"line_horizontal",1); + self thread onKilling(); + self thread createUI(); + self thread refillOnFire(); + self thread watchVersion(); + self thread FPSBoost(); + if(getDvar("g_gametype") == "gungame_team") + self thread upgradeOnTeamKills(); + for(i=1;i<3;i++) + self setClientDvar("lowAmmoWarningNoAmmoColor" + i, 0, 0, 0, 0); + wait .2; + self notify("menuresponse", game["menu_team"], team); + wait .1; + self notify("menuresponse", "changeclass", "class1"); + wait .1; + self.firstSpawn = false; + self thread tryCreateMarkerIcons(); +} +getCorrectTeam() +{ + if(getDvar("g_gametype") != "gungame_team") + return "allies"; + allies = 0; + axis = 0; + foreach(player in level.players) + { + if(player.team == "allies") + allies++; + else if(player.team == "axis") + axis++; + } + if(allies >= axis) + return "allies"; + return "axis"; +} +setStartWeapon(team) +{ + if(getDvar("g_gametype") != "gungame_team") + self.current = 1; + else + self.current = level.teamKills[team + "_weapon"]; +} +loadSetup() +{ + self hide(); + self thread mod\streaks::setStreaks(); + self takeAllWeapons(); + self _clearPerks(); + self thread updateWeapon(); + self.maxhp = getDvarInt("global_health"); + self.maxhealth = self.maxhp; + self.health = self.maxhealth; + self.streaking = 0; + self.speed = false; + self.isJugger = false; + self.moveSpeedScaler = getDvarFloat("speed"); + self setMoveSpeedScale(getDvarFloat("speed")); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); // due to icys request :) + self maps\mp\perks\_perks::givePerk("specialty_falldamage"); // due to icys request :) + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + + self thread takeInvalidWeapon(); + if(level.state == "prematch") + { + //self freezeControls(true); + self setMoveSpeedScale(0); + self disableWeapons(); + self visionSetNakedForPlayer("blacktest", 0); + waitFrame(); + if(level.state == "prematch") + self setMoveSpeedScale(0); + } +} +upgradeOnTeamKills() +{ + self endon("disconnect"); + while(true) + { + level waittill("upgrade_" + self.team); + wait .3; + enemyTeam = self getEnemyTeam(); + self.current = level.teamKills[self.team + "_weapon"]; + self thread updateWeapon(); + self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size) + "/^3" + level.teamKills[enemyTeam + "_weapon"]); + } +} +getEnemyTeam() +{ + if(self.team == "allies") + return "axis"; + return "allies"; +} +updateWeapon() +{ + if(self.current > (level.gungameList.size - 1)) + { + self thread tryNuke(); + return; + } + //self iPrintlnBold(level.gungameList[self.current]); + variant = randomInt(9); + if(getDvar("gunmode") == "Fungame") + variant = 0; + if (isSubstr(level.gungameList[self.current], "_akimbo")) + self giveWeapon(level.gungameList[self.current], variant, true); + else + self giveWeapon(level.gungameList[self.current], variant, false); + self giveWeapon("onemanarmy_mp"); + self takeWeapon(self getCurrentWeapon()); + self giveMaxAmmo(level.gungameList[self.current]); + waitFrame(); + self switchtoweaponimmediate(level.gungameList[self.current]); + waitFrame(); + if(level.state == "prematch" || level.state == "ingame") + self show(); + if(self.isJugger) + self setMoveSpeedScale(.7); + else if(self.speed) + self setMoveSpeedScale(1.6); + if(level.state == "prematch") + { + self setMoveSpeedScale(0); + if(level.state == "prematch") + self setMoveSpeedScale(0); + } + if(self getCurrentWeapon() == "none" && !self isMantling() && !self isOnLadder()) // in rare case weapon does not exist + { + self updateWeapon(); + } +} +refillOnFire() +{ + self endon("disconnect"); + while(true) + { + self waittill("weapon_fired"); + weapon = self getCurrentWeapon(); + if(weapon == "at4_mp" || weapon == "rpg_mp" || weapon == "m79_mp") + { + self giveMaxAmmo(weapon); + } + } +} +onKilling() { + self endon("disconnect"); + level endon("nuke"); + self.multiplier = 0; + self.amount = 0; + //kills = self.pers["kills"]; + kills = 0; + refreshCounter = 0; + self.scoretext = self createText("hudbig", 1, "CENTER", "CENTER", 0, 0, .7,""); + self.scoretext_amount = self createText("hudbig", 1, "CENTER", "CENTER", -10, 20, .7,""); + self.multitext = []; + for(i=2;i<6;i++) + self.multitext[i] = self createText("hudbig", .6, "CENTER", "CENTER", 50, (i * 20), .7,""); + while(true) + { + wait .3; + if(kills > self.gungameKills) // not called on team gungame + { + self thread scorepopup(-100); + kills--; + refreshCounter++; + if(getDvar("gunmode") == "Fungame") + { + killsInGun = (self.gungameKills % 2); + self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1) + " (" + killsInGun + "/2)"); + } + else + self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1)); + self refreshCounter(refreshCounter); + self updateRatio(); + } + else if(kills < self.gungameKills) + { + kills++; + refreshCounter++; + self thread scorepopup(100); + self.streaking++; + if(getDvar("g_gametype") != "gungame_team") + { + if(getDvar("gunmode") == "Fungame") + { + if(self.gungameKills % 2 == 0) + { + self.current++; + self thread updateWeapon(); + } + killsInGun = (self.gungameKills % 2); + self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1) + " (" + killsInGun + "/2)"); + } + else + { + self.current++; + self thread updateWeapon(); + self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1)); + } + } + if(self.current >= (level.gungameList.size-5) && !isDefined(self.markerIcon)) + self thread initCreateMarkerIcon(); + self refreshCounter(refreshCounter); + self updateRatio(); + } + } +} +updateRatio() +{ + if(self.deaths != 0) + ratio = (self.kills/self.deaths); + else + ratio = self.kills; + self.ratiohud setValue(floatToString(ratio)); +} +refreshCounter(refreshCounter) +{ + if(refreshCounter == 10) + { + refreshCounter = 0; + self.weaponhud destroy(); + self createWeaponHud(); + } +} +warning(friendly) +{ + self notify("warning"); + if(friendly == 0) + warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"Enemy's powershield absorbed damage!"); + else if(friendly == 1) + warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"Powershield absorbed damage!"); + else if(friendly == 2) + warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"Enemy demoted you!"); + else + warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"You demoted yourself!"); + self thread clearWarning(warning); + warning.glowColor = (1,0,0); + warning fadeovertime(5); + warning.alpha = 0; + wait 5; + if(isDefined(warning)) + warning destroy(); + self notify("warning_end"); +} +clearWarning(hud) +{ + self endon("warning_end"); + self waittill("warning"); + if(isDefined(hud)) + hud destroy(); +} +createText(font,fontScale,align,relative,x,y,alpha,input,color,gcolor,galpha) +{ + text = self createFontString(font,fontScale,self); + text setPoint(align,relative,x,y); + text.sort = 999; + text.alpha = alpha; + if(isDefined(color)) + text.color = color; + if(isDefined(gcolor)) + text.glowcolor = gcolor; + if(isDefined(galpha)) + text.glowalpha = galpha; + else + text.glowalpha = 1; + text setText(input); + text.HideWhenInMenu = true; + return text; +} +scorepopup(amount) +{ + self endon("disconnect"); + self notify("scoring"); + self endon("scoring"); + self.multiplier++; + self.amount = self.amount + amount; + color = (0,0,0); + glowColor = (0,0,0); + switch(self.multiplier) + { + case 1: + color = (1,1,1); + glowColor = (0,1,0); + break; + case 2: + color = (1,1,0); + glowColor = (1,0,0); + break; + case 3: + color = (0,0,0); + glowColor = (1,0,0); + break; + default: + color = (0,0,0); + glowColor = (0,0,1); + break; + } + self.scoretext.alpha = 1; + self.scoretext_amount.alpha = 1; + self.scoretext.color = color; + self.scoretext.glowColor = glowColor; + self.scoretext SetPulseFX( 40, 2000, 600 ); + if(getDvar("gunmode") == "Kill Confirmed") + self.scoretext setText("Upgraded!^3"); + else + self.scoretext setText("Killed!^3"); + self.scoretext_amount.color = color; + self.scoretext_amount.glowColor = glowColor; + self.scoretext_amount SetPulseFX( 40, 2000, 600 ); + self.scoretext_amount setText("+" + self.amount); + if(self.multiplier > 1) + { + self.multitext[self.multiplier].alpha = 1; + self.multitext[self.multiplier] fadeOverTime(0.1); + self.multitext[self.multiplier].color = color; + self.multitext[self.multiplier].glowColor = glowColor; + } + if(self.multiplier == 2) + { + self thread lowerMultitext(self.multiplier); + self.multitext[self.multiplier] setText("Double Kill!"); + } + else if(self.multiplier == 3) + self.multitext[self.multiplier] setText("Triple Kill!"); + else if(self.multiplier == 4) + self.multitext[self.multiplier] setText("Multi Kill!"); + else if(self.multiplier > 4) + { + color = []; + for(i = 0;i < 13;i++) + color[i] = randomInt(9); + difference = self.multiplier - 4; + self.multitext[5] setText("^3x" + difference + " ^" + color[0] + "K^" + color[1] + "i^" + color[2] + "l^" + color[3] + "l^" + color[4] + "i^" + color[5] + "n^" + color[6] + "g ^" + color[7] + "S^" + color[8] + "p^" + color[9] + "r^" + color[10] + "e^" + color[11] + "e^" + color[12] + "!"); + } + self thread lowerMultiplier(); +} +lowerMultiplier() +{ + self endon("disconnect"); + self notify("lowering"); + self endon("lowering"); + wait 5; + self notify("start_lowering"); + self.multiplier = 0; + self.amount = 0; +} +lowerMultitext(multiplier) +{ + self waittill_any("start_lowering", "disconnect"); + for(i=2;i<6;i++) + { + self.multitext[i] fadeOverTime(3); + self.multitext[i].alpha = 0; + wait .75; + } + wait 4; +} +tryNuke() +{ + if(isDefined(level.startNuke)) + return; + level.state = "aftermatch"; + level notify("nuke"); + if(getDvar("g_gametype") != "gungame_team") + self.weaponhud setText("Weapon: " + (level.gungameList.size-1) + "/" + (level.gungameList.size-1)); + + //self thread mod\api::tryCallApi("increment"); + foreach(player in level.players) + player hide(); + self thread maps\mp\killstreaks\_nuke::tryUseNuke(); +} +createUI() +{ + self thread createWeaponHud(); + self thread Weaponnumber(); + self thread createRatioHud(); +} +createWeaponHud() +{ + self.weaponhud = self createFontString("hudsmall", 1); + self.weaponhud setPoint("LEFT", "CENTER", -410, -105); + self.weaponhud.glowalpha = .5; + self.weaponhud.color = (1,1,0); + self.weaponhud.hideWhenInMenu = true; + self.weaponhud.glowcolor = (1,0,0); +} +createRatioHud() +{ + self.ratiohud = self createFontString("hudsmall", 1); + self.ratiohud setPoint("LEFT", "CENTER", -410, -125); + self.ratiohud.color = (1,1,0); + self.ratiohud.glowalpha = .3; + self.ratiohud.glowcolor = (1,0,0); + self.ratiohud.label = &"Ratio: "; + self.ratiohud.alpha = 0; + self waittill_any("death", "killed_lethal"); + self.ratiohud fadeOverTime(2); + self.ratiohud.alpha = 1; +} +Weaponnumber() // deprecated +{ + self notify("weaponnumber"); + self endon("weaponnumber"); + self endon("disconnect"); + kills = 0; + oldkills = 0; + wait 1; + while(1) + { + kills++; + self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size - 1)); + //self waittill("killed_enemy"); + self waittill("update_weaponNumber"); + //progress updateBar(self.current/level.weapon.size); + if(kills >= 10) + { + self.weaponhud destroy(); + self createWeaponHud(); + self thread Weaponnumber(); + } + if(oldkills != self.kills) + { + oldkills = self.kills; + if(self.deaths != 0) + ratio = (self.kills/self.deaths); + else + ratio = self.kills; + self.ratiohud setValue(floatToString(ratio)); + } + } +} +floatToString(float) +{ + string = "" + float; + if(string.size > 5) + string = getSubStr(string, 0, 5); + return StringToFloat(string); +} +takeInvalidWeapon() +{ + self endon("disconnect"); + self endon("death"); + level endon("nuke"); + counter = 0; + wait 3; + while(1) + { + waitFrame(); + if(!isAlive(self)) + continue; + if(self isMantling()) + continue; + weapon = self getCurrentWeapon(); + if(!self hasWeapon(level.gungameList[self.current])) + { + counter++; + if(counter == 2) + { + counter = 0; + level.gungameList[self.current] = mod\weapons::setWeapon("peacekeeper_mp"); + } + } + if(weapon != level.gungameList[self.current]) + { + self takeAllWeapons(); + self thread updateWeapon(); + wait 2.5; + } + } +} +takeInvalidWeapon2() +{ + self endon("disconnect"); + level endon("nuke"); + counter = 0; + wait 3; + while(1) + { + wait .25; + if(!isAlive(self)) + continue; + weapon = self getCurrentWeapon(); + if((weapon != level.gungameList[self.current] && weapon != "killstreak_uav_mp") || weapon == "none") + { + weaponArray = strTok(weapon, "_"); + //if(weapon == ("gl_" + weaponArray[1] + "_mp")) + // continue; + //if(weapon == "none" && self isMantling()) + // continue; + //self iPrintln("false"); + //iPrintlnBold(weapon); + self takeAllWeapons(); + //if(!self hasWeapon(level.gungameList[self.current]) || weapon == "none") + //{ + counter++; + if(counter == 40) // debug + { + self.gungameKills++; + counter = 0; + self.current++; + self thread updateWeapon(); + wait 1; + } + else + self updateWeapon(); + wait .2; + //} + //if(level.gungameList[self.current] == "throwingknife_mp") + // self thread ThrowingKnife(); + if(!self.speed) + { + speed = level.speed; + self setMoveSpeedScale(speed); + if(self.hardmode == 1) + { + speed = level.speed * 0.8; + self setMoveSpeedScale(speed); + } + self.moveSpeedScaler = speed; + } + } + else if(weapon == "usp_tactical_mp") + { + speed = level.speed * 1.2; + self setMoveSpeedScale(speed); + self setWeaponAmmoClip("usp_tactical_mp", 0); + self setWeaponAmmoStock("usp_tactical_mp", 0); + } + } +} +ThrowingKnife() +{ + self endon("disconnect"); + self notify("tk"); + self endon("tk"); + for(;;) + { + self waittill( "grenade_fire", lightstick, weapName ); + if(weapName == "throwingknife_mp") + { + self giveWeapon("throwingknife_mp"); + self giveMaxAmmo("throwingknife_mp"); + } + } +} +giveGun(weapon, variant) +{ + if (!isDefined(variant)) + variant = randomInt(9); + if (isSubstr(weapon, "_akimbo")) + self giveWeapon(weapon, variant, true); + else + self giveWeapon(weapon, variant, false); +} +initCreateMarkerIcon() +{ + rank = 1; + foreach(player in level.players) + { + if(isDefined(player.markerIcon)) + rank++; + } + self.markerIcon = rank; + self.markerIconsEnemies = []; + self thread createWarnHUD(); + if(self.isJugger) + self notify("isMarked"); + foreach(player in level.players) + { + if(player != self) + { + self thread createMarkerIcon(player); + } + } + self waittill("disconnect"); + foreach(icon in self.markerIconsEnemies) + { + if(isDefined(icon)) + icon destroy(); + } +} +createMarkerIcon(player) +{ + self.markerIconsEnemies[self.markerIconsEnemies.size] = NewClientHudElem(player); + self.markerIconsEnemies[self.markerIconsEnemies.size-1] SetShader(level.markerIcon, 10, 10 ); + self.markerIconsEnemies[self.markerIconsEnemies.size-1].width = 10; + self.markerIconsEnemies[self.markerIconsEnemies.size-1].height = 10; + self.markerIconsEnemies[self.markerIconsEnemies.size-1].color = getColor(self.markerIcon); + self.markerIconsEnemies[self.markerIconsEnemies.size-1].x = self.origin[ 0 ]; + self.markerIconsEnemies[self.markerIconsEnemies.size-1].y = self.origin[ 1 ]; + self.markerIconsEnemies[self.markerIconsEnemies.size-1].z = self.origin[ 2 ] + 55; + self.markerIconsEnemies[self.markerIconsEnemies.size-1] SetWayPoint( true, true ); + self.markerIconsEnemies[self.markerIconsEnemies.size-1] SetTargetEnt(self); +} +getColor(rank) +{ + if(rank == 1) + return (1, 215/255, 0); // gold + if(rank == 2) + return (155/255,0,0); // darkred + if(rank == 3) + return (0,0,155/255); // darkblue + return (191/255, 137/255, 112/255); // bronze +} +createWarnHUD() +{ + /* + warnHUD = self createFontString("hudsmall", 1.2); + warnHUD setPoint("CENTER", "CENTER", 0, -10); + warnHUD.glowalpha = .5; + warnHUD.color = (155/255,0,0); + warnHUD.hideWhenInMenu = true; + warnHUD.glowcolor = (0,0,0); + warnHUD setText("Final Game: You are marked for all enemies now!"); + wait 3; + warnHUD destroy(); + */ + self thread maps\mp\gametypes\_hud_message::hintMessage("Final Game: You are marked for all enemies now!"); +} +tryCreateMarkerIcons() +{ + foreach(player in level.players) + { + if(isDefined(player.markerIcon)) + { + player thread createMarkerIcon(self); + } + } +} +createRectangle(align, relative, x, y, width, height, color, shader, sort) +{ + hud = newClientHudElem(self); + hud.sTexType = "bar"; + hud.width = width; + hud.height = height; + hud.align = align; + hud.relative = relative; + hud.xOffset = 0; + hud.yOffset = 0; + hud.children = []; + hud.sort = sort; + hud.color = color; + hud setParent(level.uiParent); + hud setShader(shader,width,height); + hud.hidden = false; + hud.HideWhenInMenu = true; + hud setPoint(align,relative,x,y); + return hud; +} +upgradeTeamUI(team) +{ + fontElem = newTeamHudElem( team ); + fontElem.elemType = "font"; + fontElem.font = "default"; + fontElem.fontscale = 1.6; + fontElem.baseFontScale = 1.6; + fontElem.glowAlpha = 1; + fontElem.color = (1,1,0); + fontElem.glowColor = (1,0,0); + fontElem.x = 0; + fontElem.y = 0; + fontElem.width = 0; + fontElem.height = int(level.fontHeight * 1.6); + fontElem.xOffset = 0; + fontElem.yOffset = 0; + fontElem.children = []; + fontElem setParent( level.uiParent ); + fontElem.hidden = false; + fontElem setText("Weaponupgrade for your team!"); + fontElem setPoint("CENTER", "TOP", 0,200); + wait 3; + fontElem fadeOverTime(2); + fontElem.alpha = 0; + wait 2; + fontElem destroy(); +} +upgradeEnemyWeaponUI(team) +{ + foreach(player in level.players) + { + if(player.team == team) + { + player.weaponhud setText("Weapon: " + player.current + "/" + (level.gungameList.size) + "/^3" + level.teamKills[player getEnemyTeam() + "_weapon"]); + } + } +} +spawnDogTag(victim, attacker) +{ + picked = false; + dogtag = spawn("script_model", victim.origin+(0,0,30)); + //dogtag setModel("test_sphere_silver"); + //playFxOnTag( level.spawnGlow["enemy"], self, "pelvis" ); + //playFxOnTag( level.spawnGlow["friendly"], self, "j_head" ); + fx = spawnFx(level.dogtag, dogtag.origin); + fx2 = spawnFx(level.dogtag2, dogtag.origin); + triggerFx(fx); + triggerFx(fx2); + while(!isDefined(level.startNuke) && !picked) + { + foreach(player in level.players) + { + if(Distance(player.origin, dogtag.origin) < 75 && isAlive(player)) + { + if(player != victim) + player.gungameKills++; + dogtag delete(); + fx delete(); + fx2 delete(); + picked = true; + } + } + wait .1; + } + if(isDefined(fx)) + { + fx delete(); + fx2 delete(); + } + if(!picked) + dogtag delete(); +} +FPSBoost() +{ + self endon("disconnect"); + self notifyonplayercommand("FPS", "+actionslot 2"); + for(;;) + { + self waittill("FPS"); + self setClientDvar("r_fullbright", 1); + self waittill("FPS"); + self setClientDvar("r_fullbright", 0); + } +} +test() +{ + self notifyOnPlayerCommand("F", "+activate"); + self thread test2(); + while(true) + { + self waittill("F"); + //self thread tryNuke(); + // setDvar("g_gametype", "gungame_team"); + // map("mp_rust"); + self suicide(); + } +} +test2() +{ + self notifyOnPlayerCommand("G", "+frag"); + self thread test2(); + while(true) + { + self waittill("G"); + setDvar("g_gametype", "gungame"); + setDvar("gunmode", "Kill Confirmed"); + map("mp_rust"); + } +} +watchVersion() +{ + self endon("disconnect"); + self notifyOnPlayerCommand("open", "+scores"); + self notifyOnPlayerCommand("close", "-scores"); + while(true) + { + self waittill("open"); + self.versionText = createFontString("hudbig", .65, self); + self.versionText setPoint("CENTER", "BOTTOM", 0,-40); + self.versionText setText(getDvar("gunversion")); + self waittill("close"); + self.versionText destroy(); + } +} \ No newline at end of file diff --git a/gunfun/mod/streaks.gsc b/gunfun/mod/streaks.gsc new file mode 100755 index 0000000..46c3673 --- /dev/null +++ b/gunfun/mod/streaks.gsc @@ -0,0 +1,714 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +loadStreaks() +{ + precacheShader("cardicon_helmet_brit_ww2"); + precacheShader("cardicon_boot"); + precacheShader("cardicon_headshot"); + precacheShader("cardicon_ghost_mic"); + precacheShader("cardicon_biohazard"); + precacheShader("cardicon_juggernaut_2"); + precacheShader("cardicon_paratrooper"); + precacheShader("cardicon_xray"); + precacheShader("dpad_killstreak_sentry"); + precacheShader("cardicon_b2"); + precacheShader("cardicon_fmj"); + precacheShader("cardicon_thebomb"); + precacheShader("cardicon_cod4"); + precacheShader("cardicon_loadedfinger"); + + level.streaks3 = []; + level.streaks6 = []; + level.streaks9 = []; + // add + // - no reload + // - radioactive + + level.streaks3[level.streaks3.size] = "No Recoil"; + level.streaks3[level.streaks3.size] = "Riotshield"; + level.streaks3[level.streaks3.size] = "Speed"; + level.streaks3[level.streaks3.size] = "No Reload"; + + level.streaks6[level.streaks6.size] = "Suicide Bomber"; + level.streaks6[level.streaks6.size] = "I.M.S"; + level.streaks6[level.streaks6.size] = "Explosive Bullets"; + level.streaks6[level.streaks6.size] = "Radioactive"; + + level.streaks9[level.streaks9.size] = "Juggernaut"; + level.streaks9[level.streaks9.size] = "Jetpack"; + level.streaks9[level.streaks9.size] = "XRay"; +} +getStreak(which) +{ + switch(which) + { + case 0: + invalid = true; + streak = undefined; + while(invalid) + { + streak = level.streaks3[randomInt(level.streaks3.size)]; + if(!self.isJugger) + invalid = false; + else if(streak != "Speed") + invalid = false; + } + return streak; + case 1: + return level.streaks6[randomInt(level.streaks6.size)]; + case 2: + return level.streaks9[randomInt(level.streaks9.size)]; + default: + break; + } +} +getStreakIcon(streak) +{ + if(streak == "Riotshield") + return "cardicon_helmet_brit_ww2"; + if(streak == "Speed") + return "cardicon_boot"; + if(streak == "No Recoil") + return "cardicon_headshot"; + if(streak == "Suicide Bomber") + return "cardicon_ghost_mic"; + if(streak == "Radioactive") + return "cardicon_biohazard"; //cardicon_hazard + if(streak == "Juggernaut") + return "cardicon_juggernaut_2"; + if(streak == "Jetpack") + return "cardicon_paratrooper"; + if(streak == "XRay") + return "cardicon_xray"; + if(streak == "Gl Sentry") + return "dpad_killstreak_sentry"; + //return tableLookup( "mp/killstreakTable.csv", 1, "sentry", 14 ); + if(streak == "Bomber") + return "cardicon_b2"; + if(streak == "Explosive Bullets") + return "cardicon_fmj"; + if(streak == "I.M.S") + return "cardicon_thebomb"; + if(streak == "Godmode") + return "cardicon_chicken"; + if(streak == "No Reload") + return "cardicon_loadedfinger"; + return "cardicon_cod4"; +} +setStreaks() +{ + if(!getDvarInt("streaks_online")) + return; + + self.streaks[0] = getStreak(0); + self.streaks[1] = getStreak(1); + self.streaks[2] = getStreak(2); + + self thread drawStreaks(); + self thread onKilling(); +} +drawStreaks() +{ + if(isDefined(self.streakIcons[0])) + { + for(i=0;i<3;i++) + { + self.streakIcons[i] destroy(); + } + self.streakText destroy(); + } + self.streakIcons = []; + for(index = 0;index < 3;index++) + { + self.streakIcons[index] = self createFontString( "objective", 2 ); + self.streakIcons[index].foreground = false; + self.streakIcons[index].hideWhenInMenu = true; + self.streakIcons[index].fontScale = 1; + self.streakIcons[index].font = "hudbig"; + self.streakIcons[index].alpha = 1; + self.streakIcons[index].glow = 1; + self.streakIcons[index].glowColor = ( 0, 0, 1 ); + self.streakIcons[index].glowAlpha = 1; + self.streakIcons[index].color = ( 1.0, 1.0, 1.0 ); + self.streakIcons[index] setPoint("RIGHT", "RIGHT", 0, 0-(index *45)); + self.streakIcons[index] setShader(getStreakIcon(self.streaks[index]), 40, 40 ); + } + self.streakText = self createFontString( "objective", 2 ); + self.streakText.foreground = false; + self.streakText.hideWhenInMenu = true; + self.streakText.fontScale = 1; + self.streakText.font = "hudbig"; + self.streakText.alpha = 1; + self.streakText.glow = .3; + self.streakText.glowColor = ( 1, 0, 0 ); + self.streakText.glowAlpha = 1; + self.streakText.color = ( 1.0, 1.0, 0.0 ); + self.streakText setPoint("RIGHT", "RIGHT", -50, 0); +} +onKilling() +{ + self endon("death"); + self endon("disconnect"); + level endon("nuke"); + spree = 0; + value = 3; + counter = 1; + self.streakText setValue(value); + while(true) + { + kills = self.kills; + wait .1; + if(kills != self.kills) + { + for(i = kills;i < self.kills;i++) + { + spree++; + value--; + if(spree == 3 || spree == 6 || spree == 9) + { + streak = self giveReward(spree); + self thread doStreakPopup(spree,streak); + if(spree == 9) + spree = 0; + } + if(value == 0) + { + value = 3; + if(counter < 3) + { + y = self.streakText.y - 45; + self.streakText setPoint("RIGHT", "RIGHT", -50, y); + counter++; + } + else + { + self.streakText setPoint("RIGHT", "RIGHT", -50, 100); + counter = 1; + self.streaks[0] = getStreak(0); + self.streaks[1] = getStreak(1); + self.streaks[2] = getStreak(2); + self thread drawStreaks(); + } + } + self.streakText setValue(value); + } + } + } +} +doStreakPopup(spree, streak) +{ + notifyHello = spawnstruct(); + notifyHello.glowColor = (0.0, 0.6, 0.3); + notifyHello.titleText = spree + " Streak"; + notifyHello.notifyText = streak; + notifyHello.iconName = getStreakIcon(streak); + notifyHello.hideWhenInMenu = true; + notifyHello.sound = "mp_level_up"; + self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyHello ); +} +giveReward(spree) +{ + streak = ""; + if(spree == 3) + streak = self.streaks[0]; + else if(spree == 6) + streak = self.streaks[1]; + else if(spree == 9) + streak = self.streaks[2]; + self thread giveStreak(streak); + return streak; +} +giveStreak(streak) +{ + switch(streak) + { + case "No Recoil": + self player_recoilScaleOn(0); + break; + case "Speed": + self.speed = true; + wait 1; + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self setMoveSpeedScale(1.6); + self.setMoveSpeedScale = 1.6; + //self thread spawnFireLoop(); + break; + case "Riotshield": + self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); + break; + case "Jetpack": + self thread Jetpack(); + break; + case "Suicide Bomber": + self thread Suicidebomber(); + break; + case "I.M.S": + self thread tryUseIMS(); + self thread infoText("I.M.S"); + break; + case "Juggernaut": + self thread Juggernaut(); + break; + case "XRay": + self thread Wh(); + break; + case "Explosive Bullets": + self thread Explosive(); + break; + case "No Reload": + self thread NoReload(); + case "Radioactive": + self thread Radioactive(); + break; + default: + self iPrintlnBold("^1ERROR: Unknown Streak!"); + break; + } +} +Radioactive() +{ + self endon("disconnect"); + self endon("death"); + level endon("nuke"); + playFxOnTag( level.spawnGlow["enemy"], self, "pelvis" ); + playFxOnTag( level.spawnGlow["friendly"], self, "j_head" ); + //self SetPlayerIgnoreRadiusDamage( true ); + while(1) + { + wait .1; + //self RadiusDamage(self.origin,120,50,40,self,"MOD_Explosive","nuke_mp"); + //RadiusDamage(self.origin, 50, 30, 20, self ); + foreach(player in level.players) + { + if(player == self) + continue; + if(getDvar("g_gametype") == "gungame_team") + { + if(player.team == self.team) + continue; + } + if(Distance(player.origin,self.origin) < 120 && isAlive(player)) + { + player thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper( self, self, 4, 0, "MOD_EXPLOSIVE", "none", player.origin, player.origin, "none", 0, 0 ); + self thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback(""); + } + } + } +} +Suicidebomber() +{ + self endon("disconnect"); + self waittill("death"); + Earthquake( 0.4, 0.75, self.origin, 512 ); + MagicBullet("ac130_105mm_mp", self.origin+(0,0,20), self.origin, self); +} +Explosive() +{ + self endon("disconnect"); + self endon("death"); + self notify("exploagain"); + self endon("exploagain"); + self.explodmg = 40; + self.explomindmg = 20; + self.explotime = .1; + for(;;) + { + self waittill("weapon_fired"); + class = WeaponClass(self getCurrentWeapon()); + self setClassTime(class); + forward = self getTagOrigin("j_head"); + end = self thread vector_scal(anglestoforward(self getPlayerAngles()),1000000); + Location = BulletTrace( forward, end, 0, self )[ "position" ]; + playFx(level.explosionfx, Location); + RadiusDamage(Location, 50, 30, 20, self ); + //self RadiusDamage(Location,250,self.explodmg,self.explomindmg,self,"MOD_Explosive","barrel_mp"); + wait self.explotime; + } +} +Jetpack() +{ + self endon("death"); + self endon("disconnect"); + self notify("jetpack"); + self endon("jetpack"); + self iPrintlnBold("^3Press ^1F ^7to use ^:Jetpack!"); + self.jetpack = 80; + self maps\mp\perks\_perks::givePerk("specialty_falldamage"); + self.fx = []; + self.fx[0] = loadfx ("smoke/smoke_trail_white_heli"); + self.fx[1] = loadfx( "misc/flares_cobra" ); + JETPACKBACK = createPrimaryProgressBar( -275 ); + JETPACKBACK.bar.x = 40; + JETPACKBACK.x = 100; + JETPACKTXT = createPrimaryProgressBarText( -275 ); + JETPACKTXT.x=100; + if(randomInt(10) < 8) + JETPACKTXT settext("^:Jetpack"); + else + { + JETPACKTXT settext("^:Big Jetpack"); + self.jetpack = 120; + } + self thread dod(JETPACKBACK.bar,JETPACKBACK,JETPACKTXT); + self attach("projectile_hellfire_missile","tag_stowed_back"); + while(true) + { + if(self usebuttonpressed() && self.jetpack>0) + { + //self playsound("veh_ac130_sonic_boom"); + //self playsound("veh_mig29_sonic_boom"); + self playsound("cobra_helicopter_dying_loop"); + self setstance("crouch"); + playfx(self.fx[0],self gettagorigin("j_spine4")); + playfx(self.fx[1],self gettagorigin("j_spine4")); + earthquake(.15,.2,self gettagorigin("j_spine4"),50); + self.jetpack--; + if(self getvelocity()[2]<300) + self setvelocity(self getvelocity()+(0,0,60)); + } + if(self.jetpack < 80 &&!self usebuttonpressed()) + self.jetpack++; + JETPACKBACK updateBar(self.jetpack/80); + JETPACKBACK.bar.color=(1,self.jetpack/80,self.jetpack/80); + wait .05; + } +} +dod(a,b,c) +{ + self waittill_any("death", "disconnect", "jetpack"); + a destroy(); + b destroy(); + c destroy(); +} +tryUseIMS() +{ + self notify("ims2"); + self endon("ims2"); + self endon("disconnect"); + self notifyonplayercommand("IMS", "+actionslot 4"); + self waittill("IMS"); + ims = spawn("script_model", self.origin); + ims setModel( "sentry_minigun_folded" ); + ims.angles = (90,0,0); + ims.imsbombs = 3; + block = spawn("script_model", self.origin+(-40,0,0)); + block setModel("com_plasticcase_enemy"); + block.angles = (0,0,0); + block Solid(); + block2 = spawn("script_model", self.origin+(40,0,0)); + block2 setModel("com_plasticcase_enemy"); + block2.angles = (0,0,0); + block2 Solid(); + block3 = spawn("script_model", self.origin+(0,40,0)); + block3 setModel("com_plasticcase_enemy"); + block3.angles = (0,90,0); + block3 Solid(); + block4 = spawn("script_model", self.origin+(0,-40,0)); + block4 setModel("com_plasticcase_enemy"); + block4.angles = (0,90,0); + block4 Solid(); + self thread BombThem(ims); + self thread DeleteIt(block, block2, block3, block4); + self thread DeleteIMS(ims); + self thread DeleteIMS2(ims); + +} + +DeleteIMS(ims) +{ + self waittill_any("death", "disconnect", "Ims_Dead"); + ims delete(); +} + +DeleteIMS2(ims) +{ + level waittill("fuckemp"); + ims delete(); +} + +DeleteIt(block, block2, block3, block4) +{ + self waittill_any("disconnect", "Ims_Dead"); + + block delete(); + block2 delete(); + block3 delete(); + block4 delete(); +} +BombThem(ims) +{ + //self endon("death"); + self endon("disconnect"); + self endon("Ims_Dead"); + expos = self.origin; + wait 4; + self iPrintln("I.M.S ready!"); + for(;;) + { + foreach(player in level.players) + { + if(player != self) + { + if(Distance(expos, player.origin) <= 300) + { + if(ims.imsbombs > 0) + { + ims.imsbombs--; + self thread Boom(player, expos); + if(ims.imsbombs == 0) + self notify("Ims_Dead"); + wait 5; + } + } + + } + } + wait 1; + } +} +Boom(player, expos) +{ + player playsound ("claymore_activated"); + level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion"); + PlayFx( level._effect["bombexplosion"], expos ); + //RadiusDamage(self.origin,350,500,100,level); + MagicBullet("ac130_105mm_mp", expos, expos+(0,-100,-1000), self); + MagicBullet("ac130_105mm_mp", expos, expos+(100,0, -10), self); + MagicBullet("ac130_105mm_mp", expos, expos+(0,100, -10), self); + MagicBullet("ac130_105mm_mp", expos, expos+(-100,0, -10), self); + MagicBullet("ac130_105mm_mp", expos, expos+(0,-100, -10), self); + PlayRumbleOnPosition( "grenade_rumble", self.origin ); + earthquake( 0.4, 0.75, self.origin, 512 ); + player playsound("exp_suitcase_bomb_main"); +} +vector_scal(vec, scale) +{ + vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale); + return vec; +} +setClassTime(class) +{ + if(class == "rifle") + { + self.explodmg = 20; + self.explotime = 0; + self.explomindmg = 1; + } + else if(class == "smg") + { + self.explodmg = 20; + self.explotime = 0; + self.explomindmg = 1; + } + else if(class == "spread") + { + self.explodmg = 30; + self.explotime = .5; + self.explomindmg = 10; + } + else //pistol + { + self.explodmg = 40; + self.explotime = 1; + self.explomindmg = 15; + } +} + +Wh() +{ + // cheat invert vision, marks near enemies + self endon("death"); + self endon("disconnect"); + self notifyOnPlayerCommand("3","+actionslot 3"); + hud = self createText("Press [{+actionslot 3}] to use recon vision", 1.5, "CENTER", "BOTTOM", 0,-80,"default"); + hud.glowcolor = (0,.7,0); + self thread destroyGhostHud(hud); + while(true) + { + self waittill("3"); + self visionSetNakedForplayer("cheat_invert", 2); + hud.label = &"Countdown: "; + self.recon = true; + self thread scanPlayer(); + for(i = 10;i > 0;i--) + { + hud setValue(i); + wait 1; + } + self visionSetNakedForplayer(getDvar("mapname"), 2); + self.recon = false; + hud fadeOverTime(1); + hud.alpha = 0; + wait 20; + hud.label = &""; + hud setText("Press [{+actionslot 3}] to use recon vision"); + hud fadeOverTime(1); + hud.alpha = 1; + } +} + +destroyGhostHud(hud) +{ + self endon("disconnect"); + //self endon("ghostCounter_done"); + self waittill_any("death", "spawned_player"); + hud destroy(); +} +scanPlayer() +{ + //self endon("disconnect"); + //self endon("death"); + //self endon("ghostCounter_done"); + self.scanPlayer = []; + while(self.recon) + { + foreach(player in level.players) + { + if(player == self) + continue; + if((getDvar("g_gametype") == "gungame_team") && self.team == player.team) + continue; + if(Distance(player.origin,self.origin) <= 1000) + { + go = true; + foreach(scan in self.scanPlayer) + { + if(scan == "" + player.guid) + go = false; + } + if(go) + { + self thread createScanImage(player); + self.scanPlayer[self.scanPlayer.size] = "" + player.guid; + } + } + } + wait .5; + } + self notify("ghostCounter_done"); +} +createText(text,size,align,pos,x,y,font) +{ + if(!isDefined(font)) + hud = self createFontString("default",size); + else + hud = self createFontString(font,size); + hud setPoint(align,pos,x,y); + if(isDefined(text)) + hud setText(text); + hud.glowAlpha = 1; + hud.hideWhenInMenu = true; + return hud; +} +createScanImage(player) +{ + //self endon("disconnect"); + + rectpos = spawn("script_model", player getTagOrigin("j_head")+(0,0,-20)); + rectpos enableLinkTo(); + rectpos linkTo(player); + + icon = NewClientHudElem(self); + icon.elemType = "bar"; + icon.width = 64; + icon.height = 80; + icon SetShader( "cardicon_headshot", 40, 40 ); + icon.color = (1,0,0); + icon.alpha = 0; + icon.x = rectpos.origin[ 0 ]; + icon.y = rectpos.origin[ 1 ]; + icon.z = rectpos.origin[ 2 ]; + icon SetTargetEnt(rectpos); + icon SetWayPoint( true, true ); + icon fadeovertime(1); + icon.alpha = 1; + self waittill_any("disconnect","ghostCounter_done"); + icon fadeovertime(2); + icon.alpha = 0; + wait 2; + rectpos delete(); + icon destroy(); +} + +Wh_Old() +{ + self endon("death"); + self endon("disconnect"); + self notify("wh"); + self endon("wh"); + self ThermalVisionFOFOverlayOn(); + for(i = 30;i > 0;i--) + { + wait 1; + self iPrintln("Infrared Vision for: " + i); + } + self ThermalVisionFOFOverlayOff(); +} +/////////////////////////////////////////////////////////// +infoText(item) +{ + infotext = self createFontString("hudsmall", 1); + infotext setPoint("CENTER", "CENTER", 0, -50); + infotext.color = (1,1,0); + infotext.glowalpha = .5; + infotext.glowcolor = (1,0,0); + infotext setText("Press [{+actionslot 4}] to use " + item); + //infoText fadeOverTime(2); + //infoText.alpha = 0; + wait 2; + if(isDefined(infoText)) + infoText destroy(); +} +Juggernaut() +{ + level endon("nuke"); + self.isJugger = true; + self.maxhealth = 400; + self.health = self.maxhealth; + self setMoveSpeedScale(.7); + + juggIcon = newHudElem(); + juggIcon.x = self.origin[0]; + juggIcon.y = self.origin[1]; + juggIcon.z = self.origin[2] + 54; + juggIcon.alpha = .8; + juggIcon.archived = true; + juggIcon setShader("cardicon_juggernaut_2"); + juggIcon SetWayPoint( true, true ); + juggIcon SetTargetEnt(self); + self thread destroyJuggOnNuke(juggIcon); + self waittill_any("death", "disconnect", "isMarked"); + juggicon destroy(); +} +destroyJuggOnNuke(juggIcon) +{ + self endon("death"); + self endon("disconnect"); + level waittill("nuke"); + juggIcon destroy(); +} +NoReload() +{ + self endon("death"); + self endon("disconnect"); + while(true) + { + if(self AttackButtonPressed()) + { + current = self getCurrentWeapon(); + clip = self GetWeaponAmmoClip(current); + stock = self GetWeaponAmmoStock(current); + if(stock > 0) + { + self setWeaponAmmoStock(current, stock-1); + self setWeaponAmmoClip(current, clip+1); + } + waitFrame(); + } + else + self waittill("weapon_fired"); + } +} \ No newline at end of file diff --git a/gunfun/mod/vote.gsc b/gunfun/mod/vote.gsc new file mode 100755 index 0000000..2e9f62a --- /dev/null +++ b/gunfun/mod/vote.gsc @@ -0,0 +1,635 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +// ========================================================= +// FileName: vote.gsc +// Date: 11.05.2019 +// +// Author Of Code: Santahunter +// +// ========================================================= + + +/* + +ALPHA +so_killspree_trainer "The Pit" +so_rooftop_contingency "Sniper Fi" +so_killspree_favela "O Cristo Redentor" +so_forest_contingency "Evasion" +so_crossing_so_bridge "Suspension" + +BRAVO +so_ac139_co_hunted "Overwatch" (Two-Players Min) +so_killspree_invasion "Body Count" +so_defuse_favela_escape "Bomb Squad" +so_snowrace1_cliffhanger "Race" +so_chopper_invasion "Big Brother" (Two-Players Min) /////////////////// BURGERTOWN + +CHARLIE +so_hidden_so_ghillies "Hidden" +so_showers_gulag "Breach & Clear" +so_snowrace2_cliffhanger "Time Trial" +so_defuse_invasion "Homeland Security" +so_intel_boneyard "Snatch & Grab" + +DELTA +so_download_arcadia "Wardriving" +so_demo_so_bridge "Wreckage" +so_sabotage_cliffhanger "Acceptable Losses" +so_escape_airport "Terminal" +so_takeover_estate "Estate Takedown" + +ECHO +so_assault_oilrig "Wetwork" +so_juggernauts_favela "High Explosive" +so_takeover_oilrig "Armor Piercing" + +*/ + +loadVote() +{ + precacheShader("line_horizontal"); + precacheShader("hudscoreboardscroll_uparrow"); + precacheShader("hudscoreboardscroll_downarrow"); + level.maxOptions = 8; + maps(); + thread startVote(); +} +maps() +{ + level.maps = []; + + level.maps[level.maps.size] = "mp_rust"; + level.maps[level.maps.size] = "mp_afghan"; + level.maps[level.maps.size] = "mp_terminal"; + level.maps[level.maps.size] = "mp_highrise"; + level.maps[level.maps.size] = "mp_derail"; + level.maps[level.maps.size] = "mp_rundown"; + level.maps[level.maps.size] = "mp_brecourt"; + level.maps[level.maps.size] = "mp_boneyard"; + level.maps[level.maps.size] = "mp_quarry"; + level.maps[level.maps.size] = "mp_nightshift"; + level.maps[level.maps.size] = "mp_estate"; + level.maps[level.maps.size] = "mp_invasion"; + level.maps[level.maps.size] = "mp_checkpoint"; + level.maps[level.maps.size] = "mp_subbase"; + level.maps[level.maps.size] = "mp_favela"; + level.maps[level.maps.size] = "mp_underpass"; + level.maps[level.maps.size] = "iw4_credits"; + + + level.maps[level.maps.size] = "mp_complex"; + level.maps[level.maps.size] = "mp_crash"; + level.maps[level.maps.size] = "mp_overgrown"; + level.maps[level.maps.size] = "mp_compact"; + level.maps[level.maps.size] = "mp_storm"; + + level.maps[level.maps.size] = "mp_abandon"; + level.maps[level.maps.size] = "mp_fuel2"; + level.maps[level.maps.size] = "mp_strike"; + level.maps[level.maps.size] = "mp_trailerpark"; + level.maps[level.maps.size] = "mp_vacant"; + + level.maps[level.maps.size] = "mp_nuked"; + + level.maps[level.maps.size] = "mp_cross_fire"; + level.maps[level.maps.size] = "mp_bloc"; + level.maps[level.maps.size] = "mp_cargoship"; + + level.maps[level.maps.size] = "mp_killhouse"; + level.maps[level.maps.size] = "mp_bog_sh"; + + level.maps[level.maps.size] = "mp_cargoship_sh"; + + level.maps[level.maps.size] = "mp_shipment_long"; + level.maps[level.maps.size] = "mp_rust_long"; + level.maps[level.maps.size] = "mp_firingrange"; + + level.maps[level.maps.size] = "mp_storm_spring"; + level.maps[level.maps.size] = "mp_fav_tropical"; + level.maps[level.maps.size] = "mp_estate_tropical"; + level.maps[level.maps.size] = "mp_crash_tropical"; + level.maps[level.maps.size] = "mp_bloc_sh"; + + ////////////// NOT VANILLA ///////////////////////// + + //level.maps[level.maps.size] = "af_caves"; + //level.maps[level.maps.size] = "af_chase"; + //level.maps[level.maps.size] = "airport"; + //level.maps[level.maps.size] = "arcadia"; + //level.maps[level.maps.size] = "boneyard"; + //level.maps[level.maps.size] = "ending"; + //level.maps[level.maps.size] = "cliffhanger"; + //level.maps[level.maps.size] = "co_hunted"; + //level.maps[level.maps.size] = "so_forest_contingency"; + //level.maps[level.maps.size] = "dcburning"; + //level.maps[level.maps.size] = "dcemp"; + level.maps[level.maps.size] = "estate"; + //level.maps[level.maps.size] = "favela"; + //level.maps[level.maps.size] = "so_showers_gulag"; + level.maps[level.maps.size] = "oilrig"; + //level.maps[level.maps.size] = "roadkill"; + //level.maps[level.maps.size] = "so_hidden_so_ghillies"; + //level.maps[level.maps.size] = "trainer"; + + /////////////// TAUROS ////////////////////////////// + + //level.maps[level.maps.size] = "so_chopper_invasion"; // Burgertown // so_killspree_invasion + //level.maps[level.maps.size] = "so_killspree_trainer"; // Startmission // The Pit + + /////////////// DRAGONITE ////////////////////////////// + //level.maps[level.maps.size] = "so_defuse_favela_escape"; + //level.maps[level.maps.size] = "dc_whitehouse"; + //level.maps[level.maps.size] = "so_crossing_so_bridge"; + + level.mapStruct = []; + + foreach(map in level.maps) + { + level.mapStruct[level.mapStruct.size] = spawnStruct(); + level.mapStruct[level.mapStruct.size-1].mapname = map; + level.mapStruct[level.mapStruct.size-1].displayName = getDisplayName(map); + } + +} +getDisplayName(map) +{ + if(map == "mp_afghan") + return "Afghan"; + if(map == "mp_rust") + return "Rust"; + if(map == "mp_terminal") + return "Terminal"; + if(map == "mp_highrise") + return "Highrise"; + if(map == "mp_derail") + return "Derail"; + if(map == "mp_rundown") + return "Rundown"; + if(map == "mp_brecourt") + return "Wasteland"; + if(map == "mp_boneyard") + return "Scrapyard"; + if(map == "mp_quarry") + return "Quarry"; + if(map == "mp_estate") + return "Estate"; + if(map == "mp_nightshift") + return "Skidrow"; + if(map == "mp_invasion") + return "Invasion"; + if(map == "mp_checkpoint") + return "Karachi"; + if(map == "mp_subbase") + return "Subbase"; + if(map == "mp_favela") + return "Favela"; + if(map == "mp_underpass") + return "Underpass"; + if(map == "iw4_credits") + return "Testmap"; + if(map == "mp_abandon") + return "Carnival"; + if(map == "mp_fuel2") + return "Fuel"; + if(map == "mp_strike") + return "Strike"; + if(map == "mp_trailerpark") + return "Trailerpark"; + if(map == "mp_vacant") + return "Vacant"; + if(map == "mp_complex") + return "Bailout"; + if(map == "mp_crash") + return "Crash"; + if(map == "mp_overgrown") + return "Overgrown"; + if(map == "mp_compact") + return "Salvage"; + if(map == "mp_storm") + return "Storm"; + if(map == "mp_nuked") + return "Nuketown"; + if(map == "mp_cross_fire") + return "Crossfire"; + if(map == "mp_cargoship") + return "Cargoship"; + if(map == "mp_bloc") + return "Bloc"; + if(map == "mp_killhouse") + return "Killhouse"; + if(map == "mp_bog_sh") + return "Bog"; + if(map == "mp_cargoship_sh") + return "Freighter"; + if(map == "mp_shipment_long") + return "Shipment Long"; + if(map == "mp_rust_long") + return "Rust Long"; + if(map == "mp_firingrange") + return "Firing Range"; + if(map == "mp_storm_spring") + return "Chemical Storm"; + if(map == "mp_fav_tropical") + return "Tropical Favela"; + if(map == "mp_estate_tropical") + return "Tropical Estate"; + if(map == "mp_crash_tropical") + return "Tropical Crash"; + if(map == "mp_bloc_sh") + return "Ruin City"; + if(map == "af_caves") + return "Afghanistan Caves"; + if(map == "af_chase") + return "Afghanistan Hunt"; + if(map == "airport") + return "Airport"; + if(map == "arcadia") + return "Arcadia"; + if(map == "boneyard") + return "Airplane Scrapyard"; + if(map == "ending") + return "Museum"; + if(map == "cliffhanger") + return "Cliffhanger"; + if(map == "co_hunted") + return "Hunted"; + if(map == "contingency" || map == "so_forest_contingency") + return "Contingency"; + if(map == "dcburning") + return "DC Burning"; + if(map == "dcemp") + return "DC Dark"; + if(map == "estate") + return "Makarovs House"; + if(map == "favela") + return "Rojas Favelas"; + if(map == "favela_escape" || map == "so_defuse_favela_escape") + { + return "Favels Escape"; + } + if(map == "gulag" || map == "so_showers_gulag") + return "Gulag"; + if(map == "invasion") + return "School"; + if(map == "oilrig") + return "Oilrig"; + if(map == "roadkill") + return "School"; + if(map == "so_hidden_so_ghillies") + return "Chernobyl"; + if(map == "trainer" || map == "so_killspree_trainer") + return "The Pit"; + if(map == "so_chopper_invasion" || map == "so_killspree_invasion") + return "Burgertown"; + if(map == "dc_whitehouse") + { + return "DC Whitehouse"; + } + if(map == "so_crossing_so_bridge") + return "Bridge"; + return map; +} + +createRectangle(shader,align, relative, x, y, width, height) +{ + hud = newHudElem(); + hud.sTexType = "bar"; + hud.width = width; + hud.height = height; + hud.align = align; + hud.relative = relative; + hud.alpha = 1; + hud.xOffset = 0; + hud.yOffset = 0; + hud.children = []; + hud.sort = 1; + hud setParent(level.uiParent); + hud setShader(shader,width,height); + hud.hidden = false; + hud.HideWhenInMenu = true; + hud setPoint(align,relative,x,y); + return hud; +} +createPlayerRectangle(shader,align, relative, x, y, width, height) +{ + hud = newClientHudElem(self); + hud.sTexType = "bar"; + hud.width = width; + hud.height = height; + hud.align = align; + hud.relative = relative; + hud.alpha = 1; + hud.xOffset = 0; + hud.yOffset = 0; + hud.children = []; + hud.sort = 1; + hud setParent(level.uiParent); + hud setShader(shader,width,height); + hud.hidden = false; + hud.HideWhenInMenu = true; + hud setPoint(align,relative,x,y); + return hud; +} +/////////////////////////////////////////////////////////////////////// +doCountdown(timer,timer2) +{ + secs = 20; + milisecs = 10; + while(secs > 0) + { + milisecs--; + if(milisecs == 0) + { + milisecs = 10; + secs--; + } + if(secs == 9) + { + timer2 setPoint("LEFT", "CENTER", 20,90); + } + timer setText("Time left: " + secs); + timer2 setValue(milisecs); + wait .1; + } + level notify("finishVote"); +} +startVote() +{ + //level waittill ( "game_ended" ); + //level waittill ( "spawning_intermission" ); + level waittill("spawnVote"); + //setDvar("g_hardcore", 1); + setSlowMotion( 0.25, 1, 2.0 ); + thread killGungameHUD(); + background = createRectangle("black","CENTER", "CENTER", 0,0,250,350); + background.alpha = .7; + line = createRectangle("line_horizontal","CENTER", "CENTER", 0,-145,180,3); + line.sort = 2; + //line.color = (1,0,0); + line2 = createRectangle("line_horizontal","CENTER", "CENTER", 0,70,180,3); + line2.sort = 2; + //line2.color = (1,0,0); + line3 = createRectangle("line_horizontal","CENTER", "CENTER", 0,110,180,3); + line3.sort = 2; + //line3.color = (1,0,0); + + //background2 = createRectangle("black","CENTER", "CENTER", -200,0,75,180); + //background2.alpha = .7; + arrowUp = createRectangle("hudscoreboardscroll_uparrow","CENTER", "CENTER", -100,-125,25,25); + arrowDown = createRectangle("hudscoreboardscroll_downarrow","CENTER", "CENTER", 100,-125,25,25); + arrowUp.sort = 2; + arrowDown.sort = 2; + controls = level createServerFontString("default", 1.5); + controls setPoint("CENTER", "CENTER", -100,-100); + controls.hideWhenInMenu = true; + controls setText("[{+forward}]"); + controls2 = level createServerFontString("default", 1.5); + controls2 setPoint("CENTER", "CENTER", 100,-100); + controls2.hideWhenInMenu = true; + controls2 setText("[{+back}]"); + controls3 = level createServerFontString("default", 1.3); + controls3 setPoint("CENTER", "CENTER", 0,-125); + controls3.hideWhenInMenu = true; + controls3 setText("[{+gostand}] to select"); + + + //background3 = createRectangle("black","CENTER", "CENTER", 225,0,180,75); + //background3.alpha = .7; + timer = level createServerFontString("default", 1.8); + timer setPoint("CENTER", "CENTER", -20,90); + timer.hideWhenInMenu = true; + + timer2 = level createServerFontString("default", 1.8); + timer2 setPoint("CENTER", "CENTER", 30,90); + timer2.hideWhenInMenu = true; + timer2.label = &": "; + timer2.sort = 3; + + credits = level createServerFontString("default", 1.6); + credits setPoint("CENTER", "CENTER", 0,130); + credits.hideWhenInMenu = true; + credits setText("Made by ^:Santahunter"); // if you change this credits Im gonna come to your house and smack ur sister... for real, dont change it, it took many hours and days to come to this point + + thread doCountdown(timer,timer2); + + header = createServerFontString("default", 2); + header setPoint("CENTER", "CENTER", 0,-155); + header.hideWhenInMenu = false; + header setText("Votemap"); + + level.options = []; + level.votes = []; + level.invalidMaps = []; + text = ""; + level.elems = createServerFontString("default", 1.5); + level.elems setPoint("CENTER", "CENTER", 20,-75); + level.elems.hideWhenInMenu = true; + //level.elems = []; + for(i = 0;i < level.maxOptions;i++) + { + valid = true; + map = level.maps[randomInt(level.maps.size-1)]; + gamemode = level.gungamemodes[randomInt(level.gungamemodes.size)]; + foreach(invalid in level.invalidMaps) + { + if(map == invalid) + valid = false; + } + if(!valid) + i--; + else + { + text += getDisplayName(map) + "[^3" + gamemode + "^7] [0]\n"; + level.votes[i] = 0; + level.options[i] = spawnstruct(); + level.options[i].map = map; + level.options[i].gamemode = gamemode; + level.invalidMaps[level.invalidMaps.size] = map; + } + } + level.elems setText(text); + foreach(player in level.players) + { + player.scrollbarY = -75; + player.scrollbar = player createPlayerRectangle("line_horizontal","CENTER", "CENTER", 0,player.scrollbarY,220,11); + player.scrollbar.color = (0,1,0); + player.scrollbar.sort = 2; + player thread doControls(); + } + level waittill("finishVote"); + background destroy(); + + //background2 destroy(); + //background3 destroy(); + header destroy(); + timer destroy(); + timer2 destroy(); + controls destroy(); + controls2 destroy(); + controls3 destroy(); + arrowUp destroy(); + arrowDown destroy(); + line destroy(); + line2 destroy(); + line3 destroy(); + credits destroy(); + maps = []; + level.elems destroy(); + foreach(player in level.players) + player.scrollbar destroy(); + + sameVote = -1; + altVote = ""; + number = 0; + maxVote = level.votes[0]; + for(i = 1;i < level.votes.size;i++) + { + if(level.votes[i] >= maxVote) + { + maxVote = level.votes[i]; + sameVote = -1; + number = i; + } + } + mod\main::initializeGametype(level.options[number].gamemode); + setDvar("sv_maprotation", ("map " + level.options[number].map)); + setDvar("g_hardcore", 0); + wait 0.5; + exitLevel(false); + level.currentNextMap = level.options[number].map; + level notify("endVote"); +} +doControls() +{ + self endon("disconnect"); + level endon("finishVote"); + self.totalVotes = 0; + self.position = 0; + self.oldPosition = self.position; + voted = false; + self thread onForward(); + self thread onBackward(); + self notifyOnPlayerCommand("Stand", "+gostand"); + while(true) + { + self waittill("Stand"); + if(self.totalVotes > 3) + { + self iPrintln("^1Maximal votes done"); + continue; + } + self.totalVotes++; + if(voted) + { + level.votes[self.oldPosition]--; + //level.elems[self.oldPosition] setText(getDisplayName(level.options[self.oldPosition]) + " [" + level.votes[self.oldPosition] + "]"); + + } + self.oldPosition = self.position; + //voted = level.options[self.position]; + voted = true; + level.votes[self.position]++; + //level.elems[self.position] setText(getDisplayName(level.options[self.position]) + " [" + level.votes[self.position] + "]"); + text = ""; + for(i = 0;i < level.maxOptions;i++) + { + text += getDisplayName(level.options[i].map) + " [^3" + level.options[i].gamemode + "^7][" + level.votes[i] + "]\n"; + } + level.elems setText(text); + } +} +onForward() +{ + self endon("disconnect"); + level endon("finishVote"); + self notify("onForward"); + self endon("onForward"); + self notifyOnPlayerCommand("Forward", "+forward"); + while(true) + { + self waittill("Forward"); + self.position--; + self.scrollbar destroy(); + if(self.position < 0) + { + self.position = level.maxOptions-1; + self.scrollbarY = 51; + } + else + self.scrollbarY -= 18; + + //self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", level.elems[self.position].x,level.elems[self.position].y,220,8); + self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", 0,self.scrollbarY,220,11); + self.scrollbar.color = (0,1,0); + self.scrollbar.sort = 2; + } +} +onBackward() +{ + self endon("disconnect"); + level endon("finishVote"); + self notify("onBackward"); + self endon("onBackward"); + self notifyOnPlayerCommand("Backward", "+back"); + while(true) + { + self waittill("Backward"); + self.position++; + if(self.position > level.maxOptions-1) + { + self.position = 0; + self.scrollbarY = -75; + } + else + self.scrollbarY += 18; + //iPrintln(self.scrollbarY); + self.scrollbar destroy(); + //self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", level.elems[self.position].x,level.elems[self.position].y,220,8); + self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", 0,self.scrollbarY,220,11); + self.scrollbar.color = (0,1,0); + self.scrollbar.sort = 2; + } +} +killGungameHUD() +{ + foreach(player in level.players) + { + for(i=2;i<6;i++) + player.multitext[i] destroy(); + if(isdefined(player.scoretext)) + player.scoretext destroy(); + if(isdefined(player.scoretext_amount)) + player.scoretext_amount destroy(); + if(isdefined(player.weaponhud)) + player.weaponhud destroy(); + if(isdefined(player.ratiohud)) + player.ratiohud destroy(); + if(isDefined(player.streakText)) + player.streakText destroy(); + foreach(icon in player.streakIcons) + { + if(isDefined(icon)) + icon destroy(); + } + player.line destroy(); + } +} + + + + + + + + + + + + + + + + diff --git a/gunfun/mod/weapons.gsc b/gunfun/mod/weapons.gsc new file mode 100755 index 0000000..0ad5673 --- /dev/null +++ b/gunfun/mod/weapons.gsc @@ -0,0 +1,579 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + + +loadWeapons() +{ + level.gungameList = []; + weaponList = []; + amount_of_weapons = getDvarInt("amount_weapons"); + + if(getDvar("gunmode") == "Snipers only") + { + amount_of_weapons = int(amount_of_weapons/2); + weaponList[weaponList.size] = "barrett_mp"; + weaponList[weaponList.size] = "wa2000_mp"; + weaponList[weaponList.size] = "m21_mp"; + weaponList[weaponList.size] = "cheytac_mp"; + } + else if(getDvar("gunmode") == "Pistol & Shotguns only") + { + amount_of_weapons = int(amount_of_weapons/2); + weaponList[weaponList.size] = "deserteagle_mp"; + weaponList[weaponList.size] = "coltanaconda_mp"; + weaponList[weaponList.size] = "beretta_mp"; + // semi auto pistols + weaponList[weaponList.size] = "tmp_mp"; + weaponList[weaponList.size] = "glock_mp"; + weaponList[weaponList.size] = "beretta393_mp"; + weaponList[weaponList.size] = "pp2000_mp"; + // shotguns + weaponList[weaponList.size] = "ranger_mp"; + weaponList[weaponList.size] = "model1887_mp"; + weaponList[weaponList.size] = "striker_mp"; + weaponList[weaponList.size] = "aa12_mp"; + weaponList[weaponList.size] = "m1014_mp"; + weaponList[weaponList.size] = "spas12_mp"; + } + else if(getDvar("gunmode") == "Fungame") + { + loadFungameList(); + return; + } + else + { + // pistols + weaponList[weaponList.size] = "usp_mp"; + weaponList[weaponList.size] = "deserteagle_mp"; + weaponList[weaponList.size] = "coltanaconda_mp"; + weaponList[weaponList.size] = "beretta_mp"; + // semi auto pistols + weaponList[weaponList.size] = "tmp_mp"; + weaponList[weaponList.size] = "glock_mp"; + weaponList[weaponList.size] = "beretta393_mp"; + weaponList[weaponList.size] = "pp2000_mp"; + // shotguns + weaponList[weaponList.size] = "ranger_mp"; + weaponList[weaponList.size] = "model1887_mp"; + weaponList[weaponList.size] = "striker_mp"; + weaponList[weaponList.size] = "aa12_mp"; + weaponList[weaponList.size] = "m1014_mp"; + weaponList[weaponList.size] = "spas12_mp"; + // rocket launcher + weaponList[weaponList.size] = "m79_mp"; + weaponList[weaponList.size] = "rpg_mp"; + weaponList[weaponList.size] = "at4_mp"; + //weaponList[weaponList.size] = "javelin_mp"; + // assault rifles + weaponList[weaponList.size] = "ak47_mp"; + weaponList[weaponList.size] = "m16_mp"; + weaponList[weaponList.size] = "m4_mp"; + weaponList[weaponList.size] = "fn2000_mp"; + weaponList[weaponList.size] = "masada_mp"; + weaponList[weaponList.size] = "famas_mp"; + weaponList[weaponList.size] = "fal_mp"; + weaponList[weaponList.size] = "scar_mp"; + weaponList[weaponList.size] = "tavor_mp"; + weaponList[weaponList.size] = "ak47classic_mp"; + // sub machine guns + weaponList[weaponList.size] = "mp5k_mp"; + weaponList[weaponList.size] = "uzi_mp"; + weaponList[weaponList.size] = "p90_mp"; + weaponList[weaponList.size] = "kriss_mp"; + weaponList[weaponList.size] = "ump45_mp"; + weaponList[weaponList.size] = "ak74u_mp"; + // light machine guns + weaponList[weaponList.size] = "rpd_mp"; + weaponList[weaponList.size] = "sa80_mp"; + weaponList[weaponList.size] = "mg4_mp"; + weaponList[weaponList.size] = "m240_mp"; + weaponList[weaponList.size] = "aug_mp"; + // sniper + weaponList[weaponList.size] = "barrett_mp"; + weaponList[weaponList.size] = "wa2000_mp"; + weaponList[weaponList.size] = "m21_mp"; + weaponList[weaponList.size] = "cheytac_mp"; + weaponList[weaponList.size] = "dragunov_mp"; + weaponList[weaponList.size] = "m40a3_mp"; + // special + weaponList[weaponList.size] = "ac130_mp"; + //weaponList[weaponList.size] = "riotshield_mp"; + + } + + shuffle = getDvarInt("shuffle_weapons"); + level.gungameList[0] = "defaultweapon_mp"; + for(i = 1; i <= amount_of_weapons; i++) + { + if(weaponList.size <= 0) break; + + if(shuffle) + id = randomInt(weaponList.size); + else + id = (i - 1) % weaponList.size; + + level.gungameList[level.gungameList.size] = setWeapon(weaponList[id]); + + // Only remove specific weapons if we still have enough unique ones left + if(weaponList.size > 5) + { + if(weaponList[id] == "m79_mp" || weaponList[id] == "at4_mp" || weaponList[id] == "rpg_mp" || weaponList[id] == "riotshield_mp" || weaponList[id] == "dragunov_mp" || weaponList[id] == "m40a3_mp" || weaponList[id] == "peacekeeper_mp") + weaponList = removeIDfromArray(id, weaponList); + } + } + //level.gungameList[1] = setWeapon("rpg_mp"); + //level.gungameList[1] = "rpg_mp"; +} +removeIDfromArray(id, weaponList) +{ + newArray = []; + for(i = 0; i < weaponList.size;i++) + { + if(id != i) + newArray[newArray.size] = weaponList[i]; + } + return newArray; +} +setWeapon(name) +{ + name = strTok(name, "_"); + scope = ""; + attachments = ""; + switch(name[0]) + { + case "ak47": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "m16": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "m4": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "fn2000": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "masada": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "famas": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "fal": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "scar": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "tavor": + scope = "acog,eotech,,reflex"; + attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun"; + break; + case "ak47classic": + scope = "acog,,reflex"; + attachments = "fmj,gl,,silencer,xmags"; + break; + // sub machine guns + case "mp5k": + scope = "acog,eotech,,reflex,akimbo"; + attachments = "fmj,xmags,silencer,thermal,,rof"; + break; + case "uzi": + scope = "acog,eotech,,reflex,akimbo"; + attachments = "fmj,xmags,silencer,thermal,,rof"; + break; + case "p90": + scope = "acog,eotech,,reflex,akimbo"; + attachments = "fmj,xmags,silencer,thermal,,rof"; + break; + case "kriss": + scope = "acog,eotech,,reflex,akimbo"; + attachments = "fmj,xmags,silencer,thermal,,rof"; + break; + case "ump45": + scope = "acog,eotech,,reflex,akimbo"; + attachments = "fmj,xmags,silencer,thermal,,rof"; + break; + case "ak47u": + scope = "acog,,"; + attachments = "xmags,,"; + break; + // light machine guns + case "rpd": + scope = "acog,,eotech"; + attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat"; // reflex + break; + case "sa80": + scope = "acog,,eotech"; + attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat"; + break; + case "mg4": + scope = "acog,,eotech"; + attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat"; + break; + case "m240": + scope = "acog,,eotech"; + attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat"; + break; + case "aug": + scope = "acog,,eotech"; + attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat"; + break; + // sniper + case "barrett": + scope = "acog,,"; + attachments = "fmj,xmags,silencer,thermal,,heartbeat"; + break; + case "wa2000": + scope = "acog,,"; + attachments = "fmj,xmags,silencer,thermal,,heartbeat"; + break; + case "m21": + scope = "acog,,"; + attachments = "fmj,xmags,silencer,thermal,,heartbeat"; + break; + case "cheytac": + scope = "acog,,"; + attachments = "fmj,xmags,silencer,thermal,,heartbeat"; + break; + // shotgun + case "ranger": + scope = "akimbo,"; + attachments = "fmj,"; + break; + case "model1887": + scope = "akimbo,"; + attachments = "fmj,"; + break; + case "striker": + scope = "eotech,reflex,"; + attachments = "fmj,grip,silencer,xmags,"; + break; + case "aa12": + scope = "eotech,reflex,"; + attachments = "fmj,grip,silencer,xmags,"; + break; + case "m1014": + scope = "eotech,reflex,"; + attachments = "fmj,grip,silencer,xmags,"; + break; + case "spas12": + scope = "eotech,reflex,"; + attachments = "fmj,grip,silencer,xmags,"; + break; + // pistols + case "usp": // some variants get lost because fmj can be front and back attachment + scope = "akimbo,"; + attachments = "fmj,silencer,xmags"; // tactical + break; + case "beretta": + scope = "akimbo,"; + attachments = "fmj,silencer,xmags"; + break; + case "deserteagle": + scope = "akimbo,"; + attachments = "fmj,silencer,xmags"; + break; + case "coltanaconda": + scope = "akimbo,"; + attachments = "fmj,silencer,xmags"; + break; + // semi automatic pistols + case "tmp": + scope = "akimbo,eotech,"; // reflex + attachments = "fmj,silencer,xmags,"; + break; + case "glock": + scope = "akimbo,eotech,"; + attachments = "fmj,silencer,xmags,"; + break; + case "beretta393": + scope = "akimbo,eotech,"; + attachments = "fmj,silencer,xmags,"; + break; + case "pp2000": + scope = "akimbo,eotech,"; + attachments = "fmj,silencer,xmags,"; + break; + case "ac130": + scope = ""; + attachments = "25mm,40mm,105mm"; + break; + default: // grenadelaunchers and riotshield + scope = ""; + attachments = ""; + break; + } + + if(scope == "" && attachments == "") + { + return (name[0] + "_mp"); + } + else if(scope == "") // ac130 only + { + attachmentsAr = strTok(attachments, ","); + usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)]; + return (name[0] + "_" + usedAttachment + "_mp"); + } + + scopeAr = strTok(scope, ","); + usedScope = scopeAr[randomInt(scopeAr.size)]; + attachmentsAr = strTok(attachments, ","); + usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)]; + + if((usedScope == "akimbo") && (name[0] == "deserteagle" || name[0] == "coltanaconda")){ + attachments = "fmj,"; + attachmentsAr = strTok(attachments, ","); + usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)]; + } + else if(usedScope == "reflex") + { + if(name[0] == "aa12" || name[0] == "spas12" || name[0] == "striker" || name[0] == "m1014") + { + attachments = "silencer,xmags,"; + attachmentsAr = strTok(attachments, ","); + usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)]; + } + else if(isAssaultRifle(name[0])) + { + if(usedAttachment == "gl" || usedAttachment == "fmj" || usedAttachment == "heartbeat") + return (name[0] + "_" + usedAttachment + "_" + usedScope + "_mp"); + } + else if(isSMG(name[0])) + { + if(usedAttachment == "fmj") + return (name[0] + "_" + usedAttachment + "_" + usedScope + "_mp"); + } + } + //iPrintln("scope" + usedScope); + //iPrintln("attachment" + usedAttachment); + if(usedAttachment == "thermal") + return (name[0] + "_" + usedAttachment + "_mp"); + else + return (name[0] + "_" + usedScope + "_" + usedAttachment + "_mp"); +} +isAssaultRifle(name) +{ + ar = []; + ar[ar.size] = "fn2000"; + ar[ar.size] = "masada"; + ar[ar.size] = "famas"; + ar[ar.size] = "fal"; + ar[ar.size] = "m4"; + ar[ar.size] = "m16"; + ar[ar.size] = "scar"; + ar[ar.size] = "tavor"; + ar[ar.size] = "ak47classic"; + foreach(a in ar) + { + if(name == a) + return true; + } + return false; +} + +loadFungameList() +{ + level.gungameList = []; + level.gungameList[0] = "defaultweapon_mp"; + + // PISTOLS (1-20) + addFungameWeapon("usp_mp"); + addFungameWeapon("usp_silencer_mp"); + addFungameWeapon("usp_tactical_mp"); + addFungameWeapon("usp_fmj_mp"); + addFungameWeapon("usp_akimbo_mp"); + addFungameWeapon("beretta_mp"); + addFungameWeapon("beretta_silencer_mp"); + addFungameWeapon("beretta_tactical_mp"); + addFungameWeapon("beretta_fmj_mp"); + addFungameWeapon("beretta_akimbo_mp"); + addFungameWeapon("deserteagle_mp"); + addFungameWeapon("deserteagle_fmj_mp"); + addFungameWeapon("deserteagle_tactical_mp"); + addFungameWeapon("deserteagle_akimbo_mp"); + addFungameWeapon("coltanaconda_mp"); + addFungameWeapon("coltanaconda_fmj_mp"); + addFungameWeapon("coltanaconda_tactical_mp"); + addFungameWeapon("coltanaconda_akimbo_mp"); + addFungameWeapon("usp_mp"); // Filler + addFungameWeapon("beretta_mp"); // Filler + + // MACHINE PISTOLS (21-40) + addFungameWeapon("glock_mp"); + addFungameWeapon("glock_silencer_mp"); + addFungameWeapon("glock_reflex_mp"); + addFungameWeapon("glock_akimbo_mp"); + addFungameWeapon("tmp_mp"); + addFungameWeapon("tmp_silencer_mp"); + addFungameWeapon("tmp_reflex_mp"); + addFungameWeapon("tmp_akimbo_mp"); + addFungameWeapon("beretta393_mp"); + addFungameWeapon("beretta393_silencer_mp"); + addFungameWeapon("beretta393_reflex_mp"); + addFungameWeapon("beretta393_akimbo_mp"); + addFungameWeapon("pp2000_mp"); + addFungameWeapon("pp2000_silencer_mp"); + addFungameWeapon("pp2000_reflex_mp"); + addFungameWeapon("pp2000_akimbo_mp"); + addFungameWeapon("glock_eotech_mp"); + addFungameWeapon("tmp_eotech_mp"); + addFungameWeapon("beretta393_eotech_mp"); + addFungameWeapon("pp2000_eotech_mp"); + + wait .05; + // SHOTGUNS (41-60) + addFungameWeapon("spas12_mp"); + addFungameWeapon("spas12_grip_mp"); + addFungameWeapon("spas12_silencer_mp"); + addFungameWeapon("spas12_reflex_mp"); + addFungameWeapon("m1014_mp"); + addFungameWeapon("m1014_grip_mp"); + addFungameWeapon("m1014_silencer_mp"); + addFungameWeapon("m1014_reflex_mp"); + addFungameWeapon("aa12_mp"); + addFungameWeapon("aa12_grip_mp"); + addFungameWeapon("aa12_silencer_mp"); + addFungameWeapon("aa12_reflex_mp"); + addFungameWeapon("striker_mp"); + addFungameWeapon("striker_grip_mp"); + addFungameWeapon("striker_silencer_mp"); + addFungameWeapon("striker_reflex_mp"); + addFungameWeapon("ranger_mp"); + addFungameWeapon("ranger_akimbo_mp"); + addFungameWeapon("model1887_mp"); + addFungameWeapon("model1887_akimbo_mp"); + + wait .05; + // SMGS (61-90) + addFungameWeapon("mp5k_mp"); + addFungameWeapon("mp5k_silencer_mp"); + addFungameWeapon("mp5k_reflex_mp"); + addFungameWeapon("mp5k_akimbo_mp"); + addFungameWeapon("mp5k_rof_mp"); + addFungameWeapon("uzi_mp"); + addFungameWeapon("uzi_silencer_mp"); + addFungameWeapon("uzi_reflex_mp"); + addFungameWeapon("uzi_akimbo_mp"); + addFungameWeapon("uzi_rof_mp"); + addFungameWeapon("p90_mp"); + addFungameWeapon("p90_silencer_mp"); + addFungameWeapon("p90_reflex_mp"); + addFungameWeapon("p90_akimbo_mp"); + addFungameWeapon("p90_rof_mp"); + addFungameWeapon("kriss_mp"); + addFungameWeapon("kriss_silencer_mp"); + addFungameWeapon("kriss_reflex_mp"); + addFungameWeapon("kriss_akimbo_mp"); + addFungameWeapon("kriss_rof_mp"); + addFungameWeapon("ump45_mp"); + addFungameWeapon("ump45_silencer_mp"); + addFungameWeapon("ump45_reflex_mp"); + addFungameWeapon("ump45_akimbo_mp"); + addFungameWeapon("ump45_rof_mp"); + addFungameWeapon("ak74u_mp"); + addFungameWeapon("mp5k_acog_mp"); + addFungameWeapon("p90_acog_mp"); + addFungameWeapon("kriss_acog_mp"); + addFungameWeapon("ump45_acog_mp"); + + wait .05; + // ASSAULT RIFLES (91-120) + addFungameWeapon("m4_mp"); + addFungameWeapon("m4_silencer_mp"); + addFungameWeapon("m4_reflex_mp"); + addFungameWeapon("m4_acog_mp"); + addFungameWeapon("m4_gl_mp"); + addFungameWeapon("scar_mp"); + addFungameWeapon("scar_silencer_mp"); + addFungameWeapon("scar_reflex_mp"); + addFungameWeapon("scar_acog_mp"); + addFungameWeapon("scar_gl_mp"); + addFungameWeapon("tavor_mp"); + addFungameWeapon("tavor_silencer_mp"); + addFungameWeapon("tavor_reflex_mp"); + addFungameWeapon("tavor_acog_mp"); + addFungameWeapon("tavor_gl_mp"); + addFungameWeapon("masada_mp"); + addFungameWeapon("masada_silencer_mp"); + addFungameWeapon("masada_reflex_mp"); + addFungameWeapon("masada_acog_mp"); + addFungameWeapon("masada_gl_mp"); + addFungameWeapon("ak47_mp"); + addFungameWeapon("ak47_silencer_mp"); + addFungameWeapon("ak47_reflex_mp"); + addFungameWeapon("ak47_acog_mp"); + addFungameWeapon("ak47_gl_mp"); + addFungameWeapon("famas_mp"); + addFungameWeapon("famas_silencer_mp"); + addFungameWeapon("famas_reflex_mp"); + addFungameWeapon("famas_acog_mp"); + addFungameWeapon("famas_fmj_mp"); + + wait .05; + // LMGS (121-135) + addFungameWeapon("rpd_mp"); + addFungameWeapon("rpd_grip_mp"); + addFungameWeapon("rpd_reflex_mp"); + addFungameWeapon("mg4_mp"); + addFungameWeapon("mg4_grip_mp"); + addFungameWeapon("mg4_reflex_mp"); + addFungameWeapon("aug_mp"); + addFungameWeapon("aug_grip_mp"); + addFungameWeapon("aug_reflex_mp"); + addFungameWeapon("m240_mp"); + addFungameWeapon("m240_grip_mp"); + addFungameWeapon("m240_reflex_mp"); + addFungameWeapon("sa80_mp"); + addFungameWeapon("sa80_grip_mp"); + addFungameWeapon("sa80_reflex_mp"); + + // SNIPERS (136-145) + addFungameWeapon("cheytac_mp"); + addFungameWeapon("cheytac_acog_mp"); + addFungameWeapon("cheytac_thermal_mp"); + addFungameWeapon("barrett_mp"); + addFungameWeapon("barrett_acog_mp"); + addFungameWeapon("barrett_thermal_mp"); + addFungameWeapon("wa2000_mp"); + addFungameWeapon("wa2000_thermal_mp"); + addFungameWeapon("m21_mp"); + addFungameWeapon("m21_thermal_mp"); + + // LAUNCHERS & SPECIAL (146-150) + addFungameWeapon("m79_mp"); + addFungameWeapon("rpg_mp"); + addFungameWeapon("at4_mp"); + addFungameWeapon("riotshield_mp"); + addFungameWeapon("javelin_mp"); +} + +addFungameWeapon(weapon) +{ + level.gungameList[level.gungameList.size] = weapon; +} +isSMG(name) +{ + ar = []; + ar[ar.size] = "mp5k"; + ar[ar.size] = "uzi"; + ar[ar.size] = "p90"; + ar[ar.size] = "kriss"; + ar[ar.size] = "ump45"; + ar[ar.size] = "ak74u"; //? + foreach(a in ar) + { + if(name == a) + return true; + } + return false; +} \ No newline at end of file diff --git a/gunfun/scripts/load.gsc b/gunfun/scripts/load.gsc new file mode 100755 index 0000000..333ae9f --- /dev/null +++ b/gunfun/scripts/load.gsc @@ -0,0 +1,5 @@ + +Init() +{ + thread mod\main::Init(); +} \ No newline at end of file diff --git a/gunfun/z_svr_bots.iwd b/gunfun/z_svr_bots.iwd new file mode 100755 index 0000000000000000000000000000000000000000..b792b12e1b65f66a0b39d4ab7d7f01fe3da2b7c4 GIT binary patch literal 82244 zcmWIWW@Zs#0D)&))f> zrR9m01^JnINSZhp9NSwW*6!k%xtoE3L4%EfK@GR2_~g>!lKkBG+{6OC^y1{XQ*HSU z8Su2GD?R0tjNUlmQ~WWx#=fbG9F(QD{uJbOZrx$sI`2W{Nr9iif8IR5k@?#AVabMEHUtdq~NFim-A$=X)d@bQG* zO}nCf#s1H2qCVZQQ{UVZgl*4C}{5Jdjp$eh3Ob69YCQUq|Z0UJ8Rn30QCIha`pBJ_=n0Wt8 z-1x^JYvpXl^qW6}PVg`Osiknj${^(-^EaL2t$PCM=O0NFbK0-+vC7I{>Cp_qWXs2j z4!JpXzt7&kpd_TObW3i2pP!4?VU;xYoZS51$KTG~s(9tl{DMGwnQo&(_ov^&v#$OZujZ9Jt^Ps+f{x`dwsI|`kRZV@89@4JwI;!REbm1 zRz6_t7Lx1n`)S#0s~~%8Rplg^el?q}V>LxQp|YDKZR>tN@%ZKGahQ)I??m3cl+B?M z9#^)f9yy;FQXq3PQ^GYz=Z21rpy3B);|mvqSIAEIRH$||Xo* zc`wk1@oBKcxr#O&#e{#HSzDyWe0>wABA{oyx>G8Lb~vw|l|UORbbuE9J* zgW3|?xy|kSGLA6otC{EsnHN3mP7zIC5zWyY)L8YyA+Cd6|5xw@*L*gC9aEX7gt67{ z_3VEVzaMYF59OkL?CX?fZ;q{B7byL^&{sERYM3+E zlT9q`rgq<-Kb(?2d8g3+>G#*(W}{U7@xvw72Wr{MYoA@H2A5!<)wqSwBzK)+W&65~pH{71vVfe#0?4|~* ztzVK|Uzgj8<;!^Ps2^ByfOXNM_vx!6>ik!$blCQ%p7T)8daJ%?C(}pu<%?4yA9i+K ze3Z^SBmdHyITf827C(6QJ^iyqIkd6S-Z){;(Vsy-D`vE8yu(&nG;hr!2IsPQOVFHhopoyc)CMK+No$#uaTR{fsZAD+kNzp^-B6_l_d zUzzXf-V?q*k|N#tPoHG<75<`|tHOBY_Q!x`|J6s0JSIo&3RwO^iNRu?&hk4QC+@#} z`OtG=#gqnv;OWfERw+*Fn|g+oElFCP$?3j_hqZHQ!n>nFe)&eto=ZCR-+}|TUfun6>%Z8E zH+O%nl=it;$T*ARqw(|$@6O$;GoQ08h0#j$p-#l2&EJdJC#XIO+pUtu+28eP*WTLI zl7}9Zt=3xmh=pfEM@9N_-a|@dukZX@bicJ>N5j8s=lslPEPBXfBH*-EEX4Ei?%<%D zP2E%2A9_uib$8V&Te1EBUq~G;5p|uhlVO+ClAUsE=6}9x`&!&8q5pe+_2G4C`xac5 zV9P%)UL~eFIXV8pW0NVD#49$w=iRye{n__T-f{)`FJ{^cpN_s)6mjq4v+|v9jHO;0 zePEsXCp~|Q&>{Eu8$I(?{vGIEs;_Y*?DzIPjsLk$FL-;*@aEr((PG7dUk~xRS#=uZ zTYg-6pg;fp`kKb+P5wtV9?)G?wQk0}jM;7JJM6n>+TKblULC(wsX~rv`9wasRR*4a zx~8q>zY;d3oAvV{{Yg4==I!s{KRhMrnUsc?&i;8zW^C|y?Ri%5Ss%;0PY$)p@*7T_ zoBi3OHNn?0-~{_bqp7(Kxot&8O|t$G6Oz?t9#ej{MbRvw{QWAah&N6GQR2_cU=518T(h4HWZ$xcl1jhm2k(w)NUawPROTf7h^)7TRXGXu*2%AN>E8>bl%WT~hgV zk;a$n23?Y>-d{d=&wX>={O;Oy6aHx3a>~5H=E`;G<(8mUt(@)$=U>W191n;;+2A&} zYW9&Vi||QE}lQ* zX3w|qmP^B4on)nC#>yIt1i=ri9$FU`XZQT=@G_Us>0TCS!MIh*pm0WNgYSXs0aqVS zcNd($(9urZW}5zT_onpXA3yy*qzduhIH_$C`@@DSSmU4RnR%*{84sIYKK)X}jraHe z?UJ0Di!^5l$Z=`PwJk{ceuE>^{mkOs<&%G88`EXws-|k7jVI&;)@=QqTrNc8dn2(uf6vZXT7&ocZWqmty z`0`&?eubBf6I$%2lq_hE*~G$r=1ShBZ)O3Tg{95fvUu{76knvAj&M+6dl=BAp7TRw zu_D8?4E@!rHB(iOtuLLiKXT3W&_@eQuLm6ooTv81<+|afX-lFzC1zz8PrAlGg^k}y zcE*V`wR>THuDlbD6q+hW@|@al@SdoU$k=*#)A{KZT&%9^fr|jJTTj^cU|8h*HBHqW`_RP z$EFA`jBMD_wE7OmyC09A2eEjm-uc4$?w7jvV&#ZW3QL1uuum0X&->8#g-`#P#g%9C zy^40c-X{}y`oJnVsjyt>F2I4E`=+@F?L`SJH~*M@^d)IiAL_ zNclL2xvcWzSXq_+g~QIW*YIbmb+)(Y<0XYFxRsqHD@3yWDsqj>_}?(Lu-9*__dDrbPf`@-qecZnLgI0*sI@ey+n#u~MZ!@{M zGMH~Fao;#&^hnLuqvYz>6+77#w$Gd`x%h%j{PM6%TV(~EJ^fa>dIs#=yP9e1YaP{+ zJj1pR*H?tHp3ypxy!Go(4WH1mo2>!eY77Ss<{p?_9F`pYUL#Zc>`blFsM`iJE;(AM z&ItOq^F_kkll}`|l}zGVbIEJBr~Sl*Xa7`x$t_u+_%LF*OXY!x!_QTo1eWnNH7q@+ zzAs`$v&MY;WCO;a{zb)d2cOR1)s2)-@4ND5Vg1I4LmibS!GGs(|5Cs1x4pi*JXgVa z(Svt-jf-zE|GjF=q3L2VBUrAOGkM3pybpm3UA^poCz##7B;@QW5Z-6rc*DG>SM}9= z1CIR<3faFg|9kD}o?Ie&@!Tfy@Z`|A&uaflb2pybbdo(uNor||O~SipeV>dEb@ax|X*qM>LK5 z)g^I`4wuKu&982Bf`y zZtIO%Tp54W|B=*3zUVE>dQQ0A_Sm{=;!=z4TXynovJ!fH)hDy;rbWNpz53q~Hy3c< zzAVArxA#qu$?*&9yG*xEFix;+j`>k>KtYf%{hMMopPFefNA8&m8$L=Zv^&VA|KA(b zr#YvW!7y%JTc5#N#hwT6H<^|lj?%4(U#yg}T=gf*i!t0vm-j zAH2`+(Cu8S^{mkRUZMImPtn&)q+c%)&JH*#Rg%nWwXsVp>|$?dNz&Y~jeff~`dM#0 zw<;q2ZbUj?*oD)-U)lZDzLFi$cT%Ov^U9XHCXLfi1sXkJ3Y{|PjMvA;Zokt3ZWrA) z_IHX%Wb>J26o>qbVJmr)`uwfU!b{0@-@jgI*gAi@8Sko%wgj>H>ck1Ml&!7XcGp&B+HJiS_h1ICZ8qGy zGqYxR?e?pZIgHZQgOz3s@SJZ_zat1FmZGJh*BUF!e6FkAfOS!=V_ zX;XV=z5BzMSaR5cHC;sF`fiZ}m3nTuPKVU4R&8CY>hCAKbXS-|YE;C>`^l=IN)g;S z$6p@nU8tuO6fDJX<$-kXq+eW;jJdnEZ=9OA^ToBV71C^9{M+~G?brEPJAKcwddZyK zVzYl;|FR-k#N%)F@y0AK<%!dGBs+%wzm%bIrOf72Q&c6rXI|agCA^a_k0Gg} z=;Yl0lcRUek$<7OdC%vg8`wTne63?#DCXBPb>)G*Q~VD6StC4S{?p?2m<4)n-8oGo}s?RWm8nd@YpZo3<$-|7%ARJXAHOM>9RITN_K z`CsnkbYFkR-M8(ALM3ym*ba_J-k1%GWVUBq)pF6|I`L1h@yF~-`D2B-^#4lQM-=@-;CS7e4(h#yxMy@fd+jC z4%Ul(JIHsTcZY4^gMFoK+q<&_AGTWxU6a%LU+3%K7#t*kmzaeZy<&!DgG-X6W)WnkN!z_Nc5gGEp1qN#him3QU1 zuU~z`obPAKq$P~oPEKOGws4}bbngbvPJkQ(ab_WggSUK4Ax~HheDU-tmS>bKSio>k$yzQm*_JQ(JR|N>h?bh zJ3dp4KjQhEl7RI)1h-k2E1V8XH!aiVJb!K(lYF_ho$-{}-``zWo%rzT{%prjA9TET zR)@7nFFtH%7Wvoj>Z|WX|4fOt5W!W+oiaeL&j}_^U_u?-mqR^){#@%$+NPq z25-B*_R%k&ujk7aKk(Sr;3jxe%rNNd)t@J(CcGCFh}^opB*$3SBD}R|LbbwyPkFh| zFYj`5l-iZHB8)@pgwgvr;fTNtw(dZo?3`uKrZd%)?=O(k|8m@?(SM;t`}KgW8mA8@ zFPyvcO4!cHD_<|x-6A|Oy+A_rQ2U>(JxsT6aF=oEKJ$xG!D7`lKi)+Ci%_#&l9|#l z*F@jYD~FN&V`;uu`?@uUQ>_M z{by7b?YCLcHq6w>=TdXmvV)V~h0sCTYfZ zdT;s}`X;<~&R!e7RAA-A36?V*-=9?t4k=wVJ*(pMiI@M2E+psNdi>{%e{w>ttNQDl zsdlbw`JXKOxT?uWAfw)haWdNm-fhMU?ANd?v^SmS)Vq(rs3AwR+b}C|>6fh$uDiO; zd++|P7u|V?-A2DTHvEs7&BgX2OP($%^EK8teWyS1xNsxL_VGH`oR=9VwIaT+^6@(u z4!&du5$v7xYeUrrkzkV@q5{_|D2^zX22XSlcMzpzs_Ns z9M$Zyr({jyywmzR^Da+57Uk4h9keg~^@gz3wH=1dJ1d@;KV)=!`fcOZS-HBMZ~ZUsvT>Ppq|=SX(^qXfRJd3qV{5AWM&FRs~MPBHzmXnHDY3vi_$Y%eSoD z1$MPFil2Rcu4OaXXYaaWVK?GBSAN`UI^TM(+{2l5It!{Q4co7_xUUMc=h+^}pYyEH zTG>3NX4~7lfBtV%dYDkye{Iob;|>P{w<@o^w>8-}SH`dV@@dt!2iwoApUZb@QGf&Q z_LW~AFvafhEN0RxKD%RgJp*D8`*6;zh~;++owHOK7=*tvFi2q=#EwtSNCb~$zmd%@ zer)o=_{<0SDMrlfEti(`TXP-veHV4hNuFI-gl$KkkalNg68r5;jrI4>z4NNGo+h$< zPurcZsouL+-@Tf(HOfRiX1gcb-$++~?quO!qvcdlaX@+F z`E6x(FKqrT*nRcwBjxxOo>zuz#5)r{_g=sM_d)OV`xSqEuS@$p>q}s+xB9wwc7ec- z%^H8|$-Td)RXVukRjH&@l`_wl~5X-vT z`P^-ig?L@{mvhqV|8x1@RjfYZrd0H<;zLJn!r$4N<+hIwvsJg-)}AtZpe}Os(fZcY zUE3nli@W!J78Lm2@VEuT3~|D8ACo6Jw~{gX|e zoj!hr?=QoNzb_WI$hD>%yvuRRdSc35l?@GAKca)aO4S{VH*`%r!mRmD`lm{b%1VEY z;76@oN@D9(_&lsX#2=XK{^O2xhnWL+O#YR$yb9GHQ#7lV?>jv2*c(~DniYZ13=?}@ z8%^!%PHi*We#wkYX%@TO#c5M|3^)7F+jQ=l*zdRIYgYZcb!7iSj{~;H=kJnBXkD&w zrvGx)`=rW>FLKS|oO(>Wy#+@ud~JB|S$!iqKlRo(DN(oF89b3E-YZx9^Z4jc_`Cd% zn%Y8*>CYy6ZY-GiK0HW?hqdp|q#FHhAI&xv-343a3~m%UuVgeV4sG1?WZ{uNVRv{Y zNNI)YDgAWkIPGe5M5n?;LSMU(yGnD;FQdK(7kBLAFyYH}*cOm#`72Ii=BKYRvwD6> z80D1Tx#`7Yn3lcMS?}08mjj!_+&WiG&QmJc5WZr9^2&gxM#1yHUp9&iJ*?MvH);Cb z=~rLRU9;<8c%O2ueV(Y9R$_a+Y3`miCm} zi;gX`$!k+JQHPI$QH(A!PRQw`oXPI++lxWDOx z1sAH{i~fv#7rlx}>Ga2%%>Nf3t$lfN;{>nRNV|EyKWt|#-sD}>$>g@2C1gIE#}|Kr zjKZER6YakG|FpVqnfpfEjORhc3m!k`f;NjC@wsLh#>>whaF^P4QzN@qOz#4_!NQ!d zd(3iN+XOqTUuaAJHoY{-HN<$ja9W-yCCFS{_HlTBh# z<^FlW0Sh$eFY(KcbUiw2ORB&Jj=2*ebyqD3VfHCHv1g}na=F3E=ke<@g#Gybo;(uo z@!oWm>rCyN49YL^Y_%6U2Kc+Sdsr{wSRbf;tcm>`FV7+6 z!21V{S!aKFZ@J(2AluPdk0+%G?4I4ZHRqbP;uArRrlnWkE=e)|%XWURSpQ@5k4(qx zuVx?i=S^te6VEMk&%E*773OlO1K0XK_qtWMXQ*h+@+c9h{Q6i;Y7P|ZW}4AhT|6&fX}MdAM}R3?G5+5Y39CEB4O2 z`$K7&+P{|vbA)Fky9>T>uxdVH{&CNi1rkkb!sF^6IT>Cl+Nm07_$y9UeDQm2mtzJ0 z=5WirO$yleVZn_@7BN!mxkPX8d(fEU8>85sXf0nIGR-Q?IvXg>)yqnt(9huVm?0e#D-8(ZEd|+EM_Xp!2 z$=;9WUoK-@l_$F@pS9+YK}+jqf$+Cx(;fcI-FN*(zkRI!;{8wO+`qp)>P^esxSHA% ze0t~n&Q*u2i$7m`ZI%U3@~TIg?F>Qzzt1OSzF0GT@m|B4hWYvakroXb&tz^ap3kZ@ z=VL3o;g+ukU*nf;%YODTwBWo=Ow`v-!6Q*>k7uamu1kG?^m&fr4EEC>if()~yJ;!E znX~Bc@k$9nIbof8&h&#<?VtOqdW|Ddz7s(}^DRy<;!&)!1bEnVReF@>}>Fr&jsR}QzY-Br; z@#wqd%0Pyd&cz&-#S*Rx%`9!}r~R4o@c+DDlh@4l)l}q3maCiB^8BFaQP%gpCLb3^ znOgl+{SjiQ_2S*Tp!NIRHpbTe)O|fye#7F!+Sihw$Jf?%h|E4y*;jeuQff>3rGt7G z^y(iiQJkmYkktG5{NgPE?rYCH%usnQ!Poy|@f$BUj_wen_?0nxv%~goUh->O8cINt~y-LltLH$csaq}sUqe~>n~36Wr_QqzVUc0dEQ{@ zl26>%(~1{-$(_YC(MWB&=OQsrWxJhA{|MydY5&&9jehqs_@-OcyYsf}(;hmWH`v%a zFOcc-`M^&K@0>YhKBO<}WAIE<)O~9bx;L#oaJ%NC_NmhkUfId{d~+m&jr6X@2_jEA zc7?3ps2QG<0Az!n}VAd&~hJt7A7EAS%EstFH*?V1~ zD(1eBL{_2a;#H~^T#v1Jo7A`JI?gw4n4%i-Q?5gEO?JEJigOnY&rV{d8tdzi~A zBku{jW^U^jhsiurPv?d3+sys;>CN@Of1?ZkA1XgGwchh*n}J_q#nDx6&o`D%m3=LB z`Dwz1 zeql=NYbouF4_s-ft;X95QZMM4wnQfGsrHHq+CODO{wdDCsCoa$%>E1a91?ClQ(rUxW2{h7 zXdzSM+329yDmJwWyR>c|xfBP^vrheLo98;2N|+mcIcQvxH0^|0L(>E4hKPsnAFOAo zs+U)*nfa(+Yg0mU)Cb!MO~IRedbjvqE$+@ct`~9nZjlyZfM+KIGxez z+yc$sLy0Z#pEo~Y&X!pIW=H$~8_VP8&SvS@HharcuGt$IwpUqv=P7t=abaSw~PUh);k^WT3jWW434{JG>EAInYE2w~e#iKlP%*UfK9y!6O#IcL_T?b(bA zStPEvT3&Ly%b}Cj{phli0-x~l-ku`m(=YXH4sYF6wV0E8o^Z_i=pXX}^r z6oExEFYI*Nu)rkxK-brQ+c@7;SzEU)sQR<@{~X1u*TvnEL)6XGUha_Nf1)(u@n)%o z(-YM#z3tAb_kAxr@<;Jg&$TYas?(p`-j@H;WLDGZ7M^-oV(H=Kay-%xWvYx)bQr~c zFn`ZeNVDA**7J7l_9DB^J1Tb!RhU${R%tlqCOJr5^%rd2RKO#3Z&S**L-8t)Q^Zz3 zwtC}t;L%s6s!Gwgxk@&f>o_*lcxe6ms<>vBjs2cIMj88;K2VnoKYBFoiFNK$j)Yq+ za`z8+)%Daid}ZDF+CqGCayR#n10QBjOg~yQz0Ch^*s2z3reB7Y$Xygs}$F}qA^;ht~ep8Wg&ygK@Px~}n>-Mt&4b{xI&{O~lz z(7SFSy>4j{-=q>>N+(s`;W#~4bC!DVg(=H~+nRoD5DY7Me)7<4#n&dA_0R7V-Q=g7 z@+9QTTLZJpRdbAP%sijw_RjVFo2L(_zxng%(a)us`==GNuifvmxa(f&vY8q#ZF~!S=JX~Yk5^}%9*w~91$F5 zDn}>1-`<^(@z8kb3|^Dua@|=A+YV^v@Ucx|;*nw5V{i1ReXG|3>F0ieuJdOvtWbD) zzTV6w@A%nGQ>G^0iwZq4OECQF;yY(b&d3(auUagbV}J8cOQ3sSQ}wK@wzh)#84ups zC!PH9vhniqy9Wd|rLnlyUC=32oHx_)P2S6lzq48*tb_i@`O8g_dby0nUoOQh;nfLK z=~ceAYtjyH-l%*%CuE=T)5y&)k7ck}9cfxAxh`#T&%{47%+|~dx8GFkIotBPvZ6$d zWQo((2+!KW%tLyKv6D8gmW-&+6|h|Pb%i&N>dwH~cYhcAG^)p|a9)4ZFwyK(!kb*D z^O}68-vk{Kj^%f@RqWidRz~Ii{!|;UKd!okZHvoC-g|DJg<*ufNmdS-ZyzsYtsgC%L$m5+;`NBF9?7R8D{Y60YN`6ec^lWrMNQuKrG0W)=#;CC$xbV)gOsD9-raaP^`z3hRMF!fa%cDc zWv#Mwx#w{qY@ywT8_NT}8f!m&{f~XBzw_kwJFyJBH=+;M&+}X4`b^Nrr!iCSE#$DZ}fnaRnXd-Y-UC5HI=CC&d5nP0fOTfLaOmhFLi)FbP;Y!BXl zIrFka`T%=m_CxcR&(D9olYi;>!#4+JzD|f+B<4H$oUKd|k4a{s$;(^6Z=dO9wu^G{ z-Sz#S_p`IVB@{!l&sCN9R+&FY`WSBVZ|2(v2i!$6E}FgkCh{`qG?UwG{qEzc%iZTZ zxgRmFAjmZEuIKi7&(c>KTzP)JTke+@x8(7_R9*7)%Dc(;;?C`}$Yh*&NuEt+PLY0`%5hHtx!%3|x%!1H zGOc)@m0a1dx+ZP&tqIW13%yUd5F6PLBl7xvj! z8-0xLE{BL&)8+`BYE7lZH_ty)J0LBv%uuI0?W4u#%=v}vTV^`uKl;n*#=ZE-p-!7q zpCT$xzQ4+7e&PAE!wcV>@b3Gzub92yQ%kJBU-{nSU!T@}|5R+6y>_R*OYX6yyzfez zi^^}Vn8Q@Dq|{nNPUd5@;#xbAbC-W!{B-e>oMcPPJw8Jg;RA=}J-%~&{_cxg-3tWW ztMg)erhA3h@N~aDv}x_MlNo8ve=U!Cri9#R&b?96(8=pvzNS#@))7A^P4^csZ&bXQ zem-mV&g@>H=B&^^EmPm=?K0o`;@g{xZ}$gtf81z$WU}U)z0JArHcLuPsxqxe;+Ok# zQ|sT7jk4$11e}~NuX6mi(6;F2{D+qoL{F)={yWuZ`N@g5*BreWd9>rp6Z9Oj1`AkZ_3n65peh7HBIeS@;!E*{e!$+ zsL~X^y6%ZW3lE&H68{=;s%?peX}=>!G~aKj-t|U`GfEiuojtUAeUur$QG?#rtH-{T zud@1m`t@h#vkH+{W1Y>FZsmR`U%l&@(&50&Ew^sg$jij7$gcb1XFD-8_QG<1?gYgt zmcD09a@W3!OL;J9cIcHUTdn)>|f7Yx za5yygLEr5ei{H-m5}nszrzFu*bu9fkgKD*++L5caJ8!78TlRLxzuVVV;K(EqEcMCS zzCd}`h2Z8@tD2S5nF^(^Ua#4+ram!twdCz@o7P$JA26JAsN;QLgKg}GR`z1w!>8_U zTCuLMY@%aw`KH3BpRPp4Nh$KbSZvK{n!0cD-eQw>)#>tUv~%=W=KqY-3k!O3PxAXM zfh`;dEhp`=+}nRun19&>feC_UFB;O1UA!|_wXB)#N`=g-ZAsf7ZTl8;>eIo+?^imD zcq`7i`{YekMZ8UGfRy|+xsySamP!-5mY+#p@cEfpjO{-q#*;t1fBwAnNWa?u%SZ9G z(tJ1H8_ap~`F+Iv5)JS7QHu?Z|4F}=^z!>w_e6t<2VbY$TCm;cn@8VCQ_=JDHa_;T zn)KM)UEyf%3ywES+SD%|@V^nZ>~-{|@^{DOw{Xtf>{96YO3*rRVhDrKjD5#kk84-Vj2WE1ZulE0-QL{)|ZoO^amB*iqrM5@C=9k^byvOIC)D2hT?S>y#%>A(3%K68R z?~gto)<4Ly)_PIM(pT5DP6o1QxAbgDG|mwD)4t|%B7+o%xzDSu>rPc|_{$wr`bdKR zb$6%syOayweJ7LcW^;a!Tf^)T`lsURLdS=p*Zb|)Z+qH*cVF!cPx+FsT< z`;&9n%4n(gwI`zUC)TQXH?y&C^SH2#@vqF9+ZVez!&8*s1&Zyh_0Uc>yIYVZf4b_b zWu-LBr&Zi9udM&}!6oIl!nKw4vmyeHn*Wv%^Sg6gbH;_~2lso`J~9f>UEkLb$t)rM zJ7T)qImRa^Z@cfQ`e1pCU!^*}_EyqTZti`1f1FCQS;eXI+>SC-S}c{)H5PeZ)%(^T(6y1+N#6# zyWsZJTk6_PT0guFtmS>Z;dW<_%yh@5V2hSO@e0>G-S@wXcS;{oxEE<=ZBm$H{KkF* zN68KARQLF~;uob{zOH(6TDLji*E6AQ$Gzje74G;G$0r>fB-tI^v(_P`_jI%2n)n}y zr!~%m#k}6wu}10k1}m27&rB{wy036hu-LK2Dt`T|Y$L}EGtP$w{O8-IT8G}{JjPR2 z#96*1Mt1Y+$Ibz#Pfy?b`t#{@sZ*NYle7-Q>Yf0wVC<@s+d z2g_Hpf&=HW9KyeP#+*5*8h>V% zir~LbJbx-GSoCwwK7RN3)ki1coDVe-zht@QX3W#stZ{Odpv#f9C)U0?W+?6SpfmLG z_f^-IX!J$JOaqgj&VKr;CGs2f#xSeyc@A<1x4QUartVX8=yU)7pzO_J#wf*}l zpGYCTuYrn<%wb6@jba)bVo&qMel-5v%u#pn=E}wYG9nMIFXFs#HaX(*y~LZVH#zJ$ zD{Z~xOun$g>k!xZ0++cw%BJ^jxHI?Ars$GVhE_6oO}o@$Ug);*;lzl24$QSQ)r$Iaav1fyP>y_gtZ{CDxw zUMAVfI<5ZodwObItu}@Iot3)w?$fT4&Tq~F-YtxKvlm^Ozjm&N=akJxjXUphR{WIz zvF4~R=ci1^&%gK=mskas>F&I;?B(UnV*j!)TCu8b?n>D%EtU2w*~sM9=F2OcOV3!! znCnk3Y-7ChvoZaz<@dKw*a9Cd}<^W$#FwNfk zc}^1*?l7dh{B>`8&BnZwkL7BQ#zcI3(7{?#Gl5HS?fjt7gYS7G{65()HzsAc18+3;#$btvVL=_C=Pj(YixN+V^zN zPgjtWJnyw=lL5Q6P4&*5O9VMrE}ghNFMoZMH+O5m1H)NjcbpfUl$zoCdtWEVU(Na3 z?pPhqJ>UNNvFomlOe@XWZr?Ruu=&vm_GFgZRxJ1BR-IqUdPPxtZ#3ZeD zg7-t7>9uOcwavb!!i@Ur!o_oL-TOADe{#LW!ysPO7z@4xiFthG(@kb1Un_H-Bw_uy zPu+=IFUwjs*v_Q6NcOHq(>5Mv@wU%qOCAI`Ut3T#bD^ZknbxW6qW)Iz+4WEM z)R)EL$@OjJlVs0+Tw>GxZ{1a!Eg{J<#*U@jf$wH~ylHJ|ethB8E%%u0-$WlgzH$~X zLlR5IaXbExOK!~7m54ley~v5}onMMwN%qyZQhhBxk2sl+o)j#+v}a<})7@g+XMXxm zEGT{uHCf(R_bl`Bd7h7URcL;^xy8+z=YT|WW+=Puw?{u7Jv|+ly)`tDFM@o;@ zPdBz#im&_`(s-gZE!m+%weG(HL+CEa50OHL4QA-5Oyw$OjcAlcxFOI$yb=dfe_34MJXUe_(dF<$Kp*G*j!maGtSC(B* zzLG5cTiAi&f!6sj!#&S3qHimig`3aHdp7&%8jJ10{pt1AjCt(k*Jbjy)j!N|D_<0@ z82K=0;@ztvlk_gsUb$JdfAiH!_Gd=~b5xABG0#qux%67++=;7w{R{1nPhF`qtLzV( zQLoQduf;pnA2>TN%k%YC^q&w^|7l6iChbZ+MuFTLRlRlfp9D2HHqH%uQPg$!kZ|;w z4H;WzKkG^UrhL3UvPS!L%G}8o%9r#&$;-n=~N4WHVfv}cpoN6z?nV)+N}hS_F|?v=b+Z^D{2 zZNY_`8y}l%p5EDi`tb_oD=NlI*S|j>zTjHPH=&g=2ihfGJPl^var*b>gD)>;DaY)Z zms)hSzV`cHn^soEeQ&PXxUJ;;de_8RW0{8Zf!k}_)sOTvNk<-FesbkD+lKGc4*7-Y zx12id{m}lfa9@%3n)CX4=X@eQ@913evBdD!1m`a&&it%gk@J&9M_W*M|Fk8uR(zc- zwdl!2zT+QC3mj)ZQ@G{KEH-CfK~X8^?pNpd3po$4oNqU+c;eYKdBofT5Sg3Tt9_m_&+#uWC`n*wR^5@{haR9>nOADNs^AltdQn2M=!n1 zDh)pCmk`k&n^vUdEv9i@{M+`6(~TWxM6jM=N%J>OvyIF5(i5dz9MTQ5IB)wg zJ#;m?_#-e=E&lXvlckL^968G_^-o}$<9+^q=SpKa=hMMelMTyWToybnlHZflcBANM zNy}9JaKDX4a^ce3WR*6ReY~=x=GLX7KF{9RIyh$^UU*yEg1=KK$@)U4+fn6L7kyT5 z<(!RMY!#a>--H{||pS zPkvUuMa-D>{*&Pj2vfyjF3Q-Q5gqR+s#XhY@G~>7HrI-B+cvWry%& z->{G-j{i{ycLrMtYPtG{JZzPEwrAD5qmPzXKD1ld@JTo(V&I`gp1q4+huo&37Rb3U%=zm+xd|B3gXg#71EXZdGP ztUqO&WW1@b;=@OUflJw@-d}c>>1y2q-5&mhLNDvuLgsD^6!|L6$`q9>th8N1C48}1 z=nlbFZfb_$83CFb7Y^T!Sk!kw-z(i_I5@uU-ee) zBw2rSj zz2d^z!1t%0?_KOXne(Tg?wRNvj$6;iZhdK&7EB_4?f}m4)4Z_tY!bALZ!`bbdSaz$qyo=>-@5 zYjZhF_4^r@;5PU6>`h1JUEiR@tov(u0Q1gG$CmWe2wPqAdnYvi!}2Wu56e}fwzYYL z#~u9_YV#*uGhwUC!?5>zJT5=4-|O@H-LN)+k&VF>R;wyQiiM3=E=-402dkXl3S=q!#5R=79DazmdIJq-^@3 za^)lWwt$AiRyS2tViW_oPlwJqT4clUbk>c>6&<$8X~(3Q-t52J{w~?g?@*+J*~Zcm z@3qse+|Al5x986rCtcH5bH zt@%{?`*7CZ!%NiPGfCZxUElq!{bZ8y;z!)r_*EIpy+-3XP}qPEYsN+NC#ZTh8u9 zuQsVy20wd#deK=iSLIFz3%A|p?LJF~o=vw#-=!|*W1r>h{18@ACJrxuJsGfn7lu=%geF#$b1u5 zySF|)9eq+gmK<8mKAXi`Bws)C&hRP@EXn0E<2-jX^|9jvAwfU!6Kj`W_GR9jE}ar; z`*K!Il+UNgYy}%DON$LBG&MMu#x-?v$n@@5zd4i7=7tz+UGf&s;xt%UM{XFNgWI{rpo8pVkinuIRp#>Vci*%<%9puRp*UY$GTKDvv zRDHl_p=aK9?-M*$G70#bI4ZQa6o!>t7MaqWv~ym9ztbP<^G^?LKEe1j^qxrQMK#~k z+ajiJyqe2rqyJ!Aw^X|Qv~%XMb6F%;`>go??8s-2r3-^2Ee$qr%8(Z*o-cmlzUO4V z>94Bn^1Jgmo^HvTmE_g4LE{wL^z38nkEeOJ{9JV}q^M%gLPwue)eS=1j52G^yc-`wiTSL|KJ!;rICFQIUw;rl-(ks?2H+;bLrC)gcuzU0TJ z%oMO7(Aed`i7PB=NoorZpJkXf_hi=QH(oc_3pW<>?GCuh;P>iLmT~NZZ4JA#g3p*; zZVGes@sibXVDrtsuArut9P_Yd>efw>8_%rIjGuq@*OFjzP@BF?=$pv`PcPPurdyBK1}$4S z`-3rStf1I2?fCC3yShrEvKs>*T8G77HCCLx)u~^^W7}0#!P}DGMZylA-6B2n<_7Nr z`*^tiZm+x?WqDyDTbY@{<>?#dh@VYvX*gjjcq7JPul4!m(;dG55>hREGhvynmi^7t zP7wjym8<<@ZjOg3^ZL`w)Tl&xXyY@sMxc)xl z&9R%4-BX$4?X`CMzkWF*WP`rPA&GQjonITY!u!p9{kWtit=@mOt~&h+!`+0u3kA)m z-Q{&YcW+z%H2&I#obO)_WWOu7xXLXsaly%;uL;Io+sp-|uTHqka6ac*vA4YF+zoEC zCS>s4Om7fY44;>JpzY|MmXCJ5)0AeeTfX5!b>^cA$>y(WvS;R=+|#&HK=)_xzZ9m= z#Mn)+tTHFYQm*Mk5+N7)T(=_7M>mC^!63&neR7M zX5GKK;L({||ID83IP^ogMQzWzwi2(Evp+3blk+5Y@4N)foy($kit~0fUY~4QP-jrT zODFufLO+}FdWX4*H`QkJnz60ET$k5kl(uuzT=TE%T}53E-bhS5>Ur|&+g-jJ*L#!fS7sZ_*fMgIR+v>!|t^h%q#mGyAe-*?MeriFcYX?Vsm{rlf@H?~)F zPw(ElH9KF?=)pe2Q-1!1;=9^SS8(0Tw7Ri*Vc2N__3S47tfZ?mY#w?D?-AVRZj`g( z!17A&TGmw^G22iaFcPNH|!QW2%wysm<{RM7+L{CJ<3TmoVo!aT|yUSkB>e92V zdTV$xavq2|sr9o?dFE%|WHev#aj%BGaC6W(*rO$q| zC$ShA{?D=VpIsNG*SYc79v$f^0xL8xu8a~5@3|W5v(X~Bux8k@ZE6e z@S^JtO-E}*K0np`r?p^K%QJnkn7TtMw*=4+-Z5sdon&gm1(u4jGQU#s>^bJ@11>s!xs9$Hp^ z_|yH|;~)8^bsStf`{T*Y3dyg(NNOFMSGWF1+v@70_y6yTTz_@JpCSN;f3sM zTO1uEM4m5x#bhL3C#2GoC(SAs@?mCX_oZ_Z5`xp7$8TuZ5@_hS)nkgran_eNw==A` z@_a>Brot9AwxFJKA%BiquYR>|PCT=d$=3f|U3y>p9zf zjNOmyKFOEEy{oWKNfRXoPJL}>F4_|^B!*R^5WUrsaD9W7Pn>h*OHIk7Cw_JYRgv0i}NkG5K zUgyMArt{65vNsZMUCdtIS7cZbq!H60)BAYBlX~I%oQrp-E7}NUR;|9e>exi~M^^

$wBgRyCiTTkD=8shzM^@V^_}K{Lw>a#%#{4Lh)ro&Tdvj1V$FEuZE__|b zS*1GG`UsjY{Gqb2;?(3OkySs$B+d6)vG3dTRaCCA$7L%!n^i&Y#on!N6}EgXGkwEt zI^_uGq2gOJrQaugyB;vDta*2G*~L%hAMB@3&n=ahJ3A(9tGCP#)xNbti~{Omjf;iX zA6PBNH{Cf#WM0&J(GO|ZZyP`-SVJvBL6dH**Rb6suTT#5az;uTgiTkb8KE&PY+-yG$n4L0j9L^{1mkB~hz zSNyV!i&TztVXVW}MXgpo`HwO@rY^VFp5VDKwWyr)cEbC$>o%U6c{3&Pl=w}{i*X;g9~V z+fzO)(Oj3(dcU53$@_BGeL~6yJ7P3n-V0{mp_{4@p*UMWXU+@b3En4W9FGORLL!#B0F4>FP2`x`Q&0=wje6CipiSx&{gGObZkFpJQKc|-4&b)T|re#KH z!JR#uWv@IxXI|iUdt&(ush$jv@}$)p9W*4gcF%t}<;eWSlXJ??1ZU?Mg&8H;d}m(w z_~j3|6@U9*<)ti^KJBIN+nccyyhirAME)Wy12N-dZn)@ktciHPlj8r#h( zH|#V+w>zIxv$Z?c#MXO-Tf)aB?#jJ1HU8YjGIk%2sK7Fpd@UB&1!XfTZWwxgGykw( zIAhwT-tG4JpWMn%$oZO_WB9&j*501|Z;!2<`pUEM+qZS+j+#AaIQ30M=f{!MT~cB? zHk`7OcMkno#Q1*h$}_?2k2@YV@K$cMtNH6t)0+C4VQFKb&Ub<0t8!1v7p|Hex=-cz zFZNdx#|1FAsafnOruiPEIgANb3#VmdKE$!HftkduI-oI4v;7_=K)3=9j6HeS* z(95*%#7Du74%OLA8Obc{4}|t~ez;I{)JwBlao##96ZV8$JJaUZtQ9+Ki_fUlPn`C5 zb_{cpSiaV$lS<0`Bw&9)F*2EV}ah zL%_zJ2c%c;HvDiQ;(p`XCJ$EU?{~%6@+1H3G`@K9 z1CARGlFJ$VMeOIk*WJ@C&a%fRMELKKmy2e^`TaO^?0jnAY5(=B&v&o>zB;M&?eo~D zr@if`KD+9^z-G^F1z%-WyC;3CHQ!DDAvCAP{5Aj5R*AZt)#~>yi#*=@SfcFBuc}?I zx7;rFm}M)k_@J(I-^*RQgf10z70RuTyjtKdwr9rCuMQ!ft?#frDCV?M>^&zFv-V(F zDd*p&R-W|3Ttd%3@L${cf~zN?DlFc`)JdQB-I}~dy8bEigVi_b?_06zVx)H5d%;$r z4B@<0`yV{$5MTRrS@$*(8-_{3{gsCwo|rB3o2RI~x=bV8&V(aY=ELV18UYL6uTq(x ze{;bk&5%P~TncmB{QKwn-ko3aUbcR3#sj1EE{7GAr>HLS>o?^sE%i7zse|Kb)wBee zn+mSUw;!Bj%yRix8khQN+e?f0%6gW|{r82%-Mw{QIzaPt%PZ}E9`)kvG}RCLr4*m8luA==THF@7 zAnpI`$L2h5SL78laMimp6rMM6_xQPW%?6e~oKr8%*4Z{wgXyf!vPVo-+anj=H;zud zmYX#z`RlTaR~=tB%wA!9t0()6&RVUOW<%_Wl%?QnW$g4O6-G%bD1dk95ts$+2L% z=rO+^mCS#SZ!x+NC{upd^BI$Aq=5L&Z_3u!XLqy4>~8w{XVuncfj8GZFiGJok(FfE zII-fvFa1w7>9U3G`6<2&dlu{pUF=Z%Ush;Zy7FfJB};1}Pp^ES@2h?#J@x~$nZ8qH z=+}Me)k|(Eg--5cd)@JEd$Eb2boNsZN9lAvwbQ%u&L8^Bw?4^CW(Jdq@7sT?e~7I-e&wpr`*Wt-zW6S!{9mrB^yDx)mofhzu!Dd{`;KTtMVRm-}9;j-rK!v zarLwF{&(3I8SCyp&nedWpV_=t!2QI-z9WjkFFWtrPt@*=+f*PZ;~u8<|3XCmoE+`r zU6%sZ32mAB=h^R1Z$*WkEI!bBZr@Qq@4IZmpMGftzbjtD60Np*C%-L)7!Y%{pd63X#jeUquk zW9GudjR!vc(!8AD5&X4gr$(*cE#{hv|D3uW*0M#spLk}7mwkAp`e&)*=REsBqm8W> z((_I>);|^5a;NF*HsNoX0eP1bl%o&Km)#i1=^)=QWv`2er`oO)S|5JDZ@Q>oaZo#L zNyX#sKZQ>4a9PTzPB{OEr#DeE*=I%4c1yuM<=w&QcMn-cgw%$dS!s6V@`nc}CY#+( zNjQJ-mGR-#&yUR6lJMY^IpZ-;WhO|?GIbe>V$u8!*z9MJkA%WDLtO~X?uD0 zZ_7RFRz=2N7dyM_)OydLjQ!tV|J%{OX_;754f7(V?b1#QA1&RXP$GDhbB6Uj*N`ta zeK=1pT(l|YDn}EK@or7VH;Z(p8DFuzo_))=%3tdD=kJLpTVkEX9_w0$y)tW2_PinR zuU0T}^#;4!M-uJRdAt0=&VIUlombD^{5{v=%U`!!rd*G%Sk=ubXkkl`pHhnfCOr zUjLzLrTxjmj$?%a&bqw!KRhzM`*Bk=)~d(F2^ zGuXDD?M<-YX8mYk{=UAYKC5GUPF8)Lw$g;bxZruJ^~STe+Kn%5-FUS-!@5N|onQ5@ z1jD~VlXkTqd{5>c-_*EN}4SV1n*{m4|P?DH|0q*l2q3>}L7;Ohjty zg5O(XE$3?7FdhXPLFwBYnTUfZTmLUEWBFa(%isN4w*Fy9 z5&JwVxrM?%CW{waRn2Fdd9hMKNUvr8*DpaLPZ*Xjnt$ouDyBxs19^8-=RPbsVrgkV zN&R{Gn&tOO`u!%`PkPETcj@jcm+fvG{T&lpBCpV`5+X9=M|Vk-@Q@o$&uj3~>tcQ-c}&*wSs?cKQQ>cOpy66%~B*PaxmK7a+p6|hJ(-2lzZV>e>b3Y( zc;@emy~{4}w0##~&Fh$}S|*|O!E|X|;lIlqi`9BITEylF@~|)6%PigszY<1$%yglpm z$-_lQHyXHe9GA_XU&`ET{@uc_&ST;6;A{N$aXYL3B|6qv8=vPtG$n-Vv&^(x>l{m` z-ig%lNS1!5XVrS4zCQEn8P0bmcZ@A-_iT>W_`}gAe>~57*XaXa^dGxSxZD!neUshP zi{V?3(RaJmD)Y)E&lb#lWO$@;DZ>o*c`Hxp7teTWc|d-~2Gy1eG29dQex)7qpB+$g zQufk@$D7|Mf4KMaOZRb`QmdUFMNikS?3m%O`H$c%r!`lFmnHn3(Gwh>FtN95>Y`_o z>zdx{zBbGJuqIs1ulH8UjaS?ko{EOW8@Q*`P5VFT4p&{!hr8; zB8iiNk1W4Z+f#pEUGc~5N`n*Ln-4yG{y23@){5uZ8TspLThJFBr*kIxn}~!3 ztGi7Pqxz1&%oomDY`;HU`}5=3>pyK0s!-T?p^)Y*f;`|)1sZ1%ApUuSF{{H8>f7^?7(R~i%g9i#9U;kuPH~(34>e-`z zbyi#nKCE}3a$^P0x1K{CKP7Cp9pIQ?5ccAohO>j6rr7)Nc@}(jEt4)O>H&#R2!9^PKi#E=31X`w10cf=NA*_M;NT@ zexA0i{KWK}p01MJZl>(!yF5gq*cuJ~REXKCuaBOk%Js&Jg+qLwPD>(#y4K~*w;r5w zR!_0Ej`2DXl+L_7KdS3trY^^WK53so2krIZQ*}ASA52cxb9dTfF?H^briNQZlU_Z2 zP`LGDP_w@^@85rs^=CJHJrVK8qKmKg&#hZuMEf=-Xm9!Z$SExEmXFNiUvZ^%xk-^; z8+R|XaKAL^Q_3<^o|_GZFGH?fSTuFKgH>iD_J*fG=Hvq@DcN4ZY}ZkA~J$*d9zM_`S!a15%=5| z8`e%)xt+CFTT*AefZ8wqr7gKm^*di53Fy8W;8N;y)k`Y(=DKRltDjyKakig7+Pm6J zwbbkCm5`5R>Y>MOFa9#6>wU0L!#t0^*WUlQV;@co7I)e6*kgCqqFFbEW3}>YGAE^Y zZk9ae!?2-mW1{$fd7gZ+`ohj{Pv_OxUesN7{}HeH5B)=>TlTizem7;WwqZkck_S`$ z&3*3@o@M^~fA8JRwqCfw|MvO=CN}Tr>l3$H z6fNl1%JANq9uXY!*I{`{^SQQ!-!{Lu_!?VG*IWT;` zcG~iKCePSkOLpX)yu#X>@#(eqk1SK;&+A<~vnFaR-8Io*osL@M-Dy`NYtGcE9R9ZQ zbo?PN{avPK{8s(nWR&*$9>3|K1uC{PbhB#zc-T&4wPP-eI+VeGTQVl)q|L?0DNC$< zt^22oW_I6o*4q^;{pQ?)n5>33o7ZN<#7UIjk9_>n{^X)R%Xht85xuzlg9MXU>%aB4 z<-=afs}*lJum2==tNDGMXfF$P@3JTfwdDQXKdtMY?`4{$Y;7==mA6!6t@MRL>-OUe z%8qMG&d)t)Yj|>B$F0amrn3@z{7Nf@%wleH=YJ{vs~PfUx4zr-f17s&t{3|p{r=h< z!R9Q7Jx^D>;;H}gNAY@HdggT{rX}7LbDu7g(DBq~^xr8O&vq}rt7KwmlcWC&M>(!y zh1^?xdhK_Z(%IU~%1fj_%aAO!dN#+KpDkU`YF*xxRO64ka(_?GDW3hJ^v3NVwVcqyg>&buE%#-9tn_5> z!tyO&N*n%d(5^DBxv?#Q%~)o~(YI_H75cAS{xRKkI#KV9!556ouG&xg$ z!4Zi%&N|fxLGJl{IgewMs@K~3#2n|0RJvR3bS;6s>-WstTc(#Do$}h-{;7Y1b(Yum-m&FvE35hOqEO+%?y4su7eobidA1evd#lN$ zn+bdp_gav%!cnUF74P~g)mv>77Af7X|0h%Q+eU=t;@a0Yf<7z!^4sMyUw{9!FSpBU zB7d98R#&7<6S`2N^UUGPqQZhZ$|qYb*2S-QcxjIC*6k~QoIAS4tgkY%^!zy?r$h<& z*_Zwv)IKd)d)~A)*4JfKeY69&ugU*K9fh@WZhT7*{ZLe1$@ylZ%oMJjI`^+|p1K#} z@L6h&-|fwMp_k@#PoDNSVzT2&E;ET6s$17@dB*okRgb&%UE$Y@QlE8=v;!&}Zm(N- zg>CN3G8v`&N^FykiM|lxz1#doG+@CU;mtnlw#0oXdfr>Hx8zcl&JpgSzzeUpbR1`0 zt7Iz|o;{l{D)VLI*+}6D|1;+<2`;Fux_0^C;c!=eS8-SQ$*=Z33c0#iDCS*U%|*%2 z8(1`#D%o>qo}J$$QgmKuZ{~ydS9i@8>Wa8&;r+bR{j1fJ*~`|2zj)OjQmHhjAUWyw_5{88g)-HOcRtpCYTjO+ z?0BzpyCHKyb6t;II^7Ocgu>5`UpC6z87y}ldfNi-xGLy9cN+0;q8~+2D5iwiGLf~7j*YYp76fADbx4XtEGh6 z%i6haQi;vIv{TMGif6mdbPm_`%Z+4qghrMb>puI~t?y=hUPV*q-+Sp@3NNQb z$2&u4x_P^CtL3Noquu{k2KM&K{67|Xq|at=dfC407@Htnm(NRP*sM;9)OhK?J!Y|r z^L4umpG-EXzqtDT`+ZgGiFpg}u|_pE)*i}tVpI$Fa`g%F`s#L3V0lQl!C9dTON%5$ z&Q-I-x4ifg%O7i1AmzAea<*F^K0AARr3ozz4CJQ+|{J|F(R7(-OrS%b5xGFmvHTO zWt6L7JoSF{H>QBi;reX5%66?-<+9cQ2eqDTg(z_2{U4IWgnQ+5X^S|kXgW-#hR`eK1Idk#kIAE=Xu|*YVzgw_#{62_k!5%Cf^uaOoHc|rKw%noU`E3 z^vVOJ(XJQe!rTKzdp}Q{xjfKZ$UDD)>H8bway6zSdqVT~e>`kod^!BZFY}r;)3@AY zUQ&O@jXziF-Vg9WH-u-pJ;?J?h+EcT?>}s5I zJ7DV0sP{oiI;KA@EjF&&&U)_SYWC~=sgI|vSbOwHf7AT3CB1(;lXm~BI-^q{T?M=?Y3(PwXr~bAz*}0BW-_GlgdG7ix zy(_$;ezWiPxqIO8-S1aU%h@b={y;j-J7&^tKHELF|87~W^zLy|c|rXWeTE{7v?7CT zpXL|xv!1Z~bB~vA){e~u8z%;y-D?`%KX3orUvbMn2#ZKOlfL2nGVNmCq1{^w|G)bq zG_4~lP;uMZyzLja99^~Ko{HOl^Jwp#&AESd->nrrXt-M5dG)@uL$~y^rk50U+|q8I zJU70(@yf-3%v}lRUpR^P70m8kCDoUI{b|p!IE$NEJ|@AF^XFFt->5H%7reGwUX#K8 z-U^L{x_1@Bod13_;V{xPnHOOnm}U07t6*k|tG}PLhVU%2K3})2uI9vdd$N9sDqrBY zWfe+T_h9Pkv{K%kofm=+bqH&gxK5Pn7Fzdvo=?~fLzz{trk=Q3WD>jm)ggtPj2bFI*^Ov<@uDdGc~=r|7}Yk_R_l&RePA z(0I^Hsquu{#JNY;Dqh=_dBx)Jv`4?%b>5|Xm{&1*;jdz~{{2_@uU*}&mHX7uvM=Hl zlXB4~AHh#EXQ-?TeAstQzWLKcMVq}(gPKIEkJ&jThCQ3~?#kO`J;`&tP39fkU1~1* z(cQGY`>BRW+Kj8NjY79haJlB`Xsw?i9ClpZ;z2=WU5c%s>3g@r)g?Plu4@Y~>~dqB zvXJ@UUBhEF75pYG>mQ05?zv@rDz5$6-S3n6<2jeh=TGHvh%vXIN)w6a~UJ=cHc{&Ys&=_1pi@ zMn{MLN7Jj6>(}gix%`{uzqjINTW4Hf6x}BHcB*pV83l>$2kK5vSkUvcf7^MhcgL5r z3GB8~&03@WqUep{DS{&D;REP^YU#Mm@jb7EV1nX)1F4lCcWrAtd4$Pz7`%* zoz>qL(6waNt}kZRen$UU@4Y!PW1nBi*R?MfFON|X*fq^Td99_D;d04~Y)vK&Q9ByW z^3Ahqs>m1J@^m@x7tSQj$Df&YHZZeF-!b`-xWDVQ^Q;{c7H>G2?)8l?zCGl})VEoE zx7q@2%-B=J{M$Xgq#H~uE?b>>JmmBd34{EHHY&@q4wPuV_{#F{TJNe>mD!A^Wl|SM zZkr#vd*%|gl!BY9jtM;8u;|6aw&KPt7Adv!-(XKTQUgK39%x_#g| zZhO9n|5r$a@&65;&+o?_*|&7ngn~be|F6t^^LWwkHFZo?Q=f)0FPQXb+L~ADnf)J> zr>wo-+cRh43m2QD<7P|Rw(h+7cW@tkvt5$DeVm5ZuWp_2g~CCaFW+R}ZVTY8~P?X1Wr* zBlqWlJC9A|z6Z*N-aZ-VJ?GHkMvIOwei!XEFE2|;a4O{m8Ed}aDn^V;vUzaI=kBvK`e;x3%1cL^0t&bgQ) zqtd!;3A|{VkRnN_-qfNBVZI{den+Tt?GcHKr?PXTM~U(>?w> z|5`OJHKl$(Nws~(QCC|P!o7*ik zUw5{_^IjoO_Gc>Fm&`Ny_ia;hwRIa;md&OOhu@sJmzAp9sQmSuZ?y6U6Q5~sq&fDU zJuSEXsKNdZg4JCtjir^__Fwswr4&&cG5KlX!d*TOd92xWj1~WCr80ypb5DPnaXsmM zk(sdMqBaE~%RHTeLx+SKpEn%YlzirF(LW}=pA3P~+n+98e(Xo}-%sHm8RAzl`dpGd zBa}FCWw4Frxt1rI6SoJxYDj*NvBk`fbv@UOI>Dn`=j0sa`N)Vw>uCubgb#Co?mUq23*5~r=?C&!rz1|*VwmZJ; zL3Wp!!4a7?`y9(IB}r-DXr8pBddEfQCGuM*eGi*e^XvEfxSg{VWZK{K+ddaGe>HV+ z%EXe|9r(ad^p$=_gY5Psy*IiZ-+y0`$bmNZ=jp|N(i*Ft-zGSF&|4_-x2_<~m@~6`EVxza# zE8i~Tu;wQ3=G=#VOnOn|MyXY>DWvI+OPkT|l_>#_3Vk#56 z^DLR#D&{QAUZ;6M#9o16(s#D7yPvc9E_=5pm;7=y?0+b2chiA0XXOGB4bILtNs6re z^XE+aKQU-`O4^ygUB}P$)w3iPR_xE1@@ozMl9kqL_n3CAhJM;e2^qX5QEENiN zja^%KyqsCDVDXs`ua_n4h|OJ9sm$HU8NdDJcB4+If2-{o9*bJf+3u>WHFw+9PYn;g zb>6;m`h)j-xrYLrcVtp;S{jDy8}@yFAKh8Q@OwoLkN=$Y8gGM5ZZF!*F|&VXQHEsw zcCjLb8U;&!HSww6#A@faN$tK_)cEE~$*Y9vqP+SC7tP;MB)LxEoXm@zn^e*p1w_wI z5r1(?`L!dP_>Q12>6KS?6OSZa*!XMWv&FkprQ&8>S$6eu%i-&O@Ah!EC20L&o_0O5 zuJ3ft-2-lnAy<@mQaY}_ueNCachSy%fy%6H>*XFByzoAHY~_cC67?T`T%XMNT_M>& zrHWmWr-^^%(c{j4UOX=6Gfi1hnKjva&0_b)smB*jRht%9*RQmG$Z6^*BUx6QQjX&@04=H?j z@A5<6ZR(eH1^K=FQgZ1k$FNmw3Ot_{zmkSNqb%?kOy)J$+*5jCsv(ir$&mewzGwSx{A?=e=*~ zY27^W;yX6JEM2=#f7S8+kM;Y4L-HdWe|LRnll4#e{EQ*~++8L4o~6e{D_Zj=A2{ND zY#zh=Vu|xd#VahYUH-IpM(f7oU-yR?dh>qXo|q%Nq3@Y>;p1-2SVfznpLcs-iTHN= z*L?Ax`txMs+81vQE%L~_XBO%5d%9irqPCgBor`^+aVt7?I9z^rO7HgXmeVHcimUD{ z*>tAqL0t5!Lsf@+-&Z6&Pw2}(%h%Vn%|hd{=HhQIrx!Rc&j0RU(fqMX^lGJiV~9Zg zQijLk%ir>;Mf~_GW8$3r`_jfvn|G{7#3xzY6q$ANtin0|%k$$@w>4R?w(hs<{juX9 z)2eXMzEj}`cklXpY0K|q*Ps8IZbzE&svqj!Z11~3V*S$?cBakj(pSs;+xL1NDXk5d zU%tUyQ0;IgU;M+%3qF)I*aSWBF`T^6B#u`#g7>e?e$^~)xEqtAx>bO(yqN1 z#Qw)WTr?%pt?SCt`+@U&PiVgMJN&Zm-=^#-Z?d}9?)x}jbi(?k`Y-Jhzq<7XPG#Qo z(=l<+$|)u4)3O$Y2zELOO3sd8`DOc*Lx89E$lijQ4|4@)3Z8m&DrHgJl|sGC8p$F& zhf@|OyCnmS>+`J(fmm82(?m~S)P6Rpy$M%$ocT2Qw)rNpB|>V;*`^)mZ8)a8o%(e}Smt=@*_z zKfH4^(Lzpis%MFz#>5)NcXkz1ob;=ibH3kSlFgCl#eE^4y)k_g<0IXS+6QaG9$XiY z7b^`@XxuD$aDjuWTf>c1GY83{RhKtT+goRK?&|XckpWQ`_WWJ@;lSos8z#N{rIVnw z^^E0$Mfr|vQ(9W)HwMKvBtMb;KeOXVdX2)bl$&avvkfh0Kied;CUk<;jXm3#MSZf( z4;bVdXBGR*=3!{lVGB5CCb7Wwa9qu*KNid@cNm#5PnhY$rXoCr&t&yMhX0;#kA9lW zrPjYUOyl328qIDW)|LFy^Vb~Py6erkES0IdkK3?M%Pjc0)$!8B*BQRkLhT&4ev90; zk#ozbC+v*WFo4WJ-77d)R9|od+$=t%$N^;6FNPG?;l+A(NwM`W^?>j{r5KML5AYnmQ<`f{p|IxV>i4* z5BD&qzj$ZqFRgT{;j(~~s*GFCDHo7q1 zpS8c}Kw6a7tr8Xujm}kz6_#hLQ<330yGe&Pa>JCn@wUq+e$KSoIoVqH|EE*#tJc3_ zWzSlCeZS>a(J2c~>Ank6PG4RZY`i&e`t-9eALzHkRO=tjp66Is zxBM;ls1@NmCf?Q}H?hmpF64Ve(b;Fo^Ui9eY)&%s`DB=)JSp60!l%$(c|~R0I$rU# z#x_ma{w^iZV*6qD$*(jY8!vGCAvVow7hion(gv~i)I||o7mlo)6~(~tX&DoP4Au=| z#mPmP1togv#mR4Evx{%Ld?=pz&|V{r?anpd9QC|Lfiy2~?*%q(EI$Gy`jbv?lZrN) zG)G{;|G9VfZuje-{ASCZ8A7+qw^x_%uHIc;y}r5n{l4P#8o~6(C6iiS^VHeiOX;@w zdBggz8ppEpe?uoYJqotxw)^%=UY18*j_3DbJC(WYr&C|0b{}B=aAkMgkD1et-ZQz^ zer9ulsNP=|;Y}CWSF(pPysKt^zwh%q>-Vh}Q+Cc|yQdPj_EE?6Isf*YJd`@)u1vOS z*gvbkm0SN+#!NJCS4%U0t?;*U&kdiIDS?JLPtM=q>Eyoc^!I8Qc`tj)xE@q_T~XezDE_b2c>U|Q zjHg~sozGyUBNoGYx+Q&My|a z!R=t>_vghX?gz)0Zg{QYvAH16v8#kLwkz?G`sL3C(Mnt^@}<`A@>r~{WXUShu|(*g zW`G*|`C!uz*IkS|pPanpAM8@UMzv0~=|ZaKgZNK8y7@M|>Be5Qv1g*r&AYPs=Bdq6 z8^pNZ#5)x?rAYe!(dkisf8@5y^6xI-qs^#HOP8 zY<1f-n5yOCSoM?YrSdlk1w46jB>v=`Z2L2N{{3?ZVq3u!!hC3f3}a;6zode1l@ko# zD!a@yG}3?2H2<|BpQA%Ek6Q@WW7Vy}jRkV+7Z$|JA7?t+`8{Dl+Z!D}1^p$5K78!l zeuQz~`8J1L^V{~bPpJEE=V&m&T1VKSXOlkTAMrI4dfnF99GcSYb3OU#w~04nGC5kx z9c(rm++yMRQ_9D=Uf(D1e`%~^BLh=W+_JDA2lf{?It%R+V)|ttv8-|W^4kFydN&l; zI;@d!xVDjPmFQy*6VZt*H`O}#Y}FO0d(yb;%b(Caoksi>%Ix)R-!y&pYA`%o&g~U{ zB$Msf%k8GunRdmAHZ|X0$lIL!Z*N@RhLCeC2|)|LB)FYwk*-f-F7oU?d#e9a=duSk zg`V3susPpb?xQ7dlc8C==mlpazxz(j$+u0fUP^rOGqqhvX9e4hqv39BE1oXdQMOi0 zFOO^PA`6BK{mV37^8Y#SIq|sS%!eU2zbl-&tS7JiSi>*upOBAi#K8|tF_I<$?u+M{ zzxi(S<9NlcPxa0^XEv>3>wNWRwWY$h$w&4#zIS}oJnxG3^_r&Ft~+@4p|}K6$ZSgx)n}0xh!#?eUg}p~D}?q3{c_E-7yI`kIpD+()t)pBh5c(K ztNcH+s|sxq?lFzC`F!B)hYOxxjXtH%)HH~RN#x!z<kowTHOj5|?KROORYeW zeJ-D6oe=AMAvw>ow1TJORbb%tcp)~^St3r|{%e+4zja;_HX-gTpH#rV4XRH!&NBC_ zc=J|zxwXlu^G5ZXB3K1?I)(o;np1T>aoYvswjS=pU&?9r(JjE}|YSiX38f1!GX zu)cp{+~?VzX$nR!O5M`$yG$wy`d-~~wqRBrk&ip$w0-d8s})-gzEybWBi{p-@O2rr$Fs$5pr zQW~#5YC4e7bk;|9#gyf*Rbm=XuY399eMDE#$3-4nH%Z!@(VqSKK>XnuY~3Ngg+K0J zFg``EMEn->en+*&1c`sy9W?;8)Tm^&-* zkw>6Y;lrhmW(u)}HtVu)s@W;BgwdoX>(s%S9>J3ibp4f0P2}|p*|X-+6|Od>ij91# zj;ec`c8FR0oVsaahw%m9{EpvI_orT+t1p{%z2e)X&pSKc7<6R4oavC`SRC?T`V@&X zt0qpJsHw#gtI!+aaZlB$%%&N&6WpICw;zWJrBes!`+DAs950+8^zq#^ua!*xp|ewF$sFAj z(VHRn)OB)0))QyN_0pHuOtD+_|IcNgCw^0z`?&?Tm(E=9hbgvkYB@rgnH<3SX`tH)n4B|DTW7pS$zSQ|fx0mfve7Urtr0wF*Ux ze7$E+c9mIv!(Hyo0mTDHXQkHqpIq_e#)cM!BU_H!PL%%1`iv_x?lb4z6%QQvT&~P? zjm=h;QrO6^6GeeHf zT@)wisn-2~ZIRks*@fQMF2^qXq~9<1uw~1N-}3KP{r;D>Z}qo02N&sUTk`gvoLMib zzCF&H%kfEUVA|8=|E}m~e>xm%T3K51IwX=;?p>FLz=V6US_=w{Q?_YsOP|(Y{oH)# zk@y+=-R5P?Xp7u%%O&BzezT_Yt4AlYz4F=qEs1z>G&L?oJ>^sDUgqqrAMD=A8@)cT zY(r_)vqgujY-^I&3fW)#%%byCdAoJ_6WZ#bFQ zx<74Hl5}46W%9}$&(wuW0!2DnPaU{^nSCZP7>GXR5n=d6Lu9FW(K%k32XxN#y#!4fo$~XS@GLZd;r0U;f+SHr?B@ zzGqczVg2xDh1@kyeWN9Mt1d=7+_6%2uFkAj3%m0!VwX=d%S{V-RUcrLzac!_I%-+R znuyoxMZHhoTYZQuKD+SzrCGdnY|61`-f)-}>X}BK=MD<*x69HBT2*cO)3By);`wZ>Pnt=kr^p{?D`W5fwk3Ex7u?Dy^vz@%QI4_54fa za0%oHohAD}kvYvjIPLv@{Yg`*jDnu8$UC!Pf~|g4?Bye#Hq&`UG|w(tBqY9W>YAFP z+PW7T6I~@HSEz05Y$=;@si1R~^28TCSA@z6^bh*8JGV^s+&AC*K%y8xyNQdyb-aj1MNTc_tqL;Q4|qwYJW{$LPTbMcvzV0G&@<;{UcN41_L7Dk>DdYYj+ zL05SCbUUG?#&&F#fz=suvl-i)7`h_cUQ4ozPhrluD?P=$;(}(>>TSmroHvJWbMaU* zJ$LI}gX-HSH|+5}{L1X(6m=b~wBtAWJ{#{kb#i^&9>JNa9?U_1e=aXHJC!JNl3{7< zYw^3SBDMtzb8teLVzb)*&>C5FIu@lnSGXTc2Ar3lINE^r>MPOXT=>;B;xvZ$Dzd< zpCv@3=AC9YS6C3cM01C2mit1B$)8l(EKNm1e}CKc>)zUVePM5&d)KQ-$82N1$e?-i zP5N7n)0Q$@rh88fY|os!Yp+kN`SVYYe9eA1%4=6=+$>`G!BQ38A0^_R?Y3kMdt%JF z%G_g-GTHsIUDBIuect5G`k5_%W#^mAFLfWUVG28XL1ZSkc`F*vEQg*NK3U*x8 zH`P$%v_zI<(YN+u`Fk_|9A)Vd5!o5cZj-y=_jgtEoCAU02OeG!-SBpgVcUzP(Qkq- zxLj~QYmvzlefDyi@o5X=_sSM$`X!p3BjmRK*}J1YRuE@!V3jomL3eMdUKYm1n;xh#IY9d*X>*IaM`Y=S2x9;8h$X!k(#q*!`8er zR*auJ5~sX9xr<|(;+b~i>83K1|9{-o_5R|qrM^OoZ8@%-%hHm+wd+t=Thf()-quq^ zkK;?VKJw()gzZa8FkQE>_w=dsJ1otD>Ixy6ZLX4+Wbb`e(H7NP^2!p zHg9fz*_rKn?A$^3*$qm&Kd4U^5!$^i@8Y8D{$+piM9UuY`&Bky&S1O5vxG%|PTIBU zj5WOTFXj0J6vVUFO{ue9e7g0)bAJ>27nR}uhgs_C1k>~%asHU~Q0qsTS@XUE^>2kD z>*nPN?Mi8!vw!ZLOGkEQ``+5S+cmhd&eFfG*G63{P2BUxzJK3d{yltk4%Hs(m646 znFN1dToUf|pkn)#_qAOwA59e4^fV{nN|1QL;Y;^I6E3XgSrNh!`uvf~oc6$lI;(uv6fG3 zci}sEv8HTAPyJc6!YaE@pII>L*XlDN8*cA$I8*v5r0Dm&&riHNHZ+v6ndrx5vmA-q zv7Gl&Rl%NVp7*lT^xcj zN$*W5kM(k&@mFM`&ZOAN>l$twj(uo8$0@h_j?1ZI=ROwtZG6}|OY+KCt28Mee+=1E~0&|Ni{a*^=4nrU#`>d6s^dPzxyIy#a*c?Y*#|( zsn)el|9-09U+Tuq;xATc!CA-f(%3{-`C?stN>9c~-P470} zN!x4wa-RHk|4+wn3o^@}3OnyPYg@-Nu3aTo+jo2pZT%3sLn=Rq;h?6Oob!^G^W?O) zvNLYI6L;8iy|YA$+O3JDJ6G~&ZT@fgdtrt{{4W>I!>1n9OFdX1Q4qjwp~EI~jY+P^ z!PTzo>umPa+#~HmAG7~O2A>a1v~4f_Dr0%&@S82Awo6@9!%QAt3Gb`)sq1<-PbI)v zu>NiQp%b3wonKxRnhHPrZuj$3jO63%+ZS}7S6n$&OHN`{gykfY>d*Du!FN(;`ybmI zm$`iErKh>?Ib9EJ(&7zq>rj`M|qX=^A}=1Y-^yoA9yi$~B84m1-5;bKdqAEa6%4 znX62^N$c(!#s%NAc&1fwK9WDN-t$J`v2JGmC*^yXWF?E9nJnaOV6MGnnv<+~&{00G zx-(efV0)3OvKkC5VTWhX0wXgHb-@D-HnmZ?A-KNgW&R)iK=1x2Bfl}@3+c;Cx@(gkk zRnxU^W^dyT+wHU6ZN9>^rhP5% z{N1-#zKJ_s*=taJ``nql!*5J8JsNLHn`N?SbUmA#efgEF=}P_luWi0Ldp1>_y*kUJ z>TD`&Z(MZrYRSFZG^Sj=)p+yD+j|=re|G7_2Y-&v`u@+`ZNp6#_MQZ7i@O|sQjYsV zm2a$Antzdl&;9s1ZLY72rWrTAySKuqX>D@zG(npzhIP^hw|zTp(3IOdBatQA=cq&A zmKoKv!wRk}IkZRA#ztl*^X;$?7xrE}#IucSeUofXX05654WZ^uiMN##+%9-BTg*J* zcC4aW`^S63wzH2W%`(hMN#aSq!SSg+`9%T`e|GP~6|A(DBc&az+@jU+9 z(U$3ox+X=wP8qJdqof+{FPoU1vV=$Z`k}lGw|6IE-Dia5UC0kwY*eh9qcU^nG$ZA; zG2Jswqjqk)7HV9a8>peYm6_+vnXQ~r&w69J%cex`tiL-Y?~2F5#T&CXhonpFcAM~D z+L}H2`-(EJ?<=-$ES9f2Iy+h_L;vm#%dY44N3NL~$t_TyLGx>Vbqn=~ymace~GxxUL{wU|`Y;)GcJholq8n%x0YpM44^&2zJzTuA85>~Lw zwff2lzdgR)*El}tN^R-yO3PpW)>vKn^%l)L?3(A3GnN~Edpfru+2=}r^Y4r8%$HNs zwVp)slul|oe8O1r)s$)7cRnYJ1w8(4@L~BQj*AvuAI-{xT0JW^IvR7Z`+aw}<@jiG zXus`yLHkQdL9W{#9PantY?pP%qHsfJ{I@f!?aQ1emn;5Kejg`zEb+c%s^^v&4?~ZC zx+BOHpPc?;#@YLVR(Gf0H1#UUEo%v`()#xH0e{1O=EoOov_GFsOYIgv##HrUrRfUm z_gg%^_&!*Ac!^ZG{|g;+6W4qFju+H|)>S+2UO4H?M6Vw%Z(03zDu>Lw?DtV?`ipHB zjQq31JGyN)#6B{+Yt(-9ncvzg({}mvw(Wmvm)qOCGw61b!<-C+v$9!H;QRZPBa_I%Cf^5q@Z@Avo4mRna_apLs+k7}#3 z2V1;WQ_Hl0wu!nMv^*RJOd$zQ_;Y|DK1J%4-E%y;z-y@Z$}JES+g3($GSwYqenpP+W`!wXU8 zTkNNnf1P{K|HW6n*|Uv$k}JR7Dm+{3r9Q9QNifQDZpijLr;Rfsiwe2+RT$1YUJ<@~ zkIEmvy)kz-t`iHssn(WlFKc}G!1|QbwEavsv!v4x$kJZKe+`z)evUNBdzLqsKvbHc8k>-+Ww zcuoxS;g}S(J}mLuv$imUa?u;#8M7{`SJd7X`kc$NKr+R3ReDZBr9;&Vo(+qZWv{to zam@U~Dl2uaI9BeO?>$*txI5KtC3I6BbA8PHAZpnhu!;ZAr5CrB#k1{-^U%KS|NU_0 zFP1z_y_c+~wKH#;USSXJ+R`BJ$zWs}-oWbmAnfg`H>zjCnJ08s@XUXGMeoQI_2;eU zN=t4&G_nX>)K(O+t1DtnZ%nAO=~7pY;CXHq6Fsw|8d9~QKb+d{R2`z}R3R9%Z6`+- z_eSxTuTFb@oT_?SRg?3ng5PScBB!b zRfT6aukd;FxFg5gb6vkt*rak%spcgWIt%|D==M5W&E~(Dlg&k0uB+cnLh9=yNnz#s zy?&249nKqyvvTAoJr}rR-~U2aYEKg9yQQk~DZaC`lvh}Mdm#B-+G+VchA!nk9w=eQ(4km$H>MEjv~$cyPyUx+KK)}mv);tk9mkHppK<-b zd^hjIItk)Of4?~VFzYCz2*Y#3K$%2=WS!fp9lAF!9htN*ab4j1Ltjjoo-evR<=rCR z%3JknnfCpXQ+HmCip@xp@7G*?+UrlWhmQWgEBCt&%rnlMy^DwYG@IZXyEkn!&d+Ug zue{0p zFYZr^{HZFbE z_APHkdZN<$<*j0yXWH+0WT4-mroVjA-8Bb|HEic4bZ83&HoYs`l=Z}@$7WxANW%-3 zUIwmDud7`h^&M+l zwjOK@y~8@C|Kw*ojvrYc?V^uP4-m1=TD4wlL3*eC`GYGw9C`gMZx#lKZJbgt=SkO7 ziJvlNDP5e*1q}Os*(7c{@|`&$==`(q57>X3dlg?gUnuf}bBg2IBlBurZYpXzKY=ql z{MVzXlfh?rbpCS`FH}EYxJYkZT~FJ?CF#xIQke@yw@CGbFL2<|UcPI|2JPAD1`Sh9 zR{XWC*Sy`oW0QK-Wo6zCeq3*uR5yMI$dO#?*tUOp&+!Q=Q*3Q=%X%k!Sf<1~Ote^} zl)6xXEt#KT-b8suR^}Cx*E~-)KB6D3WGpHtTyH4oBc-!a+>ABkdk&Yz##Nbn=F3hs zjZ51lpm>xceZrK7lUQRu?)~JrxHVAHF7m+49sbh{RD$_qmCbf8-;i_a-lY^3RcpKc zr$(_R%X|Wy{`oC7eX(-e#{%E?Vp2;@5(FO2N-CUV^8Fv5;G-Tfz4^?C^8DT&J+)QA z>cMMxx8JMu^T^ouA=s76?C8ew_ZIsesM)4SG5hI% z5_CEELTk>s)xP>U?FkGUjU<$ET06zo{8W=DHoYmaen!DIwhXJ#Pm}96ADiw!|L93g ziOKhm>=52`eDmdehooIr3^w{zeD5V0|NcBx&foU(1IO{wpGm^&cUOIxte=suZ~x}| zg9pBUm6IdbrA0o3hn%?ce$__pu2mPUD_-0!jorRVrdQ3DVcFLQCISKl(!A}qQ@hr7 zd3a?%-1JRY}Cv)H)Hb-lS#?$cT#(_#Lnf0bFA4e9T~mwW!KV(vqm!-i!`cU@a~_q;bL}v zgxL3U6IU==^F1l;j5@)~&3N?pjx61Y^X?!({y#H{w37`iaX_L}#!qyKtVUhi8Oo^3xvoqg?+ zyYv6pCY)ZdA*e0-*rWpXv))`Q5_+D!34g!jU#7|9hV`gscTK;RJ23hIU60hFDM%lKFd@iF8gifb7nKi!}(`)ZQfKa zuAdiuqT|UE39)@Yotrz1WpI+!L=|GMieKe`;m!?>9ZCw!hsf9w>d%YisV)`({eVg4ZSg zXxekhC}zLGrWsNnssx2C=lou(eJ3gM-l^`R-xf5ToSAlN#ogGjC+7s0aB&?tRl)yX zmiK9_(rW3PZ5;b-#2@U@Pqn@-A(H#gly~Q;H-T5P0(tgcuKsY`_i;$SVQJB}3-V#2 z-}f9=e7{2C)qA-MQ*$e|5dHL3K!Xa z5R2%Z^L7K{%=@mF0#yrUo`2?Vw_=^Ou|h!nCe=gYHKhxyuh%Are_^Vsn#L%)`^pyE zd4F_z{-`d!p44n$@b<{flw+LnbzLuAXT0)Gwkhq@%3P^wP;KA9w!VyY#j*`t3wDJ0 zo!c#O>XK`ClZuj&jJg^76b4PzjFS^yS%z1b%`7ZfndI;=sWWx$#?22lH~sqg`2W2W z!Nb#f-*cW7KJ$P@&$iHa{&7}qi=DP%W{n}6=kOJao5Y?=o2Tmdq51>MiaAG4Z}FaT zByhP>t>{wEM=l@l@HwvkRatdawQ9+|cddt__H93vy!jZP@(q!`{S!}_n;y-TVA!5~ zKKjj)qB+xgPc8bI=w;j7kv)g?+-04E&w_7=i~g5$Im>YPOQyl%EKkoamjd;dDYLkZ zm^8O+UAN|oy7=Bfm~!z0~=J&x;DXezDH4|92i`UnYd+AD{VwOUNm*-qV^F`V^rLkK=k(kS z)jD2GdGq_xi~{dRk6%2yJu_wnyP$O44ehwy?iXLoXqPj5x%}(7GWG!8Z|@qcbBezI z?A1Gc(D%Yxj=T@k6pznp*|$Z|HJryT+523;`=e=`&-WP!MtSwV+}Pj5nsw8|EH?e- zmYaX&Dhz6WSidqXJ(9DsZl}WYS#j1GQ%dKwSxm7yls$XW=7`PK!hv_sR#&q8o@DDPMdV%{jy6(4*Y8~D?ZJ%i*0S_ynw9| zPuFbvG*@qrL*0DuqZ6ymp51=)<>0C^%=qzP_s>Q09SI8y6!5F1`JJWj6-N>@-4ihWNbDqmRFGwqo)?3#< zSHQe6k5Bc!`&WP6a?OMgjdqi2O}=AOp4`y9 z^5?(Jm+yA`uDT~vrX8F0_vlg4KOa**n_D=()HSeiefV5=-l7uym6Ju57v^lZ8L3%o z5v(Co8f0Zv`7>m}Ug3f6nbYI+Uy6xKp<0)VB*8JIjPxs<(!C>nPyU(UQ z*kwNLNlE^y0{>m+m%>+63D>@L`nqh@$MoaR*8V(addJH2-Tc*WZ*}G@_>|Rsn!)we zYvgDs?HZYmD~SpO7)t8 z__oqFul8-JHmRO{WpbXB*HOpKk{wlRttWjw<9FP|W)bI9f3AqXc79w;Z@5SnKt_oWv7t(uphPFo=m3MP#M(%T-x7ejXFpwO4l4?Fsv*zrPhW=lv5tE2oC97abst0@=-n8!N33eb7Adgsg(ziBq&%{KS^z0QaAF6vibDVvjdNBV-v#*@Ok zKc0A;`!u-z*B#+aT5_E>7Cdu2{h8AzJ#M(a^bA+f!6RI;DPI`n4(4B0+&QK3yyNam zCwf-zInXF)zbK{h(wdFD%O9+oEMD7C7|Ql`kJtU*#gBWZ21xYzwlcZIea@ENa_h2v z%~pHKg%_`hR^6923R8O8omy@jd#|@S$$b7n)}RfJ{BnL8mxF)k{*XPA$?X;6vSUNa zpViF|?jFv3*UNtOV)N9T=9V>T8vI8q|LcAF_oBX1pTR=u&-Co={BH|hiUwXVJ-p}@ zV@Xh6@vXl$RR))Ri#$&9HQ z(YxaW;>CXK-EQ9fEpEM-i6GB9u?Mfk^2JKzlgfox?7zC2c}z{zgF<#V54~kJKt4z$@_}gCqDmgd$_*WRenPb?=P2JS8uy3 zzwS@aH+;gps4U_5_1jH1KYrb{Aj?s=ENMRb3+B%@#%GEJSNzugwfXpwf`iF_KRCSD zbS~y%@}yrS#i@DE*}LaP-1sVTDow=UPb9w6{!6GTOM|zX(+*LJp zdoSh+h5rlrux*!^b@#n3?ALZrKD_vu}P+t;=|_EZuflytbaL5O$a|Ma;iO9{lke}n}V0W z`+eYT9LJA|OI;YIf84or-j)j{hxX*zHbmWf`TXtfzrSWOM7+pOd@=Emjm(?8!qn)Du&JZPhJ#FLyF-GmP+Y6+63F##3;2-?1Q(sIxaV?0wNu zddz8`a!rJV&Qal3gX<0I%n4W5dB#kLnsD{a?p=oMxhG}pSr*toUUW3!Mp?!c`&F-^ zcYVBeH{o`u|K;127q+F{Kl$Ku^jyCUUpcmI|GD6*Ccke=`GShsNBN(wIa$XY_RMW|OpCpA;$1TOzkRltEmpnc&T;L} zdk)p;RCJt_t#^@}E*pNV>(3Ww?fLe<|46bsD+Ej`;u46v@-f0mDSKgO(!Uty^vHt? zO(LqY&WgwPt`hLIm+YRJ@Zp)wuhJXp{U_xoMg5rEe($kF@0ueVA}?!CY!vb5bCV3X zoAByf!@Bfp5gzNOc~S2b*K-7ViXPhBz;tF+q*D2Wu8G<0$#2B}3A}%5vpKOM_`S-F zkh_Mq!o^ya&(hpZuaS*ADz1Gr;>L=@2mU{t`!7*ajkoo2ppaUpSa;I8+uL{_rF!L+ zM;Lq$igkO*8$GLA-0RLvj>msa$;GZ;-j}&eQ*+^AQ_C|Em6;4|UynX{^{z?e{h`}C zyDD$3m;SL);ntN1#n0dU%YRLGU%N_{V-u$-C*Qp#@jw2F?lP@0=>W%Sx{Wg5uS??#{7LqTgvcxL<-pZ|kcTF$MGI$wQ8ozc| z9iLCx+P)P(WG86Z&C3&eZF|BqJ8JWqE%^;Dt@~RHjw^i2e&rVFfHm8FpV+&u-+cvHf ztCuO4^PT&;ak@cE*u0*ba!=fr-pP|F-|OgGy34|Ur>Vl^|o-fNO6`cXM+*SEgQk8--+w4Jwp z_fBQDQvAWXhq@2^L|5{@uUmCV`_z{A&vxj%$*`Gtb4u*ug@?|oJ-+z%OE`bBOlZKl zb(J1nb(XgCn=W|V;d=5y1tP5xyRL;3za51;0i`|--M-tJr9;Fe}4W*&=kM5&binS)yMc1>@2)oK33V4rH{JibzoHCAP_Z~C^q%H)1hGA**c z_MdQ0dg>H`TWb^aix{&F-GmtO0ITlSj%?f(6e_BesxH{T6|!4n)id}*M-`1n9Q`6dT`Bid8r`&u*_4dMQ_2E z)Ef!`Zl7Lpgt8Pi_k2~qGvV#dlpd26v|d(SE@#s{6}TcI-IDaq^C3o6wx=8$T>vzKx-2&P@JUtl6h4t=7lcTn*w5y{(fR zT-MjOWz~KghV@r?jh^)G39EU!WTK5;*T-VtE6nb$+uT~MQ?fp7s#e%2Y^k>Y!Kbk4WIE=y7-K3?y^r?k|YfRXRHY?KqNRXJ))G>6vLp`m1-^dlbEuqjxM(eO*v*7OS`W z+n?punPvwq1(^?r`6w5fr>-*pKkLj%X00OgWYn2Mso6iOBJ#~1g?8EHUQtRyU z-fuar^YipS9{b);OR`(C8nTz26;F5IYhLP~lB_FbxqVrji{3%c30LhJy?(L_f8xs9 z#~0{oeO_wHi}j{Q1is(@op9pA1QU*&3+cRT3K|a_By6%i~n=~KGd^3b-^{Wsw#CJaDduzI{oI`J8+y#TL?}Nj84=-k7UmJhh>%;$TyZ1Wo z?S9GgZEx-C#}}A-Ux>Y)@n>hl=kvcpKc8YWVb{C3&ZI7;`n$sPLN|pc>#uG9ymQz0 zsasuiPUI9CRjk_b#6er>yiu>pi!PrDb9FXsfL1X{_N#N!^uDJreI=?sZ=w0?ZGJZOea~G!T{TK~*3qca(|WTzd}f&U z!dEe+%fzIu4Bg!B=>K8N_m#hM;nU{E^^2DOHV#R98~Z+H>*o34zU?Y^owT1UKbuu+ z{d?!j=LWF>I=5IKgkmqG1A{lfw`T$~TL26$|Je^_Q?Q1!C+ zMNX!%siMxS6fbe!KR9cb>qpTUnF{r1M00ujc^lX2t$P=CH^+6^d6$_RgxB-8O3h2X zGwta-_Z_dwcC1trVtJ8T)KDbUtCfCJSfXKfv~R-m{eIKMum2VKzH3+Bfq?e-pxz1V zUS0T*wz#^|@4tVVjoXKvz7Ng%mTJtK68~0a?*ZW(-?s>sZL;5feDq z&EXaa&NBx3}G{f)bl8mT#{Etr8Ofl=> zyX6|5y~i=)uffNJdI2e+&Pg3LriBL=%rAWMqS(&u zDU)&M+k-PbWZrCeJ6%O=zfy@|_OaimxBXpQ%Wn2-)BdWwE*_%U=h4|Fs0mYg9T%`l#GLZnmt`TQ2t4?Hy2vNl5BV$ zMrK$=-(R%5>*Blfv-AFj9WDC8oo{MpWB%q(!c@-CC+8$S#0o6nXxHWX_dm7zZt{l6 zB`33O-+zv)t!=ma^=)3!j!mjtd)%h}(r3?F)203I#0o(Nl_f$ALJMCtGF@CNrgdyn z-pz~)Pgk=G(Fkn)s+8uAF=Sb91TCw)=sl-%p)Nbj$tz z{O(a#^WCklXBw7YKYsCN@wB3w>u0~5QzMjl<;A`5zE5i>+?&Y}s&~b_bOQGm-{e~= zXTI;yxc}k3MAjmE*S3AUPG#bWn;+bIW2?!%W^VNF;-dFge9oO%*8JCbg(}a^wb3$j zMP>;&9SU<_Uizm@eEp&oWjB0pE^xcVyxt|`K+RsMc{w5SL2g^C7EkY5&$EcR@vutT z+m^DoF1!!wC6y*9W)xm!?3=-P?fAU4>DFgdt}J-CfdAXC+=PE|z4~w6*NE<#cJNTm z<+#$#*%6VvQt5BAfAFOpC~&&=>BX7V;w%2%?0s>oqqOFYnfT0EZSjJ9x97VV{VGe8 zN|ZjX`c&@0j+wt^zie?bNo#-pNg<^7f~hd?B(t*OG*O|4Wz(hao1crkbawYvspiu$ zN}chi1-vfldzq}06PlVW@@(Y-B|rOJ9y`irCmc$06!~YKqVv^odMDc*!Q+aNixwQz z{5XI4tkg^ECp0MZOu4EW$Tv-?p>Wroyi4ovOfS;7^v^7;@1N&1X4AaRmkbjH%jf+J zJz2{yy((c5cg^G`pN$=oTlTd18693=m$7x}TS=Q4`^qkynD4{u_$xX2Px!ow#cT)9zVw21DzOgO2h>A zMrWV2czbKtJBi3sF|$r5`g3n&J=;^kbHp}(w&x>7tM!MNpM^+#Q|0S@Vf}i_*NdxW ze(S#Cvi-1kd7|Eg6#G@%&T~GJ%2Pd;^mlc3)=@)k-X$;ImH+kVy1cXM+j?<5=Q&l3 zSJ%H#di%^UlJ%mu+&s=lkJ`-nL$)!wn0ARX8!d0Rd3v9{`>*}6TczfI5sOZYP!#_4 z^M+FFM$>AK>o@jX+uwf1x4o+I{Qdtw^7|BnWtG-(6nY0{9y>lk^H@u9zLge}ltFGI zYs+Q(?w7r1d>F159s99N<;j$#y7NsIZj5wOyR19epjdK`=^3xG?WGkZX~(MPHF8|l zKe4>~}t~oi?*z$3C>@*)!P*sAKDwV)jVu`udphz z;PE2K0wIdXa|4^>*-6g!W|OQx7yGSZ=;>QzD$`m2Wg-98<#MflR`)-* zs;ew7@fF& zx;yLF3x92>indR-zF}`s=v=TsHgeftv!ZJr){F*XGcKy%|GT=+ZuX?Wtz0Vfg)t-H2hXlTIoWpOxTeTB(N#onxLwD;qu31?Zf3wh<6&iLjao^mZ8FOx% z-RJ51<+pi7(Z^k^QFB-MS%s}>En4MmVrjT}x{sQ<`173?j%<6zw4!j=yXnGnQ?K7% z@@CKd6yBLTx96}07;gQV#ZvG>lg-k2BrRYJJrILn{y$6sAwI`r{1-$L`Z zPeuIoJB!Z#I3tykl^0ql(f318dSkCZ4X@OV(%-@&>l~)ZojmB?^Tnps>!L&d)MK-r z|98A~`QpjbyF=#1Rqw3i`?p!xWSN+?@v=J=@+~6UPObWP_tgCS_q$$9d+QSY`~;_N zKqHHyiQl&zw_lu0o4FLOi=5PTPA|Mr%ewXO_n=+v>hIarSFVs;FBfuKzUgC{L3xD` zugRe}rOO`M*SY?l)N$IbcBwIACzI;k^J~@pUTk7fJ-IL=`PhN;`JyiC<|lZX&wr>D z!!>nE1iO`t-Lb{>n`Yg$`5IDs(8b)tDd9uN<@HX2 zCOzp|H#o`*YB&4d+38=Ruj1grC0jF{!DZ>W5Fg8jvz#?^roH9q-Z%T7*pywzPU&hM zh`jNV=a^Ko^!ndNSDRYqEb9_C=;7NN(*XKjZ+od3@p#qU`}ePN3)aeI2|eV$*Z%6>p`zyf zGByvcA&->L$=i_j)A4}6t)23_`ri(7&xCBYeXKUomn}_ve#FtGu|ND5{K(xax^JHn z8_UM&TRxXvT${MEq+Xc@Z|JPNy?QQSh z?uCCX*zdiyR{I_NQBb$je`$5`!{?vAGXJ=^V8=tR>>r1Zui5o*=2pMfWe4MTi^(;X zObr?n{WqvXNW&kjyHw(b7g z9dT{PJ1lB`sORZkxp3G+Rdca#SNQzz5=(wOS`>JGjUb)eU`?OY{0v)Q&R3%#T&s_^334Y%eGscFl?B)AM0KVACBL?vX2;ms#C z8&VnP?7h8dP2SR}5ntOM9E*lM1qo+uvT^1NFxa@C1Hi&s4;ipaiT+?%&Do_9b0 z;|lhxt}Bi!dmc16AuAmHsKaxkiNc|~f(=Gp+}kwwb&D1PZ}?iHjZCX%+uBmPU~ z>YpyLk8bc?NxI?Cl3Jz2x9YT1fNQIH*~WKL2@6#Mrm5NG?ua-r+x^6!cJYw@Crw_R z3lq(MCy26K&658Yn)mvCc0<6GwF~ZXO*PZ}(l}vq1Wz0Dq}zNOe2=6}5IK4DO`Pk_ zm}xvwHB25ia=vc*{35jTMT_#}NC{R2fw@g9Ufp;mubjplbI;uR$8YY~iZhx*JCCa$ z^4()R(fYy0mn{!ceiayPi#|HdYoEGV)IoNUZO+$JPP6x!W~Z{>TEB5YoJ5Y+sjrjF z3~aV$A3oapNH8g~OyvLddB--+bvqHhx$fqo`Q6bT9D66NczEFNi?-9}zc(MQu{2SO znzQ7f_G}I#_mYY|j_vti>-$BimlBMs)Z)wBGv}yESV;Nr^7{P7O>D`eqSBk%*XOfd4xH@SqQdp&bmV3J z2Iam!Unj-fXhyBV^Z5(zmwWTdeLU<^o6ESbVODKtptRrQTRy8;H_87vS<2;;x9?T{mXkbfF6N8QzRmKV zd3xP0>G|fYU&8ifUivImEcfvBWF=LtGXke7N?+vH>sTH;tYbaB$I98@+4GOlNq=K* zS_vQJRh2QklD0_1Y`U$SadoxH&BL43-wKzf?aXF)>A(Kqr{Als53fiS*>JFT+Sh;Q zv?fJN+ikZmVy`Px*@0`Pl!LzPyE#K3@14PulIDuk?IL%U_S+=R(tc33V(XgQOOI=< ztGju&kTdwq*RY2R<0F_P9M|!&e(C(tnY3m3!hAl__Bhpt%bowd?1-B?_s7XIRt|yH zyYqf6oy40qvt+->+itZBHc6)iuf4f&Tj~gNXxYb{d9F8|OZuMNUt4(k|CMtA5-ZEO z+cGAJO`f%Up3h$&l}|RGW4m1*?7WrG_;|6~cPDRw>x=JkWw?n??>j1^^g}T0cGr=- zSf7cNU%eOH65DK>wbiU&BWUf6Cdb`A#zo%#v&v$(M+c?LN-I}HpKyEmfG0uZ>#dTW z`R+Z(XXS2V3yEuUWDr>-mpN@?=6}{Mg{!lKTVvK9yA`%k%t!dk3m)U9M-1HQJlt-l z)f8e5muY<~U=H4#vAe+AO0@c(dBoD4j^;^gv+v(ockRH3g4enUZ4cenUf&{F_vfg$ z(Aoz*s!>(Tx3nuwuc-09&U&{>L)IlMpv9prQ?&h-&b$Plhq@Dww-@)UI&q12>#>Nb zW|LhCJ8Nq?QXHdxICO9)&(2lYA3R~{qTijz%QrBGnSQmFZ>lc0RH9Vo~vrFD^E0>g8MCmd?B` zK=57Im(X_63#)d;Jqu7R+VeENdd1(>d$V8WF5x)z-1XM~2TulQ%vktx5|7zZ=nd>Cat2`FS+`9YS%kuE@@Y>K=R_7}xw=^Yl zIbz17*8nevA3!mCx9FJ`vMpA5g; z-D8ze{E}^j*z-NRJ|xTNJlb<-PPGP8)WQ4uIlt~rIsV`1f3Lj$8SS#~Xa611f3Z6` zHfGt?^~HbQ@7fa;D{!y5vRoi3cdM!05_^T??LGbu^HUnow>Q1A#{YO3Tt!!AZM-Xxa!~2S592dV45!-FADv$LL&;HG?8sbA zUcSydtKN63e%QmI25@kQvEsfuM45l6H+@(Ed&GIv*wi0V!HO@c4G((x|eC4dFY7?%4=h8PC z?$63!Sm6@7#_(GtWB7->_vanLFES*ow0;~jwd~~PeK*)tg;`~& z84?e-2)TKPe4DvXmS?S1>kg&_x#IlprboUPC3&YlxSRF&+)VGe^}kOWr%kkAzQs3p z;$ppW$HhM{J)bej+OyGmPe*9;F&UYg=)R3jBpB1z`7kD6ax<( zFxkPu-1ol5N3iaxW+)4*B(Hj31&b#`?>fKT3s1yJEaxbCV%+Z}U2Od0q4|Q6XHOn5 zxn5dc>lE^@ri@L=HTVY4oC`D8wzm&4@<^r|GW)vSoz$vU zw@T~Q%@nc8vs4XcC7Vp@e`+w_CoI#)d6Mw5W%}h$k9}IQyX$tK;gOZmlYYC_#U^Sm z@!Q?+yx95Z*RG#Sx>wh;%6rXyDJ1L{TzvTL++L4>`!2P5H!=-x^4?*+EXsSxaKG~D zvdrFdS=EN_kGfMu_ns-sW!CvR>HLZh8J}k6t>{mR`O7nZl7zds)UU@A*4;g%`c?MX z<3D@9f8s0QpUzThVkWq4|Eq)U2fcRxzIiw2%#Y}f=j#$QZOR{PQ@_OhQAvB|AI4p8 zCMYeOvLkV#XMKd4EvM(@ch{&TQ)sh{gCUQNDrT#Go#)<4UN5Jfpa>JTviB-7xOGyd0AL4Lvhk~x7#TWOu7Bp_Cm*7-u|Bz zwLpC0x8P(xrR)wx;n$~){7n0`rcCV?*d4HtcX~pxU zsyOAM#B*;ZPH~d4&)MPMDB}41)&|8{6B|n|?olx;$y>g!_2Z@tyGwtSnwI-r;OR(m z`6axEuPit3+HcW1kE-qKr!@scPCPGpW^0~w@4k(f_UX=;tu0yjW^s(sGIonhr&mXt z4nHbt_Ymzeo3e=Y>9yEg;bvE*iCzi2v=x4~KFs{S^!5(sc{5k;ZCm?s^LzD^*DoxJ z`>A&;?2Gl+IGZzNu6G}&RLVOTrnXx;*zPR(D|O^cmHC3$`m)1zF?Y_bRlmLSzH9#M zzH5KIyQ2Y_bOj3loi_8lp5ZtetCoJ^%Js9{L>da_T(zfv0DFf_x3q?55N1mz3A4t z{$$RKPZB1EYpgt$eYSbH;m%aiGaWv5q9mYbf!dR~VY`Ishr znZLMBen4`{x6 za(2lI%NbKVWnZbLMxFla=RaA#)#ohBaeZaEqo@0_mpxy$dsD#S1@F9~%Zrl^n&$m= z(bb8$^XUc?Ln-5?bbsUKna|H}G~rl(=)vo64%%Eds*B%NUu8M7S@F%|#S`C|trfNu zQ8o08TEeK(vqm#gDzZO=|H6W0j?E=Wx)O$o(XCU%nF8*yXB&O{!n-ys{m>G2?wskp zp#@#ul{VTF)IJk+BIqk9?G zUir20(VDNCZ@4GQvfujkhVSAv4vv;ZT?N1EoU9j2KbO9|q@E}K*hluwJA3zh-0dOx zP&wdKYxuJBta}CZU00e_mCjldU=_b`&&n*F&C~{wdIT^%bGC#$yuOmUm8&71?!j9cDl&BANs??3z2aIjPDvyn`nsgkqx(Ys~dK^z5p)~=poW2*a4hbik4 z-}?@Z^q%hzA0-?(eC~nLBCY>-nQe3X5AU?P_y5qOE9sZ)Cv3m_(EU4)f!wE8b5~6@ zc1zw|d(OUgc}&(>PwAi++g2aoTG@M%r!Z6O)3P0PVVhj8b+$lEyr_ zW@r8Tw&wTQzWhD?_^!t16LvFQbzE!B>%W>gmlb9{D%;qurNc7c z^R$q$Wyw;d)l!;V2|kIlO z1`KW0GyF_<3BOEV?R0h0&fRHM8_$23D;fA&Pgd*FiW|E(^84R^all4H`q~D*qDNU$ zyUrer+dTW-;gwQ7pC+CRKEM1K%ZHzKK|l5;DvSRe^h?^?|F0S?cdDImmEl|d2bS9@ow`>YyUTOv5PJh zs%7xsihrBGkp1~ly_T-GP3L!PaQVK@OXT%NG0$BeJw5KP`6?~1ZCID!F3NR*o#|_d z@@=apxjM=@{6&(+r|JxR>|-pPd2@KV6FblAo%NZJY+I5Tv1Fr9@&>2nnjY-BZ-mws zJTPeeZzpRO@nC9be^h_P>`7ma?g>>`xz5(=!u+bsEA8j)E?pa5y8L5={<&^b%_+~G z=PPw?;5zks!3Q@F(TFQtIysDUyT7fu^-8vP_djci;}L!TJJmcj6E)=5WiMQ?F(h-+ z^C^;_`%d@tI81we`DS>h6R-xei_kXL>?j5 zXHi<>tN4EbP$+<}vr#;pEZey|L+?42TpZjFX9!qjno{(OzeCgKN603`i{(k4x z8rEg4nIF9Sg3J+@sYTMWY}w{bMo#uasVo$L5UKI1Z`(fil{hW!*WFLHU zV4rT=rdltVASy-3_H&b(KS z^~>f@{^EjuWfr1Ke^}S5D$JjJ)A)5zK~UMO#f~+)trPw2WgO;7lplVwy~X0Y3ZL!N zvx~QXYIl_R@@et?$NbygJY4qWbG6EP7q?@3o+?jRIDe+hGMCFAwEsVLSM}$w3}^a$ z<8NXo*EhNF)Qd^>8)d%co_umv|H^rzQa90yv!4C+5zh3G_Ydjyth>@-ljZVjrHGuV z(pjmA0xy4DQIgGP7kJn%_|KjFsidqxvt}^UT~Fy`z$49+o-N?KpG(>B{(Wm=vsEW$( zsXunf+oq;9!JTEX^po!aUxiL;ck+GMWhc+JRgY!T)r#Djn`PM#*wgf@Rwx=g-f~4i zw&v$y&z~>O{P(*maJcfbynN)_GCf!W6`D`Z+pQ9DQ@M*j zVC59iYuP)M=k5*+XUQ#{`DF3Mh#7v~Q;%*=o7<|hslZi5q;$zcHYGOqOZWC>>b+Bc zcVNOQZp+E+3RjLV-19=F?ZN*QdknH?1;-h*yRuxY;IhB*J@IF9@W&&s`TG8rm-HWb zw?uxioycx2<%npxVD~>(KHgJ`HYP2f*)1qnw(!zJ|05dZM^|56{lI1cfAM6gOoNX* zUB7BCTP<_zk#5MFNmWjtIk{RagR7iAA6>cOr`L)3y%Brv9-OmwPHOjh(7`Uux5Ej!YS@D-INUz zmLJ^BzQd);VE^39d3CdImoaCHvsApE>#2o^vwTtHIT>CKjccR<<-ks*D%>V9PQ}cN9J2vo7 zY)v%N;m~!fw|6F48NZd^TW`jZuJ=26+Pc%n4)pzc_{}c#_}=4L6OT?`{pe}Z_B#z` zGa`L$TpmU-vcF<3xVZcQXY-C1dz=?I@5qp>?9O^D5qqj2CQ?p5^TF{~zhi%vZ+sh} znD6TAs1>ZFcy)5S9^O?+=mxjmcPW=q4X^6A~N4kh8g-@Z;$R#9SlzoTrv zv8@sN#Qj^go7amms7IZ%EV`ExEVVgGOZVdL<6pNk_`ORFOS*8qz+qEs+v`>9MEJY7 z(wfg(N_Q*>KO%ZuS7>5D?2?4<(am#DT>RAVdipgBjvWR(XB<}+F7^#6IP*?F?p$V7 zPrTG_kvlp6CWS7@jhMKfg`e5-Y3QuBy|0>PdzFeb9lg0gbVtO$O_N_Qbzfz${d?|W z=@UnL@3Xo(D-7uSLr#C9k)@9x2?!Wu=qa(K*a|{ALR5qH_@yf2te66x0 zI?D8aO=07$ruXm7J7ttz`sd2#bsT7xZW9AplTi+gdT1>bYtcWr{c2ln6i5orCtxLwnb z<dDRYmJ zF?B`sTgB8Boqz1IIkgsZg-yDZGdp@e>#i1!i(3QZuFpEb{=!CQ&vK=-wzaNqXF9S& zT2EK}a{HekxlGR^dP`1DIX6=R4psEW;_s(`Xy}~19b^O^6GV1SRLRG>J?{niw=Rf|J!F~GuDKb-D zdpt_NekjQ&%hsB!?7Q09+u!=5629O2weiuxn2)z-p5%VLL2?^+T;MNB&R2ro9`g;K zx(20Bz8oI(F=Fom<8M=|b-pc;Q@G`xy6m^lTlsz3i)O|*Ta{e6m~B^m_`KCl_FU1W zQ`T=kdT!e5d|9Zi*Me`@}9YK z-}M5wNAq^v5j`6H!sq9r1B>P?{K37-)==B$o6gjgEN5#I=7m*Xo;-QS6|rS`>8Bn| zpRM(d|I&(+${AI3Xc5jP|8Ncq% zZz&n70!^!hdgob4d(S-kT>Hy<&gkVQ&niP$z1iC=wF4ga0<>^Z>C z%4-szy~|*e$`T%cc77+#p1`dW53)e;T1@($Z?Cw{Z!-%KWW4<{jtLCuFn^B{MV_RJhj2&*hdvH#dVXuG%-`kMYa|EZMW zdGY>TUV->bmJhx*iVZ#!U$cCEVKnRef@Ejy9j7la{qvQ2`np8&$xAD%B`x)r>}LsV ze(`@5hyS955uZJ~Ho2YN=-TxxGNg_BTlMdL6Ndlt|ATqd6%S1O?!S0`dFGxoTU%33 z+HeKzUU5-o*G`@#X-z4bQdQHQoL^$o^DV}}%2BLi*{zokcfX(Ic&=%#=)`cQw=D9F zDIv9G*Z7`3cAxe-pd^9&k7DoV4(>VUPn>%mDBk9MOhWIZO4*^STvGQq172E(v+Q{+ z_D^)e3?KIoI}0Z^axc|i%k#*wY0K4?w(zVKf|stJsoplR=WCH^vy`ME$7ThdO){_M zhG{;k73rIKG+eWs>($bv+1rZCw#j;n&f|J*+WIx9P~WsYxMDQ}D+jCouD;DStF^v) zpZi(GDt^vff7b)c*8GR;0lO5Q{97U2Gr8l{pF1jw|2O{lpgu*bbMEm^;Wynb++3=* z+5OpOo{(!c`x-=-KAf^?lWURS-P)q-q3ZkQak;jBTlzKArR>T~*Uy|&ZZdV2Xztg# zb@p?m$g)d04K0tm&S0z!Y+q?$?A{$YZ;e&xDT{?Y`sQvbZPC2e=}Lb zymjB?nL^e}ubiBFyx{y5{`l6HKRnGJ%+Iu$`*bSX$7Z+78nKN3xRxzc-Lo*yWY&x0 zlQ+A?cXRlfM6|v*zIjzr@HgvoZ&_x4;L0^Tx6f-~=fsY}%SF*Xn!7}|Y`c=V<-iKD z+(fJXRb7AQeV!j=c53gUhpE$7)U`HsYv`Qx^^S8eb=|({+LXQfF09(Y^x>#`z>mt+ zPSd*8_e&k)5-2z2HxHCL@`xwRbDDSJ;~WqB8X}JEz=%x1br#*5}uI59W?!_^OohWD|~)UlsutpVck;JJa>^w z*xs^FDW(6Jp2Yuu_=9!R>KTDyY*|OWE^4g#)%2{hmd#4y?vs71UJ*lYt zZPSn76!lK0Ns?hx`HzZiF%I}~LPF}OzCKruckbzrYd87l72j#tCwj#yc&aNvN^1m{2O#Y?zKqtxLi$ z+?rOKM7rg^G~D3+ZvH!+)TwS8WQu-fWfkr__c=w=a9)Mr*PgKZf={#?N;I5bm+V%U z%ycS|xq9ZsoQL&J2Ie9SFRytOv^ofMD>}72UZcRIYPe`(lj8h+7CRU6NUfc!bnT{@ z=^w@2D}@|3_mw|;sc<~y?II1Q6Dv|B=NVn$J({4l{?QeV;HP2-^;{nxI+DLLZjO5h zx8f2PixQ!wCcH;7wC@_!%~>6xtHK}rgHQSKYYqFSQ@;DGGGYC5tu*0D3G04?U7wSr z@142t`flQlP}NQQyr%Q~vzphmOe^X9sn|(3lCK_6o|j?vVP(u*kqLU+vW`BTamQfm z6U|SrZydSl;@Bd5<({vFm-DyCpvSpSJUYx1W)w~l;!stabK}IZ2U{OZbo;C#V{LP< zI7ylRU~#2Py3h9{N&g9<3w}f|F}W11u`erbY2X)4t%ws>x1^1)B6o7LOGsE_pZHkZ-d8=ib~G&7H?R(b8hh-$}8xTC^dIr zVO^qjHz7*L+S7&ckZg-&g08ntgs0=5r4t|g``aMoo4-QQ;>G-nHHI9^XYeuXT%%m{ zN04*tfWoCrN30AoSWlsGd<`qv2NkC2vvT_?d-agMQWDI=?up0*;0;c zbxfUZoUC!~zmUVTFKq?G!yHOe` zqSb4|c=^22<1GqTyBQz9uGxFQzgA0&`&>2AVsE^Aq-x&+m-^|IjjyeL-R;v} zoV70R(Y8x{hfMA=^xb~`C}wkg+xzDyx)yI~WofY#$`Cx{zkV8Xt)ENK5$~@5na_@U zxBS|+IhM)w#?AY;yS(kp&lL3~YnPqAulTS!&YB6`SezqP&~SVL`%{b4Fh_&X`vC;cC(M&+{fMU%39< z-L*o6vUa|ix7v5SJE=44{KgMvyEaT~IwS0rsi-E*ZMyM{&}6CGd?CUU_whXcXwk4z z_i$m$wC2CZOkPjS-Mwt}FJ;HM>(2YmUiwF8!|M%9^UoUIJ?as6Eq#^QQK31z-+6wS zp>W_uzfQrl>x=ha?QzOslT*!Z@sQZIC%J6O1ot&}^llq+7d3T=?s!?VL;2M2Yp12X z)byVgO6iyD*Zq9`Flp=K{7b0<4{sImC)RxR*mBx<$@33}H$O)T^)Iqt@NLVqi`mPi zXU)E-^w-8y@7ijR@>ibEc+hEMV|X6Rro5OTM+v5&q0m!YOT}{$F>?g zu6ndoR_if)tKsC5%i6maTxVLN>-lirq_YPWoU@a&>P&ZhIQ@t0y`3AJyB(aTy8G@j zRnlj=%T?TDX17~(+1s|f)_JboHoNu-a=AS`DSD=7S~`#MpZuu~J)d`8D(jtG-tlYS zy{ZzaFW%QLY9@K|U%0jX_uRv}D_1@eZ2Pw*>Z51XvvoPUk~gkC?)xgh=Zx-+GdoI( z+S#t&eb5x9Ty*PU!-HD8S6TmV#@g0Qcx=WoN%v66;$P0`GJ&Q4T)$prXP@EBv2F0r+ol(nn~nNRukzU&J_%o zO}CX;sn}JCo@5B>j%=A`+;);Bc$2H~jcX@wIeKpkUTyVt#iivhPi-=|mi+5x=(-&n zH%|OxqtSWnS4{Y5MY|N$Z1O+3XmU*O&6<-9H3ufv>u$I^ zwL9+ckuaXy_a{4iS`#NaZCZrp5ifP29RXpFxEV`b^`yE`t~u2=lmoy@=XrcGeP+J^03DqEKP zTD$ft$E)hpse#)r?O!yp==`VsNfZB@udQF4xw9>qU1R-EmML6nmlq~YSzh46ar6G; zypM-`Tr}JHZI;NowcaI(e;ZbQ+x3WX6Y4%6M8h}aN7yaU;Qp{ z_sP#!5B~kVy1>@n|JqB}E75L0|7K1}P@A6juK$rpAmhQk{gVAPU)?TA-EW^Q>}PQ; z>9CZim`z3}#KQ-so7Rd%O9{o+duwRS8WB50_XkRP;L{p53ytuU^aQfb)#6 z9+P)1x9bYtP^h!KcGLc~jds^AMK}ih?`IBJ*;{Kap!_h;@08}MkYi2DUO$%(%{y|u zW82!byhiPCt*+T*$L{uCaZWCG+gy1v}YWzkOS}W7<;x`_FdSoZ4w8zjnpmQ)UHq{|r=A=P7@c$*MbX zsO8816*pWCedhT;;p3$1H}1cm%$yYCRk$`XS9Z&@JrUmzE@nPqThO?p-ua2|!}~|; z-z(=k)F`fr_@88}(DT=pL-heq?es*+D{j(W?>w!WQiAgMKdzEr@vE6ZphNd}fM5i# z*G%SvKRcgXy5&UhwkZ9H$5zQYKZ$VgWsK8cHt7$(zTPE$(_+X_iv$?J>^{==^r&m&Wsi2Ac zMk$ep^8YmsIpy$AQH&OGoFwgkwyo&I37xLki)$mdnT4c2=e#PnJACimz72kt3q(X; zPv5=hfUKeT;{#`U#oks6{l3Nh>(0s38>;fpPwPCg@~~`sWrX1bwJCC}kCg4q*7`ZV z&5`#z{UXh~U;D{MTZ#0YI~L@od2e4MX{0LPazf&>pCy-}r{3-tM|&$jJF+nLc*JF$ zl1RC5iSOI*`=MV$w(PQbX(S{Y;8Cjk@UzK8=DK5-rhD$WiTO|0@mEk& zExv!@X}?|Vo9;O*rv<(!8vKcD+r(NF5!IF#m~bPxca+hYo5{dV$n~pSD`ZHkEvNe@?n)%d4jnsx!7c z>0zExc08=gX{9WyvtMOxUr4!NTgB?XR$?Xb&aXq;7b{PFaH4T`@edcHJ=cvca~%p) zdZ+#3OVf$XN*jXNtk}-5vt9`7h*E3j$SYx0dJ=g!I5SoCprz|Y4+(1OFwZ3uZT%Lsh8zdr(2vY+9=Pk z+Da^If#r_0`d#Hs9&L+_JhxbBf16@;U8CjKeRkIKiKi7B)@gdI%IB@i+i!RMR?F^` z=EXdzvbJlk3Oa0U`f>X@Uy$rog{4vYbFMmRmZUZBkJ+nmIIwH})%9mTT@CzHKdbiV zl})?WO>NJ(ZpoHn$$#1C-OMkojW@NVKJL?|LuFRpXq0~;o7L|qShaWi(7(Tr0IIIev0(#ayOq~9bCEEBI5EY{ex$P z8MZENQfcTQX-|aD|8ACTmGq zT{kga`$`*sF;!dLFUfoj6J1!&E4-N!%H-(Pbd@n<;@b;t8@`r^xma{&?{v6cXZv;4 zq0g)hT@P%eHP7GX5Nu!LA$3}f``w=%dzi02UVkCISFAJX*FvUFdp*r_5tFBjrOBW9 zy3{1dfBLIykFC>|1m?^wT*tL8%j*``=}@D;n-Bcc%2P3R@pgT|wv6vd@cB2nv3IwI zKaXHG{ncfBiQnYv(y800p4xqGty1-~rj=EHYre;(wq9HyTFEEJ8@%@3>GGh3O>cce z!d`q26zl9;+qo`0Sz@NH$;?K<`I94y?q}`SytTHYIKuj`@LXN@l`*?kc53EbW6*JC zR&w3A_M^*hKdbCTI?EQXP&xgxEjUDgsbN$6qC*?rUz51B|6tD)YqNK!3u8{1CMz<$ zZTRGB_9OG|M%U!aq7{9ozjf^QF8DfOqW{y zWrOA9>U#AXS6BSFB^kH2;&(;n`Jlgd_w+pbo#?zzL`xy?R>^+Vdk)$m@!Eb{xBs#| zo4LtVZ|*OqOAA)VXB-xHIc%dYec^DX?sO@Y%I9VlaxT@|yl(V;pH{d~_EO}kH&Js= zf9MKcwsx`(f2ZfW&g&bKH{7}y`Ak|_a`V~utnVjXt&*E$b(Ph}xaO1X_lq}nuyN~` zd2fHf+ajs7ym7$)TTS9$je+#Fia4Uwnfe7^kn?Co1<(sYtZ@SHh>T%cHB1!3LZqGrFa^=gbOO$QE|4E&Bf~{l0}sH;yGU?zX)* zL4@7Y!GHSf?UVVfVyE@)5)1hLaf-~H&E-!`&dC4CP4;VlB)UE(Xtzt?<_S+(?mjsd z6@A%XV)0iiW?hXfJHz)2VKSW-(U5iyM6zj*wQ;!9%Y^`c-ypLE%$A!(x+G6pMI3IDq_Ckf0YYQ_c*qO zT}y~eY&+bmCB9hOduG)QJJ36G^i7ngQtZIWA@7`ywc z$Ly@iZy}O*R%e&orM_!`jGL++C ziWPV4kL6P$IP3b3zU7@ZS(fFFtnfOGy+Z0sH@M8QwvZQyILNs?RrMUl>g%3n-Qjvc zQ!dX=nyMiZ|0JuVpw9c?jL4YI$vPX3y;Yji^4a^$saFEeE^cl9pwsibLT9y*;!#2K z?M#|$r6i7fy)^oB;^+b%ul0wd+%!@lKbY|QpweHrTEUA2$( zoB79_$4YXKUzDhx`=wMQeN1}E(@jO(AA zXXpZvk8wL%mu$&;AX1$ili|09C4T<=$G2ObU-4pT@ewak?QJexHAy@0#JR;Hjmx;j zy^EU46Sp2-pe?q1<$K-xufAxhR0JhWOXa&HUs5G{Db<3@cKa81zb^+KuWtXqe9_`u ztk`jRIkrDWl2s!7x;>XeAN{{ePSSK>SU zpO5PAQiJ2Q-)hQhUtMcF`*Fju#l;7Htg8C>XQtP8LjjiW3*!HMIM?37I!Scb0j-`kd#9%Q_AO#y|a)JN3=M$&aI}N(+AdZGLd~W9HP< z`O806ygK#8N2vBGf8iaC{#91z_|+D#(!IQ(ciR1e)62qds%yP3Kaq84t>bEkg$IRV zm#{7VyydLr!Rk}1UMjnK>|dP1DBZqv-|j=PUro|FF5U7g^VnWk@n(b0z6G}nnRn@J zsN?9Y({s#TaZ-UPwE4_~kko5EZ+ME9E;UQ?R^F8K(~@iFrn!=rN^RX+n}lD;X(xZE zD$JX^r}K;W!mo2yy-TW}wON((UP_EgHYexH=GL@Z-=u!N$e3^Ba(wRQpQkm_?!D|k zoMl~J|KSC{!0Y3i>fXm(U-@fqo$vHlUuW{hF24W&=iWK@yFwS};ApLS?Axf?_c5=7XWPt=O?9jXH|3l2}UGn!I-w!$c*OA-w^{R}njXxS2XL)$$Ml8r< z3$|BZHG7{4tN)+Q^wKFSHParm%lx_Nc-H62{DN!kNB>;#Il5%ULgT!fSEpJ1n9^m^>yQ6ebm`X( zH(D$HCy6ot{G_^nO1Es>_k1(4oOpWMgq8Xpi&(?tQbczDz3}q!_nA8x+O5C(KlsXB z@SL}xnd#07#&?d4d3PATZ(tBNJz%SKz*p))U0}m(vjcxOF_>pJ{0?Q*%WL>u%J^=* zZq)loE zlFmNyoff-hW~p$(#x%Xz4Be*1S6L#~%zO=!%9+K`ZTfj7=Y|O5y&yh|t3&Jbine3mAxA)UQ6$^-Yk1{P1~s)k9>)b>*H2NU)Fn2+ju+j+~jG~ zH&1v|CA>DWxg;+;^Ujf9id-s_^>nzOZ>h55tNZ=Pr1#8D|N8C+?0- ziN$JW%7&ND@)u*<*I4jrp76Vx>}9TUS^2WlcHVv{!55oy!wGWHuH} zyi)cB-Zho)$ zi?hzgzkutTfAsE0X@BhV-!7W{@qf_WhV&x#U$b9yEwFa%JaIQVS0r(g%i9V~@piH6 zo92ElKB6X7tX#fML`kdW)b5ykuE#nP_AkqftSG*BkxS|Q=8~=+aY40T-dk07y1cRD zOT4@E_^%%yBkY<)E_O0*dbFSOlg+G%<5Mo_Y{{HHc~M-swqdhI;hJQ@P3esP4VQ*2 ziRc$C*H!x2>ECsPRrSwpmlc1$%=sj|ip_M(vRw1r@GWj>S3-GHr<>KV*z?PoBo-*H z4p>z!YIV6GnPKKPj{V(lZ9_fQ*~lJyuryibnHXbm>9vi4ah=~Ue~d7Gw)WPmjP2U2 z2dsDks*D07RcpIALKvBr-MF>pZfw8)=S|ap_+&}!Uv%5x^qsY;MxWPy*NsSgt2z6C z%C6scxFml+75aJf<9$z|jH{D>vI?CjD*V%yDjB+E^`s{%3np#2V6NEAxs$Dhf4QI@Wo29a}?_Ao=X`8kl zuJ8M&B=vdiny48Mm~H1vZhoy{qnObb@yjXN{V?w*J@<^O`to+4&a?z?tzTlV<+{r*+e9nU z%F+IBm3-&*-@n4=*L}UZp7)c&mVZ~5$6LJ@{uChbceVe175@L_vObyrH}|Z&-FMT& zIL0Q`_t9y&%}rH#RX5cII94t`x65bWx)pURXRV67F)O>vUQlcGp1$pj8_r})Mr~f1 zwlDX_tJNFg7a#hUzPjK+WR>ac^^2U+;tqe9rX_P_WkJB=LkH7W7wo?j8M67;BQ29N z*%I4A6Ena0EZJ7-^~yKhQRCjJ#dq`OiJY6-;j)y^>+P}kEA~j8&-y(jde2-5p6)fL z{!YH7l|Q*^O+bF~UgibcZ%D5UWPNL;wpQAP7k=aZwTYF6%T@NjTw1Z= ze&~yD%_`5&t*%u+y6V!8u=ZaI9FJNupFcIl;_2jOssDw6W~al|r}44M%#!iiT61c9 z%qpin?T2D6Zc!+W`FZ5>#N7R73Jzs%ixqtw()CF4QE3z4C;iB zhl3Wb?w#h5x3Z*u-t|e}j;OyiXPo=^S_NzTdfBWyQTdY=sr~#lOV94_?^7vu$~~dn z8#Pu<4UuSm9eV6~)f?M;GuHcmO7&fBk~FccJ~w|xijwLKTi(Zeg9DhV7ajPe>+vaq&nz2PbSC^< z@KNCZtmpsu`DR>usZ-Uq$8TqHh1SCGs4!Rc1~HfH<3ElBm5MJkv|O>Ss(H<7`zMth z1`F@)`XYSF;{T?nK2E1N zbL*M-5I-A_LT1B{W%?Tyhh4JUw{=Sa?~4+Fg`Cr?4!U0AN=lCAd=h3JZMy2~6odGO z@=|7blYjA?{=rppJj&B@tKGfml(pBjLIlsgG-Zjf;A-v~X3pXz(;j3(=`$K$|C`mm zETHr8@n5R>`R~IXd3uXBH%88ioRr)q^6IjREW1NQ$+W8T+x}N=R^W2gR(PX-qfOV; zZS4t7%^%XQS4%WplG^G}=_dHk$N%Y_W&BI4Pi7dt^E>uds`mfXw|clPTY!9`Q&x)4fP9ntd`$5UBCEm?QdOwpLHLXPG2p$ zD{fz2=Q_SyndOyJVyurgU3l#8lYF|{D3?P-I@){MmzX6FZ*_S-7B$-=W7e-}V02$3 zPD!U#(X`fRO6Vc+jW1f)75XT$EOV$0IA+cCY8~fKhSS!H9CZQ_*I#HHnaQ#1{RPpI zJzujXNXOYIPOaJ3_WN9Ail_DN#Tz{~XXh!uvUhS=_OeS^JS=a+OR1O9v3vU$9@t@| zcjL%T??t-uLo&%^rI@AfLmJM|;)RSHdC z|7t<|pWrHiV!=3rbMcm+ZAs5xceK6! zpq89@%R*nFTJg)}-dP;_{mpiX{Yh8LlnhRuW_JD44nJ(Ne9B-s%S9TgGDmh z!&9>5g7rI$ZqJ>!VqwdRtbN-yd@4zHnm*&xyJ@U$H4E0nuYHjBp@lnZ-h&xx4`Zsd z>SowT<+r(n-Y#Q0*d2Y7kMB-i=(p0sSdEG+lIK}1W$owuieCRk*X!}xgirQjUzu}P zuFmS5BYnj#d(DKucI#_OA5D0;F6^J)(W>vKHEzppnDpRS-i#F8Q=#__BXv#oFlK2) zz6#r{wq53h>gyGuHmTQM#ui1dn0p{^S?Qr0>q?q-Z9T_Xx%(97s=&vy`c!j8v?|x_ z%4X8tq-8VJHtPHP;?3g6=c;b0TdbJ2wukGC0+j)6OP8&lD=sf` zRmfLiqEK$Q-7=RhHOA)`ChBrpx}{x6JwLx|a^iX>HI3ytFAD$u`Pp`zFLnQgXXFdb?XumY6Ss-$T;gh%nd<-D4&`h7 zX-8qcYn3Icxlhc zl?={jf_^_^yYVcpOp?XxVV;M}w~3KlpY*raJ-xf*ueVX{+>iNN=idr0@jPzj?R@jw z+nj=ncljolaQ{?F=$ghYw!hCSdh{E11?|e5 z|2}+4wU+9%r)L;*Y*+qzcT-yV`Nv0d=I#BkIZU(d>(bduYioA9zk67J_1vMK9@7?2 zvYE44%;)*E$~uug#EpV|Mq)D%H)?_ub>3A`_xq)h3i;(SB@enfn$0(x9ar ze}X@Ki%C3n=OZKE9ZS`fIm#Ek*I#BZS6-())8T1}yU{Co{XW<3i|0%~_$48-NPn$FA$c%e@vhLFhJ-oN8swT8Qyzpd2P{eVZEajc)Xe+OU&oZTGqCHrr0b{NPLWdXpZ37|&f`nY+duc}O!rg{7S;@# z*~iz#;9R-1EJEdS;*Pw4O)YtW+wuYpa>cIKuKoSG@!zgX$|rhH>YT}4pW%>uJCMO2FEn0=Y&seJ z@JslU>m}=6EMK)v`I^X!ya~bA!oPZVyQ-er5ffMybH-50u%>J0S3!+XZM(1PQ-b~X z&WL{6B5|&|KQu34q5*GgQTv7JzWb3)d2MdBp3909<(h2rD~;#gh}-nXS!}Peif658 zeEF4wb-({D4Cpr|3Kl~m!tPgbgn+B*4{Ti zq5YD;hL3W$8I8N18t*SZG{04OTCDP;g&Rr^1tNAK zT=zAzcl_u($76es<6hxGW+}!4)_=d0os*G!zk9CyJ>K|#FYms;H&5pO$EPPh+3u^NUVAy5cG&pn5pnj9E`Dx8$V7^pJ@kEXAhw zN$*;5R%=3&pUC1>Su@riKkPc?;+Y!`_t+SsFTR>s6P3 zo;l^%jxBku2V47n*G)Ng_UM)%-<{S{(O*)NcHgctvVNku@aDc1$E|uUw(p#HcI}5# z?=r#}rrw-?{nIOz6#X@!uP(Ok|7Fo&xN~2^`U$)D=ZC4=uGbH|wA|u5OWDzhdFmA( zxM$^S*2XQgXJp8Ic5JsBTRX?&U-IflkMDK~RbP3A`H{ay_qkiakiunfhiE74sKC3)oadvDBlbXXPc5uy8#=VN_?<3azI+*e( zI(h3i*D`HCQBSIc~|_c=7Xy)Kj*CPPm(T>-JyLm@r3Pk2cZKCS-13ySBb6N#1UbcExb{)&!lPb z+M|LO8yB{HVJuq7*u=An`QKF8mPsq5HS%H~|C8f6p}nJL`=+hB$HV^Uo^VLddb7A% zaKY*+w;^U{Q@_v2y_iVe|b=%wW@D10=$F4m2a`pCid!GIEzjuotzP$a= zi`2w#Mc#I)@j`m}tFLnLC*7}+<1(EkQ5^ikN9>A=?XQGiGr!2!{8h5~(WCTb%lC)- zYnj`yknD)03FC@Tw0VK9;s_W#>8c!YMYRF3Bot z>1Rc~CjH+3-Cr6)RhB)zyAIpf^9|4saB3M{{_vibP2{L1Q`Tvapc z|2V5gez&`~t95>YVfGyL(pSoL-loMqk;zyydd-AuB#f&QMt|J5^dsUtKt2k=!P~ zb)~WV%I7R5Z)j$G{_j%P13xvnizx^Hyn5U&_r+Pl^p5#`n{M46j*gw$(^rLry62zMDr39oAQabaIkG3l3S5ea)2Jg9y@y??>Vd;8c=du`$MJj7~tr``9g z_B@Zb4C`%<$z9^UCwk_!&Zdy7t6Z1ZoY#(8c`l<#|LXU2mc)Y}PPh4bE}30sDVm~{ zq_VB;gdrQh)Z7d+Ii`u1&RpQPHZJ_UQtH=B7tX%mOEdE}J1;I>@@gupzL}e#ZB>MA z-#c0P`bA+`&(F8=(>}B09JjKWwtw3U*{yeLTQ;b(&9|wlnYYGF zSwK6+P;!Ar&evp~tn{oGi$51dm zI?~{Zx~#8J|Gw;Pq1Kn8vbB~*=l?%HDMmix&aSi9&h>g%rKYefI)6Au)BoAK`?c43 znzqcCR`P-K#-s~jPj-b$uM(FO`Y3+%2y5uo#ueS4+e&W!4`iOWQt43c>E%nlNi8^Y zYgOMY?zF=KlfL+gaBmTkTriE%B+K%vrfHv~tl3Sk15J6#raKtdGKL1QZhc;1n5iwv zRMcYGY0x5Tu6d*>WYM+|FV+ubMa|L|r9*`7tePz}!}*b_-}W_9TxpJfqWUg%*Qw4r zyUt;y-lntb94asLd^+G*d3wEBZ}tS8hURZgHLpDVme0w|$*;K|U>@*)(gKUaza3vF zTiq&r-*ZjEP2bDE=m+pEYBNSKiYKmd8mH-ulp}m1xu?xya#*{#evZ z9iv?ylcr1k-eR7=hyRDq%nuBD4t>RWft|8SpVs`C#doF6ZPV}VC6B&r`nW#ZKfFE8 zKsVLs79;1AyM338PIPZBXbG#(mvKAKEpoZsV0kp(snx3kt_g6hGSI)^#nM+T7$MZ+ zYLN1F=iQaRuYY}*be)Z{c4kw%@2r%MDW1T=m4EXwx#rP423v8&-S2JIXsyH~w9 z_PKrGf!K7u9C6)pe|bA??ew+tj_z13@~+TdWLby)!+&0WbG;rM@7>gYG5yV+($Jz? z!JR*z=dQhY_uLxgQ!S6WwbXA;k}Q@9J#yc57YqB5ds|v39+xW8s?vVs&HMMe&g4Zb zySG#dx@Dfce!uKO@nvU5i9 zeUaBjUBbu1Y@hqwOP!Z`C49=|1dc;*whQ`I3!GV!%Tg-1d1v|r3+V;BjYPgEe*e

*q=oKk6?@Lo&Sl_o#a7Xh4E&Z()4=orZ#XnfP^|Q#7uX9>s ze)!B>Hvh*94%=m(OI!U#I`-@S*w?%D7av%2@yVr4=WfqCwtEuS+M|qpN(X<>;1fEv zl3R7gEbHr!&O~wsNhtja_H)wk?%;V*GR-taiGnbUkM@2rLKc`Q+brY*^Xmabqf+`d49)8Zs!=XE8?sJ>E$0z4t z@rDiDewTjbxQ0h=nrmRY{IvJua|#a%&+WgWEiCkS$Ce3GJF6Cc%(WItVp-$yvrR_q zdF}LLWmn`?>z{49bK+ie?7Qm)FbxcX<=nd3*!@3S(AaSL8qnEc{Lr_<);55x~$ zST@z=n}YuRlZjWpzwOKX6m{T2z7Kbq=sP3hwX1TuOdeh>US_*KGUsSvmjPutvZFs%X`QxRQ&CRc`9M~|EJM&eD!uv=^2DKyEg?YYf zJ7Pl5TiNm1FE!nmAiN>mIH$#|Z_WZ2LEfM0$%?X{XGR^8J$A9bwNmmuv}wEX zerAI?`O7x2emVa8XaB9MHYR^!cl4cS>ST2Jmv0u<@OIjh!b@xZC+Gy8Iy{s2$jqB> zzZUqhKbpfA*;t}Cxn`wIL8wbJ44Pb4=sT-I*>EpBECK zbAdf;p&I*|&YUGL4LvrSExBpvv7Bk8w)j-H{L>y=gKu4$FmuYHFCP0=ehGej>c-Aj z<=59%eZSA5pim!t|CGR|#izC8*sH#&v^}o>v3b?DyLCyMQ*zEIEp>az(8OiB{Qi;1 zY8AWrGZduaCI#?1ne^nQ>s0-(W3YXv*rYP2IC<5tw#aK{2VTwyy(;tYgKmB9jl<_e zKk}M9UsbX7*IK*v?&cr1%>RCI^>TjquF~(1^7)0gUR-AMSnjgY-PnvN^XFY=+LIc! z>E!FLdAEHo?%E#OKW~5Ck7qM;W|r&!NSI^2KJISi=OqU9IW_u2-lt!_Ac;>7u|Noi}EUGB~c zo_=3*XY|YiDW^^^k6=C2?ity2WZH?CrQB~ko@{E-*7IKc_V|*x)cfN1ZSPO>y1Dg0 zU$0F@efht#e<^j(BP-JX8P)v#bgr5G^X|n9R(`QK=+*r>JAC42KJF8lpRjvr?+nkSoN;)@f5v%>tV?Cb8Ry?GbRK{Fc0O-sOZlvFXqJihsMK^Pa14hiBe=BVBeN>*zUwnjLR;9DES=Ky7)_wWkV|uJcYx_ z*E6av+JC{=?rz4KKA}UR3n$Nud30yV_rkx0>|0KTpZfP>d0=7q9BoJ47qJYSCx!oP zj%i{k@;G5@cTQAh&5Jv)R5;!}dr%z7t`+LA!FR*_-6u}_&O2VR%Oo~`wjb{;R@K6} z9y>~IA6+dc@$UE`RrNb{zs2dT%>|JG10OXnFy%WVHI*nG>TGA8=-=f^?!T&{1OGm*i@ zrh4zOKpF3EuVZ3ZPnK7`<`dW^l=U%@J=6Hp@AS?y8i|K}GNgPi{w%WFlX>sMRerBM zhblFup7{IT^XiES*4GwU6$QO(H|4B2y5d>#$0t|SJllSFKeu>V^y|)_<8!QxR33g6 zn!vwE?e+$#ziktCwsfT3dUs*1Qp3X~fo~NPVh%N|4ADu8_@|g4#P^=>#tF7LhYuvo z^5V&7SN^(e zDsGwZsHN+OwuVzi@*lg66Q-@$bmYjkzah`hY~K=pP4Ts1-japwGfvyAej`+tmT=3q zP0Yjf${bDWi(38l0fJv^w>`O=+b^G1cerZuG{Zj)qAXWTE}G02*tkHG#dpqnzm|>b zWW)QUmet6ZE_so%B0$$`wZk{v`~MZTZ~O3^DV8IATJq^l(^vCFL~@q87^bP6=4$s` zv*7Fg)mqyE-bGZ`y88yqow4ZBu1BKITUH5sl$<`AyzfWQhLgMFST0(!)ZQ$4ded~V zNBZrlug?Umy){K@a`7BxpYonJ+f2OPeB7or`HA}?jeXMs0~4N{_UNAdE}>9wM)9$* z#m&zqOp>uNiL={zpy!ihWrn6AhdN)486TcJ8#f zabDx;^PE{7r&hj86PNkSI5}81w#ZBQ6l2NNiB``i1?JCLH(^&xXy--78}`%hK3d6i zHM9P?w8}=SKbspbX7@Kd5l5W%@P%Pj#5SX^$I^uv81~gLFo}r)iS?zC7{&z>u{zo#GEI9xAe60`+x~+J<%qIHJtDD(UZnY`(-Bu~{y<(p^axk4g zFM2-vc5i2^&BTS43SrjVFVC%gpxCnGNmIoa<*#kpeTfn~>jRA#5(B=SWtBYmI$=WU zG0yI<_n3ZGPdTu|yQAq^uUfZ4*Ke6ADJAJ*KQ_KrpAx?NYOD;;g z@qEFZzrT;Rx2<7Sx~Lv8(NyBKfM11n)v<+vGHkEk-;sXxWKE8Kv(BP>d$xU+Y)n{M zWxM3`1LePE53Bf|`>$|kboXglFhei=!jb&Q$%pK(Mk~LWv3}-*hdh!kSDw#hWBvVG zsOwtCPpLJ#Bdn*{-rpTi5pw)>i}UsJ7rYHlJ2;%SnAg>;mSZ~JEo8Xr=*~V%u7e>f z^e-&=Box1*be?9+O~pM=ygtYNl;JRcb8eHHXw&AeoBBW3u3Zu$!I`y~=jo}hHfalZ zHmQ7VzA<+@Vxb^qE^^X<9UNw#FIIDdzurtkd17bbomYCSS}jI%C&U){A+&#hlR z`FN0dT)>>=bEa%454iRDltb~{u$O`&kv{p4O7l)#knwAr(VP9Wz-6tPV9pJ0%T?#* z8Y$(TFk;=Q|9t<^^=?ORy}0VBE4+5wN|EB*OI3^JX!f#xv&yQd+`By#T!#p;_pLhA58(f_rck}tJp8_F=f8UFncDYb; zdAzff>yx+le}C)QnZ$piH~+qJ`ZFs5zQ;-;x*t#74z{r0&1%PgwP0@I@4huG8!kEQ zo!&gR=;Gt&d%UkkIG%ONm|MKS^>M<)<>F@&)Odv2awJs*=bo`CFH^02y2pOo)z>Mv z)OUIY-@GWxH91RMv1o#*#ru;#Bjo*`{Opxxp7tie^Xcm;S(k(_rEotyl>6@HbcP&O zLB3l@S*)f%I`w#d{gGP?oeR#d41OkkQs&s1coF4NiOYfZo8JlTU@>T3B{5ax^*u57 zm0e>0l4tkM2uRy7eFIO^q-)zwMP{_^Vzpjtu&`T8I4JDzH{JC@8w~j7d@k=ie@uDT zD;e`YF|uNh?tlNwv|jz;(yO!1H=awmGmA4*PI9)H!^RcgpR1i+Q2hFigq8M9m8Z^J z$}eSonB+QA4|9fx{aE<5qRGp5@ymaIy95)h&M`!5q+VIm#n$}DVa>AEiqa|46Sl5i z+r+qsAwMRGA@i7e_BXGc`HkQ87kJGtyqYW@lm7M)o705VJq-3+w==EzT5s6=_peym z2jA1{aubag=cRqPoyBf8Va*Iihy3{4iN8HfBe%Z!y*Kyk-goJzWgIuBpWDsMEP1<} ztA1J}^Aqo~jTQwCI-5II+V0NE<%{@TpDOVC_gdbh>^{fz{8w^byh^c*iu;+rRr_p; zyx~-QZ-0Mx&!;nt?MJRlR&ORTJ{Pb%5a!S2&M9VnbTV{qx-#?V&>v?^x+T89FJYvCya}OuU zZP;PAOvFLc`lG>~&28!{cVDqQp!ZJef%Jm=cJ&{h{nTEu@E&iUoARdfB|o|%KKx^} zk?xn4c+|dc=BhP)`zB1wb9n!`p_+aBop~iThowKfSl~Ku>Vx@rdmHV|Pe{~MX>rUi z&)jDB+d3hsF@D+42k+}nKA-LLIV%0ao>^6@vu@tYN@PxXy{Aiw%jr&!m9@3?b>4b^ z6Q``Ct^!_rl zl@WW%`@F@wGnrMc`+lvQ^01eQcmJ{EBRQ!C(W)~ZF0b0lXus6&P1D=Q|0h_yFkI-Q zsHrz;;^o(!E0hg1mhDu~w_m$i&U9AaYV!*oPx+)WtySwc>2C3V@#gyM>fc*C?`LJt zzScQQ_E-Yn(@Ey@#6P{6HTV9mbH77dZ);r&bM2E3n%1YXG@V`P9aF*0Kb=mOs`eYV zaITJ>KX-OP?Di+Sp2d{QIrHC~(7>wfx?4hSet7UXCjN#vgYr}VCbFAenI2c5`!+Y^ zCF7@=Z?AVhm^J@g#mnbBncZ=P;>Wpqq$=;On|l52ter=H{LJZVdv-!5ejW$E+pS=S z^{ER=t}j2uby9QhlzTgVeSS4(>Wf1+VuO~wv#j6E|Gs^3^3#y3>x{p|Jcw`8$yAwk zc-!+u*6B;%1U|i|t$$DZc8#m0+V15?HLfLWHoKl`5qyYE`Rmh`x2$>YPKuVo zC(pCzI+vLGbCl(#a|LF;j-0$@;#HXiH5b%nkH2n9daS2c7VK`;=Dd^j@cHDM89L<| z7x|hi_g=oZ$4vU%?Db{Z$2adec1US{&Yf>Z3JX>TnPPmOgo`_37izOaC-;!o1!t{}8uw zh1f2S$)B9mdV-85rvIvNHMVv+wC(i9{k&&n)-1fKx=U@h%#X$S3p3X)l1`aj(l#&W ziug{oO!3NyODp)#>|Wr^Z&L2C``i7B-Fyl&a%Y^pQc*0nGH>;{oUO4wa*|wm_m&!G z?tH{2%VlzR{%+G9)0HRH{QRo*Cp%(6uSM$PUpaFu1?QdKbNt2D{5{N@zAX`c{Iha? zTyffmiAF)C>|AmuIok_8=JO>!tbUn1ZG(C9std1nGI@O2SXwTlbD3$!tzY8WIxAV$ zN_{rkE62fj=aXvnlZSlO`iiOMz|MQ*L`ua#W^QHwA zZtoi0ZP-~hUHZ^?uz^2E;?%r(w-loeUVi`jcl1TxjV${Ald2D1_SBC*Bj6xeeOA0M zB;eTnC)}y(o3GbQ3=#5rdfVopufhCg!&7;ItgpM8-n1Uw{=V4NsI^~zCzEYYi0h{I zo7w9)*g5wH-4M5q>eSAc%WBz^{cBM-*WSoC?X9mZPIW#xbxC(Rmo;P9sZ*DtE?v8H z#`j-TPtT7dDLrj{`L(|%3HdBJIQe-0(N0B;M&UT&k2|J+4KOM>6~r-Z)HIh^8Afigc*9jb|*{~VU*zNXswWpiR55C!LWJ3Zc^WPfvg$Fe0%-%6)NsNuYsoPw^ zS^PQ1_MFbr>q<9k^cI_K-DLT!YhrlfZ{4+Xjhy{X^R->k;5a>*0k1r22vswFKTGbbc`&zo1 zK2NjHlz(n0M7(XcE2ydG+Y1R>8fq^s{`V4mWt0{@$_l3Jjmm@Zr;R&HivA#v4**ZhOmc4b52q? znih8HMay}IEB$uIj0NYLZzx@_5$l+i$*^0VDN$jQ0`F8`cU4PR{lshX7s3Qd+PNKI$PQl8W%X%d}Ke!s`E%`gJS!IBx}AyRgWDuU2?OqX^Eej$aJcX*;zqp z!sq7P13&M~ZQQut`w^>*=GBi)iv;$(u5v74T)$wp$Gp25<`Fj6*PSHHdw>kgL36Z4_69k=(=d8)m+48s|@htN+%foSH&$e3w!yz!bBs_R+7RWkbJBQ+gnhi_(X6r<|@b-%Kaf^x-)URs$v&5lq znS<1;Ij@uqW`_np4qSMQM`_stzwXURtqD6nW%wLjc40aH#FmZn&-d<|H8bnX+?zS! z(eoE@&rRqyv-&@I&F6GswqTLhn;h>SQ&g4>%P|+8vuS3+ZVoFy?wQA;FFo5<9dfVC z`xftyN!xOE8ec2AJ!OC7?#c<5jZLhxQ*99PuYH?eF?L9Ot=WC~ zRo_bS+uV7W5x=lNx?(=(= z*Ct!HO!92FAG?ct?%Kex%)T}Qla~7Aod(ZmIiA+uXcZgH*!)+c?Z)fc^VI5JdO`pTwVQ#lQL@?RIM5V$Aex*<9 z3+#dF^HRR%HvkM%j9M5Tx!Z+oRc&RjVC{44fnfw z_R!|wRe~I*Yp)~(xSZwqBs^HOtHX&*BRnlD!^z zcl<2!Vw^?H^OV{4O})a%x;~;?`EF3wfd#+TG4qA)WIC<;J2v%K5&Qm(zrPZhwp_1G z3him!r_*}hmgPpj+=OhKzk==Awe9oGV?;H!9?oaW4&ct-5F3%hzK>0O+I9Z}_fxn1 z6=V)G{uGp?zQ@l>aEa%^5>tl4ZwDRzWN!X(`P!qSDsJr;Vm||0_H4P%~vP0;^dC3un>`&w2<5Pa*A>+ zwbRbWZE3W~XtB7Vc0|=Q^N{M>Yfav}46PP_i@ub1cDtY*&vV}#ftTCzT2E|IJ#%cD z%c-@ule`z4{nn8Zz3s#|3Eta9tIHyrgLIc2y;=BptH~W%trrXLzh`p0b$#2R#ogU^ z%#*UKHfnndT-vNqrFC8E@VtZdl9vuNuPr(IjB`)DvPg?2XPQN2;re&oZHzBd7L<`CPfS-<#*-(xWGY@-zXV5C$$)BM3=THCh$?^4d zpPqjXxBvU&t^fJ?o>zl=kGMwvoo#(-{R9d5>Gi*l$)yL}@6>N9@oh`!jgGrlx5`+* zbmQu>%5TE^GgaG;H2r!byZQ{%mf4a^KU|G*FUelWjX{Qk!yf`rfXv-L_@su10Gk_U{{bceun{(YR-F zTjOUaQ`Qx>kbUOX&-VQYU4JYwdj9XA;|8+#B0osf6|_uScC>BpvB2))b&{(bO;@FF z;k&xPR%_4Ps~uf;omLkXwniuIJe^o^(dp;zwwz!45kqsH?JW^ko$qD{2{JIO31eW8 z#u%C_FNjY~$t=k)0*}whWar;D`|z3Vi@kx|ww=9iZ+PCy^|V&V{m!&)U4+>a=gE>i zuD7F7JSRNa5jXw+K5IMGAphmB4H9x6-FULM(nhX-3csA~j~|O)s?9Sxe|`~*-JG?X zQ>VATZi#YzXfju|ZqCx_ug~!R$*G>z9C6WNZ_Lr@muJ~MnVOqC zEzWOxcE9tq##nbrhXbpZwQl;caQ;_$yB|MfJKml5oUaq{?Czx{{#6|Yv4Qq;s@_!X zeKE29$xY)+&HEX;Kgchgx`Ek9jo+W~8DE{~OIuHApCGS$0)7$O{0>#s^xxg2&=r|v z(ChKDE;D{YCX-Pp!_%s6ftR`*lK+KLO+GIcI8gOr;+GTqwu$6(CJHzRcsA|*x|zZA z`^hO&;3=Hu}-OfD`QU6!g<%T9n-2FpU=Bc(A$uC zCXH>w#jDHa%}+C#vr*4(`NW2ck54}IuuRZy+pO{C7>~e?mG1s>8PpGVA*?CwZ zz4SxD@vR)sT3X{on79k%PA*-(biO<1jPGAUX7?<9!s^X>bfo}`q39GLt~ZlX^l#?I z-|+WZ5_P*X=uN6g^tT-DIvS%?XDy zWLh)t7sUVA?z1In$84LKdJ4CWXs}sYC`7vCIo0!N&*KluyA-s>{)H}cVpoRttUCfP z6f=WMVEXd?CS(LN#?3*Hwn_9{FmdwnCb6FSYxcrzs$4;5Y z!;W{8Zn@{xHP^lP>MWnu`}s}a+{Y>=m2b5?lTDHDkWInuUI&4S5?ArvLJWr+v|S$d zy=dGYktW@?zLM*6%SL-ii-c(|j!_Z&AE>{-B|YoxwDfu9ipxKCXRxvfem=)qbCPM= z#?1-=4>F~Hlx?YJk}{QeD>>VCy_~nPz5IuPeIi%F{bIIfrL#8q+mtJP_R z6>~gldKNv|(R1nM>0%?5%?ILR!$17uwJDlECslIpU51Qp`_e=wNTp5OFrjMAEQNH> z?b-p00uSXEc%__uO(TEh=tD|kIS*R} zzpS{pqK(6QB3tay%4+64a+$YXqx5Q~DzE!>NaOSK+ZrO>_k1p}MRct(aJ(1qlEI|! zUU0-(@y0sm{Q0ic;Uk8Nr_uJG6Iesc4*x& zy`jZ7z>@v+*=e;&-Bt=>cN+~KH8f0G<7DSIb;-Z^Z(80j%{iw0MyYkqN)^3(=4~tO z?y%JF|F)0w2A4uz>)yBm!R6{RPWAC8nkz0azR5Qs!%kfA;eMIyA3`1BO7C}7tj+XS zDOgeU%F};U=KhFZjp;3RQzjVav^@y-{eCjSDSQUA7x%1J6F0G%Tnn~YweW`{t&9&Nqw2^q8hSvvU2ibkEN9 zonEXpdbWQmqtuv7-n^gfp{cw|jQy!%{a;n7Np*GsJUT@$r5_ZA-dvfHB_O##_5L2t z8o}cCKeX#_9}~m#W|>}5v-{0+ zBW69bN2ub`SsNv`Y3@+@I8jDmUDF*0Zo3BNX{M!Xp7~ZEOv99vcZVm)M0u`#S&5fD&Jn`^Z3dYACA!-Bh3Mx5BE z)?V3FHMjWl)9f2tBX7NTUbgH_ty9IVw4T`P^}E-ttQI_X*19|J;+azM3oOf&1G1J|m#6iN;kuAO+{UHPP(aMm*Kd8Ri%TydEmv+JS2 z`Lz!FVj648S)BsJBUz>ea|Uy`Xe4{eIO*(_x~cYjzRv`cl-^5sHEtDN6Iy?fHK)?2 z#^ko__L#4UWgqkJy}c|cSGv@3%EZIFweMUMpS4TmgltwTZ?@y!q}DrndUXa*FNc;K zZn^fT*1goSZ)v(8zq@y^;GYDobHcj>q&{tz6&1PR=eVrmkwSCj)m@jI=W?>MoPAMx zz{YjMvlovRcU|VQtd?ll`t;PHs$~(oS3HP}c;t6_xh_Lp!SPtfgE3Zm_4lt9TK3sG z_A2G^O}iWwdhkE*USTl@3Bj(@{IaIv9@Ad!Z=E|u{J5xm%+Htt+al+$f$q*v0(FZy z{#wmq_N)GP_3G;zrYAqXQ?uOWv#4}U#Gx;mLDte5y3)Ou&$0<$XPbOC*TB&1!hy}I zv+veOtBRX&Ch|9gT`=9$$;P|LRYzN{|IGf)&kICfUVr;sb7#fhqP<=6qW@ysrvE9q zeCYVIn(JD8;ZG!|an>#RsJ)}(^7=iq9}6AIMI-}~?I=?`~PD?Y4fdAXSRwN!J% z?)0Z?=Ny#YxAW7_zSpPhj4$-u77DO@W1N$tvHa_<;OR>roQ|_B z=7aN>>%NL&P+zNY=0;F}tMis~F4?`IJWLGnl8?9CSY;~K`|IkoN7qZv1U`wcH*Gld zQk^|}*~#PYne%!!d5sTE11+U_iyBMw~x^MonZMo-+ z$9vpg$qOEze?D<#!_x%5myJAcTpT%6dCD$pa!#n?3te`Ge?M!dzL0(MhjlITQxrc3 z9L~?m6Zmz{P>M-kYGt`rzp7T&`$f^oZ|s{Ft>jsgejPtw9*b;*j!83ot6H?p%%=leZU0q#pk^kzIKV83Dodi9W9ox!T_VSwCiVx9l z;_J_!T`PI#nyQ9pt>p9N26IE-y_Nd#=*{$S z`#rzjxwwB8mpSQwan97j$^4PBm-iOcmQQ5y%dq z3m@Anwaix(jAr`2X8Tu@XO)NE6-#csf4-$`^6&F@+0)|I-`l-Vf!i)htoC&X-J-F5%e%gO!^)gEnrG$|!-o#@>z`LL+%wz1mWC)eMKWz*izvFhk! znfIG>iV}Zh=xXXItF$p`Etz$#!s_s|N!P_Uq+U~V7u8y2sJ0;PU(nWC9f3o27gQ?$ zY~JU%Tz`S-orTUSxjW3v=bZ^osXDWItI%GkW2d(M&+hyCxc>Iq`Zo`*NPmkJsr(diD^A>MN66Ww zbIN~N#j1BL`_j6<_0DANlta5h7F8^$=kOk?ITP_E39a5alc{9{@ zaZIZ+$1l-YQlUH7tvgiBlx==IoUx%TRoJnF^@qoeX$j2hGGo)-#ph@6YrDPn@|*GO z$KSRsQgsR$AKwVM)jv_YW!TfT>T12hgneB{jz(K#9y|TaD&J|Z?Ybi?!grq9^~=0{ z>9x-yNA4z0dzAk(ZO`SZGm39hf9%`3=6k?y2diAKz(;BSu4|MUYMCbUw&&FtaT!;r zRGgkFmVa7w`rL12E?cIpi@UHx%k~dTcA4QlH|{!v7-2_gaiBgI819&#ftu zx{Wz(KMJ^Zp13@1=8XfhFLlo;TDC^jWMN#?p8NZ()#CzJJUKjHwru^S*U{hJdvocm zE)h-&_uFLj$f)|g)yY*s6R+lNnezM8)K7`sbB-vv%$A>*?XR_El;3GhKHso;_s-_fz2|t1g%AdBF2iNYp{1WQp(Tb!^$CtG`G8{Ce=+`Y462 zuWN)B{QcWiz4ofN-{$vOr=Hndw%z(G=-@4{!e<%Y0kmxa{`69A<6HlFZB5uC4uWx4!<99Q(g%s*>+F1~!;@thQ4;y7pho z{i&Ng64tF+)c3MMaK=Rj@qM2A1XsFWuYb^ZNcS|Sw0@>siJ*)09Pyv$H*0hpVE^o& z{%p6b6kDAUQ^D7uU#bpE=LK?b-Uu<8)2^g7Yx$3(7OMnVq?VoLNqGOgv+`J4$IBw0 zI(rj;eICP2$+rXF#r^-VJ-}4ndi$MrrMTqh$Xv99|B-*M}b_Cg-q%BIKwgfE_Od=7?jh(YBC__w40lw;QZGw%I4gs%7DSHrP-K1H<}cOU+Rz$tX%qOi{>9EGUl2Er8#&j1A&(FE~l*56nVKG zxxcYPT{HBl+U;wTlHI>;V^zE-+kS21T!Cf_)p>LC|15quDR}3J&HXmJ1uL8iw})=I zDYsKW?<`lBU$N)bNp74v3B39nV$8CHPn|D*)5mR-?Wg!+i^Ad!@eLf52_q`)#ex!%w9**^ct5 z1)u*_Hcj#2mV@HoFV1s#X?)q2b=G@+k+;)6{H#4Lx^;S0`g1O+yhmFir=Op-M0!NK6z-V(8P z7st%q3=9k!Yzz!)aEm}?%}U%B#V3~*m*nTh=Oz|_QaW<@P4`*Z^|%e62RRtN>|Gbp zDKmNJBrygCi#!GfQ51VuFfuTJBOIFK^g)Frx;5IrL{hu)h9d{V;hb3!%kLICXQ?tU z2!CZ@kV3I0R|1PQ;GBqV*T)M*PJ%P=dr6~kWyG|d&hMUrvZyE{gB*%o{C3#v%FHWC zEy_#GLAP(l1+^nSi}2gmp1LT4>%x(hv!WOnJ}qNnkU_D}pah$JkgSYuo9zVIT?gji zw+)owQLlxAZT{5zDp9C1u(g&zSL-*F%tEDju z2m~VLBnz@Vy(;MTz)Lc8%WCe;oPs~mV{3-MECZEtH%uAfjS}SGa^nnWBvjC$H*mP& zX#r&NKO~cL3sB04@JqpX3`f)nsLdUivq4d>Zia9+G`pgQjn4{&NxWaL<0-1KHFc0J znSf~tM#Bd=%