From 30f303cb994a8f50b7812d39c05e8ed26958a36d Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Mon, 16 Jan 2017 12:18:23 +0100 Subject: [PATCH 01/23] Added new ModuleInformation --- bin/ModulesInformationV2.py | 417 +++++++++++++++++++++++++++++++++++ pip_packages_requirement.txt | 1 + 2 files changed, 418 insertions(+) create mode 100755 bin/ModulesInformationV2.py diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py new file mode 100755 index 00000000..5ef8addd --- /dev/null +++ b/bin/ModulesInformationV2.py @@ -0,0 +1,417 @@ +#!/usr/bin/env python2 +# -*-coding:UTF-8 -* + +from asciimatics.widgets import Frame, ListBox, Layout, Divider, Text, \ + Button, TextBox, Widget, Label +from asciimatics.effects import Cycle, Print, Stars +from asciimatics.scene import Scene +from asciimatics.screen import Screen +from asciimatics.exceptions import ResizeScreenError, NextScene, StopApplication +from asciimatics.event import Event +import sys, os +import time, datetime +import argparse, ConfigParser +import json +import redis + + # CONFIG VARIABLES +kill_retry_threshold = 60 #1m +log_filename = "../logs/moduleInfo.log" +command_search_pid = "ps a -o pid,cmd | grep {}" +command_search_name = "ps a -o pid,cmd | grep {}" +command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" + +printarrayGlob = [None]*14 +printarrayGlob.insert(0, ["Time", "Module", "PID", "Action"]) +lastTimeKillCommand = {} +TABLES = {"running": [("fetching information...",0)], "idle": [("fetching information...",0)], "notRunning": [("fetching information...",0)], "logs": [("No events recorded yet", 0)]} + +class CListBox(ListBox): + def __init__(self, queue_name, *args, **kwargs): + self.queue_name = queue_name + super(CListBox, self).__init__(*args, **kwargs) + + def update(self, frame_no): + self._options = TABLES[self.queue_name] + ListBox.update(self, frame_no) + +class CLabel(Label): + def __init__(self, label): + super(Label, self).__init__(None, tab_stop=False) + # Although this is a label, we don't want it to contribute to the layout + # tab calculations, so leave internal `_label` value as None. + self._text = label + + def set_layout(self, x, y, offset, w, h): + # Do the usual layout work. then recalculate exact x/w values for the + # rendered button. + super(Label, self).set_layout(x, y, offset, w, h) + self._x += max(0, (self._w - self._offset - len(self._text)) // 2) + self._w = min(self._w, len(self._text)) + + def update(self, frame_no): + (colour, attr, bg) = self._frame.palette["title"] + self._frame.canvas.print_at( + self._text, self._x, self._y, colour, attr, bg) + +class ListView(Frame): + # Override standard palette for pop-ups +# "selected_field": +# (Screen.COLOUR_YELLOW, Screen.A_BOLD, Screen.COLOUR_BLUE), +# "focus_field": +# (Screen.COLOUR_WHITE, Screen.A_NORMAL, Screen.COLOUR_BLUE), +# "selected_focus_field": +# (Screen.COLOUR_WHITE, Screen.A_BOLD, Screen.COLOUR_CYAN), + def __init__(self, screen): + super(ListView, self).__init__(screen, + screen.height, + screen.width, + on_load=self._reload_list, + hover_focus=True) + + self._list_view_run_queue = CListBox( + "running", + screen.height // 2, + [], name="LIST", on_change=self._on_pick) + self._list_view_idle_queue = CListBox( + "idle", + screen.height // 2, + [], name="LIST", on_change=self._on_pick) + self._list_view_noRunning = CListBox( + "notRunning", + screen.height // 4, + [], name="LIST", on_change=self._on_pick) + self._list_view_Log = CListBox( + "logs", + screen.height // 4, + [], name="LIST", on_change=self._on_pick) + + #Running Queues + layout = Layout([100]) + self.add_layout(layout) + text_rq = CLabel("Running Queues") + layout.add_widget(text_rq) + layout.add_widget(self._list_view_run_queue) + layout.add_widget(Divider()) + + #Idling Queues + layout2 = Layout([1,1]) + self.add_layout(layout2) + text_iq = CLabel("Idling Queues") + layout2.add_widget(text_iq) + layout2.add_widget(self._list_view_idle_queue, 0) + #Non Running Queues + text_nq = CLabel("No Running Queues") + layout2.add_widget(text_nq, 1) + layout2.add_widget(self._list_view_noRunning, 1) + layout2.add_widget(Divider(), 1) + #Log + text_l = CLabel("Logs") + layout2.add_widget(text_l, 1) + layout2.add_widget(self._list_view_Log, 1) + + self.fix() + self._on_pick() + + def _on_pick(self): + return + + def _reload_list(self): + self._list_view_run_queue = [(time.time(), 123)] + + @staticmethod + def _quit(): + raise StopApplication("User pressed quit") + + +def demo(screen): + LV = ListView(screen) + scenes = [ + Scene([LV], -1) + ] + + # screen.play(scenes) + screen.set_scenes(scenes) + time_cooldown = time.time() + global TABLES + while True: + LV._update(None) + screen.draw_next_frame() + if time.time() - time_cooldown > 1: + for key, val in fetchQueueData().iteritems(): + TABLES[key] = val + screen.refresh() + time_cooldown = time.time() + time.sleep(0.02) + + +def getPid(module): + p = Popen([command_search_pid.format(module+".py")], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + for line in p.stdout: + print line + splittedLine = line.split() + if 'python2' in splittedLine: + return int(splittedLine[0]) + return None + +def clearRedisModuleInfo(): + for k in server.keys("MODULE_*"): + server.delete(k) + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, "*", "-", "Cleared redis module info"]) + printarrayGlob.pop() + +def cleanRedis(): + for k in server.keys("MODULE_TYPE_*"): + moduleName = k[12:].split('_')[0] + for pid in server.smembers(k): + flag_pid_valid = False + proc = Popen([command_search_name.format(pid)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + for line in proc.stdout: + splittedLine = line.split() + if ('python2' in splittedLine or 'python' in splittedLine) and "./"+moduleName+".py" in splittedLine: + flag_pid_valid = True + + if not flag_pid_valid: + print flag_pid_valid, 'cleaning', pid, 'in', k + server.srem(k, pid) + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, moduleName, pid, "Cleared invalid pid in " + k]) + printarrayGlob.pop() + #time.sleep(5) + + +def kill_module(module, pid): + print '' + print '-> trying to kill module:', module + + if pid is None: + print 'pid was None' + printarrayGlob.insert(1, [0, module, pid, "PID was None"]) + printarrayGlob.pop() + pid = getPid(module) + else: #Verify that the pid is at least in redis + if server.exists("MODULE_"+module+"_"+str(pid)) == 0: + return + + lastTimeKillCommand[pid] = int(time.time()) + if pid is not None: + try: + os.kill(pid, signal.SIGUSR1) + except OSError: + print pid, 'already killed' + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, module, pid, "Already killed"]) + printarrayGlob.pop() + return + time.sleep(1) + if getPid(module) is None: + print module, 'has been killed' + print 'restarting', module, '...' + p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, module, pid, "Killed"]) + printarrayGlob.insert(1, [inst_time, module, "?", "Restarted"]) + printarrayGlob.pop() + printarrayGlob.pop() + + else: + print 'killing failed, retrying...' + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, module, pid, "Killing #1 failed."]) + printarrayGlob.pop() + + time.sleep(1) + os.kill(pid, signal.SIGUSR1) + time.sleep(1) + if getPid(module) is None: + print module, 'has been killed' + print 'restarting', module, '...' + p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, module, pid, "Killed"]) + printarrayGlob.insert(1, [inst_time, module, "?", "Restarted"]) + printarrayGlob.pop() + printarrayGlob.pop() + else: + print 'killing failed!' + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, module, pid, "Killing failed!"]) + printarrayGlob.pop() + else: + print 'Module does not exist' + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(1, [inst_time, module, pid, "Killing failed, module not found"]) + printarrayGlob.pop() + #time.sleep(5) + cleanRedis() + + + + +def fetchQueueData(): + + all_queue = set() + printarray1 = [] + printarray2 = [] + printarray3 = [] + for queue, card in server.hgetall("queues").iteritems(): + all_queue.add(queue) + key = "MODULE_" + queue + "_" + keySet = "MODULE_TYPE_" + queue + array_module_type = [] + + for moduleNum in server.smembers(keySet): + value = server.get(key + str(moduleNum)) + if value is not None: + timestamp, path = value.split(", ") + if timestamp is not None and path is not None: + startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) + processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] + + if int(card) > 0: + if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: + #log = open(log_filename, 'a') + #log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") + try: + last_kill_try = time.time() - lastTimeKillCommand[moduleNum] + except KeyError: + last_kill_try = kill_retry_threshold+1 + if args.autokill == 1 and last_kill_try > kill_retry_threshold : + kill_module(queue, int(moduleNum)) + + array_module_type.append( ([" ", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path)], moduleNum) ) + + else: + printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) + array_module_type.sort(lambda x,y: cmp(x[0][4], y[0][4]), reverse=True) + for e in array_module_type: + printarray1.append(e) + + for curr_queue in module_file_array: + if curr_queue not in all_queue: + printarray3.append( ([" ", curr_queue, "Not running"], len(printarray3)+1) ) + else: + if len(list(server.smembers('MODULE_TYPE_'+curr_queue))) == 0: + if curr_queue not in no_info_modules: + no_info_modules[curr_queue] = int(time.time()) + printarray3.append( ([" ", curr_queue, "No data"], len(printarray3)+1) ) + else: + #If no info since long time, try to kill + if args.autokill == 1: + if int(time.time()) - no_info_modules[curr_queue] > args.treshold: + kill_module(curr_queue, None) + no_info_modules[curr_queue] = int(time.time()) + printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], len(printarray3)+1) ) + else: + printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], len(printarray3)+1) ) + + ## FIXME To add: + ## Button KILL Process using Curses + + printarray1.sort(key=lambda x: x[0], reverse=False) + printarray2.sort(key=lambda x: x[0], reverse=False) + printarray1.insert(0,([" ", "Queue name", "PID", "#", "S Time", "R Time", "Processed element", "CPU", "Mem", "Avg CPU"], 0) ) + printarray2.insert(0,([" ", "Queue", "PID", "Idle Time", "Last paste hash"], 0) ) + printarray3.insert(0,([" ", "Queue", "State"], 0) ) + + padding_row = [5, 23, 8, + 8, 23, 10, + 45, 6, 6, 8] + printstring1 = [] + for row in printarray1: + the_array = row[0] + the_pid = row[1] + text="" + for ite, elem in enumerate(the_array): + if len(elem) > padding_row[ite]: + text += "*" + elem[-padding_row[ite]+6:] + padd_off = " "*5 + else: + text += elem + padd_off = " "*0 + text += (padding_row[ite] - len(elem))*" " + padd_off + printstring1.append( (text, the_pid) ) + + padding_row = [5, 23, 8, + 12, 45] + printstring2 = [] + for row in printarray2: + the_array = row[0] + the_pid = row[1] + text="" + for ite, elem in enumerate(the_array): + if len(elem) > padding_row[ite]: + text += "*" + elem[-padding_row[ite]+6:] + padd_off = " "*5 + else: + text += elem + padd_off = " "*0 + text += (padding_row[ite] - len(elem))*" " + padd_off + printstring2.append( (text, the_pid) ) + + padding_row = [5, 23, 35] + printstring3 = [] + for row in printarray3: + the_array = row[0] + the_pid = row[1] + text="" + for ite, elem in enumerate(the_array): + if len(elem) > padding_row[ite]: + text += "*" + elem[-padding_row[ite]+6:] + padd_off = " "*5 + else: + text += elem + padd_off = " "*0 + text += (padding_row[ite] - len(elem))*" " + padd_off + printstring3.append( (text, the_pid) ) + + return {"running": printstring1, "idle": printstring2, "notRunning": printstring3} + + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Show info concerning running modules and log suspected stucked modules. May be use to automatically kill and restart stucked one.') + parser.add_argument('-r', '--refresh', type=int, required=False, default=1, help='Refresh rate') + parser.add_argument('-t', '--treshold', type=int, required=False, default=60*10*1, help='Refresh rate') + parser.add_argument('-k', '--autokill', type=int, required=False, default=0, help='Enable auto kill option (1 for TRUE, anything else for FALSE)') + parser.add_argument('-c', '--clear', type=int, required=False, default=0, help='Clear the current module information (Used to clear data from old launched modules)') + + args = parser.parse_args() + + configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg') + if not os.path.exists(configfile): + raise Exception('Unable to find the configuration file. \ + Did you set environment variables? \ + Or activate the virtualenv.') + + cfg = ConfigParser.ConfigParser() + cfg.read(configfile) + + # REDIS # + server = redis.StrictRedis( + host=cfg.get("Redis_Queues", "host"), + port=cfg.getint("Redis_Queues", "port"), + db=cfg.getint("Redis_Queues", "db")) + + if args.clear == 1: + clearRedisModuleInfo() + + lastTime = datetime.datetime.now() + + module_file_array = set() + no_info_modules = {} + path_allmod = os.path.join(os.environ['AIL_HOME'], 'doc/all_modules.txt') + with open(path_allmod, 'r') as module_file: + for line in module_file: + module_file_array.add(line[:-1]) + + #cleanRedis() + + + + while True: + Screen.wrapper(demo) + sys.exit(0) + diff --git a/pip_packages_requirement.txt b/pip_packages_requirement.txt index e95df123..a5d6659e 100644 --- a/pip_packages_requirement.txt +++ b/pip_packages_requirement.txt @@ -12,6 +12,7 @@ matplotlib networkx terminaltables colorama +asciimatics #Tokeniser nltk From af3241c00880743ff594f1075bac9ccaefadb73a Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Mon, 16 Jan 2017 14:41:02 +0100 Subject: [PATCH 02/23] Overwritted listbox update function to add formating --- bin/ModulesInformationV2.py | 50 ++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 5ef8addd..17df64fb 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -27,13 +27,53 @@ lastTimeKillCommand = {} TABLES = {"running": [("fetching information...",0)], "idle": [("fetching information...",0)], "notRunning": [("fetching information...",0)], "logs": [("No events recorded yet", 0)]} class CListBox(ListBox): + def __init__(self, queue_name, *args, **kwargs): self.queue_name = queue_name super(CListBox, self).__init__(*args, **kwargs) def update(self, frame_no): self._options = TABLES[self.queue_name] - ListBox.update(self, frame_no) + + self._draw_label() + + # Calculate new visible limits if needed. + width = self._w - self._offset + height = self._h + dx = dy = 0 + + # Clear out the existing box content + (colour, attr, bg) = self._frame.palette["field"] + for i in range(height): + self._frame.canvas.print_at( + " " * width, + self._x + self._offset + dx, + self._y + i + dy, + colour, attr, bg) + + # Don't bother with anything else if there are no options to render. + if len(self._options) <= 0: + return + + # Render visible portion of the text. + self._start_line = max(0, max(self._line - height + 1, + min(self._start_line, self._line))) + for i, (text, _) in enumerate(self._options): + if i == 0: + colour, attr, bg = self._frame.palette["title"] + self._frame.canvas.print_at( + "{:{width}}".format(text, width=width), + self._x + self._offset + dx, + self._y + i + dy - self._start_line, + colour, attr, bg) + elif self._start_line <= i < self._start_line + height: + colour, attr, bg = self._pick_colours("field", i == self._line) + self._frame.canvas.print_at( + "{:{width}}".format(text, width=width), + self._x + self._offset + dx, + self._y + i + dy - self._start_line, + colour, attr, bg) + class CLabel(Label): def __init__(self, label): @@ -51,6 +91,7 @@ class CLabel(Label): def update(self, frame_no): (colour, attr, bg) = self._frame.palette["title"] + colour = Screen.COLOUR_YELLOW self._frame.canvas.print_at( self._text, self._x, self._y, colour, attr, bg) @@ -67,7 +108,8 @@ class ListView(Frame): screen.height, screen.width, on_load=self._reload_list, - hover_focus=True) + hover_focus=True, + reduce_cpu=True) self._list_view_run_queue = CListBox( "running", @@ -142,7 +184,7 @@ def demo(screen): TABLES[key] = val screen.refresh() time_cooldown = time.time() - time.sleep(0.02) + #time.sleep(0.02) def getPid(module): @@ -334,7 +376,7 @@ def fetchQueueData(): printstring1.append( (text, the_pid) ) padding_row = [5, 23, 8, - 12, 45] + 12, 50] printstring2 = [] for row in printarray2: the_array = row[0] From 0ecfaf00f5b1b0dc0fa837ff8748fc3ae13c4834 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Mon, 16 Jan 2017 15:30:33 +0100 Subject: [PATCH 03/23] Added color in front of queue related to its state --- bin/ModulesInformationV2.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 17df64fb..9f75125d 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -25,6 +25,7 @@ printarrayGlob = [None]*14 printarrayGlob.insert(0, ["Time", "Module", "PID", "Action"]) lastTimeKillCommand = {} TABLES = {"running": [("fetching information...",0)], "idle": [("fetching information...",0)], "notRunning": [("fetching information...",0)], "logs": [("No events recorded yet", 0)]} +QUEUE_STATUS = {} class CListBox(ListBox): @@ -58,7 +59,7 @@ class CListBox(ListBox): # Render visible portion of the text. self._start_line = max(0, max(self._line - height + 1, min(self._start_line, self._line))) - for i, (text, _) in enumerate(self._options): + for i, (text, pid) in enumerate(self._options): if i == 0: colour, attr, bg = self._frame.palette["title"] self._frame.canvas.print_at( @@ -73,6 +74,18 @@ class CListBox(ListBox): self._x + self._offset + dx, self._y + i + dy - self._start_line, colour, attr, bg) + if self.queue_name == "running": + if QUEUE_STATUS[pid] == 2: + queueStatus = Screen.COLOUR_RED + elif QUEUE_STATUS[pid] == 1: + queueStatus = Screen.COLOUR_YELLOW + else: + queueStatus = Screen.COLOUR_GREEN + + self._frame.canvas.print_at(" ", + self._x + 5 + dx, + self._y + i + dy - self._start_line, + colour, attr, queueStatus) class CLabel(Label): @@ -310,6 +323,12 @@ def fetchQueueData(): if timestamp is not None and path is not None: startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] + if ((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: + QUEUE_STATUS[moduleNum] = 2 + elif ((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold/2: + QUEUE_STATUS[moduleNum] = 1 + else: + QUEUE_STATUS[moduleNum] = 0 if int(card) > 0: if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: @@ -322,7 +341,7 @@ def fetchQueueData(): if args.autokill == 1 and last_kill_try > kill_retry_threshold : kill_module(queue, int(moduleNum)) - array_module_type.append( ([" ", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path)], moduleNum) ) + array_module_type.append( ([" K [ ]", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path)], moduleNum) ) else: printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) @@ -357,9 +376,9 @@ def fetchQueueData(): printarray2.insert(0,([" ", "Queue", "PID", "Idle Time", "Last paste hash"], 0) ) printarray3.insert(0,([" ", "Queue", "State"], 0) ) - padding_row = [5, 23, 8, + padding_row = [8, 23, 8, 8, 23, 10, - 45, 6, 6, 8] + 50, 6, 6, 8] printstring1 = [] for row in printarray1: the_array = row[0] From 3b8149d840aed65e43a69ccb4aa92eef17aaf26d Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Mon, 16 Jan 2017 17:08:48 +0100 Subject: [PATCH 04/23] Added action button and support of logs --- bin/ModulesInformationV2.py | 88 +++++++++++++++++++++++++----------- pip_packages_requirement.txt | 1 + 2 files changed, 62 insertions(+), 27 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 9f75125d..6ccb2cc4 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -13,6 +13,7 @@ import time, datetime import argparse, ConfigParser import json import redis +import psutil # CONFIG VARIABLES kill_retry_threshold = 60 #1m @@ -26,6 +27,8 @@ printarrayGlob.insert(0, ["Time", "Module", "PID", "Action"]) lastTimeKillCommand = {} TABLES = {"running": [("fetching information...",0)], "idle": [("fetching information...",0)], "notRunning": [("fetching information...",0)], "logs": [("No events recorded yet", 0)]} QUEUE_STATUS = {} +CPU_TABLE = {} +CPU_OBJECT_TABLE = {} class CListBox(ListBox): @@ -83,7 +86,7 @@ class CListBox(ListBox): queueStatus = Screen.COLOUR_GREEN self._frame.canvas.print_at(" ", - self._x + 5 + dx, + self._x + 9 + dx, self._y + i + dy - self._start_line, colour, attr, queueStatus) @@ -109,13 +112,6 @@ class CLabel(Label): self._text, self._x, self._y, colour, attr, bg) class ListView(Frame): - # Override standard palette for pop-ups -# "selected_field": -# (Screen.COLOUR_YELLOW, Screen.A_BOLD, Screen.COLOUR_BLUE), -# "focus_field": -# (Screen.COLOUR_WHITE, Screen.A_NORMAL, Screen.COLOUR_BLUE), -# "selected_focus_field": -# (Screen.COLOUR_WHITE, Screen.A_BOLD, Screen.COLOUR_CYAN), def __init__(self, screen): super(ListView, self).__init__(screen, screen.height, @@ -140,6 +136,7 @@ class ListView(Frame): "logs", screen.height // 4, [], name="LIST", on_change=self._on_pick) + self._list_view_Log.disabled = True #Running Queues layout = Layout([100]) @@ -192,12 +189,13 @@ def demo(screen): while True: LV._update(None) screen.draw_next_frame() - if time.time() - time_cooldown > 1: + if time.time() - time_cooldown > args.refresh: for key, val in fetchQueueData().iteritems(): TABLES[key] = val + TABLES["logs"] = format_logs(printarrayGlob) screen.refresh() time_cooldown = time.time() - #time.sleep(0.02) + time.sleep(0.02) def getPid(module): @@ -252,8 +250,10 @@ def kill_module(module, pid): lastTimeKillCommand[pid] = int(time.time()) if pid is not None: try: - os.kill(pid, signal.SIGUSR1) - except OSError: + #os.kill(pid, signal.SIGUSR1) + p = psutil.Process(pid) + p.terminate() + except Exception: print pid, 'already killed' inst_time = datetime.datetime.fromtimestamp(int(time.time())) printarrayGlob.insert(1, [inst_time, module, pid, "Already killed"]) @@ -277,7 +277,9 @@ def kill_module(module, pid): printarrayGlob.pop() time.sleep(1) - os.kill(pid, signal.SIGUSR1) + #os.kill(pid, signal.SIGUSR1) + p = psutil.Process(pid) + p.terminate() time.sleep(1) if getPid(module) is None: print module, 'has been killed' @@ -341,44 +343,57 @@ def fetchQueueData(): if args.autokill == 1 and last_kill_try > kill_retry_threshold : kill_module(queue, int(moduleNum)) - array_module_type.append( ([" K [ ]", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path)], moduleNum) ) + try: + cpu_percent = CPU_OBJECT_TABLE[int(moduleNum)].cpu_percent() + CPU_TABLE[moduleNum].insert(1, cpu_percent) + cpu_avg = sum(CPU_TABLE[moduleNum])/len(CPU_TABLE[moduleNum]) + except KeyError: + CPU_OBJECT_TABLE[int(moduleNum)] = psutil.Process(int(moduleNum)) + cpu_percent = CPU_OBJECT_TABLE[int(moduleNum)].cpu_percent() + CPU_TABLE[moduleNum] = [] + cpu_avg = cpu_percent + if len(CPU_TABLE[moduleNum]) > args.refresh*10: + CPU_TABLE[moduleNum].pop() + mem_percent = CPU_OBJECT_TABLE[int(moduleNum)].memory_percent() + + array_module_type.append( ([" [ ]", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path), "{0:.2f}".format(cpu_percent)+"%", "{0:.2f}".format(mem_percent)+"%", "{0:.2f}".format(cpu_avg)+"%"], moduleNum) ) else: - printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) + printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) array_module_type.sort(lambda x,y: cmp(x[0][4], y[0][4]), reverse=True) for e in array_module_type: printarray1.append(e) for curr_queue in module_file_array: if curr_queue not in all_queue: - printarray3.append( ([" ", curr_queue, "Not running"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "Not running"], len(printarray3)+1) ) else: if len(list(server.smembers('MODULE_TYPE_'+curr_queue))) == 0: if curr_queue not in no_info_modules: no_info_modules[curr_queue] = int(time.time()) - printarray3.append( ([" ", curr_queue, "No data"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "No data"], len(printarray3)+1) ) else: #If no info since long time, try to kill if args.autokill == 1: if int(time.time()) - no_info_modules[curr_queue] > args.treshold: kill_module(curr_queue, None) no_info_modules[curr_queue] = int(time.time()) - printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], len(printarray3)+1) ) else: - printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], len(printarray3)+1) ) ## FIXME To add: ## Button KILL Process using Curses printarray1.sort(key=lambda x: x[0], reverse=False) printarray2.sort(key=lambda x: x[0], reverse=False) - printarray1.insert(0,([" ", "Queue name", "PID", "#", "S Time", "R Time", "Processed element", "CPU", "Mem", "Avg CPU"], 0) ) - printarray2.insert(0,([" ", "Queue", "PID", "Idle Time", "Last paste hash"], 0) ) - printarray3.insert(0,([" ", "Queue", "State"], 0) ) + printarray1.insert(0,([" Action", "Queue name", "PID", "#", "S Time", "R Time", "Processed element", "CPU %", "Mem %", "Avg CPU%"], 0) ) + printarray2.insert(0,([" Action", "Queue", "PID", "Idle Time", "Last paste hash"], 0) ) + printarray3.insert(0,([" Action", "Queue", "State"], 0) ) - padding_row = [8, 23, 8, + padding_row = [12, 23, 8, 8, 23, 10, - 50, 6, 6, 8] + 55, 11, 11, 12] printstring1 = [] for row in printarray1: the_array = row[0] @@ -394,7 +409,7 @@ def fetchQueueData(): text += (padding_row[ite] - len(elem))*" " + padd_off printstring1.append( (text, the_pid) ) - padding_row = [5, 23, 8, + padding_row = [9, 23, 8, 12, 50] printstring2 = [] for row in printarray2: @@ -411,7 +426,7 @@ def fetchQueueData(): text += (padding_row[ite] - len(elem))*" " + padd_off printstring2.append( (text, the_pid) ) - padding_row = [5, 23, 35] + padding_row = [9, 23, 35] printstring3 = [] for row in printarray3: the_array = row[0] @@ -429,12 +444,31 @@ def fetchQueueData(): return {"running": printstring1, "idle": printstring2, "notRunning": printstring3} +def format_logs(logs): + printstring4 = [] + padding_row = [12, 23, 8, 50] + text="" + + for row in logs: + if row is None: + continue + for ite, elem in enumerate(row): + if len(elem) > padding_row[ite]: + text += "*" + elem[-padding_row[ite]+6:] + padd_off = " "*5 + else: + text += elem + padd_off = " "*0 + text += (padding_row[ite] - len(elem))*" " + padd_off + printstring4.append( (text, len(printstring4)+1) ) + return printstring4 + if __name__ == "__main__": parser = argparse.ArgumentParser(description='Show info concerning running modules and log suspected stucked modules. May be use to automatically kill and restart stucked one.') - parser.add_argument('-r', '--refresh', type=int, required=False, default=1, help='Refresh rate') + parser.add_argument('-r', '--refresh', type=int, required=False, default=2, help='Refresh rate') parser.add_argument('-t', '--treshold', type=int, required=False, default=60*10*1, help='Refresh rate') parser.add_argument('-k', '--autokill', type=int, required=False, default=0, help='Enable auto kill option (1 for TRUE, anything else for FALSE)') parser.add_argument('-c', '--clear', type=int, required=False, default=0, help='Clear the current module information (Used to clear data from old launched modules)') diff --git a/pip_packages_requirement.txt b/pip_packages_requirement.txt index a5d6659e..ab5aa42c 100644 --- a/pip_packages_requirement.txt +++ b/pip_packages_requirement.txt @@ -25,6 +25,7 @@ ssdeep #Others python-magic pybloomfiltermmap +psutil ipython flask From 692f13d18b7659c5e895108aa348c0c028433c52 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 17 Jan 2017 14:31:06 +0100 Subject: [PATCH 05/23] Improved module + Added support of click and keyboard navigation for killing and starting modules --- bin/ModulesInformationV2.py | 355 +++++++++++++++++++++--------------- 1 file changed, 209 insertions(+), 146 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 6ccb2cc4..ca84636d 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -8,12 +8,14 @@ from asciimatics.scene import Scene from asciimatics.screen import Screen from asciimatics.exceptions import ResizeScreenError, NextScene, StopApplication from asciimatics.event import Event +from asciimatics.event import KeyboardEvent, MouseEvent import sys, os import time, datetime import argparse, ConfigParser import json import redis import psutil +from subprocess import PIPE, Popen # CONFIG VARIABLES kill_retry_threshold = 60 #1m @@ -23,9 +25,17 @@ command_search_name = "ps a -o pid,cmd | grep {}" command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" printarrayGlob = [None]*14 -printarrayGlob.insert(0, ["Time", "Module", "PID", "Action"]) lastTimeKillCommand = {} -TABLES = {"running": [("fetching information...",0)], "idle": [("fetching information...",0)], "notRunning": [("fetching information...",0)], "logs": [("No events recorded yet", 0)]} + +current_selected_value = 0 +current_selected_queue = "" + +PID_NAME_DICO = {} + +TABLES = {"running": [], "idle": [], "notRunning": [], "logs": [("No events recorded yet", 0)]} +TABLES_TITLES = {"running": "", "idle": "", "notRunning": "", "logs": ""} +TABLES_PADDING = {"running": [12, 23, 8, 8, 23, 10, 55, 11, 11, 12], "idle": [9, 23, 8, 12, 50], "notRunning": [9, 23, 35], "logs": [15, 23, 8, 50]} + QUEUE_STATUS = {} CPU_TABLE = {} CPU_OBJECT_TABLE = {} @@ -63,14 +73,7 @@ class CListBox(ListBox): self._start_line = max(0, max(self._line - height + 1, min(self._start_line, self._line))) for i, (text, pid) in enumerate(self._options): - if i == 0: - colour, attr, bg = self._frame.palette["title"] - self._frame.canvas.print_at( - "{:{width}}".format(text, width=width), - self._x + self._offset + dx, - self._y + i + dy - self._start_line, - colour, attr, bg) - elif self._start_line <= i < self._start_line + height: + if self._start_line <= i < self._start_line + height: colour, attr, bg = self._pick_colours("field", i == self._line) self._frame.canvas.print_at( "{:{width}}".format(text, width=width), @@ -91,23 +94,67 @@ class CListBox(ListBox): colour, attr, queueStatus) + def process_event(self, event): + if isinstance(event, KeyboardEvent): + if len(self._options) > 0 and event.key_code == Screen.KEY_UP: + # Move up one line in text - use value to trigger on_select. + self._line = max(0, self._line - 1) + self.value = self._options[self._line][1] + elif len(self._options) > 0 and event.key_code == Screen.KEY_DOWN: + # Move down one line in text - use value to trigger on_select. + self._line = min(len(self._options) - 1, self._line + 1) + self.value = self._options[self._line][1] + elif len(self._options) > 0 and event.key_code == ord(' '): + global current_selected_value, current_selected_queue + current_selected_value = self.value + current_selected_queue = self.queue_name + raise NextScene("confirm") + else: + # Ignore any other key press. + return event + elif isinstance(event, MouseEvent): + # Mouse event - rebase coordinates to Frame context. + new_event = self._frame.rebase_event(event) + if event.buttons != 0: + if (len(self._options) > 0 and + self.is_mouse_over(new_event, include_label=False)): + # Use property to trigger events. + self._line = min(new_event.y - self._y, + len(self._options) - 1) + self.value = self._options[self._line][1] + # If clicked on button , kill the queue + if self._x+2 <= new_event.x < self._x+4: + if self.queue_name in ["running", "idle"]: + kill_module(PID_NAME_DICO[self.value], self.value) + else: + restart_module(self.value) + + return + # Ignore other mouse events. + return event + else: + # Ignore other events + return event + + class CLabel(Label): - def __init__(self, label): + def __init__(self, label, listTitle=False): super(Label, self).__init__(None, tab_stop=False) # Although this is a label, we don't want it to contribute to the layout # tab calculations, so leave internal `_label` value as None. self._text = label + self.listTitle = listTitle def set_layout(self, x, y, offset, w, h): # Do the usual layout work. then recalculate exact x/w values for the # rendered button. super(Label, self).set_layout(x, y, offset, w, h) - self._x += max(0, (self._w - self._offset - len(self._text)) // 2) + self._x += max(0, (self._w - self._offset - len(self._text)) // 2) if not self.listTitle else 0 self._w = min(self._w, len(self._text)) def update(self, frame_no): (colour, attr, bg) = self._frame.palette["title"] - colour = Screen.COLOUR_YELLOW + colour = Screen.COLOUR_YELLOW if not self.listTitle else colour self._frame.canvas.print_at( self._text, self._x, self._y, colour, attr, bg) @@ -116,33 +163,34 @@ class ListView(Frame): super(ListView, self).__init__(screen, screen.height, screen.width, - on_load=self._reload_list, hover_focus=True, reduce_cpu=True) self._list_view_run_queue = CListBox( "running", screen.height // 2, - [], name="LIST", on_change=self._on_pick) + [], name="LIST") self._list_view_idle_queue = CListBox( "idle", screen.height // 2, - [], name="LIST", on_change=self._on_pick) + [], name="LIST") self._list_view_noRunning = CListBox( "notRunning", - screen.height // 4, - [], name="LIST", on_change=self._on_pick) + screen.height // 5, + [], name="LIST") self._list_view_Log = CListBox( "logs", screen.height // 4, - [], name="LIST", on_change=self._on_pick) - self._list_view_Log.disabled = True + [], name="LIST") + #self._list_view_Log.disabled = True + #Running Queues layout = Layout([100]) self.add_layout(layout) text_rq = CLabel("Running Queues") layout.add_widget(text_rq) + layout.add_widget(CLabel(TABLES_TITLES["running"], listTitle=True)) layout.add_widget(self._list_view_run_queue) layout.add_widget(Divider()) @@ -150,36 +198,86 @@ class ListView(Frame): layout2 = Layout([1,1]) self.add_layout(layout2) text_iq = CLabel("Idling Queues") - layout2.add_widget(text_iq) + layout2.add_widget(text_iq, 0) + layout2.add_widget(CLabel(TABLES_TITLES["idle"], listTitle=True), 0) layout2.add_widget(self._list_view_idle_queue, 0) #Non Running Queues text_nq = CLabel("No Running Queues") layout2.add_widget(text_nq, 1) + layout2.add_widget(CLabel(TABLES_TITLES["notRunning"], listTitle=True), 1) layout2.add_widget(self._list_view_noRunning, 1) layout2.add_widget(Divider(), 1) #Log text_l = CLabel("Logs") layout2.add_widget(text_l, 1) + layout2.add_widget(CLabel(TABLES_TITLES["logs"], listTitle=True), 1) layout2.add_widget(self._list_view_Log, 1) self.fix() - self._on_pick() - - def _on_pick(self): - return - - def _reload_list(self): - self._list_view_run_queue = [(time.time(), 123)] @staticmethod def _quit(): raise StopApplication("User pressed quit") +class Confirm(Frame): + def __init__(self, screen): + super(Confirm, self).__init__(screen, + screen.height * 1 // 8, + screen.width * 1 // 4, + hover_focus=True, + on_load=self._setValue, + title="Confirm action", + reduce_cpu=True) + + # Create the form for displaying the list of contacts. + layout = Layout([100], fill_frame=True) + self.add_layout(layout) + self.label = CLabel("Confirm {} module {} {}?") + layout.add_widget(self.label) + layout2 = Layout([1,1]) + self.add_layout(layout2) + layout2.add_widget(Button("Ok", self._ok), 0) + layout2.add_widget(Button("Cancel", self._cancel), 1) + + self.fix() + + def _ok(self): + global current_selected_value, current_selected_queue + if current_selected_queue in ["running", "idle"]: + kill_module(PID_NAME_DICO[current_selected_value], current_selected_value) + else: + restart_module(current_selected_value) + current_selected_value = 0 + current_selected_value = 0 + self.label._text = "Confirm {} module {} {}?" + raise NextScene("dashboard") + + def _cancel(self): + global current_selected_value + current_selected_value = 0 + self.label._text = "Confirm {} module {} {}?" + raise NextScene("dashboard") + + def _setValue(self): + global current_selected_value, current_selected_queue + if current_selected_queue in ["running", "idle"]: + action = "KILL" + modulename = PID_NAME_DICO[current_selected_value] + pid = current_selected_value + else: + action = "START" + modulename = current_selected_value + pid = "" + self.label._text = self.label._text.format(action, modulename, pid) + + def demo(screen): - LV = ListView(screen) + dashboard = ListView(screen) + confirm = Confirm(screen) scenes = [ - Scene([LV], -1) + Scene([dashboard], -1, name="dashboard"), + Scene([confirm], -1, name="confirm"), ] # screen.play(scenes) @@ -187,14 +285,16 @@ def demo(screen): time_cooldown = time.time() global TABLES while True: - LV._update(None) - screen.draw_next_frame() if time.time() - time_cooldown > args.refresh: + cleanRedis() for key, val in fetchQueueData().iteritems(): TABLES[key] = val - TABLES["logs"] = format_logs(printarrayGlob) - screen.refresh() + TABLES["logs"] = format_string(printarrayGlob, TABLES_PADDING["logs"]) + if current_selected_value == 0: + dashboard._update(None) + screen.refresh() time_cooldown = time.time() + screen.draw_next_frame() time.sleep(0.02) @@ -211,7 +311,7 @@ def clearRedisModuleInfo(): for k in server.keys("MODULE_*"): server.delete(k) inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, "*", "-", "Cleared redis module info"]) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], "*", "-", "Cleared redis module info"], 0)) printarrayGlob.pop() def cleanRedis(): @@ -226,21 +326,29 @@ def cleanRedis(): flag_pid_valid = True if not flag_pid_valid: - print flag_pid_valid, 'cleaning', pid, 'in', k + #print flag_pid_valid, 'cleaning', pid, 'in', k server.srem(k, pid) inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, moduleName, pid, "Cleared invalid pid in " + k]) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], moduleName, pid, "Cleared invalid pid in " + k], 0)) printarrayGlob.pop() #time.sleep(5) +def restart_module(module): + p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, "?", "Restarted"], 0)) + printarrayGlob.pop() + + def kill_module(module, pid): - print '' - print '-> trying to kill module:', module + #print '' + #print '-> trying to kill module:', module if pid is None: - print 'pid was None' - printarrayGlob.insert(1, [0, module, pid, "PID was None"]) + #print 'pid was None' + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "PID was None"], 0)) printarrayGlob.pop() pid = getPid(module) else: #Verify that the pid is at least in redis @@ -251,54 +359,48 @@ def kill_module(module, pid): if pid is not None: try: #os.kill(pid, signal.SIGUSR1) - p = psutil.Process(pid) + p = psutil.Process(int(pid)) p.terminate() - except Exception: - print pid, 'already killed' + except Exception as e: + #print pid, 'already killed' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, module, pid, "Already killed"]) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Already killed"], 0)) printarrayGlob.pop() return - time.sleep(1) - if getPid(module) is None: - print module, 'has been killed' - print 'restarting', module, '...' - p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + time.sleep(0.2) + if not p.is_running(): + #print module, 'has been killed' + #print 'restarting', module, '...' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, module, pid, "Killed"]) - printarrayGlob.insert(1, [inst_time, module, "?", "Restarted"]) - printarrayGlob.pop() + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) printarrayGlob.pop() + restart_module(module) else: - print 'killing failed, retrying...' + #print 'killing failed, retrying...' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, module, pid, "Killing #1 failed."]) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing #1 failed."], 0)) printarrayGlob.pop() - time.sleep(1) #os.kill(pid, signal.SIGUSR1) - p = psutil.Process(pid) + #time.sleep(1) p.terminate() - time.sleep(1) - if getPid(module) is None: - print module, 'has been killed' - print 'restarting', module, '...' - p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + if not p.is_running(): + #print module, 'has been killed' + #print 'restarting', module, '...' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, module, pid, "Killed"]) - printarrayGlob.insert(1, [inst_time, module, "?", "Restarted"]) - printarrayGlob.pop() + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) printarrayGlob.pop() + restart_module(module) else: - print 'killing failed!' + #print 'killing failed!' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, module, pid, "Killing failed!"]) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing failed!"], 0)) printarrayGlob.pop() else: - print 'Module does not exist' + #print 'Module does not exist' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(1, [inst_time, module, pid, "Killing failed, module not found"]) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing failed, module not found"], 0)) printarrayGlob.pop() #time.sleep(5) cleanRedis() @@ -347,112 +449,68 @@ def fetchQueueData(): cpu_percent = CPU_OBJECT_TABLE[int(moduleNum)].cpu_percent() CPU_TABLE[moduleNum].insert(1, cpu_percent) cpu_avg = sum(CPU_TABLE[moduleNum])/len(CPU_TABLE[moduleNum]) + if len(CPU_TABLE[moduleNum]) > args.refresh*10: + CPU_TABLE[moduleNum].pop() + mem_percent = CPU_OBJECT_TABLE[int(moduleNum)].memory_percent() except KeyError: - CPU_OBJECT_TABLE[int(moduleNum)] = psutil.Process(int(moduleNum)) - cpu_percent = CPU_OBJECT_TABLE[int(moduleNum)].cpu_percent() - CPU_TABLE[moduleNum] = [] - cpu_avg = cpu_percent - if len(CPU_TABLE[moduleNum]) > args.refresh*10: - CPU_TABLE[moduleNum].pop() - mem_percent = CPU_OBJECT_TABLE[int(moduleNum)].memory_percent() + try: + CPU_OBJECT_TABLE[int(moduleNum)] = psutil.Process(int(moduleNum)) + cpu_percent = CPU_OBJECT_TABLE[int(moduleNum)].cpu_percent() + CPU_TABLE[moduleNum] = [] + cpu_avg = cpu_percent + mem_percent = CPU_OBJECT_TABLE[int(moduleNum)].memory_percent() + except psutil.NoSuchProcess: + cpu_percent = 0 + cpu_avg = cpu_percent + mem_percent = 0 array_module_type.append( ([" [ ]", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path), "{0:.2f}".format(cpu_percent)+"%", "{0:.2f}".format(mem_percent)+"%", "{0:.2f}".format(cpu_avg)+"%"], moduleNum) ) else: printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) + PID_NAME_DICO[moduleNum] = str(queue) array_module_type.sort(lambda x,y: cmp(x[0][4], y[0][4]), reverse=True) for e in array_module_type: printarray1.append(e) for curr_queue in module_file_array: if curr_queue not in all_queue: - printarray3.append( ([" ", curr_queue, "Not running"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "Not running by default"], curr_queue) ) else: if len(list(server.smembers('MODULE_TYPE_'+curr_queue))) == 0: if curr_queue not in no_info_modules: no_info_modules[curr_queue] = int(time.time()) - printarray3.append( ([" ", curr_queue, "No data"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "No data"], curr_queue) ) else: #If no info since long time, try to kill if args.autokill == 1: if int(time.time()) - no_info_modules[curr_queue] > args.treshold: kill_module(curr_queue, None) no_info_modules[curr_queue] = int(time.time()) - printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], curr_queue) ) else: - printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], len(printarray3)+1) ) + printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], curr_queue) ) - ## FIXME To add: - ## Button KILL Process using Curses printarray1.sort(key=lambda x: x[0], reverse=False) printarray2.sort(key=lambda x: x[0], reverse=False) - printarray1.insert(0,([" Action", "Queue name", "PID", "#", "S Time", "R Time", "Processed element", "CPU %", "Mem %", "Avg CPU%"], 0) ) - printarray2.insert(0,([" Action", "Queue", "PID", "Idle Time", "Last paste hash"], 0) ) - printarray3.insert(0,([" Action", "Queue", "State"], 0) ) - padding_row = [12, 23, 8, - 8, 23, 10, - 55, 11, 11, 12] - printstring1 = [] - for row in printarray1: - the_array = row[0] - the_pid = row[1] - text="" - for ite, elem in enumerate(the_array): - if len(elem) > padding_row[ite]: - text += "*" + elem[-padding_row[ite]+6:] - padd_off = " "*5 - else: - text += elem - padd_off = " "*0 - text += (padding_row[ite] - len(elem))*" " + padd_off - printstring1.append( (text, the_pid) ) - - padding_row = [9, 23, 8, - 12, 50] - printstring2 = [] - for row in printarray2: - the_array = row[0] - the_pid = row[1] - text="" - for ite, elem in enumerate(the_array): - if len(elem) > padding_row[ite]: - text += "*" + elem[-padding_row[ite]+6:] - padd_off = " "*5 - else: - text += elem - padd_off = " "*0 - text += (padding_row[ite] - len(elem))*" " + padd_off - printstring2.append( (text, the_pid) ) - - padding_row = [9, 23, 35] - printstring3 = [] - for row in printarray3: - the_array = row[0] - the_pid = row[1] - text="" - for ite, elem in enumerate(the_array): - if len(elem) > padding_row[ite]: - text += "*" + elem[-padding_row[ite]+6:] - padd_off = " "*5 - else: - text += elem - padd_off = " "*0 - text += (padding_row[ite] - len(elem))*" " + padd_off - printstring3.append( (text, the_pid) ) + printstring1 = format_string(printarray1, TABLES_PADDING["running"]) + printstring2 = format_string(printarray2, TABLES_PADDING["idle"]) + printstring3 = format_string(printarray3, TABLES_PADDING["notRunning"]) return {"running": printstring1, "idle": printstring2, "notRunning": printstring3} -def format_logs(logs): - printstring4 = [] - padding_row = [12, 23, 8, 50] - text="" - - for row in logs: +def format_string(tab, padding_row): + printstring = [] + for row in tab: if row is None: continue - for ite, elem in enumerate(row): + the_array = row[0] + the_pid = row[1] + + text="" + for ite, elem in enumerate(the_array): if len(elem) > padding_row[ite]: text += "*" + elem[-padding_row[ite]+6:] padd_off = " "*5 @@ -460,15 +518,15 @@ def format_logs(logs): text += elem padd_off = " "*0 text += (padding_row[ite] - len(elem))*" " + padd_off - printstring4.append( (text, len(printstring4)+1) ) - return printstring4 + printstring.append( (text, the_pid) ) + return printstring if __name__ == "__main__": parser = argparse.ArgumentParser(description='Show info concerning running modules and log suspected stucked modules. May be use to automatically kill and restart stucked one.') - parser.add_argument('-r', '--refresh', type=int, required=False, default=2, help='Refresh rate') + parser.add_argument('-r', '--refresh', type=int, required=False, default=5, help='Refresh rate') parser.add_argument('-t', '--treshold', type=int, required=False, default=60*10*1, help='Refresh rate') parser.add_argument('-k', '--autokill', type=int, required=False, default=0, help='Enable auto kill option (1 for TRUE, anything else for FALSE)') parser.add_argument('-c', '--clear', type=int, required=False, default=0, help='Clear the current module information (Used to clear data from old launched modules)') @@ -502,8 +560,13 @@ if __name__ == "__main__": for line in module_file: module_file_array.add(line[:-1]) - #cleanRedis() + cleanRedis() + + TABLES_TITLES["running"] = format_string([([" Action", "Queue name", "PID", "#", "S Time", "R Time", "Processed element", "CPU %", "Mem %", "Avg CPU%"],0)], TABLES_PADDING["running"])[0][0] + TABLES_TITLES["idle"] = format_string([([" Action", "Queue", "PID", "Idle Time", "Last paste hash"],0)], TABLES_PADDING["idle"])[0][0] + TABLES_TITLES["notRunning"] = format_string([([" Action", "Queue", "State"],0)], TABLES_PADDING["notRunning"])[0][0] + TABLES_TITLES["logs"] = format_string([(["Time", "Module", "PID", "Info"],0)], TABLES_PADDING["logs"])[0][0] while True: From ea423fde0f7ab8cc2560c8996c52fe88555f7eed Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 17 Jan 2017 15:58:16 +0100 Subject: [PATCH 06/23] Added requirement, better behaviors and confirmation box --- bin/LAUNCH.sh | 2 +- bin/ModulesInformationV2.py | 124 ++++++++++++++++++++++++++++++------ 2 files changed, 105 insertions(+), 21 deletions(-) diff --git a/bin/LAUNCH.sh b/bin/LAUNCH.sh index 6db9191c..e082b7f0 100755 --- a/bin/LAUNCH.sh +++ b/bin/LAUNCH.sh @@ -117,7 +117,7 @@ function launching_scripts { echo -e $GREEN"\t* Launching ZMQ scripts"$DEFAULT - screen -S "Script" -X screen -t "ModuleInformation" bash -c './ModuleInformation.py -k 0 -c 1; read x' + screen -S "Script" -X screen -t "ModuleInformation" bash -c './ModulesInformationV2.py -k 0 -c 1; read x' sleep 0.1 screen -S "Script" -X screen -t "Mixer" bash -c './Mixer.py; read x' sleep 0.1 diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index ca84636d..8cb9bd4f 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -29,6 +29,8 @@ lastTimeKillCommand = {} current_selected_value = 0 current_selected_queue = "" +current_selected_action = "" +current_selected_action = 0 PID_NAME_DICO = {} @@ -108,7 +110,8 @@ class CListBox(ListBox): global current_selected_value, current_selected_queue current_selected_value = self.value current_selected_queue = self.queue_name - raise NextScene("confirm") + self._frame.save() + raise NextScene("action_choice") else: # Ignore any other key press. return event @@ -125,7 +128,7 @@ class CListBox(ListBox): # If clicked on button , kill the queue if self._x+2 <= new_event.x < self._x+4: if self.queue_name in ["running", "idle"]: - kill_module(PID_NAME_DICO[self.value], self.value) + kill_module(PID_NAME_DICO[int(self.value)], self.value) else: restart_module(self.value) @@ -232,7 +235,8 @@ class Confirm(Frame): # Create the form for displaying the list of contacts. layout = Layout([100], fill_frame=True) self.add_layout(layout) - self.label = CLabel("Confirm {} module {} {}?") + self.label = CLabel("{} module {} {}?") + layout.add_widget(Label(" ")) layout.add_widget(self.label) layout2 = Layout([1,1]) self.add_layout(layout2) @@ -242,41 +246,119 @@ class Confirm(Frame): self.fix() def _ok(self): - global current_selected_value, current_selected_queue - if current_selected_queue in ["running", "idle"]: - kill_module(PID_NAME_DICO[current_selected_value], current_selected_value) + global current_selected_value, current_selected_queue, current_selected_action, current_selected_amount + if current_selected_action == "KILL": + kill_module(PID_NAME_DICO[int(current_selected_value)], current_selected_value) else: - restart_module(current_selected_value) + count = int(current_selected_amount) + if current_selected_queue in ["running", "idle"]: + restart_module(PID_NAME_DICO[int(current_selected_value)], count) + else: + restart_module(current_selected_value, count) + current_selected_value = 0 - current_selected_value = 0 - self.label._text = "Confirm {} module {} {}?" + current_selected_amount = 0 + current_selected_action = "" + self.label._text = "{} module {} {}?" + self.save() raise NextScene("dashboard") def _cancel(self): global current_selected_value current_selected_value = 0 - self.label._text = "Confirm {} module {} {}?" + current_selected_amount = 0 + current_selected_action = "" + self.label._text = "{} module {} {}?" + self.save() raise NextScene("dashboard") def _setValue(self): - global current_selected_value, current_selected_queue + global current_selected_value, current_selected_queue, current_selected_action, current_selected_amount if current_selected_queue in ["running", "idle"]: - action = "KILL" - modulename = PID_NAME_DICO[current_selected_value] + action = current_selected_action if current_selected_action == "KILL" else current_selected_action +" "+ str(current_selected_amount) + "x" + modulename = PID_NAME_DICO[int(current_selected_value)] pid = current_selected_value else: - action = "START" + action = current_selected_action + " " + str(current_selected_amount) + "x" modulename = current_selected_value pid = "" self.label._text = self.label._text.format(action, modulename, pid) +class Action_choice(Frame): + def __init__(self, screen): + super(Action_choice, self).__init__(screen, + screen.height * 1 // 8, + screen.width * 1 // 2, + hover_focus=True, + on_load=self._setValue, + title="Confirm action", + reduce_cpu=True) + # Create the form for displaying the list of contacts. + layout = Layout([100], fill_frame=True) + self.add_layout(layout) + self.label = CLabel("Choose action on module {} {}") + layout.add_widget(self.label) + layout2 = Layout([1,1,1]) + self.add_layout(layout2) + layout2.add_widget(Button("Cancel", self._cancel), 0) + self._killBtn = Button("KILL", self._kill) + layout2.add_widget(self._killBtn, 1) + layout2.add_widget(Button("START", self._start), 2) + layout3 = Layout([1,1,1]) + self.add_layout(layout3) + self.textEdit = Text("Amount", "amount") + layout3.add_widget(self.textEdit, 2) + + self.fix() + + def _kill(self): + global current_selected_action + current_selected_action = "KILL" + self.label._text = "Choose action on module {} {}" + self.save() + raise NextScene("confirm") + + def _start(self): + global current_selected_action, current_selected_amount + current_selected_action = "START" + try: + count = int(self.textEdit.value) + count = count if count < 20 else 1 + except Exception: + count = 1 + current_selected_amount = count + self.label._text = "Choose action on module {} {}" + self.save() + raise NextScene("confirm") + + + def _cancel(self): + global current_selected_value + current_selected_value = 0 + self.label._text = "Choose action on module {} {}" + self.save() + raise NextScene("dashboard") + + def _setValue(self): + self._killBtn.disabled = False + global current_selected_value, current_selected_queue + if current_selected_queue in ["running", "idle"]: + modulename = PID_NAME_DICO[int(current_selected_value)] + pid = current_selected_value + else: + self._killBtn.disabled = True + modulename = current_selected_value + pid = "" + self.label._text = self.label._text.format(modulename, pid) def demo(screen): dashboard = ListView(screen) confirm = Confirm(screen) + action_choice = Action_choice(screen) scenes = [ Scene([dashboard], -1, name="dashboard"), + Scene([action_choice], -1, name="action_choice"), Scene([confirm], -1, name="confirm"), ] @@ -333,10 +415,12 @@ def cleanRedis(): printarrayGlob.pop() #time.sleep(5) -def restart_module(module): - p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) +def restart_module(module, count=1): + for i in range(count): + p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + time.sleep(0.2) inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, "?", "Restarted"], 0)) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, "?", "Restarted " + str(count) + "x"], 0)) printarrayGlob.pop() @@ -374,7 +458,7 @@ def kill_module(module, pid): inst_time = datetime.datetime.fromtimestamp(int(time.time())) printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) printarrayGlob.pop() - restart_module(module) + #restart_module(module) else: #print 'killing failed, retrying...' @@ -391,7 +475,7 @@ def kill_module(module, pid): inst_time = datetime.datetime.fromtimestamp(int(time.time())) printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) printarrayGlob.pop() - restart_module(module) + #restart_module(module) else: #print 'killing failed!' inst_time = datetime.datetime.fromtimestamp(int(time.time())) @@ -468,7 +552,7 @@ def fetchQueueData(): else: printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) - PID_NAME_DICO[moduleNum] = str(queue) + PID_NAME_DICO[int(moduleNum)] = str(queue) array_module_type.sort(lambda x,y: cmp(x[0][4], y[0][4]), reverse=True) for e in array_module_type: printarray1.append(e) From d520c45a15c64881439252bb5e4c6849b6abc7a7 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 14 Feb 2017 16:05:59 +0100 Subject: [PATCH 07/23] Added support of display of the last paste processed by a module --- bin/Helper.py | 3 ++ bin/ModulesInformationV2.py | 102 ++++++++++++++++++++++++++++++++++-- doc/module-data-flow.png | Bin 173014 -> 186386 bytes 3 files changed, 100 insertions(+), 5 deletions(-) diff --git a/bin/Helper.py b/bin/Helper.py index 1429904d..8d9caf3b 100755 --- a/bin/Helper.py +++ b/bin/Helper.py @@ -161,7 +161,9 @@ class Process(object): else: path = "?" value = str(timestamp) + ", " + path + complete_path = os.environ['AIL_HOME'] + "/PASTES/" + path self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum), value) + self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum) + "_PATH", complete_path) self.r_temp.sadd("MODULE_TYPE_"+self.subscriber_name, str(self.moduleNum)) return message @@ -169,6 +171,7 @@ class Process(object): path = "?" value = str(timestamp) + ", " + path self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum), value) + self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum) + "_PATH", complete_path) self.r_temp.sadd("MODULE_TYPE_"+self.subscriber_name, str(self.moduleNum)) return message diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 8cb9bd4f..930d0075 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -16,6 +16,7 @@ import json import redis import psutil from subprocess import PIPE, Popen +from packages import Paste # CONFIG VARIABLES kill_retry_threshold = 60 #1m @@ -42,6 +43,8 @@ QUEUE_STATUS = {} CPU_TABLE = {} CPU_OBJECT_TABLE = {} +COMPLETE_PASTE_PATH_PER_PID = {} + class CListBox(ListBox): def __init__(self, queue_name, *args, **kwargs): @@ -299,16 +302,17 @@ class Action_choice(Frame): self.add_layout(layout) self.label = CLabel("Choose action on module {} {}") layout.add_widget(self.label) - layout2 = Layout([1,1,1]) + layout2 = Layout([1,1,1,1]) self.add_layout(layout2) layout2.add_widget(Button("Cancel", self._cancel), 0) + layout2.add_widget(Button("Show current paste", self._showpaste), 1) self._killBtn = Button("KILL", self._kill) - layout2.add_widget(self._killBtn, 1) - layout2.add_widget(Button("START", self._start), 2) - layout3 = Layout([1,1,1]) + layout2.add_widget(self._killBtn, 2) + layout2.add_widget(Button("START", self._start), 3) + layout3 = Layout([1,1,1,1]) self.add_layout(layout3) self.textEdit = Text("Amount", "amount") - layout3.add_widget(self.textEdit, 2) + layout3.add_widget(self.textEdit, 3) self.fix() @@ -340,6 +344,11 @@ class Action_choice(Frame): self.save() raise NextScene("dashboard") + def _showpaste(self): + self.label._text = "Choose action on module {} {}" + self.save() + raise NextScene("show_paste") + def _setValue(self): self._killBtn.disabled = False global current_selected_value, current_selected_queue @@ -352,14 +361,95 @@ class Action_choice(Frame): pid = "" self.label._text = self.label._text.format(modulename, pid) +class Show_paste(Frame): + def __init__(self, screen): + super(Show_paste, self).__init__(screen, + screen.height, + screen.width, + hover_focus=True, + on_load=self._setValue, + title="Show current paste", + reduce_cpu=True) + + # Create the form for displaying the list of contacts. + layout = Layout([100], fill_frame=True) + self.layout = layout + self.add_layout(layout) + + self.label_list = [] + self.num_label = 41 + for i in range(self.num_label): + self.label_list += [Label("THE PASTE CONTENT " + str(i))] + layout.add_widget(self.label_list[i]) + + layout2 = Layout([100]) + self.add_layout(layout2) + layout2.add_widget(Button("Ok", self._ok), 0) + self.fix() + + def _ok(self): + global current_selected_value, current_selected_queue, current_selected_action, current_selected_amount + current_selected_value = 0 + current_selected_amount = 0 + current_selected_action = "" + self.save() + raise NextScene("dashboard") + + def _setValue(self): + try: + #Verify that the module have a paste + if COMPLETE_PASTE_PATH_PER_PID[current_selected_value] is None: + self.label_list[0]._text = "No paste for this module" + for i in range(1,self.num_label): + self.label_list[i]._text = "" + return + + paste = Paste.Paste(COMPLETE_PASTE_PATH_PER_PID[current_selected_value]) + old_content = paste.get_p_content()[0:4000] + + #Replace unprintable char by ? + content = "" + for i, c in enumerate(old_content): + if ord(c) > 127: + content += '?' + else: + content += c + + #Print in the correct label + to_print = "" + i = 0 + for line in content.split("\n"): + if i==self.num_label: + break + self.label_list[i]._text = str(i) + ". " + line.replace("\r","") + i += 1 + + while iU&+^>*mdEUG)=3&mVV3z{?BJj?n08U({e1MS^U*)X2WyB-}(!M@;6=>;b$n;*B5%t@bOym`2$mz zBJXt~<4jun7C7aP91-AoHwcH%6AQXs(G@drr+MS@)*j*}lQlGox)1R5F16$omG7th zBgjz|Lftrc3Qz3gr+sRdKJbzDNoC+<(4RLQZ~Xrk|DP96ShyiGb(1Qr_6)p&%shge z+FQ|lyG@AdFWB0~=^{JVB6iacSGJI3rWtd5O;&k*xsT_qI|?iCD#5Aq$TO?SzJ8rj z(o<|OM_*nZ_9Vo-D>h9NJE@5ihd}zHAZNhbL70+<0r~ERtHy4DMKC3KsJJLpNoET6 zF3a@(%S6_@zYxZX_Vn+WH1F`Xxa}@Cs@;+9!5hu^^;W%|F4{V)Sx}zR*Sk?5U!Hl= zVVL4lZK%OV_UxJ1c!fz>T6ABK5zZ0l0Pw%|Jm?m^651lPgIn) z96#!bg~U{?)$e@NXlm=5?f;(wX48L!#Rzk^eL**)_tF<#u6$oUy zxFl!bke|69uPL8-7akik>!y*v-GP12$5Wwrv2V3KIVrWMXg?&>VgGHaWKNBL9YCVG zkTp9>-Xr~1!!1}9XQ}JO!!Qp|B|m~toY9PiRCS3y=0H30Jt;#3 z3W2ptK8$7#M_xIE%B&I zi1{T<_Hl@XIxplPICSr5)(OQLRvclLwI@`pFn0u*3fvD=WW!6bAcqkA*C>esYpncVS&wR}QMiJ_(2K1lCBG+{o#^l8j* zJSGJfWJ)Q9geS|kPiLIFyxN*9{!Uv#%$qcT;H#9I>PyEN?1LP){WB)rfw#m@v}{%p zm`bLTioH*`h3cKmOGVj)Nf}-}e{%`XTbUvIA?Lzr5$^k~g2?6#8&Vu4TBurC6B>5o zrIa1Jf$e18f=0MJH;ZCAjtR`p_h)v?)-Wt($6tb&lKgrE*^=qSyE;!mabkXsoh>pn zIsg%4qn*<@JJ8#0vxc{Z@=$8J_(7On@pXM3U-r1ljY=!hMNIY~$VVJ)1Hw`Zde}fk zWvG(;V+LO9jCsA@^F^)G3loGKUiHdi91g@~1WmElPBlE6t%3-fnryw|gt0b_#NG6a zxN{H-0?PRT5H2Lhuyjojt15cykncX>4Vv7h=_~v z8+nW?;K10ROkM7h#s&~5t;{y*VnLKd%2ufI2Hb5N&sQR%K^}`G%qsKH>)j&nL`3*4 ze6=B=@Ry^gE%1>0?db3R^-ZmmSX3Nj5 z=1GJ>=1cW+FdQu9s4(6~lj#*Nwh)W8Mc;k-&Lkr#Y6owL)Y~mS`ic{yzC7!g(x*XQ z8M4X|<*6s%JqF#QFxx$3=sg!L6#rbTCXGsG&w)!)y>YXWpSCtfM{Sd|b$88*C}V9I-`aSlvMzB3db+hI z6F%Svwu17Yys7@8o6FA#(=zv@vePRx+(_53qUK2VoaMmn1@AM$kR&+-tlnYQgK_;) zVpYrg7DDubX4D}58yDDEA}u7O4emBsO{`pGR56zj_HG^P#+SHVkX^0N4CF3byo9?y z7`&ZonVH=vYFag#mtz)Px%wt9V4}x4O-_Zfxp5+bDgEd8utJWUv%TMHIiYbI8KG2g z-nT-$iyK+uxj*&h z(~3o}x-1iSTQ0^aS0{^l6Gf5hrcv=r%LG|`TJcOktJM7cn0P<^{AE6*Wp&if)^Kq6 z5ZQu63PF0AM^$doWAD}^?zqky`X|q2ioY9ta;@)9_I~xCbIvGwWg8(GO=bfZF;aETk}vXu6o%? z!z}REL{3~;;rYyp^w2^>p1VJJ*MfI+fR1Nltbdijzx5Cz!GO&YaG4t<+>X ztamePA5phnRDKi^bdj4Do&Je?9L>h{yoFG>V8kA7TXjM9Q75-~!CgJl zx;k$`6feHw%d}^FIXoZUHjy*n>qn~1Pu6$Zd6J}UBbqs1Bb73TXol&BaWx5 z3bSW0lx;f5xyv*d_;hC=t6Q1*;@$xr=e%h7~fQKL_bHA=!P14UEzCMiP5BiqIQ70~6o=nuc-j7gJ% z3wq?az|7WWxbAQ+XAzW_vQjX;8=KuCH9*J5%g282rGFqaN+BRRID6pcb6YdlM@3Zu zYd<5*1N4gg`wB7JYzw}2OiI-=(X8fpxK`HG$_|!&W&vI1!?sY6>a^95%A^}YGGr9z zY+jRS*GLRhS%t$_MXm1EL`O}sCCri!ONQ)&^uPWSIoLM0l4Y+FB4CA=W#@cx+Z3Ov zS7Y`~JhqgJ(4z7}Z^4YYK@Yj>cvsUR#od_I99W0Bqc7)Lo|*T3+>m$og3NKcrh7xl zAW~3lxf9ajB#Q+%(MCLBHg3&E$f*L3@<7z(Nu7*U^`84>a{RF6&0&x0B%_LZMJ;AT z$$%+F?2<1Zz@%xS)Ll#Fwd}j=D+E<~V)t^6eyeldwqBAK}=y;v;TP` zCkG$1Q-kMW9*VDA{CGKSdy&Fhq8u|={PFxTc@LtUPK$D@&M>9W?!~O|GO~@Lv^g~` z(m24W%^RV)hELxr<44%enjd`Sr4XY4rz97cc{oWgWX_+?`tIEs-)DFvYRY zELhtBqn8ns)%uK|j7o}|zup)mc!}Op@=;~d5Shvhpbys79CmllPm|efEW(Dtk>*1Q zvkI3tr?HwwRX(j>k(rAdtTF~QHBIx`-4}LO;2h_ZSgS2SQ^4)XSXn^k}5@c^a4yW1@}SD-C8y&m^=Vx zsMRQHDkNMY^5OmKG#Zp8KgnCXM3njXm<>_~5s&ka6Mt+{ZLN`h@p8 zLta_CV9?FwgCD`N5R6;B9x{X?@_3Ce?5UxVB#%>|m@MTdL1vvdSVxlqjoA4vj>*nw ziC=6b^r1E08dJCZ=-?hesc5y-T-uyiMt))BY5AIAkpIX-f7Yej-KTnTkZ>gDv7<1U z|I%LYdQ?Up$L1)QKbVg}10>WJopaDR0PJK|n88c)kcUwz3(4U(z|`RlwP^SA6gu1#tfo-sIQHghZ7-`DM1 z1w#L{35*F+>%v0|x!sL6ZuMWVoUOX^JJ35b8s~R0*>6AHSiOB{x6uZuU))=y zcNF9s)q+TqYUJP!9@}{ETRS@pW42q-Er+OA6qTL*MfivW)hDgepkYDpC(MZ(HF1OF zB&(%e1EK}u${`aIR%%fd`&_f9m*Co_nNoE{c0={L9wexq2GH$>XNM97{h@BeHe^LW z#^v8Vd`^g*Fc*+O6`a;zs*A5@rML<>Sryd^ypx{@3@!ei+i8O-t>$8-Zw1HCklS zHsPr~vP_1LP7ra%;C2sNTDfYU8z^KPcv@_j{N@#;`o=UtIe70W(Mf%B@c`tU91Unr zVT6!%>paxjlq`<&zag=nVl|Z&{H$GS6lVF+!=u<3V}|MLo6HHY)s(R50i^|&L!Iv~ zgI`%vCm74at@XNYtW2Res?@uQmLdn^2{m@ z_U^f`pf{a0;^DDY6Ul$BLfJ{#5q~_pOQA5qc7bv z5%FQ-yBaCG%!$3|bAQc5c|P=Io;7@|ZT{Sc(Ejx45jIKdRnH!)Z%Wt=MWm~*;X?g< zv5&AGs39-x2?tV~l#j|Xy?rnRNYx+&5E_8sNDhQ{mRw<(gjF#-Mi^*yGm6j~rm)R6 znN)kihW&p3Vw3W?)2aAi*Va8E^LmG|EtTp(y>k!GHdBeD3(o6&Q7wFw=qI$ zZ_`X$tWqkj<=4!rA5k8UZ89g545R5FwTsd<-P3=FGe|KLO$HFi|7Xtruld5sM;_D? z2$GvUJUrZ-sOUS_)?y>6Dd9CgIOxAVWWOH4sjP(L)8im*0Tdp7n=jO4$h#` z0R%G3PxGYX@~H`)#)s(XWqh&<3M57Sr?ez(nqw}4fEdL7^v^WJm!f{7ymYNkpFWNE z?0f?arg&2V*V zYilLxL(bsr)<+0nnpB}t*0j_lDA-;)4kclI>#WfI++ng{b}5&h|MXpxdrW}e8uVia zuY&87b;k&-nN-&Mrk5ua%z;+IlQexGWSC)&PmdwJ(|h?wsH%Xql?f^kTU?_ zT+2QEN4cS<)~FTfSg2I5c3^?Fc@nBx4W$OP`3OBBBLCYv5E<`nqwBYszB%?>5XrO3 zmEQB#y~l1UgLx{urxPY9QC<+`qhCnk-Un%as5U|+qQ!U&k6$S$4HVPbIuDg=Zy-Ij zF_bzFT^~s2GUy?eH@+`hi6atU5Nr5P^XeKGNUBC&xf_Os85vbYiL)1l&ScnLH&T@M zz)4nTa!Zx*gA7E>d=FM@rHy!@{rHBR;it_D?9IQczaEdWe*5{TY}}2-uzSLqZ>OO} zTr307HjyMb$+A>#q>r5Y+x?J2KAJ`c)CzxbFlds+=TzF z)pc9-#L}6V(0nDJ3m012WN}0AP+XbkJV}VvA@sFtiHV(#%w%LmDAp-S-UJ3RPu73- zl8)T!mzjr_x67Kkgqp6Hz?#K88+4Q0MsyW1B6N_T)s}@v9#n!7a-0)x$UrFH6uc8P z{@Qc_ZolL0>bw=(vV;54(R~mAq#DiXcr+*07zq8|O$X5?qr+eP1)2!Cnn@-w5au(X z7JDmO^U;#CuTJLqmsRuT=4Ezmm0S7r0v*i?DL*P7QQn}$cN=vQeP@bl%zcOJ@mqn? zSJ%zS6MdUoD9%C8I!9Y;D2Bc~<3WrVL`9IMWwkU_|L4$BJF$WM&E-;JLVV!XY;+HK z=R0MG#M@Ry_?Gh}GnG%16cxDb&LBUZKEsaAU$35;p6~OlJMr|hkXu`4wPEx=h}dV3 z!g8vpA;x2(f?Ib55sp<3*6V5dnur_W0e8qQn{CUrRbJK+yBsCMvLO>KEu^}T{3Z_H zaZxWkD#5GIwau#K<_~nVGHjPvXJeH5J^8iFWcN7DSTDNO${OZUNkUdkE<7?lT z-yBgB(0Zsoz_Vl1o1AG@vdb}i-9OAGit&mu><|za&6LhP-8$d0!r+8|H{VOF7OR-e zGZNWul_~JU{w~_4r{98qXNo3jw)qUJ<=9J~FPrA0fD&za%6kD{C8p`thLItfo3A3M z(%o#B(QC<9J+{0msT|Y8?)6B7LN4hs8>q1}s9ygdN(fm9Fll|#A-SBBR;DyU$gbei-_f`zTiwDKsVPpVTqsl zNl&}X5Y}2}zZ4V*D%VWzG;cRG?`&=3TLp*7t!$fxw#i8a@VJ0^F3klCc--)5NRaR! zD+FS_ak^cR_}(bhc4gAkjcn9)j!grxL;6i=d=t2y(PAd!y{;(J+au}YPM#_-Z{4A{ z8TZe*DqF9#{<05F3GO~ywfl316ha}Z=?1PLmp||FO{i|`HHR7P@@jF!qX(QTMS|IO zlV|g{s@wd>?U!GiPE0KE{~a>LqG-b!@H<&MvU*O|w0!2qdQm$zkdksnHIkD|?Ayf3w6E5IJ-Z z@`#o*)*k*OneA?^w!&~G9`vPwX}!kBFq}MNOKj&uzvDx1 zJk##;#qX>`(XG$noDHM(ioyl+<%%WvC$Qn=@nZ-cI)8)u$&3$z#hd+T`zuXWcOr6z zK-~C3{>11%c>^OtMfsplC2qNqUv|SBV2l$JyX0u)7FF|&dmN?2?B??A@YyTg(X+*E z0ev1h{%&}*GZw%5okhT|sJU{icxQ6P99vXFwnh*{*9TEYPV-qe4sYAw8b55dMk~dc zWLL>$8fG=5<&8>?W&bY~ zW=(|&>W<6Xz`s=u&svv#fU8j>(KJYAEx|0vrQx8v6;7yXt5;_PG)Bf{TB>=w7v1cEk(!J-P zLm#aXTmo;C6S*SLAZrPo31_;q5AuqJ>5zyl0QH^KgVm)n&#h55@_|W(avNDpxPhvA zPuqUoq)r27|NW3z2rY&?l&L`{s;zg+{FgG0OUG&UJ71ZP9f7xr!(<CR%Wkf~J6 zcJ#XS+S{ifIkgk$96a^AolBtca(Tk9E)>{~b%Z!99p!!ujQNvtIRXz0SWvOanQe>z zK*#bZO2Dw>6+^V>$G4v~piu&Exsc`Z`Smfavr6SnTZs_J9PO4z?OI-8O(e)(Pp005Yg(ZGI&3@=YV6$9N8PNbON-7U2nCn{9K`_ z2hN~uJjz6ZTJ!~y-!cih{Wzs=)nE8{vm+wl3ZV_4h6c;iV?YA6Yw$WIBf{qpkw&O( z0uHe#sreIt^KzTAvhpTYj}+$Ymvl)A)HUwzw44^Uvc67y%^luQy*(eNC0bR88z;;; z2l|RsE`A&ITW;yIw|Ccy*2dx;UGI6^dFDWq(D*cZOmXIoPKo(IdPwDe}Sd?wqw z$z-^58r(SA@opl5TDy9GXB}>zb^{0ToG_u=yM*F6L9e`VEnqd%e0&*A z*~vYjj3o40MzqKeFNN>*&1Tu~vy{}gU zlqPjdy-hXk-1W0boV$;dfGte4$}cp(7r1K-Yc-sjnQ0QQXG3Ciu_ZeiM@3fRZZv{t~Szb#(pNF_8uXBiM(6Hl;mvES~#Q$Z5AKEH|&LtPnya zTOWA{MD$0hbD+FxwuiiXDuzGEFH{y#wYPZg9L-*nq-|T{K^-rJ-uS^sS}Uok!i_8N z($Ue$uJu|<+Wks1b**Dc$E^ShoDHI779$4-pz9I^6+7A;y7dA z#*J3FnXElUB+>Zg5q*@rms2a?Zz_q33)nRMByeKsr5Ah(7Z>~&e3z@&t3*ri0lt|{ z`yeCwVl<9HecYTpZcb`(4v_R3@-R}1;24^AD@J|&`jyRhHg9Try77aN8Oo<>cp3q$ z#EnK4VA z@Xmw`@T9rli{BaB=#>_qR#J8s+R)^c)V+fk{@D~J-wKPE1rqnBY~#^hRWmS*h;0Q6 z8(Z^IJtx{26NM+Qm8gvZa5zVkl*J6yXat%hs4is;YxKl*bVME#DZL;w>>}~1npDhV{ zj=p4`Sj`Fa2Pe#??hTC5xN<%$-sRg7mUHJCa7N|{fKf7xJ^-mr`4gj}wg-ty(RX!a zt$(~gYu?G}fs;3h#BLMkmQ>~4slEBRX}n&pDu^}agrBU=%`CR@9n*JS4PFdpLjW~@ z-&_nXmZou-PC}R6O{D_yN2TNJWY@uMMi7O^$2ciZs1{*ynx-s;&pG~c_9z8! zH?y7J%+$B#Hb$N=Q{yk^W`nxhkVj9^-cG*Jb|P&LynlPH#N2E-wujIx+2-IOE8GKi z6Kbo#traDN1-n543T#g>H~y$=S)`1BP*|*`^B$Tp>j9^I36x5W-BcT-g3R6$9JE$L ztxW<@u6HXu5lP2z^&{@fan|jHnn3Dn<6yn!q8_t~;XLo`LN(Rz@SCk(q|WGS5crP^0!FmWr@KJHdAQOPtT{C`g{@;YkC&<0Y=Krjam}vY znpOaz!^r~$lD)7$0lQz78TS6oX}$>p5_}`@T^D26)Kf!VZH||fT=2zjlSt7u3aRmK zx1xlg2w)34(?&IR9&f-52pXhFPf_juZX)S@y#HDsM#Q>TZg-^%4gw*s=AlD}5Im~- zgvWZm#sSN5_`+NXaPLi%76DnkW-ui-0N}jq1kI?{@ue<=nMe%^)jQ*&sU459K$uPz zYSKn4DOOcg31^*zSXlibbM*1R=?dyOdE9uut?8+WvBoV%8jS0Vlto5puEkd$7@DyMhx^bZTH|*Z zu$32RmmhLZ^_aqS=1a%I<9(*n!O`xQPiJJhHH+6Lo8>r@;>l$4&JIzT^IHZ4qVXpz z{8+D{?6SGk?xSLw39K=<5P&TagizQpg}k21|5nEnJM8lP1hm|J>ZB1pL@fVLl3DvD z+ANm2dhsPj#Pa^kfx7cPut(}G#}-`9PiUg*;PqVSW2Jbkdo_ZF^}ZZ)IXzXh`z@wAg#^a#KUS*ma&!# zZ_01(SG1ou;kAx*a2n0@!Dy)KCubIK;qp{oO80*;-?_^kV`??8!PzT1k~KeqwX?04%P^=jpS~NRi6rX z5pKI%u^`j1skhbmCt%343#xrgw7jaMZ{p}63ODyyauoz2B5=p@tf*Ohs?sX(pK)uhmkimW@6jIBxr5P^ z%g#(Zl4&jv5`5FtaD9lyHZ2Og<0%8~DDmLi3pSt0PryAxK!p?nsQ!GpMbkn%v8u4k zpECim4h__u`}qu9gAArPv05{!iB55v`d0EIToc$)y|A_y^FE&Q(+$1Zo z@0&6{Rje9ECRE7hYw4+jvIDiWUmr3eP6NbuJewdpkL%J?uEJSorE2GwI*Y-L7_7_| zETYyJ4WB~wlk;>l40(;^y~OM*;33H!LIoeaE-(V3xm&erivO+ld0eDGl3c+|T5ITZ zZWRCj$Uv*^EGSCK-Y{H#zSJ-p@zn;knR!Ukd0b^8i%lc20E!tX)2;41=~)~cT;!d- zX~Ztn)NCUA4m2O`@KXB}^OkZ218J?=lk@HDM?ru|21b8^LhohB<7eabh(Uk>y zn@_AVBnu&p5fjs6q}E8=p+M3&UD#k*a-{s(oLhi4sQT$?y^sfE!AtqoOVL3vw1)fz znL(Eu3|B{jv}42`XrL?7oW(#jYuo*nd?nU^P{g}o=d>lE_EGBMlfVL$Z&Y^Ukd~3P zgRSCr=v-r>Wku&*8D3^c8jTxoI3Y9mE-75jP9qT~gp?KBhSwvih2}W5Be|>#pX85s z?-U7fJ|cA2Rh4<@J9~oK@j35`717Dudw;D4G4KR6=Dee}r>F^2DGV(RhwbFyf&Qhg5fT1gd@~(@_ zG&zR&bZI}xcR+uoTUfa_5i773wSG)eHO_}crtZq?!izNNd!+YXTXMZ z%{nNx%e+S$v(5{7_(AOx(^==io8y{(eVu=D=-#$ zPX|ziM4`-RS9~bqjJ;b z;#)fUku;oPCI)9`V$Y;5X#BV+Tkh?xnaMj##EkvLMMc>eg&#{@a;+{O)_`2RNY_w} zO(3q<%dB5Nry2APxfGzp;XO!5jDsr?54pi>7M6GYnx?tgkjS?^UvSq{Z{C!XT=hSB ziuO$X?#?l9`*`iSv8}nmH6?*;-g9B6?veyr(l8kc8}xkwGlRy=6II_XXMFE?9%u>% zxrW*Vy?sr4++7bIJQ(lZsYzdn_Apq@8Z_%U%2YJisJgsCH0OAT9bC^93gOn1`*8ot ztt>OWfBpBs}$D3I>iY7|A^A)jab7wXy;NqJPlg}E z^(-S#zq)%D`ZciI*%{|w^1}Kle*AagFw4fEU9cb*S10y;`oZi!!qQ+a@!$4zb8}nU z-kwPkkBY*{6?faN4=O-R=h<(-pt6cFF6(FZ;|wZSHaG`X$qDa=3YgnB27e1hhlFHT zyh;95XsDbmD)6Rxew*SvuhMry@>;Yb<5k1wU;#D-yQg5my{GdfuBYepo0}S11C)36 zI;x8L^}pMyX8KY&Ap>ti+!kLzp9uCifvLihO{YWwB#rSGX{+F_fY8RfgpfO z(W0Z+3MZR}NN&xx=7}$Sp-&g|fb23Ej$f0<&|J44Y8PAWZPDj!(S-sApY3F01T8|0K3anhb|DwVz9 zjcU>_LjzLXH$CsI;Q_<|?B*B)+v$5QkZcWX(y*@MC4H+LDg4 z)-NRsUSIX#NllR|6VA>Z5o~4sh3QyEArd1uD$B-XiiXhf&Fsn>(saRLBgDJp7uL`- z&Zcd^{d`W6nP%h8-9CF*9`*{Hy-?!d$3I%Q+i1y{-8PnrxrLB} zXqUkaXSQ~-t%4t?Dr>jv+81TbSuhV{wenK*&Q!GW*q3^WieZGApAy9~F{S|0WZnIn z&1erWYQeQsF?VuEKc6yWZCYaJB1I1I06ukf)58?SW27q3=iz1 zhK%~pkb5_2Px3K)yAus(7rv*!vLNN~*CpyFh_Q(u5=!moNOddngxehG-KlGRlnmA7 zeHz1;ER_6KG;OwjA56B5t@mo1OX!{V^u0Rvxyjgc%wt{o8#-_mo=BdXt6ZP1DV-Rm zKV4uH*I&#BtbUk|9zGwDW7n~Sk0rY!2No&-Bj~fr+CCYe^)w0Sf{jNc_1M2*`V{d; z4>`2$z>tvu2XkJxP+FM52j^6)F16|PTn=lY^NJ(8^|tO&4&?HVT@Xn2Y3Q_ld}uFF zYi4_+IQgeIULm5UdFNeZYUo%dlUCX4XL!u=LXAuXMgYI@bzE3306tLi!9jdGy?1z4 zJYghHsD*q61Oclve%b)wq3vvEai zNs6+6?RG@lis{PytlE0CqricYG;vE7_uf%RX2yvzpVTC2?I|Jw1A zDx3H3bO*DNS5jKaW8Hiy?2Ba4%85ftYR5iKl}%-Pr1IT9~*s2&oMFxZyN`EbZ?Ho)#i{N zjL9vTX&yM}%*$QSR;P-pIJ0kHc1+7dm1ur|?;WsFQj0X?oisS2%Fd}w$1^2P$5+_+^RNPQ*Q z+Qx17z4GYNmPS+a?+wXn&845Kenk%jGNVPfoGp};t2bpf5QtdJsgalJ^R{5(wDc?x zDN`bGNqjO28~l$^P~V~A%}l8s`)N-8jfV%H#@b!~>eE?}Kh-T+(g7bFT#6e=97C0K^1l8J7_ikQ)W6Y&YmENmQEL5;Wj(Tf86CW9@p~DfXM*sZ)`jUkZ!rV?ZFhy@Jp{fKUCCsyuH*ZfYEZ> zs-3&gq7XdO1xG-P^8& z&!E)u>t8;+{n*~{drg^{0LRZ&ERXW{1s7GY!%oBh3dD;LslGqgp-%z`)Wic{CSc~n zYnz|W+mJz$<0{4!T^s+Hf4&>7vtE9+()Z{P^2z~l%1+#)|H!nb%GYaab*BDzT?k_% z85RX)U0JC{9dEkzlPG=TPVDK+7_8j}{fD__v2xq)~u?&BJ zMO>m^J!ckO_pX_TB#Gc>c(IWop<&Jc%o^God-n1+7AH1Vpq?N738iVZEk&Ttft$+N z_wO7J2n~_VG2%%&;p6!qy)q(()0HkiJ0;!os@Ig2>z|@e7n}ci{I=;?%!$WlGIX6S zHD7p2Vu#)U%{}NVuhgXlpPR`|zGGoBS3z5*uh@~budmNBU?=9p7mo+hxL5o~UVJUi z6AFoWm7RP|VP&NZwxYG%A&OHkZ<}+6QUyzX|M-7mc`fEf&~O;And1}kH<6T4MPdq16N=3B!&uhIf@ASBT*5dhzWZxme7oVvQv)oNN?RUY3VpIMH zU^gcRN<{s)*TzBZ>%jvVLJj2q^I$Sk#aisTCM>2?1+&gTUQ)dYjTHwrG;4ct4F5vb!yt@RA#P6YbkA76#(Ft+1r-6#c_oK6I>n1B z5qinyn1AmATuc5dXUJ7j12?v@@!|Yn89Ogz=yXmK7a#UUtL~??69>MDXMEQOf9<~M zXI$5x{wDrS{?aEAA%`ZztL4mRPuP3pTb?jHwpa#B_BKu49-R1YujJ=+DS>*PHKBoS zG#q@|dmd6d6INDMi-1m*gWZZdQtz-oGG_Cz`jMLte@Xjsg!bR`WKn`c&)SUN3JI4h zw7HQaCGB+}?gYke?&m9>OF3W!B zS1~yLH~qNJ!m9CCNsqG2M%8$S{RBs2beg3j-t@}b7{9U%3!Zd{8?s3>j**h`n#gaK zOS5o-MICX6MZNS*ZBrCE76IVPXDDjF4ltRi<|}mnW_~w4uaY;$u&u2&fag7`vW^_c zcc~CY47v>H$RIv^z_QoG-Zai=o9d(nfbs*;T?c^__a2SyQO^p%69_ri>=t)@aevaL zOi{?GA}MD&5y+zx^y3^2_@ZZpK z1%XDlEslQoo-68!7x{9-X98s#BV~UU?68swVW&<37WrTIi5xP0GWxP|ht!nj-CHdn zBt)2qbGGSB){J*+6!)E}K#U_i`Tqa8TtUO9>nmXw)Faa#~0l2LM$m|yc zf>o;4KU6`#{k5Np&U=ri*Gh-FBshzi_c&9k)|6PHA4$`uEwM$iO(AKKY6(BC{Y5*g z2$9l}{Y76LKb>Hec4-nW+53-#<)fjgMs&*A(m&3^m9HMcENb&BP2UfEAOGa{8xR7V z`ifinY|$+#I&t?apNMN}YU)PwQ1$WQzenik}jAkpb30(R2E}vu=tK_uq1-$%;Mb zKP!l%+vb0Q8QZ z6AJ>(DAa&+&Crw^L#zhRH%-2T7Xxz>NfAol<~-$L2x_ppqW8Cevcgk=1zgjJ2mLR` zU%!4`g|%K=uBBtl_1kp&t4sFRfA`mC3tHl*zgoPrMf-P8-C=kOPU1@0U8jx`^V@Lw zvpfHf|M5w4r}8OYGoPtT-PtfLH@Ez*@j~kEj_}0?wGk}=dj64G-hXU!7Hv-1>bZCC zo|wnIvEP&TvjuL@2f@WEa zg!R#2Hn-PZ%Jo|uTw8BP~|cj%=z2x@q7?% zvHzThlAoU+bLH_rjLJJ=U%q_NjfShtSFM{JJ$m#BNIaOR+4^gDi!H5xGsT+>4d9N+ zO*^~GU_@@$m)Vj_T2YJbHyD>jo-;~VHJtn-G`f#}lM4n7@OsIxk090K<7Aw52hCxy z7I3Ghsh%@%*1{vqe`7Q_%eM1m z0$Q>dkOsdLW3f2$6;zOl3ah{F>PFM62%Q}R9%s3+IH~~dlk^s!s2%dcw}4dLdpbQe zSEy<9GPUX^s6ah;L>2$FyGXi4aFf9eK#K%0%qUTFh9Jj*0Ur^?r_Iodox)8F5p)u{M;7PKJNp~Dx1 z%Y0DX1uQ=2EOfQr6Gi`jM6s`_t<84ncU>r_azMnKOHv0vI*?pO_u<-wlNKGHReOu8 z>gS?O-Ht31+lcROFgzY>q)LHcar^ICFkFg?3E%=B(muP)ro@pWqCU?|6LCXN#=xJ<~WjEm#{aHK^9I+adPC?!x&OF13Eax zOpRtz$+a{YQ)($LiW!Ow{2A5NaQmew80r2c$DJnyyl@!8($OczXFv7mV@3+u3fTX9)f z1gr1ZSl!eJDP~S2VzWQG+;XrN`OAkW3e!i`PaVB!#pf~bsrZat(}i3nySEo_+f-+Z z$_&gDFC135fjgP?*asbDZKe|RBiT7~RBJ$*v*OJ)q4Hq=GVR0V1G^^%emm6K^?C`} zed|qmg7}KIF(V-In?uapyx?)2ba&h?6wxQIJ^Ph7vHU(hp;e1&J~wan{~x;EI;!gL z2^*!mJ0w+5y1N7fr4714y1P4-Qb9UJLOKuKai~LghjfE<-ObnEyY7AexGr2vsq;B| z&pb2p%(G_~g7}pTT+Zp7f5@=w#N^g)h0Bx1k!&LCh08axZ)uAOS|l188m)teYBpZ7 za61(Qc9w3lwuWQw;=Q)~7J8(Zn~hQ+ujyQoJ?djF<@k#SyC%Z_hSLY3?2eF!$)1s% zx+s>DD}#4Z1KwT9d~kABa#JKcf7$%9;|NF3oIQ;{cDbmJK9P|Z*`bSvtG8eF4P|!} zVM7JwIh92{Tg?zs?)^aM@v5zihlYdln?sxKm@&^+S|uKhZxBIMV}Y4Pkw1^5 znvzwI$JD}?q3(-KOi5b?YZTb05UOut(5PBtM}r}KPK)Zd(xbJZG+J5E$Gc1VI!ZNq zlBq5B>2Jtiv9B{r-svOIM!ZKm2PlyOnl|`f%8JF>C+pFO+t8{5;JD31I{4We0{@Kj z%vwqmIFHF}G+$9{>Uyw>wPZM#rldY&Ux*cPRz7)V8V7!h024{b4n4Q2PTfc(BNQ6L zj4|*msXjE?&mq1aDJI^eS)9b7=oVraFgM0wO3kf{>$Y*sA4z&)OU8a+*Zrjug(s5y zf_pB9`2_&1Q3@mcQ^_hHD(iNJf$!rNZ#HO7m(#+9{*P}1KMDyp?>JIR+t zF!TKFm$#$mtLmt)+n;%|{c`3GFdyomGfS-7=WN#@ek>rsA4LqPHHMXxbqV&ncQgT^ z8`YfW(@3QY6&$S2u?uY1zpl0tHlD%?IY5nh{^1##iN3@!*9%>E6K2C*rZHlUMX||P zq)yt3urr<26zX#Nvhg_opcARM9K%?YW zB^F1QS(quK2iez+JhuYUnu%|#Ad9s4P;F9XQcf<#riY?U(tdts%9qz~BSz%t%5pr} zJ`(zwXOW2T%Q-c2o$RZF5eBle%e0b@=SuMTXa=5zes`SSclg%#L~`*-q|f_J^fJdy zGj|=m;H_jil4lXGBSY`=Bpx`w@?$jiM#sPS@3BVJpKF7w`uox%*BusgjT+_@N$hcUZET(ha3OU`1*KC&nSO* zV?~bH2O=1ejXsgT94QgH-jT;9Nb8?8;8 zC#ZJw*h!?h*oPhU zZkhJ!=&u%UXJPPfF9wdMbTPH=AfzeEAphP>*FzRfuVYfRUB@(fl( z&1IK5fktgEpZ7lhmEEWv5MGrd9B*FA$sx{IGoE-BR+BnK35p0w8F4aCHY~BRNMfth zTGp3vKa`lth$kD-ne{oG!A5g)Cgv(M;JRc~YHF?*=cJ6cdX2E(X3(n=KmL)TxL zoRrN)`PrEj)cqCV+fB|-Nlc@LjUC^=J+Dn=lLd5ou#MD+q{fw<#xZXGthK58EM#`3 zFTlx*j)GJD-I*}Hj1E>u3+8rHT1inQK!LQLbC;uatFj&9X%XDA0rnpno!foC`YRO* z=QTQY&YUj0?6*9I4}XQa*8j86eOZ?meP$-rqByW^B;@a|y$rwY8@&}D z7!O|4VsnRiIl`}v5w`@gTFM5SE^sxA*iWr*&l$;dedLbu8 zo*y0_gt3wMnI{CZb$ujKdE0%SdhEOLALW&C;cBI=W?&`z^Ro}_l30`@Yh2NPHYsmxWI_-}$??3E$i8|z3IIp-Ra(t3*;0Ef(s_v?cZG0~;_*?IsR?-ko&!z)%T@-zguFcxh z^4i0xZ(1I%(L_#OHrAn#5J~w@~oWyY7!f9$1F|0NfR^Qc_>k*f2n|r%s{Cb3Rp@-i6{-2 z5f7YV3n08{m&$lDJ)x|4r!f0m7$Ze2klajCVEO-8+pFS|{0%Sz4LM zqh1e0pE~W?J+ucxqqXQfz2#c&!HqLBnmo|4g}cTk?^8aUu4xmlnd|US*Xhr#F8uuZ zqQz?b{)v}jb4M}KOPaY?nkL>gYM zp&WSmq%DTww$8s)QXeS+(c#>1g8Aq`ciDZ7YAeOi)cOEZb_(3S!5vO7kv zOtYPXiv(1_Rq`AZz?AIV=p|N4XG%cw-+^eb}=Q>c-MbfXseXKY`}y$r>dtF!LGSAO_ny6Ur`EHBq4JB@ouR7| zo7P<~=vQl#2(#Ri)>!R;Jve&L?EE1KO)mDi-Pp78Nz1@KT!cqH6wrOskOTKIm9!}E zL8tENjAh=a&jzF-=&x3cKK@^*G9|QcNfaxT>e8!|@3@cY(wTeSlgoKY9-3K>xbhR< zMoaAmFQWB?)L>sBkNLkh@eL=pip_g?G3eotX6({vCGYkq!R`C^_+}{dFC|x;yj}g- zGSTp$M!e$NG{BgBQ@c2Wmi;L;jVwyrF<Esi#soDR1? zE#AUWV}@hv?WfzR(^YAjlJq1hw6Mvq6QBOMOS$CVyf3;@x;?f_kzV z+HU_!2lK!kX2kM!lD)OvRy@{+4auuwVLgEq?qm1F8{YXFc$SxZHt>#P1D=_rSaZj< zeYEozbhWH#uUAgr3pD0g@Ta69Df^;KHCs?yEn%y^a`)uCwS?5MJCY78pq2Vqh>0~5 zu=&iS_E+q-?gokva@$bUKkuj@aJr>b<~XcL@x0g5G>LZb^c~y0Ug*&B6=S_hs`|4z z%cfz=?R5RsDYfK3oRAj!T6~6TSLQy_umM{wUrW}*+Y7E7v~l#xtpD==rvRf6g_w5; zrKfo_GLyod+DVA1&%5Hvrn+Omh3rmou4OHKpYy|;lmGH^;g)ww$u~TpV|GJMYc90- zvG~_ont!=`Qnd?Ll^w-cGhPCHSjM;p@rx8|O_#<)PSe-f8PJXZ|cwp`$qPCM&^iQkBQqA$Ecs>M!5 z13t9?6+>N48be80M2xZGWP#m{@m7QEN&ha>+>)m$Fap>(u;#H2H>} zb8Kb#QkM9~y=ZSnjI zv@4otGtpxHwlyi0Y;~!>;^Jgt3JZ%3M?LbKX0MjkP+Kl};eG(A%-O}DA&?2)Zo@9# z!g>@$?u)mFPWG8gR%*vu+A1#=+S0@u{l#0(;2%Y5HR?K%Hqcs^9iE@xI1;Fw&~TRo z0-&Zoj`r#PqG(X-pOB~<+TuDU`q6dioh$>_2263`Yj;Qa{q4)_lYwKa4%7L|nziKt z@5_JxLJuy}(|_A<{es^N_s7Af)wYgw`=<;ntq#G9O%hL1wyo5_d?*v-hKQS%ct|)I$R+7T8C8R{| z*%Fo96#N*f_c(i(@-gN=7<^YWQtv)?w1sz!*u7OK?k)wUTXSa@gEUbL` zHJ=8mc?YxVI9Fd{8!y5pFptiK2z5IVr|ocg;kTgrhuVs$sw@a5%xNV*b>G7=4O-=? zOPs$6@PfAcE7YEdb6Aix-riBYqHb-MBwIvmzMM(Fa99){*w5VSzG!e2To)BZR8GZI zZ?rApNGivo7B+h@rQZ0}I_|Wx^DZ~NX0n~tF6CymCEu+naAO>P<2+W8Rb1)zN&SA6 z+U5=AfQ>huJqN3MX|=r&I1=}7E`Y$S_u~BNMIX~?du_o$6^*%){NQGP@y2PcF9U31 z;-G5mLF!+|dG;6{Cge%*^GoQTiyGJLUv0^uTz6o?D(ru=tp=twT2B z6NFuFc|7p2^qS$Sf4^ni=XY9&D@Sc#;NX94AK~8Q(66rLx7L?!9{4t zsMShQ+tCb(z`CHjuSI|JMNm|kyZqWs^kB$^pOIKhO|4qe{6}e3JGJlpnvspybE-n@(ug@2u|L|vPqlJILtb`-k=_;D9!a(c!UpZb((V)7W^(O4x z<_{*MY-F_T zf-w!Ke(83D4Q|&5(EON0i3>*Anmun4V&4BCf-+{QAH9Y*f$~H~($nt$c40;z1#r88T^Vj9dp zOBm&EAA|_Oemt?<>u#}Fdw{qK8pV(4bmuTyE&bF`CQ1|$PS|wuY!37l_?l3IrYfrL z^FV9lkOSB}-%(}FvOekl(gi?~Gl@Yuy`|cKqme0Cj7N<$4@yQt zGVj|kSG)V;=A&Brf#icpMxO!DYwFJL<(%g3~!oPJaZ_e7~NkN=V>H4;* z%z-JA;g`R?CUzy|7ELqm%CNAO9eGHZD$nfWVn>1V_nH-%Cg zy9LY9Le%$2wn8Hc4G)XBd4oNRSv{KFQj=Wo|8o2 z}t%)0Xxr;b5wSyFa%JnP~`YcSx*li@UjZd#QoQ|74T^fp>!CZp()W z68}!yL`HmyO(a+^KfJ5tR9?@HC4C^ z*Hclkoju<8mH1gE{d`z|!codpoa|mVkJ%!DrQx|BYs3?4{bm$)y`F=q{;J}ukfT5J z?j?p=cf8rlX3(~88%-o*2}vQ}oyL~a%S~@WF=|&@HVOzb=8&8(GHgAYgEU*OAcAF$ zoh%TM6|%&-$-lxa=15PbD096(k(i;l|6!@!A?vxNiW~?zjPWPVQPH$(AJ8QoTuf<{ zRhXV;ozXEtQlSh?fhPK{J510e-UevSUxn*2I4fMFaE#aq5tf@$-fpQnRre?Q=3ZR? zcnAp4Ymhwl<3D?ZWB6K_&(YMq z+GZr;T?G2BBoXgaRbTT^^v5k#Qwoi8pqgX5#uw6~fr0L0VYiN@L zf0c0*Zd8>s4O;?c&0HE9qZ{@M<8m@!mT!JtX}%Q8z-?Kw3+(;%?EU-qJ%fV`yu7@} z9>5%dF6i@I+M$)DmyC=IIDJ48Ju`4!zna;MSc*H&b8Hs|MFQ9f1JFyX9j<|*Z2Ba3QybtXhNJq#x0%qX$3Puu`4(bfW=Ln{P-CipP@s| zN@sk(hp|I)&g*Av>6grlUh5eRRKl#4A$E=0e?^eo@6SJD9V{j2HF=KYDbskK@4W@G zq3wx6(k9Qd_H|3#r}^~sRKtD@t)rV%X~?sh-LXr$cJ)VhP?juM)&gB=7N!2X>feGy zA)776fxS0k*50=U>h?`k5trp~siZQmMR&Ih?8} z>a=NG|7|lD+_6G3G^wDd*mZajo0RlcP7csiZ$FustX$l@RaAT~DoO=FNk#_c<;$0s zcfJ*smB&}!inbRwVA7ea*YspXSykwFiRqR8ufi=7uLao`{FtA2X}@4&%gxUZmoR{~ z+k*NhUDWG)N{amB+Rs!nf^jKX>ZN+0zw)rN$22yIe2+c5SC;Rh5e{ zNBDH2N)?L%!aI)L2olu}uU*)$jM0>|qTxX9+}7R}*NX6S1^E0bZW?j4!+8u1gTqbB zzO+;qyVDrWGp8|#nh;$AB}#ONydJ84!Pvy3^SmKkg*O!8h(!H-?9WLp(v8^bE}{AE z-76Ln`FS-pHHP!@nj?qJr0=Z68LVU(f@HXVyv1mMPbBn*EFD52HlWQ8RJo;7@&Zq~ zD~hD?$T30)xVhI}S$Z$@0iZAYJo(eMh7v43bj^YXlMP^el+0(DY*=WVSVjy``vGap zo40T2o<9#67*M$N6$k3a&v4w#%*+lY!gk8?^75cJxA|$)zp}Cb>-AMxe&05iP_;cr zPo$UKMr{YKF_15O#+`$_WM?<)k7os%x&1RpRTYl|CtM;Xs^`UlqMjZ#&{}^Ua%+OY zU=u~}@wbI``V6nhRq7?_w)D(JJRWWjo^lhq?XpG*;{|SqUoQByeYZ;ejqN{n5a_^q zx#FseA(2C+b%)Y;{S*zEHkXtYzjffcD%*avbouW~2DC@T-Z!5L_BLay-~_Nt#EJ3o zp;NnxRjjbSJ|IE{wgC+8lc_0#Eo(nLbN^rN{=q>MT4v@5djW;_?+L!W3D#hd0a?<( zd1OsgluUM9LPDj>u3BGTABd!RAWqiT3xV{CfLrFGd)@Ilf;Dkm=;B+EH;!hql#9^Kq_=gOb!*beFb*faiq< z*~lb&4qK__?caGugFni1m&;Vq2r3qNmhvlpE&jw09IupFW^XUToz>zg>v2O4Z;7wd z|3{=27gSVm;nQ|^bh+ni=;@`S(P}?!wEiuM90T+?V2X~k_SmIDyAL}11q7ECU#wf4 ziHV8Ar^#lHudl!VF=NrLvCaAUGjM0e5+pZZwcZZY&d+Jzx<|~o8_djWB>?k{jEt0y zTBvuCNBZ7SB3@T>_QLJH5xm>WyZiWuj<0<9UuGNCHD32bXX(`zAJ(Q@{K<8PCp5L4 zt@;eamd%%|m}(_DNtfQhaQ(0RrfTf;Lvd*a!||W?3=KUBkvee2Q|IUB8DgrzV||H; zaKn5H9Ac)?!)X-)Y~olHWJF><*TW5NcGu_o^1#yXZY~%BdNljoi~?XkIXU_3r!FlN zP3#xOUmEl#%`~VFeohVbq7m1wnA65CrZ-58+^ z3f*&+@d*ixlV2jkegJ75ND7&lnF#?b-}P>Ec69ilQ|q#+ue$oR_uswy@IeZg&FWJz ztHRn^0el_XIY`u(FBl+;%zs?*7uYC4Uf9pptkn3r){dWnah5y004c`DKLUB=77&d^ zAj%{E&{YQK6hfZ!_K9ncRK$oc_tzcTA6OWZiF)z`q2k(}9Ivmh11G&KEtQz}rC2ex)`t%rKMLz?w2;Ynwq=X)Fr@SmO%*^NO>Q226gStWgKY%%Mz~^p>#BUQKLpv(%Ixk6 z>P)k9!x_hM1~$0xMovy>YsgICiRtcSvGsiIx7Af6IeGb)%*@$EMJ)JQ0Hoi8WXHvY zH$Z|GUnjJ~@aKqmC7nqsbnR_Xc~Ww6vPLBrP*H(z=HlY&>FfImobb<|KVJbTfT;F} zjgaz3)O9VlIlg_fS<}qa^L^D(hmF)WhOJQqj}0@vg*!GOwUGJ00d$T$3Xka(0Z#xE?`e96^653)`7DI z{u+0N<3DkoHUxlpFeM1YuyS&8(^VE9vhAyYes#p>*q&ry;0jnUmqDw)Oq)4Cj>iKk zKp#GK$c%5Hy}J}5Sktj_g&~<^?C7Ns7HwP-_~Fn$vRO%e90(tN;B-c}CD$x32xoo@ z(X0LC^jW`dO(}4#G>o%G!ja$13iKDg`H)0(TyK_6_nSIs2|m+;SWQ6C z9w{xyj_O6H@wdUk$38dnk)qcZW@am}LCuw1hKLC1_s1_sNA{gi zsInjpDJiO*-Jzf+C0#H_8rSk=ti%+#RU3SD_w$lLMYL9|U%t50*UYr;8%hM7bQlu7 z^qz&#^cJ6k(JFF z+s>S@)a=SuE9~m*MC$JD=HTH$N>hTi^QI| zTUlG{(E8yRU@Rd4Cn74Usj+cz5bf^|H<|pSfoiIR_r;6wYS;C^w`^6;sik|II|Ii`-K5?*-@M25X5rKM> zoj=e;;IeU!h!K;#iv5NI)rGuNgYhK8{V=$`vqm^~dFFK~g>q$&1G zsT*^UX^>gWp~M#!I6F6~6^6)U8~#WjBqYS4>43qaVD+hN(?n=UMLXZEh$)GPf|r*K z!lmhhLqh08M4r6=O=M_j2=+nJz+f4>#_!pummEn7we~9r!0v&^+wV=I|^b-*Nr77Q()oZBEtQ8|FV!|U8%CNvec@3>x?T& zVQY6+%FK)rQwI3U$l@Xxl!pTb+)8GTl+B@{qAH`mw&@s6xw^uWjQ@Jh1Cu z->YR~)_ij1k8@9l`59X2ip-PZpIF>l9~LmNR1uo>iA@DgE*?*ja`;kE<-#qq@NXXt zGj(^<~ds%sY2T9MJwM%LDm$Ogv7#(P%t zSG~oCb@rnWUY4nA7X}?G^%C8}jEto!;ve98g`=aR+JiYZVn|z#TA|4U-~4YId%>}@ z=s8LSy*yqUwyegB=$fuDiRfr`66!!9WQxls<4k^mlomkgZodYZZCIiOp8=?xi7 zQv#N{v$Lb};X@EO6|@S@oSK`P`|Fj40e%W(*H?(EbV5R&(dqlu*toa= zz&hB7_V@Or!Osf`2@TK9^=l=0d3XpG(MCl?NV&UTx~NYONXEa2K;C*;b0FV*scuk< zisz0X14Z4(cN}vUfwP4hkmy9A-S=wUu|vGaAJm(9FAe`f^Jn+C#A$*=N1nv#yH)|5 zqXlpc;jnx<3sOKswJ3KC>YK`dxCMz-e)xAkE7fJt=sqP;P*ZnLPm=-A(tIH(CMIU= z{(HoH`YJ1njxX$cN}a$5%=fn4pHx)v8k?F{_V@S8&UVjGe)Jncb8LjCx3xM4H$02g zcI_cKVPUA=K0e@Eu)z|ab60Dya8N`&evo02(a=DLhlk^Cj*pHcz%;(Vz(CXLkg%|) zA|kiBZli>fCCM+3bXt5xPfkzYX=n%(f~7ab9L}eb?O#T+&yh^ga1e(X;KEM^U$@G0 zJfK2^EYq0r(7t~CYCl%�VlISohW(`Gmc|5dax*5(Wmeqobo>pvafVNUUFZc~3<} z7ha+gY@d08A**vR+Um5|vm+yIvkw4go^o*!93LNBSEjwDASJC~Sv13w%%u~@9rrQ9 zmO>RS{^8+YEfn)LrOmBoFnzraexy!f$1PyO4Zhj%an)tPs-q0ZWNtng_C+v%iBLbJ zF&BeTa=V)Kfbd5~!S?eC0}_jRfvR+20I_gDt&PNhX=|)jDZV6HomlK#!yu%qFuU~Z z;$mp}+yzpsV>Y${a2}10jt&^NMr%gm?sEIeHeZyCvASljs;*MWu=7WU?SlgxFh*AG z)%M{bE;~Cr0P&!q%}Txs9b|@!!yy>sy57@RaRd}3Byj8k92}y1_AEHfampdVhM6lw zaz*l10G*Ccfq{^MfOV;@A#P1&VKO?_{K?VA)_a$dAp#vO9EIQjPHhj)2-95rxcw(w9E%i#=&-IW zw)9*C{FSBzzqKer(4k>5$@5PPIyA18Bc6J3NS(xR<=O#>tp0A{9};AN%^NP5zu4Y# zohm3weWEtV7w7!9dU#j`qq1ZeO!f`{P!gh6=t5?$gu@4JP?-y`?1#ay|HV&90IvuL z2+NzBs9+)?1Q`XTy}ut*ggOS+&Xc47u$+v7qP?{h4us@sD==1%6r_ERzcj|==Fmpl z=j9K%ye2VVZwCj13jxY#N$Fr^KqSNzX}R8E#=^pC9U8&~8z5n5NQZ%mS#AoWm<;t4 zJBuP$DJ6%7w^gwOsl@iexdjNTp|~5p_D8*B(|BGxTf zwu9`kFc=DwDl@Y@T@K3z@Y1f@pQTqho#T5XY&?e0ymni2UEfGc$45l=8O3z5ukD7FgW z6@;u_>@Z|b*7cJ=^x?dUUG&@`#OSnz|9KK{WNqc8ot1Dp2^RfNr~n3I>1O@s&*cO?jOvXVp~qXfa5R+3v*Q(%N3 z$mI|K<5DS{*!!5JB2lbn{OMEYfy0$|vo3P(n`g=Ie}Kb=coY<0z*Yta2ebSp&kbgg zEiNuDsy_wO!9ul)UA30C!;J>~W%iL!&SYu>P)`Y>C5wMlk?07V5#R4#S9U`O;7se(R6+q$=~%VowiR-U zT#n=Hj=aHjLC-cq|F*4}Hl0pIC;_|@5O81gI|#A7YhJ)s5{Uf_)=C-z`6FR9*0|IEi!S{g~MNTUt% zgIT@e6l5Jrz9hk4Q@F$oSWDi0)UHWCZI!6xeYRGo$&3_LMdR^qrA|{eJ*i|*-2MW& zeYCiX<2x2DONVD)-q0OeB!Y@$Nq=W1FPW+y!bcYgzib!EoeGE)a#0JJhpm5-XM4kw zW-wUV3WIu?RW`e3=Kp8`5CYeVWp{(0A$)h1NJY4m6>`c6#;f?mBAt_y{iSzC52_pg z<{6u&OPPj(f`UZhM1>#!L1XrA?PP_{&Gh!{Jq8lOB-bRwr)ZyqjLh84<7B^NVo^13 z>{YQ^C8WZ!ZoUM@;#LO`OIKI-gXwP+WaRSmidb#ftX}k&FM%!MRBvAQIGRzqrwceB z05^0EFazunA25%h_lU2qkk3N3}0#m@SJ^3aGbA z5m6dS)WT0hi*CMIJWDyPMTbu;y-z`FD!%z5^`ZDC{Q34|CO1d-@BU}}!C)gdf@hGh zToIB<43;ZgR3P=e_1G5(^=*YU>vftjSez-v#V);j8gK*SpP^B>M@VoA{=M#Jo&l)K zq_#HVc;C^GN|6H9HI#$YRBp5+(UQ8)LgS-tvnMQ9wu(2-g5$XtLM8j_x>Sb-`8unb zY`wjA!dyX8`v^Xu5=?X4tXuw$$-;=51Y#5a{NN8SQ6(IXJmFH67klmMb5qGS{(=i0 z{$yfL-eY{Nd$gndJzmBMrg9+&6FDNEjK>cN&$)W+2o3 zsZYZ4hwSe(8@t5vzL=;&c>1OAHJ?bj3rz(ww;NsKq}bScrvcJQBuiK>YH&8^@iTvZN6nQ&9N*QOK;aGfwU~5k^;4v1#2YsCrd?fBZ1} z#L33A%ZT$C0Xq1Ql#&XPzPbskba>o%3xqEgV3K5p3t2TN&I;!5uOK!P_z4>%_}Ar4Nm@I z-dr5Yf=v1G;PkxLVUv@P)YwE71X2O1d;a`60Lj1^>(Gx(uU%asy0qIXE1a7#;#^#T zK)cZ(HxeID0tdnx517C}jEs+W&hDWiA<@#& z8TLWIppDC`E5R#GJjs%jF09DEnir(Fu6heqHj_5e=nCe0W|1fE>Our3MK{rkGSG__ zqNDkeJ?;(Nq%OhjD-02M8vJEKQ&xZUaENUHr-Vf0S)-Z1)1(p!1#)I^ZQSQq1|Q)g z3yQL~@=tcw(TmS;=cnN^$29B;DG{);CoM;lYIQB{`Wi;Ly3S7%yCQ#QYq5NIa0m0p z{m#VpN;Wn5Q|!!W*kRpPH3%f0+Ge)(H;8%x{$?D@RMyx6O;W`+mOhfjvdiufC3>4O z!b9kE@|aT?&bcs%%hvGl*M+Ia=-H%i%eMXp22ss#X%QDbJ3UQtC1KDcTU%SJ#3;&} zdje}qg<%bBLqPH3F%w`RpFILf_{xHTZKZ~WhP>d)Xssb7F&c96I+j2b$#5t802Sad z(bS?}z`Sk~O83F;+L6dtP3TgdgfdtRSd;^oyANKJdhqbmu2XI^`}6LNFNs-6G^S09E5DRoQE;s8$N#^l0OBd3P|Z)F0Q+ZFht5k1-p!T%ArdIL=9Z*mOY+fHMs6 z-}H=(W(U-*A&-SBXotfHSy@@Z^z%?q(}JE5Xc2r(ON(OFhR`yY`f8!#U|}uaUY!bf zowERv`JI|tXg~nGyN5@)oGKexT8x~k*@!t0n5ytvS9c+9vK|m6a3zolMI|K}z$IJ# zPDxG0VrSn8ecki3`<$}S-%yYvx8Bo3(kW+J#%3WyL=0_9)|9PirA~KdsISs?YTnHn zf@>&fJNCq#Yr)qzV&Kp&R(*Zxv@F79IK2Mnvx;Fa zF!Hb;9oPs9`t>*FfUV5x*^lBzHl>A>75ALU!&(nz3g*Rrd(KkoEpFb)NtULFnKS`i z2qJ&=i7!W@-9L39Yu=11U&wYYTNh_ z(3Jx`#U7U%1qn&$vcb-g1eycRTd^c;=%U%S3(S77-aVs+{}5potT%br+<~b#>%XQBix1GRC3;i=dDyR4bMQbkz6n-@m4&Ms{{egTv~qb%He@u3Ug9z6Ndv zNMA4$m()Q6E`kRIVKJD61k3_(C3cP-a$+^6s{Wor$15q? zc5I{dN}=Gkga|Mjgai}~(=C1v-!pJMMRls>h~U8cn|?S0jnZ)GpB^6G>e=sq4}aP`y+JEQzo(sx?7{_d7T_ohSeAd;hf^*q zs(*cXIjuUWh{H-1k^-sZ_-s{y&1FVtB!t0b=ggM-kx7?Fm;)W@0_I61k5)yjQ*k#JtXnTC$VCq^{aWVG$-+yxt55d(3?Et%@ z0Xhh3EX;2m9zwy)ig0j)3ZJQ zGceKwWEq<#*uc63e6D$v(u6|5gs!aITojP&0dJkIcVPx;MkHu)vi}zRSqXXs!xIxG zQ*t#R0iT$dAR{M-=Wv;PQ9btj(^V#1T$>V z8?4maIKFYk!pjhg4w549vQyTqR&z$K?(Xh=J|13P%5z$L0s>@!{laP4V6ri>i<8R< z)M1lVS0}|3c%-Mt#)8t*shwS1%Bep1pKXGfiUDP193)0^IqxBWP?Vzo#*!k3D%o=~ zJ~b5v#&i6y@dUaKMD9WXy`LWaz;$mr0Ney)rgTsV+ET)6OZQdyAx8c!5z;EW3WPbvm}BUmQ2JwYA|ja0|4{jY4!^P|(oCfcDEZm3$Au zEBF@<4uD#be3A_p_jP?&Mk}P?BNJIv_sa{HY*p8+tSmf?5GD8XKQaTkOk?NQbp<^- z1x`oRpAIQ)I>?)B!F# z3Vw7fY;0_eI>+_Y`AraQ0)v8%&*$unfuzXEF~eye4Dy<;v7-TPv}17Z6Opp`9nbCU zZE91|Yr_+kcS#B;#cG&<5&(5y0E}Rv(SsYXVH@kmCS2q|ZtzY=C(>ziu+4zOV7>3h zH25k|dISP14h{<&x-w?x1A7j30&ukwQc{S*OCuxj5nTxXIz{Db^`NH=q$saIj_-5- z^wYPj|F1puteSF=JyDy4eYD{h5D-{z2K_NAwGqXVs!Hs<4dYG3BtOtE04^Zw=O+$Q z>%#FrN)+d-{e>*`5&1Y z>XKs-2TMxW8ZtJWo%n2m2Ep|;EWLP%c#^ikl35ZC4xInmG(Zc8E|xKbFa$(b)-x3$ zS_{J8x{O`{s8TD{ivlBf?3E6^fFYn^W2c?oq{)NY6wG+R0b^DL0sO6kksMuM+RB?^ z$rRC-105^&OG$H_=`DC5JM5*wIh?G+(4HeaEP%VSibvXI+HdWM%L?{gh zs7t^-BB+ms3=%Px>*%LW7S`5S0Q6n6%z;8SIVAGCs`xUt17M;~nbi~NSzvPADkrPh5oPQ z7>EHmY}l*Z?5|FaE@^prjD@L{#hD-#0KK_fO=fwxDN9#A8&lwapn{9TeX3J9v)$gm zT>`2#?Q>x(@HA#cvvK|FuHsgpUI%2PK+!DlOxcegiK?&YgTLG$>BvfeuLVavZww30`{J2UFOK- z+iDPfEjk9aO(}&i@@nNogl1iiDQRfJ09;FEm0`9}RVVEq9%h`h0p>8KIxg)utZ0AR z5to~hn<8p!d;1jtbdV~6B=IxwH_&Yaxg=s*TAC~Igr1&W_?It|?(PBrlJUsNKZCYC z=#zo@h6q462WY~-esOq`8~$=RlA4<2$m#N(+hcj)awXGLF&_#rAlJ$F0c(jhCwt;{_hnkJauM2SAMcQyTzzK;_a)4-XF~ zEnV|+4g2HO*H6TKpFm@1WP$U8ef<^}*EzcmL`T?wLUB5AmtR<3rhO!O0m(!Xoi6T2 z4QhF~A}Te8u%Cdf0s!E0(uc0;2~sLHAViZ4HzxA`zTR!lQ&ATdEA{*S-WRZ&<)sc& ziuc?*Yio$#-gNTKVJObQ^_^Rd>$zGa&D&1$!DT#&yEr?WX$mc21T9=#Ff*aEA~D6I z65K<--#*a0lB>gJW@E7cQdSTSL2LYRxqveQZ`rE{icP^%JlbG9$BCmO4j>)Ur0fN@ za^x<;H&$9!h6k(w^rIcm-}hqIf)U1?A|jEitE(Pfk%zt)4P;NAbUxf4J`Bzo50D16 z`ClykKV-cLJlAWtHZEnBB(oHy5)zWRGDl^eg_L>BOjI(JIT4bfkj%vfA_uCx`wru|6U>`1j}<1`}c?`(IgK(dargQ z2!zN7fV%4|Z%w^-?}p;OT9l=RTvcB4eUh_}EkxM~V7UKu^wS}CJV3bB8acfO0;(6P zXz(H3zZ#8!l@-e)wv{avN1V=`qn)?p363EXH65lRfss;RaR6RG&Z{Nc(AEM1de`ab z-L+272E{JlUdA-e5$xcref|1%#tBVFb8`}6j3>6`aYCXT8?FsP$}BBSEEfQU`!FMe z6#Mw(0RCH3B)7(&A%o6G5No*N0*tBoy><9yFI@k5fNt-}NdJx53#=R*3i|rYIPnln z6mxI2`6?(5xmJMwCF})x`T6Yw1GI6?+b&$VKxBjc`-4IiSLT<37VsoB&E-uCF=cI z#YOH;IFofLK7i!)*iz4Iz1XMmzz?X-Rz1TM<+~2MzXov&@(~|Or-JYpczf5|ijqDh zZv|{2o;=Pne{@{1@y(mIR$6&V*OGsWs$Q}*JZLDi1yymRAG4-`R`x)2$9}1hE7xuh zwzmhMroX!JqnnqP_ujKcBTA$}pFc~DuH#KR2V5ID*ReWKVR?J%Ll{`eGT=f&0ptQV z3C7Bbi_9dK~JC%m$pTiV#{hx@9$BlUenQ?LLN$~hKD!`yF#VIYz(c4Ctg0(65$t4Uep`1oOpz4# zQC@w)SFq<%ciVsnE3MZS8~6sGruO_qExh`dfOz1u9mnKb@c7@neY;OUAkx@yr+jDx zFcwO)*0d8e@K>?;5P=J|b*mX)5}}N#oICgC!sd6Dt83LmscVgARa9ORzo-A-%`5%| zA)30n!35sO&86CLVujuegIgu@Px5qMwzZ|S`Iu%^(~T*4J5tpta&_P3DJ(B9L$17^ zeEl-;O9Y2JWKS*~`LiIpjWMgFiZC{t@LfGSj%r9x-; z;!Bnh^$SdS^~eRBP$b!x|GHoMTsboU3CR!MoQ|^XuWh6>CU&g-Hg`L3>^wU+XSpRC zt_8GEK6X+=_PULWL=9>DO#?JiAZ(AfuS=0A_uXmgJ$rx#!|V3cEsZs{_w-N($O?VC zy@t(%tVk>{T|ZcBH0D*#-0A;kZ0{0Q{=Ie-8%wPDb6|7q)FxKtx^F>o3U8k!6LJ5H z3kmEBs^kQXqPSC^hfY^AcwGs%amtf_|G1}s=EYA!5?cTK>{ZBMwKoh3ZgdZrMsRTf z&E5(!7XGVWVP+u%1H&9?JNR=gA+?0<|6RmbLg?RupiEG)a*v(LQ_p0T{62{o654PH zraH0TF*G9eb#;au2!qtnvJah*F407W%MQMWSC1^FQ@7L`d>_w(l9twE^q7emAP|i> zDug-p{{DXML?n`n;QEQ{CMZZJEG+C5pMqNmQcC^082mg%EG$0nEJfh(e)#-3tMAJ+ zvNZfoJ@9F!l-=Zsh(kebVzQfVk4)&^jj7W#-|u0SEs|kWrd4Vq_CsdIyx$%rb0yQb=1Ncksw39MyYAYF*rBpD7Ba%p!(l$ zH*rT1Sz)GT-oMHiyexBm&xPKJ`M5EjQ_a%8A7A_irV`%xGjNDQ&U}bJhNlbMZ?Syb z&({~MU3&Ly@7fg~A2>1aMaJrFy6M%JsI-zzell*l0_D~4sU3%#TR*TE$!v{{qocs+ z*w{`ui4RQS`}X{P43qn>liuP9TI+>s2aqB>6!4(x1WPYczyX?6c z!WIcKryr|F17#-U9qjGvFzq-9PTF+jdF+k64EASk&T1zGUTE((wSTLg=P1vGh3}AM zz&fnt;j!X5^h`aw9@pG;s*U>(CbyQ+C}2vlGxZl{O*}gqMRZyab`OI8Uv*bH%y{4| z8QH@(4Fu+QjU;Vr_+}m0(wsiwfu+qHz%B$bz0s^^<2GWAfBe_)-}A4I3JKA}2?r7r zw+r_LU%*ouaa=~*FNqO2;i;J!dFbcA2hIB*R}>aT>5UO;WI|coGw?_D^>8hnjdXHo zglmN;`S8+-+z>d;F|6_?r0z?Bf=(l0SiLciDj=3Z@+{{0h2K~ewT&7lMC{{ zXY!vcVr_8xt5@g|`XiL)zjplfIW~}cq$tDt zao$i)4zIn{T%aiXcB1CQR{(o(PkG+_!h*Gv{Z>*^!yg9?nwwK`Tk1MHJDWcewz{ie z8cr)IHADtX7DDt<&^u%Kv$w|o6xJ;3d3bnmadDZ;?fso(lU9qluaOfI6J*y+Y=n|q zh}LLga_?@S*N-QE3taym_duZOg`S8wR1PFxveoKmj~;D7bK7%Pj8i-RH z&jBz_k zDNR;~Jl9F?eGV9>QxPsm;G$Ruj zDLg!!E3R2cSooqrhzIx^u7d~PBKk*szyn2LjE%56hOyk!c(L)+mG3+dlnG1I^XJdW z{IA-84y(nI?wc5V%I50o>VvVhE?7J(?PoMj4wRJwcmQFIVA|mI6cQ350h0pZj0^7O z^A(P@m_cvtc_RasVT{TT#HFOi9t}j_H#HmmH9leqqyOUtxCpieZg1loHi|_d@>(UV z|6RbP`c)jU%cha2uBsyZ9?l;_lJPzS-jtoFLFsINxhxVGA`?*)c)=^(nqbz%4;gG? zyK7%aQboEo>N~t5t~)BA4^r1ZH2r`}yIwkjkS;!kj@oVKM z767_KdM5|R>|9o?(gHCgIn8I3s;s=6TR_0EcJGBJ-TQfXwq1U)M83H(^!Hlr-k~Jo z3KI|1@#Iu(5XGJQ_h;s;?j!?$Y8n_2)Sbe?xRI6V&Z)UMBzOwK22gnZ*(Jgk+uR&* z`}W7kwJwmZ#4&xV`FoO`gX2z8QrJtswNdaa=|SA4k+6i8DpnR|WsxyQSiL*f4i^D} zu(V&ZWzv6hOTO21`IxY_n&1{umi~vrorN-e$cs9}khh#k8WPc0hhW;Vw%Zr-}3WomlDDT^0m<&iiz_(sqN zGj|~F08A^Rql79Tp}ZyMM3nNe11X~waL8D=xWo*u8pkK|8x%bA&(%G%SA|75vpsZm)e9^`W^QitLRo2P+%+Ere#7ERWN_95z*ut$gyEdX z{EK~{!#Vq3>)^Zpl&gbWUO^+X{QY~5=bj`3e;5ylfz}!LA-P>|h|6>xz=x<8`h)79 z|9psj4m=)GoW!jEx&CLjCr$~SMu-~k%S%5STFo$rVfpshSOy4Q=&ys}0aJ*fV%G}NL%e)^jmokW4(I=<1_|d$ z`oK5i_LMz)rXlI%;7|`o3(0Hv1`&}$qoSE%OJzVRQwgupnwuHN5Ef&E8k4pO8cn82MVkM}L+)TbD5$jAjGKlVx^lGI_r z`JwEhED-+y+bC4updd=AVzxmBZ@?_=a09a|WbN(kJ{U3m)aK(Jo1+mQ_Gf8_K~&H` zV63M{R@xi6zU~9D0u530SlCD(rsy@)-P03FFa|`L6hkr%A}u za|bQrGXT0MDJft7!x(_MJX?6Xc{`}d|A+}k%1Q3#52qA`m*Q)8UbV(1qq5Rvgm*;a zoa6H%BAv5uwZ0x~aWpk^ys*EbRFZ>(16?1aucab98^W2qYBXZw;_f6QCdnFW*Kb3_Q6Vt z)GB6!b{s!+JNCU-7q?Vg9*P$K;=Qc9`fR&oZsAe~gqKi4DXXxz(eK*xg{zx@?k+iB&Vi3d|b$p%r~*E$^yv*k46cc z+ZW&2BgE#)qQwjkc<(KOXxq@A1AEJ zgg^X~TcJH02z`leh1Tv(kx1-#HmT7AAihtmr6P_`Y;%HjJ~0A1Qtg%(A3i6x#~tja{1NI zgJxHkl)%FKJ`qE^ZY@y+pd{OkJLQ8B`HRqo>tNdKJ-c6B2!wA(hxY2)BoZXyFFy9j z0unzK#1C(*4I%V5?(kn%kiqsKRR9;{KyB+>n!(6S@T7cbc38@Ak| z@1p*N$mRcbHFZZgeSJJ{RU(64*N4T$J3+=k?=hdmt2D}b4#^vW8KFwxMtPkS6H5qm zK?ZaOP(%(3Xt9OMAW%6|&eoO}-a=UfDP8Bvugpa8B;i`ud-ft+f-z{QL$@3#Gig6b zK|=Q+B!qyi6a-m}e%8*bnt{l-#DasX^YkJN?1O|v1#cG@!XZe-^XS;ftTE0OmnqSddjb&&*9$T=>?QuMTf*Z`UIEoX`^%7FG}*Cyma&)63VXxPt{kKY!NOAN={F`+`EDz6O;{ zcY%?@ykv8R7YGIvAyja63$lFq)>lpgf@FO>P9x>zT_qww5mBCaAASp!6i;6L;)6&} zoKYl<2fd{>MqI`wCbZzZ&=ZcUGmH%$Z$X*SGckQd;d@0)R5TbYxRm3A4wiPdrD9EIQ5KNvvuvtWzH478LL42#k(OP`M1Wl>u&9-&~rj} z#QS*_Zkp3ix-%;)lQx`3%s`Wy2C8RoB>|PA-(YvXUG;P-gFK~?Eu&BD*T<-MaUkon z7yiz~7V2E^-|&3#{T;t1FXKwmr39i*g1rPm?)qx!gAter0<*KTOB0n%?zY=1T3H=1 z^P4}uThfg{b|g1&{scP;(wQhj@xrFZ<70nX_n%CnQ36Bbck~SzycSm$Q3>E~sQs^0 zq{ecCot7L7YHvsiG+*2Ui_6ZH^mSr4nwpwqZEbUoJ)lcEZ9>voE<90zY6eiD_y!*r z*XyFX#D1i9`aOHprT0_f{vozFuKmVrC}zYG+ze>p$OiY_gb3|Dmm2D9XlD<3+9CB6 zS!lm#K_dK!gl__{3LVD5vRp2!+Ehs_SoFiCo+cB9GfqrNyuSJ8O2PSObT~-)GiSm} z6H9XmGocYZU;E-WUCNPkr`G)SH~+tWGQa0aiN^s;I1mGKeI8aw;H!i7$L7Ye1G zYVV^ERQ}UOgZ>B-ouF2TlV~E=?(aMBuHv2dcWaIt6l7$*daixWx(%ulU=U%-)1iAj zJmHS$Y=PoghfhjJTYDZ289$h)M;Pz)NFqqfpJ{i*fZ9S=LF38omD5{WF#70GOsz!Ok0rLJ^Ya-U1v|8IHdD1MrlQbK3^PmuVR z88@EpMTJNhz6mo^2LdEXfu0`@__0+=osCK5N zrf#&`ZXDm~F`EkKrvRAizKVlH1r!gqxi_upu^S?_@3mlsK7vcUo@D9b>A5UD%OcjoY1 zZz%;a>Za?-^$^s$A9~*>x8rOUf6YG0eDdUWRmX>b`dd53fCu0me=~Obl=`wG>2v&vmwhtHYP{_V`Fvjb9mQHE(0qJ!@`E2b_vKv-DI#l z6@Cz+Ukq9)tS9qxUj?WTwtet97ZLs0|Fy`SYN0sLZ7IaMm^}1{oKPH5MlKEg-53Iq zlH^wX<%=1P9SwkLKl{%OvLx&UT1S1QFKhx#ytL$sk5|q7PM2G%=G9Wv5p*Ij@+> zw@ZEwkQr>Z>$@KqEQhf~#8R@Q^|9OgQMFU$SBv2{N8sNr~rz6%_o};LgyQxXgkCM0gt4t%zF*B1Hmp zA(4LI--Nu&1$YL=y#aaQ>9yZpQmlT_#J;WPpr@^AWlzY+pojjlcN-(Ox;#Y0h+fzX z{$sF0-A|Zj@Iw)$klzS(H7IwNT70uBty8y*bsTJBlxsAExfKO=>Dd@C^%P;n_COt012x7 zzVgDa@*4LWkYFr}pZ-7QO$~YL>G9?`h_Ei}p6QyDXagWH9}07t=Ow-Tyu7mT#BDC# zIwj$E_^dYS3?gcR=CfE^81%sgF7WkZ#L2Erp8Csn>SwbCVFX3aCc(Ao{<8-^4jv0a z=3Pe!A!=2?KOl2rIss-#_FzLUX5&*zM(uyI(x4!9i_=sF_)40=+} z>`!&>n402+A#9dUJV}=8wW;@D2-r2B00ZTwG9ow#v%&ZPTS;%b8U)@OXwrmOj6=Q? z7Z-#rNIX0|1B(`5jsCt~7_1f^d_oRJ`GnuLJWX!&|EAT zy>z#Ld8%dYG5?2>hQ@uhBa8-(%S3?;If@7rrlwJNcL0DSsE>FZjFRu)f7jOo%eUl} zuf%o!QS6kA%pNxx3XI(OLQ1~qA5R}TH@x5G?LbBP`&-RkWbH4cMUJa!*MHd&>$*-W zC$(0;NmIS|I8| z5A(I{>#g3eg5VnQ=o@9jhlG|ui#Z-{b?+#X0%3_UNkYH;xr6oXnWtR=i*@z%2!AC2 zH2xwYIW&6OJ1U|!w{ttEF=Rvt9+3I&8jM03@alJRU-hy4C6+l5seal?8MDyTm{Kj3 z`QpRLQcQ-83=AlOYKam8T}D`KwiOpiptL=Tan z5ZO9LniyflgO6g@EjrFXSuVrju9jAo3s(b({}*~u{~=skV;^_VE-h4l8?Bs73qnIA zvCvQkx=H8t=$8b~aq92#DcA`>u({RQhw(#v^Z}Kz^!@$OF#wF;xJy6AGvKH%z;1q~YKoHYQ@o*=Sq3g1bn)D}GxdHSzJ)!Dz3Ay8*~OJ~7ep zr_Ji!>dSE)3RJmf>vvyZ86k`cz#u6v&m|&n61PrN)YAKvyhn2Q15*+QBx-CE6569DS0&7U9m!2zs;+?Hr_faht9`-xMteCfVQP8 zUN#eVv!k)bxBG(s;84aVKK$o8@cTyS?|e4s#X*o?g~sI>7izA*X=oU6k!YL!QD)x- zT}@)YbkbE&ZN|ZSw1f@VH6n?%Fn<)Lz@mV-|6b4h}D0Wu}ZX&jATo{U` z9(PbJuS_le^#nWsX`v%($zpH~5Nj6MWPF4GX{?7|2jqPzA|bwvA=LCrb}lfJUa)`Z z!o;*UlU-I%_fJ6Qv?T`L2$(#NQHo%O^-mE=gzdOJqry#EZZR?DpxR;apO!|CFV^3L zrHZNV6-VP`E7t)1Jq5e`9lZ}X;amEPWZL~?%1cZYAzkkR!`jr z7dZqgU+tbWNq2Ihj=8-wkovX)=>Gb=II=wc%8P}{2EtyqX&7@kWIU5m*iH}CoPq|w z$*iZ8_1Oiv6F)Rfz8_e5D+Qe;R@Zk~M=e7ral<$n{G;QSwd@Z>FdrEO)*l7MfsMG~ z53c{pZTk&Z2KFT0gnvXY+2KrsG~%`!vHo~vN()Su5{8Mr=!nKCKyTb*F*VVWT-@vE zG4m;G=YHiJyA=m+x?4fW@x|DuiB*GVmchQ-?KdT$mdXfRfJzJ8^}rKd@GLOpjh(qDG0jnTWjc zDeg;-R;Ds~R=R#w#d%ey;>b$eC)G7Pva5?Of!szy&BPGBv>H?t`CDtwWLT!vm>k4So=y4PymThClG~^*V z_3YBN-%_d3*e<@f{P9%&VO0l7q(dSa%=HupVO$)cmHrS@JGiU=+2u7>#Wna-0MlTg zv9B61hCED-S8WBN49zO{Q9 zx&0v@-oIFu3|C%z=5wF~`25$(^wt}-=H}R6 z`yuT_|3~egX{c+w76zunP7-AjJ}X*P+!~k+7{llAi7g7n>GSVK*N+Tiid%@iCyYXI zckYa+UOc~eA1{;x#;Z-{^YC&hDP_IGxKk^r|5@xZkm!_WKIM*G*1}$y9IOjyQbT-P!Zi4oZU90*;PhVrFF!`F2(za}xZoOW=F+;@pmmq5dR}5Di&R z@jT&SGBEXILY}e0A6P;4roT-A8-Jrv8a3^bDaEzIaNB8{TwPu2bRr16AQ)A|YHwn( zH>w@NP&nW{bZt-OrH7fk)NtSP2n+AL0rBfe7Dp~MK%H&d!`cITClTEo2dm;y6)qy^ z-GPQ8@V?BhljuM4U73<2hSYs7OtzoXJsdx(y}x?abLNLH#%LNe_4H!srG2)HHeR?^ z?oZ-gUH|QLU(D$pzG&0wG32a;52p?P#|yx~!ZI25*d?36Vd&KfT-#+u-JIh?y1Jxs zxYz7rj+B&R2o5KVO0Ct(JwEF&hQMX;9XoZuzuBd+em=#R7*y-jS5|8&5?}RzM-|&k zZ-e@56c5bZCV=NntQ<%1Dh5Uotez98Y2tn_f`p&;^8>!Vr^bc&mEImptek#KEL2^L zxXSmc(NWBA_pi-A%NhvsgpC{9t~vKBM-GECdW_}Po6Md3XszkDSafX92+4Mg3qM2h z&r#VU2&!>8t3#u{%wiM_vF zIr9z<+zoE0+r{p{B8G+fz{f#G+mMZ0`J^MNjg9dYSIpEAnl5pL3YscQl&@xf2 z6%0H$(mG6q3WMTy?ea|yXD%tJzVoB`_`}?YNLfI5DzS<~udW$^(L&9*$(-LYfC#${ zekLr1^^efzzXH_v6Nsj`f8J^#A2Z`B-45XXeh;wZ3yAD>B+?X;3vvE4-A}$_aD(d;4$x zxv~8WzJ%@B8V@EQ7ma^Sys-LAf{#y0iwGWi4H#i{1pu}eoFuXw!46mDuzEba=*c%O znbMO&t#9;pM%Sf@+RMm;=JbxeqtTn)i;Fs)S5|T-N!rdZNNwL{cYK@O0a%m*J=x_w z*sq#yytWh(b{$p3=*Jx-2hZJmjsCRrqnkK(bd~vq_kHVsw&Pa4T&Z;n&0Dsd7wkDVEEH6~Z*$JtrSG*fX*Q>$at!CC3nWTg&gw5U zdK$hd4p-Pq-Nz8wTkE+vAaj$lZR#~Wo$-mOdRYhh2i;@=f~+3gqZ;v?;kegQRFX`>mJ7UJhdnD zj^2X_;MWYRD}0r&Gmk?|BCs#d;ls_S?xYZ9VUuYpiB!*Cexxoy6{Sq%HUOH3sB97k zUXk{sQi~bA&Arib*l&W(OVYn+B+Y{Hg~mWnMACW27qa4OOuF`pSFnGq88>uKlBjkOEdXqZ2DkBJgxtoPL^4AtcI^3pe-&IlMA0&Eb-Cr_T{CmnclS8m0xClS>&y3S zy(j(q_(^{U=9-Q2TNU%tKA+XeqZDKGQyR_DKc7l&s%9jRt9wXyYfkvPtPzy$s2j zx+mYLtI6Brr@|0yTdv3|syI{riK;{EkjmMopQUd;c=U*e7!3>qo{U*0!UTX2!=610 zy+==;OhffSgbD)24?1V#E1}&j5reV7^c);#VXu0*FZ0P$39EBnY;l8O&D;kMUMXr0 zYdE~0rL*Pic)yh<^(%UdVkiA2Ffx>x(eY>17WxE|!yFF!>17)Wj zWv2txa_6JQ5f>qc&jN&%7q-RljK#(J9m_zO@xLlTnG@XC?b>79+-L-p$219ylmGr{ z2I)Z>aNv7OVs0)k^>|i*q^ZnAR>b6E-KMiG2I~`9m1&cd3XcaV^(}fE6M54A=#eyc zi8H-mw5kl=@s5k-LNa9(GjI9>e%p1gp+n&UeRnw-{gxRI@a|q2sS{$~ec>Nxe5S^qC}$^tc3LR*!H#*Ft_( z+t+>4G&nPH@7q-zpru#kv}#h*W@JOa*AD4kV2&JZ5AVav_gOf=Ga#! zQtdjp2r`8w@BKkl1~fI(AOK2h_6%2IWH&0VutDdemWwYof6W4nAI?3@Bpy!NYr{RJ zxOrjKs7Y$;TT7v=8}-KH3JkWMmt=HERMTT9&bJqz&EJ}JTWaz-_Frh_WZ25=X*BenER>h#TOT1!zDs^ z7jB1Mi&cLx{!C+HvF+@WT}*7Mq3R0H&G7fxVEiq2*7mrz`eh6e1~cLY6SaNKo`PsJ z)`tR`K_}Bd5&|gNf9SM?E0P+J8+DYNabd!*AG5$DdoWqnt$oRotU#TuROjtzOtA#h z2fV_$G=IvV?7^((N2!X{6L>`{WizHiOa}%sre4Tv-TiaBGCJ31A%C>LTjl5SEiODD zLH{rG8BDE{wSpG%PGUTBLp2W&%#V4_=n^hg{|KFZB?6@wP5=(P1tuthHVV&Z!+31x zS3j)@GzhTu?%E5qR`yjmy$2RglJ+hdIy2Q{)o^TeyeDN`GWg`XeKd^?fwr;(r-~eg zGA|1}y8XiEj~37HzQMafkvC^VgDc-YPzhoUlK1GUpZi3h|WiH3E5w54dav z{I~p+qZP7yJ7BzBR~}P|K*W$r?7d?)ba1M#hC8Y&alfD8>73zeoRE5^UfCwu@@@Ze zbE}F)|GTUK(FJFoM}J;vkSg8b^N|w9Ctiz7L$bc?a^g=qhEE z>^^z*9x7sDu{`;9_BVhotz8Be<}VkMTwFZ&OhTo+M^#w5sZ?5vK5jbWZQO$3GL?V8QrF0s{LNkEvgj`8PjPJRZ%_R+7*GH6GNLFM{=}ZDk}t= zDLj%pXP8MVwU3s)%uJ*Qa_D{6vA4wlHS#pmqxOstn1g}IiM~BC=K&SWmj_xZGOg~w zXmY>+r6*=D39ufaSC-EhByHbtZ_Za{N2O|vpE|F%TCRDki&7C|rSEa6i0E;9 za_2ePr(`?AC&Nqc4Jk2@cg9rhi_La+pu9}GQ;jP_SW%Rz{luM?Pbxa`)E0>$+U;}N zWyz*ywbs>|62?|PGjh%fD}UwxOKO+$o$P1yY3<@OIxm%3PY0DVaQmkBPM@@QYdc*bw?)n~eU)}HLZmX*ykC-fOJF<)khc0C453Sv!kXCKVxp|3 z>aUrzM=SRZ*qSJxO`4IO)@%~rqe|Vhhd)*}{|=>~IW2Xk17(+8gL~@Zx2NN-|C-L0 zS?#ePfE9=H^V*@&yEMq1c=Se99*55+2%y|k6NQWs&fKIS|iaq`#Hel!1#AM(B$sK?3ME~OU-M3{o6i9^-W{0qz;gSCo_sRSwUj$mmRkWV>9QGQ2Bf6 zXFFX^sMXU38(h--jlz2UqyJ`5=kyB|VYFx1eahJhmBnMeFCHz>B5vass=4tgx zNR7lO*qAA%^(l;)4~gB5tv}ATR2r!lK;FDdiEm4~RJu?Y)#qKDkM^JQpQerjVH*7x zOL*%?To}(=SVIQ{EgVbCphxpC25ZT}ngAAomQ{%GZUAa(6*}y`!ldNNCZeG*G5x1; zWh^F{@-0nBraq6_b?TFnukThLXH#X!_1=;aef8_{P{vy$QCt~ppQ?AylrfX*tXcS2 z9KTy8b51+cG`}|A1 zUTxMmZI|8A!y600=>%vZ6zLJ(-gX`cvY4Gu&~#w3Do1W|*!Gp#edQ>cHgxB9<>1*Q z`|B7yzU@vWiQ>>~8Oy@$e13M$x{l%dHcDb4*4G|d`P;T@uqqwT6UpD#ME$5b#YpD^ zS$u53Tnc}W|6`J-UK|BKg{yfjf#1c+=@K)!pYju1I$wU?i)qswm#x`(HB{M+Z5Q>2c3R`@JEgYYk=rNV%6Zrz zZr|z4)$?ND+FQXz9z9%Ga4Nk}6Et3)$Zf15?{OfE~o^8Na2 zdNGNKjbNIRPWhiiH7cvc2sak!ewKNFL^d%;Rxnaeo~E7AXA~UoRTb@3IW8T;L>4u^ zcfXg`Y+irEewF-myL)NYBXWvtpMGY(JMa&u`R**3<;yRBFcX$}_~FN)T#TWMchSM= z6xs6_o5{%bGkLv&CjMttRM}Njil|gk1w@2$-M_{0F4A6;F$7sh$bI76$JtA_kEjyM z1vWQ+8&nQ_QQT5ul4fAXJfe4qpW0Ye{@~(AJH34+Tf-a_zeRJ=eQxJcyuiKVJ2;7j zn!ne<78;M9gc%jU4-5eay@RjqMm8jvvzDjXBJDu4U{NiA-)L z)A?>r>XCG8nQA_s)wejK_^p!jENKOT>#x1a(2?h*srzB9VSM;mNokp6La*Zl-mIYT z%yNd;fiPSfy?#e_vqtBe$C8KNoRKKsqrD^Sl`hLRI*x$L6?yWa#=%;jxMxhoXSXJ9 z53Ep7D$9ANBw-mcE+gH1MXW=BE~O-pyqGy>!KY*oAH7{$yTmz(H#dJtO0B>p!hQH~ z7#OK_z39I10@(_+f@`IYbhs6fblEoZ=Y^jU9am1g z4}JzW5dorzjC>U_Z&veYu`dd7no$ zl0!TiqDnzWd6E@bhk#dWlA}qJyLp_|U$%xkR*h9t)eN&3R{#6K@r6MvhcF`M!#&|3 zN%x7n&u^PO$;OEk7#3%kEPvmf9M@T?-^%7B@yBjO;LyU2G|kk6gq`HZ%G=0RBz354 z34C+L2=-EqzAfn51V?mF#EKeyQP<;|1^H82%H8-H`Ls0{liKtT@u&(o-oM3W%gLte zsGHMnYdP@T6_wSCa}6nGPbLY90xrh2geJY4rus6u2k~y^N*IK+ssnu8(qa|xYbx&7L$rjBvvo-j}jNnoFSztQN5muv=D zydR!okSLX7l`1E9>HBlU$b6)ze!eWCDr5d~fS1BZ3AcGpN?pZ4F8-KH%y(Fkpwie= zk6$}6Y__b(<{`R6yiN4OaAH$irTe7FwO<}0$ByNjzI`~OlBVF5<>nQ0(RJc^;~%F+$#V_o2AH z)?uex}mIP>8*(a!`)wA1q zKgc#pai@LChOBxNZniPFaK7rdmfN-m5_KvUOK}NluC=u46|q<~FG~a0MRpIqmkI%& zSQqXZlSkcrJmPylm_3w^`DOyzy$NZYC=^85)rup6GPY4r#Kp&dHOMBf87_-ZX&pb| z;=JQe_4d}iBsNyDmmtgN=Zvgn;N4LjYBXvLa$_c6Wr)wYdM>F}Blm3+I~(6zOt>Ffu- zMtvlWDO(y7&t5odf)+ic*Vfx%lxUMD^ffkjG;_sr$TgYbGkC-6@aL~U4_7^R zZX7Z3BKliJZQEY^i)^uRFZ`2gS6kF{{N17vqxb#fgb}$%d;97OGnHdgQ%#*4Qj+10 zV}OEk;4r^>MN9K3grg)!iSgGO;##J>_n7zpUf+`T+-5iMOW~p`+ATgp26)MJ@y5fZ z7+=;_=a4t^F=aZRrgT%}mw4?ysW35pd)U4uTo`JJB0x7MXpv3slBW=LM$UvzsdqZpadTO`q(i$|rBYVko_d-kwpslww>W=k zOlK00>Yl9oEf{Y%`xzBlhyPIRg(h{0Ux(&?GO8E3tI1n-O&KxSdepJ9Gg29-2j}k% zAWz*m5^o^XYZYyi{IlC~nU!64oAaT@Dss-m?(L7|Lch#985ioKpX8qSk z3`B@};OP{=+->mbM7K1*T9GL!D9=nw6No6&uyJ=f_uP}#C@JaduN39XCC0y>r#--V zU(xyCHnLhE9dB`nLbXG zx0s9D+(^o%DAbC`uZ8{{FC^y;t(3dppq|$&ce6|HP-|CB(UARpr^q*>i=$Lw!muLbjY+=4$viW8C0CB1(mA?OLDpQ0 zwsv8uVBgv=I_F`8Y0o;#g2^6P?6Uk}1+rC2tTJ(GUIiFj$FAl%fBu9PW4G^l(&T~| z%aS{mW!$O^KY~0(sgAV?>F%ZX{E6H|n09?e!wx;4O!J%SDbB1>%F|9bdckZV(iW85 z`=d25TQy=I@>EadvA@qnnkA_Vm~_9pao{IIGLwp+rtAjE#WfFUuMeP?NDiQNxp z@P9z$nMAwp_h(b_r?rObPD&IrL>~$8A5(l3{+TN>wfyN{&0J-bSpI88YOK@AKLX#M zmhDe|c+udvJmVeGQw;)lBPP|nc83QlGen&Fv8unsS2VRlY0FEVcHVOunIuu0Ic||G z=I;f1Hp14ojQ5R1PI(Vl?GQDNu?lsh-g;r@o%F7!6=emyyWdy1?CT%RwR@s{av(Zl zyZnmD&RsL*y56^CzEh%og;=m-CV5@$K;y)CLHn6YMcZ%jF9%B<%H`w@71-}Qb8E(q zZI5C-{mTp4^Xl1gXgTP3?rH%EZsL^Oi`S{%Uz!n2-^VkQbAjvqux@`c)#7*lnhhDf zXIQ$Eu2AA>vfnS1bLvNkC4vxoLD0js0=MI!^C5`i&=T5hd0>~%?>ghFFBaB&#nQ^E z)4h$}*X-1r?C<2HPWytU48`w~EH-LV$$Vmb&R3ocdha_1T?qMaUIp%N1XhM$?siQ> zoghEYqon6C2421qeK&#?pXz7W)GyvBI+0F-O5*gfmU~u4dT#4%Yx`bY3{9i+R0yRV zcF5MgcWii^U7}e26ZiYGAD?7rJs#7^ZB>a?N#vL25>;kZ=-PlRpSBF|h5-4j$nZpZO~ZL#}2z4&Q~U6NftpI^A6 zXd|T|;Lc!TkEzy;zvG4ux~7uxXX{f#6tmmgMCxQCT((}keuldW$h)X|L5g4{;H&z^ z!uCQAB{&9psH8hB7-vKHg9#CSD9Y{Im9jf`vN46U3+`gjOT4&iVJ!UB#s;@n`RQ0L z!~CrCFEuZbiq;7=INE6BQ5osyv>06Kxkow<)db z30!_iVrMOF6DbDZs>#^=^+S3zA78*NU9N#c2NgBmyKIe;-`>@~{Hu-B@HurY79q8+S=wS&Q>fKFONI7eT&ztDXv^dA@DECj7rUmt|8ONJdTA zMATI_xzpj;hSs>~5qDK=LU$%@2u-S^wh&csO*d z?eCQ~vft-3-+z)K# zb{FZ#=V4O4qf6lw?=~jJ-mq=j*5J^+Une~-!5}(`Q5n{~C04YYQlD(*e{qmWBv?)O zBs44=XYt+1VJXNwz47!$)79@9Me$pwuWT~!ACBRn3gT&h=IZmqI3mYq7wUa&KcWE- z;r=VeToDEeLbnHZy?$O`hko{l$L^IqRz^QM__k6_^>Ph-Qx+&yIJgkFGjlLkT`-?& zA;b`OwMvn~=NicvnU=S}!ZjhAYWs`1${I{eJB(kdXt3=jJFzFw;b4TZYgedaa@<%i zbF7*e&+#<*tef(~25y34 zMrv1P^?0aMwWjn>MLyOWXY_-itfSK12E(8_`6SIe8*_P6nkrmm`U8XSU%!y`ol!K{ zOzY@f%Drqn&Q;R~chgaT;QpcNx2e2kR7VYobH=_d!WI`IoU)$&Xjhitj=$_q2#QV%VX@(r5$D`Yv>$WXw?fdA>ltDZK8&WR&H3 z&Kb+B6x-tr8|+H!g+&(k8)_GH_tP0^G41Z6rwXO(aP!&i{g^Ms&Azj>B7~Cpu z<*WCQ_vxXQH&?pWr+0}KiRN#x|8Atb@8n)`T+*P0S(iL^+fJz?8}}7`Ue;()`4F$P zZD2)E@!5}OiXlSMmaAElckC-@ z{32?|w6&JDEKJ=dPxq}-zV)li;!Dt6Fxj*EA^&jSKD^Q>Wsk=e*MkMUe<=n3Id?KV zFJ?uU!NoJkh28X$^+SRW!06s&^m1e0Sf288`fgoq>Nwbw*4Pnt=!!Uq0@2v z7oATVE{htv|KZ4Q|fg;jm!?v4+1AH|sB`)>HXx@+zAbi{-%+x?HsH$BTc-&b?& z{}jLkAdy|8aU=8W)h{nHUN11l@qgEu@4bdi+K=uF^?p4or4Dlvyf2XSYV5b=TSM}8 zluA6CXVjvSHEKHGn^M?Z`NyH`N_io?o=~T1h#iGbD#kQgCye#RviE8-K5Y_NI;pPk z+dF|RpFQ=0Gvn~NqWE+9#%J;>2+Gr*5mqz{1RsJ0M%@G{f2Z|_dvfU4sZru*Rtk7& zckq+>pLgjb06^nCS2JI{tB~xCzm#|U=EoN%e>t|lhzbns9pPDc(SB>p+WGqE zHKl7B#|NFt5BATbj#>Zw{4vvaY>#HDmy48nWA*5soy!R5vqN1 zYqeWgzxpWgVTDPNp;)? z+k|~-iO^Te-{*s21XBEag|AUO;sQ{4%;!@SqUR~pTvhiYD5X<(T ze>skawsx<4J*838l=1P@rS4yPyVZJHMt9|!IUK{li{~$*b54)$Vr0`-3*vN_?Fj9@ zKKekwcH^WXx!f&Z&7-12Hy@GYtKZNGxU!#{kMjCSN}3%JYu!WJx1MM6AE;qSACg)6 z^Ep~*`hLV(OUdi}G~G9J&s1H{ZB-+#e2p3Fqv+;$82W^O*u0hIN`4>&viJ_PA0qF(0_=U_<8j z%ufS%j^a|GEsI2=N+O9{1?*XP5mzv~FHPo%X0`)88+xZrt2q!dC4c&Kf8gNm?&QsN zHGi}HNao)Pn{$YBx3%_09VG5&m#h3vZX;)w6g@W**hGE;f zuT->Z07;mwZr7|3Ynk}vAYTG3=~-y3rzjZz!AGs%tQ7qtlSF-}G+OXF*jix>HO*a? zSJPndvFm5W^V1anDcBYZ;>*o>c)^rWtxm~C0f8yaODt|m%0&oX2sb!gL^NSD@=!%b zN~5Eb1Q1{YioJcng<2st1eM_y6+(;`{f|~iR`IXri4<-CZ_0z>352sfbgH6MKH=x> zbi#0UryJr!lnzfLmMYYK(tCAh)0TW%#+N(S=?NNFUqb<<@Q|Te;m!8aH@wN60Oz_W z#3FHh(9IIiVB~xEu>v=5hqo!o^!$@Q0D~5?GQSCN*fG56P zg%be9x?9=W{5sEn^v%5rQyA;;Bx?F_jx`gOjI$g~g^t?>Q7`Fu0=TdQj@}gS*bw0G zWC2JG=XxFxoY+?)HTrKEYB{FA`LD`!_}Ef=D)}eeCp+vWfdVX_4umK3e3WthUdaX! zy$uSfXf#WsH6xIL+9H*Bo%0j%1edAH!~6q6wdPooz$;wW=mpjreOo@hXoj z+HFgmC;h|o&SJ3GSJ=f)+MaIx$mK}j%*!)10R^} zi$Wxa)2XS6@dpcW@3*yH-M^&=G`+_N*4WRa(b^n;X{&D^fTmn| zTl@Bt?>#=2%r8!^B+ut|?DWR=Ra;c+poa`R303UVn$d>q=G|pK>I1XgDF_ry@H#;QyNVB|vYKVdDihvS+8a(i|9ZdqUa&O$gOZt0I^KD&!`h zZu+B%k!uk?T8X_uAPiY~>`9!sfj;#OCB1&LKId)s{a;qUErIWW1g`%xNh0i^%iZEe z2gW~1NjKWprkqH^nH2wPf{jkj#0X`f3D+DyWeo*Eg=Stz;a9xDOFJZ4YEVHhv9P}Y zfT;o6a`Oy>_jm-j;S0yN9_LHptvUV?Pm1Y~7l*bWt>Fg*BX~rUS?Jh!x8o0yr-tp} zjZRR5?U^-0+rMNh#dc`AaQrIGhxv0LR61ojNHT5>N(YqTpKm2)WfJ;i9Scv?N^yY> zZ<5Ujuwmo#xzWChVt|Sd;3#Llz20|P)eGH_cYe4cVh5VaN#4i|HKVp@KM!u=L)vPs zP*M!%dQFXzK7XtvbcdVpy<(bgy9$3Zlo9A%i5328&h8C^Fuvzi74gnr1#}Yij{NuA0kQvVQ*EY}Dwq6N?(z zmyPrnT5i_4FZ=y@5U7%?3?7CGHK?!1OK*tMlq{-=0~(Fu3coL&{}z2ZzbrL==m#aa zG3I>Ym-vq2TJ$C3?+Bu7QJJO`Zh^sXYKTKb2}YRk@0U5n1`-~8+E-(iIDFaM977)v zxg_^}4faN4Z%&sI0m*biqWbknAjGNi1lCJ%Y%v{M%tz>4?p@_!s+jM#uqftt!8l*9 zqJgWAZ+5sF1xbIRQTrF(SMH}P(tV7XYBpeFtNuru{c^+4+*#vOkN*}$4hf#Qs@5vx zE(PwZbS8_HN&R0R59oy(gn6@UZ@uZ5#H&+BKZNP&xH)JZr$Avys`A+0RCZjb4Kz$U z<>=lwGe;dSb_ViDAK|t-&J)r@MgUfmQjf(mkM)2zKcKHL42;QlrRY0188C{!;#P1&;<;Fwi~32&{erx7X2y@*J2lqe@FUN(OMr&Tn@i@CS+kOTGM00s9m=e zkIJzx#l5hqWDB{(4OHlGJarGs0GqI2rG_XB-8m7=uon_G?{L%)>bt9g!v~keTW66u zV!}0532$u52~Wf8ZtF7 zu>uBIGj#fCw*7#tf%h{bh2Uu?FY7bSg_y?`{nl7#DEsq}i9dfJT#L93Nn86^ql+dX zHjP~Xnv&N7(lbbbgUixL1MEf!dVM%f6dPE4-{fv;JT&K(+>fqDC@j4O43o-4RlAOV z@h0!Je>5WT81G+6e@*{flpLl-|BSCfi+K9hU9PD2uNJ)O^Z^}{nQ^>mb=kO}oHhkh za=zA58IVv533VV+Au6ylqN`4n**Os}{c91ji%I^AC zLej$1WMM6>vw3g0FX%HGwBgq-!MUQ4eqwOyKFvB*P8!~d!Ia_y1%t z$=1MMEQHvy-fflxgF0pBgOWq8rK4S-H1fS1b`_We$pKZ$_37f)>cTyu3;WDciyfP5 zk>GHx=c@12<;06?LfZXCzy6m7i(@8kCnGQ}gx2egV%~L{n z!ODid2>?5>zog-oEhAdj*FF*6VUs0;jXcf93 zAzuJ;E8>U6qfN)i%HCH{(=Ins0xxTq@La@4lz-09mM){h}=NB2Y9E1$Dr1; z->b!kt*;G1U+DW9^HL__v$ss!!rRHSsk!df5a-3H4%xycsNb}x@OcnbhLY(|rp}#z zQXeo}P3t0mxj=SZ_>e$t9^6}AFNB^l+nw}PVbq)QScQ)IfkHT_k;Ys!fE#6NFJP5@VBOEqpj`*8d4i09+}IL?~{3E= zZG?(_5w%Ku8r`-p58wynB?O;NW}i;^PyMGkx82E9Q4ojoRZhd-YxWoVRp%{-k2~c~ zzR*)l6z0>4$?7d-7XS*)&(_lgS_R#LrggZ4OT_SiL>xx;w=rlRCEMPsnb%kFM6x66 zh25~7FAI-mefUe2(qL*9jNbBUK0Dv9?WSMgLUPlm%G>gXZ%-P3ENU&8uP<*(clY+O z`Cn7qSdxnFP*xT)(#d8ynp`(PnWm%wf(Rn{^#Co9`x$Pw4u+!b=ribfMOM4_~pYXn%DirEl|K*??@+Fj=~r%c^Y2yGfZ4=Mpa$^D+jSU z49`GBdvB_~3g|01RMB_QG4Ql~Mi{Np@+Z^RuHl%DGpD)D_)Nj`IXVyP-1MzsER)YS zchbK<>v#T2rV^ZYdyuAZfVi9*IiY{fL{_Y@Y~w35+XtALj+MDTZ+=4BN2Pc}e@|Ph z@SQ=ut1mb5l-Um%2Q<<9Ih|vQi2a(^X!w_{nsBs;+fzBY_!g2 zYM|7S-pG(Ls(tvUtFHF1!JCecV-LN6_|j)=qUPc3#}BTfDSQJuD&jIF3LC@yrL8Ez z$CUtK^5gU*Tnv}biUlv_hGL&B65-*ed*Y*5hFqLK6BnfP8%~x_-eU1Mk-fbPe);jy z&TtK?l@xRMSad`5Cr-BKk%Htzc9<7=uvxq3$ESZ-|4 zBbUZj(Hgd*62SU1sIB^QK^e3gNVrlT;0nENX~a8l=Z9`pIk5JH{@B3p^LjoCRFMj3 zlh2&Fcf{nBC)H)Xo06MsCGc%j#&;6^H+Ag_KhsMXvbjcf(Oa<%zI#BfVcg^Q5Xt8u z+k+_Z8T`0eRg#OdYi1yT6$d+F7W!CItuxT7GN`1PApi}3g*`?YufdJ0I+((V+Q^+2RZrGqNY%*)KpiVq zj?*m8Z#Wa4y@0m=#O4V}6`R!mvR`;c%1WEiw1PLTE>m;L=V$YRQtB z8L;7?6MY<5Q||10ndls-@0AoD>@YhPo(8~0odcK!*a5Fujb|n7F0UD76-`%r z>eZ+pz)hP0eGFQ%+MUt{u^BJB!Nz9ENF9fX4bt03Tdn;?nh}1B-?wKuIKAvdKt-Ye zp035~4cx+pw`JPk#bABKr}3!9pJx}YFSFZE`B#-;P?B%OpNNt)ZD;^pJk_Q);OYYm zdnQ1z(7S1yNLIELFsiU$WK zoK&wu>*a=t`;8```}6a8_#|QQ*XRCz)m-yD?hjLWgPgODtJr~LJLg-&i;xQbJJ7-6 zy(I_B21Gl>LL-_ll{-bw_ZK-dh9dFivB)}W{V-XPD_U_^dcp&zjL}Qlj4%5f*xDAS zJIeX@s(J2`khP7}lGf5tLW)yMcHcIYjc=Z;qg5=D2cXybJ4ny5rNjcg5S#+;r-f5e zDbyg6Z)~k7Rn<=wJiPp;u1OZgC^q#snS(cE|Z6FNb%{-W{4`$nE z;IeE2^_)PJJRw6A;lc}VLo%GK8tYPfD#>~(@<&75{6DSQmk7<601)p`=KKr#xc<)bVB(VPm{U#iJa4@ktm188$&SAlKGsI#v{_1*8q@XqshQ12&hz;f9mrSg zeX%x9LGV@e|OWq z-mRtJ*K+(_`IGHt+wbffATYL4Z+U)vMs@BwSHJKVXl!{@7%JwF^$H^0)JzY5Ab-91 z0~QiXs%pvrIM3yCD3JBwJqVwijdXg?Of* zf8DlyEA7PX^*>wC#p@f%PSlrd)82eTuZKNuq@gW)s1ds@ej@hhH+_k_F+zltl;3|` zvW%J<34QCZ{P~g3P7p%$*Vy;V$0))u#!9hC=e9K@c1_pfhW%24t*ET;m%cZ9e9YMZ@sWx<}eA8-4u!K%ejl5@rurBtoyN@&UJ;IVzfRaBn;D`Y3g zFs`0u;&0iCjHe)maaMGw%t$t_8d=SWA=NR|AySdW4*Y*~887VmEQ z&1`=Kx%tGwz|V-Nb)jniWWjJdKFu+u+>!aX3lITqsj8acB?{&q`tL2_V&eKw31PUO zB)HKVdL1hA=3(wQ@-CMh3Lt&Tclg{3^7v@Ew)npwnseoWwm4RQj zrSK!JY~tGv@M##uyoA)X-Za%Z)d;+x!T`fRfO2600xng5yP?4#+_d%>H^!$W4{N@_ zLOAv9Nt}69dd%#7RDF1mc~;83a*Y~3REhjub1$zA((Eg(JnXrr}4-VOD{4d0Msg6-Zal$OUs}uV|Ib*9`S% z@KAG4oTuh*mncJOv|IGpBMY7^FK2s2bh+*ArcL&JV&y7duz7vP?l63c|7C^hj}x7U zK?>{s&Q1>5=LV{|Uy`7R!%RqSS!ytd_fk;NkW^R&fQZ{@5dqI&b*P>}ifZ z-RpkLrmZ_?y?~Rf)35E(h6f$$hwZ~RF?){++Am*ZUm`mPf61qfc!HS4DzPvzhZk#~ z$YqT#E^l=)?i^QwXN(VqJ9;3Fx$X=f?(OnkR&8ghf57y~(p!sqlPfHv^USm;Ps+Bh&6pK<=O7!3vUT zNIlZ3&%CchG_lrB(y?t>(dtIirl9Sgc6o~v72I0s67N|LT8nfoeuc{IU%Q7&kqY!; zk_=ZLgZI_#M9vD4c1;b5`KsX6mYR?H4kS=qz+Ei+!ZAHMHmx2}lo z&u-oFI&Dg<7JXj!)ruaZPAfy7#L)E#_u(#R_xiq-h|l)PzZdEgMEnSCavF15o+bhW z|M;EHZSH4F`zI*fj))~=34P7D2m6fM)H<}ee37=^CP022PjBNe{z=)J|MD1hCIzlA z)B?Zt5ZZwXwR9quhE}RxuUQ(bPEvl_C3ZGd_VdqNUw!-OBS-7eR&SngQ;47Ei}j;y zCvhwVt?ps$CbDZ2o%-#*o`DaFUZY%8V#y^`+8WNle|+pwbJ1Sep(DCB_Y4%Xd%$;M z(?kCIa5Vs;Q{gQ=r%0(lJ?GWS-@n$r5Fm7S(9%zd3hBB2F{vfj4QVZ?E6uIYPydxS z#@fDG_It8nIcejbaBtgJ=Zu>F(hbm0zpf3=B)q=n z=jIF0KWS4-Jvh!VSHWg%WTkEJeZ0~DOdt|8B9Oyy>8uZ1ZdBoG19hs7SXe7R90Eu` z=%pW}fm7jle2zarDC&4N75d>8pzYZpKKVCKO*n*QgZhJ6=@7SYH!>S>B=Z1iFcmrE zM>F=^r!l9IwzApj^D5?m&V4_H*PkQ2SOZg6uMPtDTi<@3%Nq@(-aC2|N=iZo`~A{W zhp0uPp4<&DEAzd~2{55GB25;)eIvlGe!AQw-O{}pM(WHhqkr%6#(d=5?u)lw6pL2&G9_3LLZ0d@zgrC1sz28mI!#k@Xh^8Ra6rAT|_T9)$2HFf`c7Lb0v%&uq_DyrrNv+x^%!0@ZDoXdA6TsJwt{a*AZ8061NyAE_e ztz6&TCUXfUGQeG!$e&$T<9Y>fi}MrxYdNiWlcBJu9)3{#;&E7J#bNmIR~SttyY0Sr z8+fE`9HPH-E+ie};?Cxq4Wz;bOw~)7yOfXo@_b~d`qA=}Jw#Pq&?k;(M>Mxg*c|(y zw`W*TMHtxDHdeNN?7RGHryn@(>6i6^0~|+L8oxKWEZe%#FW9~;;a0Sr z*IqtuG;FBqJG~7Gt+dURs0j8&c9^u zff`(VE{-gn`G_(FAMtR?4~X3XANQ3_fUDrjJfSLf3Bkv}erf0>2wHWd;n};jJ3%?M z48)6h{pF|Zc1v5^7^p@4i)$hL4*1tOF3?W<1jAbPJ$T)Nx3z?N>*FZ;!b)-L57f_z zoq1niTwiZwArdCCByayL;G<*rG35BgP<;xVVnH6J+eyoD-Pt=xe|{d188=+utJ<|( z>Byx;oC@04b?|cpignB!hzeYr{t9*TblZ9#xVPt!1=2HFZ#i}fp|l@U1#5}7M9)NX z$MXjVj?^w}M+)ORc#0VkFBX>q7kwhRn+v!wN8-)PuC#|>7>5qU`}N=a#9ofx%mJrk zdffW!(kipav>Ir&PjwrGz?28vkpsmcw~=B6a~hPI!)=3J=Sx1^Eq7;ZRy?r3;~k~j z$L=&4sx2*RU0;qfyJ0MUl8!Anr#*nRP-&iJGb+)h3*3G9g!uwVX?`9|07`*3{szsq z1(*(1U`a^4|9T*;0CBOkEAIgmC-}LYU zpq}k0^+eBi;|JKRK#&kCKt-c_2jc-a4p>f`*-3uJoLYR~j=Eh+u~Zk`fI89#EcCss z%ucT*4%mDKr?qFkUiKnKQ)59Jf?1MWm`F(QG39#ZV~CU<5>e6aip1)VDPKF1YH8l` z-4D*qiVCk5g8XLfCV!N<9~*y8YpPYpQzGT>0onTR#JZQ$>gHjJuaihxHECH4A30S& z6_aYe%n)gfgM-X#J59H^4gWr@&}o!tB?A8)=h#&Xy9C36YFe7(UTk#PcJIWe52f?D zukQ_vhnJ{?g^ekfHK2I?>N_;?NB471l&t0AJyxr~ zVYKniv?N4<0gv)hWYUjlW@QfxYGL0y44(!EN`8uvt~iylxeDc&C+C7<%IlR?ZA!bf zKGG8{)p`$o*tREJ*onj1)bEOmou-5t$t>H4>w<2itiSrsbbmxSN;b=BmJq3D%w8Wj zJUu*~|MqDHPwg()@dqv5m@DZ|8cKnl;(!3jAh~YbvJbir&zr&Y>V!4SU8VN^ z>ZqQZP+vXubbU_0B91P)ADJGbelw-=eWP)!D0kO;-JoCeB*C1p-cvCpugCP_pXlmb zv8Fh=%M4TI(oZLD1_}H^na2#weW?HeO*Sqob8}E7g2itw5|2Z%vr8nfEeG+n?Thm_ zPo`&o9rRkWz~;U}Z&m9^4xQ&C z$ny=OAuBj0K=h3L;#^Q?@Zu1K)wAlZRU6ex9YtvA+mR1f3YTfkmk?V}qu39v^}ARO z9h2(};W|*^Ql6`Q2{z&!MO~+34E(pch=!M;m8}2-9hdp@VD0ui{LvqB6dpHO_|7TtG61dv zy`p!aOpGBFE1KK}^YX^VSWm|F&lFcXOhJj*-kWA@$R3AXdyPMSu{G@({$)I#Vk-OW z$DmC>Fx%M<1MD^?Q=W;cnn|b8$j4mGS-_YzuP>Hx6j5PKvYn%*rJSX4#w~aeY&)3n zJ!7CGze-=wuK&noyk0P|ct6O+KCK4y{C>MA5HmvR%rmm`r1lZ(HkTjt0`rAcSz*D3 zLD6DFbLCchNBU&CVf_cxhxF*r40w7UYU8na>Sl}29A&N5+w+5SJu|slZ`wI^h<3QU zn-x-T8s%{?*@-S*by5$ssbBS|H4wrh$#h!pH|CcA%wuQVHI{zCh4Nd1GiU7y*$ABT zw3UHLMXkFp@zn7?7db z4i(Gq(8PDx5OAZ(RPgUvId@1Ta!oS1*6JYsY^f!lROl^Lywx*4K6$t@##X!C2=xSa zoW^*?LTA;LbfSa%dkJC+U#Fr4hv%(t>dmehu5wP#R;d2-Uk4nrtt|oYI!)>*F0d__ z?>C_#x!D_|Ah(nX{VH$Ip&y(j6DZRQT4y2K!r-1ODtF+%rU@7i(&u+6V+jkDM#m>| z={L0<;3}|RfU9~k_?%I(a7r;5qN-|T!2IDi8k{%`9300xtkL~Ms!%S;;Tg$aPW98= z7J2Vh27k<&E?4#8%8;FIGf`jx)*wK>1wPUoN|m3k=lM8r40NL1Qucq{XYhY4Gy zE?UK~QWSO>d6JYgOt7~5tV(@1QYsQpkvpqrQH>UY6k@j9Xw@AyZ+j$&uzl}R6o|?_; zuQHG2G7Hd5^wUM&_zII(q?1R`IUt+CX5?47#*vpG(u-vH)32PT$^6^_&zI8g%q;*& z8Br;dbmmrjY)0?VNYpJBFg6UMK9m9-KlM~bPC@YqkUj7P78^sz{LaK065Weu9G*qC zTqE<*v23UsqCu5&_RQQPuX2|uY&ZQsMOA;)q&L-y4cX81yJsaecZ%T+4Gkd!_yoX2 zbPc3N{YQv8%!slrC3Y}h(e{&%!EWF+{As=%?#Si`4$1@(L`w~8{ZX*H=D&{KXGD&K z!Uu)BKH+l+iFX$W^GXSafG{7tpgC7@$Nky*vfoj~F=0;FL z<)+C^-gPjfJXt9SkP8O^-jQDiiy;G+Q9h7zRlpcd+3#lY;aK9s>V5> z$HetF3m)s{cm%n7*YWD(jTHKoQrN7XFBI$w!GnUsrLGhj~TES^?DDPu`_ z#*kD{{nTSu;E@W7{VmVW+136#*PB1}&9k~NFn0bQ6YA@Xfo|efXL;TUa_WrqN!_j5 z#v}`u>L`ICIyxkpQV3sGl<)l(F2xyrc+IT>>=3GDg!M@n=)GQ2e!GQgIAvUA#xwl0 zSl}rWrlk65+NQv(+33#zd1btQ1xlSi!F&w;-;h{2fam}P8)6x^gv^RF#;FgipJz@C z;6!`&f0ELO=qBuHOm$9t+_tkNqG{~r4?sGWyc-mD9i^PF8>{ZPMQ)3x+`hKz194I& z?-5owsnYaG`4|}p9Zoa>Ww$$K4u=1s%3lm@BE#SFa<>Z_}MByuhrkJm=4tkyHmv}7-8g{wy z6U}A1NU`c6nexayA$`Z)^x^rCeetfnK&*`V8vC;H!=1^r;D%T8jqgSpM$;aPzG}L{ zOdU1rQxPWpD|sfYwpm+DZwP1;K~^u7+zPN^WqDeRu+RtgO4!&(Md%B^;?qYX-^PH1 z_RCl{ELy|D^mQ_vkCKqTMae1^&|~t0S&yd9p=R6Qm`T3Z20V>atE1BS@Jd@CxtjASJ0B3d{yXaJgN4vg3L=pD%xL&Iu(ln<%c<7T+$%W>oZ*x30Y zqn{bEG$_HfA5nN#>4)y77YyAPuyZ9J(R03_VEZf10|TA{h%*LIBF>v#kndT3Bz`xl z?c!Gq{1cWgjAPW?gxsR4pSp}TE9o0M#z)5ZlB_Lt)nLmS|K!sqBS(5*EESp1LP`ok z@7XXD1@^Oay@nZmwv|;S>l?f5@H}=82M>yvMXzJ*#qYV*UW-x7rlA%fU=)Vke`O&x zD{@Zz1ofN;-E$WFb{iD>Sm?5;8ezg}MUY{@k-OE~5^ChytnJQ@60V!1mM^IQsUs1t zB2?mJ>G2-4ybJ6n<^W7BtVKUy->uwEI7KvpCXHOWhE^lHn;sF}=rg*ZP$;WBMpD;= zIRGDim*LIM&SKUgFOVK^@G`$dNXn_!?KJrnR+Fc_9PPQ4KYNhlWUMgV$3Nym%!yZg zj-*egtiRB;eAzr#|K$cajeY}8M_^q5kT%Ri6XjN4spFi=fe4&Y8W{UNBj3k3a%KNu zt(GS9FqKhQrU>dtQkXEAs0fdwo@a_j1eGGLn>PYj$MEld^%6h-T3K)-sh$!j=rpfL z#dgIJPdavNPzj4Nqg>wT2)1qC2 z*hWJqI|26gZ}FyfJyzV`Tho6TvrhBTX<;i$D~L(D^fi0jWPz^$^+i(?;1Cs$y!zz< zuZSL2Hx9SN>Klz|T_w6s!I1JrX7Nb)Kie!c*iW-|lnn|~NsG9z@)m)JIqxjv!^u3~ zx0n0(?Frye8~>HDe63&9bI{6BNW78-9_{6x_>cMK?>-GPV?_nX)2GbZo_VPk<6@;G zHigD%pWc*=EGfG|>c+j&an4F7f80~n-NnM1f~WpeWD#N`Gzz0!_LBYiHs`5O-@2HR zFjk7(TKu`Pjw=6wgLe7juPITB<1jdMW6mSu>07GT4{s;sVHDkvRFAZ3`b%wXkA_VKHpxX)cfUoOl3w>@$FAyg8neU-*ici1_T!9Fj=j;nn#R zmoJh#C36x<)`D8_#;`UHI$(EO0WJa{EJA`jl3ogyGbUHGWr64RuGI5;y6Lv4WwT%Y z3_z$$JZ1XDie|=uI>oG2tYnadc}VHu?~JvKJuS_By#{0#r*FlC)PISZ_fU%K&o zq!7XsTCeK!1>%G`t{;7k@k@nyNl>SBXV}A_sW-gv_#E~ zZ_K8y%}dF@x?wVq<8EL8NHqiE*zb@C#EZ2}#FP<9fKOyP_;U{+;a)BIKkEZuq5GHJ z&!QE`xO4G%!^nJ~(Fi;~cM52_livH2vB)1k-chJ#lewba;cAC>RF<_Yyhw9C#?**m zTHV@tc7YKVQ{7<=`!^Ll2^OXcj|%O*7yPg=qme;cIO6bAUR_}qguuQX2CAJ9G6mp# zZikaWK#wLFU>h6}tNl$lbE)0Z;7e2DX2-k1gbvJ~BEo+D}hwEIqMu6i0EiF5b+~M%b5daLI3ZkZm)utsiW4_{y z^QAu_|3ivGIAC=^Mi*7iA<2J1ZX-5$|LKlQnSJ&xYr+Hgtkl}fDU_m)LBN-Uo{NPq zut=@{$Cs1yzu;Kl_!Vgt`#Q0u#hYe)V3nSQ-O53;L?y=!^7C{qg#zN~lz}4(zMyyA zdftOV!^l|Wb(&62KCqm#Iu5NAnTOEsNY|#i@@MQB0lT2mteRiN7BS^qn;xqcoe#rR z!iN%CB7jROa5E_ma0Aod2O=2MX$Xpw3l%S2I&Dscp)GW|3tzJ^-CNaeQe(Lo<_Ia( zYED=u+lwmexpX7+Nv!?rB}b6l@kLp9-Th`5Hq{zk8+o3Dfzi^#W@yq6X{!oFr&Le& zN948$+cyh#{yKNT@`m6RG%MMO!|&eG2Y7mA!%K`b#T;ju<8GTy<-E0^0zZt7UB%BO zflIl&lma6#>8!XXrP+^h@gHnA!kKb{R+u=%qSCudUed1y=C$q~{vZGH0S(Jr;jX-6`i&EDG?#xP6@}K}y^Bg~R4u95>5ipzWmA~L?-j7Ia7FCQj4mrBD10R`bGPTm0MHh|l$$A0 zrFahzNTSyS4wVwJu1ycX`^U2%pN^Ng{yZC*Uv1I-hJX9~3Gm+mCkG%4HxQr`I{^kK z6V`{fA0(P#>S-RRg-cDTXQKoJbiU%E{0?QIUrPvVZcmnagbqf(C+co3>hQFD{8<65 zTh`!^oNpCDO?I<=*5%RK^$~V%StRC8rJhs6=G^n7`H>K(;`FK64$iVRD|5nQ+oc>I z2d0s}u(Ge>x^l%_4SV=QDlMK>kzHWvO+&dho)MUG@iVHLa_|)8SqTfln2z<^$Ft3G zyn0Bse%4E`X2#--7rG@P`9|y7$3nvW^fvPlia*pqf$i5ae{c(=31tBogTDYZ7AU`S z<&pb?%6hyqxMWVuzC&k>Fbz#6P<|n&a>Rk>ND3a4fWz&iM}N;V0-(=~U#mqxDv_b` zn!Lb@8sNgEL>J|wpKSuxK>4f2O`iJ?ZhaN85fM(kR#svByPAt~2?QiHwBpEQ$?m^+-{;H0_aHAIAOo>>>22PE5kX_~YkEvOUafP24u)uQ%mAmUM!A+EDDIkS?tI%RJtpzUL$8d>RoVg3 zG0Rg$ByLFNRs{)Ioc;fPYTr=Rr-GVS&&9RXXk()K7OCQcV5F9@Xc^-wUx;jmu`NnC zb*yMqo(i)TsKl4N_sAl^1vkKaQB{M0C@tgO7u%Xsm76^9P{a?63w&LGX`ztCmn2Q% zC9&`|GSMs}Q9TVcft|R3SFgm%Jeumr@cA3dlqL?N6!adnq6T~oHkcm$9jMUi39Sk+ipBzd*Dog9tVY}uWaseRoI=U=`WwEPFff>t?6vb z{UBsZtwT#uJfUJs{lpGiwhD=pAzEm$Z0VZ29-oZ3#LP{{l|sXIyq!N*TF;G0Tc$;= zx12RSm>YQP^@4&Jni?$ulm4SR6~6H!0@Fa2pd|AN`6(EoL3xUvi8h-TIsti1__t&$ zE?ZijgQwLM&uoV>*q_eGwUkJ?(V2Gc`&uC}cj0AQX6rrjs33T^hbjZ}YPAh`LDxW}Y7D@A+#k=9_w{XCCrjc}Y8?LSMi{PUXV$#he-|uy z`CRLAZg*}olYpwY4c{SpkO9m`AjalB?QJwin6!8%V&$v|xO_$?m$A30kjy1Ef3D3hnH2xci#9tzQ$uW2iXPUw(1RS>%t9{DwY9F`a7oZf2xFYO zD@}Ow8PW-8nzNX98p8r-E+mT?71wLyj7S{hi92FsF36lHRt4x zi!Q3*jf_{l46{MtKCV%aI^R7ThA|N9Lh#Nj6mWznnb93!3(k$o6IU}Fj61zo) zADH>e6#2cuceJofLzJ3A6;g`)5B2a@#ZaASsyl;s?gk|#kb!y> z-WeJwOt~$AH}js+09ej}L?G$8GR<4mQVsQ>0tGnf8GA}|UKP#$MCvQYb=qD=DS9~k zqm4b1J8H@cK#4pB#7_7+(r|Jn0SC`Z0Jm8KWG7{EmIEZ%ccdv0U-DZaja|r>I!qcy z%}yzyCi8uW*?Deh$&bKT88nYvY9qtuL)FI@??I1!_y^DOQa}{q8sX$nl}yy`gbp0o zXLocgS*$pWkS#>oJqD|OZQeLaVdYvC!nZq0{D$c%6VV`MTGDPH`Bj0YdizPQ5;~G2 zT$gGr5nHjoRmQVrsIK*&i+&5I7PeVCpKv_*CXGL6^Cci~NaV+m%#VJNk|miEnknto z`F;BN%%$b%N$Ae5JVUZ0<%)!0IuTnu`5EM?)e}M8;JWDpHsbmM%SWlFf&F4&rJG4Z zRWe`Z&9L>e{DQ#q<_)sO{#HMaUEcKwl zvu9R2RZ6gDX3sp&wEel7ge1|uN1}4tZUEnikIFul1Xg>q*`H|cE#_Ap0|8x(U01|}Y;o&FwDdVGhD_rPj#v|O|4(w5Z zmVBP*j73T0D|gZ|vSt@YNR>-<*l>4prYb*IM$CKV4Xm}7i>9$`#yuaPpdBj}wgKT$ zDiGuXR84>d53uk70u*2v{nzvbGHubZHGHK~S~X?<+U^C9TiSAmq*xqVMXV<{U5&r! zVN13)0k>J?!#4Q}fkPmE$x!Jh>!xq`325S17-uI)aCHUNPjpUZ`rdy`CM^O3X@;~S z`9f}YUs`=ELHixg9B`sCFh5Ev$5x|D5HL7DO<(gC1S^RmwKr+nCrf>wk^C+W&OCQY zJaURZ({kQx(M_&t37g1p8yAeis&jFJgbg#QjYqEy`ji-NR2yWJ7%!5TClPDF(r|io zu|Un!pd}xjy^Oe2x;&wP>y#AdG0FchbT*5+SzV^nQ|nDwGLM_TBVZmZ>EEo`WHbXS zl|AGZmtC8jPwMe?fBUR;l(=}#>J#6j1TZ6Ag7!`3f|`L0dH|2y3q;mMDJJD@E5Wc6 zFP}~VrKv`1#^=^Vg_Lv-aSdCVLKig$SZtNq%=@h1yLF^XE&pnKc#aJCdVIMTZ!aLp z#rW;@g}oNcr*_JmAaJH!qn}Z#uSY+z_mgAMjFL~rHXt7=@_xBKtY6n_``h=dT5VK4 z2Tn`&h-_@-ECU>P){iAbCV6tzVbz!#{b-wQYN+Ui^XGS- zAv7#;hYYLrVJQA}0`|GV?eI-2ZgXw}R- zXQ<*v=FLL2DLtvXq2>%?sO-n?GGjGj6UiNt$(1FWH2XAZ^{LD3-{Uf6jM-4!6JF*k zv=S&#ePwHu^mIMo*Hw_xFzi-ZgyTi0s2FVGJasEk$~Gc=$UhyGQeKTFMeq-Y5A!O1 zrc6P=@?zE+g|wu^Y{oD9x3#*penGUGL)|dEwk+SOm$Pl*Q7R*B)c9d-reU6p$B6dEMYC>G5qeizT6OW$%!bnrBGEd>-$EFr~z;^Zzn)-O6b zRV&*(*y#{~{q9rkR!xxV@`B3}fVqJ~+Xt9V0JB#QD8gYH5r=?fOEBbG-Hy2i_;LFO zd*{sO=6t1qHdGrZa8iFDPs;J)6+?1+H?12n7;cpBWz(9n(@N+lNWi5{ND%h~M?>d_TWG&f`2zCvWf9>v=!# zaoyK_Ung#l7R?k*_Qi^x*Qp$mg^)ENen5=wEO=rFYeg@8X|K`qY8(bW7m z=7ZU3mU znf$;(P0AmMR#|-+c7fWO8#DSc2B*D059m7;_Z>Oq_~@Hn&*SpvEp84r<{FY4JU+XW znB?e=2F(ldUYXiNuh~^$GVXJ(CjaUBb?s&@QWZm&m-F0BNsd6@EGf!^r^zLKX zlAXuCecbSNSn8wq`1jsRcRfR|izXL}A8Ru{eC>&xUyE1&n!rR|1$XS^shVfty*IcnsmsaNsS61|HWt%bLHLg$Wlvh;UlNI3rr zAMX0Bx8r-ox66u&zXwC}c|$f#u)MMm9X2^+7(%l~X`=GzyWx^nv3m8E8=jCwkbps9 zKX(UG?Z$C^VZoGv>HTQ~2q&lJejd6}WE}EaR$|qp;_pmlzSQQABMy3s)$gm)3&lCC zZ`#}{cxt%y#SD{>9(V2NU~1;nk&e8IJdZzNE_ob6mmgj+Q*+Sy)6R_NK7u<)7j<1L zSl>so-Hz*%iE}6G4xeN2%H0}Jy;`?b>Lm%YaI4TuYm?-1S_iBm4PqsCh0PLCseXQ< z{f(Z1vh^e~?e2fL_Sq$!Kem zX83MtBAf<2bh*kT<+FEdD!$DX_AJi#IK*PZKg2{{+IN2B+i#G^ihGoajX=*GK39I? zRS+K2(R-E1ZHgTmONq_5Vm(HKyy$AH;tvNeoO&Lto0e)m>-zP<=9tPC zER2sgye|Bc>_08&b&Hqdn@UhAoAKhYBHg9LZyQbrecTq2@c6IBe63p5R8!08yw1jn z4=-rd4c({|uODNxe4b<^FMRK3b2ICDo}4k+py=ZD69uWZ)atd#+=n+SJ@KnRh zrO}YX>ekjlIx7BBm+obI%6L^y&GV@09FC%~+%te;v0R5*m6Af>3^bekM!R^P4X9P5iKWtI^h7@*_Ag zUsvkVnQs~CnTK}8mvoCdl&v%0^5G-*;f?1%Z>9SETz0@%l2OMrXNS3{8S`zv9Y5^v zUCb1tsvTep87x_8y_%b}#QIJ8w#U@pkcN!vUDh|n?(cnR`_l8?Qf1_0yx{cA%sH%7 zMP|>Z(Et0EZbu${c_)L0UhT-oJpS^jt$HIt=`9@sXH0y~L@Yg!_tK1*tDH4GeSdRM z^iNUSo2gduPo^L;Nz^+)%lo+{L&3RN?-_E%%;CyGt>ttXh5kcq!$W%s zyBriSwf}32O0S%on-~C=t>{8qV1qH15Hs0I!dQ5*{$IFqAysS86BrEHUQ)F)&&Fxp2Y%TN})h6K}Z9dlO6F`cTdYCH0)gkxfrSGm+N}5PvH55&M@HQjNg3x z>1qw2T6%EjCg<1t{pbdx3BH7Q5d-v0{@sE2Lpu_G*M_F*GN9^e3 zZwe6ZGAh6FluOos+LCNnf@Y^l`IVVBTX)DWRA8i~evdncAD<%E8i84|-km6YlY?lC z5f*mJkWJZXqqe4I8avwN#*%!UF`w{z^m(oH( zN%k+1WcckJj%Ace;(wR)bME1<%npUiiXhoEF0`u!4oiFZO|RXDtZLH4hrJwe{YtkA zDfLHsIXh6*eEDJyLdNZ8>meZFnJ{q$MMbE&5<9&QHwev-7^BpGhr=0;<=;+FGIfN2 zs0ai=)~;O(@&)Q>z3fvQ0s^YrljZMHWM?}MyrOJ~7R+(y!;b|8aLG|p5R)Y67QQJ# zL2!#Ij&EOlg4L*rR|cs~J;yWF-n(DX3swj<6;(36w?Ew(Q!Hh9Xj0-#*d7e7;{zD9 zBATbY_Ttzi=@s#~+8|A7vr@>;YAo!P@L4`WOdrCnL=6Bx*Wn(XbzE@lhdUR+Bze8MWMAC86%~;)8NF4je;tSh8TqYb$xOxT zZHulrPG}g*0~v`GyJVcgoeMcI+RJ}i8w)RXMM5xvjK4WT*mJEz-RbS_7?M=f!4rW+ zHQrYyPQEZin&FObg|SHz%?F71RI3SBD8P4OnG!@61Hl;*K|wuP`dtWZ?Ye#W@3#DAA$woK0I_k!kL6!r*KFd5F3Wy zqGx3_vF+(EbI;eLPo^NN0kK_2YH>KK$a@`}iY7#;@9J)M$M$)DhLPrjvFbz#7x(U; zK(#}EQ(Cx81B`MUx_?mc7zIm*_rQTWWWOg|S>%HU4R}gsC>RsR23JXBLDJzm{BGT9 ze{%LXVR(=^*V&Oq3HQl(q1KcC9+;sC;uj^@bc=@$hF|1+LsEEs{f~m12N~tRI-nvx zm2Y}R;2<88pOaQPS|`6^o(23q4lMm02;@zCC&}tWpLliNNDN;QL$p~s8LBClI>%j| zr@tJ-%Y-v4XUXYkz{3;|g-Pxdw`WBR8x*{h5BXAZtB`}uqK{r+QA_hCoISkOf$LRlVW~I1H`7t~$tH*vxcGEVxVeDJ0=347 zxtWf@;XUOd|^%Arh9fMEIb3Zc3 zQ@%7=M&t>X7ly)J5mU8_CIo%Upn8W_qMy}M`GD-HMT7M=!1QfQOa^>CxLNGX&|xmT z&}oerhmLNJ){E1IA|fIS@Vbi-bTKM+CCs!>>^P5z=wcNWxnAcEoKz zIv+bQi3mvse((TD2*g3Ht$FjNJ;y+pNGewxM?}%W;`Nfh^F7S6KIQ!>RN59e=wPsi z2HeVU0RnO)_EEpn8HEzLI6T;OF4^D|2;z{SEVDRF4{bBkuRTdnXp;8)xd*5wmQl)o zUKzoXWg@9O;P?brOMV|UxEC@|+$L@nW#@L3AVPO1{=9-XBWxE7sY&P4zcpDYmoBDqa~xB(}f%$ae`kVn|P#7JFg&oSd9NgO8}SEdaJt zan$_UZ~Q#Kw8C=+KpKHt&mMT2eMtW9dNOBq=ui|T?T)W(L3F9tkWhGFvoTQ|{fUR% zetdiKtJZ{jDOnkBFXUIe*~sqwQv9>`aa@pJTa~H|hoJ6$!M^J6zXe+>ATcpCxZ#a9!b>w_#Xm_|(1kCJuBk|b@xkko#s6^m=YS!T zFN@myj)AF%Kd|JhVXk zrw$-j3!U}A~75xCxb0J%V4I;>`Os- z)pUYDJHDT7so8l&KYzOVEKP`$-vDVZGFu9f+=r+)i7nq6an7%W6N3~T z0zgz0U0;QlIEa4ShYvHpQ?0pT6ZodKc7#iL->EFEPvpT+$Kn8meuGBy4tii4Htl=~ z?LCg~PiVE*VvAus0{v6F4gtV~neIpA1LA(Z+2t^em_Zakaj8=kBGzY3yXdSfN{>SV zK(capofzckL(U~vh9i_usH$2Z%E}09KR~_#e95~sJO`BmS`Yq6H>a^tY;NE-`;Kq( zE-^J%fo&RLWgPlvvyG9(o!hr>moKvKgLwO{WbVr`f~Vg+JJ)yxF_maDXMrE4@u(Ma z_QU&*ojjV4QoWmaLy@e(c@C?L52*G-%n56>-J1GGZ0 z%ZVEORsU7xe~Iz*ajXk{=)1Z?WO`9wm_#PY-_-*C1xpA*CZM|ZRDgvo;(twD-FLQI zbn*e5Jk;;DUtF9W`T4yw9Qo`VvZ!xtVZ|!=X(=*o0FRx9oKdE)6UHFnyCQ`eaBkcu zF9R0f{j*IODgAxiHl&10@_jyXaufh#GZ1jeR`OrpJDGAKi(_(57YQM~CGFGdaaSTG zg!}LYF*p_ikI<+SFkRx7q@R;MWa0ntR`6CX6}{LeM5U;%zO&%`AyZ z8ip8>QN_r7{)~8L+nL9PebH$!G5kRxsVm7Y0NIs=*ER)INaMgy-wKa#u036aaAIV- z!c8H`WmM%OjWa%ntAgT)rL0dwU40XZymY*vUYAzsQ+XyOTED+L9yx-v8(D8d>_JZi ze%MJ3VuH3FBSIUpMHlPf(L`zE0_&3!nt>L_RKMVUQ!F6y@<2rO81QG>dD!l5{{U)) zm!vcSJo%~EDUCd){VN>vqcdeB$WwgQJA_S}i2owQ9xf2hBX2-NZAg z!k2(7&~1DiQyK0BJp;qt0wF%z?{D*<3W_Z5ne&J$YQ_+BZc#h{2}(p3_zs1FfL^w% z+S1{;W{GN$T##3q6SZ%PSj*5(w zN3M_gB%~#Oy!%dQ7yGRKb%z&GMp6TExN5}2ZE4lCOXESqjC6&*DW6xgLFl%a4=@8t13sV>p?m zBD`|jda2u?LX6f)^1Y!7?>Dv=FYd=@)!B;vky7Gtj$(%A(=I)U>>cMhw#kq|{_bv= zGY3?=@ng6SImF|6vmm)5sxi15p0_y_0{0SEE{RlSd(D6&q~dJgrHEJ;e9(SV zZBGz2s5n&f^DF-Z0sT0E7_1`z37U8Bv{1Vn4Myv1OXUKT!18}ix|0Adtl*Ez@>0Kx zl-JWE#V)#ob>wQcrw0Q3kGpg4o+7T$2@rFEO(-ZS?HFJAj>6C~TzXWT=_ZZ>MQ8x7 z)-+(=Ki=wa&R%y>3=xN5?0C6Ia~sD3FKavh zOU6_)f!>g|Y`^#1$*L0T9r6qn#3dq0?f3jHNDOoMHOlw%?~>Pi@669cu>5yv_fl&O zj9G1d7dhB0{@DteXb9z6kx8| z*tCe{iMfa(kfAzKJOA&x4iimj(%dIiAquPq#DBSdfO^r&!qC==*L3p3?-4<%XlV%< z9oCHOZDS;b;2J#oYmgS2(L`1OTu73VbZ7+zA`CsXs^4zcnRjM*>2sB@EMg5ZFQ&!H z{4pp&5TdRHI1kS+^+eM!3M_ahg-g%x6f}OGteGT39>t+@@fKp+AMdIacq-2iIR@dN zl(4>Qct6=&5{2ta3J)w7jCjwylb$~6(DCO;;SgGx#xEM@bUcW9TOR*@d>HVW0he-& zuvrTPP(c!>d};Ai3v+NeJjystO{g75NV5}n_4PYaR%`Hh%ja4o%l~}K!72N_Gr}!G zDG=Fz7MbdKXsh&I{Y{!o|NK?TI+bfXT&St3$+km;(9x!k+iUBF>!U~sjKn4F`0XvF zHFxgc52!XzhF(PJk5x}nj*t{=!`9tR(B%uZN+K=_f4LlBgDdVk{PZC-^h*p|YA=e7 zaUH3^57y!qbiKH=3*K&Mb!BR`80HSw-|N20PWyY0|Djp0Z?pTn1>*7w`NI{gCnm}D056eIL@jDmWY30lu3eIqqvrB{qi22y z1xYwA72hyA8O{rEZ0`EolWXrbjtoL|*Bsgx7rUPMLpBrW9=;&Qb;xIuN>~Iy7K37& zU^HlLH`3F&5TYNS-XuOd7%VIT)q5iQhzALB{fs<11BQ*_FcLQyGI24SeZDFLGJ)Id zdVZchPTav7K8;k5irQJanOjg*wJzGi)jd_&fx`&fE&U*hP8wQOiQ(z#>G5^Q;^u>f zv&4^)JY?;kD^mh<%?iZrD|6!XJF)}p`p@YxK1l@Bgk3rr=m8U7M+l)!&=TPhH*N( zEP0BEE!P=NOzHN^$~#jZmgBMEF-jVnski#(P#p7G!fT>p-oQ+SNr>aI393>F0J12b zbR~o6GNKve{O<+F>?jtqLq>A3=S3*;t`jrw-+=T)A|b&H0jKE+`pBDJ&&O5Hwk}35 zvTAh*=?sCdmr+}D|FMbwyxkpc1HiNjq=|2!i_n&LMiL>y!0~f#t_y;MCStYYl27Vp z7SWgW^(wgw?irom9~l>ZJM(+GxuscNU@7Ac%6}zm0kY(m)0j=JMC68 zgTFtr`O}Bpei)Lw`cOUg6QEFO15j@RhYLDf61-gwo3hk3AOwIJZ`4~^Al3iW)04v%Shczm2RZaCwxPry6B8tT zL1Z3*5em;#^C>GU6Xg>OG{6V)5F#e3@a&0mMh_Mi7u)czfH|2snyIU+A3NrX*G%++ z7Z$ES=?_?!Fkb+qbnl=*82Iufc~HDq*2`^*IDK1K_T`njW@XU3)9LkTO1^FRt@9t||7ayYig7J7`xp zIzH*vp3FhL3=(e;3Q+=UXB*_34l<(`qX@U_F;mM#y?OIF)adQoJJ;fbW`6$`KE?1C zm{UMdkbt3JDIP&bSNCZ_K^kgkl1(6Akw1Q%ByNbRJS*2Yz${kjB1G~9VKAq=gx9R1;jrY0*4F#+0AGak$)+Hn9; znHUt)Qd5thDE2-L{5!~sGt_8Q48QJ_4EeBIU-fiK#gsz`f2FlT$H(s7s{!ddxj z!#=tG-R!^{`D_!)E_4c^EK%3c*kW&QPY@dPwjPK(XdqNQwqSH~a&&bqAERl9t~(kV zby#Rv>^QI%-GiaQ+F+6df{0RR-l|8z%gc)%ggRnA)uv5cfUD6~AR2%8k3D@ysB-vBMs>< zc{ga&pmfup_BK*Pyhs&=*7P#?GNZttEm1B}(r2R;>*MY1Jv}=+h=f7^aJ3Ot#8_sM zPpV2352`8M|86~xpyQ>NNGl(q)+7=x0OL+chFzhsX^Brkm?LQ%WVM(>mD1eOT*_ZPt=y_9<`mIgOufk( z4aXl3{rK^CR$QQTZmiW(l!eyE_j_*9J6lopM5&T5GP(L{keFhbf#;K2U(nSAECkIU z7JSPL;0OP#;64gstwK9JIAwC-YfhpRo}QZ<0zhF6)D-t6^@GZZ6MMM1Grr)$t|s7q z%phtpcqUd=$!^)Qg_}(?;B>9pnhy=kn>G;q@7c3wpDMhHzWMLgcEujvOoY4Q($Z(Z z>T_79^K~+4P%#bRrfT6uNqWui2R!j_x)CbOc6DpakpP#^yxB!O9_(J{sfA+U-ayWy zz=sfREm2bZ=qU~$2K-Q4u_9)AAu%2uzTP;r8p zsO^cM`;G8%K^!3$?Uz>4E2XB^mJH)d?d>%oBH*|{^+4kuKckDjch5gKm=<>~1qi%d zod+LMXG{1@G~90j6U<`Ucnw|rIpklEo!$pSGFud8ql{trvl$0qQc7hKi`1z?F92~H}a%xek!c-GI zYRp9x*zShs4}Wt}?9i2IbE4~sR?ZciPe&M+-xF=w<>_^pU=Tu;`|R&cI(@GF`$J%f z1z)YvfYp*@Z)Ii40p+w`aBy&U1jPw8HA@&LsY;Cpqd75t zLwF8n%G^k%jSy9fU+?7Tm<*RpnWGSQ_=5G}eLFAJC(LtJ{BpZ^@nRs8N}22UD-`qx zc5ZU_HpzTXG7tU7hBGIU_WIGidWH@atke>a3!!+RQp;vjp*s5-FgEqptz$^#o-y8_ z(;u9wTID%%f?}J26(jKml`s94Ot_LdZMJ5Ac5Pxuq$3?Scell8ml>5rc{L6u)VO9NOZ zx7&%Pq=b7C63OY8?f4n+KLKch@njB1LS6tYYI%8?YU@_gu|Tc!KKa->i7=*{UW_V& zg^{lK=<=WKYP}P#D%uRluz3U-{OMlNko@K4%a=X+!@EM2NQ#5c2iY-JFDZ?d>-Xai1z?3?thP+k(oI(KCXhsCL24NljO>v@<{iKqIOb7 zAkil@0$3KSg!6i2q=iEPoM4MBYC36e7el34_^95xk0Ejv2_1b9vnkw|13&@VJ?fB$}Fc9s)n zNfcblJzUV9;mf%p$R#Nm2lS}#GUNEo9V&qOXm06IRI3j=74$n!<+`U%_J2T;ZRAPkAoI1f%a|zcX6vm*2uxErg_L%P} z2Z$-p(V<60f9QNWSK&~v0SYt~4UJLY<+_rpPrsr+jmI6tRnaeMyNZWLHU%iki=E4eZ=$mUQ7SV77x zr^7-d*8VhQc88tEw?~->3oOXvK6Q27`)L69(&=Bt2^b`>>mm;neaSl+9MpMoxE7&N z72oGW7(bXjE5Gu6wJW_nQ1@jbnlzN75-0c*1`43z8s6>X$JYTjd%1Ih%jC=%?98p} z@2~XJ{m)3mNQLg_M~AI8FhQhcLAVqyqG;RW+B`wC#r0@Hcf@24ZZ#R@1+B+EO5Ob~1vvyj3)LF?eg#}d>}%4uy{AfUW@{rWth1t6mt znCP)n7JP3n6bTIRWLDh@BtR%A$A}NrlgOY;eeQvKVhB)v24r92JVFR6U!h&u?G$u!WfRv0Q)xCfw&q~r$`e4!fV&lxMpvW`*S>l4 zubpk*2b$06fUqznybHjjBxVy76*u~^{W%vSivv5S=jVBld%XLLn@_5G03*FGn9i@X zzR%PIAM4aK3lfxu7-8SjjeT*x8z?CUU<>VLx>Ot&Kf<3egM_f*X37_t3e)hYDEeR~ z;b=iBoa;f9c4(x@85=)1seWTe>htb$k3(q4oCUN=NIT@NP!msqth%VMx(~($*qbA9|H^J9lQerE`|Jj&H{WBvm-Be->M& z;jhU)#DI?^*Ud>#fGB$dNDZU~3h2@bL?GKj<3da7eV9{jMLRq&B*Y3VAy%m?ba>Y| zSkjLH%992+f5p=?o2^it8R~&BtNlkxiV6xWL83vr1?aE2sj1x3>F4NG6=6gs+b{jE zUk`=Vw#CtABK3f$48Cf^;rE0RX1;#?dVCGf9!t-PL}J`$UvG#tkT*lhK7o57+oo#PnH0aR6e4IJ(YfafAsMC+c|(qoUJ9_hEEa zTL>&ydU@aNt?U~JzDI5xm=NvH&Z)&2UbSxo6~w8>FM=!%Lf65xz`T6!d-N9*OHRhkD|RR|Y7_8{)y22m`%?P$~gC z=eenMs=_;oIBZWT2XZ7%S? z2)k48^b10F+rlmrlFCP@K@U&v>V9!a4V5r*WjGo=RAXz_tf{G~q4+X2)e5Xkiy=e7 z1w==e#o2R0W|iKjod|dhsD+-1>2{m#{wtwnWlL-Zk^P>hS7d?I9EO12`VAX)*d6xa zWeL57LwN?y!FE+1KfZm0Fo^Hhga<>0st_v*Nn(P?;sCjGv;6taVs@T%8F2O+ufgSP zXJN^97T}->jPYfD{1WXR^j>K2%y$MeLkZ2{3S8Juuu_^CW!I2O59ne?*x7?{aU)V(Of z%XHs=w|}_+bSP98#(yr*a41Bm$BBhLfBxJ{MmfLJ5^n6*FTs>k@&V6qef$st0Ph5d z@FRObNkV49_nFh;1x|P%ChYr}2`q*=jAw1q8AG*s){i9=7nT*f%Fg#sB~!%qS9w=s9bSmjHqQ zG1CU-Oel+Rs$T{N<&opl(hxlFNnjQI$58-o=mu=P22M*b3iPb_uWfxfS`Sv|0I2)x z-`$a+#lpbAmCNH#x8ojAFECV4PauWG1B=CZjAz6wU>0158hiXHmaHaZ_G6723S`-ON)f#E$nH}btdQUp}j*LJ5bY4w4 zLPA_T2J2>o&Xk_|I)+z3`!})bx3Y||u(0>ltBBk$>*_MU*x=pu_xB^h4-F0N&2{(Z zqjV0jZr}W7SDiM!1P^@)&mo>eJDWXZ=fYzsJVS3(=vSNOR3FQ!){go8`6laOKsj%L zDV(;wvEiCV=JCw;2VwmE9%F1dlj}MCo?Mk(T|NYeOa#@5&b4i+>v89Fk^2L@)caQV z!jDfyg6B}zt@5XLdUp+REDmuh&8@ys-s2Er)g6;`Xeg(3(WA~Mn{p#leCq|qcYHKQ zLvO4^ul^8aVRfZ3j=e9uUy~-;P8F3o3J^3;XHi3Bvnlr~D=BTjec=Qr5^iyDaxxDm z6`7cb>~9}oU0}zfo@7{UC~N^O3&Q-%*3Zp$i{~UuhHz}i+7*lkgDlR8vUH)ZwM*Qd z1Vg|SIK<;fV8-92tiwSv3=9m2NtUE#;gv-?Z{o7qrBZ)5@_{ASd-GS0@A)Hc+(^A& zt=^v{O=I1}+E+#k*q^QYZu#ukYNDms*xR`Zh5vB@qn?oICflcDttd^pIO^% zdOP8vYvSON8Sjy0GFFhgq`m}wi!f2qHK z`ygm)US8hCzS53|8(Qa14-zIUcz7oew|>BJeJXL`C2d)pGq5*yV2ZC^y`t$J0o1NF zaX);2qdBKcqny0H5OwT^XCWT7;-PCFZa+fXP$lzLcF6gi-L&h6fsy38_u98_>RT=X z52(@tr|C*3=XuObG6|b<9X?$6?t-+G)TAM6MTsK|9o?Rrd*m7RMs=xsKfIn3TT){^ z9C=B!Z|8dL$pdn;UuWwiny%@mX;mM)osqcTHl zQZ6qCJ)s8k18}9UkcfQkD##>N20d}eCM6=6==_2q3SG%CI{o@h=_4#EEn<=JmU|BN zoajDD&%`LFJ8xw9hyLm+I?VBhp?mADKx6zM}lmA*aA!Cpf z2p#g7<+)Zs%e{4Q)v=%f;)(zPQJ**xZbjIB$TdSkHvROh=yp;i#2WJU&AewQ0l{iX zwycwI{6c}W0bQ;G4*gQ+1NZI!hI|QQG>L?`0a7Jes&7FfPy(()N)(i|zUduPc#R7A zoiQgG`-WNf9vqjbNgs5P{I!C$wVc_oasBQ@x834Dy{QNw3B52JNAXa?sF3e%D@Z;kkGXhE8v(#jHMPs8H z?tmd>T36Gr{p&iPZQ`|>=U^IXR**hX{1GSl2|jK+W{VjUDliRO(h>Lwmh_oIwv}^SuBg~+m2hktd+jL z>)8^09;}hx%QvP~+Vg^zzUE{4?`Szr9Rh-i4z$TA4>N7bEt0d4_=T<<>d<_o{Hk}m zHc=aum^8l~X$Z~bZ;-E^^Rb`YsoSD)8&|`OS6axkM21d>LeL5I7lC!i%YaiSLGw6( zB|`KC&ICd*pTnID2Es67JL*c>Np{NoPS_do5YI>W6J$XT0cS}hK<7LC;X}yGd3P5% zd%i+S*ni$vmmMdz^V<+^?C+*N()Ii_lt-8U{LoV%y1Qg&HyJb~sR zA|fgeM$a=V+3ib(1HaHEIXuSnN-Xwz<9P|zip1+}Rxe6B5*1TQp5CZT4Q4Bpiht7C z@R^@Oq29REl^+MrB`A2Z+llt(Po2*BiZ+*JVZz#f*}AdQPEQqN4Ac9j4o!s`g0pg=<_Rd-|Cy1 zxI{#rC7+o@ECY)r8K5BLgmV>$#lUEAP+#YwLcO!{=8lQJwPrbWeuSty{P5(leLqPweX@l(xLd zjIut^T@wUpGp%<5S~=x=kL6_y^`4+&!M4(o0)eUW}KyT55Qd zn)+LPXU zX7G6lzKrCKiJJ|pE!TzSKg>GbWeyR0Yb&}PvkXATkHz)(m^hN zt!H;tWJF_%pR2lc!4HS)H#Dw$nzk$)t23)W^MI0u8!$aR$4$hhqbS)W(eU?H}z13j9P@RCL~{y3cfe1q1|B#63(- znWGV6r@Sro)VI!jcH|Yq;9H4wY2H;;Du{hw-?bbS>2LH#dOwdZcW$tTTJCJv!rS|* z=b41{ink;3?aXCV79A2u4l4;;zfRb{_>K=YmrSn^ED46><>hL8{{4S zdpg2WY@5g7d$&Z46sWYiWFHfO#wYIun8UaH7nC2~MD~@&BdKXAdJK0>{iYA}Jqq z9PHzBVcP%lsWoc64JA~?w2EuCda;F8oO!3lc#7c|Y7K4{694?Pn z1f?$)o%^iw9eLf;y*z~%H)r3U3yYxmRT2N_>%~m_-5d&!KndIltS)Bb(J@AOhLcDU zN!5lA;|nsG3uxclXFh1|eH6d+{NA|Q|x5(IF>{bXVb9Y?a= z5`M6KyFu0@+JDewn#o(b{O#AD8;s|y3z*Z|0@`fX&+3N@Nx8Bp$2fCGckbZlLp3A% z>vHw6eK~UqGpg$9`#wOeEH(|SuX>aGvFcq1IH6+G)}qQbL+|QV~`WP zgvl_n*9;xx-M-6Cu#D3tWp1JPK;Un000lcaJL^bB)}n0rGCA1-u$A<`x}6@Yf(!Kt zFtP97UrgvI8Q{g#I|TNC{({#kEa>Ea@<43!kMajRmmJt{q+Tnl2s^;eB&x%@U7u`! z0Y(GnLtt=l+0X>+j8I`uKmE|wwheIxolFokUNtt-va_?3p!4%*4gSN-?DLHtH@6o( ze_YW|L@6eV`I4=0xf^}{nstg4--!-Y3Ck3>zI?%U+-ysNIs@kG3Xt=fn3x!1q91XB z)PfnWpvUEbead768BtCje}+QW)}pmTw0)D3glv&>c$tLO``6n_?4Ed_ACnFS2N+x$ zn7VQlk@P$PU(lognO0Mep|4$mOwIFr#|Av+=` zj?@ZZWCn2%mAMgy-~pLwNk-EBc0It6fZXkzcS8H?_k46;En4XrRj2%RYtIi44>K?v zpQB9!AKawE^B#WHjXIF)K_RWmWz3I@+XZ41y!!x{F-1k<_zy}-o&O>=?e3z7AN@%l z3llkV^k_R~w2+?a56=}BH<`f68XZZw1Q95%x)U6J{_xVFB#9^0LK@ZCIs6VVQZ^7? zJl?ax|K5?8xxUuH?jk#I9oV~ za`kSs%PMbBnMf=$Q!yV6&vMq>%z(W$X-`0sv#1S%2YPyVMH_Xp!b3!NQd5?ow3c1KaF{UQhP6N9ewup z;w{=oUF%D_hj?-wvB}{v{wmrsCKEg5@6wPCILcwr`&3c3Nr|A~%gZ^hv;3UH`iryY zmN4VZ)w{!R7sKUfl6QcO^oC5g0WX-DpNFXx*Me-+@XDW-F#icnia-T;FOM*Ua5Q1L zuqq0L!h14xhKepqQ^qK}yB4&wFt{ZV(Cd}LSnHA9U<=BzSiWW29^7pShNKj?5S?S% z3|qLZ-iam0KYzt|E)w*Zu&^)yobS~ULN^}EWKmxS^Bc6>7+WuY_fA%^tBCVS zG3{m1;nC^e1M5E6eKnI`hvi+ zp29}=nS`74drqeHD%3OkV`mwu4J_V$dw#!JtGX^cfWu)(zxsPh|6GDik9L{U&ism1 zm4lgrLNuDE9J$_hm`?1Gzk4(`Hum@a=>BCdG+5E;eD{6I;6TNq8z98DEiILnVaxVg z5XK0vVH2~6AMh%QC*wLa;~OlWdVltym$4jantIz@|ImIex?J=km(2BJ%gcS@k7HN& zQZyfRP1T)R@e^&lP`KKehaI}B>>6wmZx7{HwtTmgIi6Ftq-vDb_EPxJ!)Fffk811= zu^5q^sg3+=YHYCocCe}bbsCPKR`kuu>@zw=A~S{ox2;53&SPXZF)@)4jbWFA5oc5z z2h8P575kU+&-5%ND;uyToSEK|gGI=hcN`wrdQH`Wpv7u6guT{kmb zxg;O(AzcCLP5vDPzI!AOMd{h(pXQote(Y<)9j>8mOaJ9og+9;yo;~NUU!Vq-K~?}@ z*8r%{4TQD@R`B$c?`oMkqb!F5r7c(xAHvRd#3v-gN_&Z+7hnZ`9+C{@i4(PX=<<_< z6n(h_#2=E7GB#N+@Jcjt*0xr;O?}DX_;zsabhr3M8MX`b(OMz1QIa>;k$E}%u zlSzLfB>3F#KcCNc513KbYF@izEojR=Bd|vA!hvbop{XTiTz{LL1%TcZv#&Me8& zgsx@Mamms%?KYz32-3tws|SG_mQGgp5-d3#lQ7%S$OnjsW?s$S#>26&+jW$UKhM>- zG;yV$KVoSu_@-&J7skbM^TBfqYTLbicRxVHoo0lIn0MY>UL zxZ{I`@8_nUq8kdSGa&LA5?lE7MIE%dUR8#EUpT9F_gs%)HeYWm<5sWODIULEkg_oA z5_RX!OB5=K2(Ii4(r6Cmw(_>GWDH7`*`If8PEFz38!_7 zJk(?oR@G8E)je$vuz6J~h5iW*T9$BleyM5X(CXc{Auh_fx7@DV?^tE!Q0R(?h`9b= zTO=7Q0$ht%qi8d1XJu_d09pjNkGiyGuVhrD;?G~|!G|kDO$ul>D)X|uurqKpi>YhS zeX6SW@KWz-$Itl%54EclF9_&ut(@|T9$qXK)V}7n#{S4xt2Ke4fibJKL0w>GFJMU( zCeqUxWOFh8ON0K*o6nz!QG*cot&; zga(M#99hr}B3efncS9C}xabbUhs73uthNtXc=&v|BPp|TswRiaO!G?&vu^O}>)dNf z*B8`Z|4riadxGGy1qmf;l`Qzk2-CFA@7fHMXw4w*^!?eK3Xr(=L1RbXO>4HJP7~i4 zw_NNw<>-6Qn4`G3#N~+dK7-aI!D88cdvCh%hG|#y|NU*Qr}nT-A-XNyZ4=g43=R(~ z04@fXi3~-EonM$9C@w3T1FI&7O)q&$;8jb-@1}bv z<*%!aOW0-7Z9Nvfo}mDgA{I$WNiw2Vm=>@Li58hVC5$Yr$g8fcRh&4%J&6R4LUH$r zec%5#WAH%qEDDuP%+6zjD(C4~SQ^mI9!DJwus1TgSe|jlXoLEWVu2&2?z|LwcCt=& zb?dT6+2~ihE7pNz*uVKgK=<>+EJ0t9bCP)g2_Jwj*^ z8A#ru6B`3B*&M7Ia@8|;3W_#PO4|<%x{djpR5isn zl;_K&=}vW??@pmFWI0^%UE*rSx5Mn`O-4pa!^uUED!;ns(+fKZ{!aRZZ!xluOpA_1 z(R+U|@i%W7n)fNv=srB<2+ghqAx~pa+at zpFO-$3xn8XwGFzbwaAn@!Ys8xfm%lXPxfwOlOsL5% z=M8IdPh1!r91Y7+_7F;1+<2|-__wE*J4Eu%RJ>xJvu?AjvHjz_Ov$t&Q~mSc)Y{}W zyGPnp+v4>1^NbstI&mJ74&8R9d+^J!`qXckho5f`UGZw)`lF{f5$+}`G14Uc_Y1#G zmg6S1LJCIcR#FUKzVueu)AP!ece$s<$?ir>10Yc!!{mZB+N*^4V<}>kzCf)d{zIi< zY2lgsYvb)hLlg@x5g!&FR0r*j;9l=)D&jT;e6Q%lBn7>^ZHE%?v?Cuzpaz z^vN-Eqv9g#Y`}PkMR^F?OMpeh*(b}D^IKE-hISOG!mVEXsaD@_Jd) zdz*(DGCzxh+H8{>FWlTI@k{xS?@x)%r(bX{8cVfq-YNg9bo1n5Ns+0Vq3VO`6a1GL z46{|%Jl}aTQHmMdxa4CuF-~B=faN{dVZd&Pl`EjqAP2T1bQ0wHNB~@9mZy(nl=37z zeSLE?iYCRr-tE7^VF43D6V2%DQI;ufo-W%SG=J*qu@qs3)6z8a6{k8vw^ZimqVFkndZH|XeH%8f+ao9uSUD6Zv#ZIF5h{iB9&n)_xz;vn6C%0J)sk>x|UjNbque#kzz=thwd`hSBjz!%UL z%vS$#d>h;?NC;p1%8I}t6BC}E`KF*e!6VJh46jrqZ7(_;$-u7Z_&Sc~ZEt&?wl;%F zZ|{l99cEuE!H?fXw={Y!zwGC%a(8<6Fj$bI<|Z)iU8vr@ zk~-BT0-M_o{{dS2rS#g){7=Gk?a4zb1iDP!Lr1Sj|IS^OfFrtHjaz`x9!aU7mw38n9 zgOpELu(E%D(xWsYz{&@K+2Y#GNk2osJbiGPZ%jMo-CxC{nZ5x|jEdS%T;5&~mbCoA z7ny%%D2+WPxu`(+&sa1?iT4v}k<>Hll}nS77)t^cB~K{V3bi480m`Uaj72-^PI9D{sovf~&a7g>E0YRwYwH>ERFH^BOWMt*u4mk!tp|}_ zyuQZKliNIX?!|9pEBd;$l6i4;f+<>a^~JltTfH>QPL+MkvufIx)4%$6Dy@3@@MB$ycONEaZk@ zy-BXH^cVls5bbb+ID~5jtP5i8IDR?p^IbZu{c@?WF8QIDz4MjGEGLlrbLK2lU_@8&r_xnG7 z$MO4pj_33FJje4?Ua$Lg-`9Oz=XIXvwfF4Av3=Wy+r+8V-l~{d9j9(NW$UmlQ6rSK z@%g)V0uYp80}ugD@%w6zQIdY6EB(+_;Tr3`4&6IjzIMugun%d&0y_0fNLur&1p6Jo zsMj;GZ_R8#zt^uUoTbjijgJqxhZtn=Ddr3!zb^BmiK&Q?Dx}l{Y^#YSU*FH=<7uvq{-jGkg z^S|5bnEAR37N<2YeHqCytnD^DKJ!I7^sY69X8c>qo|TK`3kyy@zk=1Ap7eE|)h_Dp zo_a8Q_QJ8mADu%S+zknm$G0!l2%olC+OhCdu=)96t?nO<8N22u|Jui0PhuDo*cNa@ zA-d_a@~a=01sj)-4Sqgw$wrUC@K-N{Urd>5gUx7xEJ0#}>3`dDj#Ww|gDqtBeSqCH z_4*AM$vaNC#&Y=$ifpED;oJ3T`vp#)>sNNzng?|7@227WoW5+^L>QhQ0)Dbsq<;GI zd-}^umxWSiqeS*MPy99G_r6Zxq@%H#ky%#C`ss{JdAHeT)_XFbtC33?zy^W>gbue; z4{jm`3TR6c8<7tmj(^rMLo=0`^z>mO(Y`k(wzj@L1ZrQBUZY9R2i0FsjENmOHN9@Awd5vb$WgQf!>%+dW_6W8(w+J%)ft6o$U12iuO_8a?{NNlNAfG$0PoX9$9=W+g+K}uvA-DP1{gmW6$3LmIoU*Q?meyQG00WPZ{-y3w=SZX&9u=*`c+fsbwh@ z@wH4*arY>P0VCB7>%-HNqO;0w@u?XdZK=j@YG%(;ee?DGNoQKu+ME2j=*ZpguN@>* zlLv$=KYklL*7<3puhsbcCu5nLdm|{Og$W7QT7pXWuz=#&lG-}m?k>CBd_SCGJYW=v zj^f80y3&$XgXfEud|PHu!M7C%NEkS}tx@91U=l=um2ua(dlNc&w|)7GwnKV}-W#!T z>y5Enz+QuO7fF=iN5Fmc=uVbxYX}AnT8UP6JgAQx>(}1~FM;V=5c7t_R=KvRk&&_d z?pHfAts*)UxzzH%fI8PAUEtDu*M&l3Y9#t1$HUIifEkjSgz)UhAonlTPiP0~nS8*xZY zk~GG^g%r+xXE5|e_svShH3`Zy$mf8L+d=PyUN@0Nzqx9MaC^4yGAlIZSM544%yuy0%|?Mvx!ev&SL7CHH&}x_wtoI)@O3_cb+^j$Mdt3_{r@ozC)_{iz$_4}wun7bRT!S`o1qg$X zJ@DN&<(%?Ywm9ASu)HBE^_O)=OCKD6jwM^ocqEu+o;|tq!1PhDiRo6a#$G_{OxW!! za15`%zkL2jGpc8ze#X(thgaT+wn~yh)B8>!|D((e`_rjdXL#x65n&9^-V4o^0V-P7(8vMKZHEsZ#yZpiw<8KJEc7_G2-+VV*dqU= z(0hNMPCdpWE%=Uui{In^>(;5puuQ|+ch=fB=F4|oW)(SOr0a0x{D~;>SQ(5V*DtiW7F7(KF6y1fO-5^H_B4pM=_bwNw;V+aTebLFuotc!hRo_)^ zK)_E4!kVjrb_sQZE$|noD!KF3IjJvB{`&E`9qL_Vm#5HGLo2UW*>7HqXfFtyB9UtZ zaXGOSBT6>3nQ$J-@)IIcz{(|%8#aT{ul`bk2~F&~uU)!YEW1QN2hlD`X?nlaNCmz^ z`N!Tf9=Tz5@_ORg^tIo8_iv`x71m&c178YPrWzTX0f$Ap4I4H<$C`um+GISlmv#0F z<$ks`CDTkNTS9_K#jq~IQZPnN#8gj*`kOGg{LCmI;RSiyH%ZPJK?2hq{^9?4oFakd z!W$4K5si#}k_*WYA$5cH%>a$sVR%B1LF$aQtP1uonJ8Xdr_`*Q}SR z?d>%MFq^M`-u~5D*L8W1gVP3rmT%Vljwvd?utK%$*QYddONeD~byEIt-yO3bUJf)5 zj14_bnO$F_{h{Z1QqLvCsUv;-xjz&n4{g`Zygh8D5r461LFMVb4kZSr(!eyY zj_;Rh!cSaE3UeHMeew7%Y8!tyPu6plg&!$Xr9IBCQu-IX=DZ;ELs?IJW}Hj~R)Gx` z9u=j549z;=uTP&x8^jVCQh_P5yLRm=wtB!0r9~sYym_-EhoD=;TR6MAL>$OS4XMpG z6+cpaO7l9;5;s5nITyOh!ZD^2)%!l7aoS1@DwbxRm&N+u%7T&Ahf8!c4X((H9x^>v zd9H*atx_rSRyC*prOuljaElOdd;d5BKz~_`-C3gUMfOhSmNwwySu~e1K~qz?;wX6z zrTABbU^|><(2vk0Z-mw*3XS8wvT%&uV%c)h%CKJLcMQ|5*uwFt!1Y|m zoX0l{kCmls2$o1cc&5uabGt^d*=y*9>lx|YSPi@h5Ae|NES=wh?2nRx27_EpCKOzQ zh4!>!Xp*jemUEWf#ci9N{08`vE_?E_-7)c1|2wbG`jOryF`w#J6neUWC=|26aVgI3 zPX_ynG<_Ht8S8Lwo8uioHiS!9E{&5UfFKqrv*K`I>W1yFFUV~1IPU*RoP3Biozy|& z=?8z`3tFWRPJPZj?i|aZi&k?+O4`3IUurV=xy58TJ6u$ve|y}b(ePBUOE}TA!mR-slNoJ`v{(&fXsCZ@_!EM7%EcrT2=mhTIe=+_H1aa*Uo@D9SP$% z`z+YIo;TBN!HV3t*Lv64o6dhVDRK$mfHJ8f#_kA=N7(rJqY!=V;qK-=`YlOjon;Tr zeQ!l2C0q3OexfBp{I9UnIMHYZ^NNFb3ZztzJuvl7n0t6<_l08zSG`FW*vsZVvEld; zX6r?tuys{lVxcOc5tChyv)0h4@Yi|V`z>o;XZY-t>7bKr2^E=LmzBY5224D%x5&+e zmh4?f2?rcVLp0OZce=JIQ{Ht=eIT19TkI}%_mZvHV=p7}gz~{#{**8X_eC*fHV6vr z@#nSPok4EWr@K%OhN*Odn=Kqa#7#M69Q!dKnY6rDy|AiB-ymJN@N)+;BNmd&g<#}?(7Uk6_a zuJ5dZf-Dv(7R{1g#4H?|C?O#sDq?H}fl`YydzspJrHJJbUrn!#8>)40hfyC@>Ha#g zaQ{)0y!zMVw$eHIeScWhTAq%Vvdvj??RsqWo+pdz{=mo!I;*fjdH%OGbf41{NDM-^ zLLi#eZW2F|xZzBS+U=T{Jx_Kks{mK02>oTq|>BSJfP?6Gh~qTC@i#tL{yeHn&go}3_Vve z;*dx&&MmrYJSv=ZGJMIUFj%=nxn<_LU>$t$EnVuexQe`p^*8t0Y16^4E?m2MJiCqP zx9rx&XODxD2do)lLRPtQLUIY!AMxWJMIdZIqr6o)#uTioP*`(JbNd#6w)XR5cI+IG z*AWEh;?X2s{$^nj5gI^C&B#$=u)Y5vUKHE2NsoV)xTQ(k>Bq6i_b1@ky~}yQPC3NE%(~h;3Ki3e-&nZ$1y#f)h-qT1jMN_cUCuSeV(z0 z4`kp57;FxWk2fl_2=9zoH8d_HayOl0;D}FiQS!T?$>Bgx7Q6RiTBmsF{j6`BX53!6 zdQOn*hC=?A@o-<$Jza(6(k_p7*IH!pvTPrQjkraa#561?WFhoJCzlz`@8Z$^$CwtD z4XqhWOgV|CBi0N2Yj;b?5}ca)*)2qtYmiuW58JO|Lc}%QW?G0do$TNQ=Yrn&0W-A4G zt$AX1?@0nBf9(H`S}v4 zPq|RkG(i~K1xUz956X*8NZ25KrghEJI6Z*&)=O9~Jx|*en=#2~t6^q3*xjo0LSYEx z?8WbLCo~lf3DF7_^}SJkZ8TG<66QoFIL@zePAOdCi_pZOP_Y~aNfWAzOpq)Rxe$oe zb;^_%u*G195m5|0kL-cC_Q;JYfziGidTP+RRUt~popzLnQSi62zBA@HgCRcYa)(S! zFQ62<2G?D57w^Km>fE_=cVje9Ym^ob>Bq21K3F~2x?SYR&gA`mEC$p`-)_Ve^taY| zwvS89&3SSPkDnab7qrZcB)97MrqCn{3KJH~=1;W;gUjztQ}U;oYAcmZ%zEuM>TLh~ zCR@#vI)2jN{eBJ2&5T?E3SA7H%kPLm2pDW@;S}*~_m{^Z81l^t&T(VcG*=YxV9_{2GF8ywn+%Y_q)7g1lcJWYC8n%cl95NXl>YTAq&4gD|WEa zXyJvT^MM{}D zp3bV4(Tym|wtoE;(6llSJz~-6*4+@!XI84w7Y4f94T~Birp*WMnh%7 zqW8pWQ>TY}{LjZ;4oW2qN1_d6=*&z_%TB+MLr0Dph&dUUhH}ez?eSDrHNi6wloI={ zyD;e_QPHoyzS zjr4tz(_l#bO&8^E7(&k|a1x|x@*#DBXn+w`5n6NFNN6my%UvLil>}w_3VhL#k1m>+ zHo_n*2p&#geer`wRV###Wm{;*6svBQ?rN9vrhKX@E;KOdKJ+M8 zN6M35v7?e=GNkB4$HJQtrX~BXb~i;u{;=QuC*X^tPGLpvocF^iG)`_3&ql;1WEueQ zI<8;a{TEaz9V+fwiCo-V*E(;yShsJ9-*sp!n-U9eP?*`!ki?ujtDj$8k4GP$oP+O;?XkehWc_?^xc8~}3G)2GpoEP3sZ|>Tz0-`~uo50G& zb(u6TeZ$77IQm&K?v*q#9I5dElKoL;An zskL28O1OFQR3ns6j3s8o91dx2Hv)N?_a`GF#-`kC6vHG?Fn){eSt~%j7y{$583Qp$ zrv{k?O|wUMcz7*-BU~b4(bp9Lf6hlnP479{Vnj<$Vh^$65eQ>dqoRU`Qyp@iGMJX6 z@m7BUB8zD-#0e56Jao`2Xn_7PZ63p=%z zF4ag(bs{eY)oIp1SX;pv&;S*1XJ*17do>tsRhP9YbZLtT%4fdNG$OeO^GB41v2rU-s#31C56*0y$Dtq>j zG#|v1RnUB3_-ZZeP%WB8Li?{FT&Qzu63am!PBls+@@4b@Dd^jiNkK^2@$j*lbX_8# zeXRqwK**04+GQ5V$+TCN{}RJr6i8R_GGJIS=j7%JV>Xo!=X@L($l$w@;abJn=E-2r z+2D7Ba?6ezDGd1x8TNv8rwHJKz`_LXdYGc+0i*=4CG4wb$O+#g;+#(M9@M*rKu4be z*dU<|MvTPIIH%?pgK#6vPcmUVM{M|UBLuu~lFvd=1oH?k_#tLR4gwK)1wR?7!1cDU z03-I&upz}8=z?uewi*gPVwu|Kahft-M`6lzhz0dFMaCkS7$`=zJBl&Tz}h+n9t*^& z#|duENIG}wveJ^O1|=q$0)=6@7TQ?MTabf^?AuwU&Li`EK3z#%^$WHn+8HLVlMy4w@9F?8YtU>osYf*@&1E<)5&gh)&- z10o(R84wBma|-9Hhvuqz4gN&3tmd%Gfnj(E24?x%-40|W4jRAkQV|Z!ne{awONPyKMr40EG6r3$v2lgc2gWskNv;qCl zCV=DcLOJHp|DT|bZ3o@141;+f{}n_}*AZx_h2_XBjtuM{q*1<7U}jhzqp4FiKQ~v4 zZjp^VFKOru{7zvt8X@}&UJiD+zgTJU=(l<0odSV|5abLkA$0)i&Sy@lwRpipQ5}Qo z-99{dq0A)QIfFwC{jM|)4$*6(_!JI}b5x`23WI}*0PLijNJQ5zQzF`4WY8p?BR<7A ztjVb7=nSO0;7UsZ9z?s(pqm6%V~M<`4i}7JiKPPhwU#67X~gXSwqzUbpZTDLj}o7j z)~?Jh+@RIi+$<_5$Bu9m0*e-)Il&U(!-vCb@jm0E!~b#t@}T4hLd%lS9=bkx7iY7n z6^D;6r4J0TpGpK&14S29ZCoENEHL}0dQetC?H;{zCY!i}a*;9Qo zM3_z9AT2EtTw&4w!VM=>3bC-+CB{mHh2=5!Rgky_BA889HGBqUK+bF~4CVSO9M^%c z5`hAt&Pl!;nM&Dqcu#VJV~Z3g1i01R7~=_)So8!*A!`P{F;pys$&TVmt(aI`0B(U<=$9ENv1@mH$D?*}uoPMKFYCu&rY#b>JL7L7!i6#Oq6a2Q$PN<++c zaAgRGs%(%7oWMkiRnTal5ra#0hudIv5R$7~xUS4$v4qQM8!pyhp|0gZvmBgm;!h%r z^63vk7aqC>$h-g~sN{)r@VOy}WPuq$ExMQ%1fUCtPR${L$hB8IhzBOu8_a*Q;OvZ7Ovdb|As{{E5>fX4Nbo`t%xS_Opu;o%<;!6@ z13Ruuur7nvhz64`_9FoRKtiAvH9CU|@>z;@ml#FTjw`|@XJz_R-J&Fd2(sSlfs}@ZaacqLitA!5}>x?z+FLxjU6?I9bXxb2^AfgEfGBFN2ZJU za2B0~K9LY9$&g4gDzwjIrVaQ3oFH`ZylA(Y*Z3=7g4#CX6%u1_tYP^4R0QIqHSo>T zL~=}W$87C&{L0?pNF&0N$&@TyhJ^l(bM0mAH_ipjki5b<^n&LgUmu1i5jlC>3*Wwl zBK_e~)lCJbm|VM1#oHm~&&|!*{L7>ycbZULF8J#Tx!BOu6i`{y0|yUkAmap4mqKPY z#MqxjIz%047HIhZ-GvMDt(%F=5_evca?A@fg&X?Z`NNQLA8f3i^%l*B@a z8L-|Cg%S$krWN`zq_=f=8A9-ey_yiLA%853Hgqg4Eg4cLB}oF2Lpe%@0+3mf|Du@& zq8X?3qium1%05i^!}EUJUonEYA}&edF;Q$;Mft&GBZN=}*;)3U^wYI?ysko1X_$~u z5eJ9Setu}vXtsC&TZ@I@tgj5feXx+w&YkNK<~7iFUD(usLtPJ*8wE+PEjn72rkaw- zFrJ~Kd{p(%`oLKVRX$w*C{@tgk=>zsyuA8O38C_zU@6C^jpNK2p!&A5cVqHP6)DGp1N zf_Yxjs;cvG@o2T!3^g?(p`dvOBYqJDIA0UH?M;)HtL`<#J9< zSfO`OrW~q3BLuBaGU}o=2Myl4rHP=Gz@x!7D!TLq8XyZzv!Q?82_66EW9F% zMcL-9ka9;OM`yz*Aq|iMkw24)OO|jwP{C7!j&Max7x(s#n9(i>?#MJW0*GS#@-G}? zgvat2Ee1(p%aZlTva@LDTu7C=TaW7r&?CF?HP9S)@53gM(Ih6N9lWzC7gu7l4rAS=rfxktL8APU!#SZhj8iZe+%Krii!L0ra{FccDHcrr~&9;m{=B zM>2uSSZ`Pc3lnGf3p|j z?ONQ?Wco8=B@=*fbNHtqgNn2Jh6%c``;PEgYquF;gAFeR=OMA#Lic&->;>RuLRGbj2!cSEm&F{E!G}I1+#13ogBX#L z+#6{*K*ut@V-LOSkPvRiG*JkO195tE7kbA#c&uEs9X7u zusUEZ`J7~K+{Ew>AE4T6l4V+=q3P3ie^81^_#o&Oso(x*XE>gv>zbK4{Rcdq%3ljS z7#YY1|A2aYXrh`Yk4?!MLU^8ATyzw;oD__o{S1{mU~ET$#!_?35j6LC0Evn;ESsDg!8T0jdMS9+vFJdK+lrNZEFRcXN1OMp% z0Qih(&_^T|-7Ys=L=iC~P^FJxeDE`j`3yz!I0^xi9X9rSI=uCmaQ8?BCa`B0N|Dcj zZ)}IV1-CxIAJiCZn`W6Zk;I;ZWBd?l+fq!4@g_k}$xL%Zo4wPDIjqOo2u0RrOMCx3q&C5;1oxc|VtgKtc!zu{f` zVG@Y@uNluxAYOtY;Su4Yge1}^6nqGH8)d^|8TFKrJceliG`7S3K@7+C7Nv-wY)X91 zejf=D99h@mT&ZxyjIs&{kO}8V^+tbw9Yr8lqhLG|FJRFqNJtIt^YNJ?_x^(!nb$z7 zKp!s*SKSa0ACiq`#G@7>&rNKGNGXo7aztwN@0tl!dL$KCYEiKobRiNKrX?J#(TYL& zLVNb?S%Sl4Ng(P_kx@m6d8)uFzv8a21D2wQWBGosNWrpeGdl3T!#>N$1}6Zjq| ztA~JC;9=}hvyjWjgmyo%#3dU9Y3zg#hft{b9Y6)DhMXif!HTepQA98_IvV?j7#-jT zlDaoOIk^$V_n0Ko)nNd;q$C05`YsAh*wk>qkr!Z;c^Ooj3^ymlinlJ3rZ?ipSGZ0J%gC&S6Z935nBprN!UYAMS+VG^{DCC+ z{MhxU;3MiJgyKBP>FF@E9!_!ipX9a)5CJnR9;j;Z09~Mn5ICqgPQ@){S^%T! z3HFVR2WD*r!NYCQF~-uLA8C%p=ssn=gmR%qH>OMi(c^|Cb}(e93)*$gWEcWE3lZob zF#-;A6bKvh`tp8H5^9o`MK6B(j7g9$5r1*7elR+yZH`rOdYMHhru&S*h*$wq(gR>0 z@)JaZDR$3Eov#CcJ5i7s!m{te%HKtJRWlpCEA%B3`HecHM0BuJ^SlC^9A5?DuU&!2|cI z+$2hzNN)e3HG{}3v+-wEQdhr0uZQX4Z*)}%JO*M~0_CPd9IUKCi!vYky`^aX?{A;f z8xQXmrihUBMB0}P2nEw@8j!|fBN~?JmGxBriO{zEc;nAyFW2)xkPh&>t3)VWyVi53}E!b zzf2WWeqD5LbPCR0&$ZG<;;eF@n&UQ-0&44r2Y-p zO3H8q$m#;sZ6ad_Wrh9Haau!0t3^KCDU{la?QC>V!+Zfd9p@|@kzWuPwO>h+h9QCG zxbrIZAx*6Z6O4>?7s5|LLZ^+BMoyd=3fD5nPQk&)ejM0$a_~@~IgrR2GYXSMl_o|; zVJed3VDYGK`&JhgilEd5#7Tz5j(Uey0mDMB!-(rk3u$dvh2vr18Jxe$2w;VHxA4PN zBs3`5?HQ`bSI~He5A2sHyXECX4qc8gQe4Un*w?PGfQf&IWPO#QlQscp2vFWOfKl@ArXU zVy-O~i;kwr*k!E*F@k|$ES=Q2NhqPu6OI!sTI%WrUNEm-MZg$|)QcRN1R+4{pC2s& z(ykvu!9vnlbJ8b6mILn2IL(j~dmf=8H^3Z9~%vb@wTT||+MlX?!a0$B`c z_~@;y#i(mB1pgIM_Tu-DwlY{iDO-d4t<_RMMnk4-df~+UjamRaSICPm?-VuEh;9K)3U|$goPH= z;Rlqsgf%N7X~+!M>+;TO6`!c!ibM*NI0qhtW0d+DpnVgP8Rk?`ApoBgh*v?6l$mn+ zh&YARY?f^i3~T&r1QFEK0j0(x?A@PQumxUFhd_QnNuZ2@nOPHw5n4rLmD)~dlGCskI5Hy`>RNy| zaV8^xBy!+qz{0-)H8E}&ux=1~|2cp9SgDZ+(Bh^P0o4)ho^Q=tZ8tlpV_BF4(${OUA>SquHN+&R(&6Muf~d1scNRBVPT$=mQ zh;-s&qo#r{lr4N>N#2CB5r)Wk3laci>!*Xv+OR8c)nqVA+5&+FGHZE@&cGtYdFAkY zI2`>RJ6=R@2}v!WWrAN3w#^}H;ZWHHzzm!N1IH4?;6t|tgSGZcsWCY&&~@Q55{1({ zF~|dr9XP4SE!PS}b)-9?0HtL0v@*=_q{Cxl-&)=tv$7)Rb2WAYB1JtwISe0sw0YL` zF|Ir#Jxz*;u2E1*HRqK`_WzPWj_tO&-et1yTH{f2a0{tVQC03Fu9d1cM1X>!L}fUuYm6%Huzl&uHK zfKVm*?P6i!GxVd;3+l-YMv|z@4hhXtOO7|j$sOGpPlF$2?3A||>jC)o@yhb=wOHk7F&z?h@I( zm+V{u(%=Z{DRGr;A_)d27u*+F3{${Kg~=rbs2R1jGL&t@+i2o6F{O6{iu>JP#%p(+ z>FD3on^_Ws5)W8bPl*SusX5Syv(zp#`30niF(M#lmniC_+IQ1+A;zQY#t6x3akgw; z_a{~k4&yOqPMhm{W=BUu5FKs-cgejLqf!Lyc&ub>T#<#G%jGFwVoF1-y^x3gX!(u& z4HYv_j)*2^w-IGK3||8Q#%5te00_tDt=rWsQalzW4q-Y-s)v!?VWd=KXCUDNT(So2 zwAf-9+%d>K&(FNC4~-jHbf-4q)FdQpT&aY}Jv=k>TvkAG8s_WUonPf_&Uh59B}$~k z06!~}64>klX!jE+Xg*_7TvrYBHtswT2VKLWeG5=$fH9zfIhvBWBB61?=Q6Z$((nXS z-6tO6;dbb2wq&0MD#*tdiMzcPa|?YqCxE8}fBW`L?ZakWcH|Uakwqi588@EC;_NZp zN*kO^Ps{V7GPn#iuiQbMnfQu|9k{;Z($k|*|Lrg8ohZ=*l1Y;Ff7y&!!zHBmh+bnQ zgB-Nf_%g)%!8ul7-UL$}!?EYWvwk+zjGCG@!iYZ-phvQivf2zWCuHO1WmxFb z3YKW&K8!>~M7ZdP+Oqmu#f{kEbGX;Zq&zU8gOIsWbqo31y6)oAtV6DO8COn3{~&!w076$i)xdVi#8=3N$32x02wAS& zYLwc7odfl!(SSFHR)b7aI2oxf6?i&3*b0AH1nHY)CYpjl7Tb`YZ$Qn!U+cwxjs@Zc zFy69T)TQ0s*V8%C&X#?c#NHr|GuDw@wetDaXyJmjaSN*?{`0=r5)YTc7st~EoGpc) zT(wLu8~V*v+<)A$qTjHE`hU3qeoG&od8s-j`pS@~IixjzmC@4<9MHbShV0v+Vtxf0jiA358%{~W5`AtiO9_glis-1(p8 zN%I1#DWm$b8|_m@JLWChy}B5@pYQ3wMHYo3bUoV17=KJ)AB^N$`SqKJi_2oEboYaD zyX7~lC@%gls9F73_@BS#4+;yZt=m5~EHmH5SdbW;lIQ6GLr(e-Zi7o7qwDiCzV)e=oub=8Wfw@z3=6N zaLx_jL%z-*J9c24&onH;(EAD#F=JlWZ zxvuByIw~7wZKlDHNgn1iyvClKeq93VB^@MpT2PsC(vf5zG+TnB_jyoV6C8QVuJfrZxa-Q>orw{JxT)mK4 zTd%lq;60Zrok@qcym`J$9gPINkmT^XbN)vHW6vmbQ?Ks5Ae0&tn{}y7v%{pTi-Dj2 zg(fq7P*|dqzXvCs(@g`D%?^pyX7LV5@eT%Y4trO7MM?QKy4F5s{4)IcCEG{2Z|`Vs z)(5G-_ew3K8H!tR8ymL2S8HSZ1bhCei?DWv1M6!;)*&HJcTPXWNSbu<<$_Hf{e?)P zM{}=Qt6?g6P~ZK_!-_1VwE#7G#;@u2Ldtn%o`MIfb3QrbOrIEQTgOyl_1>@Pn^$K* z#;{WR+poABV?rXe0>jKym9Ri8B3zm!Nmb6?PWn;$v^%b-=+J`k7rxey)IMlwqaeUvE`I-?yUIwEeHOB{D>yFW{xs>3tbkZ+i zOmS$t{W#UZW}oHY{3aEp7CBuV>1(B7Dff3Xs4xezd`~jMo-Y3s=zbcdRV9@? zEXL#>e@^iLO**Y$r{WX6@K5|_1Z&IFr?**E2a1LT?EkZJY5$+Pn;yTLe5h(0{ElbW zzqO6y8as6D{B`QkKViA!+~dy|IaP;WhyGzY@8&=Eo$^@inu_<0yBGF#*SIX7PjBW> z>TckT-^F!EL51FMXns?=%Q=<=zl4IMFP$m6?cR)K$F(#YkKJ&dnS5fc_3*vP&*uRO zLrPo$HKY-!qc-foplyt!?)RnZm}75><>*7>#7>!Il;r3 z^C`OePGY=UT)eYEoOC-~Y2DJD*Xx&>N9Hpkw=CW|_btOr^xCGlhc2|$geFc~?c5;J z$xQGu;HNNsuJzzQmk|bETY`I&{sofTZ5aVnxHH1DXg>LizWN5vyu*p9Lz7y6)f2yO z6qKe3tbBCV{lucL_sk9ifS=k;6-u?(XIaC;QWhQ2BI)A1#v;!a~=s83!*Ce)Ux{0UuED@V5$*v z7xA`MrFnbxlpt$+S9^T|0R!&I%0i z1n0Zat3%#&w@SVGu7x=*>$(?xZrkO3y%jd`XBRKe;;h>A*xG2b-$QFsr*AY)F&?kD zdm0O@J2YI%HFTTpAcwMi){6~Vu^acr5R&blJp#PZo6dX)eZ~+RNP3gN8-pVw55#Z0 z>T2RHdNh{L0_P>#z_k0z&(TeqD#>b>N-sQ#P}a{1)YE5|Qa&)(Ly^zEvsPB3(2qSd znBSuH_liumkxk#pOMV=lwOp3rk`cyQ7B&x9_NvsamA!FC{&9igl!WI*gqjNfLdml( zCi%!-%htl{yJRmO-zIv1qF_bwd)7dKkdwsTi9b(c*Puo=G84USEu-E1j-y}6uQSiCtfiC^@Uw-&c)mC2p2 zDGQhFF75P+r#-h@Z_ZQp&?YWLmR)Xxsz_rpUr*P0@MDM*At?jJsC)UcY)l=RD@t)8 zq%R`k&EZM>tIDI~IJv|v@1HY&ufpCd|LM80^s~2yp;xnMcSWmq_UBahpQQGN$Q+11 z16X|)Qy<>u=U1oXYI|N0#Ade1ux%UJm^vBg6_8QeAGe}j({!k8Zd#(!x$oM3_UUYz z7P%H3NNu|LJhr_ynUgWMks7Dot|fTMsr&jG(+plVLCfxg0{%AJl*$W54s9MS?FjF& z!t2Sco!~Kl>^GiUlHRnXVrh$}0&{1Y8ISTcvwM$DU3PR6HR(g$3ow^V;vvN)F6+-C zk+;B5n;WV_ZL@XGHzaGs<+k9;iH~v4aW`#`sedi!)KE}a2c4QrwabtUu?2JP~l)}3p=wz86n(t-1cl5c8bBdAUvI76@AGx=AmbWJO`8*P<)kO00 zRr8*+SnjsB`9p4{Y-c^0bzUUL+b1nt+MswXK)aZ`d5^?1r*ncCEWv*6$*b9lE#f&W z*G_CPVfrLzpW08Ya!FiV@>ojn8k2>bvFJEi+tIw=MVCBjCkG_ z+*STfRzm9B6?@vHHU3)@0t>hD{(R^(Ghc0J!gb#(3g4jl^XXMlg_bt+CoO90y+71> zs47JR==`;IjblJC7>$Gy0sTy%P*(+~aL&(RtR)((nhP8g?QQ+O%VoY1lS89o zx5^V&zmH+}=@nYJ@|jB&;2&81(By9t5)sMjd2;6V{-zI~l&#udshd%i#wByeNR&r; zZH^Tc%HM8d-Fu|_P~=pprDf~Y*y6(Kv{O>D@36gI2&I|LTt7OOoXa;}{>-zU!4|L-T>QrFQ?C1Jh?>Rt<`=S;vS-De6h&ZFzVx zu1XoLE>bK4SzI5m@^_b*Zrj_iHL_e0XFm^I21i4vU1(J8AK$5zq4E|bu=aI zqo*aCj|%_Ls6-j_iAK&|@7Q=->#sL#)Zj_VM8d6N^rsNNaJ!>{p zcfH-ls!3PA;A$I(bYjcCYh4KeRZkq$4j4+aM0`HiCHTAU@4n_#>GYPqv7s zi)WNd=b{9tPA_QQ_euE#&p1uu;Wqa6mqU;grlhTZ@9VxVg>IWw~)MJE-PkLNnkth9JJn*_*=i$xBqZa<=19@mL(lZPhynRQl z@UGH#DKjTu)umMUPM7xwo75$>RV|&;D^rXSqXr#@q4z^*w`sGLRx-_$Aw_eWS z8@T&{mPDatX6-?y^2)ApB^G?a3;g0g74_UJ%ghd=W32}K_{j=xaj*yOa9b7_ITY`^ zz`v*z?Yz<}ccG(v@b1G?8b8k~);72PptoLTK5%~e_k^0`b$zXrmnI)8^Ey`Dqn!U} z+gBu8L8ROe|8)_HwVX=+KZ&Ik1Jt@Kw`)ZH?BO@;K6J`>SKa095>iHc=Fe6&+?y9?xu@noOeQf?FFU_ELMxOIcxSTdS>ae$?myug4bd2g~CW_M~};% zc8OJYYku^NeVxC5eZx8A?}126@r%#76ukJ;jkx6Iz~`=H9NS~1UNC#i{)J4)h-HSh z!v^fSO84%rrKJyY5>j%{IV|MX%FT|qwaB)u`;np$z%Ot!$DFh5@NW9 zIJS@}8WgEYO3je-*bWOXS=@DJknt6SRFE;OroKBc(;?9|T40j;$5wcwaS}_Ti5ri#r<~t>5nYcTKDJ;A2eV8@In2 zbt~O|M)?M_zz?$!dU`r3)X}jOp@kj1=alq(zju}7*M67Tld!|PI&a6sp3qk>%`eCl z9aX6kajAATY}K{rpj&*av|4Pi^@_DwoX0-qj#9UwbJNoEmYY7-49!yQJFDH_9lGa0 z(f1@PQ6t3kGjU+FGKVIrjensT5@Uk;w6=ZFw61T{xj%db545bFcMY4}6Erv^J^69{ zmnCz{tB+1;^tgA|zP3;=S?D;?!WcH0aDSZt}(($pz9|1(2< zNU>UnMy2xhhQrYe8wT2P$hl2_oEXiYZKod6a-04()bl;klME%v?~dfB1bbVuL=|4N zTHKP@Ui8p~ZD^Qb%OOmkQPJ2et@HS5q;#sXyYH)aaidfbqr+c51x}UTdwMrgW!GD& zz)R@E64nU_?$q11-LYHwrEIbP*^SeK9otowLQ0|>E{tlf)9&#+dv_}F3X>3$nxa&H ztInO*wE1U7oBA!y%|e{%1bd%L|2X~N^YIwN{hn7?T6vT|I*)r4B%Bje7?jT+&bl1J zb&ti!Wa!R$rRr-Lr}&zq{b;YPqF)Ca-}fCmUq9?uGYyij!TlUnedCl%qi#uG>q6Uy zhdmaY26eijS3^SQS+d@_I@qKh{I>YlDu=Ia_B|Xq>O(Ag6|Abvb}3pLML|Vc69pmZ z;&bUmABvrurrxBlU5(7|=t2Wwcm6^7+xoPSw+dR;ZQcC7rI6A6s*y_)c^10YrW>P2QZzwC(?aBIpS3WwG^IPdwR?{16SFg6# zpUc^!)|!2~i0T&*O;K@iLQ>oIx%X_-}5AztqBs3_S(vx8YK0j?_xD2ku+{XBcmG4ar0osTtb zl6KVl*&2d3Go@3GePvyfmGNOV&W>egy;Q( zn99)4Rq)ifR(`ulNNV)(%`~<=(fXXt?{Xq_^PWu%&FL0PRu0cq35Xs&5*g27^ujRh zM&lRGDWSXpfdz%V>On%P3D(V$sU@#dO*A!gJ^1%Vd~ftEJX+9^uSA=2XEtKfuiFh( zl!NY4!r9-sRo}Vof}cGZXgdhRUD)+e?XazVM12626W7zevX??OeW$ozZ57_M(^&te zhJIC=RT^JGbdIWXG;P+~=gM1Z5~92h$~MgeJ1pwW6nZ9{F=oE`Qlpl2V0)eFmodfX zhB6=U0KJ#ZtoBM?TU}vl#KEkr`0k+ZW8qgd&TK&gAxkXl#Pv5CMZYvY7HRTK*XFr6 zueW#j>qOU`4N(=^#uDD=-dN8z2vep8DOABinRPdxJU*YmhH;E7u^hTTcGsjle4M0s z!NmWFLH%|ljJStq(*Vrd`w)eDYkyxF&D(d0o-OOk|EK4a^2yi?ZUa>*%|bfpXI zPsfjbZDV)U{2)aYA~*7hRb8t~Dz=5XC{2B5?1zsL%9Ey9A*v@dvaAoh)({ooSiAky zUC#*iqb_ZS^JD1ZwT+D(CmX!Iidy@H+vIZfH--raQf8K0E-E}T#%8Egd!Z69{3c(t zo&R^ou15WB(-c=%-x4-joi1l3(YNdhTAw|y##U+W6ti%9r+=$i_rsW?zj&I+J7zAf zWZAN!SFN*pM{*vqRXMrvYv_0C85oZgs-BVyL?M-m=0`d7GI3QFALq)S^!J^NeHu)) zspQIziYQUWRRYg(QCSTG-;_MlQ-|q=K^awYW>cGLZVy!lc(GaC*oebxKxCpJtotBg&GRf zX?g2|Vi;FHG>;PFwaa_&TiW~L9@FLoT32b7%?}y5vvylVt<{N$e5iBl_K=c@=kXK= z`An(TrY13~qKEe79sOphEXLikb6U5nx#POArM*+)_`RAD+NjL>@-1vvzg%Y7#-}&q zx_m=E*)2kAb|DjO9YIdQS9=EeG&Gm*5MuK1v9 z4=QLMbG5X%awAzE8>r`F61Uh~$HShUnuxKv1P5~qr`)#DQ;AyM`>CRZWJPvwpUR>i z%sQxF6`Ag`D^vM>euE%&qc_D+`$JN7zQ?cpb-F2UOs0fB%tm-0F^LIUO`YBM#ljVn z8MNQE{H+yK<@zWkb!!u=rhs%RL$NiU(JW_Y%8z@(@-$+6-s$lU5$1=wMDnhFh#YW} zRXe~schi~vcB<$*F8t?mztMzH=ak_M^)$7T+AycHl}8NI`)sL>Rh(o7?(BdP7NcCg zRKH!&m3umI)MH7bmxKH1-H#`~o=?eH{BMl@5lNKcBBRn{kQ$q|CtZO-Jt4Hu0@9i}(CBE=k`V zF+Q#n`SB*ZcC46!Kq*DOo4$QxW8I%h>E7!(KAb(S}n>=a9mGh#m`ynf3V*g(S4 z($Zp0hXY;5_0zL*c=w%(b7(2>H6Hn)aA`0uNxv*Xm_# znKu+>x!Ev(K|0y3_vahlxOmCMpXM1~4)5c0D^w9VFZGv2(3J;0;9nX)%rx(1TwXg< z}Z+4xX+VD2Dza`a+OKA zYg{^G#+P^4?$m>jjSGeS*24|69Mru(3$obtPb?>JJTTk!l)v<(&#h?BtJ_{3TT@;& zSirk)dcW4mGs%&!WS>gk5v#b}a(ikdCPaX%BmC2>iHS+lt^QA@(Kokfr2O^0j7V}} zYJcX7S5p5UO=khrr?vU>8jz8Vq-QAr^cXzjRcfHHK?{x-e z7#w+i`|O_DbH1NXnQyJvpziX`xMYwp+R(OSKQf#T;)TlA|5@HPC}u1%^sdE|^)b!yEW=?xWy~ zhcj`8rNOi(x5i-g61BK33JMt?`6bAL@xg;1IEoRN6Fdsef)}M03c^fYUpq7M!Yk7q z8{#;vBp9L}WL3itA~q!;Gmt%YMf4KYM|}YFr^s% zyR5e{6wK~+iyj{QfkRVtEgU4$^;m{PthW>;TFpD@q>zO`FZuoyr655z;b2<^Mo#+^M7 zb^K=2Us*oyzkejXVaC<(L1qT?=MSB)}RA^=M1Ji`yw4wR)uijQZ)AmOHiGAHR78MQ^*XD0SZ^YXfs_3olfX?*`$-E%D`G})?$eu-<=jW>STNHSaj zY_a>pF*()92*m=S_-|zzET{!PNy({mgvQoz+0n~jdR?og`huY-4fTk%r~Su77z!4J z@__2Lt)^47r9oTJ+}3XQZ^FjSQO~JzIgH)*dz27f4lT#Vh(9=~9sT$-`RhT z%C0-CEX8~KmxNcOaXS^|HfW}B`T9#I3GGu`;3{UIqw@$DfEWDg=(NVccsdTPi4^=iv6rLvikirFtQkGUn8R_hsILyoyAF0o#Z9m00@E>`oD+h?N#y2m-aBIn9ioPn^3-$Rz9F^PAGf{q< z)R2K=1U3cCu4w`4BZAoT7zo6}kg+W{vM@q-wm;|izMs0USu+_gyk8Nip-Yr>Qm3(S zesY#&U`VmAa7b&`rh5oUbv#%|!69&CXgo(GX3)NTK!PV1)(;p3=iYbr%n4gDF5zN% z8i$;mZJ4`aICn0Hl<)&oHPQK@4{g$Q#v}W4Yd$4hvdnr9FW`0H>QI#&KCq@uQY1&cr=K8d|{8l{VQKyZkVm1|algau?eNtVpM z{^W;lQHv#Wa6zMQ6w<-CdPkLP5=?EUoq+IsS=X5TQASmXbC0j6t^ zV*C-m*613hKMZ$xMiK|DCA@UDNOScoS+))OGVxhcBy>EId zyF*yCQ)RDkpV;ilAR2hiq0oASN>!>OzwN!YjpDnnk2A76Zr0fyEd->zUYh0Hj+@x4 zbM2$=wq0UJJDCZbjM?(;T)(#Xx@x(yvSBE`p5axjGR9SB`*6(7HdwF-OSGek>t!zQ z5YA!a>$8J^L0QA7Ya_&rV&uVS^l@~h&9@+5z3c2F?Z!(3k6_Ns_lH)ur_HHlW(Ojq zcE$i2_Xp?~`o+gwxi@o*b8aCO+I?^-MGI-zPSqC^SDssgXcZ!t&n%F~4j&4-kv0%Jw>A{;{7CdA#1g z7r#KV-n+Eap?lcTuINDcyLZiS^jD(s&<{)!`9}3_ppx6)f3fE%w|e}ciBtbdF3`Bu z#G1%t2ceSIa^Bsi1?>^gh;h;yq$Zp;7?a^PA~YwxQPQAkY=;oR45Om$S(oBLUd6l$ zJk-ngf<*+Ie=9q>8cNf$dYRKZc_6&_B3wWj*N=Kx&IgoG^gt`95mVnQ*}a3Ms2uS- zmU{R18NH_xo?l-(+jGi`$Y}m5s_+XxhC__7ct9;bKA4rKzwn*CzGqn!&-@Gnk2i=e ze=EkI))gD998Z+qyl--IIzJeq^(uNA155bfh4Ujef?-5U>Z|Laz;gKbo*HYSBvD=- z!S#LAX$=`|0>()rdGRAIxn3vb``CiPnlkl!CWf-}XMA>lXk7ML909QfMOvSW)7JTY zfp`Jh}^psJvo!$ zSl7IN)fi42)u~^Msj=Ue+TNX(vDT7ZtJv-+*AfmfI8=1!%epF`G;}PYaU9!1hj#2c zd?G=mY)?}XX=1lt|Ibf{# zr5H)@RGMXfsa(6wDPF}X`N&W~G>6HXQ$yk^x7I)u+)8K8K#rB94*Cn8CNjJf3-+2l zd4B|0a64^;ryPW?b+S)sn6NW81o=$T;jBc4B2Zx(Gy zzyiiJ5UNEaYKN3=4(bt8CEocq=zWm17A)JI!A0+C9m0S=6`Dn+ApRi z>=L8}hE`KKW9yZQjJG2R^q65p`T2e?yPt)Bkc^>gBz*?^D_JCc#1~g*%kXdYf$hP^6*l7J3{W{f-5}EZuaSiTPnZpF_O~nDhPqI~ zyf|%5F#}U)GqWQ(h9&FktM}x?D`RuOB<`Q!_S}(AK`7sCl;)VQKHuHrzIn0C4f^F_ z*GFcG;E+VC%UYLLkJWC|A`04_!=#DZ7GWr?x6&4rUtC)B(b^?>n%v*$)W6`(W|vla zg$*UZ@}91GeuWbo0Kf%Gzotjuj22u(#G_?la4rH`X}$ZmflDf8lpe)oj7Q{lfuvSr z%`q>t50X_rI5Z=-1^Jig#QGmuq@T`f5WMd9?N0a6gLXuGU7`es|`#AcsMN6NCZCvA$kzvI8FuBk)UkdcUrBDbM9 zHL5_-=(dAb7mI#tVsu=#?z3)C*pRUhVBLP|h?!_7%Uw*2sce6zys3X zJia~KsCg~AZ3(zN)g8Tzh?!}^*%9*lLcq~aEzKo8*A5*i7^Sf0IrNYxK{hzFlSGS7 zaq|fh<_Q+EX?HDdJ#q!L9?Gnw;}tz~B3Z&P6f1-%*zD0A2+2p7b?mpx1cpqs+cu z5LS40L^~3AdI5LLCvL!b;0+%d{ARkj9~>NZQpLZdafyXNtGJc$tU zb+P`c@Ed!gkM9z$S;>#_X_J0m6>ptifgJWWI)VT{?zx$R2)BEtiOxU}a%Vn0ndRp%8pz5~Pk^cP)r_rhNY5`pf3K_-`~(b1_jKwdmt=m zG&AnM^!boG&^G^uU-HlzF|6PjYB%?!1I}M;pkJ_LhW_d)1mZx0bz|N(KkHP`BqIMa z4B`@ZaDF7M<9&Ad?p_qrjyrUz#%4mq^I_2j+<0Av7ESr%zUyd;)3Nn!3A@cn#0;f! zofBlh&GE+m>-{Zy*vPwtuF%h%C)u?8knEle6`m+i&Hc}5nd zHPxk46gWLSw`ksAH@;$N8XS#b8xql($wm5dMx>PN*Vgl7xz2r+MyzlY{S_jD#P?u~hV!Ie zod@gPjg40a%eWA$TOSgcf4B9&yJtkw2$byAqg^=qEgL0ZMt5$d(*}`M!hwb zoHwLAO>n~$B{KL6D(zNZ3#mS8RXM2K6ci~yiM*Vo8Agnpa~JUw0VOR z%xkmDnJVR$x4dyn6E=+*B~5c|xbI}^%9eIJ+)!&T@14YF81H~`{D>|Cp)c;h|0t)j z;52YQGrZ-Kmn51J&SEl^&kw7H>&WTRQCM8+tOa9`*w`X{E+qWO*vE{WA&yetUilDN zU-#HSOax)5PKO>LaW7vbBD@$~J?y*nW2LKrC59cU5#Ht=g-_Jproe%r=&r@In_s>Pnq1Q5@#uX!KX zu2V1BZ9$IJap97=alT%uBJc#`nI-Q4>*W@}N+G+(5_i{46g@S`-e^b)fuU{>4MIlP zR|~01x|94OdmhGQ$tx^7co3)b{aN9xQc$FOj!TN&CfLktu`oE64!NHTVRX_N~T!uZf-tmzN931+JWgSv|>fzRKfC7$yH!*Zc9l7 z>KI$dw1Y}1IA9dw!H{?7Arbd;LzcP>Dfh-Fq=7t^BYPQEH+MtfCOJhHmK!29Se*L? zbI9D^ijh((O^hxec)&q;hYJ zqN(Jvv~OU}M34xKbHiDZFWMo&()3_ri0GI+8^=yD)QsbV;x4vu>baW+Q$_0o1L!=r=e)6@EmqAx8>#M3hdm967xSL%dy|xJq1V0pKGM%s41c+F{HA)An^1(2 zhS{4IL3p?%t`apFcdsQ zl2=t9xH|)g4uE1olo~ud%rjt8eO}x*J?r7UnvaW~aFf%JG zHxc0L1(6rwt~RjV-Ci9b24CMRljTL;h{`I*O?ay!TNrM=hiUsGy7s3aO6D>p!*d29 zmCX!h>g5p|oC&>wJ=;d}t9|ul>bQ`Wyz2V~twIXQ-%HI3Zm$E6N2}FQ5--kbzf@vo z@^DnrnrE9t!BA8<3XtnEq-A9hk`lcx=V^{+1$Z+~3J(-YI##JkOAWhuj#DFoFy z*Eo&Vzt(iV|FC0PSS^hj!`75y(r40Z9bTF#-rVglVj8CPfId;4eq@dNA^oG~nzE%N z@Y4l_sVH-ll#CW?-$`j24`4xBUwOB6>ytr!e?&+!oy)?#>r@z2DF+qd^I0bxQxYz3 z=3soLST}zL5AV0aBO`y#x00GQ87kr$yn;}U2&uM*H@6Awlw=|ULJe`0#q;~<#AxBs z8(zqc&Fg8Iy_odl3KYn)FTf!Y-xw+YVq8V1qFwyA1uOEKKn~U7+4K-+fd+p=_Pwl^MC}xbM&STCYg$~(o~+%4UDjY>e~P8dEKS? zEfBNEBpec&;k|eJJ4#O5Gh+NRM&2o{blTtYgi?vQF&>VruZe_b^bc#X((NYWRH>CX zA7<@yvG16uhwIL1m=B}|ZR7vkzg64+93kF-7Y4j%0y^$@dg3yE-}20f$kcTH^NrTX ztD+(ssgfz%zmXgE?Mw6OcQ?K&W*RNgK~pDi*zUqoiT!wEZBnmt{!H@)qC-=Qrlt}% zoMqRJL0>dgddt=ywxWo77^Tweb{CB7UD7jHl6V!VD{hnXL+d0gTG3+I)9+75K6sqY zS?=1Lbaz~dZbV;;4_sRvy}v*@(p4Y(WP!=xl@#$zK$_;vLhIfV8eTUU1+DJ9*D-K3 zpY+EtqBr^|V%mRvq|GX$Ko4elLYYVn+5vDXftVju_-gKbdmpo_6E6W7kDMv?^Ml>F#7Z zaNyE$vAtaaVKi4Hv63JD!QE)^(M&7@2S?B=`?Auw2wf0VNT2H z(lfm)Rohs$<44eiE-Bah01(fH)yX`rdOmA;|CdWtj2$FiVOh$`Aw}pPog={)R5cTA zojZlo=rl>)`Z`SbW%q=%&HX*%&JkQbg88J=FPSeHa{@xfaHI$X6Q!p!tZU(+{$F4q z0hN#rp5e|pOp-2X{h-H0+mTy~g@LhLq&LWz-CWVCfKhC?_MOMy(RguAZ!bjA=z%Yrz z$EEaNmrtB5<)$`E=H6DP_iuKx-Q`gs{>c&%HYSL%PYO)nfe;Ok*Zmxh*X`yT_bW@_ z=LB55=LOt*C08W72WL;i*)1e1tFdy9Iimbr>qAspD-e2Lf|XV7u!B40y(9xwtRKF| z^?IX%L-=K7Q}d5fV<)0Anl#a5vng1jC_;lFA=uokEGg*yO})E+kun}`6O2`keKU;f zIE1wv>>x8l6zP2+Xao-eLTMCq;j6zNZTFEVv`DGakz z?loUxk|4-IBVq0y~F(i6XxGNUAx}S zCT~l-yjP^`VMswiL6%Kp5;a;yKAi)GO~!Ij@Vf0_3Ws)}zS5lB9SUI9{)qVw6CO|% zlmGPt)FlANZ=^b6xps|&c^KZthb?=&&{cCd>TlM%(kE@99qY=`8^vL9xP+0E3a_9_ z-C8O;nyY%MAImGn%Ecyx90oS)t}Cg=qM_YYlu+@OKk^MdEJs^UPxBz**wR-}tBz(e zid5f@jXbUCV_blIjHSsk3%rwI7yTZUR2nXO#%yCrmRaG#AVp`4g2-0raY~|7RgQ3w zovVgg8?-JN_$1b!$aai|7_h zw|5d0?G@c_ncvF!AIn?YSM9mKT(%V*PIo4M$Zv(66ggRK1-1`Q;eBxvOss)W0OIUD z7dtnqmy^V%bsYg5%9rAfkAug=IN5Szt5*+8U*Tk14 z^M{ZG%dNBQxi_4yLd#sqs3vMzs_hU91@h3YJZ6lS^2o=9~>sA2(vI#mkn&D=@OY{?Be9hom#faV(RUkuk>1QOpTM z6)3a|ANhuTEm>80Q}|zaqQ{bE#VcRI++joub&lc(=YyF}L4+sE$8v5q`|0~P7hU}q zisSm=a;^tq`Dv%clK;vX%k9SKRiAmE@_W(+5PY_SC(mW}(aQQvGm7uX&Mn0j_3pGo zz***Z+nm$#i7*l}p6gXFsM^geRe;xEIYtA*7s^Cc{pU$y>VpDhiGK~bW7Jq8KaVd- zX}JXy6D*$gaw;14W>f;RBOl7+Ik7%sj#BZJbJ~g9 zg2&|ruKAXre_l+^C*%Eg^xPKgQynMXtjTK!C6i+*nuo8hdsLxnS-5pf!S|r=rU_Jf z+y7A>m=pf*HoHqHh>DH>6QMO+bbA`Y>l_gqDoN9}GfJ}7!UH7(A#ziYyG{o|ipcrc zxQN6W1WQfw4k2>@mU?4!5WO&A_OP2jw|)rf$@bs!P=!#uz6%1bpe(mNrW(bo_(w!Y ztAoPJzz}Ken;0ZK`^d3_<+$yuPtlVHtGE63HRQIt{cou&2?V&-xV=oH@~@mWup}RG zUNa0!gRqMI!^HR1eHTlY#^T~xUuCx};FLcH?%37HjK=P8k9Bg?eM?AhzhYXaCjhb9 zV)L!fo%%&>dtF`8W!nv7EvP+38zKKo)s|iT3GYMEz(+0pe((I%?9Vi|v@ji^I(-m9 z4L95VfmFpnU<(6J>G7cwbMt>KCaSLv2Ap7*hiW$K2(=f<>uP#&U-Q?R#ySvE!s3OZ9kZ*z0uCPru$q?pmH}+ znt7oTPqaJc5%O~=fgWU{iKfn{tU~p83mKpS&%d|oet*)H1QzC9N5j7y$9>K_CYojs zo0z3=*asp4PyaaGD2vIQx&Lm-Y-Z=-0Qola8&hXLTtd#wKD+DF&b3Dc`30>NO_ib| z#LF$G=Z#t_i_51ybr-Y+jg}hwV{y%v({PSUid5iHs3CnkTe+6{RrBINNIUS zma%9Vox0iirf&SQVhctz)KVDMBHa9ypER;RLwa5rR_N)Qq7`7;2k*St%%=8n)%7l| zRiq3jfsi~qH}R47mD8Eocp{~y0pD@z_^wqGTrlA&6mZ~H^JrEGl|;^E%9Q*m{Z*gW z>Bb>D=0N1luJ~w%edn0agL5(L=XyhZZhdRounNb+R#Se@tE0>mV(+%3vyFH8JmV_lE8pv;I~YKWGg{k!jh z`Dm>wuBJ~zSaFZ$2;7rLKM8!|abwMLzqMjwxs zTWISC;SrBlel~bO`^t3vJht`n@14kUZy{%k?8--zh;YfzzhbWuAmwr1$9lUNFDs4) zwX4YOP{|Xglk4$0auW!CuTePR9yD`n4up3Ow5xRgl?V1TS2RNy zZtw0s0^uJ=s5h??7lID4e(AFBIfz_5G;|R98x(q%S+%%KN=ftcnaNIFQmwv&E{lAf z>M|afuLGGm5kBIW6-09Dzw$?oZFdCUO8909aiJMpXu4%zF2ll#ei1_KTXP8Q)hi+g zP8pNg32I_Bg8Tg4QKukKtJ7&vyxdD(Q*K|URHR8A3r9G7t5h{TCnbmt6_<=3c>E1I zT4?pI;M)P-o07)sogunj!w;jf?Ki1=@D3 z7mlxZ&h%H0L@}b;Ei+a$9?ZIP7^l!eO%o`Zw6_OJ%~!<$Qz%4Ejbvx*IjK z=Gg}#hT&qN%eQVAo{R*~4*C>u9sK@r_RGSodney++p}ugiyZ-7L*V~<0lIqCL%USnryaq) zM^WI>grq70X>Jlu#~Ir|;FR3<*=E>ZzVY2wOMYZbwkyfqv2^~I7x%ZG4A3~!h>N)D z;=}=NY_=wDc|ms!^qI(i9#4}~xT6apQx>{Cj+e^M&kf*;ld(PZ90kPE!Q7r^Z*323 zM=akid?%MV7M*(7K$lVdQG8I!(x!uR8F=W#YiQKs)|M3q{1%||tnN~qi zIf`8`CXS*t$Zs~oa?O*IZ4MrBTf3epdL<91siof5YK#W-;J|?#I{37`*SO~G0{;_^ zt#!=Jto8Z%(PC?Q6e;N5uRmZSH_Bfwxq92$p&8?L-YCWL2!7UZ6#4b^+Ukv-SZxSSF_8&qF_k6 z7%FUwzxeb9^0w$MI+s+v#mXQMfLZ{23?No!`SdZYvTXT}w+XB4Rzkfo=%fA;lvp+b z`cuM)uU*3m3t^C9#y?_@o@m2KyxhnpM9lcj_R`85qkZTcrwYl|tO2dTeFAZVc^kpM zVb;5^oH&Td4woS+>z4mOmZ-TSU0WTp7g&RG&&L}APXyDreW#;&yFyl9NW!b(K$c(1}57V&y}3V!{TZDf61g8KPF(GX-dz*tB75{O3=e z>bY~Bh#Ee&&;X)_{>F4H5FiL@zBs4|K4eZle1<3!UXKmEt0X6Ch-GKf3&UH90LD1{ zP;*f$w&F7 z$41P^W7bnL^^>Eyc&qy7SBMpqu;7AE3?}awwytE7J87$pn4lJR&&d8ri84^0gYS`Dp-mzaW=(61$5Q(d5r zOI|0V)5_A2#md0-qp-OXDPMyi>Hz$VfFc|%c37v_{`v2Y3Pohh)X!tO_5DX^@{f1?+Ut=Usq8ldMzz=;Pi}}H8p_>1`{t72WTX6`T}HLn zg0!Z8n7r1w8SaY3z5zc&u0Tu#<1gbcHfDT`@($R zP6#o71Y(Ea)bzxP;~X2eJET4a(!8E2`cL+d5q?vo=W5<)5oA5`4@7bP6CbpvjX*2e zpWKfX4Q6p7dO{v`#dm!bqNi!NBBvi*b_e*RK#zGGjUHCruD^JR05V_vH_p}0PI=q; z9G*kM%JODnl@;GUWM(x+SVNNksLh?_tb$M;i`8)}T_U4q82<|v|8HVFqP3rHe?Lv< zJM$-f`{cg_`iO{&(;R0AS$4-`gy-T6pwYXRTKwRo#qUGs{xQnmWLZ@qAt9CEG)>Sc z{?^+pR5)=Rb`*)}K0k$i$c0WeXW29m8i;z8`hyHEV*^(|RQ`AcUpX8>2uTj=0=-1B@M!27wOAD`vz))w#jw$sB79#*a&@hQ zx%@w1K{+UJEXeJfOc9Ft^7P*-;daj!g~aP57B8i& z{(T*Iph*jhd{&Ub4Xm9BTA8L8$=ELNL^v(df`lK6-?s&eCw_p*F#i0{jDCDU=aXyk zQZE?W(n3JfyyPAB<?>IljV)b^GqC1SUxd@yIo~S!Ik#!b-k=O;LW6<|@?C5azDk4N|F#h2s6q{Ta z?^*V*7H z1qd@Aja$Gt&0)y%w_W;I!a6TL>eh{g_(IVzbiTI%p^+1KQXb|!g%V=AO%wzUDbX-O z=0S`S(B=*rsM&-Dcu7pjA?35dX=E#lkC_~i(fxE5$Uq6dXaEbvANUehBoaGN(=t$Y zGcAa6KSzWXSNOg1no&}6ym=BG2%H;{dzR}O;fsFMcOTtO#~vg$*q*U`o6}! z_P5H{50RNu3{*=#Jby3R`Zx65gEUs4nIIwm#T(^%7ON=m7Z%p)=xLiK`9do;6x*1= z@SkO()oiIw<$(pLX?_x&|@{dP&?0G&k~1$b~YwMJ>^VgzH|b zgcE`pdZ@`{m!gh$L>@y8n^B8We-$9v*a_2b&ZEkXmvF%-2^jHkHX(`X#oG6mSRBk`W%lnY)KCdRdOxs}=B22GedhdU9o?0S~MA0YKlK=iTNCo5~6M$%44Ui3{ zXaxga3!>iP}Fc@y56RC2uy(3b@ShNb#DG3)n7y0zz z()S+Xq3<7v-!iDV5u!NSI2r|@L$r7NGJluxVK}KHg zmk0zu@;LlB$-Y*5BhC(30A{pEJ275dZ9tFN1bKVV>H_K?rS-7C+2} zw{Pt-`Lnr@KHksArXgZ2#LQ_aQIr488g9i7-xa!MfH9y49nKj|trQp1u&h6)S1e?N z=~T9dR^qataLoZuQ;PVr%te`s;j}u;li{Wu<5mt!rUda(Eh02or;1^kkbwaS(5B4$ zeyjwdOv>u5xI9H_<(rqPAj?&kppss#;kr3>-vwOGYiPG<$?}nrb_!Mt8Ck-2I{*1R zKa$as>->xSb~PkQR1+uo1!BJKdrPtU_7c}G-E{>x-ehc*aWLvxvE5i$Lc4&BFJoXH z6;`b1GLL~g4ris>@?W8}^@_ZpNu-w}O>U_4Es#Rwwru#?yH)(q)Y_xJqBbSWdt zZkHo~#uo;3RE29jNBCjI(=;#4@ZoVaJA8iqiu*Dl_;qoraOUhdbkBLKLmHq($AHu< z7U0eRG|ih#zENG39P6$!n>z|Pq)m!Q_(jy+Q6l(|ckT-jsZ4s9&oy%UI`qA{)xy!g z4fA5$nT_LgHA81||3gO>WieK}&eG^T7nq0Il04IOc+ z_xJKPobTP>0k&KWbc-Xy(_iaU$DTTV-Kb#kQV^*70Ig%n4@6kCxk+|JIQB$1b@WXE z7I1!keq7I2Q*ZEs`D2GGSZGGi6;T(5N5vwEaR}A7czS|>-wB|w(w%p)c%F|Kx$u!} z9dU(`7ke9FUN{8cUKUTD<+gN+bk}eoXAAvR z3dk9Aak^-O$!`!q zq5nlhU{(Oo$Qyd+je!EBqEp>22I!e@4hS=AN6H-JPHwzG>*U8anXgu8%r@^GAz=D<4)b*~AdP&*7Y!K$gDc-i+BV!_7mLWRBF5e(-Z zbmAMd-N2(u{K#$j!eSzV64&G=?<`29aw9^PBOF*Vo#*hMVXBlwvzUm>+u$>zE{=>K zs~-dC*HdKmLqzIlmT}IUU9*7v5q3@p>S3nY-|{6snC}=?`DAe;i;PM#FrCGnE@D&|M5S7%5LV$A&n z+yV{~5SQWlsl_g+Y!Hp@S}{lS%s_kDU+3+ad8?{(XC+E8E!G21P_D zU1Cj>A#oQw&?&Hm?+@z~8ifO$xfHG`q-9w02{YCY~iFh#B7>uilxX2aT)XIGAr)%qpF9oGL zRyZ?G{)evs1{&^RHp)GR+=&Yx=oWPY-Atf`?0V)2FwQ|M7Vp0j6Z-)!2_vAHGy`1E z(=E_jX8xDB7pGT>|G8xDRk}`usG>5l3}?2=wu?iSaf$xMKScqnA{*0NpHLeUg$qW4Nmw+hAV7=MRkrYU@km2Jl;)kmB zX$}@4_JjDeDf_n(N!2g$nUO?6KzBL`L(47d4G(ng1SBOxv6+KkpZ0h^VKERnm5~jB zVmcVM+9RCsI%aQXyg&t2-hvkIiOe{|N1+nxyx|X4F!0&#`O#y+Td*5yn zVEurI=GzXy0%$3K20>b=A?pDeyKit&XP|3RrCJ8K1L;5y+GcS4_ZQB#FYIlx&2E9w zrQtog$iL=In4$Jb@W9^I>)nq?62Ass>J4EsoW_{|M5QOeE2n9@lBH=mVgSD!U2dWW z%#M^(klxq-({h9gj@R=I=ONG64qMC4{vS#hkcDsDO*VA`baKG+3bL{!j1Y+}y0|MW zmq}D=5;EhdGH}1JywPvECU;zf$A&?E36`fbW+s{;%R#+X1zCYY6&e%}mG}{m@S}w^ z(M7fF<7q*?tx&7fp`#Szp_utjQMR~*#6ne9MzsUL5b_fmT3FCT6J<^9`}B^0&pin! zB7j;W0@ObNJk#Xn8329(XZnru2R=_VV6+1Y-aEe2c6Th-1vGWfJ?{Bd6qbs>q1yx# zak-i-iTZ zuq6PttfXO&cDv@uo5o4dQl6_6y`XhWQn2VJ?V~*K9$geILvMVNazQYD0omUF^!jk_ z@@h)@5`g8_t=Pag1mKRo;d%kBKu}#>-FFR5KS_WEiG9YxOtVTM7U46@I2@D)l`v31 zNK`W(0K9ax9k5-&G&pXl!&ZsRY;U#Mr_?=gkU&w*PL!_DUpg*-viVacM8k>$&Knp2 zEEMJ^|H_rQU9^EB2iyJ={$lnj;VC2>(LD5msY&h$zC9S-5EJ3!g_;0>WZ_oEfPRxn zUUt7-S+?pz=vz({X7rx^PoIVW%_2&?0V#v3q^JaH8dYCWEy-vSJ~#0y7t0<51&PQ> zyq-K2trzfszw{R6EZYoGtJ{t+CywlH9Rvfb2uLMwbiX`_glYi2Y1O0!5Y*k$no%7v zJPs(SK7cQaH|PGtk4Wt8p8=>C13*{+x$&lx=EKJ4o2C8vs;!B+In2F~G|j=(c5Qmw zu&;M$xMdQ0tiim&eU_izvT|Tp4Z82q>ZxUR0Z_&l$o{5|@jQkC&FZN-Qzd|1?9Ua8 z0XpW=g#`TcN18$IGv&$lq|Nel-poLWr9dQ_-sp}i8lb!1pkV-Y2Kd)+*z(^e##g9; zU&?OoUaOpi%rt?z2t0?Fk;&f`sNOS7xK9@L{a)yvB(q+H=ny%Ipc>hwGY)o-SZPqZ zv1uJAp|?^rxwQ+qgA2L+gH^EX$SO^9n#d3TwcYSgt*B&^i;4^t1NRcSe0;2tq?i~1 zDJew2Ld&bHM25(j5CwS6@ZjB}wT@TowBMi^{cZFOhzY*MD8T9gdQ9+wnE_aFAjqBw zU<-@@X*4-C74gtc$y_f zV5qg*nE8p<)ev7vKk4@MmL1pOvpOF-7#05|!;kzYZCP%LtiZ-t)}+_4Hb2=g-7r5X zIj_KAuwIMVgd>j{TUXI!r~MnO4;6eiNq;*9r{M-w2k&}2=htLxD@3a{t%{{bT&}(L z4#Sr6$7Y_j(>)t`ax2A!b-j{qmAvkSSy;n3*(=J1bwKNR0;tnHfae16x>#{yK#SP} zVU*qrO`xx(BVN^22af?rwx;VbGa^2hsJ%Ti z1mN6q0kq0ncnWZKd*u<%0y(4&iV`x0wokHN*#mFi?NSdW{%l ze$DY|{+yCkA2&|50RcCT9~6NhCv5ZlL`ev#1^l94IjI-=moIc~cUGG2*9sn&DQk9j z_t(Oxe%Bl}rgris*P@I_@lFZE-h;wLokIih-ak!g>fdpsg#%T)6A@WU-@x1XM@h^9a7xbNurOFg5ds2 zoYoc1!hxl6acwo77GUZC459{*4UUeFRRH>VjO+3fkYTroxyuzJHAa}2pH~JqahjT% zf`Wp`SXg3CPHd2nkmfe+oO!jiv7WDwYj5}*z=H!+q6NV4MdCW^)KICw{z*cSLd9Td zg!9fNEsK6mt>~9_cFf{#J%ifZor{MV?Xh`mJEDUfJ780mZBi$J~A7ou!v3J61VB3l0(SrqqYnhpyMYjH6M!WFr~wHrEfNF{4h~=j z{0Fe+9v&WVmg?=00jrf!deSTh(iT84+y+~$ySFzwF)D2(P|aXV8in;5nDa0xy8U)QpshsAeZia>$qxMi=^##w$P)G(lq2q) zGYCtnu(gJ(0AHd}GJ(wwcs=0MZv$U%Ba{Um1U#%hpb6Z{udHClsd78laljwi{R<@t zQ6v!OD3|}n*x3{QGU}js**0-_4KO$Xz(Hla@pUGQAl{(UfI_j;w3lwm%zvjzmz*iN z!Y9)fzWD%)9hz?tt}yHML+V0dyie1wp@v#h%0b6n+M93O!U%yR_|X2#EVGry(zvo2 zearnEA#3sXy54V)dPVr{VgUKS(CMwXJ_HLT?=o7FiX%pXCb z#$z0oh+jYGT8~LaPQC%0?ly?Q@-j2MfOo0(cyv?RWg4L%=8nt5zY8xGuBs_W z3r=?ki;v{hA6tnBv?cJ70mWt`Mw%xpJKG1KIKg;=)769sXV_Pz3fAa{E@sV_LkX^% z#{?@IYjf5^kxQPwq5<)Vp@Exp#*6<))_1^j-L~yFR9cc*q9h@sWz&!%BSJE>H<{Tf z8nQxVRAvYvJ1aXYWF?zyQ79^@#Q(Uu@8^C0@B2QV=kCs({C>ahbzSFqoX2sT*GXo3 z#khYwfc!(A12iG)9o9b*D$OMmgjH2>F~^zSVvw+Q~n3lJeB zw~pI;O>xroYTb?(12G#266YZsD5)++PLd14$82MqOS?lag&ehEq86%p>Q%^UHZarvAZ&|2GY51mAVVu z{n4t0;@xlCnB zWnP)EYWDPu5InTR;yqut+Aq|POEc&3In(2cw6zQv3v?@*VYL9uxuX f$hVQYzGX zM7o_-{}j5Y9I$_3@#d&ai!A@G$_g@7p3FN#w4D3;b+oH|S@8U^ISSnKYyR~sraxf{ zji~(y1?Juky?M<4ti#g7!-Lf2m?%op6*aY&ikt0PsX*zf53!!jyKGBNfo-7WI5&j3 zSz~Qy_tf{Z|e@Vwh&v*RY^`)gIse2$V zzft5?7PdKFY5rQ5xe{G@ec$8aZ+mmMI9n*N?N`hfDoAI|r@)XUWKRq(szOD1LpPIL z@P)xgWEP>*q?!96Ud^1_7!a!R_N}>+=<7d{+{VMJUZIWQOD4Kw~a#V*7o!^ z_Vb~iwnz&o%t+m8yWOlGU)fza709vW&SNa;%69swRM)pP4)|+^z z)ZALk-n^8uS<8a0S8XG=iIJXJ@?|=anb4Dpl6^f~S+*|^O;Z$eYTfb^yJlqKWPR&Y zS$_KtCQqL9Yi3~+I{J;DL~`qdt*%C9d`hf~JSQB$B_}od<6=&!qv{_GgXzmww-V%f zGD2u)ZqyscBW7YeA*P(m;ee2-<(Tp{j6rTW^zpbs9wb|NN<@20OJ-AQfflB3owl@0 z<#nyCtyR&~^ussA#l_`xi(>dS#*OvvzY{c6w@{jrZfp4=v3x4dxe<=)D=+>8a=$%!=$4b$#?>pHPGJW@B~n{Wc5S?tR+l!#pvi z5%Uv1AP19(C+UdE(`4v(@bQHmm`QBsb5Om5$;o}+MXlpuVh4%_e0%lHJ13SN(Y+Or zR^b|Rd)%3EVR!FYmY38zBuKF-r=NLUDg_>{MyGOh#iR~8>`IXYFF2$U( zGCvXA-7EO$*hBWfD-pO0(&pv2D>>P5XWQowtMqkugnyvcpx3#uYMm=8b~pTkk!6?p zcLnCxQse~QPqG+MwmOWaF(Kx+@1@(iE4sPpo`nW7Dy!t1Z|l=mmt_%i^cB4_L55=O zzV@vx$iqUyXkp>x%Fpv;UZUofyxd$POy4A>GlpGcwX0tIb7|A2O&Ho}Je6Zo@^kjL zumZ=YrrAjIH`Pa4&V()>+URYQdfYjuaBf=Txvi2`% z0E(I7VrUG*_I~+N41>4MU_dw~-^?(qv{V|eNmr&h9m(1W;cAFbw=OUts4Jb%!& zp4)P-%!ON1)qE*K_UhGL>sqWeTFhdvNxQqd`xyVo7rc1!q6gTD>gwt*zy$_oW_6fi zsgZ5C4&#w(I`hBh@$uCF)M}Kv3xYVc>hSN^KdRi-`shhqhrHy&l$53;28aJFit^A0 z#%5o;5EfY)cyl**BvlHx7(RL3k%F7E|iZunOgn1d8TnLSoE!+xz(c|v=dz!ZwC{XB|Zw%DO~gZ z_6RWO`w1C+Q4C(fIuh(NOwNj#nbF}LtH|gu1oowm>g9$Qal{bxt#gOM>y4>Qr3ijp zoI78fSZU{S?&S#+5zu567up}9wH8GaQra9yuPYzl9UyAU>C!)+IyQ?WW&DoCY8SHJoQzmu|y%;A}1^Sm$mq=b zYB;avE7*+rVm5Z~1|~FZiBUjdkCACJD&yTf_b-PIdVEzte0q$l#xbuPtOwn$$c4P) z<`&i*Ti>g4(_<#@e0A5|o&30=*fw`lC#DDtefrdh$*684ew;4@pLhzt>*&B#EE$ZY z#9*Yb#Hyc~m&&h4gYL-1uyvr&$&NI}Z6_94F>@00pGp+cqdt41rG3qsHLe(G==LGn zg_lWQTS-r^MQ?eYk<`x^QE&oRxxF*}RIm{bZs@~4&5r#1@v*VjBe#omtQ)N{wt$6$ z_v3eW#CenKuPE6=!@~`&tQs+@dEBbZqCE)<-M070Mv9xA7Ut%xe0+g~hQWByAP`aw zBM}J+`!J`D%u6KOfyO9{D*oxy+Ze%@WjlBRERYmvy;=^Ry_f-ynUeLGM(!6Bl;6un zaYKTY`o-~L=a~`4@F*N$Tt`UqqJQw(5Mn=8)2 zRqw~;Fs&Q!^yAS_ViRLyWC$zKKtN~h6tQEK59c)i9R_yxJ=>Avi$k~AIXE1am)rs} zJO?^4o_4O9_PmmY#%r=Bgk$jKX2xfqWYwY-P0SPJ;pQHzb8~a6|6~_o3nIu$xVSf# zJi^oBet82j~_WMlQKGrfYM%Gsz| zx3GwXBIGuN=e@m-nTl!#8)L)5_H$;|)Ydx8jYxsp+9!SYUQP3tFLq0R{_xHAvQj&` zfZv9i^#S1qgBQKXaiLA#gUHB9|ItBhc&#~?qdBf^MLcmeDZn}<^n$H zu)I;*0^Z@4YzW6(>*;MrJeQXgOV{V%*iiN|?Dg98JSyXmm#LWoXU{Hv>6 zON=>Su7M}>%SgZ>nmv2Y>+3&Btg@g7?1rjWhp@W{F+(}60|N||_4I-R1GfUq5%LOS zu`s@nJ&iHqM{_Zx2C)^5w3)ir{#M(5}!1Bfouf{BL$iqIm1=w6rwDQchCY zG9J9d%Eje7IcZLY*e4{6Dlk|g(bJu$HcKbm2b+dT>5J33Eo5{MCRAev-CTg)QvAT}K?G`AYKX{E0o@pITO3uTC8MA) z{;+&$KjR_Yu@=u|{+8oEqRh3|A;<|mQnzDZU{Fz2eRpp1vS!;Ap0wV*r|)QlnQLfk zqv_Y5*SWT)29xx*x__HIg-7JU$FO_%`?!N_NG(q6KG7KV?f{_})4F+AV(X1x)z$g* zF)wR9IApkr zO;O-DU9Vmp{q!jSNAu!ls)Q>RX0zOI&(V5&rGG~Uyt64(16 zN0Dr55akXWJSd%_8n4O?vJ4|j1E$)O`CVo&VYG9d*Xp&rEY1(5n36d-IB0h5YDApG zcY)`?1T7`*u*F}$h>8m-RtiOH!Hx?g9zLZ?uX$E)Y}gznI`-ki6`&rQ;#zrK z-Q7s*&vi>9FuYPrEK0mq|FGS}o1NIk(&((7q@5Xo%9a~IB@7tG6r(Kd35A7 z!x`}g=Xo_k?3T*d~`UkfDXR6#pd&YNYmblKfq?!)m&xiyDJJNmxEt{%m>9Gh% zUy#Ny2lS1t=Wp%h`G@5irTkuqMg3a=QZd3)EloH#C+BrjlT>Ec+CZzZ@1FL%uP*Q+#{)eX7#ZD?jFZUh8l9Y! zQBu0c>+J7zkDS9VSN^kzTubKOzti;o_^h&6PjXC#kJ-F z5AaE0XCqb%+`R7~R9tU7f{`Y8jbVT`pg7EaW`gqcx%KYbn>W|2S-Vy<|ME@@-}{*L z)%h$i3#4pO%oh{GjQgC6GkCh54%F&ON)>=9uAfVP;OMQ#LK`9DBLt-BP}GO3S--9J z`lq~}H`Y}zXe!0`fZ=}=DI9Fwmyb6_g^N*c67YjcFNj(6W@O|pEQ~SS8*idSzh-dv zq@|`32Lm~lK(#YF^1jD+eRBIT;PSI-&vFGOz7UQL$0wXh9$Do21C(EYtOs~`pMnxt zTJnIsvA(e}0bgK1XG257Sly55o)Ap&B1^P>+wM0{PTkreV)vxv$NYTGP})y7Rdw}{ zd-qs5gQ8DdW6IM~z!YYz#C_U2WQp|mHPWn;A2E6zvvH9KIZvF3`CPsd1L}cp(>e_Q z77!44qLzlZ#|~ig`n3$Up-EVfLUi=2SCX33n2XE4ckc~Ek0(l8c8-o`658|yn5Mci z_kj8~ZU{XQ$AURC}#vho#@}ZS}$I|9oD!D6`+yc zBKn#_6jB&GG<8^9a2ZuiO@SC$1tNosk8l5h1GqRRAT#q&dy+y(LFKIt1@gy`m$1b` zpyQ#qB6Qcouaq_%5NitFy9Y#zySy!Su~o~|ZNk9e2){vmH+)3|oGwiFoQ5k$GtZK~ z92}8&e?+JLVYp0s-ZZBR_Vqt`!V1_fCXl}{@hP+1bZ(^PFGz_N?;`KEq~uuH;>c!% z5s_=Z1kiM2hIu;3hM1`~7t*qVb6*dM9N5Q}f7fJlLr0prX0bCL#vF|Fn8l7`DCDd6 z@86Rkd(%b^@_pJXQv-v&a6%z;UC`0tJBdHt4T80#v~(x*1AMiGSp;+X?!0C*Q} zEV^8Qx$$k{c2l%I>)v5q_13m>42*N?O|KIHkit_L%c74gCuFa;8&0>u;F- z^AGOSUBe~Nd+0j$EITLX=;)}?lpU|6iOK%|CPe!H7j^=rk>#E4D+q?Fn1E=qZJQai z-R_>A`ut-|fzrB%xQ-ru@a4-FA=*d(vlg%jG1@d61fK&CXf-6Nv-s)2@WcqUmy^?n zz#MGRe_;;(AUoA5{vUW2%1H*HW0bV3yE_dtGw*rI^&2+0xJSnO>~{ABdO_lAP2_O; z9ELqckPK>CGHU+Ij~|?Xxo7uW3k6sh{I&>SWjA>3$98a&m~zZZo&DY5=;Q7jlg+>| z%oy8kj5J9yoER?%Xm8kHVDq{FH1pM_Hiyv?$1D; zC8RP!r;pDDXJ=>fV(RLg#oaQaQ}^ysXVab9rL3xY2HPLiuETFg+G{0HHrdv8T{}9|nqtQ+*CH z|69l^WIPZ7Wu2IqNC-uM=psqSU*D#p4`R4+NtBn@DpFBmf0#|#J@C5yUZy4I6Ti$>n{loGukR2LgT}M8Ap6=^^sVojSD|FHF9;bct8}N_cpfchJF(IEHWM44~EI_GK7-Mj2Z zkE&?&=5O!m>B(t5;1>fWcNNe`q1Bfumn2=%oKZR?*QQtEa$#_sp#vAgq$dtoAUkJx9NPpP#PD@4|_1` zGBYzXv5KDZB_BtKAHoM-pHrQVgPmRJ;zjR}5L%Rn6*V>9zka!+syGKr!|vU?QR2VO zkd^$h^i#(9)mw%=dk$rO??*cMwJ;L^mcFp?QA7k2GYiW`Dk=^v2L`LtGBDin@$vE2 z^Cl}s(ezKqj6tdHx%_nx0g*zs?|~<*cu`%THpeRref-!kH(FO5Xx`;8ptNDb1_JiL z-?rf3q@<+W=X6kv5;+BuhC9q3nb3{K3>4Y7nLhOs6QHJgfMO3EI1rsdlbL2W-at=U zK~XYG;C6FBLk=;qmyfg5R8(I1?799LB!oP+HObC+(!7@nv)VI`T>M*c$?+?{0Cd3= zd+HrK%)dL!K(dCWwY3qbPOGZYf$P#QNIMK&J|I97 z^Ubd=OdFu=DOu>XDl9D2AmPz27`aDDMMY9mb0^|mXjoYN4{iTwVVi#Qg-hz{>R2^< z7ni!ax((a5Z7V4$`SR`CWe#U|S65%zWo;#B8y+4dC3uQm_yL+d=6<2zY$d#Q)g)=)(q*$t-&`Q9@g0Tq=@u zcYn$2oRpNLqOBc(zgpq78t2dG=wn2Xy|5y{NQkYwaqCuc)==ahF?dChcHaCi2_x|j zmf7@V)ymhCD^-99%}5=O#hg;XT2dkopNkMk>Fdp(`0%085Tw@Gwkby}HX$k}T4GW5 zvqI9@d+=Zo>LTpqLf1LARmeK*$Br?dJ$v@O+XoinC5DE6d072jDe6$>PACts^ zL^@NEf!i9lS3DwdDsfduQ&!c9}FA5A=ht5Lx3 z4G5pOndIYBr@&@rrYGJ<)9?2Q)!Xf7TWBeHZ$tM3Y;Q{4bU{Vs8Q@2v%J7E|KH!Nm zGBVzEbrD<#u^S}}&>l%F04BAdd3TCAK13!tD9653y z=fhD>{7wE4%;dvxL$L!E<5|f27##uiBH}nnjR}n=i2X=iL!+ZrU`!ti+wKOJhCQ#O zqoW`xxdwrkEEpE|97nsttw$)LHU>mEOQw!_z$yv|Z-f(c=Iq(86>GQk=Piajc<_o` zlTo+F^DZ_b7_rOUS*txgSDgLJMsd7Bt=&L^Q;a>)g#3z3+w?r<*3FxMRLL%%-?Qw7 zS?!N)=X1>}~0@Hw> z!ua^NDLmGk1JBm|#|!ZP+l27eY{M?LtvO{Tg`U_yznt87P%GoG_6*KSw>p9bMBP09 z2Z(oMcJ}>rSwcdBx2|>9sA4BeFi;J0c7eiCT2P{=!8Sl#vf*%!5qF`=(+W&a=YyJQ z2Js6?)ex(7@E`{s_w(n^P5th@6}ec*Fu(#A=F{ZlE5onWX?{88xqJ*H1okgXvK#?T z?xngJ8GJlERh^yTaB@>KG09tDE2x=zXb1?OW_g_d~{U=&RA zlLpo$w7q_=nM+EGBS)0aaR~0!9N&Gy;}H-m!oVW|3mQ^qV`cB|5)OibX9vFV#NyD} zw{PFd$jGqbox(k{+KXsCyC%Ue@4kBV>gMvCW_fH`+tTk0;x4n*Jw1;J6fvl}Bc!R0 zlGz{f6~%|TQ!HU->7Y4lW|P+D7Zeb3Y1&7njr7892JSh z76Vd1b`21EMo(s@0%8$J8hmouH7&Tvd4>rDIN^^jm3cfyMM#9d-JVPK(sy^XRc_Zl zgo%M4Qj%lhRY*3>dVG5*UV0iH00b8F+!KF=ADzZV*_mOZxZi!%BVQ6`ZLwx`KDfAGunkSzC z;)C(U8$~n>V<-p64}J3{G;Iu9f2?{E={8`T8w8L!z3@$GSFMlduPV0H; z(3Po2N@DQ*nslVp2lOWU08)mVk^pKX15LMGmX?-;4|PR3Br7k!?;m<~H?F^N-YJv+ zq62W>1PKvcGWqi7nSmz3h;W_14R#aku4g+%1N^bQiSwkO$J_aedSo8t@Qa^w;`|7C zn6x}JK3;?EHTx`;|M>A}pzw<;w} zO-=c;zao(1jA85SJ^vPXX7uytL;Y(hZc<66emr;n{0D@*`4c=mn_-uQ{rk~jgPSEq z#l<0!kvxZ53=bA=)c#m}Iz4^_9ZjY(A`{BaG}NE3HW7YLdoMY_`zVzBfJ#tdpVH9SfvXE z4Cv4`y?HZ+%xesi0pBoNzH*(!QjYU6{RT%a6*+iAOldemsPFzOEk}T5sRAlh`Ym(b z86OplG`_$77hdn=?3Pxy*%GhW=$m@`gICrpI^521VP^8 zp8xXYucT4bks!PFxc`{t3wZR_+QPOB3o<$}VR}QIw@}^E$_gyQ{okKa17r58{RNc^ zXU(IR6$Un(Tj-F2n;syuaihT{i#~XY7 z`n7rf9eGPjZp%C-0Ir^1T)??@&6<}bhcnx!7C)wCLdD=mEo6YHC&&9P+U- zV*|#m2;#I%Obx`YbpeG=Zct)}rKsx{R-|Ua=0gA=9~!Ay1N|q2(n@$H&WO{p1YT)4 zc4dhZj)`%-m0yf&*Kf&k)VO)@u2y8;P)7G?339uVDQ)2g1Ho|<&l0pAbtDS(MX^WM

Rw+*_g)y0|M3b8hG0YU-k>MA1JnV6V3d^d4(69ro_zaoDzLMuJL=Lp@V z8U^}C1-+5#R?b~dy=Q~|f!R4q4)bHOXsZKnPqBV|16zG5$3Bpd;t4r953oVNCAP$# zgn?+|Dg*~h4u|#Y)**AEYS@h0E$aBy@apO_XwMw`sE9(91nSM3jX*4+*x3jbd~>aE&&Bv%v zH2Pi@NKz7%lv~$#l_;FIC7$&7d^4KUM&8n znZo5PXb-3Z4i~%ssWRZ{fV=NZPlM1uW$9lH=l}_y&CTK7`4~lc1(d@<-4d?g8Zh*f zl$7^otoHMC05+}(EH|i^CT4iDYaj)!KJ5BMUs6(%a`WbW$Z|M_j*aXBS8$#{dpEuR ziquXT0XCUMWnlP8N(+ri{*-zR<8Zb*VeSX@E%>hd^V7&V}@ps zs7I{kJbz`}+pFAp7CsNQprUjGGJw)6Uyxg+Q-1w8v@}jZ!MqE;$}9-Yt04;VYUkfo zh!h%VKZ2DbTLM6E9OW}ozQ?s|et-En(wdZS`LK@(yFX_Kw>9KBa8Q@6t?_I{5E7g6 z@!m8p?MP2eHH2A(I9H5~jj8GAs?izuv*ytCwgVfMm;&z*M-FL60i8ma-k=~;NJ1{E zbKNZF7ELaH3Bu@0`?;;(Y8gYIK(VL{Rt66%c}aKa5{eDtd|X+qJK3FOaM~vthP{W- z+rGe+OU?~MQ`eyz8^Fe0ETBn18BJuzdO)hh_Sog>D=o*nW-`{kq_NC<`8e^iRY8Ei z|Lc~Pv&rp(S2J$iI?cbiCtNL;Z>1ABe@o*WDD7 zr0IW}Dk*D+A|vAR$=Ru?zumZa45UkAC;uG?J*M@~ApzsOYdTB&1qOzB7le0}!oGkg zsqt~YHeIyhSvazwHo&D8f*1jBE4J}CVgw5PwSgl!><&RYj;z7D|NP_P?7W`oWHH3^ zqEvoS(Z?v3R)H$Q`B;PE?BNeXo6~E$6yt*ZiAU|efzuDxOK7f0L zot*+CQxL2_Gn`-VO7BA+=75F(03wtfotBwNdY^Fr*FBOe?%#(gVjt+G{SYSbV-WdV z)q9>j;Oj-IDzY11g9OKpc!fX-)lNA@m6%R|ZBV4_|BS5AGi#`W!jDM&u;ZOdQJsf3 z;wI=30ur5%+n#+88d|MwTUrC|acZDg7(d4peawc(D;c0AqnkwrTvrJ_0|S!YEifP` zW4AB~_@cJ|yfhc=ITq}>l#qCORtXsn-V4aW_&&bQ<)q|fR9RK9PQnZH3g-m~5(bY- zF!_8m7tX$IZLNT}<0m%589TefBtGG0gdD&I4gkygmKMVAL(qeo2;M6Wr4SrzL=HcA zFbQ=yB;tRB2T)B!^B*3*;p4M`7yw*dTd`-b(K*%awZtrBTJu1(?-Lc(WRS;uk#=({ zD#_1hcZLb9C*CSt2V5%pV6BafL4%hb$KcA+7hktvnU!Yt^Ny)2He-)FI;#BEw+>HYw z;bD#9l^YuF<%v!g6Q9b}I}|2XFf%jXefaR9ly31~Ms{H1zd2-?4r&}pxVL?La&h!+ zO!&fZm{5-`_6;uA!kA7`gH3 z-)#b~`#5-GJV^i}YsT-RXdNPkUIwZThvLsXW8x) z*CiWfz{j$ky^iz>ZO%X+%Hek2)T zNkN*uy}a=eum!0!3JN&EU!quXgFtcV;cjhGI!fp_QLa|iAE#XXO%YAX#0yJGP$={b zpWGZb{Pmf6%t;~fZrrlvg`)_=@IPvmQz12P&tE18aRHPbU*9-recGKn{R#?xw21i_ zw};|70wmvvo)ckVVXO6FW`;aFcCH^Z5Ah%1iyZ>yN@=J>nv<;fpuOFX-3krl$ zKww_qDuBK9RLorJSDcf}q*_G}|I?RrvmUqs4w+ZAwReyhUmJc1J#b-Gv{Hd}(gr^n zjwnIo_d@3xtz14%&a;Zsp=S#4!0H)N-wN3cRm3`WnLmES2&NiloiP*XH<_pKyRQ8M z51>Eb{m{|Tfq=_1U1Ns5MamqbqLnJjMz^kKq$lo zsb1dFRyin8AR<7|^sQN605S#FL1cpUM8-=3V8O5MXy!cxOhmD_TnQT|XVJI8PYIG4ZSMZ{QU4cch=*ZaL8fGF3L<#Nja6-mC*IcB(k=%xrb(|WJ0FSR@U0u zIxVZS>e1WZ*8E0nC`k~3m?l;#5YibfToiZXLBY7|Lgf*BhguKnB+vI)e`@Z9P zVj1|LnE_9YzE8HTg(!u#+`ePmQ{aX~b8?XwuaHo9LxUV>f3T?gj~$D`DkdpLyN84& z0Wh9%SasNC^}X3h?G8z!anHt7NsC<~c0()|f6M2mqB5KhM>fFTN1CUgpg0T|jB*Dp zrfkSW*}p#J{*_3O4A7?mIEAsEI5VUK8-?m0;TOT@-7G$J5>eFnlUBVS7o;@E`5;yh zPfBE`FQ<#C{-ru@IQ`3QwHA}i>%Ex~b@^-HXE;1_9A#J}|F?mSiqMJw+6r+3&8O^) z2`;|ARLJWK>TYCcr~-(Fc-&DvaixNv7L`Qb=@JN{~TQTqXz@VPJYw7iB&}~Msjx-yBs3bG6pZWo1XS`+N}=9RsTcckEKex0A@aXHP97nzEw+Bz zsfKQOJ-zergF_4?8Y8~Y(P2S2o}bbFqlf~D~c3~X(K)6>)Y z56OkiOvD>nbxh+^ey#%KvGyTK1Ngxn&r&DZI!?Z?T!e`o*1n!~N< zl!Q)(SL)xhW`K)p*1gqw`8qxlTr>7pu0XbG%QZW%$rX0{!q=5{%RD^3dm$lJND*WH z`{Cr_IQOUm9NMF!CY!(k=+q{{ZJ-WP6i*!AO7bO0@0yw#P}RiC0oD>^zr!w&6JO@$ z4A2BHFJ%0h`e%M{aEngg<1SEc;o+ULwz^t@G*oGMt?>0nULl8?Yo6qr8)Lw z3$~<;ynG0s@A2cucfz_xY(7ZWU=L`hsavOLVn~{0r55;?vuiC*#F-~{8{p_UR4Cbw zQ!3!#_x@iOAC&>TN#ybgT=YWx)9}yrslZQyK!!+52~#(EhgWfOa>D5Y*+#3FGM1RS)HtKg{6O;Rqk$um9aiS&yd@`kd0zG2>wkxq_{Qmn}H&|i%cx|jI^$&k( z5+3}r&}aJ}dnV9Q6Ycq9Z8K+vV z->M{G5k<{BE+#M*{Op8OgorRqn0L=#?XkQp%`I#vPsW0pBA^`ka1QGS1n`eJ%wXzE z?_E?U*~o!tTWElc+g)gHl*XoNc1nxqrAbZTi}8sGR2Mg-E7Lt!meV;3VDUoh%M)kD zQb?4*d@gy|*UFF?vDq#2e&yGpRI2UlWWXM9yTC;Us|>cJGIyB6TYtGkWa9PSk~b8S zG0DX!EbyBy!m=i7=mYOJQf2uPG}~?WJAxPcn$(hHvY(@$H#9;WO3;gmmaw2}X?1dJ zne5zhEnyVzI}M8&wbXhe%3E;O(668=VXc|Mb8%eG^Wkpwix;I}(1K?LUc(De(s4uv zBgJ0Rgp!6V_}4dpw%U`c6Qn84cRWF6SwM5YIurFUJ{wdS&Z zcu?n+{^3>}L@>RlB_zBq+3#Rx_P8K!ZcX}hVB`L`$bo$XWp3nc#RCT@nED1_WP*@; zn(Udr3CZN*;@`(>kfQ3Fno3hr`T6;26WV;Eqgg92g1Av1 zZ?32qbnFz{OcQ7F{67kBOqlty&bN?!=N&An0fQOIp^i$fb-_@rKi z3#Cs;J~`7UCvhdRYoWH^p^LfRuq!HDt!N@Fd}75+x8{If=0tFZxxmQ-LIu@LO$r&+ zq3?}S8agT~Pcf{SnVA`HIG5s{3+7_}1FPoHdpSGnbV)U01_HOx@W}f*{6Ud@2t>1pyjs-Iu!F* zV^7RmA5fO25o_Wr++Udv@0sv^0lBVuAUNw^$E~cl*24w0xH28>=0WSUyrRb+lJ?`; zpf`gS*Sa`Lz8o(mN9O-{0Y+|o^4>JEagx#7NlJ=Qr>r<_xihmcEiEU0jYH9z-CXfc z0({xnekf}-w1qQFMspl*=W#K;?)miVUJLB_eHK5D?FqKvsAvEAM&R-2*Iy;NwyPlH zIZKkxoBIzQj4*UK#<%V3MB=$NKE5tZ!;Y0p0`9W@X45(>nZo=zG!)g1e z`))wMY0zx3mvSS|anLa`?mKyM55faswE)5Z$YA?my)Q$qje(%NUEK`5#2~Hv4aE^3 zH+f4=={;K|XMg3{s@`2{=~~{X$&BEgSX>+p{#_D&uNbR$7&HW4K_4|zhK*u*<=10L z=VODwi;PW7ybL`3T=<(BH6J(kE8^G4v+9ye>oCMg&?vOqYg05He%o z^?_w_sRwDUV-|IwKwHOTL5sa0Ji%4)?PS}JN`pH>(~#l&61PXfw(p;~tVQTHYKxa5 z7s^0u^KyCbmVDmo=#Sg^`9hZp?JB3xQ@`#Mb;aQ=@d*h>@LZ2>MHzjjQ#XAVMV51@ z^K^B3Mg~XrRYOj9;I4?sNS52etEfgy%!m({^AhwUz>}ewnXOQyQ9dBX#P-9X&UW*m zE04b!i*0eLk!+FsnQT?Zi~foV%3e5qLvFi4occbCr@cU@B4wcLaj31Wr@LDwDki!^ zZf1+JIlWGiRyu=NG}V@>3b@C>h*i%;J$gi0bcqV6hV9jQ3JU7`7wN(!BjJ&+C{?A*K9T&cT-#?PFsO`WJ<1d+( z&ePFZ-y7C?Zs!h^Fru~$EzvcybX{VbVpzZzuzzSKjU0}&pM(NlnR-fHUfVe;udIAO zx)l!GTPS<%n0=tPipP-<0NVRg!9q71rDXCg*XkLYPra&X9nMEycsW&=$;eQ`%ketT zU*roI6bgJ2=dL5yuGyr5WCX_rZf<1kO-oB1pcuM{D(soDneRnJ_=6n9Dzc#u78yaH zEL<{9i7V7<2e+3>KQp)2LO5uS5mf&YXx=Vc{$;gg&x!sHg^%jjmw%e|JNH==wF2$v z%Id<&daj?+3%#L$wH zn=5Npu9oI~j$_|oC8#NEeatLm6G5*HR0iNE>_X9Zhn?*uQRPgWR_X#mLNo=I^75O1ZVkw@*4EPU)v)Awjty!ZcuCoJc8mSc4V32S z+1Rd5k6+H?7pQA9&AHVxY&QGa>bWyK^=deZ`56Md&m0yO6uh5ORMcaGvq0@rGBb+$ zohrz!=u!~s=9lU$MN8%4uWKzM26m)XX%t5%mKTlsJy-r@ z*r=4xlU)FN#_Pt$)0ZwqrA4;?y>$lnVQPYHcJ>7a*GLJ zIjJ^2%&jrpo6uLY{c}DG^N8_Py{Lk~MVkBd#>7?=f@^n@w>uh|>C{n*;bS6(iP5uz z5zjWLS`RP4diT=Zcu%!x<@w-;&l{mUo}NlglQv(Q|vbFMlgTz&hB&c*s5m z5w*1;C?DIeWO0NvR`Qeo3QAEg>=}=Av)`H~JWS}rcTw0&q^qsX63YW=H60ZNF8nN{ z2$tky^E4Q9wM)%=D2?Kw4sJFVijexY3Yp@GrLZwb zpHaH&=T`}(2sfw&!NOty5q1a2&>eU7N|r1RY~OIKo9gxU4^Cn%DT94;#RpsGW zZTH+3tpK@C=fnp&P>~Qk%{d+5>bIv#77oX)`W>tMo+kQ=^y{aOXe=gyngpO9~fjSzWd zar~j)oj2}I579U>0^d>{gkLbr0q`MLc6BjA?v{kYa_h7sF0|{qbmoaQryqZuDzn=l zu6CU6r`(! zfQ4>9e8`9f+#9e5j-t%o9ZIP<+H zPV7ci?i(1mKO?Sk!82})H4Ysj)azw8lyY1=Jh#rUog%>Kr^jfZFq@E2XGhZvL%eyX zrlZ}33$(5=E=+5A{hwj87P|+h)pYtZcd*xo{=%TUx|2p`0=?c4PNXzFr`#q zaS-r-)7+j}`)Eb8f|8!g`H`PxIRgu+My${4@jPtYdtZh%q@ML*W2HSaxHV+z6f2%h z*&{_y5S}6Dz7~xW@lvF-F1`}e6(UxpPBT#RS=}Y3fId?yt{^9e2F&kmt#oOy#{i5n zI)+E+C74CHYD0GgN~3O{XPM17eDGyr%@re5at>wF!^5ZYlMBz8v6*^G|5~6A3=DMk zqt5^8^<7x_a`$0zVKcZG&|oUco=N)`_r`7ERb7=>D5|<@#!ASh-xt?y8zAm3qUV_y zGSr1r^w1t!0|{(>;)NWTQ_ckRkak-Vlt79w2}B!~CKeU#gu}3swB_SW86s~J*o%9W zt%Q3AI`{stW-#v*HB+Vx3gOv%O)n0hum7E7^+41k=JSO2n(;4=C~s1emVs?0doa;>8QrLx)-kyq21VyT*dE00yoA1aVn`4+7qhzh3M~tMM6?t^ zCmclK)fz50k;cy8WM2O{&d6BMx;>zVbe#esj5Ho9XJ@NN=U)KaI^?VBwcCyjji@c0 z1WllUEJ-d>(%@x)!)q4;+TN8q9%T&;UoaiR_)8?ZK2b?Q0bXxsIxW5;)fb#zLeU#IjAiU zA=$C~?BBhSIJl9L(r(AtxjN&2`Y1GX?&~tD}8lX@mfQ6M3Rfe>N#-p@Ii#pK6Fq*9k8b!R#hJa26 zMWErf4hSvFw24VwIC~I#e-Tc~ERd}*B5god4$=EafeW!&x6}nR-1Xlx!f*F#YH4lq zJ987>uwEw_X%s7My-JsH@c=P`l4~JG;1jE^7q@+1lD6Brt`-XcU)& zMs=#Pn7_aFLx)^Ow51B}-z@IpJ$|Rpbn^PKpXp%hzG<=V_K!m6 z1k~gjcsd|b`a_B&n;uR$jbN*+g>aCZ5ENKJL5my#6*3*Q1594EA1=c1f+Kl18sJ~y zc66UzHifGpmB8@W5_`zlEkyu?R8Pd+-Sh& zkn04{Qs)bF#Ei9N`l9tX-&Zg)N+Dk`I!XbmD3!7suAHHKij-2l-R$c8_g<^a;iO0# zHo++Le_R?7DI5(F&${}Bj(uxAO(LE>zh7Gsq91B+NJN!bscB1pm9y<8 zt}*0nkc>wxsyH`wPy~-$UATN~{`Ee}jT@(OTaGdX;<4uk2sfjE0^7FgET=Teg&lWJ zp-uo`4uk^*{XkF3%65bHrDEJ@cqw+W|D23W1#~>(Re*yTy`0~sekpOy`m3Z=10hDo zh<8&_6NQvsjVttobaHzfZq)wJ5?eqk4$qm)Wm|Y?07v{lTaY`&e51ic9<(X_jl2$@ z_SDcAxnV?3P7Z_h{L0RsJNM#>1N=X1=)ln3r~DVd*vpeJkLwmPf1623@c-4OiK?ZfKq~BaC+m^ z(u$wo;AXoo<9q9!GxnGi8t$QW0dwDgZ4@oD3-z)QHHJ4}!8^SaRoJ2lA0yzk!H=k( z%e6=nGavo@*>JJnNf^*fIM)bKUcMWa-l>9=49T%Knh~_*JzsPClP*?FirL_HzcZ2zZpd5%_K;*?ShEQ&wv8PMFD-Ev2vWrb zquW0ytSwFB?B()PZ7Ec2B zEQ_3ctf)<%B8&J5*f)Z~4au<6pfQd1lw~XQwM01OW~qcURzBeE|QA&}-rP zF(sLVB+v*iU%DNyy(}~es8PN0XK-b;*R5`LhXJRqVI(;z9i8Y~u9o5{s@zbYA!v68 z>VBP{mqe%JEfFSqdT+uvNlUXKNkD##7L(7-%|)}+@Hf$L6A;t{(gMvm?=<6}V$GtL zs(I-W&o386u;rAwK(wOI%JPr$?iUucWGD=BUGeP8&174A_FTD|v*)snjWqgYVN5)m zZ-LFRJq;II-46|=0GnE>8{FBcM(zSZIM7P(oE3S6!ls-c448cMQ9%>h4b54y=>lfx zdZZ)w&cbdshvYeet1j5;-hidc2BpS^55xi8?*1;c5n2-wTFxPD5P}WCLPky&4S&cG zvX|1W9r*@g2*Dqxbccyt!&mlaK|A@H!s#Nf<*XU!9D)7Z`-)%P3Rqs=uV6StKESru z+NK4p$ooD65@DZvZvkqGP=`nluyf;Qs{|mk8ghmJ2wPwI=0KhC;xT3~7*Oc>`N>6k zZgX+<=7lW5E}%XBPcm@*P?{-X8l3S>pe*zPtqRnKQFGW%kU;nw(X#@Cuquo@j%u-z z!7-4?cmYzlInz&Z><66fx+yt^GmAZ>BD7Xl$;vj9g~3rYM!Y>==XJT`R z-ayYa_4Qqc!DFtfrHJ(cPTnk-X_xy=pR-{2T2z-88&y)gd78d;_e%~4k%^xx{E%U5 z87eC+MJvEXOz%k72bpJBc=&q&c#+M$IrrU7^Vzq;3h>b*gM~f^)u@nQA7leF;2@LaEuZ>Z7onZPpb(GyZ(Yj9d=MZt!=@=7G*elcp8w0+4{fDd9Ip6-vVo&t<`3!qPf}kBXNbP?OI|HzS zEZ-&?&{P3eK%fQD^7BiWd_dK~06{1}1%UMC0;3ojahM$>`hw~n6ryx6j)94|fLgwt z6Cc70eMc>;awkV0rtV=zw0}S>L9_d?XaUjn^gwjx);GwI{yb2eq2%(Z-T0x5jBg?f zvyjl!r%&6R0XN4aUXYesgu#%Qj&5Uy*O~~9G@wCCDsw9LB8@Ac)-jk90>{(|`j0*f zSa*>D;BN^0Nl^WPU|Oex%^V3vL|PDeY0yI(*fsN{GyA4<%O@JeAzBx#WmI5|Xn@C{ zJ^sTI0$d8rhq<3{r)GY{cXnF2!soMv2Ij(o+)sP zM$p<2qy5Op2q)+~B(+8hnW3p73UiGYY-7mn7*3ESI##Q63@Qd>CIc`-Ab2bcjvmZv5Qk#*GsPis@RHPk0-MAi z6Td0!=m83Pi!6jK0J01Ey+ELps_rr{q>WlY-$Ek&440rRg~i7Q0(b~d30l%<^CBVB za}_9a@IAGGwvT-X7(hBjy*VFDZbJkv(*lG5(!f`S0TSt|+S)Y8n%+w1+L=md zs)p1fAlE>oyjr}^9sA5_?z3Eh#V8-nc7llpA_Rw%3bXxcanDyJ7er|S-$dKgS4hK! z5rm|jjZo=#TU$!H$K5ZMe+#3&<__H*P{X})<<|QI3-fiDBK>|%wNCueAV{E$adIzipX<-9X@pS|P%$5MR?3i<_Ne&lL8onlK|xZ*WAITQ*z61Ix~7l32Z zUqOdI2Kne2K7~;8cjvxMsk{w%StFQ(wjrnVA;agXR6n{#&|*SD!3wkokW(`v{Tgg( zLcwL-aCShirSqpKZ`G3<-^X>M0w>vR=PKYsFo1z6*%wrdVE6)$774uYfNM$t7Y3@o zwv)T0xWbYTU_u^iX>A3DC9Ol?ap6Uth3NBM#=DVEpn)4R2UPlafsE{t7R(DadrQv| zttN`t+(Jg-qXCFgCADcl9xDri3(M+lS-%EiX2qmm5VEiZ`18YDRU>GGF?TDx-TqGt z0A@V!Ql+xbt~n(Et%nIKFcLh6fV=KRiSQPKY1lg|iY#-(p!fMZ$iZ82%f!D@c8dRe z3ph-i|KJ}VbjJ9Cvoe(`zZDktzLD<+^ngUe?7rjKUV3FScU zB@`Yv01Fr%aN5jbCrh`1SO0^RTbfx`Mh57L02H$MKL#C~__b#{PhpcDmB}sMX~g5u z@BjYNQQ^M7G`i%qN6$7THWDUXR@o2-rX*U6eFIvB(2C&p9;E?*mObphyDQ3nf-u3+$^M}AXLXO7vJsVfkm()P)jy-ND@ow z9a63@A%=AeIy^lW7cuyR`8KL|6{<{HLT`pbQ%BV!nhy9ihQ(GYcMbE0RyiRO`UQaM z@*cDtfDPC|emM2_fbq_q6mZUrML)U&-#{xAAzvi1R9zT$4x}m}F%R~0m%xL>Kq}0* zE%IIk+_;aRd|<~#AT3x|x4nc^{BS|WY(JL-fC1dj09RMudG2ngtq1%&$hUOHwaZh} zR|VjEg)8anAu&Bcs1k&LX=!OnYHEHERDTur4T?V$;}H631pWqC;2dXq6~)j0WuI1w zSNsn=AR%Ipe1h1d;Rhyz{N$Cso*8F4_`09c;WU0N-h$$k_5C};IQTP1d4h8Sgs2~3{h#d?-h`NV`%V6&>tIkq zL?3LvqzDO!6crfSvN#9*U|fSuBKngMWQ|Dxrscm|oU0cF&7^2ESD1bv zQ3voKc<2Z@jI6p)MCm)+E{+!w<2$CLm&(0n*gXJ5+Ca-~)dad2T8!VCCsYfBDhDH^ zdHo1VVBpeNgAB&FRtW812p6yhsVjhqAbRahEk1zrA#MMqV;+e;VJ98EDvCF?_xSPQ9;p#++t@fgxP?8Bk{Ni2wnXZP1$2 z82H-mEN%ln3nhyYFeWCZg}Cd>2{QlgMLq#3)GX-J9UXdwTmAtSjA$?iX1@Ms0DVX) zJrv~`5F9L{p%ELXC7mh&N`-f(pfFZ1GQJ9?_CV-2x8ZF8omSbZz$*5V&gg_ANRJ{D1s;#1oH-ByuekG>7kCh*TfF}w$CI2{D^G~S3$83mY8A4~uU(hh9N_%dwkQxNpn z0G@i7PI}XOV3$KugOTV#q>aO62i|a5JQR`lS<(y*knR9FdnufDd`V;yK{g~ zRP{v zi9%~tx7w_lv!8Cb<21_`U92x1%WK=Aqp@YNwxGJIrVPcrf>cf1&`pnIGw zGb5_qAxPZ?!~n)hny82;8C(1N%`jbag3T4pViv>%g}|T!$??)1<14Nrg)`bKo41pP zG0v+VErxb14|dVb--*&-6!6Vtd@-pcu0&W)2KNsi0$0#0trp?8`+VOr?0Pw~wkx46F z87xT&V0U2h@CA3lbTI$K50%T~WD0=CD;tZuDw;eg3V|JXe|e77=111}aVfgo+wuI9t= zd6Mz|MK;hiSpNUYgTLP}6GrobWL%j4Kui$|TOuNn01H$n`|3m-JcW1+p*pCq3w%im@-b4(Cj&FzyoxfnYpz=@`{&$1%f|= zygPkzl;MikM5C1HLMrd>9}TCaE|EPlI+s9Hx{TN7#plX8!8bTWeZE}1zWv9}vvy1u z<#>7z?HWaW<>+~5J*vEl z#|+!D5yYBElgdASjMi#{oO5f)uYtJc>p)>C)XmbgHZ(P1Aa^hU;rmhS(#^+LE}_kx)kpg-`& zAR0;)(nPo$F?7rl5-}P8A3<^?0ne2H6cWP1sbL7npsV7nN&_?&xIbyPwSd|zJY01S zfgi0ZXuSLT0!~x62sbVXa6HEY@qCW~BQ$edYgr0vSN*Jqg42ZegIq}My}=(38jDNK zcWzguE(Ge|F?l%(BnkhSekV<5IAx8$iN9K(>G=GM0lf)jo51$_HX#lp_=mFd0T;dB zMN2c9of)7sMgtM_9Y}B>Lj4kCi+r*T^Wlu5=gD;q)gU|a=59zxL_lc3Eg;E{l~@=8 z&9zBtiWa zCz$Hke+kdgXSk)Dm3W)cfUF`z#^YznVl^Em&|6z=5ZyJbA>F#3-)^Bac|uhqnuTJW zOQ_gh^XzhJIu!{UT32|MP`l?^`jn0b`MkbokZb6hALLX1#V7iUFZ}%-5mq2l#bMi! zGc(Ik?j6Zv!}kH{!8BZ|R`t6y^(Q(&(n86KNg|IiX$vt%RR2(Z4~d6)2q*=|yIXBEv;$jH5%%pedlGV4$Z#u3oON3RIVKf}IPw*a5U_&wkS*H5YQxAdw#Ct%sVL zBfLB)KW=+S>V`4K;giPtJBVIL65ZD=PmVLqJxF>KKhS`84U~)R)qmEE<8jSR=hWs zJ5{~=+O$q96N2Smnai@jbF8_qORZ<7y>Y#OHf%kH{i=FTUNYom)(;wWBS-5PG#s#7 zZICGt#?H~f97#%v|4C)lh`3;KhU*|f#|gVu@pXIPHRo5D4&xv@HyPm;s!FX4DX<|n zqXj1aD(!(^c(4D&gIgnA*Gjgy_n~aQe|jG#eqw}BS(5}lR%@dky<}K|loxy-v0n#6 zN;&GzNPzNMe~|^l9zEFa-jZA4sW(Rh*@{eq$i4-Gg44^-ULa0Ek{#@q!xIHuU>$qF z&yP`nn-0t@WZa-o2p3jTLMoJ)_w>2_#n~|kbBmh}m1yh{wLGF1Kn&+LRTdTS?iGT3 z4M35CAG5WSWN0W%@1J28M}vc$tD!wj^}CMU&vN)CJW6b4SibFrTduLFqx9E854|XQ zJ03Q0ZG9<1IzyOx=&7Ntv=zrkBqj^~|*vR9twEs`LYS<0SW+<=;YWx+WFdTxyHKnq$ zQZC;WwwW!sBr|f1Ula4+ihNdI?DI^1DYG)ig+j}+e)_(c^mH#U z+p0J|!PT|MWPpSZ9+=wE_yL0qRh$-dZ*>6b77(BShayB7A(p1z z*B>%7nOj0=13^~-DgcL*i!}8Ln2`}S0vdMJcgG7@>Fy+{1f_8K+dSYa<$K(iL&1Tk zeZ3u##1#&b~{{zT9}*vf?POLBsG?% zRmbMqRsG<8i1AwX;Z0RKA%fxxm0tMpmE1O9mY*j-KTKVE@QN2e9uS79(O7fGfW%cP zr{7q32sa_ktoZwPMDa4mYg<7B^+uu9t9z4e4x6d=dzKg6y0Fodk zb0n%Apg%;%1RC(2YL$DifPk9jD-TFRVLC%pTM<0PpCZ1)8}8G9uX}ARLFLOt6F2_v zfF7gX+=w+gSd8I8!v^9Dj$m*-5MR57f-pC5%{GEe8a6p#NSh(sEAO|445c>EE!W;5 zdKu<( z2v0NURaIOZ>0-e;*DOuPEp>XyEI-mzx)+)3_VxD$K^kwZl7tNqW^3V1m)9ELxw4 zH$i+}fJtXws(L-FKnLM6SPv20^mz_6nqOU@;Jym?fkc7&7V@ZM!6Srh4%e?seW(JX zDs&s7SgHiW;8k!>z=wqp?_gInzrJl#s%i1AdS`d{Hle(Y7O=7O5CJXS4^EE?>#qN( zbU+ElhEGPvw$5Oh<8QTjy+FdMc5SL8DkJqAMJhLR@OdjOC)$Y8$(Gg4SXJ_$*6)U= zhBblTAG9T!ySfMv3{OCQ-Wy*`Ua zWOcJ`4)^Gh;0M>o#2a^gl7m9JzX|*WFC7qgVM}Ak^|H@P>JrlsF#x1&Z|!t&9IBhY zycdaRT)?CEfGW5tS2kS|YyyZyPfagWR{pxCR$Rj_`oLz7q`s4Ja&BuWW*=SbZ#=K^ zFH&ElNx3F$ot~%z1=yJ=Os?m7?hrazTv)jMef%?qKak~!0TB<+26&Gj+7(4|`KB6V z;45kbVd;m?&Sxl9InzMso4xOu(kX*o@Je0jw2UaYzi$q~{1AASYsi1RVc-=zUiOhB=>f7`;h3qBh#NlU^jP1Oc$A+)DN+<3rk zA<_BWw&p$^C^z8TRZ(b~mcK0>$rCGCGA|8IS$CqQr4?lfsrcUnAw?{S((EEDp zrP0yw2A_;#v}gIXI4Xm~V5FlQ7hUQfrC>*+UPFUoOM~3+hRpM*znL&1u)sQ(^_C~C zvg=daH`RZtsuI_ne%%SRcj(J=HaFUxqY1pCcsH%u_=<{BIdg^`5LSpB7BF_e@NU5@ z2=hAXhe9ua=F^p{dAIxe?H@pW{jWy~QDY%QE&y?-tdM!Z{FtO&jI_mh7rFH>|gK4jOtV%3*F3VU=1RR2&9L8b^n#I<-@ zij+Sf)x_`QGp&{D3q@|Inh^Bq!&fSO4HLMuG~kiI?*-jeVLT3gq_48P`m`cQlmNIC zW;#i&APk!r{ta3Mlmtnphze^0pzZ#%j+b3Q|6^VhQ(0MgeJl;s6<-g$cwqVoXpi6+WCY9? zbQlBBf%WtOsPYUwvBdES1d zDBXwV_7BS3Yx?`;zy2gH+xXS}s|#N8lCrY!LGAX~7+7RuVki(9R^D(wqGqjKaAqC<2jf=^{LylH4f8_@UJ{j$?-w5oiqnyVvO-1DfO!4; z0l(GB&~OPQ*WYI)C$uacpkV(}UDUq9&ft2KEr|DQH0O&r1kDa?pzp?P zaFBR#&}KX4&{m^VN~n~+_DWf;9(+B`K+DW1MC;lw&ANBr``aFa=F1ydxp{~=7;wQq zfB&NAs^a-Hpg;;|c#1HwXK)W7yQO;%0^uW94OJ~kx>B%+h!T?!`^J1V#-|n~Gvdx< zc+)9Rpq7R9B=si-tKBjB_|r!EPUV1WL|5OFlDPEpNP`B5Deu?!d#klo5I^+{4k(;d zxOifY7Z@0Dn!++636mbOXHZf;UU?MoIR}wtY8NM^_ATeJyb9RuW_S(H9N0Pu>CWzj zrpCrR_3Lr}odkSmY60AH5W4<$|JA?O@&jUbl}wpUUeg~CaH8ByNIp0}xt12zsK=hF z`EU`zhZ^wEzmGio`R}V-ar?s$Jiq^>xL+f=gYSc>CphCar)2$aMxjCowDHL0VkC+2 z0MY<69Mkm*ntAxq7*G>N;Oik&xKck7d+!Q563YA^ImZA_=?yUg5yiu&me_b+IPf(M zrM=M6b{Z%(hA4sTY6MX*SeL8a-H3^!y<&*(QV3qS1W|d4GLVooJkBzL1?^hTC5T_c zwBIW!UVV7u#nGQTSIZ$j>hsT+rJ4khPv$|ElC1(li8%+FR{94I{`2I5f}{cRh5?iq zo*X8y_>bTPcZfZjA_RgAxw_zJ7^W^n^a&*bn(y2;XnGJ`p9N0+%3pj~@PLv6Jo*|P zT?k@re`J!UZrE9ui=EgV3DFkL*bZt-fZQ( z^5W6883S5Y`PEM&AZ%;!LZv`4wj&Ut7?I=ayBzuR5evhc_}VI4>lII|Ih89JduT8R zK+kqm=mk55A7M)fylD^?X9SK~#J9M<;xn+?)t1xu(5&#!d3gM7+|<;h7eQC|X!dw9 zF;VbIhgjYZdGUW*fF$A2qDon5CMGCreFY}Jd9j*M&s;x5yf-4AW|aBLoXaJqv?Zb_ zT?O|HF}xlLNJxuOQ&u)Q)C3tbB4vE=;LDZxv^Gj8kC0gi7b?N;l=Q6F9x{Sc^-2t= zqme!>FCW}wRAvaUZ>cL0NSq)d91+-q$O^_L;|bLzq#AQ+MY&PHzdm9%6!ozOjY?FdeM46=G_aV!$|`7kAM z;S8c_X9Qw`;ayEz)jkrDt%JIuEhfRgm_UeSG^pfY>z0oJiV$BG+v(PXnpoCfe`mC; zzW5Y#q#0rs-}1u3NYdR=VnMN2Nr^Jjq}616+6&+BSn7eiD8xMn`4>T>RfMhq>T1Qp zy*Utk;7GjVWyJP)H0$Ly-@SXd2mzrfwfM=Vn0Bz=vBvf(XrO(~sMGMiU2m&bb%i^}Y2sy#+wzG?&4r=6(VfBUE+T?rn-k1S)hVDr6< zU>}<&xH7{F?UsqgR~%P{u?Shg7bhQKF#$#0z35b_+_Wtit`l}C#n)o6gnwM z5Ye{n=}!x2JI*<1(QyQv>Q0>cOYcHqu$-Af=~4O_)Z$7X6t(;WVKVp>x1keHL;NJl z3oso(sP~@-p5jEbOKbZ>Fc?G+J3h~usn*Q>2wpcWt@!cPnwpyRG5@sNg+_bd1uEc5 zA8^lqw3G+wg7L)b2O~A1uswmRs?7xp2M5xPD1f*_G*R%GJ3n*NW~gA|$ojvh;r=Y% zUk<*>j4o{T5#i=HL@2Oge(L>`L_%mI#{KKKjlRb5nQH0Yy?%nbW?WO+=^@5Z%G(hP zD9&vW;B}ydhCKJC8~hs*@K+I*YFr2x7zTH!0XQ}d_~IMN<*ZJRkLj6gC>X+DaJh8~ z+>;=%#Y9onP@d*!a?*F=d0PsQ{AhnI`M8)a(t=6i=UH(2q$uwE?@!%JWD!`IDQYpJgf>;=3M!*iA?gHdCb0Rj6 zuU~J0c>}Oo=@+)#PuOf#%!2nY?XNUoaN>#(!ebKqMNMou!)e8#Kf2;z~0uvQL zNkSOv-}p^7-Ns2g_Sq|Db!-qoLV1Vp-Tt06gkRHha{ggNXa6sG0s_SAUo2$j_*YW+ z_2@d~PSIGt)XI4QSNElq>NyNeF`1;* z-n)9|U_ui%Y%kno(kFHFva6ZcF1JRsWZ$BJgcNi+L`ZlKym+Sk5-pT8t=@~yh*}5H zl@fDUV0DF{XM%aH;~IGU0r@A%UU^neI;+;)N{TB}XPypYP9}qi=}ZQTe!wnmVvJX* z>^ESdVV8!3Cb!Vsu3En)01mVL4wo1ITku%&(sZp_Dr9Nn2wq*mf8EXI%U#d8URR}l zQ!xDehNT|E>b(?RiE%Xe#=Td_mRO_cCx=G|#xOZ1H$tTc|MkzT6-p^ZY5&6LVO?&G zA`pW_Neu0qE56r=4y`Soe`GSHE@64YXPA}b|M$ET^dK=b3qH5V@qe&b@lI*i5LR0Y zRz`sCR9x%@Vd3kh0Y(1lNx0Aq2;lmnABla%nE<%qFsBte+mPJcJvi9dKlwyl;Ziff z&aReFx$C5(qm$W~|1kAdZ-r>Ah=>TxHc;!+|3?BSVGCmidR4oa;ToD|#Ilh7u5aK} z&826Q@W#}``lvK5de5tp3a$S03gA^;Q>Vw`Hgm0;g_l(p0wt@$sCw$;O^J~?>I8PJ zFn9c?rjvxIn6uL=o55;kVV#2~6a?7jdWZB1YvaLb)ii5A)dzD2Uuv^7cFV7BH7yW) zdO{P@Uq`b!u!<>JpOi1wbU<*w!G`1k|3JEAE;@?!)Lgj5SfS?ozO@>RO_MUmjmq3} zvaglKP^H};W>*G0&V!V34h>FEBHNDF$x#v`U+;kJ8iO2@N!+h+#S4J-R*HOg@r9X&5fQiMX0Iz)~#}dz!ko9t+phy%Zs`ri&oW= z*HjI*GYd%XX>6j0>9;z#a4s}2OAva%o=<=g=LfBD8 zM$&vJ!#|*g{(a4@mo85yjYm7HJ5l@h}BGO>hw>g$h<+MTil80VMD!;cq^gsT0JN~AA|TX$4_Vf^!&(8 z42hb`&Td%To!&jp%F3!=+(m-AL5Bx(HT-8-ac7!3TB0DzsnwGY((AmS;e$FHg2Wg( zI6@HFD6ojA~@ViK=1C?el}J-N9tLaeuk+*hHyCx|*$5#+<9I zls`pvPb>>>TvTdCbtlWQP)zw+d1e;aMe{k2%d?e-wQ;7j%^GI13p(+=(6+|V$}Z#? z9lkm5@CBnFFFZ|W&H{9}YVIyv7C`Z?pK z%Au!eHU9D`x$;=4Yfh4Miy9T&<9t+@2J4pz@KX{WVAm&abKVRA`#|QyK3=FFVg&b|2FU9H~Wk0`mzeClg=eS9u!k$Y_WbXk+`8fSwp8lev zz41Xx=Uv`4mo0KGv z`9`?-{yCJt$qFYUewKCH~=!dk|&EMVT;4o5hkr6Q##` zSM}vz7N!vAGASkrG&n)%6Yd*V#XL9V6{=R4XnF-b{dAnLCZEOD|Kry+xJ>u!A6+=y z%(Pj0oN4v%+aF>MzAT~cZ8W6Y)`jSui zaA6L(gdlc5W7-h8JYD*4+s?=}9<`IS{mXy;=tEJ>>!wM+(gY!`qqVP{jWyu1%UWP) zGi!E9WhA)WNUn5NcVJL=`#hNK+Lm4CFnM!CaxnbQW(t%qLQ^IuU**S}BcDAR-!-Gr zYggjkYJSAkR4q)~IIa<@J@G0_*NC)uXIM7yxv6J5GmA}dqibisAy++wGr$8M>; z$$5Gse)P@efZ~tnW#JyNhHdgoez9lMbbf>;BYqKR>ZRsa%g-ja)pKJe-$LC`H>ZB3 zcC?(l*qo}H@)w(xdO;2AMVgGR!6JKt{jr0H%YJk9erGy<)l|U2M270q`JHqwLVXVh zFAE`F_lSzx1(josc_O1srDo=D+0zz@?EJCA75@evh<3jE-oeIVd`R!NyDXf~Gh3X! zR&ptc+8edy6gzVjszuHh#w>axq#U)=nOc%!ms5>IJyuF6pyZY&q{R6ZWh#i_F^FIZ(G~aJhGj zvytb*gx5B*a!=QNPK-u@d0Ht9%kx5EQ&Nj_t?~YB&-JXF+2&KLrp?{YdfM+z;xONu z&Gv8|XDm9ORd%49-sw`7^7cP-c7D(^zFl`z^bPaeW5V^~E?G}}*V&{eqcBG@&&508 z8XSwO_0yS&&H0n=T^+YKUUlb-+g#8Ry-@#4nc3I8Aw`HYl|HCvIIZUy9vR;{JE+s* zTrQ5PpK-RMu-jz&a$dOEx4w_g z7X>CfIe(MG+j|z=1h;ALLDlWlAV>dfG(WgmyAXf(`my70%nc8B?n50nrVeuUsp-eb zv(^G}HM$pj{ib71D}_HrEiGyGso1Quc{1&aDjRw; z_-axwxvLyKPK5NVya960s@DW>c`b1JqQM*7x0p9KHgSg+gAyreh3bkiKD5$_u z$TM0Tzd%VT2=FeS%%1!@jQ_rSKv!b&*I_GarK|m4Z@g=MVNxEOfAHFXb~l4ChxoF9 z0e1z~>)NE`73UAe>W*I*9b?6xJ(q2jzwLM?=_Z^N;5D2lnvisOh29#}>a|T3U(uA3H(>yn=q1E7YvWUTmI>R-C0~9&M!G)fTe%bbA>Y^D1Ul zf#QjdJi+4l_AO>T4_X`|Vc(+2j@cf&Hvdc*6BN&ER2A6e5}iG2Oyr$UzU2(& zaIug~5;H&C7Cr@q;KeiKu(krmMV>Ub+mWnxQJ+^I3DG^&| zRCe$4KV{-8{KI&8qQ;B!%73zB>Ml<(URU53vIVXLa3hcRMj-jlNcy4OuVquagRa8@ z!`_D*LYpcc$rl#s`SaF7lqKg1&)j!!+*8fRtjG8JX>zp9nk4M^bkp;Fv1Mf-#)Uh2 z&zK7>3_CZ~%XiW$<98x$*=plgyxx4YsS>Te+}Zu1UL6)X>E=7jQ5n8|IGn6>>(9)-ZM^8g^wg|k z1AhG8xS?6m?oP#2H}TxNd#OLo_+6~Zuu$%0LjjiVCp>c>l)V>11EWIjdRZI}`K7UE zz@g@zzpsYcYB1xlUG`B7{~X!uH``+PQL1;|Xn1qUh}w-$o_15-ooRHvSlp*jBUj>5L_O;>GQ%(q$}2hl<0kHpz?0#975 z8)V40+nJLKz~8RxzW*`=F8;K&Wr*Z1ukyIB%_#AouKty)j3CfW^2fhU&m!XqZ4}H_ z(f>~1m5B?yzUDetC%FAL2W`l(RcE%Ra2HK#$aRTpTgbC$zttglQ)<^?!gzIxtv@~@ zJH7m+PDMt7jJ%BVUzF@ko?L3=DfOu(Qcuup1JwMi{g88)7u05gnkj#jSOTxvEyreQ1)Pq z`F<>y?-VITLwyM(UAFbO}xTx2CHCnq%Oe%DGIX>^z zzeIlhSSHKR=&pBTzTr#T+)&4d9DCd=w(|Ta#a)a82cLR1UD`3F>U$|p(BVigbkdcK zhad;Wp_U3&dwGO$Ai6Si#9Nv@%P?&AwQ1QHMofb^gKxFl-2FG^;r)w8Iz|nlcwE5C z`>_Yp#!>7sfs};3rSF;o^p#s(m6O|L-ibd9y}(%h$HjlmfdsV?2Ch!>>miZIp>8?(67ry%g#w_j3#3(}kYtEHuW1vQbqL_r8Af z@k_HJLZ2L^5qGS(8w4?1fp<5*=+jJ=?(VO#ypHqScYWGkIB^MP%iY`|f1RJeOk zGs;4la%qS*PsnnzpRk+rll`z+>y9`~E>NRLuFHnbOBnu7hi`uu0qwA$sIc0&7!v5F4ZQ4$yA`3BV zta$nI`oPNhNe90k>Q8owmRoG!@=U#vVt}}%1#%pt?#*|6`@L-6viNaLP@ku4($&+2 zkmgq(zmB}_bFNFV!|=9%-dV=-6wX=;Za8vD7&u%`hc(WZ^W*~XQXykllnDv$$D_4z zekf7dZf6TQ+HRAx+l#MPe!lMF-MM)w1fe5_fQjPKj>T@eIU4?= zeUa}S&$H^csUdKxh%5Z=O%=0cn!=i`tH8{j9efxB$QVCkIj-^GkmJOnl;F?F$!z7X zL;7Q(^Ef{OsDh$$PaXEke%xoK_IV?pP*5?}Sh-O(<3^qA;#C%bpP8=XS07C2a-sp9 z8TOU#4_rN*dnLv3I^qMnZ;sRIR@pdMHt;1JE$MQiIj~Z`r!7~M4ZM8mObIhy{bZYx zS=5`Ij&eQj#ps)>Y@6lt`WsG++)1a4n>E90yFDj1*yQ-b5r1{vDIBLGjg3vpe=54t zxnL40o&~KRP9zVDU)J}x(zVFt*Zm84*UyKK!JR0SkzwJK7^2edj=t5WmTdG<%DhT$ zl_VwjZa|r#R#mjA-91&Ak5_fLJryEWOUlk(XN&k8aOiRKDaD4b+I;)PYpt`k-;<7Z zbl~IPl^5N)&%Lm9nb1%@={cRB{Ay=GnaFOWpTD>jHlvG<^kdh7n_u>pG&UEiq3XmM z-TQ`MKtH<*`cC*@a-!KX7V9O=R4wla(VFpcxvzY2=}=?W!LKiK-5|dy zX1VS#K<0Xxs&72>V6+HG{(xHh+0WZ_=lr*q4tHB3_AxB*E>9w^rX#RjQ*pV@WJ=22 z^?twiGbB60HwLvV^GYXtq7!{62@7XEaAXhLEepiWtauK*h3~G9N5{+6HQcx@YZzys zTYY)(YV!1>{;>VhRe#1(QYRhxBtL2`77G2nn)1I^9S!)R=Rb~i9PUb?zIWUX=F#kn zFWDs1!rl2~y@#TuBoN}uScdJU8 z=h-SI3fr?SWdLAn>bm<5y1 zTYEiMEu7!|Q~ttcmFJiPk#$lo+v+dG}@2oXGG07Oy{ri3^Ev}QY) zLp(krUA;+B)F-{C@|s^?dyK1$C>U0=xDTdFAT zaeVNUu68BuXzUHDPb}_P^Y_TJ)r7#=jwh~%8E(zos_Yu1daAXCf^dT8{W!#?Bg$K+ zbG~Cv<=-?dc)L6!TkdQ&cN-=pQ~@j*VUZEkH<{gyY^kwzxFb=KWzXjvrYAl%Y?k)y z#|YM)wGl9XOqzX;LXp)ymX=hxDJ5@$6)nE^Kp|TAqTKj*Sj;baxRz)|`NXQm!cEt! zMORqW;}?_8lcy_s`JS}-Ujk5m%r3*fMqe)kShc9Dhtt-dY-tF1Q zd&siUZU(zE`6s`eS)>x4G~A8+;eNqbHU6`eZmKGjX?L_FKNkMzv+eT-fOIHto`oiQ z`XBPG?p(wP^AFBzD>7nZYmvSxJG4Zmmrsx4hJM__kc0J=R)INM^oW!$KRPEw^h-W- z9eKVK_R7i;901sm3Y_q9!vp1bUowYKx{PT2>pxj4@1Jrh%rjmIU8SD%n_J!M>Tl3; z35i-+%FVrxleU>rc&w>)-N*ae?1%ORvhd+UmG0YjnmAJ)jP^|nYYSRcE`N(3ab@Ov zDQL-z_Z@>Re@M3WT%Um>^rs)=?n1%q4LwrQXr+-HqD0p{!-ku6He<)p1_Cs!XRC@6 zwEM=@YJD@##qAs`(g3R4RE)2Ac5=SGcQ59_f#AaV1rMCGyMo8Z+SZFwKgZ~BpH^}@ zmDj|ao^k|v8r)Haee8XB_mMmA+RsUEQU~@7yThcto7J?Q=Ubwa9s-}SJkMH)0S4@$ zoGk2TcUAhEi=z-7KbY+FNkiNt6vp|rY7yieI>i_LXyVypy0Cb2cQ!ith4x6Won=il zU_N7X91(g{&6|C7^XJh?i^x%)<=2~E%okq-@YHbf_66;w2yBq1y=xk<0$Nv_JbR_U zUZ;5Z(Yfxj(L;{*>6`qCGeJ9{`_Zh1JyM}5WtHC>_&6p!g?Yp;V*pT?@I1!CeIjHB z7=DSsfQuG4K81SNW1E(bPu1JLHFMrFAN_(8pNvt?cE)#34M!Jc=Xp-4=Ws*Za~CVQ z<`i2`!O3s3F1e)}2Y>p#@XfEvZ_cUTduUmWnp6ITiIORpR>r}ZQbQ0%Uf>sUL-jJ< zyPV6%LtEn!xNsNt>%se`LJsTQ!aX7_R(*910K>&bbVLbnw&?oNwijXT#+>gGogFvX zR~{_4dgh(oObTi`2239k|eGxO`U8dFJ-kr^mPvS~X0SDCx!vBM z(eQmH*qmF~ua1h>df07ejlE~6_3#v#bl($Gs#8c{VXpH+a4E4_x9V6ks+2MnPxHVd zu?KpKx$311bc?U^2$PhRhRkb*mu-2qhX4tsd`o5Ysb9MaV_jkL-o|Liv{_3eK>$>^zKV|Q0YIE%^9<}58kO$RKdy(HA?3=G@kv;X;cpfLU zfE`C=c3X3JdQwuZT*iRO*;4Iyh!1;q7fSnM1G|pxm$NT?i;fiLYDLo#`r$(O7$Sr? zTI3c9(;Pa4KERnSPc$rE4?8$)iMZ`_^c_#oY3S~@31Mc$Oy2mgZRR-D-mPd}(Cipc ztSN=(&Sn1R`!VMnFBV;!U?eYZN>z7?Q>Lvk;>KT^b0}6UAG3etfgXoZGA@Ykqf<2( zHf{fXDq5B66DHfcl>{l(IMPSqE<&c2%h8MSy|Gl9WLd$TM1TGz;1$WP2~QN>p&pd2 zz9kscW?hB6Xx#YtybECtTcdkcsF(+iq%Y@lW;+(oc5ZY0zjm(tpUtd`TdJ)Rtu+Z^ zOYA9%20`s4woz2=B~)oqYH6h%rM1K^mXu_)Vu_`eNHI#O5fu~EE|#jjwKQ$Dx|o^j zn=Cg7&Kd$GA*W9kQu)*3+BHNdfvUCI^kb-ZJ_78CpK zH*FRU%s$br-N#-b*{?S801dEl2cPLOS)ggYShfog-J`x0S zT90XRLB}$W-v-k{C8iD)`)nxtdFpFTn4&89gy`M0un$I#oVMhM@m#ro<^Ej2)^^P$ zZnF-#JBiCl1Jc!bPiPIJ`QU4+uxmFEmD%TP6DaMKEoSkWA6>2x{T@;mCO|2P zqM+OdW(!8|D6abGbb%to(?S-lTB+Jv5|ZhkAbR&?y7orNRwcAh4MDBd=oPtuQ|yxS zpUYn8PwOZ8hthl;v8y-M32evLSi zKN`7ye}(MTntE$k2`uHr(+s7iWheW(rJ5jBo4ZWqQXJDCOVN)$;A+P8~j z-6ox{5Y_HEd%u|-H5eFbwekpTL&iSF@UHD?ajKmXEX#ayH90rbGjrYSs%Xu0K~TpA zVU4T;{gl!y@nfeb>~Wp|P~S3#*8pgPKxaWySfViC4^_lSf=DSO?IK;|Lasq!e62YJ z+gSmI{_$V{H#j{ysD)tih^9ZBH)8xqyA4Ll`p*ues zYy7bmw?SZ=LFa943W|=_>(rmtyRUX{)~YUa4Kxvgr)&%^r!vc;84{oGnr- z6BQ6V&>9KC8=1eh*Lzm1am-jlOfoo+LmB6?GLK~ej+LO|OuE4vpF=l0o03r`sGRHzID5Gbju8fnZsHY5lv(Ptg-Pzc27V54fcehEUXi$6UtnjHarE%##fc%Od~es7jOLb`$wsnBj+;lmRqZ&zY>c)879@e=^-=-w^_h zXArKbgTdOmc_-@mN%;06;hG%Pcn!8cdu2ETv>GQZhMnL3YD%$lS*<^!XgYpwBs2Qk z1veljE*cYTqq|+Id21ztN;!YFVGbSAN*aS7-rY6~7X<9ftF?T%96Z(3{d`LhufRn@{I)VXqaKN1%+o0)So z+_ZH7oybCWDUV@w7Pef=`Sv{ppViw+e%@RbnSgR`Rs;22ZK&BX#36FS8Q%(a{6N;L z!89nNz^o$QwTtsD1I>XJzEjn#s%WamM*xVA`hR!Zr57Bb7r9l;Jq1Yq*_hS)YF!%# zgV}1&N2fm@t(4!goT8=`pg9HtZ*(ZClhHK^&{@tW87kzHuKylAZZKX?@RQ07vB@ht zEuTTmMaN8+DS`Tct;=a6y@AoZ#P6~Bw9mQBaJt+a8#cTGn`6r{AT@)5k0D6-KJS*! zP9x1VLd6qF_P69SHmT^C5d}Zuwl7vlFw_ESgSHUrb__Op7Yz#RkX~&sS#1*y;1vP{ zbVRCfx2w{^ss*k4OmnhQeSz74Z$J;5`8^U)>bV4G{Z)D2rm};Cu0-DSX)AayhW6~I zd3XRZg(icW?OI(_@PqH+F6@@B&qfJ+GRh^|-UWf}svj<2`}jFX6#Q}qST8o2RJR_G zfgG=8J@Q~p?)bxYRx=|F1Zmzvw0TF4yylH(+Go$DF=|B59mG=c5k^>CC5?@Ra+*(Nww?L z+l6NN=?P%=l8Av3XF;H{9UfjM2($4)4B6!vWdBDbls*}!@G+|9OCf5`_Lm1ugR-jk z%%_MnoUUEE(sP3lF0jTCt5E~4)5rZ7Vp`?mWU7_VjiGlf^7*A9qMln*1Ne~)-I8p! zYfCJ{+a_B3d5e@c$Wl!kJbKKYpzd7ryX{vW!2N@nfd$V_6kow`#VnyhJ2gU=j?X2* zuhjn$6o_)wqKfecpKprOZ<2}!a@M#l-SvTLLb+d`Hhdck3RH@A7>;ZVX(2akD6r{QJze>R zzCLA^qDw;j`$WnuQ*nx?UyH|_P*oB2`W`2ZCsi5cJbGy|uU~00(7H`R#E&cZS*uxa zkM~^loJbD)i-I1xL%paMd`fa?(*FdQ(N(jHLQIZcXL(n#mEPHTrzFmWEJo`0M}Py7 z(0XkhZ@jI;Y7?12+)oh{#)5b#R&p`|C>(zgf`fm|Zj3jb}v-n_puH~`As7F{L2?-%CQiv6L z&Q!|KVZH3Em%2(X-zc`eD)panX7x6wYj#MK>r4F7O{KneDM zuRNx?o34^W^}(F8nzgC0-K6f>W&jzz4;k$lEOZ*F`7NcN!cZFP(TL3lso%vsWu#026vYr% z?ip*)aSI;}GEvLV{4EI`()bTbgy={^h5Ei1Y7sE2BoTG<*wwFya@KrA&+v46nu)x& z;FFo&ddxC5ZK}&x+15x;WLWvqj!_iYx|2OWnzTmTLe|#pCkQy4EHdZ_wu zEeAtIRw3~P>cI8>mSZU*r3W1UE%OisT>Ixx_rpI&;G4<+s|N6Qd-)$turL*Fwg1u* zV!`k9kAnRXEoGaq-^BX|5Ng(m$Mqit`{Tb*I0@mutOyJLA8lpjJGUPxsk>0_u{am! NL0dUmHkkX}`496s9drNy literal 173014 zcmeFZRa9I}*Di`{qru&Sy9E!B5L}bs?jGD-f+sk^2?2t;dk2>$SmPQ((8gWP;(fn- z`D-zOZmi`82FO^eq2~! z0>}E_d%s(g1S$OYPF6CMy#KyPjE?x9$K?M-0b4^Z-X)D!++2(g;Z^VgRLr#4J< zQY~cWRp4oGtk>pC*iVtuOkp34E$6PT5Ez=7ZOH^{Lm^Qb%oQQp2*b8{^<)aH;Kp{M zL_#$|B-YnbTOXZs0q{nr{sm*B!KtmaK0YT_Os~hii?t#0-h1giGHV@TX-LkG4P4cU z`8;+M+?Rs856#So>W#M!$BD{@Y($)tT=4TpS@uQS{?A9GKkB|fC>?k?LsCM9+>m54 zh*XkIQ29O~ycui-NFS=q9$ip!8Ts!qu_;cJf4MBJ-2^wwiMBX%nioLJUx8L9;EK;k zJ26_+L?J>{t4)DV`O=CBxn;dpTP&=wLDP6Thuc&Hv`YDU9~pQvU1j{HBT z?O?Qkz1)}dofsn9cK1oK@l4%Bv)E{7*o0{+b6BWonHPeo{9vOeav>quWEw;w^sIj$ z)$B6#=dDz&SXTpZVh@%;QoxXaW;|H!w!s^6#ye)!`{>%|6otAnnDeqa>GLf%BRUQS zV)E9jndp0;u(L6qVTVLTcK-kyF9n;VmIIHXg#1UT8b62Y!HEOL$AQK_!PQqL))g?_ zKv%1rpDkavW`)LzXml{laKgSjMaV~je+h-pe+4F9!22sfv;v?VFRpes;&wmcdZEbq z$oW`4(Nhi`>>a_6@Lw;(msLY-2EfT*MHWDc0Gg=(+8iv~c~JWW?q~e8}>pff_CIzraE-U9Tk}RdkpB$^6m(#DC2mGDl`GvS;tUQJ8?ZnfzeUi9rgALIDyl3rVLag$v8RCsi`enCDwy_2Hv% zT2I<%_)hamC*Aki(ye!i9*HGlYtgm}JIb-}4@HyT;m*H^^L>;$V}Ki3W&b+|V`i|` zBM#LS*)$hI!36f(;i%`}(Fqwz^hg7g6#5f`&kXV!v^;PrPovATlCb3j>p>z3U1=hE ziW@oA5u$j7FQO-?goq%Xubu?y{*NFmumvc%s}mvN-pSfM^Fy4fL#Q^0i3+3m5&QM{ zpr-(E@3rNBOn>tGvYbfC9HhN889^*OlZ)bdjt$0j$k_MyJr6L*zxSH|y;tbeDUy5z zdEUdyzx0tJfRy5~gF90@k-=uWZXq20A1M=0)}xGi&Wm5R&K$X->dk`!{i!+y>=ttu zCsMoootoqV5TLo(85i(N-+{%gJEQ!|N0U;%7e39``XqTK8SnQ@(sHGgNk>W0>Dk&^ z_g{A#aJ^&-S3WZe(YL79Z)*Bc7N<3SvhNSz8@7|PYe|bw7*Ab-k|le zp=8)t|Kv%DZ6v|EZ|7@4e+8zvx{axB=AqDYXNmoeG2k_V$-U>7-h>ixA$(^lxX*)N z*j#uCRk2z}eGFdQ27gtgxt}>G``~-A?6iSCx5qBL2Qi5QU{{zuuxsAQ_UWI+E_^S~ z!3@0Z4hqkOs}kt`skxr&**kG^czJ*Jq1hEas}r?7@DVq*)1s*o?o2Mh{sr9q{HEIH zuvz}Qy9(~c*4ukXMM%><=}M>2(wWMeA2cc9Rd<+{4`hzs#QUN?iwRaA=-V%ev|FeG zT*)W|S*9uRq(^X8se09d#N~Q%R6(@nMvR+B$1>}_kJvp&7YjN5mznk`IbC>64@lVe zvQ!v=oWs<5YyT2ERx)$QB4?1jkCf-FuDIXf$1yPE1=~8GC-{n%_RZ+nvvPLyMey@* zsSiD^V@9smKH5->Bs(x9Ga@$wZN*=+`F?m)`U+hQKawpWa)*8`E3;ADc=WaNq4H5L znb%o}npx!`iSw>o^LB??<4>E%twkQ>JUaBRWsUdVng7VfjCtutMMkt$g9d0a*y=yH z;#VVDL5!g$J%T%n6<_~h(6&087~;8#c0k&E5j#QTshKOxKU#V>^fhzUb0+C%UC7Zp z7b-?+85FR4GzN>oTiB9lVij}L(?4ez)kS(wLB6nZVGjB1eEoCrqP33=6UQh6Mh9#d zO7dS@AmzQ=^oit(C0Is*wsVO0Q*Jw3x%%}y{aUkuPrwQ(UoQw^mlNEIWzf`Q)!Uk1 zd|0#P|8US(EpDm-x$H7gntSjMSdFLMjz>1Ron3BvXl@#tySc}5ILh!{JH70+@a&0# zh9C3~WYif`X8DMNZaFF31eP9cq5h}P-ub|A$TH^kGJ>2T;-f)}a%8=kg~rh+HO*8G zOyNn)*#9Nwmc$@ve;<;w#LqQanDqj?^TTK=by_U=8*1cy!F$Ph_uH}4wNdf5g@ub> zeFFI@hb0{KpD87ghVi+b&KqYQMlnh_7TdQtyXh6zP#(-j zsZdIoDwzUf{r}23STCc96Jvv2{R+#u$AR|lc1lO>%iPT-moT^3MR9@*E4kzC^3+ie zV$(x=UtE60VJh#W7pPwgY=^b@E>KfX`+Z$8RNS79LR?^U|8B$IdAu|KLfLeK)Cyxz^gaSFt8Koz>5~Cm!5UKuVK+c zNmQR5<-BUE4FkX$yxCu@(KPZJxC9l}IUkOhL~N?AVob@MJ!Iu?IX}Qx7ved7A-5D& zAx8lZ15(NhRF|XkszWZV=(GV3B~Wkw1;#tUNTNpZ7smQ?DwJf>V>x%e>T}pE2LZS0 zn!Oj2F>R}z$GTrzW?NlFEh`N@NU}sI10={h1uz#T*Znz#YwjMelNjX5nEz4$BCR?? zivJr5&pfBGkVxX5#mkUOSl9JE+wA3Cdjci?#v--&!VGq!(3D&ljkCNN5;@J9or{CqWLwEK5f``(<-L46LIDQB1?Q>|v!KR|gs!@d6 z6`R~k_np+-Od)lo2F(+La0dCwpug-w#yk}t>cz{|meYXNd2F1XalNN0l$-D+ZtdA4 z2$v#A?|2YbBH$t? z2YR_5v!nzOC35TX{~#y2vRUkK-4Y{;u&h}WdEo05tc9Yoz;Ty#;3d;|*7@s|JY($M zH>(u4$COQmqpI^3096Poq`AfJmi9I$&IBi?B6@`)1M_ph9Agb z?>;R3zNmIs{#89bFEo01w_}zW8H{HlxRXP_?k_$nyZmKWqxsz6(@^ir_dWEAt%j0x zNFBJd)MGX~XbP?am-F<-F!lV#Epp0Dh!uD}X)Q4n3~8yX+0zv&y~PuDNT?*OAAv@y zUFC!y1wtY&dU1O<`r(Ii&%L1!%FD+n$WQ9ra6^ z48JqxD??}UJKqo5POj>RcRTZyBLa|aC{@s2ZfH_*WZvNks>y?{*9T>5Oi>4IZOzjz zwsl3haH3k*_uvHTP*G7!^>HIi`ZD9R{Pk^ZQ2ab2QUvB~Z%vz&Jl*KR-4W&bv1eA> zmb*xkrM`f^FyH>>%@dcQuWwR6lH1u@$y^FI(k@c<1T-BbN{Su;m>Sxcw?{YyY80T-um^U zKZ!>Y)WX;g+n*0_SIii+K))E)WLetpxzr3rgG2#`WwO=7WkEjH!zItvAvoXN!4-p3To~z-fW>uX#M9Q~lfz+6flqSb3{c72n%6Jnx$Pn=$=Yo@V!3##2ce3 z27lW=b)*Tn$H`gn|3j0jPjG?)(w9h;!gJFXAd{ngN-swDKJ}YFO-8e8PK8hv$D(bUuHgHX%vD_gB_|{Q zZ?Em%C|oWOe<97%Gk!jA_jwJ8k{E@`BS-8K{pt*$hpo)NQuS!_pgM|EzY}{VU6F0< zpw@vMh5sfM93>fq$OQ_t1P1==wP~rBb z;iTVVdhO)ms!A7$ufDa(V^E+;!m#tD@?&XV7gsaPgp~q9VPyQ}w!EL!XgN1nqYs4j zqNfr7gCZ$9*+3c#tXovr~f~K*{JP-WSqjTn_k`*aJ%BtB#k>cEVO#z*V-^w zL>Q=si9^D~Rrt=58RUKZ|92sbP<<87-Wy9kTK2aO$;mRMSf)HAbvXMT_)4NwMeQ%{ z;(--SQ~&qLcTC8N)RBw{VLAmdR1vf8xCt`sHX}=vEIDwdCJ|P(pngg;&4j1OsgOR; zRJ)T6n3(n5Un&qyapwYWJa$hG7|%beK6&v*0I>#l+CtN$vE&AD_SI2p=W+e8Gf_5i zBG6I8yIuDm#*csj$b|npKm&8g&3ofMzUq^%>N^|l7pP=uZpis9N1RE+M%mXys$l}6 zd7<2{~;i0AdXE3BHc*5 zwnzt?8EjU4;6zk~{%7A48)Zgxt#vVgnBD$o|F?;H(3kfwPZg{Uu`1jrW+zTh&1!J7 z@G+sT1@=}CB<4akLz%uSuQzI(eGk3W1;c988-b{uEzi_Cy+=o&$V`;X_PNX$5(zJ@ zeihYXO=>Z)BPe+Pfegcelsb{_Y*;t{42XO;zk^hRV`2r#A?}myfp#Rp+{A=MVR21=k>r-$%Ce{f_(YZlGO<=O5@_#~P1)5kOP}BKJg;&ohnP|HkebFJIgpfqngz=svGa z$ly>0*#e*Q&;8AQe9z1J&`+A2n(BDYGjE@IIxgxI#0tzbY5W&9g(1A=gSaX$wg?my z6dJG6YioId7s>GDPmx_{_}{~YG2XJBqbQPnc-)zoh(9iNs#IE9iqibVe^@Ag?F6gv z^IX3ZBE)em);{2N(QZQEW1DL3|Ku4odRW-lHuviwhaWg578Z0>gxABww1DJDVb9+L zgFNz1mg{(aM@Pq^10y3N@cRor1L~(Nh-eeQ`s$rA|Hj9Of+=H`q#`k6RfW z@gJY%s4|M5m_TdoohahJi4%Eb7ODhbjBPi&P*IP4?Rephk7DnhW|aOLA{K_6A9{AR z)nPf>*s#F-VZKoVl#@>yN}We|5Bvl!WVUF!BBcz#EsKHo+WlTEycUFbqW`3SjC2lX zV6>-6n@wv-wzEB{;HHX{`R)MosZo`9%_*fJIX404fHg6Twj(&FhNIqSmWkeEr2*tC zc^y94qC*rLq60btPdN zuMZzEpIYacaDOb)7+ddDPI(tuv#$IWgt@rX{6XHa-3#qU()xoJ@14HxjDTYnJFIIH zsxm~>tU+sIfI3!|=PdvvX3yF3EZncWWel3T+zsBZ%>y=auj%1SjrJ8Byhz%8ockTg ztM%Fpc5^=Q_IF}od6~;AABL4+_0X@>Dbsp7_TGShbsWi^9D8Y&q8k1Ww5{W0&u z6{k*)PHzZJ#DFEtHCBesw&L10R;~7uI7ezDY02LbZBU$Io(&5>I|h`T=;eLcM6IBoumhP0lY(?L$(97J4?2E~ayx^c)N4F*&CEcW z)EVh5v=S;*aPiAASrT4&+vkyc0?&F;^Zx;blm&f>lWLuZ%ol+Qo8869!mrGrihfgB z^&e7LZ~Dw?oFBOGYDhpV^4zuUVR&2eualp%@ZhB|5Qf;Jd`S)G*^Gepdbv2>H3yia zGfXY~Jmz{%gwtcjPLz|Yyj^h@j29|fYc?uI-b&@jt~1MHDAoxq(S?MKO5~f_sFy~w zktiaf+IJ%WLZQ~nBh`oBoOMJc^=G+YE37oBXpe8K>S(7mA3rkoM*7ze-F{&X-~Fj3 zN(eaOV9!vKwupnHWobR+r@furn@t_6Enw_B`AuNAIBEX%qcBe`B9Xh}E7>M_mSb%+ z8#5_)`HM`v(9Y5!RNE?%o z9p6;vIm;cHS4&;!B#VeIrxrF&@Si{a#=l~#DH}Y6+5U+p>fe61|1tU7BbC2Nvx^ps za?GyoY!0c)xDSoPjSc?;lU5q<_txZHe6X7Qq=!ON&+fKKABFZgJCN?P`yE~x)N)ZX zsw7(O2VkVahw3TE z|44pQDkG;C>;;Jtw{u=N^VHQvroRmNfEuRecDBNO*j@b^NQ?qu%dc6-H>V3Xf~f+Y z9Pc&Q5tUlz^TESOO5Zun{NAER%^63#GRh;CdJC`zvI1I6M;x&Nx4!SSANQiu2faW| z)3;k!8j$^xIE)(|pNkGu3~Fv8jrny_VG0cvD0%p}K4n}tLhL>ysbUCh+hI80w8i|S z<}Ho4Q<&jR4SK9+nA4rPl_c<)sNpv)rR854Dgwq5h{$Sd8T(?+$*rwbJx9;k4Qohn z``+}MqrqGaZV}TGeWcc1%~nV&jvaTkuLp@ zXZh}j(`LrIKe^Ax)L!te5{n3=qsotREv1)MG89y9wU;cLXQ1Owu`ZVlOp-gw6*78Wu7gU4VZD<9Koidp= zyslJw;xeCaF00S!$m!<6=IR zm`?#yiFRmPr(`Ne)&*R6Ki~gArX4fn`7a-M2M@xT^%@;rP@DKsox{WU} zH*KhU$!Mb%MW=m&Hrl}wma~`Usbp;p%))9}qpcmyHQak8)Z4k;on!U#pwRFAyI7Ev zz+i(w#Kh_MRUpKZPA9O)+WOv`dJEB-VHRFPbnZr#S=4_rGsATjV+Ud#MaTso?K@*g zkz5>ti$N@AtLrJv{3Q&8%~C_@(ib^hK#_ep#!onTg0t)M6%D0W#?*sghGXcs*;H$ecQ4 zE(zk0kj<*F^|r0Hf}UYuby7u?IoF7ztq5ePa6H7h?>;Cp(58lkas`7qLuohviTM)? z=^CqR;&d34A=YW@-#Nm} zdQ75J&T7{6Ipv!3RicN4^2k~vW^Z$CPjU21N2RNDCmAC)5G6RXSr}&!u6bzzeWLfTN^bPPR>E?0|I84A=N1*TDvtGdipH>6U4)z}5Po~;%SF+q__%LHBioGy0XMiB+dPXc z4Le~_Dh&rR*saI`UKNvFFk03eIK^u#xc8_Z9Foywqb-T8uMV zx%8^4${s3g*(%NDxi#`U-k4H#-cu}VD(gR(zij-7*oMVnm5@((f76;+7*}5zDoKG^ zw*8y&iaquC*R4^w(P#wuc0{fu|Fe}gYKoc^i|4n#Vr^Y}Y(8@S=Cj$P5F=Wot?ID6*68#*TxW|@1aN8RccUdDzT9^_uGri8_i=>;`lA!AWWuB|fbNfz zstP>ETjTe&Z}TFOBOJgqI}JIa^nc_M+!9hC3(qXuA7CF5H-38`4dP$jWg7n=5<#I9 zCtT^g3`%`VQfqSsqc-WuzOIx7&iN!wU8z6=xHI(e^hWaNZePv|QrxLzasG*ln$MinMf#9hwOfz$2+v>RIcHGfDtDJ+k@^In9<@(o`KdSO7 zUYsE@8wYwz*sIPp+#XcyI1@qc8cd2dCS0z5>KU*8Tz^O<@Vhpu?iA1Zo)nem{WUOw z7jKDQs9xIZ8#a}QJO-BT01PRVpfSe=M@awcX;iDbL8oNuzL` zs-6n2u#qlFwCyE=c#HAKdV#JzWAgPo<$USL6?`__~rwF;U?$X~!I2#SFYyP)A zY4Q6H%?bC267Jg2^5JJyp_^6V$Y~Ka*8_L(E8I-=IdSk@(4Nc3>i%`!OBA`Bg)P8N3FEDc%xWC#-tnZ7W?_*UGIBR!wu({ToVUi1{eBeCs7ASij zoqq*8lzmxO?!q+rtx5b;<@9}w2zOt9_)_cK-jz=2sAwhQ8(EeEqBe$(qwmE(T(=xu zX+9t&*~)Mnljxs<{MMYR_nd{@Z)R7!koS5W+OS}YJeONurHa0f+1;~yrSmnEi8q|X zK*Leq2bO82f15%QQKC|{JR-A0?}nGGzEfy`C)6`@#cz5w>oP9Q-&1$X()C2ae5kil zQkJQp3+*{0Dx&d1xdDQ(hacN;*4k}fAldits5)*{0{m_fwPvP0Bp%}J0!O}Y8~u1W za4#9)+n08A;yb?f+*53Dn$-6+?sQe2z~cIj>p_Ysdt(XFa~qYq>r?LXc`oHC${9^c z+@LI86lMMIQicP!Npj=$Wn|(2?2F@Hox3)Vd;{V4LdCt!$Nv_By_>q_U||ECf9~h( zhHth>e8}koP6|4qw{-(D!mYb}`7-Ojbgwr2O$=tKbLOaFmXaU)*2DF%q9?&>?ID{#*bP>ebxM}Iw)UHaa@n zt-0ixAJ$$nC?@KAEPP-{WW0O$xh;q(3GaBfm7sI6JJP*!_q>Z*my ztn&T?s3Q)~XrAZyvR((=WjjSdj6R(2?ip^-gYVDAnR*$EscIj`&N5~oFdFVc5Jz;; zV$=`dSNa}~vx1Vgj4aggm2D6)y@TL_3>gwwxD6FPxT#*Y(7s&U%%pHpg>`eOMw~tp zjdQm+V&CmoEDD`En={^Rm|sndszE3**Xl0A7F{0IoP1Em{;k~KcIGbefL5(5#!(Hi z7MG;gaCMJzx&oV57H>UI+mCvLo!qS@Co(%JAeeT&=N0$B4wS7C{8{}c3oM!|-=@6X zSDc&o?fd6pT7k@ENrx)ucl+s4N#7}XN(Z3nm$K=My6VgKF>4a2)KrIoyT^`APVKXQ zXrJed&a7V1#SpclbuV&Wp^@u;Y1v#@t?tZ^*YYLL8106ToakjToEP`ry>HO&Pr5BA zzIXD`i>+pu2TYTzQNRA}CdrM+lNxash#&m}NHitQUcV>t-RE3<5cI$7aCzE@s3{41|!1TA#9N5%t^zX8QAw%>*&kr$FIV0(- zf>$M{nzkjb$iy1jZyjzE!ckYKE4LS>eoF`&RlpwRcqmtS>_(b84&y5Jud21H8@F$L zeIHlE1oQ*l(!8NKCFs*o9FYChXuS-9U2 z?`Xw`RlL}2u@q0k8`5F6vKtqY`$~58=1r+$s34?R!qfgVO84)hGQMc!J*g7yppF4qqq|BM-6U9y8NB^$)DXkC7e zI+SgeT}DFN_r#w%*2a}hj`uEMtGBL^$q{_9hrUMd$#u{w@cXsG!*gh}&RrhM@;m(n zb#p8}$jnhmR&0v@@rr9yvi8o5>y@6wU8&;mk6Uz7vYtPx&^b!0YeP+TeSi7zVBq3x z?Rk_m(EA~Qy7pQ^uuvxN_Tm24Lrj%@@7{9~NXbi@W1@;pY@m~P!huM0|LHDbIL`x0 z99ZOn_Kjo9(1{5tGc$T+W#w{%w$$@IXp+J=Ye&bTmX?gvR3cqnU6I_hwn7b-g@px? zrX9D|Q~XzW^Y)FdZHz)!QBh`$E3)1%N+)Fb^71ttfuimp{}5ooA?Y29Ijpe z(Kaq#9WTeX+DUFVA6KYziRalzz4ZPX5FtY(93yn{T})Gs3C1{+w%Qj+{>LO*Dcx93 zk)f5?G4zriCfaM)XX4V-mrfD{@f@iRtP%yLAeP96ZPyR!;|sryF>NeXDn zx-WIEID%sqrldc6R!XuR-|gwVi2+0r8(R`WLaIApc&z5Nba0wqvH3{k*+HNSZ~y1Y z+uv8)h+ys1Ddf>taDVg4ZoRz2xbMc9X&kU`7oz~Z%Yq)fnA*1zOg`^YXQ34z;4S=V zEbJYf0Q!lXC>Jj`y#wCDx{_7`s*ve3gUvcK{%PAP4EcF6DD~5UEHk zbM#XXHqG(Uk(Jr8o0j`fH2V`(-Z3`2L&x#Pd8ePsuwilZ{eQ@0bldGl=iF2kL zET-?x#^+a^`#&g~*fgy4xBHegF<`Ie5cW@BQX*pRNsF$0PBAG^uf@G7>&I6UMZXYX zTTLM-)SgazV>r{AMllc;k%$#sLU6uvX#1eMy3%WBlh>dNe zlLQHo=ZdEi8f9d1ICl-Z8mx z^Z~BzvG56di~O z9N;^>LHa&u`ltMUCzZ~N+wnnFlvr#~r~5ge^~w)aHGSUEd3gZ6B{>Ef=omdO3}N7y zHE|(NBVqz+w3{-`wQ@htoVdQVj>}%of!{5kLh2Xbw8G71Q=C_cPYuGgt~TV;z0k5e zagw#p9=x8?pISbc)J+5;j!Tve0A&Fd=ZTQOgG-}BOZ&rssR5V^AS1qy`(-C5E{Q`7 zKq;C5A00mm>Da5CPifSg7cQH_z?F|3Kn7siIywUm-OXyWw*{dm{Lyq8-?ehB?B2b7 zs}2|^2L}!S2Ef+yx&2WC3{**Jsp;S++T@fJbxlnf3kyaI3yUX^OioT#tQY|gYP-ZaiOWQD5)Iv7h>efkfPg-)tb>;_m7= zmP-5!`ZFeO%hB}lPi{boHkMo{J{qIzQC>snJ5lrRv1%7=^P48bPy#&ZpEDe^xZ%~E ze`=YUA5*w@tY)lEbWA|;UHB_!Eq+AmgCME5#t--6&6lTApn?N^<(9!dPS`!qsRY@= zY$;mbGwyS1FX(DsJ?lSNQyVrHcoR~^IorujV~#EJ)3*<#mgw2xVQTlUU92L!kNBlvi8fX{JBI0B1&*4uyTV6Mh2 z`z@=@_D@|@C>2mD6hK-=7)WY@cv4~WeSrEk`l3psQQ|>v*u?zR18fo3#*D(vZjMHl zy@AXcT*sAX^Ol&kQ*b%8ExncXzEF9KHd7@9*y)C;h62pD-YbIKmt~Xjvz#K5f?qot)Gd z9vS)m{d<0CX>@5RYXlCp3V=^5W}UZhXXaZQT3f#WG#ddT?fpb6Q&Lir2fXp+3mGdb zD*)?VKh=7F%PL39w~C@VauGKMAZ??j2s?>D7EGei?FOhJedZW2V}_Wwixr88S%2*K zUea^b!&#LVDGD{VGpwnc2E)TCY&xBOFGkY1thRn@w$V3o-=r^Zh67KEpiXaX?pmE)n7O(MSC;?40pT--D zS~9{G@eLh!1cJtocs##XRlzP!7aHuo1E^YVbuZVci@3S*0dxkq!j|_p=h=LmO=pCX zP*Xu-?Tf})3!nu>KtLc{0GnE(o$u3<+x-wng9!VQh|2p!n#W zQu41hI{C!dLL?HSPF?kw> zA0WXx2Ya(n9U-dg@j4G2%Wkd3rOglsSf)10H2bqG!4wIGq zHd7R$FTN|Al4Bw^!iSF8zYd;&vz7vV>5}}l-H3!1iuI=Zq2in!owiUFi7Q*sU`=6frXVE^ zRw)ksX&v^{+MMtkQ__$b&CpnR7G^HQDj~-19Dq}Fbv5@#S-Lk2iQcHG1X`8irSh2L zWwFVDoCW=*Q`VxI!Cd<+FHKBnXDjrCw$B@MIa=G=tirxlR8-g-mZ&kC2bb7MeaXyh z%bU-8{T0upg#sfSAv83UgoLDfV&c=Hg~GSV1A(Yanc?sPedA$=p`jr(9GtEiBO=-` z_Qo38?T26E30agg`>viPG(WaK+=g9>V-iS8XTxtNAgI+M%#BKI<^~O0!TU>gpMH&2 zt8KkL&UUg7mxPO^M(N#_m`uZ!Mx(WZ{QAXEugif+-7+=L+4dP`P=(AIiHUEZYJk{~ zd2i_E#vc+Ins#?-Q=`o-CKlV-DZ!kgP%>j{%})kgM7q1@J|rNN*tj?oQ_~RSG@=+} zfIM1h86zRvb)=alCMNcl7P7KPNC@zB^z^j2Xt?C$n4jN-ef)?P77-!MOi42JUpD4 zl~o$huAPB6apqVAAeWn)TV6#479}O6ebUGlTvineU=9aIM`cx1uw7hSKBc8aW@S;x zzIwGhVOFhMq4r(t)5wN{hyoBS^P9G9DECP$EBsaZSX5MG%uTXXDVl3L zyti&C(~4sM^5x5Nd|p;ojHh3uxw*M<5rX01;o(1i{Adhs4yg0WPa;g376Ac4`&QF2 zVl(cY0%z*+@dscVdH^6-L1lpJyO#7fjhA14N>#jTLry~p4Ib;^&rssd9J5#Xtxp}} zEk<>Bf3M?AijUv>Th--dp%hIJaH%oN>g!X;(&7CuAqKE0zLcC(N<*V?qSsHj)tB}P?%a95*Ah8;+S1KjYC^=fU_Vj!^Tq#Jg>S>%*&K0_SwS_V1Pa4Hzt8aPUo7czDgbZ~AK_goNR1YsN&W$S5du ztgO)umRpqr4R(YW;pGi%#7Zvt->SYCI+V_!x%`y*+Y4Z8b+7yNCoqdt71Ye!9EqNu zzI-<^)BQy*#@p_B=`_eTJu~yi`y6Q*89YKlx-Z*Olj5J-Px z6@zvJY+AFn)Z!}azDuBzEfQX51p)RI0UaHknT-v+(&1ZUatUvZK$mskObO>@Xn2Ov zi-=QTEYTPR?!G*|i<#Ox7Y=+7!+d3DYx`sYf`Z`8&CQ#`3xJJUJ0`kFFm77>xwseu zLzH=dpU=-ObL4Rha~I+=h1#)as0Yh&i|1cNpSC$%ZVqd44S{L;~ErxmNcwy+J{Klh+-V z2-w1ZzMdl#zD6>UabqS*e~$o1fPoA|pW4hm>%GY7N=$&+G66?mu@fxUn4y}QnK^mI z0jC1FV97>P^BLe2!og{LPktNYQjCm@jQNG9RSlS5;T!(_{XIL$0SqSR@!2q{JTl)rG-~^|3A)f4(IlU9JO;T)67(n!T7~d}7#u^kyGN(jJ zjLznBK&K7+L>OJxKegjVLQOsJ;|CIEHxm=n+-39Wlpfe+z0l51yYhTbzj?M&zik$< zZaQqN$O!NuAt6M5%QL+K&C@$>`>PS6?pU1LtxKBDJHW~6?v_GALh6P39V5pq zL+9;t1gx>Ku`M~wT8=d6KGOil;OEbuR6@2<>CS!FS-|#aB&s=W(J!9z&T=3nAP74;at7#{PFOhoUWF1H zwfr3$Z~^WV)AQ#h+$5GuDr#!D1z*3?5@2jM^bHKqOGrEvc}_l)uFPONVrOTU1-xS* zJlQ7n8t*@ZTX0YMGpP#yo~=IW+2vv^_J*0FJ&E*{VxVzZ@obBq1a(G6hS0Kzr$|g+ z2%vZUPQQ7MClI5;p&=nWDICzhR6u})pu<9#a;Bj7mK0sxeC+zVNfT*dW!;O{pD z3=PT>4LTBbsvQznJ$Hp*XUQc8jyle+&nx0 z15XP0?AA6mJ$*66JYr&??)leEd3iw&i%m{)`dOZyM+*lYfH!z{c9sXQw79sq{ocVr zUw1d0y`WV$9w}*5eLa5yxjO@mc^t_BLaQp=`*_4@3AHg{UXxd zbrbpHCXx{R`^;DqpmWNS%DcNe+<)lvV@U}!U}9xr*mg0IbLqvzz%f%SyB|NI>dN*@PdO^mV;H%GP0K) zjf-(B47p-Ko`j=OfHZ8uo(Sm# zu||TGWUnA(4Ho(~WMo+cnj)QVe7PfHMc|yvF^v56#fujsC+*odz`1yM2xu~%cGoPM z*>A;<`e7#gB`XUgk^8$5uXcCNA!tKv!X4qyiyiw+yA0>UXTOfKkOj>hPPavKpJSuq zGQm$?AlTey=NHq=ESBkw06dBW$6W+R;2zYD@#h+(CI~N>#7A(xskyh*F#5QQ{W5dj zn~Vsv@DTq0q3S!pvF_XcwGd^6qL4HsqpXB7ib4q)nW?PoO=N{+Wk#|>NLENFyM*kl z?3s~KLP+%g{Ovw&>=lNOZd4Jpy{QU#QLm2P*9LF&yS@GLN}$}SyH$ZFt`s_l?S9K86U~s zw)d(>z~7anG3SvAcdy(5hv=f{!h`=jSJ@P)^XIpL#aS3?CAQBRTjWJv=U1sVj1q$2r3PS4gBbd=dIdGC$4UcD-to;4-# z^x3|m$`O(SnVjUyV`q$?$&xLG(Xnp#Qw%mvyi00TzIOE2Y>&6b4L1gSLcf0TTRl0g zHEG*uBp@m#rdenLih)n_4UY^(oDI1E1v{~blsJh0}hPcFPP)|hIi<{Zf6Q#_!Gx)U%fY^ zH2KG$IF1%`jTN@-54PFF#?_n*zju&#=W`bM8X9Bs@4kNw{FF zAfEmYXK_%5XW;Eb5#;5Sb$8!PF1lN&l?^fNBk_{}a^oaCSfhD$@7LV&k~~=X#-i_) z+q$FU)5yrzFIFld#nnP!>!hTlY*Wv)yAiI$8CPg4c=jv{DE>LNt$U=6ZVHI4uw_1t zi%nzLXSrqRrx`;s`o%__V0e@3pRFWcayMeP`-rYE)LL54b3~cjlE&Ys&*hEir=gJC zsY&m+|Jir4*SeKc43p1h!>A^Og||Oh>dt9cv}0wuRV1c86TW6c@+5OlNTNjL*tS<& zgl7sH)}$maloo7AUS^~zV|}PMDbA3S@~hB?hCk5vK~zFcO8fNi^wlO`pC~(BKk0^= z8nu?@(;w{1%x!Ha{C=U)1I&>7N;`gvpS-WY`znsrKo-)3wV1~In#kG8xVcjKR9ng$ zx`}2vTPDmWYi^xt`hCc!(VtS>ke^90LEPWVYYP}=QgN|!4QYbislEeBice1o-mI#N zWDtJ0&0U;z_FVCdf9B8eEf05%pJ!(DEN&&au)T4^$@l$8<@)!E5VpUowXG(C&P#0< z7gonY_`Zo>x$#UrQ*+;^c!)ZHd$&N)iBHSM=9J^?mo5Gm@~2j;@~*eGwN<^mkooc@ zQ9Hkw3*&u^fBl*#-#OP;lv{VO_g3Dsq9P~RuTv0!TT!RqMiETdv@IxT7f!)J0f9Z5 znwo$wdhYZ-p*spRNpxEZ-D<%+o~icj-lx_bVD2nFdCq`rVqV(0%q`7~sfcaxrc+`k zGY!Rsqa?}ZlZ+8NFBp>~b056-wJeb)gs7gH*N?_;nf`K6e;y}aC8+bp!_8rNgqUhY$cTDu?1 z3z=nV&X=lW_{gTjv`suQ6F9*b$R2j-VAv(7U1DSRAgDC89`@;{@2*_z$hZdCiTell z@#9iJ#g5+x-3Gobb)xjy8=a6%%i5RlTG}|j+IHD$7w4Km@_-i%N!<^4BPc#YZ1s! zCsR@_jg60qii%#3-9SGuFfwZX!q3l7LrXjI^`aEH=1D)6lU(uZfy*1+!nz@L0x!Le zXRik-vwk1XxaPtqLST0I)K<0PK-mC&shQbk(G zF5WesGbm9ek$-qK=JU2OE`6P`T{5+u-Q@|N&kPM8mE982byqiH%c~%1*xWAqtU$9cSzWPSTOnl2o-x zn!FYm-WBZdCS!M?1FP2_uD6acY;)qre6o0TPPCQ?cXuU`dRNW4%BI+K^?jXCQ5@3I z_601-Zzp)E@y+nBrvL_WD_!0+wI66)Ypjg32=w>Y3}<;_yjHZ6P{pWMt|c77UiiEwRU zN%9sAZ$)UYo8rTt*OEn+u2qnse{bs4y;Od}6yEt*e<%GIN;M{?5XL z@xZFYU*+LaaZXdCh0Br;?L1Bm_Zv4-J2FP!rg z+87q~S><)M?0V?~T8|y9ds#(~h1;KlE{y-NMOk zkb06i*pk7%y~U2__SwSl_-sSYkXrA5bp9uWZnMi;^?)30+)``;XNxDQ-|oM2e5Tjk zpC$5E6S>nu@y8}vgCMFN(4vbk>kX=nmgE=5CPf`8;ec4hSwDFrbtb2|rK1)w0 z1F?gkd16OGAR-p*JUqM6m8cUuHrHay%kJObiiE&0d}M8(&Vd8aYKAs{6%ph3G|&hp z6I?AJIO>w$$fn!jIXi3q%cCqSYuBML6S?`JZg@=abzUjGMvzSH5zgf5+8Uu1qZHTG z*GoA%3X5GOGpEaUMDw_J05F`Ug?Rtm={@%wN~EuJ=Nf00@1mr%%gl;p)pDUYt!sRf zZfKm@p!wK`C3=IwDV@t1s&8*O>I3oMs-k+6pqN6S&SJ<0F&!R07%6|`^3gr(G0&bI z?6OtoX5=_^sx5nm#l3stqobqf@b`pUkNAYHfqdMD)+-~k1DXp^&+c=HA%FhdLwY2o zwDbVvUe&eN+uhguhDLvkyq}t$_EP04o9=V{vrxM*;>VU;Sm;2jUL^9s&u^hopk;Wu z`$jEnL!0qBT0A*tSIu)5bGuXCykUgJY~F5Kh|?*9`W-t4jI9VujJKW{f7E88ktyz+ z8*}>AL|Lf92dKz?{`~pM>AT+SVA=k6_+K@<3zKjIBzdFX6@Ip`w3J0_2$JRSj46=K zi05TDBir%pLoFU8`9ct`V4ZYvvv}Nz%B7`cbB}OqsZ_Jo@r)}|OSu|-;)$IfjS6nU zn81QL)TCX@g%Q5gox6^$i@bdJl}|m1;jQ&CF4VkfH5Ip#aw;>dx1i{ ztkS3e=YBsK)q%?WR;78IMViXWUfam1o>f$^$;rtD+QtT^CM9k0qh^yupk%&uQL%LC zvw}j`yn_&Q2dH9pX4-w9KW}|E@Tjrzvap@gWOF>uk!JX|c034EQ`0YIHQ*yRg=51K z5}GGA23=;d&3+FlCn>@3=wAb@B5C&ihL2{FF(55Hor8}rMDO-a%_BH-=l(5QM1OJ| zxRj|BEW0hUQ*`W&1NK73Af+mV#uhRvT_?-gliZAw!DfdWHK&a{oj} z2R&Hz!ta^fu|e1Gx{-Z4<`+X)YewGtoe~uEVcY!S=RE3vjDTx%hS}up#{QoS_@RM; z{)6#7Y@!<|b3L7$oE$a230A>%;)JrMrvKt(3l51sG7ewxy97o+1^iH3%lF$YR}j(; z1VJfn?fr=Vep!Rig;oa`q2J8J(smD810v78l=7G{tHTm#8w_9RGMg%yAbw-UX;G5Hs^%6m5(K z@{K;$(DPEsSX#>=!zo!^Yw>v0eZzwVajdG$-0}e3caC>mHBUU1P9lQDlrkl63RN=b zVOMd}^Kf(PEZHzcL_`o7yG5ULwtF_~b49mtIqAonsvVjMc?UVa*8ct=7y@7B9JiB_ z-ogR3%(l0)vkQxjomu?bvQu;J|37bn0I_FDV-lpBr#l_0s;aVVn+xw-=FkX;ias^U z&f2Pz*|YXKrqi?#Cqv*|kaf0^F(sezJ8@oK%ck#HF>!Hm1*X?<^EYzP5NP-88Ot*j zfaHKW(=ic9Bh7dzTOBnyYRB#zuVbg9zgK!~Gy5qS_xM(KjxGq9h|AJc@{psO+gS<< ziqS{N`8~(y+tsBm{(CBA6`Y%Rmt#a<3=gO&G`V;00O%SHQcliC=%5hd2o;j? zA@rGpqM|O!-($r@Qj(LmvU&VDMM_F~kj@{;q6fHdLJ|`8=l&yw9sJ~*0wo^R?qN{S z1zFh#+MJ)7n9vcaDJ1$~C%96B9#Vo$%$xg?9RFRT>>5zy$%WG|gau z#kz`|jbvtJeV~$IFf_&+yD7}f$VeJ?>4R`L#g%T7Ps^?ydX5e;gO*)FB#Eq%Cmzce zO}0u`|5#mhK79CamVZgiX@%VGcfK+0@2~huSM`3zr+SE;eM^1)$=(y2|C0r%hbb+-;qtB2C0DTqQUAtSH-HnEEmU!>BGC=0x;bFyR(TOCi zh|_$W_Dnyd{Y!`Gz$@c-BtsC=er+kLp2+|pBH}o^&o!QM*Dk`{v#i)~?6;|9xg;;I z6}hgZ0NBKPqdW*nwiM7t=z7v9X=0(E&`fJ$v6UU?Xy1 z_Dph{3FNDRgwsTD$`w+fr34!dO=ZF{I)9(D9*DDma;>wj^e1bEoR$ThefQ2)R$I%` zF8&Vlfdh?Nt+ugd+P#sH^u6_$5cx5AQ@Mu(fEy*x_sv}8RM1& zUpNrBBak^CAiBvIz}sbhvrsEIL}GIv(ZDMit zQS^>v1Pd+zx)B|spofN)^-=Kt(}yG^5`B~RpSFB%sv|w&|KDeIK}a|@*!Kz7$ls&v6{~HJDxz%&l=UpP|cr=l1;h! z*o&lcY~jn|d!df;`;EoLBEQ`HFGzPD53DpTyamV%z9jGlPyh%T|7NQ-X*0ABoCIl{ z+RV}Maz#10qn*ivu<8o zvHm4Dc=%GtDowSetPXoqAB=7Q<+hp0E*eEHxA<$6wz~PN?+S3Tp>g38sx=DKD|HTI zq31zTNlD2Q)TK+_=~UmLJ^5Py-vMo?DKwlipOY@R7A*VzJ{8qz>h^1yO5M3f=ys|( zW~&^H*lAkGjHk%GE0IugpDL#^Au@+iCbmfZS{=KGf*g3#=Y;0^gssm`G?**9+ACIWFp6@?{z)Df2-B7t3 zOyGrID)n^V=I3SA)fqScOiGNI;l76t-7qpbiX^oU!LjPUo1H;$Ynb34Q&T9P;+~0r z|4as|yIo>z);~#TKeG;V)xMN4HlY`0iN1dQnjX!&WV+%?Z0tYB{=iumdYoMu9Nb@X zeSUoI3xUMx#Q9;IR;DFU;-u%MA!r4Uhl#$^H8 zy68HDoJYB4P%tuwJ4^%xj1C6W+ydMzIEi3%{vzIZmM*6nX_h6PDR4#i?vFsts$7rz z*!ugqQDyJtEE-H(=aRMeeYVvGzn~O>$Qc?MdeY3ScWKG~d0LuEC491TmT0e?ot<{1 z32^IRoe%19Y06TI{~%F}6Y;_U`?2=tNJRy)MvjQASy;@44|Ut-X=SgzXWR6|ay&W+ z5`Whc|N682878y0PM}7%LK59Qljd=~LF=?V(Qc7Pq`crX*XwYtGZr1O_7Tf_KQ{M= z*U}ZMObe5d`?<0CGuj4n#-UTEY-rgSMi8A86cQ@&O-2pJ&m&1}xoBjRrhV`&ybp@B z`lnJ`I2UYy@}$Mlxi6=yWIR*JAaq%dI{WN5?Iwbj5_{?Bph4`)Q2k`YW-Dccj%mih z^;jO}+jQ#1i%|{ZnfdVoq;B;VZ8p^98Tp9C|qaFjJW5+EHx%Or4gkGYYTv7Fq_U*Cr+ zIJ4R7KRs8;2*sb{xcF#TY-p`HzkgCELG5)>|??t=}0LxMJBQ7Z%0*E(R|5>%Uw>shnP{j%F zH6Sq1W~!B);(WAMr>P8N63n2refd&n6!=n=i-bTJ|9I?EjP&%aUPT6K$t01hB7n&3 z3CbjI9j$px&ibn0azcoQ6+LTQeDaf!^H2KAa;Yj$ALo6FX);20KkMUnB zaXmIKpMV_DVJZZmwO#@_0M7*pll)INa=t}V)|U*&X;Iz{snXZ4N;9jgC&Jhyaeouw zPhGlt^`e$mZ_qOVVc{;qB9^XedJ3k~Q(!!~OMGRn@1oey&c!dcLqa}Gc5d1U{w!3K~JHn&^xV-_E30} z!zWbjV`1TKNGHv4XSPMu`{359S1o}*umWo1nl4BIpCKH$T7T93KH*w5xC~(>WF_>u zAALicj+)<{O5A==r#s_-wDtA|e0N`Y=Zt^O*#C(F_l2mHj1O(+s!Pr!_is6Z*dnFq zlP@@MZ{ITi^Gtq5SLoZ@NBSlWt$sW`wHUqEn#UeP0vL4cB7HYNg>WUDW^Fyagrexn zb*29;G%f3*BH`j7&gf*eS5!o#PEn1EAvTkY1i|M^moNKVI25xeh-5%uND%kle?m$l zXWrY)cQ9zQiD`6Nsi@Eu^8b?3%4Q_sCq4m8yYy>yQtjIHO1KaqpDdS%%<*wWoF!V2 z<*yh238Y?8R7}pvv23nfv`bv?->r5$tZ))5JKrntmHD6vBgVor<0i2-9^t$);MCUB zQUNfRKU0hsjSmA-=`{c>K(%;`QS3~};hTz{=y+stp z{bxkttF>n^ovJWnRa(YvODK(*d&c=T~+>_|Zk$tfs^xc;yCfj}YyTU@*kSHy0x z3u&>zyOS)X%U#+gR#vqHz{aHmt>f4tn5oO}p%*NQJD z>(u}Ez+_X}2n`UqEO1b7=_DLml6U67rbi?EbtRxj;xrLF3JHI)#L!SrAD`{dpFck+ zDA*Ag@{l`yMr~8k>f(MR9jB&DiYRV$TgOqJiGJ6)ujFpdqDZ zN4$DwJguTl9~^pc!XAfQjgk`g4Ht^EuFx6ZSY2IR;F;Oq?S0HGzr&TY22tO+@abx&#*G@lNXi$T--KMP_nl^2%ByAdMzy&ea`wS{KkD{BwQ83@ zLnzvC!#cXV-?y|-BRw#?>;c?cpnjJ*SeAGcfM`F+RMphjIXHl8e~`?Vtqh*oraHR6 zSm`zR7C;MT3z2mgUR=XKh&?3++wJb$*s3Y`zh|hRkkJ$Uj0pZByzueP)vMH~gj-15 z-Q9^I1U}M-$&k>ePXors4KP&NM(b$yP%#~92NCrJt#;bIy#liPQ-K!)d=i~i~s>s{uK}~{0b3c z{FfcHNM}%`AMb`XsP^pHLtuS^?h=;7bXe&ADm8M5F6zfcQA!aG_*WtjbDDqNRXhIR z|JtOwHpwS!FjBASX=@u1cD=?)-z+M2mFw{#9-d&W_8fM*vsU72mY*BD3Tu|njEcq< zl$Ei7Cwkg3&S1|#zur|_JG(qYttmeC6|C0`t>L6r0A>31i^Ghdoz^ll)kJe$%?=tHWDMs2)W_?)%qQzSk1s zBnUKslmQd)c$}EiqrwY`tc2|L3`P__Mv^!+U!r>sI*;u}8kq^xM+DYbc$|B0$Gvky z4IvM>k;0R@b}d5tAY^e0zxQ6iFpLiYKM{Hgefgoj^#91Cx)zCPp;jBh;W;_HIwiKg z7V+`%xLP&P^8d*c5(bm404y|O9zsq|3MC7JKBa$5>TE&H_8mA7C)BSB%rQ4-xX9=g zQ&ntMCub3?ak@+|1T;pyYFexF&dGfwB#3oq-H+(w7Z3=GiIJN##nbCQ$@^nmi#Y*k zP&A$jb0V(4W|Jx-R^y<8!$ukf98WKb-b%6xNVJQDAk3wubVDjgap5kG{aIUF?J6qw zHBPvTF_SNS4Tl=)Oazm$2AxI8Zu8Gw1mqbXJdTPQjncN1!i|BSu+VFkJA$8j3|HU> ze%xsJ`uzC|7krA?NK1C&C7^}sCrtqfpF#rR-{fA*j%3(nIE^d6Z2hVK54o@1A~8ky zsJ(rR(b`rU^9*LknOInwCcfGTEEYQ!qQ3uFSy@3fZXkRquo^Ui+ZLuJ>V@b&xcjqj zk?ciZyp^X3nLfoH^DBuJIMpc^aFKO><*h2CL&+LOhi}99I=Z*J?4e`xR-?cyOJni+>A-0lBQ6IBvlvL+ zXZ}$tC$dR8%!P03>wBt=mb{6YotpCOG~F>=a>YVVkM+6AbbfZUbBNiF$)!2W@3zh? z&%VuR+1vdIzG;20z94hk;2^Q#<8@(S-Xe-YmWmDx&|}BQP=ZmX3?>0gkCPw6(|G|z zNEkvvZ-BQDKPATWU@&dHnxEVc(1oEhk-I;i7e!YiYfFe)Xi^_gx=PCqBnl$4x%b9B zTE6ntLr6p{^xL(x-BY^n@4plEzF_4Tb+@1EOvz%0rTucjb#6k?#!&+)GcpG<)z!ds3CdQXpyL2ew26BS z^Yc#AftMmBi(t?wqG&Kc841euB{$!bVyx+|>l(VD`f>P;kp17BUu(ZAQ8P8g2{|3` z&CYco~@ zafplGJHGaPd|hle|{K?gv}h@^Ga+eILw_n1BmsL?U*BK}*xKJcB80#O)#5*nJozFmawUHhwEhg05TChOe)Aq3y;ke3-y zOf1#Zo0^)6ofi&KvSSJ}Gk;VuBlo}KYbhFUNNWn4v0L=$Gy-{qv1sA*)U(68}9X&bsHH#A%Wffnx6%4tP z3Uf^@;)}b=*P5(88=vMshM9?>jd>>`b#fB71!WWIruXK;9B_+RcD;tikBL54*AfH& zl4h~!dIJ%=iCr$Pu2qwZxMVF`+uYWFu^&D9v9I9><^Me+A`^P)a5d0oAUqVH`IMX- zDnj`&B8`X6@TK&wKw-9Ss!ry;bgP^##Y&v^nWOdtF9IU0?L}F@^^Fc(u44ar-=#&oebs~_m0Q%gzqVQF%K7?z&jvmXhb9!pjR)8 z2@4xhZ<4!cMW;c;3rtO=5ih`Ge2=(3j5rd+FD2pF0R{G$T}ILnnF{uvt&QU5+;{6W@O*h+1d1@eW#9@hj^KT1>o3@ zcpR*Iiijv=URoWGxQb!WmaSKFxNfe@4{(zlGRVe*_G~k`U~bOM>hZ_sfT%q=c;{+Q zi~9qJ*noSn?MV4QBxGCYhHpP}-%q(1GFnB(=7XeEO2|3+MXCBy5dM4LU5C!2AP~-N z(PS`wbGkjfXUj#Pmn<2sy+kgeA)Wg5!9Zig9boal$8X#GUb+K3blcRF0;u=PJ14$A z$k1hF9YQi#5wP*VZVlh`5_o#h`8JdKg}OLk8-v3A`}RpXI0z9XAKBGs<>jo92@$jT z^6KU`SnjVZ`h?B<-t5MHsN(PC>l3ACVQt=E{3nz_{C&{Ai=q`V z`sX~(?7TU1AidX7XAJe6%v@-$A@Y?{rL!-&*s3)cjd@~ zB)xb+j>m%}(!wuWbzeB}rN4U3VEVax;nO7&-hynAIxvc=2-R17W2qh0wbtYBiU))g z=a0(|9y~Z0QIDk5sj;${w|rS=(Wvmgvu+iG{h|%P&#~l*%#gOfh&SPLmHS6gxs zC4z~NJfrTY`4E%w?3w;O=CWuYK$l9$3lo##P*5@{~ih5v5%R#8a3Hw?WbW;S0UG93KH~|`^d1o`8q!SY7wkN zPw(u48m5=k>}(&$_m^rQDhE;xEjt;*g=!8)#>Vf5hS1IdETtztG{rwHzvh7MZ+?tf zErw<^2QwhRp8~wpCx?&OBIj@l17YN1Cn^+YG;VBCKdB#uDs zB!U?Kn6m#M_Cx0sd85bRR8V0$`%x{M#{r3r>8q2w1azs@e0cd3$@rzL$DK7By}r5#;0~M>@`u>17vHb@k-@d^-40s1xt;BT%XS6TAnH*aLq(b|to1qx>fW;k7Xa8g_jrQ)aso z@IP4qGP2vw&V+InxTaJmjyX+&j>28PA zCvN&cHeM%0RET21NW$o@7()la#arkxP8=an9;!f6`!u*Z}vHgIEo+ed z030&(@rB&(vBnsI*{QU^y?oV{MYjpF7>o&4lCq9YP-A1`{&M&)V{F9`YEShkoR^d& zA*@pbr6-M8Nn^+WAfVM0X$AoMfi`%wBE7!94-Th`(J5eKZ!r=u!ri;P=88@ zi}R6BP1bZbyAIEYXoT<>M^0C)?Ji%=w&IzZoO2Wdr0=OxtPNrF)5`@fU?${zBIrC+ z!G_U!g(dQbxiN8Z1}$WuUtksp`C+IoW`pNCh!mOQkSFR;CZP`)@g$5aIIp6V_RO^z__K9EiEwa4k2@ zX6)l8qc-N(WMsaEbKdzu$W2hvRCXtDaj7+GTb0##ptRa5q=EfnuT>3<^tNgHPHx?= z*Rd8WMK&1gZ@lpvYua&I*jq4(Co_^7t%opS973)?kr{tn^2lx2i|qO<{Vl}(0|Ial zRX;*wEgIh#cP8TW(7lLSR@WdTe)VkKuKK-~f-z#&onwfvmLqagp4j9;EULo+lTAG5 z*6};Z;UVC)uw{Q87&1Y1&{(&Vk+tXEkRYXIZ5*!ho*sBtr1d$Sj$1R|=hW?wk!yN5 z&?v2@>I{!1rGz|RzSz!u>}rBR=S#ILt-=7%z1xD!(_iv9&ihdGDZTrwjDd07don%DS>OdhLGf+!!ZG$?!F*ZVqoy#XyC_B{)6x?u`UgMJ5+&v;?5_bwN2v2=ll{p zNqoS-7pZU1J6K(&*w1aQj+s7AO}kapcgA|yv%57WGV%j9-(sH;)&;bdxjMNlf2%>F zPywKBy0>wwPJ`*;y99B0mwV%L)a5fhAmg!d8ovaJW9a4t>mm)HmQ;>Bt#2J{fh zYDCBDL9>VMiKCob1=l(X5oy7Hej|f%Q=O{$; z1~Cad07`p5l-zL~o6s6x-)X;I<|0J=5v#IgMvLCpNgjVUk<1yk7j2ta#%~h>*0=85 z?^a=If9mk}5G)n%hS;~(951FZy@2H%QW!{B;X~FMl9BEE-KS6DYY$}~9gxGPn)&+5 zX6eGv-CYR?2YXjZuK$`VYjeV>I&}1Cnk*-&>YoN|aDyCV)RJ&^kp2y#4O@}p z>@^c#d7d}dl^uIyeK+_r0}k|I0f7j-`p5jvrh?2?18MMrNO$d%R8@_vkWo|45LlWY zi2d;4gGwK0qc`d9ThpIYg^Yq1p>#)thgajN{Na(0AIBS*L?m(qZ7zsKEDABvypDC3 zvILm@k8r*_pP0$loCat;<+5b*=)jrkZ=IRbZ7F_Ndu>W|z*1_>b`5~AI=+j?!jqGx z9h^eJ?kpds?ej4?Ky3KSH*6prwD9LD%jc1W{^)sSMUTb&%PX%~%eNUFZ%}w_f6ZzN z1;3I%n8Ylprus7C!-osyo4?H%d9(;i11{0nBe8jXY`C1rApeLM5 zWlW{XDJWzvIvm4(5y;Xv!3+kc6tC*m00ARPD}{$x=D{N7s7mJkm?F#&2cJGXBBE?M z4EVObq2YXH=jU=a*PN1xrz)f^hz9)DHvjkOavj0b#VI4SQ5_wfKInt*@?!O^YAfw zqcc0!agop#7NF^69G9CBF)E0`DT_zCGm7s94o_A~9~N#AQ|@LoS1w=1srSJLE2L}5 zLcAj6Bf7FQ-#-;HgVvpnQjwa!(pfmGozLB#r6~Yhv1O!`-|!PXV2rMWLRzv4MJLJ2 zyd(E${Y4k3bDx)Rd*UzP%)1nt-ZkE{_sZU%FF3 zyDqUyKmA)De+tMQ?WhD+u7Zps29HXb_ditQ`Z#TGJ6;#2QYea3g{b**+AE&BSC*&R zyrIl{1ZHDUAURp(E664-8{3VfDmz@Yj!cb~p=4ALl7M7vF+;QRJgGE*3&MS)y!2yd z?^)Y%@_12)L+8#V%;Z)Kq9ki#rh-QghSXwEA}clqfM0t&5i(O>rbwf+#yIhO`MRZ* z%V+nE-)d&-30h&ODuy)y49GFH7Teq=J|1kaB$9io$G(bw#A!4IsHW3|CRH? zEiAe#!Ci4i6E2mlk-Vr(pHnwA$9=EZ!8DoVa@=w zV-EzAX4IYT92TIwrEi^qcvzkrpo^6nCX~V)^X^>R~^QqLcFy3#PQF~ z?+pPIKn{bCN9*-4j#t_E7-a4+%%ugV{di6{gJz49x+1IkLTE@;b!!BMR-Ovp*-AcU z3`qcQIy`F7kR@Y=EZ#>VIH2%lU|qgaVJ?2myKyCJs~wGe%- zErIRR+!A3Sn8ctgiLiWW?%}TlM_FyE4)iG!NGX;fxpCXTh7_zfvA$&eXF`5s>a`vc9dJx5mz6l~tg=F(N4H&=xD=*bl z3a|qY2bq?NReVawaUS3(wn-M7ExL8=cH^;tDDj%IT>t0!GoOb&i(RHf2O&NlWCB!w z7Z@^$Zvpig7jnjrc!EU04gXx6d|zTvg!Qb;K{+}AfZG6G7?S_3ouy!e7qorH4&uuT zJOWjY-Ni)x8r~RE$$R@XGCT9JA{CogRd$DGZ0BbT^p)}^#TZ``8jVTEi?9lrYIETN zU@f?;txMjQ&)eCh%Yt@Ofq;=37Yfn zC}{T`NY#%p#Q#mt8V;2yvL0`hnrF6V2{|X=U7L7!3rY6jq;|85lMM^Wj$Tb@M2Fc@`CKky^;e%&!@!V*!7f!kVPjejUEw|tG?DNz15z1XYh8HU>`*e|BG_f z&pK(I(}p}H;q}c!ocCi0TMLkxX1>8rpy{_STKeW3F`RTBnKM{qxYjUa?sGRl#cf9| zS1HtoIGoGt_>xka_6tRo-gd`5B0R&d10?)*=r~$Gsr*Xvj@BUk%U((4%BMGe*~F{c zWaYQ|-G6i7wxjjg($gXATLnc=`gp5T|32Bu{9)2T>KP@e?n7q@PU%^;=PtW5JI)%& z1j$j!1S#{%R2>PlsZZrBrVkzXetbB-fHRV{K|HdE<%6?&m$jPhyTJ{eAU8TKxkg_> zl?CB=S?TZYyT%v3--1ihm~b}sjNJt0ATY6UDf|Ph(1xbsn}W>#At8K*Kb8#IesGeg zc~2VZpYW*`d^O=!NMgQYwCyQh!n*^v*r*duwR#&L*xG8s&Z!b~Rw|5!en*w^t$vCe zvZUaHr5XDYRZR~IN8fKca@#I<%j}Vf&4kT8oXe%-aW}rtx9noxjb|-&BJbw1{Cv5^ zF1O!HM|g9LWZk32n@$gnzo(Ws%)`?JD0c>NDx_EH@)5^bOjG2hhQ)~tFd7XS`CNXV z28o|S6>mc^{i}Bd-^Jgv?`;thw+jki@h7{;WEU8|5=vI)dh6MVQ%*mc+4^$}!;5Qo z&ChW$L|}{wCEBF#4G$tqThiaHVJ(H`J4YTAwj;c}kDwW$*j3|dmLMI(bnf1&q2W91 zF(99EnR3*u`WBhjK=F(2wvz8y%NaYXmet#>6mAiE9JI-uG~;AtV_$Fa#}K^dghq}5 zRuadFIs^ct@ZVdt#@=(gDw7fP+&srQEtGxD*Cw=}5oSX2e6QXba4VL4=$EdV)(hFv z7`w=vSg|2mVX5%ktyXccFhYuh_Bq4ksq2~Ss_9Z1+KdWZLOY4ZY+FJQWH=9x(Em}q zYN4{zSnHip)J&?JKQuJ)ymCIdZlroP)F!HU#&6EzfdI zD#_qGyBtk&C*93fnv8B0zDpO&4)RoK4efJ>(zNf4?P1JZEx80^f-(XVcFxYlP8D#g z39td@5}yWGI=J4)XHwo%eMNk@d#_D9KON&&->V)SRL_3fw)o_knhzgl6XI|MZJ7p2 zFXZWxrjAq6s%ih+b7b#L3W{)Jj~(c=x!;`N?aIE1Vi0GL%KX7B4nT(7G%lju#&Wl-nFDTV1a`Hl zwnS%Sb5cAhs0!y`Z8|era-6bJvxee^-JA8hNhb|NgY*UTR#(FhM^;cAELl$rk51-} zUX)@Q&o|qX)VB5OlHHNrLka5_!enCeBlxWn>~>O+xfP!bBE7ith=a+tqWrh4K0^0f zAJBZ36n`Mh>7LD{r26OKeI?Fb9qH*2P3}J3d<|MFr^k+UHeB*Cx7FpuH5@V;w2!-o zekz`C5HpIA|ELlXyLkG>R1O10(=9Ugkdewolh$IEy4TD_Dv}~pJ3bG*HEv-&dgbYd zM2}6)m%Oou<^Eu2bN}7Rc*#57lLT*qphV@D5?QsF7HgS|I{#HDbyO-W=^%q`2*Y27 z=hBz9s6U%2bgA^v|=y%)>Wi%Qt-hqDFu_=DvDP9#bHDfdiqprtlL{C3>*#t zrAqKfA|C;HhMtk)*dtgsaf-$nr!E0mzfk6YH-BfabnR|!1jDNm18!cX%xfRNsk{;~ zoXt1hWZ#uQRWw>I{y|hTxnq2*za8If{siM>^9g#H#Xq64#V@+_=~67)2TrL#t;ZwE)w~AsDa;gWuDMBvh>QHW@{HEb5fw^ zjsZs)0;1ZZCw{IKbNej_<;@sPzcKc7i`5bP1NoyYt`u{;jfzPj`Jbw7@(wf8tc0xh zu6*0CFwN1z=0U$x(=~9hb;`V?;%0Ic81#ivM+-$|AR@gYmGU8$p93%FkjaW*|ly z{D72Ql-X~}l^NCN3yjFM=@5U50Z{qh|kF~l-N1{ zEm+*7_w}@4!!WfuudnpGlehNv>e3e%Qu{EQbFX@<`mtO5+M+L2Q3;Z|Y3|VM z>EiT$MD9(R9kNT9P=%^}cEVWB?2vw&#k>Q;un|5!q68vJ6^?YjVtNWbK|pUm;C=%8 zClH!LhKa`UZC5)2P7Q20GX{KqHWj2a|1`fceCCnPnaOXRQ$AtJ%0Bmtxp!FTUP##{ zcOv0L4!`?exqX+oc1>K^{v@3mRsVar`$U#=$@`TNW(y`*)ut( zQ=2bTk1J}jw@e&vnK)F-)wPYPXe^2}iSt+O*U{-daouv+@Q1Bt{#17cA#H?P!?rXZ?H_cp3@|UU*%1{Ox$hU*L_ zp{2^t>1bZ=p@<-@a!K~K_nGFqaq}lE=LN#Y6Nzu;H*3t&DGA5s{sO>gG)zJ?0qjDS zir;!z5=(!lL8XFoY{swA*I3kv@4R~~kj?IqblaViMv;%S!USuMua1*ko9{9@EcbkH zhxM7j$K3~24m>#R`!K5Y)wT|^6T8w9YJV7+3f^HkuUJSCV)Ofjb(vV^eeHUtm+gA$zXu?|oV@$ffS6-%*DOzw z!`@d=SAB4D;$=Gj&<7o~ncm&)Xf9*zA{IAD>S5utWDr(Da$#u3HgZ11jEkA2`txvt zvCJFKD7TS-Ev;`WP6n8&8g|tjJP|tPXw>vNQdOQbq2RWriTpm9-ORg#rR@cGcD8d~ zXH%k>Chnn8<32r)4F`|F*+pwWX%RshmG176l12pSF6r)Wq*J;j zq&uWz2gSih5e6j}0slzK0tVzs6A?zy{NDj>-055k%CG<&dO1uwZ7@ou8o^nVKxrBh z5;8Oo=0hO6uPxVU^9`Mn?+y79FxzGllSUi*UR8EP{E6vDx|!x>o%3rGw!aAD&N=VICB&A$(pKdnN7L)jM@* z$uWU1wldqXZ7IN*7)E!Uya@~1Dzbe$Q)XsvswHz)o zFFGlV!GtX#C3=6e{g)bT*5@Bv*0u0E_CyiOO@nrAn4G*4E zAG=~NjtWBH{ST2mzwcOn`_)T-2(xUi=x_WN;ZMH&M5E;_cIgM0L$M%Z*|>A-KBQek_+3Mu zStSa3Rl%Ps$P@NWs;HPjtUJb7&eC=me0bnzj~(sy^mLKUv6m za1ALORj<-zi$hKgm*YtB;DS%{TxR?oem!LaY8?P&Oklr=?KMCU><{PSfcjs_R7=a) z$)>WW3-`~*JpSdu#VQqRz9C%ATEhUD zb~)|D_8_y3Tm6M;RTwN4`YN#awbXQWfb;Nm&bMqDVK@>KfPipoUs_`7B{b5?n8JQcy(7*nUFQ?+NHQEmSj z3Wl1k@W6k8gTQCR6!nM)+n_z~b}0b#aNNl7eZ1!xSuVaKD#zONC!@V7%1Y(EdSz?7 zeBk`%I|mV-h=3x|*0_!~YZIjTIqzbDToK_P`iUQx@Y1S1cvn=miwB5{lm53D5g zjJTX{0m|(S2yZae=*mbAnx$%#=i=$DZU`aihsuH5XEi0>&MkX8YGU%PIOn$@j_@B} zQ|WIld^X69|EC22PY4sh;5?rnow_1E?pxUuz6KBd3&C7tjtiRE6@dN%D}pRgVbP}Z z>jACM3*EBp_58xXDK?~Oq{OiPNn?%q7+9Q<=~xC&I_xEpX%qB2UKcJoVDA;P=0(2j zAC+oTMSnZ{W-S@838YB5Y%AGp$cg^^_237F@@O-=DHV@Dc}K=Y)~^oxM)8aC6}(NM z6lJMU13TJ4_Q&9hC2iDr1JKqwVCEJUz9~~m{wm9?{FJ(2Z=>`Y0CxD`PYy9g&(pUYEophL;@}cKwZKZlg;VuBZfax<; zHGnYa+AmpA+1`DmeM1NCSYU972Qw)`xTyTr+KL94?R$rZuZ!e=YFl#&lNz}ar%L!i zYCC2hSEzM&V!sMQ7v?MYi6Y}Q*Lh-yG?gyDRlD*rY|e0DFrJbZhAz1IQ1msoRkMg< zel2^1s1ivWU0m`oh+MAT`JcwuSkf8H+Gu5hB)=@mxK9j%lxm-xSD^VoGez(fe?`TX z$N-nr12(TFXvYP^VW0`;FWjng&ZuBxruAX-h)LLt7JPX31*An`xfu)}B z8LIi;&8JWc`QQryGHnY6=of}ZQCU;b;&2M{fZpG{sK+|i!sdr9lF`;2`mDzMI|Gz| zYU-fxA;|tCTb|#Gy<FoO7wC#<}_S%?=ui0aw^V9F*OtO7e(X>qG+ zRhk|wJJP`rw;R9fgg>{$T1XJ#obYQ{slh!k;Ew?s1R2iTo6!@bUjq*3Ul1Be(|i@} z+qYY4l(uz4p)h3y;+DvkRgACF_5*KtL;WPf|6`3)L$fGp)&2%;r+fV#&y#t+=bZ_rR*wytDq&rGi=ZR-he9Fp6mZUACqFI1iyk zUjAr7o!^@5Sbh{Wb&KGiR~Wid34h-$zE!*QSE^Vmlf`E9KQhRwGZQsZPuoyQ+fYyA zTaQE#cvisZG zzD(XYJ(59u!pSwov9t4?Ke3C*HNDoPYBne&?z;{M?QQJwH+TdVtaHflfLOaP+|-kAkr=F7Qll zjoZNgy+6A&mYPl7vDjq|hWOE6y}>Ui_Qlu-*9aYes(qPq73Pc!MvZ|-!W~@B3rsf5 z_mzVi6DvW($g5PaWAw~H5tqKNO8MmwIV&d?^r@-I04%)@n8p_+$IFH(u#0L8B!fWu z6pWoJIJ%`;N-QVFV+^9MsH%I0vgf;_(i4;mhD`vqd1{p=E#~N0!_Zlb@oBgL{Ap)H zN$&Z`t%YspEXir~Ew@)Zax&@kcKpDys8n?6+5()=WwM&lq+pGhV&j{Px1o%-xt5qw zRC%>Ni#zP15`+mVob{;_i4UUGY?0B`I+zKJP1|YS&HO>r0oKMJk(J;0O+9A1Sd9eU z$SmP``zGS+tAEs2P2HGVa9CS-Ofj;T#i%PEE|*N}SX>rkGya!<|6DduOGb)xW=GZ6 zE6TLB+SA{jnh?&!k!Lye%xWYwmhkI@2qWjG=z3|)fmNF++V6^XC4}Jgjv*Io5wD$d z4Eqo3r4(va6`TfgNX4o2mG#?y_Q>q%Kj~SwbVz&&h;oJdnD$4=80UbeS`qZmfEU#R zkwJyf7wA!#JrzhljT(A=zQqrJ{ZmltVMZRZre*b2CjoQpzbS=OB1^VBVhdc+etWO7 z=(PbG{GxAo$)f_^LIQAST-Ayz_Jv^5P^Y1Nlg03Sx-|m!*&EOx?k-f*c-6D?a(ykv zR0ui6!5bfR9Q)>|7J$E_!tl=uEfcU~#UnRV66m0llZb9gItE-2;FS3h^Qv%eQPH3^ z)El*61!Os8b;t&d^ThrzrVn8%nDUvv&JRHX{ng8Spg<6x z^(6%9Y;;~~B7u%G+#g8J-JU_Q>=_=W;NVCA$T0X%BBu>8L-R#6LVUZMD_ z65~nwT@ z@FZxTCg#;U^XmTaW58ZS3y(AMetX4w_ot7^ur+>K_nKl2{?~p0OV;vfEboZ1U_4PJ z?3-jdVj(jf3lmjYajJ6L;?}(qlQKE3&k>>FLKhl~gcC*uM=t_ckdE-eiFw#Q%t>Z0 ziWH7^?Gp1yJ8dC4NXv12f2S(?nH6c$PQ>}$w=Wl-X*G=+^nfEXo+`!#$vM~QgnTQ& z2x~Z+B@!nYtQHNn2pM`*dzV(cnz%nFe&-OJ>7l^*G0V58Su}rqmlPzxw6}i&SUu1q zfFSseRYC>^P>Fqjy&HIds%Cq78CL9lk{%vlegwRs*vegs>rGs% z&^MnVxmt;D-!_4vT(8X+7Kmli0X;ENYo+ZK>Mx`uKExiS+hXk++TiUc4BFXT31@-n z-`~AKBSGSVMO#@+&GiswgtkN~ER%OfBn)>_Z6~2(yLzL>StB<=#IlVsJuWwXS}>sx zM%4bew0Cm?I6`H3M5h1zC$4MlCj%C9tfziZEFKWfuL(Qi^G@0aQ$PJnBO1Ve9Hku) zhCAo2qvRqVnVQMoCG+=K%7^s2 zYi59UN93MF&D9jPj>A{k8crVu*qsCjdgIm{WT{l9c5vd3K^tG-|@C zfu@_`Q0K$QpYv`JBo%>Mk_32`)&Zt_7W$?o1Mr7HFki-GV&edQGmJysKBi8 z-Jr0L_MKmd!G*(gF`riUJYPK!Ifjcx6RH&Dh;@9&du{Beo7*Y)BOXyzDZgKh5HTOS zm?T#gM{q8gNk*Z79Sn7ni~sbQPXVF!!kK~}9{FX~eNj|;g~EDIl2!3826a+R_kP*f zBqEBnU<&Uj%=t9XDF-fIig~F_O=0+aBYNu-oHwOG2w7hr-`TUxk`3shbq#IYS`$lW zubktA07Vterw+a#g?iqjpVGC0-~F^Z&tQ>$S=dXK>t4ZQ!do}pr7d{_cYYMdS+wRf9&CeQe}98icJ6jifizv?SB9w)b*FBgdY_r zz-Gqeu%`f^(g!*`DDu34s|(@-`g&=%BLzQF!QlX1R#fD$iQ3AnU(r^ZDw&uPg1lDH zVWfh;M1`*5GFcH(K9jiCbCy`!!yep2N6_0%A57$n%EUDUi_#FMvbpYX;x)+lU6BZ2 zQm>&!?-K&Rr3q_N@i57+!uCkfYWvzYv z?=gKzTarp)4+rU+Cm>De{_%T!cW{A}uv+0hk|nf%l6+1~z@9`Z!G7 z8haa+0V}FOnrLXkwL4H{s5%4h9JO@>~?w#km{qtzWr$kLR; z$?7=S{B4zN=#9wklFy$&hatLK&*D5`p>2`5pr}kfVqZC(LYNf%S)|i$o4-7@EC=1L z@|Ug|p|Lo(>5?kiFPrkh7(+Ca+BT$l6;!*qY8oIqGKu?8mb)&85rL_~rKThDr*`$c7sJ_D!bswAF}ZxwZ%smwru}Vw!5vd&IgLT^za&hGhh9 z0O`KKk3W8_Z6YgmNU+RuCF-FCxO*Z0kuw{C3VE$83OAmq#i&M*mkab1bl^b%skl+U zd0%lDxGH8){z|l1D>i*7#$r8UEqYA3?M6`3ajIZz79Yg2hbBcNwpY93h&*xe`h$M* zax&*aXU(@>2xkCfj=BnR(A*o*b;}ZFPuA@IV7Xt9v~L^ew;Lw zl7Oe`8t|S#N_PVEJ;Qm2H!01thSKDX;yiO7!5#ezF#;HQB49snmKbElZ5evoK!+?|0Dd zdXbKnk;*;o4ALXb`yT_`vc`HHNna}Iq>tG#;~Kn;TELK5xhh3Of&BRSSW!Rf>?#QS zq?kRGoOzIMz9e6Znq5SE7L&-GHuC1GlsS-or5dzv{9@SW1i`<6hX&?oWj5bQ#*h#6 z>}gcQ{aJ?Da;J2kc!#Dgh@aT!Jm#hV7;ytksi4`oG~sz7t?tRiYzODBNQG z>$Rm`UNCwaCkic%IonfJkdwW~4S=W|r6@2D194aT%i{9j;1@yC3w;B~O0Q5Q@(>ue z%5V8?HwghSskDFPjLSZ4D*7yTmP*N|F}Wv)K3K7yupuE~<%RlHi9To3@I3G|En}@M zV_$++qn0fhCdDcuMZ4Ma6C3`p_nxhHKjP_eh}!_Fqzx)o-atHy$cH|*^=QoMp*%?{ zFd5D?xHCcAFCri!r(Bg;E76#5w~}TZa}kR6&)#4qNG()ZuZW?+7Ru4-C$1#?Jek8H zV9Ov3%YcOagsgi^h|hkYD*t6<2kSmJKesU5LwV50sx^go2rklWFwwq{YkRMYhye6q zF2T^gW?LZoASst}oVO<+IDiQ5oDY3fH^phd%k!ca}djm-X>6U?T;3c zQ28Hz0r2)-y%;&#urelA@$!>UNLIN;CqePE1$4d9cyO4dHxXrGz@Yj_xhgV}U6qSY zSCQgUDgOx6w~jX#rWjk}j{30d=~VwVtYy>oxMw%lW_iR;=48Gy-HiNtKCTejan%Ij zU0a6gr6Wg+HeJ2<+7z0NCO0~WCc&gp;hd~n;=hGI1{-C>y|tykK3W!wN3$4(`gW^7EGG8z8_`gwr<{A3 zBc^k2Vm(xxtf!WCGW1p@9)@SU)nUknMe3xF{HF1p{n3FJ9q~V_=^OOMj(vz9v~ugb z5QF+dYr9=!=M#Rw09sj5Fid0UO_k_}kb~OJ!Ys;vk7ut!A<2PCMSmC>0vE!npqlPF zel%R;uh`*!)*E=kqi{11owNM>@LRL^O%DkXhmsc9$dd zy-Hx!>YuceQ~I45sHaq0n@SA~JUU@b=tu&n=Hu~1wN&Q)F{GlVi1VkLl83WVo`c02 zMDL>e3$Zcd^7&#`)1~NB`KNFDZ#N%S3|9JE$iM$0t>fm7r6HzohJ0c-#{oqBI?%qB zeCdTr`A`&d^M-_3vN}6=rpkdN6p|`7mh0eMR|8E;PBI#vV!Jqk_NL*G{vu${NvEv% zZ70FCysBOUz>My%>}-c}?d+}4>GNVJw%uFZ#-A86x}PiSsHqdBFFnSMAb<>fsSnvX zIhoViT7?G!Bt+xl@u+f21Pj$a7x$-6_VbQkG49lyUf?r@><2E{j&@hho6|mh*-4PQ zA_r;f2h{OX&pV{SZ6#TZH=LN3KjMR{4Bg_mG!B<5{4tlkI&0#-Lg9E0H!s-VFWMh@ zc+{sOUR;WZXe^Vab`ezGp6QY`@iR+y`lp=s$3AW`Y`dl8zYQ=#-x<|PB1W&D3GyO8 z2|6l%(-$Vx=Kq9&A%{eZp(w^$ao{K7B-9>w)b(ie@S0N*ilYWCpv^B(=k~SA)>C7B z^Y@8}U4&~*n%L6i2)d^OH=aKJBQYK#VT#|wjhpTwhdxp}k6b&|C;QGfm-IKc(j$^1 z`z$l*E;h^SyPnoNh^I}O9x5!V?tz={br$(o$_lLa6~E8EG09^fhPvzBU(t!bDJcxm zN&8Mo(7V+nGSmfGNtW>=x~@Gf-=V+Rlr~l;aCIlg7*F^z@0zu!7P$Rs{;5Ft%%_(x&+ zonE9=bau(S8)8n6z!=6}kZn1ApJ6BDY&6qZ?bX{uPbuyn&Y<|!4%DDu?mBD@4KiL& zm&-2RbqU({CWvKE<%zS)k4Pcy{8sfo;F(jnb8a~>gMk(CA#qXCNMKs&`uA_50O5P6 zyrHt;B`!a7>7f^iObb=kDPFDlpcy~iYIS=2$$-+x6e*AG_fU9jR=w}bAj+Ai?_s<=WIsid+AJvVHYk|BeyO}&wm|dz z(#C?yiv!L)$f@0Y5%8;7u(?KQ!x`pD`7EmDeCi0HJ)i4%&*gFhb^Op0|91N73{QnD zJOICYsnagqJ#ngB9H8X1HXr)`UNyBr0DPrR^Tof_MJ?soy4GSwyIhUlZ@oUCmi`qOu+?`*Dx| z)87|Mpv;FOKp+r~adkSBgOWY;UF00|gCr~ZXRlX&`1J0nF}GQdedxtMMKj};A(ehR zLy=pwmB_O{)LL08*4%tM(R1w@75*(byL*V%lOp_{R8hdZZl$N(3%Bz;-BT>k%yla0^jU*cN4o}BUC}kB!DO+4?M2#= zm+o13rgt9`Bf_4ZFvk2kv{&kT&!)(>QjRCpJ0KTV_+xeHpTJV1=(oM#I&|ruAN+_M zWEZRFpfKzzL`Eo!l0nV(7Vt}81@ z>PnYrtXr=r5T1ynw@U}*jN&T3!l1>8e%5H1@xHB*st4tO6*B}z)o_`r3gD~y{BL3@ zPzf?rQ)(8jPTr^T#ed1-QT#3eZeJhUB^Z&2KH{ukkIz)x4KR)#AHF+uTkg{m^Gg13 zY~>AYJ@P%ad{6Z-WME2=$>0JBlT%NpXxD4*w>sa~M=N1&UcNn+2%7MOXYTaG783E; z`(5>J9w}LakoREOpYcrWM9}e!dbPyj3+|IWF63jY5HC^xo99KXX4^>|4D17EROy>3 z+lqo+P59Ykft9#c9c7+sdLtePIx4#h+Q;gJdz$$BlS8 zT8={<)5%YBthrhUB?@;;8Q(ExuKCjejOVD(xQakXs-cqlO~j!?+^IrC8bcM>3V;eC zHdetO9hSUai6RM0tab9Cc)1SoectfOK|##J)27(un4#kS_rlPF3)ZOndMuz5w2#2N z>Duua=DmI~QqabmCYmX{s)WJCS{C*y)W8E1()=Di37J5Ar_5p6+9?SBPYm0fGHe;~!?A!u#!z}R+AJ1Xy9SQIR!dp^$6#j)ALw;Pmie$2X&~N{< zS8>ztvVAB&#l`KEa$sA*?@6OQ;OP^1r!6!zYyX>oKN|i{^P8^LTlEA6!=sCCm#0$o zVVbVEI~P)MS(>3ohBzt}a|Ip~FN?6<}r zPKNfwES3>MdsQ6x&AG%8JX9M{{{*W(9-Ef%tKbs9*%ovBT&*^7;7YDEF-99Y&mC+W zTXrp=6XrMw9<)HD4#Tl z<>21lmU8m0aJa2}$4X^uf2N~(3LAY}W*#5`Y2#OJZ?)2~e7J2GmUcPd_>~2rK+^d=j*bXn(^6O(ELcPNl0y48?X9$X zER@-FAIpe+Gn*>+e(wy)m0wS2!#9{9~(yJ=DKU zE3K_*JMRqQq_y5yYnYzkUz)|Vwz2x^!D!3^oTfn<)FmNVEqZP6C&Ax2o*UK_?BG1r z)sVUKF!WS#KdQ-XF0}0YC=C=CeU`|F8)=ZzG0|02=pzEO4!F|Ofd%x1O9W!kf4~FE zh(jIK&nUpevq3Er>a?|i2$fuGqP#mi(Bk!(;_cCP%eLWZSuOuY8A;&HF+^Cc4vZ-% z0*|8ME)UgC&FQ!9Q&k%L7g$eR+d@m4m7gS{oo&`E62nEHXrGUeTM{2(P>0=rc58VA zBFd-3>Kq6~R&D6x);AYIB^0k*jFK`gJMJRye$64|z*lt~&3F0gE7XC*v$nEN)CD}Hr(A5oo6?9b zK2u)v-J|D4KK6#jSgx1xquQSP-5bv}ggZe-P7u2I9)t@l5?mjf&dbC&&!-VTdEC;G zOMCfvazwUUmXKS0lgMn{`m-}I@bj0)%rP53!@sgXk-rjUhK!BA_W9i5`5q>Yt=Pex z^Ikl(d&!CzXtt#4*^g!l(yWH(2nb{CtLF^8k~XC9*$JK6BSj;R?`P6wAD;M?L-5SC z!vhv05ezPW9cPTdF*G<3fDU6ng-ag|GdY?h%ZU$%Xs?#HS}mKFwzo+$Yijno7FlSI zUsL5(L_r1`4`B`AuaM8Jj*0MPhmd)nmbfrlzF_@uHN@A!E_joeZ%-RmqEh$y{-H-rgyN9(xEt{E2t)|k!k&$z<9FdRe{(uDJN~%-}l|l zo8A0%yH|}2&TqUl=8@K#ZuVxR`KM**iWmwH)F{7Scp&*i!*ZIbfL+!Uy4BC5qBmn#_x2U%ebr@a9B(Wuxe-{KGsG;1pDqOqGSL%*-G)^}}_ zrk9b+w)^}c*it0N9R-FB>962i2e$-P=7h-t+vTSbp$c8DYe0 zs7>hnXEJPO@r+;Z((duFzWbcfQ>hGBa`fOUZD2toVNgn-C&<_3>mKiMjvGSD@{}&~ zr!4o&eh3Vf_P3BqRCxE~tO*!r<6uVDM^0%<7Miup-#?a7osdX~S|9YC%Z)nIc{C~I zpyIF1j7eqX4;0!&ykMcY*`YScPPbDLsbtzQFaNnAnw%J*+y7QJC)ITOg7frwG;aG$ z7si~MEbPxGtJ~g1-6x!#<%WwE1{6Q`OC4diptnBFMl{n$d5yY8$@%NMx0AjtK$(!hG9orj5-X^Axtdpuil~-W}aYW)Ydx@@H(PD0G zzZ|ocObkq|?q4UoqHVEhdR?v*gFg6!Il7K1qBi$)Yt5$D$?jd6)Z=lJ92)`+3xqGB z&wcC5qq56mUrvvFoC<^9H=OtHJAg^H=zDT2kY67e8Ql4gm^$n%3>|?cqaU=4cAyS4 z9lvN$G-aeI)-R~AhTN`!jV2*Wh${4Jvo`&OmWbJ<9hcK`$Wdo3Z!qQ_!h?TVn0W1? zBR;Uqb?z45qUivu7pY=dL}8`fvLe6xx4tFPuFp4hPP`KrAvLTPlU;7bePL*AnVByG z|I2-c>=chW_C5jZ2AZ(tmzBceL|lWs!#57)lI&aETVg%6J~yv zEgD$j%m}3To{yKxFJ35+{uUf@_3ci5; zr^N)&kyy`IEZLhG*w|~Mmz3`HG_mpYEpE@@Tk3B&C?2Rm0$Mu6T(NhsC28IV-E>q9 z?Uq+P+%w!R^OU7sFU99TP9u$s#>!33L;1_yVDMzip14x_pCd9?(U!KSQ5)kJ3?Tx0 zqa@hNH7R`>{E^L9Z;zkv5nrl2zUQ;Qn6_t8?1vWe@&T;LK>2`RNN`WftzL!@Ss(Q@ za=^V?s~FGfw9rUJCgaQ`q}9DzF`F@~KDP3Ynnp;Fdoh8n$#M><8e(Zk0L71g`@w|nz@JC|aA0ih;0 zJEass~29ED8w{MhHHsYQqL!JOAlA@q_WPlyhaRuVz5y!@V4=uBL;=uN zyEJfiD)U(^^IlC%8qg>YJ~n*dsD>>eF`cv$FVkf>@8?*@eQK-I;6LxuoA2*}aBKda z&T@|kTpM|&h<*D5E`KEsi&jMd7&1Y)iXpJ>0CuYA-=a5;{&u>jLrM_`G@=_4pXudH zi?i0jLWr$m;ps-t=xs!hWWCEzn(g6e2lcmJggj|l(>}xJYkBVzS+~dx-5=P;`Q1~V z%39jIrRi8Aap?O-ZML4LQ>~_Q^{7xA-%XS) zMGA$6NrUNv56k7L=CC{T4-?;HW{XJr!%RPZGl9V(gI!3|aQiQ^lhL|-)3Bh+zKoy_ zv6P8cwPO{w=KVwZWdq!Rgyf=+RO_`J(_RJ7!!q`Db2fKQl1u!M*h09oPn60lYujex zdY7lJC2uBGc4_zkn@S291ph3)1K-kucv9)ODnh9 z>J_9un@HEK8Uwk$x%(*JW}`I~G^%%K+tGCQ`}$=#Imp)5-B{9}783UB^JiS$KPzh< zn~qySU|<{B-CijtjALF}>CUUZjYR$ABVDG~8)n7nV$D#E$J!?yi0ofR!>d}0<(DP? zdgm;O*o7aazmfIh-l3#qni`-!P`Md6n28q3PUh|L!{54VPVesS7hbJt+V3o;dtDs# zUrqKWJzrwidn(16=?QvLK=!8>OKE1Di@tce zexTUasPu3;8||SCaT1*`)vkXnAUU?k!iaHEr(n)bpU(R&=?oM1dCq!(TrabBRl0?q z+wl@__RlNj=rW2Q)fg5@NLKsLc9TY=&itpn$Xc5~X8*$D0bAu*kun32pveH|3a=(@ z!pUT>v`p0W(<$FX{=9b%OP=+*dBxXt$*Bk=iTpB`1X0A%-Ly--bXMxj^e>RZogW(vt;+scI8#>POCD}M?5@~&q*cy zx6;yk#$FUBB2RG|sU@>?TBQ`}NWoeB1~Pp66d}@9;=+1%=6d9*(RjfD_3inT(c0{F z;vb^I8FT&Y!e*;$yN7|Nv-f?9B}31HYCRAN_rOWhUOV;(8p@E3hG8CJrN?N^nKpId zl%ckJ{0UW3`G!R<=7ro=8c5MHkFQ@ux0>#W%3nO^#$Sa)w)S=E@A9oQFPWa?miV97 z|K80MNv|%63HnM`_Y360^3A8--*yD=72^k{&dTD=!2k66OLZ-k$Rbg`=G@j7zwBw2 zAo~pYoPHQ?S&*BU_9^{(7_wMUs?DA2(AMX`5s?J8!fZG3`v2&@S10eSB1MU{fLg8A zsJyLgaV<;ITHPmTy+B=V_(PJR5ohWb8%)Tl!Fz&aYe7$GG|kIZUzsXW;&m?n%TY)h zjLnMyRU^55X~S;eL7WM>yjM*_$iC zm|$0+_NUxE>m$C=`g|j1P51I>3(8`E;0Y-Zp;BkP3In#2>Gs7^yZCh=3^B;lWHL0Y^x79)BDf%pGZi*^9vUoCuJgP_cjG8CdR&9e z&dYC}@4oJ|I~;?3dFTd<5+s0R43g~R8e17x#B4RDLLPzJd)JA4vl|+DbM(luJEDG= zs(x~raG-I`6ZkwQ`VipoVet_gTRMG!V^dvL0^P4ZKl9CZDuLq~do29;r!P9jID(l@ zTax3uD6EGgNnsNhSTc>(ShI)eql>>;@FxXw^aeTL#f(bz&}{247o@&5Am(rHMDH$- z73*Phe;y?uyyr~j-$kbX&DA@WB+r;41$8ic1J7PmE#5txbxa-=Uwrkq+VwAwC$!J3 z8FF1RsUVlKW2@s6jQJAV+?65L8nMZJQq8Jz zWt4Dkm1g>^&J|B>^RO(tHLWhF;dh6t*>|ey)hz$5?EXiUuhslMrIPc;*942DjHrA( zoz^Nn2gS`I5gSlJ$Rk{+lvj?*93V0FbWvIzT5w2?7LF4{Ts)f}=k3FghKi1Qiz1i| z40M-OuI!ZVlcl)&cW3fQy!ZQTv2vd1dRorRjJT#g*qPJhb*Fowh0aQ?bwa4L*{<_{ zx=qHpJPv|Nvn3Xt;hKT!ijAWGim({YZ_QGWH4e8`bXz%WK^LCM0I80)3`2kLt z2DDX8@1tw?y(G(~=aMXgQN0;@Y4OjxCHh5??6L@7lxFJW{R9S>U-oopoh@2_BGU=1 z+#h*e2?)BHnMrxVjRZ@>Yqiag&UkJ$AxDmyR6RACg3+YJ9uC)<_w1$<`TyVrieBTD zyHK(WF77qQz+ayZ$@5BlmHsjDoSQXTc&*PH*diRaGe>)`OU+TH)$92fqB@?xSce@$LmWM2DS2W_y*L+NxQHc911 z*m;p3vK^+oO-2eoYW~LiS0+#K@>{juM_9m$HMX*~yI0e5aePSsYUrxwsNO+D!sc)F zbWZL16E&K4+l8+0*!d*)i9ZEqmG1{x&zR)-OM24w?iYld`OZ*m7Z8neyH`}^d{{l5 z$YS&s7|G7<0l`rg#T93pkScdg#7UbPc+VG}MQN_xoI0!R*}mserBbW&7Oy0}&B{aE z|3hftJ=|+s{b@&O0xt3UZa4W-Nk#Ol1LD)Q<-dDlY2XMy@!5p!Iqb>SE4=})g6HAw z+q5&9soIsfvX~V}vc<%?YEyyvIms%IRh1MDdF<<2#;Wu@g_#<74&LN<@9rZo`d%vO zKs_B|v*#91nvbPVI3dDv4P(D&w7KW@&jRw?HSz2glcLP9j{Q!&- zJ64X3pQ0dSOWIo$PDYT>aRu{Z53cu=emt13^yy>!gL{#F9d-C;IBSo6Q zN(^<}W5gPL%?W+Fm<$b*T9&DhoNBrZ^X}#rT!t?nb}TwZ->S*Cm;(_A!(LEh@MsDq*lL(6WQ@M->{p4#+(=Yx4`FL4R9!37G@+cFBGLeDW z5&3PZF_>GI0S!^LOUKhZlf%QOOZc%rdmAUFf8Oz+#{L|x&ELfvmooiz>0`@S$Fwk@ zpbfbWQQP{ioj8Ybk?d>Hs2ImH9du49@rq7NFea0J@mpeKJY-x-h4(YJdLGBgeQMH& z+3KH)b}dH7TbB>F`=8&M&;L6=_LOWql7ZTAv(Vx*!^2OYAMmtLNNXrg<^4%V6AxqB zOfbJ8C}*iL>@YZ76oH6@thc&>NO~|UV(7|UjnB5ZmLy+%W5OMh^(*eTH1JRsCq0wk zA5yt`JUkSr{2>PwhMvkuc5it+5EaW<8=5H7$--z7w3D6VEn71!i`jX(D+CzAo%w1z z9uxUVWe|QuH>cC@!xRNtd6uQjizTHKdlxQK`{(50=i-aW1c)b-rp6yuj{|1K(Non9 z$L?ygCko!KdXDf&r)l2xl2?C-acr%AlXx|(j*C7vc(QA#Vy;d8qz0#e6mSM@+I+n# z>Y!v+Df>A8FBV!``AV=C&-nqKvCa~OO1osBHk@oJ0M*1V4_pCAL?wleq zwGuHHjoMZXDCJv-Q#|kEN@x;R_6Y=}I>@h^*tPha0&cZEqW0C~$r{)#8ZVoSQa(fO z|G{c|C2c#9angQXzG|TnM;8vfd6x}=nA3o`>6a~7O*dnX|XPE>JHQn?&xA!mZJxuM{f1Ws(7>kZp z;c|lmx1-K-Jj(0W@aJn3&q77xFQu#gJwJooeEZ72az0;d(@uIU@xg4DlIB50$oX3P*_%g8owtVGqJi)Cc76Uh?$Mms3L>6FmV_`A9`@US zv+HZ4hntrer*I@p>Wyb)Ey-xYPII!wgJhm?A)eZbweH;mEeMu(5%v&BF`lV45Nfel zR?=)Z7udf_<+lB004_2D$PgJRadhzoD_-rfxQaekpK^g{=#b{InwYufExvZsXTM|z z{E-WSG-%FBH+ax6b=4^LBT~H=1ee;e+OYH5%#*X80)!~P;!Gs6SBa(>Y$nDcMhVLzE;XI`b@U>Qk`^S5g z)J{B~_SmdMis%=cvz}#O_WbWNPumaReftf>B|UEwUbp#!0lgLIMiG&a)&S*{2Q7&&xni3^LW|OV({;q)>x+%Iup|fzaS(dNnN;Dj$T87Ux-v%CbK6);A3>4hQdcTeH z)l43KRFT8#j%IFV9SvG}6aD&-`Zd~4A6t(=8uZ=1ytOmmOp`-Msv9Z3?%G>6I`cT4 z>Q@f>EDp^>ghEdc1_XcN-tT4n7dL{BOPz93N;O)Nok*Wj42UqSRB>^eE{yTXOBTY~ zrl-d{ZMb_|hFpuzd`ipQpa+spzR{9CA5L8gEQ(ANI96h*HNmCv+1-|2X?@*3W{s)i zKY@wB@cBpszv#5R1-w|2fFl69VfsOPp4={eI}o>r$@5f33=%AbmdOws$E|nSFd%O*t>1rqT@Zpj`X6_^~2TW9l?&= zeu*T|HSGOhO|_>m!LB6E=9~{@HHP@(i+lYqOM2O#s-bj}iBq*N6` zh)W_|KIU4?@%~YuAc_2__OQQw%uQ2hYcAyk0{yo?(EjtmQ28s4Ai-<{*j9kN<|Rt- zC7E!S*hR{PpVxDambqjKT|W5ZQuRmgxGJNw9&e+n=`n5>YXXS-J--${e`h_9LWWYg z89shSE}TvGY0?Nv@J~FS@95JK_qbB*d8+YqFQ_=>`&a?^^$X}meyY#I`@#;I< z<_{;>aQPMxG`CyZ`AqXlex8+X_mN}R;nCgrwXRoXC}Gzg^Qn|&T679HYD!S_no}`3 zG_PV#$S%XiyGi>Z44ya2qC-=(@%!5C=D^Tw% z!2UA0C#>SiaF7An_cZb>Gp(nje{eR|1kvAROnxUD;Yv#Z4IBwAZ5XfHRqPHFWximn zVbs%sl$2NnRqQ}f)`|m0C4B5O5?Iml&*N1yh==X~;T;P#fYn5~Bx4#U-XlPbCJjQo z6xr@`I5;$YeQUjXB{JpjE)gy4twi4LZ}t~yNv0T@x-J~p)j`5K$4g=&NKN7dUM~XZiC_6<_ zlAV>5%p@a}h>HHt>;8Oy{~qqgec$5!e!s5kT<1K`^PKBE#k20DbQF}`=A#KLyq++= z!LoYrjb(h;Re_f;oUd;V%y;_8T=1u5#F}yH_Z|P~AhjSTNGhoMtd`lc$XUu}ob>R{ zdm~#e`K;mjNK**?K=uFi0-Tr>(tP;GZYz6K zLf>oM4A*R7vH=>5j<#V{`xJ;fTvVyqtXH#P;0RsVrW$)WHwR%KALk{XQ`h%wKf1W& z_Q}8MX7qHDeWXcpRfS)uNvxx(JblgWBB5Bm$G(fs5Eb}3So74dVzTY84?7NR)m^7L z;nyp)Zd{tqTFuuP)>NK&(eHQv`BfjIPMRREH}!6{I>?H5EHl0;c4VNOJ0$2NsngU%lSU>Sn4LCu8}`8TzX)bIH%9U5&l7 zbI<8<5%Xm+ot}Msl5srN>G9)#YE&mATSJ9a1jRTSeN7cO z7hnFJ|9*Wdbuvr99eS%xA)8zy67KKnDn%IP*y>5yfYNsIDLhOcgk%EbFW3g5WwXnQxFj!R=Mhk5ys zsMWJX44K08N&}mOkq;N-t}WbG=q%*Zl#BjoOzqh+qq`~M_(;cQp&e(XJ$9Q?FzQLY zRjhIUwK1QvIQ}c;g?q}H2VLHgNr^!w1t77lHYzOW9c;aG`kINTh^ZpuRA`;O-G%|U zAt@h^2+yluZKXm5m=zcqGknF)ifp{3KF`GUP+-eRs-t5WZl|PTGCewG?3DzUYzyzs zR#*k@sM!8n?0fa_p1euMWOb^y4=lJwsLD%CmK5a#sAq>AdE+I%IvR_|*xy<=$bk1S zo?=?aSe(w2D;Yf^nqbTM_1fuS_M4OnN}PIq4^m_|=yPb!@~)%f{hNwUKd z{YdUZlNbd(q|RwohqX^T3ZGKxH_w?GbOp7x!MVks5 zZ=ma;TUeN-IRD%Dy(CkG|GLS(o^~_yNy|M(^t0)m`7RT`LzFWoGWs>Bg{@XN4Ud^b z^E-G5eX`Y!5}9JmSia5gL)WaKz$sBDAH1V1O}wjy|1Z_^pT-V1KdLN+*c^TLK%3_0 zA3Eg%zv=@NwkKU(pTvbXIWxHkRVVT(W$s@yn!j-TUp;&pG@D4F0-SNR?e4+W2ZAXY z?V}exS-JL`P^(TjG6nA}>k%1KPj8pJs=En_y+n^3*LbITTQcoD1SsEoiKRwN3V763 z$M9V(Ry$hoW8E%Jjei&JhROAH$yEfN+p|H|H0P}9-lipii)Qz!uh5DU37g+PC$C|a z3+97i0!?SPsxa$*QE9*x{+0)!I&YuG@Htw%zV}1Cx?fB*`M$g8p$MkYFK?$c^QLW& z=)LY3t6NZhykq2*7Ow2^iRvGAPsKJ*ZRPH8Ila`zM)!PPUl;mMvQtl#+Jw= z#D$GICer9+*t;hPj%8+hWIgYGmr}di!61sGDs5!a<|3!*`c%H|lFJn9cI|TKzDUPF z!ICnE@ptw;dHQANhSJ~}ZbAM-cYFTHrjifu&kIFuiJ+6%{*#qWG1ifNaxT8E!02{- zP2YYEX;a0A(_f4^j&}=RrLsBd-|4G#ruy8g_Rr!-bs4FZeL(e9XfAi} zV887)u`6~*UnB}pv0vJ$NyVJ^mU->a2A;7amiM0;Fw5MHYYO`;`gpLENmDWJX2NTR zHMgYB&JsIqb}8pqCrZB2W9Pp<9=@dp4IU;*qaG z31R_a2ENsT;vQ1nt+TJZA4+?q$zIERVlMLjMxx%SVl8<;@wPW>E^MP-6*wpR>|1_Z zUG{4!*%@?@ew|+3B{KUILlH6Pe0;I*)C82KlrtGJ#lq`d4d45TrM9r~&~3jG8LU)L zq&b>j&O@ub4)9UNSMv6;0y<`iukE*Od)SQZR=s;@zVpA0xS7h+^emt1sP5mbjdzqj z^qODgQEla93YXAa-<0;FUtzsX_0cwUt_MuZ8~v)i-OiKI?khf90vbovMGTBB|Is|puZLbh9-20$m0y~q822G}RpH+VBS z7#`C_V1jWFl3;z>W59RgWamf~XCBl0EXO5aFuS^NWCvd_U;XZD8h#?51=gnrdEqwvJhX7#q0SWW_q#d~M}sM< z$i&Asj3g&rF%otNOpH`}xA*Q1sd1`v&-TR$vxr=*)}XvE=q}&(rZY=4a>?j=_FVS@ zN29E--DNDQ7?sP-LoM;E&ij78_gwZ%zAJoUqe{rAV(d4`q_(N*w0LvnpJ$xkN|qGm zYEQ5{3|F?v34u|HJ0wbcjGO7da6f>-qKUy#k0MpnZqpIo%jJ&Yi$)#mHJ;NZD}w|SvJgeRfqh0UN zRRlG*MwHIvESc{-O|ky+VsT5Pi9~S8KHJH64?E22YA^ngdA=ngD)mH{hSbNNm6hzg z)R8JiRmv6mom1w|Bs-~#Q1+-_O$OhHsFrP2q;ht8!@TF=Eeys=n&9yFQ=rYq% z=W4Uk*N%Oall^?((l|F%HZW-8rrgpFq!VKp?XQ+l6R2|Y{)_A_Ot}V81Fa>tHzS!X zjw;K!2~&Q}-{m+z)n6~}&=eH$ba=pC<|#w_*>z{atKAa#@~;Xg%`>ZSs%WFV&Xw22 z{-FF?b78tNQ?YqR+eg7Xr@mslB+b?mce$3J-kkJXe6HadKKug;jn$TBnmn!Q+QG%q z`{h4$nHSp+URic}bcQF(Vq=s^Pi9e8XMX-_L3zlgQ^uQKF~58<@om4Dbo3qv5An9V z_AlE%?Yl6pv6I8*E#uCq>8^75ITE5!q4!#zw+0p;yS1NrQ~3J6s41?(h)Dt~sjnyS z9a=B+q*U>1-f%H*SLL$ZRiexY#VBixc1;rxH$TY|BAKriy~oa)!O3H;Db4j>^ExWz zQv>qzUjp7U%Ou6BDjTrI#ri4J%y%{)5FPvAQx{^RyHPRZKBUTt4hbN9>>VrLFvz{# z@4htjA(H><`V?&`&!6_J_6;WYyV+&b7)|K*=}GD}&b8bj(r}c&yGQ65rY8-as8lz+{+@MgP3IuDkd3>o zPV}^Xo|3kA=(bz6Y2VCo;}hbDWL*63UvqPvCCqy?)i&SR-)hme@3wQr{q!6OR;7QV zjh!kdnBThCHve`On#kR|WXc8I21?SJ3mFw0lgg6!%sSaS4yDG1nChztByn&^%8M*d zhr#_Tp18cpDm$qVQL(99)GI7CI3vJ{Q7WiM(Z{297mXYD`gG+^%%k0p34vJlwm2cf zi(ir)j#y?H)B)5Sm+}x5Vu~;*`SG-6sh?{6?;^Z+&6&1P4Edjj-iCz7sERm%vz$m7 zbW_OK!=GRsPG$*|2suZuZH9ZvPJS$;HJR8ytrES{u}0KTLQ$Pkp{B2>ak%%PeN_Oe z7uO@6_Le<4u{Ez$T`Bddb!q-p5v4ab9~wV@s8)VQ<(;x4vyt=G@tsFQUQcDV_jU7& zv6MWNj*T+$JKfWKJX5vs9A6Bx)bXmk3tGEP*Eg)Kv@mXTlnVaiOw;K?Bkf2n`Z`t4 z?an2p=vAukl0C;Z$NINlp}x+VqE=j?S|%GhyOoYgxvhO_A^S?_1L9lrnRx{Yd-07yufHRCEJZ{5L*Eav)D6rWlD&&1D)EXNde_r6 zIKOrXV3cg*c#@=9(qv}yn}c)pHSlx~&0<6GMt`dyZBP$-7ct#xg6MZ+&?Fh@^Vjyqy@zAbN(iTUHRk2ID75i&ZC7Mj1URpMA%@vb#3G{MBC28<8th~?LYWEYe@ zNV5ZGi0zPZ=R!K~rT%>`xj!c+(dmm;j;!)K+f#>C8F;^Y-kSL*EV%LOfw*6WhTnpJ zhb9T>IFvq6>U{OmU2YxY%@^_h?yDP5?(gk;BfEH%Ve+5Wo+y9m>thRjE6OLu1p5?I z+e`(hct*J%+J|YFo-_~)ziXh-V9Vd@%HN+AaIWk^b;}a%6PXJB;KNO^a&ON5lc8fz z;;OlRx`zGpmJ)^Vx-OmA%Q}{Uf8L*S|Gn+ej&F5xw@kUWYnE(_lQ^nqnzt&`GqYYw z_G)`aclN@Lc+y17yjcQ##~KEvV?&$yk5W zO1IS92m>BlGuMHA5Bi0R985JO%=KqB1Uh{(5iQj!~C z^g!rE?-ogi?nsNa1DS%ca>qV@;>h08<&yU`)A~gwr;P7sY7BDY#Bfic`SS(_21Hi^ zqY~{Qf70(_(tzo&Hm|7R7t~LlOx!#awjiij(pleoY;#zWee5w4S1l)}D_;^MIqz8| z(EKu1PfJ+r9pP2GcuD8Sp{fLmzUT*aojdo8yr$7ORD6CZNOptTyLHW<4hN{x>dfVI zu8+MN{?>!X`6s;*O}$HgUHg6sy&UP_M#V>to0uK!la(LH3Es6SiM4-x%eo}ism8}e zR5NsO>X}M=3zQgx#{S8hB~cV!r>HrWu5&b9?yc#-yD!4;L`|n6-!eUanXfQBr6hGb z=$(4ucJ1yhohj3D)2lr_6Z)LJ=??wAX=2HD;OGEYp2S)6NHqR#f5+&)>NC)dkrY(j@v~7S97d)fz<%ACsmuIL7M6UI-Y+$5xnS?%IDgIwfgy@couU z>F+zOsNcEZi$*F>siUjMWQY7^8OT`tg_s(mU!NW`Mmcy1eQJ&0BB_>4mlS(T>b3sA zH?b;JO4^ixoH(c1Q;C~=Op6dB#V;!X8!OcXLV%7YkQJ9u%7 z4il?iz`xF8I=J_(U=FY?+HjCrNl)Akc-j8anL6Ma$#ZEf#~?L>_PxWr@y|Xmk@w`B z8yye)!2Cr?xY{&~OUXHw6jXd}q>C@@kk@rGz7oL$lf`2AXf$ITyRvAA?kcqe82M?v0 z%RL$Sdo_y5`R##kjER!xYD{8#*|<(`D~Z3~ep=V_?BjUYFe<#{k+_J8SwKIJ5rOKSu$tSgg!MhzPX^*$J zd`a+gougNDUh5Xro!T>2+&f$lul@7uqD@O2Rp8teujJkrU$ZS^;_t5=E7;^hlfQ}c z+C5j+MT)Ht9#S1CsJJeCmTP}|n!rgx!Q}M^Bd1=x!BOif=`;9QzqN&f!~f2q7N@sw zRDL^${p@8JDG)K?Ohk)H2DG=J%wGN8mQ8q;nd{}l_N~VyaQ6E(q)gvD67H8&>Gd_R z)oIpLTd&z9KgZYOwfDuX6{WpQS>23zceGc1FA-e0{C&*E{+AreN*3jP3Yr2wIp;l^ zj@&6tSu>-%72v$eG;8>*ugHg0{Y%)wqyQZI$+KEZwv4*5Gnaf>Ua0dT0P6Aw$|>;+ zu2u|7@K6YU?r<*O@A+8+`&tj*(vD%DM=bfccNg?M9C=)1x$<>7|G=fPJ(K+hTZ^`( zpw+eE?dzh=KL*`7f8MSQ^iM4 z>I~xrQ8!T+#jbQ6pOUM`vj&a*{L3oerIeb^Sriy2DDB=-n=!mQqo|QhPbal$@{~#H zlgZ^kAssnE=BS387^m`EPWsPFW`-ORd*_ZzQ$~DiU%H<1X)-;oT1Q)5kEtqCOkkav zsoLIa#U}WwKOr(!aO-<#bN`TwD!=LetiN=3e$|cFxC`wnni+fhy)Hoi(-g?-t4+Xk&<0I*2|f{V|-&{sIlMl$t}APwS*Ac+bp+_ zuX6CsNG{5`8^`ncR9(+ZExyI?<8Qs2E@Nq3)UWD)3+JIH4JpS`43qXfHL?-Bd{zY4Ch| z+x2I37(5IoUIG~u-R;>Y9|^_SmbiDz%P90a^0&y#4Bbw$;qbp1?eD@Lh8XF-TP#D~ zS$Jaf!0>CPS*iEUy}z6f?P+$j3)8Df0K0Xo)@=O`Q}*NZw3@)-e%jDAJM}yO)^L69 z`MnAdPS880~Tk???3QsQ(tD+SDhpDD!5Y8>&@ZGpDeq za=(h9b^E}ILW3}}&HiX^xBl}0|KCgBTAr^h?yZ0Ma?WLUT7q4sb+xve0A5{-M;QG8cG$B>A6wfxTXp$9eu?6=SIQnfk{xz-bnfu-7Vbw44@T0D= zX8qvvtak_3$@a^?G&Ov<>Ep%C1@~iI%RIXWFQnKQDD+wQH};ctqX#LJW(Pt#K{S$UL>{jU%Ig*NLtkx+^}_X~ISp8E2*aTk#(CPe`vrBERUJ@ zY7wkrg60*XxaHAy@c84V2Qk)kXzvLkD!P!0l=^Yv{j1 z{4EoQ7J_0$?>DKOb1-Hu5v_DvYF*kJalGzf9w+-DhpG3>lrGVCl|+W75_>hA$BcM2 z9lvo_%dWipMFl;ngt>Q{#Hfqxv?@2Ld{fd-Ha)K3Sen-%B)w0dfRn*gb861^)3e1t z2@eM*eK}oOeV)FElgf?Z+tDSVwVEV9Z=yAn;vJAK_5L4k{#9+g-Taz#r?pDhd*Y?d0dvEeW8mNy>NsI%|M=21&oXm2hgxlQ2dm6_yRez9 zs+tDsw+j~2em@ia^kBPB$z3-E2TQ>R3K{!2>N=ptNW_yA6<>Th<*Id}?^C;0&_mnu zw3ce8fAalSec1!FzGhG-$<*=cIZPpY%E!_m_1^Dix{qqsXiTQ_uar1fP(;nPdr~(9 zHRZ(E>2JzNLRKeESxja+Y>6h3C&R&oVLZ zk}N7YJ0HEc9eZYc(F3bo(7XTK;1PIkmHi)?_ls4`tlLycb%eEWO@9+(^Rgp9!{?v$ znZ~L9b6*cioAtV6kL_{^{OiWrwsy7h_3<~gr@Azp|DA5HySFAQ;eK?U8eH{{^N^yc zKL0J;q=2X{Ld5Am8zeP9=&BN>aom=`97a~B!>|-yjQJ;X>xIVIk<=BK6plilE=0T= zck{>%L4AFF2=f%b5%QQLX~MA-nOjh>Aa^!qCh)_}XKu>9hKPa+{w^#u)O{*|Qc1AZ z_t$I`bat+r(r;9%+6&Bj2KAGe!=Z{FMn^d<6hZV57&(B#34Psf3($K4yY zLiS=9xakX0o|Ge(VmsvjL_*TDJx#6!SewWh-MV!vZttlydH>)0tm`*ISvRs@^c@%T zMkPELeYiblS3oT#3~%ztb6ktzFZ0H|CJ0iHCTVO-KDZG0n2XwK4!zViF;BUum4!ep zDvM*PdpdY<@2_vKV&-x}l~Fo>@6);3mcJ_trd96Tcz&@T=TS+l@?8|h51cpa#{l#s zd4E}Go{Jk$lsfl5AcC!ANILSr{g8`}RLksco}fo2h=ps%N*scy5;iCkVgVYlDo{tn z#Qou@gM;Z1kd$esO1QC(6B5W z`vHp6|JGJ_iHC7fx4VD)Al2C?L>;6T4sRE87OJC1pk{pJ`zxl_)Wh4a)y4eVOS9`B z>{!6oiPam7LP)P3wV z9h%U`Cht=RaZ$TrpVm{5y!geHbz62yM*{imDm0mf)lxo!tV`OZFKlWzcUfjJmsTG3 z{V6CfFK?7@&_I*jau&L{Dk>_ZI;G!}eZ%kP*E&2|NSl48ex{n6>9u0Ba%Up$1Tien zwZE6-S3Wagc=9ueP>(MOD#K;&L9SxB<89Tp2D=RDC0rwuc zeUi=5y=V3LTh9aI2uOE5J;Lv1C2aEW4Yaetk8qwSwz7j-99AR*I_Ezi2IjFiWlTs% zGJhUG^5T5mCNjz%W1kseUN1U2ZsO1pQP^M_CL$_tQqU`AxBY)Rc;pNusgC^qnn^qe z*eea&4-COJIhd`7^oN@N1*CB)EcSmrh4VPC!_#Hlyo%EOxWd1cZKwPfS%@xiZUis$ zTL@ZRgbopClKrLjZJuUtWigaCe>!lm2s0YUj-0T%6oT3M%$E*F$5nx#^w!oIc!qhv zT~9BZ17X&HllUHEgdv?{i-&_&=rt@I6#N=6NQs=(KfmT2U_nHW!P${h=N^U6^#iiDT~E9mNLAZg7W5JywK8{a@u_S}7mH)wXE9*qw6KXXiQ5g738H*_!tO*pnVoBcu_6CL;FvJ6+ZWpd$M7q*e{2BQK*Htu;~NnnT*9*WC>av?C4MPklyPoDJ;5 z=z&p_)5r3YqQr?OCho{RE4i2I+EsY6&S#gr;D+9yfyMXK$B5`?62nMg0f|g39#_Jt zi|?mz&223UnOMHgGAF~k(r261cl*D>SvXl@OGEJ1WbQpReP(DP)uC*uh42Y|clV{a z53bTWDKd2!hFto*_U{jEObOkXCv? zu(HGEt#f55dp)!YLeu7SQN*2XXt@MumtBGFc#3clR1xfCN~P+;f2t z%p-3Co$>YS*QeC3el!(jHLG-s>UXt=4eMyroS%6wfzF7RnD9$ZDA2+A=JS>#kk}A4 zuZYB{F9}%nrMP?WoDP=a>-)!JavM6K?!zJL9g2syRoHdpVhjTF`YHBooX~o?AZ5$Sb#N#%5LG1iGgNmJAa+7p2HOc z^-eMTS6|y-oOq|6JO(&HAppDz!-}1poNXBDO4QCk0b7H^*>yb3Z!fkB^XDX>$pw8# z({g7PB0RIup)di+z$Gk9l-3AjSo?l6@bg{Hsp)C$+XBZy7it!r9jx-;J-owr_{BQB zZX?P!=uo9f_Z)A=3+lrQpmKN=*J!bh?OtE<|IY)sV{UaW!USmrJC-VIyioxmig*!( z??rD3vJ6nE!9mslJpDhH7xik(TLT-YL_Yh`EP`K>>brX_=+|MtB~b)DqP+eWH;Kiy zGZqngJ!S_Eq0MD1_S;a~zqMZqh}CUK#GF2q(ig*+I}h+3{r>errpCcMYqp2zNhI~J0v+jh&hqKoIvn>Q5cfDy>O zZoGg0ex?zb2v`ZrMQO^6lZ=vzz*WJ|L@lafAe{VtrnF-}B-eltgBk5{#7MLDbYC$O zJNwk+D4e1OjvmokgamSUz*Z%99*GS`^PW7EZcf;2h56#Z)d-Y8iCnktc6Gtvo*pA& z#l6nZ4-ykk&7R0Fr$_x6(dqM#@s?MOjbr%J^KE->T-Al!5VnH!T@#dGPS*HJK}D-> zXy_hd@msv&>SRs%waBHqz=)$&_4nIOIOsS1HF%@xKr0c}A*=9*L_eqvi%>w|4K7j% z7K}6qQWp$6cWUE9P;c4dy|(*5+`O@Fa~m22)@`8L2jRThl`lL0+v5i~0>GDK5E>RN z*ybxD6+zZ%;@5EqhV6MM%z_FnpC-UIB!J*??@5kqY}TDq0ZDKl-;tESv{>%UieM-= zF%%}Iv98sDZS;I-hEh-!KUrOGoU*$n6whOV)z8s!9Yq0a@9* z+pR9HgQOIWC*Gb8jDX#j)})i7tmI^3B}$+3@bYdhzX=TlSk!TV6)(9!G?svLYsI3< zoS)f&T_9#G>Ck@q@kt7))S}GD&d$!BBFki`sy{F(oGM{%|6h2UmA)`*LFx=va9_2{ zqnq(e^c%P1Fz*6B`t{$@=2O*w4~1Rgkcd|g;;Ks0xN5HaZQ#l68@qf%(Qxq{2qWUw zn}${dK{hF8W(;P{04pdyGz4K1A~ZeGo|=jE#Wy}3S$cnl1R@M2eB#P#jaE}Qwh>q} znQFf$?P5LupYL&zkz1ff)C{>lk`C-V=mvEL4BS_RMLP99U_pM6ZqpF1^Qjm!%#npb zWLnto^;aMO8OR~$>XPX1Ez1d|we~czyIxC|btHqdAAWI_c&7gf zybTN+>*z@C0yD0|!vE*OXh%Lb-3F_Eo6O2XnnRXGi}}|26aO7^O>dxl=sv3fo*>t& zrWR(FB%0R-^D57vx&{!nc>CsM;!ls_y!4Q zz~T{>S_6LH7ZzHqwlnwm*rJg125GM8^8h*MIW^js688*nrj9Kqx}Yq=MpebDQ{L4x zr*qB>ZAGmZgYS9%=MXSNtR93G1}so=@$m(tbL_KL?#}Jo)xEvTH1hwKew;{>I73D1 zM+n)TzkkpnA1TKBISlDGmCXF-2^66$t(e>0`N;a{f9bxGyQIX1vS36E?5nh3cs(}A zveqqY*aB!W16@*tDnzWRI{O?L_6vBf(|{drA16MMDmDz|@#PgyGK#;;e-+r2*gl>| zGH~tkgA>KGU8|R_;VuJa;1i|iCbIdZ4%=8GLU8H<8IxzqDiM{=w+x4+xI}%~5+lIJ zhmi~Gq&VlkNvfSWb0**NsWf}k>v22g;FMQe^x(|9Fs8@}Dt`z3Uff3-)rhd@1d$gU zkN+4JnIJCaw{V9t7-k6@`$>G=D+a`Yy>|rHr}Kvbnj_3}9P$iC(&Tp_K40%5u;hK@ zb8sxAC%dv;W9D7qPUw(8Q2yiDKhN$Uzb|p>769B+L_t>jSG*)YQR9V#=pF4}6KBy> z_rBKuaPq-(_6uLyT!(5?fBy95;o))YFX6}XWg8cm9B_UAwy@FG+Hh)cjfIKnsG{PP zkIf=+yGZgBr0468dGttd0iGx`;+k7q`S$ILLDH5`m2I>!gRj6Kn-;Ymf-t}T?`i(? z+!T(Q8G^JOM;5jK_z=ZlGP4s!0a|WJ$=fh@B6fywOG8KJGri`5FpFM~Z&Fcp*bS_` zI-Jf5Dx{XR&!GSWMY)$*nt_N9;w}bOI+FyYT5-o$l?XSIA5;+umb3U=Cm~82EDG4e!mj zHGUUBj(zJ|U0GfxloDFL>v4^#9~1!gP=rOu<6Lg1Bec1A#l@pBWQJl&w4WrMfo&;= zm`eMP!Gl4;`w*Gc4NfDAdyg}caca{KYf?X?0f?#T;dQRTWjBu)&@V0 z=8gW3Z(P1O8W}OeELie={-b@~NCT9Ralp7j)nR_FW}F<L0!E$St)LSbgg4MHwLe}t_YWQ%p~ktd z=-ZP2Pzxy*d3DG&qJP8@9tRQDYek-@cp&N0x+m}N_@PWl;qUwgL^Yq4fEr88F@+ET z;4QsgclRtV=m3V50wn!&n5!LoAU>oJ{k+|VH{DgKhePHK<i+G9y4@%m%o<`hww)DY;VE*wRch}a|$c3iLLEi}Er;=#ufX5Tq)N&B-qe|JX zj9d#e6+Ii9rmZdCKTK?e6Mj87n1-KX{qzq7hD;bz_~&=dca zKg_UAdx?TYIkb5MDG|A7Np=FBMTk?K+FIa#W@f%|0V@<5QOp&=w>-8JvK0<)0(H^- zX}l_Ix8xKadp*|5#p;aL4$9=l0+B|Jpjw97qNpKu^YTu3{5^5hOsIih`i#Tu|gs321SX-$B^ zC;Q99bWJP!K5|lUGOYemF7H}x!b8C0A;Hhc<6`IJw44!aYaa5e+UFC76zP_GWEI?W5YB6Ge zxP8@~e}A6;BU~RrQLf0;EdI68nvX_B@2Rw{uuZ*A>Ui9>d&nyzJu!x8a zZl83^5Jcbi_Y1N7iw02hnd*5mwyPGJBv|i2xB+M+q)Ing>R& zWI$1__+(|i9S7T~!KIAjk2|-CPppDQdaEsZZ$;3-0BNhkg&$X;uZnj}Rc9x5@P4CX>46yZDy zbN*O)ZVy_4!8Dpp3Mx}`GxJgEZ6-Avs%^VkQE<>fbs#>PclKJ7tbWm*9qBXIjM7lDVRws2}gm1OADXAS?(q5)Cph(Bd0k4dkCN3#aOxJqMzT` zw{MmY1%HEhXJlZ|FEjH7=FZB^J!5C53hn_1m`_kJ6nZgW*{-N%>d$iy?B2OE`6;W0 zp`l?!d5>HmCM9-u5?xW`Cw<;Hc>z>^xlG9{|g6vz^N-3I97yH6)r2tcAMVj*yLnwclUiD7{L}bTY0d4 zK^!D}i34trV`h`-q>N%+WEDyspi{2hxpSw>V^*`ckBNgL5(PQLm2j3PC8ecohdlW( zelsSaidF)(4E(;TYA0@$AoDtAV#2z0>((;I&LBJ^`Ya&Pt`}len4Fq=+|_kPOhlst z6{hF^*36B#LjDzU)jX+j8}YHSvI?&pm%dQ4DUV*+=m^%15Gr65jCCoTnBLf?oP=oH~ z1$;(H0ERE^sV>qDx`OZjm7+2JqOY$oXSPb2nHb6P5fvvQ_ST+;pA7%}sJz?`y+o)( z>zIuSs}!1`_IDEo_-~~n@Jf)JJV2Lmk1UM5rZwfz?Pt%9q@<)cf{~08*k!&n|{rUrL13Rt&P-?F;qL##) zOM}WJN=^Se?$$W&^h9lK@Y$t@7EgXeUmK`D0&*&%&&n?fR=x1SrC5kFHxb?dk9baB zq!xzxf=Gpt8W@I*T|)7JrDebSup;6QAu);CU`PmR2-_Nd7@cR2x{eZ0XP!PU${^H= z0Ri&JP0t|PL6w&D^~nGG>vc?k2|L`d#6(9!Q`gX-I&wk(w}qvphmQ~czJ2o*l@njS zASsT&zpA$R#7(GIxP!^jxhH>IO--$H)s7_}$36T7WC+wGxQM@Y;r z#=i9^qI&?tgM^^jw#@;d0>mMP6y%}4{`kHllvUrod#9ytV&UoOsjvU@3y+hlt0+#k z>NlN-g@yT6HNVeBWMNs5STp(g`GpMWH(6G>L*ZQS=R)$i+Ay<1d(a)KebBA_`}c2L z=$>Hu(RENkC)WonhXS+_J^|cM5EG~;m0UE->;q3t@QGVYLc;YscebAjSm8(c*bs+> zMaRa52Yp+ru;7V%p-cEP@+D*0trXVQ*3ZD# zBX*Nw4szNeZ$5oxfU4o)x@#OV?pKhTF#^JYyhjwlpz#!BN$@hqfTO-IEt$v`^*6P* zi#tE|!*vXs!t*~O{w&jRj7+KTde+<(H#?-60 ziuiEk0P+~1by9{0Mk8{;`v0AlD2_w1a8(EznIt^Y5k*c=4mhFtF`Q|^dUqotHVX*} z{dzV;D$*p>Z4C>q5)ry`_o?P>0ixMRa#|##T^=el;}a7LfHz)XKu`fWmk{y@@e6-W z)?PjY1ZOPUzF`FvBk`9gJ>(#}&}v*aj9lx;uK_QZi>9{4W|OLWUs3q(uROOK#^ zFzvNE#VBl0cm`HI1JqZ^XywLP2bTQ!cotv*5i>d8F|DrpmVkf&#{+lwx243!20eXx z7~lva$8~av79N<)IHz4O|80%7`z3Jil#HA}biRa3E^*O(!H@JvFEz-^t@-)+C9Buy z?fGyy5v(!UE?AI0_aaIUsPM5y4GlEahitZspt0VXMd93z9Gw~p+%0>b+hTbUbAMTb zIUo!+0ZN^6!gF76x0OU5c%*K4h3v5-^wsWU2{e1wuaZdRf=oKQ#~ zypM@M9ON9NF9CR7m{UEJ)(LPLsoQ)JrJjq63nF2geTs>ZvjK(F3Di%BwUU)WaV1IL zQHkiS6Bq_oPz})_KH5v2yj|eGH4Lgf>8-njq8M*Y(=u^UsLK3S*+Y}qBIKyx?9vW% zisu^%gYy>>V-BIOCn>}FQ>TW^O+G^`ouC_xsWyG$nQgi|b2GQ-QDv}Bc zP~a#1Gw^xOo;{0;=GAh9(?+5B2k;`fWGT!!Q6#^%e1=ur;teQ-xac38%SD<0uNUAg zsiETu$&R6@cS2T20?af>@|);v0H(eOsyjZKuUQXH0kD_<$dMFe(;leL?3a}E@bcn? zg`x?s6Vv%o(Bv)%YSD0W6UPO+3l^%r&sDon6=B%1L&L=6-Puze?d{R8Ua7dAJ=?Ny zmXCAsbE~ zZ*~5>G=4F1m)u>z%2QZ6BS#Px#NaDGiECsV5c(_a@()eQSQ?Mb@DiE8=iP{nWInN} zzKs$gwUF=~y}rd7jFDF3lUxw)F?a7a<0fu~cbq|I@hOF+*-tHCI$GT_|9}P~9VXbm zY<@TX%)aSE@M!u<2e2AgrkR-;YFb)h;ZU@eu&S%8XOEe%W4|n_y~9Acx??{-TIpzL z2v$E=%dB%eFjzusl-c>V(EMQS>XJD&4cWf%TqUxA(P|VcuYmL9xZR|ps7Qev{AFET zhNDY3dRtOa4;JJ!q}IPmx?|AI5)Vp7m{T=W3yKhzBH=*6pbU?UWDvwvhTLqx<1h_A z4chS^RaA&i7%2}VFe|nlH#1{jw{9Kj6o$2DkA*UZM@Q$NL_kguehV$x@zLJ8SFc_r z4MoVrg*dZ~P(|tjjzwQ_6LbL6y;D94yN2y#W_|^3BMU3yg96$4xk1Yw*JD@*r^Z^6%fHUNl^?O?|1Yx7+^H&+TR6T~Bw zCA%+6lL>}sT`{JlY{UoeTUA{hn~-2K9R|-mk8T7B+c)&tV{v!u*)+a9^OZ#<6J^rq;NXoo zTaM?&{8U#WA|n1vPv1Yj22vL75g}%UIaoweRv_z%qmqQeL9&p{qMl-e+|N>>{ovM}tkx>~xHa=5JL& zMFoT{FHR2OyKomYQjHh9Iia$>C%Z!MSw^R(9(ea?*)7kH;HvENufv1Q&EW(W!+Q-b zJchVgrC9V})!s>r^oyVycv@98P$A=cW~8UPo2lH)(tggAnp;!}W)6^!6mQ5gStmCW z2|dbsrUD7n+*+S9j^1$WyiW;o_tntQf8N84u+KmnGXqZyk(3&-hcIn(`#d$(4A*KG zX_&|a9})q28SJVu7^0J<_E7|B(4j;??(So+Nv9cX<2@q7B(#JP3+>JMF6$wZlV&4w zxP}7$9G{fAz%S;Zs>#RC|JbEZoYZsh#4_mlqCi~F!N!ppy@<8uuco}TE8ua>1tNiy zZ-CZ|YhIXM^o8_r)y3~TsCJLT9lb)N!W1ENL54*|k#E@A+q25Oe*OA7nDOl{<87jt1Y1SgK;X-AS^M=Z%Ip1i3#>S!iLKhkYxr4agT;XQjc;SX%; zHM)BWh(pOn+KUR`OVT#nS9}kgM&1GJ9FQ`K!y70Y2hP>52!Nf8uWt$#RHIG*VnawK zB%ve*?%lhWIGW`jEqmDxx^a-nMd(#Ak!|-+lJk>Bm(;WD)HAA&NiKQ*TQlyBTp9`4 z9vAI(;>Nb!0tXJnq1(bKOhgNd7J}gO7#!btifWNN)*pXh0J!^+G+Q zHrRYD4#n`dZ*5o|{NVUqUMVTm+=|>0AI-xv!32ZO34#CKLUpwBOiF6%xu>x}F+cuA z(${wZCJawcn?LMb{swo3S8oM}(IS*Yf4>B&g#6xT^XtJI7?5Dp1wae9sUYL^C9>>3 z>;04{&cg|)4c)$TXA>gpCd380$IyW+<@bIi3`ioNp<#U z(7l3uuRC37L-v`tBvgYIUhh0NkAKkhW%I5uEE)X+U~I@Wa>(p;F`gK>U0Ny$&L9UF zF9m#b32+)Z2KpaaZ!pX`rc}_2mWtc=6Q004)pNUrQU*!@PpmF~R|T`WmAUMr_}u88 zE4Obm>FDU7t}|csOIt^$cC0oF4AKnROpDqlE%!Gp?X!oZ;Bu0Q{V_ zEYuqNkis~z(-9YdHb$wv#B;K+9bP%!hUp_U@D4YL-fEr#XD5jaw)6t=8cAS>G*$BGI02)}^ z!KL%5IyahZN0F#aprCwbbtRbI&IT(?`g*{N2$4|iP#;V~sMQpOK&y&XdS!07Hc|q< zjGm{z=pr&k(svNauU7Km3*x+Lkz71HLBOek$bFBZI#Fm=ejnZ!uy>t^h)6cCTnzYG zGNFdp2$mopo847pd6<-FuW#ji;GM!quDPJ2nb?>o(7evYfpk*DJ{zW6#EmCqfpULPsIq+8*N%-epk_GO;2 zu+bHh!g?)yWxm$RtT!vH*D0veGL#5!MQlZ`i|qToy$=!jYFRO@!{dC@bW_-3FcDl6bT3W}BAxzvO4V{2y7GPy} z{a@!hk|p@&O%4tYWUE?Rk8yBvl6EIuxy86HkLCfipC(GVu%cNx1G}o#D0GVe$*r8t zNcyt*iv*29`Jq3HRKpQAz*p?qyZ0u{ffV&f?OsD8v_WT9F#pK4u(%^~`A?|2e$Zu2 zu)TS=vvbH@BTG3%%WgdrW#&@eKI_rtt2KE>!t9jgIq82_p8rWaM)^x9%Q*j0cfLoD zlY3d$uxoZ*lUYQ3wau>26XWBz5)&`>^=82dViPfIDPq@!v2cU!+wUAM5?-92kLgh6 zZdI%pd{b^A*XQ{&Yn)A^<6z9Wze5i9%#7#RoU7MH9QUuz-PSJ@UN+5M-@VxJw*ID7 zxmHMxN!0CfDhCm3j)`}rFc&D z2oZXVgynY+lm3e>B!NTm=rxX{yQilCjtwjCkRuQ8kfMFdOMjk=ox2Dfj&f4a7<`uRTU#Wu>e>0f&4uKVO6>Z)Sb|{?SNbj|mm(Y!`_{3ShdWD~J#+QB_tPYXirK=6WsX~WGlE9*^Bp7ADBnBw8a)5DA=NoQ&cP)UqsJvFn(X7; zhY$a$Xy{BXj<|XAx!t|4r-cGy&kAAU=(wdE%Ao(!w2{w#!b^hpW`XI-j^hG74@!hC z4rS{l!K?ywX$-8AFQoe_v+L?{|%FCJk1@wDUA+!SCXa8KkWvrVwz9`ujyF4Qypyg- zTGpcYLL|eecoxNjjo__LpXN$SOM7TusY8~w_TQQxaY7)FL|#R9tsr!#`D6Qd_SffobaKaDbyhDg1uDHYj7XiCe#a zWW9e<(a0B@JzDZ3tfPGozwXT@qkz<+IPWw1CkjkPoHJj(G%*@S7KGkOv(a$RJ8^NZK(6+~Btfo@!5Gm?NYb=Um?iqTQE-^!1oYW`GdFin$PG@? z8Vqt2u14OwB6#LYbSJv&X6_6F;<0wzM((KI{RRy3HA z+_WJO6%aPxto#AovET^-CcZD9y`)6$y`MHWG`b!%Q8VyfA}1Wi?8ljQUY5h#Gk`0L z!fY0{Lf|oJ+X9q5Asbyqiqq)b)JE;WwA$OLj!T>JE!yI72cRAG*7#_HS=^4&hV5MX z^R03PX?|Svf+CVlmFEGg$RbHC6jySLCpGTJ0>5yO-Xsv+#HWJPMI*>@6m7^>AThwW ziJY%%gysJGqh&`FrAru!w@B9N1|w05y?y%Hc3=QQ7NAD-TnPN z&+#1p|9#xw+GJ1oG!h#x47SCV@CZ>$Bn(J{7$0|1JvBW zf3!09`|)!gkE^RCU(N&;>xvF)Yw$M~*;#K-eCbqv>R?V$(Ve2NR_bb8d-HeA?iC3T zKLL!<3KAbQ4_bSj1e*1L?xO&-M^OkFgbMC&OcHX}QJJ~Qh}5Hc-wy?$Ta{iaAV4H^GgfIRNp$LTPHuQSzj_d zcibqaJ?D`J8d?@IDHU0tjnDZ0%780!7<@vMsF0!-NCT}?8 zEVA?F+{DAXA3xuCPFMd|KaG~t9@{)xbMdixX<5`itT@$(;cb}sI8;lSLE=wE@l2+PQ@TUc12ge%@?F}&5RbR}wK z6wx%#05FhV3f+bk5)A|@R;NyB5-9UqQHKK|q!8XYF6|}neoOz5=oe;|%}r{?H0FK% zMYRi4lU9e+xGZkfIQXunUjfM?3N6m^w~sH3F_V9I{u~*=;^HxTd;5+NWL})p%Brf7 zp&{R(AkC5%CnqP&LDwHE6kk_y;O%yr<*bj+3L+bIIbGR9f>NkiucyXb4H)&eBEl3` zRFGQ&$oC&kE&<{unL1%60wNYc1Dkc9bkqlaw|tfPG3u0zN$<#yS(9GL-Ubbw6v^GF z0U~w=YGcYYHi5W5ie?4;SJV0HGKK)YfQl0GHA0UXnv7VgQ7&k7M{e@()6&(=@0N<# zcH)UHfJ$QE04^g*(|aD&AA<=DkUuinX#mdwvz%*fAxh>2>jA+LZ4t&nTPhmu$6SSX ztjl;Iyl8PpHP0{0Y2M@Ai`-|Sk|6y7ohLX4KwNzn5M1(rF>qCR&yCWeKux#F2?}CB zKD$(X_Wb#x_Pre1O?wi9gWH59#Gb0Iy_;iXm1)q`Sx0l~%-cmxM*Vq|mdXwe;{R*c zIXf|aAY}!3xN$G8rmM;%=q4X(9UHjMt1I(W-=6tsr-H*S*?h+vL1FidE;1PeN{OL` zIz@uchf4j>+xAmLumlVN`LwW>Q;7yM(eR`si_EQ8X(0!k9*aLA1AGl*53)lnmiqk} z#2&9unGnB1a84`l*K^uyW^@1-7Rk@gZ)$0&8u|O(YacQO*hVE#!;w{CNLo7*H%rRj zm^=Njb9PK&o#=N_IquskUnFSx&r461}Pko{F^YumZrju*} z2jm@kivO|G+Q~) z_xtDenDZPht9zj>ddS46l=glyuw_GVYj9GEE^@dqkUxYtCu6wPckbvWjG6~v3HB|=3P0tTX=qj-E+80=j3Vn@PY_w#L>~CnIqHe z=O{Bj0So*eVGsS^P7pwcNeu!L1NrKp`hq8r04hu($e)sY*+!VpcVhN{;fmRPhe#Zi z&>P|5nP6sL`cPz;-NjiTzVntYE)_zGUa{B37m;PX3PutY)p1&Z%nT`sJ*h0c4kz7G z#gCyDxwIu}{qZLl7H!F^K6m!)*N3^NqUaEwbB!Vg=1QY%#l^3Fc2N%a;{;_ny5q*C`HK;V8kvv@`zJt%DGm5Fu7$ zFU}y||{0Kr914%uP9u4Ckva?Th*g;Tw?#d&?-le|_ zCor`PgJ9>1($crP(p&9EZDQKGCd(eZzQ0iDXCfL3G~Emk8UB(!@gy1Cgnuc>8j1lz zPeq>`1;md0T2P$r_R?iX`VC(Gu%vpZnS9n^(B?++E>lGbpSaAask4aknxF`S^naZ^ zpxL>(iT=lX5h83s2lMdo5a+w6%Lk4EI6N+3$pVYcxX4?E=U7Wblo&$5daR_=McWv5 z6&MAMe*9R983u?X*%yTczJ7ML5j`q1EBQ+ylOfy0x5$6jO_RLJbzTR?fYKf{TD?U& z>^ZYBg#v8&9AH=i45Ec&#|G>ei)z{YtSZmv(zGQPQ%)L^8 zBHEle(}K(beTh-X&5_}H;EXG5qVE$MsN~{ zCwM`+_{tzM6i)vKAcNB;QufiQ4uneJs02&G>rg{E9YZy8#0ZEWhDg|1z$~kmmllB| zClvgg^4@xCv~Q6*Obru7ae5;@g=LS$oWwBW%yuNHoa2ubFhkhZ@wcq3?ELAf%Oh=s z@vE-h=k~2L>HXLKdm=?hfw$J{+S=HJ_ICl@CJUAzgt5XH0F1*$>dl?E20aXROU8bt zUfzCGLv)>`Zd*fJ2ank4K&b$6JNOxnVs!W~^LRi+0H&ioVm`k4aN0z;==|~4h~aFy z9WcNOuBLoo6`^W2}m<97(x^xM1h9qw=5TwmY$yj_24F$rgC9Jj* zfvBawZZ7)!g-HCtgeSNv|K+I?=GR*vfObZR=9nXam7e~*x(@@1 zOIzalf0k8MEneZfAtEZe{@7OO?ytb8F_u= zI^R1(okQuzFV8=&-&xnJus~RH5nY#ju(d`dyQZ<`LWS|YDWt3ozkZGkB~yR?9~a;z zS&k)lZRyX7FK>jJUm<6!qHY4S%?8~sg3lhvVx>_O!hyheLfl>og&H8bPRuJXlFhi7 zETiAcz6S_qrcOL=Q9AA&MecT7OURkGb{AA5q7t6Xnw^N?-srE9S98+Ok^guAmHUR_ zt_lXPR~5HEt7gR2RR8I3%uIf8KgZ*K;+Ct_9&HA+?VubzIaBie`E8g7v`_wM;J;Sn zHxV8WKK&slr?2N+Iow^HU0jC1epugSYkZQpmoJNBs9)liMg zUJ5!RzlVvDL(^?WNy~m1sF)4$jPdyHfSbrrs*m%S}#A>9>-R z<1P(<-*Tl^+wOH=JWqXGkagVPJN@0P4gNY$*%?R=%psPBcD$^np6fU0F<{Ec^1E7+R4F9|mn zkYXx&t_Uz==cKevG%idTC{vz4^1OQ*%9?&iRK|K31~vekk?* z_CPb{T$MUqpojdh&6c^ofMO0b9iT6OO!W(Y`iAXR&#ov1X=e_%N_0*9_MYII%gh#@ zyO5+Ir%+XFwXmc6&CQH9ex>G5{d}i8AMCp={kx#o*1mdQGXIL>Sy#)Ru|It^nPPEa z?8DPBnUN1B8Cf@q46(wTHGQ_Jxw#fhMHFlu;1Zx{vUWj(0w(tS73i^!}d(AI?GPu|mU7l<3*q!f5--SD$9u07L>y)|k-P3PdPHi(wZ5)X^ zKzDJ*rB*{~m6o)w-ybe1JFt(u|NeLb;=y6GYr?1{f!~7w-Wtj&_3u7}J_SAJ=ir+%;jNwI-7~^~ zhBRygHFXZXx##YEyl~My?a;z;;bY-r?XL>d-@I|+_VJJ2sabc)`A6-q^hwv!(%}7W zeqM*ZJ!Z%=C|#p*VYNo4Eyyvfs2D*%g)%UJloDEyGd@SUN6B>r?1h-n8xx*(k0wu9 z1r^Gkdoz@}FgbJk=yaiR>DOJuEJn`qJC96o4AV44`54TjTeY#XYXG(N9(uK7APSQp zk0&@a@N^S60H{l=P$mLzZ`exQgxKEi*>UEI+`zRz z{0tRN&l>vtE3#VC4lC~rqhE2kr%1$RQe$}QvB5IVYqZ!o_k7l@OYe;Ar@6UG=ikCt ze{5t`80MSGlZ*ZIP$#KlWysrK-EabplTi(}5E1@xb<@k*D`RM?p+h0G8-n+jojQ_x zbYZCI#tXaITkr0DTQ&9bibzu2HsNC1qZI0wzQFJTz76*z&RRZ+@EzH|(yHyz!0FeS z3^*`vw|L6S=l`A9TbR5Y|0!CmxM;XOZ=Kl4(WllWiwy^E+tr9+DQ?NyZBO4-D_R?r ztgp%x5qaa2ox(eZ`uGUAzVe>4cRP0k6w6)v`-2Ni7dxN{y~oavNd$m|E^q*lvuQgt=J$;uuwio~4yE$>D`^>c7h~zfe zd+N9cE-nizt;Q2i9IT3K;(B^6{dn|8k^S-Ft3(ZJt`@o_pY(3%Y( zIkAeX{o2cw*S)`Q;98b%_z?1qa;L{3XFxilATKU5%1AG{2|?>+bV^A{*{SxbO*?-2 zzX(g2;bW*cd-CEp>dCCkxK9sTRO8ZY3T?R3Wl&zNWPY@pWBopmr#`)}*amJ5QE>|i z2>60O7znfl(4Sgrhp8yigJ{i7{nvHTICs&>tZScTao*tGcV+8tclWbPc01^=Ed7|| z>Kd9Dck-lqM)zkLzex>CR=82rb5=dmV5Y_=`$e;OKmFgfV!H2Ff9;}wyvP>6w6B3- z*)#EzVP;jjHr;45v!1{Ki8KFS?4&jwESy-G#hGG|#GOex748Cgo{&vH}TE#+}?Vmhn$E?GW{;p8lpR9UgKIPyc?ZJsO zp`15&e;qrq@Xd?_2$nM$!7c8^{lSC!|Wby0XIB7FgfR?e; z3?d>hgo#+Dt!Xmh7orv20fTjPSg};YEYMyr57#q6F)4|e<--?J8694ROo^?gW)`-x zJP2BqUS5W+b*p@?o~JfEezfh&qGFKYu05~R`L=n58<0#<694jZazW35Lj&L?(QzPcQ0XKlEE&Rl_co{iL3toIS)g* z$+*Ut*W(f#tBo#tD{%O$wDp{bk4lYt8SA>-S!ryc>b38Xwhb-A?jo`ITKUz#y{rF( zR=oW^t|h!Ne%omH)&h@G6XVo;<5;1pis;0cXCaeP^Q+cy@AS-X+N>DT- z^7Y(!%;!bWfks~l1M&Lz*2v*^h_T%+pzVm30|Elz5~~T{+OhPzMzdA+Z3g!umm4QO zdK*tI9o?oeH*#u|jK^?x_xJNg7yll+IkEQZl|dKIa&xr->kLYh)*{g*y3(ms9lH!-|ry^Wo%T2+7B9fNzH)+IW6Nrf$p7#F#xr?7z z0RmKi@6 zIY4Khxiv|x$)`tvV)=XF_WS;&wn#PZ)m}U+A9&@w!3=FP>!n{dC6g(~RvjMv!k33V zol2{v!g)V4>EAMqoe2;bQ23Fv=&;jfTe9u1m!~gQ9{-d-Ak8}P=!bmunT<&%(t>y2 z6hyD>iYj8mZIL%KtN36q`{ALw>CmZr7H+oNo#oTQ!VA9|XQZ%LeTxVD=f2wkgi`tv3+iYZR(HgQcV@3PZlT@lHu7-D*7RqC*nzX}aliffyW$Tx8qf|@E3IGt zsG|7yU2ytjoBH2lSw$8GEar!9-98i2DR#;`lQ1MKtK7r&Gx(h-#){Q22?1X^BqKuz zQzFg0*sX1WJCE4WeeyTVdrc@}mY|1Y9AG*jHzo<~A=EFZ76~aGgNmrXXAj)Vv(L+v z7VUT|FE{%&c~fxjgAk>d@tG>F{g{ZmP z)9ba%EIhwmCeumd@v%IzJ7>IYlTw?I{QkmEF4qFD+`M)p?mN$S$B^4qviFP!9rL7q zjB~0cY>Q>i{nR}FbD;!xz2kEzb6TLn{;sv*CYnLni+%Gh1&`+I>)zZPD|=#v=+^t> zH`n?r^0$6%I&x>ubw%O$wx6~UsZpyrypJzE8MH8WpHLY;wHW{Vvde?5%f1o<2O8c0 zC6Mr8b|D6s#B+-LuXC%pk=DHVE~>(zhYxgHTVFj|+P4_@UR%*AGM<4WEb05EeW}k2 z)Dm_(GL9eSU7_u+yS#Zs5*6h6{T@llQ@Z`XXE(|w`ne{4k2&dHaLhRU%@!R=&YyCo zvA-sRJF{;=?;@P3W?K5^k2i4(1RVet62=OLGwo%0CLoyus*7O>=lS#JGlgyi63QS( zU0`BLF3Rm+$;HJ5E1G6FI%pz4OwY|3Di}O0DJ#o>hD1(Yeg-Rfpd=-}YbE97#tMl! zo4a!=6C#g_wte|(=uZV)bLsCU9R1*Z*Zv;AY z$qEKBvHm}2>CID&LsF|yKFDUuxiqfCWT@dmm`N|Qz)Qodel5q;w3p^iX7ArcvATxr zFRIp`+S&5F=j-nuMFaC?x*4xKADuZ;cs%Umbm2MPH3PnR*?a2t|Dx3t|)fq;o_2t#=2~Jig^l^+7{67@3r^?RP-KKoX&!3*n3s1=qs_H4UY5XRoPgA~;uD$S0*CoZQYwa$vQm5LcCqHa3 zDmoT)fAl2FmtNJMC-Tg`kDa774{Fb`OS+t@6C=Xe-rdSy0NJ>#nPgXAkH(G5<`_*9 zn@E^eMQ+exhVcLgVRwLof#McM74$Er;3m*+r%BqD8D$&sx*_w0NnTpnk=P3m zk2zb9VVWrT^@N`^lZO^CxLr^=Cvzxq?uJ1P;cFnG-TmnqjcTuD>2~IUOoJWx7tl*5 zY`6Bqz?-aSgG+#EzDVKA40sUGb-O)K5y^aHkU{%d-mK+m4r{EQ@tH02?`F?c*qzoD zopy~`Z=xDpI`r+^5sVK=#jnX$J4MLo@X*KOo z@Tnnkr*@n41VUS0z8u9YD;;!cVgmq>A>GobqN27{L#!Zmi>Xf@p9#;e zZ>R3vrTk_EC;BkP2oA4vV>|UF3xEb8U;q-K{1a5Vyrdp48poFhWPf5poKqV|pU8PV z0X@U(!bE{8h#@{$2sVfa#8?4ugqWpg+A^)m(!b|0?0D4va*wg7sIIJQndXBmU?RCg zR^h-9AMcAkXg0H zT=Cikx(B81v0joj*lGAd&rqto==4MDt-gsLb{SO#A8;SOn~}N9AP;J~6Lp z>(JKQSW|P~YtOT2(ZlZ)Bz^X0!s!1F?k%{0c6<#2=wI)k>4viw{M&p@bk02qjY>>R zT%K0fj)VLN<8~iF);2Kd$RF80_T@`B#^-QM+DHWNM8+O;Y=h2H)$g&Cp?jRCe+(NA z%0Dxd63pTKa!7@7$05mkLs@j;B?-=yWIFyf&yLOX0(ZaD(bErOR%65G&zk3qsS-vd z)`0RDAxY*7ViiqZ$zLE@RdZ-`V(9~Y_pEd6T>sX5+X!}Ly7p}6#rbofl&{8F^4r`# zHB_3FD~Wn57)A{?2sl{SV$Ju$F*7qW4MPiO;LLmtTLS|EHiN~2xLb#zhgqX_b0_;H zsHBOzX6m&iPsb3QROU7p2ZI_;b6GCXfp*tFUF-kZf#`oDXWpf&BMvA&V=zugwj~+$P3UcFBO}N1BaX)|RI`b=bPL%@I zHkU!UJ6ApVQs*vYu}SPz!IyxO>)L}+z!NDw`n;Xk)LR16pZw#Gc_8YNJM=x;g@~0Svh~*yS=yku*bjH2JtRNw!}qs5z`xDpLg0ac?W$Td ziVWn{i>11LVo;*4;5q7?)>9D>A+wH~I~XX3;GRA4IMfNhAwMCDN->(`1)nB=gta!= zD)sxZH#(;zD@#}oP!dv;@FuoMJxY7D(Jk@581)bDA0xzdUiW(g zWA^AXT7LwvmZ0bwpK>62&85qbQo(j-}gngRw`C*T8ZxK1`RprBjdt&?apH{Qb{-sQ@b1L6%PnLIW2UbAZGdGSPX!x!}sLO}0 zE&;ZxlXAO<5P>Q^=R`S`Td@Chr+$fzIx#Laf3n`{bjTtx%+|4-HS%C#l+51w2GwNIdqxa-*WX1j%OP;!Bx37_g=T-ONzN4B_N=yQFM>0C@ zAco&xEAC>7hgJg(%?xt1-}vdDw<3m}DY*|FXRaCdu?-Hb_8p&EI-VlZQqiN%-roI& zbBpA|8vh3`iqBl6^P+{|aVH!&!q|i~imAhTPW{y(Acn&1a3d~r#>VW%lb-GA>nrWB zj)ZJE{0TsIJMwmqOMWOs6vQAN36gx3ZpqKW)x+a7N=LhtcaQrVS(*H+q3w|W(LaiV zI$wC11deFoyXAcfRX%dcIr;DY)h5ny(-$}|@x0s|u$>bUTspnsh$p{4OOacM(Q^*G z*e2xydRO|6OowH!d-uz8b96;jDp#g55j^oJ*y$wZN%K- zbW!{wxUYmP3`Zg8&9|4=iyYAva`xzdPlv1RA9RwZ+dV)bXYBT;Lbe$jkv+2FMgG_0 zuCS}7vNPPF2CXwUz7TYneahY{(9qYoWXJT2hasYzmT7ELLnqW3Nv;y1Iv_1`Lt=(1 zK9q1xsA|Ejksd5=iplK{av6AHF8Ky|9?|BZ^-$o|eQ#rQq2rFR$ewD`j&6bLPg1D< z%y({1UaDGW)LtAh0(@)LlHYT+V@bh%7Zor`*v;&Da zAY!>$O=xgT@~g*_>Qx6eI+Zsht*Siya6+!wZQr{+S7^ZGz)}J?S=C_wRjXGYfVwf| zW^i5QmBrnp$%NF0D3Qp;>hfU8`Rpk9uKeCGRe}F-J9Cx+HN5{pJQK@;!u5wbw5d|# zVe`iO+S?oHQe{(zBXTIe6Tlhu2RTvzQafC=9jLu945tN|RT)GS)5a2cBCA=7qd6E= zeD=c+b!w=DlcaWWX}38WhjOD3YX^#G7RSJs(wb?C3Y0&lCDd=bSu|>33Ll zF4W1v_||-}P(Ta|i_h&m`sML)nrmxM1t)*uP~8&P7OJr3c<`m0>-iJBT8XR;41kYp3Mqa-%wf2$8^@jI`xxVt4OWYSYpxrgRkM zG9(_osJ7FP(HR{V!4|`;WGLRo;{?+{Rov}eY0d5%?nTUjh zU?_`{=5I?2L2kW|(4f7sEY{;o`5QcggLnq0My&Yi1YQ?da1q`}*DdgK!3>4eTzFQZG3=K`Epo?)iPDY`2gT~A+QKSfmPGea>I?cs^U}|KMZfy*9EO52F_-9c3zM9 z5fg~7ZwJOOJubXa>EdJ&ugk*MV^i-d*21pFO*qf(?{By7U*2;;4srk_Y+@s*z+SRq zgV%;-`-z$J4`|Hj-zo~R7RS+_O#Y=bekA1pgblfsj(TR5aO+kU)KnT6#gur=*vP`> zC(K}-YVbiAJ+krf9eOXpR`mcHUGh~>RAh~Ns&Ypfb5_iq{P1$uphh9vrSCE))ps4* zymE8igSQHA45scY20762k0l@Q*c&4LP59%H0O7mbZ|>oEVd2IMW&u{Pu*k=75q})< z?sb5d_U^O2%3F4(c0#en#=${?2Z&}qZoENmAUWaxQpjiz*9#}mF*kP@2dn{igN=tL z6xGKwXnNhGZNx6v(e1eqR+)O{SvarI1v|qHG2;|Y<0h5jT$CQG+`>Mao> zzXZ&J0zoFeqAGvQogBP`CK<^l*`}r)l1;nCn_`Veo3*dfbPgY{GJ7R^x%!!KkgBb) z@(>g2=f@)1x#rGyNBKj>?{Ip266VKY;))EqA^gmEIBgwWki)o+HXo<*CbDOZm^%}n zXNAyXJGoaApL6)#`GVh@2KHjU(A)c1(6bUQ75_G$YPxvfK;y+Ufci?jr7#>Sqn`Xx zc;YD)U?@@Xnh!_GWX2nhHZjkhr1LUUPqp#dk|)XW`eK)pL{um*19fMCAg3IQxv&5A z@iaEwJ=3oQ*Mjj`unq0g3i{R0u+m23O9!KX$v6VKI&v8iQ*Yk7wXo@CM-qdkV84TNjR$g0{tDm(hxHlF09&z!!I-@kDa z4MpA9<@>ZizQvQ((e@4N6Q{P!W*r=1Z`(JW&gLPGKoJ;#LVJu$t|1irg=jb4q-X!KDAD(mq;M!vRt2Mn zNz;Is#E^AjHke&QIv^eu9c|VK6D7(sNEOIB5y*SG3+cbs)zw9!NdQeb1G$K3J8+U- zDXbT$XQ5lUQrXy;Z~)1*c!@s@{j4umzUa?H!^O-vgVte(k#Pe^we3)gR903NQ*A4H z3Xk1@Kf(|k5Qr(}q@4Q*BCippTm}&Kr_Rh(aI5!$=C{Y?tVYuAa}n@+!fcDg_2BSu zJHC(zgPmB0irP?6QIVIdxFAi@Ahaqs5bK4Iz9IIu;mfYaM2FD9F;97p85}E$9I!Tv zsi(fwz2s`yxLGFvPZQQhax&Y9KQyctv#+d@%SVZudlY z#djluz0rjituPxqyB}H>vZ2CF81<(C2OXY3j(NEx@l)*q13}*0R;VJ|^L$ zXW}pr%Uov&-Y*SYVbJF=(=3%j*@$1z#E&)86i{bewMq?t7BP~+8^b_NiG z5c6U7s=FNy#ehnFE-q$3(MHy#lBdLQ0V8@Wso=znO^x`EG)fr4*18^VdOP-#fa%0S zQ0;*dQ#ZaHv=Roqvz7d6$_}lE|Up)%6^=j5rQJ zs2k)at*RY!IJ*u#5j;1-p|=|XrJE!iULU-1^kr;d@VksWFQL{E?mp?z;FKo>s}aOW z0EE8ME%_O2s%N_)Hc*R}2tKrkNVEeBDu{Oixz6ZTaa?ROXg^&!Y4#jOB-`PB804^E z)B_4_2>NqdWW^k~tmCRmz$O^a0hn6Q^z`&IkaS18d*fa zT7(IaX86Z|mWVxIWUJkmD>{r4Za4%D2p7emk~8|@)fJieRy{rGui%2x~<|jsNayDkG=zw=(#zqlMuok|{iV(qX`yoA|1< z=bPp*uAlWje9k$f z;Kj?A2SEA7;42h`)X2P_FR4Y%KQd6cm=`UASbt3f!dm@mqv@F35f&j6@U!LMU4eH-xd~E zau-G!(Zn*r8BT#+p#BxKdt}H)^btgrj=mZaJGW`jAYft6g7T73AaK4KNNm>t9TMi1 zfy{U6v&2LF2+SjrvaO<0aC~RaK>ZuSO3Tndt4H+pl8k>=`BYq zfF@qj=N%&^e@H1DWVry)KOjx508;^lk>U}Mg}WGvT*y$LL*yEUVp>_BqbHJ4!2KkU zEwZ?a5O4DKhSs?7f)*SK_-7s7mnt#@es&ti(6+}LD*d`@@^0N>V$-wcy zYifjRN`AWcl`9CpwF;qqmEON({ttI2rlBLfk0AtL^iy8Udlx}~weB2!Z0%aPw6u60 zDXCwosM-(R1UV!Ih#HYGF@z6q3yL&J+*9>Ol>P=FLZAzx(#vg9!$Br4oi@;&nSzE2 z|E`;u;FORwbOD$xu$A4Uh#(2O1PgE8)rKN*9?GE2xs@(X=;yx|zO6;TYb;rX%tErG z@WEQV-?Z0`h$fd21ar*FM3a+~kqC|u0)__AcDTSE%zLEmQ&e;ws40ST14?+aM!~xW zNY4cU_yNHE1p4f8!5RIE%+8I4k|Z&JLyGUH?cpH@_2_l*5fKPkNQ?ly_JSM>ZKQlX znwZ`I$miLJH4$7j0#H?wKM7b%06aAz>TAS-?Ra|a8j_}8x;SAy5G@}%<~q!!+=PRO zVJCDL`VDM=ao@yqVZN|ND+sl+KVl#;Dp{F*9{>wnA7Xyty9i$u52oOslY7IKvZ}H z;ei)n*GU~%47+2_VhDE!CyNSlcaKmt|o9hl|8uab=<SG!ypjq=oO}#C99w^s{uGbI&XBh*U_V;jw@lE%|; zw$#(Hw7CTL+hBYS8$@UnOr)f;Q6milDj#?fGycnHjawnou|i2j*20jo2ocH}LTE|TiV(Sa6;o~I5NQG-%p8L1 zlL(Z|8ePO8Ij_Z0Jx!OhW}P}4a$y}=%7{W2A2(Dy^w$;_FsTl2aS7=|UQ+?v9oe?z z@`BU9b8Lew>+J6S902<(-0Rc-jXX$jfV=)G@GNBz?nrD4*Z~GHUKP%^!L#**|+(qDW15@R7 z1iJ;C4^gcTzVN%no2(4um=M$H*%+gQh61Vt#4gD5H=wH~m6s}`gg(m&3OszpiK_q0 z`Q;1*PeJ@Rx6j=*IC7_pDD*JY)-SY_e^>W{1xAMKC~Xd)V2DggYC&ef${DF{_6ivI zf<;wb+tgihi^ELq@pF-Q48Z3U$B&jk27h(F-Z19gVcHa zTYy|K?z5y1d!7vFt=`ZXp|;orDjmvL5*XOWr|H^pf-?|OFbL*Ec`UVO4;O|Gs0wA$UL;l6O~E9WxYTr){i(-GQ`eK%JU9{PSLfUOZ^rhojf<9lI^ znIVQg?soxg6CUq&xCXp?Q^Zk@V9UV5s|+V6vas;qNLU!3{r|O?%WneNBLs(^So`4^ z+w(OJ!GdiF$SE;W4ad$tSc$Qc<$q}0B4kGK)zKSo-n%!+jbnHaU_}6#HGvAC0!7;Y zK7Tkq|DLnGJ~$ZZfDuq&m!HkZTe%ML@!tEWuJ5r028d|5w93 z_ToeU%X}QbFdiNBlS+oFf}lOIli5O#_$CA?uLvt8In|wwaL@Q?>+o zT(RSqzw9E(6XODs<{1StUs0qMfNBSY_3_-+L;@;~nO>9jSsC7CzI{vx2 zh!QNuxkgNcT!O}rG}nj{$ALAtK&J60j_ff#iOx2gD0&Eo?f<`Y3y3864!ko+rW8JC z!xxm`!W)FW5<^(q0)Ju+6j3CugB5TCkyuLteqM04K())Xj(D-b7r=*%9q|~k{)^m{ z|9$=e@3}RKii)f}Jk1KBt@2n;0W9V^?wSn@Bk(;F-X$K43P8D0Mpe~TfzB14O;m`W zMlb>*g%a$CKUUOVnQPs1Ph@L}8EEfy2&6N3>9)v6WUeBts-CyjX{5AND~wD5FeWh0J1-vd_Z7X3w1H61##|&a57MD zz!C^Sxf!Pu9)7e+N=k`4?A6f^>tSUC(hmhlYo171(#+ zWMuqR`eKRbKng!^JVf$TaCf)~iUfd$l=&#HtPqd!&SvZ3_HqM0i-JHIHeLD7hPEw2 zhU_X#-gkLDkQutRy`#3bTj3j6PXHWT0z^v=fEuR7Rx~7Luz!c^)@BqjZmWkk!(W7e z-Kd-4Ov;CyVpjj<6hoF@!pX={2=j_Ci$=(Zxzz8;04mB}%uH9~N%y#D(cp_2QQRn` zdV$1}P~?l8T6rd9iDosuF z0Hz2*tg6k)b)3pj(UR52?VsDkWWhBjh%OdhtR96%k6e z4It6ffEF19#yTxBWBy3QB57#BzP_k7xfvS-h&L5G(TVjQE%CnZ1RY3G= zkfsrfM?-Xz<=Bv(8el^cnVkF*ZO>f}lKas_cPqR;3{5R9dR?rf^7dJ~|0e}tSuKt# zsf$J>j0?;;U%h&TrX*9t*cg_89Hbuu@&J>7m*^n_SZl-Zl(DIVNE&P3ya62~$r)@k z0+-?;*OK+<3M>+;D3&OCG~K>f$;3`P>Btgu$Drpvc*^)KHy{$eL&^?p7(m(4xE|X# zNc9^OL^dgq_^M6pbBa;J0wGC5yuhGTX731|T?&GmS=WWU-!bc4~5#h3z|S`y0?#4rl`_qpK{g3S(Tn0q9^G;&hzE;qm# z(128MC4ni~IRJ0QxSi}iK@E)tK$AlqmDeQS14BYmI1>|5r#AFrc7oCq;>AqhNqy+P}&v%3ue4GVpb+@zV)g z`M=NYiqCxvJQ&nR#4A-H^fjn=WDgY#seMri0zN{_@c|rp2Tr_XUj-!%N z+o?D3YLlgM7WPca6!`r1_5J-#o)6ifQQpl0{h)DoP)!F%wg?drfh}w z&NPG}3=kRr<;RBH7o}l@tAe76U`2X>_j)3O-=cr*$U3yqnHR_)92fDfJW@50`^nx! zlu!bI70?3*lFS!vVE^{^9=LWATVe_j25)qG@RwZ;(ImIn#nq?|zCB*xCnkvp0ATH2qTuCxp0$f*v5kJ1x0RR}}797zZgxX-NzeSWKM`iCvY)tz8{k!JX4;W?SWC)kgzv0WGcmdz+ z##kL$itINBj^K#9u^U*5AFQc104%WO3*sQuxESC9y$i0q45{N-8u;qA(pn{@r!u;l zrl`;zu*eR$1BiEI$xIrS3-n@tgGXv38rn@>FC(JL!QlWRpN^%MKhYeJCy!(4c^9_; zT@gJbD#QFoFzt94blgQ{tfioM)grp`wY7Y9hoqfN2 z4uUvwiZg|oJ}JL33#jSqOCfzdDLPz+YU$vC$sMlIRQl&xBU((*4m;xxjfPyojE+=e zPnLe4AzPXMK{Oxoik^f5VNlVJ3A$3}lEY2y=@aXIIEza>opt)@o&H#};Eo3p|z? z;g3|g@I88@xwP-`@e}kDjKqToY)wo?)YmJ~7;@bv{=s3Q3B!nuK>l zxGHEz0CtWb1%`F8^#COJe-5yYk2W4g$3j-E4OE1%8h9bF%`_Rm#g~Rfzg=^@%q;@^i~}93t0X$3cJ%e)wnQJ`~yqKAq_X=%uRXie?;A{7rnlU~Bb16n6uI0SnL6l^ABb_fa- zyxe#fF3IlUUQJ+`n3p9X>A?t?f|!FNaHygOb-@iMc_@br$uL4h-Q=BCArko$)oq_wdECWE@yNEV@>f0XjIQ(qZ<()-zY9nLJ!{>G62F1umlJtVU8i4JfM5)UzK77|)PdKBpv zJq|jhrJq7XT>?u5eli>&xl2>{CNKqmoA<_e3>d%0y9n0$9WTp|?JSbt!YCVtxq4PdSmDGX!UIpDcO z`gf&^lV+X35)q*><+x15Czn;dq-mr^m35_~e~T$vAuL`7EL{H?T|O699Mz*ISyldg zTa(rH!Jti7pCNWO%kc@++n}qwS$*^<2OR*VG~)v+DTCnVq6H^S8=0Mw08QosDBJ_h zCEBnUY~D-sZVYg0>*g2<_4UejW?6rgUaSDmclP!VJG19Fp#|txFw)m4r@gj<%l=|P;^0+$guygJ_lU= zI(3g5WC8D*0SKyCN+;Mhhk=n)hEYJoB32Piq#aY1mMVXfZ#LKdcQ|Ck6EzUo_MMKx z3Z0|mtoJ4y2SgggRTo|qzkauG53FcAUn-q}GZJRNcIG0Y6%ar!b8C?n8H{K`ak#AU z^QUSNK2n7bBBC^|IOn{Eeg#?Og9M~b-Zt`)g8P(K-Y|uH2WUf@H9%;a9yz|W+D?=Q=usr82y7*r5gf?Ql>~8+Y=1l^$ta;7B|HQdDK9I7M;aMv zTavT{psAKF?TVIe>BT-|V!n>|EijsjW2Dqh{{}@RzLkAUa76lBH=6HwzhnYm{&bf` z>B)m78#z{FF`O_qCS5(A&HdHUkz&{aIP&MVNTUnRJn;b=F$$ogj%-IuPr5B&E)uhs z6hT+QcejtAauCBef?gAf!T*9VzFZBeI-)yMH8w`=K#nvDRNQ0+06?&=4nWOgjmIE< z;)!=jU^{M=;Eo+7Ve8mck&;Z#HU_2cyF84gTI3FH$QFDsip=mF8i(UkOU3m5H1I=w zjxgFHw?TlKiP9+t)m@sa7u*FmDVV77>geYwt-|OZN>Fb33nw>-2?a!4CTrP^a`Xh2 z+oFWYO7;7k3?&Ng$NsMsz(yxiP3x_|D=@HV=vSu6dOHF)eNu1YQXaiN(G=~753{6w z9M1wR$LFH2gBVo@V;GT+4s>nxktkub{V6Jv2D}9(H*lv3c^Oj#WyGfr^elhk0!yVw z06-*wb~AFfJ`&{>X$MJ*i@nx>FlL`MUr^WIjy^u<>popZ3C{&CWp#bnJ=ej5oe;Wf zF+8+Zu=zqNW~?Puoc(Z4mWLcXGBU73Qfd@pqy;RLx~#bEAUmMO7|y4Q@4xWP!`OHR)AA9tn07H# z*2XTFilJq}vU*?@=zY-M#9}}>t9JAnZPT?^I0^f(gh$^5`1L3a`dK7D1`4U0&`{bZ z2S+fxJxB8$@tCxCY(FHY_3nPGI{M$p34(fw+?4{ZKyFmS+;XBjzJZ$fYgXzc6Jp8|7aM$t>jQu&_# z&Pg)Vk2H43gH6 z28>u|=EOl}8A->bw%$A95yoBb!*ZE3E_^$6-t*Y>H%{+WZ8X;5lQk{x8A2?s(X`R{ z{o-bmXAx|JOoCC7A#&&6ryAS&_Wr3`%Vnc^!PS*`f{^Ja#Rn6b;jsr_BC<`XHJ2Mx z^z{Yuvf}-M2L3jt8x2xQc`xBlD&xHr_r^TcU*nGLSL>_4#<&1XKWP8;>ngH8!Z$wQ zV%v$foSY^}=e`%QoO5mbdPZGmSbUmX2d$obWK>LE$pQ)FG-2X>NMm#-cI)fs21f1ZTv_xjIQ{QM1Mb< zyPr;5>h-O%B6);!u4G%DW7^!(-?j=mCC$iRdf#`|)y{fb#-v|u^trsSJ8lw88&>(2 z#_2)1uEyYxPfv933XWJ-)%TUo2(!#M{Xy)gN&Amjlb@5H*rxVgT9YiULdWm%;0<$D z$tJNHS(Z`h&c`07^^7-b?%pRh!MW?2_p1wqEA&47c9O3!{kpeYac%goM+IZ@pM;;Z zKm6o^y*G5b9J`hArP3;Hq$e!v%7ML)`}yVRvOg0blBV3yv;L>2w9fN)^+++F9P4-W zwtRU}I^hRX&y;+y0*x<4cU;T2YC$n$=#Z^8SeK9L1ns6C9b2!=sjh-%y`$>VdBhuk zH(p9sQ03~!VHOWHKD^o~sJ2b0B}aM3wZ%gV>b!CZ^sD8mRSWwQmhx50y;m|XbstFe zuM&QyCI#wmdbLS_p>NVKDLfGfp)qN9kj38~sOYzYtNmwx-{@0)qs>Q6BF-5_*cwHg zi~0Xhb(K+BMoX6#P*RW%=|;Lsx}~L+?(Pl&>F(|Z0qK^M?(S}+8@|K6>;CxGV)2Xj z<$2CIGiT49Ju}gZ=T-lS}z@GFa>z-Fa&}7*aQ9s0-ib!sXlKt?-N0_|lb4e6AdMir3z zZa6ru%y!%E0jdlyy!!WzSiGbE(zcIX);!VsI#pgp##w2qBCeFtAvx?)3bH7l5+Dg% z^>D)`Q;DqJg&?+Cr2NuXR>sCu`nY>Jj$t8_6sbeno2z$~62M=$owR{SC=9D(dxHd1 zEErw0)c8>0AMg@mcBgmey~VlqQGXjkrq8j{uc()otDjj?f;OolD50JQffvb#r-)a* zQ`_H<&VS#Fudj%Bu!wlHh*(X5h|@^+=3qylXr~^-p1yWz7P>$`bI_YM%P!#bjQ&*p z>B{2K@gIuJ6Eop-iE^ME#v09;O*G6N452({o7B&Jd~3pv>a;@uI>KAsy?WYSo@|TtA@_1=f|j?4yQaW%8lC>tr+vq=_#D$p(!2sX=Ebo!y)XM4z{7?|ryBf!-8I*i?pngK^vX-UXR~1jRWVLO%SbogB#$ zxo-umJn>)_v9@)0Ixh|m9F8**qMc#m7+b^I)k4nNSFLCJs%?G@l$A*{m`NB#j&KN+ z*AGKDhkre4{0@XV!1wugeuL<<}2nCT!TsTT+?5-EBmX;Uudkp%r5-f zIWX@Og3H)kqx*M})toJT1Ca?|WFq1!!!%c1i#=-TO4M0D@N-ZV@i4VUW;X2-fWeR|Phavp|B^(D%>S85tNSe{LJs4LBxQC^ zC=6q{1j~JykC4J}EHTDbztr=KF;4vF8uqsXnNiRc{hwt_)0oSAx4B(jU|2dF+9v)L zY!ub>CsQJx*)aS<6s8@cQ`ICdHGA&3Bxnu0eH z9hNu2Ex{_jL}v`(3jYt`1E6A^fF<` zz--?4AoT13kZR!391jySvHFrTu~v{BpS%kap(^*EG7&3^Bva;3#KyU@o_~8AFs`66;?8tT%v(dLSIU z1(_Wiz*FjlX2+1d4wM1pG~=a{f6m5+HsAB#p)PIzN0>ugsf2vul6BYHMzb$nvd~zP zE|i&58z#^TRKc#Mi6jbb4Y#P{JYM`^s zfMA2^+92UkWr-^}Kgdqg5O3Zct_5wiGtkd8aM%78f2f_5J#6y?^E<$EjFg?c4O0H_ zb!Br1^l%p+Xha>7t7MKK2-{*};^?J2VM|;mWPNXv7t&J@bGU;U?f!(nm$mrC4N6Ej zz11QI)!nc$FnPO}{QO|~)FcH})Q}#v*pOY9s7gZ2xx};vCN?$dAjMSZSzRY_|9x6^ zw!!}*N4oJ)$uD{o7WrCw1b8Yil@Z@ha8&U}R17%2w;Y2$-ZhsE+TZ@P)P`AN;hQJA zAh&TN#5>~Na!OCB_&;J@t3j|~zbjHMMhDr*puN34=7%O{BTa&2cVrp2U@5}vcB$MA*M=`buO$gSh=*ruo{jtY@$bxixQPwrzAXgvpyA7rP2hUq}!k4Utz zS;ARra6n_Mb%mW?{tZgr#>u!p_j^;6(mW3{uYEQmwA#kGAVRiSn@V~C1!MR$jS`^k zf+$ycKlg_!KCr3FK`+r zd&@s22a3ZU=`Nsv2X1f(3s=xf16EC50=)YOiANe4*dUu+m2W8VmdZ9@jY{X?mipN~ zD@=ceHBwB<4`3Lz{pa*y{gAG6R^6{Az1Hnj@d)&I|G@Tbg6+KP83TnP`qLT04PB-( z50x5cT!VI92ia(7YhcgPpHNyJu@bIloQDENfbUQjQ_7x<=0=&LJ!uP)rIbFj{=4+7 zsc*(1|C|bzotDc@>o4KyZW?zxT~&@hv5rTh0^ua9JHvlibK@PkCB( z^QRUrfe9Jhg6)OxX&OzA4$`cZm9>T@Hf6*JtKZo@*W{E}%S@qnW~VfNU|aedCvmMI0LbCV7qX8V2J-TYjZTht~1OEd50kbGoF3of4_pq4*@j?mWLr0p3w{Uj9s-Jv4a3g#7+s7 zQk}sy8J6UN?uZ;T!(@-t#Pn$^kC-&#b$EKx2JxX9?7d7Q#X&IdsE9RmlCi3^SJrn} zI0we8_QzVAXd&8Ov|gTCh~%(M@dUo*AcR@{;yx%d0Nr|aXEd!m6|gvsrssf${K9E zg~YvgCCN6srt0}Sk9CSzIReKXyUxU^JR{gd1eK^p@ggO>3uKCG=#(Cph+EOAIpYzkU`nz`{ z5`U7uJs@(KL{&JgCoc9i5jilN>ak4-&?Dp?;1}lP*kKbY=()$ILN&k1PB-AdfEjy> zd!L`WXJq-{t4&j0V2L9Lrj968wB4J9goFUuXo$-L_=J9AtYTv2UFiF;EH8aQ4Rk&w zSp<4kgRG(L&8%hV>`ApkTN5I@O_7h-NJdj;dm30(vk8;WjgRPHZ@`ZZ+c{^+9vf~` zA@*K|MR%M}u|FA3ol4`J=AjkdW`P_u9dVS=l$~N-{%}46GRfeV<13|;bEO01ybWcg z^3vZ4_r=om-1J;V1nLxg$rRenw1%h-6bnk51v6OfwX^6rz5*>J&6?o|h4^ZS?PN;F zn8nw(#U-IjHxi24G>R&9rDP19Zn@0N8bZW9sQn^QR#VYNQ+3jPcnS&gI@@~I<&-np z3Sn7g0{nxYt^DGOi!Nc_O(16`-R|b7qS6_&5tB-)T$dIVLHJ&*KWm^YzUP(htRhD3 zhvy(0lxfl+Ro<3ZNPxTyp{>X&D+>cVNpK2-nTSI{(5kec8ZOu@Zy;WqN)m*X%>boJehrXTH3s=+vJPYiBP@cY*A?q^dZ4NbJ5 z(&%2I)x`L?1@Y|Cwb{p6@q~4s<*o=C4jpyHT@?&?Zi(w(xcjjwQzsKl59G;G^68|Z zgF&rw>lF$&4m6h0U4P=(9N`p_1@D)R$Oz^s_|z%1KXYT&!4&H1IaU!Awm)IdH))3B zCw`AuJfedv{6gt&&WE78$$}0Km3QEnmNw~>E~%odoYJ?S_*Ly7t1kQ?Oyjf7-9fTm zj<=g)YClXNI@3Y~Y+D5KWEY=W5g zdMw-L(nsZ2QPwxawXqmfmeJoFQq>Fd`CFe`3>MFQti_N4R>(l0rWSoYCe-d^Y?#|x1_*4zj! z`wgDexF(M>`r7)%S}{~&^}_8-Uh^gFT3WD7adXiIjg~wCgrrZCF?+E_A&wl%%E~$2 z5oTCCrOQ<(VoN#2_NZL+9O|;crBIfCA-F;NLZD?F0;v+x86&WNO^WW#e9wqbNxyMN z`fGYsj)^1#pV&EgN|t@YZQMPDj(;foCkWx}G{{G*ADo|QHolLX@(NQ$kp6{im>$Lh zoPugv7-J;Wg}nkjgZG0{Dy8U(S$FbC4%HBSU-9%!P8WxgWbcJyd!u zl0yxyBomoj>#;{_5WNZm8Nz}ZzMRKuY>;cDf0MtXVX(D#{U% z;i#O2npYZNTvrOp_AL z8^*2dKhIfkI()(sL4^U^C$^=&NkULOOj%tqHEtEUQZMcoQaAD!4$e4fvx2>xuIt(i ztJ!?X%s~nY-NShK;9#ZO&gCz28C9La=2g8kX%n%J7%FyhBD(W9G@*i#b$M!QEuo-e zi-IJtU&ubVP@nfDZ8tB+v190JvX>;YyYLPxitu5Ppu{XYY8Fz6#UcWuA3FJbXvS2O zNn}5Ta4RsQ&3TXvhFVA*(;ZtXnZQV}>~ZqV;?|^Okuwmr$NgUY_G5+^m2(n#gtf1U zmWGA~v8wowr0;MkcTk{kYe$fa^KUhUw7TyQ+90k0Inmc%g}ZHwvgGCX5WNNu zZ-8B!mKGZ(gqIrYMI0{K(J`Zg1_N0t*M&o%wDD)ZmtN|q!nS60M^xKgc>zkOFp@4d z!)u>{dBcDYY2yR=3`VJA8#*lHm>G=RNL_ciVka#u$<58Io9%5+6pIhIbkAYx?KFh4 zLfN8%iC6F`MAVJuKjId;EmP}Or#!xEF4iifsI*^wZH#h{=Vp6S@n z3|#7$o%5cpXRtGMQzJ7pYQ#^$O(<505Bay0;8exsYNf*JKZM zE=4mSv2Cjr0gd*-nA?lD14#cOmR zMD^Zxu}?mr7A%yg<)|lTyBep;o93j*uXZz2@&e zg}f*ODjOHzJAN=o^$2>G+QeADrE<};ZJE2hi1fIdDJ^?3MS$=Rih$_Y{uLV?J6OCM zW;k^_IF6T70~a)SUb%Dr%o3@f7!^rQ9&cX2*HLtqs9#s`qvB3)ht}iz{_WnSTSfcn zcQN^fjUr1z%QhleD^|+BlEJ~-t!-l}MjDaQNs_^+`HzvoN`=uW$;&0X*1`CpYJQuo zQ`^R_(czQ!u}o&UyQGcvGqSax6$EPv1x6BCbbEHMJ{jCfR5V-=IqXe@b5-*9<)Ey< zeVcQ|vRl962)bTruhbZEmw!stZns?XGpA(Q&+Z#PNU5-<4)JPBLc@0EVK3VpTsD-| zp&evi^}he8JK}~}t}1S+0vk`>1Ht>ep7^+b+0W_F3xyL!mK=^L7r3jD>t^k}>=~+u z|JQ?)-g7l#0hiy^kX!WOCVSjWDB$sVT9Nw{C43*ztgoQTV@D+RyX3H2n zo@puiowz*`(Wko}{eR|bAUO4xV8pcTxF{p}6TxY?*d9{5b?r=a zIOK?8>62YsqOGvJS|Ls8?>NClSe8F+b=_F=hHIME6_%$H)Sr`+!=vv@!Pz7+Y|#K$hMx(BGH6yo(s!n0Uu|3^g?Nq0FdYOX4OhTi_N9f>~-#s_(x7dNb zeQrur)Qh;naM!bL{VaI>%3~cTXyj7b{G#uys<6eQMdGqRSYTd#j+i(cFNZ9`)Fq^k zFR($^ba~Pj-USyu*+?tzfj=kEAJfe!-M(GkN4Rz|tGnfkLo`-v{gQND%WoW(Dk!&G z@wmyjyMEz@&GwySXDhHb@{D73WI*(yaj&=CwzmOcxX$(Wofm7PEi2dc!$GF2(SdHG z!2||{z@siqIGiNL-N7=>(%o+K(!+%2JMOE?54^4yPm-*ljl+84S9J?xkqk^vj5L%q zui#_E8G*Lzj5pDS$)h^%8HCW0`eW2x5DiyV`^xbNzueBC0yA!Q;oL7fyGGX1f@dch zodvA!Zj^>sgiEJw$HTq#Pf{5_28(lSF(hB0F}|!4y#CMZ#$N}Em9A$Q)XH%fYz=i) zjx}5w7wHlt(D7CRcXfMIgOE!(-6eWFa^4n7rtD(UE6&d&mb^@NxMEs1OfMc!e5@Mu zIjcYu{2bKW8@}PoVLVyBDoFfE?19jmnfAjlWwX9D`dYx0b3--gb%ptyKxW`%u10o)HC^NLAf3*GoPBp*l9ji8Gk&!7}3~ z?xGtCf5wV`LW zO`1r7joR;TGI-;7GQ0xtf{;k+%~1#+*4`4Yp>jNpq~0y=DY-m?kN&&=>+yX5cDQ0a zIFR`5QR&quV!o>0)R2$?B7mTL@LiqnL}oE-Kj2U~KNOvX%OOaobwa|_M`6Ujh zuEZU#5|GO7!WvhW>tLF zo#A!pCNREwh1IarPccI~RQV(c=#E^tK&Dfv8X>f(qY2`YZw~SUfiGf zct`qoH93-G@{EiK&hFMvYx0OQ_nnvUXFVe@nb%_d2b8ww6^lJ^lk0B1P>8yOkcke5 zv-2#>F@)}%bq>x+2cr|6s_@05g;hOTA*p`3&#U1PU1c)cUqFoEy~`ej2@h223)=?$ zKW%u9dHL_mT2AJs1+BuoDAR`eLm7Jxoh~l?7$a}pRn)2LN@&C$?_z!}T9~zQP;%hL z>N5nT?>n!^WD2DB|Ij=UELvnS`>nz7d|005vNQj9GlQoQe_xhwN4FAfh!Z5QC)`L% zbF-*+7?F0}h|s(0!2=f?ysbNInYEP0c|{13;Pu>2+E#NsTN~DT-}~zn?c~1E!D>y1 zGM$a$a{ku^gTX*7;}->G?EA7}#|x9+J3LZVEK(25nPjs#0-H4y?hU7!=%NLnAD){N z^6b;5uJ4|_VCkg&vcR)wAz^EhSKlyFul2t)(@z1$*l%@aal54RwzcxE1J-l87fQN4 zLa$HJ<@=d`#tbbeig$;9lU3OIM^pU>v#Vi41Vqr*eAf^Oampv2`{h4aygp}rFsV|S zhkp=8W|X?shTUy1$f$7uUYJARkxWjL-d@L((0^P)O3Y}>noyt20P*N79!Cg7c7_;p zt^H{1UUf*?3WsQ@oJ9k@PU3&?1c8`p0End{8VTxk|B%wWpLRNvttS~|)@{AmLGymt z*>uKnAC?VSQbQ0?FVI>Smh@c?m5=!S(>g7F)ob|rs@-P4-1)ogsL5qYr?B{^N56mZ zbARZm?|e-g#%CH~ivw>VbePj4V3(S$uh0C7NBKqUqiq9=d27aPeY&i?GTvm{1LN9v`n{-_0o0J*I!ajR(~=ilWJrY>wf9jq1yZ5!#$z5V)p}j zm`n!8;T7D))@9Y^-c%{dSd$~m%8W)mm1ut3NC6@xa{EsV6hgXi)R70c+vl3d{?*2C zX$o1c93&ys+Y3jI*miroRqyNQ^K{iD7rfGPb{w3DIf&qdtTTMh?Mf}*zHS=1=l2^Ibjb}cM{ z;H128hIT`Rm`77{{MB(JqbHt6T+^J1elF~YCkqC(mv(&w&iMA4DmvTj4#J}kEb|0B z7f)#@jrS)H;GLm6PA{sz&nr@_c%hu~U7d=xyPK>M8VOubHEO$mQCF1N?}UClt}@>wtdeX2pncW}v7^|74h(1m2xwBHA76(tf) z-(IG7wGmLJ-r`fp{}A|UwUR>ojPx22ohBQl&Z}EvZOccib+FP>G_izkBykl3n|5cN zHIbW6oD#zWV(2|^glyrhqvV;MBApckN#)cn*B#4C*WLE?2li0~y$ZAZPm%XBZvJOQ zo^W$li*PHCv#poUlL%jxCX+AjFFaaIi6j&Dc9a?I-1aNJHPxaQqJ$GuRTzX8G9j!v zHse|5ny*5ZJ$a!WCNLN+N3NcobI`gRjz8QP?$_t-I;>UfS5CP9LkN#pFEE%L-_kA{ zga2}L9%H23tJyqIKJ>jk-%hXRk86wD%WBoEvi;rhWP{NHGz485UnmFB^P76UGkgH* zJYzRMau$$;%g5N>k;ga;V2=R6fV!z{yMo=-r_)_}^O7Du==E*m_~zfR`04oqv@`T4 zZ(VY^=I|b(_R+-`SE|e8#eIXTjY{xbdIQLqHj~hi7rnwa-%2a=7D8DhhWj^`U-e>ddgg32DRm@QMf~yNXS0h zjpSVQb_;4e@8{_EBiOJoGj;iyFOh}(nsaOF8r-X?F?j3!Rm0|LP-FIEnYfnC_NQ%v z#IhB1gWvzw72I$Bo<9FOI5}=od+Vul?rf2(*$yd_=Ej&1H}z{F0?SFc@h=NrO8c*P zD?Y2LpD>NbWa2tE%*UaR$9QO2Zq#n1R!T?Euh*({gAoiqav< zW?OgtnQzGLNT{wtQ&y)wW9fEO{4=!^W6O8uSAg8d$lsGe-_EoxFdCbY?yp*^4?sN> zYm?QV@m(3E)!=DDSyFg>I~PpZkGlKUecHpLT?o6L&}HiQQIXJi#p?)To`Ql56;IE2 zBk3;3OgE+Eb|>{JgX)bY{BLfKHUwVY9?_?yzO^d!cdgOc99vl?D=et7UNj0!zcKDz zzODao{5F?d9z|C()xEc1M^h76wQpFME}}>@%D@)}#p;2>NR#`;-hWNYy!L%$6V=s? z$7jZ=4p2M`4R>dQ@~+#N&g+iNjVDAedXHO+<7SSJx7+wSEjLaD&o{7QFWUn}{cb_> zB5{VlKX26v0;|W|X5Hc8ct*4lIo?VMVb*c~N9d(n+hR4+B9BFR2XJoIy(`B5P%|>p-*ao#=Zy-b;EId8 zQwX7^9J6%PILj5-yyyV1I;q8X>?J4QjjvOGUaW^wIFMVWX4df~|FJ&|cm>w^z(K3r z*|p6((`RF446G`fYr2Z2hs>qNf3f&;jp-bOO;{!#?>NYtBPdSw0?34GH5;KD6{82~ zYq4+(w)ft-3KD@qg93kCW zdp%(69nEnst^d$N2K{cdZo{~@03L7L{2!_!OAVgZ;>6ub(h|H{1m@9#keQfjY)Hq} z6l>W&4*o(j9x>hg%vWzMWFBW-2X=~@fWuSwq;~#Wm`NR%SltA=ozqRR^`dfw(qk7v zI17HXMBT7S)vrCNhc%ylcx3?)ove2|&3kLWMNCX={_?zZ2>k!6uT~nt8OT9dHBCyX zk9K??!Ec;$FIRSL5<{ny|LqzEUIc~6DldZLkLxN#(Dg}gQk;mC*rsV5i@n`AUKsvT zD~q1zTk#KntAD7LZl^}BQIAtlnu3NOPD;$~EfXTxj4rj2RS;UN6k> zi;CCK^RDip^I9m#Fy!`_#{3v#gj=hgF8dm z{}50?q3!(tu$={N;9#4bK5a%n`1Fsonq(Bhd~sj|p>+q+%ili&zXjd5sPj+Pi}_aHuOm2V@j@<^${CK z052Js*h~Go(=|MoH)SnyAy;=MRQXZYQi{s)_MjV@__!v$;$YQvZm2;$W&{J)IZeC;MdtMQE@Sq{@_Bq$Hh9&(bDgX&=)sN3H8{; z@;8mzO&ks4oToM9p2!nZoZJg6Pq*8J->>F%l)_sJQYu$H->b(Yx%9Q}g|APOhG0~` zL(Z%YRbxdqLe9*#Q(qqaeplBKTHQ7M>t*L+_UH%iNB;K*im8N-yi=lc)V^w+@Jz-~ z1wSUt9QO{UnI;b+!hV&!Bxj9BEwZgqB>)5(E1oHx$p6&87bOi$i$W$NWIp9{B*2W4 zqXwrltG+%PS8?OJ(eYSC3SLj1C@gzZK<0Foucf3GdUSYW#M*GW_T6~Q{ok2|#+g!4 zx+qc0vI%|9%+O8OwpfF?Ij7_mk{D?W843L7x$5J8&#zP%#>r~eo!T<$JslfM>R_Q< zE(pLtNdBC(WkhE~V?Nid$>0LN& z&!+Nb%vlxJsSiZ-P3UhgJ$$EPP2t(?R;evdq>ghfn>|H>J8S-`b*&mN$+8nK`p5$VBe#TXK)!vbBQ}VAzVPedoW>hOZh0nu-SW5GSg)Z29&T(TPc5vlxqsqBJ`(k1+I|@Iyn;?Y%qM-*a6aN4 z1!xu!%fXpz5G&%5aNOj0X2hWV>(-C9z{HFD9M2G9Gm zgAJ8%ukABQHOR4S>H0uff)Do~l(3M^OvMuq=bH>P6!~O8Z%Zm47si2)14co9tJ_q|uDnTKW@ZWLrtnN9p zVa|ztBrS){RhQkr-U?~$k!2C-oDI%uRF)=RH-$tM9{Cwnwhi$G^bA7VX6HP3cySd` zVaoRRv#I*Wb{&~J4cLSDc^rqnuDBgRBHo4HwV(HdCBB9e)O^YvfXWuw zcrH&q4H6JwylU}|;yqx(e2C%Gc+R-nUM_{(o^JWvUiM*t z;Tv2UOK<5u@r{}8J|`zfu8jI>^WbX5#sEJUDZAT3Te%BXw#sT>Z^iZeyOpPfTkLV2 z(Mb0oVR`H1(!NJ2;(}&%@Gk*sGBKnSqJ24Z0=O5a9N))>Xl0_r-8tuL~8x2Dgx!Ne8jafXh?M zrOTi#=?oFzZFy$yt!mS4=HA&-b3%Ic%>K$erO}m^HUrC=Sy%!LK#9bK4UM&ND%vwH z>=ui78H3=CDu=-=euN1hcU;=9#8@%-BQsCk|Fi%o=-g0K$4<~uaSlgUAKz(wEQ9ye z|GpF+iw5Hhz^Z=dQ9ZVE7yYo8@ovG@lGln2fEUIaQ|?U3^dZ+wTJJOr10!^DgG&@{ z8YZFeW(dHK5>Ks4d>qEsCV$xpHcZ?HOmb1*!xGxaeg3f~{(2+)fW_T)ea4OafI-gn zFomOMPtq6Xd04u;qugH)9}qy5X_=a88u@;X5(jBUuYtX#NQz6mvn1kQ9*EY@=M}Y^ zdw^!{Nix_uyjgt>3*WV`ZH%qv@Dch^sV8=(eY>*p(rm;ZKh^Kwr)TjIO9|sXz3wGx zlqceeK-O-mdOT!I;(M|kX+OUgo4t}4y0Mup?sP;0qTsy9rAAx6oIQaYWMydtnqetq zLX&^48mh<;AIt}sYKh*)V3xGM9XKXW&5=HByS$r3z}PbN5)K&fVZpQ7`Z0Qe#WkuDgF23ZMSTQIkzEPCH zI$5=sxd|@#?@98o4sDmF8#jj$HT)@53Mu5eJ2N@b=;N-F65O}F5sk+{>fJX3=Z)fA zrp>(1ehJ5SvEmiZm&!3=+#j6n(16OPUOClNe(8pWK*ILw+t49$*}Z0^fNv{cGGhzj zWD=3uokQPH7>$DmX~Zpwz53$|SY!vc*5{-}X0w2wg*r%bQ)@5IM=PO9Vwrs-vWLY~ z3^~%7UfxmiJx(<7I?~AIi38X#b#|u+MS}qlj1BHK%c>rsII> z0~TI7hCEq4QoyBKh`-+483c-w!xk>9U9-bL1-$;BI2K|eeBfla`74q_@$ia<#(CQ) zJ_qC)yuWGGxBH>VJ{^qfCqwm}tDqC1+~6a3aM&)fQ9n(LxNfT(>_<-N<-bAsbrN*? z`DJCP?UTm&@2Xn1r8}J$oP~u`bZJ(22U&I++{S_*CzRdakx+=-(PD{Q5#43kUYeXf zLzB8R=+l$)#a5}Uc5@K54XT|Et)&g(i6M&%&(NAmuuz+1g-+@G*K<+hs4E!jU}9o! ze==nYDN`vQ$0R5n`AB#rBb8yVvJv^iYq1jnJ3_COYXb9A#*{M9ji@HRM4Rnww67p` zz|KC`cGg;{bxd|@Vol@bmHhq@vO&WB{75R`#q~zq5(%Q2y}Ynx50xQ^AWP``+BZV$ z%)a-3`w*hd#%SD#fq3YrMhSAb>frKdJIIM{foyB_L2Bja{cc_ctoCxP-dqmZJp0PF z>{A%;+51{|Ii6i8ZioF|N=AV$=^NSYKE~aD-~@iU827fjHdJHrI#&iDt0vPm>`H*X z6VTF&1BTf>1$o3oS>rd!0MM%B_rzfmS~&jqvQ`2|T5o4?&b$N?+pAMFDYiU&0c)IW z*23gDN8e1B2vb<=KWDkf`}DqD7W5*@MMfs-x~eP|m`TMelp3t-jWRIoQw@|1LVqSJ z#}OCmUH*iVI4LwL4{!2Bm2{xOgg&>Jsm=I;;@NQ+=7?=t z#{IjP{|&lFP-fdB9Y98(UeYu|N6Nq+FYn4P2i zF&LPz>6bUf{Q3;dxaMwf#$gZAvDA2)EUPGqch!Qp9x}sQKO?gL}t_uxd8WF!`=Vrx4r(AQmG+CKuw`wVT7ko`OiL z)6i*tImHeu_%fyVrC{c!!aAJJ%!=W0d#3pl1$h-n<`cFU@xER04n@g)La_%KvRJVU zq#yN+VR^ik`wO@u9s-Xz=x5Hs;xJI-nVu7Ii zCDn@0u6LQ#Mbe=wF|AkR9IFwlySZim*3cYFaz7r@yU}X|w7`XHAQ=Tz)5GpguDjKB zA&gYr8&9qYG^a=W9BwtqEF{BWmPOFMlM&5djxkjqo40B911?Q=y^Rll zsX6p_nFT-#l!f+c=k?ax=hV)mCaf4o3!RV7EAXyfgbVelQ(;42_)7B(Xo04|Xti!Q z&GE0{meX-Bpd6`adHW@e!@q+QG6%4qRggdUGmvv(G-??dk!|1jHLWKpnXNR+k1Z3; zB?5YA8;ANH<>^N@S%v^{vPUWwla$VKF-~%tyJ*LS_tgfh$L&%q-Sd`b!q6Rjxm;h~ z8=^w}NS%gsIezyiS5-zGctJ};Sanwd$m&u)cVF6TnM&=_tSyh>l;3Zs)sx zH#6lhQN#1eWe@(^YH?`xbl6~j=_NWL-GA}>ZeC4qRCKJglo&;3>$Qjf&3vu3_YnxE zmRe&8q2YpZ0=tf1>E`iHJ|60Y_C%z?M8Y$f^-C@gdh&amNCM;l30&o>*CV0nJlE3M z!B=yUVID7N`~6yT8i+?YB@|x#G5h*KNBh(W@?Jf*}UN z?@T`_>`XGHE#-m{Q|WDyD8SeNClHp&3aj6WaWNcTEI|sPF3ByrTc?UDF=0yO)T@Kj z;J9qI({hdPUjG=;r8;<8>TNXtII3Rtjd0ORd+?RCI+o{`H?k5AP#xV2{AIpbS$603 z@our+Zd|s$TK|a=q>vq|d7OG5Dg;eD&dXm1|b0OH$*+k!>h$KC=m z`{mtw_WQ*k(iiTlBY(hH5VhU@usodk1-{NpMr#2W+5G+Oz#1*oO(i%o1E597@i zk9Xo;Ne>9GDwAQ9m&9l+ZQLeZ71O_H?(Mn5$pBLSF)iiW;349D5Rthyp(qdBWF8*Y zbqO<|+^4p^|JU=K*hG4zo*4cep%dJNQL7lRQlK|s8Q;GGMxf(uf*W*wyuR+t|B;Oa z4_@Sl*S{ri&fm@)AWyojJ8B5%+N#To$h)K3U4WkvUc*k1p6cBHRRg$9uctG22q_c- zFfs-dfysX#%!$C(&J4FO97h`D-(J-u1bDO2v#pe~%MV{nMxAbN ztt@o0sa+92IrmD_YiM@8Mt#CLPYhK$#wnjk;nNaQWvc&>BZg@pJ(%&K4S)UxnDaKb z-S9Cj+J$zk8n%EIE53d}8ACTa{W`2iYDh;;@P2}2Xbu-De5Zdq7y4&GlTw}TXs#hb z;XOqlNr*oc{UIBa!*A?l>dVbP8I9ol&zdp2|HjmAMS#dF4UrNIGH)|Sc zbloA3faz5)B%i)xqcLjXSOH>DXAMs{HP)$^s13C%V~^qS-R>xVw{YwRWZr=-80hF^1XF)zu?N5UI53 zNA<2#H)HVi8J;wN-86b`)35wqj{af-^K0+-yV07QNI$i*Nyf9T?1ct7!;%TRK!cQh zpdH)R0RV$)C?sH(VE~% z1)yO4uF~tLB$4t0KUCHmGjsXYZt8?VXO!r9E_y?Qc%)bryx% zzR`1%t26>h7@;iZkm%6P$1>cJOmF_5-ZHd>v*-1QnH;La|;vX{-(y4gy9~8du@8 zi(of$Emp0d#(uIALVRjiMS)Az@1Z<{nnKK}T2F=Z_;@`J_qRckgKg{XV%2v7rBR~J ztr|JK^*7e`&(j=Y?eC#3BVv$?bloP<9HUe;f`|oCNLhQ@duAprUbF@PSfKYu5hO+{N@uzG*z5k~FEnPw)NM6VSFU8)_bv5OoY zY^8&@GKw!s#0b~?0`1bTVjcqAc4;+ zWzo2jm;U@7TJ{&jRtgdZm&ecQlr?HJG|)yW$Vq}?8k;B5tW-$)hPyC_rt)W0R>2n` zRBT=c7=WkW;+6-V@+S|2_?nu>A*xMSE=-EZVmjXAX+_gQ=ZQsa$(AvfLMxj)zeME6 z+NS~beXd$z=5)Hir0{ZO{|IQ?vIpBK)tarE$T2g=rKiVKhdumdiKA~0CsB0L%6Y}= zg`LNV#aFebe7993@ZZKvILRrwC?2>056~a;eZscmL`6CfpVSXxxlF97H2Ul~y1N1r z(FXM3uL1pn*{znatJpc>d8ln%R8DKUuoKM5X$QugAY$JAA6@SO&-MPkkC(JW*~)5| z3CSKw%HAZKN~G*$rXr<6_9{CgB*`W#m8`7not-VIDDl5u=bZ0v{2!0s=ke*B(>db( ze!rg2`@Zh$zV7?NoB;QA51PuN;D%f(app$m#B0xP(9V#sQbb=EojSr~rmd2(qRgY7 zLiO*Mh`%y}sY5R@8Su{N{5Q?hp+jPPew8OyK84?{5V0@PFAKHoh+*Qf+bavL^T~j_ z)dwas6mN?vIGX-Y%6qd@^UzGumAHs-=E8!BkuUTdKRZf#9ljr7%d*-<7r8&>Fr`PR z-RE|(K{*B5hMD{C9q2Un_H;@vsXud`Z+ZVsSx|=cMGc$E%tBe@uD91%!ct;%jO69z z4I#?I2*~BZ!29wU?LPu%BB))sJR?hzc%eYVdZvlIM*fuKWS@e9f=30@(H3`j3Pz~q zUD(tFZa?soJ&? zN+S8lIKsf#ympeVv%-wz5T%lgr&ADzJze%G<>zk~EWNUKKD;2uw(G^t3V)S|T{{x5 zQ9%vd+G+jx=8OJGO3SB-dwU)I!)9)s+qd=ZQ0B*sNYYHrZ2j>mbEdG=gxALYTgX2t zC0mgTT4rL4b>jk~SpN$X47|LfI+^phF5mpTjaQLA_3#!WBO?_vGgji$7!5ccWKaef z>4bcdYt?RgQl-w>{Rviqdn^l@xRz})x0PKG(I{r{Y3OUNzsnuz{=F;o?)-Uv*Y1+D zR3bcn_q@Fys|C}t-TT~hB6}PAwqyQw9VLI~b-o>^%s42PcbP1TTk(tNL;Z-}bF&!o z;QBI0xf<-R@-B&rl}$N{ zfdPn2_jaXGW$iILudVGzD)=nc&uZ}8k>XARM$z%ku8*TlNKBTUJuDx|yW zev#h`y5!OIgo7I6nE1f;EuHsJl76)paWZ)zfzdtu@6j+%+<1R^hE$J0$X4}>Hi89b zZ3T^9e4y}i*s`5)H-N9<7YvvMT`j{1&8*6{!;`x=*$RCw@|9D0bd@Lt(#wTis%m=Q z%)@X;B<*}Ghxn)txg-(I*_s)$1fzrT{Y&JI3UJOI-KslEBkRqc9W|E!>H1~zC4a%j zfIh1oB(je-12gp_a1rZre!$Xtdlx%hWXX||ja@FRIlG*58NbHZvUA)mH`~{9()N|p z;l>Oq&+Brn*E3=}>)x)UmfTR=vlAu3=!*8&6`jdtw)#At7Gf;u*@Bmagrn=MMO(O4 z*JWkOsa@V=#fhC9KTj70yYlWK-5Ta%^kB-ct=6D2TKx9QV>dE9y#*+}iSeK-PtMcb z$54R64pDt^+{O%^+AGitmQHktH|wTQi}XF%x-y-fIEi1+OG@^~^XK`u-*Y|A)W|Y# zzwhN%^1jo2<*DKUA9jz1Ti}e~sc*gdtL=@QueVsGxAs3HWcpbrF44OvNA;c`yP_Y+ zbXQV7=FKrbDWAPxD|FOWRE3`T2?aZ+BjB82GRyqSZbIixlh5Z|@S&*4K@~zt3`5dp zgv#+;R}iSN@|RV0vsqUhVx}nO#u!#Ob+l$v9_3Eb*(v5kOM4-IQthatZfi%KZyt4B z#necQBwLQ;07eWIj_o>p`BDtQ9NZ1MBK=&vljZ)|r;W8SIy>v;Z*1(@#Xc)?{n9$Q z&h$47PzG^l1uZJ3c-^GFtM93uUvbZkaBN9L+8gObEA2vWK%;aa_V>6Z*1j^7u5iwO}=JJw}PyHXRbGZ6sWlvGqb+LErLEA(C`Vq_mEtbWH3KAIo^a7|G4n5r5}ws2KfOlg5%L zow=3V?9aYuX*+2kVIs0|BV|u&(Ij$lmi8>0}-dB2iYj~fNVz0gJKkJC8bHV7umrGk+sWvEaY%=#Hb2egCOM26ZSG` z{0BvI_AAY4TkY17FHdpf8z(tjlI6LNA)y==7ncRJ-z4LwK5bXDG-VI9 zraXU*qWX3W?>)nu!(z&sQOcUnm7_yM_6KiQesCl`da%>p`t}jVs|*K>lI0zRr-d1B zKHooWFJj(WlyjnsHkmhnO6$a|*YLYV<6^?Q@8{wG`sMs1XiZTZ2+-A~rl7b>&Hm4n zcV`kudn#K~2L7*JC+%#*&Cfq6v$?j9*p0sT;kJtEw~rIM!XvwL)n}-Mz4h1}Z|SWo zQZ5WvC2}R+3JX59u|KD~G0yHG<^7*0`0vUzYn@3d`t$a2>U|!%R6@NW7~=5#HLji9 zpT|4sNMFwskk<=_KYw0+ULvgM@)nm;6X%72r)3Lo0v@v7RBH2_=s#(j?R>bQz;8xC zR`&XtB465j#Gc3{Y}yra7&^HHrY|s<8^G3O6Za8c7qb?>yVzgg~aWnfU}Pj`%1$ZlBTco>Tp*(D^NVt=9_meRrC<-H$Q z!V|5_IVXHn`qz#2MY785f^xErsq-dF=#eK0s$(xL*ZuysS__*vx5=A$Ohm?cZLIAN z{Al2odmhuc#Bzbq)cbmGuaZ95Tp+jpxoAGAdi-J`20&D`Q|_>9`}S)F>dS>qoW3t; zeZNHI?2Mv2=X3!v<;*c%CpaxoL?iDku3PeVF5iRO^``8rfQD^_8?MJFXC5ES+`%$< zj(oSN{}+Q$c0ZW1 zO-VQ{Nx@!J?9MsCsz|Bps~mma$Br!3mY!@ezv!r-Gq7-Mz+MbX@>mHUcvz{E65dP7 zV#A-*+ZU{Yr9zQr^wkX%Vshb0`0L(p5c1`K6k@~j}1+?ix+deg=< z=bKE8!#wKkuH;EuV8U^TSeU-Hwr0RfFOTM>1yW7Vg<0huqYETkgRAabQ(jS$(9xo$ zr(cHa2JuVB*f@Z<5v!2>FtJPc7}a=7EMbrw&3 zUGwfV^@jYf(;=x`?WqoW&x+g@&9H*~Ppenfix=2{duhBb6dUIs+-R0~2zxfU3B!oD zW8VbahEAG!j;RZC?)g>zll9CY-dCo!I!BcM3OfUfnZ8tzG$OfnC@U-LDOQJLP5vb~ z)fi;!VP#RRWwhx>?Cx!wrfw8ci?AfH!TGU`lpSV1+-vvzqtsG@?1pdGSGWx-!)F{z zfi18OCwIY2EyVKmA9?GOM{pSNX7*O?TK}eU{#xs)jDvJ9J9nirxnRCF^?-9~tn)no z{8gJJWkC*&gFENUcm^up{C?+GDih3Eooj_16JfSVs(E)UZui$!QtdU%iN;3$Jj+IU zoFT^FoA5Lpa}?h~*zv+}89p74u)_DjMyX;jtGeXm8vB7*{ST9S){DE2>1dfWOkU{D z``cY;G46bEfTB1<&`kb>PoqMs06V34a2j3?V}ZdBqn8hUUYjG=F*0hveq4_~^TmMV zTQ1_epImyo4W2ByvYbbh_oiMP)|+^j__k2?9)}Ocs)HJZ!w)><;Ku!i3FOH?bNTC7 zlrL}jng4&Z0PYoL@czK!-pS$34KXZlqcA*E1km1txLW2=1C6L z)bzJ+F=k<@!st$HVQ>qK-6pDeXiG+*vH~!o3**;#>tscLDm$N@jTzh;{es?6QBj|< z_9nq&@&Md)9I4A+t+oJBZaiOPU?U`*{V%KjHKW9 z<8SUurE5&g2`Lu5G1aDB!_sNPJd53gy$-Hni3va9d5Y|EK*X9BCL^ivLZI@bPa`Zu zh$}*LI7DLuVe>2m6G#nK(KwyxVCv{#r{aU!VV$||v_53U*$RgmQ&Y}{CB(7+)jpTW z3Ug)n4Ll}{hv2n<&DwQo(PjWt$DYplDAlTLc>$` z-j;UET1WLt;ZD^Pk{r-btp9*ZXM zyeKb^v+E~0YU4K7LnY`mIW@(mOf4DDZ!s_jFFV9OD|l(a3?aCqql11}Gs+Ua%*|NM zY>2g~*p_dOZM0if=7$rnN1Imva2vWe$aU%0Ul~s;R(;E-8=Jojd*laBlj`egX=%$+ zRmTsUYv)dPx~5~}q+s)6t@)N!mf`O%H3_~d>kem?bmhw(D%k^KA5MqJ%YGp3wbXWP zzSF!I{Qf&>N$QTcZ3Bzlv)`DP;-*TQN8+aLEX>|8P3*tlwR+oHrPon*@R?K$DWA`o zXQwaa3g>Qd)8e`AruDf-);IRv=Qo+zXVNp$w!(`Rcw?<<^N$R?33Cm2o#*=^Ygs)X z53f&(tt@&?xo}Wi*(1>@nU__#zp2%1{VjWz`#wdwvt<%v^D|f7-nn5vdQRnU9(cec zRaUb4o~g!jG=#G%EYjHd`T2`)zp6KXmZYcYS{P(>FY_!fQ?iz~(X)%*Wi;Cc;vMIc zR3Gdj_326(x;kkc7*uY}^6`O%o#!brmG2U6JL&G2#xKo}a^Kgi9{ik3s^tx%`zUx| z#NdREeEr&Ur8ZmSN!_b1ZLRd$0fEbf>0)|$IybblmS$&^Hu*Jv6<+Cpb+remmkE~> zTi{gk?zq>QDqJ%>YWJM;RLJ8jezBiv3xoG0glf99WYHe3m z*R&F8ezJ-p-F-H@7|Sd#W7#WV4Se$32bz*MZ#FWt5DcuE<3?~vumU{-9(m+Dw!ueM zE#c(TqvxIz=BSt_`;`*ZuJfen3U*XBz`Y5pt;DdBmN5EB++3f+ef>3AEB5Gn8soNZ z5e1JEH`2~rQg?KIdG6;v^ZC(S|7x=B?&1b^hontk?(YAiJZVzy9*S|3WmJJ-F#7=w z?g3*TkL7x<-Me;OosMp`?l|ztB(qEOvDD8#TwwoJk+nJ^^juol5W z^i%K_vK~{KKbU#0z{p|Hnu61s;>yh9E2T6@Z!K~LXj;xkZIMtEE&HsP&yFsXMOXzF14bT#nG zTN(m^)R!DGS_QIZ*1B9Y;E?pRHU6O%@q zc=d(N-};1ssz&LfNwdYw7$(tpV*2wD$4e|%=q`Ny0|=# zj(55Bv9|X6MiDipQz_b950K0sSQ z#-h1}kC)d1`r`79-?QtZ3{_XZk1;jT`_KFs@BEtCaUfK1Uy*w>$6b{)-PYR9yBicX z{6(ZUD-wu{f-RNdSd*^CNwatFUSd-*aj$VWOXY(utIm*L;rXG!rOFiQ_|4x zP?^L~;ujAtcwP3wvw%RJB_&T_%|g5!K#D$j{SyYY@jjB$r6Q6qeiUWhjFQt-j11c_ zed#Oe*50J2tzDht_16XtfpX5y!ng(-d^8_?V%zp-pSc=eEf-&{7T6{iKXkv#wz?z3 zDgE$;A;-$sh9&c?vwt$KW+eQr96$YRi&Yx6eqk7Y&H zfguU!v10*P3baL+hYsA=TllPdd3lkLkPs$(uy~j08FVS8Wnc(@@}zFMJ>4%bkOS7m z@fwOSDY3{EI&#DZCRT-YePasw+XL$#f9$y`WLTpUk9ynI-l=(~O)W#Zd2YgPRfD1L0sM> zg#8?0pn#njFh#M?7kB2|!|~&$zsQbPszp())&W$i^;X`$nJm};{D|&d>M|z(`O~_S zM*jSHI>NefvGNZ;yyv$jA+KPIe)#al&tljw75&&d^zo}2y)}8)-Z;hzmn@-}wx=;2 zlSVYx=GjM*Y?U60+}W<;OTrN8!%tCk>oemCQ|5?Yb|{%*VHQ`QF{gK|q92GkbWqC$(ZM z!=9tGUy^m&va2c?kQAaJFgG_B`$j@YP!PM%yvF&2yROPQ zh+Y;p9QSFSRI(>Acx#?QGUR&iU5tQkQb_i+gNXHu2(k{c?Lib{kHX)K=%sy7<`^s{ zi?#C@?5Ap*cD5aS6X~`2XE;vEO@qE04lEvXxwY=oY0*n7E4GDW#;^UKbAy;fHDQK8u_K8A%QJT5ay-cF@&(5eF*Hi@s1>HCQ{*r*19Q5r^)HrF$wu2HH zhr`Kabk#b?(9lpet774h+|!S5*0tsD^)m>^w-j&&)?D)?8DQyff0OaeS+D)QA)hTX zE=DYy#NnuGff3ipI~diT@C_&Ce2VIF*&piv?o;5h&tN>h{>3+E*QBhJnV=SiT?==E zj(SH$M-x4Bvs>Tf@8AvfOESN`Sz(kScHPv*)FDsBimsWl-$B{ttYMB_tm|MsNodV) z&F_V$-bmgWj_iJK7+CZ?28IqN><7eQnbWCvJUlFnn%LvL@jY=fBsMmn#=QFd`+KN; zzXe=a_d#?jHsrPQt06H8fBO3Y`;FUYlMQVIQ-q9KpMGNAoKbD|@{BoOwRwze;uj5d zCbf2+MZN)Jpg6^o*hn5DE~zGxt36LGyxq$jitg#$z4uwN*HzogYxafSXmXz3f#NHl zKUoNV>(syStyyZ(adqj^`rp4Ea8~n}$xQ!>#i0QQHM2UY4<2msqu~<2K1vFBCY#ds zWp=i)Bl8^W(g;fmEDDck_!G-*U1&tOWNds3_JS?dJ5U?_b{f2Y`r2d{Nk1BU7fapv-5wdye?Cv)|V>XJd;vi((81i>3h}i z`mt?)AD;01#umualP2O9Q6ibK&?9TR2S|~id^kBD5U$d~j2>U^?j#(?P-xoy7OOZ& z&u1hD`|G3EuI=w=UM@M8E%eMz_vPXE8|*Q`67;3-D>Bcg-qVrQ--%qzb5lHPdSu-D z+@5%$7jSdy%(+toyz*4cffayK=G%`ScA>ZT*nhO$T2cSF**27B;%4{(yZ3AFE*2$; z845hfj%~B8UfK38<4k3tS$o}B%t}@9YQ{i=|H|a|K#|gyuZ2A+hxgr;ah5&Ck<1d2 zq-RtsshD>Di?i;X#QUzgM;)zK4SROGY9P$IDA-uJWLL9a=)b1kwb+n-D!<|5*^A$2 zOB8|~oEGd#UPZGyTlbB%Wy@Z&Hn<9cARFpvnqFK4HEY}ir`y9KBIoH(UcP)e^X1DA_ySnK8_vbS zf(}8}CUSqD&tl6W#nkTy-^*8|QVu+(pKU=(Oi8;$E?_J$bSa^YS$RG5Im zZ9Uh|I4xa08I%#Bx5r|iBFA7{$BJWKBL8MVfiT>QJ|gGVefkvP`xRB05bj%o`{-`g z+beCNrmtr70CIJwAM4Jfjk*dkhG*7GO#Mj?c_0yX=J1rIy-Pfq7(=xbkj6E~UEdsa z+nSUE%M8Nx4^j3Uz7kMqkgDQ<|0nA?m?p?tS;r`rcZxiTQw^JxP%sP!{Nafv|Tih zRi2&BE-;f*?o2jiwjbtj`PzE;N>fY?OsR>R)W4jzwQB~B8-EvX;d15epF!HgO(W{% zeKPBgWz#Qy=YmY5hNtZ)hpPK*#Xfr#P9~N~ zY_0#BOHQx!co?ZGeu_|ODl3oN+jr^cu6wOM73;p=KilpAYFAc=Xj_4AYlUjSKGON{eus?O5rZx`bIrKYDBE4w(T zo;!cO2B1e)O^uwe^$rRO`V=b`Ozbg(lN~d&eMM1Pb`Jn7vE~b(MsdLrF+<*t124BT zN~W+o8!|Ra(5po)ZZ@m<{&1MrS4Ah6eY)Ke}<`)Uytr zbNr<=MRE51TJ^=Ei@CQp^IdH7IcFIY&&CAXU6ej9vM9IR=JT{(=Tcyf2XlnKLZbfm z7Z0Ym>4rC(pS4NU2R)FHm8!j1YD-2Z7z1k3-6T^Z$ys%`Ii4}vZwWM z7b~(NOd{(@reHug{s-C2NoN2)f^ebUv5$2?Zf@n*F9(`qzmt=X7|xx9qdZ)`QTFyq z$i3lb7P|83HbaApT++ny`P3x2j5YIQsozZrYMYRK9omWwYTNY zM=W->W1gNrVH~nYw@^VyGT)G2u*7Afmd91{Xr#E9!J#r?+VH+@I2)j|zV%uq!h`PU zE3*oJ7*)LO?2H_F|1ke*+mQq~mgvn_+8s?@kLys*u_=jcc4=LS>s*aXwtoFO>Z6@v zB#Btz^4=OolDnr{PYD?FQZzptPGtCTMToQUSGQ;8RM_fzc<|aFlS7KmEg41qV|3z2 z>BL3j7&vxvT)#qFaDqjDOXutlcrb;*$da(BGJbej2!2Xx9HL<6wx=RclQ z1<64n#bspT&fnj}Aw|CUFkT;SXSTbC5g+oE<~U`0dwzW4*`FtRhC*#4hT+`3yuAG6 z)NM&vSzr1#T9cuhZR6QG(5Dttp4n;bbMM~7hi;g%e1%6@_}(rsd|#%fYO#isNTrg2 zNnXcsAE=m_)wHxI0pESI->+%I=rrE6%r)1pUlbm_Ut!CIJ1hVvKX`&A%V)i%V`sQo~X`E2oSQj)u0YS|1shpZc$nj&lb zKDrh*6~n5y=;>?dk(AZdBWs#zxHPnkjQsE2+m@mb7?!g}xRysp>&Jdzr`%;9SbdT3 zPbUaPhsw1F0Sw0*Mq>g3_TZgZK-9E8XC*^(gepu&dW(^o2fQ0}lO`|2IVuW=k?2bFSyM->j zBTevJkbq6FIm7TV&q;iVoV(iQE;1gDTzrLda3nx0NcO<<))Jk67cfI7) z?ca5?j-o?g%|2VZ7RtyeE5qDw_j2FT=Qm4$tT1e(rlvk)VZk068Y=Vk_hHIiM$vtJ zMua87Ue=R!U>?pYC_FHc15u}R@!}!8R!h7)7EaBJEx^G1CM9p%QWV$FJ%P)0Y93_z zo5*=INCI$8bszQP`r4bHPLV=KJQY4Fl8m>_(>)~IZ+*7!flc`&o*GMD*^)is!U|Wh z^@-zNBOsFVT*TF3{>BWJ8O~kAg9GYPNuv(0{}6Kc>=VEvNKe$B3Z|KIuC&BUDZ0Ct zm{$J!*$kGj7tRTAn3V%|WMOFvI9^!?Lx4VE!eEmqhT%e}oz>}n^Cnsf{u=4wG*`pq z`>?iOYTje=Az{S;`(_DH(k!pCjz~+#!*d?DSV2Q$FPJSkMa6s=wym$P_pv`94l9z> zGPrgjTuV`jE5^y4)*kbP-R`Kwo(fzdIe2IFFet>Ly{e#y`lK=70}F0!0zI}TF3fZu zcXi@S4QK-aAbLbyUgIv6VzAQ1dsJ8F=4?yd`9wvda1)YsdB6suK0>lXHndylJ4EU1 zs-mju7aTl=7tSp1=uKQ0zjMB4WZ?+^ zPPHc&f1NpJYRUro&)w7W22A_fINTFKy)S|NTt)>Dl8~SQmI)rDQ_miyO?!A6E~jdJH?~LkeAeeIfMI z@w*SmE#|Y1M%(jy)o@qfbw}iNBJeFOIifyBaJci?`rRVTc6XDJ5yrf@`kCj0E*(#O z{(QMTaU%ks>vFBkMkw;XcAW8cgt@)K3txD7c#=y>O8i=T%TuOY^$KBun0Ku0bx~0i z+NOqcj{^c=AI#)D{n-~zgKI{-2&n3&a-<~H*`ds?peO5rgt6j1Y_r82+`(+)r>8=O zum%MoXA@o1GVlB5jU@ael$4adfP!adXBVFS8cq5Y$R{6G*@&A*CJT_N4wdko*+SPN z!E#~CcEV%KeW7%UV73QJt{3gCr6rzf(QU-9$v!>jF)OqDv~_YC08s}~;Q=g*&C z{vCiLiKiuaeN+z3^+z~3U>04i{7P>AuttF>ucG2_Q2c89YXe?p2`9qQG}rT&eR+Ag zLH-pAo9H%5SW-c;&gw>cOHEoW=Tbbd?37pUmpOr0GsW9?`ylKs00Y3+Q5Bl_VT_XiNoZ)`R;zTz3IoEqnA>~qE!8KmvqR05}8S>$h z!O}nXb7{nV!8ve7h_3l*le3?E2XUVdZmufADI1B)c>k$eCE4$(i2zu8Q9w&iuS>4O zme<+rjk6!(+1j_J?ac^=U&hAnB_w9CfhbGr6D7MVi9{;>#;zp#0AD08 zZ7r?0pv@)c8IPlDO}cYuzSD#X-sHtu#|1`&KA023H2M-u*#NUgr>B+iQIxvQGfqrQ ztju%e+%%nztKB9s$TBG8?jd2tEyZUW2#bd^O$O zSEUzKbGp9+4h-dUjIlxZV)hTgm#MQmN z^nUI|N^+rLFwGE2JVduO$dlUKmv?` z-Y$XV(1eLni7+`JSUQN&hv8v>?yK+Cf@kI^Ku^X$h{!Vc2F#MNc=~PE2pMU7!iyI? zkntR2;Et1Y@yBn_IYBJU!xhY#{OPoYnfggIB(bxaineu*@XbJPSl+ z-0@mOOQ9?IPshhC;BViEfLV_UF{_u4eor*NY4WRAdjY@ERr*NuMaWEQA!Z22q#$_a-rARn_opYY@&G_rgowy*op!UjMUL)dI`XCqh%$Vv!dM6KER;{2_RwJBbM z*EnZA1R!W&xi)`WJr2_fsGDm6H~azuQt+j?&h6R8Vo2P|Dk^8v+eZ)*@TAA>@aD6r zgL`eSz%H5q2zW<04@MK>KC$@9QD|qcAk`tB-b1mLhq%l+THI?(Ku6*}*buBGc zzZM2TIy?Sex%T_#d?U=|{eprx1qGLPCT1B(}FuTeg+?>Kn2m(+xS(*1>goP zMRDD!?Y|VRUq6AfH4byA^t`+<`2hNFJ(q(+V`Ceo7R%3qEyEvud7&x+|Dm^2Qu|-1 z*0B2lvIr3Gzwo?acXexPtE~J;a^AQZfcU2nnH_ zY>rp0y7QNtmvUu(Ru@lN%4MF&}q zisNy#S_sB@DcEcM9+-4A{7{`*!1Dk#Ri9*e*}IDZAyHABZpwJoKA%79Ff%g)P)7_L zmUNlvaMkZMHZ#*eNv;~jJA(63>>};1LlKl>7JB!S$OU*l-e1!=JG3 z;68KqEK1w-?DvIIAUhgjL~O+IoFP~lZ4w)%9b8594bnY-UfaY(4d4$6JR&Me$He4Q zp-uO=eKTH#ii%3ea}6Xv2M34J8|U(#LA8}rPH%-Qbse|%Tb7Nnz5b`pbj^c?bF}7u zr!O8<8te)C;(>Iya#I?n&B<kdVl0J?fW$hqwjx zRfA~}{)zay5aXDg4}5)l&&%eVMuj1H@E_b7ueoJA*b$DCC*#r+@5Femj~xVVz4Fqy zI0&}Op)oNH-dnfXvS?(XOh=Q{5?F@-j6OajK%g+!rpEzHgK@W5c4N=2rf2ZolyV*D z1kXWD?NeMVrWnL5o2FAZa*S430n`h0c|)L4Ky?5misO$?0HV+JchxGqYUX!j82R2%~HvX~6slK-p#T80Z*N62MqsZt)r;@-{7bP5A3b1d)L($bGYH{SXvg|t0 zI1^LK@ft9FgcxBbuE?!hx4xpmKoe`^;IOD+taS8xvFirToj=0Ckv8Zu>O#wZq4E>({3;}SXcJrlQiQSjbHCSm z|IdEx;Hwko@f2{hX|xN_ghW|Q$;@o~%T);_947~dFCc7Nn%m9-Bff`wShi=o1*vtC=VVy9uS|Ko2#p* z*P!=AhpG##A3n6#E+z0Q`G9I;`ZGsqiq@O#7cb5r(@;{rg(3rFg-MxfAYQ*PBL$)W z;D~aZp+k$$_-ADZSLWbLTR%v*ok(+H)?*oRpS^3JgIcBr!3##{3cj zH{c%?D{C`q{{2#}F9#V4h%kEk5UJMP_;!!&THb`DqK7FCCifLwccK6=BSC+n1pZwW#ndq-0 zOn#Z1{0IVy=-PpUj;~~!*85LTg%C~jc%kclmVFkbca0+qiG;Rh3j_rp0b{_R zaRJrgo#o}_p{-t0Rwjf@(93vhdA$BzuRKB9%v1k+MftpAnyvunDS;_O$MjmX>l40e zo1BV|jmN79q+DHHO@vt_lk3QlL?Hsyee~$j>hA7n)SiM?&CK8e0HM?0yoo{6g{Wm= zaEW7Uz#A3Ic>q; zSIz~^ix)2*lOO&`9LJE5(@1jZnu(M6gI9%PIQ3cxNtm2mD-eWe@FFx^3`90VK8E(F zXzg479)f`)C)R=kp`pJTS%g3R^~j7EJ6)Q+Mz z3t5884Bbwme8@bPK9pOhc8IcI?~Z$SU%q_FX+DKd3eQ1YTwK8Us}|^o0Aw6IA&??e z2M=nxy1Is+QM#7EV-m0s=9v*)XwBRUt3B2&|;2kA2Aiw~Bfand} z+E(z7UpQ&v(YyG9(sWF}>(2jCc9fKs=7RFXGaNoLtAZ5s4LAAQ&wht+@R$KF5M37> zf3~6rgQHC_#vYB0jp5;J_}Pb$*wN8_u^w|+#V4vC3T0p)F*67%HABaL($9cQNf`ych% zK1UG?imx~7&6>{sA|5B(U~u~3p`q1l->2&9>WCJ`wTOM`UFHSzri5b^#4h|X-;&VB6IWgL7^T=4+bBa@R?W<&bo zP&cE+V_53M!6a(?8t|hQj3sd?!Mj`m)_|C-9cptzKS01!z?JWuvkj);IagQRQIlI} zuK?_bOG*mfT)7ID+;QbL1eN=i6D&ykBkh_p6ZlBk@Ztf8(J>{kP8$zR{bbP_sCHhO zRm6a*cKiB47NrchM5iOd{QN<`fB%l9=Eh^b8rd8S@`31^<2yAW(sYgfacKGKEQxEO z3QZfpcB?6Lmg(vL%$k5q$M^Y=65v>omk z#CA?$r$AXD29L1f{!;1aTVWstC1bQhet!Om*e0Bn@Z8I_4YBFzTpk`C%gelh+r=)a z-gZED5`>e*T|?^FO`%j&6?l6&I*+{kgaHgpa98d;U1lpO22x#&`t#)#4JRE}bMBI=b zN#?Q|ThZ@e#PjgcKya*x9v3>!|B5hc&>nYJ{nJ5&AfKza#75cl`uh4f8@SDv0A`&; z9IP1Rg@lCGzNQ3&F=8{yjzaJYA*KtEB8v>kffcTRDs>`9uq=lj`Z1%(izf5ebj7Ms zM!Zp+%JkQg7r%a8O$jD~`w}4n0xu?jPoCbLj^!Rgb2ky(<7B)x66PEJw`2|K=ZC0r zDOp)H0H#3J8l)GWIO+Ihi>Az9VPNv|pM5rfa38x4?;+sQ{&UkB$yT+cP=f!lK3Bv?IsBv8to13;e>7;9-33I0a+Rlb<7eym4E! zpLN{svlryaBo2eRoQAS(`|J-8fP_T+5f$716Xv8yc&mT@+yLXX=6MVL(6263{a3C= z?P0jj_amODP|u#}foI(7@8KUtHYWkI*wDkTqUrT3Q-vRI%ww zV7`kO9&5x$Krj2gvFw79N1Ma}T zw8KVa7qeXps>SOl?hp_W_`_&k1k#+q2`1pl)@?fmzHfk_#3@L9{W=8s;SvJ{-aZXI z{YQK!qP+Q@@-wY{S{$M{@C>NXn1F+}?K^oI2LajPInF#Et;?Te+!lgVUPu4I3I)MB z6lbX*h0q*py^E$1Que_0WBmLGu}T}IXzSdoc5JVVi;pMBBY?aqa<3*+GvTCDz_idMwjlAdrj~d#}cJKbIOrJ%Gjd-&>4|N8V zMiEuD03VzZ5^K*FnxlA6&Rva&j=q72!EaXHBRBV{vGF|^sjpujfd(h+3qdK6?${w{ zQAdgD7YO7FT9$Fro>AYYS}qIhUs_r^#Lh0aFvl!rALpoz?knnV`dwRfFHY^+S|EW3 z{RzXPXdo{^tDMztSPSqk2<%48a-r6+WeGCP`(NFb2K7M$u&RKzdzr<7{daGsYQ5v{qJ93MrF{kB{F?K|zoY2#kVg%a>PF*sZI~ z?*t15Rt|~Ur1I8N=(+(%KrJNUL~e0&b2A)AaU_mo!6qO;iE0nXPQq=08Db5HOM{U7 z(E-CxL)Sxr{^Z%SXFhoIB;(DQy-n@Z$5d2*oZS#Ly43?rtBCO*tzmQxiE3o{7F94Z>0hUx`p zvWtgC(Xu~s>Qn+!Y0YI(A-o6L`WZRqPizaEGB(E%!6H#C%Ti&3`FMWN~Wko5YbB1%) z{N~M@qZ1Px{q>^s!c4=9YQsX+6<|Bm&z$iYpmPPAjlc+D2Ml^Oit?ZndkZd#Xaup4 z-K##Wp%KJefRlF}+C!H8I*faJ&}b`fr>ora560K|FJP>=5=fvXfPpv!`5xaVHLM<%*$+w*5(H~& z>oUreJ|BQB0u5rk4;i;S=Qen6(4LowN)C!ATrLnqRG8QREsfV-nP$3>4Z0$_M(diY zrlunL4yZM7+IEwZ+vaU2CG9cU55B=1gk$;NpZ(BdQ&LmE!^g2oG{^b5)&U_1r2|_0 z;ou<9`68OXsQ9b0f@+&j->|8~4}nx>f?xYuc-Il3*d`)xpvFO5?wgnztqqHc`iP9Z z+CRMU5rC$Dt^_y>{fCFaGT6*MZh?PSdv>4n2Mkn8M(&S?cvsWw_c`!49}aFT?KHdf ztwzI*r8N}QmO8JcgG&`=M1ZbbXZJ6wmiIr8U4xi81FJ8HY7RZy z-pnqw&(?*&kgWUm?Sp7zXgb^j2owEZ$VXJM*dd^&xwE_b#`3r_A<;qjMU27`C-?*! zI=ULfpIv+RR;F9)*3-|guYETualDIU9F~yKj4lq^sDMb2oDh02)Qiy$4=I?sX3R}d zm&c0QjiMxz&D32EPh7tbY7p5fLr>b?I4mOK1EFsM^+eF}Xa-r#_Z6B;S6?B}*^?(q zw{De}Ls0MxdVX?pi}lrSL`x3>+nn_Ux2iF>sz34BXYJ1+K;jPJ=L2roxo)Wc+rmKH z3&%$bc@cmq(f0?}+Ry&H=)*+;lqx$mmLAGbGBOgyYaKKZb}UgzcV}j-QE74W@ui_E zgH{dPAGQrVhYvie@avdL1D1+;6!UMt0c;q6M0I219x$s&iTA*Y;>bJ)lkLQio*nRj zlqHssU4(~Q<`ODSq>Dxy8&&fuun=}{=--@fr3&G-;mGBKBnVNSc&G=q(2WwNFyuxY8gK$= z!PK_5hePL2&s#B1{9}#KM zoh{BjYkR&qQKsdbrgRO!&06B-+QB=2`iET`UX2%FR|MuzY)ggm*NC=d#>@y8CwUHInLJdB)k)=GT)!yTZOmK+Ja-5&0KU>7tuK-1qSC_t;&) z<#t2GMov;f;sn8!4910hbxpU4nGE7Y;s*?BPg7+;Opblz0Fk?KPWL%2twRAZfyD@u zkUUX%L-hFf_mA+Y=+B&iO*kuJ^JSP#1{ubw`W6xQqQHJfC#NH*GLWb}n51tyKTI(G zhnv0F@;?#69pG>*2h^%yV9Z7;r?P42rV|ih~hgQ>3TjQcB+5306EF zP>ouqrhNSq3UYFkbacMK!7ag(4=mavo<6OIRxY;Z6iSS(K)ZEtv>R6$K!r<4NAVkQ zFmL&My@{T$$M-8lrw~*#K#N6Fj7Yq_v@BR)sG_Qk9V+CZt-Ad2@yJuFgb^SbNN+p4 zMtVg+hvBAxiF||>Zc9rr@`Sm-etVnvekv4M76^pp>&uPnEt~7X+3!ntL*4@PK5JCe)1Acx2 z7X7C>IC}J&;Pn|WK)6EBh?Km#3h~cb^!t{6{(SDWx#1*cWyNSrI{(^+dB^`~0k(zL z%U!whocBrGsoOC)Lul&Z=;!rF;GF*9ccj@R$pk1t@Kpl?CO`KG+?j}%9nU0ulG zJl_`uKNg2KcMgigFiheLG0R8c@ig>fcM{mmg%EpX-~c^r}tU55*IBV|B;2idKPxw(1zjQ92|5ku6f=psPl@!?9iaY~z#we<_$ zM+qlAAcgT7o_#n(fdi3uh{q00!DQKDWy*^eWUq~OtI$>8D3QJ#jsztP<`ne$cIA#ir-ol!1tYkcJp+mE~Zawh$d)>BD2hm%)7^QeTex)mBLSpa>2B;EWb?X=y21*P)4tnx>}l>+V)oR{x0*a0b9R zKZNdj1R}7UoZ~1a@h{Q`E2_{h17(Go@4~{uEly&dsLF3vu%Z~iKhOurFIZ$}XV*Yf z(msuJUu!Gcc-c-}odR+oP`LfVLo-jBLWBDEU)yX#2gZ)d(@RXOxc|;C78aHXk^U_v zCMGdGi)CeHV$;p@UD>g`w#OnHIDdwJuB0XN9r(c}eW5Q0=OQN{^|s6OXJQNm1Jy?5 zl$mHafx;`5;)S9BCC(LyZ5r*w5G{GP7n%}G<= z&s|ksn`JXUqixTh)6p5{!+ILXfl~Cc2%RGc6!fPBF_eP5bnRESmD^c-`VgFfR@c$e za%}&L0|`!fqE-q3i%KMRPrRGZ9TezwU4>yZ+A1n!gdD2V8Vh2)!h1Zj7PJV~V;AX9 zUqT2KM0tAA7oCd9mPAc$Z7P(aZ0zj+oW}pZq^&OkykfphH@}XK&e!3ps_gfnnJ-?9 zqPLWHDCX%?KXed@b~>^(u}z5(RP>QnTz5JGq7q9-oS+*+Z%3Oaaye;geEfb+&Z4@g z;^!8~iLQp;xA7#j;=!kWKO!VbxNy)UG$TPhk@2ehdhrcKPWdt!#;PUJULZ;9Co#XcpRW@x zL41V+h)jZXp^kG!{HC*0+tBdnaMj=@kRFCmIJbN3b3=Or71-RYs(&Tt$XQx)d@e}M-9j!* z6~VOFXdzfH8UWt)*U4%7^*iqF?n$~l(_Pt2n7+ZEZ#a|59w)jXgUMuI72GKl#D)t7 z%Rhctf@*xsDjlO7&Pm0{*muc<49(FR3qfrioiq4SL_KJLh`j*I-@hM4M1~Fw&8#)% zXL?x}XtP8oa#{3h>!GzuJTvM3r`?^Mp;1v?a$n2Q-D3>gfsQ=j_7X+OU5nk86K_Y_P3k(-7TtGF!HN1$!WD+tyKYzQsHYYoq zgN^MTN*4kw0AedaHOKb|1;7DtgBV31_CGZw1sg2dk3AdJ&iLL~ikx(hbzQ(vT{c*ETz%L$9RNJyNvmAx0 z1Zb7e)8U=y7#KXlQv>lv=+@7ZwoS4G;(&7FV%DNh2$CP$Z6S`c`TRFLI{N>k>N~)> zUi-L7_Q;Oxk*%c2N>)gcG;E=atdJEM*`r7*m6cIZS!Hh_m59u&jEX2DkrLj|@0{~o z@B3cYxt?=6Pe=d%?|0wd`}_T@8^Ets($?Ja^72&1dFV6#J}3TBW*%KzT#M^&2=D9u z%t#X6&Hoge7}BHwx14;$5)lk4QrE=gp1|O`i$}4@omAN8V<%{`4UoKv|(u4Ae2f5mc_`!bM)M~oct!| zJp`o$=#^k2fH4xpdO2(6Ankjzu6AX&9O>P=w`F%xnUI%5bu;>`q6K{bFvXIpX;=9a z1o>1v!t5D~P98K4COqHadH}3A#K2X&Nzuq`Xlx{XU=(ANcQfuZ^qOepBQ&lcb7(%S zv`yQ8w-kGv6r)~?#1 z(96pDX>oY0_LR#n%_W1Om-83V(TF4+W;aanozb(bd_Vu76}thu?lAg4bTOD~Y-R6$ z`t`-_;R%d%5K(ucnFkLX3St{5&(S%Q^vQ_{4aoJT2TOro?gCwg>4qS_3knLbqsC@t zBsMoTpZk7UJbLQV=H_rp{#xCG09xr1LmCYxvrkOhFZXbIsogxT#>c9C=n&;C2m2m} zzj@j5ZPB!^zEFu}MQ1TI-H(35AT2HJl}TRp=y278qbUb|ZEWby?>Ybe{rjEg6_Fhy zzyI}7cr-nemlQMJC2M%>zjp1K*4vX3x3q>?Z98UXXR-BOU!Wkt_^w-Xi4d&GN2n8i zbF#<%F7xuN4*_O2Ih6|X^OK<8xPvjmgWDiQzWw~c>GS*c@7K&fon2hagy)aH@S_bh z9?6JpE&A?@FVD!r5{4sP_QGzj$f&3@#{7Ku00TKKQ$@d0)YQaz0$@h2{tEZ=NK_F6ka9WaPzf}^8ymbcO@fmoDhFe z(b8&yu7M?uk%>utE-E5oS>pO7f>>`vsaXU;sV2pKmWby9$PO@YWMp5$IB;6Rt3^n| ztbwqt`@8DsM72#@kO0mVDGqcWa|l=?lkwD~EHL8N(ITD_Gpf#|x@;2M#>!wW4C3p4(cIaEZt1n~?8!CPAO? zUwLmi&zF=0cZ{}(M;ETN?VyWni)|l4qakRZZ^K2q%NP^4;MOdRWiCjL&_r{KpD6J#5+tU zOUchK7c0WH?^cSQXCqo}wkeY=!KW2y}KB$Hr%8Y5Dm0fbamUy*|8+ zjxHRKzNtLsthZ~we?u2bg$2XAd&}`i-uTH^LB@B`>)+i@@rFv{QQ+2c{)$7|+Di0} ztR0`v+S*bq2Yh)P`3cL7gv7IQSbZ9mRRa4@Wx@=;#Z2rDr_vqJ)M0lxy0~a*YKAq{ z@cR!cf8mTIk{qC_I-FWldv>pY04bV=Fwb^3`4lv)SD+_?6b#MER%{o584+EM;U-c< z#2Z$hxsAEt{pxB(O^Q|zVlY6e4a@~&dl-tZ$QY`Z0L>=!6!7m+r5Qv4XS5+=!oEIC ziG13QMi+mQ!EsZ38+<2XrQi#lIFY0oCExap!8VuwI?XR3A)&)jSBg>}(OEk>J2$oR z1z!bJl!ZOGf7qQ2g1Rf1$rBz^bxA_g|C_e2z%mYdn6!WEV+fScqTdC%+S%7fk#{l{ z8`@}ATvC$u{Q2{mRqG!C8>lSzoKOh*tAM2-e=cLvEjBKW$el!v0~Y}Jw3e%m~o88VHjv9A@1Ssx%YNG^Z9cYkTvd#Xr98RF3HdlMG8?MxAifQ2qcyo z&rp!M@H`k%_TbvFL-$*HXUypE@YR(SAJK98kR-nkELa-N)Z4kauVN+#qKXN28}vm~ zSk}J+0|R5mb`H}_nEo0XoiQ;g;8vGnv$z#{;sm2L3=j(O@UI96J|1gk4L_-F!a91y z-K(sujQNqnu~MS|4MsC^V}K}OR)v&JGGG^V;Joutfl^viB&iXNKy(rIh}Jna+l%Cx z9z}IJE4Gg2=3ICC9rrOXy+wNj=3@HWH(bTKGu~m`8xzK-pkq{77uD2An2tq!ydk-G zlF{tDW!{QG-)Ok~n*~fPuP!}zpOexLt?08{_-23sP|=r=ZDyqymYXulM@iUn74e*T z)7Hil-hnOzf!=Du%pd?8vB*)z1cij6o*r0PQ298?&uddXR4so>;+7_zv^CcPCoeBU zrG-JksqiZqIQF8iUiGSo=lpi@L|9`8gr+xd-C`1TAWD)&1AAuDw}_oAcB3Bn?Ku^#D6a>?Hc+`&?&UQX;&9p`4;D@=O?g6 zwLCp#VQGj5C(dYNV>4$(PKiRYW5*6i|8=7@kNx7};!0B*hGb87>i1`nMs>mAQMO?YsNK3VI|06-3XG_(<3_=&wT-VtM4*i)Z?WaTJ9r+${O5L%vFj11K>wo~A%EHnT zfyFWz)6dM$7W)B zIG67(skIeBDNs)(U8EfM0nRO?G?RgDMvV1Mry99oY?LN>XXE{{GIpS4guqwz&$Q66 zcfaMF+xzQ3npuunL*Na;xfZCZ>Xf~?fMn0Y`9Um=#kYIkRa7fBMb`3zA+y3f$l?KW z12uXTzKvhOo4zM2Qu9wsa*ph}>Q_EL#wfD3_M#@RIXUE{#34ZWcVV*gzj~iVX|_tI z6VrBMYisKRe&UpYht?XcIf!x-1lAH@Eo7wU737m!JwPDM?2+R?jI3@7%dOyM8IX6@;JO@E7B=-|jbBH$Zt80w1{zd?ZC? z`4y0l7Q-ry7R_4Arv$2ImGz(9MB_pLfsieoNz9eh>Y(1zj)#eqqbqnuY7dM^ixf*C z&E`%`#a4&ykOs!3i>5k}$Z^Bei}DcyM8RnGIf4n>+uJcIbj~iMQ`@Xp9J50|w-DTxvrI`PN=0J7$;=!u+=F4^buQk@+tIv zl1%mi{#NcqG#*uf56U^l=9pd_h{-J&B_p}SGiLIucl5K93m&N+I_Bq&_pi*3vV<;GWuuGL>W&<0(CCGch ze}smH(2i|w0c)zCs=x$dnrLwW{#*rI8fwEK*i8G8$EG1{J%pRkekA>=9jQ-wQCS!G zU7vLPS7$ehQP1qfIV~jTK-a<`NYrCav7L#!$jQ;5(52Rxg1)!l%|)YsI&v{%3N|%y zUIsQbO4{tMXwh`PEntLRV8UB0uV1HUj%glg-@y!+40sCRH~9;5Ot$?eZwCj_hX!e} za9aJvn4E22`{xaSlLgdWg2qO^Qv)a|MhIvy2xmQf`0}-Y5@6mZy97JylA3QBN?fg( z=T#T=nxkg&s_i;(+F-gS>Ge5C3dF?4)h}M$3o_BYO}d;PV5!1`D%$+)Ue02`r!J#4 zoFFbWEi8tMg31`{?LXeNI(?cVev&`AjmIJjl=!z^=~}oNRsJqC5vC6SkC7hIDlE8f z3KB$isIXo@EXTL{=MUjWCH96}?Q$Q}_RLkNHE0P@>C@AaLJJ+Z>YT=(+}h;=Qb}xk_+FPrW8A&Nb0#<2S*VErSo%NR;bnY z&5A2wP0@3=R$e7#*XqGyt*vdnWjn7`dT?{vYU;H6GoMF~UX9_k08~X@Fp3>;f=8Ed z^y06$mWhQ5t3qFsQQKmLx4#}GX`4`vm(>^EdVP*DuI0MkgX{Q*7%g-pQM$r{-mc^V zrxmvUTv{ULA4O4Cicab*SL6i#IpMJCnN_{8KGU|eGEvI^v#+;z94pH(?<9~>of9Wm z@{UO5Y@s5fjJV^O^m;3R*}A4cwwL7PCGKwDzJEX3kqq$V^$P3luZNqt-{^j9%qlJI z6<~T1#9Orf1^a$-?2G=fW37Mzbv}DiE{hHy%|!^=b1;{jDSz*@Za73TSTWk(ZiX>*z2*J2~nz zDSP*A<9P|HoX{hurgf`_1IL%s7Y_E#E`#3CLJb2WKf8d?OCEiZ?hxnj70Ue6aX=y| zA30(RlBn%UK8vCRAGl!Gdo-IkKJLJG0m>s1@Z-gSK_w&nEBMg11JsB>SriZ!-U?X; z@rj|No!sLcu$wT)LBLal6+Z0I%0u+Q7_2o#AMoElBFx;}(xTYh3*9C0=P($UB)ujK zZm0*0nI%B=(c1%5Xg2K$tmkKsixHB*A*!$siC{85-%RxH$XuxibBq$R%R!qS397?0 z9+fW{-Fq z4nlxAx-!&d)y!g%oz0e6x667+ggGXh>L$^KZ`&q%c#Bb9Ph+5zf+zX7h5NieX2fP; zT04pGSD(5t^$3TK1{Iyelm1-`KwSvDZFGu;%Xh~kE?Gpk88KmX@7_J`8+-AV;!Zs| z4UY*eL)#%8o$iy=v7&0^otgKaJ!6J5OFbw^)hclL6w$s3J$znvkkB%&f~|~2MhN7l zEFrF<6%cEdl$MU8#q_#Jn^tU=4`+ckur}4rzZV5>5R?pnXI0`?M6R=&+vm(AW+^8_CAW#-TvW`t<1Vg=b`Bgz+n3aAD#+qj;kNa#Kuh z(J=C5XJ?b`AN3PLomB<9qR=xxgZr+&SdPq73pjOH8M4jMCOWSyjquSjFo-Y(kd0%m zteC5sErQM(+9D3_R>FAJiZuj9;T4>j^waBz4_*!7{3rLq=$aU(u8#FxO-RszP#RDQG6G}Zf|PJF z(k5Radq%)Om?;)i5+E9(EWTJYv+smh)3sXKZmaOQcw9rw`N0V~(7EN*4mNbgwW=59 zf1b)aDV)BJ)>-)Bh_y_`Qz01nPtGXS&|${Sd04()sRaevZ!0PdhhNi!D9KeH;U31? zko^QiSef3_s|DC^sP}9iy=I))O)E^@hBn0}NS(YejyKc_0B3>t-WcfT-1_dn@Zff< zS=0tIg6}*It0562)-^m#mp;|i*%<=Cs_*{pE5uF~6{W=Ul)XzwV84(&MgPB`7E2Tz zPF~`8BKm$vJ0PNpg{;oz_m9t1)YP1v0m-*-PvFN3@Z11giQ0Wf<vGS z1tT04J^dkQ4w(A*0>16Jj4-}cEG@$HO908-t?I(epk^zc<|z%=EcclcQXq~XbALzBr(;KvB&5LffXQ%8ED&BxbHCpp2e1{Kve#kWtjJU zNKi9NN?4)XYmPZ?W;Qd{44hub;3{4UA;l$V;eyI9JBVcT+$T>oL1aMR9kV<;7s5QV z6cH6ABqBnAI7wh-0BtCc{jqPRLt2dW3Tib9-t~)dn6|PjD>;eku5wBC!x?)Ahcn01 zENLPxDE!di&;=^%9hrVT-H3tQE>lHiG%Mgp3JUbUt zoig2U@!f$aZ2T~-3w!=SHeQ{R#cH%asl*Pjw;1OEG@k@!T!FV#47POGZ}OU^yj}%b z63DM|x@Gt8-wxc+voh7oqyvL8Ts@hB@Axl5I7gVVa0`PLZ~`LZ>8VAf=YX@_piqyC zr`(5rFHbqS{ri;5p5v%T#x5yJvI-7MUj{!#$jXEM9&AsYYc{j ziP3=hLrAH(A9x!{8b~zKtnmQJgn(jF1?4@U4jW|X(8(V^c`_Us(}3)=@S1^<7;LB3 zu*eu2*4NW}fnI`uec|5&uE{X-$51Ri7VH9;U(0mmfo+UL{sY@-v774Jh5be>HG==s z0wAY=4n@tEQ5n+9!!8$4(a~=tfJ`FJ$LKUHbvL)#DI3|l@Oy!TtU+bQQfgdMiK#ng zVBq8K3H6r{NJJ~4<3wH2SkzTr|9L{nvZ}ACz{2rwJl zi$O5tQRTN0NWq(beGE<@)&WvtLNQ=sT^Awu1|4|)yUio%Q-n(rO!Wk64Mrq_aKs~z zahI;x1vbKZ-;OSPO7uBI8~wm2v$l3bJnJ+d0_b&tdBDE{@1qo!4K9i2gbtb-oYw#n zqhMBW^+T=TL zZxAMBblS|8&bwbxd(51i_Ig=YP`>VyUr-R)>qI`LVyJf~d^+IY+3IGZ7Um=vaC8r> z%|*A^8rjEdERy7sD5YLr?loR*;@cp(s~-s*m53q&TEN!i!Hv~_fEb}k#`uG1(0XM( zc+hfIyAW95U|I`Ui z*I`t6!U#XIp%Aw&@zrJfTfVL09$Dl_x_`$*w0K6)V3W9W{X z5tN&loJ@G-vA9S`a0)bfa3h=zHYA1^tu1jaTR?7kB*A!{+v z8c?nDkT$VwA5Dfvr6=%XrqAJKJsMYCvA0Q5WRla<#;F%(fZb zeFB8mettXTNPybZtxnL^EOjW0iHY%d)B!@ja8gSO!h%VtNwpXcAV&hf2}BJczB8kB zAwlTTKV1i?CNT6k-}jFZ3cm|MOI!)tHvmNv=RP6h%lYDd4AONzIKp{;%2UZ50jmN~ zJ=HB@DtyPW16X@nf=q;Bf>_tOhY#cMX<#dV0z3~oj&tB1G=ZgIA)<2&M^!*F06hez zO@OBSy+z`+(6G8gh)+afI7~qW-TC1I^=&%@*df{t*oJ=H)XF9wYA2v-__!IjJHWyL ztE{Zl7Eg6`QevhC!7a3NCplau4B6tGk&VzJ5Qq}pC3CTx8`j|B5XKPSe{l2fUUU|( z>vTApy)dxQ2UV zX3-{WiG#4P0Mez(KRqk! zsVQ-50-nW}NCcXQ>|3_jJP~5UfhsLSr#aD0!Y?I72WuFz=`_(m0RZC`sk9iKlE)|q z^p|lD1P0py-w>o0-~lwgJQEjnZiqcL$|F*V0FSe5cL54al5+hkUO0AjcGtAb^dVtp zSk|{gUI3jQ`aPm!$ARFEx}@AY{_Pq%2=&7Lvq(Y=E3?9LhYoBvM%wSf>CdHT5wr#I z5I8QIPSqrhue-r266?_22y-up=9o|H6k?deyN=hh>hXQGI`ZD?8|#cDa0C|h4%IRO z^UtblDeKMZt|GIroIl?myy0SO#*c`Ylf~ik2JCv!QPHuRN z@Q)E^eF(;Sp&26y4&JmnlYLU+fGz6`9=7|(z+ahw#U4;$=U_pOSS8ItRz{%f zma45N9h250{ks##w^ZI z-JF|Q0;Fj+=ui{_|CF>j&Jqhz$@>kx^la^hXp>CEWW4eMI5)x|1+@qiYsA0?O&bab z@?#SqO+agw4Ljh|3|K3|_~EhEbz@;+L8lOKEs1qzez2c~&Ef`g%vKCi3|YCNR2+H_ zZj{JDN`wSJwX8|O_bKb?J8OF*GL~<#556IGmy*s$cjUD85V%CLV%pnL!3+vXCVh2^n z+^w9dJVn%!;6L3N1cCs|0&nsOiCY6z-cK}7eudpe26iNW8ILQcpBzFH{WS-U^sNLY zX1n@r#EsPfHJ5mgXF+=AK7RZHFvY;s{4i=M5#fR+l_5ppEWi*H^zr%NO=Xf+-R_M( zQXc)$%S%UzJX%l2FI!uuxGvOOLHD`*yB2O?La%x1R0Q#uB=sS*J@--MmL7p`KkL2# zJ@_u=V+Rhig5^5|{S^TZ;Z7G`@K{>k&T+gP-)ws(1%itaoG`N05b4E<#D#+h|oU`B6N7n%XJubh$t@K9XHPfXYFQ=k-=qtM7$G#Io{4cn{cEw!LMz}AjXXO zg#b<=rAs4D_=(u~cm~WIFEd4aaVDXixPJHU;jQm5Bncq#bfo=(p$Y>!Fc7s9KV#lo3OpaJ{#^|U*Wsp3%@o;ab|aj_~cHB?vXmR{nWI|JFT zE>&J>CZ<9H;l6VApbU2r{Xh_|rdU9{LUpAbYb@DGlI4A7W@Zb>+~FZEX#;q+2wUA4 zeuJ-x{Y+0D4ssHb%ZO<9!zBd6oklu->BNb$0GhGEsq}_HaEw+cvHs!tc5^)ge-EhR zSAoSQSAnd-TD2V={+puGut^2Ng-!&Y9M;*u6d8&^NLkAF|Dpkq*Y1YkA{MWb{)wh{ z2|<|a%wd3rY@ldK^uxVF)dCc(1RAam7x5RtVz(E?C}8Ml}MlwND(K;@I&0WQ3DK5Az(#{D7BzetkHa&yu+mha~`G# zHLWxl%wQsjZT|hCe>WV6zC*wIk{D+?+y;tBDZ)rmznX!8UxSu7(GIZ26__7UzrgGQ zVj;yk;Op~$O2pLSSb4RfgGK{3lSXv^DlV=hsk6b)q~egpGJzlAeT2KB%aOp&VCkIh zF%5viRZt1KGw{|-+hf;RxwtTB7MQS}5@TJ(vnfWQfRCHqsdTWBN76+U>S6p&0U-K> zY6KCUad+0|p%>UppB*Yxku%v?c%X%BQ8`d|T;%3<~ z)JYO+W%&V7b}yai-_l}YYEVPgAB>arTt#c<4%NB}?7U<_yW?62E2k{~G@x8{yzyq+ zJ%n{v?*#&-6R?le9S=mv%AR*}5^Q}n*V+zunkO&cjvX_eYR9p)z?K&%C3c+B%GbzL z)6^t`x_RCZmNxx-i(NVxa`Iaa|A#z=7VX|-<>Mm`-u>m#8XloE_tQIIuOs*dn3fq( z8Z^=N#Ky*QE5)1MCT@H107+I={GcAbPU3eF`Gi{R>}Z&Tgqozk6PE%Ktvnh$?5A>H`dzXn8NjB5${&FylZm!}u(@?93b4l}38Kd% z5T^_Y2?Fp$kM9FyOOzLgNy5Y={swVG3WOO{WjFy+g_R0CEDIpDmps11SI{R^o@M!Y z7w*6(IaV;FU z0}nd(ul#q9MGW~dKD;0KIRH(%V+7?&zoBW1oW`E)91)F_4FlNv5I}Khahg{zCnh?%cF0NVp z3tHm3rJogt{#zA#gmefnI^pmqfb3Y3-qvfR_lPI6M*+xE6Ly&+?dkGfSpLaF9P{!}HwZJYWF zB^oN*NYbVOw?k6=wj8=96t=goL>G^2%$1ohbSE4nIClbj10ojbRa;FYw<6XyJ1gsj zo#lRFYjtOsO_o^y5VTiWY|$T+i9t z6F^w?>n56aOT;D3ivZDVKGp>ScnUGf^D;9)&km(CB?ET@(4VN%YbpCLyhMi#^x$T@ z^mV`A4b6*1R44lDT3>uv*?YQLGc#h+rhb-b4~es=m7WO&9myW&p^sE++~XU6N;ezs zIi#zDGeN#;n`FEej~dlHixzdg{$jZOyK`ChkV(O;ZA8N5D9TdoqcK4<=o zp>8CheT&LA6MuyW)*!wDYtEtKsx{9WylyR0WVdbj?Kz@NuTQQyMoe8Ix{B3FzD*(* zw9WzPr}ZwESD=559=L??c8FF(r!Em;onq$q+|(*}K%ItD`G zz4Ar10h_f4R^G)_|LNDFBP)9{f3$gk;&xm$ds3{)52egAArGeR-K>L9E3vt>-zpBW zM^Q=vl8F-H8UvXNqcs8-XyGK1q^yky>v*Al;j?v-yNrn<$5R#k)4U?_VO5!=&KZ~J z5V(D|i{;(MpcM(jngs6{XG7T#i)z#Ha1x8}V}2p?{(JH7h8Tv@c{cs%nTkCsKBu=_ zm!Uf+$S%8wjI*ub$lDj@%`bG`zNmKI@ix8}?~&*_9G#qIN}t0>%#Gp6IPJRp4S)*_ zp^hM;2Zx3Pl3t@BCGMwYI=&AelVIYjk)yoqIP;<*xy>#q>G|wyf!P?eEv~4jCwN-= zKT}-!+)C2iUiJ)W?2=yW3>386!g^!hKX)j0ZVK@GR$6*}klIDRpHF+h*lVqQ$$dCM z=ITiLVZYGd%Wl8cd-_vGbs96nRzH?<@h9A9I`a1V`qc!jt!MVoo_Res=lrLM(85Fa z!&1JB1itu5K!>$;bNF9kcN6{;99~G%iJCej$YgRmqQ#c<-4a#=O3+InJct)k0J05g zMgxF-ZY~v84sIyeb*Kyd<*&By$ebk|zP!{9@)JdxHpfVO0|E16=mWl%(>~viHUuq9 z%<2GF*zxVGMV9UZ@p&pe?d=Mlt5osaf5>%$l%i?vc4B>U)qO~aG2QDbcyODEBJb&e zU0%B=o9@pl3@(?>Z7@gv^$49kO!D1F#W!ncK3b)@;VZ`|OWBoUmRVv=8ZTt8$A;4i z4%OVW<7X?jEH7JQzI|wSzpWc_HG$uBW|TWnbrSxL^JuvHtpezYIMdh9G*YYieRz>H zi5>#N^cIwxn1Q=cZ`_`CrLhx(Pym`4UuFde?6D^*zC17z$HD%eKuENB$!Rr^s;eaQ zV)tlco}n0Kh)LP>GEqtgFRv1={{Obe=b47L>x1y1BZ;e$MMl4^|w0tI!6buPHz6*?)H0q-DiHNd$!6uYfpX0f@Rv44yTa4 zp^g%BGc1giGc4Aex>d`xRBczksQ0ppf~GJcIv5$>xnZkh8x9IE*pP5FqRCbrd-v&* zn!|XfP1&FbZ4^TiTN*oqh@_5>4qec9zVDi6p0rv!@1GRD7i*eg!o<(kcuX*~Fgzkd zYioTF4LgSV25{BH*p-}Bs%g$aQSCebavrC?qy<;3GAcmM(r=7;TAfTv_rH^;b5N~%6f>(Z|f|G>82Lg4%{N{E9Nqn_kIJc1QBmhbphq_W) ze9ad|aKQ)fG0-2|VhfGw1Ti!d8g{WEceLfJ8St-*K5{s9pzkb2eAmCH?xG&(h}%g= zmPd8HSgK~H)HxU9gKEYZA)N<1Q&Mip3f|u`txL3u0P_Nw-=m|(q{%hxKbs#I6uh@J zyZzjul&(S%6+OPw zmg&<@?OgqE>$@CRj21(9oC!1wlk)o~hP99yr7C#55Ex}IirEb|jYvW!{1#ZO8?l0< z$m+tp;f_I$(gWdk&w({lTC-?>_Edx;hLi*y9l#tgMf0avEz4Xu(J9RRJito9L#XA! z88$)mur}frKqM*HB0>pO+S+s~u>ODw$%2Z9z=0oA+l$8%MQuJQP&zz3$~CVvSmDlk zfXl}G+RbXumN_HOO9oaTZOErH^< zSaRbEqD$E_V?M&1vD#c3MZ&cGUvJQzy_o19=W^a{)JOb=#zzwGoBrdqc@_WD0_;0U z!b6Ri7S`wX?SgX;+W^dhuYklMVe?Pnrl)`U6zR3s?{~_WbUBqYSeI6sR{1ucusF+g z*p?;y5M3DmT@C?RCXJfrfl52F^ve@5Z5xGKjkzIz6U)!bQ+ILsR`it2&JQp@5T#Ze zd@<%FP#-{YvnyFSS`kNzG)RTvkx!~;OU;P=guKe2+BswR*(7F_#I7$I&vLEe{04FU2s;Nvjt*WM($V|CBmH)(am1 z!)naQtoTYuISetKR1TtIv8K(?H}09$Ak zz18;TbTwLZe}x5Cqg};s)LEXtVU^W&QF^ZiK zP}o@6YWW>u9GCX^szK>uJA!=VR44Bh=%0j%77pB7qsvN&s|hAGzB@=V8nki!P0iSDCV@A`p<;aE zTON3M$+z4Ebxi~fYEALNK^~o@`JJ^E3@-wdL-4nPkG4+${XlPRW^SI@<(TRQ>)E}O z6hi*;@QZzk(_m+&D`o5Az-2K$f#Y3aWxU2L`o`xZTFHW#nX&?RMlU5bV)C$-u|}3I zfp4v?r$ZKL{4Ji_02$Q?Pr?OCk)T7ykvclvKMQ0Cz4`(=KtybDg|v6&$(d&EG3~N{ zcE8s;qQll(#_|26=x06a>X{p6mv~!O0;BqQYxzj{Z|gQ(w8+T%f!>x-RzR)b7Hxi{ z(hOP?%r!YdIkiQm|MEi61sIV*8wA(JFEN*wFJIzjfj8~Wa_%6dfr4|}I$DlAJ}D9P zr!(|W=}-4yB`p<=*#;3)ofO3GDK&sZR0f zJ7-#UTJB@KUL2J zuglE=bZvAVkXZorY6FbK`0thk!?u9^89u5^VWp>#hJYAdgME1 zow{;!!>a1o@r$>Xa%V}+UqqQmq2-Hgu~mnc7};3E1O9Jx4;A(+_a=M`8p`m$0n!gU zg|9eor^-9R-3`zRsvWf3yGHI|@XXPcv*uD^L5e$iURZbCa8EDf8dqSWM2n{(ajVLM zUi`m(0&`%eTiLBE&T?j*_9awmSs0F(3@Ki>x?6AOk3r|caUxd8`WZ|7A3ZG>?q{0; zytmgsKM-)_jCdccWM5XiBqkgs|>%ozQ9*+DRZtez!zAq&Sflw1|4LE-C%`>VMW`U9;jPy6VR)>Qi zQcu)--WYo1yLPUZNJ#O;$DL^_(bO;duaGa8`5|J-qq@Y1J0d0 z3I-8aiMrHTk3wV1@Q$Dup%GEQ*?H+8jtY1a2@VDrFfT}zwH}6eN+;#3V*MP}MZN*= z*WVXqySl0eTojslBAJ<270qBLy@P88N}sOx@3%nPl4d{&9O_B0p6yye{f7VFpWVmY z+yXZVT#BFzqNde#IQ)LE@>}qRRopyz^{xVE(lZAkyZ5X`$$6xDnSNWOmS)MT3QfXw z`KVviwoolIcgLk4*TZ-4*xA=Vv@!yi>D=SO!YGZ*5O^I66Lp0Nxgje4Cr?G9jw766 zMwce>38Bukc)pR@Kf7Dfo@S{)&@n753^GZ5t+(l4Q0I4>v)ua^VTzcjyraN-)PL^| zdiGpzd-Dv|+~-NMRg8ZqI7mp1_6PF)PJ2Nsj(}m@ba5De3TVOsOr~LU1I7tG_i|J^8_f7{#F&-}tciqcw5M?v)C?T?j z#3e0H}PfAzr{_K%+iZ=}2<2^l_$n(WVOi-LG;P^*FbJO(q=6saaqJ40x`NU=_fd{Q|@g zab@7EOjSqhj29w2UZ*8Tc3)BmW!y0?)R@DV!E{D5gt9Yd|D@L9rIY(h1(g)ZjqXP9JC{yB-amYRM4d8c+Dulpgcfn@Q9q&?lo zz3v$fI)$Xi(i-oiYYHKkk?*8^O)49mmysqL?aoaJCW`|p47(&N^x$I!2+hauY%kwY zI-NPauWPVLh%S;;%UVWtfGdXd8PhF;w~J~?jdX_|QPZc{oA~icak&4y5v4)8@I<*s zM@r*q#@4R7_X3>jrf|^W3c&H=R^BDQew$#X8K;$<{-wpmT>=`s?gcx~^OZ^rzie*i z7ZZDR)OmV`fLqyG)!?y}geSdDCe^(ubK*W_k6IxvQ!yI;uLIBYqd1)&W#$m6;Si~J zfuePBU*BzwuVfl$@{^<0uV&D7sg~sqKVg&z@t436z4uz0qr918k2EOjNjOY?J}F=qKzlU&o{pyLBTxhR8iR4>YDOY#YyREMUPu} z*PAP(n)Ly!Z|oQ;D7We!;$Rtzm?rJxC^wNB03%Ig>JW1t33|mSP=M-Ai=7aN#Yh%| zz1Dm1Ucl+p9b+h5^G-ss3x+>|Iw7vb_%pfOzvZ9C?)uk#7jwVLWIZ0CayEXX@SXI&VF8`M zjzPSJ(0W$t4O!g+-lS7PwR+2Hk4v>#%V!STE3zFFS0UNkDquWvMd2W)NVwmbqskI* z7(F0wMy)WOwC0Gsq9q8zfwZ5kmItFn#iu>jALX3=mLq;LWXCv&912>7Ugtg1@3#x^ zDlk6YZjEvboHqLp-L>OsQRF&)FRADII_RSjRJjZV?}3&4U3lMZ$wLiOU1R zK&!ZaD=jIZt0wVRd}RBp6)m}9JT=v>qm40lU@Zbit5nHKv=AH|3QuP#2bg#Kk+AT| zs49GdLIkS;=6YP%qyGi|vsbtvfeN==@n{{zy<;|KF8l`=z3HXhruJZO_Op>_k+8cv zLZR2!=)B{_F8Ric9;XxIl<1+Xdb*AGU1xUpEcq)J+Jc4ZzLsYA_3fM+O$!-Q{BQ3x zk$qp=?=XF)JZRQ)N0x+!mX>tD$^CA-y=(@$Y9v7uEd(;b2-&8Q(TU@Bw=&fovPAD^ zQ!#|ZOu6glwe+|je08ANX4IxEtK!tQ(s-+%hGJxgR@XW5x!;&AD-`arcDYY?maLY4 zW@la5{re<@bQrQ_kUWQbo&eE@wom?X1@6 z_ya{AmI=_E<}|3RyacCVaY<^8@K0)jS_i2uUp*jpz38vcC@;6;TKC%F2S${QvT*RA zl;ES+9J#U=|2gDsZcOg~>(Op*+@Ic;nR9Ae*ysMn%O!jv8l0E?7K(nTc}G#7G7}OE z6xQ9g!rQxp>{`PzBUld6ULME2X1RqCo~9-P-)8%@H#S%1lvQFqzfZ3EmOb3hOjR34 zA3(NN%+Fh#mOVgQSlfSg-tQZETd_5Hu?^V+iD=v?%kPsY!K3jguM@KS?iRZgi=TK%@BqZsYw^l+uNaiS5w~U+4LMu=l(M!; zj5>9Tbh+k;k@lzhKpI&y?>nyb=NBE$%e6^dzTf;vH!g-Dzy6|?gr%%Sab?KS?sI4h zRW?>9Au7t&Cc8U0@ZCovlMxCbC8!Y+cJ7{JxtAiMFd6)@WXFV0HA1)I==03Xx9nB= z>*QsMW;yP%HatG1BI2`pR@y9gx<2mz9z#8@D2p4BAsGh3sJs&J^UUQf7rTSO%1QrF zh5JEE%dCy!!u2yp9*h4XFQ(hqk^f5GUaO13f5|<$Ej7_2S#Y88fO7yHos9M7%2(DL5$!_h!v^)N z#>F|q$DWPGJWl=aO2%3(N`J6aqbastGVpIz=Dq8s9@7R)=P%tgP##&3S-Ezc@GBA~ zpp^F0*^eAfD00WQ`wR9FAKS}RTl?kd`iyDDN~^;1m+qBa!PiW!kniU(u^-A1c`vsU z8xI~nMAC3|@BA_1i{<1m-DO|eAFiYR)Y(ad>4OiQP^$BQ`2L7=Q*q(0<^a8rGI`oN zrB$KK!PgCGgIS)71iww5{5Umxc#^bYv)$t-pSyeh?1t);vYV2f3<+60=L?T13&W`@ z`o*=&m-qePtjkc1AYYo2MQ@Z{W?tt`%A$Sk+{AS9*WoAI-W^RD$^8x;_H*CXg|4=D zw&luVyFaKc4non)x5QLUuW~MKR42=mgCfeOL$E#3OM0I$>C=1$nE+S2xVo1KXWGZI zlhf_yws(_E2REpboD7h7?R@4{kPiKqg(QQPub%tYocoPChTSI;zdie?)=|GaY9BnJ z^`&fRRcA_yd&n_;{JPzq!ra(i-e8TK17~X1?CUu8-;RCH?Bb&wz~jHwo?q?IdFs20 zmE3`YigetURkROiMu|M`N?@4EPJG9_ur{#XpsDzMX0tQX+4rUDnnKd3A9)CASo~zg z#obpemx9yflKT0oqUwY0wH7;^X(0EdYn^lat-W8`V`E)@%6#6&RW(o+a5>Frx#xX_{R zB!cNWI^qw+Z(J>?KEJ#D_Kd3p&?v!YwPHUge%n~?RBv-yH1RuOa=WFUrFGAGSh={> z^LtNgd@6>;Kl#q+2eo$G+`fI!x3cm4+LV0uj~D0&`*kdLjiAJ+}s))?A;9#nim%D zHUGf3vzK-4tt<0S9{0D5D@s3KnUE^ZeV&?;`l-q($84-e6I7UdWG*m#ICRDQZ`H2y z6qel;sR>s8>`!iwH_W^*eaApo?W(|{Q$L*3pCZ36kV_M43zvj=59+8!fo9{dAsr%@y|I`oW^N-bD*>3!K%$^bEkr2j^ z?VJ&mdeD0Npzqh0>lY&0#3WfK*1n$b`&u{Tw^_+FyfVS%HDuFjANc*xo4X8_)svq4 zFBBsIm`rWzE0KmsBa;dz;?5Z-iKied|kF8(n3j z`n4ta=L~J-C%!e=%WtE8eyyK6U4PnKp+9@jckboRU#c&Dbw66@?%$jH!_QrTJEgtU zl&^aqaXB0k%D_h7gy3+;>o<;q&tc_U2>=uZ2B4IIjq4Wd6$tT{+H*HCk?DvvLie4Y zf3mZ;7Xf#ZvQz2#vuF1vvzc+AF(u{~y`OZjN~Dxwc4BRQHX+DccbQ|>xbRb?=$V}P zxqyg(hmjhW_iP-{9=%Ar#uw<~JTKDezqsBv_N3t9CMl&yYukmS8@DMM77r{retaOA z5cHFigl%Wbu>1S2)tcV+m8zq!rT67Xw@~nNZ%VIF{`NdYPDZ=;Mpn};=KJ}%!xx_A zzO6nQRyWsklEh~?;2=?~P953am8UbmWA^4#^CNcWsmar-iaZxz*o$*pii@8sZ+rCY zY03Ga%9PPb=RcI=*2|+&Je=n8)}0<($w>P)YWJ17eE(sm;xY0-MZw25J0svo+4=MA zW7PMgcKzzwZ+?I!=eLy9(nPt&(5HtbmNq&hsk@9_?%F&r{+Jl{wR*_P;^J^7UH!Cv z`rW^B1@?1SP8cg*oa{d8e7WnomefI~v!?8l66-%Z^aR>^J(KR6v%fW+$~?y6*C{5N%xefy3`dM>9nDy|WLuLF|i$dY{Epw9L`E%%8J?#q{!4f_EXZl8&~63K7PpY{}%O<48ym@Tfmwofg2{%A37xsg%&`fdB2Kf2~N)m@Ij+$-?!}eQZqN?S_ji$sy;{ z9`l=N+PTzA=B}^hhhps-Ul{GKeLg(ULwoX``m4|fpXn= zg{W`l+&{5hl}kBtZ(;SVtKYauLP-xU)uncHO5$G8kf)Eurv6WRZ{ZbH)P{?L2#S<+ zgCK}VheLyiAfSXGA|aguLw5{HN;gP%Nl52_ba%|qF@!L5;|y>Q`hCCOz3cu1cddKR zS}-gYoVCx{Z#>WQzI*Sq0>&=0I#T=#t+UO2r~Nuonet}7Gx3(~&x>x>!g`TGJLo$v z^S_lBKRcs~UGfUQS#Y7pKqQi>YiPAi*2x|AL-vEYeuOR|*AXy1gY}pI&Z{fU@v6#( znbuRh#oZiJ~jOVz)6|Sn> zx?vU}f@t=L3=NE6_l2O5PAydD3>hr~q6rvRmeX(5)Fui!IZU_3azr+zT<;tV<=XE+ z)|Q82+MVh57yj&hM42C*s|`0_f4IId1UZ^{^-sjMZsd8|t^?_|*JkO96@zzzt9ysHSozhf zRj#L}B#OWygOWZ*EJ5LNW5K{lRq^ed03}IYa1%976(td)>Ctvt{a$elKasfNhH)nY`8gKtTg~BXUV1ch*yZqoWk4}$Y_$_Q` z?0}~Vk&qfYz8_9p*)CBR3Y9)mn+4NU>=Lcc$;JN}{IIKKS|=vF*BpAFp(${>8!iJK zN=D-X_?v{5#8!POU9n8;`o7xuxX5{a(?#pt{^lPx{biJ;dV@>vid+8x@6e;VG)e#M zenoE7K544+l?|Q5iFF99JX~Ug&ph?DVI4z7k0tf@RJWD&=Lu8mT}`$|H#rgO#X;#C zhldlu!qvGEarWuQo4<@zmS=l19s}+&lcBVFltXARo}_72T_1e*Xn@Otk;4~bPXh8Z z6ms?b7~GQbgV8-X4|3g|qpAOK9~Ak?oA^fp_r|Ix!^R-e)^wRq=0FHhj|ex#=vu6u zDSkzwQpEGooTq*|Dm`9FxykGL8cCG7!r%EIpztY|8Ss9!>KsJ&C6B3kG9Y}EOUJyx z<|mtN1H~^6y_5Iv760GXcttxhVO0Jj&$2*of*jSD{gp3D*QQdKWk5>ulP<{6+((5LBgNo=?-)|8C`OcK z;%VwSlLN;+830FO-Y!B-b(ys^G4baxRW={`P_O74@;AZTaN>P%L;I5m-1HT*hGGJb zshKlv`;RIwut{r*>j)KGr~KPs*&nOz^CLhT^lG8{j{+Zb8*ziHx3c)`B2 z7~5VZ@mV}^p~8LO%WOiI&H;kxt+%;gB7K8Y&-ozYBHbN*F@@g`D%ph1EOkzc0cfiE zqKgP$(uyiQ#38-u$|F$U>B-_V73hf6MTud>v=AsItz=&O1GhHd0`aDK?-SyW`mA^i z0$$=nx8+jzY@{d)u;14Ogng~Xl@#!gHV`UsX~KFvPnUHX&jgsX_YGe#I^q+CFyPv7 z)7CF^9__6n$Ui!m7i*`KNUu^Qwx>52HPPs!1sFc`2nS#1V%+_rPo`merC`QA1Isr* zkujWoM7zoButxQ}8Z~bP>n!Gn&=Qx+RQuhbRENvcRG*2_k> ztOt6Y^T?qYUlbwkB6Xlz=5@dh5V6WOBtk3TXLF7iq&CpXm5XsgF}UMnv`&q~4X4IsQ{e@^$As_z%Ket_5`>arJyO@H+)&gs z>N-2w0Sr3xRA2#?9pn0s+yHwcDvPX>$we|K0gKf#eEzT}>UprIi3PO+YakCUy-FLJ zZW%IjOeTPI46@CnFjFMx5QiE9h((u&%mJ*oB#m-J!+Tj82UbIRUU@2zu- z@~0W=SXzjjVeTnv_iPIn=T+&UBFKJ%bPIrh)81Sgn|D z%|go$n^ePxdzG+|b%@6Y&}%g6?UOJX00v0rJC;k5xgd#=-1;dNZ-On_$ZL>3SRIfI zu@v&q>pPh;u)XKge94BKdw~A%2G(-r=CWOa0~_kM>B&2n=+B%OF}=Vx=QaQH9++fq zZs`7)Xq^b)`3E1|lX$mTpA9J9zwk~n+wFkLe)7064y#{rkX!WR$bejM--cQsJ1F_s z>ino7-H!3sZU_sZ#J^x?*B)WGM?agpo4u}#_TNI$izFrPHH8DD3I<(x0@a6Ho^fEz zlDmX(Rn5`Ux%Yps=uzU5qESz0RlKZ(R?h8KG%z)t&3us{l1wf0Mjfs$2*t)HjYb8jEl&LNgNk|b>SmsB$PeWiQ40^5pgp5_cg{~XL$ z&(yTkbvL)>r=}=f>XD>PY^?z&``vz-0H+Y#?xlEpN@((p`d=I|n+x`KHED~K`suZj zu~xf3>ZPLlIt{+!WRJc~JlMu^tpqUrk(jet*J|tUngQ^O31p-W$x=`^Y)eRTzL{`w z)KT#LYun*Q2V-MirEjFui8}CcZ_QNOId!7Z4>3k{HQNvC-^mQO-tXY0IzPHe;{C%K znCfZ|MZWfwEd6xo8on-axr-@3GH3({AQ*9p(-N@hgl9bLW&n3}v!edYWs-awJ~;oF z`h>4TUG_#GON5b|lE(<5ZSQM9&U5I>#A4r>_5)a?yrQ;;AIfQY8R7nUHF3xNV1*NX z`5G*_{xKhVZbrJOamDfYfmswa_{Px1)~M!WCTS%-|(Pzo)@9~ zxpuC90pM@1gLd^)*JBBM@eSep=I0@;lxS(`#Ion$VWcQGjpJKc=iMqSZ`ZllsR4@P zVf9Fdk1S&|K!*H1TgP~8<}+Nd-_j=CllBpbnu|f2zCmq@P&#z^J$Cz(|HEy))%D=$ zKuj1hn<8@DsFRG=C4l~SngfP-w&s^>Df-|R(g(_U8G+#S<5+6obKi_eacvMRrRk0?ucRP9UQR2W?A zf=aZM0M7uG>ArCio&9VC5QXOn<@!((-vuIZPLS7pKGOQxpKGk^gP)ckp1#tMbzjS~ ziVSnzf?@$`+IdDfwS~?#EaNTJ^O(sKd_4vqlo_@XfCbmqD5Dm*Te}?`V^7oT_ecOF z1tk*WuT+^fLse~oj2R%l?Rydp=98#-UL%%#>b3Bmz4CKtoqv>UN_x~sk~a}^?>61* zOR>?CauN=Vw-yz3%oD=36vKZvGn-{zIENjo;JH`Lfnf|RzTl{~{|I;HxHcQ!%($b( zBSrIUB-43-vS3IqB*zp?Dw-==@w}rDqcn?!Kf_rM)$Rea8a(Cy+?s*gqv!e z?6$JaxL>B&+zS_5tgBJ&HJQn1J?;(4;NO`>)qAf|DK~9P!FOrP!^0O^0~hsWHqF#W zPG1>OsU~f7rvH+D@Q+2);$tuM?W&*HRd*KoalR?aVyKDp}mN z!^3HX(dxJWD#@5l5d9?p6WF!tK($`0g^6(c{VUtYV-7udu$qgSqf>zjo z%90m#Q!v0Y@$XZTVeCs@Q2~(22zZi*2SIF8Y3J)sFY~EsArcS2>wE^NK^~B9nvYK& zi#t!m4_;Vs+5#xy@jf)*v9d^PgoMZ8fUExTq>^UWhBDS|49$~8Ucy*4dlJZ9_7(aX zpO@&@FxQrtENBBJJOn8F1^}2ij7!8kfT0`6O7*mmAjSx<Nu`=?42Ukr>H(|6)-* z4+vj0PmEU29#6y?=gL7%ezL782PUEK>>N(JGoF1a?ut5v(<@(-(_bfq_b8*qC&C-_ zAO|6@G-38*Nyg6>nPil^_w2e!vfc${ zcs+9oitSJqtr;FE%tAnGM_8__LT+?(Hg%j@Vw6T&yTL+dGd-6+vnD<%5}^(HZxNA< zW>pS-*)*Gw6Le^6-Av56=2Alg>!t@YA1_eMsi|?5`I~oQItfMC;Uv}9wpDWtd*3MS z8W!fA`VGvKu7y7YooHwtPYCHd?ElQFpdu6GX3)?~6aL)mPWkTBdKQfP%Br*RzvkJZ ztgjD%@&8z8CC`!G=aljqc0Q^?vD=9C()dgw8lbL*fM4u=KBh0*0oJ;mFO)(_=YHT9 zq?wYp1ZrA8S@IT*u9FiV1h~M*iVGfxBRoKv_B;F3Sg{kiBz$^=%aj>%?C4q#=%smg>>?oZ?M^4`)MKX~JF^ZimEA}!|v(iA^nAuI@;|4MiwwfulZTm}U#ZFmj9ZzP6S^&#Er?}kT~e7gQt>u?bl zfV{io+4-o_t!6pKv{n9fo=!N{hH}x}+%YkpUh+Y~K^(9=+!ss{}5?l@Y0<%}B@J@Epp` zdAECIaR(;r0I=I3ymybz**a~Vx?1nj2-9<;00C|@tZ`f*RP>TA9_svUNq0Jw8|jYP z3eo~(GS$yHs zqkM~<3X!JGU~iNm4i=ryxay<%Y(ZA8@Gm|1Os&QRG)RDU0A^!#kQB11tYmssyq?Ot z!@m;|E>z84WEs7lIQ@~KybR&pm5mKlrjpzR3T)55zoj}Q(T{*IVl;I~m#4Xy0^_*w zSarkr`UL~(vNdvVL`nmJMy=14Uzi>BoPuwQD+XE=`aWn(;7jsW5xWHx{;=2lmM0tl zLRY9Mhyg6U6Oa{ii?dUKItRbw5eVgl^n{EZyYEy*!rZ}N56D=OqeS#hbcS*hNU!a0 zCW-D``AKckv|Dm?q2sCfIX(>*k)wha>3;&0d&1n&nE5RNA(qBVoqKk6ZMz*?lU1(P zSASODeHU>bOg_S0Qc1ZpSwh+~&^w$}SrQk^T~Ft_-HlU7FvXbixP|Bx=Kdyhx@(p0 zbgE6j!2ww+G)Eudf&2|fV+~`@>wwa{=|`Dv)@LgPNUPF)e`<1b3nsGO2>HtO7yt}J z%Qp3AMMFUMe+L_O$@vfRzj%=mNu!`;+G z#r=}F=|zIS?@-|-hlI}tx%;mNLd^+l@rBM#UAVLqN0P5|bZU(L!n2nS7qPd5Yge%Q%>0Aq76hc|gA5G{ z`GTy!01*N2S1w<55+;VT(k35D|IH5CdQD{af?S8Q zWwh(Bvk2+?*xw<4hmcMW^Zo)0z(s_@F$1WDW1qgu6L~@E+hI1!+R=q$`!Hk1B`7)0 zhHduv*tZ>jXo8ii?9r5hGw-W_*4;Rj#b-pel9#I1WqvWI$X>7};IzY~&F0?*cny}m z;y+N+G3Q?4OiW|Y0>1?quWhzylwg-$5E@J0`MJK*MO58u@j*ahzAf?F<>lLNIM-Q& zmio_zDYkYOT0hZT&E?hn_G0Uhv4Ty}Gl0tO!2|t*tiHSd0P6+|6B-CDEyOFdk)_Q_9#O+X>;nRk?!Y zIdpapkF6A*FB;s(CvzpSG?ZHtM@DU!Y|c-b4D*#}-Vwy)`f+dw{Kbd+FOx~ML1WJ+ zhRPa>=A42RqYGR6o6%Zo1XLfNWz33W+0EMQz$DXjT~|+^@SLY`vY%JXBYJ)@=gKJO z_GP=`aW{qQX@MI}8|}9kfWAZEA_>MWDShxWcm8#>knhk7K8$EHGXn#GOsl|9;3f0N z3LR4C-L=RrCJel&C=6k?eUuQLxSL2!T?{^Vv2>D;V$iO7Vr;w(R@`Z*Xnf^XQNip3O-0~mLdY4m#KgcwJ_@D?`#2kYP2z#SpI zf9RSQX}T`?H9E7N8G~7;n-?EwMFWia4=A9RF^(?+k^Wpo3$!FOBi6&#aiV-~2qRgN+@^+4Lp27rX z;UK8}UKX$t&1yeYp0rDIRUp+xG*^UO-hPz3>x)vX$6uki*M<9GCD49iWbeCeaNp0a zT$uG0D>ao|J)cu=j=CXMiB>Jiyh+5*Y z&Q~D|axi>KV0O0~m=rqhOl#cxsJ&D{JW?q>$}c#-CAm#8E&ylc0vbry0r#+;i;F3e_vg$o}|Dl1r{9D z9Xz#d0bH#Q;Vd!o*_9Y#oiqnc)}SLby0tubpR-u6{mc|q<6#_z(i4rghd?U&;CUyy z>;?za!JKO=%=9WY9o!TiVW})?Uf(+x;bGEuR`iT&b^ie)MDx$#cP4^`g_qginyu^n z_P%qA7Bu}tniVR4iIV-sLv?AcwkLG>eMRR@3NeG;`=FxgIE#Xd-=pUVvZyVTjU0y`^6U5I~%@yM|O4(uqhr@q7ovpdepX#_5S5fRp5`=U7n`4w%|&rv>-~k2;?)z=>qo45vBd`U z1%wukZ8kJ1gECfpBKk+YRMUIJ@^=+$N{ zsdB}3O&WG`#cWK3JL10!7AOS;{L2YTk6v33VxU>N1W&t?UzC+6xVc?~TNg+tJLWS(z;fM9;H~_v3PmGfCw91u41tCQAE(cz#0G*- zErRi! z$Y5?w;4yiYLGbo+_tK9$PkbhrfA*Coa+Oh9^3%_K`#cfRP}^&gngXily{~Da#!Q|h z__|&#mg2mLM*Q2~xd~pXE(8g6V-)+Xz&)IK{e>)u?+1X2Yy*Q{Vf#ffW0pP>C1RW2 zSOT;@yE%e+7g}m%+M=^?`!AEdQcC8rqj4DVjao09dC9gGNWd$=%u+7;I2zkOU&El&e8uQJCg=%M2VNTK0E6-)(P(y#;MGbX(*b}*L_{49FhB-bz z)>ZAUyLOyu7gEvU_6&zK+AI1n4YXTnyA3^*6wswU`pyIt9=05|aN$1LkpS zFSGmloD>f!NqM=7{j%)*wp4=+ERH=|h{LfkbQXL?zhU8of5V02V+9TUG6nFc1O=Y_ zx6V7Okm51Nl!Cj3*3@_hI5HIpTvKg!%hSLJA7j_HM%)n_{1vF-nA)TC^*ZIWv+&*M zYfy+zTd^$zsNERcWKD~ezGtyKQBiRksBIHm%_TXJ{mh~}kg@bZa>|16w8sP$q>6GW z*>7kdorZuho0RSK0PW}2@BH{!bzELmWL)O$(C(e+6@HCrc|=kIxkv&RI?FCw@L{D< zkLx27VtithC$9-{HRsFdjBsKJl5i#N3fh~Gs0wYEo#YA*Zi=n3VZaC!9umEw{-K^y zP!2((M(rO&<^ad11KGi?g&!*@6>w=s^V!M9q;l&Bu2B1wsQ+!21<;k&BeHK;NlfU9 zrJRZ{c7qa<6b5oe7-q3Xn9-sQ6%|6C!xh~n;x|PRm?>TRh)K7-Axa^Tf+-bnbPqVR z8#^qS5A!iM&cknb!jD_UYywy9=O|fU|G1wTlw+iKtd$q*cwC zl0_T8&b6zWW0nwO4*34KEK}W&AbK}awm#s~$rC5(4hbP&w;$-{1|SnG<`AI}i?Yey{a63KJ6-1yP4K1sNYC)bQa@_~7T0E1Sqc zz}h!Uf|3;EjIZJEy$^jYuB7^@DPcmZK60?ov&pb)E*eVJUZvz0xT^oT%fAl=8szha z+ug$d|BHoy^~Jvc^ADN4VzGRR`L`AIpRwK|Ihp_MHvcIt|MxcX&vd7y91LIDl!Yk?bx4-;9WLW=iDF3GHf1RxV eOWsQN4OT57X%ml&s1gQnDab0nDtl@0^?v{Yt_G3- From 444f6071b72f00304bbbff2dc6e97d9b458261a5 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 14 Feb 2017 17:21:52 +0100 Subject: [PATCH 08/23] Fixed screen bug by adding an input before starting asciimatics + improved path localisation in the logs from modules --- bin/Helper.py | 9 +++++++-- bin/ModulesInformationV2.py | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/bin/Helper.py b/bin/Helper.py index 8d9caf3b..7d3abcbd 100755 --- a/bin/Helper.py +++ b/bin/Helper.py @@ -158,10 +158,15 @@ class Process(object): try: if ".gz" in message: path = message.split(".")[-2].split("/")[-1] + #find start of path with AIL_HOME + index_s = message.find(os.environ['AIL_HOME']) + #Stop when .gz + index_e = message.find(".gz")+3 + complete_path = message[index_s:index_e] + else: path = "?" value = str(timestamp) + ", " + path - complete_path = os.environ['AIL_HOME'] + "/PASTES/" + path self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum), value) self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum) + "_PATH", complete_path) self.r_temp.sadd("MODULE_TYPE_"+self.subscriber_name, str(self.moduleNum)) @@ -171,7 +176,7 @@ class Process(object): path = "?" value = str(timestamp) + ", " + path self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum), value) - self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum) + "_PATH", complete_path) + self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum) + "_PATH", "?") self.r_temp.sadd("MODULE_TYPE_"+self.subscriber_name, str(self.moduleNum)) return message diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 930d0075..c41700ba 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -111,6 +111,8 @@ class CListBox(ListBox): self.value = self._options[self._line][1] elif len(self._options) > 0 and event.key_code == ord(' '): global current_selected_value, current_selected_queue + if self.queue_name == "logs": + return event current_selected_value = self.value current_selected_queue = self.queue_name self._frame.save() @@ -229,7 +231,7 @@ class Confirm(Frame): def __init__(self, screen): super(Confirm, self).__init__(screen, screen.height * 1 // 8, - screen.width * 1 // 4, + screen.width * 1 // 3, hover_focus=True, on_load=self._setValue, title="Confirm action", @@ -305,7 +307,8 @@ class Action_choice(Frame): layout2 = Layout([1,1,1,1]) self.add_layout(layout2) layout2.add_widget(Button("Cancel", self._cancel), 0) - layout2.add_widget(Button("Show current paste", self._showpaste), 1) + self._ShowPasteBtn = Button("Show current paste", self._showpaste) + layout2.add_widget(self._ShowPasteBtn, 1) self._killBtn = Button("KILL", self._kill) layout2.add_widget(self._killBtn, 2) layout2.add_widget(Button("START", self._start), 3) @@ -351,12 +354,14 @@ class Action_choice(Frame): def _setValue(self): self._killBtn.disabled = False + self._ShowPasteBtn.disabled = False global current_selected_value, current_selected_queue if current_selected_queue in ["running", "idle"]: modulename = PID_NAME_DICO[int(current_selected_value)] pid = current_selected_value else: self._killBtn.disabled = True + self._ShowPasteBtn.disabled = True modulename = current_selected_value pid = "" self.label._text = self.label._text.format(modulename, pid) @@ -430,7 +435,8 @@ class Show_paste(Frame): except OSError as e: self.label_list[0]._text = "Error during parsing the filepath. Please, check manually" - for i in range(1,self.num_label): + self.label_list[1]._text = COMPLETE_PASTE_PATH_PER_PID[current_selected_value] + for i in range(2,self.num_label): self.label_list[i]._text = "" except Exception as e: @@ -744,6 +750,10 @@ if __name__ == "__main__": TABLES_TITLES["notRunning"] = format_string([([" Action", "Queue", "State"],0)], TABLES_PADDING["notRunning"])[0][0] TABLES_TITLES["logs"] = format_string([(["Time", "Module", "PID", "Info"],0)], TABLES_PADDING["logs"])[0][0] + try: + input("Press < ENTER > to launch the manager...") + except SyntaxError: + pass while True: Screen.wrapper(demo) From 0254c51164b745a6d537226bfea8d0541b2d8c0e Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 08:26:48 +0100 Subject: [PATCH 09/23] Added end of paste marker + handling screen resize --- bin/ModulesInformationV2.py | 54 +++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index c41700ba..23ac6a45 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -382,7 +382,7 @@ class Show_paste(Frame): self.add_layout(layout) self.label_list = [] - self.num_label = 41 + self.num_label = 42 for i in range(self.num_label): self.label_list += [Label("THE PASTE CONTENT " + str(i))] layout.add_widget(self.label_list[i]) @@ -417,6 +417,8 @@ class Show_paste(Frame): for i, c in enumerate(old_content): if ord(c) > 127: content += '?' + elif c == "\t": + content += " " else: content += c @@ -424,11 +426,18 @@ class Show_paste(Frame): to_print = "" i = 0 for line in content.split("\n"): - if i==self.num_label: + if i > self.num_label - 2: break self.label_list[i]._text = str(i) + ". " + line.replace("\r","") i += 1 + if i > self.num_label - 2: + self.label_list[i]._text = "..." + i += 1 + else: + self.label_list[i]._text = "- END -" + i += 1 + while i args.refresh: cleanRedis() for key, val in fetchQueueData().iteritems(): @@ -498,18 +512,27 @@ def cleanRedis(): for pid in server.smembers(k): flag_pid_valid = False proc = Popen([command_search_name.format(pid)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) - for line in proc.stdout: - splittedLine = line.split() - if ('python2' in splittedLine or 'python' in splittedLine) and "./"+moduleName+".py" in splittedLine: - flag_pid_valid = True + try: + for line in proc.stdout: + splittedLine = line.split() + if ('python2' in splittedLine or 'python' in splittedLine) and "./"+moduleName+".py" in splittedLine: + flag_pid_valid = True - if not flag_pid_valid: - #print flag_pid_valid, 'cleaning', pid, 'in', k - server.srem(k, pid) + if not flag_pid_valid: + #print flag_pid_valid, 'cleaning', pid, 'in', k + server.srem(k, pid) + inst_time = datetime.datetime.fromtimestamp(int(time.time())) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], moduleName, pid, "Cleared invalid pid in " + k], 0)) + printarrayGlob.pop() + #time.sleep(5) + + #Error due to resize, interrupted sys call + except IOError as e: inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], moduleName, pid, "Cleared invalid pid in " + k], 0)) + printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], " - ", " - ", "Cleaning fail due to resize."], 0)) printarrayGlob.pop() - #time.sleep(5) + pass + def restart_module(module, count=1): for i in range(count): @@ -755,7 +778,10 @@ if __name__ == "__main__": except SyntaxError: pass + last_scene = None while True: - Screen.wrapper(demo) - sys.exit(0) - + try: + Screen.wrapper(demo) + sys.exit(0) + except ResizeScreenError as e: + pass From b272b1b07b2da5d590dff49fe6ef58a661dd026f Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 09:35:03 +0100 Subject: [PATCH 10/23] Added a way to quit application with 'q' more or less properly --- bin/ModulesInformationV2.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 23ac6a45..a849a5d7 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -2,8 +2,7 @@ # -*-coding:UTF-8 -* from asciimatics.widgets import Frame, ListBox, Layout, Divider, Text, \ - Button, TextBox, Widget, Label -from asciimatics.effects import Cycle, Print, Stars + Button, Label from asciimatics.scene import Scene from asciimatics.screen import Screen from asciimatics.exceptions import ResizeScreenError, NextScene, StopApplication @@ -117,6 +116,11 @@ class CListBox(ListBox): current_selected_queue = self.queue_name self._frame.save() raise NextScene("action_choice") + + # Quit if press q + elif event.key_code == ord('q'): + ListView._quit() + else: # Ignore any other key press. return event @@ -785,3 +789,5 @@ if __name__ == "__main__": sys.exit(0) except ResizeScreenError as e: pass + except StopApplication: + sys.exit(0) From ff1df07b5d2b2f85026d1a723bc2c7d2faa85187 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 09:43:18 +0100 Subject: [PATCH 11/23] Added comments and moved portion of code for slightly better visibility --- bin/ModulesInformationV2.py | 98 ++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 39 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index a849a5d7..4097fa0b 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -44,6 +44,10 @@ CPU_OBJECT_TABLE = {} COMPLETE_PASTE_PATH_PER_PID = {} +''' +ASCIIMATICS WIDGETS EXTENSION +''' + class CListBox(ListBox): def __init__(self, queue_name, *args, **kwargs): @@ -119,7 +123,7 @@ class CListBox(ListBox): # Quit if press q elif event.key_code == ord('q'): - ListView._quit() + Dashboard._quit() else: # Ignore any other key press. @@ -170,9 +174,17 @@ class CLabel(Label): self._frame.canvas.print_at( self._text, self._x, self._y, colour, attr, bg) -class ListView(Frame): +''' +END EXTENSION +''' + +''' +SCENE DEFINITION +''' + +class Dashboard(Frame): def __init__(self, screen): - super(ListView, self).__init__(screen, + super(Dashboard, self).__init__(screen, screen.height, screen.width, hover_focus=True, @@ -458,41 +470,14 @@ class Show_paste(Frame): for i in range(2,self.num_label): self.label_list[i]._text = "" +''' +END SCENES DEFINITION +''' -def demo(screen): - dashboard = ListView(screen) - confirm = Confirm(screen) - action_choice = Action_choice(screen) - show_paste = Show_paste(screen) - scenes = [ - Scene([dashboard], -1, name="dashboard"), - Scene([action_choice], -1, name="action_choice"), - Scene([confirm], -1, name="confirm"), - Scene([show_paste], -1, name="show_paste"), - ] - - # screen.play(scenes) - screen.set_scenes(scenes) - time_cooldown = time.time() - global TABLES - while True: - #Stop on resize - if screen.has_resized(): - screen._scenes[screen._scene_index].exit() - raise ResizeScreenError("Screen resized", screen._scenes[screen._scene_index]) - - if time.time() - time_cooldown > args.refresh: - cleanRedis() - for key, val in fetchQueueData().iteritems(): - TABLES[key] = val - TABLES["logs"] = format_string(printarrayGlob, TABLES_PADDING["logs"]) - if current_selected_value == 0: - dashboard._update(None) - screen.refresh() - time_cooldown = time.time() - screen.draw_next_frame() - time.sleep(0.02) +''' +MANAGE MODULES AND GET INFOS +''' def getPid(module): p = Popen([command_search_pid.format(module+".py")], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) @@ -612,9 +597,6 @@ def kill_module(module, pid): #time.sleep(5) cleanRedis() - - - def fetchQueueData(): all_queue = set() @@ -730,6 +712,44 @@ def format_string(tab, padding_row): printstring.append( (text, the_pid) ) return printstring +''' +END MANAGE +''' + +def demo(screen): + dashboard = Dashboard(screen) + confirm = Confirm(screen) + action_choice = Action_choice(screen) + show_paste = Show_paste(screen) + scenes = [ + Scene([dashboard], -1, name="dashboard"), + Scene([action_choice], -1, name="action_choice"), + Scene([confirm], -1, name="confirm"), + Scene([show_paste], -1, name="show_paste"), + ] + + # screen.play(scenes) + screen.set_scenes(scenes) + time_cooldown = time.time() + global TABLES + while True: + #Stop on resize + if screen.has_resized(): + screen._scenes[screen._scene_index].exit() + raise ResizeScreenError("Screen resized", screen._scenes[screen._scene_index]) + + if time.time() - time_cooldown > args.refresh: + cleanRedis() + for key, val in fetchQueueData().iteritems(): + TABLES[key] = val + TABLES["logs"] = format_string(printarrayGlob, TABLES_PADDING["logs"]) + if current_selected_value == 0: + dashboard._update(None) + screen.refresh() + time_cooldown = time.time() + screen.draw_next_frame() + time.sleep(0.02) + if __name__ == "__main__": From 9199ea3f0eb5b01a77e88ae2a8b0725445be0a71 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 10:04:51 +0100 Subject: [PATCH 12/23] Added comments --- bin/ModulesInformationV2.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 4097fa0b..a020549f 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -27,27 +27,35 @@ command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{ printarrayGlob = [None]*14 lastTimeKillCommand = {} +# Used to pass information through scenes current_selected_value = 0 current_selected_queue = "" current_selected_action = "" current_selected_action = 0 +# Map PID to Queue name (For restart and killing) PID_NAME_DICO = {} +# Tables containing info for the dashboad TABLES = {"running": [], "idle": [], "notRunning": [], "logs": [("No events recorded yet", 0)]} TABLES_TITLES = {"running": "", "idle": "", "notRunning": "", "logs": ""} TABLES_PADDING = {"running": [12, 23, 8, 8, 23, 10, 55, 11, 11, 12], "idle": [9, 23, 8, 12, 50], "notRunning": [9, 23, 35], "logs": [15, 23, 8, 50]} +# Indicator for the health of a queue (green(0), red(2), yellow(1)) QUEUE_STATUS = {} + +# Maintain the state of the CPU objects CPU_TABLE = {} CPU_OBJECT_TABLE = {} +# Path of the current paste for a pid COMPLETE_PASTE_PATH_PER_PID = {} ''' ASCIIMATICS WIDGETS EXTENSION ''' +# Custom listbox class CListBox(ListBox): def __init__(self, queue_name, *args, **kwargs): @@ -88,6 +96,8 @@ class CListBox(ListBox): self._x + self._offset + dx, self._y + i + dy - self._start_line, colour, attr, bg) + + # Pick color depending on queue health if self.queue_name == "running": if QUEUE_STATUS[pid] == 2: queueStatus = Screen.COLOUR_RED @@ -108,10 +118,12 @@ class CListBox(ListBox): # Move up one line in text - use value to trigger on_select. self._line = max(0, self._line - 1) self.value = self._options[self._line][1] + elif len(self._options) > 0 and event.key_code == Screen.KEY_DOWN: # Move down one line in text - use value to trigger on_select. self._line = min(len(self._options) - 1, self._line + 1) self.value = self._options[self._line][1] + elif len(self._options) > 0 and event.key_code == ord(' '): global current_selected_value, current_selected_queue if self.queue_name == "logs": @@ -128,6 +140,7 @@ class CListBox(ListBox): else: # Ignore any other key press. return event + elif isinstance(event, MouseEvent): # Mouse event - rebase coordinates to Frame context. new_event = self._frame.rebase_event(event) @@ -153,6 +166,7 @@ class CListBox(ListBox): return event +# Custom label centered in the middle class CLabel(Label): def __init__(self, label, listTitle=False): super(Label, self).__init__(None, tab_stop=False) @@ -271,7 +285,7 @@ class Confirm(Frame): if current_selected_action == "KILL": kill_module(PID_NAME_DICO[int(current_selected_value)], current_selected_value) else: - count = int(current_selected_amount) + count = int(current_selected_amount) #Number of queue to start if current_selected_queue in ["running", "idle"]: restart_module(PID_NAME_DICO[int(current_selected_value)], count) else: @@ -392,13 +406,12 @@ class Show_paste(Frame): title="Show current paste", reduce_cpu=True) - # Create the form for displaying the list of contacts. layout = Layout([100], fill_frame=True) self.layout = layout self.add_layout(layout) self.label_list = [] - self.num_label = 42 + self.num_label = 42 # Number of line available for displaying the paste for i in range(self.num_label): self.label_list += [Label("THE PASTE CONTENT " + str(i))] layout.add_widget(self.label_list[i]) @@ -426,19 +439,19 @@ class Show_paste(Frame): return paste = Paste.Paste(COMPLETE_PASTE_PATH_PER_PID[current_selected_value]) - old_content = paste.get_p_content()[0:4000] + old_content = paste.get_p_content()[0:4000] # Limit number of char to be displayed #Replace unprintable char by ? content = "" for i, c in enumerate(old_content): - if ord(c) > 127: + if ord(c) > 127: # Used to avoid printing unprintable char content += '?' - elif c == "\t": + elif c == "\t": # Replace tab by 4 spaces content += " " else: content += c - #Print in the correct label + #Print in the correct label, END or more to_print = "" i = 0 for line in content.split("\n"): @@ -448,13 +461,13 @@ class Show_paste(Frame): i += 1 if i > self.num_label - 2: - self.label_list[i]._text = "..." + self.label_list[i]._text = "- ALL PASTE NOT DISPLAYED -" i += 1 else: - self.label_list[i]._text = "- END -" + self.label_list[i]._text = "- END of PASTE -" i += 1 - while i Date: Wed, 15 Feb 2017 10:19:03 +0100 Subject: [PATCH 13/23] Removed useless comments + commented --- bin/ModulesInformationV2.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index a020549f..b8a54dc5 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -526,7 +526,6 @@ def cleanRedis(): inst_time = datetime.datetime.fromtimestamp(int(time.time())) printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], moduleName, pid, "Cleared invalid pid in " + k], 0)) printarrayGlob.pop() - #time.sleep(5) #Error due to resize, interrupted sys call except IOError as e: @@ -547,7 +546,6 @@ def restart_module(module, count=1): def kill_module(module, pid): - #print '' #print '-> trying to kill module:', module if pid is None: @@ -563,7 +561,6 @@ def kill_module(module, pid): lastTimeKillCommand[pid] = int(time.time()) if pid is not None: try: - #os.kill(pid, signal.SIGUSR1) p = psutil.Process(int(pid)) p.terminate() except Exception as e: @@ -587,8 +584,6 @@ def kill_module(module, pid): printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing #1 failed."], 0)) printarrayGlob.pop() - #os.kill(pid, signal.SIGUSR1) - #time.sleep(1) p.terminate() if not p.is_running(): #print module, 'has been killed' @@ -607,9 +602,9 @@ def kill_module(module, pid): inst_time = datetime.datetime.fromtimestamp(int(time.time())) printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing failed, module not found"], 0)) printarrayGlob.pop() - #time.sleep(5) cleanRedis() + def fetchQueueData(): all_queue = set() @@ -705,6 +700,7 @@ def fetchQueueData(): return {"running": printstring1, "idle": printstring2, "notRunning": printstring3} +# Format the input string with its related padding to have collumn like text in CListBox def format_string(tab, padding_row): printstring = [] for row in tab: @@ -741,9 +737,9 @@ def demo(screen): Scene([show_paste], -1, name="show_paste"), ] - # screen.play(scenes) + screen.set_scenes(scenes) - time_cooldown = time.time() + time_cooldown = time.time() # Cooldown before refresh global TABLES while True: #Stop on resize @@ -753,15 +749,17 @@ def demo(screen): if time.time() - time_cooldown > args.refresh: cleanRedis() - for key, val in fetchQueueData().iteritems(): + for key, val in fetchQueueData().iteritems(): #fetch data and put it into the tables TABLES[key] = val TABLES["logs"] = format_string(printarrayGlob, TABLES_PADDING["logs"]) + + #refresh dashboad only if the scene is active (no value selected) if current_selected_value == 0: dashboard._update(None) screen.refresh() time_cooldown = time.time() screen.draw_next_frame() - time.sleep(0.02) + time.sleep(0.02) #time between screen refresh (For UI navigation, not data actualisation) From 0fce3f5d65e448cf18e060251f61e7083ccd1d46 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 10:37:59 +0100 Subject: [PATCH 14/23] Renamed variables + added comments --- bin/ModulesInformationV2.py | 48 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index b8a54dc5..f3c7cf46 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -605,12 +605,13 @@ def kill_module(module, pid): cleanRedis() +# Fetch the data for all queue def fetchQueueData(): all_queue = set() - printarray1 = [] - printarray2 = [] - printarray3 = [] + printarray_running = [] + printarray_idle = [] + printarray_notrunning = [] for queue, card in server.hgetall("queues").iteritems(): all_queue.add(queue) key = "MODULE_" + queue + "_" @@ -621,9 +622,11 @@ def fetchQueueData(): value = server.get(key + str(moduleNum)) complete_paste_path = server.get(key + str(moduleNum) + "_PATH") COMPLETE_PASTE_PATH_PER_PID[moduleNum] = complete_paste_path + if value is not None: timestamp, path = value.split(", ") if timestamp is not None and path is not None: + # Queue health startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] if ((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: @@ -633,7 +636,9 @@ def fetchQueueData(): else: QUEUE_STATUS[moduleNum] = 0 + # Queue contain elements if int(card) > 0: + # Queue need to be killed if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: #log = open(log_filename, 'a') #log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") @@ -644,6 +649,7 @@ def fetchQueueData(): if args.autokill == 1 and last_kill_try > kill_retry_threshold : kill_module(queue, int(moduleNum)) + # Create CPU objects try: cpu_percent = CPU_OBJECT_TABLE[int(moduleNum)].cpu_percent() CPU_TABLE[moduleNum].insert(1, cpu_percent) @@ -663,42 +669,45 @@ def fetchQueueData(): cpu_avg = cpu_percent mem_percent = 0 - array_module_type.append( ([" [ ]", str(queue), str(moduleNum), str(card), str(startTime_readable), str(processed_time_readable), str(path), "{0:.2f}".format(cpu_percent)+"%", "{0:.2f}".format(mem_percent)+"%", "{0:.2f}".format(cpu_avg)+"%"], moduleNum) ) + array_module_type.append( ([" [ ]", str(queue), str(moduleNum), str(card), str(startTime_readable), + str(processed_time_readable), str(path), "{0:.2f}".format(cpu_percent)+"%", + "{0:.2f}".format(mem_percent)+"%", "{0:.2f}".format(cpu_avg)+"%"], moduleNum) ) else: - printarray2.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) + printarray_idle.append( ([" ", str(queue), str(moduleNum), str(processed_time_readable), str(path)], moduleNum) ) + PID_NAME_DICO[int(moduleNum)] = str(queue) - array_module_type.sort(lambda x,y: cmp(x[0][4], y[0][4]), reverse=True) + array_module_type.sort(lambda x,y: cmp(x[0][4], y[0][4]), reverse=True) #Sort by num of pastes for e in array_module_type: - printarray1.append(e) + printarray_running.append(e) for curr_queue in module_file_array: - if curr_queue not in all_queue: - printarray3.append( ([" ", curr_queue, "Not running by default"], curr_queue) ) - else: + if curr_queue not in all_queue: #Module not running by default + printarray_notrunning.append( ([" ", curr_queue, "Not running by default"], curr_queue) ) + else: #Module did not process anything yet if len(list(server.smembers('MODULE_TYPE_'+curr_queue))) == 0: if curr_queue not in no_info_modules: no_info_modules[curr_queue] = int(time.time()) - printarray3.append( ([" ", curr_queue, "No data"], curr_queue) ) + printarray_notrunning.append( ([" ", curr_queue, "No data"], curr_queue) ) else: #If no info since long time, try to kill if args.autokill == 1: if int(time.time()) - no_info_modules[curr_queue] > args.treshold: kill_module(curr_queue, None) no_info_modules[curr_queue] = int(time.time()) - printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], curr_queue) ) + printarray_notrunning.append( ([" ", curr_queue, "Stuck or idle, restarting in " + str(abs(args.treshold - (int(time.time()) - no_info_modules[curr_queue]))) + "s"], curr_queue) ) else: - printarray3.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], curr_queue) ) + printarray_notrunning.append( ([" ", curr_queue, "Stuck or idle, restarting disabled"], curr_queue) ) - printarray1.sort(key=lambda x: x[0], reverse=False) - printarray2.sort(key=lambda x: x[0], reverse=False) + printarray_running.sort(key=lambda x: x[0], reverse=False) + printarray_idle.sort(key=lambda x: x[0], reverse=False) - printstring1 = format_string(printarray1, TABLES_PADDING["running"]) - printstring2 = format_string(printarray2, TABLES_PADDING["idle"]) - printstring3 = format_string(printarray3, TABLES_PADDING["notRunning"]) + printstring_running = format_string(printarray_running, TABLES_PADDING["running"]) + printstring_idle = format_string(printarray_idle, TABLES_PADDING["idle"]) + printstring_notrunning = format_string(printarray_notrunning, TABLES_PADDING["notRunning"]) - return {"running": printstring1, "idle": printstring2, "notRunning": printstring3} + return {"running": printstring_running, "idle": printstring_idle, "notRunning": printstring_notrunning} # Format the input string with its related padding to have collumn like text in CListBox def format_string(tab, padding_row): @@ -762,7 +771,6 @@ def demo(screen): time.sleep(0.02) #time between screen refresh (For UI navigation, not data actualisation) - if __name__ == "__main__": parser = argparse.ArgumentParser(description='Show info concerning running modules and log suspected stucked modules. May be use to automatically kill and restart stucked one.') From b84194542d8a7268a4b9704479cb8fdfd04a3f23 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 10:57:41 +0100 Subject: [PATCH 15/23] Moved logging into a function --- bin/ModulesInformationV2.py | 48 ++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index f3c7cf46..150e0397 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -24,7 +24,7 @@ command_search_pid = "ps a -o pid,cmd | grep {}" command_search_name = "ps a -o pid,cmd | grep {}" command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" -printarrayGlob = [None]*14 +printarrayLog = [None]*14 lastTimeKillCommand = {} # Used to pass information through scenes @@ -505,8 +505,7 @@ def clearRedisModuleInfo(): for k in server.keys("MODULE_*"): server.delete(k) inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], "*", "-", "Cleared redis module info"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], "*", "-", "Cleared redis module info"], 0)) def cleanRedis(): for k in server.keys("MODULE_TYPE_*"): @@ -524,15 +523,12 @@ def cleanRedis(): #print flag_pid_valid, 'cleaning', pid, 'in', k server.srem(k, pid) inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], moduleName, pid, "Cleared invalid pid in " + k], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], moduleName, pid, "Cleared invalid pid in " + k], 0)) #Error due to resize, interrupted sys call except IOError as e: inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], " - ", " - ", "Cleaning fail due to resize."], 0)) - printarrayGlob.pop() - pass + log(([str(inst_time).split(' ')[1], " - ", " - ", "Cleaning fail due to resize."], 0)) def restart_module(module, count=1): @@ -540,9 +536,7 @@ def restart_module(module, count=1): p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) time.sleep(0.2) inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, "?", "Restarted " + str(count) + "x"], 0)) - printarrayGlob.pop() - + log(([str(inst_time).split(' ')[1], module, "?", "Restarted " + str(count) + "x"], 0)) def kill_module(module, pid): @@ -551,8 +545,7 @@ def kill_module(module, pid): if pid is None: #print 'pid was None' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "PID was None"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "PID was None"], 0)) pid = getPid(module) else: #Verify that the pid is at least in redis if server.exists("MODULE_"+module+"_"+str(pid)) == 0: @@ -566,42 +559,36 @@ def kill_module(module, pid): except Exception as e: #print pid, 'already killed' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Already killed"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "Already killed"], 0)) return time.sleep(0.2) if not p.is_running(): #print module, 'has been killed' #print 'restarting', module, '...' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) #restart_module(module) else: #print 'killing failed, retrying...' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing #1 failed."], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "Killing #1 failed."], 0)) p.terminate() if not p.is_running(): #print module, 'has been killed' #print 'restarting', module, '...' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "Killed"], 0)) #restart_module(module) else: #print 'killing failed!' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing failed!"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "Killing failed!"], 0)) else: #print 'Module does not exist' inst_time = datetime.datetime.fromtimestamp(int(time.time())) - printarrayGlob.insert(0, ([str(inst_time).split(' ')[1], module, pid, "Killing failed, module not found"], 0)) - printarrayGlob.pop() + log(([str(inst_time).split(' ')[1], module, pid, "Killing failed, module not found"], 0)) cleanRedis() @@ -640,7 +627,7 @@ def fetchQueueData(): if int(card) > 0: # Queue need to be killed if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: - #log = open(log_filename, 'a') + log(([time.time(), queue, "-", "ST:"+timestamp+" PT:"+time.time()-timestamp], 0), True) #log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") try: last_kill_try = time.time() - lastTimeKillCommand[moduleNum] @@ -730,6 +717,13 @@ def format_string(tab, padding_row): printstring.append( (text, the_pid) ) return printstring +def log(data, write_on_disk=False): + printarrayLog.insert(0, data) + printarrayLog.pop() + if write_on_disk: + with open(log_filename, 'a') as log: + log.write(json.dumps(data[0]) + "\n") + ''' END MANAGE ''' @@ -760,7 +754,7 @@ def demo(screen): cleanRedis() for key, val in fetchQueueData().iteritems(): #fetch data and put it into the tables TABLES[key] = val - TABLES["logs"] = format_string(printarrayGlob, TABLES_PADDING["logs"]) + TABLES["logs"] = format_string(printarrayLog, TABLES_PADDING["logs"]) #refresh dashboad only if the scene is active (no value selected) if current_selected_value == 0: From 7fc9ba18d7ceb4e68bb11c3424f1874837d9f5d4 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 11:01:11 +0100 Subject: [PATCH 16/23] Added support of ENTER for navigation --- bin/ModulesInformationV2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 150e0397..bd5f4f83 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -124,7 +124,7 @@ class CListBox(ListBox): self._line = min(len(self._options) - 1, self._line + 1) self.value = self._options[self._line][1] - elif len(self._options) > 0 and event.key_code == ord(' '): + elif len(self._options) > 0 and event.key_code in [ord(' '), ord('\n')] : global current_selected_value, current_selected_queue if self.queue_name == "logs": return event From a9fc0f07bfcd6ac892e98b32ddba3c6ea488e331 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 11:20:04 +0100 Subject: [PATCH 17/23] Added all_modules file --- all_modules.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 all_modules.txt diff --git a/all_modules.txt b/all_modules.txt new file mode 100644 index 00000000..010429b4 --- /dev/null +++ b/all_modules.txt @@ -0,0 +1,26 @@ +Global +Duplicates +Indexer +Attributes +Lines +DomClassifier +Tokenize +Curve +CurveManageTopSets +Categ +CreditCards +Mail +Onion +DumpValidOnion +Web +WebStats +SQLInjectionDetection +ModuleStats +Browse_warning_paste +SentimentAnalysis +Release +Credential +Cve +Phone +SourceCode +Keys From 1b0d9d950782fcaa7369565cff59316526659c0a Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 13:42:21 +0100 Subject: [PATCH 18/23] Fixed str and int concat + Added sorting by queue name in queue not running --- bin/ModulesInformationV2.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index bd5f4f83..7a33a311 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -240,7 +240,7 @@ class Dashboard(Frame): layout2.add_widget(CLabel(TABLES_TITLES["idle"], listTitle=True), 0) layout2.add_widget(self._list_view_idle_queue, 0) #Non Running Queues - text_nq = CLabel("No Running Queues") + text_nq = CLabel("Queues not running") layout2.add_widget(text_nq, 1) layout2.add_widget(CLabel(TABLES_TITLES["notRunning"], listTitle=True), 1) layout2.add_widget(self._list_view_noRunning, 1) @@ -627,7 +627,7 @@ def fetchQueueData(): if int(card) > 0: # Queue need to be killed if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: - log(([time.time(), queue, "-", "ST:"+timestamp+" PT:"+time.time()-timestamp], 0), True) + log(([str(time.time()), queue, "-", "ST:"+str(timestamp)+" PT:"+str(time.time()-timestamp)], 0), True) #log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") try: last_kill_try = time.time() - lastTimeKillCommand[moduleNum] @@ -689,6 +689,7 @@ def fetchQueueData(): printarray_running.sort(key=lambda x: x[0], reverse=False) printarray_idle.sort(key=lambda x: x[0], reverse=False) + printarray_notrunning.sort(key=lambda x: x[0][1], reverse=False) printstring_running = format_string(printarray_running, TABLES_PADDING["running"]) printstring_idle = format_string(printarray_idle, TABLES_PADDING["idle"]) From 85a6f6fa6328640f3b628fe67322a5b05009b7a3 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 15 Feb 2017 16:30:31 +0100 Subject: [PATCH 19/23] Fixed a bug (str+float) --- bin/ModulesInformationV2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 7a33a311..1b548734 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -627,7 +627,7 @@ def fetchQueueData(): if int(card) > 0: # Queue need to be killed if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: - log(([str(time.time()), queue, "-", "ST:"+str(timestamp)+" PT:"+str(time.time()-timestamp)], 0), True) + log(([str(time.time()), queue, "-", "ST:"+str(timestamp)+" PT:"+str(time.time()-float(timestamp))], 0), True) #log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") try: last_kill_try = time.time() - lastTimeKillCommand[moduleNum] From ccdf2563830e3ed75365b61d7cb94b21b84054c2 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 28 Feb 2017 10:21:27 +0100 Subject: [PATCH 20/23] Added possibility to show or not in dashboard text that is logged --- bin/ModulesInformationV2.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 1b548734..22795409 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -627,8 +627,7 @@ def fetchQueueData(): if int(card) > 0: # Queue need to be killed if int((datetime.datetime.now() - startTime_readable).total_seconds()) > args.treshold: - log(([str(time.time()), queue, "-", "ST:"+str(timestamp)+" PT:"+str(time.time()-float(timestamp))], 0), True) - #log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") + log(([str(time.time()), queue, "-", "ST:"+str(timestamp)+" PT:"+str(time.time()-float(timestamp))], 0), True, show_in_board=False) try: last_kill_try = time.time() - lastTimeKillCommand[moduleNum] except KeyError: @@ -718,9 +717,10 @@ def format_string(tab, padding_row): printstring.append( (text, the_pid) ) return printstring -def log(data, write_on_disk=False): - printarrayLog.insert(0, data) - printarrayLog.pop() +def log(data, write_on_disk=False, show_in_board=True): + if show_in_board: + printarrayLog.insert(0, data) + printarrayLog.pop() if write_on_disk: with open(log_filename, 'a') as log: log.write(json.dumps(data[0]) + "\n") From 975c1a37d984d4dd82c391e45c37e806d257e717 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 28 Feb 2017 10:23:22 +0100 Subject: [PATCH 21/23] ModuleInformation create the all_modules files if missing --- bin/ModulesInformationV2.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 22795409..25d0e74d 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -799,10 +799,18 @@ if __name__ == "__main__": module_file_array = set() no_info_modules = {} path_allmod = os.path.join(os.environ['AIL_HOME'], 'doc/all_modules.txt') - with open(path_allmod, 'r') as module_file: - for line in module_file: - module_file_array.add(line[:-1]) + try: + with open(path_allmod, 'r') as module_file: + for line in module_file: + module_file_array.add(line[:-1]) + except IOError as e: + if e.errno == 2: #module_file not found, creating a new one + print(path_allmod + " not found.\nCreating a new one.") + os.system("./../doc/generate_modules_data_flow_graph.sh") + with open(path_allmod, 'r') as module_file: + for line in module_file: + module_file_array.add(line[:-1]) cleanRedis() From 75b4037519de4a7dd639689df8d6aaa27283e745 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 28 Feb 2017 11:11:17 +0100 Subject: [PATCH 22/23] Fixed bug - If we move the cursor from a line that has dissapear --- bin/ModulesInformationV2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index 25d0e74d..b43edeb7 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -117,6 +117,7 @@ class CListBox(ListBox): if len(self._options) > 0 and event.key_code == Screen.KEY_UP: # Move up one line in text - use value to trigger on_select. self._line = max(0, self._line - 1) + self._line = min(self._line, len(self._options)-1) #If we move a line cursor from a line that has dissapear self.value = self._options[self._line][1] elif len(self._options) > 0 and event.key_code == Screen.KEY_DOWN: From a2849c1bcd9b162863415450b074dc1ff2fc7c7c Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Tue, 28 Feb 2017 16:13:01 +0100 Subject: [PATCH 23/23] Added a catch for psutils if process get stopped by user --- bin/ModulesInformationV2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/ModulesInformationV2.py b/bin/ModulesInformationV2.py index b43edeb7..09a0fa85 100755 --- a/bin/ModulesInformationV2.py +++ b/bin/ModulesInformationV2.py @@ -644,6 +644,12 @@ def fetchQueueData(): if len(CPU_TABLE[moduleNum]) > args.refresh*10: CPU_TABLE[moduleNum].pop() mem_percent = CPU_OBJECT_TABLE[int(moduleNum)].memory_percent() + except psutil.NoSuchProcess: + del CPU_OBJECT_TABLE[int(moduleNum)] + del CPU_TABLE[moduleNum] + cpu_percent = 0 + cpu_avg = cpu_percent + mem_percent = 0 except KeyError: try: CPU_OBJECT_TABLE[int(moduleNum)] = psutil.Process(int(moduleNum))